Version 1.16.0-dev.5.0

Merge commit 'c0096e6f0c6c9aa9e2ce79df25debf5c91f95caa' into dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 11e8853..5497a37 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,10 +2,15 @@
 
 ### Core library changes
 
+* `dart:convert`
+  * Added `BASE64URL` codec and corresponding `Base64Codec.urlSafe` constructor.
 * `dart:io`
   * Added `SecurityContext.alpnSupported`, which is true if a platform
     supports ALPN, and false otherwise.
 
+* `dart:convert`
+  * Introduce `ChunkedConverter` and deprecate chunked methods on `Converter`.
+
 ### Analyzer
 
 *   Static checking of `for in` statements. These will now produce static
diff --git a/DEPS b/DEPS
index 3888a04..9ae0509 100644
--- a/DEPS
+++ b/DEPS
@@ -56,7 +56,7 @@
   "intl_rev": "@a8b480b9c436f6c0ec16730804c914bdb4e30d53",
   "jinja2_rev": "@2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "@2.0.0",
-  "linter_rev": "@ca7c6b3f1085cf302c4726598704d36cf240695f",
+  "linter_rev": "@bcd4cf615665a80edf3f9a924388e59644a667cd",
   "logging_rev": "@85d83e002670545e9039ad3985f0018ab640e597",
   "markdown_rev": "@4aaadf3d940bb172e1f6285af4d2b1710d309982",
   "matcher_tag": "@0.12.0",
@@ -71,6 +71,7 @@
   "ply_rev": "@604b32590ffad5cbb82e4afef1d305512d06ae93",
   "plugin_tag": "@0.1.0",
   "pool_tag": "@1.2.1",
+  "protobuf_tag": "@0.5.0+1",
   "pub_rev": "@c1405b945c6d818c8cfe78334e8d4b11fd913103",
   "pub_cache_tag": "@v0.1.0",
   "pub_semver_tag": "@1.2.1",
@@ -225,6 +226,8 @@
       (Var("github_mirror") % "plugin") + Var("plugin_tag"),
   Var("dart_root") + "/third_party/pkg/pool":
       (Var("github_mirror") % "pool") + Var("pool_tag"),
+  Var("dart_root") + "/third_party/pkg/protobuf":
+      (Var("github_dartlang") % "dart-protobuf") + Var("protobuf_tag"),
   Var("dart_root") + "/third_party/pkg/pub_semver":
       (Var("github_mirror") % "pub_semver") + Var("pub_semver_tag"),
   Var("dart_root") + "/third_party/pkg/pub":
diff --git a/pkg/analysis_server/benchmark/integration/input_converter.dart b/pkg/analysis_server/benchmark/integration/input_converter.dart
index f619845..d743d6c 100644
--- a/pkg/analysis_server/benchmark/integration/input_converter.dart
+++ b/pkg/analysis_server/benchmark/integration/input_converter.dart
@@ -271,7 +271,9 @@
  * into a series of operations to be sent to the analysis server.
  * The input stream can be either an instrumenation or log file.
  */
-class InputConverter extends Converter<String, Operation> {
+class InputConverter
+    extends ChunkedConverter<String, Operation, String, Operation> {
+
   final Logger logger = new Logger('InputConverter');
 
   /**
diff --git a/pkg/analysis_server/lib/src/channel/channel.dart b/pkg/analysis_server/lib/src/channel/channel.dart
index f3e473d..bee6f35 100644
--- a/pkg/analysis_server/lib/src/channel/channel.dart
+++ b/pkg/analysis_server/lib/src/channel/channel.dart
@@ -85,12 +85,13 @@
  * Instances of the class [JsonStreamDecoder] convert JSON strings to JSON
  * maps.
  */
-class JsonStreamDecoder extends Converter<String, Map> {
+class JsonStreamDecoder extends
+    ChunkedConverter<String, Map, String, Map> {
   @override
   Map convert(String text) => JSON.decode(text);
 
   @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
+  ChunkedConversionSink<String> startChunkedConversion(Sink<Map> sink) =>
       new ChannelChunkSink<String, Map>(this, sink);
 }
 
@@ -98,24 +99,26 @@
  * Instances of the class [NotificationConverter] convert JSON maps to
  * [Notification]s.
  */
-class NotificationConverter extends Converter<Map, Notification> {
+class NotificationConverter extends
+    ChunkedConverter<Map, Notification, Map, Notification> {
   @override
   Notification convert(Map json) => new Notification.fromJson(json);
 
   @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
+  ChunkedConversionSink<Map> startChunkedConversion(Sink<Notification> sink) =>
       new ChannelChunkSink<Map, Notification>(this, sink);
 }
 
 /**
  * Instances of the class [ResponseConverter] convert JSON maps to [Response]s.
  */
-class ResponseConverter extends Converter<Map, Response> {
+class ResponseConverter extends
+    ChunkedConverter<Map, Response, Map, Response> {
   @override
   Response convert(Map json) => new Response.fromJson(json);
 
   @override
-  ChunkedConversionSink startChunkedConversion(Sink sink) =>
+  ChunkedConversionSink<Map> startChunkedConversion(Sink<Response> sink) =>
       new ChannelChunkSink<Map, Response>(this, sink);
 }
 
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 13f2052..3afe0f2 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -46,11 +46,6 @@
  */
 class ContextInfo {
   /**
-   * The [ContextManager] which is tracking this information.
-   */
-  final ContextManagerImpl contextManager;
-
-  /**
    * The [Folder] for which this information object is created.
    */
   final Folder folder;
@@ -102,8 +97,7 @@
 
   ContextInfo(ContextManagerImpl contextManager, this.parent, Folder folder,
       File packagespecFile, this.packageRoot)
-      : contextManager = contextManager,
-        folder = folder,
+      : folder = folder,
         pathFilter = new PathFilter(
             folder.path, null, contextManager.resourceProvider.pathContext) {
     packageDescriptionPath = packagespecFile.path;
@@ -115,8 +109,7 @@
    * [ContextInfo]s.
    */
   ContextInfo._root()
-      : contextManager = null,
-        folder = null,
+      : folder = null,
         pathFilter = null;
 
   /**
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 138c20f..5c86115 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -43,7 +43,14 @@
             .add(newAnalysisError_fromEngine(lineInfo, error, severity));
       }
     } else {
-      serverErrors.add(newAnalysisError_fromEngine(lineInfo, error));
+      AnalysisError error2 = newAnalysisError_fromEngine(lineInfo, error);
+      bool isStrongMode = context.analysisOptions.strongMode;
+      if (isStrongMode &&
+          error is engine.StaticWarningCode &&
+          (error as engine.StaticWarningCode).isStrongModeError) {
+        error2.severity = AnalysisErrorSeverity.ERROR;
+      }
+      serverErrors.add(error2);
     }
   }
   return serverErrors;
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
index e3a8f0b..54529b8 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/arglist_contributor.dart
@@ -262,14 +262,14 @@
     Iterable<String> namedArgs = _namedArgs(request);
     for (ParameterElement param in parameters) {
       if (param.parameterKind == ParameterKind.NAMED) {
-        _addNamedParameterSuggestion(
-            request, namedArgs, param.name, appendComma);
+        _addNamedParameterSuggestion(request, namedArgs, param.name,
+            param.type?.displayName, appendComma);
       }
     }
   }
 
   void _addNamedParameterSuggestion(DartCompletionRequest request,
-      List<String> namedArgs, String name, bool appendComma) {
+      List<String> namedArgs, String name, String paramType, bool appendComma) {
     if (name != null && name.length > 0 && !namedArgs.contains(name)) {
       String completion = '$name: ';
       if (appendComma) {
@@ -282,7 +282,9 @@
           completion.length,
           0,
           false,
-          false));
+          false,
+          parameterName: name,
+          parameterType: paramType));
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
index 6a8c367..4651491 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/imported_reference_contributor.dart
@@ -10,6 +10,7 @@
 import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
 import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
 import 'package:analysis_server/src/services/completion/dart/optype.dart';
+import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/generated/resolver.dart';
 
@@ -53,6 +54,20 @@
       return EMPTY_LIST;
     }
 
+    // If the target is in an expression
+    // then resolve the outermost/entire expression
+    AstNode node = request.target.containingNode;
+    if (node is Expression) {
+      while (node.parent is Expression) {
+        node = node.parent;
+      }
+      await request.resolveExpression(node);
+
+      // Discard any cached target information
+      // because it may have changed as a result of the resolution
+      node = request.target.containingNode;
+    }
+
     this.request = request;
     this.optype = (request as DartCompletionRequestImpl).opType;
     List<CompletionSuggestion> suggestions = <CompletionSuggestion>[];
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 2867beb..5ba7fa1 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -13,6 +13,8 @@
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
+import 'package:analysis_server/src/services/completion/dart/completion_manager.dart';
+import 'package:analysis_server/src/services/completion/dart/optype.dart';
 
 const ASYNC = 'async';
 const ASYNC_STAR = 'async*';
@@ -50,6 +52,13 @@
 
   @override
   visitArgumentList(ArgumentList node) {
+    if (request is DartCompletionRequestImpl) {
+      //TODO(danrubel) consider adding opType to the API then remove this cast
+      OpType opType = (request as DartCompletionRequestImpl).opType;
+      if (opType.includeOnlyNamedArgumentSuggestions) {
+        return;
+      }
+    }
     if (entity == node.rightParenthesis) {
       _addExpressionKeywords(node);
       Token previous = (entity as Token).previous;
@@ -149,8 +158,12 @@
           !node.directives.any((d) => d is LibraryDirective)) {
         _addSuggestions([Keyword.LIBRARY], DART_RELEVANCE_HIGH);
       }
-      _addSuggestions(
-          [Keyword.IMPORT, Keyword.EXPORT, Keyword.PART], DART_RELEVANCE_HIGH);
+      _addSuggestion2('${Keyword.IMPORT.syntax} \'\';',
+          offset: 8, relevance: DART_RELEVANCE_HIGH);
+      _addSuggestion2('${Keyword.EXPORT.syntax} \'\';',
+          offset: 8, relevance: DART_RELEVANCE_HIGH);
+      _addSuggestion2('${Keyword.PART.syntax} \'\';',
+          offset: 6, relevance: DART_RELEVANCE_HIGH);
     }
     if (entity == null || entity is Declaration) {
       if (previousMember is FunctionDeclaration &&
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
index 7f04c6b..68beb6a 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
@@ -44,7 +44,11 @@
   @override
   void visitClassElement(ClassElement element) {
     if (optype.includeTypeNameSuggestions) {
-      addSuggestion(element, prefix: prefix, relevance: DART_RELEVANCE_DEFAULT);
+      // if includeTypeNameSuggestions, then use the filter
+      if (optype.typeNameSuggestionsFilter(element.type)) {
+        addSuggestion(element,
+            prefix: prefix, relevance: DART_RELEVANCE_DEFAULT);
+      }
     }
     if (optype.includeConstructorSuggestions) {
       _addConstructorSuggestions(element, DART_RELEVANCE_DEFAULT);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index 6c20b0b9..8d613ce 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -17,6 +17,8 @@
 import 'package:analysis_server/src/services/correction/strings.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart' show ParameterKind;
@@ -155,9 +157,19 @@
       if (optype.includeReturnValueSuggestions ||
           optype.includeTypeNameSuggestions ||
           optype.includeVoidReturnSuggestions) {
-        _LocalVisitor visitor =
-            new _LocalVisitor(request, request.offset, optype);
+        // If the target is in an expression
+        // then resolve the outermost/entire expression
         AstNode node = request.target.containingNode;
+        if (node is Expression) {
+          while (node.parent is Expression) {
+            node = node.parent;
+          }
+          await request.resolveExpression(node);
+
+          // Discard any cached target information
+          // because it may have changed as a result of the resolution
+          node = request.target.containingNode;
+        }
 
         // Do not suggest local vars within the current expression
         while (node is Expression) {
@@ -170,6 +182,8 @@
           node = node.parent;
         }
 
+        _LocalVisitor visitor =
+            new _LocalVisitor(request, request.offset, optype);
         visitor.visit(node);
         return visitor.suggestions;
       }
@@ -388,7 +402,14 @@
           suggestion.completion.startsWith('_')) {
         suggestion.relevance = privateMemberRelevance;
       }
-      suggestionMap.putIfAbsent(suggestion.completion, () => suggestion);
+      // if includeTypeNameSuggestions, then use the filter
+      if (optype.includeTypeNameSuggestions) {
+        if (optype.typeNameSuggestionsFilter(_staticTypeOfIdentifier(id))) {
+          suggestionMap.putIfAbsent(suggestion.completion, () => suggestion);
+        }
+      } else {
+        suggestionMap.putIfAbsent(suggestion.completion, () => suggestion);
+      }
       suggestion.element = _createLocalElement(request.source, elemKind, id,
           isAbstract: isAbstract,
           isDeprecated: isDeprecated,
@@ -448,4 +469,12 @@
     }
     return false;
   }
+
+  DartType _staticTypeOfIdentifier(Identifier id) {
+    if (id.staticElement is ClassElement) {
+      return (id.staticElement as ClassElement).type;
+    } else {
+      return id.staticType;
+    }
+  }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/optype.dart b/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
index e61845e..d5f206c 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/optype.dart
@@ -4,12 +4,15 @@
 
 library services.completion.dart.optype;
 
-import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
+import 'package:analyzer/src/generated/utilities_dart.dart';
 
 /**
  * An [AstVisitor] for determining whether top level suggestions or invocation
@@ -28,6 +31,13 @@
   bool includeTypeNameSuggestions = false;
 
   /**
+   * If [includeTypeNameSuggestions] is set to true, then this function may be
+   * set to the non-default function to filter out potential suggestions based
+   * on their static [DartType].
+   */
+  Function typeNameSuggestionsFilter = (DartType _) => true;
+
+  /**
    * Indicates whether setters along with methods and functions that
    * have a [void] return type should be suggested.
    */
@@ -40,6 +50,11 @@
   bool includeReturnValueSuggestions = false;
 
   /**
+   * Indicates whether named arguments should be suggested.
+   */
+  bool includeNamedArgumentSuggestions = false;
+
+  /**
    * Indicates whether statement labels should be suggested.
    */
   bool includeStatementLabelSuggestions = false;
@@ -86,6 +101,16 @@
    */
   bool get includeOnlyTypeNameSuggestions =>
       includeTypeNameSuggestions &&
+      !includeNamedArgumentSuggestions &&
+      !includeReturnValueSuggestions &&
+      !includeVoidReturnSuggestions;
+
+  /**
+   * Indicate whether only type names should be suggested
+   */
+  bool get includeOnlyNamedArgumentSuggestions =>
+      includeNamedArgumentSuggestions &&
+      !includeTypeNameSuggestions &&
       !includeReturnValueSuggestions &&
       !includeVoidReturnSuggestions;
 }
@@ -123,6 +148,31 @@
 
   @override
   void visitArgumentList(ArgumentList node) {
+    AstNode parent = node.parent;
+    if (parent is InvocationExpression) {
+      Expression function = parent.function;
+      if (function is SimpleIdentifier) {
+        var elem = function.bestElement;
+        if (elem is FunctionTypedElement) {
+          List<ParameterElement> parameters = elem.parameters;
+          if (parameters != null) {
+            int index =
+                node.arguments.isEmpty ? 0 : node.arguments.indexOf(entity);
+            if (0 <= index && index < parameters.length) {
+              ParameterElement param = parameters[index];
+              if (param?.parameterKind == ParameterKind.NAMED) {
+                optype.includeNamedArgumentSuggestions = true;
+                return;
+              }
+            }
+          }
+        } else if (elem == null) {
+          // If unresolved, then include named arguments
+          optype.includeNamedArgumentSuggestions = true;
+          // fall through to include others as well
+        }
+      }
+    }
     optype.includeReturnValueSuggestions = true;
     optype.includeTypeNameSuggestions = true;
   }
@@ -131,10 +181,11 @@
   void visitAsExpression(AsExpression node) {
     if (identical(entity, node.type)) {
       optype.includeTypeNameSuggestions = true;
-      // TODO (danrubel) Possible future improvement:
-      // on the RHS of an "is" or "as" expression, don't suggest types that are
-      // guaranteed to pass or guaranteed to fail the cast.
-      // See dartbug.com/18860
+      optype.typeNameSuggestionsFilter = (DartType dartType) {
+        DartType staticType = node.expression.staticType;
+        return staticType.isDynamic ||
+            (dartType.isSubtypeOf(staticType) && dartType != staticType);
+      };
     }
   }
 
@@ -452,10 +503,11 @@
   void visitIsExpression(IsExpression node) {
     if (identical(entity, node.type)) {
       optype.includeTypeNameSuggestions = true;
-      // TODO (danrubel) Possible future improvement:
-      // on the RHS of an "is" or "as" expression, don't suggest types that are
-      // guaranteed to pass or guaranteed to fail the cast.
-      // See dartbug.com/18860
+      optype.typeNameSuggestionsFilter = (DartType dartType) {
+        DartType staticType = node.expression.staticType;
+        return staticType.isDynamic ||
+            (dartType.isSubtypeOf(staticType) && dartType != staticType);
+      };
     }
   }
 
diff --git a/pkg/analysis_server/test/completion_test.dart b/pkg/analysis_server/test/completion_test.dart
index f2cd236..2a453eb 100644
--- a/pkg/analysis_server/test/completion_test.dart
+++ b/pkg/analysis_server/test/completion_test.dart
@@ -2655,19 +2655,20 @@
 !4part 'x';''',
         <String>[
           "1+library",
-          "2+import",
-          "3+export",
-          "4+part",
+          "2+import \'\';",
+          "3+export \'\';",
+          "4+part \'\';",
           "5+as",
           "6+hide",
           "7+show",
           "8-null"
         ],
-        failingTests: '567');
+        failingTests: '234567'); //TODO(jwren) 234 failing as correct selection
+        // offset assertions can't be passed into buildTests(..)
 
     // keywords
     buildTests('test018', '''!1part !2of foo;''', <String>["1+part", "2+of"],
-        failingTests: '2');
+        failingTests: '12');
 
     buildTests(
         'test019',
@@ -2905,7 +2906,7 @@
 
     // test analysis of untyped fields and top-level vars
     buildTests('test039', '''class X{}var x = null as !1X;''',
-        <String>["1+X", "1-void"]);
+        <String>["1-void"]);
 
     // test arg lists with named params
     buildTests('test040', '''m(){f(a, b, {x1, x2, y}) {};f(1, 2, !1)!2;}''',
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index edce0d5..ec7c520 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -28,6 +28,55 @@
 
 @reflectiveTest
 class CompletionDomainHandlerTest extends AbstractCompletionDomainTest {
+  test_ArgumentList_imported_function_named_param() async {
+    addTestFile('main() { int.parse("16", ^);}');
+    await getSuggestions();
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    expect(suggestions, hasLength(2));
+  }
+
+  test_ArgumentList_imported_function_named_param1() async {
+    addTestFile('main() { foo(o^);} foo({one, two}) {}');
+    await getSuggestions();
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'one: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'two: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    expect(suggestions, hasLength(2));
+  }
+
+  test_ArgumentList_imported_function_named_param_label1() async {
+    addTestFile('main() { int.parse("16", r^: 16);}');
+    await getSuggestions();
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    expect(suggestions, hasLength(2));
+  }
+
+  test_ArgumentList_imported_function_named_param_label3() async {
+    addTestFile('main() { int.parse("16", ^: 16);}');
+    await getSuggestions();
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'radix: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'onError: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    expect(suggestions, hasLength(2));
+  }
+
+  test_ArgumentList_imported_function_named_param2() async {
+    addTestFile('mainx() {A a = new A(); a.foo(one: 7, ^);}'
+        'class A { foo({one, two}) {} }');
+    await getSuggestions();
+    assertHasResult(CompletionSuggestionKind.NAMED_ARGUMENT, 'two: ',
+        relevance: DART_RELEVANCE_NAMED_PARAMETER);
+    expect(suggestions, hasLength(1));
+  }
+
   test_html() {
     testFile = '/project/web/test.html';
     addTestFile('''
@@ -140,10 +189,10 @@
     await getSuggestions();
     expect(replacementOffset, completionOffset - 3);
     expect(replacementLength, 3);
-    assertHasResult(CompletionSuggestionKind.KEYWORD, 'export',
-        relevance: DART_RELEVANCE_HIGH);
-    assertHasResult(CompletionSuggestionKind.KEYWORD, 'import',
-        relevance: DART_RELEVANCE_HIGH);
+    assertHasResult(CompletionSuggestionKind.KEYWORD, 'export \'\';',
+        selectionOffset: 8, relevance: DART_RELEVANCE_HIGH);
+    assertHasResult(CompletionSuggestionKind.KEYWORD, 'import \'\';',
+        selectionOffset: 8, relevance: DART_RELEVANCE_HIGH);
     assertNoResult('extends');
     assertNoResult('library');
   }
@@ -174,12 +223,12 @@
     expect(replacementLength, 1);
     assertHasResult(CompletionSuggestionKind.KEYWORD, 'library',
         relevance: DART_RELEVANCE_HIGH);
-    assertHasResult(CompletionSuggestionKind.KEYWORD, 'import',
-        relevance: DART_RELEVANCE_HIGH);
-    assertHasResult(CompletionSuggestionKind.KEYWORD, 'export',
-        relevance: DART_RELEVANCE_HIGH);
-    assertHasResult(CompletionSuggestionKind.KEYWORD, 'part',
-        relevance: DART_RELEVANCE_HIGH);
+    assertHasResult(CompletionSuggestionKind.KEYWORD, 'import \'\';',
+        selectionOffset: 8, relevance: DART_RELEVANCE_HIGH);
+    assertHasResult(CompletionSuggestionKind.KEYWORD, 'export \'\';',
+        selectionOffset: 8, relevance: DART_RELEVANCE_HIGH);
+    assertHasResult(CompletionSuggestionKind.KEYWORD, 'part \'\';',
+        selectionOffset: 6, relevance: DART_RELEVANCE_HIGH);
     assertNoResult('extends');
   }
 
@@ -353,8 +402,8 @@
     return getSuggestions().then((_) {
       expect(replacementOffset, equals(completionOffset - 2));
       expect(replacementLength, equals(2));
-      assertHasResult(CompletionSuggestionKind.KEYWORD, 'export',
-          relevance: DART_RELEVANCE_HIGH);
+      assertHasResult(CompletionSuggestionKind.KEYWORD, 'export \'\';',
+          selectionOffset: 8, relevance: DART_RELEVANCE_HIGH);
       assertHasResult(CompletionSuggestionKind.KEYWORD, 'class',
           relevance: DART_RELEVANCE_HIGH);
     });
diff --git a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
index c435848..db17859 100644
--- a/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/arglist_contributor_test.dart
@@ -77,16 +77,19 @@
   }
 
   /**
-   * Assert that the specified named argument suggestions are the only
-   * suggestions.
+   * Assert that the specified named argument suggestions with their types are
+   * the only suggestions.
    */
-  void assertSuggestArguments({List<String> namedArguments}) {
+  void assertSuggestArgumentsAndTypes(
+      {Map<String, String> namedArgumentsWithTypes}) {
     List<CompletionSuggestion> expected = new List<CompletionSuggestion>();
-    for (String name in namedArguments) {
+    namedArgumentsWithTypes.forEach((String name, String type) {
       expected.add(assertSuggest('$name: ',
           csKind: CompletionSuggestionKind.NAMED_ARGUMENT,
-          relevance: DART_RELEVANCE_NAMED_PARAMETER));
-    }
+          relevance: DART_RELEVANCE_NAMED_PARAMETER,
+          paramName: name,
+          paramType: type));
+    });
     assertNoOtherSuggestions(expected);
   }
 
@@ -131,7 +134,8 @@
 library libA; class A { const A({int one, String two: 'defaultValue'}); }''');
     addTestSource('import "/libA.dart"; @A(^) main() { }');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one', 'two']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'one': 'int', 'two': 'String'});
   }
 
   test_Annotation_local_constructor_named_param() async {
@@ -139,7 +143,8 @@
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(^) main() { }''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one', 'two']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'one': 'int', 'two': 'String'});
   }
 
   test_Annotation_local_constructor_named_param_11() async {
@@ -147,7 +152,7 @@
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(two: '2', ^) main() { }''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one']);
+    assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
   test_Annotation_local_constructor_named_param_2() async {
@@ -171,7 +176,7 @@
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(^, two: '2') main() { }''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one']);
+    assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
   test_Annotation_local_constructor_named_param_5() async {
@@ -179,7 +184,7 @@
 class A { const A({int one, String two: 'defaultValue'}); }
 @A(^ , two: '2') main() { }''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one']);
+    assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
   test_Annotation_local_constructor_named_param_6() async {
@@ -187,7 +192,7 @@
 class A { const A(int zero, {int one, String two: 'defaultValue'}); }
 @A(0, ^, two: '2') main() { }''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one']);
+    assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
   test_Annotation_local_constructor_named_param_7() async {
@@ -226,7 +231,7 @@
     addSource('/libA.dart', 'library libA; class A{A({int one}); }');
     addTestSource('import "/libA.dart"; main() { new A(^);}');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one']);
+    assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
   }
 
   test_ArgumentList_imported_constructor_named_param2() async {
@@ -234,7 +239,17 @@
     addSource('/libA.dart', 'library libA; class A{A.foo({int one}); }');
     addTestSource('import "/libA.dart"; main() { new A.foo(^);}');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one']);
+    assertSuggestArgumentsAndTypes(namedArgumentsWithTypes: {'one': 'int'});
+  }
+
+  test_ArgumentList_imported_constructor_named_typed_param() async {
+    //
+    addSource(
+        '/libA.dart', 'library libA; class A { A({int i, String s, d}) {} }}');
+    addTestSource('import "/libA.dart"; main() { var a = new A(^);}');
+    await computeSuggestions();
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'i': 'int', 's': 'String', 'd': 'dynamic'});
   }
 
   test_ArgumentList_imported_function_0() async {
@@ -385,21 +400,24 @@
     //
     addTestSource('main() { int.parse("16", ^);}');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['radix', 'onError']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'radix': 'int', 'onError': '(String) → int'});
   }
 
   test_ArgumentList_imported_function_named_param1() async {
     //
     addTestSource('main() { int.parse("16", r^);}');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['radix', 'onError']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'radix': 'int', 'onError': '(String) → int'});
   }
 
   test_ArgumentList_imported_function_named_param2() async {
     //
     addTestSource('main() { int.parse("16", radix: 7, ^);}');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['onError']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'onError': '(String) → int'});
   }
 
   test_ArgumentList_imported_function_named_param2a() async {
@@ -413,7 +431,8 @@
     //
     addTestSource('main() { int.parse("16", r^: 16);}');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['radix', 'onError']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'radix': 'int', 'onError': '(String) → int'});
   }
 
   test_ArgumentList_imported_function_named_param_label2() async {
@@ -427,7 +446,8 @@
     //
     addTestSource('main() { int.parse("16", ^: 16);}');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['radix', 'onError']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'radix': 'int', 'onError': '(String) → int'});
   }
 
   test_ArgumentList_local_constructor_named_param() async {
@@ -436,7 +456,8 @@
 class A { A({int one, String two: 'defaultValue'}) { } }
 main() { new A(^);}''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one', 'two']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'one': 'int', 'two': 'String'});
   }
 
   test_ArgumentList_local_constructor_named_param2() async {
@@ -445,7 +466,8 @@
 class A { A.foo({int one, String two: 'defaultValue'}) { } }
 main() { new A.foo(^);}''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['one', 'two']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'one': 'int', 'two': 'String'});
   }
 
   test_ArgumentList_local_function_1() async {
@@ -538,7 +560,8 @@
 f(v,{int radix, int onError(String s)}){}
 main() { f("16", ^);}''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['radix', 'onError']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'radix': 'int', 'onError': '(String) → int'});
   }
 
   test_ArgumentList_local_function_named_param1() async {
@@ -547,7 +570,8 @@
 f(v,{int radix, int onError(String s)}){}
 main() { f("16", r^);}''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['radix', 'onError']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'radix': 'int', 'onError': '(String) → int'});
   }
 
   test_ArgumentList_local_function_named_param2() async {
@@ -556,7 +580,8 @@
 f(v,{int radix, int onError(String s)}){}
 main() { f("16", radix: 7, ^);}''');
     await computeSuggestions();
-    assertSuggestArguments(namedArguments: ['onError']);
+    assertSuggestArgumentsAndTypes(
+        namedArgumentsWithTypes: {'onError': '(String) → int'});
   }
 
   test_ArgumentList_local_function_named_param2a() async {
diff --git a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
index 9589874..72a57c7 100644
--- a/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
+++ b/pkg/analysis_server/test/services/completion/dart/completion_contributor_util.dart
@@ -110,7 +110,9 @@
       bool isDeprecated: false,
       bool isPotential: false,
       String elemFile,
-      int elemOffset}) {
+      int elemOffset,
+      String paramName,
+      String paramType}) {
     CompletionSuggestion cs =
         getSuggest(completion: completion, csKind: csKind, elemKind: elemKind);
     if (cs == null) {
@@ -141,6 +143,12 @@
     if (elemOffset != null) {
       expect(cs.element.location.offset, elemOffset);
     }
+    if(paramName != null) {
+      expect(cs.parameterName, paramName);
+    }
+    if(paramType != null) {
+      expect(cs.parameterType, paramType);
+    }
     return cs;
   }
 
diff --git a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
index ff07c34..6b63ce0 100644
--- a/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/imported_reference_contributor_test.dart
@@ -310,7 +310,10 @@
     assertNotSuggested('bar');
     // An unresolved imported library will produce suggestions
     // with a null returnType
-    assertSuggestFunction('hasLength', null);
+    // The current DartCompletionRequest#resolveExpression resolves
+    // the world (which it should not) and causes the imported library
+    // to be resolved.
+    assertSuggestFunction('hasLength',  /* null */ 'bool');
     assertNotSuggested('main');
   }
 
@@ -329,6 +332,54 @@
     assertNotSuggested('==');
   }
 
+  test_AsExpression_type_subtype_extends_filter() async {
+    // SimpleIdentifier  TypeName  AsExpression  IfStatement
+    addSource(
+        '/testB.dart',
+        '''
+          foo() { }
+          class A {} class B extends A {} class C extends B {}
+          class X {X.c(); X._d(); z() {}}''');
+    addTestSource('''
+          import "/testB.dart";
+         main(){A a; if (a as ^)}''');
+
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('B');
+    assertSuggestClass('C');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('a');
+    assertNotSuggested('main');
+  }
+
+  test_AsExpression_type_subtype_implements_filter() async {
+    // SimpleIdentifier  TypeName  AsExpression  IfStatement
+    addSource(
+        '/testB.dart',
+        '''
+          foo() { }
+          class A {} class B implements A {} class C implements B {}
+          class X {X.c(); X._d(); z() {}}''');
+    addTestSource('''
+          import "/testB.dart";
+          main(){A a; if (a as ^)}''');
+
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('B');
+    assertSuggestClass('C');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('a');
+    assertNotSuggested('main');
+  }
+
   test_AssignmentExpression_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
@@ -2588,7 +2639,12 @@
     assertNotSuggested('foo');
     assertNotSuggested('F1');
     assertNotSuggested('F2');
-    assertSuggestTopLevelVar('T1', null);
+    // An unresolved imported library will produce suggestions
+    // with a null returnType
+    // The current DartCompletionRequest#resolveExpression resolves
+    // the world (which it should not) and causes the imported library
+    // to be resolved.
+    assertSuggestTopLevelVar('T1', /* null */ 'int');
     assertNotSuggested('T2');
   }
 
@@ -2796,6 +2852,54 @@
     assertSuggestClass('Object');
   }
 
+  test_IsExpression_type_subtype_extends_filter() async {
+    // SimpleIdentifier  TypeName  IsExpression  IfStatement
+    addSource(
+        '/testB.dart',
+        '''
+        foo() { }
+        class A {} class B extends A {} class C extends B {}
+        class X {X.c(); X._d(); z() {}}''');
+    addTestSource('''
+        import "/testB.dart";
+        main(){A a; if (a is ^)}''');
+
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('B');
+    assertSuggestClass('C');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('a');
+    assertNotSuggested('main');
+  }
+
+  test_IsExpression_type_subtype_implements_filter() async {
+    // SimpleIdentifier  TypeName  IsExpression  IfStatement
+    addSource(
+        '/testB.dart',
+        '''
+        foo() { }
+        class A {} class B implements A {} class C implements B {}
+        class X {X.c(); X._d(); z() {}}''');
+    addTestSource('''
+        import "/testB.dart";
+        main(){A a; if (a is ^)}''');
+
+    await computeSuggestions();
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('B');
+    assertSuggestClass('C');
+    assertNotSuggested('A');
+    assertNotSuggested('X');
+    assertNotSuggested('Object');
+    assertNotSuggested('a');
+    assertNotSuggested('main');
+  }
+
   test_keyword() async {
     resolveSource(
         '/testB.dart',
@@ -2879,9 +2983,14 @@
     expect(replacementOffset, completionOffset);
     expect(replacementLength, 0);
     assertSuggestClass('Object');
-    assertSuggestTopLevelVar('T1', null);
-    assertSuggestFunction('F1', null);
-    assertSuggestFunctionTypeAlias('D1', 'null');
+    // Simulate unresolved imported library,
+    // in which case suggestions will have null return types (unresolved)
+    // The current DartCompletionRequest#resolveExpression resolves
+    // the world (which it should not) and causes the imported library
+    // to be resolved.
+    assertSuggestTopLevelVar('T1', /* null */ 'int');
+    assertSuggestFunction('F1', /* null */ 'dynamic');
+    assertSuggestFunctionTypeAlias('D1', /* null */ 'dynamic');
     assertSuggestClass('C1');
     assertNotSuggested('T2');
     assertNotSuggested('F2');
@@ -2911,7 +3020,10 @@
     expect(replacementLength, 1);
     // Simulate unresolved imported library,
     // in which case suggestions will have null return types (unresolved)
-    assertSuggestTopLevelVar('T1', null);
+    // The current DartCompletionRequest#resolveExpression resolves
+    // the world (which it should not) and causes the imported library
+    // to be resolved.
+    assertSuggestTopLevelVar('T1', /* null */ 'int');
     assertNotSuggested('T2');
   }
 
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index 73642ea..2e7e48b 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -220,6 +220,13 @@
     Map<String, int> expectedOffsets = <String, int>{};
     Set<String> actualCompletions = new Set<String>();
     expectedCompletions.addAll(expectedKeywords.map((k) => k.syntax));
+    ['import', 'export', 'part'].forEach((s) {
+      if (expectedCompletions.contains(s)) {
+        expectedCompletions.remove(s);
+        expectedCompletions.add('$s \'\';');
+      }
+    });
+
     expectedCompletions.addAll(pseudoKeywords);
     for (CompletionSuggestion s in suggestions) {
       if (s.kind == CompletionSuggestionKind.KEYWORD) {
@@ -245,10 +252,6 @@
       if (s.kind == CompletionSuggestionKind.KEYWORD) {
         if (s.completion.startsWith(Keyword.IMPORT.syntax)) {
           int importRelevance = relevance;
-          if (importRelevance == DART_RELEVANCE_HIGH &&
-              s.completion == "import '';") {
-            ++importRelevance;
-          }
           expect(s.relevance, equals(importRelevance), reason: s.completion);
         } else {
           if (s.completion == Keyword.RETHROW.syntax) {
@@ -261,7 +264,11 @@
         if (expectedOffset == null) {
           expectedOffset = s.completion.length;
         }
-        expect(s.selectionOffset, equals(expectedOffset));
+        expect(
+            s.selectionOffset,
+            equals(s.completion.endsWith('\'\';')
+                ? expectedOffset - 2
+                : expectedOffset));
         expect(s.selectionLength, equals(0));
         expect(s.isDeprecated, equals(false));
         expect(s.isPotential, equals(false));
diff --git a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
index a9389c0..e617931 100644
--- a/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/local_reference_contributor_test.dart
@@ -331,7 +331,7 @@
     assertNotSuggested('main');
   }
 
-  test_AsExpression() async {
+  test_AsExpression_type() async {
     // SimpleIdentifier  TypeName  AsExpression
     addTestSource('''
         class A {var b; X _c; foo() {var a; (a as ^).foo();}''');
@@ -346,6 +346,38 @@
     assertNotSuggested('==');
   }
 
+  test_AsExpression_type_filter_extends() async {
+    // SimpleIdentifier  TypeName  AsExpression
+    addTestSource('''
+class A {} class B extends A {} class C extends A {} class D {}
+f(A a){ (a as ^) }''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('B');
+    assertSuggestClass('C');
+    assertNotSuggested('A');
+    assertNotSuggested('D');
+    assertNotSuggested('Object');
+  }
+
+  test_IsExpression_type_filter_implements() async {
+    // SimpleIdentifier  TypeName  AsExpression
+    addTestSource('''
+class A {} class B implements A {} class C implements A {} class D {}
+f(A a){ (a as ^) }''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('B');
+    assertSuggestClass('C');
+    assertNotSuggested('A');
+    assertNotSuggested('D');
+    assertNotSuggested('Object');
+  }
+
   test_AssignmentExpression_name() async {
     // SimpleIdentifier  VariableDeclaration  VariableDeclarationList
     // VariableDeclarationStatement  Block
@@ -2750,6 +2782,38 @@
     assertNotSuggested('Object');
   }
 
+  test_IsExpression_type_filter_extends() async {
+    // SimpleIdentifier  TypeName  IsExpression  IfStatement
+    addTestSource('''
+class A {} class B extends A {} class C extends A {} class D {}
+f(A a){ if (a is ^) {}}''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('B');
+    assertSuggestClass('C');
+    assertNotSuggested('A');
+    assertNotSuggested('D');
+    assertNotSuggested('Object');
+  }
+
+  test_IsExpression_type_subtype_implements_filter() async {
+    // SimpleIdentifier  TypeName  IsExpression  IfStatement
+    addTestSource('''
+class A {} class B extends A {} class C implements A {} class D {}
+f(A a){ if (a is ^) {}}''');
+    await computeSuggestions();
+
+    expect(replacementOffset, completionOffset);
+    expect(replacementLength, 0);
+    assertSuggestClass('B');
+    assertSuggestClass('C');
+    assertNotSuggested('A');
+    assertNotSuggested('D');
+    assertNotSuggested('Object');
+  }
+
   test_keyword() async {
     addSource(
         '/testB.dart',
diff --git a/pkg/analysis_server/test/services/completion/dart/optype_test.dart b/pkg/analysis_server/test/services/completion/dart/optype_test.dart
index 14cc3a8..455495c 100644
--- a/pkg/analysis_server/test/services/completion/dart/optype_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/optype_test.dart
@@ -48,6 +48,7 @@
   void assertOpType(
       {bool caseLabel: false,
       bool constructors: false,
+      bool namedArgs: false,
       bool prefixed: false,
       bool returnValue: false,
       bool statementLabel: false,
@@ -58,6 +59,8 @@
     expect(visitor.includeCaseLabelSuggestions, caseLabel, reason: 'caseLabel');
     expect(visitor.includeConstructorSuggestions, constructors,
         reason: 'constructors');
+    expect(visitor.includeNamedArgumentSuggestions, namedArgs,
+        reason: 'namedArgs');
     expect(visitor.includeReturnValueSuggestions, returnValue,
         reason: 'returnValue');
     expect(visitor.includeStatementLabelSuggestions, statementLabel,
@@ -88,10 +91,36 @@
 
   test_ArgumentList() {
     // ArgumentList  MethodInvocation  ExpressionStatement  Block
-    addTestSource('void main() {expect(^)}');
+    addTestSource('void main() {expect(^)}', resolved: false);
+    // If "expect()" were resolved, then either namedArgs would be true
+    // or returnValue and typeNames would be true.
+    assertOpType(namedArgs: true, returnValue: true, typeNames: true);
+  }
+
+  test_ArgumentList_resolved() {
+    // ArgumentList  MethodInvocation  ExpressionStatement  Block
+    addTestSource('void main() {int.parse(^)}', resolved: true);
     assertOpType(returnValue: true, typeNames: true);
   }
 
+  test_ArgumentList_resolved_1_0() {
+    // ArgumentList  MethodInvocation  ExpressionStatement  Block
+    addTestSource('main() { foo(^);} foo({one, two}) {}', resolved: true);
+    assertOpType(namedArgs: true);
+  }
+
+  test_ArgumentList_resolved_1_1() {
+    // ArgumentList  MethodInvocation  ExpressionStatement  Block
+    addTestSource('main() { foo(o^);} foo({one, two}) {}', resolved: true);
+    assertOpType(namedArgs: true);
+  }
+
+  test_ArgumentList_resolved_2_0() {
+    // ArgumentList  MethodInvocation  ExpressionStatement  Block
+    addTestSource('void main() {int.parse("16", ^)}', resolved: true);
+    assertOpType(namedArgs: true);
+  }
+
   test_ArgumentList_namedParam() {
     // SimpleIdentifier  NamedExpression  ArgumentList  MethodInvocation
     // ExpressionStatement
diff --git a/pkg/analysis_server/test/test_all.dart b/pkg/analysis_server/test/test_all.dart
index 0a4a883..994f5ef 100644
--- a/pkg/analysis_server/test/test_all.dart
+++ b/pkg/analysis_server/test/test_all.dart
@@ -7,6 +7,7 @@
 import 'analysis/test_all.dart' as analysis_all;
 import 'analysis_server_test.dart' as analysis_server_test;
 import 'channel/test_all.dart' as channel_test;
+import 'completion_test.dart' as completion_test;
 import 'context_manager_test.dart' as context_manager_test;
 import 'domain_analysis_test.dart' as domain_analysis_test;
 import 'domain_completion_test.dart' as domain_completion_test;
@@ -35,6 +36,7 @@
     analysis_all.main();
     analysis_server_test.main();
     channel_test.main();
+    completion_test.main();
     context_manager_test.main();
     domain_analysis_test.main();
     domain_completion_test.main();
diff --git a/pkg/analyzer/doc/support/dart.js b/pkg/analyzer/doc/support/dart.js
new file mode 100644
index 0000000..f8d686e
--- /dev/null
+++ b/pkg/analyzer/doc/support/dart.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+(function() {
+// Bootstrap support for Dart scripts on the page as this script.
+if (navigator.userAgent.indexOf('(Dart)') === -1) {
+  // TODO:
+  // - Support in-browser compilation.
+  // - Handle inline Dart scripts.
+
+  // Fall back to compiled JS. Run through all the scripts and
+  // replace them if they have a type that indicate that they source
+  // in Dart code (type="application/dart").
+  var scripts = document.getElementsByTagName("script");
+  var length = scripts.length;
+  for (var i = 0; i < length; ++i) {
+    if (scripts[i].type == "application/dart") {
+      // Remap foo.dart to foo.dart.js.
+      if (scripts[i].src && scripts[i].src != '') {
+        var script = document.createElement('script');
+        script.src = scripts[i].src.replace(/\.dart(?=\?|$)/, '.dart.js');
+        var parent = scripts[i].parentNode;
+        // TODO(vsm): Find a solution for issue 8455 that works with more
+        // than one script.
+        document.currentScript = script;
+        parent.replaceChild(script, scripts[i]);
+      }
+    }
+  }
+}
+})();
diff --git a/pkg/analyzer/doc/support/style.css b/pkg/analyzer/doc/support/style.css
new file mode 100644
index 0000000..0964121
--- /dev/null
+++ b/pkg/analyzer/doc/support/style.css
@@ -0,0 +1,29 @@
+*, *:before, *:after {
+    -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box;
+}
+button {
+    position: fixed;
+    padding: 10px;
+    top: 5px;
+    left: 5px;
+    opacity: 0.8;
+    display: none;
+}
+g > * {
+    transition-property: stroke, stroke-width, transform, fill, font-size;
+    transition-duration: .2s;
+}
+g.active > text {
+    fill: blue;
+    font-size: 100%;
+}
+g.active > polygon, g.active > ellipse, g.active > path {
+    stroke: blue;
+    stroke-width: 3px !important;
+}
+g.active.edge > polygon {
+    fill: blue;
+}
+html, body { margin:10px; padding:0; }
+svg {  height:100%; width:100%; }
+svg.zoom {height: inherit; width: inherit;}
diff --git a/pkg/analyzer/doc/support/viz.js b/pkg/analyzer/doc/support/viz.js
new file mode 100644
index 0000000..488db0c
--- /dev/null
+++ b/pkg/analyzer/doc/support/viz.js
@@ -0,0 +1,1302 @@
+function k($a){throw $a;}var p=void 0,q=!0,r=null,G=!1;function M(){return function(){}}
+window.Viz=function($a,ec,ab){function ob(a){eval.call(r,a)}function J(a,b){a||aa("Assertion failed: "+b)}function pb(a){try{var b=e["_"+a];b||(b=eval("_"+a))}catch(c){}J(b,"Cannot call unknown function "+a+" (perhaps LLVM optimizations or closure removed it?)");return b}function qb(a,b,c,f){function d(a,b){if("string"==b){if(a===r||a===p||0===a)return 0;a=V(a);b="array"}if("array"==b){i||(i=l.kd());var c=l.hd(a.length);rb(a,c);return c}return a}var i=0,e=0,f=f?f.map(function(a){return d(a,c[e++])}):
+[];a=a.apply(r,f);"string"==b?b=R(a):(J("array"!=b),b=a);i&&l.jd(i);return b}function ta(a,b,c){c=c||"i8";"*"===c.charAt(c.length-1)&&(c="i32");switch(c){case "i1":v[a]=b;break;case "i8":v[a]=b;break;case "i16":ea[a>>1]=b;break;case "i32":t[a>>2]=b;break;case "i64":na=[b>>>0,(N=b,1<=+ua(N)?0<N?(va(+Ia(N/4294967296),4294967295)|0)>>>0:~~+Ja((N-+(~~N>>>0))/4294967296)>>>0:0)];t[a>>2]=na[0];t[a+4>>2]=na[1];break;case "float":wa[a>>2]=b;break;case "double":oa[a>>3]=b;break;default:aa("invalid type for setValue: "+
+c)}}function pa(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":return v[a];case "i8":return v[a];case "i16":return ea[a>>1];case "i32":return t[a>>2];case "i64":return t[a>>2];case "float":return wa[a>>2];case "double":return oa[a>>3];default:aa("invalid type for setValue: "+b)}return r}function D(a,b,c,f){var d,i;"number"===typeof a?(d=q,i=a):(d=G,i=a.length);var e="string"===typeof b?b:r,c=c==L?f:[ia,l.hd,l.md,l.Ub][c===p?S:c](Math.max(i,e?1:b.length));if(d){f=c;J(0==(c&
+3));for(a=c+(i&-4);f<a;f+=4)t[f>>2]=0;for(a=c+i;f<a;)v[f++|0]=0;return c}if("i8"===e)return a.subarray||a.slice?T.set(a,c):T.set(new Uint8Array(a),c),c;for(var f=0,j,g;f<i;){var x=a[f];"function"===typeof x&&(x=l.Ni(x));d=e||b[f];0===d?f++:("i64"==d&&(d="i32"),ta(c+f,x,d),g!==d&&(j=l.Lc(d),g=d),f+=j)}return c}function R(a,b){for(var c=G,f,d=0;;){f=T[a+d|0];if(128<=f)c=q;else if(0==f&&!b)break;d++;if(b&&d==b)break}b||(b=d);var i="";if(!c){for(;0<b;)f=String.fromCharCode.apply(String,T.subarray(a,a+
+Math.min(b,1024))),i=i?i+f:f,a+=1024,b-=1024;return i}c=new l.pb;for(d=0;d<b;d++)f=T[a+d|0],i+=c.ic(f);return i}function fc(a){try{if("Object._main"==a||"_main"==a)return"main()";"number"===typeof a&&(a=R(a));if("_"!==a[0]||"_"!==a[1]||"Z"!==a[2])return a;switch(a[3]){case "n":return"operator new()";case "d":return"operator delete()"}var b=3,c={v:"void",b:"bool",c:"char",s:"short",i:"int",l:"long",f:"float",d:"double",w:"wchar_t",a:"signed char",h:"unsigned char",t:"unsigned short",j:"unsigned int",
+m:"unsigned long",x:"long long",y:"unsigned long long",z:"..."},f=[],d=q,i=function(e,h,g){var h=h||Infinity,m="",s=[],y;if("N"===a[b]){b++;"K"===a[b]&&b++;for(y=[];"E"!==a[b];)if("S"===a[b]){b++;var A=a.indexOf("_",b);y.push(f[a.substring(b,A)||0]||"?");b=A+1}else if("C"===a[b])y.push(y[y.length-1]),b+=2;else{var A=parseInt(a.substr(b)),F=A.toString().length;if(!A||!F){b--;break}var P=a.substr(b+F,A);y.push(P);f.push(P);b+=F+A}b++;y=y.join("::");h--;if(0===h)return e?[y]:y}else if(("K"===a[b]||d&&
+"L"===a[b])&&b++,A=parseInt(a.substr(b)))F=A.toString().length,y=a.substr(b+F,A),b+=F+A;d=G;"I"===a[b]?(b++,A=i(q),F=i(q,1,q),m+=F[0]+" "+y+"<"+A.join(", ")+">"):m=y;a:for(;b<a.length&&0<h--;)if(y=a[b++],y in c)s.push(c[y]);else switch(y){case "P":s.push(i(q,1,q)[0]+"*");break;case "R":s.push(i(q,1,q)[0]+"&");break;case "L":b++;A=a.indexOf("E",b)-b;s.push(a.substr(b,A));b+=A+2;break;case "A":A=parseInt(a.substr(b));b+=A.toString().length;"_"!==a[b]&&k("?");b++;s.push(i(q,1,q)[0]+" ["+A+"]");break;
+case "E":break a;default:m+="?"+y;break a}!g&&(1===s.length&&"void"===s[0])&&(s=[]);return e?s:m+("("+s.join(", ")+")")};return i()}catch(e){return a}}function bb(){var a=Error().stack;return a?a.replace(/__Z[\w\d_]+/g,function(a){var c=fc(a);return a===c?a:a+" ["+c+"]"}):"(no stack trace available)"}function qa(a){for(;0<a.length;){var b=a.shift();if("function"==typeof b)b();else{var c=b.Ka;"number"===typeof c?b.uc===p?l.Dc("v",c):l.Dc("vi",c,[b.uc]):c(b.uc===p?r:b.uc)}}}function sb(a){cb.unshift(a)}
+function tb(a){ub.unshift(a)}function V(a,b,c){a=(new l.pb).re(a);c&&(a.length=c);b||a.push(0);return a}function rb(a,b){for(var c=0;c<a.length;c++)v[b+c|0]=a[c]}function Ka(a,b,c){for(var f=0;f<a.length;f++)v[b+f|0]=a.charCodeAt(f);c||(v[b+a.length|0]=0)}function La(a,b){return 0<=a?a:32>=b?2*Math.abs(1<<b-1)+a:Math.pow(2,b)+a}function vb(a,b){if(0>=a)return a;var c=32>=b?Math.abs(1<<b-1):Math.pow(2,b-1);if(a>=c&&(32>=b||a>c))a=-2*c+a;return a}function db(){fa++;e.monitorRunDependencies&&e.monitorRunDependencies(fa)}
+function Ma(){fa--;e.monitorRunDependencies&&e.monitorRunDependencies(fa);if(0==fa&&(eb!==r&&(clearInterval(eb),eb=r),xa)){var a=xa;xa=r;a()}}function H(a){return t[Na>>2]=a}function fb(a,b,c){a=d.D(a);if(!a)return H(g.H),-1;try{return d.P(a,v,b,c)}catch(f){return d.sa(f),-1}}function wb(a,b,c){if(a in Oa){if(Oa[a].length>c-1)return H(g.qc);Ka(Oa[a],b);return 0}return H(g.B)}function ya(a){ya.buffer||(ya.buffer=ia(256));wb(a,ya.buffer,256);return ya.buffer}function Pa(a){return 0>a||0===a&&-Infinity===
+1/a}function gb(a,b){function c(a){var c;"double"===a?c=oa[b+d>>3]:"i64"==a?(c=[t[b+d>>2],t[b+(d+8)>>2]],d+=8):(a="i32",c=t[b+d>>2]);d+=Math.max(l.$d(a),l.Aa(a,r,q));return c}for(var f=a,d=0,e=[],h,j;;){var g=f;h=v[f];if(0===h)break;j=v[f+1|0];if(37==h){var x=G,m=G,s=G,y=G,A=G;a:for(;;){switch(j){case 43:x=q;break;case 45:m=q;break;case 35:s=q;break;case 48:if(y)break a;else{y=q;break}case 32:A=q;break;default:break a}f++;j=v[f+1|0]}var F=0;if(42==j)F=c("i32"),f++,j=v[f+1|0];else for(;48<=j&&57>=
+j;)F=10*F+(j-48),f++,j=v[f+1|0];var P=G,E=-1;if(46==j){E=0;P=q;f++;j=v[f+1|0];if(42==j)E=c("i32"),f++;else for(;;){j=v[f+1|0];if(48>j||57<j)break;E=10*E+(j-48);f++}j=v[f+1|0]}-1===E&&(E=6,P=G);var C;switch(String.fromCharCode(j)){case "h":j=v[f+2|0];104==j?(f++,C=1):C=2;break;case "l":j=v[f+2|0];108==j?(f++,C=8):C=4;break;case "L":case "q":case "j":C=8;break;case "z":case "t":case "I":C=4;break;default:C=r}C&&f++;j=v[f+1|0];switch(String.fromCharCode(j)){case "d":case "i":case "u":case "o":case "x":case "X":case "p":g=
+100==j||105==j;C=C||4;var n=h=c("i"+8*C),w;8==C&&(h=l.Mf(h[0],h[1],117==j));4>=C&&(h=(g?vb:La)(h&Math.pow(256,C)-1,8*C));var u=Math.abs(h),g="";if(100==j||105==j)w=8==C&&za?za.stringify(n[0],n[1],r):vb(h,8*C).toString(10);else if(117==j)w=8==C&&za?za.stringify(n[0],n[1],q):La(h,8*C).toString(10),h=Math.abs(h);else if(111==j)w=(s?"0":"")+u.toString(8);else if(120==j||88==j){g=s&&0!=h?"0x":"";if(8==C&&za)if(n[1]){w=(n[1]>>>0).toString(16);for(s=(n[0]>>>0).toString(16);8>s.length;)s="0"+s;w+=s}else w=
+(n[0]>>>0).toString(16);else if(0>h){h=-h;w=(u-1).toString(16);n=[];for(s=0;s<w.length;s++)n.push((15-parseInt(w[s],16)).toString(16));for(w=n.join("");w.length<2*C;)w="f"+w}else w=u.toString(16);88==j&&(g=g.toUpperCase(),w=w.toUpperCase())}else 112==j&&(0===u?w="(nil)":(g="0x",w=u.toString(16)));if(P)for(;w.length<E;)w="0"+w;0<=h&&(x?g="+"+g:A&&(g=" "+g));"-"==w.charAt(0)&&(g="-"+g,w=w.substr(1));for(;g.length+w.length<F;)m?w+=" ":y?w="0"+w:g=" "+g;w=g+w;w.split("").forEach(function(a){e.push(a.charCodeAt(0))});
+break;case "f":case "F":case "e":case "E":case "g":case "G":h=c("double");if(isNaN(h))w="nan",y=G;else if(isFinite(h)){P=G;C=Math.min(E,20);if(103==j||71==j)P=q,E=E||1,C=parseInt(h.toExponential(C).split("e")[1],10),E>C&&-4<=C?(j=(103==j?"f":"F").charCodeAt(0),E-=C+1):(j=(103==j?"e":"E").charCodeAt(0),E--),C=Math.min(E,20);if(101==j||69==j)w=h.toExponential(C),/[eE][-+]\d$/.test(w)&&(w=w.slice(0,-1)+"0"+w.slice(-1));else if(102==j||70==j)w=h.toFixed(C),0===h&&Pa(h)&&(w="-"+w);g=w.split("e");if(P&&
+!s)for(;1<g[0].length&&-1!=g[0].indexOf(".")&&("0"==g[0].slice(-1)||"."==g[0].slice(-1));)g[0]=g[0].slice(0,-1);else for(s&&-1==w.indexOf(".")&&(g[0]+=".");E>C++;)g[0]+="0";w=g[0]+(1<g.length?"e"+g[1]:"");69==j&&(w=w.toUpperCase());0<=h&&(x?w="+"+w:A&&(w=" "+w))}else w=(0>h?"-":"")+"inf",y=G;for(;w.length<F;)w=m?w+" ":y&&("-"==w[0]||"+"==w[0])?w[0]+"0"+w.slice(1):(y?"0":" ")+w;97>j&&(w=w.toUpperCase());w.split("").forEach(function(a){e.push(a.charCodeAt(0))});break;case "s":y=(x=c("i8*"))?Aa(x):6;
+P&&(y=Math.min(y,E));if(!m)for(;y<F--;)e.push(32);if(x)for(s=0;s<y;s++)e.push(T[x++|0]);else e=e.concat(V("(null)".substr(0,y),q));if(m)for(;y<F--;)e.push(32);break;case "c":for(m&&e.push(c("i8"));0<--F;)e.push(32);m||e.push(c("i8"));break;case "n":m=c("i32*");t[m>>2]=e.length;break;case "%":e.push(h);break;default:for(s=g;s<f+2;s++)e.push(v[s])}f+=2}else e.push(h),f+=1}return e}function hb(a,b,c,f){c=gb(c,f);f=b===p?c.length:Math.min(c.length,Math.max(b-1,0));if(0>a)var a=-a,d=ia(f+1),a=t[a>>2]=
+d;for(d=0;d<f;d++)v[a+d|0]=c[d];if(f<b||b===p)v[a+d|0]=0;return c.length}function xb(a,b,c){for(var f=0;f<c;){var d=T[a+f|0],e=T[b+f|0];if(d==e&&0==d)break;if(0==d)return-1;if(0==e)return 1;if(d==e)f++;else return d>e?1:-1}return 0}function yb(a){return 32==a||9<=a&&13>=a}function zb(a,b,c,f,d,e,h){for(;yb(v[a]);)a++;var j=1;45==v[a]?(j=-1,a++):43==v[a]&&a++;if(c){if(16==c&&48==v[a]&&(120==v[a+1|0]||88==v[a+1|0]))a+=2}else 48==v[a]&&(120==v[a+1|0]||88==v[a+1|0]?(c=16,a+=2):(c=8,a++));c||(c=10);for(var l,
+x=0;0!=(l=v[a])&&!(l=parseInt(String.fromCharCode(l),c),isNaN(l));)x=x*c+l,a++;x*=j;b&&(t[b>>2]=a);h&&(Math.abs(x)>d?(x=d,H(g.qc)):x=La(x,e));if(x>d||x<f)x=x>d?d:f,H(g.qc);return 64==e?(u.setTempRet0((N=x,1<=+ua(N)?0<N?(va(+Ia(N/4294967296),4294967295)|0)>>>0:~~+Ja((N-+(~~N>>>0))/4294967296)>>>0:0)),x>>>0)|0:x}function Ab(a,b,c){return zb(a,b,c,-2147483648,2147483647,32)}function Bb(a){return/^[+-]?[0-9]*\.?[0-9]+([eE][+-]?[0-9]+)?/.exec(a)}function Q(a,b,c,f){Q.whiteSpace||(Q.whiteSpace={},Q.whiteSpace[32]=
+1,Q.whiteSpace[9]=1,Q.whiteSpace[10]=1,Q.whiteSpace[11]=1,Q.whiteSpace[12]=1,Q.whiteSpace[13]=1);var a=R(a),d=0;if(0<=a.indexOf("%n"))var e=b,b=function(){d++;return e()},h=c,c=function(){d--;return h()};var j=0,g=0,x=0,m,j=0;a:for(;j<a.length;)if("%"===a[j]&&"n"==a[j+1]){var s=t[f+x>>2],x=x+l.Aa("void*",r,q);t[s>>2]=d;j+=2}else{if("%"===a[j]){var y=a.indexOf("c",j+1);if(0<y){var A=1;y>j+1&&(m=a.substring(j+1,y),A=parseInt(m),A!=m&&(A=0));if(A){s=t[f+x>>2];x+=l.Aa("void*",r,q);g++;for(var F=0;F<A;F++)m=
+b(),v[s++|0]=m;j+=y-j+1;continue}}}if("%"===a[j]&&0<a.indexOf("[",j+1)&&(y=/\%([0-9]*)\[(\^)?(\]?[^\]]*)\]/.exec(a.substring(j)))){for(var A=parseInt(y[1])||Infinity,P="^"===y[2],E=y[3];m=/([^\-])\-([^\-])/.exec(E);){for(var s=m[1].charCodeAt(0),F=m[2].charCodeAt(0),C="";s<=F;C+=String.fromCharCode(s++));E=E.replace(m[1]+"-"+m[2],C)}s=t[f+x>>2];x+=l.Aa("void*",r,q);g++;for(F=0;F<A;F++)if(m=b(),P)if(0>E.indexOf(String.fromCharCode(m)))v[s++|0]=m;else{c();break}else if(0<=E.indexOf(String.fromCharCode(m)))v[s++|
+0]=m;else{c();break}v[s++|0]=0;j+=y[0].length;continue}for(;;){m=b();if(0==m)return g;if(!(m in Q.whiteSpace))break}c();if("%"===a[j]){j++;s=G;"*"==a[j]&&(s=q,j++);for(m=j;48<=a[j].charCodeAt(0)&&57>=a[j].charCodeAt(0);)j++;var n;j!=m&&(n=parseInt(a.slice(m,j),10));P=A=y=G;"l"==a[j]?(y=q,j++,"l"==a[j]&&(P=q,j++)):"h"==a[j]&&(A=q,j++);E=a[j];j++;F=0;C=[];if("f"==E||"e"==E||"g"==E||"F"==E||"E"==E||"G"==E){for(m=b();0<m&&!(m in Q.whiteSpace);)C.push(String.fromCharCode(m)),m=b();m=(m=Bb(C.join("")))?
+m[0].length:0;for(F=0;F<C.length-m+1;F++)c();C.length=m}else{m=b();var w=q;if(("x"==E||"X"==E)&&48==m){var u=b();120==u||88==u?m=b():c()}for(;(F<n||isNaN(n))&&0<m;)if(!(m in Q.whiteSpace)&&("s"==E||("d"===E||"u"==E||"i"==E)&&(48<=m&&57>=m||w&&45==m)||("x"===E||"X"===E)&&(48<=m&&57>=m||97<=m&&102>=m||65<=m&&70>=m))&&(j>=a.length||m!==a[j].charCodeAt(0)))C.push(String.fromCharCode(m)),m=b(),F++,w=G;else break;c()}if(0===C.length)return 0;if(!s){m=C.join("");s=t[f+x>>2];x+=l.Aa("void*",r,q);switch(E){case "d":case "u":case "i":A?
+ea[s>>1]=parseInt(m,10):P?(na=[parseInt(m,10)>>>0,(N=parseInt(m,10),1<=+ua(N)?0<N?(va(+Ia(N/4294967296),4294967295)|0)>>>0:~~+Ja((N-+(~~N>>>0))/4294967296)>>>0:0)],t[s>>2]=na[0],t[s+4>>2]=na[1]):t[s>>2]=parseInt(m,10);break;case "X":case "x":t[s>>2]=parseInt(m,16);break;case "F":case "f":case "E":case "e":case "G":case "g":case "E":y?oa[s>>3]=parseFloat(m):wa[s>>2]=parseFloat(m);break;case "s":m=V(m);for(F=0;F<m.length;F++)v[s+F|0]=m[F]}g++}}else{if(a[j].charCodeAt(0)in Q.whiteSpace){for(m=b();m in
+Q.whiteSpace;){if(0>=m)break a;m=b()}c(m)}else if(m=b(),a[j].charCodeAt(0)!==m){c(m);break a}j++}}return g}function Cb(a,b,c){return hb(a,p,b,c)}function Qa(){Qa.$||(Qa.$=D([0],"i8",ja));return Qa.$}function Ba(a,b,c){a=d.D(a);if(!a)return H(g.H),-1;try{return d.write(a,v,b,c)}catch(f){return d.sa(f),-1}}function Db(a,b,c,f){c*=b;if(0==c)return 0;a=Ba(f,a,c);if(-1==a){if(b=d.D(f))b.error=q;return 0}return Math.floor(a/b)}function Eb(a,b,c){c=gb(b,c);b=l.kd();a=Db(D(c,"i8",ib),1,c.length,a);l.jd(b);
+return a}function Fb(a,b,c){var f,d,e,h;if(0==a&&0==(a=pa(c,"i8*")))return 0;a:for(;;){d=pa(a++,"i8");for(f=b;0!=(e=pa(f++,"i8"));)if(d==e)continue a;break}if(0==d)return ta(c,0,"i8*"),0;for(h=a-1;;){d=pa(a++,"i8");f=b;do if((e=pa(f++,"i8"))==d)return 0==d?a=0:ta(a-1,0,"i8"),ta(c,a,"i8*"),h;while(0!=e)}aa("strtok_r error!")}function Gb(a){e.exit(a)}function Ca(a){var b,c;Ca.xc?(c=t[Hb>>2],b=t[c>>2]):(Ca.xc=q,U.USER="root",U.PATH="/",U.PWD="/",U.HOME="/home/emscripten",U.LANG="en_US.UTF-8",U._="./this.program",
+b=D(1024,"i8",S),c=D(256,"i8*",S),t[c>>2]=b,t[Hb>>2]=c);var f=[],d=0,e;for(e in a)if("string"===typeof a[e]){var h=e+"="+a[e];f.push(h);d+=h.length}1024<d&&k(Error("Environment size exceeded TOTAL_ENV_SIZE!"));for(a=0;a<f.length;a++)h=f[a],Ka(h,b),t[c+4*a>>2]=b,b+=h.length+1;t[c+4*f.length>>2]=0}function Da(a){if(0===a)return 0;a=R(a);if(!U.hasOwnProperty(a))return 0;Da.$&&Ib(Da.$);Da.$=D(V(U[a]),"i8",ja);return Da.$}function Jb(a,b,c){c=t[c>>2];a=R(a);try{return d.open(a,b,c).da}catch(f){return d.sa(f),
+-1}}function Kb(a,b){var c,b=R(b);if("r"==b[0])c=-1!=b.indexOf("+")?2:0;else if("w"==b[0])c=-1!=b.indexOf("+")?2:1,c|=576;else if("a"==b[0])c=-1!=b.indexOf("+")?2:1,c|=64,c|=1024;else return H(g.B),0;c=Jb(a,c,D([511,0,0,0],"i32",ib));return-1==c?0:c}function Lb(a){a=d.D(a);if(!a)return H(g.H),-1;try{return d.close(a),0}catch(b){return d.sa(b),-1}}function Mb(a){if(d.D(a))return 0;H(g.H);return-1}function ra(a,b){var c=La(a&255);v[ra.$|0]=c;if(-1==Ba(b,ra.$,1)){if(c=d.D(b))c.error=q;return-1}return c}
+function Nb(a,b,c,f){c*=b;if(0==c)return 0;var e=0,i=d.D(f);if(!i)return H(g.H),0;for(;i.pd.length&&0<c;)v[a++|0]=i.pd.pop(),c--,e++;a=fb(f,a,c);if(-1==a)return i&&(i.error=q),0;e+=a;e<c&&(i.Ua=q);return Math.floor(e/b)}function Ea(a){var b=d.D(a);if(!b||b.Ua||b.error)return-1;a=Nb(Ea.$,1,1,a);return 0==a?-1:-1==a?(b.error=q,-1):T[Ea.$|0]}function Ob(a,b,c){a="string"!==typeof a?R(a):a;try{var f=c?d.Kf(a):d.ld(a);t[b>>2]=f.Cc;t[b+4>>2]=0;t[b+8>>2]=f.ac;t[b+12>>2]=f.mode;t[b+16>>2]=f.Wc;t[b+20>>2]=
+f.uid;t[b+24>>2]=f.Mc;t[b+28>>2]=f.Pa;t[b+32>>2]=0;t[b+36>>2]=f.size;t[b+40>>2]=4096;t[b+44>>2]=f.sb;t[b+48>>2]=Math.floor(f.wc.getTime()/1E3);t[b+52>>2]=0;t[b+56>>2]=Math.floor(f.Uc.getTime()/1E3);t[b+60>>2]=0;t[b+64>>2]=Math.floor(f.Ac.getTime()/1E3);t[b+68>>2]=0;t[b+72>>2]=f.ac;return 0}catch(e){return d.sa(e),-1}}function Pb(a,b,c){a=d.D(a);if(!a)return H(g.H),-1;try{return d.ga(a,b,c)}catch(f){return d.sa(f),-1}}function Qb(a,b){return Ba(b,a,Aa(a))}function Fa(a,b,c){var f=d.Ud(b||"/tmp");if(!f||
+!f.Pc)if(b="/tmp",f=d.Ud(b),!f||!f.Pc)return 0;c=c||"file";do c+=String.fromCharCode(65+Math.floor(25*Math.random()));while(c in f.u);b=b+"/"+c;Fa.buffer||(Fa.buffer=ia(256));a||(a=Fa.buffer);Ka(b,a);return a}function Ra(){Ra.mode&&(Ra.mode=D(V("w+"),"i8",ja));return Kb(Fa(0),Ra.mode)}function Rb(a){var b=Rb;b.xc||(Z=Z+4095&-4096,b.xc=q,J(l.Ub),b.We=l.Ub,l.Ub=function(){aa("cannot dynamically allocate, sbrk now has control")});var c=Z;0!=a&&b.We(a);return c}function jb(a){this.name="ExitStatus";this.message=
+"Program terminated with exit("+a+")";this.status=a}function kb(a){function b(){if(!e.calledRun){e.calledRun=q;Sa||(Sa=q,qa(ka));qa(lb);e._main&&mb&&e.callMain(a);if(e.postRun)for("function"==typeof e.postRun&&(e.postRun=[e.postRun]);e.postRun.length;)tb(e.postRun.shift());qa(ub)}}a=a||e.arguments;Ta===r&&(Ta=Date.now());if(0<fa)e.ab("run() called, but dependencies remain, so not running");else{if(e.preRun)for("function"==typeof e.preRun&&(e.preRun=[e.preRun]);e.preRun.length;)sb(e.preRun.shift());
+qa(cb);!(0<fa)&&!e.calledRun&&(e.setStatus?(e.setStatus("Running..."),setTimeout(function(){setTimeout(function(){e.setStatus("")},1);ba||b()},1)):b())}}function Sb(a){ba=q;X=Tb;qa(Ua);k(new jb(a))}function aa(a){a&&(e.print(a),e.ab(a));ba=q;k("abort() at "+bb())}"undefined"===typeof ab&&(ab="dot");var e={"return":"",print:function(a){e["return"]+=a+"\n"}},Va={},ga;for(ga in e)e.hasOwnProperty(ga)&&(Va[ga]=e[ga]);var ca="object"===typeof process&&"function"===typeof require,Wa="object"===typeof window,
+Xa="function"===typeof importScripts,gc=!Wa&&!ca&&!Xa;if(ca){e.print||(e.print=function(a){process.stdout.write(a+"\n")});e.printErr||(e.printErr=function(a){process.stderr.write(a+"\n")});var Ub=require("fs"),Vb=require("path");e.read=function(a,b){var a=Vb.normalize(a),c=Ub.readFileSync(a);!c&&a!=Vb.resolve(a)&&(a=path.join(__dirname,"..","src",a),c=Ub.readFileSync(a));c&&!b&&(c=c.toString());return c};e.readBinary=function(a){return e.read(a,q)};e.load=function(a){ob(read(a))};e.arguments=process.argv.slice(2);
+module.exports=e}else gc?(e.print||(e.print=print),"undefined"!=typeof printErr&&(e.printErr=printErr),e.read="undefined"!=typeof read?read:function(){k("no read() available (jsc?)")},e.readBinary=function(a){return read(a,"binary")},"undefined"!=typeof scriptArgs?e.arguments=scriptArgs:"undefined"!=typeof arguments&&(e.arguments=arguments),this.Module=e,eval("if (typeof gc === 'function' && gc.toString().indexOf('[native code]') > 0) var gc = undefined")):Wa||Xa?(e.read=function(a){var b=new XMLHttpRequest;
+b.open("GET",a,G);b.send(r);return b.responseText},"undefined"!=typeof arguments&&(e.arguments=arguments),"undefined"!==typeof console?(e.print||(e.print=function(a){console.log(a)}),e.printErr||(e.printErr=function(a){console.log(a)})):e.print||(e.print=M()),Wa?this.Module=e:e.load=importScripts):k("Unknown runtime environment. Where are we?");"undefined"==!e.load&&e.read&&(e.load=function(a){ob(e.read(a))});e.print||(e.print=M());e.printErr||(e.printErr=e.print);e.arguments||(e.arguments=[]);e.print=
+e.print;e.ab=e.printErr;e.preRun=[];e.postRun=[];for(ga in Va)Va.hasOwnProperty(ga)&&(e[ga]=Va[ga]);var l={kd:function(){return X},jd:function(a){X=a},Ii:function(a,b){b=b||4;return 1==b?a:isNumber(a)&&isNumber(b)?Math.ceil(a/b)*b:isNumber(b)&&isPowerOfTwo(b)?"((("+a+")+"+(b-1)+")&"+-b+")":"Math.ceil(("+a+")/"+b+")*"+b},Ff:function(a){return a in l.Re||a in l.Pe},Gf:function(a){return"*"==a[a.length-1]},If:function(a){return isPointerType(a)?G:isArrayType(a)||/<?{ ?[^}]* ?}>?/.test(a)?q:"%"==a[0]},
+Re:{i1:0,i8:0,i16:0,i32:0,i64:0},Pe:{"float":0,"double":0},cj:function(a,b){return(a|0|b|0)+4294967296*(Math.round(a/4294967296)|Math.round(b/4294967296))},ti:function(a,b){return((a|0)&(b|0))+4294967296*(Math.round(a/4294967296)&Math.round(b/4294967296))},Ij:function(a,b){return((a|0)^(b|0))+4294967296*(Math.round(a/4294967296)^Math.round(b/4294967296))},Lc:function(a){switch(a){case "i1":case "i8":return 1;case "i16":return 2;case "i32":return 4;case "i64":return 8;case "float":return 4;case "double":return 8;
+default:return"*"===a[a.length-1]?l.Fa:"i"===a[0]?(a=parseInt(a.substr(1)),J(0===a%8),a/8):0}},$d:function(a){return Math.max(l.Lc(a),l.Fa)},lf:function(a,b){var c={};return b?a.filter(function(a){return c[a[b]]?G:c[a[b]]=q}):a.filter(function(a){return c[a]?G:c[a]=q})},set:function(){for(var a="object"===typeof arguments[0]?arguments[0]:arguments,b={},c=0;c<a.length;c++)b[a[c]]=0;return b},fi:8,Aa:function(a,b,c){return c||!c&&("i64"==a||"double"==a)?8:!a?Math.min(b,8):Math.min(b||(a?l.$d(a):0),
+l.Fa)},Ye:function(a){a.ja=0;a.Ta=0;var b=[],c=-1,f=0;a.Xd=a.Gc.map(function(d){f++;var e,h;l.Ff(d)||l.Gf(d)?(e=l.Lc(d),h=l.Aa(d,e)):l.If(d)?"0"===d[1]?(e=0,h=Types.types[d]?l.Aa(r,Types.types[d].Ta):a.Ta||QUANTUM_SIZE):(e=Types.types[d].ja,h=l.Aa(r,Types.types[d].Ta)):"b"==d[0]?(e=d.substr(1)|0,h=1):"<"===d[0]?e=h=Types.types[d].ja:"i"===d[0]?(e=h=parseInt(d.substr(1))/8,J(0===e%1,"cannot handle non-byte-size field "+d)):J(G,"invalid type for calculateStructAlignment");a.dj&&(h=1);a.Ta=Math.max(a.Ta,
+h);d=l.qb(a.ja,h);a.ja=d+e;0<=c&&b.push(d-c);return c=d});a.ne&&"["===a.ne[0]&&(a.ja=parseInt(a.ne.substr(1))*a.ja/2);a.ja=l.qb(a.ja,a.Ta);0==b.length?a.Wd=a.ja:1==l.lf(b).length&&(a.Wd=b[0]);a.$i=1!=a.Wd;return a.Xd},sf:function(a,b,c){var f,d;if(b){c=c||0;f=("undefined"===typeof Types?l.zj:Types.types)[b];if(!f)return r;if(f.Gc.length!=a.length)return printErr("Number of named fields must match the type for "+b+": possibly duplicate struct names. Cannot return structInfo"),r;d=f.Xd}else f={Gc:a.map(function(a){return a[0]})},
+d=l.Ye(f);var e={ki:f.ja};b?a.forEach(function(a,b){if("string"===typeof a)e[a]=d[b]+c;else{var g,x;for(x in a)g=x;e[g]=l.sf(a[g],f.Gc[b],d[b])}}):a.forEach(function(a,b){e[a[1]]=d[b]});return e},Dc:function(a,b,c){return c&&c.length?(c.splice||(c=Array.prototype.slice.call(c)),c.splice(0,0,b),e["dynCall_"+a].apply(r,c)):e["dynCall_"+a].call(r,b)},Wb:[],mi:function(a){for(var b=0;b<l.Wb.length;b++)if(!l.Wb[b])return l.Wb[b]=a,2*(1+b);k("Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.")},
+lj:function(a){l.Wb[(a-2)/2]=r},Li:function(a,b){l.vc||(l.vc={});var c=l.vc[a];if(c)return c;for(var c=[],f=0;f<b;f++)c.push(String.fromCharCode(36)+f);a=R(a);'"'===a[0]&&(a.indexOf('"',1)===a.length-1?a=a.substr(1,a.length-2):aa("invalid EM_ASM input |"+a+"|. Please use EM_ASM(..code..) (no quotes) or EM_ASM({ ..code($0).. }, input) (to input values)"));return l.vc[a]=eval("(function("+c.join(",")+"){ "+a+" })")},Fb:function(a){l.Fb.fd||(l.Fb.fd={});l.Fb.fd[a]||(l.Fb.fd[a]=1,e.ab(a))},Ic:{},Mi:function(a,
+b){J(b);l.Ic[a]||(l.Ic[a]=function(){return l.Dc(b,a,arguments)});return l.Ic[a]},pb:function(){var a=[],b=0;this.ic=function(c){c&=255;if(0==a.length){if(0==(c&128))return String.fromCharCode(c);a.push(c);b=192==(c&224)?1:224==(c&240)?2:3;return""}if(b&&(a.push(c),b--,0<b))return"";var c=a[0],f=a[1],d=a[2],e=a[3];2==a.length?c=String.fromCharCode((c&31)<<6|f&63):3==a.length?c=String.fromCharCode((c&15)<<12|(f&63)<<6|d&63):(c=(c&7)<<18|(f&63)<<12|(d&63)<<6|e&63,c=String.fromCharCode(Math.floor((c-
+65536)/1024)+55296,(c-65536)%1024+56320));a.length=0;return c};this.re=function(a){for(var a=unescape(encodeURIComponent(a)),b=[],d=0;d<a.length;d++)b.push(a.charCodeAt(d));return b}},hd:function(a){var b=X;X=X+a|0;X=X+7&-8;return b},md:function(a){var b=la;la=la+a|0;la=la+7&-8;return b},Ub:function(a){var b=Z;Z=Z+a|0;Z=Z+7&-8;Z>=ha&&aa("Cannot enlarge memory arrays in asm.js. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+ha+", or (2) set Module.TOTAL_MEMORY before the program runs.");
+return b},qb:function(a,b){return Math.ceil(a/(b?b:8))*(b?b:8)},Mf:function(a,b,c){return c?+(a>>>0)+4294967296*+(b>>>0):+(a>>>0)+4294967296*+(b|0)},J:8,Fa:4,ji:0};e.Runtime=l;var ba=G,N,na;e.ccall=function(a,b,c,f){return qb(pb(a),b,c,f)};e.cwrap=function(a,b,c){var f=pb(a);return function(){return qb(f,b,c,Array.prototype.slice.call(arguments))}};e.setValue=ta;e.getValue=pa;var ja=0,ib=1,S=2,L=4;e.ALLOC_NORMAL=ja;e.ALLOC_STACK=ib;e.ALLOC_STATIC=S;e.ALLOC_DYNAMIC=3;e.ALLOC_NONE=L;e.allocate=D;e.Pointer_stringify=
+R;e.UTF16ToString=function(a){for(var b=0,c="";;){var f=ea[a+2*b>>1];if(0==f)return c;++b;c+=String.fromCharCode(f)}};e.stringToUTF16=function(a,b){for(var c=0;c<a.length;++c)ea[b+2*c>>1]=a.charCodeAt(c);ea[b+2*a.length>>1]=0};e.UTF32ToString=function(a){for(var b=0,c="";;){var f=t[a+4*b>>2];if(0==f)return c;++b;65536<=f?(f-=65536,c+=String.fromCharCode(55296|f>>10,56320|f&1023)):c+=String.fromCharCode(f)}};e.stringToUTF32=function(a,b){for(var c=0,f=0;f<a.length;++f){var d=a.charCodeAt(f);if(55296<=
+d&&57343>=d)var e=a.charCodeAt(++f),d=65536+((d&1023)<<10)|e&1023;t[b+4*c>>2]=d;++c}t[b+4*c>>2]=0};for(var v,T,ea,Wb,t,Ya,wa,oa,Xb=0,la=0,Zb=0,X=0,nb=0,$b=0,Z=0,hc=e.TOTAL_STACK||5242880,ha=e.TOTAL_MEMORY||16777216,da=4096;da<ha||da<2*hc;)da=16777216>da?2*da:da+16777216;da!==ha&&(e.ab("increasing TOTAL_MEMORY to "+da+" to be more reasonable"),ha=da);J("undefined"!==typeof Int32Array&&"undefined"!==typeof Float64Array&&!!(new Int32Array(1)).subarray&&!!(new Int32Array(1)).set,"Cannot fallback to non-typed array case: Code is too specialized");
+var $=new ArrayBuffer(ha);v=new Int8Array($);ea=new Int16Array($);t=new Int32Array($);T=new Uint8Array($);Wb=new Uint16Array($);Ya=new Uint32Array($);wa=new Float32Array($);oa=new Float64Array($);t[0]=255;J(255===T[0]&&0===T[3],"Typed arrays 2 must be run on a little-endian system");e.HEAP=p;e.HEAP8=v;e.HEAP16=ea;e.HEAP32=t;e.HEAPU8=T;e.HEAPU16=Wb;e.HEAPU32=Ya;e.HEAPF32=wa;e.HEAPF64=oa;var cb=[],ka=[],lb=[],Ua=[],ub=[],Sa=G;e.addOnPreRun=e.ri=sb;e.addOnInit=e.oi=function(a){ka.unshift(a)};e.addOnPreMain=
+e.qi=function(a){lb.unshift(a)};e.addOnExit=e.ni=function(a){Ua.unshift(a)};e.addOnPostRun=e.pi=tb;e.intArrayFromString=V;e.intArrayToString=function(a){for(var b=[],c=0;c<a.length;c++){var f=a[c];255<f&&(f&=255);b.push(String.fromCharCode(f))}return b.join("")};e.writeStringToMemory=function(a,b,c){a=V(a,c);for(c=0;c<a.length;)v[b+c|0]=a[c],c+=1};e.writeArrayToMemory=rb;e.writeAsciiToMemory=Ka;if(!Math.imul||-5!==Math.imul(4294967295,5))Math.imul=function(a,b){var c=a&65535,f=b&65535;return c*f+
+((a>>>16)*f+c*(b>>>16)<<16)|0};Math.Pi=Math.imul;var ua=Math.abs,ic=Math.cos,jc=Math.sin,kc=Math.tan,lc=Math.acos,mc=Math.asin,nc=Math.atan2,oc=Math.exp,ac=Math.sqrt,Ja=Math.ceil,Ia=Math.floor,pc=Math.pow,va=Math.min,fa=0,eb=r,xa=r;e.addRunDependency=db;e.removeRunDependency=Ma;e.preloadedImages={};e.preloadedAudios={};Xb=8;la=Xb+215424;ka.push({Ka:function(){qc()}});var ma;ma=ma=D([0,0,0,0,0,0,0,0],"i8",S);var Ga;Ga=Ga=D([0,0,0,0,0,0,0,0],"i8",S);var Ha;Ha=Ha=D([0,0,0,0,0,0,0,0],"i8",S);D([31,139,
+8,0,0,0,0,0,0,3,0,0,0,0,0,0,56,98,1,0,128,40,2,0,152,65,3,0,32,181,1,0,168,155,1,0,72,133,1,0,144,111,1,0,88,90,1,0,16,71,1,0,152,65,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,0,0,0,0,54,0,0,0,36,0,0,0,6,0,0,0,72,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,128,169,2,0,144,169,2,0,160,169,2,0,176,169,2,0,192,169,2,0,208,169,2,0,224,169,2,0,240,169,2,0,144,169,2,0,144,169,2,0,208,169,2,0,208,169,2,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,51,51,51,51,51,211,63,0,0,0,0,0,0,248,63,0,0,0,0,0,0,0,0,97,108,110,117,109,0,97,108,112,104,97,0,98,108,97,110,107,0,99,110,116,114,108,0,100,105,103,105,116,0,103,114,97,112,104,0,108,111,119,101,114,0,112,114,105,110,116,0,112,117,110,99,116,0,115,112,97,99,101,0,117,112,112,101,114,0,120,100,105,103,105,
+116,0,0,0,0,0,0,0,0,216,122,2,0,192,107,2,0,232,87,2,0,248,75,2,0,168,64,2,0,104,52,2,0,144,40,2,0,160,28,2,0,152,18,2,0,136,8,2,0,232,255,1,0,56,246,1,0,248,233,1,0,176,224,1,0,192,218,1,0,128,215,1,0,48,0,0,0,0,0,0,0,116,0,0,0,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,122,0,0,0,0,0,0,0,0,0,0,0,42,0,0,0,0,0,0,0,8,0,0,0,46,0,0,0,14,0,0,0,48,0,0,0,42,0,0,0,0,0,0,0,38,0,0,0,96,0,0,0,36,0,0,0,100,0,0,0,70,0,0,0,26,
+0,0,0,4,0,0,0,156,0,0,0,42,0,0,0,106,0,0,0,112,0,0,0,54,0,0,0,28,0,0,0,74,0,0,0,20,0,0,0,32,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,21,10,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,16,12,19,28,30,3,13,31,32,33,34,35,27,26,17,25,25,25,25,25,25,25,25,25,25,22,18,2,14,11,15,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,28,4,28,22,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,36,28,28,28,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,0,0,0,0,0,0,0,0,0,1,1,188,0,0,0,186,0,0,0,84,0,0,0,12,0,0,0,14,0,0,0,84,0,0,0,70,0,0,0,72,0,0,0,74,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,100,0,0,0,52,0,0,0,116,0,0,0,88,132,1,0,110,0,0,0,224,59,2,0,114,0,0,0,176,217,1,0,102,0,0,0,208,189,1,0,97,0,0,0,216,162,1,0,101,0,0,0,112,140,1,0,119,0,0,0,
+224,118,1,0,87,0,0,0,96,98,1,0,115,0,0,0,224,77,1,0,83,0,0,0,192,59,1,0,100,0,0,0,144,140,2,0,68,0,0,0,64,124,2,0,0,0,0,0,0,0,0,0,104,0,0,0,0,0,0,0,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,0,0,0,0,0,0,0,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0,0,0,0,0,0,60,0,0,0,38,0,0,0,8,0,0,0,16,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,
+0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,
+208,63,88,168,53,205,59,78,213,63,37,117,2,154,8,27,218,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,44,212,154,230,29,167,234,63,106,222,113,138,142,228,232,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,224,63,93,220,70,3,120,11,226,63,0,0,0,0,0,0,208,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,208,63,211,188,227,20,29,201,209,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,
+0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,93,220,70,3,120,11,226,63,93,220,70,3,120,11,226,63,93,220,70,3,120,11,226,63,13,113,172,139,219,104,220,63,100,93,220,70,3,120,237,63,210,111,95,7,206,25,231,63,16,122,54,171,62,87,229,63,16,122,54,171,62,87,229,63,210,111,95,7,206,25,231,63,120,11,36,40,126,140,227,63,181,21,251,203,238,201,225,63,210,111,95,7,206,25,231,63,210,111,95,7,206,25,231,63,88,168,53,205,59,78,213,
+63,136,133,90,211,188,227,216,63,210,111,95,7,206,25,231,63,120,11,36,40,126,140,227,63,196,66,173,105,222,113,236,63,210,111,95,7,206,25,231,63,210,111,95,7,206,25,231,63,181,21,251,203,238,201,225,63,210,111,95,7,206,25,231,63,16,122,54,171,62,87,229,63,181,21,251,203,238,201,225,63,120,11,36,40,126,140,227,63,210,111,95,7,206,25,231,63,210,111,95,7,206,25,231,63,134,56,214,197,109,52,238,63,210,111,95,7,206,25,231,63,210,111,95,7,206,25,231,63,120,11,36,40,126,140,227,63,88,168,53,205,59,78,213,
+63,211,188,227,20,29,201,209,63,88,168,53,205,59,78,213,63,166,10,70,37,117,2,222,63,0,0,0,0,0,0,224,63,88,168,53,205,59,78,213,63,13,113,172,139,219,104,220,63,0,0,0,0,0,0,224,63,13,113,172,139,219,104,220,63,0,0,0,0,0,0,224,63,13,113,172,139,219,104,220,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,0,0,0,0,0,0,224,63,211,188,227,20,29,201,209,63,106,222,113,138,142,228,232,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,
+0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,88,168,53,205,59,78,213,63,136,133,90,211,188,227,216,63,211,188,227,20,29,201,209,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,210,111,95,7,206,25,231,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,13,113,172,139,219,104,220,63,244,108,86,125,174,182,222,63,17,54,60,189,82,150,201,63,244,108,86,125,174,182,222,63,59,1,77,132,13,79,225,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,
+0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,
+0,208,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,62,232,217,172,250,92,197,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,130,115,70,148,246,6,199,63,13,113,172,139,219,104,220,63,0,0,0,0,0,0,224,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,7,240,22,72,80,252,
+220,63,162,180,55,248,194,100,214,63,88,168,53,205,59,78,213,63,13,113,172,139,219,104,220,63,13,113,172,139,219,104,220,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,208,63,13,113,172,139,219,104,220,63,0,0,0,0,0,0,208,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,208,63,88,168,53,205,59,
+78,213,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,208,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,196,66,173,105,222,113,236,63,0,0,0,0,0,0,
+208,63,127,217,61,121,88,168,209,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,120,11,36,40,126,140,227,63,210,111,95,7,206,25,231,63,196,66,173,105,222,113,236,63,19,242,65,207,102,213,211,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,16,122,54,171,62,87,229,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,211,188,227,20,29,201,209,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,211,188,227,20,29,201,209,63,
+0,0,0,0,0,0,224,63,210,111,95,7,206,25,231,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,0,0,0,0,0,0,208,63,72,210,1,0,64,0,0,0,144,164,1,0,144,0,0,0,232,161,1,0,76,0,0,0,72,66,1,0,174,0,0,0,56,160,1,0,196,0,0,0,128,158,1,0,10,0,0,0,96,188,1,0,102,0,0,0,16,64,1,0,92,0,0,0,248,154,1,0,130,0,0,0,88,153,1,0,190,0,0,0,104,151,1,0,78,0,0,0,8,149,1,0,36,0,0,0,128,146,1,0,116,0,0,0,208,142,1,0,54,0,0,0,72,61,1,0,158,0,0,0,80,138,1,0,32,0,0,0,136,136,1,0,38,0,0,0,120,134,
+1,0,58,0,0,0,208,132,1,0,58,0,0,0,80,131,1,0,128,0,0,0,152,129,1,0,136,0,0,0,18,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,17,34,35,36,17,37,38,39,40,41,42,43,44,17,45,46,47,16,16,48,16,16,16,16,16,16,16,49,50,51,16,52,53,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,54,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,
+17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,55,17,17,17,17,56,17,57,58,59,60,61,62,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,63,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,64,65,17,66,67,68,69,70,71,72,73,16,16,16,74,75,76,77,78,16,16,16,79,80,16,16,16,16,81,16,16,16,16,16,16,16,16,16,17,17,17,82,83,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,84,
+16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,85,16,16,16,16,86,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,87,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,88,89,90,91,16,16,16,16,
+16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,92,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,254,255,255,7,254,255,255,7,0,0,0,0,0,4,32,4,255,255,127,255,255,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,195,255,3,0,
+31,80,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,223,60,64,215,255,255,251,255,255,255,255,255,255,255,255,255,191,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,254,255,255,255,127,2,254,255,255,255,255,0,0,0,0,0,255,191,182,0,255,255,255,7,7,0,0,0,255,7,255,255,255,255,255,255,255,254,255,195,255,255,255,255,255,255,255,255,255,255,255,255,239,31,254,225,255,159,0,0,255,255,255,255,255,255,0,224,255,255,
+255,255,255,255,255,255,255,255,255,255,3,0,255,255,255,255,255,7,48,4,255,255,255,252,255,31,0,0,255,255,255,1,0,0,0,0,0,0,0,0,253,31,0,0,0,0,0,0,240,3,255,127,255,255,255,255,255,255,255,239,255,223,225,255,207,255,254,254,238,159,249,255,255,253,197,227,159,89,128,176,207,255,3,0,238,135,249,255,255,253,109,195,135,25,2,94,192,255,63,0,238,191,251,255,255,253,237,227,191,27,1,0,207,255,0,0,238,159,249,255,255,253,237,227,159,25,192,176,207,255,2,0,236,199,61,214,24,199,255,195,199,29,129,0,192,
+255,0,0,238,223,253,255,255,253,239,227,223,29,96,3,207,255,0,0,236,223,253,255,255,253,239,227,223,29,96,64,207,255,6,0,236,223,253,255,255,255,255,231,223,93,128,0,207,255,0,252,236,255,127,252,255,255,251,47,127,128,95,255,0,0,12,0,254,255,255,255,255,127,255,7,63,32,255,3,0,0,0,0,150,37,240,254,174,236,255,59,95,32,255,243,0,0,0,0,1,0,0,0,255,3,0,0,255,254,255,255,255,31,254,255,3,255,255,254,255,255,255,31,0,0,0,0,0,0,0,0,255,255,255,255,255,255,127,249,255,3,255,255,231,193,255,255,127,64,255,
+51,255,255,255,255,191,32,255,255,255,255,255,247,255,255,255,255,255,255,255,255,255,61,127,61,255,255,255,255,255,61,255,255,255,255,61,127,61,255,127,255,255,255,255,255,255,255,61,255,255,255,255,255,255,255,255,135,0,0,0,0,255,255,0,0,255,255,255,255,255,255,255,255,255,255,31,0,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,159,255,255,254,255,255,7,255,255,255,
+255,255,255,255,255,255,199,1,0,255,223,15,0,255,255,15,0,255,255,15,0,255,223,13,0,255,255,255,255,255,255,207,255,255,1,128,16,255,3,0,0,0,0,255,3,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,7,255,255,255,255,255,255,255,255,63,0,255,255,255,31,255,15,255,1,192,255,255,255,255,63,31,0,255,255,255,255,255,15,255,255,255,3,255,3,0,0,0,0,255,255,255,15,255,255,255,255,255,255,255,127,254,255,31,0,255,3,255,3,128,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,239,255,239,15,255,
+3,0,0,0,0,255,255,255,255,255,243,255,255,255,255,255,255,191,255,3,0,255,255,255,255,255,255,63,0,255,227,255,255,255,255,255,63,0,0,0,0,0,0,0,0,0,0,0,0,0,222,111,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,255,255,63,63,255,255,255,255,63,63,255,170,255,255,255,63,255,255,255,255,255,255,223,95,220,31,207,15,255,31,220,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,128,0,0,255,31,0,0,0,0,0,0,0,0,0,0,0,0,132,252,47,62,80,189,255,243,224,67,
+0,0,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,255,255,255,255,255,255,3,0,0,255,255,255,255,255,127,255,255,255,255,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,120,12,0,255,255,255,255,191,32,255,255,255,255,255,255,255,128,0,0,255,255,127,0,127,127,127,127,127,127,127,127,255,255,255,255,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,0,0,0,254,3,62,31,254,255,255,255,255,255,255,255,255,
+255,127,224,254,255,255,255,255,255,255,255,255,255,255,247,224,255,255,255,255,63,254,255,255,255,255,255,255,255,255,255,255,127,0,0,255,255,255,7,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,0,0,0,0,0,0,0,0,255,255,255,255,255,63,
+255,31,255,255,255,15,0,0,255,255,255,255,255,127,240,143,255,255,255,128,255,255,255,255,255,255,255,255,255,255,0,0,0,0,128,255,252,255,255,255,255,255,255,255,255,255,255,255,255,121,15,0,255,7,0,0,0,0,0,0,0,0,0,255,187,247,255,255,255,0,0,0,255,255,255,255,255,255,15,0,255,255,255,255,255,255,255,255,15,0,255,3,0,0,252,8,255,255,255,255,255,7,255,255,255,255,7,0,255,255,255,31,255,255,255,255,255,255,247,255,0,128,255,3,0,0,0,0,255,255,255,255,255,255,127,0,255,63,255,3,255,255,127,4,255,255,
+255,255,255,255,255,127,5,0,0,56,255,255,60,0,126,126,126,0,127,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,7,255,3,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,255,127,248,255,255,255,255,255,15,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,0,0,0,127,0,248,224,255,253,127,95,219,255,255,255,255,255,255,255,255,255,255,255,255,255,3,0,0,0,248,255,255,255,255,255,255,255,255,
+255,255,255,255,63,0,0,255,255,255,255,255,255,255,255,252,255,255,255,255,255,255,0,0,0,0,0,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,0,0,255,3,254,255,255,7,254,255,255,7,192,255,255,255,255,255,255,255,255,255,255,127,252,252,252,28,0,0,0,0,255,239,255,255,127,255,255,183,255,63,255,63,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,7,0,0,0,0,0,0,0,0,255,255,255,255,255,255,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,31,255,255,255,255,255,255,1,0,0,0,0,0,255,255,255,127,0,0,255,255,255,7,0,0,0,0,0,0,255,255,255,63,255,255,255,255,15,255,62,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,3,0,0,0,0,0,0,0,0,0,0,63,253,255,255,255,255,191,145,255,255,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,63,0,255,255,255,3,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,192,0,0,0,0,0,0,0,0,111,240,239,254,255,255,15,0,0,0,0,0,255,
+255,255,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,63,0,255,255,63,0,255,255,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,63,0,0,0,192,255,0,0,252,255,255,255,255,255,255,1,0,0,255,255,255,1,255,3,255,255,255,255,255,255,199,255,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,30,0,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,63,0,255,3,0,0,0,0,0,0,255,255,
+255,255,255,255,255,255,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,31,0,255,255,255,255,255,127,0,0,248,255,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,
+255,255,255,255,255,255,223,255,255,255,255,255,255,255,255,223,100,222,255,235,239,255,255,255,255,255,255,255,191,231,223,223,255,255,255,123,95,252,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,255,255,255,253,255,255,247,255,255,255,247,255,255,223,255,255,255,223,255,255,127,255,255,255,127,255,255,255,253,255,255,255,253,255,255,247,207,255,255,255,255,255,255,239,255,
+255,255,150,254,247,10,132,234,150,170,150,247,247,94,255,251,255,15,238,251,255,15,0,0,0,0,0,0,0,0,18,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,16,16,34,35,16,36,37,38,39,40,41,42,43,16,44,45,46,17,47,48,17,17,49,17,17,17,50,51,52,53,54,55,56,57,17,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,58,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
+16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,59,16,60,61,62,63,64,65,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,66,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,67,16,16,68,16,69,70,71,16,72,16,73,16,16,16,16,74,75,76,77,16,16,78,16,79,80,16,16,16,16,81,16,16,16,16,16,16,16,16,16,16,16,16,16,82,16,16,16,16,16,16,16,16,
+16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,83,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,84,85,86,87,
+16,16,88,89,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,90,16,91,92,93,94,95,96,97,98,16,16,16,16,16,16,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,254,255,0,252,1,0,0,248,1,0,0,120,0,0,0,0,255,251,223,251,0,0,128,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60,0,252,255,224,175,255,255,255,255,255,255,
+255,255,255,255,223,255,255,255,255,255,32,64,176,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,0,134,254,255,255,255,0,64,73,0,0,0,0,0,24,0,223,255,0,200,0,0,0,0,0,0,0,1,0,60,0,0,0,0,0,0,0,0,0,0,0,0,16,224,1,30,0,96,255,191,0,0,0,0,0,0,255,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,207,3,0,0,0,3,0,32,255,127,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,0,0,0,0,0,0,0,0,0,16,0,32,30,0,48,0,1,0,0,0,0,0,0,0,0,16,
+0,32,0,0,0,0,252,15,0,0,0,0,0,0,0,16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,32,0,0,0,0,3,0,0,0,0,0,0,0,0,16,0,32,0,0,0,0,253,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,255,7,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,255,0,0,0,0,0,0,0,16,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,63,2,0,0,0,0,0,0,0,0,0,4,0,0,0,0,16,0,0,0,0,0,0,128,0,128,192,223,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,31,0,0,0,0,0,0,254,255,255,255,0,252,255,255,0,0,0,0,0,0,0,0,252,0,0,0,0,0,0,192,255,223,255,7,0,0,0,0,0,0,0,0,0,0,128,6,0,252,0,0,24,62,0,0,128,191,
+0,204,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,96,255,255,255,31,0,0,255,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,1,0,0,24,0,0,0,0,0,0,0,0,0,56,0,0,0,0,16,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,0,0,254,127,47,0,0,255,3,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,196,255,255,255,255,0,0,0,192,0,0,0,0,0,0,0,0,1,0,224,159,0,0,0,0,127,
+63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,16,0,0,252,255,255,255,31,0,0,0,0,0,12,0,0,0,0,0,0,64,0,12,240,0,0,0,0,0,0,192,248,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,255,0,255,255,255,33,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,127,0,0,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160,3,224,0,224,0,224,0,96,128,248,255,255,255,252,255,255,255,255,255,127,31,252,241,127,255,127,0,0,255,255,255,3,0,0,255,255,255,255,1,0,123,3,208,193,175,66,0,12,31,188,255,255,0,0,0,0,0,2,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,255,255,255,127,0,0,0,255,7,0,0,255,255,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,252,255,255,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,31,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,135,3,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,127,255,15,0,0,0,0,0,0,0,0,255,255,255,251,255,255,255,255,255,255,255,255,255,255,15,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,255,15,30,255,255,255,1,252,193,224,0,0,0,0,0,0,0,0,0,0,0,30,1,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,0,255,255,255,255,
+15,0,0,0,255,255,255,127,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,127,0,0,0,0,0,0,192,0,224,0,0,0,0,0,0,0,0,0,0,0,128,15,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,255,255,127,0,3,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,68,8,0,0,0,15,255,3,0,0,0,0,0,0,240,0,0,0,0,0,0,0,0,0,16,192,
+0,0,255,255,3,7,0,0,0,0,0,248,0,0,0,0,8,128,0,0,0,0,0,0,0,0,0,0,8,0,255,63,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,0,0,128,11,0,0,0,0,0,0,0,128,2,0,0,192,0,0,67,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,255,255,
+255,3,127,0,255,255,255,255,247,255,127,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,254,255,0,252,1,0,0,248,1,0,0,248,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127,127,0,48,135,255,255,255,255,255,143,255,0,0,0,0,0,0,224,255,255,7,255,15,0,0,0,0,0,0,255,255,255,255,255,63,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,143,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,135,255,0,255,1,0,0,0,
+224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,0,0,0,255,0,0,0,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,63,252,255,63,0,0,0,3,0,0,0,0,0,0,254,3,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,225,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,7,0,0,0,0,0,
+0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,255,255,255,255,127,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,0,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,127,0,255,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,8,0,0,0,8,0,0,32,
+0,0,0,32,0,0,128,0,0,0,128,0,0,0,2,0,0,0,2,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,255,255,255,255,255,15,255,255,255,255,255,255,255,255,255,255,255,255,15,0,255,127,254,127,254,255,254,255,0,0,0,0,255,7,255,255,255,127,255,255,255,255,255,255,255,15,255,255,255,255,255,7,0,0,0,0,0,0,0,0,192,255,255,255,7,0,255,255,255,255,255,7,255,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,1,0,191,255,255,255,255,255,255,255,255,31,255,255,15,0,255,
+255,255,255,223,7,0,0,255,255,1,0,255,255,255,255,255,255,255,127,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,30,255,255,255,255,255,255,255,63,15,0,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,255,255,255,255,255,255,255,255,225,255,0,0,0,0,0,0,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,2,
+0,0,0,4,0,0,0,0,0,0,0,80,197,1,0,248,168,1,0,160,146,1,0,200,124,1,0,72,103,1,0,168,82,1,0,32,64,1,0,232,144,2,0,160,128,2,0,128,112,2,0,48,93,2,0,224,79,2,0,168,68,2,0,32,56,2,0,144,44,2,0,160,32,2,0,96,22,2,0,248,10,2,0,0,3,2,0,64,250,1,0,96,237,1,0,152,227,1,0,248,219,1,0,240,216,1,0,168,213,1,0,136,210,1,0,200,207,1,0,64,204,1,0,176,200,1,0,32,197,1,0,240,191,1,0,168,188,1,0,104,186,1,0,96,184,1,0,152,182,1,0,16,180,1,0,136,177,1,0,200,174,1,0,216,171,1,0,152,168,1,0,168,164,1,0,32,162,1,0,88,
+160,1,0,192,158,1,0,176,156,1,0,24,155,1,0,152,153,1,0,160,151,1,0,32,149,1,0,136,146,1,0,216,142,1,0,240,139,1,0,88,138,1,0,144,136,1,0,128,134,1,0,216,132,1,0,88,131,1,0,160,129,1,0,88,127,1,0,168,124,1,0,88,120,1,0,64,118,1,0,32,116,1,0,160,114,1,0,192,112,1,0,56,111,1,0,88,109,1,0,128,107,1,0,176,105,1,0,40,103,1,0,216,99,1,0,216,97,1,0,144,95,1,0,96,93,1,0,224,91,1,0,16,90,1,0,72,88,1,0,152,86,1,0,152,84,1,0,128,82,1,0,32,79,1,0,72,77,1,0,136,75,1,0,24,74,1,0,88,72,1,0,208,70,1,0,56,69,1,0,152,
+67,1,0,24,66,1,0,224,63,1,0,24,61,1,0,0,59,1,0,40,57,1,0,200,55,1,0,64,54,1,0,8,53,1,0,240,51,1,0,136,147,2,0,0,146,2,0,168,144,2,0,184,141,2,0,24,140,2,0,88,138,2,0,0,137,2,0,120,135,2,0,64,134,2,0,232,132,2,0,120,131,2,0,200,129,2,0,80,128,2,0,64,125,2,0,168,123,2,0,72,122,2,0,240,120,2,0,152,119,2,0,56,118,2,0,248,116,2,0,200,115,2,0,80,114,2,0,96,112,2,0,120,109,2,0,56,108,2,0,248,106,2,0,232,105,2,0,136,104,2,0,88,102,2,0,240,100,2,0,168,99,2,0,216,94,2,0,232,92,2,0,48,90,2,0,184,88,2,0,104,
+87,2,0,96,86,2,0,64,85,2,0,64,84,2,0,56,83,2,0,56,82,2,0,216,80,2,0,208,79,2,0,176,77,2,0,128,76,2,0,128,75,2,0,168,74,2,0,168,73,2,0,216,72,2,0,232,71,2,0,0,0,0,0,8,0,0,0,0,0,0,0,160,0,0,0,170,0,0,0,32,0,0,0,58,0,0,0,70,0,0,0,12,0,0,0,34,0,0,0,36],"i8",L,l.J);D([64,0,0,0,174,0,0,0,66,0,0,0,140,0,0,0,34,0,0,0,178,0,0,0,0,0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,62,0,0,0,44,0,0,0,12,0,0,0,66,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,
+0,0,255,255,255,255,0,0,0,0,0,0,0,0,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,108,108,45,99,111,110,100,105,116,105,111,110,101,100,0,12,0,8,0,140,0,8,0,76,0,8,0,204,0,8,0,44,0,8,0,172,0,8,0,108,0,8,0,236,0,8,0,28,0,8,0,156,0,8,0,92,0,8,0,220,0,8,0,60,0,8,0,188,0,8,0,124,0,8,0,252,0,8,0,2,0,8,0,130,0,8,0,66,0,8,0,194,0,8,0,34,0,8,0,162,0,8,0,98,0,8,0,226,0,8,0,18,0,8,0,146,0,8,0,82,0,8,0,210,0,8,0,50,0,8,0,178,0,8,0,114,0,8,0,242,0,8,0,10,0,8,0,138,0,8,0,74,0,8,0,202,0,8,0,42,0,8,0,170,
+0,8,0,106,0,8,0,234,0,8,0,26,0,8,0,154,0,8,0,90,0,8,0,218,0,8,0,58,0,8,0,186,0,8,0,122,0,8,0,250,0,8,0,6,0,8,0,134,0,8,0,70,0,8,0,198,0,8,0,38,0,8,0,166,0,8,0,102,0,8,0,230,0,8,0,22,0,8,0,150,0,8,0,86,0,8,0,214,0,8,0,54,0,8,0,182,0,8,0,118,0,8,0,246,0,8,0,14,0,8,0,142,0,8,0,78,0,8,0,206,0,8,0,46,0,8,0,174,0,8,0,110,0,8,0,238,0,8,0,30,0,8,0,158,0,8,0,94,0,8,0,222,0,8,0,62,0,8,0,190,0,8,0,126,0,8,0,254,0,8,0,1,0,8,0,129,0,8,0,65,0,8,0,193,0,8,0,33,0,8,0,161,0,8,0,97,0,8,0,225,0,8,0,17,0,8,0,145,0,8,
+0,81,0,8,0,209,0,8,0,49,0,8,0,177,0,8,0,113,0,8,0,241,0,8,0,9,0,8,0,137,0,8,0,73,0,8,0,201,0,8,0,41,0,8,0,169,0,8,0,105,0,8,0,233,0,8,0,25,0,8,0,153,0,8,0,89,0,8,0,217,0,8,0,57,0,8,0,185,0,8,0,121,0,8,0,249,0,8,0,5,0,8,0,133,0,8,0,69,0,8,0,197,0,8,0,37,0,8,0,165,0,8,0,101,0,8,0,229,0,8,0,21,0,8,0,149,0,8,0,85,0,8,0,213,0,8,0,53,0,8,0,181,0,8,0,117,0,8,0,245,0,8,0,13,0,8,0,141,0,8,0,77,0,8,0,205,0,8,0,45,0,8,0,173,0,8,0,109,0,8,0,237,0,8,0,29,0,8,0,157,0,8,0,93,0,8,0,221,0,8,0,61,0,8,0,189,0,8,0,125,
+0,8,0,253,0,8,0,19,0,9,0,19,1,9,0,147,0,9,0,147,1,9,0,83,0,9,0,83,1,9,0,211,0,9,0,211,1,9,0,51,0,9,0,51,1,9,0,179,0,9,0,179,1,9,0,115,0,9,0,115,1,9,0,243,0,9,0,243,1,9,0,11,0,9,0,11,1,9,0,139,0,9,0,139,1,9,0,75,0,9,0,75,1,9,0,203,0,9,0,203,1,9,0,43,0,9,0,43,1,9,0,171,0,9,0,171,1,9,0,107,0,9,0,107,1,9,0,235,0,9,0,235,1,9,0,27,0,9,0,27,1,9,0,155,0,9,0,155,1,9,0,91,0,9,0,91,1,9,0,219,0,9,0,219,1,9,0,59,0,9,0,59,1,9,0,187,0,9,0,187,1,9,0,123,0,9,0,123,1,9,0,251,0,9,0,251,1,9,0,7,0,9,0,7,1,9,0,135,0,9,
+0,135,1,9,0,71,0,9,0,71,1,9,0,199,0,9,0,199,1,9,0,39,0,9,0,39,1,9,0,167,0,9,0,167,1,9,0,103,0,9,0,103,1,9,0,231,0,9,0,231,1,9,0,23,0,9,0,23,1,9,0,151,0,9,0,151,1,9,0,87,0,9,0,87,1,9,0,215,0,9,0,215,1,9,0,55,0,9,0,55,1,9,0,183,0,9,0,183,1,9,0,119,0,9,0,119,1,9,0,247,0,9,0,247,1,9,0,15,0,9,0,15,1,9,0,143,0,9,0,143,1,9,0,79,0,9,0,79,1,9,0,207,0,9,0,207,1,9,0,47,0,9,0,47,1,9,0,175,0,9,0,175,1,9,0,111,0,9,0,111,1,9,0,239,0,9,0,239,1,9,0,31,0,9,0,31,1,9,0,159,0,9,0,159,1,9,0,95,0,9,0,95,1,9,0,223,0,9,0,
+223,1,9,0,63,0,9,0,63,1,9,0,191,0,9,0,191,1,9,0,127,0,9,0,127,1,9,0,255,0,9,0,255,1,9,0,0,0,7,0,64,0,7,0,32,0,7,0,96,0,7,0,16,0,7,0,80,0,7,0,48,0,7,0,112,0,7,0,8,0,7,0,72,0,7,0,40,0,7,0,104,0,7,0,24,0,7,0,88,0,7,0,56,0,7,0,120,0,7,0,4,0,7,0,68,0,7,0,36,0,7,0,100,0,7,0,20,0,7,0,84,0,7,0,52,0,7,0,116,0,7,0,3,0,8,0,131,0,8,0,67,0,8,0,195,0,8,0,35,0,8,0,163,0,8,0,99,0,8,0,227,0,8,0,184,40,0,0,88,102,0,0,1,1,0,0,30,1,0,0,15,0,0,0,0,0,0,0,0,0,5,0,16,0,5,0,8,0,5,0,24,0,5,0,4,0,5,0,20,0,5,0,12,0,5,0,28,0,
+5,0,2,0,5,0,18,0,5,0,10,0,5,0,26,0,5,0,6,0,5,0,22,0,5,0,14,0,5,0,30,0,5,0,1,0,5,0,17,0,5,0,9,0,5,0,25,0,5,0,5,0,5,0,21,0,5,0,13,0,5,0,29,0,5,0,3,0,5,0,19,0,5,0,11,0,5,0,27,0,5,0,7,0,5,0,23,0,5,0,80,45,0,0,208,102,0,0,0,0,0,0,30,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,72,103,0,0,0,0,0,0,19,0,0,0,7,0,0,0,0,0,0,0,46,0,0,0,6,0,0,0,80,0,0,0,18,0,0,0,34,0,0,0,82,0,0,0,22,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,52,0,0,0,46,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,193,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,176,193,0,0,0,0,0,0,0,0,0,0,0,0,0,160,1,0,0,16,0,0,0,1,0,0,0,0,0,0,0,0,16,0,2,0,0,0,0,0,0,0,0,0,0,16,64,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,176,193,0,0,0,0,0,0,0,0,0,0,0,16,64,144,37,0,0,147,0,0,0,1,0,0,0,0,0,0,0,0,32,3,2,0,0,0,0,0,0,0,0,0,0,16,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,16,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,144,195,0,0,0,0,0,0,0,0,0,0,0,16,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,16,0,0,0,0,0,0,0,0,0,0,0,0,16,64,128,101,0,0,8,0,0,0,1,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,56,0,0,0,32,0,0,0,8,0,0,0,90,0,0,0,86,0,0,0,32,0,0,0,232,22,2,0,96,69,2,0,248,56,2,0,64,45,2,0,64,33,2,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0,0,
+112,0,0,0,2,0,0,0,0,0,0,0,50,0,0,0,0,0,0,0,118,0,0,0,108,0,0,0,166,0,0,0,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,102,0,0,0,110,0,0,0,14,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,0,0,0,0,0,0,0,14,0,0,0,2,0,0,0,2,0,0,0,50,0,0,0,28,0,0,0,14,0,0,0,8,124,1,0,232,119,1,0,248,117,1,0,104,65,3,0,88,114,1,0,136,112,1,0,240,110,1,0,16,109,1,0,104,65,3,0,32,107,1,0,72,105,1,0,104,65,3,0,128,102,1,0,112,99,1,0,128,97,1,0,40,95,1,0,24,93,1,0,136,91,1,0,184,89,1,0,24,88,1,0,56,86,1,0,80,84,1,0,32,82,
+1,0,208,78,1,0,24,77,1,0,80,75,1,0,120,74,1,0,32,72,1,0,168,70,1,0,8,69,1,0,104,67,1,0,192,65,1,0,112,63,1,0,200,60,1,0,104,65,3,0,144,58,1,0,240,56,1,0,136,55,1,0,232,53,1,0,104,65,3,0,224,52,1,0,208,51,1,0,72,147,2,0,216,145,2,0,200,60,1,0,104,65,3,0,96,144,2,0,128,141,2,0,160,139,2,0,240,137,2,0,112,136,2,0,72,135,2,0,32,134,2,0,200,132,2,0,88,131,2,0,168,129,2,0,48,128,2,0,104,65,3,0,8,125,2,0,120,123,2,0,24,122,2,0,184,120,2,0,104,119,2,0,104,65,3,0,16,118,2,0,216,116,2,0,176,115,2,0,56,114,
+2,0,64,112,2,0,96,109,2,0,40,108,2,0,216,106,2,0,184,105,2,0,200,104,2,0,8,103,2,0,224,100,2,0,200,60,1,0,104,65,3,0,144,99,2,0,192,94,2,0,200,92,2,0,24,88,1,0,104,65,3,0,248,89,2,0,144,88,2,0,80,87,2,0,48,86,2,0,56,85,2,0,48,84,2,0,40,83,2,0,240,81,2,0,208,80,2,0,192,79,2,0,24,88,1,0,104,65,3,0,128,77,2,0,112,76,2,0,112,75,2,0,144,74,2,0,232,73,2,0,192,72,2,0,208,71,2,0,216,70,2,0,200,60,1,0,104,65,3,0,168,69,2,0,128,68,2,0,88,66,2,0,32,65,2,0,24,64,2,0,240,62,2,0,216,61,2,0,8,61,2,0,0,60,2,0,176,
+58,2,0,128,57,2,0,200,60,1,0,104,65,3,0,240,55,2,0,8,54,2,0,104,65,3,0,0,53,2,0,208,51,2,0,224,50,2,0,208,49,2,0,0,49,2,0,24,48,2,0,24,47,2,0,176,45,2,0,96,44,2,0,104,65,3,0,144,42,2,0,104,65,3,0,88,41,2,0,232,39,2,0,224,38,2,0,224,37,2,0,0,37,2,0,8,36,2,0,200,60,1,0,104,65,3,0,240,34,2,0,104,65,3,0,184,33,2,0,128,32,2,0,80,30,2,0,56,29,2,0,80,28,2,0,168,27,2,0,240,26,2,0,24,88,1,0,104,65,3,0,24,26,2,0,104,65,3,0,80,25,2,0,56,24,2,0,72,23,2,0,56,22,2,0,64,20,2,0,48,19,2,0,32,18,2,0,104,65,3,0,0,17,
+2,0,128,15,2,0,112,14,2,0,184,13,2,0,232,12,2,0,240,11,2,0,208,10,2,0,168,9,2,0,104,65,3,0,240,8,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,125,2,0,136,109,2,0,64,90,2,0,0,0,0,0,0,0,0,0,4,0,0,0,224,77,2,0,0,0,0,0,0,0,0,0,128,66,2,0,136,109,2,0,64,90,2,0,0,0,0,0,40,54,2,0,5,0,0,0,224,77,2,0,0,0,0,0,192,42,2,0,112,30,2,0,136,109,2,0,88,20,2,0,0,0,0,0,0,0,0,0,6,0,0,0,224,77,2,0,184,9,2,0,0,0,0,0,96,1,2,0,136,109,2,0,88,20,2,0,0,0,0,0,40,54,2,0,7,0,0,0,224,77,2,0,184,9,2,0,192,42,2,0,104,248,1,0,216,235,
+1,0,88,20,2,0,0,0,0,0,0,0,0,0,10,0,0,0,112,226,1,0,184,9,2,0,0,0,0,0,56,219,1,0,216,235,1,0,88,20,2,0,0,0,0,0,192,42,2,0,11,0,0,0,112,226,1,0,184,9,2,0,192,42,2,0,240,215,1,0,216,235,1,0,240,212,1,0,0,0,0,0,0,0,0,0,8,0,0,0,112,226,1,0,0,0,0,0,0,0,0,0,208,209,1,0,216,235,1,0,240,212,1,0,0,0,0,0,192,42,2,0,9,0,0,0,112,226,1,0,0,0,0,0,192,42,2,0,56,207,1,0,56,207,1,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,128,203,1,0,0,0,0,0,0,0,0,0,224,199,1,0,56,207,1,0,184,9,2,0,0,0,0,0,0,0,0,0,14,0,0,0,128,203,1,0,184,
+9,2,0,0,0,0,0,56,196,1,0,56,207,1,0,184,9,2,0,0,0,0,0,40,54,2,0,15,0,0,0,128,203,1,0,184,9,2,0,192,42,2,0,224,190,1,0,56,207,1,0,0,0,0,0,0,0,0,0,40,54,2,0,13,0,0,0,128,203,1,0,0,0,0,0,192,42,2,0,248,187,1,0,248,187,1,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,224,77,2,0,0,0,0,0,0,0,0,0,248,185,1,0,248,187,1,0,184,9,2,0,0,0,0,0,0,0,0,0,18,0,0,0,224,77,2,0,184,9,2,0,0,0,0,0,200,183,1,0,248,187,1,0,184,9,2,0,0,0,0,0,40,54,2,0,19,0,0,0,224,77,2,0,184,9,2,0,192,42,2,0,200,181,1,0,248,187,1,0,0,0,0,0,112,179,1,
+0,0,0,0,0,20,0,0,0,224,77,2,0,0,0,0,0,0,0,0,0,216,176,1,0,248,187,1,0,184,9,2,0,112,179,1,0,0,0,0,0,22,0,0,0,224,77,2,0,184,9,2,0,0,0,0,0,0,174,1,0,248,187,1,0,184,9,2,0,112,179,1,0,40,54,2,0,23,0,0,0,224,77,2,0,184,9,2,0,192,42,2,0,80,171,1,0,248,187,1,0,0,0,0,0,112,179,1,0,40,54,2,0,21,0,0,0,224,77,2,0,0,0,0,0,192,42,2,0,32,168,1,0,248,187,1,0,0,0,0,0,0,0,0,0,40,54,2,0,17,0,0,0,224,77,2,0,0,0,0,0,192,42,2,0,16,164,1,0,144,161,1,0,184,9,2,0,0,0,0,0,0,0,0,0,26,0,0,0,112,226,1,0,184,9,2,0,0,0,0,0,
+232,159,1,0,144,161,1,0,184,9,2,0,0,0,0,0,192,42,2,0,27,0,0,0,112,226,1,0,184,9,2,0,192,42,2,0,64,158,1,0,144,161,1,0,0,0,0,0,0,0,0,0,192,42,2,0,25,0,0,0,112,226,1,0,0,0,0,0,192,42,2,0,96,156,1,0,144,161,1,0,184,154,1,0,0,0,0,0,0,0,0,0,24,0,0,0,112,226,1,0,0,0,0,0,0,0,0,0,16,153,1,0,48,151,1,0,184,9,2,0,0,0,0,0,0,0,0,0,30,0,0,0,112,226,1,0,184,9,2,0,0,0,0,0,200,148,1,0,48,151,1,0,184,9,2,0,0,0,0,0,192,42,2,0,31,0,0,0,112,226,1,0,184,9,2,0,192,42,2,0,24,146,1,0,48,151,1,0,0,0,0,0,0,0,0,0,192,42,2,
+0,29,0,0,0,112,226,1,0,0,0,0,0,192,42,2,0,112,142,1,0,48,151,1,0,184,154,1,0,0,0,0,0,0,0,0,0,28,0,0,0,112,226,1,0,0,0,0,0,0,0,0,0,144,139,1,0,144,139,1,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,216,137,1,0,0,0,0,0,0,0,0,0,48,136,1,0,16,134,1,0,184,9,2,0,0,0,0,0,0,0,0,0,2,0,0,0,112,226,1,0,184,9,2,0,0,0,0,0,136,132,1,0,16,134,1,0,184,9,2,0,0,0,0,0,192,42,2,0,3,0,0,0,112,226,1,0,184,9,2,0,192,42,2,0,224,130,1,0,16,134,1,0,0,0,0,0,0,0,0,0,192,42,2,0,1,0,0,0,112,226,1,0,0,0,0,0,192,42,2,0,48,129,1,0,16,134,
+1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,226,1,0,0,0,0,0,0,0,0,0,0,127,1,0,32,124,1,0,8,120,1,0,0,0,0,0,192,42,2,0,33,0,0,0,112,226,1,0,0,0,0,0,192,42,2,0,16,118,1,0,224,115,1,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,0,0,216,137,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,18,0,0,0,34,0,0,0,184,0,0,0,22,0,0,0,48,0,0,0,32,57,1,0,184,55,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,18,0,0,0,34,0,0,0,52,0,0,0,0,0,0,0,38,0,0,0,
+100,111,116,32,112,105,99,32,112,108,117,103,105,110,58,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0,0,134,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,96,0,0,0,24,0,0,0,10,0,0,0,68,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,
+0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,180,0,0,0,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,73,0,49,1,83,0,127,1,48,1,105,0,120,1,255,0,129,1,83,2,130,1,131,1,132,1,133,1,134,1,84,2,135,1,136,1,137,1,86,2,138,1,87,2,139,1,140,1,142,1,221,1,143,1,89,2,144,1,91,2,145,1,146,1,147,1,96,2,148,1,99,2,150,1,105,2,151,1,104,2,152,1,153,1,156,1,111,2,157,1,114,2,159,1,117,2,166,1,128,2,167,1,168,1,169,1,131,2,172,1,173,1,174,1,136,2,175,1,176,1,177,1,138,2,178,1,139,2,183,1,146,
+2,184,1,185,1,188,1,189,1,196,1,198,1,196,1,197,1,197,1,198,1,199,1,201,1,199,1,200,1,200,1,201,1,202,1,204,1,202,1,203,1,203,1,204,1,241,1,243,1,241,1,242,1,242,1,243,1,244,1,245,1,246,1,149,1,247,1,191,1,32,2,158,1,134,3,172,3,136,3,173,3,137,3,174,3,138,3,175,3,140,3,204,3,142,3,205,3,143,3,206,3,153,3,69,3,153,3,190,31,163,3,194,3,247,3,248,3,250,3,251,3,96,30,155,30,223,0,223,0,158,30,223,0,89,31,81,31,91,31,83,31,93,31,85,31,95,31,87,31,188,31,179,31,204,31,195,31,236,31,229,31,252,31,243,31,
+58,2,101,44,59,2,60,2,61,2,154,1,62,2,102,44,65,2,66,2,67,2,128,1,68,2,137,2,69,2,140,2,244,3,184,3,249,3,242,3,253,3,123,3,254,3,124,3,255,3,125,3,192,4,207,4,38,33,201,3,42,33,107,0,43,33,229,0,50,33,78,33,131,33,132,33,96,44,97,44,98,44,107,2,99,44,125,29,100,44,125,2,109,44,81,2,110,44,113,2,111,44,80,2,112,44,82,2,114,44,115,44,117,44,118,44,126,44,63,2,127,44,64,2,242,44,243,44,125,167,121,29,139,167,140,167,141,167,101,2,170,167,102,2,199,16,39,45,205,16,45,45,118,3,119,3,156,3,181,0,146,3,
+208,3,152,3,209,3,166,3,213,3,160,3,214,3,154,3,240,3,161,3,241,3,149,3,245,3,207,3,215,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,
+0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,154,153,153,153,153,153,217,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,45,0,0,1,0,0,0,1,0,
+0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,1,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,
+51,51,51,51,51,227,63,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,24,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,128,102,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,128,102,64,154,153,153,153,153,153,217,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,128,102,64,123,20,174,71,225,122,228,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,123,
+20,174,71,225,122,228,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,51,51,51,
+51,51,211,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,128,70,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,1,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,
+0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,128,70,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,158,0,0,0,28,0,0,0,0,0,0,0,0,0,0,0,67,68,65,84,65,91,0,0,96,0,0,0,144,0,0,0,128,0,0,0,144,0,0,0,8,0,0,0,4,0,0,0,0,0,0,0,56,0,0,0,52,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,249,1,0,240,236,1,0,32,227,1,0,200,219,1,0,72,216,1,0,112,213,1,0,56,210,1,0,152,207,1,0,0,204,1,0,104,200,1,0,176,
+196,1,0,176,191,1,0,88,188,1,0,64,186,1,0,8,184,1,0,24,182,1,0,208,179,1,0,40,177,1,0,72,174,1,0,168,171,1,0,120,168,1,0,0,0,0,0,2,3,4,5,6,7,8,0,0,9,10,11,12,13,14,15,16,17,0,0,0,0,0,0,0,0,0,0,0,0,18,19,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,23,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,0,0,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,4,254,255,255,135,254,255,255,7,0,0,0,0,0,0,0,0,255,255,127,255,255,255,127,255,255,255,255,255,255,255,243,127,254,253,255,
+255,255,255,255,127,255,255,255,255,255,255,255,255,15,224,255,255,255,255,49,252,255,255,255,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,1,0,248,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,215,255,255,251,255,255,255,255,127,127,84,253,255,15,0,254,223,255,255,255,255,255,255,255,255,254,223,255,255,255,255,3,0,255,255,255,255,255,255,159,25,255,255,255,207,63,3,0,0,0,0,0,0,254,255,255,255,127,2,254,255,255,255,127,0,0,0,0,0,0,0,0,0,255,255,255,7,7,0,0,0,0,0,254,255,255,7,254,
+7,0,0,0,0,254,255,255,255,255,255,255,255,255,124,255,127,47,0,96,0,0,0,224,255,255,255,255,255,255,35,0,0,0,255,3,0,0,0,224,159,249,255,255,253,197,3,0,0,0,176,3,0,3,0,224,135,249,255,255,253,109,3,0,0,0,94,0,0,28,0,224,175,251,255,255,253,237,35,0,0,0,0,1,0,0,0,224,159,249,255,255,253,205,35,0,0,0,176,3,0,0,0,224,199,61,214,24,199,191,3,0,0,0,0,0,0,0,0,224,223,253,255,255,253,239,3,0,0,0,0,3,0,0,0,224,223,253,255,255,253,239,3,0,0,0,64,3,0,0,0,224,223,253,255,255,253,255,3,0,0,0,0,3,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,255,127,13,0,63,0,0,0,0,0,0,0,150,37,240,254,174,108,13,32,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,254,255,255,255,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,63,0,255,255,255,255,127,0,237,218,7,0,0,0,0,80,1,80,49,130,171,98,44,0,0,0,0,64,0,201,128,245,7,0,0,0,0,8,1,2,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,15,255,255,255,255,255,255,255,255,255,255,255,3,255,255,63,63,255,
+255,255,255,63,63,255,170,255,255,255,63,255,255,255,255,255,255,223,95,220,31,207,15,255,31,220,31,0,0,0,0,64,76,0,0,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,254,3,0,0,254,255,255,255,255,255,255,255,255,255,31,0,254,255,255,255,255,255,255,255,255,255,255,7,224,255,255,255,255,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,63,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,255,7,254,255,255,135,254,255,255,7,0,0,0,0,0,0,128,0,255,255,127,255,255,255,127,255,255,255,255,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,1,0,248,3,0,3,0,0,0,0,0,255,255,255,255,255,255,255,255,63,0,0,0,3,0,0,0,192,215,255,255,251,255,255,255,255,127,127,84,253,255,15,0,254,223,255,255,255,255,255,255,255,255,254,223,255,255,255,255,123,0,255,255,255,255,255,255,159,25,255,255,255,207,63,3,0,0,0,0,0,0,254,
+255,255,255,127,2,254,255,255,255,127,0,254,255,251,255,255,187,22,0,255,255,255,7,7,0,0,0,0,0,254,255,255,7,255,255,7,0,255,3,255,255,255,255,255,255,255,255,255,124,255,127,239,255,255,61,255,3,238,255,255,255,255,255,255,243,255,63,30,255,207,255,0,0,238,159,249,255,255,253,197,211,159,57,128,176,207,255,3,0,228,135,249,255,255,253,109,211,135,57,0,94,192,255,31,0,238,175,251,255,255,253,237,243,191,59,0,0,193,255,0,0,238,159,249,255,255,253,205,243,143,57,192,176,195,255,0,0,236,199,61,214,24,
+199,191,195,199,61,128,0,128,255,0,0,238,223,253,255,255,253,239,195,223,61,96,0,195,255,0,0,236,223,253,255,255,253,239,195,223,61,96,64,195,255,0,0,236,223,253,255,255,253,255,195,207,61,128,0,195,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,255,255,255,255,127,255,7,255,127,255,3,0,0,0,0,150,37,240,254,174,108,255,59,95,63,255,3,0,0,0,0,0,0,0,3,255,3,160,194,255,254,255,255,255,3,254,255,223,15,191,254,255,63,254,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,31,2,0,0,
+0,160,0,0,0,254,255,62,0,254,255,255,255,255,255,255,255,255,255,31,102,254,255,255,255,255,255,255,255,255,255,255,119,25,3,26,27,28,29,30,0,0,31,32,33,34,35,36,37,16,17,0,0,0,0,0,0,0,0,0,0,0,0,18,19,38,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,23,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,46,57,57,0,0,0,0,0,154,153,153,153,153,153,169,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0,98,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,4,0,0,0,0,0,0,0,28,0,0,0,114,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,0,0,0,30,0,0,0,76,0,0,0,88,0,0,0,68,0,0,0,20,0,0,0,24,0,0,0,126,0,0,0,146,0,0,0,32,0,0,0,96,0,0,0,24,0,0,0,26,0,0,0,16,0,0,0,4,0,0,0,22,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,10,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,16,12,19,28,30,
+3,13,31,32,33,34,35,27,26,17,25,25,25,25,25,25,25,25,25,25,22,18,2,14,11,15,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,28,4,28,22,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,36,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,22,28,28,28,28,28,28,28,28,28,28,22,28,26,28,28,22,28,28,28,28,28,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+22,22,22,22,22,22,22,22,22,28,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,22,22,22,22,22,22,22,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,38,0,0,0,96,0,0,0,36,0,0,0,100,0,0,0,70,0,0,0,26,0,0,0,4,0,0,0,156,0,0,0,42,0,0,0,106,0,0,0,112,0,0,0,54,0,0,0,28,0,0,0,74,0,0,0,10,0,0,0,24,0,0,0,1],"i8",L,l.J+10256);D([21,10,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,16,12,19,28,30,3,13,31,32,33,34,35,
+27,26,17,25,25,25,25,25,25,25,25,25,25,22,18,2,14,11,15,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,28,4,28,22,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,36,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,22,28,28,28,28,28,28,28,28,28,28,22,28,26,28,28,22,28,28,28,28,28,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+22,22,28,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,22,22,22,22,22,22,22,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,208,1,0,8,0,0,0,3,0,0,0,144,204,1,0,200,201,1,0,11,0,0,0,6,0,0,0,96,197,1,0,64,192,1,0,2,0,0,0,1,0,0,0,0,189,1,0,144,186,1,0,4,0,0,0,2,0,0,0,136,184,1,0,192,182,1,0,4,0,0,0,4,0,0,0,80,180,1,0,216,177,1,0,5,0,0,0,5,0,0,0,56,175,1,0,80,172,1,0,4,0,0,0,7,0,0,0,24,169,1,0,72,165,1,0,5,0,0,0,9,
+0,0,0,96,162,1,0,224,159,1,0,4,0,0,0,10,0,0,0,240,158,1,0,88,156,1,0,4,0,0,0,12,0,0,0,80,155,1,0,1,208,209,210,211,212,213,214,215,216,217,0,0,0,0,0,32,0,0,0,9,0,0,0,10,0,0,0,13,0,0,0,11,0,0,0,12,0,0,0,133,0,0,0,0,32,0,0,1,32,0,0,2,32,0,0,3,32,0,0,4,32,0,0,5,32,0,0,6,32,0,0,8,32,0,0,9,32,0,0,10,32,0,0,40,32,0,0,41,32,0,0,95,32,0,0,0,48,0,0,0,0,0,0,38,0,0,0,96,0,0,0,36,0,0,0,100,0,0,0,70,0,0,0,26,0,0,0,4,0,0,0,156,0,0,0,42,0,0,0,106,0,0,0,112,0,0,0,54,0,0,0,28,0,0,0,74,0,0,0,20,0,0,0,32,0,0,0,1,0,
+0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,21,10,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,16,12,19,28,30,3,13,31,32,33,34,35,27,26,17,25,25,25,25,25,25,25,25,25,25,22,18,2,14,11,15,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,28,4,28,22,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,36,28,28,28,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,5,5,5,5,
+5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,0,0,0,0,0,0,0,0,0,1,1,188,0,0,0,186,0,0,0,84,0,0,0,12,0,0,0,14,0,0,0,84,0,0,0,70,0,0,0,72,0,0,0,74,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,42,0,0,0,4,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0,0,0,0,0,40,0,0,0,108,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,1,0,0,48,
+1,0,0,176,0,0,0,0,0,0,0,120,109,108,61,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,88,77,76,47,49,57,57,56,47,110,97,109,101,115,112,97,99,101,0,0,0,0,0,0,0,0,56,227,1,0,18,0,0,0,208,219,1,0,66,0,0,0,1,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,0,0,25,17,18,19,21,32,49,78,29,30,96,31,1,50,86,25,25,25,2,25,52,51,49,198,214,4,104,58,32,55,32,71,32,63,32,32,93,32,32,5,6,87,88,52,4,7,8,9,10,11,
+12,13,80,94,95,4,85,98,5,6,101,80,103,89,7,8,9,10,11,12,13,105,4,83,55,106,107,54,25,17,18,19,21,57,60,4,5,6,58,84,65,0,7,8,9,10,11,12,13,5,6,0,90,0,0,7,8,9,10,11,12,13,4,39,41,43,0,46,0,61,0,0,0,0,0,4,5,6,0,63,0,0,7,8,9,10,11,12,13,5,6,0,0,0,0,7,8,9,10,11,12,13,4,0,71,0,0,66,75,0,0,0,0,0,0,4,5,6,0,76,77,68,7,8,9,10,11,12,13,5,6,4,0,0,0,7,8,9,10,11,12,13,0,0,0,5,6,0,0,0,0,7,8,9,10,11,12,13,38,40,42,44,45,47,48,0,0,0,0,0,0,0,0,0,38,40,42,45,0,0,0,0,0,2,3,3,1,1,2,1,1,1,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,2,1,1,2,0,6,1,3,3,3,3,1,0,1,2,3,0,4,1,2,3,0,4,0,4,0,4,0,3,2,1,2,1,2,1,0,0,0,0,0,0,0,39,40,40,40,41,42,42,43,43,43,43,43,43,43,43,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,58,59,59,61,60,62,62,62,62,62,63,63,64,64,64,66,65,67,67,67,69,68,70,68,71,68,72,68,73,73,74,74,75,75,0,0,0,0,0,0,184,255,184,255,239,255,191,0,246,255,255,255,38,0,0,0,42,0,1,0,41,0,184,255,184,255,2,0,44,0,184,255,184,255,184,255,184,255,184,255,254,255,96,0,184,255,22,0,14,0,184,255,191,255,184,255,184,255,185,
+255,184,255,184,255,184,255,184,255,184,255,184,255,184,255,0,0,0,0,0,0,11,0,184,255,169,0,8,0,184,255,184,255,6,0,184,255,184,255,184,255,184,255,184,255,184,255,184,255,3,0,169,0,184,255,169,0,169,0,169,0,169,0,169,0,169,0,169,0,184,255,250,255,184,255,5,0,247,255,184,255,184,255,184,255,184,255,169,0,169,0,169,0,169,0,10,0,32,0,9,0,60,0,15,0,73,0,12,0,100,0,113,0,17,0,140,0,153,0,184,255,184,255,184,255,184,255,184,255,184,255,184,255,184,255,184,255,184,255,184,255,184,255,184,255,184,255,184,
+255,184,255,184,255,184,255,184,255,184,255,184,255,26,0,184,255,149,0,184,255,21,0,43,0,184,255,34,0,184,255,26,0,13,0,30,0,184,255,10,0,184,255,184,255,184,255,184,255,53,0,184,255,184,255,50,0,184,255,184,255,184,255,37,0,184,255,21,0,184,255,61,0,65,0,184,255,66,0,184,255,184,255,184,255,184,255,184,255,255,3,14,15,16,33,53,34,56,35,59,20,62,36,64,22,67,23,69,24,37,26,70,27,28,72,73,74,81,82,100,99,102,91,92,79,97,0,0,0,0,4,43,0,33,32,0,17,19,21,25,27,29,23,0,5,7,43,43,43,0,43,0,0,9,8,37,0,0,
+1,31,2,6,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,34,3,35,18,10,38,20,11,39,22,13,41,24,16,26,12,40,28,14,30,15,0,47,0,44,0,43,63,0,45,0,43,0,49,42,36,62,46,61,0,54,52,0,56,48,65,0,50,0,60,0,0,59,0,64,51,55,53,57,0,0,0,0,2,2,2,2,2,15,12,72,0,3,81,8,1,8,79,17,18,19,7,21,11,30,12,10,30,12,97,15,38,14,40,5,42,16,44,45,6,47,48,26,27,28,29,11,12,32,33,34,35,36,37,38,31,23,24,12,22,4,26,27,10,31,25,80,32,33,34,35,36,37,38,10,12,75,14,10,10,39,80,80,80,80,80,41,43,12,26,27,15,75,46,255,32,33,34,35,36,37,38,26,27,
+255,80,255,255,32,33,34,35,36,37,38,12,17,18,19,255,21,255,19,255,255,255,255,255,12,26,27,255,16,255,255,32,33,34,35,36,37,38,26,27,255,255,255,255,32,33,34,35,36,37,38,12,255,5,255,255,17,9,255,255,255,255,255,255,12,26,27,255,20,21,18,32,33,34,35,36,37,38,26,27,12,255,255,255,32,33,34,35,36,37,38,255,255,255,26,27,255,255,255,255,32,33,34,35,36,37,38,17,18,19,20,21,22,23,255,255,255,255,255,255,255,255,255,33,34,35,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,136,76,1,0,1,0,0,0,224,1,0,0,192,46,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,166,1,0,1,0,0,0,72,4,0,0,224,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,2,2,0,1,0,0,0,224,39,0,0,0,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,102,2,0,1,0,0,0,40,48,0,0,32,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,125,1,0,255,255,255,255,232,56,0,0,64,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,192,73,1,0,1,0,0,0,176,77,0,0,96,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,161,1,0,1,
+0,0,0,160,101,0,0,128,47,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,233,1,0,1,0,0,0,48,112,0,0,160,47,0,0,4,0,0,0,88,190,1,0,1,0,0,0,96,0,0,0,160,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,59,1,0,168,34,1,0,0,0,0,0,0,0,0,0,56,179,1,0,184,34,1,0,184,185,1,0,200,34,1,0,15,0,0,0,88,71,1,0,1,0,0,0,176,111,0,0,0,0,0,0,16,0,0,0,96,26,2,0,1,0,0,0,176,111,0,0,0,0,0,0,17,0,0,0,208,208,1,0,1,0,0,0,176,111,0,0,0,0,0,0,17,0,0,0,176,178,1,0,1,0,0,0,176,111,0,0,0,0,0,0,17,0,0,0,32,
+154,1,0,1,0,0,0,176,111,0,0,0,0,0,0,19,0,0,0,192,131,1,0,1,0,0,0,208,111,0,0,0,0,0,0,20,0,0,0,16,110,1,0,1,0,0,0,208,111,0,0,0,0,0,0,21,0,0,0,24,89,1,0,1,0,0,0,208,111,0,0,0,0,0,0,21,0,0,0,232,69,1,0,1,0,0,0,208,111,0,0,0,0,0,0,21,0,0,0,120,52,1,0,1,0,0,0,208,111,0,0,0,0,0,0,22,0,0,0,136,133,2,0,1,0,0,0,152,111,0,0,0,0,0,0,23,0,0,0,144,117,2,0,1,0,0,0,152,111,0,0,0,0,0,0,24,0,0,0,136,101,2,0,1,0,0,0,152,111,0,0,0,0,0,0,24,0,0,0,152,83,2,0,1,0,0,0,152,111,0,0,0,0,0,0,24,0,0,0,80,72,2,0,1,0,0,0,152,
+111,0,0,0,0,0,0,25,0,0,0,128,60,2,0,1,0,0,0,192,111,0,0,0,0,0,0,25,0,0,0,128,48,2,0,1,0,0,0,192,111,0,0,0,0,0,0,26,0,0,0,128,36,2,0,1,0,0,0,184,111,0,0,0,0,0,0,10,0,0,0,144,25,2,0,1,0,0,0,200,111,0,0,0,0,0,0,11,0,0,0,40,14,2,0,1,0,0,0,200,111,0,0,0,0,0,0,12,0,0,0,40,6,2,0,1,0,0,0,200,111,0,0,0,0,0,0,12,0,0,0,120,253,1,0,1,0,0,0,200,111,0,0,0,0,0,0,12,0,0,0,144,241,1,0,1,0,0,0,200,111,0,0,0,0,0,0,14,0,0,0,32,231,1,0,1,0,0,0,200,111,0,0,0,0,0,0,14,0,0,0,216,221,1,0,1,0,0,0,200,111,0,0,0,0,0,0,13,0,
+0,0,32,218,1,0,1,0,0,0,200,111,0,0,0,0,0,0,5,0,0,0,136,214,1,0,1,0,0,0,200,111,0,0,0,0,0,0,6,0,0,0,0,212,1,0,1,0,0,0,200,111,0,0,0,0,0,0,7,0,0,0,168,208,1,0,1,0,0,0,200,111,0,0,0,0,0,0,7,0,0,0,88,205,1,0,1,0,0,0,200,111,0,0,0,0,0,0,7,0,0,0,96,202,1,0,1,0,0,0,200,111,0,0,0,0,0,0,9,0,0,0,56,198,1,0,1,0,0,0,200,111,0,0,0,0,0,0,9,0,0,0,0,194,1,0,1,0,0,0,200,111,0,0,0,0,0,0,8,0,0,0,184,189,1,0,1,0,0,0,200,111,0,0,0,0,0,0,0,0,0,0,32,187,1,0,1,0,0,0,144,111,0,0,0,0,0,0,1,0,0,0,232,184,1,0,1,0,0,0,144,111,
+0,0,0,0,0,0,2,0,0,0,8,183,1,0,1,0,0,0,144,111,0,0,0,0,0,0,2,0,0,0,208,180,1,0,1,0,0,0,144,111,0,0,0,0,0,0,2,0,0,0,144,178,1,0,1,0,0,0,144,111,0,0,0,0,0,0,4,0,0,0,216,175,1,0,1,0,0,0,144,111,0,0,0,0,0,0,4,0,0,0,72,173,1,0,1,0,0,0,144,111,0,0,0,0,0,0,3,0,0,0,168,169,1,0,1,0,0,0,144,111,0,0,0,0,0,0,18,0,0,0,128,166,1,0,1,0,0,0,176,111,0,0,0,0,0,0,27,0,0,0,192,162,1,0,1,0,0,0,160,111,0,0,0,0,0,0,28,0,0,0,200,160,1,0,1,0,0,0,160,111,0,0,0,0,0,0,29,0,0,0,40,159,1,0,1,0,0,0,160,111,0,0,0,0,0,0,29,0,0,0,
+120,157,1,0,1,0,0,0,160,111,0,0,0,0,0,0,29,0,0,0,128,155,1,0,1,0,0,0,160,111,0,0,0,0,0,0,30,0,0,0,8,154,1,0,1,0,0,0,168,111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,179,1,0,0,0,0,0,48,71,0,0,240,179,2,0,1,0,0,0,0,84,2,0,0,0,0,0,24,102,0,0,240,179,2,0,3,0,0,0,104,231,1,0,0,0,0,0,216,3,0,0,240,179,2,0,4,0,0,0,216,189,1,0,0,0,0,0,200,20,1,0,240,179,2,0,5,0,0,0,224,162,1,0,0,0,0,0,192,57,0,0,240,179,2,0,6,0,0,0,120,140,1,0,0,0,0,0,136,69,0,0,240,179,2,0,7,0,0,0,240,118,1,0,0,0,0,
+0,168,69,0,0,240,179,2,0,7,0,0,0,112,98,1,0,0,0,0,0,168,69,0,0,240,179,2,0,7,0,0,0,240,77,1,0,0,0,0,0,160,69,0,0,240,179,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,84,2,0,0,0,0,0,40,112,0,0,32,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,240,176,1,0,50,0,0,0,72,82,2,0,44,0,0,0,8,229,1,0,44,0,0,0,184,188,1,0,22,0,0,0,168,161,1,0,22,0,0,0,88,139,1,0,40,0,0,0,192,117,1,0,40,0,0,0,40,97,1,0,16,0,0,0,160,76,1,0,16,0,0,0,24,58,1,0,4,0,0,0,240,138,2,0,4,0,0,0,160,122,2,0,
+26,0,0,0,56,107,2,0,26,0,0,0,152,87,2,0,32,0,0,0,0,0,0,0,16,58,1,0,1,0,0,0,0,0,0,0,88,113,0,0,1,0,0,0,8,139,2,0,1,0,0,0,0,0,0,0,32,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,77,2,0,1,0,0,0,0,0,0,0,144,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,2,0,1,0,0,0,0,0,0,0,0,114,0,0,1,0,0,0,32,251,1,0,1,0,0,0,0,0,0,0,200,113,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80,126,2,0,1,0,0,0,0,0,0,0,56,114,0,0,1,0,0,0,136,1,2,0,1,0,0,0,0,0,0,0,56,114,0,
+0,2,0,0,0,8,200,1,0,1,0,0,0,0,0,0,0,80,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,56,2,0,255,255,255,255,0,0,0,0,112,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,32,25,2,0,1,0,0,0,0,0,0,0,168,114,0,0,2,0,0,0,80,208,1,0,1,0,0,0,0,0,0,0,224,114,0,0,0,0,0,0,0,178,1,0,1,0,0,0,0,0,0,0,224,114,0,0,3,0,0,0,176,153,1,0,1,0,0,0,0,0,0,0,224,114,0,0,0,0,0,0,240,130,1,0,1,0,0,0,0,0,0,0,168,114,0,0,3,0,0,0,240,108,1,0,1,0,0,0,0,0,0,0,168,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,184,73,2,0,1,0,0,0,0,0,0,0,24,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48,163,1,0,1,0,0,0,0,0,0,0,136,115,0,0,0,0,0,0,96,141,1,0,1,0,0,0,0,0,0,0,136,115,0,0,1,0,0,0,96,119,1,0,1,0,0,0,0,0,0,0,192,115,0,0,2,0,0,0,32,99,1,0,1,0,0,0,0,0,0,0,136,115,0,0,3,0,0,0,120,78,1,0,1,0,0,0,0,0,0,0,136,115,0,0,4,0,0,0,80,60,1,0,1,0,0,0,0,0,0,0,136,115,0,0,5,0,0,0,48,141,2,0,1,0,0,0,0,0,0,0,136,115,0,0,6,0,0,0,176,124,2,0,1,0,0,0,0,0,0,0,136,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,148,0,0,0,12,0,0,0,116,0,0,0,22,0,0,0,86,0,0,0,162,0,0,0,88,0,0,0,14,0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,12,0,0,0,32,0,0,0,0,0,0,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,203,1,0,96,200,1,0,168,196,1,0,0,0,0,0,100,0,0,0,101,0,0,0,102,0,0,0,100,0,0,0,104,191,1,0,80,188,1,0,56,186,1,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,255,255,255,255,168,163,2,0,64,163,2,0,16,163,2,0,56,163,2,0,40,163,2,0,24,163,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,66,0,0,192,38,2,0,65,73,0,0,120,27,2,0,65,82,0,0,208,16,2,0,65,88,0,0,128,7,2,0,66,32,0,0,248,254,1,0,66,73,0,0,152,244,1,0,67,66,0,0,136,232,1,0,67,79,0,0,160,223,1,0,67,88,0,0,120,218,1,0,72,32,0,0,56,215,1,0,72,66,0,0,88,212,1,0,72,73,0,0,24,209,1,0,72,88,0,0,248,205,1,0,72,98,0,0,168,202,1,0,72,105,0,0,136,198,1,0,72,114,0,0,216,194,1,0,72,120,0,0,40,190,1,0,73,32,0,0,96,187,1,0,75,66,0,0,88,185,1,0,75,73,
+0,0,88,183,1,0,75,82,0,0,48,181,1,0,75,88,0,0,216,178,1,0,78,66,0,0,16,176,1,0,78,73,0,0,136,173,1,0,78,82,0,0,32,170,1,0,78,88,0,0,72,167,1,0,80,65,0,0,16,163,1,0,80,66,0,0,8,161,1,0,80,73,0,0,112,159,1,0,80,88,0,0,200,157,1,0,82,32,0,0,200,155,1,0,83,32,0,0,72,154,1,0,90,68,0,0,136,152,1,0,0,0,0,0,0,0,0,0,96,188,1,0,46,0,0,0,72,186,1,0,6,0,0,0,16,184,1,0,192,0,0,0,248,220,1,0,168,186,1,0,208,137,1,0,120,160,1,0,0,95,1,0,192,115,1,0,160,56,1,0,8,75,1,0,0,0,0,0,0,0,0,0,248,220,1,0,168,186,1,0,120,
+160,1,0,208,137,1,0,192,115,1,0,0,95,1,0,8,75,1,0,160,56,1,0,0,0,0,0,0,0,0,0,84,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,94,0,0,0,72,0,0,0,22,0,0,0,164,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,30,0,0,0,120,0,0,0,22,0,0,0,4,0,0,0,28,0,0,0,44,0,0,0,0,0,0,0,176,0,0,0,142,0,0,0,40,102,0,0,0,0,0,0,1,0,0,0,1,0,0,0,255,255,255,255,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,191,0,0,0,0,0,0,240,191,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,4,0,0,0,4,0,0,0,5,0,0,0,5,0,0,0,6,0,0,0,6,0,0,0,7,0,0,0,7,0,0,0,8,0,0,0,8,0,0,0,9,0,0,0,9,0,0,0,10,0,0,0,10,0,0,0,11,0,0,0,11,0,0,0,12,0,0,0,12,0,0,0,13,0,0,0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,7,0,0,0,0,0,0,0,76,0,0,0,152,0,0,0,34,0,0,0,114,0,0,0,0,0,0,0,2,0,0,0,72,171,1,0,198,0,0,0,24,168,1,0,193,0,0,0,8,164,1,0,194,0,0,0,136,161,1,0,192,0,0,0,216,159,1,0,145,3,0,0,56,158,1,0,197,0,0,0,72,156,1,0,195,0,0,0,176,154,1,0,196,0,0,0,0,153,1,0,146,3,0,0,32,151,1,0,199,0,0,0,176,148,1,0,167,3,0,0,8,146,1,0,33,32,0,0,88,142,1,0,148,3,0,0,136,139,1,0,208,0,0,0,200,137,1,0,201,0,0,0,40,136,1,0,202,
+0,0,0,8,134,1,0,200,0,0,0,128,132,1,0,149,3,0,0,216,130,1,0,151,3,0,0,40,129,1,0,203,0,0,0,248,126,1,0,147,3,0,0,24,124,1,0,205,0,0,0,0,120,1,0,206,0,0,0,8,118,1,0,204,0,0,0,216,115,1,0,153,3,0,0,104,114,1,0,207,0,0,0,144,112,1,0,154,3,0,0,16,111,1,0,155,3,0,0,40,109,1,0,156,3,0,0,80,107,1,0,209,0,0,0,104,105,1,0,157,3,0,0,168,102,1,0,82,1,0,0,128,99,1,0,211,0,0,0,176,97,1,0,212,0,0,0,96,95,1,0,210,0,0,0,48,93,1,0,169,3,0,0,176,91,1,0,159,3,0,0,224,89,1,0,216,0,0,0,32,88,1,0,213,0,0,0,88,86,1,0,214,
+0,0,0,112,84,1,0,166,3,0,0,96,82,1,0,160,3,0,0,248,78,1,0,51,32,0,0,56,77,1,0,168,3,0,0,120,75,1,0,161,3,0,0,200,73,1,0,96,1,0,0,72,72,1,0,163,3,0,0,192,70,1,0,222,0,0,0,40,69,1,0,164,3,0,0,136,67,1,0,152,3,0,0,232,65,1,0,218,0,0,0,152,63,1,0,219,0,0,0,216,60,1,0,217,0,0,0,184,58,1,0,165,3,0,0,24,57,1,0,220,0,0,0,176,55,1,0,158,3,0,0,32,54,1,0,221,0,0,0,248,52,1,0,120,1,0,0,224,51,1,0,150,3,0,0,120,147,2,0,225,0,0,0,232,145,2,0,226,0,0,0,112,144,2,0,180,0,0,0,168,141,2,0,230,0,0,0,224,139,2,0,224,
+0,0,0,64,138,2,0,53,33,0,0,200,136,2,0,177,3,0,0,112,135,2,0,38,0,0,0,56,134,2,0,39,34,0,0,224,132,2,0,32,34,0,0,112,131,2,0,229,0,0,0,192,129,2,0,72,34,0,0,72,128,2,0,227,0,0,0,56,125,2,0,228,0,0,0,160,123,2,0,30,32,0,0,64,122,2,0,178,3,0,0,224,120,2,0,166,0,0,0,144,119,2,0,34,32,0,0,48,118,2,0,41,34,0,0,240,116,2,0,231,0,0,0,192,115,2,0,184,0,0,0,72,114,2,0,162,0,0,0,88,112,2,0,199,3,0,0,112,109,2,0,198,2,0,0,48,108,2,0,99,38,0,0,240,106,2,0,69,34,0,0,200,105,2,0,169,0,0,0,128,104,2,0,181,33,0,
+0,80,102,2,0,42,34,0,0,232,100,2,0,164,0,0,0,160,99,2,0,211,33,0,0,208,94,2,0,32,32,0,0,224,92,2,0,147,33,0,0,40,90,2,0,176,0,0,0,176,88,2,0,180,3,0,0,96,87,2,0,102,38,0,0,104,86,2,0,247,0,0,0,80,85,2,0,233,0,0,0,80,84,2,0,234,0,0,0,64,83,2,0,232,0,0,0,64,82,2,0,5,34,0,0,224,80,2,0,3,32,0,0,216,79,2,0,2,32,0,0,192,77,2,0,181,3,0,0,136,76,2,0,97,34,0,0,136,75,2,0,183,3,0,0,176,74,2,0,240,0,0,0,192,73,2,0,235,0,0,0,224,72,2,0,172,32,0,0,248,71,2,0,3,34,0,0,240,70,2,0,146,1,0,0,192,69,2,0,0,34,0,0,160,
+68,2,0,189,0,0,0,120,66,2,0,188,0,0,0,56,65,2,0,190,0,0,0,48,64,2,0,68,32,0,0,16,63,2,0,179,3,0,0,248,61,2,0,101,34,0,0,24,61,2,0,62,0,0,0,16,60,2,0,212,33,0,0,200,58,2,0,148,33,0,0,144,57,2,0,101,38,0,0,16,56,2,0,38,32,0,0,32,54,2,0,237,0,0,0,16,53,2,0,238,0,0,0,0,52,2,0,161,0,0,0,240,50,2,0,236,0,0,0,224,49,2,0,17,33,0,0,16,49,2,0,30,34,0,0,40,48,2,0,43,34,0,0,40,47,2,0,185,3,0,0,232,45,2,0,191,0,0,0,104,44,2,0,8,34,0,0,184,42,2,0,239,0,0,0,144,41,2,0,186,3,0,0,24,40,2,0,208,33,0,0,248,38,2,0,187,
+3,0,0,0,38,2,0,41,35,0,0,32,37,2,0,171,0,0,0,40,36,2,0,144,33,0,0,24,35,2,0,8,35,0,0,200,33,2,0,28,32,0,0,152,32,2,0,100,34,0,0,104,30,2,0,10,35,0,0,80,29,2,0,23,34,0,0,104,28,2,0,202,37,0,0,176,27,2,0,14,32,0,0,0,27,2,0,57,32,0,0,40,26,2,0,24,32,0,0,48,25,2,0,60,0,0,0,72,24,2,0,175,0,0,0,88,23,2,0,20,32,0,0,88,22,2,0,181,0,0,0,80,20,2,0,183,0,0,0,72,19,2,0,18,34,0,0,56,18,2,0,188,3,0,0,80,17,2,0,7,34,0,0,200,15,2,0,160,0,0,0,160,14,2,0,19,32,0,0,240,13,2,0,96,34,0,0,240,12,2,0,11,34,0,0,32,12,2,
+0,172,0,0,0,8,11,2,0,9,34,0,0,176,9,2,0,132,34,0,0,0,9,2,0,241,0,0,0,80,8,2,0,189,3,0,0,192,7,2,0,243,0,0,0,8,7,2,0,244,0,0,0,128,6,2,0,83,1,0,0,232,5,2,0,242,0,0,0,72,5,2,0,62,32,0,0,112,4,2,0,201,3,0,0,16,3,2,0,191,3,0,0,88,1,2,0,149,34,0,0,72,0,2,0,40,34,0,0,176,255,1,0,170,0,0,0,32,255,1,0,186,0,0,0,144,254,1,0,248,0,0,0,216,253,1,0,245,0,0,0,8,253,1,0,151,34,0,0,32,252,1,0,246,0,0,0,112,251,1,0,182,0,0,0,88,250,1,0,2,34,0,0,96,248,1,0,48,32,0,0,232,246,1,0,165,34,0,0,200,245,1,0,198,3,0,0,200,
+244,1,0,192,3,0,0,104,243,1,0,214,3,0,0,8,242,1,0,177,0,0,0,48,241,1,0,163,0,0,0,24,240,1,0,50,32,0,0,200,238,1,0,15,34,0,0,120,237,1,0,29,34,0,0,208,235,1,0,200,3,0,0,168,234,1,0,34,0,0,0,192,233,1,0,210,33,0,0,192,232,1,0,26,34,0,0,0,232,1,0,42,35,0,0,136,231,1,0,187,0,0,0,216,230,1,0,146,33,0,0,240,229,1,0,9,35,0,0,0,229,1,0,29,32,0,0,216,227,1,0,28,33,0,0,104,226,1,0,174,0,0,0,120,225,1,0,11,35,0,0,128,224,1,0,193,3,0,0,192,223,1,0,15,32,0,0,248,222,1,0,58,32,0,0,72,222,1,0,25,32,0,0,160,221,
+1,0,26,32,0,0,240,220,1,0,97,1,0,0,144,220,1,0,197,34,0,0,24,220,1,0,167,0,0,0,48,219,1,0,173,0,0,0,0,219,1,0,195,3,0,0,184,218,1,0,194,3,0,0,144,218,1,0,60,34,0,0,80,218,1,0,96,38,0,0,56,218,1,0,130,34,0,0,8,218,1,0,134,34,0,0,184,217,1,0,17,34,0,0,104,217,1,0,131,34,0,0,0,217,1,0,185,0,0,0,232,215,1,0,178,0,0,0,192,215,1,0,179,0,0,0,120,215,1,0,135,34,0,0,72,215,1,0,223,0,0,0,224,214,1,0,196,3,0,0,160,214,1,0,52,34,0,0,128,214,1,0,184,3,0,0,48,214,1,0,209,3,0,0,0,214,1,0,9,32,0,0,184,213,1,0,254,
+0,0,0,232,212,1,0,220,2,0,0,192,212,1,0,215,0,0,0,136,212,1,0,34,33,0,0,104,212,1,0,209,33,0,0,64,212,1,0,250,0,0,0,24,212,1,0,145,33,0,0,248,211,1,0,251,0,0,0,152,211,1,0,249,0,0,0,40,211,1,0,168,0,0,0,152,210,1,0,210,3,0,0,200,209,1,0,197,3,0,0,120,209,1,0,252,0,0,0,80,209,1,0,24,33,0,0,48,209,1,0,190,3,0,0,0,209,1,0,253,0,0,0,200,208,1,0,165,0,0,0,160,208,1,0,255,0,0,0,72,208,1,0,182,3,0,0,40,208,1,0,13,32,0,0,216,207,1,0,12,32,0,0,42,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,18,0,0,0,0,
+0,0,0,20,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,200,79,0,0,56,25,1,0,88,2,0,0,184,22,1,0,184,22,1,0,80,78,0,0,88,2,0,0,0,0,0,0,8,0,0,0,48,0,0,0,0,0,0,0,60,0,0,0,32,0,0,0,50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,146,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,38,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,78,79,84,65,84,73,79,78,40,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,124,0,0,0,0,0,0,0,78,77,84,79,75,69,78,83,0,0,0,0,0,0,0,0,78,77,84,79,75,69,78,0,73,68,82,69,70,83,0,0,73,68,82,69,70,0,0,0,73,68,0,0,0,0,0,0,69,78,84,73,84,89,0,0,69,78,84,73,84,73,69,83,0,0,0,0,0,0,0,0,67,68,65,84,65,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,64,0,0,0,0,0,0,88,64,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,64,0,0,0,0,0,0,88,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,64,0,0,0,0,0,0,88,64,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,64,0,0,0,0,0,0,82,64,64,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,64,0,0,0,0,0,0,82,64,96,0,0,0,0,0,0,0,0,0,0,0,0,0,66,64,0,0,0,0,0,0,66,64,0,0,0,0,0,32,131,64,0,0,0,0,0,192,136,64,
+0,0,0,0,0,0,82,64,0,0,0,0,0,0,82,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,64,0,0,0,0,0,0,82,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,64,0,0,0,0,0,0,88,64,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,88,64,0,0,0,0,0,0,88,64,2,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,150,64,0,0,0,0,0,128,
+150,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,66,64,0,0,0,0,0,0,66,64,0,0,0,0,0,32,131,64,0,0,0,0,0,192,136,64,0,0,0,0,0,0,82,64,0,0,0,0,0,0,82,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,64,0,0,0,0,0,0,82,64,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,64,0,0,0,0,0,0,82,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,114,1,0,216,112,1,0,0,0,0,0,0,0,0,0,95,112,137,0,255,9,47,15,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,
+0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5,0,0,0,0,150,48,7,119,44,97,14,238,186,81,9,153,25,196,109,7,143,244,106,112,53,165,99,233,163,149,100,158,50,136,219,14,164,184,220,121,30,233,213,224,136,217,210,151,43,76,182,9,189,124,177,126,7,45,184,231,145,29,191,144,100,16,183,29,242,32,176,106,72,113,185,243,222,65,190,132,125,212,218,26,235,228,221,109,81,181,212,244,199,133,211,131,86,152,108,19,192,168,107,100,122,249,98,253,236,201,101,138,79,92,1,20,217,108,6,99,99,61,15,250,245,13,8,
+141,200,32,110,59,94,16,105,76,228,65,96,213,114,113,103,162,209,228,3,60,71,212,4,75,253,133,13,210,107,181,10,165,250,168,181,53,108,152,178,66,214,201,187,219,64,249,188,172,227,108,216,50,117,92,223,69,207,13,214,220,89,61,209,171,172,48,217,38,58,0,222,81,128,81,215,200,22,97,208,191,181,244,180,33,35,196,179,86,153,149,186,207,15,165,189,184,158,184,2,40,8,136,5,95,178,217,12,198,36,233,11,177,135,124,111,47,17,76,104,88,171,29,97,193,61,45,102,182,144,65,220,118,6,113,219,1,188,32,210,152,
+42,16,213,239,137,133,177,113,31,181,182,6,165,228,191,159,51,212,184,232,162,201,7,120,52,249,0,15,142,168,9,150,24,152,14,225,187,13,106,127,45,61,109,8,151,108,100,145,1,92,99,230,244,81,107,107,98,97,108,28,216,48,101,133,78,0,98,242,237,149,6,108,123,165,1,27,193,244,8,130,87,196,15,245,198,217,176,101,80,233,183,18,234,184,190,139,124,136,185,252,223,29,221,98,73,45,218,21,243,124,211,140,101,76,212,251,88,97,178,77,206,81,181,58,116,0,188,163,226,48,187,212,65,165,223,74,215,149,216,61,109,
+196,209,164,251,244,214,211,106,233,105,67,252,217,110,52,70,136,103,173,208,184,96,218,115,45,4,68,229,29,3,51,95,76,10,170,201,124,13,221,60,113,5,80,170,65,2,39,16,16,11,190,134,32,12,201,37,181,104,87,179,133,111,32,9,212,102,185,159,228,97,206,14,249,222,94,152,201,217,41,34,152,208,176,180,168,215,199,23,61,179,89,129,13,180,46,59,92,189,183,173,108,186,192,32,131,184,237,182,179,191,154,12,226,182,3,154,210,177,116,57,71,213,234,175,119,210,157,21,38,219,4,131,22,220,115,18,11,99,227,132,59,
+100,148,62,106,109,13,168,90,106,122,11,207,14,228,157,255,9,147,39,174,0,10,177,158,7,125,68,147,15,240,210,163,8,135,104,242,1,30,254,194,6,105,93,87,98,247,203,103,101,128,113,54,108,25,231,6,107,110,118,27,212,254,224,43,211,137,90,122,218,16,204,74,221,103,111,223,185,249,249,239,190,142,67,190,183,23,213,142,176,96,232,163,214,214,126,147,209,161,196,194,216,56,82,242,223,79,241,103,187,209,103,87,188,166,221,6,181,63,75,54,178,72,218,43,13,216,76,27,10,175,246,74,3,54,96,122,4,65,195,239,96,
+223,85,223,103,168,239,142,110,49,121,190,105,70,140,179,97,203,26,131,102,188,160,210,111,37,54,226,104,82,149,119,12,204,3,71,11,187,185,22,2,34,47,38,5,85,190,59,186,197,40,11,189,178,146,90,180,43,4,106,179,92,167,255,215,194,49,207,208,181,139,158,217,44,29,174,222,91,176,194,100,155,38,242,99,236,156,163,106,117,10,147,109,2,169,6,9,156,63,54,14,235,133,103,7,114,19,87,0,5,130,74,191,149,20,122,184,226,174,43,177,123,56,27,182,12,155,142,210,146,13,190,213,229,183,239,220,124,33,223,219,11,
+212,210,211,134,66,226,212,241,248,179,221,104,110,131,218,31,205,22,190,129,91,38,185,246,225,119,176,111,119,71,183,24,230,90,8,136,112,106,15,255,202,59,6,102,92,11,1,17,255,158,101,143,105,174,98,248,211,255,107,97,69,207,108,22,120,226,10,160,238,210,13,215,84,131,4,78,194,179,3,57,97,38,103,167,247,22,96,208,77,71,105,73,219,119,110,62,74,106,209,174,220,90,214,217,102,11,223,64,240,59,216,55,83,174,188,169,197,158,187,222,127,207,178,71,233,255,181,48,28,242,189,189,138,194,186,202,48,147,
+179,83,166,163,180,36,5,54,208,186,147,6,215,205,41],"i8",L,l.J+20497);D([87,222,84,191,103,217,35,46,122,102,179,184,74,97,196,2,27,104,93,148,43,111,42,55,190,11,180,161,142,12,195,27,223,5,90,141,239,2,45,0,0,0,0,65,49,27,25,130,98,54,50,195,83,45,43,4,197,108,100,69,244,119,125,134,167,90,86,199,150,65,79,8,138,217,200,73,187,194,209,138,232,239,250,203,217,244,227,12,79,181,172,77,126,174,181,142,45,131,158,207,28,152,135,81,18,194,74,16,35,217,83,211,112,244,120,146,65,239,97,85,215,174,46,
+20,230,181,55,215,181,152,28,150,132,131,5,89,152,27,130,24,169,0,155,219,250,45,176,154,203,54,169,93,93,119,230,28,108,108,255,223,63,65,212,158,14,90,205,162,36,132,149,227,21,159,140,32,70,178,167,97,119,169,190,166,225,232,241,231,208,243,232,36,131,222,195,101,178,197,218,170,174,93,93,235,159,70,68,40,204,107,111,105,253,112,118,174,107,49,57,239,90,42,32,44,9,7,11,109,56,28,18,243,54,70,223,178,7,93,198,113,84,112,237,48,101,107,244,247,243,42,187,182,194,49,162,117,145,28,137,52,160,7,144,
+251,188,159,23,186,141,132,14,121,222,169,37,56,239,178,60,255,121,243,115,190,72,232,106,125,27,197,65,60,42,222,88,5,79,121,240,68,126,98,233,135,45,79,194,198,28,84,219,1,138,21,148,64,187,14,141,131,232,35,166,194,217,56,191,13,197,160,56,76,244,187,33,143,167,150,10,206,150,141,19,9,0,204,92,72,49,215,69,139,98,250,110,202,83,225,119,84,93,187,186,21,108,160,163,214,63,141,136,151,14,150,145,80,152,215,222,17,169,204,199,210,250,225,236,147,203,250,245,92,215,98,114,29,230,121,107,222,181,84,
+64,159,132,79,89,88,18,14,22,25,35,21,15,218,112,56,36,155,65,35,61,167,107,253,101,230,90,230,124,37,9,203,87,100,56,208,78,163,174,145,1,226,159,138,24,33,204,167,51,96,253,188,42,175,225,36,173,238,208,63,180,45,131,18,159,108,178,9,134,171,36,72,201,234,21,83,208,41,70,126,251,104,119,101,226,246,121,63,47,183,72,36,54,116,27,9,29,53,42,18,4,242,188,83,75,179,141,72,82,112,222,101,121,49,239,126,96,254,243,230,231,191,194,253,254,124,145,208,213,61,160,203,204,250,54,138,131,187,7,145,154,120,
+84,188,177,57,101,167,168,75,152,131,59,10,169,152,34,201,250,181,9,136,203,174,16,79,93,239,95,14,108,244,70,205,63,217,109,140,14,194,116,67,18,90,243,2,35,65,234,193,112,108,193,128,65,119,216,71,215,54,151,6,230,45,142,197,181,0,165,132,132,27,188,26,138,65,113,91,187,90,104,152,232,119,67,217,217,108,90,30,79,45,21,95,126,54,12,156,45,27,39,221,28,0,62,18,0,152,185,83,49,131,160,144,98,174,139,209,83,181,146,22,197,244,221,87,244,239,196,148,167,194,239,213,150,217,246,233,188,7,174,168,141,
+28,183,107,222,49,156,42,239,42,133,237,121,107,202,172,72,112,211,111,27,93,248,46,42,70,225,225,54,222,102,160,7,197,127,99,84,232,84,34,101,243,77,229,243,178,2,164,194,169,27,103,145,132,48,38,160,159,41,184,174,197,228,249,159,222,253,58,204,243,214,123,253,232,207,188,107,169,128,253,90,178,153,62,9,159,178,127,56,132,171,176,36,28,44,241,21,7,53,50,70,42,30,115,119,49,7,180,225,112,72,245,208,107,81,54,131,70,122,119,178,93,99,78,215,250,203,15,230,225,210,204,181,204,249,141,132,215,224,74,
+18,150,175,11,35,141,182,200,112,160,157,137,65,187,132,70,93,35,3,7,108,56,26,196,63,21,49,133,14,14,40,66,152,79,103,3,169,84,126,192,250,121,85,129,203,98,76,31,197,56,129,94,244,35,152,157,167,14,179,220,150,21,170,27,0,84,229,90,49,79,252,153,98,98,215,216,83,121,206,23,79,225,73,86,126,250,80,149,45,215,123,212,28,204,98,19,138,141,45,82,187,150,52,145,232,187,31,208,217,160,6,236,243,126,94,173,194,101,71,110,145,72,108,47,160,83,117,232,54,18,58,169,7,9,35,106,84,36,8,43,101,63,17,228,121,
+167,150,165,72,188,143,102,27,145,164,39,42,138,189,224,188,203,242,161,141,208,235,98,222,253,192,35,239,230,217,189,225,188,20,252,208,167,13,63,131,138,38,126,178,145,63,185,36,208,112,248,21,203,105,59,70,230,66,122,119,253,91,181,107,101,220,244,90,126,197,55,9,83,238,118,56,72,247,177,174,9,184,240,159,18,161,51,204,63,138,114,253,36,147,0,0,0,0,55,106,194,1,110,212,132,3,89,190,70,2,220,168,9,7,235,194,203,6,178,124,141,4,133,22,79,5,184,81,19,14,143,59,209,15,214,133,151,13,225,239,85,12,
+100,249,26,9,83,147,216,8,10,45,158,10,61,71,92,11,112,163,38,28,71,201,228,29,30,119,162,31,41,29,96,30,172,11,47,27,155,97,237,26,194,223,171,24,245,181,105,25,200,242,53,18,255,152,247,19,166,38,177,17,145,76,115,16,20,90,60,21,35,48,254,20,122,142,184,22,77,228,122,23,224,70,77,56,215,44,143,57,142,146,201,59,185,248,11,58,60,238,68,63,11,132,134,62,82,58,192,60,101,80,2,61,88,23,94,54,111,125,156,55,54,195,218,53,1,169,24,52,132,191,87,49,179,213,149,48,234,107,211,50,221,1,17,51,144,229,107,
+36,167,143,169,37,254,49,239,39,201,91,45,38,76,77,98,35,123,39,160,34,34,153,230,32,21,243,36,33,40,180,120,42,31,222,186,43,70,96,252,41,113,10,62,40,244,28,113,45,195,118,179,44,154,200,245,46,173,162,55,47,192,141,154,112,247,231,88,113,174,89,30,115,153,51,220,114,28,37,147,119,43,79,81,118,114,241,23,116,69,155,213,117,120,220,137,126,79,182,75,127,22,8,13,125,33,98,207,124,164,116,128,121,147,30,66,120,202,160,4,122,253,202,198,123,176,46,188,108,135,68,126,109,222,250,56,111,233,144,250,110,
+108,134,181,107,91,236,119,106,2,82,49,104,53,56,243,105,8,127,175,98,63,21,109,99,102,171,43,97,81,193,233,96,212,215,166,101,227,189,100,100,186,3,34,102,141,105,224,103,32,203,215,72,23,161,21,73,78,31,83,75,121,117,145,74,252,99,222,79,203,9,28,78,146,183,90,76,165,221,152,77,152,154,196,70,175,240,6,71,246,78,64,69,193,36,130,68,68,50,205,65,115,88,15,64,42,230,73,66,29,140,139,67,80,104,241,84,103,2,51,85,62,188,117,87,9,214,183,86,140,192,248,83,187,170,58,82,226,20,124,80,213,126,190,81,232,
+57,226,90,223,83,32,91,134,237,102,89,177,135,164,88,52,145,235,93,3,251,41,92,90,69,111,94,109,47,173,95,128,27,53,225,183,113,247,224,238,207,177,226,217,165,115,227,92,179,60,230,107,217,254,231,50,103,184,229,5,13,122,228,56,74,38,239,15,32,228,238,86,158,162,236,97,244,96,237,228,226,47,232,211,136,237,233,138,54,171,235,189,92,105,234,240,184,19,253,199,210,209,252,158,108,151,254,169,6,85,255,44,16,26,250,27,122,216,251,66,196,158,249,117,174,92,248,72,233,0,243,127,131,194,242,38,61,132,240,
+17,87,70,241,148,65,9,244,163,43,203,245,250,149,141,247,205,255,79,246,96,93,120,217,87,55,186,216,14,137,252,218,57,227,62,219,188,245,113,222,139,159,179,223,210,33,245,221,229,75,55,220,216,12,107,215,239,102,169,214,182,216,239,212,129,178,45,213,4,164,98,208,51,206,160,209,106,112,230,211,93,26,36,210,16,254,94,197,39,148,156,196,126,42,218,198,73,64,24,199,204,86,87,194,251,60,149,195,162,130,211,193,149,232,17,192,168,175,77,203,159,197,143,202,198,123,201,200,241,17,11,201,116,7,68,204,67,
+109,134,205,26,211,192,207,45,185,2,206,64,150,175,145,119,252,109,144,46,66,43,146,25,40,233,147,156,62,166,150,171,84,100,151,242,234,34,149,197,128,224,148,248,199,188,159,207,173,126,158,150,19,56,156,161,121,250,157,36,111,181,152,19,5,119,153,74,187,49,155,125,209,243,154,48,53,137,141,7,95,75,140,94,225,13,142,105,139,207,143,236,157,128,138,219,247,66,139,130,73,4,137,181,35,198,136,136,100,154,131,191,14,88,130,230,176,30,128,209,218,220,129,84,204,147,132,99,166,81,133,58,24,23,135,13,114,
+213,134,160,208,226,169,151,186,32,168,206,4,102,170,249,110,164,171,124,120,235,174,75,18,41,175,18,172,111,173,37,198,173,172,24,129,241,167,47,235,51,166,118,85,117,164,65,63,183,165,196,41,248,160,243,67,58,161,170,253,124,163,157,151,190,162,208,115,196,181,231,25,6,180,190,167,64,182,137,205,130,183,12,219,205,178,59,177,15,179,98,15,73,177,85,101,139,176,104,34,215,187,95,72,21,186,6,246,83,184,49,156,145,185,180,138,222,188,131,224,28,189,218,94,90,191,237,52,152,190,0,0,0,0,101,103,188,184,
+139,200,9,170,238,175,181,18,87,151,98,143,50,240,222,55,220,95,107,37,185,56,215,157,239,40,180,197,138,79,8,125,100,224,189,111,1,135,1,215,184,191,214,74,221,216,106,242,51,119,223,224,86,16,99,88,159,87,25,80,250,48,165,232,20,159,16,250,113,248,172,66,200,192,123,223,173,167,199,103,67,8,114,117,38,111,206,205,112,127,173,149,21,24,17,45,251,183,164,63,158,208,24,135,39,232,207,26,66,143,115,162,172,32,198,176,201,71,122,8,62,175,50,160,91,200,142,24,181,103,59,10,208,0,135,178,105,56,80,47,
+12,95,236,151,226,240,89,133,135,151,229,61,209,135,134,101,180,224,58,221,90,79,143,207,63,40,51,119,134,16,228,234,227,119,88,82,13,216,237,64,104,191,81,248,161,248,43,240,196,159,151,72,42,48,34,90,79,87,158,226,246,111,73,127,147,8,245,199,125,167,64,213,24,192,252,109,78,208,159,53,43,183,35,141,197,24,150,159,160,127,42,39,25,71,253,186,124,32,65,2,146,143,244,16,247,232,72,168,61,88,20,155,88,63,168,35,182,144,29,49,211,247,161,137,106,207,118,20,15,168,202,172,225,7,127,190,132,96,195,6,
+210,112,160,94,183,23,28,230,89,184,169,244,60,223,21,76,133,231,194,209,224,128,126,105,14,47,203,123,107,72,119,195,162,15,13,203,199,104,177,115,41,199,4,97,76,160,184,217,245,152,111,68,144,255,211,252,126,80,102,238,27,55,218,86,77,39,185,14,40,64,5,182,198,239,176,164,163,136,12,28,26,176,219,129,127,215,103,57,145,120,210,43,244,31,110,147,3,247,38,59,102,144,154,131,136,63,47,145,237,88,147,41,84,96,68,180,49,7,248,12,223,168,77,30,186,207,241,166,236,223,146,254,137,184,46,70,103,23,155,
+84,2,112,39,236,187,72,240,113,222,47,76,201,48,128,249,219,85,231,69,99,156,160,63,107,249,199,131,211,23,104,54,193,114,15,138,121,203,55,93,228,174,80,225,92,64,255,84,78,37,152,232,246,115,136,139,174,22,239,55,22,248,64,130,4,157,39,62,188,36,31,233,33,65,120,85,153,175,215,224,139,202,176,92,51,59,182,89,237,94,209,229,85,176,126,80,71,213,25,236,255,108,33,59,98,9,70,135,218,231,233,50,200,130,142,142,112,212,158,237,40,177,249,81,144,95,86,228,130,58,49,88,58,131,9,143,167,230,110,51,31,8,
+193,134,13,109,166,58,181,164,225,64,189,193,134,252,5,47,41,73,23,74,78,245,175,243,118,34,50,150,17,158,138,120,190,43,152,29,217,151,32,75,201,244,120,46,174,72,192,192,1,253,210,165,102,65,106,28,94,150,247,121,57,42,79,151,150,159,93,242,241,35,229,5,25,107,77,96,126,215,245,142,209,98,231,235,182,222,95,82,142,9,194,55,233,181,122,217,70,0,104,188,33,188,208,234,49,223,136,143,86,99,48,97,249,214,34,4,158,106,154,189,166,189,7,216,193,1,191,54,110,180,173,83,9,8,21,154,78,114,29,255,41,206,
+165,17,134,123,183,116,225,199,15,205,217,16,146,168,190,172,42,70,17,25,56,35,118,165,128,117,102,198,216,16,1,122,96,254,174,207,114,155,201,115,202,34,241,164,87,71,150,24,239,169,57,173,253,204,94,17,69,6,238,77,118,99,137,241,206,141,38,68,220,232,65,248,100,81,121,47,249,52,30,147,65,218,177,38,83,191,214,154,235,233,198,249,179,140,161,69,11,98,14,240,25,7,105,76,161,190,81,155,60,219,54,39,132,53,153,146,150,80,254,46,46,153,185,84,38,252,222,232,158,18,113,93,140,119,22,225,52,206,46,54,
+169,171,73,138,17,69,230,63,3,32,129,131,187,118,145,224,227,19,246,92,91,253,89,233,73,152,62,85,241,33,6,130,108,68,97,62,212,170,206,139,198,207,169,55,126,56,65,127,214,93,38,195,110,179,137,118,124,214,238,202,196,111,214,29,89,10,177,161,225,228,30,20,243,129,121,168,75,215,105,203,19,178,14,119,171,92,161,194,185,57,198,126,1,128,254,169,156,229,153,21,36,11,54,160,54,110,81,28,142,167,22,102,134,194,113,218,62,44,222,111,44,73,185,211,148,240,129,4,9,149,230,184,177,123,73,13,163,30,46,177,
+27,72,62,210,67,45,89,110,251,195,246,219,233,166,145,103,81,31,169,176,204,122,206,12,116,148,97,185,102,241,6,5,222,0,0,0,0,119,7,48,150,238,14,97,44,153,9,81,186,7,109,196,25,112,106,244,143,233,99,165,53,158,100,149,163,14,219,136,50,121,220,184,164,224,213,233,30,151,210,217,136,9,182,76,43,126,177,124,189,231,184,45,7,144,191,29,145,29,183,16,100,106,176,32,242,243,185,113,72,132,190,65,222,26,218,212,125,109,221,228,235,244,212,181,81,131,211,133,199,19,108,152,86,100,107,168,192,253,98,249,
+122,138,101,201,236,20,1,92,79,99,6,108,217,250,15,61,99,141,8,13,245,59,110,32,200,76,105,16,94,213,96,65,228,162,103,113,114,60,3,228,209,75,4,212,71,210,13,133,253,165,10,181,107,53,181,168,250,66,178,152,108,219,187,201,214,172,188,249,64,50,216,108,227,69,223,92,117,220,214,13,207,171,209,61,89,38,217,48,172,81,222,0,58,200,215,81,128,191,208,97,22,33,180,244,181,86,179,196,35,207,186,149,153,184,189,165,15,40,2,184,158,95,5,136,8,198,12,217,178,177,11,233,36,47,111,124,135,88,104,76,17,193,
+97,29,171,182,102,45,61,118,220,65,144,1,219,113,6,152,210,32,188,239,213,16,42,113,177,133,137,6,182,181,31,159,191,228,165,232,184,212,51,120,7,201,162,15,0,249,52,150,9,168,142,225,14,152,24,127,106,13,187,8,109,61,45,145,100,108,151,230,99,92,1,107,107,81,244,28,108,97,98,133,101,48,216,242,98,0,78,108,6,149,237,27,1,165,123,130,8,244,193,245,15,196,87,101,176,217,198,18,183,233,80,139,190,184,234,252,185,136,124,98,221,29,223,21,218,45,73,140,211,124,243,251,212,76,101,77,178,97,88,58,181,81,
+206,163,188,0,116,212,187,48,226,74,223,165,65,61,216,149,215,164,209,196,109,211,214,244,251,67,105,233,106,52,110,217,252,173,103,136,70,218,96,184,208,68,4,45,115,51,3,29,229,170,10,76,95,221,13,124,201,80,5,113,60,39,2,65,170,190,11,16,16,201,12,32,134,87,104,181,37,32,111,133,179,185,102,212,9,206,97,228,159,94,222,249,14,41,217,201,152,176,208,152,34,199,215,168,180,89,179,61,23,46,180,13,129,183,189,92,59,192,186,108,173,237,184,131,32,154,191,179,182,3,182,226,12,116,177,210,154,234,213,71,
+57,157,210,119,175,4,219,38,21,115,220,22,131,227,99,11,18,148,100,59,132,13,109,106,62,122,106,90,168,228,14,207,11,147,9,255,157,10,0,174,39,125,7,158,177,240,15,147,68,135,8,163,210,30,1,242,104,105,6,194,254,247,98,87,93,128,101,103,203,25,108,54,113,110,107,6,231,254,212,27,118,137,211,43,224,16,218,122,90,103,221,74,204,249,185,223,111,142,190,239,249,23,183,190,67,96,176,142,213,214,214,163,232,161,209,147,126,56,216,194,196,79,223,242,82,209,187,103,241,166,188,87,103,63,181,6,221,72,178,
+54,75,216,13,43,218,175,10,27,76,54,3,74,246,65,4,122,96,223,96,239,195,168,103,223,85,49,110,142,239,70,105,190,121,203,97,179,140,188,102,131,26,37,111,210,160,82,104,226,54,204,12,119,149,187,11,71,3,34,2,22,185,85,5,38,47,197,186,59,190,178,189,11,40,43,180,90,146,92,179,106,4,194,215,255,167,181,208,207,49,44,217,158,139,91,222,174,29,155,100,194,176,236,99,242,38,117,106,163,156,2,109,147,10,156,9,6,169,235,14,54,63,114,7,103,133,5,0,87,19,149,191,74,130,226,184,122,20,123,177,43,174,12,182,
+27,56,146,210,142,155,229,213,190,13,124,220,239,183,11,219,223,33,134,211,210,212,241,212,226,66,104,221,179,248,31,218,131,110,129,190,22,205,246,185,38,91,111,176,119,225,24,183,71,119,136,8,90,230,255,15,106,112,102,6,59,202,17,1,11,92,143,101,158,255,248,98,174,105,97,107,255,211,22,108,207,69,160,10,226,120,215,13,210,238,78,4,131,84,57,3,179,194,167,103,38,97,208,96,22,247,73,105,71,77,62,110,119,219,174,209,106,74,217,214,90,220,64,223,11,102,55,216,59,240,169,188,174,83,222,187,158,197,71,
+178,207,127,48,181,255,233,189,189,242,28,202,186,194,138,83,179,147,48,36,180,163,166,186,208,54,5,205,215,6,147,84,222,87,41,35,217,103,191,179,102,122,46,196,97,74,184,93,104,27,2,42,111,43,148,180,11,190,55,195,12,142,161,90,5,223,27,45,2,239,141,0,0,0,0,25,27,49,65,50,54,98,130,43,45,83,195,100,108,197,4,125,119,244,69,86,90,167,134,79,65,150,199,200,217,138,8,209,194,187,73,250,239,232,138,227,244,217,203,172,181,79,12,181,174,126,77,158,131,45,142,135,152,28,207,74,194,18,81,83,217,35,16,120,
+244,112,211,97,239,65,146,46,174,215,85,55,181,230,20,28,152,181,215,5,131,132,150,130,27,152,89,155,0,169,24,176,45,250,219,169,54,203,154,230,119,93,93,255,108,108,28,212,65,63,223,205,90,14,158,149,132,36,162,140,159,21,227,167,178,70,32,190,169,119,97,241,232,225,166,232,243,208,231,195,222,131,36,218,197,178,101,93,93,174,170,68,70,159,235,111,107,204,40,118,112,253,105,57,49,107,174,32,42,90,239,11,7,9,44,18,28,56,109,223,70,54,243,198,93,7,178,237,112,84,113,244,107,101,48,187,42,243,247,162,
+49,194,182,137,28,145,117,144,7,160,52,23,159,188,251,14,132,141,186,37,169,222,121,60,178,239,56,115,243,121,255,106,232,72,190,65,197,27,125,88,222,42,60,240,121,79,5,233,98,126,68,194,79,45,135,219,84,28,198,148,21,138,1,141,14,187,64,166,35,232,131,191,56,217,194,56,160,197,13,33,187,244,76,10,150,167,143,19,141,150,206,92,204,0,9,69,215,49,72,110,250,98,139,119,225,83,202,186,187,93,84,163,160,108,21,136,141,63,214,145,150,14,151,222,215,152,80,199,204,169,17,236,225,250,210,245,250,203,147,
+114,98,215,92,107,121,230,29,64,84,181,222,89,79,132,159,22,14,18,88,15,21,35,25,36,56,112,218,61,35,65,155,101,253,107,167,124,230,90,230,87,203,9,37,78,208,56,100,1,145,174,163,24,138,159,226,51,167,204,33,42,188,253,96,173,36,225,175,180,63,208,238,159,18,131,45,134,9,178,108,201,72,36,171,208,83,21,234,251,126,70,41,226,101,119,104,47,63,121,246,54,36,72,183,29,9,27,116,4,18,42,53,75,83,188,242,82,72,141,179,121,101,222,112,96,126,239,49,231,230,243,254,254,253,194,191,213,208,145,124,204,203,
+160,61,131,138,54,250,154,145,7,187,177,188,84,120,168,167,101,57,59,131,152,75,34,152,169,10,9,181,250,201,16,174,203,136,95,239,93,79,70,244,108,14,109,217,63,205,116,194,14,140,243,90,18,67,234,65,35,2,193,108,112,193,216,119,65,128,151,54,215,71,142,45,230,6,165,0,181,197,188,27,132,132,113,65,138,26,104,90,187,91,67,119,232,152,90,108,217,217,21,45,79,30,12,54,126,95,39,27,45,156,62,0,28,221,185,152,0,18,160,131,49,83,139,174,98,144,146,181,83,209,221,244,197,22,196,239,244,87,239,194,167,148,
+246,217,150,213,174,7,188,233,183,28,141,168,156,49,222,107,133,42,239,42,202,107,121,237,211,112,72,172,248,93,27,111,225,70,42,46,102,222,54,225,127,197,7,160,84,232,84,99,77,243,101,34,2,178,243,229,27,169,194,164,48,132,145,103,41,159,160,38,228,197,174,184,253,222,159,249,214,243,204,58,207,232,253,123,128,169,107,188,153,178,90,253,178,159,9,62,171,132,56,127,44,28,36,176,53,7,21,241,30,42,70,50,7,49,119,115,72,112,225,180,81,107,208,245,122,70,131,54,99,93,178,119,203,250,215,78,210,225,230,
+15,249,204,181,204,224,215,132,141,175,150,18,74,182,141,35,11,157,160,112,200,132,187,65,137,3,35,93,70,26,56,108,7,49,21,63,196,40,14,14,133,103,79,152,66,126,84,169,3,85,121,250,192,76,98,203,129,129,56,197,31,152,35,244,94,179,14,167,157,170,21,150,220,229,84,0,27,252,79,49,90,215,98,98,153,206,121,83,216,73,225,79,23,80,250,126,86,123,215,45,149,98,204,28,212,45,141,138,19,52,150,187,82,31,187,232,145,6,160,217,208,94,126,243,236,71,101,194,173,108,72,145,110,117,83,160,47,58,18,54,232,35,9,
+7,169,8,36,84,106,17,63,101,43,150,167,121,228,143,188,72,165,164,145,27,102,189,138,42,39,242,203,188,224,235,208,141,161,192,253,222,98,217,230,239,35,20,188,225,189,13,167,208,252,38,138,131,63,63,145,178,126,112,208,36,185,105,203,21,248,66,230,70,59,91,253,119,122,220,101,107,181,197,126,90,244,238,83,9,55,247,72,56,118,184,9,174,177,161,18,159,240,138,63,204,51,147,36,253,114,0,0,0,0,1,194,106,55,3,132,212,110,2,70,190,89,7,9,168,220,6,203,194,235,4,141,124,178,5,79,22,133,14,19,81,184,15,209,
+59,143,13,151,133,214,12,85,239,225,9,26,249,100,8,216,147,83,10,158,45,10,11,92,71,61,28,38,163,112,29,228,201,71,31,162,119,30,30,96,29,41,27,47,11,172,26,237,97,155,24,171,223,194,25,105,181,245,18,53,242,200,19,247,152,255,17,177,38,166,16,115,76,145,21,60,90,20,20,254,48,35,22,184,142,122,23,122,228,77,56,77,70,224,57,143,44,215,59,201,146,142,58,11,248,185,63,68,238,60,62,134,132,11,60,192,58,82,61,2,80,101,54,94,23,88,55,156,125,111,53,218,195,54,52,24,169,1,49,87,191,132,48,149,213,179,50,
+211,107,234,51,17,1,221,36,107,229,144,37,169,143,167,39,239,49,254,38,45,91,201,35,98,77,76,34,160,39,123,32,230,153,34,33,36,243,21,42,120,180,40,43,186,222,31,41,252,96,70,40,62,10,113,45,113,28,244,44,179,118,195,46,245,200,154,47,55,162,173,112,154,141,192,113,88,231,247,115,30,89,174,114,220,51,153,119,147,37,28,118,81,79,43,116,23,241,114,117,213,155,69,126,137,220,120,127,75,182,79,125,13,8,22,124,207,98,33,121,128,116,164,120,66,30,147,122,4,160,202,123,198,202,253,108,188,46,176,109,126,
+68,135,111,56,250,222,110,250,144,233,107,181,134,108,106,119,236,91,104,49,82,2,105,243,56,53,98,175,127,8,99,109,21,63,97,43,171,102,96,233,193,81,101,166,215,212,100,100,189,227,102,34,3,186,103,224,105,141,72,215,203,32,73,21,161,23,75,83,31,78,74,145,117,121,79,222,99,252,78,28,9,203,76,90,183,146,77,152,221,165,70,196,154,152,71,6,240,175,69,64,78,246,68,130,36,193,65,205,50,68,64,15,88,115,66,73,230,42,67,139,140,29,84,241,104,80,85,51,2,103,87,117,188,62,86,183,214,9,83,248,192,140,82,58,
+170,187,80,124,20,226,81,190,126,213,90,226,57,232,91,32,83,223,89,102,237,134,88,164,135,177,93,235,145,52,92,41,251,3,94,111,69,90,95,173,47,109,225,53,27,128,224,247,113,183,226,177,207,238,227,115,165,217,230,60,179,92,231,254,217,107,229,184,103,50,228,122,13,5,239,38,74,56,238,228,32,15,236,162,158,86,237,96,244,97,232,47,226,228,233,237,136,211,235,171,54,138,234,105,92,189,253,19,184,240,252,209,210,199,254,151,108,158,255,85,6,169,250,26,16,44,251,216,122,27,249,158,196,66,248,92,174,117,
+243,0,233,72,242,194,131,127,240,132,61,38,241,70,87,17,244,9,65,148,245,203,43,163,247,141,149,250,246,79,255,205,217,120,93,96,216,186,55,87,218,252,137,14,219,62,227,57,222,113,245,188,223,179,159,139,221,245,33,210,220,55,75,229,215,107,12,216,214,169,102,239,212,239,216,182,213,45,178,129,208,98,164,4,209,160,206,51,211,230,112,106,210,36,26,93,197,94,254,16,196,156,148,39,198,218,42,126,199,24,64,73,194,87,86,204,195,149,60,251,193,211,130,162,192,17,232,149,203,77,175,168,202,143,197,159,200,
+201,123,198,201,11,17,241,204,68,7,116,205,134,109,67,207,192,211,26,206,2,185,45,145,175,150,64,144,109,252,119,146,43,66,46,147,233,40,25,150,166,62,156,151,100,84,171,149,34,234,242,148,224,128,197,159,188,199,248,158,126,173,207,156,56,19,150,157,250,121,161,152,181,111,36,153,119,5,19,155,49,187,74,154,243,209,125,141,137,53,48,140,75,95,7,142,13,225,94,143,207,139,105,138,128,157,236,139,66,247,219,137,4,73,130,136,198,35,181,131,154,100,136,130,88,14,191,128,30,176,230,129,220,218,209,132,
+147,204,84,133,81,166,99,135,23,24,58,134,213,114,13,169,226,208,160,168,32,186,151,170,102,4,206,171,164,110,249,174,235,120,124,175,41,18,75,173,111,172,18,172,173,198,37,167,241,129,24,166,51,235,47,164,117,85,118,165,183,63,65,160,248,41,196,161,58,67,243,163,124,253,170,162,190,151,157,181,196,115,208,180,6,25,231,182,64,167,190,183,130,205,137,178,205,219,12,179,15,177,59,177,73,15,98,176,139,101,85,187,215,34,104,186,21,72,95,184,83,246,6,185,145,156,49,188,222,138,180,189,28,224,131,191,90,
+94,218,190,152,52,237,0,0,0,0,184,188,103,101,170,9,200,139,18,181,175,238,143,98,151,87,55,222,240,50,37,107,95,220,157,215,56,185,197,180,40,239,125,8,79,138,111,189,224,100,215,1,135,1,74,214,191,184,242,106,216,221,224,223,119,51,88,99,16,86,80,25,87,159,232,165,48,250,250,16,159,20,66,172,248,113,223,123,192,200,103,199,167,173,117,114,8,67,205,206,111,38,149,173,127,112,45,17,24,21,63,164,183,251,135,24,208,158,26,207,232,39,162,115,143,66,176,198,32,172,8,122,71,201,160,50,175,62,24,142,200,
+91,10,59,103,181,178,135,0,208,47,80,56,105,151,236,95,12,133,89,240,226,61,229,151,135,101,134,135,209,221,58,224,180,207,143,79,90,119,51,40,63,234,228,16,134,82,88,119,227,64,237,216,13,248,81,191,104,240,43,248,161,72,151,159,196,90,34,48,42,226,158,87,79,127,73,111,246,199,245,8,147,213,64,167,125,109,252,192,24,53,159,208,78,141,35,183,43,159,150,24,197,39,42,127,160,186,253,71,25,2,65,32,124,16,244,143,146,168,72,232,247,155,20,88,61,35,168,63,88,49,29,144,182,137,161,247,211,20,118,207,106,
+172,202,168,15,190,127,7,225,6,195,96,132,94,160,112,210,230,28,23,183,244,169,184,89,76,21,223,60,209,194,231,133,105,126,128,224,123,203,47,14,195,119,72,107,203,13,15,162,115,177,104,199,97,4,199,41,217,184,160,76,68,111,152,245,252,211,255,144,238,102,80,126,86,218,55,27,14,185,39,77,182,5,64,40,164,176,239,198,28,12,136,163,129,219,176,26,57,103,215,127,43,210,120,145,147,110,31,244,59,38,247,3,131,154,144,102,145,47,63,136,41,147,88,237,180,68,96,84,12,248,7,49,30,77,168,223,166,241,207,186,
+254,146,223,236,70,46,184,137,84,155,23,103,236,39,112,2,113,240,72,187,201,76,47,222,219,249,128,48,99,69,231,85,107,63,160,156,211,131,199,249,193,54,104,23,121,138,15,114,228,93,55,203,92,225,80,174,78,84,255,64,246,232,152,37,174,139,136,115,22,55,239,22,4,130,64,248,188,62,39,157,33,233,31,36,153,85,120,65,139,224,215,175,51,92,176,202,237,89,182,59,85,229,209,94,71,80,126,176,255,236,25,213,98,59,33,108,218,135,70,9,200,50,233,231,112,142,142,130,40,237,158,212,144,81,249,177,130,228,86,95,
+58,88,49,58,167,143,9,131,31,51,110,230,13,134,193,8,181,58,166,109,189,64,225,164,5,252,134,193,23,73,41,47,175,245,78,74,50,34,118,243,138,158,17,150,152,43,190,120,32,151,217,29,120,244,201,75,192,72,174,46,210,253,1,192,106,65,102,165,247,150,94,28,79,42,57,121,93,159,150,151,229,35,241,242,77,107,25,5,245,215,126,96,231,98,209,142,95,222,182,235,194,9,142,82,122,181,233,55,104,0,70,217,208,188,33,188,136,223,49,234,48,99,86,143,34,214,249,97,154,106,158,4,7,189,166,189,191,1,193,216,173,180,
+110,54,21,8,9,83,29,114,78,154,165,206,41,255,183,123,134,17,15,199,225,116,146,16,217,205,42,172,190,168,56,25,17,70,128,165,118,35,216,198,102,117,96,122,1,16,114,207,174,254,202,115,201,155,87,164,241,34,239,24,150,71,253,173,57,169,69,17,94,204,118,77,238,6,206,241,137,99,220,68,38,141,100,248,65,232,249,47,121,81,65,147,30,52,83,38,177,218,235,154,214,191,179,249,198,233,11,69,161,140,25,240,14,98,161,76,105,7,60,155,81,190,132,39,54,219,150,146,153,53,46,46,254,80,38,84,185,153,158,232,222,
+252,140,93,113,18,52,225,22,119,169,54,46,206,17,138,73,171,3,63,230,69,187,131,129,32,227,224,145,118,91,92,246,19,73,233,89,253,241,85,62,152,108,130,6,33,212,62,97,68,198,139,206,170,126,55,169,207,214,127,65,56,110,195,38,93,124,118,137,179,196,202,238,214,89,29,214,111,225,161,177,10,243,20,30,228,75,168,121,129,19,203,105,215,171,119,14,178,185,194,161,92,1,126,198,57,156,169,254,128,36,21,153,229,54,160,54,11,142,28,81,110,134,102,22,167,62,218,113,194,44,111,222,44,148,211,185,73,9,4,129,
+240,177,184,230,149,163,13,73,123,27,177,46,30,67,210,62,72,251,110,89,45,233,219,246,195,81,103,145,166,204,176,169,31,116,12,206,122,102,185,97,148,222,5,6,241,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,
+50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,
+27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,
+63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,
+97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,
+218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,
+227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,
+124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,
+81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,
+50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,
+27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,
+63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,
+97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,
+218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,227,63,81,218,27,124,97,50,
+227,63,81,218,27,124,97,50,227,63,12,0,0,0,4,0,0,0,6,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,9,0,0,0,8,0,0,0,11,0,0,0,12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0,48,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,54,0,0,0,55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,61,0,0,0,62,0,0,0,63,0,0,0,64,0,0,0,65,0,0,
+0,66,0,0,0,67,0,0,0,68,0,0,0,71,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0,77,0,0,0,78,0,0,0,81,0,0,0,82,0,0,0,83,0,0,0,84,0,0,0,85,0,0,0,86,0,0,0,87,0,0,0,88,0,0,0,8,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,86,0,0,0,4,0,4,0,8,0,4,0,106,0,0,0,4,0,5,0,16,0,8,0,106,0,0,0,4,0,6,0,32,0,32,0,106,0,0,0,4,0,4,0,16,0,16,0,132,0,0,0,8,0,16,0,32,0,32,0,132,0,0,0,8,0,16,0,128,0,128,0,132,0,0,0,8,0,32,0,128,0,0,1,132,0,0,0,32,0,128,0,2,1,0,4,132,
+0,0,0,32,0,2,1,2,1,0,16,132,0,0,0,88,247,1,0,85,93,201,127,201,127,255,0,0,196,1,0,187,45,212,190,174,212,255,0,144,167,1,0,20,119,253,253,192,134,255,0,80,145,1,0,85,93,201,127,201,127,255,0,248,122,1,0,187,45,212,190,174,212,255,0,72,101,1,0,20,119,253,253,192,134,255,0,168,80,1,0,42,102,255,255,255,153,255,0,216,61,1,0,85,93,201,127,201,127,255,0,40,142,2,0,187,45,212,190,174,212,255,0,104,125,2,0,20,119,253,253,192,134,255,0,72,109,2,0,42,102,255,255,255,153,255,0,192,89,2,0,151,173,176,56,108,
+176,255,0,32,77,2,0,85,93,201,127,201,127,255,0,216,65,2,0,187,45,212,190,174,212,255,0,136,53,2,0,20,119,253,253,192,134,255,0,0,42,2,0,42,102,255,255,255,153,255,0,152,29,2,0,151,173,176,56,108,176,255,0,128,19,2,0,232,252,240,240,2,127,255,0,24,9,2,0,85,93,201,127,201,127,255,0,88,0,2,0,187,45,212,190,174,212,255,0,200,246,1,0,20,119,253,253,192,134,255,0,16,231,1,0,42,102,255,255,255,153,255,0,192,221,1,0,151,173,176,56,108,176,255,0,16,218,1,0,232,252,240,240,2,127,255,0,176,215,1,0,17,224,191,
+191,91,23,255,0,232,211,1,0,85,93,201,127,201,127,255,0,144,208,1,0,187,45,212,190,174,212,255,0,24,205,1,0,20,119,253,253,192,134,255,0,80,202,1,0,42,102,255,255,255,153,255,0,232,197,1,0,151,173,176,56,108,176,255,0,168,193,1,0,232,252,240,240,2,127,255,0,248,192,1,0,17,224,191,191,91,23,255,0,112,189,1,0,0,0,102,102,102,102,255,0,192,186,1,0,147,25,247,222,235,247,255,0,168,184,1,0,142,75,225,158,202,225,255,0,120,181,1,0,145,188,189,49,130,189,255,0,112,180,1,0,159,16,255,239,243,255,255,0,16,
+178,1,0,143,46,231,189,215,231,255,0,80,175,1,0,143,127,214,107,174,214,255,0,120,172,1,0,147,208,181,33,113,181,255,0,72,169,1,0,159,16,255,239,243,255,255,0,8,166,1,0,143,46,231,189,215,231,255,0,136,162,1,0,143,127,214,107,174,214,255,0,152,160,1,0,145,188,189,49,130,189,255,0,24,159,1,0,149,241,156,8,81],"i8",L,l.J+30737);D([156,255,0,104,157,1,0,159,16,255,239,243,255,255,0,120,154,1,0,148,43,239,198,219,239,255,0,248,153,1,0,142,75,225,158,202,225,255,0,248,151,1,0,143,127,214,107,174,214,255,
+0,56,150,1,0,145,188,189,49,130,189,255,0,216,146,1,0,149,241,156,8,81,156,255,0,72,144,1,0,159,16,255,239,243,255,255,0,72,140,1,0,148,43,239,198,219,239,255,0,168,138,1,0,142,75,225,158,202,225,255,0,208,136,1,0,143,127,214,107,174,214,255,0,32,135,1,0,144,169,198,66,146,198,255,0,32,133,1,0,147,208,181,33,113,181,255,0,152,131,1,0,151,241,148,8,69,148,255,0,232,129,1,0,148,8,255,247,251,255,255,0,80,128,1,0,147,25,247,222,235,247,255,0,8,125,1,0,148,43,239,198,219,239,255,0,8,122,1,0,142,75,225,
+158,202,225,255,0,160,118,1,0,143,127,214,107,174,214,255,0,144,116,1,0,144,169,198,66,146,198,255,0,208,114,1,0,147,208,181,33,113,181,255,0,48,113,1,0,151,241,148,8,69,148,255,0,168,111,1,0,148,8,255,247,251,255,255,0,208,109,1,0,147,25,247,222,235,247,255,0,224,107,1,0,148,43,239,198,219,239,255,0,56,106,1,0,142,75,225,158,202,225,255,0,128,103,1,0,143,127,214,107,174,214,255,0,104,100,1,0,144,169,198,66,146,198,255,0,24,98,1,0,147,208,181,33,113,181,255,0,224,95,1,0,149,241,156,8,81,156,255,0,
+248,93,1,0,152,235,107,8,48,107,255,0,80,92,1,0,23,239,84,84,48,5,255,0,120,90,1,0,119,255,60,0,60,48,255,0,168,88,1,0,23,236,140,140,81,10,255,0,248,86,1,0,24,194,191,191,129,45,255,0,64,85,1,0,29,112,223,223,194,125,255,0,16,83,1,0,30,52,246,246,232,195,255,0,184,80,1,0,121,38,234,199,234,229,255,0,192,77,1,0,120,95,205,128,205,193,255,0,240,75,1,0,124,165,151,53,151,143,255,0,184,74,1,0,124,252,102,1,102,94,255,0,232,72,1,0,23,239,84,84,48,5,255,0,72,71,1,0,124,252,102,1,102,94,255,0,200,69,1,
+0,119,255,60,0,60,48,255,0,16,68,1,0,23,236,140,140,81,10,255,0,176,66,1,0,24,194,191,191,129,45,255,0,88,64,1,0,29,112,223,223,194,125,255,0,48,62,1,0,30,52,246,246,232,195,255,0,160,59,1,0,0,0,245,245,245,245,255,0,232,57,1,0,121,38,234,199,234,229,255,0,112,56,1,0,120,95,205,128,205,193,255,0,208,54,1,0,124,165,151,53,151,143,255,0,104,53,1,0,28,135,216,216,179,101,255,0,88,52,1,0,0,0,245,245,245,245,255,0,248,147,2,0,123,127,180,90,180,172,255,0,176,146,2,0,21,215,166,166,97,26,255,0,32,145,2,
+0,29,112,223,223,194,125,255,0,24,143,2,0,120,95,205,128,205,193,255,0,112,140,2,0,121,253,133,1,133,113,255,0,224,138,2,0,21,215,166,166,97,26,255,0,96,137,2,0,29,112,223,223,194,125,255,0,232,135,2,0,0,0,245,245,245,245,255,0,160,134,2,0,120,95,205,128,205,193,255,0,104,133,2,0,121,253,133,1,133,113,255,0,224,131,2,0,23,236,140,140,81,10,255,0,152,130,2,0,28,135,216,216,179,101,255,0,248,128,2,0,30,52,246,246,232,195,255,0,248,126,2,0,121,38,234,199,234,229,255,0,16,124,2,0,123,127,180,90,180,172,
+255,0,184,122,2,0,124,252,102,1,102,94,255,0,80,121,2,0,23,236,140,140,81,10,255,0,248,119,2,0,28,135,216,216,179,101,255,0,208,118,2,0,30,52,246,246,232,195,255,0,128,117,2,0,0,0,245,245,245,245,255,0,48,116,2,0,121,38,234,199,234,229,255,0,8,115,2,0,123,127,180,90,180,172,255,0,248,112,2,0,124,252,102,1,102,94,255,0,40,109,2,0,23,236,140,140,81,10,255,0,152,108,2,0,24,194,191,191,129,45,255,0,104,107,2,0,29,112,223,223,194,125,255,0,80,106,2,0,30,52,246,246,232,195,255,0,48,105,2,0,121,38,234,199,
+234,229,255,0,168,103,2,0,120,95,205,128,205,193,255,0,120,101,2,0,124,165,151,53,151,143,255,0,32,100,2,0,124,252,102,1,102,94,255,0,144,98,2,0,23,236,140,140,81,10,255,0,128,93,2,0,24,194,191,191,129,45,255,0,104,91,2,0,29,112,223,223,194,125,255,0,16,89,2,0,30,52,246,246,232,195,255,0,176,87,2,0,0,0,245,245,245,245,255,0,184,86,2,0,121,38,234,199,234,229,255,0,152,85,2,0,120,95,205,128,205,193,255,0,192,84,2,0,124,165,151,53,151,143,255,0,136,83,2,0,124,252,102,1,102,94,255,0,144,82,2,0,135,20,
+249,229,245,249,255,0,120,81,2,0,117,74,216,153,216,201,255,0,40,80,2,0,103,185,162,44,162,95,255,0,216,78,2,0,136,14,251,237,248,251,255,0,208,76,2,0,127,54,226,178,226,226,255,0,232,75,2,0,113,120,194,102,194,164,255,0,0,75,2,0,98,190,139,35,139,69,255,0,0,74,2,0,136,14,251,237,248,251,255,0,48,73,2,0,127,54,226,178,226,226,255,0,64,72,2,0,113,120,194,102,194,164,255,0,56,71,2,0,103,185,162,44,162,95,255,0,104,70,2,0,102,255,109,0,109,44,255,0,16,69,2,0,136,14,251,237,248,251,255,0,80,67,2,0,119,
+34,236,204,236,230,255,0,152,65,2,0,117,74,216,153,216,201,255,0,152,64,2,0,113,120,194,102,194,164,255,0,128,63,2,0,103,185,162,44,162,95,255,0,80,62,2,0,102,255,109,0,109,44,255,0,96,61,2,0,136,14,251,237,248,251,255,0,192,59,2,0,119,34,236,204,236,230,255,0,48,59,2,0,117,74,216,153,216,201,255,0,48,58,2,0,113,120,194,102,194,164,255,0,128,56,2,0,105,159,174,65,174,118,255,0,8,55,2,0,98,190,139,35,139,69,255,0,88,53,2,0,102,255,88,0,88,36,255,0,88,52,2,0,134,6,253,247,252,253,255,0,64,51,2,0,135,
+20,249,229,245,249,255,0,8,50,2,0,119,34,236,204,236,230,255,0,88,49,2,0,117,74,216,153,216,201,255,0,112,48,2,0,113,120,194,102,194,164,255,0,112,47,2,0,105,159,174,65,174,118,255,0,144,46,2,0,98,190,139,35,139,69,255,0,224,44,2,0,102,255,88,0,88,36,255,0,96,43,2,0,134,6,253,247,252,253,255,0,216,41,2,0,135,20,249,229,245,249,255,0,80,40,2,0,119,34,236,204,236,230,255,0,80,39,2,0,117,74,216,153,216,201,255,0,72,38,2,0,113,120,194,102,194,164,255,0,104,37,2,0,105,159,174,65,174,118,255,0,112,36,2,
+0,98,190,139,35,139,69,255,0,96,35,2,0,102,255,109,0,109,44,255,0,88,34,2,0,101,255,68,0,68,27,255,0,240,32,2,0,144,20,244,224,236,244,255,0,96,31,2,0,148,70,218,158,188,218,255,0,168,29,2,0,196,123,167,136,86,167,255,0,144,28,2,0,136,14,251,237,248,251,255,0,224,27,2,0,146,53,227,179,205,227,255,0,48,27,2,0,162,74,198,140,150,198,255,0,120,26,2,0,202,149,157,136,65,157,255,0,128,25,2,0,136,14,251,237,248,251,255,0,160,24,2,0,146,53,227,179,205,227,255,0,224,23,2,0,162,74,198,140,150,198,255,0,168,
+22,2,0,196,123,167,136,86,167,255,0,112,21,2,0,214,225,129,129,15,124,255,0,160,19,2,0,136,14,251,237,248,251,255,0,136,18,2,0,148,43,230,191,211,230,255,0,152,17,2,0,148,70,218,158,188,218,255,0,40,16,2,0,162,74,198,140,150,198,255,0,24,15,2,0,196,123,167,136,86,167,255,0,24,14,2,0,214,225,129,129,15,124,255,0,24,13,2,0,136,14,251,237,248,251,255,0,144,12,2,0,148,43,230,191,211,230,255,0,48,11,2,0,148,70,218,158,188,218,255,0,64,10,2,0,162,74,198,140,150,198,255,0,56,9,2,0,190,100,177,140,107,177,
+255,0,120,8,2,0,202,149,157,136,65,157,255,0,232,7,2,0,213,252,110,110,1,107,255,0,48,7,2,0,134,6,253,247,252,253,255,0,168,6,2,0,144,20,244,224,236,244,255,0,24,6,2,0,148,43,230,191,211,230,255,0,112,5,2,0,148,70,218,158,188,218,255,0,224,4,2,0,162,74,198,140,150,198,255,0,112,3,2,0,190,100,177,140,107,177,255,0,0,2,2,0,202,149,157,136,65,157,255,0,224,0,2,0,213,252,110,110,1,107,255,0,216,255,1,0,134,6,253,247,252,253,255,0,72,255,1,0,144,20,244,224,236,244,255,0,184,254,1,0,148,43,230,191,211,
+230,255,0,32,254,1,0,148,70,218,158,188,218,255,0,136,253,1,0,162,74,198,140,150,198,255,0,104,252,1,0,190,100,177,140,107,177,255,0,184,251,1,0,202,149,157,136,65,157,255,0,160,250,1,0,214,225,129,129,15,124,255,0,208,248,1,0,213,255,77,77,0,75,255,0,152,246,1,0,114,211,158,27,158,119,255,0,40,246,1,0,18,252,217,217,95,2,255,0,16,245,1,0,173,95,179,117,112,179,255,0,40,244,1,0,114,211,158,27,158,119,255,0,208,242,1,0,18,252,217,217,95,2,255,0,168,241,1,0,173,95,179,117,112,179,255,0,136,240,1,0,
+233,209,231,231,41,138,255,0,128,239,1,0,114,211,158,27,158,119,255,0,152,237,1,0,18,252,217,217,95,2,255,0,152,236,1,0,173,95,179,117,112,179,255,0,216,234,1,0,233,209,231,231,41,138,255,0,16,234,1,0,62,208,166,102,166,30,255,0,232,232,1,0,114,211,158,27,158,119,255,0,56,232,1,0,18,252,217,217,95,2,255,0,176,231,1,0,173,95,179,117,112,179,255,0,56,231,1,0,233,209,231,231,41,138,255,0,32,230,1,0,62,208,166,102,166,30,255,0,128,229,1,0,31,252,230,230,171,2,255,0,24,228,1,0,114,211,158,27,158,119,255,
+0,232,226,1,0,18,252,217,217,95,2,255,0,176,225,1,0,173,95,179,117,112,179,255,0,200,224,1,0,233,209,231,231,41,138,255,0,0,224,1,0,62,208,166,102,166,30,255,0,88,223,1,0,31,252,230,230,171,2,255,0,96,222,1,0,27,210,166,166,118,29,255,0,232,221,1,0,114,211,158,27,158,119,255,0,0,221,1,0,18,252,217,217,95,2,255,0,168,220,1,0,173,95,179,117,112,179,255,0,48,220,1,0,233,209,231,231,41,138,255,0,144,219,1,0,62,208,166,102,166,30,255,0,8,219,1,0,31,252,230,230,171,2,255,0,200,218,1,0,27,210,166,166,118,
+29,255,0,168,218,1,0,0,0,102,102,102,102,255,0,104,218,1,0,76,25,243,224,243,219,255,0,64,218,1,0,95,61,221,168,221,181,255,0,40,218,1,0,140,170,202,67,162,202,255,0,192,217,1,0,65,17,249,240,249,232,255,0,160,217,1,0,87,46,228,186,228,188,255,0,24,217,1,0,123,101,204,123,204,196,255,0,40,216,1,0,141,197,190,43,140,190,255,0,200,215,1,0,65,17,249,240,249,232,255,0,152,215,1,0,87,46,228,186,228,188,255,0,96,215,1,0,123,101,204,123,204,196,255,0,40,215,1,0,140,170,202,67,162,202,255,0,168,214,1,0,145,
+243,172,8,104,172,255,0,144,214,1,0,65,17,249,240,249,232,255,0,64,214,1,0,77,41,235,204,235,197,255,0,16,214,1,0,95,61,221,168,221,181,255,0,208,213,1,0,123,101,204,123,204,196,255,0,64,213,1,0,140,170,202,67,162,202,255,0,200,212,1,0,145,243,172,8,104,172,255,0,160,212,1,0,65,17,249,240,249,232,255,0,112,212,1,0,77,41,235,204,235,197,255,0,72,212,1,0,95,61,221,168,221,181,255,0,32,212,1,0,123,101,204,123,204,196,255,0,8,212,1,0,137,160,211,78,179,211,255,0,184,211,1,0,141,197,190,43,140,190,255,
+0,64,211,1,0,147,242,158,8,88,158,255,0,248,210,1,0,60,12,252,247,252,240,255,0,16,210,1,0,76,25,243,224,243,219,255,0,128,209,1,0,77,41,235,204,235,197,255,0,96,209,1,0,95,61,221,168,221,181,255,0,56,209,1,0,123,101,204,123,204,196,255,0,8,209,1,0,137,160,211,78,179,211,255,0,224,208,1,0,141,197,190,43,140,190,255,0,184,208,1,0,147,242,158,8,88,158,255,0,96,208,1,0,60,12,252,247,252,240,255,0,56,208,1,0,76,25,243,224,243,219,255,0,248,207,1,0,77,41,235,204,235,197,255,0,120,207,1,0,95,61,221,168,
+221,181,255,0,16,207,1,0,123,101,204,123,204,196,255,0,208,206,1,0,137,160,211,78,179,211,255,0,80,206,1,0,141,197,190,43,140,190,255,0,232,205,1,0,145,243,172,8,104,172,255,0,160,205,1,0,150,239,129,8,64,129,255,0,96,205,1,0,74,21,245,229,245,224,255,0,208,204,1,0,80,72,217,161,217,155,255,0,184,204,1,0,98,178,163,49,163,84,255,0,104,204,1,0,73,15,248,237,248,233,255,0,192,203,1,0,78,54,228,186,228,179,255,0,88,203,1,0,86,104,196,116,196,118,255,0,48,203,1,0,98,190,139,35,139,69,255,0,224,202,1,
+0,73,15,248,237,248,233,255,0,152,202,1,0,78,54,228,186,228,179,255,0,120,202,1,0,86,104,196,116,196,118,255,0,104,202,1,0,98,178,163,49,163,84,255,0,32,202,1,0,102,255,109,0,109,44,255,0,0,202,1,0,73,15,248,237,248,233,255,0,224,200,1,0,77,44,233,199,233,192,255,0,48,200,1,0,80,72,217,161,217,155,255,0,184,199,1,0,86,104,196,116,196,118,255,0,8,199,1,0,98,178,163,49,163,84,255,0,192,198,1,0,102,255,109,0,109,44,255,0,104,198,1,0,73,15,248,237,248,233,255,0,64,198,1,0,77,44,233,199,233,192,255,0,
+40,198,1,0,80,72,217,161,217,155,255,0,176,197,1,0,86,104,196,116,196,118,255,0,136,197,1,0,96,158,171,65,171,93,255,0,64,197,1,0,98,190,139,35,139,69,255,0,136,196,1,0,108,255,90,0,90,50,255,0,24,196,1,0,72,7,252,247,252,245,255,0,112,195,1,0,74,21,245,229,245,224,255,0,0,195,1,0,77,44,233,199,233,192,255,0,200,194,1,0,80,72,217,161,217,155,255,0,168,194,1,0,86,104,196,116,196,118,255,0,8,194,1,0,96,158,171,65,171,93,255,0,112,193,1,0,98,190,139,35,139,69,255,0,8,193,1,0,108,255,90,0,90,50,255,0,
+32,192,1,0,72,7,252,247,252,245,255,0,56,191,1,0,74,21,245,229,245,224,255,0,168,190,1,0,77,44,233,199,233,192,255,0,112,190,1,0,80,72,217,161,217,155,255,0,72,190,1,0,86,104,196,116,196,118,255,0,24,190,1,0,96,158,171,65,171,93,255,0,248,189,1,0,98,190,139,35,139,69,255,0,192,189,1,0,102,255,109,0,109,44,255,0,144,189,1,0,101,255,68,0,68,27,255,0,128,189,1,0,0,0,240,240,240,240,255,0,240,188,1,0,0,0,189,189,189,189,255,0,32,188,1,0,0,0,99,99,99,99,255,0,208,187,1,0,0,0,247,247,247,247,255,0,176,
+187,1,0,0,0,204,204,204,204,255,0,112,187,1,0,0,0,150,150,150,150,255,0,80,187,1,0,0,0,82,82,82,82,255,0,56,187,1,0,0,0,247,247,247,247,255,0,16,187,1,0,0,0,204,204,204,204,255,0,224,186,1,0,0,0,150,150,150,150,255,0,208,186,1,0,0,0,99,99,99,99,255,0,128,186,1,0,0,0,37,37,37,37,255,0,40,186,1,0,0,0,247,247,247,247,255,0,168,185,1,0,0,0,217,217,217,217,255,0,128,185,1,0,0,0,189,189,189,189,255,0,104,185,1,0,0,0,150,150,150,150,255,0,72,185,1,0,0,0,99,99,99,99,255,0,16,185,1,0,0,0,37,37,37,37,255,0,
+248,184,1,0,0,0,247,247,247,247,255,0,200,184,1,0,0,0,217,217,217,217,255,0,184,184,1,0,0,0,189,189,189,189,255,0,120,184,1,0,0,0,150,150,150,150,255,0,232,183,1,0,0,0,115,115,115,115,255,0,168,183,1,0,0,0,82,82,82,82,255,0,136,183,1,0,0,0,37,37,37,37,255,0,112,183,1,0,0,0,255,255,255,255,255,0,72,183,1,0,0,0,240,240,240,240,255,0,48,183,1,0,0,0,217,217,217,217,255,0,24,183,1,0,0,0,189,189,189,189,255,0,224,182,1,0,0,0,150,150,150,150,255,0,208,182,1,0,0,0,115,115,115,115,255,0,176,182,1,0,0,0,82,
+82,82,82,255,0,240,181,1,0,0,0,37,37,37,37,255,0,160,181,1,0,0,0,255,255,255,255,255,0,96,181,1,0,0,0,240,240,240,240,255,0,64,181,1,0,0,0,217,217,217,217,255,0,16,181,1,0,0,0,189,189,189,189,255,0,248,180,1,0,0,0,150,150,150,150,255,0,224,180,1,0,0,0,115,115,115,115,255,0,144,180,1,0,0,0,82,82,82,82,255,0,128,180,1,0,0,0,37,37,37,37,255,0,64,180,1,0,0,0,0,0,0,0,255,0,176,179,1,0,21,48,254,254,230,206,255,0,72,179,1,0,19,147,253,253,174,107,255,0,24,179,1,0,14,240,230,230,85,13,255,0,240,178,1,0,
+19,32,254,254,237,222,255,0,200,178,1,0,20,120,253,253,190,133,255,0,184,178,1,0,17,194,253,253,141,60,255,0,160,178,1,0,13,253,217,217,71,1,255,0,48,178,1,0,19,32,254,254,237,222,255,0,32,178,1,0,20,120,253,253,190,133,255,0,200,177,1,0,17,194,253,253,141,60,255,0,8,177,1,0,14,240,230,230,85,13,255,0,96,176,1,0,13,250,166,166,54,3,255,0,80,176,1,0,19,32,254,254,237,222,255,0,40,176,1,0,21,91,253,253,208,162,255,0,0,176,1,0,19,147,253,253,174,107,255,0,240,175,1,0,17,194,253,253,141,60,255,0,224,
+175,1,0,14,240,230,230,85,13,255,0,112,175,1,0,13,250,166,166,54,3,255,0,96,175,1,0,19,32,254,254,237,222,255,0,40,175,1,0,21,91,253,253,208,162,255,0,48,174,1,0,19,147,253,253,174,107,255,0,216,173,1,0,17,194,253,253,141,60,255,0,200,173,1,0,16,234,241,241,105,19,255,0,160,173,1,0,13,253,217,217,72,1,255,0,120,173,1,0,12,247,140,140,45,4,255,0,104,173,1,0,21,20,255,255,245,235,255,0,88,173,1,0,21,48,254,254,230,206,255,0,248,172,1,0,21,91,253,253,208,162,255,0,136,172,1,0,19,147,253,253,174,107,
+255,0,64,172,1,0,17,194,253,253,141,60,255,0,144,171,1,0,16,234,241,241,105,19,255,0,8,171,1,0,13,253,217,217,72,1,255,0,200,170,1,0,12,247,140,140,45,4,255,0,128,170,1,0,21,20,255,255,245,235,255,0,16,170,1,0,21,48,254,254,230,206,255,0,208,169,1,0,21,91,253,253,208,162,255,0,184,169,1,0,19,147,253,253,174,107,255,0,152,169,1,0,17,194,253,253,141,60,255,0,88,169,1,0,16,234,241,241,105,19,255,0,8,169,1,0,13,253,217,217,72,1,255,0,96,168,1,0,13,250,166,166,54,3,255,0,232,167,1,0,12,246,127,127,39,
+4,255,0,208,167,1,0,25,54,254,254,232,200,255,0,120,167,1,0,19,121,253,253,187,132,255,0,48,167,1,0,5,197,227,227,74,51,255,0,240,166,1,0,26,37,254,254,240,217,255,0,136,166,1,0,24,115,253,253,204,138,255,0,80,166,1,0,13,164,252,252,141,89,255,0,24,166,1,0,3,218,215,215,48,31,255,0,56,165,1,0,26,37,254,254,240,217,255,0,104,164,1,0,24,115,253,253,204,138,255,0,112,163,1,0,13,164,252,252,141,89,255,0,96,163,1,0,5,197,227,227,74,51,255,0,32,163,1,0,0,255,179,179,0,0,255,0,0,163,1,0,26,37,254,254,240,
+217,255,0,240,162,1,0,24,95,253,253,212,158,255,0,200,162,1,0,19,121,253,253,187,132,255,0,168,162,1,0,13,164,252,252,141,89,255,0,152,162,1,0,5,197,227,227,74,51,255,0,80,162,1,0,0,255,179,179,0,0,255,0,200,161,1,0,26,37,254,254,240,217,255,0,96,161,1,0,24,95,253,253,212,158,255,0,64,161,1,0,19,121,253,253,187,132,255,0,32,161,1,0,13,164,252,252,141,89,255,0,248,160,1,0,7,178,239,239,101,72,255,0,224,160,1,0,3,218,215,215,48,31,255,0,208,160,1,0,0,255,153,153,0,0,255,0,184,160,1,0,24,18,255,255,
+247,236,255,0,168,160,1,0,25,54,254,254,232,200,255,0,136,160,1,0,24,95,253,253,212,158,255,0,16,160,1,0,19,121,253,253,187,132,255,0,184,159,1,0,13,164,252,252,141,89,255,0,168,159,1,0,7,178,239,239,101,72,255,0,128,159,1,0,3,218,215,215,48,31,255,0,96,159,1,0,0,255,153,153,0,0,255,0,80,159,1,0,24,18,255,255,247,236,255,0,56,159,1,0,25,54,254,254,232,200,255,0,8,159,1,0,24,95,253,253,212,158,255,0,248,158,1,0,19,121,253,253,187,132,255,0,224,158,1,0,13,164,252,252,141,89,255,0,96,158,1,0,7,178,239,
+239,101,72,255,0,24,158,1,0,3,218,215,215,48,31,255,0,8,158,1,0,0,255,179,179,0,0,255,0,224,157,1,0,0,255,127,127,0,0,255,0,184,157,1,0,142,68,227,166,206,227,255,0,168,157,1,0,190,153,154,106,61,154,255,0,128,157,1,0,144,211,180,31,120,180,255,0,48,157,1,0,65,97,223,178,223,138,255,0,32,157,1,0,82,184,160,51,160,44,255,0,16,157,1,0,0,99,251,251,154,153,255,0,136,156,1,0,254,225,227,227,26,28,255,0,16,156,1,0,23,143,253,253,191,111,255,0,0,156,1,0,21,255,255,255,127,0,255,0,216,155,1,0,198,42,214,
+202,178,214,255,0,184,155,1,0,142,68,227,166,206,227,255,0,152,155,1,0,190,153,154,106,61,154,255,0,136,155,1,0,42,102,255,255,255,153,255,0,104,155,1,0,144,211,180,31,120,180,255,0,88,155,1,0,65,97,223,178,223,138,255,0,64,155,1,0,82,184,160,51,160,44,255,0,200,154,1,0,0,99,251,251,154,153,255,0,136,154,1,0,254,225,227,227,26,28,255,0,104,154,1,0,23,143,253,253,191,111,255,0,80,154,1,0,21,255,255,255,127,0,255,0,56,154,1,0,198,42,214,202,178,214,255,0,40,154,1,0,142,68,227,166,206,227,255,0,16,154,
+1,0,190,153,154,106,61,154,255,0,232,153,1,0,42,102,255,255,255,153,255,0,216,153,1,0,15,197,177,177,89,40,255,0,200,153,1,0,144,211,180,31,120,180,255,0,56,153,1,0,65,97,223,178,223,138,255,0,200,152,1,0,82,184,160,51,160,44,255,0,184,152,1,0,0,99,251,251,154,153,255,0,152,152,1,0,254,225,227,227,26,28,255,0,120,152,1,0,23,143,253,253,191,111,255,0,104,152,1,0,21,255,255,255,127,0,255,0,88,152,1,0,198,42,214,202,178,214,255,0,232,151,1,0,142,68,227,166,206,227,255,0,216,151,1,0,144,211,180,31,120,
+180,255,0,200,151,1,0,65,97,223,178,223,138,255,0,80,151,1,0,142,68,227,166,206,227,255,0,224,150,1,0,144,211,180,31,120,180,255,0,208,150,1,0,65,97,223,178,223,138,255,0,176,150,1,0,82,184,160,51,160,44,255,0,152,150,1,0,142,68,227,166,206,227,255,0,136,150,1,0,144,211,180,31,120,180,255,0,120,150,1,0,65,97,223,178,223,138,255,0,40,150,1,0,82,184,160,51,160,44,255,0,192,149,1,0,0,99,251,251,154,153,255,0,152,149,1,0,142,68,227,166,206,227,255,0,240,148,1,0,144,211,180,31,120,180,255,0,248,147,1,
+0,65,97,223,178,223,138,255,0,208,147,1,0,82,184,160,51,160,44,255,0,184,147,1,0,0,99,251,251,154,153,255,0,136,147,1,0,254,225,227,227,26,28,255,0,104,147,1,0,142,68,227,166,206,227,255,0,72,147,1,0,144,211,180,31,120,180,255,0,200,146,1,0,65,97,223,178,223,138,255,0,184,146,1,0,82,184,160,51,160,44,255,0,168,146,1,0,0,99,251,251,154,153,255,0,88,146,1,0,254,225,227,227,26,28,255,0,200,145,1,0,23,143,253,253,191,111,255,0,184,145,1,0,142,68,227,166,206,227,255,0,128,145,1,0,144,211,180,31,120,180,
+255,0,40,145,1,0,65,97,223,178,223,138,255,0,16,145,1,0,82,184,160,51,160,44,255,0,144,144,1,0,0,99,251,251,154,153,255,0,56,144,1,0,254,225,227,227,26,28,255,0,208,143,1,0,23,143,253,253,191,111,255,0,48,143,1,0,21,255,255,255,127,0,255,0,168,142,1,0,142,68,227,166,206,227,255,0,152,141,1,0,144,211,180,31,120,180,255,0,136,141,1,0,65,97,223,178,223,138,255,0,80,141,1,0,82,184,160,51,160,44,255,0,144,140,1,0,0,99,251,251,154,153,255,0,128,140,1,0,254,225,227,227,26,28,255,0,96,140,1,0,23,143,253,
+253,191,111,255,0,56,140,1,0,21,255,255,255,127,0,255,0,16,140,1,0,198,42,214,202,178,214,255,0,0,140,1,0,3,78,251,251,180,174,255,0,184,139,1,0,146,53,227,179,205,227,255,0,96,139,1,0,77,41,235,204,235,197,255,0,72,139,1,0,3,78,251,251,180,174,255,0,48,139,1,0,146,53,227,179,205,227,255,0,248,138,1,0,77,41,235,204,235,197,255,0,224,138,1,0,202,27,228,222,203,228,255,0,208,138,1,0,3,78,251,251,180,174,255,0,152,138,1,0,146,53,227,179,205,227,255,0,136,138,1,0,77,41,235,204,235,197,255,0,120,138,1,
+0,202,27,228,222,203,228,255,0,240,137,1,0,24,88,254,254,217,166,255,0,160,137,1,0,3,78,251,251,180,174,255,0,144,137,1,0,146,53,227,179,205,227,255,0,120,137,1,0,77,41,235,204,235,197,255,0,24,137,1,0,202,27,228,222,203,228,255,0,8,137,1,0,24,88,254,254,217,166,255,0,248,136,1,0,42,50,255,255,255,204,255,0,192,136,1,0,3,78,251,251,180,174,255,0,176,136,1,0,146,53,227,179,205,227,255,0,160,136,1,0,77,41,235,204,235,197,255,0,80,136,1,0,202,27,228,222,203,228,255,0,8,136,1,0,24,88,254,254,217,166,
+255,0,248,135,1,0,42,50,255,255,255,204,255,0,200,135,1,0,28,44,229,229,216,189,255,0,120,135,1,0,3,78,251,251,180,174,255,0,104,135,1,0,146,53,227,179,205,227,255,0,88,135,1,0,77,41,235,204,235,197,255,0,16,135,1,0,202,27,228,222,203,228,255,0,0,135,1,0,24,88,254,254,217,166,255,0,240,134,1,0,42,50,255,255,255,204,255,0,40,134,1,0,28,44,229,229,216,189,255,0,216,133,1,0,233,35,253,253,218,236,255,0,200,133,1,0,3,78,251,251,180,174,255,0,176,133,1,0,146,53,227,179,205,227,255,0,104,133,1,0,77,41,
+235,204,235,197,255,0,88,133,1,0,202,27,228,222,203,228,255,0,56,133,1,0,24,88,254,254,217,166,255,0,16,133,1,0,42,50,255,255,255,204,255,0,0,133,1,0,28,44,229,229,216,189,255,0,240,132,1,0,233,35,253,253,218,236,255,0,176,132,1,0,0,0,242,242,242,242,255,0,72,132,1,0,108,53,226,179,226,205,255,0,56,132,1,0,17,81,253,253,205,172,255,0,16,132,1,0,155,31,232,203,213,232,255,0,216,131,1,0,108,53,226,179,226,205,255,0,200,131,1,0,17,81,253,253,205,172,255,0,176,131,1,0,155,31,232,203,213,232,255,0,136,
+131,1,0,228,43,244,244,202,228,255,0,120,131,1,0,108,53,226,179,226,205,255,0,104,131,1,0,17,81,253,253,205,172,255,0,16,131,1,0,155,31,232,203,213,232,255,0,176,130,1,0,228,43,244,244,202,228,255,0,160,130,1,0,56,45,245,230,245,201,255,0,128,130,1,0,108,53,226,179,226,205,255,0,56,130,1,0,17,81,253,253,205,172,255,0,40,130,1,0,155,31,232,203,213,232,255,0,24,130,1,0,228,43,244,244,202,228,255,0,216,129,1,0,56,45,245,230,245,201,255,0,200,129,1,0,35,81,255,255,242,174,255,0,184,129,1,0,108,53,226,
+179,226,205,255,0,112,129,1,0,17,81,253,253,205,172,255,0,8,129,1,0,155,31,232,203,213,232,255,0,248,128,1,0,228,43,244,244,202,228,255,0,224,128,1,0,56,45,245,230,245,201,255,0,144,128,1,0,35,81,255,255,242,174,255,0,128,128,1,0,25,39,241,241,226,204,255,0,112,128,1,0,108,53,226,179,226,205,255,0,64,128,1,0,17,81,253,253,205,172,255,0,176,127,1,0,155,31,232,203,213,232,255,0,152,127,1,0,228,43,244,244,202,228,255,0,56,127,1,0,56,45,245,230,245,201,255,0,160,126,1,0,35,81,255,255,242,174,255,0,80,
+126,1,0,25,39,241,241,226,204,255,0,24,126,1,0,0,0,204,204,204,204,255,0,136,125,1,0,230,253,142,142,1,82,255,0,104,125,1,0,77,191,100,39,100,25,255,0,64,125,1,0,230,220,197,197,27,125,255,0,248,124,1,0,232,118,222,222,119,174,255,0,232,124,1,0,229,62,241,241,182,218,255,0,216,124,1,0,233,29,253,253,224,239,255,0,144,124,1,0,59,38,245,230,245,208,255,0,248,123,1,0,61,103,225,184,225,134,255,0,232,123,1,0,63,166,188,127,188,65,255,0,152,123,1,0,68,197,146,77,146,33,255,0,8,123,1,0,230,253,142,142,
+1,82,255,0,112,122,1,0,68,197,146,77,146,33,255,0,80,122,1,0,77,191,100,39,100,25,255,0,248,121,1,0,230,220,197,197,27,125,255,0,104,121,1,0,232,118,222,222,119,174,255,0,168,120,1,0,229,62,241,241,182,218,255,0,64,120,1,0,233,29,253,253,224,239,255,0,208,119,1,0,0,0,247,247,247,247,255,0,160,119,1,0,59,38,245,230,245,208,255,0,80,119,1,0,61,103,225,184,225,134,255,0,8,119,1,0,63,166,188,127,188,65,255,0,248,118,1,0,231,76,233,233,163,201,255,0,208,118,1,0,0,0,247,247,247,247,255,0,144,118,1,0,63,
+129,215,161,215,106,255,0,128,118,1,0,228,220,208,208,28,139,255,0,112,118,1,0,229,62,241,241,182,218,255,0,40,118,1,0,61,103,225,184,225,134,255,0,232,117,1,0,72,198,172,77,172,38,255,0,200,117,1,0,228,220,208,208,28,139,255,0,144,117,1,0,229,62,241,241,182,218,255,0,48,117,1,0,0,0,247,247,247,247,255,0,184,116,1,0,61,103,225,184,225,134,255,0,168,116,1,0,72,198,172,77,172,38,255,0,128,116,1,0,230,220,197,197,27,125,255,0,112,116,1,0,231,76,233,233,163,201,255,0,96,116,1,0,233,29,253,253,224,239,
+255,0,8,116,1,0,59,38,245,230,245,208,255,0,200,115,1,0,63,129,215,161,215,106,255,0,176,115,1,0,68,197,146,77,146,33,255,0,144,115,1,0,230,220,197,197,27,125,255,0,88,115,1,0,231,76,233,233,163,201,255,0,56,115,1,0,233,29,253,253,224,239,255,0,40,115,1,0,0,0,247,247,247,247,255,0,16,115,1,0,59,38,245,230,245,208,255,0,224,114,1,0,63,129,215,161,215,106,255,0,192,114,1,0,68,197,146,77,146,33,255,0,128,114,1,0,230,220,197,197,27,125,255,0,72,114,1,0,232,118,222,222,119,174,255,0,56,114,1,0,229,62,
+241,241,182,218,255,0,0,114,1,0,233,29,253,253,224,239,255,0,112,113,1,0,59,38,245,230,245,208,255,0,96,113,1,0,61,103,225,184,225,134,255,0,80,113,1,0,63,166,188,127,188,65,255,0,32,113,1,0,68,197,146,77,146,33,255,0,248,112,1,0,230,220,197,197,27,125,255,0,232,112,1,0,232,118,222,222,119,174,255,0,160,112,1,0,229,62,241,241,182,218,255,0,120,112,1,0,233,29,253,253,224,239,255,0,96,112,1,0,0,0,247,247,247,247,255,0,40,112,1,0,59,38,245,230,245,208,255,0,248,111,1,0,61,103,225,184,225,134,255,0,232,
+111,1,0,63,166,188,127,188,65,255,0,216,111,1,0,68,197,146,77,146,33,255,0,128,111,1,0,206,255,75,64,0,75,255,0,112,111,1,0,101,255,68,0,68,27,255,0,96,111,1,0,206,173,131,118,42,131,255,0,32,111,1,0,199,87,171,153,112,171,255,0,224,110,1,0,199,51,207,194,165,207,255,0,208,110,1,0,210,21,232,231,212,232,255,0,96,110,1,0,76,30,240,217,240,211,255,0,40,110,1,0,80,68,219,166,219,160,255,0,24,110,1,0,88,123,174,90,174,97,255,0,0,110,1,0,97,197,120,27,120,55,255,0,192,109,1,0,206,255,75,64,0,75,255,0,
+176,109,1,0,97,197,120,27,120,55,255,0,160,109,1,0,101,255,68,0,68,27,255,0,56,109,1,0,206,173,131,118,42,131,255,0,0,109,1,0,199,87,171,153,112,171,255,0,224,108,1,0,199,51,207,194,165,207,255,0,184,108,1,0,210,21,232,231,212,232,255,0,72,108,1,0,0,0,247,247,247,247,255,0,56,108,1,0,76,30,240,217,240,211,255,0,40,108,1,0,80,68,219,166,219,160,255,0,208,107,1,0,88,123,174,90,174,97,255,0,192,107,1,0,196,70,195,175,141,195,255,0,176,107,1,0,0,0,247,247,247,247,255,0,96,107,1,0,82,90,191,127,191,123,
+255,0,16,107,1,0,201,168,148,123,50,148,255,0,0,107,1,0,199,51,207,194,165,207,255,0,216,106,1,0,80,68,219,166,219,160,255,0,136,106,1,0,102,255,136,0,136,55,255,0,120,106,1,0,201,168,148,123,50,148,255,0,104,106,1,0,199,51,207,194,165,207,255,0,40,106,1,0,0,0,247,247,247,247,255,0,8,106,1,0,80,68,219,166,219,160,255,0,216,105,1,0,102,255,136,0,136,55,255,0,144,105,1,0,206,173,131,118,42,131,255,0,32,105,1,0,196,70,195,175,141,195,255,0,152,104,1,0,210,21,232,231,212,232,255,0,112,104,1,0,76,30,240,
+217,240,211,255,0,208,103,1,0,82,90,191,127,191,123,255,0,192,103,1,0,97,197,120,27,120,55,255,0,168,103,1,0,206,173,131,118,42,131,255,0,112,103,1,0,196,70,195,175,141,195,255,0,96,103,1,0,210,21,232,231,212,232,255,0,80,103,1,0,0,0,247,247,247,247,255,0,16,103,1,0,76,30,240,217,240,211,255,0,112,102,1,0,82,90,191,127,191,123,255,0,96,102,1,0,97,197,120,27,120,55,255,0,40,102,1,0,206,173,131,118,42,131,255,0,176,101,1,0,199,87,171,153,112,171,255,0,144,101,1,0,199,51,207,194,165,207,255,0,8,101,
+1,0,210,21,232,231,212,232,255,0,232,100,1,0,76,30,240,217,240,211,255,0,120,100,1,0,80,68,219,166,219,160,255,0,0,100,1,0,88,123,174,90,174,97,255,0,184,99,1,0,97,197,120,27,120,55,255,0,88,99,1,0,206,173,131,118,42,131,255,0,72,99,1,0,199,87,171,153,112,171,255,0,248,98,1,0,199,51,207,194,165,207,255,0,136,98,1,0,210,21,232,231,212,232,255,0,120,98,1,0,0,0,247,247,247,247,255,0,80,98,1,0,76,30,240,217,240,211,255,0,40,98,1,0,80,68,219,166,219,160,255,0,8,98,1,0,88,123,174,90,174,97,255,0,248,97,
+1,0,97,197,120,27,120,55,255,0,192,97,1,0,189,11,242,236,231,242,255,0,112,97,1,0,151,61,219,166,189,219,255,0,80,97,1,0,141,197,190,43,140,190,255,0,48,97,1,0,185,8,246,241,238,246,255,0,168,96,1,0,155,40,225,189,201,225,255,0,144,96,1,0,145,112,207,116,169,207,255,0,248,95,1,0,143,247,176,5,112,176,255,0,208,95,1,0,185,8,246,241,238,246,255,0,192,95,1,0,155,40,225,189,201,225,255,0,176,95,1,0,145,112,207,116,169,207,255,0,112,95,1,0,141,197,190,43,140,190,255,0,24,95,1,0,143,247,141,4,90,141,255,
+0,8,95,1,0,185,8,246,241,238,246,255,0,216,94,1,0,168,24,230,208,209,230,255,0,120,94,1,0,151,61,219,166,189,219,255,0,104,94,1,0,145,112,207,116,169,207,255,0,72,94,1,0,141,197,190,43,140,190,255,0,232,93,1,0,143,247,141,4,90,141,255,0,216,93,1,0,185,8,246,241,238,246,255,0,168,93,1,0,168,24,230,208,209,230,255,0,72,93,1,0,151,61,219,166,189,219,255,0,8,93,1,0,145,112,207,116,169,207,255,0,248,92,1,0,142,183,192,54,144,192,255,0,216,92,1,0,143,247,176,5,112,176,255,0,160,92,1,0,143,248,123,3,78,
+123,255,0,144,92,1,0,233,8,255,255,247,251,255,0,128,92,1,0,189,11,242,236,231,242,255,0,64,92,1,0,168,24,230,208,209,230,255,0,48,92,1,0,151,61,219,166,189,219,255,0,8,92,1,0,145,112,207,116,169,207,255,0,192,91,1,0,142,183,192,54,144,192,255,0,120,91,1,0,143,247,176,5,112,176,255,0,104,91,1,0,143,248,123,3,78,123,255,0,56,91,1,0,233,8,255,255,247,251,255,0,40,91,1,0,189,11,242,236,231,242,255,0,176,90,1,0,168,24,230,208,209,230,255,0,160,90,1,0,151,61,219,166,189,219,255,0,104,90,1,0,145,112,207,
+116,169,207,255,0,72,90,1,0,142,183,192,54,144,192,255,0,56,90,1,0,143,247,176,5,112,176,255,0,240,89,1,0,143,247,141,4,90,141,255,0,168,89,1,0,143,249,88,2,56,88,255,0,152,89,1,0,200,14,240,236,226,240,255,0,120,89,1,0,151,61,219,166,189,219,255,0,104,89,1,0,130,208,153,28,144,153,255,0,40,89,1,0,207,8,247,246,239,247,255,0,8,89,1,0,155,40,225,189,201,225,255,0,152,88,1,0,143,128,207,103,169,207,255,0,136,88,1,0,130,251,138,2,129,138,255,0,120,88,1,0,207,8,247,246,239,247,255,0,56,88,1,0,155,40,
+225,189,201,225,255,0,8,88,1,0,143,128,207,103,169,207,255,0,248,87,1,0,130,208,153,28,144,153,255,0,224,87,1,0,119,252,108,1,108,89,255,0,208,87,1,0,207,8,247,246,239,247,255,0,72,87,1,0,168,24,230,208,209,230,255,0,56,87,1,0,151,61,219,166,189,219,255,0,232,86,1,0,143,128,207,103,169,207,255,0,216,86,1,0,130,208,153,28,144,153,255,0,200,86,1,0,119,252,108,1,108,89,255,0,136,86,1,0,207,8,247,246,239,247,255,0,40,86,1,0,168,24,230,208,209,230,255,0,24,86,1,0,151,61,219,166,189,219,255,0,0,86,1,0,
+143,128,207,103,169,207,255,0,240,85,1,0,142,183,192,54,144,192,255,0,176,85,1,0,130,251,138,2,129,138,255,0,160,85,1,0,118,252,100,1,100,80,255,0,48,85,1,0,233,8,255,255,247,251,255,0,0,85,1,0,200,14,240,236,226,240,255,0,232,84,1,0,168,24,230,208,209,230,255,0,136,84,1,0,151,61,219,166,189,219,255,0,64,84,1,0,143,128,207,103,169,207,255,0,16,84,1,0,142,183,192,54,144,192,255,0,240,83,1,0,130,251,138,2,129,138,255,0,216,83,1,0,118,252,100,1,100,80,255,0,72,83,1,0,233,8,255,255,247,251,255,0,40,83,
+1,0,200,14,240,236,226,240,255,0,0,83,1,0,168,24,230,208,209,230,255,0,240,82,1,0,151,61,219,166,189,219,255,0,176,82,1,0,143,128,207,103,169,207,255,0,112,82,1,0,142,183,192,54,144,192,255,0,16,82,1,0,130,251,138,2,129,138,255,0,0,82,1,0,119,252,108,1,108,89,255,0,160,81,1,0,117,251,70,1,70,54,255,0,136,81,1,0,18,238,127,127,59,8,255,0,8,81,1,0,195,255,75,45,0,75,255,0,208,80,1,0,20,246,179,179,88,6,255,0,128,80,1,0,22,232,224,224,130,20,255,0,56,80,1,0,23,155,253,253,184,99,255,0,104,79,1,0,24,
+72,254,254,224,182,255,0,16,79,1,0,165,20,235,216,218,235,255,0,184,78,1,0,177,47,210,178,171,210,255,0,168,78,1,0,179,84,172,128,115,172,255,0,88,78,1,0,189,181,136,84,39,136,255,0,72,78,1,0,18,238,127,127,59,8,255,0,248,77,1,0,189,181,136,84,39,136,255,0,208,77,1,0,195,255,75,45,0,75,255,0,176,77,1,0,20,246,179,179,88,6,255,0,160,77,1,0,22,232,224,224,130,20,255,0,144,77,1,0,23,155,253,253,184,99,255,0,88,77,1,0,24,72,254,254,224,182,255,0,8,77,1,0,0,0,247,247,247,247,255,0,240,76,1,0,165,20,235,
+216,218,235,255,0,216,76,1,0,177,47,210,178,171,210,255,0,200,76,1,0,179,84,172,128,115,172,255,0,144,76,1,0,23,187,241,241,163,64,255,0,104,76,1,0,0,0,247,247,247,247,255,0,224,75,1,0,178,69,195,153,142,195,255,0,208,75,1,0,17,253,230,230,97,1,255,0,192,75,1,0,23,155,253,253,184,99,255,0,144,75,1,0,177,47,210,178,171,210,255,0,64,75,1,0,185,155,153,94,60,153,255,0,48,75,1,0,17,253,230,230,97,1,255,0,16,75,1,0,23,155,253,253,184,99,255,0,248,74,1,0,0,0,247,247,247,247,255,0,224,74,1,0,177,47,210,
+178,171,210,255,0,208,74,1,0,185,155,153,94,60,153,255,0,168,74,1,0,20,246,179,179,88,6,255,0,152,74,1,0,23,187,241,241,163,64,255,0,104,74,1,0,24,72,254,254,224,182,255,0,40,74,1,0,165,20,235,216,218,235,255,0,176,73,1,0,178,69,195,153,142,195,255,0,160,73,1,0,189,181,136,84,39,136,255,0,136,73,1,0,20,246,179,179,88,6,255,0,120,73,1,0,23,187,241,241,163,64,255,0,8,73,1,0,24,72,254,254,224,182,255,0,248,72,1,0,0,0,247,247,247,247,255,0,216,72,1,0,165,20,235,216,218,235,255,0,200,72,1,0,178,69,195,
+153,142,195,255,0,184,72,1,0,189,181,136,84,39,136,255,0,96,72,1,0,20,246,179,179,88,6,255,0,16,72,1,0,22,232,224,224,130,20,255,0,0,72,1,0,23,155,253,253,184,99,255,0,176,71,1,0,24,72,254,254,224,182,255,0,128,71,1,0,165,20,235,216,218,235,255,0,112,71,1,0,177,47,210,178,171,210,255,0,96,71,1,0,179,84,172,128,115,172,255,0,56,71,1,0,189,181,136,84,39,136,255,0,40,71,1,0,20,246,179,179,88,6,255,0,0,71,1,0,22,232,224,224,130,20,255,0,216,70,1,0,23,155,253,253,184,99,255,0,152,70,1,0,24,72,254,254,
+224,182,255,0,136,70,1,0,0,0,247,247,247,247,255,0,72,70,1,0,165,20,235,216,218,235,255,0,56,70,1,0,177,47,210,178,171,210,255,0,240,69,1,0,179,84,172,128,115,172,255,0,216,69,1,0,189,181,136,84,39,136,255,0,184,69,1,0,188,14,239,231,225,239,255,0,168,69,1,0,214,67,201,201,148,199,255,0,152,69,1,0,234,222,221,221,28,119,255,0,64,69,1,0,185,8,246,241,238,246,255,0,248,68,1,0,211,41,216,215,181,216,255,0,232,68,1,0,228,139,223,223,101,176,255,0,160,68,1,0,239,232,206,206,18,86,255,0,144,68,1,0,185,
+8,246,241,238,246,255,0,96,68,1,0,211,41,216,215,181,216,255,0,56,68,1,0,228,139,223,223,101,176,255],"i8",L,l.J+40977);D([68,1,0,234,222,221,221,28,119,255,0,240,67,1,0,236,255,152,152,0,67,255,0,224,67,1,0,185,8,246,241,238,246,255,0,176,67,1,0,204,38,218,212,185,218,255,0,88,67,1,0,214,67,201,201,148,199,255,0,72,67,1,0,228,139,223,223,101,176,255,0,0,67,1,0,234,222,221,221,28,119,255,0,240,66,1,0,236,255,152,152,0,67,255,0,208,66,1,0,185,8,246,241,238,246,255,0,192,66,1,0,204,38,218,212,185,218,
+255,0,160,66,1,0,214,67,201,201,148,199,255,0,136,66,1,0,228,139,223,223,101,176,255,0,104,66,1,0,233,209,231,231,41,138,255,0,40,66,1,0,239,232,206,206,18,86,255,0,176,65,1,0,236,255,145,145,0,63,255,0,128,65,1,0,195,5,249,247,244,249,255,0,8,65,1,0,188,14,239,231,225,239,255,0,240,64,1,0,204,38,218,212,185,218,255,0,168,64,1,0,214,67,201,201,148,199,255,0,104,64,1,0,228,139,223,223,101,176,255,0,72,64,1,0,233,209,231,231,41,138,255,0,56,64,1,0,239,232,206,206,18,86,255,0,40,64,1,0,236,255,145,145,
+0,63,255,0,240,63,1,0,195,5,249,247,244,249,255,0,96,63,1,0,188,14,239,231,225,239,255,0,80,63,1,0,204,38,218,212,185,218,255,0,208,62,1,0,214,67,201,201,148,199,255,0,184,62,1,0,228,139,223,223,101,176,255,0,160,62,1,0,233,209,231,231,41,138,255,0,80,62,1,0,239,232,206,206,18,86,255,0,32,62,1,0,236,255,152,152,0,67,255,0,192,61,1,0,242,255,103,103,0,31,255,0,104,61,1,0,180,8,245,239,237,245,255,0,40,61,1,0,168,37,220,188,189,220,255,0,176,60,1,0,176,100,177,117,107,177,255,0,160,60,1,0,182,7,247,
+242,240,247,255,0,8,60,1,0,173,28,226,203,201,226,255,0,240,59,1,0,173,58,200,158,154,200,255,0,224,59,1,0,182,128,163,106,81,163,255,0,176,59,1,0,182,7,247,242,240,247,255,0,144,59,1,0,173,28,226,203,201,226,255,0,128,59,1,0,173,58,200,158,154,200,255,0,112,59,1,0,176,100,177,117,107,177,255,0,240,58,1,0,188,185,143,84,39,143,255,0,128,58,1,0,182,7,247,242,240,247,255,0,104,58,1,0,170,18,235,218,218,235,255,0,64,58,1,0,168,37,220,188,189,220,255,0,48,58,1,0,173,58,200,158,154,200,255,0,32,58,1,0,
+176,100,177,117,107,177,255,0,0,58,1,0,188,185,143,84,39,143,255,0,216,57,1,0,182,7,247,242,240,247,255,0,160,57,1,0,170,18,235,218,218,235,255,0,144,57,1,0,168,37,220,188,189,220,255,0,56,57,1,0,173,58,200,158,154,200,255,0,224,56,1,0,172,83,186,128,125,186,255,0,208,56,1,0,182,128,163,106,81,163,255,0,184,56,1,0,190,216,134,74,20,134,255,0,168,56,1,0,191,2,253,252,251,253,255,0,144,56,1,0,180,8,245,239,237,245,255,0,128,56,1,0,170,18,235,218,218,235,255,0,96,56,1,0,168,37,220,188,189,220,255,0,
+80,56,1,0,173,58,200,158,154,200,255,0,64,56,1,0,172,83,186,128,125,186,255,0,8,56,1,0,182,128,163,106,81,163,255,0,120,55,1,0,190,216,134,74,20,134,255,0,104,55,1,0,191,2,253,252,251,253,255,0,16,55,1,0,180,8,245,239,237,245,255,0,0,55,1,0,170,18,235,218,218,235,255,0,240,54,1,0,168,37,220,188,189,220,255,0,224,54,1,0,173,58,200,158,154,200,255,0,192,54,1,0,172,83,186,128,125,186,255,0,176,54,1,0,182,128,163,106,81,163,255,0,160,54,1,0,188,185,143,84,39,143,255,0,80,54,1,0,191,255,125,63,0,125,255,
+0,216,53,1,0,242,255,103,103,0,31,255,0,200,53,1,0,150,241,97,5,48,97,255,0,176,53,1,0,249,220,178,178,24,43,255,0,160,53,1,0,5,163,214,214,96,77,255,0,136,53,1,0,13,119,244,244,165,130,255,0,120,53,1,0,15,54,253,253,219,199,255,0,88,53,1,0,142,32,240,209,229,240,255,0,72,53,1,0,141,87,222,146,197,222,255,0,56,53,1,0,143,167,195,67,147,195,255,0,24,53,1,0,148,206,172,33,102,172,255,0,208,52,1,0,242,255,103,103,0,31,255,0,192,52,1,0,148,206,172,33,102,172,255,0,160,52,1,0,150,241,97,5,48,97,255,0,
+144,52,1,0,249,220,178,178,24,43,255,0,128,52,1,0,5,163,214,214,96,77,255,0,104,52,1,0,13,119,244,244,165,130,255,0,72,52,1,0,15,54,253,253,219,199,255,0,56,52,1,0,0,0,247,247,247,247,255,0,40,52,1,0,142,32,240,209,229,240,255,0,0,52,1,0,141,87,222,146,197,222,255,0,192,51,1,0,143,167,195,67,147,195,255,0,176,51,1,0,12,150,239,239,138,98,255,0,136,51,1,0,0,0,247,247,247,247,255,0,120,51,1,0,143,128,207,103,169,207,255,0,104,51,1,0,248,255,202,202,0,32,255,0,88,51,1,0,13,119,244,244,165,130,255,0,
+232,147,2,0,141,87,222,146,197,222,255,0,216,147,2,0,143,247,176,5,113,176,255,0,200,147,2,0,248,255,202,202,0,32,255,0,152,147,2,0,13,119,244,244,165,130,255,0,56,147,2,0,0,0,247,247,247,247,255,0,40,147,2,0,141,87,222,146,197,222,255,0,240,146,2,0,143,247,176,5,113,176,255,0,224,146,2,0,249,220,178,178,24,43,255,0,208,146,2,0,12,150,239,239,138,98,255,0,192,146,2,0,15,54,253,253,219,199,255,0,160,146,2,0,142,32,240,209,229,240,255,0,128,146,2,0,143,128,207,103,169,207,255,0,104,146,2,0,148,206,
+172,33,102,172,255,0,56,146,2,0,249,220,178,178,24,43,255,0,200,145,2,0,12,150,239,239,138,98,255,0,168,145,2,0,15,54,253,253,219,199,255,0,120,145,2,0,0,0,247,247,247,247,255,0,96,145,2,0,142,32,240,209,229,240,255,0,80,145,2,0,143,128,207,103,169,207,255,0,48,145,2,0,148,206,172,33,102,172,255,0,16,145,2,0,249,220,178,178,24,43,255,0,0,145,2,0,5,163,214,214,96,77,255,0,240,144,2,0,13,119,244,244,165,130,255,0,184,144,2,0,15,54,253,253,219,199,255,0,72,144,2,0,142,32,240,209,229,240,255,0,56,144,
+2,0,141,87,222,146,197,222,255,0,224,143,2,0,143,167,195,67,147,195,255,0,168,143,2,0,148,206,172,33,102,172,255,0,144,143,2,0,249,220,178,178,24,43,255,0,112,143,2,0,5,163,214,214,96,77,255,0,8,143,2,0,13,119,244,244,165,130,255,0,192,142,2,0,15,54,253,253,219,199,255,0,24,142,2,0,0,0,247,247,247,247,255,0,224,141,2,0,142,32,240,209,229,240,255,0,104,141,2,0,141,87,222,146,197,222,255,0,88,141,2,0,143,167,195,67,147,195,255,0,240,140,2,0,148,206,172,33,102,172,255,0,192,140,2,0,242,255,103,103,0,
+31,255,0,160,140,2,0,0,0,26,26,26,26,255,0,128,140,2,0,249,220,178,178,24,43,255,0,96,140,2,0,5,163,214,214,96,77,255,0,80,140,2,0,13,119,244,244,165,130,255,0,64,140,2,0,15,54,253,253,219,199,255,0,32,140,2,0,0,0,224,224,224,224,255,0,144,139,2,0,0,0,186,186,186,186,255,0,120,139,2,0,0,0,135,135,135,135,255,0,56,139,2,0,0,0,77,77,77,77,255,0,40,139,2,0,242,255,103,103,0,31,255,0,24,139,2,0,0,0,77,77,77,77,255,0,248,138,2,0,0,0,26,26,26,26,255,0,208,138,2,0,249,220,178,178,24,43,255,0,184,138,2,0,
+5,163,214,214,96,77,255,0,144,138,2,0,13,119,244,244,165,130,255,0,96,138,2,0,15,54,253,253,219,199,255,0,224,137,2,0,0,0,255,255,255,255,255,0,208,137,2,0,0,0,224,224,224,224,255,0,168,137,2,0,0,0,186,186,186,186,255,0,152,137,2,0,0,0,135,135,135,135,255,0,136,137,2,0,12,150,239,239,138,98,255,0,112,137,2,0,0,0,255,255,255,255,255,0,80,137,2,0,0,0,153,153,153,153,255,0,64,137,2,0,248,255,202,202,0,32,255,0,48,137,2,0,13,119,244,244,165,130,255,0,8,137,2,0,0,0,186,186,186,186,255,0,96,136,2,0,0,0,
+64,64,64,64,255,0,80,136,2,0,248,255,202,202,0,32,255,0,40,136,2,0,13,119,244,244,165,130,255,0,24,136,2,0,0,0,255,255,255,255,255,0,8,136,2,0,0,0,186,186,186,186,255,0,248,135,2,0,0,0,64,64,64,64,255,0,216,135,2,0,249,220,178,178,24,43,255,0,200,135,2,0,12,150,239,239,138,98,255,0,184,135,2,0,15,54,253,253,219,199,255,0,136,135,2,0,0,0,224,224,224,224,255,0,56,135,2,0,0,0,153,153,153,153,255,0,40,135,2,0,0,0,77,77,77,77,255,0,232,134,2,0,249,220,178,178,24,43,255,0,216,134,2,0,12,150,239,239,138,
+98,255,0,200,134,2,0,15,54,253,253,219,199,255,0,176,134,2,0,0,0,255,255,255,255,255,0,144,134,2,0,0,0,224,224,224,224,255,0,128,134,2,0,0,0,153,153,153,153,255,0,112,134,2,0,0,0,77,77,77,77,255,0,72,134,2,0,249,220,178,178,24,43,255,0,16,134,2,0,5,163,214,214,96,77,255,0,0,134,2,0,13,119,244,244,165,130,255,0,184,133,2,0,15,54,253,253,219,199,255,0,168,133,2,0,0,0,224,224,224,224,255,0,152,133,2,0,0,0,186,186,186,186,255,0,120,133,2,0,0,0,135,135,135,135,255,0,88,133,2,0,0,0,77,77,77,77,255,0,72,
+133,2,0,249,220,178,178,24,43,255,0,56,133,2,0,5,163,214,214,96,77,255,0,248,132,2,0,13,119,244,244,165,130,255,0,184,132,2,0,15,54,253,253,219,199,255,0,168,132,2,0,0,0,255,255,255,255,255,0,72,132,2,0,0,0,224,224,224,224,255,0,56,132,2,0,0,0,186,186,186,186,255,0,40,132,2,0,0,0,135,135,135,135,255,0,24,132,2,0,0,0,77,77,77,77,255,0,208,131,2,0,3,32,253,253,224,221,255,0,192,131,2,0,244,92,250,250,159,181,255,0,176,131,2,0,227,220,197,197,27,138,255,0,136,131,2,0,13,28,254,254,235,226,255,0,72,131,
+2,0,252,72,251,251,180,185,255,0,56,131,2,0,238,147,247,247,104,161,255,0,216,130,2,0,224,253,174,174,1,126,255,0,200,130,2,0,13,28,254,254,235,226,255,0,184,130,2,0,252,72,251,251,180,185,255,0,168,130,2,0,238,147,247,247,104,161,255,0,136,130,2,0,227,220,197,197,27,138,255,0,72,130,2,0,213,252,122,122,1,119,255,0,56,130,2,0,13,28,254,254,235,226,255,0,224,129,2,0,3,60,252,252,197,192,255,0,152,129,2,0,244,92,250,250,159,181,255,0,120,129,2,0,238,147,247,247,104,161,255,0,88,129,2,0,227,220,197,
+197,27,138,255,0,56,129,2,0,213,252,122,122,1,119,255,0,40,129,2,0,13,28,254,254,235,226,255,0,8,129,2,0,3,60,252,252,197,192,255,0,232,128,2,0,244,92,250,250,159,181,255,0,200,128,2,0,238,147,247,247,104,161,255,0,184,128,2,0,230,195,221,221,52,151,255,0,128,128,2,0,224,253,174,174,1,126,255,0,16,128,2,0,213,252,122,122,1,119,255,0,0,128,2,0,14,12,255,255,247,243,255,0,144,127,2,0,3,32,253,253,224,221,255,0,88,127,2,0,3,60,252,252,197,192,255,0,64,127,2,0,244,92,250,250,159,181,255,0,32,127,2,0,
+238,147,247,247,104,161,255,0,232,126,2,0,230,195,221,221,52,151,255,0,136,126,2,0,224,253,174,174,1,126,255,0,216,125,2,0,213,252,122,122,1,119,255,0,40,125,2,0,14,12,255,255,247,243,255,0,248,124,2,0,3,32,253,253,224,221,255,0,232,124,2,0,3,60,252,252,197,192,255,0,128,124,2,0,244,92,250,250,159,181,255,0,112,124,2,0,238,147,247,247,104,161,255,0,96,124,2,0,230,195,221,221,52,151,255,0,48,124,2,0,224,253,174,174,1,126,255,0,0,124,2,0,213,252,122,122,1,119,255,0,240,123,2,0,199,255,106,73,0,106,
+255,0,224,123,2,0,245,255,165,165,0,38,255,0,184,123,2,0,167,171,149,49,54,149,255,0,104,123,2,0,2,208,215,215,48,39,255,0,72,123,2,0,10,184,244,244,109,67,255,0,0,123,2,0,20,157,253,253,174,97,255,0,240,122,2,0,30,110,254,254,224,144,255,0,224,122,2,0,136,24,248,224,243,248,255,0,200,122,2,0,138,67,233,171,217,233,255,0,168,122,2,0,143,113,209,116,173,209,255,0,144,122,2,0,151,157,180,69,117,180,255,0,120,122,2,0,245,255,165,165,0,38,255,0,88,122,2,0,151,157,180,69,117,180,255,0,8,122,2,0,167,171,
+149,49,54,149,255,0,248,121,2,0,2,208,215,215,48,39,255,0,200,121,2,0,10,184,244,244,109,67,255,0,184,121,2,0,20,157,253,253,174,97,255,0,168,121,2,0,30,110,254,254,224,144,255,0,152,121,2,0,42,64,255,255,255,191,255,0,64,121,2,0,136,24,248,224,243,248,255,0,48,121,2,0,138,67,233,171,217,233,255,0,32,121,2,0,143,113,209,116,173,209,255,0,0,121,2,0,13,164,252,252,141,89,255,0,168,120,2,0,42,64,255,255,255,191,255,0,152,120,2,0,143,86,219,145,191,219,255,0,88,120,2,0,254,225,215,215,25,28,255,0,72,
+120,2,0,20,157,253,253,174,97,255,0,56,120,2,0,138,67,233,171,217,233,255,0,40,120,2,0,145,193,182,44,123,182,255,0,24,120,2,0,254,225,215,215,25,28,255,0,8,120,2,0,20,157,253,253,174,97,255,0,232,119,2,0,42,64,255,255,255,191,255,0,160,119,2,0,138,67,233,171,217,233,255,0,88,119,2,0,145,193,182,44,123,182,255,0,72,119,2,0,2,208,215,215,48,39,255,0,40,119,2,0,13,164,252,252,141,89,255,0,8,119,2,0,30,110,254,254,224,144,255,0,240,118,2,0,136,24,248,224,243,248,255,0,224,118,2,0,143,86,219,145,191,
+219,255,0,184,118,2,0,151,157,180,69,117,180,255,0,168,118,2,0,2,208,215,215,48,39,255,0,152,118,2,0,13,164,252,252,141,89,255,0,64,118,2,0,30,110,254,254,224,144,255,0,0,118,2,0,42,64,255,255,255,191,255,0,240,117,2,0,136,24,248,224,243,248,255,0,208,117,2,0,143,86,219,145,191,219,255,0,192,117,2,0,151,157,180,69,117,180,255,0,176,117,2,0,2,208,215,215,48,39,255,0,160,117,2,0,10,184,244,244,109,67,255,0,112,117,2,0,20,157,253,253,174,97,255,0,96,117,2,0,30,110,254,254,224,144,255,0,64,117,2,0,136,
+24,248,224,243,248,255,0,0,117,2,0,138,67,233,171,217,233,255,0,200,116,2,0,143,113,209,116,173,209,255,0,184,116,2,0,151,157,180,69,117,180,255,0,136,116,2,0,2,208,215,215,48,39,255,0,120,116,2,0,10,184,244,244,109,67,255,0,104,116,2,0,20,157,253,253,174,97,255,0,88,116,2,0,30,110,254,254,224,144,255,0,32,116,2,0,42,64,255,255,255,191,255,0,16,116,2,0,136,24,248,224,243,248,255,0,0,116,2,0,138,67,233,171,217,233,255,0,216,115,2,0,143,113,209,116,173,209,255,0,160,115,2,0,151,157,180,69,117,180,255,
+0,144,115,2,0,245,255,165,165,0,38,255,0,72,115,2,0,107,255,104,0,104,55,255,0,56,115,2,0,2,208,215,215,48,39,255,0,40,115,2,0,10,184,244,244,109,67,255,0,24,115,2,0,20,157,253,253,174,97,255,0,248,114,2,0,31,115,254,254,224,139,255,0,176,114,2,0,51,106,239,217,239,139,255,0,160,114,2,0,62,130,217,166,217,106,255,0,88,114,2,0,83,121,189,102,189,99,255,0,40,114,2,0,103,211,152,26,152,80,255,0,8,114,2,0,245,255,165,165,0,38,255,0,192,113,2,0,103,211,152,26,152,80,255,0,96,113,2,0,107,255,104,0,104,
+55,255,0,80,113,2,0,2,208,215,215,48,39,255,0,40,113,2,0,10,184,244,244,109,67,255,0,24,113,2,0,20,157,253,253,174,97,255,0,8,113,2,0,31,115,254,254,224,139,255,0,216,112,2,0,42,64,255,255,255,191,255,0,104,112,2,0,51,106,239,217,239,139,255,0,32,112,2,0,62,130,217,166,217,106,255,0,16,112,2,0,83,121,189,102,189,99,255,0,216,111,2,0,13,164,252,252,141,89,255,0,176,111,2,0,42,64,255,255,255,191,255,0,152,111,2,0,66,136,207,145,207,96,255,0,32,111,2,0,254,225,215,215,25,28,255,0,240,110,2,0,20,157,
+253,253,174,97,255,0,152,110,2,0,62,130,217,166,217,106,255,0,56,110,2,0,98,210,150,26,150,65,255,0,152,109,2,0,254,225,215,215,25,28,255,0,56,109,2,0,20,157,253,253,174,97,255,0,24,109,2,0,42,64,255,255,255,191,255,0,240,108,2,0,62,130,217,166,217,106,255,0,216,108,2,0,98,210,150,26,150,65,255,0,200,108,2,0,2,208,215,215,48,39,255,0,184,108,2,0,13,164,252,252,141,89,255,0,136,108,2,0,31,115,254,254,224,139,255,0,120,108,2,0,51,106,239,217,239,139,255,0,104,108,2,0,66,136,207,145,207,96,255,0,80,
+108,2,0,103,211,152,26,152,80,255,0,24,108,2,0,2,208,215,215,48,39,255,0,0,108,2,0,13,164,252,252,141,89,255,0,240,107,2,0,31,115,254,254,224,139,255,0,216,107,2,0,42,64,255,255,255,191,255,0,200,107,2,0,51,106,239,217,239,139,255,0,176,107,2,0,66,136,207,145,207,96,255,0,88,107,2,0,103,211,152,26,152,80,255,0,72,107,2,0,2,208,215,215,48,39,255,0,40,107,2,0,10,184,244,244,109,67,255,0,16,107,2,0,20,157,253,253,174,97,255,0,200,106,2,0,31,115,254,254,224,139,255,0,184,106,2,0,51,106,239,217,239,139,
+255,0,160,106,2,0,62,130,217,166,217,106,255,0,128,106,2,0,83,121,189,102,189,99,255,0,112,106,2,0,103,211,152,26,152,80,255,0,96,106,2,0,2,208,215,215,48,39,255,0,64,106,2,0,10,184,244,244,109,67,255,0,40,106,2,0,20,157,253,253,174,97,255,0,24,106,2,0,31,115,254,254,224,139,255,0,248,105,2,0,42,64,255,255,255,191,255,0,168,105,2,0,51,106,239,217,239,139,255,0,152,105,2,0,62,130,217,166,217,106,255,0,120,105,2,0,83,121,189,102,189,99,255,0,96,105,2,0,103,211,152,26,152,80,255,0,80,105,2,0,13,44,254,
+254,224,210,255,0,64,105,2,0,9,139,252,252,146,114,255,0,32,105,2,0,1,211,222,222,45,38,255,0,8,105,2,0,13,37,254,254,229,217,255,0,184,104,2,0,11,108,252,252,174,145,255,0,152,104,2,0,7,179,251,251,106,74,255,0,104,104,2,0,253,224,203,203,24,29,255,0,88,104,2,0,13,37,254,254,229,217,255,0,72,104,2,0,11,108,252,252,174,145,255,0,16,104,2,0,7,179,251,251,106,74,255,0,0,104,2,0,1,211,222,222,45,38,255,0,240,103,2,0,253,231,165,165,15,21,255,0,152,103,2,0,13,37,254,254,229,217,255,0,56,103,2,0,12,92,
+252,252,187,161,255,0,248,102,2,0,9,139,252,252,146,114,255,0,104,102,2,0,7,179,251,251,106,74,255,0,56,102,2,0,1,211,222,222,45,38,255,0,40,102,2,0,253,231,165,165,15,21,255,0,24,102,2,0,13,37,254,254,229,217,255,0,184,101,2,0,12,92,252,252,187,161,255,0,168,101,2,0,9,139,252,252,146,114,255,0,152,101,2,0,7,179,251,251,106,74,255,0,104,101,2,0,3,208,239,239,59,44,255,0,88,101,2,0,253,224,203,203,24,29,255,0,72,101,2,0,251,255,153,153,0,13,255,0,40,101,2,0,14,15,255,255,245,240,255,0,208,100,2,0,
+13,44,254,254,224,210,255,0,192,100,2,0,12,92,252,252,187,161,255,0,176,100,2,0,9,139,252,252,146,114,255,0,120,100,2,0,7,179,251,251,106,74,255,0,104,100,2,0,3,208,239,239,59,44,255,0,80,100,2,0,253,224,203,203,24,29,255,0,16,100,2,0,251,255,153,153,0,13,255,0,0,100,2,0,14,15,255,255,245,240,255,0,216,99,2,0,13,44,254,254,224,210,255,0,192,99,2,0,12,92,252,252,187,161,255,0,128,99,2,0,9,139,252,252,146,114,255,0,112,99,2,0,7,179,251,251,106,74,255,0,96,99,2,0,3,208,239,239,59,44,255,0,16,99,2,0,
+253,224,203,203,24,29,255,0,248,98,2,0,253,231,165,165,15,21,255,0,232,98,2,0,249,255,103,103,0,13,255,0,216,98,2,0,254,225,228,228,26,28,255,0,176,98,2,0,146,178,184,55,126,184,255,0,96,95,2,0,83,147,175,77,175,74,255,0,64,95,2,0,254,225,228,228,26,28,255,0,176,94,2,0,146,178,184,55,126,184,255,0,96,94,2,0,83,147,175,77,175,74,255,0,24,94,2,0,207,132,163,152,78,163,255,0,200,93,2,0,254,225,228,228,26,28,255,0,168,93,2,0,146,178,184,55,126,184,255,0,144,93,2,0,83,147,175,77,175,74,255,0,112,93,2,
+0,207,132,163,152,78,163,255,0,88,93,2,0,21,255,255,255,127,0,255,0,72,93,2,0,254,225,228,228,26,28,255,0,240,92,2,0,146,178,184,55,126,184,255,0,184,92,2,0,83,147,175,77,175,74,255,0,152,92,2,0,207,132,163,152,78,163,255,0,96,92,2,0,21,255,255,255,127,0,255,0,32,92,2,0,42,204,255,255,255,51,255,0,8,92,2,0,254,225,228,228,26,28,255,0,176,91,2,0,146,178,184,55,126,184,255,0,88,91,2,0,83,147,175,77,175,74,255,0,200,90,2,0,207,132,163,152,78,163,255,0,104,90,2,0,21,255,255,255,127,0,255,0,72,90,2,0,
+42,204,255,255,255,51,255,0,216,89,2,0,15,193,166,166,86,40,255,0,168,89,2,0,254,225,228,228,26,28,255,0,152,89,2,0,146,178,184,55,126,184,255,0,64,89,2,0,83,147,175,77,175,74,255,0,48,89,2,0,207,132,163,152,78,163,255,0,32,89,2,0,21,255,255,255,127,0,255,0,0,89,2,0,42,204,255,255,255,51,255,0,240,88,2,0,15,193,166,166,86,40,255,0,224,88,2,0,232,121,247,247,129,191,255,0,208,88,2,0,254,225,228,228,26,28,255,0,128,88,2,0,146,178,184,55,126,184,255,0,88,88,2,0,83,147,175,77,175,74,255,0,72,88,2,0,207,
+132,163,152,78,163,255,0,16,88,2,0,21,255,255,255,127,0,255,0,0,88,2,0,42,204,255,255,255,51,255,0,240,87,2,0,15,193,166,166,86,40,255,0,208,87,2,0,232,121,247,247,129,191,255,0,192,87,2,0,0,0,153,153,153,153,255,0,160,87,2,0,114,120,194,102,194,165,255,0,136,87,2,0,11,155,252,252,141,98,255,0,64,87,2,0,156,77,203,141,160,203,255,0,40,87,2,0,114,120,194,102,194,165,255,0,24,87,2,0,11,155,252,252,141,98,255,0,232,86,2,0,156,77,203,141,160,203,255,0,216,86,2,0,228,102,231,231,138,195,255,0,200,86,2,
+0,114,120,194,102,194,165,255,0,168,86,2,0,11,155,252,252,141,98,255,0,152,86,2,0,156,77,203,141,160,203,255,0,128,86,2,0,228,102,231,231,138,195,255,0,112,86,2,0,58,155,216,166,216,84,255,0,32,86,2,0,114,120,194,102,194,165,255,0,16,86,2,0,11,155,252,252,141,98,255,0,0,86,2,0,156,77,203,141,160,203,255,0,200,85,2,0,228,102,231,231,138,195,255,0,184,85,2,0,58,155,216,166,216,84,255,0,168,85,2,0,34,208,255,255,217,47,255,0,136,85,2,0,114,120,194,102,194,165,255,0,120,85,2,0,11,155,252,252,141,98,255,
+0,104,85,2,0,156,77,203,141,160,203,255,0,88,85,2,0,228,102,231,231,138,195,255,0,40,85,2,0,58,155,216,166,216,84,255,0,24,85,2,0,34,208,255,255,217,47,255,0,8,85,2,0,25,90,229,229,196,148,255,0,240,84,2,0,114,120,194,102,194,165,255,0,224,84,2,0,11,155,252,252,141,98,255,0,208,84,2,0,156,77,203,141,160,203,255,0,176,84,2,0,228,102,231,231,138,195,255,0,160,84,2,0,58,155,216,166,216,84,255,0,136,84,2,0,34,208,255,255,217,47,255,0,88,84,2,0,25,90,229,229,196,148,255,0,32,84,2,0,0,0,179,179,179,179,
+255,0,8,84,2,0,120,84,211,141,211,199,255,0,240,83,2,0,211,82,189,188,128,189,255,0,200,83,2,0,42,76,255,255,255,179,255,0,184,83,2,0,175,37,218,190,186,218,255,0,168,83,2,0,4,139,251,251,128,114,255,0,120,83,2,0,144,100,211,128,177,211,255,0,104,83,2,0,22,156,253,253,180,98,255,0,88,83,2,0,58,134,222,179,222,105,255,0,72,83,2,0,233,47,252,252,205,229,255,0,24,83,2,0,0,0,217,217,217,217,255,0,8,83,2,0,120,84,211,141,211,199,255,0,248,82,2,0,211,82,189,188,128,189,255,0,216,82,2,0,77,41,235,204,235,
+197,255,0,200,82,2,0,42,76,255,255,255,179,255,0,184,82,2,0,175,37,218,190,186,218,255,0,128,82,2,0,4,139,251,251,128,114,255,0,112,82,2,0,144,100,211,128,177,211,255,0,96,82,2,0,22,156,253,253,180,98,255,0,80,82,2,0,58,134,222,179,222,105,255,0,224,81,2,0,233,47,252,252,205,229,255,0,208,81,2,0,0,0,217,217,217,217,255,0,192,81,2,0,120,84,211,141,211,199,255,0,168,81,2,0,211,82,189,188,128,189,255,0,152,81,2,0,77,41,235,204,235,197,255,0,136,81,2,0,37,144,255,255,237,111,255,0,104,81,2,0,42,76,255,
+255,255,179,255,0,48,81,2,0,175,37,218,190,186,218,255,0,16,81,2,0,4,139,251,251,128,114,255,0,232,80,2,0,144,100,211,128,177,211,255,0,192,80,2,0,22,156,253,253,180,98,255,0,152,80,2,0,58,134,222,179,222,105,255,0,136,80,2,0,233,47,252,252,205,229,255,0,104,80,2,0,0,0,217,217,217,217,255,0,88,80,2,0,120,84,211,141,211,199,255,0,64,80,2,0,42,76,255,255,255,179,255,0,24,80,2,0,175,37,218,190,186,218,255,0,8,80,2,0,120,84,211,141,211,199,255,0,248,79,2,0,42,76,255,255,255,179,255,0,232,79,2,0,175,37,
+218,190,186,218,255,0,176,79,2,0,4,139,251,251,128,114,255,0,152,79,2,0,120,84,211,141,211,199,255,0,136,79,2,0,42,76,255,255,255,179,255,0,72,79,2,0,175,37,218,190,186,218,255,0,48,79,2,0,4,139,251,251,128,114,255,0,248,78,2,0,144,100,211,128,177,211,255,0,200,78,2,0,120,84,211,141,211,199,255,0,176,78,2,0,42,76,255,255,255,179,255,0,16,78,2,0,175,37,218,190,186,218,255,0,240,77,2,0,4,139,251,251,128,114,255,0,104,77,2,0,144,100,211,128,177,211,255,0,88,77,2,0,22,156,253,253,180,98,255,0,16,77,2,
+0,120,84,211,141,211,199,255,0,0,77,2,0,42,76,255,255,255,179,255,0,240,76,2,0,175,37,218,190,186,218,255,0,224,76,2,0,4,139,251,251,128,114,255,0,192,76,2,0,144,100,211,128,177,211,255,0,176,76,2,0,22,156,253,253,180,98,255,0,160,76,2,0,58,134,222,179,222,105,255,0,144,76,2,0,120,84,211,141,211,199,255,0,96,76,2,0,42,76,255,255,255,179,255,0,64,76,2,0,175,37,218,190,186,218,255,0,48,76,2,0,4,139,251,251,128,114,255,0,32,76,2,0,144,100,211,128,177,211,255,0,16,76,2,0,22,156,253,253,180,98,255,0,0,
+76,2,0,58,134,222,179,222,105,255,0,216,75,2,0,233,47,252,252,205,229,255,0,200,75,2,0,120,84,211,141,211,199,255,0,184,75,2,0,42,76,255,255,255,179,255,0,152,75,2,0,175,37,218,190,186,218,255,0,96,75,2,0,4,139,251,251,128,114,255,0,80,75,2,0,144,100,211,128,177,211,255,0,64,75,2,0,22,156,253,253,180,98,255,0,48,75,2,0,58,134,222,179,222,105,255,0,32,75,2,0,233,47,252,252,205,229,255,0,16,75,2,0,0,0,217,217,217,217,255,0,240,74,2,0,237,253,158,158,1,66,255,0,224,74,2,0,177,130,162,94,79,162,255,0,
+208,74,2,0,250,180,213,213,62,79,255,0,184,74,2,0,10,184,244,244,109,67,255,0,128,74,2,0,20,157,253,253,174,97,255,0,112,74,2,0,31,115,254,254,224,139,255,0,96,74,2,0,49,96,245,230,245,152,255,0,80,74,2,0,79,65,221,171,221,164,255,0,64,74,2,0,114,120,194,102,194,165,255,0,48,74,2,0,143,187,189,50,136,189,255,0,32,74,2,0,237,253,158,158,1,66,255,0,16,74,2,0,143,187,189,50,136,189,255,0,216,73,2,0,177,130,162,94,79,162,255,0,200,73,2,0,250,180,213,213,62,79,255,0,152,73,2,0,10,184,244,244,109,67,255,
+0,128,73,2,0,20,157,253,253,174,97,255,0,112,73,2,0,31,115,254,254,224,139,255,0,96,73,2,0,42,64,255,255,255,191,255,0,80,73,2,0,49,96,245,230,245,152,255,0,64,73,2,0,79,65,221,171,221,164,255,0,32,73,2,0,114,120,194,102,194,165,255,0,16,73,2,0,13,164,252,252,141,89,255,0,0,73,2,0,42,64,255,255,255,191,255,0,232,72,2,0,81,77,213,153,213,148,255,0,176,72,2,0,254,225,215,215,25,28,255,0,160,72,2,0,20,157,253,253,174,97,255,0,144,72,2,0,79,65,221,171,221,164,255,0,128,72,2,0,143,196,186,43,131,186,255,
+0,112,72,2,0,254,225,215,215,25,28,255,0,96,72,2,0,20,157,253,253,174,97,255,0,48,72,2,0,42,64,255,255,255,191,255,0,32,72,2,0,79,65,221,171,221,164,255,0,16,72,2,0,143,196,186,43,131,186,255,0,0,72,2,0,250,180,213,213,62,79,255,0,192,71,2,0,13,164,252,252,141,89,255,0,176,71,2,0,31,115,254,254,224,139,255,0,160,71,2,0,49,96,245,230,245,152,255,0,144,71,2,0,81,77,213,153,213,148,255,0,128,71,2,0,143,187,189,50,136,189,255,0,112,71,2,0,250,180,213,213,62,79,255,0,40,71,2,0,13,164,252,252,141,89,255,
+0,24,71,2,0,31,115,254,254,224,139,255,0,8,71,2,0,42,64,255,255,255,191,255,0,248,70,2,0,49,96,245,230,245,152,255,0,200,70,2,0,81,77,213,153,213,148,255,0,184,70,2,0,143,187,189,50,136,189,255,0,168,70,2,0,250,180,213,213,62,79,255,0,152,70,2,0,10,184,244,244,109,67,255,0,136,70,2,0,20,157,253,253,174,97,255,0,120,70,2,0,31,115,254,254,224,139,255,0,88,70,2,0,49,96,245,230,245,152,255,0,48,70,2,0,79,65,221,171,221,164,255,0,24,70,2,0,114,120,194,102,194,165,255,0,248,69,2,0,143,187,189,50,136,189,
+255,0,152,69,2,0,250,180,213,213,62,79,255,0,120,69,2,0,10,184,244,244,109,67,255,0,104,69,2,0,20,157,253,253,174,97,255,0,80,69,2,0,31,115,254,254,224,139,255,0,64,69,2,0,42,64,255,255,255,191,255,0,48,69,2,0,49,96,245,230,245,152,255,0,0,69,2,0,79,65,221,171,221,164,255,0,240,68,2,0,114,120,194,102,194,165,255,0,224,68,2,0,143,187,189,50,136,189,255,0,184,68,2,0,147,15,255,240,248,255,255,0,104,68,2,0,24,35,250,250,235,215,255,0,88,68,2,0,127,255,255,0,255,255,255,0,40,68,2,0,113,128,255,127,255,
+212,255,0,0,68,2,0,127,15,255,240,255,255,255,0,232,67,2,0,42,26,245,245,245,220,255,0,120,67,2,0,23,58,255,255,228,196,255,0,64,67,2,0,0,0,0,0,0,0,255,0,24,67,2,0,25,49,255,255,235,205,255,0,176,66,2,0,170,255,255,0,0,255,255,0,160,66,2,0,192,206,226,138,43,226,255,0,56,66,2,0,0,190,165,165,42,42,255,0,40,66,2,0,23,99,222,222,184,135,255,0,232,65,2,0,128,103,160,95,158,160,255,0,200,65,2,0,63,255,255,127,255,0,255,0,184,65,2,0,17,218,210,210,105,30,255,0,168,65,2,0,11,175,255,255,127,80,255,0,128,
+65,2,0,154,147,237,100,149,237,255,0,112,65,2,0,33,34,255,255,248,220,255,0,96,65,2,0,246,231,220,220,20,60,255,0,64,65,2,0,127,255,255,0,255,255,255,0,16,65,2,0,170,255,139,0,0,139,255,0,248,64,2,0,127,255,139,0,139,139,255,0,224,64,2,0,30,239,184,184,134,11,255,0,208,64,2,0,0,0,169,169,169,169,255,0,192,64,2,0,85,255,100,0,100,0,255,0,176,64,2,0,0,0,169,169,169,169,255,0,136,64,2,0,39,110,189,189,183,107,255,0,112,64,2,0,212,255,139,139,0,139,255,0,88,64,2,0,58,142,107,85,107,47,255,0,72,64,2,0,
+23,255,255,255,140,0,255,0,8,64,2,0,198,192,204,153,50,204,255,0,232,63,2,0,0,255,139,139,0,0,255,0,216,63,2,0,10,121,233,233,150,122,255,0,192,63,2,0,85,61,188,143,188,143,255,0,168,63,2,0,175,143,139,72,61,139,255,0,144,63,2,0,127,103,79,47,79,79,255,0,104,63,2,0,127,103,79,47,79,79,255,0,80,63,2,0,128,255,209,0,206,209,255,0,64,63,2,0,199,255,211,148,0,211,255,0,48,63,2,0,232,235,255,255,20,147,255,0,184,62,2,0,138,255,255,0,191,255,255,0,168,62,2,0,0,0,105,105,105,105,255,0,152,62,2,0,0,0,105,
+105,105,105,255,0,136,62,2,0,148,225,255,30,144,255,255,0,120,62,2,0,0,206,178,178,34,34,255,0,96,62,2,0,28,15,255,255,250,240,255,0,56,62,2,0,85,192,139,34,139,34,255,0,32,62,2,0,212,255,255,255,0,255,255,0,16,62,2,0,0,0,220,220,220,220,255,0,0,62,2,0,170,7,255,248,248,255,255,0,200,61,2,0,35,255,255,255,215,0,255,0,184,61,2,0,30,217,218,218,165,32,255,0,168,61,2,0,0,0,128,128,128,128,255,0,152,61,2,0,85,255,128,0,128,0,255,0,128,61,2,0,59,208,255,173,255,47,255,0,112,61,2,0,0,0,128,128,128,128,
+255,0,80,61,2,0,85,15,255,240,255,240,255,0,64,61,2,0,233,150,255,255,105,180,255,0,48,61,2,0,0,140,205,205,92,92,255,0,32,61,2,0,194,255,130,75,0,130,255,0,232,60,2,0,42,15,255,255,255,240,255,0,216,60,2,0,38,106,240,240,230,140,255,0,200,60,2,0,170,20,250,230,230,250,255,0,176,60,2,0,240,15,255,255,240,245,255,0,160,60,2,0,64,255,252,124,252,0,255,0,136,60,2,0,38,49,255,255,250,205,255,0,104,60,2,0,137,63,230,173,216,230,255,0,88,60,2,0,0,119,240,240,128,128,255,0,72,60,2,0,127,31,255,224,255,255,
+255,0,24,60,2,0,42,40,250,250,250,210,255,0,208,59,2,0,0,0,211,211,211,211,255,0,176,59,2,0,85,100,238,144,238,144,255,0,160,59,2,0,0,0,211,211,211,211,255,0,144,59,2,0,248,73,255,255,182,193,255,0,120,59,2,0,12,132,255,255,160,122,255,0,96,59,2,0,125,209,178,32,178,170,255,0,24,59,2,0,143,117,250,135,206,250,255,0,0,59,2,0,148,56,153,119,136,153,255,0,232,58,2,0,148,56,153,119,136,153,255,0,208,58,2,0,151,52,222,176,196,222,255,0,144,58,2,0,42,31,255,255,255,224,255,0,128,58,2,0,85,255,255,0,255,
+0,255,0,112,58,2,0,85,192,205,50,205,50,255,0,96,58,2,0,21,20,250,250,240,230,255,0,80,58,2,0,212,255,255,255,0,255,255,0,64,58,2,0,0,255,128,128,0,0,255,0,24,58,2,0,113,128,205,102,205,170,255,0,240,57,2,0,170,255,205,0,0,205,255,0,208,57,2,0,204,152,211,186,85,211,255,0,152,57,2,0,183,124,219,147,112,219,255,0,88,57,2,0,103,169,179,60,179,113,255,0,56,57,2,0,176,143,238,123,104,238,255,0,24,57,2,0,111,255,250,0,250,154,255,0,0,57,2,0,125,167,209,72,209,204,255,0,224,56,2,0,228,228,199,199,21,133,
+255,0,200,56,2,0,170,198,112,25,25,112,255,0,112,56,2,0,106,9,255,245,255,250,255,0,96,56,2,0,4,30,255,255,228,225,255,0,80,56,2,0,26,73,255,255,228,181,255,0,48,56,2,0,25,81,255,255,222,173,255,0,200,55,2,0,170,255,128,0,0,128,255,0,184,55,2,0,27,23,253,253,245,230,255,0,152,55,2,0,42,255,128,128,128,0,255,0,104,55,2,0,56,192,142,107,142,35,255,0,80,55,2,0,27,255,255,255,165,0,255,0,32,55,2,0,11,255,255,255,69,0,255,0,248,54,2,0,214,123,218,218,112,214,255,0,200,54,2,0,38,72,238,238,232,170,255,
+0,80,54,2,0,85,100,251,152,251,152,255,0,56,54,2,0,127,67,238,175,238,238,255,0,216,53,2,0,241,124,219,219,112,147,255,0,200,53,2,0,26,41,255,255,239,213,255,0,168,53,2,0,20,70,255,255,218,185,255,0,152,53,2,0,20,176,205,205,133,63,255,0,120,53,2,0,247,63,255,255,192,203,255,0,104,53,2,0,212,70,221,221,160,221,255,0,72,53,2,0,132,59,230,176,224,230,255,0,56,53,2,0,212,255,128,128,0,128,255,0,40,53,2,0,0,255,255,255,0,0,255,0,24,53,2,0,0,61,188,188,143,143,255,0,216,52,2,0,159,181,225,65,105,225,255,
+0,192,52,2,0,17,220,139,139,69,19,255,0,160,52,2,0,4,138,250,250,128,114,255,0,144,52,2,0,19,154,244,244,164,96,255,0,128,52,2,0,103,170,139,46,139,87,255,0,112,52,2,0,17,16,255,255,245,238,255,0,72,52,2,0,13,183,160,160,82,45,255,0,56,52,2,0,0,0,192,192,192,192,255,0,40,52,2,0,139,108,235,135,206,235,255,0,8,52,2,0,175,143,205,106,90,205,255,0,184,51,2,0,148,56,144,112,128,144,255,0,168,51,2,0,148,56,144,112,128,144,255,0,136,51,2,0,0,5,255,255,250,250,255,0,112,51,2,0,106,255,255,0,255,127,255,
+0,96,51,2,0,146,155,180,70,130,180,255,0,80,51,2,0,24,84,210,210,180,140,255,0,48,51,2,0,127,255,128,0,128,128,255,0,32,51,2,0,212,29,216,216,191,216,255,0,16,51,2,0,6,184,255,255,99,71,255,0,0,51,2,0,123,182,224,64,224,208,255,0,192,50,2,0,212,115,238,238,130,238,255,0,128,50,2,0,27,68,245,245,222,179,255,0,112,50,2,0,0,0,255,255,255,255,255,0,96,50,2,0,0,0,245,245,245,245,255,0,80,50,2,0,42,255,255,255,255,0,255,0,56,50,2,0,56,192,205,154,205,50,255,0,40,50,2,0,45,67,252,247,252,185,255,0,24,50,
+2,0,68,91,221,173,221,142,255,0,248,49,2,0,98,178,163,49,163,84,255,0,232,49,2,0,42,50,255,255,255,204,255,0,184,49,2,0,62,85,230,194,230,153,255,0,168,49,2,0,85,100,198,120,198,121,255,0,152,49,2,0,99,187,132,35,132,67,255,0,136,49,2,0,42,50,255,255,255,204,255,0,120,49,2,0,62,85,230,194,230,153,255,0,104,49,2,0,85,100,198,120,198,121,255,0,72,49,2,0,98,178,163,49,163,84,255,0,56,49,2,0,107,255,104,0,104,55,255,0,40,49,2,0,42,50,255,255,255,204,255,0,24,49,2,0,55,81,240,217,240,163,255,0,216,48,
+2,0,68,91,221,173,221,142,255,0,200,48,2,0,85,100,198,120,198,121,255,0,184,48,2,0,98,178,163,49,163,84,255,0,168,48,2,0,107,255,104,0,104,55,255,0,152,48,2,0,42,50,255,255,255,204,255,0,136,48,2,0,55,81,240,217,240,163,255,0,96,48,2,0,68,91,221,173,221,142,255,0,80,48,2,0,85,100,198,120,198,121,255,0,64,48,2,0,96,158,171,65,171,93,255,0,48,48,2,0,99,187,132,35,132,67,255,0,0,48,2,0,108,255,90,0,90,50,255,0,240,47,2,0,42,25,255,255,255,229,255,0,224,47,2,0,45,67,252,247,252,185,255,0,208,47,2,0,55,
+81,240,217,240,163,255,0,192,47,2,0,68,91,221,173,221,142,255,0,176,47,2,0,85,100,198,120,198,121,255,0,96,47,2,0,96,158,171,65,171,93,255,0,80,47,2,0,99,187,132,35,132,67,255,0,64,47,2,0,108,255,90,0,90,50,255,0,48,47,2,0,42,25,255,255,255,229,255,0,240,46,2,0,45,67,252,247,252,185,255,0,224,46,2,0,55,81,240,217,240,163,255,0,208,46,2,0,68,91,221,173,221,142,255,0,192,46,2,0,85,100,198,120,198,121,255,0,176,46,2,0,96,158,171,65,171,93,255,0,160,46,2,0,99,187,132,35,132,67,255,0,128,46,2,0,107,255,
+104,0,104,55,255,0,88,46,2,0,110,255,69,0,69,41,255,0,24,46,2,0,49,73,248,237,248,177,255,0,240,45,2,0,117,97,205,127,205,187,255,0,152,45,2,0,144,194,184,44,127,184,255,0,112,45,2,0,42,50,255,255,255,204,255,0,88,45,2,0,99,66,218,161,218,180,255,0,72,45,2,0,132,170,196,65,182,196,255,0,48,45,2,0,150,203,168,34,94,168,255,0,32,45,2,0,42,50,255,255,255,204,255,0,208,44,2,0,99,66,218,161,218,180,255,0,192,44,2,0,132,170,196,65,182,196,255,0,176,44,2,0,144,194,184,44,127,184,255,0,160,44,2,0,164,191,
+148,37,52,148,255,0,72,44,2,0,42,50,255,255,255,204,255,0,56,44,2,0,69,58,233,199,233,180,255,0,32,44,2,0,117,97,205,127,205,187,255,0,208,43,2,0,132,170,196,65,182,196,255,0,184,43,2,0,144,194,184,44,127,184,255,0,144,43,2,0,164,191,148,37,52,148,255,0,80,43,2,0,42,50,255,255,255,204,255,0,48,43,2,0,69,58,233,199,233,180,255,0,232,42,2,0,117,97,205,127,205,187,255,0,216,42,2,0,132,170,196,65,182,196,255,0,104,42,2,0,139,216,192,29,145,192,255,0,88,42,2,0,150,203,168,34,94,168,255,0,48,42,2,0,158,
+231,132,12,44,132,255,0,32,42,2,0,42,38,255,255,255,217,255,0,16,42,2,0,49,73,248,237,248,177,255,0,232,41,2,0,69,58,233,199,233,180,255,0,200,41,2,0,117,97,205,127,205,187,255,0,184,41,2,0,132,170,196,65,182,196,255,0,168,41,2,0,139,216,192,29,145,192,255,0,152,41,2,0,150,203,168,34,94,168,255,0,240,40,2,0,158,231,132,12,44,132,255,0,224,40,2,0,42,38,255,255,255,217,255,0,200,40,2,0,49,73,248,237,248,177,255,0,184,40,2,0,69,58,233,199,233,180,255,0,168,40,2,0,117,97,205,127,205,187,255,0,152,40,
+2,0,132,170,196,65,182,196,255,0,112,40,2,0,139,216,192,29,145,192,255,0,96,40,2,0,150,203,168,34,94,168,255,0,64,40,2,0,164,191,148,37,52,148,255,0,32,40,2,0,158],"i8",L,l.J+51217);D([231,88,8,29,88,255,0,176,39,2,0,37,66,255,255,247,188,255,0,160,39,2,0,28,175,254,254,196,79,255,0,144,39,2,0,16,238,217,217,95,14,255,0,128,39,2,0,42,42,255,255,255,212,255,0,112,39,2,0,28,112,254,254,217,142,255,0,96,39,2,0,22,213,254,254,153,41,255,0,64,39,2,0,15,252,204,204,76,2,255,0,48,39,2,0,42,42,255,255,255,
+212,255,0,32,39,2,0,28,112,254,254,217,142,255,0,16,39,2,0,22,213,254,254,153,41,255,0,176,38,2,0,16,238,217,217,95,14,255,0,160,38,2,0,13,248,153,153,52,4,255,0,136,38,2,0,42,42,255,255,255,212,255,0,120,38,2,0,31,109,254,254,227,145,255,0,104,38,2,0,28,175,254,254,196,79,255,0,88,38,2,0,22,213,254,254,153,41,255,0,56,38,2,0,16,238,217,217,95,14,255,0,40,38,2,0,13,248,153,153,52,4,255,0,24,38,2,0,42,42,255,255,255,212,255,0,8,38,2,0,31,109,254,254,227,145,255,0,200,37,2,0,28,175,254,254,196,79,255,
+0,184,37,2,0,22,213,254,254,153,41,255,0,168,37,2,0,18,233,236,236,112,20,255,0,152,37,2,0,15,252,204,204,76,2,255,0,136,37,2,0,12,247,140,140,45,4,255,0,120,37,2,0,42,25,255,255,255,229,255,0,88,37,2,0,37,66,255,255,247,188,255,0,72,37,2,0,31,109,254,254,227,145,255,0,56,37,2,0,28,175,254,254,196,79,255,0,40,37,2,0,22,213,254,254,153,41,255,0,232,36,2,0,18,233,236,236,112,20,255,0,208,36,2,0,15,252,204,204,76,2,255,0,192,36,2,0,12,247,140,140,45,4,255,0,176,36,2,0,42,25,255,255,255,229,255,0,160,
+36,2,0,37,66,255,255,247,188,255,0,144,36,2,0,31,109,254,254,227,145,255,0,96,36,2,0,28,175,254,254,196,79,255,0,80,36,2,0,22,213,254,254,153,41,255,0,64,36,2,0,18,233,236,236,112,20,255,0,48,36,2,0,15,252,204,204,76,2,255,0,240,35,2,0,13,248,153,153,52,4,255,0,224,35,2,0,13,240,102,102,37,6,255,0,208,35,2,0,34,95,255,255,237,160,255,0,192,35,2,0,24,178,254,254,178,76,255,0,176,35,2,0,5,221,240,240,59,32,255,0,160,35,2,0,42,77,255,255,255,178,255,0,80,35,2,0,29,162,254,254,204,92,255,0,64,35,2,0,
+17,194,253,253,141,60,255,0,48,35,2,0,254,225,227,227,26,28,255,0,32,35,2,0,42,77,255,255,255,178,255,0,184,34,2,0,29,162,254,254,204,92,255,0,168,34,2,0,17,194,253,253,141,60,255,0,152,34,2,0,5,221,240,240,59,32,255,0,136,34,2,0,246,255,189,189,0,38,255,0,120,34,2,0,42,77,255,255,255,178,255,0,104,34,2,0,30,136,254,254,217,118,255,0,72,34,2,0,24,178,254,254,178,76,255,0,48,34,2,0,17,194,253,253,141,60,255,0,248,33,2,0,5,221,240,240,59,32,255,0,232,33,2,0,246,255,189,189,0,38,255,0,136,33,2,0,42,
+77,255,255,255,178,255,0,120,33,2,0,30,136,254,254,217,118,255,0,88,33,2,0,24,178,254,254,178,76,255,0,72,33,2,0,17,194,253,253,141,60,255,0,48,33,2,0,7,212,252,252,78,42,255,0,32,33,2,0,254,225,227,227,26,28,255,0,224,32,2,0,245,255,177,177,0,38,255,0,208,32,2,0,42,50,255,255,255,204,255,0,192,32,2,0,34,95,255,255,237,160,255,0,176,32,2,0,30,136,254,254,217,118,255,0,40,32,2,0,24,178,254,254,178,76,255,0,24,32,2,0,17,194,253,253,141,60,255,0,0,32,2,0,7,212,252,252,78,42,255,0,176,31,2,0,254,225,
+227,227,26,28,255,0,152,31,2,0,245,255,177,177,0,38,255,0,128,31,2,0,42,50,255,255,255,204,255,0,80,31,2,0,34,95,255,255,237,160,255,0,24,31,2,0,30,136,254,254,217,118,255,0,160,30,2,0,24,178,254,254,178,76,255,0,128,30,2,0,17,194,253,253,141,60,255,0,16,30,2,0,7,212,252,252,78,42,255,0,0,30,2,0,254,225,227,227,26,28,255,0,232,29,2,0,246,255,189,189,0,38,255,0,216,29,2,0,242,255,128,128,0,38,255,0,200,29,2,0,147,15,255,240,248,255,255,0,184,29,2,0,24,35,250,250,235,215,255,0,136,29,2,0,23,36,255,
+255,239,219,255,0,120,29,2,0,23,36,238,238,223,204,255,0,104,29,2,0,23,36,205,205,192,176,255,0,88,29,2,0,24,34,139,139,131,120,255,0,40,29,2,0,113,128,255,127,255,212,255,0,240,28,2,0,113,128,255,127,255,212,255,0,208,28,2,0,113,128,238,118,238,198,255,0,192,28,2,0,113,128,205,102,205,170,255,0,176,28,2,0,113,128,139,69,139,116,255,0,168,28,2,0,127,15,255,240,255,255,255,0,136,28,2,0,127,15,255,240,255,255,255,0,128,28,2,0,127,15,238,224,238,238,255,0,120,28,2,0,127,14,205,193,205,205,255,0,112,
+28,2,0,127,14,139,131,139,139,255,0,72,28,2,0,42,26,245,245,245,220,255,0,16,28,2,0,23,58,255,255,228,196,255,0,8,28,2,0,23,58,255,255,228,196,255,0,0,28,2,0,23,58,238,238,213,183,255,0,248,27,2,0,22,58,205,205,183,158,255,0,240,27,2,0,23,58,139,139,125,107,255,0,216,27,2,0,0,0,0,0,0,0,255,0,200,27,2,0,25,49,255,255,235,205,255,0,192,27,2,0,170,255,255,0,0,255,255,0,184,27,2,0,170,255,255,0,0,255,255,0,160,27,2,0,170,255,238,0,0,238,255,0,112,27,2,0,170,255,205,0,0,205,255,0,104,27,2,0,170,255,139,
+0,0,139,255,0,80,27,2,0,192,206,226,138,43,226,255,0,72,27,2,0,0,190,165,165,42,42,255,0,64,27,2,0,0,191,255,255,64,64,255,0,40,27,2,0,0,191,238,238,59,59,255,0,32,27,2,0,0,191,205,205,51,51,255,0,24,27,2,0,0,190,139,139,35,35,255,0,8,27,2,0,23,99,222,222,184,135,255,0,224,26,2,0,23,100,255,255,211,155,255,0,200,26,2,0,23,99,238,238,197,145,255,0,184,26,2,0,23,99,205,205,170,125,255,0,168,26,2,0,23,99,139,139,115,85,255,0,152,26,2,0,128,103,160,95,158,160,255,0,136,26,2,0,131,103,255,152,245,255,
+255,0,104,26,2,0,131,102,238,142,229,238,255,0,80,26,2,0,131,103,205,122,197,205,255,0,64,26,2,0,131,102,139,83,134,139,255,0,48,26,2,0,63,255,255,127,255,0,255,0,8,26,2,0,63,255,255,127,255,0,255,0,232,25,2,0,63,255,238,118,238,0,255,0,200,25,2,0,63,255,205,102,205,0,255,0,184,25,2,0,63,255,139,69,139,0,255,0,168,25,2,0,17,218,210,210,105,30,255,0,152,25,2,0,17,219,255,255,127,36,255,0,112,25,2,0,17,219,238,238,118,33,255,0,96,25,2,0,17,218,205,205,102,29,255,0,64,25,2,0,17,220,139,139,69,19,255,
+0,56,25,2,0,11,175,255,255,127,80,255,0,24,25,2,0,7,169,255,255,114,86,255,0,248,24,2,0,6,169,238,238,106,80,255,0,240,24,2,0,6,169,205,205,91,69,255,0,232,24,2,0,6,168,139,139,62,47,255,0,216,24,2,0,154,147,237,100,149,237,255,0,200,24,2,0,33,34,255,255,248,220,255,0,144,24,2,0,33,34,255,255,248,220,255,0,128,24,2,0,34,35,238,238,232,205,255,0,112,24,2,0,34,34,205,205,200,177,255,0,80,24,2,0,35,34,139,139,136,120,255,0,48,24,2,0,246,231,220,220,20,60,255,0,16,24,2,0,127,255,255,0,255,255,255,0,8,
+24,2,0,127,255,255,0,255,255,255,0,0,24,2,0,127,255,238,0,238,238,255,0,248,23,2,0,127,255,205,0,205,205,255,0,240,23,2,0,127,255,139,0,139,139,255,0,208,23,2,0,30,239,184,184,134,11,255,0,184,23,2,0,30,240,255,255,185,15,255,0,112,23,2,0,30,240,238,238,173,14,255,0,96,23,2,0,30,240,205,205,149,12,255,0,56,23,2,0,30,240,139,139,101,8,255,0,32,23,2,0,85,255,100,0,100,0,255,0,0,23,2,0,39,110,189,189,183,107,255,0,240,22,2,0,58,142,107,85,107,47,255,0,216,22,2,0,58,143,255,202,255,112,255,0,200,22,2,
+0,58,143,238,188,238,104,255,0,152,22,2,0,58,143,205,162,205,90,255,0,136,22,2,0,58,143,139,110,139,61,255,0,120,22,2,0,23,255,255,255,140,0,255,0,104,22,2,0,21,255,255,255,127,0,255,0,40,22,2,0,21,255,238,238,118,0,255,0,16,22,2,0,21,255,205,205,102,0,255,0,216,21,2,0,21,255,139,139,69,0,255,0,192,21,2,0,198,192,204,153,50,204,255,0,168,21,2,0,198,193,255,191,62,255,255,0,144,21,2,0,198,192,238,178,58,238,255,0,96,21,2,0,198,192,205,154,50,205,255,0,32,21,2,0,198,192,139,104,34,139,255,0,128,20,
+2,0,10,121,233,233,150,122,255,0,112,20,2,0,85,61,188,143,188,143,255,0,32,20,2,0,85,62,255,193,255,193,255,0,248,19,2,0,85,62,238,180,238,180,255,0,224,19,2,0,85,62,205,155,205,155,255,0,208,19,2,0,85,62,139,105,139,105,255,0,192,19,2,0,175,143,139,72,61,139,255,0,176,19,2,0,127,103,79,47,79,79,255,0,144,19,2,0,127,104,255,151,255,255,255,0,112,19,2,0,127,103,238,141,238,238,255,0,96,19,2,0,127,104,205,121,205,205,255,0,80,19,2,0,127,104,139,82,139,139,255,0,32,19,2,0,127,103,79,47,79,79,255,0,248,
+18,2,0,128,255,209,0,206,209,255,0,208,18,2,0,199,255,211,148,0,211,255,0,192,18,2,0,232,235,255,255,20,147,255,0,176,18,2,0,232,235,255,255,20,147,255,0,160,18,2,0,232,235,238,238,18,137,255,0,120,18,2,0,232,235,205,205,16,118,255,0,104,18,2,0,231,236,139,139,10,80,255,0,88,18,2,0,138,255,255,0,191,255,255,0,64,18,2,0,138,255,255,0,191,255,255,0,16,18,2,0,138,255,238,0,178,238,255,0,232,17,2,0,138,255,205,0,154,205,255,0,216,17,2,0,138,255,139,0,104,139,255,0,192,17,2,0,0,0,105,105,105,105,255,0,
+184,17,2,0,0,0,105,105,105,105,255,0,168,17,2,0,148,225,255,30,144,255,255,0,136,17,2,0,148,225,255,30,144,255,255,0,120,17,2,0,148,225,238,28,134,238,255,0,104,17,2,0,148,225,205,24,116,205,255,0,88,17,2,0,148,225,139,16,78,139,255,0,240,16,2,0,0,206,178,178,34,34,255,0,192,16,2,0,0,207,255,255,48,48,255,0,176,16,2,0,0,207,238,238,44,44,255,0,160,16,2,0,0,207,205,205,38,38,255,0,72,16,2,0,0,207,139,139,26,26,255,0,56,16,2,0,28,15,255,255,250,240,255,0,24,16,2,0,85,192,139,34,139,34,255,0,8,16,2,
+0,0,0,220,220,220,220,255,0,248,15,2,0,170,7,255,248,248,255,255,0,240,15,2,0,35,255,255,255,215,0,255,0,120,15,2,0,35,255,255,255,215,0,255,0,88,15,2,0,35,255,238,238,201,0,255,0,80,15,2,0,35,255,205,205,173,0,255,0,72,15,2,0,35,255,139,139,117,0,255,0,56,15,2,0,30,217,218,218,165,32,255,0,40,15,2,0,30,218,255,255,193,37,255,0,8,15,2,0,30,218,238,238,180,34,255,0,248,14,2,0,30,218,205,205,155,29,255,0,232,14,2,0,30,218,139,139,105,20,255,0,168,14,2,0,0,0,192,192,192,192,255,0,104,14,2,0,0,0,0,0,
+0,0,255,0,88,14,2,0,0,0,3,3,3,3,255,0,80,14,2,0,0,0,26,26,26,26,255,0,64,14,2,0,0,0,255,255,255,255,255,0,56,14,2,0,0,0,28,28,28,28,255,0,48,14,2,0,0,0,31,31,31,31,255,0,16,14,2,0,0,0,33,33,33,33,255,0,8,14,2,0,0,0,36,36,36,36,255,0,0,14,2,0,0,0,38,38,38,38,255,0,248,13,2,0,0,0,41,41,41,41,255,0,176,13,2,0,0,0,43,43,43,43,255,0,144,13,2,0,0,0,46,46,46,46,255,0,136,13,2,0,0,0,48,48,48,48,255,0,128,13,2,0,0,0,5,5,5,5,255,0,120,13,2,0,0,0,51,51,51,51,255,0,112,13,2,0,0,0,54,54,54,54,255,0,16,13,2,0,
+0,0,56,56,56,56,255,0,8,13,2,0,0,0,59,59,59,59,255,0,0,13,2,0,0,0,61,61,61,61,255,0,248,12,2,0,0,0,64,64,64,64,255,0,224,12,2,0,0,0,66,66,66,66,255,0,192,12,2,0,0,0,69,69,69,69,255,0,184,12,2,0,0,0,71,71,71,71,255,0,176,12,2,0,0,0,74,74,74,74,255,0,168,12,2,0,0,0,8,8,8,8,255,0,160,12,2,0,0,0,77,77,77,77,255,0,136,12,2,0,0,0,79,79,79,79,255,0,128,12,2,0,0,0,82,82,82,82,255,0,48,12,2,0,0,0,84,84,84,84,255,0,40,12,2,0,0,0,87,87,87,87,255,0,232,11,2,0,0,0,89,89,89,89,255,0,200,11,2,0,0,0,92,92,92,92,
+255,0,168,11,2,0,0,0,94,94,94,94,255,0,160,11,2,0,0,0,97,97,97,97,255,0,136,11,2,0,0,0,99,99,99,99,255,0,128,11,2,0,0,0,10,10,10,10,255,0,40,11,2,0,0,0,102,102,102,102,255,0,32,11,2,0,0,0,105,105,105,105,255,0,24,11,2,0,0,0,107,107,107,107,255,0,16,11,2,0,0,0,110,110,110,110,255,0,200,10,2,0,0,0,112,112,112,112,255,0,168,10,2,0,0,0,115,115,115,115,255,0,152,10,2,0,0,0,117,117,117,117,255,0,112,10,2,0,0,0,120,120,120,120,255,0,96,10,2,0,0,0,122,122,122,122,255,0,80,10,2,0,0,0,125,125,125,125,255,0,
+56,10,2,0,0,0,13,13,13,13,255,0,32,10,2,0,0,0,127,127,127,127,255,0,208,9,2,0,0,0,130,130,130,130,255,0,200,9,2,0,0,0,133,133,133,133,255,0,144,9,2,0,0,0,135,135,135,135,255,0,112,9,2,0,0,0,138,138,138,138,255,0,96,9,2,0,0,0,140,140,140,140,255,0,88,9,2,0,0,0,143,143,143,143,255,0,80,9,2,0,0,0,145,145,145,145,255,0,72,9,2,0,0,0,148,148,148,148,255,0,48,9,2,0,0,0,150,150,150,150,255,0,40,9,2,0,0,0,15,15,15,15,255,0,16,9,2,0,0,0,153,153,153,153,255,0,8,9,2,0,0,0,156,156,156,156,255,0,232,8,2,0,0,0,
+158,158,158,158,255,0,200,8,2,0,0,0,161,161,161,161,255,0,168,8,2,0,0,0,163,163,163,163,255,0,160,8,2,0,0,0,166,166,166,166,255,0,152,8,2,0,0,0,168,168,168,168,255,0,144,8,2,0,0,0,171,171,171,171,255,0,112,8,2,0,0,0,173,173,173,173,255,0,104,8,2,0,0,0,176,176,176,176,255,0,96,8,2,0,0,0,18,18,18,18,255,0,88,8,2,0,0,0,179,179,179,179,255,0,56,8,2,0,0,0,181,181,181,181,255,0,24,8,2,0,0,0,184,184,184,184,255,0,16,8,2,0,0,0,186,186,186,186,255,0,8,8,2,0,0,0,189,189,189,189,255,0,0,8,2,0,0,0,191,191,191,
+191,255,0,248,7,2,0,0,0,194,194,194,194,255,0,224,7,2,0,0,0,196,196,196,196,255,0,216,7,2,0,0,0,199,199,199,199,255,0,208,7,2,0,0,0,201,201,201,201,255,0,200,7,2,0,0,0,20,20,20,20,255,0,168,7,2,0,0,0,204,204,204,204,255,0,120,7,2,0,0,0,207,207,207,207,255,0,112,7,2,0,0,0,209,209,209,209,255,0,104,7,2,0,0,0,212,212,212,212,255,0,96,7,2,0,0,0,214,214,214,214,255,0,64,7,2,0,0,0,217,217,217,217,255,0,40,7,2,0,0,0,219,219,219,219,255,0,32,7,2,0,0,0,222,222,222,222,255,0,24,7,2,0,0,0,224,224,224,224,255,
+0,16,7,2,0,0,0,227,227,227,227,255,0,240,6,2,0,0,0,23,23,23,23,255,0,216,6,2,0,0,0,229,229,229,229,255,0,208,6,2,0,0,0,232,232,232,232,255,0,200,6,2,0,0,0,235,235,235,235,255,0,192,6,2,0,0,0,237,237,237,237,255,0,184,6,2,0,0,0,240,240,240,240,255,0,160,6,2,0,0,0,242,242,242,242,255,0,152,6,2,0,0,0,245,245,245,245,255,0,144,6,2,0,0,0,247,247,247,247,255,0,136,6,2,0,0,0,250,250,250,250,255,0,112,6,2,0,0,0,252,252,252,252,255,0,96,6,2,0,85,255,255,0,255,0,255,0,88,6,2,0,85,255,255,0,255,0,255,0,80,6,
+2,0,85,255,238,0,238,0,255,0,64,6,2,0,85,255,205,0,205,0,255,0,56,6,2,0,85,255,139,0,139,0,255,0,8,6,2,0,59,208,255,173,255,47,255,0,0,6,2,0,0,0,192,192,192,192,255,0,248,5,2,0,0,0,0,0,0,0,255,0,240,5,2,0,0,0,3,3,3,3,255,0,208,5,2,0,0,0,26,26,26,26,255,0,200,5,2,0,0,0,255,255,255,255,255,0,192,5,2,0,0,0,28,28,28,28,255,0,184,5,2,0,0,0,31,31,31,31,255,0,176,5,2,0,0,0,33,33,33,33,255,0,168,5,2,0,0,0,36,36,36,36,255,0,136,5,2,0,0,0,38,38,38,38,255,0,128,5,2,0,0,0,41,41,41,41,255,0,104,5,2,0,0,0,43,43,
+43,43,255,0,80,5,2,0,0,0,46,46,46,46,255,0,48,5,2,0,0,0,48,48,48,48,255,0,16,5,2,0,0,0,5,5,5,5,255,0,8,5,2,0,0,0,51,51,51,51,255,0,0,5,2,0,0,0,54,54,54,54,255,0,248,4,2,0,0,0,56,56,56,56,255,0,240,4,2,0,0,0,59,59,59,59,255,0,216,4,2,0,0,0,61,61,61,61,255,0,208,4,2,0,0,0,64,64,64,64,255,0,136,4,2,0,0,0,66,66,66,66,255,0,128,4,2,0,0,0,69,69,69,69,255,0,64,4,2,0,0,0,71,71,71,71,255,0,32,4,2,0,0,0,74,74,74,74,255,0,232,3,2,0,0,0,8,8,8,8,255,0,224,3,2,0,0,0,77,77,77,77,255,0,200,3,2,0,0,0,79,79,79,79,
+255,0,192,3,2,0,0,0,82,82,82,82,255,0,104,3,2,0,0,0,84,84,84,84,255,0,96,3,2,0,0,0,87,87,87,87,255,0,88,3,2,0,0,0,89,89,89,89,255,0,80,3,2,0,0,0,92,92,92,92,255,0,240,2,2,0,0,0,94,94,94,94,255,0,168,2,2,0,0,0,97,97,97,97,255,0,152,2,2,0,0,0,99,99,99,99,255,0,72,2,2,0,0,0,10,10,10,10,255,0,56,2,2,0,0,0,102,102,102,102,255,0,32,2,2,0,0,0,105,105,105,105,255,0,248,1,2,0,0,0,107,107,107,107,255,0,216,1,2,0,0,0,110,110,110,110,255,0,144,1,2,0,0,0,112,112,112,112,255,0,128,1,2,0,0,0,115,115,115,115,255,
+0,56,1,2,0,0,0,117,117,117,117,255,0,48,1,2,0,0,0,120,120,120,120,255,0,24,1,2,0,0,0,122,122,122,122,255,0,0,1,2,0,0,0,125,125,125,125,255,0,248,0,2,0,0,0,13,13,13,13,255,0,240,0,2,0,0,0,127,127,127,127,255,0,216,0,2,0,0,0,130,130,130,130,255,0,176,0,2,0,0,0,133,133,133,133,255,0,168,0,2,0,0,0,135,135,135,135,255,0,64,0,2,0,0,0,138,138,138,138,255,0,32,0,2,0,0,0,140,140,140,140,255,0,24,0,2,0,0,0,143,143,143,143,255,0,8,0,2,0,0,0,145,145,145,145,255,0,0,0,2,0,0,0,148,148,148,148,255,0,248,255,1,0,
+0,0,150,150,150,150,255,0,240,255,1,0,0,0,15,15,15,15,255,0,208,255,1,0,0,0,153,153,153,153,255,0,200,255,1,0,0,0,156,156,156,156,255,0,192,255,1,0,0,0,158,158,158,158,255,0,184,255,1,0,0,0,161,161,161,161,255,0,160,255,1,0,0,0,163,163,163,163,255,0,152,255,1,0,0,0,166,166,166,166,255,0,144,255,1,0,0,0,168,168,168,168,255,0,104,255,1,0,0,0,171,171,171,171,255,0,96,255,1,0,0,0,173,173,173,173,255,0,88,255,1,0,0,0,176,176,176,176,255,0,64,255,1,0,0,0,18,18,18,18,255,0,56,255,1,0,0,0,179,179,179,179,
+255,0,48,255,1,0,0,0,181,181,181,181,255,0,40,255,1,0,0,0,184,184,184,184,255,0,8,255,1,0,0,0,186,186,186,186,255,0,240,254,1,0,0,0,189,189,189,189,255,0,232,254,1,0,0,0,191,191,191,191,255,0,224,254,1,0,0,0,194,194,194,194,255,0,216,254,1,0,0,0,196,196,196,196,255,0,208,254,1,0,0,0,199,199,199,199,255,0,176,254,1,0,0,0,201,201,201,201,255,0,168,254,1,0,0,0,20,20,20,20,255,0,160,254,1,0,0,0,204,204,204,204,255,0,152,254,1,0,0,0,207,207,207,207,255,0,128,254,1,0,0,0,209,209,209,209,255,0,120,254,1,
+0,0,0,212,212,212,212,255,0,112,254,1,0,0,0,214,214,214,214,255,0,104,254,1,0,0,0,217,217,217,217,255,0,80,254,1,0,0,0,219,219,219,219,255,0,64,254,1,0,0,0,222,222,222,222,255,0,56,254,1,0,0,0,224,224,224,224,255,0,48,254,1,0,0,0,227,227,227,227,255,0,24,254,1,0,0,0,23,23,23,23,255,0,224,253,1,0,0,0,229,229,229,229,255,0,200,253,1,0,0,0,232,232,232,232,255,0,192,253,1,0,0,0,235,235,235,235,255,0,184,253,1,0,0,0,237,237,237,237,255,0,176,253,1,0,0,0,240,240,240,240,255,0,168,253,1,0,0,0,242,242,242,
+242,255,0,152,253,1,0,0,0,245,245,245,245,255,0,128,253,1,0,0,0,247,247,247,247,255,0,112,253,1,0,0,0,250,250,250,250,255,0,104,253,1,0,0,0,252,252,252,252,255,0,16,253,1,0,85,15,255,240,255,240,255,0,240,252,1,0,85,15,255,240,255,240,255,0,224,252,1,0,85,15,238,224,238,224,255,0,208,252,1,0,85,14,205,193,205,193,255,0,192,252,1,0,85,14,139,131,139,131,255,0,184,252,1,0,233,150,255,255,105,180,255,0,168,252,1,0,234,145,255,255,110,180,255,0,88,252,1,0,235,141,238,238,106,167,255,0,72,252,1,0,236,
+135,205,205,96,144,255,0,56,252,1,0,234,148,139,139,58,98,255,0,40,252,1,0,0,140,205,205,92,92,255,0,8,252,1,0,0,148,255,255,106,106,255,0,248,251,1,0,0,148,238,238,99,99,255,0,232,251,1,0,0,149,205,205,85,85,255,0,216,251,1,0,0,148,139,139,58,58,255,0,208,251,1,0,194,255,130,75,0,130,255,0,200,251,1,0,42,0,255,255,255,254,0,0,176,251,1,0,42,15,255,255,255,240,255,0,168,251,1,0,42,15,255,255,255,240,255,0,128,251,1,0,42,15,238,238,238,224,255,0,120,251,1,0,42,14,205,205,205,193,255,0,96,251,1,0,42,
+14,139,139,139,131,255,0,88,251,1,0,38,106,240,240,230,140,255,0,48,251,1,0,39,112,255,255,246,143,255,0,24,251,1,0,39,112,238,238,230,133,255,0,0,251,1,0,39,111,205,205,198,115,255,0,248,250,1,0,39,111,139,139,134,78,255,0,144,250,1,0,170,20,250,230,230,250,255,0,128,250,1,0,240,15,255,255,240,245,255,0,112,250,1,0,240,15,255,255,240,245,255,0,96,250,1,0,239,15,238,238,224,229,255,0,48,250,1,0,240,14,205,205,193,197,255,0,32,250,1,0,239,14,139,139,131,134,255,0,216,249,1,0,64,255,252,124,252,0,255,
+0,192,249,1,0,38,49,255,255,250,205,255,0,128,249,1,0,38,49,255,255,250,205,255,0,104,249,1,0,37,50,238,238,233,191,255,0,8,249,1,0,38,49,205,205,201,165,255,0,224,248,1,0,39,49,139,139,137,112,255,0,144,248,1,0,137,63,230,173,216,230,255,0,128,248,1,0,138,64,255,191,239,255,255,0,192,247,1,0,138,64,238,178,223,238,255,0,176,247,1,0,138,63,205,154,192,205,255,0,152,247,1,0,137,64,139,104,131,139,255,0,136,247,1,0,0,119,240,240,128,128,255,0,120,247,1,0,127,31,255,224,255,255,255,0,104,247,1,0,127,
+31,255,224,255,255,255,0,72,247,1,0,127,31,238,209,238,238,255,0,56,247,1,0,127,31,205,180,205,205,255,0,40,247,1,0,127,31,139,122,139,139,255,0,240,246,1,0,35,115,238,238,221,130,255,0,184,246,1,0,35,116,255,255,236,139,255,0,168,246,1,0,35,115,238,238,220,130,255,0,120,246,1,0,35,115,205,205,190,112,255,0,104,246,1,0,35,115,139,139,129,76,255,0,80,246,1,0,42,40,250,250,250,210,255,0,64,246,1,0,0,0,211,211,211,211,255,0,24,246,1,0,0,0,211,211,211,211,255,0,0,246,1,0,248,73,255,255,182,193,255,0,
+240,245,1,0,249,81,255,255,174,185,255,0,224,245,1,0,248,81,238,238,162,173,255,0,176,245,1,0,249,80,205,205,140,149,255,0,120,245,1,0,249,80,139,139,95,101,255,0,96,245,1,0,12,132,255,255,160,122,255,0,80,245,1,0,12,132,255,255,160,122,255,0,48,245,1,0,11,132,238,238,149,114,255,0,32,245,1,0,12,133,205,205,129,98,255,0,0,245,1,0,12,133,139,139,87,66,255,0,240,244,1,0,125,209,178,32,178,170,255,0,224,244,1,0,143,117,250,135,206,250,255,0,208,244,1,0,143,79,255,176,226,255,255,0,176,244,1,0,143,79,
+238,164,211,238,255,0,136,244,1,0,142,79,205,141,182,205,255,0,104,244,1,0,143,78,139,96,123,139,255,0,88,244,1,0,175,143,255,132,112,255,255,0,72,244,1,0,148,56,153,119,136,153,255,0,56,244,1,0,148,56,153,119,136,153,255,0,24,244,1,0,151,52,222,176,196,222,255,0,200,243,1,0,151,53,255,202,225,255,255,0,184,243,1,0,151,53,238,188,210,238,255,0,120,243,1,0,151,53,205,162,181,205,255,0,72,243,1,0,150,53,139,110,123,139,255,0,56,243,1,0,42,31,255,255,255,224,255,0,40,243,1,0,42,31,255,255,255,224,255,
+0,24,243,1,0,42,31,238,238,238,209,255,0,8,243,1,0,42,31,205,205,205,180,255,0,248,242,1,0,42,31,139,139,139,122,255,0,192,242,1,0,85,192,205,50,205,50,255,0,168,242,1,0,21,20,250,250,240,230,255,0,112,242,1,0,212,255,255,255,0,255,255,0,16,242,1,0,212,255,255,255,0,255,255,0,240,241,1,0,212,255,238,238,0,238,255,0,224,241,1,0,212,255,205,205,0,205,255,0,208,241,1,0,212,255,139,139,0,139,255,0,200,241,1,0,239,185,176,176,48,96,255,0,192,241,1,0,228,203,255,255,52,179,255,0,184,241,1,0,228,203,238,
+238,48,167,255,0,136,241,1,0,228,204,205,205,41,144,255,0,128,241,1,0,228,203,139,139,28,98,255,0,104,241,1,0,113,128,205,102,205,170,255,0,56,241,1,0,170,255,205,0,0,205,255,0,24,241,1,0,204,152,211,186,85,211,255,0,8,241,1,0,203,153,255,224,102,255,255,0,248,240,1,0,203,153,238,209,95,238,255,0,232,240,1,0,203,153,205,180,82,205,255,0,208,240,1,0,203,154,139,122,55,139,255,0,184,240,1,0,183,124,219,147,112,219,255,0,120,240,1,0,183,125,255,171,130,255,255,0,104,240,1,0,183,125,238,159,121,238,255,
+0,88,240,1,0,183,125,205,137,104,205,255,0,40,240,1,0,183,124,139,93,71,139,255,0,248,239,1,0,103,169,179,60,179,113,255,0,232,239,1,0,176,143,238,123,104,238,255,0,208,239,1,0,111,255,250,0,250,154,255,0,184,239,1,0,125,167,209,72,209,204,255,0,160,239,1,0,228,228,199,199,21,133,255,0,144,239,1,0,170,198,112,25,25,112,255,0,112,239,1,0,106,9,255,245,255,250,255,0,96,239,1,0,4,30,255,255,228,225,255,0,48,239,1,0,4,30,255,255,228,225,255,0,0,239,1,0,4,30,238,238,213,210,255,0,176,238,1,0,3,29,205,
+205,183,181,255,0,160,238,1,0,5,29,139,139,125,123,255,0,72,238,1,0,26,73,255,255,228,181,255,0,56,238,1,0,25,81,255,255,222,173,255,0,16,238,1,0,25,81,255,255,222,173,255,0,0,238,1,0,25,82,238,238,207,161,255,0,200,237,1,0,25,82,205,205,179,139,255,0,168,237,1,0,25,82,139,139,121,94,255,0,144,237,1,0,170,255,128,0,0,128,255,0,128,237,1,0,170,255,128,0,0,128,255,0,88,237,1,0,42,0,255,255,255,254,0,0,80,237,1,0,27,23,253,253,245,230,255,0,56,237,1,0,56,192,142,107,142,35,255,0,24,237,1,0,56,193,255,
+192,255,62,255,0,248,236,1,0,56,192,238,179,238,58,255,0,200,236,1,0,56,192,205,154,205,50,255,0,136,236,1,0,56,192,139,105,139,34,255,0,96,236,1,0,27,255,255,255,165,0,255,0,0,236,1,0,27,255,255,255,165,0,255,0,232,235,1,0,27,255,238,238,154,0,255,0,64,235,1,0,27,255,205,205,133,0,255,0,56,235,1,0,27,255,139,139,90,0,255,0,32,235,1,0,11,255,255,255,69,0,255,0,16,235,1,0,11,255,255,255,69,0,255,0,248,234,1,0,11,255,238,238,64,0,255,0,232,234,1,0,11,255,205,205,55,0,255,0,200,234,1,0,11,255,139,139,
+37,0,255,0,192,234,1,0,214,123,218,218,112,214,255,0,184,234,1,0,214,124,255,255,131,250,255,0,176,234,1,0,214,124,238,238,122,233,255,0,144,234,1,0,214,124,205,205,105,201,255,0,136,234,1,0,213,124,139,139,71,137,255,0,104,234,1,0,38,72,238,238,232,170,255,0,88,234,1,0,85,100,251,152,251,152,255,0,72,234,1,0,85,101,255,154,255,154,255,0,56,234,1,0,85,100,238,144,238,144,255,0,0,234,1,0,85,100,205,124,205,124,255,0,232,233,1,0,85,100,139,84,139,84,255,0,216,233,1,0,127,67,238,175,238,238,255,0,200,
+233,1,0,127,68,255,187,255,255,255,0,120,233,1,0,127,68,238,174,238,238,255,0,96,233,1,0,127,68,205,150,205,205,255,0,72,233,1,0,127,67,139,102,139,139,255,0,56,233,1,0,241,124,219,219,112,147,255,0,40,233,1,0,241,125,255,255,130,171,255,0,24,233,1,0,241,125,238,238,121,159,255,0,8,233,1,0,241,125,205,205,104,137,255,0,248,232,1,0,241,124,139,139,71,93,255,0,216,232,1,0,26,41,255,255,239,213,255,0,200,232,1,0,20,70,255,255,218,185,255,0,152,232,1,0,20,70,255,255,218,185,255,0,120,232,1,0,19,69,238,
+238,203,173,255,0,104,232,1,0,19,69,205,205,175,149,255,0,88,232,1,0,20,69,139,139,119,101,255,0,80,232,1,0,20,176,205,205,133,63,255,0,72,232,1,0,247,63,255,255,192,203,255,0,48,232,1,0,245,73,255,255,181,197,255,0,40,232,1,0,245,73,238,238,169,184,255,0,24,232,1,0,245,74,205,205,145,158,255,0,16,232,1,0,245,73,139,139,99,108,255,0,240,231,1,0,212,70,221,221,160,221,255,0,232,231,1,0,212,68,255,255,187,255,255,0,224,231,1,0,212,68,238,238,174,238,255,0,216,231,1,0,212,68,205,205,150,205,255,0,208,
+231,1,0,212,67,139,139,102,139,255,0,192,231,1,0,132,59,230,176,224,230,255,0,168,231,1,0,196,221,240,160,32,240,255,0,160,231,1,0,191,207,255,155,48,255,255,0,152,231,1,0,192,207,238,145,44,238,255,0,144,231,1,0,192,207,205,125,38,205,255,0,120,231,1,0,192,207,139,85,26,139,255,0,112,231,1,0,0,255,255,255,0,0,255,0,96,231,1,0,0,255,255,255,0,0,255,0,88,231,1,0,0,255,238,238,0,0,255,0,80,231,1,0,0,255,205,205,0,0,255,0,72,231,1,0,0,255,139,139,0,0,255,0,40,231,1,0,0,61,188,188,143,143,255,0,0,231,
+1,0,0,62,255,255,193,193,255,0,240,230,1,0,0,62,238,238,180,180,255,0,224,230,1,0,0,62,205,205,155,155,255,0,184,230,1,0,0,62,139,139,105,105,255,0,168,230,1,0,159,181,225,65,105,225,255,0,152,230,1,0,159,183,255,72,118,255,255,0,136,230,1,0,159,183,238,67,110,238,255,0,120,230,1,0,159,182,205,58,95,205,255,0,104,230,1,0,159,183,139,39,64,139,255,0,16,230,1,0,17,220,139,139,69,19,255,0,8,230,1,0,4,138,250,250,128,114,255,0,0,230,1,0,9,150,255,255,140,105,255,0,248,229,1,0,9,150,238,238,130,98,255,
+0,216,229,1,0,9,150,205,205,112,84,255,0,208,229,1,0,9,150,139,139,76,57,255,0,192,229,1,0,19,154,244,244,164,96,255,0,176,229,1,0,103,170,139,46,139,87,255,0,160,229,1,0,103,171,255,84,255,159,255,0,144,229,1,0,103,171,238,78,238,148,255,0,112,229,1,0,103,171,205,67,205,128,255,0,96,229,1,0,103,170,139,46,139,87,255,0,64,229,1,0,17,16,255,255,245,238,255,0,16,229,1,0,17,16,255,255,245,238,255,0,200,228,1,0,18,17,238,238,229,222,255,0,184,228,1,0,18,17,205,205,197,191,255,0,144,228,1,0,18,16,139,
+139,134,130,255,0,136,228,1,0,13,183,160,160,82,45,255,0,88,228,1,0,13,184,255,255,130,71,255,0,80,228,1,0,13,184,238,238,121,66,255,0,16,228,1,0,13,184,205,205,104,57,255,0,8,228,1,0,13,185,139,139,71,38,255,0,0,228,1,0,139,108,235,135,206,235,255,0,224,227,1,0,144,120,255,135,206,255,255,0,168,227,1,0,144,120,238,126,192,238,255,0,128,227,1,0,144,120,205,108,166,205,255,0,104,227,1,0,145,119,139,74,112,139,255,0,72,227,1,0,175,143,205,106,90,205,255,0,40,227,1,0,175,144,255,131,111,255,255,0,8,
+227,1,0,175,144,238,122,103,238,255,0,216,226,1,0,175,144,205,105,89,205,255,0,176,226,1,0,175,144,139,71,60,139,255,0,144,226,1,0,148,56,144,112,128,144,255,0,128,226,1,0,149,56,255,198,226,255,255,0,40,226,1,0,149,56,238,185,211,238,255,0,0,226,1,0,148,57,205,159,182,205,255,0,232,225,1,0,149,56,139,108,123,139,255,0,208,225,1,0,148,56,144,112,128,144,255,0,200,225,1,0,0,5,255,255,250,250,255,0,192,225,1,0,0,5,255,255,250,250,255,0,168,225,1,0,0,5,238,238,233,233,255,0,160,225,1,0,0,4,205,205,201,
+201,255,0,152,225,1,0,0,3,139,139,137,137,255,0,136,225,1,0,106,255,255,0,255,127,255,0,56,225,1,0,106,255,255,0,255,127,255,0,40,225,1,0,106,255,238,0,238,118,255,0,8,225,1,0,106,255,205,0,205,102,255,0,248,224,1,0,106,255,139,0,139,69,255,0,232,224,1,0,146,155,180,70,130,180,255,0,216,224,1,0,146,156,255,99,184,255,255,0,184,224,1,0,146,156,238,92,172,238,255,0,160,224,1,0,146,156,205,79,148,205,255,0,144,224,1,0,147,155,139,54,100,139,255,0,136,224,1,0,24,84,210,210,180,140,255,0,64,224,1,0,20,
+176,255,255,165,79,255,0,56,224,1,0,20,176,238,238,154,73,255,0,48,224,1,0,20,176,205,205,133,63,255,0,40,224,1,0,20,176,139,139,90,43,255,0,32,224,1,0,212,29,216,216,191,216,255,0,16,224,1,0,212,30,255,255,225,255,255,0,240,223,1,0,212,30,238,238,210,238,255,0,224,223,1,0,212,29,205,205,181,205,255,0,208,223,1,0,212,29,139,139,123,139,255,0,200,223,1,0,6,184,255,255,99,71,255,0,168,223,1,0,6,184,255,255,99,71,255,0,152,223,1,0,6,184,238,238,92,66,255,0,144,223,1,0,6,184,205,205,79,57,255,0,136,223,
+1,0,6,185,139,139,54,38,255,0,120,223,1,0,42,0,255,255,255,254,0,0,104,223,1,0,123,182,224,64,224,208,255,0,72,223,1,0,129,255,255,0,245,255,255,0,56,223,1,0,129,255,238,0,229,238,255,0,40,223,1,0,129,255,205,0,197,205,255,0,0,223,1,0,129,255,139,0,134,139,255,0,216,222,1,0,212,115,238,238,130,238,255,0,200,222,1,0,227,215,208,208,32,144,255,0,176,222,1,0,235,193,255,255,62,150,255,0,160,222,1,0,235,192,238,238,58,140,255,0,144,222,1,0,235,192,205,205,50,120,255,0,128,222,1,0,235,192,139,139,34,82,
+255,0,120,222,1,0,27,68,245,245,222,179,255,0,112,222,1,0,27,69,255,255,231,186,255,0,88,222,1,0,27,68,238,238,216,174,255,0,80,222,1,0,27,68,205,205,186,150,255,0,40,222,1,0,27,67,139,139,126,102,255,0,32,222,1,0,0,0,255,255,255,255,255,0,16,222,1,0,0,0,245,245,245,245,255,0,8,222,1,0,42,255,255,255,255,0,255,0,0,222,1,0,42,255,255,255,255,0,255,0,248,221,1,0,42,255,238,238,238,0,255,0,224,221,1,0,42,255,205,205,205,0,255,0,208,221,1,0,42,255,139,139,139,0,255,0,176,221,1,0,56,192,205,154,205,50,
+255,0,0,0,0,0,81,160,79,228,73,210,14,64,180,200,118,190,159,58,53,192,58,34,223,165,212,37,213,191,243,130,62,71,154,46,138,63,159,229,121,112,119,214,249,191,126,253,16,27,44,156,230,63,150,236,216,8,196,235,204,63,205,206,162,119,42,224,208,63,176,227,191,64,16,32,237,191,173,161,212,94,68,219,216,63,59,161,124,230,81,150,118,63,211,110,112,249,122,132,123,63,129,204,206,162,119,42,228,191,209,173,215,244,160,160,200,63,106,223,55,25,176,63,132,63,190,202,144,25,94,255,132,63,28,150,6,126,84,195,
+196,191,165,73,41,232,246,226,35,64,169,217,3,173,192,144,193,63,8,196,144,65,147,105,137,63,250,68,158,36,93,51,208,191,1,240,153,54,45,194,94,63,13,156,125,47,207,148,151,63,137,181,248,20,0,227,137,63,229,169,88,70,52,203,177,191,143,0,201,207,161,103,166,191,92,181,198,251,204,180,136,63,77,164,143,84,58,179,144,63,230,199,4,161,97,214,160,191,199,105,103,28,19,247,130,191,42,127,107,229,45,112,92,191,228,87,98,84,8,154,117,63,209,241,135,85,114,4,183,63,149,212,9,104,34,60,51,192,100,35,16,175,
+235,119,16,192,167,33,170,240,103,120,199,63,218,255,0,107,213,174,193,63,78,40,68,192,33,84,247,191,170,72,133,177,133,32,245,63,157,104,87,33,229,39,246,63,77,46,198,192,58,142,205,63,89,107,40,181,23,209,220,191,3,63,170,97,191,39,204,63,166,71,83,61,153,127,218,63,182,129,59,80,167,60,174,63,81,76,222,0,51,223,185,191,245,118,149,255,218,11,166,63,212,165,53,188,15,246,148,63,31,173,32,188,44,220,144,63,40,44,241,128,178,201,35,64,35,90,225,76,2,138,183,63,72,163,101,81,150,41,127,63,187,180,
+134,247,193,158,147,63,23,168,123,83,71,125,160,191,33,43,174,224,109,148,139,63,51,115,220,132,214,30,181,191,160,120,132,137,245,252,143,63,105,53,36,238,177,244,145,191,184,205,51,122,94,191,106,63,146,62,173,162,63,52,205,191,126,176,231,198,79,62,152,191,7,35,155,80,45,199,164,63,62,24,194,123,88,185,145,191,45,124,125,173,75,141,198,63,46,0,0,0,154,0,0,0,72,210,1,0,110,0,0,0,128,168,1,0,40,0,0,0,144,164,1,0,144,0,0,0,232,161,1,0,76,0,0,0,56,160,1,0,196,0,0,0,128,158,1,0,10,0,0,0,96,188,1,0,
+102,0,0,0,160,156,1,0,134,0,0,0,248,154,1,0,130,0,0,0,88,153,1,0,190,0,0,0,104,151,1,0,78,0,0,0,8,149,1,0,36,0,0,0,128,146,1,0,116,0,0,0,208,142,1,0,54,0,0,0,232,139,1,0,164,0,0,0,80,138,1,0,32,0,0,0,136,136,1,0,38,0,0,0,120,134,1,0,58,0,0,0,208,132,1,0,58,0,0,0,80,131,1,0,128,0,0,0,152,129,1,0,136,0,0,0,8,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65,0,32,26,192,0,32,31,0,1,1,47,50,1,1,5,57,1,1,15,74,1,1,45,121,1,1,5,112,3,1,3,145,3,32,17,163,3,32,9,0,4,80,16,
+16,4,32,32,96,4,1,33,138,4,1,53,193,4,1,13,208,4,1,63,20,5,1,19,49,5,48,38,160,1,1,5,179,1,1,3,205,1,1,15,222,1,1,17,248,1,1,39,34,2,1,17,216,3,1,23,0,30,1,149,160,30,1,95,8,31,248,8,24,31,248,6,40,31,248,8,56,31,248,8,72,31,248,6,104,31,248,8,136,31,248,8,152,31,248,8,168,31,248,8,184,31,248,2,186,31,182,2,200,31,170,4,216,31,248,2,218,31,156,2,232,31,248,2,234,31,144,2,248,31,128,2,250,31,130,2,70,2,1,9,16,5,1,3,96,33,16,16,0,44,48,47,103,44,1,5,128,44,1,99,235,44,1,3,64,166,1,45,128,166,1,23,34,
+167,1,13,50,167,1,61,121,167,1,3,126,167,1,9,144,167,1,3,160,167,1,9,33,255,32,26,0,0,0,0,72,210,1,0,68,0,0,0,16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15,0,0,0,0,0,116,0,0,0,18,0,0,0,34,0,0,0,66,0,0,0,104,0,0,0,52,0,0,0,94,0,0,0,62,0,0,0,94,0,0,0,10,0,0,0,154,0,0,0,50,0,0,0,48,0,0,0,20,0,0,0,2,0,0,0,36,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,10,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,16,12,19,28,30,3,13,31,32,33,34,35,27,26,17,25,25,25,25,25,25,25,25,25,25,22,18,2,14,11,15,28,24,24,24,
+24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,28,4,28,22,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,36,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,22,28,28,28,28,28,28,28,28,28,28,22,28,26,28,28,22,28,28,28,28,28,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
+22,22,22,22,22,22,22,22,22,22,22,28,22,22,22,22,22,22,22,22],"i8",L,l.J+61457);D([1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,10,0,0,0,12,0,0,0,14,0,0,0,16,0,0,0,20,0,0,0,24,0,0,0,28,0,0,0,32,0,0,0,40,0,0,0,48,0,0,0,56,0,0,0,64,0,0,0,80,0,0,0,96,0,0,0,112,0,0,0,128,0,0,0,160,0,0,0,192,0,0,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,6,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,24,0,0,0,32,0,0,0,48,0,0,0,64,0,0,0,96,0,0,0,128,0,0,0,192,0,0,0,0,1,0,0,128,1,0,0,0,2,0,
+0,0,3,0,0,0,4,0,0,0,6,0,0,0,8,0,0,0,12,0,0,0,16,0,0,0,24,0,0,0,32,0,0,0,48,0,0,0,64,0,0,0,96,0,0,16,164,2,0,208,163,2,0,200,163,2,0,192,163,2,0,224,163,2,0,232,163,2,0,152,163,2,0,136,163,2,0,38,0,0,0,96,0,0,0,36,0,0,0,100,0,0,0,70,0,0,0,26,0,0,0,4,0,0,0,156,0,0,0,42,0,0,0,106,0,0,0,112,0,0,0,54,0,0,0,28,0,0,0,74,0,0,0,12,0,0,0,24,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,21,10,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,16,12,19,28,30,3,13,31,32,33,34,35,27,26,17,25,25,25,25,25,25,25,25,25,25,22,
+18,2,14,11,15,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,20,28,4,28,22,28,24,24,24,24,24,24,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,28,36,28,28,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,
+63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,
+227,20,29,201,209,63,244,108,86,125,174,182,214,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,196,66,173,105,222,113,236,63,16,122,54,171,62,87,229,63,245,219,215,129,115,70,204,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,136,133,90,211,188,227,216,63,1,77,132,13,79,175,226,63,211,188,227,20,29,201,209,63,88,168,53,205,59,78,213,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,
+201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,1,77,132,13,79,175,226,63,1,77,132,13,79,175,226,63,1,77,132,13,79,175,226,63,181,21,251,203,238,201,225,63,204,93,75,200,7,61,240,63,16,122,54,171,62,87,229,63,16,122,54,171,62,87,229,63,210,111,95,7,206,25,231,63,210,111,
+95,7,206,25,231,63,16,122,54,171,62,87,229,63,120,11,36,40,126,140,227,63,106,222,113,138,142,228,232,63,210,111,95,7,206,25,231,63,211,188,227,20,29,201,209,63,0,0,0,0,0,0,224,63,16,122,54,171,62,87,229,63,181,21,251,203,238,201,225,63,44,212,154,230,29,167,234,63,210,111,95,7,206,25,231,63,106,222,113,138,142,228,232,63,16,122,54,171,62,87,229,63,106,222,113,138,142,228,232,63,210,111,95,7,206,25,231,63,16,122,54,171,62,87,229,63,120,11,36,40,126,140,227,63,210,111,95,7,206,25,231,63,16,122,54,
+171,62,87,229,63,134,56,214,197,109,52,238,63,16,122,54,171,62,87,229,63,16,122,54,171,62,87,229,63,120,11,36,40,126,140,227,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,166,10,70,37,117,2,222,63,181,21,251,203,238,201,225,63,72,191,125,29,56,103,204,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,0,0,0,0,0,0,224,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,211,188,227,20,29,201,209,63,181,21,251,203,238,201,225,63,181,
+21,251,203,238,201,225,63,72,191,125,29,56,103,204,63,72,191,125,29,56,103,204,63,0,0,0,0,0,0,224,63,72,191,125,29,56,103,204,63,44,212,154,230,29,167,234,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,224,63,211,188,227,20,29,201,209,63,181,21,251,203,238,201,225,63,0,0,0,0,0,0,224,63,210,111,95,7,206,25,231,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,2,154,8,27,158,
+94,213,63,224,190,14,156,51,162,208,63,2,154,8,27,158,94,213,63,1,77,132,13,79,175,226,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,
+227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,
+201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,88,168,53,205,59,78,213,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,62,232,217,172,250,92,197,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,29,56,103,68,105,111,200,63,88,168,53,205,59,78,213,63,181,21,251,203,238,201,225,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,224,63,0,0,0,0,0,0,224,63,211,188,227,20,29,201,
+209,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,181,21,251,203,238,201,225,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,231,29,167,232,72,46,225,63,162,180,55,248,194,100,214,63,72,191,125,29,56,103,204,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,181,21,251,203,238,201,225,63,0,0,0,0,0,0,240,63,0,0,0,0,0,0,240,63,211,188,227,20,29,201,209,63,120,11,36,40,126,140,227,63,211,188,227,20,29,201,209,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,
+88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,211,188,227,20,29,201,209,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,211,188,227,20,29,201,209,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,88,168,53,205,59,78,213,63,0,0,0,0,0,0,240,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,
+20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,0,0,0,0,0,0,240,63,211,188,227,20,29,201,209,63,234,149,178,12,113,172,215,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,
+211,188,227,20,29,201,209,63,181,21,251,203,238,201,225,63,106,222,113,138,142,228,232,63,0,0,0,0,0,0,240,63,152,221,147,135,133,90,215,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,196,66,173,105,222,113,236,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,72,191,125,29,
+56,103,204,63,120,11,36,40,126,140,227,63,134,56,214,197,109,52,238,63,120,11,36,40,126,140,227,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,211,188,227,20,29,201,209,63,1,0,0,0,64,95,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,96,0,0,0,0,0,0,0,0,0,0,3,0,0,0,128,98,0,0,3,0,0,0,88,98,0,0,3,0,0,0,200,97,0,0,3,0,0,0,80,97,0,0,3,0,0,0,16,97,0,0,3,0,0,0,232,96,0,0,3,0,0,0,168,96,0,0,3,0,0,0,160,97,0,0,3,0,0,0,224,186,2,0,0,0,0,0,248,90,0,0,0,0,0,0,208,90,0,0,0,0,0,0,168,
+90,0,0,0,0,0,0,88,90,0,0,0,0,0,0,48,90,0,0,0,0,0,0,8,90,0,0,0,0,0,0,224,89,0,0,0,0,0,0,128,90,0,0,0,0,0,0,160,186,2,0,4,0,0,0,88,91,0,0,0,0,0,0,0,0,0,0,8,153,1,0,40,151,1,0,184,148,1,0,16,146,1,0,96,142,1,0,0,0,0,0,0,0,0,0,128,65,3,0,0,0,0,0,80,2,2,0,1,0,0,0,184,249,1,0,7,0,0,0,16,237,1,0,3,0,0,0,64,227,1,0,5,0,0,0,216,219,1,0,15,0,0,0,168,216,1,0,8,0,0,0,168,216,1,0,16,0,0,0,128,213,1,0,4,0,0,0,128,213,1,0,17,0,0,0,80,210,1,0,5,0,0,0,80,210,1,0,2,0,0,0,168,207,1,0,6,0,0,0,16,204,1,0,4,0,0,0,120,
+200,1,0,7,0,0,0,224,196,1,0,7,0,0,0,192,191,1,0,5,0,0,0,104,188,1,0,8,0,0,0,80,186,1,0,8,0,0,0,104,188,1,0,9,0,0,0,32,184,1,0,7,0,0,0,56,182,1,0,10,0,0,0,248,179,1,0,7,0,0,0,104,177,1,0,11,0,0,0,120,174,1,0,6,0,0,0,184,171,1,0,12,0,0,0,136,168,1,0,9,0,0,0,184,171,1,0,13,0,0,0,152,164,1,0,8,0,0,0,240,161,1,0,14,0,0,0,72,160,1,0,8,0,0,0,144,158,1,0,18,0,0,0,168,156,1,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,110,114,0,0,0,0,0,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,
+47,50,48,48,48,47,120,109,108,110,115,47,0,0,0,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,88,77,76,47,49,57,57,56,47,110,97,109,101,115,112,97,99,101,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,23,17,2,2,2,2,2,2,2,2,2,2,2,2,2,18,16,2,19,2,2,22,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,20,2,21,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,14,2,15,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,3,4,5,6,7,8,9,10,11,12,13,0,0,0,34,12,13,14,35,15,9,16,17,10,16,17,201,16,17,45,69,70,252,1,6,246,15,7,246,36,2,16,17,47,48,54,77,78,40,38,59,60,42,54,49,57,61,63,47,58,64,216,68,48,62,37,55,67,53,75,43,56,73,76,0,0,0,0,0,2,2,1,0,3,3,1,0,1,0,1,1,1,0,2,1,1,0,2,2,3,1,1,0,0,5,0,1,3,1,3,5,3,1,1,1,1,2,
+0,1,0,4,2,0,2,1,1,3,2,1,0,3,2,1,0,1,1,0,1,1,1,3,0,0,24,25,25,25,26,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,36,36,38,39,37,37,40,40,41,41,41,42,42,43,43,43,44,44,45,45,46,47,47,48,49,49,50,51,52,54,53,55,55,55,56,56,56,57,57,58,58,0,238,238,255,238,238,238,238,238,238,31,32,238,0,239,238,238,238,12,238,238,238,8,13,238,238,238,248,238,238,238,238,238,238,245,238,0,0,0,0,0,18,238,238,20,9,3,238,254,238,238,238,1,238,238,238,1,238,238,10,254,238,19,25,21,238,19,1,238,238,238,238,11,17,238,238,
+238,238,238,238,238,238,238,1,238,238,22,9,1,1,29,15,23,238,238,26,23,27,238,238,28,238,238,238,238,1,25,251,238,238,238,1,238,16,238,238,30,238,238,238,238,255,3,8,4,33,5,11,18,19,39,20,21,22,41,50,65,23,24,25,26,44,51,52,66,71,72,27,74,28,29,46,30,79,31,32,0,0,0,0,0,0,3,9,0,0,0,1,14,2,11,12,8,35,36,37,54,59,61,0,13,16,18,27,22,28,18,39,50,34,23,51,30,60,6,7,53,5,15,17,20,24,41,0,19,41,0,0,0,0,0,55,21,40,29,30,0,33,38,52,31,48,62,25,44,0,27,0,32,26,42,0,43,58,46,47,0,49,56,57,45,11,3,4,5,15,7,3,
+12,13,6,12,13,14,12,13,26,21,22,0,1,0,3,7,14,6,15,8,12,13,18,19,42,16,17,9,16,47,48,17,50,23,19,13,20,18,46,18,20,65,19,50,19,44,64,42,66,25,44,66,70,0,0,0,0,0,0,10,0,11,0,12,0,13,0,14,0,10,0,15,0,16,0,17,0,18,0,19,0,10,0,20,0,21,0,21,0,21,0,22,0,23,0,21,0,24,0,21,0,21,0,25,0,21,0,21,0,21,0,26,0,21,0,21,0,10,0,21,0,21,0,21,0,22,0,23,0,24,0,21,0,21,0,25,0,21,0,21,0,21,0,26,0,21,0,21,0,12,0,12,0,35,0,29,0,29,0,31,0,32,0,31,0,32,0,35,0,36,0,37,0,44,0,49,0,46,0,45,0,41,0,36,0,37,0,39,0,40,0,50,0,41,0,
+51,0,42,0,52,0,53,0,54,0,58,0,49,0,48,0,59,0,33,0,66,0,33,0,61,0,62,0,67,0,50,0,51,0,68,0,52,0,53,0,54,0,46,0,88,0,41,0,43,0,88,0,66,0,65,0,69,0,71,0,67,0,70,0,88,0,58,0,68,0,88,0,59,0,88,0,72,0,65,0,73,0,43,0,74,0,75,0,78,0,69,0,71,0,70,0,76,0,77,0,79,0,80,0,43,0,81,0,72,0,82,0,83,0,73,0,74,0,84,0,75,0,78,0,85,0,86,0,76,0,77,0,79,0,87,0,80,0,81,0,88,0,82,0,83,0,27,0,88,0,88,0,84,0,88,0,85,0,86,0,88,0,88,0,88,0,87,0,28,0,28,0,28,0,28,0,28,0,28,0,28,0,30,0,30,0,30,0,30,0,30,0,30,0,30,0,34,0,34,0,34,
+0,34,0,34,0,34,0,34,0,38,0,88,0,38,0,38,0,38,0,38,0,38,0,47,0,47,0,55,0,88,0,55,0,55,0,55,0,55,0,55,0,56,0,88,0,56,0,88,0,56,0,56,0,56,0,57,0,88,0,57,0,57,0,57,0,57,0,57,0,60,0,60,0,88,0,60,0,60,0,60,0,60,0,63,0,88,0,63,0,63,0,63,0,63,0,64,0,88,0,64,0,64,0,64,0,64,0,64,0,9,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,
+0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,1,0,0,0,5,0,0,0,1,0,0,0,6,0,0,0,7,0,0,0,7,0,0,0,1,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,3,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,2,0,0,
+0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,4,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,6,0,0,0,1,0,0,0,1,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,10,0,0,0,1,0,0,0,1,0,0,0,11,0,0,0,1,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,18,0,0,0,19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,
+0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,19,0,0,0,26,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,1,0,0,0,30,0,0,0,1,0,0,0,1,0,0,0,19,0,0,0,1,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0,34,0,0,0,35,0,0,0,19,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,39,0,0,0,40,0,0,0,41,0,0,0,19,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,45,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,19,0,0,0,19,0,0,0,19,0,
+0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,
+0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,
+19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,88,0,1,0,89,0,89,0,90,0,90,0,91,0,91,0,88,0,88,0,88,0,88,0,88,0,92,0,88,0,88,0,88,0,93,0,88,0,88,0,94,0,94,0,94,0,94,0,94,0,94,0,95,0,96,0,97,0,98,0,98,0,88,0,88,0,99,0,88,0,88,0,88,0,92,0,88,0,88,0,93,0,88,0,93,0,88,0,100,0,93,0,88,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,95,0,96,0,97,0,97,0,88,0,98,0,88,0,88,0,99,0,100,0,93,0,94,0,94,0,94,0,94,0,94,0,94,0,
+94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,94,0,0,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3,0,4,0,7,0,3,0,4,0,5,0,5,0,6,0,6,0,8,0,7,0,7,0,17,0,22,0,18,0,17,0,18,0,8,0,8,0,15,0,15,0,23,0,15,0,24,0,15,0,25,0,26,0,26,0,29,0,22,0,94,0,29,0,5,0,49,0,6,0,33,
+0,33,0,50,0,23,0,24,0,51,0,25,0,26,0,26,0,41,0,43,0,41,0,43,0,46,0,49,0,46,0,52,0,54,0,50,0,53,0,57,0,58,0,51,0,57,0,58,0,65,0,66,0,65,0,67,0,40,0,68,0,69,0,72,0,52,0,54,0,53,0,70,0,71,0,74,0,76,0,16,0,77,0,66,0,78,0,80,0,67,0,68,0,81,0,69,0,72,0,82,0,84,0,70,0,71,0,74,0,86,0,76,0,77,0,9,0,78,0,80,0,2,0,0,0,0,0,81,0,0,0,82,0,84,0,0,0,0,0,0,0,86,0,89,0,89,0,89,0,89,0,89,0,89,0,89,0,90,0,90,0,90,0,90,0,90,0,90,0,90,0,91,0,91,0,91,0,91,0,91,0,91,0,91,0,92,0,0,0,92,0,92,0,92,0,92,0,92,0,93,0,93,0,95,
+0,0,0,95,0,95,0,95,0,95,0,95,0,96,0,0,0,96,0,0,0,96,0,96,0,96,0,97,0,0,0,97,0,97,0,97,0,97,0,97,0,98,0,98,0,0,0,98,0,98,0,98,0,98,0,99,0,0,0,99,0,99,0,99,0,99,0,100,0,0,0,100,0,100,0,100,0,100,0,100,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,88,0,0,0,0,0,0,0,0,0,137,0,43,0,44,0,48,0,50,0,45,0,52,0,139,0,224,0,224,0,
+224,0,224,0,0,0,58,0,111,0,52,0,52,0,224,0,224,0,0,0,37,0,50,0,43,0,47,0,44,0,0,0,0,0,68,0,0,0,0,0,224,0,78,0,0,0,224,0,224,0,224,0,0,0,224,0,100,0,82,0,224,0,83,0,224,0,0,0,86,0,224,0,0,0,59,0,63,0,72,0,80,0,74,0,83,0,0,0,0,0,95,0,96,0,224,0,0,0,224,0,224,0,0,0,0,0,98,0,81,0,91,0,86,0,94,0,95,0,98,0,99,0,0,0,98,0,0,0,104,0,96,0,99,0,0,0,97,0,114,0,110,0,0,0,107,0,0,0,115,0,0,0,224,0,152,0,159,0,166,0,173,0,176,0,70,0,182,0,189,0,196,0,203,0,210,0,216,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,25,0,25,0,30,
+0,30,0,33,0,31,0,10,0,2,0,21,0,9,0,31,0,31,0,31,0,20,0,26,0,1,0,19,0,19,0,19,0,19,0,19,0,19,0,8,0,4,0,5,0,25,0,2,0,22,0,25,0,30,0,29,0,28,0,27,0,9,0,18,0,0,0,20,0,17,0,20,0,3,0,7,0,20,0,20,0,19,0,19,0,19,0,19,0,19,0,19,0,19,0,8,0,4,0,5,0,5,0,6,0,25,0,24,0,23,0,30,0,7,0,20,0,19,0,19,0,19,0,19,0,19,0,19,0,19,0,12,0,19,0,11,0,19,0,19,0,19,0,13,0,19,0,19,0,19,0,15,0,19,0,14,0,19,0,16,0,0,0,0,0,0,0,0,0,112,111,108,121,32,37,115,0,47,114,100,98,117,52,47,50,0,0,0,0,0,0,0,0,47,114,100,98,117,52,47,49,0,
+0,0,0,0,0,0,0,47,114,100,98,117,51,47,51,0,0,0,0,0,0,0,0,47,114,100,98,117,51,47,50,0,0,0,0,0,0,0,0,60,33,45,45,32,80,97,103,101,115,58,32,37,100,32,45,45,62,10,0,0,0,0,0,47,114,100,98,117,51,47,49,0,0,0,0,0,0,0,0,47,114,100,98,117,49,49,47,57,0,0,0,0,0,0,0,47,115,101,116,95,115,99,97,108,101,32,123,0,0,0,0,90,101,116,97,0,0,0,0,109,97,114,103,105,110,0,0,109,105,100,110,105,103,104,116,98,108,117,101,0,0,0,0,47,114,100,98,117,49,49,47,56,0,0,0,0,0,0,0,100,101,99,111,114,97,116,101,0,0,0,0,0,0,0,
+0,116,97,114,103,101,116,0,0,47,114,100,98,117,49,49,47,55,0,0,0,0,0,0,0,47,114,100,98,117,49,49,47,54,0,0,0,0,0,0,0,47,114,100,98,117,49,49,47,53,0,0,0,0,0,0,0,47,98,114,98,103,51,47,50,0,0,0,0,0,0,0,0,47,114,100,98,117,49,49,47,52,0,0,0,0,0,0,0,106,112,103,58,102,105,103,0,47,114,100,98,117,49,49,47,51,0,0,0,0,0,0,0,47,114,100,98,117,49,49,47,50,0,0,0,0,0,0,0,47,114,100,98,117,49,49,47,49,49,0,0,0,0,0,0,60,47,84,73,84,76,69,62,0,0,0,0,0,0,0,0,47,114,100,98,117,49,49,47,49,48,0,0,0,0,0,0,47,114,
+100,98,117,49,49,47,49,0,0,0,0,0,0,0,47,73,110,118,83,99,97,108,101,70,97,99,116,111,114,32,49,46,48,32,100,101,102,0,89,117,109,108,0,0,0,0,92,78,0,0,0,0,0,0,109,101,100,105,117,109,118,105,111,108,101,116,114,101,100,0,47,114,100,98,117,49,48,47,57,0,0,0,0,0,0,0,109,105,110,108,101,110,0,0,104,101,97,100,85,82,76,0,47,114,100,98,117,49,48,47,56,0,0,0,0,0,0,0,47,114,100,98,117,49,48,47,55,0,0,0,0,0,0,0,47,114,100,98,117,49,48,47,54,0,0,0,0,0,0,0,47,98,114,98,103,51,47,49,0,0,0,0,0,0,0,0,47,114,100,
+98,117,49,48,47,53,0,0,0,0,0,0,0,47,114,100,98,117,49,48,47,52,0,0,0,0,0,0,0,118,101,101,0,0,0,0,0,47,114,100,98,117,49,48,47,51,0,0,0,0,0,0,0,47,114,100,98,117,49,48,47,50,0,0,0,0,0,0,0,60,84,73,84,76,69,62,0,47,114,100,98,117,49,48,47,49,48,0,0,0,0,0,0,47,114,100,98,117,49,48,47,49,0,0,0,0,0,0,0,47,99,111,111,114,100,102,111,110,116,32,99,111,111,114,100,45,102,111,110,116,45,102,97,109,105,108,121,32,102,105,110,100,102,111,110,116,32,56,32,115,99,97,108,101,102,111,110,116,32,100,101,102,0,0,
+0,89,97,99,117,116,101,0,0,98,97,100,32,108,97,98,101,108,32,102,111,114,109,97,116,32,37,115,10,0,0,0,0,109,101,100,105,117,109,116,117,114,113,117,111,105,115,101,0,47,112,117,114,112,108,101,115,57,47,57,0,0,0,0,0,108,97,98,101,108,97,110,103,108,101,0,0,0,0,0,0,46,46,46,32,37,115,32,46,46,46,10,0,0,0,0,0,114,101,109,105,110,99,114,111,115,115,0,0,0,0,0,0,104,101,97,100,104,114,101,102,0,0,0,0,0,0,0,0,47,112,117,114,112,108,101,115,57,47,56,0,0,0,0,0,47,112,117,114,112,108,101,115,57,47,55,0,0,
+0,0,0,47,112,117,114,112,108,101,115,57,47,54,0,0,0,0,0,47,98,114,98,103,49,49,47,57,0,0,0,0,0,0,0,47,112,117,114,112,108,101,115,57,47,53,0,0,0,0,0,47,112,117,114,112,108,101,115,57,47,52,0,0,0,0,0,47,112,117,114,112,108,101,115,57,47,51,0,0,0,0,0,47,112,117,114,112,108,101,115,57,47,50,0,0,0,0,0,60,77,69,84,65,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101,110,116,45,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,104,116,109,108,59,32,99,104,97,114,
+115,101,116,61,85,84,70,45,56,34,62,10,0,0,0,0,47,112,117,114,112,108,101,115,57,47,49,0,0,0,0,0,47,112,117,114,112,108,101,115,56,47,56,0,0,0,0,0,47,100,101,102,97,117,108,116,45,102,111,110,116,45,102,97,109,105,108,121,32,47,84,105,109,101,115,45,82,111,109,97,110,32,100,101,102,0,0,0,88,105,0,0,0,0,0,0,102,105,108,108,101,100,0,0,102,105,108,108,32,0,0,0,109,101,100,105,117,109,115,112,114,105,110,103,103,114,101,101,110,0,0,0,0,0,0,0,97,103,114,101,99,111,114,100,95,99,97,108,108,98,97,99,107,
+32,111,102,32,97,32,98,97,100,32,111,98,106,101,99,116,0,0,0,0,0,0,0,47,112,117,114,112,108,101,115,56,47,55,0,0,0,0,0,108,97,98,101,108,100,105,115,116,97,110,99,101,0,0,0,67,69,76,76,83,66,79,82,68,69,82,0,0,0,0,0,116,97,105,108,85,82,76,0,47,112,117,114,112,108,101,115,56,47,54,0,0,0,0,0,47,112,117,114,112,108,101,115,56,47,53,0,0,0,0,0,47,112,117,114,112,108,101,115,56,47,52,0,0,0,0,0,47,98,114,98,103,49,49,47,56,0,0,0,0,0,0,0,47,112,117,114,112,108,101,115,56,47,51,0,0,0,0,0,47,112,117,114,112,
+108,101,115,56,47,50,0,0,0,0,0,121,101,108,108,111,119,0,0,47,112,117,114,112,108,101,115,56,47,49,0,0,0,0,0,47,112,117,114,112,108,101,115,55,47,55,0,0,0,0,0,60,72,69,65,68,62,0,0,47,112,117,114,112,108,101,115,55,47,54,0,0,0,0,0,47,112,117,114,112,108,101,115,55,47,53,0,0,0,0,0,47,99,111,111,114,100,45,102,111,110,116,45,102,97,109,105,108,121,32,47,84,105,109,101,115,45,82,111,109,97,110,32,100,101,102,0,0,0,0,0,85,117,109,108,0,0,0,0,105,110,118,105,115,0,0,0,109,101,100,105,117,109,115,108,97,
+116,101,98,108,117,101,0,47,112,117,114,112,108,101,115,55,47,52,0,0,0,0,0,108,97,98,101,108,102,111,110,116,99,111,108,111,114,0,0,85,110,107,110,111,119,110,32,118,97,108,117,101,32,37,115,32,102,111,114,32,67,79,76,85,77,78,83,32,45,32,105,103,110,111,114,101,100,10,0,116,97,105,108,104,114,101,102,0,0,0,0,0,0,0,0,47,112,117,114,112,108,101,115,55,47,51,0,0,0,0,0,47,112,117,114,112,108,101,115,55,47,50,0,0,0,0,0,33,114,116,112,45,62,115,112,108,105,116,46,80,97,114,116,105,116,105,111,110,115,
+91,48,93,46,116,97,107,101,110,91,105,93,0,0,0,0,0,0,47,112,117,114,112,108,101,115,55,47,49,0,0,0,0,0,47,98,114,98,103,49,49,47,55,0,0,0,0,0,0,0,123,37,115,125,0,0,0,0,47,112,117,114,112,108,101,115,54,47,54,0,0,0,0,0,118,109,108,58,118,109,108,0,112,108,117,115,0,0,0,0,47,112,117,114,112,108,101,115,54,47,53,0,0,0,0,0,47,112,117,114,112,108,101,115,54,47,52,0,0,0,0,0,47,112,117,114,112,108,101,115,54,47,51,0,0,0,0,0,60,47,66,79,68,89,62,10,60,47,72,84,77,76,62,10,0,0,0,0,0,0,0,0,47,112,117,114,
+112,108,101,115,54,47,50,0,0,0,0,0,101,100,103,101,0,0,0,0,47,112,117,114,112,108,101,115,54,47,49,0,0,0,0,0,37,37,66,101,103,105,110,82,101,115,111,117,114,99,101,58,32,112,114,111,99,115,101,116,32,103,114,97,112,104,118,105,122,32,48,32,48,0,0,0,85,112,115,105,108,111,110,0,37,46,53,103,32,37,46,53,103,32,116,114,97,110,115,108,97,116,101,32,110,101,119,112,97,116,104,32,117,115,101,114,95,115,104,97,112,101,95,37,100,10,0,0,0,0,0,0,47,112,117,114,112,108,101,115,53,47,53,0,0,0,0,0,109,101,100,
+105,117,109,115,101,97,103,114,101,101,110,0,0,108,97,98,101,108,102,111,110,116,110,97,109,101,0,0,0,85,110,107,110,111,119,110,32,118,97,108,117,101,32,37,115,32,102,111,114,32,82,79,87,83,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,78,68,95,111,117,116,40,118,41,46,115,105,122,101,32,61,61,32,50,0,0,0,0,0,108,97,98,101,108,85,82,76,0,0,0,0,0,0,0,0,47,112,117,114,112,108,101,115,53,47,52,0,0,0,0,0,47,112,117,114,112,108,101,115,53,47,51,0,0,0,0,0,47,112,117,114,112,108,101,115,53,47,50,0,0,
+0,0,0,47,98,114,98,103,49,49,47,54,0,0,0,0,0,0,0,47,112,117,114,112,108,101,115,53,47,49,0,0,0,0,0,91,94,91,58,115,112,97,99,101,58,93,93,0,0,0,0,110,101,97,116,111,95,108,97,121,111,117,116,0,0,0,0,47,112,117,114,112,108,101,115,52,47,52,0,0,0,0,0,47,112,117,114,112,108,101,115,52,47,51,0,0,0,0,0,37,100,0,0,0,0,0,0,47,112,117,114,112,108,101,115,52,47,50,0,0,0,0,0,60,33,45,45,32,105,110,115,101,114,116,32,97,110,121,32,111,116,104,101,114,32,78,79,78,45,73,69,32,104,116,109,108,32,99,111,110,116,
+101,110,116,32,104,101,114,101,32,45,45,62,10,0,0,0,0,0,120,100,111,116,58,120,100,111,116,0,0,0,0,0,0,0,100,101,102,108,97,116,105,111,110,32,102,105,110,105,115,104,32,112,114,111,98,108,101,109,32,37,100,32,99,110,116,61,37,100,10,0,0,0,0,0,99,97,110,110,111,116,32,109,97,108,108,111,99,32,112,110,108,115,0,0,0,0,0,0,47,112,117,114,112,108,101,115,52,47,49,0,0,0,0,0,47,112,117,114,112,108,101,115,51,47,51,0,0,0,0,0,116,114,117,101,0,0,0,0,125,32,98,105,110,100,32,100,101,102,0,0,0,0,0,0,85,103,
+114,97,118,101,0,0,110,111,100,101,32,37,115,44,32,112,111,114,116,32,37,115,32,117,110,114,101,99,111,103,110,105,122,101,100,10,0,0,91,105,110,116,101,114,110,97,108,32,97,114,105,97,108,93,0,0,0,0,0,0,0,0,109,101,100,105,117,109,112,117,114,112,108,101,0,0,0,0,47,112,117,114,112,108,101,115,51,47,50,0,0,0,0,0,108,97,98,101,108,102,111,110,116,115,105,122,101,0,0,0,114,111,119,115,0,0,0,0,108,97,98,101,108,104,114,101,102,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,47,112,117,114,112,108,101,115,51,47,49,0,
+0,0,0,0,119,0,0,0,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,105,110,32,99,104,101,99,107,112,97,116,104,44,32,98,111,120,32,48,32,104,97,115,32,76,76,32,99,111,111,114,100,32,62,32,85,82,32,99,111,111,114,100,10,0,0,0,0,47,112,117,114,100,57,47,57,0,0,0,0,0,0,0,0,84,82,65,73,76,69,82,0,47,97,99,99,101,110,116,53,47,49,0,0,0,0,0,0,101,100,103,101,0,0,0,0,116,114,111,117,98,108,101,32,105,110,32,105,110,105,116,95,114,97,110,107,10,0,0,0,10,102,105,110,97,108,32,101,32,61,32,37,
+102,0,0,0,38,103,116,59,0,0,0,0,47,112,117,114,100,57,47,56,0,0,0,0,0,0,0,0,47,98,114,98,103,49,49,47,53,0,0,0,0,0,0,0,37,115,58,37,115,0,0,0,110,111,100,101,0,0,0,0,47,112,117,114,100,57,47,55,0,0,0,0,0,0,0,0,83,101,116,116,105,110,103,32,117,112,32,115,116,114,101,115,115,32,102,117,110,99,116,105,111,110,0,0,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,100,101,108,120,32,62,61,32,48,0,0,0,0,0,0,0,47,112,117,114,100,57,47,54,0,0,0,0,0,0,0,0,84,68,0,0,0,0,0,0,47,112,117,114,100,
+57,47,53,0,0,0,0,0,0,0,0,101,115,101,112,0,0,0,0,47,112,117,114,100,57,47,52,0,0,0,0,0,0,0,0,60,68,73,86,32,105,100,61,39,95,110,111,116,86,77,76,50,95,39,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,34,62,10,0,0,0,0,0,0,0,0,37,115,32,45,62,32,37,115,58,32,104,101,97,100,32,105,115,32,105,110,115,105,100,101,32,116,97,105,108,32,99,108,117,115,116,101,114,32,37,115,10,0,0,0,0,0,0,0,110,111,100,101,0,0,0,0,47,112,117,114,100,57,47,51,0,0,0,0,0,0,
+0,0,47,112,117,114,100,57,47,50,0,0,0,0,0,0,0,0,99,108,101,97,114,116,111,109,97,114,107,0,0,0,0,0,111,114,116,104,111,103,111,110,97,108,32,108,105,110,101,115,0,0,0,0,0,0,0,0,85,99,105,114,99,0,0,0,110,111,100,101,32,37,115,44,32,112,111,114,116,32,37,115,44,32,117,110,114,101,99,111,103,110,105,122,101,100,32,99,111,109,112,97,115,115,32,112,111,105,110,116,32,39,37,115,39,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,109,101,100,105,117,109,111,114,99,104,105,100,0,0,0,0,47,112,117,114,100,
+57,47,49,0,0,0,0,0,0,0,0,116,97,105,108,108,97,98,101,108,0,0,0,0,0,0,0,99,111,108,117,109,110,115,0,101,100,103,101,85,82,76,0,98,105,115,113,117,101,0,0,47,112,117,114],"i8",L,l.J+71716);D([100,56,47,56,0,0,0,0,0,0,0,0,47,112,117,114,100,56,47,55,0,0,0,0,0,0,0,0,47,112,117,114,100,56,47,54,0,0,0,0,0,0,0,0,47,98,114,98,103,49,49,47,52,0,0,0,0,0,0,0,47,112,117,114,100,56,47,53,0,0,0,0,0,0,0,0,44,10,0,0,0,0,0,0,110,111,100,101,32,37,115,32,105,110,32,103,114,97,112,104,32,37,115,32,104,97,115,32,110,
+111,32,112,111,115,105,116,105,111,110,10,0,0,0,0,47,112,117,114,100,56,47,52,0,0,0,0,0,0,0,0,37,115,32,115,97,118,101,32,112,111,105,110,116,32,115,105,122,101,32,97,110,100,32,102,111,110,116,10,46,110,114,32,46,83,32,92,110,40,46,115,10,46,110,114,32,68,70,32,92,110,40,46,102,10,0,0,47,112,117,114,100,56,47,51,0,0,0,0,0,0,0,0,127,98,111,116,0,0,0,0,47,112,117,114,100,56,47,50,0,0,0,0,0,0,0,0,60,72,50,62,83,111,114,114,121,44,32,116,104,105,115,32,100,105,97,103,114,97,109,32,119,105,108,108,32,
+111,110,108,121,32,100,105,115,112,108,97,121,32,99,111,114,114,101,99,116,108,121,32,111,110,32,73,110,116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,32,53,32,40,97,110,100,32,117,112,41,32,98,114,111,119,115,101,114,115,46,60,47,72,50,62,10,0,0,0,0,0,47,112,117,114,100,56,47,49,0,0,0,0,0,0,0,0,104,112,0,0,0,0,0,0,37,108,102,37,50,115,0,0,115,101,116,108,105,110,101,119,105,100,116,104,0,0,0,0,47,112,117,114,100,55,47,55,0,0,0,0,0,0,0,0,47,67,111,117,114,105,101,114,45,66,111,108,100,
+79,98,108,105,113,117,101,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,0,0,0,85,97,99,117,116,101,0,0,102,108,101,120,32,115,99,97,110,110,101,114,32,112,117,115,104,45,98,97,99,107,32,111,118,101,114,102,108,111,119,0,95,0,0,0,0,0,0,0,109,101,100,105,117,109,98,108,117,101,0,0,0,0,0,0,47,112,117,114,100,55,47,54,0,0,0,0,0,0,0,0,104,101,97,100,108,97,98,101,108,0,0,0,0,0,0,0,99,101,108,108,98,111,114,100,101,114,0,0,0,0,0,0,101,100,103,101,104,114,101,102,0,0,0,0,0,0,0,0,47,112,117,114,
+100,55,47,53,0,0,0,0,0,0,0,0,117,110,102,105,108,108,101,100,0,0,0,0,0,0,0,0,47,112,117,114,100,55,47,52,0,0,0,0,0,0,0,0,111,117,116,0,0,0,0,0,47,112,117,114,100,55,47,51,0,0,0,0,0,0,0,0,47,98,114,98,103,49,49,47,51,0,0,0,0,0,0,0,47,112,117,114,100,55,47,50,0,0,0,0,0,0,0,0,47,112,117,114,100,55,47,49,0,0,0,0,0,0,0,0,37,115,32,84,105,116,108,101,58,32,37,115,10,0,0,0,47,112,117,114,100,54,47,54,0,0,0,0,0,0,0,0,47,112,117,114,100,54,47,53,0,0,0,0,0,0,0,0,60,33,45,45,32,116,104,105,115,32,115,104,111,
+117,108,100,32,111,110,108,121,32,100,105,115,112,108,97,121,32,111,110,32,78,79,78,45,73,69,32,98,114,111,119,115,101,114,115,32,45,45,62,10,0,0,0,47,112,117,114,100,54,47,52,0,0,0,0,0,0,0,0,47,112,117,114,100,54,47,51,0,0,0,0,0,0,0,0,47,67,111,117,114,105,101,114,45,66,111,108,100,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,0,0,84,104,101,116,97,0,0,0,119,101,100,103,101,100,0,0,109,101,100,105,117,109,97,113,117,97,109,97,114,105,110,101,0,0,0,0,0,0,0,0,47,112,117,114,100,54,47,50,
+0,0,0,0,0,0,0,0,97,114,114,111,119,116,97,105,108,0,0,0,0,0,0,0,60,84,65,66,76,69,62,0,85,82,76,0,0,0,0,0,47,112,117,114,100,54,47,49,0,0,0,0,0,0,0,0,47,112,117,114,100,53,47,53,0,0,0,0,0,0,0,0,47,112,117,114,100,53,47,52,0,0,0,0,0,0,0,0,47,98,114,98,103,49,49,47,50,0,0,0,0,0,0,0,100,117,112,108,105,99,97,116,101,32,97,116,116,114,105,98,117,116,101,0,0,0,0,0,47,112,117,114,100,53,47,51,0,0,0,0,0,0,0,0,99,105,114,99,108,101,32,37,115,32,37,100,44,37,100,44,37,100,10,0,0,0,0,0,47,112,117,114,100,53,
+47,50,0,0,0,0,0,0,0,0,37,115,32,67,114,101,97,116,111,114,58,32,37,115,32,118,101,114,115,105,111,110,32,37,115,32,40,37,115,41,10,0,47,112,117,114,100,53,47,49,0,0,0,0,0,0,0,0,47,112,117,114,100,52,47,52,0,0,0,0,0,0,0,0,60,68,73,86,32,105,100,61,39,95,110,111,116,86,77,76,49,95,39,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,34,62,10,0,0,0,0,0,0,0,0,47,112,117,114,100,52,47,51,0,0,0,0,0,0,0,0,47,112,117,114,100,52,47,50,0,0,0,0,0,0,0,0,47,67,111,
+117,114,105,101,114,45,79,98,108,105,113,117,101,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,84,97,117,0,0,0,0,0,115,116,114,105,112,101,100,0,109,97,114,111,111,110,0,0,47,112,117,114,100,52,47,49,0,0,0,0,0,0,0,0,97,114,114,111,119,104,101,97,100,0,0,0,0,0,0,0,73,108,108,101,103,97,108,32,118,97,108,117,101,32,37,115,32,102,111,114,32,65,76,73,71,78,32,105,110,32,84,68,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,0,104,114,101,102,0,0,0,0,47,112,117,114,100,51,47,51,0,0,0,0,0,0,0,
+0,47,112,117,114,100,51,47,50,0,0,0,0,0,0,0,0,47,112,117,114,100,51,47,49,0,0,0,0,0,0,0,0,47,98,114,98,103,49,49,47,49,49,0,0,0,0,0,0,47,112,117,111,114,57,47,57,0,0,0,0,0,0,0,0,106,112,101,58,102,105,103,0,47,112,117,111,114,57,47,56,0,0,0,0,0,0,0,0,37,115,32,114,101,115,116,111,114,101,32,112,111,105,110,116,32,115,105,122,101,32,97,110,100,32,102,111,110,116,10,46,112,115,32,92,110,40,46,83,10,46,102,116,32,92,110,40,68,70,10,0,0,0,0,0,47,112,117,111,114,57,47,55,0,0,0,0,0,0,0,0,47,112,117,111,
+114,57,47,54,0,0,0,0,0,0,0,0,60,33,45,45,32,105,110,115,101,114,116,32,97,110,121,32,111,116,104,101,114,32,104,116,109,108,32,99,111,110,116,101,110,116,32,104,101,114,101,32,45,45,62,10,0,0,0,0,47,112,117,111,114,57,47,53,0,0,0,0,0,0,0,0,47,112,117,111,114,57,47,52,0,0,0,0,0,0,0,0,47,67,111,117,114,105,101,114,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,84,72,79,82,78,0,0,0,114,97,100,105,97,108,0,0,109,97,103,101,110,116,97,0,47,112,117,111,114,57,47,51,0,0,0,0,0,0,0,0,100,105,114,
+0,0,0,0,0,69,88,84,0,0,0,0,0,32,45,45,32,0,0,0,0,47,112,117,111,114,57,47,50,0,0,0,0,0,0,0,0,105,110,99,111,109,112,97,116,105,98,108,101,32,118,101,114,115,105,111,110,0,0,0,0,47,112,117,111,114,57,47,49,0,0,0,0,0,0,0,0,47,112,117,111,114,56,47,56,0,0,0,0,0,0,0,0,47,98,114,98,103,49,49,47,49,48,0,0,0,0,0,0,112,110,103,58,115,118,103,0,47,112,117,111,114,56,47,55,0,0,0,0,0,0,0,0,47,112,117,111,114,56,47,54,0,0,0,0,0,0,0,0,47,112,117,111,114,56,47,53,0,0,0,0,0,0,0,0,37,115,37,115,32,117,110,115,117,
+112,112,111,114,116,101,100,10,0,0,0,0,0,0,0,105,110,118,0,0,0,0,0,47,112,117,111,114,56,47,52,0,0,0,0,0,0,0,0,60,68,73,86,32,105,100,61,39,95,86,77,76,50,95,39,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,118,105,115,105,98,105,108,105,116,121,58,104,105,100,100,101,110,34,62,10,0,0,47,112,117,111,114,56,47,51,0,0,0,0,0,0,0,0,47,112,117,111,114,56,47,50,0,0,0,0,0,0,0,0,47,72,101,108,118,101,116,105,99,97,45,66,111,108,100,79,98,108,105,113,117,
+101,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,0,83,105,103,109,97,0,0,0,105,110,118,105,115,0,0,0,108,105,110,101,110,0,0,0,47,112,117,111,114,56,47,49,0,0,0,0,0,0,0,0,108,97,98,101,108,102,108,111,97,116,0,0,0,0,0,0,73,108,108,101,103,97,108,32,118,97,108,117,101,32,37,115,32,102,111,114,32,66,65,76,73,71,78,32,105,110,32,84,68,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,32,45,62,32,0,0,0,0,47,112,117,111,114,55,47,55,0,0,0,0,0,0,0,0,47,112,117,111,114,55,47,54,0,0,0,0,0,0,0,
+0,47,112,117,111,114,55,47,53,0,0,0,0,0,0,0,0,47,98,114,98,103,49,49,47,49,0,0,0,0,0,0,0,47,112,117,111,114,55,47,52,0,0,0,0,0,0,0,0,47,112,117,111,114,55,47,51,0,0,0,0,0,0,0,0,100,101,102,105,110,101,32,97,116,116,114,115,48,32,37,37,32,37,37,59,32,100,101,102,105,110,101,32,117,110,102,105,108,108,101,100,32,37,37,32,37,37,59,32,100,101,102,105,110,101,32,114,111,117,110,100,101,100,32,37,37,32,37,37,59,32,100,101,102,105,110,101,32,100,105,97,103,111,110,97,108,115,32,37,37,32,37,37,10,0,0,0,0,
+0,0,0,47,112,117,111,114,55,47,50,0,0,0,0,0,0,0,0,47,112,117,111,114,55,47,49,0,0,0,0,0,0,0,0,60,47,68,73,86,62,10,0,47,112,117,111,114,54,47,54,0,0,0,0,0,0,0,0,47,112,117,111,114,54,47,53,0,0,0,0,0,0,0,0,109,97,112,0,0,0,0,0,83,99,97,114,111,110,0,0,100,105,97,103,111,110,97,108,115,0,0,0,0,0,0,0,101,108,108,105,112,115,101,32,97,116,116,114,115,37,100,32,37,115,119,105,100,32,37,46,53,102,32,104,116,32,37,46,53,102,32,97,116,32,40,37,46,53,102,44,37,46,53,102,41,59,10,0,0,0,0,0,108,105,109,101,
+103,114,101,101,110,0,0,0,0,0,0,0,47,112,117,111,114,54,47,52,0,0,0,0,0,0,0,0,119,101,105,103,104,116,0,0,66,79,82,68,69,82,0,0,105,110,32,101,100,103,101,32,37,115,37,115,37,115,10,0,111,117,116,32,111,102,32,109,101,109,111,114,121,10,0,0,47,112,117,111,114,54,47,51,0,0,0,0,0,0,0,0,47,72,101,108,118,101,116,105,99,97,45,66,111,108,100,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,47,112,117,111,114,54,47,50,0,0,0,0,0,0,0,0,47,112,117,111,114,54,47,49,0,0,0,0,0,0,0,0,47,98,114,98,103,
+49,48,47,57,0,0,0,0,0,0,0,118,103,0,0,0,0,0,0,47,112,117,111,114,53,47,53,0,0,0,0,0,0,0,0,47,112,117,111,114,53,47,52,0,0,0,0,0,0,0,0,68,111,116,58,32,91,10,0,47,112,117,111,114,53,47,51,0,0,0,0,0,0,0,0,119,104,105,116,101,0,0,0,47,112,117,111,114,53,47,50,0,0,0,0,0,0,0,0,60,47,118,58,103,114,111,117,112,62,10,0,0,0,0,0,47,112,117,111,114,53,47,49,0,0,0,0,0,0,0,0,47,112,117,111,114,52,47,52,0,0,0,0,0,0,0,0,47,72,101,108,118,101,116,105,99,97,45,79,98,108,105,113,117,101,32,115,116,97,114,110,101,
+116,73,83,79,32,100,101,102,0,0,0,0,0,0,0,82,104,111,0,0,0,0,0,114,111,117,110,100,101,100,0,108,105,109,101,0,0,0,0,47,112,117,111,114,52,47,51,0,0,0,0,0,0,0,0,122,0,0,0,0,0,0,0,67,69,76,76,80,65,68,68,73,78,71,0,0,0,0,0,110,111,110,101,0,0,0,0,47,112,117,111,114,52,47,50,0,0,0,0,0,0,0,0,47,112,117,111,114,52,47,49,0,0,0,0,0,0,0,0,47,112,117,111,114,51,47,51,0,0,0,0,0,0,0,0,47,98,114,98,103,49,48,47,56,0,0,0,0,0,0,0,114,116,112,45,62,115,112,108,105,116,46,80,97,114,116,105,116,105,111,110,115,91,
+48,93,46,99,111,117,110,116,91,48,93,32,62,61,32,114,116,112,45,62,77,105,110,70,105,108,108,32,38,38,32,114,116,112,45,62,115,112,108,105,116,46,80,97,114,116,105,116,105,111,110,115,91,48,93,46,99,111,117,110,116,91,49,93,32,62,61,32,114,116,112,45,62,77,105,110,70,105,108,108,0,0,47,112,117,111,114,51,47,50,0,0,0,0,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,118,109,108,0,0,0,0,0,47,112,117,111,114,51,47,49,0,0,0,0,0,0,0,0,75,80,95,68,111,119,110,0,109,97,120,112,115,104,116,
+32,61,32,37,102,10,109,97,120,112,115,119,105,100,32,61,32,37,102,10,0,0,0,0,0,47,112,117,111,114,49,49,47,57,0,0,0,0,0,0,0,47,112,117,111,114,49,49,47,56,0,0,0,0,0,0,0,62,10,0,0,0,0,0,0,47,112,117,111,114,49,49,47,55,0,0,0,0,0,0,0,110,111,100,101,0,0,0,0,47,112,117,111,114,49,49,47,54,0,0,0,0,0,0,0,47,72,101,108,118,101,116,105,99,97,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,0,0,0,0,0,80,115,105,0,0,0,0,0,102,105,108,108,101,100,0,0,108,105,103,104,116,121,101,108,108,111,119,0,0,
+0,0,0,47,112,117,111,114,49,49,47,53,0,0,0,0,0,0,0,118,101,114,116,105,99,101,115,0,0,0,0,0,0,0,0,67,69,76,76,83,80,65,67,73,78,71,0,0,0,0,0,98,111,116,104,0,0,0,0,47,112,117,111,114,49,49,47,52,0,0,0,0,0,0,0,47,112,117,111,114,49,49,47,51,0,0,0,0,0,0,0,47,112,117,111,114,49,49,47,50,0,0,0,0,0,0,0,47,98,114,98,103,49,48,47,55,0,0,0,0,0,0,0,47,112,117,111,114,49,49,47,49,49,0,0,0,0,0,0,91,91,58,115,112,97,99,101,58,93,93,0,0,0,0,0,110,111,112,50,0,0,0,0,47,112,117,111,114,49,49,47,49,48,0,0,0,0,0,
+0,37,115,32,109,97,120,112,115,104,116,32,97,110,100,32,109,97,120,112,115,119,105,100,32,97,114,101,32,112,114,101,100,101,102,105,110,101,100,32,116,111,32,49,49,46,48,32,97,110,100,32,56,46,53,32,105,110,32,103,112,105,99,10,0,47,112,117,111,114,49,49,47,49,0,0,0,0,0,0,0,47,112,117,111,114,49,48,47,57,0,0,0,0,0,0,0,32,116,97,114,103,101,116,61,34,37,115,34,0,0,0,0,112,108,97,105,110,45,101,120,116,58,100,111,116,0,0,0,111,114,100,101,114,0,0,0,99,97,110,110,111,116,32,114,101,97,108,108,111,99,
+32,100,113,46,112,110,108,115,0,0,47,112,117,111,114,49,48,47,56,0,0,0,0,0,0,0,47,112,117,111,114,49,48,47,55,0,0,0,0,0,0,0,110,111,0,0,0,0,0,0,47,84,105,109,101,115,45,66,111,108,100,73,116,97,108,105,99,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,0,0,0,0,0,0,80,114,105,109,101,0,0,0,104,101,108,118,101,116,105,99,97,0,0,0,0,0,0,0,47,112,117,111,114,49,48,47,54,0,0,0,0,0,0,0,108,105,103,104,116,115,116,101,101,108,98,108,117,101,0,0,99,111,109,109,101,110,116,0,67,79,76,83,80,65,78,
+32,118,97,108,117,101,32,99,97,110,110,111,116,32,98,101,32,48,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,98,97,99,107,0,0,0,0,47,112,117,111,114,49,48,47,53,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,85,110,97,98,108,101,32,116,111,32,114,101,99,108,97,105,109,32,98,111,120,32,115,112,97,99,101,32,105,110,32,115,112,108,105,110,101,32,114,111,117,116,105,110,103,32,102,111,114,32,101,100,103,101,32,34,37,115,34,32,45,62,32,34,37,115,34,46,32,83,111,
+109,101,116,104,105,110,103,32,105,115,32,112,114,111,98,97,98,108,121,32,115,101,114,105,111,117,115,108,121,32,119,114,111,110,103,46,10,0,0,0,0,69,78,68,0,0,0,0,0,32,91,37,100,93,32,40,37,46,48,50,102,44,37,46,48,50,102,41,32,40,37,46,48,50,102,44,37,46,48,50,102,41,32,37,112,32,34,37,115,34,10,0,0,0,0,0,0,47,112,117,111,114,49,48,47,52,0,0,0,0,0,0,0,104,101,97,100,112,111,114,116,0,0,0,0,0,0,0,0,97,100,100,95,116,114,101,101,95,101,100,103,101,58,32,101,109,112,116,121,32,105,110,101,100,103,
+101,32,108,105,115,116,10,0,0,0,0,0,0,0,47,112,117,111,114,49,48,47,51,0,0,0,0,0,0,0,37,46,50,102,32,115,101,99,10,0,0,0,0,0,0,0,38,108,116,59,0,0,0,0,47,97,99,99,101,110,116,52,47,52,0,0,0,0,0,0,47,98,114,98,103,49,48,47,54,0,0,0,0,0,0,0,103,114,97,112,104,0,0,0,47,112,117,111,114,49,48,47,50,0,0,0,0,0,0,0,58,32,37,46,50,102,32,115,101,99,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,60,84,65,66,76,69,62,0,47,112,117,111,114,49,48,47,49,48,0,0,0,0,0,0,84,72,0,0,0,0,0,0,37,115,
+32,109,97,120,112,115,104,116,32,97,110,100,32,109,97,120,112,115,119,105,100,32,104,97,118,101,32,110,111,32,109,101,97,110,105,110,103,32,105,110,32,68,87,66,32,50,46,48,44,32,115,101,116,32,112,97,103,101,32,98,111,117,110,100,97,114,105,101,115,32,105,110,32,103,112,105,99,32,97,110,100,32,105,110,32,49,48,116,104,32,69,100,105,116,105,111,110,10,0,0,0,0,47,112,117,111,114,49,48,47,49,0,0,0,0,0,0,0,115,101,112,0,0,0,0,0,47,112,117,98,117,103,110,57,47,57,0,0,0,0,0,0,32,116,105,116,108,101,61,
+34,37,115,34,0,0,0,0,0,37,115,32,119,97,115,32,97,108,114,101,97,100,121,32,105,110,32,97,32,114,97,110,107,115,101,116,44,32,100,101,108,101,116,101,100,32,102,114,111,109,32,99,108,117,115,116,101,114,32,37,115,10,0,0,0,99,108,117,115,116,0,0,0,47,112,117,98,117,103,110,57,47,56,0,0,0,0,0,0,47,112,117,98,117,103,110,57,47,55,0,0,0,0,0,0,47,84,105,109,101,115,45,66,111,108,100,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,0,0,0,0,67,114,101,97,116,105,110,103,32,101,100,103,101,115,32,
+117,115,105,110,103,32,37,115,10,0,0,0,0,0,0,0,0,80,105,0,0,0,0,0,0,102,97,108,115,101,0,0,0,47,112,117,98,117,103,110,57,47,54,0,0,0,0,0,0,108,105,103,104,116,115,108,97,116,101,103,114,101,121,0,0,103,114,111,117,112,0,0,0,67,79,76,83,80,65,78,0,102,111,114,119,97,114,100,0,98,101,105,103,101,0,0,0,47,112,117,98,117,103,110,57,47,53,0,0,0,0,0,0,37,115,32,45,62,32,37,115,58,32,116,97,105,108,32,110,111,116,32,105,110,115,105,100,101,32,116,97,105,108,32,99,108,117,115,116,101,114,32,37,115,10,0,
+0,0,0,0,0,47,112,117,98,117,103,110,57,47,52,0,0,0,0,0,0,47,112,117,98,117,103,110,57,47,51,0,0,0,0,0,0,47,98,114,98,103,49,48,47,53,0,0,0,0,0,0,0,47,62,10,0,0,0,0,0,47,112,117,98,117,103,110,57,47,50,0,0,0,0,0,0,32,91,0,0,0,0,0,0,99,108,117,115,116,101,114,0,47,112,117,98,117,103,110,57,47,49,0,0,0,0,0,0,102,97,105,108,117,114,101,32,109,97,108,108,111,99,39,105,110,103,32,102,111,114,32,114,101,115,117,108,116,32,115,116,114,105,110,103,0,0,0,0,37,115,32,46,80,83,32,119,47,111,32,97,114,103,115,
+32,99,97,117,115,101,115,32,71,78,85,32,112,105,99,32,116,111,32,115,99,97,108,101,32,100,114,97,119,105,110,103,32,116,111,32,102,105,116,32,56,46,53,120,49,49,32,112,97,112,101,114,59,32,68,87,66,32,100,111,101,115,32,110,111,116,10,0,0,0,0,0,0,47,112,117,98,117,103,110,56,47,56,0,0,0,0,0,0,127,116,111,112,0,0,0,0,47,112,117,98,117,103,110,56,47,55,0,0,0,0,0,0,32,104,114,101,102,61,34,37,115,34,0,0,0,0,0,0,47,112,117,98,117,103,110,56,47,54,0,0,0,0,0,0,110,115,108,105,109,105,116,0,119,105,100,
+116,104,0,0,0,32,115,101,116,108,105,110,101,119,105,100,116,104,10,0,0,47,112,117,98,117,103,110,56,47,53,0,0,0,0,0,0,47,84,105,109,101,115,45,73,116,97,108,105,99,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,0,0,80,104,105,0,0,0,0,0,105,109,97,103,101,0,0,0,39,10,0,0,0,0,0,0,47,112,117,98,117,103,110,56,47,52,0,0,0,0,0,0,108,105,103,104,116,115,108,97,116,101,103,114,97,121,0,0,108,97,121,101,114,0,0,0,73,108,108,101,103,97,108,32,118,97,108,117,101,32,37,115,32,102,111,114,32,70,73,
+88,69,68,83,73,90,69,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,47,112,117,98,117,103,110,56,47,51,0,0,0,0,0,0,102,105,108,108,101,100,0,0,47,112,117,98,117,103,110,56,47,50,0,0,0,0,0,0,78,68,95,111,114,100,101,114,40,118,41,32,60,32,78,68,95,111,114,100,101,114,40,119,41,0,0,0,0,0,0,0,47,112,117,98,117,103,110,56,47,49,0,0,0,0,0,0,47,98,114,98,103,49,48,47,52,0,0,0,0,0,0,0,34,32,119,105,100,116,104,61,34,37,103,112,120,34,32,104,101,105,103,104,116,61,34,37,103,112,120,
+34,32,112,114,101,115,101,114,118,101,65,115,112,101,99,116,82,97,116,105,111,61,34,120,77,105,110,89,77,105,110,32,109,101,101,116,34,32,120,61,34,37,103,34,32,121,61,34,37,103,34,0,0,47,112,117,98,117,103,110,55,47,55,0,0,0,0,0,0,47,112,117,98,117,103,110,55,47,54,0,0,0,0,0,0,108,105,110,101,116,104,105,99,107,32,61,32,48,59,32,111,108,100,108,105,110,101,116,104,105,99,107,32,61,32,108,105,110,101,116,104,105,99,107,10,0,0,0,0,0,0,0,0,47,112,117,98,117,103,110,55,47,53,0,0,0,0,0,0,47,112,117,98,
+117,103,110,55,47,52,0,0,0,0,0,0,60,97,0,0,0,0,0,0,47,112,117,98,117,103,110,55,47,51,0,0,0,0,0,0,47,112,117,98,117,103,110,55,47,50,0,0,0,0,0,0,47,84,105,109,101,115,45,82,111,109,97,110,32,115,116,97,114,110,101,116,73,83,79,32,100,101,102,0,0,0,0,0,79,117,109,108,0,0,0,0,105,110,32,110,111,100,101,32,37,115,10,0,0,0,0,0,97,103,100,101,108,101,116,101,32,111,110,32,119,114,111,110,103,32,103,114,97,112,104,0,47,112,117,98,117,103,110,55,47,49,0,0,0,0,0,0,108,105,103,104,116,115,107,121,98,108,117,
+101,0,0,0,0,110,111,106,117,115,116,105,102,121,0,0,0,0,0,0,0,65,76,83,69,0,0,0,0,116,97,112,101,114,101,100,0,47,112,117,98,117,103,110,54,47,54,0,0,0,0,0,0,47,112,117,98,117,103,110,54,47,53,0,0,0,0,0,0,47,112,117,98,117,103,110,54,47,52,0,0,0,0,0,0,47,98,114,98,103,49,48,47,51,0,0,0,0,0,0,0,109,105,115,109,97,116,99,104,101,100,32,116,97,103,0,0,32,116,114,97,110,115,102,111,114,109,61,34,114,111,116,97,116,101,40,37,100,32,37,103,32,37,103,41,34,0,0,0,47,112,117,98,117,103,110,54,47,51,0,0,0,
+0,0,0,47,112,117,98,117,103,110,54,47,50,0,0,0,0,0,0,114,101,99,116,32,37,115,32,37,100,44,37,100,32,37,100,44,37,100,10,0,0,0,0,37,115,32,71,78,85,32,112,105,99,32,115,117,112,112,111,114,116,115,32,97,32,108,105,110,101,116,104,105,99,107,32,118,97,114,105,97,98,108,101,32,116,111,32,115,101,116,32,108,105,110,101,32,116,104,105,99,107,110,101,115,115,59,32,68,87,66,32,97,110,100,32,49,48,116,104,32,69,100,46,32,100,111,32,110,111,116,10,0,0,0,0,0,0,0,0,47,112,117,98,117,103,110,54,47,49,0,0,0,
+0,0,0,47,112,117,98,117,103,110,53,47,53,0,0,0,0,0,0,60,47,97,62,10,0,0,0,47,112,117,98,117,103,110,53,47,52,0,0,0,0,0,0,47,112,117,98,117,103,110,53,47,51,0,0,0,0,0,0,125,32,100,101,102,0,0,0,79,116,105,108,100,101,0,0,116,114,97,110,115,112,97,114,101,110,116,0,0,0,0,0,47,112,117,98,117,103,110,53,47,50,0,0,0,0,0,0,108,105,103,104,116,115,101,97,103,114,101,101,110,0,0,0,105,109,97,103,101,115,99,97,108,101,0,0,0,0,0,0,82,85,69,0,0,0,0,0,37,115,45,37,115,0,0,0,47,112,117,98,117,103,110,53,47,49,
+0,0,0,0,0,0,47,112,117,98,117,103,110,52,47,52,0,0,0,0,0,0,47,112,117,98,117,103,110,52,47,51,0,0,0,0,0,0,47,98,114,98,103,49,48,47,50,0,0,0,0,0,0,0,34,32,119,105,100,116,104,61,34,37,103,112,120,34,32,104,101,105,103,104,116,61,34,37,103,112,120,34,32,112,114,101,115,101,114,118,101,65,115,112,101,99,116,82,97,116,105,111,61,34,120,77,105,100,89,77,105,100,32,109,101,101,116,34,32,120,61,34,37,103,34,32,121,61,34,37,103,34,0,0,47,112,117,98,117,103,110,52,47,50,0,0,0,0,0,0,106,112,101,103,58,102,
+105,103,0,0,0,0,0,0,0,0,47,112,117,98,117,103,110,52,47,49,0,0,0,0,0,0,98,111,120,114,97,100,32,61,32,48,32,37,115,32,110,111,32,114,111,117,110,100,101,100,32,99,111,114,110,101,114,115,32,105,110,32,103,114,97,112,104,118,105,122,10,0,0,0,47,112,117,98,117,103,110,51,47,51,0,0,0,0,0,0,47,112,117,98,117,103,110,51,47,50,0,0,0,0,0,0,60,47,118,58,114,101,99,116,62,10,0,0,0,0,0,0,47,112,117,98,117,103,110,51,47,49,0,0,0,0,0,0,47,112,117,98,117,57,47,57,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,99,117,
+114,114,101,110,116,100,105,99,116,32,101,110,100,32,100,101,102,105,110,101,102,111,110,116,0,0,0,0,0,0,79,115,108,97,115,104,0,0,98,108,97,99,107,0,0,0,47,112,117,98,117,57,47,56,0,0,0,0,0,0,0,0,102,105,120,101,100,115,105,122,101,0,0,0,0,0,0,0,108,105,103,104,116,115,97,108,109,111,110,0,0,0,0,0,71,82,65,68,73,69,78,84,65,78,71,76,69,0,0,0,48,0,0,0,0,0,0,0,47,112,117,98,117,57,47,55,0,0,0,0,0,0,0,0,47,112,117,98,117,57,47,54,0,0,0,0,0,0,0,0,98,117,102,102,101,114,32,101,114,114,111,114,0,0,0,0,
+47,112,117,98,117,57,47,53,0,0,0,0,0,0,0,0,47,98,114,98,103,49,48,47,49,48,0,0,0,0,0,0,60,105,109,97,103,101,32,120,108,105,110,107,58,104,114,101,102,61,34,0,0,0,0,0,47,112,117,98,117,57,47,52,0,0,0,0,0,0,0,0,47,112,117,98,117,57,47,51,0,0,0,0,0,0,0,0,37,115,32,71,78,85,32,112,105,99,32,115,117,112,112,111,114,116,115,32,97,32,98,111,120,114,97,100,32,118,97,114,105,97,98,108,101,32,116,111,32,100,114,97,119,32,98,111,120,101,115,32,119,105,116,104,32,114,111,117,110,100,101,100,32,99,111,114,110,
+101,114,115,59,32,68,87,66,32,97,110,100,32,49,48,116,104,32,69,100,46,32,100,111,32,110,111,116,10,0,0,0,0,0,0,47,112,117,98,117,57,47,50,0,0,0,0,0,0,0,0,47,112,117,98,117,57,47,49,0,0,0,0,0,0,0,0,110,111,110,101,0,0,0,0,60,47,99,101,110,116,101,114,62,60,47,118,58,116,101,120,116,98,111,120,62,10,0,0,47,112,117,98,117,56,47,56,0,0,0,0,0,0,0,0,47,112,117,98,117,56,47,55,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,47,69,110,99,111,100,105,110,103,32,69,110,99,111,100,105,110,103,86,101,99,116,111,114,
+32,100,101,102,0,0,0,0,79,109,105,99,114,111,110,0,35,102,56,102,56,102,56,0,47,112,117,98,117,56,47,54,0,0,0,0,0,0,0,0,100,105,115,116,111,114,116,105,111,110,0,0,0,0,0,0,108,105,103,104,116,112,105,110,107,0,0,0,0,0,0,0,72,69,73,71,72,84,0,0,116,97,105,108,108,97,98,101,108,0,0,0,0,0,0,0,47,112,117,98,117,56,47,53,0,0,0,0,0,0,0,0,69,68,95,116,111,95,118,105,114,116,40,101,41,32,61,61,32,78,85,76,76,0,0,0,47,112,117,98,117,56,47,52,0,0,0,0,0,0,0,0,47,112,117,98,117,56,47,51,0,0,0,0,0,0,0,0,47,98,
+114,98,103,49,48,47,49,0,0,0,0,0,0,0,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,0,47,112,117,98,117,56,47,50,0,0,0,0,0,0,0,0,47,112,117,98,117,56,47,49,0,0,0,0,0,0,0,0,47,112,117,98,117,55,47,55,0,0,0,0,0,0,0,0,97,114,114,111,119,104,101,97,100,32,61,32,55,32,37,115,32,110,111,116,32,117,115,101,100,32,98,121,32,103,114,97,112,104,118,105,122,10,0,0,47,112,117,98,117,55,47,54,0,0,0,0,0,0,0,0,34,62,60,99,101,110,116,101,114,62,0,0,0,0,0,0,
+47,112,117,98,117,55,47,53,0,0,0,0,0,0,0,0,47,112,117,98,117,55,47,52,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,125,32,102,111,114,97,108,108,0,0,0,0,0,0,0,0,79,109,101,103,97,0,0,0,35,49,48,49,48,49,48,0,32,37,100,0,0,0,0,0,47,112,117,98,117,55,47,51,0,0,0,0,0,0,0,0,115,107,101,119,0,0,0,0,108,105,103,104,116,103,114,101,121,0,0,0,0,0,0,0,82,79,87,83,80,65,78,32,118,97,108,117,101,32,99,97,110,110,111,116,32,98,101,32,48,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,104,101,97,100,108,97,98,101,
+108,0,0,0,0,0,0,0,47,112,117,98,117,55,47,50,0,0,0,0,0,0,0,0,114,101,99,116,46,98,111,117,110,100,97,114,121,91,51,93,32,60,32,73,78,84,95,77,65,88,0,0,0,0,0,0,47,112,117,98,117,55,47,49,0,0,0,0,0,0,0,0,47,112,117,98,117,54,47,54,0,0,0,0,0,0,0,0,47,98,108,117,101,115,57,47,57,0,0,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,46,49,102,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,32,37,100,32,37,115,10,0,0,0,0,0,0,0,47,112,
+117,98,117,54,47,53,0,0,0,0,0,0,0,0,100,101,108,116,97,32,60,61,32,48,120,70,70,70,70,0,47,112,117,98,117,54,47,52,0,0,0,0,0,0,0,0,47,112,117,98,117,54,47,51,0,0,0,0,0,0,0,0,37,115,32,97,114,114,111,119,104,101,97,100,32,105,115,32,117,110,100,101,102,105,110,101,100,32,105,110,32,68,87,66,32,50,44,32,105,110,105,116,105,97,108,108,121,32,49,32,105,110,32,103,112,105,99,44,32,50,32,105,110,32,49,48,116,104,32,69,100,105,116,105,111,110,10,0,0,0,0,0,47,112,117,98,117,54,47,50,0,0,0,0,0,0,0,0,99,111,
+108,111,114,58,35,37,48,50,120,37,48,50,120,37,48,50,120,59,0,0,0,0,114,101,100,0,0,0,0,0,47,112,117,98,117,54,47,49,0,0,0,0,0,0,0,0,47,112,117,98,117,53,47,53,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,123,32,49,32,105,110,100,101,120,32,47,70,73,68,32,110,101,32,123,32,100,101,102,32,125,123,32,112,111,112,32,112,111,112,32,125,32,105,102,101,108,115,101,0,0,0,0,0,79,103,114,97,118,101,0,0,35,102,48,102,48,102,48,0,47,112,117,98,117,53,47,52,0,0,0,0,0,0,0,0,112,101,114,105,112,104,101,114,105,101,
+115,0,0,0,0,0,108,105,103,104,116,103,114,101,101,110,0,0,0,0,0,0,82,79,87,83,80,65,78,0,108,97,98,101,108,0,0,0,47,112,117,98,117,53,47,51,0,0,0,0,0,0,0,0,47,112,117,98,117,53,47,50,0,0,0,0,0,0,0,0,47,112,117,98,117,53,47,49,0,0,0,0,0,0,0,0,47,98,108,117,101,115,57,47,56,0,0,0,0,0,0,0,125,10,0,0,0,0,0,0,47,112,117,98,117,52,47,52,0,0,0,0,0,0,0,0,114,116,112,45,62,115,112,108,105,116,46,80,97,114,116,105,116,105,111,110,115,91,48,93,46,99,111,117,110,116,91,48,93,32,43,32,114,116,112,45,62,115,112,
+108,105,116,46,80,97,114,116,105,116,105,111,110,115,91,48,93,46,99,111,117,110,116,91,49,93,32,61,61,32,78,79,68,69,67,65,82,68,32,43,32,49,0,0,0,69,114,114,111,114,32,100,117,114,105,110,103,32,99,111,110,118,101,114,115,105,111,110,32,116,111,32,34,85,84,70,45,56,34,46,32,32,81,117,105,116,105,110,103,46,10,0,0,47,112,117,98,117,52,47,51,0,0,0,0,0,0,0,0,49,48,48,48,48,0,0,0,47,112,117,98,117,52,47,50,0,0,0,0,0,0,0,0,37,115,32,97,114,114,111,119,104,101,97,100,32,104,97,115,32,110,111,32,109,101,
+97,110,105,110,103,32,105,110,32,68,87,66,32,50,44,32,97,114,114,111,119,104,101,97,100,32,61,32,55,32,109,97,107,101,115,32,102,105,108,108,101,100,32,97,114,114,111,119,104,101,97,100,115,32,105,110,32,103,112,105,99,32,97,110,100,32,105,110,32,49,48,116,104,32,69,100,105,116,105,111,110,10,0,0,0,0,0,0,0,0,68,111,119,110,0,0,0,0,47,112,117,98,117,52,47,49,0,0,0,0,0,0,0,0,99,111,108,111,114,58,37,115,59,0,0,0,0,0,0,0,47,112,117,98,117,51,47,51,0,0,0,0,0,0,0,0,32,45,100,97,115,104,32,50,0,0,0,0,0,
+0,0,0,47,112,117,98,117,51,47,50,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,100,117,112,32,100,117,112,32,102,105,110,100,102,111,110,116,32,100,117,112,32,108,101,110,103,116,104,32,100,105,99,116,32,98,101,103,105,110,0,0,79,99,105,114,99,0,0,0,35,101,48,101,48,101,48,0,47,112,117,98,117,51,47,49,0,0,0,0,0,0,0,0,115,105,100,101,115,0,0,0,108,105,103,104,116,103,114,97,121,0,0,0,0,0,0,0,68,65,83,72,69,68,0,0,102,97,108,115,101,0,0,0,47,112,114,103,110,57,47,57,0,0,0,0,0,0,0,0,47,112,114,103,110,57,
+47,56,0,0,0,0,0,0,0,0,47,98,108,117,101,115,57,47,55,0,0,0,0,0,0,0,47,112,114,103,110,57,47,55,0,0,0,0,0,0,0,0,110,101,101,100,32,100,105,99,116,105,111,110,97,114,121,0,32,32,125,10,0,0,0,0,47,112,114,103,110,57,47,54,0,0,0,0,0,0,0,0,91,94,91,58,97,108,110,117,109,58,93,95,93,0,0,0,110,111,112,49,0,0,0,0,47,112,114,103,110,57,47,53,0,0,0,0,0,0,0,0,47,112,114,103,110,57,47,52,0,0,0,0,0,0,0,0,88,32,101,108,115,101,32,90,10,9,100,101,102,105,110,101,32,115,101,116,102,105,108,108,118,97,108,32,89,32,
+102,105,108,108,118,97,108,32,61,32,89,59,10,9,100,101,102,105,110,101,32,98,111,108,100,32,89,32,89,59,10,9,100,101,102,105,110,101,32,102,105,108,108,101,100,32,89,32,102,105,108,108,32,89,59,10,90,10,0,0,0,0,0,0,0,0,47,112,114,103,110,57,47,51,0,0,0,0,0,0,0,0,32,102,111,110,116,45,115,105,122,101,58,32,37,46,50,102,112,116,59,0,0,0,0,0,112,108,97,105,110,58,100,111,116,0,0,0,0,0,0,0,99,97,110,110,111,116,32,109,97,108,108,111,99,32,100,113,46,112,110,108,115,0,0,0,47,112,114,103,110,57,47,50,0,
+0,0,0,0,0,0,0,47,112,114,103,110,57,47,49,0,0,0,0,0,0,0,0,102,97,108,115,101,0,0,0,47,115,116,97,114,110,101,116,73,83,79,32,123,0,0,0,79,97,99,117,116,101,0,0,100,121,110,97,109,105,99,32,108,111,97,100,105,110,103,32,110,111,116,32,97,118,97,105,108,97,98,108,101,10,0,0,35,101,56,101,56,101,56,0,97,114,105,97,108,0,0,0,47,112,114,103,110,56,47,56,0,0,0,0,0,0,0,0,112,101,110,119,105,100,116,104,0,0,0,0,0,0,0,0,108,105,103,104,116,103,111,108,100,101,110,114,111,100,121,101,108,108,111,119,0,0,0,
+0,68,79,84,84,69,68,0,0,105,110,118,105,115,0,0,0,47,112,114,103,110,56,47,55,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,105,110,32,114,111,117,116,101,115,112,108,105,110,101,115,44,32,80,114,111,117,116,101,115,112,108,105,110,101,32,102,97,105,108,101,100,10,0,0,0,66,69,71,73,78,0,0,0,111,98,106,101,99,116,115,10,0,0,0,0,0,0,0,0,47,98,108,117,101,115,57,47,54,0,0,0,0,0,0,0,47,112,114,103,110,56,47,54,0,0,0,0,0,0,0,0,116,97,105,108,112,111,114,116,0,
+0,0,0,0,0,0,0,97,100,100,95,116,114,101,101,95,101,100,103,101,58,32,101,109,112,116,121,32,111,117,116,101,100,103,101,32,108,105,115,116,10,0,0,0,0,0,0,38,97,109,112,59,0,0,0,83,101,116,116,105,110,103,32,117,112,32,115,112,114,105,110,103,32,109,111,100,101,108,58,32,0,0,0,0,0,0,0,47,112,114,103,110,56,47,53,0,0,0,0,0,0,0,0,104,101,97,100,112,111,114,116,0,0,0,0,0,0,0,0,47,112,114,103,110,56,47,52,0,0,0,0,0,0,0,0,32,32,32,32,116,101,120,116,117,114,101,32,73,109,97,103,101,84,101,120,116,117,114,
+101,32,123,32,117,114,108,32,34,37,115,34,32,125,10,0,0,99,108,117,115,116,101,114,0,47,97,99,99,101,110,116,52,47,51,0,0,0,0,0,0,83,101,116,116,105,110,103,32,105,110,105,116,105,97,108,32,112,111,115,105,116,105,111,110,115,0,0,0,0,0,0,0,99,108,117,115,116,101,114,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,47,112,114,103,110,56,47,51,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,84,82,0,0,0,0,0,0,47,112,114,103,110,56,47,50,0,0,0,0,0,0,0,0,9,37,115,9,115,111,114,114,121,44,32,116,104,101,32,103,
+114,111,102,102,32,102,111,108,107,115,32,99,104,97,110,103,101,100,32,103,112,105,99,59,32,115,101,110,100,32,97,110,121,32,99,111,109,112,108,97,105,110,116,32,116,111,32,116,104,101,109,59,10,0,0,0,85,110,104,97,110,100,108,101,100,32,97,100,106,117,115,116,32,111,112,116,105,111,110,32,37,115,10,0,0,0,0,0,47,112,114,103,110,56,47,49,0,0,0,0,0,0,0,0,98,101,122,45,62,101,102,108,97,103,0,0,0,0,0,0,102,111,110,116,45,115,116,121,108,101,58,32,37,115,59,0,103,114,97,112,104,0,0,0,47,112,114,103,110,
+55,47,55,0,0,0,0,0,0,0,0,47,112,114,103,110,55,47,54,0,0,0,0,0,0,0,0,37,32,83,101,116,32,117,112,32,73,83,79,32,76,97,116,105,110,32,49,32,99,104,97,114,97,99,116,101,114,32,101,110,99,111,100,105,110,103,0,79,69,108,105,103,0,0,0,115,111,109,101,32,110,111,100,101,115,32,119,105,116,104,32,109,97,114,103,105,110,32,40,37,46,48,50,102,44,37,46,48,50,102,41,32,116,111,117,99,104,32,45,32,102,97,108,108,105,110,103,32,98,97,99,107,32,116,111,32,115,116,114,97,105,103,104,116,32,108,105,110,101,32,101,
+100,103,101,115,10,0,0,0,0,0,0,0,35,51,48,51,48,51,48,0,47,112,114,103,110,55,47,53,0,0,0,0,0,0,0,0,120,108,97,98,101,108,0,0,108,105,103,104,116,99,121,97,110,0,0,0,0,0,0,0,73,78,86,73,83,0,0,0,45,45,0,0,0,0,0,0,97,122,117,114,101,0,0,0,47,112,114,103,110,55,47,52,0,0,0,0,0,0,0,0,47,112,114,103,110,55,47,51,0,0,0,0,0,0,0,0,47,112,114,103,110,55,47,50,0,0,0,0,0,0,0,0,47,98,108,117,101,115,57,47,53,0,0,0,0,0,0,0,32,32,32,32,125,10,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,47,112,114,
+103,110,55,47,49,0,0,0,0,0,0,0,0,93,0,0,0,0,0,0,0,47,112,114,103,110,54,47,54,0,0,0,0,0,0,0,0,47,112,114,103,110,54,47,53,0,0,0,0,0,0,0,0,9,37,115,9,105,110,115,116,97,108,108,32,97,32,109,111,114,101,32,114,101,99,101,110,116,32,118,101,114,115,105,111,110,32,111,102,32,103,112,105,99,32,111,114,32,115,119,105,116,99,104,32,116,111,32,68,87,66,32,111,114,32,49,48,116,104,32,69,100,105,116,105,111,110,32,112],"i8",L,l.J+81956);D([105,99,59,10,0,0,0,0,0,0,0,0,76,97,121,111,117,116,32,119,97,115,32,
+110,111,116,32,100,111,110,101,10,0,0,0,0,110,45,62,98,114,97,110,99,104,91,105,93,46,99,104,105,108,100,0,0,0,0,0,0,127,114,111,111,116,0,0,0,47,112,114,103,110,54,47,52,0,0,0,0,0,0,0,0,102,111,110,116,45,115,116,114,101,116,99,104,58,32,37,115,59,0,0,0,0,0,0,0,47,112,114,103,110,54,47,51,0,0,0,0,0,0,0,0,69,100,103,101,32,108,101,110,103,116,104,32,37,102,32,108,97,114,103,101,114,32,116,104,97,110,32,109,97,120,105,109,117,109,32,37,117,32,97,108,108,111,119,101,100,46,10,67,104,101,99,107,32,102,
+111,114,32,111,118,101,114,119,105,100,101,32,110,111,100,101,40,115,41,46,10,0,0,0,0,0,99,97,110,110,111,116,32,99,111,109,112,105,108,101,32,114,101,103,117,108,97,114,32,101,120,112,114,101,115,115,105,111,110,32,37,115,0,0,0,0,47,112,114,103,110,54,47,50,0,0,0,0,0,0,0,0,32,93,32,32,37,100,32,102,97,108,115,101,32,37,115,10,0,0,0,0,0,0,0,0,69,110,99,111,100,105,110,103,86,101,99,116,111,114,32,52,53,32,47,104,121,112,104,101,110,32,112,117,116,0,0,0,78,117,0,0,0,0,0,0,35,102,99,102,99,102,99,0,
+32,105,110,32,108,105,110,101,32,37,100,32,110,101,97,114,32,39,0,0,0,0,0,0,47,112,114,103,110,54,47,49,0,0,0,0,0,0,0,0,102,111,110,116,99,111,108,111,114,0,0,0,0,0,0,0,108,105,103,104,116,99,111,114,97,108,0,0,0,0,0,0,73,78,86,73,83,73,66,76,69,0,0,0,0,0,0,0,45,62,0,0,0,0,0,0,47,112,114,103,110,53,47,53,0,0,0,0,0,0,0,0,115,101,116,108,105,110,101,119,105,100,116,104,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,47,112,114,103,110,53,47,52,0,0,0,0,0,0,0,0,115,117,114,112,114,105,115,
+101,10,0,0,0,0,0,0,0,47,112,114,103,110,53,47,51,0,0,0,0,0,0,0,0,47,98,108,117,101,115,57,47,52,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,100,105,102,102,117,115,101,67,111,108,111,114,32,49,32,49,32,49,10,0,0,0,0,0,47,112,114,103,110,53,47,50,0,0,0,0,0,0,0,0,47,112,114,103,110,53,47,49,0,0,0,0,0,0,0,0,47,112,114,103,110,52,47,52,0,0,0,0,0,0,0,0,9,37,115,32,105,102,32,121,111,117,32,117,115,101,32,103,112,105,99,32,97,110,100,32,105,116,32,98,97,114,102,115,32,111,110,32,101,110,99,111,117,110,116,101,
+114,105,110,103,32,34,115,111,108,105,100,34,44,10,0,0,0,0,0,0,47,112,114,103,110,52,47,51,0,0,0,0,0,0,0,0,102,111,110,116,45,119,101,105,103,104,116,58,32,37,115,59,0,0,0,0,0,0,0,0,47,112,114,103,110,52,47,50,0,0,0,0,0,0,0,0,47,112,114,103,110,52,47,49,0,0,0,0,0,0,0,0,73,83,79,76,97,116,105,110,49,69,110,99,111,100,105,110,103,32,48,32,50,53,53,32,103,101,116,105,110,116,101,114,118,97,108,32,112,117,116,105,110,116,101,114,118,97,108,0,78,116,105,108,100,101,0,0,35,56,48,56,48,56,48,0,47,112,114,
+103,110,51,47,51,0,0,0,0,0,0,0,0,102,111,110,116,110,97,109,101,0,0,0,0,0,0,0,0,108,105,103,104,116,98,108,117,101,0,0,0,0,0,0,0,83,79,76,73,68,0,0,0,98,122,46,115,105,122,101,32,37,32,51,32,61,61,32,49,0,0,0,0,0,0,0,0,47,112,114,103,110,51,47,50,0,0,0,0,0,0,0,0,47,112,114,103,110,51,47,49,0,0,0,0,0,0,0,0,47,112,114,103,110,49,49,47,57,0,0,0,0,0,0,0,47,98,108,117,101,115,57,47,51,0,0,0,0,0,0,0,112,97,114,116,105,97,108,32,99,104,97,114,97,99,116,101,114,0,0,0,0,0,0,0,32,32,32,32,32,32,97,109,98,105,
+101,110,116,73,110,116,101,110,115,105,116,121,32,48,46,51,51,10,0,0,0,0,47,112,114,103,110,49,49,47,56,0,0,0,0,0,0,0,47,112,114,103,110,49,49,47,55,0,0,0,0,0,0,0,47,112,114,103,110,49,49,47,54,0,0,0,0,0,0,0,105,102,32,102,105,108,108,118,97,108,32,62,32,48,46,52,32,116,104,101,110,32,88,10,9,100,101,102,105,110,101,32,115,101,116,102,105,108,108,118,97,108,32,89,32,102,105,108,108,118,97,108,32,61,32,49,32,45,32,89,59,10,9,100,101,102,105,110,101,32,98,111,108,100,32,89,32,116,104,105,99,107,110,
+101,115,115,32,50,32,89,59,10,0,0,0,0,47,112,114,103,110,49,49,47,53,0,0,0,0,0,0,0,102,111,110,116,45,102,97,109,105,108,121,58,32,39,37,115,39,59,0,0,0,0,0,0,47,112,114,103,110,49,49,47,52,0,0,0,0,0,0,0,99,109,97,112,120,95,110,112,58,109,97,112,0,0,0,0,47,112,114,103,110,49,49,47,51,0,0,0,0,0,0,0,32,69,110,99,111,100,105,110,103,86,101,99,116,111,114,32,48,0,0,0,0,0,0,0,77,117,0,0,0,0,0,0,115,116,97,114,0,0,0,0,47,112,114,103,110,49,49,47,50,0,0,0,0,0,0,0,102,111,110,116,115,105,122,101,0,0,0,0,
+0,0,0,0,108,101,109,111,110,99,104,105,102,102,111,110,0,0,0,0,73,108,108,101,103,97,108,32,118,97,108,117,101,32,37,115,32,102,111,114,32,83,84,89,76,69,32,45,32,105,103,110,111,114,101,100,10,0,0,0,98,122,46,115,105,122,101,32,62,32,48,0,0,0,0,0,47,112,114,103,110,49,49,47,49,49,0,0,0,0,0,0,47,112,114,103,110,49,49,47,49,48,0,0,0,0,0,0,47,112,114,103,110,49,49,47,49,0,0,0,0,0,0,0,47,98,108,117,101,115,57,47,50,0,0,0,0,0,0,0,32,32,32,32,109,97,116,101,114,105,97,108,32,77,97,116,101,114,105,97,108,
+32,123,10,0,0,0,0,0,0,0,0,47,112,114,103,110,49,48,47,57,0,0,0,0,0,0,0,103,105,102,58,102,105,103,0,47,112,114,103,110,49,48,47,56,0,0,0,0,0,0,0,47,112,114,103,110,49,48,47,55,0,0,0,0,0,0,0,37,115,32,71,78,85,32,112,105,99,32,118,115,46,32,49,48,116,104,32,69,100,105,116,105,111,110,32,100,92,40,101,39,116,101,110,116,101,10,0,47,112,114,103,110,49,48,47,54,0,0,0,0,0,0,0,60,118,58,116,101,120,116,98,111,120,32,105,110,115,101,116,61,34,48,44,48,44,48,44,48,34,32,115,116,121,108,101,61,34,112,111,
+115,105,116,105,111,110,58,97,98,115,111,108,117,116,101,59,32,118,45,116,101,120,116,45,119,114,97,112,112,105,110,103,58,39,102,97,108,115,101,39,59,112,97,100,100,105,110,103,58,39,48,39,59,0,0,0,0,0,0,0,47,112,114,103,110,49,48,47,53,0,0,0,0,0,0,0,47,112,114,103,110,49,48,47,52,0,0,0,0,0,0,0,47,69,110,99,111,100,105,110,103,86,101,99,116,111,114,32,50,53,54,32,97,114,114,97,121,32,100,101,102,0,0,0,76,97,109,98,100,97,0,0,77,114,101,99,111,114,100,0,47,112,114,103,110,49,48,47,51,0,0,0,0,0,0,
+0,115,116,121,108,101,0,0,0,108,97,119,110,103,114,101,101,110,0,0,0,0,0,0,0,65,68,73,65,76,0,0,0,115,112,108,45,62,115,105,122,101,32,62,32,48,0,0,0,47,112,114,103,110,49,48,47,50,0,0,0,0,0,0,0,47,112,114,103,110,49,48,47,49,48,0,0,0,0,0,0,47,112,114,103,110,49,48,47,49,0,0,0,0,0,0,0,105,110,115,117,102,102,105,99,105,101,110,116,32,109,101,109,111,114,121,0,0,0,0,0,47,98,108,117,101,115,57,47,49,0,0,0,0,0,0,0,32,32,97,112,112,101,97,114,97,110,99,101,32,65,112,112,101,97,114,97,110,99,101,32,123,
+10,0,0,0,0,0,0,47,112,105,121,103,57,47,57,0,0,0,0,0,0,0,0,47,112,105,121,103,57,47,56,0,0,0,0,0,0,0,0,47,112,105,121,103,57,47,55,0,0,0,0,0,0,0,0,114,101,115,101,116,32,37,115,32,115,101,116,32,116,111,32,107,110,111,119,110,32,115,116,97,116,101,10,0,0,0,0,47,112,105,121,103,57,47,54,0,0,0,0,0,0,0,0,32,115,116,114,111,107,101,100,61,34,102,97,108,115,101,34,32,102,105,108,108,101,100,61,34,102,97,108,115,101,34,62,10,0,0,0,0,0,0,0,47,112,105,121,103,57,47,53,0,0,0,0,0,0,0,0,100,111,116,0,0,0,0,
+0,47,112,105,121,103,57,47,52,0,0,0,0,0,0,0,0,109,97,114,107,0,0,0,0,75,97,112,112,97,0,0,0,114,101,99,111,114,100,0,0,47,112,105,121,103,57,47,51,0,0,0,0,0,0,0,0,102,105,108,108,99,111,108,111,114,0,0,0,0,0,0,0,108,97,118,101,110,100,101,114,98,108,117,115,104,0,0,0,79,85,78,68,69,68,0,0,115,101,116,108,105,110,101,119,105,100,116,104,0,49,0,0,47,112,105,121,103,57,47,50,0,0,0,0,0,0,0,0,47,112,105,121,103,57,47,49,0,0,0,0,0,0,0,0,109,101,114,103,101,95,111,110,101,119,97,121,32,103,108,105,116,99,
+104,10,0,0,0,0,47,112,105,121,103,56,47,56,0,0,0,0,0,0,0,0,47,98,108,117,101,115,56,47,56,0,0,0,0,0,0,0,83,104,97,112,101,32,123,10,0,0,0,0,0,0,0,0,47,112,105,121,103,56,47,55,0,0,0,0,0,0,0,0,47,112,105,121,103,56,47,54,0,0,0,0,0,0,0,0,47,112,105,121,103,56,47,53,0,0,0,0,0,0,0,0,105,102,32,98,111,120,114,97,100,32,62,32,49,46,48,32,38,38,32,100,97,115,104,119,105,100,32,60,32,48,46,48,55,53,32,116,104,101,110,32,88,10,9,102,105,108,108,118,97,108,32,61,32,49,59,10,9,100,101,102,105,110,101,32,102,
+105,108,108,32,89,32,89,59,10,9,100,101,102,105,110,101,32,115,111,108,105,100,32,89,32,89,59,10,9,100,101,102,105,110,101,32,114,101,115,101,116,32,89,32,115,99,97,108,101,61,49,46,48,32,89,59,10,88,10,0,0,0,0,47,112,105,121,103,56,47,52,0,0,0,0,0,0,0,0,60,118,58,114,101,99,116,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,97,98,115,111,108,117,116,101,59,32,0,0,0,0,0,0,47,112,105,121,103,56,47,51,0,0,0,0,0,0,0,0,47,112,105,121,103,56,47,50,0,0,0,0,0,0,0,0,47,115,101,116,117,112,
+76,97,116,105,110,49,32,123,0,0,73,117,109,108,0,0,0,0,108,112,114,111,109,111,116,101,114,0,0,0,0,0,0,0,47,112,105,121,103,56,47,49,0,0,0,0,0,0,0,0,99,111,108,111,114,0,0,0,32,37,115,10,0,0,0,0,108,97,118,101,110,100,101,114,0,0,0,0,0,0,0,0,32,44,0,0,0,0,0,0,115,111,108,105,100,0,0,0,47,112,105,121,103,55,47,55,0,0,0,0,0,0,0,0,47,98,108,117,101,115,56,47,55,0,0,0,0,0,0,0,47,112,105,121,103,55,47,54,0,0,0,0,0,0,0,0,114,101,99,116,46,98,111,117,110,100,97,114,121,91,50,93,32,60,32,73,78,84,95,77,65,
+88,0,0,0,0,0,0,47,112,105,121,103,55,47,53,0,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,47,112,105,121,103,55,47,52,0,0,0,0,0,0,0,0,47,112,105,121,103,55,47,51,0,0,0,0,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,47,112,105,121,103,55,47,50,0,0,0,0,0,0,0,0,37,115,32,68,87,66,32,50,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,100,101,102,105,110,105,116,105,111,110,115,10,0,0,0,0,0,47,112,105,121,103,55,47,49,0,0,0,0,0,0,0,0,60,47,118,58,111,118,97,108,62,10,0,0,0,0,0,0,47,112,105,
+121,103,54,47,54,0,0,0,0,0,0,0,0,109,97,103,101,110,116,97,0,47,112,105,121,103,54,47,53,0,0,0,0,0,0,0,0,73,111,116,97,0,0,0,0,68,105,110,103,98,97,116,115,0,0,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,114,97,114,114,111,119,0,0,47,112,105,121,103,54,47,52,0,0,0,0,0,0,0,0,115,104,97,112,101,0,0,0,107,104,97,107,105,0,0,0,73,108,108,101,103,97,108,32,118,97,108,117,101,32,37,115,32,102,111,114,32,86,65,76,73,71,78,32,45,32,105,103,110,111,114,101,100,10,0,0,84,105,109,101,115,
+45,82,111,109,97,110,0,0,0,0,0,47,112,105,121,103,54,47,51,0,0,0,0,0,0,0,0,47,112,105,121,103,54,47,50,0,0,0,0,0,0,0,0,47,112,105,121,103,54,47,49,0,0,0,0,0,0,0,0,47,98,108,117,101,115,56,47,54,0,0,0,0,0,0,0,111,98,106,0,0,0,0,0,47,112,105,121,103,53,47,53,0,0,0,0,0,0,0,0,47,112,105,121,103,53,47,52,0,0,0,0,0,0,0,0,38,35,51,57,59,0,0,0,114,116,112,45,62,115,112,108,105,116,46,80,97,114,116,105,116,105,111,110,115,91,48,93,46,112,97,114,116,105,116,105,111,110,91,105,93,32,61,61,32,48,32,124,124,32,
+114,116,112,45,62,115,112,108,105,116,46,80,97,114,116,105,116,105,111,110,115,91,48,93,46,112,97,114,116,105,116,105,111,110,91,105,93,32,61,61,32,49,0,0,0,0,0,0,0,0,47,112,105,121,103,53,47,51,0,0,0,0,0,0,0,0,37,115,32,114,101,115,101,116,32,119,111,114,107,115,32,105,110,32,103,112,105,99,32,97,110,100,32,49,48,116,104,32,101,100,105,116,105,111,110,44,32,98,117,116,32,105,115,110,39,116,32,100,101,102,105,110,101,100,32,105,110,32,68,87,66,32,50,10,0,0,0,0,115,111,117,114,99,101,0,0,47,112,105,
+121,103,53,47,50,0,0,0,0,0,0,0,0,32,119,105,100,116,104,58,32,37,46,50,102,59,32,104,101,105,103,104,116,58,32,37,46,50,102,34,0,0,0,0,0,75,80,95,85,112,0,0,0,47,112,105,121,103,53,47,49,0,0,0,0,0,0,0,0,32,45,100,97,115,104,32,53,0,0,0,0,0,0,0,0,47,112,105,121,103,52,47,52,0,0,0,0,0,0,0,0,68,111,116,68,105,99,116,32,98,101,103,105,110,0,0,0,73,103,114,97,118,101,0,0,90,97,112,102,68,105,110,103,98,97,116,115,0,0,0,0,108,97,114,114,111,119,0,0,47,112,105,121,103,52,47,51,0,0,0,0,0,0,0,0,119,105,100,
+116,104,0,0,0,105,118,111,114,121,0,0,0,73,68,68,76,69,0,0,0,101,32,33,61,32,78,85,76,76,0,0,0,0,0,0,0,112,101,110,119,105,100,116,104,0,0,0,0,0,0,0,0,47,112,105,121,103,52,47,50,0,0,0,0,0,0,0,0,47,112,105,121,103,52,47,49,0,0,0,0,0,0,0,0,47,112,105,121,103,51,47,51,0,0,0,0,0,0,0,0,47,98,108,117,101,115,56,47,53,0,0,0,0,0,0,0,103,114,101,115,116,111,114,101,10,0,0,0,0,0,0,0,105,110,102,105,110,105,116,121,0,0,0,0,0,0,0,0,47,112,105,121,103,51,47,50,0,0,0,0,0,0,0,0,91,91,58,97,108,110,117,109,58,93,
+95,93,0,0,0,0,110,111,112,0,0,0,0,0,47,112,105,121,103,51,47,49,0,0,0,0,0,0,0,0,47,112,105,121,103,49,49,47,57,0,0,0,0,0,0,0,37,115,32,68,87,66,32,50,32,100,111,101,115,110,39,116,32,117,115,101,32,102,105,108,108,32,97,110,100,32,100,111,101,115,110,39,116,32,100,101,102,105,110,101,32,102,105,108,108,118,97,108,10,0,0,0,47,112,105,121,103,49,49,47,56,0,0,0,0,0,0,0,99,97,110,111,110,58,100,111,116,0,0,0,0,0,0,0,32,108,101,102,116,58,32,37,46,50,102,59,32,116,111,112,58,32,37,46,50,102,59,0,108,105,
+98,112,97,116,104,47,37,115,58,37,100,58,32,37,115,10,0,0,0,0,0,0,47,112,105,121,103,49,49,47,55,0,0,0,0,0,0,0,103,118,119,114,105,116,101,95,110,111,95,122,32,112,114,111,98,108,101,109,32,37,100,10,0,0,0,0,0,0,0,0,47,112,105,121,103,49,49,47,54,0,0,0,0,0,0,0,47,0,0,0,0,0,0,0,47,68,111,116,68,105,99,116,32,50,48,48,32,100,105,99,116,32,100,101,102,0,0,0,73,99,105,114,99,0,0,0,109,101,100,105,117,109,0,0,114,97,110,107,0,0,0,0,114,112,114,111,109,111,116,101,114,0,0,0,0,0,0,0,91,105,110,116,101,114,
+110,97,108,32,99,111,117,114,105,101,114,93,0,0,0,0,0,0,47,112,105,121,103,49,49,47,53,0,0,0,0,0,0,0,104,101,105,103,104,116,0,0,105,110,100,105,103,111,0,0,79,80,0,0,0,0,0,0,112,101,114,105,112,104,101,114,105,101,115,0,0,0,0,0,114,45,62,98,111,117,110,100,97,114,121,91,105,93,32,60,61,32,114,45,62,98,111,117,110,100,97,114,121,91,78,85,77,68,73,77,83,32,43,32,105,93,0,0,0,0,0,0,47,112,105,121,103,49,49,47,52,0,0,0,0,0,0,0,115,0,0,0,0,0,0,0,87,97,114,110,105,110,103,58,32,110,111,100,101,32,37,115,
+44,32,112,111,115,105,116,105,111,110,32,37,115,44,32,101,120,112,101,99,116,101,100,32,116,119,111,32,102,108,111,97,116,115,10,0,0,0,0,0,105,110,32,114,111,117,116,101,115,112,108,105,110,101,115,44,32,80,115,104,111,114,116,101,115,116,112,97,116,104,32,102,97,105,108,101,100,10,0,0,69,79,70,0,0,0,0,0,37,100,32,111,98,106,115,32,37,100,32,120,108,97,98,101,108,115,32,102,111,114,99,101,61,37,100,32,98,98,61,40,37,46,48,50,102,44,37,46,48,50,102,41,32,40,37,46,48,50,102,44,37,46,48,50,102,41,10,
+0,0,0,0,0,47,112,105,121,103,49,49,47,51,0,0,0,0,0,0,0,108,105,103,104,116,103,114,101,121,0,0,0,0,0,0,0,97,100,100,95,116,114,101,101,95,101,100,103,101,58,32,109,105,115,115,105,110,103,32,116,114,101,101,32,101,100,103,101,10,0,0,0,0,0,0,0,108,97,98,101,108,115,46,99,0,0,0,0,0,0,0,0,115,116,97,114,116,61,37,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,119,105,116,104,32,109,111,100,101,61,115,101,108,102,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,0,0,0,0,47,112,105,121,103,
+49,49,47,50,0,0,0,0,0,0,0,47,98,108,117,101,115,56,47,52,0,0,0,0,0,0,0,97,103,100,105,99,116,111,102,58,32,117,110,107,110,111,119,110,32,107,105,110,100,32,37,100,10,0,0,0,0,0,0,117,115,101,114,95,115,104,97,112,101,95,37,100,10,0,0,37,102,0,0,0,0,0,0,47,112,105,121,103,49,49,47,49,49,0,0,0,0,0,0,58,32,37,46,50,102,32,115,101,99,10,0,0,0,0,0,47,112,105,121,103,49,49,47,49,48,0,0,0,0,0,0,71,114,97,112,104,32,37,115,32,104,97,115,32,97,114,114,97,121,32,112,97,99,107,105,110,103,32,119,105,116,104,
+32,117,115,101,114,32,118,97,108,117,101,115,32,98,117,116,32,110,111,32,34,115,111,114,116,118,34,32,97,116,116,114,105,98,117,116,101,115,32,97,114,101,32,100,101,102,105,110,101,100,46,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,99,111,108,103,0,0,0,0,119,101,105,103,104,116,0,0,47,97,99,99,101,110,116,52,47,50,0,0,0,0,0,0,47,112,105,121,103,49,49,47,49,0,0,0,0,0,0,0,84,65,66,76,69,0,0,0,37,115,32,102,105,108,108,32,104,97,115,32,110,111,32,109,101,97,110,105,110,103,32,105,
+110,32,68,87,66,32,50,44,32,103,112,105,99,32,99,97,110,32,117,115,101,32,102,105,108,108,32,111,114,32,102,105,108,108,101,100,44,32,49,48,116,104,32,69,100,105,116,105,111,110,32,117,115,101,115,32,102,105,108,108,32,111,110,108,121,10,0,0,0,0,0,0,65,100,106,117,115,116,105,110,103,32,37,115,32,117,115,105,110,103,32,37,115,10,0,0,47,112,105,121,103,49,48,47,57,0,0,0,0,0,0,0,99,111,109,112,111,117,110,100,46,99,0,0,0,0,0,0,32,32,60,118,58,111,118,97,108,32,115,116,121,108,101,61,34,112,111,115,
+105,116,105,111,110,58,97,98,115,111,108,117,116,101,59,0,0,0,0,0,105,100,0,0,0,0,0,0,47,112,105,121,103,49,48,47,56,0,0,0,0,0,0,0,47,112,105,121,103,49,48,47,55,0,0,0,0,0,0,0,37,37,66,101,103,105,110,80,114,111,108,111,103,0,0,0,73,97,99,117,116,101,0,0,85,82,87,32,67,104,97,110,99,101,114,121,32,76,0,0,116,104,101,32,98,111,117,110,100,105,110,103,32,98,111,120,101,115,32,111,102,32,115,111,109,101,32,110,111,100,101,115,32,116,111,117,99,104,32,45,32,102,97,108,108,105,110,103,32,98,97,99,107,
+32,116,111,32,115,116,114,97,105,103,104,116,32,108,105,110,101,32,101,100,103,101,115,10,0,0,0,115,105,103,110,97,116,117,114,101,0,0,0,0,0,0,0,47,112,105,121,103,49,48,47,54,0,0,0,0,0,0,0,109,97,114,103,105,110,0,0,105,110,100,105,97,110,114,101,100,0,0,0,0,0,0,0,79,84,84,79,77,0,0,0,112,97,103,101,100,105,114,0,97,113,117,97,109,97,114,105,110,101,0,0,0,0,0,0,47,112,105,121,103,49,48,47,53,0,0,0,0,0,0,0,47,112,105,121,103,49,48,47,52,0,0,0,0,0,0,0,47,112,105,121,103,49,48,47,51,0,0,0,0,0,0,0,47,
+98,108,117,101,115,56,47,51,0,0,0,0,0,0,0,103,115,97,118,101,32,37,103,32,37,103,32,116,114,97,110,115,108,97,116,101,32,110,101,119,112,97,116,104,10,0,0,112,105,99,0,0,0,0,0,47,112,105,121,103,49,48,47,50,0,0,0,0,0,0,0,101,110,100,32,37,115,10,0,32,91,107,101,121,61,0,0,98,98,0,0,0,0,0,0,47,112,105,121,103,49,48,47,49,48,0,0,0,0,0,0,116,97,105,108,112,111,114,116,0,0,0,0,0,0,0,0,47,112,105,121,103,49,48,47,49,0,0,0,0,0,0,0,37,115,32,102,105,108,108,118,97,108,32,105,115,32,48,46,51,32,105,110,32,
+49,48,116,104,32,69,100,105,116,105,111,110,32,40,102,105,108,108,32,48,32,109,101,97,110,115,32,98,108,97,99,107,41,44,32,48,46,53,32,105,110,32,103,112,105,99,32,40,102,105,108,108,32,48,32,109,101,97,110,115,32,119,104,105,116,101,41,44,32,117,110,100,101,102,105,110,101,100,32,105,110,32,68,87,66,32,50,10,0,0,0,115,101,97,114,99,104,115,105,122,101,0,0,0,0,0,0,47,112,97,115,116,101,108,50,56,47,56,0,0,0,0,0,120,32,101,32,34,47,62,0,110,32,38,38,32,105,32,62,61,32,48,32,38,38,32,105,32,60,32,78,
+79,68,69,67,65,82,68,0,0,0,0,0,47,112,97,115,116,101,108,50,56,47,55,0,0,0,0,0,99,111,110,116,97,105,110,95,110,111,100,101,115,32,99,108,117,115,116,32,37,115,32,114,97,110,107,32,37,100,32,109,105,115,115,105,110,103,32,110,111,100,101,10,0,0,0,0,47,77,101,100,105,97,66,111,120,0,0,0,0,0,0,0,47,112,97,115,116,101,108,50,56,47,54,0,0,0,0,0,32,93,32,32,37,100,32,116,114,117,101,32,37,115,10,0,91,32,123,67,97,116,97,108,111,103,125,32,60,60,32,47,85,82,73,32,60,60,32,47,66,97,115,101,32,40,37,115,
+41,32,62,62,32,62,62,10,47,80,85,84,32,112,100,102,109,97,114,107,10,0,0,0,71,97,109,109,97,0,0,0,90,97,112,102,67,104,97,110,99,101,114,121,45,77,101,100,105,117,109,73,116,97,108,105,99,0,0,0,0,0,0,0,97,115,115,101,109,98,108,121,0,0,0,0,0,0,0,0,58,32,0,0,0,0,0,0,47,112,97,115,116,101,108,50,56,47,53,0,0,0,0,0,103,114,97,100,105,101,110,116,97,110,103,108,101,0,0,0,104,111,116,112,105,110,107,0,37,108,102,44,37,108,102,44,37,108,102,44,37,108,102,0,87,73,68,84,72,0,0,0,66,76,0,0,0,0,0,0,99,97,110,
+110,111,116,32,114,101,97,108,108,111,99,32,111,112,115,0,0,0,0,0,0,47,112,97,115,116,101,108,50,56,47,52,0,0,0,0,0,98,111,108,100,0,0,0,0,47,112,97,115,116,101,108,50,56,47,51,0,0,0,0,0,105,110,115,116,97,108,108,95,105,110,95,114,97,110,107,44,32,108,105,110,101,32,37,100,58,32,71,68,95,114,97,110,107,40,103,41,91,37,100,93,46,118,32,43,32,78,68,95,111,114,100,101,114,40,37,115,41,32,91,37,100,93,32,62,32,71,68,95,114,97,110,107,40,103,41,91,37,100,93,46,97,118,32,43,32,71,68,95,114,97,110,107,
+40,82,111,111,116,41,91,37,100,93,46,97,110,32,91,37,100,93,10,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,47,112,97,115,116,101,108,50,56,47,50,0,0,0,0,0,47,98,108,117,101,115,56,47,50,0,0,0,0,0,0,0,93,32,32,37,100,32,102,97,108,115,101,32,37,115,10,0,47,112,97,115,116,101,108,50,56,47,49,0,0,0,0,0,47,112,97,115,116,101,108,50,55,47,55,0,0,0,0,0,47,112,97,115,116,101,108,50,55,47,54,0,0,0,0,0,37,115,32,100,97,115,104,119,105,100,32,105,115,32,48,46,49,32,105,110,32,49,48,116,104,32,69,
+100,105,116,105,111,110,44,32,48,46,48,53,32,105,110,32,68,87,66,32,50,32,97,110,100,32,105,110,32,103,112,105,99,10,0,0,0,47,112,97,115,116,101,108,50,55,47,53,0,0,0,0,0,108,32,0,0,0,0,0,0,47,112,97,115,116,101,108,50,55,47,52,0,0,0,0,0,47,112,97,115,116,101,108,50,55,47,51,0,0,0,0,0,115,101,116,117,112,76,97,116,105,110,49,10,0,0,0,0,69,117,109,108,0,0,0,0,84,105,109,101,115,45,82,111,109,97,110,0,0,0,0,0,110,111,118,101,114,104,97,110,103,0,0,0,0,0,0,0,109,101,109,111,114,121,32,97,108,108,111,
+99,97,116,105,111,110,32,102,97,105,108,117,114,101,0,0,0,0,0,0,0,47,112,97,115,116,101,108,50,55,47,50,0,0,0,0,0,111,114,100,101,114,105,110,103,0,0,0,0,0,0,0,0,37,108,102,44,37,108,102,0,119,105,100,116,104,0,0,0,104,111,110,101,121,100,101,119,0,0,0,0,0,0,0,0,112,97,100,0,0,0,0,0,47,112,97,115,116,101,108,50,55,47,49,0,0,0,0,0,47,112,97,115,116,101,108,50,54,47,54,0,0,0,0,0,47,112,97,115,116,101,108,50,54,47,53,0,0,0,0,0,47,98,108,117,101,115,56,47,49,0,0,0,0,0,0,0,117,110,99,108,111,115,101,100,
+32,116,111,107,101,110,0,0,93,32,32,37,100,32,116,114,117,101,32,37,115,10,0,0,47,112,97,115,116,101,108,50,54,47,52,0,0,0,0,0,47,112,97,115,116,101,108,50,54,47,51,0,0,0,0,0,47,112,97,115,116,101,108,50,54,47,50,0,0,0,0,0,37,115,32,98,111,120,114,97,100,32,105,115,32,110,111,119,32,48,46,48,32,105,110,32,103,112,105,99,44,32,101,108,115,101,32,105,116,32,114,101,109,97,105,110,115,32,50,46,48,10,0,0,0,0,0,0,47,112,97,115,116,101,108,50,54,47,49,0,0,0,0,0,37,46,48,102,32,37,46,48,102,32,0,0,0,0,0,
+0,47,112,97,115,116,101,108,50,53,47,53,0,0,0,0,0,47,112,97,115,116,101,108,50,53,47,52,0,0,0,0,0,37,37,69,110,100,67,111,109,109,101,110,116,115,10,115,97,118,101,10,0,0,0,0,0,69,116,97,0,0,0,0,0,84,105,109,101,115,45,73,116,97,108,105,99,0,0,0,0,105,109,97,112,95,110,112,58,109,97,112,0,0,0,0,0,116,104,114,101,101,112,111,118,101,114,104,97,110,103,0,0,47,112,97,115,116,101,108,50,53,47,51,0,0,0,0,0,114,101,115,111,108,117,116,105,111,110,0,0,0,0,0,0,115,99,97,108,101,32,61,32,40,37,102,44,37,102,
+41,10,0,0,0,0,0,0,0,0,116,97,105,108,95,108,112,0,118,97,108,105,103,110,0,0,103,114,101,121,0,0,0,0,37,108,102,44,37,108,102,0,47,112,97,115,116,101,108,50,53,47,50,0,0,0,0,0,47,112,97,115,116,101,108,50,53,47,49,0,0,0,0,0,47,112,97,115,116,101,108,50,52,47,52,0,0,0,0,0,47,98,108,117,101,115,55,47,55,0,0,0,0,0,0,0,37,103,32,37,103,32,0,0,47,112,97,115,116,101,108,50,52,47,51,0,0,0,0,0,112,110,103,58,102,105,103,0,47,112,97,115,116,101,108,50,52,47,50,0,0,0,0,0,47,112,97,115,116,101,108,50,52,47,
+49,0,0,0,0,0,115,99,97,108,101,61,49,46,48,32,37,115,32,114,101,113,117,105,114,101,100,32,102,111,114,32,99,111,109,112,97,114,105,115,111,110,115,10,0,0,47,112,97,115,116,101,108,50,51,47,51,0,0,0,0,0,32,102,105,108,108,101,100,61,34,102,97,108,115,101,34,32,0,0,0,0,0,0,0,0,47,112,97,115,116,101,108,50,51,47,50,0,0,0,0,0,47,112,97,115,116,101,108,50,51,47,49,0,0,0,0,0,9,0,0,0,0,0,0,0,37,37,37,37,66,111,117,110,100,105,110,103,66,111,120,58,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,69,112,
+115,105,108,111,110,0,84,105,109,101,115,45,66,111,108,100,73,116,97,108,105,99,0,0,0,0,0,0,0,0,102,105,118,101,112,111,118,101,114,104,97,110,103,0,0,0,47,112,97,115,116,101,108,49,57,47,57,0,0,0,0,0,100,112,105,0,0,0,0,0,104,101,97,100,95,108,112,0,116,111,111,108,116,105,112,0,103,114,101,101,110,121,101,108,108,111,119,0,0,0,0,0,109,97,114,103,105,110,0,0,47,112,97,115,116,101,108,49,57,47,56,0,0,0,0,0,47,112,97,115,116,101,108,49,57,47,55,0,0,0,0,0,47,112,97,115,116,101,108,49,57,47,54,0,0,0,
+0,0,47,98,108,117,101,115,55,47,54,0,0,0,0,0,0,0,91,32,0,0,0,0,0,0,47,112,97,115,116,101,108,49,57,47,53,0,0,0,0,0,100,97,116,97,32,101,114,114,111,114,0,0,0,0,0,0,47,112,97,115,116,101,108,49,57,47,52,0,0,0,0,0,47,112,97,115,116,101,108,49,57,47,51,0,0,0,0,0,98,111,120,114,97,100,61,50,46,48,32,37,115,32,119,105,108,108,32,98,101,32,114,101,115,101,116,32,116,111,32,48,46,48,32,98,121,32,103,112,105,99,32,111,110,108,121,10,0,0,0,0,0,0,0,0,47,112,97,115,116,101,108,49,57,47,50,0,0,0,0,0,34,32,0,
+0,0,0,0,0,47,112,97,115,116,101,108,49,57,47,49,0,0,0,0,0,47,112,97,115,116,101,108,49,56,47,56,0,0,0,0,0,100,105,97,109,111,110,100,0,37,37,66,111,117,110,100,105,110,103,66,111,120,58,32,40,97,116,101,110,100,41,10,0,69,103,114,97,118,101,0,0,84,105,109,101,115,0,0,0,114,101,115,116,114,105,99,116,105,111,110,115,105,116,101,0,47,112,97,115,116,101,108,49,56,47,55,0,0,0,0,0,99,111,110,99,101,110,116,114,97,116,101,0,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,32,105,110,32,112,111,115,
+32,97,116,116,114,105,98,117,116,101,32,102,111,114,32,101,100,103,101,32,40,37,115,44,37,115,41,10,0,116,105,116,108,101,0,0,0,103,114,101,101,110,0,0,0,84,104,101,32,99,104,97,114,97,99,116,101,114,32,39,37,99,39,32,97,112,112,101,97,114,115,32,105,110,32,98,111,116,104,32,116,104,101,32,108,97,121,101,114,115,101,112,32,97,110,100,32,108,97,121,101,114,108,105,115,116,115,101,112,32,97,116,116,114,105,98,117,116,101,115,32,45,32,108,97,121,101,114,108,105,115,116,115,101,112,32,105,103,110,111,
+114,101,100,46,10,0,0,0,0,47,112,97,115,116,101,108,49,56,47,54,0,0,0,0,0,47,112,97,115,116,101,108,49,56,47,53,0,0,0,0,0,47,112,97,115,116,101,108,49,56,47,52,0,0,0,0,0,47,98,108,117,101,115,55,47,53,0,0,0,0,0,0,0,117,115,45,62,110,97,109,101,0,0,0,0,0,0,0,0,102,105,110,100,95,102,97,115,116,95,110,111,100,101,40,103,44,32,110,41,0,0,0,0,47,112,97,115,116,101,108,49,56,47,51,0,0,0,0,0,47,112,97,115,116,101,108,49,56,47,50,0,0,0,0,0,47,112,97,115,116,101,108,49,56,47,49,0,0,0,0,0,37,115,32,110,111,
+110,45,102,97,116,97,108,32,114,117,110,45,116,105,109,101,32,112,105,99,32,118,101,114,115,105,111,110,32,100,101,116,101,114,109,105,110,97,116,105,111,110,44,32,118,101,114,115,105,111,110,32,50,10,0,0,0,0,0,47,112,97,115,116,101,108,49,55,47,55,0,0,0,0,0,32,102,105,108,108,101,100,61,34,116,114,117,101,34,32,102,105,108,108,99,111,108,111,114,61,34,0,0,0,0,0,0,47,112,97,115,116,101,108,49,55,47,54,0,0,0,0,0,47,112,97,115,116,101,108,49,55,47,53,0,0,0,0,0,37,37,80,97,103,101,115,58,32,49,10,0,
+0,0,0,0,69,99,105,114,99,0,0,0,84,105,109,101,115,45,66,111,108,100,0,0,0,0,0,0,112,114,105,109,101,114,115,105,116,101,0,0,0,0,0,0,47,112,97,115,116,101,108,49,55,47,52,0,0,0,0,0,99,108,117,115,116,101,114,114,97,110,107,0,0,0,0,0,10,0,0,0,0,0,0,0,37,108,102,44,37,108,102,37,110,0,0,0,0,0,0,0,116,97,114,103,101,116,0,0,103,114,97,121,0,0,0,0,44,0,0,0,0,0,0,0,47,112,97,115,116,101,108,49,55,47,51,0,0,0,0,0,47,112,97,115,116,101,108,49,55,47,50,0,0,0,0,0,47,112,97,115,116,101,108,49,55,47,49,0,0,0,
+0,0,47,98,108,117,101,115,55,47,52,0,0,0,0,0,0,0,117,115,0,0,0,0,0,0,115,105,122,101,61,61,102,114,101,101,100,0,0,0,0,0,47,112,97,115,116,101,108,49,54,47,54,0,0,0,0,0,47,112,97,115,116,101,108,49,54,47,53,0,0,0,0,0,47,112,97,115,116,101,108,49,54,47,52,0,0,0,0,0,37,115,32,100,111,110,39,116,32,99,104,97,110,103,101,32,97,110,121,116,104,105,110,103,32,98,101,108,111,119,32,116,104,105,115,32,108,105,110,101,32,105,110,32,116,104,105,115,32,100,114,97,119,105,110,103,10,0,0,0,0,0,0,0,65,103,110,
+111,100,101,105,110,102,111,95,116,0,0,0,0,47,112,97,115,116,101,108,49,54,47,51,0,0,0,0,0,34,0,0,0,0,0,0,0,47,112,97,115,116,101,108,49,54,47,50,0,0,0,0,0,47,112,97,115,116,101,108,49,54,47,49,0,0,0,0,0,37,37,80,97,103,101,115,58,32,40,97,116,101,110,100,41,10,0,0,0,0,0,0,0,69,97,99,117,116,101,0,0,103,114,101,101,110,0,0,0,102,97,110,116,97,115,121,0,112,114,111,116,101,105,110,115,116,97,98,0,0,0,0,0,47,112,97,115,116,101,108,49,53,47,53,0,0,0,0,0,108,97,110,100,115,99,97,112,101,0,0,0,0,0,0,0,
+112,111,115,32,97,116,116,114,105,98,117,116,101,32,102,111,114,32,101,100,103,101,32,40,37,115,44,37,115,41,32,100,111,101,115,110,39,116,32,104,97,118,101,32,51,110,43,49,32,112,111,105,110,116,115,10,0,0,0,0,0,0,0,0,115,116,121,108,101,0,0,0,103,111,108,100,101,110,114,111,100,0,0,0,0,0,0,0,108,97,121,101,114,108,105,115,116,115,101,112,0,0,0,0,47,112,97,115,116,101,108,49,53,47,52,0,0,0,0,0,47,112,97,115,116,101,108,49,53,47,51,0,0,0,0,0,47,112,97,115,116,101,108,49,53,47,50,0,0,0,0,0,47,98,108,
+117,101,115,55,47,51,0,0,0,0,0,0,0,103,118,108,111,97,100,105,109,97,103,101,95,99,111,114,101,46,99,0,0,0,0,0,0,47,112,97,115,116,101,108,49,53,47,49,0,0,0,0,0,47,112,97,115,116,101,108,49,52,47,52,0,0,0,0,0,38,113,117,111,116,59,0,0,47,112,97,115,116,101,108,49,52,47,51,0,0,0,0,0,46,110,114,32,83,70,32,37,46,48,102,10,115,99,97,108,101,116,104,105,99,107,110,101,115,115,32,61,32,37,46,48,102,10,0,0,0,0,0,0,47,112,97,115,116,101,108,49,52,47,50,0,0,0,0,0,114,97,110,107,0,0,0,0,47,112,97,115,116,
+101,108,49,52,47,49,0,0,0,0,0,85,112,0,0,0,0,0,0,47,112,97,115,116,101,108,49,51,47,51,0,0,0,0,0,32,45,102,105,108,108,32,0,37,37,37,37,84,105,116,108,101,58,32,37,115,10,0,0,69,84,72,0,0,0,0,0,83,121,109,98,111,108,0,0,111,98,106,112,45,62,108,98,108,0,0,0,0,0,0,0,112,114,111,116,101,97,115,101,115,105,116,101,0,0,0,0,47,112,97,115,116,101,108,49,51,47,50,0,0,0,0,0,111,114,105,101,110,116,97,116,105,111,110,0,0,0,0,0,32,101,44,37,108,102,44,37,108,102,37,110,0,0,0,0,114,111,119,115,112,97,110,0,
+103,111,108,100,0,0,0,0,58,9,32,0,0,0,0,0,47,112,97,115,116,101,108,49,51,47,49,0,0,0,0,0,47,112,97,105,114,101,100,57,47,57,0,0,0,0,0,0,116,114,105,101,115,32,61,32,37,100,44,32,109,111,100,101,32,61,32,37,115,10,0,0,47,112,97,105,114,101,100,57,47,56,0,0,0,0,0,0,47,98,108,117,101,115,55,47,50,0,0,0,0,0,0,0,106,111,98,0,0,0,0,0,47,112,97,105,114,101,100,57,47,55,0,0,0,0,0,0,27,0,0,0,0,0,0,0,111,115,97,103,101,0,0,0,47,112,97,105,114,101,100,57,47,54,0,0,0,0,0,0,47,112,97,105,114,101,100,57,47,53,
+0,0,0,0,0,0,37,115,32,116,111,32,99,104,97,110,103,101,32,100,114,97,119,105,110,103,32,115,105,122,101,44,32,109,117,108,116,105,112,108,121,32,116,104,101,32,119,105,100,116,104,32,97,110,100,32,104,101,105,103,104,116,32,111,110,32,116,104,101,32,46,80,83,32,108,105,110,101,32,97,98,111,118,101,32,97,110,100,32,116,104,101,32,110,117,109,98,101,114,32,111,110,32,116,104,101,32,116,119,111,32,108,105,110,101,115,32,98,101,108,111,119,32,40,114,111,117,110,100,101,100,32,116,111,32,116,104,101,32,
+110,101,97,114,101,115,116,32,105,110,116,101,103,101,114,41,32,98,121,32,97,32,115,99,97,108,101,32,102,97,99,116,111,114,10,0,0,0,0,0,0,0,0,47,112,97,105,114,101,100,57,47,52,0,0,0,0,0,0,103,118,58,100,111,116,0,0,99,32,0,0,0,0,0,0,99,97,110,110,111,116,32,109,97,108,108,111,99,32,111,112,115,0,0,0,0,0,0,0,47,112,97,105,114,101,100,57,47,51,0,0,0,0,0,0,47,112,97,105,114,101,100,57,47,50,0,0,0,0,0,0,80,97,116,104,32,112,114,111,118,105,100,101,100,32,116,111,32,102,105,108,101,58,32,34,37,115,34,
+32,104,97,115,32,98,101,101,110,32,105,103,110,111,114,101,100,32,98,101,99,97,117,115,101,32,102,105,108,101,115,32,97,114,101,32,111,110,108,121,32,112,101,114,109,105,116,116,101,100,32,116,111,32,98,101,32,108,111,97,100,101,100,32,102,114,111,109,32,116,104,101,32,100,105,114,101,99,116,111,114,105,101,115,32,105,110,32,34,37,115,34,32,119,104,101,110,32,114,117,110,110,105,110,103,32,105,110,32,97,110,32,104,116,116,112,32,115,101,114,118,101,114,46,10,0,0,0,0,0,0,0,0,37,100,32,37,100,32,115,
+101,116,108,97,121,101,114,10,0,68,101,108,116,97,0,0,0,108,111,97,100,105,109,97,103,101,0,0,0,0,0,0,0,80,97,108,97,116,105,110,111,45,82,111,109,97,110,0,0,100,101,102,108,97,116,105,111,110,32,112,114,111,98,108,101,109,32,37,100,10,0,0,0,114,110,97,115,116,97,98,0,99,111,117,114,0,0,0,0,47,112,97,105,114,101,100,57,47,49,0,0,0,0,0,0,114,111,116,97,116,101,0,0,115,44,37,108,102,44,37,108,102,37,110,0,0,0,0,0,112,111,114,116,0,0,0,0,103,104,111,115,116,119,104,105,116,101,0,0,0,0,0,0,108,97,121,
+101,114,115,101,112,0,0,0,0,0,0,0,0,100,111,116,105,110,105,116,46,99,0,0,0,0,0,0,0,108,101,118,101,108,32,62,61,32,48,32,38,38,32,108,101,118,101,108,32,60,61,32,40,42,110,41,45,62,108,101,118,101,108,0,0,0,0,0,0,47,112,97,105,114,101,100,56,47,56,0,0,0,0,0,0,99,117,115,116,111,109,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,105,110,32,114,111,117,116,101,115,112,108,105,110,101,115,44,32,101,100,103,101,32,105,115,32,97,32,108,111,111,112,32,97,116,32,37,115,10,0,0,99,97,110,39,116,
+32,111,112,101,110,32,108,105,98,114,97,114,121,32,102,105,108,101,32,37,115,10,0,0,0,0,0,37,100,32,111,117,116,32,111,102,32,37,100,32,101,120,116,101,114,105,111,114,32,108,97,98,101,108,115,32,112,111,115,105,116,105,111,110,101,100,46,10,0,0,0,0,0,0,0,47,112,97,105,114,101,100,56,47,55,0,0,0,0,0,0,117,112,100,97,116,101,58,32,109,105,115,109,97,116,99,104,101,100,32,108,99,97,32,105,110,32,116,114,101,101,117,112,100,97,116,101,115,10,0,0,107,105,110,100,32,61,61,32,76,84,95,78,79,78,69,0,83,
+101,116,116,105,110,103,32,105,110,105,116,105,97,108,32,112,111,115,105],"i8",L,l.J+92196);D([116,105,111,110,115,10,0,0,0,0,0,0,47,112,97,105,114,101,100,56,47,54,0,0,0,0,0,0,47,98,108,117,101,115,55,47,49,0,0,0,0,0,0,0,97,103,97,112,112,108,121,58,32,117,110,107,110,111,119,110,32,111,98,106,101,99,116,32,116,121,112,101,32,37,100,10,0,0,0,0,0,0,0,0,32,47,62,10,0,0,0,0,97,115,112,101,99,116,0,0,47,112,97,105,114,101,100,56,47,53,0,0,0,0,0,0,67,97,108,99,117,108,97,116,105,110,103,32,115,104,111,
+114,116,101,115,116,32,112,97,116,104,115,0,0,0,0,0,0,115,111,114,116,118,0,0,0,37,102,32,45,32,37,102,32,37,102,32,37,102,32,37,102,32,61,32,37,102,32,40,37,102,32,37,102,32,37,102,32,37,102,41,10,0,0,0,0,114,111,119,103,0,0,0,0,109,101,109,111,114,121,32,101,120,104,97,117,115,116,101,100,0,0,0,0,0,0,0,0,47,112,97,105,114,101,100,56,47,52,0,0,0,0,0,0,114,97,110,107,115,101,112,0,47,112,97,105,114,101,100,56,47,51,0,0,0,0,0,0,85,110,99,108,111,115,101,100,32,99,111,109,109,101,110,116,10,0,0,0,0,
+0,0,0,47,97,99,99,101,110,116,52,47,49,0,0,0,0,0,0,46,80,83,32,37,46,53,102,32,37,46,53,102,10,0,0,114,111,111,116,32,61,32,37,115,10,0,0,0,0,0,0,47,112,97,105,114,101,100,56,47,50,0,0,0,0,0,0,98,101,122,45,62,115,102,108,97,103,0,0,0,0,0,0,37,115,37,46,48,102,44,37,46,48,102,32,0,0,0,0,101,109,105,116,46,99,0,0,47,112,97,105,114,101,100,56,47,49,0,0,0,0,0,0,47,112,97,105,114,101,100,55,47,55,0,0,0,0,0,0,91,32,47,67,114,111,112,66,111,120,32,91,37,100,32,37,100,32,37,100,32,37,100,93,32,47,80,65,
+71,69,83,32,112,100,102,109,97,114,107,10,0,0,0,0,0,0,0,0,68,97,103,103,101,114,0,0,100,101,118,105,99,101,0,0,80,97,108,97,116,105,110,111,45,73,116,97,108,105,99,0,114,105,98,111,115,105,116,101,0,0,0,0,0,0,0,0,82,79,85,78,68,40,71,68,95,98,98,40,103,41,46,76,76,46,121,41,32,61,61,32,48,0,0,0,0,0,0,0,47,112,97,105,114,101,100,55,47,54,0,0,0,0,0,0,99,101,110,116,101,114,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,105,100,0,0,0,0,0,0,103,97,105,110,115,98,111,114,111,0,0,0,0,0,0,0,97,
+108,108,0,0,0,0,0,97,113,117,97,0,0,0,0,47,112,97,105,114,101,100,55,47,53,0,0,0,0,0,0,47,112,97,105,114,101,100,55,47,52,0,0,0,0,0,0,47,112,97,105,114,101,100,55,47,51,0,0,0,0,0,0,47,98,108,117,101,115,54,47,54,0,0,0,0,0,0,0,60,118,58,105,109,97,103,101,32,115,114,99,61,34,37,115,34,32,115,116,121,108,101,61,34,32,112,111,115,105,116,105,111,110,58,97,98,115,111,108,117,116,101,59,32,119,105,100,116,104,58,37,46,50,102,59,32,104,101,105,103,104,116,58,37,46,50,102,59,32,108,101,102,116,58,37,46,
+50,102,32,59,32,116,111,112,58,37,46,50,102,34,0,0,0,0,0,47,112,97,105,114,101,100,55,47,50,0,0,0,0,0,0,59,10,0,0,0,0,0,0,108,112,0,0,0,0,0,0,47,112,97,105,114,101,100,55,47,49,0,0,0,0,0,0,108,97,121,111,117,116,32,37,115,10,0,0,0,0,0,0,47,112,97,105,114,101,100,54,47,54,0,0,0,0,0,0,114,111,116,97,116,105,111,110,0,0,0,0,0,0,0,0,108,101,118,101,108,32,103,114,97,112,104,32,114,101,99,0,47,112,97,105,114,101,100,54,47,53,0,0,0,0,0,0,109,32,0,0,0,0,0,0,47,112,97,105,114,101,100,54,47,52,0,0,0,0,0,0,
+110,101,119,0,0,0,0,0,110,101,120,116,35,105,116,101,114,61,37,100,10,0,0,0,47,112,97,105,114,101,100,54,47,51,0,0,0,0,0,0,34,37,115,34,32,119,97,115,32,110,111,116,32,102,111,117,110,100,32,97,115,32,97,32,102,105,108,101,32,111,114,32,97,115,32,97,32,115,104,97,112,101,32,108,105,98,114,97,114,121,32,109,101,109,98,101,114,10,0,0,0,0,0,0,32,0,0,0,0,0,0,0,99,97,110,118,97,115,32,115,105,122,101,32,40,37,100,44,37,100,41,32,101,120,99,101,101,100,115,32,80,68,70,32,108,105,109,105,116,32,40,37,100,
+41,10,9,40,115,117,103,103,101,115,116,32,115,101,116,116,105,110,103,32,97,32,98,111,117,110,100,105,110,103,32,98,111,120,32,115,105,122,101,44,32,115,101,101,32,100,111,116,40,49,41,41,10,0,0,67,104,105,0,0,0,0,0,116,101,120,116,108,97,121,111,117,116,0,0,0,0,0,0,80,97,108,97,116,105,110,111,45,66,111,108,100,73,116,97,108,105,99,0,0,0,0,0,105,110,115,117,108,97,116,111,114,0,0,0,0,0,0,0,47,112,97,105,114,101,100,54,47,50,0,0,0,0,0,0,112,97,103,101,0,0,0,0,104,114,101,102,0,0,0,0,99,111,109,112,
+114,101,115,115,32,37,103,32,10,0,0,0,102,117,99,104,115,105,97,0,84,104,101,32,108,97,121,101,114,115,101,108,101,99,116,32,97,116,116,114,105,98,117,116,101,32,34,37,115,34,32,100,111,101,115,32,110,111,116,32,109,97,116,99,104,32,97,110,121,32,108,97,121,101,114,32,115,112,101,99,105,102,101,100,32,98,121,32,116,104,101,32,108,97,121,101,114,115,32,97,116,116,114,105,98,117,116,101,32,45,32,105,103,110,111,114,101,100,46,10,0,0,0,0,112,105,110,0,0,0,0,0,47,112,97,105,114,101,100,54,47,49,0,0,0,
+0,0,0,105,110,118,105,115,105,98,108,101,0,0,0,0,0,0,0,99,108,117,115,116,101,114,0,47,112,97,105,114,101,100,53,47,53,0,0,0,0,0,0,37,108,102,44,37,108,102,37,99,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,105,110,115,116,97,108,108,95,105,110,95,114,97,110,107,44,32,108,105,110,101,32,37,100,58,32,114,97,110,107,32,37,100,32,110,111,116,32,105,110,32,114,97,110,107,32,114,97,110,103,101,32,91,37,100,44,37,100,93,10,0,0,0,0,47,112,97,105,114,101,100,53,47,52,0,0,0,0,0,0,47,98,108,117,101,115,54,47,53,0,0,0,0,
+0,0,0,36,99,32,99,114,101,97,116,101,32,105,109,97,103,101,32,37,46,50,102,32,37,46,50,102,32,45,105,109,97,103,101,32,34,112,104,111,116,111,95,37,115,34,10,0,0,0,0,47,112,97,105,114,101,100,53,47,51,0,0,0,0,0,0,47,112,97,105,114,101,100,53,47,50,0,0,0,0,0,0,47,112,97,105,114,101,100,53,47,49,0,0,0,0,0,0,93,10,46,80,69,10,0,0,47,112,97,105,114,101,100,52,47,52,0,0,0,0,0,0,47,62,60,47,118,58,115,104,97,112,101,62,10,0,0,0,47,112,97,105,114,101,100,52,47,51,0,0,0,0,0,0,47,112,97,105,114,101,100,52,
+47,50,0,0,0,0,0,0,37,103,32,37,103,32,115,101,116,95,115,99,97,108,101,32,37,100,32,114,111,116,97,116,101,32,37,103,32,37,103,32,116,114,97,110,115,108,97,116,101,10,0,0,0,0,0,0,67,99,101,100,105,108,0,0,108,97,121,111,117,116,0,0,80,97,108,97,116,105,110,111,32,76,105,110,111,116,121,112,101,0,0,0,0,0,0,0,117,116,114,0,0,0,0,0,47,112,97,105,114,101,100,52,47,49,0,0,0,0,0,0,115,105,122,101,0,0,0,0,104,101,105,103,104,116,0,0,99,111,110,106,117,103,97,116,101,95,103,114,97,100,105,101,110,116,58,
+32,117,110,101,120,112,101,99,116,101,100,32,108,101,110,103,116,104,32,48,32,118,101,99,116,111,114,10,0,102,111,114,101,115,116,103,114,101,101,110,0,0,0,0,0,108,97,121,101,114,115,101,108,101,99,116,0,0,0,0,0,112,111,115,0,0,0,0,0,47,112,97,105,114,101,100,51,47,51,0,0,0,0,0,0,47,112,97,105,114,101,100,51,47,50,0,0,0,0,0,0,47,112,97,105,114,101,100,51,47,49,0,0,0,0,0,0,47,98,108,117,101,115,54,47,52,0,0,0,0,0,0,0,110,111,116,32,119,101,108,108,45,102,111,114,109,101,100,32,40,105,110,118,97,108,
+105,100,32,116,111,107,101,110,41,0,105,109,97,103,101,32,99,114,101,97,116,101,32,112,104,111,116,111,32,34,112,104,111,116,111,95,37,115,34,32,45,102,105,108,101,32,34,37,115,34,10,0,0,0,0,0,0,0,47,112,97,105,114,101,100,49,50,47,57,0,0,0,0,0,47,112,97,105,114,101,100,49,50,47,56,0,0,0,0,0,47,112,97,105,114,101,100,49,50,47,55,0,0,0,0,0,90,97,112,102,68,105,110,103,98,97,116,115,0,0,0,0,47,112,97,105,114,101,100,49,50,47,54,0,0,0,0,0,60,118,58,112,97,116,104,32,32,118,61,34,0,0,0,0,47,112,97,105,
+114,101,100,49,50,47,53,0,0,0,0,0,47,112,97,105,114,101,100,49,50,47,52,0,0,0,0,0,103,115,97,118,101,10,37,100,32,37,100,32,37,100,32,37,100,32,98,111,120,112,114,105,109,32,99,108,105,112,32,110,101,119,112,97,116,104,10,0,66,101,116,97,0,0,0,0,114,101,110,100,101,114,0,0,80,97,108,97,116,105,110,111,45,66,111,108,100,0,0,0,116,101,114,109,105,110,97,116,111,114,0,0,0,0,0,0,112,105,110,0,0,0,0,0,47,112,97,105,114,101,100,49,50,47,51,0,0,0,0,0,102,111,110,116,110,97,109,101,115,0,0,0,0,0,0,0,103,
+114,97,100,105,101,110,116,97,110,103,108,101,0,0,0,67,97,108,99,117,108,97,116,105,110,103,32,99,105,114,99,117,105,116,32,109,111,100,101,108,0,0,0,0,0,0,0,98,108,111,99,107,116,114,101,101,46,99,0,0,0,0,0,102,108,111,114,97,108,119,104,105,116,101,0,0,0,0,0,108,97,121,101,114,115,0,0,99,109,97,112,120,58,109,97,112,0,0,0,0,0,0,0,100,105,109,0,0,0,0,0,47,112,97,105,114,101,100,49,50,47,50,0,0,0,0,0,47,112,97,105,114,101,100,49,50,47,49,50,0,0,0,0,47,112,97,105,114,101,100,49,50,47,49,49,0,0,0,0,
+47,98,108,117,101,115,54,47,51,0,0,0,0,0,0,0,103,105,102,58,116,107,0,0,47,112,97,105,114,101,100,49,50,47,49,48,0,0,0,0,106,112,103,58,115,118,103,0,47,112,97,105,114,101,100,49,50,47,49,0,0,0,0,0,47,112,97,105,114,101,100,49,49,47,57,0,0,0,0,0,83,121,109,98,111,108,0,0,47,112,97,105,114,101,100,49,49,47,56,0,0,0,0,0,32,62,0,0,0,0,0,0,47,112,97,105,114,101,100,49,49,47,55,0,0,0,0,0,47,98,108,117,101,115,54,47,50,0,0,0,0,0,0,0,47,112,97,105,114,101,100,49,49,47,54,0,0,0,0,0,37,100,32,37,100,32,37,
+100,32,98,101,103,105,110,112,97,103,101,10,0,0,0,0,0,65,117,109,108,0,0,0,0,114,111,109,97,110,0,0,0,99,100,115,0,0,0,0,0,47,112,97,105,114,101,100,49,49,47,53,0,0,0,0,0,97,114,114,97,121,0,0,0,115,104,111,119,98,111,120,101,115,0,0,0,0,0,0,0,37,108,102,44,37,108,102,0,102,105,120,101,100,115,105,122,101,0,0,0,0,0,0,0,110,111,114,109,97,108,105,122,101,0,0,0,0,0,0,0,102,105,114,101,98,114,105,99,107,0,0,0,0,0,0,0,100,103,101,115,102,105,114,115,116,0,0,0,0,0,0,0,100,105,109,101,110,0,0,0,47,112,
+97,105,114,101,100,49,49,47,52,0,0,0,0,0,105,99,111,0,0,0,0,0,47,112,97,105,114,101,100,49,49,47,51,0,0,0,0,0,47,112,97,105,114,101,100,49,49,47,50,0,0,0,0,0,98,111,120,0,0,0,0,0,106,112,103,58,118,109,108,0,47,112,97,105,114,101,100,49,49,47,49,49,0,0,0,0,47,112,97,105,114,101,100,49,49,47,49,48,0,0,0,0,115,116,114,101,97,109,32,101,114,114,111,114,0,0,0,0,47,112,97,105,114,101,100,49,49,47,49,0,0,0,0,0,84,105,109,101,115,45,82,111,109,97,110,0,0,0,0,0,47,112,97,105,114,101,100,49,48,47,57,0,0,0,
+0,0,32,119,105,100,116,104,58,32,37,100,59,32,104,101,105,103,104,116,58,32,37,100,34,0,47,112,97,105,114,101,100,49,48,47,56,0,0,0,0,0,47,112,97,105,114,101,100,49,48,47,55,0,0,0,0,0,60,60,32,47,80,97,103,101,83,105,122,101,32,91,37,100,32,37,100,93,32,62,62,32,115,101,116,112,97,103,101,100,101,118,105,99,101,10,0,0,65,116,105,108,100,101,0,0,38,97,109,112,59,0,0,0,0,0,1,0,0,0,0,0,78,101,119,67,101,110,116,117,114,121,83,99,104,108,98,107,45,82,111,109,97,110,0,0,112,114,111,109,111,116,101,114,
+0,0,0,0,0,0,0,0,47,112,97,105,114,101,100,49,48,47,54,0,0,0,0,0,101,113,117,97,108,108,121,0,99,111,108,115,112,97,110,0,112,114,105,115,109,0,0,0,100,111,100,103,101,114,98,108,117,101,0,0,0,0,0,0,111,100,101,115,102,105,114,115,116,0,0,0,0,0,0,0,73,108,108,101,103,97,108,32,118,97,108,117,101,32,37,115,32,102,111,114,32,97,116,116,114,105,98,117,116,101,32,34,109,111,100,101,34,32,105,110,32,103,114,97,112,104,32,37,115,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,47,112,97,105,114,101,100,49,
+48,47,53,0,0,0,0,0,47,112,97,105,114,101,100,49,48,47,52,0,0,0,0,0,47,112,97,105,114,101,100,49,48,47,51,0,0,0,0,0,65,114,114,111,119,32,116,121,112,101,32,34,37,115,34,32,117,110,107,110,111,119,110,32,45,32,105,103,110,111,114,105,110,103,10,0,0,0,0,0,47,98,108,117,101,115,54,47,49,0,0,0,0,0,0,0,106,112,101,58,118,109,108,0,47,112,97,105,114,101,100,49,48,47,50,0,0,0,0,0,78,68,95,110,101,120,116,40,118,41,32,61,61,32,78,85,76,76,0,0,0,0,0,0,47,112,97,105,114,101,100,49,48,47,49,48,0,0,0,0,47,112,
+97,105,114,101,100,49,48,47,49,0,0,0,0,0,80,97,108,97,116,105,110,111,45,66,111,108,100,73,116,97,108,105,99,0,0,0,0,0,47,111,114,114,100,57,47,57,0,0,0,0,0,0,0,0,103,118,114,101,110,100,101,114,95,99,111,114,101,95,118,109,108,46,99,0,0,0,0,0,47,111,114,114,100,57,47,56,0,0,0,0,0,0,0,0,47,111,114,114,100,57,47,55,0,0,0,0,0,0,0,0,80,111,114,116,114,97,105,116,0,0,0,0,0,0,0,0,65,114,105,110,103,0,0,0,78,101,119,67,101,110,116,117,114,121,83,99,104,108,98,107,45,73,116,97,108,105,99,0,77,99,105,114,
+99,108,101,0,47,111,114,114,100,57,47,54,0,0,0,0,0,0,0,0,114,97,110,107,115,101,112,0,95,37,100,0,0,0,0,0,99,101,108,108,115,112,97,99,105,110,103,0,0,0,0,0,121,120,32,112,115,101,117,100,111,45,111,114,116,104,111,103,111,110,97,108,32,99,111,110,115,116,114,97,105,110,116,115,0,0,0,0,0,0,0,0,32,37,100,32,37,100,0,0,100,105,109,103,114,101,121,0,111,117,116,112,117,116,111,114,100,101,114,0,0,0,0,0,109,97,106,111,114,0,0,0,47,111,114,114,100,57,47,53,0,0,0,0,0,0,0,0,114,105,102,102,0,0,0,0,47,111,
+114,114,100,57,47,52,0,0,0,0,0,0,0,0,47,111,114,114,100,57,47,51,0,0,0,0,0,0,0,0,47,98,108,117,101,115,53,47,53,0,0,0,0,0,0,0,106,112,101,103,58,118,109,108,0,0,0,0,0,0,0,0,47,111,114,114,100,57,47,50,0,0,0,0,0,0,0,0,118,112,0,0,0,0,0,0,47,111,114,114,100,57,47,49,0,0,0,0,0,0,0,0,47,111,114,114,100,56,47,56,0,0,0,0,0,0,0,0,80,97,108,97,116,105,110,111,45,73,116,97,108,105,99,0,47,111,114,114,100,56,47,55,0,0,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,48,0,0,0,0,0,0,0,47,111,
+114,114,100,56,47,54,0,0,0,0,0,0,0,0,47,111,114,114,100,56,47,53,0,0,0,0,0,0,0,0,76,97,110,100,115,99,97,112,101,0,0,0,0,0,0,0,65,108,112,104,97,0,0,0,82,73,70,70,0,0,0,0,78,101,119,67,101,110,116,117,114,121,83,99,104,108,98,107,45,66,111,108,100,73,116,97,108,105,99,0,0,0,0,0,77,115,113,117,97,114,101,0,47,111,114,114,100,56,47,52,0,0,0,0,0,0,0,0,110,111,100,101,115,101,112,0,116,114,97,110,115,112,97,114,101,110,116,0,0,0,0,0,99,101,108,108,112,97,100,100,105,110,103,0,0,0,0,0,112,111,114,116,
+104,111,121,120,0,0,0,0,0,0,0,0,100,105,109,103,114,97,121,0,37,108,102,44,37,108,102,44,37,108,102,44,37,108,102,44,37,108,102,0,0,0,0,0,99,121,97,110,0,0,0,0,75,75,0,0,0,0,0,0,47,111,114,114,100,56,47,51,0,0,0,0,0,0,0,0,47,98,108,117,101,115,53,47,52,0,0,0,0,0,0,0,47,111,114,114,100,56,47,50,0,0,0,0,0,0,0,0,47,111,114,114,100,56,47,49,0,0,0,0,0,0,0,0,103,105,102,58,118,109,108,0,47,111,114,114,100,55,47,55,0,0,0,0,0,0,0,0,47,111,114,114,100,55,47,54,0,0,0,0,0,0,0,0,38,35,49,54,48,59,0,0,47,111,
+114,114,100,55,47,53,0,0,0,0,0,0,0,0,80,97,108,97,116,105,110,111,45,66,111,108,100,0,0,0,113,0,0,0,0,0,0,0,47,111,114,114,100,55,47,52,0,0,0,0,0,0,0,0,35,37,48,50,120,37,48,50,120,37,48,50,120,0,0,0,47,111,114,114,100,55,47,51,0,0,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,47,111,114,114,100,55,47,50,0,0,0,0,0,0,0,0,32,99,114,101,97,116,101,32,108,105,110,101,32,0,0,0,102,105,103,0,0,0,0,0,65,103,114,97,118,101,0,0,67,101,110,116,117,114,121,32,83,99,104,111,111,108,98,111,
+111,107,32,76,0,0,0,0,75,80,95,82,105,103,104,116,0,0,0,0,0,0,0,0,77,100,105,97,109,111,110,100,0,0,0,0,0,0,0,0,47,111,114,114,100,55,47,49,0,0,0,0,0,0,0,0,82,76,0,0,0,0,0,0,100,111,116,116,101,100,0,0,98,111,114,100,101,114,0,0,120,121,32,112,115,101,117,100,111,45,111,114,116,104,111,103,111,110,97,108,32,99,111,110,115,116,114,97,105,110,116,115,0,0,0,0,0,0,0,0,97,99,116,117,97,108,0,0,100,101,101,112,115,107,121,98,108,117,101,0,0,0,0,0,37,108,102,44,37,108,102,44,37,108,102,44,37,91,94,44,93,
+37,115,0,0,0,0,0,109,111,100,101,0,0,0,0,47,111,114,114,100,54,47,54,0,0,0,0,0,0,0,0,120,109,108,0,0,0,0,0,37,37,37,37,80,97,103,101,79,114,105,101,110,116,97,116,105,111,110,58,32,37,115,10,0,0,0,0,0,0,0,0,47,98,108,117,101,115,53,47,51,0,0,0,0,0,0,0,47,111,114,114,100,54,47,53,0,0,0,0,0,0,0,0,47,111,114,114,100,54,47,52,0,0,0,0,0,0,0,0,57,58,112,114,105,115,109,0,112,110,103,58,118,109,108,0,47,111,114,114,100,54,47,51,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,112,97,116,99,104,119,111,114,107,0,0,0,0,0,
+0,0,47,111,114,114,100,54,47,50,0,0,0,0,0,0,0,0,47,111,114,114,100,54,47,49,0,0,0,0,0,0,0,0,80,97,108,97,116,105,110,111,45,82,111,109,97,110,0,0,47,111,114,114,100,53,47,53,0,0,0,0,0,0,0,0,100,111,116,58,100,111,116,0,110,111,110,101,0,0,0,0,99,97,110,110,111,116,32,102,105,110,100,32,116,114,105,97,110,103,108,101,32,112,97,116,104,0,0,0,0,0,0,0,47,111,114,114,100,53,47,52,0,0,0,0,0,0,0,0,47,111,114,114,100,53,47,51,0,0,0,0,0,0,0,0,102,105,108,101,32,108,111,97,100,105,110,103,32,105,115,32,100,
+105,115,97,98,108,101,100,32,98,101,99,97,117,115,101,32,116,104,101,32,101,110,118,105,114,111,110,109,101,110,116,32,99,111,110,116,97,105,110,115,32,83,69,82,86,69,82,95,78,65,77,69,61,34,37,115,34,10,97,110,100,32,116,104,101,32,71,86,95,70,73,76,69,95,80,65,84,72,32,118,97,114,105,97,98,108,101,32,105,115,32,117,110,115,101,116,32,111,114,32,101,109,112,116,121,46,10,0,0,0,0,37,46,48,50,102,0,0,0,65,99,105,114,99,0,0,0,78,101,119,67,101,110,116,117,114,121,83,99,104,108,98,107,45,66,111,108,
+100,0,0,0,114,32,38,38,32,115,0,0,117,110,100,101,114,108,105,110,101,0,0,0,0,0,0,0,102,111,110,116,110,97,109,101,58,32,117,110,97,98,108,101,32,116,111,32,114,101,115,111,108,118,101,32,34,37,115,34,10,0,0,0,0,0,0,0,47,111,114,114,100,53,47,50,0,0,0,0,0,0,0,0,66,84,0,0,0,0,0,0,70,65,76,83,69,0,0,0,100,97,115,104,101,100,0,0,98,103,99,111,108,111,114,0,112,111,114,116,104,111,120,121,0,0,0,0,0,0,0,0,100,101,101,112,112,105,110,107,0,0,0,0,0,0,0,0,37,108,102,44,37,108,102,44,37,108,102,44,39,37,91,
+94,39,93,39,0,0,0,0,0,109,101,109,111,114,121,32,97,108,108,111,99,97,116,105,111,110,32,102,97,105,108,117,114,101,10,0,0,0,0,0,0,85,110,107,110,111,119,110,32,118,97,108,117,101,32,37,115,32,102,111,114,32,97,116,116,114,105,98,117,116,101,32,34,109,111,100,101,108,34,32,105,110,32,103,114,97,112,104,32,37,115,32,45,32,105,103,110,111,114,101,100,10,0,0,0,114,32,38,38,32,110,0,0,47,111,114,114,100,53,47,49,0,0,0,0,0,0,0,0,60,63,120,109,108,0,0,0,37,37,37,37,80,97,103,101,66,111,117,110,100,105,
+110,103,66,111,120,58,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,0,0,0,0,101,112,115,102,0,0,0,0,99,111,109,112,46,99,0,0,105,110,32,114,111,117,116,101,115,112,108,105,110,101,115,44,32,105,108,108,101,103,97,108,32,118,97,108,117,101,115,32,111,102,32,112,114,101,118,32,37,100,32,97,110,100,32,110,101,120,116,32,37,100,44,32,108,105,110,101,32,37,100,10,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,118,32,61,61,32,110,0,0,37,100,32,111,117,116,32,111,102,32,37,100,32,108,97,98,101,108,115,32,112,111,
+115,105,116,105,111,110,101,100,46,10,0,0,0,0,0,0,0,0,47,98,108,117,101,115,53,47,50,0,0,0,0,0,0,0,47,111,114,114,100,52,47,52,0,0,0,0,0,0,0,0,98,108,97,99,107,0,0,0,115,101,97,114,99,104,115,105,122,101,0,0,0,0,0,0,116,107,0,0,0,0,0,0,45,45,0,0,0,0,0,0,47,111,114,114,100,52,47,51,0,0,0,0,0,0,0,0,100,101,102,97,117,108,116,100,105,115,116,0,0,0,0,0,58,32,0,0,0,0,0,0,115,111,114,116,118,0,0,0,115,118,103,58,115,118,103,0,47,111,114,114,100,52,47,50,0,0,0,0,0,0,0,0,67,97,108,99,117,108,97,116,105,110,
+103,32,77,68,83,32,109,111,100,101,108,0,0,0,108,97,121,111,117,116,32,37,115,10,0,0,0,0,0,0,114,101,99,32,37,102,32,37,102,32,37,102,32,37,102,10,0,0,0,0,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,114,111,111,116,0,0,0,0,47,111,114,114,100,52,47,49,0,0,0,0,0,0,0,0,76,97,98,101,108,32,99,108,111,115,101,100,32,98,101,102,111,114,101,32,101,110,100,32,111,102,32,72,84,77,76,32,101,108,101,109,101,110,116,10,0,0,0,0,0,0,0,0,47,111,114,114,100,51,47,51,0,0,0,0,0,0,0,0,111,118,101,
+114,108,97,112,0,78,101,119,67,101,110,116,117,114,121,83,99,104,108,98,107,45,66,111,108,100,73,116,97,108,105,99,0,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,47,111,114,114,100,51,47,50,0,0,0,0,0,0,0,0,99,111,110,99,46,99,0,0,47,97,99,99,101,110,116,51,47,51,0,0,0,0,0,0,115,97,109,112,108,101,112,111,105,110,116,115,0,0,0,0,69,68,95,116,111,95,118,105,114,116,40,101,41,32,61,61,32,78,85,76,76,0,0,0,34,32,47,62,0,0,0,0,47,111,114,114,100,51,47,49,0,0,0,0,0,0,0,0,111,98,106,0,0,
+0,0,0,47,111,114,97,110,103,101,115,57,47,57,0,0,0,0,0,120,100,111,116,32,118,101,114,115,105,111,110,32,34,37,115,34,32,116,111,111,32,108,111,110,103,0,0,0,0,0,0,65,97,99,117,116,101,0,0,72,101,108,118,101,116,105,99,97,45,79,98,108,105,113,117,101,0,0,0,0,0,0,0,110,0,0,0,0,0,0,0,105,110,118,104,111,117,115,101,0,0,0,0,0,0,0,0,110,101,97,116,111,115,112,108,105,110,101,115,46,99,0,0,47,111,114,97,110,103,101,115,57,47,56,0,0,0,0,0,76,82,0,0,0,0,0,0,50,48,0,0,0,0,0,0,98,97,108,105,103,110,0,0,112,
+111,114,116,104,111,95,121,120,0,0,0,0,0,0,0,100,97,114,107,118,105,111,108,101,116,0,0,0,0,0,0,118,105,101,119,112,111,114,116,0,0,0,0,0,0,0,0,105,115,32,105,110,97,112,112,114,111,112,114,105,97,116,101,46,32,82,101,118,101,114,116,105,110,103,32,116,111,32,116,104,101,32,115,104,111,114,116,101,115,116,32,112,97,116,104,32,109,111,100,101,108,46,10,0,0,0,0,0,0,0,0,97,110,116,105,113,117,101,119,104,105,116,101,0,0,0,0,47,111,114,97,110,103,101,115,57,47,55,0,0,0,0,0,101,112,115,0,0,0,0,0,37,37,
+37,37,80,97,103,101,58,32,37,100,32,37,100,10,0,0,0,0,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,47,98,108,117,101,115,53,47,49,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,57,47,54,0,0,0,0,0,37,115,32,45,62,32,37,115,58,32,116,97,105,108,32,105,115,32,105,110,115,105,100,101,32,104,101,97,100,32,99,108,117,115,116,101,114,32,37,115,10,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,57,47,53,0,0,0,0,0,115,118,103,58,120,100,111,116,0,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,57,47,
+52,0,0,0,0,0,32,45,45,32,0,0,0,0,47,111,114,97,110,103,101,115,57,47,51,0,0,0,0,0,110,111,100,101,32,37,115,44,32,112,111,115,105,116,105,111,110,32,37,115,44,32,101,120,112,101,99,116,101,100,32,116,119,111,32,100,111,117,98,108,101,115,10,0,0,0,0,0,47,111,114,97,110,103,101,115,57,47,50,0,0,0,0,0,78,101,119,67,101,110,116,117,114,121,83,99,104,108,98,107,45,82,111,109,97,110,0,0,115,112,108,105,110,101,115,32,97,110,100,32,99,108,117,115,116,101,114,32,101,100,103,101,115,32,110,111,116,32,115,
+117,112,112,111,114,116,101,100,32,45,32,117,115,105,110,103,32,108,105,110,101,32,115,101,103,109,101,110,116,115,10,0,0,114,111,111,116,0,0,0,0,47,111,114,97,110,103,101,115,57,47,49,0,0,0,0,0,108,101,118,101,108,32,97,115,115,105,103,110,109,101,110,116,32,99,111,110,115,116,114,97,105,110,116,115,0,0,0,0,34,32,100,97,115,104,115,116,121,108,101,61,34,100,111,116,0,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,56,47,56,0,0,0,0,0,98,98,0,0,0,0,0,0,71,111,105,110,103,32,116,111,32,97,112,112,108,121,
+32,97,110,111,116,104,101,114,32,101,120,112,97,110,115,105,111,110,46,10,0,0,0,0,0,0,47,111,114,97,110,103,101,115,56,47,55,0,0,0,0,0,37,115,32,119,104,105,108,101,32,111,112,101,110,105,110,103,32,37,115,10,0,0,0,0,91,32,0,0,0,0,0,0,95,116,108,100,114,97,119,95,0,0,0,0,0,0,0,0,65,69,108,105,103,0,0,0,72,101,108,118,101,116,105,99,97,45,78,97,114,114,111,119,45,79,98,108,105,113,117,101,0,0,0,0,0,0,0,0,105,32,60,32,78,79,68,69,67,65,82,68,0,0,0,0,105,110,118,116,114,97,112,101,122,105,117,109,0,
+0,0,0,47,111,114,97,110,103,101,115,56,47,54,0,0,0,0,0,114,97,110,107,100,105,114,0,49,57,0,0,0,0,0,0,60,84,68,62,0,0,0,0,112,115,101,117,100,111,45,111,114,116,104,111,103,111,110,97,108,32,99,111,110,115,116,114,97,105,110,116,115,0,0,0,100,97,114,107,116,117,114,113,117,111,105,115,101,0,0,0,112,97,103,101,100,105,114,61,37,115,32,105,103,110,111,114,101,100,10,0,0,0,0,0,101,100,103,101,115,32,105,110,32,103,114,97,112,104,32,37,115,32,104,97,118,101,32,110,111,32,108,101,110,32,97,116,116,114,
+105,98,117,116,101,46,32,72,101,110,99,101,44,32,116,104,101,32,109,100,115,32,109,111,100,101,108,10,0,0,47,111,114,97,110,103,101,115,56,47,53,0,0,0,0,0,197,208,211,198,0,0,0,0,37,37,37,37,69,110,100,80,97,103,101,58,32,37,100,10,0,0,0,0,0,0,0,0,105,110,118,105,115,0,0,0,47,98,108,117,101,115,52,47,52,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,56,47,52,0,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,105,110,115,116,97,108,108,95,105,110,95,114,97,110,107,44,32,108,105,110,101,32,
+37,100,58,32,78,68,95,111,114,100,101,114,40,37,115,41,32,91,37,100,93,32,62,32,71,68,95,114,97,110,107,40,82,111,111,116,41,91,37,100,93,46,97,110,32,91,37,100,93,10,0,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,56,47,51,0,0,0,0,0,112,114,101,102,105,120,32,109,117,115,116,32,110,111,116,32,98,101,32,98,111,117,110,100,32,116,111,32,111,110,101,32,111,102,32,116,104,101,32,114,101,115,101,114,118,101,100,32,110,97,109,101,115,112,97,99,101,32,110,97,109,101,115,0,101,112,115,58,120,100,111,116,0,
+0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,56,47,50,0,0,0,0,0,47,111,114,97,110,103,101,115,56,47,49,0,0,0,0,0,47,111,114,97,110,103,101,115,55,47,55,0,0,0,0,0,78,101,119,67,101,110,116,117,114,121,83,99,104,108,98,107,45,73,116,97,108,105,99,0,47,111,114,97,110,103,101,115,55,47,54,0,0,0,0,0,34,32,100,97,115,104,115,116,121,108,101,61,34,100,97,115,104,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,55,47,53,0,0,0,0,0,47,111,114,97,110,103,101,115,55,47,52,0,0,0,0,0,95,104,108,100,114,97,119,95,0,0,
+0,0,0,0,0,0,98,122,46,115,105,122,101,0,72,101,108,118,101,116,105,99,97,45,78,97,114,114,111,119,45,66,111,108,100,79,98,108,105,113,117,101,0,0,0,0,105,110,118,116,114,105,97,110,103,108,101,0,0,0,0,0,47,111,114,97,110,103,101,115,55,47,51,0,0,0,0,0,113,117,97,110,116,117,109,0,49,56,0,0,0,0,0,0,37,115,32,118,97,108,117,101,32,37,115,32,60,32,37,100,32,45,32,116,111,111,32,115,109,97,108,108,32,45,32,105,103,110,111,114,101,100,0,0,112,111,114,116,104,111,0,0,101,100,103,101,32,108,97,98,101,108,
+115,32,119,105,116,104,32,115,112,108,105,110,101,115,61,99,117,114,118,101,100,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,105,110,32,100,111,116,32,45,32,117,115,101,32,120,108,97,98,101,108,115,10,0,0,0,0,0,100,97,114,107,115,108,97,116,101,103,114,101,121,0,0,0,77,111,114,101,32,116,104,97,110,32,50,32,99,111,108,111,114,115,32,115,112,101,99,105,102,105,101,100,32,102,111,114,32,97,32,103,114,97,100,105,101,110,116,32,45,32,105,103,110,111,114,105,110,103,32,114,101,109,97,105,110,
+105,110,103,10,0,0,0,0,0,0,0,109,100,115,0,0,0,0,0,47,111,114,97,110,103,101,115,55,47,50,0,0,0,0,0,112,100,102,0,0,0,0,0,37,37,80,97,103,101,84,114,97,105,108,101,114,10,0,0,47,98,108,117,101,115,52,47,51,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,55,47,49,0,0,0,0,0,47,111,114,97,110,103,101,115,54,47,54,0,0,0,0,0,114,101,115,101,114,118,101,100,32,112,114,101,102,105,120,32,40,120,109,108,110,115,41,32,109,117,115,116,32,110,111,116,32,98,101,32,100,101,99,108,97,114,101,100,32,111,114,32,117,
+110,100,101,99,108,97,114,101,100,0,0,0,0,0,0,110,111,32,101,108,101,109,101,110,116,32,102,111,117,110,100,0,0,0,0,0,0,0,0,112,115,58,120,100,111,116,0,47,111,114,97,110,103,101,115,54,47,53,0,0,0,0,0,47,111,114,97,110,103,101,115,54,47,52,0,0,0,0,0,47,111,114,97,110,103,101,115,54,47,51,0,0,0,0,0,78,101,119,67,101,110,116,117,114,121,83,99,104,108,98,107,45,66,111,108,100,0,0,0,47,111,114,97,110,103,101,115,54,47,50,0,0,0,0,0,34,32,119,101,105,103,104,116,61,34,37,46,48,102,112,116,0,0,0,0,0,0,
+0,0,47,111,114,97,110,103,101,115,54,47,49,0,0,0,0,0,47,111,114,97,110,103,101,115,53,47,53,0,0,0,0,0,95,116,100,114,97,119,95,0,100,101,115,116,105,110,97,116,105,111,110,32,112,111,105,110,116,32,110,111,116,32,105,110,32,97,110,121,32,116,114,105,97,110,103,108,101,0,0,0,84,119,111,32,99,108,117,115,116,101,114,115,32,110,97,109,101,100,32,37,115,32,45,32,116,104,101,32,115,101,99,111,110,100,32,119,105,108,108,32,98,101,32,105,103,110,111,114,101,100,10,0,0,0,0,0,72,101,108,118,101,116,105,99,
+97,45,78,97,114,114,111,119,45,66,111,108,100,0,0,0,81,0,0,0,0,0,0,0,116,114,105,112,108,101,111,99,116,97,103,111,110,0,0,0,47,111,114,97,110,103,101,115,53,47,52,0,0,0,0,0,105,109,97,103,101,112,97,116,104,0,0,0,0,0,0,0,49,55,0,0,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,37,115,32,118,97,108,117,101,32,37,115,32,62,32,37,100,32,45,32,116,111,111,32,108,97,114,103,101,32,45,32,105,103,110,111,114,101,100,0,0,121,120,32,111,114,116,104,111,103,111,110,97,108,32,99,111,110,115,
+116,114,97,105,110,116,115,0,0,0,0,0,0,0,100,97,114,107,115,108,97,116,101,103,114,97,121,0,0,0,114,101,110,100,101,114,101,114,32,102,111,114,32,37,115,32,105,115,32,117,110,97,118,97,105,108,97,98,108,101,10,0,115,104,111,114,116,112,97,116,104,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,53,47,51,0,0,0,0,0,37,80,68,70,45,0,0,0,101,110,100,112,97,103,101,10,115,104,111,119,112,97,103,101,10,103,114,101,115,116,111,114,101,10,0,0,0,0,0,0,105,109,97,112,58,109,97,112,0,0,0,0,0,0,0,0,47,98,108,117,
+101,115,52,47,50,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,53,47,50,0,0,0,0,0,47,111,114,97,110,103,101,115,53,47,49,0,0,0,0,0,114,101,115,101,114,118,101,100,32,112,114,101,102,105,120,32,40,120,109,108,41,32,109,117,115,116,32,110,111,116,32,98,101,32,117,110,100,101,99,108,97,114,101,100,32,111,114,32,98,111,117,110,100,32,116,111,32,97,110,111,116,104,101,114,32,110,97,109,101,115,112,97,99,101,32,110,97,109,101,0,106,112,103,58,120,100,111,116,0,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,
+52,47,52,0,0,0,0,0,106,112,101,58,115,118,103,0,47,111,114,97,110,103,101,115,52,47,51,0,0,0,0,0,47,111,114,97,110,103,101,115,52,47,50,0,0,0,0,0,66,111,111,107,109,97,110,45,68,101,109,105,73,116,97,108,105,99,0,0,0,0,0,0,47,111,114,97,110,103,101,115,52,47,49,0,0,0,0,0,60,118,58,115,116,114,111,107,101,32,99,111,108,111,114,61,34,0,0,0,0,0,0,0,47,111,114,97,110,103,101,115,51,47,51,0,0,0,0,0,110,101,97,116,111,0,0,0,41,10,0,0,0,0,0,0,100,111,116,95,108,97,121,111,117,116,0,0,0,0,0,0,47,111,114,
+97,110,103,101,115,51,47,50,0,0,0,0,0,95,104,100,114,97,119,95,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,99,111,110,100,101,110,115,101,100,0,0,0,0,0,0,0,97,103,114,97,112,104,111,102,32,97,32,98,97,100,32,111,98,106,101,99,116,0,0,0,100,111,117,98,108,101,111,99,116,97,103,111,110,0,0,0,112,111,115,0,0,0,0,0,47,111,114,97,110,103,101,115,51,47,49,0,0,0,0,0,71,68,70,79,78,84,80,65,84,72,61,0,0,0,0,0,49,54,0,0,0,0,0,0,73,109,112,114,111,112,101,114,32,37,115,32,118,97,108,117,101,32,
+37,115,32,45,32,105,103,110,111,114,101,100,0,0,111,114,116,104,111,121,120,0,115,45,62,115,122,32,62,32,48,0,0,0,0,0,0,0,100,97,114,107,115,108,97,116,101,98,108,117,101,0,0,0,108,97,121,111,117,116,32,119,97,115,32,110,111,116,32,100,111,110,101,10,0,0,0,0,115,117,98,115,101,116,0,0,47,103,114,101,121,115,57,47,57,0,0,0,0,0,0,0,106,112,101,103,0,0,0,0,48,32,48,32,48,32,101,100,103,101,99,111,108,111,114,10,0,0,0,0,0,0,0,0,47,98,108,117,101,115,52,47,49,0,0,0,0,0,0,0,47,103,114,101,121,115,57,47,
+56,0,0,0,0,0,0,0,47,103,114,101,121,115,57,47,55,0,0,0,0,0,0,0,99,97,110,110,111,116,32,115,117,115,112,101,110,100,32,105,110,32,101,120,116,101,114,110,97,108,32,112,97,114,97,109,101,116,101,114,32,101,110,116,105,116,121,0,0,0,0,0,106,112,101,58,120,100,111,116,0,0,0,0,0,0,0,0,47,103,114,101,121,115,57,47,54,0,0,0,0,0,0,0,32,50,10,0,0,0,0,0,47,103,114,101,121,115,57,47,53,0,0,0,0,0,0,0,116,101,101,0,0,0,0,0,47,103,114,101,121,115,57,47,52,0,0,0,0,0,0,0,102,105,108,101,32,101,114,114,111,114,0,
+0,0,0,0,0,66,111,111,107,109,97,110,45,76,105,103,104,116,0,0,0,47,103,114,101,121,115,57,47,51,0,0,0,0,0,0,0,60,47,118,58,115,104,97,112,101,62,10,0,0,0,0,0,47,103,114,101,121,115,57,47,50,0,0,0,0,0,0,0,32,40,0,0,0,0,0,0,47,98,108,117,101,115,51,47,51,0,0,0,0,0,0,0,85,115,105,110,103,32,37,115,58,32,37,115,58,37,115,10,0,0,0,0,0,0,0,0,47,103,114,101,121,115,57,47,49,0,0,0,0,0,0,0,95,108,100,114,97,119,95,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,72,101,108,118,101,116,105,99,97,45,
+78,97,114,114,111,119,0,0,0,0,0,0,0,0,100,111,117,98,108,101,99,105,114,99,108,101,0,0,0,0,47,103,114,101,121,115,56,47,56,0,0,0,0,0,0,0,112,97,99,107,46,99,0,0,68,79,84,70,79,78,84,80,65,84,72,0,0,0,0,0,49,53,0,0,0,0,0,0,115,99,97,108,101,0,0,0,80,79,73,78,84,45,83,73,90,69,0,0,0,0,0,0,120,121,32,111,114,116,104,111,103,111,110,97,108,32,99,111,110,115,116,114,97,105,110,116,115,0,0,0,0,0,0,0,69,68,95,116,111,95,118,105,114,116,40,111,114,105,103,41,32,33,61,32,78,85,76,76,0,0,0,0,0,0,0,0,103,118,
+82,101,110,100,101,114,74,111,98,115,32,37,115,58,32,37,46,50,102,32,115,101,99,115,46,10,0,0,0,0,100,97,114,107,115,101,97,103,114,101,101,110,0,0,0,0,99,105,114,99,117,105,116,0,47,103,114,101,121,115,56,47,55,0,0,0,0,0,0,0,255,216,255,224,0,0,0,0,37,37,32,37,115,10,0,0,47,103,114,101,121,115,56,47,54,0,0,0,0,0,0,0,47,103,114,101,121,115,56,47,53,0,0,0,0,0,0,0,112,97,114,115,105,110,103,32,102,105,110,105,115,104,101,100,0,0,0,0,0,0,0,0,106,112,101,103,58,120,100,111,116,0,0,0,0,0,0,0,47,103,114,
+101,121,115,56,47,52,0,0,0,0,0,0,0,49,50,48,48,0,0,0,0,47,103,114,101,121,115,56,47,51,0,0,0,0,0,0,0,117,32,33,61,32,118,0,0,47,103,114,101,121,115,56,47,50,0,0,0,0,0,0,0,66,111,111,107,109,97,110,45,76,105,103,104,116,73,116,97,108,105,99,0,0,0,0,0,47,103,114,101,121,115,56,47,49,0,0,0,0,0,0,0,34,47,62,0,0,0,0,0,47,103,114,101,121,115,55,47,55,0,0,0,0,0,0,0,32,118,101,114,115,105,111,110,32,0,0,0,0,0,0,0,47,103,114,101,121,115,55,47,54,0,0,0,0,0,0,0,49,46,54,0,0,0,0,0,115,112,108,105,110,101,115,
+0,72,101,108,118,101,116,105,99,97,45,66,111,108,100,79,98,108,105,113,117,101,0,0,0,115,113,117,97,114,101,0,0,47,103,114,101,121,115,55,47,53,0,0,0,0,0,0,0,102,111,110,116,112,97,116,104,0,0,0,0,0,0,0,0,49,52,0,0,0,0,0,0,112,111,105,110,116,45,115,105,122,101,0,0,0,0,0,0,111,114,116,104,111,120,121,0,46,92,34,32],"i8",L,l.J+102436);D([0,0,0,0,76,97,121,111,117,116,32,119,97,115,32,110,111,116,32,100,111,110,101,46,32,32,77,105,115,115,105,110,103,32,108,97,121,111,117,116,32,112,108,117,103,105,
+110,115,63,32,10,0,100,97,114,107,115,97,108,109,111,110,0,0,0,0,0,0,109,111,100,101,108,0,0,0,47,103,114,101,121,115,55,47,52,0,0,0,0,0,0,0,103,105,102,0,0,0,0,0,103,115,97,118,101,10,0,0,34,32,110,97,109,101,61,34,0,0,0,0,0,0,0,0,47,98,108,117,101,115,51,47,50,0,0,0,0,0,0,0,47,103,114,101,121,115,55,47,51,0,0,0,0,0,0,0,47,103,114,101,121,115,55,47,50,0,0,0,0,0,0,0,112,97,114,115,105,110,103,32,97,98,111,114,116,101,100,0,103,105,102,58,120,100,111,116,0,0,0,0,0,0,0,0,47,103,114,101,121,115,55,47,
+49,0,0,0,0,0,0,0,45,50,10,0,0,0,0,0,47,103,114,101,121,115,54,47,54,0,0,0,0,0,0,0,111,98,106,112,49,45,62,115,122,46,120,32,61,61,32,48,32,38,38,32,111,98,106,112,49,45,62,115,122,46,121,32,61,61,32,48,0,0,0,0,47,103,114,101,121,115,54,47,53,0,0,0,0,0,0,0,66,111,111,107,109,97,110,45,68,101,109,105,0,0,0,0,47,103,114,101,121,115,54,47,52,0,0,0,0,0,0,0,32,101,32,0,0,0,0,0,47,103,114,101,121,115,54,47,51,0,0,0,0,0,0,0,35,32,71,101,110,101,114,97,116,101,100,32,98,121,32,0,99,103,0,0,0,0,0,0,47,103,
+114,101,121,115,54,47,50,0,0,0,0,0,0,0,99,111,114,101,0,0,0,0,49,46,50,0,0,0,0,0,85,110,107,110,111,119,110,32,34,115,112,108,105,110,101,115,34,32,118,97,108,117,101,58,32,34,37,115,34,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,45,66,111,108,100,0,0,114,101,99,116,97,110,103,108,101,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,37,99,37,108,100,0,0,0,47,103,114,101,121,115,54,47,49,0,0,0,0,0,0,0,115,118,103,0,0,0,0,0,49,51,0,0,0,0,0,0,102,97,99,101,0,0,0,0,111,114,
+116,104,111,95,121,120,0,0,0,0,0,0,0,0,67,0,0,0,0,0,0,0,100,97,114,107,114,101,100,0,95,110,101,97,116,111,95,99,99,0,0,0,0,0,0,0,47,103,114,101,121,115,53,47,53,0,0,0,0,0,0,0,71,73,70,56,0,0,0,0,103,114,101,115,116,111,114,101,10,0,0,0,0,0,0,0,98,108,117,101,0,0,0,0,60,109,97,112,32,105,100,61,34,0,0,0,0,0,0,0,47,98,108,117,101,115,51,47,49,0,0,0,0,0,0,0,47,103,114,101,121,115,53,47,52,0,0,0,0,0,0,0,47,103,114,101,121,115,53,47,51,0,0,0,0,0,0,0,112,97,114,115,101,114,32,110,111,116,32,115,117,115,
+112,101,110,100,101,100,0,0,0,0,106,32,61,61,32,48,0,0,47,103,114,101,121,115,53,47,50,0,0,0,0,0,0,0,112,110,103,58,120,100,111,116,0,0,0,0,0,0,0,0,83,105,110,103,108,101,10,0,47,103,114,101,121,115,53,47,49,0,0,0,0,0,0,0,38,35,52,53,59,0,0,0,47,103,114,101,121,115,52,47,52,0,0,0,0,0,0,0,84,105,109,101,115,45,73,116,97,108,105,99,0,0,0,0,47,103,114,101,121,115,52,47,51,0,0,0,0,0,0,0,110,45,62,99,111,117,110,116,32,43,32,40,42,110,110,41,45,62,99,111,117,110,116,32,61,61,32,78,79,68,69,67,65,82,68,
+32,43,32,49,0,32,108,32,0,0,0,0,0,47,103,114,101,121,115,52,47,50,0,0,0,0,0,0,0,32,80,97,103,101,115,58,32,37,100,10,0,0,0,0,0,47,103,114,101,121,115,52,47,49,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,49,46,52,0,0,0,0,0,101,115,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,0,0,0,0,0,0,0,120,120,120,0,0,0,0,0,114,101,99,116,0,0,0,0,37,100,0,0,0,0,0,0,47,103,114,101,121,115,51,47,51,0,0,0,0,0,0,0,99,99,32,40,37,100,32,99,101,108,108,115,41,32,97,116,32,40,37,100,44,37,100,41,10,0,0,0,0,0,0,0,112,115,0,0,0,0,0,
+0,49,50,0,0,0,0,0,0,99,111,108,111,114,0,0,0,111,114,116,104,111,103,111,110,97,108,32,99,111,110,115,116,114,97,105,110,116,115,0,0,102,105,120,101,100,0,0,0,117,110,109,97,116,99,104,101,100,32,39,40,39,32,105,110,32,115,116,121,108,101,58,32,37,115,10,0,0,0,0,0,100,97,114,107,111,114,99,104,105,100,0,0,0,0,0,0,82,105,103,104,116,0,0,0,37,115,32,97,116,116,114,105,98,117,116,101,32,118,97,108,117,101,32,109,117,115,116,32,98,101,32,49,32,111,114,32,50,32,45,32,105,103,110,111,114,105,110,103,10,
+0,0,0,47,103,114,101,121,115,51,47,50,0,0,0,0,0,0,0,98,109,112,0,0,0,0,0,32,32,47,66,111,114,100,101,114,32,91,32,48,32,48,32,48,32,93,10,32,32,47,65,99,116,105,111,110,32,60,60,32,47,83,117,98,116,121,112,101,32,47,85,82,73,32,47,85,82,73,32,37,115,32,62,62,10,32,32,47,83,117,98,116,121,112,101,32,47,76,105,110,107,10,47,65,78,78,32,112,100,102,109,97,114,107,10,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,47,97,99,99,101,110,116,56,47,56,0,0,0,0,0,0,47,103,114,101,121,115,51,47,49,0,0,0,0,0,0,0,47,103,114,
+101,101,110,115,57,47,57,0,0,0,0,0,0,112,97,114,115,101,114,32,115,117,115,112,101,110,100,101,100,0,0,0,0,0,0,0,0,115,118,103,58,100,111,116,0,47,103,114,101,101,110,115,57,47,56,0,0,0,0,0,0,12,0,0,0,0,0,0,0,99,105,114,99,111,0,0,0,120,76,97,121,111,117,116,32,0,0,0,0,0,0,0,0,49,48,48,46,48,48,10,0,47,103,114,101,101,110,115,57,47,55,0,0,0,0,0,0,105,110,112,117,116,115,99,97,108,101,0,0,0,0,0,0,47,103,114,101,101,110,115,57,47,54,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,45,78,97,114,114,111,
+119,45,66,111,108,100,79,98,108,105,113,117,101,0,0,0,0,47,103,114,101,101,110,115,57,47,53,0,0,0,0,0,0,120,100,111,116,0,0,0,0,37,46,48,102,44,37,46,48,102,32,0,0,0,0,0,0,47,103,114,101,101,110,115,57,47,52,0,0,0,0,0,0,99,97,110,110,111,116,32,114,101,97,108,108,111,99,32,111,112,115,0,0,0,0,0,0,32,84,105,116,108,101,58,32,0,0,0,0,0,0,0,0,47,103,114,101,101,110,115,57,47,51,0,0,0,0,0,0,117,32,61,61,32,85,70,95,102,105,110,100,40,117,41,0,120,100,111,116,118,101,114,115,105,111,110,0,0,0,0,0,114,
+117,101,0,0,0,0,0,67,111,117,114,105,101,114,45,79,98,108,105,113,117,101,0,99,111,109,112,111,110,101,110,116,0,0,0,0,0,0,0,37,46,53,103,44,37,46,53,103,44,37,46,53,103,44,37,46,53,103,32,0,0,0,0,102,111,110,116,110,97,109,101,58,32,34,37,115,34,32,114,101,115,111,108,118,101,100,32,116,111,58,32,37,115,10,0,47,103,114,101,101,110,115,57,47,50,0,0,0,0,0,0,98,98,91,37,115,93,32,37,46,53,103,32,37,46,53,103,32,37,46,53,103,32,37,46,53,103,10,0,0,0,0,0,103,100,0,0,0,0,0,0,103,101,116,115,112,108,105,
+110,101,112,111,105,110,116,115,58,32,110,111,32,115,112,108,105,110,101,32,112,111,105,110,116,115,32,97,118,97,105,108,97,98,108,101,32,102,111,114,32,101,100,103,101,32,40,37,115,44,37,115,41,10,0,0,0,49,49,0,0,0,0,0,0,60,70,79,78,84,62,0,0,111,114,116,104,111,0,0,0,100,105,115,116,111,114,116,105,111,110,0,0,0,0,0,0,116,114,117,110,99,97,116,105,110,103,32,115,116,121,108,101,32,39,37,115,39,10,0,0,100,97,114,107,111,114,97,110,103,101,0,0,0,0,0,0,114,32,38,38,32,114,114,0,114,0,0,0,0,0,0,0,115,
+116,114,101,115,115,119,116,0,0,0,0,0,0,0,0,47,103,114,101,101,110,115,57,47,49,0,0,0,0,0,0,115,104,97,112,101,102,105,108,101,0,0,0,0,0,0,0,66,77,0,0,0,0,0,0,32,93,10,0,0,0,0,0,99,95,99,110,116,32,61,61,32,48,0,0,0,0,0,0,105,110,32,114,111,117,116,101,115,112,108,105,110,101,115,44,32,99,97,110,110,111,116,32,102,105,110,100,32,78,79,82,77,65,76,32,101,100,103,101,10,0,0,0,0,0,0,0,69,114,114,111,114,32,105,110,105,116,105,97,108,105,122,105,110,103,32,102,111,114,32,100,101,102,108,97,116,105,111,
+110,10,0,0,0,0,0,0,0,99,97,110,39,116,32,102,105,110,100,32,108,105,98,114,97,114,121,32,102,105,108,101,32,37,115,10,0,0,0,0,0,100,101,102,97,117,108,116,32,0,0,0,0,0,0,0,0,102,111,114,99,101,108,97,98,101,108,115,0,0,0,0,0,47,97,99,99,101,110,116,56,47,55,0,0,0,0,0,0,47,103,114,101,101,110,115,56,47,56,0,0,0,0,0,0,115,111,108,105,100,0,0,0,37,115,37,100,32,110,111,100,101,115,32,37,100,32,101,100,103,101,115,32,37,100,32,105,116,101,114,32,37,46,50,102,32,115,101,99,10,0,0,0,115,112,97,110,45,62,
+102,111,110,116,0,0,0,0,0,0,95,110,101,119,95,114,97,110,107,0,0,0,0,0,0,0,45,62,0,0,0,0,0,0,47,103,114,101,101,110,115,56,47,55,0,0,0,0,0,0,105,108,108,101,103,97,108,32,99,104,97,114,97,99,116,101,114,40,115,41,32,105,110,32,112,117,98,108,105,99,32,105,100,0,0,0,0,0,0,0,47,97,99,99,101,110,116,56,47,54,0,0,0,0,0,0,117,115,101,114,111,117,116,58,32,99,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,10,0,0,0,0,0,68,97,109,112,105,110,103,0,103,99,58,32,79,
+117,116,32,111,102,32,109,101,109,111,114,121,10,0,0,0,0,0,0,101,112,115,58,100,111,116,0,47,103,114,101,101,110,115,56,47,54,0,0,0,0,0,0,102,100,112,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,115,116,97,114,116,61,115,101,108,102,32,45,32,105,103,110,111,114,105,110,103,10,0,0,0,0,0,105,115,32,117,110,100,101,102,105,110,101,100,46,32,82,101,118,101,114,116,105,110,103,32,116,111,32,116,104,101,32,115,104,111,114,116,101,115,116,32,112,97,116,104,32,109,111,100,101,108,46,
+10,0,0,0,0,32,32,0,0,0,0,0,0,48,0,0,0,0,0,0,0,37,46,48,51,102,0,0,0,37,100,0,0,0,0,0,0,76,101,116,116,101,114,10,0,47,103,114,101,101,110,115,56,47,53,0,0,0,0,0,0,37,46,48,51,108,102,32,0,45,45,0,0,0,0,0,0,47,103,114,101,101,110,115,56,47,52,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,45,78,97,114,114,111,119,0,0,0,0,0,0,0,0,95,99,108,111,110,101,95,37,100,0,0,0,0,0,0,0,47,103,114,101,101,110,115,56,47,51,0,0,0,0,0,0,116,104,101,32,97,115,112,101,99,116,32,97,116,116,114,105,98,117,116,101,32,104,
+97,115,32,98,101,101,110,32,100,105,115,97,98,108,101,100,32,100,117,101,32,116,111,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,102,108,97,119,115,32,45,32,97,116,116,114,105,98,117,116,101,32,105,103,110,111,114,101,100,46,10,0,0,0,0,0,0,0,0,47,103,114,101,101,110,115,56,47,50,0,0,0,0,0,0,109,97,107,101,80,111,108,121,58,32,117,110,107,110,111,119,110,32,115,104,97,112,101,32,116,121,112,101,32,37,115,10,0,0,0,0,0,0,0,0,78,68,95,105,110,40,114,105,103,104,116,41,46,115,105,122,101,
+32,43,32,78,68,95,111,117,116,40,114,105,103,104,116,41,46,115,105,122,101,32,61,61,32,48,0,0,0,0,0,32,109,32,0,0,0,0,0,110,111,32,109,101,109,111,114,121,32,102,114,111,109,32,122,109,97,108,108,111,99,40,41,10,0,0,0,0,0,0,0,47,97,99,99,101,110,116,51,47,50,0,0,0,0,0,0,35,0,0,0,0,0,0,0,47,103,114,101,101,110,115,56,47,49,0,0,0,0,0,0,95,100,114,97,119,95,0,0,112,108,105,110,101,0,0,0,67,111,117,114,105,101,114,45,66,111,108,100,79,98,108,105,113,117,101,0,0,0,0,0,100,105,103,114,97,112,104,0,98,111,
+120,51,100,0,0,0,37,46,50,102,0,0,0,0,82,79,85,78,68,40,71,68,95,98,98,40,103,41,46,76,76,46,120,41,32,61,61,32,48,0,0,0,0,0,0,0,47,103,114,101,101,110,115,55,47,55,0,0,0,0,0,0,99,111,108,117,109,110,32,109,97,106,111,114,0,0,0,0,110,111,110,101,0,0,0,0,49,48,0,0,0,0,0,0,73,108,108,101,103,97,108,32,118,97,108,117,101,32,37,115,32,102,111,114,32,65,76,73,71,78,32,45,32,105,103,110,111,114,101,100,10,0,0,0,120,32,97,110,100,32,121,32,115,99,97,108,105,110,103,0,111,114,105,101,110,116,97,116,105,111,
+110,0,0,0,0,0,117,110,109,97,116,99,104,101,100,32,39,41,39,32,105,110,32,115,116,121,108,101,58,32,37,115,10,0,0,0,0,0,100,97,114,107,111,108,105,118,101,103,114,101,101,110,0,0,108,97,121,111,117,116,32,97,98,111,114,116,101,100,10,0,47,103,114,101,101,110,115,55,47,54,0,0,0,0,0,0,97,108,105,99,101,98,108,117,101,0,0,0,0,0,0,0,112,115,0,0,0,0,0,0,91,32,47,82,101,99,116,32,91,32,0,0,0,0,0,0,98,97,115,101,32,114,101,102,101,114,101,114,10,0,0,0,47,103,114,101,101,110,115,55,47,53,0,0,0,0,0,0,110,
+0,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,47,103,114,101,101,110,115,55,47,52,0,0,0,0,0,0,116,101,120,116,32,100,101,99,108,97,114,97,116,105,111,110,32,110,111,116,32,119,101,108,108,45,102,111,114,109,101,100,0,0,0,0,0,0,0,0,47,97,99,99,101,110,116,56,47,53,0,0,0,0,0,0,37,115,32,45,62,32,37,115,58,32,104,101,97,100,32,110,111,116,32,105,110,115,105,100,101,32,104,101,97,100,32,99,108,117,115,116,101,114,32,37,115,10,0,0,0,0,0,0,47,103,114,101,101,110,115,55,47,51,0,0,0,
+0,0,0,112,115,58,100,111,116,0,0,47,103,114,101,101,110,115,55,47,50,0,0,0,0,0,0,73,110,99,104,101,115,10,0,32,45,62,32,0,0,0,0,37,108,102,0,0,0,0,0,47,103,114,101,101,110,115,55,47,49,0,0,0,0,0,0,108,105,103,104,116,103,114,101,121,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,45,78,97,114,114,111,119,45,79,98,108,105,113,117,101,0,0,0,0,0,0,0,0,109,101,109,111,114,121,32,101,120,104,97,117,115,116,101,100,0,0,0,0,0,0,0,0,47,103,114,101,101,110,115,54,47,54,0,0,0,0,0,0,99,108,117,115,116,101,114,
+0,100,105,109,0,0,0,0,0,97,114,116,105,99,117,108,97,116,105,111,110,95,112,111,115,0,0,0,0,0,0,0,0,60,118,58,112,97,116,104,32,118,61,34,0,0,0,0,0,47,103,114,101,101,110,115,54,47,53,0,0,0,0,0,0,99,111,109,112,111,117,110,100,69,100,103,101,115,58,32,99,111,117,108,100,32,110,111,116,32,99,111,110,115,116,114,117,99,116,32,111,98,115,116,97,99,108,101,115,32,45,32,102,97,108,108,105,110,103,32,98,97,99,107,32,116,111,32,115,116,114,97,105,103,104,116,32,108,105,110,101,32,101,100,103,101,115,10,
+0,0,0,0,0,114,111,117,116,101,115,112,108,105,110,101,115,105,110,105,116,58,32,99,97,110,110,111,116,32,97,108,108,111,99,97,116,101,32,112,115,10,0,0,0,32,45,97,110,99,104,111,114,32,101,0,0,0,0,0,0,68,117,109,109,121,61,37,100,10,0,0,0,0,0,0,0,47,103,114,101,101,110,115,54,47,52,0,0,0,0,0,0,114,0,0,0,0,0,0,0,37,100,32,0,0,0,0,0,111,108,121,108,105,110,101,0,67,111,117,114,105,101,114,45,66,111,108,100,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,0,0,0,0,0,103,114,97,112,104,0,0,0,101,112,115,58,
+112,115,0,0,102,111,108,100,101,114,0,0,37,46,53,103,44,37,46,53,103,44,37,46,53,103,44,37,46,53,103,0,0,0,0,0,47,103,114,101,101,110,115,54,47,51,0,0,0,0,0,0,114,111,119,32,109,97,106,111,114,0,0,0,0,0,0,0,115,104,97,112,101,102,105,108,101,0,0,0,0,0,0,0,103,108,111,98,97,108,0,0,57,0,0,0,0,0,0,0,69,78,84,69,82,0,0,0,115,99,97,108,101,120,121,0,115,107,101,119,0,0,0,0,110,101,115,116,105,110,103,32,110,111,116,32,97,108,108,111,119,101,100,32,105,110,32,115,116,121,108,101,58,32,37,115,10,0,0,0,
+0,0,0,0,100,97,114,107,109,97,103,101,110,116,97,0,0,0,0,0,98,0,0,0,0,0,0,0,37,100,32,110,111,100,101,115,32,37,46,50,102,32,115,101,99,10,0,0,0,0,0,0,47,103,114,101,101,110,115,54,47,50,0,0,0,0,0,0,47,112,97,116,104,98,111,120,32,123,10,32,32,32,32,47,88,32,101,120,99,104,32,110,101,103,32,37,46,53,103,32,115,117,98,32,100,101,102,10,32,32,32,32,47,89,32,101,120,99,104,32,37,46,53,103,32,115,117,98,32,100,101,102,10,32,32,32,32,47,120,32,101,120,99,104,32,110,101,103,32,37,46,53,103,32,115,117,98,
+32,100,101,102,10,32,32,32,32,47,121,32,101,120,99,104,32,37,46,53,103,32,115,117,98,32,100,101,102,10,32,32,32,32,110,101,119,112,97,116,104,32,120,32,121,32,109,111,118,101,116,111,10,32,32,32,32,88,32,121,32,108,105,110,101,116,111,10,32,32,32,32,88,32,89,32,108,105,110,101,116,111,10,32,32,32,32,120,32,89,32,108,105,110,101,116,111,10,32,32,32,32,99,108,111,115,101,112,97,116,104,32,115,116,114,111,107,101,10,125,32,100,101,102,10,0,0,37,33,80,83,45,65,100,111,98,101,45,0,0,0,0,0,32,37,115,32,
+97,108,105,103,110,101,100,116,101,120,116,10,0,0,0,0,0,0,0,0,60,47,109,97,112,62,10,0,100,111,116,116,101,100,0,0,47,103,114,101,101,110,115,54,47,49,0,0,0,0,0,0,109,105,110,99,114,111,115,115,46,99,0,0,0,0,0,0,47,103,114,101,101,110,115,53,47,53,0,0,0,0,0,0,88,77,76,32,100,101,99,108,97,114,97,116,105,111,110,32,110,111,116,32,119,101,108,108,45,102,111,114,109,101,100,0,47,97,99,99,101,110,116,56,47,52,0,0,0,0,0,0,106,112,103,58,100,111,116,0,47,103,114,101,101,110,115,53,47,52,0,0,0,0,0,0,47,
+103,114,101,101,110,115,53,47,51,0,0,0,0,0,0,67,101,110,116,101,114,10,0,103,114,97,112,104,32,0,0,47,103,114,101,101,110,115,53,47,50,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,45,78,97,114,114,111,119,45,66,111,108,100,0,0,0,58,0,0,0,0,0,0,0,110,101,116,119,111,114,107,32,115,105,109,112,108,101,120,58,32,0,0,0,0,0,0,0,47,103,114,101,101,110,115,53,47,49,0,0,0,0,0,0,37,115,37,115,37,115,0,0,111,117,116,32,111,102,32,109,101,109,111,114,121,10,0,0,32,119,105,100,116,104,58,32,37,100,59,32,104,
+101,105,103,104,116,58,32,37,100,34,32,102,105,108,108,101,100,61,34,102,97,108,115,101,34,62,0,47,103,114,101,101,110,115,52,47,52,0,0,0,0,0,0,32,45,97,110,99,104,111,114,32,119,0,0,0,0,0,0,98,111,120,0,0,0,0,0,47,103,114,101,101,110,115,52,47,51,0,0,0,0,0,0,84,32,0,0,0,0,0,0,114,116,104,111,0,0,0,0,115,104,97,112,101,0,0,0,109,111,110,111,115,112,97,99,101,0,0,0,0,0,0,0,115,117,98,103,114,97,112,104,0,0,0,0,0,0,0,0,116,97,98,0,0,0,0,0,101,44,37,46,53,103,44,37,46,53,103,32,0,0,0,0,34,34,0,0,0,0,
+0,0,47,103,114,101,101,110,115,52,47,50,0,0,0,0,0,0,97,114,114,97,121,32,112,97,99,107,105,110,103,58,32,37,115,32,37,100,32,114,111,119,115,32,37,100,32,99,111,108,117,109,110,115,10,0,0,0,108,111,99,97,108,0,0,0,56,0,0,0,0,0,0,0,69,70,84,0,0,0,0,0,111,108,100,32,115,99,97,108,105,110,103,0,0,0,0,0,112,101,114,105,112,104,101,114,105,101,115,0,0,0,0,0,105,110,32,99,108,117,115,116,101,114,32,37,115,10,0,0,100,97,114,107,107,104,97,107,105,0,0,0,0,0,0,0,105,110,118,105,115,0,0,0,109,97,106,111,114,
+105,122,97,116,105,111,110,10,0,0,0,47,103,114,101,101,110,115,52,47,49,0,0,0,0,0,0,105,110,32,108,97,98,101,108,32,111,102,32,103,114,97,112,104,32,37,115,10,0,0,0,112,110,103,0,0,0,0,0,32,109,111,118,101,116,111,32,0,0,0,0,0,0,0,0,115,116,121,108,101,0,0,0,34,62,10,0,0,0,0,0,47,103,114,101,101,110,115,51,47,51,0,0,0,0,0,0,108,97,98,101,108,0,0,0,47,103,114,101,101,110,115,51,47,50,0,0,0,0,0,0,105,110,99,111,109,112,108,101,116,101,32,109,97,114,107,117,112,32,105,110,32,112,97,114,97,109,101,116,
+101,114,32,101,110,116,105,116,121,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,0,0,0,0,47,97,99,99,101,110,116,56,47,51,0,0,0,0,0,0,95,95,0,0,0,0,0,0,71,68,95,114,97,110,107,40,103,41,91,114,93,46,110,32,60,61,32,71,68,95,114,97,110,107,40,103,41,91,114,93,46,97,110,0,0,0,0,0,106,112,101,58,100,111,116,0,47,103,114,101,101,110,115,51,47,49,0,0,0,0,0,0,104,101,97,100,32,110,111,100,101,32,37,115,32,105,110,115,105,100,101,32,116,97,105,108,32,99,108,117,115,116,101,114,32,37,115,10,0,0,0,0,
+37,115,58,32,0,0,0,0,47,103,110,98,117,57,47,57,0,0,0,0,0,0,0,0,80,111,114,116,114,97,105,116,10,0,0,0,0,0,0,0,116,97,105,108,32,110,111,100,101,32,37,115,32,105,110,115,105,100,101,32,104,101,97,100,32,99,108,117,115,116,101,114,32,37,115,10,0,0,0,0,47,103,110,98,117,57,47,56,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,45,66,111,108,100,79,98,108,105,113,117,101,0,0,0,104,101,97,100,32,99,108,117,115,116,101,114,32,37,115,32,105,110,115,105,100,101,32,116,97,105,108,32,99,108,117,115,116,101,
+114,32,37,115,10,0,71,68,95,109,105,110,114,97,110,107,40,103,41,32,61,61,32,48,0,0,0,0,0,0,47,103,110,98,117,57,47,55,0,0,0,0,0,0,0,0,116,97,105,108,32,99,108,117,115,116,101,114,32,37,115,32,105,110,115,105,100,101,32,104,101,97,100,32,99,108,117,115,116,101,114,32,37,115,10,0,83,99,97,110,110,105,110,103,32,103,114,97,112,104,32,37,115,44,32,37,100,32,110,111,100,101,115,10,0,0,0,0,32,60,118,58,115,104,97,112,101,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,97,98,115,111,108,
+117,116,101,59,32,0,0,0,0,47,103,110,98,117,57,47,54,0,0,0,0,0,0,0,0,32,37,100,125,0,0,0,0,99,108,117,115,116,101,114,32,99,121,99,108,101,32,37,115,32,45,45,32,37,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,10,0,0,0,47,103,110,98,117,57,47,53,0,0,0,0,0,0,0,0,116,32,37,100,32,0,0,0,111,0,0,0,0,0,0,0,110,97,109,101,0,0,0,0,67,111,117,114,105,101,114,0,110,111,100,101,0,0,0,0,114,0,0,0,0,0,0,0,110,111,116,101,0,0,0,0,115,44,37,46,53,103,44,37,46,53,103,32,0,0,0,0,115,117,98,103,114,97,
+112,104,0,0,0,0,0,0,0,0,47,103,110,98,117,57,47,52,0,0,0,0,0,0,0,0,32,114,49,32,37,102,32,114,50,32,37,102,10,0,0,0,55,0,0,0,0,0,0,0,73,71,72,84,0,0,0,0,111,115,99,97,108,101,0,0,115,105,100,101,115,0,0,0,116,114,97,110,115,112,97,114,101,110,116,0,0,0,0,0,100,97,114,107,103,114,101,121,0,0,0,0,0,0,0,0,122,119,110,106,0,0,0,0,95,99,99,95,0,0,0,0,99,111,110,118,101,114,116,32,103,114,97,112,104,58,32,0,47,103,110,98,117,57,47,51,0,0,0,0,0,0,0,0,137,80,78,71,13,10,26,10,0,0,0,0,0,0,0,0,32,47,37,115,
+32,115,101,116,95,102,111,110,116,10,0,0,122,119,106,0,0,0,0,0,34,47,62,10,0,0,0,0,47,103,110,98,117,57,47,50,0,0,0,0,0,0,0,0,122,101,116,97,0,0,0,0,99,109,97,112,58,109,97,112,0,0,0,0,0,0,0,0,47,103,110,98,117,57,47,49,0,0,0,0,0,0,0,0,109,117,115,116,32,110,111,116,32,117,110,100,101,99,108,97,114,101,32,112,114,101,102,105,120,0,0,0,0,0,0,0,47,97,99,99,101,110,116,56,47,50,0,0,0,0,0,0,121,117,109,108,0,0,0,0,106,112,101,103,58,100,111,116,0,0,0,0,0,0,0,0,47,103,110,98,117,56,47,56,0,0,0,0,0,0,0,
+0,121,101,110,0,0,0,0,0,106,112,101,103,58,115,118,103,0,0,0,0,0,0,0,0,47,103,110,98,117,56,47,55,0,0,0,0,0,0,0,0,35,32,80,97,103,101,115,58,32,37,100,10,0,0,0,0,121,97,99,117,116,101,0,0,47,103,110,98,117,56,47,54,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,45,79,98,108,105,113,117,101,0,0,0,0,0,0,0,120,105,0,0,0,0,0,0,47,103,110,98,117,56,47,53,0,0,0,0,0,0,0,0,101,100,103,101,0,0,0,0,119,101,105,101,114,112,0,0,32,45,45,62,10,0,0,0,47,103,110,98,117,56,47,52,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,
+0,117,117,109,108,0,0,0,0,47,103,110,98,117,56,47,51,0,0,0,0,0,0,0,0,70,32,0,0,0,0,0,0,115,111,117,114,99,101,32,112,111,105,110,116,32,110,111,116,32,105,110,32,97,110,121,32,116,114,105,97,110,103,108,101,0,0,0,0,0,0,0,0,111,110,101,0,0,0,0,0,117,112,115,105,108,111,110,0,66,111,111,107,109,97,110,45,76,105,103,104,116,73,116,97,108,105,99,0,0,0,0,0,119,0,0,0,0,0,0,0,111,99,116,97,103,111,110,0,37,46,53,103,32,37,46,53,103,0,0,0,0,0,0,0,100,105,103,114,97,112,104,0,47,103,110,98,117,56,47,50,0,
+0,0,0,0,0,0,0,114,111,111,116,32,37,100,32,40,37,102,41,32,37,100,32,40,37,102,41,10,0,0,0,54,0,0,0,0,0,0,0,98,111,120,0,0,0,0,0,97,108,105,103,110,0,0,0,105,112,115,101,112,0,0,0,111,114,100,101,114,105,110,103,0,0,0,0,0,0,0,0,108,105,103,104,116,103,114,101,121,0,0,0,0,0,0,0,114,101,112,111,115,105,116,105,111,110,32,37,115,10,0,0,100,97,114,107,103,114,101,101,110,0,0,0,0,0,0,0,117,112,115,105,104,0,0,0,97,103,114,111,111,116,32,111,102,32,97,32,98,97,100,32,111,98,106,101,99,116,0,0,109,111,100,
+101,108,32,37,100,32,115,109,97,114,116,95,105,110,105,116,32,37,100,32,115,116,114,101,115,115,119,116,32,37,100,32,105,116,101,114,97,116,105,111,110,115,32,37,100,32,116,111,108,32,37,102,10,0,0,0,0,0,0,0,0,47,103,110,98,117,56,47,49,0,0,0,0,0,0,0,0,40,108,105,98,41,0,0,0,32,101,108,108,105,112,115,101,95,112,97,116,104,32,115,116,114,111,107,101,10,0,0,0,117,109,108,0,0,0,0,0,44,37,100,44,37,100,0,0,97,114,101,97,0,0,0,0,47,103,110,98,117,55,47,55,0,0,0,0,0,0,0,0,105,109,97,103,101,115,99,97,
+108,101,0,0,0,0,0,0,83,121,110,116,97,120,32,101,114,114,111,114,58,32,110,111,110,45,115,112,97,99,101,32,115,116,114,105,110,103,32,117,115,101,100,32,98,101,102,111,114,101,32,60,84,65,66,76,69,62,0,0,0,0,0,0,117,103,114,97,118,101,0,0,109,100,115,77,111,100,101,108,58,32,100,101,108,116,97,32,61,32,37,102,10,0,0,0,47,103,110,98,117,55,47,54,0,0,0,0,0,0,0,0,117,110,98,111,117,110,100,32,112,114,101,102,105,120,0,0,114,111,111,116,32,61,32,37,115,10,0,0,0,0,0,0,47,97,99,99,101,110,116,56,47,49,
+0,0,0,0,0,0,117,99,105,114,99,0,0,0,103,105,102,58,100,111,116,0,47,103,110,98,117,55,47,53,0,0,0,0,0,0,0,0,117,97,114,114,0,0,0,0,47,103,110,98,117,55,47,52,0,0,0,0,0,0,0,0,35,32,84,105,116,108,101,58,32,37,115,10,0,0,0,0,117,97,99,117,116,101,0,0,47,103,110,98,117,55,47,51,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,45,66,111,108,100,0,0,117,65,114,114,0,0,0,0,47,103,110,98,117,55,47,50,0,0,0,0,0,0,0,0,115,104,97,112,101,0,0,0,116,114,97,100,101,0,0,0,32,32,32,32,32,32,60,33,45,45,32,0,0,0,
+0,0,47,103,110,98,117,55,47,49,0,0,0,0,0,0,0,0,32,45,102,111,110,116,32,123,0,0,0,0,0,0,0,0,116,105,109,101,115,0,0,0,47,103,110,98,117,54,47,54,0,0,0,0,0,0,0,0,101,32,0,0,0,0,0,0,105,110,101,0,0,0,0,0,116,105,108,100,101,0,0,0,108,105,103,104,116,0,0,0,116,97,105,108,112,111,114,116,0,0,0,0,0,0,0,0,115,101,112,116,97,103,111,110,0,0,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,115,97,109,112,108,101,112,111,105,110,116,115,0,0,0,0,115,116,114,105,99,116,0,0,47,103,110,98,117,
+54,47,53,0,0,0,0,0,0,0,0,97,32,37,102,32,98,32,37,102,32,99,32,37,102,32,100,32,37,102,32,114,32,37,102,10,0,0,0,0,0,0,0,53,0,0,0,0,0,0,0,60,66,82,62,0,0,0,0,118,112,115,99,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,112,104,97,115,101,0,0,0,98,103,99,111,108,111,114,0,100,97,114,107,103,114,97,121,0,0,0,0,0,0,0,0,116,104,111,114,110,0,0,0,110,101,97,116,111,105,110,105,116,46,99,0,0,0,0,0,47,103,110,98,117,54,47,52,0,0,0,0,0,0,0,0,119,101,98,112,0,0,0,0,32,101,108,108,105,112,115,
+101,95,112,97,116,104,32,102,105,108,108,10,0,0,0,0,0,116,104,105,110,115,112,0,0,37,100,44,37,100,0,0,0,47,103,110,98,117,54,47,51,0,0,0,0,0,0,0,0,37,115,32,105,110,32,108,105,110,101,32,37,100,32,10,0,116,104,101,116,97,115,121,109,0,0,0,0,0,0,0,0,47,103,110,98,117,54,47,50,0,0,0,0,0,0,0,0,99,97,110,110,111,116,32,99,104,97,110,103,101,32,115,101,116,116,105,110,103,32,111,110,99,101,32,112,97,114,115,105,110,103,32,104,97,115,32,98,101,103,117,110,0,0,0,0,116,104,101,116,97,0,0,0,112,110,103,58,
+100,111,116,0,47,103,110,98,117,54,47,49,0,0,0,0,0,0,0,0,116,104,101,114,101,52,0,0,47,103,110,98,117,53,47,53,0,0,0,0,0,0,0,0,35,32,71,101,110,101,114,97,116,101,100,32,98,121,32,37,115,32,118,101,114,115,105,111,110,32,37,115,32,40,37,115,41,10,0,0,0,0,0,0,116,97,117,0,0,0,0,0,76,97,121,111,117,116,32,116,121,112,101,58,32,34,37,115,34,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,46,32,85,115,101,32,111,110,101,32,111,102,58,37,115,10,0,0,0,0,0,0,0,0,99,114,111,119,0,0,0,0,47,103,110,
+98,117,53,47,52,0,0,0,0,0,0,0,0,72,101,108,118,101,116,105,99,97,0,0,0,0,0,0,0,115,122,108,105,103,0,0,0,110,32,33,61,32,78,68,95,110,101,120,116,40,110,41,0,47,103,110,98,117,53,47,51,0,0,0,0,0,0,0,0,119,105,100,116,104,0,0,0,115,117,112,101,0,0,0,0,121,101,108,108,111,119,0,0,95,115,112,97,110,95,37,100,0,0,0,0,0,0,0,0,47,103,110,98,117,53,47,50,0,0,0,0,0,0,0,0,125,0,0,0,0,0,0,0,47,97,99,99,101,110,116,55,47,55,0,0,0,0,0,0,115,117,112,51,0,0,0,0,47,103,110,98,117,53,47,49,0,0,0,0,0,0,0,0,69,32,
+0,0,0,0,0,0,97,108,115,101,0,0,0,0,115,117,112,50,0,0,0,0,66,111,111,107,109,97,110,45,76,105,103,104,116,0,0,0,104,101,97,100,112,111,114,116,0,0,0,0,0,0,0,0,104,101,120,97,103,111,110,0,114,101,99,111,114,100,0,0,93,59,10,0,0,0,0,0,47,103,110,98,117,52,47,52,0,0,0,0,0,0,0,0,112,105,110,102,111,0,0,0,37,108,102,0,0,0,0,0,52,0,0,0,0,0,0,0,85,115,105,110,103,32,100,101,102,97,117,108,116,32,99,97,108,99,117,108,97,116,105,111,110,32,102,111,114,32,114,111,111,116,32,110,111,100,101,10,0,0,0,0,0,0,
+0,0,73,108,108,101,103,97,108,32,97,116,116,114,105,98,117,116,101,32,37,115,32,105,110,32,37,115,32,45,32,105,103,110,111,114,101,100,10,0,0,0,99,111,109,112,114,101,115,115,0,0,0,0,0,0,0,0,69,68,95,116,111,95,118,105,114,116,40,111,114,105,103,41,32,61,61,32,78,85,76,76,0,0,0,0,0,0,0,0,102,105,108,108,99,111,108,111,114,0,0,0,0,0,0,0,37,115,32,37,115,10,0,0,100,97,114,107,103,111,108,100,101,110,114,111,100,0,0,0,115,117,112,49,0,0,0,0,78,68,95,105,100,40,110,112,41,32,61,61,32,105,0,0,47,103,110,
+98,117,52,47,51,0,0,0,0,0,0,0,0,97,103,116,97,105,108,40,101,41,32,61,61,32,85,70,95,102,105,110,100,40,97,103,116,97,105,108,40,101,41,41,0,87,69,66,80,0,0,0,0,99,108,111,115,101,112,97,116,104,32,115,116,114,111,107,101,10,0,0,0,0,0,0,0,115,117,112,0,0,0,0,0,37,100,44,37,100,44,37,100,44,37,100,0,0,0,0,0,80,97,99,107,105,110,103,58,32,99,111,109,112,117,116,101,32,103,114,105,100,32,115,105,122,101,10,0,0,0,0,0,47,103,110,98,117,52,47,50,0,0,0,0,0,0,0,0,13,0,0,0,0,0,0,0,115,117,109,0,0,0,0,0,47,
+103,110,98,117,52,47,49,0,0,0,0,0,0,0,0,114,101,113,117,101,115,116,101,100,32,102,101,97,116,117,114,101,32,114,101,113,117,105,114,101,115,32,88,77,76,95,68,84,68,32,115,117,112,112,111,114,116,32,105,110,32,69,120,112,97,116,0,0,0,0,0,115,117,98,101,0,0,0,0,47,97,99,99,101,110,116,55,47,54,0,0,0,0,0,0,115,118,103,58,109,97,112,0,47,103,110,98,117,51,47,51,0,0,0,0,0,0,0,0,115,117,98,0,0,0,0,0,47,103,110,98,117,51,47,50,0,0,0,0,0,0,0,0,115,112,97,100,101,115,0,0,35,70,73,71,32,51,46,50,10,0,0,0,
+0,0,0,0,47,103,110,98,117,51,47,49,0,0,0,0,0,0,0,0,67,111,117,114,105,101,114,45,66,111,108,100,79,98,108,105,113,117,101,0,0,0,0,0,115,105,109,0,0,0,0,0,108,112,32,33,61,32,99,108,112,0,0,0,0,0,0,0,47,100,97,114,107,50,56,47,56,0,0,0,0,0,0,0,115,105,103,109,97,102,0,0,119,104,105,116,101,0,0,0,47,100,97,114,107,50,56,47,55,0,0,0,0,0,0,0,99,111,109,98,105,65,82,32,61,32,37,108,102,10,0,0,32,45,116,101,120,116,32,123,0,0,0,0,0,0,0,0,41,10,0,0,0,0,0,0,115,105,103,109,97,0,0,0,47,100,97,114,107,50,56,
+47,54,0,0,0,0,0,0,0,37,115,37,100,32,45,0,0,111,109,112,111,117,110,100,0,32,40,0,0,0,0,0,0,115,104,121,0,0,0,0,0,66,111,111,107,109,97,110,45,68,101,109,105,73,116,97,108,105,99,0,0,0,0,0,0,107,101,121,0,0,0,0,0,99,111,110,115,116,114,97,105,110,116,46,99,0,0,0,0,112,101,110,116,97,103,111,110,0,0,0,0,0,0,0,0,109,97,120,105,116,101,114,0,37,46,53,103,0,0,0,0,10,0,0,0,0,0,0,0,47,100,97,114,107,50,56,47,53,0,0,0,0,0,0,0,108,105,98,112,97,99,107,58,32,100,105,115,99,32,61,32,37,102,32,40,32,60,32,48,
+41,10,0,0,0,0,0,0,92,78,0,0,0,0,0,0,51,0,0,0,0,0,0,0,115,114,99,0,0,0,0,0,115,99,97,108,105,110,103,0,104,101,105,103,104,116,0,0,112,101,110,99,111,108,111,114,0,0,0,0,0,0,0,0,100,97,114,107,99,121,97,110,0,0,0,0,0,0,0,0,32,118,101,114,115,105,111,110,32,0,0,0,0,0,0,0,115,101,99,116,0,0,0,0,98,111,120,0,0,0,0,0,108,101,110,0,0,0,0,0,47,100,97,114,107,50,56,47,52,0,0,0,0,0,0,0,97,103,104,101,97,100,40,101,41,32,61,61,32,85,70,95,102,105,110,100,40,97,103,104,101,97,100,40,101,41,41,0,115,118,103,
+0,0,0,0,0,99,108,111,115,101,112,97,116,104,32,102,105,108,108,10,0,60,33,45,45,32,71,101,110,101,114,97,116,101,100,32,98,121,32,0,0,0,0,0,0,115,100,111,116,0,0,0,0,37,100,44,37,100,44,37,100,0,0,0,0,0,0,0,0,47,100,97,114,107,50,56,47,51,0,0,0,0,0,0,0,32,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,71,114,97,112,104,105,99,115,47,83,86,71,47,49,46,49,47,68,84,68,47,115,118,103,49,49,46,100,116,100,34,62,10,0,0,0,115,99,97,114,111,110,0,0,98,108,97,99,107,0,0,0,47,100,97,114,
+107,50,56,47,50,0,0,0,0,0,0,0,101,110,116,105,116,121,32,100,101,99,108,97,114,101,100,32,105,110,32,112,97,114,97,109,101,116,101,114,32,101,110,116,105,116,121,0,0,0,0,0,95,98,97,99,107,103,114,111,117,110,100,0,0,0,0,0,47,37,115,47,37,115,0,0,88,49,49,47,0,0,0,0,105,103,104,116,103,114,101,121,0,0,0,0,0,0,0,0,104,105,116,101,0,0,0,0,60,33,68,79,67,84,89,80,69,32,115,118,103,32,80,85,66,76,73,67,32,34,45,47,47,87,51,67,47,47,68,84,68,32,83,86,71,32,49,46,49,47,47,69,78,34,10,0,115,98,113,117,111,
+0,0,0,108,97,99,107,0,0,0,0,121,101,108,108,111,119,103,114,101,101,110,0,0,0,0,0,47,97,99,99,101,110,116,55,47,53,0,0,0,0,0,0,121,101,108,108,111,119,52,0,101,112,115,58,109,97,112,0,121,101,108,108,111,119,51,0,47,100,97,114,107,50,56,47,49,0,0,0,0,0,0,0,121,101,108,108,111,119,50,0,121,101,108,108,111,119,49,0,121,101,108,108,111,119,0,0,119,104,105,116,101,115,109,111,107,101,0,0,0,0,0,0,119,104,105,116,101,0,0,0,119,104,101,97,116,52,0,0,34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,
+115,34,63,62,10,0,0,0,0,114,115,113,117,111,0,0,0,119,104,101,97,116,51,0,0,119,104,101,97,116,50,0,0,47,100,97,114,107,50,55,47,55,0,0,0,0,0,0,0,119,104,101,97,116,49,0,0,119,104,101,97,116,0,0,0,118,105,111,108,101,116,114,101,100,52,0,0,0,0,0,0,118,105,111,108,101,116,114,101,100,51,0,0,0,0,0,0,118,105,111,108,101,116,114,101,100,50,0,0,0,0,0,0,118,105,111,108,101,116,114,101,100,49,0,0,0,0,0,0,38,103,116,59,0,0,0,0,118,105,111,108,101,116,114,101,100,0,0,0,0,0,0,0,118,105,111,108,101,116,0,0,
+60,63,120,109,108,45,115,116,121,108,101,115,104,101,101,116,32,104,114,101,102,61,34,0,114,115,97,113,117,111,0,0,116,117,114,113,117,111,105,115,101,52,0,0,0,0,0,0,35,32,101,110,100,32,111,102,32,70,73,71,32,102,105,108,101,10,0,0,0,0,0,0,116,117,114,113,117,111,105,115,101,51,0,0,0,0,0,0,116,117,114,113,117,111,105,115,101,50,0,0,0,0,0,0,116,117,114,113,117,111,105,115,101,49,0,0,0,0,0,0,47,100,97,114,107,50,55,47,54,0,0,0,0,0,0,0,116,117,114,113,117,111,105,115,101,0,0,0,0,0,0,0,116,114,97,110,
+115,112,97,114,101,110,116,0,0,0,0,0,116,111,109,97,116,111,52,0,116,111,109,97,116,111,51,0,116,111,109,97,116,111,50,0,67,111,117,114,105,101,114,0,116,111,109,97,116,111,49,0,115,116,121,108,101,115,104,101,101,116,0,0,0,0,0,0,114,108,109,0,0,0,0,0,116,111,109,97,116,111,0,0,116,104,105,115,116,108,101,52,0,0,0,0,0,0,0,0,116,104,105,115,116,108,101,51,0,0,0,0,0,0,0,0,116,104,105,115,116,108,101,50,0,0,0,0,0,0,0,0,47,100,97,114,107,50,55,47,53,0,0,0,0,0,0,0,116,104,105,115,116,108,101,49,0,0,0,
+0,0,0,0,0,116,104,105,115,116,108,101,0,116,97,110,52],"i8",L,l.J+112676);D([0,0,0,0,116,97,110,51,0,0,0,0,116,97,110,50,0,0,0,0,116,97,110,49,0,0,0,0,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,32,115,116,97,110,100,97,108,111,110,101,61,34,110,111,34,63,62,10,0,114,104,111,0,0,0,0,0,116,97,110,0,0,0,0,0,115,116,101,101,108,98,108,117,101,52,0,0,0,0,0,0,115,116,101,101,108,98,108,117,101,51,0,0,0,0,0,0,116,101,97,108,
+0,0,0,0,115,116,101,101,108,98,108,117,101,50,0,0,0,0,0,0,47,100,97,114,107,50,55,47,52,0,0,0,0,0,0,0,115,116,101,101,108,98,108,117,101,49,0,0,0,0,0,0,115,116,101,101,108,98,108,117,101,0,0,0,0,0,0,0,115,112,114,105,110,103,103,114,101,101,110,52,0,0,0,0,115,112,114,105,110,103,103,114,101,101,110,51,0,0,0,0,32,99,114,101,97,116,101,32,116,101,120,116,32,0,0,0,115,112,114,105,110,103,103,114,101,101,110,50,0,0,0,0,115,112,114,105,110,103,103,114,101,101,110,49,0,0,0,0,32,120,109,108,110,115,58,120,
+108,105,110,107,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57,57,57,47,120,108,105,110,107,34,0,0,0,0,0,114,102,108,111,111,114,0,0,98,0,0,0,0,0,0,0,115,112,114,105,110,103,103,114,101,101,110,0,0,0,0,0,115,110,111,119,52,0,0,0,115,110,111,119,51,0,0,0,115,110,111,119,50,0,0,0,47,100,97,114,107,50,55,47,51,0,0,0,0,0,0,0,115,110,111,119,49,0,0,0,115,110,111,119,0,0,0,0,115,108,97,116,101,103,114,101,121,0,0,0,0,0,0,0,35,32,0,0,0,0,0,0,115,108,97,116,101,103,114,97,121,
+52,0,0,0,0,0,0,37,46,48,51,102,0,0,0,115,108,97,116,101,103,114,97,121,51,0,0,0,0,0,0,99,97,110,110,111,116,32,109,97,108,108,111,99,32,111,112,115,0,0,0,0,0,0,0,115,108,97,116,101,103,114,97,121,50,0,0,0,0,0,0,117,114,118,101,100,0,0,0,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,50,48,48,48,47,115,118,103,34,0,0,0,0,0,114,101,103,0,0,0,0,0,115,101,114,105,102,0,0,0,104,114,101,102,0,0,0,0,115,108,97,116,101,103,114,97,121,49,0,0,0,0,0,0,115,108,97,
+116,101,103,114,97,121,0,0,0,0,0,0,0,104,111,117,115,101,0,0,0,99,99,37,115,43,37,100,0,115,108,97,116,101,98,108,117,101,52,0,0,0,0,0,0,37,46,53,103,44,37,46,53,103,0,0,0,0,0,0,0,101,100,103,101,0,0,0,0,115,108,97,116,101,98,108,117,101,51,0,0,0,0,0,0,47,100,97,114,107,50,55,47,50,0,0,0,0,0,0,0,32,32,37,100,32,37,100,32,99,101,108,108,10,0,0,0,115,108,97,116,101,98,108,117,101,50,0,0,0,0,0,0,108,97,98,101,108,0,0,0,50,0,0,0,0,0,0,0,115,108,97,116,101,98,108,117,101,49,0,0,0,0,0,0,115,99,97,108,101,
+0,0,0,115,99,97,108,101,0,0,0,115,108,97,116,101,98,108,117,101,0,0,0,0,0,0,0,116,97,105,108,99,108,105,112,0,0,0,0,0,0,0,0,115,107,121,98,108,117,101,52,0,0,0,0,0,0,0,0,99,111,108,111,114,0,0,0,115,107,121,98,108,117,101,51,0,0,0,0,0,0,0,0,99,108,117,115,116,101,114,0,100,97,114,107,98,108,117,101,0,0,0,0,0,0,0,0,115,107,121,98,108,117,101,50,0,0,0,0,0,0,0,0,32,118,105,101,119,66,111,120,61,34,37,46,50,102,32,37,46,50,102,32,37,46,50,102,32,37,46,50,102,34,0,0,114,101,97,108,0,0,0,0,115,107,121,
+98,108,117,101,49,0,0,0,0,0,0,0,0,100,111,116,115,112,108,105,110,101,115,46,99,0,0,0,0,115,107,121,98,108,117,101,0,115,105,101,110,110,97,52,0,115,105,101,110,110,97,51,0,47,100,97,114,107,50,55,47,49,0,0,0,0,0,0,0,83,111,108,118,105,110,103,32,109,111,100,101,108,32,37,100,32,105,116,101,114,97,116,105,111,110,115,32,37,100,32,116,111,108,32,37,102,10,0,0,115,105,101,110,110,97,50,0,115,105,101,110,110,97,49,0,40,78,68,95,85,70,95,115,105,122,101,40,110,41,32,60,61,32,49,41,32,124,124,32,40,110,
+32,61,61,32,108,101,97,100,101,114,41,0,0,0,115,105,101,110,110,97,0,0,115,101,97,115,104,101,108,108,52,0,0,0,0,0,0,0,60,115,118,103,0,0,0,0,32,99,117,114,118,101,116,111,10,0,0,0,0,0,0,0,115,101,97,115,104,101,108,108,51,0,0,0,0,0,0,0,115,101,97,115,104,101,108,108,50,0,0,0,0,0,0,0,60,115,118,103,32,119,105,100,116,104,61,34,37,100,112,116,34,32,104,101,105,103,104,116,61,34,37,100,112,116,34,10,0,0,0,0,0,0,0,0,114,100,113,117,111,0,0,0,75,80,95,76,101,102,116,0,115,101,97,115,104,101,108,108,49,
+0,0,0,0,0,0,0,102,108,97,116,105,110,100,101,120,40,97,103,116,97,105,108,40,101,41,41,32,60,32,77,45,62,110,99,111,108,115,0,115,101,97,115,104,101,108,108,0,0,0,0,0,0,0,0,32,99,111,111,114,100,115,61,34,0,0,0,0,0,0,0,115,101,97,103,114,101,101,110,52,0,0,0,0,0,0,0,115,101,97,103,114,101,101,110,51,0,0,0,0,0,0,0,47,100,97,114,107,50,54,47,54,0,0,0,0,0,0,0,115,101,97,103,114,101,101,110,50,0,0,0,0,0,0,0,115,101,97,103,114,101,101,110,49,0,0,0,0,0,0,0,115,101,97,103,114,101,101,110,0,0,0,0,0,0,0,0,
+115,97,110,100,121,98,114,111,119,110,0,0,0,0,0,0,115,97,108,109,111,110,52,0,115,97,108,109,111,110,51,0,32,80,97,103,101,115,58,32,37,100,32,45,45,62,10,0,114,99,101,105,108,0,0,0,115,97,108,109,111,110,50,0,115,97,108,109,111,110,49,0,115,97,108,109,111,110,0,0,115,97,100,100,108,101,98,114,111,119,110,0,0,0,0,0,47,100,97,114,107,50,54,47,53,0,0,0,0,0,0,0,117,110,101,120,112,101,99,116,101,100,32,112,97,114,115,101,114,32,115,116,97,116,101,32,45,32,112,108,101,97,115,101,32,115,101,110,100,32,
+97,32,98,117,103,32,114,101,112,111,114,116,0,0,0,0,0,0,114,111,121,97,108,98,108,117,101,52,0,0,0,0,0,0,114,111,121,97,108,98,108,117,101,51,0,0,0,0,0,0,114,111,121,97,108,98,108,117,101,50,0,0,0,0,0,0,114,111,121,97,108,98,108,117,101,49,0,0,0,0,0,0,114,111,121,97,108,98,108,117,101,0,0,0,0,0,0,0,114,111,115,121,98,114,111,119,110,52,0,0,0,0,0,0,32,84,105,116,108,101,58,32,0,0,0,0,0,0,0,0,114,97,114,114,0,0,0,0,114,111,115,121,98,114,111,119,110,51,0,0,0,0,0,0,114,111,115,121,98,114,111,119,110,
+50,0,0,0,0,0,0,114,111,115,121,98,114,111,119,110,49,0,0,0,0,0,0,47,97,99,99,101,110,116,55,47,52,0,0,0,0,0,0,112,115,58,109,97,112,0,0,114,111,115,121,98,114,111,119,110,0,0,0,0,0,0,0,47,100,97,114,107,50,54,47,52,0,0,0,0,0,0,0,114,101,100,52,0,0,0,0,114,101,100,51,0,0,0,0,114,101,100,50,0,0,0,0,114,101,100,49,0,0,0,0,116,119,111,112,105,0,0,0,114,101,100,0,0,0,0,0,112,117,114,112,108,101,52,0,60,33,45,45,0,0,0,0,114,97,113,117,111,0,0,0,112,117,114,112,108,101,51,0,112,117,114,112,108,101,50,0,
+112,117,114,112,108,101,49,0,112,117,114,112,108,101,0,0,47,100,97,114,107,50,54,47,51,0,0,0,0,0,0,0,112,111,119,100,101,114,98,108,117,101,0,0,0,0,0,0,112,108,117,109,52,0,0,0,112,108,117,109,51,0,0,0,112,108,117,109,50,0,0,0,112,108,117,109,49,0,0,0,112,108,117,109,0,0,0,0,60,47,115,118,103,62,10,0,114,97,110,103,0,0,0,0,111,118,101,114,108,97,112,0,112,105,110,107,52,0,0,0,112,105,110,107,51,0,0,0,37,48,51,111,0,0,0,0,112,105,110,107,50,0,0,0,112,105,110,107,49,0,0,0,47,100,97,114,107,50,54,47,
+50,0,0,0,0,0,0,0,112,105,110,107,0,0,0,0,112,101,114,117,0,0,0,0,112,101,97,99,104,112,117,102,102,52,0,0,0,0,0,0,112,101,97,99,104,112,117,102,102,51,0,0,0,0,0,0,112,101,97,99,104,112,117,102,102,50,0,0,0,0,0,0,67,111,117,114,105,101,114,45,66,111,108,100,0,0,0,0,112,101,97,99,104,112,117,102,102,49,0,0,0,0,0,0,34,32,99,108,97,115,115,61,34,108,97,121,101,114,34,62,10,0,0,0,0,0,0,0,114,97,100,105,99,0,0,0,112,101,97,99,104,112,117,102,102,0,0,0,0,0,0,0,112,97,112,97,121,97,119,104,105,112,0,0,0,
+0,0,0,47,100,97,114,107,50,54,47,49,0,0,0,0,0,0,0,112,97,108,101,118,105,111,108,101,116,114,101,100,52,0,0,112,97,108,101,118,105,111,108,101,116,114,101,100,51,0,0,112,97,108,101,118,105,111,108,101,116,114,101,100,50,0,0,112,97,108,101,118,105,111,108,101,116,114,101,100,49,0,0,112,97,108,101,118,105,111,108,101,116,114,101,100,0,0,0,112,97,108,101,116,117,114,113,117,111,105,115,101,52,0,0,85,82,76,0,0,0,0,0,112,97,108,101,116,117,114,113,117,111,105,115,101,51,0,0,100,111,116,0,0,0,0,0,112,97,
+108,101,116,117,114,113,117,111,105,115,101,50,0,0,32,116,114,97,110,115,102,111,114,109,61,34,115,99,97,108,101,40,37,103,32,37,103,41,32,114,111,116,97,116,101,40,37,100,41,32,116,114,97,110,115,108,97,116,101,40,37,103,32,37,103,41,34,62,10,0,114,65,114,114,0,0,0,0,112,97,108,101,116,117,114,113,117,111,105,115,101,49,0,0,112,97,108,101,116,117,114,113,117,111,105,115,101,0,0,0,112,97,108,101,103,114,101,101,110,52,0,0,0,0,0,0,115,105,108,118,101,114,0,0,112,97,108,101,103,114,101,101,110,51,0,
+0,0,0,0,0,47,100,97,114,107,50,53,47,53,0,0,0,0,0,0,0,108,105,98,112,97,116,104,47,37,115,58,37,100,58,32,37,115,10,0,0,0,0,0,0,112,97,108,101,103,114,101,101,110,50,0,0,0,0,0,0,112,97,108,101,103,114,101,101,110,49,0,0,0,0,0,0,112,97,108,101,103,114,101,101,110,0,0,0,0,0,0,0,112,97,108,101,103,111,108,100,101,110,114,111,100,0,0,0,32,99,114,101,97,116,101,32,111,118,97,108,32,0,0,0,111,114,99,104,105,100,52,0,111,114,99,104,105,100,51,0,34,32,99,108,97,115,115,61,34,103,114,97,112,104,34,0,113,117,
+111,116,0,0,0,0,111,114,99,104,105,100,50,0,111,114,99,104,105,100,49,0,111,114,99,104,105,100,0,0,111,114,97,110,103,101,114,101,100,52,0,0,0,0,0,0,47,100,97,114,107,50,53,47,52,0,0,0,0,0,0,0,111,114,97,110,103,101,114,101,100,51,0,0,0,0,0,0,111,114,97,110,103,101,114,101,100,50,0,0,0,0,0,0,117,116,105,108,115,46,99,0,111,114,97,110,103,101,114,101,100,49,0,0,0,0,0,0,111,114,97,110,103,101,114,101,100,0,0,0,0,0,0,0,50,32,0,0,0,0,0,0,111,114,97,110,103,101,52,0,111,114,97,110,103,101,51,0,73,110,
+118,97,108,105,100,32,37,100,45,98,121,116,101,32,85,84,70,56,32,102,111,117,110,100,32,105,110,32,105,110,112,117,116,32,111,102,32,103,114,97,112,104,32,37,115,32,45,32,116,114,101,97,116,101,100,32,97,115,32,76,97,116,105,110,45,49,46,32,80,101,114,104,97,112,115,32,34,45,71,99,104,97,114,115,101,116,61,108,97,116,105,110,49,34,32,105,115,32,110,101,101,100,101,100,63,10,0,0,0,0,34,32,99,108,97,115,115,61,34,99,108,117,115,116,101,114,34,62,0,0,0,0,0,0,112,115,105,0,0,0,0,0,85,82,87,32,66,111,
+111,107,109,97,110,32,76,0,0,0,111,114,97,110,103,101,50,0,103,114,97,112,104,118,105,122,0,0,0,0,0,0,0,0,111,114,97,110,103,101,49,0,112,97,114,97,108,108,101,108,111,103,114,97,109,0,0,0,103,114,97,112,104,32,37,115,44,32,99,111,111,114,100,32,37,115,44,32,101,120,112,101,99,116,101,100,32,102,111,117,114,32,100,111,117,98,108,101,115,10,0,0,0,0,0,0,98,97,100,32,101,100,103,101,32,108,101,110,32,34,37,115,34,0,0,0,0,0,0,0,111,114,97,110,103,101,0,0,44,37,46,53,103,0,0,0,102,111,110,116,45,62,110,
+97,109,101,0,0,0,0,0,0,110,111,100,101,0,0,0,0,111,108,105,118,101,100,114,97,98,52,0,0,0,0,0,0,47,100,97,114,107,50,53,47,51,0,0,0,0,0,0,0,37,115,32,110,111,46,32,99,101,108,108,115,32,37,100,32,87,32,37,100,32,72,32,37,100,10,0,0,0,0,0,0,111,108,105,118,101,100,114,97,98,51,0,0,0,0,0,0,80,45,62,101,110,100,46,116,104,101,116,97,32,60,32,50,32,42,32,77,95,80,73,0,49,0,0,0,0,0,0,0,111,108,105,118,101,100,114,97,98,50,0,0,0,0,0,0,60,73,77,71,62,0,0,0,86,111,114,111,110,111,105,0,111,108,105,118,101,
+100,114,97,98,49,0,0,0,0,0,0,108,97,98,101,108,102,111,110,116,115,105,122,101,0,0,0,111,108,105,118,101,100,114,97,98,0,0,0,0,0,0,0,35,102,56,102,56,102,56,0,111,108,100,108,97,99,101,0,110,111,110,101,0,0,0,0,99,121,97,110,0,0,0,0,34,32,99,108,97,115,115,61,34,110,111,100,101,34,62,0,112,114,111,112,0,0,0,0,110,97,118,121,98,108,117,101,0,0,0,0,0,0,0,0,110,97,118,121,0,0,0,0,47,100,97,114,107,50,53,47,50,0,0,0,0,0,0,0,110,97,118,97,106,111,119,104,105,116,101,52,0,0,0,0,110,45,62,108,101,118,101,
+108,32,62,61,32,48,0,0,0,110,97,118,97,106,111,119,104,105,116,101,51,0,0,0,0,116,104,101,32,103,114,97,112,104,32,105,110,116,111,32,99,111,110,110,101,99,116,101,100,32,99,111,109,112,111,110,101,110,116,115,46,10,0,0,0,110,97,118,97,106,111,119,104,105,116,101,50,0,0,0,0,110,97,118,97,106,111,119,104,105,116,101,49,0,0,0,0,114,97,110,107,46,99,0,0,115,104,97,112,101,115,46,99,0,0,0,0,0,0,0,0,110,97,118,97,106,111,119,104,105,116,101,0,0,0,0,0,109,111,99,99,97,115,105,110,0,0,0,0,0,0,0,0,37,37,
+37,37,66,111,117,110,100,105,110,103,66,111,120,58,32,37,100,32,37,100,32,37,100,32,37,100,0,0,0,0,115,116,114,111,107,101,10,0,99,99,37,115,95,37,100,0,99,97,110,110,111,116,32,114,101,45,97,108,108,111,99,97,116,101,32,112,115,10,0,0,109,105,115,116,121,114,111,115,101,52,0,0,0,0,0,0,109,105,115,116,121,114,111,115,101,51,0,0,0,0,0,0,95,37,115,0,0,0,0,0,112,114,111,100,0,0,0,0,108,97,98,101,108,58,32,97,114,101,97,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,114,116,114,101,101,10,0,0,
+0,0,0,0,0,0,10,0,0,0,0,0,0,0,109,105,115,116,121,114,111,115,101,50,0,0,0,0,0,0,102,108,97,116,105,110,100,101,120,40,97,103,104,101,97,100,40,101,41,41,32,60,32,77,45,62,110,114,111,119,115,0,109,105,115,116,121,114,111,115,101,49,0,0,0,0,0,0,108,111,115,116,32,37,115,32,37,115,32,101,100,103,101,10,0,0,0,0,0,0,0,0,32,97,108,116,61,34,34,0,109,105,115,116,121,114,111,115,101,0,0,0,0,0,0,0,109,105,110,116,99,114,101,97,109,0,0,0,0,0,0,0,47,100,97,114,107,50,53,47,49,0,0,0,0,0,0,0,109,105,100,110,
+105,103,104,116,98,108,117,101,0,0,0,0,109,101,100,105,117,109,118,105,111,108,101,116,114,101,100,0,110,111,100,101,32,0,0,0,109,101,100,105,117,109,116,117,114,113,117,111,105,115,101,0,37,100,32,0,0,0,0,0,109,101,100,105,117,109,115,112,114,105,110,103,103,114,101,101,110,0,0,0,0,0,0,0,109,101,100,105,117,109,115,108,97,116,101,98,108,117,101,0,109,101,100,105,117,109,115,101,97,103,114,101,101,110,0,0,60,47,116,105,116,108,101,62,10,0,0,0,0,0,0,0,112,114,105,109,101,0,0,0,49,46,50,46,53,0,0,0,
+109,101,100,105,117,109,112,117,114,112,108,101,52,0,0,0,105,110,32,108,97,98,101,108,32,111,102,32,101,100,103,101,32,37,115,32,37,115,32,37,115,10,0,0,0,0,0,0,109,101,100,105,117,109,112,117,114,112,108,101,51,0,0,0,109,101,100,105,117,109,112,117,114,112,108,101,50,0,0,0,109,101,100,105,117,109,112,117,114,112,108,101,49,0,0,0,47,100,97,114,107,50,52,47,52,0,0,0,0,0,0,0,100,111,99,117,109,101,110,116,32,105,115,32,110,111,116,32,115,116,97,110,100,97,108,111,110,101,0,0,0,0,0,0,109,101,100,105,
+117,109,112,117,114,112,108,101,0,0,0,0,87,97,114,110,105,110,103,0,109,101,100,105,117,109,111,114,99,104,105,100,52,0,0,0,101,112,115,105,108,111,110,0,109,101,100,105,117,109,111,114,99,104,105,100,51,0,0,0,109,101,100,105,117,109,111,114,99,104,105,100,50,0,0,0,109,101,100,105,117,109,111,114,99,104,105,100,49,0,0,0,109,101,100,105,117,109,111,114,99,104,105,100,0,0,0,0,92,69,0,0,0,0,0,0,112,111,117,110,100,0,0,0,109,101,100,105,117,109,98,108,117,101,0,0,0,0,0,0,65,103,114,97,112,104,105,110,
+102,111,95,116,0,0,0,0,99,111,109,112,111,117,110,100,0,0,0,0,0,0,0,0,109,101,100,105,117,109,97,113,117,97,109,97,114,105,110,101,0,0,0,0,0,0,0,0,109,97,114,111,111,110,52,0,109,97,114,111,111,110,51,0,106,112,103,58,109,97,112,0,35,37,50,120,37,50,120,37,50,120,37,50,120,0,0,0,47,100,97,114,107,50,52,47,51,0,0,0,0,0,0,0,109,97,114,111,111,110,50,0,109,97,114,111,111,110,49,0,109,97,114,111,111,110,0,0,109,97,103,101,110,116,97,52,0,0,0,0,0,0,0,0,109,97,103,101,110,116,97,51,0,0,0,0,0,0,0,0,109,
+97,103,101,110,116,97,50,0,0,0,0,0,0,0,0,60,116,105,116,108,101,62,0,112,108,117,115,109,110,0,0,109,97,103,101,110,116,97,49,0,0,0,0,0,0,0,0,37,115,32,58,32,37,102,32,37,102,32,37,102,32,37,102,10,0,0,0,0,0,0,0,103,114,97,112,104,32,105,115,32,100,105,115,99,111,110,110,101,99,116,101,100,46,32,72,101,110,99,101,44,32,116,104,101,32,99,105,114,99,117,105,116,32,109,111,100,101,108,10,0,0,0,0,0,0,0,0,109,97,103,101,110,116,97,0,37,115,32,99,111,111,114,100,32,37,46,53,103,32,37,46,53,103,32,104,116,
+32,37,102,32,119,105,100,116,104,32,37,102,10,0,0,0,0,0,0,98,108,97,99,107,0,0,0,108,105,110,101,110,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,0,0,0,0,108,105,109,101,103,114,101,101,110,0,0,0,0,0,0,0,47,100,97,114,107,50,52,47,50,0,0,0,0,0,0,0,82,97,110,107,32,115,101,112,97,114,97,116,105,111,110,32,61,32,0,0,0,0,0,0,108,105,103,104,116,121,101,108,108,111,119,52,0,0,0,0,108,105,103,104,116,121,101,108,108,111,119,51,0,0,0,0,108,105,103,104,116,121,101,108,108,111,119,50,0,0,0,0,108,105,
+103,104,116,121,101,108,108,111,119,49,0,0,0,0,108,105,103,104,116,121,101,108,108,111,119,0,0,0,0,0,108,105,103,104,116,115,116,101,101,108,98,108,117,101,52,0,34,32,99,108,97,115,115,61,34,101,100,103,101,34,62,0,112,105,118,0,0,0,0,0,84,48,0,0,0,0,0,0,108,105,103,104,116,115,116,101,101,108,98,108,117,101,51,0,109,97,107,101,83,112,108,105,110,101,58,32,102,97,105,108,101,100,32,116,111,32,109,97,107,101,32,115,112,108,105,110,101,32,101,100,103,101,32,40,37,115,44,37,115,41,10,0,108,105,103,104,
+116,115,116,101,101,108,98,108,117,101,50,0,108,105,103,104,116,115,116,101,101,108,98,108,117,101,49,0,60,47,72,84,77,76,62,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,46,49,102,32,37,46,52,102,32,37,100,32,37,46,49,102,32,37,46,49,102,32,37,100,32,37,100,32,37,115,92,48,48,49,10,0,0,108,105,103,104,116,115,116,101,101,108,98,108,117,101,0,0,47,100,97,114,107,50,52,47,49,0,0,0,0,0,0,0,108,105,103,104,116,115,108,97,116,101,103,114,101,121,0,0,108,105,103,104,116,115,108,97,116,
+101,103,114,97,121,0,0,108,105,103,104,116,115,108,97,116,101,98,108,117,101,0,0,108,105,103,104,116,115,107,121,98,108,117,101,52,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,108,105,103,104,116,115,107,121,98,108,117,101,51,0,0,0,84,105,109,101,115,45,66,111,108,100,73,116,97,108,105,99,0,0,0,0,0,0,0,0,108,105,103,104,116,115,107,121,98,108,117,101,50,0,0,0,60,103,32,105,100,61,34,0,112,105,0,0,0,0,0,0,108,105,103,104,116,115,107,121,98,108,117,101,49,0,0,0,108,105,103,104,116,115,
+107,121,98,108,117,101,0,0,0,0,108,105,103,104,116,115,101,97,103,114,101,101,110,0,0,0,108,105,103,104,116,115,97,108,109,111,110,52,0,0,0,0,47,100,97,114,107,50,51,47,51,0,0,0,0,0,0,0,108,105,103,104,116,115,97,108,109,111,110,51,0,0,0,0,108,105,103,104,116,115,97,108,109,111,110,50,0,0,0,0,108,97,98,101,108,102,111,110,116,110,97,109,101,0,0,0,108,105,103,104,116,115,97,108,109,111,110,49,0,0,0,0,108,105,103,104,116,115,97,108,109,111,110,0,0,0,0,0,37,108,102,44,37,100,0,0,108,105,103,104,116,
+112,105,110,107,52,0,0,0,0,0,0,109,97,107,101,65,100,100,80,111,108,121,58,32,117,110,107,110,111,119,110,32,115,104,97,112,101,32,116,121,112,101,32,37,115,10,0,0,0,0,0,108,105,103,104,116,112,105,110,107,51,0,0,0,0,0,0,62,10,0,0,0,0,0,0,112,104,105,0,0,0,0,0,50,48,49,52,48,49,49,49,46,50,51,49,53,0,0,0,108,105,103,104,116,112,105,110,107,50,0,0,0,0,0,0,108,105,103,104,116,112,105,110,107,49,0,0,0,0,0,0,108,105,103,104,116,112,105,110,107,0,0,0,0,0,0,0,32,32,34,37,115,34,10,0,108,105,103,104,116,
+103,114,101,121,0,0,0,0,0,0,0,47,100,97,114,107,50,51,47,50,0,0,0,0,0,0,0,114,101,100,0,0,0,0,0,108,105,103,104,116,103,114,97,121,0,0,0,0,0,0,0,108,105,103,104,116,103,111,108,100,101,110,114,111,100,121,101,108,108,111,119,0,0,0,0,108,105,103,104,116,103,111,108,100,101,110,114,111,100,52,0,108,105,103,104,116,103,111,108,100,101,110,114,111,100,51,0,32,45,111,117,116,108,105,110,101,32,0,0,0,0,0,0,47,100,97,114,107,50,51,47,49,0,0,0,0,0,0,0,108,105,103,104,116,103,111,108,100,101,110,114,111,100,
+50,0,108,105,103,104,116,103,111,108,100,101,110,114,111,100,49,0,47,97,99,99,101,110,116,55,47,51,0,0,0,0,0,0,32,116,97,114,103,101,116,61,34,0,0,0,0,0,0,0,112,101,114,112,0,0,0,0,108,105,103,104,116,103,111,108,100,101,110,114,111,100,0,0,100,101,103,101,110,101,114,97,116,101,32,99,111,110,99,101,110,116,114,97,116,101,100,32,114,97,110,107,32,37,115,44,37,100,10,0,0,0,0,0,108,105,103,104,116,99,121,97,110,52,0,0,0,0,0,0,108,105,103,104,116,99,121,97,110,51,0,0,0,0,0,0,108,105,103,104,116,99,121,
+97,110,50,0,0,0,0,0,0,47,97,99,99,101,110,116,51,47,49,0,0,0,0,0,0,108,105,103,104,116,99,121,97,110,49,0,0,0,0,0,0,108,105,103,104,116,99,121,97,110,0,0,0,0,0,0,0,108,105,103,104,116,99,111,114,97,108,0,0,0,0,0,0,108,105,103,104,116,98,108,117,101,52,0,0,0,0,0,0,67,32,0,0,0,0,0,0,108,105,103,104,116,98,108,117,101,51,0,0,0,0,0,0,108,105,103,104,116,98,108,117,101,50,0,0,0,0,0,0,85,84,70,56,32,99,111,100,101,115,32,62,32,52,32,98,121,116,101,115,32,97,114,101,32,110,111,116,32,99,117,114,114,101,
+110,116,108,121,32,115,117,112,112,111,114,116,101,100,32,40,103,114,97,112,104,32,37,115,41,32,45,32,116,114,101,97,116,101,100,32,97,115,32,76,97,116,105,110,45,49,46,32,80,101,114,104,97,112,115,32,34,45,71,99,104,97,114,115,101,116,61,108,97,116,105,110,49,34,32,105,115,32,110,101,101,100,101,100,63,10,0,0,0,0,0,0,0,0,32,120,108,105,110,107,58,116,105,116,108,101,61,34,0,0,112,101,114,109,105,108,0,0,66,111,111,107,109,97,110,45,68,101,109,105,0,0,0,0,45,45,0,0,0,0,0,0,108,105,103,104,116,98,
+108,117,101,49,0,0,0,0,0,0,108,105,103,104,116,98,108,117,101,0,0,0,0,0,0,0,116,114,97,112,101,122,105,117,109,0,0,0,0,0,0,0,37,108,102,44,37,108,102,44,37,108,102,44,37,108,102,37,99,0,0,0,0,0,0,0,37,108,102,0,0,0,0,0,47,98,117,112,117,57,47,57,0,0,0,0,0,0,0,0,108,101,109,111,110,99,104,105,102,102,111,110,52,0,0,0,37,46,53,103,44,37,46,53,103,44,37,46,53,103,0,0,103,114,97,112,104,0,0,0,108,101,109,111,110,99,104,105,102,102,111,110,51,0,0,0,99,99,32,40,37,100,32,99,101,108,108,115,41,32,97,116,
+32,40,37,100,44,37,100,41,32,40,37,100,44,37,100,41,10,0,0,0,0,0,0,0,79,114,116,104,111,103,111,110,97,108,32,101,100,103,101,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,10,0,0,0,0,0,108,101,109,111,110,99,104,105,102,102,111,110,50,0,0,0,48,0,0,0,0,0,0,0,108,101,109,111,110,99,104,105,102,102,111,110,49,0,0,0,85,110,107,110,111,119,110,32,72,84,77,76,32,101,108,101,109,101,110,116,32,60,37,115,62,32,111,110,32,108,105,110,101,32,37,100,32,10,0,0,118,111,114,111,110,111,
+105,0,108,101,109,111,110,99,104,105,102,102,111,110,0,0,0,0,105,112,0,0,0,0,0,0,108,97,119,110,103,114,101,101,110,0,0,0,0,0,0,0,99,111,110,99,101,110,116,114,97,116,101,61,116,114,117,101,32,109,97,121,32,110,111,116,32,119,111,114,107,32,99,111,114,114,101,99,116,108,121,46,10,0,0,0,0,0,0,0,35,49,48,49,48,49,48,0,108,97,118,101,110,100,101,114,98,108,117,115,104,52,0,0,108,97,118,101,110,100,101,114,98,108,117,115,104,51,0,0,99,114,105,109,115,111,110,0,32,120,108,105,110,107,58,104,114,101,102,
+61,34,0,0,0,112,97,114,116,0,0,0,0,108,97,118,101,110,100,101,114,98,108,117,115,104,50,0,0,108,97,118,101,110,100,101,114,98,108,117,115,104,49,0,0,108,97,118,101,110,100,101,114,98,108,117,115,104,0,0,0,108,97,118,101,110,100,101,114,0,0,0,0,0,0,0,0,47,98,117,112,117,57,47,56,0,0,0,0,0,0,0,0,65,108,116,101,114,110,97,116,105,118,101,108,121,44,32,99,111,110,115,105,100,101,114,32,114,117,110,110,105,110,103,32,110,101,97,116,111,32,117,115,105,110,103,32,45,71,112,97,99,107,61,116,114,117,101,32,
+111,114,32,100,101,99,111,109,112,111,115,105,110,103,10,0,107,104,97,107,105,52,0,0,107,104,97,107,105,51,0,0,108,101,97,100,101,114,32,33,61,32,78,85,76,76,0,0,107,104,97,107,105,50,0,0,115,118,103,122,58,115,118,103,0,0,0,0,0,0,0,0,107,104,97,107,105,49,0,0,37,37,66,111,117,110,100,105,110,103,66,111,120,58,0,0,32,108,105,110,101,116,111,10,0,0,0,0,0,0,0,0,107,104,97,107,105,0,0,0,105,118,111,114,121,52,0,0,60,97,0,0,0,0,0,0,112,97,114,97,0,0,0,0,105,118,111,114,121,51,0,0,105,118,111,114,121,
+50,0,0,78,68,95,114,97,110,107,40,118,41,32,61,61,32,114,0,32,116,105,116,108,101,61,34,0,0,0,0,0,0,0,0,105,118,111,114,121,49,0,0,105,118,111,114,121,0,0,0,47,98,117,112,117,57,47,55,0,0,0,0,0,0,0,0,105,110,118,105,115,0,0,0,105,110,100,105,103,111,0,0,105,110,100,105,97,110,114,101,100,52,0,0,0,0,0,0,105,110,100,105,97,110,114,101,100,51,0,0,0,0,0,0,105,110,100,105,97,110,114,101,100,50,0,0,0,0,0,0,105,110,100,105,97,110,114,101,100,49,0,0,0,0,0,0,32,105,100,61,34,97,95,0,111,117,109,108,0,0,0,
+0,105,110,100,105,97,110,114,101,100,0,0,0,0,0,0,0,104,111,116,112,105,110,107,52,0,0,0,0,0,0,0,0,104,111,116,112,105,110,107,51,0,0,0,0,0,0,0,0,104,111,116,112,105,110,107,50,0,0,0,0,0,0,0,0,47,98,117,112,117,57,47,54,0,0,0,0,0,0,0,0,101,114,114,111,114,32,105,110,32,112,114,111,99,101,115,115,105,110,103,32,101,120,116,101,114,110,97,108,32,101,110,116,105,116,121,32,114,101,102,101,114,101,110,99,101,0,0,0,104,111,116,112,105,110,107,49,0,0,0,0,0,0,0,0,104,111,116,112,105,110,107,0,104,111,110,
+101,121,100,101,119,52,0,0,0,0,0,0,0,104,111,110,101,121,100,101,119,51,0,0,0,0,0,0,0,104,111,110,101,121,100,101,119,50,0,0,0,0,0,0,0,104,111,110,101,121,100,101,119,49,0,0,0,0,0,0,0,60,103,0,0,0,0,0,0,111,116,105,109,101,115,0,0,104,111,110,101,121,100,101,119,0,0,0,0,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,116,111,111,32,109,97,110,121,32,40,62,32,37,100,41,32,115,97,109,101,123,104,101,97,100,44,116,97,105,108,125,32,103,114,111,117,112,115,32,102,111,114,32,110,111,100,
+101,32,37,115,10,0,0,0,0,0,103,114,101,121,57,57,0,0,103,114,101,121,57,56,0,0,106,112,101,58,109,97,112,0,103,114,101,121,57,55,0,0,47,98,117,112,117,57,47,53,0,0,0,0,0,0,0,0,103,114,101,121,57,54,0,0,98,111,116,104,0,0,0,0,103,114,101,121,57,53,0,0,103,114,101,121,57,52,0,0,103,114,101,121,57,51,0,0,103,114,101,121,57,50,0,0,103,114,101,121,57,49,0,0,60,47,103,62,10,0,0,0,111,116,105,108,100,101,0,0,103,114,101,121,57,48,0,0,37,115,32,45,62,32,37,115,58,32,115,112,108,105,110,101,32,115,105,122,
+101,32,62,32,49,32,110,111,116,32,115,117,112,112,111,114,116,101,100,10,0,0,0,0,0,0,0,0,103,114,101,121,57,0,0,0,47,98,117,112,117,57,47,52,0,0,0,0,0,0,0,0,103,114,101,121,56,57,0,0,103,114,101,121,56,56,0,0,103,114,101,121,56,55,0,0,9,0,0,0,0,0,0,0,103,114,101,121,56,54,0,0,37,108,102,44,37,108,102,37,99,0,0,0,0,0,0,0,103,114,101,121,56,53,0,0,103,114,101,121,56,52,0,0,103,114,101,121,56,51,0,0,103,114,101,121,56,50,0,0,60,47,97,62,10,0,0,0,111,115,108,97,115,104,0,0,103,114,101,121,56,49,0,0,103,
+114,101,121,56,48,0,0,103,114,101,121,56,0,0,0,103,114,101,121,55,57,0,0,47,98,117,112,117,57,47,51,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,103,114,101,121,55,56,0,0,103,114,101,121,55,55,0,0,103,114,101,121,55,54,0,0,103,114,101,121,55,53,0,0,103,114,101,121,55,52,0,0,84,105,109,101,115,45,66,111,108,100,0,0,0,0,0,0,103,114,101,121,55,51,0,0,60,47,116,101,120,116,62,10,0,0,0,0,0,0,0,0,111,114,100,109,0,0,0,0,103,114,101,121,55,50,0,0,103,114,101,121,55,49,0,0,103,114,101,121,55,48,0,0,103,114,101,121,55,
+0,0,0,47,98,117,112,117,57,47,50,0,0,0,0,0,0,0,0,103,114,101,121,54,57,0,0,103,114,101,121,54,56,0,0,103,114,101,121,54,55,0,0,77,97,120,114,97,110,107,32,61,32,37,100,44,32,109,105,110,114,97,110,107,32,61,32,37,100,10,0,0,0,0,0,103,114,101,121,54,54,0,0,103,114,101,121,54,53,0,0,103,114,101,121,54,52,0,0,62,0,0,0,0,0,0,0,111,114,100,102,0,0,0,0,103,114,101,121,54,51,0,0,103,114,101,121,54,50,0,0,103,114,101,121,54,49,0,0,103,114,101,121,54,48,0,0,47,98,117,112,117,57,47,49,0,0,0,0,0,0,0,0,112,117,
+114,112,108,101,0,0,103,114,101,121,54,0,0,0,103,114,101,121,53,57,0,0,103,114,101,121,53,56,0,0,103,114,101,121,53,55,0,0,119,104,105,116,101,0,0,0,103,114,101,121,53,54,0,0,103,114,101,121,53,53,0,0,32,102,105,108,108,61,34,35,37,48,50,120,37,48,50,120,37,48,50,120,34,0,0,0,103,114,101,121,53,52,0,0,111,114,0,0,0,0,0,0,104,101,105,103,104,116,0,0,47,97,99,99,101,110,116,55,47,50,0,0,0,0,0,0,97,100,100,105,110,103,32,37,100,32,105,116,101,109,115,44,32,116,111,116,97,108,32,97,114,101,97,32,61,32,
+37,102,44,32,119,32,61,32,37,102,44,32,97,114,101,97,47,119,61,37,102,10,0,0,0,0,109,105,110,100,105,115,116,0,103,114,101,121,53,51,0,0,103,114,101,121,53,50,0,0,65,82,61,37,48,46,52,108,102,9,32,65,114,101,97,61,32,37,48,46,52,108,102,9,0,0,0,0,0,0,0,0,103,114,101,121,53,49,0,0,47,98,117,112,117,56,47,56,0,0,0,0,0,0,0,0,103,114,101,121,53,48,0,0,103,114,101,121,53,0,0,0,103,114,101,121,52,57,0,0,117,115,45,62,110,97,109,101,0,0,0,0,0,0,0,0,103,114,101,121,52,56,0,0,115,101,116,108,105,110,101,119,
+105,100,116,104,0,0,0,0,103,114,101,121,52,55,0,0,103,114,101,121,52,54,0,0,37,100,0,0,0,0,0,0,32,102,105,108,108,61,34,37,115,34,0,0,0,0,0,0,111,112,108,117,115,0,0,0,65,118,97,110,116,71,97,114,100,101,45,68,101,109,105,79,98,108,105,113,117,101,0,0,45,62,0,0,0,0,0,0,103,114,101,121,52,53,0,0,112,115,50,58,112,115,0,0,103,114,101,121,52,52,0,0,100,105,97,109,111,110,100,0,95,112,111,114,116,95,37,115,95,40,37,100,41,95,40,37,100,41,95,37,108,100,0,0,32,105,110,32,37,115,32,45,32,115,101,116,116,
+105,110,103,32,116,111,32,37,46,48,50,102,10,0,0,0,0,0,0,103,114,101,121,52,51,0,0,98,98,0,0,0,0,0,0,37,100,32,37,49,91,34,93,37,110,0,0,0,0,0,0,103,114,101,121,52,50,0,0,47,98,117,112,117,56,47,55,0,0,0,0,0,0,0,0,112,111,115,91,37,100,93,32,37,100,32,37,100,10,0,0,103,114,101,121,52,49,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,103,114,101,121,52,48,0,0,73,77,71,0,0,0,0,0,103,114,101,121,52,0,0,0,110,111,110,101,0,0,0,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,
+109,111,114,121,32,105,110,32,97,97,103,95,99,114,101,97,116,101,95,98,117,102,102,101,114,40,41,0,0,0,0,108,97,98,101,108,95,102,108,111,97,116,0,0,0,0,0,103,114,101,121,51,57,0,0,35,102,48,102,48,102,48,0,103,114,101,121,51,56,0,0,32,102,111,110,116,45,115,105,122,101,61,34,37,46,50,102,34,0,0,0,0,0,0,0,115,101,103,35,37,100,32,58,32,40,37,46,51,102,44,32,37,46,51,102,41,32,40,37,46,51,102,44,32,37,46,51,102,41,10,0,0,0,0,0,103,114,101,121,51,55,0,0,115,118,103,0,0,0,0,0,99,111,114,110,115,105,
+108,107,0,0,0,0,0,0,0,0,111,109,105,99,114,111,110,0,76,97,121,111,117,116,32,116,121,112,101,58,32,34,37,115,34,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,46,32,85,115,101,32,111,110,101,32,111,102,58,37,115,10,0,0,0,0,0,0,0,0,103,114,101,121,51,54,0,0,103,114,101,121,51,53,0,0,103,114,101,121,51,52,0,0,103,114,101,121,51,51,0,0,47,98,117,112,117,56,47,54,0,0,0,0,0,0,0,0,123,10,0,0,0,0,0,0,105,115,32,117,110,100,101,102,105,110,101,100,46,32,82,101,118,101,114,116,105,110,103,32,116,
+111,32,116,104,101,32,115,104,111,114,116,101,115,116,32,112,97,116,104,32,109,111,100,101,108,46,10,0,0,0,0,103,114,101,121,51,50,0,0,103,114,101,121,51,49,0,0,108,101,118,101,108,32,110,111,100,101,32,114,101,99,0,0,103,114,101,121,51,48,0,0,103,114,101,121,51,0,0,0,40,91,97,45,122,93,91,97,45,122,65,45,90,93,42,41,61,34,40,91,94,34,93,42,41,34,0,0,0,0,0,0,32,109,111,118,101,116,111,10,0,0,0,0,0,0,0,0,103,114,101,121,50,57,0,0,32,98,97,115,101,108,105,110,101,45,115,104,105,102,116,61,34,115,117,
+98,34,0,0,0,103,114,101,121,50,56,0,0,37,37,37,37,67,114,101,97,116,111,114,58,32,37,115,32,118,101,114,115,105,111,110,32,37,115,32,40,37,115,41,10,0,0,0,0,0,0,0,0,111,109,101,103,97,0,0,0,114,32,38,38,32,110,0,0,103,114,101,121,50,55,0,0,103,114,101,121,50,54,0,0,99,111,110,115,116,114,97,105,110,105,110,103,95,102,108,97,116,95,101,100,103,101,40,103,44,118,44,101,41,32,61,61,32,70,65,76,83,69,0,0,100,97,115,104,101,100,0,0,32,116,97,114,103,101,116,61,34,0,0,0,0,0,0,0,103,114,101,121,50,53,0,
+0,103,114,101,121,50,52,0,0,47,98,117,112,117,56,47,53,0,0,0,0,0,0,0,0,103,114,101,121,50,51,0,0,103,114,101,121,50,50,0,0,103,114,101,121,50,49,0,0,103,114,101,121,50,48,0,0,103,114,101,121,50,0,0,0,32,98,97,115,101,108,105,110,101,45,115,104,105,102,116,61,34,115,117,112,101,114,34,0,103,114,101,121,49,57,0,0,32,69,80,83,70,45,51,46,48,10,0,0,0,0,0,0,111,108,105,110,101,0,0,0,103,114,101,121,49,56,0,0,99,108,117,115,116,101,114,46,99,0,0,0,0,0,0,0,103,114,101,121,49,55,0,0,47,98,117,112,117,56,
+47,52,0,0,0,0,0,0,0,0,103,114,101,121,49,54,0,0,103,114,101,121,49,53,0,0,117,110,99,108,111,115,101,100,32,67,68,65,84,65,32,115,101,99,116,105,111,110,0,0,103,114,101,121,49,52,0,0,103,114,101,121,49,51,0,0,103,114,101,121,49,50,0,0,103,114,101,121,49,49,0,0,103,114,101,121,49,48,48,0,103,114,101,121,49,48,0,0,37,33,80,83,45,65,100,111,98,101,45,51,46,48,0,0,111,103,114,97,118,101,0,0,103,114,101,121,49,0,0,0,103,114,101,121,48,0,0,0,103,114,101,121,0,0,0,0,103,114,101,101,110,121,101,108,108,111,
+119,0,0,0,0,0,47,98,117,112,117,56,47,51,0,0,0,0,0,0,0,0,106,112,101,103,58,109,97,112,0,0,0,0,0,0,0,0,103,114,101,101,110,52,0,0,103,114,101,101,110,51,0,0,98,97,99,107,0,0,0,0,103,114,101,101,110,50,0,0,103,114,101,101,110,49,0,0,103,114,101,101,110,0,0,0,44,0,0,0,0,0,0,0,103,114,97,121,57,57,0,0,37,37,69,79,70,10,0,0,111,101,108,105,103,0,0,0,103,114,97,121,57,56,0,0,103,114,97,121,57,55,0,0,103,114,97,121,57,54,0,0,103,114,97,121,57,53,0,0,47,98,117,112,117,56,47,50,0,0,0,0,0,0,0,0,103,114,97,
+121,57,52,0,0,103,114,97,121,57,51,0,0,103,114,97,121,57,50,0,0,103,114,97,121,57,49,0,0,103,114,97,121,57,48,0,0,37,115,108,105,110,101,45,116,104,114,111,117,103,104,0,0,103,114,97,121,57,0,0,0,101,110,100,10,114,101,115,116,111,114,101,10,0,0,0,0,111,99,105,114,99,0,0,0,103,114,97,121,56,57,0,0,103,114,97,121,56,56,0,0,103,114,97,121,56,55,0,0,103,114,97,121,56,54,0,0,47,98,117,112,117,56,47,49,0,0,0,0,0,0,0,0,103,114,97,121,56,53,0,0,37,100,32,37,100,32,35,37,48,50,120,37,48,50,120,37,48,50,120,
+10,0,0,0,0,103,114,97,121,56,52,0,0,103,114,97,121,56,51,0,0,103,114,97,121,56,50,0,0,103,114,97,121,56,49,0,0,65,118,97,110,116,71,97,114,100,101,45,68,101,109,105,79,98,108,105,113,117,101,0,0,117,110,100,101,114,108,105,110,101,0,0,0,0,0,0,0,103,114,97,121,56,48,0,0,37,37,37,37,80,97,103,101,115,58,32,37,100,10,0,0,111,97,99,117,116,101,0,0,103,114,97,121,56,0,0,0,103,114,97,121,55,57,0,0,103,114,97,121,55,56,0,0,103,114,97,121,55,55,0,0,47,98,117,112,117,55,47,55,0,0,0,0,0,0,0,0,103,114,97,121,
+55,54,0,0,103,114,97,121,55,53,0,0,103,114,97,121,55,52,0,0,103,114,97,121,55,51,0,0,103,114,97,121,55,50,0,0,32,116,101,120,116,45,100,101,99,111,114,97],"i8",L,l.J+122916);D([116,105,111,110,61,34,0,0,0,0,0,0,103,114,97,121,55,49,0,0,37,37,84,114,97,105,108,101,114,10,0,0,0,0,0,0,110,117,0,0,0,0,0,0,103,114,97,121,55,48,0,0,103,114,97,121,55,0,0,0,103,114,97,121,54,57,0,0,103,114,97,121,54,56,0,0,47,98,117,112,117,55,47,54,0,0,0,0,0,0,0,0,111,108,105,118,101,0,0,0,103,114,97,121,54,55,0,0,103,114,
+97,121,54,54,0,0,103,114,97,121,54,53,0,0,103,114,97,121,54,52,0,0,32,99,114,101,97,116,101,32,112,111,108,121,103,111,110,32,0,0,0,0,0,0,0,0,103,114,97,121,54,51,0,0,32,102,111,110,116,45,115,116,121,108,101,61,34,105,116,97,108,105,99,34,0,0,0,0,103,114,97,121,54,50,0,0,37,37,69,110,100,83,101,116,117,112,0,0,0,0,0,0,110,116,105,108,100,101,0,0,103,114,97,121,54,49,0,0,103,114,97,121,54,48,0,0,47,97,99,99,101,110,116,55,47,49,0,0,0,0,0,0,103,114,97,121,54,0,0,0,103,114,97,121,53,57,0,0,47,98,117,
+112,117,55,47,53,0,0,0,0,0,0,0,0,103,114,97,121,53,56,0,0,103,114,97,121,53,55,0,0,103,114,97,121,53,54,0,0,103,114,97,121,53,53,0,0,98,111,108,100,0,0,0,0,103,114,97,121,53,52,0,0,32,102,111,110,116,45,119,101,105,103,104,116,61,34,98,111,108,100,34,0,0,0,0,0,103,114,97,121,53,51,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,125,32,105,102,0,0,0,0,110,115,117,98,0,0,0,0,98,111,108,100,0,0,0,0,116,111,111,108,116,105,112,0,103,114,97,121,53,50,0,0,103,114,97,121,53,49,0,0,112,108,97,105,
+110,116,101,120,116,0,0,0,0,0,0,0,95,112,111,114,116,95,37,115,95,37,115,95,37,115,95,37,108,100,0,0,0,0,0,0,67,97,108,99,117,108,97,116,105,110,103,32,115,104,111,114,116,101,115,116,32,112,97,116,104,115,58,32,0,0,0,0,103,114,97,121,53,48,0,0,108,104,101,105,103,104,116,0,92,76,0,0,0,0,0,0,103,114,97,121,53,0,0,0,47,98,117,112,117,55,47,52,0,0,0,0,0,0,0,0,103,114,97,121,52,57,0,0,45,45,0,0,0,0,0,0,103,114,97,121,52,56,0,0,86,82,0,0,0,0,0,0,103,114,97,121,52,55,0,0,111,118,101,114,108,97,112,95,
+115,99,97,108,105,110,103,0,104,101,97,100,99,108,105,112,0,0,0,0,0,0,0,0,103,114,97,121,52,54,0,0,35,101,48,101,48,101,48,0,103,114,97,121,52,53,0,0,32,102,111,110,116,45,102,97,109,105,108,121,61,34,37,115,34,0,0,0,0,0,0,0,103,114,97,121,52,52,0,0,32,32,32,32,117,115,101,114,100,105,99,116,32,40,62,62,41,32,99,118,110,32,40,91,41,32,99,118,110,32,108,111,97,100,32,112,117,116,0,0,99,111,114,110,102,108,111,119,101,114,98,108,117,101,0,0,110,111,116,105,110,0,0,0,103,114,97,121,52,51,0,0,103,114,
+97,121,52,50,0,0,103,114,97,121,52,49,0,0,103,114,97,121,52,48,0,0,47,98,117,112,117,55,47,51,0,0,0,0,0,0,0,0,103,114,97,112,104,32,0,0,103,114,97,112,104,32,37,115,32,105,115,32,100,105,115,99,111,110,110,101,99,116,101,100,46,32,72,101,110,99,101,44,32,116,104,101,32,99,105,114,99,117,105,116,32,109,111,100,101,108,10,0,0,0,0,0,103,114,97,121,52,0,0,0,103,114,97,121,51,57,0,0,108,101,118,101,108,32,101,100,103,101,32,114,101,99,0,0,103,114,97,121,51,56,0,0,103,114,97,121,51,55,0,0,109,109,0,0,0,
+0,0,0,110,101,119,112,97,116,104,32,0,0,0,0,0,0,0,0,103,114,97,121,51,54,0,0,32,102,111,110,116,45,115,116,121,108,101,61,34,37,115,34,0,0,0,0,0,0,0,0,103,114,97,121,51,53,0,0,32,32,32,32,117,115,101,114,100,105,99,116,32,40,60,60,41,32,99,118,110,32,40,91,41,32,99,118,110,32,108,111,97,100,32,112,117,116,0,0,108,105,110,101,0,0,0,0,110,111,116,0,0,0,0,0,103,114,97,121,51,52,0,0,103,114,97,121,51,51,0,0,109,105,110,99,114,111,115,115,58,32,112,97,115,115,32,37,100,32,105,116,101,114,32,37,100,32,
+116,114,121,105,110,103,32,37,100,32,99,117,114,95,99,114,111,115,115,32,37,100,32,98,101,115,116,95,99,114,111,115,115,32,37,100,10,0,32,104,114,101,102,61,34,0,103,114,97,121,51,50,0,0,103,114,97,121,51,49,0,0,47,98,117,112,117,55,47,50,0,0,0,0,0,0,0,0,103,114,97,121,51,48,0,0,103,114,97,121,51,0,0,0,103,114,97,121,50,57,0,0,103,114,97,121,50,56,0,0,103,114,97,121,50,55,0,0,32,102,111,110,116,45,115,116,114,101,116,99,104,61,34,37,115,34,0,0,0,0,0,0,103,114,97,121,50,54,0,0,50,32,108,116,32,123,
+0,0,110,105,0,0,0,0,0,0,103,114,97,121,50,53,0,0,103,114,97,121,50,52,0,0,103,114,97,121,50,51,0,0,103,114,97,121,50,50,0,0,47,98,117,112,117,55,47,49,0,0,0,0,0,0,0,0,101,110,99,111,100,105,110,103,32,115,112,101,99,105,102,105,101,100,32,105,110,32,88,77,76,32,100,101,99,108,97,114,97,116,105,111,110,32,105,115,32,105,110,99,111,114,114,101,99,116,0,0,0,0,0,0,111,117,116,32,111,102,32,109,101,109,111,114,121,0,0,0,103,114,97,121,50,49,0,0,103,114,97,121,50,48,0,0,103,114,97,121,50,0,0,0,103,114,
+97,121,49,57,0,0,103,114,97,121,49,56,0,0,32,102,111,110,116,45,119,101,105,103,104,116,61,34,37,115,34,0,0,0,0,0,0,0,103,114,97,121,49,55,0,0,47,108,97,110,103,117,97,103,101,108,101,118,101,108,32,119,104,101,114,101,32,123,112,111,112,32,108,97,110,103,117,97,103,101,108,101,118,101,108,125,123,49,125,32,105,102,101,108,115,101,0,0,0,0,0,0,110,101,0,0,0,0,0,0,103,114,97,121,49,54,0,0,103,114,97,121,49,53,0,0,103,114,97,121,49,52,0,0,103,114,97,121,49,51,0,0,47,98,117,112,117,54,47,54,0,0,0,0,0,
+0,0,0,103,105,102,58,109,97,112,0,103,114,97,121,49,50,0,0,103,114,97,121,49,49,0,0,103,114,97,121,49,48,48,0,102,111,114,119,97,114,100,0,103,114,97,121,49,48,0,0,103,114,97,121,49,0,0,0,44,37,115,0,0,0,0,0,103,114,97,121,48,0,0,0,37,32,109,97,107,101,32,39,60,60,39,32,97,110,100,32,39,62,62,39,32,115,97,102,101,32,111,110,32,80,83,32,76,101,118,101,108,32,49,32,100,101,118,105,99,101,115,0,110,100,97,115,104,0,0,0,103,114,97,121,0,0,0,0,105,110,115,116,97,108,108,95,105,110,95,114,97,110,107,44,
+32,108,105,110,101,32,37,100,58,32,37,115,32,37,115,32,114,97,110,107,32,37,100,32,105,32,61,32,37,100,32,97,110,32,61,32,48,10,0,0,103,111,108,100,101,110,114,111,100,52,0,0,0,0,0,0,103,111,108,100,101,110,114,111,100,51,0,0,0,0,0,0,103,111,108,100,101,110,114,111,100,50,0,0,0,0,0,0,47,98,117,112,117,54,47,53,0,0,0,0,0,0,0,0,103,111,108,100,101,110,114,111,100,49,0,0,0,0,0,0,103,111,108,100,101,110,114,111,100,0,0,0,0,0,0,0,103,111,108,100,52,0,0,0,103,111,108,100,51,0,0,0,103,111,108,100,50,0,0,
+0,32,102,111,110,116,45,102,97,109,105,108,121,61,34,37,115,0,0,0,0,0,0,0,0,103,111,108,100,49,0,0,0,47,112,100,102,109,97,114,107,32,119,104,101,114,101,32,123,112,111,112,125,32,123,117,115,101,114,100,105,99,116,32,47,112,100,102,109,97,114,107,32,47,99,108,101,97,114,116,111,109,97,114,107,32,108,111,97,100,32,112,117,116,125,32,105,102,101,108,115,101,0,0,0,110,98,115,112,0,0,0,0,112,101,110,100,32,100,105,99,116,111,102,32,97,32,98,97,100,32,111,98,106,101,99,116,0,0,0,0,0,0,0,0,103,111,108,
+100,0,0,0,0,103,104,111,115,116,119,104,105,116,101,0,0,0,0,0,0,103,97,105,110,115,98,111,114,111,0,0,0,0,0,0,0,102,111,114,101,115,116,103,114,101,101,110,0,0,0,0,0,47,98,117,112,117,54,47,52,0,0,0,0,0,0,0,0,102,108,111,114,97,108,119,104,105,116,101,0,0,0,0,0,102,105,114,101,98,114,105,99,107,52,0,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,46,51,102,32,37,100,32,37,46,52,102,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,
+37,100,32,37,100,10,0,0,0,0,0,0,0,0,102,105,114,101,98,114,105,99,107,51,0,0,0,0,0,0,102,105,114,101,98,114,105,99,107,50,0,0,0,0,0,0,102,105,114,101,98,114,105,99,107,49,0,0,0,0,0,0,65,118,97,110,116,71,97,114,100,101,45,66,111,111,107,0,32,120,61,34,37,103,34,32,121,61,34,37,103,34,0,0,102,105,114,101,98,114,105,99,107,0,0,0,0,0,0,0,37,32,109,97,107,101,32,115,117,114,101,32,112,100,102,109,97,114,107,32,105,115,32,104,97,114,109,108,101,115,115,32,102,111,114,32,80,83,45,105,110,116,101,114,112,
+114,101,116,101,114,115,32,111,116,104,101,114,32,116,104,97,110,32,68,105,115,116,105,108,108,101,114,0,0,0,0,0,0,0,0,110,97,98,108,97,0,0,0,100,111,100,103,101,114,98,108,117,101,52,0,0,0,0,0,100,111,100,103,101,114,98,108,117,101,51,0,0,0,0,0,100,111,100,103,101,114,98,108,117,101,50,0,0,0,0,0,100,111,100,103,101,114,98,108,117,101,49,0,0,0,0,0,47,98,117,112,117,54,47,51,0,0,0,0,0,0,0,0,100,111,100,103,101,114,98,108,117,101,0,0,0,0,0,0,100,105,109,103,114,101,121,0,100,105,109,103,114,97,121,
+0,102,111,110,116,115,105,122,101,0,0,0,0,0,0,0,0,100,101,101,112,115,107,121,98,108,117,101,52,0,0,0,0,100,101,101,112,115,107,121,98,108,117,101,51,0,0,0,0,32,116,101,120,116,45,97,110,99,104,111,114,61,34,109,105,100,100,108,101,34,0,0,0,100,101,101,112,115,107,121,98,108,117,101,50,0,0,0,0,37,32,47,97,114,114,111,119,119,105,100,116,104,32,53,32,100,101,102,0,0,0,0,0,109,117,0,0,0,0,0,0,100,101,101,112,115,107,121,98,108,117,101,49,0,0,0,0,102,108,97,116,46,99,0,0,100,101,101,112,115,107,121,
+98,108,117,101,0,0,0,0,0,100,101,101,112,112,105,110,107,52,0,0,0,0,0,0,0,100,101,101,112,112,105,110,107,51,0,0,0,0,0,0,0,47,98,117,112,117,54,47,50,0,0,0,0,0,0,0,0,110,97,118,121,0,0,0,0,100,101,101,112,112,105,110,107,50,0,0,0,0,0,0,0,100,101,101,112,112,105,110,107,49,0,0,0,0,0,0,0,100,101,101,112,112,105,110,107,0,0,0,0,0,0,0,0,100,97,114,107,118,105,111,108,101,116,0,0,0,0,0,0,32,45,115,109,111,111,116,104,32,98,101,122,105,101,114,32,0,0,0,0,0,0,0,0,100,97,114,107,116,117,114,113,117,111,105,
+115,101,0,0,0,32,116,101,120,116,45,97,110,99,104,111,114,61,34,101,110,100,34,0,0,0,0,0,0,100,97,114,107,115,108,97,116,101,103,114,101,121,0,0,0,37,32,47,97,114,114,111,119,108,101,110,103,116,104,32,49,48,32,100,101,102,0,0,0,109,105,110,117,115,0,0,0,100,97,114,107,115,108,97,116,101,103,114,97,121,52,0,0,100,97,114,107,115,108,97,116,101,103,114,97,121,51,0,0,100,97,114,107,115,108,97,116,101,103,114,97,121,50,0,0,47,97,99,99,101,110,116,54,47,54,0,0,0,0,0,0,100,97,114,107,115,108,97,116,101,
+103,114,97,121,49,0,0,47,98,117,112,117,54,47,49,0,0,0,0,0,0,0,0,100,97,114,107,115,108,97,116,101,103,114,97,121,0,0,0,100,97,114,107,115,108,97,116,101,98,108,117,101,0,0,0,100,97,114,107,115,101,97,103,114,101,101,110,52,0,0,0,100,97,114,107,115,101,97,103,114,101,101,110,51,0,0,0,102,105,108,108,101,100,0,0,100,97,114,107,115,101,97,103,114,101,101,110,50,0,0,0,32,116,101,120,116,45,97,110,99,104,111,114,61,34,115,116,97,114,116,34,0,0,0,0,100,97,114,107,115,101,97,103,114,101,101,110,49,0,0,
+0,95,95,99,108,117,115,116,101,114,110,111,100,101,115,0,0,49,32,115,101,116,109,105,116,101,114,108,105,109,105,116,0,109,105,100,100,111,116,0,0,100,101,109,105,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,100,97,114,107,115,101,97,103,114,101,101,110,0,0,0,0,100,97,114,107,115,97,108,109,111,110,0,0,0,0,0,0,110,111,110,101,0,0,0,0,110,111,100,101,32,34,37,115,34,32,105,115,32,99,111,110,116,97,105,110,101,100,32,105,110,32,116,119,111,32,110,111,110,45,99,111,109,112,97,114,97,
+98,108,101,32,99,108,117,115,116,101,114,115,32,34,37,115,34,32,97,110,100,32,34,37,115,34,10,0,0,0,0,101,110,100,32,112,111,114,116,58,32,40,37,46,53,103,44,32,37,46,53,103,41,44,32,116,97,110,103,101,110,116,32,97,110,103,108,101,58,32,37,46,53,103,44,32,37,115,10,0,0,0,0,0,0,0,0,115,116,117,102,102,46,99,0,100,97,114,107,111,114,99,104,105,100,52,0,0,0,0,0,108,119,105,100,116,104,0,0,92,84,0,0,0,0,0,0,32,115,112,108,105,116,115,32,105,110,116,111,32,116,119,111,32,116,111,107,101,110,115,10,0,
+0,0,0,0,0,0,0,100,97,114,107,111,114,99,104,105,100,51,0,0,0,0,0,47,98,117,112,117,53,47,53,0,0,0,0,0,0,0,0,115,116,101,112,32,115,105,122,101,32,61,32,37,100,10,0,100,97,114,107,111,114,99,104,105,100,50,0,0,0,0,0,45,62,0,0,0,0,0,0,100,97,114,107,111,114,99,104,105,100,49,0,0,0,0,0,72,82,0,0,0,0,0,0,100,97,114,107,111,114,99,104,105,100,0,0,0,0,0,0,37,100,0,0,0,0,0,0,100,97,114,107,111,114,97,110,103,101,52,0,0,0,0,0,78,68,95,114,97,110,107,40,102,114,111,109,41,32,60,32,78,68,95,114,97,110,107,
+40,116,111,41,0,0,0,0,0,35,101,56,101,56,101,56,0,100,97,114,107,111,114,97,110,103,101,51,0,0,0,0,0,60,116,101,120,116,0,0,0,100,97,114,107,111,114,97,110,103,101,50,0,0,0,0,0,49,52,32,100,101,102,97,117,108,116,45,102,111,110,116,45,102,97,109,105,108,121,32,115,101,116,95,102,111,110,116,0,109,105,99,114,111,0,0,0,99,111,114,97,108,0,0,0,100,97,114,107,111,114,97,110,103,101,49,0,0,0,0,0,100,97,114,107,111,114,97,110,103,101,0,0,0,0,0,0,100,97,114,107,111,108,105,118,101,103,114,101,101,110,52,
+0,100,97,114,107,111,108,105,118,101,103,114,101,101,110,51,0,47,98,117,112,117,53,47,52,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,109,97,120,105,116,101,114,0,100,97,114,107,111,108,105,118,101,103,114,101,101,110,50,0,100,97,114,107,111,108,105,118,101,103,114,101,101,110,49,0,115,97,109,101,0,0,0,0,100,97,114,107,111,108,105,118,101,103,114,101,101,110,0,0,100,97,114,107,107,104,97,107,105,0,0,0,0,0,0,0,99,109,0,0,0,0,0,0,10,0,0,0,0,0,0,0,100,97,114,107,103,114,101,101,110,0,0,0,0,0,0,0,47,62,10,0,0,0,
+0,0,100,97,114,107,103,111,108,100,101,110,114,111,100,52,0,0,37,37,66,101,103,105,110,83,101,116,117,112,0,0,0,0,109,100,97,115,104,0,0,0,100,97,114,107,103,111,108,100,101,110,114,111,100,51,0,0,100,97,114,107,103,111,108,100,101,110,114,111,100,50,0,0,109,101,114,103,101,50,58,32,103,114,97,112,104,32,37,115,44,32,114,97,110,107,32,37,100,32,104,97,115,32,111,110,108,121,32,37,100,32,60,32,37,100,32,110,111,100,101,115,10,0,0,0,0,0,0,0,100,97,114,107,103,111,108,100,101,110,114,111,100,49,0,0,
+34,0,0,0,0,0,0,0,100,97,114,107,103,111,108,100,101,110,114,111,100,0,0,0,47,98,117,112,117,53,47,51,0,0,0,0,0,0,0,0,99,121,97,110,52,0,0,0,99,121,97,110,51,0,0,0,99,121,97,110,50,0,0,0,99,121,97,110,49,0,0,0,99,121,97,110,0,0,0,0,32,114,120,61,34,37,103,34,32,114,121,61,34,37,103,34,0,0,0,0,0,0,0,0,99,114,105,109,115,111,110,0,37,37,69,110,100,80,114,111,108,111,103,0,0,0,0,0,109,97,99,114,0,0,0,0,99,111,114,110,115,105,108,107,52,0,0,0,0,0,0,0,115,97,109,101,104,101,97,100,0,0,0,0,0,0,0,0,99,111,
+114,110,115,105,108,107,51,0,0,0,0,0,0,0,99,111,114,110,115,105,108,107,50,0,0,0,0,0,0,0,99,111,114,110,115,105,108,107,49,0,0,0,0,0,0,0,47,98,117,112,117,53,47,50,0,0,0,0,0,0,0,0,117,110,107,110,111,119,110,32,101,110,99,111,100,105,110,103,0,0,0,0,0,0,0,0,99,111,114,110,115,105,108,107,0,0,0,0,0,0,0,0,99,111,114,110,102,108,111,119,101,114,98,108,117,101,0,0,99,111,114,97,108,52,0,0,99,111,114,97,108,51,0,0,99,111,114,97,108,50,0,0,32,99,120,61,34,37,103,34,32,99,121,61,34,37,103,34,0,0,0,0,0,0,
+0,0,99,111,114,97,108,49,0,0,105,115,109,97,112,58,109,97,112,0,0,0,0,0,0,0,108,116,0,0,0,0,0,0,99,111,114,97,108,0,0,0,99,104,111,99,111,108,97,116,101,52,0,0,0,0,0,0,37,37,69,110,100,82,101,115,111,117,114,99,101,0,0,0,99,104,111,99,111,108,97,116,101,51,0,0,0,0,0,0,99,104,111,99,111,108,97,116,101,50,0,0,0,0,0,0,47,98,117,112,117,53,47,49,0,0,0,0,0,0,0,0,112,110,103,58,109,97,112,0,99,104,111,99,111,108,97,116,101,49,0,0,0,0,0,0,99,104,111,99,111,108,97,116,101,0,0,0,0,0,0,0,99,104,97,114,116,
+114,101,117,115,101,52,0,0,0,0,0,99,104,97,114,116,114,101,117,115,101,51,0,0,0,0,0,105,110,118,101,109,112,116,121,0,0,0,0,0,0,0,0,99,104,97,114,116,114,101,117,115,101,50,0,0,0,0,0,60,101,108,108,105,112,115,101,0,0,0,0,0,0,0,0,99,104,97,114,116,114,101,117,115,101,49,0,0,0,0,0,47,99,117,114,108,97,121,101,114,32,48,32,100,101,102,0,108,115,113,117,111,0,0,0,99,104,97,114,116,114,101,117,115,101,0,0,0,0,0,0,99,97,100,101,116,98,108,117,101,52,0,0,0,0,0,0,99,97,100,101,116,98,108,117,101,51,0,0,
+0,0,0,0,103,105,102,58,115,118,103,0,99,97,100,101,116,98,108,117,101,50,0,0,0,0,0,0,47,98,117,112,117,52,47,52,0,0,0,0,0,0,0,0,99,97,100,101,116,98,108,117,101,49,0,0,0,0,0,0,99,97,100,101,116,98,108,117,101,0,0,0,0,0,0,0,98,117,114,108,121,119,111,111,100,52,0,0,0,0,0,0,98,117,114,108,121,119,111,111,100,51,0,0,0,0,0,0,98,117,114,108,121,119,111,111,100,50,0,0,0,0,0,0,37,103,44,37,103,0,0,0,98,117,114,108,121,119,111,111,100,49,0,0,0,0,0,0,9,123,105,110,118,105,115,125,32,105,102,0,0,0,0,0,108,
+115,97,113,117,111,0,0,98,117,114,108,121,119,111,111,100,0,0,0,0,0,0,0,98,114,111,119,110,52,0,0,98,114,111,119,110,51,0,0,98,114,111,119,110,50,0,0,47,98,117,112,117,52,47,51,0,0,0,0,0,0,0,0,98,114,111,119,110,49,0,0,98,114,111,119,110,0,0,0,98,108,117,101,118,105,111,108,101,116,0,0,0,0,0,0,32,37,100,0,0,0,0,0,98,108,117,101,52,0,0,0,98,108,117,101,51,0,0,0,65,118,97,110,116,71,97,114,100,101,45,66,111,111,107,79,98,108,105,113,117,101,0,0,60,112,111,108,121,103,111,110,0,0,0,0,0,0,0,0,98,108,
+117,101,50,0,0,0,9,111,114,0,0,0,0,0,108,114,109,0,0,0,0,0,98,108,117,101,49,0,0,0,98,108,117,101,0,0,0,0,98,108,97,110,99,104,101,100,97,108,109,111,110,100,0,0,98,108,97,99,107,0,0,0,47,98,117,112,117,52,47,50,0,0,0,0,0,0,0,0,98,105,115,113,117,101,52,0,98,105,115,113,117,101,51,0,98,105,115,113,117,101,50,0,98,105,115,113,117,101,49,0,98,105,115,113,117,101,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,59,34,47,62,10,60,47,108,105,110,101,97,114,71,114,97,100,105,101,110,116,62,10,
+60,47,100,101,102,115,62,10,0,98,101,105,103,101,0,0,0,9,99,117,114,108,97,121,101,114,32,109,121,117,112,112,101,114,32,103,116,0,0,0,0,108,111,122,0,0,0,0,0,97,122,117,114,101,52,0,0,97,122,117,114,101,51,0,0,97,122,117,114,101,50,0,0,97,122,117,114,101,49,0,0,47,98,117,112,117,52,47,49,0,0,0,0,0,0,0,0,109,97,114,111,111,110,0,0,97,122,117,114,101,0,0,0,97,113,117,97,109,97,114,105,110,101,52,0,0,0,0,0,97,113,117,97,109,97,114,105,110,101,51,0,0,0,0,0,97,113,117,97,109,97,114,105,110,101,50,0,0,
+0,0,0,32,45,119,105,100,116,104,32,0,0,0,0,0,0,0,0,97,113,117,97,109,97,114,105,110,101,49,0,0,0,0,0,60,115,116,111,112,32,111,102,102,115,101,116,61,34,37,46,48,51,102,34,32,115,116,121,108,101,61,34,115,116,111,112,45,99,111,108,111,114,58,0,97,113,117,97,109,97,114,105,110,101,0,0,0,0,0,0,9,99,117,114,108,97,121,101,114,32,109,121,108,111,119,101,114,32,108,116,0,0,0,0,108,111,119,97,115,116,0,0,97,110,116,105,113,117,101,119,104,105,116,101,52,0,0,0,97,110,116,105,113,117,101,119,104,105,116,
+101,51,0,0,0,97,110,116,105,113,117,101,119,104,105,116,101,50,0,0,0,97,110,116,105,113,117,101,119,104,105,116,101,49,0,0,0,47,97,99,99,101,110,116,54,47,53,0,0,0,0,0,0,47,98,117,112,117,51,47,51,0,0,0,0,0,0,0,0,97,110,116,105,113,117,101,119,104,105,116,101,0,0,0,0,97,108,105,99,101,98,108,117,101,0,0,0,0,0,0,0,47,121,108,111,114,114,100,57,47,57,0,0,0,0,0,0,47,121,108,111,114,114,100,57,47,56,0,0,0,0,0,0,83,32,0,0,0,0,0,0,47,121,108,111,114,114,100,57,47,55,0,0,0,0,0,0,47,121,108,111,114,114,100,
+57,47,54,0,0,0,0,0,0,120,49,61,34,37,103,34,32,121,49,61,34,37,103,34,32,120,50,61,34,37,103,34,32,121,50,61,34,37,103,34,32,62,10,0,0,0,0,0,0,99,108,117,115,116,101,114,0,9,47,109,121,108,111,119,101,114,32,101,120,99,104,32,100,101,102,0,0,0,0,0,0,108,102,108,111,111,114,0,0,65,118,97,110,116,71,97,114,100,101,45,68,101,109,105,0,47,121,108,111,114,114,100,57,47,53,0,0,0,0,0,0,95,76,84,88,95,108,105,98,114,97,114,121,0,0,0,0,47,121,108,111,114,114,100,57,47,52,0,0,0,0,0,0,116,114,105,97,110,103,
+108,101,0,0,0,0,0,0,0,0,75,0,0,0,0,0,0,0,110,111,116,32,99,111,110,115,116,114,97,105,110,101,100,0,66,111,117,110,100,105,110,103,66,111,120,32,110,111,116,32,102,111,117,110,100,32,105,110,32,101,112,115,102,32,102,105,108,101,32,37,115,10,0,0,78,68,95,104,101,97,112,105,110,100,101,120,40,118,41,32,60,32,48,0,0,0,0,0,47,121,108,111,114,114,100,57,47,51,0,0,0,0,0,0,116,97,105,108,95,108,112,0,92,72,0,0,0,0,0,0,39,32,105,110,32,108,105,110,101,32,37,100,32,111,102,32,0,0,0,0,0,0,0,0,47,121,108,111,
+114,114,100,57,47,50,0,0,0,0,0,0,47,98,117,112,117,51,47,50,0,0,0,0,0,0,0,0,117,110,100,101,102,105,110,101,100,0,0,0,0,0,0,0,47,121,108,111,114,114,100,57,47,49,0,0,0,0,0,0,99,111,108,111,114,0,0,0,47,121,108,111,114,114,100,56,47,56,0,0,0,0,0,0,66,82,0,0,0,0,0,0,47,121,108,111,114,114,100,56,47,55,0,0,0,0,0,0,85,110,114,101,99,111,103,110,105,122,101,100,32,111,118,101,114,108,97,112,32,118,97,108,117,101,32,34,37,115,34,32,45,32,117,115,105,110,103,32,102,97,108,115,101,10,0,0,102,111,110,116,
+110,97,109,101,0,0,0,0,0,0,0,0,47,121,108,111,114,114,100,56,47,54,0,0,0,0,0,0,35,51,48,51,48,51,48,0,47,121,108,111,114,114,100,56,47,53,0,0,0,0,0,0,47,121,108,111,114,114,100,56,47,52,0,0,0,0,0,0,60,100,101,102,115,62,10,60,108,105,110,101,97,114,71,114,97,100,105,101,110,116,32,105,100,61,34,108,95,37,100,34,32,103,114,97,100,105,101,110,116,85,110,105,116,115,61,34,117,115,101,114,83,112,97,99,101,79,110,85,115,101,34,32,0,0,0,0,0,0,0,0,9,47,109,121,117,112,112,101,114,32,101,120,99,104,32,100,
+101,102,0,0,0,0,0,0,108,101,0,0,0,0,0,0,99,104,111,99,111,108,97,116,101,0,0,0,0,0,0,0,47,121,108,111,114,114,100,56,47,51,0,0,0,0,0,0,47,121,108,111,114,114,100,56,47,50,0,0,0,0,0,0,47,121,108,111,114,114,100,56,47,49,0,0,0,0,0,0,47,121,108,111,114,114,100,55,47,55,0,0,0,0,0,0,47,98,117,112,117,51,47,49,0,0,0,0,0,0,0,0,104,101,97,100,112,111,114,116,0,0,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,47,121,108,111,114,114,100,55,47,54,0,0,0,0,0,0,47,121,108,111,114,114,100,55,47,
+53,0,0,0,0,0,0,115,105,110,107,0,0,0,0,47,121,108,111,114,114,100,55,47,52,0,0,0,0,0,0,47,121,108,111,114,114,100,55,47,51,0,0,0,0,0,0,34,0,0,0,0,0,0,0,37,32,0,0,0,0,0,0,47,121,108,111,114,114,100,55,47,50,0,0,0,0,0,0,47,121,108,111,114,114,100,55,47,49,0,0,0,0,0,0,59,34,47,62,10,60,47,114,97,100,105,97,108,71,114,97,100,105,101,110,116,62,10,60,47,100,101,102,115,62,10,0,47,111,110,108,97,121,101,114,115,32,123,0,0,0,0,0,108,100,113,117,111,0,0,0,97,103,100,101,108,101,116,101,32,111,110,32,98,97,
+100,32,111,98,106,101,99,116,0,0,47,121,108,111,114,114,100,54,47,54,0,0,0,0,0,0,47,121,108,111,114,114,100,54,47,53,0,0,0,0,0,0,109,105,110,99,114,111,115,115,32,37,115,58,32,37,100,32,99,114,111,115,115,105,110,103,115,44,32,37,46,50,102,32,115,101,99,115,46,10,0,0,47,121,108,111,114,114,100,54,47,52,0,0,0,0,0,0,32,105,100,61,34,0,0,0,47,121,108,111,114,114,100,54,47,51,0,0,0,0,0,0,47,98,117,103,110,57,47,57,0,0,0,0,0,0,0,0,47,121,108,111,114,114,100,54,47,50,0,0,0,0,0,0,47,121,108,111,114,114,
+100,54,47,49,0,0,0,0,0,0,47,121,108,111,114,114,100,53,47,53,0,0,0,0,0,0,47,121,108,111,114,114,100,53,47,52,0,0,0,0,0,0,47,121,108,111,114,114,100,53,47,51,0,0,0,0,0,0,47,121,108,111,114,114,100,53,47,50,0,0,0,0,0,0,60,115,116,111,112,32,111,102,102,115,101,116,61,34,49,34,32,115,116,121,108,101,61,34,115,116,111,112,45,99,111,108,111,114,58,0,0,0,0,0,47,111,110,108,97,121,101,114,32,123,32,99,117,114,108,97,121,101,114,32,110,101,32,123,105,110,118,105,115,125,32,105,102,32,125,32,100,101,102,0,
+108,99,101,105,108,0,0,0,47,121,108,111,114,114,100,53,47,49,0,0,0,0,0,0,47,121,108,111,114,114,100,52,47,52,0,0,0,0,0,0,47,121,108,111,114,114,100,52,47,51,0,0,0,0,0,0,47,121,108,111,114,114,100,52,47,50,0,0,0,0,0,0,47,98,117,103,110,57,47,56,0,0,0,0,0,0,0,0,88,77,76,32,111,114,32,116,101,120,116,32,100,101,99,108,97,114,97,116,105,111,110,32,110,111,116,32,97,116,32,115,116,97,114,116,32,111,102,32,101,110,116,105,116,121,0,0,47,121,108,111,114,114,100,52,47,49,0,0,0,0,0,0,47,121,108,111,114,114,
+100,51,47,51,0,0,0,0,0,0,47,121,108,111,114,114,100,51,47,50,0,0,0,0,0,0,47,121,108,111,114,114,100,51,47,49,0,0,0,0,0,0,47,121,108,111,114,98,114,57,47,57,0,0,0,0,0,0,47,121,108,111,114,98,114,57,47,56,0,0,0,0,0,0,59,34,47,62,10,0,0,0,9,47,103,114,97,112,104,99,111,108,111,114,32,123,110,111,112,99,111,108,111,114,125,32,100,101,102,0,0,0,0,0,108,97,114,114,0,0,0,0,47,121,108,111,114,98,114,57,47,55,0,0,0,0,0,0,47,121,108,111,114,98,114,57,47,54,0,0,0,0,0,0,47,121,108,111,114,98,114,57,47,53,0,0,
+0,0,0,0,47,121,108,111,114,98,114,57,47,52,0,0,0,0,0,0,47,98,117,103,110,57,47,55,0,0,0,0,0,0,0,0,40,108,105,98,41,58,112,115,0,0,0,0,0,0,0,0,47,121,108,111,114,98,114,57,47,51,0,0,0,0,0,0,47,121,108,111,114,98,114,57,47,50,0,0,0,0,0,0,47,121,108,111,114,98,114,57,47,49,0,0,0,0,0,0,47,121,108,111,114,98,114,56,47,56,0,0,0,0,0,0,47,121,108,111,114,98,114,56,47,55,0,0,0,0,0,0,104,97,108,102,0,0,0,0,47,121,108,111,114,98,114,56,47,54,0,0,0,0,0,0,49,46,0,0,0,0,0,0,9,47,101,100,103,101,99,111,108,111,
+114,32,123,110,111,112,99,111,108,111,114,125,32,100,101,102,0,0,0,0,0,0,108,97,113,117,111,0,0,0,47,121,108,111,114,98,114,56,47,53,0,0,0,0,0,0,47,121,108,111,114,98,114,56,47,52,0,0,0,0,0,0,47,121,108,111,114,98,114,56,47,51,0,0,0,0,0,0,47,121,108,111,114,98,114,56,47,50,0,0,0,0,0,0,47,98,117,103,110,57,47,54,0,0,0,0,0,0,0,0,47,121,108,111,114,98,114,56,47,49,0,0,0,0,0,0,47,121,108,111,114,98,114,55,47,55,0,0,0,0,0,0,47,121,108,111,114,98,114,55,47,54,0,0,0,0,0,0,47,121,108,111,114,98,114,55,47,
+53,0,0,0,0,0,0,47,121,108,111,114,98,114,55,47,52,0,0,0,0,0,0,47,121,108,111,114,98,114,55,47,51,0,0,0,0,0,0,37,102,0,0,0,0,0,0,9,47,110,111,100,101,99,111,108,111,114,32,123,110,111,112,99,111,108,111,114,125,32,100,101,102,0,0,0,0,0,0,108,97,110,103,0,0,0,0,47,121,108,111,114,98,114,55,47,50,0,0,0,0,0,0,47,121,108,111,114,98,114,55,47,49,0,0,0,0,0,0,47,121,108,111,114,98,114,54,47,54,0,0,0,0,0,0,47,121,108,111,114,98,114,54,47,53,0,0,0,0,0,0,47,98,117,103,110,57,47,53,0,0,0,0,0,0,0,0,47,121,108,
+111,114,98,114,54,47,52,0,0,0,0,0,0,47,121,108,111,114,98,114,54,47,51,0,0,0,0,0,0,47,121,108,111,114,98,114,54,47,50,0,0,0,0,0,0,47,121,108,111,114,98,114,54,47,49,0,0,0,0,0,0,32,37,115,10,0,0,0,0,47,121,108,111,114,98,114,53,47,53,0,0,0,0,0,0,47,121,108,111,114,98,114,53,47,52,0,0,0,0,0,0,65,118,97,110,116,71,97,114,100,101,45,68,101,109,105,0,59,115,116,111,112,45,111,112,97,99,105,116,121,58,0,0,9,97,108,111,97,100,32,112,111,112,32,115,101,116,104,115,98,99,111,108,111,114,0,0,108,97,109,98,
+100,97,0,0,108,105,110,101,108,101,110,103,116,104,0,0,0,0,0,0,47,121,108,111,114,98,114,53,47,51,0,0,0,0,0,0,47,121,108,111,114,98,114,53,47,50,0,0,0,0,0,0,47,121,108,111,114,98,114,53,47,49,0,0,0,0,0,0,47,121,108,111,114,98,114,52,47,52,0,0,0,0,0,0,47,98,117,103,110,57,47,52,0,0,0,0,0,0,0,0,47,121,108,111,114,98,114,52,47,51,0,0,0,0,0,0,47,121,108,111,114,98,114,52,47,50,0,0,0,0,0,0,47,121,108,111,114,98,114,52,47,49,0,0,0,0,0,0,47,121,108,111,114,98,114,51,47,51,0,0,0,0,0,0,47,121,108,111,114,
+98,114,51,47,50,0,0,0,0,0,0,47,121,108,111,114,98,114,51,47,49,0,0,0,0,0,0,60,115,116,111,112,32,111,102,102,115,101,116,61,34,48,34,32,115,116,121,108,101,61,34,115,116,111,112,45,99,111,108,111,114,58,0,0,0,0,0,9,108,97,121,101,114,99,111,108,111,114,115,101,113,32,99,117,114,108,97,121,101,114,32,49,32,115,117,98,32,108,97,121,101,114,108,101,110,32,109,111,100,32,103,101,116,0,0,108,65,114,114,0,0,0,0,47,121,108,103,110,98,117,57,47,57,0,0,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,
+0,0,0,0,47,121,108,103,110,98,117,57,47,56,0,0,0,0,0,0,47,98,117,103,110,57,47,51,0,0,0,0,0,0,0,0,47,121,108,103,110,98,117,57,47,55,0,0,0,0,0,0,47,121,108,103,110,98,117,57,47,54,0,0,0,0,0,0,115,116,114,101,97,109,32,101,110,100,0,0,0,0,0,0,108,105,109,101,0,0,0,0,47,121,108,103,110,98,117,57,47,53,0,0,0,0,0,0,47,121,108,103,110,98,117,57,47,52,0,0,0,0,0,0,47,121,108,103,110,98,117,57,47,51,0,0,0,0,0,0,47,121,108,103,110,98,117,57,47,50,0,0,0,0,0,0,36,99,0,0,0,0,0,0,47,121,108,103,110,98,117,57,
+47,49,0,0,0,0,0,0,47,121,108,103,110,98,117,56,47,56,0,0,0,0,0,0,60,100,101,102,115,62,10,60,114,97,100,105,97,108,71,114,97,100,105,101,110,116,32,105,100,61,34,114,95,37,100,34,32,99,120,61,34,53,48,37,37,34,32,99,121,61,34,53,48,37,37,34,32,114,61,34,55,53,37,37,34,32,102,120,61,34,37,100,37,37,34,32,102,121,61,34,37,100,37,37,34,62,10,0,0,0,0,0,47,115,101,116,108,97,121,101,114,32,123,47,109,97,120,108,97,121,101,114,32,101,120,99,104,32,100,101,102,32,47,99,117,114,108,97,121,101,114,32,101,
+120,99,104,32,100,101,102,0,0,0,0,0,0,0,0,107,97,112,112,97,0,0,0,47,121,108,103,110,98,117,56,47,55,0,0,0,0,0,0,47,121,108,103,110,98,117,56,47,54,0,0,0,0,0,0,47,121,108,103,110,98,117,56,47,53,0,0,0,0,0,0,47,121,108,103,110,98,117,56,47,52,0,0,0,0,0,0,47,98,117,103,110,57,47,50,0,0,0,0,0,0,0,0,47,121,108,103,110,98,117,56,47,51,0,0,0,0,0,0,110,97,110,0,0,0,0,0,47,97,99,99,101,110,116,54,47,52,0,0,0,0,0,0,47,121,108,103,110,98,117,56,47,50,0,0,0,0,0,0,47,121,108,103,110,98,117,56,47,49,0,0,0,0,0,
+0,47,121,108,103,110,98,117,55,47,55,0,0,0,0,0,0,37,46,51,102,0,0,0,0,115,104,111,114,116,101,115,116,46,99,0,0,0,0,0,0,47,121,108,103,110,98,117,55,47,54,0,0,0,0,0,0,47,121,108,103,110,98,117,55,47,53,0,0,0,0,0,0,104,101,97,100,112,111,114,116,0,0,0,0,0,0,0,0,37,99,37,103,44,37,103,0,47,108,97,121,101,114,108,101,110,32,108,97,121,101,114,99,111,108,111,114,115,101,113,32,108,101,110,103,116,104,32,100,101,102,0,0,0,0,0,0,105,117,109,108,0,0,0,0,105,116,97,108,105,99,0,0,65,103,114,97,112,104,105,
+110,102,111,95,116,0,0,0,0,47,121,108,103,110,98,117,55,47,52,0,0,0,0,0,0,47,121,108,103,110,98,117,55,47,51,0,0,0,0,0,0,101,103,103,0,0,0,0,0,115,101,112,0,0,0,0,0,99,111,110,115,116,114,97,105,110,101,100,0,0,0,0,0,114,101,97,100,0,0,0,0,37,115,32,37,46,51,102,10,0,0,0,0,0,0,0,0,47,121,108,103,110,98,117,55,47,50,0,0,0,0,0,0,104,101,97,100,95,108,112,0,92,69,0,0,0,0,0,0,47,121,108,103,110,98,117,55,47,49,0,0,0,0,0,0,47,98,117,103,110,57,47,49,0,0,0,0,0,0,0,0,95,65,71,95,115,116,114,100,97,116,97,
+0,0,0,0,0,32,32,109,97,114,103,105,110,32,37,100,10,0,0,0,0,47,121,108,103,110,98,117,54,47,54,0,0,0,0,0,0,112,101,110,99,111,108,111,114,0,0,0,0,0,0,0,0,115,104,97,112,101,0,0,0,47,121,108,103,110,98,117,54,47,53,0,0,0,0,0,0,83,0,0,0,0,0,0,0,47,121,108,103,110,98,117,54,47,52,0,0,0,0,0,0,79,118,101,114,108,97,112,32,118,97,108,117,101,32,34,37,115,34,32,117,110,115,117,112,112,111,114,116,101,100,32,45,32,105,103,110,111,114,101,100,10,0,0,0,0,0,0,0,100,101,114,105,118,101,100,0,119,101,105,103,
+104,116,0,0,47,121,108,103,110,98,117,54,47,51,0,0,0,0,0,0,35,102,99,102,99,102,99,0,47,121,108,103,110,98,117,54,47,50,0,0,0,0,0,0,47,121,108,103,110,98,117,54,47,49,0,0,0,0,0,0,32,100,61,34,0,0,0,0,100,101,102,0,0,0,0,0,105,115,105,110,0,0,0,0,78,111,32,108,111,97,100,105,109,97,103,101,32,112,108,117,103,105,110,32,102,111,114,32,34,37,115,34,10,0,0,0,99,104,97,114,116,114,101,117,115,101,0,0,0,0,0,0,47,121,108,103,110,98,117,53,47,53,0,0,0,0,0,0,47,121,108,103,110,98,117,53,47,52,0,0,0,0,0,0,
+47,121,108,103,110,98,117,53,47,51,0,0,0,0,0,0,47,121,108,103,110,98,117,53,47,50,0,0,0,0,0,0,47,98,117,103,110,56,47,56,0,0,0,0,0,0,0,0,116,97,105,108,112,111,114,116,0,0,0,0,0,0,0,0,97,115,32,114,101,113,117,105,114,101,100,32,98,121,32,116,104,101,32,45,110,32,102,108,97,103,10,0,0,0,0,0,47,121,108,103,110,98,117,53,47,49,0,0,0,0,0,0,47,121,108,103,110,98,117,52,47,52,0,0,0,0,0,0,109,97,120,0,0,0,0,0,47,121,108,103,110,98,117,52,47,51,0,0,0,0,0,0,47,121,108,103,110,98,117,52,47,50,0,0,0,0,0,0,
+112,99,0,0,0,0,0,0,47,121,108,103,110,98,117,52,47,49,0,0,0,0,0,0,37,46,53,103,32,37,46,53,103,32,37,46,53,103,32,37,115,99,111,108,111,114,10,0,47,121,108,103,110,98,117,51,47,51,0,0,0,0,0,0,60,112,97,116,104,0,0,0,9,93,0,0,0,0,0,0,115,121,110,116,97,120,32,97,109,98,105,103,117,105,116,121,32,45,32,98,97,100,108,121,32,100,101,108,105,109,105,116,101,100,32,110,117,109,98,101,114,32,39,0,0,0,0,0,105,113,117,101,115,116,0,0,47,121,108,103,110,98,117,51,47,50,0,0,0,0,0,0,101,114,114,111,114,32,105,
+110,32,99,111,108,120,108,97,116,101,40,41,10,0,0,0,0,47,121,108,103,110,98,117,51,47,49,0,0,0,0,0,0,40,114,118,32,61,61,32,48,41,32,124,124,32,40,78,68,95,111,114,100,101,114,40,114,118,41,45,78,68,95,111,114,100,101,114,40,118,41,41,42,100,105,114,32,62,32,48,0,47,121,108,103,110,57,47,57,0,0,0,0,0,0,0,0,60,97,114,101,97,32,115,104,97,112,101,61,34,112,111,108,121,34,0,0,0,0,0,0,47,121,108,103,110,57,47,56,0,0,0,0,0,0,0,0,47,98,117,103,110,56,47,55,0,0,0,0,0,0,0,0,47,121,108,103,110,57,47,55,0,
+0,0,0,0,0,0,0,47,121,108,103,110,57,47,54,0,0,0,0,0,0,0,0,47,121,108,103,110,57,47,53,0,0,0,0,0,0,0,0,47,121,108,103,110,57,47,52,0,0,0,0,0,0,0,0,47,121,108,103,110,57,47,51,0,0,0,0,0,0,0,0,47,121,108,103,110,57,47,50,0,0,0,0,0,0,0,0,103,118,114,101,110,100,101,114,95,99,111,114,101,95,115,118,103,46,99,0,0,0,0,0,9,9,91,46,56,32,46,56,32,46,56,93,0,0,0,0,105,111,116,97,0,0,0,0,47,121,108,103,110,57,47,49,0,0,0,0,0,0,0,0,47,121,108,103,110,56,47,56,0,0,0,0,0,0,0,0,47,121,108,103,110,56,47,55,0,0,0,
+0,0,0,0,0,47,121,108,103,110,56,47,54,0,0,0,0,0,0,0,0,47,98,117,103,110,56,47,54,0,0,0,0,0,0,0,0,114,101,102,101,114,101,110,99,101,32,116,111,32,101,120,116,101,114,110,97,108,32,101,110,116,105,116,121,32,105,110,32,97,116,116,114,105,98,117,116,101,0,0,0,0,0,0,0,47,121,108,103,110,56,47,53,0,0,0,0,0,0,0,0,47,121,108,103,110,56,47,52,0,0,0,0,0,0,0,0,47,121,108,103,110,56,47,51,0,0,0,0,0,0,0,0,47,121,108,103,110,56,47,50,0,0,0,0,0,0,0,0,47,121,108,103,110,56,47,49,0,0,0,0,0,0,0,0,47,121,108,103,
+110,55,47,55,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,9,9,91,46,54,32,46,56,32,46,56,93,0,0,0,0,105,110,116],"i8",L,l.J+133156);D([47,121,108,103,110,55,47,54,0,0,0,0,0,0,0,0,47,121,108,103,110,55,47,53,0,0,0,0,0,0,0,0,47,121,108,103,110,55,47,52,0,0,0,0,0,0,0,0,47,121,108,103,110,55,47,51,0,0,0,0,0,0,0,0,47,98,117,103,110,56,47,53,0,0,0,0,0,0,0,0,112,115,58,112,115,0,0,0,47,121,108,103,110,55,47,50,0,0,0,0,0,0,0,0,47,121,108,103,110,55,47,49,0,0,0,0,0,0,0,0,47,121,108,103,110,54,47,54,0,0,0,0,0,0,0,0,47,
+121,108,103,110,54,47,53,0,0,0,0,0,0,0,0,47,121,108,103,110,54,47,52,0,0,0,0,0,0,0,0,47,121,108,103,110,54,47,51,0,0,0,0,0,0,0,0,101,0,0,0,0,0,0,0,35,37,48,50,120,37,48,50,120,37,48,50,120,0,0,0,9,9,91,46,52,32,46,56,32,46,56,93,0,0,0,0,105,110,102,105,110,0,0,0,47,121,108,103,110,54,47,50,0,0,0,0,0,0,0,0,47,121,108,103,110,54,47,49,0,0,0,0,0,0,0,0,47,121,108,103,110,53,47,53,0,0,0,0,0,0,0,0,47,121,108,103,110,53,47,52,0,0,0,0,0,0,0,0,47,98,117,103,110,56,47,52,0,0,0,0,0,0,0,0,47,121,108,103,110,
+53,47,51,0,0,0,0,0,0,0,0,47,121,108,103,110,53,47,50,0,0,0,0,0,0,0,0,47,121,108,103,110,53,47,49,0,0,0,0,0,0,0,0,47,121,108,103,110,52,47,52,0,0,0,0,0,0,0,0,47,121,108,103,110,52,47,51,0,0,0,0,0,0,0,0,47,121,108,103,110,52,47,50,0,0,0,0,0,0,0,0,53,44,50,0,0,0,0,0,9,9,91,46,50,32,46,56,32,46,56,93,0,0,0,0,105,109,97,103,101,0,0,0,47,121,108,103,110,52,47,49,0,0,0,0,0,0,0,0,47,121,108,103,110,51,47,51,0,0,0,0,0,0,0,0,47,98,117,103,110,56,47,51,0,0,0,0,0,0,0,0,47,121,108,103,110,51,47,50,0,0,0,0,0,0,
+0,0,47,121,108,103,110,51,47,49,0,0,0,0,0,0,0,0,47,115,118,103,47,121,101,108,108,111,119,103,114,101,101,110,0,0,0,0,0,0,0,0,47,115,118,103,47,121,101,108,108,111,119,0,0,0,0,0,47,115,118,103,47,119,104,105,116,101,115,109,111,107,101,0,47,115,118,103,47,119,104,105,116,101,0,0,0,0,0,0,47,115,118,103,47,119,104,101,97,116,0,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,46,49,102,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,0,47,115,118,
+103,47,118,105,111,108,101,116,0,0,0,0,0,82,0,0,0,0,0,0,0,49,44,53,0,0,0,0,0,9,9,91,48,32,48,32,48,93,0,0,0,0,0,0,0,105,103,114,97,118,101,0,0,108,97,121,111,117,116,0,0,47,115,118,103,47,116,117,114,113,117,111,105,115,101,0,0,47,115,118,103,47,116,111,109,97,116,111,0,0,0,0,0,47,115,118,103,47,116,104,105,115,116,108,101,0,0,0,0,47,115,118,103,47,116,101,97,108,0,0,0,0,0,0,0,47,98,117,103,110,56,47,50,0,0,0,0,0,0,0,0,47,115,118,103,47,116,97,110,0,0,0,0,0,0,0,0,47,115,118,103,47,115,116,101,101,
+108,98,108,117,101,0,0,47,115,118,103,47,115,112,114,105,110,103,103,114,101,101,110,0,0,0,0,0,0,0,0,47,115,118,103,47,115,110,111,119,0,0,0,0,0,0,0,115,97,109,101,116,97,105,108,0,0,0,0,0,0,0,0,47,115,118,103,47,115,108,97,116,101,103,114,101,121,0,0,47,115,118,103,47,115,108,97,116,101,103,114,97,121,0,0,34,0,0,0,0,0,0,0,9,91,9,37,32,108,97,121,101,114,32,99,111,108,111,114,32,115,101,113,117,101,110,99,101,32,45,32,100,97,114,107,101,115,116,32,116,111,32,108,105,103,104,116,101,115,116,0,105,
+101,120,99,108,0,0,0,47,115,118,103,47,115,108,97,116,101,98,108,117,101,0,0,102,97,115,116,103,114,46,99,0,0,0,0,0,0,0,0,47,115,118,103,47,115,107,121,98,108,117,101,0,0,0,0,47,115,118,103,47,115,105,108,118,101,114,0,0,0,0,0,47,115,118,103,47,115,105,101,110,110,97,0,0,0,0,0,47,98,117,103,110,56,47,49,0,0,0,0,0,0,0,0,103,114,101,101,110,0,0,0,47,115,118,103,47,115,101,97,115,104,101,108,108,0,0,0,47,115,118,103,47,115,101,97,103,114,101,101,110,0,0,0,47,115,118,103,47,115,97,110,100,121,98,114,
+111,119,110,0,47,115,118,103,47,115,97,108,109,111,110,0,0,0,0,0,35,37,48,50,120,37,48,50,120,37,48,50,120,0,0,0,47,115,118,103,47,115,97,100,100,108,101,98,114,111,119,110,0,0,0,0,0,0,0,0,47,115,118,103,47,114,111,121,97,108,98,108,117,101,0,0,34,32,115,116,114,111,107,101,45,111,112,97,99,105,116,121,61,34,37,102,0,0,0,0,47,108,97,121,101,114,99,111,108,111,114,115,101,113,0,0,105,99,105,114,99,0,0,0,47,115,118,103,47,114,111,115,121,98,114,111,119,110,0,0,47,115,118,103,47,114,101,100,0,0,0,0,
+0,0,0,0,47,115,118,103,47,112,117,114,112,108,101,0,0,0,0,0,47,115,118,103,47,112,111,119,100,101,114,98,108,117,101,0,47,98,117,103,110,55,47,55,0,0,0,0,0,0,0,0,47,115,118,103,47,112,108,117,109,0,0,0,0,0,0,0,47,115,118,103,47,112,105,110,107,0,0,0,0,0,0,0,47,97,99,99,101,110,116,54,47,51,0,0,0,0,0,0,47,115,118,103,47,112,101,114,117,0,0,0,0,0,0,0,47,115,118,103,47,112,101,97,99,104,112,117,102,102,0,0,115,101,116,108,105,110,101,119,105,100,116,104,40,0,0,0,47,115,118,103,47,112,97,112,97,121,97,
+119,104,105,112,0,47,115,118,103,47,112,97,108,101,118,105,111,108,101,116,114,101,100,0,0,0,0,0,0,34,32,115,116,114,111,107,101,45,100,97,115,104,97,114,114,97,121,61,34,37,115,0,0,47,115,104,111,119,112,97,103,101,32,123,32,125,32,100,101,102,0,0,0,0,0,0,0,105,97,99,117,116,101,0,0,111,98,108,105,113,117,101,0,114,0,0,0,0,0,0,0,47,115,118,103,47,112,97,108,101,116,117,114,113,117,111,105,115,101,0,0,0,0,0,0,47,115,118,103,47,112,97,108,101,103,114,101,101,110,0,0,112,111,105,110,116,0,0,0,115,116,
+97,114,116,32,112,111,114,116,58,32,40,37,46,53,103,44,32,37,46,53,103,41,44,32,116,97,110,103,101,110,116,32,97,110,103,108,101,58,32,37,46,53,103,44,32,37,115,10,0,0,0,0,0,0,108,101,110,0,0,0,0,0,37,37,37,37,66,111,117,110,100,105,110,103,66,111,120,58,32,37,100,32,37,100,32,37,100,32,37,100,0,0,0,0,47,115,118,103,47,112,97,108,101,103,111,108,100,101,110,114,111,100,0,0,0,0,0,0,108,112,0,0,0,0,0,0,92,78,0,0,0,0,0,0,105,110,112,117,116,0,0,0,47,115,118,103,47,111,114,99,104,105,100,0,0,0,0,0,47,
+98,117,103,110,55,47,54,0,0,0,0,0,0,0,0,112,97,99,107,0,0,0,0,47,115,118,103,47,111,114,97,110,103,101,114,101,100,0,0,78,111,32,111,114,32,105,109,112,114,111,112,101,114,32,105,109,97,103,101,32,102,105,108,101,61,34,37,115,34,10,0,47,115,118,103,47,111,114,97,110,103,101,0,0,0,0,0,83,85,66,0,0,0,0,0,47,115,118,103,47,111,108,105,118,101,100,114,97,98,0,0,118,111,114,111,95,109,97,114,103,105,110,0,0,0,0,0,95,98,108,111,99,107,95,37,100,0,0,0,0,0,0,0,47,115,118,103,47,111,108,105,118,101,0,0,0,
+0,0,0,108,104,101,97,100,0,0,0,35,56,48,56,48,56,48,0,47,115,118,103,47,111,108,100,108,97,99,101,0,0,0,0,47,115,118,103,47,110,97,118,121,0,0,0,0,0,0,0,34,32,115,116,114,111,107,101,45,119,105,100,116,104,61,34,37,103,0,0,0,0,0,0,47,101,110,100,112,97,103,101,32,123,32,115,104,111,119,112,97,103,101,32,125,32,98,105,110,100,32,100,101,102,0,0,104,101,108,108,105,112,0,0,111,118,101,114,108,97,112,0,99,97,100,101,116,98,108,117,101,0,0,0,0,0,0,0,47,115,118,103,47,110,97,118,97,106,111,119,104,105,
+116,101,0,0,0,0,0,0,0,0,112,105,99,58,112,105,99,0,47,115,118,103,47,109,111,99,99,97,115,105,110,0,0,0,47,115,118,103,47,109,105,115,116,121,114,111,115,101,0,0,47,115,118,103,47,109,105,110,116,99,114,101,97,109,0,0,47,98,117,103,110,55,47,53,0,0,0,0,0,0,0,0,115,116,114,105,99,116,32,0,110,111,100,101,32,112,111,115,105,116,105,111,110,115,32,97,114,101,32,105,103,110,111,114,101,100,32,117,110,108,101,115,115,32,115,116,97,114,116,61,114,97,110,100,111,109,10,0,47,115,118,103,47,109,105,100,110,
+105,103,104,116,98,108,117,101,0,0,0,0,0,0,0,47,115,118,103,47,109,101,100,105,117,109,118,105,111,108,101,116,114,101,100,0,0,0,0,115,111,117,114,99,101,0,0,47,115,118,103,47,109,101,100,105,117,109,116,117,114,113,117,111,105,115,101,0,0,0,0,47,115,118,103,47,109,101,100,105,117,109,115,112,114,105,110,103,103,114,101,101,110,0,0,112,120,0,0,0,0,0,0,47,115,118,103,47,109,101,100,105,117,109,115,108,97,116,101,98,108,117,101,0,0,0,0,115,101,116,104,115,98,0,0,47,115,118,103,47,109,101,100,105,117,
+109,115,101,97,103,114,101,101,110,0,0,0,0,0,34,32,115,116,114,111,107,101,61,34,0,0,0,0,0,0,9,115,101,116,109,97,116,114,105,120,0,0,0,0,0,0,104,101,97,114,116,115,0,0,47,115,118,103,47,109,101,100,105,117,109,112,117,114,112,108,101,0,0,0,0,0,0,0,37,115,32,105,115,32,110,111,116,32,97,32,107,110,111,119,110,32,99,111,108,111,114,46,10,0,0,0,0,0,0,0,47,115,118,103,47,109,101,100,105,117,109,111,114,99,104,105,100,0,0,0,0,0,0,0,118,0,0,0,0,0,0,0,47,115,118,103,47,109,101,100,105,117,109,98,108,117,
+101,0,60,97,114,101,97,32,115,104,97,112,101,61,34,114,101,99,116,34,0,0,0,0,0,0,47,115,118,103,47,109,101,100,105,117,109,97,113,117,97,109,97,114,105,110,101,0,0,0,47,98,117,103,110,55,47,52,0,0,0,0,0,0,0,0,47,115,118,103,47,109,97,114,111,111,110,0,0,0,0,0,47,115,118,103,47,109,97,103,101,110,116,97,0,0,0,0,47,115,118,103,47,108,105,110,101,110,0,0,0,0,0,0,47,115,118,103,47,108,105,109,101,103,114,101,101,110,0,0,47,115,118,103,47,108,105,109,101,0,0,0,0,0,0,0,47,115,118,103,47,108,105,103,104,
+116,121,101,108,108,111,119,0,0,0,0,0,0,0,0,110,111,110,101,0,0,0,0,9,48,32,48,32,49,32,48,32,51,54,48,32,97,114,99,0,0,0,0,0,0,0,0,104,97,114,114,0,0,0,0,47,115,118,103,47,108,105,103,104,116,115,116,101,101,108,98,108,117,101,0,0,0,0,0,47,115,118,103,47,108,105,103,104,116,115,108,97,116,101,103,114,101,121,0,0,0,0,0,47,115,118,103,47,108,105,103,104,116,115,108,97,116,101,103,114,97,121,0,0,0,0,0,47,115,118,103,47,108,105,103,104,116,115,107,121,98,108,117,101,0,0,0,0,0,0,0,47,98,117,103,110,55,
+47,51,0,0,0,0,0,0,0,0,114,101,102,101,114,101,110,99,101,32,116,111,32,98,105,110,97,114,121,32,101,110,116,105,116,121,0,0,0,0,0,0,47,115,118,103,47,108,105,103,104,116,115,101,97,103,114,101,101,110,0,0,0,0,0,0,47,115,118,103,47,108,105,103,104,116,115,97,108,109,111,110,0,0,0,0,0,0,0,0,47,115,118,103,47,108,105,103,104,116,112,105,110,107,0,0,47,115,118,103,47,108,105,103,104,116,103,114,101,121,0,0,47,115,118,103,47,108,105,103,104,116,103,114,101,101,110,0,47,98,117,103,110,55,47,50,0,0,0,0,
+0,0,0,0,47,115,118,103,47,108,105,103,104,116,103,114,97,121,0,0,10,0,0,0,0,0,0,0,34,32,102,105,108,108,45,111,112,97,99,105,116,121,61,34,37,102,0,0,0,0,0,0,9,114,120,32,114,121,32,115,99,97,108,101,0,0,0,0,104,65,114,114,0,0,0,0,47,115,118,103,47,108,105,103,104,116,103,111,108,100,101,110,114,111,100,121,101,108,108,111,119,0,0,0,0,0,0,0,112,97,99,107,109,111,100,101,0,0,0,0,0,0,0,0,47,115,118,103,47,108,105,103,104,116,99,121,97,110,0,0,47,115,118,103,47,108,105,103,104,116,99,111,114,97,108,
+0,47,115,118,103,47,108,105,103,104,116,98,108,117,101,0,0,108,0,0,0,0,0,0,0,101,112,115,58,112,115,0,0,47,115,118,103,47,108,101,109,111,110,99,104,105,102,102,111,110,0,0,0,0,0,0,0,47,115,118,103,47,108,97,119,110,103,114,101,101,110,0,0,47,115,118,103,47,108,97,118,101,110,100,101,114,98,108,117,115,104,0,0,0,0,0,0,47,115,118,103,47,108,97,118,101,110,100,101,114,0,0,0,47,115,118,103,47,107,104,97,107,105,0,0,0,0,0,0,47,115,118,103,47,105,118,111,114,121,0,0,0,0,0,0,117,114,108,40,35,114,95,37,
+100,41,0,0,0,0,0,0,9,120,32,121,32,116,114,97,110,115,108,97,116,101,0,0,103,116,0,0,0,0,0,0,47,115,118,103,47,105,110,100,105,103,111,0,0,0,0,0,47,115,118,103,47,105,110,100,105,97,110,114,101,100,0,0,47,115,118,103,47,104,111,116,112,105,110,107,0,0,0,0,47,115,118,103,47,104,111,110,101,121,100,101,119,0,0,0,47,98,117,103,110,55,47,49,0,0,0,0,0,0,0,0,47,115,118,103,47,103,114,101,121,0,0,0,0,0,0,0,47,115,118,103,47,103,114,101,101,110,121,101,108,108,111,119,0,0,0,0,0,0,0,0,47,115,118,103,47,103,
+114,101,101,110,0,0,0,0,0,0,47,115,118,103,47,103,114,97,121,0,0,0,0,0,0,0,47,115,118,103,47,103,111,108,100,101,110,114,111,100,0,0,47,115,118,103,47,103,111,108,100,0,0,0,0,0,0,0,9,110,101,119,112,97,116,104,0,0,0,0,0,0,0,0,117,114,108,40,35,108,95,37,100,41,0,0,0,0,0,0,103,101,0,0,0,0,0,0,47,115,118,103,47,103,104,111,115,116,119,104,105,116,101,0,47,115,118,103,47,103,97,105,110,115,98,111,114,111,0,0,47,115,118,103,47,102,117,99,104,115,105,97,0,0,0,0,110,111,114,109,97,108,0,0,47,115,118,103,
+47,102,111,114,101,115,116,103,114,101,101,110,0,0,0,0,0,0,0,0,47,98,117,103,110,54,47,54,0,0,0,0,0,0,0,0,47,115,118,103,47,102,108,111,114,97,108,119,104,105,116,101,0,0,0,0,0,0,0,0,47,115,118,103,47,102,105,114,101,98,114,105,99,107,0,0,47,115,118,103,47,100,111,100,103,101,114,98,108,117,101,0,47,115,118,103,47,100,105,109,103,114,101,121,0,0,0,0,47,115,118,103,47,100,105,109,103,114,97,121,0,0,0,0,47,115,118,103,47,100,101,101,112,115,107,121,98,108,117,101,0,0,0,0,0,0,0,0,37,115,37,115,32,105,
+115,32,110,111,116,32,97,32,116,114,111,102,102,32,102,111,110,116,10,0,0,0,0,0,0,0,9,109,97,116,114,105,120,32,99,117,114,114,101,110,116,109,97,116,114,105,120,0,0,0,32,102,105,108,108,61,34,0,103,97,109,109,97,0,0,0,103,118,114,101,110,100,101,114,95,99,111,114,101,95,102,105,103,46,99,0,0,0,0,0,47,115,118,103,47,100,101,101,112,112,105,110,107,0,0,0,47,115,118,103,47,100,97,114,107,118,105,111,108,101,116,0,47,115,118,103,47,100,97,114,107,116,117,114,113,117,111,105,115,101,0,0,0,0,0,0,47,115,
+118,103,47,100,97,114,107,115,108,97,116,101,103,114,101,121,0,0,0,0,0,0,47,98,117,103,110,54,47,53,0,0,0,0,0,0,0,0,47,115,118,103,47,100,97,114,107,115,108,97,116,101,103,114,97,121,0,0,0,0,0,0,47,115,118,103,47,100,97,114,107,115,108,97,116,101,98,108,117,101,0,0,0,0,0,0,47,115,118,103,47,100,97,114,107,115,101,97,103,114,101,101,110,0,0,0,0,0,0,0,47,115,118,103,47,100,97,114,107,115,97,108,109,111,110,0,47,115,118,103,47,100,97,114,107,114,101,100,0,0,0,0,115,97,109,101,104,101,97,100,0,0,0,0,
+0,0,0,0,47,115,118,103,47,100,97,114,107,111,114,99,104,105,100,0,9,47,120,32,101,120,99,104,32,100,101,102,0,0,0,0,34,47,62,10,0,0,0,0,102,114,97,115,108,0,0,0,120,108,97,98,101,108,115,46,99,0,0,0,0,0,0,0,47,115,118,103,47,100,97,114,107,111,114,97,110,103,101,0,47,115,118,103,47,100,97,114,107,111,108,105,118,101,103,114,101,101,110,0,0,0,0,0,47,115,118,103,47,100,97,114,107,109,97,103,101,110,116,97,0,0,0,0,0,0,0,0,47,115,118,103,47,100,97,114,107,107,104,97,107,105,0,0,47,98,117,103,110,54,47,
+52,0,0,0,0,0,0,0,0,103,114,97,121,0,0,0,0,47,115,118,103,47,100,97,114,107,103,114,101,121,0,0,0,47,115,118,103,47,100,97,114,107,103,114,101,101,110,0,0,47,115,118,103,47,100,97,114,107,103,114,97,121,0,0,0,47,115,118,103,47,100,97,114,107,103,111,108,100,101,110,114,111,100,0,0,0,0,0,0,47,115,118,103,47,100,97,114,107,99,121,97,110,0,0,0,34,34,0,0,0,0,0,0,47,115,118,103,47,100,97,114,107,98,108,117,101,0,0,0,9,47,121,32,101,120,99,104,32,100,101,102,0,0,0,0,37,103,44,37,103,32,0,0,102,114,97,99,
+51,52,0,0,47,115,118,103,47,99,121,97,110,0,0,0,0,0,0,0,110,115,108,105,109,105,116,49,0,0,0,0,0,0,0,0,47,115,118,103,47,99,114,105,109,115,111,110,0,0,0,0,47,115,118,103,47,99,111,114,110,115,105,108,107,0,0,0,47,115,118,103,47,99,111,114,110,102,108,111,119,101,114,98,108,117,101,0,0,0,0,0,47,98,117,103,110,54,47,51,0,0,0,0,0,0,0,0,47,115,118,103,47,99,111,114,97,108,0,0,0,0,0,0,47,115,118,103,47,99,104,111,99,111,108,97,116,101,0,0,47,115,118,103,47,99,104,97,114,116,114,101,117,115,101,0,47,97,
+99,99,101,110,116,54,47,50,0,0,0,0,0,0,47,115,118,103,47,99,97,100,101,116,98,108,117,101,0,0,35,37,48,50,120,37,48,50,120,37,48,50,120,37,48,50,120,0,0,0,0,0,0,0,99,97,110,110,111,116,32,114,101,97,108,108,111,99,32,116,114,105,115,0,0,0,0,0,47,115,118,103,47,98,117,114,108,121,119,111,111,100,0,0,47,115,118,103,47,98,114,111,119,110,0,0,0,0,0,0,116,97,105,108,112,111,114,116,0,0,0,0,0,0,0,0,9,47,114,120,32,101,120,99,104,32,100,101,102,0,0,0,32,112,111,105,110,116,115,61,34,0,0,0,0,0,0,0,102,114,
+97,99,49,52,0,0,65,118,97,110,116,71,97,114,100,101,45,66,111,111,107,79,98,108,105,113,117,101,0,0,110,101,119,46,103,118,0,0,47,115,118,103,47,98,108,117,101,118,105,111,108,101,116,0,47,115,118,103,47,98,108,117,101,0,0,0,0,0,0,0,99,105,114,99,108,101,0,0,100,101,114,105,118,101,100,0,37,100,32,40,37,46,53,103,44,32,37,46,53,103,41,44,32,40,37,46,53,103,44,32,37,46,53,103,41,10,0,0,99,111,117,108,100,110,39,116,32,111,112,101,110,32,101,112,115,102,32,102,105,108,101,32,37,115,10,0,0,0,0,0,37,
+46,51,102,32,0,0,0,47,115,118,103,47,98,108,97,110,99,104,101,100,97,108,109,111,110,100,0,0,0,0,0,120,108,112,0,0,0,0,0,92,71,0,0,0,0,0,0,47,115,118,103,47,98,108,97,99,107,0,0,0,0,0,0,47,98,117,103,110,54,47,50,0,0,0,0,0,0,0,0,115,121,110,116,97,120,32,101,114,114,111,114,0,0,0,0,37,100,0,0,0,0,0,0,47,115,118,103,47,98,105,115,113,117,101,0,0,0,0,0,102,105,120,101,100,32,99,101,108,108,32,115,105,122,101,32,119,105,116,104,32,117,110,115,112,101,99,105,102,105,101,100,32,119,105,100,116,104,32,
+111,114,32,104,101,105,103,104,116,10,0,0,0,0,0,0,0,115,112,101,99,105,102,105,101,100,32,114,111,111,116,32,110,111,100,101,32,34,37,115,34,32,119,97,115,32,110,111,116,32,102,111,117,110,100,46,0,47,115,118,103,47,98,101,105,103,101,0,0,0,0,0,0,83,85,80,0,0,0,0,0,47,115,118,103,47,97,122,117,114,101,0,0,0,0,0,0,111,118,101,114,108,97,112,32,91,37,100,93,32,58,32,37,100,10,0,0,0,0,0,0,47,115,118,103,47,97,113,117,97,109,97,114,105,110,101,0,99,108,97,115,115,50,46,99,0,0,0,0,0,0,0,0,99,111,108,111,
+114,115,99,104,101,109,101,0,0,0,0,0,47,115,118,103,47,97,113,117,97,0,0,0,0,0,0,0,47,115,118,103,47,97,110,116,105,113,117,101,119,104,105,116,101,0,0,0,0,0,0,0,9,47,114,121,32,101,120,99,104,32,100,101,102,0,0,0,60,112,111,108,121,108,105,110,101,0,0,0,0,0,0,0,102,114,97,99,49,50,0,0,98,117,114,108,121,119,111,111,100,0,0,0,0,0,0,0,47,115,118,103,47,97,108,105,99,101,98,108,117,101,0,0,98,101,115,116,99,111,115,116,32,60,32,72,85,71,69,95,86,65,76,0,0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,
+57,0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,56,0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,55,0,0,0,0,47,98,117,103,110,54,47,49,0,0,0,0,0,0,0,0,100,105,0,0,0,0,0,0,37,108,100,0,0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,54,0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,53,0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,52,0,0,0,0,109,105,110,0,0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,51,0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,50,0,0,0,0,105,110,0,0,0,0,0,0,101,100,103,101,
+0,0,0,0,47,115,112,101,99,116,114,97,108,57,47,49,0,0,0,0,47,101,108,108,105,112,115,101,95,112,97,116,104,32,123,0,32,45,45,62,10,0,0,0,102,111,114,97,108,108,0,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,97,97,103,95,103,101,116,95,110,101,120,116,95,98,117,102,102,101,114,40,41,0,0,47,115,112,101,99,116,114,97,108,56,47,56,0,0,0,0,99,111,108,111,114,32,37,115,0,0,0,0,0,0,0,0,47,115,112,101,99,116,114,97,108,56,47,55,0,0,0,0,109,99,108,105,109,
+105,116,0,47,115,112,101,99,116,114,97,108,56,47,54,0,0,0,0,60,97,114,101,97,32,115,104,97,112,101,61,34,99,105,114,99,108,101,34,0,0,0,0,47,115,112,101,99,116,114,97,108,56,47,53,0,0,0,0,47,98,117,103,110,53,47,53,0,0,0,0,0,0,0,0,47,115,112,101,99,116,114,97,108,56,47,52,0,0,0,0,47,115,112,101,99,116,114,97,108,56,47,51,0,0,0,0,47,115,112,101,99,116,114,97,108,56,47,50,0,0,0,0,47,115,112,101,99,116,114,97,108,56,47,49,0,0,0,0,47,115,112,101,99,116,114,97,108,55,47,55,0,0,0,0,47,115,112,101,99,116,
+114,97,108,55,47,54,0,0,0,0,9,9,99,108,111,115,101,112,97,116,104,0,0,0,0,0,60,33,45,45,32,0,0,0,102,110,111,102,0,0,0,0,47,115,112,101,99,116,114,97,108,55,47,53,0,0,0,0,47,115,112,101,99,116,114,97,108,55,47,52,0,0,0,0,47,115,112,101,99,116,114,97,108,55,47,51,0,0,0,0,47,115,112,101,99,116,114,97,108,55,47,50,0,0,0,0,47,98,117,103,110,53,47,52,0,0,0,0,0,0,0,0,114,101,102,101,114,101,110,99,101,32,116,111,32,105,110,118,97,108,105,100,32,99,104,97,114,97,99,116,101,114,32,110,117,109,98,101,114,
+0,0,0,47,115,112,101,99,116,114,97,108,55,47,49,0,0,0,0,47,115,112,101,99,116,114,97,108,54,47,54,0,0,0,0,47,115,112,101,99,116,114,97,108,54,47,53,0,0,0,0,47,115,112,101,99,116,114,97,108,54,47,52,0,0,0,0,47,115,112,101,99,116,114,97,108,54,47,51,0,0,0,0,47,115,112,101,99,116,114,97,108,54,47,50,0,0,0,0,9,9,112,111,112,32,110,101,103,32,48,32,114,108,105,110,101,116,111,0,0,0,0,0,121,101,108,108,111,119,103,114,101,101,110,0,0,0,0,0,101,120,105,115,116,0,0,0,47,115,112,101,99,116,114,97,108,54,47,
+49,0,0,0,0,47,115,112,101,99,116,114,97,108,53,47,53,0,0,0,0,47,115,112,101,99,116,114,97,108,53,47,52,0,0,0,0,47,115,112,101,99,116,114,97,108,53,47,51,0,0,0,0,47,98,117,103,110,53,47,51,0,0,0,0,0,0,0,0,106,112,103,58,118,114,109,108,0,0,0,0,0,0,0,0,47,115,112,101,99,116,114,97,108,53,47,50,0,0,0,0,47,115,112,101,99,116,114,97,108,53,47,49,0,0,0,0,47,115,112,101,99,116,114,97,108,52,47,52,0,0,0,0,47,115,112,101,99,116,114,97,108,52,47,51,0,0,0,0,47,115,112,101,99,116,114,97,108,52,47,50,0,0,0,0,
+47,115,112,101,99,116,114,97,108,52,47,49,0,0,0,0,9,9,48,32,101,120,99,104,32,114,108,105,110,101,116,111,0,0,0,0,0,0,0,0,121,101,108,108,111,119,0,0,101,117,114,111,0,0,0,0,47,115,112,101,99,116,114,97,108,51,47,51,0,0,0,0,114,0,0,0,0,0,0,0,47,115,112,101,99,116,114,97,108,51,47,50,0,0,0,0,47,115,112,101,99,116,114,97,108,51,47,49,0,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,57,0,0,0,47,98,117,103,110,53,47,50,0,0,0,0,0,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,56,0,0,0,47,115,112,101,
+99,116,114,97,108,49,49,47,55,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,54,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,53,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,52,0,0,0,38,108,116,59,0,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,51,0,0,0,119,104,105,116,101,115,109,111,107,101,0,0,0,0,0,0,102,105,103,58,102,105,103,0,101,117,109,108,0,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,50,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,49,49,0,0,9,9,101,120,99,104,32,48,32,114,
+108,105,110,101,116,111,0,0,0,0,0,0,0,0,47,98,117,103,110,53,47,49,0,0,0,0,0,0,0,0,47,115,112,101,99,116,114,97,108,49,49,47,49,48,0,0,47,115,112,101,99,116,114,97,108,49,49,47,49,0,0,0,47,115,112,101,99,116,114,97,108,49,48,47,57,0,0,0,47,115,112,101,99,116,114,97,108,49,48,47,56,0,0,0,47,115,112,101,99,116,114,97,108,49,48,47,55,0,0,0,47,115,112,101,99,116,114,97,108,49,48,47,54,0,0,0,47,115,112,101,99,116,114,97,108,49,48,47,53,0,0,0,47,115,112,101,99,116,114,97,108,49,48,47,52,0,0,0,9,9,50,32,
+99,111,112,121,0,0,0,0,0,0,0,0,37,48,51,111,0,0,0,0,119,104,105,116,101,0,0,0,101,116,104,0,0,0,0,0,47,115,112,101,99,116,114,97,108,49,48,47,51,0,0,0,110,32,62,61,32,52,0,0,47,115,112,101,99,116,114,97,108,49,48,47,50,0,0,0,47,115,112,101,99,116,114,97,108,49,48,47,49,48,0,0,47,115,112,101,99,116,114,97,108,49,48,47,49,0,0,0,47,98,117,103,110,52,47,52,0,0,0,0,0,0,0,0,47,115,101,116,51,57,47,57,0,0,0,0,0,0,0,0,47,115,101,116,51,57,47,56,0,0,0,0,0,0,0,0,47,115,101,116,51,57,47,55,0,0,0,0,0,0,0,0,47,
+115,101,116,51,57,47,54,0,0,0,0,0,0,0,0,47,115,101,116,51,57,47,53,0,0,0,0,0,0,0,0,47,115,101,116,51,57,47,52,0,0,0,0,0,0,0,0,9,9,109,111,118,101,116,111,0,0,0,0,0,0,0,0,119,104,101,97,116,0,0,0,101,116,97,0,0,0,0,0,71,0,0,0,0,0,0,0,47,115,101,116,51,57,47,51,0,0,0,0,0,0,0,0,110,111,100,101,108,105,115,116,46,99,0,0,0,0,0,0,47,115,101,116,51,57,47,50,0,0,0,0,0,0,0,0,47,115,101,116,51,57,47,49,0,0,0,0,0,0,0,0,47,115,101,116,51,56,47,56,0,0,0,0,0,0,0,0,47,98,117,103,110,52,47,51,0,0,0,0,0,0,0,0,102,
+117,99,104,115,105,97,0,47,115,101,116,51,56,47,55,0,0,0,0,0,0,0,0,47,115,101,116,51,56,47,54,0,0,0,0,0,0,0,0,47,115,101,116,51,56,47,53,0,0,0,0,0,0,0,0,47,115,101,116,51,56,47,52,0,0,0,0,0,0,0,0,47,115,101,116,51,56,47,51,0,0,0,0,0,0,0,0,32,45,116,97,103,115,32,123,37,100,37,115,37,100,125,0,47,115,101,116,51,56,47,50,0,0,0,0,0,0,0,0,9,9,52,32,50,32,114,111,108,108,0,0,0,0,0,0,118,105,111,108,101,116,0,0,101,113,117,105,118,0,0,0,47,115,101,116,51,56,47,49,0,0,0,0,0,0,0,0,47,115,101,116,51,55,47,
+55,0,0,0,0,0,0,0,0,47,115,101,116,51,55,47,54,0,0,0,0,0,0,0,0,47,115,101,116,51,55,47,53,0,0,0,0,0,0,0,0,47,98,117,103,110,52,47,50,0,0,0,0,0,0,0,0,47,115,101,116,51,55,47,52,0,0,0,0,0,0,0,0,47,115,101,116,51,55,47,51,0,0,0,0,0,0,0,0,47,115,101,116,51,55,47,50,0,0,0,0,0,0,0,0,47,115,101,116,51,55,47,49,0,0,0,0,0,0,0,0,47,97,99,99,101,110,116,54,47,49,0,0,0,0,0,0,35,37,48,50,120,37,48,50,120,37,48,50,120,0,0,0,99,97,110,110,111,116,32,109,97,108,108,111,99,32,116,114,105,115,0,0,0,0,0,0,47,115,101,
+116,51,54,47,54,0,0,0,0,0,0,0,0,47,115,101,116,51,54,47,53,0,0,0,0,0,0,0,0,98,108,97,99,107,0,0,0,47,98,111,120,112,114,105,109,32,123,9,9,9,9,37,32,120,99,111,114,110,101,114,32,121,99,111,114,110,101,114,32,120,115,105,122,101,32,121,115,105,122,101,0,0,0,0,0,116,117,114,113,117,111,105,115,101,0,0,0,0,0,0,0,101,112,115,105,108,111,110,0,116,107,58,116,107,0,0,0,115,112,108,105,116,46,113,46,99,0,0,0,0,0,0,0,115,97,110,115,45,83,101,114,105,102,0,0,0,0,0,0,47,115,101,116,51,54,47,52,0,0,0,0,0,0,
+0,0,110,111,110,97,109,101,46,103,118,0,0,0,0,0,0,0,47,115,101,116,51,54,47,51,0,0,0,0,0,0,0,0,111,118,97,108,0,0,0,0,100,101,114,105,118,101,32,103,114,97,112,104,32,37,115,32,111,102,32,37,115,10,0,0,37,100,32,98,111,120,101,115,58,10,0,0,0,0,0,0,85,84,70,45,56,32,105,110,112,117,116,32,117,115,101,115,32,110,111,110,45,76,97,116,105,110,49,32,99,104,97,114,97,99,116,101,114,115,32,119,104,105,99,104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,32,98,121,32,116,104,105,115,32,
+80,111,115,116,83,99,114,105,112,116,32,100,114,105,118,101,114,10,0,0,0,0,0,0,0,47,115,101,116,51,54,47,50,0,0,0,0,0,0,0,0,104,101,105,103,104,116,0,0,47,115,101,116,51,54,47,49,0,0,0,0,0,0,0,0,47,98,117,103,110,52,47,49,0,0,0,0,0,0,0,0,32,32,102,108,97,103,115,32,32,37,100,10,0,0,0,0,47,115,101,116,51,53,47,53,0,0,0,0,0,0,0,0,99,101,108,108,32,115,105,122,101,32,116,111,111,32,115,109,97,108,108,32,102,111,114,32,99,111,110,116,101,110,116,10,0,0,0,0,0,0,0,0,47,115,101,116,51,53,47,52,0,0,0,0,0,
+0,0,0,73,0,0,0,0,0,0,0,47,115,101,116,51,53,47,51,0,0,0,0,0,0,0,0,78,117,109,98,101,114,32,111,102,32,105,110,99,114,101,97,115,101,115,32,61,32,37,100,10,0,0,0,0,0,0,0,116,97,105,108,112,111,114,116,0,0,0,0,0,0,0,0,47,115,101,116,51,53,47,50,0,0,0,0,0,0,0,0,47,115,101,116,51,53,47,49,0,0,0,0,0,0,0,0,98,32,61,61,32,110,0,0,47,115,101,116,51,52,47,52,0,0,0,0,0,0,0,0,9,103,114,101,115,116,111,114,101,0,0,0,0,0,0,0,116,111,109,97,116,111,0,0,101,110,115,112,0,0,0,0,98,114,111,119,110,0,0,0,47,115,101,
+116,51,52,47,51,0,0,0,0,0,0,0,0,47,115,101,116,51,52,47,50,0,0,0,0,0,0,0,0,47,115,101,116,51,52,47,49,0,0,0,0,0,0,0,0,47,115,101,116,51,51,47,51,0,0,0,0,0,0,0,0,47,98,117,103,110,51,47,51,0,0,0,0,0,0,0,0,115,117,98,0,0,0,0,0,47,115,101,116,51,51,47,50,0,0,0,0,0,0,0,0,114,97,110,100,111,109,0,0,47,115,101,116,51,51,47,49,0,0,0,0,0,0,0,0,47,115,101,116,51,49,50,47,57,0,0,0,0,0,0,0,114,97,110,107,0,0,0,0,41,10,45,45,62,10,0,0,47,115,101,116,51,49,50,47,56,0,0,0,0,0,0,0,47,115,101,116,51,49,50,47,55,
+0,0,0,0,0,0,0,37,108,102,32,37,108,102,32,37,108,102,32,37,108,102,0,110,111,100,101,0,0,0,0,47,115,101,116,51,49,50,47,54,0,0,0,0,0,0,0,9,9,125,32,105,102,0,0,116,104,105,115,116,108,101,0,101,109,115,112,0,0,0,0,47,115,101,116,51,49,50,47,53,0,0,0,0,0,0,0,69,68,95,108,97,98,101,108,40,102,101,41,0,0,0,0,98,111,116,104,0,0,0,0,47,115,101,116,51,49,50,47,52,0,0,0,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,47,115,101,116,51,49,50,47,51,0,0,0,0,0,0,0,114,101,99,116,97,110,103,108,
+101,32,40,37,100,44,37,100,41,32,40,37,100,44,37,100,41,32,37,115,32,37,115,10,0,0,0,0,0,0,0,0,47,115,101,116,51,49,50,47,50,0,0,0,0,0,0,0,47,98,117,103,110,51,47,50,0,0,0,0,0,0,0,0,47,115,101,116,51,49,50,47,49,50,0,0,0,0,0,0,47,115,101,116,51,49,50,47,49,49,0,0,0,0,0,0,47,115,101,116,51,49,50,47,49,48,0,0,0,0,0,0,32,40,0,0,0,0,0,0,47,115,101,116,51,49,50,47,49,0,0,0,0,0,0,0,47,115,101,116,51,49,49,47,57,0,0,0,0,0,0,0,47,115,101,116,51,49,49,47,56,0,0,0,0,0,0,0,9,9,9,116,101,120,116,32,115,116,114,
+105,110,103,119,105,100,116,104,32,112,111,112,32,119,105,100,116,104,32,101,120,99,104,32,115,117,98,32,116,101,120,116,32,108,101,110,103,116,104,32,100,105,118,32,48,32,116,101,120,116,32,97,115,104,111,119,0,0,0,0,0,116,101,97,108,0,0,0,0,101,109,112,116,121,0,0,0,76,101,102,116,0,0,0,0,47,115,101,116,51,49,49,47,55,0,0,0,0,0,0,0,47,115,101,116,51,49,49,47,54,0,0,0,0,0,0,0,47,115,101,116,51,49,49,47,53,0,0,0,0,0,0,0,47,115,101,116,51,49,49,47,52,0,0,0,0,0,0,0,47,98,117,103,110,51,47,49,0,0,0,
+0,0,0,0,0,97,115,121,110,99,104,114,111,110,111,117,115,32,101,110,116,105,116,121,0,0,0,0,0,47,115,101,116,51,49,49,47,51,0,0,0,0,0,0,0,47,115,101,116,51,49,49,47,50,0,0,0,0,0,0,0,47,115,101,116,51,49,49,47,49,49,0,0,0,0,0,0,32,118,101,114,115,105,111,110,32,0,0,0,0,0,0,0,47,115,101,116,51,49,49,47,49,48,0,0,0,0,0,0,47,115,101,116,51,49,49,47,49,0,0,0,0,0,0,0,47,115,101,116,51,49,48,47,57,0,0,0,0,0,0,0,9,9,9,91,93,32,48,32,115,101,116,100,97,115,104,0,116,97,110,0,0,0,0,0,101,103,114,97,118,101,
+0,0,47,115,101,116,51,49,48,47,56,0,0,0,0,0,0,0,47,115,101,116,51,49,48,47,55,0,0,0,0,0,0,0,47,115,101,116,51,49,48,47,54,0,0,0,0,0,0,0,47,115,101,116,51,49,48,47,53,0,0,0,0,0,0,0,47,98,114,98,103,57,47,57,0,0,0,0,0,0,0,0,106,112,101,58,118,114,109,108,0,0,0,0,0,0,0,0,47,115,101,116,51,49,48,47,52,0,0,0,0,0,0,0,47,115,101,116,51,49,48,47,51,0,0,0,0,0,0,0,47,115,101,116,51,49,48,47,50,0,0,0,0,0,0,0,10,60,33,45,45,32,71,101,110,101,114,97,116,101,100,32,98,121,32,0,0,0,0,0,47,115,101,116,51,49,48,47,
+49,48,0,0,0,0,0,0,102,100,112,0,0,0,0,0,47,115,101,116,51,49,48,47,49,0,0,0,0,0,0,0,100,111,116,0,0,0,0,0,47,115,101,116,50,56,47,56,0,0,0,0,0,0,0,0,9,9,119,105,100,116,104,32,48,32,103,116,32,123,0,0,115,116,101,101,108,98,108,117,101,0,0,0,0,0,0,0,101,99,105,114,99,0,0,0,47,115,101,116,50,56,47,55,0,0,0,0,0,0,0,0,114,97,110,107,40,103,44,32,50,44,32,110,115,105,116,101,114,50,40,103,41,41,32,61,61,32,48,0,0,0,0,0,47,115,101,116,50,56,47,54,0,0,0,0,0,0,0,0,111,0,0,0,0,0,0,0,47,115,101,116,50,56,
+47,53,0,0,0,0,0,0,0,0,47,115,101,116,50,56,47,52,0,0,0,0,0,0,0,0,47,98,114,98,103,57,47,56,0,0,0,0,0,0,0,0,47,115,101,116,50,56,47,51,0,0,0,0,0,0,0,0,47,115,101,116,50,56,47,50,0,0,0,0,0,0,0,0,47,115,101,116,50,56,47,49,0,0,0,0,0,0,0,0,60,72,84,77,76,62,10,0,47,115,101,116,50,55,47,55,0,0,0,0,0,0,0,0,47,115,101,116,50,55,47,54,0,0,0,0,0,0,0,0,47,115,101,116,50,55,47,53,0,0,0,0,0,0,0,0,9,103,115,97,118,101,0,0,115,112,114,105,110,103,103,114,101,101,110,0,0,0,0,0,101,97,99,117,116,101,0,0,47,115,101,
+116,50,55,47,52,0,0,0,0,0,0,0,0,47,115,101,116,50,55,47,51,0,0,0,0,0,0,0,0,47,115,101,116,50,55,47,50,0,0,0,0,0,0,0,0,47,115,101,116,50,55,47,49,0,0,0,0,0,0,0,0,47,98,114,98,103,57,47,55,0,0,0,0,0,0,0,0,47,115,101,116,50,54,47,54,0,0,0,0,0,0,0,0,47,115,101,116,50,54,47,53,0,0,0,0,0,0,0,0,47,115,101,116,50,54,47,52,0,0,0,0,0,0,0,0,32,99,111,111,114,100,111,114,105,103,105,110,61,34,48,44,48,34,32,99,111,111,114,100,115,105,122,101,61,34,37,100,44,37,100,34,32,62,0,0,47,115,101,116,50,54,47,51,0,0,
+0,0,0,0,0,0,47,115,101,116,50,54,47,50,0,0,0,0,0,0,0,0,47,115,101,116,50,54,47,49,0,0,0,0,0,0,0,0,9,47,119,105,100,116,104,32,101,120,99,104,32,100,101,102,0,0,0,0,0,0,0,0,34,37,115,34,32,97,116,32,40,37,46,53,102,44,37,46,53,102,41,59,10,0,0,0,115,110,111,119,0,0,0,0,100,105,118,105,100,101,0,0,47,115,101,116,50,53,47,53,0,0,0,0,0,0,0,0,47,115,101,116,50,53,47,52,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,47,115,101,116,50,53,47,51,0,0,0,0,0,0,0,0,47,115,101,116,50,53,47,50,0,0,0,0,0,0,0,0,47,98,114,98,103,
+57,47,54,0,0,0,0,0,0,0,0,47,115,101,116,50,53,47,49,0,0,0,0,0,0,0,0,47,115,101,116,50,52,47,52,0,0,0,0,0,0,0,0,47,115,101,116,50,52,47,51,0,0,0,0,0,0,0,0,32,119,105,100,116,104,58,32,37,100,112,116,59,32,104,101,105,103,104,116,58,32,37,100,112,116,34,0,0,0,0,0,47,115,101,116,50,52,47,50,0,0,0,0,0,0,0,0,47,115,101,116,50,52,47,49,0,0,0,0,0,0,0,0,73,32,0,0,0,0,0,0,47,115,101,116,50,51,47,51,0,0,0,0,0,0,0,0,9,47,116,101,120,116,32,101,120,99,104,32,100,101,102,0,100,105,97,109,115,0,0,0,115,108,97,
+116,101,103,114,101,121,0,0,0,0,0,0,0,104,101,97,100,112,111,114,116,0,0,0,0,0,0,0,0,47,115,101,116,50,51,47,50,0,0,0,0,0,0,0,0,70,0,0,0,0,0,0,0,47,115,101,116,50,51,47,49,0,0,0,0,0,0,0,0,47,98,114,98,103,57,47,53,0,0,0,0,0,0,0,0,47,115,101,116,49,57,47,57,0,0,0,0,0,0,0,0,47,115,101,116,49,57,47,56,0,0,0,0,0,0,0,0,99,118,116,46,99,0,0,0,98,108,117,101,0,0,0,0,47,115,101,116,49,57,47,55,0,0,0,0,0,0,0,0,47,115,101,116,49,57,47,54,0,0,0,0,0,0,0,0,47,115,101,116,49,57,47,53,0,0,0,0,0,0,0,0,32,60,118,
+58,103,114,111,117,112,32,115,116,121,108,101,61],"i8",L,l.J+143400);D([34,112,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,32,0,0,0,0,47,115,101,116,49,57,47,52,0,0,0,0,0,0,0,0,47,115,101,116,49,57,47,51,0,0,0,0,0,0,0,0,103,118,114,101,110,100,101,114,95,99,111,114,101,95,116,107,46,99,0,0,0,0,0,0,47,115,101,116,49,57,47,50,0,0,0,0,0,0,0,0,47,97,108,105,103,110,101,100,116,101,120,116,32,123,9,9,9,37,32,119,105,100,116,104,32,116,101,120,116,0,0,0,100,101,108,116,97,0,0,0,115,
+108,97,116,101,103,114,97,121,0,0,0,0,0,0,0,117,115,0,0,0,0,0,0,47,115,101,116,49,57,47,49,0,0,0,0,0,0,0,0,47,115,101,116,49,56,47,56,0,0,0,0,0,0,0,0,47,115,101,116,49,56,47,55,0,0,0,0,0,0,0,0,47,115,101,116,49,56,47,54,0,0,0,0,0,0,0,0,47,98,114,98,103,57,47,52,0,0,0,0,0,0,0,0,47,115,101,116,49,56,47,53,0,0,0,0,0,0,0,0,47,115,101,116,49,56,47,52,0,0,0,0,0,0,0,0,47,115,101,116,49,56,47,51,0,0,0,0,0,0,0,0,60,120,109,108,58,110,97,109,101,115,112,97,99,101,32,110,115,61,34,117,114,110,58,115,99,104,
+101,109,97,115,45,109,105,99,114,111,115,111,102,116,45,99,111,109,58,118,109,108,34,32,112,114,101,102,105,120,61,34,118,34,32,47,62,10,0,0,0,0,0,0,0,0,47,115,101,116,49,56,47,50,0,0,0,0,0,0,0,0,47,115,101,116,49,56,47,49,0,0,0,0,0,0,0,0,99,32,0,0,0,0,0,0,47,97,99,99,101,110,116,53,47,53,0,0,0,0,0,0,114,111,117,116,101,46,99,0,47,115,101,116,49,55,47,55,0,0,0,0,0,0,0,0,84,105,109,101,115,45,82,111,109,97,110,0,0,0,0,0,37,32,100,114,97,119,32,116,101,120,116,32,102,105,116,116,101,100,32,116,111,
+32,105,116,115,32,101,120,112,101,99,116,101,100,32,119,105,100,116,104,0,0,0,0,0,0,0,0,100,101,103,0,0,0,0,0,115,108,97,116,101,98,108,117,101,0,0,0,0,0,0,0,98,111,111,107,0,0,0,0,47,115,101,116,49,55,47,54,0,0,0,0,0,0,0,0,46,37,100,0,0,0,0,0,70,65,76,83,69,0,0,0,47,115,101,116,49,55,47,53,0,0,0,0,0,0,0,0,101,108,108,105,112,115,101,0,105,110,32,99,104,101,99,107,112,97,116,104,44,32,101,110,100,32,112,111,114,116,32,110,111,116,32,105,110,32,108,97,115,116,32,98,111,120,10,0,65,103,114,97,112,104,
+105,110,102,111,95,116,0,0,0,0,125,32,98,105,110,100,32,100,101,102,10,0,0,0,0,0,47,115,101,116,49,55,47,52,0,0,0,0,0,0,0,0,119,105,100,116,104,0,0,0,77,97,120,46,32,105,116,101,114,97,116,105,111,110,115,32,40,37,100,41,32,114,101,97,99,104,101,100,32,111,110,32,103,114,97,112,104,32,37,115,10,0,0,0,0,0,0,0,116,101,120,116,115,112,97,110,46,99,0,0,0,0,0,0,38,35,51,57,59,0,0,0,102,97,116,97,108,32,101,114,114,111,114,32,45,32,115,99,97,110,110,101,114,32,105,110,112,117,116,32,98,117,102,102,101,
+114,32,111,118,101,114,102,108,111,119,0,0,0,0,0,47,115,101,116,49,55,47,51,0,0,0,0,0,0,0,0,47,98,114,98,103,57,47,51,0,0,0,0,0,0,0,0,32,32,115,105,122,101,32,32,32,37,100,10,0,0,0,0,10,102,105,110,97,108,32,101,32,61,32,37,102,32,37,100,32,105,116,101,114,97,116,105,111,110,115,32,37,46,50,102,32,115,101,99,10,0,0,0,47,115,101,116,49,55,47,50,0,0,0,0,0,0,0,0,115,112,108,105,110,101,115,46,99,0,0,0,0,0,0,0,102,105,120,101,100,32,116,97,98,108,101,32,115,105,122,101,32,119,105,116,104,32,117,110,115,
+112,101,99,105,102,105,101,100,32,119,105,100,116,104,32,111,114,32,104,101,105,103,104,116,10,0,0,0,0,0,0,47,115,101,116,49,55,47,49,0,0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,47,115,101,116,49,54,47,54,0,0,0,0,0,0,0,0,78,117,109,98,101,114,32,111,102,32,105,116,101,114,97,116,105,111,110,115,32,61,32,37,100,10,0,0,0,0,0,0,60,47,83,84,89,76,69,62,10,0,0,0,0,0,0,0,47,115,101,116,49,54,47,53,0,0,0,0,0,0,0,0,99,108,117,115,116,101,114,32,110,97,109,101,100,32,37,115,32,110,111,116,32,102,111,117,110,100,10,0,
+0,0,0,0,99,111,109,109,101,110,116,0,47,115,101,116,49,54,47,52,0,0,0,0,0,0,0,0,112,111,108,121,108,105,110,101,32,37,115,32,37,115,10,0,47,115,101,116,49,54,47,51,0,0,0,0,0,0,0,0,9,115,99,97,108,101,102,111,110,116,32,115,101,116,102,111,110,116,0,0,0,0,0,0,100,97,114,114,0,0,0,0,115,107,121,98,108,117,101,0,47,115,101,116,49,54,47,50,0,0,0,0,0,0,0,0,85,110,115,117,112,112,111,114,116,101,100,32,99,104,97,114,115,101,116,32,34,37,115,34,32,45,32,97,115,115,117,109,105,110,103,32,117,116,102,45,56,
+10,0,0,0,0,0,0,98,108,117,101,118,105,111,108,101,116,0,0,0,0,0,0,95,100,103,95,37,100,0,0,47,115,101,116,49,54,47,49,0,0,0,0,0,0,0,0,47,115,101,116,49,53,47,53,0,0,0,0,0,0,0,0,105,110,100,101,120,46,99,0,47,115,101,116,49,53,47,52,0,0,0,0,0,0,0,0,47,98,114,98,103,57,47,50,0,0,0,0,0,0,0,0,47,115,101,116,49,53,47,51,0,0,0,0,0,0,0,0,114,101,103,117,108,97,114,0,47,115,101,116,49,53,47,50,0,0,0,0,0,0,0,0,115,105,100,101,115,32,61,61,32,52,0,0,0,0,0,0,47,115,101,116,49,53,47,49,0,0,0,0,0,0,0,0,118,92,
+58,42,32,123,32,98,101,104,97,118,105,111,114,58,32,117,114,108,40,35,100,101,102,97,117,108,116,35,86,77,76,41,59,100,105,115,112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,125,10,0,0,0,0,0,0,0,47,115,101,116,49,52,47,52,0,0,0,0,0,0,0,0,110,111,100,101,115,32,116,111,117,99,104,32,45,32,102,97,108,108,105,110,103,32,98,97,99,107,32,116,111,32,115,116,114,97,105,103,104,116,32,108,105,110,101,32,101,100,103,101,115,10,0,0,0,0,0,0,47,115,101,116,49,52,47,51,0,0,0,0,0,0,0,0,114,111,
+117,116,101,115,112,108,105,110,101,115,58,32,37,100,32,101,100,103,101,115,44,32,37,100,32,98,111,120,101,115,32,37,46,50,102,32,115,101,99,10,0,0,0,0,0,0,118,105,101,119,66,111,120,0,103,114,97,112,104,0,0,0,47,115,101,116,49,52,47,50,0,0,0,0,0,0,0,0,9,102,105,110,100,102,111,110,116,32,101,120,99,104,0,0,100,97,103,103,101,114,0,0,115,105,108,118,101,114,0,0,116,101,120,116,108,97,121,111,117,116,0,0,0,0,0,0,116,114,105,97,110,103,117,108,97,116,105,111,110,32,102,97,105,108,101,100,0,0,0,0,115,
+104,97,112,101,102,105,108,101,32,110,111,116,32,115,101,116,32,111,114,32,110,111,116,32,102,111,117,110,100,32,102,111,114,32,101,112,115,102,32,110,111,100,101,32,37,115,10,0,0,0,0,0,0,0,0,47,115,101,116,49,52,47,49,0,0,0,0,0,0,0,0,117,116,102,56,0,0,0,0,104,101,105,103,104,116,0,0,47,115,101,116,49,51,47,51,0,0,0,0,0,0,0,0,47,112,97,116,104,98,111,120,32,123,10,32,32,32,32,47,89,32,101,120,99,104,32,37,46,53,103,32,115,117,98,32,100,101,102,10,32,32,32,32,47,88,32,101,120,99,104,32,37,46,53,103,
+32,115,117,98,32,100,101,102,10,32,32,32,32,47,121,32,101,120,99,104,32,37,46,53,103,32,115,117,98,32,100,101,102,10,32,32,32,32,47,120,32,101,120,99,104,32,37,46,53,103,32,115,117,98,32,100,101,102,10,32,32,32,32,110,101,119,112,97,116,104,32,120,32,121,32,109,111,118,101,116,111,10,32,32,32,32,88,32,121,32,108,105,110,101,116,111,10,32,32,32,32,88,32,89,32,108,105,110,101,116,111,10,32,32,32,32,120,32,89,32,108,105,110,101,116,111,10,32,32,32,32,99,108,111,115,101,112,97,116,104,32,115,116,114,
+111,107,101,10,32,125,32,100,101,102,10,47,100,98,103,115,116,97,114,116,32,123,32,103,115,97,118,101,32,37,46,53,103,32,37,46,53,103,32,116,114,97,110,115,108,97,116,101,32,125,32,100,101,102,10,47,97,114,114,111,119,108,101,110,103,116,104,32,49,48,32,100,101,102,10,47,97,114,114,111,119,119,105,100,116,104,32,97,114,114,111,119,108,101,110,103,116,104,32,50,32,100,105,118,32,100,101,102,10,47,97,114,114,111,119,104,101,97,100,32,123,10,32,32,32,32,103,115,97,118,101,10,32,32,32,32,114,111,116,
+97,116,101,10,32,32,32,32,99,117,114,114,101,110,116,112,111,105,110,116,10,32,32,32,32,110,101,119,112,97,116,104,10,32,32,32,32,109,111,118,101,116,111,10,32,32,32,32,97,114,114,111,119,108,101,110,103,116,104,32,97,114,114,111,119,119,105,100,116,104,32,50,32,100,105,118,32,114,108,105,110,101,116,111,10,32,32,32,32,48,32,97,114,114,111,119,119,105,100,116,104,32,110,101,103,32,114,108,105,110,101,116,111,10,32,32,32,32,99,108,111,115,101,112,97,116,104,32,102,105,108,108,10,32,32,32,32,103,114,
+101,115,116,111,114,101,10,125,32,98,105,110,100,32,100,101,102,10,47,109,97,107,101,97,114,114,111,119,32,123,10,32,32,32,32,99,117,114,114,101,110,116,112,111,105,110,116,32,101,120,99,104,32,112,111,112,32,115,117,98,32,101,120,99,104,32,99,117,114,114,101,110,116,112,111,105,110,116,32,112,111,112,32,115,117,98,32,97,116,97,110,10,32,32,32,32,97,114,114,111,119,104,101,97,100,10,125,32,98,105,110,100,32,100,101,102,10,47,112,111,105,110,116,32,123,32,32,32,32,110,101,119,112,97,116,104,32,32,
+32,32,50,32,48,32,51,54,48,32,97,114,99,32,102,105,108,108,125,32,100,101,102,47,109,97,107,101,118,101,99,32,123,10,32,32,32,32,47,89,32,101,120,99,104,32,100,101,102,10,32,32,32,32,47,88,32,101,120,99,104,32,100,101,102,10,32,32,32,32,47,121,32,101,120,99,104,32,100,101,102,10,32,32,32,32,47,120,32,101,120,99,104,32,100,101,102,10,32,32,32,32,110,101,119,112,97,116,104,32,120,32,121,32,109,111,118,101,116,111,10,32,32,32,32,88,32,89,32,108,105,110,101,116,111,32,115,116,114,111,107,101,10,32,32,
+32,32,88,32,89,32,109,111,118,101,116,111,10,32,32,32,32,120,32,121,32,109,97,107,101,97,114,114,111,119,10,125,32,100,101,102,10,0,0,0,0,0,0,47,98,114,98,103,57,47,49,0,0,0,0,0,0,0,0,95,110,101,119,95,114,97,110,107,0,0,0,0,0,0,0,47,115,101,116,49,51,47,50,0,0,0,0,0,0,0,0,103,118,114,101,110,100,101,114,95,99,111,114,101,95,109,97,112,46,99,0,0,0,0,0,47,115,101,116,49,51,47,49,0,0,0,0,0,0,0,0,47,114,101,100,115,57,47,57,0,0,0,0,0,0,0,0,47,114,101,100,115,57,47,56,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,
+47,114,101,100,115,57,47,55,0,0,0,0,0,0,0,0,37,115,32,37,100,32,110,111,100,101,115,32,37,100,32,101,100,103,101,115,32,109,97,120,105,116,101,114,61,37,100,32,98,97,108,97,110,99,101,61,37,100,10,0,0,0,0,0,60,83,84,89,76,69,62,10,0,0,0,0,0,0,0,0,47,114,101,100,115,57,47,54,0,0,0,0,0,0,0,0,47,114,101,100,115,57,47,53,0,0,0,0,0,0,0,0,47,114,101,100,115,57,47,52,0,0,0,0,0,0,0,0,47,115,101,116,95,102,111,110,116,32,123,0,0,0,0,0,100,65,114,114,0,0,0,0,115,105,101,110,110,97,0,0,114,101,99,116,97,110,
+103,108,101,46,99,0,0,0,0,0,47,114,101,100,115,57,47,51,0,0,0,0,0,0,0,0,98,105,103,53,0,0,0,0,47,114,101,100,115,57,47,50,0,0,0,0,0,0,0,0,105,110,32,108,97,98,101,108,32,111,102,32,110,111,100,101,32,37,115,10,0,0,0,0,47,114,101,100,115,57,47,49,0,0,0,0,0,0,0,0,47,114,101,100,115,56,47,56,0,0,0,0,0,0,0,0,47,98,114,98,103,56,47,56,0,0,0,0,0,0,0,0,114,101,99,117,114,115,105,118,101,32,101,110,116,105,116,121,32,114,101,102,101,114,101,110,99,101,0,0,0,0,0,0,47,114,101,100,115,56,47,55,0,0,0,0,0,0,0,
+0,69,114,114,111,114,0,0,0,47,114,101,100,115,56,47,54,0,0,0,0,0,0,0,0,47,114,101,100,115,56,47,53,0,0,0,0,0,0,0,0,108,101,110,0,0,0,0,0,32,119,105,100,116,104,58,32,37,100,112,116,59,32,104,101,105,103,104,116,58,32,37,100,112,116,34,62,10,0,0,0,47,114,101,100,115,56,47,52,0,0,0,0,0,0,0,0,47,114,101,100,115,56,47,51,0,0,0,0,0,0,0,0,47,114,101,100,115,56,47,50,0,0,0,0,0,0,0,0,9,125,32,105,102,0,0,0,99,117,114,114,101,110,0,0,115,101,97,115,104,101,108,108,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,
+111,116,32,111,112,101,110,32,34,37,115,34,32,102,111,114,32,119,114,105,116,105,110,103,32,58,32,37,115,10,0,0,0,47,114,101,100,115,56,47,49,0,0,0,0,0,0,0,0,98,105,103,45,53,0,0,0,37,100,0,0,0,0,0,0,47,114,101,100,115,55,47,55,0,0,0,0,0,0,0,0,47,114,101,100,115,55,47,54,0,0,0,0,0,0,0,0,47,114,101,100,115,55,47,53,0,0,0,0,0,0,0,0,47,98,114,98,103,56,47,55,0,0,0,0,0,0,0,0,106,112,101,103,58,118,114,109,108,0,0,0,0,0,0,0,47,114,101,100,115,55,47,52,0,0,0,0,0,0,0,0,47,114,101,100,115,55,47,51,0,0,0,
+0,0,0,0,0,47,114,101,100,115,55,47,50,0,0,0,0,0,0,0,0,60,68,73,86,32,105,100,61,39,95,86,77,76,49,95,39,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,32,100,105,115,112,108,97,121,58,105,110,108,105,110,101,59,32,118,105,115,105,98,105,108,105,116,121,58,104,105,100,100,101,110,0,0,0,0,47,114,101,100,115,55,47,49,0,0,0,0,0,0,0,0,47,114,101,100,115,54,47,54,0,0,0,0,0,0,0,0,47,114,101,100,115,54,47,53,0,0,0,0,0,0,0,0,112,115,0,0,0,0,0,0,99,117,112,
+0,0,0,0,0,115,101,97,103,114,101,101,110,0,0,0,0,0,0,0,0,47,114,101,100,115,54,47,52,0,0,0,0,0,0,0,0,73,83,79,45,73,82,45,49,48,48,0,0,0,0,0,0,37,115,32,58,32,37,102,32,37,102,10,0,0,0,0,0,100,111,116,32,100,111,101,115,32,110,111,116,32,115,117,112,112,111,114,116,32,116,104,101,32,97,115,112,101,99,116,32,97,116,116,114,105,98,117,116,101,32,102,111,114,32,100,105,115,99,111,110,110,101,99,116,101,100,32,103,114,97,112,104,115,32,111,114,32,103,114,97,112,104,115,32,119,105,116,104,32,99,108,117,
+115,116,101,114,115,10,0,0,0,0,0,0,47,114,101,100,115,54,47,51,0,0,0,0,0,0,0,0,9,9,103,114,101,115,116,111,114,101,0,0,0,0,0,0,67,97,108,99,117,108,97,116,105,110,103,32,115,117,98,115,101,116,32,109,111,100,101,108,0,0,0,0,0,0,0,0,47,114,101,100,115,54,47,50,0,0,0,0,0,0,0,0,105,110,115,101,116,0,0,0,102,97,108,115,101,0,0,0,99,117,114,118,101,0,0,0,83,121,110,116,97,120,32,101,114,114,111,114,58,32,110,111,110,45,115,112,97,99,101,32,115,116,114,105,110,103,32,117,115,101,100,32,97,102,116,101,114,
+32,60,47,84,65,66,76,69,62,0,0,0,0,0,0,47,114,101,100,115,54,47,49,0,0,0,0,0,0,0,0,47,98,114,98,103,56,47,54,0,0,0,0,0,0,0,0,116,119,111,112,105,58,32,117,115,101,32,111,102,32,119,101,105,103,104,116,61,48,32,99,114,101,97,116,101,115,32,100,105,115,99,111,110,110,101,99,116,101,100,32,99,111,109,112,111,110,101,110,116,46,10,0,47,114,101,100,115,53,47,53,0,0,0,0,0,0,0,0,47,114,101,100,115,53,47,52,0,0,0,0,0,0,0,0,47,114,101,100,115,53,47,51,0,0,0,0,0,0,0,0,60,66,79,68,89,32,111,110,108,111,97,100,
+61,39,98,114,111,119,115,101,114,99,104,101,99,107,40,41,59,39,62,10,0,0,0,0,0,0,0,0,47,114,101,100,115,53,47,50,0,0,0,0,0,0,0,0,47,114,101,100,115,53,47,49,0,0,0,0,0,0,0,0,47,114,101,100,115,52,47,52,0,0,0,0,0,0,0,0,32,37,100,32,0,0,0,0,99,114,97,114,114,0,0,0,115,97,110,100,121,98,114,111,119,110,0,0,0,0,0,0,47,114,101,100,115,52,47,51,0,0,0,0,0,0,0,0,73,83,79,56,56,53,57,45,49,0,0,0,0,0,0,0,47,114,101,100,115,52,47,50,0,0,0,0,0,0,0,0,9,9,9,40,92,40,41,32,115,104,111,119,32,105,32,115,116,114,32,
+99,118,115,32,115,104,111,119,32,40,44,41,32,115,104,111,119,32,106,32,115,116,114,32,99,118,115,32,115,104,111,119,32,40,92,41,41,32,115,104,111,119,0,0,0,47,114,101,100,115,52,47,49,0,0,0,0,0,0,0,0,60,72,84,77,76,62,0,0,47,114,101,100,115,51,47,51,0,0,0,0,0,0,0,0,47,98,114,98,103,56,47,53,0,0,0,0,0,0,0,0,47,114,101,100,115,51,47,50,0,0,0,0,0,0,0,0,47,114,101,100,115,51,47,49,0,0,0,0,0,0,0,0,47,114,100,121,108,103,110,57,47,57,0,0,0,0,0,0,60,47,72,69,65,68,62,0,47,114,100,121,108,103,110,57,47,56,
+0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,47,114,100,121,108,103,110,57,47,55,0,0,0,0,0,0,47,114,100,121,108,103,110,57,47,54,0,0,0,0,0,0,9,9,9,48,32,48,32,109,111,118,101,116,111,0,0,0,99,111,112,121,0,0,0,0,46,112,115,32,37,100,42,92,110,40,83,70,117,47,37,46,48,102,117,10,0,0,0,0,115,97,108,109,111,110,0,0,75,0,0,0,0,0,0,0,47,114,100,121,108,103,110,57,47,53,0,0,0,0,0,0,73,83,79,95,56,56,53,57,45,49,0,0,0,0,0,0,47,114,100,121,108,103,110,57,47,52,0,0,0,0,0,0,47,114,100,121,
+108,103,110,57,47,51,0,0,0,0,0,0,32,37,100,32,37,100,0,0,47,114,100,121,108,103,110,57,47,50,0,0,0,0,0,0,47,98,114,98,103,56,47,52,0,0,0,0,0,0,0,0,47,114,100,121,108,103,110,57,47,49,0,0,0,0,0,0,47,114,100,121,108,103,110,56,47,56,0,0,0,0,0,0,47,114,100,121,108,103,110,56,47,55,0,0,0,0,0,0,32,32,32,60,47,83,67,82,73,80,84,62,10,0,0,0,47,114,100,121,108,103,110,56,47,54,0,0,0,0,0,0,97,115,112,101,99,116,0,0,47,114,100,121,108,103,110,56,47,53,0,0,0,0,0,0,47,114,100,121,108,103,110,56,47,52,0,0,0,0,
+0,0,9,9,9,99,111,111,114,100,102,111,110,116,32,115,101,116,102,111,110,116,0,0,0,0,99,111,110,103,0,0,0,0,115,97,100,100,108,101,98,114,111,119,110,0,0,0,0,0,112,111,108,121,103,111,110,0,47,114,100,121,108,103,110,56,47,51,0,0,0,0,0,0,108,49,0,0,0,0,0,0,47,114,100,121,108,103,110,56,47,50,0,0,0,0,0,0,75,80,95,83,117,98,116,114,97,99,116,0,0,0,0,0,47,114,100,121,108,103,110,56,47,49,0,0,0,0,0,0,47,114,100,121,108,103,110,55,47,55,0,0,0,0,0,0,47,98,114,98,103,56,47,51,0,0,0,0,0,0,0,0,67,111,117,108,
+100,32,110,111,116,32,112,97,114,115,101,32,34,95,98,97,99,107,103,114,111,117,110,100,34,32,97,116,116,114,105,98,117,116,101,32,105,110,32,103,114,97,112,104,32,37,115,10,0,0,0,0,47,114,100,121,108,103,110,55,47,54,0,0,0,0,0,0,98,108,97,99,107,0,0,0,47,114,100,121,108,103,110,55,47,53,0,0,0,0,0,0,47,114,100,121,108,103,110,55,47,52,0,0,0,0,0,0,32,32,32,125,10,0,0,0,47,114,100,121,108,103,110,55,47,51,0,0,0,0,0,0,47,114,100,121,108,103,110,55,47,50,0,0,0,0,0,0,48,0,0,0,0,0,0,0,47,114,100,121,108,
+103,110,55,47,49,0,0,0,0,0,0,9,9,103,115,97,118,101,0,99,108,117,98,115,0,0,0,114,111,121,97,108,98,108,117,101,0,0,0,0,0,0,0,50,46,50,56,46,48,0,0,47,114,100,121,108,103,110,54,47,54,0,0,0,0,0,0,108,97,116,105,110,49,0,0,47,114,100,121,108,103,110,54,47,53,0,0,0,0,0,0,47,114,100,121,108,103,110,54,47,52,0,0,0,0,0,0,47,114,100,121,108,103,110,54,47,51,0,0,0,0,0,0,47,98,114,98,103,56,47,50,0,0,0,0,0,0,0,0,65,103,101,100,103,101,105,110,102,111,95,116,0,0,0,0,47,114,100,121,108,103,110,54,47,50,0,0,
+0,0,0,0,47,114,100,121,108,103,110,54,47,49,0,0,0,0,0,0,47,114,100,121,108,103,110,53,47,53,0,0,0,0,0,0,32,32,32,32,32,125,10,0,47,114,100,121,108,103,110,53,47,52,0,0,0,0,0,0,99,97,110,110,111,116,32,114,101,97,108,108,111,99,32,112,110,108,112,115,0,0,0,0,47,114,100,121,108,103,110,53,47,51,0,0,0,0,0,0,47,98,114,98,103,56,47,49,0,0,0,0,0,0,0,0,47,114,100,121,108,103,110,53,47,50,0,0,0,0,0,0,47,97,99,99,101,110,116,53,47,52,0,0,0,0,0,0,101,108,108,105,112,115,101,0,9,110,112,97,103,101,115,32,49,
+32,103,116,32,123,0,0,99,105,114,99,0,0,0,0,114,111,115,121,98,114,111,119,110,0,0,0,0,0,0,0,85,82,87,32,71,111,116,104,105,99,32,76,0,0,0,0,47,114,100,121,108,103,110,53,47,49,0,0,0,0,0,0,108,97,116,105,110,45,49,0,48,0,0,0,0,0,0,0,100,101,103,108,105,115,116,46,99,0,0,0,0,0,0,0,112,97,103,101,37,100,44,37,100,95,0,0,0,0,0,0,114,101,98,117,105,108,116,100,95,118,108,105,115,116,115,58,32,114,97,110,107,32,108,101,97,100,32,37,115,32,110,111,116,32,105,110,32,111,114,100,101,114,32,37,100,32,111,
+102,32,114,97,110,107,32,37,100,10,0,0,0,0,0,0,0,108,101,118,101,108,32,62,61,32,48,32,38,38,32,108,101,118,101,108,32,60,61,32,110,45,62,108,101,118,101,108,0,47,114,100,121,108,103,110,52,47,52,0,0,0,0,0,0,112,111,108,121,103,111,110,0,99,111,111,114,100,115,0,0,105,110,32,99,104,101,99,107,112,97,116,104,44,32,115,116,97,114,116,32,112,111,114,116,32,110,111,116,32,105,110,32,102,105,114,115,116,32,98,111,120,10,0,0,0,0,0,0,37,37,69,110,100,68,111,99,117,109,101,110,116,10,0,0,47,114,100,121,108,
+103,110,52,47,51,0,0,0,0,0,0,114,101,99,116,115,0,0,0,38,113,117,111,116,59,0,0,102,97,116,97,108,32,102,108,101,120,32,115,99,97,110,110,101,114,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,45,45,101,110,100,32,111,102,32,98,117,102,102,101,114,32,109,105,115,115,101,100,0,47,114,100,121,108,103,110,52,47,50,0,0,0,0,0,0,37,108,102,37,108,102,37,108,102,0,0,0,0,0,0,0,32,32,97,115,112,101,99,116,32,37,102,10,0,0,0,0,47,114,100,121,108,103,110,52,47,49,0,0,0,0,0,0,115,112,108,105,110,101,
+32,37,115,32,37,115,10,0,0,0,116,114,121,105,110,103,32,116,111,32,97,100,100,32,116,111,32,114,101,99,116,32,123,37,102,32,43,47,45,32,37,102,44,32,37,102,32,43,47,45,32,37,102,125,10,0,0,0,116,97,98,108,101,32,115,105,122,101,32,116,111,111,32,115,109,97,108,108,32,102,111,114,32,99,111,110,116,101,110,116,10,0,0,0,0,0,0,0,47,114,100,121,108,103,110,51,47,51,0,0,0,0,0,0,66,0,0,0,0,0,0,0,47,114,100,121,108,103,110,51,47,50,0,0,0,0,0,0,37,102,44,37,102,0,0,0,111,110,101,98,108,111,99,107,0,0,0,0,
+0,0,0,0,47,114,100,121,108,103,110,51,47,49,0,0,0,0,0,0,32,32,32,32,32,125,101,108,115,101,123,10,0,0,0,0,40,37,46,53,103,44,37,46,53,103,41,0,0,0,0,0,98,108,97,99,107,0,0,0,47,114,100,121,108,103,110,49,49,47,57,0,0,0,0,0,47,114,100,121,108,103,110,49,49,47,56,0,0,0,0,0,108,105,110,101,32,115,101,103,109,101,110,116,115,0,0,0,9,47,115,116,114,32,49,48,32,115,116,114,105,110,103,32,100,101,102,0,0,0,0,0,99,104,105,0,0,0,0,0,114,101,100,0,0,0,0,0,47,114,100,121,108,103,110,49,49,47,55,0,0,0,0,0,117,
+116,102,45,56,0,0,0,98,108,117,101,0,0,0,0,116,114,121,105,110,103,32,116,111,32,100,101,108,101,116,101,32,97,32,110,111,110,45,108,105,110,101,10,0,0,0,0,73,108,108,101,103,97,108,32,108,101,110,103,116,104,32,118,97,108,117,101,32,105,110,32,34,37,115,34,32,99,111,108,111,114,32,97,116,116,114,105,98,117,116,101,32,0,0,0,47,114,100,121,108,103,110,49,49,47,54,0,0,0,0,0,105,32,61,61,32,100,101,103,0,0,0,0,0,0,0,0,47,98,114,98,103,55,47,55,0,0,0,0,0,0,0,0,47,114,100,121,108,103,110,49,49,47,53,0,
+0,0,0,0,47,114,100,121,108,103,110,49,49,47,52,0,0,0,0,0,47,114,100,121,108,103,110,49,49,47,51,0,0,0,0,0,95,37,108,100,95,83,85,83,80,69,67,84,0,0,0,0,115,101,108,102,0,0,0,0,47,114,100,121,108,103,110,49,49,47,50,0,0,0,0,0,47,114,100,121,108,103,110,49,49,47,49,49,0,0,0,0,114,97,110,107,105,110,103,58,32,102,97,105,108,117,114,101,32,116,111,32,99,114,101,97,116,101,32,115,116,114,111,110,103,32,99,111,110,115,116,114,97,105,110,116,32,101,100,103,101,32,98,101,116,119,101,101,110,32,110,111,100,
+101,115,32,37,115,32,97,110,100,32,37,115,10,0,0,0,0,0,0,47,114,100,121,108,103,110,49,49,47,49,48,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,105,116,101,109,46,115,116,121,108,101,46,118,105,115,105,98,105,108,105,116,121,61,39,104,105,100,100,101,110,39,59,10,0,0,0,0,0,115,118,103,58,115,118,103,0,47,114,100,121,108,103,110,49,49,47,49,0,0,0,0,0,104,101,105,103,104,116,0,0,37,115,10,0,0,0,0,0,47,114,100,121,108,103,110,49,48,47,57,0,0,0,0,0,9,47,105,32,101,120,99,104,32,100,101,102,0,0,0,0,99,101,
+110,116,0,0,0,0,112,117,114,112,108,101,0,0,47,114,100,121,108,103,110,49,48,47,56,0,0,0,0,0,99,104,97,114,115,101,116,0,84,111,116,97,108,32,115,105,122,101,32,62,32,49,32,105,110,32,34,37,115,34,32,99,111,108,111,114,32,115,112,101,99,32,0,0,0,0,0,0,119,105,100,116,104,0,0,0,47,114,100,121,108,103,110,49,48,47,55,0,0,0,0,0,47,114,100,121,108,103,110,49,48,47,54,0,0,0,0,0,111,114,100,101,114,105,110,103,32,39,37,115,39,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,32,102,111,114,32,110,
+111,100,101,32,39,37,115,39,46,10,0,0,0,0,48,0,0,0,0,0,0,0,47,114,100,121,108,103,110,49,48,47,53,0,0,0,0,0,47,98,114,98,103,55,47,54,0,0,0,0,0,0,0,0,47,114,100,121,108,103,110,49,48,47,52,0,0,0,0,0,47,114,100,121,108,103,110,49,48,47,51,0,0,0,0,0,47,114,100,121,108,103,110,49,48,47,50,0,0,0,0,0,47,114,100,121,108,103,110,49,48,47,49,48,0,0,0,0,32,32,32,32,32,32,32,32,32,105,116,101,109,32,61,32,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,86,77,76,110,
+111,91,120,93,41,59,10,0,0,0,0,0,47,114,100,121,108,103,110,49,48,47,49,0,0,0,0,0,47,114,100,121,108,98,117,57,47,57,0,0,0,0,0,0,9,47,106,32,101,120,99,104,32,100,101,102,0,0,0,0,99,101,100,105,108,0,0,0,112,111,119,100,101,114,98,108,117,101,0,0,0,0,0,0,47,114,100,121,108,98,117,57,47,56,0,0,0,0,0,0,102,105,108,108,0,0,0,0,102,111,110,116,99,111,108,111,114,0,0,0,0,0,0,0,47,114,100,121,108,98,117,57,47,55,0,0,0,0,0,0,47,114,100,121,108,98,117,57,47,54,0,0,0,0,0,0,47,114,100,121,108,98,117,57,47,
+53,0,0,0,0,0,0,47,98,114,98,103,55,47,53,0,0,0,0,0,0,0,0,117,110,100,101,102,105,110,101,100,32,101,110,116,105,116,121,0,0,0,0,0,0,0,0,47,114,100,121,108,98,117,57,47,52,0,0,0,0,0,0,47,114,100,121,108,98,117,57,47,51,0,0,0,0,0,0,47,114,100,121,108,98,117,57,47,50,0,0,0,0,0,0,47,114,100,121,108,98,117,57,47,49,0,0,0,0,0,0,32,32,32,32,32,32,32,102,111,114,32,40,120,32,105,110,32,86,77,76,110,111,41,123,10,0,0,0,0,0,0,0,47,114,100,121,108,98,117,56,47,56,0,0,0,0,0,0,47,114,100,121,108,98,117,56,47,
+55,0,0,0,0,0,0,9,47,110,112,97,103,101,115,32,101,120,99,104,32,100,101,102,0,0,0,0,0,0,0,99,99,101,100,105,108,0,0,112,108,117,109,0,0,0,0,47,114,100,121,108,98,117,56,47,54,0,0,0,0,0,0,101,120,112,97,110,100,0,0,108,97,121,101,114,115,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,105,110,32,37,115,32,111,117,116,112,117,116,10,0,0,0,0,0,0,47,114,100,121,108,98,117,56,47,53,0,0,0,0,0,0,115,97,109,101,116,97,105,108,0,0,0,0,0,0,0,0,47,114,100,121,108,98,117,56,47,52,0,0,0,0,0,0,47,114,
+100,121,108,98,117,56,47,51,0,0,0,0,0,0,47,98,114,98,103,55,47,52,0,0,0,0,0,0,0,0,103,105,102,58,118,114,109,108,0,0,0,0,0,0,0,0,47,114,100,121,108,98,117,56,47,50,0,0,0,0,0,0,47,114,100,121,108,98,117,56,47,49,0,0,0,0,0,0,47,114,100,121,108,98,117,55,47,55,0,0,0,0,0,0,47,114,100,121,108,98,117,55,47,54,0,0,0,0,0,0,32,32,32,32,32,32,32,125,10,0,0,0,0,0,0,0,47,114,100,121,108,98,117,55,47,53,0,0,0,0,0,0,47,114,100,121,108,98,117,55,47,52,0,0,0,0,0,0,47,98,101,103,105,110,112,97,103,101,32,123,9,37,
+32,105,32,106,32,110,112,97,103,101,115,0,0,0,0,0,0,0,99,97,112,0,0,0,0,0,112,105,110,107,0,0,0,0,47,114,100,121,108,98,117,55,47,51,0,0,0,0,0,0,99,111,109,112,114,101,115,115,0,0,0,0,0,0,0,0,105,110,102,111,0,0,0,0,73,109,97,103,101,115,32,117,110,115,117,112,112,111,114,116,101,100,32,105,110,32,34,98,97,99,107,103,114,111,117,110,100,34,32,97,116,116,114,105,98,117,116,101,10,0,0,0,47,114,100,121,108,98,117,55,47,50,0,0,0,0,0,0,47,114,100,121,108,98,117,55,47,49,0,0,0,0,0,0,47,114,100,121,108,
+98,117,54,47,54,0,0,0,0,0,0,109,112,116,121,0,0,0,0,47,98,114,98,103,55,47,51,0,0,0,0,0,0,0,0,47,114,100,121,108,98,117,54,47,53,0,0,0,0,0,0,47,114,100,121,108,98,117,54,47,52,0,0,0,0,0,0,125,10,0,0,0,0,0,0,47,114,100,121,108,98,117,54,47,51,0,0,0,0,0,0,37,108,102,44,37,108,102,44,37,108,102,37,99,0,0,0,47,114,100,121,108,98,117,54,47,50,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,125,10,0,0,0,0,0,47,114,100,121,108,98,117,54,47,49,0,0,0,0,0,0,47,114,100,121,108,98,117,53,47,53,0,0,0,0,0,0,47,110,111,
+112,99,111,108,111,114,32,123,112,111,112,32,112,111,112,32,112,111,112,125,32,98,105,110,100,32,100,101,102,0,0,0,0,0,0,0,0,98,117,108,108,0,0,0,0,112,101,114,117,0,0,0,0,47,114,100,121,108,98,117,53,47,52,0,0,0,0,0,0,97,117,116,111,0,0,0,0,103,114,97,100,105,101,110,116,32,112,101,110,32,99,111,108,111,114,115,32,110,111,116,32,121,101,116,32,115,117,112,112,111,114,116,101,100,46,10,0,108,116,97,105,108,0,0,0,47,114,100,121,108,98,117,53,47,51,0,0,0,0,0,0,47,98,114,98,103,55,47,50,0,0,0,0,0,0,
+0,0,47,114,100,121,108,98,117,53,47,50,0,0,0,0,0,0,47,114,100,121,108,98,117,53,47,49,0,0,0,0,0,0,47,114,100,121,108,98,117,52,47,52,0,0,0,0,0,0,47,114,100,121,108,98,117,52,47,51,0,0,0,0,0,0,47,114,100,121,108,98,117,52,47,50,0,0,0,0,0,0,47,114,100,121,108,98,117,52,47,49,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,105,116,101,109,46,115,116,121,108,101,46,118,105,115,105,98,105,108,105,116,121,61,39,118,105,115,105,98,108,101,39,59,10,0,0,0,0,47,114,100,121,108,98,117,51,47,51,0,0,0,0,0,0,47,114,
+100,121,108,98,117,51,47,50,0,0,0,0,0,0,47,103,114,97,112,104,99,111,108,111,114,32,123,32,115,101,116,104,115,98,99,111,108,111,114,32,125,32,98,105,110,100,32,100,101,102,0,0,0,0,98,114,118,98,97,114,0,0,46,102,116,32,37,115,10,0,112,101,97,99,104,112,117,102,102,0,0,0,0,0,0,0,47,114,100,121,108,98,117,51,47,49,0,0,0,0,0,0,114,97,116,105,111,0,0,0,119,104,105,116,101,0,0,0,47,114,100,121,108,98,117,49,49,47,57,0,0,0,0,0,47,114,100,121,108,98,117,49,49,47,56,0,0,0,0,0,47,114,100,121,108,98,117,49,
+49,47,55,0,0,0,0,0,47,98,114,98,103,55,47,49,0,0,0,0,0,0,0,0,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,46,49,102,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,32,37,100,10,0,0,0,0,0,0,47,114,100,121,108,98,117,49,49,47,54,0,0,0,0,0,47,114,100,121,108,98,117,49,49,47,53,0,0,0,0,0,47,114,100,121,108,98,117,49,49,47,52,0,0,0,0,0,47,114,100,121,108,98,117,49,49,47,51,0,0,0,0,0,32,32,32,32,32,32,32,32,32,105,102,32,40,105,116,101,109,41,32,123,10,
+0,0,0,110,101,119,114,97,110,107,0,47,114,100,121,108,98,117,49,49,47,50,0,0,0,0,0,47,114,100,121,108,98,117,49,49,47,49,49,0,0,0,0,47,101,100,103,101,99,111,108,111,114,32,123,32,115,101,116,104,115,98,99,111,108,111,114,32,125,32,98,105,110,100,32,100,101,102,0,0,0,0,0,98,101,116,97,0,0,0,0,112,97,112,97,121,97,119,104,105,112,0,0,0,0,0,0,47,114,100,121,108,98,117,49,49,47,49,48,0,0,0,0,37,108,102,37,99,0,0,0,108,97,121,101,114,0,0,0,47,114,100,121,108,98,117,49,49,47,49,0,0,0,0,0,97,117,120,103,
+0,0,0,0,47,114,100,121,108,98,117,49,48,47,57,0,0,0,0,0,109,105,110,117,115,0,0,0,47,114,100,121,108,98,117,49,48,47,56,0,0,0,0,0,47,98,114,98,103,54,47,54,0,0,0,0,0,0,0,0,47,114,100,121,108,98,117,49,48,47,55,0,0,0,0,0,97,113,117,97,0,0,0,0,47,114,100,121,108,98,117,49,48,47,54,0,0,0,0,0,47,114,100,121,108,98,117,49,48,47,53,0,0,0,0,0,47,114,100,121,108,98,117,49,48,47,52,0,0,0,0,0,32,32,32,32,32,32,32,32,32,105,116,101,109,32,61,32,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,
+110,116,66,121,73,100,40,86,77,76,121,101,115,91,120,93,41,59,10,0,0,0,0,47,114,100,121,108,98,117,49,48,47,51,0,0,0,0,0,103,114,97,112,104,32,108,97,98,101,108,0,0,0,0,0,47,114,100,121,108,98,117,49,48,47,50,0,0,0,0,0,47,110,111,100,101,99,111,108,111,114,32,123,32,115,101,116,104,115,98,99,111,108,111,114,32,125,32,98,105,110,100,32,100,101,102,0,0,0,0,0,98,100,113,117,111,0,0,0,112,97,108,101,118,105,111,108,101,116,114,101,100,0,0,0,47,114,100,121,108,98,117,49,48,47,49,48,0,0,0,0,37,108,102,
+44,37,108,102,37,99,0,0,0,0,0,0,0,114,111,117,110,100,101,100,0,47,114,100,121,108,98,117,49,48,47,49,0,0,0,0,0,47,114,100,112,117,57,47,57,0,0,0,0,0,0,0,0,47,114,100,112,117,57,47,56,0,0,0,0,0,0,0,0,47,98,114,98,103,54,47,53,0,0,0,0,0,0,0,0,112,111,115,105,116,105,111,110,46,99,0,0,0,0,0,0,47,114,100,112,117,57,47,55,0,0,0,0,0,0,0,0,91,94,91,58,100,105,103,105,116,58,93,93,0,0,0,0,65,103,110,111,100,101,105,110,102,111,95,116,0,0,0,0,47,114,100,112,117,57,47,54,0,0,0,0,0,0,0,0,47,114,100,112,117,
+57,47,53,0,0,0,0,0,0,0,0,47,114,100,112,117,57,47,52,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,102,111,114,32,40,120,32,105,110,32,86,77,76,121,101,115,41,123,10,0,0,0,0,0,0,120,100,111,116,49,46,52,58,120,100,111,116,0,0,0,0,103,118,117,115,101,114,115,104,97,112,101,46,99,0,0,0,99,97,110,110,111,116,32,114,101,97,108,108,111,99,32,112,110,108,115,0,0,0,0,0,47,114,100,112,117,57,47,51,0,0,0,0,0,0,0,0,47,114,100,112,117,57,47,50,0,0,0,0,0,0,0,0,37,32,104,111,111,107,115,32,102,111,114,32,115,101,116,116,
+105,110,103,32,99,111,108,111,114,32,0,0,0,0,0,0,47,114,100,112,117,57,47,49,0,0,0,0,0,0,0,0,97,117,109,108,0,0,0,0,112,97,108,101,116,117,114,113,117,111,105,115,101,0,0,0,119,105,100,116,104,0,0,0,65,118,97,110,116,71,97,114,100,101,45,66,111,111,107,0,47,97,99,99,101,110,116,53,47,51,0,0,0,0,0,0,108,97,98,101,108,106,117,115,116,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,116,111,116,97,108,32,97,100,100,101,100,32,115,111,32,102,97,114,32,61,32,37,100,10,0,0,0,0,0,0,0,0,95,98,108,111,99,107,95,37,100,0,0,
+0,0,0,0,0,115,116,114,105,112,101,100,0,114,32,38,38,32,110,32,38,38,32,110,101,119,0,0,0,47,114,100,112,117,56,47,56,0,0,0,0,0,0,0,0,98,111,120,0,0,0,0,0,103,114,105,100,40,37,100,44,37,100,41,58,32,37,115,10,0,0,0,0,0,0,0,0,105,110,32,99,104,101,99,107,112,97,116,104,44,32,98,111,120,101,115,32,37,100,32,97,110,100,32,37,100,32,100,111,110,39,116,32,116,111,117,99,104,10,0,0,0,0,0,0,37,37,66,101,103,105,110,68,111,99,117,109,101,110,116,58,10,0,0,0,0,0,0,0,112,115,58,112,115,0,0,0,32,91,37,100,
+93,32,37,112,32,115,101,116,32,37,100,32,40,37,46,48,50,102,44,37,46,48,50,102,41,32,40,37,46,48,50,102,44,37,46,48,50,102,41,32,37,115,10,0,47,114,100,112,117,56,47,55,0,0,0,0,0,0,0,0,112,111,115,0,0,0,0,0,33,0,0,0,0,0,0,0,38,35,49,54,48,59,0,0,111,117,116,32,111,102,32,100,121,110,97,109,105,99,32,109,101,109,111,114,121,32,105,110,32,97,97,103,101,110,115,117,114,101,95,98,117,102,102,101,114,95,115,116,97,99,107,40,41,0,0,0,0,0,0,0,47,114,100,112,117,56,47,54,0,0,0,0,0,0,0,0,47,98,114,98,103,
+54,47,52,0,0,0,0,0,0,0,0,32,32,109,111,100,101,32,32,32,37,115,10,0,0,0,0,37,46,51,102,32,0,0,0,47,114,100,112,117,56,47,53,0,0,0,0,0,0,0,0,100,101,108,121,32,62,61,32,48,0,0,0,0,0,0,0,47,114,100,112,117,56,47,52,0,0,0,0,0,0,0,0,70,79,78,84,0,0,0,0,47,114,100,112,117,56,47,51,0,0,0,0,0,0,0,0,69,100,103,101,32,115,101,112,97,114,97,116,105,111,110,58,32,97,100,100,61,37,100,32,40,37,102,44,37,102,41,10,0,0,0,0,0,0,0,0,47,114,100,112,117,56,47,50,0,0,0,0,0,0,0,0,32,32,32,32,32,32,105,102,32,40,105,
+101,118,101,114,115,62,61,53,41,123,10,0,0,48,0,0,0,0,0,0,0,102,97,116,97,108,32,102,108,101,120,32,115,99,97,110,110,101,114,32,105,110,116,101,114,110,97,108,32,101,114,114,111,114,45,45,110,111,32,97,99,116,105,111,110,32,102,111,117,110,100,0,0,0,0,0,0,37,108,100,0,0,0,0,0,47,114,100,112,117,56,47,49,0,0,0,0,0,0,0,0,47,114,100,112,117,55,47,55,0,0,0,0,0,0,0,0,112,111,108,121,108,105,110,101,115],"i8",L,l.J+153640);D([47,116,97,112,101,114,101,100,32,123,32,125,32,98,105,110,100,32,100,101,102,
+0,0,0,97,116,105,108,100,101,0,0,112,97,108,101,103,114,101,101,110,0,0,0,0,0,0,0,10,105,110,116,101,114,115,101,99,116,105,111,110,32,97,116,32,37,46,51,102,32,37,46,51,102,10,0,0,0,0,0,47,114,100,112,117,55,47,54,0,0,0,0,0,0,0,0,108,97,98,101,108,108,111,99,0,0,0,0,0,0,0,0,98,108,97,110,99,104,101,100,97,108,109,111,110,100,0,0,114,97,100,105,97,108,0,0,47,114,100,112,117,55,47,53,0,0,0,0,0,0,0,0,47,114,100,112,117,55,47,52,0,0,0,0,0,0,0,0,108,97,121,111,117,116,46,99,0,0,0,0,0,0,0,0,47,114,100,
+112,117,55,47,51,0,0,0,0,0,0,0,0,47,98,114,98,103,54,47,51,0,0,0,0,0,0,0,0,47,114,100,112,117,55,47,50,0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,115,116,97,114,116,0,0,0,47,114,100,112,117,55,47,49,0,0,0,0,0,0,0,0,47,114,100,112,117,54,47,54,0,0,0,0,0,0,0,0,95,119,101,97,107,95,37,100,0,0,0,0,0,0,0,0,47,114,100,112,117,54,47,53,0,0,0,0,0,0,0,0,32,32,32,32,32,32,125,10,0,0,0,0,0,0,0,0,47,114,100,112,117,54,47,52,0,0,0,0,0,0,0,0,112,116,0,0,0,0,0,0,105,110,118,105,115,0,0,0,47,114,100,112,117,54,47,51,0,0,0,
+0,0,0,0,0,47,100,105,97,103,111,110,97,108,115,32,123,32,125,32,98,105,110,100,32,100,101,102,0,97,115,121,109,112,0,0,0,112,97,108,101,103,111,108,100,101,110,114,111,100,0,0,0,92,78,0,0,0,0,0,0,47,114,100,112,117,54,47,50,0,0,0,0,0,0,0,0,98,108,97,99,107,0,0,0,115,116,121,108,101,0,0,0,103,118,114,101,110,100,101,114,95,115,101,116,95,115,116,121,108,101,58,32,117,110,115,117,112,112,111,114,116,101,100,32,115,116,121,108,101,32,37,115,32,45,32,105,103,110,111,114,105,110,103,10,0,0,0,0,47,114,
+100,112,117,54,47,49,0,0,0,0,0,0,0,0,47,114,100,112,117,53,47,53,0,0,0,0,0,0,0,0,111,114,100,101,114,105,110,103,32,39,37,115,39,32,110,111,116,32,114,101,99,111,103,110,105,122,101,100,46,10,0,0,115,111,108,105,100,0,0,0,10,0,0,0,0,0,0,0,47,114,100,112,117,53,47,52,0,0,0,0,0,0,0,0,47,98,114,98,103,54,47,50,0,0,0,0,0,0,0,0,47,114,100,112,117,53,47,51,0,0,0,0,0,0,0,0,47,114,100,112,117,53,47,50,0,0,0,0,0,0,0,0,47,114,100,112,117,53,47,49,0,0,0,0,0,0,0,0,47,114,100,112,117,52,47,52,0,0,0,0,0,0,0,0,
+32,32,32,32,32,32,32,32,32,105,101,118,101,114,115,61,32,112,97,114,115,101,73,110,116,32,40,117,97,46,115,117,98,115,116,114,105,110,103,32,40,109,115,105,101,43,53,44,32,117,97,46,105,110,100,101,120,79,102,32,40,39,46,39,44,32,109,115,105,101,32,41,41,41,10,0,0,0,0,0,47,114,100,112,117,52,47,51,0,0,0,0,0,0,0,0,47,114,100,112,117,52,47,50,0,0,0,0,0,0,0,0,47,114,111,117,110,100,101,100,32,123,32,125,32,98,105,110,100,32,100,101,102,0,0,0,97,114,105,110,103,0,0,0,111,114,99,104,105,100,0,0,110,111,
+100,101,46,99,0,0,47,114,100,112,117,52,47,49,0,0,0,0,0,0,0,0,84,105,109,101,115,45,82,111,109,97,110,0,0,0,0,0,102,105,108,108,101,100,0,0,47,114,100,112,117,51,47,51,0,0,0,0,0,0,0,0,47,114,100,112,117,51,47,50,0,0,0,0,0,0,0,0,47,114,100,112,117,51,47,49,0,0,0,0,0,0,0,0,47,98,114,98,103,54,47,49,0,0,0,0,0,0,0,0,105,108,108,101,103,97,108,32,112,97,114,97,109,101,116,101,114,32,101,110,116,105,116,121,32,114,101,102,101,114,101,110,99,101,0,0,0,0,0,0,47,114,100,103,121,57,47,57,0,0,0,0,0,0,0,0,47,
+114,100,103,121,57,47,56,0,0,0,0,0,0,0,0,47,114,100,103,121,57,47,55,0,0,0,0,0,0,0,0,47,114,100,103,121,57,47,54,0,0,0,0,0,0,0,0,32,32,32,32,32,32,105,102,32,40,32,109,115,105,101,32,62,32,48,32,41,123,32,32,32,32,32,32,47,47,32,73,102,32,73,110,116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,44,32,114,101,116,117,114,110,32,118,101,114,115,105,111,110,32,110,117,109,98,101,114,10,0,0,0,0,0,47,114,100,103,121,57,47,53,0,0,0,0,0,0,0,0,47,114,100,103,121,57,47,52,0,0,0,0,0,0,0,0,47,117,110,
+102,105,108,108,101,100,32,123,32,125,32,98,105,110,100,32,100,101,102,0,0,97,110,103,0,0,0,0,0,111,114,97,110,103,101,114,101,100,0,0,0,0,0,0,0,47,114,100,103,121,57,47,51,0,0,0,0,0,0,0,0,85,110,115,117,112,112,111,114,116,101,100,32,99,104,97,114,115,101,116,32,118,97,108,117,101,32,37,100,10,0,0,0,115,97,109,112,108,101,112,111,105,110,116,115,0,0,0,0,47,114,100,103,121,57,47,50,0,0,0,0,0,0,0,0,47,114,100,103,121,57,47,49,0,0,0,0,0,0,0,0,47,114,100,103,121,56,47,56,0,0,0,0,0,0,0,0,47,98,114,98,
+103,53,47,53,0,0,0,0,0,0,0,0,47,114,100,103,121,56,47,55,0,0,0,0,0,0,0,0,112,110,103,58,118,114,109,108,0,0,0,0,0,0,0,0,47,114,100,103,121,56,47,54,0,0,0,0,0,0,0,0,47,114,100,103,121,56,47,53,0,0,0,0,0,0,0,0,47,114,100,103,121,56,47,52,0,0,0,0,0,0,0,0,32,32,32,32,32,32,118,97,114,32,86,77,76,110,111,61,110,101,119,32,65,114,114,97,121,40,39,95,110,111,116,86,77,76,49,95,39,44,39,95,110,111,116,86,77,76,50,95,39,41,59,10,0,0,0,0,47,114,100,103,121,56,47,51,0,0,0,0,0,0,0,0,47,114,100,103,121,56,47,
+50,0,0,0,0,0,0,0,0,47,102,105,108,108,101,100,32,123,32,125,32,98,105,110,100,32,100,101,102,0,0,0,0,97,110,100,0,0,0,0,0,111,114,97,110,103,101,0,0,47,114,100,103,121,56,47,49,0,0,0,0,0,0,0,0,66,73,71,45,53,0,0,0,104,101,97,100,116,111,111,108,116,105,112,0,0,0,0,0,47,114,100,103,121,55,47,55,0,0,0,0,0,0,0,0,47,114,100,103,121,55,47,54,0,0,0,0,0,0,0,0,47,114,100,103,121,55,47,53,0,0,0,0,0,0,0,0,47,98,114,98,103,53,47,52,0,0,0,0,0,0,0,0,47,114,100,103,121,55,47,52,0,0,0,0,0,0,0,0,112,101,110,0,0,
+0,0,0,47,114,100,103,121,55,47,51,0,0,0,0,0,0,0,0,47,114,100,103,121,55,47,50,0,0,0,0,0,0,0,0,47,114,100,103,121,55,47,49,0,0,0,0,0,0,0,0,32,32,32,32,32,32,118,97,114,32,86,77,76,121,101,115,61,110,101,119,32,65,114,114,97,121,40,39,95,86,77,76,49,95,39,44,39,95,86,77,76,50,95,39,41,59,10,0,47,114,100,103,121,54,47,54,0,0,0,0,0,0,0,0,47,114,100,103,121,54,47,53,0,0,0,0,0,0,0,0,47,98,111,108,100,32,123,32,50,32,115,101,116,108,105,110,101,119,105,100,116,104,32,125,32,98,105,110,100,32,100,101,102,
+0,0,0,0,0,0,0,97,109,112,0,0,0,0,0,111,108,105,118,101,100,114,97,98,0,0,0,0,0,0,0,47,114,100,103,121,54,47,52,0,0,0,0,0,0,0,0,73,83,79,45,56,56,53,57,45,49,0,0,0,0,0,0,116,97,105,108,116,111,111,108,116,105,112,0,0,0,0,0,47,114,100,103,121,54,47,51,0,0,0,0,0,0,0,0,47,114,100,103,121,54,47,50,0,0,0,0,0,0,0,0,47,114,100,103,121,54,47,49,0,0,0,0,0,0,0,0,47,98,114,98,103,53,47,51,0,0,0,0,0,0,0,0,47,114,100,103,121,53,47,53,0,0,0,0,0,0,0,0,47,114,100,103,121,53,47,52,0,0,0,0,0,0,0,0,47,114,100,103,121,
+53,47,51,0,0,0,0,0,0,0,0,47,114,100,103,121,53,47,50,0,0,0,0,0,0,0,0,32,32,32,32,32,32,118,97,114,32,105,116,101,109,59,10,0,0,0,0,0,0,0,0,47,114,100,103,121,53,47,49,0,0,0,0,0,0,0,0,47,114,100,103,121,52,47,52,0,0,0,0,0,0,0,0,47,105,110,118,105,115,32,123,47,102,105,108,108,32,123,110,101,119,112,97,116,104,125,32,100,101,102,32,47,115,116,114,111,107,101,32,123,110,101,119,112,97,116,104,125,32,100,101,102,32,47,115,104,111,119,32,123,112,111,112,32,110,101,119,112,97,116,104,125,32,100,101,102,
+125,32,98,105,110,100,32,100,101,102,0,0,0,0,0,97,108,112,104,97,0,0,0,110,111,100,101,32,39,37,115,39,44,32,103,114,97,112,104,32,39,37,115,39,32,115,105,122,101,32,116,111,111,32,115,109,97,108,108,32,102,111,114,32,108,97,98,101,108,10,0,111,108,105,118,101,0,0,0,47,114,100,103,121,52,47,51,0,0,0,0,0,0,0,0,85,84,70,45,56,0,0,0,108,97,98,101,108,116,111,111,108,116,105,112,0,0,0,0,47,114,100,103,121,52,47,50,0,0,0,0,0,0,0,0,47,114,100,103,121,52,47,49,0,0,0,0,0,0,0,0,47,114,100,103,121,51,47,51,
+0,0,0,0,0,0,0,0,47,98,114,98,103,53,47,50,0,0,0,0,0,0,0,0,47,114,100,103,121,51,47,50,0,0,0,0,0,0,0,0,35,32,37,115,10,0,0,0,47,114,100,103,121,51,47,49,0,0,0,0,0,0,0,0,47,114,100,103,121,49,49,47,57,0,0,0,0,0,0,0,47,114,100,103,121,49,49,47,56,0,0,0,0,0,0,0,32,32,32,32,32,32,118,97,114,32,105,101,118,101,114,115,59,10,0,0,0,0,0,0,47,114,100,103,121,49,49,47,55,0,0,0,0,0,0,0,47,114,100,103,121,49,49,47,54,0,0,0,0,0,0,0,47,100,111,116,116,101,100,32,123,32,91,49,32,73,110,118,83,99,97,108,101,70,97,
+99,116,111,114,32,109,117,108,32,54,32,73,110,118,83,99,97,108,101,70,97,99,116,111,114,32,109,117,108,93,32,48,32,115,101,116,100,97,115,104,32,125,32,98,105,110,100,32,100,101,102,0,0,0,0,0,0,97,108,101,102,115,121,109,0,108,97,98,101,108,108,111,99,0,0,0,0,0,0,0,0,111,108,100,108,97,99,101,0,47,114,100,103,121,49,49,47,53,0,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,101,100,103,101,116,111,111,108,116,105,112,0,0,0,0,0,47,114,100,103,121,49,49,47,52,0,0,0,0,0,0,0,110,45,62,
+98,114,97,110,99,104,91,105,93,46,99,104,105,108,100,0,0,0,0,0,0,47,114,100,103,121,49,49,47,51,0,0,0,0,0,0,0,108,97,98,101,108,0,0,0,47,114,100,103,121,49,49,47,50,0,0,0,0,0,0,0,47,98,114,98,103,53,47,49,0,0,0,0,0,0,0,0,75,80,95,65,100,100,0,0,47,114,100,103,121,49,49,47,49,49,0,0,0,0,0,0,118,109,108,122,58,118,109,108,0,0,0,0,0,0,0,0,47,114,100,103,121,49,49,47,49,48,0,0,0,0,0,0,47,114,100,103,121,49,49,47,49,0,0,0,0,0,0,0,47,114,100,103,121,49,48,47,57,0,0,0,0,0,0,0,32,32,32,32,32,32,118,97,114,
+32,109,115,105,101,32,61,32,117,97,46,105,110,100,101,120,79,102,32,40,32,39,77,83,73,69,32,39,32,41,10,0,0,0,0,0,0,0,0,47,114,100,103,121,49,48,47,56,0,0,0,0,0,0,0,103,114,97,112,104,0,0,0,47,114,100,103,121,49,48,47,55,0,0,0,0,0,0,0,47,100,97,115,104,101,100,32,123,32,91,57,32,73,110,118,83,99,97,108,101,70,97,99,116,111,114,32,109,117,108,32,100,117,112,32,93,32,48,32,115,101,116,100,97,115,104,32,125,32,98,105,110,100,32,100,101,102,0,0,0,0,0,0,97,103,114,97,118,101,0,0,78,111,32,111,114,32,105,
+109,112,114,111,112,101,114,32,105,109,97,103,101,61,34,37,115,34,32,102,111,114,32,110,111,100,101,32,34,37,115,34,10,0,0,0,0,0,0,0,0,110,97,118,121,0,0,0,0,47,114,100,103,121,49,48,47,54,0,0,0,0,0,0,0,105,100,0,0,0,0,0,0,116,111,111,108,116,105,112,0,47,114,100,103,121,49,48,47,53,0,0,0,0,0,0,0,47,114,100,103,121,49,48,47,52,0,0,0,0,0,0,0,47,114,100,103,121,49,48,47,51,0,0,0,0,0,0,0,47,98,114,98,103,52,47,52,0,0,0,0,0,0,0,0,47,114,100,103,121,49,48,47,50,0,0,0,0,0,0,0,91,91,58,100,105,103,105,116,
+58,93,93,0,0,0,0,0,47,114,100,103,121,49,48,47,49,48,0,0,0,0,0,0,65,103,114,97,112,104,105,110,102,111,95,116,0,0,0,0,47,114,100,103,121,49,48,47,49,0,0,0,0,0,0,0,100,101,102,108,97,116,105,111,110,32,101,110,100,32,112,114,111,98,108,101,109,32,37,100,10,0,0,0,0,0,0,0,47,114,100,98,117,57,47,57,0,0,0,0,0,0,0,0,32,32,32,32,32,32,118,97,114,32,117,97,32,61,32,119,105,110,100,111,119,46,110,97,118,105,103,97,116,111,114,46,117,115,101,114,65,103,101,110,116,10,0,0,0,0,0,0,120,100,111,116,49,46,50,58,
+120,100,111,116,0,0,0,0,99,97,110,110,111,116,32,109,97,108,108,111,99,32,112,110,108,112,115,0,0,0,0,0,47,114,100,98,117,57,47,56,0,0,0,0,0,0,0,0,47,114,100,98,117,57,47,55,0,0,0,0,0,0,0,0,121,101,115,0,0,0,0,0,47,115,111,108,105,100,32,123,32,91,93,32,48,32,115,101,116,100,97,115,104,32,125,32,98,105,110,100,32,100,101,102,0,0,0,0,0,0,0,0,97,101,108,105,103,0,0,0,60,110,105,108,62,0,0,0,110,97,118,97,106,111,119,104,105,116,101,0,0,0,0,0,91,105,110,116,101,114,110,97,108,32,116,105,109,101,115,
+93,0,0,0,0,0,0,0,0,47,114,100,98,117,57,47,54,0,0,0,0,0,0,0,0,104,101,97,100,99,108,105,112,0,0,0,0,0,0,0,0,108,97,98,101,108,0,0,0,104,101,97,100,116,97,114,103,101,116,0,0,0,0,0,0,47,114,100,98,117,57,47,53,0,0,0,0,0,0,0,0,47,97,99,99,101,110,116,53,47,50,0,0,0,0,0,0,117,115,105,110,103,32,37,115,32,102,111,114,32,117,110,107,110,111,119,110,32,115,104,97,112,101,32,37,115,10,0,0,105,100,120,32,61,61,32,115,122,0,0,0,0,0,0,0,105,110,32,99,104,101,99,107,112,97,116,104,44,32,98,111,120,32,37,100,
+32,104,97,115,32,76,76,32,99,111,111,114,100,32,62,32,85,82,32,99,111,111,114,100,10,0,0,0,47,117,115,101,114,95,115,104,97,112,101,95,37,100,32,123,10,0,0,0,0,0,0,0,120,108,97,98,101,108,115,10,0,0,0,0,0,0,0,0,47,114,100,98,117,57,47,52,0,0,0,0,0,0,0,0,115,116,111,112,10,0,0,0,9,37,115,32,37,100,10,0,32,37,100,37,115,32,105,116,101,114,97,116,105,111,110,115,32,37,46,50,102,32,115,101,99,10,0,0,0,0,0,0,38,35,52,53,59,0,0,0,47,114,100,98,117,57,47,51,0,0,0,0,0,0,0,0,47,98,114,98,103,52,47,51,0,0,
+0,0,0,0,0,0,97,116,116,114,105,98,117,116,101,32,109,97,99,114,111,115,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,0,0,0,0,0,0,0,112,97,99,107,32,105,110,102,111,58,10,0,0,0,0,0,83,111,108,118,105,110,103,32,109,111,100,101,108,58,32,0,47,114,100,98,117,57,47,50,0,0,0,0,0,0,0,0,104,116,109,108,116,97,98,108,101,46,99,0,0,0,0,0,47,114,100,98,117,57,47,49,0,0,0,0,0,0,0,0,72,84,77,76,0,0,0,0,47,114,100,98,117,56,47,56,0,0,0,0,0,0,0,0,78,111,100,101,32,115,101,112,97,114,97,116,105,
+111,110,58,32,97,100,100,61,37,100,32,40,37,102,44,37,102,41,10,0,0,0,0,0,0,0,0,47,114,100,98,117,56,47,55,0,0,0,0,0,0,0,0,32,32,32,123,10,0,0,0,115,101,103,109,101,110,116,32,91,37,115,44,37,115,93,32,100,111,101,115,32,110,111,116,32,105,110,116,101,114,115,101,99,116,32,98,111,120,32,108,108,61,37,115,44,117,114,61,37,115,10,0,0,0,0,0,101,100,103,101,0,0,0,0,47,114,100,98,117,56,47,54,0,0,0,0,0,0,0,0,47,114,100,98,117,56,47,53,0,0,0,0,0,0,0,0,115,112,108,105,110,101,115,0,37,32,115,116,121,108,
+101,115,0,0,0,0,0,0,0,0,97,99,117,116,101,0,0,0,78,111,32,111,114,32,105,109,112,114,111,112,101,114,32,115,104,97,112,101,102,105,108,101,61,34,37,115,34,32,102,111,114,32,110,111,100,101,32,34,37,115,34,10,0,0,0,0,109,111,99,99,97,115,105,110,0,0,0,0,0,0,0,0,47,114,100,98,117,56,47,52,0,0,0,0,0,0,0,0,116,97,105,108,99,108,105,112,0,0,0,0,0,0,0,0,116,97,105,108,116,97,114,103,101,116,0,0,0,0,0,0,98,108,97,99,107,0,0,0,47,114,100,98,117,56,47,51,0,0,0,0,0,0,0,0,47,114,100,98,117,56,47,50,0,0,0,0,
+0,0,0,0,47,114,100,98,117,56,47,49,0,0,0,0,0,0,0,0,47,98,114,98,103,52,47,50,0,0,0,0,0,0,0,0,47,114,100,98,117,55,47,55,0,0,0,0,0,0,0,0,61,0,0,0,0,0,0,0,120,108,112,0,0,0,0,0,47,114,100,98,117,55,47,54,0,0,0,0,0,0,0,0,47,114,100,98,117,55,47,53,0,0,0,0,0,0,0,0,99,111,109,112,97,99,116,0,47,114,100,98,117,55,47,52,0,0,0,0,0,0,0,0,32,32,32,102,117,110,99,116,105,111,110,32,98,114,111,119,115,101,114,99,104,101,99,107,40,41,10,0,0,0,0,0,47,114,100,98,117,55,47,51,0,0,0,0,0,0,0,0,37,108,102,0,0,0,0,0,
+37,115,32,0,0,0,0,0,47,114,100,98,117,55,47,50,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,115,99,97,108,101,0,0,0,0,97,99,105,114,99,0,0,0,37,115,10,0,0,0,0,0,114,101,103,117,108,97,114,0,109,105,115,116,121,114,111,115,101,0,0,0,0,0,0,0,109,111,118,101,32,116,111,32,102,114,111,110,116,32,108,111,99,107,32,105,110,99,111,110,115,105,115,116,101,110,99,121,0,0,0,0,0,0,0,0,47,114,100,98,117,55,47,49,0,0,0,0,0,0,0,0,99,111,110,115,116,114,97,105,110,116,0,0,0,0,0,0,108,97,98,101,108,116,97,114,103,101,116,
+0,0,0,0,0,47,114,100,98,117,54,47,54,0,0,0,0,0,0,0,0,116,97,112,101,114,101,100,0,47,114,100,98,117,54,47,53,0,0,0,0,0,0,0,0,105,110,0,0,0,0,0,0,32,37,100,44,37,100,0,0,47,114,100,98,117,54,47,52,0,0,0,0,0,0,0,0,47,98,114,98,103,52,47,49,0,0,0,0,0,0,0,0,47,114,100,98,117,54,47,51,0,0,0,0,0,0,0,0,47,114,100,98,117,54,47,50,0,0,0,0,0,0,0,0,47,114,100,98,117,54,47,49,0,0,0,0,0,0,0,0,47,114,100,98,117,53,47,53,0,0,0,0,0,0,0,0,32,32,32,60,83,67,82,73,80,84,32,76,65,78,71,85,65,71,69,61,39,74,97,118,97,
+115,99,114,105,112,116,39,62,10,0,0,0,0,0,0,47,114,100,98,117,53,47,52,0,0,0,0,0,0,0,0,47,114,100,98,117,53,47,51,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,100,117,112,32,49,32,101,120,99,104,32,100,105,118,32,47,73,110,118,83,99,97,108,101,70,97,99,116,111,114,32,101,120,99,104,32,100,101,102,0,0,97,97,99,117,116,101,0,0,37,108,102,44,37,108,102,0,109,105,110,116,99,114,101,97,109,0,0,0,0,0,0,0,47,114,100,98,117,53,47,50,0,0,0,0,0,0,0,0,97,114,114,111,119,115,105,122,101,0,0,0,0,0,0,0,101,100,103,101,
+116,97,114,103,101,116,0,0,0,0,0,0,47,114,100,98,117,53,47,49,0,0,0,0,0,0,0,0,47,114,100,98,117,52,47,52,0,0,0,0,0,0,0,0,47,114,100,98,117,52,47,51,0,0,0,0,0,0,0,0,47,98,114,98,103,51,47,51,0,0,0,0,0,0,0,0,106,117,110,107,32,97,102,116,101,114,32,100,111,99,117,109,101,110,116,32,101,108,101,109,101,110,116,0,0,0,0,0,0,1,2,3,4,5,6,7,8,8,9,9,10,10,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,
+20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,
+27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,
+14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,0,0,16,17,18,18,19,19,20,20,20,20,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,
+26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,
+29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,128,236,1,0,208,226,1,0,56,213,1,0,0,249,1,0,8,210,1,0,104,207,1,0,0,0,0,0,0,0,0,0,120,108,105,110,116,101,114,115,101,99,116,105,111,110,115,0,120,108,104,100,120,117,110,108,111,97,100,0,0,0,0,0,118,109,108,95,116,101,120,116,115,112,97,110,0,0,0,0,118,109,108,95,112,114,105,110,116,95,99,111,108,111,114,0,116,114,97,110,115,112,111,115,101,95,115,116,101,112,0,0,116,107,103,101,110,95,112,114,105,110,116,95,116,97,103,115,0,0,
+0,0,0,0,0,0,116,107,103,101,110,95,112,114,105,110,116,95,99,111,108,111,114,0,0,0,0,0,0,0,116,101,120,116,115,112,97,110,95,115,105,122,101,0,0,0,115,118,103,95,116,101,120,116,115,112,97,110,0,0,0,0,115,118,103,95,112,114,105,110,116,95,99,111,108,111,114,0,115,101,116,98,111,117,110,100,115,0,0,0,0,0,0,0,114,111,117,110,100,95,99,111,114,110,101,114,115,0,0,0,114,101,109,111,118,101,95,102,114,111,109,95,114,97,110,107,0,0,0,0,0,0,0,0,114,101,109,111,118,101,68,101,103,108,105,115,116,0,0,0,112,
+111,115,116,111,114,100,101,114,0,0,0,0,0,0,0,112,111,115,95,104,116,109,108,95,116,98,108,0,0,0,0,112,111,112,95,111,98,106,95,115,116,97,116,101,0,0,0,112,111,112,0,0,0,0,0,112,111,108,121,108,105,110,101,77,105,100,112,111,105,110,116,0,0,0,0,0,0,0,0,112,97,114,115,101,80,97,99,107,77,111,100,101,73,110,102,111,0,0,0,0,0,0,0,111,118,101,114,108,97,112,95,98,101,122,105,101,114,0,0,111,98,106,112,108,112,109,107,115,0,0,0,0,0,0,0,110,101,105,103,104,98,111,114,0,0,0,0,0,0,0,0,110,101,97,116,111,
+95,101,110,113,117,101,117,101,0,0,0,109,107,78,67,111,110,115,116,114,97,105,110,116,71,0,0,109,105,110,109,97,120,95,101,100,103,101,115,0,0,0,0,109,101,114,103,101,118,105,114,116,117,97,108,0,0,0,0,109,101,114,103,101,95,111,110,101,119,97,121,0,0,0,0,109,101,114,103,101,95,99,104,97,105,110,0,0,0,0,0,109,97,112,95,112,97,116,104,0,0,0,0,0,0,0,0,109,97,112,95,111,117,116,112,117,116,95,115,104,97,112,101,0,0,0,0,0,0,0,0,109,97,112,78,0,0,0,0,109,97,107,101,95,108,97,98,101,108,0,0,0,0,0,0,109,
+97,107,101,95,99,104,97,105,110,0,0,0,0,0,0,109,97,107,101,95,98,97,114,114,105,101,114,115,0,0,0,109,97,107,101,83,101,108,102,69,100,103,101,0,0,0,0,109,97,107,101,71,114,97,112,104,68,97,116,97,0,0,0,109,97,107,101,67,111,109,112,111,117,110,100,69,100,103,101,0,0,0,0,0,0,0,0,108,98,108,101,110,99,108,111,115,105,110,103,0,0,0,0,105,110,115,116,97,108,108,95,105,110,95,114,97,110,107,0,105,110,115,101,114,116,78,111,100,101,108,105,115,116,0,0,105,110,105,116,95,115,112,108,105,110,101,115,95,
+98,98,0,103,118,117,115,101,114,115,104,97,112,101,95,102,105,108,101,95,97,99,99,101,115,115,0,103,101,116,105,110,116,114,115,120,105,0,0,0,0,0,0,103,101,116,80,97,99,107,73,110,102,111,0,0,0,0,0,103,101,116,69,100,103,101,76,105,115,116,0,0,0,0,0,102,108,97,116,95,115,101,97,114,99,104,0,0,0,0,0,102,108,97,116,95,114,101,111,114,100,101,114,0,0,0,0,102,105,110,100,67,67,111,109,112,0,0,0,0,0,0,0,102,105,103,95,114,101,115,111,108,118,101,95,99,111,108,111,114,0,0,0,0,0,0,0,102,105,103,95,98,101,
+122,105,101,114,0,0,0,0,0,0,102,97,115,116,95,110,111,100,101,97,112,112,0,0,0,0,102,97,115,116,95,110,111,100,101,0,0,0,0,0,0,0,101,120,112,97,110,100,67,108,117,115,116,101,114,0,0,0,101,110,100,112,97,116,104,0,101,109,105,116,95,101,100,103,101,95,108,97,98,101,108,0,100,111,116,95,112,111,115,105,116,105,111,110,0,0,0,0,100,101,108,101,116,101,95,102,108,97,116,95,101,100,103,101,0,0,0,0,0,0,0,0,100,101,108,101,116,101,95,102,97,115,116,95,110,111,100,101,0,0,0,0,0,0,0,0,100,101,108,101,116,
+101,95,102,97,115,116,95,101,100,103,101,0,0,0,0,0,0,0,0,99,111,114,101,95,108,111,97,100,105,109,97,103,101,95,118,114,109,108,0,0,0,0,0,99,111,114,101,95,108,111,97,100,105,109,97,103,101,95,115,118,103,0,0,0,0,0,0,99,111,114,101,95,108,111,97,100,105,109,97,103,101,95,112,115,108,105,98,0,0,0,0,99,111,114,101,95,108,111,97,100,105,109,97,103,101,95,112,115,0,0,0,0,0,0,0,99,111,114,101,95,108,111,97,100,105,109,97,103,101,95,102,105,103,0,0,0,0,0,0,99,111,110,110,101,99,116,71,114,97,112,104,0,
+0,0,0,99,111,109,112,117,116,101,83,99,97,108,101,88,89,0,0,99,108,117,115,116,101,114,95,108,101,97,100,101,114,0,0,98,111,120,73,110,116,101,114,115,101,99,116,102,0,0,0,98,101,122,105,101,114,95,98,98,0,0,0,0,0,0,0,98,101,103,105,110,112,97,116,104,0,0,0,0,0,0,0,98,97,108,97,110,99,101,0,97,98,111,109,105,110,97,116,105,111,110,0,0,0,0,0,95,110,101,97,116,111,95,115,101,116,95,97,115,112,101,99,116,0,0,0,0,0,0,0,95,100,111,116,95,115,112,108,105,110,101,115,0,0,0,0,85,70,95,115,101,116,110,97,
+109,101,0,0,0,0,0,0,83,112,108,105,116,78,111,100,101,0,0,0,0,0,0,0,82,101,99,116,65,114,101,97,0,0,0,0,0,0,0,0,82,84,114,101,101,83,101,97,114,99,104,0,0,0,0,0,82,84,114,101,101,73,110,115,101,114,116,50,0,0,0,0,82,84,114,101,101,73,110,115,101,114,116,0,0,0,0,0,80,111,98,115,112,97,116,104,0,0,0,0,0,0,0,0,80,105,99,107,66,114,97,110,99,104,0,0,0,0,0,0,79,118,101,114,108,97,112,0,78,111,100,101,67,111,118,101,114,0,0,0,0,0,0,0,77,101,116,104,111,100,90,101,114,111,0,0,0,0,0,0,76,111,97,100,78,111,
+100,101,115,0,0,0,0,0,0,0,71,101,116,66,114,97,110,99,104,101,115,0,0,0,0,0,68,105,115,99,111,110,66,114,97,110,99,104,0,0,0,0,67,111,109,98,105,110,101,82,101,99,116,0,0,0,0,0,67,108,97,115,115,105,102,121,0,0,0,0,0,0,0,0,65,100,100,66,114,97,110,99,104,0,0,0,0,0,0,0,46,0,0,0,4,0,0,0,2,0,0,0,64,0,0,0,46,0,0,0,4,0,0,0,46,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,13,2,0,8,205,1,0,192,175,1,0,8,152,1,0,248,129,1,0,240,107,1,0,8,87,1,0,32,68,1,0,8,148,2,
+0,240,131,2,0,64,116,2,0,48,100,2,0,160,82,2,0,72,71,2,0,64,59,2,0,128,47,2,0,112,35,2,0,176,24,2,0,40,13,2,0,144,5,2,0,120,252,1,0,152,240,1,0,48,230,1,0,16,221,1,0,208,217,1,0,80,214,1,0,200,211,1,0,112,208,1,0,224,204,1,0,48,202,1,0,192,197,1,0,128,193,1,0,160,189,1,0,240,186,1,0,216,184,1,0,240,182,1,0,160,180,1,0,64,178,1,0,128,175,1,0,8,173,1,0,0,0,0,0,232,125,2,0,128,56,0,0,152,68,0,0,0,0,0,0,72,110,2,0,128,56,0,0,184,63,0,0,0,0,0,0,120,90,2,0,128,56,0,0,232,66,0,0,0,0,0,0,32,78,2,0,128,56,
+0,0,232,66,0,0,0,0,0,0,192,66,2,0,128,56,0,0,8,68,0,0,0,0,0,0,96,54,2,0,176,56,0,0,8,68,0,0,0,0,0,0,248,42,2,0,128,56,0,0,24,67,0,0,0,0,0,0,176,30,2,0,128,56,0,0,88,60,0,0,0,0,0,0,144,20,2,0,128,56,0,0,232,63,0,0,0,0,0,0,216,9,2,0,128,56,0,0,232,63,0,0,0,0,0,0,152,1,2,0,128,56,0,0,168,67,0,0,0,0,0,0,160,248,1,0,128,56,0,0,136,60,0,0,0,0,0,0,8,236,1,0,128,56,0,0,72,64,0,0,0,0,0,0,160,226,1,0,128,56,0,0,40,66,0,0,0,0,0,0,104,219,1,0,128,56,0,0,24,64,0,0,0,0,0,0,16,216,1,0,128,56,0,0,88,66,0,0,0,0,0,
+0,8,213,1,0,128,56,0,0,216,61,0,0,0,0,0,0,240,209,1,0,128,56,0,0,120,64,0,0,0,0,0,0,80,207,1,0,128,56,0,0,216,64,0,0,0,0,0,0,160,203,1,0,128,56,0,0,24,61,0,0,0,0,0,0,16,200,1,0,128,56,0,0,136,66,0,0,0,0,0,0,88,196,1,0,128,56,0,0,104,68,0,0,0,0,0,0,240,190,1,0,128,56,0,0,216,67,0,0,0,0,0,0,16,188,1,0,128,56,0,0,152,68,0,0,0,0,0,0,8,186,1,0,128,56,0,0,152,68,0,0,0,0,0,0,224,183,1,0,128,56,0,0,120,61,0,0,0,0,0,0,224,181,1,0,128,56,0,0,120,67,0,0,0,0,0,0,152,179,1,0,128,56,0,0,72,67,0,0,0,0,0,0,248,176,
+1,0,128,56,0,0,40,60,0,0,0,0,0,0,32,174,1,0,128,56,0,0,104,65,0,0,0,0,0,0,128,171,1,0,128,56,0,0,152,65,0,0,0,0,0,0,64,168,1,0,128,56,0,0,200,65,0,0,0,0,0,0,48,164,1,0,128,56,0,0,248,59,0,0,0,0,0,0,184,161,1,0,128,56,0,0,40,69,0,0,0,0,0,0,8,160,1,0,128,56,0,0,248,68,0,0,0,0,0,0,88,158,1,0,128,56,0,0,88,69,0,0,0,0,0,0,120,156,1,0,128,56,0,0,88,63,0,0,0,0,0,0,192,154,1,0,128,56,0,0,56,68,0,0,0,0,0,0,32,153,1,0,128,56,0,0,232,60,0,0,0,0,0,0,72,151,1,0,128,56,0,0,200,59,0,0,0,0,0,0,224,148,1,0,128,56,
+0,0,248,65,0,0,0,0,0,0,40,146,1,0,128,56,0,0,104,62,0,0,0,0,0,0,152,142,1,0,128,56,0,0,56,62,0,0,0,0,0,0,168,139,1,0,128,56,0,0,40,63,0,0,0,0,0,0,224,137,1,0,128,56,0,0,248,62,0,0,0,0,0,0,64,136,1,0,128,56,0,0,136,63,0,0,0,0,0,0,24,134,1,0,128,56,0,0,152,62,0,0,0,0,0,0,160,132,1,0,128,56,0,0,184,66,0,0,0,0,0,0,0,131,1,0,128,56,0,0,184,60,0,0,0,0,0,0,64,129,1,0,128,56,0,0,168,64,0,0,0,0,0,0,32,127,1,0,128,56,0,0,200,68,0,0,0,0,0,0,128,124,1,0,128,56,0,0,168,61,0,0,0,0,0,0,24,120,1,0,128,56,0,0,8,62,
+0,0,0,0,0,0,32,118,1,0,128,56,0,0,56,65,0,0,0,0,0,0,0,116,1,0,128,56,0,0,200,62,0,0,0,0,0,0,112,114,1,0,128,56,0,0,8,65,0,0,0,0,0,0,152,112,1,0,192,47,0,0,0,0,0,0,0,0,0,0,24,111,1,0,192,47,0,0,0,0,0,0,0,0,0,0,120,165,1,0,152,103,0,0,0,0,0,0,0,0,0,0,48,109,1,0,0,46,0,0,72,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,62,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,240,235,1,0,72,108,2,0,208,245,1,0,0,0,0,0,107,101,121,0,0,0,0,0,121,101,115,0,0,0,0,0,118,101,114,115,105,111,110,0,115,116,97,110,100,97,108,111,110,101,0,0,0,0,0,0,110,111,0,0,0,0,0,0,101,110,99,111,100,105,110,103,0,0,0,0,0,0,0,0,85,84,70,45,56,0,0,0,85,84,70,45,49,54,76,69,0,0,0,0,0,0,0,0,85,84,70,45,49,54,66,69,0,0,0,0,0,0,0,0,85,84,70,45,49,54,0,0,85,
+83,45,65,83,67,73,73,0,0,0,0,0,0,0,0,83,89,83,84,69,77,0,0,82,69,81,85,73,82,69,68,0,0,0,0,0,0,0,0,80,85,66,76,73,67,0,0,80,67,68,65,84,65,0,0,78,79,84,65,84,73,79,78,0,0,0,0,0,0,0,0,78,77,84,79,75,69,78,83,0,0,0,0,0,0,0,0,78,77,84,79,75,69,78,0,78,68,65,84,65,0,0,0,73,83,79,45,56,56,53,57,45,49,0,0,0,0,0,0,73,77,80,76,73,69,68,0,73,68,82,69,70,83,0,0,73,68,82,69,70,0,0,0,73,68,0,0,0,0,0,0,70,73,88,69,68,0,0,0,69,78,84,73,84,89,0,0,69,78,84,73,84,73,69,83,0,0,0,0,0,0,0,0,69,77,80,84,89,0,0,0,69,76,
+69,77,69,78,84,0,68,79,67,84,89,80,69,0,67,68,65,84,65,0,0,0,65,84,84,76,73,83,84,0,65,78,89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,4,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,4,0,0,0,0,0,0,0,14,0,0,0,118,
+0,0,0,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,157,2,0,0,0,0,0,120,157,2,0,0,0,0,0,128,157,2,0,0,0,0,0,136,157,2,0,0,0,0,0,8,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,95,65,71,95,100,97,116,97,100,105,99,116,0,0,0,0,0,0,0,0,0,0,0,0,95,65,71,95,112,101,110,100,105,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240,191,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,10,0,0,0,0,0,0,0,2,0,0,0,0,
+0,0,0,0,0,0,0,0,0,240,63,14,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,224,63,16,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,2,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,51,51,51,51,51,51,243,63,6,0,0,0,0,0,0,0,6,0,0,0,0,0,0,0,154,153,153,153,153,153,233,63,4,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,240,63,8,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0,0,224,63,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,216,25,2,0,49,0,0,0,0,0,0,0,0,0,0,0,48,62,2,0,1,0,0,0,32,215,1,0,2,0,0,0,8,181,1,0,3,
+0,0,0,120,155,1,0,4,0,0,0,232,133,1,0,5,0,0,0,112,112,1,0,6,0,0,0,72,91,1,0,8,0,0,0,168,71,1,0,33,0,0,0,152,53,1,0,34,0,0,0,192,134,2,0,34,0,0,0,200,118,2,0,1,0,0,0,88,103,2,0,7,0,0,0,0,0,0,0,0,0,0,0,152,84,2,0,16,0,0,0,248,72,2,0,128,0,0,0,120,60,2,0,64,0,0,0,232,48,2,0,16,0,0,0,224,36,2,0,64,0,0,0,0,0,0,0,0,0,0,0,72,14,2,0,0,0,0,0,1,0,0,0,72,6,2,0,1,0,0,0,0,0,0,0,160,253,1,0,1,0,0,0,1,0,0,0,72,91,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,11,0,0,0,0,0,0,
+0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,98,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,80,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255],"i8",L,l.J+163880);D([54,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,22,
+0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,54,0,0,0,0,0,0,0,114,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,118,0,0,0,28,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,108,0,0,0,48,0,0,0,0,0,0,0,150,0,0,0,92,0,0,0,22,0,0,0,122,0,0,0,48,0,0,0,114,0,0,0,84,0,0,0,0,0,0,0,152,168,2,0,192,168,2,0,176,168,2,0,0,0,0,0,112,43,2,0,0,0,0,0,8,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"i8",L,l.J+174124);var sa=l.qb(D(12,"i8",S),8);J(0==sa%8);e._memcpy=
+Za;e._memmove=bc;e._memset=cc;e._memcmp=rc;e._strlen=Aa;var g={ba:1,Ib:2,Uh:3,Ug:4,Ea:5,wd:6,rg:7,rh:8,H:9,Eg:10,lb:11,di:11,Ne:12,mc:13,Pg:14,Dh:15,mb:16,ud:17,Oe:18,Hb:19,oc:20,Sa:21,B:22,mh:23,Me:24,vd:25,ai:26,Qg:27,zh:28,nb:29,Rh:30,fh:31,Lh:32,Mg:33,qc:34,vh:42,Sg:43,Fg:44,Wg:45,Xg:46,Yg:47,eh:48,bi:49,ph:50,Vg:51,Kg:35,sh:37,wg:52,zg:53,ei:54,nh:55,Ag:56,Bg:57,Lg:35,Cg:59,Bh:60,qh:61,Yh:62,Ah:63,wh:64,xh:65,Qh:66,th:67,ug:68,Vh:69,Gg:70,Mh:71,hh:72,Ng:73,yg:74,Hh:76,xg:77,Ph:78,Zg:79,$g:80,
+dh:81,bh:82,ah:83,Ch:38,pc:39,ih:36,nc:40,Kb:95,Kh:96,Jg:104,oh:105,vg:97,Oh:91,Fh:88,yh:92,Sh:108,Ig:111,sg:98,Hg:103,lh:101,jh:100,Zh:110,Rg:112,Je:113,Ke:115,He:114,Ie:89,gh:90,Nh:93,Th:94,tg:99,kh:102,Le:106,Jb:107,$h:109,ci:87,Og:122,Wh:116,Gh:95,uh:123,Tg:84,Ih:75,Dg:125,Eh:131,Jh:130,Xh:86},Oa={"0":"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",
+9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",
+32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",
+51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",
+73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can   access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",
+89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",
+106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"},Na=0,B={xe:function(a){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1)},
+Xc:function(a,b){for(var c=0,f=a.length-1;0<=f;f--){var d=a[f];"."===d?a.splice(f,1):".."===d?(a.splice(f,1),c++):c&&(a.splice(f,1),c--)}if(b)for(;c--;c)a.unshift("..");return a},normalize:function(a){var b="/"===a.charAt(0),c="/"===a.substr(-1),a=B.Xc(a.split("/").filter(function(a){return!!a}),!b).join("/");!a&&!b&&(a=".");a&&c&&(a+="/");return(b?"/":"")+a},dirname:function(a){var b=B.xe(a),a=b[0],b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b},wa:function(a){if("/"===a)return"/";
+var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)},Fi:function(a){return B.xe(a)[3]},join:function(){var a=Array.prototype.slice.call(arguments,0);return B.normalize(a.join("/"))},V:function(a,b){return B.normalize(a+"/"+b)},eb:function(){for(var a="",b=G,c=arguments.length-1;-1<=c&&!b;c--){var f=0<=c?arguments[c]:d.Bc();"string"!==typeof f&&k(new TypeError("Arguments to path.resolve must be strings"));f&&(a=f+"/"+a,b="/"===f.charAt(0))}a=B.Xc(a.split("/").filter(function(a){return!!a}),!b).join("/");
+return(b?"/":"")+a||"."},te:function(a,b){function c(a){for(var b=0;b<a.length&&""===a[b];b++);for(var c=a.length-1;0<=c&&""===a[c];c--);return b>c?[]:a.slice(b,c-b+1)}for(var a=B.eb(a).substr(1),b=B.eb(b).substr(1),f=c(a.split("/")),d=c(b.split("/")),e=Math.min(f.length,d.length),h=e,j=0;j<e;j++)if(f[j]!==d[j]){h=j;break}e=[];for(j=h;j<f.length;j++)e.push("..");e=e.concat(d.slice(h));return e.join("/")}},Y={Be:[],ka:M(),tj:M(),se:function(a,b){Y.Be[a]={input:[],Oa:[],Bb:b};d.bd(a,Y.o)},o:{open:function(a){var b=
+Y.Be[a.k.Pa];b||k(new d.e(g.Hb));a.aa=b;a.seekable=G},close:function(a){a.aa.Oa.length&&a.aa.Bb.jc(a.aa,10)},P:function(a,b,c,f){(!a.aa||!a.aa.Bb.be)&&k(new d.e(g.wd));for(var e=0,i=0;i<f;i++){var h;try{h=a.aa.Bb.be(a.aa)}catch(j){k(new d.e(g.Ea))}h===p&&0===e&&k(new d.e(g.lb));if(h===r||h===p)break;e++;b[c+i]=h}e&&(a.k.timestamp=Date.now());return e},write:function(a,b,c,f){(!a.aa||!a.aa.Bb.jc)&&k(new d.e(g.wd));for(var e=0;e<f;e++)try{a.aa.Bb.jc(a.aa,b[c+e])}catch(i){k(new d.e(g.Ea))}f&&(a.k.timestamp=
+Date.now());return e}},nf:{be:function(a){if(!a.input.length){var b=r;if(ca){if(b=process.stdin.read(),!b){if(process.stdin._readableState&&process.stdin._readableState.ended)return r;return}}else"undefined"!=typeof window&&"function"==typeof window.prompt?(b=window.prompt("Input: "),b!==r&&(b+="\n")):"function"==typeof readline&&(b=readline(),b!==r&&(b+="\n"));if(!b)return r;a.input=V(b,q)}return a.input.shift()},jc:function(a,b){b===r||10===b?(e.print(a.Oa.join("")),a.Oa=[]):a.Oa.push(Y.De.ic(b))}},
+mf:{jc:function(a,b){b===r||10===b?(e.printErr(a.Oa.join("")),a.Oa=[]):a.Oa.push(Y.De.ic(b))}}},z={la:r,Ge:1,lc:2,rd:3,L:function(){return z.createNode(r,"/",16895,0)},createNode:function(a,b,c,f){(d.Df(c)||d.Ef(c))&&k(new d.e(g.ba));z.la||(z.la={dir:{k:{fa:z.n.fa,N:z.n.N,Wa:z.n.Wa,Y:z.n.Y,Y:z.n.Y,rename:z.n.rename,Ra:z.n.Ra,fb:z.n.fb,bb:z.n.bb,na:z.n.na},ma:{ga:z.o.ga}},file:{k:{fa:z.n.fa,N:z.n.N},ma:{ga:z.o.ga,P:z.o.P,write:z.o.write,rb:z.o.rb,xb:z.o.xb}},link:{k:{fa:z.n.fa,N:z.n.N,Qa:z.n.Qa},ma:{}},
+Hd:{k:{fa:z.n.fa,N:z.n.N},ma:d.Ze}});c=d.createNode(a,b,c,f);d.O(c.mode)?(c.n=z.la.dir.k,c.o=z.la.dir.ma,c.u={}):d.isFile(c.mode)?(c.n=z.la.file.k,c.o=z.la.file.ma,c.u=[],c.Qb=z.lc):d.Va(c.mode)?(c.n=z.la.link.k,c.o=z.la.link.ma):d.vb(c.mode)&&(c.n=z.la.Hd.k,c.o=z.la.Hd.ma);c.timestamp=Date.now();a&&(a.u[b]=c);return c},Ec:function(a){a.Qb!==z.lc&&(a.u=Array.prototype.slice.call(a.u),a.Qb=z.lc)},n:{fa:function(a){var b={};b.Cc=d.vb(a.mode)?a.id:1;b.ac=a.id;b.mode=a.mode;b.Wc=1;b.uid=0;b.Mc=0;b.Pa=
+a.Pa;b.size=d.O(a.mode)?4096:d.isFile(a.mode)?a.u.length:d.Va(a.mode)?a.link.length:0;b.wc=new Date(a.timestamp);b.Uc=new Date(a.timestamp);b.Ac=new Date(a.timestamp);b.Ha=4096;b.sb=Math.ceil(b.size/b.Ha);return b},N:function(a,b){b.mode!==p&&(a.mode=b.mode);b.timestamp!==p&&(a.timestamp=b.timestamp);if(b.size!==p){z.Ec(a);var c=a.u;if(b.size<c.length)c.length=b.size;else for(;b.size>c.length;)c.push(0)}},Wa:function(){k(d.Jc[g.Ib])},Y:function(a,b,c,d){return z.createNode(a,b,c,d)},rename:function(a,
+b,c){if(d.O(a.mode)){var f;try{f=d.ta(b,c)}catch(e){}if(f)for(var i in f.u)k(new d.e(g.pc))}delete a.parent.u[a.name];a.name=c;b.u[c]=a;a.parent=b},Ra:function(a,b){delete a.u[b]},fb:function(a,b){var c=d.ta(a,b),f;for(f in c.u)k(new d.e(g.pc));delete a.u[b]},bb:function(a){var b=[".",".."],c;for(c in a.u)a.u.hasOwnProperty(c)&&b.push(c);return b},na:function(a,b,c){a=z.createNode(a,b,41471,0);a.link=c;return a},Qa:function(a){d.Va(a.mode)||k(new d.e(g.B));return a.link}},o:{P:function(a,b,c,d,e){a=
+a.k.u;if(e>=a.length)return 0;d=Math.min(a.length-e,d);J(0<=d);if(8<d&&a.subarray)b.set(a.subarray(e,e+d),c);else for(var i=0;i<d;i++)b[c+i]=a[e+i];return d},write:function(a,b,c,d,e,i){var h=a.k;h.timestamp=Date.now();a=h.u;if(d&&0===a.length&&0===e&&b.subarray)return i&&0===c?(h.u=b,h.Qb=b.buffer===v.buffer?z.Ge:z.rd):(h.u=new Uint8Array(b.subarray(c,c+d)),h.Qb=z.rd),d;z.Ec(h);for(a=h.u;a.length<e;)a.push(0);for(i=0;i<d;i++)a[e+i]=b[c+i];return d},ga:function(a,b,c){1===c?b+=a.position:2===c&&d.isFile(a.k.mode)&&
+(b+=a.k.u.length);0>b&&k(new d.e(g.B));a.pd=[];return a.position=b},rb:function(a,b,c){z.Ec(a.k);a=a.k.u;for(b+=c;b>a.length;)a.push(0)},xb:function(a,b,c,f,e,i,h){d.isFile(a.k.mode)||k(new d.e(g.Hb));a=a.k.u;if(!(h&2)&&(a.buffer===b||a.buffer===b.buffer))e=G,f=a.byteOffset;else{if(0<e||e+f<a.length)a=a.subarray?a.subarray(e,e+f):Array.prototype.slice.call(a,e,e+f);e=q;(f=ia(f))||k(new d.e(g.Ne));b.set(a,f)}return{ej:f,si:e}}}},I={cc:G,nd:function(){I.cc=!!process.platform.match(/^win/)},L:function(a){J(ca);
+return I.createNode(r,"/",I.La(a.pe.root),0)},createNode:function(a,b,c){!d.O(c)&&(!d.isFile(c)&&!d.Va(c))&&k(new d.e(g.B));a=d.createNode(a,b,c);a.n=I.n;a.o=I.o;return a},La:function(a){var b;try{b=O.Lf(a),I.cc&&(b.mode|=(b.mode&146)>>1)}catch(c){c.code||k(c),k(new d.e(g[c.code]))}return b.mode},Z:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.L.pe.root);b.reverse();return B.join.apply(r,b)},Vd:{"0":"r",1:"r+",2:"r+",64:"r",65:"r+",66:"r+",129:"rx+",193:"rx+",514:"w+",
+577:"w",578:"w+",705:"wx",706:"wx+",1024:"a",1025:"a",1026:"a+",1089:"a",1090:"a+",1153:"ax",1154:"ax+",1217:"ax",1218:"ax+",4096:"rs",4098:"rs+"},Hc:function(a){return a in I.Vd?I.Vd[a]:a},n:{fa:function(a){var a=I.Z(a),b;try{b=O.Lf(a)}catch(c){c.code||k(c),k(new d.e(g[c.code]))}I.cc&&!b.Ha&&(b.Ha=4096);I.cc&&!b.sb&&(b.sb=(b.size+b.Ha-1)/b.Ha|0);return{Cc:b.Cc,ac:b.ac,mode:b.mode,Wc:b.Wc,uid:b.uid,Mc:b.Mc,Pa:b.Pa,size:b.size,wc:b.wc,Uc:b.Uc,Ac:b.Ac,Ha:b.Ha,sb:b.sb}},N:function(a,b){var c=I.Z(a);
+try{b.mode!==p&&(O.xi(c,b.mode),a.mode=b.mode);if(b.timestamp!==p){var f=new Date(b.timestamp);O.Dj(c,f,f)}b.size!==p&&O.yj(c,b.size)}catch(e){e.code||k(e),k(new d.e(g[e.code]))}},Wa:function(a,b){var c=B.V(I.Z(a),b),c=I.La(c);return I.createNode(a,b,c)},Y:function(a,b,c,f){a=I.createNode(a,b,c,f);b=I.Z(a);try{d.O(a.mode)?O.Zi(b,a.mode):O.Gj(b,"",{mode:a.mode})}catch(e){e.code||k(e),k(new d.e(g[e.code]))}return a},rename:function(a,b,c){a=I.Z(a);b=B.V(I.Z(b),c);try{O.mj(a,b)}catch(f){f.code||k(f),
+k(new d.e(g[f.code]))}},Ra:function(a,b){var c=B.V(I.Z(a),b);try{O.Aj(c)}catch(f){f.code||k(f),k(new d.e(g[f.code]))}},fb:function(a,b){var c=B.V(I.Z(a),b);try{O.nj(c)}catch(f){f.code||k(f),k(new d.e(g[f.code]))}},bb:function(a){a=I.Z(a);try{return O.ij(a)}catch(b){b.code||k(b),k(new d.e(g[b.code]))}},na:function(a,b,c){a=B.V(I.Z(a),b);try{O.vj(c,a)}catch(f){f.code||k(f),k(new d.e(g[f.code]))}},Qa:function(a){a=I.Z(a);try{return O.jj(a)}catch(b){b.code||k(b),k(new d.e(g[b.code]))}}},o:{open:function(a){var b=
+I.Z(a.k);try{d.isFile(a.k.mode)&&(a.Ab=O.bj(b,I.Hc(a.I)))}catch(c){c.code||k(c),k(new d.e(g[c.code]))}},close:function(a){try{d.isFile(a.k.mode)&&a.Ab&&O.yi(a.Ab)}catch(b){b.code||k(b),k(new d.e(g[b.code]))}},P:function(a,b,c,f,e){var i=new Buffer(f),h;try{h=O.hj(a.Ab,i,0,f,e)}catch(j){k(new d.e(g[j.code]))}if(0<h)for(a=0;a<h;a++)b[c+a]=i[a];return h},write:function(a,b,c,f,e){var b=new Buffer(b.subarray(c,c+f)),i;try{i=O.Hj(a.Ab,b,0,f,e)}catch(h){k(new d.e(g[h.code]))}return i},ga:function(a,b,c){if(1===
+c)b+=a.position;else if(2===c&&d.isFile(a.k.mode))try{var f=O.Ji(a.Ab),b=b+f.size}catch(e){k(new d.e(g[e.code]))}0>b&&k(new d.e(g.B));return a.position=b}}};Ga=D(1,"i32*",S);ma=D(1,"i32*",S);Ha=D(1,"i32*",S);var d={root:r,gc:[],Pd:[r],jb:[r],Vf:1,Ca:r,Ld:"/",$b:G,ee:q,e:r,Jc:{},sa:function(a){a instanceof d.e||k(a+" : "+bb());return H(a.Vb)},F:function(a,b){a=B.eb(d.Bc(),a);b=b||{ad:0};8<b.ad&&k(new d.e(g.nc));for(var c=B.Xc(a.split("/").filter(function(a){return!!a}),G),f=d.root,e="/",i=0;i<c.length;i++){var h=
+i===c.length-1;if(h&&b.parent)break;f=d.ta(f,c[i]);e=B.V(e,c[i]);d.wb(f)&&(f=f.L.root);if(!h||b.T)for(h=0;d.Va(f.mode);)f=d.Qa(e),e=B.eb(B.dirname(e),f),f=d.F(e,{ad:b.ad}).k,40<h++&&k(new d.e(g.nc))}return{path:e,k:f}},Ba:function(a){for(var b;;){if(d.bc(a))return a=a.L.Sf,!b?a:"/"!==a[a.length-1]?a+"/"+b:a+b;b=b?a.name+"/"+b:a.name;a=a.parent}},Nc:function(a,b){for(var c=0,f=0;f<b.length;f++)c=(c<<5)-c+b.charCodeAt(f)|0;return(a+c>>>0)%d.Ca.length},ce:function(a){var b=d.Nc(a.parent.id,a.name);a.$a=
+d.Ca[b];d.Ca[b]=a},de:function(a){var b=d.Nc(a.parent.id,a.name);if(d.Ca[b]===a)d.Ca[b]=a.$a;else for(b=d.Ca[b];b;){if(b.$a===a){b.$a=a.$a;break}b=b.$a}},ta:function(a,b){var c=d.Nf(a);c&&k(new d.e(c));for(c=d.Ca[d.Nc(a.id,b)];c;c=c.$a){var f=c.name;if(c.parent.id===a.id&&f===b)return c}return d.Wa(a,b)},createNode:function(a,b,c,f){d.Lb||(d.Lb=function(a,b,c,f){this.id=d.Vf++;this.name=b;this.mode=c;this.n={};this.o={};this.Pa=f;this.L=this.parent=r;a||(a=this);this.parent=a;this.L=a.L;d.ce(this)},
+d.Lb.prototype={},Object.defineProperties(d.Lb.prototype,{P:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}},Pc:{get:function(){return d.O(this.mode)}},Oc:{get:function(){return d.vb(this.mode)}}}));return new d.Lb(a,b,c,f)},Od:function(a){d.de(a)},bc:function(a){return a===a.parent},wb:function(a){return a.Rf},isFile:function(a){return 32768===(a&
+61440)},O:function(a){return 16384===(a&61440)},Va:function(a){return 40960===(a&61440)},vb:function(a){return 8192===(a&61440)},Df:function(a){return 24576===(a&61440)},Ef:function(a){return 4096===(a&61440)},Hf:function(a){return 49152===(a&49152)},qf:{r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218},je:function(a){var b=d.qf[a];"undefined"===typeof b&&k(Error("Unknown file open mode: "+a));return b},Hc:function(a){var b=
+["r","w","rw"][a&2097155];a&512&&(b+="w");return b},Da:function(a,b){return d.ee?0:-1!==b.indexOf("r")&&!(a.mode&292)||-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73)?g.mc:0},Nf:function(a){return d.Da(a,"x")},Tc:function(a,b){try{return d.ta(a,b),g.ud}catch(c){}return d.Da(a,"wx")},ec:function(a,b,c){var f;try{f=d.ta(a,b)}catch(e){return e.Vb}if(a=d.Da(a,"wx"))return a;if(c){if(!d.O(f.mode))return g.oc;if(d.bc(f)||d.Ba(f)===d.Bc())return g.mb}else if(d.O(f.mode))return g.Sa;
+return 0},Of:function(a,b){return!a?g.Ib:d.Va(a.mode)?g.nc:d.O(a.mode)&&(0!==(b&2097155)||b&512)?g.Sa:d.Da(a,d.Hc(b))},Se:4096,Wf:function(a,b){for(var b=b||d.Se,c=a||1;c<=b;c++)if(!d.jb[c])return c;k(new d.e(g.Me))},D:function(a){return d.jb[a]},Jd:function(a,b,c){d.ob||(d.ob=M(),d.ob.prototype={},Object.defineProperties(d.ob.prototype,{object:{get:function(){return this.k},set:function(a){this.k=a}},Ri:{get:function(){return 1!==(this.I&2097155)}},Si:{get:function(){return 0!==(this.I&2097155)}},
+Qi:{get:function(){return this.I&1024}}}));if(a.__proto__)a.__proto__=d.ob.prototype;else{var f=new d.ob,e;for(e in a)f[e]=a[e];a=f}b=d.Wf(b,c);a.da=b;return d.jb[b]=a},$e:function(a){d.jb[a]=r},Ze:{open:function(a){a.o=d.tf(a.k.Pa).o;a.o.open&&a.o.open(a)},ga:function(){k(new d.e(g.nb))}},Sc:function(a){return a>>8},Yi:function(a){return a&255},Na:function(a,b){return a<<8|b},bd:function(a,b){d.Pd[a]={o:b}},tf:function(a){return d.Pd[a]},Ae:function(a,b){function c(a){if(a)return b(a);++f>=e&&b(r)}
+"function"===typeof a&&(b=a,a=G);for(var f=0,e=d.gc.length,i=0;i<d.gc.length;i++){var h=d.gc[i];h.type.Ae?h.type.Ae(h,a,c):c(r)}},L:function(a,b,c){var f;c&&(f=d.F(c,{T:G}),c=f.path);b={type:a,pe:b,Sf:c,root:r};a=a.L(b);a.L=b;b.root=a;f&&(f.k.L=b,f.k.Rf=q,"/"===c&&(d.root=b.root));d.gc.push(b);return a},Wa:function(a,b){return a.n.Wa(a,b)},Y:function(a,b,c){var f=d.F(a,{parent:q}).k,a=B.wa(a),e=d.Tc(f,a);e&&k(new d.e(e));f.n.Y||k(new d.e(g.ba));return f.n.Y(f,a,b,c)},create:function(a,b){b=(b!==p?
+b:438)&4095;b|=32768;return d.Y(a,b,0)},Xa:function(a,b){b=(b!==p?b:511)&1023;b|=16384;return d.Y(a,b,0)},fc:function(a,b,c){"undefined"===typeof c&&(c=b,b=438);return d.Y(a,b|8192,c)},na:function(a,b){var c=d.F(b,{parent:q}).k,f=B.wa(b),e=d.Tc(c,f);e&&k(new d.e(e));c.n.na||k(new d.e(g.ba));return c.n.na(c,f,a)},rename:function(a,b){var c=B.dirname(a),f=B.dirname(b),e=B.wa(a),i=B.wa(b),h,j,l;try{h=d.F(a,{parent:q}),j=h.k,h=d.F(b,{parent:q}),l=h.k}catch(x){k(new d.e(g.mb))}j.L!==l.L&&k(new d.e(g.Oe));
+h=d.ta(j,e);f=B.te(a,f);"."!==f.charAt(0)&&k(new d.e(g.B));f=B.te(b,c);"."!==f.charAt(0)&&k(new d.e(g.pc));var m;try{m=d.ta(l,i)}catch(s){}if(h!==m){c=d.O(h.mode);(e=d.ec(j,e,c))&&k(new d.e(e));(e=m?d.ec(l,i,c):d.Tc(l,i))&&k(new d.e(e));j.n.rename||k(new d.e(g.ba));(d.wb(h)||m&&d.wb(m))&&k(new d.e(g.mb));l!==j&&(e=d.Da(j,"w"))&&k(new d.e(e));d.de(h);try{j.n.rename(h,l,i)}catch(y){k(y)}finally{d.ce(h)}}},fb:function(a){var b=d.F(a,{parent:q}).k,a=B.wa(a),c=d.ta(b,a),f=d.ec(b,a,q);f&&k(new d.e(f));
+b.n.fb||k(new d.e(g.ba));d.wb(c)&&k(new d.e(g.mb));b.n.fb(b,a);d.Od(c)},bb:function(a){a=d.F(a,{T:q}).k;a.n.bb||k(new d.e(g.oc));return a.n.bb(a)},Ra:function(a){var b=d.F(a,{parent:q}).k,a=B.wa(a),c=d.ta(b,a),f=d.ec(b,a,G);f&&(f===g.Sa&&(f=g.ba),k(new d.e(f)));b.n.Ra||k(new d.e(g.ba));d.wb(c)&&k(new d.e(g.mb));b.n.Ra(b,a);d.Od(c)},Qa:function(a){a=d.F(a,{T:G}).k;a.n.Qa||k(new d.e(g.B));return a.n.Qa(a)},ld:function(a,b){var c=d.F(a,{T:!b}).k;c.n.fa||k(new d.e(g.ba));return c.n.fa(c)},Kf:function(a){return d.ld(a,
+q)},Nb:function(a,b,c){a="string"===typeof a?d.F(a,{T:!c}).k:a;a.n.N||k(new d.e(g.ba));a.n.N(a,{mode:b&4095|a.mode&-4096,timestamp:Date.now()})},Ui:function(a,b){d.Nb(a,b,q)},Gi:function(a,b){var c=d.D(a);c||k(new d.e(g.H));d.Nb(c.k,b)},Gd:function(a,b,c,f){a="string"===typeof a?d.F(a,{T:!f}).k:a;a.n.N||k(new d.e(g.ba));a.n.N(a,{timestamp:Date.now()})},Vi:function(a,b,c){d.Gd(a,b,c,q)},Hi:function(a,b,c){(a=d.D(a))||k(new d.e(g.H));d.Gd(a.k,b,c)},truncate:function(a,b){0>b&&k(new d.e(g.B));var c;
+c="string"===typeof a?d.F(a,{T:q}).k:a;c.n.N||k(new d.e(g.ba));d.O(c.mode)&&k(new d.e(g.Sa));d.isFile(c.mode)||k(new d.e(g.B));var f=d.Da(c,"w");f&&k(new d.e(f));c.n.N(c,{size:b,timestamp:Date.now()})},Ki:function(a,b){var c=d.D(a);c||k(new d.e(g.H));0===(c.I&2097155)&&k(new d.e(g.B));d.truncate(c.k,b)},Cj:function(a,b,c){a=d.F(a,{T:q}).k;a.n.N(a,{timestamp:Math.max(b,c)})},open:function(a,b,c,f,W){var b="string"===typeof b?d.je(b):b,c=b&64?("undefined"===typeof c?438:c)&4095|32768:0,i;if("object"===
+typeof a)i=a;else{a=B.normalize(a);try{i=d.F(a,{T:!(b&131072)}).k}catch(h){}}b&64&&(i?b&128&&k(new d.e(g.ud)):i=d.Y(a,c,0));i||k(new d.e(g.Ib));d.vb(i.mode)&&(b&=-513);(c=d.Of(i,b))&&k(new d.e(c));b&512&&d.truncate(i,0);b&=-641;f=d.Jd({k:i,path:d.Ba(i),I:b,seekable:q,position:0,o:i.o,pd:[],error:G},f,W);f.o.open&&f.o.open(f);e.logReadFiles&&!(b&1)&&(d.$c||(d.$c={}),a in d.$c||(d.$c[a]=1,e.printErr("read file: "+a)));return f},close:function(a){try{a.o.close&&a.o.close(a)}catch(b){k(b)}finally{d.$e(a.da)}},
+ga:function(a,b,c){(!a.seekable||!a.o.ga)&&k(new d.e(g.nb));return a.o.ga(a,b,c)},P:function(a,b,c,f,e){(0>f||0>e)&&k(new d.e(g.B));1===(a.I&2097155)&&k(new d.e(g.H));d.O(a.k.mode)&&k(new d.e(g.Sa));a.o.P||k(new d.e(g.B));var i=q;"undefined"===typeof e?(e=a.position,i=G):a.seekable||k(new d.e(g.nb));b=a.o.P(a,b,c,f,e);i||(a.position+=b);return b},write:function(a,b,c,f,e,i){(0>f||0>e)&&k(new d.e(g.B));0===(a.I&2097155)&&k(new d.e(g.H));d.O(a.k.mode)&&k(new d.e(g.Sa));a.o.write||k(new d.e(g.B));var h=
+q;"undefined"===typeof e?(e=a.position,h=G):a.seekable||k(new d.e(g.nb));a.I&1024&&d.ga(a,0,2);b=a.o.write(a,b,c,f,e,i);h||(a.position+=b);return b},rb:function(a,b,c){(0>b||0>=c)&&k(new d.e(g.B));0===(a.I&2097155)&&k(new d.e(g.H));!d.isFile(a.k.mode)&&!d.O(node.mode)&&k(new d.e(g.Hb));a.o.rb||k(new d.e(g.Kb));a.o.rb(a,b,c)},xb:function(a,b,c,f,e,i,h){1===(a.I&2097155)&&k(new d.e(g.mc));a.o.xb||k(new d.e(g.Hb));return a.o.xb(a,b,c,f,e,i,h)},ub:function(a,b,c){a.o.ub||k(new d.e(g.vd));return a.o.ub(a,
+b,c)},gj:function(a,b){b=b||{};b.I=b.I||"r";b.encoding=b.encoding||"binary";var c,f=d.open(a,b.I),e=d.ld(a).size,i=new Uint8Array(e);d.P(f,i,0,e,0);if("utf8"===b.encoding){c="";for(var h=new l.pb,g=0;g<e;g++)c+=h.ic(i[g])}else"binary"===b.encoding?c=i:k(Error('Invalid encoding type "'+b.encoding+'"'));d.close(f);return c},Fj:function(a,b,c){c=c||{};c.I=c.I||"w";c.encoding=c.encoding||"utf8";a=d.open(a,c.I,c.mode);"utf8"===c.encoding?(b=new Uint8Array((new l.pb).re(b)),d.write(a,b,0,b.length,0)):"binary"===
+c.encoding?d.write(a,b,0,b.length,0):k(Error('Invalid encoding type "'+c.encoding+'"'));d.close(a)},Bc:function(){return d.Ld},wi:function(a){a=d.F(a,{T:q});d.O(a.k.mode)||k(new d.e(g.oc));var b=d.Da(a.k,"x");b&&k(new d.e(b));d.Ld=a.path},bf:function(){d.Xa("/tmp")},af:function(){d.Xa("/dev");d.bd(d.Na(1,3),{P:function(){return 0},write:function(){return 0}});d.fc("/dev/null",d.Na(1,3));Y.se(d.Na(5,0),Y.nf);Y.se(d.Na(6,0),Y.mf);d.fc("/dev/tty",d.Na(5,0));d.fc("/dev/tty1",d.Na(6,0));d.Xa("/dev/shm");
+d.Xa("/dev/shm/tmp")},kf:function(){e.stdin?d.Ia("/dev","stdin",e.stdin):d.na("/dev/tty","/dev/stdin");e.stdout?d.Ia("/dev","stdout",r,e.stdout):d.na("/dev/tty","/dev/stdout");e.stderr?d.Ia("/dev","stderr",r,e.stderr):d.na("/dev/tty1","/dev/stderr");var a=d.open("/dev/stdin","r");t[Ga>>2]=a.da;J(1===a.da,"invalid handle for stdin ("+a.da+")");a=d.open("/dev/stdout","w");t[ma>>2]=a.da;J(2===a.da,"invalid handle for stdout ("+a.da+")");a=d.open("/dev/stderr","w");t[Ha>>2]=a.da;J(3===a.da,"invalid handle for stderr ("+
+a.da+")")},Rd:function(){d.e||(d.e=function(a){this.Vb=a;for(var b in g)if(g[b]===a){this.code=b;break}this.message=Oa[a]},d.e.prototype=Error(),[g.Ib].forEach(function(a){d.Jc[a]=new d.e(a);d.Jc[a].stack="<generic error, no stack>"}))},nd:function(){d.Rd();d.Ca=Array(4096);d.root=d.createNode(r,"/",16895,0);d.L(z,{},"/");d.bf();d.af()},ka:function(a,b,c){J(!d.ka.$b,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");
+d.ka.$b=q;d.Rd();e.stdin=a||e.stdin;e.stdout=b||e.stdout;e.stderr=c||e.stderr;d.kf()},bg:function(){d.ka.$b=G;for(var a=0;a<d.jb.length;a++){var b=d.jb[a];b&&d.close(b)}},La:function(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c},Ti:function(a,b){var c=B.join.apply(r,a);b&&"/"==c[0]&&(c=c.substr(1));return c},li:function(a,b){return B.eb(b,a)},uj:function(a){return B.normalize(a)},Ud:function(a,b){var c=d.tc(a,b);if(c.Fc)return c.object;H(c.error);return r},tc:function(a,b){try{var c=d.F(a,{T:!b}),
+a=c.path}catch(f){}var e={bc:G,Fc:G,error:0,name:r,path:r,object:r,Zf:G,ag:r,$f:r};try{c=d.F(a,{parent:q}),e.Zf=q,e.ag=c.path,e.$f=c.k,e.name=B.wa(a),c=d.F(a,{T:!b}),e.Fc=q,e.path=c.path,e.object=c.k,e.name=c.k.name,e.bc="/"===c.path}catch(i){e.error=i.Vb}return e},df:function(a,b,c,f){a=B.V("string"===typeof a?a:d.Ba(a),b);c=d.La(c,f);return d.Xa(a,c)},gf:function(a,b){for(var a="string"===typeof a?a:d.Ba(a),c=b.split("/").reverse();c.length;){var f=c.pop();if(f){var e=B.V(a,f);try{d.Xa(e)}catch(i){}a=
+e}}return e},cf:function(a,b,c,f,e){a=B.V("string"===typeof a?a:d.Ba(a),b);f=d.La(f,e);return d.create(a,f)},zc:function(a,b,c,f,e,i){a=b?B.V("string"===typeof a?a:d.Ba(a),b):a;f=d.La(f,e);e=d.create(a,f);if(c){if("string"===typeof c){for(var a=Array(c.length),b=0,h=c.length;b<h;++b)a[b]=c.charCodeAt(b);c=a}d.Nb(e,f|146);a=d.open(e,"w");d.write(a,c,0,c.length,0,i);d.close(a);d.Nb(e,f)}return e},Ia:function(a,b,c,f){a=B.V("string"===typeof a?a:d.Ba(a),b);b=d.La(!!c,!!f);d.Ia.Sc||(d.Ia.Sc=64);var e=
+d.Na(d.Ia.Sc++,0);d.bd(e,{open:function(a){a.seekable=G},close:function(){f&&(f.buffer&&f.buffer.length)&&f(10)},P:function(a,b,f,e){for(var W=0,m=0;m<e;m++){var s;try{s=c()}catch(y){k(new d.e(g.Ea))}s===p&&0===W&&k(new d.e(g.lb));if(s===r||s===p)break;W++;b[f+m]=s}W&&(a.k.timestamp=Date.now());return W},write:function(a,b,c,e){for(var W=0;W<e;W++)try{f(b[c+W])}catch(m){k(new d.e(g.Ea))}e&&(a.k.timestamp=Date.now());return W}});return d.fc(a,b,e)},ff:function(a,b,c){a=B.V("string"===typeof a?a:d.Ba(a),
+b);return d.na(c,a)},Yd:function(a){if(a.Oc||a.Pc||a.link||a.u)return q;var b=q;"undefined"!==typeof XMLHttpRequest&&k(Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."));if(e.read)try{a.u=V(e.read(a.url),q)}catch(c){b=G}else k(Error("Cannot load without read() or XMLHttpRequest."));b||H(g.Ea);return b},ef:function(a,b,c,f,e){if("undefined"!==typeof XMLHttpRequest){Xa||
+k("Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc");var i=function(){this.Rc=G;this.Pb=[]};i.prototype.get=function(a){if(!(a>this.length-1||0>a)){var b=a%this.Ob;return this.xf(Math.floor(a/this.Ob))[b]}};i.prototype.kg=function(a){this.xf=a};i.prototype.Ed=function(){var a=new XMLHttpRequest;a.open("HEAD",c,G);a.send(r);200<=a.status&&300>a.status||304===a.status||k(Error("Couldn't load "+c+". Status: "+a.status));var b=Number(a.getResponseHeader("Content-length")),
+d,f=1048576;if(!((d=a.getResponseHeader("Accept-Ranges"))&&"bytes"===d))f=b;var e=this;e.kg(function(a){var d=a*f,i=(a+1)*f-1,i=Math.min(i,b-1);if("undefined"===typeof e.Pb[a]){var h=e.Pb;d>i&&k(Error("invalid range ("+d+", "+i+") or no bytes requested!"));i>b-1&&k(Error("only "+b+" bytes available! programmer error!"));var g=new XMLHttpRequest;g.open("GET",c,G);b!==f&&g.setRequestHeader("Range","bytes="+d+"-"+i);"undefined"!=typeof Uint8Array&&(g.responseType="arraybuffer");g.overrideMimeType&&g.overrideMimeType("text/plain; charset=x-user-defined");
+g.send(r);200<=g.status&&300>g.status||304===g.status||k(Error("Couldn't load "+c+". Status: "+g.status));d=g.response!==p?new Uint8Array(g.response||[]):V(g.responseText||"",q);h[a]=d}"undefined"===typeof e.Pb[a]&&k(Error("doXHR failed!"));return e.Pb[a]});this.Ve=b;this.Ue=f;this.Rc=q};i=new i;Object.defineProperty(i,"length",{get:function(){this.Rc||this.Ed();return this.Ve}});Object.defineProperty(i,"chunkSize",{get:function(){this.Rc||this.Ed();return this.Ue}});i={Oc:G,u:i}}else i={Oc:G,url:c};
+var h=d.cf(a,b,i,f,e);i.u?h.u=i.u:i.url&&(h.u=r,h.url=i.url);var j={};Object.keys(h.o).forEach(function(a){var b=h.o[a];j[a]=function(){d.Yd(h)||k(new d.e(g.Ea));return b.apply(r,arguments)}});j.P=function(a,b,c,f,e){d.Yd(h)||k(new d.e(g.Ea));a=a.k.u;if(e>=a.length)return 0;f=Math.min(a.length-e,f);J(0<=f);if(a.slice)for(var A=0;A<f;A++)b[c+A]=a[e+A];else for(A=0;A<f;A++)b[c+A]=a.get(e+A);return f};h.o=j;return h},hf:function(a,b,c,f,g,i,h,j,l){function x(c){function y(c){j||d.zc(a,b,c,f,g,l);i&&
+i();Ma()}var A=G;e.preloadPlugins.forEach(function(a){!A&&a.canHandle(m)&&(a.handle(c,m,y,function(){h&&h();Ma()}),A=q)});A||y(c)}n.ka();var m=b?B.eb(B.V(a,b)):a;db();"string"==typeof c?n.Xe(c,function(a){x(a)},h):x(c)},indexedDB:function(){return window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB},sd:function(){return"EM_FS_"+window.location.pathname},td:20,kb:"FILE_DATA",sj:function(a,b,c){var b=b||M(),c=c||M(),f=d.indexedDB();try{var e=f.open(d.sd(),d.td)}catch(i){return c(i)}e.Yf=
+function(){console.log("creating db");e.result.createObjectStore(d.kb)};e.onsuccess=function(){var f=e.result.transaction([d.kb],"readwrite"),i=f.objectStore(d.kb),g=0,l=0,m=a.length;a.forEach(function(a){a=i.put(d.tc(a).object.u,a);a.onsuccess=function(){g++;g+l==m&&(0==l?b():c())};a.onerror=function(){l++;g+l==m&&(0==l?b():c())}});f.onerror=c};e.onerror=c},Xi:function(a,b,c){var b=b||M(),c=c||M(),f=d.indexedDB();try{var e=f.open(d.sd(),d.td)}catch(i){return c(i)}e.Yf=c;e.onsuccess=function(){var f=
+e.result;try{var i=f.transaction([d.kb],"readonly")}catch(g){c(g);return}var l=i.objectStore(d.kb),m=0,n=0,y=a.length;a.forEach(function(a){var f=l.get(a);f.onsuccess=function(){d.tc(a).Fc&&d.Ra(a);d.zc(B.dirname(a),B.wa(a),f.result,q,q,q);m++;m+n==y&&(0==n?b():c())};f.onerror=function(){n++;m+n==y&&(0==n?b():c())}});i.onerror=c};e.onerror=c}},K={L:function(){return d.createNode(r,"/",16895,0)},jf:function(a,b,c){c&&J(1==b==(6==c));a={pf:a,type:b,protocol:c,M:r,Cb:{},Yc:[],cb:[],hb:K.S};b=K.hc();
+c=d.createNode(K.root,b,49152,0);c.gb=a;b=d.Jd({path:b,k:c,I:d.je("r+"),seekable:G,o:K.o});a.ma=b;return a},ae:function(a){a=d.D(a);return!a||!d.Hf(a.k.mode)?r:a.k.gb},o:{qe:function(a){a=a.k.gb;return a.hb.qe(a)},ub:function(a,b,c){a=a.k.gb;return a.hb.ub(a,b,c)},P:function(a,b,c,d){a=a.k.gb;d=a.hb.dg(a,d);if(!d)return 0;b.set(d.buffer,c);return d.buffer.length},write:function(a,b,c,d){a=a.k.gb;return a.hb.ig(a,b,c,d)},close:function(a){a=a.k.gb;a.hb.close(a)}},hc:function(){K.hc.Kd||(K.hc.Kd=0);
+return"socket["+K.hc.Kd++ +"]"},S:{Rb:function(a,b,c){var f;"object"===typeof b&&(f=b,c=b=r);if(f)f._socket?(b=f._socket.remoteAddress,c=f._socket.remotePort):((c=/ws[s]?:\/\/([^:]+):(\d+)/.exec(f.url))||k(Error("WebSocket URL must be in the format ws(s)://address:port")),b=c[1],c=parseInt(c[2],10));else try{var e=ca?{headers:{"websocket-protocol":["binary"]}}:["binary"];f=new (ca?require("ws"):window.WebSocket)("ws://"+b+":"+c,e);f.binaryType="arraybuffer"}catch(i){k(new d.e(g.Je))}b={oa:b,port:c,
+q:f,Sb:[]};K.S.Dd(a,b);K.S.Af(a,b);2===a.type&&"undefined"!==typeof a.ib&&b.Sb.push(new Uint8Array([255,255,255,255,112,111,114,116,(a.ib&65280)>>8,a.ib&255]));return b},Xb:function(a,b,c){return a.Cb[b+":"+c]},Dd:function(a,b){a.Cb[b.oa+":"+b.port]=b},ue:function(a,b){delete a.Cb[b.oa+":"+b.port]},Af:function(a,b){function c(){try{for(var a=b.Sb.shift();a;)b.q.send(a),a=b.Sb.shift()}catch(c){b.q.close()}}function d(c){J("string"!==typeof c&&c.byteLength!==p);var c=new Uint8Array(c),f=e;e=G;f&&10===
+c.length&&255===c[0]&&255===c[1]&&255===c[2]&&255===c[3]&&112===c[4]&&111===c[5]&&114===c[6]&&116===c[7]?(c=c[8]<<8|c[9],K.S.ue(a,b),b.port=c,K.S.Dd(a,b)):a.cb.push({oa:b.oa,port:b.port,data:c})}var e=q;ca?(b.q.on("open",c),b.q.on("message",function(a,b){b.binary&&d((new Uint8Array(a)).buffer)}),b.q.on("error",M())):(b.q.onopen=c,b.q.onmessage=function(a){d(a.data)})},qe:function(a){if(1===a.type&&a.M)return a.Yc.length?65:0;var b=0,c=1===a.type?K.S.Xb(a,a.pa,a.qa):r;if(a.cb.length||!c||c&&c.q.readyState===
+c.q.Gb||c&&c.q.readyState===c.q.CLOSED)b|=65;if(!c||c&&c.q.readyState===c.q.OPEN)b|=4;if(c&&c.q.readyState===c.q.Gb||c&&c.q.readyState===c.q.CLOSED)b|=16;return b},ub:function(a,b,c){switch(b){case 21531:return b=0,a.cb.length&&(b=a.cb[0].data.length),t[c>>2]=b,0;default:return g.B}},close:function(a){if(a.M){try{a.M.close()}catch(b){}a.M=r}for(var c=Object.keys(a.Cb),d=0;d<c.length;d++){var e=a.Cb[c[d]];try{e.q.close()}catch(g){}K.S.ue(a,e)}return 0},bind:function(a,b,c){("undefined"!==typeof a.ed||
+"undefined"!==typeof a.ib)&&k(new d.e(g.B));a.ed=b;a.ib=c||p();if(2===a.type){a.M&&(a.M.close(),a.M=r);try{a.hb.Jf(a,0)}catch(f){f instanceof d.e||k(f),f.Vb!==g.Kb&&k(f)}}},zi:function(a,b,c){a.M&&k(new d.e(ERRNO_CODS.Kb));if("undefined"!==typeof a.pa&&"undefined"!==typeof a.qa){var f=K.S.Xb(a,a.pa,a.qa);f&&(f.q.readyState===f.q.CONNECTING&&k(new d.e(g.He)),k(new d.e(g.Le)))}b=K.S.Rb(a,b,c);a.pa=b.oa;a.qa=b.port;k(new d.e(g.Ke))},Jf:function(a){ca||k(new d.e(g.Kb));a.M&&k(new d.e(g.B));var b=require("ws").Server;
+a.M=new b({host:a.ed,port:a.ib});a.M.on("connection",function(b){if(1===a.type){var d=K.jf(a.pf,a.type,a.protocol),b=K.S.Rb(d,b);d.pa=b.oa;d.qa=b.port;a.Yc.push(d)}else K.S.Rb(a,b)});a.M.on("closed",function(){a.M=r});a.M.on("error",M())},accept:function(a){a.M||k(new d.e(g.B));var b=a.Yc.shift();b.ma.I=a.ma.I;return b},Oi:function(a,b){var c,f;b?((a.pa===p||a.qa===p)&&k(new d.e(g.Jb)),c=a.pa,f=a.qa):(c=a.ed||0,f=a.ib||0);return{oa:c,port:f}},ig:function(a,b,c,f,e,i){if(2===a.type){if(e===p||i===
+p)e=a.pa,i=a.qa;(e===p||i===p)&&k(new d.e(g.Ie))}else e=a.pa,i=a.qa;var h=K.S.Xb(a,e,i);1===a.type&&((!h||h.q.readyState===h.q.Gb||h.q.readyState===h.q.CLOSED)&&k(new d.e(g.Jb)),h.q.readyState===h.q.CONNECTING&&k(new d.e(g.lb)));b=b instanceof Array||b instanceof ArrayBuffer?b.slice(c,c+f):b.buffer.slice(b.byteOffset+c,b.byteOffset+c+f);if(2===a.type&&(!h||h.q.readyState!==h.q.OPEN)){if(!h||h.q.readyState===h.q.Gb||h.q.readyState===h.q.CLOSED)h=K.S.Rb(a,e,i);h.Sb.push(b);return f}try{return h.q.send(b),
+f}catch(j){k(new d.e(g.B))}},dg:function(a,b){1===a.type&&a.M&&k(new d.e(g.Jb));var c=a.cb.shift();if(!c){if(1===a.type){var f=K.S.Xb(a,a.pa,a.qa);if(f){if(f.q.readyState===f.q.Gb||f.q.readyState===f.q.CLOSED)return r;k(new d.e(g.lb))}k(new d.e(g.Jb))}k(new d.e(g.lb))}var f=c.data.byteLength||c.data.length,e=c.data.byteOffset||0,i=c.data.buffer||c.data,h=Math.min(b,f),j={buffer:new Uint8Array(i,e,h),oa:c.oa,port:c.port};1===a.type&&h<f&&(c.data=new Uint8Array(i,e+h,f-h),a.cb.unshift(c));return j}}},
+sc=ac;e._tolower=tc;var uc=ic,vc=jc,wc=kc,xc=oc,yc=nc,zc=Ia;e._strcpy=Ac;var dc=0;e._strcat=Bc;var Cc=lc,Dc=ua,Hb=D(1,"i32*",S),U={};e._saveSetjmp=Ec;e._testSetjmp=Fc;e._strncpy=Gc;var Hc=Ja,Ic=mc,Jc=ua,Kc=ac,Lc=pc,n={ua:{hg:r,we:G,paused:G,fj:[],pause:function(){n.ua.we=q},fg:function(){n.ua.paused&&(n.ua.paused=G,n.ua.hg());n.ua.we=G},updateStatus:function(){if(e.setStatus){var a=e.statusMessage||"Please wait...",b=n.ua.kj,c=n.ua.Ei;b?b<c?e.setStatus(a+" ("+(c-b)+"/"+c+")"):e.setStatus(a):e.setStatus("")}}},
+Qc:G,Zc:G,Qf:[],Ej:[],ka:function(){function a(){n.Zc=document.pointerLockElement===c||document.mozPointerLockElement===c||document.webkitPointerLockElement===c}e.preloadPlugins||(e.preloadPlugins=[]);if(!n.Bf&&!Xa){n.Bf=q;try{new Blob,n.Zb=q}catch(b){n.Zb=G,console.log("warning: no blob constructor, cannot create blobs with mimetypes")}n.BlobBuilder="undefined"!=typeof MozBlobBuilder?MozBlobBuilder:"undefined"!=typeof WebKitBlobBuilder?WebKitBlobBuilder:!n.Zb?console.log("warning: no BlobBuilder"):
+r;n.Mb="undefined"!=typeof window?window.URL?window.URL:window.webkitURL:p;!e.oe&&"undefined"===typeof n.Mb&&(console.log("warning: Browser does not support creating object URLs. Built-in browser image decoding will not be available."),e.oe=q);e.preloadPlugins.push({canHandle:function(a){return!e.oe&&/\.(jpg|jpeg|png|bmp)$/i.test(a)},handle:function(a,b,c,d){var g=r;if(n.Zb)try{g=new Blob([a],{type:n.Kc(b)}),g.size!==a.length&&(g=new Blob([(new Uint8Array(a)).buffer],{type:n.Kc(b)}))}catch(u){l.Fb("Blob constructor present but fails: "+
+u+"; falling back to blob builder")}g||(g=new n.BlobBuilder,g.append((new Uint8Array(a)).buffer),g=g.getBlob());var x=n.Mb.createObjectURL(g),m=new Image;m.onload=function(){J(m.complete,"Image "+b+" could not be decoded");var d=document.createElement("canvas");d.width=m.width;d.height=m.height;d.getContext("2d").drawImage(m,0,0);e.preloadedImages[b]=d;n.Mb.revokeObjectURL(x);c&&c(a)};m.onerror=function(){console.log("Image "+x+" could not be decoded");d&&d()};m.src=x}});e.preloadPlugins.push({canHandle:function(a){return!e.aj&&
+a.substr(-4)in{".ogg":1,".wav":1,".mp3":1}},handle:function(a,b,c,d){function g(d){x||(x=q,e.preloadedAudios[b]=d,c&&c(a))}function l(){x||(x=q,e.preloadedAudios[b]=new Audio,d&&d())}var x=G;if(n.Zb){try{var m=new Blob([a],{type:n.Kc(b)})}catch(s){return l()}var m=n.Mb.createObjectURL(m),y=new Audio;y.addEventListener("canplaythrough",function(){g(y)},G);y.onerror=function(){if(!x){console.log("warning: browser could not fully decode audio "+b+", trying slower base64 approach");for(var c="",d=0,e=
+0,i=0;i<a.length;i++){d=d<<8|a[i];for(e+=8;6<=e;)var h=d>>e-6&63,e=e-6,c=c+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[h]}2==e?(c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(d&3)<<4],c+="=="):4==e&&(c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(d&15)<<2],c+="=");y.src="data:audio/x-"+b.substr(-3)+";base64,"+c;g(y)}};y.src=m;n.gg(function(){g(y)},1E4)}else return l()}});var c=e.canvas;c.dd=c.requestPointerLock||c.mozRequestPointerLock||
+c.webkitRequestPointerLock;c.Td=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||M();c.Td=c.Td.bind(document);document.addEventListener("pointerlockchange",a,G);document.addEventListener("mozpointerlockchange",a,G);document.addEventListener("webkitpointerlockchange",a,G);e.elementPointerLock&&c.addEventListener("click",function(a){!n.Zc&&c.dd&&(c.dd(),a.preventDefault())},G)}},Ai:function(a,b,c,d){var g;try{if(b){var i={antialias:G,alpha:G};if(d)for(var h in d)i[h]=
+d[h];var j="?",d=function(a){j=a.statusMessage||j};a.addEventListener("webglcontextcreationerror",d,G);try{["experimental-webgl","webgl"].some(function(b){return g=a.getContext(b,i)})}finally{a.removeEventListener("webglcontextcreationerror",d,G)}}else g=a.getContext("2d");g||k(":(")}catch(l){return e.print("Could not create canvas: "+[j,l]),r}b&&(a.style.backgroundColor="black",a.addEventListener("webglcontextlost",function(){alert("WebGL context lost. You will need to reload the page.")},G));c&&
+(GLctx=e.Bi=g,e.Bj=b,n.Qf.forEach(function(a){a()}),n.ka());return g},Ci:M(),Zd:G,dc:p,Db:p,cd:function(a,b){function c(){n.Qc=G;(document.webkitFullScreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.mozFullscreenElement||document.fullScreenElement||document.fullscreenElement)===d?(d.Fd=document.cancelFullScreen||document.mozCancelFullScreen||document.webkitCancelFullScreen,d.Fd=d.Fd.bind(document),n.dc&&d.dd(),n.Qc=q,n.Db&&n.lg()):n.Db&&n.mg();if(e.onFullScreen)e.onFullScreen(n.Qc)}
+n.dc=a;n.Db=b;"undefined"===typeof n.dc&&(n.dc=q);"undefined"===typeof n.Db&&(n.Db=G);var d=e.canvas;n.Zd||(n.Zd=q,document.addEventListener("fullscreenchange",c,G),document.addEventListener("mozfullscreenchange",c,G),document.addEventListener("webkitfullscreenchange",c,G));d.cd=d.requestFullScreen||d.mozRequestFullScreen||(d.webkitRequestFullScreen?function(){d.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:r);d.cd()},requestAnimationFrame:function(a){"undefined"===typeof window?setTimeout(a,
+1E3/60):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||window.setTimeout),window.requestAnimationFrame(a))},pj:function(a){return function(){if(!ba)return a.apply(r,arguments)}},qj:function(a){return n.requestAnimationFrame(function(){ba||a()})},gg:function(a,b){return setTimeout(function(){ba||a()},b)},rj:function(a,b){return setInterval(function(){ba||
+a()},b)},Kc:function(a){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[a.substr(a.lastIndexOf(".")+1)]},Yb:function(a){window.Yb||(window.Yb=navigator.getUserMedia||navigator.mozGetUserMedia);window.Yb(a)},vf:function(a){return a.movementX||a.mozMovementX||a.webkitMovementX||0},wf:function(a){return a.movementY||a.mozMovementY||a.webkitMovementY||0},Ya:0,Za:0,yb:0,zb:0,ui:function(a){if(n.Zc)"mousemove"!=a.type&&"mozMovementX"in
+a?n.yb=n.zb=0:(n.yb=n.vf(a),n.zb=n.wf(a)),"undefined"!=typeof SDL?(n.Ya=SDL.Ya+n.yb,n.Za=SDL.Za+n.zb):(n.Ya+=n.yb,n.Za+=n.zb);else{var b=e.canvas.getBoundingClientRect(),c,d;c="undefined"!==typeof window.scrollX?window.scrollX:window.pageXOffset;d="undefined"!==typeof window.scrollY?window.scrollY:window.pageYOffset;if("touchstart"==a.type||"touchend"==a.type||"touchmove"==a.type)if(a=a.touches.item(0))c=a.pageX-(c+b.left),d=a.pageY-(d+b.top);else return;else c=a.pageX-(c+b.left),d=a.pageY-(d+b.top);
+a=e.canvas.height;c*=e.canvas.width/b.width;d*=a/b.height;n.yb=c-n.Ya;n.zb=d-n.Za;n.Ya=c;n.Za=d}},qg:function(a,b,c){var d=new XMLHttpRequest;d.open("GET",a,q);d.responseType="arraybuffer";d.onload=function(){200==d.status||0==d.status&&d.response?b(d.response):c()};d.onerror=c;d.send(r)},Xe:function(a,b,c,d){n.qg(a,function(c){J(c,'Loading data file "'+a+'" failed (no arrayBuffer).');b(new Uint8Array(c));d||Ma()},function(){c?c():k('Loading data file "'+a+'" failed.')});d||db()},eg:[],qd:function(){var a=
+e.canvas;n.eg.forEach(function(b){b(a.width,a.height)})},jg:function(a,b,c){var d=e.canvas;d.width=a;d.height=b;c||n.qd()},Fe:0,Ee:0,lg:function(){var a=e.canvas;this.Fe=a.width;this.Ee=a.height;a.width=screen.width;a.height=screen.height;"undefined"!=typeof SDL&&(a=Ya[SDL.screen+0*l.Fa>>2],t[SDL.screen+0*l.Fa>>2]=a|8388608);n.qd()},mg:function(){var a=e.canvas;a.width=this.Fe;a.height=this.Ee;"undefined"!=typeof SDL&&(a=Ya[SDL.screen+0*l.Fa>>2],t[SDL.screen+0*l.Fa>>2]=a&-8388609);n.qd()}};d.nd();
+ka.unshift({Ka:function(){!e.noFSInit&&!d.ka.$b&&d.ka()}});lb.push({Ka:function(){d.ee=G}});Ua.push({Ka:function(){d.bg()}});e.FS_createFolder=d.df;e.FS_createPath=d.gf;e.FS_createDataFile=d.zc;e.FS_createPreloadedFile=d.hf;e.FS_createLazyFile=d.ef;e.FS_createLink=d.ff;e.FS_createDevice=d.Ia;Na=l.md(4);t[Na>>2]=0;ka.unshift({Ka:function(){Y.ka()}});Ua.push({Ka:M()});Y.De=new l.pb;if(ca){var O=require("fs");I.nd()}ka.push({Ka:function(){K.root=d.L(K,{},r)}});dc=l.md(4);Ca(U);ra.$=D([0],"i8",S);Ea.$=
+D([0],"i8",S);e.requestFullScreen=function(a,b){n.cd(a,b)};e.requestAnimationFrame=function(a){n.requestAnimationFrame(a)};e.setCanvasSize=function(a,b,c){n.jg(a,b,c)};e.pauseMainLoop=function(){n.ua.pause()};e.resumeMainLoop=function(){n.ua.fg()};e.getUserMedia=function(){n.Yb()};Zb=X=l.qb(la);nb=Zb+5242880;$b=Z=l.qb(nb);J($b<ha,"TOTAL_MEMORY not big enough for stack");var Mc=D([8,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"i8",3),Nc=D([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,
+1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",3),va=Math.min;var u=(function(global,env,buffer) {
+// EMSCRIPTEN_START_ASM
+"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.STACKTOP|0;var j=env.STACK_MAX|0;var k=env.tempDoublePtr|0;var l=env.ABORT|0;var m=env.cttz_i8|0;var n=env.ctlz_i8|0;var o=env._stderr|0;var p=env._stdout|0;var q=env._stdin|0;var r=env.___fsmu8|0;var s=+env.NaN;var t=+env.Infinity;var u=0;var v=0;var w=0;var x=0;var y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0.0;var H=0;var I=0;var J=0;var K=0;var L=0;var M=0;var N=0;var O=0;var P=0;var Q=0;var R=global.Math.floor;var S=global.Math.abs;var T=global.Math.sqrt;var U=global.Math.pow;var V=global.Math.cos;var W=global.Math.sin;var X=global.Math.tan;var Y=global.Math.acos;var Z=global.Math.asin;var _=global.Math.atan;var $=global.Math.atan2;var aa=global.Math.exp;var ba=global.Math.log;var ca=global.Math.ceil;var da=global.Math.imul;var ea=env.abort;var fa=env.assert;var ga=env.asmPrintInt;var ha=env.asmPrintFloat;var ia=env.min;var ja=env.invoke_viiiii;var ka=env.invoke_vi;var la=env.invoke_vii;var ma=env.invoke_ii;var na=env.invoke_iiiff;var oa=env.invoke_iiiiii;var pa=env.invoke_iiii;var qa=env.invoke_viiiiii;var ra=env.invoke_iiiiidddd;var sa=env.invoke_di;var ta=env.invoke_dd;var ua=env.invoke_dddd;var va=env.invoke_viiiiiiiii;var wa=env.invoke_iii;var xa=env.invoke_d;var ya=env.invoke_i;var za=env.invoke_viiiddi;var Aa=env.invoke_iiiii;var Ba=env.invoke_viii;var Ca=env.invoke_v;var Da=env.invoke_viiii;var Ea=env._llvm_lifetime_end;var Fa=env._lseek;var Ga=env.__scanString;var Ha=env._fclose;var Ia=env._fflush;var Ja=env._strtol;var Ka=env._fputc;var La=env._strtok;var Ma=env._fwrite;var Na=env._send;var Oa=env._fputs;var Pa=env._tmpnam;var Qa=env._isspace;var Ra=env._read;var Sa=env._ceil;var Ta=env._fileno;var Ua=env._strstr;var Va=env._fsync;var Wa=env._isblank;var Xa=env._fmod;var Ya=env._strcmp;var Za=env._strncmp;var _a=env._tmpfile;var $a=env._snprintf;var ab=env._fgetc;var bb=env.__getFloat;var cb=env._hypot;var db=env._fgets;var eb=env._close;var fb=env._getgid;var gb=env._strchr;var hb=env._asin;var ib=env._puts;var jb=env.___setErrNo;var kb=env._access;var lb=env._ftell;var mb=env._exit;var nb=env._sprintf;var ob=env._strrchr;var pb=env._copysign;var qb=env._recv;var rb=env._cos;var sb=env._putchar;var tb=env._isalnum;var ub=env._times;var vb=env._bsearch;var wb=env.__exit;var xb=env._isupper;var yb=env._rand;var zb=env._fabsf;var Ab=env._setlocale;var Bb=env._bcopy;var Cb=env._toupper;var Db=env._pread;var Eb=env._fopen;var Fb=env._open;var Gb=env._sqrtf;var Hb=env._sysconf;var Ib=env._putenv;var Jb=env._qsort;var Kb=env._isalpha;var Lb=env._strdup;var Mb=env._log10;var Nb=env._fread;var Ob=env._isatty;var Pb=env.__formatString;var Qb=env._getenv;var Rb=env._atoi;var Sb=env._vfprintf;var Tb=env._llvm_pow_f64;var Ub=env._sbrk;var Vb=env.___errno_location;var Wb=env._strerror;var Xb=env._fstat;var Yb=env._llvm_lifetime_start;var Zb=env.__parseInt;var _b=env._vsprintf;var $b=env._vsnprintf;var ac=env._sscanf;var bc=env._feof;var cc=env.___assert_fail;var dc=env._srand;var ec=env._strtok_r;var fc=env._abort;var gc=env._fprintf;var hc=env._tan;var ic=env.___buildEnvironment;var jc=env._fabs;var kc=env._floor;var lc=env.__reallyNegative;var mc=env._fseek;var nc=env._sqrt;var oc=env._write;var pc=env._sin;var qc=env._stat;var rc=env._longjmp;var sc=env._strpbrk;var tc=env._llvm_va_end;var uc=env._acos;var vc=env._pwrite;var wc=env._strerror_r;var xc=env._atan2;var yc=env._exp;var zc=env._time;var Ac=0.0;
+// EMSCRIPTEN_START_FUNCS
+function gj(){var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=i;i=i+1200|0;f=e|0;g=e+400|0;c[44690]=0;c[44694]=-2;h=0;j=0;k=f;l=f;m=200;n=g;o=g;a:while(1){b[l>>1]=h;if((k+(m-1<<1)|0)>>>0>l>>>0){p=k;q=l;r=m;s=n;t=o}else{g=l-k>>1;u=g+1|0;if(m>>>0>9999>>>0){v=109;break}w=m<<1;x=w>>>0>1e4>>>0?1e4:w;w=dF(x*6|0|3)|0;if((w|0)==0){v=109;break}y=w;z=k;tF(w|0,z|0,u<<1)|0;A=w+((x>>>1&1073741823)<<2)|0;tF(A|0,o|0,u<<2)|0;if((k|0)!=(f|0)){eF(z)}if((x-1|0)>(g|0)){p=y;q=y+(g<<1)|0;r=x;s=A+(g<<2)|0;t=A}else{B=y;C=1;break}}if((h|0)==29){B=p;C=0;break}y=b[22400+(h<<1)>>1]|0;A=y<<16>>16;do{if(y<<16>>16==-72){v=22}else{g=c[44694]|0;if((g|0)==-2){x=Ci()|0;c[44694]=x;D=x}else{D=g}do{if((D|0)<1){c[44694]=0;E=0}else{if(D>>>0>=294>>>0){E=2;break}E=d[21648+D|0]|0}}while(0);g=E+A|0;if(g>>>0>227>>>0){v=22;break}if((a[22768+g|0]|0)!=(E|0)){v=22;break}x=a[21944+g|0]|0;g=x<<24>>24;if(x<<24>>24<1){F=-g|0;v=23;break}else{c[44694]=-2;x=s+4|0;c[x>>2]=c[44692];G=g;H=(j|0)==0?0:j-1|0;I=q;J=x;break}}}while(0);do{if((v|0)==22){v=0;A=a[22656+h|0]|0;if(A<<24>>24!=0){F=A&255;v=23;break}A=c[44694]|0;do{if((j|0)==0){c[44690]=(c[44690]|0)+1;vi(127664);K=q;L=s;M=y}else if((j|0)==3){if((A|0)<1){if((A|0)==0){B=p;C=1;break a}else{K=q;L=s;M=y;break}}else{c[44694]=-2;K=q;L=s;M=y;break}}else{K=q;L=s;M=y}}while(0);while(1){if(M<<16>>16!=-72){A=(M<<16>>16)+1|0;if(M<<16>>16>-2&(A|0)<228&(A|0)==12){break}}if((K|0)==(p|0)){B=p;C=1;break a}A=K-2|0;K=A;L=L-4|0;M=b[22400+(b[A>>1]<<1)>>1]|0}A=L+4|0;c[A>>2]=c[44692];G=1;H=3;I=K;J=A}}while(0);b:do{if((v|0)==23){v=0;y=d[22176+F|0]|0;A=1-y|0;x=s+(A<<2)|0;g=c[x>>2]|0;switch(F|0){case 22:{z=c[53690]|0;u=c[z+4>>2]|0;eF(z);c[53690]=u;N=g;break};case 23:{kj(c[s>>2]|0);N=g;break};case 41:{N=c[s-4>>2]|0;break};case 18:{u=c[53690]|0;z=c[u+4>>2]|0;eF(u);c[53690]=z;N=g;break};case 5:{N=ij()|0;break};case 52:{z=c[s-4>>2]|0;u=c[s>>2]|0;w=jk(16)|0;O=c[53698]|0;P=c[O+84>>2]|0;Q=c[(Hc[c[P>>2]&63](P,0,256)|0)+8>>2]|0;c[w+8>>2]=z;Hc[c[Q>>2]&63](Q,w,1)|0;a[z+92|0]=1;if((a[O+112|0]&1)!=0){a[z+100|0]=1}c[z+88>>2]=u;N=g;break};case 38:{N=c[s-4>>2]|0;break};case 32:{N=c[s>>2]|0;break};case 57:{N=c[s-12>>2]|0;break};case 58:{u=c[s>>2]|0;z=ij()|0;O=jk(16)|0;w=c[53698]|0;Q=c[w+84>>2]|0;P=c[(Hc[c[Q>>2]&63](Q,0,256)|0)+8>>2]|0;c[O+8>>2]=u;Hc[c[P>>2]&63](P,O,1)|0;a[u+92|0]=2;if((a[w+112|0]&1)!=0){a[u+100|0]=1}c[u+88>>2]=z;N=g;break};case 46:{a[(c[s-8>>2]|0)+12|0]=1;N=c[s>>2]|0;break};case 47:{z=$g(71032,c[43328]|0)|0;u=c[53698]|0;w=jk(16)|0;c[w+8>>2]=z;if((a[u+112|0]&2)!=0){a[w+12|0]=1}z=c[u+84>>2]|0;Hc[c[z>>2]&63](z,w,1)|0;N=g;break};case 44:{N=c[s>>2]|0;break};case 45:{N=c[s>>2]|0;break};case 39:{N=c[s-4>>2]|0;break};case 21:{kj(c[s>>2]|0);N=g;break};case 17:{kj(c[s>>2]|0);N=g;break};case 9:{jj(c[s>>2]|0);N=g;break};case 24:{w=c[53690]|0;z=c[w+4>>2]|0;eF(w);c[53690]=z;N=g;break};case 25:{kj(c[s>>2]|0);N=g;break};case 40:{N=c[s-4>>2]|0;break};case 37:{N=c[s>>2]|0;break};case 19:{kj(c[s>>2]|0);N=g;break};case 55:{N=c[s-12>>2]|0;break};case 56:{z=c[s-4>>2]|0;w=c[s>>2]|0;u=jk(16)|0;O=c[53698]|0;P=c[O+84>>2]|0;Q=c[(Hc[c[P>>2]&63](P,0,256)|0)+8>>2]|0;c[u+8>>2]=z;Hc[c[Q>>2]&63](Q,u,1)|0;a[z+92|0]=3;if((a[O+112|0]&1)!=0){a[z+100|0]=1}c[z+88>>2]=w;N=g;break};case 53:{N=c[s-12>>2]|0;break};case 49:{N=c[s>>2]|0;break};case 50:{N=c[s>>2]|0;break};case 51:{w=(c[s-8>>2]|0)+100|0;a[w]=a[w]|1;N=c[s>>2]|0;break};case 54:{w=c[s-4>>2]|0;z=c[s>>2]|0;O=jk(16)|0;u=c[53698]|0;Q=c[u+84>>2]|0;P=c[(Hc[c[Q>>2]&63](Q,0,256)|0)+8>>2]|0;c[O+8>>2]=w;Hc[c[P>>2]&63](P,O,1)|0;a[w+92|0]=2;if((a[u+112|0]&1)!=0){a[w+100|0]=1}c[w+88>>2]=z;N=g;break};case 4:{v=26;break a;break};case 8:{z=c[53692]|0;w=jk(64)|0;u=z+4|0;O=c[u>>2]|0;if(O>>>0<(c[z+8>>2]|0)>>>0){R=O}else{Jv(z,1)|0;R=c[u>>2]|0}a[R]=0;O=c[z>>2]|0;c[u>>2]=O;c[w+8>>2]=Lb(O|0)|0;c[w+12>>2]=c[c[53690]>>2];O=c[53696]|0;Hc[c[O>>2]&63](O,w,1)|0;N=g;break};case 3:{w=c[s-4>>2]|0;O=jk(8)|0;a[O+4|0]=1;c[O>>2]=w;c[53700]=O;N=g;break};case 48:{O=c[(c[53698]|0)+84>>2]|0;N=Hc[c[O>>2]&63](O,0,256)|0;break};case 59:{N=c[s-8>>2]|0;break};case 20:{O=c[53690]|0;w=c[O+4>>2]|0;eF(O);c[53690]=w;N=g;break};case 29:{kj(c[s>>2]|0);N=g;break};case 30:{w=c[53690]|0;O=c[w+4>>2]|0;eF(w);c[53690]=O;N=g;break};case 31:{N=c[s-4>>2]|0;break};case 60:{N=c[s-4>>2]|0;break};case 61:{N=c[s>>2]|0;break};case 35:{O=c[53692]|0;w=c[O+4>>2]|0;if(w>>>0<(c[O+8>>2]|0)>>>0){S=O;T=w}else{Jv(O,1)|0;O=c[53692]|0;S=O;T=c[O+4>>2]|0}c[S+4>>2]=T+1;a[T]=0;O=c[53692]|0;w=c[O>>2]|0;c[O+4>>2]=w;O=w;while(1){w=a[O]|0;if(w<<24>>24==0){break}if(w<<24>>24==32){O=O+1|0}else{v=53;break a}}O=s;c[(c[O>>2]|0)+80>>2]=c[53698];w=$g(11880,c[43328]|0)|0;c[(c[O>>2]|0)+84>>2]=w;c[53698]=c[O>>2];c[(c[O>>2]|0)+108>>2]=c[c[53690]>>2];N=c[O>>2]|0;break};case 36:{O=c[53692]|0;w=c[O+4>>2]|0;if(w>>>0<(c[O+8>>2]|0)>>>0){U=O;V=w}else{Jv(O,1)|0;O=c[53692]|0;U=O;V=c[O+4>>2]|0}c[U+4>>2]=V+1;a[V]=0;O=c[53692]|0;w=c[O>>2]|0;c[O+4>>2]=w;O=w;while(1){w=a[O]|0;if(w<<24>>24==0){break}if(w<<24>>24==32){O=O+1|0}else{v=60;break a}}O=c[53698]|0;c[53698]=c[O+80>>2];N=O;break};case 26:{O=c[53690]|0;w=c[O+4>>2]|0;eF(O);c[53690]=w;N=g;break};case 27:{kj(c[s>>2]|0);N=g;break};case 28:{w=c[53690]|0;O=c[w+4>>2]|0;eF(w);c[53690]=O;N=g;break};case 2:{O=c[s-4>>2]|0;w=jk(8)|0;a[w+4|0]=2;c[w>>2]=O;c[53700]=w;N=g;break};default:{N=g}}w=q+(-y<<1)|0;O=s+(A<<2)|0;c[x>>2]=N;u=(d[22248+F|0]|0)-39|0;z=b[w>>1]|0;P=z+(b[22320+(u<<1)>>1]|0)|0;do{if(P>>>0<228>>>0){if((a[22768+P|0]|0)!=(z|0)){break}G=a[21944+P|0]|0;H=j;I=w;J=O;break b}}while(0);G=a[22616+u|0]|0;H=j;I=w;J=O}}while(0);h=G;j=H;k=p;l=I+2|0;m=r;n=J;o=t}if((v|0)==26){hj();B=p;C=1}else if((v|0)==53){vi(119648);hj();B=p;C=1}else if((v|0)==60){vi(157536);hj();B=p;C=1}else if((v|0)==109){vi(102648);B=k;C=2}if((B|0)==(f|0)){i=e;return C|0}eF(B);i=e;return C|0}function hj(){var a=0,b=0,d=0,e=0;a=c[53698]|0;b=c[53700]|0;if((b|0)!=0){wj(b,1);c[53700]=0}c[17762]=78;if((a|0)!=0){b=a;while(1){a=c[b+80>>2]|0;Vg(c[b+84>>2]|0)|0;uj(b|0);eF(b);if((a|0)==0){break}else{b=a}}}c[17762]=90;c[6396]=94;b=c[53696]|0;Hc[c[b>>2]&63](b,0,64)|0;c[6396]=90;c[6406]=30;b=c[53694]|0;Hc[c[b>>2]&63](b,0,64)|0;c[6406]=90;b=c[53690]|0;a=c[b+4>>2]|0;if((a|0)==0){return}else{d=b;e=a}while(1){eF(d);a=c[e+4>>2]|0;if((a|0)==0){break}else{d=e;e=a}}return}function ij(){var a=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;a=c[53694]|0;d=jk(40)|0;e=d;if((bh(c[53696]|0)|0)!=0){jj(0)}f=bh(a)|0;b[d+4>>1]=f;if((f|0)==0){g=a|0;h=c[g>>2]|0;i=Hc[h&63](a,0,64)|0;return e|0}j=d;c[j>>2]=jk(f*24|0)|0;f=a|0;d=Hc[c[f>>2]&63](a,0,128)|0;if((d|0)==0){g=f;h=c[g>>2]|0;i=Hc[h&63](a,0,64)|0;return e|0}else{k=d;l=0}while(1){d=k+8|0;m=(c[j>>2]|0)+(l*24|0)|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];c[m+16>>2]=c[d+16>>2];c[m+20>>2]=c[d+20>>2];d=Hc[c[f>>2]&63](a,k,8)|0;if((d|0)==0){g=f;break}else{k=d;l=l+1|0}}h=c[g>>2]|0;i=Hc[h&63](a,0,64)|0;return e|0}function jj(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=jk(32)|0;f=c[53696]|0;g=bh(f)|0;h=e+8|0;a[e+14|0]=d;do{if((g|0)==0){d=h;c[d>>2]=jk(56)|0;b[e+12>>1]=1;i=Lb(213312)|0;c[c[d>>2]>>2]=i;c[(c[d>>2]|0)+4>>2]=c[c[53690]>>2]}else{b[e+12>>1]=g;d=h;c[d>>2]=jk(g*56|0)|0;i=Zg(f)|0;if((i|0)==0){break}else{j=i;k=0}while(1){i=(c[d>>2]|0)+(k*56|0)|0;l=j+8|0;c[i>>2]=c[l>>2];c[i+4>>2]=c[l+4>>2];c[i+8>>2]=c[l+8>>2];c[i+12>>2]=c[l+12>>2];c[i+16>>2]=c[l+16>>2];c[i+20>>2]=c[l+20>>2];c[i+24>>2]=c[l+24>>2];c[i+28>>2]=c[l+28>>2];c[i+32>>2]=c[l+32>>2];c[i+36>>2]=c[l+36>>2];c[i+40>>2]=c[l+40>>2];c[i+44>>2]=c[l+44>>2];c[i+48>>2]=c[l+48>>2];c[i+52>>2]=c[l+52>>2];l=c[j>>2]|0;if((l|0)==0){break}else{j=l;k=k+1|0}}}}while(0);Hc[c[f>>2]&63](f,0,64)|0;f=c[53694]|0;Hc[c[f>>2]&63](f,e,1)|0;return}function kj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0.0;b=i;i=i+32|0;d=b|0;e=jk(8)|0;f=e;g=c[c[53690]>>2]|0;j=d;k=a;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];c[j+16>>2]=c[k+16>>2];c[j+20>>2]=c[k+20>>2];c[j+24>>2]=c[k+24>>2];c[j+28>>2]=c[k+28>>2];do{if((g|0)!=0){k=d+4|0;do{if((c[k>>2]|0)==0){a=c[g+4>>2]|0;if((a|0)==0){break}c[k>>2]=a}}while(0);k=d+16|0;do{if(+h[k>>3]<0.0){l=+h[g+16>>3];if(l<0.0){break}h[k>>3]=l}}while(0);k=d|0;do{if((c[k>>2]|0)==0){a=c[g>>2]|0;if((a|0)==0){break}c[k>>2]=a}}while(0);k=c[g+24>>2]&127;if((k|0)==0){break}a=d+24|0;c[a>>2]=c[a>>2]|k}}while(0);d=c[(c[53688]|0)+144>>2]|0;c[e>>2]=Hc[c[d>>2]&63](d,j,1)|0;c[e+4>>2]=c[53690];c[53690]=f;i=b;return}function lj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+152|0;f=e+128|0;g=e+144|0;c[g>>2]=0;c[g+4>>2]=0;c[53690]=g;c[53698]=0;c[53700]=0;c[53688]=c[(c[(c[d+52>>2]|0)+8>>2]|0)+136>>2];c[53696]=$g(25568,c[43328]|0)|0;c[53694]=$g(25608,c[43328]|0)|0;Iv(f,128,e|0);c[53692]=f;if((xi(a,f,d)|0)==0){gj()|0;c[b>>2]=Bi()|0;h=c[53700]|0}else{c[b>>2]=2;h=0}Vg(c[53696]|0)|0;Vg(c[53694]|0)|0;c[53696]=0;c[53694]=0;c[53690]=0;Mv(f);i=e;return h|0}function mj(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function nj(a,b,d){a=a|0;b=b|0;d=d|0;Vg(c[b+8>>2]|0)|0;eF(b);return}function oj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;e=c[d+8>>2]|0;b=e+88|0;f=a[e+92|0]|0;if((f<<24>>24|0)==2){vj(c[b>>2]|0)}else if((f<<24>>24|0)==1){f=c[b>>2]|0;Vg(c[f+84>>2]|0)|0;uj(f|0);eF(f)}uj(e|0);eF(e);eF(d);return}function pj(a,b,d){a=a|0;b=b|0;d=d|0;d=c[b+8>>2]|0;if((d|0)!=0){eF(d)}eF(b);return}function qj(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;e=d+12|0;a=b[e>>1]|0;if(a<<16>>16==0){f=d;eF(f);return}g=d+8|0;if(a<<16>>16>0){h=c[g>>2]|0;i=0;j=a;while(1){a=c[h>>2]|0;if((a|0)==0){k=j}else{eF(a);k=b[e>>1]|0}a=i+1|0;if((a|0)<(k<<16>>16|0)){h=h+56|0;i=a;j=k}else{break}}}eF(c[g>>2]|0);f=d;eF(f);return}function rj(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;g=i;i=i+72|0;j=g|0;k=Fh(d)|0;l=c[k>>2]|0;m=c[l+4>>2]|0;c[k+4>>2]=m;c[k+12>>2]=c[l+12>>2];if((m|0)==1){c[k+8>>2]=c[l+8>>2]}else if((m|0)==0){c[k+8>>2]=c[l+8>>2]}else if((m|0)==2){c[k+8>>2]=c[l+8>>2]}else if((m|0)==3){c[k+8>>2]=c[l+8>>2]}c[k+208>>2]=c[l+208>>2];c[k+228>>2]=c[l+228>>2];c[k+244>>2]=c[l+244>>2];m=k+260|0;b[m>>1]=b[m>>1]&-2|b[l+260>>1]&1;n=+h[f+56>>3];o=+h[f+64>>3];l=a[f+80|0]|0;if((l|0)==98){p=+h[f+48>>3];m=a[e+4|0]|0;if((m|0)==3){k=c[e>>2]|0;q=+h[k+24>>3]- +h[k+8>>3]}else if((m|0)==1){k=c[e>>2]|0;q=+h[k+72>>3]- +h[k+56>>3]}else if((m|0)==2){m=c[e>>2]|0;q=+h[m+32>>3]- +h[m+16>>3]}else{q=0.0}r=o-(p-q)*.5+-1.0}else if((l|0)==116){q=+h[f+48>>3];l=a[e+4|0]|0;if((l|0)==1){m=c[e>>2]|0;s=+h[m+72>>3]- +h[m+56>>3]}else if((l|0)==3){m=c[e>>2]|0;s=+h[m+24>>3]- +h[m+8>>3]}else if((l|0)==2){l=c[e>>2]|0;s=+h[l+32>>3]- +h[l+16>>3]}else{s=0.0}r=o+(q-s)*.5+-1.0}else{r=o}h[j>>3]=n;h[j+8>>3]=r;c[j+20>>2]=c[f+8>>2];c[j+16>>2]=c[f+4>>2];h[j+32>>3]=+h[f+16>>3];f=d+16|0;l=ew(c[(c[f>>2]|0)+8>>2]|0,119632)|0;m=j+56|0;c[m>>2]=l;k=j+60|0;c[k>>2]=c[(c[f>>2]|0)+212>>2];t=j+64|0;a[t]=0;if((l|0)==0){u=19}else{if((a[l]|0)==0){u=19}}if((u|0)==19){c[m>>2]=157520}if((a[e+4|0]|0)==1){m=c[e>>2]|0;pB(d,c[(c[d>>2]|0)+336>>2]|0);u=c[m+24>>2]|0;if((u|0)==0){lB(d,127648)}else{lB(d,u)}sj(d,m,j)}else{tj(d,c[e>>2]|0,j)}if((a[t]|0)==0){v=c[f>>2]|0;w=v+208|0;c[w>>2]=0;x=v+228|0;c[x>>2]=0;y=v+244|0;c[y>>2]=0;z=v+212|0;c[z>>2]=0;Gh(d);i=g;return}eF(c[k>>2]|0);v=c[f>>2]|0;w=v+208|0;c[w>>2]=0;x=v+228|0;c[x>>2]=0;y=v+244|0;c[y>>2]=0;z=v+212|0;c[z>>2]=0;Gh(d);i=g;return}function sj(f,g,j){f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0,O=0,P=0,Q=0,R=0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0,Ia=0,Ja=0.0,Ka=0,La=0,Ma=0.0,Na=0,Oa=0,Pa=0.0,Qa=0;k=i;i=i+480|0;l=k|0;m=k+64|0;n=k+96|0;o=k+136|0;p=k+168|0;q=k+232|0;r=k+240|0;s=k+272|0;t=k+304|0;u=k+336|0;v=k+368|0;w=k+408|0;x=k+472|0;y=g|0;z=u;A=g+48|0;c[z>>2]=c[A>>2];c[z+4>>2]=c[A+4>>2];c[z+8>>2]=c[A+8>>2];c[z+12>>2]=c[A+12>>2];c[z+16>>2]=c[A+16>>2];c[z+20>>2]=c[A+20>>2];c[z+24>>2]=c[A+24>>2];c[z+28>>2]=c[A+28>>2];A=j|0;B=+h[A>>3];C=j+8|0;D=+h[C>>3];E=g+84|0;F=c[E>>2]|0;if((c[g>>2]|0)==0){G=(c[g+8>>2]|0)!=0}else{G=1}H=g+108|0;I=c[H>>2]|0;do{if((I|0)!=0){J=j+16|0;K=c[J>>2]|0;do{if((K|0)!=0){L=I|0;if((c[L>>2]|0)==0){c[45156]=0;break}else{c[45156]=K;c[J>>2]=c[L>>2];break}}}while(0);J=j+20|0;K=c[J>>2]|0;do{if((K|0)!=0){L=I+4|0;if((c[L>>2]|0)==0){c[45157]=0;break}else{c[45157]=K;c[J>>2]=c[L>>2];break}}}while(0);J=j+32|0;M=+h[J>>3];if(M<0.0){break}K=I+16|0;if(+h[K>>3]<0.0){h[22580]=-1.0;break}else{h[22580]=M;h[J>>3]=+h[K>>3];break}}}while(0);I=u|0;h[I>>3]=B+ +h[I>>3];I=u+16|0;h[I>>3]=B+ +h[I>>3];I=u+8|0;h[I>>3]=D+ +h[I>>3];I=u+24|0;h[I>>3]=D+ +h[I>>3];do{if(G){if((c[f+152>>2]&4|0)!=0){N=0;break}N=Kj(f,j,y,u,v,1)|0}else{N=0}}while(0);I=g+42|0;K=e[I>>1]|0;do{if((K&32|0)==0){J=c[g+20>>2]|0;if((J|0)!=0){L=x|0;O=Lj(f,J,c[g+28>>2]|0,K,L)|0;if((b[I>>1]&4)==0){sB(f,u,O)}else{J=a[g+33|0]|0;P=t;c[P>>2]=c[z>>2];c[P+4>>2]=c[z+4>>2];c[P+8>>2]=c[z+8>>2];c[P+12>>2]=c[z+12>>2];c[P+16>>2]=c[z+16>>2];c[P+20>>2]=c[z+20>>2];c[P+24>>2]=c[z+24>>2];c[P+28>>2]=c[z+28>>2];P=w;c[P>>2]=c[z>>2];c[P+4>>2]=c[z+4>>2];c[P+8>>2]=c[z+8>>2];c[P+12>>2]=c[z+12>>2];P=w+32|0;Q=P;R=t+16|0;c[Q>>2]=c[R>>2];c[Q+4>>2]=c[R+4>>2];c[Q+8>>2]=c[R+8>>2];c[Q+12>>2]=c[R+12>>2];if((J&255)>>>0>1>>>0){D=+(J&255|0)*.5;J=w|0;B=D+ +h[J>>3];h[J>>3]=B;J=w+8|0;M=D+ +h[J>>3];h[J>>3]=M;J=P|0;S=+h[J>>3]-D;h[J>>3]=S;J=w+40|0;T=+h[J>>3]-D;h[J>>3]=T;U=S;V=M;W=B;X=T}else{U=+h[P>>3];V=+h[w+8>>3];W=+h[w>>3];X=+h[w+40>>3]}h[w+16>>3]=U;h[w+24>>3]=V;h[w+48>>3]=W;h[w+56>>3]=X;ol(f,w|0,4,4,O)}eF(c[L>>2]|0)}L=c[F>>2]|0;if((L|0)!=0){O=m;P=o;J=p;R=o|0;Q=o+16|0;Y=o+8|0;Z=o+24|0;_=f+152|0;$=l|0;aa=l+8|0;ba=l+32|0;ca=l+40|0;da=l+16|0;ea=l|0;fa=l+24|0;ga=l+48|0;ha=l+56|0;ia=j+56|0;ja=q|0;ka=p|0;la=p+32|0;ma=la;na=m+16|0;oa=p|0;pa=p+8|0;qa=la|0;la=p+40|0;ra=p+16|0;sa=p+24|0;ta=p+48|0;ua=p+56|0;va=F;wa=L;do{L=wa|0;xa=wa+48|0;c[P>>2]=c[xa>>2];c[P+4>>2]=c[xa+4>>2];c[P+8>>2]=c[xa+8>>2];c[P+12>>2]=c[xa+12>>2];c[P+16>>2]=c[xa+16>>2];c[P+20>>2]=c[xa+20>>2];c[P+24>>2]=c[xa+24>>2];c[P+28>>2]=c[xa+28>>2];T=+h[A>>3];B=+h[C>>3];if((c[wa>>2]|0)==0){ya=(c[wa+8>>2]|0)!=0}else{ya=1}h[R>>3]=T+ +h[R>>3];h[Q>>3]=T+ +h[Q>>3];h[Y>>3]=B+ +h[Y>>3];h[Z>>3]=B+ +h[Z>>3];do{if(ya){if((c[_>>2]&4|0)!=0){za=0;break}za=Kj(f,j,L,o,n,1)|0}else{za=0}}while(0);xa=wa+42|0;Aa=e[xa>>1]|0;do{if((Aa&32|0)==0){Ba=c[wa+20>>2]|0;if((Ba|0)!=0){Ca=Lj(f,Ba,c[wa+28>>2]|0,Aa,ja)|0;if((b[xa>>1]&4)==0){sB(f,o,Ca)}else{Ba=a[wa+33|0]|0;c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];c[O+16>>2]=c[P+16>>2];c[O+20>>2]=c[P+20>>2];c[O+24>>2]=c[P+24>>2];c[O+28>>2]=c[P+28>>2];c[J>>2]=c[P>>2];c[J+4>>2]=c[P+4>>2];c[J+8>>2]=c[P+8>>2];c[J+12>>2]=c[P+12>>2];c[ma>>2]=c[na>>2];c[ma+4>>2]=c[na+4>>2];c[ma+8>>2]=c[na+8>>2];c[ma+12>>2]=c[na+12>>2];if((Ba&255)>>>0>1>>>0){B=+(Ba&255|0)*.5;T=B+ +h[oa>>3];h[oa>>3]=T;M=B+ +h[pa>>3];h[pa>>3]=M;S=+h[qa>>3]-B;h[qa>>3]=S;D=+h[la>>3]-B;h[la>>3]=D;Da=S;Ea=M;Fa=T;Ga=D}else{Da=+h[qa>>3];Ea=+h[pa>>3];Fa=+h[oa>>3];Ga=+h[la>>3]}h[ra>>3]=Da;h[sa>>3]=Ea;h[ta>>3]=Fa;h[ua>>3]=Ga;ol(f,ka,4,4,Ca)}eF(c[ja>>2]|0)}if((a[wa+33|0]|0)!=0){Mj(f,L,o)}Ca=wa+88|0;Ba=a[wa+92|0]|0;if((Ba<<24>>24|0)==1){sj(f,c[Ca>>2]|0,j);break}else if((Ba<<24>>24|0)==3){Ba=c[Ca>>2]|0;D=+h[A>>3];T=+h[Ba>>3]+D;M=+h[C>>3];S=+h[Ba+8>>3]+M;B=+h[Ba+16>>3]+D;D=+h[Ba+24>>3]+M;h[$>>3]=B;h[aa>>3]=D;h[ba>>3]=T;h[ca>>3]=S;h[da>>3]=T;h[fa>>3]=D;h[ga>>3]=B;h[ha>>3]=S;Ha=c[Ba+36>>2]|0;if((Ha|0)==0){Ia=c[ia>>2]|0}else{Ia=Ha}wB(f,c[Ba+32>>2]|0,ea,4,1,Ia);break}else{tj(f,c[Ca>>2]|0,j);break}}}while(0);if((za|0)!=0){Nj(f,n,1)}do{if(ya){if((c[_>>2]&4|0)==0){break}if((Kj(f,j,L,o,n,0)|0)==0){break}Nj(f,n,0)}}while(0);va=va+4|0;wa=c[va>>2]|0;}while((wa|0)!=0)}wa=c[E>>2]|0;xB(f,1.0);va=c[wa>>2]|0;if((va|0)!=0){_=g+24|0;ea=r|0;ia=r+8|0;ha=r+16|0;ga=r+24|0;fa=s|0;da=s+8|0;ca=s+16|0;ba=s+24|0;aa=wa;wa=va;do{aa=aa+4|0;va=wa+100|0;do{if((a[va]|0)!=0){$=c[_>>2]|0;ja=c[aa>>2]|0;S=+h[A>>3];B=+h[C>>3];ka=($|0)==0?127648:$;nB(f,ka);lB(f,ka);D=S+ +h[wa+48>>3];T=S+ +h[wa+64>>3];M=B+ +h[wa+56>>3];Ja=B+ +h[wa+72>>3];ka=a[va]|0;do{if((ka&1)==0){Ka=ka}else{$=c[wa+96>>2]|0;if(((e[wa+80>>1]|0)+(e[wa+84>>1]|0)|0)>=(c[$+104>>2]|0)){Ka=ka;break}ua=b[wa+86>>1]|0;do{if(ua<<16>>16==0){ta=a[$+32|0]|0;sa=(ta<<24>>24|0)/2|0;La=sa+(d[$+33|0]|0)&255;Ma=M- +(sa|0);Na=ta}else{if(((e[wa+82>>1]|0)+(ua&65535)|0)==(c[$+100>>2]|0)){ta=a[$+32|0]|0;sa=(ta<<24>>24|0)/2|0;ra=sa+(d[$+33|0]|0)|0;La=ra&255;Ma=M- +(sa|0)- +(ra&255|0);Na=ta;break}else{ta=a[$+32|0]|0;La=0;Ma=M- +((ta<<24>>24|0)/2|0|0);Na=ta;break}}}while(0);B=T+ +((Na<<24>>24|0)/2|0|0);h[fa>>3]=B;h[da>>3]=Ma;h[ca>>3]=B+0.0;h[ba>>3]=Ma+(+(Na<<24>>24|0)+(Ja+ +(La&255|0)-M));sB(f,s,1);Ka=a[va]|0}}while(0);if((Ka&2)==0){break}ka=b[wa+86>>1]|0;$=c[wa+96>>2]|0;if(((e[wa+82>>1]|0)+(ka&65535)|0)>=(c[$+100>>2]|0)){break}ua=b[wa+84>>1]|0;do{if(ua<<16>>16==0){ta=a[$+32|0]|0;ra=(ta<<24>>24|0)/2|0;sa=ra+(d[$+33|0]|0)|0;la=sa&255;oa=sa&255;Ja=+(ra|0);B=D- +(oa|0)-Ja;if((e[wa+80>>1]|0)==(c[$+104>>2]|0)){Oa=oa<<1&255;Pa=B;Qa=ta;break}if((ja|0)==0){Oa=la;Pa=B;Qa=ta;break}if((b[ja+86>>1]|0)==ka<<16>>16){Oa=la;Pa=B;Qa=ta;break}Oa=~~(+((la&255)>>>0)+(S+ +h[$+64>>3]-(T+Ja)));Pa=B;Qa=ta}else{if(((e[wa+80>>1]|0)+(ua&65535)|0)==(c[$+104>>2]|0)){ta=a[$+32|0]|0;la=(ta<<24>>24|0)/2|0;Oa=la+(d[$+33|0]|0)&255;Pa=D- +(la|0);Qa=ta;break}ta=a[$+32|0]|0;B=+((ta<<24>>24|0)/2|0|0);Ja=D-B;if((ja|0)==0){Oa=0;Pa=Ja;Qa=ta;break}if((b[ja+86>>1]|0)==ka<<16>>16){Oa=0;Pa=Ja;Qa=ta;break}Oa=~~(S+ +h[$+64>>3]-(T+B)+0.0);Pa=Ja;Qa=ta}}while(0);S=M- +((Qa<<24>>24|0)/2|0|0);h[ea>>3]=Pa;h[ia>>3]=S;h[ha>>3]=Pa+(+(Qa<<24>>24|0)+(T+ +(Oa&255|0)-D));h[ga>>3]=S+0.0;sB(f,r,1);}}while(0);wa=c[aa>>2]|0;}while((wa|0)!=0)}if((a[g+33|0]|0)==0){break}Mj(f,y,u)}}while(0);if((N|0)!=0){Nj(f,v,1)}do{if(G){if((c[f+152>>2]&4|0)==0){break}if((Kj(f,j,y,u,v,0)|0)==0){break}Nj(f,v,0)}}while(0);if((c[H>>2]|0)==0){i=k;return}H=c[45156]|0;if((H|0)!=0){c[j+16>>2]=H}H=c[45157]|0;if((H|0)!=0){c[j+20>>2]=H}Pa=+h[22580];if(Pa<0.0){i=k;return}h[j+32>>3]=Pa;i=k;return}function tj(e,f,g){e=e|0;f=f|0;g=g|0;var j=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0,_=0,$=0,aa=0,ba=0.0,ca=0,da=0,ea=0,fa=0;j=i;i=i+104|0;l=j|0;m=j+56|0;n=j+88|0;o=b[f+4>>1]|0;if(o<<16>>16<1){i=j;return}p=+h[f+24>>3];q=+h[f+8>>3];r=(p-q)*.5;s=+h[g>>3]+(p+q)*.5;q=+h[f+32>>3];p=+h[f+16>>3];t=+h[g+8>>3]+(q+p)*.5;u=o<<16>>16;o=c[f>>2]|0;v=a[f+6|0]|0;f=g+16|0;w=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;f=g+20|0;x=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;f=g+32|0;y=(c[k>>2]=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24,c[k+4>>2]=d[f+4|0]|d[f+5|0]<<8|d[f+6|0]<<16|d[f+7|0]<<24,+h[k>>3]);f=n;c[f>>2]=0;c[f+4>>2]=0;z=s-r;A=r+s;f=n+8|0;h[f>>3]=t+(q-p)*.5;iB(e,1);g=m+16|0;B=m|0;C=m+4|0;D=m+24|0;E=l|0;F=l+4|0;G=l+16|0;H=v<<24>>24==0;v=l+24|0;I=l+8|0;J=l+32|0;K=l+40|0;L=l+48|0;M=n|0;N=m+8|0;O=0;do{P=a[o+(O*24|0)+6|0]|0;if((P|0)==114){Q=A- +h[o+(O*24|0)+8>>3]}else if((P|0)==108){Q=z}else{Q=s- +h[o+(O*24|0)+8>>3]*.5}P=o+(O*24|0)+16|0;h[f>>3]=+h[f>>3]- +h[P>>3];R=c[o+(O*24|0)>>2]|0;S=o+(O*24|0)+4|0;if((b[S>>1]|0)>0){if(H){p=Q;T=0;U=R;while(1){V=U+4|0;W=c[V>>2]|0;if((W|0)==0){X=10}else{q=+h[W+16>>3];if(q>0.0){Y=q}else{X=10}}if((X|0)==10){X=0;Y=y}h[g>>3]=Y;W=c[V>>2]|0;if((W|0)==0){X=13}else{Z=c[W>>2]|0;if((Z|0)==0){X=13}else{_=Z}}if((X|0)==13){X=0;_=w}c[B>>2]=_;Z=c[V>>2]|0;if((Z|0)==0){X=16}else{W=c[Z+4>>2]|0;if((W|0)==0){X=16}else{$=W}}if((X|0)==16){X=0;$=x}c[C>>2]=$;W=c[V>>2]|0;do{if((W|0)==0){X=20}else{Z=c[W+24>>2]<<25>>25;if((Z|0)==0){X=20;break}aa=c[D>>2]&-128|Z&127}}while(0);if((X|0)==20){X=0;aa=c[D>>2]&-128}c[D>>2]=aa;lB(e,$);c[E>>2]=c[U>>2];c[F>>2]=m;h[G>>3]=+h[U+16>>3];h[v>>3]=1.0;c[N>>2]=c[(c[V>>2]|0)+8>>2];c[I>>2]=c[U+8>>2];W=U+32|0;h[J>>3]=+h[W>>3];h[K>>3]=+h[P>>3];a[L]=108;h[M>>3]=p;kB(e,n,l);Z=T+1|0;if((Z|0)<(b[S>>1]|0)){p=p+ +h[W>>3];T=Z;U=U+56|0}else{break}}}else{p=Q;U=0;T=R;while(1){Z=T+4|0;W=c[Z>>2]|0;if((W|0)==0){X=24}else{q=+h[W+16>>3];if(q>0.0){ba=q}else{X=24}}if((X|0)==24){X=0;ba=y}h[g>>3]=ba;W=c[Z>>2]|0;if((W|0)==0){X=27}else{ca=c[W>>2]|0;if((ca|0)==0){X=27}else{da=ca}}if((X|0)==27){X=0;da=w}c[B>>2]=da;ca=c[Z>>2]|0;if((ca|0)==0){X=30}else{W=c[ca+4>>2]|0;if((W|0)==0){X=30}else{ea=W}}if((X|0)==30){X=0;ea=x}c[C>>2]=ea;W=c[Z>>2]|0;do{if((W|0)==0){X=34}else{ca=c[W+24>>2]<<25>>25;if((ca|0)==0){X=34;break}fa=c[D>>2]&-128|ca&127}}while(0);if((X|0)==34){X=0;fa=c[D>>2]&-128}c[D>>2]=fa;lB(e,ea);c[E>>2]=c[T>>2];c[F>>2]=m;h[G>>3]=+h[T+16>>3];h[v>>3]=+h[T+24>>3];c[N>>2]=c[(c[Z>>2]|0)+8>>2];c[I>>2]=c[T+8>>2];W=T+32|0;h[J>>3]=+h[W>>3];h[K>>3]=+h[P>>3];a[L]=108;h[M>>3]=p;kB(e,n,l);V=U+1|0;if((V|0)<(b[S>>1]|0)){p=p+ +h[W>>3];U=V;T=T+56|0}else{break}}}}O=O+1|0;}while((O|0)<(u|0));jB(e);i=j;return}function uj(a){a=a|0;eF(c[a>>2]|0);eF(c[a+4>>2]|0);eF(c[a+8>>2]|0);eF(c[a+16>>2]|0);eF(c[a+12>>2]|0);eF(c[a+20>>2]|0);eF(c[a+24>>2]|0);return}function vj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((a|0)==0){return}d=a|0;e=a+4|0;f=b[e>>1]|0;if(f<<16>>16>0){g=c[d>>2]|0;h=0;i=f;while(1){f=g+4|0;if((b[f>>1]|0)>0){j=c[g>>2]|0;k=0;while(1){l=c[j>>2]|0;if((l|0)!=0){eF(l)}l=c[j+8>>2]|0;do{if((l|0)!=0){m=c[j+12>>2]|0;if((m|0)==0){break}Cc[m&255](l)}}while(0);l=k+1|0;if((l|0)<(b[f>>1]|0)){j=j+56|0;k=l}else{break}}n=b[e>>1]|0}else{n=i}k=h+1|0;if((k|0)<(n<<16>>16|0)){g=g+24|0;h=k;i=n}else{break}}}n=c[d>>2]|0;if((n|0)!=0){eF(n)}eF(a);return}function wj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=a[b+4|0]|0;if((e<<24>>24|0)==1){f=c[b>>2]|0;g=f+84|0;h=c[g>>2]|0;if((c[f+100>>2]|0)==-1){Vg(h)|0}else{eF(c[f+92>>2]|0);eF(c[f+96>>2]|0);i=c[h>>2]|0;if((i|0)!=0){j=h;h=i;do{wj(h+88|0,0);eF(c[h>>2]|0);eF(c[h+4>>2]|0);eF(c[h+8>>2]|0);eF(c[h+16>>2]|0);eF(c[h+12>>2]|0);eF(c[h+20>>2]|0);eF(c[h+24>>2]|0);eF(h);j=j+4|0;h=c[j>>2]|0;}while((h|0)!=0)}eF(c[g>>2]|0)}eF(c[f>>2]|0);eF(c[f+4>>2]|0);eF(c[f+8>>2]|0);eF(c[f+16>>2]|0);eF(c[f+12>>2]|0);eF(c[f+20>>2]|0);eF(c[f+24>>2]|0);eF(f)}else if((e<<24>>24|0)==3){e=c[b>>2]|0;eF(c[e+32>>2]|0);eF(e)}else{vj(c[b>>2]|0)}if((d|0)==0){return}eF(b);return}function xj(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0;g=c[(c[(c[b+8>>2]|0)+104>>2]|0)+72>>2]|0;if((a[g+4|0]|0)==2){h=0;return h|0}b=yj(c[g>>2]|0,e)|0;if((b|0)==0){h=0;return h|0}c[f>>2]=d[b+35|0]|0;h=b+48|0;return h|0}function yj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=c[b+4>>2]|0;do{if((e|0)!=0){if((pm(e,d)|0)==0){f=b|0}else{break}return f|0}}while(0);e=c[b+84>>2]|0;b=c[e>>2]|0;if((b|0)==0){f=0;return f|0}else{g=e;h=b}while(1){b=g+4|0;e=c[h+4>>2]|0;if((e|0)==0){i=6}else{if((pm(e,d)|0)==0){j=h|0;i=8}else{i=6}}do{if((i|0)==6){i=0;if((a[h+92|0]|0)!=1){break}j=yj(c[h+88>>2]|0,d)|0;i=8}}while(0);if((i|0)==8){i=0;if((j|0)!=0){f=j;i=10;break}}e=c[b>>2]|0;if((e|0)==0){f=0;i=10;break}else{g=b;h=e}}if((i|0)==10){return f|0}return 0}function zj(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function Aj(d){d=d|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0;f=d+92|0;c[f>>2]=jk((c[d+100>>2]<<2)+4|0)|0;g=d+96|0;c[g>>2]=jk((c[d+104>>2]<<2)+4|0)|0;i=c[d+84>>2]|0;j=c[i>>2]|0;if((j|0)==0){return}k=d+32|0;d=i;i=j;do{j=i+82|0;l=b[j>>1]|0;m=l&65535;n=+h[i+72>>3];if(l<<16>>16==1){o=~~n}else{p=~~((n- +(da((a[k]|0)-1|0,m-1|0)|0))/+(m|0));o=(p|0)>1?p:1}p=i+80|0;m=b[p>>1]|0;q=m&65535;n=+h[i+64>>3];if(m<<16>>16==1){r=~~n}else{s=~~((n- +(da((a[k]|0)-1|0,q-1|0)|0))/+(q|0));r=(s|0)>1?s:1}s=i+86|0;if(l<<16>>16==0){t=m}else{m=e[s>>1]|0;do{l=(c[f>>2]|0)+(m<<2)|0;q=c[l>>2]|0;c[l>>2]=(q|0)>(o|0)?q:o;m=m+1|0;}while((m|0)<((e[j>>1]|0)+(e[s>>1]|0)|0));t=b[p>>1]|0}s=i+84|0;if(t<<16>>16!=0){j=e[s>>1]|0;do{m=(c[g>>2]|0)+(j<<2)|0;q=c[m>>2]|0;c[m>>2]=(q|0)>(r|0)?q:r;j=j+1|0;}while((j|0)<((e[p>>1]|0)+(e[s>>1]|0)|0))}d=d+4|0;i=c[d>>2]|0;}while((i|0)!=0);return}function Bj(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;g=i;j=a+104|0;k=a+100|0;if((c[j>>2]|0)>=0){l=f+8|0;m=0;n=0;while(1){if(n>>>0<21>>>0){o=c[17880+(n<<2)>>2]|0}else{nb(177168,115352,(p=i,i=i+8|0,c[p>>2]=n,p)|0)|0;i=p;o=177168}q=Ax(f,o,1)|0;Wx(q|0,108248,304,1)|0;r=q+8|0;c[(c[r>>2]|0)+176>>2]=0;s=jk((c[k>>2]<<2)+4|0)|0;c[(c[r>>2]|0)+172>>2]=s;c[(c[r>>2]|0)+184>>2]=0;s=jk((c[k>>2]<<2)+4|0)|0;c[(c[r>>2]|0)+180>>2]=s;if((m|0)==0){c[(c[l>>2]|0)+180>>2]=q}else{c[(c[m+8>>2]|0)+164>>2]=q}if((n|0)<(c[j>>2]|0)){m=q;n=n+1|0}else{break}}}if((c[k>>2]|0)>=0){n=d+8|0;m=0;l=0;while(1){if(l>>>0<21>>>0){t=c[17880+(l<<2)>>2]|0}else{nb(177168,115352,(p=i,i=i+8|0,c[p>>2]=l,p)|0)|0;i=p;t=177168}o=Ax(d,t,1)|0;Wx(o|0,108248,304,1)|0;q=o+8|0;c[(c[q>>2]|0)+176>>2]=0;s=jk((c[j>>2]<<2)+4|0)|0;c[(c[q>>2]|0)+172>>2]=s;c[(c[q>>2]|0)+184>>2]=0;s=jk((c[j>>2]<<2)+4|0)|0;c[(c[q>>2]|0)+180>>2]=s;if((m|0)==0){c[(c[n>>2]|0)+180>>2]=o}else{c[(c[m+8>>2]|0)+164>>2]=o}if((l|0)<(c[k>>2]|0)){m=o;l=l+1|0}else{break}}}l=c[a+84>>2]|0;a=c[l>>2]|0;if((a|0)==0){Dj(f);Dj(d);i=g;return}else{u=l;v=a}do{a=v+84|0;l=b[a>>1]|0;m=l&65535;if((l&65535)>>>0<21>>>0){w=c[17880+(m<<2)>>2]|0}else{nb(177168,115352,(p=i,i=i+8|0,c[p>>2]=m,p)|0)|0;i=p;w=177168}m=Ax(f,w,0)|0;l=(e[v+80>>1]|0)+(e[a>>1]|0)|0;if(l>>>0<21>>>0){x=c[17880+(l<<2)>>2]|0}else{nb(177168,115352,(p=i,i=i+8|0,c[p>>2]=l,p)|0)|0;i=p;x=177168}l=Ax(f,x,0)|0;Cj(f,m,l,~~+h[v+64>>3]);l=v+86|0;m=b[l>>1]|0;a=m&65535;if((m&65535)>>>0<21>>>0){y=c[17880+(a<<2)>>2]|0}else{nb(177168,115352,(p=i,i=i+8|0,c[p>>2]=a,p)|0)|0;i=p;y=177168}a=Ax(d,y,0)|0;m=(e[v+82>>1]|0)+(e[l>>1]|0)|0;if(m>>>0<21>>>0){z=c[17880+(m<<2)>>2]|0}else{nb(177168,115352,(p=i,i=i+8|0,c[p>>2]=m,p)|0)|0;i=p;z=177168}m=Ax(d,z,0)|0;Cj(d,a,m,~~+h[v+72>>3]);u=u+4|0;v=c[u>>2]|0;}while((v|0)!=0);Dj(f);Dj(d);i=g;return}function Cj(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=uw(a,d,e,0,0)|0;if((g|0)!=0){h=(c[g+8>>2]|0)+170|0;g=b[h>>1]|0;b[h>>1]=(g&65535|0)>(f|0)?g:f&65535;return}g=uw(a,d,e,0,1)|0;Wx(g|0,131624,176,1)|0;b[(c[g+8>>2]|0)+170>>1]=f;f=d+8|0;d=(c[f>>2]|0)+180|0;a=c[d>>2]|0;if((a|0)==0){i=kk((c[d+4>>2]<<2)+8|0)|0}else{i=mk(a,(c[d+4>>2]<<2)+8|0)|0}c[(c[f>>2]|0)+180>>2]=i;i=(c[f>>2]|0)+184|0;d=c[i>>2]|0;c[i>>2]=d+1;c[(c[(c[f>>2]|0)+180>>2]|0)+(d<<2)>>2]=g;d=(c[f>>2]|0)+180|0;c[(c[d>>2]|0)+(c[d+4>>2]<<2)>>2]=0;d=e+8|0;e=(c[d>>2]|0)+172|0;f=c[e>>2]|0;if((f|0)==0){j=kk((c[e+4>>2]<<2)+8|0)|0}else{j=mk(f,(c[e+4>>2]<<2)+8|0)|0}c[(c[d>>2]|0)+172>>2]=j;j=(c[d>>2]|0)+176|0;e=c[j>>2]|0;c[j>>2]=e+1;c[(c[(c[d>>2]|0)+172>>2]|0)+(e<<2)>>2]=g;g=(c[d>>2]|0)+172|0;c[(c[g>>2]|0)+(c[g+4>>2]<<2)>>2]=0;return}function Dj(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=c[(c[a+8>>2]|0)+180>>2]|0;e=c[(c[d+8>>2]|0)+164>>2]|0;if((e|0)==0){return}f=d;d=e;while(1){e=d;if((uw(a,f,e,0,0)|0)==0){g=uw(a,f,e,0,1)|0;Wx(g|0,131624,176,1)|0;b[(c[g+8>>2]|0)+170>>1]=0;h=f+8|0;i=(c[h>>2]|0)+180|0;j=c[i>>2]|0;if((j|0)==0){k=kk((c[i+4>>2]<<2)+8|0)|0}else{k=mk(j,(c[i+4>>2]<<2)+8|0)|0}c[(c[h>>2]|0)+180>>2]=k;i=(c[h>>2]|0)+184|0;j=c[i>>2]|0;c[i>>2]=j+1;c[(c[(c[h>>2]|0)+180>>2]|0)+(j<<2)>>2]=g;j=(c[h>>2]|0)+180|0;c[(c[j>>2]|0)+(c[j+4>>2]<<2)>>2]=0;j=d+8|0;h=(c[j>>2]|0)+172|0;i=c[h>>2]|0;if((i|0)==0){l=kk((c[h+4>>2]<<2)+8|0)|0}else{l=mk(i,(c[h+4>>2]<<2)+8|0)|0}c[(c[j>>2]|0)+172>>2]=l;h=(c[j>>2]|0)+176|0;i=c[h>>2]|0;c[h>>2]=i+1;c[(c[(c[j>>2]|0)+172>>2]|0)+(i<<2)>>2]=g;g=(c[j>>2]|0)+172|0;c[(c[g>>2]|0)+(c[g+4>>2]<<2)>>2]=0;m=j}else{m=d+8|0}j=c[(c[m>>2]|0)+164>>2]|0;if((j|0)==0){break}else{f=e;d=j}}return}function Ej(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=i;i=i+8|0;d=b|0;e=d;c[d>>2]=c[43484];d=c[a+100>>2]|0;do{if((d|0)!=1){f=a+104|0;if((c[f>>2]|0)==1){break}g=a+92|0;c[g>>2]=jk((d<<2)+4|0)|0;h=a+96|0;c[h>>2]=jk((c[f>>2]<<2)+4|0)|0;f=Hw(102640,e,0)|0;j=Hw(97e3,e,0)|0;Wx(f|0,91520,272,1)|0;Wx(j|0,91520,272,1)|0;Bj(a,f,j);ok(f,2,2147483647)|0;ok(j,2,2147483647)|0;k=c[(c[(c[(c[f+8>>2]|0)+180>>2]|0)+8>>2]|0)+164>>2]|0;if((k|0)!=0){l=0;m=0;n=k;while(1){k=n+8|0;c[(c[g>>2]|0)+(l<<2)>>2]=(c[(c[k>>2]|0)+232>>2]|0)-m;o=c[k>>2]|0;k=c[o+164>>2]|0;if((k|0)==0){break}else{l=l+1|0;m=c[o+232>>2]|0;n=k}}}n=j+8|0;m=c[(c[n>>2]|0)+180>>2]|0;l=c[(c[m+8>>2]|0)+164>>2]|0;if((l|0)==0){p=m}else{m=0;g=0;k=l;while(1){l=k+8|0;c[(c[h>>2]|0)+(m<<2)>>2]=(c[(c[l>>2]|0)+232>>2]|0)-g;o=c[l>>2]|0;l=c[o+164>>2]|0;if((l|0)==0){break}else{m=m+1|0;g=c[o+232>>2]|0;k=l}}p=c[(c[n>>2]|0)+180>>2]|0}if((p|0)!=0){k=p;do{g=k+8|0;m=c[g>>2]|0;h=c[m+172>>2]|0;if((h|0)==0){q=m}else{eF(h);q=c[g>>2]|0}h=c[q+180>>2]|0;if((h|0)==0){r=q}else{eF(h);r=c[g>>2]|0}k=c[r+164>>2]|0;}while((k|0)!=0)}Kw(f)|0;Kw(j)|0;i=b;return}}while(0);Aj(a);i=b;return}function Fj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0;e=i;i=i+256|0;f=e|0;g=e+8|0;j=e+40|0;k=e+112|0;l=e+128|0;c[j+48>>2]=b;m=Sx(b)|0;if((m|0)==0){n=c[b+48>>2]|0;c[j+52>>2]=n;o=n}else if((m|0)==2){n=Hx(c[((c[b>>2]&3|0)==2?b:b-32|0)+28>>2]|0)|0;c[j+52>>2]=n;o=n}else if((m|0)==1){m=Hx(b)|0;c[j+52>>2]=m;o=m}else{o=c[j+52>>2]|0}m=j+52|0;n=c[o+48>>2]|0;h[j+32>>3]=+h[d+16>>3];c[j+16>>2]=c[d+4>>2];c[j+20>>2]=c[d+8>>2];o=j+40|0;c[o>>2]=c[o>>2]&-128;o=d|0;p=lj(c[o>>2]|0,f,j)|0;if((p|0)==0){Iv(k,128,l|0);a[d+82|0]=0;l=Sx(b)|0;do{if((l|0)==0){Lv(k,$w(b)|0)|0}else if((l|0)==1){Lv(k,$w(b)|0)|0}else if((l|0)==2){q=b;r=b;Lv(k,$w(c[((c[r>>2]&3|0)==3?q:b+32|0)+28>>2]|0)|0)|0;s=b-32|0;Lv(k,$w(c[((c[r>>2]&3|0)==2?q:s)+28>>2]|0)|0)|0;if((Nw(Hx(c[((c[r>>2]&3|0)==2?q:s)+28>>2]|0)|0)|0)==0){Lv(k,133720)|0;break}else{Lv(k,136608)|0;break}}}while(0);l=k+4|0;s=c[l>>2]|0;if(s>>>0<(c[k+8>>2]|0)>>>0){t=s}else{Jv(k,1)|0;t=c[l>>2]|0}a[t]=0;t=c[k>>2]|0;c[l>>2]=t;l=Lb(t|0)|0;c[o>>2]=l;if((c[d+12>>2]|0)==1){u=kn(l)|0}else{u=hn(l,c[m>>2]|0)|0}eF(c[o>>2]|0);c[o>>2]=u;_j(c[(c[n+8>>2]|0)+136>>2]|0,d);Mv(k);v=c[f>>2]|0;i=e;return v|0}k=p+4|0;if((a[k]|0)==1){u=p|0;do{if((c[(c[u>>2]|0)+24>>2]|0)==0){m=ew(b,142240)|0;if((m|0)==0){w=23}else{if((a[m]|0)==0){w=23}}if((w|0)==23){m=ew(b,139152)|0;if((m|0)==0){break}if((a[m]|0)==0){break}}m=ew(b,142240)|0;if((m|0)==0){w=27}else{if((a[m]|0)==0){w=27}else{x=m}}do{if((w|0)==27){m=ew(b,139152)|0;if((m|0)!=0){if((a[m]|0)!=0){x=m;break}}x=0}}while(0);m=Lb(x|0)|0;c[(c[u>>2]|0)+24>>2]=m}}while(0);x=Gj(n,c[u>>2]|0,0,j)|0;c[f>>2]=c[f>>2]|x;x=c[u>>2]|0;y=(+h[x+64>>3]+1.0)*.5;z=(+h[x+72>>3]+1.0)*.5;u=g|0;h[u>>3]=-0.0-y;b=g+8|0;h[b>>3]=-0.0-z;w=g+16|0;h[w>>3]=y;m=g+24|0;h[m>>3]=z;Hj(x,g,15);h[d+24>>3]=+h[w>>3]- +h[u>>3];h[d+32>>3]=+h[m>>3]- +h[b>>3]}else{b=p;Ij(c[(c[n+8>>2]|0)+136>>2]|0,c[b>>2]|0,j);j=c[b>>2]|0;z=+h[j+24>>3]*.5;y=+h[j+32>>3]*.5;b=g;h[g>>3]=-0.0-z;h[g+8>>3]=-0.0-y;h[g+16>>3]=z;h[g+24>>3]=y;g=j+8|0;c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];c[g+16>>2]=c[b+16>>2];c[g+20>>2]=c[b+20>>2];c[g+24>>2]=c[b+24>>2];c[g+28>>2]=c[b+28>>2];h[d+24>>3]=z+z;h[d+32>>3]=y+y}c[d+72>>2]=p;if((a[k]|0)!=1){v=c[f>>2]|0;i=e;return v|0}eF(c[o>>2]|0);c[o>>2]=Lb(86272)|0;v=c[f>>2]|0;i=e;return v|0}function Gj(f,g,j,k){f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;l=i;m=g+108|0;n=c[m>>2]|0;do{if((n|0)!=0){o=k+16|0;p=c[o>>2]|0;do{if((p|0)!=0){q=n|0;if((c[q>>2]|0)==0){c[43752]=0;break}else{c[43752]=p;c[o>>2]=c[q>>2];break}}}while(0);o=k+20|0;p=c[o>>2]|0;do{if((p|0)!=0){q=n+4|0;if((c[q>>2]|0)==0){c[43753]=0;break}else{c[43753]=p;c[o>>2]=c[q>>2];break}}}while(0);o=k+32|0;r=+h[o>>3];if(r<0.0){break}p=n+16|0;if(+h[p>>3]<0.0){h[21878]=-1.0;break}else{h[21878]=r;h[o>>3]=+h[p>>3];break}}}while(0);c[g+80>>2]=j;j=g+84|0;n=c[j>>2]|0;p=Dk()|0;o=Uj()|0;q=Zg(n)|0;if((q|0)==0){s=0}else{t=1;u=0;v=q;while(1){q=Zg(c[v+8>>2]|0)|0;if((q|0)==0){w=u}else{x=u;y=q;while(1){q=x+1|0;z=c[y>>2]|0;if((z|0)==0){w=q;break}else{x=q;y=z}}}if((a[v+12|0]|0)!=0){Vj(o,t)}y=c[v>>2]|0;if((y|0)==0){s=w;break}else{t=t+1|0;u=w;v=y}}}v=jk((s<<2)+4|0)|0;c[j>>2]=v;j=Zg(n)|0;if((j|0)==0){A=0;B=0;C=0}else{s=0;w=v;v=0;u=0;t=0;y=j;while(1){j=Zg(c[y+8>>2]|0)|0;if((j|0)==0){D=w;E=v;F=u;G=t}else{x=s&65535;z=0;q=w;H=v;I=u;J=t;K=j;while(1){j=c[K+8>>2]|0;L=q+4|0;c[q>>2]=j;M=Jj(f,j,g,k)|0|H;N=j+80|0;O=b[N>>1]|0;P=(O&65535)-1|0;do{if(O<<16>>16==0){Q=z;R=25}else{S=z;a:while(1){T=P+S|0;while(1){if((Ik(p,T,s)|0)!=0){break}if((T|0)>(S|0)){T=T-1|0}else{break a}}S=T+1|0}U=b[N>>1]|0;if(U<<16>>16==0){Q=S;R=25;break}V=j+82|0;W=b[V>>1]|0;X=S;Y=W;Z=U;U=W;while(1){if(Y<<16>>16==0){_=0;$=Z;aa=U}else{W=s;do{Gk(p,X,W);W=W+1|0;ba=b[V>>1]|0;}while((W|0)<((ba&65535)+s|0));_=ba;$=b[N>>1]|0;aa=ba}W=X+1|0;if((W|0)<(($&65535)+S|0)){X=W;Y=_;Z=$;U=aa}else{ca=$;ea=aa;fa=S;break}}}}while(0);if((R|0)==25){R=0;ca=0;ea=b[j+82>>1]|0;fa=Q}b[j+86>>1]=x;b[j+84>>1]=fa;N=(ca&65535)+fa|0;P=(N|0)>(J|0)?N:J;O=(ea&65535)+s|0;S=(O|0)>(I|0)?O:I;if((Wj(o,O)|0)!=0){O=j+100|0;a[O]=a[O]|2}O=c[K>>2]|0;if((O|0)==0){D=L;E=M;F=S;G=P;break}else{z=N;q=L;H=M;I=S;J=P;K=O}}}K=c[y>>2]|0;if((K|0)==0){A=E;B=F;C=G;break}else{s=s+1|0;w=D;v=E;u=F;t=G;y=K}}}y=g+100|0;c[y>>2]=B;B=g+104|0;c[B>>2]=C;Vg(n)|0;Vg(o)|0;Ek(p);p=g+36|0;o=b[p>>1]|0;if((o&128)==0){a[g+32|0]=2}n=g+33|0;if((o&32)==0){a[n]=1}Ej(g);o=c[B>>2]|0;B=a[g+32|0]|0;C=da(B,o+1|0)|0;G=d[n]<<1;n=G+C|0;C=c[y>>2]|0;y=(da(C+1|0,B)|0)+G|0;if((o|0)>0){G=c[g+96>>2]|0;B=0;t=n;while(1){F=(c[G+(B<<2)>>2]|0)+t|0;u=B+1|0;if((u|0)<(o|0)){B=u;t=F}else{ga=F;break}}}else{ga=n}if((C|0)>0){n=c[g+92>>2]|0;t=0;B=y;while(1){o=(c[n+(t<<2)>>2]|0)+B|0;G=t+1|0;if((G|0)<(C|0)){t=G;B=o}else{ha=o;break}}}else{ha=y}y=g+38|0;b:do{if((b[p>>1]&1)==0){ia=A;ja=ha;ka=ga}else{B=b[y>>1]|0;t=B&65535;do{if(B<<16>>16!=0){C=b[g+40>>1]|0;if(C<<16>>16==0){break}if(!((t|0)<(ga|0)|(C&65535|0)<(ha|0))){ia=A;ja=0;ka=0;break b}Fv(0,159600,(la=i,i=i+1|0,i=i+7&-8,c[la>>2]=0,la)|0)|0;i=la;ia=1;ja=0;ka=0;break b}}while(0);Fv(0,154576,(la=i,i=i+1|0,i=i+7&-8,c[la>>2]=0,la)|0)|0;i=la;ia=1;ja=ha;ka=ga}}while(0);ga=e[y>>1]|0;h[g+64>>3]=+(((ka|0)>(ga|0)?ka:ga)|0);ga=e[g+40>>1]|0;h[g+72>>3]=+(((ja|0)>(ga|0)?ja:ga)|0);if((c[m>>2]|0)==0){i=l;return ia|0}m=c[43752]|0;if((m|0)!=0){c[k+16>>2]=m}m=c[43753]|0;if((m|0)!=0){c[k+20>>2]=m}r=+h[21878];if(r<0.0){i=l;return ia|0}h[k+32>>3]=r;i=l;return ia|0}function Hj(f,g,j){f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0.0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0.0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0,ca=0,ea=0.0,fa=0.0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0;k=i;i=i+32|0;l=g;g=i;i=i+32|0;tF(g,l,32)|0;l=k|0;m=c[f+84>>2]|0;n=c[f+80>>2]|0;do{if((n|0)!=0){o=c[n+24>>2]|0;if((o|0)==0){break}p=f+24|0;if((c[p>>2]|0)!=0){break}c[p>>2]=Lb(o|0)|0}}while(0);n=f+48|0;o=g+16|0;q=+h[o>>3];p=g|0;r=+h[p>>3];s=~~(q-r- +(~~+h[f+64>>3]|0));if((s|0)<=-1){cc(81552,167808,1708,170064)}t=g+24|0;u=+h[t>>3];v=g+8|0;w=+h[v>>3];x=+(~~+h[f+72>>3]|0);y=~~(u-w-x);if((y|0)<=-1){cc(163632,167808,1711,170064)}z=e[f+36>>1]|0;do{if((z&1|0)==0){A=y;B=s;C=r;D=u}else{do{if((s|0)>0){E=z&6;if((E|0)==4){h[o>>3]=r+x;F=0;G=r;break}else if((E|0)==2){H=+(s|0);h[o>>3]=q+H;I=H+r;h[p>>3]=I;F=0;G=I;break}else{I=+((s|0)/2|0|0);H=r+I;h[p>>3]=H;h[o>>3]=q-I;F=0;G=H;break}}else{F=s;G=r}}while(0);if((y|0)<=0){A=y;B=F;C=G;D=u;break}E=z&24;if((E|0)==8){H=+(y|0);I=H+u;h[t>>3]=I;h[v>>3]=H+w;A=0;B=F;C=G;D=I;break}else if((E|0)==16){I=x+w;h[t>>3]=I;A=0;B=F;C=G;D=I;break}else{I=+((y|0)/2|0|0);h[v>>3]=w+I;H=u-I;h[t>>3]=H;A=0;B=F;C=G;D=H;break}}}while(0);F=f+33|0;t=a[F]|0;v=f+32|0;y=a[v]|0;z=f+104|0;s=c[z>>2]|0;o=(B|0)/(s|0)|0;p=B-(da(o,s)|0)|0;G=+(p|0);if((p|0)>-1){J=G+.5}else{J=G+-.5}p=~~J;if((s|0)<0){K=t;L=y}else{s=f+96|0;B=0;E=~~(+(y<<24>>24|0)+(C+ +(t&255|0)));while(1){t=(c[s>>2]|0)+(B<<2)|0;y=c[t>>2]|0;c[t>>2]=E;M=a[v]|0;t=E+o+((B|0)<(p|0))+y+(M<<24>>24)|0;if((B|0)<(c[z>>2]|0)){B=B+1|0;E=t}else{break}}K=a[F]|0;L=M}M=f+100|0;F=c[M>>2]|0;E=(A|0)/(F|0)|0;B=A-(da(E,F)|0)|0;C=+(B|0);if((B|0)>-1){N=C+.5}else{N=C+-.5}B=~~N;if((F|0)>=0){F=f+92|0;A=~~(D- +(K&255|0)- +(L<<24>>24|0));L=0;while(1){K=(c[F>>2]|0)+(L<<2)|0;p=c[K>>2]|0;c[K>>2]=A;if((L|0)<(c[M>>2]|0)){A=A-E+(((L|0)<(B|0))<<31>>31)-p-(a[v]|0)|0;L=L+1|0}else{break}}}L=c[m>>2]|0;if((L|0)==0){O=j&255;P=f+35|0;a[P]=O;Q=n;R=g;c[Q>>2]=c[R>>2];c[Q+4>>2]=c[R+4>>2];c[Q+8>>2]=c[R+8>>2];c[Q+12>>2]=c[R+12>>2];c[Q+16>>2]=c[R+16>>2];c[Q+20>>2]=c[R+20>>2];c[Q+24>>2]=c[R+24>>2];c[Q+28>>2]=c[R+28>>2];i=k;return}B=(j|0)==0;E=f+96|0;A=f+92|0;F=l;p=l|0;K=l+8|0;o=l+16|0;s=l+24|0;t=m;m=L;do{t=t+4|0;L=b[m+84>>1]|0;if(B){S=0;T=b[m+80>>1]|0;U=b[m+86>>1]|0;V=b[m+82>>1]|0}else{y=L<<16>>16==0?8:0;W=b[m+86>>1]|0;X=W<<16>>16==0?y|4:y;y=b[m+80>>1]|0;Y=b[m+82>>1]|0;S=((Y&65535)+(W&65535)|0)==(c[M>>2]|0)|(((y&65535)+(L&65535)|0)==(c[z>>2]|0)?X|2:X);T=y;U=W;V=Y}Y=L&65535;L=c[E>>2]|0;D=+(c[L+(Y<<2)>>2]|0);W=a[v]|0;N=+((c[L+((T&65535)+Y<<2)>>2]|0)-W|0);Y=U&65535;L=c[A>>2]|0;C=+(c[L+(Y<<2)>>2]|0);J=+((c[L+((V&65535)+Y<<2)>>2]|0)+W|0);W=S&j;Y=m+24|0;do{if((c[Y>>2]|0)==0){L=c[(c[m+96>>2]|0)+24>>2]|0;if((L|0)==0){break}c[Y>>2]=Lb(L|0)|0}}while(0);Y=m+36|0;L=e[Y>>1]|0;y=m+64|0;do{if((L&1|0)==0){Z=D;_=J;$=N;aa=C;ba=m+72|0}else{G=+h[y>>3];X=m+72|0;u=+h[X>>3];w=N-D-G;do{if(w>0.0){ca=L&6;if((ca|0)==2){ea=D+w;fa=N+w;break}else if((ca|0)==4){ea=D;fa=D+G;break}else{x=w*.5;ea=D+x;fa=N-x;break}}else{ea=D;fa=N}}while(0);w=C-J-u;if(w<=0.0){Z=ea;_=J;$=fa;aa=C;ba=X;break}ca=L&24;if((ca|0)==16){Z=ea;_=J;$=fa;aa=J+u;ba=X;break}else if((ca|0)==8){Z=ea;_=J+w;$=fa;aa=C+w;ba=X;break}else{G=w*.5;Z=ea;_=J+G;$=fa;aa=C-G;ba=X;break}}}while(0);h[m+48>>3]=Z;h[m+56>>3]=_;h[y>>3]=$;h[ba>>3]=aa;a[m+35|0]=W;C=+(d[m+33|0]|0);J=+(d[m+34|0]|0);N=Z+C+J;h[p>>3]=N;D=_+C+J;h[K>>3]=D;G=$-C-J;h[o>>3]=G;w=aa-C-J;h[s>>3]=w;ca=m+88|0;ga=a[m+92|0]|0;do{if((ga<<24>>24|0)==1){Hj(c[ca>>2]|0,l,W)}else if((ga<<24>>24|0)==3){ha=c[ca>>2]|0;J=+h[ha+24>>3];C=G-N- +h[ha+16>>3];do{if(C>0.0){ia=L&6;if((ia|0)==2){h[p>>3]=N+C;break}else if((ia|0)==4){h[o>>3]=G-C;break}else{break}}}while(0);C=w-D-J;do{if(C>0.0){X=L&24;if((X|0)==16){h[s>>3]=w-C;break}else if((X|0)==8){h[K>>3]=D+C;break}else{break}}}while(0);X=ha;c[X>>2]=c[F>>2];c[X+4>>2]=c[F+4>>2];c[X+8>>2]=c[F+8>>2];c[X+12>>2]=c[F+12>>2];c[X+16>>2]=c[F+16>>2];c[X+20>>2]=c[F+20>>2];c[X+24>>2]=c[F+24>>2];c[X+28>>2]=c[F+28>>2]}else{X=ca;ia=c[X>>2]|0;C=+h[ia+32>>3];J=G-N- +h[ia+24>>3];do{if(J>0.0){ja=L&6;if((ja|0)==2){h[p>>3]=N+J;break}else if((ja|0)==4){h[o>>3]=G-J;break}else if((ja|0)==6){break}else{u=J*.5;h[p>>3]=N+u;h[o>>3]=G-u;break}}}while(0);J=w-D-C;do{if(J>0.0){ha=L&24;if((ha|0)==8){h[K>>3]=D+J;break}else if((ha|0)==16){h[s>>3]=w-J;break}else{u=J*.5;h[K>>3]=D+u;h[s>>3]=w-u;break}}}while(0);ha=ia+8|0;c[ha>>2]=c[F>>2];c[ha+4>>2]=c[F+4>>2];c[ha+8>>2]=c[F+8>>2];c[ha+12>>2]=c[F+12>>2];c[ha+16>>2]=c[F+16>>2];c[ha+20>>2]=c[F+20>>2];c[ha+24>>2]=c[F+24>>2];c[ha+28>>2]=c[F+28>>2];ha=b[Y>>1]&768;if((ha|0)==256){ka=114}else if((ha|0)==512){ka=108}else{ka=110}ha=c[X>>2]|0;ja=ha+4|0;la=b[ja>>1]|0;if(la<<16>>16<=0){break}ma=ha|0;ha=0;na=la;while(1){la=(c[ma>>2]|0)+(ha*24|0)+6|0;if((a[la]|0)==0){a[la]=ka;oa=b[ja>>1]|0}else{oa=na}la=ha+1|0;if((la|0)<(oa<<16>>16|0)){ha=la;na=oa}else{break}}}}while(0);m=c[t>>2]|0;}while((m|0)!=0);O=j&255;P=f+35|0;a[P]=O;Q=n;R=g;c[Q>>2]=c[R>>2];c[Q+4>>2]=c[R+4>>2];c[Q+8>>2]=c[R+8>>2];c[Q+12>>2]=c[R+12>>2];c[Q+16>>2]=c[R+16>>2];c[Q+20>>2]=c[R+20>>2];c[Q+24>>2]=c[R+24>>2];c[Q+28>>2]=c[R+28>>2];i=k;return}function Ij(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0.0,N=0,O=0.0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0,ba=0.0,ca=0.0,da=0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0,na=0.0;g=i;i=i+104|0;j=g|0;k=g+56|0;l=g+88|0;m=k;c[m>>2]=c[2950];c[m+4>>2]=c[2951];c[m+8>>2]=c[2952];c[m+12>>2]=c[2953];c[m+16>>2]=c[2954];c[m+20>>2]=c[2955];c[m+24>>2]=c[2956];c[m+28>>2]=c[2957];n=e|0;o=e+4|0;p=b[o>>1]|0;q=p<<16>>16>0;if(!q){a[e+6|0]=1;r=0.0;s=0.0;t=0.0;u=p;v=e+24|0;h[v>>3]=s;w=u<<16>>16==1;x=e+32|0;y=w?t:r;h[x>>3]=y;i=g;return}z=f+32|0;A=k+16|0;B=f+16|0;C=k|0;D=c[n>>2]|0;E=0;F=-1.0;G=0;a:while(1){if((b[D+(E*24|0)+4>>1]|0)>1){H=0;break}I=D+(E*24|0)|0;J=c[(c[I>>2]|0)+4>>2]|0;do{if((J|0)==0){K=+h[z>>3];h[A>>3]=K;L=c[B>>2]|0;c[C>>2]=L;M=K;N=L}else{if((c[J+24>>2]&127|0)!=0){H=0;break a}K=+h[J+16>>3];if(K>0.0){O=K}else{O=+h[z>>3]}h[A>>3]=O;L=c[c[(c[I>>2]|0)+4>>2]>>2]|0;if((L|0)==0){P=c[B>>2]|0;c[C>>2]=P;M=O;N=P;break}else{c[C>>2]=L;M=O;N=L;break}}}while(0);if(F==-1.0){Q=M}else{if(M!=F){H=0;break}else{Q=F}}if((G|0)==0){R=N}else{if((Ya(N|0,G|0)|0)==0){R=G}else{H=0;break}}I=E+1|0;if((I|0)<(p<<16>>16|0)){E=I;F=Q;G=R}else{H=1;break}}a[e+6|0]=H;if(!q){r=0.0;s=0.0;t=0.0;u=p;v=e+24|0;h[v>>3]=s;w=u<<16>>16==1;x=e+32|0;y=w?t:r;h[x>>3]=y;i=g;return}p=(H|0)==0;H=f+48|0;q=j|0;R=f+32|0;G=k+16|0;E=f+16|0;N=k|0;C=f+20|0;B=k+4|0;A=f+40|0;f=k+24|0;k=d+144|0;z=j+4|0;D=l|0;I=l+8|0;J=j+16|0;L=j+24|0;P=j+8|0;S=j+12|0;Q=0.0;F=0.0;M=0.0;T=0;U=c[n>>2]|0;while(1){if((b[U+(T*24|0)+4>>1]|0)>0){O=0.0;V=0;K=0.0;W=0.0;X=0.0;Y=U;while(1){c[q>>2]=fk(c[(c[Y+(T*24|0)>>2]|0)+(V*56|0)>>2]|0,c[H>>2]|0)|0;Z=(c[n>>2]|0)+(T*24|0)|0;_=c[(c[Z>>2]|0)+(V*56|0)+4>>2]|0;do{if((_|0)==0){h[G>>3]=+h[R>>3];c[N>>2]=c[E>>2];c[B>>2]=c[C>>2];c[f>>2]=c[f>>2]&-128|c[A>>2]&127}else{$=c[_+24>>2]<<25>>25;do{if(($|0)==0){aa=c[A>>2]|0;if((aa<<25>>25|0)>0<<25>>25&127){c[f>>2]=c[f>>2]&-128|aa&127;break}else{c[f>>2]=c[f>>2]&-128;break}}else{c[f>>2]=c[f>>2]&-128|$&127}}while(0);ba=+h[(c[(c[Z>>2]|0)+(V*56|0)+4>>2]|0)+16>>3];if(ba>0.0){ca=ba}else{ca=+h[R>>3]}h[G>>3]=ca;$=c[c[(c[Z>>2]|0)+(V*56|0)+4>>2]>>2]|0;if(($|0)==0){da=c[E>>2]|0}else{da=$}c[N>>2]=da;$=c[(c[(c[Z>>2]|0)+(V*56|0)+4>>2]|0)+4>>2]|0;if(($|0)==0){c[B>>2]=c[C>>2];break}else{c[B>>2]=$;break}}}while(0);Z=c[k>>2]|0;c[z>>2]=Hc[c[Z>>2]&63](Z,m,1)|0;sm(l,d,j);ba=+h[D>>3];ea=+h[I>>3];eF(c[(c[(c[n>>2]|0)+(T*24|0)>>2]|0)+(V*56|0)>>2]|0);c[(c[(c[n>>2]|0)+(T*24|0)>>2]|0)+(V*56|0)>>2]=c[q>>2];h[(c[(c[n>>2]|0)+(T*24|0)>>2]|0)+(V*56|0)+32>>3]=ba;h[(c[(c[n>>2]|0)+(T*24|0)>>2]|0)+(V*56|0)+16>>3]=+h[J>>3];h[(c[(c[n>>2]|0)+(T*24|0)>>2]|0)+(V*56|0)+24>>3]=+h[L>>3];c[(c[(c[n>>2]|0)+(T*24|0)>>2]|0)+(V*56|0)+4>>2]=c[z>>2];c[(c[(c[n>>2]|0)+(T*24|0)>>2]|0)+(V*56|0)+8>>2]=c[P>>2];c[(c[(c[n>>2]|0)+(T*24|0)>>2]|0)+(V*56|0)+12>>2]=c[S>>2];fa=K+ba;ba=+h[G>>3];ga=ba>O?ba:O;ba=ea>X?ea:X;ea=+h[L>>3];ha=ea>W?ea:W;Z=V+1|0;_=c[n>>2]|0;if((Z|0)<(b[_+(T*24|0)+4>>1]|0)){O=ga;V=Z;K=fa;W=ha;X=ba;Y=_}else{ia=ga;ja=fa;ka=ha;la=ba;ma=_;break}}}else{ia=0.0;ja=0.0;ka=0.0;la=0.0;ma=U}h[ma+(T*24|0)+8>>3]=ja;Y=(T|0)==0;do{if(p){if(Y){h[(c[n>>2]|0)+16>>3]=ia-ka;na=ia;break}else{h[(c[n>>2]|0)+(T*24|0)+16>>3]=F+ia-Q-ka;na=ia;break}}else{V=(c[n>>2]|0)+(T*24|0)+16|0;if(Y){h[V>>3]=ia;na=la;break}else{h[V>>3]=la;na=la;break}}}while(0);Y=c[n>>2]|0;X=ja>M?ja:M;W=F+na;V=T+1|0;_=b[o>>1]|0;if((V|0)<(_<<16>>16|0)){Q=Q+ +h[Y+(T*24|0)+16>>3];F=W;M=X;T=V;U=Y}else{r=W;s=X;t=la;u=_;break}}v=e+24|0;h[v>>3]=s;w=u<<16>>16==1;x=e+32|0;y=w?t:r;h[x>>3]=y;i=g;return}function Jj(f,g,j,k){f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0.0,F=0.0;l=i;i=i+8|0;m=l|0;c[g+96>>2]=j;n=g+36|0;o=b[n>>1]|0;do{if((o&64)==0){if((b[j+36>>1]&64)==0){a[g+34|0]=2;break}else{a[g+34|0]=a[j+34|0]|0;break}}}while(0);do{if((o&32)==0){p=a[j+88|0]|0;if(p<<24>>24>-1){a[g+33|0]=p;break}if((b[j+36>>1]&32)==0){a[g+33|0]=1;break}else{a[g+33|0]=a[j+33|0]|0;break}}}while(0);j=g+88|0;o=g+92|0;p=a[o]|0;if((p<<24>>24|0)==1){q=j|0;r=Gj(f,c[q>>2]|0,g,k)|0;s=c[q>>2]|0;t=r;u=s+64|0;v=s+72|0}else if((p<<24>>24|0)==3){p=j;s=c[p>>2]|0;r=k+52|0;q=s+32|0;FB(m,c[r>>2]|0,c[q>>2]|0);w=c[m>>2]|0;x=c[m+4>>2]|0;if((w|0)==-1&(x|0)==-1){Fv(1,145200,(y=i,i=i+8|0,c[y>>2]=c[q>>2],y)|0)|0;i=y;z=1;A=0.0;B=0.0}else{a[(c[(c[r>>2]|0)+8>>2]|0)+114|0]=1;z=0;A=+(x|0);B=+(w|0)}vF(s|0,0,16)|0;h[s+16>>3]=B;h[s+24>>3]=A;s=c[p>>2]|0;t=z;u=s+16|0;v=s+24|0}else{s=j;Ij(c[(c[f+8>>2]|0)+136>>2]|0,c[s>>2]|0,k);k=c[s>>2]|0;t=0;u=k+24|0;v=k+32|0}A=+((d[g+33|0]|0)+(d[g+34|0]|0)<<1|0);B=+h[u>>3]+A;C=+h[v>>3]+A;v=g+38|0;a:do{if((b[n>>1]&1)==0){D=t;E=B;F=C}else{u=b[v>>1]|0;k=u&65535;do{if(u<<16>>16!=0){s=b[g+40>>1]|0;if(s<<16>>16==0){break}if(+(k|0)>=B){if(+(s&65535|0)>=C){D=t;E=0.0;F=0.0;break a}}if((a[o]|0)==3){D=t;E=0.0;F=0.0;break a}Fv(0,151304,(y=i,i=i+1|0,i=i+7&-8,c[y>>2]=0,y)|0)|0;i=y;D=1;E=0.0;F=0.0;break a}}while(0);Fv(0,148360,(y=i,i=i+1|0,i=i+7&-8,c[y>>2]=0,y)|0)|0;i=y;D=1;E=B;F=C}}while(0);C=+(e[v>>1]|0);h[g+64>>3]=E>C?E:C;C=+(e[g+40>>1]|0);h[g+72>>3]=F>C?F:C;i=l;return D|0}function Kj(d,e,f,g,h,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;k=i;i=i+176|0;l=g;g=i;i=i+32|0;tF(g,l,32)|0;l=k|0;m=k+16|0;n=k+48|0;o=c[d+16>>2]|0;p=o+208|0;q=h|0;c[q>>2]=c[p>>2];r=o+228|0;c[h+4>>2]=c[r>>2];s=o+244|0;c[h+8>>2]=c[s>>2];t=o+212|0;c[h+12>>2]=c[t>>2];u=o+260|0;v=h+16|0;a[v]=b[u>>1]<<15<<16>>16>>15;h=c[f+16>>2]|0;if((h|0)==0){w=3}else{if((a[h]|0)==0){w=3}else{x=0;y=h}}if((w|0)==3){Iv(l,128,n|0);n=e+60|0;w=c[n>>2]|0;if((w|0)==0){h=Lb(Ih(d,c[o+8>>2]|0,l)|0)|0;c[n>>2]=h;a[e+64|0]=1;z=h}else{z=w}Lv(l,z)|0;z=m|0;m=c[44688]|0;c[44688]=m+1;nb(z|0,106104,(w=i,i=i+8|0,c[w>>2]=m,w)|0)|0;i=w;Lv(l,z)|0;z=l+4|0;w=c[z>>2]|0;if(w>>>0<(c[l+8>>2]|0)>>>0){A=w}else{Jv(l,1)|0;A=c[z>>2]|0}a[A]=0;A=c[l>>2]|0;c[z>>2]=A;x=1;y=A}A=Hh(d,0,c[f>>2]|0,c[f+12>>2]|0,c[f+8>>2]|0,y,c[o+8>>2]|0)|0;if(x){Mv(l)}if((A|0)==0){i=k;return A|0}do{if((j|0)!=0){if((c[q>>2]|0)==0){if((a[v]|0)==0){break}}hB(d)}}while(0);do{if((c[p>>2]|0)==0){if((b[u>>1]&1)!=0){break}i=k;return A|0}}while(0);Nh(d,g);gB(d,c[p>>2]|0,c[r>>2]|0,c[s>>2]|0,c[t>>2]|0);i=k;return A|0}function Lj(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,j=0,k=0,l=0.0;h=i;i=i+8|0;j=h|0;if((Vh(b,f,j)|0)<<24>>24==0){nB(a,b);k=1;lB(a,106536);i=h;return k|0}nB(a,c[f>>2]|0);b=c[f+4>>2]|0;l=+g[j>>2];if((b|0)==0){oB(a,127648,d,l)}else{oB(a,b,d,l)}k=e>>>1&1|2;lB(a,106536);i=h;return k|0}function Mj(e,f,g){e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0;j=i;i=i+104|0;k=g;g=i;i=i+32|0;tF(g,k,32)|0;k=j|0;l=j+32|0;m=j+96|0;n=c[f+24>>2]|0;lB(e,(n|0)==0?127648:n);n=f+42|0;o=b[n>>1]|0;if((o&384)==0){pB(e,c[(c[e>>2]|0)+336>>2]|0)}else{c[m+4>>2]=0;p=m|0;c[p>>2]=0;m=o&65535;do{if((m&256|0)==0){if((m&128|0)==0){break}c[p>>2]=106976}else{c[p>>2]=107656}}while(0);pB(e,p)}p=f+33|0;xB(e,+((d[p]|0)>>>0));if((b[n>>1]&4)==0){n=a[p]|0;if((n&255)>>>0>1>>>0){q=+((n&255)>>>0)*.5;n=g|0;h[n>>3]=q+ +h[n>>3];n=g+8|0;h[n>>3]=q+ +h[n>>3];n=g+16|0;h[n>>3]=+h[n>>3]-q;n=g+24|0;h[n>>3]=+h[n>>3]-q}sB(e,g,0);i=j;return}n=a[p]|0;p=g;tF(k|0,p|0,32)|0;tF(l|0,p|0,16)|0;p=l+32|0;g=p;f=k+16|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];if((n&255)>>>0>1>>>0){q=+(n&255|0)*.5;n=l|0;r=q+ +h[n>>3];h[n>>3]=r;n=l+8|0;s=q+ +h[n>>3];h[n>>3]=s;n=p|0;t=+h[n>>3]-q;h[n>>3]=t;n=l+40|0;u=+h[n>>3]-q;h[n>>3]=u;v=t;w=s;x=r;y=u}else{v=+h[p>>3];w=+h[l+8>>3];x=+h[l>>3];y=+h[l+40>>3]}h[l+16>>3]=v;h[l+24>>3]=w;h[l+48>>3]=x;h[l+56>>3]=y;ol(e,l|0,4,4,0);i=j;return}function Nj(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;g=c[d+16>>2]|0;h=g+208|0;if((c[h>>2]|0)==0){if((b[g+260>>1]&1)==0){i=0}else{j=3}}else{j=3}if((j|0)==3){hB(d);i=c[h>>2]|0}j=e|0;if((i|0)!=(c[j>>2]|0)){eF(i);c[h>>2]=c[j>>2]}j=g+228|0;i=c[j>>2]|0;k=e+4|0;if((i|0)!=(c[k>>2]|0)){eF(i);c[j>>2]=c[k>>2]}k=g+244|0;i=c[k>>2]|0;l=e+8|0;if((i|0)!=(c[l>>2]|0)){eF(i);c[k>>2]=c[l>>2]}l=g+212|0;i=c[l>>2]|0;m=e+12|0;if((i|0)==(c[m>>2]|0)){n=i}else{eF(i);i=c[m>>2]|0;c[l>>2]=i;n=i}i=g+260|0;g=a[e+16|0]&1;b[i>>1]=b[i>>1]&-2|g;if((f|0)==0){return}f=c[h>>2]|0;if((f|0)==0&g<<16>>16==0){return}gB(d,f,c[j>>2]|0,c[k>>2]|0,n);return}function Oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+8|0;f=e|0;g=ew(a|0,b)|0;if((g|0)==0){i=e;return}b=ac(g|0,120896,(g=i,i=i+8|0,c[g>>2]=f,g)|0)|0;i=g;if((b|0)<=0){i=e;return}h[d>>3]=+h[f>>3];i=e;return}function Pj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0;e=i;i=i+8|0;f=e|0;g=jk(96)|0;j=b+8|0;c[(c[j>>2]|0)+8>>2]=g;g=b|0;k=ew(g,112632)|0;if((k|0)==0){l=Qb(112136)|0;if((l|0)!=0){m=l;n=3}}else{m=k;n=3}if((n|0)==3){k=c[44740]|0;l=mk(k,(xF(m|0)|0)+12|0)|0;c[44740]=l;tF(l|0,111552,12)|0;AF(l|0,m|0)|0;Ib(c[44740]|0)|0}m=Im(g,Wv(b,0,160360,0)|0,159864)|0;do{if((pm(m,159144)|0)==0){o=1}else{if((pm(m,158816)|0)==0){o=1;break}if((pm(m,158496)|0)==0){o=1;break}if((pm(m,165784)|0)==0){o=1;break}if((pm(m,158216)|0)==0){o=1;break}if((pm(m,157864)|0)==0){o=1;break}if((pm(m,157304)|0)==0){o=1;break}if((pm(m,156984)|0)==0){o=2;break}if((pm(m,156624)|0)==0){o=2;break}if((pm(m,159864)|0)==0){o=0;break}if((pm(m,155472)|0)==0){o=0;break}Fv(0,154880,(p=i,i=i+8|0,c[p>>2]=m,p)|0)|0;i=p;o=0}}while(0);a[(c[j>>2]|0)+115|0]=o;do{if((c[53686]|0)==0){o=ew(g,110872)|0;c[53702]=o;if((o|0)!=0){break}c[53702]=c[53704]}}while(0);q=+Fm(g,Wv(b,0,110144,0)|0,0.0,0.0);h[c[(c[j>>2]|0)+8>>2]>>3]=q;o=ew(g,109472)|0;do{if((o|0)==0){r=0}else{m=a[o]|0;if((m<<24>>24|0)==76){if((Ya(o|0,108656)|0)==0){r=1;break}}else if((m<<24>>24|0)==66){if((Ya(o|0,107640)|0)==0){r=2;break}}else if((m<<24>>24|0)==82){m=(Ya(o|0,106968)|0)==0;r=m?3:0;break}else{r=0;break}r=0}}while(0);o=r<<2;if(d<<24>>24==0){c[(c[j>>2]|0)+116>>2]=o}else{c[(c[j>>2]|0)+116>>2]=o|r}q=+Fm(g,Wv(b,0,106528,0)|0,.25,.02);h[f>>3]=q;s=q*72.0;if(s<0.0){t=s+-.5}else{t=s+.5}c[(c[j>>2]|0)+236>>2]=~~t;r=Hm(g,Wv(b,0,106096,0)|0,0)|0;do{if((r|0)==0){h[f>>3]=.5;u=.5}else{o=ac(r|0,120896,(p=i,i=i+8|0,c[p>>2]=f,p)|0)|0;i=p;do{if((o|0)==0){h[f>>3]=.5;v=.5}else{t=+h[f>>3];if(t>=.02){v=t;break}h[f>>3]=.02;v=.02}}while(0);if((Ua(r|0,105624)|0)==0){u=v;break}a[(c[j>>2]|0)+264|0]=1;u=+h[f>>3]}}while(0);v=u*72.0;if(v<0.0){w=v+-.5}else{w=v+.5}c[(c[j>>2]|0)+240>>2]=~~w;f=(Em(g,Wv(b,0,105184,0)|0,0,0)|0)&255;a[(c[j>>2]|0)+231|0]=f;f=Um(Hm(g,Wv(b,0,104776,0)|0,0)|0,25512,25528)|0;c[(c[j>>2]|0)+232>>2]=f;f=ew(g,162064)|0;do{if((f|0)!=0){r=a[f]|0;if(r<<24>>24==0){break}p=r<<24>>24;if((p|0)==97){if(r<<24>>24!=97){break}if((Ya(f|0,161712)|0)!=0){break}c[(c[(c[j>>2]|0)+8>>2]|0)+84>>2]=4;break}else if((p|0)==99){if(r<<24>>24!=99){break}if((Ya(f|0,161360)|0)!=0){break}c[(c[(c[j>>2]|0)+8>>2]|0)+84>>2]=3;break}else if((p|0)==101){if(r<<24>>24!=101){break}if((Ya(f|0,161040)|0)!=0){break}c[(c[(c[j>>2]|0)+8>>2]|0)+84>>2]=5;break}else if((p|0)==102){if(r<<24>>24!=102){break}if((Ya(f|0,160744)|0)!=0){break}c[(c[(c[j>>2]|0)+8>>2]|0)+84>>2]=2;break}else{w=+rF(f);if(w<=0.0){break}c[(c[(c[j>>2]|0)+8>>2]|0)+84>>2]=1;h[(c[(c[j>>2]|0)+8>>2]|0)+16>>3]=w;break}}}while(0);f=Qj(b,104288,(c[(c[j>>2]|0)+8>>2]|0)+64|0)|0;a[(c[(c[j>>2]|0)+8>>2]|0)+80|0]=f;Qj(b,103680,(c[(c[j>>2]|0)+8>>2]|0)+48|0)|0;f=Km(ew(g,103016)|0)|0;a[(c[(c[j>>2]|0)+8>>2]|0)+82|0]=f;f=ew(g,102072)|0;do{if((f|0)==0){r=ew(g,101320)|0;if((r|0)==0){p=ew(g,100864)|0;if((p|0)==0){break}o=Km(p)|0;a[(c[(c[j>>2]|0)+8>>2]|0)+81|0]=o;break}o=a[r]|0;if(o<<24>>24==108){x=1}else{x=o<<24>>24==76|0}a[(c[(c[j>>2]|0)+8>>2]|0)+81|0]=x}else{o=(Rb(f|0)|0)==90|0;a[(c[(c[j>>2]|0)+8>>2]|0)+81|0]=o}}while(0);c[53850]=Um(ew(g,100448)|0,25480,25496)|0;a[215376]=Km(ew(g,99896)|0)|0;c[53522]=0;c[53746]=0;h[(c[(c[j>>2]|0)+8>>2]|0)+24>>3]=0.0;f=ew(g,99520)|0;if((f|0)==0){n=69}else{if((a[f]|0)==0){n=69}else{y=f;n=71}}do{if((n|0)==69){f=ew(g,99104)|0;if((f|0)==0){break}if((a[f]|0)!=0){y=f;n=71}}}while(0);if((n|0)==71){w=+rF(y);h[(c[(c[j>>2]|0)+8>>2]|0)+24>>3]=w}Rj(b);h[21638]=1.0e+37;c[53718]=Wv(b,0,98688,0)|0;c[53722]=Wv(b,0,98120,0)|0;c[53720]=Wv(b,0,97440,0)|0;c[53618]=Wv(b,1,96336,0)|0;c[53574]=Wv(b,1,95800,0)|0;c[53590]=Wv(b,1,95256,0)|0;c[53644]=Wv(b,1,94864,0)|0;c[53632]=Wv(b,1,94384,0)|0;c[53582]=Wv(b,1,94e3,0)|0;c[53624]=Wv(b,1,93512,0)|0;c[53626]=Wv(b,1,93040,0)|0;c[53628]=Wv(b,1,92576,0)|0;y=Wv(b,1,123672,0)|0;c[53614]=y;if((y|0)==0){c[53614]=Wv(b,1,123672,121792)|0}c[53572]=Wv(b,1,91936,0)|0;c[53588]=Wv(b,1,105184,0)|0;c[53600]=Wv(b,1,91080,0)|0;c[53604]=Wv(b,1,98688,0)|0;c[53610]=Wv(b,1,97440,0)|0;c[53586]=Wv(b,1,90576,0)|0;c[53598]=Wv(b,1,89984,0)|0;c[53584]=Wv(b,1,89432,0)|0;c[53602]=Wv(b,1,101320,0)|0;c[53636]=Wv(b,1,89040,0)|0;c[53630]=Wv(b,1,88576,0)|0;c[53616]=Wv(b,1,88152,0)|0;c[53606]=Wv(b,1,87720,0)|0;c[53612]=Wv(b,1,87208,0)|0;c[53620]=Wv(b,1,86672,0)|0;c[53642]=Wv(b,1,85808,0)|0;c[53580]=Wv(b,1,85352,0)|0;c[53570]=Wv(b,1,84896,0)|0;c[53622]=Wv(b,1,98120,0)|0;c[53750]=Wv(b,2,84536,0)|0;c[53816]=Wv(b,2,94864,0)|0;c[53802]=Wv(b,2,94384,0)|0;c[53796]=Wv(b,2,93512,0)|0;c[53798]=Wv(b,2,93040,0)|0;c[53800]=Wv(b,2,92576,0)|0;c[53790]=Wv(b,2,123672,0)|0;c[53748]=Wv(b,2,91936,0)|0;c[53788]=Wv(b,2,84080,0)|0;c[53804]=Wv(b,2,83688,0)|0;c[53822]=Wv(b,2,83280,0)|0;c[53818]=Wv(b,2,82880,0)|0;c[53792]=Wv(b,2,82488,0)|0;c[53756]=Wv(b,2,81920,0)|0;c[53778]=Wv(b,2,81208,0)|0;c[53780]=Wv(b,2,80656,0)|0;c[53782]=Wv(b,2,80200,0)|0;c[53784]=Wv(b,2,79896,0)|0;c[53786]=Wv(b,2,79456,0)|0;c[53774]=Wv(b,2,79144,0)|0;c[53762]=Wv(b,2,105184,0)|0;c[53760]=Wv(b,2,94e3,0)|0;c[53810]=Wv(b,2,78864,0)|0;c[53820]=Wv(b,2,168872,0)|0;c[53812]=Wv(b,2,168520,0)|0;c[53776]=Wv(b,2,87208,0)|0;c[53814]=Wv(b,2,85808,0)|0;c[53758]=Wv(b,2,168136,0)|0;c[53794]=Wv(b,2,167408,0)|0;c[53772]=Wv(b,2,91080,0)|0;y=Eh(b)|0;c[(c[(c[j>>2]|0)+8>>2]|0)+88>>2]=y;y=ew(g,166960)|0;if((y|0)==0){i=e;return}if((a[y]|0)==0){i=e;return}b=fk(y,g)|0;c[(c[(c[j>>2]|0)+8>>2]|0)+92>>2]=b;i=e;return}function Qj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0;f=i;i=i+24|0;g=f|0;j=f+8|0;k=f+16|0;a[k]=0;l=ew(b|0,d)|0;if((l|0)==0){m=0;i=f;return m|0}d=ac(l|0,162760,(b=i,i=i+24|0,c[b>>2]=g,c[b+8>>2]=j,c[b+16>>2]=k,b)|0)|0;i=b;do{if((d|0)>1){n=+h[g>>3];if(n<=0.0){break}o=+h[j>>3];if(o<=0.0){break}p=n*72.0;if(p<0.0){q=p+-.5}else{q=p+.5}h[e>>3]=+(~~q|0);p=o*72.0;if(p<0.0){r=p+-.5}else{r=p+.5}h[e+8>>3]=+(~~r|0);m=(a[k]|0)==33|0;i=f;return m|0}}while(0);a[k]=0;j=ac(l|0,162408,(b=i,i=i+16|0,c[b>>2]=g,c[b+8>>2]=k,b)|0)|0;i=b;if((j|0)<=0){m=0;i=f;return m|0}r=+h[g>>3];if(r<=0.0){m=0;i=f;return m|0}q=r*72.0;if(q<0.0){s=q+-.5;t=~~s;u=+(t|0);v=e|0;h[v>>3]=u;w=e+8|0;h[w>>3]=u;x=a[k]|0;y=x<<24>>24==33;z=y&1;i=f;return z|0}else{s=q+.5;t=~~s;u=+(t|0);v=e|0;h[v>>3]=u;w=e+8|0;h[w>>3]=u;x=a[k]|0;y=x<<24>>24==33;z=y&1;i=f;return z|0}return 0}function Rj(b){b=b|0;var d=0,e=0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0.0;d=b|0;e=ew(d,123672)|0;if((e|0)==0){return}if((a[e]|0)==0){return}f=(c[(c[b+48>>2]|0)+8>>2]|0)+113|0;a[f]=a[f]|8;f=(gy(e)|0)!=0;g=+Fm(d,Wv(b,0,93512,0)|0,14.0,1.0);i=Im(d,Wv(b,0,93040,0)|0,164760)|0;j=ak(d,e,f?2:0,g,i,Im(d,Wv(b,0,92576,0)|0,164336)|0)|0;i=b+8|0;c[(c[i>>2]|0)+12>>2]=j;j=ew(d,163984)|0;f=(j|0)!=0;do{if((Ix(d)|0)==(b|0)){if(f){if((a[j]|0)==116){k=1;break}}k=0}else{if(f){if((a[j]|0)==98){k=0;break}}k=1}}while(0);j=ew(d,163192)|0;do{if((j|0)==0){l=k}else{f=a[j]|0;if((f<<24>>24|0)==108){l=k|2;break}else if((f<<24>>24|0)==114){l=k|4;break}else{l=k;break}}}while(0);a[(c[i>>2]|0)+263|0]=l;if((Ix(d)|0)==(b|0)){return}b=c[(c[i>>2]|0)+12>>2]|0;g=+h[b+24>>3]+16.0;m=+h[b+32>>3]+8.0;b=(c[(c[(Ix(d)|0)+8>>2]|0)+116>>2]&1|0)==0;d=c[i>>2]|0;l=(a[d+263|0]&1)!=0;if(b){b=l?2:0;k=d+48|0;h[k+(b<<4)>>3]=g;h[k+(b<<4)+8>>3]=m;return}else{b=l?1:3;h[d+48+(b<<4)>>3]=m;h[(c[i>>2]|0)+48+(b<<4)+8>>3]=g;return}}function Sj(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=a+8|0;d=c[(c[b>>2]|0)+8>>2]|0;do{if((d|0)==0){e=0}else{f=c[d+88>>2]|0;if((f|0)==0){g=d}else{Hn(f);f=c[(c[b>>2]|0)+8>>2]|0;if((f|0)==0){e=0;break}else{g=f}}f=c[g+92>>2]|0;if((f|0)==0){e=g;break}eF(f);e=c[(c[b>>2]|0)+8>>2]|0}}while(0);eF(e);c[(c[b>>2]|0)+8>>2]=0;dk(c[(c[b>>2]|0)+12>>2]|0);_x(a,0,166512);return}function Tj(a){a=a|0;var b=0,d=0,e=0;b=i;if((a|0)==1){d=165784}else if((a|0)==2){d=165464}else if((a|0)==0){d=166168}else{Fv(1,165128,(e=i,i=i+8|0,c[e>>2]=a,e)|0)|0;i=e;d=166168}i=b;return d|0}function Uj(){return $g(21424,c[43330]|0)|0}function Vj(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d|0;c[e>>2]=b;Hc[c[a>>2]&63](a,e,1)|0;i=d;return}function Wj(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+8|0;e=d|0;c[e>>2]=b;b=(Hc[c[a>>2]&63](a,e,512)|0)!=0|0;i=d;return b|0}function Xj(a,b,d){a=a|0;b=b|0;d=d|0;d=jk(12)|0;c[d>>2]=c[b>>2];return d|0}function Yj(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function Zj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=c[b>>2]|0;b=c[d>>2]|0;if((e|0)>(b|0)){f=1;return f|0}f=((e|0)<(b|0))<<31>>31;return f|0}function _j(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;e=c[d>>2]|0;f=d+24|0;vF(f|0,0,16)|0;if((a[e]|0)==0){return}g=kk((xF(e|0)|0)+1|0)|0;a[g]=0;h=a[e]|0;do{if(h<<24>>24!=0){i=d+12|0;j=g;k=g;l=e;m=h;a:while(1){n=k;o=l;p=m;while(1){q=o+1|0;if((p&255)>>>0<161>>>0|(c[i>>2]|0)!=2|p<<24>>24==-1){if((p<<24>>24|0)==92){r=8;break}else if((p<<24>>24|0)==10){r=12;break}a[n]=p;s=n+1|0;t=q}else{a[n]=p;u=a[q]|0;v=n+2|0;a[n+1|0]=u;if(u<<24>>24==0){w=v;x=j;break a}else{s=v;t=o+2|0}}v=a[t]|0;if(v<<24>>24==0){w=s;x=j;break a}else{n=s;o=t;p=v}}if((r|0)==8){r=0;p=a[q]|0;v=p<<24>>24;if((v|0)==110|(v|0)==108|(v|0)==114){v=n+1|0;a[n]=0;$j(b,d,j,a[q]|0);y=v;z=v}else{a[n]=p;y=n+1|0;z=j}A=y;B=z;C=(a[q]|0)==0?q:o+2|0}else if((r|0)==12){r=0;p=n+1|0;a[n]=0;$j(b,d,j,110);A=p;B=p;C=q}p=a[C]|0;if(p<<24>>24==0){w=A;x=B;break}else{j=B;k=A;l=C;m=p}}if((x|0)==(w|0)){break}a[w]=0;$j(b,d,x,110)}}while(0);x=d+40|0;d=f;c[x>>2]=c[d>>2];c[x+4>>2]=c[d+4>>2];c[x+8>>2]=c[d+8>>2];c[x+12>>2]=c[d+12>>2];return}function $j(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0.0,A=0.0,B=0.0;j=i;i=i+16|0;k=j|0;l=e+76|0;m=b[l>>1]|0;n=e+72|0;o=c[n>>2]|0;if((o|0)==0){p=jk((m*56|0)+112|0)|0}else{p=lk(o,m+2|0,56,m+1|0)|0}m=p;c[n>>2]=m;n=b[l>>1]|0;p=m+(n*56|0)|0;c[p>>2]=f;a[m+(n*56|0)+48|0]=g;do{if((f|0)!=0){if((a[f]|0)==0){break}c[43704]=c[e+4>>2];h[21854]=+h[e+16>>3];g=c[d+144>>2]|0;c[m+(n*56|0)+4>>2]=Hc[c[g>>2]&63](g,174816,1)|0;sm(k,d,p);q=+h[k+8>>3];r=+h[k>>3];s=b[l>>1]|0;t=s+1&65535;b[l>>1]=t;u=e+24|0;v=+h[u>>3];w=v>r;x=w?v:r;h[u>>3]=x;y=e+32|0;z=+h[y>>3];A=q+z;h[y>>3]=A;i=j;return}}while(0);B=+(~~(+h[e+16>>3]*1.2)|0);h[m+(n*56|0)+40>>3]=B;q=B;r=0.0;s=b[l>>1]|0;t=s+1&65535;b[l>>1]=t;u=e+24|0;v=+h[u>>3];w=v>r;x=w?v:r;h[u>>3]=x;y=e+32|0;z=+h[y>>3];A=q+z;h[y>>3]=A;i=j;return}function ak(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=+g;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;l=i;m=jk(88)|0;n=m;o=Sx(b)|0;if((o|0)==0){p=0;q=0;r=b;s=c[b+48>>2]|0}else if((o|0)==1){p=0;q=b;r=0;s=Ix(Hx(b)|0)|0}else if((o|0)==2){o=b;p=o;q=0;r=0;s=Ix(Hx(c[((c[b>>2]&3|0)==2?o:b-32|0)+28>>2]|0)|0)|0}else{p=0;q=0;r=0;s=0}c[m+4>>2]=j;c[m+8>>2]=k;h[m+16>>3]=g;k=s+8|0;j=m+12|0;c[j>>2]=d[(c[k>>2]|0)+115|0]|0;if((f&4|0)!=0){c[m>>2]=Lb(e|0)|0;if((f&2|0)==0){i=l;return n|0}a[m+82|0]=1;i=l;return n|0}if((f|0)==2){c[m>>2]=Lb(e|0)|0;a[m+82|0]=1;if((Fj(b,n)|0)==0){i=l;return n|0}o=Sx(b)|0;if((o|0)==0){t=$w(r|0)|0;Fv(3,117880,(u=i,i=i+8|0,c[u>>2]=t,u)|0)|0;i=u;i=l;return n|0}else if((o|0)==1){t=$w(q|0)|0;Fv(3,156648,(u=i,i=i+8|0,c[u>>2]=t,u)|0)|0;i=u;i=l;return n|0}else if((o|0)==2){o=p;t=$w(c[((c[o>>2]&3|0)==3?p:p+32|0)+28>>2]|0)|0;q=(Nw(s)|0)!=0;r=$w(c[((c[o>>2]&3|0)==2?p:p-32|0)+28>>2]|0)|0;Fv(3,127032,(u=i,i=i+24|0,c[u>>2]=t,c[u+8>>2]=q?115048:108104,c[u+16>>2]=r,u)|0)|0;i=u;i=l;return n|0}else{i=l;return n|0}}else if((f|0)==0){f=bk(e,b,0)|0;b=m;c[b>>2]=f;if((c[j>>2]|0)==1){v=kn(f)|0}else{v=hn(f,s)|0}eF(c[b>>2]|0);c[b>>2]=v;_j(c[(c[k>>2]|0)+136>>2]|0,n);i=l;return n|0}else{cc(102408,96688,166,170344);return 0}return 0}function bk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;f=Sx(d)|0;do{if((f|0)==0){g=$w(d)|0;h=xF(g|0)|0;i=c[(c[d+8>>2]|0)+12>>2]|0;if((i|0)==0){j=0;k=0;l=0;m=2;n=2;o=2;p=2;q=2;r=h;s=133680;t=136504;u=139056;v=142152;w=145128;x=g;y=213432;z=213432;break}A=c[i>>2]|0;if((b|0)==0){j=0;k=0;l=0;m=2;n=2;o=2;p=2;q=2;r=h;s=A;t=136504;u=139056;v=142152;w=145128;x=g;y=213432;z=213432;break}j=0;k=0;l=0;m=xF(A|0)|0;n=2;o=2;p=2;q=2;r=h;s=A;t=136504;u=139056;v=142152;w=145128;x=g;y=213432;z=213432}else if((f|0)==1){g=$w(Hx(d)|0)|0;A=xF(g|0)|0;h=$w(d)|0;i=xF(h|0)|0;B=c[(c[d+8>>2]|0)+104>>2]|0;if((B|0)==0){j=0;k=0;l=0;m=2;n=2;o=2;p=2;q=i;r=A;s=133680;t=136504;u=139056;v=142152;w=h;x=g;y=213432;z=213432;break}C=c[B>>2]|0;if((b|0)==0){j=0;k=0;l=0;m=2;n=2;o=2;p=2;q=i;r=A;s=C;t=136504;u=139056;v=142152;w=h;x=g;y=213432;z=213432;break}j=0;k=0;l=0;m=xF(C|0)|0;n=2;o=2;p=2;q=i;r=A;s=C;t=136504;u=139056;v=142152;w=h;x=g;y=213432;z=213432}else if((f|0)==2){g=d;h=d;C=d+32|0;A=$w(Ix(Hx(c[((c[h>>2]&3|0)==3?g:C)+28>>2]|0)|0)|0)|0;i=xF(A|0)|0;B=$w(c[((c[h>>2]&3|0)==3?g:C)+28>>2]|0)|0;D=xF(B|0)|0;E=d+8|0;F=c[(c[E>>2]|0)+52>>2]|0;G=F;if((F|0)==0){H=0}else{H=xF(G|0)|0}F=$w(c[((c[h>>2]&3|0)==2?g:d-32|0)+28>>2]|0)|0;I=c[E>>2]|0;E=c[I+92>>2]|0;J=E;if((E|0)==0){K=0}else{K=xF(J|0)|0}E=xF(F|0)|0;L=c[I+96>>2]|0;do{if((L|0)==0){M=2;N=133680}else{I=c[L>>2]|0;if((b|0)==0){M=2;N=I;break}M=xF(I|0)|0;N=I}}while(0);L=(Nw(Ix(Hx(c[((c[h>>2]&3|0)==3?g:C)+28>>2]|0)|0)|0)|0)==0;j=1;k=K;l=H;m=M;n=D;o=E;p=D+2+((H|0)==0?0:H+1|0)+E+((K|0)==0?0:K+1|0)|0;q=2;r=i;s=N;t=B;u=F;v=L?108104:115048;w=145128;x=A;y=J;z=G}else{j=0;k=0;l=0;m=2;n=2;o=2;p=2;q=2;r=2;s=133680;t=136504;u=139056;v=142152;w=145128;x=148280;y=213432;z=213432}}while(0);N=(e|0)==0;a:do{if(N){e=0;K=b;b:while(1){H=K+1|0;M=a[K]|0;if((M<<24>>24|0)==0){O=e;break a}else if((M<<24>>24|0)!=92){e=e+1|0;K=H;continue}M=K+2|0;switch(a[H]|0){case 76:{e=e+m|0;K=M;continue b;break};case 78:{e=e+q|0;K=M;continue b;break};case 71:{e=e+r|0;K=M;continue b;break};case 84:{e=e+n|0;K=M;continue b;break};case 72:{e=e+o|0;K=M;continue b;break};case 69:{e=e+p|0;K=M;continue b;break};default:{e=e+2|0;K=M;continue b}}}}else{K=0;e=b;c:while(1){G=e+1|0;J=a[e]|0;if((J<<24>>24|0)==0){O=K;break a}else if((J<<24>>24|0)!=92){K=K+1|0;e=G;continue}J=e+2|0;switch(a[G]|0){case 71:{K=K+r|0;e=J;continue c;break};case 78:{K=K+q|0;e=J;continue c;break};case 69:{K=K+p|0;e=J;continue c;break};case 72:{K=K+o|0;e=J;continue c;break};case 84:{K=K+n|0;e=J;continue c;break};case 76:{K=K+m|0;e=J;continue c;break};case 92:{K=K+1|0;e=J;continue c;break};default:{K=K+2|0;e=J;continue c}}}}}while(0);m=kk(O+1|0)|0;O=(j|0)==0;j=(l|0)==0;l=(k|0)==0;k=m;n=b;d:while(1){b=n+1|0;o=a[n]|0;if((o<<24>>24|0)==0){break}else if((o<<24>>24|0)!=92){a[k]=o;k=k+1|0;n=b;continue}o=n+2|0;p=a[b]|0;e:do{switch(p<<24>>24|0){case 92:{if(N){break e}a[k]=92;k=k+1|0;n=o;continue d;break};case 71:{b=a[x]|0;a[k]=b;if(b<<24>>24==0){k=k;n=o;continue d}else{P=k;Q=x}while(1){b=Q+1|0;q=P+1|0;r=a[b]|0;a[q]=r;if(r<<24>>24==0){k=q;n=o;continue d}else{P=q;Q=b}}break};case 78:{b=a[w]|0;a[k]=b;if(b<<24>>24==0){k=k;n=o;continue d}else{R=k;S=w}while(1){b=S+1|0;q=R+1|0;r=a[b]|0;a[q]=r;if(r<<24>>24==0){k=q;n=o;continue d}else{R=q;S=b}}break};case 84:{b=a[t]|0;a[k]=b;if(b<<24>>24==0){k=k;n=o;continue d}else{T=k;U=t}while(1){b=U+1|0;q=T+1|0;r=a[b]|0;a[q]=r;if(r<<24>>24==0){k=q;n=o;continue d}else{T=q;U=b}}break};case 72:{b=a[u]|0;a[k]=b;if(b<<24>>24==0){k=k;n=o;continue d}else{V=k;W=u}while(1){b=W+1|0;q=V+1|0;r=a[b]|0;a[q]=r;if(r<<24>>24==0){k=q;n=o;continue d}else{V=q;W=b}}break};case 76:{b=a[s]|0;a[k]=b;if(b<<24>>24==0){k=k;n=o;continue d}else{X=k;Y=s}while(1){b=Y+1|0;q=X+1|0;r=a[b]|0;a[q]=r;if(r<<24>>24==0){k=q;n=o;continue d}else{X=q;Y=b}}break};case 69:{if(O){k=k;n=o;continue d}b=a[t]|0;a[k]=b;if(b<<24>>24==0){Z=k}else{b=k;q=t;while(1){r=q+1|0;e=b+1|0;K=a[r]|0;a[e]=K;if(K<<24>>24==0){Z=e;break}else{b=e;q=r}}}if(j){_=Z}else{a[Z]=58;q=z;b=Z;while(1){r=b+1|0;e=a[q]|0;a[r]=e;if(e<<24>>24==0){_=r;break}else{q=q+1|0;b=r}}}b=a[v]|0;a[_]=b;if(b<<24>>24==0){$=_}else{b=_;q=v;while(1){r=q+1|0;e=b+1|0;K=a[r]|0;a[e]=K;if(K<<24>>24==0){$=e;break}else{b=e;q=r}}}q=a[u]|0;a[$]=q;if(q<<24>>24==0){aa=$}else{q=$;b=u;while(1){r=b+1|0;e=q+1|0;K=a[r]|0;a[e]=K;if(K<<24>>24==0){aa=e;break}else{q=e;b=r}}}if(l){k=aa;n=o;continue d}a[aa]=58;b=y;q=aa;while(1){r=q+1|0;e=a[b]|0;a[r]=e;if(e<<24>>24==0){k=r;n=o;continue d}else{b=b+1|0;q=r}}break};default:{}}}while(0);a[k]=92;a[k+1|0]=p;k=k+2|0;n=o}a[k]=0;return m|0}function ck(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((a|0)==0){return}if((b|0)>0){d=0;e=a;while(1){do{if((d|0)==0){f=c[e>>2]|0;if((f|0)==0){break}eF(f)}}while(0);f=c[e+8>>2]|0;do{if((f|0)!=0){g=c[e+12>>2]|0;if((g|0)==0){break}Cc[g&255](f)}}while(0);f=d+1|0;if((f|0)<(b|0)){d=f;e=e+56|0}else{break}}}eF(a);return}function dk(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if((d|0)==0){return}eF(c[d>>2]|0);e=d+72|0;do{if((a[d+82|0]|0)==0){f=c[e>>2]|0;g=b[d+76>>1]|0;h=g<<16>>16;if((f|0)==0){break}if(g<<16>>16>0){g=0;i=f;while(1){do{if((g|0)==0){j=c[i>>2]|0;if((j|0)==0){break}eF(j)}}while(0);j=c[i+8>>2]|0;do{if((j|0)!=0){k=c[i+12>>2]|0;if((k|0)==0){break}Cc[k&255](j)}}while(0);j=g+1|0;if((j|0)<(h|0)){g=j;i=i+56|0}else{break}}}eF(f)}else{i=c[e>>2]|0;if((i|0)==0){break}wj(i,1)}}while(0);eF(d);return}function ek(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=i;i=i+16|0;j=g|0;k=(c[d+16>>2]|0)+12|0;l=c[k>>2]|0;c[k>>2]=e;if((a[f+82|0]|0)!=0){rj(d,c[f+72>>2]|0,f);c[k>>2]=l;i=g;return}e=f+76|0;if((b[e>>1]|0)<1){i=g;return}iB(d,0);lB(d,c[f+8>>2]|0);m=a[f+80|0]|0;if((m|0)==116){h[j+8>>3]=+h[f+64>>3]+ +h[f+48>>3]*.5- +h[f+16>>3]}else if((m|0)==98){h[j+8>>3]=+h[f+32>>3]+(+h[f+64>>3]- +h[f+48>>3]*.5)- +h[f+16>>3]}else{h[j+8>>3]=+h[f+64>>3]+ +h[f+32>>3]*.5- +h[f+16>>3]}if((b[e>>1]|0)>0){m=f+72|0;n=f+56|0;o=j|0;p=j+8|0;q=f+40|0;f=0;r=c[m>>2]|0;do{s=a[r+(f*56|0)+48|0]|0;if((s|0)==108){h[o>>3]=+h[n>>3]- +h[q>>3]*.5}else if((s|0)==114){h[o>>3]=+h[n>>3]+ +h[q>>3]*.5}else{h[o>>3]=+h[n>>3]}kB(d,j,r+(f*56|0)|0);r=c[m>>2]|0;h[p>>3]=+h[p>>3]- +h[r+(f*56|0)+40>>3];f=f+1|0;}while((f|0)<(b[e>>1]|0))}jB(d);c[k>>2]=l;i=g;return}function fk(a,b){a=a|0;b=b|0;return bk(a,b,1)|0}function gk(a){a=a|0;return hk(a,0)|0}function hk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=c[43612]|0;if((e|0)==0){c[43610]=64;f=kk(64)|0;c[43612]=f;g=f}else{g=e}if((b|0)==0){h=g;a[h]=0;i=c[43612]|0;return i|0}e=d<<24>>24==0;d=b;b=g;g=0;f=0;while(1){j=a[d]|0;if(j<<24>>24==0){h=b;break}k=c[43610]|0;if((f|0)>(k-8|0)){l=k<<1;c[43610]=l;k=mk(c[43612]|0,l)|0;c[43612]=k;m=k+f|0;n=a[d]|0}else{m=b;n=j}a:do{switch(n<<24>>24){case 60:{o=4;p=86176;break};case 45:{q=23;break};case 32:{q=24;break};case 38:{if(!e){o=5;p=91328;break a}j=a[d+1|0]|0;b:do{if(j<<24>>24==35){k=a[d+2|0]|0;if((k<<24>>24|0)==120|(k<<24>>24|0)==88){l=d+3|0;while(1){r=a[l]|0;if((r-48&255)>>>0<10>>>0|(r-97&255)>>>0<6>>>0|(r-65&255)>>>0<6>>>0){l=l+1|0}else{s=r;break b}}}if((k-48&255)>>>0>=10>>>0){s=k;break}l=d+3|0;while(1){r=a[l]|0;if((r-48&255)>>>0<10>>>0){l=l+1|0}else{s=r;break}}}else{if(!((j-97&255)>>>0<26>>>0|(j-65&255)>>>0<26>>>0)){s=j;break}l=d+2|0;while(1){k=a[l]|0;if((k-97&255)>>>0<26>>>0|(k-65&255)>>>0<26>>>0){l=l+1|0}else{s=k;break}}}}while(0);if(s<<24>>24!=59){o=5;p=91328;break a}if((n<<24>>24|0)==60){o=4;p=86176}else if((n<<24>>24|0)==45){q=23}else if((n<<24>>24|0)==32){q=24}else if((n<<24>>24|0)==62){q=22}else{q=26}break};case 62:{q=22;break};default:{q=26}}}while(0);do{if((q|0)==22){q=0;o=4;p=81432}else if((q|0)==23){q=0;o=5;p=167680}else if((q|0)==24){q=0;if((g|0)==0){q=28;break}if((a[g]|0)==32){o=6;p=163496}else{q=28}}else if((q|0)==26){q=0;if((n<<24>>24|0)==34){o=6;p=159408;break}else if((n<<24>>24|0)!=39){q=28;break}o=5;p=154400}}while(0);if((q|0)==28){q=0;o=1;p=d}j=o+f|0;l=m;k=p;r=o;while(1){t=r-1|0;a[l]=a[k]|0;if((t|0)==0){break}else{l=l+1|0;k=k+1|0;r=t}}g=d;d=d+1|0;b=m+o|0;f=j}a[h]=0;i=c[43612]|0;return i|0}function ik(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=c[43608]|0;if((d|0)==0){c[43606]=64;e=kk(64)|0;c[43608]=e;f=e}else{f=d}if((b|0)==0){g=f;a[g]=0;h=c[43608]|0;return h|0}else{i=b;j=f;k=0}while(1){f=a[i]|0;if(f<<24>>24==0){g=j;break}b=c[43606]|0;if((k|0)>(b-8|0)){d=b<<1;c[43606]=d;b=mk(c[43608]|0,d)|0;c[43608]=b;l=b+k|0;m=a[i]|0}else{l=j;m=f}a:do{switch(m<<24>>24){case 39:{n=22;break};case 60:{o=4;p=86176;break};case 38:{f=a[i+1|0]|0;b:do{if(f<<24>>24==35){b=a[i+2|0]|0;if((b<<24>>24|0)==120|(b<<24>>24|0)==88){d=i+3|0;while(1){e=a[d]|0;if((e-48&255)>>>0<10>>>0|(e-97&255)>>>0<6>>>0|(e-65&255)>>>0<6>>>0){d=d+1|0}else{q=e;break b}}}if((b-48&255)>>>0>=10>>>0){q=b;break}d=i+3|0;while(1){e=a[d]|0;if((e-48&255)>>>0<10>>>0){d=d+1|0}else{q=e;break}}}else{if(!((f-97&255)>>>0<26>>>0|(f-65&255)>>>0<26>>>0)){q=f;break}d=i+2|0;while(1){b=a[d]|0;if((b-97&255)>>>0<26>>>0|(b-65&255)>>>0<26>>>0){d=d+1|0}else{q=b;break}}}}while(0);if(q<<24>>24!=59){o=5;p=91328;break a}if((m<<24>>24|0)==39){n=22}else if((m<<24>>24|0)==60){o=4;p=86176}else if((m<<24>>24|0)==62){n=20}else if((m<<24>>24|0)==34){n=21}else{n=23}break};case 62:{n=20;break};case 34:{n=21;break};default:{n=23}}}while(0);if((n|0)==20){n=0;o=4;p=81432}else if((n|0)==21){n=0;o=6;p=159408}else if((n|0)==22){n=0;o=5;p=154400}else if((n|0)==23){n=0;o=1;p=i}f=o+k|0;d=l;b=p;e=o;while(1){r=e-1|0;a[d]=a[b]|0;if((r|0)==0){break}else{d=d+1|0;b=b+1|0;e=r}}i=i+1|0;j=l+o|0;k=f}a[g]=0;h=c[43608]|0;return h|0}function jk(a){a=a|0;var b=0,d=0,e=0;if((a|0)==0){b=0;return b|0}d=dF(a)|0;if((d|0)==0){Ma(117496,14,1,c[o>>2]|0)|0;e=0}else{e=d}vF(e|0,0,a|0)|0;b=e;return b|0}function kk(a){a=a|0;var b=0,d=0;do{if((a|0)==0){b=0}else{d=dF(a)|0;if((d|0)!=0){b=d;break}Ma(117496,14,1,c[o>>2]|0)|0;b=0}}while(0);return b|0}function lk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=gF(a,da(d,b)|0)|0;if(!((f|0)!=0|(b|0)==0)){Ma(117496,14,1,c[o>>2]|0)|0;return f|0}if(e>>>0>=b>>>0){return f|0}vF(f+(da(e,d)|0)|0,0,da(b-e|0,d)|0)|0;return f|0}function mk(a,b){a=a|0;b=b|0;var d=0;d=gF(a,b)|0;if((d|0)!=0|(b|0)==0){return d|0}Ma(117496,14,1,c[o>>2]|0)|0;return d|0}function nk(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,ya=0,za=0,Ba=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0,Gd=0,Hd=0,Id=0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0,Od=0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0,oe=0,pe=0,qe=0,re=0,se=0,te=0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0.0;j=i;k=1;l=0;m=i;i=i+168|0;c[m>>2]=0;while(1)switch(k|0){case 1:n=b+8|0;if((a[213992]|0)==0){k=7;break}else{k=2;break};case 2:p=c[(c[n>>2]|0)+180>>2]|0;if((p|0)==0){q=0;r=0;k=6;break}else{s=0;t=0;w=p;k=3;break};case 3:x=s+1|0;y=c[w+8>>2]|0;z=c[y+180>>2]|0;if((c[z>>2]|0)==0){A=t;k=5;break}else{B=t;C=0;k=4;break};case 4:p=B+1|0;D=C+1|0;if((c[z+(D<<2)>>2]|0)==0){A=p;k=5;break}else{B=p;C=D;k=4;break};case 5:D=c[y+164>>2]|0;if((D|0)==0){q=x;r=A;k=6;break}else{s=x;t=A;w=D;k=3;break};case 6:pa(30,c[o>>2]|0,156448,(E=i,i=i+40|0,c[E>>2]=117448,c[E+8>>2]=q,c[E+16>>2]=r,c[E+24>>2]=f,c[E+32>>2]=d,E)|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;i=E;Ca(2);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=7;break;case 7:c[53736]=b;c[53538]=0;c[53634]=0;c[53608]=0;D=c[(c[n>>2]|0)+180>>2]|0;if((D|0)==0){F=0;k=13;break}else{G=D;k=8;break};case 8:H=G+8|0;a[(c[H>>2]|0)+157|0]=0;I=(c[53608]|0)+1|0;c[53608]=I;D=c[H>>2]|0;if((c[c[D+180>>2]>>2]|0)==0){J=D;k=11;break}else{k=9;break};case 9:K=0;L=c[53634]|0;k=10;break;case 10:D=L+1|0;c[53634]=D;p=K+1|0;M=c[H>>2]|0;if((c[(c[M+180>>2]|0)+(p<<2)>>2]|0)==0){J=M;k=11;break}else{K=p;L=D;k=10;break};case 11:D=c[J+164>>2]|0;if((D|0)==0){k=12;break}else{G=D;k=8;break};case 12:F=I<<2;k=13;break;case 13:N=c[53504]|0;if((N|0)==0){k=15;break}else{k=14;break};case 14:D=wa(206,N|0,F|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;O=D;k=16;break;case 15:D=ma(54,F|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;O=D;k=16;break;case 16:c[53504]=O;c[53502]=0;P=c[53508]|0;if((P|0)==0){k=18;break}else{k=17;break};case 17:D=wa(206,P|0,c[53608]<<2|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Q=D;k=19;break;case 18:D=ma(54,c[53608]<<2|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Q=D;k=19;break;case 19:c[53508]=Q;c[53506]=0;D=c[(c[n>>2]|0)+180>>2]|0;if((D|0)==0){k=47;break}else{R=1;S=D;k=20;break};case 20:T=S+8|0;c[(c[T>>2]|0)+288>>2]=0;D=c[T>>2]|0;p=c[c[D+172>>2]>>2]|0;if((p|0)==0){U=4;V=R;k=25;break}else{W=0;X=R;Y=D;Z=p;k=21;break};case 21:p=Y+288|0;c[p>>2]=(c[p>>2]|0)+1;_=Z+8|0;c[(c[_>>2]|0)+160>>2]=0;c[(c[_>>2]|0)+164>>2]=-1;if((X|0)==0){$=0;k=23;break}else{k=22;break};case 22:p=c[Z>>2]&3;$=((c[(c[(c[((p|0)==2?Z:Z-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((p|0)==3?Z:Z+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0)<(e[(c[_>>2]|0)+170>>1]|0)?0:X;k=23;break;case 23:aa=W+1|0;p=c[T>>2]|0;D=c[(c[p+172>>2]|0)+(aa<<2)>>2]|0;if((D|0)==0){k=24;break}else{W=aa;X=$;Y=p;Z=D;k=21;break};case 24:U=(aa<<2)+4|0;V=$;k=25;break;case 25:D=ma(12,U|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;c[(c[T>>2]|0)+260>>2]=D;c[(c[T>>2]|0)+264>>2]=0;ba=c[(c[T>>2]|0)+180>>2]|0;ca=0;k=26;break;case 26:da=ca+1|0;if((c[ba+(ca<<2)>>2]|0)==0){k=27;break}else{ca=da;k=26;break};case 27:D=ma(12,da<<2|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;c[(c[T>>2]|0)+268>>2]=D;c[(c[T>>2]|0)+272>>2]=0;D=c[(c[T>>2]|0)+164>>2]|0;if((D|0)==0){k=28;break}else{R=V;S=D;k=20;break};case 28:if((V|0)==0){k=29;break}else{k=47;break};case 29:ea=ma(10,c[53608]|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;D=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;if((D|0)==0){k=30;break}else{fa=D;k=31;break};case 30:D=ma(30,ea|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;if((D|0)==0){ga=0;k=41;break}else{ha=0;ia=D;k=35;break};case 31:ja=fa+8|0;D=c[ja>>2]|0;if((c[D+288>>2]|0)==0){k=32;break}else{na=D;k=33;break};case 32:la(18,ea|0,fa|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;na=c[ja>>2]|0;k=33;break;case 33:D=c[na+164>>2]|0;if((D|0)==0){k=30;break}else{fa=D;k=31;break};case 34:D=ma(30,ea|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;if((D|0)==0){ga=oa;k=41;break}else{ha=oa;ia=D;k=35;break};case 35:qa=ia+8|0;c[(c[qa>>2]|0)+232>>2]=0;oa=ha+1|0;D=c[qa>>2]|0;p=c[c[D+172>>2]>>2]|0;if((p|0)==0){ra=D;k=37;break}else{sa=0;ta=D;ua=p;k=36;break};case 36:p=c[ta+232>>2]|0;D=(e[(c[ua+8>>2]|0)+170>>1]|0)+(c[(c[(c[((c[ua>>2]&3|0)==3?ua:ua+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0;c[ta+232>>2]=(p|0)>(D|0)?p:D;D=sa+1|0;p=c[qa>>2]|0;M=c[(c[p+172>>2]|0)+(D<<2)>>2]|0;if((M|0)==0){ra=p;k=37;break}else{sa=D;ta=p;ua=M;k=36;break};case 37:M=c[c[ra+180>>2]>>2]|0;if((M|0)==0){k=34;break}else{va=0;ya=M;k=38;break};case 38:za=ya;Ba=ya-32|0;M=(c[(c[((c[za>>2]&3|0)==2?ya:Ba)+28>>2]|0)+8>>2]|0)+288|0;p=c[M>>2]|0;c[M>>2]=p-1;if((p|0)<2){k=39;break}else{k=40;break};case 39:la(18,ea|0,c[((c[za>>2]&3|0)==2?ya:Ba)+28>>2]|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=40;break;case 40:p=va+1|0;M=c[(c[(c[qa>>2]|0)+180>>2]|0)+(p<<2)>>2]|0;if((M|0)==0){k=34;break}else{va=p;ya=M;k=38;break};case 41:if((ga|0)==(c[53608]|0)){k=46;break}else{k=42;break};case 42:pa(16,1,81392,(E=i,i=i+1|0,i=i+7&-8,c[E>>2]=0,E)|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;i=E;M=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;if((M|0)==0){k=46;break}else{Da=M;k=43;break};case 43:Ea=Da+8|0;M=c[Ea>>2]|0;if((c[M+288>>2]|0)==0){Fa=M;k=45;break}else{k=44;break};case 44:M=ma(56,Da|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;p=c[(c[Ea>>2]|0)+288>>2]|0;pa(16,3,167640,(E=i,i=i+16|0,c[E>>2]=M,c[E+8>>2]=p,E)|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;i=E;Fa=c[Ea>>2]|0;k=45;break;case 45:p=c[Fa+164>>2]|0;if((p|0)==0){k=46;break}else{Da=p;k=43;break};case 46:ka(120,ea|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=47;break;case 47:if((f|0)<1){k=48;break}else{k=54;break};case 48:p=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;if((p|0)==0){Ga=0;k=216;break}else{Ha=p;k=49;break};case 49:Ia=Ha+8|0;p=c[Ia>>2]|0;Ja=c[p+260>>2]|0;if((Ja|0)==0){Ka=p;k=51;break}else{k=50;break};case 50:ka(150,Ja|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Ka=c[Ia>>2]|0;k=51;break;case 51:La=c[Ka+268>>2]|0;if((La|0)==0){Ma=Ka;k=53;break}else{k=52;break};case 52:ka(150,La|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Ma=c[Ia>>2]|0;k=53;break;case 53:a[Ma+157|0]=0;p=c[(c[Ia>>2]|0)+164>>2]|0;if((p|0)==0){Ga=0;k=216;break}else{Ha=p;k=49;break};case 54:c[53534]=(g|0)>-1?g:30;Na=BF(178552,k,m)|0;k=217;break;case 217:if((Na|0)==0){k=55;break}else{Ga=2;k=216;break};case 55:if((c[53608]|0)<2){k=56;break}else{k=57;break};case 56:Oa=c[o>>2]|0;Pa=0;k=92;break;case 57:p=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;if((p|0)==0){k=58;break}else{Qa=p;k=59;break};case 58:if((c[53506]|0)>0){Ra=0;k=60;break}else{k=61;break};case 59:p=Qa+8|0;a[(c[p>>2]|0)+157|0]=0;c[c[(c[p>>2]|0)+268>>2]>>2]=0;c[c[(c[p>>2]|0)+260>>2]>>2]=0;c[(c[p>>2]|0)+272>>2]=0;c[(c[p>>2]|0)+264>>2]=0;M=c[(c[p>>2]|0)+164>>2]|0;if((M|0)==0){k=58;break}else{Qa=M;k=59;break};case 60:c[(c[(c[(c[53508]|0)+(Ra<<2)>>2]|0)+8>>2]|0)+164>>2]=-1;M=Ra+1|0;if((M|0)<(c[53506]|0)){Ra=M;k=60;break}else{k=61;break};case 61:c[53506]=0;c[53502]=0;M=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;if((M|0)==0){Sa=0;Ta=0;k=64;break}else{Ua=M;k=62;break};case 62:ma(36,Ua|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;M=c[(c[Ua+8>>2]|0)+164>>2]|0;if((M|0)!=0&(c[53506]|0)==0){Ua=M;k=62;break}else{k=63;break};case 63:Sa=c[53502]|0;Ta=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;k=64;break;case 64:if((Sa|0)<(c[53608]|0)){k=65;break}else{k=85;break};case 65:Va=(Ta|0)==0;if(Va){Ga=1;k=216;break}else{Wa=0;Xa=Ta;k=66;break};case 66:Ya=c[Xa+8>>2]|0;Za=c[Ya+180>>2]|0;M=c[Za>>2]|0;if((M|0)==0){_a=Wa;k=76;break}else{$a=0;ab=Wa;bb=M;k=67;break};case 67:cb=c[bb+8>>2]|0;if((c[cb+164>>2]|0)<0){k=68;break}else{db=ab;k=75;break};case 68:M=c[bb>>2]&3;eb=c[((M|0)==3?bb:bb+32|0)+28>>2]|0;fb=c[eb+8>>2]|0;gb=c[((M|0)==2?bb:bb-32|0)+28>>2]|0;hb=c[gb+8>>2]|0;ib=(a[hb+157|0]|0)==0;if((a[fb+157|0]|0)==0){k=70;break}else{k=69;break};case 69:if(ib){jb=eb;k=71;break}else{db=ab;k=75;break};case 70:if(ib){db=ab;k=75;break}else{jb=gb;k=71;break};case 71:if((jb|0)==0){db=ab;k=75;break}else{k=72;break};case 72:if((ab|0)==0){k=74;break}else{k=73;break};case 73:M=c[ab>>2]&3;if(((c[hb+232>>2]|0)-(c[fb+232>>2]|0)-(e[cb+170>>1]|0)|0)<((c[(c[(c[((M|0)==2?ab:ab-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((M|0)==3?ab:ab+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(e[(c[ab+8>>2]|0)+170>>1]|0)|0)){k=74;break}else{db=ab;k=75;break};case 74:db=bb;k=75;break;case 75:M=$a+1|0;p=c[Za+(M<<2)>>2]|0;if((p|0)==0){_a=db;k=76;break}else{$a=M;ab=db;bb=p;k=67;break};case 76:p=c[Ya+164>>2]|0;if((p|0)==0){k=77;break}else{Wa=_a;Xa=p;k=66;break};case 77:if((_a|0)==0){k=86;break}else{k=78;break};case 78:p=c[_a>>2]&3;kb=c[((p|0)==2?_a:_a-32|0)+28>>2]|0;lb=c[kb+8>>2]|0;mb=c[((p|0)==3?_a:_a+32|0)+28>>2]|0;nb=c[mb+8>>2]|0;p=(c[lb+232>>2]|0)-(c[nb+232>>2]|0)|0;M=e[(c[_a+8>>2]|0)+170>>1]|0;ob=p-M|0;if((p|0)==(M|0)){k=57;break}else{k=79;break};case 79:pb=(a[lb+157|0]|0)==0;if((a[nb+157|0]|0)==0){k=81;break}else{k=80;break};case 80:if(pb){qb=mb;k=83;break}else{k=82;break};case 81:if(pb){k=82;break}else{qb=kb;k=83;break};case 82:qb=0;k=83;break;case 83:rb=(qb|0)==(kb|0)?-ob|0:ob;if((Sa|0)>0){sb=0;k=84;break}else{k=57;break};case 84:M=(c[(c[(c[53504]|0)+(sb<<2)>>2]|0)+8>>2]|0)+232|0;c[M>>2]=(c[M>>2]|0)+rb;M=sb+1|0;if((M|0)<(c[53502]|0)){sb=M;k=84;break}else{k=57;break};case 85:pa(34,Ta|0,0,1)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;la(34,c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0,0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=56;break;case 86:if(Va){Ga=1;k=216;break}else{tb=Ta;k=87;break};case 87:ub=tb+8|0;M=c[ub>>2]|0;vb=c[M+260>>2]|0;if((vb|0)==0){wb=M;k=89;break}else{k=88;break};case 88:ka(150,vb|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;wb=c[ub>>2]|0;k=89;break;case 89:xb=c[wb+268>>2]|0;if((xb|0)==0){yb=wb;k=91;break}else{k=90;break};case 90:ka(150,xb|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;yb=c[ub>>2]|0;k=91;break;case 91:a[yb+157|0]=0;M=c[(c[ub>>2]|0)+164>>2]|0;if((M|0)==0){Ga=1;k=216;break}else{tb=M;k=87;break};case 92:zb=c[53538]|0;Ab=c[53506]|0;if((zb|0)<(Ab|0)){k=93;break}else{Bb=0;Cb=0;k=99;break};case 93:Db=c[53508]|0;Eb=0;Fb=0;Gb=zb;k=94;break;case 94:Hb=c[Db+(Gb<<2)>>2]|0;Ib=c[(c[Hb+8>>2]|0)+160>>2]|0;if((Ib|0)<0){k=95;break}else{Jb=Fb;Kb=Eb;k=98;break};case 95:if((Eb|0)==0){Lb=Hb;k=97;break}else{k=96;break};case 96:Lb=(c[(c[Eb+8>>2]|0)+160>>2]|0)>(Ib|0)?Hb:Eb;k=97;break;case 97:M=Fb+1|0;if((M|0)<(c[53534]|0)){Jb=M;Kb=Lb;k=98;break}else{Mb=Lb;k=106;break};case 98:M=Gb+1|0;c[53538]=M;if((M|0)<(Ab|0)){Eb=Kb;Fb=Jb;Gb=M;k=94;break}else{Bb=Kb;Cb=Jb;k=99;break};case 99:if((zb|0)>0){k=100;break}else{Mb=Bb;k=106;break};case 100:c[53538]=0;Nb=c[53508]|0;Ob=0;Pb=Bb;Qb=Cb;k=101;break;case 101:Rb=c[Nb+(Ob<<2)>>2]|0;Sb=c[(c[Rb+8>>2]|0)+160>>2]|0;if((Sb|0)<0){k=102;break}else{Tb=Qb;Ub=Pb;k=105;break};case 102:if((Pb|0)==0){Vb=Rb;k=104;break}else{k=103;break};case 103:Vb=(c[(c[Pb+8>>2]|0)+160>>2]|0)>(Sb|0)?Rb:Pb;k=104;break;case 104:M=Qb+1|0;if((M|0)<(c[53534]|0)){Tb=M;Ub=Vb;k=105;break}else{Mb=Vb;k=106;break};case 105:M=Ob+1|0;c[53538]=M;if((M|0)<(zb|0)){Ob=M;Pb=Ub;Qb=Tb;k=101;break}else{Mb=Ub;k=106;break};case 106:if((Mb|0)==0){Wb=Pa;k=147;break}else{k=107;break};case 107:Xb=Mb;M=c[Xb>>2]&3;Yb=Mb+32|0;p=c[((M|0)==3?Mb:Yb)+28>>2]|0;Zb=Mb-32|0;D=c[((M|0)==2?Mb:Zb)+28>>2]|0;M=(c[(c[p+8>>2]|0)+284>>2]|0)<(c[(c[D+8>>2]|0)+284>>2]|0);_b=M?p:D;c[53744]=0;c[53528]=2147483647;D=_b+8|0;c[53662]=c[(c[D>>2]|0)+280>>2];c[53664]=c[(c[D>>2]|0)+284>>2];if(M){k=109;break}else{k=108;break};case 108:ka(172,_b|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=110;break;case 109:ka(138,_b|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=110;break;case 110:$b=c[53744]|0;ac=$b;M=c[ac>>2]&3;bc=$b-32|0;cc=$b+32|0;dc=$b+8|0;ec=(c[(c[(c[((M|0)==2?$b:bc)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((M|0)==3?$b:cc)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(e[(c[dc>>2]|0)+170>>1]|0)|0;if((ec|0)>0){k=111;break}else{k=118;break};case 111:fc=c[Xb>>2]&3;gc=c[((fc|0)==3?Mb:Yb)+28>>2]|0;hc=c[gc+8>>2]|0;if(((c[hc+272>>2]|0)+(c[hc+264>>2]|0)|0)==1){k=112;break}else{k=113;break};case 112:la(10,gc|0,ec|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=118;break;case 113:ic=c[((fc|0)==2?Mb:Zb)+28>>2]|0;jc=c[ic+8>>2]|0;if(((c[jc+272>>2]|0)+(c[jc+264>>2]|0)|0)==1){k=114;break}else{k=115;break};case 114:la(10,ic|0,-ec|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=118;break;case 115:if((c[hc+284>>2]|0)<(c[jc+284>>2]|0)){k=116;break}else{k=117;break};case 116:la(10,gc|0,ec|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=118;break;case 117:la(10,ic|0,-ec|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=118;break;case 118:kc=Mb+8|0;lc=c[(c[kc>>2]|0)+160>>2]|0;M=c[ac>>2]&3;mc=(c[((M|0)==2?$b:bc)+28>>2]|0)+8|0;nc=c[((M|0)==3?$b:cc)+28>>2]|0;k=119;break;case 119:oc=nc+8|0;pc=c[oc>>2]|0;qc=c[(c[mc>>2]|0)+284>>2]|0;if((c[pc+280>>2]|0)>(qc|0)){k=121;break}else{k=120;break};case 120:if((qc|0)>(c[pc+284>>2]|0)){k=121;break}else{k=125;break};case 121:rc=c[pc+276>>2]|0;sc=rc;tc=rc;uc=rc+32|0;vc=(c[rc+8>>2]|0)+160|0;wc=c[vc>>2]|0;if((nc|0)==(c[((c[tc>>2]&3|0)==3?sc:uc)+28>>2]|0)){k=122;break}else{k=123;break};case 122:c[vc>>2]=wc+lc;k=124;break;case 123:c[vc>>2]=wc-lc;k=124;break;case 124:M=c[tc>>2]&3;D=c[((M|0)==3?sc:uc)+28>>2]|0;p=c[((M|0)==2?sc:rc-32|0)+28>>2]|0;nc=(c[(c[D+8>>2]|0)+284>>2]|0)>(c[(c[p+8>>2]|0)+284>>2]|0)?D:p;k=119;break;case 125:p=c[ac>>2]&3;xc=(c[((p|0)==3?$b:cc)+28>>2]|0)+8|0;yc=c[((p|0)==2?$b:bc)+28>>2]|0;k=126;break;case 126:zc=c[yc+8>>2]|0;Ac=c[(c[xc>>2]|0)+284>>2]|0;if((c[zc+280>>2]|0)>(Ac|0)){k=128;break}else{k=127;break};case 127:if((Ac|0)>(c[zc+284>>2]|0)){k=128;break}else{k=132;break};case 128:Bc=c[zc+276>>2]|0;Cc=Bc;Dc=Bc;Ec=Bc+32|0;Fc=(c[Bc+8>>2]|0)+160|0;Gc=c[Fc>>2]|0;if((yc|0)==(c[((c[Dc>>2]&3|0)==3?Cc:Ec)+28>>2]|0)){k=130;break}else{k=129;break};case 129:c[Fc>>2]=Gc+lc;k=131;break;case 130:c[Fc>>2]=Gc-lc;k=131;break;case 131:p=c[Dc>>2]&3;D=c[((p|0)==3?Cc:Ec)+28>>2]|0;M=c[((p|0)==2?Cc:Bc-32|0)+28>>2]|0;yc=(c[(c[D+8>>2]|0)+284>>2]|0)>(c[(c[M+8>>2]|0)+284>>2]|0)?D:M;k=126;break;case 132:if((yc|0)==(nc|0)){k=134;break}else{k=133;break};case 133:pa(16,1,102368,(E=i,i=i+1|0,i=i+7&-8,c[E>>2]=0,E)|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;i=E;la(40,178552,1);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;return 0;case 134:c[(c[dc>>2]|0)+160>>2]=-lc;c[(c[kc>>2]|0)+160>>2]=0;c[(c[dc>>2]|0)+164>>2]=c[(c[kc>>2]|0)+164>>2];c[(c[53508]|0)+(c[(c[kc>>2]|0)+164>>2]<<2)>>2]=$b;c[(c[kc>>2]|0)+164>>2]=-1;Hc=(c[((c[Xb>>2]&3|0)==3?Mb:Yb)+28>>2]|0)+8|0;M=(c[Hc>>2]|0)+272|0;D=c[M>>2]|0;Ic=D-1|0;c[M>>2]=Ic;Jc=c[(c[Hc>>2]|0)+268>>2]|0;if((D|0)<1){Kc=0;k=137;break}else{Lc=0;k=136;break};case 135:if((Lc|0)<(Ic|0)){Lc=Mc;k=136;break}else{Kc=Mc;k=137;break};case 136:Mc=Lc+1|0;if((c[Jc+(Lc<<2)>>2]|0)==(Mb|0)){Kc=Lc;k=137;break}else{k=135;break};case 137:c[Jc+(Kc<<2)>>2]=c[Jc+(Ic<<2)>>2];c[(c[(c[Hc>>2]|0)+268>>2]|0)+(Ic<<2)>>2]=0;Nc=(c[((c[Xb>>2]&3|0)==2?Mb:Zb)+28>>2]|0)+8|0;D=(c[Nc>>2]|0)+264|0;M=c[D>>2]|0;Oc=M-1|0;c[D>>2]=Oc;Pc=c[(c[Nc>>2]|0)+260>>2]|0;if((M|0)<1){Qc=0;k=140;break}else{Rc=0;k=139;break};case 138:if((Rc|0)<(Oc|0)){Rc=Sc;k=139;break}else{Qc=Sc;k=140;break};case 139:Sc=Rc+1|0;if((c[Pc+(Rc<<2)>>2]|0)==(Mb|0)){Qc=Rc;k=140;break}else{k=138;break};case 140:c[Pc+(Qc<<2)>>2]=c[Pc+(Oc<<2)>>2];c[(c[(c[Nc>>2]|0)+260>>2]|0)+(Oc<<2)>>2]=0;M=(c[((c[ac>>2]&3|0)==3?$b:cc)+28>>2]|0)+8|0;D=(c[M>>2]|0)+272|0;p=c[D>>2]|0;c[D>>2]=p+1;c[(c[(c[M>>2]|0)+268>>2]|0)+(p<<2)>>2]=$b;p=(c[M>>2]|0)+268|0;c[(c[p>>2]|0)+(c[p+4>>2]<<2)>>2]=0;p=(c[((c[ac>>2]&3|0)==2?$b:bc)+28>>2]|0)+8|0;M=(c[p>>2]|0)+264|0;D=c[M>>2]|0;c[M>>2]=D+1;c[(c[(c[p>>2]|0)+260>>2]|0)+(D<<2)>>2]=$b;D=(c[p>>2]|0)+260|0;c[(c[D>>2]|0)+(c[D+4>>2]<<2)>>2]=0;D=c[oc>>2]|0;pa(34,nc|0,c[D+276>>2]|0,c[D+280>>2]|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Tc=Pa+1|0;if((a[213992]|0)==0){k=146;break}else{k=141;break};case 141:if(((Tc|0)%100|0|0)==0){k=142;break}else{k=146;break};case 142:Uc=(Tc|0)%1e3|0;if((Uc|0)==100){k=143;break}else{k=144;break};case 143:Aa(42,117448,17,1,Oa|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;pa(30,Oa|0,126920,(E=i,i=i+8|0,c[E>>2]=Tc,E)|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;i=E;k=146;break;case 144:pa(30,Oa|0,126920,(E=i,i=i+8|0,c[E>>2]=Tc,E)|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;i=E;if((Uc|0)==0){k=145;break}else{k=146;break};case 145:wa(100,10,Oa|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=146;break;case 146:if((Tc|0)<(f|0)){Pa=Tc;k=92;break}else{Wb=Tc;k=147;break};case 147:if((d|0)==1){k=148;break}else if((d|0)==2){k=180;break}else{k=197;break};case 148:c[53654]=2147483647;c[53658]=-2147483647;Vc=(c[53736]|0)+8|0;D=c[(c[Vc>>2]|0)+180>>2]|0;if((D|0)==0){Wc=2147483647;Xc=-2147483647;k=156;break}else{Yc=D;Zc=2147483647;_c=-2147483647;k=149;break};case 149:$c=Yc+8|0;ad=c[$c>>2]|0;if((a[ad+156|0]|0)==0){k=150;break}else{bd=Zc;cd=_c;dd=ad;k=151;break};case 150:D=c[ad+232>>2]|0;p=(Zc|0)<(D|0)?Zc:D;c[53654]=p;D=c[(c[$c>>2]|0)+232>>2]|0;M=(_c|0)>(D|0)?_c:D;c[53658]=M;bd=p;cd=M;dd=c[$c>>2]|0;k=151;break;case 151:M=c[dd+164>>2]|0;if((M|0)==0){k=152;break}else{Yc=M;Zc=bd;_c=cd;k=149;break};case 152:if((bd|0)==0){ed=cd;k=157;break}else{k=153;break};case 153:M=c[(c[Vc>>2]|0)+180>>2]|0;if((M|0)==0){Wc=bd;Xc=cd;k=156;break}else{fd=M;gd=bd;k=154;break};case 154:M=fd+8|0;p=(c[M>>2]|0)+232|0;c[p>>2]=(c[p>>2]|0)-gd;p=c[(c[M>>2]|0)+164>>2]|0;hd=c[53654]|0;if((p|0)==0){k=155;break}else{fd=p;gd=hd;k=154;break};case 155:Wc=hd;Xc=c[53658]|0;k=156;break;case 156:p=Xc-Wc|0;c[53658]=p;c[53654]=0;ed=p;k=157;break;case 157:id=ma(12,(ed<<2)+4|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;jd=id;if((c[53658]|0)<0){k=159;break}else{kd=0;k=158;break};case 158:c[jd+(kd<<2)>>2]=0;if((kd|0)<(c[53658]|0)){kd=kd+1|0;k=158;break}else{k=159;break};case 159:p=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;if((p|0)==0){k=179;break}else{ld=p;k=160;break};case 160:md=ld+8|0;nd=c[md>>2]|0;if((a[nd+156|0]|0)==0){k=161;break}else{od=nd;k=162;break};case 161:p=jd+(c[nd+232>>2]<<2)|0;c[p>>2]=(c[p>>2]|0)+1;od=c[md>>2]|0;k=162;break;case 162:p=c[od+164>>2]|0;if((p|0)==0){k=163;break}else{ld=p;k=160;break};case 163:p=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;if((p|0)==0){k=179;break}else{pd=p;k=164;break};case 164:qd=pd+8|0;rd=c[qd>>2]|0;if((a[rd+156|0]|0)==0){k=165;break}else{sd=rd;k=178;break};case 165:td=c[53658]|0;ud=c[rd+172>>2]|0;p=c[ud>>2]|0;if((p|0)==0){vd=0;wd=0;k=167;break}else{xd=0;yd=0;zd=0;Ad=p;k=166;break};case 166:p=c[Ad+8>>2]|0;M=(c[p+156>>2]|0)+zd|0;D=(e[p+170>>1]|0)+(c[(c[(c[((c[Ad>>2]&3|0)==3?Ad:Ad+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0;p=(yd|0)>(D|0)?yd:D;D=xd+1|0;Bd=c[ud+(D<<2)>>2]|0;if((Bd|0)==0){vd=p;wd=M;k=167;break}else{xd=D;yd=p;zd=M;Ad=Bd;k=166;break};case 167:Cd=c[rd+180>>2]|0;Bd=c[Cd>>2]|0;if((Bd|0)==0){Dd=td;Ed=0;k=169;break}else{Fd=0;Gd=td;Hd=0;Id=Bd;k=168;break};case 168:Bd=c[Id+8>>2]|0;M=(c[Bd+156>>2]|0)+Hd|0;p=(c[(c[(c[((c[Id>>2]&3|0)==2?Id:Id-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(e[Bd+170>>1]|0)|0;Bd=(Gd|0)<(p|0)?Gd:p;p=Fd+1|0;D=c[Cd+(p<<2)>>2]|0;if((D|0)==0){Dd=Bd;Ed=M;k=169;break}else{Fd=p;Gd=Bd;Hd=M;Id=D;k=168;break};case 169:Jd=(vd|0)<0?0:vd;if((wd|0)==(Ed|0)){k=170;break}else{Kd=rd;k=173;break};case 170:if((Jd|0)<(Dd|0)){Ld=Jd;Md=Jd;k=171;break}else{Nd=Jd;k=172;break};case 171:D=Md+1|0;M=(c[jd+(D<<2)>>2]|0)<(c[jd+(Ld<<2)>>2]|0)?D:Ld;if((D|0)<(Dd|0)){Ld=M;Md=D;k=171;break}else{Nd=M;k=172;break};case 172:M=jd+(c[rd+232>>2]<<2)|0;c[M>>2]=(c[M>>2]|0)-1;M=jd+(Nd<<2)|0;c[M>>2]=(c[M>>2]|0)+1;c[(c[qd>>2]|0)+232>>2]=Nd;Kd=c[qd>>2]|0;k=173;break;case 173:Od=c[Kd+260>>2]|0;if((Od|0)==0){Pd=Kd;k=175;break}else{k=174;break};case 174:ka(150,Od|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Pd=c[qd>>2]|0;k=175;break;case 175:Qd=c[Pd+268>>2]|0;if((Qd|0)==0){Rd=Pd;k=177;break}else{k=176;break};case 176:ka(150,Qd|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Rd=c[qd>>2]|0;k=177;break;case 177:a[Rd+157|0]=0;sd=c[qd>>2]|0;k=178;break;case 178:M=c[sd+164>>2]|0;if((M|0)==0){k=179;break}else{pd=M;k=164;break};case 179:ka(150,id|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=212;break;case 180:if((c[53506]|0)>0){Sd=0;k=181;break}else{k=191;break};case 181:Td=c[(c[53508]|0)+(Sd<<2)>>2]|0;if((c[(c[Td+8>>2]|0)+160>>2]|0)==0){k=182;break}else{k=190;break};case 182:Ud=Td;M=c[Ud>>2]&3;Vd=Td+32|0;D=c[((M|0)==3?Td:Vd)+28>>2]|0;Wd=Td-32|0;Bd=c[((M|0)==2?Td:Wd)+28>>2]|0;M=(c[(c[D+8>>2]|0)+284>>2]|0)<(c[(c[Bd+8>>2]|0)+284>>2]|0);Xd=M?D:Bd;c[53744]=0;c[53528]=2147483647;Bd=Xd+8|0;c[53662]=c[(c[Bd>>2]|0)+280>>2];c[53664]=c[(c[Bd>>2]|0)+284>>2];if(M){k=184;break}else{k=183;break};case 183:ka(172,Xd|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=185;break;case 184:ka(138,Xd|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=185;break;case 185:Yd=c[53744]|0;if((Yd|0)==0){k=190;break}else{k=186;break};case 186:M=c[Yd>>2]&3;Zd=(c[(c[(c[((M|0)==2?Yd:Yd-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((M|0)==3?Yd:Yd+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(e[(c[Yd+8>>2]|0)+170>>1]|0)|0;if((Zd|0)<2){k=190;break}else{k=187;break};case 187:M=c[Ud>>2]&3;_d=c[((M|0)==3?Td:Vd)+28>>2]|0;$d=c[((M|0)==2?Td:Wd)+28>>2]|0;if((c[(c[_d+8>>2]|0)+284>>2]|0)<(c[(c[$d+8>>2]|0)+284>>2]|0)){k=188;break}else{k=189;break};case 188:la(10,_d|0,(Zd|0)/2|0|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=190;break;case 189:la(10,$d|0,(Zd|0)/-2|0|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=190;break;case 190:M=Sd+1|0;if((M|0)<(c[53506]|0)){Sd=M;k=181;break}else{k=191;break};case 191:M=c[(c[(c[53736]|0)+8>>2]|0)+180>>2]|0;if((M|0)==0){k=212;break}else{ae=M;k=192;break};case 192:be=ae+8|0;M=c[be>>2]|0;ce=c[M+260>>2]|0;if((ce|0)==0){de=M;k=194;break}else{k=193;break};case 193:ka(150,ce|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;de=c[be>>2]|0;k=194;break;case 194:ee=c[de+268>>2]|0;if((ee|0)==0){fe=de;k=196;break}else{k=195;break};case 195:ka(150,ee|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;fe=c[be>>2]|0;k=196;break;case 196:a[fe+157|0]=0;M=c[(c[be>>2]|0)+164>>2]|0;if((M|0)==0){k=212;break}else{ae=M;k=192;break};case 197:c[53654]=2147483647;c[53658]=-2147483647;ge=c[53736]|0;he=ge+8|0;M=c[(c[he>>2]|0)+180>>2]|0;if((M|0)==0){ie=2147483647;je=-2147483647;ke=ge;k=205;break}else{le=M;me=2147483647;ne=-2147483647;k=198;break};case 198:oe=le+8|0;pe=c[oe>>2]|0;if((a[pe+156|0]|0)==0){k=199;break}else{qe=me;re=ne;se=pe;k=200;break};case 199:M=c[pe+232>>2]|0;Bd=(me|0)<(M|0)?me:M;c[53654]=Bd;M=c[(c[oe>>2]|0)+232>>2]|0;D=(ne|0)>(M|0)?ne:M;c[53658]=D;qe=Bd;re=D;se=c[oe>>2]|0;k=200;break;case 200:D=c[se+164>>2]|0;if((D|0)==0){k=201;break}else{le=D;me=qe;ne=re;k=198;break};case 201:if((qe|0)==0){te=ge;k=206;break}else{k=202;break};case 202:D=c[(c[he>>2]|0)+180>>2]|0;if((D|0)==0){ie=qe;je=re;ke=ge;k=205;break}else{ue=D;ve=qe;k=203;break};case 203:D=ue+8|0;Bd=(c[D>>2]|0)+232|0;c[Bd>>2]=(c[Bd>>2]|0)-ve;Bd=c[(c[D>>2]|0)+164>>2]|0;we=c[53654]|0;if((Bd|0)==0){k=204;break}else{ue=Bd;ve=we;k=203;break};case 204:ie=we;je=c[53658]|0;ke=c[53736]|0;k=205;break;case 205:c[53658]=je-ie;c[53654]=0;te=ke;k=206;break;case 206:Bd=c[(c[te+8>>2]|0)+180>>2]|0;if((Bd|0)==0){k=212;break}else{xe=Bd;k=207;break};case 207:ye=xe+8|0;Bd=c[ye>>2]|0;ze=c[Bd+260>>2]|0;if((ze|0)==0){Ae=Bd;k=209;break}else{k=208;break};case 208:ka(150,ze|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Ae=c[ye>>2]|0;k=209;break;case 209:Be=c[Ae+268>>2]|0;if((Be|0)==0){Ce=Ae;k=211;break}else{k=210;break};case 210:ka(150,Be|0);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;Ce=c[ye>>2]|0;k=211;break;case 211:a[Ce+157|0]=0;Bd=c[(c[ye>>2]|0)+164>>2]|0;if((Bd|0)==0){k=212;break}else{xe=Bd;k=207;break};case 212:if((a[213992]|0)==0){Ga=0;k=216;break}else{k=213;break};case 213:if((Wb|0)>99){k=214;break}else{k=215;break};case 214:wa(100,10,Oa|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;k=215;break;case 215:Bd=c[53608]|0;D=c[53634]|0;De=+xa(2);if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;pa(30,Oa|0,114976,(E=i,i=i+40|0,c[E>>2]=117448,c[E+8>>2]=Bd,c[E+16>>2]=D,c[E+24>>2]=Wb,h[E+32>>3]=De,E)|0)|0;if((u|0)!=0&(v|0)!=0){l=CF(c[u>>2]|0,m)|0;if((l|0)>0){k=-1;break}else return 0}u=v=0;i=E;Ga=0;k=216;break;case 216:i=j;return Ga|0;case-1:if((l|0)==54){Na=v;k=217}u=v=0;break}return 0}function ok(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ew(a|0,108080)|0;if((d|0)==0){e=30}else{e=Rb(d|0)|0}return nk(a,b,c,e)|0}function pk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=a+8|0;a=(c[d>>2]|0)+232|0;c[a>>2]=(c[a>>2]|0)-b;a=c[d>>2]|0;e=c[c[a+268>>2]>>2]|0;if((e|0)==0){f=a}else{g=0;h=a;a=e;while(1){if((a|0)==(c[h+276>>2]|0)){i=h}else{pk(c[((c[a>>2]&3|0)==2?a:a-32|0)+28>>2]|0,b);i=c[d>>2]|0}e=g+1|0;j=c[(c[i+268>>2]|0)+(e<<2)>>2]|0;if((j|0)==0){f=i;break}else{g=e;h=i;a=j}}}a=c[c[f+260>>2]>>2]|0;if((a|0)==0){return}else{k=0;l=f;m=a}while(1){if((m|0)==(c[l+276>>2]|0)){n=l}else{pk(c[((c[m>>2]&3|0)==3?m:m+32|0)+28>>2]|0,b);n=c[d>>2]|0}a=k+1|0;f=c[(c[n+260>>2]|0)+(a<<2)>>2]|0;if((f|0)==0){break}else{k=a;l=n;m=f}}return}function qk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;e=a+8|0;c[(c[e>>2]|0)+276>>2]=b;c[(c[e>>2]|0)+280>>2]=d;a=c[e>>2]|0;f=c[c[a+268>>2]>>2]|0;if((f|0)==0){g=d;h=a}else{i=0;j=d;d=f;f=a;while(1){if((d|0)==(b|0)){k=j;l=f}else{a=qk(c[((c[d>>2]&3|0)==2?d:d-32|0)+28>>2]|0,d,j)|0;k=a;l=c[e>>2]|0}a=i+1|0;m=c[(c[l+268>>2]|0)+(a<<2)>>2]|0;if((m|0)==0){g=k;h=l;break}else{i=a;j=k;d=m;f=l}}}l=c[c[h+260>>2]>>2]|0;if((l|0)==0){n=g;o=h;p=o+284|0;q=n;c[p>>2]=q;r=n+1|0;return r|0}else{s=0;t=g;u=l;v=h}while(1){if((u|0)==(b|0)){w=t;x=v}else{h=qk(c[((c[u>>2]&3|0)==3?u:u+32|0)+28>>2]|0,u,t)|0;w=h;x=c[e>>2]|0}h=s+1|0;l=c[(c[x+260>>2]|0)+(h<<2)>>2]|0;if((l|0)==0){n=w;o=x;break}else{s=h;t=w;u=l;v=x}}p=o+284|0;q=n;c[p>>2]=q;r=n+1|0;return r|0}function rk(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;b=a+8|0;a=c[b>>2]|0;d=c[c[a+180>>2]>>2]|0;if((d|0)==0){f=a}else{g=0;h=a;a=d;while(1){d=c[a+8>>2]|0;do{if((c[d+164>>2]|0)<0){i=c[a>>2]&3;j=c[(c[((i|0)==2?a:a-32|0)+28>>2]|0)+8>>2]|0;k=c[j+284>>2]|0;if(!((c[53662]|0)>(k|0)|(k|0)>(c[53664]|0))){break}k=(c[j+232>>2]|0)-(c[(c[(c[((i|0)==3?a:a+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(e[d+170>>1]|0)|0;if(!((k|0)<(c[53528]|0)|(c[53744]|0)==0)){break}c[53744]=a;c[53528]=k}else{k=c[((c[a>>2]&3|0)==2?a:a-32|0)+28>>2]|0;if((c[(c[k+8>>2]|0)+284>>2]|0)>=(c[h+284>>2]|0)){break}rk(k)}}while(0);d=g+1|0;k=c[b>>2]|0;i=c[(c[k+180>>2]|0)+(d<<2)>>2]|0;if((i|0)==0){f=k;break}else{g=d;h=k;a=i}}}a=c[c[f+260>>2]>>2]|0;h=c[53528]|0;if((a|0)!=0&(h|0)>0){l=0;m=f;n=a;o=h}else{return}while(1){h=c[((c[n>>2]&3|0)==3?n:n+32|0)+28>>2]|0;if((c[(c[h+8>>2]|0)+284>>2]|0)<(c[m+284>>2]|0)){rk(h);p=c[b>>2]|0;q=c[53528]|0}else{p=m;q=o}h=l+1|0;a=c[(c[p+260>>2]|0)+(h<<2)>>2]|0;if((a|0)!=0&(q|0)>0){l=h;m=p;n=a;o=q}else{break}}return}function sk(a){a=a|0;var b=0,d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;b=a+8|0;a=c[b>>2]|0;d=c[c[a+172>>2]>>2]|0;if((d|0)==0){f=a}else{g=0;h=a;a=d;while(1){d=c[a+8>>2]|0;do{if((c[d+164>>2]|0)<0){i=c[a>>2]&3;j=c[(c[((i|0)==3?a:a+32|0)+28>>2]|0)+8>>2]|0;k=c[j+284>>2]|0;if(!((c[53662]|0)>(k|0)|(k|0)>(c[53664]|0))){break}k=(c[(c[(c[((i|0)==2?a:a-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[j+232>>2]|0)-(e[d+170>>1]|0)|0;if(!((k|0)<(c[53528]|0)|(c[53744]|0)==0)){break}c[53744]=a;c[53528]=k}else{k=c[((c[a>>2]&3|0)==3?a:a+32|0)+28>>2]|0;if((c[(c[k+8>>2]|0)+284>>2]|0)>=(c[h+284>>2]|0)){break}sk(k)}}while(0);d=g+1|0;k=c[b>>2]|0;j=c[(c[k+172>>2]|0)+(d<<2)>>2]|0;if((j|0)==0){f=k;break}else{g=d;h=k;a=j}}}a=c[c[f+268>>2]>>2]|0;h=c[53528]|0;if((a|0)!=0&(h|0)>0){l=0;m=f;n=a;o=h}else{return}while(1){h=c[((c[n>>2]&3|0)==2?n:n-32|0)+28>>2]|0;if((c[(c[h+8>>2]|0)+284>>2]|0)<(c[m+284>>2]|0)){sk(h);p=c[b>>2]|0;q=c[53528]|0}else{p=m;q=o}h=l+1|0;a=c[(c[p+268>>2]|0)+(h<<2)>>2]|0;if((a|0)!=0&(q|0)>0){l=h;m=p;n=a;o=q}else{break}}return}function tk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=a+8|0;a=c[d>>2]|0;e=c[c[a+268>>2]>>2]|0;if((e|0)==0){f=a}else{g=0;h=e;e=a;while(1){if((h|0)==(b|0)){i=e}else{tk(c[((c[h>>2]&3|0)==2?h:h-32|0)+28>>2]|0,h);i=c[d>>2]|0}a=g+1|0;j=c[(c[i+268>>2]|0)+(a<<2)>>2]|0;if((j|0)==0){f=i;break}else{g=a;h=j;e=i}}}i=c[c[f+260>>2]>>2]|0;if((i|0)!=0){e=0;h=i;i=f;while(1){if((h|0)==(b|0)){k=i}else{tk(c[((c[h>>2]&3|0)==3?h:h+32|0)+28>>2]|0,h);k=c[d>>2]|0}f=e+1|0;g=c[(c[k+260>>2]|0)+(f<<2)>>2]|0;if((g|0)==0){break}else{e=f;h=g;i=k}}}if((b|0)==0){return}k=c[b>>2]&3;i=c[((k|0)==3?b:b+32|0)+28>>2]|0;h=c[i+8>>2]|0;if((c[h+276>>2]|0)==(b|0)){l=1;m=i;n=h}else{h=c[((k|0)==2?b:b-32|0)+28>>2]|0;l=-1;m=h;n=c[h+8>>2]|0}h=c[n+180>>2]|0;k=c[h>>2]|0;if((k|0)==0){o=0}else{i=c[n+280>>2]|0;e=n+284|0;if((l|0)>0){d=0;g=0;f=k;while(1){j=c[f>>2]&3;a=c[((j|0)==3?f:f+32|0)+28>>2]|0;if((a|0)==(m|0)){p=c[((j|0)==2?f:f-32|0)+28>>2]|0}else{p=a}a=c[(c[p+8>>2]|0)+284>>2]|0;do{if((i|0)>(a|0)){q=21}else{if((a|0)>(c[e>>2]|0)){q=21;break}r=c[f+8>>2]|0;if((c[r+164>>2]|0)>-1){s=c[r+160>>2]|0}else{s=0}t=1;u=s-(c[r+156>>2]|0)|0}}while(0);if((q|0)==21){q=0;t=0;u=c[(c[f+8>>2]|0)+156>>2]|0}a=(c[((j|0)==2?f:f-32|0)+28>>2]|0)==(m|0)?1:-1;r=(((t?a:-a|0)|0)<0?-u|0:u)+g|0;a=d+1|0;v=c[h+(a<<2)>>2]|0;if((v|0)==0){o=r;break}else{d=a;g=r;f=v}}}else{f=0;g=0;d=k;while(1){k=c[d>>2]&3;u=c[((k|0)==3?d:d+32|0)+28>>2]|0;t=(u|0)==(m|0);if(t){w=c[((k|0)==2?d:d-32|0)+28>>2]|0}else{w=u}u=c[(c[w+8>>2]|0)+284>>2]|0;do{if((i|0)>(u|0)){q=38}else{if((u|0)>(c[e>>2]|0)){q=38;break}k=c[d+8>>2]|0;if((c[k+164>>2]|0)>-1){x=c[k+160>>2]|0}else{x=0}y=1;z=x-(c[k+156>>2]|0)|0}}while(0);if((q|0)==38){q=0;y=0;z=c[(c[d+8>>2]|0)+156>>2]|0}u=t?1:-1;j=(((y?u:-u|0)|0)<0?-z|0:z)+g|0;u=f+1|0;k=c[h+(u<<2)>>2]|0;if((k|0)==0){o=j;break}else{f=u;g=j;d=k}}}}d=c[n+172>>2]|0;g=c[d>>2]|0;if((g|0)==0){A=o}else{f=c[n+280>>2]|0;h=n+284|0;if((l|0)>0){l=0;n=o;z=g;while(1){y=c[z>>2]&3;x=c[((y|0)==3?z:z+32|0)+28>>2]|0;if((x|0)==(m|0)){B=c[((y|0)==2?z:z-32|0)+28>>2]|0}else{B=x}x=c[(c[B+8>>2]|0)+284>>2]|0;do{if((f|0)>(x|0)){q=32}else{if((x|0)>(c[h>>2]|0)){q=32;break}e=c[z+8>>2]|0;if((c[e+164>>2]|0)>-1){C=c[e+160>>2]|0}else{C=0}D=1;E=C-(c[e+156>>2]|0)|0}}while(0);if((q|0)==32){q=0;D=0;E=c[(c[z+8>>2]|0)+156>>2]|0}x=(c[((y|0)==2?z:z-32|0)+28>>2]|0)==(m|0)?1:-1;t=(((D?x:-x|0)|0)<0?-E|0:E)+n|0;x=l+1|0;e=c[d+(x<<2)>>2]|0;if((e|0)==0){A=t;break}else{l=x;n=t;z=e}}}else{z=0;n=o;o=g;while(1){g=c[o>>2]&3;l=c[((g|0)==3?o:o+32|0)+28>>2]|0;E=(l|0)==(m|0);if(E){F=c[((g|0)==2?o:o-32|0)+28>>2]|0}else{F=l}l=c[(c[F+8>>2]|0)+284>>2]|0;do{if((f|0)>(l|0)){q=47}else{if((l|0)>(c[h>>2]|0)){q=47;break}g=c[o+8>>2]|0;if((c[g+164>>2]|0)>-1){G=c[g+160>>2]|0}else{G=0}H=1;I=G-(c[g+156>>2]|0)|0}}while(0);if((q|0)==47){q=0;H=0;I=c[(c[o+8>>2]|0)+156>>2]|0}l=E?1:-1;y=(((H?l:-l|0)|0)<0?-I|0:I)+n|0;l=z+1|0;g=c[d+(l<<2)>>2]|0;if((g|0)==0){A=y;break}else{z=l;n=y;o=g}}}}c[(c[b+8>>2]|0)+160>>2]=A;return}function uk(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=b+8|0;b=c[d>>2]|0;f=c[c[b+180>>2]>>2]|0;a:do{if((f|0)==0){g=b}else{h=0;i=f;j=b;b:while(1){k=i;l=c[k>>2]&3;m=i-32|0;n=c[(c[((l|0)==2?i:m)+28>>2]|0)+8>>2]|0;do{if((a[n+157|0]|0)==0){if(((c[n+232>>2]|0)-(c[(c[(c[((l|0)==3?i:i+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0)!=(e[(c[i+8>>2]|0)+170>>1]|0)){o=j;break}vk(i);if((c[53506]|0)==((c[53608]|0)-1|0)){p=1;q=15;break b}if((uk(c[((c[k>>2]&3|0)==2?i:m)+28>>2]|0)|0)!=0){p=1;q=15;break b}o=c[d>>2]|0}else{o=j}}while(0);m=h+1|0;k=c[(c[o+180>>2]|0)+(m<<2)>>2]|0;if((k|0)==0){g=o;break a}else{h=m;i=k;j=o}}if((q|0)==15){return p|0}}}while(0);o=c[c[g+172>>2]>>2]|0;if((o|0)==0){p=0;return p|0}else{r=0;s=o;t=g}c:while(1){g=s;o=c[g>>2]&3;b=s+32|0;f=c[(c[((o|0)==3?s:b)+28>>2]|0)+8>>2]|0;do{if((a[f+157|0]|0)==0){if(((c[(c[(c[((o|0)==2?s:s-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[f+232>>2]|0)|0)!=(e[(c[s+8>>2]|0)+170>>1]|0)){u=t;break}vk(s);if((c[53506]|0)==((c[53608]|0)-1|0)){p=1;q=15;break c}if((uk(c[((c[g>>2]&3|0)==3?s:b)+28>>2]|0)|0)!=0){p=1;q=15;break c}u=c[d>>2]|0}else{u=t}}while(0);b=r+1|0;g=c[(c[u+172>>2]|0)+(b<<2)>>2]|0;if((g|0)==0){p=0;q=15;break}else{r=b;s=g;t=u}}if((q|0)==15){return p|0}return 0}function vk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;e=(c[b+8>>2]|0)+164|0;if((c[e>>2]|0)>-1){Fv(1,96648,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f;rc(178552,1)}c[e>>2]=c[53506];e=c[53506]|0;c[53506]=e+1;c[(c[53508]|0)+(e<<2)>>2]=b;e=b;g=c[e>>2]|0;h=b+32|0;j=c[((g&3|0)==3?b:h)+28>>2]|0;if((a[(c[j+8>>2]|0)+157|0]|0)==0){k=c[53502]|0;c[53502]=k+1;c[(c[53504]|0)+(k<<2)>>2]=j;l=c[e>>2]|0}else{l=g}g=b-32|0;j=c[((l&3|0)==2?b:g)+28>>2]|0;if((a[(c[j+8>>2]|0)+157|0]|0)==0){k=c[53502]|0;c[53502]=k+1;c[(c[53504]|0)+(k<<2)>>2]=j;m=c[e>>2]|0}else{m=l}l=(c[((m&3|0)==3?b:h)+28>>2]|0)+8|0;a[(c[l>>2]|0)+157|0]=1;h=(c[l>>2]|0)+272|0;m=c[h>>2]|0;c[h>>2]=m+1;c[(c[(c[l>>2]|0)+268>>2]|0)+(m<<2)>>2]=b;m=(c[l>>2]|0)+268|0;c[(c[m>>2]|0)+(c[m+4>>2]<<2)>>2]=0;m=c[l>>2]|0;if((c[(c[m+180>>2]|0)+((c[m+272>>2]|0)-1<<2)>>2]|0)==0){Fv(1,91288,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f;rc(178552,1)}m=(c[((c[e>>2]&3|0)==2?b:g)+28>>2]|0)+8|0;a[(c[m>>2]|0)+157|0]=1;g=(c[m>>2]|0)+264|0;e=c[g>>2]|0;c[g>>2]=e+1;c[(c[(c[m>>2]|0)+260>>2]|0)+(e<<2)>>2]=b;b=(c[m>>2]|0)+260|0;c[(c[b>>2]|0)+(c[b+4>>2]<<2)>>2]=0;b=c[m>>2]|0;if((c[(c[b+172>>2]|0)+((c[b+264>>2]|0)-1<<2)>>2]|0)==0){Fv(1,86104,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f;rc(178552,1)}else{i=d;return}}function wk(a){a=+a;var b=0.0;if((c[53492]|0)==0){b=a;return+b}b=+h[21426]-a;return+b}function xk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0,L=0.0;g=i;i=i+1024|0;j=c[(c[(c[d+52>>2]|0)+8>>2]|0)+4>>2]|0;c[43802]=j;k=d+8|0;if((c[53492]|0)!=0){l=c[k>>2]|0;m=+h[l+40>>3]+ +h[l+24>>3];h[21426]=m;h[21427]=m/72.0}l=c[k>>2]|0;m=+h[l+32>>3];n=+h[l+40>>3];o=+h[b+352>>3];b=g|0;l=e;Oc[j&255](l,117392)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=o,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=m/72.0,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=n/72.0,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;a[212960]=10;Oc[c[43802]&255](l,212960)|0;k=ux(d)|0;if((k|0)!=0){p=k;do{k=p+8|0;if((a[(c[k>>2]|0)+118|0]|0)==0){q=p|0;r=Dy($w(q)|0)|0;Oc[c[43802]&255](l,126896)|0;Oc[c[43802]&255](l,r)|0;r=c[k>>2]|0;n=+h[r+24>>3];m=+h[r+16>>3]/72.0;Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=m,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;if((c[53492]|0)==0){s=n}else{s=+h[21426]-n}Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=s/72.0,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;if((a[(c[(c[k>>2]|0)+104>>2]|0)+82|0]|0)==0){r=Hx(q)|0;t=dy(r,c[c[(c[k>>2]|0)+104>>2]>>2]|0)|0;u=Dy(t)|0;fy(r,t)|0;v=u}else{v=Dy(fw(q,c[53614]|0)|0)|0}n=+h[(c[k>>2]|0)+32>>3];Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=n,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;n=+h[(c[k>>2]|0)+40>>3];Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=n,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;Oc[c[43802]&255](l,156424)|0;Oc[c[43802]&255](l,v)|0;u=Im(q,c[53582]|0,114968)|0;Oc[c[43802]&255](l,156424)|0;Oc[c[43802]&255](l,u)|0;u=c[c[(c[k>>2]|0)+8>>2]>>2]|0;Oc[c[43802]&255](l,156424)|0;Oc[c[43802]&255](l,u)|0;u=Im(q,c[53644]|0,108072)|0;Oc[c[43802]&255](l,156424)|0;Oc[c[43802]&255](l,u)|0;u=Im(q,c[53632]|0,213368)|0;if((a[u]|0)==0){w=Im(q,c[53644]|0,96632)|0}else{w=u}Oc[c[43802]&255](l,156424)|0;Oc[c[43802]&255](l,w)|0;a[212960]=10;Oc[c[43802]&255](l,212960)|0}p=vx(d,p)|0;}while((p|0)!=0)}p=ux(d)|0;if((p|0)==0){x=c[43802]|0;y=Oc[x&255](l,167632)|0;i=g;return}w=f<<24>>24==0;f=p;do{p=mw(d,f)|0;if((p|0)!=0){v=p;do{if(w){z=213368;A=213368}else{p=v|0;u=ew(p,91272)|0;q=ew(p,86088)|0;z=(q|0)!=0?q:213368;A=(u|0)!=0?u:213368}u=v+8|0;q=c[u>>2]|0;p=c[q+8>>2]|0;do{if((p|0)==0){B=q}else{k=c[p+4>>2]|0;if((k|0)>0){t=c[p>>2]|0;r=0;C=0;while(1){D=(c[t+(C*48|0)+4>>2]|0)+r|0;E=C+1|0;if((E|0)<(k|0)){r=D;C=E}else{F=D;break}}}else{F=0}Oc[c[43802]&255](l,81384)|0;C=v;yk(e,c[((c[C>>2]&3|0)==3?v:v+32|0)+28>>2]|0,A);yk(e,c[((c[C>>2]&3|0)==2?v:v-32|0)+28>>2]|0,z);Oc[c[43802]&255](l,156424)|0;nb(b|0,113688,(j=i,i=i+8|0,c[j>>2]=F,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;C=c[u>>2]|0;r=c[C+8>>2]|0;if((c[r+4>>2]|0)>0){G=0;H=r;I=C}else{B=C;break}while(1){C=c[H>>2]|0;r=c[C+(G*48|0)>>2]|0;k=c[C+(G*48|0)+4>>2]|0;if((k|0)>0){C=0;do{s=+h[r+(C<<4)+8>>3];n=+h[r+(C<<4)>>3]/72.0;Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=n,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;if((c[53492]|0)==0){J=s}else{J=+h[21426]-s}Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=J/72.0,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;C=C+1|0;}while((C|0)<(k|0));K=c[u>>2]|0}else{K=I}k=G+1|0;C=c[K+8>>2]|0;if((k|0)<(c[C+4>>2]|0)){G=k;H=C;I=K}else{B=K;break}}}}while(0);if((c[B+96>>2]|0)!=0){p=Hx(c[((c[v>>2]&3|0)==3?v:v+32|0)+28>>2]|0)|0;q=dy(p,c[c[(c[u>>2]|0)+96>>2]>>2]|0)|0;C=Dy(q)|0;fy(p,q)|0;Oc[c[43802]&255](l,156424)|0;Oc[c[43802]&255](l,C)|0;C=c[(c[u>>2]|0)+96>>2]|0;s=+h[C+64>>3];n=+h[C+56>>3]/72.0;Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=n,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;if((c[53492]|0)==0){L=s}else{L=+h[21426]-s}Oc[c[43802]&255](l,156424)|0;nb(b|0,121728,(j=i,i=i+8|0,h[j>>3]=L/72.0,j)|0)|0;i=j;Oc[c[43802]&255](l,b)|0;}C=v|0;q=Im(C,c[53760]|0,114968)|0;Oc[c[43802]&255](l,156424)|0;Oc[c[43802]&255](l,q)|0;q=Im(C,c[53816]|0,108072)|0;Oc[c[43802]&255](l,156424)|0;Oc[c[43802]&255](l,q)|0;a[212960]=10;Oc[c[43802]&255](l,212960)|0;v=ow(d,v)|0;}while((v|0)!=0)}f=vx(d,f)|0;}while((f|0)!=0);x=c[43802]|0;y=Oc[x&255](l,167632)|0;i=g;return}function yk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=d|0;if((a[(c[d+8>>2]|0)+118|0]|0)==0){g=Dy($w(f)|0)|0}else{d=Hx(f)|0;h=dy(d,(gb($w(f)|0,58)|0)+1|0)|0;f=Dy(h)|0;fy(d,h)|0;g=f}f=b;Oc[c[43802]&255](f,156424)|0;Oc[c[43802]&255](f,g)|0;if((e|0)==0){return}if((a[e]|0)==0){return}g=Dy(e)|0;Oc[c[43802]&255](f,113176)|0;Oc[c[43802]&255](f,g)|0;return}function zk(d,f,g){d=d|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0,J=0.0,K=0,L=0,M=0,N=0.0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0.0,na=0,oa=0,pa=0,qa=0,ra=0.0,sa=0,ta=0,ua=0,va=0.0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0.0,Fa=0,Ga=0.0,Ha=0,Ia=0.0,Ja=0.0;j=i;i=i+2064|0;k=j+2048|0;l=d+8|0;m=(e[(c[l>>2]|0)+170>>1]|0)>>>0>2>>>0;Zh(1);if((c[53492]|0)!=0){n=c[l>>2]|0;o=+h[n+40>>3]+ +h[n+24>>3];h[21426]=o;h[21427]=o/72.0}Iv(k,1024,j+1024|0);en(d,1,163480,213368)|0;en(d,1,159400,213368)|0;c[53574]=en(d,1,154328,213368)|0;c[53618]=en(d,1,151232,213368)|0;en(d,2,163480,213368)|0;n=a[(c[l>>2]|0)+113|0]|0;if((n&16)==0){p=n}else{en(d,1,148272,213368)|0;p=a[(c[l>>2]|0)+113|0]|0}if((p&1)==0){q=p}else{en(d,2,145120,213368)|0;q=a[(c[l>>2]|0)+113|0]|0}if((q&32)==0){r=q}else{en(d,2,148272,213368)|0;r=a[(c[l>>2]|0)+113|0]|0}if((r&2)==0){s=r}else{en(d,2,142144,213368)|0;s=a[(c[l>>2]|0)+113|0]|0}if((s&4)==0){t=s}else{en(d,2,139048,213368)|0;t=a[(c[l>>2]|0)+113|0]|0}if((t&8)==0){u=0;v=0;w=0}else{t=en(d,0,145120,213368)|0;s=en(d,0,136496,213368)|0;u=en(d,0,133672,213368)|0;v=s;w=t}t=en(d,0,131552,213368)|0;s=ux(d)|0;if((s|0)==0){x=0;y=0}else{r=j|0;q=k+4|0;p=k+8|0;n=k|0;z=s;s=0;A=0;while(1){B=z+8|0;C=c[B>>2]|0;o=+h[C+16>>3];D=(c[53492]|0)!=0;if(m){if(D){E=+h[21426]- +h[C+24>>3]}else{E=+h[C+24>>3]}F=+h[(c[C+132>>2]|0)+16>>3]*72.0;nb(r|0,129264,(G=i,i=i+24|0,h[G>>3]=o,h[G+8>>3]=E,h[G+16>>3]=F,G)|0)|0;i=G;Lv(k,r)|0;if((e[(c[l>>2]|0)+170>>1]|0)>>>0>3>>>0){H=3;do{nb(r|0,126056,(G=i,i=i+8|0,h[G>>3]=+h[(c[(c[B>>2]|0)+132>>2]|0)+(H<<3)>>3]*72.0,G)|0)|0;i=G;Lv(k,r)|0;H=H+1|0;}while((H|0)<(e[(c[l>>2]|0)+170>>1]|0))}H=c[q>>2]|0;if(H>>>0<(c[p>>2]|0)>>>0){I=H}else{Jv(k,1)|0;I=c[q>>2]|0}a[I]=0;H=c[n>>2]|0;c[q>>2]=H;gw(z|0,163480,H)|0}else{if(D){J=+h[21426]- +h[C+24>>3]}else{J=+h[C+24>>3]}nb(r|0,123584,(G=i,i=i+16|0,h[G>>3]=o,h[G+8>>3]=J,G)|0)|0;i=G;gw(z|0,163480,r)|0}nb(r|0,121728,(G=i,i=i+8|0,h[G>>3]=+h[(c[B>>2]|0)+80>>3]/72.0,G)|0)|0;i=G;H=z|0;hw(H,c[53618]|0,r)|0;K=c[B>>2]|0;nb(r|0,121728,(G=i,i=i+8|0,h[G>>3]=(+h[K+88>>3]+ +h[K+96>>3])/72.0,G)|0)|0;i=G;hw(H,c[53574]|0,r)|0;K=c[B>>2]|0;L=c[K+108>>2]|0;do{if((L|0)==0){M=K}else{if((a[L+81|0]|0)==0){M=K;break}F=+h[L+64>>3];if((c[53492]|0)==0){N=F}else{N=+h[21426]-F}nb(r|0,123584,(G=i,i=i+16|0,h[G>>3]=+h[L+56>>3],h[G+8>>3]=N,G)|0)|0;i=G;gw(H,148272,r)|0;M=c[B>>2]|0}}while(0);do{if((Ya(c[c[M+8>>2]>>2]|0,120856)|0)==0){Ak(z,c[M+12>>2]|0,k);Nv(k)|0;L=c[q>>2]|0;if(L>>>0<(c[p>>2]|0)>>>0){O=L}else{Jv(k,1)|0;O=c[q>>2]|0}a[O]=0;L=c[n>>2]|0;c[q>>2]=L;gw(H,159400,L)|0}else{if((c[53580]|0)==0){break}if((tl(z)|0)<<24>>24==0){break}L=c[(c[B>>2]|0)+12>>2]|0;K=L+8|0;C=c[K>>2]|0;if((C|0)<3){D=ew(H,120104)|0;if((D|0)==0){P=8}else{P=Rb(D|0)|0}D=(P|0)<3?8:P;if((D|0)>0){Q=D;R=45}}else{Q=C;R=45}if((R|0)==45){R=0;C=L+44|0;o=+(Q|0);L=0;do{if((L|0)>0){D=c[q>>2]|0;if(D>>>0<(c[p>>2]|0)>>>0){S=D}else{Jv(k,1)|0;S=c[q>>2]|0}c[q>>2]=S+1;a[S]=32}if((c[K>>2]|0)>2){D=c[C>>2]|0;if((c[53492]|0)==0){T=+h[D+(L<<4)+8>>3]/72.0}else{T=+h[21427]- +h[D+(L<<4)+8>>3]/72.0}nb(r|0,119288,(G=i,i=i+16|0,h[G>>3]=+h[D+(L<<4)>>3]/72.0,h[G+8>>3]=T,G)|0)|0;i=G}else{D=c[B>>2]|0;F=+(L|0)/o*3.141592653589793*2.0;U=+h[D+32>>3]*.5*+V(F);if((c[53492]|0)==0){X=+h[D+40>>3]*.5*+W(F)}else{X=+h[21427]- +h[D+40>>3]*.5*+W(F)}nb(r|0,119288,(G=i,i=i+16|0,h[G>>3]=U,h[G+8>>3]=X,G)|0)|0;i=G}Lv(k,r)|0;L=L+1|0;}while((L|0)<(Q|0))}L=c[53580]|0;C=c[q>>2]|0;if(C>>>0<(c[p>>2]|0)>>>0){Y=C}else{Jv(k,1)|0;Y=c[q>>2]|0}a[Y]=0;C=c[n>>2]|0;c[q>>2]=C;hw(H,L,C)|0}}while(0);do{if((c[53522]|0)>0){H=mw(d,z)|0;if((H|0)==0){Z=A;_=s;break}else{$=H;aa=s;ba=A}while(1){H=$+8|0;B=c[H>>2]|0;do{if((a[B+112|0]|0)==6){ca=ba;da=aa}else{C=c[B+8>>2]|0;if((C|0)==0){ca=ba;da=aa;break}if((c[C+4>>2]|0)>0){C=0;L=aa;K=ba;D=B;while(1){if((C|0)>0){ea=c[q>>2]|0;if(ea>>>0<(c[p>>2]|0)>>>0){fa=ea}else{Jv(k,1)|0;fa=c[q>>2]|0}c[q>>2]=fa+1;a[fa]=59;ga=c[H>>2]|0}else{ga=D}ea=c[ga+8>>2]|0;ha=c[ea>>2]|0;if((c[ha+(C*48|0)+8>>2]|0)==0){ia=L;ja=ga;ka=ea;la=ha}else{if((c[53492]|0)==0){ma=+h[ha+(C*48|0)+24>>3]}else{ma=+h[21426]- +h[ha+(C*48|0)+24>>3]}nb(r|0,118616,(G=i,i=i+16|0,h[G>>3]=+h[ha+(C*48|0)+16>>3],h[G+8>>3]=ma,G)|0)|0;i=G;Lv(k,r)|0;ha=c[H>>2]|0;ea=c[ha+8>>2]|0;ia=1;ja=ha;ka=ea;la=c[ea>>2]|0}if((c[la+(C*48|0)+12>>2]|0)==0){na=K;oa=ja;pa=ka;qa=la}else{if((c[53492]|0)==0){ra=+h[la+(C*48|0)+40>>3]}else{ra=+h[21426]- +h[la+(C*48|0)+40>>3]}nb(r|0,117672,(G=i,i=i+16|0,h[G>>3]=+h[la+(C*48|0)+32>>3],h[G+8>>3]=ra,G)|0)|0;i=G;Lv(k,r)|0;ea=c[H>>2]|0;ha=c[ea+8>>2]|0;na=1;oa=ea;pa=ha;qa=c[ha>>2]|0}if((c[qa+(C*48|0)+4>>2]|0)>0){ha=0;ea=oa;while(1){if((ha|0)>0){sa=c[q>>2]|0;if(sa>>>0<(c[p>>2]|0)>>>0){ta=sa}else{Jv(k,1)|0;ta=c[q>>2]|0}c[q>>2]=ta+1;a[ta]=32;ua=c[H>>2]|0}else{ua=ea}sa=c[(c[c[ua+8>>2]>>2]|0)+(C*48|0)>>2]|0;o=+h[sa+(ha<<4)+8>>3];if((c[53492]|0)==0){va=o}else{va=+h[21426]-o}nb(r|0,123584,(G=i,i=i+16|0,h[G>>3]=+h[sa+(ha<<4)>>3],h[G+8>>3]=va,G)|0)|0;i=G;Lv(k,r)|0;sa=ha+1|0;wa=c[H>>2]|0;xa=c[wa+8>>2]|0;if((sa|0)<(c[(c[xa>>2]|0)+(C*48|0)+4>>2]|0)){ha=sa;ea=wa}else{ya=wa;za=xa;break}}}else{ya=oa;za=pa}ea=C+1|0;if((ea|0)<(c[za+4>>2]|0)){C=ea;L=ia;K=na;D=ya}else{Aa=ia;Ba=na;break}}}else{Aa=aa;Ba=ba}D=$|0;K=c[q>>2]|0;if(K>>>0<(c[p>>2]|0)>>>0){Ca=K}else{Jv(k,1)|0;Ca=c[q>>2]|0}a[Ca]=0;K=c[n>>2]|0;c[q>>2]=K;gw(D,163480,K)|0;K=c[H>>2]|0;L=c[K+96>>2]|0;if((L|0)==0){Da=K}else{o=+h[L+64>>3];if((c[53492]|0)==0){Ea=o}else{Ea=+h[21426]-o}nb(r|0,123584,(G=i,i=i+16|0,h[G>>3]=+h[L+56>>3],h[G+8>>3]=Ea,G)|0)|0;i=G;gw(D,145120,r)|0;Da=c[H>>2]|0}L=c[Da+108>>2]|0;do{if((L|0)==0){Fa=Da}else{if((a[L+81|0]|0)==0){Fa=Da;break}o=+h[L+64>>3];if((c[53492]|0)==0){Ga=o}else{Ga=+h[21426]-o}nb(r|0,123584,(G=i,i=i+16|0,h[G>>3]=+h[L+56>>3],h[G+8>>3]=Ga,G)|0)|0;i=G;gw(D,148272,r)|0;Fa=c[H>>2]|0}}while(0);L=c[Fa+100>>2]|0;if((L|0)==0){Ha=Fa}else{o=+h[L+64>>3];if((c[53492]|0)==0){Ia=o}else{Ia=+h[21426]-o}nb(r|0,123584,(G=i,i=i+16|0,h[G>>3]=+h[L+56>>3],h[G+8>>3]=Ia,G)|0)|0;i=G;gw(D,142144,r)|0;Ha=c[H>>2]|0}L=c[Ha+104>>2]|0;if((L|0)==0){ca=Ba;da=Aa;break}o=+h[L+64>>3];if((c[53492]|0)==0){Ja=o}else{Ja=+h[21426]-o}nb(r|0,123584,(G=i,i=i+16|0,h[G>>3]=+h[L+56>>3],h[G+8>>3]=Ja,G)|0)|0;i=G;gw(D,139048,r)|0;ca=Ba;da=Aa}}while(0);H=ow(d,$)|0;if((H|0)==0){Z=ca;_=da;break}else{$=H;aa=da;ba=ca}}}else{Z=A;_=s}}while(0);H=vx(d,z)|0;if((H|0)==0){x=_;y=Z;break}else{z=H;s=_;A=Z}}}Bk(d,t,w,v,u);Mv(k);if((b[(c[l>>2]|0)+128>>1]&1)==0){c[f>>2]=x;c[g>>2]=y;Zh(0);i=j;return}dn(d);c[f>>2]=x;c[g>>2]=y;Zh(0);i=j;return}function Ak(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0;e=i;i=i+1024|0;f=b+48|0;g=c[f>>2]|0;if((g|0)==0){j=e|0;k=c[a+8>>2]|0;l=+h[k+16>>3];if((c[53492]|0)==0){m=+h[k+24>>3];n=+h[b+40>>3]+m;o=+h[b+24>>3]+m}else{m=+h[k+24>>3];n=+h[21426]-(+h[b+40>>3]+m);o=+h[21426]-(+h[b+24>>3]+m)}m=+h[b+32>>3]+l;nb(j|0,114432,(k=i,i=i+32|0,h[k>>3]=+h[b+16>>3]+l,h[k+8>>3]=o,h[k+16>>3]=m,h[k+24>>3]=n,k)|0)|0;i=k;Lv(d,j)|0;p=c[f>>2]|0}else{p=g}if((p|0)<=0){i=e;return}p=b+56|0;b=0;do{Ak(a,c[(c[p>>2]|0)+(b<<2)>>2]|0,d);b=b+1|0;}while((b|0)<(c[f>>2]|0));i=e;return}function Bk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0;j=i;i=i+1024|0;k=j|0;l=b+8|0;m=c[l>>2]|0;if((c[53492]|0)==0){n=+h[m+40>>3];o=+h[m+24>>3]}else{p=+h[21426];n=p- +h[m+40>>3];o=p- +h[m+24>>3]}p=+h[m+32>>3];nb(k|0,116760,(q=i,i=i+32|0,h[q>>3]=+h[m+16>>3],h[q+8>>3]=o,h[q+16>>3]=p,h[q+24>>3]=n,q)|0)|0;i=q;m=b|0;hw(m,d,k)|0;b=c[l>>2]|0;r=c[b+12>>2]|0;do{if((r|0)==0){s=b}else{if((a[c[r>>2]|0]|0)==0){s=b;break}n=+h[r+64>>3];if((c[53492]|0)==0){t=n}else{t=+h[21426]-n}nb(k|0,123584,(q=i,i=i+16|0,h[q>>3]=+h[r+56>>3],h[q+8>>3]=t,q)|0)|0;i=q;hw(m,e,k)|0;u=c[(c[l>>2]|0)+12>>2]|0;n=+h[u+32>>3];nb(k|0,115808,(q=i,i=i+8|0,h[q>>3]=+h[u+24>>3]/72.0,q)|0)|0;i=q;hw(m,f,k)|0;nb(k|0,115808,(q=i,i=i+8|0,h[q>>3]=n/72.0,q)|0)|0;i=q;hw(m,g,k)|0;s=c[l>>2]|0}}while(0);if((c[s+172>>2]|0)<1){i=j;return}else{v=1;w=s}while(1){Bk(c[(c[w+176>>2]|0)+(v<<2)>>2]|0,d,e,f,g);s=c[l>>2]|0;if((v|0)<(c[s+172>>2]|0)){v=v+1|0;w=s}else{break}}i=j;return}function Ck(a){a=a|0;var b=0;b=i;i=i+16|0;zk(a,b+8|0,b|0);i=b;return}function Dk(){return $g(21464,c[43330]|0)|0}function Ek(a){a=a|0;Vg(a)|0;return}function Fk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=b;b=i;i=i+8|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];e=c[a>>2]|0;f=c[b>>2]|0;g=c[b+4>>2]|0;b=jk(16)|0;h=b+8|0;c[h>>2]=f;c[h+4>>2]=g;Hc[e&63](a,b,1)|0;i=d;return}function Gk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=c[a>>2]|0;f=jk(16)|0;g=f+8|0;c[g>>2]=b;c[g+4>>2]=d;Hc[e&63](a,f,1)|0;return}function Hk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;e=b;b=i;i=i+8|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];e=d|0;f=b;b=e+8|0;g=c[f+4>>2]|0;c[b>>2]=c[f>>2];c[b+4>>2]=g;g=(Hc[c[a>>2]&63](a,e,4)|0)!=0|0;i=d;return g|0}function Ik(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e|0;c[f+8>>2]=b;c[f+12>>2]=d;d=(Hc[c[a>>2]&63](a,f,4)|0)!=0|0;i=e;return d|0}function Jk(a){a=a|0;return bh(a)|0}function Kk(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=jk((bh(a)|0)<<3)|0;d=Zg(a)|0;if((d|0)==0){return b|0}else{e=d;f=b}while(1){d=e+8|0;a=f;g=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=g;g=c[e>>2]|0;if((g|0)==0){break}else{e=g;f=f+8|0}}return b|0}function Lk(){var a=0;a=kk(40)|0;tF(a|0,21504,36)|0;c[a+36>>2]=0;return $g(a,c[43330]|0)|0}function Mk(a){a=a|0;Hc[c[a>>2]&63](a,0,64)|0;return}function Nk(a){a=a|0;var b=0,d=0,e=0;b=c[a+4>>2]|0;Vg(a)|0;a=c[b+36>>2]|0;if((a|0)==0){d=b;eF(d);return}else{e=a}while(1){a=c[e>>2]|0;eF(e);if((a|0)==0){break}else{e=a}}d=b;eF(d);return}function Ok(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+24|0;g=f|0;c[g+8>>2]=b;c[g+12>>2]=d;c[g+16>>2]=e;e=c[(Hc[c[a>>2]&63](a,g,1)|0)+16>>2]|0;i=f;return e|0}function Pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;a=d+36|0;d=c[a>>2]|0;if((d|0)==0){e=kk(20)|0}else{c[a>>2]=c[d>>2];e=d}d=b+8|0;a=e+8|0;f=c[d+4>>2]|0;c[a>>2]=c[d>>2];c[a+4>>2]=f;c[e+16>>2]=c[b+16>>2];return e|0}function Qk(a,b,d){a=a|0;b=b|0;d=d|0;a=d+36|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}function Rk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;e=c[b>>2]|0;a=c[d>>2]|0;do{if((e|0)>(a|0)){f=1}else{if((e|0)<(a|0)){f=-1;break}g=c[b+4>>2]|0;h=c[d+4>>2]|0;if((g|0)>(h|0)){f=1;break}f=((g|0)<(h|0))<<31>>31}}while(0);return f|0}function Sk(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function Tk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0;d=i;i=i+240|0;e=d|0;f=d+16|0;g=d+32|0;j=d+48|0;k=d+64|0;l=d+80|0;m=d+96|0;n=d+112|0;o=d+128|0;p=d+144|0;q=d+160|0;r=a+8|0;a=c[r>>2]|0;s=+h[a+16>>3];t=+h[a+24>>3];u=+h[a+32>>3];v=+h[a+40>>3];if((b-1|0)>>>0<2>>>0){a=o;w=p;x=o|0;h[x>>3]=s;y=o+8|0;h[y>>3]=v;si(p,o,(c[53548]|0)*90|0);c[a>>2]=c[w>>2];c[a+4>>2]=c[w+4>>2];c[a+8>>2]=c[w+8>>2];c[a+12>>2]=c[w+12>>2];h[x>>3]=+h[x>>3]- +h[26781];h[y>>3]=+h[y>>3]- +h[26782];y=q;c[y>>2]=c[a>>2];c[y+4>>2]=c[a+4>>2];c[y+8>>2]=c[a+8>>2];c[y+12>>2]=c[a+12>>2];a=k;y=l;x=k|0;h[x>>3]=u;w=k+8|0;h[w>>3]=t;si(l,k,(c[53548]|0)*90|0);c[a>>2]=c[y>>2];c[a+4>>2]=c[y+4>>2];c[a+8>>2]=c[y+8>>2];c[a+12>>2]=c[y+12>>2];h[x>>3]=+h[x>>3]- +h[26781];h[w>>3]=+h[w>>3]- +h[26782];w=d+192|0;c[w>>2]=c[a>>2];c[w+4>>2]=c[a+4>>2];c[w+8>>2]=c[a+8>>2];c[w+12>>2]=c[a+12>>2];a=q+16|0;c[a>>2]=c[w>>2];c[a+4>>2]=c[w+4>>2];c[a+8>>2]=c[w+8>>2];c[a+12>>2]=c[w+12>>2]}else{w=e;a=f;x=e|0;h[x>>3]=s;y=e+8|0;h[y>>3]=t;si(f,e,(c[53548]|0)*90|0);c[w>>2]=c[a>>2];c[w+4>>2]=c[a+4>>2];c[w+8>>2]=c[a+8>>2];c[w+12>>2]=c[a+12>>2];h[x>>3]=+h[x>>3]- +h[26781];h[y>>3]=+h[y>>3]- +h[26782];y=q;c[y>>2]=c[w>>2];c[y+4>>2]=c[w+4>>2];c[y+8>>2]=c[w+8>>2];c[y+12>>2]=c[w+12>>2];w=g;y=j;x=g|0;h[x>>3]=u;a=g+8|0;h[a>>3]=v;si(j,g,(c[53548]|0)*90|0);c[w>>2]=c[y>>2];c[w+4>>2]=c[y+4>>2];c[w+8>>2]=c[y+8>>2];c[w+12>>2]=c[y+12>>2];h[x>>3]=+h[x>>3]- +h[26781];h[a>>3]=+h[a>>3]- +h[26782];a=d+208|0;c[a>>2]=c[w>>2];c[a+4>>2]=c[w+4>>2];c[a+8>>2]=c[w+8>>2];c[a+12>>2]=c[w+12>>2];w=q+16|0;c[w>>2]=c[a>>2];c[w+4>>2]=c[a+4>>2];c[w+8>>2]=c[a+8>>2];c[w+12>>2]=c[a+12>>2]}a=(c[r>>2]|0)+16|0;w=q;c[a>>2]=c[w>>2];c[a+4>>2]=c[w+4>>2];c[a+8>>2]=c[w+8>>2];c[a+12>>2]=c[w+12>>2];c[a+16>>2]=c[w+16>>2];c[a+20>>2]=c[w+20>>2];c[a+24>>2]=c[w+24>>2];c[a+28>>2]=c[w+28>>2];w=c[r>>2]|0;a=c[w+12>>2]|0;if((a|0)==0){z=w}else{w=a+56|0;v=+h[a+64>>3];a=m;q=n;x=m|0;h[x>>3]=+h[w>>3];y=m+8|0;h[y>>3]=v;si(n,m,(c[53548]|0)*90|0);c[a>>2]=c[q>>2];c[a+4>>2]=c[q+4>>2];c[a+8>>2]=c[q+8>>2];c[a+12>>2]=c[q+12>>2];h[x>>3]=+h[x>>3]- +h[26781];h[y>>3]=+h[y>>3]- +h[26782];y=d+224|0;c[y>>2]=c[a>>2];c[y+4>>2]=c[a+4>>2];c[y+8>>2]=c[a+8>>2];c[y+12>>2]=c[a+12>>2];a=w;c[a>>2]=c[y>>2];c[a+4>>2]=c[y+4>>2];c[a+8>>2]=c[y+8>>2];c[a+12>>2]=c[y+12>>2];z=c[r>>2]|0}if((c[z+172>>2]|0)<1){i=d;return}else{A=1;B=z}while(1){Tk(c[(c[B+176>>2]|0)+(A<<2)>>2]|0,b);z=c[r>>2]|0;if((A|0)<(c[z+172>>2]|0)){A=A+1|0;B=z}else{break}}i=d;return}function Uk(e,f){e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0,za=0,Aa=0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0.0,La=0.0,Na=0.0,Oa=0.0,Pa=0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0,Ua=0,Va=0.0,Wa=0.0,Xa=0.0,Ya=0.0,Za=0.0,_a=0.0,$a=0.0,ab=0,bb=0.0,cb=0.0,db=0.0,eb=0.0,fb=0.0,gb=0.0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0.0,ob=0.0,pb=0.0,qb=0.0,rb=0,sb=0,tb=0.0,ub=0.0,vb=0.0,wb=0.0,xb=0,yb=0.0,zb=0.0,Ab=0,Bb=0,Cb=0.0,Db=0.0,Eb=0.0,Fb=0.0,Gb=0,Hb=0,Ib=0.0,Jb=0.0,Kb=0.0,Mb=0.0,Nb=0.0,Ob=0.0,Pb=0,Qb=0.0,Rb=0.0,Sb=0,Tb=0,Ub=0.0,Vb=0.0,Wb=0.0,Xb=0.0,Yb=0,Zb=0,_b=0.0,$b=0.0,ac=0.0,bc=0.0,cc=0.0,dc=0.0,ec=0,fc=0,hc=0.0,ic=0.0,jc=0,kc=0,lc=0.0,mc=0.0,nc=0.0,oc=0.0,pc=0,qc=0.0,rc=0.0,sc=0.0,tc=0.0,uc=0.0,vc=0.0,wc=0.0,xc=0.0,yc=0.0,zc=0.0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0.0,Kc=0.0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0.0,Sc=0.0;g=i;i=i+1608|0;j=g|0;k=g+16|0;l=g+32|0;m=g+48|0;n=g+64|0;p=g+80|0;q=g+96|0;r=g+112|0;s=g+128|0;t=g+144|0;u=g+160|0;v=g+176|0;w=g+192|0;x=g+208|0;y=g+224|0;z=g+240|0;A=g+256|0;B=g+272|0;C=g+288|0;D=g+304|0;E=g+320|0;F=g+336|0;G=g+352|0;H=g+368|0;I=g+384|0;J=g+400|0;K=g+416|0;L=g+432|0;M=g+472|0;N=g+488|0;O=g+504|0;P=g+544|0;Q=g+584|0;R=e+8|0;c[53548]=c[(c[R>>2]|0)+116>>2]&3;S=c[(c[R>>2]|0)+116>>2]&1;a[214952]=S;if(S<<24>>24==0){Wk(e)}else{Vk(e)}S=O;T=P;U=c[R>>2]|0;V=b[U+128>>1]&14;W=d[U+113|0]|0;if((W&54|0)==0){if(!((W&1|0)==0|(c[53746]|0)!=0)){X=6}}else{X=6}do{if((X|0)==6){W=ux(e)|0;if((W|0)==0){Y=0;Z=0;_=0}else{U=(V|0)!=0|0;$=0;aa=0;ba=0;ca=W;while(1){W=c[(c[ca+8>>2]|0)+108>>2]|0;do{if((W|0)==0){da=ba;ea=$}else{if((a[W+81|0]|0)==0){da=ba;ea=$+1|0;break}else{da=ba+1|0;ea=$;break}}}while(0);W=mw(e,ca)|0;if((W|0)==0){fa=aa;ga=da}else{ha=aa;ia=da;ja=W;while(1){W=c[ja+8>>2]|0;ka=c[W+108>>2]|0;do{if((ka|0)==0){la=ia;ma=ha}else{if((a[ka+81|0]|0)==0){la=ia;ma=ha+U|0;break}else{la=ia+1|0;ma=ha;break}}}while(0);ka=c[W+100>>2]|0;do{if((ka|0)==0){na=la;oa=ma}else{if((a[ka+81|0]|0)==0){na=la;oa=ma+U|0;break}else{na=la+1|0;oa=ma;break}}}while(0);ka=c[W+104>>2]|0;do{if((ka|0)==0){pa=na;qa=oa}else{if((a[ka+81|0]|0)==0){pa=na;qa=oa+U|0;break}else{pa=na+1|0;qa=oa;break}}}while(0);ka=c[W+96>>2]|0;do{if((ka|0)==0){ra=pa;sa=qa}else{if((a[ka+81|0]|0)==0){ra=pa;sa=qa+U|0;break}else{ra=pa+1|0;sa=qa;break}}}while(0);ka=ow(e,ja)|0;if((ka|0)==0){fa=sa;ga=ra;break}else{ha=sa;ia=ra;ja=ka}}}ja=vx(e,ca)|0;if((ja|0)==0){Y=ea;Z=fa;_=ga;break}else{$=ea;aa=fa;ba=ga;ca=ja}}}if((a[(c[R>>2]|0)+113|0]&8)==0){ta=0}else{ta=Yk(e)|0}ca=Y+Z|0;if((ca|0)==0){break}ba=Z+_+ta+(Lw(e)|0)|0;aa=jk(ba*40|0)|0;$=aa;U=jk(ca*40|0)|0;ja=U;ia=ux(e)|0;if((ia|0)==0){ua=-2147483647.0;va=-2147483647.0;wa=2147483647.0;xa=2147483647.0;ya=$}else{ha=(V|0)==0;ka=N|0;W=N+8|0;za=M|0;Aa=M+8|0;Ba=-2147483647.0;Ca=-2147483647.0;Da=2147483647.0;Ea=2147483647.0;Fa=$;Ga=ja;Ha=ia;while(1){ia=(a[214952]|0)==0;Ia=Ha+8|0;Ja=c[Ia>>2]|0;if(ia){Ka=+h[Ja+32>>3]*72.0;h[Fa+16>>3]=Ka;La=+h[(c[Ia>>2]|0)+40>>3]*72.0;h[Fa+24>>3]=La;Na=Ka;Oa=La}else{La=+h[Ja+40>>3]*72.0;h[Fa+16>>3]=La;Ka=+h[(c[Ia>>2]|0)+32>>3]*72.0;h[Fa+24>>3]=Ka;Na=La;Oa=Ka}Ja=Fa;Pa=(c[Ia>>2]|0)+16|0;c[Ja>>2]=c[Pa>>2];c[Ja+4>>2]=c[Pa+4>>2];c[Ja+8>>2]=c[Pa+8>>2];c[Ja+12>>2]=c[Pa+12>>2];Pa=Fa|0;Ka=+h[Pa>>3]-Na*.5;h[Pa>>3]=Ka;Pa=Fa+8|0;La=+h[Pa>>3]-Oa*.5;h[Pa>>3]=La;Qa=Ea<Ka?Ea:Ka;Ra=Da<La?Da:La;Sa=Na+Ka;Ka=Oa+La;La=Ca>Sa?Ca:Sa;Sa=Ba>Ka?Ba:Ka;Pa=c[(c[Ia>>2]|0)+108>>2]|0;do{if((Pa|0)==0){Ta=Ga;Ua=Fa;Va=Qa;Wa=Ra;Xa=La;Ya=Sa}else{if((a[Pa+81|0]|0)==0){if(ia){Ia=Ga;Ja=Pa+24|0;c[Ia>>2]=c[Ja>>2];c[Ia+4>>2]=c[Ja+4>>2];c[Ia+8>>2]=c[Ja+8>>2];c[Ia+12>>2]=c[Ja+12>>2]}else{h[Ga>>3]=+h[Pa+32>>3];h[Ga+8>>3]=+h[Pa+24>>3]}c[Ga+32>>2]=Pa;a[Ga+36|0]=0;c[Fa+32>>2]=Ga;Ta=Ga+40|0;Ua=Fa;Va=Qa;Wa=Ra;Xa=La;Ya=Sa;break}else{Ja=Fa+40|0;Ia=Pa+24|0;if(ia){Ka=+h[Ia>>3];h[Fa+56>>3]=Ka;Za=+h[Pa+32>>3];h[Fa+64>>3]=Za;_a=Ka;$a=Za}else{Za=+h[Pa+32>>3];h[Fa+56>>3]=Za;Ka=+h[Ia>>3];h[Fa+64>>3]=Ka;_a=Za;$a=Ka}Ia=Ja;ab=Pa+56|0;c[Ia>>2]=c[ab>>2];c[Ia+4>>2]=c[ab+4>>2];c[Ia+8>>2]=c[ab+8>>2];c[Ia+12>>2]=c[ab+12>>2];ab=Ja|0;Ka=+h[ab>>3]-_a*.5;h[ab>>3]=Ka;ab=Fa+48|0;Za=+h[ab>>3]-$a*.5;h[ab>>3]=Za;bb=_a+Ka;cb=$a+Za;Ta=Ga;Ua=Ja;Va=Qa<Ka?Qa:Ka;Wa=Ra<Za?Ra:Za;Xa=La>bb?La:bb;Ya=Sa>cb?Sa:cb;break}}}while(0);Pa=Ua+40|0;ia=mw(e,Ha)|0;if((ia|0)==0){db=Ya;eb=Xa;fb=Wa;gb=Va;hb=Pa;ib=Ta}else{Sa=Ya;La=Xa;Ra=Wa;Qa=Va;Ja=Pa;Pa=Ta;ab=ia;while(1){ia=ab+8|0;Ia=c[ia>>2]|0;jb=c[Ia+96>>2]|0;if((jb|0)==0){kb=Pa;lb=Ja;mb=Qa;ob=Ra;pb=La;qb=Sa;rb=Ia}else{do{if((a[jb+81|0]|0)==0){if(ha){sb=Pa;tb=Qa;ub=Ra;vb=La;wb=Sa;break}mm(M,e,ab);cb=+h[za>>3];bb=+h[Aa>>3];vF(Ja+16|0,0,16)|0;h[Ja>>3]=cb;h[Ja+8>>3]=bb;if((a[214952]|0)==0){Ia=Pa;xb=jb+24|0;c[Ia>>2]=c[xb>>2];c[Ia+4>>2]=c[xb+4>>2];c[Ia+8>>2]=c[xb+8>>2];c[Ia+12>>2]=c[xb+12>>2]}else{h[Pa>>3]=+h[jb+32>>3];h[Pa+8>>3]=+h[jb+24>>3]}c[Pa+32>>2]=jb;a[Pa+36|0]=0;c[Ja+32>>2]=Pa;sb=Pa+40|0;tb=Qa;ub=Ra;vb=La;wb=Sa}else{xb=jb+24|0;if((a[214952]|0)==0){bb=+h[xb>>3];h[Ja+16>>3]=bb;cb=+h[jb+32>>3];h[Ja+24>>3]=cb;yb=bb;zb=cb}else{cb=+h[jb+32>>3];h[Ja+16>>3]=cb;bb=+h[xb>>3];h[Ja+24>>3]=bb;yb=cb;zb=bb}xb=Ja;Ia=jb+56|0;c[xb>>2]=c[Ia>>2];c[xb+4>>2]=c[Ia+4>>2];c[xb+8>>2]=c[Ia+8>>2];c[xb+12>>2]=c[Ia+12>>2];Ia=Ja|0;bb=+h[Ia>>3]-yb*.5;h[Ia>>3]=bb;Ia=Ja+8|0;cb=+h[Ia>>3]-zb*.5;h[Ia>>3]=cb;Za=yb+bb;Ka=zb+cb;sb=Pa;tb=Qa<bb?Qa:bb;ub=Ra<cb?Ra:cb;vb=La>Za?La:Za;wb=Sa>Ka?Sa:Ka}}while(0);kb=sb;lb=Ja+40|0;mb=tb;ob=ub;pb=vb;qb=wb;rb=c[ia>>2]|0}jb=c[rb+104>>2]|0;if((jb|0)==0){Ab=kb;Bb=lb;Cb=mb;Db=ob;Eb=pb;Fb=qb;Gb=rb}else{do{if((a[jb+81|0]|0)==0){if(ha){Hb=kb;Ib=mb;Jb=ob;Kb=pb;Mb=qb;break}Ia=om(ab)|0;do{if((Ia|0)==0){Nb=0.0;Ob=0.0}else{xb=c[Ia>>2]|0;if((c[xb+8>>2]|0)==0){Pb=c[xb>>2]|0;Nb=+h[Pb>>3];Ob=+h[Pb+8>>3];break}else{Nb=+h[xb+16>>3];Ob=+h[xb+24>>3];break}}}while(0);vF(lb+16|0,0,16)|0;h[lb>>3]=Nb;h[lb+8>>3]=Ob;if((a[214952]|0)==0){Ia=kb;xb=jb+24|0;c[Ia>>2]=c[xb>>2];c[Ia+4>>2]=c[xb+4>>2];c[Ia+8>>2]=c[xb+8>>2];c[Ia+12>>2]=c[xb+12>>2]}else{h[kb>>3]=+h[jb+32>>3];h[kb+8>>3]=+h[jb+24>>3]}c[kb+32>>2]=jb;a[kb+36|0]=0;c[lb+32>>2]=kb;Hb=kb+40|0;Ib=mb;Jb=ob;Kb=pb;Mb=qb}else{xb=jb+24|0;if((a[214952]|0)==0){Ka=+h[xb>>3];h[lb+16>>3]=Ka;Za=+h[jb+32>>3];h[lb+24>>3]=Za;Qb=Ka;Rb=Za}else{Za=+h[jb+32>>3];h[lb+16>>3]=Za;Ka=+h[xb>>3];h[lb+24>>3]=Ka;Qb=Za;Rb=Ka}xb=lb;Ia=jb+56|0;c[xb>>2]=c[Ia>>2];c[xb+4>>2]=c[Ia+4>>2];c[xb+8>>2]=c[Ia+8>>2];c[xb+12>>2]=c[Ia+12>>2];Ia=lb|0;Ka=+h[Ia>>3]-Qb*.5;h[Ia>>3]=Ka;Ia=lb+8|0;Za=+h[Ia>>3]-Rb*.5;h[Ia>>3]=Za;cb=Qb+Ka;bb=Rb+Za;Hb=kb;Ib=mb<Ka?mb:Ka;Jb=ob<Za?ob:Za;Kb=pb>cb?pb:cb;Mb=qb>bb?qb:bb}}while(0);Ab=Hb;Bb=lb+40|0;Cb=Ib;Db=Jb;Eb=Kb;Fb=Mb;Gb=c[ia>>2]|0}jb=c[Gb+100>>2]|0;if((jb|0)==0){Sb=Ab;Tb=Bb;Ub=Cb;Vb=Db;Wb=Eb;Xb=Fb;Yb=Gb}else{do{if((a[jb+81|0]|0)==0){if(ha){Zb=Ab;_b=Cb;$b=Db;ac=Eb;bc=Fb;break}Ia=om(ab)|0;do{if((Ia|0)==0){cc=0.0;dc=0.0}else{xb=(c[Ia+4>>2]|0)-1|0;Pb=c[Ia>>2]|0;if((c[Pb+(xb*48|0)+12>>2]|0)==0){ec=(c[Pb+(xb*48|0)+4>>2]|0)-1|0;fc=c[Pb+(xb*48|0)>>2]|0;cc=+h[fc+(ec<<4)>>3];dc=+h[fc+(ec<<4)+8>>3];break}else{cc=+h[Pb+(xb*48|0)+32>>3];dc=+h[Pb+(xb*48|0)+40>>3];break}}}while(0);vF(Bb+16|0,0,16)|0;h[Bb>>3]=cc;h[Bb+8>>3]=dc;if((a[214952]|0)==0){Ia=Ab;xb=jb+24|0;c[Ia>>2]=c[xb>>2];c[Ia+4>>2]=c[xb+4>>2];c[Ia+8>>2]=c[xb+8>>2];c[Ia+12>>2]=c[xb+12>>2]}else{h[Ab>>3]=+h[jb+32>>3];h[Ab+8>>3]=+h[jb+24>>3]}c[Ab+32>>2]=jb;a[Ab+36|0]=0;c[Bb+32>>2]=Ab;Zb=Ab+40|0;_b=Cb;$b=Db;ac=Eb;bc=Fb}else{xb=jb+24|0;if((a[214952]|0)==0){bb=+h[xb>>3];h[Bb+16>>3]=bb;cb=+h[jb+32>>3];h[Bb+24>>3]=cb;hc=bb;ic=cb}else{cb=+h[jb+32>>3];h[Bb+16>>3]=cb;bb=+h[xb>>3];h[Bb+24>>3]=bb;hc=cb;ic=bb}xb=Bb;Ia=jb+56|0;c[xb>>2]=c[Ia>>2];c[xb+4>>2]=c[Ia+4>>2];c[xb+8>>2]=c[Ia+8>>2];c[xb+12>>2]=c[Ia+12>>2];Ia=Bb|0;bb=+h[Ia>>3]-hc*.5;h[Ia>>3]=bb;Ia=Bb+8|0;cb=+h[Ia>>3]-ic*.5;h[Ia>>3]=cb;Za=hc+bb;Ka=ic+cb;Zb=Ab;_b=Cb<bb?Cb:bb;$b=Db<cb?Db:cb;ac=Eb>Za?Eb:Za;bc=Fb>Ka?Fb:Ka}}while(0);Sb=Zb;Tb=Bb+40|0;Ub=_b;Vb=$b;Wb=ac;Xb=bc;Yb=c[ia>>2]|0}jb=c[Yb+108>>2]|0;if((jb|0)==0){jc=Sb;kc=Tb;lc=Ub;mc=Vb;nc=Wb;oc=Xb}else{do{if((a[jb+81|0]|0)==0){if(ha){pc=Sb;qc=Ub;rc=Vb;sc=Wb;tc=Xb;break}mm(N,e,ab);Ka=+h[ka>>3];Za=+h[W>>3];vF(Tb+16|0,0,16)|0;h[Tb>>3]=Ka;h[Tb+8>>3]=Za;if((a[214952]|0)==0){Ia=Sb;xb=jb+24|0;c[Ia>>2]=c[xb>>2];c[Ia+4>>2]=c[xb+4>>2];c[Ia+8>>2]=c[xb+8>>2];c[Ia+12>>2]=c[xb+12>>2]}else{h[Sb>>3]=+h[jb+32>>3];h[Sb+8>>3]=+h[jb+24>>3]}c[Sb+32>>2]=jb;a[Sb+36|0]=0;c[Tb+32>>2]=Sb;pc=Sb+40|0;qc=Ub;rc=Vb;sc=Wb;tc=Xb}else{xb=jb+24|0;if((a[214952]|0)==0){Za=+h[xb>>3];h[Tb+16>>3]=Za;Ka=+h[jb+32>>3];h[Tb+24>>3]=Ka;uc=Za;vc=Ka}else{Ka=+h[jb+32>>3];h[Tb+16>>3]=Ka;Za=+h[xb>>3];h[Tb+24>>3]=Za;uc=Ka;vc=Za}xb=Tb;Ia=jb+56|0;c[xb>>2]=c[Ia>>2];c[xb+4>>2]=c[Ia+4>>2];c[xb+8>>2]=c[Ia+8>>2];c[xb+12>>2]=c[Ia+12>>2];Ia=Tb|0;Za=+h[Ia>>3]-uc*.5;h[Ia>>3]=Za;Ia=Tb+8|0;Ka=+h[Ia>>3]-vc*.5;h[Ia>>3]=Ka;cb=uc+Za;bb=vc+Ka;pc=Sb;qc=Ub<Za?Ub:Za;rc=Vb<Ka?Vb:Ka;sc=Wb>cb?Wb:cb;tc=Xb>bb?Xb:bb}}while(0);jc=pc;kc=Tb+40|0;lc=qc;mc=rc;nc=sc;oc=tc}jb=ow(e,ab)|0;if((jb|0)==0){db=oc;eb=nc;fb=mc;gb=lc;hb=kc;ib=jc;break}else{Sa=oc;La=nc;Ra=mc;Qa=lc;Ja=kc;Pa=jc;ab=jb}}}ab=vx(e,Ha)|0;if((ab|0)==0){ua=db;va=eb;wa=fb;xa=gb;ya=hb;break}else{Ba=db;Ca=eb;Da=fb;Ea=gb;Fa=hb;Ga=ib;Ha=ab}}}if((ta|0)==0){wc=xa;xc=wa;yc=va;zc=ua}else{Ha=O|0;h[Ha>>3]=xa;Ga=O+8|0;h[Ga>>3]=wa;Fa=O+16|0;h[Fa>>3]=va;W=O+24|0;h[W>>3]=ua;c[O+32>>2]=ya;Zk(P,e,O);c[S>>2]=c[T>>2];c[S+4>>2]=c[T+4>>2];c[S+8>>2]=c[T+8>>2];c[S+12>>2]=c[T+12>>2];c[S+16>>2]=c[T+16>>2];c[S+20>>2]=c[T+20>>2];c[S+24>>2]=c[T+24>>2];c[S+28>>2]=c[T+28>>2];c[S+32>>2]=c[T+32>>2];c[S+36>>2]=c[T+36>>2];wc=+h[Ha>>3];xc=+h[Ga>>3];yc=+h[Fa>>3];zc=+h[W>>3]}W=L+32|0;a[W]=Jm(e|0,Wv(e,0,114920,0)|0,1)|0;Fa=L|0;h[Fa>>3]=wc;Ga=L+8|0;h[Ga>>3]=xc;Ha=L+16|0;h[Ha>>3]=yc;ka=L+24|0;h[ka>>3]=zc;Mz($,ba,ja,ca,L)|0;do{if((a[213992]|0)==0){X=118}else{ha=c[o>>2]|0;Aa=d[W]|0;Ea=+h[Fa>>3];Da=+h[Ga>>3];Ca=+h[Ha>>3];Ba=+h[ka>>3];gc(ha|0,96552,(Ac=i,i=i+56|0,c[Ac>>2]=ba,c[Ac+8>>2]=ca,c[Ac+16>>2]=Aa,h[Ac+24>>3]=Ea,h[Ac+32>>3]=Da,h[Ac+40>>3]=Ca,h[Ac+48>>3]=Ba,Ac)|0)|0;i=Ac;if((d[213992]|0)>>>0<2>>>0){X=118;break}Ma(91224,8,1,ha|0)|0;if((ba|0)>0){Aa=$;za=0;while(1){ab=c[Aa+32>>2]|0;Ba=+h[Aa>>3];Ca=+h[Aa+8>>3];Da=+h[Aa+16>>3];Ea=+h[Aa+24>>3];if((ab|0)==0){Bc=213304}else{Bc=c[c[ab+32>>2]>>2]|0}gc(ha|0,86024,(Ac=i,i=i+56|0,c[Ac>>2]=za,h[Ac+8>>3]=Ba,h[Ac+16>>3]=Ca,h[Ac+24>>3]=Da,h[Ac+32>>3]=Ea,c[Ac+40>>2]=ab,c[Ac+48>>2]=Bc,Ac)|0)|0;i=Ac;ab=za+1|0;if((ab|0)<(ba|0)){Aa=Aa+40|0;za=ab}else{break}}}Ma(167600,8,1,ha|0)|0;if((ca|0)>0){Cc=ja;Dc=0}else{Ec=0;break}while(1){za=d[Cc+36|0]|0;Ea=+h[Cc+16>>3];Da=+h[Cc+24>>3];Ca=+h[Cc>>3];Ba=+h[Cc+8>>3];Aa=c[c[Cc+32>>2]>>2]|0;gc(ha|0,163416,(Ac=i,i=i+64|0,c[Ac>>2]=Dc,c[Ac+8>>2]=Cc,c[Ac+16>>2]=za,h[Ac+24>>3]=Ea,h[Ac+32>>3]=Da,h[Ac+40>>3]=Ca,h[Ac+48>>3]=Ba,c[Ac+56>>2]=Aa,Ac)|0)|0;i=Ac;Aa=Dc+1|0;if((Aa|0)<(ca|0)){Cc=Cc+40|0;Dc=Aa}else{X=118;break}}}}while(0);do{if((X|0)==118){if((ca|0)>0){Fc=0;Gc=0;Hc=ja}else{Ec=0;break}while(1){if((a[Hc+36|0]|0)==0){Ic=Gc}else{ba=c[Hc+32>>2]|0;a[ba+81|0]=1;Ba=+h[Hc+24>>3]+ +h[Hc+8>>3]*.5;h[ba+56>>3]=+h[Hc+16>>3]+ +h[Hc>>3]*.5;h[ba+64>>3]=Ba;_m(e,ba);Ic=Gc+1|0}ba=Fc+1|0;if((ba|0)<(ca|0)){Fc=ba;Gc=Ic;Hc=Hc+40|0}else{Ec=Ic;break}}}}while(0);do{if((a[213992]|0)==0){if((Ec|0)==(ca|0)){break}Fv(0,102304,(Ac=i,i=i+16|0,c[Ac>>2]=Ec,c[Ac+8>>2]=ca,Ac)|0)|0;i=Ac}else{gc(c[o>>2]|0,108e3,(Ac=i,i=i+16|0,c[Ac>>2]=Ec,c[Ac+8>>2]=ca,Ac)|0)|0;i=Ac}}while(0);eF(aa);eF(U)}}while(0);Ec=c[R>>2]|0;Ic=c[Ec+12>>2]|0;do{if((Ic|0)==0){Jc=0.0;Kc=0.0}else{if((a[Ic+81|0]|0)!=0){Jc=0.0;Kc=0.0;break}zc=+h[Ic+24>>3]+16.0;yc=+h[Ic+32>>3]+8.0;Hc=(a[Ec+263|0]&1)!=0;if((a[214952]|0)!=0){if(Hc){Gc=Ec+32|0;h[Gc>>3]=yc+ +h[Gc>>3]}else{Gc=Ec+16|0;h[Gc>>3]=+h[Gc>>3]-yc}Gc=c[R>>2]|0;Fc=Gc+24|0;xc=+h[Fc>>3];wc=+h[Gc+40>>3]-xc;if(zc<=wc){Jc=zc;Kc=yc;break}ua=(zc-wc)*.5;h[Fc>>3]=xc-ua;Fc=(c[R>>2]|0)+40|0;h[Fc>>3]=ua+ +h[Fc>>3];Jc=zc;Kc=yc;break}Fc=(c[53548]|0)==0;do{if(Hc){if(Fc){Gc=Ec+40|0;h[Gc>>3]=yc+ +h[Gc>>3];break}else{Gc=Ec+24|0;h[Gc>>3]=+h[Gc>>3]-yc;break}}else{if(Fc){Gc=Ec+24|0;h[Gc>>3]=+h[Gc>>3]-yc;break}else{Gc=Ec+40|0;h[Gc>>3]=yc+ +h[Gc>>3];break}}}while(0);Fc=c[R>>2]|0;Hc=Fc+16|0;ua=+h[Hc>>3];xc=+h[Fc+32>>3]-ua;if(zc<=xc){Jc=zc;Kc=yc;break}wc=(zc-xc)*.5;h[Hc>>3]=ua-wc;Hc=(c[R>>2]|0)+32|0;h[Hc>>3]=wc+ +h[Hc>>3];Jc=zc;Kc=yc}}while(0);do{if((f|0)!=0){Ec=c[53548]|0;if((Ec|0)==0){Ic=(c[R>>2]|0)+16|0;c[53562]=c[Ic>>2];c[53563]=c[Ic+4>>2];c[53564]=c[Ic+8>>2];c[53565]=c[Ic+12>>2]}else if((Ec|0)==1){Ic=c[R>>2]|0;wc=+h[Ic+16>>3];h[26781]=-0.0- +h[Ic+40>>3];h[26782]=wc}else if((Ec|0)==2){Ic=c[R>>2]|0;wc=-0.0- +h[Ic+40>>3];h[26781]=+h[Ic+16>>3];h[26782]=wc}else if((Ec|0)==3){Ic=c[R>>2]|0;wc=+h[Ic+16>>3];h[26781]=+h[Ic+24>>3];h[26782]=wc}Ic=J;Hc=K;if(+h[26781]==0.0){if(!(+h[26782]!=0.0|(Ec|0)!=0)){break}}Ec=ux(e)|0;if((Ec|0)!=0){Fc=H;U=I;aa=H|0;Gc=H+8|0;X=y;Dc=z;Cc=A;Bc=B;L=C;T=D;S=E;O=s;P=t;ya=s|0;ta=s+8|0;ib=u;hb=v;jc=u|0;kc=u+8|0;Tb=w;pc=x;Sb=w|0;N=w+8|0;Yb=j;Bb=k;Zb=j|0;Ab=j+8|0;Gb=l;lb=m;Hb=l|0;kb=l+8|0;rb=n;sb=p;M=n|0;Ta=n+8|0;Ua=q;V=r;_=q|0;Z=q+8|0;Y=F;ga=G;fa=F|0;ea=F+8|0;ra=Ec;do{if((c[53548]|0)==0){Lc=0}else{vn(ra,0);Lc=(c[53548]|0)*90|0}Ec=ra+8|0;sa=c[Ec>>2]|0;qa=sa+16|0;wc=+h[sa+24>>3];h[aa>>3]=+h[qa>>3];h[Gc>>3]=wc;si(I,H,Lc);c[Fc>>2]=c[U>>2];c[Fc+4>>2]=c[U+4>>2];c[Fc+8>>2]=c[U+8>>2];c[Fc+12>>2]=c[U+12>>2];h[aa>>3]=+h[aa>>3]- +h[26781];h[Gc>>3]=+h[Gc>>3]- +h[26782];c[Ic>>2]=c[Fc>>2];c[Ic+4>>2]=c[Fc+4>>2];c[Ic+8>>2]=c[Fc+8>>2];c[Ic+12>>2]=c[Fc+12>>2];sa=qa;c[sa>>2]=c[Ic>>2];c[sa+4>>2]=c[Ic+4>>2];c[sa+8>>2]=c[Ic+8>>2];c[sa+12>>2]=c[Ic+12>>2];sa=c[(c[Ec>>2]|0)+108>>2]|0;if((sa|0)!=0){Ec=sa+56|0;wc=+h[sa+64>>3];h[fa>>3]=+h[Ec>>3];h[ea>>3]=wc;si(G,F,(c[53548]|0)*90|0);c[Y>>2]=c[ga>>2];c[Y+4>>2]=c[ga+4>>2];c[Y+8>>2]=c[ga+8>>2];c[Y+12>>2]=c[ga+12>>2];h[fa>>3]=+h[fa>>3]- +h[26781];h[ea>>3]=+h[ea>>3]- +h[26782];c[Hc>>2]=c[Y>>2];c[Hc+4>>2]=c[Y+4>>2];c[Hc+8>>2]=c[Y+8>>2];c[Hc+12>>2]=c[Y+12>>2];sa=Ec;c[sa>>2]=c[Hc>>2];c[sa+4>>2]=c[Hc+4>>2];c[sa+8>>2]=c[Hc+8>>2];c[sa+12>>2]=c[Hc+12>>2]}do{if((c[53522]|0)==1){sa=mw(e,ra)|0;if((sa|0)==0){break}else{Mc=sa}do{sa=Mc+8|0;Ec=c[sa>>2]|0;qa=c[Ec+8>>2]|0;do{if((qa|0)==0){if((a[215376]|0)!=0){break}if((a[Ec+112|0]|0)==6){break}pa=Mc;oa=$w(c[((c[pa>>2]&3|0)==3?Mc:Mc+32|0)+28>>2]|0)|0;na=$w(c[((c[pa>>2]&3|0)==2?Mc:Mc-32|0)+28>>2]|0)|0;Fv(1,126784,(Ac=i,i=i+16|0,c[Ac>>2]=oa,c[Ac+8>>2]=na,Ac)|0)|0;i=Ac}else{if((c[qa+4>>2]|0)>0){na=0;oa=qa;while(1){pa=c[oa>>2]|0;ma=c[pa+(na*48|0)>>2]|0;la=c[pa+(na*48|0)+4>>2]|0;da=c[pa+(na*48|0)+8>>2]|0;ca=c[pa+(na*48|0)+12>>2]|0;if((la|0)>0){pa=0;do{ja=ma+(pa<<4)|0;wc=+h[ma+(pa<<4)+8>>3];h[Sb>>3]=+h[ja>>3];h[N>>3]=wc;si(x,w,(c[53548]|0)*90|0);c[Tb>>2]=c[pc>>2];c[Tb+4>>2]=c[pc+4>>2];c[Tb+8>>2]=c[pc+8>>2];c[Tb+12>>2]=c[pc+12>>2];h[Sb>>3]=+h[Sb>>3]- +h[26781];h[N>>3]=+h[N>>3]- +h[26782];c[X>>2]=c[Tb>>2];c[X+4>>2]=c[Tb+4>>2];c[X+8>>2]=c[Tb+8>>2];c[X+12>>2]=c[Tb+12>>2];ba=ja;c[ba>>2]=c[X>>2];c[ba+4>>2]=c[X+4>>2];c[ba+8>>2]=c[X+8>>2];c[ba+12>>2]=c[X+12>>2];pa=pa+1|0;}while((pa|0)<(la|0))}if((da|0)!=0){la=c[c[(c[sa>>2]|0)+8>>2]>>2]|0;pa=la+(na*48|0)+16|0;wc=+h[la+(na*48|0)+24>>3];h[jc>>3]=+h[pa>>3];h[kc>>3]=wc;si(v,u,(c[53548]|0)*90|0);c[ib>>2]=c[hb>>2];c[ib+4>>2]=c[hb+4>>2];c[ib+8>>2]=c[hb+8>>2];c[ib+12>>2]=c[hb+12>>2];h[jc>>3]=+h[jc>>3]- +h[26781];h[kc>>3]=+h[kc>>3]- +h[26782];c[Dc>>2]=c[ib>>2];c[Dc+4>>2]=c[ib+4>>2];c[Dc+8>>2]=c[ib+8>>2];c[Dc+12>>2]=c[ib+12>>2];la=pa;c[la>>2]=c[Dc>>2];c[la+4>>2]=c[Dc+4>>2];c[la+8>>2]=c[Dc+8>>2];c[la+12>>2]=c[Dc+12>>2]}if((ca|0)!=0){la=c[c[(c[sa>>2]|0)+8>>2]>>2]|0;pa=la+(na*48|0)+32|0;wc=+h[la+(na*48|0)+40>>3];h[ya>>3]=+h[pa>>3];h[ta>>3]=wc;si(t,s,(c[53548]|0)*90|0);c[O>>2]=c[P>>2];c[O+4>>2]=c[P+4>>2];c[O+8>>2]=c[P+8>>2];c[O+12>>2]=c[P+12>>2];h[ya>>3]=+h[ya>>3]- +h[26781];h[ta>>3]=+h[ta>>3]- +h[26782];c[Cc>>2]=c[O>>2];c[Cc+4>>2]=c[O+4>>2];c[Cc+8>>2]=c[O+8>>2];c[Cc+12>>2]=c[O+12>>2];la=pa;c[la>>2]=c[Cc>>2];c[la+4>>2]=c[Cc+4>>2];c[la+8>>2]=c[Cc+8>>2];c[la+12>>2]=c[Cc+12>>2]}la=na+1|0;pa=c[sa>>2]|0;ma=c[pa+8>>2]|0;if((la|0)<(c[ma+4>>2]|0)){na=la;oa=ma}else{Nc=pa;break}}}else{Nc=Ec}oa=c[Nc+96>>2]|0;if((oa|0)==0){Oc=Nc}else{na=oa+56|0;wc=+h[oa+64>>3];h[_>>3]=+h[na>>3];h[Z>>3]=wc;si(r,q,(c[53548]|0)*90|0);c[Ua>>2]=c[V>>2];c[Ua+4>>2]=c[V+4>>2];c[Ua+8>>2]=c[V+8>>2];c[Ua+12>>2]=c[V+12>>2];h[_>>3]=+h[_>>3]- +h[26781];h[Z>>3]=+h[Z>>3]- +h[26782];c[Bc>>2]=c[Ua>>2];c[Bc+4>>2]=c[Ua+4>>2];c[Bc+8>>2]=c[Ua+8>>2];c[Bc+12>>2]=c[Ua+12>>2];oa=na;c[oa>>2]=c[Bc>>2];c[oa+4>>2]=c[Bc+4>>2];c[oa+8>>2]=c[Bc+8>>2];c[oa+12>>2]=c[Bc+12>>2];Oc=c[sa>>2]|0}oa=c[Oc+108>>2]|0;if((oa|0)==0){Pc=Oc}else{na=oa+56|0;wc=+h[oa+64>>3];h[M>>3]=+h[na>>3];h[Ta>>3]=wc;si(p,n,(c[53548]|0)*90|0);c[rb>>2]=c[sb>>2];c[rb+4>>2]=c[sb+4>>2];c[rb+8>>2]=c[sb+8>>2];c[rb+12>>2]=c[sb+12>>2];h[M>>3]=+h[M>>3]- +h[26781];h[Ta>>3]=+h[Ta>>3]- +h[26782];c[L>>2]=c[rb>>2];c[L+4>>2]=c[rb+4>>2];c[L+8>>2]=c[rb+8>>2];c[L+12>>2]=c[rb+12>>2];oa=na;c[oa>>2]=c[L>>2];c[oa+4>>2]=c[L+4>>2];c[oa+8>>2]=c[L+8>>2];c[oa+12>>2]=c[L+12>>2];Pc=c[sa>>2]|0}oa=c[Pc+100>>2]|0;if((oa|0)==0){Qc=Pc}else{na=oa+56|0;wc=+h[oa+64>>3];h[Hb>>3]=+h[na>>3];h[kb>>3]=wc;si(m,l,(c[53548]|0)*90|0);c[Gb>>2]=c[lb>>2];c[Gb+4>>2]=c[lb+4>>2];c[Gb+8>>2]=c[lb+8>>2];c[Gb+12>>2]=c[lb+12>>2];h[Hb>>3]=+h[Hb>>3]- +h[26781];h[kb>>3]=+h[kb>>3]- +h[26782];c[T>>2]=c[Gb>>2];c[T+4>>2]=c[Gb+4>>2];c[T+8>>2]=c[Gb+8>>2];c[T+12>>2]=c[Gb+12>>2];oa=na;c[oa>>2]=c[T>>2];c[oa+4>>2]=c[T+4>>2];c[oa+8>>2]=c[T+8>>2];c[oa+12>>2]=c[T+12>>2];Qc=c[sa>>2]|0}oa=c[Qc+104>>2]|0;if((oa|0)==0){break}na=oa+56|0;wc=+h[oa+64>>3];h[Zb>>3]=+h[na>>3];h[Ab>>3]=wc;si(k,j,(c[53548]|0)*90|0);c[Yb>>2]=c[Bb>>2];c[Yb+4>>2]=c[Bb+4>>2];c[Yb+8>>2]=c[Bb+8>>2];c[Yb+12>>2]=c[Bb+12>>2];h[Zb>>3]=+h[Zb>>3]- +h[26781];h[Ab>>3]=+h[Ab>>3]- +h[26782];c[S>>2]=c[Yb>>2];c[S+4>>2]=c[Yb+4>>2];c[S+8>>2]=c[Yb+8>>2];c[S+12>>2]=c[Yb+12>>2];oa=na;c[oa>>2]=c[S>>2];c[oa+4>>2]=c[S+4>>2];c[oa+8>>2]=c[S+8>>2];c[oa+12>>2]=c[S+12>>2]}}while(0);Mc=ow(e,Mc)|0;}while((Mc|0)!=0)}}while(0);ra=vx(e,ra)|0;}while((ra|0)!=0)}Tk(e,c[(c[R>>2]|0)+116>>2]&3)}}while(0);e=c[R>>2]|0;Mc=c[e+12>>2]|0;do{if((Mc|0)!=0){if((a[Mc+81|0]|0)!=0){break}j=a[e+263|0]|0;k=j<<24>>24;do{if((k&4|0)==0){yc=+h[e+16>>3];if((k&2|0)==0){Rc=(yc+ +h[e+32>>3])*.5;break}else{Rc=Jc*.5+yc;break}}else{Rc=+h[e+32>>3]-Jc*.5}}while(0);if((j&1)==0){Sc=Kc*.5+ +h[e+24>>3]}else{Sc=+h[e+40>>3]-Kc*.5}h[Mc+56>>3]=Rc;h[Mc+64>>3]=Sc;a[(c[(c[R>>2]|0)+12>>2]|0)+81|0]=1}}while(0);if((c[53530]|0)==0){i=g;return}R=Q|0;if((a[214952]|0)==0){Sc=+h[26782];Rc=+h[26781];nb(R|0,155504,(Ac=i,i=i+48|0,h[Ac>>3]=Sc,h[Ac+8>>3]=Rc,h[Ac+16>>3]=Sc,h[Ac+24>>3]=Rc,h[Ac+32>>3]=-0.0-Rc,h[Ac+40>>3]=-0.0-Sc,Ac)|0)|0;i=Ac}else{Sc=+h[26781];Rc=+h[26782];nb(R|0,116976,(Ac=i,i=i+32|0,h[Ac>>3]=Sc,h[Ac+8>>3]=Rc,h[Ac+16>>3]=Sc,h[Ac+24>>3]=Rc,Ac)|0)|0;i=Ac}Ac=Lb(R|0)|0;c[c[53530]>>2]=Ac;i=g;return}function Vk(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0,m=0.0,n=0,o=0;d=b+8|0;do{if((Ix(b|0)|0)!=(b|0)){e=c[d>>2]|0;f=c[e+12>>2]|0;if((f|0)==0){break}if((a[f+81|0]|0)!=0){break}g=a[e+263|0]|0;if((g&1)==0){i=e+104|0;j=+h[e+16>>3]+ +h[e+96>>3]*.5}else{i=e+72|0;j=+h[e+32>>3]- +h[e+64>>3]*.5}k=+h[i>>3];l=g<<24>>24;do{if((l&4|0)==0){if((l&2|0)==0){m=(+h[e+24>>3]+ +h[e+40>>3])*.5;break}else{m=+h[e+40>>3]-k*.5;break}}else{m=k*.5+ +h[e+24>>3]}}while(0);h[f+56>>3]=j;h[f+64>>3]=m;a[(c[(c[d>>2]|0)+12>>2]|0)+81|0]=1}}while(0);i=c[d>>2]|0;if((c[i+172>>2]|0)<1){return}else{n=1;o=i}while(1){Vk(c[(c[o+176>>2]|0)+(n<<2)>>2]|0);i=c[d>>2]|0;if((n|0)<(c[i+172>>2]|0)){n=n+1|0;o=i}else{break}}return}function Wk(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0,p=0;d=b+8|0;do{if((Ix(b|0)|0)!=(b|0)){e=c[d>>2]|0;f=c[e+12>>2]|0;if((f|0)==0){break}if((a[f+81|0]|0)!=0){break}g=a[e+263|0]|0;if((g&1)==0){i=e+48|0;j=+h[e+24>>3]+ +h[e+56>>3]*.5}else{i=e+80|0;j=+h[e+40>>3]- +h[e+88>>3]*.5}k=+h[i>>3];l=g<<24>>24;do{if((l&4|0)==0){m=+h[e+16>>3];if((l&2|0)==0){n=(m+ +h[e+32>>3])*.5;break}else{n=k*.5+m;break}}else{n=+h[e+32>>3]-k*.5}}while(0);h[f+56>>3]=n;h[f+64>>3]=j;a[(c[(c[d>>2]|0)+12>>2]|0)+81|0]=1}}while(0);i=c[d>>2]|0;if((c[i+172>>2]|0)<1){return}else{o=1;p=i}while(1){Wk(c[(c[p+176>>2]|0)+(o<<2)>>2]|0);i=c[d>>2]|0;if((o|0)<(c[i+172>>2]|0)){o=o+1|0;p=i}else{break}}return}function Xk(a){a=a|0;Uk(a,1);return}function Yk(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=(Ix(b|0)|0)==(b|0);e=c[b+8>>2]|0;do{if(d){f=0}else{g=c[e+12>>2]|0;if((g|0)==0){f=0;break}f=(a[g+81|0]|0)!=0|0}}while(0);d=b+8|0;if((c[e+172>>2]|0)<1){h=f;return h|0}else{i=1;j=f;k=e}while(1){e=(Yk(c[(c[k+176>>2]|0)+(i<<2)>>2]|0)|0)+j|0;f=c[d>>2]|0;if((i|0)<(c[f+172>>2]|0)){i=i+1|0;j=e;k=f}else{h=e;break}}return h|0}function Zk(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0.0,D=0.0;g=i;i=i+40|0;j=f;f=i;i=i+40|0;tF(f,j,40)|0;j=g|0;l=e+8|0;m=c[l>>2]|0;if((c[m+172>>2]|0)>=1){n=f;o=j;p=1;q=m;while(1){Zk(j,c[(c[q+176>>2]|0)+(p<<2)>>2]|0,f);c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[n+16>>2]=c[o+16>>2];c[n+20>>2]=c[o+20>>2];c[n+24>>2]=c[o+24>>2];c[n+28>>2]=c[o+28>>2];c[n+32>>2]=c[o+32>>2];c[n+36>>2]=c[o+36>>2];m=c[l>>2]|0;if((p|0)<(c[m+172>>2]|0)){p=p+1|0;q=m}else{break}}}do{if((Ix(e|0)|0)!=(e|0)){q=c[(c[l>>2]|0)+12>>2]|0;if((q|0)==0){break}if((a[q+81|0]|0)==0){break}p=f+32|0;o=c[p>>2]|0;n=f|0;r=(c[k>>2]=d[n]|d[n+1|0]<<8|d[n+2|0]<<16|d[n+3|0]<<24,c[k+4>>2]=d[n+4|0]|d[n+5|0]<<8|d[n+6|0]<<16|d[n+7|0]<<24,+h[k>>3]);j=f+8|0;s=(c[k>>2]=d[j]|d[j+1|0]<<8|d[j+2|0]<<16|d[j+3|0]<<24,c[k+4>>2]=d[j+4|0]|d[j+5|0]<<8|d[j+6|0]<<16|d[j+7|0]<<24,+h[k>>3]);m=f+16|0;t=(c[k>>2]=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24,c[k+4>>2]=d[m+4|0]|d[m+5|0]<<8|d[m+6|0]<<16|d[m+7|0]<<24,+h[k>>3]);u=f+24|0;v=(c[k>>2]=d[u]|d[u+1|0]<<8|d[u+2|0]<<16|d[u+3|0]<<24,c[k+4>>2]=d[u+4|0]|d[u+5|0]<<8|d[u+6|0]<<16|d[u+7|0]<<24,+h[k>>3]);w=q+24|0;if((a[214952]|0)==0){x=+h[w>>3];h[o+16>>3]=x;y=+h[q+32>>3];h[o+24>>3]=y;z=x;A=y}else{y=+h[q+32>>3];h[o+16>>3]=y;x=+h[w>>3];h[o+24>>3]=x;z=y;A=x}w=o;B=q+56|0;c[w>>2]=c[B>>2];c[w+4>>2]=c[B+4>>2];c[w+8>>2]=c[B+8>>2];c[w+12>>2]=c[B+12>>2];B=o|0;x=+h[B>>3]-z*.5;h[B>>3]=x;B=o+8|0;y=+h[B>>3]-A*.5;h[B>>3]=y;C=z+x;D=A+y;h[n>>3]=r<x?r:x;h[j>>3]=s<y?s:y;h[m>>3]=t>C?t:C;h[u>>3]=v>D?v:D;c[p>>2]=o+40}}while(0);l=b;b=f;c[l>>2]=c[b>>2];c[l+4>>2]=c[b+4>>2];c[l+8>>2]=c[b+8>>2];c[l+12>>2]=c[b+12>>2];c[l+16>>2]=c[b+16>>2];c[l+20>>2]=c[b+20>>2];c[l+24>>2]=c[b+24>>2];c[l+28>>2]=c[b+28>>2];c[l+32>>2]=c[b+32>>2];c[l+36>>2]=c[b+36>>2];i=g;return}function _k(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;d=i;i=i+1136|0;e=d+1024|0;f=d+1104|0;g=d+1112|0;j=d+1120|0;k=d+1128|0;l=b|0;m=Sm(ew(l,116816)|0)|0;if((m|0)==0){n=$w(l)|0;Fv(0,155400,(o=i,i=i+8|0,c[o>>2]=n,o)|0)|0;i=o;i=d;return}n=d|0;l=c[53828]|0;if((l|0)==0){p=$g(173152,c[43330]|0)|0;c[53828]=p;q=p}else{q=l}l=Hc[c[q>>2]&63](q,m,512)|0;do{if((l|0)==0){q=Eb(m|0,107984)|0;if((q|0)==0){Fv(0,148208,(o=i,i=i+8|0,c[o>>2]=m,o)|0)|0;i=o;r=0;break}do{if((db(n|0,1024,q|0)|0)==0){s=16}else{p=0;t=0;while(1){u=ac(n|0,145064,(o=i,i=i+32|0,c[o>>2]=f,c[o+8>>2]=g,c[o+16>>2]=j,c[o+24>>2]=k,o)|0)|0;i=o;v=(u|0)==4?1:p;if((a[n]|0)==37){w=t}else{u=(Ua(n|0,142104)|0)==0;w=u?t:1}if((v|0)==0){x=w;y=0}else{if((w|0)==0){x=0;y=v}else{z=v;A=w&255;break}}if((db(n|0,1024,q|0)|0)==0){z=y;A=x&255;break}else{p=y;t=x}}if((z|0)==0){s=16;break}t=kk(64)|0;c[t+32>>2]=c[f>>2];p=t+36|0;c[p>>2]=c[g>>2];c[t+40>>2]=(c[j>>2]|0)-(c[f>>2]|0);c[p>>2]=(c[k>>2]|0)-(c[g>>2]|0);c[t+8>>2]=m;p=c[53652]|0;c[53652]=p+1;c[t+12>>2]=p;Xb(Ta(q|0)|0,e|0)|0;p=c[e+36>>2]|0;v=kk(p+1|0)|0;c[t+52>>2]=v;mc(q|0,0,0)|0;Nb(v|0,p|0,1,q|0)|0;a[v+p|0]=0;p=c[53828]|0;Hc[c[p>>2]&63](p,t,1)|0;a[t+16|0]=A;B=t}}while(0);if((s|0)==16){Fv(0,138968,(o=i,i=i+8|0,c[o>>2]=m,o)|0)|0;i=o;B=0}Ha(q|0)|0;r=B}else{r=l}}while(0);if((r|0)==0){i=d;return}l=c[r+40>>2]|0;B=c[r+44>>2]|0;o=b+8|0;h[(c[o>>2]|0)+32>>3]=+(l|0)/72.0;h[(c[o>>2]|0)+40>>3]=+(B|0)/72.0;b=jk(12)|0;c[(c[o>>2]|0)+12>>2]=b;c[b>>2]=c[r+12>>2];c[b+4>>2]=((l|0)/-2|0)-(c[r+32>>2]|0);c[b+8>>2]=((B|0)/-2|0)-(c[r+36>>2]|0);i=d;return}function $k(a){a=a|0;var b=0;b=c[(c[a+8>>2]|0)+12>>2]|0;if((b|0)==0){return}eF(b);return}function al(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;g=(d|0)!=0;a:do{if(g){h=0;j=1;while(1){k=c[d+(h<<2)>>2]|0;if((k|0)==0){l=4;break a}m=(a[k]|0)==0?0:j;if(m<<24>>24==0){break}else{h=h+1|0;j=m}}}else{l=4}}while(0);do{if((l|0)==4){j=c[e>>2]|0;if((j|0)==0){break}else{n=e;o=j}do{_z(b,o)|0;_z(b,126712)|0;n=n+4|0;o=c[n>>2]|0;}while((o|0)!=0)}}while(0);if(!g){i=f;return}g=c[d>>2]|0;if((g|0)==0){i=f;return}else{p=0;q=g}do{do{if((a[q]|0)!=0){g=Sm(q)|0;if((g|0)==0){Fv(0,114872,(r=i,i=i+8|0,c[r>>2]=q,r)|0)|0;i=r;break}o=Eb(g|0,107984)|0;if((o|0)==0){Fv(0,102272,(r=i,i=i+8|0,c[r>>2]=g,r)|0)|0;i=r;break}g=Rm(o)|0;if((g|0)!=0){n=g;do{_z(b,n)|0;n=Rm(o)|0;}while((n|0)!=0)}_z(b,126712)|0;Ha(o|0)|0}}while(0);p=p+1|0;q=c[d+(p<<2)>>2]|0;}while((q|0)!=0);i=f;return}function bl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;e=c[d+52>>2]|0;a:while(1){d=a[e]|0;b:do{if((d<<24>>24|0)==0){break a}else if((d<<24>>24|0)==37){if((a[e+1|0]|0)!=37){f=e;g=37;break}h=e+2|0;do{if((qm(h,96544,3)|0)==0){i=e;j=37}else{if((qm(h,91216,5)|0)==0){i=e;j=37;break}if((qm(h,86016,3)|0)==0){i=e;j=37;break}if((qm(h,81360,7)|0)==0){i=e;j=37}else{f=e;g=d;break b}}}while(0);while(1){if((j<<24>>24|0)==13){k=10;break}else if((j<<24>>24|0)==0|(j<<24>>24|0)==10){k=12;break}h=i+1|0;i=h;j=a[h]|0}do{if((k|0)==10){k=0;h=i+1|0;if((a[h]|0)!=10){l=h;break}e=i+2|0;continue a}else if((k|0)==12){k=0;l=i+1|0}}while(0);e=j<<24>>24==0?i:l;continue a}else{f=e;g=d}}while(0);while(1){if((g<<24>>24|0)==13){k=16;break}else if((g<<24>>24|0)==0|(g<<24>>24|0)==10){k=18;break}$z(b,g<<24>>24)|0;d=f+1|0;f=d;g=a[d]|0}do{if((k|0)==16){k=0;d=f+1|0;if((a[d]|0)!=10){m=d;k=19;break}n=f+2|0}else if((k|0)==18){k=0;m=f+1|0;k=19}}while(0);if((k|0)==19){k=0;n=g<<24>>24==0?f:m}$z(b,10)|0;e=n}return}function cl(b){b=b|0;var d=0,e=0,f=0,g=0;d=i;e=c[53828]|0;if((e|0)==0){i=d;return}f=Hc[c[e>>2]&63](e,0,128)|0;if((f|0)==0){i=d;return}else{g=f}do{if((a[g+16|0]|0)==0){dA(b,167576,(f=i,i=i+8|0,c[f>>2]=c[g+12>>2],f)|0);i=f;_z(b,163384)|0;bl(b,g);_z(b,159368)|0;_z(b,154296)|0}f=c[53828]|0;g=Hc[c[f>>2]&63](f,g,8)|0;}while((g|0)!=0);i=d;return}function dl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;do{if((d|0)==0){f=0;g=b;a:while(1){h=g;while(1){j=a[h]|0;if(j<<24>>24==0){k=7;break a}if((j&255)>>>0<127>>>0){h=h+1|0}else{break}}if((j&-4)<<24>>24==-64){f=1;g=h+2|0}else{k=9;break}}if((k|0)==7){if((f|0)!=1){l=b;break}l=ln(b)|0;break}else if((k|0)==9){if(a[13144]|0){l=b;break}Fv(0,151120,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0)|0;i=g;a[13144]=1;l=b;break}}else{l=ln(b)|0}}while(0);if((c[43808]|0)==0){Iv(175232,0,0)}k=c[43809]|0;if(k>>>0<(c[43810]|0)>>>0){m=k}else{Jv(175232,1)|0;m=c[43809]|0}c[43809]=m+1;a[m]=40;m=l;while(1){k=a[m]|0;if((k<<24>>24|0)==40|(k<<24>>24|0)==41|(k<<24>>24|0)==92){j=c[43809]|0;if(j>>>0<(c[43810]|0)>>>0){n=j}else{Jv(175232,1)|0;n=c[43809]|0}c[43809]=n+1;a[n]=92}else if((k<<24>>24|0)==0){break}k=c[43809]|0;if(k>>>0<(c[43810]|0)>>>0){o=k}else{Jv(175232,1)|0;o=c[43809]|0}k=a[m]|0;c[43809]=o+1;a[o]=k;m=m+1|0}m=c[43809]|0;if(m>>>0<(c[43810]|0)>>>0){p=m}else{Jv(175232,1)|0;p=c[43809]|0}c[43809]=p+1;a[p]=41;if((l|0)!=(b|0)){eF(l)}l=c[43809]|0;if(l>>>0<(c[43810]|0)>>>0){q=l;a[q]=0;r=c[43808]|0;c[43809]=r;i=e;return r|0}Jv(175232,1)|0;q=c[43809]|0;a[q]=0;r=c[43808]|0;c[43809]=r;i=e;return r|0}function el(a,b,d){a=a|0;b=b|0;d=d|0;eF(c[b+52>>2]|0);return}function fl(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=i;i=i+80|0;j=a;a=i;i=i+16|0;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];j=b;b=i;i=i+16|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];j=d;d=i;i=i+8|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];j=g|0;k=g+8|0;l=g+16|0;m=g+48|0;h[l>>3]=+h[a>>3];h[l+8>>3]=+h[a+8>>3];h[l+16>>3]=+h[b>>3];h[l+24>>3]=+h[b+8>>3];if((PB(d,l|0,j)|0)<0){n=0;i=g;return n|0}do{if((f|0)==0){l=d+4|0;b=c[l>>2]|0;if((b|0)>(c[45170]|0)){a=c[45168]|0;if((a|0)==0){o=kk(b<<5)|0}else{o=mk(a,b<<5)|0}c[45168]=o;a=c[l>>2]|0;c[45170]=a;p=a}else{p=b}b=c[45168]|0;if((p|0)>0){a=c[d>>2]|0;l=0;while(1){q=b+(l<<5)|0;r=a+(l<<4)|0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];r=l+1|0;q=b+(l<<5)+16|0;s=a+(((r|0)%(p|0)|0)<<4)|0;c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];if((r|0)<(p|0)){l=r}else{break}}}vF(m|0,0,32)|0;if((MB(b,p,j,m|0,k)|0)<0){n=0}else{break}i=g;return n|0}else{ZB(j,k)}}while(0);j=k+4|0;m=c[j>>2]|0;p=c[44370]|0;do{if((p|0)<(m|0)){d=m+300+p-((m|0)%300|0)|0;o=mk(c[43814]|0,d<<4)|0;c[43814]=o;if((o|0)!=0){c[44370]=d;t=c[j>>2]|0;break}Fv(1,126600,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0)|0;i=d;n=0;i=g;return n|0}else{t=m}}while(0);if((t|0)>0){m=c[43814]|0;j=c[k>>2]|0;k=0;do{p=m+(k<<4)|0;d=j+(k<<4)|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];k=k+1|0;}while((k|0)<(t|0))}c[e>>2]=t;n=c[43814]|0;i=g;return n|0}function gl(){var b=0,d=0,e=0,f=0;b=i;d=c[43780]|0;c[43780]=d+1;do{if((d|0)>0){e=0}else{f=kk(4800)|0;c[43814]=f;if((f|0)==0){Fv(1,116592,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f;e=1;break}c[44370]=300;c[44282]=0;c[44290]=0;if((a[213992]|0)==0){e=0;break}ym();e=0}}while(0);i=b;return e|0}function hl(){var b=0,d=0,e=0,f=0,g=0.0;b=i;d=(c[43780]|0)-1|0;c[43780]=d;if((d|0)>0){i=b;return}eF(c[43814]|0);if((a[213992]|0)==0){i=b;return}d=c[o>>2]|0;e=c[44282]|0;f=c[44290]|0;g=+zm();gc(d|0,155248,(d=i,i=i+24|0,c[d>>2]=e,c[d+8>>2]=f,h[d+16>>3]=g,d)|0)|0;i=d;i=b;return}function il(a,b){a=a|0;b=b|0;return jl(a,b,0)|0}function jl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0.0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0,Q=0.0,R=0,S=0.0,T=0,U=0.0,X=0,Y=0.0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0,Ha=0.0,Ia=0.0,Ja=0.0,Ka=0.0,La=0,Na=0.0,Oa=0,Pa=0.0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0.0,Ua=0.0,Va=0.0,Wa=0.0,Xa=0,Ya=0,Za=0,_a=0.0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0;f=i;i=i+96|0;g=f|0;j=f+8|0;k=f+16|0;l=f+24|0;m=f+56|0;n=f+88|0;c[44282]=(c[44282]|0)+1;p=b+80|0;c[44290]=(c[44290]|0)+(c[p>>2]|0);q=c[b+88>>2]|0;a:do{if((q|0)!=0){r=q;while(1){s=c[r+8>>2]|0;if((a[s+112|0]|0)==0){break}t=c[s+116>>2]|0;if((t|0)==0){break a}else{r=t}}t=c[b+84>>2]|0;s=c[p>>2]|0;u=(s|0)>0;if(u){v=0;w=0;while(1){x=t+(v<<5)|0;y=+h[t+(v<<5)+8>>3]- +h[t+(v<<5)+24>>3];if(y<0.0){z=-0.0-y}else{z=y}do{if(z<.01){A=w}else{y=+h[x>>3]- +h[t+(v<<5)+16>>3];if(y<0.0){B=-0.0-y}else{B=y}if(B<.01){A=w;break}if((w|0)!=(v|0)){C=t+(w<<5)|0;D=x;c[C>>2]=c[D>>2];c[C+4>>2]=c[D+4>>2];c[C+8>>2]=c[D+8>>2];c[C+12>>2]=c[D+12>>2];c[C+16>>2]=c[D+16>>2];c[C+20>>2]=c[D+20>>2];c[C+24>>2]=c[D+24>>2];c[C+28>>2]=c[D+28>>2]}A=w+1|0}}while(0);x=v+1|0;if((x|0)<(s|0)){v=x;w=A}else{E=A;break}}}else{E=0}w=t|0;y=+h[w>>3];v=t+16|0;F=+h[v>>3];do{if(y<=F){x=t+8|0;G=+h[x>>3];D=t+24|0;H=+h[D>>3];if(G>H){break}C=E-1|0;do{if((C|0)>0){I=c[o>>2]|0;J=0;K=F;L=y;M=H;N=G;while(1){O=J+1|0;P=t+(O<<5)|0;Q=+h[P>>3];R=t+(O<<5)+16|0;S=+h[R>>3];if(Q>S){break}T=t+(O<<5)+8|0;U=+h[T>>3];X=t+(O<<5)+24|0;Y=+h[X>>3];if(U>Y){break}Z=t+(J<<5)+16|0;_=K<Q;$=_&1;aa=t+(J<<5)|0;ba=L>S;ca=ba&1;da=t+(J<<5)+24|0;ea=M<U;fa=ea&1;ga=t+(J<<5)+8|0;ha=N>Y;ia=ha&1;ja=ca+$+fa+ia|0;ka=(ja|0)>0;if(!((a[213992]|0)==0|ka^1)){gc(I|0,163336,(la=i,i=i+16|0,c[la>>2]=J,c[la+8>>2]=O,la)|0)|0;i=la;nl(b)}do{if(ka){do{if(_){ma=~~+h[Z>>3];h[Z>>3]=+h[P>>3];h[P>>3]=+(ma|0);na=ia;oa=fa;pa=ca;qa=0}else{if(ba){ma=~~+h[aa>>3];h[aa>>3]=+h[R>>3];h[R>>3]=+(ma|0);na=ia;oa=fa;pa=0;qa=$;break}if(ea){ma=~~+h[da>>3];h[da>>3]=+h[T>>3];h[T>>3]=+(ma|0);na=ia;oa=0;pa=ca;qa=$;break}if(!ha){na=ia;oa=fa;pa=ca;qa=$;break}ma=~~+h[ga>>3];h[ga>>3]=+h[X>>3];h[X>>3]=+(ma|0);na=0;oa=fa;pa=ca;qa=$}}while(0);ma=ja-1|0;if((ma|0)>0){ra=0;sa=qa;ta=pa;ua=oa;va=na}else{break}while(1){do{if((sa|0)==1){Y=+(~~((+h[Z>>3]+ +h[P>>3])*.5+.5)|0);h[P>>3]=Y;h[Z>>3]=Y;wa=va;xa=ua;ya=ta;za=0}else{if((ta|0)==1){Y=+(~~((+h[aa>>3]+ +h[R>>3])*.5+.5)|0);h[R>>3]=Y;h[aa>>3]=Y;wa=va;xa=ua;ya=0;za=sa;break}if((ua|0)==1){Y=+(~~((+h[da>>3]+ +h[T>>3])*.5+.5)|0);h[T>>3]=Y;h[da>>3]=Y;wa=va;xa=0;ya=ta;za=sa;break}if((va|0)!=1){wa=va;xa=ua;ya=ta;za=sa;break}Y=+(~~((+h[ga>>3]+ +h[X>>3])*.5+.5)|0);h[X>>3]=Y;h[ga>>3]=Y;wa=0;xa=ua;ya=ta;za=sa}}while(0);Aa=ra+1|0;if((Aa|0)<(ma|0)){ra=Aa;sa=za;ta=ya;ua=xa;va=wa}else{break}}}}while(0);Y=+h[aa>>3];ja=~~Y;U=+h[Z>>3];$=~~U;S=+h[P>>3];ca=~~S;Q=+h[R>>3];fa=~~Q;do{if(($|0)>(ca|0)&(ja|0)<(fa|0)){if(!((ca|0)>(ja|0)|(ja|0)>(fa|0))){Ba=fa-ja|0;break}if((ca|0)>($|0)|($|0)>(fa|0)){ia=$-ja|0;ha=fa-ca|0;Ba=(ia|0)<(ha|0)?ia:ha;break}else{Ba=$-ca|0;break}}else{Ba=0}}while(0);Ca=+h[ga>>3];ca=~~Ca;Da=+h[da>>3];$=~~Da;Ea=+h[T>>3];fa=~~Ea;Fa=+h[X>>3];ja=~~Fa;do{if(($|0)>(fa|0)&(ca|0)<(ja|0)){do{if((fa|0)>(ca|0)|(ca|0)>(ja|0)){if((fa|0)>($|0)|($|0)>(ja|0)){ha=$-ca|0;ia=ja-fa|0;Ga=(ha|0)<(ia|0)?ha:ia;break}else{Ga=$-fa|0;break}}else{Ga=ja-ca|0}}while(0);if((Ba|0)==0|(Ga|0)==0){Ha=Q;Ia=S;Ja=Fa;Ka=Ea;break}if((Ba|0)<(Ga|0)){ia=U<Q;if(U-Y>Q-S){if(ia){h[Z>>3]=S;Ha=Q;Ia=S;Ja=Fa;Ka=Ea;break}else{h[aa>>3]=Q;Ha=Q;Ia=S;Ja=Fa;Ka=Ea;break}}else{if(ia){h[P>>3]=U;Ha=Q;Ia=U;Ja=Fa;Ka=Ea;break}else{h[R>>3]=Y;Ha=Y;Ia=S;Ja=Fa;Ka=Ea;break}}}else{ia=Da<Fa;if(Da-Ca>Fa-Ea){if(ia){h[da>>3]=Ea;Ha=Q;Ia=S;Ja=Fa;Ka=Ea;break}else{h[ga>>3]=Fa;Ha=Q;Ia=S;Ja=Fa;Ka=Ea;break}}else{if(ia){h[T>>3]=Da;Ha=Q;Ia=S;Ja=Fa;Ka=Da;break}else{h[X>>3]=Ca;Ha=Q;Ia=S;Ja=Ca;Ka=Ea;break}}}}else{Ha=Q;Ia=S;Ja=Fa;Ka=Ea}}while(0);if((O|0)<(C|0)){J=O;K=Ha;L=Ia;M=Ja;N=Ka}else{La=75;break}}if((La|0)==75){Na=+h[w>>3];break}Fv(1,167528,(la=i,i=i+8|0,c[la>>2]=O,la)|0)|0;i=la;nl(b);Oa=0;i=f;return Oa|0}else{Na=y}}while(0);J=b|0;G=+h[J>>3];do{if(G<Na){La=80}else{if(G>+h[v>>3]){La=80;break}H=+h[b+8>>3];if(H<+h[x>>3]){La=80;break}if(H>+h[D>>3]){La=80}}}while(0);do{if((La|0)==80){if((a[213992]|0)==0){Pa=G;Qa=Na}else{Ma(159320,42,1,c[o>>2]|0)|0;nl(b);Pa=+h[J>>3];Qa=+h[w>>3]}if(Pa<Qa){h[J>>3]=Qa;Ra=Qa}else{Ra=Pa}H=+h[v>>3];if(Ra>H){h[J>>3]=H}I=b+8|0;H=+h[I>>3];N=+h[x>>3];if(H<N){h[I>>3]=N;Sa=N}else{Sa=H}H=+h[D>>3];if(Sa<=H){break}h[I>>3]=H}}while(0);D=b+40|0;G=+h[D>>3];I=t+(C<<5)|0;H=+h[I>>3];do{if(G<H){La=94}else{if(G>+h[t+(C<<5)+16>>3]){La=94;break}N=+h[b+48>>3];if(N<+h[t+(C<<5)+8>>3]){La=94;break}if(N>+h[t+(C<<5)+24>>3]){La=94}}}while(0);do{if((La|0)==94){if((a[213992]|0)==0){Ta=G;Ua=H}else{Ma(154240,39,1,c[o>>2]|0)|0;nl(b);Ta=+h[D>>3];Ua=+h[I>>3]}if(Ta<Ua){h[D>>3]=Ua;Va=Ua}else{Va=Ta}N=+h[t+(C<<5)+16>>3];if(Va>N){h[D>>3]=N}X=b+48|0;N=+h[X>>3];M=+h[t+(C<<5)+8>>3];if(N<M){h[X>>3]=M;Wa=M}else{Wa=N}N=+h[t+(C<<5)+24>>3];if(Wa<=N){break}h[X>>3]=N}}while(0);C=s<<3;if((C|0)>(c[44072]|0)){I=c[44070]|0;if((I|0)==0){Xa=kk(s<<7)|0}else{Xa=mk(I,s<<7)|0}c[44070]=Xa;c[44072]=C}b:do{if((s|0)>1){H=+h[x>>3];C=H<=+h[t+40>>3];if(C|u^1){Ya=C&1^1;break}else{Za=0;_a=H}while(1){C=t+(Za<<5)+24|0;H=+h[C>>3];h[C>>3]=_a*-1.0;h[t+(Za<<5)+8>>3]=-0.0-H;C=Za+1|0;if((C|0)>=(s|0)){Ya=1;break b}Za=C;_a=+h[t+(C<<5)+8>>3]}}else{Ya=0}}while(0);x=r;C=c[x>>2]&3;I=r+32|0;X=c[((C|0)==3?r:I)+28>>2]|0;T=r-32|0;if((X|0)==(c[((C|0)==2?r:T)+28>>2]|0)){C=$w(X|0)|0;Fv(1,102232,(la=i,i=i+8|0,c[la>>2]=C,la)|0)|0;i=la;Oa=0;i=f;return Oa|0}c:do{if(u){C=s-1|0;X=c[44070]|0;ga=0;da=0;d:while(1){if((da|0)>0){$a=+h[t+(da<<5)+8>>3]>+h[t+(da-1<<5)+8>>3]?-1:1}else{$a=0}if((da|0)<(C|0)){ab=+h[t+(da+1<<5)+8>>3]>+h[t+(da<<5)+8>>3]?1:-1}else{ab=0}do{if(($a|0)==(ab|0)){if(($a|0)==(-1|0)){bb=ga;break}else if(($a|0)!=0){La=126;break d}R=t+(da<<5)|0;h[X+(ga<<4)>>3]=+h[R>>3];P=ga+1|0;h[X+(ga<<4)+8>>3]=+h[t+(da<<5)+24>>3];h[X+(P<<4)>>3]=+h[R>>3];h[X+(P<<4)+8>>3]=+h[t+(da<<5)+8>>3];bb=ga+2|0}else{if((ab|0)==-1|($a|0)==1){P=t+(da<<5)|0;h[X+(ga<<4)>>3]=+h[P>>3];R=ga+1|0;h[X+(ga<<4)+8>>3]=+h[t+(da<<5)+24>>3];h[X+(R<<4)>>3]=+h[P>>3];h[X+(R<<4)+8>>3]=+h[t+(da<<5)+8>>3];bb=ga+2|0;break}else{R=t+(da<<5)+16|0;h[X+(ga<<4)>>3]=+h[R>>3];P=ga+1|0;h[X+(ga<<4)+8>>3]=+h[t+(da<<5)+8>>3];h[X+(P<<4)>>3]=+h[R>>3];h[X+(P<<4)+8>>3]=+h[t+(da<<5)+24>>3];bb=ga+2|0;break}}}while(0);P=da+1|0;if((P|0)<(s|0)){ga=bb;da=P}else{break}}if((La|0)==126){Fv(1,107912,(la=i,i=i+24|0,c[la>>2]=$a,c[la+8>>2]=$a,c[la+16>>2]=480,la)|0)|0;i=la;Oa=0;i=f;return Oa|0}if(!u){cb=bb;break}da=c[44070]|0;ga=bb;X=C;e:while(1){if((X|0)<(C|0)){db=+h[t+(X<<5)+8>>3]>+h[t+(X+1<<5)+8>>3]?-1:1}else{db=0}P=(X|0)>0;if(P){eb=+h[t+(X-1<<5)+8>>3]>+h[t+(X<<5)+8>>3]?1:-1}else{eb=0}do{if((db|0)==(eb|0)){if((db|0)==0){R=t+(X<<5)+16|0;h[da+(ga<<4)>>3]=+h[R>>3];aa=ga+1|0;h[da+(ga<<4)+8>>3]=+h[t+(X<<5)+8>>3];h[da+(aa<<4)>>3]=+h[R>>3];h[da+(aa<<4)+8>>3]=+h[t+(X<<5)+24>>3];fb=ga+2|0;break}else if((db|0)==(-1|0)){aa=t+(X<<5)+16|0;h[da+(ga<<4)>>3]=+h[aa>>3];R=t+(X<<5)+8|0;Z=ga+1|0;h[da+(ga<<4)+8>>3]=+h[R>>3];h[da+(Z<<4)>>3]=+h[aa>>3];aa=t+(X<<5)+24|0;ca=ga+2|0;h[da+(Z<<4)+8>>3]=+h[aa>>3];Z=t+(X<<5)|0;h[da+(ca<<4)>>3]=+h[Z>>3];ja=ga+3|0;h[da+(ca<<4)+8>>3]=+h[aa>>3];h[da+(ja<<4)>>3]=+h[Z>>3];h[da+(ja<<4)+8>>3]=+h[R>>3];fb=ga+4|0;break}else{break e}}else{if((eb|0)==-1|(db|0)==1){R=t+(X<<5)|0;h[da+(ga<<4)>>3]=+h[R>>3];ja=ga+1|0;h[da+(ga<<4)+8>>3]=+h[t+(X<<5)+24>>3];h[da+(ja<<4)>>3]=+h[R>>3];h[da+(ja<<4)+8>>3]=+h[t+(X<<5)+8>>3];fb=ga+2|0;break}else{ja=t+(X<<5)+16|0;h[da+(ga<<4)>>3]=+h[ja>>3];R=ga+1|0;h[da+(ga<<4)+8>>3]=+h[t+(X<<5)+8>>3];h[da+(R<<4)>>3]=+h[ja>>3];h[da+(R<<4)+8>>3]=+h[t+(X<<5)+24>>3];fb=ga+2|0;break}}}while(0);if(P){ga=fb;X=X-1|0}else{cb=fb;break c}}Fv(1,107912,(la=i,i=i+24|0,c[la>>2]=db,c[la+8>>2]=db,c[la+16>>2]=513,la)|0)|0;i=la;Oa=0;i=f;return Oa|0}else{cb=0}}while(0);do{if((Ya|0)!=0){if(u){X=0;do{ga=t+(X<<5)+24|0;da=~~+h[ga>>3];C=t+(X<<5)+8|0;h[ga>>3]=+h[C>>3]*-1.0;h[C>>3]=+(-da|0);X=X+1|0;}while((X|0)<(s|0))}if((cb|0)<=0){break}X=c[44070]|0;da=0;do{C=X+(da<<4)+8|0;h[C>>3]=+h[C>>3]*-1.0;da=da+1|0;}while((da|0)<(cb|0))}}while(0);if(u){da=0;do{h[t+(da<<5)>>3]=2147483647.0;h[t+(da<<5)+16>>3]=-2147483648.0;da=da+1|0;}while((da|0)<(s|0))}c[g>>2]=c[44070];da=g+4|0;c[da>>2]=cb;h[l>>3]=+h[J>>3];h[l+8>>3]=+h[b+8>>3];h[l+16>>3]=+h[D>>3];h[l+24>>3]=+h[b+48>>3];if((PB(g,l|0,j)|0)<0){Fv(1,96504,(la=i,i=i+1|0,i=i+7&-8,c[la>>2]=0,la)|0)|0;i=la;Oa=0;i=f;return Oa|0}do{if((e|0)==0){X=c[da>>2]|0;if((X|0)>(c[45170]|0)){C=c[45168]|0;if((C|0)==0){gb=kk(X<<5)|0}else{gb=mk(C,X<<5)|0}c[45168]=gb;C=c[da>>2]|0;c[45170]=C;hb=C}else{hb=X}if((hb|0)>0){X=c[45168]|0;C=c[44070]|0;ga=0;while(1){R=X+(ga<<5)|0;ja=C+(ga<<4)|0;c[R>>2]=c[ja>>2];c[R+4>>2]=c[ja+4>>2];c[R+8>>2]=c[ja+8>>2];c[R+12>>2]=c[ja+12>>2];ja=ga+1|0;R=X+(ga<<5)+16|0;Z=C+(((ja|0)%(hb|0)|0)<<4)|0;c[R>>2]=c[Z>>2];c[R+4>>2]=c[Z+4>>2];c[R+8>>2]=c[Z+8>>2];c[R+12>>2]=c[Z+12>>2];if((ja|0)<(hb|0)){ga=ja}else{break}}}if((a[b+29|0]|0)==0){vF(m|0,0,16)|0}else{H=+h[b+16>>3];h[m>>3]=+V(H);h[m+8>>3]=+W(H)}if((a[b+69|0]|0)==0){vF(m+16|0,0,16)|0}else{H=+h[b+56>>3];h[m+16>>3]=-0.0- +V(H);h[m+24>>3]=-0.0- +W(H)}if((MB(c[45168]|0,hb,j,m|0,k)|0)>=0){break}Fv(1,91176,(la=i,i=i+1|0,i=i+7&-8,c[la>>2]=0,la)|0)|0;i=la;Oa=0;i=f;return Oa|0}else{ZB(j,k)}}while(0);da=k+4|0;D=c[da>>2]|0;J=c[44370]|0;do{if((J|0)<(D|0)){ga=D+300+J-((D|0)%300|0)|0;C=mk(c[43814]|0,ga<<4)|0;c[43814]=C;if((C|0)!=0){c[44370]=ga;break}Fv(1,126600,(la=i,i=i+1|0,i=i+7&-8,c[la>>2]=0,la)|0)|0;i=la;Oa=0;i=f;return Oa|0}}while(0);if(u){D=0;do{h[t+(D<<5)>>3]=2147483647.0;h[t+(D<<5)+16>>3]=-2147483648.0;D=D+1|0;}while((D|0)<(s|0))}D=c[da>>2]|0;if((D|0)>0){J=c[43814]|0;ga=c[k>>2]|0;C=0;do{X=J+(C<<4)|0;ja=ga+(C<<4)|0;c[X>>2]=c[ja>>2];c[X+4>>2]=c[ja+4>>2];c[X+8>>2]=c[ja+8>>2];c[X+12>>2]=c[ja+12>>2];C=C+1|0;}while((C|0)<(D|0))}f:do{if(u){C=0;ga=10;J=1;ja=D;while(1){ml(t,s,c[43814]|0,ja,ga);X=0;while(1){if(+h[t+(X<<5)>>3]==2147483647.0){La=185;break}Z=X+1|0;if(+h[t+(X<<5)+16>>3]==-2147483648.0){La=185;break}if((Z|0)<(s|0)){X=Z}else{ib=ga;jb=C;kb=Z;break}}if((La|0)==185){La=0;P=ga<<1;ib=P;jb=(P|0)>(2147483647/(s|0)|0|0)?15:C;kb=X}P=(kb|0)==(s|0)?0:J;Z=jb+1|0;if(!(P<<24>>24!=0&(Z|0)<15)){lb=P;break f}C=Z;ga=ib;J=P;ja=c[da>>2]|0}}else{ja=(s|0)==0;J=1;ga=1;C=D;while(1){ml(t,s,c[43814]|0,C,10);P=ja?0:ga;if(!(P<<24>>24!=0&(J|0)<15)){lb=P;break f}J=J+1|0;ga=P;C=c[da>>2]|0}}}while(0);if(lb<<24>>24!=0){D=$w(c[((c[x>>2]&3|0)==3?r:I)+28>>2]|0)|0;C=$w(c[((c[x>>2]&3|0)==2?r:T)+28>>2]|0)|0;Fv(0,85904,(la=i,i=i+16|0,c[la>>2]=D,c[la+8>>2]=C,la)|0)|0;i=la;ZB(j,n);C=n|0;ml(t,s,c[C>>2]|0,c[n+4>>2]|0,10);eF(c[C>>2]|0)}c[d>>2]=c[da>>2];Oa=c[43814]|0;i=f;return Oa|0}}while(0);Fv(1,81296,(la=i,i=i+1|0,i=i+7&-8,c[la>>2]=0,la)|0)|0;i=la;nl(b);Oa=0;i=f;return Oa|0}}while(0);Fv(1,114784,(la=i,i=i+1|0,i=i+7&-8,c[la>>2]=0,la)|0)|0;i=la;Oa=0;i=f;return Oa|0}function kl(a,b){a=a|0;b=b|0;return jl(a,b,1)|0}function ll(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0.0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,U=0,V=0.0,W=0.0,X=0,Y=0,Z=0,_=0,$=0,aa=0;j=i;i=i+240|0;k=j|0;l=j+64|0;m=j+128|0;n=j+144|0;o=j+160|0;p=j+224|0;q=j+232|0;r=e;s=c[r>>2]|0;t=s&3;u=e-32|0;v=c[((t|0)==2?e:u)+28>>2]|0;w=c[e+8>>2]|0;x=b[w+168>>1]|0;y=x<<16>>16;z=k+16|0;A=k|0;B=c[(c[((t|0)==3?e:e+32|0)+28>>2]|0)+8>>2]|0;C=+h[B+16>>3]+ +h[w+16>>3];D=+h[B+24>>3]+ +h[w+24>>3];B=k;h[k>>3]=C;h[k+8>>3]=D;t=z;c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];E=m;c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];F=k+32|0;G=c[v+8>>2]|0;H=+h[G+16>>3]+ +h[w+56>>3];I=+h[G+24>>3]+ +h[w+64>>3];w=k+48|0;h[k+48>>3]=H;h[k+56>>3]=I;G=F;c[G>>2]=c[w>>2];c[G+4>>2]=c[w+4>>2];c[G+8>>2]=c[w+8>>2];c[G+12>>2]=c[w+12>>2];J=n;c[J>>2]=c[w>>2];c[J+4>>2]=c[w+4>>2];c[J+8>>2]=c[w+8>>2];c[J+12>>2]=c[w+12>>2];if(!(x<<16>>16!=1&(a[215376]|0)==0)){if((f|0)==4){K=d+8|0;L=c[K>>2]|0;M=(+h[L+16>>3]+ +h[L+32>>3])*.5;h[22376]=M;L=c[K>>2]|0;N=(+h[L+24>>3]+ +h[L+40>>3])*.5;h[22377]=N;O=(C+H)*.5;P=(D+I)*.5;Q=H-C;R=I-D;S=+T(Q*Q+R*R)/5.0;R=M-O;M=N-P;N=+T(R*R+M*M);Q=O-S*(R/N);R=P-S*(M/N);h[k+32>>3]=Q;h[k+16>>3]=Q;h[k+40>>3]=R;h[k+24>>3]=R;U=c[r>>2]|0}else{U=s}cm(e,c[((U&3|0)==2?e:u)+28>>2]|0,A,4,g);nm(d,e,m,n);i=j;return}R=C-H;Q=D-I;N=Q*Q;if(R*R+N<1.0e-6){c[t>>2]=c[B>>2];c[t+4>>2]=c[B+4>>2];c[t+8>>2]=c[B+8>>2];c[t+12>>2]=c[B+12>>2];c[G>>2]=c[w>>2];c[G+4>>2]=c[w+4>>2];c[G+8>>2]=c[w+8>>2];c[G+12>>2]=c[w+12>>2];V=0.0;W=0.0}else{R=H-C;M=+T(R*R+N);A=c[(c[(c[d+48>>2]|0)+8>>2]|0)+236>>2]|0;N=+((da(A,y-1|0)|0)/2|0|0);S=Q*N/M;h[z>>3]=C+S;C=R*N/M;h[k+24>>3]=D+C;h[F>>3]=S+H;h[k+40>>3]=C+I;I=+(-A|0);V=R*I/M;W=Q*I/M}if(x<<16>>16<=0){i=j;return}x=(f|0)==6;f=q+4|0;A=o|0;u=q|0;U=p|0;r=p+4|0;L=z|0;z=k+24|0;K=F|0;F=k+40|0;X=l|0;Y=1;Z=e;e=s;while(1){s=Z;_=Z-32|0;if((c[((e&3|0)==2?Z:_)+28>>2]|0)==(v|0)){c[E>>2]=c[B>>2];c[E+4>>2]=c[B+4>>2];c[E+8>>2]=c[B+8>>2];c[E+12>>2]=c[B+12>>2];c[J>>2]=c[w>>2];c[J+4>>2]=c[w+4>>2];c[J+8>>2]=c[w+8>>2];c[J+12>>2]=c[w+12>>2];$=l;aa=k;c[$>>2]=c[aa>>2];c[$+4>>2]=c[aa+4>>2];c[$+8>>2]=c[aa+8>>2];c[$+12>>2]=c[aa+12>>2];aa=l+16|0;c[aa>>2]=c[t>>2];c[aa+4>>2]=c[t+4>>2];c[aa+8>>2]=c[t+8>>2];c[aa+12>>2]=c[t+12>>2];aa=l+32|0;c[aa>>2]=c[G>>2];c[aa+4>>2]=c[G+4>>2];c[aa+8>>2]=c[G+8>>2];c[aa+12>>2]=c[G+12>>2];aa=l+48|0;c[aa>>2]=c[w>>2];c[aa+4>>2]=c[w+4>>2];c[aa+8>>2]=c[w+8>>2];c[aa+12>>2]=c[w+12>>2]}else{c[E>>2]=c[w>>2];c[E+4>>2]=c[w+4>>2];c[E+8>>2]=c[w+8>>2];c[E+12>>2]=c[w+12>>2];c[J>>2]=c[B>>2];c[J+4>>2]=c[B+4>>2];c[J+8>>2]=c[B+8>>2];c[J+12>>2]=c[B+12>>2];aa=l+48|0;$=k;c[aa>>2]=c[$>>2];c[aa+4>>2]=c[$+4>>2];c[aa+8>>2]=c[$+8>>2];c[aa+12>>2]=c[$+12>>2];$=l+32|0;c[$>>2]=c[t>>2];c[$+4>>2]=c[t+4>>2];c[$+8>>2]=c[t+8>>2];c[$+12>>2]=c[t+12>>2];$=l+16|0;c[$>>2]=c[G>>2];c[$+4>>2]=c[G+4>>2];c[$+8>>2]=c[G+8>>2];c[$+12>>2]=c[G+12>>2];$=l;c[$>>2]=c[w>>2];c[$+4>>2]=c[w+4>>2];c[$+8>>2]=c[w+8>>2];c[$+12>>2]=c[w+12>>2]}if(x){c[f>>2]=4;c[u>>2]=A;$=o;aa=l;c[$>>2]=c[aa>>2];c[$+4>>2]=c[aa+4>>2];c[$+8>>2]=c[aa+8>>2];c[$+12>>2]=c[aa+12>>2];aa=o+16|0;$=l+16|0;c[aa>>2]=c[$>>2];c[aa+4>>2]=c[$+4>>2];c[aa+8>>2]=c[$+8>>2];c[aa+12>>2]=c[$+12>>2];$=o+32|0;aa=l+32|0;c[$>>2]=c[aa>>2];c[$+4>>2]=c[aa+4>>2];c[$+8>>2]=c[aa+8>>2];c[$+12>>2]=c[aa+12>>2];aa=o+48|0;$=l+48|0;c[aa>>2]=c[$>>2];c[aa+4>>2]=c[$+4>>2];c[aa+8>>2]=c[$+8>>2];c[aa+12>>2]=c[$+12>>2];ZB(q,p);cm(Z,c[((c[s>>2]&3|0)==2?Z:_)+28>>2]|0,c[U>>2]|0,c[r>>2]|0,g)}else{cm(Z,c[((c[s>>2]&3|0)==2?Z:_)+28>>2]|0,X,4,g)}nm(d,Z,m,n);_=c[(c[Z+8>>2]|0)+172>>2]|0;h[L>>3]=W+ +h[L>>3];h[z>>3]=V+ +h[z>>3];h[K>>3]=W+ +h[K>>3];h[F>>3]=V+ +h[F>>3];if((Y|0)>=(y|0)){break}Y=Y+1|0;Z=_;e=c[_>>2]|0}i=j;return}function ml(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0;f=da(e,b)|0;if((d|0)<=3){return}e=(f|0)<0;g=+(f|0);i=(b|0)>0;j=0;k=3;while(1){a:do{if(!e){l=c+(j<<4)|0;m=c+(j<<4)+8|0;n=j+1|0;o=c+(n<<4)|0;p=c+(n<<4)+8|0;n=j+2|0;q=c+(n<<4)|0;r=c+(n<<4)+8|0;n=c+(k<<4)|0;s=c+(k<<4)+8|0;if(i){t=0}else{break}while(1){u=+(t|0)/g;v=+h[l>>3];w=+h[m>>3];x=+h[o>>3];y=+h[p>>3];z=+h[q>>3];A=+h[r>>3];B=v+u*(x-v);v=w+u*(y-w);w=x+u*(z-x);x=y+u*(A-y);y=B+u*(w-B);B=v+u*(x-v);v=y+u*(w+u*(z+u*(+h[n>>3]-z)-w)-y);y=B+u*(x+u*(A+u*(+h[s>>3]-A)-x)-B);C=0;do{do{if(y<=+h[a+(C<<5)+24>>3]+1.0e-4){if(y<+h[a+(C<<5)+8>>3]+-1.0e-4){break}D=a+(C<<5)|0;if(+h[D>>3]>v){h[D>>3]=v}D=a+(C<<5)+16|0;if(+h[D>>3]>=v){break}h[D>>3]=v}}while(0);C=C+1|0;}while((C|0)<(b|0));if((t|0)>=(f|0)){break a}t=t+1|0}}}while(0);s=k+3|0;if((s|0)<(d|0)){j=k;k=s}else{break}}return}function nl(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,p=0.0,q=0.0;d=i;e=c[o>>2]|0;f=b+80|0;gc(e|0,151104,(g=i,i=i+8|0,c[g>>2]=c[f>>2],g)|0)|0;i=g;if((c[f>>2]|0)>0){j=b+84|0;k=0;do{l=c[j>>2]|0;m=+h[l+(k<<5)>>3];n=+h[l+(k<<5)+8>>3];p=+h[l+(k<<5)+16>>3];q=+h[l+(k<<5)+24>>3];gc(e|0,148176,(g=i,i=i+40|0,c[g>>2]=k,h[g+8>>3]=m,h[g+16>>3]=n,h[g+24>>3]=p,h[g+32>>3]=q,g)|0)|0;i=g;k=k+1|0;}while((k|0)<(c[f>>2]|0))}q=+h[b+8>>3];p=+h[b+16>>3];f=(a[b+29|0]|0)!=0?142088:138952;gc(e|0,145e3,(g=i,i=i+32|0,h[g>>3]=+h[b>>3],h[g+8>>3]=q,h[g+16>>3]=p,c[g+24>>2]=f,g)|0)|0;i=g;p=+h[b+48>>3];q=+h[b+56>>3];f=(a[b+69|0]|0)!=0?142088:138952;gc(e|0,136416,(g=i,i=i+32|0,h[g>>3]=+h[b+40>>3],h[g+8>>3]=p,h[g+16>>3]=q,c[g+24>>2]=f,g)|0)|0;i=g;i=d;return}
+
+
+
+function Wc(a){a=a|0;var b=0;b=i;i=i+a|0;i=i+7&-8;return b|0}function Xc(){return i|0}function Yc(a){a=a|0;i=a}function Zc(a,b){a=a|0;b=b|0;if((u|0)==0){u=a;v=b}}function _c(b){b=b|0;a[k]=a[b];a[k+1|0]=a[b+1|0];a[k+2|0]=a[b+2|0];a[k+3|0]=a[b+3|0]}function $c(b){b=b|0;a[k]=a[b];a[k+1|0]=a[b+1|0];a[k+2|0]=a[b+2|0];a[k+3|0]=a[b+3|0];a[k+4|0]=a[b+4|0];a[k+5|0]=a[b+5|0];a[k+6|0]=a[b+6|0];a[k+7|0]=a[b+7|0]}function ad(a){a=a|0;H=a}function bd(a){a=a|0;I=a}function cd(a){a=a|0;J=a}function dd(a){a=a|0;K=a}function ed(a){a=a|0;L=a}function fd(a){a=a|0;M=a}function gd(a){a=a|0;N=a}function hd(a){a=a|0;O=a}function id(a){a=a|0;P=a}function jd(a){a=a|0;Q=a}function kd(){}function ld(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+16|0;f=e|0;if((c[45198]|0)==0){g=Oz()|0;c[45198]=g;Tz(g,23376);Tz(c[45198]|0,23368);Tz(c[45198]|0,23352)}g=mx(a)|0;Pz(c[45198]|0,g,d)|0;c[f>>2]=0;Rz(c[45198]|0,g,b,f,e+8|0)|0;JA(c[45198]|0,g)|0;Kw(g)|0;g=c[44396]|0;if((g|0)==0){h=c[f>>2]|0;c[44396]=h;i=e;return h|0}Sz(g);h=c[f>>2]|0;c[44396]=h;i=e;return h|0}function md(a){a=a|0;return nd(a,0,0)|0}function nd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;do{if((d|0)==0){f=dF(476)|0;g=f;if((f|0)==0){h=g;break}c[f+12>>2]=6;c[f+16>>2]=202;c[f+20>>2]=150;h=g}else{g=d|0;f=Ec[c[g>>2]&63](476)|0;i=f;if((f|0)==0){h=i;break}c[f+12>>2]=c[g>>2];c[f+16>>2]=c[d+4>>2];c[f+20>>2]=c[d+8>>2];h=i}}while(0);if((h|0)==0){j=0;return j|0}c[h+8>>2]=0;c[h+32>>2]=0;c[h+364>>2]=16;d=h+12|0;i=d|0;f=Ec[c[i>>2]&63](256)|0;g=h+376|0;c[g>>2]=f;if((f|0)==0){Cc[c[h+20>>2]&255](h);j=0;return j|0}f=Ec[c[i>>2]&63](1024)|0;k=h+44|0;c[k>>2]=f;if((f|0)==0){l=h+20|0;Cc[c[l>>2]&255](c[g>>2]|0);Cc[c[l>>2]&255](h);j=0;return j|0}c[h+48>>2]=f+1024;f=Ec[c[i>>2]&63](168)|0;i=f;if((f|0)==0){c[h+340>>2]=i;l=h+20|0;Cc[c[l>>2]&255](c[k>>2]|0);Cc[c[l>>2]&255](c[g>>2]|0);Cc[c[l>>2]&255](h);j=0;return j|0}vF(f+80|0,0,20)|0;c[f+100>>2]=d;vF(f+104|0,0,20)|0;c[f+124>>2]=d;a[f+4|0]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f>>2]=0;c[f+16>>2]=d;a[f+24|0]=0;c[f+28>>2]=0;c[f+32>>2]=0;c[f+20>>2]=0;c[f+36>>2]=d;a[f+44|0]=0;c[f+48>>2]=0;c[f+52>>2]=0;c[f+40>>2]=0;c[f+56>>2]=d;a[f+64|0]=0;c[f+68>>2]=0;c[f+72>>2]=0;c[f+60>>2]=0;c[f+76>>2]=d;c[f+132>>2]=0;c[f+136>>2]=0;a[f+140|0]=0;vF(f+144|0,0,24)|0;a[f+128|0]=1;a[f+129|0]=0;a[f+130|0]=0;c[h+340>>2]=i;c[h+360>>2]=0;c[h+352>>2]=0;c[h+288>>2]=0;c[h+452>>2]=0;c[h+448>>2]=0;c[h+124>>2]=0;c[h+244>>2]=0;i=h+456|0;a[i]=33;f=h+232|0;a[f]=0;a[h+233|0]=0;c[h+380>>2]=0;c[h+384>>2]=0;a[h+388|0]=0;vF(h+400|0,0,20)|0;c[h+420>>2]=d;vF(h+424|0,0,20)|0;c[h+444>>2]=d;od(h,b);do{if((b|0)!=0){if((c[h+228>>2]|0)!=0){break}qd(h);j=0;return j|0}}while(0);if((e|0)==0){c[h+224>>2]=Ze()|0;j=h;return j|0}else{a[f]=1;c[h+224>>2]=Ze()|0;a[i]=a[e]|0;j=h;return j|0}return 0}function od(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;c[b+264>>2]=102;Yd(b+252|0);a:do{if((d|0)==0){e=0}else{f=b+400|0;g=b+412|0;h=b+408|0;i=d;while(1){j=c[g>>2]|0;if((j|0)==(c[h>>2]|0)){if((Bd(f)|0)<<24>>24==0){e=0;break a}k=c[g>>2]|0}else{k=j}j=a[i]|0;c[g>>2]=k+1;a[k]=j;if((a[i]|0)==0){break}else{i=i+1|0}}i=b+416|0;f=c[i>>2]|0;c[i>>2]=c[g>>2];e=f}}while(0);c[b+228>>2]=e;c[b+344>>2]=0;_e(b+148|0,b+144|0,0)|0;c[b>>2]=0;c[b+4>>2]=0;vF(b+52|0,0,64)|0;c[b+116>>2]=b;c[b+120>>2]=0;vF(b+128|0,0,16)|0;e=c[b+8>>2]|0;c[b+24>>2]=e;c[b+28>>2]=e;c[b+36>>2]=0;c[b+40>>2]=0;e=b+392|0;c[e>>2]=0;c[e+4>>2]=0;vF(b+268|0,0,20)|0;vF(b+300|0,0,38)|0;a[b+292|0]=1;c[b+296>>2]=0;c[b+348>>2]=0;c[b+356>>2]=0;c[b+368>>2]=0;c[b+236>>2]=0;c[b+248>>2]=0;c[b+240>>2]=0;c[b+460>>2]=0;c[b+464>>2]=0;c[b+472>>2]=0;return}function pd(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;f=c[b+340>>2]|0;if((a[e]|0)==0){g=1;return g|0}h=b+400|0;i=b+412|0;j=b+408|0;k=b+416|0;l=f+132|0;m=b+356|0;n=f+60|0;o=f+80|0;p=f+92|0;q=f+88|0;r=f+96|0;s=f+8|0;t=b+472|0;u=f|0;v=f+4|0;f=e;a:while(1){e=f;while(1){w=a[e]|0;if((w<<24>>24|0)==12|(w<<24>>24|0)==0){x=5;break}y=c[i>>2]|0;if(w<<24>>24==61){x=24;break}if((y|0)==(c[j>>2]|0)){if((Bd(h)|0)<<24>>24==0){g=0;x=54;break a}z=a[e]|0;A=c[i>>2]|0}else{z=w;A=y}c[i>>2]=A+1;a[A]=z;if((a[f]|0)==0){g=1;x=54;break a}e=e+1|0}if((x|0)==5){x=0;w=c[i>>2]|0;if((w|0)==(c[j>>2]|0)){if((Bd(h)|0)<<24>>24==0){g=0;x=54;break}B=c[i>>2]|0}else{B=w}c[i>>2]=B+1;a[B]=0;w=c[k>>2]|0;C=c[s>>2]|0;b:do{if((C|0)==0){D=w}else{E=c[t>>2]|0;F=a[w]|0;if(F<<24>>24==0){G=E}else{H=w;I=E;E=F;while(1){J=H+1|0;K=(I*1000003|0)^E&255;L=a[J]|0;if(L<<24>>24==0){G=K;break}else{H=J;I=K;E=L}}}E=C-1|0;I=G&E;H=c[u>>2]|0;L=c[H+(I<<2)>>2]|0;if((L|0)==0){D=w;break}K=G&-C;J=E>>>2;E=0;M=I;I=L;c:while(1){L=c[I>>2]|0;if(F<<24>>24==(a[L]|0)){N=w;O=L;L=F;do{if(L<<24>>24==0){break c}N=N+1|0;O=O+1|0;L=a[N]|0;}while(L<<24>>24==(a[O]|0))}if(E<<24>>24==0){P=(K>>>(((d[v]|0)-1|0)>>>0)&J|1)&255}else{P=E}O=P&255;L=(M>>>0<O>>>0?C:0)+(M-O)|0;O=c[H+(L<<2)>>2]|0;if((O|0)==0){D=w;break b}else{E=P;M=L;I=O}}if((I|0)==0){D=w;break}a[I+32|0]=1;D=c[k>>2]|0}}while(0);w=(a[e]|0)==0?e:e+1|0;c[i>>2]=D;Q=w}else if((x|0)==24){x=0;if((y|0)==(c[k>>2]|0)){R=l;S=y}else{if((y|0)==(c[j>>2]|0)){if((Bd(h)|0)<<24>>24==0){g=0;x=54;break}T=c[i>>2]|0}else{T=y}c[i>>2]=T+1;a[T]=0;w=Cd(b,n,c[k>>2]|0,8)|0;C=w;if((w|0)==0){g=0;x=54;break}U=w|0;w=c[U>>2]|0;M=c[k>>2]|0;if((w|0)==(M|0)){E=w;while(1){w=c[p>>2]|0;if((w|0)==(c[q>>2]|0)){if((Bd(o)|0)<<24>>24==0){x=32;break a}V=c[p>>2]|0}else{V=w}w=a[E]|0;c[p>>2]=V+1;a[V]=w;if((a[E]|0)==0){break}else{E=E+1|0}}E=c[r>>2]|0;c[r>>2]=c[p>>2];c[U>>2]=E;if((E|0)==0){g=0;x=54;break}W=c[k>>2]|0}else{W=M}c[i>>2]=W;R=C;S=W}E=e;w=S;while(1){X=E+1|0;H=a[X]|0;Y=(w|0)==(c[j>>2]|0);if((H<<24>>24|0)==12|(H<<24>>24|0)==0){break}if(Y){if((Bd(h)|0)<<24>>24==0){g=0;x=54;break a}Z=a[X]|0;_=c[i>>2]|0}else{Z=H;_=w}c[i>>2]=_+1;a[_]=Z;E=X;w=c[i>>2]|0}if(Y){if((Bd(h)|0)<<24>>24==0){g=0;x=54;break}$=c[i>>2]|0}else{$=w}c[i>>2]=$+1;a[$]=0;if((Dd(b,R,0,c[k>>2]|0,m)|0)!=0){g=0;x=54;break}c[i>>2]=c[k>>2];Q=(a[X]|0)==0?X:E+2|0}if((a[Q]|0)==0){g=1;x=54;break}else{f=Q}}if((x|0)==32){c[U>>2]=0;g=0;return g|0}else if((x|0)==54){return g|0}return 0}function qd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;if((a|0)==0){return}b=a+352|0;d=a+20|0;e=c[a+348>>2]|0;while(1){if((e|0)==0){f=c[b>>2]|0;if((f|0)==0){break}c[b>>2]=0;g=f}else{g=e}f=c[g>>2]|0;Cc[c[d>>2]&255](c[g+36>>2]|0);h=c[g+44>>2]|0;if((h|0)!=0){i=h;while(1){h=c[i+4>>2]|0;Cc[c[d>>2]&255](c[i+16>>2]|0);Cc[c[d>>2]&255](i);if((h|0)==0){break}else{i=h}}}Cc[c[d>>2]&255](g);e=f}e=a+288|0;g=c[a+284>>2]|0;while(1){if((g|0)==0){b=c[e>>2]|0;if((b|0)==0){break}c[e>>2]=0;j=b}else{j=g}b=c[j+8>>2]|0;Cc[c[d>>2]&255](j);g=b}g=c[a+360>>2]|0;if((g|0)!=0){j=g;while(1){g=c[j+4>>2]|0;Cc[c[d>>2]&255](c[j+16>>2]|0);Cc[c[d>>2]&255](j);if((g|0)==0){break}else{j=g}}}j=c[a+356>>2]|0;if((j|0)!=0){g=j;while(1){j=c[g+4>>2]|0;Cc[c[d>>2]&255](c[g+16>>2]|0);Cc[c[d>>2]&255](g);if((j|0)==0){break}else{g=j}}}g=c[a+400>>2]|0;if((g|0)!=0){j=a+420|0;e=g;while(1){g=c[e>>2]|0;Cc[c[(c[j>>2]|0)+8>>2]&255](e);if((g|0)==0){break}else{e=g}}}e=c[a+404>>2]|0;if((e|0)!=0){j=a+420|0;g=e;while(1){e=c[g>>2]|0;Cc[c[(c[j>>2]|0)+8>>2]&255](g);if((e|0)==0){break}else{g=e}}}g=c[a+424>>2]|0;if((g|0)!=0){j=a+444|0;e=g;while(1){g=c[e>>2]|0;Cc[c[(c[j>>2]|0)+8>>2]&255](e);if((g|0)==0){break}else{e=g}}}e=c[a+428>>2]|0;if((e|0)!=0){j=a+444|0;g=e;while(1){e=c[g>>2]|0;Cc[c[(c[j>>2]|0)+8>>2]&255](g);if((e|0)==0){break}else{g=e}}}g=c[a+340>>2]|0;if((g|0)!=0){j=(c[a+460>>2]|0)==0;e=g+20|0;b=c[e>>2]|0;i=g+28|0;h=c[i>>2]|0;k=b+(h<<2)|0;if((h|0)!=0){h=b;while(1){b=h+4|0;l=c[h>>2]|0;do{if((l|0)!=0){if((c[l+16>>2]|0)==0){break}Cc[c[d>>2]&255](c[l+20>>2]|0)}}while(0);if((b|0)==(k|0)){break}else{h=b}}}h=g+8|0;k=g+16|0;l=c[(c[k>>2]|0)+8>>2]|0;f=g|0;m=c[f>>2]|0;if((c[h>>2]|0)==0){n=l;o=m}else{p=0;q=l;l=m;while(1){Cc[q&255](c[l+(p<<2)>>2]|0);m=p+1|0;r=c[(c[k>>2]|0)+8>>2]|0;s=c[f>>2]|0;if(m>>>0<(c[h>>2]|0)>>>0){p=m;q=r;l=s}else{n=r;o=s;break}}}Cc[n&255](o);o=g+36|0;n=c[(c[o>>2]|0)+8>>2]|0;l=c[e>>2]|0;if((c[i>>2]|0)==0){t=n;u=l}else{q=0;p=n;n=l;while(1){Cc[p&255](c[n+(q<<2)>>2]|0);l=q+1|0;h=c[(c[o>>2]|0)+8>>2]|0;f=c[e>>2]|0;if(l>>>0<(c[i>>2]|0)>>>0){q=l;p=h;n=f}else{t=h;u=f;break}}}Cc[t&255](u);u=g+48|0;t=g+56|0;n=c[(c[t>>2]|0)+8>>2]|0;p=g+40|0;q=c[p>>2]|0;if((c[u>>2]|0)==0){v=n;w=q}else{i=0;e=n;n=q;while(1){Cc[e&255](c[n+(i<<2)>>2]|0);q=i+1|0;o=c[(c[t>>2]|0)+8>>2]|0;f=c[p>>2]|0;if(q>>>0<(c[u>>2]|0)>>>0){i=q;e=o;n=f}else{v=o;w=f;break}}}Cc[v&255](w);w=g+68|0;v=g+76|0;n=c[(c[v>>2]|0)+8>>2]|0;e=g+60|0;i=c[e>>2]|0;if((c[w>>2]|0)==0){x=n;y=i}else{u=0;p=n;n=i;while(1){Cc[p&255](c[n+(u<<2)>>2]|0);i=u+1|0;t=c[(c[v>>2]|0)+8>>2]|0;f=c[e>>2]|0;if(i>>>0<(c[w>>2]|0)>>>0){u=i;p=t;n=f}else{x=t;y=f;break}}}Cc[x&255](y);y=c[g+80>>2]|0;if((y|0)!=0){x=g+100|0;n=y;while(1){y=c[n>>2]|0;Cc[c[(c[x>>2]|0)+8>>2]&255](n);if((y|0)==0){break}else{n=y}}}n=c[g+84>>2]|0;if((n|0)!=0){x=g+100|0;y=n;while(1){n=c[y>>2]|0;Cc[c[(c[x>>2]|0)+8>>2]&255](y);if((n|0)==0){break}else{y=n}}}y=c[g+104>>2]|0;if((y|0)!=0){x=g+124|0;n=y;while(1){y=c[n>>2]|0;Cc[c[(c[x>>2]|0)+8>>2]&255](n);if((y|0)==0){break}else{n=y}}}n=c[g+108>>2]|0;if((n|0)!=0){x=g+124|0;y=n;while(1){n=c[y>>2]|0;Cc[c[(c[x>>2]|0)+8>>2]&255](y);if((n|0)==0){break}else{y=n}}}if(j){Cc[c[d>>2]&255](c[g+164>>2]|0);Cc[c[d>>2]&255](c[g+144>>2]|0)}Cc[c[d>>2]&255](g)}Cc[c[d>>2]&255](c[a+376>>2]|0);Cc[c[d>>2]&255](c[a+448>>2]|0);Cc[c[d>>2]&255](c[a+8>>2]|0);Cc[c[d>>2]&255](c[a+44>>2]|0);Cc[c[d>>2]&255](c[a+380>>2]|0);Cc[c[d>>2]&255](c[a+236>>2]|0);g=c[a+248>>2]|0;if((g|0)!=0){Cc[g&255](c[a+240>>2]|0)}Cc[c[d>>2]&255](a);return}function rd(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+4|0;e=a|0;a=(c[d>>2]|0)==(c[e>>2]|0);c[e>>2]=b;if(!a){return}c[d>>2]=b;return}function sd(a,b,d){a=a|0;b=b|0;d=d|0;c[a+52>>2]=b;c[a+56>>2]=d;return}function td(a,b){a=a|0;b=b|0;c[a+60>>2]=b;return}function ud(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;g=i;i=i+8|0;h=g|0;j=b+464|0;k=c[j>>2]|0;do{if((k|0)==3){c[b+268>>2]=33;l=0;i=g;return l|0}else if((k|0)==2){c[b+268>>2]=36;l=0;i=g;return l|0}else if((k|0)==0){if((c[b+460>>2]|0)!=0){break}m=b+472|0;if((c[m>>2]|0)==0){dc(((zc(0)|0)>>>0)%4294967295|0|0);c[m>>2]=yb()|0}if((a[b+232|0]|0)==0){break}if((pd(b,21576)|0)<<24>>24!=0){break}c[b+268>>2]=1;l=0;i=g;return l|0}}while(0);c[j>>2]=1;if((e|0)==0){a[b+468|0]=f;if((f|0)==0){l=1;i=g;return l|0}k=b+24|0;m=c[k>>2]|0;n=b+280|0;c[n>>2]=m;o=c[b+28>>2]|0;c[b+40>>2]=o;p=b+264|0;q=Sc[c[p>>2]&127](b,m,o,k)|0;c[b+268>>2]=q;if((q|0)!=0){c[b+276>>2]=c[b+272>>2];c[p>>2]=84;l=0;i=g;return l|0}p=c[j>>2]|0;if((p|0)==3){q=c[b+144>>2]|0;Vc[c[q+48>>2]&63](q,c[n>>2]|0,c[k>>2]|0,b+392|0);c[n>>2]=c[k>>2];l=2;i=g;return l|0}else if((p|0)==0|(p|0)==1){c[j>>2]=2;l=1;i=g;return l|0}else{l=1;i=g;return l|0}}p=b+24|0;k=b+28|0;if((c[p>>2]|0)!=(c[k>>2]|0)){n=wd(b,e)|0;if((n|0)==0){l=0;i=g;return l|0}tF(n|0,d|0,e)|0;l=xd(b,e,f)|0;i=g;return l|0}n=b+36|0;c[n>>2]=(c[n>>2]|0)+e;n=b+280|0;c[n>>2]=d;a[b+468|0]=f;q=b+264|0;o=c[q>>2]|0;m=d+e|0;r=b+40|0;c[r>>2]=m;s=Sc[o&127](b,d,m,h)|0;d=b+268|0;c[d>>2]=s;if((s|0)!=0){c[b+276>>2]=c[b+272>>2];c[q>>2]=84;l=0;i=g;return l|0}s=c[j>>2]|0;do{if((s|0)==0|(s|0)==1){if((f|0)==0){t=23;break}c[j>>2]=2;l=1;i=g;return l|0}else if((s|0)==3){u=2}else{t=23}}while(0);if((t|0)==23){u=1}s=c[b+144>>2]|0;Vc[c[s+48>>2]&63](s,c[n>>2]|0,c[h>>2]|0,b+392|0);s=c[h>>2]|0;j=m-s|0;f=b+8|0;if((m|0)!=(s|0)){m=c[f>>2]|0;do{if((m|0)==0){v=Ec[c[b+12>>2]&63](e<<1)|0;t=29}else{if((j|0)<=((c[b+32>>2]|0)-m|0)){w=m;x=s;break}v=Oc[c[b+16>>2]&255](m,e<<1)|0;t=29}}while(0);do{if((t|0)==29){if((v|0)!=0){c[f>>2]=v;c[b+32>>2]=v+(e<<1);w=v;x=c[h>>2]|0;break}c[d>>2]=1;c[b+276>>2]=0;c[b+272>>2]=0;c[q>>2]=84;l=0;i=g;return l|0}}while(0);tF(w|0,x|0,j)|0}x=c[f>>2]|0;c[p>>2]=x;p=x+j|0;c[k>>2]=p;c[n>>2]=x;c[r>>2]=p;c[b+272>>2]=x;c[b+276>>2]=x;l=u;i=g;return l|0}function vd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return c[a+268>>2]|0}function wd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=c[a+464>>2]|0;if((d|0)==3){c[a+268>>2]=33;e=0;return e|0}else if((d|0)==2){c[a+268>>2]=36;e=0;return e|0}else{d=a+32|0;f=c[d>>2]|0;g=a+28|0;h=c[g>>2]|0;i=f;j=h;if((i-j|0)>=(b|0)){e=h;return e|0}h=a+24|0;k=c[h>>2]|0;l=k;m=j-l|0;j=m+b|0;b=a+8|0;n=c[b>>2]|0;if((j|0)>(i-n|0)){o=(f|0)==(k|0)?1024:i-l|0;do{o=o<<1;}while((o|0)<(j|0));j=Ec[c[a+12>>2]&63](o)|0;if((j|0)==0){c[a+268>>2]=1;e=0;return e|0}c[d>>2]=j+o;o=c[h>>2]|0;if((o|0)==0){p=0}else{tF(j|0,o|0,(c[g>>2]|0)-o|0)|0;Cc[c[a+20>>2]&255](c[b>>2]|0);p=c[h>>2]|0}o=j+((c[g>>2]|0)-p)|0;c[g>>2]=o;c[b>>2]=j;q=j;r=o}else{Bb(k|0,n|0,m|0);m=c[b>>2]|0;b=m+((c[g>>2]|0)-(c[h>>2]|0))|0;c[g>>2]=b;q=m;r=b}c[h>>2]=q;c[a+276>>2]=0;c[a+272>>2]=0;c[a+280>>2]=0;e=r;return e|0}return 0}function xd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=b+464|0;g=c[f>>2]|0;do{if((g|0)==3){c[b+268>>2]=33;h=0;return h|0}else if((g|0)==2){c[b+268>>2]=36;h=0;return h|0}else if((g|0)==0){if((c[b+460>>2]|0)!=0){break}i=b+472|0;if((c[i>>2]|0)==0){dc(((zc(0)|0)>>>0)%4294967295|0|0);c[i>>2]=yb()|0}if((a[b+232|0]|0)==0){break}if((pd(b,21576)|0)<<24>>24!=0){break}c[b+268>>2]=1;h=0;return h|0}}while(0);c[f>>2]=1;g=b+24|0;i=c[g>>2]|0;j=b+280|0;c[j>>2]=i;k=b+28|0;l=(c[k>>2]|0)+d|0;c[k>>2]=l;c[b+40>>2]=l;k=b+36|0;c[k>>2]=(c[k>>2]|0)+d;a[b+468|0]=e;d=b+264|0;k=Sc[c[d>>2]&127](b,i,l,g)|0;c[b+268>>2]=k;if((k|0)!=0){c[b+276>>2]=c[b+272>>2];c[d>>2]=84;h=0;return h|0}d=c[f>>2]|0;do{if((d|0)==3){m=2}else if((d|0)==0|(d|0)==1){if((e|0)==0){m=1;break}c[f>>2]=2;h=1;return h|0}else{m=1}}while(0);f=c[b+144>>2]|0;Vc[c[f+48>>2]&63](f,c[j>>2]|0,c[g>>2]|0,b+392|0);c[j>>2]=c[g>>2];h=m;return h|0}function yd(a){a=a|0;return c[a+268>>2]|0}function zd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=a+272|0;d=c[b>>2]|0;do{if((d|0)!=0){e=a+280|0;f=c[e>>2]|0;if(d>>>0<f>>>0){break}g=c[a+144>>2]|0;Vc[c[g+48>>2]&63](g,f,d,a+392|0);c[e>>2]=c[b>>2]}}while(0);return(c[a+392>>2]|0)+1|0}function Ad(a){a=a|0;var b=0;if(!((a|0)!=0&a>>>0<41>>>0)){b=0;return b|0}b=c[171440+(a<<2)>>2]|0;return b|0}function Bd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=a+4|0;d=c[b>>2]|0;do{if((d|0)!=0){e=a+16|0;f=c[e>>2]|0;if((f|0)==0){g=a|0;c[g>>2]=d;h=d|0;c[b>>2]=c[h>>2];c[h>>2]=0;h=c[g>>2]|0;g=h+8|0;c[e>>2]=g;c[a+8>>2]=(c[h+4>>2]|0)+(h+8);c[a+12>>2]=g;i=1;return i|0}g=a+8|0;if(((c[g>>2]|0)-f|0)>=(c[d+4>>2]|0)){break}f=d|0;h=c[f>>2]|0;j=a|0;c[f>>2]=c[j>>2];f=c[b>>2]|0;c[j>>2]=f;c[b>>2]=h;h=c[e>>2]|0;tF(f+8|0,h|0,(c[g>>2]|0)-h|0)|0;h=c[j>>2]|0;j=a+12|0;c[j>>2]=(c[j>>2]|0)-(c[e>>2]|0)+(h+8);c[e>>2]=h+8;c[g>>2]=(c[h+4>>2]|0)+(h+8);i=1;return i|0}}while(0);b=a|0;d=c[b>>2]|0;h=a+16|0;g=c[h>>2]|0;e=a+8|0;j=c[e>>2]|0;if((d|0)!=0&(g|0)==(d+8|0)){f=j-g<<1;k=Oc[c[(c[a+20>>2]|0)+4>>2]&255](d,f+8|0)|0;if((k|0)==0){i=0;return i|0}c[b>>2]=k;c[k+4>>2]=f;k=c[b>>2]|0;d=a+12|0;c[d>>2]=(c[d>>2]|0)-(c[h>>2]|0)+(k+8);c[h>>2]=k+8;c[e>>2]=k+8+f;i=1;return i|0}f=a+16|0;k=j-g|0;g=(k|0)<1024?1024:k<<1;k=g+8|0;j=Ec[c[c[a+20>>2]>>2]&63](k)|0;if((j|0)==0){i=0;return i|0}c[j+4>>2]=g;c[j>>2]=c[b>>2];c[b>>2]=j;b=a+12|0;a=c[b>>2]|0;g=c[f>>2]|0;h=j+8|0;if((a|0)==(g|0)){l=a;m=a}else{tF(h|0,g|0,a-g|0)|0;l=c[b>>2]|0;m=c[f>>2]|0}c[b>>2]=j+(l+8-m);c[f>>2]=h;c[e>>2]=j+k;i=1;return i|0}function Cd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;h=e+8|0;i=c[h>>2]|0;do{if((i|0)==0){if((g|0)==0){j=0;return j|0}a[e+4|0]=6;c[h>>2]=64;k=e+16|0;l=Ec[c[c[k>>2]>>2]&63](256)|0;c[e>>2]=l;if((l|0)==0){c[h>>2]=0;j=0;return j|0}vF(l|0,0,256)|0;l=c[b+472>>2]|0;m=a[f]|0;if(m<<24>>24==0){n=l}else{o=f;p=l;l=m;while(1){m=o+1|0;q=(p*1000003|0)^l&255;r=a[m]|0;if(r<<24>>24==0){n=q;break}else{o=m;p=q;l=r}}}s=(c[h>>2]|0)-1&n;t=k}else{l=b+472|0;p=c[l>>2]|0;o=a[f]|0;if(o<<24>>24==0){u=p}else{r=f;q=p;p=o;while(1){m=r+1|0;v=(q*1000003|0)^p&255;w=a[m]|0;if(w<<24>>24==0){u=v;break}else{r=m;q=v;p=w}}}p=i-1|0;q=p&u;r=e|0;k=c[r>>2]|0;w=c[k+(q<<2)>>2]|0;a:do{if((w|0)==0){x=q}else{v=u&-i;m=e+4|0;y=p>>>2;z=0;A=q;B=w;b:while(1){C=c[B>>2]|0;if(o<<24>>24==(a[C]|0)){D=f;E=C;C=o;do{if(C<<24>>24==0){j=B;break b}D=D+1|0;E=E+1|0;C=a[D]|0;}while(C<<24>>24==(a[E]|0))}if(z<<24>>24==0){F=(v>>>(((d[m]|0)-1|0)>>>0)&y|1)&255}else{F=z}E=F&255;C=A-E+(A>>>0<E>>>0?i:0)|0;E=c[k+(C<<2)>>2]|0;if((E|0)==0){x=C;break a}else{z=F;A=C;B=E}}return j|0}}while(0);if((g|0)==0){j=0;return j|0}k=e+4|0;o=a[k]|0;if(((c[e+12>>2]|0)>>>(((o&255)-1|0)>>>0)|0)==0){s=x;t=e+16|0;break}w=o+1&255;o=w&255;q=1<<o;p=q-1|0;B=q<<2;A=e+16|0;z=Ec[c[c[A>>2]>>2]&63](B)|0;y=z;if((z|0)==0){j=0;return j|0}vF(z|0,0,B|0)|0;B=c[h>>2]|0;if((B|0)!=0){z=-q|0;m=o-1|0;v=p>>>2;E=0;C=B;while(1){B=c[(c[r>>2]|0)+(E<<2)>>2]|0;if((B|0)==0){G=C}else{D=c[B>>2]|0;H=c[l>>2]|0;I=a[D]|0;if(I<<24>>24==0){J=H}else{K=D;D=H;H=I;while(1){I=K+1|0;L=(D*1000003|0)^H&255;M=a[I]|0;if(M<<24>>24==0){J=L;break}else{K=I;D=L;H=M}}}H=J&p;D=y+(H<<2)|0;if((c[D>>2]|0)==0){N=D}else{D=((J&z)>>>(m>>>0)&v|1)&255;K=0;M=H;while(1){H=K<<24>>24==0?D:K;L=H&255;I=M+(M>>>0<L>>>0?q:0)-L|0;L=y+(I<<2)|0;if((c[L>>2]|0)==0){N=L;break}else{K=H;M=I}}}c[N>>2]=B;G=c[h>>2]|0}M=E+1|0;if(M>>>0<G>>>0){E=M;C=G}else{break}}}Cc[c[(c[A>>2]|0)+8>>2]&255](c[r>>2]|0);c[r>>2]=y;a[k]=w;c[h>>2]=q;C=p&u;if((c[y+(C<<2)>>2]|0)==0){s=C;t=A;break}E=((u&-q)>>>((o-1|0)>>>0)&p>>>2|1)&255;v=0;m=C;while(1){C=v<<24>>24==0?E:v;z=C&255;l=m+(m>>>0<z>>>0?q:0)-z|0;if((c[y+(l<<2)>>2]|0)==0){s=l;t=A;break}else{v=C;m=l}}}}while(0);u=Ec[c[c[t>>2]>>2]&63](g)|0;t=e|0;c[(c[t>>2]|0)+(s<<2)>>2]=u;u=c[(c[t>>2]|0)+(s<<2)>>2]|0;if((u|0)==0){j=0;return j|0}vF(u|0,0,g|0)|0;c[c[(c[t>>2]|0)+(s<<2)>>2]>>2]=f;f=e+12|0;c[f>>2]=(c[f>>2]|0)+1;j=c[(c[t>>2]|0)+(s<<2)>>2]|0;return j|0}function Dd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;h=a[f]|0;i=h<<24>>24==0;j=c[d>>2]|0;do{if(i){if((j|0)==0){k=0;l=d|0;m=12;break}else{n=28;return n|0}}else{o=d|0;if((j|0)==0){p=o;m=14;break}if((a[j]|0)!=120){k=0;l=o;m=12;break}if((a[j+1|0]|0)!=109){k=0;l=o;m=12;break}if((a[j+2|0]|0)!=108){k=0;l=o;m=12;break}q=a[j+3|0]|0;do{if(q<<24>>24==110){if((a[j+4|0]|0)!=115){break}if((a[j+5|0]|0)==0){n=39}else{break}return n|0}}while(0);k=q<<24>>24==0|0;l=o;m=12}}while(0);do{if((m|0)==12){if(i){r=k;s=l;t=0;u=1;m=30;break}if(k<<24>>24==0){p=l;m=14;break}else{v=1;w=0;x=h;y=1}while(1){do{if(y){if((w|0)<=36){if(x<<24>>24==(a[74952+w|0]|0)){z=v;break}}z=0}else{z=0}}while(0);j=w+1|0;A=a[f+j|0]|0;B=z<<24>>24!=0;if(A<<24>>24==0){C=1;D=j;E=B;F=l;G=k;m=29;break}else{v=z;w=j;x=A;y=B}}}}while(0);if((m|0)==14){y=1;x=1;w=0;z=h;h=1;while(1){do{if(h){if((w|0)<=36){if(z<<24>>24==(a[74952+w|0]|0)){H=y;break}}H=0}else{H=0}}while(0);do{if(x<<24>>24==0){I=0}else{if((w|0)<=29){if(z<<24>>24==(a[74920+w|0]|0)){I=x;break}}I=0}}while(0);v=w+1|0;k=a[f+v|0]|0;l=H<<24>>24!=0;if(k<<24>>24==0){C=I;D=v;E=l;F=p;G=0;m=29;break}else{y=H;x=I;w=v;z=k;h=l}}}if((m|0)==29){if(E){r=G;s=F;t=D;u=C;m=30}else{J=0;K=G;L=F;M=D;N=C}}if((m|0)==30){J=(t|0)==36|0;K=r;L=s;M=t;N=u}if(N<<24>>24==0){O=0}else{O=(M|0)==29|0}if((K&255|0)!=(J|0)){n=K<<24>>24!=0?38:40;return n|0}if(O<<24>>24!=0){n=40;return n|0}O=b+456|0;K=((a[O]|0)!=0)+M|0;M=b+360|0;J=c[M>>2]|0;do{if((J|0)==0){N=b+12|0;u=Ec[c[N>>2]&63](28)|0;if((u|0)==0){n=1;return n|0}t=K+24|0;s=Ec[c[N>>2]&63](t)|0;c[u+16>>2]=s;if((s|0)!=0){c[u+24>>2]=t;P=u;break}Cc[c[b+20>>2]&255](u);n=1;return n|0}else{u=J+24|0;do{if((K|0)>(c[u>>2]|0)){t=J+16|0;s=K+24|0;N=Oc[c[b+16>>2]&255](c[t>>2]|0,s)|0;if((N|0)==0){n=1;return n|0}else{c[t>>2]=N;c[u>>2]=s;break}}}while(0);c[M>>2]=c[J+4>>2];P=J}}while(0);c[P+20>>2]=K;J=P+16|0;tF(c[J>>2]|0,f|0,K)|0;M=a[O]|0;if(M<<24>>24!=0){a[(c[J>>2]|0)+(K-1)|0]=M}c[P>>2]=d;c[P+12>>2]=e;M=d+4|0;c[P+8>>2]=c[M>>2];if((a[f]|0)==0){if(((c[b+340>>2]|0)+132|0)==(d|0)){Q=0}else{m=49}}else{m=49}if((m|0)==49){Q=P}c[M>>2]=Q;c[P+4>>2]=c[g>>2];c[g>>2]=P;if((e|0)==0){n=0;return n|0}e=c[b+100>>2]|0;if((e|0)==0){n=0;return n|0}Tc[e&127](c[b+4>>2]|0,c[L>>2]|0,(c[M>>2]|0)!=0?f:0);n=0;return n|0}function Ed(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;g=i;i=i+80|0;h=g|0;j=g+8|0;k=g+16|0;l=g+24|0;m=g+32|0;n=g+40|0;o=g+48|0;p=g+56|0;q=g+64|0;r=g+72|0;c[n>>2]=0;c[o>>2]=0;c[p>>2]=0;c[r>>2]=-1;s=b+144|0;t=b+272|0;u=(d|0)!=0;if((cf(d,c[s>>2]|0,e,f,t,p,q,n,o,r)|0)==0){v=u?31:30;i=g;return v|0}do{if(!u){if((c[r>>2]|0)!=1){break}a[(c[b+340>>2]|0)+130|0]=1}}while(0);u=b+140|0;do{if((c[u>>2]|0)==0){d=b+80|0;w=c[d>>2]|0;if((w|0)==0){x=0;y=0;break}z=c[s>>2]|0;c[j>>2]=e;if((a[z+68|0]|0)!=0){Tc[w&127](c[b+4>>2]|0,e,f-e|0);x=0;y=0;break}w=b+276|0;A=b+44|0;B=z+56|0;C=b+48|0;D=b+4|0;while(1){c[k>>2]=c[A>>2];Bc[c[B>>2]&63](z,j,f,k,c[C>>2]|0);c[w>>2]=c[j>>2];E=c[A>>2]|0;Tc[c[d>>2]&127](c[D>>2]|0,E,(c[k>>2]|0)-E|0);c[t>>2]=c[j>>2];if((c[j>>2]|0)==(f|0)){x=0;y=0;break}}}else{D=c[n>>2]|0;do{if((D|0)==0){F=0}else{d=b+424|0;A=c[s>>2]|0;w=D+(Oc[c[A+28>>2]&255](A,D)|0)|0;c[m>>2]=D;C=b+436|0;do{if((c[C>>2]|0)==0){if((Bd(d)|0)<<24>>24==0){v=1}else{break}i=g;return v|0}}while(0);z=A+56|0;B=b+432|0;while(1){Bc[c[z>>2]&63](A,m,w,C,c[B>>2]|0);if((c[m>>2]|0)==(w|0)){break}if((Bd(d)|0)<<24>>24==0){v=1;G=65;break}}if((G|0)==65){i=g;return v|0}w=b+440|0;if((c[w>>2]|0)==0){v=1;i=g;return v|0}A=c[C>>2]|0;do{if((A|0)==(c[B>>2]|0)){if((Bd(d)|0)<<24>>24==0){v=1;i=g;return v|0}else{H=c[C>>2]|0;break}}else{H=A}}while(0);c[C>>2]=H+1;a[H]=0;A=c[w>>2]|0;if((A|0)==0){v=1;i=g;return v|0}else{c[w>>2]=c[C>>2];F=A;break}}}while(0);D=c[p>>2]|0;do{if((D|0)==0){I=0}else{A=b+424|0;d=c[s>>2]|0;B=(c[q>>2]|0)+(-(c[d+64>>2]|0)|0)|0;c[l>>2]=D;z=b+436|0;do{if((c[z>>2]|0)==0){if((Bd(A)|0)<<24>>24==0){v=1}else{break}i=g;return v|0}}while(0);C=d+56|0;w=b+432|0;while(1){Bc[c[C>>2]&63](d,l,B,z,c[w>>2]|0);if((c[l>>2]|0)==(B|0)){break}if((Bd(A)|0)<<24>>24==0){v=1;G=65;break}}if((G|0)==65){i=g;return v|0}B=b+440|0;if((c[B>>2]|0)==0){v=1;i=g;return v|0}d=c[z>>2]|0;do{if((d|0)==(c[w>>2]|0)){if((Bd(A)|0)<<24>>24==0){v=1;i=g;return v|0}else{J=c[z>>2]|0;break}}else{J=d}}while(0);c[z>>2]=J+1;a[J]=0;d=c[B>>2]|0;if((d|0)==0){v=1}else{I=d;break}i=g;return v|0}}while(0);Vc[c[u>>2]&63](c[b+4>>2]|0,I,F,c[r>>2]|0);x=I;y=F}}while(0);do{if((c[b+228>>2]|0)==0){F=c[o>>2]|0;if((F|0)!=0){if((c[F+64>>2]|0)==(c[(c[s>>2]|0)+64>>2]|0)){c[s>>2]=F;break}c[t>>2]=c[n>>2];v=19;i=g;return v|0}F=c[n>>2]|0;if((F|0)==0){break}do{if((y|0)==0){I=b+424|0;r=c[s>>2]|0;u=F+(Oc[c[r+28>>2]&255](r,F)|0)|0;c[h>>2]=F;J=b+436|0;do{if((c[J>>2]|0)==0){if((Bd(I)|0)<<24>>24==0){v=1}else{break}i=g;return v|0}}while(0);B=r+56|0;z=b+432|0;while(1){Bc[c[B>>2]&63](r,h,u,J,c[z>>2]|0);if((c[h>>2]|0)==(u|0)){break}if((Bd(I)|0)<<24>>24==0){v=1;G=65;break}}if((G|0)==65){i=g;return v|0}u=b+440|0;if((c[u>>2]|0)==0){v=1;i=g;return v|0}r=c[J>>2]|0;do{if((r|0)==(c[z>>2]|0)){if((Bd(I)|0)<<24>>24==0){v=1;i=g;return v|0}else{K=c[J>>2]|0;break}}else{K=r}}while(0);c[J>>2]=K+1;a[K]=0;r=c[u>>2]|0;if((r|0)==0){v=1}else{L=r;break}i=g;return v|0}else{L=y}}while(0);F=Td(b,L)|0;r=b+428|0;I=c[r>>2]|0;z=b+424|0;B=c[z>>2]|0;do{if((I|0)==0){c[r>>2]=B}else{if((B|0)==0){break}else{M=B;N=I}while(1){l=M|0;q=c[l>>2]|0;c[l>>2]=N;c[r>>2]=M;if((q|0)==0){break}else{N=M;M=q}}}}while(0);c[z>>2]=0;c[b+440>>2]=0;c[b+436>>2]=0;c[b+432>>2]=0;if((F|0)!=18){v=F;i=g;return v|0}c[t>>2]=c[n>>2];v=18;i=g;return v|0}}while(0);if((y|0)==0&(x|0)==0){v=0;i=g;return v|0}x=b+428|0;y=c[x>>2]|0;n=b+424|0;t=c[n>>2]|0;do{if((y|0)==0){c[x>>2]=t}else{if((t|0)==0){break}else{O=t;P=y}while(1){M=O|0;N=c[M>>2]|0;c[M>>2]=P;c[x>>2]=O;if((N|0)==0){break}else{P=O;O=N}}}}while(0);c[n>>2]=0;c[b+440>>2]=0;c[b+436>>2]=0;c[b+432>>2]=0;v=0;i=g;return v|0}function Fd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=Gd(b,1,c[b+144>>2]|0,d,e,f,(a[b+468|0]|0)==0|0)|0;do{if((g|0)==0){if((Hd(b)|0)<<24>>24==0){h=1}else{break}return h|0}}while(0);h=g;return h|0}function Gd(b,e,f,g,h,j,k){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Fc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Pc=0,Qc=0,Rc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0;l=i;i=i+360|0;m=l|0;n=l+8|0;o=l+16|0;p=l+24|0;q=l+32|0;r=l+40|0;s=l+48|0;t=l+56|0;u=l+64|0;v=l+72|0;w=l+80|0;x=l+88|0;y=l+96|0;z=l+104|0;A=l+112|0;B=l+120|0;C=l+128|0;D=l+136|0;E=l+144|0;F=l+152|0;G=l+160|0;H=l+168|0;I=l+176|0;J=l+184|0;K=l+192|0;L=l+200|0;M=l+208|0;N=l+216|0;O=l+224|0;P=l+232|0;Q=l+240|0;R=l+248|0;S=l+256|0;T=l+264|0;U=l+272|0;V=l+280|0;W=l+288|0;X=l+296|0;Y=l+304|0;Z=l+336|0;_=l+344|0;$=l+352|0;c[R>>2]=g;aa=b+340|0;ba=c[aa>>2]|0;ca=b+144|0;if((c[ca>>2]|0)==(f|0)){da=b+272|0;ea=b+276|0;fa=da;ga=ea;ha=da;ia=ea;ja=b+284|0}else{ea=b+284|0;da=c[ea>>2]|0;fa=da|0;ga=da+4|0;ha=b+272|0;ia=b+276|0;ja=ea}c[fa>>2]=g;g=f+4|0;ea=b+80|0;da=f+68|0;ka=b+44|0;la=f+56|0;ma=b+48|0;na=b+4|0;oa=b+464|0;pa=f+44|0;qa=f+64|0;ra=ba+80|0;sa=ba+92|0;ta=ba+88|0;ua=ba+96|0;va=ba+8|0;wa=ba+129|0;xa=b+112|0;ya=b+400|0;za=b+412|0;Aa=b+408|0;Ba=b+456|0;Ca=b+416|0;Da=b+116|0;Ea=b+292|0;Fa=b+120|0;Ga=b+288|0;Ha=b+12|0;Ia=b+296|0;Ja=b+224|0;Ka=b+264|0;La=ba+130|0;Ma=b+472|0;Na=ba|0;Oa=ba+4|0;ba=b+60|0;Pa=b+352|0;Qa=b+348|0;Ra=f+28|0;Sa=b+16|0;Ta=b+52|0;Ua=b+404|0;Va=b+400|0;Wa=b+376|0;Xa=Y|0;Ya=b+56|0;Za=ya|0;_a=b+104|0;$a=b+360|0;ab=b+232|0;bb=b+233|0;cb=f+40|0;db=l+328|0;eb=b+72|0;a:while(1){fb=c[R>>2]|0;c[S>>2]=fb;gb=Sc[c[g>>2]&127](f,fb,h,S)|0;c[ga>>2]=c[S>>2];b:do{switch(gb|0){case-2:{hb=28;break a;break};case-4:{hb=20;break a;break};case-1:{hb=26;break a;break};case 9:{fb=c[qa>>2]|0;ib=(Hc[c[pa>>2]&63](f,(c[R>>2]|0)+fb|0,(c[S>>2]|0)+(-fb|0)|0)|0)&255;a[U]=ib;if(ib<<24>>24!=0){ib=c[ba>>2]|0;if((ib|0)!=0){Tc[ib&127](c[na>>2]|0,U,1);break b}ib=c[ea>>2]|0;if((ib|0)==0){break b}fb=c[R>>2]|0;jb=c[S>>2]|0;c[L>>2]=fb;if((a[da]|0)!=0){Tc[ib&127](c[na>>2]|0,fb,jb-fb|0);break b}if((c[ca>>2]|0)==(f|0)){kb=ia;lb=ha}else{fb=c[ja>>2]|0;kb=fb+4|0;lb=fb|0}while(1){c[M>>2]=c[ka>>2];Bc[c[la>>2]&63](f,L,jb,M,c[ma>>2]|0);c[kb>>2]=c[L>>2];fb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,fb,(c[M>>2]|0)-fb|0);c[lb>>2]=c[L>>2];if((c[L>>2]|0)==(jb|0)){break b}}}jb=c[qa>>2]|0;fb=(c[S>>2]|0)+(-jb|0)|0;c[K>>2]=(c[R>>2]|0)+jb;if((c[sa>>2]|0)==0){if((Bd(ra)|0)<<24>>24==0){mb=1;hb=320;break a}}while(1){Bc[c[la>>2]&63](f,K,fb,sa,c[ta>>2]|0);if((c[K>>2]|0)==(fb|0)){break}if((Bd(ra)|0)<<24>>24==0){mb=1;hb=320;break a}}if((c[ua>>2]|0)==0){mb=1;hb=320;break a}fb=c[sa>>2]|0;if((fb|0)==(c[ta>>2]|0)){if((Bd(ra)|0)<<24>>24==0){mb=1;hb=320;break a}nb=c[sa>>2]|0}else{nb=fb}c[sa>>2]=nb+1;a[nb]=0;fb=c[ua>>2]|0;if((fb|0)==0){mb=1;hb=320;break a}jb=c[va>>2]|0;c:do{if((jb|0)==0){ob=0}else{ib=c[Ma>>2]|0;pb=a[fb]|0;if(pb<<24>>24==0){qb=ib}else{rb=fb;sb=ib;ib=pb;while(1){tb=rb+1|0;ub=(sb*1000003|0)^ib&255;vb=a[tb]|0;if(vb<<24>>24==0){qb=ub;break}else{rb=tb;sb=ub;ib=vb}}}ib=jb-1|0;sb=qb&ib;rb=c[Na>>2]|0;vb=c[rb+(sb<<2)>>2]|0;if((vb|0)==0){ob=0;break}ub=qb&-jb;tb=ib>>>2;ib=0;wb=sb;sb=vb;while(1){vb=c[sb>>2]|0;if(pb<<24>>24==(a[vb]|0)){xb=fb;yb=vb;vb=pb;do{if(vb<<24>>24==0){ob=sb;break c}xb=xb+1|0;yb=yb+1|0;vb=a[xb]|0;}while(vb<<24>>24==(a[yb]|0))}if(ib<<24>>24==0){zb=(ub>>>(((d[Oa]|0)-1|0)>>>0)&tb|1)&255}else{zb=ib}yb=zb&255;vb=(wb>>>0<yb>>>0?jb:0)+(wb-yb)|0;yb=c[rb+(vb<<2)>>2]|0;if((yb|0)==0){ob=0;break}else{ib=zb;wb=vb;sb=yb}}}}while(0);jb=ob;c[sa>>2]=fb;do{if((a[wa]|0)==0){hb=62}else{if((a[La]|0)!=0){hb=62;break}if((ob|0)!=0){break}sb=c[Fa>>2]|0;if((sb|0)!=0){Tc[sb&127](c[na>>2]|0,fb,0);break b}sb=c[ea>>2]|0;if((sb|0)==0){break b}wb=c[R>>2]|0;ib=c[S>>2]|0;c[I>>2]=wb;if((a[da]|0)!=0){Tc[sb&127](c[na>>2]|0,wb,ib-wb|0);break b}if((c[ca>>2]|0)==(f|0)){Ab=ia;Bb=ha}else{wb=c[ja>>2]|0;Ab=wb+4|0;Bb=wb|0}while(1){c[J>>2]=c[ka>>2];Bc[c[la>>2]&63](f,I,ib,J,c[ma>>2]|0);c[Ab>>2]=c[I>>2];wb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,wb,(c[J>>2]|0)-wb|0);c[Bb>>2]=c[I>>2];if((c[I>>2]|0)==(ib|0)){break b}}}}while(0);if((hb|0)==62){hb=0;if((ob|0)==0){mb=11;hb=320;break a}if((a[jb+34|0]|0)==0){mb=24;hb=320;break a}}Cb=ob+32|0;if((a[Cb]|0)!=0){mb=12;hb=320;break a}if((c[ob+28>>2]|0)!=0){mb=15;hb=320;break a}fb=ob+4|0;if((c[fb>>2]|0)!=0){if((a[Ea]|0)!=0){ib=c[Ga>>2]|0;if((ib|0)==0){wb=Ec[c[Ha>>2]&63](24)|0;if((wb|0)==0){mb=1;hb=320;break a}else{Db=wb}}else{c[Ga>>2]=c[ib+8>>2];Db=ib}a[Cb]=1;ib=ob+12|0;c[ib>>2]=0;wb=Db+8|0;c[wb>>2]=c[ja>>2];c[ja>>2]=Db;c[Db+12>>2]=jb;c[Db+16>>2]=c[Ia>>2];a[Db+20|0]=0;c[Db>>2]=0;c[Db+4>>2]=0;sb=c[fb>>2]|0;fb=sb+(c[ob+8>>2]|0)|0;rb=Gd(b,c[Ia>>2]|0,c[Ja>>2]|0,sb,fb,m,0)|0;if((rb|0)!=0){mb=rb;hb=320;break a}rb=c[m>>2]|0;do{if((fb|0)!=(rb|0)){if((c[oa>>2]|0)!=3){break}c[ib>>2]=rb-sb;c[Ka>>2]=86;break b}}while(0);a[Cb]=0;c[ja>>2]=c[wb>>2];c[wb>>2]=c[Ga>>2];c[Ga>>2]=Db;break b}sb=c[Fa>>2]|0;if((sb|0)!=0){Tc[sb&127](c[na>>2]|0,c[ob>>2]|0,0);break b}sb=c[ea>>2]|0;if((sb|0)==0){break b}rb=c[R>>2]|0;ib=c[S>>2]|0;c[G>>2]=rb;if((a[da]|0)!=0){Tc[sb&127](c[na>>2]|0,rb,ib-rb|0);break b}if((c[ca>>2]|0)==(f|0)){Eb=ia;Fb=ha}else{rb=c[ja>>2]|0;Eb=rb+4|0;Fb=rb|0}while(1){c[H>>2]=c[ka>>2];Bc[c[la>>2]&63](f,G,ib,H,c[ma>>2]|0);c[Eb>>2]=c[G>>2];rb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,rb,(c[H>>2]|0)-rb|0);c[Fb>>2]=c[G>>2];if((c[G>>2]|0)==(ib|0)){break b}}}if((c[xa>>2]|0)==0){ib=c[ea>>2]|0;if((ib|0)==0){break b}wb=c[R>>2]|0;rb=c[S>>2]|0;c[E>>2]=wb;if((a[da]|0)!=0){Tc[ib&127](c[na>>2]|0,wb,rb-wb|0);break b}if((c[ca>>2]|0)==(f|0)){Gb=ia;Hb=ha}else{wb=c[ja>>2]|0;Gb=wb+4|0;Hb=wb|0}while(1){c[F>>2]=c[ka>>2];Bc[c[la>>2]&63](f,E,rb,F,c[ma>>2]|0);c[Gb>>2]=c[E>>2];wb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,wb,(c[F>>2]|0)-wb|0);c[Hb>>2]=c[E>>2];if((c[E>>2]|0)==(rb|0)){break b}}}a[Cb]=1;rb=c[aa>>2]|0;wb=rb+136|0;do{if((c[wb>>2]|0)==0){Ib=0}else{ib=c[za>>2]|0;if((ib|0)==(c[Aa>>2]|0)){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}Jb=c[za>>2]|0}else{Jb=ib}c[za>>2]=Jb+1;a[Jb]=61;ib=(((a[Ba]|0)!=0)<<31>>31)+(c[(c[wb>>2]|0)+20>>2]|0)|0;if((ib|0)>0){Kb=0}else{Ib=1;break}while(1){sb=c[za>>2]|0;if((sb|0)==(c[Aa>>2]|0)){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}Lb=c[za>>2]|0}else{Lb=sb}sb=a[(c[(c[wb>>2]|0)+16>>2]|0)+Kb|0]|0;c[za>>2]=Lb+1;a[Lb]=sb;sb=Kb+1|0;if((sb|0)<(ib|0)){Kb=sb}else{Ib=1;break}}}}while(0);wb=c[rb+60>>2]|0;ib=c[rb+68>>2]|0;sb=wb+(ib<<2)|0;d:do{if((ib|0)==0){Mb=Ib}else{fb=wb;jb=Ib;while(1){tb=fb;while(1){Nb=tb+4|0;Ob=c[tb>>2]|0;if((Ob|0)!=0){Pb=Ob+4|0;if((c[Pb>>2]|0)!=0){break}}if((Nb|0)==(sb|0)){Mb=jb;break d}else{tb=Nb}}if(jb<<24>>24!=0){tb=c[za>>2]|0;if((tb|0)==(c[Aa>>2]|0)){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}Qb=c[za>>2]|0}else{Qb=tb}c[za>>2]=Qb+1;a[Qb]=12}tb=c[Ob>>2]|0;ub=a[tb]|0;pb=c[za>>2]|0;yb=(pb|0)==(c[Aa>>2]|0);if(ub<<24>>24==0){Rb=yb;Sb=pb}else{vb=tb;tb=yb;yb=ub;ub=pb;while(1){if(tb){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}Tb=a[vb]|0;Ub=c[za>>2]|0}else{Tb=yb;Ub=ub}c[za>>2]=Ub+1;a[Ub]=Tb;pb=vb+1|0;xb=a[pb]|0;Vb=c[za>>2]|0;Wb=(Vb|0)==(c[Aa>>2]|0);if(xb<<24>>24==0){Rb=Wb;Sb=Vb;break}else{vb=pb;tb=Wb;yb=xb;ub=Vb}}}if(Rb){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}Xb=c[za>>2]|0}else{Xb=Sb}c[za>>2]=Xb+1;a[Xb]=61;ub=(((a[Ba]|0)!=0)<<31>>31)+(c[(c[Pb>>2]|0)+20>>2]|0)|0;if((ub|0)>0){yb=0;do{tb=c[za>>2]|0;if((tb|0)==(c[Aa>>2]|0)){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}Yb=c[za>>2]|0}else{Yb=tb}tb=a[(c[(c[Pb>>2]|0)+16>>2]|0)+yb|0]|0;c[za>>2]=Yb+1;a[Yb]=tb;yb=yb+1|0;}while((yb|0)<(ub|0))}if((Nb|0)==(sb|0)){Mb=1;break}else{fb=Nb;jb=1}}}}while(0);sb=c[rb>>2]|0;wb=c[rb+8>>2]|0;ib=sb+(wb<<2)|0;e:do{if((wb|0)!=0){jb=sb;fb=Mb;while(1){ub=jb;while(1){Zb=ub+4|0;_b=c[ub>>2]|0;if((_b|0)!=0){if((a[_b+32|0]|0)!=0){break}}if((Zb|0)==(ib|0)){break e}else{ub=Zb}}if(fb<<24>>24!=0){ub=c[za>>2]|0;if((ub|0)==(c[Aa>>2]|0)){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}$b=c[za>>2]|0}else{$b=ub}c[za>>2]=$b+1;a[$b]=12}ub=c[_b>>2]|0;yb=a[ub]|0;if(yb<<24>>24!=0){tb=ub;ub=yb;do{yb=c[za>>2]|0;if((yb|0)==(c[Aa>>2]|0)){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}ac=a[tb]|0;bc=c[za>>2]|0}else{ac=ub;bc=yb}c[za>>2]=bc+1;a[bc]=ac;tb=tb+1|0;ub=a[tb]|0;}while(ub<<24>>24!=0)}if((Zb|0)==(ib|0)){break}else{jb=Zb;fb=1}}}}while(0);ib=c[za>>2]|0;if((ib|0)==(c[Aa>>2]|0)){if((Bd(ya)|0)<<24>>24==0){hb=148;break a}cc=c[za>>2]|0}else{cc=ib}c[za>>2]=cc+1;a[cc]=0;ib=c[Ca>>2]|0;a[Cb]=0;if((ib|0)==0){mb=1;hb=320;break a}if((Gc[c[xa>>2]&127](c[Da>>2]|0,ib,c[ob+20>>2]|0,c[ob+16>>2]|0,c[ob+24>>2]|0)|0)==0){mb=21;hb=320;break a}c[za>>2]=c[Ca>>2];break};case 0:{hb=25;break a;break};case-3:{hb=6;break a;break};case 2:case 1:{ib=c[Pa>>2]|0;if((ib|0)==0){dc=Ec[c[Ha>>2]&63](48)|0;if((dc|0)==0){mb=1;hb=320;break a}sb=Ec[c[Ha>>2]&63](32)|0;c[dc+36>>2]=sb;if((sb|0)==0){hb=163;break a}c[dc+40>>2]=sb+32;ec=dc}else{c[Pa>>2]=c[ib>>2];ec=ib}ib=ec+44|0;c[ib>>2]=0;c[ec>>2]=c[Qa>>2];c[Qa>>2]=ec;sb=ec+12|0;c[ec+16>>2]=0;c[ec+20>>2]=0;wb=(c[R>>2]|0)+(c[qa>>2]|0)|0;rb=ec+4|0;c[rb>>2]=wb;fb=ec+8|0;c[fb>>2]=Oc[c[Ra>>2]&255](f,wb)|0;c[Ia>>2]=(c[Ia>>2]|0)+1;wb=c[rb>>2]|0;rb=wb+(c[fb>>2]|0)|0;c[W>>2]=wb;wb=ec+36|0;fb=ec+40|0;jb=c[wb>>2]|0;while(1){c[V>>2]=jb;Bc[c[la>>2]&63](f,W,rb,V,(c[fb>>2]|0)-1|0);fc=c[wb>>2]|0;ub=fc;gc=(c[V>>2]|0)-ub|0;if((c[W>>2]|0)==(rb|0)){break}tb=(c[fb>>2]|0)-ub<<1;ub=Oc[c[Sa>>2]&255](fc,tb)|0;if((ub|0)==0){mb=1;hb=320;break a}c[wb>>2]=ub;c[fb>>2]=ub+tb;jb=ub+gc|0}c[ec+24>>2]=gc;jb=sb|0;c[jb>>2]=fc;a[c[V>>2]|0]=0;fb=Id(b,f,c[R>>2]|0,sb,ib)|0;if((fb|0)!=0){mb=fb;hb=320;break a}fb=c[Ta>>2]|0;do{if((fb|0)==0){wb=c[ea>>2]|0;if((wb|0)==0){break}rb=c[R>>2]|0;ub=c[S>>2]|0;c[C>>2]=rb;if((a[da]|0)!=0){Tc[wb&127](c[na>>2]|0,rb,ub-rb|0);break}if((c[ca>>2]|0)==(f|0)){hc=ia;ic=ha}else{rb=c[ja>>2]|0;hc=rb+4|0;ic=rb|0}do{c[D>>2]=c[ka>>2];Bc[c[la>>2]&63](f,C,ub,D,c[ma>>2]|0);c[hc>>2]=c[C>>2];rb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,rb,(c[D>>2]|0)-rb|0);c[ic>>2]=c[C>>2];}while((c[C>>2]|0)!=(ub|0))}else{Tc[fb&127](c[na>>2]|0,c[jb>>2]|0,c[Wa>>2]|0)}}while(0);jb=c[Ua>>2]|0;fb=c[Va>>2]|0;do{if((jb|0)==0){c[Ua>>2]=fb}else{if((fb|0)==0){break}else{jc=fb;kc=jb}while(1){ib=jc|0;sb=c[ib>>2]|0;c[ib>>2]=kc;c[Ua>>2]=jc;if((sb|0)==0){break}else{kc=jc;jc=sb}}}}while(0);c[Va>>2]=0;c[Ca>>2]=0;c[za>>2]=0;c[Aa>>2]=0;break};case 4:case 3:{jb=c[R>>2]|0;fb=c[qa>>2]|0;sb=jb+fb|0;c[X>>2]=0;ib=jb+((Oc[c[Ra>>2]&255](f,sb)|0)+fb)|0;c[B>>2]=sb;if((c[za>>2]|0)==0){if((Bd(ya)|0)<<24>>24==0){hb=192;break a}}while(1){Bc[c[la>>2]&63](f,B,ib,za,c[Aa>>2]|0);if((c[B>>2]|0)==(ib|0)){break}if((Bd(ya)|0)<<24>>24==0){hb=192;break a}}if((c[Ca>>2]|0)==0){hb=192;break a}ib=c[za>>2]|0;if((ib|0)==(c[Aa>>2]|0)){if((Bd(ya)|0)<<24>>24==0){hb=192;break a}lc=c[za>>2]|0}else{lc=ib}c[za>>2]=lc+1;a[lc]=0;ib=c[Ca>>2]|0;c[Xa>>2]=ib;if((ib|0)==0){mb=1;hb=320;break a}c[Ca>>2]=c[za>>2];ib=Id(b,f,c[R>>2]|0,Y,X)|0;if((ib|0)!=0){mb=ib;hb=320;break a}c[Ca>>2]=c[za>>2];ib=c[Ta>>2]|0;if((ib|0)==0){mc=1}else{Tc[ib&127](c[na>>2]|0,c[Xa>>2]|0,c[Wa>>2]|0);mc=0}ib=c[Ya>>2]|0;do{if((ib|0)==0){if(mc<<24>>24==0){break}sb=c[ea>>2]|0;if((sb|0)==0){break}fb=c[R>>2]|0;jb=c[S>>2]|0;c[z>>2]=fb;if((a[da]|0)!=0){Tc[sb&127](c[na>>2]|0,fb,jb-fb|0);break}if((c[ca>>2]|0)==(f|0)){nc=ia;oc=ha}else{fb=c[ja>>2]|0;nc=fb+4|0;oc=fb|0}do{c[A>>2]=c[ka>>2];Bc[c[la>>2]&63](f,z,jb,A,c[ma>>2]|0);c[nc>>2]=c[z>>2];fb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,fb,(c[A>>2]|0)-fb|0);c[oc>>2]=c[z>>2];}while((c[z>>2]|0)!=(jb|0))}else{if((c[Ta>>2]|0)==0){pc=ib}else{c[fa>>2]=c[ga>>2];pc=c[Ya>>2]|0}Dc[pc&63](c[na>>2]|0,c[Xa>>2]|0)}}while(0);ib=c[Ua>>2]|0;jb=c[Za>>2]|0;do{if((ib|0)==0){c[Ua>>2]=jb}else{if((jb|0)==0){break}else{qc=jb;rc=ib}while(1){fb=qc|0;sb=c[fb>>2]|0;c[fb>>2]=rc;c[Ua>>2]=qc;if((sb|0)==0){break}else{rc=qc;qc=sb}}}}while(0);c[Za>>2]=0;c[Ca>>2]=0;c[za>>2]=0;c[Aa>>2]=0;ib=c[X>>2]|0;if((ib|0)!=0){jb=ib;while(1){ib=c[_a>>2]|0;if((ib|0)==0){sc=jb|0}else{sb=jb|0;Dc[ib&63](c[na>>2]|0,c[c[sb>>2]>>2]|0);sc=sb}sb=c[jb+4>>2]|0;c[jb+4>>2]=c[$a>>2];c[$a>>2]=jb;c[(c[sc>>2]|0)+4>>2]=c[jb+8>>2];if((sb|0)==0){break}else{jb=sb}}c[X>>2]=0}if((c[Ia>>2]|0)==0){hb=220;break a}break};case 5:{if((c[Ia>>2]|0)==(e|0)){mb=13;hb=320;break a}jb=c[Qa>>2]|0;sb=jb|0;c[Qa>>2]=c[sb>>2];c[sb>>2]=c[Pa>>2];c[Pa>>2]=jb;tc=(c[R>>2]|0)+(c[qa>>2]<<1)|0;sb=Oc[c[Ra>>2]&255](f,tc)|0;if((sb|0)!=(c[jb+8>>2]|0)){hb=224;break a}if((wF(c[jb+4>>2]|0,tc|0,sb|0)|0)!=0){hb=224;break a}c[Ia>>2]=(c[Ia>>2]|0)-1;sb=c[Ya>>2]|0;do{if((sb|0)==0){ib=c[ea>>2]|0;if((ib|0)==0){break}fb=c[R>>2]|0;ub=c[S>>2]|0;c[x>>2]=fb;if((a[da]|0)!=0){Tc[ib&127](c[na>>2]|0,fb,ub-fb|0);break}if((c[ca>>2]|0)==(f|0)){uc=ia;vc=ha}else{fb=c[ja>>2]|0;uc=fb+4|0;vc=fb|0}do{c[y>>2]=c[ka>>2];Bc[c[la>>2]&63](f,x,ub,y,c[ma>>2]|0);c[uc>>2]=c[x>>2];fb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,fb,(c[y>>2]|0)-fb|0);c[vc>>2]=c[x>>2];}while((c[x>>2]|0)!=(ub|0))}else{ub=c[jb+16>>2]|0;fb=jb+12|0;if((a[ab]|0)==0|(ub|0)==0){wc=sb}else{ib=(c[fb>>2]|0)+(c[jb+28>>2]|0)|0;rb=a[ub]|0;if(rb<<24>>24==0){xc=ib}else{wb=ub;ub=ib;ib=rb;while(1){rb=wb+1|0;tb=ub+1|0;a[ub]=ib;yb=a[rb]|0;if(yb<<24>>24==0){xc=tb;break}else{wb=rb;ub=tb;ib=yb}}}ib=c[jb+20>>2]|0;do{if((a[bb]|0)==0|(ib|0)==0){yc=xc}else{a[xc]=a[Ba]|0;ub=xc+1|0;wb=a[ib]|0;if(wb<<24>>24==0){yc=ub;break}else{zc=ib;Ac=ub;Fc=wb}while(1){wb=zc+1|0;a[Ac]=Fc;ub=Ac+1|0;yb=a[wb]|0;if(yb<<24>>24==0){yc=ub;break}else{zc=wb;Ac=ub;Fc=yb}}}}while(0);a[yc]=0;wc=c[Ya>>2]|0}Dc[wc&63](c[na>>2]|0,c[fb>>2]|0)}}while(0);sb=jb+44|0;ib=c[sb>>2]|0;if((ib|0)!=0){yb=ib;do{ib=c[_a>>2]|0;if((ib|0)==0){Ic=yb;Jc=yb|0}else{ub=yb|0;Dc[ib&63](c[na>>2]|0,c[c[ub>>2]>>2]|0);Ic=c[sb>>2]|0;Jc=ub}c[sb>>2]=c[Ic+4>>2];c[yb+4>>2]=c[$a>>2];c[$a>>2]=yb;c[(c[Jc>>2]|0)+4>>2]=c[yb+8>>2];yb=c[sb>>2]|0;}while((yb|0)!=0)}if((c[Ia>>2]|0)==0){hb=247;break a}break};case 10:{yb=Oc[c[cb>>2]&255](f,c[R>>2]|0)|0;if((yb|0)<0){mb=14;hb=320;break a}sb=c[ba>>2]|0;if((sb|0)!=0){jb=c[na>>2]|0;ub=Re(yb,db)|0;Tc[sb&127](jb,db,ub);break b}ub=c[ea>>2]|0;if((ub|0)==0){break b}jb=c[R>>2]|0;sb=c[S>>2]|0;c[v>>2]=jb;if((a[da]|0)!=0){Tc[ub&127](c[na>>2]|0,jb,sb-jb|0);break b}if((c[ca>>2]|0)==(f|0)){Kc=ia;Lc=ha}else{jb=c[ja>>2]|0;Kc=jb+4|0;Lc=jb|0}do{c[w>>2]=c[ka>>2];Bc[c[la>>2]&63](f,v,sb,w,c[ma>>2]|0);c[Kc>>2]=c[v>>2];jb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,jb,(c[w>>2]|0)-jb|0);c[Lc>>2]=c[v>>2];}while((c[v>>2]|0)!=(sb|0));break};case 7:{sb=c[ba>>2]|0;if((sb|0)!=0){a[Z]=10;Tc[sb&127](c[na>>2]|0,Z,1);break b}sb=c[ea>>2]|0;if((sb|0)==0){break b}jb=c[R>>2]|0;ub=c[S>>2]|0;c[t>>2]=jb;if((a[da]|0)!=0){Tc[sb&127](c[na>>2]|0,jb,ub-jb|0);break b}if((c[ca>>2]|0)==(f|0)){Mc=ia;Nc=ha}else{jb=c[ja>>2]|0;Mc=jb+4|0;Nc=jb|0}do{c[u>>2]=c[ka>>2];Bc[c[la>>2]&63](f,t,ub,u,c[ma>>2]|0);c[Mc>>2]=c[t>>2];jb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,jb,(c[u>>2]|0)-jb|0);c[Nc>>2]=c[t>>2];}while((c[t>>2]|0)!=(ub|0));break};case 8:{ub=c[eb>>2]|0;do{if((ub|0)==0){jb=c[ea>>2]|0;if((jb|0)==0){break}sb=c[R>>2]|0;yb=c[S>>2]|0;c[r>>2]=sb;if((a[da]|0)!=0){Tc[jb&127](c[na>>2]|0,sb,yb-sb|0);break}if((c[ca>>2]|0)==(f|0)){Pc=ia;Qc=ha}else{sb=c[ja>>2]|0;Pc=sb+4|0;Qc=sb|0}do{c[s>>2]=c[ka>>2];Bc[c[la>>2]&63](f,r,yb,s,c[ma>>2]|0);c[Pc>>2]=c[r>>2];sb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,sb,(c[s>>2]|0)-sb|0);c[Qc>>2]=c[r>>2];}while((c[r>>2]|0)!=(yb|0))}else{Cc[ub&255](c[na>>2]|0)}}while(0);ub=Kd(b,f,S,h,j,k)|0;if((ub|0)!=0){mb=ub;hb=320;break a}if((c[S>>2]|0)==0){hb=278;break a}break};case-5:{hb=279;break a;break};case 6:{ub=c[ba>>2]|0;if((ub|0)!=0){if((a[da]|0)!=0){yb=c[R>>2]|0;Tc[ub&127](c[na>>2]|0,yb,(c[S>>2]|0)-yb|0);break b}while(1){c[$>>2]=c[ka>>2];Bc[c[la>>2]&63](f,R,c[S>>2]|0,$,c[ma>>2]|0);c[ga>>2]=c[R>>2];yb=c[ka>>2]|0;Tc[ub&127](c[na>>2]|0,yb,(c[$>>2]|0)-yb|0);yb=c[R>>2]|0;if((yb|0)==(c[S>>2]|0)){break b}c[fa>>2]=yb}}ub=c[ea>>2]|0;if((ub|0)==0){break b}yb=c[R>>2]|0;fb=c[S>>2]|0;c[n>>2]=yb;if((a[da]|0)!=0){Tc[ub&127](c[na>>2]|0,yb,fb-yb|0);break b}if((c[ca>>2]|0)==(f|0)){Rc=ia;Uc=ha}else{yb=c[ja>>2]|0;Rc=yb+4|0;Uc=yb|0}do{c[o>>2]=c[ka>>2];Bc[c[la>>2]&63](f,n,fb,o,c[ma>>2]|0);c[Rc>>2]=c[n>>2];yb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,yb,(c[o>>2]|0)-yb|0);c[Uc>>2]=c[n>>2];}while((c[n>>2]|0)!=(fb|0));break};case 11:{if((Md(b,f,c[R>>2]|0,c[S>>2]|0)|0)==0){mb=1;hb=320;break a}break};case 13:{if((Nd(b,f,c[R>>2]|0,c[S>>2]|0)|0)==0){mb=1;hb=320;break a}break};case 12:{mb=17;hb=320;break a;break};default:{fb=c[ea>>2]|0;if((fb|0)==0){break b}yb=c[R>>2]|0;ub=c[S>>2]|0;c[P>>2]=yb;if((a[da]|0)!=0){Tc[fb&127](c[na>>2]|0,yb,ub-yb|0);break b}if((c[ca>>2]|0)==(f|0)){Vc=ia;Wc=ha}else{yb=c[ja>>2]|0;Vc=yb+4|0;Wc=yb|0}do{c[Q>>2]=c[ka>>2];Bc[c[la>>2]&63](f,P,ub,Q,c[ma>>2]|0);c[Vc>>2]=c[P>>2];yb=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,yb,(c[Q>>2]|0)-yb|0);c[Wc>>2]=c[P>>2];}while((c[P>>2]|0)!=(ub|0))}}}while(0);gb=c[S>>2]|0;c[R>>2]=gb;c[fa>>2]=gb;gb=c[oa>>2]|0;if((gb|0)==3){hb=319;break}else if((gb|0)==2){mb=35;hb=320;break}}if((hb|0)==6){if(k<<24>>24!=0){c[j>>2]=c[R>>2];mb=0;i=l;return mb|0}c[ga>>2]=h;ga=c[ba>>2]|0;do{if((ga|0)==0){oa=c[ea>>2]|0;if((oa|0)==0){break}P=c[R>>2]|0;c[N>>2]=P;if((a[da]|0)!=0){Tc[oa&127](c[na>>2]|0,P,h-P|0);break}if((c[ca>>2]|0)==(f|0)){Xc=ia;Yc=ha}else{P=c[ja>>2]|0;Xc=P+4|0;Yc=P|0}do{c[O>>2]=c[ka>>2];Bc[c[la>>2]&63](f,N,h,O,c[ma>>2]|0);c[Xc>>2]=c[N>>2];P=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,P,(c[O>>2]|0)-P|0);c[Yc>>2]=c[N>>2];}while((c[N>>2]|0)!=(h|0))}else{a[T]=10;Tc[ga&127](c[na>>2]|0,T,1)}}while(0);if((e|0)==0){mb=3;i=l;return mb|0}if((c[Ia>>2]|0)!=(e|0)){mb=13;i=l;return mb|0}c[j>>2]=h;mb=0;i=l;return mb|0}else if((hb|0)==20){if(k<<24>>24!=0){c[j>>2]=c[R>>2];mb=0;i=l;return mb|0}if((e|0)<=0){mb=3;i=l;return mb|0}if((c[Ia>>2]|0)!=(e|0)){mb=13;i=l;return mb|0}c[j>>2]=c[R>>2];mb=0;i=l;return mb|0}else if((hb|0)==25){c[fa>>2]=c[S>>2];mb=4;i=l;return mb|0}else if((hb|0)==26){if(k<<24>>24==0){mb=5;i=l;return mb|0}c[j>>2]=c[R>>2];mb=0;i=l;return mb|0}else if((hb|0)==28){if(k<<24>>24==0){mb=6;i=l;return mb|0}c[j>>2]=c[R>>2];mb=0;i=l;return mb|0}else if((hb|0)==148){a[Cb]=0;mb=1;i=l;return mb|0}else if((hb|0)==163){Cc[c[b+20>>2]&255](dc);mb=1;i=l;return mb|0}else if((hb|0)==192){c[Xa>>2]=0;mb=1;i=l;return mb|0}else if((hb|0)==220){mb=Jd(b,c[S>>2]|0,h,j)|0;i=l;return mb|0}else if((hb|0)==224){c[fa>>2]=tc;mb=7;i=l;return mb|0}else if((hb|0)==247){mb=Jd(b,c[S>>2]|0,h,j)|0;i=l;return mb|0}else if((hb|0)==278){c[Ka>>2]=90;mb=0;i=l;return mb|0}else if((hb|0)==279){if(k<<24>>24!=0){c[j>>2]=c[R>>2];mb=0;i=l;return mb|0}k=c[ba>>2]|0;do{if((k|0)==0){Ka=c[ea>>2]|0;if((Ka|0)==0){break}b=c[R>>2]|0;c[p>>2]=b;if((a[da]|0)!=0){Tc[Ka&127](c[na>>2]|0,b,h-b|0);break}if((c[ca>>2]|0)==(f|0)){Zc=ia;_c=ha}else{b=c[ja>>2]|0;Zc=b+4|0;_c=b|0}do{c[q>>2]=c[ka>>2];Bc[c[la>>2]&63](f,p,h,q,c[ma>>2]|0);c[Zc>>2]=c[p>>2];b=c[ka>>2]|0;Tc[c[ea>>2]&127](c[na>>2]|0,b,(c[q>>2]|0)-b|0);c[_c>>2]=c[p>>2];}while((c[p>>2]|0)!=(h|0))}else{if((a[da]|0)==0){c[_>>2]=c[ka>>2];Bc[c[la>>2]&63](f,R,h,_,c[ma>>2]|0);b=c[ka>>2]|0;Tc[c[ba>>2]&127](c[na>>2]|0,b,(c[_>>2]|0)-b|0);break}else{b=c[R>>2]|0;Tc[k&127](c[na>>2]|0,b,h-b|0);break}}}while(0);if((e|0)==0){c[fa>>2]=h;mb=3;i=l;return mb|0}if((c[Ia>>2]|0)==(e|0)){c[j>>2]=h;mb=0;i=l;return mb|0}else{c[fa>>2]=h;mb=13;i=l;return mb|0}}else if((hb|0)==319){c[j>>2]=c[S>>2];mb=0;i=l;return mb|0}else if((hb|0)==320){i=l;return mb|0}return 0}function Hd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=a+16|0;d=c[a+348>>2]|0;if((d|0)==0){e=1;return e|0}else{f=d}while(1){d=(c[f+24>>2]|0)+1|0;a=f+36|0;g=c[a>>2]|0;h=g+d|0;i=f+4|0;j=c[i>>2]|0;if((j|0)==(h|0)){e=1;k=11;break}l=f+8|0;m=c[l>>2]|0;n=m+d|0;o=f+40|0;if((n|0)>((c[o>>2]|0)-g|0)){p=Oc[c[b>>2]&255](g,n)|0;if((p|0)==0){e=0;k=11;break}g=f+12|0;q=c[a>>2]|0;if((c[g>>2]|0)==(q|0)){c[g>>2]=p}g=f+16|0;r=c[g>>2]|0;if((r|0)!=0){c[g>>2]=p+(r-q)}c[a>>2]=p;c[o>>2]=p+n;s=p+d|0;t=c[i>>2]|0;u=c[l>>2]|0}else{s=h;t=j;u=m}tF(s|0,t|0,u)|0;c[i>>2]=s;i=c[f>>2]|0;if((i|0)==0){e=1;k=11;break}else{f=i}}if((k|0)==11){return e|0}return 0}function Id(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;j=i;i=i+8|0;k=j|0;l=c[b+340>>2]|0;m=l+20|0;n=g|0;o=c[n>>2]|0;p=c[l+28>>2]|0;a:do{if((p|0)==0){q=13}else{r=c[b+472>>2]|0;s=a[o]|0;if(s<<24>>24==0){t=r}else{u=o;v=r;r=s;while(1){w=u+1|0;x=(v*1000003|0)^r&255;y=a[w]|0;if(y<<24>>24==0){t=x;break}else{u=w;v=x;r=y}}}r=p-1|0;v=t&r;u=c[m>>2]|0;y=c[u+(v<<2)>>2]|0;if((y|0)==0){q=13;break}x=t&-p;w=l+24|0;z=r>>>2;r=0;A=v;v=y;b:while(1){y=c[v>>2]|0;if(s<<24>>24==(a[y]|0)){B=o;C=y;y=s;do{if(y<<24>>24==0){break b}B=B+1|0;C=C+1|0;y=a[B]|0;}while(y<<24>>24==(a[C]|0))}if(r<<24>>24==0){D=(x>>>(((d[w]|0)-1|0)>>>0)&z|1)&255}else{D=r}C=D&255;y=(A>>>0<C>>>0?p:0)+(A-C)|0;C=c[u+(y<<2)>>2]|0;if((C|0)==0){q=13;break a}else{r=D;A=y;v=C}}if((v|0)==0){q=13}else{E=v}}}while(0);do{if((q|0)==13){D=l+80|0;p=l+92|0;t=l+88|0;A=o;while(1){r=c[p>>2]|0;if((r|0)==(c[t>>2]|0)){if((Bd(D)|0)<<24>>24==0){F=1;q=161;break}G=c[p>>2]|0}else{G=r}r=a[A]|0;c[p>>2]=G+1;a[G]=r;if((a[A]|0)==0){break}else{A=A+1|0}}if((q|0)==161){i=j;return F|0}A=l+96|0;D=c[A>>2]|0;c[A>>2]=c[p>>2];if((D|0)==0){F=1;i=j;return F|0}A=Cd(b,m,D,24)|0;D=A;if((A|0)==0){F=1;i=j;return F|0}if((a[b+232|0]|0)==0){E=D;break}if((Pd(b,D)|0)==0){F=1}else{E=D;break}i=j;return F|0}}while(0);m=c[E+12>>2]|0;G=e+36|0;o=b+364|0;D=b+376|0;A=Sc[c[G>>2]&127](e,f,c[o>>2]|0,c[D>>2]|0)|0;t=A+m|0;v=c[o>>2]|0;do{if((t|0)>(v|0)){r=t+16|0;c[o>>2]=r;u=Oc[c[b+16>>2]&255](c[D>>2]|0,r<<4)|0;r=u;if((u|0)==0){F=1;i=j;return F|0}c[D>>2]=r;if((A|0)<=(v|0)){break}Sc[c[G>>2]&127](e,f,A,r)|0}}while(0);f=c[D>>2]|0;G=f|0;c:do{if((A|0)>0){v=e+28|0;o=b+400|0;t=b+412|0;r=b+416|0;u=b+408|0;z=E+20|0;w=e+56|0;x=0;s=0;C=0;y=f;d:while(1){B=c[y+(s<<4)>>2]|0;H=Qd(b,e,B,B+(Oc[c[v>>2]&255](e,B)|0)|0)|0;if((H|0)==0){F=1;q=161;break}B=H|0;I=(c[B>>2]|0)-1|0;if((a[I]|0)!=0){q=30;break}a[I]=1;J=C+1|0;c[G+(C<<2)>>2]=c[B>>2];I=c[D>>2]|0;if((a[I+(s<<4)+12|0]|0)==0){e:do{if((a[H+8|0]|0)==0|(m|0)<1){K=1}else{L=c[z>>2]|0;M=0;while(1){N=M+1|0;if((H|0)==(c[L+(M*12|0)>>2]|0)){break}if((N|0)<(m|0)){M=N}else{K=1;break e}}K=a[L+(M*12|0)+4|0]|0}}while(0);N=Rd(b,e,K,c[I+(s<<4)+4>>2]|0,c[I+(s<<4)+8>>2]|0,o)|0;if((N|0)!=0){F=N;q=161;break}N=c[t>>2]|0;do{if(K<<24>>24==0){if((N|0)==(c[r>>2]|0)){O=N;break}P=N-1|0;if((a[P]|0)!=32){O=N;break}c[t>>2]=P;O=P}else{O=N}}while(0);if((O|0)==(c[u>>2]|0)){if((Bd(o)|0)<<24>>24==0){F=1;q=161;break}Q=c[t>>2]|0}else{Q=O}c[t>>2]=Q+1;a[Q]=0;c[G+(J<<2)>>2]=c[r>>2]}else{N=c[I+(s<<4)+8>>2]|0;c[k>>2]=c[I+(s<<4)+4>>2];if((c[t>>2]|0)==0){if((Bd(o)|0)<<24>>24==0){q=55;break}}while(1){Bc[c[w>>2]&63](e,k,N,t,c[u>>2]|0);if((c[k>>2]|0)==(N|0)){break}if((Bd(o)|0)<<24>>24==0){q=55;break d}}if((c[r>>2]|0)==0){q=55;break}N=c[t>>2]|0;if((N|0)==(c[u>>2]|0)){if((Bd(o)|0)<<24>>24==0){q=55;break}R=c[t>>2]|0}else{R=N}c[t>>2]=R+1;a[R]=0;N=c[r>>2]|0;c[G+(J<<2)>>2]=N;if((N|0)==0){F=1;q=161;break}}c[r>>2]=c[t>>2];N=c[H+4>>2]|0;do{if((N|0)==0){S=C+2|0;T=x}else{if((a[H+9|0]|0)==0){a[(c[B>>2]|0)-1|0]=2;S=C+2|0;T=x+1|0;break}else{I=Dd(b,N,H,c[G+(J<<2)>>2]|0,h)|0;if((I|0)==0){S=C;T=x;break}else{F=I;q=161;break d}}}}while(0);H=s+1|0;if((H|0)>=(A|0)){U=T;V=S;break c}x=T;s=H;C=S;y=c[D>>2]|0}if((q|0)==30){if((c[b+144>>2]|0)!=(e|0)){F=8;i=j;return F|0}c[b+272>>2]=c[(c[D>>2]|0)+(s<<4)>>2];F=8;i=j;return F|0}else if((q|0)==55){c[G+(J<<2)>>2]=0;F=1;i=j;return F|0}else if((q|0)==161){i=j;return F|0}}else{U=0;V=0}}while(0);c[b+368>>2]=V;J=c[E+8>>2]|0;f:do{if((J|0)==0){q=70}else{D=c[J>>2]|0;if((a[D-1|0]|0)==0){q=70;break}if((V|0)>0){W=0}else{break}while(1){e=W+2|0;if((c[G+(W<<2)>>2]|0)==(D|0)){break}if((e|0)<(V|0)){W=e}else{break f}}c[b+372>>2]=W}}while(0);if((q|0)==70){c[b+372>>2]=-1}g:do{if((m|0)>0){W=E+20|0;J=U;D=0;s=V;h:while(1){e=c[W>>2]|0;S=e+(D*12|0)|0;T=c[S>>2]|0;A=(c[T>>2]|0)-1|0;do{if((a[A]|0)==0){R=e+(D*12|0)+8|0;k=c[R>>2]|0;if((k|0)==0){X=s;Y=J;break}Q=c[T+4>>2]|0;if((Q|0)==0){a[A]=1;c[G+(s<<2)>>2]=c[c[S>>2]>>2];c[G+(s+1<<2)>>2]=c[R>>2];X=s+2|0;Y=J;break}if((a[T+9|0]|0)==0){a[A]=2;c[G+(s<<2)>>2]=c[c[S>>2]>>2];c[G+(s+1<<2)>>2]=c[R>>2];X=s+2|0;Y=J+1|0;break}else{R=Dd(b,Q,T,k,h)|0;if((R|0)==0){X=s;Y=J;break}else{F=R;break h}}}else{X=s;Y=J}}while(0);T=D+1|0;if((T|0)<(m|0)){J=Y;D=T;s=X}else{Z=Y;_=X;break g}}i=j;return F|0}else{Z=U;_=V}}while(0);c[G+(_<<2)>>2]=0;i:do{if((Z|0)==0){$=0}else{V=b+384|0;U=c[V>>2]|0;X=b+388|0;Y=a[X]|0;m=Y&255;do{if((Z<<1>>m|0)==0){s=1<<m;if((U|0)!=0){aa=U;ba=s;break}ca=s;da=b+380|0;q=89}else{s=Y;while(1){ea=s+1&255;if((Z>>(s&255)|0)==0){break}else{s=ea}}s=(ea&255)>>>0<3>>>0?3:ea;a[X]=s;D=s&255;s=b+380|0;J=Oc[c[b+16>>2]&255](c[s>>2]|0,12<<D)|0;if((J|0)==0){F=1;i=j;return F|0}else{c[s>>2]=J;ca=1<<D;da=s;q=89;break}}}while(0);if((q|0)==89){Y=ca;while(1){U=Y-1|0;c[(c[da>>2]|0)+(U*12|0)>>2]=-1;if((U|0)==0){aa=-1;ba=ca;break}else{Y=U}}}Y=aa-1|0;c[V>>2]=Y;if((_|0)<=0){$=0;break}U=b+472|0;m=l+48|0;s=l+40|0;D=l+44|0;J=b+400|0;W=b+412|0;T=b+408|0;S=ba-1|0;A=b+380|0;e=b+233|0;R=b+416|0;k=b+456|0;Q=-ba|0;O=S>>>2;K=Z;f=0;j:while(1){y=G+(f<<2)|0;C=c[y>>2]|0;x=C-1|0;if((a[x]|0)==2){t=c[U>>2]|0;a[x]=0;r=c[m>>2]|0;o=c[U>>2]|0;u=a[C]|0;if(u<<24>>24==0){fa=o}else{w=C;z=o;o=u;while(1){v=w+1|0;p=(z*1000003|0)^o&255;H=a[v]|0;if(H<<24>>24==0){fa=p;break}else{w=v;z=p;o=H}}}o=r-1|0;z=c[s>>2]|0;w=fa&-r;H=o>>>2;p=0;v=fa&o;k:while(1){ga=c[z+(v<<2)>>2]|0;o=c[ga>>2]|0;if(u<<24>>24==(a[o]|0)){N=C;B=o;o=u;do{if(o<<24>>24==0){break k}N=N+1|0;B=B+1|0;o=a[N]|0;}while(o<<24>>24==(a[B]|0))}if(p<<24>>24==0){ha=(w>>>(((d[D]|0)-1|0)>>>0)&H|1)&255}else{ha=p}B=ha&255;p=ha;v=v-B+(v>>>0<B>>>0?r:0)|0}r=c[(c[ga+4>>2]|0)+4>>2]|0;if((r|0)==0){F=27;q=161;break}v=r+20|0;if((c[v>>2]|0)>0){p=r+16|0;H=0;w=t;while(1){u=a[(c[p>>2]|0)+H|0]|0;z=c[W>>2]|0;if((z|0)==(c[T>>2]|0)){if((Bd(J)|0)<<24>>24==0){F=1;q=161;break j}ia=c[W>>2]|0}else{ia=z}c[W>>2]=ia+1;a[ia]=u;z=u&255^(w*1000003|0);u=H+1|0;if((u|0)<(c[v>>2]|0)){H=u;w=z}else{ja=z;break}}}else{ja=t}w=C;while(1){H=w+1|0;if((a[w]|0)==58){ka=ja;la=H;break}else{w=H}}while(1){w=a[la]|0;C=c[W>>2]|0;if((C|0)==(c[T>>2]|0)){if((Bd(J)|0)<<24>>24==0){F=1;q=161;break j}ma=a[la]|0;na=c[W>>2]|0}else{ma=w;na=C}c[W>>2]=na+1;a[na]=ma;oa=w&255^(ka*1000003|0);if((a[la]|0)==0){break}else{ka=oa;la=la+1|0}}w=oa&S;C=c[A>>2]|0;if((c[C+(w*12|0)>>2]|0)==(Y|0)){t=oa&Q;H=w;v=0;while(1){if((oa|0)==(c[C+(H*12|0)+4>>2]|0)){p=c[R>>2]|0;z=c[C+(H*12|0)+8>>2]|0;u=a[p]|0;B=u<<24>>24==0;if(u<<24>>24!=(a[z]|0)|B){pa=B}else{B=p;p=z;while(1){z=B+1|0;u=p+1|0;o=a[z]|0;N=o<<24>>24==0;if(o<<24>>24!=(a[u]|0)|N){pa=N;break}else{B=z;p=u}}}if(pa){F=8;q=161;break j}}if(v<<24>>24==0){qa=(t>>>(((d[X]|0)-1|0)>>>0)&O|1)&255}else{qa=v}p=qa&255;B=H+((H|0)<(p|0)?ba:0)-p|0;if((c[C+(B*12|0)>>2]|0)==(Y|0)){H=B;v=qa}else{ra=B;break}}}else{ra=w}if((a[e]|0)!=0){a[(c[W>>2]|0)-1|0]=a[k]|0;v=c[c[r>>2]>>2]|0;while(1){H=c[W>>2]|0;if((H|0)==(c[T>>2]|0)){if((Bd(J)|0)<<24>>24==0){F=1;q=161;break j}sa=c[W>>2]|0}else{sa=H}H=a[v]|0;c[W>>2]=sa+1;a[sa]=H;if((a[v]|0)==0){break}else{v=v+1|0}}}v=c[R>>2]|0;c[R>>2]=c[W>>2];c[y>>2]=v;c[(c[A>>2]|0)+(ra*12|0)>>2]=Y;c[(c[A>>2]|0)+(ra*12|0)+4>>2]=oa;c[(c[A>>2]|0)+(ra*12|0)+8>>2]=v;v=K-1|0;if((v|0)==0){q=132;break}else{ta=v}}else{a[x]=0;ta=K}v=f+2|0;if((v|0)<(_|0)){K=ta;f=v}else{$=v;break i}}if((q|0)==132){$=f+2|0;break}else if((q|0)==161){i=j;return F|0}}}while(0);if(($|0)<(_|0)){q=$;do{a[(c[G+(q<<2)>>2]|0)-1|0]=0;q=q+2|0;}while((q|0)<(_|0))}_=c[h>>2]|0;if((_|0)!=0){h=_;do{a[(c[c[h+12>>2]>>2]|0)-1|0]=0;h=c[h+4>>2]|0;}while((h|0)!=0)}if((a[b+232|0]|0)==0){F=0;i=j;return F|0}h=c[E+4>>2]|0;do{if((h|0)==0){E=c[l+136>>2]|0;if((E|0)==0){F=0;i=j;return F|0}else{ua=E;va=c[n>>2]|0;break}}else{E=c[h+4>>2]|0;if((E|0)==0){F=27;i=j;return F|0}_=c[n>>2]|0;while(1){q=_+1|0;if((a[_]|0)==58){ua=E;va=q;break}else{_=q}}}}while(0);h=ua|0;do{if((a[b+233|0]|0)==0){wa=0}else{l=c[c[h>>2]>>2]|0;if((l|0)==0){wa=0;break}else{xa=0}while(1){_=xa+1|0;if((a[l+xa|0]|0)==0){wa=_;break}else{xa=_}}}}while(0);c[g+4>>2]=va;xa=ua+20|0;c[g+16>>2]=c[xa>>2];c[g+8>>2]=c[c[h>>2]>>2];c[g+20>>2]=wa;g=0;while(1){ya=g+1|0;if((a[va+g|0]|0)==0){break}else{g=ya}}l=c[xa>>2]|0;_=ya+wa+l|0;E=ua+24|0;if((_|0)>(c[E>>2]|0)){f=_+24|0;_=Ec[c[b+12>>2]&63](f)|0;if((_|0)==0){F=1;i=j;return F|0}c[E>>2]=f;f=ua+16|0;tF(_|0,c[f>>2]|0,c[xa>>2]|0)|0;E=c[b+348>>2]|0;if((E|0)!=0){q=E;do{E=q+12|0;if((c[E>>2]|0)==(c[f>>2]|0)){c[E>>2]=_}q=c[q>>2]|0;}while((q|0)!=0)}Cc[c[b+20>>2]&255](c[f>>2]|0);c[f>>2]=_;za=c[xa>>2]|0;Aa=_}else{za=l;Aa=c[ua+16>>2]|0}tF(Aa+za|0,va|0,ya)|0;if((wa|0)!=0){ya=za+g|0;a[Aa+ya|0]=a[b+456|0]|0;tF(Aa+(ya+1)|0,c[c[h>>2]>>2]|0,wa)|0}c[n>>2]=c[ua+16>>2];F=0;i=j;return F|0}function Jd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;g=i;i=i+40|0;h=g|0;j=g+8|0;k=g+16|0;l=g+24|0;m=g+32|0;c[b+264>>2]=82;n=b+272|0;c[n>>2]=d;o=b+144|0;p=b+276|0;q=b+80|0;r=b+44|0;s=b+48|0;t=b+4|0;u=b+464|0;v=d;a:while(1){c[m>>2]=0;d=c[o>>2]|0;w=Sc[c[d>>2]&127](d,v,e,m)|0;x=c[m>>2]|0;c[p>>2]=x;b:do{switch(w|0){case-15:{y=3;break a;break};case-4:{y=11;break a;break};case 15:{d=c[q>>2]|0;if((d|0)==0){break b}z=c[o>>2]|0;c[h>>2]=v;if((a[z+68|0]|0)!=0){Tc[d&127](c[t>>2]|0,v,x-v|0);break b}d=z+56|0;do{c[j>>2]=c[r>>2];Bc[c[d>>2]&63](z,h,x,j,c[s>>2]|0);c[p>>2]=c[h>>2];A=c[r>>2]|0;Tc[c[q>>2]&127](c[t>>2]|0,A,(c[j>>2]|0)-A|0);c[n>>2]=c[h>>2];}while((c[h>>2]|0)!=(x|0));break};case 11:{if((Md(b,c[o>>2]|0,v,x)|0)==0){B=1;y=26;break a}break};case 13:{if((Nd(b,c[o>>2]|0,v,x)|0)==0){B=1;y=26;break a}break};case 0:{y=19;break a;break};case-1:{y=20;break a;break};case-2:{y=22;break a;break};default:{B=9;y=26;break a}}}while(0);C=c[m>>2]|0;c[n>>2]=C;w=c[u>>2]|0;if((w|0)==3){y=25;break}else if((w|0)==2){B=35;y=26;break}else{v=C}}if((y|0)==3){h=c[q>>2]|0;do{if((h|0)==0){D=x}else{j=c[o>>2]|0;c[k>>2]=v;if((a[j+68|0]|0)==0){e=j+56|0;do{c[l>>2]=c[r>>2];Bc[c[e>>2]&63](j,k,x,l,c[s>>2]|0);c[p>>2]=c[k>>2];w=c[r>>2]|0;Tc[c[q>>2]&127](c[t>>2]|0,w,(c[l>>2]|0)-w|0);c[n>>2]=c[k>>2];}while((c[k>>2]|0)!=(x|0))}else{Tc[h&127](c[t>>2]|0,v,x-v|0)}if((c[u>>2]|0)==2){B=35;i=g;return B|0}else{D=c[m>>2]|0;break}}}while(0);c[f>>2]=D;B=0;i=g;return B|0}else if((y|0)==11){c[f>>2]=v;B=0;i=g;return B|0}else if((y|0)==19){c[n>>2]=x;B=4;i=g;return B|0}else if((y|0)==20){if((a[b+468|0]|0)!=0){B=5;i=g;return B|0}c[f>>2]=v;B=0;i=g;return B|0}else if((y|0)==22){if((a[b+468|0]|0)!=0){B=6;i=g;return B|0}c[f>>2]=v;B=0;i=g;return B|0}else if((y|0)==25){c[f>>2]=C;B=0;i=g;return B|0}else if((y|0)==26){i=g;return B|0}return 0}function Kd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;j=i;i=i+80|0;k=j|0;l=j+8|0;m=j+16|0;n=j+24|0;o=j+32|0;p=j+40|0;q=j+48|0;r=j+56|0;s=j+64|0;t=j+72|0;u=c[e>>2]|0;c[q>>2]=u;v=b+144|0;if((c[v>>2]|0)==(d|0)){w=b+272|0;c[w>>2]=u;x=b+276|0;y=w;z=x;A=w;B=x;C=b+284|0}else{x=b+284|0;w=c[x>>2]|0;y=w|0;z=w+4|0;A=b+272|0;B=b+276|0;C=x}c[y>>2]=u;c[e>>2]=0;u=d+8|0;x=b+60|0;w=b+80|0;D=d+68|0;E=b+44|0;F=d+56|0;G=b+48|0;H=b+4|0;I=b+464|0;a:while(1){J=Sc[c[u>>2]&127](d,c[q>>2]|0,f,r)|0;c[z>>2]=c[r>>2];b:do{switch(J|0){case 40:{K=6;break a;break};case 7:{L=c[x>>2]|0;if((L|0)!=0){a[s]=10;Tc[L&127](c[H>>2]|0,s,1);break b}L=c[w>>2]|0;if((L|0)==0){break b}M=c[q>>2]|0;N=c[r>>2]|0;c[m>>2]=M;if((a[D]|0)!=0){Tc[L&127](c[H>>2]|0,M,N-M|0);break b}if((c[v>>2]|0)==(d|0)){O=B;P=A}else{M=c[C>>2]|0;O=M+4|0;P=M|0}do{c[n>>2]=c[E>>2];Bc[c[F>>2]&63](d,m,N,n,c[G>>2]|0);c[O>>2]=c[m>>2];M=c[E>>2]|0;Tc[c[w>>2]&127](c[H>>2]|0,M,(c[n>>2]|0)-M|0);c[P>>2]=c[m>>2];}while((c[m>>2]|0)!=(N|0));break};case 6:{N=c[x>>2]|0;if((N|0)!=0){if((a[D]|0)!=0){M=c[q>>2]|0;Tc[N&127](c[H>>2]|0,M,(c[r>>2]|0)-M|0);break b}while(1){c[t>>2]=c[E>>2];Bc[c[F>>2]&63](d,q,c[r>>2]|0,t,c[G>>2]|0);c[z>>2]=c[r>>2];M=c[E>>2]|0;Tc[N&127](c[H>>2]|0,M,(c[t>>2]|0)-M|0);M=c[q>>2]|0;if((M|0)==(c[r>>2]|0)){break b}c[y>>2]=M}}N=c[w>>2]|0;if((N|0)==0){break b}M=c[q>>2]|0;L=c[r>>2]|0;c[k>>2]=M;if((a[D]|0)!=0){Tc[N&127](c[H>>2]|0,M,L-M|0);break b}if((c[v>>2]|0)==(d|0)){Q=B;R=A}else{M=c[C>>2]|0;Q=M+4|0;R=M|0}do{c[l>>2]=c[E>>2];Bc[c[F>>2]&63](d,k,L,l,c[G>>2]|0);c[Q>>2]=c[k>>2];M=c[E>>2]|0;Tc[c[w>>2]&127](c[H>>2]|0,M,(c[l>>2]|0)-M|0);c[R>>2]=c[k>>2];}while((c[k>>2]|0)!=(L|0));break};case 0:{K=37;break a;break};case-2:{K=38;break a;break};case-1:case-4:{K=40;break a;break};default:{K=42;break a}}}while(0);J=c[r>>2]|0;c[q>>2]=J;c[y>>2]=J;J=c[I>>2]|0;if((J|0)==3){K=44;break}else if((J|0)==2){S=35;K=45;break}}if((K|0)==6){k=c[b+76>>2]|0;do{if((k|0)==0){b=c[w>>2]|0;if((b|0)==0){break}R=c[q>>2]|0;l=c[r>>2]|0;c[o>>2]=R;if((a[D]|0)!=0){Tc[b&127](c[H>>2]|0,R,l-R|0);break}if((c[v>>2]|0)==(d|0)){T=B;U=A}else{R=c[C>>2]|0;T=R+4|0;U=R|0}do{c[p>>2]=c[E>>2];Bc[c[F>>2]&63](d,o,l,p,c[G>>2]|0);c[T>>2]=c[o>>2];R=c[E>>2]|0;Tc[c[w>>2]&127](c[H>>2]|0,R,(c[p>>2]|0)-R|0);c[U>>2]=c[o>>2];}while((c[o>>2]|0)!=(l|0))}else{Cc[k&255](c[H>>2]|0)}}while(0);H=c[r>>2]|0;c[e>>2]=H;c[g>>2]=H;S=(c[I>>2]|0)==2?35:0;i=j;return S|0}else if((K|0)==37){c[y>>2]=c[r>>2];S=4;i=j;return S|0}else if((K|0)==38){if(h<<24>>24==0){S=6;i=j;return S|0}c[g>>2]=c[q>>2];S=0;i=j;return S|0}else if((K|0)==40){if(h<<24>>24==0){S=20;i=j;return S|0}c[g>>2]=c[q>>2];S=0;i=j;return S|0}else if((K|0)==42){c[y>>2]=c[r>>2];S=23;i=j;return S|0}else if((K|0)==44){c[g>>2]=c[r>>2];S=0;i=j;return S|0}else if((K|0)==45){i=j;return S|0}return 0}function Ld(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;g=i;i=i+8|0;h=g|0;c[h>>2]=d;d=b+144|0;j=b+468|0;k=Kd(b,c[d>>2]|0,h,e,f,(a[j]|0)==0|0)|0;l=c[h>>2]|0;if((k|0)!=0|(l|0)==0){m=k;i=g;return m|0}k=b+264|0;if((c[b+460>>2]|0)==0){c[k>>2]=6;h=Gd(b,0,c[d>>2]|0,l,e,f,(a[j]|0)==0|0)|0;if((h|0)!=0){m=h;i=g;return m|0}h=b+16|0;n=c[b+348>>2]|0;if((n|0)==0){m=0;i=g;return m|0}else{o=n}while(1){n=(c[o+24>>2]|0)+1|0;p=o+36|0;q=c[p>>2]|0;r=q+n|0;s=o+4|0;t=c[s>>2]|0;if((t|0)==(r|0)){m=0;u=25;break}v=o+8|0;w=c[v>>2]|0;x=w+n|0;y=o+40|0;if((x|0)>((c[y>>2]|0)-q|0)){z=Oc[c[h>>2]&255](q,x)|0;if((z|0)==0){m=1;u=25;break}q=o+12|0;A=c[p>>2]|0;if((c[q>>2]|0)==(A|0)){c[q>>2]=z}q=o+16|0;B=c[q>>2]|0;if((B|0)!=0){c[q>>2]=z+(B-A)}c[p>>2]=z;c[y>>2]=z+x;C=z+n|0;D=c[s>>2]|0;E=c[v>>2]|0}else{C=r;D=t;E=w}tF(C|0,D|0,E)|0;c[s>>2]=C;s=c[o>>2]|0;if((s|0)==0){m=0;u=25;break}else{o=s}}if((u|0)==25){i=g;return m|0}}else{c[k>>2]=2;k=Gd(b,1,c[d>>2]|0,l,e,f,(a[j]|0)==0|0)|0;if((k|0)!=0){m=k;i=g;return m|0}k=b+16|0;j=c[b+348>>2]|0;if((j|0)==0){m=0;i=g;return m|0}else{F=j}while(1){j=(c[F+24>>2]|0)+1|0;b=F+36|0;f=c[b>>2]|0;e=f+j|0;l=F+4|0;d=c[l>>2]|0;if((d|0)==(e|0)){m=0;u=25;break}o=F+8|0;C=c[o>>2]|0;E=C+j|0;D=F+40|0;if((E|0)>((c[D>>2]|0)-f|0)){h=Oc[c[k>>2]&255](f,E)|0;if((h|0)==0){m=1;u=25;break}f=F+12|0;s=c[b>>2]|0;if((c[f>>2]|0)==(s|0)){c[f>>2]=h}f=F+16|0;w=c[f>>2]|0;if((w|0)!=0){c[f>>2]=h+(w-s)}c[b>>2]=h;c[D>>2]=h+E;G=h+j|0;H=c[l>>2]|0;I=c[o>>2]|0}else{G=e;H=d;I=C}tF(G|0,H|0,I)|0;c[l>>2]=G;l=c[F>>2]|0;if((l|0)==0){m=0;u=25;break}else{F=l}}if((u|0)==25){i=g;return m|0}}return 0}function Md(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;g=i;i=i+32|0;h=g|0;j=g+8|0;k=g+16|0;l=g+24|0;m=b+64|0;if((c[m>>2]|0)==0){n=b+80|0;o=c[n>>2]|0;if((o|0)==0){p=1;i=g;return p|0}c[k>>2]=e;if((a[d+68|0]|0)!=0){Tc[o&127](c[b+4>>2]|0,e,f-e|0);p=1;i=g;return p|0}if((c[b+144>>2]|0)==(d|0)){q=b+276|0;r=b+272|0}else{o=c[b+284>>2]|0;q=o+4|0;r=o|0}o=b+44|0;s=d+56|0;t=b+48|0;u=b+4|0;while(1){c[l>>2]=c[o>>2];Bc[c[s>>2]&63](d,k,f,l,c[t>>2]|0);c[q>>2]=c[k>>2];v=c[o>>2]|0;Tc[c[n>>2]&127](c[u>>2]|0,v,(c[l>>2]|0)-v|0);c[r>>2]=c[k>>2];if((c[k>>2]|0)==(f|0)){p=1;break}}i=g;return p|0}k=d+64|0;r=c[k>>2]<<1;l=e+r|0;u=e+((Oc[c[d+28>>2]&255](d,l)|0)+r)|0;r=b+400|0;c[j>>2]=l;l=b+412|0;do{if((c[l>>2]|0)==0){if((Bd(r)|0)<<24>>24==0){p=0}else{break}i=g;return p|0}}while(0);e=d+56|0;n=b+408|0;while(1){Bc[c[e>>2]&63](d,j,u,l,c[n>>2]|0);if((c[j>>2]|0)==(u|0)){break}if((Bd(r)|0)<<24>>24==0){p=0;w=41;break}}if((w|0)==41){i=g;return p|0}j=b+416|0;if((c[j>>2]|0)==0){p=0;i=g;return p|0}o=c[l>>2]|0;do{if((o|0)==(c[n>>2]|0)){if((Bd(r)|0)<<24>>24==0){p=0;i=g;return p|0}else{x=c[l>>2]|0;break}}else{x=o}}while(0);c[l>>2]=x+1;a[x]=0;x=c[j>>2]|0;if((x|0)==0){p=0;i=g;return p|0}c[j>>2]=c[l>>2];o=Oc[c[d+32>>2]&255](d,u)|0;u=f+(-(c[k>>2]<<1)|0)|0;c[h>>2]=o;do{if((c[l>>2]|0)==0){if((Bd(r)|0)<<24>>24==0){p=0}else{break}i=g;return p|0}}while(0);while(1){Bc[c[e>>2]&63](d,h,u,l,c[n>>2]|0);if((c[h>>2]|0)==(u|0)){break}if((Bd(r)|0)<<24>>24==0){p=0;w=41;break}}if((w|0)==41){i=g;return p|0}if((c[j>>2]|0)==0){p=0;i=g;return p|0}u=c[l>>2]|0;do{if((u|0)==(c[n>>2]|0)){if((Bd(r)|0)<<24>>24==0){p=0;i=g;return p|0}else{y=c[l>>2]|0;break}}else{y=u}}while(0);c[l>>2]=y+1;a[y]=0;y=c[j>>2]|0;if((y|0)==0){p=0;i=g;return p|0}else{z=y}while(1){u=a[z]|0;if((u<<24>>24|0)==13){A=z;B=z;C=13;w=31;break}else if((u<<24>>24|0)==0){break}z=z+1|0}if((w|0)==31){while(1){w=0;if(C<<24>>24==13){a[A]=10;z=B+1|0;D=(a[z]|0)==10?B+2|0:z}else{a[A]=C;D=B+1|0}E=A+1|0;z=a[D]|0;if(z<<24>>24==0){break}else{A=E;B=D;C=z;w=31}}a[E]=0}Tc[c[m>>2]&127](c[b+4>>2]|0,x,y);y=b+404|0;b=c[y>>2]|0;x=r|0;r=c[x>>2]|0;do{if((b|0)==0){c[y>>2]=r}else{if((r|0)==0){break}else{F=r;G=b}while(1){m=F|0;E=c[m>>2]|0;c[m>>2]=G;c[y>>2]=F;if((E|0)==0){break}else{G=F;F=E}}}}while(0);c[x>>2]=0;c[j>>2]=0;c[l>>2]=0;c[n>>2]=0;p=1;i=g;return p|0}function Nd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;g=i;i=i+24|0;h=g|0;j=g+8|0;k=g+16|0;l=b+68|0;if((c[l>>2]|0)==0){m=b+80|0;n=c[m>>2]|0;if((n|0)==0){o=1;i=g;return o|0}c[j>>2]=e;if((a[d+68|0]|0)!=0){Tc[n&127](c[b+4>>2]|0,e,f-e|0);o=1;i=g;return o|0}if((c[b+144>>2]|0)==(d|0)){p=b+276|0;q=b+272|0}else{n=c[b+284>>2]|0;p=n+4|0;q=n|0}n=b+44|0;r=d+56|0;s=b+48|0;t=b+4|0;while(1){c[k>>2]=c[n>>2];Bc[c[r>>2]&63](d,j,f,k,c[s>>2]|0);c[p>>2]=c[j>>2];u=c[n>>2]|0;Tc[c[m>>2]&127](c[t>>2]|0,u,(c[k>>2]|0)-u|0);c[q>>2]=c[j>>2];if((c[j>>2]|0)==(f|0)){o=1;break}}i=g;return o|0}j=b+400|0;q=c[d+64>>2]|0;k=f+(q*-3|0)|0;c[h>>2]=e+(q<<2);q=b+412|0;do{if((c[q>>2]|0)==0){if((Bd(j)|0)<<24>>24==0){o=0}else{break}i=g;return o|0}}while(0);e=d+56|0;f=b+408|0;while(1){Bc[c[e>>2]&63](d,h,k,q,c[f>>2]|0);if((c[h>>2]|0)==(k|0)){break}if((Bd(j)|0)<<24>>24==0){o=0;v=32;break}}if((v|0)==32){i=g;return o|0}k=b+416|0;if((c[k>>2]|0)==0){o=0;i=g;return o|0}h=c[q>>2]|0;do{if((h|0)==(c[f>>2]|0)){if((Bd(j)|0)<<24>>24==0){o=0;i=g;return o|0}else{w=c[q>>2]|0;break}}else{w=h}}while(0);c[q>>2]=w+1;a[w]=0;w=c[k>>2]|0;if((w|0)==0){o=0;i=g;return o|0}else{x=w}while(1){h=a[x]|0;if((h<<24>>24|0)==13){y=x;z=x;A=13;v=22;break}else if((h<<24>>24|0)==0){break}x=x+1|0}if((v|0)==22){while(1){v=0;if(A<<24>>24==13){a[y]=10;x=z+1|0;B=(a[x]|0)==10?z+2|0:x}else{a[y]=A;B=z+1|0}C=y+1|0;x=a[B]|0;if(x<<24>>24==0){break}else{y=C;z=B;A=x;v=22}}a[C]=0}Dc[c[l>>2]&63](c[b+4>>2]|0,w);w=b+404|0;b=c[w>>2]|0;l=j|0;j=c[l>>2]|0;do{if((b|0)==0){c[w>>2]=j}else{if((j|0)==0){break}else{D=j;E=b}while(1){C=D|0;v=c[C>>2]|0;c[C>>2]=E;c[w>>2]=D;if((v|0)==0){break}else{E=D;D=v}}}}while(0);c[l>>2]=0;c[k>>2]=0;c[q>>2]=0;c[f>>2]=0;o=1;i=g;return o|0}function Od(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=Gd(b,0,c[b+144>>2]|0,d,e,f,(a[b+468|0]|0)==0|0)|0;do{if((g|0)==0){if((Hd(b)|0)<<24>>24==0){h=1}else{break}return h|0}}while(0);h=g;return h|0}function Pd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=c[b+340>>2]|0;f=d|0;g=e+80|0;h=e+92|0;i=e+88|0;j=e+60|0;k=e+96|0;e=d+4|0;d=c[f>>2]|0;a:while(1){l=a[d]|0;if((l<<24>>24|0)==0){m=1;n=17;break}else if((l<<24>>24|0)==58){l=c[f>>2]|0;o=c[h>>2]|0;p=(o|0)==(c[i>>2]|0);if((l|0)==(d|0)){q=p;r=o}else{s=l;l=p;p=o;while(1){if(l){if((Bd(g)|0)<<24>>24==0){m=0;n=17;break a}t=c[h>>2]|0}else{t=p}o=a[s]|0;c[h>>2]=t+1;a[t]=o;o=s+1|0;u=c[h>>2]|0;v=(u|0)==(c[i>>2]|0);if((o|0)==(d|0)){q=v;r=u;break}else{s=o;l=v;p=u}}}if(q){if((Bd(g)|0)<<24>>24==0){m=0;n=17;break}w=c[h>>2]|0}else{w=r}c[h>>2]=w+1;a[w]=0;p=Cd(b,j,c[k>>2]|0,8)|0;if((p|0)==0){m=0;n=17;break}l=c[k>>2]|0;if((c[p>>2]|0)==(l|0)){c[k>>2]=c[h>>2]}else{c[h>>2]=l}c[e>>2]=p}d=d+1|0}if((n|0)==17){return m|0}return 0}function Qd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=i;i=i+8|0;h=g|0;j=c[b+340>>2]|0;k=j+80|0;l=j+92|0;m=c[l>>2]|0;n=j+88|0;do{if((m|0)==(c[n>>2]|0)){if((Bd(k)|0)<<24>>24==0){o=0;i=g;return o|0}else{p=c[l>>2]|0;break}}else{p=m}}while(0);c[l>>2]=p+1;a[p]=0;c[h>>2]=e;do{if((c[l>>2]|0)==0){if((Bd(k)|0)<<24>>24==0){o=0}else{break}i=g;return o|0}}while(0);e=d+56|0;while(1){Bc[c[e>>2]&63](d,h,f,l,c[n>>2]|0);if((c[h>>2]|0)==(f|0)){break}if((Bd(k)|0)<<24>>24==0){o=0;q=39;break}}if((q|0)==39){i=g;return o|0}f=j+96|0;if((c[f>>2]|0)==0){o=0;i=g;return o|0}h=c[l>>2]|0;do{if((h|0)==(c[n>>2]|0)){if((Bd(k)|0)<<24>>24==0){o=0;i=g;return o|0}else{r=c[l>>2]|0;break}}else{r=h}}while(0);c[l>>2]=r+1;a[r]=0;r=c[f>>2]|0;if((r|0)==0){o=0;i=g;return o|0}h=r+1|0;d=Cd(b,j+40|0,h,12)|0;e=d;if((d|0)==0){o=0;i=g;return o|0}if((c[d>>2]|0)!=(h|0)){c[l>>2]=c[f>>2];o=e;i=g;return o|0}p=c[l>>2]|0;c[f>>2]=p;if((a[b+232|0]|0)==0){o=e;i=g;return o|0}do{if((a[h]|0)==120){if((a[r+2|0]|0)!=109){s=0;break}if((a[r+3|0]|0)!=108){s=0;break}if((a[r+4|0]|0)!=110){s=0;break}if((a[r+5|0]|0)!=115){s=0;break}m=a[r+6|0]|0;if((m<<24>>24|0)==0){c[d+4>>2]=j+132}else if((m<<24>>24|0)==58){c[d+4>>2]=Cd(b,j+60|0,r+7|0,8)|0}else{s=0;break}a[e+9|0]=1;o=e;i=g;return o|0}else{s=0}}while(0);while(1){h=s+1|0;m=a[r+h|0]|0;if((m<<24>>24|0)==58){break}else if((m<<24>>24|0)==0){o=e;q=39;break}else{s=h}}if((q|0)==39){i=g;return o|0}q=(p|0)==(c[n>>2]|0);a:do{if((s|0)>0){h=0;m=q;t=p;while(1){if(m){if((Bd(k)|0)<<24>>24==0){o=0;break}u=c[l>>2]|0}else{u=t}v=h+1|0;w=a[r+v|0]|0;c[l>>2]=u+1;a[u]=w;w=c[l>>2]|0;x=(w|0)==(c[n>>2]|0);if((v|0)<(s|0)){h=v;m=x;t=w}else{y=x;z=w;break a}}i=g;return o|0}else{y=q;z=p}}while(0);do{if(y){if((Bd(k)|0)<<24>>24==0){o=0;i=g;return o|0}else{A=c[l>>2]|0;break}}else{A=z}}while(0);c[l>>2]=A+1;a[A]=0;A=Cd(b,j+60|0,c[f>>2]|0,8)|0;c[d+4>>2]=A;d=c[f>>2]|0;if((c[A>>2]|0)==(d|0)){c[f>>2]=c[l>>2];o=e;i=g;return o|0}else{c[l>>2]=d;o=e;i=g;return o|0}return 0}function Rd(b,e,f,g,h,j){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0;k=i;i=i+32|0;l=k|0;m=k+8|0;n=k+16|0;o=k+24|0;p=c[b+340>>2]|0;q=e+12|0;r=e+40|0;s=f<<24>>24==0;t=j+12|0;u=j+16|0;v=o|0;w=j+8|0;x=e+56|0;y=e+64|0;z=e+44|0;A=b+424|0;B=b+436|0;C=b+432|0;D=b+440|0;E=p+8|0;F=(p+80|0)==(j|0);G=p+130|0;H=p+129|0;I=b+284|0;J=b+224|0;K=b+472|0;L=p|0;M=p+4|0;p=g;a:while(1){b:do{switch(Sc[c[q>>2]&127](e,p,h,n)|0){case 10:{g=Oc[c[r>>2]&255](e,p)|0;if((g|0)<0){N=8;break a}if(s&(g|0)==32){O=c[t>>2]|0;if((O|0)==(c[u>>2]|0)){break b}if((a[O-1|0]|0)==32){break b}}O=Re(g,v)|0;if((O|0)==0){N=15;break a}if((O|0)>0){P=0}else{break b}do{g=c[t>>2]|0;if((g|0)==(c[w>>2]|0)){if((Bd(j)|0)<<24>>24==0){Q=1;N=84;break a}R=c[t>>2]|0}else{R=g}g=a[o+P|0]|0;c[t>>2]=R+1;a[R]=g;P=P+1|0;}while((P|0)<(O|0));break};case 6:{O=c[n>>2]|0;c[m>>2]=p;if((c[t>>2]|0)==0){if((Bd(j)|0)<<24>>24==0){Q=1;N=84;break a}}while(1){Bc[c[x>>2]&63](e,m,O,t,c[w>>2]|0);if((c[m>>2]|0)==(O|0)){break}if((Bd(j)|0)<<24>>24==0){Q=1;N=84;break a}}if((c[u>>2]|0)==0){Q=1;N=84;break a}break};case-3:{c[n>>2]=p+(c[y>>2]|0);N=27;break};case 39:case 7:{N=27;break};case 9:{O=c[y>>2]|0;g=(Hc[c[z>>2]&63](e,p+O|0,(c[n>>2]|0)+(-O|0)|0)|0)&255;if(g<<24>>24!=0){O=c[t>>2]|0;if((O|0)==(c[w>>2]|0)){if((Bd(j)|0)<<24>>24==0){Q=1;N=84;break a}S=c[t>>2]|0}else{S=O}c[t>>2]=S+1;a[S]=g;break b}g=c[y>>2]|0;O=(c[n>>2]|0)+(-g|0)|0;c[l>>2]=p+g;if((c[B>>2]|0)==0){if((Bd(A)|0)<<24>>24==0){Q=1;N=84;break a}}while(1){Bc[c[x>>2]&63](e,l,O,B,c[C>>2]|0);if((c[l>>2]|0)==(O|0)){break}if((Bd(A)|0)<<24>>24==0){Q=1;N=84;break a}}if((c[D>>2]|0)==0){Q=1;N=84;break a}O=c[B>>2]|0;if((O|0)==(c[C>>2]|0)){if((Bd(A)|0)<<24>>24==0){Q=1;N=84;break a}T=c[B>>2]|0}else{T=O}c[B>>2]=T+1;a[T]=0;O=c[D>>2]|0;if((O|0)==0){Q=1;N=84;break a}g=c[E>>2]|0;c:do{if((g|0)==0){U=0}else{V=c[K>>2]|0;W=a[O]|0;if(W<<24>>24==0){X=V}else{Y=O;Z=V;V=W;while(1){_=Y+1|0;$=(Z*1000003|0)^V&255;aa=a[_]|0;if(aa<<24>>24==0){X=$;break}else{Y=_;Z=$;V=aa}}}V=g-1|0;Z=X&V;Y=c[L>>2]|0;aa=c[Y+(Z<<2)>>2]|0;if((aa|0)==0){U=0;break}$=X&-g;_=V>>>2;V=0;ba=Z;Z=aa;while(1){aa=c[Z>>2]|0;if(W<<24>>24==(a[aa]|0)){ca=O;da=aa;aa=W;do{if(aa<<24>>24==0){U=Z;break c}ca=ca+1|0;da=da+1|0;aa=a[ca]|0;}while(aa<<24>>24==(a[da]|0))}if(V<<24>>24==0){ea=($>>>(((d[M]|0)-1|0)>>>0)&_|1)&255}else{ea=V}da=ea&255;aa=(ba>>>0<da>>>0?g:0)+(ba-da)|0;da=c[Y+(aa<<2)>>2]|0;if((da|0)==0){U=0;break}else{V=ea;ba=aa;Z=da}}}}while(0);g=U;c[B>>2]=O;do{if(F){if((a[G]|0)==0){fa=(a[H]|0)!=0}else{fa=(c[I>>2]|0)!=0}ga=fa&1^1;N=67}else{if((a[H]|0)==0){if((U|0)==0){Q=11;N=84;break a}else{N=69;break}}else{ga=(a[G]|0)!=0|0;N=67;break}}}while(0);do{if((N|0)==67){N=0;O=(U|0)!=0;if(ga<<24>>24==0){if(O){break}else{break b}}else{if(O){N=69;break}else{Q=11;N=84;break a}}}}while(0);if((N|0)==69){N=0;if((a[g+34|0]|0)==0){Q=24;N=84;break a}}O=U+32|0;if((a[O]|0)!=0){N=72;break a}if((c[U+28>>2]|0)!=0){N=75;break a}Z=c[U+4>>2]|0;if((Z|0)==0){N=78;break a}ba=Z+(c[U+8>>2]|0)|0;a[O]=1;V=Rd(b,c[J>>2]|0,f,Z,ba,j)|0;a[O]=0;if((V|0)!=0){Q=V;N=84;break a}break};case-4:{Q=0;N=84;break a;break};case-1:{N=5;break a;break};case 0:{N=3;break a;break};default:{N=81;break a}}}while(0);do{if((N|0)==27){N=0;V=c[t>>2]|0;if(s){if((V|0)==(c[u>>2]|0)){break}if((a[V-1|0]|0)==32){break}}if((V|0)==(c[w>>2]|0)){if((Bd(j)|0)<<24>>24==0){Q=1;N=84;break a}ha=c[t>>2]|0}else{ha=V}c[t>>2]=ha+1;a[ha]=32}}while(0);p=c[n>>2]|0}if((N|0)==3){if((c[b+144>>2]|0)!=(e|0)){Q=4;i=k;return Q|0}c[b+272>>2]=c[n>>2];Q=4;i=k;return Q|0}else if((N|0)==5){if((c[b+144>>2]|0)!=(e|0)){Q=4;i=k;return Q|0}c[b+272>>2]=p;Q=4;i=k;return Q|0}else if((N|0)==8){if((c[b+144>>2]|0)!=(e|0)){Q=14;i=k;return Q|0}c[b+272>>2]=p;Q=14;i=k;return Q|0}else if((N|0)==15){if((c[b+144>>2]|0)!=(e|0)){Q=14;i=k;return Q|0}c[b+272>>2]=p;Q=14;i=k;return Q|0}else if((N|0)==72){if((c[b+144>>2]|0)!=(e|0)){Q=12;i=k;return Q|0}c[b+272>>2]=p;Q=12;i=k;return Q|0}else if((N|0)==75){if((c[b+144>>2]|0)!=(e|0)){Q=15;i=k;return Q|0}c[b+272>>2]=p;Q=15;i=k;return Q|0}else if((N|0)==78){if((c[b+144>>2]|0)!=(e|0)){Q=16;i=k;return Q|0}c[b+272>>2]=p;Q=16;i=k;return Q|0}else if((N|0)==81){if((c[b+144>>2]|0)!=(e|0)){Q=23;i=k;return Q|0}c[b+272>>2]=p;Q=23;i=k;return Q|0}else if((N|0)==84){i=k;return Q|0}return 0}function Sd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=i;i=i+8|0;h=g|0;j=b+284|0;k=c[j>>2]|0;if((k|0)==0){l=23;i=g;return l|0}m=c[k+12>>2]|0;n=m+4|0;o=c[n>>2]|0;p=m+12|0;q=o+(c[m+8>>2]|0)|0;r=Gd(b,c[k+16>>2]|0,c[b+224>>2]|0,o+(c[p>>2]|0)|0,q,h,0)|0;if((r|0)!=0){l=r;i=g;return l|0}r=c[h>>2]|0;do{if((q|0)!=(r|0)){if((c[b+464>>2]|0)!=3){break}c[p>>2]=r-(c[n>>2]|0);l=0;i=g;return l|0}}while(0);a[m+32|0]=0;m=k+8|0;c[j>>2]=c[m>>2];j=b+288|0;c[m>>2]=c[j>>2];c[j>>2]=k;c[b+264>>2]=6;l=Gd(b,(c[b+460>>2]|0)!=0|0,c[b+144>>2]|0,d,e,f,(a[b+468|0]|0)==0|0)|0;i=g;return l|0}function Td(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;d=i;i=i+1040|0;e=d|0;f=c[a+124>>2]|0;if((f|0)==0){g=18;i=d;return g|0}vF(e|0,-1|0,1024)|0;h=e+1028|0;c[h>>2]=0;j=e+1024|0;c[j>>2]=0;k=e+1032|0;c[k>>2]=0;do{if((Hc[f&63](c[a+244>>2]|0,b,e)|0)!=0){l=c[a+12>>2]|0;m=Se()|0;n=Ec[l&63](m)|0;c[a+236>>2]=n;if((n|0)!=0){m=Te(n,e|0,c[h>>2]|0,c[j>>2]|0)|0;if((m|0)==0){break}c[a+240>>2]=c[j>>2];c[a+248>>2]=c[k>>2];c[a+144>>2]=m;g=0;i=d;return g|0}m=c[k>>2]|0;if((m|0)==0){g=1;i=d;return g|0}Cc[m&255](c[j>>2]|0);g=1;i=d;return g|0}}while(0);a=c[k>>2]|0;if((a|0)==0){g=18;i=d;return g|0}Cc[a&255](c[j>>2]|0);g=18;i=d;return g|0}function Ud(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=a+228|0;do{if((_e(a+148|0,a+144|0,c[f>>2]|0)|0)==0){g=Td(a,c[f>>2]|0)|0;if((g|0)==0){break}else{h=g}return h|0}}while(0);c[a+264>>2]=92;h=Vd(a,b,d,e)|0;return h|0}function Vd(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0;h=i;i=i+184|0;j=h|0;k=h+8|0;l=h+16|0;m=h+24|0;n=h+32|0;o=h+40|0;p=h+48|0;q=h+56|0;r=h+64|0;s=h+72|0;t=h+80|0;u=h+88|0;v=h+96|0;w=h+104|0;x=h+112|0;y=h+120|0;z=h+128|0;A=h+136|0;B=h+144|0;C=h+152|0;D=h+160|0;E=h+168|0;F=h+176|0;c[F>>2]=e;G=b+144|0;H=c[G>>2]|0;I=Sc[c[H>>2]&127](H,e,f,F)|0;H=c[G>>2]|0;J=b+468|0;K=a[J]|0;c[E>>2]=c[F>>2];F=b+340|0;L=c[F>>2]|0;M=b+272|0;N=b+276|0;O=b+284|0;P=K<<24>>24!=0;K=b+252|0;Q=K|0;R=b+80|0;S=b+44|0;T=b+48|0;U=b+4|0;V=b+464|0;W=b+84|0;X=b+308|0;Y=b+400|0;Z=b+412|0;_=b+408|0;$=b+416|0;aa=b+304|0;ba=b+312|0;ca=b+404|0;da=b+400|0;ea=L+129|0;fa=L+128|0;ga=b+300|0;ha=L+80|0;ia=L+92|0;ja=L+88|0;ka=L+96|0;la=b+136|0;ma=b+88|0;na=b+328|0;oa=b+132|0;pa=b+332|0;qa=b+336|0;ra=b+316|0;sa=b+337|0;ta=b+12|0;ua=b+16|0;va=z|0;wa=L+120|0;xa=L+116|0;ya=b+344|0;za=L+130|0;Aa=b+108|0;Ba=b+92|0;Ca=L|0;Da=b+460|0;Ea=b+324|0;Fa=b+320|0;Ga=b+96|0;Ha=b+256|0;Ia=b+452|0;Ja=b+448|0;Ka=L+140|0;La=L+160|0;Ma=L+164|0;Na=L+144|0;Oa=b+128|0;Pa=L+156|0;Qa=L+148|0;L=H;H=e;e=I;a:while(1){c[M>>2]=H;c[N>>2]=c[E>>2];b:do{if((e|0)<1){if(!((e|0)==0|P)){Ra=4;break a}switch(e|0){case 0:{Ra=6;break a;break};case-1:{Sa=5;Ra=486;break a;break};case-2:{Ra=487;break a;break};case-15:{Ta=15;break b;break};case-4:{Ua=3;Ra=488;break a;break};default:{}}c[E>>2]=f;Ta=-e|0}else{Ta=e}}while(0);I=Gc[c[Q>>2]&127](K,Ta,H,c[E>>2]|0,L)|0;c:do{switch(I|0){case 28:{c[ra>>2]=28928;Ra=121;break};case 29:{c[ra>>2]=28888;Ra=121;break};case 30:{c[ra>>2]=28872;Ra=121;break};case 5:{a[ea]=1;if((c[W>>2]|0)==0){Va=1}else{Wa=c[L+64>>2]|0;Xa=(c[E>>2]|0)+(-Wa|0)|0;c[w>>2]=H+Wa;if((c[Z>>2]|0)==0){if((Bd(Y)|0)<<24>>24==0){Ra=261;break a}}Wa=L+56|0;while(1){Bc[c[Wa>>2]&63](L,w,Xa,Z,c[_>>2]|0);if((c[w>>2]|0)==(Xa|0)){break}if((Bd(Y)|0)<<24>>24==0){Ra=261;break a}}if((c[$>>2]|0)==0){Ra=261;break a}Xa=c[Z>>2]|0;if((Xa|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Ra=261;break a}Ya=c[Z>>2]|0}else{Ya=Xa}c[Z>>2]=Ya+1;a[Ya]=0;Xa=c[$>>2]|0;c[X>>2]=Xa;if((Xa|0)==0){Sa=1;Ra=486;break a}c[$>>2]=c[Z>>2];Va=0}if((a[za]|0)!=0){Za=Va;Ra=475;break c}Xa=c[Aa>>2]|0;if((Xa|0)==0){Za=Va;Ra=475;break c}if((Ec[Xa&63](c[U>>2]|0)|0)==0){Sa=22;Ra=486;break a}else{Za=Va;Ra=475}break};case 4:{if((c[W>>2]|0)==0){_a=1}else{Xa=c[E>>2]|0;c[D>>2]=H;if((c[Z>>2]|0)==0){if((Bd(Y)|0)<<24>>24==0){Ra=21;break a}}Wa=L+56|0;while(1){Bc[c[Wa>>2]&63](L,D,Xa,Z,c[_>>2]|0);if((c[D>>2]|0)==(Xa|0)){break}if((Bd(Y)|0)<<24>>24==0){Ra=21;break a}}if((c[$>>2]|0)==0){Ra=21;break a}Xa=c[Z>>2]|0;if((Xa|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Ra=21;break a}$a=c[Z>>2]|0}else{$a=Xa}c[Z>>2]=$a+1;a[$a]=0;Xa=c[$>>2]|0;c[aa>>2]=Xa;if((Xa|0)==0){Sa=1;Ra=486;break a}c[$>>2]=c[Z>>2];c[ba>>2]=0;_a=0}c[X>>2]=0;Za=_a;Ra=475;break};case 1:{Xa=Ed(b,0,H,c[E>>2]|0)|0;if((Xa|0)!=0){Sa=Xa;Ra=486;break a}ab=c[G>>2]|0;break};case 34:{Xa=c[E>>2]|0;Wa=c[F>>2]|0;bb=Wa+80|0;c[l>>2]=H;cb=Wa+92|0;if((c[cb>>2]|0)==0){if((Bd(bb)|0)<<24>>24==0){Ra=109;break a}}db=L+56|0;eb=Wa+88|0;while(1){Bc[c[db>>2]&63](L,l,Xa,cb,c[eb>>2]|0);if((c[l>>2]|0)==(Xa|0)){break}if((Bd(bb)|0)<<24>>24==0){Ra=109;break a}}Xa=Wa+96|0;if((c[Xa>>2]|0)==0){Ra=109;break a}db=c[cb>>2]|0;if((db|0)==(c[eb>>2]|0)){if((Bd(bb)|0)<<24>>24==0){Ra=109;break a}fb=c[cb>>2]|0}else{fb=db}c[cb>>2]=fb+1;a[fb]=0;db=c[Xa>>2]|0;if((db|0)==0){Ra=109;break a}gb=Cd(b,Wa+20|0,db,24)|0;hb=gb;if((gb|0)==0){Ra=109;break a}if((c[gb>>2]|0)==(db|0)){c[Xa>>2]=c[cb>>2];if((Pd(b,hb)|0)==0){Ra=109;break a}}else{c[cb>>2]=c[Xa>>2]}c[na>>2]=hb;Ra=121;break};case 21:{if((Sc[c[L+52>>2]&127](L,H,c[E>>2]|0,M)|0)==0){Sa=32;Ra=486;break a}if((c[Fa>>2]|0)==0){Ra=476;break c}hb=c[L+64>>2]|0;Xa=(c[E>>2]|0)+(-hb|0)|0;c[r>>2]=H+hb;if((c[Z>>2]|0)==0){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}}hb=L+56|0;while(1){Bc[c[hb>>2]&63](L,r,Xa,Z,c[_>>2]|0);if((c[r>>2]|0)==(Xa|0)){break}if((Bd(Y)|0)<<24>>24==0){Ua=1;Ra=488;break a}}if((c[$>>2]|0)==0){Sa=1;Ra=486;break a}Xa=c[Z>>2]|0;if((Xa|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}ib=c[Z>>2]|0}else{ib=Xa}c[Z>>2]=ib+1;a[ib]=0;Xa=c[$>>2]|0;if((Xa|0)==0){Sa=1;Ra=486;break a}hb=a[Xa]|0;do{if(hb<<24>>24==0){jb=Xa}else{cb=Xa;Wa=Xa;bb=hb;while(1){eb=bb<<24>>24;do{if((eb|0)==32|(eb|0)==13|(eb|0)==10){if((cb|0)==(Xa|0)){kb=Xa;break}if((a[cb-1|0]|0)==32){kb=cb;break}a[cb]=32;kb=cb+1|0}else{a[cb]=bb;kb=cb+1|0}}while(0);eb=Wa+1|0;db=a[eb]|0;if(db<<24>>24==0){break}else{cb=kb;Wa=eb;bb=db}}if((kb|0)==(Xa|0)){jb=Xa;break}bb=kb-1|0;jb=(a[bb]|0)==32?bb:kb}}while(0);a[jb]=0;c[Ea>>2]=Xa;c[$>>2]=c[Z>>2];ab=L;break};case 23:{a[qa]=1;c[ra>>2]=28944;Ra=121;break};case 37:case 38:{if((a[fa]|0)==0){Ra=476;break c}hb=a[qa]|0;bb=c[L+64>>2]|0;Wa=Rd(b,L,hb,H+bb|0,(c[E>>2]|0)+(-bb|0)|0,ha)|0;if((Wa|0)!=0){Sa=Wa;Ra=486;break a}Wa=c[ia>>2]|0;do{if(hb<<24>>24==0){if((Wa|0)==(c[ka>>2]|0)){lb=Wa;break}bb=Wa-1|0;if((a[bb]|0)!=32){lb=Wa;break}c[ia>>2]=bb;lb=bb}else{lb=Wa}}while(0);if((lb|0)==(c[ja>>2]|0)){if((Bd(ha)|0)<<24>>24==0){Sa=1;Ra=486;break a}mb=c[ia>>2]|0}else{mb=lb}c[ia>>2]=mb+1;a[mb]=0;Wa=c[ka>>2]|0;c[ka>>2]=c[ia>>2];hb=c[na>>2]|0;Xa=c[pa>>2]|0;bb=a[qa]|0;cb=hb+12|0;db=c[cb>>2]|0;d:do{if((Wa|0)!=0&(db|0)>0){eb=c[hb+20>>2]|0;gb=0;while(1){nb=gb+1|0;if((c[eb+(gb*12|0)>>2]|0)==(Xa|0)){break d}if((nb|0)<(db|0)){gb=nb}else{Ra=187;break}}}else{Ra=187}}while(0);if((Ra|0)==187){Ra=0;gb=hb+16|0;do{if((db|0)==(c[gb>>2]|0)){if((db|0)==0){c[gb>>2]=8;eb=Ec[c[ta>>2]&63](96)|0;nb=eb;c[hb+20>>2]=nb;if((eb|0)==0){Sa=1;Ra=486;break a}else{ob=nb;break}}nb=hb+20|0;eb=Oc[c[ua>>2]&255](c[nb>>2]|0,db*24|0)|0;if((eb|0)==0){Sa=1;Ra=486;break a}pb=eb;c[gb>>2]=db<<1;c[nb>>2]=pb;ob=pb}else{ob=c[hb+20>>2]|0}}while(0);hb=c[cb>>2]|0;c[ob+(hb*12|0)>>2]=Xa;c[ob+(hb*12|0)+8>>2]=Wa;a[ob+(hb*12|0)+4|0]=bb;if(bb<<24>>24==0){a[Xa+8|0]=1}c[cb>>2]=(c[cb>>2]|0)+1}if((c[oa>>2]|0)==0){Ra=476;break c}hb=c[ra>>2]|0;if((hb|0)==0){Ra=476;break c}db=a[hb]|0;if((db<<24>>24|0)==78){if((a[hb+1|0]|0)==79){Ra=200}}else if((db<<24>>24|0)==40){Ra=200}if((Ra|0)==200){Ra=0;db=c[Z>>2]|0;if((db|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}qb=c[Z>>2]|0}else{qb=db}c[Z>>2]=qb+1;a[qb]=41;db=c[Z>>2]|0;if((db|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}rb=c[Z>>2]|0}else{rb=db}c[Z>>2]=rb+1;a[rb]=0;c[ra>>2]=c[$>>2];c[$>>2]=c[Z>>2]}c[N>>2]=H;Ic[c[oa>>2]&15](c[U>>2]|0,c[c[na>>2]>>2]|0,c[c[pa>>2]>>2]|0,c[ra>>2]|0,Wa,(I|0)==38|0);db=c[ca>>2]|0;hb=c[da>>2]|0;do{if((db|0)==0){c[ca>>2]=hb}else{if((hb|0)==0){break}else{sb=hb;tb=db}while(1){gb=sb|0;pb=c[gb>>2]|0;c[gb>>2]=tb;c[ca>>2]=sb;if((pb|0)==0){break}else{tb=sb;sb=pb}}}}while(0);c[da>>2]=0;c[$>>2]=0;c[Z>>2]=0;c[_>>2]=0;ab=L;break};case 10:{c[ga>>2]=0;Ra=476;break};case 18:{c[Ea>>2]=0;c[Fa>>2]=0;if((c[Ga>>2]|0)==0){Ra=476;break c}db=c[E>>2]|0;c[s>>2]=H;if((c[Z>>2]|0)==0){if((Bd(Y)|0)<<24>>24==0){Ra=333;break a}}hb=L+56|0;while(1){Bc[c[hb>>2]&63](L,s,db,Z,c[_>>2]|0);if((c[s>>2]|0)==(db|0)){break}if((Bd(Y)|0)<<24>>24==0){Ra=333;break a}}if((c[$>>2]|0)==0){Ra=333;break a}db=c[Z>>2]|0;if((db|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Ra=333;break a}ub=c[Z>>2]|0}else{ub=db}c[Z>>2]=ub+1;a[ub]=0;db=c[$>>2]|0;c[Fa>>2]=db;if((db|0)==0){Sa=1;Ra=486;break a}c[$>>2]=c[Z>>2];ab=L;break};case 6:{a[ea]=1;if((c[W>>2]|0)==0){Ra=53;break c}if((Sc[c[L+52>>2]&127](L,H,c[E>>2]|0,M)|0)==0){Sa=32;Ra=486;break a}db=c[L+64>>2]|0;hb=(c[E>>2]|0)+(-db|0)|0;c[C>>2]=H+db;if((c[Z>>2]|0)==0){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}}db=L+56|0;while(1){Bc[c[db>>2]&63](L,C,hb,Z,c[_>>2]|0);if((c[C>>2]|0)==(hb|0)){break}if((Bd(Y)|0)<<24>>24==0){Ua=1;Ra=488;break a}}if((c[$>>2]|0)==0){Sa=1;Ra=486;break a}hb=c[Z>>2]|0;if((hb|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}vb=c[Z>>2]|0}else{vb=hb}c[Z>>2]=vb+1;a[vb]=0;hb=c[$>>2]|0;if((hb|0)==0){Sa=1;Ra=486;break a}db=a[hb]|0;do{if(db<<24>>24==0){wb=hb}else{Wa=hb;cb=hb;Xa=db;while(1){bb=Xa<<24>>24;do{if((bb|0)==32|(bb|0)==13|(bb|0)==10){if((Wa|0)==(hb|0)){xb=hb;break}if((a[Wa-1|0]|0)==32){xb=Wa;break}a[Wa]=32;xb=Wa+1|0}else{a[Wa]=Xa;xb=Wa+1|0}}while(0);bb=cb+1|0;pb=a[bb]|0;if(pb<<24>>24==0){break}else{Wa=xb;cb=bb;Xa=pb}}if((xb|0)==(hb|0)){wb=hb;break}Xa=xb-1|0;wb=(a[Xa]|0)==32?Xa:xb}}while(0);a[wb]=0;c[$>>2]=c[Z>>2];c[ba>>2]=hb;yb=0;Ra=54;break};case 19:{do{if((c[Fa>>2]|0)==0){zb=1}else{if((c[Ga>>2]|0)==0){zb=1;break}db=c[L+64>>2]|0;Xa=(c[E>>2]|0)+(-db|0)|0;c[q>>2]=H+db;if((c[Z>>2]|0)==0){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}}db=L+56|0;while(1){Bc[c[db>>2]&63](L,q,Xa,Z,c[_>>2]|0);if((c[q>>2]|0)==(Xa|0)){break}if((Bd(Y)|0)<<24>>24==0){Ua=1;Ra=488;break a}}if((c[$>>2]|0)==0){Sa=1;Ra=486;break a}Xa=c[Z>>2]|0;if((Xa|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}Ab=c[Z>>2]|0}else{Ab=Xa}c[Z>>2]=Ab+1;a[Ab]=0;Xa=c[$>>2]|0;if((Xa|0)==0){Sa=1;Ra=486;break a}c[N>>2]=H;Bc[c[Ga>>2]&63](c[U>>2]|0,c[Fa>>2]|0,c[ya>>2]|0,Xa,c[Ea>>2]|0);zb=0}}while(0);hb=c[ca>>2]|0;Xa=c[da>>2]|0;do{if((hb|0)==0){c[ca>>2]=Xa}else{if((Xa|0)==0){break}else{Bb=Xa;Cb=hb}while(1){db=Bb|0;cb=c[db>>2]|0;c[db>>2]=Cb;c[ca>>2]=Bb;if((cb|0)==0){break}else{Cb=Bb;Bb=cb}}}}while(0);c[da>>2]=0;c[$>>2]=0;c[Z>>2]=0;c[_>>2]=0;Za=zb;Ra=475;break};case-1:{Ra=384;break a;break};case 44:{hb=c[Ia>>2]|0;do{if((c[Ha>>2]|0)>>>0>=hb>>>0){if((hb|0)==0){Xa=c[ta>>2]|0;c[Ia>>2]=32;cb=Ec[Xa&63](32)|0;c[Ja>>2]=cb;if((cb|0)==0){Sa=1;Ra=486;break a}else{break}}cb=c[ua>>2]|0;Xa=c[Ja>>2]|0;db=hb<<1;c[Ia>>2]=db;Wa=Oc[cb&255](Xa,db)|0;if((Wa|0)==0){Sa=1;Ra=486;break a}c[Ja>>2]=Wa;Wa=c[Ma>>2]|0;if((Wa|0)==0){break}db=Oc[c[ua>>2]&255](Wa,c[Ia>>2]<<2)|0;if((db|0)==0){Sa=1;Ra=486;break a}c[Ma>>2]=db}}while(0);a[(c[Ja>>2]|0)+(c[Ha>>2]|0)|0]=0;if((a[Ka]|0)==0){Ra=476;break c}hb=Wd(b)|0;if((hb|0)<0){Sa=1;Ra=486;break a}c[(c[Ma>>2]|0)+(c[La>>2]<<2)>>2]=hb;c[La>>2]=(c[La>>2]|0)+1;c[(c[Na>>2]|0)+(hb*28|0)>>2]=6;Za=(c[Oa>>2]|0)==0|0;Ra=475;break};case 8:{hb=c[aa>>2]|0;if((hb|0)==0){Db=1}else{Bc[c[W>>2]&63](c[U>>2]|0,hb,c[X>>2]|0,c[ba>>2]|0,0);hb=c[ca>>2]|0;db=c[da>>2]|0;do{if((hb|0)==0){c[ca>>2]=db}else{if((db|0)==0){break}else{Eb=db;Fb=hb}while(1){Wa=Eb|0;Xa=c[Wa>>2]|0;c[Wa>>2]=Fb;c[ca>>2]=Eb;if((Xa|0)==0){break}else{Fb=Eb;Eb=Xa}}}}while(0);c[da>>2]=0;c[$>>2]=0;c[Z>>2]=0;c[_>>2]=0;Db=0}hb=c[ma>>2]|0;if((hb|0)==0){Za=Db;Ra=475;break c}Cc[hb&255](c[U>>2]|0);ab=L;break};case 9:{if((Hc[c[L+44>>2]&63](L,H,c[E>>2]|0)|0)!=0){c[ga>>2]=0;Ra=476;break c}if((a[fa]|0)==0){c[ia>>2]=c[ka>>2];c[ga>>2]=0;Ra=476;break c}hb=c[E>>2]|0;c[t>>2]=H;if((c[ia>>2]|0)==0){if((Bd(ha)|0)<<24>>24==0){Sa=1;Ra=486;break a}}db=L+56|0;while(1){Bc[c[db>>2]&63](L,t,hb,ia,c[ja>>2]|0);if((c[t>>2]|0)==(hb|0)){break}if((Bd(ha)|0)<<24>>24==0){Ua=1;Ra=488;break a}}if((c[ka>>2]|0)==0){Sa=1;Ra=486;break a}hb=c[ia>>2]|0;if((hb|0)==(c[ja>>2]|0)){if((Bd(ha)|0)<<24>>24==0){Sa=1;Ra=486;break a}Gb=c[ia>>2]|0}else{Gb=hb}c[ia>>2]=Gb+1;a[Gb]=0;hb=c[ka>>2]|0;if((hb|0)==0){Sa=1;Ra=486;break a}db=Cd(b,Ca,hb,36)|0;c[ga>>2]=db;if((db|0)==0){Sa=1;Ra=486;break a}if((c[db>>2]|0)!=(hb|0)){c[ia>>2]=c[ka>>2];c[ga>>2]=0;Ra=476;break c}c[ka>>2]=c[ia>>2];c[(c[ga>>2]|0)+24>>2]=0;a[(c[ga>>2]|0)+33|0]=0;if((c[Da>>2]|0)==0){Hb=(c[O>>2]|0)==0|0}else{Hb=0}a[(c[ga>>2]|0)+34|0]=Hb;Za=(c[la>>2]|0)==0|0;Ra=475;break};case 14:{Ra=53;break};case 50:{hb=(c[Ja>>2]|0)+(c[Ha>>2]|0)|0;if((a[hb]|0)==124){Sa=2;Ra=486;break a}a[hb]=44;if((a[Ka]|0)==0){Ra=476;break c}Za=(c[Oa>>2]|0)==0|0;Ra=475;break};case 49:{hb=c[Ha>>2]|0;db=c[Ja>>2]|0;Xa=a[db+hb|0]|0;if(Xa<<24>>24==44){Sa=2;Ra=486;break a}do{if((a[Ka]|0)!=0&Xa<<24>>24==0){Wa=(c[Na>>2]|0)+((c[(c[Ma>>2]|0)+((c[La>>2]|0)-1<<2)>>2]|0)*28|0)|0;if((c[Wa>>2]|0)==3){Ib=1;Jb=hb;Kb=db;break}c[Wa>>2]=5;Ib=(c[Oa>>2]|0)==0|0;Jb=c[Ha>>2]|0;Kb=c[Ja>>2]|0}else{Ib=1;Jb=hb;Kb=db}}while(0);a[Kb+Jb|0]=124;Za=Ib;Ra=475;break};case 55:{if((Md(b,L,H,c[E>>2]|0)|0)==0){Sa=1;Ra=486;break a}else{ab=L}break};case 56:{if((Nd(b,L,H,c[E>>2]|0)|0)==0){Sa=1;Ra=486;break a}else{ab=L}break};case 0:{Za=(Ta|0)!=14|0;Ra=475;break};case 3:{Za=(c[W>>2]|0)==0|0;Ra=475;break};case 11:{if((a[fa]|0)==0){Ra=476;break c}Za=(c[la>>2]|0)==0|0;Ra=475;break};case 17:{Za=(c[Ga>>2]|0)==0|0;Ra=475;break};case 33:{if((a[fa]|0)==0){Ra=476;break c}Za=(c[oa>>2]|0)==0|0;Ra=475;break};case 39:{Za=(c[Oa>>2]|0)==0|0;Ra=475;break};case 2:{Ra=84;break a;break};case 24:{a[sa]=1;c[ra>>2]=28912;Ra=121;break};case 25:{c[ra>>2]=28904;Ra=121;break};case 26:{c[ra>>2]=28896;Ra=121;break};case 27:{c[ra>>2]=28920;Ra=121;break};case 35:case 36:{if((a[fa]|0)==0){Ra=476;break c}db=c[na>>2]|0;hb=c[pa>>2]|0;Xa=a[qa]|0;Wa=db+12|0;cb=c[Wa>>2]|0;e:do{if((a[sa]|0)==0){Ra=149}else{if((cb|0)>0){pb=c[db+20>>2]|0;bb=0;while(1){gb=bb+1|0;if((c[pb+(bb*12|0)>>2]|0)==(hb|0)){break e}if((gb|0)<(cb|0)){bb=gb}else{break}}}bb=db+8|0;if((c[bb>>2]|0)!=0){Ra=149;break}if((a[hb+9|0]|0)!=0){Ra=149;break}c[bb>>2]=hb;Ra=149}}while(0);if((Ra|0)==149){Ra=0;bb=db+16|0;do{if((cb|0)==(c[bb>>2]|0)){if((cb|0)==0){c[bb>>2]=8;pb=Ec[c[ta>>2]&63](96)|0;gb=pb;c[db+20>>2]=gb;if((pb|0)==0){Sa=1;Ra=486;break a}else{Lb=gb;break}}gb=db+20|0;pb=Oc[c[ua>>2]&255](c[gb>>2]|0,cb*24|0)|0;if((pb|0)==0){Sa=1;Ra=486;break a}nb=pb;c[bb>>2]=cb<<1;c[gb>>2]=nb;Lb=nb}else{Lb=c[db+20>>2]|0}}while(0);db=c[Wa>>2]|0;c[Lb+(db*12|0)>>2]=hb;c[Lb+(db*12|0)+8>>2]=0;a[Lb+(db*12|0)+4|0]=Xa;if(Xa<<24>>24==0){a[hb+8|0]=1}c[Wa>>2]=(c[Wa>>2]|0)+1}if((c[oa>>2]|0)==0){Ra=476;break c}db=c[ra>>2]|0;if((db|0)==0){Ra=476;break c}cb=a[db]|0;if((cb<<24>>24|0)==78){if((a[db+1|0]|0)==79){Ra=162}}else if((cb<<24>>24|0)==40){Ra=162}if((Ra|0)==162){Ra=0;cb=c[Z>>2]|0;if((cb|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}Mb=c[Z>>2]|0}else{Mb=cb}c[Z>>2]=Mb+1;a[Mb]=41;cb=c[Z>>2]|0;if((cb|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}Nb=c[Z>>2]|0}else{Nb=cb}c[Z>>2]=Nb+1;a[Nb]=0;c[ra>>2]=c[$>>2];c[$>>2]=c[Z>>2]}c[N>>2]=H;Ic[c[oa>>2]&15](c[U>>2]|0,c[c[na>>2]>>2]|0,c[c[pa>>2]>>2]|0,c[ra>>2]|0,0,(I|0)==36|0);cb=c[ca>>2]|0;db=c[da>>2]|0;do{if((cb|0)==0){c[ca>>2]=db}else{if((db|0)==0){break}else{Ob=db;Pb=cb}while(1){bb=Ob|0;nb=c[bb>>2]|0;c[bb>>2]=Pb;c[ca>>2]=Ob;if((nb|0)==0){break}else{Pb=Ob;Ob=nb}}}}while(0);c[da>>2]=0;c[$>>2]=0;c[Z>>2]=0;c[_>>2]=0;ab=L;break};case 40:{if((c[Oa>>2]|0)==0){Ra=476;break c}cb=c[E>>2]|0;db=c[F>>2]|0;Wa=db+80|0;c[k>>2]=H;hb=db+92|0;if((c[hb>>2]|0)==0){if((Bd(Wa)|0)<<24>>24==0){Ra=423;break a}}Xa=L+56|0;nb=db+88|0;while(1){Bc[c[Xa>>2]&63](L,k,cb,hb,c[nb>>2]|0);if((c[k>>2]|0)==(cb|0)){break}if((Bd(Wa)|0)<<24>>24==0){Ra=423;break a}}cb=db+96|0;if((c[cb>>2]|0)==0){Ra=423;break a}Xa=c[hb>>2]|0;if((Xa|0)==(c[nb>>2]|0)){if((Bd(Wa)|0)<<24>>24==0){Ra=423;break a}Qb=c[hb>>2]|0}else{Qb=Xa}c[hb>>2]=Qb+1;a[Qb]=0;Xa=c[cb>>2]|0;if((Xa|0)==0){Ra=423;break a}bb=Cd(b,db+20|0,Xa,24)|0;gb=bb;if((bb|0)==0){Ra=423;break a}if((c[bb>>2]|0)==(Xa|0)){c[cb>>2]=c[hb>>2];if((Pd(b,gb)|0)==0){Ra=423;break a}}else{c[hb>>2]=c[cb>>2]}c[na>>2]=gb;c[La>>2]=0;c[Pa>>2]=0;a[Ka]=1;ab=L;break};case 22:{gb=Qd(b,L,H,c[E>>2]|0)|0;c[pa>>2]=gb;if((gb|0)==0){Sa=1;Ra=486;break a}a[qa]=0;c[ra>>2]=0;a[sa]=0;Ra=121;break};case 53:{Rb=1;Ra=435;break};case 52:{Rb=2;Ra=435;break};case 54:{Rb=3;Ra=435;break};case 51:{Rb=0;Ra=435;break};case 47:{Sb=1;Ra=459;break};case 46:{Sb=2;Ra=459;break};case 48:{Sb=3;Ra=459;break};case 45:{Sb=0;Ra=459;break};case 7:{gb=c[W>>2]|0;if((gb|0)==0){Ra=476;break c}Bc[gb&63](c[U>>2]|0,c[aa>>2]|0,c[X>>2]|0,c[ba>>2]|0,1);c[aa>>2]=0;gb=c[ca>>2]|0;cb=c[da>>2]|0;do{if((gb|0)==0){c[ca>>2]=cb}else{if((cb|0)==0){break}else{Tb=cb;Ub=gb}while(1){Xa=Tb|0;bb=c[Xa>>2]|0;c[Xa>>2]=Ub;c[ca>>2]=Tb;if((bb|0)==0){break}else{Ub=Tb;Tb=bb}}}}while(0);c[da>>2]=0;c[$>>2]=0;c[Z>>2]=0;c[_>>2]=0;ab=L;break};case 13:{if((a[fa]|0)==0){Ra=476;break c}if((c[ga>>2]|0)==0){Ra=476;break c}gb=c[L+64>>2]|0;cb=(c[E>>2]|0)+(-gb|0)|0;c[v>>2]=H+gb;if((c[ia>>2]|0)==0){if((Bd(ha)|0)<<24>>24==0){Vb=0}else{Ra=271}}else{Ra=271}f:do{if((Ra|0)==271){Ra=0;gb=L+56|0;while(1){Bc[c[gb>>2]&63](L,v,cb,ia,c[ja>>2]|0);if((c[v>>2]|0)==(cb|0)){break}if((Bd(ha)|0)<<24>>24==0){Vb=0;break f}}if((c[ka>>2]|0)==0){Vb=0;break}gb=c[ia>>2]|0;if((gb|0)==(c[ja>>2]|0)){if((Bd(ha)|0)<<24>>24==0){Vb=0;break}Wb=c[ia>>2]|0}else{Wb=gb}c[ia>>2]=Wb+1;a[Wb]=0;Vb=c[ka>>2]|0}}while(0);c[(c[ga>>2]|0)+16>>2]=Vb;cb=c[ga>>2]|0;if((c[cb+16>>2]|0)==0){Sa=1;Ra=486;break a}c[cb+20>>2]=c[ya>>2];c[ka>>2]=c[ia>>2];Za=(c[la>>2]|0)==0|0;Ra=475;break};case 20:{do{if((c[Ea>>2]|0)==0){Xb=1}else{if((c[Ga>>2]|0)==0){Xb=1;break}c[N>>2]=H;Bc[c[Ga>>2]&63](c[U>>2]|0,c[Fa>>2]|0,c[ya>>2]|0,0,c[Ea>>2]|0);Xb=0}}while(0);cb=c[ca>>2]|0;gb=c[da>>2]|0;do{if((cb|0)==0){c[ca>>2]=gb}else{if((gb|0)==0){break}else{Yb=gb;Zb=cb}while(1){hb=Yb|0;db=c[hb>>2]|0;c[hb>>2]=Zb;c[ca>>2]=Yb;if((db|0)==0){break}else{Zb=Yb;Yb=db}}}}while(0);c[da>>2]=0;c[$>>2]=0;c[Z>>2]=0;c[_>>2]=0;Za=Xb;Ra=475;break};case 57:{if((a[za]|0)!=0){Ra=476;break c}cb=c[Aa>>2]|0;if((cb|0)==0){Ra=476;break c}if((Ec[cb&63](c[U>>2]|0)|0)==0){Sa=22;Ra=486;break a}else{Ra=476}break};case 31:case 32:{if((a[fa]|0)==0){Ra=476;break c}if((c[oa>>2]|0)==0){Ra=476;break c}if((c[ra>>2]|0)==0){_b=(I|0)==32?28840:28856}else{_b=28864}cb=a[_b]|0;if(cb<<24>>24!=0){gb=_b;db=cb;do{cb=c[Z>>2]|0;if((cb|0)==(c[_>>2]|0)){if((Bd(Y)|0)<<24>>24==0){Ua=1;Ra=488;break a}$b=a[gb]|0;ac=c[Z>>2]|0}else{$b=db;ac=cb}c[Z>>2]=ac+1;a[ac]=$b;gb=gb+1|0;db=a[gb]|0;}while(db<<24>>24!=0)}if((c[$>>2]|0)==0){Sa=1;Ra=486;break a}db=c[E>>2]|0;c[A>>2]=H;if((c[Z>>2]|0)==0){if((Bd(Y)|0)<<24>>24==0){Sa=1;Ra=486;break a}}gb=L+56|0;while(1){Bc[c[gb>>2]&63](L,A,db,Z,c[_>>2]|0);if((c[A>>2]|0)==(db|0)){break}if((Bd(Y)|0)<<24>>24==0){Ua=1;Ra=488;break a}}db=c[$>>2]|0;if((db|0)==0){Sa=1;Ra=486;break a}c[ra>>2]=db;ab=L;break};case 41:case 42:{if((a[Ka]|0)==0){Ra=476;break c}if((c[Oa>>2]|0)==0){bc=1}else{db=Ec[c[ta>>2]&63](20)|0;if((db|0)==0){Sa=1;Ra=486;break a}vF(db+4|0,0,16)|0;c[db>>2]=(I|0)==41?2:1;c[N>>2]=H;Tc[c[Oa>>2]&127](c[U>>2]|0,c[c[na>>2]>>2]|0,db);bc=0}a[Ka]=0;Za=bc;Ra=475;break};case 43:{if((a[Ka]|0)==0){Ra=476;break c}c[(c[Na>>2]|0)+((c[(c[Ma>>2]|0)+((c[La>>2]|0)-1<<2)>>2]|0)*28|0)>>2]=3;Za=(c[Oa>>2]|0)==0|0;Ra=475;break};case 15:{if((a[fa]|0)==0){Ra=476;break c}if((c[ga>>2]|0)==0){Ra=476;break c}if((c[la>>2]|0)==0){Ra=476;break c}c[N>>2]=H;db=c[ga>>2]|0;Nc[c[la>>2]&1](c[U>>2]|0,c[db>>2]|0,d[db+33|0]|0,0,0,c[db+20>>2]|0,c[db+16>>2]|0,c[db+24>>2]|0,0);ab=L;break};case 16:{if((a[fa]|0)==0){Ra=476;break c}if((c[ga>>2]|0)==0){Ra=476;break c}db=c[E>>2]|0;c[u>>2]=H;if((c[ia>>2]|0)==0){if((Bd(ha)|0)<<24>>24==0){cc=0}else{Ra=289}}else{Ra=289}g:do{if((Ra|0)==289){Ra=0;gb=L+56|0;while(1){Bc[c[gb>>2]&63](L,u,db,ia,c[ja>>2]|0);if((c[u>>2]|0)==(db|0)){break}if((Bd(ha)|0)<<24>>24==0){cc=0;break g}}if((c[ka>>2]|0)==0){cc=0;break}gb=c[ia>>2]|0;if((gb|0)==(c[ja>>2]|0)){if((Bd(ha)|0)<<24>>24==0){cc=0;break}dc=c[ia>>2]|0}else{dc=gb}c[ia>>2]=dc+1;a[dc]=0;cc=c[ka>>2]|0}}while(0);c[(c[ga>>2]|0)+28>>2]=cc;if((c[(c[ga>>2]|0)+28>>2]|0)==0){Sa=1;Ra=486;break a}c[ka>>2]=c[ia>>2];if((c[Ba>>2]|0)!=0){c[N>>2]=H;db=c[ga>>2]|0;Ic[c[Ba>>2]&15](c[U>>2]|0,c[db>>2]|0,c[db+20>>2]|0,c[db+16>>2]|0,c[db+24>>2]|0,c[db+28>>2]|0);ab=L;break c}if((c[la>>2]|0)==0){Ra=476;break c}c[N>>2]=H;db=c[ga>>2]|0;Nc[c[la>>2]&1](c[U>>2]|0,c[db>>2]|0,0,0,0,c[db+20>>2]|0,c[db+16>>2]|0,c[db+24>>2]|0,c[db+28>>2]|0);ab=L;break};case 12:{if((a[fa]|0)==0){Ra=476;break c}db=L+64|0;gb=c[db>>2]|0;cb=H+gb|0;hb=(c[E>>2]|0)+(-gb|0)|0;gb=c[F>>2]|0;Wa=gb+104|0;if((c[Wa>>2]|0)==0){if((Bd(Wa)|0)<<24>>24==0){ec=1}else{Ra=215}}else{Ra=215}h:do{if((Ra|0)==215){Ra=0;nb=L+16|0;bb=gb+116|0;Xa=L+56|0;pb=gb+112|0;eb=gb+120|0;fc=L+40|0;gc=cb;i:while(1){j:do{switch(Sc[c[nb>>2]&127](L,gc,hb,y)|0){case 28:{Ra=217;break i;break};case 9:case 6:{hc=c[y>>2]|0;c[x>>2]=gc;if((c[bb>>2]|0)==0){if((Bd(Wa)|0)<<24>>24==0){ec=1;break h}}while(1){Bc[c[Xa>>2]&63](L,x,hc,bb,c[pb>>2]|0);if((c[x>>2]|0)==(hc|0)){break}if((Bd(Wa)|0)<<24>>24==0){ec=1;break h}}if((c[eb>>2]|0)==0){ec=1;break h}break};case-3:{c[y>>2]=gc+(c[db>>2]|0);Ra=224;break};case 7:{Ra=224;break};case 10:{hc=Oc[c[fc>>2]&255](L,gc)|0;if((hc|0)<0){Ra=229;break i}ic=Re(hc,va)|0;if((ic|0)==0){Ra=233;break i}if((ic|0)>0){jc=0}else{break j}do{hc=c[bb>>2]|0;if((c[pb>>2]|0)==(hc|0)){if((Bd(Wa)|0)<<24>>24==0){ec=1;break h}kc=c[bb>>2]|0}else{kc=hc}hc=a[z+jc|0]|0;c[bb>>2]=kc+1;a[kc]=hc;jc=jc+1|0;}while((jc|0)<(ic|0));break};case-1:{Ra=239;break i;break};case 0:{Ra=241;break i;break};case-4:{ec=0;break h;break};default:{Ra=243;break i}}}while(0);if((Ra|0)==224){Ra=0;ic=c[bb>>2]|0;if((c[pb>>2]|0)==(ic|0)){if((Bd(Wa)|0)<<24>>24==0){ec=1;break h}lc=c[bb>>2]|0}else{lc=ic}c[bb>>2]=lc+1;a[lc]=10}gc=c[y>>2]|0}if((Ra|0)==217){Ra=0;c[M>>2]=gc;ec=10;break}else if((Ra|0)==229){Ra=0;if((c[G>>2]|0)!=(L|0)){ec=14;break}c[M>>2]=gc;ec=14;break}else if((Ra|0)==233){Ra=0;if((c[G>>2]|0)!=(L|0)){ec=14;break}c[M>>2]=gc;ec=14;break}else if((Ra|0)==239){Ra=0;if((c[G>>2]|0)!=(L|0)){ec=4;break}c[M>>2]=gc;ec=4;break}else if((Ra|0)==241){Ra=0;if((c[G>>2]|0)!=(L|0)){ec=4;break}c[M>>2]=c[y>>2];ec=4;break}else if((Ra|0)==243){Ra=0;if((c[G>>2]|0)!=(L|0)){ec=23;break}c[M>>2]=gc;ec=23;break}}}while(0);Wa=c[ga>>2]|0;db=c[wa>>2]|0;do{if((Wa|0)==0){c[xa>>2]=db;mc=1}else{c[Wa+4>>2]=db;c[(c[ga>>2]|0)+8>>2]=(c[xa>>2]|0)-(c[wa>>2]|0);c[wa>>2]=c[xa>>2];if((c[la>>2]|0)==0){mc=1;break}c[N>>2]=H;hb=c[ga>>2]|0;Nc[c[la>>2]&1](c[U>>2]|0,c[hb>>2]|0,d[hb+33|0]|0,c[hb+4>>2]|0,c[hb+8>>2]|0,c[ya>>2]|0,0,0,0);mc=0}}while(0);if((ec|0)==0){Za=mc;Ra=475}else{Sa=ec;Ra=486;break a}break};default:{Ra=476}}}while(0);do{if((Ra|0)==53){Ra=0;if((Sc[c[L+52>>2]&127](L,H,c[E>>2]|0,M)|0)==0){Sa=32;Ra=486;break a}else{yb=1;Ra=54}}else if((Ra|0)==121){Ra=0;if((a[fa]|0)==0){Ra=476;break}Za=(c[oa>>2]|0)==0|0;Ra=475}else if((Ra|0)==435){Ra=0;if((a[Ka]|0)==0){Ra=476;break}I=c[E>>2]|0;if((Rb|0)==0){nc=I}else{nc=I+(-(c[L+64>>2]|0)|0)|0}I=Wd(b)|0;if((I|0)<0){Sa=1;Ra=486;break a}c[(c[Na>>2]|0)+(I*28|0)>>2]=4;c[(c[Na>>2]|0)+(I*28|0)+4>>2]=Rb;db=c[F>>2]|0;Wa=db+80|0;c[j>>2]=H;hb=db+92|0;if((c[hb>>2]|0)==0){if((Bd(Wa)|0)<<24>>24==0){Sa=1;Ra=486;break a}}cb=L+56|0;gb=db+88|0;while(1){Bc[c[cb>>2]&63](L,j,nc,hb,c[gb>>2]|0);if((c[j>>2]|0)==(nc|0)){break}if((Bd(Wa)|0)<<24>>24==0){Ua=1;Ra=488;break a}}cb=db+96|0;if((c[cb>>2]|0)==0){Sa=1;Ra=486;break a}bb=c[hb>>2]|0;if((bb|0)==(c[gb>>2]|0)){if((Bd(Wa)|0)<<24>>24==0){Sa=1;Ra=486;break a}oc=c[hb>>2]|0}else{oc=bb}c[hb>>2]=oc+1;a[oc]=0;bb=c[cb>>2]|0;if((bb|0)==0){Sa=1;Ra=486;break a}pb=Cd(b,db+20|0,bb,24)|0;if((pb|0)==0){Sa=1;Ra=486;break a}fc=pb|0;if((c[fc>>2]|0)==(bb|0)){c[cb>>2]=c[hb>>2];if((Pd(b,pb)|0)==0){Sa=1;Ra=486;break a}}else{c[hb>>2]=c[cb>>2]}cb=c[fc>>2]|0;c[(c[Na>>2]|0)+(I*28|0)+8>>2]=cb;fc=0;while(1){pc=fc+1|0;if((a[cb+fc|0]|0)==0){break}else{fc=pc}}c[Qa>>2]=(c[Qa>>2]|0)+pc;Za=(c[Oa>>2]|0)==0|0;Ra=475}else if((Ra|0)==459){Ra=0;if((a[Ka]|0)==0){Ra=476;break}fc=(c[Oa>>2]|0)==0;cb=fc&1;I=(c[La>>2]|0)-1|0;c[La>>2]=I;c[(c[Na>>2]|0)+((c[(c[Ma>>2]|0)+(I<<2)>>2]|0)*28|0)+4>>2]=Sb;if((c[La>>2]|0)!=0){Za=cb;Ra=475;break}if(!fc){fc=c[F>>2]|0;I=fc+156|0;hb=Ec[c[ta>>2]&63](((c[I>>2]|0)*20|0)+(c[fc+148>>2]|0)|0)|0;fc=hb;if((hb|0)==0){Sa=1;Ra=486;break a}c[p>>2]=fc+((c[I>>2]|0)*20|0);c[o>>2]=hb+20;Xd(b,0,fc,o,p);c[N>>2]=H;Tc[c[Oa>>2]&127](c[U>>2]|0,c[c[na>>2]>>2]|0,fc)}a[Ka]=0;c[Qa>>2]=0;Za=cb;Ra=475}}while(0);do{if((Ra|0)==54){Ra=0;if((a[fa]|0)==0){Za=yb;Ra=475;break}if((c[ga>>2]|0)==0){Za=yb;Ra=475;break}cb=c[L+64>>2]|0;fc=(c[E>>2]|0)+(-cb|0)|0;c[B>>2]=H+cb;if((c[ia>>2]|0)==0){if((Bd(ha)|0)<<24>>24==0){Sa=1;Ra=486;break a}}cb=L+56|0;while(1){Bc[c[cb>>2]&63](L,B,fc,ia,c[ja>>2]|0);if((c[B>>2]|0)==(fc|0)){break}if((Bd(ha)|0)<<24>>24==0){Ua=1;Ra=488;break a}}if((c[ka>>2]|0)==0){Sa=1;Ra=486;break a}fc=c[ia>>2]|0;if((fc|0)==(c[ja>>2]|0)){if((Bd(ha)|0)<<24>>24==0){Sa=1;Ra=486;break a}qc=c[ia>>2]|0}else{qc=fc}c[ia>>2]=qc+1;a[qc]=0;fc=c[ka>>2]|0;if((fc|0)==0){Sa=1;Ra=486;break a}cb=a[fc]|0;do{if(cb<<24>>24==0){rc=fc}else{hb=fc;I=fc;db=cb;while(1){Wa=db<<24>>24;do{if((Wa|0)==32|(Wa|0)==13|(Wa|0)==10){if((hb|0)==(fc|0)){sc=fc;break}if((a[hb-1|0]|0)==32){sc=hb;break}a[hb]=32;sc=hb+1|0}else{a[hb]=db;sc=hb+1|0}}while(0);Wa=I+1|0;gb=a[Wa]|0;if(gb<<24>>24==0){break}else{hb=sc;I=Wa;db=gb}}if((sc|0)==(fc|0)){rc=fc;break}db=sc-1|0;rc=(a[db]|0)==32?db:sc}}while(0);a[rc]=0;c[(c[ga>>2]|0)+24>>2]=fc;c[ka>>2]=c[ia>>2];Za=(c[la>>2]|0)==0?yb:0;Ra=475}}while(0);if((Ra|0)==475){Ra=0;if(Za<<24>>24==0){ab=L}else{Ra=476}}do{if((Ra|0)==476){Ra=0;cb=c[R>>2]|0;if((cb|0)==0){ab=L;break}db=c[E>>2]|0;c[m>>2]=H;if((a[L+68|0]|0)!=0){Tc[cb&127](c[U>>2]|0,H,db-H|0);ab=L;break}if((c[G>>2]|0)==(L|0)){tc=N;uc=M}else{cb=c[O>>2]|0;tc=cb+4|0;uc=cb|0}cb=L+56|0;while(1){c[n>>2]=c[S>>2];Bc[c[cb>>2]&63](L,m,db,n,c[T>>2]|0);c[tc>>2]=c[m>>2];I=c[S>>2]|0;Tc[c[R>>2]&127](c[U>>2]|0,I,(c[n>>2]|0)-I|0);c[uc>>2]=c[m>>2];if((c[m>>2]|0)==(db|0)){ab=L;break}}}}while(0);db=c[V>>2]|0;if((db|0)==3){Ra=484;break}else if((db|0)==2){Sa=35;Ra=486;break}db=c[E>>2]|0;L=ab;H=db;e=Sc[c[ab>>2]&127](ab,db,f,E)|0}if((Ra|0)==4){c[g>>2]=H;Ua=0;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==6){c[M>>2]=c[E>>2];Ua=4;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==21){c[aa>>2]=0;Ua=1;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==84){c[b+264>>2]=6;aa=Gd(b,0,c[G>>2]|0,H,f,g,(a[J]|0)==0|0)|0;if((aa|0)!=0){Ua=aa;vc=4;wc=0;i=h;return Ua|0}aa=c[b+348>>2]|0;if((aa|0)==0){Ua=0;vc=4;wc=0;i=h;return Ua|0}else{xc=aa}while(1){aa=(c[xc+24>>2]|0)+1|0;b=xc+36|0;J=c[b>>2]|0;f=J+aa|0;H=xc+4|0;G=c[H>>2]|0;if((G|0)==(f|0)){Ua=0;Ra=488;break}M=xc+8|0;ab=c[M>>2]|0;e=ab+aa|0;L=xc+40|0;if((e|0)>((c[L>>2]|0)-J|0)){V=Oc[c[ua>>2]&255](J,e)|0;if((V|0)==0){Ua=1;Ra=488;break}J=xc+12|0;m=c[b>>2]|0;if((c[J>>2]|0)==(m|0)){c[J>>2]=V}J=xc+16|0;uc=c[J>>2]|0;if((uc|0)!=0){c[J>>2]=V+(uc-m)}c[b>>2]=V;c[L>>2]=V+e;yc=V+aa|0;zc=c[H>>2]|0;Ac=c[M>>2]|0}else{yc=f;zc=G;Ac=ab}tF(yc|0,zc|0,Ac)|0;c[H>>2]=yc;H=c[xc>>2]|0;if((H|0)==0){Ua=0;Ra=488;break}else{xc=H}}if((Ra|0)==488){vc=4;wc=0;i=h;return Ua|0}}else if((Ra|0)==109){c[na>>2]=0;Ua=1;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==261){c[X>>2]=0;Ua=1;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==333){c[Fa>>2]=0;Ua=1;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==384){if((Ta|0)==12){Ua=17;vc=4;wc=0;i=h;return Ua|0}else if((Ta|0)==28){Ua=10;vc=4;wc=0;i=h;return Ua|0}else{Ua=2;vc=4;wc=0;i=h;return Ua|0}}else if((Ra|0)==423){c[na>>2]=0;Ua=1;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==484){c[g>>2]=c[E>>2];Ua=0;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==486){Ua=Sa;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==487){Ua=6;vc=4;wc=0;i=h;return Ua|0}else if((Ra|0)==488){vc=4;wc=0;i=h;return Ua|0}return 0}function Wd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;b=c[a+340>>2]|0;d=b+164|0;do{if((c[d>>2]|0)==0){e=Ec[c[a+12>>2]&63](c[a+452>>2]<<2)|0;f=e;c[d>>2]=f;if((e|0)==0){g=-1;return g|0}else{c[f>>2]=0;break}}}while(0);f=b+156|0;e=c[f>>2]|0;h=b+152|0;i=c[h>>2]|0;j=b+144|0;k=c[j>>2]|0;if(e>>>0<i>>>0){l=e;m=k}else{do{if((k|0)==0){e=Ec[c[a+12>>2]&63](896)|0;if((e|0)==0){g=-1}else{n=e;o=32;break}return g|0}else{e=Oc[c[a+16>>2]&255](k,i*56|0)|0;if((e|0)==0){g=-1;return g|0}else{n=e;o=c[h>>2]<<1;break}}}while(0);i=n;c[h>>2]=o;c[j>>2]=i;l=c[f>>2]|0;m=i}c[f>>2]=l+1;f=c[b+160>>2]|0;if((f|0)!=0){b=c[(c[d>>2]|0)+(f-1<<2)>>2]|0;f=m+(b*28|0)+16|0;d=c[f>>2]|0;if((d|0)!=0){c[m+(d*28|0)+24>>2]=l}d=m+(b*28|0)+20|0;i=c[d>>2]|0;if((i|0)==0){c[m+(b*28|0)+12>>2]=l}c[f>>2]=l;c[d>>2]=i+1}vF(m+(l*28|0)+12|0,0,16)|0;g=l;return g|0}function Xd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=(c[b+340>>2]|0)+144|0;i=c[(c[h>>2]|0)+(d*28|0)>>2]|0;c[e>>2]=i;c[e+4>>2]=c[(c[h>>2]|0)+(d*28|0)+4>>2];if((i|0)==4){c[e+8>>2]=c[g>>2];i=c[(c[h>>2]|0)+(d*28|0)+8>>2]|0;while(1){j=a[i]|0;k=c[g>>2]|0;c[g>>2]=k+1;a[k]=j;if((a[i]|0)==0){break}else{i=i+1|0}}c[e+12>>2]=0;c[e+16>>2]=0;return}i=c[(c[h>>2]|0)+(d*28|0)+20>>2]|0;j=e+12|0;c[j>>2]=i;k=e+16|0;c[k>>2]=c[f>>2];c[f>>2]=(c[f>>2]|0)+(i*20|0);if((c[j>>2]|0)!=0){i=0;l=(c[h>>2]|0)+(d*28|0)+12|0;while(1){d=c[l>>2]|0;Xd(b,d,(c[k>>2]|0)+(i*20|0)|0,f,g);m=i+1|0;if(m>>>0<(c[j>>2]|0)>>>0){i=m;l=(c[h>>2]|0)+(d*28|0)+24|0}else{break}}}c[e+8>>2]=0;return}function Yd(a){a=a|0;c[a>>2]=60;return}function Zd(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do{switch(b|0){case 29:{c[a>>2]=90;g=2;break};case 11:{c[a>>2]=62;g=55;break};case 13:{c[a>>2]=62;g=56;break};case 15:{c[a>>2]=62;g=0;break};case 16:{if((Sc[c[f+24>>2]&127](f,d+(c[f+64>>2]<<1)|0,e,173064)|0)==0){h=9;break a}c[a>>2]=16;g=3;break};case 14:{g=0;break};case 12:{c[a>>2]=62;g=1;break};default:{h=9}}}while(0);if((h|0)==9){c[a>>2]=90;g=-1}return g|0}function _d(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do{switch(b|0){case 29:{c[a>>2]=90;g=2;break};case 13:{g=56;break};case 16:{if((Sc[c[f+24>>2]&127](f,d+(c[f+64>>2]<<1)|0,e,173064)|0)==0){h=7;break a}c[a>>2]=16;g=3;break};case 15:case 14:{g=0;break};case 11:{g=55;break};default:{h=7}}}while(0);if((h|0)==7){c[a>>2]=90;g=-1}return g|0}function $d(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==18|(b|0)==41){c[a>>2]=96;g=4}else if((b|0)==15){g=3}else{c[a>>2]=90;g=-1}return g|0}function ae(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0}function be(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;do{if((b|0)==15){g=3;return g|0}else if((b|0)==17){c[a>>2]=2;g=8;return g|0}else if((b|0)==25){c[a>>2]=88;g=7;return g|0}else if((b|0)==18){h=f+24|0;if((Sc[c[h>>2]&127](f,d,e,172880)|0)!=0){c[a>>2]=100;g=3;return g|0}if((Sc[c[h>>2]&127](f,d,e,172904)|0)==0){break}c[a>>2]=98;g=3;return g|0}}while(0);c[a>>2]=90;g=-1;return g|0}function ce(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;a:do{switch(b|0){case 11:{g=55;return g|0};case 26:{c[a>>2]=94;g=3;return g|0};case 13:{g=56;return g|0};case 15:case-4:{g=0;return g|0};case 28:{g=57;return g|0};case 16:{h=f+24|0;i=f+64|0;if((Sc[c[h>>2]&127](f,d+(c[i>>2]<<1)|0,e,173024)|0)!=0){c[a>>2]=32;g=11;return g|0}if((Sc[c[h>>2]&127](f,d+(c[i>>2]<<1)|0,e,173080)|0)!=0){c[a>>2]=78;g=33;return g|0}if((Sc[c[h>>2]&127](f,d+(c[i>>2]<<1)|0,e,173056)|0)!=0){c[a>>2]=20;g=39;return g|0}if((Sc[c[h>>2]&127](f,d+(c[i>>2]<<1)|0,e,172920)|0)==0){break a}c[a>>2]=8;g=17;return g|0};default:{}}}while(0);c[a>>2]=90;g=-1;return g|0}function de(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==11){g=55}else if((b|0)==15){g=0}else if((b|0)==29){c[a>>2]=90;g=2}else if((b|0)==13){g=56}else{c[a>>2]=90;g=-1}return g|0}function ee(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==27){c[a>>2]=84;g=5}else if((b|0)==15){g=3}else{c[a>>2]=90;g=-1}return g|0}function fe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=3}else if((b|0)==27){c[a>>2]=100;g=6}else{c[a>>2]=90;g=-1}return g|0}function ge(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==17){c[a>>2]=2;g=8}else if((b|0)==15){g=3}else if((b|0)==25){c[a>>2]=88;g=7}else{c[a>>2]=90;g=-1}return g|0}function he(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=11}else if((b|0)==22){c[a>>2]=34;g=11}else if((b|0)==18){c[a>>2]=28;g=9}else{c[a>>2]=90;g=-1}return g|0}function ie(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==18|(b|0)==41){c[a>>2]=76;g=34}else if((b|0)==15){g=33}else{c[a>>2]=90;g=-1}return g|0}function je(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=39}else if((b|0)==18|(b|0)==41){c[a>>2]=54;g=40}else{c[a>>2]=90;g=-1}return g|0}function ke(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==18){c[a>>2]=6;g=18}else if((b|0)==15){g=17}else{c[a>>2]=90;g=-1}return g|0}function le(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=3}else if((b|0)==17){c[a>>2]=2;g=8}else{c[a>>2]=90;g=-1}return g|0}function me(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;if((b|0)==18){g=2}else if((b|0)==15){h=17;return h|0}do{if((g|0)==2){b=f+24|0;if((Sc[c[b>>2]&127](f,d,e,172880)|0)!=0){c[a>>2]=10;h=17;return h|0}if((Sc[c[b>>2]&127](f,d,e,172904)|0)==0){break}c[a>>2]=12;h=17;return h|0}}while(0);c[a>>2]=90;h=-1;return h|0}function ne(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==27){c[a>>2]=44;c[a+8>>2]=17;g=19}else if((b|0)==15){g=17}else{c[a>>2]=90;g=-1}return g|0}function oe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==27){c[a>>2]=14;g=21}else if((b|0)==15){g=17}else{c[a>>2]=90;g=-1}return g|0}function pe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==27){c[a>>2]=44;c[a+8>>2]=17;g=19}else if((b|0)==17){c[a>>2]=88;g=20}else if((b|0)==15){g=17}else{c[a>>2]=90;g=-1}return g|0}function qe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==17){c[a>>2]=88;g=c[a+8>>2]|0;return g|0}else if((b|0)==15){g=c[a+8>>2]|0;return g|0}else{c[a>>2]=90;g=-1;return g|0}return 0}function re(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;do{if((b|0)==23){c[a>>2]=52;c[a+4>>2]=1;g=44;return g|0}else if((b|0)==15){g=39;return g|0}else if((b|0)==18){h=f+24|0;if((Sc[c[h>>2]&127](f,d,e,173048)|0)!=0){c[a>>2]=44;c[a+8>>2]=39;g=42;return g|0}if((Sc[c[h>>2]&127](f,d,e,173088)|0)==0){break}c[a>>2]=44;c[a+8>>2]=39;g=41;return g|0}}while(0);c[a>>2]=90;g=-1;return g|0}function se(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do{switch(b|0){case 15:{g=39;break};case 30:{c[a>>2]=46;g=53;break};case 20:{if((Sc[c[f+24>>2]&127](f,d+(c[f+64>>2]|0)|0,e,172912)|0)==0){h=9;break a}c[a>>2]=58;g=43;break};case 23:{c[a+4>>2]=2;c[a>>2]=56;g=44;break};case 31:{c[a>>2]=46;g=52;break};case 18:case 41:{c[a>>2]=46;g=51;break};case 32:{c[a>>2]=46;g=54;break};default:{h=9}}}while(0);if((h|0)==9){c[a>>2]=90;g=-1}return g|0}function te(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==36){c[a>>2]=44;c[a+8>>2]=39;g=46}else if((b|0)==15){g=39}else if((b|0)==24){c[a>>2]=44;c[a+8>>2]=39;g=45}else if((b|0)==21){c[a>>2]=48;g=39}else{c[a>>2]=90;g=-1}return g|0}function ue(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;switch(b|0){case 31:{c[a>>2]=46;g=52;break};case 18:case 41:{c[a>>2]=46;g=51;break};case 32:{c[a>>2]=46;g=54;break};case 23:{b=a+4|0;c[b>>2]=(c[b>>2]|0)+1;g=44;break};case 30:{c[a>>2]=46;g=53;break};case 15:{g=39;break};default:{c[a>>2]=90;g=-1}}return g|0}function ve(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;a:do{switch(b|0){case 36:{f=a+4|0;e=(c[f>>2]|0)-1|0;c[f>>2]=e;if((e|0)!=0){g=46;break a}c[a>>2]=44;c[a+8>>2]=39;g=46;break};case 35:{e=a+4|0;f=(c[e>>2]|0)-1|0;c[e>>2]=f;if((f|0)!=0){g=47;break a}c[a>>2]=44;c[a+8>>2]=39;g=47;break};case 37:{f=a+4|0;e=(c[f>>2]|0)-1|0;c[f>>2]=e;if((e|0)!=0){g=48;break a}c[a>>2]=44;c[a+8>>2]=39;g=48;break};case 21:{c[a>>2]=56;g=49;break};case 15:{g=39;break};case 38:{c[a>>2]=56;g=50;break};case 24:{e=a+4|0;f=(c[e>>2]|0)-1|0;c[e>>2]=f;if((f|0)!=0){g=45;break a}c[a>>2]=44;c[a+8>>2]=39;g=45;break};default:{c[a>>2]=90;g=-1}}}while(0);return g|0}function we(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==18|(b|0)==41){c[a>>2]=50;g=51}else if((b|0)==15){g=39}else{c[a>>2]=90;g=-1}return g|0}function xe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=39}else if((b|0)==36){c[a>>2]=44;c[a+8>>2]=39;g=46}else if((b|0)==21){c[a>>2]=48;g=39}else{c[a>>2]=90;g=-1}return g|0}function ye(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==18|(b|0)==41){c[a>>2]=82;g=22}else if((b|0)==15){g=33}else if((b|0)==17){c[a>>2]=88;g=33}else{c[a>>2]=90;g=-1}return g|0}function ze(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;do{if((b|0)==15){g=33;return g|0}else if((b|0)==18){h=f+24|0;i=0;j=c[h>>2]|0;while(1){k=i+1|0;if((Sc[j&127](f,d,e,c[71960+(i<<2)>>2]|0)|0)!=0){l=5;break}m=c[h>>2]|0;if((k|0)<8){i=k;j=m}else{break}}if((l|0)==5){c[a>>2]=66;g=i+23|0;return g|0}if((Sc[m&127](f,d,e,172920)|0)==0){break}c[a>>2]=68;g=33;return g|0}else if((b|0)==23){c[a>>2]=80;g=33;return g|0}}while(0);c[a>>2]=90;g=-1;return g|0}function Ae(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;do{if((b|0)==15){g=33;return g|0}else if((b|0)==20){h=f+24|0;i=f+64|0;if((Sc[c[h>>2]&127](f,d+(c[i>>2]|0)|0,e,172984)|0)!=0){c[a>>2]=76;g=35;return g|0}if((Sc[c[h>>2]&127](f,d+(c[i>>2]|0)|0,e,172888)|0)!=0){c[a>>2]=76;g=36;return g|0}if((Sc[c[h>>2]&127](f,d+(c[i>>2]|0)|0,e,173016)|0)==0){break}c[a>>2]=64;g=33;return g|0}else if((b|0)==27){c[a>>2]=76;g=37;return g|0}}while(0);c[a>>2]=90;g=-1;return g|0}function Be(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==23){c[a>>2]=74;g=33}else if((b|0)==15){g=33}else{c[a>>2]=90;g=-1}return g|0}function Ce(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=33}else if((b|0)==19|(b|0)==18|(b|0)==41){c[a>>2]=70;g=31}else{c[a>>2]=90;g=-1}return g|0}function De(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==24){c[a>>2]=66;g=33}else if((b|0)==21){c[a>>2]=80;g=33}else if((b|0)==15){g=33}else{c[a>>2]=90;g=-1}return g|0}function Ee(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==18){c[a>>2]=72;g=32}else if((b|0)==15){g=33}else{c[a>>2]=90;g=-1}return g|0}function Fe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==24){c[a>>2]=66;g=33}else if((b|0)==15){g=33}else if((b|0)==21){c[a>>2]=74;g=33}else{c[a>>2]=90;g=-1}return g|0}function Ge(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=33}else if((b|0)==27){c[a>>2]=76;g=38}else{c[a>>2]=90;g=-1}return g|0}function He(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=11}else if((b|0)==18){c[a>>2]=18;g=10}else{c[a>>2]=90;g=-1}return g|0}function Ie(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;do{if((b|0)==15){g=11;return g|0}else if((b|0)==18){h=f+24|0;if((Sc[c[h>>2]&127](f,d,e,172880)|0)!=0){c[a>>2]=38;g=11;return g|0}if((Sc[c[h>>2]&127](f,d,e,172904)|0)==0){break}c[a>>2]=30;g=11;return g|0}else if((b|0)==27){c[a>>2]=44;c[a+8>>2]=11;g=12;return g|0}}while(0);c[a>>2]=90;g=-1;return g|0}function Je(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=11}else if((b|0)==27){c[a>>2]=40;g=13}else{c[a>>2]=90;g=-1}return g|0}function Ke(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==27){c[a>>2]=38;g=14}else if((b|0)==15){g=11}else{c[a>>2]=90;g=-1}return g|0}function Le(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;do{if((b|0)==17){c[a>>2]=88;g=15;return g|0}else if((b|0)==18){if((Sc[c[f+24>>2]&127](f,d,e,172960)|0)==0){break}c[a>>2]=36;g=11;return g|0}else if((b|0)==15){g=11;return g|0}}while(0);c[a>>2]=90;g=-1;return g|0}function Me(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==18){c[a>>2]=44;c[a+8>>2]=11;g=16}else if((b|0)==15){g=11}else{c[a>>2]=90;g=-1}return g|0}function Ne(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;do{if((b|0)==27){c[a>>2]=44;c[a+8>>2]=11;g=12;return g|0}else if((b|0)==15){g=11;return g|0}else if((b|0)==18){h=f+24|0;if((Sc[c[h>>2]&127](f,d,e,172880)|0)!=0){c[a>>2]=26;g=11;return g|0}if((Sc[c[h>>2]&127](f,d,e,172904)|0)==0){break}c[a>>2]=24;g=11;return g|0}}while(0);c[a>>2]=90;g=-1;return g|0}function Oe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==27){c[a>>2]=42;g=13}else if((b|0)==15){g=11}else{c[a>>2]=90;g=-1}return g|0}function Pe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==15){g=11}else if((b|0)==27){c[a>>2]=26;g=14}else{c[a>>2]=90;g=-1}return g|0}function Qe(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((b|0)==17){c[a>>2]=88;g=15}else if((b|0)==15){g=11}else{c[a>>2]=90;g=-1}return g|0}function Re(b,c){b=b|0;c=c|0;var d=0;if((b|0)<0){d=0;return d|0}if((b|0)<128){a[c]=b;d=1;return d|0}if((b|0)<2048){a[c]=b>>>6|192;a[c+1|0]=b&63|128;d=2;return d|0}if((b|0)<65536){a[c]=b>>>12|224;a[c+1|0]=b>>>6&63|128;a[c+2|0]=b&63|128;d=3;return d|0}if((b|0)>=1114112){d=0;return d|0}a[c]=b>>>18|240;a[c+1|0]=b>>>12&63|128;a[c+2|0]=b>>>6&63|128;a[c+3|0]=b&63|128;d=4;return d|0}function Se(){return 1908}function Te(e,f,g,h){e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;i=0;while(1){a[e+i|0]=a[20424+i|0]|0;j=i+1|0;if((j|0)<364){i=j}else{k=0;break}}do{i=a[20496+k|0]|0;if(!((i<<24>>24|0)==28|(i<<24>>24|0)==0)){if((c[f+(k<<2)>>2]|0)!=(k|0)){l=0;m=37;break}}k=k+1|0;}while((k|0)<128);if((m|0)==37){return l|0}k=e+372|0;i=e+884|0;j=0;a:while(1){n=c[f+(j<<2)>>2]|0;do{if((n|0)==-1){a[e+(j+72)|0]=1;b[k+(j<<1)>>1]=-1;a[i+(j<<2)|0]=1;a[i+(j<<2)+1|0]=0}else{if((n|0)<0){if((n|0)<-4){l=0;m=37;break a}a[e+(j+72)|0]=3-n;a[i+(j<<2)|0]=0;b[k+(j<<1)>>1]=0;break}if((n|0)<128){o=a[20496+n|0]|0;if(!((o<<24>>24|0)==28|(o<<24>>24|0)==0)){if((n|0)!=(j|0)){l=0;m=37;break a}}a[e+(j+72)|0]=o;a[i+(j<<2)|0]=1;a[i+(j<<2)+1|0]=n;b[k+(j<<1)>>1]=(n|0)==0?-1:n&65535;break}o=n>>8;switch(o|0){case 0:{if((a[20496+n|0]|0)==0){m=19}break};case 255:{if((n&-2|0)==65534){m=19}break};case 216:case 217:case 218:case 219:case 220:case 221:case 222:case 223:{m=19;break};default:{}}if((m|0)==19){m=0;a[e+(j+72)|0]=0;b[k+(j<<1)>>1]=-1;a[i+(j<<2)|0]=1;a[i+(j<<2)+1|0]=0;break}if((n|0)>65535){l=0;m=37;break a}p=n>>>5&7;q=1<<(n&31);do{if((c[18232+((d[17968+o|0]<<3|p)<<2)>>2]&q|0)==0){r=e+(j+72)|0;if((c[18232+((d[19512+o|0]<<3|p)<<2)>>2]&q|0)==0){a[r]=28;break}else{a[r]=26;break}}else{a[e+(j+72)|0]=22}}while(0);q=i+(j<<2)|0;p=i+(j<<2)+1|0;do{if((n|0)<2048){a[p]=n>>>6|192;a[i+(j<<2)+2|0]=n&63|128;s=2}else{if((n|0)<65536){a[p]=n>>>12|224;a[i+(j<<2)+2|0]=n>>>6&63|128;a[i+(j<<2)+3|0]=n&63|128;s=3;break}if((n|0)>=1114112){s=0;break}a[p]=n>>>18|240;a[i+(j<<2)+2|0]=n>>>12&63|128;a[i+(j<<2)+3|0]=n>>>6&63|128;a[i+(j<<2)+4|0]=n&63|128;s=4}}while(0);a[q]=s;b[k+(j<<1)>>1]=n}}while(0);n=j+1|0;if((n|0)<256){j=n}else{m=34;break}}if((m|0)==34){c[e+368>>2]=h;c[e+364>>2]=g;if((g|0)!=0){c[e+328>>2]=20;c[e+332>>2]=20;c[e+336>>2]=20;c[e+340>>2]=170;c[e+344>>2]=170;c[e+348>>2]=170;c[e+352>>2]=176;c[e+356>>2]=176;c[e+360>>2]=176}c[e+56>>2]=16;c[e+60>>2]=18;l=e;return l|0}else if((m|0)==37){return l|0}return 0}function Ue(a,b){a=a|0;b=b|0;var e=0,f=0;e=Oc[c[a+364>>2]&255](c[a+368>>2]|0,b)|0;if(e>>>0>65535>>>0){f=0;return f|0}f=c[18232+(((d[19512+(e>>8)|0]|0)<<3|e>>>5&7)<<2)>>2]&1<<(e&31);return f|0}function Ve(a,b){a=a|0;b=b|0;var e=0,f=0;e=Oc[c[a+364>>2]&255](c[a+368>>2]|0,b)|0;if(e>>>0>65535>>>0){f=0;return f|0}f=c[18232+(((d[17968+(e>>8)|0]|0)<<3|e>>>5&7)<<2)>>2]&1<<(e&31);return f|0}function We(b,d){b=b|0;d=d|0;var e=0,f=0;e=Oc[c[b+364>>2]&255](c[b+368>>2]|0,d)|0;if(e>>>0>65535>>>0){f=1;return f|0}a:do{switch(e>>8|0){case 255:{if((e&-2|0)==65534){f=1}else{break a}return f|0};case 216:case 217:case 218:case 219:case 220:case 221:case 222:case 223:{f=1;return f|0};case 0:{if((a[20496+e|0]|0)==0){f=1}else{break a}return f|0};default:{}}}while(0);f=e>>>31;return f|0}function Xe(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;j=i;i=i+8|0;k=j|0;l=c[e>>2]|0;if((l|0)==(f|0)){i=j;return}m=b+884|0;n=b+364|0;o=b+368|0;p=k|0;q=h;h=b+72|0;b=k+1|0;r=k+2|0;s=k+3|0;k=l;while(1){l=d[k]|0;t=m+(l<<2)+1|0;u=a[m+(l<<2)|0]|0;l=u<<24>>24;if(u<<24>>24==0){u=Oc[c[n>>2]&255](c[o>>2]|0,k)|0;do{if((u|0)<0){v=0}else{if((u|0)<128){a[p]=u;v=1;break}if((u|0)<2048){a[p]=u>>>6|192;a[b]=u&63|128;v=2;break}if((u|0)<65536){a[p]=u>>>12|224;a[b]=u>>>6&63|128;a[r]=u&63|128;v=3;break}if((u|0)>=1114112){v=0;break}a[p]=u>>>18|240;a[b]=u>>>12&63|128;a[r]=u>>>6&63|128;a[s]=u&63|128;v=4}}while(0);if((v|0)>(q-(c[g>>2]|0)|0)){w=20;break}u=c[e>>2]|0;x=p;y=v;z=u+((d[h+(d[u]|0)|0]|0)-3)|0}else{if((l|0)>(q-(c[g>>2]|0)|0)){w=20;break}x=t;y=l;z=k+1|0}c[e>>2]=z;u=x;A=y;while(1){B=a[u]|0;C=c[g>>2]|0;c[g>>2]=C+1;a[C]=B;B=A-1|0;if((B|0)==0){break}else{u=u+1|0;A=B}}A=c[e>>2]|0;if((A|0)==(f|0)){w=20;break}else{k=A}}if((w|0)==20){i=j;return}}function Ye(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;i=c[e>>2]|0;if((i|0)==(f|0)){return}j=a+372|0;k=a+364|0;l=a+368|0;m=a+72|0;a=i;while(1){if((c[g>>2]|0)==(h|0)){n=8;break}i=b[j+((d[a]|0)<<1)>>1]|0;if(i<<16>>16==0){o=(Oc[c[k>>2]&255](c[l>>2]|0,a)|0)&65535;p=c[e>>2]|0;q=o;r=p+((d[m+(d[p]|0)|0]|0)-3)|0}else{q=i;r=a+1|0}c[e>>2]=r;i=c[g>>2]|0;c[g>>2]=i+2;b[i>>1]=q;i=c[e>>2]|0;if((i|0)==(f|0)){n=8;break}else{a=i}}if((n|0)==8){return}}function Ze(){return 21056}function _e(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;do{if((e|0)==0){f=6}else{g=0;a:while(1){h=c[25544+(g<<2)>>2]|0;i=e;while(1){j=a[i]|0;k=a[h]|0;l=(j-97&255)>>>0<26>>>0?j-32&255:j;if(l<<24>>24!=((k-97&255)>>>0<26>>>0?k-32&255:k)<<24>>24){break}if(l<<24>>24==0){break a}else{h=h+1|0;i=i+1|0}}i=g+1|0;if((i|0)<6){g=i}else{m=0;n=8;break}}if((n|0)==8){return m|0}if((g|0)==-1){m=0}else{f=g&255;break}return m|0}}while(0);a[b+69|0]=f;c[b>>2]=46;c[b+4>>2]=64;c[b+48>>2]=14;c[b+72>>2]=d;c[d>>2]=b;m=1;return m|0}function $e(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wg(a,0,b,c,d)|0}function af(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return wg(a,1,b,c,d)|0}function bf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;if(e>>>0>=f>>>0){return}b=g+4|0;h=g|0;g=e;while(1){switch(d[672+(d[g]|0)|0]|0){case 7:{i=g+4|0;break};case 10:{c[b>>2]=-1;c[h>>2]=(c[h>>2]|0)+1;i=g+1|0;break};case 6:{i=g+3|0;break};case 9:{c[h>>2]=(c[h>>2]|0)+1;e=g+1|0;if((e|0)==(f|0)){j=f}else{j=(a[672+(d[e]|0)|0]|0)==10?g+2|0:e}c[b>>2]=-1;i=j;break};case 5:{i=g+2|0;break};default:{i=g+1|0}}c[b>>2]=(c[b>>2]|0)+1;if(i>>>0<f>>>0){g=i}else{break}}return}function cf(b,d,e,f,g,h,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;n=i;i=i+216|0;o=n|0;p=n+8|0;q=n+16|0;r=n+24|0;s=n+152|0;t=n+160|0;u=n+168|0;v=n+176|0;w=n+184|0;x=n+192|0;y=n+200|0;z=n+208|0;c[x>>2]=0;c[y>>2]=0;c[z>>2]=0;A=d+64|0;B=c[A>>2]|0;C=e+(B*5|0)|0;c[w>>2]=C;e=f+(-(B<<1)|0)|0;B=(vg(d,C,e,y,z,x,w)|0)!=0;C=c[y>>2]|0;a:do{if(B&(C|0)!=0){f=d+24|0;D=c[z>>2]|0;do{if((Sc[c[f>>2]&127](d,C,D,172768)|0)==0){if((b|0)!=0){E=C;F=D;break}c[g>>2]=C;G=0;break a}else{if((h|0)!=0){c[h>>2]=c[x>>2]}H=c[w>>2]|0;if((j|0)!=0){c[j>>2]=H}if((vg(d,H,e,y,z,x,w)|0)==0){c[g>>2]=c[w>>2];G=0;break a}H=c[y>>2]|0;if((H|0)!=0){E=H;F=c[z>>2]|0;break}if((b|0)==0){G=1;break a}c[g>>2]=c[w>>2];G=0;break a}}while(0);if((Sc[c[f>>2]&127](d,E,F,172800)|0)==0){I=E;J=F}else{D=c[x>>2]|0;H=u|0;c[t>>2]=D;c[v>>2]=H;K=d+56|0;Bc[c[K>>2]&63](d,t,e,v,u+1|0);if((c[v>>2]|0)==(H|0)){L=-1}else{L=a[H]|0}if(!((L-97|0)>>>0<26>>>0|(L-65|0)>>>0<26>>>0)){c[g>>2]=D;G=0;break}if((k|0)!=0){c[k>>2]=D}H=c[w>>2]|0;if((l|0)!=0){M=H+(-(c[A>>2]|0)|0)|0;N=r|0;c[q>>2]=D;c[s>>2]=N;Bc[c[K>>2]&63](d,q,M,s,r+127|0);b:do{if((c[q>>2]|0)==(M|0)){a[c[s>>2]|0]=0;K=172856;D=N;while(1){O=a[D]|0;P=a[K]|0;Q=(O-97&255)>>>0<26>>>0?O-32&255:O;if(Q<<24>>24!=((P-97&255)>>>0<26>>>0?P-32&255:P)<<24>>24){R=0;break}if(Q<<24>>24==0){S=28;break}else{K=K+1|0;D=D+1|0}}if((S|0)==28){if((c[A>>2]|0)==2){T=d;break}else{R=0}}c:while(1){D=c[25544+(R<<2)>>2]|0;K=N;while(1){Q=a[K]|0;P=a[D]|0;O=(Q-97&255)>>>0<26>>>0?Q-32&255:Q;if(O<<24>>24!=((P-97&255)>>>0<26>>>0?P-32&255:P)<<24>>24){break}if(O<<24>>24==0){break c}else{D=D+1|0;K=K+1|0}}K=R+1|0;if((K|0)<6){R=K}else{T=0;break b}}if((R|0)==-1){T=0;break}T=c[28632+(R<<2)>>2]|0}else{T=0}}while(0);c[l>>2]=T}if((vg(d,H,e,y,z,x,w)|0)==0){c[g>>2]=c[w>>2];G=0;break}N=c[y>>2]|0;if((N|0)==0){G=1;break}I=N;J=c[z>>2]|0}if(!((Sc[c[f>>2]&127](d,I,J,172776)|0)!=0&(b|0)==0)){c[g>>2]=I;G=0;break}N=c[x>>2]|0;M=c[w>>2]|0;do{if((Sc[c[f>>2]&127](d,N,M+(-(c[A>>2]|0)|0)|0,172760)|0)==0){if((Sc[c[f>>2]&127](d,N,M+(-(c[A>>2]|0)|0)|0,172792)|0)==0){c[g>>2]=N;G=0;break a}if((m|0)==0){break}c[m>>2]=0}else{if((m|0)==0){break}c[m>>2]=1}}while(0);N=u|0;c[o>>2]=M;c[p>>2]=N;f=d+56|0;H=u+1|0;Bc[c[f>>2]&63](d,o,e,p,H);d:do{if((c[p>>2]|0)==(N|0)){U=M}else{K=M;while(1){D=a[N]|0;if(!((D|0)==32|(D|0)==13|(D|0)==10|(D|0)==9)){U=K;break d}D=K+(c[A>>2]|0)|0;c[w>>2]=D;c[o>>2]=D;c[p>>2]=N;Bc[c[f>>2]&63](d,o,e,p,H);if((c[p>>2]|0)==(N|0)){U=D;break}else{K=D}}}}while(0);if((U|0)==(e|0)){G=1;break}c[g>>2]=U;G=0}else{c[g>>2]=c[w>>2];G=0}}while(0);i=n;return G|0}function df(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;if((e|0)==(f|0)){h=-4;return h|0}i=e;j=f-i|0;do{if((j&1|0)==0){k=f}else{l=j&-2;if((l|0)==0){h=-1;return h|0}else{k=e+l|0;break}}}while(0);j=a[e+1|0]|0;f=a[e]|0;a:do{if(j<<24>>24==0){l=f&255;m=b+72|0;b:do{switch(d[m+l|0]|0){case 20:{c[g>>2]=e+2;h=25;return h|0};case 4:{n=e+2|0;if((n|0)==(k|0)){h=-26;return h|0}do{if((a[e+3|0]|0)==0){if((a[n]|0)!=93){break}o=e+4|0;if((o|0)==(k|0)){h=-1;return h|0}if((a[e+5|0]|0)!=0){break}if((a[o]|0)!=62){break}c[g>>2]=e+6;h=34;return h|0}}while(0);c[g>>2]=n;h=26;return h|0};case 35:{c[g>>2]=e+2;h=38;return h|0};case 2:{o=e+2|0;if((o|0)==(k|0)){h=-1;return h|0}p=a[e+3|0]|0;q=a[o]|0;c:do{if(p<<24>>24==0){switch(d[m+(q&255)|0]|0){case 15:{h=xf(b,e+4|0,k,g)|0;return h|0};case 22:case 24:case 29:case 5:case 6:case 7:{r=73;break c;break};case 16:{break};default:{r=74;break c}}s=e+4|0;if((s|0)==(k|0)){h=-1;return h|0}do{if((a[e+5|0]|0)==0){t=d[m+(d[s]|0)|0]|0;if((t|0)==22|(t|0)==24){u=e+6|0;if((u|0)==(k|0)){h=-1;return h|0}else{v=s;w=u}d:while(1){if((a[v+3|0]|0)!=0){r=71;break}switch(d[m+(d[w]|0)|0]|0){case 21:case 9:case 10:{break d;break};case 30:{r=66;break d;break};case 22:case 24:{break};default:{r=71;break d}}u=w+2|0;if((u|0)==(k|0)){h=-1;r=175;break}else{v=w;w=u}}do{if((r|0)==66){u=v+4|0;if((u|0)==(k|0)){h=-1;return h|0}if((a[v+5|0]|0)!=0){break}x=d[m+(d[u]|0)|0]|0;if(!((x|0)==21|(x|0)==9|(x|0)==10|(x|0)==30)){break}c[g>>2]=w;h=0;return h|0}else if((r|0)==71){c[g>>2]=w;h=0;return h|0}else if((r|0)==175){return h|0}}while(0);c[g>>2]=w;h=16;return h|0}else if((t|0)==27){h=wf(b,e+6|0,k,g)|0;return h|0}else if((t|0)==20){c[g>>2]=e+6;h=33;return h|0}else{break}}}while(0);c[g>>2]=s;h=0;return h|0}else{switch(p&255|0){case 255:{break};case 223:case 222:case 221:case 220:{r=74;break c;break};default:{r=73;break c}}if(((q&255)-254|0)>>>0<2>>>0){r=74}else{r=73}}}while(0);if((r|0)==73){c[g>>2]=e;h=29;return h|0}else if((r|0)==74){c[g>>2]=o;h=0;return h|0}break};case 31:{c[g>>2]=e+2;h=23;return h|0};case 32:{q=e+2|0;if((q|0)==(k|0)){h=-24;return h|0}e:do{if((a[e+3|0]|0)==0){switch(d[m+(d[q]|0)|0]|0){case 15:{c[g>>2]=e+4;h=35;return h|0};case 34:{c[g>>2]=e+4;h=37;return h|0};case 33:{c[g>>2]=e+4;h=36;return h|0};case 9:case 10:case 21:case 11:case 35:case 36:case 32:{c[g>>2]=q;h=24;return h|0};default:{break e}}}}while(0);c[g>>2]=q;h=0;return h|0};case 9:{if((e+2|0)!=(k|0)){break b}c[g>>2]=k;h=-15;return h|0};case 30:{h=vf(b,e+2|0,k,g)|0;return h|0};case 5:{if((k-i|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 25:case 26:case 27:{y=19;break a;break};case 29:{z=0;A=l;r=144;break a;break};case 11:{c[g>>2]=e+2;h=17;return h|0};case 19:{o=e+2|0;if((o|0)==(k|0)){h=-1;return h|0}p=a[e+3|0]|0;n=a[o]|0;f:do{if(p<<24>>24==0){x=n&255;switch(d[m+x|0]|0){case 7:{r=118;break f;break};case 22:case 24:{break f;break};case 29:{B=0;C=x;r=112;break f;break};case 5:{if((k-o|0)<2){h=-2;return h|0}c[g>>2]=o;h=0;return h|0};case 6:{if((k-o|0)<3){h=-2;return h|0}c[g>>2]=o;h=0;return h|0};default:{r=120;break f}}}else{x=p&255;switch(x|0){case 255:{u=n&255;if((u-254|0)>>>0<2>>>0){r=120;break f}else{B=255;C=u;r=112;break f}break};case 216:case 217:case 218:case 219:{r=118;break f;break};case 220:case 221:case 222:case 223:{r=120;break f;break};default:{B=x;C=n&255;r=112;break f}}}}while(0);do{if((r|0)==112){if((c[18232+((d[17968+B|0]<<3|C>>>5)<<2)>>2]&1<<(C&31)|0)!=0){break}c[g>>2]=o;h=0;return h|0}else if((r|0)==118){if((k-o|0)<4){h=-2;return h|0}c[g>>2]=o;h=0;return h|0}else if((r|0)==120){c[g>>2]=o;h=0;return h|0}}while(0);n=e+4|0;if((n|0)==(k|0)){h=-20;return h|0}else{D=o;E=n}g:while(1){n=a[D+3|0]|0;p=a[E]|0;h:do{if(n<<24>>24==0){q=p&255;switch(d[m+q|0]|0){case 29:{F=0;G=q;r=126;break};case 22:case 24:case 25:case 26:case 27:{break};case 6:{r=131;break g;break};case 7:{r=133;break g;break};case 9:case 10:case 21:case 32:case 11:case 30:case 36:{r=135;break g;break};case 5:{r=129;break g;break};default:{r=136;break g}}}else{q=n&255;switch(q|0){case 216:case 217:case 218:case 219:{r=133;break g;break};case 255:{x=p&255;if((x-254|0)>>>0<2>>>0){r=136;break g}else{F=255;G=x;r=126;break h}break};case 220:case 221:case 222:case 223:{r=136;break g;break};default:{F=q;G=p&255;r=126;break h}}}}while(0);if((r|0)==126){r=0;if((c[18232+((d[19512+F|0]<<3|G>>>5)<<2)>>2]&1<<(G&31)|0)==0){r=128;break}}p=E+2|0;if((p|0)==(k|0)){h=-20;r=175;break}else{D=E;E=p}}if((r|0)==128){c[g>>2]=E;h=0;return h|0}else if((r|0)==129){if((k-E|0)<2){h=-2;return h|0}c[g>>2]=E;h=0;return h|0}else if((r|0)==131){if((k-E|0)<3){h=-2;return h|0}c[g>>2]=E;h=0;return h|0}else if((r|0)==133){if((k-E|0)<4){h=-2;return h|0}c[g>>2]=E;h=0;return h|0}else if((r|0)==135){c[g>>2]=E;h=20;return h|0}else if((r|0)==136){c[g>>2]=E;h=0;return h|0}else if((r|0)==175){return h|0}break};case 21:case 10:{break};case 12:{o=e+2|0;if((o|0)==(k|0)){h=-1;return h|0}p=k;n=o;i:while(1){o=a[n+1|0]|0;s=a[n]|0;j:do{if(o<<24>>24==0){q=a[m+(s&255)|0]|0;switch(q&255|0){case 5:{if((p-n|0)<2){h=-2;r=175;break i}H=n+2|0;break j;break};case 0:case 1:case 8:{r=23;break i;break};case 12:case 13:{I=n+2|0;if(q<<24>>24==12){r=25;break i}else{H=I;break j}break};case 7:{r=21;break j;break};case 6:{if((p-n|0)<3){h=-2;r=175;break i}H=n+3|0;break j;break};default:{r=29;break j}}}else{switch(o&255|0){case 255:{break};case 220:case 221:case 222:case 223:{r=23;break i;break};case 216:case 217:case 218:case 219:{r=21;break j;break};default:{r=29;break j}}if(((s&255)-254|0)>>>0<2>>>0){r=23;break i}else{r=29}}}while(0);if((r|0)==21){r=0;if((p-n|0)<4){h=-2;r=175;break}H=n+4|0}else if((r|0)==29){r=0;H=n+2|0}if((H|0)==(k|0)){h=-1;r=175;break}else{n=H}}if((r|0)==23){c[g>>2]=n;h=0;return h|0}else if((r|0)==25){if((I|0)==(k|0)){h=-27;return h|0}c[g>>2]=I;k:do{if((a[n+3|0]|0)==0){switch(d[m+(d[I]|0)|0]|0){case 21:case 9:case 10:case 11:case 30:case 20:{h=27;break};default:{break k}}return h|0}}while(0);h=0;return h|0}else if((r|0)==175){return h|0}break};case 6:{if((k-i|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 7:{r=141;break a;break};case 22:case 24:{y=18;break a;break};case 36:{c[g>>2]=e+2;h=21;return h|0};case 13:{n=e+2|0;if((n|0)==(k|0)){h=-1;return h|0}p=k;s=n;l:while(1){n=a[s+1|0]|0;o=a[s]|0;m:do{if(n<<24>>24==0){q=a[m+(o&255)|0]|0;switch(q&255|0){case 6:{if((p-s|0)<3){h=-2;r=175;break l}J=s+3|0;break m;break};case 5:{if((p-s|0)<2){h=-2;r=175;break l}J=s+2|0;break m;break};case 7:{r=41;break m;break};case 0:case 1:case 8:{r=43;break l;break};case 12:case 13:{K=s+2|0;if(q<<24>>24==13){r=45;break l}else{J=K;break m}break};default:{r=49;break m}}}else{switch(n&255|0){case 255:{break};case 216:case 217:case 218:case 219:{r=41;break m;break};case 220:case 221:case 222:case 223:{r=43;break l;break};default:{r=49;break m}}if(((o&255)-254|0)>>>0<2>>>0){r=43;break l}else{r=49}}}while(0);if((r|0)==41){r=0;if((p-s|0)<4){h=-2;r=175;break}J=s+4|0}else if((r|0)==49){r=0;J=s+2|0}if((J|0)==(k|0)){h=-1;r=175;break}else{s=J}}if((r|0)==43){c[g>>2]=s;h=0;return h|0}else if((r|0)==45){if((K|0)==(k|0)){h=-27;return h|0}c[g>>2]=K;n:do{if((a[s+3|0]|0)==0){switch(d[m+(d[K]|0)|0]|0){case 21:case 9:case 10:case 11:case 30:case 20:{h=27;break};default:{break n}}return h|0}}while(0);h=0;return h|0}else if((r|0)==175){return h|0}break};default:{r=148;break a}}}while(0);l=e+2|0;o:do{if((l|0)!=(k|0)){s=e;p=l;while(1){if((a[s+3|0]|0)!=0){break}o=d[m+(d[p]|0)|0]|0;if((o|0)==9){if((s+4|0)==(k|0)){break}}else if(!((o|0)==21|(o|0)==10)){break}o=p+2|0;if((o|0)==(k|0)){break o}else{s=p;p=o}}c[g>>2]=p;h=15;return h|0}}while(0);c[g>>2]=k;h=15;return h|0}else{m=j&255;switch(m|0){case 220:case 221:case 222:case 223:{r=148;break a;break};case 216:case 217:case 218:case 219:{r=141;break a;break};case 255:{l=f&255;if((l-254|0)>>>0<2>>>0){r=148;break a}else{z=255;A=l;r=144;break a}break};default:{z=m;A=f&255;r=144;break a}}}}while(0);do{if((r|0)==141){if((k-i|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((r|0)==144){f=A>>>5;j=1<<(A&31);if((j&c[18232+((f|d[17968+z|0]<<3)<<2)>>2]|0)!=0){y=18;break}if((c[18232+((d[19512+z|0]<<3|f)<<2)>>2]&j|0)==0){r=148}else{y=19}}}while(0);if((r|0)==148){c[g>>2]=e;h=0;return h|0}z=e+2|0;p:do{if((z|0)!=(k|0)){A=b+72|0;i=e;j=z;q:while(1){f=a[i+3|0]|0;K=a[j]|0;r:do{if(f<<24>>24==0){J=K&255;switch(d[A+J|0]|0){case 29:{L=0;M=J;r=154;break};case 22:case 24:case 25:case 26:case 27:{break};case 34:{r=164;break q;break};case 33:{r=167;break q;break};case 15:{r=170;break q;break};case 6:{r=159;break q;break};case 7:{r=161;break q;break};case 11:case 32:case 35:case 36:case 20:case 30:case 21:case 9:case 10:{r=163;break q;break};case 5:{r=157;break q;break};default:{r=173;break q}}}else{J=f&255;switch(J|0){case 216:case 217:case 218:case 219:{r=161;break q;break};case 255:{I=K&255;if((I-254|0)>>>0<2>>>0){r=173;break q}else{L=255;M=I;r=154;break r}break};case 220:case 221:case 222:case 223:{r=173;break q;break};default:{L=J;M=K&255;r=154;break r}}}}while(0);if((r|0)==154){r=0;if((1<<(M&31)&c[18232+((M>>>5|d[19512+L|0]<<3)<<2)>>2]|0)==0){r=156;break}}K=j+2|0;if((K|0)==(k|0)){break p}else{i=j;j=K}}if((r|0)==156){c[g>>2]=j;h=0;return h|0}else if((r|0)==157){if((k-j|0)<2){h=-2;return h|0}c[g>>2]=j;h=0;return h|0}else if((r|0)==159){if((k-j|0)<3){h=-2;return h|0}c[g>>2]=j;h=0;return h|0}else if((r|0)==161){if((k-j|0)<4){h=-2;return h|0}c[g>>2]=j;h=0;return h|0}else if((r|0)==163){c[g>>2]=j;h=y;return h|0}else if((r|0)==164){if((y|0)==19){c[g>>2]=j;h=0;return h|0}else{c[g>>2]=i+4;h=32;return h|0}}else if((r|0)==167){if((y|0)==19){c[g>>2]=j;h=0;return h|0}else{c[g>>2]=i+4;h=31;return h|0}}else if((r|0)==170){if((y|0)==19){c[g>>2]=j;h=0;return h|0}else{c[g>>2]=i+4;h=30;return h|0}}else if((r|0)==173){c[g>>2]=j;h=0;return h|0}}}while(0);h=-y|0;return h|0}function ef(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0;h=i;i=i+8|0;j=h|0;a:do{if((e|0)==(f|0)){k=-4}else{l=e;m=f-l|0;if((m&1|0)==0){n=f}else{o=m&-2;if((o|0)==0){k=-1;break}n=e+o|0}o=a[e+1|0]|0;m=a[e]|0;b:do{if(o<<24>>24==0){p=b+72|0;switch(d[p+(m&255)|0]|0){case 0:case 1:case 8:{q=208;break b;break};case 2:{r=e+2|0;if((r|0)==(n|0)){k=-1;break a}s=a[e+3|0]|0;t=a[r]|0;c:do{if(s<<24>>24==0){u=t&255;switch(d[p+u|0]|0){case 15:{k=xf(b,e+4|0,n,g)|0;break a;break};case 17:{v=e+4|0;if((v|0)==(n|0)){k=-1;break a}w=a[e+5|0]|0;x=a[v]|0;d:do{if(w<<24>>24==0){y=x&255;switch(d[p+y|0]|0){case 5:{if((n-v|0)<2){k=-2;break a}c[g>>2]=v;k=0;break a;break};case 22:case 24:{break d;break};case 29:{z=0;A=y;q=43;break d;break};case 7:{q=49;break d;break};case 6:{if((n-v|0)<3){k=-2;break a}c[g>>2]=v;k=0;break a;break};default:{q=51;break d}}}else{y=w&255;switch(y|0){case 220:case 221:case 222:case 223:{q=51;break d;break};case 216:case 217:case 218:case 219:{q=49;break d;break};case 255:{B=x&255;if((B-254|0)>>>0<2>>>0){q=51;break d}else{z=255;A=B;q=43;break d}break};default:{z=y;A=x&255;q=43;break d}}}}while(0);do{if((q|0)==43){if((c[18232+((d[17968+z|0]<<3|A>>>5)<<2)>>2]&1<<(A&31)|0)!=0){break}c[g>>2]=v;k=0;break a}else if((q|0)==49){if((n-v|0)<4){k=-2;break a}c[g>>2]=v;k=0;break a}else if((q|0)==51){c[g>>2]=v;k=0;break a}}while(0);x=e+6|0;if((x|0)==(n|0)){k=-1;break a}else{C=v;D=x}e:while(1){x=a[C+3|0]|0;w=a[D]|0;f:do{if(x<<24>>24==0){y=w&255;switch(d[p+y|0]|0){case 29:{E=0;F=y;q=57;break};case 6:{q=62;break e;break};case 11:{q=72;break e;break};case 22:case 24:case 25:case 26:case 27:{break};case 7:{q=64;break e;break};case 21:case 9:case 10:{q=66;break e;break};case 5:{q=60;break e;break};default:{q=73;break e}}}else{y=x&255;switch(y|0){case 255:{B=w&255;if((B-254|0)>>>0<2>>>0){q=73;break e}else{E=255;F=B;q=57;break f}break};case 216:case 217:case 218:case 219:{q=64;break e;break};case 220:case 221:case 222:case 223:{q=73;break e;break};default:{E=y;F=w&255;q=57;break f}}}}while(0);if((q|0)==57){q=0;if((c[18232+((d[19512+E|0]<<3|F>>>5)<<2)>>2]&1<<(F&31)|0)==0){q=59;break}}w=D+2|0;if((w|0)==(n|0)){k=-1;break a}else{C=D;D=w}}if((q|0)==59){c[g>>2]=D;k=0;break a}else if((q|0)==60){if((n-D|0)<2){k=-2;break a}c[g>>2]=D;k=0;break a}else if((q|0)==62){if((n-D|0)<3){k=-2;break a}c[g>>2]=D;k=0;break a}else if((q|0)==64){if((n-D|0)<4){k=-2;break a}c[g>>2]=D;k=0;break a}else if((q|0)==66){v=C+4|0;if((v|0)==(n|0)){k=-1;break a}else{G=v}while(1){if((a[G+1|0]|0)!=0){q=70;break}v=d[p+(d[G]|0)|0]|0;if((v|0)==11){q=69;break}else if(!((v|0)==21|(v|0)==9|(v|0)==10)){q=70;break}v=G+2|0;if((v|0)==(n|0)){k=-1;break a}else{G=v}}if((q|0)==69){c[g>>2]=G+2;k=5;break a}else if((q|0)==70){c[g>>2]=G;k=0;break a}}else if((q|0)==72){c[g>>2]=C+4;k=5;break a}else if((q|0)==73){c[g>>2]=D;k=0;break a}break};case 7:{q=22;break c;break};case 5:{if((n-r|0)<2){k=-2;break a}c[g>>2]=r;k=0;break a;break};case 16:{v=e+4|0;if((v|0)==(n|0)){k=-1;break a}do{if((a[e+5|0]|0)==0){w=d[p+(d[v]|0)|0]|0;if((w|0)==27){k=wf(b,e+6|0,n,g)|0;break a}else if((w|0)!=20){break}w=e+6|0;if((n-w|0)<12){k=-1;break a}else{H=w;I=0}while(1){if((a[H+1|0]|0)!=0){q=31;break}if((a[H]|0)!=(a[17816+I|0]|0)){q=31;break}w=I+1|0;J=H+2|0;if((w|0)<6){H=J;I=w}else{q=33;break}}if((q|0)==31){c[g>>2]=H;k=0;break a}else if((q|0)==33){c[g>>2]=J;k=8;break a}}}while(0);c[g>>2]=v;k=0;break a;break};case 6:{if((n-r|0)<3){k=-2;break a}c[g>>2]=r;k=0;break a;break};case 22:case 24:{break c;break};case 29:{K=0;L=u;q=16;break c;break};default:{q=74;break c}}}else{w=s&255;switch(w|0){case 216:case 217:case 218:case 219:{q=22;break c;break};case 255:{x=t&255;if((x-254|0)>>>0<2>>>0){q=74;break c}else{K=255;L=x;q=16;break c}break};case 220:case 221:case 222:case 223:{q=74;break c;break};default:{K=w;L=t&255;q=16;break c}}}}while(0);do{if((q|0)==16){if((c[18232+((d[17968+K|0]<<3|L>>>5)<<2)>>2]&1<<(L&31)|0)!=0){break}c[g>>2]=r;k=0;break a}else if((q|0)==22){if((n-r|0)<4){k=-2;break a}c[g>>2]=r;k=0;break a}else if((q|0)==74){c[g>>2]=r;k=0;break a}}while(0);t=e+4|0;if((t|0)==(n|0)){k=-1;break a}else{M=r;N=t}g:while(1){t=a[M+3|0]|0;s=a[N]|0;h:do{if(t<<24>>24==0){w=s&255;switch(d[p+w|0]|0){case 5:{q=83;break g;break};case 22:case 24:case 25:case 26:case 27:{break};case 6:{q=85;break g;break};case 17:{O=N;break g;break};case 7:{q=87;break g;break};case 21:case 9:case 10:{q=89;break g;break};case 11:{P=N;q=182;break g;break};case 29:{Q=0;R=w;q=80;break};default:{q=188;break g}}}else{w=t&255;switch(w|0){case 220:case 221:case 222:case 223:{q=188;break g;break};case 216:case 217:case 218:case 219:{q=87;break g;break};case 255:{x=s&255;if((x-254|0)>>>0<2>>>0){q=188;break g}else{Q=255;R=x;q=80;break h}break};default:{Q=w;R=s&255;q=80;break h}}}}while(0);if((q|0)==80){q=0;if((c[18232+((d[19512+Q|0]<<3|R>>>5)<<2)>>2]&1<<(R&31)|0)==0){q=82;break}}s=N+2|0;if((s|0)==(n|0)){k=-1;break a}else{M=N;N=s}}i:do{if((q|0)==82){c[g>>2]=N;k=0;break a}else if((q|0)==83){if((n-N|0)<2){k=-2;break a}c[g>>2]=N;k=0;break a}else if((q|0)==85){if((n-N|0)<3){k=-2;break a}c[g>>2]=N;k=0;break a}else if((q|0)==87){if((n-N|0)<4){k=-2;break a}c[g>>2]=N;k=0;break a}else if((q|0)==89){r=M+4|0;if((r|0)==(n|0)){k=-1;break a}else{S=r}j:while(1){T=a[S+1|0]|0;U=a[S]|0;if(T<<24>>24!=0){q=91;break}r=U&255;switch(d[p+r|0]|0){case 29:{V=0;W=r;q=95;break j;break};case 22:case 24:{break j;break};case 5:{q=174;break j;break};case 7:{q=178;break j;break};case 17:{O=S;break i;break};case 21:case 9:case 10:{break};case 11:{P=S;q=182;break i;break};case 6:{q=176;break j;break};default:{q=181;break j}}r=S+2|0;if((r|0)==(n|0)){k=-1;break a}else{S=r}}k:do{if((q|0)==91){r=T&255;switch(r|0){case 255:{s=U&255;if((s-254|0)>>>0<2>>>0){q=181;break k}else{V=255;W=s;q=95;break k}break};case 216:case 217:case 218:case 219:{q=178;break k;break};case 220:case 221:case 222:case 223:{q=181;break k;break};default:{V=r;W=U&255;q=95;break k}}}else if((q|0)==174){if((n-S|0)<2){k=-2;break a}c[g>>2]=S;k=0;break a}else if((q|0)==176){if((n-S|0)<3){k=-2;break a}c[g>>2]=S;k=0;break a}}while(0);do{if((q|0)==95){if((c[18232+((d[17968+V|0]<<3|W>>>5)<<2)>>2]&1<<(W&31)|0)!=0){break}c[g>>2]=S;k=0;break a}else if((q|0)==178){if((n-S|0)<4){k=-2;break a}c[g>>2]=S;k=0;break a}else if((q|0)==181){c[g>>2]=S;k=0;break a}}while(0);r=S+2|0;c[j>>2]=r;if((r|0)==(n|0)){k=-1;break a}s=n;t=r;l:while(1){r=a[t+1|0]|0;u=a[t]|0;m:do{if(r<<24>>24==0){v=u&255;n:do{switch(d[p+v|0]|0){case 6:{q=109;break l;break};case 29:{X=0;Y=v;q=105;break m;break};case 5:{q=107;break l;break};case 21:case 9:case 10:{w=t+2|0;c[j>>2]=w;if((w|0)==(n|0)){k=-1;break a}else{Z=t;_=w}while(1){if((a[Z+3|0]|0)!=0){q=116;break l}w=d[p+(d[_]|0)|0]|0;if((w|0)==14){$=_;break n}else if(!((w|0)==21|(w|0)==10|(w|0)==9)){q=116;break l}w=_+2|0;c[j>>2]=w;if((w|0)==(n|0)){k=-1;break a}else{Z=_;_=w}}break};case 7:{q=111;break l;break};case 22:case 24:case 25:case 26:case 27:{aa=t;break m;break};case 14:{$=t;break};default:{q=173;break l}}}while(0);v=$+2|0;c[j>>2]=v;if((v|0)==(n|0)){k=-1;break a}else{ba=$;ca=v}while(1){if((a[ba+3|0]|0)!=0){q=122;break l}da=d[p+(d[ca]|0)|0]|0;if((da&254|0)==12){break}if(!((da|0)==21|(da|0)==10|(da|0)==9)){q=122;break l}v=ca+2|0;c[j>>2]=v;if((v|0)==(n|0)){k=-1;break a}else{ba=ca;ca=v}}v=ca+2|0;c[j>>2]=v;if((v|0)==(n|0)){k=-1;break a}else{ea=v}while(1){v=a[ea+1|0]|0;w=a[ea]|0;o:do{if(v<<24>>24==0){fa=d[p+(w&255)|0]|0}else{switch(v&255|0){case 216:case 217:case 218:case 219:{fa=7;break o;break};case 220:case 221:case 222:case 223:{fa=8;break o;break};case 255:{if(((w&255)-254|0)>>>0<2>>>0){fa=0;break o}break};default:{}}fa=29}}while(0);if((fa|0)==(da|0)){break}switch(fa|0){case 5:{if((s-ea|0)<2){k=-2;break a}w=ea+2|0;c[j>>2]=w;ga=w;break};case 6:{if((s-ea|0)<3){k=-2;break a}w=ea+3|0;c[j>>2]=w;ga=w;break};case 2:{q=144;break l;break};case 0:case 1:case 8:{q=138;break l;break};case 3:{ha=uf(b,ea+2|0,n,j)|0;if((ha|0)<1){q=142;break l}ga=c[j>>2]|0;break};case 7:{if((s-ea|0)<4){k=-2;break a}w=ea+4|0;c[j>>2]=w;ga=w;break};default:{w=ea+2|0;c[j>>2]=w;ga=w}}if((ga|0)==(n|0)){k=-1;break a}else{ea=ga}}ia=ea+2|0;c[j>>2]=ia;if((ia|0)==(n|0)){k=-1;break a}if((a[ea+3|0]|0)!=0){q=150;break l}switch(d[p+(d[ia]|0)|0]|0){case 21:case 9:case 10:{break};case 11:{ja=ia;q=166;break l;break};case 17:{ka=ia;q=167;break l;break};default:{q=150;break l}}w=ea+4|0;c[j>>2]=w;if((w|0)==(n|0)){k=-1;break a}else{la=ia;ma=w}p:while(1){na=a[la+3|0]|0;oa=a[ma]|0;if(na<<24>>24!=0){q=152;break}w=oa&255;switch(d[p+w|0]|0){case 11:{ja=ma;q=166;break l;break};case 17:{ka=ma;q=167;break l;break};case 7:{q=164;break l;break};case 29:{pa=w;break p;break};case 22:case 24:{aa=ma;break m;break};case 6:{q=162;break l;break};case 5:{q=160;break l;break};case 21:case 9:case 10:{break};default:{q=172;break l}}w=ma+2|0;c[j>>2]=w;if((w|0)==(n|0)){k=-1;break a}else{la=ma;ma=w}}q:do{if((q|0)==152){q=0;switch(na&255|0){case 220:case 221:case 222:case 223:{q=172;break l;break};case 216:case 217:case 218:case 219:{q=164;break l;break};case 255:{w=oa&255;if((w-254|0)>>>0<2>>>0){q=172;break l}else{pa=w;break q}break};default:{pa=oa&255;break q}}}}while(0);if((c[18232+((d[17968+(d[ma+1|0]|0)|0]<<3|pa>>>5)<<2)>>2]&1<<(pa&31)|0)==0){q=158;break l}else{aa=ma}}else{w=r&255;switch(w|0){case 255:{v=u&255;if((v-254|0)>>>0<2>>>0){q=173;break l}else{X=255;Y=v;q=105;break m}break};case 220:case 221:case 222:case 223:{q=173;break l;break};case 216:case 217:case 218:case 219:{q=111;break l;break};default:{X=w;Y=u&255;q=105;break m}}}}while(0);if((q|0)==105){q=0;if((c[18232+((d[19512+X|0]<<3|Y>>>5)<<2)>>2]&1<<(Y&31)|0)==0){q=106;break}else{aa=t}}u=aa+2|0;c[j>>2]=u;if((u|0)==(n|0)){k=-1;break a}else{t=u}}if((q|0)==106){c[g>>2]=t;k=0;break a}else if((q|0)==107){if((s-t|0)<2){k=-2;break a}c[g>>2]=t;k=0;break a}else if((q|0)==109){if((s-t|0)<3){k=-2;break a}c[g>>2]=t;k=0;break a}else if((q|0)==111){if((s-t|0)<4){k=-2;break a}c[g>>2]=t;k=0;break a}else if((q|0)==116){c[g>>2]=_;k=0;break a}else if((q|0)==122){c[g>>2]=ca;k=0;break a}else if((q|0)==138){c[g>>2]=ea;k=0;break a}else if((q|0)==142){if((ha|0)!=0){k=ha;break a}c[g>>2]=c[j>>2];k=0;break a}else if((q|0)==144){c[g>>2]=ea;k=0;break a}else if((q|0)==150){c[g>>2]=ia;k=0;break a}else if((q|0)==158){c[g>>2]=ma;k=0;break a}else if((q|0)==160){if((s-ma|0)<2){k=-2;break a}c[g>>2]=ma;k=0;break a}else if((q|0)==162){if((s-ma|0)<3){k=-2;break a}c[g>>2]=ma;k=0;break a}else if((q|0)==164){if((s-ma|0)<4){k=-2;break a}c[g>>2]=ma;k=0;break a}else if((q|0)==166){c[g>>2]=ja+2;k=1;break a}else if((q|0)==167){u=ka+2|0;c[j>>2]=u;if((u|0)==(n|0)){k=-1;break a}do{if((a[ka+3|0]|0)==0){if((a[u]|0)!=62){break}c[g>>2]=ka+4;k=3;break a}}while(0);c[g>>2]=u;k=0;break a}else if((q|0)==172){c[g>>2]=ma;k=0;break a}else if((q|0)==173){c[g>>2]=t;k=0;break a}}else if((q|0)==188){c[g>>2]=N;k=0;break a}}while(0);if((q|0)==182){c[g>>2]=P+2;k=2;break a}s=O+2|0;if((s|0)==(n|0)){k=-1;break a}do{if((a[O+3|0]|0)==0){if((a[s]|0)!=62){break}c[g>>2]=O+4;k=4;break a}}while(0);c[g>>2]=s;k=0;break a;break};case 5:{if((n-l|0)<2){k=-2;break a}qa=e+2|0;break b;break};case 6:{if((n-l|0)<3){k=-2;break a}qa=e+3|0;break b;break};case 7:{q=206;break b;break};case 10:{c[g>>2]=e+2;k=7;break a;break};case 4:{r=e+2|0;if((r|0)==(n|0)){k=-5;break a}if((a[e+3|0]|0)!=0){qa=r;break b}if((a[r]|0)!=93){qa=r;break b}w=e+4|0;if((w|0)==(n|0)){k=-5;break a}if((a[e+5|0]|0)!=0){qa=r;break b}if((a[w]|0)!=62){qa=r;break b}c[g>>2]=w;k=0;break a;break};case 3:{k=uf(b,e+2|0,n,g)|0;break a;break};case 9:{w=e+2|0;if((w|0)==(n|0)){k=-3;break a}if((a[e+3|0]|0)==0){ra=(a[p+(d[w]|0)|0]|0)==10}else{ra=0}c[g>>2]=ra?e+4|0:w;k=7;break a;break};default:{q=209;break b}}}else{switch(o&255|0){case 220:case 221:case 222:case 223:{q=208;break b;break};case 216:case 217:case 218:case 219:{q=206;break b;break};case 255:{break};default:{q=209;break b}}if(((m&255)-254|0)>>>0<2>>>0){q=208}else{q=209}}}while(0);if((q|0)==206){if((n-l|0)<4){k=-2;break}qa=e+4|0}else if((q|0)==208){c[g>>2]=e;k=0;break}else if((q|0)==209){qa=e+2|0}r:do{if((qa|0)!=(n|0)){m=b+72|0;o=n;w=qa;s:while(1){r=a[w+1|0]|0;v=a[w]|0;t:do{if(r<<24>>24==0){switch(d[m+(v&255)|0]|0){case 6:{if((o-w|0)<3){q=220;break s}sa=w+3|0;break t;break};case 5:{if((o-w|0)<2){q=217;break s}sa=w+2|0;break t;break};case 7:{q=222;break t;break};case 4:{x=w+2|0;if((x|0)==(n|0)){q=232;break s}if((a[w+3|0]|0)!=0){sa=x;break t}if((a[x]|0)!=93){sa=x;break t}ta=w+4|0;if((ta|0)==(n|0)){q=232;break s}if((a[w+5|0]|0)!=0){sa=x;break t}if((a[ta]|0)==62){q=231;break s}else{sa=x;break t}break};case 3:case 2:case 0:case 1:case 8:case 9:case 10:{q=232;break s;break};default:{q=233;break t}}}else{switch(r&255|0){case 255:{break};case 216:case 217:case 218:case 219:{q=222;break t;break};case 220:case 221:case 222:case 223:{q=232;break s;break};default:{q=233;break t}}if(((v&255)-254|0)>>>0<2>>>0){q=232;break s}else{q=233}}}while(0);if((q|0)==222){q=0;if((o-w|0)<4){q=223;break}sa=w+4|0}else if((q|0)==233){q=0;sa=w+2|0}if((sa|0)==(n|0)){break r}else{w=sa}}if((q|0)==217){c[g>>2]=w;k=6;break a}else if((q|0)==220){c[g>>2]=w;k=6;break a}else if((q|0)==223){c[g>>2]=w;k=6;break a}else if((q|0)==231){c[g>>2]=ta;k=0;break a}else if((q|0)==232){c[g>>2]=w;k=6;break a}}}while(0);c[g>>2]=n;k=6}}while(0);i=h;return k|0}function ff(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)==(f|0)){h=-4;return h|0}i=e;j=f-i|0;do{if((j&1|0)==0){k=f}else{l=j&-2;if((l|0)==0){h=-1;return h|0}else{k=e+l|0;break}}}while(0);j=a[e+1|0]|0;f=a[e]|0;a:do{if(j<<24>>24==0){l=b+72|0;switch(d[l+(f&255)|0]|0){case 9:{m=e+2|0;if((m|0)==(k|0)){h=-1;return h|0}if((a[e+3|0]|0)==0){n=(a[l+(d[m]|0)|0]|0)==10}else{n=0}c[g>>2]=n?e+4|0:m;h=7;return h|0};case 10:{c[g>>2]=e+2;h=7;return h|0};case 5:{if((k-i|0)<2){h=-2;return h|0}else{o=e+2|0;break a}break};case 6:{if((k-i|0)<3){h=-2;return h|0}else{o=e+3|0;break a}break};case 7:{p=25;break a;break};case 0:case 1:case 8:{p=27;break a;break};case 4:{m=e+2|0;if((m|0)==(k|0)){h=-1;return h|0}if((a[e+3|0]|0)!=0){o=m;break a}if((a[m]|0)!=93){o=m;break a}l=e+4|0;if((l|0)==(k|0)){h=-1;return h|0}if((a[e+5|0]|0)!=0){o=m;break a}if((a[l]|0)!=62){o=m;break a}c[g>>2]=e+6;h=40;return h|0};default:{p=28;break a}}}else{switch(j&255|0){case 255:{break};case 216:case 217:case 218:case 219:{p=25;break a;break};case 220:case 221:case 222:case 223:{p=27;break a;break};default:{p=28;break a}}if(((f&255)-254|0)>>>0<2>>>0){p=27}else{p=28}}}while(0);do{if((p|0)==25){if((k-i|0)<4){h=-2;return h|0}else{o=e+4|0;break}}else if((p|0)==27){c[g>>2]=e;h=0;return h|0}else if((p|0)==28){o=e+2|0}}while(0);b:do{if((o|0)!=(k|0)){e=b+72|0;i=k;f=o;c:while(1){j=a[f+1|0]|0;n=a[f]|0;d:do{if(j<<24>>24==0){switch(d[e+(n&255)|0]|0){case 0:case 1:case 8:case 9:case 10:case 4:{p=44;break c;break};case 5:{if((i-f|0)<2){p=36;break c}q=f+2|0;break d;break};case 7:{p=41;break d;break};case 6:{if((i-f|0)<3){p=39;break c}q=f+3|0;break d;break};default:{p=45;break d}}}else{switch(j&255|0){case 220:case 221:case 222:case 223:{p=44;break c;break};case 255:{break};case 216:case 217:case 218:case 219:{p=41;break d;break};default:{p=45;break d}}if(((n&255)-254|0)>>>0<2>>>0){p=44;break c}else{p=45}}}while(0);if((p|0)==41){p=0;if((i-f|0)<4){p=42;break}q=f+4|0}else if((p|0)==45){p=0;q=f+2|0}if((q|0)==(k|0)){break b}else{f=q}}if((p|0)==36){c[g>>2]=f;h=6;return h|0}else if((p|0)==39){c[g>>2]=f;h=6;return h|0}else if((p|0)==42){c[g>>2]=f;h=6;return h|0}else if((p|0)==44){c[g>>2]=f;h=6;return h|0}}}while(0);c[g>>2]=k;h=6;return h|0}function gf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)==(f|0)){h=-4;return h|0}i=b+72|0;j=e;a:while(1){k=a[j+1|0]|0;b:do{if(k<<24>>24==0){switch(d[i+(d[j]|0)|0]|0){case 10:{l=13;break a;break};case 2:{l=12;break a;break};case 9:{l=16;break a;break};case 6:{m=j+3|0;break b;break};case 7:{l=8;break b;break};case 3:{l=9;break a;break};case 21:{l=22;break a;break};case 5:{m=j+2|0;break b;break};default:{l=25;break b}}}else{if(((k&255)-216|0)>>>0<4>>>0){l=8}else{l=25}}}while(0);if((l|0)==8){l=0;m=j+4|0}else if((l|0)==25){l=0;m=j+2|0}if((m|0)==(f|0)){l=27;break}else{j=m}}if((l|0)==9){if((j|0)==(e|0)){h=uf(b,e+2|0,f,g)|0;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==12){c[g>>2]=j;h=0;return h|0}else if((l|0)==13){if((j|0)==(e|0)){c[g>>2]=e+2;h=7;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==16){if((j|0)!=(e|0)){c[g>>2]=j;h=6;return h|0}b=e+2|0;if((b|0)==(f|0)){h=-3;return h|0}if((a[e+3|0]|0)==0){n=(a[i+(d[b]|0)|0]|0)==10}else{n=0}c[g>>2]=n?e+4|0:b;h=7;return h|0}else if((l|0)==22){if((j|0)==(e|0)){c[g>>2]=e+2;h=39;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==27){c[g>>2]=f;h=6;return h|0}return 0}function hf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)==(f|0)){h=-4;return h|0}i=b+72|0;j=e;a:while(1){k=a[j+1|0]|0;b:do{if(k<<24>>24==0){switch(d[i+(d[j]|0)|0]|0){case 10:{l=15;break a;break};case 3:{l=9;break a;break};case 7:{l=8;break b;break};case 9:{l=18;break a;break};case 6:{m=j+3|0;break b;break};case 5:{m=j+2|0;break b;break};case 30:{l=12;break a;break};default:{l=24;break b}}}else{if(((k&255)-216|0)>>>0<4>>>0){l=8}else{l=24}}}while(0);if((l|0)==8){l=0;m=j+4|0}else if((l|0)==24){l=0;m=j+2|0}if((m|0)==(f|0)){l=26;break}else{j=m}}if((l|0)==9){if((j|0)==(e|0)){h=uf(b,e+2|0,f,g)|0;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==12){if((j|0)==(e|0)){m=vf(b,e+2|0,f,g)|0;h=(m|0)==22?0:m;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==15){if((j|0)==(e|0)){c[g>>2]=e+2;h=7;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==18){if((j|0)!=(e|0)){c[g>>2]=j;h=6;return h|0}j=e+2|0;if((j|0)==(f|0)){h=-3;return h|0}if((a[e+3|0]|0)==0){n=(a[i+(d[j]|0)|0]|0)==10}else{n=0}c[g>>2]=n?e+4|0:j;h=7;return h|0}else if((l|0)==26){c[g>>2]=f;h=6;return h|0}return 0}function jf(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=b+72|0;b=e;e=c;a:while(1){c=e+1|0;g=a[c]|0;h=a[e]|0;b:do{if(g<<24>>24==0){switch(d[f+(h&255)|0]|0){case 5:{i=b;j=e;k=h;l=10;break};case 29:case 22:case 24:case 25:case 26:case 27:{l=12;break};case 6:{m=b;n=e;o=h;l=8;break};case 7:{l=6;break};default:{l=15;break a}}}else{switch(g&255|0){case 220:case 221:case 222:case 223:{l=15;break a;break};case 255:{break};case 216:case 217:case 218:case 219:{l=6;break b;break};default:{l=12;break b}}if(((h&255)-254|0)>>>0<2>>>0){l=15;break a}else{l=12}}}while(0);if((l|0)==6){l=0;if(h<<24>>24!=(a[b]|0)){p=0;l=20;break}m=b+1|0;n=c;o=g;l=8}else if((l|0)==12){l=0;if((a[b]|0)!=h<<24>>24){p=0;l=20;break}if((a[b+1|0]|0)==g<<24>>24){q=b;r=e}else{p=0;l=20;break}}if((l|0)==8){l=0;s=n+1|0;if(o<<24>>24!=(a[m]|0)){p=0;l=20;break}i=m+1|0;j=s;k=a[s]|0;l=10}if((l|0)==10){l=0;if(k<<24>>24!=(a[i]|0)){p=0;l=20;break}if((a[j+1|0]|0)==(a[i+1|0]|0)){q=i;r=j}else{p=0;l=20;break}}b=q+2|0;e=r+2|0}if((l|0)==15){r=a[b+1|0]|0;e=a[b]|0;c:do{if(r<<24>>24==0){switch(d[f+(e&255)|0]|0){case 5:case 6:case 7:case 29:case 22:case 24:case 25:case 26:case 27:{p=0;break};default:{break c}}return p|0}else{switch(r&255|0){case 223:case 222:case 221:case 220:{break c;break};case 255:{break};default:{p=0;return p|0}}if(((e&255)-254|0)>>>0<2>>>0){break}else{p=0}return p|0}}while(0);p=1;return p|0}else if((l|0)==20){return p|0}return 0}function kf(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;b=a[e]|0;f=(c|0)==(d|0);a:do{if(b<<24>>24==0){g=f}else{h=c;i=e;j=b;k=f;while(1){if(k){l=0;m=7;break}if((a[h+1|0]|0)!=0){l=0;m=7;break}if((a[h]|0)!=j<<24>>24){l=0;m=7;break}n=h+2|0;o=i+1|0;p=a[o]|0;q=(n|0)==(d|0);if(p<<24>>24==0){g=q;break a}else{h=n;i=o;j=p;k=q}}if((m|0)==7){return l|0}}}while(0);l=g&1;return l|0}function lf(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0;e=b+72|0;b=c;a:while(1){f=a[b+1|0]|0;g=a[b]|0;b:do{if(f<<24>>24==0){switch(d[e+(g&255)|0]|0|0){case 7:{h=8;break b;break};case 29:case 22:case 24:case 25:case 26:case 27:{h=9;break b;break};case 6:{b=b+3|0;continue a;break};case 5:{b=b+2|0;continue a;break};default:{break a}}}else{switch(f&255|0){case 255:{break};case 216:case 217:case 218:case 219:{h=8;break b;break};case 220:case 221:case 222:case 223:{break a;break};default:{h=9;break b}}if(((g&255)-254|0)>>>0<2>>>0){break a}else{h=9}}}while(0);if((h|0)==8){h=0;b=b+4|0;continue}else if((h|0)==9){h=0;b=b+2|0;continue}}return b-c|0}function mf(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;if((a[c+1|0]|0)!=0){e=c;return e|0}f=b+72|0;b=c;while(1){c=d[f+(d[b]|0)|0]|0;if(!((c|0)==10|(c|0)==9|(c|0)==21)){e=b;g=3;break}c=b+2|0;if((a[b+3|0]|0)==0){b=c}else{e=c;g=3;break}}if((g|0)==3){return e|0}return 0}function nf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=b+72|0;b=0;i=0;j=1;k=e;a:while(1){e=k+2|0;l=k+3|0;m=a[l]|0;n=a[e]|0;b:do{if(m<<24>>24==0){switch(d[h+(n&255)|0]|0){case 21:{if((j|0)==1){b=b;i=i;j=0;k=e;continue a}if(!((j|0)==2&(i|0)<(f|0))){b=b;i=i;j=j;k=e;continue a}o=g+(i<<4)+12|0;if((a[o]|0)==0){b=b;i=i;j=2;k=e;continue a}do{if((e|0)!=(c[g+(i<<4)+4>>2]|0)&n<<24>>24==32){p=a[k+5|0]|0;q=a[k+4|0]|0;if((p<<24>>24|0)==0){if(q<<24>>24==32){break}r=d[h+(q&255)|0]|0}else if((p<<24>>24|0)==(-1|0)){if(((q&255)-254|0)>>>0<2>>>0){r=0}else{b=b;i=i;j=2;k=e;continue a}}else{b=b;i=i;j=2;k=e;continue a}if((r|0)!=(b|0)){b=b;i=i;j=2;k=e;continue a}}}while(0);a[o]=0;b=b;i=i;j=2;k=e;continue a;break};case 3:{if((i|0)>=(f|0)){b=b;i=i;j=j;k=e;continue a}a[g+(i<<4)+12|0]=0;b=b;i=i;j=j;k=e;continue a;break};case 12:{if((j|0)!=2){if((i|0)>=(f|0)){b=12;i=i;j=2;k=e;continue a}c[g+(i<<4)+4>>2]=k+4;b=12;i=i;j=2;k=e;continue a}if((b|0)!=12){b=b;i=i;j=2;k=e;continue a}if((i|0)<(f|0)){c[g+(i<<4)+8>>2]=e}b=12;i=i+1|0;j=0;k=e;continue a;break};case 5:{if((j|0)!=0){b=b;i=i;j=j;k=e;continue a}if((i|0)>=(f|0)){b=b;i=i;j=1;k=e;continue a}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;b=b;i=i;j=1;k=e;continue a;break};case 11:case 17:{if((j|0)==2){b=b;i=i;j=2;k=e;continue a}else{break a}break};case 6:{if((j|0)!=0){b=b;i=i;j=j;k=l;continue a}if((i|0)>=(f|0)){b=b;i=i;j=1;k=l;continue a}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;b=b;i=i;j=1;k=l;continue a;break};case 29:case 22:case 24:{s=16;break b;break};case 9:case 10:{if((j|0)==1){b=b;i=i;j=0;k=e;continue a}if(!((j|0)==2&(i|0)<(f|0))){b=b;i=i;j=j;k=e;continue a}a[g+(i<<4)+12|0]=0;b=b;i=i;j=2;k=e;continue a;break};case 13:{if((j|0)!=2){if((i|0)>=(f|0)){b=13;i=i;j=2;k=e;continue a}c[g+(i<<4)+4>>2]=k+4;b=13;i=i;j=2;k=e;continue a}if((b|0)!=13){b=b;i=i;j=2;k=e;continue a}if((i|0)<(f|0)){c[g+(i<<4)+8>>2]=e}b=13;i=i+1|0;j=0;k=e;continue a;break};case 7:{s=12;break b;break};default:{b=b;i=i;j=j;k=e;continue a}}}else{switch(m&255|0){case 255:{break};case 220:case 221:case 222:case 223:{b=b;i=i;j=j;k=e;continue a;break};case 216:case 217:case 218:case 219:{s=12;break b;break};default:{s=16;break b}}if(!(((n&255)-254|0)>>>0>1>>>0&(j|0)==0)){b=b;i=i;j=j;k=e;continue a}}}while(0);if((s|0)==12){s=0;do{if((j|0)==0){if((i|0)>=(f|0)){t=1;break}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;t=1}else{t=j}}while(0);b=b;i=i;j=t;k=k+4|0;continue}else if((s|0)==16){s=0;if((j|0)!=0){b=b;i=i;j=j;k=e;continue}}if((i|0)>=(f|0)){b=b;i=i;j=1;k=e;continue}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;b=b;i=i;j=1;k=e}return i|0}function of(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;b=c+4|0;a:do{if((a[c+5|0]|0)==0){if((a[b]|0)!=120){d=b;e=0;f=11;break}g=c+6|0;h=0;while(1){b:do{if((a[g+1|0]|0)==0){i=a[g]|0;if(i<<24>>24==59){j=h;break a}k=i<<24>>24;switch(k|0){case 65:case 66:case 67:case 68:case 69:case 70:{l=(h<<4)-55+k|0;break b;break};case 97:case 98:case 99:case 100:case 101:case 102:{l=(h<<4)-87+k|0;break b;break};case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{l=k-48|h<<4;break b;break};default:{l=h;break b}}}else{l=h}}while(0);if((l|0)>1114111){m=-1;break}else{g=g+2|0;h=l}}return m|0}else{d=b;e=0;f=11}}while(0);c:do{if((f|0)==11){while(1){f=0;if((a[d+1|0]|0)==0){b=a[d]|0;if(b<<24>>24==59){j=e;break c}n=(b<<24>>24)-48|0}else{n=-49}b=n+(e*10|0)|0;if((b|0)>1114111){m=-1;break}else{d=d+2|0;e=b;f=11}}return m|0}}while(0);d:do{switch(j>>8|0){case 0:{if((a[20496+j|0]|0)==0){m=-1}else{break d}return m|0};case 216:case 217:case 218:case 219:case 220:case 221:case 222:case 223:{m=-1;return m|0};case 255:{if((j&-2|0)==65534){m=-1}else{break d}return m|0};default:{}}}while(0);m=j;return m|0}function pf(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;b=(d-c|0)/2|0;do{if((b|0)==2){if((a[c+3|0]|0)!=0){break}if((a[c+2|0]|0)!=116){break}if((a[c+1|0]|0)!=0){break}d=a[c]|0;if((d|0)==108){e=60;return e|0}else if((d|0)!=103){break}e=62;return e|0}else if((b|0)==3){if((a[c+1|0]|0)!=0){break}if((a[c]|0)!=97){break}if((a[c+3|0]|0)!=0){break}if((a[c+2|0]|0)!=109){break}if((a[c+5|0]|0)!=0){break}if((a[c+4|0]|0)==112){e=38}else{break}return e|0}else if((b|0)==4){if((a[c+1|0]|0)!=0){break}d=a[c]|0;if((d|0)==113){if((a[c+3|0]|0)!=0){break}if((a[c+2|0]|0)!=117){break}if((a[c+5|0]|0)!=0){break}if((a[c+4|0]|0)!=111){break}if((a[c+7|0]|0)!=0){break}if((a[c+6|0]|0)==116){e=34}else{break}return e|0}else if((d|0)==97){if((a[c+3|0]|0)!=0){break}if((a[c+2|0]|0)!=112){break}if((a[c+5|0]|0)!=0){break}if((a[c+4|0]|0)!=111){break}if((a[c+7|0]|0)!=0){break}if((a[c+6|0]|0)==115){e=39}else{break}return e|0}else{break}}}while(0);e=0;return e|0}function qf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(e>>>0>=f>>>0){return}h=b+72|0;b=g+4|0;i=g|0;g=e;while(1){e=a[g+1|0]|0;a:do{if(e<<24>>24==0){switch(d[h+(d[g]|0)|0]|0){case 6:{j=g+3|0;break a;break};case 9:{c[i>>2]=(c[i>>2]|0)+1;k=g+2|0;if((k|0)==(f|0)){l=f}else{if((a[g+3|0]|0)==0){m=(a[h+(d[k]|0)|0]|0)==10}else{m=0}l=m?g+4|0:k}c[b>>2]=-1;j=l;break a;break};case 5:{j=g+2|0;break a;break};case 7:{n=8;break a;break};case 10:{c[b>>2]=-1;c[i>>2]=(c[i>>2]|0)+1;j=g+2|0;break a;break};default:{n=15;break a}}}else{if(((e&255)-216|0)>>>0<4>>>0){n=8}else{n=15}}}while(0);if((n|0)==8){n=0;j=g+4|0}else if((n|0)==15){n=0;j=g+2|0}c[b>>2]=(c[b>>2]|0)+1;if(j>>>0<f>>>0){g=j}else{break}}return}function rf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;h=f-2|0;f=e+2|0;if((f|0)==(h|0)){i=1;return i|0}j=b+72|0;b=e;e=f;a:while(1){f=(a[b+3|0]|0)==0;if(!f){k=11;break}l=a[e]|0;b:do{switch(d[j+(l&255)|0]|0){case 21:{if(l<<24>>24==9){k=7;break a}break};case 26:case 22:{if(l<<24>>24>=0){break b}if(f){k=10}else{k=11;break a}break};case 25:case 24:case 27:case 13:case 31:case 32:case 34:case 35:case 17:case 14:case 15:case 9:case 10:case 18:case 16:case 33:case 30:case 19:{break};default:{k=10}}}while(0);if((k|0)==10){k=0;f=a[e]|0;if(!((f|0)==36|(f|0)==64)){k=11;break}}f=e+2|0;if((f|0)==(h|0)){i=1;k=12;break}else{b=e;e=f}}if((k|0)==7){c[g>>2]=e;i=0;return i|0}else if((k|0)==11){c[g>>2]=e;i=0;return i|0}else if((k|0)==12){return i|0}return 0}function sf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=c[d>>2]|0;a:do{if((b|0)!=(e|0)){h=g;i=b;b:while(1){j=a[i]|0;k=a[i+1|0]|0;l=k&255;c:do{switch(l|0){case 0:{if(j<<24>>24<=-1){m=8;break c}n=c[f>>2]|0;if((n|0)==(g|0)){m=6;break b}c[f>>2]=n+1;a[n]=j;o=i;break};case 1:case 2:case 3:case 4:case 5:case 6:case 7:{m=8;break};case 216:case 217:case 218:case 219:{n=c[f>>2]|0;if((h-n|0)<4){m=15;break b}p=j&255;q=(l<<2&12|p>>>6)+1|0;c[f>>2]=n+1;a[n]=q>>>2|240;n=c[f>>2]|0;c[f>>2]=n+1;a[n]=p>>>2&15|q<<4&48|128;q=i+2|0;p=a[q]|0;n=j<<4&48|(p&255)>>>6|a[i+3|0]<<2&12|-128;r=c[f>>2]|0;c[f>>2]=r+1;a[r]=n;n=c[f>>2]|0;c[f>>2]=n+1;a[n]=p&63|-128;o=q;break};default:{q=c[f>>2]|0;if((h-q|0)<3){m=12;break b}c[f>>2]=q+1;a[q]=(k&255)>>>4|-32;q=c[f>>2]|0;c[f>>2]=q+1;a[q]=(j&255)>>>6|k<<2&60|-128;q=c[f>>2]|0;c[f>>2]=q+1;a[q]=j&63|-128;o=i}}}while(0);if((m|0)==8){m=0;l=c[f>>2]|0;if((h-l|0)<2){m=9;break}c[f>>2]=l+1;a[l]=(j&255)>>>6|k<<2|-64;l=c[f>>2]|0;c[f>>2]=l+1;a[l]=j&63|-128;o=i}l=o+2|0;if((l|0)==(e|0)){break a}else{i=l}}if((m|0)==6){c[d>>2]=i;return}else if((m|0)==9){c[d>>2]=i;return}else if((m|0)==12){c[d>>2]=i;return}else if((m|0)==15){c[d>>2]=i;return}}}while(0);c[d>>2]=e;return}function tf(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;e=c[f>>2]|0;j=c[h>>2]|0;if((g-e|0)>(i-j|0)){k=(a[g-1|0]&-8)<<24>>24==-40?g-2|0:g}else{k=g}if((e|0)==(k|0)){return}else{l=e;m=j}while(1){if((m|0)==(i|0)){n=7;break}j=(d[l+1|0]|0)<<8|(d[l]|0);c[h>>2]=m+2;b[m>>1]=j;j=(c[f>>2]|0)+2|0;c[f>>2]=j;if((j|0)==(k|0)){n=7;break}l=j;m=c[h>>2]|0}if((n|0)==7){return}}function uf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if((e|0)==(f|0)){h=-1;return h|0}i=a[e+1|0]|0;j=a[e]|0;a:do{if(i<<24>>24==0){k=j&255;l=b+72|0;switch(d[l+k|0]|0){case 6:{if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 29:{m=0;n=k;o=9;break a;break};case 7:{o=15;break a;break};case 19:{k=e+2|0;if((k|0)==(f|0)){h=-1;return h|0}do{if((a[e+3|0]|0)==0){p=a[k]|0;if(p<<24>>24!=120){if((a[l+(p&255)|0]|0)==25){q=k}else{break}while(1){r=q+2|0;if((r|0)==(f|0)){h=-1;o=54;break}if((a[q+3|0]|0)!=0){o=36;break}p=d[l+(d[r]|0)|0]|0;if((p|0)==25){q=r}else if((p|0)==18){o=35;break}else{o=36;break}}if((o|0)==35){c[g>>2]=q+4;h=10;return h|0}else if((o|0)==36){c[g>>2]=r;h=0;return h|0}else if((o|0)==54){return h|0}}p=e+4|0;if((p|0)==(f|0)){h=-1;return h|0}do{if((a[e+5|0]|0)==0){if(((d[l+(d[p]|0)|0]|0)-24|0)>>>0>=2>>>0){break}s=e+6|0;if((s|0)==(f|0)){h=-1;return h|0}else{t=p;u=s}while(1){if((a[t+3|0]|0)!=0){o=29;break}s=d[l+(d[u]|0)|0]|0;if((s|0)==18){o=28;break}else if(!((s|0)==25|(s|0)==24)){o=29;break}s=u+2|0;if((s|0)==(f|0)){h=-1;o=54;break}else{t=u;u=s}}if((o|0)==28){c[g>>2]=t+4;h=10;return h|0}else if((o|0)==29){c[g>>2]=u;h=0;return h|0}else if((o|0)==54){return h|0}}}while(0);c[g>>2]=p;h=0;return h|0}}while(0);c[g>>2]=k;h=0;return h|0};case 5:{if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 22:case 24:{break a;break};default:{o=37;break a}}}else{l=i&255;switch(l|0){case 220:case 221:case 222:case 223:{o=37;break a;break};case 216:case 217:case 218:case 219:{o=15;break a;break};case 255:{s=j&255;if((s-254|0)>>>0<2>>>0){o=37;break a}else{m=255;n=s;o=9;break a}break};default:{m=l;n=j&255;o=9;break a}}}}while(0);do{if((o|0)==9){if((1<<(n&31)&c[18232+((n>>>5|d[17968+m|0]<<3)<<2)>>2]|0)!=0){break}c[g>>2]=e;h=0;return h|0}else if((o|0)==15){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((o|0)==37){c[g>>2]=e;h=0;return h|0}}while(0);m=e+2|0;if((m|0)==(f|0)){h=-1;return h|0}n=b+72|0;b=e;e=m;b:while(1){m=a[b+3|0]|0;j=a[e]|0;c:do{if(m<<24>>24==0){i=j&255;switch(d[n+i|0]|0){case 5:{o=46;break b;break};case 7:{o=50;break b;break};case 18:{o=52;break b;break};case 29:{v=0;w=i;o=43;break};case 22:case 24:case 25:case 26:case 27:{break};case 6:{o=48;break b;break};default:{o=53;break b}}}else{i=m&255;switch(i|0){case 255:{u=j&255;if((u-254|0)>>>0<2>>>0){o=53;break b}else{v=255;w=u;o=43;break c}break};case 216:case 217:case 218:case 219:{o=50;break b;break};case 220:case 221:case 222:case 223:{o=53;break b;break};default:{v=i;w=j&255;o=43;break c}}}}while(0);if((o|0)==43){o=0;if((1<<(w&31)&c[18232+((w>>>5|d[19512+v|0]<<3)<<2)>>2]|0)==0){o=45;break}}j=e+2|0;if((j|0)==(f|0)){h=-1;o=54;break}else{b=e;e=j}}if((o|0)==45){c[g>>2]=e;h=0;return h|0}else if((o|0)==46){if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((o|0)==48){if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((o|0)==50){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((o|0)==52){c[g>>2]=b+4;h=9;return h|0}else if((o|0)==53){c[g>>2]=e;h=0;return h|0}else if((o|0)==54){return h|0}return 0}function vf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)==(f|0)){h=-1;return h|0}i=a[e+1|0]|0;j=a[e]|0;a:do{if(i<<24>>24==0){k=j&255;switch(d[b+72+k|0]|0|0){case 22:case 24:{break a;break};case 21:case 10:case 9:case 30:{c[g>>2]=e;h=22;return h|0};case 5:{if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 7:{l=15;break a;break};case 29:{m=0;n=k;l=9;break a;break};case 6:{if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};default:{l=18;break a}}}else{k=i&255;switch(k|0){case 220:case 221:case 222:case 223:{l=18;break a;break};case 216:case 217:case 218:case 219:{l=15;break a;break};case 255:{o=j&255;if((o-254|0)>>>0<2>>>0){l=18;break a}else{m=255;n=o;l=9;break a}break};default:{m=k;n=j&255;l=9;break a}}}}while(0);do{if((l|0)==9){if((1<<(n&31)&c[18232+((n>>>5|(d[17968+m|0]|0)<<3)<<2)>>2]|0)!=0){break}c[g>>2]=e;h=0;return h|0}else if((l|0)==15){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((l|0)==18){c[g>>2]=e;h=0;return h|0}}while(0);m=e+2|0;if((m|0)==(f|0)){h=-1;return h|0}n=b+72|0;b=e;e=m;b:while(1){m=a[b+3|0]|0;j=a[e]|0;c:do{if(m<<24>>24==0){i=j&255;switch(d[n+i|0]|0|0){case 7:{l=31;break b;break};case 29:{p=0;q=i;l=24;break};case 22:case 24:case 25:case 26:case 27:{break};case 5:{l=27;break b;break};case 6:{l=29;break b;break};case 18:{l=33;break b;break};default:{l=34;break b}}}else{i=m&255;switch(i|0){case 216:case 217:case 218:case 219:{l=31;break b;break};case 255:{k=j&255;if((k-254|0)>>>0<2>>>0){l=34;break b}else{p=255;q=k;l=24;break c}break};case 220:case 221:case 222:case 223:{l=34;break b;break};default:{p=i;q=j&255;l=24;break c}}}}while(0);if((l|0)==24){l=0;if((1<<(q&31)&c[18232+((q>>>5|(d[19512+p|0]|0)<<3)<<2)>>2]|0)==0){l=26;break}}j=e+2|0;if((j|0)==(f|0)){h=-1;l=35;break}else{b=e;e=j}}if((l|0)==26){c[g>>2]=e;h=0;return h|0}else if((l|0)==27){if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((l|0)==29){if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((l|0)==31){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((l|0)==33){c[g>>2]=b+4;h=28;return h|0}else if((l|0)==34){c[g>>2]=e;h=0;return h|0}else if((l|0)==35){return h|0}return 0}function wf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((e|0)==(f|0)){h=-1;return h|0}do{if((a[e+1|0]|0)==0){if((a[e]|0)!=45){break}i=e+2|0;if((i|0)==(f|0)){h=-1;return h|0}j=b+72|0;k=f;l=i;a:while(1){i=a[l+1|0]|0;m=a[l]|0;b:do{if(i<<24>>24==0){switch(d[j+(m&255)|0]|0){case 7:{n=15;break b;break};case 5:{if((k-l|0)<2){h=-2;n=28;break a}o=l+2|0;break b;break};case 0:case 1:case 8:{n=17;break a;break};case 6:{if((k-l|0)<3){h=-2;n=28;break a}o=l+3|0;break b;break};case 27:{p=l+2|0;if((p|0)==(f|0)){h=-1;n=28;break a}if((a[l+3|0]|0)!=0){o=p;break b}if((a[p]|0)==45){n=22;break a}else{o=p;break b}break};default:{n=27;break b}}}else{switch(i&255|0){case 216:case 217:case 218:case 219:{n=15;break b;break};case 220:case 221:case 222:case 223:{n=17;break a;break};case 255:{break};default:{n=27;break b}}if(((m&255)-254|0)>>>0<2>>>0){n=17;break a}else{n=27}}}while(0);if((n|0)==15){n=0;if((k-l|0)<4){h=-2;n=28;break}o=l+4|0}else if((n|0)==27){n=0;o=l+2|0}if((o|0)==(f|0)){h=-1;n=28;break}else{l=o}}if((n|0)==17){c[g>>2]=l;h=0;return h|0}else if((n|0)==22){k=l+4|0;if((k|0)==(f|0)){h=-1;return h|0}do{if((a[l+5|0]|0)==0){if((a[k]|0)!=62){break}c[g>>2]=l+6;h=13;return h|0}}while(0);c[g>>2]=k;h=0;return h|0}else if((n|0)==28){return h|0}}}while(0);c[g>>2]=e;h=0;return h|0}
+
+
+
+function xf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if((e|0)==(f|0)){h=-1;return h|0}i=a[e+1|0]|0;j=i<<24>>24==0;k=a[e]|0;a:do{if(j){l=k&255;switch(d[b+72+l|0]|0){case 5:{if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 7:{m=15;break a;break};case 29:{n=0;o=l;m=9;break a;break};case 6:{if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 22:case 24:{break a;break};default:{m=17;break a}}}else{l=i&255;switch(l|0){case 216:case 217:case 218:case 219:{m=15;break a;break};case 220:case 221:case 222:case 223:{m=17;break a;break};case 255:{p=k&255;if((p-254|0)>>>0<2>>>0){m=17;break a}else{n=255;o=p;m=9;break a}break};default:{n=l;o=k&255;m=9;break a}}}}while(0);do{if((m|0)==9){if((1<<(o&31)&c[18232+((o>>>5|d[17968+n|0]<<3)<<2)>>2]|0)!=0){break}c[g>>2]=e;h=0;return h|0}else if((m|0)==15){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((m|0)==17){c[g>>2]=e;h=0;return h|0}}while(0);n=e+2|0;if((n|0)==(f|0)){h=-1;return h|0}o=b+72|0;b=e;i=n;b:while(1){l=a[b+3|0]|0;p=a[i]|0;c:do{if(l<<24>>24==0){q=p&255;switch(d[o+q|0]|0){case 21:case 9:case 10:{m=32;break b;break};case 15:{m=61;break b;break};case 22:case 24:case 25:case 26:case 27:{break};case 5:{m=26;break b;break};case 29:{r=0;s=q;m=23;break};case 7:{m=30;break b;break};case 6:{m=28;break b;break};default:{t=i;break b}}}else{q=l&255;switch(q|0){case 255:{u=p&255;if((u-254|0)>>>0<2>>>0){t=i;break b}else{r=255;s=u;m=23;break c}break};case 220:case 221:case 222:case 223:{t=i;break b;break};case 216:case 217:case 218:case 219:{m=30;break b;break};default:{r=q;s=p&255;m=23;break c}}}}while(0);if((m|0)==23){m=0;if((1<<(s&31)&c[18232+((s>>>5|d[19512+r|0]<<3)<<2)>>2]|0)==0){m=25;break}}p=i+2|0;if((p|0)==(f|0)){h=-1;m=76;break}else{b=i;i=p}}do{if((m|0)==25){c[g>>2]=i;h=0;return h|0}else if((m|0)==26){if((f-i|0)<2){h=-2;return h|0}c[g>>2]=i;h=0;return h|0}else if((m|0)==28){if((f-i|0)<3){h=-2;return h|0}c[g>>2]=i;h=0;return h|0}else if((m|0)==30){if((f-i|0)<4){h=-2;return h|0}c[g>>2]=i;h=0;return h|0}else if((m|0)==32){do{if((i-e|0)!=6|j^1){v=11}else{r=k<<24>>24;if((r|0)==120){w=0}else if((r|0)==88){w=1}else{v=11;break}if((a[e+3|0]|0)!=0){v=11;break}r=a[n]|0;if((r|0)==77){x=1}else if((r|0)==109){x=w}else{v=11;break}if((a[e+5|0]|0)!=0){v=11;break}r=a[e+4|0]|0;if((r|0)==108){if((x|0)==0){v=12;break}}else if((r|0)!=76){v=11;break}c[g>>2]=i;h=0;return h|0}}while(0);r=b+4|0;if((r|0)==(f|0)){h=-1;return h|0}s=f;p=r;d:while(1){r=a[p+1|0]|0;l=a[p]|0;e:do{if(r<<24>>24==0){switch(d[o+(l&255)|0]|0){case 15:{q=p+2|0;if((q|0)==(f|0)){h=-1;m=76;break d}if((a[p+3|0]|0)!=0){y=q;break e}if((a[q]|0)==62){m=59;break d}else{y=q;break e}break};case 5:{if((s-p|0)<2){h=-2;m=76;break d}y=p+2|0;break e;break};case 0:case 1:case 8:{m=54;break d;break};case 6:{if((s-p|0)<3){h=-2;m=76;break d}y=p+3|0;break e;break};case 7:{m=52;break e;break};default:{m=60;break e}}}else{switch(r&255|0){case 255:{break};case 220:case 221:case 222:case 223:{m=54;break d;break};case 216:case 217:case 218:case 219:{m=52;break e;break};default:{m=60;break e}}if(((l&255)-254|0)>>>0<2>>>0){m=54;break d}else{m=60}}}while(0);if((m|0)==52){m=0;if((s-p|0)<4){h=-2;m=76;break}y=p+4|0}else if((m|0)==60){m=0;y=p+2|0}if((y|0)==(f|0)){h=-1;m=76;break}else{p=y}}if((m|0)==54){c[g>>2]=p;h=0;return h|0}else if((m|0)==59){c[g>>2]=p+4;h=v;return h|0}else if((m|0)==76){return h|0}}else if((m|0)==61){do{if((i-e|0)!=6|j^1){z=11}else{s=k<<24>>24;if((s|0)==88){A=1}else if((s|0)==120){A=0}else{z=11;break}if((a[e+3|0]|0)!=0){z=11;break}s=a[n]|0;if((s|0)==77){B=1}else if((s|0)==109){B=A}else{z=11;break}if((a[e+5|0]|0)!=0){z=11;break}s=a[e+4|0]|0;if((s|0)==108){if((B|0)==0){z=12;break}}else if((s|0)!=76){z=11;break}c[g>>2]=i;h=0;return h|0}}while(0);p=b+4|0;if((p|0)==(f|0)){h=-1;return h|0}if((a[b+5|0]|0)!=0){t=p;break}if((a[p]|0)!=62){t=p;break}c[g>>2]=b+6;h=z;return h|0}else if((m|0)==76){return h|0}}while(0);c[g>>2]=t;h=0;return h|0}function yf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;if((e|0)==(f|0)){h=-4;return h|0}i=e;j=f-i|0;do{if((j&1|0)==0){k=f}else{l=j&-2;if((l|0)==0){h=-1;return h|0}else{k=e+l|0;break}}}while(0);j=a[e]|0;f=a[e+1|0]|0;a:do{if(j<<24>>24==0){l=f&255;m=b+72|0;b:do{switch(d[m+l|0]|0){case 5:{if((k-i|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 6:{if((k-i|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 9:{if((e+2|0)!=(k|0)){break b}c[g>>2]=k;h=-15;return h|0};case 13:{n=e+2|0;if((n|0)==(k|0)){h=-1;return h|0}o=k;p=n;c:while(1){n=a[p]|0;q=a[p+1|0]|0;d:do{if(n<<24>>24==0){r=a[m+(q&255)|0]|0;switch(r&255|0){case 0:case 1:case 8:{s=43;break c;break};case 7:{s=41;break d;break};case 12:case 13:{t=p+2|0;if(r<<24>>24==13){s=45;break c}else{u=t;break d}break};case 5:{if((o-p|0)<2){h=-2;s=175;break c}u=p+2|0;break d;break};case 6:{if((o-p|0)<3){h=-2;s=175;break c}u=p+3|0;break d;break};default:{s=49;break d}}}else{switch(n&255|0){case 220:case 221:case 222:case 223:{s=43;break c;break};case 216:case 217:case 218:case 219:{s=41;break d;break};case 255:{break};default:{s=49;break d}}if(((q&255)-254|0)>>>0<2>>>0){s=43;break c}else{s=49}}}while(0);if((s|0)==41){s=0;if((o-p|0)<4){h=-2;s=175;break}u=p+4|0}else if((s|0)==49){s=0;u=p+2|0}if((u|0)==(k|0)){h=-1;s=175;break}else{p=u}}if((s|0)==43){c[g>>2]=p;h=0;return h|0}else if((s|0)==45){if((t|0)==(k|0)){h=-27;return h|0}c[g>>2]=t;e:do{if((a[t]|0)==0){switch(d[m+(d[p+3|0]|0)|0]|0){case 21:case 9:case 10:case 11:case 30:case 20:{h=27;break};default:{break e}}return h|0}}while(0);h=0;return h|0}else if((s|0)==175){return h|0}break};case 30:{h=Pf(b,e+2|0,k,g)|0;return h|0};case 12:{p=e+2|0;if((p|0)==(k|0)){h=-1;return h|0}o=k;q=p;f:while(1){p=a[q]|0;n=a[q+1|0]|0;g:do{if(p<<24>>24==0){r=a[m+(n&255)|0]|0;switch(r&255|0){case 5:{if((o-q|0)<2){h=-2;s=175;break f}v=q+2|0;break g;break};case 6:{if((o-q|0)<3){h=-2;s=175;break f}v=q+3|0;break g;break};case 12:case 13:{w=q+2|0;if(r<<24>>24==12){s=25;break f}else{v=w;break g}break};case 7:{s=21;break g;break};case 0:case 1:case 8:{s=23;break f;break};default:{s=29;break g}}}else{switch(p&255|0){case 255:{break};case 216:case 217:case 218:case 219:{s=21;break g;break};case 220:case 221:case 222:case 223:{s=23;break f;break};default:{s=29;break g}}if(((n&255)-254|0)>>>0<2>>>0){s=23;break f}else{s=29}}}while(0);if((s|0)==21){s=0;if((o-q|0)<4){h=-2;s=175;break}v=q+4|0}else if((s|0)==29){s=0;v=q+2|0}if((v|0)==(k|0)){h=-1;s=175;break}else{q=v}}if((s|0)==23){c[g>>2]=q;h=0;return h|0}else if((s|0)==25){if((w|0)==(k|0)){h=-27;return h|0}c[g>>2]=w;h:do{if((a[w]|0)==0){switch(d[m+(d[q+3|0]|0)|0]|0){case 21:case 9:case 10:case 11:case 30:case 20:{h=27;break};default:{break h}}return h|0}}while(0);h=0;return h|0}else if((s|0)==175){return h|0}break};case 7:{s=141;break a;break};case 25:case 26:case 27:{x=19;break a;break};case 29:{y=0;z=l;s=144;break a;break};case 22:case 24:{x=18;break a;break};case 31:{c[g>>2]=e+2;h=23;return h|0};case 2:{q=e+2|0;if((q|0)==(k|0)){h=-1;return h|0}o=a[q]|0;n=a[e+3|0]|0;i:do{if(o<<24>>24==0){switch(d[m+(n&255)|0]|0){case 22:case 24:case 29:case 5:case 6:case 7:{s=73;break i;break};case 16:{break};case 15:{h=Rf(b,e+4|0,k,g)|0;return h|0};default:{s=74;break i}}p=e+4|0;if((p|0)==(k|0)){h=-1;return h|0}do{if((a[p]|0)==0){r=d[m+(d[e+5|0]|0)|0]|0;if((r|0)==20){c[g>>2]=e+6;h=33;return h|0}else if((r|0)==27){h=Qf(b,e+6|0,k,g)|0;return h|0}else if((r|0)==22|(r|0)==24){r=e+6|0;if((r|0)==(k|0)){h=-1;return h|0}else{A=p;B=r}j:while(1){if((a[B]|0)!=0){s=71;break}switch(d[m+(d[A+3|0]|0)|0]|0){case 30:{s=66;break j;break};case 21:case 9:case 10:{break j;break};case 22:case 24:{break};default:{s=71;break j}}r=B+2|0;if((r|0)==(k|0)){h=-1;s=175;break}else{A=B;B=r}}do{if((s|0)==66){r=A+4|0;if((r|0)==(k|0)){h=-1;return h|0}if((a[r]|0)!=0){break}r=d[m+(d[A+5|0]|0)|0]|0;if(!((r|0)==21|(r|0)==9|(r|0)==10|(r|0)==30)){break}c[g>>2]=B;h=0;return h|0}else if((s|0)==71){c[g>>2]=B;h=0;return h|0}else if((s|0)==175){return h|0}}while(0);c[g>>2]=B;h=16;return h|0}else{break}}}while(0);c[g>>2]=p;h=0;return h|0}else{switch(o&255|0){case 223:case 222:case 221:case 220:{s=74;break i;break};case 255:{break};default:{s=73;break i}}if(((n&255)-254|0)>>>0<2>>>0){s=74}else{s=73}}}while(0);if((s|0)==73){c[g>>2]=e;h=29;return h|0}else if((s|0)==74){c[g>>2]=q;h=0;return h|0}break};case 19:{n=e+2|0;if((n|0)==(k|0)){h=-1;return h|0}o=a[n]|0;r=a[e+3|0]|0;k:do{if(o<<24>>24==0){C=r&255;switch(d[m+C|0]|0){case 22:case 24:{break k;break};case 6:{if((k-n|0)<3){h=-2;return h|0}c[g>>2]=n;h=0;return h|0};case 29:{D=0;E=C;s=112;break k;break};case 5:{if((k-n|0)<2){h=-2;return h|0}c[g>>2]=n;h=0;return h|0};case 7:{s=118;break k;break};default:{s=120;break k}}}else{C=o&255;switch(C|0){case 216:case 217:case 218:case 219:{s=118;break k;break};case 255:{F=r&255;if((F-254|0)>>>0<2>>>0){s=120;break k}else{D=255;E=F;s=112;break k}break};case 220:case 221:case 222:case 223:{s=120;break k;break};default:{D=C;E=r&255;s=112;break k}}}}while(0);do{if((s|0)==112){if((c[18232+((d[17968+D|0]<<3|E>>>5)<<2)>>2]&1<<(E&31)|0)!=0){break}c[g>>2]=n;h=0;return h|0}else if((s|0)==118){if((k-n|0)<4){h=-2;return h|0}c[g>>2]=n;h=0;return h|0}else if((s|0)==120){c[g>>2]=n;h=0;return h|0}}while(0);r=e+4|0;if((r|0)==(k|0)){h=-20;return h|0}else{G=n;H=r}l:while(1){r=a[H]|0;o=a[G+3|0]|0;m:do{if(r<<24>>24==0){q=o&255;switch(d[m+q|0]|0){case 29:{I=0;J=q;s=126;break};case 22:case 24:case 25:case 26:case 27:{break};case 7:{s=133;break l;break};case 5:{s=129;break l;break};case 9:case 10:case 21:case 32:case 11:case 30:case 36:{s=135;break l;break};case 6:{s=131;break l;break};default:{s=136;break l}}}else{q=r&255;switch(q|0){case 216:case 217:case 218:case 219:{s=133;break l;break};case 220:case 221:case 222:case 223:{s=136;break l;break};case 255:{C=o&255;if((C-254|0)>>>0<2>>>0){s=136;break l}else{I=255;J=C;s=126;break m}break};default:{I=q;J=o&255;s=126;break m}}}}while(0);if((s|0)==126){s=0;if((c[18232+((d[19512+I|0]<<3|J>>>5)<<2)>>2]&1<<(J&31)|0)==0){s=128;break}}o=H+2|0;if((o|0)==(k|0)){h=-20;s=175;break}else{G=H;H=o}}if((s|0)==128){c[g>>2]=H;h=0;return h|0}else if((s|0)==129){if((k-H|0)<2){h=-2;return h|0}c[g>>2]=H;h=0;return h|0}else if((s|0)==131){if((k-H|0)<3){h=-2;return h|0}c[g>>2]=H;h=0;return h|0}else if((s|0)==133){if((k-H|0)<4){h=-2;return h|0}c[g>>2]=H;h=0;return h|0}else if((s|0)==135){c[g>>2]=H;h=20;return h|0}else if((s|0)==136){c[g>>2]=H;h=0;return h|0}else if((s|0)==175){return h|0}break};case 35:{c[g>>2]=e+2;h=38;return h|0};case 20:{c[g>>2]=e+2;h=25;return h|0};case 32:{n=e+2|0;if((n|0)==(k|0)){h=-24;return h|0}n:do{if((a[n]|0)==0){switch(d[m+(d[e+3|0]|0)|0]|0){case 34:{c[g>>2]=e+4;h=37;return h|0};case 9:case 10:case 21:case 11:case 35:case 36:case 32:{c[g>>2]=n;h=24;return h|0};case 33:{c[g>>2]=e+4;h=36;return h|0};case 15:{c[g>>2]=e+4;h=35;return h|0};default:{break n}}}}while(0);c[g>>2]=n;h=0;return h|0};case 4:{o=e+2|0;if((o|0)==(k|0)){h=-26;return h|0}do{if((a[o]|0)==0){if((a[e+3|0]|0)!=93){break}r=e+4|0;if((r|0)==(k|0)){h=-1;return h|0}if((a[r]|0)!=0){break}if((a[e+5|0]|0)!=62){break}c[g>>2]=e+6;h=34;return h|0}}while(0);c[g>>2]=o;h=26;return h|0};case 21:case 10:{break};case 36:{c[g>>2]=e+2;h=21;return h|0};case 11:{c[g>>2]=e+2;h=17;return h|0};default:{s=148;break a}}}while(0);l=e+2|0;o:do{if((l|0)!=(k|0)){n=e;r=l;while(1){if((a[r]|0)!=0){break}p=d[m+(d[n+3|0]|0)|0]|0;if((p|0)==9){if((n+4|0)==(k|0)){break}}else if(!((p|0)==21|(p|0)==10)){break}p=r+2|0;if((p|0)==(k|0)){break o}else{n=r;r=p}}c[g>>2]=r;h=15;return h|0}}while(0);c[g>>2]=k;h=15;return h|0}else{m=j&255;switch(m|0){case 220:case 221:case 222:case 223:{s=148;break a;break};case 216:case 217:case 218:case 219:{s=141;break a;break};case 255:{l=f&255;if((l-254|0)>>>0<2>>>0){s=148;break a}else{y=255;z=l;s=144;break a}break};default:{y=m;z=f&255;s=144;break a}}}}while(0);do{if((s|0)==141){if((k-i|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((s|0)==144){f=z>>>5;j=1<<(z&31);if((j&c[18232+((f|d[17968+y|0]<<3)<<2)>>2]|0)!=0){x=18;break}if((c[18232+((d[19512+y|0]<<3|f)<<2)>>2]&j|0)==0){s=148}else{x=19}}}while(0);if((s|0)==148){c[g>>2]=e;h=0;return h|0}y=e+2|0;p:do{if((y|0)!=(k|0)){z=b+72|0;i=e;j=y;q:while(1){f=a[j]|0;H=a[i+3|0]|0;r:do{if(f<<24>>24==0){G=H&255;switch(d[z+G|0]|0){case 5:{s=157;break q;break};case 34:{s=164;break q;break};case 33:{s=167;break q;break};case 6:{s=159;break q;break};case 7:{s=161;break q;break};case 11:case 32:case 35:case 36:case 20:case 30:case 21:case 9:case 10:{s=163;break q;break};case 29:{K=0;L=G;s=154;break};case 22:case 24:case 25:case 26:case 27:{break};case 15:{s=170;break q;break};default:{s=173;break q}}}else{G=f&255;switch(G|0){case 216:case 217:case 218:case 219:{s=161;break q;break};case 255:{J=H&255;if((J-254|0)>>>0<2>>>0){s=173;break q}else{K=255;L=J;s=154;break r}break};case 220:case 221:case 222:case 223:{s=173;break q;break};default:{K=G;L=H&255;s=154;break r}}}}while(0);if((s|0)==154){s=0;if((1<<(L&31)&c[18232+((L>>>5|d[19512+K|0]<<3)<<2)>>2]|0)==0){s=156;break}}H=j+2|0;if((H|0)==(k|0)){break p}else{i=j;j=H}}if((s|0)==156){c[g>>2]=j;h=0;return h|0}else if((s|0)==157){if((k-j|0)<2){h=-2;return h|0}c[g>>2]=j;h=0;return h|0}else if((s|0)==159){if((k-j|0)<3){h=-2;return h|0}c[g>>2]=j;h=0;return h|0}else if((s|0)==161){if((k-j|0)<4){h=-2;return h|0}c[g>>2]=j;h=0;return h|0}else if((s|0)==163){c[g>>2]=j;h=x;return h|0}else if((s|0)==164){if((x|0)==19){c[g>>2]=j;h=0;return h|0}else{c[g>>2]=i+4;h=32;return h|0}}else if((s|0)==167){if((x|0)==19){c[g>>2]=j;h=0;return h|0}else{c[g>>2]=i+4;h=31;return h|0}}else if((s|0)==170){if((x|0)==19){c[g>>2]=j;h=0;return h|0}else{c[g>>2]=i+4;h=30;return h|0}}else if((s|0)==173){c[g>>2]=j;h=0;return h|0}}}while(0);h=-x|0;return h|0}function zf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0;h=i;i=i+8|0;j=h|0;a:do{if((e|0)==(f|0)){k=-4}else{l=e;m=f-l|0;if((m&1|0)==0){n=f}else{o=m&-2;if((o|0)==0){k=-1;break}n=e+o|0}o=a[e]|0;m=a[e+1|0]|0;b:do{if(o<<24>>24==0){p=b+72|0;switch(d[p+(m&255)|0]|0){case 0:case 1:case 8:{q=207;break b;break};case 5:{if((n-l|0)<2){k=-2;break a}r=e+2|0;break b;break};case 10:{c[g>>2]=e+2;k=7;break a;break};case 4:{s=e+2|0;if((s|0)==(n|0)){k=-5;break a}if((a[s]|0)!=0){r=s;break b}if((a[e+3|0]|0)!=93){r=s;break b}t=e+4|0;if((t|0)==(n|0)){k=-5;break a}if((a[t]|0)!=0){r=s;break b}if((a[e+5|0]|0)!=62){r=s;break b}c[g>>2]=t;k=0;break a;break};case 3:{k=Of(b,e+2|0,n,g)|0;break a;break};case 2:{t=e+2|0;if((t|0)==(n|0)){k=-1;break a}s=a[t]|0;u=a[e+3|0]|0;c:do{if(s<<24>>24==0){v=u&255;switch(d[p+v|0]|0){case 16:{w=e+4|0;if((w|0)==(n|0)){k=-1;break a}do{if((a[w]|0)==0){x=d[p+(d[e+5|0]|0)|0]|0;if((x|0)==27){k=Qf(b,e+6|0,n,g)|0;break a}else if((x|0)!=20){break}x=e+6|0;if((n-x|0)<12){k=-1;break a}else{y=x;z=0}while(1){if((a[y]|0)!=0){q=31;break}if((a[y+1|0]|0)!=(a[17816+z|0]|0)){q=31;break}x=z+1|0;A=y+2|0;if((x|0)<6){y=A;z=x}else{q=33;break}}if((q|0)==31){c[g>>2]=y;k=0;break a}else if((q|0)==33){c[g>>2]=A;k=8;break a}}}while(0);c[g>>2]=w;k=0;break a;break};case 7:{q=22;break c;break};case 15:{k=Rf(b,e+4|0,n,g)|0;break a;break};case 17:{x=e+4|0;if((x|0)==(n|0)){k=-1;break a}B=a[x]|0;C=a[e+5|0]|0;d:do{if(B<<24>>24==0){D=C&255;switch(d[p+D|0]|0){case 22:case 24:{break d;break};case 29:{E=0;F=D;q=43;break d;break};case 5:{if((n-x|0)<2){k=-2;break a}c[g>>2]=x;k=0;break a;break};case 6:{if((n-x|0)<3){k=-2;break a}c[g>>2]=x;k=0;break a;break};case 7:{q=49;break d;break};default:{q=51;break d}}}else{D=B&255;switch(D|0){case 255:{G=C&255;if((G-254|0)>>>0<2>>>0){q=51;break d}else{E=255;F=G;q=43;break d}break};case 216:case 217:case 218:case 219:{q=49;break d;break};case 220:case 221:case 222:case 223:{q=51;break d;break};default:{E=D;F=C&255;q=43;break d}}}}while(0);do{if((q|0)==43){if((c[18232+((d[17968+E|0]<<3|F>>>5)<<2)>>2]&1<<(F&31)|0)!=0){break}c[g>>2]=x;k=0;break a}else if((q|0)==49){if((n-x|0)<4){k=-2;break a}c[g>>2]=x;k=0;break a}else if((q|0)==51){c[g>>2]=x;k=0;break a}}while(0);C=e+6|0;if((C|0)==(n|0)){k=-1;break a}else{H=x;I=C}e:while(1){C=a[I]|0;B=a[H+3|0]|0;f:do{if(C<<24>>24==0){w=B&255;switch(d[p+w|0]|0){case 7:{q=64;break e;break};case 11:{q=72;break e;break};case 29:{J=0;K=w;q=57;break};case 22:case 24:case 25:case 26:case 27:{break};case 5:{q=60;break e;break};case 6:{q=62;break e;break};case 21:case 9:case 10:{q=66;break e;break};default:{q=73;break e}}}else{w=C&255;switch(w|0){case 216:case 217:case 218:case 219:{q=64;break e;break};case 220:case 221:case 222:case 223:{q=73;break e;break};case 255:{D=B&255;if((D-254|0)>>>0<2>>>0){q=73;break e}else{J=255;K=D;q=57;break f}break};default:{J=w;K=B&255;q=57;break f}}}}while(0);if((q|0)==57){q=0;if((c[18232+((d[19512+J|0]<<3|K>>>5)<<2)>>2]&1<<(K&31)|0)==0){q=59;break}}B=I+2|0;if((B|0)==(n|0)){k=-1;break a}else{H=I;I=B}}if((q|0)==59){c[g>>2]=I;k=0;break a}else if((q|0)==60){if((n-I|0)<2){k=-2;break a}c[g>>2]=I;k=0;break a}else if((q|0)==62){if((n-I|0)<3){k=-2;break a}c[g>>2]=I;k=0;break a}else if((q|0)==64){if((n-I|0)<4){k=-2;break a}c[g>>2]=I;k=0;break a}else if((q|0)==66){x=H+4|0;if((x|0)==(n|0)){k=-1;break a}else{L=x}while(1){if((a[L]|0)!=0){q=70;break}x=d[p+(d[L+1|0]|0)|0]|0;if((x|0)==11){q=69;break}else if(!((x|0)==21|(x|0)==9|(x|0)==10)){q=70;break}x=L+2|0;if((x|0)==(n|0)){k=-1;break a}else{L=x}}if((q|0)==69){c[g>>2]=L+2;k=5;break a}else if((q|0)==70){c[g>>2]=L;k=0;break a}}else if((q|0)==72){c[g>>2]=H+4;k=5;break a}else if((q|0)==73){c[g>>2]=I;k=0;break a}break};case 22:case 24:{break c;break};case 5:{if((n-t|0)<2){k=-2;break a}c[g>>2]=t;k=0;break a;break};case 29:{M=0;N=v;q=16;break c;break};case 6:{if((n-t|0)<3){k=-2;break a}c[g>>2]=t;k=0;break a;break};default:{q=74;break c}}}else{x=s&255;switch(x|0){case 216:case 217:case 218:case 219:{q=22;break c;break};case 220:case 221:case 222:case 223:{q=74;break c;break};case 255:{B=u&255;if((B-254|0)>>>0<2>>>0){q=74;break c}else{M=255;N=B;q=16;break c}break};default:{M=x;N=u&255;q=16;break c}}}}while(0);do{if((q|0)==16){if((c[18232+((d[17968+M|0]<<3|N>>>5)<<2)>>2]&1<<(N&31)|0)!=0){break}c[g>>2]=t;k=0;break a}else if((q|0)==22){if((n-t|0)<4){k=-2;break a}c[g>>2]=t;k=0;break a}else if((q|0)==74){c[g>>2]=t;k=0;break a}}while(0);u=e+4|0;if((u|0)==(n|0)){k=-1;break a}else{O=t;P=u}g:while(1){u=a[P]|0;s=a[O+3|0]|0;h:do{if(u<<24>>24==0){x=s&255;switch(d[p+x|0]|0){case 17:{Q=P;break g;break};case 22:case 24:case 25:case 26:case 27:{break};case 5:{q=83;break g;break};case 29:{R=0;S=x;q=80;break};case 7:{q=87;break g;break};case 6:{q=85;break g;break};case 11:{T=P;q=181;break g;break};case 21:case 9:case 10:{q=89;break g;break};default:{q=187;break g}}}else{x=u&255;switch(x|0){case 255:{B=s&255;if((B-254|0)>>>0<2>>>0){q=187;break g}else{R=255;S=B;q=80;break h}break};case 220:case 221:case 222:case 223:{q=187;break g;break};case 216:case 217:case 218:case 219:{q=87;break g;break};default:{R=x;S=s&255;q=80;break h}}}}while(0);if((q|0)==80){q=0;if((c[18232+((d[19512+R|0]<<3|S>>>5)<<2)>>2]&1<<(S&31)|0)==0){q=82;break}}s=P+2|0;if((s|0)==(n|0)){k=-1;break a}else{O=P;P=s}}i:do{if((q|0)==82){c[g>>2]=P;k=0;break a}else if((q|0)==83){if((n-P|0)<2){k=-2;break a}c[g>>2]=P;k=0;break a}else if((q|0)==85){if((n-P|0)<3){k=-2;break a}c[g>>2]=P;k=0;break a}else if((q|0)==87){if((n-P|0)<4){k=-2;break a}c[g>>2]=P;k=0;break a}else if((q|0)==89){t=O+4|0;if((t|0)==(n|0)){k=-1;break a}else{U=t}j:while(1){V=a[U]|0;W=a[U+1|0]|0;if(V<<24>>24!=0){q=91;break}t=W&255;switch(d[p+t|0]|0){case 17:{Q=U;break i;break};case 22:case 24:{break j;break};case 6:{q=175;break j;break};case 21:case 9:case 10:{break};case 29:{X=0;Y=t;q=95;break j;break};case 7:{q=177;break j;break};case 11:{T=U;q=181;break i;break};case 5:{q=173;break j;break};default:{q=180;break j}}t=U+2|0;if((t|0)==(n|0)){k=-1;break a}else{U=t}}k:do{if((q|0)==91){t=V&255;switch(t|0){case 220:case 221:case 222:case 223:{q=180;break k;break};case 255:{s=W&255;if((s-254|0)>>>0<2>>>0){q=180;break k}else{X=255;Y=s;q=95;break k}break};case 216:case 217:case 218:case 219:{q=177;break k;break};default:{X=t;Y=W&255;q=95;break k}}}else if((q|0)==173){if((n-U|0)<2){k=-2;break a}c[g>>2]=U;k=0;break a}else if((q|0)==175){if((n-U|0)<3){k=-2;break a}c[g>>2]=U;k=0;break a}}while(0);do{if((q|0)==95){if((c[18232+((d[17968+X|0]<<3|Y>>>5)<<2)>>2]&1<<(Y&31)|0)!=0){break}c[g>>2]=U;k=0;break a}else if((q|0)==177){if((n-U|0)<4){k=-2;break a}c[g>>2]=U;k=0;break a}else if((q|0)==180){c[g>>2]=U;k=0;break a}}while(0);t=U+2|0;c[j>>2]=t;if((t|0)==(n|0)){k=-1;break a}s=n;u=t;l:while(1){t=a[u]|0;v=a[u+1|0]|0;m:do{if(t<<24>>24==0){x=v&255;n:do{switch(d[p+x|0]|0){case 21:case 9:case 10:{B=u+2|0;c[j>>2]=B;if((B|0)==(n|0)){k=-1;break a}else{Z=u;_=B}while(1){if((a[_]|0)!=0){q=116;break l}B=d[p+(d[Z+3|0]|0)|0]|0;if((B|0)==14){$=_;break n}else if(!((B|0)==21|(B|0)==10|(B|0)==9)){q=116;break l}B=_+2|0;c[j>>2]=B;if((B|0)==(n|0)){k=-1;break a}else{Z=_;_=B}}break};case 29:{aa=0;ba=x;q=105;break m;break};case 22:case 24:case 25:case 26:case 27:{ca=u;break m;break};case 14:{$=u;break};case 5:{q=107;break l;break};case 6:{q=109;break l;break};case 7:{q=111;break l;break};default:{q=172;break l}}}while(0);x=$+2|0;c[j>>2]=x;if((x|0)==(n|0)){k=-1;break a}else{da=$;ea=x}while(1){if((a[ea]|0)!=0){q=122;break l}fa=d[p+(d[da+3|0]|0)|0]|0;if((fa&254|0)==12){break}if(!((fa|0)==21|(fa|0)==10|(fa|0)==9)){q=122;break l}x=ea+2|0;c[j>>2]=x;if((x|0)==(n|0)){k=-1;break a}else{da=ea;ea=x}}x=ea+2|0;c[j>>2]=x;if((x|0)==(n|0)){k=-1;break a}else{ga=x}while(1){x=a[ga]|0;B=a[ga+1|0]|0;o:do{if(x<<24>>24==0){ha=d[p+(B&255)|0]|0}else{switch(x&255|0){case 220:case 221:case 222:case 223:{ha=8;break o;break};case 255:{if(((B&255)-254|0)>>>0<2>>>0){ha=0;break o}break};case 216:case 217:case 218:case 219:{ha=7;break o;break};default:{}}ha=29}}while(0);if((ha|0)==(fa|0)){break}switch(ha|0){case 6:{if((s-ga|0)<3){k=-2;break a}B=ga+3|0;c[j>>2]=B;ia=B;break};case 5:{if((s-ga|0)<2){k=-2;break a}B=ga+2|0;c[j>>2]=B;ia=B;break};case 7:{if((s-ga|0)<4){k=-2;break a}B=ga+4|0;c[j>>2]=B;ia=B;break};case 0:case 1:case 8:{q=138;break l;break};case 3:{ja=Of(b,ga+2|0,n,j)|0;if((ja|0)<1){q=142;break l}ia=c[j>>2]|0;break};case 2:{q=144;break l;break};default:{B=ga+2|0;c[j>>2]=B;ia=B}}if((ia|0)==(n|0)){k=-1;break a}else{ga=ia}}ka=ga+2|0;c[j>>2]=ka;if((ka|0)==(n|0)){k=-1;break a}if((a[ka]|0)!=0){q=150;break l}switch(d[p+(d[ga+3|0]|0)|0]|0){case 11:{la=ka;q=165;break l;break};case 17:{ma=ka;q=166;break l;break};case 21:case 9:case 10:{break};default:{q=150;break l}}B=ga+4|0;c[j>>2]=B;if((B|0)==(n|0)){k=-1;break a}else{na=ka;oa=B}p:while(1){pa=a[oa]|0;qa=a[na+3|0]|0;if(pa<<24>>24!=0){q=152;break}switch(d[p+(qa&255)|0]|0){case 21:case 9:case 10:{break};case 11:{la=oa;q=165;break l;break};case 17:{ma=oa;q=166;break l;break};case 7:{q=163;break l;break};case 22:case 24:{ca=oa;break m;break};case 5:{q=159;break l;break};case 29:{ra=0;break p;break};case 6:{q=161;break l;break};default:{q=171;break l}}B=oa+2|0;c[j>>2]=B;if((B|0)==(n|0)){k=-1;break a}else{na=oa;oa=B}}q:do{if((q|0)==152){q=0;B=pa&255;switch(B|0){case 216:case 217:case 218:case 219:{q=163;break l;break};case 255:{break};case 220:case 221:case 222:case 223:{q=171;break l;break};default:{ra=B;break q}}if(((qa&255)-254|0)>>>0<2>>>0){q=171;break l}else{ra=255}}}while(0);B=d[oa+1|0]|0;if((1<<(B&31)&c[18232+((B>>>5|d[17968+ra|0]<<3)<<2)>>2]|0)==0){q=157;break l}else{ca=oa}}else{B=t&255;switch(B|0){case 255:{x=v&255;if((x-254|0)>>>0<2>>>0){q=172;break l}else{aa=255;ba=x;q=105;break m}break};case 216:case 217:case 218:case 219:{q=111;break l;break};case 220:case 221:case 222:case 223:{q=172;break l;break};default:{aa=B;ba=v&255;q=105;break m}}}}while(0);if((q|0)==105){q=0;if((c[18232+((d[19512+aa|0]<<3|ba>>>5)<<2)>>2]&1<<(ba&31)|0)==0){q=106;break}else{ca=u}}v=ca+2|0;c[j>>2]=v;if((v|0)==(n|0)){k=-1;break a}else{u=v}}if((q|0)==106){c[g>>2]=u;k=0;break a}else if((q|0)==107){if((s-u|0)<2){k=-2;break a}c[g>>2]=u;k=0;break a}else if((q|0)==109){if((s-u|0)<3){k=-2;break a}c[g>>2]=u;k=0;break a}else if((q|0)==111){if((s-u|0)<4){k=-2;break a}c[g>>2]=u;k=0;break a}else if((q|0)==116){c[g>>2]=_;k=0;break a}else if((q|0)==122){c[g>>2]=ea;k=0;break a}else if((q|0)==138){c[g>>2]=ga;k=0;break a}else if((q|0)==142){if((ja|0)!=0){k=ja;break a}c[g>>2]=c[j>>2];k=0;break a}else if((q|0)==144){c[g>>2]=ga;k=0;break a}else if((q|0)==150){c[g>>2]=ka;k=0;break a}else if((q|0)==157){c[g>>2]=oa;k=0;break a}else if((q|0)==159){if((s-oa|0)<2){k=-2;break a}c[g>>2]=oa;k=0;break a}else if((q|0)==161){if((s-oa|0)<3){k=-2;break a}c[g>>2]=oa;k=0;break a}else if((q|0)==163){if((s-oa|0)<4){k=-2;break a}c[g>>2]=oa;k=0;break a}else if((q|0)==165){c[g>>2]=la+2;k=1;break a}else if((q|0)==166){v=ma+2|0;c[j>>2]=v;if((v|0)==(n|0)){k=-1;break a}do{if((a[v]|0)==0){if((a[ma+3|0]|0)!=62){break}c[g>>2]=ma+4;k=3;break a}}while(0);c[g>>2]=v;k=0;break a}else if((q|0)==171){c[g>>2]=oa;k=0;break a}else if((q|0)==172){c[g>>2]=u;k=0;break a}}else if((q|0)==187){c[g>>2]=P;k=0;break a}}while(0);if((q|0)==181){c[g>>2]=T+2;k=2;break a}s=Q+2|0;if((s|0)==(n|0)){k=-1;break a}do{if((a[s]|0)==0){if((a[Q+3|0]|0)!=62){break}c[g>>2]=Q+4;k=4;break a}}while(0);c[g>>2]=s;k=0;break a;break};case 9:{t=e+2|0;if((t|0)==(n|0)){k=-3;break a}if((a[t]|0)==0){sa=(a[p+(d[e+3|0]|0)|0]|0)==10}else{sa=0}c[g>>2]=sa?e+4|0:t;k=7;break a;break};case 6:{if((n-l|0)<3){k=-2;break a}r=e+3|0;break b;break};case 7:{q=205;break b;break};default:{q=208;break b}}}else{switch(o&255|0){case 255:{break};case 220:case 221:case 222:case 223:{q=207;break b;break};case 216:case 217:case 218:case 219:{q=205;break b;break};default:{q=208;break b}}if(((m&255)-254|0)>>>0<2>>>0){q=207}else{q=208}}}while(0);if((q|0)==205){if((n-l|0)<4){k=-2;break}r=e+4|0}else if((q|0)==207){c[g>>2]=e;k=0;break}else if((q|0)==208){r=e+2|0}r:do{if((r|0)!=(n|0)){m=b+72|0;o=n;t=r;s:while(1){B=a[t]|0;x=a[t+1|0]|0;t:do{if(B<<24>>24==0){switch(d[m+(x&255)|0]|0){case 5:{if((o-t|0)<2){q=216;break s}ta=t+2|0;break t;break};case 3:case 2:case 0:case 1:case 8:case 9:case 10:{q=231;break s;break};case 6:{if((o-t|0)<3){q=219;break s}ta=t+3|0;break t;break};case 7:{q=221;break t;break};case 4:{C=t+2|0;if((C|0)==(n|0)){q=231;break s}if((a[C]|0)!=0){ta=C;break t}if((a[t+3|0]|0)!=93){ta=C;break t}ua=t+4|0;if((ua|0)==(n|0)){q=231;break s}if((a[ua]|0)!=0){ta=C;break t}if((a[t+5|0]|0)==62){q=230;break s}else{ta=C;break t}break};default:{q=232;break t}}}else{switch(B&255|0){case 255:{break};case 220:case 221:case 222:case 223:{q=231;break s;break};case 216:case 217:case 218:case 219:{q=221;break t;break};default:{q=232;break t}}if(((x&255)-254|0)>>>0<2>>>0){q=231;break s}else{q=232}}}while(0);if((q|0)==221){q=0;if((o-t|0)<4){q=222;break}ta=t+4|0}else if((q|0)==232){q=0;ta=t+2|0}if((ta|0)==(n|0)){break r}else{t=ta}}if((q|0)==216){c[g>>2]=t;k=6;break a}else if((q|0)==219){c[g>>2]=t;k=6;break a}else if((q|0)==222){c[g>>2]=t;k=6;break a}else if((q|0)==230){c[g>>2]=ua;k=0;break a}else if((q|0)==231){c[g>>2]=t;k=6;break a}}}while(0);c[g>>2]=n;k=6}}while(0);i=h;return k|0}function Af(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)==(f|0)){h=-4;return h|0}i=e;j=f-i|0;do{if((j&1|0)==0){k=f}else{l=j&-2;if((l|0)==0){h=-1;return h|0}else{k=e+l|0;break}}}while(0);j=a[e]|0;f=a[e+1|0]|0;a:do{if(j<<24>>24==0){l=b+72|0;switch(d[l+(f&255)|0]|0){case 6:{if((k-i|0)<3){h=-2;return h|0}else{m=e+3|0;break a}break};case 9:{n=e+2|0;if((n|0)==(k|0)){h=-1;return h|0}if((a[n]|0)==0){o=(a[l+(d[e+3|0]|0)|0]|0)==10}else{o=0}c[g>>2]=o?e+4|0:n;h=7;return h|0};case 5:{if((k-i|0)<2){h=-2;return h|0}else{m=e+2|0;break a}break};case 4:{n=e+2|0;if((n|0)==(k|0)){h=-1;return h|0}if((a[n]|0)!=0){m=n;break a}if((a[e+3|0]|0)!=93){m=n;break a}l=e+4|0;if((l|0)==(k|0)){h=-1;return h|0}if((a[l]|0)!=0){m=n;break a}if((a[e+5|0]|0)!=62){m=n;break a}c[g>>2]=e+6;h=40;return h|0};case 10:{c[g>>2]=e+2;h=7;return h|0};case 7:{p=25;break a;break};case 0:case 1:case 8:{p=27;break a;break};default:{p=28;break a}}}else{switch(j&255|0){case 255:{break};case 216:case 217:case 218:case 219:{p=25;break a;break};case 220:case 221:case 222:case 223:{p=27;break a;break};default:{p=28;break a}}if(((f&255)-254|0)>>>0<2>>>0){p=27}else{p=28}}}while(0);do{if((p|0)==25){if((k-i|0)<4){h=-2;return h|0}else{m=e+4|0;break}}else if((p|0)==27){c[g>>2]=e;h=0;return h|0}else if((p|0)==28){m=e+2|0}}while(0);b:do{if((m|0)!=(k|0)){e=b+72|0;i=k;f=m;c:while(1){j=a[f]|0;o=a[f+1|0]|0;d:do{if(j<<24>>24==0){switch(d[e+(o&255)|0]|0){case 5:{if((i-f|0)<2){p=36;break c}q=f+2|0;break d;break};case 6:{if((i-f|0)<3){p=39;break c}q=f+3|0;break d;break};case 7:{p=41;break d;break};case 0:case 1:case 8:case 9:case 10:case 4:{p=44;break c;break};default:{p=45;break d}}}else{switch(j&255|0){case 255:{break};case 216:case 217:case 218:case 219:{p=41;break d;break};case 220:case 221:case 222:case 223:{p=44;break c;break};default:{p=45;break d}}if(((o&255)-254|0)>>>0<2>>>0){p=44;break c}else{p=45}}}while(0);if((p|0)==41){p=0;if((i-f|0)<4){p=42;break}q=f+4|0}else if((p|0)==45){p=0;q=f+2|0}if((q|0)==(k|0)){break b}else{f=q}}if((p|0)==36){c[g>>2]=f;h=6;return h|0}else if((p|0)==39){c[g>>2]=f;h=6;return h|0}else if((p|0)==42){c[g>>2]=f;h=6;return h|0}else if((p|0)==44){c[g>>2]=f;h=6;return h|0}}}while(0);c[g>>2]=k;h=6;return h|0}function Bf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)==(f|0)){h=-4;return h|0}i=b+72|0;j=e;a:while(1){k=a[j]|0;b:do{if(k<<24>>24==0){switch(d[i+(d[j+1|0]|0)|0]|0){case 5:{l=j+2|0;break b;break};case 21:{m=22;break a;break};case 2:{m=12;break a;break};case 7:{m=8;break b;break};case 10:{m=13;break a;break};case 9:{m=16;break a;break};case 3:{m=9;break a;break};case 6:{l=j+3|0;break b;break};default:{m=25;break b}}}else{if(((k&255)-216|0)>>>0<4>>>0){m=8}else{m=25}}}while(0);if((m|0)==8){m=0;l=j+4|0}else if((m|0)==25){m=0;l=j+2|0}if((l|0)==(f|0)){m=27;break}else{j=l}}if((m|0)==9){if((j|0)==(e|0)){h=Of(b,e+2|0,f,g)|0;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((m|0)==12){c[g>>2]=j;h=0;return h|0}else if((m|0)==13){if((j|0)==(e|0)){c[g>>2]=e+2;h=7;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((m|0)==16){if((j|0)!=(e|0)){c[g>>2]=j;h=6;return h|0}b=e+2|0;if((b|0)==(f|0)){h=-3;return h|0}if((a[b]|0)==0){n=(a[i+(d[e+3|0]|0)|0]|0)==10}else{n=0}c[g>>2]=n?e+4|0:b;h=7;return h|0}else if((m|0)==22){if((j|0)==(e|0)){c[g>>2]=e+2;h=39;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((m|0)==27){c[g>>2]=f;h=6;return h|0}return 0}function Cf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;if((e|0)==(f|0)){h=-4;return h|0}i=b+72|0;j=e;a:while(1){k=a[j]|0;b:do{if(k<<24>>24==0){switch(d[i+(d[j+1|0]|0)|0]|0){case 10:{l=15;break a;break};case 5:{m=j+2|0;break b;break};case 6:{m=j+3|0;break b;break};case 30:{l=12;break a;break};case 3:{l=9;break a;break};case 7:{l=8;break b;break};case 9:{l=18;break a;break};default:{l=24;break b}}}else{if(((k&255)-216|0)>>>0<4>>>0){l=8}else{l=24}}}while(0);if((l|0)==8){l=0;m=j+4|0}else if((l|0)==24){l=0;m=j+2|0}if((m|0)==(f|0)){l=26;break}else{j=m}}if((l|0)==9){if((j|0)==(e|0)){h=Of(b,e+2|0,f,g)|0;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==12){if((j|0)==(e|0)){m=Pf(b,e+2|0,f,g)|0;h=(m|0)==22?0:m;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==15){if((j|0)==(e|0)){c[g>>2]=e+2;h=7;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==18){if((j|0)!=(e|0)){c[g>>2]=j;h=6;return h|0}j=e+2|0;if((j|0)==(f|0)){h=-3;return h|0}if((a[j]|0)==0){n=(a[i+(d[e+3|0]|0)|0]|0)==10}else{n=0}c[g>>2]=n?e+4|0:j;h=7;return h|0}else if((l|0)==26){c[g>>2]=f;h=6;return h|0}return 0}function Df(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=b+72|0;b=e;e=c;a:while(1){c=a[e]|0;g=e+1|0;h=a[g]|0;b:do{if(c<<24>>24==0){switch(d[f+(h&255)|0]|0){case 29:case 22:case 24:case 25:case 26:case 27:{i=12;break};case 5:{j=b;k=e;l=0;i=10;break};case 7:{i=6;break};case 6:{m=b;n=e;o=0;i=8;break};default:{i=15;break a}}}else{switch(c&255|0){case 220:case 221:case 222:case 223:{i=15;break a;break};case 216:case 217:case 218:case 219:{i=6;break b;break};case 255:{break};default:{i=12;break b}}if(((h&255)-254|0)>>>0<2>>>0){i=15;break a}else{i=12}}}while(0);if((i|0)==6){i=0;if(c<<24>>24!=(a[b]|0)){p=0;i=20;break}m=b+1|0;n=g;o=h;i=8}else if((i|0)==12){i=0;if((a[b]|0)!=c<<24>>24){p=0;i=20;break}if((a[b+1|0]|0)==h<<24>>24){q=b;r=e}else{p=0;i=20;break}}if((i|0)==8){i=0;s=n+1|0;if(o<<24>>24!=(a[m]|0)){p=0;i=20;break}j=m+1|0;k=s;l=a[s]|0;i=10}if((i|0)==10){i=0;if(l<<24>>24!=(a[j]|0)){p=0;i=20;break}if((a[k+1|0]|0)==(a[j+1|0]|0)){q=j;r=k}else{p=0;i=20;break}}b=q+2|0;e=r+2|0}if((i|0)==15){r=a[b]|0;e=a[b+1|0]|0;c:do{if(r<<24>>24==0){switch(d[f+(e&255)|0]|0){case 5:case 6:case 7:case 29:case 22:case 24:case 25:case 26:case 27:{p=0;break};default:{break c}}return p|0}else{switch(r&255|0){case 255:{break};case 223:case 222:case 221:case 220:{break c;break};default:{p=0;return p|0}}if(((e&255)-254|0)>>>0<2>>>0){break}else{p=0}return p|0}}while(0);p=1;return p|0}else if((i|0)==20){return p|0}return 0}function Ef(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;b=a[e]|0;f=(c|0)==(d|0);a:do{if(b<<24>>24==0){g=f}else{h=c;i=e;j=b;k=f;while(1){if(k){l=0;m=7;break}if((a[h]|0)!=0){l=0;m=7;break}if((a[h+1|0]|0)!=j<<24>>24){l=0;m=7;break}n=h+2|0;o=i+1|0;p=a[o]|0;q=(n|0)==(d|0);if(p<<24>>24==0){g=q;break a}else{h=n;i=o;j=p;k=q}}if((m|0)==7){return l|0}}}while(0);l=g&1;return l|0}function Ff(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0;e=b+72|0;b=c;a:while(1){f=a[b]|0;g=a[b+1|0]|0;b:do{if(f<<24>>24==0){switch(d[e+(g&255)|0]|0|0){case 6:{b=b+3|0;continue a;break};case 29:case 22:case 24:case 25:case 26:case 27:{h=9;break b;break};case 5:{b=b+2|0;continue a;break};case 7:{h=8;break b;break};default:{break a}}}else{switch(f&255|0){case 220:case 221:case 222:case 223:{break a;break};case 255:{break};case 216:case 217:case 218:case 219:{h=8;break b;break};default:{h=9;break b}}if(((g&255)-254|0)>>>0<2>>>0){break a}else{h=9}}}while(0);if((h|0)==8){h=0;b=b+4|0;continue}else if((h|0)==9){h=0;b=b+2|0;continue}}return b-c|0}function Gf(b,c){b=b|0;c=c|0;var e=0,f=0,g=0;if((a[c]|0)!=0){e=c;return e|0}f=b+72|0;b=c;while(1){c=d[f+(d[b+1|0]|0)|0]|0;if(!((c|0)==10|(c|0)==9|(c|0)==21)){e=b;g=3;break}c=b+2|0;if((a[c]|0)==0){b=c}else{e=c;g=3;break}}if((g|0)==3){return e|0}return 0}function Hf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=b+72|0;b=0;i=0;j=1;k=e;a:while(1){e=k+2|0;l=a[e]|0;m=k+3|0;n=a[m]|0;b:do{if(l<<24>>24==0){switch(d[h+(n&255)|0]|0){case 6:{if((j|0)!=0){b=b;i=i;j=j;k=m;continue a}if((i|0)>=(f|0)){b=b;i=i;j=1;k=m;continue a}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;b=b;i=i;j=1;k=m;continue a;break};case 5:{if((j|0)!=0){b=b;i=i;j=j;k=e;continue a}if((i|0)>=(f|0)){b=b;i=i;j=1;k=e;continue a}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;b=b;i=i;j=1;k=e;continue a;break};case 7:{o=12;break b;break};case 9:case 10:{if((j|0)==1){b=b;i=i;j=0;k=e;continue a}if(!((j|0)==2&(i|0)<(f|0))){b=b;i=i;j=j;k=e;continue a}a[g+(i<<4)+12|0]=0;b=b;i=i;j=2;k=e;continue a;break};case 3:{if((i|0)>=(f|0)){b=b;i=i;j=j;k=e;continue a}a[g+(i<<4)+12|0]=0;b=b;i=i;j=j;k=e;continue a;break};case 13:{if((j|0)!=2){if((i|0)>=(f|0)){b=13;i=i;j=2;k=e;continue a}c[g+(i<<4)+4>>2]=k+4;b=13;i=i;j=2;k=e;continue a}if((b|0)!=13){b=b;i=i;j=2;k=e;continue a}if((i|0)<(f|0)){c[g+(i<<4)+8>>2]=e}b=13;i=i+1|0;j=0;k=e;continue a;break};case 11:case 17:{if((j|0)==2){b=b;i=i;j=2;k=e;continue a}else{break a}break};case 12:{if((j|0)!=2){if((i|0)>=(f|0)){b=12;i=i;j=2;k=e;continue a}c[g+(i<<4)+4>>2]=k+4;b=12;i=i;j=2;k=e;continue a}if((b|0)!=12){b=b;i=i;j=2;k=e;continue a}if((i|0)<(f|0)){c[g+(i<<4)+8>>2]=e}b=12;i=i+1|0;j=0;k=e;continue a;break};case 21:{if((j|0)==1){b=b;i=i;j=0;k=e;continue a}if(!((j|0)==2&(i|0)<(f|0))){b=b;i=i;j=j;k=e;continue a}p=g+(i<<4)+12|0;if((a[p]|0)==0){b=b;i=i;j=2;k=e;continue a}do{if((e|0)!=(c[g+(i<<4)+4>>2]|0)&n<<24>>24==32){q=a[k+4|0]|0;r=a[k+5|0]|0;if((q<<24>>24|0)==(-1|0)){if(((r&255)-254|0)>>>0<2>>>0){s=0}else{b=b;i=i;j=2;k=e;continue a}}else if((q<<24>>24|0)==0){if(r<<24>>24==32){break}s=d[h+(r&255)|0]|0}else{b=b;i=i;j=2;k=e;continue a}if((s|0)!=(b|0)){b=b;i=i;j=2;k=e;continue a}}}while(0);a[p]=0;b=b;i=i;j=2;k=e;continue a;break};case 29:case 22:case 24:{o=16;break b;break};default:{b=b;i=i;j=j;k=e;continue a}}}else{switch(l&255|0){case 216:case 217:case 218:case 219:{o=12;break b;break};case 255:{break};case 220:case 221:case 222:case 223:{b=b;i=i;j=j;k=e;continue a;break};default:{o=16;break b}}if(!(((n&255)-254|0)>>>0>1>>>0&(j|0)==0)){b=b;i=i;j=j;k=e;continue a}}}while(0);if((o|0)==12){o=0;do{if((j|0)==0){if((i|0)>=(f|0)){t=1;break}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;t=1}else{t=j}}while(0);b=b;i=i;j=t;k=k+4|0;continue}else if((o|0)==16){o=0;if((j|0)!=0){b=b;i=i;j=j;k=e;continue}}if((i|0)>=(f|0)){b=b;i=i;j=1;k=e;continue}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;b=b;i=i;j=1;k=e}return i|0}function If(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;b=c+4|0;d=a[b]|0;a:do{if(d<<24>>24==0){if((a[c+5|0]|0)!=120){e=b;f=0;g=0;h=11;break}i=c+6|0;j=0;while(1){b:do{if((a[i]|0)==0){k=a[i+1|0]|0;if(k<<24>>24==59){l=j;break a}m=k<<24>>24;switch(m|0){case 65:case 66:case 67:case 68:case 69:case 70:{n=(j<<4)-55+m|0;break b;break};case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{n=m-48|j<<4;break b;break};case 97:case 98:case 99:case 100:case 101:case 102:{n=(j<<4)-87+m|0;break b;break};default:{n=j;break b}}}else{n=j}}while(0);if((n|0)>1114111){o=-1;break}else{i=i+2|0;j=n}}return o|0}else{e=b;f=0;g=d;h=11}}while(0);c:do{if((h|0)==11){while(1){h=0;if(g<<24>>24==0){d=a[e+1|0]|0;if(d<<24>>24==59){l=f;break c}p=(d<<24>>24)-48|0}else{p=-49}d=p+(f*10|0)|0;b=e+2|0;if((d|0)>1114111){o=-1;break}e=b;f=d;g=a[b]|0;h=11}return o|0}}while(0);d:do{switch(l>>8|0){case 0:{if((a[20496+l|0]|0)==0){o=-1}else{break d}return o|0};case 255:{if((l&-2|0)==65534){o=-1}else{break d}return o|0};case 216:case 217:case 218:case 219:case 220:case 221:case 222:case 223:{o=-1;return o|0};default:{}}}while(0);o=l;return o|0}function Jf(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;b=(d-c|0)/2|0;do{if((b|0)==2){if((a[c+2|0]|0)!=0){break}if((a[c+3|0]|0)!=116){break}if((a[c]|0)!=0){break}d=a[c+1|0]|0;if((d|0)==108){e=60;return e|0}else if((d|0)!=103){break}e=62;return e|0}else if((b|0)==3){if((a[c]|0)!=0){break}if((a[c+1|0]|0)!=97){break}if((a[c+2|0]|0)!=0){break}if((a[c+3|0]|0)!=109){break}if((a[c+4|0]|0)!=0){break}if((a[c+5|0]|0)==112){e=38}else{break}return e|0}else if((b|0)==4){if((a[c]|0)!=0){break}d=a[c+1|0]|0;if((d|0)==97){if((a[c+2|0]|0)!=0){break}if((a[c+3|0]|0)!=112){break}if((a[c+4|0]|0)!=0){break}if((a[c+5|0]|0)!=111){break}if((a[c+6|0]|0)!=0){break}if((a[c+7|0]|0)==115){e=39}else{break}return e|0}else if((d|0)==113){if((a[c+2|0]|0)!=0){break}if((a[c+3|0]|0)!=117){break}if((a[c+4|0]|0)!=0){break}if((a[c+5|0]|0)!=111){break}if((a[c+6|0]|0)!=0){break}if((a[c+7|0]|0)==116){e=34}else{break}return e|0}else{break}}}while(0);e=0;return e|0}function Kf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(e>>>0>=f>>>0){return}h=b+72|0;b=g+4|0;i=g|0;g=e;while(1){e=a[g]|0;a:do{if(e<<24>>24==0){switch(d[h+(d[g+1|0]|0)|0]|0){case 9:{c[i>>2]=(c[i>>2]|0)+1;j=g+2|0;if((j|0)==(f|0)){k=f}else{if((a[j]|0)==0){l=(a[h+(d[g+3|0]|0)|0]|0)==10}else{l=0}k=l?g+4|0:j}c[b>>2]=-1;m=k;break a;break};case 5:{m=g+2|0;break a;break};case 10:{c[b>>2]=-1;c[i>>2]=(c[i>>2]|0)+1;m=g+2|0;break a;break};case 7:{n=8;break a;break};case 6:{m=g+3|0;break a;break};default:{n=15;break a}}}else{if(((e&255)-216|0)>>>0<4>>>0){n=8}else{n=15}}}while(0);if((n|0)==8){n=0;m=g+4|0}else if((n|0)==15){n=0;m=g+2|0}c[b>>2]=(c[b>>2]|0)+1;if(m>>>0<f>>>0){g=m}else{break}}return}function Lf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=f-2|0;f=e+2|0;if((f|0)==(h|0)){i=1;return i|0}j=b+72|0;b=e;e=f;a:while(1){f=(a[e]|0)==0;k=b+3|0;if(!f){l=11;break}m=a[k]|0;b:do{switch(d[j+(m&255)|0]|0){case 25:case 24:case 27:case 13:case 31:case 32:case 34:case 35:case 17:case 14:case 15:case 9:case 10:case 18:case 16:case 33:case 30:case 19:{break};case 21:{if(m<<24>>24==9){l=7;break a}break};case 26:case 22:{if(m<<24>>24>=0){break b}if(f){l=10}else{l=11;break a}break};default:{l=10}}}while(0);if((l|0)==10){l=0;f=a[k]|0;if(!((f|0)==36|(f|0)==64)){l=11;break}}f=e+2|0;if((f|0)==(h|0)){i=1;l=12;break}else{b=e;e=f}}if((l|0)==7){c[g>>2]=e;i=0;return i|0}else if((l|0)==11){c[g>>2]=e;i=0;return i|0}else if((l|0)==12){return i|0}return 0}function Mf(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=c[d>>2]|0;a:do{if((b|0)!=(e|0)){h=g;i=b;b:while(1){j=a[i+1|0]|0;k=a[i]|0;l=k&255;c:do{switch(l|0){case 216:case 217:case 218:case 219:{m=c[f>>2]|0;if((h-m|0)<4){n=15;break b}o=j&255;p=(l<<2&12|o>>>6)+1|0;c[f>>2]=m+1;a[m]=p>>>2|240;m=c[f>>2]|0;c[f>>2]=m+1;a[m]=o>>>2&15|p<<4&48|128;p=i+2|0;o=a[i+3|0]|0;m=j<<4&48|(o&255)>>>6|a[p]<<2&12|-128;q=c[f>>2]|0;c[f>>2]=q+1;a[q]=m;m=c[f>>2]|0;c[f>>2]=m+1;a[m]=o&63|-128;r=p;break};case 1:case 2:case 3:case 4:case 5:case 6:case 7:{n=8;break};case 0:{if(j<<24>>24<=-1){n=8;break c}p=c[f>>2]|0;if((p|0)==(g|0)){n=6;break b}c[f>>2]=p+1;a[p]=j;r=i;break};default:{p=c[f>>2]|0;if((h-p|0)<3){n=12;break b}c[f>>2]=p+1;a[p]=(k&255)>>>4|-32;p=c[f>>2]|0;c[f>>2]=p+1;a[p]=(j&255)>>>6|k<<2&60|-128;p=c[f>>2]|0;c[f>>2]=p+1;a[p]=j&63|-128;r=i}}}while(0);if((n|0)==8){n=0;l=c[f>>2]|0;if((h-l|0)<2){n=9;break}c[f>>2]=l+1;a[l]=(j&255)>>>6|k<<2|-64;l=c[f>>2]|0;c[f>>2]=l+1;a[l]=j&63|-128;r=i}l=r+2|0;if((l|0)==(e|0)){break a}else{i=l}}if((n|0)==6){c[d>>2]=i;return}else if((n|0)==9){c[d>>2]=i;return}else if((n|0)==12){c[d>>2]=i;return}else if((n|0)==15){c[d>>2]=i;return}}}while(0);c[d>>2]=e;return}function Nf(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0;e=c[f>>2]|0;j=c[h>>2]|0;if((g-e|0)>(i-j|0)){k=g-2|0;l=(a[k]&-8)<<24>>24==-40?k:g}else{l=g}if((e|0)==(l|0)){return}else{m=e;n=j}while(1){if((n|0)==(i|0)){o=7;break}j=(d[m]|0)<<8|(d[m+1|0]|0);c[h>>2]=n+2;b[n>>1]=j;j=(c[f>>2]|0)+2|0;c[f>>2]=j;if((j|0)==(l|0)){o=7;break}m=j;n=c[h>>2]|0}if((o|0)==7){return}}function Of(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if((e|0)==(f|0)){h=-1;return h|0}i=a[e]|0;j=a[e+1|0]|0;a:do{if(i<<24>>24==0){k=j&255;l=b+72|0;switch(d[l+k|0]|0){case 6:{if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 7:{m=15;break a;break};case 29:{n=0;o=k;m=9;break a;break};case 19:{k=e+2|0;if((k|0)==(f|0)){h=-1;return h|0}do{if((a[k]|0)==0){p=a[e+3|0]|0;if(p<<24>>24!=120){if((a[l+(p&255)|0]|0)==25){q=k}else{break}while(1){r=q+2|0;if((r|0)==(f|0)){h=-1;m=54;break}if((a[r]|0)!=0){m=36;break}p=d[l+(d[q+3|0]|0)|0]|0;if((p|0)==18){m=35;break}else if((p|0)==25){q=r}else{m=36;break}}if((m|0)==35){c[g>>2]=q+4;h=10;return h|0}else if((m|0)==36){c[g>>2]=r;h=0;return h|0}else if((m|0)==54){return h|0}}p=e+4|0;if((p|0)==(f|0)){h=-1;return h|0}do{if((a[p]|0)==0){if(((d[l+(d[e+5|0]|0)|0]|0)-24|0)>>>0>=2>>>0){break}s=e+6|0;if((s|0)==(f|0)){h=-1;return h|0}else{t=p;u=s}while(1){if((a[u]|0)!=0){m=29;break}s=d[l+(d[t+3|0]|0)|0]|0;if((s|0)==18){m=28;break}else if(!((s|0)==25|(s|0)==24)){m=29;break}s=u+2|0;if((s|0)==(f|0)){h=-1;m=54;break}else{t=u;u=s}}if((m|0)==28){c[g>>2]=t+4;h=10;return h|0}else if((m|0)==29){c[g>>2]=u;h=0;return h|0}else if((m|0)==54){return h|0}}}while(0);c[g>>2]=p;h=0;return h|0}}while(0);c[g>>2]=k;h=0;return h|0};case 5:{if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 22:case 24:{break a;break};default:{m=37;break a}}}else{l=i&255;switch(l|0){case 255:{s=j&255;if((s-254|0)>>>0<2>>>0){m=37;break a}else{n=255;o=s;m=9;break a}break};case 216:case 217:case 218:case 219:{m=15;break a;break};case 220:case 221:case 222:case 223:{m=37;break a;break};default:{n=l;o=j&255;m=9;break a}}}}while(0);do{if((m|0)==9){if((1<<(o&31)&c[18232+((o>>>5|d[17968+n|0]<<3)<<2)>>2]|0)!=0){break}c[g>>2]=e;h=0;return h|0}else if((m|0)==15){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((m|0)==37){c[g>>2]=e;h=0;return h|0}}while(0);n=e+2|0;if((n|0)==(f|0)){h=-1;return h|0}o=b+72|0;b=e;e=n;b:while(1){n=a[e]|0;j=a[b+3|0]|0;c:do{if(n<<24>>24==0){i=j&255;switch(d[o+i|0]|0){case 22:case 24:case 25:case 26:case 27:{break};case 6:{m=48;break b;break};case 5:{m=46;break b;break};case 7:{m=50;break b;break};case 29:{v=0;w=i;m=43;break};case 18:{m=52;break b;break};default:{m=53;break b}}}else{i=n&255;switch(i|0){case 216:case 217:case 218:case 219:{m=50;break b;break};case 220:case 221:case 222:case 223:{m=53;break b;break};case 255:{u=j&255;if((u-254|0)>>>0<2>>>0){m=53;break b}else{v=255;w=u;m=43;break c}break};default:{v=i;w=j&255;m=43;break c}}}}while(0);if((m|0)==43){m=0;if((1<<(w&31)&c[18232+((w>>>5|d[19512+v|0]<<3)<<2)>>2]|0)==0){m=45;break}}j=e+2|0;if((j|0)==(f|0)){h=-1;m=54;break}else{b=e;e=j}}if((m|0)==45){c[g>>2]=e;h=0;return h|0}else if((m|0)==46){if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((m|0)==48){if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((m|0)==50){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((m|0)==52){c[g>>2]=b+4;h=9;return h|0}else if((m|0)==53){c[g>>2]=e;h=0;return h|0}else if((m|0)==54){return h|0}return 0}function Pf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)==(f|0)){h=-1;return h|0}i=a[e]|0;j=a[e+1|0]|0;a:do{if(i<<24>>24==0){k=j&255;switch(d[b+72+k|0]|0|0){case 29:{l=0;m=k;n=9;break a;break};case 7:{n=15;break a;break};case 21:case 10:case 9:case 30:{c[g>>2]=e;h=22;return h|0};case 5:{if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 22:case 24:{break a;break};case 6:{if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};default:{n=18;break a}}}else{k=i&255;switch(k|0){case 216:case 217:case 218:case 219:{n=15;break a;break};case 255:{o=j&255;if((o-254|0)>>>0<2>>>0){n=18;break a}else{l=255;m=o;n=9;break a}break};case 220:case 221:case 222:case 223:{n=18;break a;break};default:{l=k;m=j&255;n=9;break a}}}}while(0);do{if((n|0)==9){if((1<<(m&31)&c[18232+((m>>>5|(d[17968+l|0]|0)<<3)<<2)>>2]|0)!=0){break}c[g>>2]=e;h=0;return h|0}else if((n|0)==15){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((n|0)==18){c[g>>2]=e;h=0;return h|0}}while(0);l=e+2|0;if((l|0)==(f|0)){h=-1;return h|0}m=b+72|0;b=e;e=l;b:while(1){l=a[e]|0;j=a[b+3|0]|0;c:do{if(l<<24>>24==0){i=j&255;switch(d[m+i|0]|0|0){case 7:{n=31;break b;break};case 18:{n=33;break b;break};case 6:{n=29;break b;break};case 5:{n=27;break b;break};case 29:{p=0;q=i;n=24;break};case 22:case 24:case 25:case 26:case 27:{break};default:{n=34;break b}}}else{i=l&255;switch(i|0){case 216:case 217:case 218:case 219:{n=31;break b;break};case 220:case 221:case 222:case 223:{n=34;break b;break};case 255:{k=j&255;if((k-254|0)>>>0<2>>>0){n=34;break b}else{p=255;q=k;n=24;break c}break};default:{p=i;q=j&255;n=24;break c}}}}while(0);if((n|0)==24){n=0;if((1<<(q&31)&c[18232+((q>>>5|(d[19512+p|0]|0)<<3)<<2)>>2]|0)==0){n=26;break}}j=e+2|0;if((j|0)==(f|0)){h=-1;n=35;break}else{b=e;e=j}}if((n|0)==26){c[g>>2]=e;h=0;return h|0}else if((n|0)==27){if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((n|0)==29){if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((n|0)==31){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((n|0)==33){c[g>>2]=b+4;h=28;return h|0}else if((n|0)==34){c[g>>2]=e;h=0;return h|0}else if((n|0)==35){return h|0}return 0}function Qf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((e|0)==(f|0)){h=-1;return h|0}do{if((a[e]|0)==0){if((a[e+1|0]|0)!=45){break}i=e+2|0;if((i|0)==(f|0)){h=-1;return h|0}j=b+72|0;k=f;l=i;a:while(1){i=a[l]|0;m=a[l+1|0]|0;b:do{if(i<<24>>24==0){switch(d[j+(m&255)|0]|0){case 7:{n=15;break b;break};case 0:case 1:case 8:{n=17;break a;break};case 27:{o=l+2|0;if((o|0)==(f|0)){h=-1;n=28;break a}if((a[o]|0)!=0){p=o;break b}if((a[l+3|0]|0)==45){n=22;break a}else{p=o;break b}break};case 5:{if((k-l|0)<2){h=-2;n=28;break a}p=l+2|0;break b;break};case 6:{if((k-l|0)<3){h=-2;n=28;break a}p=l+3|0;break b;break};default:{n=27;break b}}}else{switch(i&255|0){case 216:case 217:case 218:case 219:{n=15;break b;break};case 220:case 221:case 222:case 223:{n=17;break a;break};case 255:{break};default:{n=27;break b}}if(((m&255)-254|0)>>>0<2>>>0){n=17;break a}else{n=27}}}while(0);if((n|0)==15){n=0;if((k-l|0)<4){h=-2;n=28;break}p=l+4|0}else if((n|0)==27){n=0;p=l+2|0}if((p|0)==(f|0)){h=-1;n=28;break}else{l=p}}if((n|0)==17){c[g>>2]=l;h=0;return h|0}else if((n|0)==22){k=l+4|0;if((k|0)==(f|0)){h=-1;return h|0}do{if((a[k]|0)==0){if((a[l+5|0]|0)!=62){break}c[g>>2]=l+6;h=13;return h|0}}while(0);c[g>>2]=k;h=0;return h|0}else if((n|0)==28){return h|0}}}while(0);c[g>>2]=e;h=0;return h|0}function Rf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;if((e|0)==(f|0)){h=-1;return h|0}i=a[e]|0;j=i<<24>>24==0;k=a[e+1|0]|0;a:do{if(j){l=k&255;switch(d[b+72+l|0]|0){case 22:case 24:{break a;break};case 7:{m=15;break a;break};case 6:{if((f-e|0)<3){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 5:{if((f-e|0)<2){h=-2;return h|0}c[g>>2]=e;h=0;return h|0};case 29:{n=0;o=l;m=9;break a;break};default:{m=17;break a}}}else{l=i&255;switch(l|0){case 216:case 217:case 218:case 219:{m=15;break a;break};case 255:{p=k&255;if((p-254|0)>>>0<2>>>0){m=17;break a}else{n=255;o=p;m=9;break a}break};case 220:case 221:case 222:case 223:{m=17;break a;break};default:{n=l;o=k&255;m=9;break a}}}}while(0);do{if((m|0)==9){if((1<<(o&31)&c[18232+((o>>>5|d[17968+n|0]<<3)<<2)>>2]|0)!=0){break}c[g>>2]=e;h=0;return h|0}else if((m|0)==15){if((f-e|0)<4){h=-2;return h|0}c[g>>2]=e;h=0;return h|0}else if((m|0)==17){c[g>>2]=e;h=0;return h|0}}while(0);n=e+2|0;if((n|0)==(f|0)){h=-1;return h|0}o=b+72|0;b=e;i=n;b:while(1){l=a[i]|0;p=a[b+3|0]|0;c:do{if(l<<24>>24==0){q=p&255;switch(d[o+q|0]|0){case 22:case 24:case 25:case 26:case 27:{break};case 15:{m=61;break b;break};case 6:{m=28;break b;break};case 7:{m=30;break b;break};case 5:{m=26;break b;break};case 29:{r=0;s=q;m=23;break};case 21:case 9:case 10:{m=32;break b;break};default:{t=i;break b}}}else{q=l&255;switch(q|0){case 220:case 221:case 222:case 223:{t=i;break b;break};case 216:case 217:case 218:case 219:{m=30;break b;break};case 255:{u=p&255;if((u-254|0)>>>0<2>>>0){t=i;break b}else{r=255;s=u;m=23;break c}break};default:{r=q;s=p&255;m=23;break c}}}}while(0);if((m|0)==23){m=0;if((1<<(s&31)&c[18232+((s>>>5|d[19512+r|0]<<3)<<2)>>2]|0)==0){m=25;break}}p=i+2|0;if((p|0)==(f|0)){h=-1;m=76;break}else{b=i;i=p}}do{if((m|0)==25){c[g>>2]=i;h=0;return h|0}else if((m|0)==26){if((f-i|0)<2){h=-2;return h|0}c[g>>2]=i;h=0;return h|0}else if((m|0)==28){if((f-i|0)<3){h=-2;return h|0}c[g>>2]=i;h=0;return h|0}else if((m|0)==30){if((f-i|0)<4){h=-2;return h|0}c[g>>2]=i;h=0;return h|0}else if((m|0)==32){do{if((i-e|0)!=6|j^1){v=11}else{r=k<<24>>24;if((r|0)==88){w=1}else if((r|0)==120){w=0}else{v=11;break}if((a[n]|0)!=0){v=11;break}r=a[e+3|0]|0;if((r|0)==109){x=w}else if((r|0)==77){x=1}else{v=11;break}if((a[e+4|0]|0)!=0){v=11;break}r=a[e+5|0]|0;if((r|0)==108){if((x|0)==0){v=12;break}}else if((r|0)!=76){v=11;break}c[g>>2]=i;h=0;return h|0}}while(0);r=b+4|0;if((r|0)==(f|0)){h=-1;return h|0}s=f;p=r;d:while(1){r=a[p]|0;l=a[p+1|0]|0;e:do{if(r<<24>>24==0){switch(d[o+(l&255)|0]|0){case 6:{if((s-p|0)<3){h=-2;m=76;break d}y=p+3|0;break e;break};case 0:case 1:case 8:{m=54;break d;break};case 15:{q=p+2|0;if((q|0)==(f|0)){h=-1;m=76;break d}if((a[q]|0)!=0){y=q;break e}if((a[p+3|0]|0)==62){m=59;break d}else{y=q;break e}break};case 7:{m=52;break e;break};case 5:{if((s-p|0)<2){h=-2;m=76;break d}y=p+2|0;break e;break};default:{m=60;break e}}}else{switch(r&255|0){case 255:{break};case 220:case 221:case 222:case 223:{m=54;break d;break};case 216:case 217:case 218:case 219:{m=52;break e;break};default:{m=60;break e}}if(((l&255)-254|0)>>>0<2>>>0){m=54;break d}else{m=60}}}while(0);if((m|0)==52){m=0;if((s-p|0)<4){h=-2;m=76;break}y=p+4|0}else if((m|0)==60){m=0;y=p+2|0}if((y|0)==(f|0)){h=-1;m=76;break}else{p=y}}if((m|0)==54){c[g>>2]=p;h=0;return h|0}else if((m|0)==59){c[g>>2]=p+4;h=v;return h|0}else if((m|0)==76){return h|0}}else if((m|0)==61){do{if((i-e|0)!=6|j^1){z=11}else{s=k<<24>>24;if((s|0)==88){A=1}else if((s|0)==120){A=0}else{z=11;break}if((a[n]|0)!=0){z=11;break}s=a[e+3|0]|0;if((s|0)==77){B=1}else if((s|0)==109){B=A}else{z=11;break}if((a[e+4|0]|0)!=0){z=11;break}s=a[e+5|0]|0;if((s|0)==108){if((B|0)==0){z=12;break}}else if((s|0)!=76){z=11;break}c[g>>2]=i;h=0;return h|0}}while(0);p=b+4|0;if((p|0)==(f|0)){h=-1;return h|0}if((a[p]|0)!=0){t=p;break}if((a[b+5|0]|0)!=62){t=p;break}c[g>>2]=b+6;h=z;return h|0}else if((m|0)==76){return h|0}}while(0);c[g>>2]=t;h=0;return h|0}function Sf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if((e|0)==(f|0)){h=-4;return h|0}i=b+72|0;a:do{switch(d[i+(d[e]|0)|0]|0){case 2:{j=e+1|0;if((j|0)==(f|0)){h=-1;return h|0}switch(d[i+(d[j]|0)|0]|0){case 22:case 24:case 29:case 5:case 6:case 7:{c[g>>2]=e;h=29;return h|0};case 15:{h=rg(b,e+2|0,f,g)|0;return h|0};case 16:{k=e+2|0;if((k|0)==(f|0)){h=-1;return h|0}l=d[i+(d[k]|0)|0]|0;if((l|0)==22|(l|0)==24){m=e+3|0;if((m|0)==(f|0)){h=-1;return h|0}else{n=k;o=m}b:while(1){switch(d[i+(d[o]|0)|0]|0){case 21:case 9:case 10:{break b;break};case 30:{p=16;break b;break};case 22:case 24:{break};default:{p=20;break b}}m=o+1|0;if((m|0)==(f|0)){h=-1;p=138;break}else{n=o;o=m}}do{if((p|0)==16){m=n+2|0;if((m|0)==(f|0)){h=-1;return h|0}q=d[i+(d[m]|0)|0]|0;if(!((q|0)==21|(q|0)==9|(q|0)==10|(q|0)==30)){break}c[g>>2]=o;h=0;return h|0}else if((p|0)==20){c[g>>2]=o;h=0;return h|0}else if((p|0)==138){return h|0}}while(0);c[g>>2]=o;h=16;return h|0}else if((l|0)==20){c[g>>2]=e+3;h=33;return h|0}else if((l|0)==27){h=qg(b,e+3|0,f,g)|0;return h|0}else{c[g>>2]=k;h=0;return h|0}break};default:{c[g>>2]=j;h=0;return h|0}}break};case 7:{if((f-e|0)<4){h=-2;return h|0}if((Oc[c[b+348>>2]&255](b,e)|0)!=0){r=18;s=e+4|0;break a}if((Oc[c[b+336>>2]&255](b,e)|0)!=0){r=19;s=e+4|0;break a}c[g>>2]=e;h=0;return h|0};case 6:{if((f-e|0)<3){h=-2;return h|0}if((Oc[c[b+344>>2]&255](b,e)|0)!=0){r=18;s=e+3|0;break a}if((Oc[c[b+332>>2]&255](b,e)|0)!=0){r=19;s=e+3|0;break a}c[g>>2]=e;h=0;return h|0};case 9:{if((e+1|0)!=(f|0)){p=3;break a}c[g>>2]=f;h=-15;return h|0};case 19:{q=e+1|0;if((q|0)==(f|0)){h=-1;return h|0}c:do{switch(d[i+(d[q]|0)|0]|0){case 6:{if((f-q|0)<3){h=-2;return h|0}if((Oc[c[b+344>>2]&255](b,q)|0)!=0){t=e+4|0;break c}c[g>>2]=q;h=0;return h|0};case 5:{if((f-q|0)<2){h=-2;return h|0}if((Oc[c[b+340>>2]&255](b,q)|0)!=0){t=e+3|0;break c}c[g>>2]=q;h=0;return h|0};case 29:{c[g>>2]=q;h=0;return h|0};case 22:case 24:{t=e+2|0;break};case 7:{if((f-q|0)<4){h=-2;return h|0}if((Oc[c[b+348>>2]&255](b,q)|0)!=0){t=e+5|0;break c}c[g>>2]=q;h=0;return h|0};default:{c[g>>2]=q;h=0;return h|0}}}while(0);if((t|0)==(f|0)){h=-20;return h|0}q=f;j=b+328|0;k=b+332|0;l=b+336|0;m=t;d:while(1){switch(d[i+(d[m]|0)|0]|0){case 9:case 10:case 21:case 32:case 11:case 30:case 36:{p=85;break d;break};case 6:{if((q-m|0)<3){h=-2;p=138;break d}if((Oc[c[k>>2]&255](b,m)|0)==0){p=78;break d}u=m+3|0;break};case 29:{p=70;break d;break};case 22:case 24:case 25:case 26:case 27:{u=m+1|0;break};case 5:{if((q-m|0)<2){h=-2;p=138;break d}if((Oc[c[j>>2]&255](b,m)|0)==0){p=74;break d}u=m+2|0;break};case 7:{if((q-m|0)<4){h=-2;p=138;break d}if((Oc[c[l>>2]&255](b,m)|0)==0){p=82;break d}u=m+4|0;break};default:{p=86;break d}}if((u|0)==(f|0)){h=-20;p=138;break}else{m=u}}if((p|0)==70){c[g>>2]=m;h=0;return h|0}else if((p|0)==74){c[g>>2]=m;h=0;return h|0}else if((p|0)==78){c[g>>2]=m;h=0;return h|0}else if((p|0)==82){c[g>>2]=m;h=0;return h|0}else if((p|0)==85){c[g>>2]=m;h=20;return h|0}else if((p|0)==86){c[g>>2]=m;h=0;return h|0}else if((p|0)==138){return h|0}break};case 21:case 10:{p=3;break};case 5:{if((f-e|0)<2){h=-2;return h|0}if((Oc[c[b+340>>2]&255](b,e)|0)!=0){r=18;s=e+2|0;break a}if((Oc[c[b+328>>2]&255](b,e)|0)!=0){r=19;s=e+2|0;break a}c[g>>2]=e;h=0;return h|0};case 13:{h=sg(13,b,e+1|0,f,g)|0;return h|0};case 32:{l=e+1|0;if((l|0)==(f|0)){h=-24;return h|0}switch(d[i+(d[l]|0)|0]|0){case 33:{c[g>>2]=e+2;h=36;return h|0};case 9:case 10:case 21:case 11:case 35:case 36:case 32:{c[g>>2]=l;h=24;return h|0};case 15:{c[g>>2]=e+2;h=35;return h|0};case 34:{c[g>>2]=e+2;h=37;return h|0};default:{c[g>>2]=l;h=0;return h|0}}break};case 12:{h=sg(12,b,e+1|0,f,g)|0;return h|0};case 31:{c[g>>2]=e+1;h=23;return h|0};case 36:{c[g>>2]=e+1;h=21;return h|0};case 22:case 24:{r=18;s=e+1|0;break};case 25:case 26:case 27:{r=19;s=e+1|0;break};case 11:{c[g>>2]=e+1;h=17;return h|0};case 30:{h=pg(b,e+1|0,f,g)|0;return h|0};case 35:{c[g>>2]=e+1;h=38;return h|0};case 20:{c[g>>2]=e+1;h=25;return h|0};case 4:{l=e+1|0;if((l|0)==(f|0)){h=-26;return h|0}do{if((a[l]|0)==93){q=e+2|0;if((q|0)==(f|0)){h=-1;return h|0}if((a[q]|0)!=62){break}c[g>>2]=e+3;h=34;return h|0}}while(0);c[g>>2]=l;h=26;return h|0};default:{c[g>>2]=e;h=0;return h|0}}}while(0);if((p|0)==3){u=e+1|0;e:do{if((u|0)!=(f|0)){t=e;o=u;while(1){n=d[i+(d[o]|0)|0]|0;if((n|0)==9){if((t+2|0)==(f|0)){break}}else if(!((n|0)==21|(n|0)==10)){break}n=o+1|0;if((n|0)==(f|0)){break e}else{t=o;o=n}}c[g>>2]=o;h=15;return h|0}}while(0);c[g>>2]=f;h=15;return h|0}f:do{if((s|0)!=(f|0)){u=f;e=b+328|0;t=b+332|0;l=b+336|0;n=s;g:while(1){switch(d[i+(d[n]|0)|0]|0){case 29:{p=111;break g;break};case 22:case 24:case 25:case 26:case 27:{v=n+1|0;break};case 7:{if((u-n|0)<4){h=-2;p=138;break g}if((Oc[c[l>>2]&255](b,n)|0)==0){p=123;break g}v=n+4|0;break};case 33:{p=130;break g;break};case 6:{if((u-n|0)<3){h=-2;p=138;break g}if((Oc[c[t>>2]&255](b,n)|0)==0){p=119;break g}v=n+3|0;break};case 11:case 32:case 35:case 36:case 20:case 30:case 21:case 9:case 10:{p=126;break g;break};case 34:{p=127;break g;break};case 15:{p=133;break g;break};case 5:{if((u-n|0)<2){h=-2;p=138;break g}if((Oc[c[e>>2]&255](b,n)|0)==0){p=115;break g}v=n+2|0;break};default:{p=136;break g}}if((v|0)==(f|0)){break f}else{n=v}}if((p|0)==111){c[g>>2]=n;h=0;return h|0}else if((p|0)==115){c[g>>2]=n;h=0;return h|0}else if((p|0)==119){c[g>>2]=n;h=0;return h|0}else if((p|0)==123){c[g>>2]=n;h=0;return h|0}else if((p|0)==126){c[g>>2]=n;h=r;return h|0}else if((p|0)==127){if((r|0)==19){c[g>>2]=n;h=0;return h|0}else{c[g>>2]=n+1;h=32;return h|0}}else if((p|0)==130){if((r|0)==19){c[g>>2]=n;h=0;return h|0}else{c[g>>2]=n+1;h=31;return h|0}}else if((p|0)==133){if((r|0)==19){c[g>>2]=n;h=0;return h|0}else{c[g>>2]=n+1;h=30;return h|0}}else if((p|0)==136){c[g>>2]=n;h=0;return h|0}else if((p|0)==138){return h|0}}}while(0);h=-r|0;return h|0}function Tf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;h=i;i=i+8|0;j=h|0;a:do{if((e|0)==(f|0)){k=-4}else{l=b+72|0;b:do{switch(d[l+(d[e]|0)|0]|0){case 0:case 1:case 8:{c[g>>2]=e;k=0;break a;break};case 5:{if((f-e|0)<2){k=-2;break a}if((Oc[c[b+352>>2]&255](b,e)|0)==0){m=e+2|0;break b}else{c[g>>2]=e;k=0;break a}break};case 6:{if((f-e|0)<3){k=-2;break a}if((Oc[c[b+356>>2]&255](b,e)|0)==0){m=e+3|0;break b}else{c[g>>2]=e;k=0;break a}break};case 7:{if((f-e|0)<4){k=-2;break a}if((Oc[c[b+360>>2]&255](b,e)|0)==0){m=e+4|0;break b}else{c[g>>2]=e;k=0;break a}break};case 2:{n=e+1|0;if((n|0)==(f|0)){k=-1;break a}c:do{switch(d[l+(d[n]|0)|0]|0){case 16:{o=e+2|0;if((o|0)==(f|0)){k=-1;break a}p=d[l+(d[o]|0)|0]|0;if((p|0)==20){q=e+3|0;if((f-q|0)<6){k=-1;break a}else{r=q;s=0}while(1){if((a[r]|0)!=(a[17816+s|0]|0)){t=26;break}q=s+1|0;u=r+1|0;if((q|0)<6){r=u;s=q}else{t=28;break}}if((t|0)==26){c[g>>2]=r;k=0;break a}else if((t|0)==28){c[g>>2]=u;k=8;break a}}else if((p|0)==27){k=qg(b,e+3|0,f,g)|0;break a}else{c[g>>2]=o;k=0;break a}break};case 7:{if((f-n|0)<4){k=-2;break a}if((Oc[c[b+348>>2]&255](b,n)|0)==0){c[g>>2]=n;k=0;break a}else{v=e+5|0;break c}break};case 22:case 24:{v=e+2|0;break};case 5:{if((f-n|0)<2){k=-2;break a}if((Oc[c[b+340>>2]&255](b,n)|0)==0){c[g>>2]=n;k=0;break a}else{v=e+3|0;break c}break};case 15:{k=rg(b,e+2|0,f,g)|0;break a;break};case 17:{q=e+2|0;if((q|0)==(f|0)){k=-1;break a}d:do{switch(d[l+(d[q]|0)|0]|0){case 29:{c[g>>2]=q;k=0;break a;break};case 22:case 24:{w=e+3|0;break};case 5:{if((f-q|0)<2){k=-2;break a}if((Oc[c[b+340>>2]&255](b,q)|0)==0){c[g>>2]=q;k=0;break a}else{w=e+4|0;break d}break};case 6:{if((f-q|0)<3){k=-2;break a}if((Oc[c[b+344>>2]&255](b,q)|0)==0){c[g>>2]=q;k=0;break a}else{w=e+5|0;break d}break};case 7:{if((f-q|0)<4){k=-2;break a}if((Oc[c[b+348>>2]&255](b,q)|0)==0){c[g>>2]=q;k=0;break a}else{w=e+6|0;break d}break};default:{c[g>>2]=q;k=0;break a}}}while(0);if((w|0)==(f|0)){k=-1;break a}q=f;o=b+328|0;p=b+332|0;x=b+336|0;y=w;e:while(1){switch(d[l+(d[y]|0)|0]|0){case 5:{if((q-y|0)<2){k=-2;break a}if((Oc[c[o>>2]&255](b,y)|0)==0){t=56;break e}z=y+2|0;break};case 6:{if((q-y|0)<3){k=-2;break a}if((Oc[c[p>>2]&255](b,y)|0)==0){t=60;break e}z=y+3|0;break};case 7:{if((q-y|0)<4){k=-2;break a}if((Oc[c[x>>2]&255](b,y)|0)==0){t=64;break e}z=y+4|0;break};case 21:case 9:case 10:{t=51;break e;break};case 29:{t=52;break e;break};case 22:case 24:case 25:case 26:case 27:{z=y+1|0;break};case 11:{t=71;break e;break};default:{t=72;break e}}if((z|0)==(f|0)){k=-1;break a}else{y=z}}if((t|0)==51){x=y+1|0;if((x|0)==(f|0)){k=-1;break a}else{A=y;B=x}while(1){x=d[l+(d[B]|0)|0]|0;if((x|0)==11){t=69;break}else if(!((x|0)==21|(x|0)==9|(x|0)==10)){t=70;break}x=B+1|0;if((x|0)==(f|0)){k=-1;break a}else{A=B;B=x}}if((t|0)==69){c[g>>2]=A+2;k=5;break a}else if((t|0)==70){c[g>>2]=B;k=0;break a}}else if((t|0)==52){c[g>>2]=y;k=0;break a}else if((t|0)==56){c[g>>2]=y;k=0;break a}else if((t|0)==60){c[g>>2]=y;k=0;break a}else if((t|0)==64){c[g>>2]=y;k=0;break a}else if((t|0)==71){c[g>>2]=y+1;k=5;break a}else if((t|0)==72){c[g>>2]=y;k=0;break a}break};case 29:{c[g>>2]=n;k=0;break a;break};case 6:{if((f-n|0)<3){k=-2;break a}if((Oc[c[b+344>>2]&255](b,n)|0)==0){c[g>>2]=n;k=0;break a}else{v=e+4|0;break c}break};default:{c[g>>2]=n;k=0;break a}}}while(0);if((v|0)==(f|0)){k=-1;break a}n=f;x=b+328|0;q=b+332|0;p=b+336|0;o=v;f:while(1){switch(d[l+(d[o]|0)|0]|0){case 21:case 9:case 10:{t=75;break f;break};case 22:case 24:case 25:case 26:case 27:{C=o+1|0;break};case 29:{t=76;break f;break};case 11:{D=o;t=186;break f;break};case 17:{E=o;break f;break};case 5:{if((n-o|0)<2){k=-2;break a}if((Oc[c[x>>2]&255](b,o)|0)==0){t=80;break f}C=o+2|0;break};case 7:{if((n-o|0)<4){k=-2;break a}if((Oc[c[p>>2]&255](b,o)|0)==0){t=88;break f}C=o+4|0;break};case 6:{if((n-o|0)<3){k=-2;break a}if((Oc[c[q>>2]&255](b,o)|0)==0){t=84;break f}C=o+3|0;break};default:{t=191;break f}}if((C|0)==(f|0)){k=-1;break a}else{o=C}}g:do{if((t|0)==75){F=o+1|0;if((F|0)==(f|0)){k=-1;break a}else{G=o;H=F}h:while(1){switch(d[l+(d[H]|0)|0]|0){case 22:case 24:{t=94;break h;break};case 5:{t=95;break h;break};case 7:{t=103;break h;break};case 11:{D=H;t=186;break g;break};case 17:{E=H;break g;break};case 6:{t=99;break h;break};case 21:case 9:case 10:{break};case 29:{t=93;break h;break};default:{t=107;break h}}F=H+1|0;if((F|0)==(f|0)){k=-1;break a}else{G=H;H=F}}do{if((t|0)==93){c[g>>2]=H;k=0;break a}else if((t|0)==94){I=G+2|0}else if((t|0)==95){if((n-H|0)<2){k=-2;break a}if((Oc[c[b+340>>2]&255](b,H)|0)==0){c[g>>2]=H;k=0;break a}else{I=G+3|0;break}}else if((t|0)==99){if((n-H|0)<3){k=-2;break a}if((Oc[c[b+344>>2]&255](b,H)|0)==0){c[g>>2]=H;k=0;break a}else{I=G+4|0;break}}else if((t|0)==103){if((n-H|0)<4){k=-2;break a}if((Oc[c[b+348>>2]&255](b,H)|0)==0){c[g>>2]=H;k=0;break a}else{I=G+5|0;break}}else if((t|0)==107){c[g>>2]=H;k=0;break a}}while(0);c[j>>2]=I;if((I|0)==(f|0)){k=-1;break a}y=b+352|0;F=b+356|0;J=b+360|0;K=b+340|0;L=b+344|0;M=b+348|0;N=I;i:while(1){j:do{switch(d[l+(d[N]|0)|0]|0){case 22:case 24:case 25:case 26:case 27:{O=N+1|0;c[j>>2]=O;P=O;break};case 7:{if((n-N|0)<4){k=-2;break a}O=(Oc[c[p>>2]&255](b,N)|0)==0;Q=c[j>>2]|0;if(O){t=124;break i}O=Q+4|0;c[j>>2]=O;P=O;break};case 21:case 9:case 10:{O=N+1|0;c[j>>2]=O;if((O|0)==(f|0)){k=-1;break a}else{R=O}while(1){O=a[l+(d[R]|0)|0]|0;if(O<<24>>24==14){S=R;t=130;break j}T=O&255;if(!((T|0)==21|(T|0)==10|(T|0)==9)){t=129;break i}T=R+1|0;c[j>>2]=T;if((T|0)==(f|0)){k=-1;break a}else{R=T}}break};case 29:{t=112;break i;break};case 14:{S=N;t=130;break};case 5:{if((n-N|0)<2){k=-2;break a}T=(Oc[c[x>>2]&255](b,N)|0)==0;U=c[j>>2]|0;if(T){t=116;break i}T=U+2|0;c[j>>2]=T;P=T;break};case 6:{if((n-N|0)<3){k=-2;break a}T=(Oc[c[q>>2]&255](b,N)|0)==0;V=c[j>>2]|0;if(T){t=120;break i}T=V+3|0;c[j>>2]=T;P=T;break};default:{t=185;break i}}}while(0);do{if((t|0)==130){t=0;T=S+1|0;c[j>>2]=T;if((T|0)==(f|0)){k=-1;break a}else{W=S;X=T}while(1){Y=a[l+(d[X]|0)|0]|0;if((Y&-2)<<24>>24==12){break}T=Y&255;if(!((T|0)==21|(T|0)==10|(T|0)==9)){t=134;break i}T=X+1|0;c[j>>2]=T;if((T|0)==(f|0)){k=-1;break a}else{W=X;X=T}}T=W+2|0;c[j>>2]=T;if((T|0)==(f|0)){k=-1;break a}else{Z=T}while(1){T=a[l+(d[Z]|0)|0]|0;if(T<<24>>24==Y<<24>>24){break}switch(T&255|0){case 3:{_=og(b,Z+1|0,f,j)|0;if((_|0)<1){t=154;break i}$=c[j>>2]|0;break};case 6:{if((n-Z|0)<3){k=-2;break a}T=(Oc[c[F>>2]&255](b,Z)|0)==0;aa=c[j>>2]|0;if(!T){t=144;break i}T=aa+3|0;c[j>>2]=T;$=T;break};case 2:{t=156;break i;break};case 7:{if((n-Z|0)<4){k=-2;break a}T=(Oc[c[J>>2]&255](b,Z)|0)==0;ba=c[j>>2]|0;if(!T){t=148;break i}T=ba+4|0;c[j>>2]=T;$=T;break};case 0:case 1:case 8:{t=150;break i;break};case 5:{if((n-Z|0)<2){k=-2;break a}T=(Oc[c[y>>2]&255](b,Z)|0)==0;ca=c[j>>2]|0;if(!T){t=140;break i}T=ca+2|0;c[j>>2]=T;$=T;break};default:{T=Z+1|0;c[j>>2]=T;$=T}}if(($|0)==(f|0)){k=-1;break a}else{Z=$}}da=Z+1|0;c[j>>2]=da;if((da|0)==(f|0)){k=-1;break a}switch(d[l+(d[da]|0)|0]|0){case 21:case 9:case 10:{break};case 11:{ea=da;t=179;break i;break};case 17:{fa=da;t=180;break i;break};default:{t=161;break i}}T=Z+2|0;c[j>>2]=T;if((T|0)==(f|0)){k=-1;break a}else{ga=T}k:while(1){switch(d[l+(d[ga]|0)|0]|0){case 11:{ea=ga;t=179;break i;break};case 17:{fa=ga;t=180;break i;break};case 7:{t=174;break k;break};case 21:case 9:case 10:{break};case 6:{t=170;break k;break};case 29:{t=164;break i;break};case 22:case 24:{t=165;break k;break};case 5:{t=166;break k;break};default:{t=184;break i}}T=ga+1|0;c[j>>2]=T;if((T|0)==(f|0)){k=-1;break a}else{ga=T}}if((t|0)==165){t=0;T=ga+1|0;c[j>>2]=T;P=T;break}else if((t|0)==166){t=0;if((n-ga|0)<2){k=-2;break a}T=(Oc[c[K>>2]&255](b,ga)|0)==0;ha=c[j>>2]|0;if(T){t=168;break i}T=ha+2|0;c[j>>2]=T;P=T;break}else if((t|0)==170){t=0;if((n-ga|0)<3){k=-2;break a}T=(Oc[c[L>>2]&255](b,ga)|0)==0;ia=c[j>>2]|0;if(T){t=172;break i}T=ia+3|0;c[j>>2]=T;P=T;break}else if((t|0)==174){t=0;if((n-ga|0)<4){k=-2;break a}T=(Oc[c[M>>2]&255](b,ga)|0)==0;ja=c[j>>2]|0;if(T){t=176;break i}T=ja+4|0;c[j>>2]=T;P=T;break}}}while(0);if((P|0)==(f|0)){k=-1;break a}else{N=P}}if((t|0)==112){c[g>>2]=N;k=0;break a}else if((t|0)==116){c[g>>2]=U;k=0;break a}else if((t|0)==120){c[g>>2]=V;k=0;break a}else if((t|0)==124){c[g>>2]=Q;k=0;break a}else if((t|0)==129){c[g>>2]=R;k=0;break a}else if((t|0)==134){c[g>>2]=X;k=0;break a}else if((t|0)==140){c[g>>2]=ca;k=0;break a}else if((t|0)==144){c[g>>2]=aa;k=0;break a}else if((t|0)==148){c[g>>2]=ba;k=0;break a}else if((t|0)==150){c[g>>2]=Z;k=0;break a}else if((t|0)==154){if((_|0)!=0){k=_;break a}c[g>>2]=c[j>>2];k=0;break a}else if((t|0)==156){c[g>>2]=Z;k=0;break a}else if((t|0)==161){c[g>>2]=da;k=0;break a}else if((t|0)==164){c[g>>2]=ga;k=0;break a}else if((t|0)==168){c[g>>2]=ha;k=0;break a}else if((t|0)==172){c[g>>2]=ia;k=0;break a}else if((t|0)==176){c[g>>2]=ja;k=0;break a}else if((t|0)==179){c[g>>2]=ea+1;k=1;break a}else if((t|0)==180){M=fa+1|0;c[j>>2]=M;if((M|0)==(f|0)){k=-1;break a}if((a[M]|0)==62){c[g>>2]=fa+2;k=3;break a}else{c[g>>2]=M;k=0;break a}}else if((t|0)==184){c[g>>2]=ga;k=0;break a}else if((t|0)==185){c[g>>2]=N;k=0;break a}}else if((t|0)==76){c[g>>2]=o;k=0;break a}else if((t|0)==80){c[g>>2]=o;k=0;break a}else if((t|0)==84){c[g>>2]=o;k=0;break a}else if((t|0)==88){c[g>>2]=o;k=0;break a}else if((t|0)==191){c[g>>2]=o;k=0;break a}}while(0);if((t|0)==186){c[g>>2]=D+1;k=2;break a}o=E+1|0;if((o|0)==(f|0)){k=-1;break a}if((a[o]|0)==62){c[g>>2]=E+2;k=4;break a}else{c[g>>2]=o;k=0;break a}break};case 3:{k=og(b,e+1|0,f,g)|0;break a;break};case 9:{o=e+1|0;if((o|0)==(f|0)){k=-3;break a}c[g>>2]=(a[l+(d[o]|0)|0]|0)==10?e+2|0:o;k=7;break a;break};case 10:{c[g>>2]=e+1;k=7;break a;break};case 4:{o=e+1|0;if((o|0)==(f|0)){k=-5;break a}if((a[o]|0)!=93){m=o;break b}n=e+2|0;if((n|0)==(f|0)){k=-5;break a}if((a[n]|0)!=62){m=o;break b}c[g>>2]=n;k=0;break a;break};default:{m=e+1|0}}}while(0);l:do{if((m|0)!=(f|0)){n=f;o=b+352|0;q=b+356|0;x=b+360|0;p=m;m:while(1){n:do{switch(d[l+(d[p]|0)|0]|0){case 5:{if((n-p|0)<2){t=220;break m}if((Oc[c[o>>2]&255](b,p)|0)!=0){t=220;break m}ka=p+2|0;break};case 3:case 2:case 0:case 1:case 8:case 9:case 10:{t=235;break m;break};case 6:{if((n-p|0)<3){t=224;break m}if((Oc[c[q>>2]&255](b,p)|0)!=0){t=224;break m}ka=p+3|0;break};case 7:{if((n-p|0)<4){t=228;break m}if((Oc[c[x>>2]&255](b,p)|0)!=0){t=228;break m}ka=p+4|0;break};case 4:{M=p+1|0;if((M|0)==(f|0)){t=235;break m}if((a[M]|0)!=93){ka=M;break n}la=p+2|0;if((la|0)==(f|0)){t=235;break m}if((a[la]|0)==62){t=234;break m}else{ka=M}break};default:{ka=p+1|0}}}while(0);if((ka|0)==(f|0)){break l}else{p=ka}}if((t|0)==220){c[g>>2]=p;k=6;break a}else if((t|0)==224){c[g>>2]=p;k=6;break a}else if((t|0)==228){c[g>>2]=p;k=6;break a}else if((t|0)==234){c[g>>2]=la;k=0;break a}else if((t|0)==235){c[g>>2]=p;k=6;break a}}}while(0);c[g>>2]=f;k=6}}while(0);i=h;return k|0}function Uf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((e|0)==(f|0)){h=-4;return h|0}i=b+72|0;a:do{switch(d[i+(d[e]|0)|0]|0){case 9:{j=e+1|0;if((j|0)==(f|0)){h=-1;return h|0}c[g>>2]=(a[i+(d[j]|0)|0]|0)==10?e+2|0:j;h=7;return h|0};case 5:{if((f-e|0)<2){h=-2;return h|0}if((Oc[c[b+352>>2]&255](b,e)|0)==0){k=e+2|0;break a}c[g>>2]=e;h=0;return h|0};case 4:{j=e+1|0;if((j|0)==(f|0)){h=-1;return h|0}if((a[j]|0)!=93){k=j;break a}l=e+2|0;if((l|0)==(f|0)){h=-1;return h|0}if((a[l]|0)!=62){k=j;break a}c[g>>2]=e+3;h=40;return h|0};case 7:{if((f-e|0)<4){h=-2;return h|0}if((Oc[c[b+360>>2]&255](b,e)|0)==0){k=e+4|0;break a}c[g>>2]=e;h=0;return h|0};case 0:case 1:case 8:{c[g>>2]=e;h=0;return h|0};case 6:{if((f-e|0)<3){h=-2;return h|0}if((Oc[c[b+356>>2]&255](b,e)|0)==0){k=e+3|0;break a}c[g>>2]=e;h=0;return h|0};case 10:{c[g>>2]=e+1;h=7;return h|0};default:{k=e+1|0}}}while(0);b:do{if((k|0)!=(f|0)){e=f;j=b+352|0;l=b+356|0;m=b+360|0;n=k;c:while(1){switch(d[i+(d[n]|0)|0]|0){case 5:{if((e-n|0)<2){o=30;break c}if((Oc[c[j>>2]&255](b,n)|0)!=0){o=30;break c}p=n+2|0;break};case 6:{if((e-n|0)<3){o=34;break c}if((Oc[c[l>>2]&255](b,n)|0)!=0){o=34;break c}p=n+3|0;break};case 7:{if((e-n|0)<4){o=38;break c}if((Oc[c[m>>2]&255](b,n)|0)!=0){o=38;break c}p=n+4|0;break};case 0:case 1:case 8:case 9:case 10:case 4:{o=40;break c;break};default:{p=n+1|0}}if((p|0)==(f|0)){break b}else{n=p}}if((o|0)==30){c[g>>2]=n;h=6;return h|0}else if((o|0)==34){c[g>>2]=n;h=6;return h|0}else if((o|0)==38){c[g>>2]=n;h=6;return h|0}else if((o|0)==40){c[g>>2]=n;h=6;return h|0}}}while(0);c[g>>2]=f;h=6;return h|0}function Vf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;do{if((e|0)==(f|0)){h=-4}else{i=b+72|0;j=e;a:while(1){switch(d[i+(d[j]|0)|0]|0){case 3:{k=7;break a;break};case 7:{l=j+4|0;break};case 9:{k=14;break a;break};case 2:{k=10;break a;break};case 10:{k=11;break a;break};case 6:{l=j+3|0;break};case 5:{l=j+2|0;break};case 21:{k=18;break a;break};default:{l=j+1|0}}if((l|0)==(f|0)){k=23;break}else{j=l}}if((k|0)==7){if((j|0)==(e|0)){h=og(b,e+1|0,f,g)|0;break}else{c[g>>2]=j;h=6;break}}else if((k|0)==10){c[g>>2]=j;h=0;break}else if((k|0)==11){if((j|0)==(e|0)){c[g>>2]=e+1;h=7;break}else{c[g>>2]=j;h=6;break}}else if((k|0)==14){if((j|0)!=(e|0)){c[g>>2]=j;h=6;break}m=e+1|0;if((m|0)==(f|0)){h=-3;break}c[g>>2]=(a[i+(d[m]|0)|0]|0)==10?e+2|0:m;h=7;break}else if((k|0)==18){if((j|0)==(e|0)){c[g>>2]=e+1;h=39;break}else{c[g>>2]=j;h=6;break}}else if((k|0)==23){c[g>>2]=f;h=6;break}}}while(0);return h|0}function Wf(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if((e|0)==(f|0)){h=-4;return h|0}i=b+72|0;j=e;a:while(1){switch(d[i+(d[j]|0)|0]|0){case 6:{k=j+3|0;break};case 30:{l=10;break a;break};case 7:{k=j+4|0;break};case 3:{l=7;break a;break};case 9:{l=16;break a;break};case 10:{l=13;break a;break};case 5:{k=j+2|0;break};default:{k=j+1|0}}if((k|0)==(f|0)){l=22;break}else{j=k}}if((l|0)==7){if((j|0)==(e|0)){h=og(b,e+1|0,f,g)|0;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==10){if((j|0)==(e|0)){k=pg(b,e+1|0,f,g)|0;h=(k|0)==22?0:k;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==13){if((j|0)==(e|0)){c[g>>2]=e+1;h=7;return h|0}else{c[g>>2]=j;h=6;return h|0}}else if((l|0)==16){if((j|0)!=(e|0)){c[g>>2]=j;h=6;return h|0}j=e+1|0;if((j|0)==(f|0)){h=-3;return h|0}c[g>>2]=(a[i+(d[j]|0)|0]|0)==10?e+2|0:j;h=7;return h|0}else if((l|0)==22){c[g>>2]=f;h=6;return h|0}return 0}function Xf(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=b+72|0;b=e;e=c;a:while(1){g=a[e]|0;switch(d[f+(g&255)|0]|0){case 5:{h=b;i=e;j=g;break};case 6:{k=b;l=e;m=g;n=5;break};case 29:case 22:case 24:case 25:case 26:case 27:{if((a[b]|0)==g<<24>>24){b=b+1|0;e=e+1|0;continue a}else{o=0;n=13;break a}break};case 7:{n=3;break};default:{n=10;break a}}if((n|0)==3){n=0;c=e+1|0;if(g<<24>>24!=(a[b]|0)){o=0;n=13;break}k=b+1|0;l=c;m=a[c]|0;n=5}if((n|0)==5){n=0;c=l+1|0;if(m<<24>>24!=(a[k]|0)){o=0;n=13;break}h=k+1|0;i=c;j=a[c]|0}if(j<<24>>24!=(a[h]|0)){o=0;n=13;break}if((a[i+1|0]|0)==(a[h+1|0]|0)){b=h+2|0;e=i+2|0}else{o=0;n=13;break}}if((n|0)==10){i=a[b]|0;if(g<<24>>24==i<<24>>24){o=1;return o|0}switch(d[f+(i&255)|0]|0){case 5:case 6:case 7:case 29:case 22:case 24:case 25:case 26:case 27:{o=0;return o|0};default:{}}o=1;return o|0}else if((n|0)==13){return o|0}return 0}function Yf(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;b=a[e]|0;f=(c|0)==(d|0);a:do{if(b<<24>>24==0){g=f}else{h=c;i=e;j=b;k=f;while(1){if(k){l=0;m=6;break}if((a[h]|0)!=j<<24>>24){l=0;m=6;break}n=h+1|0;o=i+1|0;p=a[o]|0;q=(n|0)==(d|0);if(p<<24>>24==0){g=q;break a}else{h=n;i=o;j=p;k=q}}if((m|0)==6){return l|0}}}while(0);l=g&1;return l|0}function Zf(a,b){a=a|0;b=b|0;var c=0;c=a+72|0;a=b;a:while(1){switch(d[c+(d[a]|0)|0]|0|0){case 29:case 22:case 24:case 25:case 26:case 27:{a=a+1|0;continue a;break};case 6:{a=a+3|0;continue a;break};case 7:{a=a+4|0;continue a;break};case 5:{a=a+2|0;continue a;break};default:{break a}}}return a-b|0}function _f(a,b){a=a|0;b=b|0;var c=0;c=a+72|0;a=b;while(1){b=d[c+(d[a]|0)|0]|0;if(!((b|0)==10|(b|0)==9|(b|0)==21)){break}a=a+1|0}return a|0}function $f(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=b+72|0;b=0;i=0;j=1;k=e;a:while(1){e=k+1|0;l=a[e]|0;switch(d[h+(l&255)|0]|0){case 13:{if((j|0)!=2){if((i|0)>=(f|0)){b=13;i=i;j=2;k=e;continue a}c[g+(i<<4)+4>>2]=k+2;b=13;i=i;j=2;k=e;continue a}if((b|0)!=13){b=b;i=i;j=2;k=e;continue a}if((i|0)<(f|0)){c[g+(i<<4)+8>>2]=e}b=13;i=i+1|0;j=0;k=e;continue a;break};case 9:case 10:{if((j|0)==1){b=b;i=i;j=0;k=e;continue a}if(!((j|0)==2&(i|0)<(f|0))){b=b;i=i;j=j;k=e;continue a}a[g+(i<<4)+12|0]=0;b=b;i=i;j=2;k=e;continue a;break};case 3:{if((i|0)>=(f|0)){b=b;i=i;j=j;k=e;continue a}a[g+(i<<4)+12|0]=0;b=b;i=i;j=j;k=e;continue a;break};case 6:{do{if((j|0)==0){if((i|0)>=(f|0)){m=1;break}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;m=1}else{m=j}}while(0);b=b;i=i;j=m;k=k+3|0;continue a;break};case 12:{if((j|0)!=2){if((i|0)>=(f|0)){b=12;i=i;j=2;k=e;continue a}c[g+(i<<4)+4>>2]=k+2;b=12;i=i;j=2;k=e;continue a}if((b|0)!=12){b=b;i=i;j=2;k=e;continue a}if((i|0)<(f|0)){c[g+(i<<4)+8>>2]=e}b=12;i=i+1|0;j=0;k=e;continue a;break};case 29:case 22:case 24:{if((j|0)!=0){b=b;i=i;j=j;k=e;continue a}if((i|0)>=(f|0)){b=b;i=i;j=1;k=e;continue a}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;b=b;i=i;j=1;k=e;continue a;break};case 11:case 17:{if((j|0)==2){b=b;i=i;j=2;k=e;continue a}else{break a}break};case 5:{do{if((j|0)==0){if((i|0)>=(f|0)){n=1;break}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;n=1}else{n=j}}while(0);b=b;i=i;j=n;k=k+2|0;continue a;break};case 21:{if((j|0)==1){b=b;i=i;j=0;k=e;continue a}if(!((j|0)==2&(i|0)<(f|0))){b=b;i=i;j=j;k=e;continue a}o=g+(i<<4)+12|0;if((a[o]|0)==0){b=b;i=i;j=2;k=e;continue a}do{if((e|0)!=(c[g+(i<<4)+4>>2]|0)&l<<24>>24==32){p=a[k+2|0]|0;if(p<<24>>24==32){break}if((d[h+(p&255)|0]|0)!=(b|0)){b=b;i=i;j=2;k=e;continue a}}}while(0);a[o]=0;b=b;i=i;j=2;k=e;continue a;break};case 7:{do{if((j|0)==0){if((i|0)>=(f|0)){q=1;break}c[g+(i<<4)>>2]=e;a[g+(i<<4)+12|0]=1;q=1}else{q=j}}while(0);b=b;i=i;j=q;k=k+4|0;continue a;break};default:{b=b;i=i;j=j;k=e;continue a}}}return i|0}function ag(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;b=c+2|0;d=a[b]|0;a:do{if((d<<24>>24|0)==59){e=0;f=12}else if((d<<24>>24|0)==120){g=c+3|0;h=a[g]|0;if(h<<24>>24==59){e=0;f=12;break}else{i=0;j=g;k=h}while(1){h=k<<24>>24;switch(h|0){case 97:case 98:case 99:case 100:case 101:case 102:{l=(i<<4)-87+h|0;break};case 65:case 66:case 67:case 68:case 69:case 70:{l=(i<<4)-55+h|0;break};case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{l=h-48|i<<4;break};default:{l=i}}h=j+1|0;if((l|0)>1114111){m=-1;break}g=a[h]|0;if(g<<24>>24==59){n=l;f=11;break a}else{i=l;j=h;k=g}}return m|0}else{g=0;h=b;o=d;while(1){p=(g*10|0)-48+(o<<24>>24)|0;q=h+1|0;if((p|0)>1114111){m=-1;break}r=a[q]|0;if(r<<24>>24==59){n=p;f=11;break a}else{g=p;h=q;o=r}}return m|0}}while(0);b:do{if((f|0)==11){switch(n>>8|0){case 0:{e=n;f=12;break b;break};case 216:case 217:case 218:case 219:case 220:case 221:case 222:case 223:{m=-1;return m|0};case 255:{break};default:{s=n;break b}}if((n&-2|0)==65534){m=-1}else{s=n;break}return m|0}}while(0);do{if((f|0)==12){if((a[20496+e|0]|0)==0){m=-1}else{s=e;break}return m|0}}while(0);m=s;return m|0}function bg(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;b=d-c|0;do{if((b|0)==4){d=a[c]|0;if((d|0)==97){if((a[c+1|0]|0)!=112){break}if((a[c+2|0]|0)!=111){break}if((a[c+3|0]|0)==115){e=39}else{break}return e|0}else if((d|0)==113){if((a[c+1|0]|0)!=117){break}if((a[c+2|0]|0)!=111){break}if((a[c+3|0]|0)==116){e=34}else{break}return e|0}else{break}}else if((b|0)==2){if((a[c+1|0]|0)!=116){break}d=a[c]|0;if((d|0)==108){e=60;return e|0}else if((d|0)!=103){break}e=62;return e|0}else if((b|0)==3){if((a[c]|0)!=97){break}if((a[c+1|0]|0)!=109){break}if((a[c+2|0]|0)==112){e=38}else{break}return e|0}}while(0);e=0;return e|0}function cg(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;if(e>>>0>=f>>>0){return}h=b+72|0;b=g+4|0;i=g|0;g=e;while(1){switch(d[h+(d[g]|0)|0]|0){case 6:{j=g+3|0;break};case 9:{c[i>>2]=(c[i>>2]|0)+1;e=g+1|0;if((e|0)==(f|0)){k=f}else{k=(a[h+(d[e]|0)|0]|0)==10?g+2|0:e}c[b>>2]=-1;j=k;break};case 5:{j=g+2|0;break};case 7:{j=g+4|0;break};case 10:{c[b>>2]=-1;c[i>>2]=(c[i>>2]|0)+1;j=g+1|0;break};default:{j=g+1|0}}c[b>>2]=(c[b>>2]|0)+1;if(j>>>0<f>>>0){g=j}else{break}}return}function dg(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=f-1|0;f=e+1|0;if((f|0)==(h|0)){i=1;return i|0}e=b+72|0;b=f;a:while(1){f=a[b]|0;switch(d[e+(f&255)|0]|0|0){case 21:{if(f<<24>>24==9){j=6;break a}break};case 25:case 24:case 27:case 13:case 31:case 32:case 34:case 35:case 17:case 14:case 15:case 9:case 10:case 18:case 16:case 33:case 30:case 19:{break};case 26:case 22:{if(f<<24>>24<0){j=8}break};default:{j=8}}if((j|0)==8){j=0;k=f<<24>>24;if(!((k|0)==36|(k|0)==64)){j=9;break}}k=b+1|0;if((k|0)==(h|0)){i=1;j=10;break}else{b=k}}if((j|0)==6){c[g>>2]=b;i=0;return i|0}else if((j|0)==9){c[g>>2]=b;i=0;return i|0}else if((j|0)==10){return i|0}return 0}function eg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;b=c[d>>2]|0;h=c[f>>2]|0;i=g-h|0;a:do{if((e-b|0)>(i|0)){g=b+i|0;while(1){if(g>>>0<=b>>>0){j=g;break a}k=g-1|0;if((a[k]&-64)<<24>>24==-128){g=k}else{j=g;break}}}else{j=e}}while(0);if((b|0)==(j|0)){l=h;m=b;c[d>>2]=m;c[f>>2]=l;return}else{n=h;o=b}while(1){a[n]=a[o]|0;b=o+1|0;h=n+1|0;if((b|0)==(j|0)){l=h;m=j;break}else{n=h;o=b}}c[d>>2]=m;c[f>>2]=l;return}function fg(e,f,g,h,i){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;j=c[h>>2]|0;k=c[f>>2]|0;if((k|0)==(g|0)|(j|0)==(i|0)){l=k;m=j;c[f>>2]=l;c[h>>2]=m;return}n=e+72|0;e=k;k=j;while(1){j=a[e]|0;o=j&255;p=d[n+o|0]|0;if((p|0)==7){q=k+2|0;if((q|0)==(i|0)){l=e;m=k;r=10;break}s=((d[e+1|0]|0)<<12&258048|o<<18&1835008|(d[e+2|0]|0)<<6&4032|a[e+3|0]&63)-65536|0;b[k>>1]=s>>>10|55296;b[q>>1]=s&1023|56320;t=k+4|0;u=e+4|0}else if((p|0)==6){b[k>>1]=(d[e+1|0]|0)<<6&4032|(j&255)<<12|a[e+2|0]&63;t=k+2|0;u=e+3|0}else if((p|0)==5){b[k>>1]=a[e+1|0]&63|(j&255)<<6&1984;t=k+2|0;u=e+2|0}else{b[k>>1]=j<<24>>24;t=k+2|0;u=e+1|0}if((u|0)==(g|0)|(t|0)==(i|0)){l=u;m=t;r=10;break}else{e=u;k=t}}if((r|0)==10){c[f>>2]=l;c[h>>2]=m;return}}function gg(a,b){a=a|0;b=b|0;var e=0;a=d[b]|0;e=d[b+1|0]|0;return 1<<(e&31)&c[18232+(((d[19512+(a>>>2&7)|0]|0)<<3|a<<1&6|e>>>5&1)<<2)>>2]|0}function hg(a,b){a=a|0;b=b|0;var e=0;a=d[b+1|0]|0;e=d[b+2|0]|0;return 1<<(e&31)&c[18232+(((d[19512+(a>>>2&15|(d[b]|0)<<4&240)|0]|0)<<3|a<<1&6|e>>>5&1)<<2)>>2]|0}function ig(a,b){a=a|0;b=b|0;return 0}function jg(a,b){a=a|0;b=b|0;var e=0;a=d[b]|0;e=d[b+1|0]|0;return 1<<(e&31)&c[18232+(((d[17968+(a>>>2&7)|0]|0)<<3|a<<1&6|e>>>5&1)<<2)>>2]|0}function kg(a,b){a=a|0;b=b|0;var e=0;a=d[b+1|0]|0;e=d[b+2|0]|0;return 1<<(e&31)&c[18232+(((d[17968+(a>>>2&15|(d[b]|0)<<4&240)|0]|0)<<3|a<<1&6|e>>>5&1)<<2)>>2]|0}function lg(a,b){a=a|0;b=b|0;var c=0;if((d[b]|0)>>>0<194>>>0){c=1;return c|0}a=d[b+1|0]|0;if((a&128|0)==0){c=1;return c|0}c=(a&192|0)==192|0;return c|0}function mg(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0,h=0,i=0;b=a[c+2|0]|0;a:do{if(b<<24>>24>-1){d=1}else{e=a[c]|0;do{if(e<<24>>24==-17){if((a[c+1|0]|0)!=-65){f=5;break}if((b&255)>>>0>189>>>0){d=1;break a}else{g=191}}else{f=5}}while(0);do{if((f|0)==5){if((b&-64)<<24>>24==-64){d=1;break a}h=a[c+1|0]|0;i=h&255;if(e<<24>>24==-32){if((h&255)>>>0<160>>>0){d=1;break a}d=(i&192|0)==192;break a}if((i&128|0)==0){d=1;break a}if(e<<24>>24!=-19){g=i;break}d=(h&255)>>>0>159>>>0;break a}}while(0);d=(g&192|0)==192}}while(0);return d&1|0}function ng(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0;b=d[c+3|0]|0;do{if((b&128|0)==0|(b&192|0)==192){e=1}else{f=d[c+2|0]|0;if((f&128|0)==0|(f&192|0)==192){e=1;break}f=a[c]|0;g=a[c+1|0]|0;h=g&255;if(f<<24>>24==-16){if((g&255)>>>0<144>>>0){e=1;break}e=(h&192|0)==192;break}if((h&128|0)==0){e=1;break}if(f<<24>>24==-12){e=(g&255)>>>0>143>>>0;break}else{e=(h&192|0)==192;break}}}while(0);return e&1|0}function og(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((e|0)==(f|0)){h=-1;return h|0}i=b+72|0;a:do{switch(d[i+(d[e]|0)|0]|0){case 22:case 24:{j=e+1|0;break};case 29:{c[g>>2]=e;h=0;return h|0};case 19:{k=e+1|0;if((k|0)==(f|0)){h=-1;return h|0}l=a[k]|0;if(l<<24>>24!=120){if((a[i+(l&255)|0]|0)==25){m=k}else{c[g>>2]=k;h=0;return h|0}while(1){n=m+1|0;if((n|0)==(f|0)){h=-1;o=54;break}k=d[i+(d[n]|0)|0]|0;if((k|0)==18){o=33;break}else if((k|0)==25){m=n}else{o=34;break}}if((o|0)==33){c[g>>2]=m+2;h=10;return h|0}else if((o|0)==34){c[g>>2]=n;h=0;return h|0}else if((o|0)==54){return h|0}}k=e+2|0;if((k|0)==(f|0)){h=-1;return h|0}if(((d[i+(d[k]|0)|0]|0)-24|0)>>>0>=2>>>0){c[g>>2]=k;h=0;return h|0}l=e+3|0;if((l|0)==(f|0)){h=-1;return h|0}else{p=k;q=l}while(1){l=d[i+(d[q]|0)|0]|0;if((l|0)==18){o=27;break}else if(!((l|0)==25|(l|0)==24)){o=28;break}l=q+1|0;if((l|0)==(f|0)){h=-1;o=54;break}else{p=q;q=l}}if((o|0)==27){c[g>>2]=p+2;h=10;return h|0}else if((o|0)==28){c[g>>2]=q;h=0;return h|0}else if((o|0)==54){return h|0}break};case 5:{if((f-e|0)<2){h=-2;return h|0}if((Oc[c[b+340>>2]&255](b,e)|0)!=0){j=e+2|0;break a}c[g>>2]=e;h=0;return h|0};case 7:{if((f-e|0)<4){h=-2;return h|0}if((Oc[c[b+348>>2]&255](b,e)|0)!=0){j=e+4|0;break a}c[g>>2]=e;h=0;return h|0};case 6:{if((f-e|0)<3){h=-2;return h|0}if((Oc[c[b+344>>2]&255](b,e)|0)!=0){j=e+3|0;break a}c[g>>2]=e;h=0;return h|0};default:{c[g>>2]=e;h=0;return h|0}}}while(0);if((j|0)==(f|0)){h=-1;return h|0}e=f;q=b+328|0;p=b+332|0;n=b+336|0;m=j;b:while(1){switch(d[i+(d[m]|0)|0]|0){case 5:{if((e-m|0)<2){h=-2;o=54;break b}if((Oc[c[q>>2]&255](b,m)|0)==0){o=41;break b}r=m+2|0;break};case 22:case 24:case 25:case 26:case 27:{r=m+1|0;break};case 7:{if((e-m|0)<4){h=-2;o=54;break b}if((Oc[c[n>>2]&255](b,m)|0)==0){o=49;break b}r=m+4|0;break};case 6:{if((e-m|0)<3){h=-2;o=54;break b}if((Oc[c[p>>2]&255](b,m)|0)==0){o=45;break b}r=m+3|0;break};case 29:{o=37;break b;break};case 18:{o=52;break b;break};default:{o=53;break b}}if((r|0)==(f|0)){h=-1;o=54;break}else{m=r}}if((o|0)==37){c[g>>2]=m;h=0;return h|0}else if((o|0)==41){c[g>>2]=m;h=0;return h|0}else if((o|0)==45){c[g>>2]=m;h=0;return h|0}else if((o|0)==49){c[g>>2]=m;h=0;return h|0}else if((o|0)==52){c[g>>2]=m+1;h=9;return h|0}else if((o|0)==53){c[g>>2]=m;h=0;return h|0}else if((o|0)==54){return h|0}return 0}function pg(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((b|0)==(e|0)){g=-1;return g|0}h=a+72|0;a:do{switch(d[h+(d[b]|0)|0]|0|0){case 29:{c[f>>2]=b;g=0;return g|0};case 5:{if((e-b|0)<2){g=-2;return g|0}if((Oc[c[a+340>>2]&255](a,b)|0)!=0){i=b+2|0;break a}c[f>>2]=b;g=0;return g|0};case 6:{if((e-b|0)<3){g=-2;return g|0}if((Oc[c[a+344>>2]&255](a,b)|0)!=0){i=b+3|0;break a}c[f>>2]=b;g=0;return g|0};case 22:case 24:{i=b+1|0;break};case 7:{if((e-b|0)<4){g=-2;return g|0}if((Oc[c[a+348>>2]&255](a,b)|0)!=0){i=b+4|0;break a}c[f>>2]=b;g=0;return g|0};case 21:case 10:case 9:case 30:{c[f>>2]=b;g=22;return g|0};default:{c[f>>2]=b;g=0;return g|0}}}while(0);if((i|0)==(e|0)){g=-1;return g|0}b=e;j=a+328|0;k=a+332|0;l=a+336|0;m=i;b:while(1){switch(d[h+(d[m]|0)|0]|0|0){case 22:case 24:case 25:case 26:case 27:{n=m+1|0;break};case 7:{if((b-m|0)<4){g=-2;o=39;break b}if((Oc[c[l>>2]&255](a,m)|0)==0){o=34;break b}n=m+4|0;break};case 6:{if((b-m|0)<3){g=-2;o=39;break b}if((Oc[c[k>>2]&255](a,m)|0)==0){o=30;break b}n=m+3|0;break};case 29:{o=22;break b;break};case 18:{o=37;break b;break};case 5:{if((b-m|0)<2){g=-2;o=39;break b}if((Oc[c[j>>2]&255](a,m)|0)==0){o=26;break b}n=m+2|0;break};default:{o=38;break b}}if((n|0)==(e|0)){g=-1;o=39;break}else{m=n}}if((o|0)==22){c[f>>2]=m;g=0;return g|0}else if((o|0)==26){c[f>>2]=m;g=0;return g|0}else if((o|0)==30){c[f>>2]=m;g=0;return g|0}else if((o|0)==34){c[f>>2]=m;g=0;return g|0}else if((o|0)==37){c[f>>2]=m+1;g=28;return g|0}else if((o|0)==38){c[f>>2]=m;g=0;return g|0}else if((o|0)==39){return g|0}return 0}function qg(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((e|0)==(f|0)){h=-1;return h|0}if((a[e]|0)!=45){c[g>>2]=e;h=0;return h|0}i=e+1|0;if((i|0)==(f|0)){h=-1;return h|0}e=b+72|0;j=f;k=b+352|0;l=b+356|0;m=b+360|0;n=i;a:while(1){switch(d[e+(d[n]|0)|0]|0){case 0:case 1:case 8:{o=19;break a;break};case 27:{i=n+1|0;if((i|0)==(f|0)){h=-1;o=28;break a}if((a[i]|0)==45){o=23;break a}else{p=i}break};case 6:{if((j-n|0)<3){h=-2;o=28;break a}if((Oc[c[l>>2]&255](b,n)|0)!=0){o=13;break a}p=n+3|0;break};case 7:{if((j-n|0)<4){h=-2;o=28;break a}if((Oc[c[m>>2]&255](b,n)|0)!=0){o=17;break a}p=n+4|0;break};case 5:{if((j-n|0)<2){h=-2;o=28;break a}if((Oc[c[k>>2]&255](b,n)|0)!=0){o=9;break a}p=n+2|0;break};default:{p=n+1|0}}if((p|0)==(f|0)){h=-1;o=28;break}else{n=p}}if((o|0)==9){c[g>>2]=n;h=0;return h|0}else if((o|0)==13){c[g>>2]=n;h=0;return h|0}else if((o|0)==17){c[g>>2]=n;h=0;return h|0}else if((o|0)==19){c[g>>2]=n;h=0;return h|0}else if((o|0)==23){p=n+2|0;if((p|0)==(f|0)){h=-1;return h|0}if((a[p]|0)==62){c[g>>2]=n+3;h=13;return h|0}else{c[g>>2]=p;h=0;return h|0}}else if((o|0)==28){return h|0}return 0}function rg(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;if((e|0)==(f|0)){h=-1;return h|0}i=b+72|0;a:do{switch(d[i+(d[e]|0)|0]|0){case 6:{if((f-e|0)<3){h=-2;return h|0}if((Oc[c[b+344>>2]&255](b,e)|0)!=0){j=e+3|0;break a}c[g>>2]=e;h=0;return h|0};case 7:{if((f-e|0)<4){h=-2;return h|0}if((Oc[c[b+348>>2]&255](b,e)|0)!=0){j=e+4|0;break a}c[g>>2]=e;h=0;return h|0};case 29:{c[g>>2]=e;h=0;return h|0};case 22:case 24:{j=e+1|0;break};case 5:{if((f-e|0)<2){h=-2;return h|0}if((Oc[c[b+340>>2]&255](b,e)|0)!=0){j=e+2|0;break a}c[g>>2]=e;h=0;return h|0};default:{c[g>>2]=e;h=0;return h|0}}}while(0);if((j|0)==(f|0)){h=-1;return h|0}k=f;l=b+328|0;m=b+332|0;n=b+336|0;o=j;b:while(1){switch(d[i+(d[o]|0)|0]|0){case 29:{p=21;break b;break};case 15:{p=65;break b;break};case 21:case 9:case 10:{p=36;break b;break};case 7:{if((k-o|0)<4){h=-2;p=77;break b}if((Oc[c[n>>2]&255](b,o)|0)==0){p=33;break b}q=o+4|0;break};case 5:{if((k-o|0)<2){h=-2;p=77;break b}if((Oc[c[l>>2]&255](b,o)|0)==0){p=25;break b}q=o+2|0;break};case 22:case 24:case 25:case 26:case 27:{q=o+1|0;break};case 6:{if((k-o|0)<3){h=-2;p=77;break b}if((Oc[c[m>>2]&255](b,o)|0)==0){p=29;break b}q=o+3|0;break};default:{r=o;break b}}if((q|0)==(f|0)){h=-1;p=77;break}else{o=q}}do{if((p|0)==21){c[g>>2]=o;h=0;return h|0}else if((p|0)==25){c[g>>2]=o;h=0;return h|0}else if((p|0)==29){c[g>>2]=o;h=0;return h|0}else if((p|0)==33){c[g>>2]=o;h=0;return h|0}else if((p|0)==36){do{if((o-e|0)==3){q=a[e]|0;if((q|0)==88){s=1}else if((q|0)==120){s=0}else{t=11;break}q=a[e+1|0]|0;if((q|0)==109){u=s}else if((q|0)==77){u=1}else{t=11;break}q=a[e+2|0]|0;if((q|0)==108){if((u|0)==0){t=12;break}}else if((q|0)!=76){t=11;break}c[g>>2]=o;h=0;return h|0}else{t=11}}while(0);q=o+1|0;if((q|0)==(f|0)){h=-1;return h|0}m=b+352|0;l=b+356|0;n=b+360|0;j=q;c:while(1){switch(d[i+(d[j]|0)|0]|0){case 0:case 1:case 8:{p=59;break c;break};case 7:{if((k-j|0)<4){h=-2;p=77;break c}if((Oc[c[n>>2]&255](b,j)|0)!=0){p=57;break c}v=j+4|0;break};case 5:{if((k-j|0)<2){h=-2;p=77;break c}if((Oc[c[m>>2]&255](b,j)|0)!=0){p=49;break c}v=j+2|0;break};case 15:{q=j+1|0;if((q|0)==(f|0)){h=-1;p=77;break c}if((a[q]|0)==62){p=63;break c}else{v=q}break};case 6:{if((k-j|0)<3){h=-2;p=77;break c}if((Oc[c[l>>2]&255](b,j)|0)!=0){p=53;break c}v=j+3|0;break};default:{v=j+1|0}}if((v|0)==(f|0)){h=-1;p=77;break}else{j=v}}if((p|0)==49){c[g>>2]=j;h=0;return h|0}else if((p|0)==53){c[g>>2]=j;h=0;return h|0}else if((p|0)==57){c[g>>2]=j;h=0;return h|0}else if((p|0)==59){c[g>>2]=j;h=0;return h|0}else if((p|0)==63){c[g>>2]=j+2;h=t;return h|0}else if((p|0)==77){return h|0}}else if((p|0)==65){do{if((o-e|0)==3){l=a[e]|0;if((l|0)==120){w=0}else if((l|0)==88){w=1}else{x=11;break}l=a[e+1|0]|0;if((l|0)==77){y=1}else if((l|0)==109){y=w}else{x=11;break}l=a[e+2|0]|0;if((l|0)==108){if((y|0)==0){x=12;break}}else if((l|0)!=76){x=11;break}c[g>>2]=o;h=0;return h|0}else{x=11}}while(0);j=o+1|0;if((j|0)==(f|0)){h=-1;return h|0}if((a[j]|0)!=62){r=j;break}c[g>>2]=o+2;h=x;return h|0}else if((p|0)==77){return h|0}}while(0);c[g>>2]=r;h=0;return h|0}function sg(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((e|0)==(f|0)){h=-1;return h|0}i=b+72|0;j=f;k=b+352|0;l=b+356|0;m=b+360|0;n=e;a:while(1){e=d[i+(d[n]|0)|0]|0;switch(e|0){case 0:case 1:case 8:{o=16;break a;break};case 6:{if((j-n|0)<3){h=-2;o=23;break a}if((Oc[c[l>>2]&255](b,n)|0)!=0){o=10;break a}p=n+3|0;break};case 12:case 13:{q=n+1|0;if((e|0)==(a|0)){o=18;break a}else{p=q}break};case 7:{if((j-n|0)<4){h=-2;o=23;break a}if((Oc[c[m>>2]&255](b,n)|0)!=0){o=14;break a}p=n+4|0;break};case 5:{if((j-n|0)<2){h=-2;o=23;break a}if((Oc[c[k>>2]&255](b,n)|0)!=0){o=6;break a}p=n+2|0;break};default:{p=n+1|0}}if((p|0)==(f|0)){h=-1;o=23;break}else{n=p}}if((o|0)==6){c[g>>2]=n;h=0;return h|0}else if((o|0)==10){c[g>>2]=n;h=0;return h|0}else if((o|0)==14){c[g>>2]=n;h=0;return h|0}else if((o|0)==16){c[g>>2]=n;h=0;return h|0}else if((o|0)==18){if((q|0)==(f|0)){h=-27;return h|0}c[g>>2]=q;switch(d[i+(d[q]|0)|0]|0|0){case 21:case 9:case 10:case 11:case 30:case 20:{h=27;return h|0};default:{}}h=0;return h|0}else if((o|0)==23){return h|0}return 0}function tg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;b=c[d>>2]|0;if((b|0)==(e|0)){return}else{h=b}while(1){if((c[f>>2]|0)==(g|0)){i=4;break}c[d>>2]=h+1;b=a[h]|0;j=c[f>>2]|0;c[f>>2]=j+1;a[j]=b;b=c[d>>2]|0;if((b|0)==(e|0)){i=4;break}else{h=b}}if((i|0)==4){return}}function ug(a,e,f,g,h){a=a|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0;a=c[e>>2]|0;if((a|0)==(f|0)){return}else{i=a}while(1){if((c[g>>2]|0)==(h|0)){j=4;break}c[e>>2]=i+1;a=d[i]|0;k=c[g>>2]|0;c[g>>2]=k+2;b[k>>1]=a;a=c[e>>2]|0;if((a|0)==(f|0)){j=4;break}else{i=a}}if((j|0)==4){return}}function vg(b,d,e,f,g,h,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;k=i;i=i+120|0;l=k|0;m=k+8|0;n=k+16|0;o=k+24|0;p=k+32|0;q=k+40|0;r=k+48|0;s=k+56|0;t=k+64|0;u=k+72|0;v=k+80|0;w=k+88|0;x=k+96|0;y=k+104|0;z=k+112|0;if((d|0)==(e|0)){c[f>>2]=0;A=1;i=k;return A|0}B=y|0;c[x>>2]=d;c[z>>2]=B;C=b+56|0;D=y+1|0;Bc[c[C>>2]&63](b,x,e,z,D);do{if((c[z>>2]|0)!=(B|0)){x=a[B]|0;if(!((x|0)==32|(x|0)==13|(x|0)==10|(x|0)==9)){break}x=b+64|0;y=d+(c[x>>2]|0)|0;c[t>>2]=y;c[u>>2]=B;Bc[c[C>>2]&63](b,t,e,u,D);a:do{if((c[u>>2]|0)==(B|0)){E=y}else{F=y;while(1){G=a[B]|0;if(!((G|0)==32|(G|0)==13|(G|0)==10|(G|0)==9)){E=F;break a}G=F+(c[x>>2]|0)|0;c[t>>2]=G;c[u>>2]=B;Bc[c[C>>2]&63](b,t,e,u,D);if((c[u>>2]|0)==(B|0)){E=G;break}else{F=G}}}}while(0);if((E|0)==(e|0)){c[f>>2]=0;A=1;i=k;return A|0}c[f>>2]=E;c[p>>2]=E;c[q>>2]=B;Bc[c[C>>2]&63](b,p,e,q,D);b:do{if((c[q>>2]|0)==(B|0)){H=E}else{y=E;c:while(1){switch(a[B]|0){case-1:{H=y;break b;break};case 32:case 13:case 10:case 9:{I=15;break c;break};case 61:{I=14;break c;break};default:{}}F=y+(c[x>>2]|0)|0;c[p>>2]=F;c[q>>2]=B;Bc[c[C>>2]&63](b,p,e,q,D);if((c[q>>2]|0)==(B|0)){H=F;break b}else{y=F}}d:do{if((I|0)==14){c[g>>2]=y;J=y}else if((I|0)==15){c[g>>2]=y;F=y+(c[x>>2]|0)|0;c[l>>2]=F;c[m>>2]=B;Bc[c[C>>2]&63](b,l,e,m,D);e:do{if((c[m>>2]|0)==(B|0)){K=F}else{G=F;while(1){switch(a[B]|0){case 61:{J=G;break d;break};case 32:case 13:case 10:case 9:{break};default:{K=G;break e}}L=G+(c[x>>2]|0)|0;c[l>>2]=L;c[m>>2]=B;Bc[c[C>>2]&63](b,l,e,m,D);if((c[m>>2]|0)==(B|0)){K=L;break e}else{G=L}}}}while(0);c[j>>2]=K;A=0;i=k;return A|0}}while(0);if((J|0)==(c[f>>2]|0)){c[j>>2]=J;A=0;i=k;return A|0}y=J+(c[x>>2]|0)|0;c[n>>2]=y;c[o>>2]=B;Bc[c[C>>2]&63](b,n,e,o,D);if((c[o>>2]|0)==(B|0)){M=-1}else{M=a[B]|0}F=M;G=y;f:while(1){switch(F|0){case 39:case 34:{break f;break};case 32:case 13:case 10:case 9:{break};default:{I=28;break f}}y=G+(c[x>>2]|0)|0;c[r>>2]=y;c[s>>2]=B;Bc[c[C>>2]&63](b,r,e,s,D);if((c[s>>2]|0)==(B|0)){F=-1;G=y;continue}F=a[B]|0;G=y}if((I|0)==28){c[j>>2]=G;A=0;i=k;return A|0}y=G+(c[x>>2]|0)|0;c[h>>2]=y;L=y;while(1){c[v>>2]=L;c[w>>2]=B;Bc[c[C>>2]&63](b,v,e,w,D);if((c[w>>2]|0)==(B|0)){N=-1}else{N=a[B]|0}if((N|0)==(F|0)){I=37;break}if((N-65|0)>>>0>25>>>0&(N-97|0)>>>0>25>>>0&(N-48|0)>>>0>9>>>0){if(!((N|0)==95|(N|0)==46|(N|0)==45)){I=35;break}}L=L+(c[x>>2]|0)|0}if((I|0)==35){c[j>>2]=L;A=0;i=k;return A|0}else if((I|0)==37){c[j>>2]=L+(c[x>>2]|0);A=1;i=k;return A|0}}}while(0);c[j>>2]=H;A=0;i=k;return A|0}}while(0);c[j>>2]=d;A=0;i=k;return A|0}function wg(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((f|0)==(g|0)){i=-4;return i|0}j=c[b+72>>2]|0;k=f+1|0;a:do{if((k|0)==(g|0)){if((e|0)!=1){i=-1;return i|0}l=a[b+69|0]|0;if(((l<<24>>24)-3|0)>>>0<3>>>0){i=-1;return i|0}switch(d[f]|0){case 254:case 255:case 239:{break};case 0:case 60:{i=-1;return i|0};default:{break a}}if(l<<24>>24==0){break}else{i=-1}return i|0}else{l=a[f]|0;m=a[k]|0;n=(l&255)<<8|m&255;if((n|0)==61371){if((e|0)==1){o=a[b+69|0]|0;if((o&-5)<<24>>24==0|o<<24>>24==5|o<<24>>24==3){break}}o=f+2|0;if((o|0)==(g|0)){i=-1;return i|0}if((a[o]|0)!=-65){break}c[h>>2]=f+3;c[j>>2]=600;i=14;return i|0}else if((n|0)==65534){if((a[b+69|0]|0)==0&(e|0)==1){break}c[h>>2]=f+2;c[j>>2]=20048;i=14;return i|0}else if((n|0)==65279){if((a[b+69|0]|0)==0&(e|0)==1){break}c[h>>2]=f+2;c[j>>2]=71352;i=14;return i|0}else if((n|0)==15360){if(((a[b+69|0]|0)-3&255)>>>0<2>>>0&(e|0)==1){break}c[j>>2]=20048;i=Sc[c[20048+(e<<2)>>2]&127](20048,f,g,h)|0;return i|0}else{if(l<<24>>24!=0){if(m<<24>>24!=0|(e|0)==1){break}c[j>>2]=20048;i=Sc[c[20048+(e<<2)>>2]&127](20048,f,g,h)|0;return i|0}if((e|0)==1){if((a[b+69|0]|0)==5){break}}c[j>>2]=71352;i=Sc[c[71352+(e<<2)>>2]&127](71352,f,g,h)|0;return i|0}}}while(0);k=c[28632+(a[b+69|0]<<2)>>2]|0;c[j>>2]=k;i=Sc[c[k+(e<<2)>>2]&127](k,f,g,h)|0;return i|0}function xg(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;b=g;h=c[d>>2]|0;if((h|0)==(e|0)){return}else{i=h}while(1){h=a[i]|0;j=c[f>>2]|0;if(h<<24>>24>-1){if((j|0)==(g|0)){k=8;break}c[d>>2]=i+1;l=a[i]|0;m=c[f>>2]|0;c[f>>2]=m+1;a[m]=l;n=c[d>>2]|0}else{if((b-j|0)<2){k=8;break}c[f>>2]=j+1;a[j]=(h&255)>>>6|-64;j=c[f>>2]|0;c[f>>2]=j+1;a[j]=h&63|-128;h=(c[d>>2]|0)+1|0;c[d>>2]=h;n=h}if((n|0)==(e|0)){k=8;break}else{i=n}}if((k|0)==8){return}}function yg(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=a>>>16;f=a&65535;if((c|0)==1){a=(d[b]|0)+f|0;g=a>>>0>65520>>>0?a-65521|0:a;a=g+e|0;h=(a>>>0>65520>>>0?a+15|0:a)<<16|g;return h|0}if((b|0)==0){h=1;return h|0}if(c>>>0<16>>>0){if((c|0)==0){i=f;j=e}else{g=f;a=b;k=c;l=e;while(1){m=k-1|0;n=(d[a]|0)+g|0;o=n+l|0;if((m|0)==0){i=n;j=o;break}else{g=n;a=a+1|0;k=m;l=o}}}h=((j>>>0)%65521|0)<<16|(i>>>0>65520>>>0?i-65521|0:i);return h|0}do{if(c>>>0>5551>>>0){i=f;j=b;l=c;k=e;do{l=l-5552|0;a=347;g=k;o=j;m=i;while(1){n=(d[o]|0)+m|0;p=n+(d[o+1|0]|0)|0;q=p+(d[o+2|0]|0)|0;r=q+(d[o+3|0]|0)|0;s=r+(d[o+4|0]|0)|0;t=s+(d[o+5|0]|0)|0;u=t+(d[o+6|0]|0)|0;v=u+(d[o+7|0]|0)|0;w=v+(d[o+8|0]|0)|0;x=w+(d[o+9|0]|0)|0;y=x+(d[o+10|0]|0)|0;z=y+(d[o+11|0]|0)|0;A=z+(d[o+12|0]|0)|0;B=A+(d[o+13|0]|0)|0;C=B+(d[o+14|0]|0)|0;D=C+(d[o+15|0]|0)|0;E=n+g+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D|0;C=a-1|0;if((C|0)==0){break}else{a=C;g=E;o=o+16|0;m=D}}j=j+5552|0;i=(D>>>0)%65521|0;k=(E>>>0)%65521|0;}while(l>>>0>5551>>>0);if((l|0)==0){F=k;G=i;break}if(l>>>0>15>>>0){H=i;I=j;J=l;K=k;L=15}else{M=i;N=j;O=l;P=k;L=16}}else{H=f;I=b;J=c;K=e;L=15}}while(0);if((L|0)==15){while(1){L=0;Q=J-16|0;e=(d[I]|0)+H|0;c=e+(d[I+1|0]|0)|0;b=c+(d[I+2|0]|0)|0;f=b+(d[I+3|0]|0)|0;E=f+(d[I+4|0]|0)|0;D=E+(d[I+5|0]|0)|0;m=D+(d[I+6|0]|0)|0;o=m+(d[I+7|0]|0)|0;g=o+(d[I+8|0]|0)|0;a=g+(d[I+9|0]|0)|0;C=a+(d[I+10|0]|0)|0;B=C+(d[I+11|0]|0)|0;A=B+(d[I+12|0]|0)|0;z=A+(d[I+13|0]|0)|0;y=z+(d[I+14|0]|0)|0;R=y+(d[I+15|0]|0)|0;S=e+K+c+b+f+E+D+m+o+g+a+C+B+A+z+y+R|0;T=I+16|0;if(Q>>>0>15>>>0){H=R;I=T;J=Q;K=S;L=15}else{break}}if((Q|0)==0){U=R;V=S;L=17}else{M=R;N=T;O=Q;P=S;L=16}}if((L|0)==16){while(1){L=0;S=O-1|0;Q=(d[N]|0)+M|0;T=Q+P|0;if((S|0)==0){U=Q;V=T;L=17;break}else{M=Q;N=N+1|0;O=S;P=T;L=16}}}if((L|0)==17){F=(V>>>0)%65521|0;G=(U>>>0)%65521|0}h=F<<16|G;return h|0}function zg(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if((b|0)==0){f=0;return f|0}g=~a;a:do{if((e|0)==0){h=g}else{a=b;i=e;j=g;while(1){if((a&3|0)==0){break}k=c[29760+(((d[a]|0)^j&255)<<2)>>2]^j>>>8;l=i-1|0;if((l|0)==0){h=k;break a}else{a=a+1|0;i=l;j=k}}k=a;if(i>>>0>31>>>0){l=i;m=j;n=k;while(1){o=c[n>>2]^m;p=c[31808+((o>>>8&255)<<2)>>2]^c[32832+((o&255)<<2)>>2]^c[30784+((o>>>16&255)<<2)>>2]^c[29760+(o>>>24<<2)>>2]^c[n+4>>2];o=c[31808+((p>>>8&255)<<2)>>2]^c[32832+((p&255)<<2)>>2]^c[30784+((p>>>16&255)<<2)>>2]^c[29760+(p>>>24<<2)>>2]^c[n+8>>2];p=c[31808+((o>>>8&255)<<2)>>2]^c[32832+((o&255)<<2)>>2]^c[30784+((o>>>16&255)<<2)>>2]^c[29760+(o>>>24<<2)>>2]^c[n+12>>2];o=c[31808+((p>>>8&255)<<2)>>2]^c[32832+((p&255)<<2)>>2]^c[30784+((p>>>16&255)<<2)>>2]^c[29760+(p>>>24<<2)>>2]^c[n+16>>2];p=c[31808+((o>>>8&255)<<2)>>2]^c[32832+((o&255)<<2)>>2]^c[30784+((o>>>16&255)<<2)>>2]^c[29760+(o>>>24<<2)>>2]^c[n+20>>2];o=c[31808+((p>>>8&255)<<2)>>2]^c[32832+((p&255)<<2)>>2]^c[30784+((p>>>16&255)<<2)>>2]^c[29760+(p>>>24<<2)>>2]^c[n+24>>2];p=n+32|0;q=c[31808+((o>>>8&255)<<2)>>2]^c[32832+((o&255)<<2)>>2]^c[30784+((o>>>16&255)<<2)>>2]^c[29760+(o>>>24<<2)>>2]^c[n+28>>2];o=c[31808+((q>>>8&255)<<2)>>2]^c[32832+((q&255)<<2)>>2]^c[30784+((q>>>16&255)<<2)>>2]^c[29760+(q>>>24<<2)>>2];q=l-32|0;if(q>>>0>31>>>0){l=q;m=o;n=p}else{r=q;s=o;t=p;break}}}else{r=i;s=j;t=k}if(r>>>0>3>>>0){n=r;m=s;l=t;while(1){a=l+4|0;p=c[l>>2]^m;o=c[31808+((p>>>8&255)<<2)>>2]^c[32832+((p&255)<<2)>>2]^c[30784+((p>>>16&255)<<2)>>2]^c[29760+(p>>>24<<2)>>2];p=n-4|0;if(p>>>0>3>>>0){n=p;m=o;l=a}else{u=p;v=o;w=a;break}}}else{u=r;v=s;w=t}if((u|0)==0){h=v;break}l=v;m=u;n=w;while(1){k=c[29760+(((d[n]|0)^l&255)<<2)>>2]^l>>>8;j=m-1|0;if((j|0)==0){h=k;break}else{l=k;m=j;n=n+1|0}}}}while(0);f=~h;return f|0}function Ag(d,f,g,h,i,j,k,l){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;if((k|0)==0){m=-6;return m|0}if(!((a[k]|0)==49&(l|0)==56)){m=-6;return m|0}if((d|0)==0){m=-2;return m|0}l=d+24|0;c[l>>2]=0;k=d+32|0;n=c[k>>2]|0;if((n|0)==0){c[k>>2]=36;c[d+40>>2]=0;o=36}else{o=n}n=d+36|0;if((c[n>>2]|0)==0){c[n>>2]=4}n=(f|0)==-1?6:f;if((h|0)<0){p=0;q=-h|0}else{f=(h|0)>15;p=f?2:1;q=f?h-16|0:h}if(!((i-1|0)>>>0<9>>>0&(g|0)==8)){m=-2;return m|0}if((q-8|0)>>>0>7>>>0|n>>>0>9>>>0|j>>>0>4>>>0){m=-2;return m|0}g=(q|0)==8?9:q;q=d+40|0;h=Hc[o&63](c[q>>2]|0,1,5828)|0;if((h|0)==0){m=-4;return m|0}o=d+28|0;c[o>>2]=h;c[h>>2]=d;c[h+24>>2]=p;c[h+28>>2]=0;c[h+48>>2]=g;p=1<<g;g=h+44|0;c[g>>2]=p;c[h+52>>2]=p-1;f=i+7|0;c[h+80>>2]=f;r=1<<f;f=h+76|0;c[f>>2]=r;c[h+84>>2]=r-1;c[h+88>>2]=((i+9|0)>>>0)/3|0;r=h+56|0;c[r>>2]=Hc[c[k>>2]&63](c[q>>2]|0,p,2)|0;p=h+64|0;c[p>>2]=Hc[c[k>>2]&63](c[q>>2]|0,c[g>>2]|0,2)|0;g=h+68|0;c[g>>2]=Hc[c[k>>2]&63](c[q>>2]|0,c[f>>2]|0,2)|0;c[h+5824>>2]=0;f=1<<i+6;i=h+5788|0;c[i>>2]=f;s=Hc[c[k>>2]&63](c[q>>2]|0,f,4)|0;f=s;c[h+8>>2]=s;q=c[i>>2]|0;c[h+12>>2]=q<<2;do{if((c[r>>2]|0)!=0){if((c[p>>2]|0)==0){break}if((c[g>>2]|0)==0|(s|0)==0){break}c[h+5796>>2]=f+(q>>>1<<1);c[h+5784>>2]=s+(q*3|0);c[h+132>>2]=n;c[h+136>>2]=j;a[h+36|0]=8;i=Dg(d)|0;if((i|0)!=0){m=i;return m|0}i=c[o>>2]|0;c[i+60>>2]=c[i+44>>2]<<1;k=i+76|0;t=i+68|0;b[(c[t>>2]|0)+((c[k>>2]|0)-1<<1)>>1]=0;vF(c[t>>2]|0,0,(c[k>>2]<<1)-2|0)|0;k=c[i+132>>2]|0;c[i+128>>2]=e[40330+(k*12|0)>>1]|0;c[i+140>>2]=e[40328+(k*12|0)>>1]|0;c[i+144>>2]=e[40332+(k*12|0)>>1]|0;c[i+124>>2]=e[40334+(k*12|0)>>1]|0;c[i+108>>2]=0;c[i+92>>2]=0;c[i+116>>2]=0;c[i+5812>>2]=0;c[i+120>>2]=2;c[i+96>>2]=2;c[i+104>>2]=0;c[i+72>>2]=0;m=0;return m|0}}while(0);c[h+4>>2]=666;c[l>>2]=c[12];Bg(d)|0;m=-4;return m|0}function Bg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((a|0)==0){b=-2;return b|0}d=a+28|0;e=c[d>>2]|0;if((e|0)==0){b=-2;return b|0}f=c[e+4>>2]|0;switch(f|0){case 666:case 113:case 103:case 91:case 73:case 69:case 42:{break};default:{b=-2;return b|0}}g=c[e+8>>2]|0;if((g|0)==0){h=e}else{Dc[c[a+36>>2]&63](c[a+40>>2]|0,g);h=c[d>>2]|0}g=c[h+68>>2]|0;if((g|0)==0){i=h}else{Dc[c[a+36>>2]&63](c[a+40>>2]|0,g);i=c[d>>2]|0}g=c[i+64>>2]|0;if((g|0)==0){j=i}else{Dc[c[a+36>>2]&63](c[a+40>>2]|0,g);j=c[d>>2]|0}g=c[j+56>>2]|0;i=a+36|0;if((g|0)==0){k=j;l=a+40|0}else{j=a+40|0;Dc[c[i>>2]&63](c[j>>2]|0,g);k=c[d>>2]|0;l=j}Dc[c[i>>2]&63](c[l>>2]|0,k);c[d>>2]=0;b=(f|0)==113?-3:0;return b|0}function Cg(a){a=a|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;f=a+44|0;g=c[f>>2]|0;h=a+60|0;i=a+116|0;j=a+108|0;k=g-262|0;l=a|0;m=a+56|0;n=a+5812|0;o=a+72|0;p=a+88|0;q=a+84|0;r=a+68|0;s=a+52|0;t=a+64|0;u=a+112|0;v=a+92|0;w=a+76|0;x=c[i>>2]|0;y=g;while(1){z=c[j>>2]|0;A=(c[h>>2]|0)-x-z|0;if(z>>>0<(k+y|0)>>>0){B=A}else{z=c[m>>2]|0;tF(z|0,z+g|0,g)|0;c[u>>2]=(c[u>>2]|0)-g;c[j>>2]=(c[j>>2]|0)-g;c[v>>2]=(c[v>>2]|0)-g;z=c[w>>2]|0;C=z;D=(c[r>>2]|0)+(z<<1)|0;do{D=D-2|0;z=e[D>>1]|0;if(z>>>0<g>>>0){E=0}else{E=z-g&65535}b[D>>1]=E;C=C-1|0;}while((C|0)!=0);C=g;D=(c[t>>2]|0)+(g<<1)|0;do{D=D-2|0;z=e[D>>1]|0;if(z>>>0<g>>>0){F=0}else{F=z-g&65535}b[D>>1]=F;C=C-1|0;}while((C|0)!=0);B=A+g|0}C=c[l>>2]|0;D=C+4|0;z=c[D>>2]|0;if((z|0)==0){break}G=c[i>>2]|0;H=(c[m>>2]|0)+(G+(c[j>>2]|0))|0;I=z>>>0>B>>>0?B:z;if((I|0)==0){J=0;K=G}else{c[D>>2]=z-I;z=C|0;tF(H|0,c[z>>2]|0,I)|0;D=c[(c[C+28>>2]|0)+24>>2]|0;if((D|0)==1){G=C+48|0;c[G>>2]=yg(c[G>>2]|0,H,I)|0}else if((D|0)==2){D=C+48|0;c[D>>2]=zg(c[D>>2]|0,H,I)|0}c[z>>2]=(c[z>>2]|0)+I;z=C+8|0;c[z>>2]=(c[z>>2]|0)+I;J=I;K=c[i>>2]|0}I=K+J|0;c[i>>2]=I;z=c[n>>2]|0;a:do{if((I+z|0)>>>0>2>>>0){C=(c[j>>2]|0)-z|0;H=c[m>>2]|0;D=d[H+C|0]|0;c[o>>2]=D;c[o>>2]=((d[H+(C+1)|0]|0)^D<<c[p>>2])&c[q>>2];D=C;C=z;H=I;while(1){if((C|0)==0){L=H;break a}G=((d[(c[m>>2]|0)+(D+2)|0]|0)^c[o>>2]<<c[p>>2])&c[q>>2];c[o>>2]=G;b[(c[t>>2]|0)+((c[s>>2]&D)<<1)>>1]=b[(c[r>>2]|0)+(G<<1)>>1]|0;b[(c[r>>2]|0)+(c[o>>2]<<1)>>1]=D;G=(c[n>>2]|0)-1|0;c[n>>2]=G;M=c[i>>2]|0;if((M+G|0)>>>0<3>>>0){L=M;break}else{D=D+1|0;C=G;H=M}}}else{L=I}}while(0);if(L>>>0>=262>>>0){break}if((c[(c[l>>2]|0)+4>>2]|0)==0){break}x=L;y=c[f>>2]|0}f=a+5824|0;a=c[f>>2]|0;y=c[h>>2]|0;if(a>>>0>=y>>>0){return}h=(c[i>>2]|0)+(c[j>>2]|0)|0;if(a>>>0<h>>>0){j=y-h|0;i=j>>>0>258>>>0?258:j;vF((c[m>>2]|0)+h|0,0,i|0)|0;c[f>>2]=i+h;return}i=h+258|0;if(a>>>0>=i>>>0){return}h=i-a|0;i=y-a|0;y=h>>>0>i>>>0?i:h;vF((c[m>>2]|0)+a|0,0,y|0)|0;c[f>>2]=(c[f>>2]|0)+y;return}function Dg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if((a|0)==0){b=-2;return b|0}d=c[a+28>>2]|0;if((d|0)==0){b=-2;return b|0}if((c[a+32>>2]|0)==0){b=-2;return b|0}if((c[a+36>>2]|0)==0){b=-2;return b|0}c[a+20>>2]=0;c[a+8>>2]=0;c[a+24>>2]=0;c[a+44>>2]=2;c[d+20>>2]=0;c[d+16>>2]=c[d+8>>2];e=d+24|0;f=c[e>>2]|0;if((f|0)<0){g=-f|0;c[e>>2]=g;h=g}else{h=f}c[d+4>>2]=(h|0)!=0?42:113;if((h|0)==2){i=zg(0,0,0)|0}else{i=yg(0,0,0)|0}c[a+48>>2]=i;c[d+40>>2]=0;Jg(d);b=0;return b|0}function Eg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;if((e|0)==0){g=-2;return g|0}h=e+28|0;i=c[h>>2]|0;if((i|0)==0|f>>>0>5>>>0){g=-2;return g|0}j=e+12|0;do{if((c[j>>2]|0)!=0){if((c[e>>2]|0)==0){if((c[e+4>>2]|0)!=0){break}}k=i+4|0;l=c[k>>2]|0;m=(f|0)==4;if(!((l|0)!=666|m)){break}n=e+16|0;if((c[n>>2]|0)==0){c[e+24>>2]=c[13];g=-5;return g|0}o=i|0;c[o>>2]=e;p=i+40|0;q=c[p>>2]|0;c[p>>2]=f;do{if((l|0)==42){if((c[i+24>>2]|0)!=2){r=(c[i+48>>2]<<12)-30720|0;do{if((c[i+136>>2]|0)>1){s=0}else{t=c[i+132>>2]|0;if((t|0)<2){s=0;break}if((t|0)<6){s=64;break}s=(t|0)==6?128:192}}while(0);t=s|r;u=i+108|0;v=(c[u>>2]|0)==0?t:t|32;c[k>>2]=113;t=i+20|0;w=c[t>>2]|0;c[t>>2]=w+1;x=i+8|0;a[(c[x>>2]|0)+w|0]=v>>>8;w=c[t>>2]|0;c[t>>2]=w+1;a[(c[x>>2]|0)+w|0]=(v|((v>>>0)%31|0))^31;v=e+48|0;if((c[u>>2]|0)!=0){u=c[v>>2]|0;w=c[t>>2]|0;c[t>>2]=w+1;a[(c[x>>2]|0)+w|0]=u>>>24;w=c[t>>2]|0;c[t>>2]=w+1;a[(c[x>>2]|0)+w|0]=u>>>16;u=c[v>>2]|0;w=c[t>>2]|0;c[t>>2]=w+1;a[(c[x>>2]|0)+w|0]=u>>>8;w=c[t>>2]|0;c[t>>2]=w+1;a[(c[x>>2]|0)+w|0]=u}c[v>>2]=yg(0,0,0)|0;y=c[k>>2]|0;z=32;break}v=e+48|0;c[v>>2]=zg(0,0,0)|0;u=i+20|0;w=c[u>>2]|0;c[u>>2]=w+1;x=i+8|0;a[(c[x>>2]|0)+w|0]=31;w=c[u>>2]|0;c[u>>2]=w+1;a[(c[x>>2]|0)+w|0]=-117;w=c[u>>2]|0;c[u>>2]=w+1;a[(c[x>>2]|0)+w|0]=8;w=i+28|0;t=c[w>>2]|0;if((t|0)==0){A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=0;A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=0;A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=0;A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=0;A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=0;A=c[i+132>>2]|0;do{if((A|0)==9){B=2}else{if((c[i+136>>2]|0)>1){B=4;break}B=(A|0)<2?4:0}}while(0);A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=B;A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=3;c[k>>2]=113;break}A=((c[t+44>>2]|0)!=0?2:0)|(c[t>>2]|0)!=0|((c[t+16>>2]|0)==0?0:4)|((c[t+28>>2]|0)==0?0:8)|((c[t+36>>2]|0)==0?0:16);r=c[u>>2]|0;c[u>>2]=r+1;a[(c[x>>2]|0)+r|0]=A;A=c[(c[w>>2]|0)+4>>2]&255;r=c[u>>2]|0;c[u>>2]=r+1;a[(c[x>>2]|0)+r|0]=A;A=(c[(c[w>>2]|0)+4>>2]|0)>>>8&255;r=c[u>>2]|0;c[u>>2]=r+1;a[(c[x>>2]|0)+r|0]=A;A=(c[(c[w>>2]|0)+4>>2]|0)>>>16&255;r=c[u>>2]|0;c[u>>2]=r+1;a[(c[x>>2]|0)+r|0]=A;A=(c[(c[w>>2]|0)+4>>2]|0)>>>24&255;r=c[u>>2]|0;c[u>>2]=r+1;a[(c[x>>2]|0)+r|0]=A;A=c[i+132>>2]|0;do{if((A|0)==9){C=2}else{if((c[i+136>>2]|0)>1){C=4;break}C=(A|0)<2?4:0}}while(0);A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=C;A=c[(c[w>>2]|0)+12>>2]&255;t=c[u>>2]|0;c[u>>2]=t+1;a[(c[x>>2]|0)+t|0]=A;A=c[w>>2]|0;if((c[A+16>>2]|0)==0){D=A}else{t=c[A+20>>2]&255;A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=t;t=(c[(c[w>>2]|0)+20>>2]|0)>>>8&255;A=c[u>>2]|0;c[u>>2]=A+1;a[(c[x>>2]|0)+A|0]=t;D=c[w>>2]|0}if((c[D+44>>2]|0)!=0){c[v>>2]=zg(c[v>>2]|0,c[x>>2]|0,c[u>>2]|0)|0}c[i+32>>2]=0;c[k>>2]=69;E=w;z=34}else{y=l;z=32}}while(0);do{if((z|0)==32){if((y|0)!=69){F=y;z=55;break}E=i+28|0;z=34}}while(0);do{if((z|0)==34){l=c[E>>2]|0;if((c[l+16>>2]|0)==0){c[k>>2]=73;G=l;z=57;break}t=i+20|0;A=c[t>>2]|0;r=i+32|0;H=c[r>>2]|0;a:do{if(H>>>0<(c[l+20>>2]&65535)>>>0){I=i+12|0;J=e+48|0;K=i+8|0;L=e+20|0;M=A;N=l;O=A;P=H;while(1){if((O|0)==(c[I>>2]|0)){if((c[N+44>>2]|0)!=0&O>>>0>M>>>0){c[J>>2]=zg(c[J>>2]|0,(c[K>>2]|0)+M|0,O-M|0)|0}Q=c[h>>2]|0;Mg(Q);R=Q+20|0;S=c[R>>2]|0;T=c[n>>2]|0;U=S>>>0>T>>>0?T:S;do{if((U|0)!=0){S=Q+16|0;tF(c[j>>2]|0,c[S>>2]|0,U)|0;c[j>>2]=(c[j>>2]|0)+U;c[S>>2]=(c[S>>2]|0)+U;c[L>>2]=(c[L>>2]|0)+U;c[n>>2]=(c[n>>2]|0)-U;T=c[R>>2]|0;c[R>>2]=T-U;if((T|0)!=(U|0)){break}c[S>>2]=c[Q+8>>2]}}while(0);V=c[t>>2]|0;if((V|0)==(c[I>>2]|0)){break}W=V;X=V;Y=c[r>>2]|0;Z=c[E>>2]|0}else{W=M;X=O;Y=P;Z=N}Q=a[(c[Z+16>>2]|0)+Y|0]|0;c[t>>2]=X+1;a[(c[K>>2]|0)+X|0]=Q;Q=(c[r>>2]|0)+1|0;c[r>>2]=Q;U=c[E>>2]|0;if(Q>>>0>=(c[U+20>>2]&65535)>>>0){_=W;$=U;break a}M=W;N=U;O=c[t>>2]|0;P=Q}_=V;$=c[E>>2]|0}else{_=A;$=l}}while(0);do{if((c[$+44>>2]|0)==0){aa=$}else{l=c[t>>2]|0;if(l>>>0<=_>>>0){aa=$;break}A=e+48|0;c[A>>2]=zg(c[A>>2]|0,(c[i+8>>2]|0)+_|0,l-_|0)|0;aa=c[E>>2]|0}}while(0);if((c[r>>2]|0)==(c[aa+20>>2]|0)){c[r>>2]=0;c[k>>2]=73;G=aa;z=57;break}else{F=c[k>>2]|0;z=55;break}}}while(0);do{if((z|0)==55){if((F|0)!=73){ba=F;z=75;break}G=c[i+28>>2]|0;z=57}}while(0);do{if((z|0)==57){t=i+28|0;if((c[G+28>>2]|0)==0){c[k>>2]=91;ca=t;z=77;break}l=i+20|0;A=c[l>>2]|0;H=i+12|0;w=e+48|0;u=i+8|0;x=e+20|0;v=i+32|0;P=A;O=A;while(1){if((O|0)==(c[H>>2]|0)){if((c[(c[t>>2]|0)+44>>2]|0)!=0&O>>>0>P>>>0){c[w>>2]=zg(c[w>>2]|0,(c[u>>2]|0)+P|0,O-P|0)|0}A=c[h>>2]|0;Mg(A);N=A+20|0;M=c[N>>2]|0;K=c[n>>2]|0;I=M>>>0>K>>>0?K:M;do{if((I|0)!=0){M=A+16|0;tF(c[j>>2]|0,c[M>>2]|0,I)|0;c[j>>2]=(c[j>>2]|0)+I;c[M>>2]=(c[M>>2]|0)+I;c[x>>2]=(c[x>>2]|0)+I;c[n>>2]=(c[n>>2]|0)-I;K=c[N>>2]|0;c[N>>2]=K-I;if((K|0)!=(I|0)){break}c[M>>2]=c[A+8>>2]}}while(0);A=c[l>>2]|0;if((A|0)==(c[H>>2]|0)){da=1;ea=A;break}else{fa=A;ga=A}}else{fa=P;ga=O}A=c[v>>2]|0;c[v>>2]=A+1;I=a[(c[(c[t>>2]|0)+28>>2]|0)+A|0]|0;c[l>>2]=ga+1;a[(c[u>>2]|0)+ga|0]=I;if(I<<24>>24==0){da=I&255;ea=fa;break}P=fa;O=c[l>>2]|0}do{if((c[(c[t>>2]|0)+44>>2]|0)!=0){O=c[l>>2]|0;if(O>>>0<=ea>>>0){break}c[w>>2]=zg(c[w>>2]|0,(c[u>>2]|0)+ea|0,O-ea|0)|0}}while(0);if((da|0)==0){c[v>>2]=0;c[k>>2]=91;ca=t;z=77;break}else{ba=c[k>>2]|0;z=75;break}}}while(0);do{if((z|0)==75){if((ba|0)!=91){ha=ba;z=95;break}ca=i+28|0;z=77}}while(0);do{if((z|0)==77){if((c[(c[ca>>2]|0)+36>>2]|0)==0){c[k>>2]=103;ia=ca;z=97;break}u=i+20|0;w=c[u>>2]|0;l=i+12|0;O=e+48|0;P=i+8|0;H=e+20|0;x=i+32|0;r=w;I=w;while(1){if((I|0)==(c[l>>2]|0)){if((c[(c[ca>>2]|0)+44>>2]|0)!=0&I>>>0>r>>>0){c[O>>2]=zg(c[O>>2]|0,(c[P>>2]|0)+r|0,I-r|0)|0}w=c[h>>2]|0;Mg(w);A=w+20|0;N=c[A>>2]|0;M=c[n>>2]|0;K=N>>>0>M>>>0?M:N;do{if((K|0)!=0){N=w+16|0;tF(c[j>>2]|0,c[N>>2]|0,K)|0;c[j>>2]=(c[j>>2]|0)+K;c[N>>2]=(c[N>>2]|0)+K;c[H>>2]=(c[H>>2]|0)+K;c[n>>2]=(c[n>>2]|0)-K;M=c[A>>2]|0;c[A>>2]=M-K;if((M|0)!=(K|0)){break}c[N>>2]=c[w+8>>2]}}while(0);w=c[u>>2]|0;if((w|0)==(c[l>>2]|0)){ja=1;ka=w;break}else{la=w;ma=w}}else{la=r;ma=I}w=c[x>>2]|0;c[x>>2]=w+1;K=a[(c[(c[ca>>2]|0)+36>>2]|0)+w|0]|0;c[u>>2]=ma+1;a[(c[P>>2]|0)+ma|0]=K;if(K<<24>>24==0){ja=K&255;ka=la;break}r=la;I=c[u>>2]|0}do{if((c[(c[ca>>2]|0)+44>>2]|0)!=0){I=c[u>>2]|0;if(I>>>0<=ka>>>0){break}c[O>>2]=zg(c[O>>2]|0,(c[P>>2]|0)+ka|0,I-ka|0)|0}}while(0);if((ja|0)==0){c[k>>2]=103;ia=ca;z=97;break}else{ha=c[k>>2]|0;z=95;break}}}while(0);do{if((z|0)==95){if((ha|0)!=103){break}ia=i+28|0;z=97}}while(0);do{if((z|0)==97){if((c[(c[ia>>2]|0)+44>>2]|0)==0){c[k>>2]=113;break}P=i+20|0;O=i+12|0;do{if(((c[P>>2]|0)+2|0)>>>0>(c[O>>2]|0)>>>0){u=c[h>>2]|0;Mg(u);I=u+20|0;r=c[I>>2]|0;x=c[n>>2]|0;l=r>>>0>x>>>0?x:r;if((l|0)==0){break}r=u+16|0;tF(c[j>>2]|0,c[r>>2]|0,l)|0;c[j>>2]=(c[j>>2]|0)+l;c[r>>2]=(c[r>>2]|0)+l;x=e+20|0;c[x>>2]=(c[x>>2]|0)+l;c[n>>2]=(c[n>>2]|0)-l;x=c[I>>2]|0;c[I>>2]=x-l;if((x|0)!=(l|0)){break}c[r>>2]=c[u+8>>2]}}while(0);u=c[P>>2]|0;if((u+2|0)>>>0>(c[O>>2]|0)>>>0){break}r=e+48|0;l=c[r>>2]&255;c[P>>2]=u+1;x=i+8|0;a[(c[x>>2]|0)+u|0]=l;l=(c[r>>2]|0)>>>8&255;u=c[P>>2]|0;c[P>>2]=u+1;a[(c[x>>2]|0)+u|0]=l;c[r>>2]=zg(0,0,0)|0;c[k>>2]=113}}while(0);r=i+20|0;do{if((c[r>>2]|0)==0){if((c[e+4>>2]|0)!=0){break}if(((f<<1)-((f|0)>4?9:0)|0)>((q<<1)-((q|0)>4?9:0)|0)|m){break}c[e+24>>2]=c[13];g=-5;return g|0}else{l=c[h>>2]|0;Mg(l);u=l+20|0;x=c[u>>2]|0;I=c[n>>2]|0;H=x>>>0>I>>>0?I:x;if((H|0)==0){na=I}else{I=l+16|0;tF(c[j>>2]|0,c[I>>2]|0,H)|0;c[j>>2]=(c[j>>2]|0)+H;c[I>>2]=(c[I>>2]|0)+H;x=e+20|0;c[x>>2]=(c[x>>2]|0)+H;c[n>>2]=(c[n>>2]|0)-H;x=c[u>>2]|0;c[u>>2]=x-H;if((x|0)==(H|0)){c[I>>2]=c[l+8>>2]}na=c[n>>2]|0}if((na|0)!=0){break}c[p>>2]=-1;g=0;return g|0}}while(0);q=(c[k>>2]|0)==666;l=(c[e+4>>2]|0)==0;do{if(q){if(l){z=119;break}c[e+24>>2]=c[13];g=-5;return g|0}else{if(l){z=119}else{z=122}}}while(0);do{if((z|0)==119){if((c[i+116>>2]|0)!=0){z=122;break}if((f|0)==0){g=0;return g|0}else{if(q){break}else{z=122;break}}}}while(0);b:do{if((z|0)==122){q=c[i+136>>2]|0;c:do{if((q|0)==2){l=i+116|0;I=i+96|0;H=i+108|0;x=i+56|0;u=i+5792|0;t=i+5796|0;v=i+5784|0;K=i+5788|0;w=i+92|0;while(1){if((c[l>>2]|0)==0){Cg(i);if((c[l>>2]|0)==0){break}}c[I>>2]=0;A=a[(c[x>>2]|0)+(c[H>>2]|0)|0]|0;b[(c[t>>2]|0)+(c[u>>2]<<1)>>1]=0;N=c[u>>2]|0;c[u>>2]=N+1;a[(c[v>>2]|0)+N|0]=A;N=i+148+((A&255)<<2)|0;b[N>>1]=(b[N>>1]|0)+1;N=(c[u>>2]|0)==((c[K>>2]|0)-1|0);c[l>>2]=(c[l>>2]|0)-1;A=(c[H>>2]|0)+1|0;c[H>>2]=A;if(!N){continue}N=c[w>>2]|0;if((N|0)>-1){oa=(c[x>>2]|0)+N|0}else{oa=0}Og(i,oa,A-N|0,0);c[w>>2]=c[H>>2];N=c[o>>2]|0;A=c[N+28>>2]|0;Mg(A);M=A+20|0;L=c[M>>2]|0;J=N+16|0;Q=c[J>>2]|0;U=L>>>0>Q>>>0?Q:L;do{if((U|0)!=0){L=N+12|0;Q=A+16|0;tF(c[L>>2]|0,c[Q>>2]|0,U)|0;c[L>>2]=(c[L>>2]|0)+U;c[Q>>2]=(c[Q>>2]|0)+U;L=N+20|0;c[L>>2]=(c[L>>2]|0)+U;c[J>>2]=(c[J>>2]|0)-U;L=c[M>>2]|0;c[M>>2]=L-U;if((L|0)!=(U|0)){break}c[Q>>2]=c[A+8>>2]}}while(0);if((c[(c[o>>2]|0)+16>>2]|0)==0){z=195;break c}}if((f|0)==0){z=195;break}c[i+5812>>2]=0;if(m){l=c[w>>2]|0;if((l|0)>-1){pa=(c[x>>2]|0)+l|0}else{pa=0}Og(i,pa,(c[H>>2]|0)-l|0,1);c[w>>2]=c[H>>2];l=c[o>>2]|0;K=c[l+28>>2]|0;Mg(K);v=K+20|0;t=c[v>>2]|0;I=l+16|0;A=c[I>>2]|0;U=t>>>0>A>>>0?A:t;do{if((U|0)!=0){t=l+12|0;A=K+16|0;tF(c[t>>2]|0,c[A>>2]|0,U)|0;c[t>>2]=(c[t>>2]|0)+U;c[A>>2]=(c[A>>2]|0)+U;t=l+20|0;c[t>>2]=(c[t>>2]|0)+U;c[I>>2]=(c[I>>2]|0)-U;t=c[v>>2]|0;c[v>>2]=t-U;if((t|0)!=(U|0)){break}c[A>>2]=c[K+8>>2]}}while(0);qa=(c[(c[o>>2]|0)+16>>2]|0)==0?2:3;z=192;break}if((c[u>>2]|0)==0){break}K=c[w>>2]|0;if((K|0)>-1){ra=(c[x>>2]|0)+K|0}else{ra=0}Og(i,ra,(c[H>>2]|0)-K|0,0);c[w>>2]=c[H>>2];K=c[o>>2]|0;U=c[K+28>>2]|0;Mg(U);v=U+20|0;I=c[v>>2]|0;l=K+16|0;A=c[l>>2]|0;t=I>>>0>A>>>0?A:I;do{if((t|0)!=0){I=K+12|0;A=U+16|0;tF(c[I>>2]|0,c[A>>2]|0,t)|0;c[I>>2]=(c[I>>2]|0)+t;c[A>>2]=(c[A>>2]|0)+t;I=K+20|0;c[I>>2]=(c[I>>2]|0)+t;c[l>>2]=(c[l>>2]|0)-t;I=c[v>>2]|0;c[v>>2]=I-t;if((I|0)!=(t|0)){break}c[A>>2]=c[U+8>>2]}}while(0);if((c[(c[o>>2]|0)+16>>2]|0)==0){z=195}}else if((q|0)==3){U=i+116|0;t=(f|0)==0;v=i+96|0;l=i+108|0;K=i+5792|0;H=i+5796|0;w=i+5784|0;x=i+2440+(d[169256]<<2)|0;u=i+5788|0;A=i+56|0;I=i+92|0;d:while(1){M=c[U>>2]|0;do{if(M>>>0<259>>>0){Cg(i);J=c[U>>2]|0;if(J>>>0<259>>>0&t){z=195;break c}if((J|0)==0){break d}c[v>>2]=0;if(J>>>0>2>>>0){sa=J;z=155;break}ta=c[l>>2]|0;z=170}else{c[v>>2]=0;sa=M;z=155}}while(0);do{if((z|0)==155){z=0;M=c[l>>2]|0;if((M|0)==0){ta=0;z=170;break}J=c[A>>2]|0;N=a[J+(M-1)|0]|0;if(N<<24>>24!=(a[J+M|0]|0)){ta=M;z=170;break}if(N<<24>>24!=(a[J+(M+1)|0]|0)){ta=M;z=170;break}Q=J+(M+2)|0;if(N<<24>>24!=(a[Q]|0)){ta=M;z=170;break}L=J+(M+258)|0;J=Q;while(1){Q=J+1|0;if(N<<24>>24!=(a[Q]|0)){ua=Q;break}Q=J+2|0;if(N<<24>>24!=(a[Q]|0)){ua=Q;break}Q=J+3|0;if(N<<24>>24!=(a[Q]|0)){ua=Q;break}Q=J+4|0;if(N<<24>>24!=(a[Q]|0)){ua=Q;break}Q=J+5|0;if(N<<24>>24!=(a[Q]|0)){ua=Q;break}Q=J+6|0;if(N<<24>>24!=(a[Q]|0)){ua=Q;break}Q=J+7|0;if(N<<24>>24!=(a[Q]|0)){ua=Q;break}Q=J+8|0;if(N<<24>>24==(a[Q]|0)&Q>>>0<L>>>0){J=Q}else{ua=Q;break}}J=ua-L+258|0;N=J>>>0>sa>>>0?sa:J;c[v>>2]=N;if(N>>>0<=2>>>0){ta=M;z=170;break}J=N+253|0;b[(c[H>>2]|0)+(c[K>>2]<<1)>>1]=1;N=c[K>>2]|0;c[K>>2]=N+1;a[(c[w>>2]|0)+N|0]=J;N=i+148+((d[169e3+(J&255)|0]|256)+1<<2)|0;b[N>>1]=(b[N>>1]|0)+1;b[x>>1]=(b[x>>1]|0)+1;N=(c[K>>2]|0)==((c[u>>2]|0)-1|0);J=c[v>>2]|0;c[U>>2]=(c[U>>2]|0)-J;Q=(c[l>>2]|0)+J|0;c[l>>2]=Q;c[v>>2]=0;if(N){va=Q}else{continue d}}}while(0);if((z|0)==170){z=0;Q=a[(c[A>>2]|0)+ta|0]|0;b[(c[H>>2]|0)+(c[K>>2]<<1)>>1]=0;N=c[K>>2]|0;c[K>>2]=N+1;a[(c[w>>2]|0)+N|0]=Q;N=i+148+((Q&255)<<2)|0;b[N>>1]=(b[N>>1]|0)+1;N=(c[K>>2]|0)==((c[u>>2]|0)-1|0);c[U>>2]=(c[U>>2]|0)-1;Q=(c[l>>2]|0)+1|0;c[l>>2]=Q;if(N){va=Q}else{continue}}Q=c[I>>2]|0;if((Q|0)>-1){wa=(c[A>>2]|0)+Q|0}else{wa=0}Og(i,wa,va-Q|0,0);c[I>>2]=c[l>>2];Q=c[o>>2]|0;N=c[Q+28>>2]|0;Mg(N);J=N+20|0;R=c[J>>2]|0;S=Q+16|0;T=c[S>>2]|0;xa=R>>>0>T>>>0?T:R;do{if((xa|0)!=0){R=Q+12|0;T=N+16|0;tF(c[R>>2]|0,c[T>>2]|0,xa)|0;c[R>>2]=(c[R>>2]|0)+xa;c[T>>2]=(c[T>>2]|0)+xa;R=Q+20|0;c[R>>2]=(c[R>>2]|0)+xa;c[S>>2]=(c[S>>2]|0)-xa;R=c[J>>2]|0;c[J>>2]=R-xa;if((R|0)!=(xa|0)){break}c[T>>2]=c[N+8>>2]}}while(0);if((c[(c[o>>2]|0)+16>>2]|0)==0){z=195;break c}}c[i+5812>>2]=0;if(m){U=c[I>>2]|0;if((U|0)>-1){ya=(c[A>>2]|0)+U|0}else{ya=0}Og(i,ya,(c[l>>2]|0)-U|0,1);c[I>>2]=c[l>>2];U=c[o>>2]|0;u=c[U+28>>2]|0;Mg(u);w=u+20|0;H=c[w>>2]|0;v=U+16|0;x=c[v>>2]|0;t=H>>>0>x>>>0?x:H;do{if((t|0)!=0){H=U+12|0;x=u+16|0;tF(c[H>>2]|0,c[x>>2]|0,t)|0;c[H>>2]=(c[H>>2]|0)+t;c[x>>2]=(c[x>>2]|0)+t;H=U+20|0;c[H>>2]=(c[H>>2]|0)+t;c[v>>2]=(c[v>>2]|0)-t;H=c[w>>2]|0;c[w>>2]=H-t;if((H|0)!=(t|0)){break}c[x>>2]=c[u+8>>2]}}while(0);qa=(c[(c[o>>2]|0)+16>>2]|0)==0?2:3;z=192;break}if((c[K>>2]|0)==0){break}u=c[I>>2]|0;if((u|0)>-1){za=(c[A>>2]|0)+u|0}else{za=0}Og(i,za,(c[l>>2]|0)-u|0,0);c[I>>2]=c[l>>2];u=c[o>>2]|0;t=c[u+28>>2]|0;Mg(t);w=t+20|0;v=c[w>>2]|0;U=u+16|0;x=c[U>>2]|0;H=v>>>0>x>>>0?x:v;do{if((H|0)!=0){v=u+12|0;x=t+16|0;tF(c[v>>2]|0,c[x>>2]|0,H)|0;c[v>>2]=(c[v>>2]|0)+H;c[x>>2]=(c[x>>2]|0)+H;v=u+20|0;c[v>>2]=(c[v>>2]|0)+H;c[U>>2]=(c[U>>2]|0)-H;v=c[w>>2]|0;c[w>>2]=v-H;if((v|0)!=(H|0)){break}c[x>>2]=c[t+8>>2]}}while(0);if((c[(c[o>>2]|0)+16>>2]|0)==0){z=195}}else{qa=Oc[c[40336+((c[i+132>>2]|0)*12|0)>>2]&255](i,f)|0;z=192}}while(0);do{if((z|0)==192){if((qa&-2|0)==2){c[k>>2]=666}if((qa&-3|0)==0){z=195;break}if((qa|0)!=1){break b}}}while(0);if((z|0)==195){if((c[n>>2]|0)!=0){g=0;return g|0}c[p>>2]=-1;g=0;return g|0}do{if((f|0)==1){Ng(i)}else if((f|0)!=5){Lg(i,0,0,0);if((f|0)!=3){break}q=i+76|0;P=i+68|0;b[(c[P>>2]|0)+((c[q>>2]|0)-1<<1)>>1]=0;vF(c[P>>2]|0,0,(c[q>>2]<<1)-2|0)|0;if((c[i+116>>2]|0)!=0){break}c[i+108>>2]=0;c[i+92>>2]=0;c[i+5812>>2]=0}}while(0);q=c[h>>2]|0;Mg(q);P=q+20|0;O=c[P>>2]|0;t=c[n>>2]|0;H=O>>>0>t>>>0?t:O;if((H|0)==0){Aa=t}else{t=q+16|0;tF(c[j>>2]|0,c[t>>2]|0,H)|0;c[j>>2]=(c[j>>2]|0)+H;c[t>>2]=(c[t>>2]|0)+H;O=e+20|0;c[O>>2]=(c[O>>2]|0)+H;c[n>>2]=(c[n>>2]|0)-H;O=c[P>>2]|0;c[P>>2]=O-H;if((O|0)==(H|0)){c[t>>2]=c[q+8>>2]}Aa=c[n>>2]|0}if((Aa|0)!=0){break}c[p>>2]=-1;g=0;return g|0}}while(0);if(!m){g=0;return g|0}p=i+24|0;k=c[p>>2]|0;if((k|0)<1){g=1;return g|0}o=e+48|0;q=c[o>>2]|0;if((k|0)==2){k=c[r>>2]|0;c[r>>2]=k+1;t=i+8|0;a[(c[t>>2]|0)+k|0]=q;k=(c[o>>2]|0)>>>8&255;H=c[r>>2]|0;c[r>>2]=H+1;a[(c[t>>2]|0)+H|0]=k;k=(c[o>>2]|0)>>>16&255;H=c[r>>2]|0;c[r>>2]=H+1;a[(c[t>>2]|0)+H|0]=k;k=(c[o>>2]|0)>>>24&255;H=c[r>>2]|0;c[r>>2]=H+1;a[(c[t>>2]|0)+H|0]=k;k=e+8|0;H=c[k>>2]&255;O=c[r>>2]|0;c[r>>2]=O+1;a[(c[t>>2]|0)+O|0]=H;H=(c[k>>2]|0)>>>8&255;O=c[r>>2]|0;c[r>>2]=O+1;a[(c[t>>2]|0)+O|0]=H;H=(c[k>>2]|0)>>>16&255;O=c[r>>2]|0;c[r>>2]=O+1;a[(c[t>>2]|0)+O|0]=H;H=(c[k>>2]|0)>>>24&255;k=c[r>>2]|0;c[r>>2]=k+1;a[(c[t>>2]|0)+k|0]=H}else{H=c[r>>2]|0;c[r>>2]=H+1;k=i+8|0;a[(c[k>>2]|0)+H|0]=q>>>24;H=c[r>>2]|0;c[r>>2]=H+1;a[(c[k>>2]|0)+H|0]=q>>>16;q=c[o>>2]|0;o=c[r>>2]|0;c[r>>2]=o+1;a[(c[k>>2]|0)+o|0]=q>>>8;o=c[r>>2]|0;c[r>>2]=o+1;a[(c[k>>2]|0)+o|0]=q}q=c[h>>2]|0;Mg(q);o=q+20|0;k=c[o>>2]|0;H=c[n>>2]|0;t=k>>>0>H>>>0?H:k;do{if((t|0)!=0){k=q+16|0;tF(c[j>>2]|0,c[k>>2]|0,t)|0;c[j>>2]=(c[j>>2]|0)+t;c[k>>2]=(c[k>>2]|0)+t;H=e+20|0;c[H>>2]=(c[H>>2]|0)+t;c[n>>2]=(c[n>>2]|0)-t;H=c[o>>2]|0;c[o>>2]=H-t;if((H|0)!=(t|0)){break}c[k>>2]=c[q+8>>2]}}while(0);q=c[p>>2]|0;if((q|0)>0){c[p>>2]=-q}g=(c[r>>2]|0)==0|0;return g|0}}while(0);c[e+24>>2]=c[10];g=-2;return g|0}function Fg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;d=(c[a+12>>2]|0)-5|0;e=d>>>0<65535>>>0?d:65535;d=a+116|0;f=a+108|0;g=a+92|0;h=a+44|0;i=a+56|0;j=a|0;while(1){k=c[d>>2]|0;if(k>>>0<2>>>0){Cg(a);l=c[d>>2]|0;if((l|b|0)==0){m=0;n=35;break}if((l|0)==0){n=20;break}else{o=l}}else{o=k}k=(c[f>>2]|0)+o|0;c[f>>2]=k;c[d>>2]=0;l=c[g>>2]|0;p=l+e|0;if((k|0)!=0&k>>>0<p>>>0){q=k;r=l}else{c[d>>2]=k-p;c[f>>2]=p;if((l|0)>-1){s=(c[i>>2]|0)+l|0}else{s=0}Og(a,s,e,0);c[g>>2]=c[f>>2];l=c[j>>2]|0;p=c[l+28>>2]|0;Mg(p);k=p+20|0;t=c[k>>2]|0;u=l+16|0;v=c[u>>2]|0;w=t>>>0>v>>>0?v:t;do{if((w|0)!=0){t=l+12|0;v=p+16|0;tF(c[t>>2]|0,c[v>>2]|0,w)|0;c[t>>2]=(c[t>>2]|0)+w;c[v>>2]=(c[v>>2]|0)+w;t=l+20|0;c[t>>2]=(c[t>>2]|0)+w;c[u>>2]=(c[u>>2]|0)-w;t=c[k>>2]|0;c[k>>2]=t-w;if((t|0)!=(w|0)){break}c[v>>2]=c[p+8>>2]}}while(0);if((c[(c[j>>2]|0)+16>>2]|0)==0){m=0;n=35;break}q=c[f>>2]|0;r=c[g>>2]|0}p=q-r|0;if(p>>>0<((c[h>>2]|0)-262|0)>>>0){continue}if((r|0)>-1){x=(c[i>>2]|0)+r|0}else{x=0}Og(a,x,p,0);c[g>>2]=c[f>>2];p=c[j>>2]|0;w=c[p+28>>2]|0;Mg(w);k=w+20|0;u=c[k>>2]|0;l=p+16|0;v=c[l>>2]|0;t=u>>>0>v>>>0?v:u;do{if((t|0)!=0){u=p+12|0;v=w+16|0;tF(c[u>>2]|0,c[v>>2]|0,t)|0;c[u>>2]=(c[u>>2]|0)+t;c[v>>2]=(c[v>>2]|0)+t;u=p+20|0;c[u>>2]=(c[u>>2]|0)+t;c[l>>2]=(c[l>>2]|0)-t;u=c[k>>2]|0;c[k>>2]=u-t;if((u|0)!=(t|0)){break}c[v>>2]=c[w+8>>2]}}while(0);if((c[(c[j>>2]|0)+16>>2]|0)==0){m=0;n=35;break}}if((n|0)==20){c[a+5812>>2]=0;if((b|0)==4){b=c[g>>2]|0;if((b|0)>-1){y=(c[i>>2]|0)+b|0}else{y=0}Og(a,y,(c[f>>2]|0)-b|0,1);c[g>>2]=c[f>>2];b=c[j>>2]|0;y=c[b+28>>2]|0;Mg(y);x=y+20|0;r=c[x>>2]|0;h=b+16|0;q=c[h>>2]|0;e=r>>>0>q>>>0?q:r;do{if((e|0)!=0){r=b+12|0;q=y+16|0;tF(c[r>>2]|0,c[q>>2]|0,e)|0;c[r>>2]=(c[r>>2]|0)+e;c[q>>2]=(c[q>>2]|0)+e;r=b+20|0;c[r>>2]=(c[r>>2]|0)+e;c[h>>2]=(c[h>>2]|0)-e;r=c[x>>2]|0;c[x>>2]=r-e;if((r|0)!=(e|0)){break}c[q>>2]=c[y+8>>2]}}while(0);m=(c[(c[j>>2]|0)+16>>2]|0)==0?2:3;return m|0}y=c[f>>2]|0;e=c[g>>2]|0;do{if((y|0)>(e|0)){if((e|0)>-1){z=(c[i>>2]|0)+e|0}else{z=0}Og(a,z,y-e|0,0);c[g>>2]=c[f>>2];x=c[j>>2]|0;h=c[x+28>>2]|0;Mg(h);b=h+20|0;q=c[b>>2]|0;r=x+16|0;s=c[r>>2]|0;d=q>>>0>s>>>0?s:q;do{if((d|0)!=0){q=x+12|0;s=h+16|0;tF(c[q>>2]|0,c[s>>2]|0,d)|0;c[q>>2]=(c[q>>2]|0)+d;c[s>>2]=(c[s>>2]|0)+d;q=x+20|0;c[q>>2]=(c[q>>2]|0)+d;c[r>>2]=(c[r>>2]|0)-d;q=c[b>>2]|0;c[b>>2]=q-d;if((q|0)!=(d|0)){break}c[s>>2]=c[h+8>>2]}}while(0);if((c[(c[j>>2]|0)+16>>2]|0)==0){m=0}else{break}return m|0}}while(0);m=1;return m|0}else if((n|0)==35){return m|0}return 0}function Gg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0;g=e+116|0;h=(f|0)==0;i=e+72|0;j=e+88|0;k=e+108|0;l=e+56|0;m=e+84|0;n=e+68|0;o=e+52|0;p=e+64|0;q=e+44|0;r=e+96|0;s=e+112|0;t=e+5792|0;u=e+5796|0;v=e+5784|0;w=e+5788|0;x=e+128|0;y=e+92|0;z=e|0;while(1){if((c[g>>2]|0)>>>0<262>>>0){Cg(e);A=c[g>>2]|0;if(A>>>0<262>>>0&h){B=0;C=41;break}if((A|0)==0){C=26;break}if(A>>>0>2>>>0){C=6}else{C=9}}else{C=6}do{if((C|0)==6){C=0;A=c[k>>2]|0;D=((d[(c[l>>2]|0)+(A+2)|0]|0)^c[i>>2]<<c[j>>2])&c[m>>2];c[i>>2]=D;E=b[(c[n>>2]|0)+(D<<1)>>1]|0;b[(c[p>>2]|0)+((c[o>>2]&A)<<1)>>1]=E;A=E&65535;b[(c[n>>2]|0)+(c[i>>2]<<1)>>1]=c[k>>2];if(E<<16>>16==0){C=9;break}if(((c[k>>2]|0)-A|0)>>>0>((c[q>>2]|0)-262|0)>>>0){C=9;break}E=Ig(e,A)|0;c[r>>2]=E;F=E}}while(0);if((C|0)==9){C=0;F=c[r>>2]|0}do{if(F>>>0>2>>>0){E=F+253|0;A=(c[k>>2]|0)-(c[s>>2]|0)&65535;b[(c[u>>2]|0)+(c[t>>2]<<1)>>1]=A;D=c[t>>2]|0;c[t>>2]=D+1;a[(c[v>>2]|0)+D|0]=E;D=A-1&65535;A=e+148+((d[169e3+(E&255)|0]|0|256)+1<<2)|0;b[A>>1]=(b[A>>1]|0)+1;A=D&65535;if((D&65535)>>>0<256>>>0){G=A}else{G=(A>>>7)+256|0}A=e+2440+((d[169256+G|0]|0)<<2)|0;b[A>>1]=(b[A>>1]|0)+1;A=(c[t>>2]|0)==((c[w>>2]|0)-1|0)|0;D=c[r>>2]|0;E=(c[g>>2]|0)-D|0;c[g>>2]=E;if(!(D>>>0<=(c[x>>2]|0)>>>0&E>>>0>2>>>0)){E=(c[k>>2]|0)+D|0;c[k>>2]=E;c[r>>2]=0;H=c[l>>2]|0;I=d[H+E|0]|0;c[i>>2]=I;c[i>>2]=((d[H+(E+1)|0]|0)^I<<c[j>>2])&c[m>>2];J=A;K=E;break}c[r>>2]=D-1;do{D=c[k>>2]|0;E=D+1|0;c[k>>2]=E;I=((d[(c[l>>2]|0)+(D+3)|0]|0)^c[i>>2]<<c[j>>2])&c[m>>2];c[i>>2]=I;b[(c[p>>2]|0)+((c[o>>2]&E)<<1)>>1]=b[(c[n>>2]|0)+(I<<1)>>1]|0;b[(c[n>>2]|0)+(c[i>>2]<<1)>>1]=c[k>>2];I=(c[r>>2]|0)-1|0;c[r>>2]=I;}while((I|0)!=0);I=(c[k>>2]|0)+1|0;c[k>>2]=I;J=A;K=I}else{I=a[(c[l>>2]|0)+(c[k>>2]|0)|0]|0;b[(c[u>>2]|0)+(c[t>>2]<<1)>>1]=0;E=c[t>>2]|0;c[t>>2]=E+1;a[(c[v>>2]|0)+E|0]=I;E=e+148+((I&255)<<2)|0;b[E>>1]=(b[E>>1]|0)+1;E=(c[t>>2]|0)==((c[w>>2]|0)-1|0)|0;c[g>>2]=(c[g>>2]|0)-1;I=(c[k>>2]|0)+1|0;c[k>>2]=I;J=E;K=I}}while(0);if((J|0)==0){continue}I=c[y>>2]|0;if((I|0)>-1){L=(c[l>>2]|0)+I|0}else{L=0}Og(e,L,K-I|0,0);c[y>>2]=c[k>>2];I=c[z>>2]|0;E=c[I+28>>2]|0;Mg(E);D=E+20|0;H=c[D>>2]|0;M=I+16|0;N=c[M>>2]|0;O=H>>>0>N>>>0?N:H;do{if((O|0)!=0){H=I+12|0;N=E+16|0;tF(c[H>>2]|0,c[N>>2]|0,O)|0;c[H>>2]=(c[H>>2]|0)+O;c[N>>2]=(c[N>>2]|0)+O;H=I+20|0;c[H>>2]=(c[H>>2]|0)+O;c[M>>2]=(c[M>>2]|0)-O;H=c[D>>2]|0;c[D>>2]=H-O;if((H|0)!=(O|0)){break}c[N>>2]=c[E+8>>2]}}while(0);if((c[(c[z>>2]|0)+16>>2]|0)==0){B=0;C=41;break}}if((C|0)==26){K=c[k>>2]|0;c[e+5812>>2]=K>>>0<2>>>0?K:2;if((f|0)==4){f=c[y>>2]|0;if((f|0)>-1){P=(c[l>>2]|0)+f|0}else{P=0}Og(e,P,K-f|0,1);c[y>>2]=c[k>>2];f=c[z>>2]|0;P=c[f+28>>2]|0;Mg(P);L=P+20|0;J=c[L>>2]|0;g=f+16|0;w=c[g>>2]|0;v=J>>>0>w>>>0?w:J;do{if((v|0)!=0){J=f+12|0;w=P+16|0;tF(c[J>>2]|0,c[w>>2]|0,v)|0;c[J>>2]=(c[J>>2]|0)+v;c[w>>2]=(c[w>>2]|0)+v;J=f+20|0;c[J>>2]=(c[J>>2]|0)+v;c[g>>2]=(c[g>>2]|0)-v;J=c[L>>2]|0;c[L>>2]=J-v;if((J|0)!=(v|0)){break}c[w>>2]=c[P+8>>2]}}while(0);B=(c[(c[z>>2]|0)+16>>2]|0)==0?2:3;return B|0}do{if((c[t>>2]|0)!=0){P=c[y>>2]|0;if((P|0)>-1){Q=(c[l>>2]|0)+P|0}else{Q=0}Og(e,Q,K-P|0,0);c[y>>2]=c[k>>2];P=c[z>>2]|0;v=c[P+28>>2]|0;Mg(v);L=v+20|0;g=c[L>>2]|0;f=P+16|0;w=c[f>>2]|0;J=g>>>0>w>>>0?w:g;do{if((J|0)!=0){g=P+12|0;w=v+16|0;tF(c[g>>2]|0,c[w>>2]|0,J)|0;c[g>>2]=(c[g>>2]|0)+J;c[w>>2]=(c[w>>2]|0)+J;g=P+20|0;c[g>>2]=(c[g>>2]|0)+J;c[f>>2]=(c[f>>2]|0)-J;g=c[L>>2]|0;c[L>>2]=g-J;if((g|0)!=(J|0)){break}c[w>>2]=c[v+8>>2]}}while(0);if((c[(c[z>>2]|0)+16>>2]|0)==0){B=0}else{break}return B|0}}while(0);B=1;return B|0}else if((C|0)==41){return B|0}return 0}function Hg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;g=e+116|0;h=(f|0)==0;i=e+72|0;j=e+88|0;k=e+108|0;l=e+56|0;m=e+84|0;n=e+68|0;o=e+52|0;p=e+64|0;q=e+96|0;r=e+120|0;s=e+112|0;t=e+100|0;u=e+5792|0;v=e+5796|0;w=e+5784|0;x=e+5788|0;y=e+104|0;z=e+92|0;A=e|0;B=e+128|0;C=e+44|0;D=e+136|0;a:while(1){E=c[g>>2]|0;while(1){do{if(E>>>0<262>>>0){Cg(e);F=c[g>>2]|0;if(F>>>0<262>>>0&h){G=0;H=57;break a}if((F|0)==0){H=40;break a}if(F>>>0>2>>>0){H=8;break}c[r>>2]=c[q>>2];c[t>>2]=c[s>>2];c[q>>2]=2;I=2;H=16}else{H=8}}while(0);do{if((H|0)==8){H=0;F=c[k>>2]|0;J=((d[(c[l>>2]|0)+(F+2)|0]|0)^c[i>>2]<<c[j>>2])&c[m>>2];c[i>>2]=J;K=b[(c[n>>2]|0)+(J<<1)>>1]|0;b[(c[p>>2]|0)+((c[o>>2]&F)<<1)>>1]=K;F=K&65535;b[(c[n>>2]|0)+(c[i>>2]<<1)>>1]=c[k>>2];J=c[q>>2]|0;c[r>>2]=J;c[t>>2]=c[s>>2];c[q>>2]=2;if(K<<16>>16==0){I=2;H=16;break}if(J>>>0>=(c[B>>2]|0)>>>0){L=J;M=2;break}if(((c[k>>2]|0)-F|0)>>>0>((c[C>>2]|0)-262|0)>>>0){I=2;H=16;break}J=Ig(e,F)|0;c[q>>2]=J;if(J>>>0>=6>>>0){I=J;H=16;break}if((c[D>>2]|0)!=1){if((J|0)!=3){I=J;H=16;break}if(((c[k>>2]|0)-(c[s>>2]|0)|0)>>>0<=4096>>>0){I=3;H=16;break}}c[q>>2]=2;I=2;H=16}}while(0);if((H|0)==16){H=0;L=c[r>>2]|0;M=I}if(!(L>>>0<3>>>0|M>>>0>L>>>0)){break}if((c[y>>2]|0)==0){c[y>>2]=1;c[k>>2]=(c[k>>2]|0)+1;J=(c[g>>2]|0)-1|0;c[g>>2]=J;E=J;continue}J=a[(c[l>>2]|0)+((c[k>>2]|0)-1)|0]|0;b[(c[v>>2]|0)+(c[u>>2]<<1)>>1]=0;F=c[u>>2]|0;c[u>>2]=F+1;a[(c[w>>2]|0)+F|0]=J;F=e+148+((J&255)<<2)|0;b[F>>1]=(b[F>>1]|0)+1;do{if((c[u>>2]|0)==((c[x>>2]|0)-1|0)){F=c[z>>2]|0;if((F|0)>-1){N=(c[l>>2]|0)+F|0}else{N=0}Og(e,N,(c[k>>2]|0)-F|0,0);c[z>>2]=c[k>>2];F=c[A>>2]|0;J=c[F+28>>2]|0;Mg(J);K=J+20|0;O=c[K>>2]|0;P=F+16|0;Q=c[P>>2]|0;R=O>>>0>Q>>>0?Q:O;if((R|0)==0){break}O=F+12|0;Q=J+16|0;tF(c[O>>2]|0,c[Q>>2]|0,R)|0;c[O>>2]=(c[O>>2]|0)+R;c[Q>>2]=(c[Q>>2]|0)+R;O=F+20|0;c[O>>2]=(c[O>>2]|0)+R;c[P>>2]=(c[P>>2]|0)-R;P=c[K>>2]|0;c[K>>2]=P-R;if((P|0)!=(R|0)){break}c[Q>>2]=c[J+8>>2]}}while(0);c[k>>2]=(c[k>>2]|0)+1;J=(c[g>>2]|0)-1|0;c[g>>2]=J;if((c[(c[A>>2]|0)+16>>2]|0)==0){G=0;H=57;break a}else{E=J}}E=c[k>>2]|0;J=E-3+(c[g>>2]|0)|0;Q=L+253|0;R=E+65535-(c[t>>2]|0)&65535;b[(c[v>>2]|0)+(c[u>>2]<<1)>>1]=R;E=c[u>>2]|0;c[u>>2]=E+1;a[(c[w>>2]|0)+E|0]=Q;E=R-1&65535;R=e+148+((d[169e3+(Q&255)|0]|0|256)+1<<2)|0;b[R>>1]=(b[R>>1]|0)+1;R=E&65535;if((E&65535)>>>0<256>>>0){S=R}else{S=(R>>>7)+256|0}R=e+2440+((d[169256+S|0]|0)<<2)|0;b[R>>1]=(b[R>>1]|0)+1;R=c[u>>2]|0;E=(c[x>>2]|0)-1|0;Q=c[r>>2]|0;c[g>>2]=1-Q+(c[g>>2]|0);P=Q-2|0;c[r>>2]=P;Q=P;do{P=c[k>>2]|0;K=P+1|0;c[k>>2]=K;if(K>>>0>J>>>0){T=Q}else{O=((d[(c[l>>2]|0)+(P+3)|0]|0)^c[i>>2]<<c[j>>2])&c[m>>2];c[i>>2]=O;b[(c[p>>2]|0)+((c[o>>2]&K)<<1)>>1]=b[(c[n>>2]|0)+(O<<1)>>1]|0;b[(c[n>>2]|0)+(c[i>>2]<<1)>>1]=c[k>>2];T=c[r>>2]|0}Q=T-1|0;c[r>>2]=Q;}while((Q|0)!=0);c[y>>2]=0;c[q>>2]=2;Q=(c[k>>2]|0)+1|0;c[k>>2]=Q;if((R|0)!=(E|0)){continue}J=c[z>>2]|0;if((J|0)>-1){U=(c[l>>2]|0)+J|0}else{U=0}Og(e,U,Q-J|0,0);c[z>>2]=c[k>>2];J=c[A>>2]|0;Q=c[J+28>>2]|0;Mg(Q);O=Q+20|0;K=c[O>>2]|0;P=J+16|0;F=c[P>>2]|0;V=K>>>0>F>>>0?F:K;do{if((V|0)!=0){K=J+12|0;F=Q+16|0;tF(c[K>>2]|0,c[F>>2]|0,V)|0;c[K>>2]=(c[K>>2]|0)+V;c[F>>2]=(c[F>>2]|0)+V;K=J+20|0;c[K>>2]=(c[K>>2]|0)+V;c[P>>2]=(c[P>>2]|0)-V;K=c[O>>2]|0;c[O>>2]=K-V;if((K|0)!=(V|0)){break}c[F>>2]=c[Q+8>>2]}}while(0);if((c[(c[A>>2]|0)+16>>2]|0)==0){G=0;H=57;break}}if((H|0)==40){if((c[y>>2]|0)!=0){U=a[(c[l>>2]|0)+((c[k>>2]|0)-1)|0]|0;b[(c[v>>2]|0)+(c[u>>2]<<1)>>1]=0;v=c[u>>2]|0;c[u>>2]=v+1;a[(c[w>>2]|0)+v|0]=U;v=e+148+((U&255)<<2)|0;b[v>>1]=(b[v>>1]|0)+1;c[y>>2]=0}y=c[k>>2]|0;c[e+5812>>2]=y>>>0<2>>>0?y:2;if((f|0)==4){f=c[z>>2]|0;if((f|0)>-1){W=(c[l>>2]|0)+f|0}else{W=0}Og(e,W,y-f|0,1);c[z>>2]=c[k>>2];f=c[A>>2]|0;W=c[f+28>>2]|0;Mg(W);v=W+20|0;U=c[v>>2]|0;w=f+16|0;q=c[w>>2]|0;r=U>>>0>q>>>0?q:U;do{if((r|0)!=0){U=f+12|0;q=W+16|0;tF(c[U>>2]|0,c[q>>2]|0,r)|0;c[U>>2]=(c[U>>2]|0)+r;c[q>>2]=(c[q>>2]|0)+r;U=f+20|0;c[U>>2]=(c[U>>2]|0)+r;c[w>>2]=(c[w>>2]|0)-r;U=c[v>>2]|0;c[v>>2]=U-r;if((U|0)!=(r|0)){break}c[q>>2]=c[W+8>>2]}}while(0);G=(c[(c[A>>2]|0)+16>>2]|0)==0?2:3;return G|0}do{if((c[u>>2]|0)!=0){W=c[z>>2]|0;if((W|0)>-1){X=(c[l>>2]|0)+W|0}else{X=0}Og(e,X,y-W|0,0);c[z>>2]=c[k>>2];W=c[A>>2]|0;r=c[W+28>>2]|0;Mg(r);v=r+20|0;w=c[v>>2]|0;f=W+16|0;q=c[f>>2]|0;U=w>>>0>q>>>0?q:w;do{if((U|0)!=0){w=W+12|0;q=r+16|0;tF(c[w>>2]|0,c[q>>2]|0,U)|0;c[w>>2]=(c[w>>2]|0)+U;c[q>>2]=(c[q>>2]|0)+U;w=W+20|0;c[w>>2]=(c[w>>2]|0)+U;c[f>>2]=(c[f>>2]|0)-U;w=c[v>>2]|0;c[v>>2]=w-U;if((w|0)!=(U|0)){break}c[q>>2]=c[r+8>>2]}}while(0);if((c[(c[A>>2]|0)+16>>2]|0)==0){G=0}else{break}return G|0}}while(0);G=1;return G|0}else if((H|0)==57){return G|0}return 0}function Ig(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=c[b+124>>2]|0;g=c[b+56>>2]|0;h=c[b+108>>2]|0;i=g+h|0;j=c[b+120>>2]|0;k=c[b+144>>2]|0;l=(c[b+44>>2]|0)-262|0;m=h>>>0>l>>>0?h-l|0:0;l=c[b+64>>2]|0;n=c[b+52>>2]|0;o=g+(h+258)|0;p=c[b+116>>2]|0;q=k>>>0>p>>>0?p:k;k=b+112|0;r=g+(h+1)|0;s=g+(h+2)|0;t=o;u=h+257|0;v=a[g+(j+h)|0]|0;w=a[g+(h-1+j)|0]|0;x=d;d=j>>>0<(c[b+140>>2]|0)>>>0?f:f>>>2;f=j;a:while(1){j=g+x|0;do{if((a[g+(x+f)|0]|0)==v<<24>>24){if((a[g+(f-1+x)|0]|0)!=w<<24>>24){y=v;z=w;A=f;break}if((a[j]|0)!=(a[i]|0)){y=v;z=w;A=f;break}if((a[g+(x+1)|0]|0)!=(a[r]|0)){y=v;z=w;A=f;break}b=s;B=g+(x+2)|0;while(1){C=b+1|0;if((a[C]|0)!=(a[B+1|0]|0)){D=C;break}C=b+2|0;if((a[C]|0)!=(a[B+2|0]|0)){D=C;break}C=b+3|0;if((a[C]|0)!=(a[B+3|0]|0)){D=C;break}C=b+4|0;if((a[C]|0)!=(a[B+4|0]|0)){D=C;break}C=b+5|0;if((a[C]|0)!=(a[B+5|0]|0)){D=C;break}C=b+6|0;if((a[C]|0)!=(a[B+6|0]|0)){D=C;break}C=b+7|0;if((a[C]|0)!=(a[B+7|0]|0)){D=C;break}C=b+8|0;E=B+8|0;if((a[C]|0)==(a[E]|0)&C>>>0<o>>>0){b=C;B=E}else{D=C;break}}B=D-t|0;b=B+258|0;if((b|0)<=(f|0)){y=v;z=w;A=f;break}c[k>>2]=x;if((b|0)>=(q|0)){F=b;G=20;break a}y=a[g+(b+h)|0]|0;z=a[g+(u+B)|0]|0;A=b}else{y=v;z=w;A=f}}while(0);j=e[l+((x&n)<<1)>>1]|0;if(j>>>0<=m>>>0){F=A;G=20;break}b=d-1|0;if((b|0)==0){F=A;G=20;break}else{v=y;w=z;x=j;d=b;f=A}}if((G|0)==20){return(F>>>0>p>>>0?p:F)|0}return 0}function Jg(a){a=a|0;c[a+2840>>2]=a+148;c[a+2848>>2]=11576;c[a+2852>>2]=a+2440;c[a+2860>>2]=11720;c[a+2864>>2]=a+2684;c[a+2872>>2]=11744;b[a+5816>>1]=0;c[a+5820>>2]=0;Kg(a);return}function Kg(a){a=a|0;var d=0;d=0;do{b[a+148+(d<<2)>>1]=0;d=d+1|0;}while((d|0)<286);b[a+2440>>1]=0;b[a+2444>>1]=0;b[a+2448>>1]=0;b[a+2452>>1]=0;b[a+2456>>1]=0;b[a+2460>>1]=0;b[a+2464>>1]=0;b[a+2468>>1]=0;b[a+2472>>1]=0;b[a+2476>>1]=0;b[a+2480>>1]=0;b[a+2484>>1]=0;b[a+2488>>1]=0;b[a+2492>>1]=0;b[a+2496>>1]=0;b[a+2500>>1]=0;b[a+2504>>1]=0;b[a+2508>>1]=0;b[a+2512>>1]=0;b[a+2516>>1]=0;b[a+2520>>1]=0;b[a+2524>>1]=0;b[a+2528>>1]=0;b[a+2532>>1]=0;b[a+2536>>1]=0;b[a+2540>>1]=0;b[a+2544>>1]=0;b[a+2548>>1]=0;b[a+2552>>1]=0;b[a+2556>>1]=0;b[a+2684>>1]=0;b[a+2688>>1]=0;b[a+2692>>1]=0;b[a+2696>>1]=0;b[a+2700>>1]=0;b[a+2704>>1]=0;b[a+2708>>1]=0;b[a+2712>>1]=0;b[a+2716>>1]=0;b[a+2720>>1]=0;b[a+2724>>1]=0;b[a+2728>>1]=0;b[a+2732>>1]=0;b[a+2736>>1]=0;b[a+2740>>1]=0;b[a+2744>>1]=0;b[a+2748>>1]=0;b[a+2752>>1]=0;b[a+2756>>1]=0;b[a+1172>>1]=1;c[a+5804>>2]=0;c[a+5800>>2]=0;c[a+5808>>2]=0;c[a+5792>>2]=0;return}function Lg(d,f,g,h){d=d|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;i=d+5820|0;j=c[i>>2]|0;k=h&65535;h=d+5816|0;l=e[h>>1]|0|k<<j;b[h>>1]=l;if((j|0)>13){m=d+20|0;n=c[m>>2]|0;c[m>>2]=n+1;o=d+8|0;a[(c[o>>2]|0)+n|0]=l;n=(e[h>>1]|0)>>>8&255;p=c[m>>2]|0;c[m>>2]=p+1;a[(c[o>>2]|0)+p|0]=n;n=c[i>>2]|0;p=k>>>((16-n|0)>>>0);b[h>>1]=p;q=n-13|0;r=p&255}else{q=j+3|0;r=l&255}c[i>>2]=q;do{if((q|0)>8){l=d+20|0;j=c[l>>2]|0;c[l>>2]=j+1;p=d+8|0;a[(c[p>>2]|0)+j|0]=r;j=(e[h>>1]|0)>>>8&255;n=c[l>>2]|0;c[l>>2]=n+1;a[(c[p>>2]|0)+n|0]=j;s=l;t=p}else{p=d+20|0;if((q|0)>0){l=c[p>>2]|0;c[p>>2]=l+1;j=d+8|0;a[(c[j>>2]|0)+l|0]=r;s=p;t=j;break}else{s=p;t=d+8|0;break}}}while(0);b[h>>1]=0;c[i>>2]=0;i=c[s>>2]|0;c[s>>2]=i+1;a[(c[t>>2]|0)+i|0]=g;i=c[s>>2]|0;c[s>>2]=i+1;a[(c[t>>2]|0)+i|0]=g>>>8;i=g&65535^65535;h=c[s>>2]|0;c[s>>2]=h+1;a[(c[t>>2]|0)+h|0]=i;h=c[s>>2]|0;c[s>>2]=h+1;a[(c[t>>2]|0)+h|0]=i>>>8;if((g|0)==0){return}else{u=g;v=f}while(1){f=u-1|0;g=a[v]|0;i=c[s>>2]|0;c[s>>2]=i+1;a[(c[t>>2]|0)+i|0]=g;if((f|0)==0){break}else{u=f;v=v+1|0}}return}function Mg(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=d+5820|0;g=c[f>>2]|0;if((g|0)==16){h=d+5816|0;i=b[h>>1]&255;j=d+20|0;k=c[j>>2]|0;c[j>>2]=k+1;l=d+8|0;a[(c[l>>2]|0)+k|0]=i;i=(e[h>>1]|0)>>>8&255;k=c[j>>2]|0;c[j>>2]=k+1;a[(c[l>>2]|0)+k|0]=i;b[h>>1]=0;c[f>>2]=0;return}if((g|0)<=7){return}g=d+5816|0;h=b[g>>1]&255;i=d+20|0;k=c[i>>2]|0;c[i>>2]=k+1;a[(c[d+8>>2]|0)+k|0]=h;b[g>>1]=(e[g>>1]|0)>>>8;c[f>>2]=(c[f>>2]|0)-8;return}function Ng(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=d+5820|0;g=c[f>>2]|0;h=d+5816|0;i=e[h>>1]|0|2<<g;b[h>>1]=i;if((g|0)>13){j=d+20|0;k=c[j>>2]|0;c[j>>2]=k+1;l=d+8|0;a[(c[l>>2]|0)+k|0]=i;k=(e[h>>1]|0)>>>8&255;m=c[j>>2]|0;c[j>>2]=m+1;a[(c[l>>2]|0)+m|0]=k;k=c[f>>2]|0;m=2>>>((16-k|0)>>>0);b[h>>1]=m;n=k-13|0;o=m&255}else{n=g+3|0;o=i&255}c[f>>2]=n;if((n|0)>9){i=d+20|0;g=c[i>>2]|0;c[i>>2]=g+1;m=d+8|0;a[(c[m>>2]|0)+g|0]=o;g=(e[h>>1]|0)>>>8&255;k=c[i>>2]|0;c[i>>2]=k+1;a[(c[m>>2]|0)+k|0]=g;b[h>>1]=0;p=(c[f>>2]|0)-9|0;q=0}else{p=n+7|0;q=o}c[f>>2]=p;if((p|0)==16){o=d+20|0;n=c[o>>2]|0;c[o>>2]=n+1;g=d+8|0;a[(c[g>>2]|0)+n|0]=q;n=(e[h>>1]|0)>>>8&255;k=c[o>>2]|0;c[o>>2]=k+1;a[(c[g>>2]|0)+k|0]=n;b[h>>1]=0;c[f>>2]=0;return}if((p|0)<=7){return}p=d+20|0;n=c[p>>2]|0;c[p>>2]=n+1;a[(c[d+8>>2]|0)+n|0]=q;b[h>>1]=(e[h>>1]|0)>>>8;c[f>>2]=(c[f>>2]|0)-8;return}function Og(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;if((c[f+132>>2]|0)>0){j=(c[f>>2]|0)+44|0;if((c[j>>2]|0)==2){k=-201342849;l=0;while(1){if((k&1|0)!=0){if((b[f+148+(l<<2)>>1]|0)!=0){m=0;break}}n=l+1|0;if((n|0)<32){k=k>>>1;l=n}else{o=6;break}}a:do{if((o|0)==6){if((b[f+184>>1]|0)!=0){m=1;break}if((b[f+188>>1]|0)!=0){m=1;break}if((b[f+200>>1]|0)==0){p=32}else{m=1;break}while(1){l=p+1|0;if((b[f+148+(p<<2)>>1]|0)!=0){m=1;break a}if((l|0)<256){p=l}else{m=0;break}}}}while(0);c[j>>2]=m}Pg(f,f+2840|0);Pg(f,f+2852|0);Sg(f,f+148|0,c[f+2844>>2]|0);Sg(f,f+2440|0,c[f+2856>>2]|0);Pg(f,f+2864|0);m=18;while(1){j=m-1|0;if((b[f+2684+(d[71328+m|0]<<2)+2>>1]|0)!=0){q=m;break}if((j|0)>2){m=j}else{q=j;break}}m=f+5800|0;j=(q*3|0)+17+(c[m>>2]|0)|0;c[m>>2]=j;m=(j+10|0)>>>3;j=((c[f+5804>>2]|0)+10|0)>>>3;r=j>>>0>m>>>0?m:j;s=j;t=q}else{q=h+5|0;r=q;s=q;t=0}do{if((h+4|0)>>>0>r>>>0|(g|0)==0){q=f+5820|0;j=c[q>>2]|0;m=(j|0)>13;if((c[f+136>>2]|0)==4|(s|0)==(r|0)){p=i+2&65535;o=f+5816|0;l=e[o>>1]|p<<j;b[o>>1]=l;if(m){k=f+20|0;n=c[k>>2]|0;c[k>>2]=n+1;u=f+8|0;a[(c[u>>2]|0)+n|0]=l;l=(e[o>>1]|0)>>>8&255;n=c[k>>2]|0;c[k>>2]=n+1;a[(c[u>>2]|0)+n|0]=l;l=c[q>>2]|0;b[o>>1]=p>>>((16-l|0)>>>0);v=l-13|0}else{v=j+3|0}c[q>>2]=v;Qg(f,10424,11600);break}l=i+4&65535;p=f+5816|0;o=e[p>>1]|l<<j;n=o&65535;b[p>>1]=n;if(m){m=f+20|0;u=c[m>>2]|0;c[m>>2]=u+1;k=f+8|0;a[(c[k>>2]|0)+u|0]=o;o=(e[p>>1]|0)>>>8&255;u=c[m>>2]|0;c[m>>2]=u+1;a[(c[k>>2]|0)+u|0]=o;o=c[q>>2]|0;u=l>>>((16-o|0)>>>0)&65535;b[p>>1]=u;w=o-13|0;x=u}else{w=j+3|0;x=n}c[q>>2]=w;n=c[f+2844>>2]|0;j=c[f+2856>>2]|0;u=n+65280&65535;o=x&65535|u<<w;l=o&65535;b[p>>1]=l;if((w|0)>11){k=f+20|0;m=c[k>>2]|0;c[k>>2]=m+1;y=f+8|0;a[(c[y>>2]|0)+m|0]=o;o=(e[p>>1]|0)>>>8&255;m=c[k>>2]|0;c[k>>2]=m+1;a[(c[y>>2]|0)+m|0]=o;o=c[q>>2]|0;m=u>>>((16-o|0)>>>0)&65535;b[p>>1]=m;z=o-11|0;A=m}else{z=w+5|0;A=l}c[q>>2]=z;l=j&65535;m=l<<z|A&65535;o=m&65535;b[p>>1]=o;if((z|0)>11){u=f+20|0;y=c[u>>2]|0;c[u>>2]=y+1;k=f+8|0;a[(c[k>>2]|0)+y|0]=m;m=(e[p>>1]|0)>>>8&255;y=c[u>>2]|0;c[u>>2]=y+1;a[(c[k>>2]|0)+y|0]=m;m=c[q>>2]|0;y=l>>>((16-m|0)>>>0)&65535;b[p>>1]=y;B=m-11|0;C=y}else{B=z+5|0;C=o}c[q>>2]=B;o=t+65533&65535;y=o<<B|C&65535;m=y&65535;b[p>>1]=m;if((B|0)>12){l=f+20|0;k=c[l>>2]|0;c[l>>2]=k+1;u=f+8|0;a[(c[u>>2]|0)+k|0]=y;y=(e[p>>1]|0)>>>8&255;k=c[l>>2]|0;c[l>>2]=k+1;a[(c[u>>2]|0)+k|0]=y;y=c[q>>2]|0;k=o>>>((16-y|0)>>>0)&65535;b[p>>1]=k;D=y-12|0;E=k}else{D=B+4|0;E=m}c[q>>2]=D;if((t|0)>-1){m=f+20|0;k=f+8|0;y=0;o=D;u=E;while(1){l=e[f+2684+(d[71328+y|0]<<2)+2>>1]|0;F=l<<o|u&65535;G=F&65535;b[p>>1]=G;if((o|0)>13){H=c[m>>2]|0;c[m>>2]=H+1;a[(c[k>>2]|0)+H|0]=F;F=(e[p>>1]|0)>>>8&255;H=c[m>>2]|0;c[m>>2]=H+1;a[(c[k>>2]|0)+H|0]=F;F=c[q>>2]|0;H=l>>>((16-F|0)>>>0)&65535;b[p>>1]=H;I=F-13|0;J=H}else{I=o+3|0;J=G}c[q>>2]=I;if((y|0)<(t|0)){y=y+1|0;o=I;u=J}else{break}}}u=f+148|0;Rg(f,u,n);o=f+2440|0;Rg(f,o,j);Qg(f,u,o)}else{Lg(f,g,h,i)}}while(0);Kg(f);if((i|0)==0){return}i=f+5820|0;h=c[i>>2]|0;do{if((h|0)>8){g=f+5816|0;J=b[g>>1]&255;I=f+20|0;t=c[I>>2]|0;c[I>>2]=t+1;E=f+8|0;a[(c[E>>2]|0)+t|0]=J;J=(e[g>>1]|0)>>>8&255;t=c[I>>2]|0;c[I>>2]=t+1;a[(c[E>>2]|0)+t|0]=J;K=g}else{g=f+5816|0;if((h|0)<=0){K=g;break}J=b[g>>1]&255;t=f+20|0;E=c[t>>2]|0;c[t>>2]=E+1;a[(c[f+8>>2]|0)+E|0]=J;K=g}}while(0);b[K>>1]=0;c[i>>2]=0;return}function Pg(f,g){f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;h=i;i=i+32|0;j=h|0;k=g|0;l=c[k>>2]|0;m=g+8|0;n=c[m>>2]|0;o=c[n>>2]|0;p=c[n+12>>2]|0;n=f+5200|0;c[n>>2]=0;q=f+5204|0;c[q>>2]=573;if((p|0)>0){r=0;s=-1;while(1){if((b[l+(r<<2)>>1]|0)==0){b[l+(r<<2)+2>>1]=0;t=s}else{u=(c[n>>2]|0)+1|0;c[n>>2]=u;c[f+2908+(u<<2)>>2]=r;a[f+5208+r|0]=0;t=r}u=r+1|0;if((u|0)<(p|0)){r=u;s=t}else{break}}s=c[n>>2]|0;if((s|0)<2){v=s;w=t;x=3}else{y=t}}else{v=0;w=-1;x=3}if((x|0)==3){x=f+5800|0;t=f+5804|0;if((o|0)==0){s=w;r=v;while(1){u=(s|0)<2;z=s+1|0;A=u?z:s;B=u?z:0;z=r+1|0;c[n>>2]=z;c[f+2908+(z<<2)>>2]=B;b[l+(B<<2)>>1]=1;a[f+5208+B|0]=0;c[x>>2]=(c[x>>2]|0)-1;B=c[n>>2]|0;if((B|0)<2){s=A;r=B}else{y=A;break}}}else{r=w;w=v;while(1){v=(r|0)<2;s=r+1|0;A=v?s:r;B=v?s:0;s=w+1|0;c[n>>2]=s;c[f+2908+(s<<2)>>2]=B;b[l+(B<<2)>>1]=1;a[f+5208+B|0]=0;c[x>>2]=(c[x>>2]|0)-1;c[t>>2]=(c[t>>2]|0)-(e[o+(B<<2)+2>>1]|0);B=c[n>>2]|0;if((B|0)<2){r=A;w=B}else{y=A;break}}}}w=g+4|0;c[w>>2]=y;g=c[n>>2]|0;if((g|0)>1){r=(g|0)/2|0;o=g;while(1){t=c[f+2908+(r<<2)>>2]|0;x=f+5208+t|0;A=r<<1;a:do{if((A|0)>(o|0)){C=r}else{B=l+(t<<2)|0;s=r;v=A;z=o;while(1){do{if((v|0)<(z|0)){u=v|1;D=c[f+2908+(u<<2)>>2]|0;E=b[l+(D<<2)>>1]|0;F=c[f+2908+(v<<2)>>2]|0;G=b[l+(F<<2)>>1]|0;if((E&65535)>>>0>=(G&65535)>>>0){if(E<<16>>16!=G<<16>>16){H=v;break}if((d[f+5208+D|0]|0)>>>0>(d[f+5208+F|0]|0)>>>0){H=v;break}}H=u}else{H=v}}while(0);u=b[B>>1]|0;F=c[f+2908+(H<<2)>>2]|0;D=b[l+(F<<2)>>1]|0;if((u&65535)>>>0<(D&65535)>>>0){C=s;break a}if(u<<16>>16==D<<16>>16){if((d[x]|0)>>>0<=(d[f+5208+F|0]|0)>>>0){C=s;break a}}c[f+2908+(s<<2)>>2]=F;F=H<<1;D=c[n>>2]|0;if((F|0)>(D|0)){C=H;break}else{s=H;v=F;z=D}}}}while(0);c[f+2908+(C<<2)>>2]=t;x=r-1|0;A=c[n>>2]|0;if((x|0)>0){r=x;o=A}else{I=A;break}}}else{I=g}g=f+2912|0;o=p;p=I;while(1){I=c[g>>2]|0;r=p-1|0;c[n>>2]=r;C=c[f+2908+(p<<2)>>2]|0;c[g>>2]=C;H=f+5208+C|0;b:do{if((p|0)<3){J=1}else{A=l+(C<<2)|0;x=1;z=2;v=r;while(1){do{if((z|0)<(v|0)){s=z|1;B=c[f+2908+(s<<2)>>2]|0;D=b[l+(B<<2)>>1]|0;F=c[f+2908+(z<<2)>>2]|0;u=b[l+(F<<2)>>1]|0;if((D&65535)>>>0>=(u&65535)>>>0){if(D<<16>>16!=u<<16>>16){K=z;break}if((d[f+5208+B|0]|0)>>>0>(d[f+5208+F|0]|0)>>>0){K=z;break}}K=s}else{K=z}}while(0);s=b[A>>1]|0;F=c[f+2908+(K<<2)>>2]|0;B=b[l+(F<<2)>>1]|0;if((s&65535)>>>0<(B&65535)>>>0){J=x;break b}if(s<<16>>16==B<<16>>16){if((d[H]|0)>>>0<=(d[f+5208+F|0]|0)>>>0){J=x;break b}}c[f+2908+(x<<2)>>2]=F;F=K<<1;B=c[n>>2]|0;if((F|0)>(B|0)){J=K;break}else{x=K;z=F;v=B}}}}while(0);c[f+2908+(J<<2)>>2]=C;H=c[g>>2]|0;r=(c[q>>2]|0)-1|0;c[q>>2]=r;c[f+2908+(r<<2)>>2]=I;r=(c[q>>2]|0)-1|0;c[q>>2]=r;c[f+2908+(r<<2)>>2]=H;r=l+(o<<2)|0;b[r>>1]=(b[l+(H<<2)>>1]|0)+(b[l+(I<<2)>>1]|0);t=a[f+5208+I|0]|0;v=a[f+5208+H|0]|0;z=f+5208+o|0;a[z]=((t&255)>>>0<(v&255)>>>0?v:t)+1;t=o&65535;b[l+(H<<2)+2>>1]=t;b[l+(I<<2)+2>>1]=t;t=o+1|0;c[g>>2]=o;H=c[n>>2]|0;c:do{if((H|0)<2){L=1}else{v=1;x=2;A=H;while(1){do{if((x|0)<(A|0)){B=x|1;F=c[f+2908+(B<<2)>>2]|0;s=b[l+(F<<2)>>1]|0;u=c[f+2908+(x<<2)>>2]|0;D=b[l+(u<<2)>>1]|0;if((s&65535)>>>0>=(D&65535)>>>0){if(s<<16>>16!=D<<16>>16){M=x;break}if((d[f+5208+F|0]|0)>>>0>(d[f+5208+u|0]|0)>>>0){M=x;break}}M=B}else{M=x}}while(0);B=b[r>>1]|0;u=c[f+2908+(M<<2)>>2]|0;F=b[l+(u<<2)>>1]|0;if((B&65535)>>>0<(F&65535)>>>0){L=v;break c}if(B<<16>>16==F<<16>>16){if((d[z]|0)>>>0<=(d[f+5208+u|0]|0)>>>0){L=v;break c}}c[f+2908+(v<<2)>>2]=u;u=M<<1;F=c[n>>2]|0;if((u|0)>(F|0)){L=M;break}else{v=M;x=u;A=F}}}}while(0);c[f+2908+(L<<2)>>2]=o;z=c[n>>2]|0;if((z|0)>1){o=t;p=z}else{break}}p=c[g>>2]|0;g=(c[q>>2]|0)-1|0;c[q>>2]=g;c[f+2908+(g<<2)>>2]=p;p=c[k>>2]|0;k=c[w>>2]|0;w=c[m>>2]|0;m=c[w>>2]|0;g=c[w+4>>2]|0;o=c[w+8>>2]|0;n=c[w+16>>2]|0;w=f+2876|0;vF(w|0,0,32)|0;b[p+(c[f+2908+(c[q>>2]<<2)>>2]<<2)+2>>1]=0;L=(c[q>>2]|0)+1|0;d:do{if((L|0)<573){q=f+5800|0;M=f+5804|0;if((m|0)==0){J=0;K=L;while(1){z=c[f+2908+(K<<2)>>2]|0;r=p+(z<<2)+2|0;H=e[p+(e[r>>1]<<2)+2>>1]|0;I=(H|0)<(n|0);C=I?H+1|0:n;H=(I&1^1)+J|0;b[r>>1]=C;if((z|0)<=(k|0)){r=f+2876+(C<<1)|0;b[r>>1]=(b[r>>1]|0)+1;if((z|0)<(o|0)){N=0}else{N=c[g+(z-o<<2)>>2]|0}r=da(e[p+(z<<2)>>1]|0,N+C|0)|0;c[q>>2]=r+(c[q>>2]|0)}r=K+1|0;if((r|0)<573){J=H;K=r}else{O=H;break}}}else{K=0;J=L;while(1){t=c[f+2908+(J<<2)>>2]|0;H=p+(t<<2)+2|0;r=e[p+(e[H>>1]<<2)+2>>1]|0;C=(r|0)<(n|0);z=C?r+1|0:n;r=(C&1^1)+K|0;b[H>>1]=z;if((t|0)<=(k|0)){H=f+2876+(z<<1)|0;b[H>>1]=(b[H>>1]|0)+1;if((t|0)<(o|0)){P=0}else{P=c[g+(t-o<<2)>>2]|0}H=e[p+(t<<2)>>1]|0;C=da(H,P+z|0)|0;c[q>>2]=C+(c[q>>2]|0);C=da((e[m+(t<<2)+2>>1]|0)+P|0,H)|0;c[M>>2]=C+(c[M>>2]|0)}C=J+1|0;if((C|0)<573){K=r;J=C}else{O=r;break}}}if((O|0)==0){break}J=f+2876+(n<<1)|0;K=O;do{M=n;while(1){r=M-1|0;Q=f+2876+(r<<1)|0;R=b[Q>>1]|0;if(R<<16>>16==0){M=r}else{break}}b[Q>>1]=R-1;r=f+2876+(M<<1)|0;b[r>>1]=(b[r>>1]|0)+2;S=(b[J>>1]|0)-1&65535;b[J>>1]=S;K=K-2|0;}while((K|0)>0);if((n|0)==0){break}else{T=n;U=573;V=S}while(1){K=T&65535;if(V<<16>>16==0){W=U}else{J=V&65535;r=U;while(1){C=r;do{C=C-1|0;X=c[f+2908+(C<<2)>>2]|0;}while((X|0)>(k|0));H=p+(X<<2)+2|0;t=e[H>>1]|0;if((t|0)!=(T|0)){z=da(e[p+(X<<2)>>1]|0,T-t|0)|0;c[q>>2]=z+(c[q>>2]|0);b[H>>1]=K}H=J-1|0;if((H|0)==0){W=C;break}else{J=H;r=C}}}r=T-1|0;if((r|0)==0){break d}T=r;U=W;V=b[f+2876+(r<<1)>>1]|0}}}while(0);V=b[w>>1]<<1;b[j+2>>1]=V;w=((b[f+2878>>1]|0)+V&65535)<<1;b[j+4>>1]=w;V=(w+(b[f+2880>>1]|0)&65535)<<1;b[j+6>>1]=V;w=(V+(b[f+2882>>1]|0)&65535)<<1;b[j+8>>1]=w;V=(w+(b[f+2884>>1]|0)&65535)<<1;b[j+10>>1]=V;w=(V+(b[f+2886>>1]|0)&65535)<<1;b[j+12>>1]=w;V=(w+(b[f+2888>>1]|0)&65535)<<1;b[j+14>>1]=V;w=(V+(b[f+2890>>1]|0)&65535)<<1;b[j+16>>1]=w;V=(w+(b[f+2892>>1]|0)&65535)<<1;b[j+18>>1]=V;w=(V+(b[f+2894>>1]|0)&65535)<<1;b[j+20>>1]=w;V=(w+(b[f+2896>>1]|0)&65535)<<1;b[j+22>>1]=V;w=(V+(b[f+2898>>1]|0)&65535)<<1;b[j+24>>1]=w;V=(w+(b[f+2900>>1]|0)&65535)<<1;b[j+26>>1]=V;w=(V+(b[f+2902>>1]|0)&65535)<<1;b[j+28>>1]=w;b[j+30>>1]=(w+(b[f+2904>>1]|0)&65535)<<1;if((y|0)<0){Y=32;Z=0;i=h;return}else{_=0}while(1){f=b[l+(_<<2)+2>>1]|0;w=f&65535;if(f<<16>>16!=0){f=j+(w<<1)|0;V=b[f>>1]|0;b[f>>1]=V+1;f=0;W=w;w=V&65535;while(1){$=f|w&1;V=W-1|0;if((V|0)>0){f=$<<1;W=V;w=w>>>1}else{break}}b[l+(_<<2)>>1]=$}if((_|0)<(y|0)){_=_+1|0}else{break}}Y=32;Z=0;i=h;return}function Qg(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;i=f+5792|0;if((c[i>>2]|0)==0){j=c[f+5820>>2]|0;k=b[f+5816>>1]|0}else{l=f+5796|0;m=f+5784|0;n=f+5820|0;o=f+5816|0;p=f+20|0;q=f+8|0;r=0;while(1){s=b[(c[l>>2]|0)+(r<<1)>>1]|0;t=s&65535;u=r+1|0;v=d[(c[m>>2]|0)+r|0]|0;do{if(s<<16>>16==0){w=e[g+(v<<2)+2>>1]|0;x=c[n>>2]|0;y=e[g+(v<<2)>>1]|0;z=e[o>>1]|0|y<<x;A=z&65535;b[o>>1]=A;if((x|0)>(16-w|0)){B=c[p>>2]|0;c[p>>2]=B+1;a[(c[q>>2]|0)+B|0]=z;z=(e[o>>1]|0)>>>8&255;B=c[p>>2]|0;c[p>>2]=B+1;a[(c[q>>2]|0)+B|0]=z;z=c[n>>2]|0;B=y>>>((16-z|0)>>>0)&65535;b[o>>1]=B;y=w-16+z|0;c[n>>2]=y;C=y;D=B;break}else{B=x+w|0;c[n>>2]=B;C=B;D=A;break}}else{A=d[169e3+v|0]|0;B=(A|256)+1|0;w=e[g+(B<<2)+2>>1]|0;x=c[n>>2]|0;y=e[g+(B<<2)>>1]|0;B=e[o>>1]|0|y<<x;z=B&65535;b[o>>1]=z;if((x|0)>(16-w|0)){E=c[p>>2]|0;c[p>>2]=E+1;a[(c[q>>2]|0)+E|0]=B;B=(e[o>>1]|0)>>>8&255;E=c[p>>2]|0;c[p>>2]=E+1;a[(c[q>>2]|0)+E|0]=B;B=c[n>>2]|0;E=y>>>((16-B|0)>>>0)&65535;b[o>>1]=E;F=w-16+B|0;G=E}else{F=x+w|0;G=z}c[n>>2]=F;z=c[26200+(A<<2)>>2]|0;do{if((A-8|0)>>>0<20>>>0){w=v-(c[71720+(A<<2)>>2]|0)&65535;x=w<<F|G&65535;E=x&65535;b[o>>1]=E;if((F|0)>(16-z|0)){B=c[p>>2]|0;c[p>>2]=B+1;a[(c[q>>2]|0)+B|0]=x;x=(e[o>>1]|0)>>>8&255;B=c[p>>2]|0;c[p>>2]=B+1;a[(c[q>>2]|0)+B|0]=x;x=c[n>>2]|0;B=w>>>((16-x|0)>>>0)&65535;b[o>>1]=B;w=z-16+x|0;c[n>>2]=w;H=w;I=B;break}else{B=F+z|0;c[n>>2]=B;H=B;I=E;break}}else{H=F;I=G}}while(0);z=t-1|0;if(z>>>0<256>>>0){J=z}else{J=(z>>>7)+256|0}A=d[169256+J|0]|0;E=e[h+(A<<2)+2>>1]|0;B=e[h+(A<<2)>>1]|0;w=I&65535|B<<H;x=w&65535;b[o>>1]=x;if((H|0)>(16-E|0)){y=c[p>>2]|0;c[p>>2]=y+1;a[(c[q>>2]|0)+y|0]=w;w=(e[o>>1]|0)>>>8&255;y=c[p>>2]|0;c[p>>2]=y+1;a[(c[q>>2]|0)+y|0]=w;w=c[n>>2]|0;y=B>>>((16-w|0)>>>0)&65535;b[o>>1]=y;K=E-16+w|0;L=y}else{K=H+E|0;L=x}c[n>>2]=K;x=c[26320+(A<<2)>>2]|0;if((A-4|0)>>>0>=26>>>0){C=K;D=L;break}E=z-(c[71840+(A<<2)>>2]|0)&65535;A=E<<K|L&65535;z=A&65535;b[o>>1]=z;if((K|0)>(16-x|0)){y=c[p>>2]|0;c[p>>2]=y+1;a[(c[q>>2]|0)+y|0]=A;A=(e[o>>1]|0)>>>8&255;y=c[p>>2]|0;c[p>>2]=y+1;a[(c[q>>2]|0)+y|0]=A;A=c[n>>2]|0;y=E>>>((16-A|0)>>>0)&65535;b[o>>1]=y;E=x-16+A|0;c[n>>2]=E;C=E;D=y;break}else{y=K+x|0;c[n>>2]=y;C=y;D=z;break}}}while(0);if(u>>>0<(c[i>>2]|0)>>>0){r=u}else{j=C;k=D;break}}}D=e[g+1026>>1]|0;C=f+5820|0;r=e[g+1024>>1]|0;g=f+5816|0;i=k&65535|r<<j;b[g>>1]=i;if((j|0)>(16-D|0)){k=f+20|0;n=c[k>>2]|0;c[k>>2]=n+1;K=f+8|0;a[(c[K>>2]|0)+n|0]=i;i=(e[g>>1]|0)>>>8&255;n=c[k>>2]|0;c[k>>2]=n+1;a[(c[K>>2]|0)+n|0]=i;i=c[C>>2]|0;b[g>>1]=r>>>((16-i|0)>>>0);M=D-16+i|0;c[C>>2]=M;return}else{M=j+D|0;c[C>>2]=M;return}}function Rg(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;h=b[f+2>>1]|0;i=h<<16>>16==0;j=d+2754|0;k=d+5820|0;l=d+2752|0;m=d+5816|0;n=d+20|0;o=d+8|0;p=d+2758|0;q=d+2756|0;r=d+2750|0;s=d+2748|0;t=0;u=-1;v=h&65535;h=i?138:7;w=i?3:4;a:while(1){i=t;x=0;while(1){if((i|0)>(g|0)){break a}y=i+1|0;z=b[f+(y<<2)+2>>1]|0;A=z&65535;B=x+1|0;C=(v|0)==(A|0);if((B|0)<(h|0)&C){i=y;x=B}else{break}}do{if((B|0)<(w|0)){i=d+2684+(v<<2)+2|0;D=d+2684+(v<<2)|0;E=B;F=c[k>>2]|0;G=b[m>>1]|0;while(1){H=e[i>>1]|0;I=e[D>>1]|0;J=G&65535|I<<F;K=J&65535;b[m>>1]=K;if((F|0)>(16-H|0)){L=c[n>>2]|0;c[n>>2]=L+1;a[(c[o>>2]|0)+L|0]=J;J=(e[m>>1]|0)>>>8&255;L=c[n>>2]|0;c[n>>2]=L+1;a[(c[o>>2]|0)+L|0]=J;J=c[k>>2]|0;L=I>>>((16-J|0)>>>0)&65535;b[m>>1]=L;M=H-16+J|0;N=L}else{M=F+H|0;N=K}c[k>>2]=M;K=E-1|0;if((K|0)==0){break}else{E=K;F=M;G=N}}}else{if((v|0)!=0){if((v|0)==(u|0)){O=B;P=c[k>>2]|0;Q=b[m>>1]|0}else{G=e[d+2684+(v<<2)+2>>1]|0;F=c[k>>2]|0;E=e[d+2684+(v<<2)>>1]|0;D=e[m>>1]|0|E<<F;i=D&65535;b[m>>1]=i;if((F|0)>(16-G|0)){K=c[n>>2]|0;c[n>>2]=K+1;a[(c[o>>2]|0)+K|0]=D;D=(e[m>>1]|0)>>>8&255;K=c[n>>2]|0;c[n>>2]=K+1;a[(c[o>>2]|0)+K|0]=D;D=c[k>>2]|0;K=E>>>((16-D|0)>>>0)&65535;b[m>>1]=K;R=G-16+D|0;S=K}else{R=F+G|0;S=i}c[k>>2]=R;O=x;P=R;Q=S}i=e[r>>1]|0;G=e[s>>1]|0;F=Q&65535|G<<P;K=F&65535;b[m>>1]=K;if((P|0)>(16-i|0)){D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=F;F=(e[m>>1]|0)>>>8&255;D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=F;F=c[k>>2]|0;D=G>>>((16-F|0)>>>0)&65535;b[m>>1]=D;T=i-16+F|0;U=D}else{T=P+i|0;U=K}c[k>>2]=T;K=O+65533&65535;i=U&65535|K<<T;b[m>>1]=i;if((T|0)>14){D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=i;i=(e[m>>1]|0)>>>8&255;D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=i;i=c[k>>2]|0;b[m>>1]=K>>>((16-i|0)>>>0);c[k>>2]=i-14;break}else{c[k>>2]=T+2;break}}if((B|0)<11){i=e[j>>1]|0;K=c[k>>2]|0;D=e[l>>1]|0;F=e[m>>1]|0|D<<K;G=F&65535;b[m>>1]=G;if((K|0)>(16-i|0)){E=c[n>>2]|0;c[n>>2]=E+1;a[(c[o>>2]|0)+E|0]=F;F=(e[m>>1]|0)>>>8&255;E=c[n>>2]|0;c[n>>2]=E+1;a[(c[o>>2]|0)+E|0]=F;F=c[k>>2]|0;E=D>>>((16-F|0)>>>0)&65535;b[m>>1]=E;V=i-16+F|0;W=E}else{V=K+i|0;W=G}c[k>>2]=V;G=x+65534&65535;i=W&65535|G<<V;b[m>>1]=i;if((V|0)>13){K=c[n>>2]|0;c[n>>2]=K+1;a[(c[o>>2]|0)+K|0]=i;i=(e[m>>1]|0)>>>8&255;K=c[n>>2]|0;c[n>>2]=K+1;a[(c[o>>2]|0)+K|0]=i;i=c[k>>2]|0;b[m>>1]=G>>>((16-i|0)>>>0);c[k>>2]=i-13;break}else{c[k>>2]=V+3;break}}else{i=e[p>>1]|0;G=c[k>>2]|0;K=e[q>>1]|0;E=e[m>>1]|0|K<<G;F=E&65535;b[m>>1]=F;if((G|0)>(16-i|0)){D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=E;E=(e[m>>1]|0)>>>8&255;D=c[n>>2]|0;c[n>>2]=D+1;a[(c[o>>2]|0)+D|0]=E;E=c[k>>2]|0;D=K>>>((16-E|0)>>>0)&65535;b[m>>1]=D;X=i-16+E|0;Y=D}else{X=G+i|0;Y=F}c[k>>2]=X;F=x+65526&65535;i=Y&65535|F<<X;b[m>>1]=i;if((X|0)>9){G=c[n>>2]|0;c[n>>2]=G+1;a[(c[o>>2]|0)+G|0]=i;i=(e[m>>1]|0)>>>8&255;G=c[n>>2]|0;c[n>>2]=G+1;a[(c[o>>2]|0)+G|0]=i;i=c[k>>2]|0;b[m>>1]=F>>>((16-i|0)>>>0);c[k>>2]=i-9;break}else{c[k>>2]=X+7;break}}}}while(0);if(z<<16>>16==0){t=y;u=v;v=A;h=138;w=3;continue}t=y;u=v;v=A;h=C?6:7;w=C?3:4}return}function Sg(a,c,d){a=a|0;c=c|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=b[c+2>>1]|0;g=f<<16>>16==0;b[c+(d+1<<2)+2>>1]=-1;h=a+2752|0;i=a+2756|0;j=a+2748|0;k=g?3:4;l=g?138:7;g=f&65535;f=0;m=-1;a:while(1){n=0;o=f;do{if((o|0)>(d|0)){break a}o=o+1|0;p=b[c+(o<<2)+2>>1]|0;q=p&65535;n=n+1|0;r=(g|0)==(q|0);}while((n|0)<(l|0)&r);do{if((n|0)<(k|0)){s=a+2684+(g<<2)|0;b[s>>1]=(e[s>>1]|0)+n}else{if((g|0)==0){if((n|0)<11){b[h>>1]=(b[h>>1]|0)+1;break}else{b[i>>1]=(b[i>>1]|0)+1;break}}else{if((g|0)!=(m|0)){s=a+2684+(g<<2)|0;b[s>>1]=(b[s>>1]|0)+1}b[j>>1]=(b[j>>1]|0)+1;break}}}while(0);if(p<<16>>16==0){k=3;l=138;m=g;g=q;f=o;continue}k=r?3:4;l=r?6:7;m=g;g=q;f=o}return}function Tg(a,b,c){a=a|0;b=b|0;c=c|0;return dF(da(c,b)|0)|0}function Ug(a,b){a=a|0;b=b|0;eF(b);return}function Vg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if((a|0)==0){b=-1;return b|0}if((c[a+24>>2]|0)>0){b=-1;return b|0}d=c[a+4>>2]|0;e=d+32|0;f=c[e>>2]|0;do{if((f|0)==0){g=0}else{h=Sc[f&127](a,2,0,d)|0;if((h|0)<0){b=-1}else{g=h;break}return b|0}}while(0);if((c[a+28>>2]|0)!=0){fh(a,0)|0}f=(g|0)==0;if(f){Hc[c[c[a+16>>2]>>2]&63](a,0,64)|0;if((bh(a)|0)>0){b=-1;return b|0}g=a+8|0;h=c[g>>2]|0;i=a+12|0;if((c[h+12>>2]|0)>0){Sc[c[i>>2]&127](a,c[h+8>>2]|0,0,d)|0;j=c[g>>2]|0}else{j=h}Sc[c[i>>2]&127](a,j,0,d)|0}j=c[a+20>>2]|0;do{if((j|0)==0){eF(a)}else{if(!(f&(j|0)==1)){break}Sc[c[a+12>>2]&127](a,a,0,d)|0}}while(0);j=c[e>>2]|0;if((j|0)==0){b=0;return b|0}Sc[j&127](a,6,0,d)|0;b=0;return b|0}function Wg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=a+4|0;f=c[e>>2]|0;if((f|0)==0){c[e>>2]=b;g=c[b+28>>2]|0;c[a+12>>2]=(g|0)==0?40:g;h=b;return h|0}if((b|0)==0){h=f;return h|0}g=c[c[a+16>>2]>>2]|0;i=a+8|0;if((c[c[i>>2]>>2]&4096|0)!=0){ah(a,0)|0}j=c[f+32>>2]|0;do{if((j|0)!=0){if((Sc[j&127](a,3,b,f)|0)<0){h=0}else{break}return h|0}}while(0);c[e>>2]=b;e=c[b+28>>2]|0;c[a+12>>2]=(e|0)==0?40:e;e=c[c[i>>2]>>2]|0;if((e&112|0)!=0){h=f;return h|0}do{if((e&2|0)==0){if((e&3|0)==0){if((d&1|0)==0){break}else{h=f}return h|0}else{if((d&3|0)==3){h=f}else{break}return h|0}}else{if((d&2|0)==0){break}else{h=f}return h|0}}while(0);e=Zg(a)|0;j=c[i>>2]|0;c[j>>2]=c[j>>2]&-4097;c[(c[i>>2]|0)+4>>2]=0;c[(c[i>>2]|0)+16>>2]=0;j=c[i>>2]|0;do{if((c[j>>2]&3|0)!=0){i=c[j+8>>2]|0;k=c[j+12>>2]|0;l=i+(k<<2)|0;if((k|0)>0){m=i}else{break}while(1){i=m+4|0;c[m>>2]=0;if(i>>>0<l>>>0){m=i}else{break}}}}while(0);if((e|0)==0){h=f;return h|0}m=b+8|0;j=b+4|0;l=b|0;i=b+24|0;if((d&2|0)==0){n=e}else{d=e;while(1){e=c[d>>2]|0;Hc[g&63](a,d,32)|0;if((e|0)==0){h=f;break}else{d=e}}return h|0}while(1){d=c[n>>2]|0;e=c[m>>2]|0;if((e|0)<0){o=c[n+8>>2]|0}else{o=n+(-e|0)|0}e=c[j>>2]|0;k=o+(c[l>>2]|0)|0;if((e|0)<0){p=c[k>>2]|0}else{p=k}k=c[i>>2]|0;if((k|0)==0){q=dh(0,p,e)|0}else{q=Hc[k&63](a,p,b)|0}c[n+4>>2]=q;Hc[g&63](a,n,32)|0;if((d|0)==0){h=f;break}else{n=d}}return h|0}function Xg(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;d=(c|0)==0;do{if((b|0)==0){if(d){e=0;break}e=dF(c)|0}else{if(d){eF(b);e=0;break}else{e=gF(b,c)|0;break}}}while(0);return e|0}function Yg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=a+8|0;d=c[b>>2]|0;e=c[d>>2]|0;do{if((e&12|0)==0){if((e&3|0)==0){f=d+8|0;g=c[f>>2]|0;c[f>>2]=0;h=g;break}g=Zg(a)|0;f=c[b>>2]|0;i=c[f+8>>2]|0;j=c[f+12>>2]|0;f=i+(j<<2)|0;if((j|0)>0){k=i}else{h=g;break}while(1){c[k>>2]=0;i=k+4|0;if(i>>>0<f>>>0){k=i}else{h=g;break}}}else{h=c[d+4>>2]|0}}while(0);d=c[b>>2]|0;c[d>>2]=c[d>>2]&-4097;c[(c[b>>2]|0)+16>>2]=0;c[(c[b>>2]|0)+4>>2]=0;return h|0}function Zg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=a+8|0;a=c[b>>2]|0;d=c[a>>2]|0;if((d&4096|0)!=0){e=c[a+4>>2]|0;return e|0}do{if((d&3|0)==0){if((d&112|0)!=0){f=c[a+8>>2]|0;break}g=c[a+4>>2]|0;if((g|0)==0){f=0;break}h=g+4|0;i=c[h>>2]|0;if((i|0)==0){j=g;k=c[g>>2]|0}else{l=g;g=h;h=i;while(1){i=h|0;c[g>>2]=c[i>>2];c[i>>2]=l;i=h+4|0;m=c[i>>2]|0;if((m|0)==0){j=h;k=l;break}else{l=h;g=i;h=m}}}if((k|0)==0){f=j;break}h=j|0;g=k;while(1){l=c[g+4>>2]|0;if((l|0)==0){n=g}else{m=g;i=l;while(1){l=i|0;c[m+4>>2]=c[l>>2];c[l>>2]=m;l=c[i+4>>2]|0;if((l|0)==0){break}else{m=i;i=l}}c[h>>2]=i;n=i}m=n|0;l=c[m>>2]|0;if((l|0)==0){f=j;break}else{h=m;g=l}}}else{g=c[a+8>>2]|0;h=c[a+12>>2]|0;l=g+(h<<2)|0;if((h|0)>0){o=0;p=0;q=g}else{f=0;break}while(1){g=c[q>>2]|0;if((g|0)==0){r=p;s=o}else{if((p|0)==0){t=g;u=g}else{c[p>>2]=g;t=p;u=o}g=t;while(1){h=c[g>>2]|0;if((h|0)==0){break}else{g=h}}c[q>>2]=g;r=g;s=u}i=q+4|0;if(i>>>0<l>>>0){o=s;p=r;q=i}else{f=s;break}}}}while(0);c[(c[b>>2]|0)+4>>2]=f;s=c[b>>2]|0;c[s>>2]=c[s>>2]|4096;e=f;return e|0}function _g(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;e=a+8|0;if((c[c[e>>2]>>2]&4096|0)!=0){ah(a,0)|0}f=c[a+4>>2]|0;g=c[f>>2]|0;h=c[f+4>>2]|0;i=f+8|0;j=c[i>>2]|0;k=c[f+20>>2]|0;l=a+20|0;c[l>>2]=c[l>>2]&-32769;do{if((b|0)==0){if((d&384|0)!=0){m=c[e>>2]|0;n=c[m+8>>2]|0;if((n|0)==0){o=0;return o|0}do{if((d&256|0)==0){c[m+4>>2]=n;p=n}else{q=c[n+4>>2]|0;c[m+4>>2]=q;if((q|0)==0){o=0}else{p=q;break}return o|0}}while(0);if((j|0)<0){o=c[p+8>>2]|0;return o|0}else{o=p+(-j|0)|0;return o|0}}if((d&4098|0)!=0){m=c[e>>2]|0;if((c[m>>2]&144|0)!=0){o=0;return o|0}n=c[m+8>>2]|0;if((n|0)==0){o=0}else{r=n;break}return o|0}if((d&64|0)==0){o=0;return o|0}n=f+16|0;m=c[n>>2]|0;if((m|0)==0){if((c[i>>2]|0)<0){s=18}}else{s=18}a:do{if((s|0)==18){q=c[(c[e>>2]|0)+8>>2]|0;if((q|0)==0){break}t=a+12|0;u=-j|0;if((j|0)<0){v=q;w=m;while(1){x=c[v>>2]|0;if((w|0)!=0){Tc[w&127](a,c[v+8>>2]|0,f)}if((c[i>>2]|0)<0){Sc[c[t>>2]&127](a,v,0,f)|0}if((x|0)==0){break a}v=x;w=c[n>>2]|0}}else{w=q;v=m;while(1){x=c[w>>2]|0;if((v|0)!=0){Tc[v&127](a,w+u|0,f)}if((c[i>>2]|0)<0){Sc[c[t>>2]&127](a,w,0,f)|0}if((x|0)==0){break a}w=x;v=c[n>>2]|0}}}}while(0);c[(c[e>>2]|0)+4>>2]=0;c[(c[e>>2]|0)+8>>2]=0;c[(c[e>>2]|0)+16>>2]=0;o=0;return o|0}else{if((d&2049|0)!=0){n=f+12|0;m=c[n>>2]|0;do{if((m|0)==0){y=b}else{if((d&1|0)==0){y=b;break}v=Hc[m&63](a,b,f)|0;if((v|0)==0){o=0}else{y=v;break}return o|0}}while(0);do{if((j|0)>-1){z=y+j|0}else{m=Sc[c[a+12>>2]&127](a,0,12,f)|0;if((m|0)!=0){c[m+8>>2]=y;z=m;break}if((c[n>>2]|0)==0){o=0;return o|0}m=c[f+16>>2]|0;if((m|0)==0){o=0;return o|0}if((d&1|0)==0){o=0;return o|0}Tc[m&127](a,y,f);o=0;return o|0}}while(0);n=z;m=c[e>>2]|0;v=c[m>>2]|0;do{if((v&128|0)==0){if((v&16|0)==0){if((v&32|0)==0){s=60;break}else{s=56;break}}w=c[m+4>>2]|0;t=(w|0)!=0;if((d&8192|0)==0){if(!t){s=56;break}if((w|0)==(c[m+8>>2]|0)){s=56;break}u=w+4|0;q=c[u>>2]|0;c[z+4>>2]=q;c[q>>2]=n;c[z>>2]=w;c[u>>2]=z;break}else{if(!t){s=60;break}t=w|0;u=c[t>>2]|0;if((u|0)==0){s=60;break}c[z>>2]=u;c[u+4>>2]=z;c[z+4>>2]=w;c[t>>2]=n;break}}else{if((d&8192|0)==0){s=56}else{s=60}}}while(0);if((s|0)==56){v=c[m+8>>2]|0;t=z;c[t>>2]=v;if((v|0)==0){c[z+4>>2]=n}else{w=v+4|0;c[z+4>>2]=c[w>>2];c[w>>2]=z}c[(c[e>>2]|0)+8>>2]=t}else if((s|0)==60){t=m+8|0;w=c[t>>2]|0;if((w|0)==0){v=z;c[t>>2]=v;c[z+4>>2]=n;A=v}else{v=w+4|0;w=v;c[c[w>>2]>>2]=n;c[z+4>>2]=c[w>>2];c[v>>2]=z;A=z}c[A>>2]=0}v=c[e>>2]|0;w=v+16|0;t=c[w>>2]|0;if((t|0)>-1){c[w>>2]=t+1;B=c[e>>2]|0}else{B=v}c[B+4>>2]=n;if((j|0)<0){o=c[z+8>>2]|0;return o|0}else{o=z+(-j|0)|0;return o|0}}v=c[e>>2]|0;do{if((d&512|0)==0){t=c[v+4>>2]|0;if((t|0)!=0){if((j|0)<0){C=c[t+8>>2]|0}else{C=t+(-j|0)|0}if((C|0)==(b|0)){D=t;break}}t=b+g|0;if((h|0)>=0){E=t;s=77;break}E=c[t>>2]|0;s=77}else{E=b;s=77}}while(0);b:do{if((s|0)==77){n=c[v+8>>2]|0;if((n|0)==0){o=0;return o|0}m=(h|0)<0;t=(k|0)==0;w=(h|0)<1;if((j|0)<0){u=n;while(1){q=(c[u+8>>2]|0)+g|0;if(m){F=c[q>>2]|0}else{F=q}do{if(t){if(w){G=Ya(E|0,F|0)|0;break}else{G=wF(E|0,F|0,h|0)|0;break}}else{G=Sc[k&127](a,E,F,f)|0}}while(0);if((G|0)==0){D=u;break b}q=c[u>>2]|0;if((q|0)==0){o=0;break}else{u=q}}return o|0}else{u=n;while(1){q=u+(g-j)|0;if(m){H=c[q>>2]|0}else{H=q}do{if(t){if(w){I=Ya(E|0,H|0)|0;break}else{I=wF(E|0,H|0,h|0)|0;break}}else{I=Sc[k&127](a,E,H,f)|0}}while(0);if((I|0)==0){D=u;break b}q=c[u>>2]|0;if((q|0)==0){o=0;break}else{u=q}}return o|0}}}while(0);if((D|0)==0){o=0;return o|0}c[l>>2]=c[l>>2]|32768;if((d&4098|0)!=0){r=D;break}do{if((d&8|0)==0){if((d&16|0)==0){J=D;break}v=c[e>>2]|0;if((D|0)!=(c[v+8>>2]|0)){J=c[D+4>>2]|0;break}c[v+4>>2]=0;o=0;return o|0}else{J=c[D>>2]|0}}while(0);c[(c[e>>2]|0)+4>>2]=J;if((J|0)==0){o=0;return o|0}if((j|0)<0){o=c[J+8>>2]|0;return o|0}else{o=J+(-j|0)|0;return o|0}}}while(0);J=r|0;D=c[J>>2]|0;if((D|0)==0){K=0}else{c[D+4>>2]=c[r+4>>2];K=c[J>>2]|0}D=(c[e>>2]|0)+8|0;l=c[D>>2]|0;do{if((r|0)==(l|0)){c[D>>2]=K;I=c[(c[e>>2]|0)+8>>2]|0;if((I|0)==0){break}c[I+4>>2]=c[r+4>>2]}else{I=r+4|0;c[c[I>>2]>>2]=K;H=l+4|0;if((r|0)!=(c[H>>2]|0)){break}c[H>>2]=c[I>>2]}}while(0);l=(c[e>>2]|0)+4|0;if((r|0)==(c[l>>2]|0)){L=c[J>>2]|0}else{L=0}c[l>>2]=L;L=(c[e>>2]|0)+16|0;c[L>>2]=(c[L>>2]|0)-1;if((j|0)<0){M=c[r+8>>2]|0}else{M=r+(-j|0)|0}j=c[f+16>>2]|0;do{if((j|0)!=0){if((d&2|0)==0){break}Tc[j&127](a,M,f)}}while(0);if((c[i>>2]|0)>=0){o=M;return o|0}Sc[c[a+12>>2]&127](a,r,0,f)|0;o=M;return o|0}function $g(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i;i=i+8|0;e=d|0;if((a|0)==0|(b|0)==0){f=0;i=d;return f|0}g=dF(40)|0;h=g;if((g|0)==0){f=0;i=d;return f|0}c[g>>2]=0;c[g+16>>2]=0;c[g+4>>2]=0;Wg(h,a,0)|0;j=a+32|0;vF(g+20|0,0,20)|0;k=c[j>>2]|0;do{if((k|0)==0){l=h;m=11}else{c[e>>2]=0;n=Sc[k&127](h,1,e,a)|0;if((n|0)<0){o=h;m=12;break}if((n|0)<=0){l=h;m=11;break}n=c[e>>2]|0;if((n|0)!=0){if((c[b+4>>2]&c[n>>2]|0)==0){o=h;m=12;break}else{p=h;q=n;break}}n=a+28|0;if((c[n>>2]|0)==0){o=h;m=12;break}eF(g);r=Sc[c[n>>2]&127](0,0,40,a)|0;n=r;if((r|0)==0){f=0;i=d;return f|0}else{c[r>>2]=0;c[r+16>>2]=0;c[r+4>>2]=0;Wg(n,a,0)|0;c[r+20>>2]=1;c[r+24>>2]=0;c[r+32>>2]=0;c[r+28>>2]=0;l=n;m=11;break}}}while(0);do{if((m|0)==11){g=Sc[c[l+12>>2]&127](l,0,28,a)|0;c[e>>2]=g;if((g|0)==0){o=l;m=12;break}c[g>>2]=c[b+4>>2];c[(c[e>>2]|0)+4>>2]=0;c[(c[e>>2]|0)+8>>2]=0;c[(c[e>>2]|0)+20>>2]=0;c[(c[e>>2]|0)+16>>2]=0;c[(c[e>>2]|0)+12>>2]=0;c[(c[e>>2]|0)+24>>2]=0;p=l;q=c[e>>2]|0}}while(0);if((m|0)==12){eF(o);f=0;i=d;return f|0}c[p+8>>2]=q;c[p>>2]=c[b>>2];c[p+16>>2]=b;b=c[j>>2]|0;if((b|0)==0){f=p;i=d;return f|0}Sc[b&127](p,5,p,a)|0;f=p;i=d;return f|0}function ah(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=c[c[a+16>>2]>>2]|0;e=a+8|0;f=c[e>>2]|0;g=f|0;h=c[g>>2]|0;i=h&4096;do{if((b|0)==0){if((i|0)==0){j=-1;return j|0}else{k=i;l=c[f+4>>2]|0;break}}else{if((c[f+16>>2]|0)==0){k=0;l=b;break}else{j=-1}return j|0}}while(0);c[g>>2]=h&-4097;h=c[e>>2]|0;g=c[h>>2]|0;if((g&3|0)==0){b=h+4|0;if((g&12|0)==0){c[b>>2]=0;c[(c[e>>2]|0)+8>>2]=l}else{c[b>>2]=l}if((k|0)!=0){j=0;return j|0}c[(c[e>>2]|0)+16>>2]=-1;j=0;return j|0}c[h+4>>2]=0;h=c[e>>2]|0;if((k|0)==0){c[h+16>>2]=0;if((l|0)==0){j=0;return j|0}else{m=l}while(1){k=c[m>>2]|0;Hc[d&63](a,m,32)|0;if((k|0)==0){j=0;break}else{m=k}}return j|0}m=c[h+8>>2]|0;a=c[h+12>>2]|0;h=m+(a<<2)|0;if((a|0)>0){n=m;o=l}else{j=0;return j|0}while(1){l=c[n>>2]|0;if((l|0)==0){p=o}else{c[n>>2]=o;m=l|0;l=c[m>>2]|0;c[m>>2]=0;p=l}l=n+4|0;if(l>>>0<h>>>0){n=l;o=p}else{j=0;break}}return j|0}function bh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+8|0;d=c[b>>2]|0;if((c[d>>2]&4096|0)==0){e=d}else{ah(a,0)|0;e=c[b>>2]|0}a=e+16|0;do{if((c[a>>2]|0)<0){d=c[e>>2]|0;if((d&12|0)!=0){c[a>>2]=ch(c[e+4>>2]|0)|0;break}if((d&112|0)==0){break}d=c[e+8>>2]|0;if((d|0)==0){f=0}else{g=0;h=d;while(1){d=g+1|0;i=c[h>>2]|0;if((i|0)==0){f=d;break}else{g=d;h=i}}}c[a>>2]=f}}while(0);return c[(c[b>>2]|0)+16>>2]|0}function ch(a){a=a|0;var b=0;if((a|0)==0){return 0}else{b=ch(c[a+4>>2]|0)|0;return b+1+(ch(c[a>>2]|0)|0)|0}return 0}function dh(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if((e|0)<1){f=a[c]|0;if(f<<24>>24==0){g=c;h=b}else{i=c;j=b;k=f;while(1){f=a[i+1|0]|0;l=da(((k&255)<<8)+j+(f&255)|0,17109811)|0;m=i+(f<<24>>24!=0?2:1)|0;f=a[m]|0;if(f<<24>>24==0){g=m;h=l;break}else{i=m;j=l;k=f}}}n=h;o=g-c|0;p=n+o|0;q=da(p,17109811)|0;return q|0}g=e-1|0;h=c+g|0;if((g|0)>0){g=c;k=b;while(1){j=da(((d[g]|0)<<8)+k+(d[g+1|0]|0)|0,17109811)|0;i=g+2|0;if(i>>>0<h>>>0){g=i;k=j}else{r=i;s=j;break}}}else{r=c;s=b}if(r>>>0>h>>>0){n=s;o=e;p=n+o|0;q=da(p,17109811)|0;return q|0}n=da(((d[r]|0)<<8)+s|0,17109811)|0;o=e;p=n+o|0;q=da(p,17109811)|0;return q|0}
+
+
+
+function Mz(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,S=0,T=0,U=0.0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0.0,ab=0.0,bb=0.0,cb=0,db=0.0,eb=0.0,fb=0,gb=0.0,hb=0.0,ib=0.0,jb=0,kb=0.0,lb=0.0,mb=0.0,nb=0,ob=0.0,pb=0.0,qb=0.0,rb=0,sb=0.0,tb=0.0,ub=0.0,vb=0,wb=0.0,xb=0.0,yb=0.0,zb=0,Ab=0.0,Bb=0.0,Cb=0.0,Db=0,Eb=0.0,Fb=0.0,Gb=0.0,Hb=0,Ib=0.0,Jb=0.0,Kb=0.0,Lb=0,Mb=0.0,Nb=0.0,Ob=0.0,Pb=0.0,Qb=0,Rb=0.0,Sb=0.0,Tb=0,Ub=0.0,Vb=0.0,Wb=0.0,Xb=0.0,Yb=0,Zb=0.0,_b=0.0,$b=0,ac=0.0,bc=0.0,dc=0.0,ec=0,fc=0.0,gc=0.0,hc=0.0,ic=0.0,jc=0,kc=0.0,lc=0.0,mc=0.0,nc=0,oc=0.0,pc=0.0,qc=0.0,rc=0.0,sc=0,tc=0.0,uc=0.0,vc=0,wc=0.0,xc=0.0,yc=0.0,zc=0;j=i;i=i+424|0;k=j|0;l=j+40|0;m=j+72|0;n=j+104|0;p=j+136|0;q=j+168|0;r=j+200|0;s=j+232|0;t=j+264|0;u=j+296|0;v=j+328|0;w=j+360|0;x=j+392|0;y=jk(28)|0;z=y;A=$g(173192,c[43332]|0)|0;B=y+20|0;c[B>>2]=A;do{if((A|0)==0){Ma(84568,14,1,c[o>>2]|0)|0;C=6}else{D=tz()|0;c[y+24>>2]=D;if((D|0)==0){Ma(84568,14,1,c[o>>2]|0)|0;C=6;break}else{c[y>>2]=b;c[y+4>>2]=d;c[y+8>>2]=e;c[y+12>>2]=f;c[y+16>>2]=g;E=z;break}}}while(0);if((C|0)==6){z=c[B>>2]|0;if((z|0)!=0){Vg(z)|0}z=c[y+24>>2]|0;if((z|0)!=0){uz(z)|0}eF(y);E=0}y=c[E+16>>2]|0;F=+h[y+16>>3];G=+h[y+24>>3];y=~~(F>G?F:G);if((y|0)==0){H=0}else{z=y>>>0>65535>>>0;B=z?y>>>16:y;y=z?16:0;if(B>>>0>255>>>0){I=y|8;J=B>>>8}else{I=y;J=B}if(J>>>0>15>>>0){K=I+4|0;L=J>>>4}else{K=I;L=J}if(L>>>0>3>>>0){M=K+2|0;N=L>>>2}else{M=K;N=L}H=M+1+(N>>>0>1>>>0)|0}N=E+4|0;a:do{if((c[N>>2]|0)>0){M=E|0;L=E+20|0;if((H|0)>0){O=0}else{K=0;while(1){J=jk(32)|0;c[J+28>>2]=(c[M>>2]|0)+(K*40|0);I=c[M>>2]|0;B=c[I+(K*40|0)+32>>2]|0;if((B|0)==0){P=0.0;Q=0.0}else{P=+h[B>>3];Q=+h[B+8>>3]}G=+h[I+(K*40|0)>>3];B=~~+R(G-P);F=+h[I+(K*40|0)+8>>3];y=~~+R(F-Q);z=~~+ca(P+(G+ +h[I+(K*40|0)+16>>3]));if((z|0)==2147483647){C=34;break}f=~~+ca(Q+(F+ +h[I+(K*40|0)+24>>3]));if((f|0)==2147483647){C=36;break}c[J+12>>2]=B;c[J+16>>2]=y;c[J+20>>2]=z;c[J+24>>2]=f;c[J+8>>2]=0;f=c[L>>2]|0;z=K+1|0;if((Hc[c[f>>2]&63](f,J,1)|0)==0){S=-1;C=123;break}if((z|0)<(c[N>>2]|0)){K=z}else{T=L;break a}}if((C|0)==34){cc(94960,147512,264,170168);return 0}else if((C|0)==36){cc(89528,147512,266,170168);return 0}else if((C|0)==123){i=j;return S|0}}while(1){K=jk(32)|0;c[K+28>>2]=(c[M>>2]|0)+(O*40|0);z=c[M>>2]|0;J=c[z+(O*40|0)+32>>2]|0;if((J|0)==0){U=0.0;V=0.0}else{U=+h[J>>3];V=+h[J+8>>3]}F=+h[z+(O*40|0)>>3];J=~~+R(F-U);G=+h[z+(O*40|0)+8>>3];f=~~+R(G-V);y=~~+ca(U+(F+ +h[z+(O*40|0)+16>>3]));if((y|0)==2147483647){C=34;break}B=~~+ca(V+(G+ +h[z+(O*40|0)+24>>3]));if((B|0)==2147483647){C=36;break}c[K+12>>2]=J;c[K+16>>2]=f;c[K+20>>2]=y;c[K+24>>2]=B;z=((B-f|0)/2|0)+f|0;f=((y-J|0)/2|0)+J|0;J=0;y=H;while(1){B=y-1|0;I=f>>>(B>>>0)&1;e=z>>>(B>>>0)&1;W=I<<1|J<<2|e^I;A=e-1|0;e=A&(z^f);D=A&-I;if((B|0)>0){z=e^z^D;f=e^f^D;J=W;y=B}else{break}}c[K+8>>2]=W;y=c[L>>2]|0;J=O+1|0;if((Hc[c[y>>2]&63](y,K,1)|0)==0){S=-1;C=123;break}if((J|0)<(c[N>>2]|0)){O=J}else{T=L;break a}}if((C|0)==34){cc(94960,147512,264,170168);return 0}else if((C|0)==36){cc(89528,147512,266,170168);return 0}else if((C|0)==123){i=j;return S|0}}else{T=E+20|0}}while(0);O=c[T>>2]|0;N=Hc[c[O>>2]&63](O,0,128)|0;if((N|0)!=0){O=E+24|0;W=N;do{N=c[O>>2]|0;xz(N,W+12|0,c[W+28>>2]|0,N|0,0)|0;N=c[T>>2]|0;W=Hc[c[N>>2]&63](N,W,8)|0;}while((W|0)!=0)}W=bh(c[T>>2]|0)|0;b:do{if((bh(c[T>>2]|0)|0)==0){X=0}else{O=0;while(1){N=c[T>>2]|0;H=c[(c[N+8>>2]|0)+4>>2]|0;if((H|0)==0){C=47;break}L=c[(c[N+4>>2]|0)+8>>2]|0;if((L|0)<0){Y=c[H+8>>2]|0}else{Y=H+(-L|0)|0}if((Y|0)==0){C=47;break}Hc[c[N>>2]&63](N,Y,4096)|0;eF(Y);N=O+1|0;if((bh(c[T>>2]|0)|0)==0){X=N;break b}else{O=N}}if((C|0)==47){cc(106312,147512,616,169816);return 0}}}while(0);if((W|0)!=(X|0)){cc(100584,147512,623,169816);return 0}X=Vg(c[T>>2]|0)|0;if((X|0)<0){S=X;i=j;return S|0}if((d|0)>0){X=k;T=k|0;W=l|0;Y=l+8|0;O=l+16|0;N=l+24|0;L=g+32|0;g=m|0;H=m+8|0;M=m+16|0;J=m+24|0;y=n|0;f=n+8|0;z=n+16|0;B=n+24|0;D=p|0;e=p+8|0;I=p+16|0;A=p+24|0;Z=q|0;_=q+8|0;$=q+16|0;aa=q+24|0;ba=r|0;da=r+8|0;ea=r+16|0;fa=r+24|0;ga=s|0;ha=s+8|0;ia=s+16|0;ja=s+24|0;ka=t|0;la=t+8|0;ma=t+16|0;na=t+24|0;oa=k+24|0;pa=k+28|0;qa=k+32|0;ra=k+12|0;sa=k+8|0;ta=k+4|0;ua=k+20|0;k=w|0;va=w+8|0;wa=w+16|0;xa=w+24|0;ya=x|0;za=x+8|0;Aa=x+16|0;Ba=x+24|0;Ca=u|0;Da=u+8|0;Ea=u+16|0;Fa=u+24|0;Ga=v|0;Ha=v+8|0;Ia=v+16|0;Ja=v+24|0;Ka=0;La=0;while(1){Na=b+(Ka*40|0)+32|0;Oa=c[Na>>2]|0;do{if((Oa|0)==0){Pa=La}else{Qa=b+(Ka*40|0)|0;Ra=Oa|0;V=+h[Ra>>3];Sa=b+(Ka*40|0)+16|0;U=(V*2.0+ +h[Sa>>3])*.125;Ta=Oa+8|0;Ua=b+(Ka*40|0)+24|0;Q=(+h[Ta>>3]*2.0+ +h[Ua>>3])*.5;vF(X|0,0,36)|0;Va=Qa|0;Wa=Oa+16|0;h[Wa>>3]=+h[Va>>3]-V;Xa=b+(Ka*40|0)+8|0;Ya=Oa+24|0;h[Ya>>3]=+h[Xa>>3]+ +h[Ua>>3];Nz(l,E,Qa,T);Za=c[W>>2]|0;V=+h[Y>>3];P=+h[O>>3];G=+h[N>>3];c:do{if((Za|0)==0){_a=0;$a=V;ab=P;bb=G}else{h[Ya>>3]=+h[Xa>>3];Nz(m,E,Qa,T);cb=c[g>>2]|0;F=+h[H>>3];db=+h[M>>3];eb=+h[J>>3];if((cb|0)==0){_a=0;$a=F;ab=db;bb=eb;break}if(F<V){fb=cb;gb=F;hb=db;ib=eb}else{fb=Za;gb=V;hb=P;ib=G}h[Ya>>3]=+h[Xa>>3]- +h[Ta>>3];Nz(n,E,Qa,T);cb=c[y>>2]|0;eb=+h[f>>3];db=+h[z>>3];F=+h[B>>3];if((cb|0)==0){_a=0;$a=eb;ab=db;bb=F;break}if(eb<gb){jb=cb;kb=eb;lb=db;mb=F}else{jb=fb;kb=gb;lb=hb;mb=ib}h[Wa>>3]=+h[Va>>3];h[Ya>>3]=+h[Xa>>3]+ +h[Ua>>3];Nz(p,E,Qa,T);cb=c[D>>2]|0;F=+h[e>>3];db=+h[I>>3];eb=+h[A>>3];if((cb|0)==0){_a=0;$a=F;ab=db;bb=eb;break}if(F<kb){nb=cb;ob=F;pb=db;qb=eb}else{nb=jb;ob=kb;pb=lb;qb=mb}h[Ya>>3]=+h[Xa>>3]- +h[Ta>>3];Nz(q,E,Qa,T);cb=c[Z>>2]|0;eb=+h[_>>3];db=+h[$>>3];F=+h[aa>>3];if((cb|0)==0){_a=0;$a=eb;ab=db;bb=F;break}if(eb<ob){rb=cb;sb=eb;tb=db;ub=F}else{rb=nb;sb=ob;tb=pb;ub=qb}h[Wa>>3]=+h[Va>>3]+ +h[Sa>>3];h[Ya>>3]=+h[Xa>>3]+ +h[Ua>>3];Nz(r,E,Qa,T);cb=c[ba>>2]|0;F=+h[da>>3];db=+h[ea>>3];eb=+h[fa>>3];if((cb|0)==0){_a=0;$a=F;ab=db;bb=eb;break}if(F<sb){vb=cb;wb=F;xb=db;yb=eb}else{vb=rb;wb=sb;xb=tb;yb=ub}h[Ya>>3]=+h[Xa>>3];Nz(s,E,Qa,T);cb=c[ga>>2]|0;eb=+h[ha>>3];db=+h[ia>>3];F=+h[ja>>3];if((cb|0)==0){_a=0;$a=eb;ab=db;bb=F;break}if(eb<wb){zb=cb;Ab=eb;Bb=db;Cb=F}else{zb=vb;Ab=wb;Bb=xb;Cb=yb}h[Ya>>3]=+h[Xa>>3]- +h[Ta>>3];Nz(t,E,Qa,T);cb=c[ka>>2]|0;F=+h[la>>3];db=+h[ma>>3];eb=+h[na>>3];if((cb|0)==0){_a=0;$a=F;ab=db;bb=eb;break}if(F<Ab){Db=cb;Eb=F;Fb=db;Gb=eb}else{Db=zb;Eb=Ab;Fb=Bb;Gb=Cb}cb=(c[pa>>2]|0)==0;do{if((c[oa>>2]|0)==0){if(!cb){Hb=Db;Ib=Eb;Jb=Fb;Kb=Gb;C=89;break}if((c[qa>>2]|0)!=0){Hb=Db;Ib=Eb;Jb=Fb;Kb=Gb;C=89;break}if((c[ra>>2]|0)!=0){C=84;break}if((c[T>>2]|0)==0){Lb=Db;Mb=Eb;Nb=Fb;Ob=Gb}else{C=84}}else{if(!cb){Hb=Db;Ib=Eb;Jb=Fb;Kb=Gb;C=89;break}if((c[qa>>2]|0)==0){C=84}else{Hb=Db;Ib=Eb;Jb=Fb;Kb=Gb;C=89}}}while(0);do{if((C|0)==84){C=0;eb=+h[Va>>3]- +h[Ra>>3];h[Wa>>3]=eb;h[Ya>>3]=+h[Xa>>3]+ +h[Ua>>3];if(eb>+h[Va>>3]+ +h[Sa>>3]){Hb=Db;Ib=Eb;Jb=Fb;Kb=Gb;C=89;break}else{Pb=Eb;Qb=Db;Rb=Fb;Sb=Gb}while(1){Nz(u,E,Qa,T);cb=c[Ca>>2]|0;eb=+h[Da>>3];db=+h[Ea>>3];F=+h[Fa>>3];if((cb|0)==0){_a=0;$a=eb;ab=db;bb=F;break c}if(eb<Pb){Tb=cb;Ub=eb;Vb=db;Wb=F}else{Tb=Qb;Ub=Pb;Vb=Rb;Wb=Sb}F=U+ +h[Wa>>3];h[Wa>>3]=F;if(F>+h[Va>>3]+ +h[Sa>>3]){Hb=Tb;Ib=Ub;Jb=Vb;Kb=Wb;C=89;break}else{Pb=Ub;Qb=Tb;Rb=Vb;Sb=Wb}}}}while(0);do{if((C|0)==89){C=0;if((c[ra>>2]|0)!=0){Lb=Hb;Mb=Ib;Nb=Jb;Ob=Kb;break}if((c[T>>2]|0)!=0){Lb=Hb;Mb=Ib;Nb=Jb;Ob=Kb;break}h[Wa>>3]=+h[Va>>3]- +h[Ra>>3];F=+h[Xa>>3]+ +h[Ua>>3];h[Ya>>3]=F;if(F<+h[Xa>>3]- +h[Ta>>3]){Lb=Hb;Mb=Ib;Nb=Jb;Ob=Kb;break}else{Xb=Ib;Yb=Hb;Zb=Jb;_b=Kb}while(1){Nz(v,E,Qa,T);cb=c[Ga>>2]|0;F=+h[Ha>>3];db=+h[Ia>>3];eb=+h[Ja>>3];if((cb|0)==0){_a=0;$a=F;ab=db;bb=eb;break c}if(F<Xb){$b=cb;ac=F;bc=db;dc=eb}else{$b=Yb;ac=Xb;bc=Zb;dc=_b}eb=+h[Ya>>3]-Q;h[Ya>>3]=eb;if(eb<+h[Xa>>3]- +h[Ta>>3]){Lb=$b;Mb=ac;Nb=bc;Ob=dc;break}else{Xb=ac;Yb=$b;Zb=bc;_b=dc}}}}while(0);h[Wa>>3]=+h[Va>>3]+ +h[Sa>>3];eb=+h[Ta>>3];h[Ya>>3]=+h[Xa>>3]-eb;cb=(c[ta>>2]|0)==0;do{if((c[sa>>2]|0)==0){if(!cb){ec=Lb;fc=Mb;gc=Nb;hc=Ob;break}if((c[T>>2]|0)!=0){ec=Lb;fc=Mb;gc=Nb;hc=Ob;break}if((c[ua>>2]|0)!=0){C=103;break}if((c[qa>>2]|0)==0){_a=Lb;$a=Mb;ab=Nb;bb=Ob;break c}else{C=103}}else{if(!cb){ec=Lb;fc=Mb;gc=Nb;hc=Ob;break}if((c[T>>2]|0)==0){C=103}else{ec=Lb;fc=Mb;gc=Nb;hc=Ob}}}while(0);do{if((C|0)==103){C=0;db=+h[Va>>3]+ +h[Sa>>3];h[Wa>>3]=db;h[Ya>>3]=+h[Xa>>3]-eb;if(db<+h[Va>>3]- +h[Ra>>3]){ec=Lb;fc=Mb;gc=Nb;hc=Ob;break}else{ic=Mb;jc=Lb;kc=Nb;lc=Ob}while(1){Nz(w,E,Qa,T);cb=c[k>>2]|0;db=+h[va>>3];F=+h[wa>>3];mc=+h[xa>>3];if((cb|0)==0){_a=0;$a=db;ab=F;bb=mc;break c}if(db<ic){nc=cb;oc=db;pc=F;qc=mc}else{nc=jc;oc=ic;pc=kc;qc=lc}mc=+h[Wa>>3]-U;h[Wa>>3]=mc;if(mc<+h[Va>>3]- +h[Ra>>3]){ec=nc;fc=oc;gc=pc;hc=qc;break}else{ic=oc;jc=nc;kc=pc;lc=qc}}}}while(0);if((c[ua>>2]|0)!=0){_a=ec;$a=fc;ab=gc;bb=hc;break}if((c[qa>>2]|0)!=0){_a=ec;$a=fc;ab=gc;bb=hc;break}h[Wa>>3]=+h[Va>>3]+ +h[Sa>>3];eb=+h[Xa>>3]- +h[Ta>>3];h[Ya>>3]=eb;if(eb>+h[Xa>>3]+ +h[Ua>>3]){_a=ec;$a=fc;ab=gc;bb=hc;break}else{rc=fc;sc=ec;tc=gc;uc=hc}while(1){Nz(x,E,Qa,T);cb=c[ya>>2]|0;eb=+h[za>>3];mc=+h[Aa>>3];F=+h[Ba>>3];if((cb|0)==0){_a=0;$a=eb;ab=mc;bb=F;break c}if(eb<rc){vc=cb;wc=eb;xc=mc;yc=F}else{vc=sc;wc=rc;xc=tc;yc=uc}F=Q+ +h[Ya>>3];h[Ya>>3]=F;if(F>+h[Xa>>3]+ +h[Ua>>3]){_a=vc;$a=wc;ab=xc;bb=yc;break}else{rc=wc;sc=vc;tc=xc;uc=yc}}}}while(0);if((_a|0)==0){a[(c[Na>>2]|0)+36|0]=1;Pa=La;break}if($a==0.0){h[(c[Na>>2]|0)+16>>3]=ab;h[(c[Na>>2]|0)+24>>3]=bb;a[(c[Na>>2]|0)+36|0]=1;Pa=La;break}if((a[L]|0)!=1){Pa=1;break}h[(c[Na>>2]|0)+16>>3]=ab;h[(c[Na>>2]|0)+24>>3]=bb;a[(c[Na>>2]|0)+36|0]=1;Pa=La}}while(0);Na=Ka+1|0;if((Na|0)<(d|0)){Ka=Na;La=Pa}else{zc=Pa;break}}}else{zc=0}uz(c[E+24>>2]|0)|0;eF(E);S=zc;i=j;return S|0}function Nz(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0.0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0.0,T=0,U=0.0,V=0,W=0,X=0,Y=0.0,Z=0.0,_=0.0,$=0,aa=0.0,ba=0,ca=0.0,da=0.0,ea=0.0,fa=0.0;g=i;i=i+32|0;j=g|0;k=e+32|0;l=c[k>>2]|0;if((l|0)==0){cc(101272,147512,382,169800)}m=l+16|0;n=g+16|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];m=c[d+4>>2]|0;a:do{if((m|0)>0){o=c[d>>2]|0;p=0;q=0;b:while(1){do{if((o+(q*40|0)|0)==(e|0)){r=p}else{s=+h[o+(q*40|0)+16>>3];if(s>0.0){if(+h[o+(q*40|0)+24>>3]>0.0){r=p;break}}if(s!=0.0){t=10;break b}if(+h[o+(q*40|0)+24>>3]!=0.0){t=10;break b}s=+h[o+(q*40|0)>>3];u=+h[l+16>>3];do{if(s>u){if(s>=u+ +h[l>>3]){v=0;break}w=+h[o+(q*40|0)+8>>3];x=+h[l+24>>3];if(w<=x){v=0;break}v=w<x+ +h[l+8>>3]|0}else{v=0}}while(0);r=v+p|0}}while(0);y=q+1|0;if((y|0)<(m|0)){p=r;q=y}else{z=r;break a}}if((t|0)==10){cc(112928,147512,219,170448)}}else{z=0}}while(0);r=l+16|0;m=j|0;c[m>>2]=~~+h[r>>3];v=l+24|0;q=j+4|0;c[q>>2]=~~+h[v>>3];p=j+8|0;c[p>>2]=~~(+h[r>>3]+ +h[l>>3]);r=j+12|0;c[r>>2]=~~(+h[v>>3]+ +h[l+8>>3]);l=c[d+24>>2]|0;d=wz(l,c[l>>2]|0,j)|0;if((d|0)==0){c[b>>2]=z;h[b+8>>3]=0.0;j=b+16|0;c[j>>2]=c[n>>2];c[j+4>>2]=c[n+4>>2];c[j+8>>2]=c[n+8>>2];c[j+12>>2]=c[n+12>>2];i=g;return}j=e|0;l=e+8|0;v=d;u=0.0;o=z;c:while(1){z=c[(c[v+4>>2]|0)+16>>2]|0;y=z;do{if((y|0)==(e|0)){A=o;B=u}else{C=z;s=+h[C>>3];D=~~s;E=z+8|0;x=+h[E>>3];F=~~x;G=~~(s+ +h[z+16>>3]);H=~~(x+ +h[z+24>>3]);I=c[p>>2]|0;do{if((I|0)<(D|0)){J=o;K=u}else{L=c[m>>2]|0;if((L|0)>(G|0)){J=o;K=u;break}M=c[r>>2]|0;if((M|0)<(F|0)){J=o;K=u;break}N=c[q>>2]|0;if((N|0)>(H|0)){J=o;K=u;break}w=(+(((I|0)<(G|0)?I:G)|0)- +(((L|0)>(D|0)?L:D)|0))*(+(((M|0)<(H|0)?M:H)|0)- +(((N|0)>(F|0)?N:F)|0));if(w<=0.0){J=o;K=u;break}O=c[k>>2]|0;P=c[z+32>>2]|0;if((O|0)==(P|0)){t=27;break c}do{if((a[O+36|0]|0)==0){Q=-1}else{if((a[P+36|0]|0)==0){Q=-1;break}R=+h[j>>3];if(R==0.0){if(+h[l>>3]==0.0){Q=-1;break}}if(s==0.0&x==0.0){Q=-1;break}S=+h[l>>3];if(x<S){if(s<R){Q=0;break}Q=s>R?2:1;break}T=s<R;if(x>S){if(T){Q=6;break}Q=s>R?8:7;break}if(T){Q=3;break}if(s<=R){Q=-1;break}Q=5}}while(0);P=f+(((Q|0)<0?5:Q)<<2)|0;O=c[P>>2]|0;do{if((O|0)==0){c[P>>2]=y;U=w}else{R=+h[O>>3];T=~~R;S=+h[O+8>>3];V=~~S;W=~~(R+ +h[O+16>>3]);X=~~(S+ +h[O+24>>3]);if((I|0)<(T|0)|(L|0)>(W|0)|(M|0)<(V|0)|(N|0)>(X|0)){Y=0.0}else{Y=(+(((I|0)<(W|0)?I:W)|0)- +(((L|0)>(T|0)?L:T)|0))*(+(((M|0)<(X|0)?M:X)|0)- +(((N|0)>(V|0)?N:V)|0))}S=Y>w?Y:0.0;V=c[O+32>>2]|0;do{if((V|0)==0){Z=S}else{R=+h[V+16>>3];X=~~R;_=+h[V+24>>3];T=~~_;W=~~(R+ +h[V>>3]);$=~~(_+ +h[V+8>>3]);if((I|0)<(X|0)|(L|0)>(W|0)|(M|0)<(T|0)|(N|0)>($|0)){aa=0.0}else{aa=(+(((I|0)<(W|0)?I:W)|0)- +(((L|0)>(X|0)?L:X)|0))*(+(((M|0)<($|0)?M:$)|0)- +(((N|0)>(T|0)?N:T)|0))}if(aa<=w){Z=S;break}Z=aa>S?aa:S}}while(0);if(Z>0.0){U=Z;break}c[P>>2]=y;U=w}}while(0);J=o+1|0;K=u+U}}while(0);F=c[z+32>>2]|0;if((F|0)==0){A=J;B=K;break}if((a[F+36|0]|0)==0){A=J;B=K;break}s=+h[F+16>>3];H=~~s;x=+h[F+24>>3];D=~~x;G=~~(s+ +h[F>>3]);P=~~(x+ +h[F+8>>3]);if((I|0)<(H|0)){A=J;B=K;break}N=c[m>>2]|0;if((N|0)>(G|0)){A=J;B=K;break}M=c[r>>2]|0;if((M|0)<(D|0)){A=J;B=K;break}L=c[q>>2]|0;if((L|0)>(P|0)){A=J;B=K;break}x=(+(((I|0)<(G|0)?I:G)|0)- +(((N|0)>(H|0)?N:H)|0))*(+(((M|0)<(P|0)?M:P)|0)- +(((L|0)>(D|0)?L:D)|0));if(x<=0.0){A=J;B=K;break}D=c[k>>2]|0;if((D|0)==(F|0)){t=62;break c}do{if((a[D+36|0]|0)==0){ba=-1}else{s=+h[j>>3];if(s==0.0){if(+h[l>>3]==0.0){ba=-1;break}}w=+h[C>>3];S=+h[E>>3];if(w==0.0&S==0.0){ba=-1;break}_=+h[l>>3];if(S<_){if(w<s){ba=0;break}ba=w>s?2:1;break}F=w<s;if(S>_){if(F){ba=6;break}ba=w>s?8:7;break}if(F){ba=3;break}if(w<=s){ba=-1;break}ba=5}}while(0);E=f+(((ba|0)<0?5:ba)<<2)|0;C=c[E>>2]|0;do{if((C|0)==0){c[E>>2]=y;ca=x}else{s=+h[C>>3];D=~~s;w=+h[C+8>>3];F=~~w;P=~~(s+ +h[C+16>>3]);H=~~(w+ +h[C+24>>3]);if((I|0)<(D|0)|(N|0)>(P|0)|(M|0)<(F|0)|(L|0)>(H|0)){da=0.0}else{da=(+(((I|0)<(P|0)?I:P)|0)- +(((N|0)>(D|0)?N:D)|0))*(+(((M|0)<(H|0)?M:H)|0)- +(((L|0)>(F|0)?L:F)|0))}w=da>x?da:0.0;F=c[C+32>>2]|0;do{if((F|0)==0){ea=w}else{s=+h[F+16>>3];H=~~s;_=+h[F+24>>3];D=~~_;P=~~(s+ +h[F>>3]);G=~~(_+ +h[F+8>>3]);if((I|0)<(H|0)|(N|0)>(P|0)|(M|0)<(D|0)|(L|0)>(G|0)){fa=0.0}else{fa=(+(((I|0)<(P|0)?I:P)|0)- +(((N|0)>(H|0)?N:H)|0))*(+(((M|0)<(G|0)?M:G)|0)- +(((L|0)>(D|0)?L:D)|0))}if(fa<=x){ea=w;break}ea=fa>w?fa:w}}while(0);if(ea>0.0){ca=ea;break}c[E>>2]=y;ca=x}}while(0);A=J+1|0;B=K+ca}}while(0);y=c[v>>2]|0;if((y|0)==0){t=89;break}else{v=y;u=B;o=A}}if((t|0)==27){cc(121496,147512,276,170536)}else if((t|0)==62){cc(121496,147512,276,170536)}else if((t|0)==89){sz(d);c[b>>2]=A;h[b+8>>3]=B;A=b+16|0;c[A>>2]=c[n>>2];c[A+4>>2]=c[n+4>>2];c[A+8>>2]=c[n+8>>2];c[A+12>>2]=c[n+12>>2];i=g;return}}function Oz(){var a=0;Wv(0,1,167424,164312)|0;a=Wz(0,1)|0;Vz(a,0);return a|0}function Pz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;f=i;i=i+256|0;if((HA(b,e)|0)==999){g=NA(b,1,e)|0;Fv(1,131864,(j=i,i=i+16|0,c[j>>2]=e,c[j+8>>2]=g,j)|0)|0;i=j;k=-1;i=f;return k|0}if((IA(b,d)|0)==-1){k=-1;i=f;return k|0}b=c[d+8>>2]|0;g=f|0;if((a[(c[b+8>>2]|0)+81|0]|0)==0){l=+h[b+16>>3];if(l<0.0){m=l+-.5}else{m=l+.5}l=+h[b+24>>3];if(l<0.0){n=l+-.5}else{n=l+.5}l=+h[b+32>>3];if(l<0.0){o=l+-.5}else{o=l+.5}l=+h[b+40>>3];if(l<0.0){p=l+-.5}else{p=l+.5}nb(g|0,116720,(j=i,i=i+32|0,c[j>>2]=~~m,c[j+8>>2]=~~n,c[j+16>>2]=~~o,c[j+24>>2]=~~p,j)|0)|0;i=j}else{p=+h[b+24>>3];if(p<0.0){q=p+-.5}else{q=p+.5}p=+h[b+16>>3];if(p<0.0){r=p+-.5}else{r=p+.5}p=+h[b+40>>3];if(p<0.0){s=p+-.5}else{s=p+.5}p=+h[b+32>>3];if(p<0.0){t=p+-.5}else{t=p+.5}nb(g|0,116720,(j=i,i=i+32|0,c[j>>2]=~~q,c[j+8>>2]=~~r,c[j+16>>2]=~~s,c[j+24>>2]=~~t,j)|0)|0;i=j}iw(d|0,109272,g,213384)|0;k=0;i=f;return k|0}function Qz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[b+48>>2]|0;CA(a,d)|0;d=c[a+164>>2]|0;c[d+56>>2]=OA(d,c[d+52>>2]|0)|0;do{if((c[(c[f+8>>2]|0)+8>>2]|0)==0){if((c[d+152>>2]&67108864|0)!=0){break}Ma(92216,20,1,c[o>>2]|0)|0;g=-1;return g|0}}while(0);BA(a,e);e=_h(a,f)|0;QA(d);cA(d);GA(a);g=e;return g|0}function Rz(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;g=i;h=c[b+48>>2]|0;CA(a,d)|0;d=c[a+164>>2]|0;c[d+56>>2]=OA(d,c[d+52>>2]|0)|0;do{if((c[(c[h+8>>2]|0)+8>>2]|0)==0){if((c[d+152>>2]&67108864|0)!=0){break}Ma(92216,20,1,c[o>>2]|0)|0;j=-1;i=g;return j|0}}while(0);do{if((e|0)!=0){b=dF(4096)|0;c[e>>2]=b;if((b|0)==0){break}k=d+40|0;c[k>>2]=b;c[d+44>>2]=4096;b=d+48|0;c[b>>2]=0;l=_h(a,h)|0;QA(d);if((l|0)==0){c[e>>2]=c[k>>2];c[f>>2]=c[b>>2]}GA(a);j=l;i=g;return j|0}}while(0);Fv(1,86872,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0)|0;i=a;j=-1;i=g;return j|0}function Sz(a){a=a|0;eF(a);return}function Tz(a,b){a=a|0;b=b|0;Uz(a,0,b);return}function Uz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=c[d>>2]|0;f=kk(12)|0;g=f;if((b|0)==0){h=0}else{h=Lb(b|0)|0}c[f+4>>2]=h;c[f+8>>2]=Lb(e|0)|0;e=a+100|0;c[f>>2]=c[e>>2];c[e>>2]=g;e=c[d+4>>2]|0;d=c[e+4>>2]|0;if((d|0)==0){return}else{i=e;j=d}while(1){d=c[j+4>>2]|0;if((d|0)!=0){e=i|0;f=0;h=d;do{LA(a,c[e>>2]|0,h,c[j+(f*20|0)+8>>2]|0,g,j+(f*20|0)|0)|0;f=f+1|0;h=c[j+(f*20|0)+4>>2]|0;}while((h|0)!=0)}h=c[i+12>>2]|0;if((h|0)==0){break}else{i=i+8|0;j=h}}return}function Vz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=c[b+32>>2]|0;if((d|0)==0){e=b+44|0;a[e]=0;f=zB(b)|0;g=tm(b)|0;return}h=c[d>>2]|0;if((h|0)==0){e=b+44|0;a[e]=0;f=zB(b)|0;g=tm(b)|0;return}i=b+100|0;j=d;d=h;do{do{if((a[d]|0)==103){if((Ua(d|0,138896)|0)==0){break}h=c[j+4>>2]|0;k=c[h>>2]|0;l=kk(12)|0;m=l;c[l+4>>2]=0;c[l+8>>2]=Lb(k|0)|0;c[l>>2]=c[i>>2];c[i>>2]=m;l=c[h+4>>2]|0;h=c[l+4>>2]|0;if((h|0)==0){break}else{n=l;o=h}while(1){h=c[o+4>>2]|0;if((h|0)!=0){l=n|0;k=0;p=h;do{LA(b,c[l>>2]|0,p,c[o+(k*20|0)+8>>2]|0,m,o+(k*20|0)|0)|0;k=k+1|0;p=c[o+(k*20|0)+4>>2]|0;}while((p|0)!=0)}p=c[n+12>>2]|0;if((p|0)==0){break}else{n=n+8|0;o=p}}}}while(0);j=j+8|0;d=c[j>>2]|0;}while((d|0)!=0);e=b+44|0;a[e]=0;f=zB(b)|0;g=tm(b)|0;return}function Wz(a,b){a=a|0;b=b|0;var d=0,e=0;d=jk(392)|0;e=d;if((d|0)==0){return e|0}c[d>>2]=172736;c[d+16>>2]=24;c[d+32>>2]=a;c[d+36>>2]=b;return e|0}function Xz(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0;d=i;i=i+104|0;e=d|0;f=c[b+76>>2]|0;g=c[b>>2]|0;do{if((f|0)==0){h=4}else{j=c[f>>2]|0;if((j|0)==0){h=4;break}Cc[j&255](b)}}while(0);do{if((h|0)==4){if((c[b+40>>2]|0)!=0){break}f=b+36|0;if((c[f>>2]|0)!=0){break}if((a[g+13|0]|0)==0){k=c[b+32>>2]|0}else{j=e|0;l=c[b+24>>2]|0;if((l|0)==0){a[j]=0}else{nb(j|0,154200,(m=i,i=i+8|0,c[m>>2]=l+1,m)|0)|0;i=m}l=c[b+20>>2]|0;n=(l|0)!=0?l:151040;l=xF(n|0)|0;o=xF(j|0)|0;q=b+52|0;r=l+1+o+(xF(c[q>>2]|0)|0)|0;if((c[53236]|0)>>>0<(r+1|0)>>>0){o=r+11|0;c[53236]=o;r=gF(c[53238]|0,o)|0;c[53238]=r;s=r}else{s=c[53238]|0}zF(s|0,n|0)|0;AF(c[53238]|0,j|0)|0;j=c[53238]|0;n=j+(xF(j|0)|0)|0;z=46;a[n]=z;z=z>>8;a[n+1|0]=z;n=Lb(c[q>>2]|0)|0;q=ob(n|0,58)|0;j=c[53238]|0;if((q|0)==0){t=j}else{r=q;q=j;while(1){AF(q|0,r+1|0)|0;j=c[53238]|0;o=j+(xF(j|0)|0)|0;z=46;a[o]=z;z=z>>8;a[o+1|0]=z;a[r]=0;o=ob(n|0,58)|0;j=c[53238]|0;if((o|0)==0){t=j;break}else{r=o;q=j}}}AF(t|0,n|0)|0;eF(n);q=c[53238]|0;c[b+32>>2]=q;k=q}if((k|0)==0){c[f>>2]=c[p>>2];break}q=Eb(k|0,119272)|0;c[f>>2]=q;if((q|0)!=0){break}q=c[(c[b+12>>2]|0)+16>>2]|0;r=c[b+32>>2]|0;j=Wb(c[(Vb()|0)>>2]|0)|0;Dc[q&63](156928,(m=i,i=i+16|0,c[m>>2]=r,c[m+8>>2]=j,m)|0);i=m;u=1;i=d;return u|0}}while(0);if((c[b+152>>2]&1024|0)==0){u=0;i=d;return u|0}c[43600]=0;c[43601]=0;c[43602]=0;c[43592]=0;c[43595]=0;c[43593]=0;c[45196]=zg(0,0,0)|0;if((Ag(174368,-1,8,-15,9,0,127008,56)|0)==0){Yz(b,8,10)|0;u=0;i=d;return u|0}else{Dc[c[(c[b+12>>2]|0)+16>>2]&63](114832,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;u=1;i=d;return u|0}return 0}function Yz(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=i;g=c[(c[b>>2]|0)+104>>2]|0;if((g|0)!=0){h=Hc[g&63](b,d,e)|0;i=f;return h|0}g=b+40|0;j=c[g>>2]|0;if((j|0)==0){h=Ma(d|0,1,e|0,c[b+36>>2]|0)|0;i=f;return h|0}k=b+44|0;l=b+48|0;m=c[l>>2]|0;do{if(((c[k>>2]|0)-1-m|0)>>>0<e>>>0){n=e+4096+m&-4096;c[k>>2]=n;o=gF(j,n)|0;c[g>>2]=o;if((o|0)==0){Dc[c[(c[b+12>>2]|0)+16>>2]&63](107728,(n=i,i=i+1|0,i=i+7&-8,c[n>>2]=0,n)|0);i=n;mb(1);return 0}else{p=o;q=c[l>>2]|0;break}}else{p=j;q=m}}while(0);tF(p+q|0,d|0,e)|0;d=(c[l>>2]|0)+e|0;c[l>>2]=d;a[(c[g>>2]|0)+d|0]=0;h=e;i=f;return h|0}function Zz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;e=i;if((d|0)==0|(b|0)==0){f=0;i=e;return f|0}if((c[a+152>>2]&1024|0)==0){if((Yz(a,b,d)|0)==(d|0)){f=d;i=e;return f|0}else{Dc[c[(c[a+12>>2]|0)+16>>2]&63](96176,(g=i,i=i+8|0,c[g>>2]=d,g)|0);i=g;mb(1);return 0}}h=c[45188]|0;j=h+(d<<1)-(c[43596]|0)|0;do{if(h>>>0<j>>>0){k=j+4096&-4096;c[45188]=k;l=gF(c[45190]|0,k)|0;c[45190]=l;if((l|0)!=0){break}Dc[c[(c[a+12>>2]|0)+16>>2]&63](107728,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0);i=g;mb(1);return 0}}while(0);c[45196]=zg(c[45196]|0,b,d)|0;c[43592]=b;c[43593]=d;while(1){c[43595]=c[45190];c[43596]=c[45188];m=Eg(174368,0)|0;if((m|0)!=0){n=9;break}b=c[43595]|0;j=c[45190]|0;h=b-j|0;if((b|0)!=(j|0)){o=Yz(a,j,h)|0;if((o|0)!=(h|0)){n=12;break}}if((c[43593]|0)==0){f=d;n=15;break}}if((n|0)==9){Dc[c[(c[a+12>>2]|0)+16>>2]&63](102016,(g=i,i=i+8|0,c[g>>2]=m,g)|0);i=g;mb(1);return 0}else if((n|0)==12){Dc[c[(c[a+12>>2]|0)+16>>2]&63](96176,(g=i,i=i+8|0,c[g>>2]=o,g)|0);i=g;mb(1);return 0}else if((n|0)==15){i=e;return f|0}return 0}function _z(a,b){a=a|0;b=b|0;var c=0,d=0;c=xF(b|0)|0;d=(Zz(a,b,c)|0)==(c|0);return(d?1:-1)|0}function $z(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=i;i=i+8|0;e=d|0;a[e]=c;f=(Zz(b,e,1)|0)==1;i=d;return(f?c:-1)|0}function aA(b){b=b|0;var d=0,e=0;d=c[b+36>>2]|0;do{if((d|0)==0){e=0}else{if((a[b+144|0]|0)!=0){e=0;break}if((c[(c[b>>2]|0)+104>>2]|0)!=0){e=0;break}e=Ia(d|0)|0}}while(0);return e|0}function bA(b){b=b|0;var d=0,e=0;d=c[b+76>>2]|0;do{if((d|0)!=0){e=c[d+4>>2]|0;if((e|0)==0){break}Cc[e&255](b)}}while(0);d=c[b+36>>2]|0;if((d|0)==0){return}if((a[b+144|0]|0)!=0){return}if((c[(c[b>>2]|0)+104>>2]|0)!=0){return}Ia(d|0)|0;return}function cA(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0;d=i;i=i+8|0;e=d|0;f=e;g=c[b+76>>2]|0;do{if((c[b+152>>2]&1024|0)!=0){c[e>>2]=0;c[e+4>>2]=0;h=e;c[43592]=h;c[43593]=0;j=0;while(1){c[43595]=c[45190];c[43596]=c[45188];k=Eg(174368,4)|0;if((k|0)==1){l=7;break}else if((k|0)!=0){m=j;n=k;l=6;break}k=j+1|0;if((j|0)>=101){m=k;n=0;l=6;break}o=c[45190]|0;Yz(b,o,(c[43595]|0)-o|0)|0;j=k}if((l|0)==6){Dc[c[(c[b+12>>2]|0)+16>>2]&63](80992,(q=i,i=i+16|0,c[q>>2]=n,c[q+8>>2]=m,q)|0);i=q;mb(1)}else if((l|0)==7){j=c[45190]|0;Yz(b,j,(c[43595]|0)-j|0)|0;j=Bg(174368)|0;if((j|0)==0){k=c[45196]|0;a[h]=k;a[f+1|0]=k>>>8;a[f+2|0]=k>>>16;a[f+3|0]=k>>>24;k=c[43594]|0;a[f+4|0]=k;a[f+5|0]=k>>>8;a[f+6|0]=k>>>16;a[f+7|0]=k>>>24;Yz(b,h,8)|0;break}else{Dc[c[(c[b+12>>2]|0)+16>>2]&63](167120,(q=i,i=i+8|0,c[q>>2]=j,q)|0);i=q;mb(1)}}}}while(0);do{if((g|0)!=0){q=c[g+8>>2]|0;if((q|0)==0){break}Cc[q&255](b);i=d;return}}while(0);g=b+36|0;q=c[g>>2]|0;do{if((q|0)!=0){if((a[b+144|0]|0)!=0){break}if((c[(c[b>>2]|0)+104>>2]|0)!=0){break}Ia(q|0)|0}}while(0);q=b+32|0;if((c[q>>2]|0)==0){i=d;return}f=c[g>>2]|0;if((f|0)==(c[p>>2]|0)){i=d;return}if((a[b+144|0]|0)!=0){i=d;return}if((f|0)!=0){Ha(f|0)|0;c[g>>2]=0}c[q>>2]=0;i=d;return}function dA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+1040|0;f=e+1024|0;g=e|0;h=f;c[h>>2]=d;c[h+4>>2]=0;Zz(a,g,_b(g|0,b|0,f|0)|0)|0;i=e;return}function eA(b,c){b=b|0;c=+c;var d=0,e=0,f=0,g=0.0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;if(c<-1.0e15){d=19856;e=19;f=Zz(b,d,e)|0;return}if(c>1.0e15){d=19857;e=18;f=Zz(b,d,e)|0;return}g=c*100.0;if(g<0.0){h=g+-.5}else{h=g+.5}i=~~h;if((i|0)==0){d=159152;e=1;f=Zz(b,d,e)|0;return}j=(i|0)<0;k=178892;l=j?-i|0:i;i=0;m=2;while(1){n=(l|0)%10|0;o=(l|0)/10|0;if((n|0)==0&i<<24>>24==0){p=0;q=k}else{r=k-1|0;a[r]=n|48;p=1;q=r}do{if((m|0)==1){if(p<<24>>24==0){s=1;t=q;break}r=q-1|0;a[r]=46;s=1;t=r}else{s=p;t=q}}while(0);r=m-1|0;if((l+9|0)>>>0>18>>>0|(r|0)>0){k=t;l=o;i=s;m=r}else{break}}if(j){j=t-1|0;a[j]=45;u=j}else{u=t}d=u;e=178892-u|0;f=Zz(b,d,e)|0;return}function fA(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0,k=0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0;e=i;f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];g=+h[d>>3];do{if(g<-1.0e15){j=19856;k=19}else{if(g>1.0e15){j=19857;k=18;break}l=g*100.0;if(l<0.0){m=l+-.5}else{m=l+.5}f=~~m;if((f|0)==0){j=159152;k=1;break}n=(f|0)<0;o=178892;p=n?-f|0:f;f=0;q=2;while(1){r=(p|0)%10|0;s=(p|0)/10|0;if((r|0)==0&f<<24>>24==0){t=0;u=o}else{v=o-1|0;a[v]=r|48;t=1;u=v}do{if((q|0)==1){if(t<<24>>24==0){w=1;x=u;break}v=u-1|0;a[v]=46;w=1;x=v}else{w=t;x=u}}while(0);v=q-1|0;if((p+9|0)>>>0>18>>>0|(v|0)>0){o=x;p=s;f=w;q=v}else{break}}if(n){q=x-1|0;a[q]=45;y=q}else{y=x}j=y;k=178892-y|0}}while(0);Zz(b,j,k)|0;Zz(b,163208,1)|0;m=+h[d+8>>3];if(m<-1.0e15){z=19856;A=19;B=Zz(b,z,A)|0;i=e;return}if(m>1.0e15){z=19857;A=18;B=Zz(b,z,A)|0;i=e;return}g=m*100.0;if(g<0.0){C=g+-.5}else{C=g+.5}d=~~C;if((d|0)==0){z=159152;A=1;B=Zz(b,z,A)|0;i=e;return}k=(d|0)<0;j=178892;y=k?-d|0:d;d=0;x=2;while(1){w=(y|0)%10|0;u=(y|0)/10|0;if((w|0)==0&d<<24>>24==0){D=0;E=j}else{t=j-1|0;a[t]=w|48;D=1;E=t}do{if((x|0)==1){if(D<<24>>24==0){F=1;G=E;break}t=E-1|0;a[t]=46;F=1;G=t}else{F=D;G=E}}while(0);n=x-1|0;if((y+9|0)>>>0>18>>>0|(n|0)>0){j=G;y=u;d=F;x=n}else{break}}if(k){k=G-1|0;a[k]=45;H=k}else{H=G}z=H;A=178892-H|0;B=Zz(b,z,A)|0;i=e;return}function gA(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;fA(a,b);if((c|0)>1){d=1}else{return}do{Zz(a,163208,1)|0;fA(a,b+(d<<4)|0);d=d+1|0;}while((d|0)<(c|0));return}function hA(a){a=a|0;return 1}function iA(b){b=b|0;var c=0;a[b+536|0]=0;c=b+336|0;h[c>>3]=10.0/+h[b+352>>3]+ +h[c>>3];a[b+537|0]=1;return 0}function jA(b){b=b|0;var c=0;a[b+536|0]=0;c=b+336|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537|0]=1;return 0}function kA(b){b=b|0;var c=0;a[b+536|0]=0;c=b+344|0;h[c>>3]=+h[c>>3]-10.0/+h[b+352>>3];a[b+537|0]=1;return 0}function lA(b){b=b|0;var c=0;a[b+536|0]=0;c=b+344|0;h[c>>3]=10.0/+h[b+352>>3]+ +h[c>>3];a[b+537|0]=1;return 0}function mA(b){b=b|0;var c=0;a[b+536|0]=0;c=b+352|0;h[c>>3]=+h[c>>3]*1.1;a[b+537|0]=1;return 0}function nA(b){b=b|0;var c=0;a[b+536|0]=0;c=b+352|0;h[c>>3]=+h[c>>3]/1.1;a[b+537|0]=1;return 0}function oA(b){b=b|0;var d=0,e=0,f=0.0,g=0.0;d=b+536|0;e=(a[d]|0)==0;a[d]=e&1;if(!e){return 0}e=c[b+448>>2]|0;d=c[b+452>>2]|0;f=+(e>>>0>>>0)/+(e|0);g=+(d>>>0>>>0)/+(d|0);h[b+352>>3]=f<g?f:g;vF(b+336|0,0,16)|0;a[b+537|0]=1;return 0}function pA(b){b=b|0;var d=0,e=0,f=0;d=c[(c[b>>2]|0)+168>>2]|0;e=b+580|0;if((c[e>>2]|0)!=0){Rh(b,d);f=b+540|0;a[f]=1;return}c[e>>2]=d;e=(c[d+8>>2]|0)+112|0;a[e]=a[e]|2;AA(b,d);Rh(b,d);f=b+540|0;a[f]=1;return}function qA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;f=i;g=e;e=i;i=i+16|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];switch(d|0){case 2:{a[b+538|0]=1;a[b+541|0]=2;a[b+537|0]=1;j=b+560|0;k=j;l=e;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];i=f;return};case 3:{yA(b,+h[e>>3],+h[e+8>>3]);a[b+538|0]=1;a[b+541|0]=3;a[b+537|0]=1;j=b+560|0;k=j;l=e;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];i=f;return};case 4:{a[b+536|0]=0;if((c[b+360>>2]|0)==0){m=+h[b+352>>3];d=b+336|0;h[d>>3]=(+h[e>>3]- +((c[b+448>>2]|0)>>>0>>>0)*.5)*.10000000000000009/(m*+h[b+520>>3])+ +h[d>>3];d=b+344|0;h[d>>3]=(+h[e+8>>3]- +((c[b+452>>2]|0)>>>0>>>0)*.5)*.10000000000000009/(m*+h[b+528>>3])+ +h[d>>3];n=m}else{m=+h[b+352>>3];d=b+336|0;h[d>>3]=+h[d>>3]-(+h[e+8>>3]- +((c[b+452>>2]|0)>>>0>>>0)*.5)*.10000000000000009/(m*+h[b+528>>3]);d=b+344|0;h[d>>3]=(+h[e>>3]- +((c[b+448>>2]|0)>>>0>>>0)*.5)*.10000000000000009/(m*+h[b+520>>3])+ +h[d>>3];n=m}h[b+352>>3]=n*1.1;a[b+537|0]=1;j=b+560|0;k=j;l=e;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];i=f;return};case 5:{a[b+536|0]=0;d=b+352|0;n=+h[d>>3]/1.1;h[d>>3]=n;if((c[b+360>>2]|0)==0){d=b+336|0;h[d>>3]=+h[d>>3]-(+h[e>>3]- +((c[b+448>>2]|0)>>>0>>>0)*.5)*.10000000000000009/(n*+h[b+520>>3]);d=b+344|0;h[d>>3]=+h[d>>3]-(+h[e+8>>3]- +((c[b+452>>2]|0)>>>0>>>0)*.5)*.10000000000000009/(n*+h[b+528>>3])}else{d=b+336|0;h[d>>3]=(+h[e+8>>3]- +((c[b+452>>2]|0)>>>0>>>0)*.5)*.10000000000000009/(n*+h[b+528>>3])+ +h[d>>3];d=b+344|0;h[d>>3]=+h[d>>3]-(+h[e>>3]- +((c[b+448>>2]|0)>>>0>>>0)*.5)*.10000000000000009/(n*+h[b+520>>3])}a[b+537|0]=1;j=b+560|0;k=j;l=e;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];i=f;return};case 1:{yA(b,+h[e>>3],+h[e+8>>3]);d=b+580|0;g=c[d>>2]|0;do{if((g|0)!=0){o=Sx(g)|0;if((o|0)==0){p=g+8|0;q=(c[p>>2]|0)+112|0;a[q]=a[q]|4;q=(c[p>>2]|0)+112|0;a[q]=a[q]&-3;break}else if((o|0)==2){q=g+8|0;p=(c[q>>2]|0)+115|0;a[p]=a[p]|4;p=(c[q>>2]|0)+115|0;a[p]=a[p]&-3;break}else if((o|0)==1){o=g+8|0;p=(c[o>>2]|0)+117|0;a[p]=a[p]|4;p=(c[o>>2]|0)+117|0;a[p]=a[p]&-3;break}else{break}}}while(0);g=b+588|0;p=c[g>>2]|0;if((p|0)!=0){eF(p);c[g>>2]=0}p=c[b+576>>2]|0;c[d>>2]=p;do{if((p|0)!=0){d=Sx(p)|0;if((d|0)==1){o=(c[p+8>>2]|0)+117|0;a[o]=a[o]|2;o=b+592|0;FA(o,0,118592);FA(o,1,$w(p)|0);c[b+596>>2]=2;o=b+604|0;q=Ix(Hx(p)|0)|0;r=Xv(q,1,0)|0;if((r|0)==0){s=2}else{t=2;u=r;while(1){FA(o,t,c[u+8>>2]|0);r=t+2|0;FA(o,t|1,fw(p,u)|0);v=Xv(q,1,u)|0;if((v|0)==0){s=r;break}else{t=r;u=v}}}c[b+608>>2]=s;u=Wv(Hx(p)|0,1,123512,0)|0;if((u|0)==0){t=Wv(Hx(p)|0,1,125272,0)|0;if((t|0)==0){break}else{w=t}}else{w=u}c[g>>2]=fk(fw(p,w)|0,p)|0;break}else if((d|0)==2){u=p;t=(c[p+8>>2]|0)+115|0;a[t]=a[t]|2;t=b+592|0;FA(t,0,119112);q=p;o=p+32|0;FA(t,1,$w(c[((c[q>>2]&3|0)==3?u:o)+28>>2]|0)|0);v=(Nw(Hx(c[((c[q>>2]&3|0)==3?u:o)+28>>2]|0)|0)|0)!=0;FA(t,3,v?131448:129144);v=p-32|0;FA(t,4,$w(c[((c[q>>2]&3|0)==2?u:v)+28>>2]|0)|0);c[b+596>>2]=7;o=b+604|0;r=Ix(Hx(c[((c[q>>2]&3|0)==2?u:v)+28>>2]|0)|0)|0;x=Xv(r,2,0)|0;a:do{if((x|0)==0){y=7}else{z=7;A=x;while(1){B=A;while(1){C=B+8|0;D=c[C>>2]|0;if((Ya(D|0,120056)|0)==0){E=20;break}if((Ya(D|0,120832)|0)==0){E=22;break}if((Ya(D|0,121680)|0)!=0){break}FA(t,6,fw(p,B)|0);D=Xv(r,2,B)|0;if((D|0)==0){y=z;break a}else{B=D}}if((E|0)==20){E=0;FA(t,2,fw(p,B)|0)}else if((E|0)==22){E=0;FA(t,5,fw(p,B)|0)}FA(o,z,c[C>>2]|0);D=z+2|0;FA(o,z+1|0,fw(p,B)|0);F=Xv(r,2,B)|0;if((F|0)==0){y=D;break}else{z=D;A=F}}}}while(0);c[b+608>>2]=y;r=Wv(Hx(c[((c[q>>2]&3|0)==2?u:v)+28>>2]|0)|0,2,123512,0)|0;if((r|0)==0){o=Wv(Hx(c[((c[q>>2]&3|0)==2?u:v)+28>>2]|0)|0,2,125272,0)|0;if((o|0)==0){break}else{G=o}}else{G=r}c[g>>2]=fk(fw(p,G)|0,p)|0;break}else if((d|0)==0){r=(c[p+8>>2]|0)+112|0;a[r]=a[r]|2;AA(b,p);break}else{break}}}while(0);a[b+538|0]=1;a[b+541|0]=1;a[b+537|0]=1;j=b+560|0;k=j;l=e;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];i=f;return};default:{j=b+560|0;k=j;l=e;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];i=f;return}}}function rA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;d=i;f=e;e=i;i=i+16|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];a[b+538|0]=0;a[b+541|0]=0;i=d;return}function sA(b,e){b=b|0;e=e|0;var f=0,g=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0;f=i;g=e;e=i;i=i+16|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];j=+h[e>>3];g=b+560|0;k=(j- +h[g>>3])/+h[b+520>>3];l=+h[e+8>>3];m=(l- +h[b+568>>3])/+h[b+528>>3];n=~~k;do{if((((n|0)>-1?n:-n|0)|0)<1){o=~~m;if((((o|0)>-1?o:-o|0)|0)>=1){break}i=f;return}}while(0);n=d[b+541|0]|0;if((n|0)==0){yA(b,j,l)}else if((n|0)==2){l=+h[b+352>>3];if((c[b+360>>2]|0)==0){n=b+336|0;h[n>>3]=+h[n>>3]-k/l;n=b+344|0;h[n>>3]=+h[n>>3]-m/l}else{n=b+336|0;h[n>>3]=+h[n>>3]-m/l;n=b+344|0;h[n>>3]=k/l+ +h[n>>3]}a[b+537|0]=1}b=g;g=e;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2];i=f;return}function tA(a,b,c){a=a|0;b=b|0;c=c|0;return}function uA(a){a=a|0;return}function vA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=c[b>>2]|0;do{if((d|0)==0){g=Hw(150416,173944,0)|0;c[b+32>>2]=148120;h=g}else{g=Eb(d|0,144944)|0;if((g|0)==0){return}else{i=Dw(g,0)|0;Ha(g|0)|0;h=i;break}}}while(0);if((h|0)==0){return}d=f+168|0;i=c[d>>2]|0;if((i|0)!=0){g=c[f+172>>2]|0;do{if((g|0)==0){j=i}else{k=c[g+4>>2]|0;if((k|0)==0){j=i;break}Cc[k&255](i);j=c[d>>2]|0}}while(0);Sj(j);Kw(c[d>>2]|0)|0}Zx(h,0,142024,272,1);Zx(h,1,138264,304,1);Zx(h,2,136288,176,1);c[d>>2]=h;c[(c[h+8>>2]|0)+136>>2]=f;if((Pz(f,h,e)|0)==-1){return}c[b+580>>2]=0;c[b+576>>2]=0;a[b+537|0]=1;return}function wA(a,b){a=a|0;b=b|0;var d=0;d=c[a>>2]|0;Pz(d,c[d+168>>2]|0,b)|0;return}function xA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[a>>2]|0;Qz(e,c[e+168>>2]|0,b,d)|0;return}function yA(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=i;i=i+32|0;g=f|0;j=+h[b+352>>3];if((c[b+360>>2]|0)==0){k=d/(j*+h[b+520>>3])- +h[b+504>>3];l=e/(j*+h[b+528>>3])- +h[b+512>>3]}else{k=e/(j*+h[b+528>>3])- +h[b+504>>3];l=(-0.0-d)/(j*+h[b+520>>3])- +h[b+512>>3]}d=1.0/j;m=c[(c[b>>2]|0)+168>>2]|0;h[g>>3]=k-d;h[g+8>>3]=l-d;h[g+16>>3]=k+d;h[g+24>>3]=l+d;n=ux(m)|0;a:do{if((n|0)==0){o=10}else{p=n;b:while(1){q=mw(m,p)|0;if((q|0)!=0){r=q;while(1){if((on(r,g)|0)<<24>>24!=0){break b}q=ow(m,r)|0;if((q|0)==0){break}else{r=q}}}q=vx(m,p)|0;if((q|0)==0){o=10;break a}else{p=q}}s=r|0}}while(0);c:do{if((o|0)==10){r=wx(m)|0;d:do{if((r|0)!=0){n=r;while(1){if((mn(n,g)|0)<<24>>24!=0){break}p=xx(m,n)|0;if((p|0)==0){break d}else{n=p}}s=n|0;break c}}while(0);r=zA(m,g)|0;if((r|0)==0){s=m|0;break}else{s=r|0;break}}}while(0);m=b+576|0;g=c[m>>2]|0;if((s|0)==(g|0)){i=f;return}do{if((g|0)!=0){o=Sx(g)|0;if((o|0)==0){r=(c[g+8>>2]|0)+112|0;a[r]=a[r]&-2;break}else if((o|0)==1){r=(c[g+8>>2]|0)+117|0;a[r]=a[r]&-2;break}else if((o|0)==2){o=(c[g+8>>2]|0)+115|0;a[o]=a[o]&-2;break}else{break}}}while(0);g=b+584|0;c[g>>2]=0;c[m>>2]=s;do{if((s|0)!=0){m=Sx(s)|0;if((m|0)==0){o=(c[s+8>>2]|0)+112|0;a[o]=a[o]|1;o=Wv(s,0,133568,0)|0;if((o|0)==0){break}c[g>>2]=fk(fw(s,o)|0,s)|0;break}else if((m|0)==2){o=(c[s+8>>2]|0)+115|0;a[o]=a[o]|1;o=Wv(Hx(c[((c[s>>2]&3|0)==2?s:s-32|0)+28>>2]|0)|0,2,133568,0)|0;if((o|0)==0){break}c[g>>2]=fk(fw(s,o)|0,s)|0;break}else if((m|0)==1){m=(c[s+8>>2]|0)+117|0;a[m]=a[m]|1;m=Wv(Hx(s)|0,1,133568,0)|0;if((m|0)==0){break}c[g>>2]=fk(fw(s,m)|0,s)|0;break}else{break}}}while(0);a[b+537|0]=1;i=f;return}function zA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0;d=i;e=b;b=i;i=i+32|0;tF(b,e,32)|0;e=c[a+8>>2]|0;f=c[e+172>>2]|0;a:do{if((f|0)>=1){g=c[e+176>>2]|0;j=1;while(1){k=zA(c[g+(j<<2)>>2]|0,b)|0;if((k|0)!=0){l=k;break}if((j|0)<(f|0)){j=j+1|0}else{break a}}i=d;return l|0}}while(0);m=+h[e+24>>3];n=+h[e+40>>3];do{if(+h[b+16>>3]>=+h[e+16>>3]){if(+h[e+32>>3]<+h[b>>3]){break}if(+h[b+24>>3]<m){break}if(n<+h[b+8>>3]){break}else{l=a}i=d;return l|0}}while(0);l=0;i=d;return l|0}function AA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=a+592|0;e=b|0;do{if((Ix(e)|0)==(b|0)){if((Nw(b)|0)==0){FA(d,0,116736);break}else{FA(d,0,115792);break}}else{FA(d,0,117648)}}while(0);FA(d,1,$w(e)|0);c[a+596>>2]=2;d=a+604|0;f=Xv(b,0,0)|0;if((f|0)==0){g=2}else{h=2;i=f;while(1){FA(d,h,c[i+8>>2]|0);FA(d,h+1|0,fw(e,i)|0);f=h+3|0;FA(d,h+2|0,0);j=Xv(b,0,i)|0;if((j|0)==0){g=f;break}else{h=f;i=j}}}c[a+608>>2]=g;g=Wv(b,0,123512,0)|0;do{if((g|0)==0){i=Wv(b,0,125272,0)|0;if((i|0)!=0){k=i;break}return}else{k=g}}while(0);c[a+588>>2]=fk(fw(e,k)|0,e)|0;return}function BA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+160|0;e=c[d>>2]|0;do{if((e|0)==0){f=jk(632)|0;c[d>>2]=f;c[a+164>>2]=f;c[44216]=f;g=f}else{f=c[44216]|0;if((f|0)==0){c[44216]=e;g=e;break}h=c[f+4>>2]|0;if((h|0)==0){f=jk(632)|0;c[(c[44216]|0)+4>>2]=f;i=c[(c[44216]|0)+4>>2]|0}else{i=h}c[44216]=i;g=i}}while(0);c[g+32>>2]=b;c[c[44216]>>2]=a;return}function CA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+160|0;e=c[d>>2]|0;do{if((e|0)==0){f=jk(632)|0;c[d>>2]=f;c[a+164>>2]=f;c[44214]=f;g=f}else{f=c[44214]|0;if((f|0)==0){c[44214]=e;g=e;break}h=c[f+4>>2]|0;if((h|0)==0){f=jk(632)|0;c[(c[44214]|0)+4>>2]=f;i=c[(c[44214]|0)+4>>2]|0}else{i=h}c[44214]=i;g=i}}while(0);c[g+52>>2]=b;c[c[44214]>>2]=a;return(MA(a,3,b)|0)!=0|0}function DA(a){a=a|0;var b=0;b=c[a+160>>2]|0;c[a+164>>2]=b;return b|0}function EA(a){a=a|0;var b=0,d=0,e=0;b=a+164|0;a=c[b>>2]|0;d=c[a+4>>2]|0;do{if((d|0)!=0){e=d+52|0;if((c[e>>2]|0)!=0){break}c[e>>2]=c[a+52>>2]}}while(0);c[b>>2]=d;return d|0}function FA(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a+8|0;if((c[e>>2]|0)>(b|0)){f=c[a>>2]|0;g=f+(b<<2)|0;c[g>>2]=d;return}else{h=b+10|0;c[e>>2]=h;e=a|0;a=mk(c[e>>2]|0,h<<2)|0;c[e>>2]=a;f=a;g=f+(b<<2)|0;c[g>>2]=d;return}}function GA(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=a+160|0;d=c[b>>2]|0;if((d|0)!=0){e=d;while(1){d=c[e+4>>2]|0;f=e+604|0;g=c[f>>2]|0;if((g|0)!=0){eF(g)}c[f>>2]=0;c[e+612>>2]=0;c[e+608>>2]=0;f=e+592|0;g=c[f>>2]|0;if((g|0)!=0){eF(g)}c[f>>2]=0;c[e+600>>2]=0;c[e+596>>2]=0;f=c[e+584>>2]|0;if((f|0)!=0){eF(f)}f=c[e+588>>2]|0;if((f|0)!=0){eF(f)}eF(e);if((d|0)==0){break}else{e=d}}}c[44214]=0;c[44216]=0;c[a+192>>2]=0;c[a+164>>2]=0;c[b>>2]=0;c[a+28>>2]=0;return}function HA(a,b){a=a|0;b=b|0;var d=0,e=0;d=MA(a,1,b)|0;if((d|0)==0){e=999;return e|0}b=c[d+16>>2]|0;c[a+184>>2]=c[b+4>>2];c[a+172>>2]=c[b+12>>2];c[a+176>>2]=c[b>>2];c[a+180>>2]=c[b+16>>2];e=300;return e|0}function IA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;e=b|0;Wx(e,95216,272,1)|0;f=b+8|0;g=a;c[(c[f>>2]|0)+136>>2]=g;if((Ix(e)|0)!=(b|0)){c[(c[(Ix(e)|0)+8>>2]|0)+136>>2]=g}g=ew(e,144120)|0;h=a+172|0;do{if((g|0)==0){j=c[h>>2]|0}else{c[h>>2]=0;k=MA(a,1,g)|0;if((k|0)!=0){l=c[k+16>>2]|0;c[a+184>>2]=c[l+4>>2];k=c[l+12>>2]|0;c[h>>2]=k;c[a+176>>2]=c[l>>2];c[a+180>>2]=c[l+16>>2];j=k;break}k=NA(a,1,g)|0;Fv(1,120552,(l=i,i=i+16|0,c[l>>2]=g,c[l+8>>2]=k,l)|0)|0;i=l;m=-1;i=d;return m|0}}while(0);if((j|0)==0){m=-1;i=d;return m|0}Zh(1);Pj(b,c[c[a+180>>2]>>2]&1);a=c[(c[f>>2]|0)+8>>2]|0;c[(c[(Ix(e)|0)+8>>2]|0)+8>>2]=a;a=c[j>>2]|0;do{if((a|0)!=0){Cc[a&255](b);e=c[j+4>>2]|0;if((e|0)==0){break}c[(c[f>>2]|0)+140>>2]=e}}while(0);Zh(0);m=0;i=d;return m|0}function JA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((Wx(b|0,95216,0,1)|0)==0){return 0}a=b+8|0;d=c[a>>2]|0;e=c[d+140>>2]|0;if((e|0)==0){f=d}else{Cc[e&255](b);c[(c[a>>2]|0)+140>>2]=0;f=c[a>>2]|0}if((c[f+8>>2]|0)==0){return 0}Sj(b);return 0}function KA(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;i=i+128|0;j=e;e=i;i=i+32|0;tF(e,j,32)|0;j=h|0;k=j|0;zF(k|0,c[d+28>>2]|0)|0;l=j+(xF(k|0)|0)|0;z=58;a[l]=z;z=z>>8;a[l+1|0]=z;AF(k|0,g|0)|0;g=MA(c[b>>2]|0,4,k)|0;if((g|0)==0){Fv(0,142448,(l=i,i=i+8|0,c[l>>2]=k,l)|0)|0;i=l;m=c[b+92>>2]|0}else{l=c[g+16>>2]|0;g=c[l+12>>2]|0;c[b+92>>2]=g;c[b+96>>2]=c[l>>2];m=g}if((m|0)==0){i=h;return}g=c[m>>2]|0;if((g|0)==0){i=h;return}Vc[g&63](b,d,e,f);i=h;return}function LA(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;j=i;i=i+128|0;k=j+64|0;l=j|0;DF(l|0,e|0,63)|0;m=gb(l|0,58)|0;if((m|0)!=0){a[m]=0}m=b+60+(d<<2)|0;d=c[m>>2]|0;a:do{if((d|0)==0){n=m}else{b=k|0;o=m;p=d;while(1){DF(b|0,c[p+4>>2]|0,63)|0;q=gb(b|0,58)|0;if((q|0)!=0){a[q]=0}q=(Ya(l|0,b|0)|0)<1;r=c[o>>2]|0;if(q){break}q=r|0;s=c[q>>2]|0;if((s|0)==0){n=q;break a}else{o=q;p=s}}if((r|0)==0){n=o;break}p=k|0;b=o;s=r;while(1){DF(p|0,c[s+4>>2]|0,63)|0;q=gb(p|0,58)|0;if((q|0)!=0){a[q]=0}if((Ya(l|0,p|0)|0)!=0){n=b;break a}q=c[b>>2]|0;t=q|0;if((c[q+8>>2]|0)<=(f|0)){n=b;break a}q=c[t>>2]|0;if((q|0)==0){n=t;break}else{b=t;s=q}}}}while(0);l=kk(20)|0;c[l>>2]=c[n>>2];c[n>>2]=l;c[l+4>>2]=e;c[l+8>>2]=f;c[l+12>>2]=g;c[l+16>>2]=h;i=j;return 1}function MA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;f=i;i=i+128|0;g=f+64|0;h=(d-3|0)>>>0<2>>>0?0:d;j=f|0;DF(j|0,e|0,63)|0;e=gb(j|0,58)|0;do{if((e|0)==0){k=0;l=0}else{m=e+1|0;a[e]=0;n=gb(m|0,58)|0;if((n|0)==0){k=0;l=m;break}a[n]=0;k=n+1|0;l=m}}while(0);e=b+60+(d<<2)|0;m=c[e>>2]|0;if((m|0)==0){p=0;q=b+80+(d<<2)|0;c[q>>2]=p;i=f;return p|0}n=g|0;g=(k|0)==0;r=(h|0)==(d|0);a:do{if((l|0)==0){s=e;t=m;while(1){DF(n|0,c[t+4>>2]|0,63)|0;u=gb(n|0,58)|0;if((u|0)==0){v=0}else{a[u]=0;v=u+1|0}do{if((Ya(n|0,j|0)|0)==0){u=(v|0)==0;if(!g){if((Ya(k|0,c[(c[(c[s>>2]|0)+12>>2]|0)+8>>2]|0)|0)!=0){break}}if(u|r){w=s;break a}if((MA(b,h,v)|0)!=0){w=s;break a}}}while(0);u=c[s>>2]|0;x=c[u>>2]|0;if((x|0)==0){p=0;break}else{s=u;t=x}}q=b+80+(d<<2)|0;c[q>>2]=p;i=f;return p|0}else{if(g){t=e;s=m;while(1){DF(n|0,c[s+4>>2]|0,63)|0;x=gb(n|0,58)|0;if((x|0)==0){y=0}else{a[x]=0;y=x+1|0}do{if((Ya(n|0,j|0)|0)==0){x=(y|0)==0;if(x){w=t;break a}if((Ya(y|0,l|0)|0)!=0){break}if(x|r){w=t;break a}if((MA(b,h,y)|0)!=0){w=t;break a}}}while(0);x=c[t>>2]|0;u=c[x>>2]|0;if((u|0)==0){p=0;break}else{t=x;s=u}}q=b+80+(d<<2)|0;c[q>>2]=p;i=f;return p|0}else{z=e;A=m}while(1){DF(n|0,c[A+4>>2]|0,63)|0;s=gb(n|0,58)|0;if((s|0)==0){B=0}else{a[s]=0;B=s+1|0}do{if((Ya(n|0,j|0)|0)==0){s=(B|0)==0;if(!s){if((Ya(B|0,l|0)|0)!=0){break}}if((Ya(k|0,c[(c[(c[z>>2]|0)+12>>2]|0)+8>>2]|0)|0)!=0){break}if(s|r){w=z;break a}if((MA(b,h,B)|0)!=0){w=z;break a}}}while(0);s=c[z>>2]|0;t=c[s>>2]|0;if((t|0)==0){p=0;break}else{z=s;A=t}}q=b+80+(d<<2)|0;c[q>>2]=p;i=f;return p|0}}while(0);A=c[w>>2]|0;if((A|0)==0){p=0;q=b+80+(d<<2)|0;c[q>>2]=p;i=f;return p|0}w=A+16|0;z=c[w>>2]|0;if((z|0)==0){Fv(1,91016,(C=i,i=i+1|0,i=i+7&-8,c[C>>2]=0,C)|0)|0;i=C;D=c[w>>2]|0}else{D=z}z=(D|0)==0?0:A;if((z|0)==0){p=0;q=b+80+(d<<2)|0;c[q>>2]=p;i=f;return p|0}if((c[b+8>>2]|0)<=0){p=z;q=b+80+(d<<2)|0;c[q>>2]=p;i=f;return p|0}A=c[z+4>>2]|0;D=c[(c[z+12>>2]|0)+8>>2]|0;gc(c[o>>2]|0,112008,(C=i,i=i+24|0,c[C>>2]=c[74600+(d<<2)>>2],c[C+8>>2]=A,c[C+16>>2]=D,C)|0)|0;i=C;p=z;q=b+80+(d<<2)|0;c[q>>2]=p;i=f;return p|0}function NA(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if((e|0)==0){f=0;return f|0}if(!(a[23360]|0)){Iv(178896,0,0);a[23360]=1}g=Lb(e|0)|0;e=gb(g|0,58)|0;do{if((e|0)==0){eF(g);h=1;i=b+60+(d<<2)|0;j=19}else{a[e]=0;k=b+60+(d<<2)|0;l=c[k>>2]|0;if((l|0)==0){eF(g);h=1;i=k;j=19;break}else{m=k;n=1;o=l}while(1){l=Lb(c[o+4>>2]|0)|0;p=gb(l|0,58)|0;if((p|0)!=0){a[p]=0}if((a[g]|0)==0){j=12}else{if((pm(g,l)|0)==0){j=12}else{q=n}}if((j|0)==12){j=0;p=c[44725]|0;if(p>>>0<(c[44726]|0)>>>0){r=p}else{Jv(178896,1)|0;r=c[44725]|0}c[44725]=r+1;a[r]=32;Lv(178896,c[(c[m>>2]|0)+4>>2]|0)|0;p=c[44725]|0;if(p>>>0<(c[44726]|0)>>>0){s=p}else{Jv(178896,1)|0;s=c[44725]|0}c[44725]=s+1;a[s]=58;Lv(178896,c[(c[(c[m>>2]|0)+12>>2]|0)+8>>2]|0)|0;q=0}eF(l);l=c[m>>2]|0;p=c[l>>2]|0;if((p|0)==0){break}else{m=l;n=q;o=p}}eF(g);if(q<<24>>24!=0){h=q;i=k;j=19}}}while(0);do{if((j|0)==19){q=c[i>>2]|0;if((q|0)==0){t=h}else{g=i;o=0;n=h;m=q;while(1){q=Lb(c[m+4>>2]|0)|0;s=gb(q|0,58)|0;if((s|0)!=0){a[s]=0}if((o|0)==0){j=24}else{if((pm(o,q)|0)==0){u=n}else{j=24}}if((j|0)==24){j=0;s=c[44725]|0;if(s>>>0<(c[44726]|0)>>>0){v=s}else{Jv(178896,1)|0;v=c[44725]|0}c[44725]=v+1;a[v]=32;Lv(178896,q)|0;u=0}s=c[g>>2]|0;r=c[s>>2]|0;if((r|0)==0){t=u;break}else{g=s;o=q;n=u;m=r}}}if(t<<24>>24==0){break}else{f=213392}return f|0}}while(0);t=c[44725]|0;if(t>>>0<(c[44726]|0)>>>0){w=t}else{Jv(178896,1)|0;w=c[44725]|0}a[w]=0;w=c[44724]|0;c[44725]=w;f=w;return f|0}function OA(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[a>>2]|0;MA(d,3,b)|0;b=c[d+92>>2]|0;if((b|0)==0){e=999;return e|0}f=c[b+16>>2]|0;g=c[f+12>>2]|0;c[a+76>>2]=g;h=c[f+16>>2]|0;c[a+84>>2]=h;i=c[f>>2]|0;c[a+80>>2]=i;c[a+88>>2]=c[b+4>>2];b=a+152|0;f=c[b>>2]|c[h>>2];c[b>>2]=f;h=c[d+80>>2]|0;if((h|0)==0){c[a+60>>2]=0;e=999;return e|0}d=c[h+16>>2]|0;c[a+60>>2]=c[d+12>>2];j=c[d+16>>2]|0;c[a+68>>2]=j;c[a+72>>2]=c[h+4>>2];c[b>>2]=f|c[j>>2];if((g|0)==0){c[a+64>>2]=i;e=300;return e|0}else{c[a+64>>2]=c[d>>2];e=300;return e|0}return 0}function PA(a){a=a|0;var b=0,d=0,e=0;b=c[a+60>>2]|0;do{if((Xz(a)|0)==0){if((b|0)==0){d=0;break}e=c[b>>2]|0;if((e|0)==0){d=0;break}Cc[e&255](a);d=0}else{d=1}}while(0);return d|0}function QA(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;do{if((b|0)!=0){d=c[b+4>>2]|0;if((d|0)==0){break}Cc[d&255](a)}}while(0);c[(c[a>>2]|0)+24>>2]=0;cA(a);return}function RA(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0;f=+h[a+504>>3];g=+h[a+512>>3];i=+h[a+352>>3];j=i*+h[a+520>>3];k=i*+h[a+528>>3];l=(e|0)>0;if((c[a+360>>2]|0)==0){if(l){m=0}else{return d|0}do{h[d+(m<<4)>>3]=j*(f+ +h[b+(m<<4)>>3]);h[d+(m<<4)+8>>3]=k*(g+ +h[b+(m<<4)+8>>3]);m=m+1|0;}while((m|0)<(e|0));return d|0}else{if(l){n=0}else{return d|0}do{i=-0.0-j*(g+ +h[b+(n<<4)+8>>3]);h[d+(n<<4)+8>>3]=k*(f+ +h[b+(n<<4)>>3]);h[d+(n<<4)>>3]=i;n=n+1|0;}while((n|0)<(e|0));return d|0}return 0}function SA(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+8>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function TA(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;do{if((b|0)!=0){d=c[b+12>>2]|0;if((d|0)==0){break}Cc[d&255](a)}}while(0);bA(a);return}function UA(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+24>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function VA(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+28>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function WA(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+16>>2]|0;if((d|0)==0){return}b=c[a+160>>2]|0;Vc[d&63](a,c[(c[(c[a>>2]|0)+308>>2]|0)+(b<<2)>>2]|0,b,c[a+156>>2]|0);return}function XA(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+20>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function YA(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+32>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function ZA(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+36>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function _A(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+40>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function $A(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+44>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function aB(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+48>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function bB(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+52>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function cB(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+56>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function dB(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+60>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function eB(a,b){a=a|0;b=b|0;var d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+64>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function fB(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+68>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function gB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+60>>2]|0;if((g|0)==0){return}h=c[g+72>>2]|0;if((h|0)==0){return}Bc[h&63](a,b,d,e,f);return}function hB(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+76>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function iB(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+60>>2]|0;if((d|0)==0){return}e=c[d+80>>2]|0;if((e|0)==0){return}Dc[e&63](a,b);return}function jB(a){a=a|0;var b=0,d=0;b=c[a+60>>2]|0;if((b|0)==0){return}d=c[b+84>>2]|0;if((d|0)==0){return}Cc[d&255](a);return}function kB(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0;g=i;i=i+16|0;j=e;e=i;i=i+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];j=g|0;l=c[b+60>>2]|0;m=c[f>>2]|0;if((m|0)==0){i=g;return}if((a[m]|0)==0){i=g;return}m=c[b+16>>2]|0;do{if((m|0)!=0){if((c[m+144>>2]|0)!=0){break}i=g;return}}while(0);if((c[b+152>>2]&8192|0)==0){m=e|0;n=(c[k>>2]=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24,c[k+4>>2]=d[m+4|0]|d[m+5|0]<<8|d[m+6|0]<<16|d[m+7|0]<<24,+h[k>>3]);m=e+8|0;o=(c[k>>2]=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24,c[k+4>>2]=d[m+4|0]|d[m+5|0]<<8|d[m+6|0]<<16|d[m+7|0]<<24,+h[k>>3]);p=+h[b+504>>3];q=+h[b+512>>3];r=+h[b+352>>3];if((c[b+360>>2]|0)==0){s=o+q;t=n+p}else{s=n+p;t=-0.0-(o+q)}q=r*+h[b+528>>3]*s;h[j>>3]=r*+h[b+520>>3]*t;h[j+8>>3]=q}else{m=j;u=e;c[m>>2]=c[u>>2];c[m+4>>2]=c[u+4>>2];c[m+8>>2]=c[u+8>>2];c[m+12>>2]=c[u+12>>2]}if((l|0)==0){i=g;return}u=c[l+88>>2]|0;if((u|0)==0){i=g;return}Tc[u&127](b,j,f);i=g;return}function lB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[b+60>>2]|0;f=(c[b+16>>2]|0)+16|0;g=gb(d|0,58)|0;h=(g|0)!=0;if(h){a[g]=0}do{if((e|0)!=0){mB(c[b+68>>2]|0,d,f);i=c[e+92>>2]|0;if((i|0)==0){break}Dc[i&63](b,f)}}while(0);if(!h){return}a[g]=58;return}function mB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+8|0;f=e|0;c[d>>2]=b;c[d+32>>2]=5;c[f>>2]=zh(b)|0;g=c[a+16>>2]|0;do{if((g|0)!=0){if((vb(f|0,g|0,c[a+20>>2]|0,4,22)|0)==0){break}i=e;return}}while(0);g=Ah(b,d,c[a+24>>2]|0)|0;if((g|0)==0){i=e;return}else if((g|0)==1){g=kk((xF(b|0)|0)+16|0)|0;nb(g|0,149e3,(h=i,i=i+8|0,c[h>>2]=b,h)|0)|0;i=h;if((Sh(g)|0)!=0){Fv(0,145840,(h=i,i=i+8|0,c[h>>2]=b,h)|0)|0;i=h}eF(g);i=e;return}else{Fv(1,142848,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0)|0;i=h;i=e;return}}function nB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=c[b+60>>2]|0;f=(c[b+16>>2]|0)+56|0;g=gb(d|0,58)|0;h=(g|0)!=0;if(h){a[g]=0}do{if((e|0)!=0){mB(c[b+68>>2]|0,d,f);i=c[e+92>>2]|0;if((i|0)==0){break}Dc[i&63](b,f)}}while(0);if(!h){return}a[g]=58;return}function oB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0;f=c[a+60>>2]|0;h=a+16|0;i=(c[h>>2]|0)+96|0;do{if((f|0)!=0){mB(c[a+68>>2]|0,b,i);j=c[f+92>>2]|0;if((j|0)==0){break}Dc[j&63](a,i)}}while(0);c[(c[h>>2]|0)+136>>2]=d;g[(c[h>>2]|0)+140>>2]=e;return}function pB(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=i;f=c[b+60>>2]|0;g=c[b+16>>2]|0;c[g+160>>2]=d;if((f|0)==0|(d|0)==0){i=e;return}f=c[d>>2]|0;if((f|0)==0){i=e;return}b=g+144|0;j=g+152|0;k=g+148|0;g=d;d=f;do{g=g+4|0;f=a[d]|0;l=f<<24>>24==115;a:do{if(l){if((Ya(d|0,164472)|0)!=0){m=20;break}c[b>>2]=3}else{do{if((f<<24>>24|0)==100){if((Ya(d|0,132280)|0)==0){c[b>>2]=1;break a}if((Ya(d|0,117240)|0)==0){c[b>>2]=2;break a}else{if((f<<24>>24|0)==105){m=14;break}else if((f<<24>>24|0)==98){break}else{m=20;break a}}}else if((f<<24>>24|0)==105){m=14}else if((f<<24>>24|0)!=98){m=20;break a}}while(0);b:do{if((m|0)==14){m=0;do{if((Ya(d|0,109680)|0)!=0){if((Ya(d|0,103848)|0)==0){break}if(f<<24>>24==98){break b}else{m=20;break a}}}while(0);c[b>>2]=0;break a}}while(0);if((Ya(d|0,98216)|0)!=0){m=20;break}h[j>>3]=2.0}}while(0);c:do{if((m|0)==20){m=0;do{if(l){if((Ya(d|0,92648)|0)==0){n=d;o=0}else{break}while(1){p=n+1|0;if(o){break}n=p;o=(a[p]|0)==0}h[j>>3]=+rF(p);break c}else{if((f<<24>>24|0)==116){if((Ya(d|0,168568)|0)==0){break c}else{break}}else if((f<<24>>24|0)==102){if((Ya(d|0,87288)|0)!=0){break}c[k>>2]=1;break c}else if((f<<24>>24|0)==117){if((Ya(d|0,82552)|0)!=0){break}c[k>>2]=0;break c}else{break}}}while(0);Fv(0,164352,(q=i,i=i+8|0,c[q>>2]=d,q)|0)|0;i=q}}while(0);d=c[g>>2]|0;}while((d|0)!=0);i=e;return}function qB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;d=i;i=i+32|0;f=d|0;g=c[a+60>>2]|0;if((g|0)==0){i=d;return}j=g+96|0;if((c[j>>2]|0)==0){i=d;return}if((c[(c[a+16>>2]|0)+144>>2]|0)==0){i=d;return}g=b+16|0;k=(+h[b>>3]+ +h[g>>3])*.5;l=f|0;m=f|0;h[m>>3]=k;n=(+h[b+8>>3]+ +h[b+24>>3])*.5;b=f+8|0;h[b>>3]=n;o=f+16|0;p=g;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];do{if((c[a+152>>2]&8192|0)==0){q=+h[a+504>>3];r=+h[a+512>>3];s=+h[a+352>>3];t=s*+h[a+520>>3];u=s*+h[a+528>>3];if((c[a+360>>2]|0)==0){h[m>>3]=t*(q+k);h[b>>3]=u*(r+n);p=f+16|0;h[p>>3]=t*(q+ +h[p>>3]);p=f+24|0;h[p>>3]=u*(r+ +h[p>>3]);break}else{h[b>>3]=u*(q+k);h[m>>3]=-0.0-t*(r+n);p=f+24|0;s=-0.0-t*(r+ +h[p>>3]);o=f+16|0;h[p>>3]=u*(q+ +h[o>>3]);h[o>>3]=s;break}}}while(0);Tc[c[j>>2]&127](a,l,e);i=d;return}function rB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0;f=i;i=i+40|0;g=f|0;j=c[a+60>>2]|0;if((j|0)==0){i=f;return}k=j+100|0;if((c[k>>2]|0)==0){i=f;return}j=a+16|0;l=c[j>>2]|0;if((c[l+144>>2]|0)==0){i=f;return}if((e&4|0)==0){m=e;n=0}else{o=g;p=l+16|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];c[o+20>>2]=c[p+20>>2];c[o+24>>2]=c[p+24>>2];c[o+28>>2]=c[p+28>>2];c[o+32>>2]=c[p+32>>2];c[o+36>>2]=c[p+36>>2];o=l+56|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];c[p+16>>2]=c[o+16>>2];c[p+20>>2]=c[o+20>>2];c[p+24>>2]=c[o+24>>2];c[p+28>>2]=c[o+28>>2];c[p+32>>2]=c[o+32>>2];c[p+36>>2]=c[o+36>>2];m=e&-5;n=1}if((c[a+152>>2]&8192|0)==0){if((c[43760]|0)<(d|0)){e=d+10|0;c[43760]=e;o=mk(c[53856]|0,e<<4)|0;c[53856]=o;q=o}else{q=c[53856]|0}r=+h[a+504>>3];s=+h[a+512>>3];t=+h[a+352>>3];u=t*+h[a+520>>3];v=t*+h[a+528>>3];o=(d|0)>0;do{if((c[a+360>>2]|0)==0){if(o){w=0}else{break}do{h[q+(w<<4)>>3]=u*(r+ +h[b+(w<<4)>>3]);h[q+(w<<4)+8>>3]=v*(s+ +h[b+(w<<4)+8>>3]);w=w+1|0;}while((w|0)<(d|0))}else{if(o){x=0}else{break}do{t=-0.0-u*(s+ +h[b+(x<<4)+8>>3]);h[q+(x<<4)+8>>3]=v*(r+ +h[b+(x<<4)>>3]);h[q+(x<<4)>>3]=t;x=x+1|0;}while((x|0)<(d|0))}}while(0);Vc[c[k>>2]&63](a,q,d,m)}else{Vc[c[k>>2]&63](a,b,d,m)}if((n|0)==0){i=f;return}n=(c[j>>2]|0)+16|0;j=g;c[n>>2]=c[j>>2];c[n+4>>2]=c[j+4>>2];c[n+8>>2]=c[j+8>>2];c[n+12>>2]=c[j+12>>2];c[n+16>>2]=c[j+16>>2];c[n+20>>2]=c[j+20>>2];c[n+24>>2]=c[j+24>>2];c[n+28>>2]=c[j+28>>2];c[n+32>>2]=c[j+32>>2];c[n+36>>2]=c[j+36>>2];i=f;return}function sB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0;e=i;i=i+64|0;f=b;b=i;i=i+32|0;tF(b,f,32)|0;f=e|0;g=f;j=b;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];j=f+32|0;g=j;k=b+16|0;c[g>>2]=c[k>>2];c[g+4>>2]=c[k+4>>2];c[g+8>>2]=c[k+8>>2];c[g+12>>2]=c[k+12>>2];h[f+16>>3]=+h[f>>3];h[f+24>>3]=+h[f+40>>3];h[f+48>>3]=+h[j>>3];h[f+56>>3]=+h[f+8>>3];rB(a,f|0,4,d);i=e;return}function tB(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0;i=c[a+60>>2]|0;if((i|0)==0){return}j=i+104|0;i=c[j>>2]|0;if((i|0)==0){return}if((c[(c[a+16>>2]|0)+144>>2]|0)==0){return}if((c[a+152>>2]&8192|0)!=0){Ic[i&15](a,b,d,e,f,g&255);return}if((c[43760]|0)<(d|0)){i=d+10|0;c[43760]=i;k=mk(c[53856]|0,i<<4)|0;c[53856]=k;l=k}else{l=c[53856]|0}m=+h[a+504>>3];n=+h[a+512>>3];o=+h[a+352>>3];p=o*+h[a+520>>3];q=o*+h[a+528>>3];k=(d|0)>0;do{if((c[a+360>>2]|0)==0){if(k){r=0}else{break}do{h[l+(r<<4)>>3]=p*(m+ +h[b+(r<<4)>>3]);h[l+(r<<4)+8>>3]=q*(n+ +h[b+(r<<4)+8>>3]);r=r+1|0;}while((r|0)<(d|0))}else{if(k){s=0}else{break}do{o=-0.0-p*(n+ +h[b+(s<<4)+8>>3]);h[l+(s<<4)+8>>3]=q*(m+ +h[b+(s<<4)>>3]);h[l+(s<<4)>>3]=o;s=s+1|0;}while((s|0)<(d|0))}}while(0);Ic[c[j>>2]&15](a,l,d,e,f,g&255);return}function uB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0;e=c[a+60>>2]|0;if((e|0)==0){return}f=e+108|0;e=c[f>>2]|0;if((e|0)==0){return}if((c[(c[a+16>>2]|0)+144>>2]|0)==0){return}if((c[a+152>>2]&8192|0)!=0){Tc[e&127](a,b,d);return}if((c[43760]|0)<(d|0)){e=d+10|0;c[43760]=e;g=mk(c[53856]|0,e<<4)|0;c[53856]=g;i=g}else{i=c[53856]|0}j=+h[a+504>>3];k=+h[a+512>>3];l=+h[a+352>>3];m=l*+h[a+520>>3];n=l*+h[a+528>>3];g=(d|0)>0;do{if((c[a+360>>2]|0)==0){if(g){o=0}else{break}do{h[i+(o<<4)>>3]=m*(j+ +h[b+(o<<4)>>3]);h[i+(o<<4)+8>>3]=n*(k+ +h[b+(o<<4)+8>>3]);o=o+1|0;}while((o|0)<(d|0))}else{if(g){p=0}else{break}do{l=-0.0-m*(k+ +h[b+(p<<4)+8>>3]);h[i+(p<<4)+8>>3]=n*(j+ +h[b+(p<<4)>>3]);h[i+(p<<4)>>3]=l;p=p+1|0;}while((p|0)<(d|0))}}while(0);Tc[c[f>>2]&127](a,i,d);return}function vB(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+60>>2]|0;if((d|0)==0){return}if((a[d]|0)==0|(e|0)==0){return}f=c[e+112>>2]|0;if((f|0)==0){return}Dc[f&63](b,d);return}function wB(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0;k=i;i=i+40|0;l=k|0;m=k+32|0;n=c[b+60>>2]|0;o=BB(d)|0;if((o|0)==0){if((ul(d)|0)==0|(n|0)==0){i=k;return}p=c[n+116>>2]|0;if((p|0)==0){i=k;return}Bc[p&63](b,d,e,f,g&255);i=k;return}EB(m,o,b+432|0);d=c[m>>2]|0;p=c[m+4>>2]|0;if((d|0)<1&(p|0)<1){i=k;return}m=l+16|0;q=m;r=e;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];q=l;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];if((f|0)>1){r=l|0;q=l+8|0;s=m|0;t=l+24|0;u=1;v=+h[r>>3];w=+h[q>>3];x=+h[s>>3];y=+h[t>>3];do{z=+h[e+(u<<4)>>3];v=v<z?v:z;A=+h[e+(u<<4)+8>>3];w=w<A?w:A;x=x>z?x:z;y=y>A?y:A;u=u+1|0;}while((u|0)<(f|0));h[r>>3]=v;h[q>>3]=w;h[s>>3]=x;h[t>>3]=y;B=x;C=v;D=y;E=w}else{B=+h[m>>3];C=+h[l>>3];D=+h[l+24>>3];E=+h[l+8>>3]}t=m|0;m=l|0;w=B-C;s=l+24|0;q=l+8|0;C=D-E;E=+(p|0);D=+(d|0);B=w/D;y=C/E;do{if((a[j]|0)==0){F=D;G=E}else{if((pm(j,160408)|0)==0){F=D*B;G=E;break}if((pm(j,155480)|0)==0){F=D;G=E*y;break}if((pm(j,151816)|0)==0){F=D*B;G=E*y;break}if((Km(j)|0)<<24>>24==0){F=D;G=E;break}if(B<y){F=D*B;G=E*B;break}else{F=D*y;G=E*y;break}}}while(0);if(F<w){y=(w-F)*.5;h[m>>3]=y+ +h[m>>3];h[t>>3]=+h[t>>3]-y}if(G<C){y=(C-G)*.5;h[q>>3]=y+ +h[q>>3];h[s>>3]=+h[s>>3]-y}y=+h[m>>3];if((c[b+152>>2]&8192|0)==0){G=+h[q>>3];C=+h[b+504>>3];F=+h[b+512>>3];w=+h[b+352>>3];E=w*+h[b+520>>3];D=w*+h[b+528>>3];j=(c[b+360>>2]|0)==0;if(j){H=G+F;I=y+C}else{H=y+C;I=-0.0-(G+F)}G=E*I;h[m>>3]=G;h[q>>3]=D*H;d=l+16|0;H=+h[d>>3];I=+h[s>>3];if(j){J=I+F;K=H+C}else{J=H+C;K=-0.0-(I+F)}F=E*K;h[d>>3]=F;h[s>>3]=D*J;L=G;M=F}else{L=y;M=+h[t>>3]}if(L>M){h[m>>3]=M;h[t>>3]=L}L=+h[q>>3];M=+h[s>>3];if(L>M){h[q>>3]=M;h[s>>3]=L}if((n|0)==0){i=k;return}KA(b,o,l,g,c[b+72>>2]|0);i=k;return}function xB(a,b){a=a|0;b=+b;if((c[a+60>>2]|0)==0){return}h[(c[a+16>>2]|0)+152>>3]=b;return}function yB(a,b){a=a|0;b=b|0;return Ya(c[a>>2]|0,c[b>>2]|0)|0}function zB(a){a=a|0;var b=0,d=0;b=MA(a,2,155360)|0;if((b|0)==0){d=999;return d|0}c[a+148>>2]=c[(c[b+16>>2]|0)+12>>2];d=300;return d|0}function AB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a+148>>2]|0;if((e|0)==0){f=0;return f|0}a=c[e>>2]|0;if((a|0)==0){f=0;return f|0}f=Oc[a&255](b,d)|0;return f|0}function BB(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;i=i+64|0;d=b|0;e=c[53676]|0;if((e|0)==0){f=0;i=b;return f|0}c[d+8>>2]=a;f=Hc[c[e>>2]&63](e,d,4)|0;i=b;return f|0}function CB(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;if((b|0)==0){cc(153800,163008,590,170512);return 0}e=c[b+8>>2]|0;if((e|0)==0){cc(131336,163008,591,170512);return 0}f=b+20|0;g=c[f>>2]|0;if((g|0)!=0){mc(g|0,0,0)|0;h=1;i=d;return h|0}g=Sm(e)|0;if((g|0)==0){h=1;i=d;return h|0}e=Eb(g|0,116680)|0;c[f>>2]=e;if((e|0)==0){e=Wb(c[(Vb()|0)>>2]|0)|0;Fv(0,109336,(f=i,i=i+16|0,c[f>>2]=e,c[f+8>>2]=g,f)|0)|0;i=f;h=0;i=d;return h|0}f=c[44710]|0;if((f|0)>49){a[b+17|0]=1;h=1;i=d;return h|0}else{c[44710]=f+1;h=1;i=d;return h|0}return 0}function DB(b){b=b|0;var d=0;if((a[b+17|0]|0)==0){return}d=b+20|0;b=c[d>>2]|0;if((b|0)==0){return}Ha(b|0)|0;c[d>>2]=0;return}function EB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0.0;e=i;f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];if((b|0)==0){g=-1;j=-1}else{f=c[b+48>>2]|0;if((f|0)==0){k=+h[d>>3];l=+h[d+8>>3]}else{m=+(f|0);h[d+8>>3]=m;h[d>>3]=m;k=m;l=m}g=~~(+((c[b+40>>2]|0)*72|0|0)/k);j=~~(+((c[b+44>>2]|0)*72|0|0)/l)}c[a>>2]=g;c[a+4>>2]=j;i=e;return}function FB(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0.0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ia=0.0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0,Sa=0.0,Ta=0,Va=0,Wa=0,Xa=0,Za=0,_a=0,$a=0,bb=0,cb=0,eb=0,fb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0.0;g=i;i=i+2488|0;j=g|0;k=g+8|0;l=g+16|0;m=g+24|0;n=g+32|0;o=g+1056|0;p=g+1064|0;q=g+1072|0;r=g+1080|0;s=g+1088|0;t=g+1096|0;u=g+1112|0;v=g+1144|0;w=g+2168|0;x=g+2176|0;y=g+2184|0;z=g+2192|0;A=g+2200|0;B=g+2224|0;C=g+2424|0;do{if((f|0)!=0){if((a[f]|0)==0){break}do{if((c[53686]|0)==0){D=c[53702]|0;if((c[44708]|0)==(D|0)){break}c[44708]=D;D=c[53676]|0;if((D|0)==0){break}Vg(D)|0;c[53676]=0}}while(0);E=+h[(c[(c[e+8>>2]|0)+8>>2]|0)+24>>3];F=E<1.0?96.0:E;D=c[53676]|0;if((D|0)==0){G=$g(173112,c[43326]|0)|0;c[53676]=G;if((G|0)==0){H=12}else{I=G;J=C;H=11}}else{I=D;J=C;H=11}if((H|0)==11){c[C+8>>2]=f;D=Hc[c[I>>2]&63](I,J,4)|0;if((D|0)==0){H=12}else{K=D;H=191}}a:do{if((H|0)==12){D=jk(64)|0;G=D;if((D|0)==0){L=-1;M=-1;break}N=D+8|0;c[N>>2]=f;if((CB(G)|0)<<24>>24==0){L=-1;M=-1;break}O=A|0;P=B|0;Q=D+20|0;R=c[Q>>2]|0;b:do{if((R|0)==0){H=25}else{if((Nb(O|0,1,20,R|0)|0)==20){S=0}else{H=25;break}while(1){T=S+1|0;if((wF(O|0,c[20792+(S<<4)>>2]|0,c[20796+(S<<4)>>2]|0)|0)==0){break}if(T>>>0<10>>>0){S=T}else{H=25;break b}}T=D+28|0;c[T>>2]=c[20804+(S<<4)>>2];U=c[20800+(S<<4)>>2]|0;V=D+24|0;c[V>>2]=U;do{if((S|0)==8){if((wF(A+8|0,121160,4)|0)!=0){W=U;H=26;break}c[T>>2]=120288;c[V>>2]=11;H=90}else if((S|0)==7){while(1){if((db(P|0,200,c[Q>>2]|0)|0)==0){H=24;break}if((wF(P|0,124064,4)|0)==0){H=21;break}}if((H|0)==21){c[T>>2]=121952;c[V>>2]=8;H=105;break}else if((H|0)==24){W=c[V>>2]|0;H=26;break}}else{W=U;H=26}}while(0);c:do{if((H|0)==26){switch(W|0){case 1:{c[D+48>>2]=0;mc(c[Q>>2]|0,16,0)|0;U=c[Q>>2]|0;V=0;T=0;do{X=ab(U|0)|0;if((bc(U|0)|0)!=0){break c}T=X<<(V<<3)|T;V=V+1|0;}while(V>>>0<2>>>0);V=c[Q>>2]|0;U=0;X=0;do{Y=ab(V|0)|0;if((bc(V|0)|0)!=0){break c}X=Y<<(U<<3)|X;U=U+1|0;}while(U>>>0<2>>>0);U=c[Q>>2]|0;V=0;Y=0;do{Z=ab(U|0)|0;if((bc(U|0)|0)!=0){break c}Y=Z<<(V<<3)|Y;V=V+1|0;}while(V>>>0<2>>>0);V=c[Q>>2]|0;U=0;Z=0;do{_=ab(V|0)|0;if((bc(V|0)|0)!=0){break c}Z=_<<(U<<3)|Z;U=U+1|0;}while(U>>>0<2>>>0);c[D+40>>2]=X|T<<16;c[D+44>>2]=Z|Y<<16;break c;break};case 5:{c[D+48>>2]=0;mc(c[Q>>2]|0,0,0)|0;U=c[Q>>2]|0;V=n|0;do{if((db(V|0,1024,U|0)|0)==0){break c}$=Ua(V|0,97936)|0;}while(($|0)==0);Y=v|0;Z=$+9|0;while(1){T=a[Z]|0;if(T<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){aa=Z;break}X=a[V]|0;if(X<<24>>24==0){aa=V;break}else{ba=X;ca=V}}else{ba=T;ca=Z}if((Qa(ba&255|0)|0)==0){aa=ca;break}else{Z=ca+1|0}}Z=a[aa]|0;if(Z<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){break c}da=d[V]|0;ea=V}else{da=Z<<24>>24;ea=aa}if((da|0)==91){fa=ea}else{break c}while(1){Z=fa+1|0;T=a[Z]|0;if(T<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){ga=0;ha=Z;break}X=a[V]|0;if(X<<24>>24==0){ga=0;ha=V;break}else{ia=X;ja=V}}else{ia=T;ja=Z}if((Qa(ia&255|0)|0)==0){ga=0;ha=ja;break}else{fa=ja}}while(1){Z=a[ha]|0;if(Z<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){ka=ga;la=ha;break}T=a[V]|0;if(T<<24>>24==0){ka=ga;la=V;break}else{ma=T;na=V}}else{ma=Z;na=ha}if(!(((ma<<24>>24)-48|0)>>>0<10>>>0|ma<<24>>24==46)){ka=ga;la=na;break}Z=ga+1|0;a[v+ga|0]=ma;T=na+1|0;if((Z|0)==1023){ka=1023;la=T;break}else{ga=Z;ha=T}}a[v+ka|0]=0;E=+sF(Y,m);if((c[m>>2]|0)==(Y|0)){break c}else{oa=la}while(1){T=a[oa]|0;if(T<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){pa=0;qa=oa;break}Z=a[V]|0;if(Z<<24>>24==0){pa=0;qa=V;break}else{ra=Z;sa=V}}else{ra=T;sa=oa}if((Qa(ra&255|0)|0)==0){pa=0;qa=sa;break}else{oa=sa+1|0}}while(1){T=a[qa]|0;if(T<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){ta=pa;ua=qa;break}Z=a[V]|0;if(Z<<24>>24==0){ta=pa;ua=V;break}else{va=Z;wa=V}}else{va=T;wa=qa}if(!(((va<<24>>24)-48|0)>>>0<10>>>0|va<<24>>24==46)){ta=pa;ua=wa;break}T=pa+1|0;a[v+pa|0]=va;Z=wa+1|0;if((T|0)==1023){ta=1023;ua=Z;break}else{pa=T;qa=Z}}a[v+ta|0]=0;xa=+sF(Y,l);if((c[l>>2]|0)==(Y|0)){break c}else{ya=ua}while(1){Z=a[ya]|0;if(Z<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){za=0;Aa=ya;break}T=a[V]|0;if(T<<24>>24==0){za=0;Aa=V;break}else{Ba=T;Ca=V}}else{Ba=Z;Ca=ya}if((Qa(Ba&255|0)|0)==0){za=0;Aa=Ca;break}else{ya=Ca+1|0}}while(1){Z=a[Aa]|0;if(Z<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){Da=za;Ea=Aa;break}T=a[V]|0;if(T<<24>>24==0){Da=za;Ea=V;break}else{Fa=T;Ga=V}}else{Fa=Z;Ga=Aa}if(!(((Fa<<24>>24)-48|0)>>>0<10>>>0|Fa<<24>>24==46)){Da=za;Ea=Ga;break}Z=za+1|0;a[v+za|0]=Fa;T=Ga+1|0;if((Z|0)==1023){Da=1023;Ea=T;break}else{za=Z;Aa=T}}a[v+Da|0]=0;Ia=+sF(Y,k);if((c[k>>2]|0)==(Y|0)){break c}else{Ja=Ea}while(1){T=a[Ja]|0;if(T<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){Ka=0;La=Ja;break}Z=a[V]|0;if(Z<<24>>24==0){Ka=0;La=V;break}else{Ma=Z;Na=V}}else{Ma=T;Na=Ja}if((Qa(Ma&255|0)|0)==0){Ka=0;La=Na;break}else{Ja=Na+1|0}}while(1){T=a[La]|0;if(T<<24>>24==0){if((db(V|0,1024,U|0)|0)==0){Oa=Ka;break}Z=a[V]|0;if(Z<<24>>24==0){Oa=Ka;break}else{Pa=Z;Ra=V}}else{Pa=T;Ra=La}if(!(((Pa<<24>>24)-48|0)>>>0<10>>>0|Pa<<24>>24==46)){Oa=Ka;break}T=Ka+1|0;a[v+Ka|0]=Pa;if((T|0)==1023){Oa=1023;break}Ka=T;La=Ra+1|0}a[v+Oa|0]=0;Sa=+sF(Y,j);if((c[j>>2]|0)==(Y|0)){break c}c[D+32>>2]=~~E;c[D+36>>2]=~~xa;c[D+40>>2]=~~(Ia-E);c[D+44>>2]=~~(Sa-xa);break c;break};case 3:{c[D+48>>2]=0;mc(c[Q>>2]|0,16,0)|0;V=c[Q>>2]|0;U=0;T=0;do{Z=ab(V|0)|0;if((bc(V|0)|0)!=0){break c}T=Z|T<<8;U=U+1|0;}while(U>>>0<4>>>0);U=c[Q>>2]|0;V=0;Y=0;do{Z=ab(U|0)|0;if((bc(U|0)|0)!=0){break c}Y=Z|Y<<8;V=V+1|0;}while(V>>>0<4>>>0);c[D+40>>2]=T;c[D+44>>2]=Y;break c;break};case 11:{H=90;break c;break};case 6:{V=v|0;c[D+48>>2]=0;mc(c[Q>>2]|0,0,0)|0;if((db(V|0,1024,c[Q>>2]|0)|0)==0){break c}while(1){U=Ua(V|0,129848)|0;if((U|0)!=0){Z=ac(U|0,126552,(Ta=i,i=i+32|0,c[Ta>>2]=w,c[Ta+8>>2]=x,c[Ta+16>>2]=y,c[Ta+24>>2]=z,Ta)|0)|0;i=Ta;if((Z|0)==4){break}}if((db(V|0,1024,c[Q>>2]|0)|0)==0){break c}}V=c[w>>2]|0;c[D+32>>2]=V;Y=c[x>>2]|0;c[D+36>>2]=Y;c[D+40>>2]=(c[y>>2]|0)-V;c[D+44>>2]=(c[z>>2]|0)-Y;break c;break};case 4:{c[D+48>>2]=0;Y=c[Q>>2]|0;V=ab(Y|0)|0;if((bc(Y|0)|0)==0){Va=V}else{break c}d:while(1){do{if((Va|0)!=255){if((gb(20952,Va|0)|0)!=0){break}if((Va|0)==192){break d}Wa=c[Q>>2]|0;if((Va|0)==194){Xa=0;H=73;break d}else{Za=0;_a=0}do{V=ab(Wa|0)|0;if((bc(Wa|0)|0)!=0){break c}_a=V|_a<<8;Za=Za+1|0;}while(Za>>>0<2>>>0);mc(c[Q>>2]|0,_a-2|0,1)|0}}while(0);V=c[Q>>2]|0;Va=ab(V|0)|0;if((bc(V|0)|0)!=0){break c}}if((H|0)==73){while(1){H=0;ab(Wa|0)|0;if((bc(Wa|0)|0)!=0){break c}V=Xa+1|0;if(V>>>0<3>>>0){Xa=V;H=73}else{break}}V=c[Q>>2]|0;Y=0;T=0;do{Z=ab(V|0)|0;if((bc(V|0)|0)!=0){break c}T=Z|T<<8;Y=Y+1|0;}while(Y>>>0<2>>>0);Y=c[Q>>2]|0;V=0;Z=0;do{U=ab(Y|0)|0;if((bc(Y|0)|0)!=0){break c}Z=U|Z<<8;V=V+1|0;}while(V>>>0<2>>>0);c[D+44>>2]=T;c[D+40>>2]=Z;break c}V=c[Q>>2]|0;Y=0;do{ab(V|0)|0;if((bc(V|0)|0)!=0){break c}Y=Y+1|0;}while(Y>>>0<3>>>0);Y=c[Q>>2]|0;V=0;Z=0;do{T=ab(Y|0)|0;if((bc(Y|0)|0)!=0){break c}Z=T|Z<<8;V=V+1|0;}while(V>>>0<2>>>0);V=c[Q>>2]|0;Y=0;T=0;do{U=ab(V|0)|0;if((bc(V|0)|0)!=0){break c}T=U|T<<8;Y=Y+1|0;}while(Y>>>0<2>>>0);c[D+44>>2]=Z;c[D+40>>2]=T;break c;break};case 0:{break b;break};case 8:{H=105;break c;break};case 2:{c[D+48>>2]=0;mc(c[Q>>2]|0,6,0)|0;Y=c[Q>>2]|0;V=0;U=0;do{X=ab(Y|0)|0;if((bc(Y|0)|0)!=0){break c}U=X<<(V<<3)|U;V=V+1|0;}while(V>>>0<2>>>0);V=c[Q>>2]|0;Y=0;T=0;do{Z=ab(V|0)|0;if((bc(V|0)|0)!=0){break c}T=Z<<(Y<<3)|T;Y=Y+1|0;}while(Y>>>0<2>>>0);c[D+40>>2]=U;c[D+44>>2]=T;break c;break};case 12:{c[D+48>>2]=0;mc(c[Q>>2]|0,6,0)|0;Y=c[Q>>2]|0;V=ab(Y|0)|0;if((bc(Y|0)|0)!=0){break c}Y=c[Q>>2]|0;Z=ab(Y|0)|0;if((bc(Y|0)|0)!=0){break c}c[D+40>>2]=V;c[D+44>>2]=Z;break c;break};default:{break c}}}}while(0);e:do{if((H|0)==90){c[D+48>>2]=0;mc(c[Q>>2]|0,15,0)|0;Z=(ab(c[Q>>2]|0)|0)==88;V=c[Q>>2]|0;if(Z){mc(V|0,24,0)|0;Z=c[Q>>2]|0;Y=0;X=0;do{_=ab(Z|0)|0;if((bc(Z|0)|0)!=0){break e}X=_<<(Y<<3)|X;Y=Y+1|0;}while(Y>>>0<4>>>0);Y=c[Q>>2]|0;Z=0;T=0;do{U=ab(Y|0)|0;if((bc(Y|0)|0)!=0){break e}T=U<<(Z<<3)|T;Z=Z+1|0;}while(Z>>>0<4>>>0);c[D+40>>2]=X;c[D+44>>2]=T;break}else{mc(V|0,26,0)|0;Z=c[Q>>2]|0;Y=0;U=0;do{_=ab(Z|0)|0;if((bc(Z|0)|0)!=0){break e}U=_<<(Y<<3)|U;Y=Y+1|0;}while(Y>>>0<2>>>0);Y=c[Q>>2]|0;Z=0;V=0;do{T=ab(Y|0)|0;if((bc(Y|0)|0)!=0){break e}V=T<<(Z<<3)|V;Z=Z+1|0;}while(Z>>>0<2>>>0);c[D+40>>2]=U;c[D+44>>2]=V;break}}else if((H|0)==105){Z=t|0;if((c[43816]|0)==0){if((LE(175160,132080,1)|0)!=0){Fv(1,92408,(Ta=i,i=i+8|0,c[Ta>>2]=132080,Ta)|0)|0;i=Ta}c[43816]=175160}mc(c[Q>>2]|0,0,0)|0;f:do{if((db(P|0,200,c[Q>>2]|0)|0)==0){$a=0;bb=0}else{Y=u|0;T=u+12|0;X=u+20|0;_=u+8|0;cb=u+16|0;eb=u+4|0;fb=0;hb=0;ib=0;jb=0;while(1){if(ib<<24>>24==0|jb<<24>>24==0){kb=jb;lb=ib;mb=P;nb=hb;ob=fb}else{$a=fb;bb=hb;break f}g:while(1){pb=kb;qb=lb;rb=mb;sb=nb;h:while(1){if((YE(175160,rb,4,Y,0)|0)==0){tb=rb}else{ub=pb;vb=qb;wb=sb;xb=ob;break g}while(1){a[tb+(c[T>>2]|0)|0]=0;a[tb+(c[X>>2]|0)|0]=0;yb=tb+(c[_>>2]|0)|0;zb=tb+(c[cb>>2]|0)|0;Ab=tb+((c[eb>>2]|0)+1)|0;if((Ya(yb|0,87080)|0)==0){break}if((Ya(yb|0,160280)|0)==0){break h}if((Ya(yb|0,155296)|0)==0){yb=ac(zb|0,151720,(Ta=i,i=i+32|0,c[Ta>>2]=p,c[Ta+8>>2]=q,c[Ta+16>>2]=r,c[Ta+24>>2]=s,Ta)|0)|0;i=Ta;if((yb|0)==4){H=129;break g}}if((YE(175160,Ab,4,Y,0)|0)==0){tb=Ab}else{ub=pb;vb=qb;wb=sb;xb=ob;break g}}yb=ac(zb|0,82328,(Ta=i,i=i+16|0,c[Ta>>2]=o,c[Ta+8>>2]=Z,Ta)|0)|0;i=Ta;do{if((yb|0)==2){Bb=1;Cb=GB(+h[o>>3],Z)|0}else{Db=ac(zb|0,168376,(Ta=i,i=i+8|0,c[Ta>>2]=o,Ta)|0)|0;i=Ta;if((Db|0)!=1){Bb=qb;Cb=sb;break}Bb=1;Cb=GB(+h[o>>3],164232)|0}}while(0);if(pb<<24>>24==0){pb=0;qb=Bb;rb=Ab;sb=Cb}else{ub=pb;vb=Bb;wb=Cb;xb=ob;break g}}rb=ac(zb|0,82328,(Ta=i,i=i+16|0,c[Ta>>2]=o,c[Ta+8>>2]=Z,Ta)|0)|0;i=Ta;do{if((rb|0)==2){Eb=1;Fb=GB(+h[o>>3],Z)|0}else{yb=ac(zb|0,168376,(Ta=i,i=i+8|0,c[Ta>>2]=o,Ta)|0)|0;i=Ta;if((yb|0)!=1){Eb=pb;Fb=ob;break}Eb=1;Fb=GB(+h[o>>3],164232)|0}}while(0);if(qb<<24>>24==0){kb=Eb;lb=0;mb=Ab;nb=sb;ob=Fb}else{ub=Eb;vb=qb;wb=sb;xb=Fb;break}}if((H|0)==129){H=0;ub=1;vb=1;wb=~~(+h[r>>3]- +h[p>>3]+1.0);xb=~~(+h[s>>3]- +h[q>>3]+1.0)}if((db(P|0,200,c[Q>>2]|0)|0)==0){$a=xb;bb=wb;break}else{fb=xb;hb=wb;ib=vb;jb=ub}}}}while(0);c[D+48>>2]=0;c[D+40>>2]=bb;c[D+44>>2]=$a;}}while(0);Z=c[53676]|0;Hc[c[Z>>2]&63](Z,D,1)|0;K=G;H=191;break a}}while(0);if((H|0)==25){c[D+28>>2]=119560;c[D+24>>2]=0;}G=ul(c[N>>2]|0)|0;c[D+52>>2]=G;if((G|0)==0){Fv(0,103432,(Ta=i,i=i+8|0,c[Ta>>2]=c[N>>2],Ta)|0)|0;i=Ta}eF(D);L=-1;M=-1}}while(0);i:do{if((H|0)==191){do{if((a[K+17|0]|0)==0){if((K|0)==0){L=-1;M=-1;break i}}else{G=K+20|0;Q=c[G>>2]|0;if((Q|0)==0){break}Ha(Q|0)|0;c[G>>2]=0}}while(0);D=c[K+48>>2]|0;if((D|0)==0){Gb=F}else{Gb=+(D|0)}L=~~(+((c[K+40>>2]|0)*72|0|0)/Gb);M=~~(+((c[K+44>>2]|0)*72|0|0)/Gb)}}while(0);c[b>>2]=L;c[b+4>>2]=M;i=g;return}}while(0);c[b>>2]=-1;c[b+4>>2]=-1;i=g;return}function GB(a,b){a=+a;b=b|0;var c=0.0,d=0.0,e=0,f=0.0,g=0.0,h=0.0,i=0.0,j=0.0;if((Ya(b|0,148872)|0)==0){c=a*72.0;if(c<0.0){d=c+-.5}else{d=c+.5}e=~~d;return e|0}if((Ya(b|0,145712)|0)==0){d=a*72.0/96.0;if(d<0.0){f=d+-.5}else{f=d+.5}e=~~f;return e|0}if((Ya(b|0,142696)|0)==0){f=a*72.0/6.0;if(f<0.0){g=f+-.5}else{g=f+.5}e=~~g;return e|0}do{if((Ya(b|0,164232)|0)!=0){if((Ya(b|0,139624)|0)==0){break}if((Ya(b|0,136976)|0)==0){g=a*28.346456664;if(g<0.0){h=g+-.5}else{h=g+.5}e=~~h;return e|0}if((Ya(b|0,134064)|0)!=0){e=0;return e|0}g=a*2.8346456663999997;if(g<0.0){i=g+-.5}else{i=g+.5}e=~~i;return e|0}}while(0);if(a<0.0){j=a+-.5}else{j=a+.5}e=~~j;return e|0}function HB(a,b,d){a=a|0;b=b|0;d=d|0;d=c[b+20>>2]|0;if((d|0)!=0){Ha(d|0)|0}if((c[b+52>>2]|0)==0){eF(b);return}d=c[b+60>>2]|0;if((d|0)==0){eF(b);return}Cc[d&255](b);eF(b);return}function IB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=dF(28)|0;e=d;if((d|0)==0){f=0;return f|0}g=(b|0)>0;do{if(g){h=0;i=0;do{h=(c[(c[a+(i<<2)>>2]|0)+4>>2]|0)+h|0;i=i+1|0;}while((i|0)<(b|0));i=h<<4;if((i|0)==0){j=0;k=h;break}j=dF(i)|0;k=h}else{j=0;k=0}}while(0);i=d+8|0;c[i>>2]=j;j=(b<<2)+4|0;if((j|0)==0){l=0}else{l=dF(j)|0}j=d+12|0;c[j>>2]=l;m=k<<2;if((m|0)==0){n=d+16|0;c[n>>2]=0;o=0;p=n}else{n=d+16|0;c[n>>2]=dF(m)|0;o=dF(m)|0;p=n}n=d+20|0;c[n>>2]=o;c[d+4>>2]=k;c[d>>2]=b;c[l>>2]=0;if(g){g=0;l=0;while(1){d=a+(l<<2)|0;k=c[d>>2]|0;o=c[k+4>>2]|0;m=g-1+o|0;if((o|0)>0){o=0;q=g;r=k;while(1){k=(c[i>>2]|0)+(q<<4)|0;s=(c[r>>2]|0)+(o<<4)|0;c[k>>2]=c[s>>2];c[k+4>>2]=c[s+4>>2];c[k+8>>2]=c[s+8>>2];c[k+12>>2]=c[s+12>>2];s=q+1|0;c[(c[p>>2]|0)+(q<<2)>>2]=s;c[(c[n>>2]|0)+(q<<2)>>2]=q-1;k=o+1|0;t=c[d>>2]|0;if((k|0)<(c[t+4>>2]|0)){o=k;q=s;r=t}else{u=s;break}}}else{u=g}c[(c[p>>2]|0)+(m<<2)>>2]=g;c[(c[n>>2]|0)+(g<<2)>>2]=m;r=l+1|0;c[(c[j>>2]|0)+(r<<2)>>2]=u;if((r|0)<(b|0)){g=u;l=r}else{break}}}aC(e);f=e;return f|0}function JB(a){a=a|0;var b=0,d=0,e=0;eF(c[a+8>>2]|0);eF(c[a+12>>2]|0);eF(c[a+16>>2]|0);eF(c[a+20>>2]|0);b=a+24|0;d=c[b>>2]|0;if((d|0)==0){e=a;eF(e);return}eF(c[d>>2]|0);eF(c[b>>2]|0);e=a;eF(e);return}function KB(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;h=i;j=b;b=i;i=i+16|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];j=e;e=i;i=i+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];j=bC(a,d,b)|0;k=bC(a,f,e)|0;l=WB(b,d,j,e,f,k,a)|0;f=c[a+4>>2]|0;d=f+1|0;m=f;n=1;while(1){o=c[l+(m<<2)>>2]|0;p=n+1|0;if((o|0)==(d|0)){break}else{m=o;n=p}}m=dF(p<<4)|0;o=m+(n<<4)|0;q=e;c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];q=c[l+(f<<2)>>2]|0;f=n-1|0;n=m+(f<<4)|0;if((q|0)==(d|0)){r=f;s=n}else{o=c[a+8>>2]|0;a=q;q=f;f=n;while(1){n=f;e=o+(a<<4)|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];e=c[l+(a<<2)>>2]|0;n=q-1|0;t=m+(n<<4)|0;if((e|0)==(d|0)){r=n;s=t;break}else{a=e;q=n;f=t}}}f=s;s=b;c[f>>2]=c[s>>2];c[f+4>>2]=c[s+4>>2];c[f+8>>2]=c[s+8>>2];c[f+12>>2]=c[s+12>>2];if((r|0)!=0){cc(113416,153568,148,171208);return 0}if((j|0)!=0){eF(j)}if((k|0)==0){u=g+4|0;c[u>>2]=p;v=g|0;c[v>>2]=m;w=l;eF(w);i=h;return 1}eF(k);u=g+4|0;c[u>>2]=p;v=g|0;c[v>>2]=m;w=l;eF(w);i=h;return 1}function LB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=a;a=i;i=i+8|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=c[a>>2]|0;f=c[a+4>>2]|0;a=f-1|0;if((f|0)>0){g=0}else{h=1;i=d;return h|0}while(1){j=g+1|0;if((_B(e+(((a+g|0)%(f|0)|0)<<4)|0,e+(g<<4)|0,b)|0)==1){h=0;k=4;break}if((j|0)<(f|0)){g=j}else{h=1;k=4;break}}if((k|0)==4){i=d;return h|0}return 0}function MB(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0;g=i;j=d;d=i;i=i+8|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];j=1;k=0;l=i;i=i+168|0;c[l>>2]=0;while(1)switch(j|0){case 1:m=c[d>>2]|0;n=c[d+4>>2]|0;o=BF(177752,j,l)|0;j=9;break;case 9:if((o|0)==0){j=2;break}else{p=-1;j=8;break};case 2:q=e|0;r=+h[q>>3];s=e+8|0;t=+h[s>>3];w=r*r+t*t;if(w>1.0e-6){j=3;break}else{x=r;y=t;j=4;break};case 3:z=+ta(2,w);if((u|0)!=0&(v|0)!=0){k=CF(c[u>>2]|0,l)|0;if((k|0)>0){j=-1;break}else return 0}u=v=0;x=r/z;y=t/z;j=4;break;case 4:h[q>>3]=x;h[s>>3]=y;A=e+16|0;B=+h[A>>3];C=e+24|0;D=+h[C>>3];E=B*B+D*D;if(E>1.0e-6){j=5;break}else{F=B;G=D;j=6;break};case 5:z=+ta(2,E);if((u|0)!=0&(v|0)!=0){k=CF(c[u>>2]|0,l)|0;if((k|0)>0){j=-1;break}else return 0}u=v=0;F=B/z;G=D/z;j=6;break;case 6:h[A>>3]=F;h[C>>3]=G;c[44262]=0;ka(168,4);if((u|0)!=0&(v|0)!=0){k=CF(c[u>>2]|0,l)|0;if((k|0)>0){j=-1;break}else return 0}u=v=0;H=c[44262]|0;c[44262]=H+1;I=(c[44256]|0)+(H<<4)|0;H=m;c[I>>2]=c[H>>2];c[I+4>>2]=c[H+4>>2];c[I+8>>2]=c[H+8>>2];c[I+12>>2]=c[H+12>>2];H=ra(2,a|0,b|0,m|0,n|0,+(+h[q>>3]),+(+h[s>>3]),+(+h[A>>3]),+(+h[C>>3]))|0;if((u|0)!=0&(v|0)!=0){k=CF(c[u>>2]|0,l)|0;if((k|0)>0){j=-1;break}else return 0}u=v=0;if((H|0)==-1){p=-1;j=8;break}else{j=7;break};case 7:c[f+4>>2]=c[44262];c[f>>2]=c[44256];p=0;j=8;break;case 8:i=g;return p|0;case-1:if((k|0)==1){o=v;j=9}u=v=0;break}return 0}function NB(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((c[44260]|0)>=(a|0)){i=b;return}d=c[44256]|0;do{if((d|0)==0){e=dF(a<<4)|0;c[44256]=e;if((e|0)!=0){break}gc(c[o>>2]|0,125472,(f=i,i=i+24|0,c[f>>2]=154064,c[f+8>>2]=531,c[f+16>>2]=123408,f)|0)|0;i=f;rc(177752,1)}else{e=gF(d,a<<4)|0;c[44256]=e;if((e|0)!=0){break}gc(c[o>>2]|0,125472,(f=i,i=i+24|0,c[f>>2]=154064,c[f+8>>2]=537,c[f+16>>2]=114304,f)|0)|0;i=f;rc(177752,1)}}while(0);c[44260]=a;i=b;return}function OB(a,b,d,e,f,g,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;j=+j;k=+k;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0,oa=0.0,pa=0,qa=0.0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0.0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0.0,Ua=0.0;l=i;i=i+112|0;m=l|0;n=l+32|0;o=l+56|0;p=l+80|0;q=c[43786]|0;if((c[43788]|0)<(e|0)){do{if((q|0)==0){r=dF(e*40|0)|0;s=r;c[43786]=s;if((r|0)==0){t=-1}else{u=s;break}i=l;return t|0}else{s=gF(q,e*40|0)|0;r=s;c[43786]=r;if((s|0)==0){t=-1}else{u=r;break}i=l;return t|0}}while(0);c[43788]=e;v=u}else{v=q}h[v>>3]=0.0;q=(e|0)>1;do{if(q){u=1;w=0.0;do{r=u-1|0;x=+h[d+(r<<4)>>3]- +h[d+(u<<4)>>3];y=+h[d+(r<<4)+8>>3]- +h[d+(u<<4)+8>>3];w=w+ +T(x*x+y*y);h[v+(u*40|0)>>3]=w;u=u+1|0;}while((u|0)<(e|0));if(!q){break}u=v+((e-1|0)*40|0)|0;r=1;do{s=v+(r*40|0)|0;h[s>>3]=+h[s>>3]/+h[u>>3];r=r+1|0;}while((r|0)<(e|0))}}while(0);r=(e|0)>0;a:do{if(r){u=0;do{w=+h[v+(u*40|0)>>3];y=1.0-w;x=w*3.0;z=y*x*y;h[v+(u*40|0)+8>>3]=z*f;h[v+(u*40|0)+16>>3]=z*g;z=y*w*x;h[v+(u*40|0)+24>>3]=z*j;h[v+(u*40|0)+32>>3]=z*k;u=u+1|0;}while((u|0)<(e|0));if(!r){A=0.0;B=0.0;C=0.0;D=0.0;E=0.0;break}z=+h[d>>3];x=+h[d+8>>3];u=e-1|0;w=+h[d+(u<<4)>>3];y=+h[d+(u<<4)+8>>3];F=0.0;G=0.0;H=0.0;I=0.0;J=0.0;u=0;K=z;L=x;while(1){M=+h[v+(u*40|0)+8>>3];N=+h[v+(u*40|0)+16>>3];O=H+(M*M+N*N);P=+h[v+(u*40|0)+24>>3];Q=+h[v+(u*40|0)+32>>3];R=I+(M*P+N*Q);S=J+(P*P+Q*Q);U=+h[v+(u*40|0)>>3];V=1.0-U;W=V*V*(V+U*3.0);X=U*U*(U+V*3.0);V=K-(z*W+w*X);U=L-(x*W+y*X);X=G+(M*V+N*U);N=F+(P*V+Q*U);s=u+1|0;if((s|0)>=(e|0)){A=N;B=X;C=O;D=R;E=S;break a}F=N;G=X;H=O;I=R;J=S;u=s;K=+h[d+(s<<4)>>3];L=+h[d+(s<<4)+8>>3]}}else{A=0.0;B=0.0;C=0.0;D=0.0;E=0.0}}while(0);L=E*C-D*D;v=L>=0.0;if(v){Y=L}else{Y=-0.0-L}if(Y<1.0e-6){Z=0.0;_=0.0}else{Z=(C*A-D*B)/L;_=(E*B-D*A)/L}if(v){$=L}else{$=-0.0-L}v=e-1|0;L=+h[d>>3];A=+h[d+8>>3];D=+h[d+(v<<4)>>3];B=+h[d+(v<<4)+8>>3];if($>=1.0e-6&_>0.0&Z>0.0){aa=Z;ba=_}else{_=D-L;Z=B-A;$=+T(_*_+Z*Z)/3.0;aa=$;ba=$}r=d|0;u=d+8|0;$=ba*f;Z=ba*g;ba=aa*j;_=aa*k;s=(e|0)==2;ca=(b|0)>0;da=m|0;ea=m+24|0;fa=m+16|0;ga=m+8|0;m=n|0;ha=o|0;aa=L*3.0;E=A*3.0;ia=1;C=4.0;Y=4.0;b:while(1){ja=L+$*Y/3.0;ka=A+Z*Y/3.0;la=D-ba*C/3.0;ma=B-_*C/3.0;if(ia){K=ja-L;J=ka-A;I=la-ja;H=ma-ka;G=D-la;F=B-ma;y=+T(K*K+J*J)+0.0+ +T(I*I+H*H)+ +T(G*G+F*F);if(q){na=1;F=0.0;G=+h[r>>3];H=+h[u>>3];while(1){I=+h[d+(na<<4)>>3];J=I-G;K=+h[d+(na<<4)+8>>3];x=K-H;oa=F+ +T(J*J+x*x);pa=na+1|0;if((pa|0)<(e|0)){na=pa;F=oa;G=I;H=K}else{break}}qa=oa+-.001}else{qa=-.001}if(y<qa){break}}if(!ca){ra=71;break}H=la*3.0;G=D+ja*3.0-(L+H);F=aa+H-ja*6.0;H=(ja-L)*3.0;K=ma*3.0;I=B+ka*3.0-(A+K);x=E+K-ka*6.0;K=(ka-A)*3.0;na=0;c:while(1){J=+h[a+(na<<5)>>3];w=+h[a+(na<<5)+8>>3];z=+h[a+(na<<5)+16>>3];S=+h[a+(na<<5)+24>>3];R=z-J;O=S-w;d:do{if(R==0.0){h[ea>>3]=G;h[fa>>3]=F;h[ga>>3]=H;h[da>>3]=L-J;pa=XB(da,m)|0;if(O!=0.0){if((pa|0)==4){sa=4;break}if((pa|0)>0){ta=0;ua=0}else{sa=0;break}while(1){X=+h[n+(ua<<3)>>3];do{if(X>=0.0&X<=1.0){h[ea>>3]=I;h[fa>>3]=x;h[ga>>3]=K;h[da>>3]=A;N=(A+X*(K+X*(x+I*X))-w)/O;if(!(N>=0.0&N<=1.0)){va=ta;break}h[p+(ta<<3)>>3]=X;va=ta+1|0}else{va=ta}}while(0);wa=ua+1|0;if((wa|0)<(pa|0)){ta=va;ua=wa}else{sa=va;break d}}}h[ea>>3]=I;h[fa>>3]=x;h[ga>>3]=K;h[da>>3]=A-w;wa=XB(da,ha)|0;xa=(wa|0)==4;if((pa|0)==4){if(xa){sa=4;break}if((wa|0)>0){ya=0;za=0}else{sa=0;break}while(1){X=+h[o+(za<<3)>>3];if(X>=0.0&X<=1.0){h[p+(ya<<3)>>3]=X;Aa=ya+1|0}else{Aa=ya}Ba=za+1|0;if((Ba|0)<(wa|0)){ya=Aa;za=Ba}else{sa=Aa;break d}}}Ba=(pa|0)>0;if(xa){if(Ba){Ca=0;Da=0}else{sa=0;break}while(1){X=+h[n+(Da<<3)>>3];if(X>=0.0&X<=1.0){h[p+(Ca<<3)>>3]=X;Ea=Ca+1|0}else{Ea=Ca}Fa=Da+1|0;if((Fa|0)<(pa|0)){Ca=Ea;Da=Fa}else{sa=Ea;break d}}}if(Ba&(wa|0)>0){Ga=0;Ha=0}else{sa=0;break}while(1){X=+h[n+(Ha<<3)>>3];if(X>=0.0&X<=1.0){xa=Ga;Fa=0;while(1){if(X==+h[o+(Fa<<3)>>3]){h[p+(xa<<3)>>3]=X;Ia=xa+1|0}else{Ia=xa}Ja=Fa+1|0;if((Ja|0)<(wa|0)){xa=Ia;Fa=Ja}else{Ka=Ia;break}}}else{Ka=Ga}Fa=Ha+1|0;if((Fa|0)<(pa|0)){Ga=Ka;Ha=Fa}else{sa=Ka;break}}}else{X=O/R;N=A-L*X;U=ka-ja*X;Q=(ma-la*X)*3.0;h[ea>>3]=B-D*X+U*3.0-(N+Q);h[fa>>3]=N*3.0+Q-U*6.0;h[ga>>3]=(U-N)*3.0;h[da>>3]=J*X-w+N;pa=XB(da,m)|0;if((pa|0)==4){sa=4;break}if((pa|0)>0){La=0;Ma=0}else{sa=0;break}while(1){N=+h[n+(Ma<<3)>>3];do{if(N>=0.0&N<=1.0){h[ea>>3]=G;h[fa>>3]=F;h[ga>>3]=H;h[da>>3]=L;X=(L+N*(H+N*(F+G*N))-J)/R;if(!(X>=0.0&X<=1.0)){Na=La;break}h[p+(La<<3)>>3]=N;Na=La+1|0}else{Na=La}}while(0);wa=Ma+1|0;if((wa|0)<(pa|0)){La=Na;Ma=wa}else{sa=Na;break}}}}while(0);if((sa|0)!=4&(sa|0)>0){pa=0;do{R=+h[p+(pa<<3)>>3];do{if(!(R<1.0e-6|R>.999999)){O=R*R*R;N=R*3.0;X=1.0-R;U=X*R*N;Q=X*N*X;N=X*X*X;X=D*O+(la*U+(L*N+ja*Q));V=B*O+(ma*U+(A*N+ka*Q));Q=X-J;N=V-w;if(Q*Q+N*N<.001){break}N=X-z;X=V-S;if(N*N+X*X>=.001){break c}}}while(0);pa=pa+1|0;}while((pa|0)<(sa|0))}pa=na+1|0;if((pa|0)<(b|0)){na=pa}else{ra=71;break b}}if(Y==0.0&C==0.0){ra=73;break}if(Y<=.01){ia=0;C=0.0;Y=0.0;continue}ia=0;C=C*.5;Y=Y*.5}if((ra|0)==71){NB((c[44262]|0)+4|0);ia=c[44256]|0;sa=c[44262]|0;h[ia+(sa<<4)>>3]=ja;p=sa+1|0;h[ia+(sa<<4)+8>>3]=ka;h[ia+(p<<4)>>3]=la;Na=sa+2|0;h[ia+(p<<4)+8>>3]=ma;h[ia+(Na<<4)>>3]=D;h[ia+(Na<<4)+8>>3]=B;c[44262]=sa+3;t=0;i=l;return t|0}do{if((ra|0)==73){if(!s){break}NB((c[44262]|0)+4|0);sa=c[44256]|0;Na=c[44262]|0;h[sa+(Na<<4)>>3]=ja;ia=Na+1|0;h[sa+(Na<<4)+8>>3]=ka;h[sa+(ia<<4)>>3]=la;p=Na+2|0;h[sa+(ia<<4)+8>>3]=ma;h[sa+(p<<4)>>3]=D;h[sa+(p<<4)+8>>3]=B;c[44262]=Na+3;t=0;i=l;return t|0}}while(0);ma=L+$*.3333333333333333;$=Z*.3333333333333333+A;Z=D-ba*.3333333333333333;ba=B-_*.3333333333333333;if((v|0)>1){s=c[43786]|0;_=-1.0;ra=-1;Na=1;while(1){la=+h[s+(Na*40|0)>>3];ka=1.0-la;ja=ka*ka*ka;Y=la*3.0;C=ka*Y*ka;E=ka*la*Y;Y=la*la*la;la=+h[d+(Na<<4)>>3]-(D*Y+(Z*E+(L*ja+ma*C)));ka=+h[d+(Na<<4)+8>>3]-(B*Y+(ba*E+(A*ja+$*C)));C=+T(la*la+ka*ka);p=C>_;sa=p?Na:ra;ia=Na+1|0;if((ia|0)<(v|0)){_=p?C:_;ra=sa;Na=ia}else{Oa=sa;break}}}else{Oa=-1}Na=d+(Oa<<4)|0;ra=Oa-1|0;_=+h[Na>>3];$=+h[d+(Oa<<4)+8>>3];A=_- +h[d+(ra<<4)>>3];ba=$- +h[d+(ra<<4)+8>>3];B=A*A+ba*ba;if(B>1.0e-6){ma=+T(B);Pa=A/ma;Qa=ba/ma}else{Pa=A;Qa=ba}ra=Oa+1|0;ba=+h[d+(ra<<4)>>3]-_;_=+h[d+(ra<<4)+8>>3]-$;$=ba*ba+_*_;if($>1.0e-6){A=+T($);Ra=ba/A;Sa=_/A}else{Ra=ba;Sa=_}_=Pa+Ra;Ra=Qa+Sa;Sa=Ra*Ra+_*_;if(Sa>1.0e-6){Qa=+T(Sa);Ta=_/Qa;Ua=Ra/Qa}else{Ta=_;Ua=Ra}OB(a,b,d,ra,f,g,Ta,Ua)|0;OB(a,b,Na,e-Oa|0,Ta,Ua,j,k)|0;t=0;i=l;return t|0}function PB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0,H=0,I=0.0,J=0,K=0,L=0.0,M=0.0,N=0,O=0.0,P=0.0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0.0,ja=0.0,na=0.0,oa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0,ua=0.0,va=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ca=0.0,Da=0.0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0.0,Ja=0.0,Ka=0.0,La=0,Ma=0,Na=0.0,Oa=0.0,Pa=0.0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0.0,Ua=0.0,Va=0.0,Wa=0.0,Xa=0.0,Ya=0.0,Za=0.0,_a=0.0,$a=0.0,ab=0.0,bb=0.0,cb=0.0,db=0.0,eb=0.0,fb=0.0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0;e=i;i=i+16|0;f=1;g=0;j=i;i=i+168|0;c[j>>2]=0;while(1)switch(f|0){case 1:k=e|0;l=BF(177592,f,j)|0;f=150;break;case 150:if((l|0)==0){f=2;break}else{m=-2;f=149;break};case 2:n=a+4|0;p=c[n>>2]|0;if((c[44104]|0)<(p|0)){f=3;break}else{f=13;break};case 3:q=c[44100]|0;if((q|0)==0){f=4;break}else{f=8;break};case 4:r=ma(6,p<<3|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[44100]=r;if((r|0)==0){f=5;break}else{f=6;break};case 5:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=523,c[s+16>>2]=81032,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;la(40,177592,1);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;return 0;case 6:r=ma(6,p<<2|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[44102]=r;if((r|0)==0){f=7;break}else{f=12;break};case 7:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=527,c[s+16>>2]=167232,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;la(40,177592,1);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;return 0;case 8:r=wa(202,q|0,p<<3|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[44100]=r;if((r|0)==0){f=9;break}else{f=10;break};case 9:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=533,c[s+16>>2]=163024,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;la(40,177592,1);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;return 0;case 10:r=wa(202,c[44102]|0,p<<2|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[44102]=r;if((r|0)==0){f=11;break}else{f=12;break};case 11:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=539,c[s+16>>2]=158976,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;la(40,177592,1);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;return 0;case 12:c[44104]=p;f=13;break;case 13:c[44106]=0;c[43660]=0;w=c[n>>2]|0;x=w<<1;r=c[45178]|0;if((r|0)<(x|0)){f=14;break}else{y=r;f=20;break};case 14:z=c[45180]|0;if((z|0)==0){f=15;break}else{f=17;break};case 15:r=ma(6,w<<3|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[45180]=r;if((r|0)==0){f=16;break}else{f=19;break};case 16:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=573,c[s+16>>2]=90928,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;la(40,177592,1);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;return 0;case 17:r=wa(202,z|0,w<<3|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[45180]=r;if((r|0)==0){f=18;break}else{f=19;break};case 18:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=580,c[s+16>>2]=85648,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;la(40,177592,1);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;return 0;case 19:c[45178]=x;y=x;f=20;break;case 20:r=(y|0)/2|0;c[45176]=r;c[45174]=r-1;A=c[n>>2]|0;B=(A|0)>0;C=a|0;D=c[C>>2]|0;if(B){E=t;F=-1;G=0;f=21;break}else{H=-1;f=22;break};case 21:I=+h[D+(G<<4)>>3];r=E>I;J=r?G:F;K=G+1|0;if((K|0)<(A|0)){E=r?I:E;F=J;G=K;f=21;break}else{H=J;f=22;break};case 22:L=+h[D+(H<<4)>>3];M=+h[D+(H<<4)+8>>3];N=((H|0)==0?A:H)-1|0;O=+h[D+(N<<4)>>3];J=(H|0)==(A-1|0)?0:H+1|0;P=+h[D+(J<<4)>>3];Q=+h[D+(J<<4)+8>>3];if(O==L&L==P&Q>M){f=25;break}else{f=23;break};case 23:if((P-L)*(+h[D+(N<<4)+8>>3]-M)-(O-L)*(Q-M)>0.0){f=24;break}else{f=25;break};case 24:if(B){R=0;S=A;f=32;break}else{f=37;break};case 25:if(B){T=A;U=A;f=26;break}else{f=37;break};case 26:V=T-1|0;W=c[C>>2]|0;if((T|0)>(U-1|0)){f=31;break}else{f=27;break};case 27:if(+h[W+(V<<4)>>3]==+h[W+(T<<4)>>3]){f=28;break}else{f=31;break};case 28:if(+h[W+(V<<4)+8>>3]==+h[W+(T<<4)+8>>3]){f=29;break}else{f=31;break};case 29:if((V|0)>0){f=30;break}else{f=37;break};case 30:T=V;U=c[n>>2]|0;f=26;break;case 31:c[(c[44100]|0)+(c[44106]<<3)>>2]=W+(V<<4);J=c[44106]|0;K=c[44100]|0;c[K+(J<<3)+4>>2]=K+(((J|0)%(c[n>>2]|0)|0)<<3);J=c[44106]|0;c[(c[44102]|0)+(J<<2)>>2]=(c[44100]|0)+(J<<3);c[44106]=(c[44106]|0)+1;f=29;break;case 32:X=c[C>>2]|0;if((R|0)>0){f=33;break}else{f=35;break};case 33:Y=R-1|0;if(+h[X+(R<<4)>>3]==+h[X+(Y<<4)>>3]){f=34;break}else{f=35;break};case 34:if(+h[X+(R<<4)+8>>3]==+h[X+(Y<<4)+8>>3]){Z=S;f=36;break}else{f=35;break};case 35:c[(c[44100]|0)+(c[44106]<<3)>>2]=X+(R<<4);J=c[44106]|0;K=c[44100]|0;c[K+(J<<3)+4>>2]=K+(((J|0)%(c[n>>2]|0)|0)<<3);J=c[44106]|0;c[(c[44102]|0)+(J<<2)>>2]=(c[44100]|0)+(J<<3);c[44106]=(c[44106]|0)+1;Z=c[n>>2]|0;f=36;break;case 36:J=R+1|0;if((J|0)<(Z|0)){R=J;S=Z;f=32;break}else{f=37;break};case 37:_=c[44102]|0;J=c[44106]|0;if((J|0)>3){$=J;f=39;break}else{f=74;break};case 38:if((aa|0)>3){$=aa;f=39;break}else{f=74;break};case 39:aa=$-1|0;ba=0;f=40;break;case 40:ca=ba+1|0;da=(ca|0)==($|0)?0:ca;ea=(ba+2|0)%($|0)|0;J=c[c[_+(((ba+aa|0)%($|0)|0)<<2)>>2]>>2]|0;fa=c[_+(ba<<2)>>2]|0;K=c[fa>>2]|0;ga=c[_+(da<<2)>>2]|0;r=c[ga>>2]|0;ha=+h[J>>3];ia=+h[J+8>>3];ja=+h[K>>3];na=+h[K+8>>3];oa=+h[r>>3];qa=+h[r+8>>3];ra=oa-ja;sa=qa-na;ta=c[_+(ea<<2)>>2]|0;r=c[ta>>2]|0;ua=+h[r>>3];va=+h[r+8>>3];xa=na-va;if((ia-na)*ra-(ha-ja)*sa>0.0){f=41;break}else{f=43;break};case 41:if((ha-ua)*xa-(ja-ua)*(ia-va)>0.0){f=42;break}else{f=45;break};case 42:I=va-na;ya=ua-ja;if(ra*I-sa*ya>0.0){za=ya;Aa=I;f=46;break}else{f=45;break};case 43:I=(oa-ua)*xa-(ja-ua)*(qa-va);if(I<=0.0&I<0.0){f=44;break}else{f=45;break};case 44:za=ua-ja;Aa=va-na;f=46;break;case 45:if((ca|0)<($|0)){ba=ca;f=40;break}else{f=73;break};case 46:Ca=ja-ua;Da=za*za+Aa*Aa;Ea=0;f=47;break;case 47:Fa=Ea+1|0;Ga=(Fa|0)==($|0)?0:Fa;if((Ea|0)==(ba|0)|(Ga|0)==(ba|0)|(Ea|0)==(ea|0)|(Ga|0)==(ea|0)){f=48;break}else{f=49;break};case 48:if((Fa|0)<($|0)){Ea=Fa;f=47;break}else{f=71;break};case 49:r=c[c[_+(Ea<<2)>>2]>>2]|0;Ha=c[c[_+(Ga<<2)>>2]>>2]|0;Ia=+h[r>>3];Ja=+h[r+8>>3];Ka=xa*(Ia-ua)-Ca*(Ja-va);La=Ka>0.0;Ma=Ka>=0.0;if(Ma&(La^1)){f=53;break}else{f=50;break};case 50:Na=+h[Ha>>3];Oa=+h[Ha+8>>3];Pa=xa*(Na-ua)-Ca*(Oa-va);if(Pa<=0.0&Pa>=0.0){f=53;break}else{f=51;break};case 51:Qa=Ja-Oa;Ra=Ia-Na;Sa=(ja-Na)*Qa-Ra*(na-Oa);if(Sa<=0.0&Sa>=0.0){f=53;break}else{f=52;break};case 52:Ta=(ua-Na)*Qa-Ra*(va-Oa);if(Ta<=0.0&Ta>=0.0){f=53;break}else{f=65;break};case 53:Ua=Ia-ja;Va=Ja-na;if(Ka<=0.0&Ma){f=54;break}else{f=56;break};case 54:if(za*Ua+Aa*Va<0.0){f=56;break}else{f=55;break};case 55:if(Ua*Ua+Va*Va>Da){f=56;break}else{f=45;break};case 56:Wa=+h[Ha>>3];Xa=+h[Ha+8>>3];Ya=Wa-ja;Za=Xa-na;I=xa*(Wa-ua)-Ca*(Xa-va);if(I<=0.0&I>=0.0){f=57;break}else{f=59;break};case 57:if(za*Ya+Aa*Za<0.0){f=59;break}else{f=58;break};case 58:if(Ya*Ya+Za*Za>Da){f=59;break}else{f=45;break};case 59:_a=Wa-Ia;$a=Xa-Ja;ab=ja-Ia;bb=na-Ja;cb=Ja-Xa;db=Ia-Wa;I=(ja-Wa)*cb-db*(na-Xa);if(I<=0.0&I>=0.0){f=60;break}else{f=62;break};case 60:if(ab*_a+bb*$a<0.0){f=62;break}else{f=61;break};case 61:if(ab*ab+bb*bb>_a*_a+$a*$a){f=62;break}else{f=45;break};case 62:eb=ua-Ia;fb=va-Ja;I=(ua-Wa)*cb-db*(va-Xa);if(I<=0.0&I>=0.0){f=63;break}else{f=48;break};case 63:if(eb*_a+fb*$a<0.0){f=48;break}else{f=64;break};case 64:if(eb*eb+fb*fb>_a*_a+$a*$a){f=48;break}else{f=45;break};case 65:gb=Pa>0.0;if(Sa>0.0){hb=1;f=67;break}else{f=66;break};case 66:hb=Sa<0.0?2:3;f=67;break;case 67:if(Ta>0.0){ib=1;f=69;break}else{f=68;break};case 68:ib=Ta<0.0?2:3;f=69;break;case 69:if(La^gb){f=70;break}else{f=48;break};case 70:if((hb|0)==1^(ib|0)==1){f=45;break}else{f=48;break};case 71:Ba(58,fa|0,ga|0,ta|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;if((da|0)<(aa|0)){jb=da;f=72;break}else{f=38;break};case 72:r=jb+1|0;c[_+(jb<<2)>>2]=c[_+(r<<2)>>2];if((r|0)<(aa|0)){jb=r;f=72;break}else{f=38;break};case 73:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=324,c[s+16>>2]=155376,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;f=75;break;case 74:Ba(58,c[_>>2]|0,c[_+4>>2]|0,c[_+8>>2]|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;f=75;break;case 75:r=c[43660]|0;if((r|0)>0){kb=0;lb=r;f=78;break}else{mb=0;nb=r;ob=0;f=102;break};case 76:if((pb|0)<(qb|0)){kb=pb;lb=qb;f=78;break}else{f=77;break};case 77:rb=(qb|0)>0;if(rb){sb=0;f=101;break}else{mb=0;nb=qb;ob=0;f=102;break};case 78:pb=kb+1|0;if((pb|0)<(lb|0)){tb=pb;f=79;break}else{qb=lb;f=76;break};case 79:ub=0;f=80;break;case 80:vb=c[43656]|0;wb=vb+(kb*52|0)|0;xb=vb+(tb*52|0)|0;yb=c[c[vb+(kb*52|0)+4+(ub<<4)>>2]>>2]|0;zb=c[c[vb+(tb*52|0)+4>>2]>>2]|0;if((yb|0)==(zb|0)){f=82;break}else{f=81;break};case 81:Ab=c[c[vb+(tb*52|0)+8>>2]>>2]|0;f=83;break;case 82:r=c[c[vb+(tb*52|0)+8>>2]>>2]|0;if((c[c[vb+(kb*52|0)+4+(ub<<4)+4>>2]>>2]|0)==(r|0)){f=85;break}else{Ab=r;f=83;break};case 83:if((yb|0)==(Ab|0)){f=84;break}else{Bb=vb;Cb=yb;f=86;break};case 84:if((c[c[vb+(kb*52|0)+4+(ub<<4)+4>>2]>>2]|0)==(zb|0)){f=85;break}else{Bb=vb;Cb=yb;f=86;break};case 85:c[vb+(kb*52|0)+4+(ub<<4)+12>>2]=xb;c[vb+(tb*52|0)+16>>2]=wb;r=c[43656]|0;Bb=r;Cb=c[c[r+(kb*52|0)+4+(ub<<4)>>2]>>2]|0;f=86;break;case 86:Db=Bb+(kb*52|0)|0;Eb=Bb+(tb*52|0)|0;Fb=c[c[Bb+(tb*52|0)+20>>2]>>2]|0;if((Cb|0)==(Fb|0)){f=88;break}else{f=87;break};case 87:Gb=c[c[Bb+(tb*52|0)+24>>2]>>2]|0;f=89;break;case 88:r=c[c[Bb+(tb*52|0)+24>>2]>>2]|0;if((c[c[Bb+(kb*52|0)+4+(ub<<4)+4>>2]>>2]|0)==(r|0)){f=91;break}else{Gb=r;f=89;break};case 89:if((Cb|0)==(Gb|0)){f=90;break}else{Hb=Bb;Ib=Cb;f=92;break};case 90:if((c[c[Bb+(kb*52|0)+4+(ub<<4)+4>>2]>>2]|0)==(Fb|0)){f=91;break}else{Hb=Bb;Ib=Cb;f=92;break};case 91:c[Bb+(kb*52|0)+4+(ub<<4)+12>>2]=Eb;c[Bb+(tb*52|0)+32>>2]=Db;r=c[43656]|0;Hb=r;Ib=c[c[r+(kb*52|0)+4+(ub<<4)>>2]>>2]|0;f=92;break;case 92:Jb=Hb+(kb*52|0)|0;Kb=Hb+(tb*52|0)|0;Lb=c[c[Hb+(tb*52|0)+36>>2]>>2]|0;if((Ib|0)==(Lb|0)){f=94;break}else{f=93;break};case 93:Mb=c[c[Hb+(tb*52|0)+40>>2]>>2]|0;f=95;break;case 94:r=c[c[Hb+(tb*52|0)+40>>2]>>2]|0;if((c[c[Hb+(kb*52|0)+4+(ub<<4)+4>>2]>>2]|0)==(r|0)){f=97;break}else{Mb=r;f=95;break};case 95:if((Ib|0)==(Mb|0)){f=96;break}else{f=98;break};case 96:if((c[c[Hb+(kb*52|0)+4+(ub<<4)+4>>2]>>2]|0)==(Lb|0)){f=97;break}else{f=98;break};case 97:c[Hb+(kb*52|0)+4+(ub<<4)+12>>2]=Kb;c[Hb+(tb*52|0)+48>>2]=Jb;f=98;break;case 98:r=ub+1|0;if((r|0)<3){ub=r;f=80;break}else{f=99;break};case 99:r=tb+1|0;K=c[43660]|0;if((r|0)<(K|0)){tb=r;f=79;break}else{qb=K;f=76;break};case 100:if((Nb|0)<(qb|0)){sb=Nb;f=101;break}else{mb=Nb;nb=qb;ob=rb;f=102;break};case 101:K=wa(168,sb|0,b|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;Nb=sb+1|0;if((K|0)==0){f=100;break}else{mb=sb;nb=qb;ob=rb;f=102;break};case 102:if((mb|0)==(nb|0)){f=104;break}else{f=103;break};case 103:Ob=b+16|0;if(ob){Pb=0;f=106;break}else{Qb=0;f=107;break};case 104:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=192,c[s+16>>2]=119192,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;m=-1;f=149;break;case 105:if((Rb|0)<(nb|0)){Pb=Rb;f=106;break}else{Qb=Rb;f=107;break};case 106:K=wa(168,Pb|0,Ob|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;Rb=Pb+1|0;if((K|0)==0){f=105;break}else{Qb=Pb;f=107;break};case 107:if((Qb|0)==(nb|0)){f=108;break}else{f=109;break};case 108:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=200,c[s+16>>2]=110712,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;m=-1;f=149;break;case 109:K=wa(182,mb|0,Qb|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;if((K|0)==0){f=110;break}else{f=111;break};case 110:pa(30,c[o>>2]|0,96136,(s=i,i=i+24|0,c[s>>2]=141896,c[s+8>>2]=207,c[s+16>>2]=107328,s)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=s;ka(68,2);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[d+4>>2]=2;K=c[44254]|0;r=K;J=b;c[r>>2]=c[J>>2];c[r+4>>2]=c[J+4>>2];c[r+8>>2]=c[J+8>>2];c[r+12>>2]=c[J+12>>2];J=K+16|0;r=Ob;c[J>>2]=c[r>>2];c[J+4>>2]=c[r+4>>2];c[J+8>>2]=c[r+8>>2];c[J+12>>2]=c[r+12>>2];c[d>>2]=K;m=0;f=149;break;case 111:if((mb|0)==(Qb|0)){f=112;break}else{f=113;break};case 112:ka(68,2);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[d+4>>2]=2;K=c[44254]|0;r=K;J=b;c[r>>2]=c[J>>2];c[r+4>>2]=c[J+4>>2];c[r+8>>2]=c[J+8>>2];c[r+12>>2]=c[J+12>>2];J=K+16|0;r=Ob;c[J>>2]=c[r>>2];c[J+4>>2]=c[r+4>>2];c[J+8>>2]=c[r+8>>2];c[J+12>>2]=c[r+12>>2];c[d>>2]=K;m=0;f=149;break;case 113:Sb=k|0;c[k>>2]=b;Tb=k+4|0;c[Tb>>2]=0;Ub=k+8|0;c[Ub>>2]=Ob;c[k+12>>2]=0;Vb=c[45176]|0;Wb=c[45180]|0;if(((c[45174]|0)-Vb|0)>-1){f=114;break}else{f=115;break};case 114:c[Tb>>2]=c[Wb+(Vb<<2)>>2];f=115;break;case 115:K=Vb-1|0;c[45176]=K;c[Wb+(K<<2)>>2]=Sb;c[45172]=c[45176];if((mb|0)==-1){Xb=0;Yb=Ub;f=145;break}else{f=116;break};case 116:Zb=Ob|0;_b=b+24|0;$b=mb;f=117;break;case 117:ac=c[43656]|0;c[ac+($b*52|0)>>2]=2;bc=0;f=118;break;case 118:cc=c[ac+($b*52|0)+4+(bc<<4)+12>>2]|0;if((cc|0)==0){f=120;break}else{f=119;break};case 119:if((c[cc>>2]|0)==1){dc=bc;f=121;break}else{f=120;break};case 120:K=bc+1|0;if((K|0)<3){bc=K;f=118;break}else{dc=K;f=121;break};case 121:if((dc|0)==3){f=122;break}else{f=123;break};case 122:K=c[45180]|0;r=c[c[K+(c[45176]<<2)>>2]>>2]|0;J=c[K+(c[45174]<<2)>>2]|0;K=c[J>>2]|0;I=+h[r>>3];ya=+h[r+8>>3];r=(+h[_b>>3]-ya)*(+h[K>>3]-I)-(+h[Zb>>3]-I)*(+h[K+8>>3]-ya)>0.0;ec=r?Ub:J;fc=r?J:Ub;f=125;break;case 123:gc=c[ac+($b*52|0)+4+(dc<<4)>>2]|0;J=c[gc>>2]|0;r=c[c[ac+($b*52|0)+4+(((dc+1|0)%3|0)<<4)+4>>2]>>2]|0;hc=c[ac+($b*52|0)+4+(dc<<4)+4>>2]|0;K=c[hc>>2]|0;ya=+h[r>>3];I=+h[r+8>>3];if((+h[J+8>>3]-I)*(+h[K>>3]-ya)-(+h[J>>3]-ya)*(+h[K+8>>3]-I)>0.0){ec=gc;fc=hc;f=125;break}else{f=124;break};case 124:ec=hc;fc=gc;f=125;break;case 125:if(($b|0)==(mb|0)){f=126;break}else{f=131;break};case 126:ic=c[45174]|0;if((ic-(c[45176]|0)|0)>-1){f=127;break}else{jc=ic;f=128;break};case 127:c[fc+4>>2]=c[(c[45180]|0)+(ic<<2)>>2];jc=c[45174]|0;f=128;break;case 128:K=jc+1|0;c[45174]=K;c[(c[45180]|0)+(K<<2)>>2]=fc;kc=c[45176]|0;if(((c[45174]|0)-kc|0)>-1){f=129;break}else{lc=kc;f=130;break};case 129:c[ec+4>>2]=c[(c[45180]|0)+(kc<<2)>>2];lc=c[45176]|0;f=130;break;case 130:K=lc-1|0;c[45176]=K;c[(c[45180]|0)+(K<<2)>>2]=ec;mc=0;f=141;break;case 131:nc=c[45176]|0;oc=c[45180]|0;if((c[oc+(nc<<2)>>2]|0)==(ec|0)){f=137;break}else{f=132;break};case 132:pc=c[45174]|0;if((c[oc+(pc<<2)>>2]|0)==(ec|0)){f=137;break}else{f=133;break};case 133:qc=ma(8,ec|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[45176]=qc;if((pc-qc|0)>-1){f=134;break}else{rc=qc;sc=oc;f=135;break};case 134:c[ec+4>>2]=c[oc+(qc<<2)>>2];rc=c[45176]|0;sc=c[45180]|0;f=135;break;case 135:K=rc-1|0;c[45176]=K;c[sc+(K<<2)>>2]=ec;if((qc|0)>(c[45172]|0)){f=136;break}else{mc=0;f=141;break};case 136:c[45172]=qc;mc=0;f=141;break;case 137:tc=ma(8,fc|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[45174]=tc;if((tc-nc|0)>-1){f=138;break}else{uc=tc;vc=oc;f=139;break};case 138:c[fc+4>>2]=c[oc+(tc<<2)>>2];uc=c[45174]|0;vc=c[45180]|0;f=139;break;case 139:K=uc+1|0;c[45174]=K;c[vc+(K<<2)>>2]=fc;if((tc|0)<(c[45172]|0)){f=140;break}else{mc=0;f=141;break};case 140:c[45172]=tc;mc=0;f=141;break;case 141:wc=c[ac+($b*52|0)+4+(mc<<4)+12>>2]|0;if((wc|0)==0){f=144;break}else{f=142;break};case 142:if((c[wc>>2]|0)==1){f=143;break}else{f=144;break};case 143:K=wc-(c[43656]|0)|0;if((K|0)==-52){Xb=0;Yb=Ub;f=145;break}else{$b=(K|0)/52|0;f=117;break};case 144:K=mc+1|0;if((K|0)<3){mc=K;f=141;break}else{Xb=0;Yb=Ub;f=145;break};case 145:xc=Xb+1|0;K=c[Yb+4>>2]|0;if((K|0)==0){f=146;break}else{Xb=xc;Yb=K;f=145;break};case 146:ka(68,xc|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[d+4>>2]=xc;yc=c[44254]|0;zc=Ub;Ac=Xb;f=147;break;case 147:K=yc+(Ac<<4)|0;J=c[zc>>2]|0;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];J=c[zc+4>>2]|0;if((J|0)==0){f=148;break}else{zc=J;Ac=Ac-1|0;f=147;break};case 148:c[d>>2]=yc;m=0;f=149;break;case 149:i=e;return m|0;case-1:if((g|0)==1){l=v;f=150}u=v=0;break}return 0}function QB(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0;d=c[43656]|0;e=+h[b>>3];f=+h[b+8>>3];b=c[c[d+(a*52|0)+4>>2]>>2]|0;g=c[c[d+(a*52|0)+8>>2]>>2]|0;i=+h[g>>3];j=+h[g+8>>3];k=(+h[b+8>>3]-j)*(e-i)-(+h[b>>3]-i)*(f-j);if(k>0.0){l=1}else{l=k>=0.0|0}b=c[c[d+(a*52|0)+20>>2]>>2]|0;g=c[c[d+(a*52|0)+24>>2]>>2]|0;k=+h[g>>3];j=+h[g+8>>3];i=(+h[b+8>>3]-j)*(e-k)-(+h[b>>3]-k)*(f-j);if(i>0.0){m=1}else{m=i>=0.0|0}b=c[c[d+(a*52|0)+36>>2]>>2]|0;g=c[c[d+(a*52|0)+40>>2]>>2]|0;i=+h[g>>3];j=+h[g+8>>3];k=(+h[b+8>>3]-j)*(e-i)-(+h[b>>3]-i)*(f-j);if(k>0.0){n=1}else{n=k>=0.0|0}b=n+(m+l)|0;if((b|0)==3){o=1;return o|0}o=(b|0)==0|0;return o|0}function RB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=(c[43656]|0)+(a*52|0)|0;if((c[d>>2]|0)!=0){e=0;return e|0}c[d>>2]=1;if((a|0)==(b|0)){e=1;return e|0}d=0;f=c[43656]|0;while(1){g=c[f+(a*52|0)+4+(d<<4)+12>>2]|0;if((g|0)==0){h=f}else{if((RB((g-f|0)/52|0,b)|0)!=0){e=1;i=9;break}h=c[43656]|0}g=d+1|0;if((g|0)<3){d=g;f=h}else{break}}if((i|0)==9){return e|0}c[h+(a*52|0)>>2]=0;e=0;return e|0}function SB(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;if((c[44258]|0)>=(a|0)){i=b;return}d=c[44254]|0;do{if((d|0)==0){e=dF(a<<4)|0;c[44254]=e;if((e|0)!=0){break}gc(c[o>>2]|0,96136,(f=i,i=i+24|0,c[f>>2]=141896,c[f+8>>2]=593,c[f+16>>2]=101744,f)|0)|0;i=f;rc(177592,1)}else{e=gF(d,a<<4)|0;c[44254]=e;if((e|0)!=0){break}gc(c[o>>2]|0,96136,(f=i,i=i+24|0,c[f>>2]=141896,c[f+8>>2]=599,c[f+16>>2]=98176,f)|0)|0;i=f;rc(177592,1)}}while(0);c[44258]=a;i=b;return}function TB(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0.0;b=c[45172]|0;d=c[45180]|0;e=a|0;a=c[45176]|0;while(1){if((a|0)>=(b|0)){break}f=a+1|0;g=c[c[d+(f<<2)>>2]>>2]|0;i=c[c[d+(a<<2)>>2]>>2]|0;j=c[e>>2]|0;k=+h[i>>3];l=+h[i+8>>3];if((+h[g+8>>3]-l)*(+h[j>>3]-k)-(+h[g>>3]-k)*(+h[j+8>>3]-l)>0.0){m=a;n=7;break}else{a=f}}if((n|0)==7){return m|0}a=c[45174]|0;while(1){if((a|0)<=(b|0)){m=b;n=7;break}f=a-1|0;j=c[c[d+(f<<2)>>2]>>2]|0;g=c[c[d+(a<<2)>>2]>>2]|0;i=c[e>>2]|0;l=+h[g>>3];k=+h[g+8>>3];o=(+h[j+8>>3]-k)*(+h[i>>3]-l)-(+h[j>>3]-l)*(+h[i+8>>3]-k);if(o<=0.0&o<0.0){m=a;n=7;break}else{a=f}}if((n|0)==7){return m|0}return 0}function UB(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0;e=i;f=c[43660]|0;g=c[43658]|0;if((f|0)<(g|0)){h=f;j=c[43656]|0}else{k=g+20|0;g=c[43656]|0;do{if((g|0)==0){l=dF(k*52|0)|0;m=l;c[43656]=m;if((l|0)!=0){n=m;p=f;break}gc(c[o>>2]|0,96136,(q=i,i=i+24|0,c[q>>2]=141896,c[q+8>>2]=552,c[q+16>>2]=150848,q)|0)|0;i=q;rc(177592,1)}else{m=gF(g,k*52|0)|0;l=m;c[43656]=l;if((m|0)==0){gc(c[o>>2]|0,96136,(q=i,i=i+24|0,c[q>>2]=141896,c[q+8>>2]=558,c[q+16>>2]=147984,q)|0)|0;i=q;rc(177592,1)}else{n=l;p=c[43660]|0;break}}}while(0);c[43658]=k;h=p;j=n}c[43660]=h+1;n=j+(h*52|0)|0;c[n>>2]=0;c[j+(h*52|0)+4>>2]=a;c[j+(h*52|0)+8>>2]=b;c[j+(h*52|0)+16>>2]=0;c[j+(h*52|0)+20>>2]=b;c[j+(h*52|0)+24>>2]=d;c[j+(h*52|0)+32>>2]=0;c[j+(h*52|0)+36>>2]=d;c[j+(h*52|0)+40>>2]=a;c[j+(h*52|0)+48>>2]=0;c[j+(h*52|0)+12>>2]=n;c[j+(h*52|0)+28>>2]=n;c[j+(h*52|0)+44>>2]=n;i=e;return}function VB(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0;f=dF(d<<2)|0;g=f;i=dF((d<<3)+8|0)|0;j=i+8|0;k=(d|0)>0;if(k){vF(f|0,-1|0,d<<2|0)|0;f=0;do{h[j+(f<<3)>>3]=-2147483647.0;f=f+1|0;}while((f|0)<(d|0))}h[i>>3]=-2147483648.0;if((a|0)==(b|0)){eF(i);return g|0}if(k){l=a}else{k=a;while(1){a=j+(k<<3)|0;m=+h[a>>3]*-1.0;h[a>>3]=m==2147483647.0?0.0:m;if((b|0)==-1){break}else{k=-1}}eF(i);return g|0}while(1){k=j+(l<<3)|0;m=+h[k>>3]*-1.0;h[k>>3]=m==2147483647.0?0.0:m;a=e+(l<<2)|0;f=0;n=-1;while(1){o=j+(f<<3)|0;m=+h[o>>3];do{if(m<0.0){if((l|0)<(f|0)){p=(c[e+(f<<2)>>2]|0)+(l<<3)|0}else{p=(c[a>>2]|0)+(f<<3)|0}q=+h[p>>3];r=-0.0-(q+ +h[k>>3]);if(q!=0.0&m<r){h[o>>3]=r;c[g+(f<<2)>>2]=l;s=r}else{s=m}if(s<=+h[j+(n<<3)>>3]){t=n;break}t=f}else{t=n}}while(0);o=f+1|0;if((o|0)<(d|0)){f=o;n=t}else{break}}if((t|0)==(b|0)){break}else{l=t}}eF(i);return g|0}function WB(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0;j=i;k=a;a=i;i=i+16|0;c[a>>2]=c[k>>2];c[a+4>>2]=c[k+4>>2];c[a+8>>2]=c[k+8>>2];c[a+12>>2]=c[k+12>>2];k=e;e=i;i=i+16|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];k=c[h+4>>2]|0;if((cC(a,b,e,f,h)|0)==0){f=c[h+24>>2]|0;c[f+(k<<2)>>2]=g;g=k+1|0;c[f+(g<<2)>>2]=d;l=VB(g,k,k+2|0,f)|0;i=j;return l|0}else{f=dF((k<<2)+8|0)|0;g=k+1|0;c[f+(k<<2)>>2]=g;c[f+(g<<2)>>2]=-1;l=f;i=j;return l|0}return 0}function XB(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0.0,g=0.0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0;c=+h[a+24>>3];if(c<1.0e-7&c>-1.0e-7){d=+h[a+16>>3];e=a+8|0;if(d<1.0e-7&d>-1.0e-7){f=+h[e>>3];g=+h[a>>3];if(f<1.0e-7&f>-1.0e-7){i=g<1.0e-7&g>-1.0e-7?4:0;return i|0}else{h[b>>3]=(-0.0-g)/f;i=1;return i|0}}f=+h[e>>3]/(d*2.0);g=f*f- +h[a>>3]/d;if(g<0.0){i=0;return i|0}if(g==0.0){h[b>>3]=-0.0-f;i=1;return i|0}else{d=+T(g)-f;h[b>>3]=d;h[b+8>>3]=f*-2.0-d;i=2;return i|0}}d=+h[a+16>>3]/(c*3.0);f=+h[a+8>>3]/c;g=d*d;j=+h[a>>3]/c+(d*2.0*g-d*f);c=f/3.0-g;g=j*j;f=g+c*c*c*4.0;do{if(f<0.0){c=+T(g-f)*.5;k=+$(+(+T(-0.0-f)),+(-0.0-j));if(c<0.0){l=+U(+(-0.0-c),+.3333333333333333)*-1.0}else{l=+U(+c,+.3333333333333333)}c=l*2.0;m=c*+V(k/3.0);h[b>>3]=m;h[b+8>>3]=c*+V((k+6.283185307179586)/3.0);h[b+16>>3]=c*+V((k+ -3.141592653589793+ -3.141592653589793)/3.0);n=3;o=m}else{m=(+T(f)-j)*.5;k=-0.0-j-m;if(m<0.0){p=+U(+(-0.0-m),+.3333333333333333)*-1.0}else{p=+U(+m,+.3333333333333333)}if(k<0.0){q=+U(+(-0.0-k),+.3333333333333333)*-1.0}else{q=+U(+k,+.3333333333333333)}k=p+q;h[b>>3]=k;if(f>0.0){n=1;o=k;break}m=k*-.5;h[b+16>>3]=m;h[b+8>>3]=m;n=3;o=k}}while(0);a=0;f=o;while(1){h[b+(a<<3)>>3]=f-d;e=a+1|0;if((e|0)>=(n|0)){i=n;break}a=e;f=+h[b+(e<<3)>>3]}return i|0}function YB(a){a=a|0;eF(c[a>>2]|0);eF(a);return}function ZB(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;e=a;a=i;i=i+8|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];e=c[a+4>>2]|0;f=(e*3|0)-2|0;g=c[44388]|0;if((f|0)>(c[44386]|0)){if((g|0)==0){h=dF(f<<4)|0}else{h=gF(g,f<<4)|0}j=h;c[44388]=j;c[44386]=f;k=j}else{k=g}g=c[a>>2]|0;a=k;j=g;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];uF(k+16|0,j|0,16)|0;j=e-1|0;if((j|0)>1){e=(j|0)>2?j:2;a=e*3|0;h=2;l=1;while(1){m=k+(h<<4)|0;n=g+(l<<4)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];m=k+(h+1<<4)|0;uF(m|0,n|0,16)|0;n=k+(h+2<<4)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];m=l+1|0;if((m|0)<(j|0)){h=h+3|0;l=m}else{break}}o=a-1|0;p=e}else{o=2;p=1}e=k+(o<<4)|0;a=g+(p<<4)|0;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];uF(k+(o+1<<4)|0,a|0,16)|0;c[b+4>>2]=f;c[b>>2]=c[44388];i=d;return}function _B(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0.0,k=0.0,l=0;e=i;f=a;a=i;i=i+16|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];g=+h[b+8>>3];j=+h[b>>3];k=(+h[a+8>>3]-g)*(+h[d>>3]-j)-(+h[d+8>>3]-g)*(+h[a>>3]-j);if(k>1.0e-4){l=1;i=e;return l|0}l=(k<-1.0e-4)<<31>>31;i=e;return l|0}function $B(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0.0,v=0.0,w=0,x=0,y=0;f=i;g=a;a=i;i=i+16|0;c[a>>2]=c[g>>2];c[a+4>>2]=c[g+4>>2];c[a+8>>2]=c[g+8>>2];c[a+12>>2]=c[g+12>>2];g=b;b=i;i=i+16|0;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2];g=d;d=i;i=i+16|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];g=e;e=i;i=i+16|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];j=+h[a+8>>3];k=+h[b+8>>3];l=j-k;m=+h[d>>3];n=+h[b>>3];o=+h[d+8>>3];p=+h[a>>3];q=p-n;r=l*(m-n)-(o-k)*q;do{if(r>1.0e-4){s=1}else{a=r<-1.0e-4;d=a<<31>>31;if(a){s=d;break}if(p!=n){if(p<m&m<n){t=1;i=f;return t|0}if(n<m&m<p){t=1}else{s=d;break}i=f;return t|0}else{if(j<o&o<k){t=1;i=f;return t|0}if(k<o&o<j){t=1}else{s=d;break}i=f;return t|0}}}while(0);r=+h[e>>3];u=+h[e+8>>3];v=l*(r-n)-(u-k)*q;do{if(v>1.0e-4){w=1}else{e=v<-1.0e-4;d=e<<31>>31;if(e){w=d;break}if(p!=n){if(p<r&r<n){t=1;i=f;return t|0}if(n<r&r<p){t=1}else{w=d;break}i=f;return t|0}else{if(j<u&u<k){t=1;i=f;return t|0}if(k<u&u<j){t=1}else{w=d;break}i=f;return t|0}}}while(0);v=o-u;o=m-r;m=v*(p-r)-(j-u)*o;if(m>1.0e-4){x=1}else{x=(m<-1.0e-4)<<31>>31}m=v*(n-r)-(k-u)*o;if(m>1.0e-4){y=1}else{y=(m<-1.0e-4)<<31>>31}if((da(w,s)|0)>=0){t=0;i=f;return t|0}t=(da(y,x)|0)>>>31;i=f;return t|0}function aC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0,C=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0,U=0;b=c[a+4>>2]|0;d=b+2|0;e=dF(d<<2)|0;f=e;g=fF(da(b,b)|0,8)|0;i=(b|0)>0;if(i){j=0;k=g;while(1){c[f+(j<<2)>>2]=k;g=j+1|0;if((g|0)<(b|0)){j=g;k=k+(b<<3)|0}else{break}}}k=b+1|0;vF(e+(b<<2)|0,0,((d|0)>(k|0)?d:k)-b<<2|0)|0;c[a+24>>2]=f;k=c[a+8>>2]|0;d=c[a+16>>2]|0;e=c[a+20>>2]|0;if(i){l=0}else{return}do{i=e+(l<<2)|0;a=c[i>>2]|0;j=k+(l<<4)|0;g=k+(l<<4)+8|0;m=+h[j>>3]- +h[k+(a<<4)>>3];n=+h[g>>3]- +h[k+(a<<4)+8>>3];o=+T(m*m+n*n);p=f+(l<<2)|0;h[(c[p>>2]|0)+(a<<3)>>3]=o;h[(c[f+(a<<2)>>2]|0)+(l<<3)>>3]=o;q=l-1|0;r=(a|0)==(q|0)?l-2|0:q;a:do{if((r|0)>-1){q=d+(l<<2)|0;a=r;while(1){s=c[i>>2]|0;t=c[q>>2]|0;o=+h[k+(s<<4)>>3];n=+h[k+(s<<4)+8>>3];m=+h[j>>3];u=+h[g>>3];v=+h[k+(a<<4)>>3];w=+h[k+(a<<4)+8>>3];x=(m-o)*(w-n)-(u-n)*(v-o);if(x>1.0e-4){y=1}else{y=(x<-1.0e-4)<<31>>31}x=+h[k+(t<<4)>>3]-m;z=+h[k+(t<<4)+8>>3]-u;A=x*(w-u)-z*(v-m);if(A>1.0e-4){B=1}else{B=(A<-1.0e-4)<<31>>31>>>31^1}t=(y|0)>-1;if((n-u)*x-(o-m)*z>1.0e-4){C=t?B:0}else{C=t?1:B}b:do{if((C|0)!=0){t=c[e+(a<<2)>>2]|0;s=c[d+(a<<2)>>2]|0;z=+h[k+(t<<4)>>3];o=+h[k+(t<<4)+8>>3];x=(v-z)*(u-o)-(m-z)*(w-o);if(x>1.0e-4){D=1}else{D=(x<-1.0e-4)<<31>>31}x=u-w;n=+h[k+(s<<4)>>3]-v;A=+h[k+(s<<4)+8>>3]-w;E=m-v;F=x*n-E*A;if(F>1.0e-4){G=1}else{G=(F<-1.0e-4)<<31>>31>>>31^1}s=(D|0)>-1;if((o-w)*n-(z-v)*A>1.0e-4){H=s?G:0}else{H=s?1:G}if((H|0)==0){break}if(m!=v){s=0;do{t=c[d+(s<<2)>>2]|0;A=+h[k+(s<<4)>>3];z=+h[k+(s<<4)+8>>3];n=x*(A-v)-E*(z-w);do{if(n>1.0e-4){I=1}else{J=n<-1.0e-4;K=J<<31>>31;if(J){I=K;break}if(m<A&A<v){break b}if(v<A&A<m){break b}else{I=K}}}while(0);n=+h[k+(t<<4)>>3];o=+h[k+(t<<4)+8>>3];F=x*(n-v)-E*(o-w);do{if(F>1.0e-4){L=1}else{K=F<-1.0e-4;J=K<<31>>31;if(K){L=J;break}if(m<n&n<v){break b}if(v<n&n<m){break b}else{L=J}}}while(0);F=z-o;M=A-n;N=(m-n)*F-M*(u-o);if(N>1.0e-4){O=1}else{O=(N<-1.0e-4)<<31>>31}N=(v-n)*F-M*(w-o);if(N>1.0e-4){P=1}else{P=(N<-1.0e-4)<<31>>31}if((da(L,I)|0)<0){if((da(P,O)|0)<=-1){break b}}s=s+1|0;}while((s|0)<(b|0))}else{s=0;do{t=c[d+(s<<2)>>2]|0;N=+h[k+(s<<4)>>3];M=+h[k+(s<<4)+8>>3];F=x*(N-v)-E*(M-w);do{if(F>1.0e-4){Q=1}else{J=F<-1.0e-4;K=J<<31>>31;if(J){Q=K;break}if(u<M&M<w){break b}if(w<M&M<u){break b}else{Q=K}}}while(0);F=+h[k+(t<<4)>>3];o=+h[k+(t<<4)+8>>3];n=x*(F-v)-E*(o-w);do{if(n>1.0e-4){R=1}else{K=n<-1.0e-4;J=K<<31>>31;if(K){R=J;break}if(u<o&o<w){break b}if(w<o&o<u){break b}else{R=J}}}while(0);n=M-o;A=N-F;z=(m-F)*n-A*(u-o);if(z>1.0e-4){S=1}else{S=(z<-1.0e-4)<<31>>31}z=(v-F)*n-A*(w-o);if(z>1.0e-4){U=1}else{U=(z<-1.0e-4)<<31>>31}if((da(R,Q)|0)<0){if((da(U,S)|0)<=-1){break b}}s=s+1|0;}while((s|0)<(b|0))}z=+T(E*E+x*x);h[(c[p>>2]|0)+(a<<3)>>3]=z;h[(c[f+(a<<2)>>2]|0)+(l<<3)>>3]=z}}while(0);if((a|0)<=0){break a}a=a-1|0}}}while(0);l=l+1|0;}while((l|0)<(b|0));return}function bC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0.0,fa=0.0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;e=i;i=i+24|0;f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];f=e|0;g=e+16|0;j=c[a+4>>2]|0;k=a+8|0;l=c[k>>2]|0;m=c[a+16>>2]|0;n=c[a+20>>2]|0;o=dF((j<<3)+16|0)|0;p=o;a:do{if((b|0)==-2222){q=+h[d+8>>3];h[f>>3]=+h[d>>3];h[f+8>>3]=q;r=a+12|0;s=a|0;t=g|0;u=g+4|0;v=0;while(1){if((v|0)>=(c[s>>2]|0)){w=j;x=j;break a}y=c[r>>2]|0;z=y+(v<<2)|0;c[t>>2]=(c[k>>2]|0)+(c[z>>2]<<4);A=v+1|0;c[u>>2]=(c[y+(A<<2)>>2]|0)-(c[z>>2]|0);if((LB(g,f)|0)==0){v=A}else{B=v;C=5;break}}}else{B=b;C=5}}while(0);do{if((C|0)==5){if((B|0)<=-1){w=j;x=j;break}b=c[a+12>>2]|0;w=c[b+(B+1<<2)>>2]|0;x=c[b+(B<<2)>>2]|0}}while(0);B=(x|0)>0;if(B){q=+h[d>>3];D=+h[d+8>>3];a=(w|0)<(j|0);b=0;do{E=+h[l+(b<<4)>>3];F=+h[l+(b<<4)+8>>3];f=c[n+(b<<2)>>2]|0;g=c[m+(b<<2)>>2]|0;G=+h[l+(f<<4)>>3];H=+h[l+(f<<4)+8>>3];I=(E-G)*(D-H)-(F-H)*(q-G);if(I>1.0e-4){J=1}else{J=(I<-1.0e-4)<<31>>31}I=D-F;K=+h[l+(g<<4)>>3]-E;L=+h[l+(g<<4)+8>>3]-F;M=q-E;N=K*I-L*M;if(N>1.0e-4){O=1}else{O=(N<-1.0e-4)<<31>>31>>>31^1}g=(J|0)>-1;if((H-F)*K-(G-E)*L>1.0e-4){P=g?O:0}else{P=g?1:O}b:do{if((P|0)==0){C=65}else{g=q!=E;f=0;do{k=c[m+(f<<2)>>2]|0;L=+h[l+(f<<4)>>3];G=+h[l+(f<<4)+8>>3];K=I*(L-E)-M*(G-F);do{if(K>1.0e-4){Q=1}else{v=K<-1.0e-4;u=v<<31>>31;if(v){Q=u;break}if(g){if(q<L&L<E){C=65;break b}if(E<L&L<q){C=65;break b}else{Q=u;break}}else{if(D<G&G<F){C=65;break b}if(F<G&G<D){C=65;break b}else{Q=u;break}}}}while(0);K=+h[l+(k<<4)>>3];H=+h[l+(k<<4)+8>>3];N=I*(K-E)-M*(H-F);do{if(N>1.0e-4){R=1}else{u=N<-1.0e-4;v=u<<31>>31;if(u){R=v;break}if(g){if(q<K&K<E){C=65;break b}if(E<K&K<q){C=65;break b}else{R=v;break}}else{if(D<H&H<F){C=65;break b}if(F<H&H<D){C=65;break b}else{R=v;break}}}}while(0);N=G-H;S=L-K;U=(q-K)*N-S*(D-H);if(U>1.0e-4){V=1}else{V=(U<-1.0e-4)<<31>>31}U=(E-K)*N-S*(F-H);if(U>1.0e-4){W=1}else{W=(U<-1.0e-4)<<31>>31}if((da(R,Q)|0)<0){if((da(W,V)|0)<=-1){C=65;break b}}f=f+1|0;}while((f|0)<(x|0));if(a){f=q!=E;g=w;do{k=c[m+(g<<2)>>2]|0;U=+h[l+(g<<4)>>3];S=+h[l+(g<<4)+8>>3];N=I*(U-E)-M*(S-F);do{if(N>1.0e-4){X=1}else{v=N<-1.0e-4;u=v<<31>>31;if(v){X=u;break}if(f){if(q<U&U<E){C=65;break b}if(E<U&U<q){C=65;break b}else{X=u;break}}else{if(D<S&S<F){C=65;break b}if(F<S&S<D){C=65;break b}else{X=u;break}}}}while(0);N=+h[l+(k<<4)>>3];H=+h[l+(k<<4)+8>>3];K=I*(N-E)-M*(H-F);do{if(K>1.0e-4){Y=1}else{u=K<-1.0e-4;v=u<<31>>31;if(u){Y=v;break}if(f){if(q<N&N<E){C=65;break b}if(E<N&N<q){C=65;break b}else{Y=v;break}}else{if(D<H&H<F){C=65;break b}if(F<H&H<D){C=65;break b}else{Y=v;break}}}}while(0);K=S-H;L=U-N;G=(q-N)*K-L*(D-H);if(G>1.0e-4){Z=1}else{Z=(G<-1.0e-4)<<31>>31}G=(E-N)*K-L*(F-H);if(G>1.0e-4){_=1}else{_=(G<-1.0e-4)<<31>>31}if((da(Y,X)|0)<0){if((da(_,Z)|0)<=-1){C=65;break b}}g=g+1|0;}while((g|0)<(j|0))}h[p+(b<<3)>>3]=+T(M*M+I*I)}}while(0);if((C|0)==65){C=0;h[p+(b<<3)>>3]=0.0}b=b+1|0;}while((b|0)<(x|0))}if((x|0)<(w|0)){vF(o+(x<<3)|0,0,w-x<<3|0)|0}if((w|0)>=(j|0)){$=p+(j<<3)|0;h[$>>3]=0.0;aa=j+1|0;ba=p+(aa<<3)|0;h[ba>>3]=0.0;i=e;return p|0}D=+h[d>>3];q=+h[d+8>>3];d=w;do{I=+h[l+(d<<4)>>3];M=+h[l+(d<<4)+8>>3];o=c[n+(d<<2)>>2]|0;b=c[m+(d<<2)>>2]|0;F=+h[l+(o<<4)>>3];E=+h[l+(o<<4)+8>>3];G=(I-F)*(q-E)-(M-E)*(D-F);if(G>1.0e-4){ca=1}else{ca=(G<-1.0e-4)<<31>>31}G=q-M;L=+h[l+(b<<4)>>3]-I;K=+h[l+(b<<4)+8>>3]-M;ea=D-I;fa=L*G-K*ea;if(fa>1.0e-4){ga=1}else{ga=(fa<-1.0e-4)<<31>>31>>>31^1}b=(ca|0)>-1;if((E-M)*L-(F-I)*K>1.0e-4){ha=b?ga:0}else{ha=b?1:ga}c:do{if((ha|0)==0){C=123}else{if(B){b=D!=I;o=0;do{Z=c[m+(o<<2)>>2]|0;K=+h[l+(o<<4)>>3];F=+h[l+(o<<4)+8>>3];L=G*(K-I)-ea*(F-M);do{if(L>1.0e-4){ia=1}else{_=L<-1.0e-4;X=_<<31>>31;if(_){ia=X;break}if(b){if(D<K&K<I){C=123;break c}if(I<K&K<D){C=123;break c}else{ia=X;break}}else{if(q<F&F<M){C=123;break c}if(M<F&F<q){C=123;break c}else{ia=X;break}}}}while(0);L=+h[l+(Z<<4)>>3];H=+h[l+(Z<<4)+8>>3];N=G*(L-I)-ea*(H-M);do{if(N>1.0e-4){ja=1}else{X=N<-1.0e-4;_=X<<31>>31;if(X){ja=_;break}if(b){if(D<L&L<I){C=123;break c}if(I<L&L<D){C=123;break c}else{ja=_;break}}else{if(q<H&H<M){C=123;break c}if(M<H&H<q){C=123;break c}else{ja=_;break}}}}while(0);N=F-H;U=K-L;S=(D-L)*N-U*(q-H);if(S>1.0e-4){ka=1}else{ka=(S<-1.0e-4)<<31>>31}S=(I-L)*N-U*(M-H);if(S>1.0e-4){la=1}else{la=(S<-1.0e-4)<<31>>31}if((da(ja,ia)|0)<0){if((da(la,ka)|0)<=-1){C=123;break c}}o=o+1|0;}while((o|0)<(x|0))}o=D!=I;b=w;do{Z=c[m+(b<<2)>>2]|0;S=+h[l+(b<<4)>>3];U=+h[l+(b<<4)+8>>3];N=G*(S-I)-ea*(U-M);do{if(N>1.0e-4){ma=1}else{_=N<-1.0e-4;X=_<<31>>31;if(_){ma=X;break}if(o){if(D<S&S<I){C=123;break c}if(I<S&S<D){C=123;break c}else{ma=X;break}}else{if(q<U&U<M){C=123;break c}if(M<U&U<q){C=123;break c}else{ma=X;break}}}}while(0);N=+h[l+(Z<<4)>>3];H=+h[l+(Z<<4)+8>>3];L=G*(N-I)-ea*(H-M);do{if(L>1.0e-4){na=1}else{X=L<-1.0e-4;_=X<<31>>31;if(X){na=_;break}if(o){if(D<N&N<I){C=123;break c}if(I<N&N<D){C=123;break c}else{na=_;break}}else{if(q<H&H<M){C=123;break c}if(M<H&H<q){C=123;break c}else{na=_;break}}}}while(0);L=U-H;K=S-N;F=(D-N)*L-K*(q-H);if(F>1.0e-4){oa=1}else{oa=(F<-1.0e-4)<<31>>31}F=(I-N)*L-K*(M-H);if(F>1.0e-4){pa=1}else{pa=(F<-1.0e-4)<<31>>31}if((da(na,ma)|0)<0){if((da(pa,oa)|0)<=-1){C=123;break c}}b=b+1|0;}while((b|0)<(j|0));h[p+(d<<3)>>3]=+T(ea*ea+G*G)}}while(0);if((C|0)==123){C=0;h[p+(d<<3)>>3]=0.0}d=d+1|0;}while((d|0)<(j|0));$=p+(j<<3)|0;h[$>>3]=0.0;aa=j+1|0;ba=p+(aa<<3)|0;h[ba>>3]=0.0;i=e;return p|0}function cC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;g=i;h=a;a=i;i=i+16|0;c[a>>2]=c[h>>2];c[a+4>>2]=c[h+4>>2];c[a+8>>2]=c[h+8>>2];c[a+12>>2]=c[h+12>>2];h=d;d=i;i=i+16|0;c[d>>2]=c[h>>2];c[d+4>>2]=c[h+4>>2];c[d+8>>2]=c[h+8>>2];c[d+12>>2]=c[h+12>>2];h=c[f+4>>2]|0;j=c[f+8>>2]|0;k=c[f+16>>2]|0;l=(e|0)<0;a:do{if((b|0)<0){if(l){m=0;break}n=c[f+12>>2]|0;o=0;p=c[n+(e<<2)>>2]|0;q=c[n+(e+1<<2)>>2]|0;r=11}else{if(l){n=c[f+12>>2]|0;o=0;p=c[n+(b<<2)>>2]|0;q=c[n+(b+1<<2)>>2]|0;r=11;break}n=c[f+12>>2]|0;if((b|0)>(e|0)){s=b;t=b;u=e;v=e}else{s=e;t=e;u=b;v=b}w=c[n+(s+1<<2)>>2]|0;x=c[n+(t<<2)>>2]|0;y=c[n+(u+1<<2)>>2]|0;z=c[n+(v<<2)>>2]|0;if((z|0)>0){A=0}else{o=y;p=x;q=w;r=11;break}while(1){n=A+1|0;if(($B(a,d,j+(A<<4)|0,j+(c[k+(A<<2)>>2]<<4)|0)|0)!=0){B=0;break}if((n|0)<(z|0)){A=n}else{o=y;p=x;q=w;r=11;break a}}i=g;return B|0}}while(0);b:do{if((r|0)==11){if((o|0)<(p|0)){C=o}else{m=q;break}while(1){A=C+1|0;if(($B(a,d,j+(C<<4)|0,j+(c[k+(C<<2)>>2]<<4)|0)|0)!=0){B=0;break}if((A|0)<(p|0)){C=A}else{m=q;break b}}i=g;return B|0}}while(0);if((m|0)<(h|0)){D=m}else{B=1;i=g;return B|0}while(1){m=D+1|0;if(($B(a,d,j+(D<<4)|0,j+(c[k+(D<<2)>>2]<<4)|0)|0)!=0){B=0;r=18;break}if((m|0)<(h|0)){D=m}else{B=1;r=18;break}}if((r|0)==18){i=g;return B|0}return 0}function dC(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;f=i;i=i+2048|0;g=e;e=i;i=i+32|0;tF(e,g,32)|0;g=f|0;j=f+1024|0;k=b+16|0;b=c[248+(c[(c[k>>2]|0)+12>>2]<<2)>>2]|0;Lv(b,153400)|0;l=+h[e>>3];m=e+8|0;eC(b,l,+h[m>>3]);n=j|0;nb(n|0,107520,(o=i,i=i+8|0,h[o>>3]=+h[e+16>>3]-l,o)|0)|0;i=o;p=gb(n|0,46)|0;do{if((p|0)==0){q=j+(xF(n|0)|0)|0}else{r=p;while(1){s=r+1|0;if((a[s]|0)==0){t=r;break}else{r=s}}while(1){r=a[t]|0;if((r<<24>>24|0)==46){u=5;break}else if((r<<24>>24|0)!=48){u=6;break}a[t]=0;t=t-1|0}if((u|0)==5){a[t]=0;q=t;break}else if((u|0)==6){q=t+1|0;break}}}while(0);a[q]=32;a[q+1|0]=0;Lv(b,n)|0;nb(n|0,107520,(o=i,i=i+8|0,h[o>>3]=+h[e+24>>3]- +h[m>>3],o)|0)|0;i=o;m=gb(n|0,46)|0;do{if((m|0)==0){v=j+(xF(n|0)|0)|0}else{e=m;while(1){q=e+1|0;if((a[q]|0)==0){w=e;break}else{e=q}}while(1){e=a[w]|0;if((e<<24>>24|0)==46){u=12;break}else if((e<<24>>24|0)!=48){u=13;break}a[w]=0;w=w-1|0}if((u|0)==12){a[w]=0;v=w;break}else if((u|0)==13){v=w+1|0;break}}}while(0);a[v]=32;a[v+1|0]=0;Lv(b,n)|0;n=c[d+8>>2]|0;d=c[248+(c[(c[k>>2]|0)+12>>2]<<2)>>2]|0;k=g|0;g=xF(n|0)|0;nb(k|0,121624,(o=i,i=i+16|0,c[o>>2]=213464,c[o+8>>2]=g,o)|0)|0;i=o;Lv(d,k)|0;Lv(d,n)|0;n=d+4|0;k=c[n>>2]|0;if(k>>>0<(c[d+8>>2]|0)>>>0){x=k;y=x+1|0;c[n>>2]=y;a[x]=32;z=1024;A=0;i=f;return}Jv(d,1)|0;x=c[n>>2]|0;y=x+1|0;c[n>>2]=y;a[x]=32;z=1024;A=0;i=f;return}function eC(b,c,d){b=b|0;c=+c;d=+d;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;i=i+1024|0;f=e|0;g=f|0;nb(g|0,107520,(j=i,i=i+8|0,h[j>>3]=c,j)|0)|0;i=j;k=gb(g|0,46)|0;do{if((k|0)==0){l=f+(xF(g|0)|0)|0}else{m=k;while(1){n=m+1|0;if((a[n]|0)==0){o=m;break}else{m=n}}while(1){m=a[o]|0;if((m<<24>>24|0)==46){p=5;break}else if((m<<24>>24|0)!=48){p=6;break}a[o]=0;o=o-1|0}if((p|0)==5){a[o]=0;l=o;break}else if((p|0)==6){l=o+1|0;break}}}while(0);a[l]=32;a[l+1|0]=0;Lv(b,g)|0;c=+wk(d);nb(g|0,107520,(j=i,i=i+8|0,h[j>>3]=c,j)|0)|0;i=j;j=gb(g|0,46)|0;do{if((j|0)==0){q=f+(xF(g|0)|0)|0}else{l=j;while(1){o=l+1|0;if((a[o]|0)==0){r=l;break}else{l=o}}while(1){l=a[r]|0;if((l<<24>>24|0)==46){p=12;break}else if((l<<24>>24|0)!=48){p=13;break}a[r]=0;r=r-1|0}if((p|0)==12){a[r]=0;q=r;break}else if((p|0)==13){q=r+1|0;break}}}while(0);a[q]=32;a[q+1|0]=0;Lv(b,g)|0;i=e;return}function fC(d){d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=i;i=i+1040|0;f=e|0;g=e+1024|0;h=e+1032|0;j=c[(c[d+16>>2]|0)+8>>2]|0;k=d+64|0;switch(c[k>>2]|0){case 1:{if((b[(c[j+8>>2]|0)+128>>1]&1)==0){i=e;return}dn(j);i=e;return};case 6:case 5:case 4:{zk(j,h,g);d=c[h>>2]|0;h=c[g>>2]|0;g=c[k>>2]|0;k=dF(8240)|0;c[43614]=k;a:do{if((g|0)==5){b[k+8232>>1]=12;c[k+8236>>2]=113088}else if((g|0)==6){b[k+8232>>1]=14;c[k+8236>>2]=113640}else{l=ew(j|0,114376)|0;do{if((l|0)!=0){if((a[l]|0)==0){break}m=f|0;n=0;o=l;b:while(1){p=o;while(1){q=p+1|0;r=a[p]|0;if(r<<24>>24==0){break b}if(((r<<24>>24)-48|0)>>>0<10>>>0){break}else{p=q}}if((n|0)>=1023){s=16;break}a[f+n|0]=r;n=n+1|0;o=q}if((s|0)==16){Fv(0,108536,(t=i,i=i+8|0,c[t>>2]=l,t)|0)|0;i=t}a[f+n|0]=0;o=(Rb(m|0)|0)&65535;if((o&65535)>>>0<=10>>>0){break}b[(c[43614]|0)+8232>>1]=o;c[(c[43614]|0)+8236>>2]=l;break a}}while(0);l=f|0;o=0;p=112568;c:while(1){u=p;while(1){v=u+1|0;w=a[u]|0;if(w<<24>>24==0){break c}if(((w<<24>>24)-48|0)>>>0<10>>>0){break}else{u=v}}if((o|0)>=1023){s=25;break}a[f+o|0]=w;o=o+1|0;p=v}if((s|0)==25){Fv(0,108536,(t=i,i=i+8|0,c[t>>2]=112568,t)|0)|0;i=t}a[f+o|0]=0;p=(Rb(l|0)|0)&65535;b[(c[43614]|0)+8232>>1]=p;c[(c[43614]|0)+8236>>2]=112568}}while(0);f=j+8|0;if((c[(c[f>>2]|0)+172>>2]|0)==0){c[c[43614]>>2]=0}else{t=en(j,0,115752,213464)|0;c[c[43614]>>2]=t}if((a[(c[f>>2]|0)+113|0]&8)==0){c[(c[43614]|0)+4>>2]=0}else{t=en(j,0,112048,213464)|0;c[(c[43614]|0)+4>>2]=t}t=en(j,1,115752,213464)|0;c[(c[43614]|0)+8>>2]=t;t=en(j,1,112048,213464)|0;c[(c[43614]|0)+12>>2]=t;t=en(j,2,115752,213464)|0;c[(c[43614]|0)+16>>2]=t;if((h|0)==0){c[(c[43614]|0)+20>>2]=0}else{h=en(j,2,111448,213464)|0;c[(c[43614]|0)+20>>2]=h}if((d|0)==0){c[(c[43614]|0)+24>>2]=0}else{d=en(j,2,110704,213464)|0;c[(c[43614]|0)+24>>2]=d}if((a[(c[f>>2]|0)+113|0]&33)==0){c[(c[43614]|0)+28>>2]=0}else{d=en(j,2,112048,213464)|0;c[(c[43614]|0)+28>>2]=d}if((a[(c[f>>2]|0)+113|0]&2)==0){c[(c[43614]|0)+32>>2]=0}else{d=en(j,2,110056,213464)|0;c[(c[43614]|0)+32>>2]=d}if((a[(c[f>>2]|0)+113|0]&4)==0){c[(c[43614]|0)+36>>2]=0}else{f=en(j,2,109368,213464)|0;c[(c[43614]|0)+36>>2]=f}Iv(174464,1024,(c[43614]|0)+40|0);Iv(174480,1024,(c[43614]|0)+1064|0);Iv(174496,1024,(c[43614]|0)+2088|0);Iv(174512,1024,(c[43614]|0)+3112|0);Iv(174528,1024,(c[43614]|0)+4136|0);Iv(174544,1024,(c[43614]|0)+5160|0);Iv(174560,1024,(c[43614]|0)+6184|0);Iv(174576,1024,(c[43614]|0)+7208|0);i=e;return};case 0:{Ck(j);i=e;return};default:{i=e;return}}}function gC(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=c[(c[b+16>>2]|0)+8>>2]|0;if((c[45182]|0)==0){c[45182]=c[43564];c[45183]=30;c[45184]=34}e=d+52|0;f=(c[e>>2]|0)+8|0;g=c[f>>2]|0;c[f>>2]=180728;switch(c[b+64>>2]|0){case 0:case 1:{if((c[b+152>>2]&134217728|0)!=0){i=c[e>>2]|0;j=i+8|0;c[j>>2]=g;return}Fy(d,b)|0;i=c[e>>2]|0;j=i+8|0;c[j>>2]=g;return};case 2:{xk(b,d,b,0);i=c[e>>2]|0;j=i+8|0;c[j>>2]=g;return};case 3:{xk(b,d,b,1);i=c[e>>2]|0;j=i+8|0;c[j>>2]=g;return};case 4:case 5:case 6:{f=c[43617]|0;if((f|0)==(c[43616]|0)){k=d|0}else{l=c[c[43614]>>2]|0;if((l|0)==0){m=en(d,0,115752,213464)|0;c[c[43614]>>2]=m;n=c[c[43614]>>2]|0;o=c[43617]|0}else{n=l;o=f}f=d|0;if(o>>>0<(c[43618]|0)>>>0){p=o}else{Jv(174464,1)|0;p=c[43617]|0}a[p]=0;p=c[43616]|0;c[43617]=p;hw(f,n,p)|0;k=f}if((c[(c[d+8>>2]|0)+12>>2]|0)!=0){f=c[(c[43614]|0)+4>>2]|0;p=c[43633]|0;if(p>>>0<(c[43634]|0)>>>0){q=p}else{Jv(174528,1)|0;q=c[43633]|0}a[q]=0;q=c[43632]|0;c[43633]=q;hw(k,f,q)|0}iw(k,114376,c[(c[43614]|0)+8236>>2]|0,213464)|0;Mv(174464);Mv(174480);Mv(174496);Mv(174512);Mv(174528);Mv(174544);Mv(174560);Mv(174576);eF(c[43614]|0);h[1836]=1.0;h[1840]=1.0;c[43682]=0;c[43686]=0;if((c[b+152>>2]&134217728|0)!=0){i=c[e>>2]|0;j=i+8|0;c[j>>2]=g;return}Fy(d,b)|0;i=c[e>>2]|0;j=i+8|0;c[j>>2]=g;return};default:{i=c[e>>2]|0;j=i+8|0;c[j>>2]=g;return}}}function hC(b){b=b|0;var d=0,e=0,f=0,g=0,i=0;d=c[(c[b+16>>2]|0)+8>>2]|0;b=d|0;e=c[c[43614]>>2]|0;f=c[43621]|0;if(f>>>0<(c[43622]|0)>>>0){g=f}else{Jv(174480,1)|0;g=c[43621]|0}a[g]=0;g=c[43620]|0;c[43621]=g;hw(b,e,g)|0;if((c[(c[d+8>>2]|0)+12>>2]|0)==0){h[1837]=1.0;h[1841]=1.0;c[43683]=0;c[43687]=0;return}d=c[(c[43614]|0)+4>>2]|0;g=c[43637]|0;if(g>>>0<(c[43638]|0)>>>0){i=g}else{Jv(174544,1)|0;i=c[43637]|0}a[i]=0;i=c[43636]|0;c[43637]=i;hw(b,d,i)|0;h[1837]=1.0;h[1841]=1.0;c[43683]=0;c[43687]=0;return}function iC(b){b=b|0;var d=0,e=0,f=0,g=0;d=c[(c[b+16>>2]|0)+8>>2]|0;b=c[43621]|0;if((b|0)!=(c[43620]|0)){e=c[(c[43614]|0)+8>>2]|0;if(b>>>0<(c[43622]|0)>>>0){f=b}else{Jv(174480,1)|0;f=c[43621]|0}a[f]=0;f=c[43620]|0;c[43621]=f;hw(d|0,e,f)|0}f=c[43637]|0;if((f|0)==(c[43636]|0)){h[1844]=1.0;h[1846]=1.0;c[43690]=0;c[43692]=0;return}e=c[(c[43614]|0)+12>>2]|0;if(f>>>0<(c[43638]|0)>>>0){g=f}else{Jv(174544,1)|0;g=c[43637]|0}a[g]=0;g=c[43636]|0;c[43637]=g;hw(d|0,e,g)|0;h[1844]=1.0;h[1846]=1.0;c[43690]=0;c[43692]=0;return}function jC(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;d=c[(c[b+16>>2]|0)+8>>2]|0;b=c[43621]|0;if((b|0)!=(c[43620]|0)){e=c[(c[43614]|0)+16>>2]|0;if(b>>>0<(c[43622]|0)>>>0){f=b}else{Jv(174480,1)|0;f=c[43621]|0}a[f]=0;f=c[43620]|0;c[43621]=f;hw(d|0,e,f)|0}f=c[43625]|0;if((f|0)!=(c[43624]|0)){e=c[(c[43614]|0)+24>>2]|0;if(f>>>0<(c[43626]|0)>>>0){g=f}else{Jv(174496,1)|0;g=c[43625]|0}a[g]=0;g=c[43624]|0;c[43625]=g;hw(d|0,e,g)|0}g=c[43629]|0;if((g|0)!=(c[43628]|0)){e=c[(c[43614]|0)+20>>2]|0;if(g>>>0<(c[43630]|0)>>>0){i=g}else{Jv(174512,1)|0;i=c[43629]|0}a[i]=0;i=c[43628]|0;c[43629]=i;hw(d|0,e,i)|0}i=c[43637]|0;if((i|0)!=(c[43636]|0)){e=c[(c[43614]|0)+28>>2]|0;if(i>>>0<(c[43638]|0)>>>0){j=i}else{Jv(174544,1)|0;j=c[43637]|0}a[j]=0;j=c[43636]|0;c[43637]=j;hw(d|0,e,j)|0}j=c[43641]|0;if((j|0)!=(c[43640]|0)){e=c[(c[43614]|0)+36>>2]|0;if(j>>>0<(c[43642]|0)>>>0){k=j}else{Jv(174560,1)|0;k=c[43641]|0}a[k]=0;k=c[43640]|0;c[43641]=k;hw(d|0,e,k)|0}k=c[43645]|0;if((k|0)==(c[43644]|0)){h[1845]=1.0;h[1847]=1.0;h[1838]=1.0;h[1839]=1.0;h[1842]=1.0;h[1843]=1.0;c[43691]=0;c[43693]=0;c[43684]=0;c[43685]=0;c[43688]=0;c[43689]=0;return}e=c[(c[43614]|0)+32>>2]|0;if(k>>>0<(c[43646]|0)>>>0){l=k}else{Jv(174576,1)|0;l=c[43645]|0}a[l]=0;l=c[43644]|0;c[43645]=l;hw(d|0,e,l)|0;h[1845]=1.0;h[1847]=1.0;h[1838]=1.0;h[1839]=1.0;h[1842]=1.0;h[1843]=1.0;c[43691]=0;c[43693]=0;c[43684]=0;c[43685]=0;c[43688]=0;c[43689]=0;return}function kC(e,f,g){e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0;j=i;i=i+3072|0;k=f;f=i;i=i+16|0;c[f>>2]=c[k>>2];c[f+4>>2]=c[k+4>>2];c[f+8>>2]=c[k+8>>2];c[f+12>>2]=c[k+12>>2];k=j|0;l=j+1024|0;m=j+2048|0;n=e+16|0;e=c[(c[n>>2]|0)+12>>2]|0;o=c[248+(e<<2)>>2]|0;Lv(o,119184)|0;p=m|0;q=g+4|0;nb(p|0,107520,(r=i,i=i+8|0,h[r>>3]=+h[(c[q>>2]|0)+16>>3],r)|0)|0;i=r;s=gb(p|0,46)|0;do{if((s|0)==0){t=m+(xF(p|0)|0)|0}else{u=s;while(1){v=u+1|0;if((a[v]|0)==0){w=u;break}else{u=v}}while(1){u=a[w]|0;if((u<<24>>24|0)==46){x=5;break}else if((u<<24>>24|0)!=48){x=6;break}a[w]=0;w=w-1|0}if((x|0)==5){a[w]=0;t=w;break}else if((x|0)==6){t=w+1|0;break}}}while(0);a[t]=32;a[t+1|0]=0;Lv(o,p)|0;t=c[c[q>>2]>>2]|0;w=c[248+(c[(c[n>>2]|0)+12>>2]<<2)>>2]|0;s=l|0;l=xF(t|0)|0;nb(s|0,121624,(r=i,i=i+16|0,c[r>>2]=213464,c[r+8>>2]=l,r)|0)|0;i=r;Lv(w,s)|0;Lv(w,t)|0;t=w+4|0;l=c[t>>2]|0;if(l>>>0<(c[w+8>>2]|0)>>>0){y=l}else{Jv(w,1)|0;y=c[t>>2]|0}c[t>>2]=y+1;a[y]=32;y=(c[n>>2]|0)+16|0;t=a[y+3|0]|0;w=d[y]|0;l=d[y+1|0]|0;u=d[y+2|0]|0;if(t<<24>>24==-1){nb(180832,150832,(r=i,i=i+24|0,c[r>>2]=w,c[r+8>>2]=l,c[r+16>>2]=u,r)|0)|0;i=r}else{nb(180832,147960,(r=i,i=i+32|0,c[r>>2]=w,c[r+8>>2]=l,c[r+16>>2]=u,c[r+24>>2]=t&255,r)|0)|0;i=r}t=c[248+(c[(c[n>>2]|0)+12>>2]<<2)>>2]|0;u=k|0;k=xF(180832)|0;nb(u|0,121624,(r=i,i=i+16|0,c[r>>2]=154040,c[r+8>>2]=k,r)|0)|0;i=r;Lv(t,u)|0;Lv(t,180832)|0;u=t+4|0;k=c[u>>2]|0;if(k>>>0<(c[t+8>>2]|0)>>>0){z=k}else{Jv(t,1)|0;z=c[u>>2]|0}c[u>>2]=z+1;a[z]=32;z=a[g+48|0]|0;if((z|0)==114){A=1}else if((z|0)==108){A=-1}else{A=0}z=c[q>>2]|0;if((z|0)==0){B=0}else{B=c[z+24>>2]<<25>>25}z=b[(c[43614]|0)+8232>>1]|0;do{if((z&65535)>>>0>14>>>0){q=((z&65535)>>>0>15>>>0?63:31)&B;u=174728+(e<<2)|0;if((c[u>>2]|0)==(q|0)){break}nb(p|0,118560,(r=i,i=i+8|0,c[r>>2]=q,r)|0)|0;i=r;Lv(o,p)|0;c[u>>2]=q}}while(0);e=f+8|0;C=+h[g+24>>3]+ +h[e>>3];h[e>>3]=C;Lv(o,117608)|0;eC(o,+h[f>>3],C);nb(p|0,116688,(r=i,i=i+8|0,c[r>>2]=A,r)|0)|0;i=r;Lv(o,p)|0;nb(p|0,107520,(r=i,i=i+8|0,h[r>>3]=+h[g+32>>3],r)|0)|0;i=r;A=gb(p|0,46)|0;do{if((A|0)==0){D=m+(xF(p|0)|0)|0}else{f=A;while(1){e=f+1|0;if((a[e]|0)==0){E=f;break}else{f=e}}while(1){f=a[E]|0;if((f<<24>>24|0)==46){x=27;break}else if((f<<24>>24|0)!=48){x=28;break}a[E]=0;E=E-1|0}if((x|0)==27){a[E]=0;D=E;break}else if((x|0)==28){D=E+1|0;break}}}while(0);a[D]=32;a[D+1|0]=0;Lv(o,p)|0;p=c[g>>2]|0;g=c[248+(c[(c[n>>2]|0)+12>>2]<<2)>>2]|0;n=xF(p|0)|0;nb(s|0,121624,(r=i,i=i+16|0,c[r>>2]=213464,c[r+8>>2]=n,r)|0)|0;i=r;Lv(g,s)|0;Lv(g,p)|0;p=g+4|0;s=c[p>>2]|0;if(s>>>0<(c[g+8>>2]|0)>>>0){F=s;G=F+1|0;c[p>>2]=G;a[F]=32;H=1024;I=0;i=j;return}Jv(g,1)|0;F=c[p>>2]|0;G=F+1|0;c[p>>2]=G;a[F]=32;H=1024;I=0;i=j;return}function lC(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;g=i;i=i+3072|0;j=g|0;k=g+2048|0;l=b+16|0;m=c[(c[l>>2]|0)+12>>2]|0;pC(b);n=(c[l>>2]|0)+16|0;o=a[n+3|0]|0;p=d[n]|0;q=d[n+1|0]|0;r=d[n+2|0]|0;if(o<<24>>24==-1){nb(180832,150832,(s=i,i=i+24|0,c[s>>2]=p,c[s+8>>2]=q,c[s+16>>2]=r,s)|0)|0;i=s}else{nb(180832,147960,(s=i,i=i+32|0,c[s>>2]=p,c[s+8>>2]=q,c[s+16>>2]=r,c[s+24>>2]=o&255,s)|0)|0;i=s}o=c[248+(c[(c[l>>2]|0)+12>>2]<<2)>>2]|0;r=g+1024|0;q=xF(180832)|0;nb(r|0,121624,(s=i,i=i+16|0,c[s>>2]=154040,c[s+8>>2]=q,s)|0)|0;i=s;Lv(o,r)|0;Lv(o,180832)|0;r=o+4|0;q=c[r>>2]|0;if(q>>>0<(c[o+8>>2]|0)>>>0){t=q}else{Jv(o,1)|0;t=c[r>>2]|0}c[r>>2]=t+1;a[t]=32;if((f|0)==0){t=c[248+(m<<2)>>2]|0;Lv(t,120024)|0;u=t}else{if((f&-2|0)==2){qC(b,f,e,2)}else{f=(c[l>>2]|0)+56|0;b=a[f+3|0]|0;t=d[f]|0;r=d[f+1|0]|0;o=d[f+2|0]|0;if(b<<24>>24==-1){nb(180832,150832,(s=i,i=i+24|0,c[s>>2]=t,c[s+8>>2]=r,c[s+16>>2]=o,s)|0)|0;i=s}else{nb(180832,147960,(s=i,i=i+32|0,c[s>>2]=t,c[s+8>>2]=r,c[s+16>>2]=o,c[s+24>>2]=b&255,s)|0)|0;i=s}b=c[248+(c[(c[l>>2]|0)+12>>2]<<2)>>2]|0;l=j|0;j=xF(180832)|0;nb(l|0,121624,(s=i,i=i+16|0,c[s>>2]=128936,c[s+8>>2]=j,s)|0)|0;i=s;Lv(b,l)|0;Lv(b,180832)|0;l=b+4|0;j=c[l>>2]|0;if(j>>>0<(c[b+8>>2]|0)>>>0){v=j}else{Jv(b,1)|0;v=c[l>>2]|0}c[l>>2]=v+1;a[v]=32;}v=c[248+(m<<2)>>2]|0;Lv(v,120792)|0;u=v}v=e|0;m=e+8|0;eC(u,+h[v>>3],+h[m>>3]);l=k|0;nb(l|0,107520,(s=i,i=i+8|0,h[s>>3]=+h[e+16>>3]- +h[v>>3],s)|0)|0;i=s;v=gb(l|0,46)|0;do{if((v|0)==0){w=k+(xF(l|0)|0)|0}else{b=v;while(1){j=b+1|0;if((a[j]|0)==0){x=b;break}else{b=j}}while(1){b=a[x]|0;if((b<<24>>24|0)==46){y=21;break}else if((b<<24>>24|0)!=48){y=22;break}a[x]=0;x=x-1|0}if((y|0)==21){a[x]=0;w=x;break}else if((y|0)==22){w=x+1|0;break}}}while(0);a[w]=32;a[w+1|0]=0;Lv(u,l)|0;nb(l|0,107520,(s=i,i=i+8|0,h[s>>3]=+h[e+24>>3]- +h[m>>3],s)|0)|0;i=s;s=gb(l|0,46)|0;if((s|0)==0){z=k+(xF(l|0)|0)|0;A=z+1|0;a[z]=32;a[A]=0;B=Lv(u,l)|0;i=g;return}else{C=s}while(1){s=C+1|0;if((a[s]|0)==0){D=C;break}else{C=s}}while(1){C=a[D]|0;if((C<<24>>24|0)==46){y=28;break}else if((C<<24>>24|0)!=48){y=29;break}a[D]=0;D=D-1|0}if((y|0)==28){a[D]=0;z=D;A=z+1|0;a[z]=32;a[A]=0;B=Lv(u,l)|0;i=g;return}else if((y|0)==29){z=D+1|0;A=z+1|0;a[z]=32;a[A]=0;B=Lv(u,l)|0;i=g;return}}function mC(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;j=i;i=i+3072|0;k=j|0;l=j+2048|0;pC(b);m=b+16|0;n=(c[m>>2]|0)+16|0;o=a[n+3|0]|0;p=d[n]|0;q=d[n+1|0]|0;r=d[n+2|0]|0;if(o<<24>>24==-1){nb(180832,150832,(s=i,i=i+24|0,c[s>>2]=p,c[s+8>>2]=q,c[s+16>>2]=r,s)|0)|0;i=s}else{nb(180832,147960,(s=i,i=i+32|0,c[s>>2]=p,c[s+8>>2]=q,c[s+16>>2]=r,c[s+24>>2]=o&255,s)|0)|0;i=s}o=c[248+(c[(c[m>>2]|0)+12>>2]<<2)>>2]|0;r=j+1024|0;q=xF(180832)|0;nb(r|0,121624,(s=i,i=i+16|0,c[s>>2]=154040,c[s+8>>2]=q,s)|0)|0;i=s;Lv(o,r)|0;Lv(o,180832)|0;r=o+4|0;q=c[r>>2]|0;if(q>>>0<(c[o+8>>2]|0)>>>0){t=q}else{Jv(o,1)|0;t=c[r>>2]|0}c[r>>2]=t+1;a[t]=32;if((g|0)==0){t=l|0;r=c[248+(c[(c[m>>2]|0)+12>>2]<<2)>>2]|0;o=r+4|0;q=c[o>>2]|0;if(q>>>0<(c[r+8>>2]|0)>>>0){u=q}else{Jv(r,1)|0;u=c[o>>2]|0}c[o>>2]=u+1;a[u]=112;nb(t|0,157816,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s;Lv(r,t)|0;if((f|0)>0){v=0}else{i=j;return}do{eC(r,+h[e+(v<<4)>>3],+h[e+(v<<4)+8>>3]);v=v+1|0;}while((v|0)<(f|0));i=j;return}if((g&-2|0)==2){qC(b,g,e,f)}else{g=(c[m>>2]|0)+56|0;b=a[g+3|0]|0;v=d[g]|0;r=d[g+1|0]|0;t=d[g+2|0]|0;if(b<<24>>24==-1){nb(180832,150832,(s=i,i=i+24|0,c[s>>2]=v,c[s+8>>2]=r,c[s+16>>2]=t,s)|0)|0;i=s}else{nb(180832,147960,(s=i,i=i+32|0,c[s>>2]=v,c[s+8>>2]=r,c[s+16>>2]=t,c[s+24>>2]=b&255,s)|0)|0;i=s}b=c[248+(c[(c[m>>2]|0)+12>>2]<<2)>>2]|0;t=k|0;k=xF(180832)|0;nb(t|0,121624,(s=i,i=i+16|0,c[s>>2]=128936,c[s+8>>2]=k,s)|0)|0;i=s;Lv(b,t)|0;Lv(b,180832)|0;t=b+4|0;k=c[t>>2]|0;if(k>>>0<(c[b+8>>2]|0)>>>0){w=k}else{Jv(b,1)|0;w=c[t>>2]|0}c[t>>2]=w+1;a[w]=32;}w=l|0;l=c[248+(c[(c[m>>2]|0)+12>>2]<<2)>>2]|0;m=l+4|0;t=c[m>>2]|0;if(t>>>0<(c[l+8>>2]|0)>>>0){x=t}else{Jv(l,1)|0;x=c[m>>2]|0}c[m>>2]=x+1;a[x]=80;nb(w|0,157816,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s;Lv(l,w)|0;if((f|0)>0){y=0}else{i=j;return}do{eC(l,+h[e+(y<<4)>>3],+h[e+(y<<4)+8>>3]);y=y+1|0;}while((y|0)<(f|0));i=j;return}function nC(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;j=i;i=i+3072|0;g=j|0;l=j+2048|0;pC(b);m=b+16|0;n=(c[m>>2]|0)+16|0;o=a[n+3|0]|0;p=d[n]|0;q=d[n+1|0]|0;r=d[n+2|0]|0;if(o<<24>>24==-1){nb(180832,150832,(s=i,i=i+24|0,c[s>>2]=p,c[s+8>>2]=q,c[s+16>>2]=r,s)|0)|0;i=s}else{nb(180832,147960,(s=i,i=i+32|0,c[s>>2]=p,c[s+8>>2]=q,c[s+16>>2]=r,c[s+24>>2]=o&255,s)|0)|0;i=s}o=c[248+(c[(c[m>>2]|0)+12>>2]<<2)>>2]|0;r=j+1024|0;q=xF(180832)|0;nb(r|0,121624,(s=i,i=i+16|0,c[s>>2]=154040,c[s+8>>2]=q,s)|0)|0;i=s;Lv(o,r)|0;Lv(o,180832)|0;r=o+4|0;q=c[r>>2]|0;if(q>>>0<(c[o+8>>2]|0)>>>0){t=q}else{Jv(o,1)|0;t=c[r>>2]|0}c[r>>2]=t+1;a[t]=32;if((k|0)==0){t=l|0;r=c[248+(c[(c[m>>2]|0)+12>>2]<<2)>>2]|0;o=r+4|0;q=c[o>>2]|0;if(q>>>0<(c[r+8>>2]|0)>>>0){u=q}else{Jv(r,1)|0;u=c[o>>2]|0}c[o>>2]=u+1;a[u]=66;nb(t|0,157816,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s;Lv(r,t)|0;if((f|0)>0){v=0}else{i=j;return}do{eC(r,+h[e+(v<<4)>>3],+h[e+(v<<4)+8>>3]);v=v+1|0;}while((v|0)<(f|0));i=j;return}if((k&-2|0)==2){qC(b,k,e,f)}else{k=(c[m>>2]|0)+56|0;b=a[k+3|0]|0;v=d[k]|0;r=d[k+1|0]|0;t=d[k+2|0]|0;if(b<<24>>24==-1){nb(180832,150832,(s=i,i=i+24|0,c[s>>2]=v,c[s+8>>2]=r,c[s+16>>2]=t,s)|0)|0;i=s}else{nb(180832,147960,(s=i,i=i+32|0,c[s>>2]=v,c[s+8>>2]=r,c[s+16>>2]=t,c[s+24>>2]=b&255,s)|0)|0;i=s}b=c[248+(c[(c[m>>2]|0)+12>>2]<<2)>>2]|0;t=g|0;g=xF(180832)|0;nb(t|0,121624,(s=i,i=i+16|0,c[s>>2]=128936,c[s+8>>2]=g,s)|0)|0;i=s;Lv(b,t)|0;Lv(b,180832)|0;t=b+4|0;g=c[t>>2]|0;if(g>>>0<(c[b+8>>2]|0)>>>0){w=g}else{Jv(b,1)|0;w=c[t>>2]|0}c[t>>2]=w+1;a[w]=32;}w=l|0;l=c[248+(c[(c[m>>2]|0)+12>>2]<<2)>>2]|0;m=l+4|0;t=c[m>>2]|0;if(t>>>0<(c[l+8>>2]|0)>>>0){x=t}else{Jv(l,1)|0;x=c[m>>2]|0}c[m>>2]=x+1;a[x]=98;nb(w|0,157816,(s=i,i=i+8|0,c[s>>2]=f,s)|0)|0;i=s;Lv(l,w)|0;if((f|0)>0){y=0}else{i=j;return}do{eC(l,+h[e+(y<<4)>>3],+h[e+(y<<4)+8>>3]);y=y+1|0;}while((y|0)<(f|0));i=j;return}function oC(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;g=i;i=i+2048|0;pC(b);j=b+16|0;b=(c[j>>2]|0)+16|0;k=a[b+3|0]|0;l=d[b]|0;m=d[b+1|0]|0;n=d[b+2|0]|0;if(k<<24>>24==-1){nb(180832,150832,(o=i,i=i+24|0,c[o>>2]=l,c[o+8>>2]=m,c[o+16>>2]=n,o)|0)|0;i=o}else{nb(180832,147960,(o=i,i=i+32|0,c[o>>2]=l,c[o+8>>2]=m,c[o+16>>2]=n,c[o+24>>2]=k&255,o)|0)|0;i=o}k=c[248+(c[(c[j>>2]|0)+12>>2]<<2)>>2]|0;n=g|0;m=xF(180832)|0;nb(n|0,121624,(o=i,i=i+16|0,c[o>>2]=154040,c[o+8>>2]=m,o)|0)|0;i=o;Lv(k,n)|0;Lv(k,180832)|0;n=k+4|0;m=c[n>>2]|0;if(m>>>0<(c[k+8>>2]|0)>>>0){p=m}else{Jv(k,1)|0;p=c[n>>2]|0}c[n>>2]=p+1;a[p]=32;p=g+1024|0;n=c[248+(c[(c[j>>2]|0)+12>>2]<<2)>>2]|0;j=n+4|0;k=c[j>>2]|0;if(k>>>0<(c[n+8>>2]|0)>>>0){q=k}else{Jv(n,1)|0;q=c[j>>2]|0}c[j>>2]=q+1;a[q]=76;nb(p|0,157816,(o=i,i=i+8|0,c[o>>2]=f,o)|0)|0;i=o;Lv(n,p)|0;if((f|0)>0){r=0}else{s=1024;t=0;i=g;return}do{eC(n,+h[e+(r<<4)>>3],+h[e+(r<<4)+8>>3]);r=r+1|0;}while((r|0)<(f|0));s=1024;t=0;i=g;return}function pC(b){b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;d=i;i=i+2192|0;e=d|0;f=d+2176|0;Iv(f,1024,d+1024|0);g=b+16|0;b=c[g>>2]|0;j=+h[b+152>>3];k=14688+(c[b+12>>2]<<3)|0;if(j!=+h[k>>3]){h[k>>3]=j;Lv(f,144824)|0;k=d+2048|0;nb(k|0,141888,(l=i,i=i+8|0,h[l>>3]=+h[(c[g>>2]|0)+152>>3],l)|0)|0;i=l;m=gb(k|0,46)|0;a:do{if((m|0)!=0){n=m;while(1){o=n+1|0;if((a[o]|0)==0){p=n;break}else{n=o}}while(1){n=a[p]|0;if((n<<24>>24|0)==46){break}else if((n<<24>>24|0)!=48){break a}a[p]=0;p=p-1|0}a[p]=0}}while(0);Lv(f,k)|0;k=f+4|0;p=c[k>>2]|0;m=f+8|0;if(p>>>0<(c[m>>2]|0)>>>0){q=p}else{Jv(f,1)|0;q=c[k>>2]|0}c[k>>2]=q+1;a[q]=41;q=c[k>>2]|0;if(q>>>0<(c[m>>2]|0)>>>0){r=q}else{Jv(f,1)|0;r=c[k>>2]|0}a[r]=0;r=c[f>>2]|0;c[k>>2]=r;k=c[248+(c[(c[g>>2]|0)+12>>2]<<2)>>2]|0;q=e|0;m=xF(r|0)|0;nb(q|0,121624,(l=i,i=i+16|0,c[l>>2]=138744,c[l+8>>2]=m,l)|0)|0;i=l;Lv(k,q)|0;Lv(k,r)|0;r=k+4|0;q=c[r>>2]|0;if(q>>>0<(c[k+8>>2]|0)>>>0){s=q}else{Jv(k,1)|0;s=c[r>>2]|0}c[r>>2]=s+1;a[s]=32;t=c[g>>2]|0}else{t=b}b=c[t+160>>2]|0;if((b|0)==0){i=d;return}t=c[b>>2]|0;if((t|0)!=0){s=f+4|0;r=f+8|0;k=f|0;q=e|0;e=b;b=t;do{e=e+4|0;t=a[b]|0;if((t<<24>>24|0)==98){if((Ya(b|0,133480)|0)!=0){u=21}}else if((t<<24>>24|0)==102){if((Ya(b|0,136176)|0)!=0){u=21}}else if((t<<24>>24|0)==115){if((Ya(b|0,131360)|0)!=0){u=21}}else{u=21}if((u|0)==21){u=0;Lv(f,b)|0;t=b;while(1){v=t+1|0;if((a[t]|0)==0){break}else{t=v}}if((a[v]|0)!=0){t=c[s>>2]|0;if(t>>>0<(c[r>>2]|0)>>>0){w=t}else{Jv(f,1)|0;w=c[s>>2]|0}c[s>>2]=w+1;a[w]=40;if((a[v]|0)!=0){t=v;m=0;while(1){if((m|0)!=0){p=c[s>>2]|0;if(p>>>0<(c[r>>2]|0)>>>0){x=p}else{Jv(f,1)|0;x=c[s>>2]|0}c[s>>2]=x+1;a[x]=44}Lv(f,t)|0;p=t;while(1){y=p+1|0;if((a[p]|0)==0){break}else{p=y}}if((a[y]|0)==0){break}else{t=y;m=m+1|0}}}m=c[s>>2]|0;if(m>>>0<(c[r>>2]|0)>>>0){z=m}else{Jv(f,1)|0;z=c[s>>2]|0}c[s>>2]=z+1;a[z]=41}m=c[s>>2]|0;if(m>>>0<(c[r>>2]|0)>>>0){A=m}else{Jv(f,1)|0;A=c[s>>2]|0}a[A]=0;m=c[k>>2]|0;c[s>>2]=m;t=c[248+(c[(c[g>>2]|0)+12>>2]<<2)>>2]|0;p=xF(m|0)|0;nb(q|0,121624,(l=i,i=i+16|0,c[l>>2]=138744,c[l+8>>2]=p,l)|0)|0;i=l;Lv(t,q)|0;Lv(t,m)|0;m=t+4|0;p=c[m>>2]|0;if(p>>>0<(c[t+8>>2]|0)>>>0){B=p}else{Jv(t,1)|0;B=c[m>>2]|0}c[m>>2]=B+1;a[B]=32;}b=c[e>>2]|0;}while((b|0)!=0)}Mv(f);i=d;return}function qC(b,f,j,k){b=b|0;f=f|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;l=i;i=i+3120|0;m=l|0;n=l+1024|0;o=l+2048|0;p=l+3072|0;q=l+3088|0;r=b+16|0;b=c[r>>2]|0;s=+(c[b+136>>2]|0)*3.141592653589793/180.0;if((e[(c[43614]|0)+8232>>1]|0)>>>0<14>>>0){t=b+56|0;u=a[t+3|0]|0;v=d[t]|0;w=d[t+1|0]|0;x=d[t+2|0]|0;if(u<<24>>24==-1){nb(180832,150832,(y=i,i=i+24|0,c[y>>2]=v,c[y+8>>2]=w,c[y+16>>2]=x,y)|0)|0;i=y}else{nb(180832,147960,(y=i,i=i+32|0,c[y>>2]=v,c[y+8>>2]=w,c[y+16>>2]=x,c[y+24>>2]=u&255,y)|0)|0;i=y}u=c[248+(c[(c[r>>2]|0)+12>>2]<<2)>>2]|0;x=m|0;m=xF(180832)|0;nb(x|0,121624,(y=i,i=i+16|0,c[y>>2]=128936,c[y+8>>2]=m,y)|0)|0;i=y;Lv(u,x)|0;Lv(u,180832)|0;x=u+4|0;m=c[x>>2]|0;if(m>>>0<(c[u+8>>2]|0)>>>0){z=m}else{Jv(u,1)|0;z=c[x>>2]|0}c[x>>2]=z+1;a[z]=32;i=l;return}Iv(p,1024,o|0);o=(f|0)==2;f=q|0;if(o){rn(j,f,k,s,2);z=p+4|0;x=c[z>>2]|0;if(x>>>0<(c[p+8>>2]|0)>>>0){A=x}else{Jv(p,1)|0;A=c[z>>2]|0}c[z>>2]=A+1;a[A]=91;eC(p,+h[q>>3],+h[q+8>>3]);eC(p,+h[q+16>>3],+h[q+24>>3])}else{rn(j,f,k,0.0,3);B=+h[q+24>>3];C=+h[q>>3];if(s==0.0){D=+h[q+8>>3];E=C;F=D;G=D;H=B*.25}else{D=B*.25;I=D;J=s;s=C+I*+V(J);K=+h[q+8>>3];E=s;F=K+I*+W(J);G=K;H=D}q=p+4|0;k=c[q>>2]|0;if(k>>>0<(c[p+8>>2]|0)>>>0){L=k}else{Jv(p,1)|0;L=c[q>>2]|0}c[q>>2]=L+1;a[L]=40;eC(p,E,F);L=n|0;nb(L|0,107520,(y=i,i=i+8|0,h[y>>3]=H,y)|0)|0;i=y;q=gb(L|0,46)|0;do{if((q|0)==0){M=n+(xF(L|0)|0)|0}else{k=q;while(1){f=k+1|0;if((a[f]|0)==0){N=k;break}else{k=f}}while(1){k=a[N]|0;if((k<<24>>24|0)==46){O=21;break}else if((k<<24>>24|0)!=48){O=22;break}a[N]=0;N=N-1|0}if((O|0)==21){a[N]=0;M=N;break}else if((O|0)==22){M=N+1|0;break}}}while(0);a[M]=32;a[M+1|0]=0;Lv(p,L)|0;eC(p,C,G);nb(L|0,107520,(y=i,i=i+8|0,h[y>>3]=B,y)|0)|0;i=y;M=gb(L|0,46)|0;do{if((M|0)==0){P=n+(xF(L|0)|0)|0}else{N=M;while(1){q=N+1|0;if((a[q]|0)==0){Q=N;break}else{N=q}}while(1){N=a[Q]|0;if((N<<24>>24|0)==46){O=28;break}else if((N<<24>>24|0)!=48){O=29;break}a[Q]=0;Q=Q-1|0}if((O|0)==28){a[Q]=0;P=Q;break}else if((O|0)==29){P=Q+1|0;break}}}while(0);a[P]=32;a[P+1|0]=0;Lv(p,L)|0;}Lv(p,125744)|0;L=b+140|0;B=+g[L>>2];P=b+56|0;if(B>0.0){rC(p,B,P);rC(p,+g[L>>2],b+96|0)}else{rC(p,0.0,P);rC(p,1.0,b+96|0)}Nv(p)|0;b=p+4|0;P=c[b>>2]|0;L=p+8|0;Q=P>>>0>=(c[L>>2]|0)>>>0;if(o){if(Q){Jv(p,1)|0;R=c[b>>2]|0}else{R=P}c[b>>2]=R+1;a[R]=93}else{if(Q){Jv(p,1)|0;S=c[b>>2]|0}else{S=P}c[b>>2]=S+1;a[S]=41}S=c[b>>2]|0;if(S>>>0<(c[L>>2]|0)>>>0){T=S}else{Jv(p,1)|0;T=c[b>>2]|0}a[T]=0;T=c[p>>2]|0;c[b>>2]=T;b=c[248+(c[(c[r>>2]|0)+12>>2]<<2)>>2]|0;r=n|0;n=xF(T|0)|0;nb(r|0,121624,(y=i,i=i+16|0,c[y>>2]=128936,c[y+8>>2]=n,y)|0)|0;i=y;Lv(b,r)|0;Lv(b,T)|0;T=b+4|0;r=c[T>>2]|0;if(r>>>0<(c[b+8>>2]|0)>>>0){U=r}else{Jv(b,1)|0;U=c[T>>2]|0}c[T>>2]=U+1;a[U]=32;Mv(p);i=l;return}function rC(b,e,f){b=b|0;e=+e;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=i;i=i+2048|0;j=g|0;k=g+1024|0;l=k|0;nb(l|0,123384,(m=i,i=i+8|0,h[m>>3]=e,m)|0)|0;i=m;n=gb(l|0,46)|0;do{if((n|0)==0){o=k+(xF(l|0)|0)|0}else{p=n;while(1){q=p+1|0;if((a[q]|0)==0){r=p;break}else{p=q}}while(1){p=a[r]|0;if((p<<24>>24|0)==46){s=5;break}else if((p<<24>>24|0)!=48){s=6;break}a[r]=0;r=r-1|0}if((s|0)==5){a[r]=0;o=r;break}else if((s|0)==6){o=r+1|0;break}}}while(0);a[o]=32;a[o+1|0]=0;o=f;f=a[o+3|0]|0;r=d[o]|0;s=d[o+1|0]|0;n=d[o+2|0]|0;if(f<<24>>24==-1){nb(180832,150832,(m=i,i=i+24|0,c[m>>2]=r,c[m+8>>2]=s,c[m+16>>2]=n,m)|0)|0;i=m}else{nb(180832,147960,(m=i,i=i+32|0,c[m>>2]=r,c[m+8>>2]=s,c[m+16>>2]=n,c[m+24>>2]=f&255,m)|0)|0;i=m}f=j|0;j=xF(180832)|0;nb(f|0,121624,(m=i,i=i+16|0,c[m>>2]=l,c[m+8>>2]=j,m)|0)|0;i=m;Lv(b,f)|0;Lv(b,180832)|0;f=b+4|0;m=c[f>>2]|0;if(m>>>0<(c[b+8>>2]|0)>>>0){t=m;u=t+1|0;c[f>>2]=u;a[t]=32;v=1024;w=0;i=g;return}Jv(b,1)|0;t=c[f>>2]|0;u=t+1|0;c[f>>2]=u;a[t]=32;v=1024;w=0;i=g;return}function sC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=c[a+16>>2]|0;_z(a,121432)|0;e=c[c[a+12>>2]>>2]|0;f=c[e+4>>2]|0;g=c[e+8>>2]|0;dA(a,120504,(h=i,i=i+24|0,c[h>>2]=c[e>>2],c[h+8>>2]=f,c[h+16>>2]=g,h)|0);i=h;g=$w(c[d+8>>2]|0)|0;dA(a,119856,(h=i,i=i+8|0,c[h>>2]=g,h)|0);i=h;g=da(c[a+168>>2]|0,c[a+164>>2]|0)|0;dA(a,119024,(h=i,i=i+8|0,c[h>>2]=g,h)|0);i=h;_z(a,118192)|0;_z(a,117384)|0;_z(a,116304)|0;_z(a,115360)|0;_z(a,114160)|0;_z(a,113456)|0;_z(a,112904)|0;_z(a,112424)|0;_z(a,111856)|0;i=b;return}function tC(a){a=a|0;_z(a,122640)|0;return}function uC(a){a=a|0;c[53842]=2;return}function vC(a){a=a|0;c[53842]=1;return}function wC(a){a=a|0;c[53842]=2;return}function xC(a){a=a|0;c[53842]=0;return}function yC(a){a=a|0;c[53842]=2;return}function zC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;f=i;g=d;d=i;i=i+16|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];g=c[(c[b+16>>2]|0)+16>>2]|0;j=c[53842]|0;k=c[e+4>>2]|0;l=+h[k+16>>3]*+h[b+352>>3];m=(c[b+360>>2]|0)!=0?1.5707963267948966:0.0;n=c[k+8>>2]|0;if((n|0)==0){o=-1}else{o=c[n+20>>2]|0}n=a[e+48|0]|0;if((n|0)==108){p=0}else if((n|0)==114){p=2}else{p=1}q=+h[d>>3];if(q<0.0){r=q+-.5}else{r=q+.5}n=~~r;r=+h[d+8>>3];if(r<0.0){s=r+-.5}else{s=r+.5}d=~~s;k=c[e>>2]|0;e=c[44766]|0;if((e|0)==0){c[44764]=64;t=dF(64)|0;c[44766]=t;u=t}else{u=e}e=a[k]|0;if(e<<24>>24==0){v=u}else{t=0;w=u;u=k;k=e;while(1){e=u+1|0;x=c[44764]|0;if((t|0)>(x-8|0)){y=x<<1;c[44764]=y;x=gF(c[44766]|0,y)|0;c[44766]=x;z=x+t|0}else{z=w}if(k<<24>>24>-1){if(k<<24>>24==92){a[z]=92;A=z+1|0;B=t+1|0}else{A=z;B=t}a[A]=k;C=A+1|0;D=B+1|0}else{a[z]=92;nb(z+1|0,124960,(E=i,i=i+8|0,c[E>>2]=k&255,E)|0)|0;i=E;C=z+4|0;D=t+4|0}x=a[e]|0;if(x<<24>>24==0){v=C;break}else{t=D;w=C;u=e;k=x}}}a[v]=0;v=c[44766]|0;dA(b,127968,(E=i,i=i+112|0,c[E>>2]=4,c[E+8>>2]=p,c[E+16>>2]=g,c[E+24>>2]=j,c[E+32>>2]=0,c[E+40>>2]=o,h[E+48>>3]=l,h[E+56>>3]=m,c[E+64>>2]=6,h[E+72>>3]=0.0,h[E+80>>3]=0.0,c[E+88>>2]=n,c[E+96>>2]=d,c[E+104>>2]=v,E)|0);i=E;i=f;return}function AC(e,f){e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;g=i;h=f+32|0;j=c[h>>2]|0;if((j|0)==5){k=c[f>>2]|0;l=a[k]|0;m=0;n=122104;while(1){if((a[n]|0)==l<<24>>24){if((Ya(n|0,k|0)|0)==0){break}}o=m+1|0;if((o|0)==8){p=17;break}else{m=o;n=c[25944+(o<<2)>>2]|0}}if((p|0)==17){c[h>>2]=6;i=g;return}c[f>>2]=m;c[h>>2]=6;i=g;return}else if((j|0)==1){j=f;m=f;n=a[m]|0;k=n&255;l=j+1|0;o=a[l]|0;q=o&255;r=j+2|0;j=a[r]|0;s=j&255;t=c[44768]|0;do{if((t|0)>0){u=-1;v=0;w=195075;while(1){x=(b[179080+(v<<1)>>1]|0)-k|0;y=(b[179592+(v<<1)>>1]|0)-q|0;z=(b[180104+(v<<1)>>1]|0)-s|0;A=(da(y,y)|0)+(da(x,x)|0)+(da(z,z)|0)|0;if((A|0)<(w|0)){if((A|0)==0){B=v;break}else{C=A;D=v}}else{C=w;D=u}E=v+1|0;if((E|0)<(t|0)){u=D;v=E;w=C}else{p=12;break}}if((p|0)==12){c[44768]=t+1;if((t|0)==256){B=D}else{F=E;p=14;break}}G=B+32|0}else{c[44768]=t+1;F=0;p=14}}while(0);if((p|0)==14){b[179080+(F<<1)>>1]=n&255;b[179592+(F<<1)>>1]=o&255;b[180104+(F<<1)>>1]=j&255;j=F+32|0;F=d[m]|0;m=d[l]|0;l=d[r]|0;dA(e,132936,(e=i,i=i+40|0,c[e>>2]=0,c[e+8>>2]=j,c[e+16>>2]=F,c[e+24>>2]=m,c[e+32>>2]=l,e)|0);i=e;G=j}c[f>>2]=G;c[h>>2]=6;i=g;return}else{cc(130760,147224,165,170632)}}function BC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;e=i;f=c[a+16>>2]|0;g=~~+h[f+152>>3];j=c[f+16>>2]|0;k=c[f+56>>2]|0;l=c[53842]|0;m=(d|0)!=0?20:-1;d=c[f+144>>2]|0;if((d|0)==1){n=10.0;o=1}else if((d|0)==2){n=10.0;o=2}else{n=0.0;o=0}p=+h[b>>3];if(p<0.0){q=p+-.5}else{q=p+.5}d=~~q;q=+h[b+8>>3];if(q<0.0){r=q+-.5}else{r=q+.5}f=~~r;r=+h[b+16>>3];s=r-p;if(s<0.0){t=s+-.5}else{t=s+.5}s=+h[b+24>>3];p=s-q;if(p<0.0){u=p+-.5}else{u=p+.5}if(r<0.0){v=r+-.5}else{v=r+.5}if(s<0.0){w=s+-.5}else{w=s+.5}dA(a,135256,(a=i,i=i+160|0,c[a>>2]=1,c[a+8>>2]=1,c[a+16>>2]=o,c[a+24>>2]=g,c[a+32>>2]=j,c[a+40>>2]=k,c[a+48>>2]=l,c[a+56>>2]=0,c[a+64>>2]=m,h[a+72>>3]=n,c[a+80>>2]=0,h[a+88>>3]=0.0,c[a+96>>2]=d,c[a+104>>2]=f,c[a+112>>2]=~~t,c[a+120>>2]=~~u,c[a+128>>2]=d,c[a+136>>2]=f,c[a+144>>2]=~~v,c[a+152>>2]=~~w,a)|0);i=a;i=e;return}function CC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;f=i;g=c[a+16>>2]|0;j=~~+h[g+152>>3];k=c[g+16>>2]|0;l=c[g+56>>2]|0;m=c[53842]|0;n=(e|0)!=0?20:-1;e=d+1|0;o=c[g+144>>2]|0;if((o|0)==1){p=10.0;q=1}else if((o|0)==2){p=10.0;q=2}else{p=0.0;q=0}dA(a,162144,(o=i,i=i+128|0,c[o>>2]=2,c[o+8>>2]=3,c[o+16>>2]=q,c[o+24>>2]=j,c[o+32>>2]=k,c[o+40>>2]=l,c[o+48>>2]=m,c[o+56>>2]=0,c[o+64>>2]=n,h[o+72>>3]=p,c[o+80>>2]=0,c[o+88>>2]=0,c[o+96>>2]=0,c[o+104>>2]=0,c[o+112>>2]=0,c[o+120>>2]=e,o)|0);i=o;GC(a,b,d,1);i=f;return}function DC(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0,M=0,N=0;f=i;i=i+80|0;e=f|0;j=f+64|0;k=c[a+16>>2]|0;l=~~+h[k+152>>3];m=c[k+16>>2]|0;n=c[53842]|0;if((d|0)<=3){cc(150216,147224,356,170656)}o=dF((d*140|0)+140|0)|0;p=c[k+144>>2]|0;if((p|0)==2){q=10.0;r=2}else if((p|0)==1){q=10.0;r=1}else{q=0.0;r=0}if((g|0)==0){s=4;t=0;u=-1}else{s=5;t=c[k+56>>2]|0;u=20}v=+h[b>>3];k=e+48|0;h[k>>3]=v;w=+h[b+8>>3];g=e+56|0;h[g>>3]=w;if(v<0.0){x=v+-.5}else{x=v+.5}if(w<0.0){y=w+-.5}else{y=w+.5}p=nb(o|0,158264,(z=i,i=i+16|0,c[z>>2]=~~x,c[z+8>>2]=~~y,z)|0)|0;i=z;A=e|0;B=e;C=k;k=j|0;D=j+8|0;E=0;F=1;G=o+p|0;p=3;while(1){c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];c[B+8>>2]=c[C+8>>2];c[B+12>>2]=c[C+12>>2];H=E+1|0;h[e+16>>3]=+h[b+(H<<4)>>3];h[e+24>>3]=+h[b+(H<<4)+8>>3];H=E+2|0;h[e+32>>3]=+h[b+(H<<4)>>3];h[e+40>>3]=+h[b+(H<<4)+8>>3];H=E+3|0;h[e+48>>3]=+h[b+(H<<4)>>3];h[g>>3]=+h[b+(H<<4)+8>>3];H=1;I=G;do{Qm(j,A,3,+(H|0)/6.0,0,0);y=+h[k>>3];x=+h[D>>3];if(y<0.0){J=y+-.5}else{J=y+.5}if(x<0.0){K=x+-.5}else{K=x+.5}L=nb(I|0,158264,(z=i,i=i+16|0,c[z>>2]=~~J,c[z+8>>2]=~~K,z)|0)|0;i=z;I=I+L|0;H=H+1|0;}while((H|0)<7);M=F+6|0;H=p+3|0;if((H|0)<(d|0)){E=p;F=M;G=I;p=H}else{break}}dA(a,144016,(z=i,i=i+112|0,c[z>>2]=3,c[z+8>>2]=s,c[z+16>>2]=r,c[z+24>>2]=l,c[z+32>>2]=m,c[z+40>>2]=t,c[z+48>>2]=n,c[z+56>>2]=0,c[z+64>>2]=u,h[z+72>>3]=q,c[z+80>>2]=0,c[z+88>>2]=0,c[z+96>>2]=0,c[z+104>>2]=M,z)|0);i=z;dA(a,140952,(z=i,i=i+8|0,c[z>>2]=o,z)|0);i=z;eF(o);if((M|0)<=0){N=_z(a,153232)|0;i=f;return}o=F+5|0;F=0;do{dA(a,138080,(z=i,i=i+8|0,c[z>>2]=((F|0)%(o|0)|0|0)!=0,z)|0);i=z;F=F+1|0;}while((F|0)<(M|0));N=_z(a,153232)|0;i=f;return}function EC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0;e=i;f=c[a+16>>2]|0;g=~~+h[f+152>>3];j=c[f+16>>2]|0;k=c[53842]|0;l=c[f+144>>2]|0;if((l|0)==1){m=10.0;n=1}else if((l|0)==2){m=10.0;n=2}else{m=0.0;n=0}dA(a,162144,(l=i,i=i+128|0,c[l>>2]=2,c[l+8>>2]=1,c[l+16>>2]=n,c[l+24>>2]=g,c[l+32>>2]=j,c[l+40>>2]=0,c[l+48>>2]=k,c[l+56>>2]=0,c[l+64>>2]=0,h[l+72>>3]=m,c[l+80>>2]=0,c[l+88>>2]=0,c[l+96>>2]=0,c[l+104>>2]=0,c[l+112>>2]=0,c[l+120>>2]=d,l)|0);i=l;if((d|0)>0){o=0}else{p=_z(a,153232)|0;i=e;return}do{m=+h[b+(o<<4)>>3];if(m<0.0){q=m+-.5}else{q=m+.5}m=+h[b+(o<<4)+8>>3];if(m<0.0){r=m+-.5}else{r=m+.5}dA(a,158264,(l=i,i=i+16|0,c[l>>2]=~~q,c[l+8>>2]=~~r,l)|0);i=l;o=o+1|0;}while((o|0)<(d|0));p=_z(a,153232)|0;i=e;return}function FC(a,b){a=a|0;b=b|0;var d=0;d=i;dA(a,166272,(a=i,i=i+8|0,c[a>>2]=b,a)|0);i=a;i=d;return}function GC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0.0,p=0.0;f=i;if((d|0)>0){g=0;do{j=+h[b+(g<<4)>>3];if(j<0.0){k=j+-.5}else{k=j+.5}j=+h[b+(g<<4)+8>>3];if(j<0.0){l=j+-.5}else{l=j+.5}dA(a,158264,(m=i,i=i+16|0,c[m>>2]=~~k,c[m+8>>2]=~~l,m)|0);i=m;g=g+1|0;}while((g|0)<(d|0))}if((e|0)==0){n=_z(a,153232)|0;i=f;return}l=+h[b>>3];if(l<0.0){o=l+-.5}else{o=l+.5}l=+h[b+8>>3];if(l<0.0){p=l+-.5}else{p=l+.5}dA(a,158264,(m=i,i=i+16|0,c[m>>2]=~~o,c[m+8>>2]=~~p,m)|0);i=m;n=_z(a,153232)|0;i=f;return}function HC(b){b=b|0;var d=0,e=0,f=0,g=0;d=c[b+16>>2]|0;e=c[b+64>>2]|0;if((e|0)==0){_z(b,116088)|0;f=d+208|0;g=c[f>>2]|0;if((g|0)==0){return}if((a[g]|0)==0){return}_z(b,114904)|0;_z(b,gk(c[f>>2]|0)|0)|0;_z(b,164480)|0;return}else if((e|0)==3){f=gk($w(c[d+8>>2]|0)|0)|0;_z(b,113328)|0;_z(b,f)|0;_z(b,112792)|0;_z(b,f)|0;_z(b,117936)|0;return}else if((e|0)==1){e=d+208|0;f=c[e>>2]|0;if((f|0)==0){return}if((a[f]|0)==0){return}_z(b,114904)|0;_z(b,gk(c[e>>2]|0)|0)|0;_z(b,114024)|0;_z(b,gk($w(c[d+8>>2]|0)|0)|0)|0;_z(b,164480)|0;return}else{return}}function IC(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;d=c[a+64>>2]|0;if((d|0)==3){KC(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);_z(a,117232)|0;return}else if((d|0)==2){KC(a,c[b+264>>2]|0,c[b+272>>2]|0,c[b+268>>2]|0,c[b+208>>2]|0,c[b+228>>2]|0,c[b+244>>2]|0,c[b+212>>2]|0);return}else{return}}function JC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+16>>2]|0;KC(a,c[g+264>>2]|0,c[g+272>>2]|0,c[g+268>>2]|0,b,d,e,f);return}function KC(b,d,e,f,g,j,k,l){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;m=i;if((e|0)==0|(f|0)==0){i=m;return}if((c[44374]|0)<(f|0)){n=f+10|0;c[44374]=n;c[44376]=gF(c[44376]|0,n<<3)|0}n=(f|0)>0;if(n){o=0;do{p=+h[e+(o<<4)>>3];if(p<0.0){q=p+-.5}else{q=p+.5}c[(c[44376]|0)+(o<<3)>>2]=~~q;p=+h[e+(o<<4)+8>>3];if(p<0.0){r=p+-.5}else{r=p+.5}c[(c[44376]|0)+(o<<3)+4>>2]=~~r;o=o+1|0;}while((o|0)<(f|0))}o=b+64|0;e=c[o>>2]|0;s=(g|0)==0;do{if(!((e|0)!=0|s)){if((a[g]|0)==0){break}if((d|0)==2){dA(b,78672,(t=i,i=i+8|0,c[t>>2]=g,t)|0);i=t;if(n){u=0;do{v=c[44376]|0;w=c[v+(u<<3)+4>>2]|0;dA(b,168600,(t=i,i=i+16|0,c[t>>2]=c[v+(u<<3)>>2],c[t+8>>2]=w,t)|0);i=t;u=u+1|0;}while((u|0)<(f|0))}_z(b,164480)|0;i=m;return}else if((d|0)==1){u=c[44376]|0;w=c[u>>2]|0;v=c[u+4>>2]|0;x=(c[u+8>>2]|0)-w|0;dA(b,83016,(t=i,i=i+32|0,c[t>>2]=g,c[t+8>>2]=w,c[t+16>>2]=v,c[t+24>>2]=x,t)|0);i=t;i=m;return}else if((d|0)==0){x=c[44376]|0;v=c[x>>2]|0;w=c[x+12>>2]|0;u=c[x+8>>2]|0;y=c[x+4>>2]|0;dA(b,87896,(t=i,i=i+40|0,c[t>>2]=g,c[t+8>>2]=v,c[t+16>>2]=w,c[t+24>>2]=u,c[t+32>>2]=y,t)|0);i=t;i=m;return}else{cc(160496,156352,65,170312)}}}while(0);do{if(!((e|0)!=1|s)){if((a[g]|0)==0){break}if((d|0)!=0){cc(160496,156352,77,170312)}n=c[44376]|0;y=c[n+12>>2]|0;u=c[n+8>>2]|0;w=c[n+4>>2]|0;dA(b,151872,(t=i,i=i+48|0,c[t>>2]=c[n>>2],c[t+8>>2]=y,c[t+16>>2]=u,c[t+24>>2]=w,c[t+32>>2]=g,c[t+40>>2]=j,t)|0);i=t;i=m;return}}while(0);if((e-2|0)>>>0>=2>>>0){i=m;return}if((d|0)==2){_z(b,142952)|0}else if((d|0)==1){_z(b,149056)|0}else if((d|0)==0){_z(b,145920)|0}else{cc(160496,156352,93,170312)}do{if((l|0)!=0){if((a[l]|0)==0){break}_z(b,139840)|0;_z(b,ik(l)|0)|0;_z(b,137160)|0}}while(0);do{if(!s){if((a[g]|0)==0){break}_z(b,134264)|0;_z(b,ik(g)|0)|0;_z(b,137160)|0}}while(0);do{if((k|0)!=0){if((a[k]|0)==0){break}_z(b,132288)|0;_z(b,gk(k)|0)|0;_z(b,137160)|0}}while(0);do{if((j|0)!=0){if((a[j]|0)==0){break}_z(b,129944)|0;_z(b,gk(j)|0)|0;_z(b,137160)|0}}while(0);_z(b,126808)|0;_z(b,124240)|0;do{if((d|0)==0){j=c[44376]|0;k=c[j+12>>2]|0;g=c[j+8>>2]|0;s=c[j+4>>2]|0;dA(b,121200,(t=i,i=i+32|0,c[t>>2]=c[j>>2],c[t+8>>2]=k,c[t+16>>2]=g,c[t+24>>2]=s,t)|0);i=t}else if((d|0)==2){s=c[44376]|0;g=c[s+4>>2]|0;dA(b,120328,(t=i,i=i+16|0,c[t>>2]=c[s>>2],c[t+8>>2]=g,t)|0);i=t;if((f|0)>1){z=1}else{break}do{g=c[44376]|0;s=c[g+(z<<3)+4>>2]|0;dA(b,119600,(t=i,i=i+16|0,c[t>>2]=c[g+(z<<3)>>2],c[t+8>>2]=s,t)|0);i=t;z=z+1|0;}while((z|0)<(f|0))}else if((d|0)==1){s=c[44376]|0;g=c[s>>2]|0;k=c[s+4>>2]|0;j=(c[s+8>>2]|0)-g|0;dA(b,122008,(t=i,i=i+24|0,c[t>>2]=g,c[t+8>>2]=k,c[t+16>>2]=j,t)|0);i=t}}while(0);if((c[o>>2]|0)==3){_z(b,118832)|0;i=m;return}else{_z(b,117936)|0;i=m;return}}function LC(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;_z(a,132568)|0;if((c[a+64>>2]|0)==2){_z(a,132408)|0}else{_z(a,136984)|0}d=c[c[a+12>>2]>>2]|0;e=c[d+4>>2]|0;f=c[d+8>>2]|0;dA(a,132168,(a=i,i=i+24|0,c[a>>2]=c[d>>2],c[a+8>>2]=e,c[a+16>>2]=f,a)|0);i=a;i=b;return}function MC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;_z(a,133184)|0;d=a+64|0;e=a+12|0;if((c[d>>2]|0)!=2){dA(a,133040,(f=i,i=i+8|0,c[f>>2]=c[(c[e>>2]|0)+28>>2],f)|0);i=f}if((c[(c[e>>2]|0)+20>>2]|0)!=0){g=_z(a,132856)|0;h=_z(a,132728)|0;i=b;return}if((c[d>>2]|0)==2){g=_z(a,132856)|0;h=_z(a,132728)|0;i=b;return}d=c[a+476>>2]|0;e=c[a+480>>2]|0;j=c[a+484>>2]|0;dA(a,99424,(f=i,i=i+32|0,c[f>>2]=c[a+472>>2],c[f+8>>2]=d,c[f+16>>2]=e,c[f+24>>2]=j,f)|0);i=f;g=_z(a,132856)|0;h=_z(a,132728)|0;i=b;return}function NC(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;d=i;i=i+8|0;e=d|0;f=c[b+16>>2]|0;a[11864]=0;g=b+12|0;h=f+8|0;do{if((c[(c[g>>2]|0)+28>>2]|0)==0){j=$w(c[h>>2]|0)|0;dA(b,101240,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;j=b+64|0;if((c[j>>2]|0)==2){_z(b,100376)|0}else{_z(b,100784)|0}do{if((c[(c[g>>2]|0)+20>>2]|0)==0){if((c[j>>2]|0)==2){l=c[b+460>>2]|0;m=c[b+464>>2]|0;n=c[b+468>>2]|0;dA(b,99424,(k=i,i=i+32|0,c[k>>2]=c[b+456>>2],c[k+8>>2]=l,c[k+16>>2]=m,c[k+24>>2]=n,k)|0);i=k;break}else{_z(b,99824)|0;break}}}while(0);_z(b,99008)|0;al(b,c[(c[g>>2]|0)+24>>2]|0,12448);cl(b);j=c[(c[g>>2]|0)+20>>2]|0;if((j|0)==0){break}n=e|0;c[n>>2]=c[j>>2];c[e+4>>2]=0;al(b,0,n)}}while(0);c[44678]=(a[(c[(c[h>>2]|0)+8>>2]|0)+115|0]|0)==1;if(!(a[11864]|0)){_z(b,98584)|0;a[11864]=1}h=c[f+208>>2]|0;if((h|0)==0){i=d;return}dA(b,97984,(k=i,i=i+8|0,c[k>>2]=h,k)|0);i=k;i=d;return}function OC(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;b=i;dA(a,101960,(a=i,i=i+16|0,c[a>>2]=d,c[a+8>>2]=e,a)|0);i=a;i=b;return}function PC(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0;b=i;d=c[a+456>>2]|0;e=c[a+460>>2]|0;f=c[a+464>>2]|0;g=c[a+468>>2]|0;j=a+12|0;k=(c[(c[j>>2]|0)+28>>2]|0)+1|0;dA(a,108832,(l=i,i=i+16|0,c[l>>2]=k,c[l+8>>2]=k,l)|0);i=l;if((c[(c[j>>2]|0)+20>>2]|0)==0){dA(a,107856,(l=i,i=i+32|0,c[l>>2]=d,c[l+8>>2]=e,c[l+16>>2]=f,c[l+24>>2]=g,l)|0);i=l}k=a+360|0;dA(a,107112,(l=i,i=i+8|0,c[l>>2]=(c[k>>2]|0)!=0?106440:106024,l)|0);i=l;m=a+64|0;if((c[m>>2]|0)==1){dA(a,105504,(l=i,i=i+16|0,c[l>>2]=f,c[l+8>>2]=g,l)|0);i=l}n=c[a+200>>2]|0;o=c[a+204>>2]|0;dA(a,105112,(l=i,i=i+24|0,c[l>>2]=c[a+196>>2],c[l+8>>2]=n,c[l+16>>2]=o,l)|0);i=l;if((c[(c[j>>2]|0)+20>>2]|0)==0){dA(a,104664,(l=i,i=i+32|0,c[l>>2]=d,c[l+8>>2]=e,c[l+16>>2]=f-d,c[l+24>>2]=g-e,l)|0);i=l}p=+h[a+496>>3];o=c[k>>2]|0;q=+h[a+504>>3];r=+h[a+512>>3];dA(a,104176,(l=i,i=i+40|0,h[l>>3]=+h[a+488>>3],h[l+8>>3]=p,c[l+16>>2]=o,h[l+24>>3]=q,h[l+32>>3]=r,l)|0);i=l;if((c[m>>2]|0)!=1){i=b;return}if((f|0)>14399|(g|0)>14399){Dc[c[(c[j>>2]|0)+16>>2]&63](103504,(l=i,i=i+24|0,c[l>>2]=f,c[l+8>>2]=g,c[l+16>>2]=14400,l)|0);i=l}dA(a,102872,(l=i,i=i+32|0,c[l>>2]=d,c[l+8>>2]=e,c[l+16>>2]=f,c[l+24>>2]=g,l)|0);i=l;i=b;return}function QC(a){a=a|0;var b=0,d=0;b=i;d=a+12|0;if((c[(c[d>>2]|0)+20>>2]|0)!=0){_z(a,111704)|0;al(a,0,(c[(c[d>>2]|0)+20>>2]|0)+4|0)}_z(a,111072)|0;_z(a,110400)|0;dA(a,109656,(a=i,i=i+8|0,c[a>>2]=c[(c[d>>2]|0)+28>>2],a)|0);i=a;i=b;return}function RC(a){a=a|0;var b=0,d=0,e=0;b=i;d=$w(c[(c[a+16>>2]|0)+8>>2]|0)|0;dA(a,112328,(e=i,i=i+8|0,c[e>>2]=d,e)|0);i=e;_z(a,112784)|0;i=b;return}function SC(a){a=a|0;_z(a,113304)|0;return}function TC(a){a=a|0;_z(a,112784)|0;return}function UC(a){a=a|0;_z(a,113304)|0;return}function VC(a){a=a|0;_z(a,112784)|0;return}function WC(a){a=a|0;_z(a,113304)|0;return}function XC(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;f=i;if((b|0)==0){i=f;return}e=(c[a+16>>2]|0)+272|0;if((c[e>>2]|0)==0){i=f;return}_z(a,116072)|0;gA(a,c[e>>2]|0,2);_z(a,114760)|0;e=dl(b,c[44678]|0)|0;dA(a,113928,(a=i,i=i+8|0,c[a>>2]=e,a)|0);i=a;i=f;return}function YC(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0,o=0,p=0;f=i;g=d;d=i;i=i+16|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];g=c[b+16>>2]|0;if(+h[g+40>>3]<.5){i=f;return}j=c[g+4>>2]|0;if((j|0)==0|(j|0)==1){k=155304}else if((j|0)==2){k=151736}else if((j|0)==3){k=148880}else{k=145744}l=+h[g+24>>3];m=+h[g+32>>3];dA(b,142720,(j=i,i=i+32|0,h[j>>3]=+h[g+16>>3],h[j+8>>3]=l,h[j+16>>3]=m,c[j+24>>2]=k,j)|0);i=j;k=e+4|0;eA(b,+h[(c[k>>2]|0)+16>>3]);dA(b,118808,(j=i,i=i+8|0,c[j>>2]=c[c[k>>2]>>2],j)|0);i=j;k=dl(c[e>>2]|0,c[44678]|0)|0;g=a[e+48|0]|0;if((g|0)==114){n=e+32|0;o=d|0;h[o>>3]=+h[o>>3]- +h[n>>3];p=n}else if((g|0)==108){p=e+32|0}else{g=e+32|0;n=d|0;h[n>>3]=+h[n>>3]- +h[g>>3]*.5;p=g}g=d+8|0;h[g>>3]=+h[e+24>>3]+ +h[g>>3];fA(b,d);_z(b,117912)|0;eA(b,+h[p>>3]);dA(b,117208,(j=i,i=i+8|0,c[j>>2]=k,j)|0);i=j;i=f;return}function ZC(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0;e=i;i=i+32|0;f=e|0;g=f|0;j=f;k=b;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];h[f+16>>3]=+h[b+16>>3]- +h[b>>3];h[f+24>>3]=+h[b+24>>3]- +h[b+8>>3];b=a+16|0;do{if((d|0)!=0){f=c[b>>2]|0;if(+h[f+80>>3]<=.5){break}k=c[f+4>>2]|0;if((k|0)==3){l=148880}else if((k|0)==0|(k|0)==1){l=155304}else if((k|0)==2){l=151736}else{l=145744}m=+h[f+64>>3];n=+h[f+72>>3];dA(a,142720,(o=i,i=i+32|0,h[o>>3]=+h[f+56>>3],h[o+8>>3]=m,h[o+16>>3]=n,c[o+24>>2]=l,o)|0);i=o;gA(a,g,2);_z(a,120296)|0}}while(0);if(+h[(c[b>>2]|0)+40>>3]<=.5){i=e;return}dD(a);l=c[b>>2]|0;b=c[l+4>>2]|0;if((b|0)==0|(b|0)==1){p=155304}else if((b|0)==2){p=151736}else if((b|0)==3){p=148880}else{p=145744}n=+h[l+24>>3];m=+h[l+32>>3];dA(a,142720,(o=i,i=i+32|0,h[o>>3]=+h[l+16>>3],h[o+8>>3]=n,h[o+16>>3]=m,c[o+24>>2]=p,o)|0);i=o;gA(a,g,2);_z(a,119568)|0;i=e;return}function _C(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0;f=i;g=a+16|0;do{if((e|0)!=0){j=c[g>>2]|0;if(+h[j+80>>3]<=.5){break}k=c[j+4>>2]|0;if((k|0)==0|(k|0)==1){l=155304}else if((k|0)==3){l=148880}else if((k|0)==2){l=151736}else{l=145744}m=+h[j+64>>3];n=+h[j+72>>3];dA(a,142720,(o=i,i=i+32|0,h[o>>3]=+h[j+56>>3],h[o+8>>3]=m,h[o+16>>3]=n,c[o+24>>2]=l,o)|0);i=o;_z(a,134072)|0;fA(a,b);_z(a,132112)|0;if((d|0)>1){j=1;do{fA(a,b+(j<<4)|0);_z(a,129864)|0;j=j+1|0;}while((j|0)<(d|0))}_z(a,121960)|0}}while(0);if(+h[(c[g>>2]|0)+40>>3]<=.5){i=f;return}dD(a);l=c[g>>2]|0;g=c[l+4>>2]|0;if((g|0)==3){p=148880}else if((g|0)==0|(g|0)==1){p=155304}else if((g|0)==2){p=151736}else{p=145744}n=+h[l+24>>3];m=+h[l+32>>3];dA(a,142720,(o=i,i=i+32|0,h[o>>3]=+h[l+16>>3],h[o+8>>3]=n,h[o+16>>3]=m,c[o+24>>2]=p,o)|0);i=o;_z(a,134072)|0;fA(a,b);_z(a,132112)|0;if((d|0)>1){o=1;do{fA(a,b+(o<<4)|0);_z(a,129864)|0;o=o+1|0;}while((o|0)<(d|0))}_z(a,121168)|0;i=f;return}function $C(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0;f=i;e=a+16|0;do{if((g|0)!=0){j=c[e>>2]|0;if(+h[j+80>>3]<=.5){break}k=c[j+4>>2]|0;if((k|0)==3){l=148880}else if((k|0)==0|(k|0)==1){l=155304}else if((k|0)==2){l=151736}else{l=145744}m=+h[j+64>>3];n=+h[j+72>>3];dA(a,142720,(o=i,i=i+32|0,h[o>>3]=+h[j+56>>3],h[o+8>>3]=m,h[o+16>>3]=n,c[o+24>>2]=l,o)|0);i=o;_z(a,134072)|0;fA(a,b);_z(a,132112)|0;if((d|0)>1){j=1;do{gA(a,b+(j<<4)|0,3);_z(a,124072)|0;j=j+3|0;}while((j|0)<(d|0))}_z(a,121960)|0}}while(0);if(+h[(c[e>>2]|0)+40>>3]<=.5){i=f;return}dD(a);l=c[e>>2]|0;e=c[l+4>>2]|0;if((e|0)==0|(e|0)==1){p=155304}else if((e|0)==3){p=148880}else if((e|0)==2){p=151736}else{p=145744}n=+h[l+24>>3];m=+h[l+32>>3];dA(a,142720,(o=i,i=i+32|0,h[o>>3]=+h[l+16>>3],h[o+8>>3]=n,h[o+16>>3]=m,c[o+24>>2]=p,o)|0);i=o;_z(a,134072)|0;fA(a,b);_z(a,132112)|0;if((d|0)>1){o=1;do{gA(a,b+(o<<4)|0,3);_z(a,124072)|0;o=o+3|0;}while((o|0)<(d|0))}_z(a,126584)|0;i=f;return}function aD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0.0,l=0.0;e=i;f=a+16|0;if(+h[(c[f>>2]|0)+40>>3]<=.5){i=e;return}dD(a);g=c[f>>2]|0;f=c[g+4>>2]|0;if((f|0)==0|(f|0)==1){j=155304}else if((f|0)==2){j=151736}else if((f|0)==3){j=148880}else{j=145744}k=+h[g+24>>3];l=+h[g+32>>3];dA(a,142720,(f=i,i=i+32|0,h[f>>3]=+h[g+16>>3],h[f+8>>3]=k,h[f+16>>3]=l,c[f+24>>2]=j,f)|0);i=f;_z(a,134072)|0;fA(a,b);_z(a,132112)|0;if((d|0)>1){f=1;do{fA(a,b+(f<<4)|0);_z(a,129864)|0;f=f+1|0;}while((f|0)<(d|0))}_z(a,126584)|0;i=e;return}function bD(a,b){a=a|0;b=b|0;_z(a,139632)|0;_z(a,b)|0;_z(a,136984)|0;return}function cD(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0;g=i;j=a+16|0;do{if((f|0)!=0){k=c[j>>2]|0;if(+h[k+80>>3]<=.5){break}l=c[k+4>>2]|0;if((l|0)==3){m=148880}else if((l|0)==2){m=151736}else if((l|0)==0|(l|0)==1){m=155304}else{m=145744}n=+h[k+64>>3];o=+h[k+72>>3];dA(a,142720,(p=i,i=i+32|0,h[p>>3]=+h[k+56>>3],h[p+8>>3]=n,h[p+16>>3]=o,c[p+24>>2]=m,p)|0);i=p;_z(a,109360)|0;gA(a,d,e);_z(a,103496)|0;fA(a,d);dA(a,97968,(p=i,i=i+16|0,c[p>>2]=e,c[p+8>>2]=b,p)|0);i=p}}while(0);if(+h[(c[j>>2]|0)+40>>3]<=.5){i=g;return}dD(a);m=c[j>>2]|0;j=c[m+4>>2]|0;if((j|0)==3){q=148880}else if((j|0)==0|(j|0)==1){q=155304}else if((j|0)==2){q=151736}else{q=145744}o=+h[m+24>>3];n=+h[m+32>>3];dA(a,142720,(p=i,i=i+32|0,h[p>>3]=+h[m+16>>3],h[p+8>>3]=o,h[p+16>>3]=n,c[p+24>>2]=q,p)|0);i=p;_z(a,109360)|0;gA(a,d,e);_z(a,103496)|0;fA(a,d);dA(a,92464,(p=i,i=i+16|0,c[p>>2]=e,c[p+8>>2]=b,p)|0);i=p;i=g;return}function dD(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;e=b+16|0;f=c[e>>2]|0;g=c[f+160>>2]|0;eA(b,+h[f+152>>3]);_z(b,87088)|0;if((g|0)==0){i=d;return}else{j=g}while(1){g=j+4|0;f=c[j>>2]|0;if((f|0)==0){break}if((Ya(f|0,82336)|0)==0){j=g;continue}else{k=f}while(1){l=k+1|0;if((a[k]|0)==0){break}else{k=l}}if((a[l]|0)!=0){m=l;while(1){dA(b,168384,(n=i,i=i+8|0,c[n>>2]=m,n)|0);i=n;o=m;while(1){p=o+1|0;if((a[o]|0)==0){break}else{o=p}}if((a[p]|0)==0){break}else{m=p}}}if((Ya(f|0,164240)|0)==0){h[(c[e>>2]|0)+152>>3]=0.0}dA(b,160288,(n=i,i=i+8|0,c[n>>2]=f,n)|0);i=n;j=g}i=d;return}
+
+
+
+function fq(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=e+8|0;g=(c[f>>2]|0)+157|0;if((a[g]|0)!=0){return}a[g]=1;a[(c[f>>2]|0)+158|0]=1;g=mw(d,e)|0;if((g|0)!=0){e=g;while(1){g=ow(d,e)|0;h=e;i=c[h>>2]&3;j=e-32|0;k=c[((i|0)==2?e:j)+28>>2]|0;l=c[k+8>>2]|0;do{if((a[l+158|0]|0)==0){if((a[l+157|0]|0)!=0){break}fq(d,k)}else{m=e+32|0;n=uw(d,k,c[((i|0)==3?e:m)+28>>2]|0,0,0)|0;if((n|0)==0){o=c[h>>2]&3;p=uw(d,c[((o|0)==2?e:j)+28>>2]|0,c[((o|0)==3?e:m)+28>>2]|0,0,1)|0}else{p=n}n=c[e+8>>2]|0;m=b[n+170>>1]|0;o=c[n+156>>2]|0;n=p+8|0;q=(c[n>>2]|0)+170|0;r=b[q>>1]|0;b[q>>1]=(r&65535)>>>0>(m&65535)>>>0?r:m;m=(c[n>>2]|0)+156|0;c[m>>2]=(c[m>>2]|0)+o;Gx(d,e|0)|0}}while(0);if((g|0)==0){break}else{e=g}}}a[(c[f>>2]|0)+158|0]=0;return}function gq(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;g=i;h=uw(a,d,e,0,0)|0;do{if((h|0)==0){j=uw(a,e,d,0,0)|0;if((j|0)!=0){k=j;break}j=uw(a,d,e,0,1)|0;if((j|0)!=0){k=j;break}j=$w(d|0)|0;l=$w(e|0)|0;Fv(1,160112,(m=i,i=i+16|0,c[m>>2]=j,c[m+8>>2]=l,m)|0)|0;i=m;i=g;return}else{k=h}}while(0);h=c[f+8>>2]|0;f=b[h+170>>1]|0;e=c[h+156>>2]|0;h=k+8|0;k=(c[h>>2]|0)+170|0;d=b[k>>1]|0;b[k>>1]=(d&65535)>>>0>(f&65535)>>>0?d:f;f=(c[h>>2]|0)+156|0;c[f>>2]=(c[f>>2]|0)+e;i=g;return}function hq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=ux(d)|0;if((e|0)!=0){f=b+8|0;b=e;while(1){e=vx(d,b)|0;g=b+8|0;if((a[(c[g>>2]|0)+159|0]|0)==0){h=c[f>>2]|0;i=c[h+172>>2]|0;a:do{if((i|0)>1){j=b|0;k=1;l=h;while(1){m=(Rx(c[(c[l+176>>2]|0)+(k<<2)>>2]|0,j)|0)==0;n=k+1|0;o=c[f>>2]|0;p=c[o+172>>2]|0;if(!m){q=k;r=p;break a}if((n|0)<(p|0)){k=n;l=o}else{q=n;r=p;break}}}else{q=1;r=i}}while(0);if((q|0)<(r|0)){Gx(d,b|0)|0}c[(c[g>>2]|0)+212>>2]=0}else{Gx(d,b|0)|0}if((e|0)==0){break}else{b=e}}}b=ux(d)|0;if((b|0)==0){return}r=d|0;q=b;do{b=mw(Ix(r)|0,q)|0;if((b|0)!=0){f=b;do{if((Rx(d,c[((c[f>>2]&3|0)==2?f:f-32|0)+28>>2]|0)|0)!=0){xw(d,f,1)|0}f=ow(Ix(r)|0,f)|0;}while((f|0)!=0)}q=vx(d,q)|0;}while((q|0)!=0);return}function iq(a,b,d){a=a|0;b=b|0;d=d|0;Wx(b|0,103336,c[d>>2]|0,1)|0;return}function jq(a,b,d){a=a|0;b=b|0;d=d|0;Wx(b|0,132048,c[d+4>>2]|0,1)|0;return}function kq(a,b,d){a=a|0;b=b|0;d=d|0;Wx(b|0,134032,c[d+8>>2]|0,1)|0;return}function lq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=sy(d)|0;if((e|0)==0){return}d=b+8|0;f=e;do{e=f|0;do{if((Za($w(e)|0,116432,7)|0)==0){g=7;h=5}else{i=Um(ew(e,151672)|0,12248,12272)|0;a[(c[f+8>>2]|0)+262|0]=i;if((i|0)!=0){g=i;h=5;break}lq(b,f)}}while(0);a:do{if((h|0)==5){h=0;if((g|0)==7&(c[53850]|0)==100){oq(b,f);break}e=ux(f)|0;if((e|0)==0){break}i=g&255;j=e+8|0;a[(c[j>>2]|0)+159|0]=i;k=vx(f,e)|0;if((k|0)!=0){l=k;do{Mm(e,l)|0;a[(c[l+8>>2]|0)+159|0]=a[(c[j>>2]|0)+159|0]|0;l=vx(f,l)|0;}while((l|0)!=0)}do{if((g|0)==2|(g|0)==3){l=(c[d>>2]|0)+212|0;j=c[l>>2]|0;if((j|0)==0){c[l>>2]=e;break}else{l=Mm(j,e)|0;c[(c[d>>2]|0)+212>>2]=l;break}}else if((g|0)==4|(g|0)==5){l=(c[d>>2]|0)+216|0;j=c[l>>2]|0;if((j|0)==0){c[l>>2]=e;break}else{l=Mm(j,e)|0;c[(c[d>>2]|0)+216>>2]=l;break}}else{break a}}while(0);if((g|0)==3){a[(c[(c[(c[d>>2]|0)+212>>2]|0)+8>>2]|0)+159|0]=i;break}else if((g|0)==5){a[(c[(c[(c[d>>2]|0)+216>>2]|0)+8>>2]|0)+159|0]=i;break}else{break}}}while(0);f=ty(f)|0;}while((f|0)!=0);return}function mq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=d+8|0;d=c[e>>2]|0;f=c[d+216>>2]|0;g=c[d+212>>2]|0;d=(g|0)==0;do{if((f|0)==0){if(!d){h=5;break}c[b>>2]=0;c[b+4>>2]=0;return}else{if(d){i=f;h=6}else{h=5}}}while(0);if((h|0)==5){f=Lm(g)|0;c[(c[e>>2]|0)+212>>2]=f;f=c[e>>2]|0;g=c[f+216>>2]|0;if((g|0)==0){j=0;k=f}else{i=g;h=6}}do{if((h|0)==6){g=Lm(i)|0;c[(c[e>>2]|0)+216>>2]=g;g=c[e>>2]|0;f=c[g+216>>2]|0;if((f|0)==0){j=0;k=g;break}d=f+8|0;f=c[d>>2]|0;l=(a[f+159|0]|0)==5|0;m=c[c[f+180>>2]>>2]|0;if((m|0)==0){j=l;k=g;break}else{n=m}while(1){m=c[((c[n>>2]&3|0)==2?n:n-32|0)+28>>2]|0;if((m|0)!=(Lm(m)|0)){h=9;break}Kn(n);m=c[c[(c[d>>2]|0)+180>>2]>>2]|0;if((m|0)==0){h=11;break}else{n=m}}if((h|0)==9){cc(121920,126496,346,170232)}else if((h|0)==11){j=l;k=c[e>>2]|0;break}}}while(0);e=c[k+212>>2]|0;a:do{if((e|0)==0){o=0}else{k=e+8|0;h=c[k>>2]|0;n=(a[h+159|0]|0)==3|0;i=c[c[h+172>>2]>>2]|0;if((i|0)==0){o=n;break}else{p=i}while(1){i=c[((c[p>>2]&3|0)==3?p:p+32|0)+28>>2]|0;if((i|0)!=(Lm(i)|0)){break}Kn(p);i=c[c[(c[k>>2]|0)+172>>2]>>2]|0;if((i|0)==0){o=n;break a}else{p=i}}cc(121128,126496,353,170232)}}while(0);c[b>>2]=o;c[b+4>>2]=j;return}function nq(a){a=a|0;var d=0,f=0,g=0,h=0;d=a+8|0;a=c[d>>2]|0;f=a+224|0;b[f>>1]=(e[f>>1]|0)+(c[(c[(c[a+252>>2]|0)+8>>2]|0)+232>>2]|0);a=c[d>>2]|0;f=a+226|0;b[f>>1]=(e[f>>1]|0)+(c[(c[(c[a+252>>2]|0)+8>>2]|0)+232>>2]|0);a=c[d>>2]|0;if((c[a+172>>2]|0)<1){return}else{g=1;h=a}while(1){nq(c[(c[h+176>>2]|0)+(g<<2)>>2]|0);a=c[d>>2]|0;if((g|0)<(c[a+172>>2]|0)){g=g+1|0;h=a}else{break}}return}function oq(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=e+8|0;g=(c[f>>2]|0)+188|0;if((c[g>>2]|0)!=0){return}c[g>>2]=d;hq(d,e);if((ux(e)|0)==0){return}g=d+8|0;d=(c[g>>2]|0)+172|0;h=c[d>>2]|0;i=h+1|0;c[d>>2]=i;d=c[g>>2]|0;j=c[d+176>>2]|0;if((j|0)==0){k=jk((h<<2)+8|0)|0}else{k=lk(j,h+2|0,4,c[d+172>>2]|0)|0}c[(c[g>>2]|0)+176>>2]=k;c[(c[(c[g>>2]|0)+176>>2]|0)+(i<<2)>>2]=e;Rj(e);if((c[53850]|0)!=100){b[(c[f>>2]|0)+224>>1]=32767;b[(c[f>>2]|0)+226>>1]=-1;i=ux(e)|0;g=c[f>>2]|0;if((i|0)==0){l=0;m=g}else{k=i;i=0;d=g;while(1){g=d+226|0;h=k+8|0;j=c[(c[h>>2]|0)+232>>2]|0;if((b[g>>1]|0)<(j|0)){b[g>>1]=j;n=c[f>>2]|0;o=c[(c[h>>2]|0)+232>>2]|0}else{n=d;o=j}j=n+224|0;if((b[j>>1]|0)>(o|0)){b[j>>1]=o}if((i|0)==0){p=k}else{p=(c[(c[h>>2]|0)+232>>2]|0)<(c[(c[i+8>>2]|0)+232>>2]|0)?k:i}h=vx(e,k)|0;j=c[f>>2]|0;if((h|0)==0){l=p;m=j;break}else{k=h;i=p;d=j}}}c[m+252>>2]=l;return}_p(e,0);l=c[f>>2]|0;f=c[l+180>>2]|0;if((f|0)==0){cc(129800,126496,238,170984)}else{q=0;r=f}while(1){f=c[r+8>>2]|0;if((c[f+232>>2]|0)==0){s=(a[f+156|0]|0)==0?r:q}else{s=q}m=c[f+164>>2]|0;if((m|0)==0){break}else{q=s;r=m}}if((s|0)==0){cc(129800,126496,238,170984)}c[l+252>>2]=s;l=ux(e)|0;if((l|0)==0){return}else{t=l}while(1){l=t+8|0;if(!((c[(c[l>>2]|0)+216>>2]|0)<2|(t|0)==(s|0))){u=15;break}Mm(t,s)|0;a[(c[l>>2]|0)+159|0]=7;l=vx(e,t)|0;if((l|0)==0){u=26;break}else{t=l}}if((u|0)==15){cc(124e3,126496,242,170984)}else if((u|0)==26){return}}function pq(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=i;i=i+240|0;e=d|0;f=d+120|0;c[53770]=Wv(b,2,137312,0)|0;g=Wv(b,2,161104,0)|0;c[53768]=g;if(!((c[53770]|0)!=0|(g|0)!=0)){i=d;return}g=ux(b)|0;if((g|0)==0){i=d;return}h=e|0;j=f|0;k=g;do{g=rw(b,k)|0;do{if((g|0)!=0){l=g;m=0;n=0;while(1){o=l;p=c[o>>2]|0;q=p&3;r=c[((q|0)==2?l:l-32|0)+28>>2]|0;s=l+32|0;a:do{if((r|0)==(c[((q|0)==3?l:s)+28>>2]|0)){t=n;u=m}else{v=c[53770]|0;do{if((r|0)==(k|0)&(v|0)!=0){w=fw(l|0,v)|0;if((a[w]|0)==0){x=c[o>>2]|0;break}else{t=n;u=qq(h,m,k,l,w)|0;break a}}else{x=p}}while(0);v=c[53768]|0;if(!((c[((x&3|0)==3?l:s)+28>>2]|0)==(k|0)&(v|0)!=0)){t=n;u=m;break}w=fw(l|0,v)|0;if((a[w]|0)==0){t=n;u=m;break}t=qq(j,n,k,l,w)|0;u=m}}while(0);s=sw(b,l,k)|0;if((s|0)==0){break}else{l=s;m=u;n=t}}if((u|0)>0){n=0;do{m=e+(n*24|0)+4|0;if((c[e+(n*24|0)+8>>2]|0)>1){rq(k,m)}l=c[m>>2]|0;if((l|0)!=0){eF(l)}n=n+1|0;}while((n|0)<(u|0))}if((t|0)>0){y=0}else{break}do{n=f+(y*24|0)+4|0;if((c[f+(y*24|0)+8>>2]|0)>1){rq(k,n)}l=c[n>>2]|0;if((l|0)!=0){eF(l)}y=y+1|0;}while((y|0)<(t|0))}}while(0);k=vx(b,k)|0;}while((k|0)!=0);i=d;return}function qq(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;j=i;i=i+16|0;k=j|0;l=j+8|0;do{if((d|0)>0){m=a[g]|0;n=0;while(1){o=c[b+(n*24|0)>>2]|0;if((a[o]|0)==m<<24>>24){if((Ya(o|0,g|0)|0)==0){break}}p=n+1|0;if((p|0)<(d|0)){n=p}else{q=10;break}}if((q|0)==10){if((d|0)<=4){r=p;q=12;break}m=$w(e|0)|0;Fv(1,130352,(o=i,i=i+16|0,c[o>>2]=5,c[o+8>>2]=m,o)|0)|0;i=o;s=d;i=j;return s|0}o=b+(n*24|0)+4|0;m=c[o>>2]|0;if((m|0)==0){t=kk((c[b+(n*24|0)+8>>2]<<2)+8|0)|0}else{t=mk(m,(c[b+(n*24|0)+8>>2]<<2)+8|0)|0}m=t;c[o>>2]=m;u=b+(n*24|0)+8|0;v=c[u>>2]|0;c[u>>2]=v+1;c[m+(v<<2)>>2]=f;c[(c[o>>2]|0)+(c[u>>2]<<2)>>2]=0;w=d;x=n}else{r=0;q=12}}while(0);if((q|0)==12){q=b+(r*24|0)+8|0;c[q>>2]=0;t=jk(8)|0;p=b+(r*24|0)+4|0;c[p>>2]=t;u=c[q>>2]|0;c[q>>2]=u+1;c[t+(u<<2)>>2]=f;c[(c[p>>2]|0)+(c[q>>2]<<2)>>2]=0;c[b+(r*24|0)>>2]=g;c[b+(r*24|0)+12>>2]=0;h[b+(r*24|0)+16>>3]=0.0;w=d+1|0;x=r}ih(f,k,l);r=(c[((c[f>>2]&3|0)==2?f:f-32|0)+28>>2]|0)==(e|0)?c[l>>2]|0:c[k>>2]|0;if((r|0)==0){s=w;i=j;return s|0}k=b+(x*24|0)+12|0;l=c[k>>2]|0;c[k>>2]=l+1;if((l|0)==0){y=+kh(f,r)}else{y=0.0}h[b+(x*24|0)+16>>3]=y;s=w;i=j;return s|0}function rq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,C=0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;e=i;i=i+80|0;f=e|0;g=e+8|0;j=e+16|0;k=d+4|0;if((c[k>>2]|0)>0){l=d|0;m=b+8|0;n=0.0;o=0.0;p=0;while(1){q=c[(c[l>>2]|0)+(p<<2)>>2]|0;r=c[q>>2]&3;s=c[((r|0)==2?q:q-32|0)+28>>2]|0;if((s|0)==(b|0)){t=c[((r|0)==3?q:q+32|0)+28>>2]|0}else{t=s}s=c[t+8>>2]|0;q=c[m>>2]|0;u=+h[s+16>>3]- +h[q+16>>3];v=+h[s+24>>3]- +h[q+24>>3];w=+cb(+u,+v);x=o+u/w;u=n+v/w;q=p+1|0;if((q|0)<(c[k>>2]|0)){n=u;o=x;p=q}else{y=u;z=x;A=m;break}}}else{y=0.0;z=0.0;A=b+8|0}o=+cb(+z,+y);m=c[A>>2]|0;n=+h[m+16>>3];x=+h[m+24>>3];u=+h[m+88>>3]+ +h[m+96>>3];w=+h[m+80>>3];m=b|0;p=u>w+ +(c[(c[(Hx(m)|0)+8>>2]|0)+240>>2]|0);t=c[A>>2]|0;if(p){B=+h[t+88>>3]+ +h[t+96>>3];C=t}else{w=+h[t+80>>3];u=w+ +(c[(c[(Hx(m)|0)+8>>2]|0)+240>>2]|0);B=u;C=c[A>>2]|0}u=z/o*B+ +h[C+16>>3];z=y/o*B+ +h[C+24>>3];C=j|0;h[C>>3]=n;m=j+8|0;h[m>>3]=x;h[j+16>>3]=(n*2.0+u)/3.0;h[j+24>>3]=(x*2.0+z)/3.0;h[j+32>>3]=(n+u*2.0)/3.0;h[j+40>>3]=(x+z*2.0)/3.0;h[j+48>>3]=u;h[j+56>>3]=z;$l(b,j|0);j=c[A>>2]|0;z=+h[C>>3]- +h[j+16>>3];u=+h[m>>3]- +h[j+24>>3];if(z<0.0){D=z+-.5}else{D=z+.5}z=+(~~D|0);if(u<0.0){E=u+-.5}else{E=u+.5}u=+(~~E|0);E=+h[j+88>>3];m=~~((z+E)*256.0/(E+ +h[j+96>>3]));if((c[k>>2]|0)<=0){F=j;G=F;H=G+145|0;a[H]=1;i=e;return}j=d|0;d=0;do{C=c[(c[j>>2]|0)+(d<<2)>>2]|0;ih(C,f,g);if((C|0)!=0){t=C;do{C=(t|0)==0;a:do{if(!C){p=t;do{l=p;q=c[l>>2]|0;s=p-32|0;if((c[((q&3|0)==2?p:s)+28>>2]|0)==(b|0)){r=c[p+8>>2]|0;I=r;h[r+56>>3]=z;h[r+64>>3]=u;h[r+72>>3]=0.0;c[r+80>>2]=0;a[r+84|0]=1;a[I+85|0]=0;a[I+86|0]=0;a[I+87|0]=0;a[r+88|0]=m;a[I+89|0]=0;c[r+92>>2]=0;J=c[l>>2]|0}else{J=q}q=p+8|0;if((c[((J&3|0)==3?p:p+32|0)+28>>2]|0)==(b|0)){r=c[q>>2]|0;I=r;h[r+16>>3]=z;h[r+24>>3]=u;h[r+32>>3]=0.0;c[r+40>>2]=0;a[r+44|0]=1;a[I+45|0]=0;a[I+46|0]=0;a[I+47|0]=0;a[r+48|0]=m;a[I+49|0]=0;c[r+52>>2]=0}if((a[(c[q>>2]|0)+112|0]|0)!=1){break}q=c[(c[((c[l>>2]&3|0)==2?p:s)+28>>2]|0)+8>>2]|0;if((a[q+156|0]|0)!=1){break}s=q+180|0;if((c[s+4>>2]|0)!=1){break}p=c[c[s>>2]>>2]|0;}while((p|0)!=0);if(C){break}else{K=t}do{p=K;s=c[p>>2]|0;if((c[((s&3|0)==2?K:K-32|0)+28>>2]|0)==(b|0)){q=c[K+8>>2]|0;l=q;h[q+56>>3]=z;h[q+64>>3]=u;h[q+72>>3]=0.0;c[q+80>>2]=0;a[q+84|0]=1;a[l+85|0]=0;a[l+86|0]=0;a[l+87|0]=0;a[q+88|0]=m;a[l+89|0]=0;c[q+92>>2]=0;L=c[p>>2]|0}else{L=s}s=K+32|0;q=K+8|0;if((c[((L&3|0)==3?K:s)+28>>2]|0)==(b|0)){l=c[q>>2]|0;r=l;h[l+16>>3]=z;h[l+24>>3]=u;h[l+32>>3]=0.0;c[l+40>>2]=0;a[l+44|0]=1;a[r+45|0]=0;a[r+46|0]=0;a[r+47|0]=0;a[l+48|0]=m;a[r+49|0]=0;c[l+52>>2]=0}if((a[(c[q>>2]|0)+112|0]|0)!=1){break a}q=c[(c[((c[p>>2]&3|0)==3?K:s)+28>>2]|0)+8>>2]|0;if((a[q+156|0]|0)!=1){break a}s=q+172|0;if((c[s+4>>2]|0)!=1){break a}K=c[c[s>>2]>>2]|0;}while((K|0)!=0)}}while(0);t=c[(c[t+8>>2]|0)+172>>2]|0;}while((t|0)!=0)}d=d+1|0;}while((d|0)<(c[k>>2]|0));F=c[A>>2]|0;G=F;H=G+145|0;a[H]=1;i=e;return}function sq(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;return}function tq(a){a=a|0;var b=0;b=jk(64)|0;c[b+36>>2]=0;c[b+40>>2]=0;c[b+8>>2]=a;return b|0}function uq(a){a=a|0;if((a|0)==0){return}br(c[a+32>>2]|0);eF(a);return}function vq(a){a=a|0;return Lw(c[a+8>>2]|0)|0}function wq(a,b){a=a|0;b=b|0;var d=0,e=0;c[b+4>>2]=0;d=a+4|0;e=c[d>>2]|0;if((e|0)==0){c[a>>2]=b;c[d>>2]=b;return}else{c[e+4>>2]=b;c[d>>2]=b;return}}function xq(a,b){a=a|0;b=b|0;var d=0,e=0;d=a|0;e=c[d>>2]|0;if((e|0)==0){c[d>>2]=b;c[a+4>>2]=b;return}else{c[b+4>>2]=e;c[d>>2]=b;return}}function yq(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0,ya=0.0,za=0,Aa=0,Ba=0;e=i;i=i+128|0;f=e|0;g=c[b+8>>2]|0;j=ux(g)|0;if((j|0)!=0){k=j;do{j=mw(a,k)|0;if((j|0)!=0){l=j;do{if((c[(c[(c[(c[((c[l>>2]&3|0)==2?l:l-32|0)+28>>2]|0)+8>>2]|0)+112>>2]|0)+12>>2]|0)==(b|0)){xw(g,l,1)|0}l=ow(a,l)|0;}while((l|0)!=0)}k=vx(g,k)|0;}while((k|0)!=0)}k=f|0;f=c[45214]|0;c[45214]=f+1;nb(k|0,115440,(a=i,i=i+8|0,c[a>>2]=f,a)|0)|0;i=a;f=ry(g,k,1)|0;Wx(f|0,158088,272,1)|0;l=c[45214]|0;c[45214]=l+1;nb(k|0,115440,(a=i,i=i+8|0,c[a>>2]=l,a)|0)|0;i=a;l=Hw(k,g+12|0,0)|0;j=ux(g)|0;if((j|0)!=0){m=j;do{zx(f,m,1)|0;j=Ax(l,$w(m|0)|0,1)|0;Wx(j|0,108392,304,1)|0;c[(c[(c[m+8>>2]|0)+112>>2]|0)+16>>2]=j;m=vx(g,m)|0;}while((m|0)!=0)}m=ux(g)|0;if((m|0)!=0){j=m;do{m=c[(c[(c[j+8>>2]|0)+112>>2]|0)+16>>2]|0;n=mw(g,j)|0;if((n|0)!=0){o=m+8|0;p=n;do{xw(f,p,1)|0;n=c[(c[(c[(c[((c[p>>2]&3|0)==2?p:p-32|0)+28>>2]|0)+8>>2]|0)+112>>2]|0)+16>>2]|0;q=uw(l,m,n,0,1)|0;Wx(q|0,128120,176,1)|0;c[(c[q+8>>2]|0)+116>>2]=p;q=(c[o>>2]|0)+236|0;c[q>>2]=(c[q>>2]|0)+1;q=(c[n+8>>2]|0)+236|0;c[q>>2]=(c[q>>2]|0)+1;p=ow(g,p)|0;}while((p|0)!=0)}j=vx(g,j)|0;}while((j|0)!=0)}j=Lw(l)|0;p=Nq()|0;o=ux(l)|0;if((o|0)!=0){m=o;do{Pq(p,m);m=vx(l,m)|0;}while((m|0)!=0)}m=j-3|0;if((m|0)>0){j=0;do{o=Rq(p)|0;q=rw(l,o)|0;if((q|0)!=0){n=q;do{q=c[n>>2]&3;r=c[((q|0)==2?n:n-32|0)+28>>2]|0;if((o|0)==(r|0)){s=c[((q|0)==3?n:n+32|0)+28>>2]|0}else{s=r}Qq(p,s);n=sw(l,n,o)|0;}while((n|0)!=0)}n=c[(c[o+8>>2]|0)+236>>2]|0;r=n<<2;q=kk(r)|0;t=q;u=kk(r)|0;r=u;v=rw(l,o)|0;if((v|0)==0){w=0;x=0}else{y=0;z=0;A=v;v=0;while(1){B=c[A>>2]&3;C=c[((B|0)==2?A:A-32|0)+28>>2]|0;if((C|0)==(o|0)){D=c[((B|0)==3?A:A+32|0)+28>>2]|0}else{D=C}C=rw(l,o)|0;do{if((C|0)==0){E=v;F=35}else{B=C;G=0;H=v;while(1){do{if((B|0)==(A|0)){I=H;J=G}else{K=c[B>>2]&3;L=c[((K|0)==2?B:B-32|0)+28>>2]|0;if((L|0)==(o|0)){M=c[((K|0)==3?B:B+32|0)+28>>2]|0}else{M=L}L=uw(l,D,M,0,0)|0;if((L|0)==0){I=H;J=G;break}if(D>>>0>=M>>>0){I=H;J=1;break}K=H+1|0;N=L+8|0;L=c[(c[N>>2]|0)+116>>2]|0;if((L|0)==0){I=K;J=1;break}Gx(f,L)|0;c[(c[N>>2]|0)+116>>2]=0;I=K;J=1}}while(0);K=sw(l,B,o)|0;if((K|0)==0){break}else{B=K;G=J;H=I}}if((J|0)==0){E=I;F=35;break}c[t+(y<<2)>>2]=D;O=z;P=y+1|0;Q=I}}while(0);if((F|0)==35){F=0;c[r+(z<<2)>>2]=D;O=z+1|0;P=y;Q=E}C=sw(l,A,o)|0;if((C|0)==0){w=O;x=Q;break}else{y=P;z=O;A=C;v=Q}}}v=n-1-x|0;a:do{if((v|0)>0){if((v|0)>=(w|0)){if((v|0)!=(w|0)){break}A=c[t>>2]|0;if((w|0)<=0){break}z=A+8|0;y=0;while(1){C=c[r+(y<<2)>>2]|0;Wx(uw(l,A,C,0,1)|0,128120,176,1)|0;H=(c[z>>2]|0)+236|0;c[H>>2]=(c[H>>2]|0)+1;H=(c[C+8>>2]|0)+236|0;c[H>>2]=(c[H>>2]|0)+1;y=y+1|0;if((y|0)>=(w|0)){break a}}}b:do{if((w|0)>0){y=v;z=0;while(1){A=z|1;if((A|0)>=(w|0)){R=y;break b}H=c[r+(z<<2)>>2]|0;C=c[r+(A<<2)>>2]|0;Wx(uw(l,H,C,0,1)|0,128120,176,1)|0;A=(c[H+8>>2]|0)+236|0;c[A>>2]=(c[A>>2]|0)+1;A=(c[C+8>>2]|0)+236|0;c[A>>2]=(c[A>>2]|0)+1;A=y-1|0;C=z+2|0;if((C|0)<(w|0)){y=A;z=C}else{R=A;break}}}else{R=v}}while(0);if((R|0)>0){S=R;T=2}else{break}while(1){z=c[r>>2]|0;y=c[r+(T<<2)>>2]|0;Wx(uw(l,z,y,0,1)|0,128120,176,1)|0;A=(c[z+8>>2]|0)+236|0;c[A>>2]=(c[A>>2]|0)+1;A=(c[y+8>>2]|0)+236|0;c[A>>2]=(c[A>>2]|0)+1;A=S-1|0;if((A|0)>0){S=A;T=T+1|0}else{break}}}}while(0);eF(u);eF(q);r=rw(l,o)|0;if((r|0)!=0){v=r;do{r=c[v>>2]&3;t=c[((r|0)==2?v:v-32|0)+28>>2]|0;if((o|0)==(t|0)){U=c[((r|0)==3?v:v+32|0)+28>>2]|0}else{U=t}t=(c[U+8>>2]|0)+236|0;c[t>>2]=(c[t>>2]|0)-1;Pq(p,U);v=sw(l,v,o)|0;}while((v|0)!=0)}Gx(l,o|0)|0;j=j+1|0;}while((j|0)<(m|0))}Kw(l)|0;Oq(p);p=c[43748]|0;c[43748]=p+1;nb(k|0,120712,(a=i,i=i+8|0,c[a>>2]=p,a)|0)|0;i=a;a=ry(f,k,1)|0;Wx(a|0,158088,272,1)|0;k=ux(f)|0;if((k|0)!=0){p=k;do{zx(a,p,1)|0;k=p+8|0;c[(c[(c[k>>2]|0)+112>>2]|0)+28>>2]=0;c[(c[(c[k>>2]|0)+112>>2]|0)+32>>2]=0;l=(c[(c[k>>2]|0)+112>>2]|0)+4|0;c[l>>2]=c[l>>2]&-2;p=vx(f,p)|0;}while((p|0)!=0)}p=ux(f)|0;if((p|0)!=0){l=p;do{p=c[(c[l+8>>2]|0)+112>>2]|0;if((c[p+4>>2]&1|0)==0){c[p+16>>2]=0;Aq(f,l,a)}l=vx(f,l)|0;}while((l|0)!=0)}do{if((Lw(a)|0)==1){l=ar()|0;p=ux(a)|0;cr(l,0,p);k=(c[(c[p+8>>2]|0)+112>>2]|0)+4|0;c[k>>2]=c[k>>2]|16;X=l}else{l=ux(a)|0;if((l|0)!=0){k=l;do{l=rw(a,k)|0;c:do{if((l|0)!=0){p=l;m=0;while(1){j=sw(a,p,k)|0;if((j|0)==0){break}else{p=j;m=m+1|0}}if((m|0)!=0){break}p=c[(c[(c[k+8>>2]|0)+112>>2]|0)+16>>2]|0;if((p|0)==0){break}else{Y=0;Z=0;_=p}while(1){$=Y+1|0;aa=_+8|0;ba=c[(c[aa>>2]|0)+112>>2]|0;p=c[ba+28>>2]|0;if((p|0)==0){c[ba+20>>2]=k;c[(c[(c[aa>>2]|0)+112>>2]|0)+28>>2]=$;ca=Z}else{if((p|0)>(Y|0)){break}p=c[ba+20>>2]|0;if((p|0)==(Z|0)){da=Z;ea=ba}else{j=ba+24|0;if((c[ba+32>>2]|0)==0){F=72}else{if((c[j>>2]|0)==(Z|0)){fa=Z}else{F=72}}if((F|0)==72){F=0;fa=p}c[j>>2]=p;p=c[(c[aa>>2]|0)+112>>2]|0;c[p+32>>2]=c[p+28>>2];da=fa;ea=c[(c[aa>>2]|0)+112>>2]|0}c[ea+20>>2]=k;c[(c[(c[aa>>2]|0)+112>>2]|0)+28>>2]=$;ca=da}p=c[(c[(c[aa>>2]|0)+112>>2]|0)+16>>2]|0;if((p|0)==0){break c}else{Y=$;Z=ca;_=p}}if((c[ba+32>>2]|0)>(Y|0)){break}c[ba+24>>2]=k;c[(c[(c[aa>>2]|0)+112>>2]|0)+32>>2]=$}}while(0);k=vx(a,k)|0;}while((k|0)!=0)}k=ux(a)|0;if((k|0)==0){ga=0}else{o=0;l=k;k=0;while(1){m=c[(c[l+8>>2]|0)+112>>2]|0;p=(c[m+32>>2]|0)+(c[m+28>>2]|0)|0;m=(p|0)>(k|0);j=m?l:o;U=vx(a,l)|0;if((U|0)==0){ga=j;break}else{o=j;l=U;k=m?p:k}}}k=ar()|0;l=ga+8|0;o=c[(c[(c[l>>2]|0)+112>>2]|0)+20>>2]|0;if((o|0)!=(ga|0)){p=o;do{cr(k,0,p);o=p+8|0;m=(c[(c[o>>2]|0)+112>>2]|0)+4|0;c[m>>2]=c[m>>2]|16;p=c[(c[(c[o>>2]|0)+112>>2]|0)+16>>2]|0;}while((p|0)!=(ga|0))}cr(k,0,ga);p=(c[(c[l>>2]|0)+112>>2]|0)+4|0;c[p>>2]=c[p>>2]|16;if((c[(c[(c[l>>2]|0)+112>>2]|0)+32>>2]|0)==0){X=k;break}p=ar()|0;o=c[(c[(c[l>>2]|0)+112>>2]|0)+24>>2]|0;if((o|0)!=(ga|0)){m=o;do{cr(p,0,m);o=m+8|0;U=(c[(c[o>>2]|0)+112>>2]|0)+4|0;c[U>>2]=c[U>>2]|16;m=c[(c[(c[o>>2]|0)+112>>2]|0)+16>>2]|0;}while((m|0)!=(ga|0))}hr(k,p);X=k}}while(0);ga=ux(g)|0;if((ga|0)!=0){a=X|0;$=X+4|0;aa=ga;do{if((c[(c[(c[aa+8>>2]|0)+112>>2]|0)+4>>2]&16|0)==0){ga=ar()|0;ba=mw(g,aa)|0;if((ba|0)!=0){Y=ba;do{ba=Y;_=Y-32|0;cr(ga,0,c[((c[ba>>2]&3|0)==2?Y:_)+28>>2]|0);ca=(c[(c[(c[((c[ba>>2]&3|0)==2?Y:_)+28>>2]|0)+8>>2]|0)+112>>2]|0)+4|0;c[ca>>2]=c[ca>>2]|32;Y=ow(g,Y)|0;}while((Y|0)!=0)}Y=pw(g,aa)|0;if((Y|0)!=0){k=Y;do{Y=k;p=k+32|0;cr(ga,0,c[((c[Y>>2]&3|0)==3?k:p)+28>>2]|0);ca=(c[(c[(c[((c[Y>>2]&3|0)==3?k:p)+28>>2]|0)+8>>2]|0)+112>>2]|0)+4|0;c[ca>>2]=c[ca>>2]|32;k=qw(g,k)|0;}while((k|0)!=0)}d:do{if((gr(ga)|0)>1){k=c[a>>2]|0;if((k|0)==0){F=100;break}else{ha=k}while(1){k=ha+4|0;if((c[(c[(c[(c[ha>>2]|0)+8>>2]|0)+112>>2]|0)+4>>2]&32|0)!=0){if((c[(c[(c[(c[c[((ha|0)==(c[$>>2]|0)?a:k)>>2]>>2]|0)+8>>2]|0)+112>>2]|0)+4>>2]&32|0)!=0){break}}ca=c[k>>2]|0;if((ca|0)==0){F=100;break d}else{ha=ca}}cr(X,ha,aa)}else{F=100}}while(0);e:do{if((F|0)==100){F=0;f:do{if((gr(ga)|0)>0){ca=c[a>>2]|0;if((ca|0)==0){break}else{ia=ca}while(1){if((c[(c[(c[(c[ia>>2]|0)+8>>2]|0)+112>>2]|0)+4>>2]&32|0)!=0){break}ca=c[ia+4>>2]|0;if((ca|0)==0){break f}else{ia=ca}}cr(X,ia,aa);break e}}while(0);cr(X,0,aa)}}while(0);ca=c[ga>>2]|0;if((ca|0)!=0){k=ca;do{ca=(c[(c[(c[k>>2]|0)+8>>2]|0)+112>>2]|0)+4|0;c[ca>>2]=c[ca>>2]&-33;k=c[k+4>>2]|0;}while((k|0)!=0)}br(ga)}aa=vx(g,aa)|0;}while((aa|0)!=0)}aa=zq(X,g)|0;g:do{if((aa|0)==0){ja=X}else{ia=aa;a=X;ha=0;while(1){$=ux(g)|0;if(($|0)==0){ka=a;la=ia}else{k=$;$=a;ca=ia;while(1){p=rw(g,k)|0;if((p|0)==0){ma=$;na=ca}else{Y=p;p=$;_=ca;while(1){ba=c[Y>>2]&3;Z=c[((ba|0)==3?Y:Y+32|0)+28>>2]|0;if((Z|0)==(k|0)){oa=c[((ba|0)==2?Y:Y-32|0)+28>>2]|0}else{oa=Z}Z=p;ba=_;da=0;while(1){ea=er(Z)|0;fr(Z,k,oa,da);fa=zq(Z,g)|0;if((fa|0)<(ba|0)){br(ea);if((fa|0)==0){ja=Z;break g}else{pa=fa;qa=Z}}else{br(Z);pa=ba;qa=ea}ea=da+1|0;if((ea|0)<2){Z=qa;ba=pa;da=ea}else{break}}da=sw(g,Y,k)|0;if((da|0)==0){ma=qa;na=pa;break}else{Y=da;p=qa;_=pa}}}_=vx(g,k)|0;if((_|0)==0){ka=ma;la=na;break}else{k=_;$=ma;ca=na}}}ca=ha+1|0;if((la|0)!=0&(ia|0)!=(la|0)&(ca|0)<10){ia=la;a=ka;ha=ca}else{ja=ka;break}}}}while(0);ka=gr(ja)|0;la=ja|0;na=c[la>>2]|0;ma=(na|0)==0;if(ma){ra=0.0}else{sa=0.0;g=na;while(1){pa=c[(c[c[(c[(c[g>>2]|0)+8>>2]|0)+112>>2]>>2]|0)+8>>2]|0;ta=+h[pa+32>>3];ua=ta>sa?ta:sa;ta=+h[pa+40>>3];va=ta>ua?ta:ua;pa=c[g+4>>2]|0;if((pa|0)==0){ra=va;break}else{sa=va;g=pa}}}g=(ka|0)==1;if(g){wa=0.0}else{wa=+(ka|0)*(ra+d)/6.283185307179586}do{if(!ma){pa=na;while(1){if((c[(c[(c[(c[pa>>2]|0)+8>>2]|0)+112>>2]|0)+4>>2]&8|0)!=0){F=130;break}qa=c[pa+4>>2]|0;if((qa|0)==0){xa=na;break}else{pa=qa}}if((F|0)==130){dr(ja,pa);xa=c[la>>2]|0}if((xa|0)==0){break}d=6.283185307179586/+(ka|0);qa=0;oa=xa;while(1){X=(c[oa>>2]|0)+8|0;c[(c[(c[X>>2]|0)+112>>2]|0)+16>>2]=qa;h[(c[(c[X>>2]|0)+112>>2]|0)+24>>3]=0.0;sa=+(qa|0)*d;va=wa*+V(sa);h[c[(c[X>>2]|0)+132>>2]>>3]=va;va=wa*+W(sa);h[(c[(c[X>>2]|0)+132>>2]|0)+8>>3]=va;X=c[oa+4>>2]|0;if((X|0)==0){break}else{qa=qa+1|0;oa=X}}}}while(0);if(g){d=ra*.5;h[b+16>>3]=d;ya=d;za=b+24|0;h[za>>3]=ya;Aa=b+48|0;h[Aa>>3]=-1.0;Ba=Kw(f)|0;i=e;return ja|0}else{h[b+16>>3]=wa;ya=wa;za=b+24|0;h[za>>3]=ya;Aa=b+48|0;h[Aa>>3]=-1.0;Ba=Kw(f)|0;i=e;return ja|0}return 0}function zq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=Vq()|0;e=ux(b)|0;if((e|0)!=0){f=e;do{e=mw(b,f)|0;if((e|0)!=0){g=e;do{c[c[(c[g+8>>2]|0)+120>>2]>>2]=0;g=ow(b,g)|0;}while((g|0)!=0)}f=vx(b,f)|0;}while((f|0)!=0)}f=c[a>>2]|0;if((f|0)==0){h=0;Wq(d);return h|0}a=d|0;g=0;e=1;i=f;while(1){f=c[i>>2]|0;j=rw(b,f)|0;if((j|0)==0){k=g}else{l=j;j=g;while(1){m=l+8|0;if((c[c[(c[m>>2]|0)+120>>2]>>2]|0)>0){n=Hc[c[a>>2]&63](d,0,128)|0;if((n|0)==0){o=j}else{p=j;q=n;while(1){n=c[q+8>>2]|0;do{if((c[c[(c[n+8>>2]|0)+120>>2]>>2]|0)>(c[c[(c[m>>2]|0)+120>>2]>>2]|0)){r=c[n>>2]&3;if((c[((r|0)==2?n:n-32|0)+28>>2]|0)==(f|0)){s=p;break}s=((c[((r|0)==3?n:n+32|0)+28>>2]|0)!=(f|0))+p|0}else{s=p}}while(0);n=Hc[c[a>>2]&63](d,q,8)|0;if((n|0)==0){o=s;break}else{p=s;q=n}}}Yq(d,l);t=o}else{t=j}q=sw(b,l,f)|0;if((q|0)==0){k=t;break}else{l=q;j=t}}}j=rw(b,f)|0;if((j|0)!=0){l=j;do{j=c[(c[l+8>>2]|0)+120>>2]|0;if((c[j>>2]|0)==0){c[j>>2]=e;Xq(d,l)}l=sw(b,l,f)|0;}while((l|0)!=0)}l=c[i+4>>2]|0;if((l|0)==0){h=k;break}else{g=k;e=e+1|0;i=l}}Wq(d);return h|0}function Aq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=(c[(c[b+8>>2]|0)+112>>2]|0)+4|0;c[e>>2]=c[e>>2]|1;e=rw(a,b)|0;if((e|0)==0){return}else{f=e}do{e=c[f>>2]&3;g=c[((e|0)==2?f:f-32|0)+28>>2]|0;if((g|0)==(b|0)){h=c[((e|0)==3?f:f+32|0)+28>>2]|0}else{h=g}g=h+8|0;if((c[(c[(c[g>>2]|0)+112>>2]|0)+4>>2]&1|0)==0){xw(d,f,1)|0;c[(c[(c[g>>2]|0)+112>>2]|0)+16>>2]=b;Aq(a,h,d)}f=sw(a,f,b)|0;}while((f|0)!=0);return}function Bq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;e=i;i=i+8|0;f=e|0;g=c[d+24>>2]|0;if((g|0)==0){h=3}else{j=Ax(b,g,0)|0;if((j|0)==0){h=3}else{k=j}}a:do{if((h|0)==3){j=d+20|0;do{if((c[j>>2]|0)!=0){g=ux(b)|0;if((g|0)==0){break}else{l=g}do{if((Jm(c[c[(c[l+8>>2]|0)+112>>2]>>2]|0,c[j>>2]|0,0)|0)<<24>>24!=0){k=l;break a}l=vx(b,l)|0;}while((l|0)!=0)}}while(0);k=ux(b)|0}}while(0);if((a[213992]|0)!=0){l=c[o>>2]|0;h=$w(k|0)|0;gc(l|0,102768,(l=i,i=i+8|0,c[l>>2]=h,l)|0)|0;i=l}c[f+4>>2]=0;c[f>>2]=0;Dq(b,k,d,1,f);f=d|0;k=c[d>>2]|0;d=c[k+4>>2]|0;if((d|0)==0){sq(f);i=e;return k|0}else{m=d}while(1){d=c[m+8>>2]|0;b=ux(d)|0;l=c[(c[b+8>>2]|0)+112>>2]|0;h=c[l+20>>2]|0;j=c[l+8>>2]|0;l=vx(d,b)|0;if((l|0)==0){n=j;p=b}else{g=h;h=l;l=j;j=b;while(1){b=c[(c[h+8>>2]|0)+112>>2]|0;q=c[b+20>>2]|0;if((q|0)<(g|0)){r=h;s=c[b+8>>2]|0;t=q}else{r=j;s=l;t=g}q=vx(d,h)|0;if((q|0)==0){n=s;p=r;break}else{g=t;h=q;l=s;j=r}}}j=n+8|0;l=(c[(c[j>>2]|0)+112>>2]|0)+4|0;c[l>>2]=c[l>>2]|8;c[m>>2]=p;l=c[m+4>>2]|0;wq((c[(c[(c[j>>2]|0)+112>>2]|0)+12>>2]|0)+36|0,m);if((l|0)==0){break}else{m=l}}sq(f);i=e;return k|0}function Cq(a){a=a|0;var b=0,d=0;b=c[a+36>>2]|0;if((b|0)==0){uq(a);return}else{d=b}while(1){b=c[d+4>>2]|0;Cq(d);if((b|0)==0){break}else{d=b}}uq(a);return}function Dq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;g=i;i=i+128|0;h=g|0;j=d+8|0;k=c[j>>2]|0;c[j>>2]=k+1;j=b+8|0;c[(c[(c[j>>2]|0)+112>>2]|0)+20>>2]=k;c[(c[(c[j>>2]|0)+112>>2]|0)+24>>2]=k;k=rw(a,b)|0;a:do{if((k|0)!=0){l=f|0;m=f+4|0;n=h|0;o=d+12|0;p=(e|0)==0;q=d|0;r=k;b:while(1){s=c[r>>2]&3;t=c[((s|0)==2?r:r-32|0)+28>>2]|0;do{if((t|0)==(b|0)){u=c[((s|0)==3?r:r+32|0)+28>>2]|0;v=c[(c[r+8>>2]|0)+120>>2]|0;if((c[v>>2]|0)!=0){w=u;break}c[v>>2]=-1;w=u}else{u=c[(c[r+8>>2]|0)+120>>2]|0;if((c[u>>2]|0)!=0){w=t;break}c[u>>2]=1;w=t}}while(0);t=w+8|0;s=c[(c[t>>2]|0)+112>>2]|0;u=c[s+20>>2]|0;c:do{if((u|0)==0){c[s+8>>2]=b;c[(c[(c[r+8>>2]|0)+120>>2]|0)+4>>2]=c[l>>2];c[l>>2]=r;c[m>>2]=(c[m>>2]|0)+1;Dq(a,w,d,0,f);v=(c[(c[j>>2]|0)+112>>2]|0)+24|0;x=c[v>>2]|0;y=c[(c[(c[t>>2]|0)+112>>2]|0)+24>>2]|0;c[v>>2]=(x|0)<(y|0)?x:y;if((c[(c[(c[t>>2]|0)+112>>2]|0)+24>>2]|0)<(c[(c[(c[j>>2]|0)+112>>2]|0)+20>>2]|0)){break}else{z=0}while(1){y=c[l>>2]|0;if((y|0)==0){A=13;break b}x=c[m>>2]|0;if((x|0)<=0){A=12;break b}v=y+8|0;c[l>>2]=c[(c[(c[v>>2]|0)+120>>2]|0)+4>>2];c[m>>2]=x-1;x=c[y>>2]&3;if((c[c[(c[v>>2]|0)+120>>2]>>2]|0)==1){B=(x|0)==2?y:y-32|0}else{B=(x|0)==3?y:y+32|0}x=c[B+28>>2]|0;v=x+8|0;if((c[(c[(c[v>>2]|0)+112>>2]|0)+12>>2]|0)==0){if((z|0)==0){C=c[o>>2]|0;c[o>>2]=C+1;nb(n|0,145288,(D=i,i=i+8|0,c[D>>2]=C,D)|0)|0;i=D;C=ry(a,n,1)|0;Wx(C|0,120200,272,1)|0;E=tq(C)|0}else{E=z}zx(c[E+8>>2]|0,x,1)|0;c[(c[(c[v>>2]|0)+112>>2]|0)+12>>2]=E;F=E}else{F=z}if((y|0)==(r|0)){break}else{z=F}}if((F|0)==0){break}do{if((c[(c[(c[j>>2]|0)+112>>2]|0)+12>>2]|0)==0){if((vq(F)|0)<=1){break}zx(c[F+8>>2]|0,b,1)|0;c[(c[(c[j>>2]|0)+112>>2]|0)+12>>2]=F}}while(0);do{if(!p){if((c[(c[(c[j>>2]|0)+112>>2]|0)+12>>2]|0)!=(F|0)){break}xq(q,F);break c}}while(0);wq(q,F)}else{y=c[(c[j>>2]|0)+112>>2]|0;if((c[y+8>>2]|0)==(w|0)){break}v=y+24|0;y=c[v>>2]|0;c[v>>2]=(y|0)<(u|0)?y:u}}while(0);r=sw(a,r,b)|0;if((r|0)==0){break a}}if((A|0)==12){cc(111616,104840,61,170096)}else if((A|0)==13){cc(103904,104840,65,170096)}}}while(0);if((e|0)==0){i=g;return}if((c[(c[(c[j>>2]|0)+112>>2]|0)+12>>2]|0)!=0){i=g;return}e=h|0;h=d+12|0;A=c[h>>2]|0;c[h>>2]=A+1;nb(e|0,145288,(D=i,i=i+8|0,c[D>>2]=A,D)|0)|0;i=D;D=ry(a,e,1)|0;Wx(D|0,120200,272,1)|0;e=tq(D)|0;zx(c[e+8>>2]|0,b,1)|0;c[(c[(c[j>>2]|0)+112>>2]|0)+12>>2]=e;xq(d|0,e);i=g;return}function Eq(a,b,c){a=a|0;b=b|0;c=c|0;Fq(a,b,+h[c+32>>3]);return}function Fq(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0.0,O=0.0,P=0,Q=0.0,R=0,S=0.0,U=0,X=0.0,Y=0.0,_=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0,ga=0.0,ha=0,ia=0.0,ja=0.0,ka=0,la=0,ma=0,na=0,oa=0.0,pa=0.0,qa=0,ra=0.0,sa=0.0,ta=0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ba=0,Ca=0.0,Da=0.0,Ea=0,Fa=0,Ga=0,Ha=0.0,Ia=0.0,Ja=0,Ka=0,La=0,Ma=0.0,Na=0.0,Oa=0,Pa=0.0,Qa=0.0,Ra=0.0,Sa=0.0;e=b+36|0;f=c[e>>2]|0;if((f|0)==0){g=0}else{i=0;j=f;while(1){Fq(a,j,d);f=i+1|0;k=c[j+4>>2]|0;if((k|0)==0){g=f;break}else{i=f;j=k}}}j=yq(a,b,d)|0;c[b+32>>2]=j;a=gr(j)|0;if((g|0)>0){i=jk(g*56|0)|0;k=i;f=c[e>>2]|0;e=b+16|0;l=+h[e>>3];m=c[b>>2]|0;n=6.283185307179586/+(a|0);o=c[j>>2]|0;a:do{if((o|0)==0){p=-1.0;q=-1.0;r=l;s=0.0}else{j=(f|0)==0;t=l+d;if(j){u=t+0.0;v=0;w=0;x=o;while(1){y=c[x>>2]|0;if((c[(c[(c[y+8>>2]|0)+112>>2]|0)+4>>2]&8|0)==0){z=w}else{c[k+(w*56|0)>>2]=y;h[k+(w*56|0)+8>>3]=n*+(v|0);h[k+(w*56|0)+32>>3]=0.0;c[k+(w*56|0)+48>>2]=0;h[k+(w*56|0)+16>>3]=u;h[k+(w*56|0)+24>>3]=0.0;z=w+1|0}y=c[x+4>>2]|0;if((y|0)==0){A=0.0;B=z;break}else{v=v+1|0;w=z;x=y}}}else{x=0;u=0.0;w=0;v=o;while(1){y=c[v>>2]|0;C=x+1|0;if((c[(c[(c[y+8>>2]|0)+112>>2]|0)+4>>2]&8|0)==0){D=w;E=u}else{c[k+(w*56|0)>>2]=y;h[k+(w*56|0)+8>>3]=n*+(x|0);F=0.0;G=0.0;H=0;I=f;while(1){J=c[I>>2]|0;if((J|0)==0){K=0}else{K=c[(c[(c[J+8>>2]|0)+112>>2]|0)+8>>2]|0}if((K|0)==(y|0)){L=+h[I+16>>3];M=H+1|0;N=G+(L*2.0+d);O=F<L?L:F}else{M=H;N=G;O=F}J=c[I+4>>2]|0;if((J|0)==0){break}else{F=O;G=N;H=M;I=J}}h[k+(w*56|0)+32>>3]=N;c[k+(w*56|0)+48>>2]=M;h[k+(w*56|0)+16>>3]=t+O;h[k+(w*56|0)+24>>3]=O;D=w+1|0;E=O}I=c[v+4>>2]|0;if((I|0)==0){A=E;B=D;break}else{x=C;u=E;w=D;v=I}}}do{if((B|0)==1){h[i+40>>3]=1.0;P=1}else if((B|0)==2){u=+h[i+64>>3]- +h[i+8>>3];if(u>3.141592653589793){Q=6.283185307179586-u}else{Q=u}u=+h[i+72>>3];t=+h[i+16>>3];G=(+h[i+32>>3]*u+ +h[i+88>>3]*t)/(u*Q*2.0*t);t=G<1.0?1.0:G;v=i+40|0;if(t>+h[v>>3]){h[v>>3]=t}v=i+96|0;if(t<=+h[v>>3]){R=29;break}h[v>>3]=t;R=29}else{if((B|0)<=0){p=-1.0;q=-1.0;r=l;s=A;break a}v=i+8|0;w=0;x=k;while(1){I=w+1|0;if((I|0)==(B|0)){S=+h[v>>3]- +h[x+8>>3]+6.283185307179586;U=k}else{S=+h[x+64>>3]- +h[x+8>>3];U=x+56|0}t=+h[U+16>>3];G=+h[x+16>>3];u=(+h[x+32>>3]*t+ +h[U+32>>3]*G)/(t*S*2.0*G);G=u<1.0?1.0:u;H=x+40|0;if(G>+h[H>>3]){h[H>>3]=G}H=U+40|0;if(G>+h[H>>3]){h[H>>3]=G}if((I|0)<(B|0)){w=I;x=x+56|0}else{R=29;break}}}}while(0);if((R|0)==29){if((B|0)>0){P=B}else{p=-1.0;q=-1.0;r=l;s=A;break}}x=(a|0)==1;w=(a|0)>1;v=m+8|0;G=-1.0;u=-1.0;t=l;C=0;while(1){I=k+(C*56|0)|0;F=+h[k+(C*56|0)+40>>3]*+h[k+(C*56|0)+16>>3];do{if(x){L=+h[k+(C*56|0)+32>>3];X=L/6.283185307179586;Y=F>X?F:X;X=Y*6.283185307179586-L;if(X<=0.0){_=d;aa=0.0;ba=Y;break}_=X/+(c[k+(C*56|0)+48>>2]|0)+d;aa=0.0;ba=Y}else{_=d;aa=+h[k+(C*56|0)+8>>3]- +h[k+(C*56|0)+32>>3]/(F*2.0);ba=F}}while(0);F=ba+ +h[k+(C*56|0)+24>>3];Y=F>t?F:t;F=_/ba;H=k+(C*56|0)+48|0;y=((c[H>>2]|0)+1|0)/2|0;if(j){ca=0.0;da=u;ea=G}else{J=I|0;X=F*.5;fa=k+(C*56|0)+8|0;L=x?F:X;F=0.0;ga=aa;ha=0;ia=u;ja=G;ka=f;while(1){la=ka|0;ma=c[la>>2]|0;if((ma|0)==0){na=0}else{na=c[(c[(c[ma+8>>2]|0)+112>>2]|0)+8>>2]|0}do{if((na|0)==(c[J>>2]|0)){ma=ka+32|0;if((gr(c[ma>>2]|0)|0)<1){oa=ja;pa=ia;qa=ha;ra=ga;sa=F;break}ta=ka+16|0;ua=+h[ta>>3]/ba;do{if(x){do{if(ga!=0.0){if((c[H>>2]|0)==2){va=3.141592653589793;break}va=ga+ua}else{va=ga}}while(0);wa=va;xa=ia<0.0?va:ia;ya=va}else{if((c[H>>2]|0)==1){wa=ja;xa=ia;ya=+h[fa>>3];break}else{wa=ja;xa=ia;ya=ga+(X+ua);break}}}while(0);za=ba*+V(ya);Aa=ba*+W(ya);Ba=c[ka+8>>2]|0;Ca=+h[ka+48>>3];b:do{if(Ca<0.0){if((gr(c[ma>>2]|0)|0)==2){Da=ya+ -1.5707963267948966;break}Ea=c[la>>2]|0;Fa=Ea+8|0;Ga=c[(c[Fa>>2]|0)+132>>2]|0;Ha=za+ +h[Ga>>3];Ia=Aa+ +h[Ga+8>>3];Ga=ux(Ba)|0;if((Ga|0)==0){Ja=Ea}else{Ka=Ea;La=Ga;Ma=Ha*Ha+Ia*Ia;while(1){do{if((La|0)==(Ea|0)){Na=Ma;Oa=Ka}else{Ga=c[(c[La+8>>2]|0)+132>>2]|0;Ia=za+ +h[Ga>>3];Ha=Aa+ +h[Ga+8>>3];Pa=Ia*Ia+Ha*Ha;if(Pa>=Ma){Na=Ma;Oa=Ka;break}Na=Pa;Oa=La}}while(0);Ga=vx(Ba,La)|0;if((Ga|0)==0){Ja=Oa;break}else{Ka=Oa;La=Ga;Ma=Na}}}if((Ea|0)==(Ja|0)){Da=0.0;break}Ma=+h[ka+24>>3];Pa=+h[ta>>3]-Ma;La=c[Fa>>2]|0;Ka=c[La+132>>2]|0;Ha=+h[Ka>>3];do{if((c[ka+56>>2]&1|0)!=0){if(Ha<=-0.0-Pa){break}Ia=+T(za*za+Aa*Aa);Qa=+$(+(+h[Ka+8>>3]),+(Pa+Ha));Ra=+V(Qa);Da=ya+(1.5707963267948966-Qa- +Z(Ra*((Pa-Ma/Ra)/Ia)));break b}}while(0);Ma=3.141592653589793- +$(+(+h[Ka+8>>3]),+Ha);Pa=ya+(Ma- +h[(c[La+112>>2]|0)+24>>3]);if(Pa<=6.283185307179586){Da=Pa;break}Da=Pa+ -6.283185307179586}else{Pa=ya+(3.141592653589793-Ca);if(Pa>=0.0){Da=Pa;break}Da=Pa+6.283185307179586}}while(0);Gq(ka,za,Aa,Da);Ca=L+ua+ya;ta=ha+1|0;oa=wa;pa=xa;qa=ta;ra=Ca;sa=(ta|0)==(y|0)?Ca:F}else{oa=ja;pa=ia;qa=ha;ra=ga;sa=F}}while(0);la=c[ka+4>>2]|0;if((la|0)==0){ca=sa;da=pa;ea=oa;break}else{F=sa;ga=ra;ha=qa;ia=pa;ja=oa;ka=la}}}do{if(w){if((c[I>>2]|0)!=(m|0)){break}h[(c[(c[v>>2]|0)+112>>2]|0)+24>>3]=ca}}while(0);I=C+1|0;if((I|0)<(P|0)){G=ea;u=da;t=Y;C=I}else{p=ea;q=da;r=Y;s=A;break}}}}while(0);eF(i);if((g|0)==1){A=d*.5+s;Gq(b,-0.0-A,0.0,0.0);h[e>>3]=A+ +h[e>>3];g=b+56|0;c[g>>2]=c[g>>2]|1}else{h[e>>3]=r}Sa=(q+p)*.5+ -3.141592653589793}else{Sa=3.141592653589793}if((a|0)!=1){return}a=c[b>>2]|0;if((a|0)==0){return}if((c[(c[(c[a+8>>2]|0)+112>>2]|0)+8>>2]|0)==0){return}a=b+48|0;h[a>>3]=Sa;if(Sa>=0.0){return}h[a>>3]=Sa+6.283185307179586;return}function Gq(a,b,d,e){a=a|0;b=+b;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0;f=c[a+8>>2]|0;g=ux(f)|0;if((g|0)!=0){if(e!=0.0){i=g;do{j=i+8|0;k=c[(c[j>>2]|0)+132>>2]|0;l=k;m=+h[l>>3];n=+h[k+8>>3];o=+V(e);p=+W(e);h[l>>3]=m*o-n*p+b;h[(c[(c[j>>2]|0)+132>>2]|0)+8>>3]=n*o+m*p+d;i=vx(f,i)|0;}while((i|0)!=0)}else{i=g;do{g=i+8|0;j=c[(c[g>>2]|0)+132>>2]|0;l=j;p=+h[j+8>>3];h[l>>3]=+h[l>>3]+b;h[(c[(c[g>>2]|0)+132>>2]|0)+8>>3]=p+d;i=vx(f,i)|0;}while((i|0)!=0)}}i=c[a+36>>2]|0;if((i|0)==0){return}else{q=i}do{Gq(q,b,d,e);q=c[q+4>>2]|0;}while((q|0)!=0);return}function Hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0;d=i;i=i+128|0;e=(Lw(a)|0)==1;f=(ux(a)|0)+8|0;g=c[f>>2]|0;if(e){h[c[g+132>>2]>>3]=0.0;h[(c[(c[f>>2]|0)+132>>2]|0)+8>>3]=0.0;i=d;return}f=Hx(c[c[g+112>>2]>>2]|0)|0;if((f|0)==(c[44682]|0)){j=0;k=f}else{c[45219]=0;c[44682]=f;g=Wv(f,0,131232,0)|0;c[44686]=Wv(c[44682]|0,1,116448,0)|0;c[44684]=Wv(c[44682]|0,1,109176,0)|0;j=g;k=c[44682]|0}c[44680]=ew(k|0,109176)|0;h[2694]=+Fm(c[44682]|0,j,1.0,0.0);sq(180864);c[45218]=1;h[22612]=+h[2694];c[45220]=c[44686];c[45221]=c[44684];c[45222]=c[44680];do{if((Km(ew(b|0,159688)|0)|0)<<24>>24==0){l=Bq(a,180864)|0}else{j=d|0;k=c[45219]|0;c[45219]=k+1;nb(j|0,163248,(g=i,i=i+8|0,c[g>>2]=k,g)|0)|0;i=g;g=tq(ry(a,j,1)|0)|0;j=ux(a)|0;if((j|0)==0){l=g;break}k=g+8|0;f=j;while(1){zx(c[k>>2]|0,f,1)|0;c[(c[(c[f+8>>2]|0)+112>>2]|0)+12>>2]=g;j=vx(a,f)|0;if((j|0)==0){l=g;break}else{f=j}}}}while(0);Eq(a,l,180864);Cq(l);i=d;return}function Iq(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;qn(a,2);d=a+8|0;b[(c[d>>2]|0)+168>>1]=2;c[53568]=2;e=jk((Lw(a)|0)<<2)|0;f=jk(((Lw(a)|0)<<2)+4|0)|0;c[(c[d>>2]|0)+144>>2]=f;f=ux(a)|0;if((f|0)!=0){g=0;i=f;while(1){qt(i);c[(c[i+8>>2]|0)+112>>2]=e+(g<<2);c[(c[(c[d>>2]|0)+144>>2]|0)+(g<<2)>>2]=i;f=vx(a,i)|0;if((f|0)==0){break}else{g=g+1|0;i=f}}}i=ux(a)|0;if((i|0)==0){return}else{j=i}do{i=mw(a,j)|0;if((i|0)!=0){g=i;do{i=g|0;Wx(i,130336,176,1)|0;Zm(g)|0;k=+Fm(i,c[53750]|0,1.0,0.0);h[(c[g+8>>2]|0)+128>>3]=k;g=ow(a,g)|0;}while((g|0)!=0)}j=vx(a,j)|0;}while((j|0)!=0);return}function Jq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=i;i=i+8|0;e=d|0;f=Hw(142352,173928,0)|0;Wx(f|0,161376,272,1)|0;c[(c[a+8>>2]|0)+132>>2]=f;g=ux(a)|0;if((g|0)!=0){j=g;do{g=j+8|0;if((c[c[(c[g>>2]|0)+112>>2]>>2]|0)==0){k=Ax(f,$w(j|0)|0,1)|0;Wx(k|0,108856,304,1)|0;l=jk(40)|0;m=k+8|0;c[(c[m>>2]|0)+112>>2]=l;l=jk(c[53568]<<3)|0;c[(c[m>>2]|0)+132>>2]=l;l=j+8|0;h[(c[m>>2]|0)+88>>3]=+h[(c[l>>2]|0)+88>>3];h[(c[m>>2]|0)+96>>3]=+h[(c[l>>2]|0)+96>>3];h[(c[m>>2]|0)+80>>3]=+h[(c[l>>2]|0)+80>>3];c[c[(c[m>>2]|0)+112>>2]>>2]=j;c[c[(c[g>>2]|0)+112>>2]>>2]=k}j=vx(a,j)|0;}while((j|0)!=0)}j=ux(a)|0;if((j|0)!=0){k=j;do{j=mw(a,k)|0;if((j|0)!=0){g=j;do{j=c[g>>2]&3;m=c[c[(c[(c[((j|0)==3?g:g+32|0)+28>>2]|0)+8>>2]|0)+112>>2]>>2]|0;l=c[c[(c[(c[((j|0)==2?g:g-32|0)+28>>2]|0)+8>>2]|0)+112>>2]>>2]|0;if((m|0)!=(l|0)){Wx(uw(f,m,l,0,1)|0,130336,176,1)|0}g=ow(a,g)|0;}while((g|0)!=0)}k=vx(a,k)|0;}while((k|0)!=0)}k=iv(f,e,0)|0;if((c[e>>2]|0)>0){g=0;do{l=c[k+(g<<2)>>2]|0;m=ux(l)|0;if((m|0)!=0){j=m;do{m=mw(a,c[c[(c[j+8>>2]|0)+112>>2]>>2]|0)|0;if((m|0)!=0){n=m;do{m=c[c[(c[(c[((c[n>>2]&3|0)==2?n:n-32|0)+28>>2]|0)+8>>2]|0)+112>>2]>>2]|0;if((j|0)!=(m|0)){o=uw(f,j,m,0,1)|0;Wx(o|0,130336,176,1)|0;xw(l,o,1)|0}n=ow(a,n)|0;}while((n|0)!=0)}j=vx(l,j)|0;}while((j|0)!=0)}g=g+1|0;}while((g|0)<(c[e>>2]|0))}g=ux(f)|0;if((g|0)==0){p=c[e>>2]|0;c[b>>2]=p;i=d;return k|0}else{q=g}do{g=mw(f,q)|0;if((g|0)!=0){a=g;do{g=jk(8)|0;c[(c[a+8>>2]|0)+120>>2]=g;a=ow(f,a)|0;}while((a|0)!=0)}q=vx(f,q)|0;}while((q|0)!=0);p=c[e>>2]|0;c[b>>2]=p;i=d;return k|0}function Kq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=i;i=i+40|0;d=b|0;e=b+8|0;if((Lw(a)|0)==0){i=b;return}f=Jq(a,d)|0;g=c[d>>2]|0;d=c[f>>2]|0;do{if((g|0)==1){Hq(d,a);j=c[f>>2]|0;k=ux(j)|0;if((k|0)!=0){l=k;do{k=l+8|0;m=c[k>>2]|0;n=(c[c[m+112>>2]>>2]|0)+8|0;h[c[(c[n>>2]|0)+132>>2]>>3]=+h[c[m+132>>2]>>3];h[(c[(c[n>>2]|0)+132>>2]|0)+8>>3]=+h[(c[(c[k>>2]|0)+132>>2]|0)+8>>3];l=vx(j,l)|0;}while((l|0)!=0)}nr(a)|0}else{l=c[d+48>>2]|0;tv(a,2,8,e)|0;j=(g|0)>0;if(j){o=0}else{sv(g,f,l,e)|0;break}do{k=c[f+(o<<2)>>2]|0;Hq(k,a);nr(k)|0;o=o+1|0;}while((o|0)<(g|0));sv(g,f,l,e)|0;if(j){p=0}else{break}do{k=c[f+(p<<2)>>2]|0;n=ux(k)|0;if((n|0)!=0){m=n;do{n=m+8|0;q=c[n>>2]|0;r=(c[c[q+112>>2]>>2]|0)+8|0;h[c[(c[r>>2]|0)+132>>2]>>3]=+h[c[q+132>>2]>>3];h[(c[(c[r>>2]|0)+132>>2]|0)+8>>3]=+h[(c[(c[n>>2]|0)+132>>2]|0)+8>>3];m=vx(k,m)|0;}while((m|0)!=0)}p=p+1|0;}while((p|0)<(g|0))}}while(0);eF(f);i=b;return}function Lq(a){a=a|0;if((Lw(a)|0)==0){return}Iq(a);Kq(a);eF(c[(c[(ux(a)|0)+8>>2]|0)+112>>2]|0);Pt(a);Xk(a);return}function Mq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=ux(a)|0;if((b|0)==0){return}d=a+8|0;e=c[(c[d>>2]|0)+132>>2]|0;f=ux(e)|0;if((f|0)!=0){g=f;do{f=mw(e,g)|0;if((f|0)!=0){h=f;do{eF(c[(c[h+8>>2]|0)+120>>2]|0);h=ow(e,h)|0;}while((h|0)!=0)}h=g+8|0;eF(c[(c[h>>2]|0)+112>>2]|0);eF(c[(c[h>>2]|0)+132>>2]|0);g=vx(e,g)|0;}while((g|0)!=0)}Kw(e)|0;e=b;do{b=mw(a,e)|0;if((b|0)!=0){g=b;do{tn(g);g=ow(a,g)|0;}while((g|0)!=0)}un(e);e=vx(a,e)|0;}while((e|0)!=0);eF(c[(c[d>>2]|0)+144>>2]|0);if((Ix(a|0)|0)==(a|0)){return}_x(a,0,116128);return}function Nq(){return $g(17840,c[43330]|0)|0}function Oq(a){a=a|0;Vg(a)|0;return}function Pq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;e=d|0;f=b+8|0;c[e+8>>2]=c[(c[f>>2]|0)+236>>2];g=(Hc[c[a>>2]&63](a,e,1)|0)+12|0;c[(c[f>>2]|0)+164>>2]=c[g>>2];c[g>>2]=b;i=d;return}function Qq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;d=i;i=i+16|0;e=d|0;f=b+8|0;c[e+8>>2]=c[(c[f>>2]|0)+236>>2];g=a|0;h=Hc[c[g>>2]&63](a,e,4)|0;if((h|0)==0){cc(129488,159160,107,170032)}e=h+12|0;j=c[e>>2]|0;if((j|0)==(b|0)){k=c[(c[f>>2]|0)+164>>2]|0;c[e>>2]=k;if((k|0)!=0){i=d;return}Hc[c[g>>2]&63](a,h,2)|0;i=d;return}h=c[(c[j+8>>2]|0)+164>>2]|0;a=h;g=(h|0)!=0;if(g&(a|0)!=(b|0)){k=h;e=a;while(1){a=c[(c[k+8>>2]|0)+164>>2]|0;f=a;l=(a|0)!=0;if(l&(f|0)!=(b|0)){k=a;e=f}else{m=e;n=a;o=l;break}}}else{m=j;n=h;o=g}if(!o){i=d;return}c[(c[m+8>>2]|0)+164>>2]=c[(c[n+8>>2]|0)+164>>2];i=d;return}function Rq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a|0;d=Hc[c[b>>2]&63](a,0,128)|0;if((d|0)==0){e=0;return e|0}f=d+12|0;g=c[f>>2]|0;h=c[(c[g+8>>2]|0)+164>>2]|0;c[f>>2]=h;if((h|0)!=0){e=g;return e|0}Hc[c[b>>2]&63](a,d,2)|0;e=g;return e|0}function Sq(a,b,d){a=a|0;b=b|0;d=d|0;d=kk(16)|0;c[d+12>>2]=0;c[d+8>>2]=c[b+8>>2];return d|0}function Tq(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function Uq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=c[b>>2]|0;b=c[d>>2]|0;if((e|0)<(b|0)){f=-1;return f|0}f=(e|0)>(b|0)|0;return f|0}function Vq(){return $g(173264,c[43330]|0)|0}function Wq(a){a=a|0;Vg(a)|0;return}function Xq(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d|0;c[e+8>>2]=b;Hc[c[a>>2]&63](a,e,1)|0;i=d;return}function Yq(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;i=i+16|0;e=d|0;c[e+8>>2]=b;Hc[c[a>>2]&63](a,e,2)|0;i=d;return}function Zq(a,b,d){a=a|0;b=b|0;d=d|0;d=kk(12)|0;c[d+8>>2]=c[b+8>>2];return d|0}function _q(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function $q(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=c[b>>2]|0;b=c[d>>2]|0;if(e>>>0>b>>>0){f=1;return f|0}f=(e>>>0<b>>>0)<<31>>31;return f|0}function ar(){return jk(12)|0}function br(a){a=a|0;var b=0,d=0;if((a|0)==0){return}b=c[a>>2]|0;if((b|0)!=0){d=b;while(1){b=c[d+4>>2]|0;eF(d);if((b|0)==0){break}else{d=b}}}eF(a);return}function cr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=jk(12)|0;f=e;c[e>>2]=d;d=a+8|0;c[d>>2]=(c[d>>2]|0)+1;d=c[a+4>>2]|0;if(!((b|0)==0|(d|0)==(b|0))){g=b+4|0;h=c[g>>2]|0;c[g>>2]=f;c[e+8>>2]=b;c[h+8>>2]=f;c[e+4>>2]=h;return}if((d|0)==0){c[a>>2]=f}else{c[d+4>>2]=f}c[e+8>>2]=d;c[e+4>>2]=0;c[a+4>>2]=f;return}function dr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=a|0;e=c[d>>2]|0;if((e|0)==(b|0)){return}f=b+8|0;g=c[f>>2]|0;c[d>>2]=b;c[f>>2]=0;f=a+4|0;c[(c[f>>2]|0)+4>>2]=e;c[e+8>>2]=c[f>>2];c[f>>2]=g;c[g+4>>2]=0;return}function er(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=jk(12)|0;d=b;e=c[a>>2]|0;if((e|0)==0){return d|0}a=b+8|0;f=b+4|0;g=b;b=0;h=e;while(1){e=c[h>>2]|0;i=jk(12)|0;j=i;c[i>>2]=e;c[a>>2]=(c[a>>2]|0)+1;e=c[f>>2]|0;if((b|0)==0|(e|0)==(b|0)){if((e|0)==0){c[g>>2]=j}else{c[e+4>>2]=j}c[i+8>>2]=e;c[i+4>>2]=0;c[f>>2]=j;k=j}else{e=b+4|0;l=c[e>>2]|0;c[e>>2]=j;c[i+8>>2]=b;c[l+8>>2]=j;c[i+4>>2]=l;k=c[f>>2]|0}l=c[h+4>>2]|0;if((l|0)==0){break}else{b=k;h=l}}return d|0}function fr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=a|0;g=c[f>>2]|0;if((g|0)==0){cc(107032,150440,217,170480)}else{h=g}while(1){if((c[h>>2]|0)==(b|0)){break}g=c[h+4>>2]|0;if((g|0)==0){i=12;break}else{h=g}}if((i|0)==12){cc(107032,150440,217,170480)}b=h+8|0;g=c[b>>2]|0;j=h+4|0;k=c[j>>2]|0;if((g|0)==0){c[f>>2]=k}else{c[g+4>>2]=k}if((k|0)==0){c[a+4>>2]=g}else{c[k+8>>2]=g}if((h|0)==0){cc(107032,150440,217,170480)}g=c[f>>2]|0;if((g|0)==0){return}else{l=0;m=g}while(1){if((c[m>>2]|0)==(d|0)){break}k=c[m+4>>2]|0;if((k|0)==0){i=22;break}else{l=m;m=k}}if((i|0)==22){return}if((e|0)==0){if((m|0)==(g|0)){c[f>>2]=h;c[j>>2]=g;c[b>>2]=0;c[g+8>>2]=h;return}else{c[l+4>>2]=h;c[b>>2]=l;c[j>>2]=m;c[m+8>>2]=h;return}}else{l=a+4|0;if((m|0)==(c[l>>2]|0)){c[l>>2]=h;c[j>>2]=0;c[b>>2]=m;c[m+4>>2]=h;return}else{c[b>>2]=m;b=m+4|0;c[j>>2]=c[b>>2];c[(c[b>>2]|0)+8>>2]=h;c[b>>2]=h;return}}}function gr(a){a=a|0;return c[a+8>>2]|0}function hr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=b|0;e=c[d>>2]|0;if((e|0)==0){f=0}else{g=e;while(1){e=g+4|0;h=c[e>>2]|0;i=g+8|0;c[e>>2]=c[i>>2];c[i>>2]=h;if((h|0)==0){break}else{g=h}}f=c[d>>2]|0}g=b+4|0;h=c[g>>2]|0;c[g>>2]=f;c[d>>2]=h;if((h|0)==0){j=b;eF(j);return}f=a+4|0;c[(c[f>>2]|0)+4>>2]=h;c[(c[d>>2]|0)+8>>2]=c[f>>2];c[f>>2]=c[g>>2];g=a+8|0;c[g>>2]=(c[g>>2]|0)+(c[b+8>>2]|0);j=b;eF(j);return}function ir(b){b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0;d=i;i=i+8|0;e=d|0;f=ew(b|0,105224)|0;if((f|0)==0){g=0;i=d;return g|0}if((a[f]|0)==0){g=0;i=d;return g|0}j=+sF(f,e);do{if((c[e>>2]|0)==(f|0)){if((Km(f)|0)<<24>>24==0){g=0}else{k=0.0;break}i=d;return g|0}else{if(j>180.0){l=j;while(1){m=l+-360.0;if(m>180.0){l=m}else{n=m;break}}}else{n=j}if(n>-180.0){k=n;break}else{o=n}while(1){l=o+360.0;if(l>-180.0){k=l;break}else{o=l}}}}while(0);o=k/180.0*3.141592653589793;f=c[(c[(ux(b)|0)+8>>2]|0)+132>>2]|0;k=+h[f>>3];n=+h[f+8>>3];f=ux(b)|0;if((f|0)!=0){e=f;do{f=e+8|0;p=c[(c[f>>2]|0)+132>>2]|0;h[p>>3]=+h[p>>3]-k;p=(c[(c[f>>2]|0)+132>>2]|0)+8|0;h[p>>3]=+h[p>>3]-n;e=vx(b,e)|0;}while((e|0)!=0)}e=(k!=0.0|n!=0.0)&1;p=ux(b)|0;if((p|0)==0){g=e;i=d;return g|0}else{q=p}while(1){r=mw(b,q)|0;if((r|0)!=0){break}p=vx(b,q)|0;if((p|0)==0){g=e;s=17;break}else{q=p}}if((s|0)==17){i=d;return g|0}s=c[r>>2]&3;q=c[(c[(c[((s|0)==2?r:r-32|0)+28>>2]|0)+8>>2]|0)+132>>2]|0;p=c[(c[(c[((s|0)==3?r:r+32|0)+28>>2]|0)+8>>2]|0)+132>>2]|0;n=+h[p+8>>3];k=+h[p>>3];j=o- +$(+(+h[q+8>>3]-n),+(+h[q>>3]-k));if(j==0.0){g=e;i=d;return g|0}o=+V(j);l=+W(j);e=ux(b)|0;if((e|0)==0){g=1;i=d;return g|0}else{t=e}while(1){e=t+8|0;q=c[(c[e>>2]|0)+132>>2]|0;p=q;j=+h[p>>3]-k;m=+h[q+8>>3]-n;h[p>>3]=k+(o*j-l*m);h[(c[(c[e>>2]|0)+132>>2]|0)+8>>3]=n+(l*j+o*m);e=vx(b,t)|0;if((e|0)==0){g=1;break}else{t=e}}i=d;return g|0}function jr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ew(a|0,108352)|0;if((d|0)==0){e=(c|0)!=0?c:213376}else{e=d}return kr(a,e,b)|0}function kr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;i=i+8|0;g=f|0;do{if((d|0)!=0){if((a[d]|0)==0){break}else{j=74640;k=129464}while(1){l=j+16|0;if((qm(d,k,c[j+8>>2]|0)|0)==0){m=6;break}n=c[j+20>>2]|0;if((n|0)==0){o=l;break}else{j=l;k=n}}do{if((m|0)==6){if((c[j+12>>2]|0)==0){Fv(0,142304,(p=i,i=i+8|0,c[p>>2]=k,p)|0)|0;i=p;q=74640}else{q=j}n=q|0;c[e>>2]=c[n>>2];c[e+4>>2]=c[q+12>>2];if((c[n>>2]|0)!=18){o=q;break}n=ac(d+(c[q+8>>2]|0)|0,136656,(p=i,i=i+8|0,c[p>>2]=g,p)|0)|0;i=p;l=c[g>>2]|0;c[e+8>>2]=(n|0)>0&(l|0)>-1?l:1e3;h[e+16>>3]=+Fm(b|0,Wv(b,0,133752,0)|0,-4.0,-1.0e10);o=q}}while(0);if((c[o+4>>2]|0)!=0){i=f;return e|0}l=Vm(d,63)|0;do{if(l<<24>>24==63){Fv(0,139200,(p=i,i=i+8|0,c[p>>2]=d,p)|0)|0;i=p;r=e|0}else{n=e|0;if(l<<24>>24==0){r=n;break}c[n>>2]=0;c[e+4>>2]=131664;i=f;return e|0}}while(0);c[r>>2]=1;c[e+4>>2]=126224;i=f;return e|0}}while(0);c[e>>2]=0;c[e+4>>2]=131664;i=f;return e|0}function lr(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0.0,Q=0.0,R=0.0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0.0,ma=0.0,na=0.0,oa=0,pa=0,qa=0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0,xa=0,ya=0;e=i;i=i+16|0;f=e|0;if((Lw(b)|0)<2){j=0;i=e;return j|0}k=ir(b)|0;l=d|0;m=c[l>>2]|0;if((m|0)==0){j=k;i=e;return j|0}if((a[213992]|0)==0){n=m}else{m=c[o>>2]|0;p=$w(b|0)|0;q=c[d+4>>2]|0;gc(m|0,97152,(r=i,i=i+16|0,c[r>>2]=p,c[r+8>>2]=q,r)|0)|0;i=r;n=c[l>>2]|0}if(n>>>0>2>>>0){switch(n|0){case 4:{s=Jr(b,0)|0;break};case 12:case 11:case 13:case 14:case 8:case 7:case 9:case 10:{Cr(b,n)|0;s=0;break};case 5:case 6:{s=0;break};case 3:{s=Jr(b,1)|0;break};case 15:{s=Jr(b,-1)|0;break};default:{Fv(0,91656,(r=i,i=i+8|0,c[r>>2]=c[d+4>>2],r)|0)|0;i=r;s=0}}j=s+k|0;i=e;return j|0}c[44272]=Lw(b)|0;Zr();c[44274]=kk((c[44272]|0)*96|0)|0;s=ux(b)|0;d=c[44274]|0;or(f,b);t=+g[f>>2];u=+g[f+4>>2];if((a[f+8|0]|0)==0){v=4;w=t;x=u}else{v=2;w=t/72.0;x=u/72.0}f=c[44272]|0;a:do{if((f|0)>0){n=s;q=0;p=d;while(1){m=n+8|0;h[p+8>>3]=+h[c[(c[m>>2]|0)+132>>2]>>3];h[p+16>>3]=+h[(c[(c[m>>2]|0)+132>>2]|0)+8>>3];if((Fc[v&7](p+40|0,n,w,x)|0)!=0){break}c[p+24>>2]=q;c[p+28>>2]=1;c[p>>2]=n;c[p+88>>2]=0;m=vx(b,n)|0;y=q+1|0;z=c[44272]|0;if((y|0)<(z|0)){n=m;q=y;p=p+96|0}else{A=z;break a}}eF(c[44274]|0);c[44274]=0;if((c[44272]|0)>0){p=0;q=0;while(1){Xt(q+40|0);n=p+1|0;if((n|0)<(c[44272]|0)){p=n;q=q+96|0}else{break}}}Wt();xs();eF(c[44274]|0);eF(c[43762]|0);c[43762]=0;j=k;i=e;return j|0}else{A=f}}while(0);f=c[44274]|0;x=+h[f+8>>3];w=+h[f+16>>3];u=x+ +h[f+40>>3];t=w+ +h[f+48>>3];B=x+ +h[f+56>>3];x=w+ +h[f+64>>3];if((A|0)>1){w=x;C=t;D=B;E=u;v=1;d=f;while(1){F=+h[d+104>>3];G=+h[d+112>>3];H=F+ +h[d+136>>3];I=G+ +h[d+144>>3];J=F+ +h[d+152>>3];F=G+ +h[d+160>>3];G=H<E?H:E;H=I<C?I:C;I=J>D?J:D;J=F>w?F:w;f=v+1|0;if((f|0)<(A|0)){w=J;C=H;D=I;E=G;v=f;d=d+96|0}else{K=J;L=H;M=I;N=G;break}}}else{K=x;L=t;M=B;N=u}d=ew(b|0,145272)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}h[2485]=+rF(d)}}while(0);u=+h[2485];B=(K-L)*u;t=(M-N)*u;u=N-t;N=L-B;L=M+t;t=K+B;h[1539]=u;h[1540]=L;h[1537]=N;h[1538]=t;h[21847]=u;h[22132]=u;h[21884]=L;h[22143]=L;h[22144]=t;h[22133]=t;h[21885]=N;h[21848]=N;d=(c[l>>2]|0)==2;l=qr(0)|0;b=(l|0)==0;do{if(d){if(b){O=71;break}rr();v=0;do{if((c[44272]|0)>0){A=c[44274]|0;f=0;while(1){s=A+8|0;h[s>>3]=+h[s>>3]*1.05;s=A+16|0;h[s>>3]=+h[s>>3]*1.05;s=f+1|0;if((s|0)<(c[44272]|0)){A=A+96|0;f=s}else{break}}}v=v+1|0;}while((qr(v)|0)!=0);if((a[213992]|0)==0){O=72;break}gc(c[o>>2]|0,154672,(r=i,i=i+8|0,c[r>>2]=v,r)|0)|0;i=r;O=72}else{if(b){O=71;break}rr();f=c[43762]|0;N=+h[c[f>>2]>>3];h[10]=N;t=+h[c[f>>2]>>3];h[11]=t;A=c[44272]|0;if((A|0)>1){s=1;L=N;u=t;while(1){q=f+(s<<2)|0;B=+h[c[q>>2]>>3];if(B<L){h[10]=B;P=B;Q=+h[c[q>>2]>>3]}else{P=L;Q=B}if(Q>u){h[11]=Q;R=Q}else{R=u}q=s+1|0;if((q|0)<(A|0)){s=q;L=P;u=R}else{T=R;U=P;break}}}else{T=t;U=N}u=+h[(c[f>>2]|0)+8>>3];h[8]=u;L=+h[(c[f+(A-1<<2)>>2]|0)+8>>3];h[9]=L;h[3711]=L-u;h[3712]=T-U;Iu(0,2);s=0;v=1;q=l;p=1;while(1){n=c[44274]|0;z=n+8|0;u=+_r(z,174776);L=+_r(z,177056);B=+_r(z,175072);K=+_r(z,177144);if((c[44272]|0)>1){z=n;y=n;m=n;V=n;M=u;u=L;L=B;B=K;W=1;X=n;while(1){Y=X+96|0;Z=X+104|0;K=+_r(Z,174776);_=K<M;$=_?Y:z;x=+_r(Z,175072);aa=x<L;ba=aa?Y:m;E=+_r(Z,177056);ca=E<u;da=ca?Y:y;D=+_r(Z,177144);Z=D<B;ea=Z?Y:V;fa=W+1|0;if((fa|0)<(c[44272]|0)){z=$;y=da;m=ba;V=ea;M=_?K:M;u=ca?E:u;L=aa?x:L;B=Z?D:B;W=fa;X=Y}else{ga=$;ha=da;ia=ba;ja=ea;break}}}else{ga=n;ha=n;ia=n;ja=n}ys(ga+8|0,+h[21847],+h[21848]);ys(ia+8|0,+h[21884],+h[21885]);ys(ha+8|0,+h[22132],+h[22133]);ys(ja+8|0,+h[22143],+h[22144]);X=c[44272]|0;if((X|0)>0){W=a[28952]|0;V=0;m=n;y=X;while(1){if(W){O=49}else{if((c[m+32>>2]|0)==0){ka=y}else{O=49}}if((O|0)==49){O=0;X=c[m+88>>2]|0;z=c[X>>2]|0;ea=c[z>>2]|0;if((ea|0)==0){la=0.0;ma=0.0;na=0.0}else{B=+h[X+8>>3];L=+h[X+16>>3];u=0.0;M=0.0;D=0.0;X=ea;x=+h[z+8>>3];E=+h[z+16>>3];while(1){K=+h[X+8>>3];C=+h[X+16>>3];w=+S(+((L-E)*K+(B*(E-C)+x*(C-L))))*.5;G=M+w*((B+x+K)/3.0);I=D+w*((L+E+C)/3.0);H=u+w;z=c[X>>2]|0;if((z|0)==0){la=H;ma=G;na=I;break}else{u=H;M=G;D=I;X=z;x=K;E=C}}}h[m+8>>3]=ma/la;h[m+16>>3]=na/la;ka=c[44272]|0}X=V+1|0;if((X|0)<(ka|0)){V=X;m=m+96|0;y=ka}else{break}}}y=qr(p)|0;if((y|0)==0){break}m=(y|0)<(q|0)?0:v;a[28952]=1;if((m|0)==0){oa=s}else{E=+h[1540];x=+h[1538];D=+h[1539];M=+h[1537];u=(x-M)*.05;L=(E-D)*.05;B=E+L;E=x+u;x=D-L;L=M-u;h[1539]=x;h[1540]=B;h[1537]=L;h[1538]=E;h[21847]=x;h[22132]=x;h[21884]=B;h[22143]=B;h[22144]=E;h[22133]=E;h[21885]=L;h[21848]=L;oa=s+1|0}V=c[43762]|0;if((V|0)==0){W=kk(c[44272]<<2)|0;c[43762]=W;c[45154]=W+(c[44272]<<2);pa=W}else{pa=V}V=c[44274]|0;xs();W=c[44272]|0;if((W|0)>0){n=0;X=pa;z=V;while(1){c[X>>2]=z+8;c[z+88>>2]=0;c[z+28>>2]=1;V=n+1|0;ea=c[44272]|0;if((V|0)<(ea|0)){n=V;X=X+4|0;z=z+96|0}else{qa=ea;break}}}else{qa=W}Jb(c[43762]|0,qa|0,4,138);z=c[43762]|0;c[44278]=z;L=+h[c[z>>2]>>3];h[10]=L;E=+h[c[z>>2]>>3];h[11]=E;X=c[44272]|0;if((X|0)>1){n=1;B=L;x=E;while(1){ea=z+(n<<2)|0;u=+h[c[ea>>2]>>3];if(u<B){h[10]=u;ra=u;sa=+h[c[ea>>2]>>3]}else{ra=B;sa=u}if(sa>x){h[11]=sa;ta=sa}else{ta=x}ea=n+1|0;if((ea|0)<(X|0)){n=ea;B=ra;x=ta}else{ua=ta;va=ra;break}}}else{ua=E;va=L}x=+h[(c[z>>2]|0)+8>>3];h[8]=x;B=+h[(c[z+(X-1<<2)>>2]|0)+8>>3];h[9]=B;h[3711]=B-x;h[3712]=ua-va;Iu(0,2);s=oa;v=m+1|0;q=y;p=p+1|0}if((a[213992]|0)!=0){q=c[o>>2]|0;gc(q|0,154672,(r=i,i=i+8|0,c[r>>2]=p,r)|0)|0;i=r;gc(q|0,151384,(r=i,i=i+8|0,c[r>>2]=s,r)|0)|0;i=r}js();ls();au();Tr();O=72}}while(0);do{if((O|0)==71){wa=0;xa=c[44272]|0;O=75}else if((O|0)==72){if((c[44272]|0)<=0){ya=1;break}r=0;oa=c[44274]|0;while(1){qa=oa|0;h[c[(c[(c[qa>>2]|0)+8>>2]|0)+132>>2]>>3]=+h[oa+8>>3];h[(c[(c[(c[qa>>2]|0)+8>>2]|0)+132>>2]|0)+8>>3]=+h[oa+16>>3];qa=r+1|0;pa=c[44272]|0;if((qa|0)<(pa|0)){r=qa;oa=oa+96|0}else{wa=1;xa=pa;O=75;break}}}}while(0);do{if((O|0)==75){if((xa|0)<=0){ya=wa;break}oa=0;r=c[44274]|0;while(1){Xt(r+40|0);s=oa+1|0;if((s|0)<(c[44272]|0)){oa=s;r=r+96|0}else{ya=wa;break}}}}while(0);Wt();xs();eF(c[44274]|0);eF(c[43762]|0);c[43762]=0;j=ya+k|0;i=e;return j|0}function mr(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=i;i=i+24|0;d=c|0;if((Lw(a)|0)<2){e=0}else{kr(a,b,d)|0;e=lr(a,d)|0}i=c;return e|0}function nr(a){a=a|0;var b=0,c=0,d=0,e=0;b=i;i=i+24|0;c=b|0;d=ew(a|0,108352)|0;if((Lw(a)|0)<2){e=0}else{kr(a,d,c)|0;e=lr(a,c)|0}i=b;return e|0}function or(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0.0;e=i;i=i+40|0;f=e|0;j=e+8|0;k=e+16|0;l=e+24|0;m=e+32|0;n=d|0;d=ew(n,86424)|0;do{if((d|0)==0){p=10}else{q=d;while(1){r=q+1|0;if((Qa(a[q]|0)|0)==0){break}else{q=r}}s=(a[q]|0)==43;t=s&1;u=ac((s?r:q)|0,159680,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=l,v)|0)|0;i=v;if((u|0)==1){w=+g[k>>2];g[l>>2]=w;x=w}else if((u|0)==0){p=10;break}else{x=+g[k>>2]}if(s){y=x;z=+g[l>>2];A=t;break}else{y=x+1.0;z=+g[l>>2]+1.0;A=t;break}}}while(0);do{if((p|0)==10){l=ew(n,81608)|0;if((l|0)==0){y=4.0;z=4.0;A=1;break}k=l;while(1){B=k+1|0;if((Qa(a[k]|0)|0)==0){break}else{k=B}}q=(a[k]|0)==43;l=q&1;r=ac((q?B:k)|0,159680,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=j,v)|0)|0;i=v;if((r|0)==1){x=+g[f>>2];g[j>>2]=x;C=x}else if((r|0)==0){y=4.0;z=4.0;A=1;break}else{C=+g[f>>2]}x=C/.800000011920929;if(q){y=x;z=+g[j>>2]/.800000011920929;A=l;break}else{y=x+1.0;z=+g[j>>2]/.800000011920929+1.0;A=l;break}}}while(0);if((a[213992]|0)!=0){gc(c[o>>2]|0,167864,(v=i,i=i+24|0,c[v>>2]=A&255,h[v+8>>3]=y,h[v+16>>3]=z,v)|0)|0;i=v}g[b>>2]=y;g[b+4>>2]=z;a[b+8|0]=A;A=b+9|0;b=m|0;a[A]=a[b]|0;a[A+1|0]=a[b+1|0]|0;a[A+2|0]=a[b+2|0]|0;i=e;return}function pr(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0.0;e=i;i=i+40|0;f=e|0;j=e+8|0;k=e+16|0;l=e+24|0;m=e+32|0;n=d|0;d=ew(n,81608)|0;do{if((d|0)==0){p=10}else{q=d;while(1){r=q+1|0;if((Qa(a[q]|0)|0)==0){break}else{q=r}}s=(a[q]|0)==43;t=s&1;u=ac((s?r:q)|0,159680,(v=i,i=i+16|0,c[v>>2]=k,c[v+8>>2]=l,v)|0)|0;i=v;if((u|0)==0){p=10;break}else if((u|0)==1){w=+g[k>>2];g[l>>2]=w;x=w}else{x=+g[k>>2]}if(s){y=x;z=+g[l>>2];A=t;break}else{y=x+1.0;z=+g[l>>2]+1.0;A=t;break}}}while(0);do{if((p|0)==10){l=ew(n,86424)|0;if((l|0)==0){y=3.200000047683716;z=3.200000047683716;A=1;break}k=l;while(1){B=k+1|0;if((Qa(a[k]|0)|0)==0){break}else{k=B}}q=(a[k]|0)==43;l=q&1;r=ac((q?B:k)|0,159680,(v=i,i=i+16|0,c[v>>2]=f,c[v+8>>2]=j,v)|0)|0;i=v;if((r|0)==1){x=+g[f>>2];g[j>>2]=x;C=x}else if((r|0)==0){y=3.200000047683716;z=3.200000047683716;A=1;break}else{C=+g[f>>2]}x=C/1.25;if(q){y=x;z=+g[j>>2]/1.25;A=l;break}else{y=x+1.0;z=+g[j>>2]/1.25+1.0;A=l;break}}}while(0);if((a[213992]|0)!=0){gc(c[o>>2]|0,163688,(v=i,i=i+24|0,c[v>>2]=A&255,h[v+8>>3]=y,h[v+16>>3]=z,v)|0)|0;i=v}g[b>>2]=y;g[b+4>>2]=z;a[b+8|0]=A;A=b+9|0;b=m|0;a[A]=a[b]|0;a[A+1|0]=a[b+1|0]|0;a[A+2|0]=a[b+2|0]|0;i=e;return}function qr(a){a=a|0;var b=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;b=i;e=c[44274]|0;f=c[44272]|0;a:do{if((f|0)>0){g=0;h=e;while(1){c[h+(g*96|0)+32>>2]=0;j=g+1|0;k=c[44272]|0;if((j|0)>=(k|0)){l=k;break a}g=j;h=c[44274]|0}}else{l=f}}while(0);if((l-1|0)>0){f=0;h=0;g=e;e=l;while(1){l=g+96|0;j=h+1|0;if((j|0)<(e|0)){k=g+8|0;m=g+40|0;n=g+32|0;p=f;q=j;r=l;while(1){if((_t(k,m,r+8|0,r+40|0)|0)==0){s=p}else{c[n>>2]=1;c[r+32>>2]=1;s=p+1|0}t=q+1|0;u=c[44272]|0;if((t|0)<(u|0)){p=s;q=t;r=r+96|0}else{v=s;w=u;break}}}else{v=f;w=e}if((j|0)<(w-1|0)){f=v;h=j;g=l;e=w}else{x=v;break}}}else{x=0}if((d[213992]|0)>>>0<=1>>>0){i=b;return x|0}gc(c[o>>2]|0,148496,(v=i,i=i+16|0,c[v>>2]=a,c[v+8>>2]=x,v)|0)|0;i=v;i=b;return x|0}function rr(){var a=0,b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0.0;a=c[43762]|0;if((a|0)==0){b=kk(c[44272]<<2)|0;c[43762]=b;c[45154]=b+(c[44272]<<2);d=b}else{d=a}a=c[44274]|0;xs();b=c[44272]|0;if((b|0)>0){e=0;f=d;d=a;while(1){c[f>>2]=d+8;c[d+88>>2]=0;c[d+28>>2]=1;a=e+1|0;g=c[44272]|0;if((a|0)<(g|0)){e=a;f=f+4|0;d=d+96|0}else{i=g;break}}}else{i=b}Jb(c[43762]|0,i|0,4,138);i=c[43762]|0;c[44278]=i;b=c[45154]|0;if(i>>>0<b>>>0){j=i}else{return}while(1){i=j+4|0;a:do{if(i>>>0<b>>>0){d=c[i>>2]|0;k=+h[d>>3];f=c[j>>2]|0;l=+h[f>>3];if(k!=l){m=i;break}n=+h[f+8>>3];if(+h[d+8>>3]!=n){m=i;break}e=j+8|0;b:do{if(e>>>0<b>>>0){g=2;a=e;while(1){o=c[a>>2]|0;if(+h[o>>3]!=l){p=g;q=a;break b}if(+h[o+8>>3]!=n){p=g;q=a;break b}o=g+1|0;r=a+4|0;if(r>>>0<b>>>0){g=o;a=r}else{p=o;q=r;break}}}else{p=2;q=e}}while(0);do{if(q>>>0<b>>>0){e=c[q>>2]|0;if(+h[e+8>>3]!=n){break}s=(+h[e>>3]-l)/+(p|0);if(i>>>0<q>>>0){t=i;u=1;v=d;w=k}else{m=q;break a}while(1){h[v>>3]=s*+(u|0)+w;e=t+4|0;if(e>>>0>=q>>>0){m=q;break a}a=c[e>>2]|0;t=e;u=u+1|0;v=a;w=+h[a>>3]}}}while(0);if(i>>>0<q>>>0){x=j;y=i;z=f;A=d;B=l}else{m=q;break}while(1){a=c[44274]|0;e=c[z+16>>2]|0;g=c[A+16>>2]|0;h[A>>3]=B+(+h[a+(e*96|0)+56>>3]- +h[a+(e*96|0)+40>>3]+(+h[a+(g*96|0)+56>>3]- +h[a+(g*96|0)+40>>3]))*.5;g=x+4|0;a=y+4|0;if(a>>>0>=q>>>0){m=q;break a}e=c[g>>2]|0;x=g;y=a;z=e;A=c[a>>2]|0;B=+h[e>>3]}}else{m=i}}while(0);if(m>>>0<b>>>0){j=m}else{break}}return}function sr(){var a=0,b=0;a=c[44278]|0;if(a>>>0>=(c[45154]|0)>>>0){b=0;return b|0}c[44278]=a+4;b=c[a>>2]|0;return b|0}function tr(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0,i=0.0,j=0.0;d=c[a>>2]|0;a=c[b>>2]|0;e=+h[d+8>>3];f=+h[a+8>>3];do{if(e<f){g=-1}else{if(e>f){g=1;break}i=+h[d>>3];j=+h[a>>3];if(i<j){g=-1;break}g=i>j|0}}while(0);return g|0}function ur(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;h=(d|0)>0;if(h){vF(e|0,-1|0,d<<2|0)|0}c[e+(a<<2)>>2]=0;i=f|0;c[c[i>>2]>>2]=a;a=f+12|0;c[a>>2]=0;j=f+8|0;c[j>>2]=1;k=f+4|0;if((c[b+8>>2]|0)==0){f=0;l=1;while(1){m=f+1|0;c[a>>2]=m;n=c[(c[i>>2]|0)+(f<<2)>>2]|0;o=c[e+(n<<2)>>2]|0;p=b+(n<<4)|0;if((c[p>>2]|0)>1){q=b+(n<<4)+4|0;n=o+1|0;r=1;do{s=c[(c[q>>2]|0)+(r<<2)>>2]|0;t=e+(s<<2)|0;do{if((c[t>>2]|0)<0){c[t>>2]=n;u=c[j>>2]|0;if((u|0)>=(c[k>>2]|0)){break}c[j>>2]=u+1;c[(c[i>>2]|0)+(u<<2)>>2]=s}}while(0);r=r+1|0;}while((r|0)<(c[p>>2]|0));v=c[a>>2]|0;w=c[j>>2]|0}else{v=m;w=l}if((v|0)<(w|0)){f=v;l=w}else{x=o;break}}}else{w=0;l=1;while(1){v=w+1|0;c[a>>2]=v;f=c[(c[i>>2]|0)+(w<<2)>>2]|0;p=c[e+(f<<2)>>2]|0;r=b+(f<<4)|0;if((c[r>>2]|0)>1){n=b+(f<<4)+4|0;q=b+(f<<4)+8|0;f=1;do{s=c[(c[n>>2]|0)+(f<<2)>>2]|0;t=e+(s<<2)|0;do{if((c[t>>2]|0)<0){c[t>>2]=~~+g[(c[q>>2]|0)+(f<<2)>>2]+p;u=c[j>>2]|0;if((u|0)>=(c[k>>2]|0)){break}c[j>>2]=u+1;c[(c[i>>2]|0)+(u<<2)>>2]=s}}while(0);f=f+1|0;}while((f|0)<(c[r>>2]|0));y=c[a>>2]|0;z=c[j>>2]|0}else{y=v;z=l}if((y|0)<(z|0)){w=y;l=z}else{x=p;break}}}if(!h){return}h=x+10|0;x=0;do{z=e+(x<<2)|0;if((c[z>>2]|0)<0){c[z>>2]=h}x=x+1|0;}while((x|0)<(d|0));return}function vr(a,b){a=a|0;b=b|0;c[a>>2]=kk(b<<2)|0;c[a+4>>2]=b;c[a+8>>2]=0;c[a+12>>2]=0;return}function wr(a){a=a|0;eF(c[a>>2]|0);return}function xr(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0,m=0.0,n=0;if((a[213992]|0)!=0){Ma(104808,25,1,c[o>>2]|0)|0}if((b|0)>0){f=0}else{g=b-1|0;i=Ms(d,e,g)|0;return i|0}do{j=d+(f<<2)|0;k=0.0;l=0;while(1){if((f|0)==(l|0)){m=k}else{m=k+ +h[(c[j>>2]|0)+(l<<3)>>3]}n=l+1|0;if((n|0)<(b|0)){k=m;l=n}else{break}}h[(c[j>>2]|0)+(f<<3)>>3]=-0.0-m;f=f+1|0;}while((f|0)<(b|0));g=b-1|0;i=Ms(d,e,g)|0;return i|0}function yr(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,p=0;e=pu(d,d,0.0)|0;f=pu(d,d,0.0)|0;g=ux(b)|0;if((g|0)!=0){i=g;do{g=rw(b,i)|0;if((g|0)!=0){j=g;do{g=c[j>>2]&3;k=(c[c[((g|0)==3?j:j+32|0)+28>>2]>>2]|0)>>>4;l=(c[c[((g|0)==2?j:j-32|0)+28>>2]>>2]|0)>>>4;if((k|0)!=(l|0)){m=-1.0/+h[(c[j+8>>2]|0)+136>>3];h[(c[e+(l<<2)>>2]|0)+(k<<3)>>3]=m;h[(c[e+(k<<2)>>2]|0)+(l<<3)>>3]=m}j=sw(b,j,i)|0;}while((j|0)!=0)}i=vx(b,i)|0;}while((i|0)!=0)}if((a[213992]|0)!=0){Ma(104808,25,1,c[o>>2]|0)|0}i=(d|0)>0;if(i){j=0;do{l=e+(j<<2)|0;m=0.0;k=0;while(1){if((j|0)==(k|0)){n=m}else{n=m+ +h[(c[l>>2]|0)+(k<<3)>>3]}g=k+1|0;if((g|0)<(d|0)){m=n;k=g}else{break}}h[(c[l>>2]|0)+(j<<3)>>3]=-0.0-n;j=j+1|0;}while((j|0)<(d|0))}j=Ms(e,f,d-1|0)|0;if((j|0)==0|i^1){qu(e);qu(f);return j|0}i=b+8|0;b=0;do{k=f+(b<<2)|0;g=0;do{p=c[k>>2]|0;h[(c[(c[(c[i>>2]|0)+152>>2]|0)+(b<<2)>>2]|0)+(g<<3)>>3]=+h[p+(b<<3)>>3]+ +h[(c[f+(g<<2)>>2]|0)+(g<<3)>>3]- +h[p+(g<<3)>>3]*2.0;g=g+1|0;}while((g|0)<(d|0));b=b+1|0;}while((b|0)<(d|0));qu(e);qu(f);return j|0}function zr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0.0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;f=i;i=i+64|0;j=f|0;k=f+16|0;l=f+32|0;m=f+48|0;n=kk(d<<4)|0;o=b<<2;p=kk(o)|0;q=p;r=kk(o)|0;s=r;t=kk(o)|0;u=t;v=kk(o)|0;w=v;x=(b|0)>0;if(x){y=0;do{c[u+(y<<2)>>2]=y;y=y+1|0;}while((y|0)<(b|0));y=b-1|0;Gs(a,u,0,y);z=0;while(1){c[w+(c[u+(z<<2)>>2]<<2)>>2]=z;A=z+1|0;if((A|0)<(b|0)){z=A}else{B=y;break}}}else{y=b-1|0;Gs(a,u,0,y);B=y}y=kk(B<<4)|0;z=(B|0)>0;if(z){A=0;while(1){C=c[u+(A<<2)>>2]|0;D=A+1|0;E=c[u+(D<<2)>>2]|0;F=+h[a+(E<<3)>>3]- +h[a+(C<<3)>>3];c[y+(A<<4)>>2]=C;c[y+(A<<4)+4>>2]=E;h[y+(A<<4)+8>>3]=F;if((D|0)<(B|0)){A=D}else{break}}}if((B|0)>-2){A=m;m=(B|0)/2|0;while(1){D=m;while(1){E=D<<1;C=E|1;do{if((E|0)<(B|0)){F=+h[y+(E<<4)+8>>3];G=+h[y+(D<<4)+8>>3];if(F<G){H=E;break}if(F!=G){I=15;break}if(((yb()|0)&1|0)==0){I=15}else{H=E}}else{I=15}}while(0);if((I|0)==15){I=0;H=D}do{if((C|0)<(B|0)){G=+h[y+(C<<4)+8>>3];F=+h[y+(H<<4)+8>>3];if(G>=F){if(G!=F){J=H;break}if(((yb()|0)&1|0)==0){J=H;break}}J=C}else{J=H}}while(0);if((J|0)==(D|0)){break}C=y+(J<<4)|0;c[A>>2]=c[C>>2];c[A+4>>2]=c[C+4>>2];c[A+8>>2]=c[C+8>>2];c[A+12>>2]=c[C+12>>2];E=y+(D<<4)|0;c[C>>2]=c[E>>2];c[C+4>>2]=c[E+4>>2];c[C+8>>2]=c[E+8>>2];c[C+12>>2]=c[E+12>>2];c[E>>2]=c[A>>2];c[E+4>>2]=c[A+4>>2];c[E+8>>2]=c[A+8>>2];c[E+12>>2]=c[A+12>>2];D=J}if((m|0)>0){m=m-1|0}else{break}}}if((b|0)>1){m=1;do{c[q+(c[u+(m<<2)>>2]<<2)>>2]=c[u+(m-1<<2)>>2];m=m+1|0;}while((m|0)<(b|0))}if(z){z=0;while(1){m=z+1|0;c[s+(c[u+(z<<2)>>2]<<2)>>2]=c[u+(m<<2)>>2];if((m|0)<(B|0)){z=m}else{break}}}if((d|0)<1|(B|0)==0){K=y;L=n;M=0}else{z=l;l=k;k=j;j=B;m=B;J=y;y=n;n=d;A=0;while(1){H=c[J>>2]|0;D=c[J+4>>2]|0;F=+h[J+8>>3];E=m-1|0;C=J;N=J+(E<<4)|0;c[C>>2]=c[N>>2];c[C+4>>2]=c[N+4>>2];c[C+8>>2]=c[N+8>>2];c[C+12>>2]=c[N+12>>2];N=0;while(1){O=N<<1;P=O|1;do{if((O|0)<(E|0)){G=+h[J+(O<<4)+8>>3];Q=+h[J+(N<<4)+8>>3];if(G<Q){R=O;break}if(G!=Q){I=35;break}if(((yb()|0)&1|0)==0){I=35}else{R=O}}else{I=35}}while(0);if((I|0)==35){I=0;R=N}do{if((P|0)<(E|0)){Q=+h[J+(P<<4)+8>>3];G=+h[J+(R<<4)+8>>3];if(Q>=G){if(Q!=G){S=R;break}if(((yb()|0)&1|0)==0){S=R;break}}S=P}else{S=R}}while(0);if((S|0)==(N|0)){break}P=J+(S<<4)|0;c[z>>2]=c[P>>2];c[z+4>>2]=c[P+4>>2];c[z+8>>2]=c[P+8>>2];c[z+12>>2]=c[P+12>>2];O=J+(N<<4)|0;c[P>>2]=c[O>>2];c[P+4>>2]=c[O+4>>2];c[P+8>>2]=c[O+8>>2];c[P+12>>2]=c[O+12>>2];c[O>>2]=c[z>>2];c[O+4>>2]=c[z+4>>2];c[O+8>>2]=c[z+8>>2];c[O+12>>2]=c[z+12>>2];N=S}if((A|0)<(n|0)){T=y;U=n}else{T=gF(y,n<<5)|0;U=n<<1}N=A+1|0;c[T+(A<<4)>>2]=H;c[T+(A<<4)+4>>2]=D;h[T+(A<<4)+8>>3]=F;O=c[w+(H<<2)>>2]|0;P=c[w+(D<<2)>>2]|0;do{if((O|0)>0){V=c[u+(O-1<<2)>>2]|0;W=s+(V<<2)|0;if((c[w+(c[W>>2]<<2)>>2]|0)>=(P|0)){X=J;Y=E;Z=j;break}G=+h[a+(D<<3)>>3]- +h[a+(V<<3)>>3];if((E|0)==(j|0)){_=gF(C,j<<5)|0;$=j<<1}else{_=J;$=j}c[_+(E<<4)>>2]=V;c[_+(E<<4)+4>>2]=D;h[_+(E<<4)+8>>3]=G;a:do{if((E|0)>0){aa=E;Q=G;while(1){ba=(aa|0)/2|0;ca=_+(ba<<4)+8|0;da=+h[ca>>3];if(Q>=da){if(Q!=da){break a}if(((yb()|0)&1|0)==0){break a}}ea=_+(aa<<4)|0;c[l>>2]=c[ea>>2];c[l+4>>2]=c[ea+4>>2];c[l+8>>2]=c[ea+8>>2];c[l+12>>2]=c[ea+12>>2];fa=_+(ba<<4)|0;c[ea>>2]=c[fa>>2];c[ea+4>>2]=c[fa+4>>2];c[ea+8>>2]=c[fa+8>>2];c[ea+12>>2]=c[fa+12>>2];c[fa>>2]=c[l>>2];c[fa+4>>2]=c[l+4>>2];c[fa+8>>2]=c[l+8>>2];c[fa+12>>2]=c[l+12>>2];if((aa|0)<=1){break a}aa=ba;Q=+h[ca>>3]}}}while(0);c[W>>2]=D;c[q+(D<<2)>>2]=V;X=_;Y=m;Z=$}else{X=J;Y=E;Z=j}}while(0);do{if((P|0)<(B|0)){E=c[u+(P+1<<2)>>2]|0;D=q+(E<<2)|0;if((c[w+(c[D>>2]<<2)>>2]|0)<=(O|0)){ga=X;ha=Y;ia=Z;break}F=+h[a+(E<<3)>>3]- +h[a+(H<<3)>>3];if((Y|0)==(Z|0)){ja=gF(X,Z<<5)|0;ka=Z<<1}else{ja=X;ka=Z}C=Y+1|0;c[ja+(Y<<4)>>2]=H;c[ja+(Y<<4)+4>>2]=E;h[ja+(Y<<4)+8>>3]=F;b:do{if((Y|0)>0){aa=Y;G=F;while(1){ca=(aa|0)/2|0;ba=ja+(ca<<4)+8|0;Q=+h[ba>>3];if(G>=Q){if(G!=Q){break b}if(((yb()|0)&1|0)==0){break b}}fa=ja+(aa<<4)|0;c[k>>2]=c[fa>>2];c[k+4>>2]=c[fa+4>>2];c[k+8>>2]=c[fa+8>>2];c[k+12>>2]=c[fa+12>>2];ea=ja+(ca<<4)|0;c[fa>>2]=c[ea>>2];c[fa+4>>2]=c[ea+4>>2];c[fa+8>>2]=c[ea+8>>2];c[fa+12>>2]=c[ea+12>>2];c[ea>>2]=c[k>>2];c[ea+4>>2]=c[k+4>>2];c[ea+8>>2]=c[k+8>>2];c[ea+12>>2]=c[k+12>>2];if((aa|0)<=1){break b}aa=ca;G=+h[ba>>3]}}}while(0);c[D>>2]=H;c[s+(H<<2)>>2]=E;ga=ja;ha=C;ia=ka}else{ga=X;ha=Y;ia=Z}}while(0);if((N|0)>=(d|0)|(ha|0)==0){K=ga;L=T;M=N;break}else{j=ia;m=ha;J=ga;y=T;n=U;A=N}}}eF(p);eF(r);eF(t);eF(v);eF(K);K=kk(o)|0;o=K;v=(M<<1)+b|0;t=v<<2;r=kk(t)|0;p=kk(t)|0;if(x){t=0;do{c[o+(t<<2)>>2]=1;t=t+1|0;}while((t|0)<(b|0))}if((M|0)>0){t=0;do{A=c[L+(t<<4)+4>>2]|0;U=o+(c[L+(t<<4)>>2]<<2)|0;c[U>>2]=(c[U>>2]|0)+1;U=o+(A<<2)|0;c[U>>2]=(c[U>>2]|0)+1;t=t+1|0;}while((t|0)<(M|0))}if((v|0)>0){t=0;do{g[p+(t<<2)>>2]=1.0;t=t+1|0;}while((t|0)<(v|0))}v=kk(b<<4)|0;t=v;c[e>>2]=t;if(x){x=0;e=r;r=p;while(1){c[t+(x<<4)>>2]=1;c[t+(x<<4)+8>>2]=r;c[t+(x<<4)+4>>2]=e;c[e>>2]=x;g[r>>2]=0.0;p=c[o+(x<<2)>>2]|0;U=x+1|0;if((U|0)<(b|0)){x=U;e=e+(p<<2)|0;r=r+(p<<2)|0}else{break}}}eF(K);if((M|0)==0){la=L;eF(la);i=f;return}K=v+8|0;v=M;do{v=v-1|0;M=c[L+(v<<4)>>2]|0;r=c[L+(v<<4)+4>>2]|0;e=t+(M<<4)|0;x=c[e>>2]|0;b=c[t+(M<<4)+4>>2]|0;c:do{if((x|0)>0){o=0;while(1){p=o+1|0;if((c[b+(o<<2)>>2]|0)==(r|0)){break c}if((p|0)<(x|0)){o=p}else{I=81;break}}}else{I=81}}while(0);do{if((I|0)==81){I=0;c[e>>2]=x+1;c[b+(x<<2)>>2]=r;N=t+(r<<4)|0;o=c[N>>2]|0;c[N>>2]=o+1;c[(c[t+(r<<4)+4>>2]|0)+(o<<2)>>2]=M;if((c[K>>2]|0)==0){break}o=c[t+(M<<4)+8>>2]|0;g[o>>2]=+g[o>>2]+-1.0;o=c[t+(r<<4)+8>>2]|0;g[o>>2]=+g[o>>2]+-1.0}}while(0);}while((v|0)!=0);la=L;eF(la);i=f;return}function Ar(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0;j=i;k=e<<3;l=kk(k)|0;m=l;n=kk(k)|0;o=n;p=kk(k)|0;q=p;r=kk(k)|0;s=r;t=kk(k)|0;u=t;v=kk(k)|0;k=v;Xs(e,d,k);if(h<<24>>24!=0){Ss(e,k);Ss(e,b)}Ts(a,e,b,s);Us(e,k,s,m);Xs(e,m,o);w=+Ys(e,m,m);a:do{if((g|0)>0){s=g-1|0;x=w;k=0;while(1){if(+Zs(e,m)<=f){y=0;break a}Ts(a,e,o,q);z=+Ys(e,o,q);if(z==0.0){y=0;break a}A=x/z;Ws(e,o,A,u);Vs(e,b,u,b);if((k|0)<(s|0)){Ws(e,q,A,q);Us(e,m,q,m);A=+Ys(e,m,m);if(x==0.0){break}Ws(e,o,A/x,o);Vs(e,m,o,o);B=A}else{B=x}h=k+1|0;if((h|0)<(g|0)){x=B;k=h}else{y=0;break a}}Fv(1,104304,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k;y=1}else{y=0}}while(0);eF(l);eF(n);eF(p);eF(r);eF(t);eF(v);i=j;return y|0}function Br(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0;h=i;j=e<<2;k=jk(j)|0;l=k;m=jk(j)|0;n=m;o=jk(j)|0;p=o;q=jk(j)|0;j=q;$s(e,b);$s(e,d);at(a,e,b,j);$s(e,j);bt(e,d,j,l);ft(e,l,n);r=+gt(e,l,l);a:do{if((g|0)>0){j=g-1|0;s=r;d=0;while(1){if(+it(e,l)<=f){t=0;break a}$s(e,n);$s(e,b);$s(e,l);at(a,e,n,p);$s(e,p);u=+gt(e,n,p);if(u==0.0){t=0;break a}v=s/u;dt(e,b,v,n);if((d|0)<(j|0)){dt(e,l,-0.0-v,p);v=+gt(e,l,l);if(s==0.0){break}et(e,n,v/s,n);ct(e,l,n,n);w=v}else{w=s}x=d+1|0;if((x|0)<(g|0)){s=w;d=x}else{t=0;break a}}Fv(1,104304,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0)|0;i=d;t=1}else{t=0}}while(0);eF(k);eF(m);eF(o);eF(q);i=h;return t|0}function Cr(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;e=i;i=i+16|0;f=e|0;j=Lw(b)|0;k=kk(j*48|0)|0;l=k;or(f,b);m=+g[f>>2];n=+g[f+4>>2];o=a[f+8|0]|0;f=ux(b)|0;if((f|0)!=0){p=m*5.0;q=n*5.0;if(o<<24>>24==0){o=l;r=f;while(1){s=c[r+8>>2]|0;t=c[s+132>>2]|0;u=+h[t>>3]*10.0*72.0;if(u<0.0){v=u+-.5}else{v=u+.5}w=~~v;u=+h[t+8>>3]*10.0*72.0;if(u<0.0){x=u+-.5}else{x=u+.5}t=~~x;u=p*+h[s+32>>3]*72.0;if(u<0.0){y=u+-.5}else{y=u+.5}z=~~y;u=q*+h[s+40>>3]*72.0;if(u<0.0){A=u+-.5}else{A=u+.5}s=~~A;c[o+12>>2]=w;c[o+16>>2]=t;c[o+20>>2]=r;c[o+32>>2]=w-z;c[o+36>>2]=t-s;c[o+40>>2]=z+w;c[o+44>>2]=s+t;t=vx(b,r)|0;if((t|0)==0){break}else{o=o+48|0;r=t}}}else{r=l;o=f;while(1){f=c[o+8>>2]|0;t=c[f+132>>2]|0;A=+h[t>>3]*10.0*72.0;if(A<0.0){B=A+-.5}else{B=A+.5}s=~~B;A=+h[t+8>>3]*10.0*72.0;if(A<0.0){C=A+-.5}else{C=A+.5}t=~~C;A=+h[f+32>>3]*.5*72.0;if(A<0.0){D=A+-.5}else{D=A+.5}w=~~((m+ +(~~D|0))*10.0);A=+h[f+40>>3]*.5*72.0;if(A<0.0){E=A+-.5}else{E=A+.5}f=~~((n+ +(~~E|0))*10.0);c[r+12>>2]=s;c[r+16>>2]=t;c[r+20>>2]=o;c[r+32>>2]=s-w;c[r+36>>2]=t-f;c[r+40>>2]=w+s;c[r+44>>2]=f+t;t=vx(b,o)|0;if((t|0)==0){break}else{r=r+48|0;o=t}}}}o=j-1|0;if((o|0)>0){F=0;G=l}else{H=0;eF(k);i=e;return H|0}a:while(1){r=G+48|0;t=F+1|0;if((t|0)<(j|0)){f=c[G+32>>2]|0;s=G+40|0;w=G+36|0;z=G+44|0;I=t;J=r;while(1){do{if((f|0)<=(c[J+40>>2]|0)){if((c[J+32>>2]|0)>(c[s>>2]|0)){break}if((c[w>>2]|0)>(c[J+44>>2]|0)){break}if((c[J+36>>2]|0)<=(c[z>>2]|0)){break a}}}while(0);K=I+1|0;if((K|0)<(j|0)){I=K;J=J+48|0}else{break}}}if((t|0)<(o|0)){F=t;G=r}else{H=0;L=49;break}}if((L|0)==49){eF(k);i=e;return H|0}switch(d|0){case 9:{Dr(b,l,j,140,1);Fr(b,l,j,142,1);break};case 10:{Fr(b,l,j,142,1);Dr(b,l,j,140,1);break};case 7:{Dr(b,l,j,204,1);Fr(b,l,j,142,1);L=42;break};case 8:{L=42;break};case 13:{L=43;break};case 14:{Fr(b,l,j,142,0);Dr(b,l,j,140,0);break};case 12:{Fr(b,l,j,162,0);Dr(b,l,j,140,0);break};default:{Dr(b,l,j,204,0);Fr(b,l,j,142,0)}}if((L|0)==42){Fr(b,l,j,162,1);Dr(b,l,j,140,1);L=43}if((L|0)==43){Dr(b,l,j,140,0);Fr(b,l,j,142,0)}if((j|0)>0){M=l;N=0}else{H=1;eF(k);i=e;return H|0}while(1){l=c[M+16>>2]|0;b=(c[M+20>>2]|0)+8|0;h[c[(c[b>>2]|0)+132>>2]>>3]=+(c[M+12>>2]|0)/72.0/10.0;h[(c[(c[b>>2]|0)+132>>2]|0)+8>>3]=+(l|0)/72.0/10.0;l=N+1|0;if((l|0)<(j|0)){M=M+48|0;N=l}else{H=1;break}}eF(k);i=e;return H|0}function Dr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g=$g(40288,c[43332]|0)|0;h=(d|0)>0;if(h){i=g|0;j=0;k=b;while(1){c[k+8>>2]=c[k+12>>2];Hc[c[i>>2]&63](g,k,1)|0;l=j+1|0;if((l|0)<(d|0)){j=l;k=k+48|0}else{break}}}if((f|0)==0){m=Or(a,g,e,178)|0}else{m=Nr(g,e,178)|0}ok(m,2,2147483647)|0;if(h){h=0;e=b;while(1){b=e+12|0;a=c[(c[(c[e+24>>2]|0)+8>>2]|0)+232>>2]|0;f=a-(c[b>>2]|0)|0;c[b>>2]=a;a=e+32|0;c[a>>2]=(c[a>>2]|0)+f;a=e+40|0;c[a>>2]=(c[a>>2]|0)+f;f=h+1|0;if((f|0)<(d|0)){h=f;e=e+48|0}else{break}}}e=ux(m)|0;if((e|0)==0){n=Kw(m)|0;o=Vg(g)|0;return}else{p=e}do{e=p+8|0;h=c[e>>2]|0;d=c[h+172>>2]|0;if((d|0)==0){q=h}else{eF(d);q=c[e>>2]|0}e=c[q+180>>2]|0;if((e|0)!=0){eF(e)}p=vx(m,p)|0;}while((p|0)!=0);n=Kw(m)|0;o=Vg(g)|0;return}function Er(a,b){a=a|0;b=b|0;var d=0;if((c[a+36>>2]|0)>(c[b+44>>2]|0)){d=0;return d|0}d=(c[b+36>>2]|0)<=(c[a+44>>2]|0)|0;return d|0}function Fr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g=$g(40288,c[43332]|0)|0;h=(d|0)>0;if(h){i=g|0;j=0;k=b;while(1){c[k+8>>2]=c[k+16>>2];Hc[c[i>>2]&63](g,k,1)|0;l=j+1|0;if((l|0)<(d|0)){j=l;k=k+48|0}else{break}}}if((f|0)==0){m=Or(a,g,e,98)|0}else{m=Nr(g,e,98)|0}ok(m,2,2147483647)|0;if(h){h=0;e=b;while(1){b=e+16|0;a=c[(c[(c[e+24>>2]|0)+8>>2]|0)+232>>2]|0;f=a-(c[b>>2]|0)|0;c[b>>2]=a;a=e+36|0;c[a>>2]=(c[a>>2]|0)+f;a=e+44|0;c[a>>2]=(c[a>>2]|0)+f;f=h+1|0;if((f|0)<(d|0)){h=f;e=e+48|0}else{break}}}e=ux(m)|0;if((e|0)==0){n=Kw(m)|0;o=Vg(g)|0;return}else{p=e}do{e=p+8|0;h=c[e>>2]|0;d=c[h+172>>2]|0;if((d|0)==0){q=h}else{eF(d);q=c[e>>2]|0}e=c[q+180>>2]|0;if((e|0)!=0){eF(e)}p=vx(m,p)|0;}while((p|0)!=0);n=Kw(m)|0;o=Vg(g)|0;return}function Gr(a,b){a=a|0;b=b|0;var d=0;if((c[a+32>>2]|0)>(c[b+40>>2]|0)){d=0;return d|0}d=(c[b+32>>2]|0)<=(c[a+40>>2]|0)|0;return d|0}function Hr(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[a+36>>2]|0;e=c[b+44>>2]|0;if((d|0)>(e|0)){f=0;return f|0}g=c[b+36>>2]|0;h=c[a+44>>2]|0;if((g|0)>(h|0)){f=0;return f|0}i=c[a+40>>2]|0;j=c[b+32>>2]|0;if((i|0)<(j|0)){f=1;return f|0}k=c[b+16>>2]|0;l=c[a+16>>2]|0;f=(((i-j-(c[a+32>>2]|0)+(c[b+40>>2]|0)|0)/2|0)-(c[b+12>>2]|0)+(c[a+12>>2]|0)|0)<=(((h-d+e-g|0)/2|0)+((k|0)<(l|0)?k-l|0:l-k|0)|0)|0;return f|0}function Ir(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=c[a+32>>2]|0;e=c[b+40>>2]|0;if((d|0)>(e|0)){f=0;return f|0}g=c[b+32>>2]|0;h=c[a+40>>2]|0;if((g|0)>(h|0)){f=0;return f|0}i=c[a+44>>2]|0;j=c[b+36>>2]|0;if((i|0)<(j|0)){f=1;return f|0}k=c[b+12>>2]|0;l=c[a+12>>2]|0;f=(((i-(c[a+36>>2]|0)+(c[b+44>>2]|0)-j|0)/2|0)-(c[b+16>>2]|0)+(c[a+16>>2]|0)|0)<=(((h-(g+d)+e|0)/2|0)+((k|0)<(l|0)?k-l|0:l-k|0)|0)|0;return f|0}function Jr(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0.0,n=0.0,p=0,q=0.0,r=0.0,s=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0.0,aa=0.0,ba=0,ca=0,da=0.0,ea=0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0,ka=0;e=i;i=i+16|0;f=e|0;j=Lw(b)|0;k=kk(j*72|0)|0;l=k;or(f,b);m=+g[f>>2];n=+g[f+4>>2];p=(a[f+8|0]|0)!=0;if(p){q=m/72.0;r=n/72.0}else{q=m;r=n}f=ux(b)|0;if((f|0)!=0){n=q;q=r;s=f;f=l;while(1){u=c[s+8>>2]|0;r=+h[u+32>>3];if(p){v=q+ +h[u+40>>3]*.5;w=n+r*.5}else{v=q*+h[u+40>>3]*.5;w=n*r*.5}r=+h[c[u+132>>2]>>3];h[f>>3]=r;m=+h[(c[(c[s+8>>2]|0)+132>>2]|0)+8>>3];h[f+8>>3]=m;h[f+16>>3]=r-w;h[f+24>>3]=m-v;h[f+32>>3]=w+r;h[f+40>>3]=v+m;h[f+48>>3]=w;h[f+56>>3]=v;c[f+64>>2]=s;u=vx(b,s)|0;if((u|0)==0){break}else{s=u;f=f+72|0}}}a:do{if((d|0)<0){b:do{if((j|0)>0){f=l;s=0;v=0.0;c:while(1){b=f+72|0;p=s+1|0;if((p|0)>=(j|0)){break}w=+h[f+16>>3];u=f|0;x=f+8|0;y=f+56|0;z=f+48|0;A=f+32|0;B=f+24|0;C=f+40|0;D=b;E=p;n=v;while(1){do{if(w<=+h[D+32>>3]){if(+h[D+16>>3]>+h[A>>3]){break}if(+h[B>>3]>+h[D+40>>3]){break}if(+h[D+24>>3]<=+h[C>>3]){break b}}}while(0);q=+h[u>>3];m=+h[D>>3];if(q==m){F=t}else{F=(+h[z>>3]+ +h[D+48>>3])/+S(+(q-m))}m=+h[x>>3];q=+h[D+8>>3];if(m==q){G=t}else{G=(+h[y>>3]+ +h[D+56>>3])/+S(+(m-q))}q=G<F?G:F;m=q>n?q:n;H=E+1|0;if((H|0)<(j|0)){D=D+72|0;E=H;n=m}else{f=b;s=p;v=m;continue c}}}if(v==0.0){break}gc(c[o>>2]|0,103696,(s=i,i=i+8|0,h[s>>3]=v,s)|0)|0;i=s;I=v;J=v;break a}}while(0);eF(k);K=0;i=e;return K|0}else{s=kk((j<<4)+16|0)|0;d:do{if((j|0)>0){f=l;p=j;b=s;E=0;D=0;e:while(1){y=f+72|0;x=E+1|0;if((x|0)>=(j|0)){L=b;M=D;break d}z=f+16|0;u=f+32|0;C=f+24|0;B=f+40|0;A=f|0;H=f+8|0;N=f+56|0;O=f+48|0;P=y;Q=p;R=b;T=x;U=D;while(1){do{if(+h[z>>3]>+h[P+32>>3]){V=U;W=R;X=Q}else{if(+h[P+16>>3]>+h[u>>3]){V=U;W=R;X=Q;break}if(+h[C>>3]>+h[P+40>>3]){V=U;W=R;X=Q;break}if(+h[P+24>>3]>+h[B>>3]){V=U;W=R;X=Q;break}if((U|0)==(Q|0)){Y=U+j|0;Z=mk(R,(Y<<4)+16|0)|0;_=Y}else{Z=R;_=Q}n=+h[A>>3];w=+h[P>>3];do{if(n==w){$=t}else{m=(+h[O>>3]+ +h[P+48>>3])/+S(+(n-w));if(m>=1.0){$=m;break}$=1.0}}while(0);w=+h[H>>3];n=+h[P+8>>3];do{if(w==n){aa=t}else{m=(+h[N>>3]+ +h[P+56>>3])/+S(+(w-n));if(m>=1.0){aa=m;break}aa=1.0}}while(0);Y=U+1|0;h[Z+(Y<<4)>>3]=$;h[Z+(Y<<4)+8>>3]=aa;V=Y;W=Z;X=_}}while(0);Y=T+1|0;if((Y|0)>=(j|0)){f=y;p=X;b=W;E=x;D=V;continue e}P=P+72|0;Q=X;R=W;T=Y;U=V}}}else{L=s;M=0}}while(0);s=(M<<4)+16|0;D=mk(L,s)|0;E=D;if((M|0)==0){eF(D);eF(k);K=0;i=e;return K|0}do{if((d|0)==0){h[D>>3]=1.0;h[D+8>>3]=t;Jb(D+16|0,M|0,16,60);b=kk(s)|0;h[b+(M<<4)>>3]=+h[E+(M<<4)>>3];h[b+(M<<4)+8>>3]=1.0;if((M|0)>0){p=M;v=1.0;while(1){f=p-1|0;h[b+(f<<4)>>3]=+h[E+(f<<4)>>3];n=+h[E+(p<<4)+8>>3];w=n>v?n:v;h[b+(f<<4)+8>>3]=w;if((f|0)>0){p=f;v=w}else{break}}}if((M|0)<0){cc(148680,121688,834,170968);return 0}else{ba=0;ca=0;da=t}while(1){v=+h[b+(ca<<4)>>3]*+h[b+(ca<<4)+8>>3];p=v<da;ea=p?ca:ba;fa=p?v:da;if((ca|0)<(M|0)){ba=ea;ca=ca+1|0;da=fa}else{break}}if(fa<t){ga=+h[b+(ea<<4)>>3];ha=+h[b+(ea<<4)+8>>3];break}else{cc(148680,121688,834,170968);return 0}}else{if((M|0)<1){ga=0.0;ha=0.0;break}else{ia=0.0;ja=1;ka=E}while(1){p=ka+16|0;v=+h[p>>3];w=+h[ka+24>>3];n=v<w?v:w;w=n>ia?n:ia;if((ja|0)<(M|0)){ia=w;ja=ja+1|0;ka=p}else{ga=w;ha=w;break}}}}while(0);eF(D);I=ga;J=ha}}while(0);if((j|0)>0){ka=0;ja=l;while(1){l=ja+64|0;h[c[(c[(c[l>>2]|0)+8>>2]|0)+132>>2]>>3]=I*+h[ja>>3];h[(c[(c[(c[l>>2]|0)+8>>2]|0)+132>>2]|0)+8>>3]=J*+h[ja+8>>3];l=ka+1|0;if((l|0)<(j|0)){ka=l;ja=ja+72|0}else{break}}}eF(k);K=1;i=e;return K|0}function Kr(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0.0,g=0.0;c=+h[a>>3];d=+h[b>>3];do{if(c<d){e=-1}else{if(c>d){e=1;break}f=+h[a+8>>3];g=+h[b+8>>3];if(f<g){e=-1;break}e=f>g|0}}while(0);return e|0}function Lr(a,b){a=a|0;b=b|0;return((c[a+12>>2]|0)-(c[a+4>>2]|0)+(c[b+12>>2]|0)-(c[b+4>>2]|0)|0)/2|0|0}function Mr(a,b){a=a|0;b=b|0;return((c[a+8>>2]|0)-(c[a>>2]|0)+(c[b+8>>2]|0)-(c[b>>2]|0)|0)/2|0|0}function Nr(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;f=Hw(113056,173936,0)|0;Wx(f|0,106384,272,1)|0;g=Zg(a)|0;if((g|0)==0){h=0}else{i=0;j=-2147483647;k=g;while(1){g=c[k+8>>2]|0;l=((j|0)!=(g|0))+i|0;m=c[k>>2]|0;if((m|0)==0){h=l;break}else{i=l;j=g;k=m}}}k=f+8|0;j=(h<<3)-4|0;i=0;m=0;g=0;l=0;n=-2147483647;o=0;p=Zg(a)|0;while(1){q=c[p+8>>2]|0;do{if((n|0)==(q|0)){r=o;s=n;t=l;u=g;v=m;w=i}else{x=Ax(f,$w(c[p+20>>2]|0)|0,1)|0;Wx(x|0,100712,304,1)|0;y=x+8|0;c[(c[y>>2]|0)+112>>2]=p;if((m|0)==0){c[(c[k>>2]|0)+180>>2]=x;z=x}else{c[(c[o+8>>2]|0)+164>>2]=x;z=m}c[(c[y>>2]|0)+176>>2]=0;A=l+1|0;B=jk(A<<2)|0;c[(c[y>>2]|0)+172>>2]=B;if((i|0)==0){r=x;s=q;t=A;u=x;v=z;w=x;break}B=i+8|0;c[(c[B>>2]|0)+184>>2]=0;if((i|0)==(z|0)){C=jk(j)|0;c[(c[B>>2]|0)+180>>2]=C}else{C=jk(h-l<<2)|0;c[(c[B>>2]|0)+180>>2]=C}C=uw(f,i,x,0,1)|0;Wx(C|0,95048,176,1)|0;D=C+8|0;b[(c[D>>2]|0)+170>>1]=10;c[(c[D>>2]|0)+156>>2]=1;D=(c[B>>2]|0)+180|0;E=c[D>>2]|0;if((E|0)==0){F=kk((c[D+4>>2]<<2)+8|0)|0}else{F=mk(E,(c[D+4>>2]<<2)+8|0)|0}c[(c[B>>2]|0)+180>>2]=F;D=(c[B>>2]|0)+184|0;E=c[D>>2]|0;c[D>>2]=E+1;c[(c[(c[B>>2]|0)+180>>2]|0)+(E<<2)>>2]=C;E=(c[B>>2]|0)+180|0;c[(c[E>>2]|0)+(c[E+4>>2]<<2)>>2]=0;E=(c[y>>2]|0)+172|0;B=c[E>>2]|0;if((B|0)==0){G=kk((c[E+4>>2]<<2)+8|0)|0}else{G=mk(B,(c[E+4>>2]<<2)+8|0)|0}c[(c[y>>2]|0)+172>>2]=G;E=(c[y>>2]|0)+176|0;B=c[E>>2]|0;c[E>>2]=B+1;c[(c[(c[y>>2]|0)+172>>2]|0)+(B<<2)>>2]=C;C=(c[y>>2]|0)+172|0;c[(c[C>>2]|0)+(c[C+4>>2]<<2)>>2]=0;r=x;s=q;t=A;u=x;v=z;w=x}}while(0);c[p+24>>2]=u;q=c[p>>2]|0;if((q|0)==0){break}else{i=w;m=v;g=u;l=t;n=s;o=r;p=q}}p=w+8|0;c[(c[p>>2]|0)+184>>2]=0;w=jk(4)|0;c[(c[p>>2]|0)+180>>2]=w;w=Hw(84680,173936,0)|0;p=Zg(a)|0;if((p|0)!=0){r=p;do{p=Ax(w,$w(c[r+20>>2]|0)|0,1)|0;Wx(p|0,100712,304,1)|0;c[r+28>>2]=p;c[(c[p+8>>2]|0)+112>>2]=r;r=c[r>>2]|0;}while((r|0)!=0)}r=Zg(a)|0;a:do{if((r|0)!=0){a=0;p=-2147483647;o=r;while(1){s=o;n=c[o+8>>2]|0;if((p|0)==(n|0)){H=p;I=a}else{t=o;do{t=c[t>>2]|0;if((t|0)==0){break a}}while((c[t+8>>2]|0)==(n|0));H=n;I=t}if((I|0)!=0){l=o+28|0;u=I;do{if((Oc[d&255](s,u)|0)!=0){uw(w,c[l>>2]|0,c[u+28>>2]|0,0,1)|0}u=c[u>>2]|0;}while((u|0)!=0)}u=c[o>>2]|0;if((u|0)==0){break}else{a=I;p=H;o=u}}}}while(0);H=ux(w)|0;if((H|0)==0){J=Kw(w)|0;return f|0}else{K=H}do{H=c[(c[K+8>>2]|0)+112>>2]|0;I=c[H+24>>2]|0;d=mw(w,K)|0;if((d|0)!=0){r=H+32|0;H=I+8|0;o=d;do{d=c[(c[(c[((c[o>>2]&3|0)==2?o:o-32|0)+28>>2]|0)+8>>2]|0)+112>>2]|0;p=Oc[e&255](r,d+32|0)|0;a=c[d+24>>2]|0;d=uw(f,I,a,0,1)|0;Wx(d|0,95048,176,1)|0;u=d+8|0;c[(c[u>>2]|0)+156>>2]=1;l=c[u>>2]|0;s=b[l+170>>1]|0;if((s&65535|0)<(p|0)){if(s<<16>>16==0){s=(c[H>>2]|0)+180|0;t=c[s>>2]|0;if((t|0)==0){L=kk((c[s+4>>2]<<2)+8|0)|0}else{L=mk(t,(c[s+4>>2]<<2)+8|0)|0}c[(c[H>>2]|0)+180>>2]=L;s=(c[H>>2]|0)+184|0;t=c[s>>2]|0;c[s>>2]=t+1;c[(c[(c[H>>2]|0)+180>>2]|0)+(t<<2)>>2]=d;t=(c[H>>2]|0)+180|0;c[(c[t>>2]|0)+(c[t+4>>2]<<2)>>2]=0;t=a+8|0;a=(c[t>>2]|0)+172|0;s=c[a>>2]|0;if((s|0)==0){M=kk((c[a+4>>2]<<2)+8|0)|0}else{M=mk(s,(c[a+4>>2]<<2)+8|0)|0}c[(c[t>>2]|0)+172>>2]=M;a=(c[t>>2]|0)+176|0;s=c[a>>2]|0;c[a>>2]=s+1;c[(c[(c[t>>2]|0)+172>>2]|0)+(s<<2)>>2]=d;d=(c[t>>2]|0)+172|0;c[(c[d>>2]|0)+(c[d+4>>2]<<2)>>2]=0;N=c[u>>2]|0}else{N=l}b[N+170>>1]=p}o=ow(w,o)|0;}while((o|0)!=0)}K=vx(w,K)|0;}while((K|0)!=0);J=Kw(w)|0;return f|0}function Or(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=Hw(113056,173936,0)|0;Wx(g|0,106384,272,1)|0;h=Zg(d)|0;if((h|0)!=0){i=g+8|0;j=0;k=h;while(1){h=Ax(g,$w(c[k+20>>2]|0)|0,1)|0;Wx(h|0,100712,304,1)|0;l=h+8|0;c[(c[l>>2]|0)+112>>2]=k;c[k+24>>2]=h;c[(c[l>>2]|0)+176>>2]=0;m=jk(4)|0;c[(c[l>>2]|0)+172>>2]=m;c[(c[l>>2]|0)+184>>2]=0;m=jk(4)|0;c[(c[l>>2]|0)+180>>2]=m;if((j|0)==0){c[(c[i>>2]|0)+180>>2]=h}else{c[(c[j+8>>2]|0)+164>>2]=h}m=c[k>>2]|0;if((m|0)==0){break}else{j=h;k=m}}}k=Zg(d)|0;a:do{if((k|0)!=0){j=k;b:while(1){i=j;m=j|0;h=c[m>>2]|0;if((h|0)==0){break a}l=j+32|0;n=j+24|0;o=j+20|0;p=h;do{do{if((Oc[e&255](i,p)|0)!=0){h=Oc[f&255](l,p+32|0)|0;q=uw(g,c[n>>2]|0,c[p+24>>2]|0,0,1)|0;Wx(q|0,95048,176,1)|0;if((h|0)>=65536){break b}r=q+8|0;b[(c[r>>2]|0)+170>>1]=~~+(h|0);c[(c[r>>2]|0)+156>>2]=1;if((q|0)==0){break}if((uw(a,c[o>>2]|0,c[p+20>>2]|0,0,0)|0)==0){break}c[(c[r>>2]|0)+156>>2]=100}}while(0);p=c[p>>2]|0;}while((p|0)!=0);j=c[m>>2]|0;if((j|0)==0){break a}}cc(89688,121688,256,170216);return 0}}while(0);a=Zg(d)|0;if((a|0)==0){return g|0}else{s=a}do{a=c[s+24>>2]|0;d=mw(g,a)|0;if((d|0)!=0){f=a+8|0;a=d;do{d=(c[f>>2]|0)+180|0;e=c[d>>2]|0;if((e|0)==0){t=kk((c[d+4>>2]<<2)+8|0)|0}else{t=mk(e,(c[d+4>>2]<<2)+8|0)|0}c[(c[f>>2]|0)+180>>2]=t;d=(c[f>>2]|0)+184|0;e=c[d>>2]|0;c[d>>2]=e+1;c[(c[(c[f>>2]|0)+180>>2]|0)+(e<<2)>>2]=a;e=(c[f>>2]|0)+180|0;c[(c[e>>2]|0)+(c[e+4>>2]<<2)>>2]=0;e=a;d=a-32|0;k=(c[(c[((c[e>>2]&3|0)==2?a:d)+28>>2]|0)+8>>2]|0)+172|0;j=c[k>>2]|0;if((j|0)==0){u=kk((c[k+4>>2]<<2)+8|0)|0}else{u=mk(j,(c[k+4>>2]<<2)+8|0)|0}c[(c[(c[((c[e>>2]&3|0)==2?a:d)+28>>2]|0)+8>>2]|0)+172>>2]=u;k=(c[(c[((c[e>>2]&3|0)==2?a:d)+28>>2]|0)+8>>2]|0)+176|0;j=c[k>>2]|0;c[k>>2]=j+1;c[(c[(c[(c[((c[e>>2]&3|0)==2?a:d)+28>>2]|0)+8>>2]|0)+172>>2]|0)+(j<<2)>>2]=a;j=(c[(c[((c[e>>2]&3|0)==2?a:d)+28>>2]|0)+8>>2]|0)+172|0;c[(c[j>>2]|0)+(c[j+4>>2]<<2)>>2]=0;a=ow(g,a)|0;}while((a|0)!=0)}s=c[s>>2]|0;}while((s|0)!=0);return g|0}function Pr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return(c[b>>2]|0)-(c[d>>2]|0)|0}function Qr(a){a=a|0;var b=0;if((a|0)==0){return}b=c[a+4>>2]|0;if((b|0)!=0){eF(b)}b=c[a+8>>2]|0;if((b|0)!=0){eF(b)}eF(a);return}function Rr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;f=d<<2;c[45186]=gF(c[45186]|0,f)|0;h=(d|0)>0;if(h){i=0;do{c[e+(i<<2)>>2]=2147483647;i=i+1|0;}while((i|0)<(d|0))}c[e+(a<<2)>>2]=0;i=b+(a<<4)|0;if((c[i>>2]|0)>1){j=b+(a<<4)+8|0;k=b+(a<<4)+4|0;l=1;do{c[e+(c[(c[k>>2]|0)+(l<<2)>>2]<<2)>>2]=~~+g[(c[j>>2]|0)+(l<<2)>>2];l=l+1|0;}while((l|0)<(c[i>>2]|0))}i=c[45186]|0;if((d|0)==1){m=0;n=0;o=8}else{l=kk(f-4|0)|0;f=d-1|0;if(h){m=f;n=l;o=8}else{p=f;q=l}}if((o|0)==8){l=0;f=0;while(1){if((l|0)==(a|0)){r=f}else{c[n+(f<<2)>>2]=l;c[i+(l<<2)>>2]=f;r=f+1|0}j=l+1|0;if((j|0)<(d|0)){l=j;f=r}else{p=m;q=n;break}}}if((p|0)>-2){n=(p|0)/2|0;while(1){m=n;while(1){r=m<<1;f=r|1;if((r|0)<(p|0)){if((c[e+(c[q+(r<<2)>>2]<<2)>>2]|0)<(c[e+(c[q+(m<<2)>>2]<<2)>>2]|0)){s=r}else{o=17}}else{o=17}if((o|0)==17){o=0;s=m}if((f|0)<(p|0)){t=(c[e+(c[q+(f<<2)>>2]<<2)>>2]|0)<(c[e+(c[q+(s<<2)>>2]<<2)>>2]|0)?f:s}else{t=s}if((t|0)==(m|0)){break}f=q+(t<<2)|0;r=c[f>>2]|0;l=q+(m<<2)|0;c[f>>2]=c[l>>2];c[l>>2]=r;c[i+(c[f>>2]<<2)>>2]=t;c[i+(c[l>>2]<<2)>>2]=m;m=t}if((n|0)>0){n=n-1|0}else{break}}if((p|0)==0){u=-2147483639}else{v=p;w=-2147483639;o=25}}else{v=p;w=-2147483639;o=25}a:do{if((o|0)==25){while(1){o=0;p=c[45186]|0;n=c[q>>2]|0;t=v-1|0;i=c[q+(t<<2)>>2]|0;c[q>>2]=i;c[p+(i<<2)>>2]=0;i=0;while(1){s=i<<1;m=s|1;if((s|0)<(t|0)){if((c[e+(c[q+(s<<2)>>2]<<2)>>2]|0)<(c[e+(c[q+(i<<2)>>2]<<2)>>2]|0)){x=s}else{o=28}}else{o=28}if((o|0)==28){o=0;x=i}if((m|0)<(t|0)){y=(c[e+(c[q+(m<<2)>>2]<<2)>>2]|0)<(c[e+(c[q+(x<<2)>>2]<<2)>>2]|0)?m:x}else{y=x}if((y|0)==(i|0)){break}m=q+(y<<2)|0;s=c[m>>2]|0;l=q+(i<<2)|0;c[m>>2]=c[l>>2];c[l>>2]=s;c[p+(c[m>>2]<<2)>>2]=y;c[p+(c[l>>2]<<2)>>2]=i;i=y}i=c[e+(n<<2)>>2]|0;if((i|0)==2147483647){u=w;break a}p=b+(n<<4)|0;l=c[p>>2]|0;if((l|0)>1){m=b+(n<<4)+4|0;s=b+(n<<4)+8|0;f=1;r=l;while(1){l=c[(c[m>>2]|0)+(f<<2)>>2]|0;a=~~+g[(c[s>>2]|0)+(f<<2)>>2]+i|0;j=c[45186]|0;k=e+(l<<2)|0;if((c[k>>2]|0)>(a|0)){z=j+(l<<2)|0;A=c[z>>2]|0;c[k>>2]=a;b:do{if((A|0)>0){k=A;while(1){B=(k|0)/2|0;C=c[q+(B<<2)>>2]|0;if((c[e+(C<<2)>>2]|0)<=(a|0)){D=k;break b}c[q+(k<<2)>>2]=C;c[j+(C<<2)>>2]=k;if((k|0)>1){k=B}else{D=B;break}}}else{D=A}}while(0);c[q+(D<<2)>>2]=l;c[z>>2]=D;E=c[p>>2]|0}else{E=r}A=f+1|0;if((A|0)<(E|0)){f=A;r=E}else{break}}}r=i+10|0;if((t|0)==0){u=r;break}else{v=t;w=r;o=25}}}}while(0);if(h){h=0;do{o=e+(h<<2)|0;if((c[o>>2]|0)==2147483647){c[o>>2]=u}h=h+1|0;}while((h|0)<(d|0))}if((q|0)==0){return}eF(q);return}function Sr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0;f=kk(d<<2)|0;h=f;i=(d|0)>0;if(i){j=0;do{g[e+(j<<2)>>2]=3.4028234663852886e+38;j=j+1|0;}while((j|0)<(d|0))}g[e+(a<<2)>>2]=0.0;j=b+(a<<4)|0;if((c[j>>2]|0)>1){k=b+(a<<4)+8|0;l=b+(a<<4)+4|0;m=1;do{g[e+(c[(c[l>>2]|0)+(m<<2)>>2]<<2)>>2]=+g[(c[k>>2]|0)+(m<<2)>>2];m=m+1|0;}while((m|0)<(c[j>>2]|0))}j=d-1|0;m=kk(j<<2)|0;k=m;if(i){i=0;l=0;while(1){if((i|0)==(a|0)){n=l}else{c[k+(l<<2)>>2]=i;c[h+(i<<2)>>2]=l;n=l+1|0}o=i+1|0;if((o|0)<(d|0)){i=o;l=n}else{break}}}if((j|0)>-2){n=(j|0)/2|0;while(1){l=n;while(1){i=l<<1;d=i|1;if((i|0)<(j|0)){if(+g[e+(c[k+(i<<2)>>2]<<2)>>2]<+g[e+(c[k+(l<<2)>>2]<<2)>>2]){p=i}else{q=15}}else{q=15}if((q|0)==15){q=0;p=l}do{if((d|0)<(j|0)){if(+g[e+(c[k+(d<<2)>>2]<<2)>>2]>=+g[e+(c[k+(p<<2)>>2]<<2)>>2]){r=p;break}r=d}else{r=p}}while(0);if((r|0)==(l|0)){break}d=k+(r<<2)|0;i=c[d>>2]|0;a=k+(l<<2)|0;c[d>>2]=c[a>>2];c[a>>2]=i;c[h+(c[d>>2]<<2)>>2]=r;c[h+(c[a>>2]<<2)>>2]=l;l=r}if((n|0)>0){n=n-1|0}else{break}}if((j|0)!=0){s=j;q=24}}else{s=j;q=24}a:do{if((q|0)==24){while(1){q=0;j=c[k>>2]|0;n=s-1|0;r=c[k+(n<<2)>>2]|0;c[k>>2]=r;c[h+(r<<2)>>2]=0;r=0;while(1){p=r<<1;l=p|1;if((p|0)<(n|0)){if(+g[e+(c[k+(p<<2)>>2]<<2)>>2]<+g[e+(c[k+(r<<2)>>2]<<2)>>2]){t=p}else{q=27}}else{q=27}if((q|0)==27){q=0;t=r}do{if((l|0)<(n|0)){if(+g[e+(c[k+(l<<2)>>2]<<2)>>2]>=+g[e+(c[k+(t<<2)>>2]<<2)>>2]){u=t;break}u=l}else{u=t}}while(0);if((u|0)==(r|0)){break}l=k+(u<<2)|0;p=c[l>>2]|0;a=k+(r<<2)|0;c[l>>2]=c[a>>2];c[a>>2]=p;c[h+(c[l>>2]<<2)>>2]=u;c[h+(c[a>>2]<<2)>>2]=r;r=u}v=+g[e+(j<<2)>>2];if(v==3.4028234663852886e+38){break a}r=b+(j<<4)|0;a=c[r>>2]|0;if((a|0)>1){l=b+(j<<4)+4|0;p=b+(j<<4)+8|0;d=1;i=a;while(1){a=c[(c[l>>2]|0)+(d<<2)>>2]|0;w=v+ +g[(c[p>>2]|0)+(d<<2)>>2];o=e+(a<<2)|0;if(+g[o>>2]>w){x=h+(a<<2)|0;y=c[x>>2]|0;g[o>>2]=w;b:do{if((y|0)>0){o=y;while(1){z=(o|0)/2|0;A=c[k+(z<<2)>>2]|0;if(+g[e+(A<<2)>>2]<=w){B=o;break b}c[k+(o<<2)>>2]=A;c[h+(A<<2)>>2]=o;if((o|0)>1){o=z}else{B=z;break}}}else{B=y}}while(0);c[k+(B<<2)>>2]=a;c[x>>2]=B;C=c[r>>2]|0}else{C=i}y=d+1|0;if((y|0)<(C|0)){d=y;i=C}else{break}}}if((n|0)==0){break}else{s=n;q=24}}}}while(0);if((m|0)==0){eF(f);return}eF(m);eF(f);return}function Tr(){nt(180656,48);c[44280]=0;return}function Ur(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0;d=ot(180656)|0;e=d;c[d+32>>2]=a;c[d+36>>2]=b;fu(a);fu(b);c[d+24>>2]=0;c[d+28>>2]=0;f=+h[a>>3];g=+h[b>>3]-f;i=+h[a+8>>3];j=+h[b+8>>3]-i;if(g>0.0){k=g}else{k=-0.0-g}if(j>0.0){l=j}else{l=-0.0-j}m=(g*g+j*j)*.5+(g*f+j*i);b=d+16|0;h[b>>3]=m;if(k>l){h[d>>3]=1.0;h[d+8>>3]=j/g;n=g;o=m/n;h[b>>3]=o;p=c[44280]|0;q=d+40|0;r=q;c[r>>2]=p;s=c[44280]|0;t=s+1|0;c[44280]=t;return e|0}else{h[d+8>>3]=1.0;h[d>>3]=g/j;n=j;o=m/n;h[b>>3]=o;p=c[44280]|0;q=d+40|0;r=q;c[r>>2]=p;s=c[44280]|0;t=s+1|0;c[44280]=t;return e|0}return 0}function Vr(a){a=a|0;var b=0.0,d=0,e=0,f=0,g=0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0;b=+h[a>>3];do{if(b==1.0){if(+h[a+8>>3]<0.0){d=c[a+28>>2]|0;e=c[a+24>>2]|0;if((e|0)==0){f=d;g=9}else{i=e;j=d;g=5}}else{d=c[a+24>>2]|0;e=c[a+28>>2]|0;if((e|0)==0){f=d;g=9}else{i=e;j=d;g=5}}do{if((g|0)==5){k=+h[i+8>>3];if(k>+h[1538]){return}l=+h[1537];if(k<l){m=l;n=+h[a+16>>3]-l*+h[a+8>>3];o=l;p=j;break}else{m=k;n=+h[i>>3];o=l;p=j;break}}else if((g|0)==9){l=+h[1537];m=l;n=+h[a+16>>3]-l*+h[a+8>>3];o=l;p=f}}while(0);do{if((p|0)==0){l=+h[1538];q=l;r=+h[a+16>>3]-l*+h[a+8>>3]}else{l=+h[p+8>>3];if(l<o){return}k=+h[1538];if(l>k){q=k;r=+h[a+16>>3]-k*+h[a+8>>3];break}else{q=l;r=+h[p>>3];break}}}while(0);l=+h[1540];d=n>l;e=r>l;k=+h[1539];if(d&e|n<k&r<k){return}if(d){s=(+h[a+16>>3]-l)/+h[a+8>>3];t=l}else{s=m;t=n}if(t<k){u=(+h[a+16>>3]-k)/+h[a+8>>3];v=k}else{u=s;v=t}if(e){w=(+h[a+16>>3]-l)/+h[a+8>>3];x=l}else{w=q;x=r}if(x>=k){y=w;z=u;A=x;B=v;break}y=(+h[a+16>>3]-k)/+h[a+8>>3];z=u;A=k;B=v}else{e=c[a+28>>2]|0;d=c[a+24>>2]|0;do{if((d|0)==0){k=+h[1539];C=+h[a+16>>3]-b*k;D=k;E=k}else{k=+h[d>>3];if(k>+h[1540]){return}l=+h[1539];if(k<l){C=+h[a+16>>3]-b*l;D=l;E=l;break}else{C=+h[d+8>>3];D=k;E=l;break}}}while(0);do{if((e|0)==0){l=+h[1540];F=+h[a+16>>3]-l*b;G=l}else{l=+h[e>>3];if(l<E){return}k=+h[1540];if(l>k){F=+h[a+16>>3]-k*b;G=k;break}else{F=+h[e+8>>3];G=l;break}}}while(0);l=+h[1538];e=C>l;d=F>l;k=+h[1537];if(e&d|C<k&F<k){return}if(e){H=l;I=(+h[a+16>>3]-l)/b}else{H=C;I=D}if(H<k){J=k;K=(+h[a+16>>3]-k)/b}else{J=H;K=I}if(d){L=l;M=(+h[a+16>>3]-l)/b}else{L=F;M=G}if(L>=k){y=L;z=J;A=M;B=K;break}y=k;z=J;A=(+h[a+16>>3]-k)/b;B=K}}while(0);p=a+32|0;ys(c[p>>2]|0,B,z);ys(c[p>>2]|0,A,y);p=a+36|0;ys(c[p>>2]|0,B,z);ys(c[p>>2]|0,A,y);return}function Wr(a,b,d){a=a|0;b=b|0;d=d|0;c[a+24+(b<<2)>>2]=d;fu(d);if((c[a+24+(1-b<<2)>>2]|0)==0){return}Vr(a);eu(c[a+32>>2]|0);eu(c[a+36>>2]|0);pt(a,180656);return}function Xr(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=i;i=i+16|0;h=g|0;j=b<<2;k=kk(da(j,d)|0)|0;l=c[e>>2]|0;m=kk(j)|0;j=m;n=c[a+8>>2]|0;if((l|0)!=0){eF(c[l>>2]|0);eF(l)}l=kk(d<<2)|0;c[e>>2]=l;if((d|0)>0){e=0;do{c[l+(e<<2)>>2]=k+((da(e,b)|0)<<2);e=e+1|0;}while((e|0)<(d|0))}e=(f|0)!=0;if(e){Ds(a,b)}f=(yb()|0)%(b|0)|0;vr(h,b);k=c[l>>2]|0;if(e){Rr(f,a,b,k)}else{ur(f,a,b,k,h)}k=(b|0)>0;if(k){o=f;p=0;q=0;while(1){r=c[(c[l>>2]|0)+(p<<2)>>2]|0;c[j+(p<<2)>>2]=r;s=(r|0)>(q|0);t=s?p:o;u=p+1|0;if((u|0)<(b|0)){o=t;p=u;q=s?r:q}else{v=t;break}}}else{v=f}a:do{if((d|0)>1){if(e){f=v;q=1;while(1){p=l+(q<<2)|0;Rr(f,a,b,c[p>>2]|0);if(k){o=f;t=0;r=0;while(1){s=j+(t<<2)|0;u=c[s>>2]|0;w=c[(c[p>>2]|0)+(t<<2)>>2]|0;x=(u|0)<(w|0)?u:w;c[s>>2]=x;s=(x|0)>(r|0);w=s?t:o;u=t+1|0;if((u|0)<(b|0)){o=w;t=u;r=s?x:r}else{y=w;break}}}else{y=f}r=q+1|0;if((r|0)<(d|0)){f=y;q=r}else{break a}}}if(k){z=v;A=1}else{q=1;while(1){ur(v,a,b,c[l+(q<<2)>>2]|0,h);q=q+1|0;if((q|0)>=(d|0)){break a}}}while(1){q=l+(A<<2)|0;ur(z,a,b,c[q>>2]|0,h);f=z;r=0;t=0;while(1){o=j+(r<<2)|0;p=c[o>>2]|0;w=c[(c[q>>2]|0)+(r<<2)>>2]|0;x=(p|0)<(w|0)?p:w;c[o>>2]=x;o=(x|0)>(t|0);B=o?r:f;w=r+1|0;if((w|0)<(b|0)){f=B;r=w;t=o?x:t}else{break}}t=A+1|0;if((t|0)<(d|0)){z=B;A=t}else{break}}}}while(0);eF(m);if(!e){i=g;return}Es(a,b,n);i=g;return}function Yr(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0,h=0,i=0,j=0.0,k=0,l=0;if((d|0)<=0){return}e=(b|0)>0;f=+(b|0);g=0;do{do{if(e){h=c[a+(g<<2)>>2]|0;i=0;j=0.0;do{j=j+ +(c[h+(i<<2)>>2]|0);i=i+1|0;}while((i|0)<(b|0));if(!e){break}i=~~(j/f);h=a+(g<<2)|0;k=0;do{l=(c[h>>2]|0)+(k<<2)|0;c[l>>2]=(c[l>>2]|0)-i;k=k+1|0;}while((k|0)<(b|0))}}while(0);g=g+1|0;}while((g|0)<(d|0));return}function Zr(){c[43746]=~~+T(+((c[44272]|0)+4|0));return}function _r(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]- +h[b>>3];d=+h[a+8>>3]- +h[b+8>>3];return+(c*c+d*d)}function $r(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];h[a>>3]=+h[b>>3]- +h[d>>3];h[a+8>>3]=+h[b+8>>3]- +h[d+8>>3];i=e;return}function as(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];h[a>>3]=+h[b>>3]+ +h[d>>3];h[a+8>>3]=+h[b+8>>3]+ +h[d+8>>3];i=e;return}function bs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0.0;e=i;f=a;a=i;i=i+16|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];g=+h[b+8>>3];j=+h[b>>3];i=e;return+((+h[a+8>>3]-g)*(+h[d>>3]-j)-(+h[d+8>>3]-g)*(+h[a>>3]-j))}function cs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0.0;e=i;f=a;a=i;i=i+16|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];g=+h[b+8>>3];j=+h[b>>3];i=e;return(+h[a+8>>3]-g)*(+h[d>>3]-j)-(+h[d+8>>3]-g)*(+h[a>>3]-j)>0.0|0}function ds(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0.0;g=i;j=a;a=i;i=i+16|0;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];j=b;b=i;i=i+16|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];j=d;d=i;i=i+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];j=e;e=i;i=i+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];k=+h[a>>3];l=+h[e+8>>3];m=+h[d+8>>3];n=k*(l-m);o=+h[b>>3];p=+h[e>>3];q=+h[b+8>>3];r=+h[a+8>>3];s=q-r;t=+h[d>>3];u=t*(r-q)+(n+o*(m-l)+p*s);if(u==0.0){v=0;i=g;return v|0}w=(p*(m-r)+(n+t*(r-l)))/u;l=(-0.0-(t*s+(k*(m-q)+o*(r-m))))/u;h[f>>3]=k+(o-k)*w;h[f+8>>3]=r+w*s;do{if(w>=0.0&w<=1.0){if(l>=0.0&l<=1.0){v=1}else{break}i=g;return v|0}}while(0);v=0;i=g;return v|0}function es(a,b,d){a=a|0;b=b|0;d=+d;var e=0.0,f=0,g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c[a+20>>2]=b;fu(b);e=+h[b+8>>3]+d;h[a+24>>3]=e;f=c[53556]|0;d=+(f|0);g=(e- +h[8])/+h[3711]*d;do{if(g<0.0){i=0}else{if(g<d){i=~~g;break}else{i=f-1|0;break}}}while(0);if((i|0)<(c[53554]|0)){c[53554]=i}f=b|0;b=(c[53558]|0)+(i*40|0)+32|0;i=c[b>>2]|0;a:do{if((i|0)==0){j=b;k=0}else{l=b;m=i;while(1){g=+h[m+24>>3];if(e<=g){if(e!=g){j=l;k=m;break a}if(+h[f>>3]<=+h[c[m+20>>2]>>3]){j=l;k=m;break a}}n=m+32|0;o=c[n>>2]|0;if((o|0)==0){j=n;k=0;break}else{l=n;m=o}}}}while(0);c[a+32>>2]=k;c[j>>2]=a;c[53560]=(c[53560]|0)+1;return}function fs(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0,i=0;b=a+20|0;if((c[b>>2]|0)==0){return}d=c[53556]|0;e=+(d|0);f=(+h[a+24>>3]- +h[8])/+h[3711]*e;do{if(f<0.0){g=0}else{if(f<e){g=~~f;break}else{g=d-1|0;break}}}while(0);if((g|0)<(c[53554]|0)){c[53554]=g}d=(c[53558]|0)+(g*40|0)|0;do{i=d+32|0;d=c[i>>2]|0;}while((d|0)!=(a|0));c[i>>2]=c[a+32>>2];c[53560]=(c[53560]|0)-1;eu(c[b>>2]|0);c[b>>2]=0;return}function gs(){return(c[53560]|0)==0|0}function hs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0.0;b=c[53554]|0;d=c[53558]|0;e=c[d+(b*40|0)+32>>2]|0;if((e|0)==0){f=b;while(1){b=f+1|0;c[53554]=b;g=c[d+(b*40|0)+32>>2]|0;if((g|0)==0){f=b}else{i=g;break}}}else{i=e}j=+h[i+24>>3];h[a>>3]=+h[c[i+20>>2]>>3];h[a+8>>3]=j;return}function is(){var a=0,b=0;a=(c[53558]|0)+((c[53554]|0)*40|0)+32|0;b=c[a>>2]|0;c[a>>2]=c[b+32>>2];c[53560]=(c[53560]|0)-1;return b|0}function js(){eF(c[53558]|0);c[53558]=0;return}function ks(){var a=0,b=0,d=0,e=0,f=0,g=0,h=0,i=0;c[53560]=0;c[53554]=0;a=c[43746]|0;b=a<<2;c[53556]=b;d=c[53558]|0;if((d|0)==0){e=kk(a*160|0)|0;c[53558]=e;f=c[53556]|0;g=e}else{f=b;g=d}if((f|0)>0){h=0;i=g}else{return}while(1){c[i+(h*40|0)+32>>2]=0;g=h+1|0;if((g|0)>=(c[53556]|0)){break}h=g;i=c[53558]|0}return}function ls(){nt(178816,40);eF(c[53836]|0);c[53836]=0;return}function ms(){var b=0,d=0,e=0,f=0,g=0,h=0;nt(178816,40);b=c[43746]|0;d=b<<1;c[53834]=d;e=c[53836]|0;if((e|0)==0){f=kk(b<<3)|0;c[53836]=f;g=c[53834]|0;h=f}else{g=d;h=e}a:do{if((g|0)>0){e=0;d=h;while(1){c[d+(e<<2)>>2]=0;f=e+1|0;if((f|0)>=(c[53834]|0)){break a}e=f;d=c[53836]|0}}}while(0);h=ot(178816)|0;c[h+8>>2]=0;a[h+16|0]=0;c[h+32>>2]=0;c[h+20>>2]=0;c[h+12>>2]=0;c[53832]=h;h=ot(178816)|0;c[h+8>>2]=0;a[h+16|0]=0;c[h+32>>2]=0;c[h+20>>2]=0;c[h+12>>2]=0;c[53830]=h;c[c[53832]>>2]=0;c[(c[53832]|0)+4>>2]=c[53830];c[c[53830]>>2]=c[53832];c[(c[53830]|0)+4>>2]=0;c[c[53836]>>2]=c[53832];c[(c[53836]|0)+((c[53834]|0)-1<<2)>>2]=c[53830];return}function ns(b,d){b=b|0;d=d|0;var e=0;e=ot(178816)|0;c[e+8>>2]=b;a[e+16|0]=d;c[e+32>>2]=0;c[e+20>>2]=0;c[e+12>>2]=0;return e|0}function os(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0;e=c[b+8>>2]|0;f=c[d+8>>2]|0;if((e|0)==0|(f|0)==0){g=0;return g|0}i=c[e+36>>2]|0;j=c[f+36>>2]|0;if((i|0)==(j|0)){g=0;return g|0}k=+h[e>>3];l=+h[f+8>>3];m=+h[e+8>>3];n=+h[f>>3];o=k*l-m*n;if(o>-1.0e-10&o<1.0e-10){g=0;return g|0}p=+h[e+16>>3];q=+h[f+16>>3];r=(l*p-m*q)/o;m=(k*q-n*p)/o;o=+h[i+8>>3];p=+h[j+8>>3];do{if(o<p){s=b;t=i}else{if(o==p){if(+h[i>>3]<+h[j>>3]){s=b;t=i;break}}s=d;t=j}}while(0);j=a[s+16|0]|0;do{if(r<+h[t>>3]){if(j<<24>>24==1){g=0}else{break}return g|0}else{if(j<<24>>24==0){g=0}else{break}return g|0}}while(0);j=bu()|0;c[j+20>>2]=0;h[j>>3]=r;h[j+8>>3]=m;g=j;return g|0}function ps(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0.0,u=0.0,v=0.0;e=c[b+8>>2]|0;f=c[e+36>>2]|0;g=+h[d>>3];i=+h[f>>3];j=g>i;k=a[b+16|0]|0;do{if(j){if(k<<24>>24==0){l=1}else{break}return l|0}else{if(k<<24>>24==1){l=0}else{break}return l|0}}while(0);m=+h[e>>3];a:do{if(m==1.0){n=+h[d+8>>3];o=n- +h[f+8>>3];p=g-i;q=+h[e+8>>3];b=q<0.0;do{if((b&1&(j&1^1)|j&q>=0.0&1|0)==0){r=g+n*q>+h[e+16>>3];if(b){if(r){s=r&1^1;break a}else{break}}else{if(r){break}else{s=r&1;break a}}}else{r=o>=q*p;if(r){s=r&1;break a}}}while(0);n=i- +h[c[e+32>>2]>>3];r=(p*p-o*o)*q<o*n*(q*q+(p*2.0/n+1.0))|0;if(!b){s=r;break}s=r^1}else{n=+h[e+16>>3]-m*g;t=+h[d+8>>3]-n;u=g-i;v=n- +h[f+8>>3];s=t*t>u*u+v*v|0}}while(0);if(k<<24>>24==0){l=s;return l|0}l=(s|0)==0|0;return l|0}function qs(a,b){a=a|0;b=b|0;var d=0;c[b>>2]=a;d=a+4|0;c[b+4>>2]=c[d>>2];c[c[d>>2]>>2]=b;c[d>>2]=b;return}function rs(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;b=c[53834]|0;d=~~((+h[a>>3]- +h[10])/+h[3712]*+(b|0));e=(d|0)<0?0:d;d=(e|0)<(b|0)?e:b-1|0;do{if((d|0)>-1){e=c[53836]|0;f=e+(d<<2)|0;g=c[f>>2]|0;if((g|0)==0){i=1;j=6;break}if((c[g+8>>2]|0)!=-2){k=g;l=b;m=e;break}c[f>>2]=0;f=g+12|0;e=(c[f>>2]|0)-1|0;c[f>>2]=e;if((e|0)!=0){i=1;j=6;break}pt(g,178816);i=1;j=6}else{i=1;j=6}}while(0);if((j|0)==6){a:while(1){j=0;b=d-i|0;g=c[53834]|0;do{if((b|0)>-1&(g|0)>(b|0)){e=c[53836]|0;f=e+(b<<2)|0;n=c[f>>2]|0;if((n|0)==0){break}if((c[n+8>>2]|0)!=-2){o=n;p=g;q=e;break a}c[f>>2]=0;f=n+12|0;e=(c[f>>2]|0)-1|0;c[f>>2]=e;if((e|0)!=0){break}pt(n,178816)}}while(0);g=i+d|0;b=c[53834]|0;do{if((g|0)>-1&(b|0)>(g|0)){n=c[53836]|0;e=n+(g<<2)|0;f=c[e>>2]|0;if((f|0)==0){break}if((c[f+8>>2]|0)!=-2){o=f;p=b;q=n;break a}c[e>>2]=0;e=f+12|0;n=(c[e>>2]|0)-1|0;c[e>>2]=n;if((n|0)!=0){break}pt(f,178816)}}while(0);i=i+1|0;j=6}c[43680]=(c[43680]|0)+i;k=o;l=p;m=q}c[44270]=(c[44270]|0)+1;q=c[53832]|0;p=c[53830]|0;b:do{if((k|0)==(q|0)){j=21}else{if((k|0)==(p|0)){r=k}else{if((ps(k,a)|0)==0){r=k}else{j=21;break}}while(1){o=c[r>>2]|0;if((o|0)==(q|0)){s=q;break b}if((ps(o,a)|0)==0){r=o}else{s=o;break}}}}while(0);if((j|0)==21){j=k;do{j=c[j+4>>2]|0;if((j|0)==(p|0)){break}}while((ps(j,a)|0)!=0);s=c[j>>2]|0}if((d|0)<=0){return s|0}if((d|0)>=(l-1|0)){return s|0}l=c[m+(d<<2)>>2]|0;if((l|0)==0){t=m}else{m=l+12|0;c[m>>2]=(c[m>>2]|0)-1;t=c[53836]|0}c[t+(d<<2)>>2]=s;t=(c[(c[53836]|0)+(d<<2)>>2]|0)+12|0;c[t>>2]=(c[t>>2]|0)+1;return s|0}function ss(a){a=a|0;var b=0,d=0;b=a+4|0;d=a|0;c[(c[d>>2]|0)+4>>2]=c[b>>2];c[c[b>>2]>>2]=c[d>>2];c[a+8>>2]=-2;return}function ts(a){a=a|0;return c[a+4>>2]|0}function us(a){a=a|0;return c[a>>2]|0}function vs(b){b=b|0;var d=0,e=0;d=c[b+8>>2]|0;if((d|0)==0){e=212936}else{e=(a[b+16|0]|0)==0?d+32|0:d+36|0}return c[e>>2]|0}function ws(b){b=b|0;var d=0,e=0;d=c[b+8>>2]|0;if((d|0)==0){e=212936}else{e=(a[b+16|0]|0)==0?d+36|0:d+32|0}return c[e>>2]|0}function xs(){nt(176456,24);return}function ys(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=(c[44274]|0)+((c[a+16>>2]|0)*96|0)+88|0;f=c[e>>2]|0;a:do{if((f|0)!=0){g=+h[f+8>>3];i=+h[f+16>>3];if(g==b&i==d){return}j=+h[a>>3];k=b-j;l=+h[a+8>>3];m=d-l;n=g-j;g=i-l;o=k<0.0;do{if(o){if(n>=0.0){break}i=g/n;p=m/k;if(p<i){break a}if(p>i){break}q=k>n?-1:1;r=21}else{if(n<0.0){break a}s=n>0.0;if(k>0.0){if(!s){q=g>0.0?-1:1;r=21;break}i=g/n;p=m/k;if(p<i){break a}if(p>i){break}q=k<n?-1:1;r=21;break}else{if(s){q=m>0.0?1:-1;r=21;break}if(m<g){q=g>0.0?-1:1;r=21;break}else{q=m>0.0?1:-1;r=21;break}}}}while(0);if((r|0)==21){if((q|0)<0){break}}s=f|0;t=c[s>>2]|0;b:do{if((t|0)==0){u=s;v=0}else{w=s;x=t;while(1){g=+h[x+8>>3];n=+h[x+16>>3];if(g==b&n==d){break}i=g-j;g=n-l;do{if(o){if(i>=0.0){break}n=g/i;p=m/k;if(p<n){u=w;v=x;break b}if(p>n){break}y=k>i?-1:1;r=41}else{if(i<0.0){u=w;v=x;break b}z=i>0.0;if(k>0.0){if(!z){y=g>0.0?-1:1;r=41;break}n=g/i;p=m/k;if(p<n){u=w;v=x;break b}if(p>n){break}y=k<i?-1:1;r=41;break}else{if(z){y=m>0.0?1:-1;r=41;break}if(m<g){y=g>0.0?-1:1;r=41;break}else{y=m>0.0?1:-1;r=41;break}}}}while(0);if((r|0)==41){r=0;if((y|0)<=0){u=w;v=x;break b}}z=x|0;A=c[z>>2]|0;if((A|0)==0){u=z;v=0;break b}else{w=z;x=A}}return}}while(0);o=ot(176456)|0;h[o+8>>3]=b;h[o+16>>3]=d;c[u>>2]=o;c[o>>2]=v;return}}while(0);v=ot(176456)|0;h[v+8>>3]=b;h[v+16>>3]=d;c[v>>2]=f;c[e>>2]=v;return}function zs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;b=c[a+(d<<4)>>2]|0;if((b|0)<=1){f=0;return f|0}g=c[a+(d<<4)+4>>2]|0;d=0;a=1;while(1){h=((c[e+(c[g+(a<<2)>>2]<<2)>>2]|0)>0)+d|0;i=a+1|0;if((i|0)<(b|0)){d=h;a=i}else{f=h;break}}return f|0}function As(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+(b<<4)|0;if((c[e>>2]|0)<=1){return}f=a+(b<<4)+4|0;b=1;do{c[d+(c[(c[f>>2]|0)+(b<<2)>>2]<<2)>>2]=1;b=b+1|0;}while((b|0)<(c[e>>2]|0));return}function Bs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=a+(b<<4)|0;if((c[e>>2]|0)<=1){return}f=a+(b<<4)+4|0;b=1;do{c[d+(c[(c[f>>2]|0)+(b<<2)>>2]<<2)>>2]=0;b=b+1|0;}while((b|0)<(c[e>>2]|0));return}function Cs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=a+8|0;e=c[d>>2]|0;Ds(a,b);f=b<<2;g=kk(da(f,b)|0)|0;h=kk(f)|0;f=(b|0)>0;if(f){i=0;while(1){c[h+(i<<2)>>2]=g+((da(i,b)|0)<<2);j=i+1|0;if((j|0)<(b|0)){i=j}else{k=0;break}}do{Rr(k,a,b,c[h+(k<<2)>>2]|0);k=k+1|0;}while((k|0)<(b|0))}eF(c[d>>2]|0);c[d>>2]=0;if((e|0)!=0&f){l=e;m=0}else{return h|0}while(1){c[a+(m<<4)+8>>2]=l;e=m+1|0;if((e|0)<(b|0)){l=l+(c[a+(m<<4)>>2]<<2)|0;m=e}else{break}}return h|0}function Ds(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=kk(b<<2)|0;e=d;f=(b|0)>0;if(f){h=0;i=0}else{kk(0)|0;eF(d);return}do{h=(c[a+(i<<4)>>2]|0)+h|0;i=i+1|0;}while((i|0)<(b|0));i=kk(h<<2)|0;if(!f){eF(d);return}vF(d|0,0,b<<2|0)|0;f=i;i=0;while(1){c[a+(i<<4)+8>>2]=f;h=a+(i<<4)|0;j=c[h>>2]|0;do{if((j|0)>1){k=a+(i<<4)+4|0;l=1;do{c[e+(c[(c[k>>2]|0)+(l<<2)>>2]<<2)>>2]=1;l=l+1|0;m=c[h>>2]|0;}while((l|0)<(m|0));l=m-1|0;if((m|0)<2){n=m;break}k=a+(i<<4)+4|0;o=m-2|0;p=1;while(1){q=c[(c[k>>2]|0)+(p<<2)>>2]|0;r=c[a+(q<<4)>>2]|0;if((r|0)>1){s=c[a+(q<<4)+4>>2]|0;q=0;t=1;do{q=((c[e+(c[s+(t<<2)>>2]<<2)>>2]|0)>0)+q|0;t=t+1|0;}while((t|0)<(r|0));u=q<<1}else{u=0}g[f+(p<<2)>>2]=+(o+r-u|0);if((p|0)<(l|0)){p=p+1|0}else{break}}p=c[h>>2]|0;if((p|0)<=1){n=p;break}p=a+(i<<4)+4|0;l=1;while(1){c[e+(c[(c[p>>2]|0)+(l<<2)>>2]<<2)>>2]=0;o=l+1|0;k=c[h>>2]|0;if((o|0)<(k|0)){l=o}else{n=k;break}}}else{n=j}}while(0);j=i+1|0;if((j|0)<(b|0)){f=f+(n<<2)|0;i=j}else{break}}eF(d);return}function Es(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+8|0;eF(c[e>>2]|0);c[e>>2]=0;if((d|0)!=0&(b|0)>0){f=d;g=0}else{return}while(1){c[a+(g<<4)+8>>2]=f;d=g+1|0;if((d|0)<(b|0)){f=f+(c[a+(g<<4)>>2]<<2)|0;g=d}else{break}}return}function Fs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,g=0,i=0.0,j=0.0,k=0,l=0.0,m=0.0;if((b|0)>0){f=0.0;g=0}else{i=0.0;j=+T(i);return+j}while(1){k=c[a+(g<<2)>>2]|0;l=+h[k+(d<<3)>>3]- +h[k+(e<<3)>>3];m=f+l*l;k=g+1|0;if((k|0)<(b|0)){f=m;g=k}else{i=m;break}}j=+T(i);return+j}function Gs(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0.0,A=0,B=0,C=0;f=e+1|0;g=d;while(1){if((g|0)>=(e|0)){i=21;break}d=yb()|0;j=g+1|0;k=b+(((((yb()|0)<<16|d)>>>0)%((f-g|0)>>>0)|0)+g<<2)|0;d=c[k>>2]|0;l=b+(g<<2)|0;c[k>>2]=c[l>>2];c[l>>2]=d;m=+h[a+(d<<3)>>3];if((j|0)<(e|0)){k=e;n=j;while(1){a:do{if((n|0)<(k|0)){o=n;while(1){p=o+1|0;if(+h[a+(c[b+(o<<2)>>2]<<3)>>3]>m){q=o;break a}if((p|0)<(k|0)){o=p}else{q=p;break}}}else{q=n}}while(0);b:do{if((q|0)<(k|0)){o=k;while(1){r=b+(o<<2)|0;s=c[r>>2]|0;t=o-1|0;if(+h[a+(s<<3)>>3]<=m){break}if((q|0)<(t|0)){o=t}else{u=q;v=t;break b}}o=b+(q<<2)|0;p=c[o>>2]|0;c[o>>2]=s;c[r>>2]=p;u=q+1|0;v=t}else{u=q;v=k}}while(0);if((u|0)<(v|0)){k=v;n=u}else{w=u;break}}}else{w=j}n=((+h[a+(c[b+(w<<2)>>2]<<3)>>3]>m)<<31>>31)+w|0;k=b+(n<<2)|0;c[l>>2]=c[k>>2];c[k>>2]=d;k=n-1|0;Gs(a,b,g,k);p=n+1|0;Gs(a,b,p,e);do{if((k|0)>(g|0)){n=1;o=g;x=+h[a+(c[l>>2]<<3)>>3];while(1){y=o+1|0;z=+h[a+(c[b+(y<<2)>>2]<<3)>>3];A=x>z?0:n;B=(A|0)==0;if((y|0)>=(k|0)|B){break}else{n=A;o=y;x=z}}if(!B){break}Gs(a,b,g,k)}}while(0);if((p|0)>=(e|0)){i=21;break}k=1;l=p;m=+h[a+(c[b+(p<<2)>>2]<<3)>>3];while(1){d=l+1|0;x=+h[a+(c[b+(d<<2)>>2]<<3)>>3];j=m>x?0:k;C=(j|0)==0;if((d|0)>=(e|0)|C){break}else{k=j;l=d;m=x}}if(C){g=p}else{i=21;break}}if((i|0)==21){return}}function Hs(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,na=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0.0,Ba=0,Ca=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0.0,Pa=0,Qa=0.0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0.0,Xa=0.0,Ya=0.0,Za=0.0,_a=0.0,$a=0.0,ab=0,bb=0,cb=0,db=0,eb=0.0,fb=0.0,gb=0.0,hb=0,ib=0.0,jb=0,kb=0,lb=0,mb=0,nb=0.0,ob=0.0,pb=0.0,qb=0.0,rb=0,sb=0,tb=0.0,ub=0.0,vb=0.0,wb=0,xb=0.0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0.0,Eb=0.0,Fb=0,Gb=0.0,Hb=0.0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0.0,Nb=0.0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0.0,Ub=0.0,Vb=0,Wb=0.0,Xb=0.0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0.0,cc=0.0,dc=0,ec=0,fc=0,gc=0,hc=0.0,ic=0.0,jc=0,kc=0.0,lc=0.0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0.0,tc=0.0,uc=0,vc=0.0,wc=0.0,xc=0,yc=0,zc=0,Ac=0.0,Bc=0.0,Cc=0.0,Dc=0.0,Ec=0,Fc=0,Gc=0.0,Hc=0.0,Ic=0.0,Jc=0.0,Kc=0,Lc=0,Mc=0.0,Nc=0.0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0.0,Uc=0.0,Vc=0,Wc=0,Xc=0,Yc=0.0,Zc=0.0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=0,nd=0,od=0,pd=0,qd=0,rd=0,sd=0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0.0,zd=0.0,Ad=0,Bd=0.0,Cd=0.0,Dd=0.0,Ed=0.0,Fd=0.0,Gd=0.0,Hd=0.0,Id=0.0;e=i;i=i+32|0;f=1;g=0;j=i;i=i+168|0;c[j>>2]=0;while(1)switch(f|0){case 1:k=e|0;l=e+16|0;m=e+24|0;n=ma(54,b*40|0|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;p=n;q=(b|0)>0;if(q){r=0;s=0;f=3;break}else{f=2;break};case 2:t=ma(54,0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;w=0;x=t;y=t;f=8;break;case 3:z=(c[(c[a+(s<<2)>>2]|0)+4>>2]|0)+r|0;t=s+1|0;if((t|0)<(b|0)){r=z;s=t;f=3;break}else{f=4;break};case 4:A=ma(54,z*24|0|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;B=A;if(q){C=0;D=0;f=5;break}else{w=z;x=A;y=B;f=8;break};case 5:E=p+(D*40|0)|0;c[E>>2]=B+(C*24|0);F=a+(D<<2)|0;t=c[F>>2]|0;if((c[t+4>>2]|0)>0){G=C;H=0;I=-1.7976931348623157e+308;J=-1.7976931348623157e+308;K=1.7976931348623157e+308;L=1.7976931348623157e+308;M=t;f=6;break}else{N=C;O=-1.7976931348623157e+308;P=-1.7976931348623157e+308;Q=1.7976931348623157e+308;R=1.7976931348623157e+308;f=7;break};case 6:t=c[M>>2]|0;S=+h[t+(H<<4)>>3];T=+h[t+(H<<4)+8>>3];U=L<S?L:S;V=K<T?K:T;W=J>S?J:S;X=I>T?I:T;h[B+(G*24|0)>>3]=S;h[B+(G*24|0)+8>>3]=T;c[B+(G*24|0)+16>>2]=E;c[B+(G*24|0)+20>>2]=0;t=G+1|0;Y=H+1|0;Z=c[F>>2]|0;if((Y|0)<(c[Z+4>>2]|0)){G=t;H=Y;I=X;J=W;K=V;L=U;M=Z;f=6;break}else{N=t;O=X;P=W;Q=V;R=U;f=7;break};case 7:c[p+(D*40|0)+4>>2]=B+((N-1|0)*24|0);h[p+(D*40|0)+8>>3]=R;h[p+(D*40|0)+16>>3]=Q;h[p+(D*40|0)+24>>3]=P;h[p+(D*40|0)+32>>3]=O;t=D+1|0;if((t|0)<(b|0)){C=N;D=t;f=5;break}else{w=z;x=A;y=B;f=8;break};case 8:_=BF(178232,f,j)|0;f=209;break;case 209:if((_|0)==0){f=10;break}else{f=9;break};case 9:ka(150,n|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;ka(150,x|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;$=0;f=208;break;case 10:aa=ma(54,w<<2|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;ba=aa;if((w|0)>0){ca=0;f=11;break}else{f=189;break};case 11:c[ba+(ca<<2)>>2]=y+(ca*24|0);t=ca+1|0;if((t|0)<(w|0)){ca=t;f=11;break}else{f=12;break};case 12:Da(40,aa|0,w|0,4,34);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;ea=0;fa=0;ga=0;ha=0;f=13;break;case 13:ia=ba+(ha<<2)|0;ja=c[ia>>2]|0;na=c[ja+16>>2]|0;if((ja|0)==(c[na>>2]|0)){f=14;break}else{f=15;break};case 14:qa=c[na+4>>2]|0;f=16;break;case 15:qa=ja-24|0;f=16;break;case 16:ra=ja|0;sa=ja+8|0;ta=qa;ua=1;va=ea;xa=fa;ya=ga;za=qa;f=17;break;case 17:U=+h[ra>>3]- +h[ta>>3];if(U!=0.0){Aa=U;f=19;break}else{f=18;break};case 18:U=+h[sa>>3]- +h[ta+8>>3];if(U==0.0){Ba=ya;Ca=xa;Ea=va;f=181;break}else{Aa=U;f=19;break};case 19:if(Aa>0.0){f=172;break}else{f=20;break};case 20:if((va|0)>0){f=21;break}else{f=168;break};case 21:Fa=za|0;Ga=za+8|0;Ha=za+16|0;Ia=za+24|0;Ja=za+24|0;Ka=0;La=ya;f=22;break;case 22:Ma=c[La>>2]|0;Na=Ma|0;Oa=+h[Na>>3];Pa=Ma+8|0;Qa=+h[Pa>>3];Ra=Ma+16|0;Sa=c[Ra>>2]|0;Ta=(c[Sa+4>>2]|0)==(Ma|0);if(Ta){f=23;break}else{f=24;break};case 23:t=c[Sa>>2]|0;Ua=t;Va=t|0;f=25;break;case 24:Ua=Ma+24|0;Va=Ma+24|0;f=25;break;case 25:Wa=+h[Va>>3]-Oa;Xa=+h[Ua+8>>3]-Qa;Ya=+h[Fa>>3];Za=Ya-Oa;_a=+h[Ga>>3];$a=_a-Qa;ab=c[Ha>>2]|0;bb=(c[ab+4>>2]|0)==(za|0);if(bb){f=26;break}else{cb=Ia;db=Ja;f=27;break};case 26:t=c[ab>>2]|0;cb=t;db=t|0;f=27;break;case 27:eb=+h[db>>3]-Oa;fb=+h[cb+8>>3]-Qa;gb=Wa*$a-Xa*Za;if(gb==0.0){hb=0;f=29;break}else{f=28;break};case 28:hb=gb>0.0?1:-1;f=29;break;case 29:ib=Wa*fb-Xa*eb;if(ib==0.0){jb=0;f=31;break}else{f=30;break};case 30:jb=ib>0.0?1:-1;f=31;break;case 31:kb=da(jb,hb)|0;if((kb|0)>0){f=167;break}else{f=32;break};case 32:if((kb|0)<0){f=33;break}else{f=63;break};case 33:if(bb){f=34;break}else{lb=Ia;mb=Ja;f=35;break};case 34:t=c[ab>>2]|0;lb=t;mb=t|0;f=35;break;case 35:nb=+h[mb>>3]-Ya;ob=+h[lb+8>>3]-_a;pb=Oa-Ya;qb=Qa-_a;if(Ta){f=36;break}else{f=37;break};case 36:t=c[Sa>>2]|0;rb=t;sb=t|0;f=38;break;case 37:rb=Ma+24|0;sb=Ma+24|0;f=38;break;case 38:tb=+h[sb>>3]-Ya;ub=+h[rb+8>>3]-_a;vb=qb*nb-pb*ob;if(vb==0.0){wb=0;f=40;break}else{f=39;break};case 39:wb=vb>0.0?1:-1;f=40;break;case 40:xb=nb*ub-ob*tb;if(xb==0.0){yb=0;f=42;break}else{f=41;break};case 41:yb=xb>0.0?1:-1;f=42;break;case 42:zb=da(yb,wb)|0;if((zb|0)>0){f=167;break}else{f=43;break};case 43:if((zb|0)<0){Ab=3;f=62;break}else{f=44;break};case 44:Bb=(wb|0)>-1?wb:-wb|0;if(bb){f=45;break}else{Cb=Ia;f=46;break};case 45:Cb=c[ab>>2]|0;f=46;break;case 46:Db=+h[Cb>>3];Eb=+h[Cb+8>>3];if((Bb|0)==0){Fb=Ma;f=50;break}else{f=47;break};case 47:if(Ta){f=48;break}else{f=49;break};case 48:Fb=c[Sa>>2]|0;f=50;break;case 49:Fb=Ma+24|0;f=50;break;case 50:Gb=+h[Fb>>3];Hb=+h[Fb+8>>3];Ib=Ya==Gb;if(Ya==Db){f=51;break}else{f=57;break};case 51:if(Ib){f=52;break}else{Ab=0;f=62;break};case 52:if(_a==Hb|Hb==Eb){Jb=1;f=56;break}else{f=53;break};case 53:if(_a<Hb){f=54;break}else{f=55;break};case 54:Jb=Hb<Eb;f=56;break;case 55:Jb=Eb<Hb;f=56;break;case 56:Ab=Jb&1;f=62;break;case 57:if(Ib|Gb==Db){Ab=0;f=62;break}else{f=58;break};case 58:if(Ya<Gb){f=59;break}else{f=60;break};case 59:Kb=Gb<Db;f=61;break;case 60:Kb=Db<Gb;f=61;break;case 61:Ab=Kb?1:-1;f=62;break;case 62:t=oa(4,Ma|0,za|0,l|0,m|0,Ab|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;if((t|0)==0){f=167;break}else{f=148;break};case 63:if((hb|0)==(jb|0)){f=64;break}else{f=130;break};case 64:if(Ta){f=65;break}else{f=66;break};case 65:Lb=c[Sa>>2]|0;f=67;break;case 66:Lb=Ma+24|0;f=67;break;case 67:Mb=+h[Lb>>3];Nb=+h[Lb+8>>3];Ob=Oa==Ya;if(Oa==Mb){f=68;break}else{f=74;break};case 68:if(Ob){f=69;break}else{Pb=0;f=79;break};case 69:if(Qa==_a|_a==Nb){Qb=1;f=73;break}else{f=70;break};case 70:if(Qa<_a){f=71;break}else{f=72;break};case 71:Qb=_a<Nb;f=73;break;case 72:Qb=Nb<_a;f=73;break;case 73:Pb=Qb&1;f=79;break;case 74:if(Ob|Ya==Mb){Pb=0;f=79;break}else{f=75;break};case 75:if(Oa<Ya){f=76;break}else{f=77;break};case 76:Rb=Ya<Mb;f=78;break;case 77:Rb=Mb<Ya;f=78;break;case 78:Pb=Rb?1:-1;f=79;break;case 79:if(Ta){f=80;break}else{f=81;break};case 80:Sb=c[Sa>>2]|0;f=82;break;case 81:Sb=Ma+24|0;f=82;break;case 82:Tb=+h[Sb>>3];Ub=+h[Sb+8>>3];if(bb){f=83;break}else{Vb=Ia;f=84;break};case 83:Vb=c[ab>>2]|0;f=84;break;case 84:Wb=+h[Vb>>3];Xb=+h[Vb+8>>3];Yb=Oa==Wb;if(Oa==Tb){f=85;break}else{f=91;break};case 85:if(Yb){f=86;break}else{Zb=0;f=96;break};case 86:if(Qa==Xb|Xb==Ub){_b=1;f=90;break}else{f=87;break};case 87:if(Qa<Xb){f=88;break}else{f=89;break};case 88:_b=Xb<Ub;f=90;break;case 89:_b=Ub<Xb;f=90;break;case 90:Zb=_b&1;f=96;break;case 91:if(Yb|Wb==Tb){Zb=0;f=96;break}else{f=92;break};case 92:if(Oa<Wb){f=93;break}else{f=94;break};case 93:$b=Wb<Tb;f=95;break;case 94:$b=Tb<Wb;f=95;break;case 95:Zb=$b?1:-1;f=96;break;case 96:if((Pb|0)>(Zb|0)){f=97;break}else{f=112;break};case 97:if(Ta){f=98;break}else{f=99;break};case 98:ac=c[Sa>>2]|0;f=100;break;case 99:ac=Ma+24|0;f=100;break;case 100:bc=+h[ac>>3];cc=+h[ac+8>>3];if(Oa==bc){f=101;break}else{f=107;break};case 101:if(Ob){f=102;break}else{dc=0;f=129;break};case 102:if(Qa==_a|_a==cc){ec=1;f=106;break}else{f=103;break};case 103:if(Qa<_a){f=104;break}else{f=105;break};case 104:ec=_a<cc;f=106;break;case 105:ec=cc<_a;f=106;break;case 106:dc=ec&1;f=129;break;case 107:if(Ob|Ya==bc){dc=0;f=129;break}else{f=108;break};case 108:if(Oa<Ya){f=109;break}else{f=110;break};case 109:fc=Ya<bc;f=111;break;case 110:fc=bc<Ya;f=111;break;case 111:dc=fc?1:-1;f=129;break;case 112:if(Ta){f=113;break}else{f=114;break};case 113:gc=c[Sa>>2]|0;f=115;break;case 114:gc=Ma+24|0;f=115;break;case 115:hc=+h[gc>>3];ic=+h[gc+8>>3];if(bb){f=116;break}else{jc=Ia;f=117;break};case 116:jc=c[ab>>2]|0;f=117;break;case 117:kc=+h[jc>>3];lc=+h[jc+8>>3];mc=Oa==kc;if(Oa==hc){f=118;break}else{f=124;break};case 118:if(mc){f=119;break}else{dc=0;f=129;break};case 119:if(Qa==lc|lc==ic){nc=1;f=123;break}else{f=120;break};case 120:if(Qa<lc){f=121;break}else{f=122;break};case 121:nc=lc<ic;f=123;break;case 122:nc=ic<lc;f=123;break;case 123:dc=nc&1;f=129;break;case 124:if(mc|kc==hc){dc=0;f=129;break}else{f=125;break};case 125:if(Oa<kc){f=126;break}else{f=127;break};case 126:oc=kc<hc;f=128;break;case 127:oc=hc<kc;f=128;break;case 128:dc=oc?1:-1;f=129;break;case 129:pc=dc<<1;f=147;break;case 130:qc=(hb|0)>-1?hb:-hb|0;if(Ta){f=131;break}else{f=132;break};case 131:rc=c[Sa>>2]|0;f=133;break;case 132:rc=Ma+24|0;f=133;break;case 133:sc=+h[rc>>3];tc=+h[rc+8>>3];t=(qc|0)==0;if(t|bb^1){uc=t?za:Ia;f=135;break}else{f=134;break};case 134:uc=c[ab>>2]|0;f=135;break;case 135:vc=+h[uc>>3];wc=+h[uc+8>>3];xc=Oa==vc;if(Oa==sc){f=136;break}else{f=142;break};case 136:if(xc){f=137;break}else{pc=0;f=147;break};case 137:if(Qa==wc|wc==tc){yc=1;f=141;break}else{f=138;break};case 138:if(Qa<wc){f=139;break}else{f=140;break};case 139:yc=wc<tc;f=141;break;case 140:yc=tc<wc;f=141;break;case 141:pc=yc&1;f=147;break;case 142:if(xc|vc==sc){pc=0;f=147;break}else{f=143;break};case 143:if(Oa<vc){f=144;break}else{f=145;break};case 144:zc=vc<sc;f=146;break;case 145:zc=sc<vc;f=146;break;case 146:pc=zc?1:-1;f=147;break;case 147:t=oa(4,Ma|0,za|0,l|0,m|0,pc|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;if((t|0)==0){f=167;break}else{f=148;break};case 148:Ac=+h[l>>3];Bc=+h[m>>3];Cc=+h[Na>>3];Dc=+h[Pa>>3];Ec=c[Ra>>2]|0;if((c[Ec+4>>2]|0)==(Ma|0)){f=149;break}else{f=150;break};case 149:Fc=c[Ec>>2]|0;f=151;break;case 150:Fc=Ma+24|0;f=151;break;case 151:Gc=+h[Fc>>3];Hc=+h[Fc+8>>3];Ic=+h[Fa>>3];Jc=+h[Ga>>3];Kc=c[Ha>>2]|0;if((c[Kc+4>>2]|0)==(za|0)){f=152;break}else{Lc=Ia;f=153;break};case 152:Lc=c[Kc>>2]|0;f=153;break;case 153:Mc=+h[Lc>>3];Nc=+h[Lc+8>>3];if(Cc!=Gc&Ic!=Mc){f=160;break}else{f=154;break};case 154:if(Cc==Gc){f=155;break}else{f=157;break};case 155:if(Cc==Ac&Dc==Bc){f=157;break}else{f=156;break};case 156:if(Gc==Ac&Hc==Bc){f=157;break}else{f=160;break};case 157:if(Ic==Mc){f=158;break}else{f=167;break};case 158:if(Ic==Ac&Jc==Bc){f=167;break}else{f=159;break};case 159:if(Mc==Ac&Nc==Bc){f=167;break}else{f=160;break};case 160:if((d[213992]|0)>>>0>1>>>0){f=161;break}else{Oc=ya;Pc=va;Qc=1;f=187;break};case 161:Rc=c[o>>2]|0;pa(30,Rc|0,163936,(Sc=i,i=i+16|0,h[Sc>>3]=Ac,h[Sc+8>>3]=Bc,Sc)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=Sc;Tc=+h[Na>>3];Uc=+h[Pa>>3];Vc=c[Ra>>2]|0;if((c[Vc+4>>2]|0)==(Ma|0)){f=162;break}else{f=163;break};case 162:t=c[Vc>>2]|0;Wc=t;Xc=t|0;f=164;break;case 163:Wc=Ma+24|0;Xc=Ma+24|0;f=164;break;case 164:U=+h[Xc>>3];V=+h[Wc+8>>3];pa(30,Rc|0,131784,(Sc=i,i=i+40|0,c[Sc>>2]=1,h[Sc+8>>3]=Tc,h[Sc+16>>3]=Uc,h[Sc+24>>3]=U,h[Sc+32>>3]=V,Sc)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=Sc;Yc=+h[Fa>>3];Zc=+h[Ga>>3];_c=c[Ha>>2]|0;if((c[_c+4>>2]|0)==(za|0)){f=165;break}else{$c=Ia;ad=Ja;f=166;break};case 165:t=c[_c>>2]|0;$c=t;ad=t|0;f=166;break;case 166:V=+h[ad>>3];U=+h[$c+8>>3];pa(30,Rc|0,131784,(Sc=i,i=i+40|0,c[Sc>>2]=2,h[Sc+8>>3]=Yc,h[Sc+16>>3]=Zc,h[Sc+24>>3]=V,h[Sc+32>>3]=U,Sc)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=Sc;Oc=ya;Pc=va;Qc=1;f=187;break;case 167:t=Ka+1|0;if((t|0)<(va|0)){Ka=t;La=c[La+4>>2]|0;f=22;break}else{f=168;break};case 168:bd=ma(54,12)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;cd=bd;if((va|0)==0){f=169;break}else{f=170;break};case 169:c[bd+8>>2]=0;dd=cd;f=171;break;case 170:c[xa+4>>2]=cd;c[bd+8>>2]=xa;dd=ya;f=171;break;case 171:c[bd>>2]=za;c[bd+4>>2]=0;c[za+20>>2]=cd;Ba=dd;Ca=cd;Ea=va+1|0;f=181;break;case 172:ed=za+20|0;fd=c[ed>>2]|0;if((fd|0)==0){f=173;break}else{f=174;break};case 173:pa(16,1,159880,(Sc=i,i=i+1|0,i=i+7&-8,c[Sc>>2]=0,Sc)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;i=Sc;la(40,178232,1);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;return 0;case 174:if((va|0)==1){gd=0;hd=0;f=180;break}else{f=175;break};case 175:if((fd|0)==(ya|0)){f=176;break}else{f=177;break};case 176:t=c[ya+4>>2]|0;c[t+8>>2]=0;gd=t;hd=xa;f=180;break;case 177:if((fd|0)==(xa|0)){f=178;break}else{f=179;break};case 178:t=c[xa+8>>2]|0;c[t+4>>2]=0;gd=ya;hd=t;f=180;break;case 179:t=fd+4|0;Z=fd+8|0;c[(c[Z>>2]|0)+4>>2]=c[t>>2];c[(c[t>>2]|0)+8>>2]=c[Z>>2];gd=ya;hd=xa;f=180;break;case 180:ka(150,fd|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;c[ed>>2]=0;Ba=gd;Ca=hd;Ea=va-1|0;f=181;break;case 181:id=c[ia>>2]|0;jd=c[id+16>>2]|0;if((id|0)==(c[jd+4>>2]|0)){f=182;break}else{f=183;break};case 182:kd=c[jd>>2]|0;f=184;break;case 183:kd=id+24|0;f=184;break;case 184:if((ua|0)<2){f=185;break}else{f=186;break};case 185:ta=kd;ua=ua+1|0;va=Ea;xa=Ca;ya=Ba;za=id;f=17;break;case 186:Z=ha+1|0;if((Z|0)<(w|0)){ea=Ea;fa=Ca;ga=Ba;ha=Z;f=13;break}else{Oc=Ba;Pc=Ea;Qc=0;f=187;break};case 187:if((Pc|0)>0){ld=0;md=Oc;f=188;break}else{f=190;break};case 188:Z=c[md+4>>2]|0;ka(150,md|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;t=ld+1|0;if((t|0)<(Pc|0)){ld=t;md=Z;f=188;break}else{f=190;break};case 189:Da(40,aa|0,w|0,4,34);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;ka(150,aa|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;f=191;break;case 190:ka(150,aa|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;if((Qc|0)==0){f=191;break}else{nd=Qc;f=207;break};case 191:od=k;if(q){pd=0;f=192;break}else{nd=0;f=207;break};case 192:qd=c[a+(pd<<2)>>2]|0;Z=c[qd>>2]|0;c[od>>2]=c[Z>>2];c[od+4>>2]=c[Z+4>>2];c[od+8>>2]=c[Z+8>>2];c[od+12>>2]=c[Z+12>>2];rd=pd+1|0;if((rd|0)<(b|0)){f=193;break}else{nd=0;f=207;break};case 193:sd=p+(pd*40|0)+8|0;td=p+(pd*40|0)+24|0;ud=p+(pd*40|0)+32|0;vd=p+(pd*40|0)+16|0;wd=rd;f=194;break;case 194:xd=c[a+(wd<<2)>>2]|0;yd=+h[sd>>3];zd=+h[p+(wd*40|0)+24>>3];Ad=yd>zd;Bd=+h[p+(wd*40|0)+8>>3];if(Ad|yd<Bd){f=200;break}else{f=195;break};case 195:Cd=+h[vd>>3];Dd=+h[p+(wd*40|0)+32>>3];if(Cd>Dd){f=200;break}else{f=196;break};case 196:Ed=+h[p+(wd*40|0)+16>>3];if(Cd<Ed){f=200;break}else{f=197;break};case 197:U=+h[td>>3];if(U>zd|U<Bd){f=200;break}else{f=198;break};case 198:U=+h[ud>>3];if(U>Dd|U<Ed){f=200;break}else{f=199;break};case 199:Z=wa(200,xd|0,k|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;if((Z|0)==0){f=206;break}else{nd=1;f=207;break};case 200:Fd=+h[td>>3];if(Bd>Fd|Bd<yd){f=206;break}else{f=201;break};case 201:Gd=+h[p+(wd*40|0)+16>>3];Hd=+h[ud>>3];if(Gd>Hd){f=206;break}else{f=202;break};case 202:Id=+h[vd>>3];if(Gd<Id){f=206;break}else{f=203;break};case 203:if(zd>Fd|Ad){f=206;break}else{f=204;break};case 204:U=+h[p+(wd*40|0)+32>>3];if(U>Hd|U<Id){f=206;break}else{f=205;break};case 205:Z=wa(200,qd|0,c[xd>>2]|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;if((Z|0)==0){f=206;break}else{nd=1;f=207;break};case 206:Z=wd+1|0;if((Z|0)<(b|0)){wd=Z;f=194;break}else{pd=rd;f=192;break};case 207:ka(150,n|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;ka(150,x|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,j)|0;if((g|0)>0){f=-1;break}else return 0}u=v=0;$=(nd|0)==0|0;f=208;break;case 208:i=e;return $|0;case-1:if((g|0)==8){_=v;f=209}u=v=0;break}return 0}function Is(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0;d=c[a>>2]|0;a=c[b>>2]|0;e=+h[d>>3]- +h[a>>3];if(e!=0.0){f=e>0.0?1:-1;return f|0}e=+h[d+8>>3]- +h[a+8>>3];if(e==0.0){f=0;return f|0}f=e>0.0?1:-1;return f|0}function Js(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0.0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;if((f|0)<1){g=0;return g|0}i=+h[a>>3];j=+h[a+8>>3];k=c[a+16>>2]|0;l=(c[k+4>>2]|0)==(a|0);if(l){m=c[k>>2]|0}else{m=a+24|0}n=+h[m>>3];o=+h[m+8>>3];p=+h[b>>3];q=+h[b+8>>3];m=c[b+16>>2]|0;r=(c[m+4>>2]|0)==(b|0);if(r){s=c[m>>2]|0}else{s=b+24|0}t=+h[s>>3];u=+h[s+8>>3];if((f|0)==3){if(i==n){h[d>>3]=i;h[e>>3]=u+(i-t)*((q-u)/(p-t));g=1;return g|0}if(p==t){h[d>>3]=p;h[e>>3]=o+(p-n)*((j-o)/(i-n));g=1;return g|0}else{v=(q-u)/(p-t);w=(j-o)/(i-n);x=q-p*v;y=j-i*w;z=v-w;h[d>>3]=(y-x)/z;h[e>>3]=(v*y-w*x)/z;g=1;return g|0}}else if((f|0)==1){if((i-n)*(q-j)==(j-o)*(p-i)){h[d>>3]=p;h[e>>3]=q;g=1;return g|0}else{h[d>>3]=t;h[e>>3]=u;g=1;return g|0}}else if((f|0)==2){if(l){A=c[k>>2]|0}else{A=a+24|0}z=+h[A>>3];A=i==p;do{if(i==z){B=42}else{if(A|p==z){B=42;break}if(i<p){if(p<z){B=42;break}}else{if(z<p){B=42;break}}if(r){C=c[m>>2]|0}else{C=b+24|0}x=+h[C>>3];if(l){D=c[k>>2]|0}else{D=a+24|0}w=+h[D>>3];if(p==x){E=q;F=p;G=u;H=t;break}if(p==w|w==x){E=q;F=p;G=u;H=t;break}if(p<w){if(w<x){E=q;F=p;G=u;H=t;break}}else{if(x<w){E=q;F=p;G=u;H=t;break}}if(r){I=c[m>>2]|0}else{I=b+24|0}w=+h[I>>3];if(p==w|i==w){J=0}else{if(p<i){K=i<w}else{K=w<i}J=K^1}E=q;F=p;G=J?o:j;H=J?n:i}}while(0);a:do{if((B|0)==42){if(l){L=c[k>>2]|0}else{L=a+24|0}z=+h[L>>3];if(r){M=c[m>>2]|0}else{M=b+24|0}w=+h[M>>3];do{if(i!=z){if(i==w|w==z){break}if(i<w){if(w<z){break}}else{if(z<w){break}}if(l){N=c[k>>2]|0}else{N=a+24|0}x=+h[N>>3];if(i==x){E=u;F=t;G=q;H=p;break a}if(A|p==x){E=u;F=t;G=q;H=p;break a}if(i<p){if(p<x){E=u;F=t;G=q;H=p;break a}}else{if(x<p){E=u;F=t;G=q;H=p;break a}}if(r){O=c[m>>2]|0}else{O=b+24|0}x=+h[O>>3];if(p==x|i==x){P=0}else{if(p<i){Q=i<x}else{Q=x<i}P=Q^1}E=u;F=t;G=P?o:j;H=P?n:i;break a}}while(0);if(r){R=c[m>>2]|0}else{R=b+24|0}w=+h[R>>3];if(p==w){g=0;return g|0}if(A|i==w){g=0;return g|0}if(p<i){if(i<w){g=0}else{E=j;F=i;G=o;H=n;break}return g|0}else{if(w<i){g=0}else{E=j;F=i;G=o;H=n;break}return g|0}}}while(0);h[d>>3]=(H+F)*.5;h[e>>3]=(G+E)*.5;g=1;return g|0}else{g=1;return g|0}return 0}function Ks(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0;d=c[44390]|0;if((d|0)!=0){qu(d)}c[44390]=pu(b,b,0.0)|0;d=c[43812]|0;if((d|0)!=0){eF(d)}c[43812]=jk(b<<2)|0;d=c[43772]|0;if((d|0)!=0){eF(d)}c[43772]=jk(b<<3)|0;a:do{if((b|0)>0){d=0;while(1){e=a+(d<<2)|0;f=c[44390]|0;g=0;i=0.0;do{j=+h[(c[e>>2]|0)+(g<<3)>>3];h[(c[f+(d<<2)>>2]|0)+(g<<3)>>3]=j;k=+S(+j);i=i<k?k:i;g=g+1|0;}while((g|0)<(b|0));if(i==0.0){break}h[(c[43772]|0)+(d<<3)>>3]=1.0/i;c[(c[43812]|0)+(d<<2)>>2]=d;g=d+1|0;if((g|0)<(b|0)){d=g}else{break a}}h[(c[43772]|0)+(d<<3)>>3]=0.0;l=0;return l|0}}while(0);a=b-1|0;b:do{if((a|0)>0){g=0;f=0;while(1){if((g|0)>=(b|0)){l=0;m=27;break}e=c[43812]|0;n=c[44390]|0;o=c[43772]|0;p=f;q=g;k=0.0;do{r=c[e+(q<<2)>>2]|0;j=+S(+(+h[(c[n+(r<<2)>>2]|0)+(g<<3)>>3]));s=j*+h[o+(r<<3)>>3];r=k<s;p=r?q:p;k=r?s:k;q=q+1|0;}while((q|0)<(b|0));if(k==0.0){l=0;m=27;break}if((p|0)!=(g|0)){q=c[43812]|0;o=q+(g<<2)|0;n=c[o>>2]|0;c[o>>2]=c[q+(p<<2)>>2];c[(c[43812]|0)+(p<<2)>>2]=n}n=c[43812]|0;q=n+(g<<2)|0;o=c[44390]|0;i=+h[(c[o+(c[q>>2]<<2)>>2]|0)+(g<<3)>>3];e=g+1|0;if((e|0)<(b|0)){r=e;do{t=n+(r<<2)|0;u=(c[o+(c[t>>2]<<2)>>2]|0)+(g<<3)|0;s=+h[u>>3]/i;h[u>>3]=s;if(s!=0.0){u=e;do{v=(c[o+(c[t>>2]<<2)>>2]|0)+(u<<3)|0;h[v>>3]=+h[v>>3]-s*+h[(c[o+(c[q>>2]<<2)>>2]|0)+(u<<3)>>3];u=u+1|0;}while((u|0)<(b|0))}r=r+1|0;}while((r|0)<(b|0))}if((e|0)<(a|0)){g=e;f=p}else{w=n;x=o;break b}}if((m|0)==27){return l|0}}else{w=c[43812]|0;x=c[44390]|0}}while(0);l=+h[(c[x+(c[w+(a<<2)>>2]<<2)>>2]|0)+(a<<3)>>3]!=0.0|0;return l|0}function Ls(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0,o=0.0,p=0,q=0.0;e=(d|0)>0;if(!e){return}f=c[43812]|0;g=0;do{i=c[f+(g<<2)>>2]|0;if((g|0)>0){j=c[(c[44390]|0)+(i<<2)>>2]|0;k=0;l=0.0;while(1){m=l+ +h[j+(k<<3)>>3]*+h[a+(k<<3)>>3];n=k+1|0;if((n|0)<(g|0)){k=n;l=m}else{o=m;break}}}else{o=0.0}h[a+(g<<3)>>3]=+h[b+(i<<3)>>3]-o;g=g+1|0;}while((g|0)<(d|0));if(e){p=d}else{return}while(1){e=p-1|0;g=c[(c[44390]|0)+(c[(c[43812]|0)+(e<<2)>>2]<<2)>>2]|0;if((p|0)<(d|0)){b=p;o=0.0;while(1){l=o+ +h[g+(b<<3)>>3]*+h[a+(b<<3)>>3];f=b+1|0;if((f|0)<(d|0)){b=f;o=l}else{q=l;break}}}else{q=0.0}b=a+(e<<3)|0;h[b>>3]=(+h[b>>3]-q)/+h[g+(e<<3)>>3];if((e|0)>0){p=e}else{break}}return}function Ms(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0.0;if((Ks(a,d)|0)==0){e=0;return e|0}a=jk(d<<3)|0;f=a;g=(d|0)>0;if(!g){eF(a);e=1;return e|0}i=d<<3;j=0;do{vF(a|0,0,i|0)|0;h[f+(j<<3)>>3]=1.0;Ls(c[b+(j<<2)>>2]|0,f,d);j=j+1|0;}while((j|0)<(d|0));eF(a);if(g){k=0}else{e=1;return e|0}while(1){if((k|0)>0){g=b+(k<<2)|0;a=0;do{j=(c[g>>2]|0)+(a<<3)|0;l=+h[j>>3];f=b+(a<<2)|0;h[j>>3]=+h[(c[f>>2]|0)+(k<<3)>>3];h[(c[f>>2]|0)+(k<<3)>>3]=l;a=a+1|0;}while((a|0)<(k|0))}a=k+1|0;if((a|0)<(d|0)){k=a}else{e=1;break}}return e|0}function Ns(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0,Q=0,R=0.0,U=0.0,V=0,W=0,X=0.0,Y=0,Z=0,_=0,$=0.0,aa=0,ba=0.0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0.0,ka=0,la=0,ma=0;i=b<<3;j=kk(i)|0;k=j;l=kk(i)|0;i=l;m=b*30|0;n=(d|0)<(b|0)?d:b;a:do{if((n|0)>0){d=(g|0)==0;o=(b|0)>0;p=(b|0)==0;q=0;while(1){r=c[e+(q<<2)>>2]|0;s=(q|0)>0;do{if(!(d|o^1)){t=0;do{h[r+(t<<3)>>3]=+((yb()|0)%100|0|0);t=t+1|0;}while((t|0)<(b|0))}if(s){t=0;do{if(!p){u=c[e+(t<<2)>>2]|0;v=u;w=r;x=b;y=0.0;while(1){z=y+ +h[v>>3]*+h[w>>3];A=x-1|0;if((A|0)==0){B=r;C=u;D=b;break}else{v=v+8|0;w=w+8|0;x=A;y=z}}while(1){h[B>>3]=+h[B>>3]-z*+h[C>>3];x=D-1|0;if((x|0)==0){break}else{B=B+8|0;C=C+8|0;D=x}}}t=t+1|0;}while((t|0)<(q|0))}if(p){E=0.0}else{t=r;x=b;y=0.0;while(1){F=+h[t>>3];G=y+F*F;w=x-1|0;if((w|0)==0){E=G;break}else{t=t+8|0;x=w;y=G}}}H=+T(E);}while(H<1.0e-10);y=1.0/H;if(p){I=0}else{x=r;t=b;while(1){h[x>>3]=y*+h[x>>3];w=t-1|0;if((w|0)==0){I=0;break}else{x=x+8|0;t=w}}}while(1){J=I+1|0;if(!p){t=i;x=r;w=b;while(1){h[t>>3]=+h[x>>3];v=w-1|0;if((v|0)==0){break}else{t=t+8|0;x=x+8|0;w=v}}if(o){w=0;while(1){x=c[a+(w<<2)>>2]|0;t=0;y=0.0;do{y=y+ +h[x+(t<<3)>>3]*+h[r+(t<<3)>>3];t=t+1|0;}while((t|0)<(b|0));h[k+(w<<3)>>3]=y;t=w+1|0;if((t|0)<(b|0)){w=t}else{K=r;L=k;M=b;break}}}else{K=r;L=k;M=b}while(1){h[K>>3]=+h[L>>3];w=M-1|0;if((w|0)==0){break}else{K=K+8|0;L=L+8|0;M=w}}}if(s){w=0;do{if(!p){t=c[e+(w<<2)>>2]|0;x=t;v=r;u=b;G=0.0;while(1){N=G+ +h[x>>3]*+h[v>>3];A=u-1|0;if((A|0)==0){O=r;P=t;Q=b;break}else{x=x+8|0;v=v+8|0;u=A;G=N}}while(1){h[O>>3]=+h[O>>3]-N*+h[P>>3];u=Q-1|0;if((u|0)==0){break}else{O=O+8|0;P=P+8|0;Q=u}}}w=w+1|0;}while((w|0)<(q|0))}if(p){R=0.0}else{w=r;u=b;G=0.0;while(1){y=+h[w>>3];F=G+y*y;v=u-1|0;if((v|0)==0){R=F;break}else{w=w+8|0;u=v;G=F}}}U=+T(R);if(!(U>=1.0e-10&(I|0)<(m|0))){V=J;W=q;break a}G=1.0/U;if(p){X=0.0}else{u=r;w=b;while(1){h[u>>3]=G*+h[u>>3];v=w-1|0;if((v|0)==0){Y=r;Z=i;_=b;$=0.0;break}else{u=u+8|0;w=v}}while(1){G=$+ +h[Y>>3]*+h[Z>>3];w=_-1|0;if((w|0)==0){X=G;break}else{Y=Y+8|0;Z=Z+8|0;_=w;$=G}}}if(+S(+X)<.999){I=J}else{break}}h[f+(q<<3)>>3]=U*X;r=q+1|0;if((r|0)<(n|0)){q=r}else{V=J;W=r;break}}}else{V=0;W=0}}while(0);if((W|0)<(n|0)){J=(b|0)>0;I=(b|0)==0;_=W;do{W=c[e+(_<<2)>>2]|0;if(J){Z=0;do{h[W+(Z<<3)>>3]=+((yb()|0)%100|0|0);Z=Z+1|0;}while((Z|0)<(b|0))}do{if((_|0)>0){if(I){break}else{aa=0}while(1){Z=c[e+(aa<<2)>>2]|0;Y=Z;i=W;Q=b;X=0.0;while(1){ba=X+ +h[Y>>3]*+h[i>>3];P=Q-1|0;if((P|0)==0){ca=W;da=Z;ea=b;break}else{Y=Y+8|0;i=i+8|0;Q=P;X=ba}}while(1){h[ca>>3]=+h[ca>>3]-ba*+h[da>>3];Q=ea-1|0;if((Q|0)==0){break}else{ca=ca+8|0;da=da+8|0;ea=Q}}Q=aa+1|0;if((Q|0)<(_|0)){aa=Q}else{fa=55;break}}}else{fa=55}}while(0);do{if((fa|0)==55){fa=0;if(I){break}else{ga=W;ha=b;ia=0.0}while(1){X=+h[ga>>3];ja=ia+X*X;Q=ha-1|0;if((Q|0)==0){break}else{ga=ga+8|0;ha=Q;ia=ja}}X=1.0/+T(ja);Q=W;i=b;while(1){h[Q>>3]=X*+h[Q>>3];Y=i-1|0;if((Y|0)==0){break}else{Q=Q+8|0;i=Y}}}}while(0);h[f+(_<<3)>>3]=0.0;_=_+1|0;}while((_|0)<(n|0))}_=n-1|0;if((_|0)<=0){eF(j);eF(l);ka=(V|0)<=(m|0);la=ka&1;return la|0}if((b|0)==0){ha=0;while(1){ga=f+(ha<<3)|0;ja=+h[ga>>3];I=ha+1|0;do{if((I|0)<(n|0)){fa=I;aa=ha;ia=ja;do{ba=+h[f+(fa<<3)>>3];ea=ia<ba;aa=ea?fa:aa;ia=ea?ba:ia;fa=fa+1|0;}while((fa|0)<(n|0));if((aa|0)==(ha|0)){break}h[f+(aa<<3)>>3]=ja;h[ga>>3]=ia}}while(0);if((I|0)<(_|0)){ha=I}else{break}}eF(j);eF(l);ka=(V|0)<=(m|0);la=ka&1;return la|0}else{ma=0}while(1){ha=f+(ma<<3)|0;ga=ma+1|0;do{if((ga|0)<(n|0)){fa=ga;ea=ma;ja=+h[ha>>3];do{ba=+h[f+(fa<<3)>>3];da=ja<ba;ea=da?fa:ea;ja=da?ba:ja;fa=fa+1|0;}while((fa|0)<(n|0));if((ea|0)==(ma|0)){break}fa=e+(ma<<2)|0;aa=k;da=c[fa>>2]|0;ca=b;while(1){h[aa>>3]=+h[da>>3];J=ca-1|0;if((J|0)==0){break}else{aa=aa+8|0;da=da+8|0;ca=J}}ca=e+(ea<<2)|0;da=c[fa>>2]|0;aa=c[ca>>2]|0;J=b;while(1){h[da>>3]=+h[aa>>3];W=J-1|0;if((W|0)==0){break}else{da=da+8|0;aa=aa+8|0;J=W}}J=c[ca>>2]|0;aa=k;da=b;while(1){h[J>>3]=+h[aa>>3];fa=da-1|0;if((fa|0)==0){break}else{J=J+8|0;aa=aa+8|0;da=fa}}h[f+(ea<<3)>>3]=+h[ha>>3];h[ha>>3]=ja}}while(0);if((ga|0)<(_|0)){ma=ga}else{break}}eF(j);eF(l);ka=(V|0)<=(m|0);la=ka&1;return la|0}function Os(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0;if((b|0)<=0){return}if((d|0)>0){g=0}else{vF(f|0,0,b<<3|0)|0;return}do{i=c[a+(g<<2)>>2]|0;j=0;k=0.0;do{k=k+ +h[i+(j<<3)>>3]*+h[e+(j<<3)>>3];j=j+1|0;}while((j|0)<(d|0));h[f+(g<<3)>>3]=k;g=g+1|0;}while((g|0)<(b|0));return}function Ps(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0.0;j=c[i>>2]|0;if((j|0)==0){k=d<<2;l=dF(da(k,f)|0)|0;m=l;n=dF(k)|0}else{k=d<<2;l=gF(c[j>>2]|0,da(k,f)|0)|0;m=l;n=gF(j,k)|0}k=n;c[i>>2]=k;i=(d|0)>0;if(!i){return}n=0;j=m;while(1){c[k+(n<<2)>>2]=j;m=n+1|0;if((m|0)<(d|0)){n=m;j=j+(f<<2)|0}else{break}}if(!i){return}i=(f|0)>0;j=(e|0)>0;n=0;do{if(i){m=k+(n<<2)|0;l=a+(n<<2)|0;o=0;do{if(j){p=c[l>>2]|0;q=0.0;r=0;do{q=q+ +h[p+(r<<3)>>3]*+g[(c[b+(r<<2)>>2]|0)+(o<<2)>>2];r=r+1|0;}while((r|0)<(e|0));s=q}else{s=0.0}g[(c[m>>2]|0)+(o<<2)>>2]=s;o=o+1|0;}while((o|0)<(f|0))}n=n+1|0;}while((n|0)<(d|0));return}function Qs(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0.0;j=c[i>>2]|0;if((j|0)==0){k=dF(da(d<<3,f)|0)|0;l=k;m=dF(d<<2)|0}else{k=gF(c[j>>2]|0,da(d<<3,f)|0)|0;l=k;m=gF(j,d<<2)|0}j=m;c[i>>2]=j;i=(d|0)>0;if(!i){return}m=l;l=0;while(1){c[j+(l<<2)>>2]=m;k=l+1|0;if((k|0)<(d|0)){m=m+(f<<3)|0;l=k}else{break}}if(!i){return}i=(f|0)>0;l=(e|0)>0;m=0;do{if(i){k=j+(m<<2)|0;n=a+(m<<2)|0;o=0;do{if(l){p=c[n>>2]|0;q=0;r=0.0;while(1){s=r+ +h[p+(q<<3)>>3]*+g[(c[b+(q<<2)>>2]|0)+(o<<2)>>2];t=q+1|0;if((t|0)<(e|0)){q=t;r=s}else{u=s;break}}}else{u=0.0}h[(c[k>>2]|0)+(o<<3)>>3]=u;o=o+1|0;}while((o|0)<(f|0))}m=m+1|0;}while((m|0)<(d|0));return}function Rs(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0;i=c[f>>2]|0;if((i|0)==0){j=dF(da(d<<4,e)|0)|0;k=j;l=dF(d<<2)|0}else{j=gF(c[i>>2]|0,da(d<<4,e)|0)|0;k=j;l=gF(i,d<<2)|0}i=l;c[f>>2]=i;f=(d|0)>0;if(!f){return}l=0;j=k;while(1){c[i+(l<<2)>>2]=j;k=l+1|0;if((k|0)<(d|0)){l=k;j=j+(e<<2)|0}else{break}}if(!f){return}f=(e|0)>0;j=0;do{l=c[a+(j<<4)+4>>2]|0;k=c[a+(j<<4)+8>>2]|0;m=c[a+(j<<4)>>2]|0;if(f){n=(m|0)>0;o=i+(j<<2)|0;p=0;do{if(n){q=c[b+(p<<2)>>2]|0;r=0;s=0.0;do{s=s+ +g[k+(r<<2)>>2]*+h[q+(c[l+(r<<2)>>2]<<3)>>3];r=r+1|0;}while((r|0)<(m|0));t=s}else{t=0.0}g[(c[o>>2]|0)+(p<<2)>>2]=t;p=p+1|0;}while((p|0)<(e|0))}j=j+1|0;}while((j|0)<(d|0));return}function Ss(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,g=0.0,i=0,j=0,k=0;c=(a|0)==0;if(c){return}else{d=a;e=b;f=0.0}while(1){g=f+ +h[e>>3];i=d-1|0;if((i|0)==0){break}else{d=i;e=e+8|0;f=g}}f=g/+(a|0);if(c){return}else{j=a;k=b}while(1){h[k>>3]=+h[k>>3]-f;b=j-1|0;if((b|0)==0){break}else{j=b;k=k+8|0}}return}function Ts(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,i=0,j=0,k=0.0;if((b|0)>0){f=0}else{return}do{i=c[a+(f<<2)>>2]|0;j=0;k=0.0;do{k=k+ +g[i+(j<<2)>>2]*+h[d+(j<<3)>>3];j=j+1|0;}while((j|0)<(b|0));h[e+(f<<3)>>3]=k;f=f+1|0;}while((f|0)<(b|0));return}function Us(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((a|0)>0){e=0}else{return}do{h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]- +h[c+(e<<3)>>3];e=e+1|0;}while((e|0)<(a|0));return}function Vs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((a|0)>0){e=0}else{return}do{h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]+ +h[c+(e<<3)>>3];e=e+1|0;}while((e|0)<(a|0));return}function Ws(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0;if((a|0)>0){e=0}else{return}do{h[d+(e<<3)>>3]=+h[b+(e<<3)>>3]*c;e=e+1|0;}while((e|0)<(a|0));return}function Xs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((a|0)>0){d=0}else{return}do{h[c+(d<<3)>>3]=+h[b+(d<<3)>>3];d=d+1|0;}while((d|0)<(a|0));return}function Ys(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,g=0.0,i=0;if((a|0)>0){d=0;e=0.0}else{f=0.0;return+f}while(1){g=e+ +h[b+(d<<3)>>3]*+h[c+(d<<3)>>3];i=d+1|0;if((i|0)<(a|0)){d=i;e=g}else{f=g;break}}return+f}function Zs(a,b){a=a|0;b=b|0;var c=0.0,d=0,e=0.0,f=0.0,g=0.0,i=0;if((a|0)>0){c=-1.0e+50;d=0}else{e=-1.0e+50;return+e}while(1){f=+S(+(+h[b+(d<<3)>>3]));g=f>c?f:c;i=d+1|0;if((i|0)<(a|0)){c=g;d=i}else{e=g;break}}return+e}function _s(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0.0;if((b|0)<=0){return}g=(d|0)>0;i=0;do{if(g){j=0;k=0.0;while(1){l=k+ +h[(c[a+(j<<2)>>2]|0)+(i<<3)>>3]*+h[e+(j<<3)>>3];m=j+1|0;if((m|0)<(d|0)){j=m;k=l}else{n=l;break}}}else{n=0.0}h[f+(i<<3)>>3]=n;i=i+1|0;}while((i|0)<(b|0));return}function $s(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0.0,h=0.0,i=0,j=0,k=0;c=(a|0)==0;if(c){return}else{d=a;e=b;f=0.0}while(1){h=f+ +g[e>>2];i=d-1|0;if((i|0)==0){break}else{d=i;e=e+4|0;f=h}}f=h/+(a|0);if(c){return}else{j=a;k=b}while(1){g[k>>2]=+g[k>>2]-f;b=j-1|0;if((b|0)==0){break}else{j=b;k=k+4|0}}return}function at(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0;if((b|0)<=0){return}vF(d|0,0,b<<2|0)|0;e=0;f=0;h=b;while(1){i=+g[c+(f<<2)>>2];j=i*+g[a+(e<<2)>>2]+0.0;k=f+1|0;l=(k|0)<(b|0);if(l){m=k;n=j;o=e}else{break}do{o=o+1|0;p=+g[a+(o<<2)>>2];n=n+p*+g[c+(m<<2)>>2];q=d+(m<<2)|0;g[q>>2]=i*p+ +g[q>>2];m=m+1|0;}while((m|0)<(b|0));q=d+(f<<2)|0;g[q>>2]=n+ +g[q>>2];if(l){e=e+h|0;f=k;h=h-1|0}else{r=7;break}}if((r|0)==7){return}r=d+(f<<2)|0;g[r>>2]=j+ +g[r>>2];return}function bt(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((a|0)>0){e=0}else{return}do{g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]- +g[c+(e<<2)>>2];e=e+1|0;}while((e|0)<(a|0));return}function ct(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((a|0)>0){e=0}else{return}do{g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]+ +g[c+(e<<2)>>2];e=e+1|0;}while((e|0)<(a|0));return}function dt(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0,f=0;if((a|0)>0){e=0}else{return}do{f=b+(e<<2)|0;g[f>>2]=+g[f>>2]+ +g[d+(e<<2)>>2]*c;e=e+1|0;}while((e|0)<(a|0));return}function et(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;var e=0;if((a|0)>0){e=0}else{return}do{g[d+(e<<2)>>2]=+g[b+(e<<2)>>2]*c;e=e+1|0;}while((e|0)<(a|0));return}function ft(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((a|0)>0){d=0}else{return}do{g[c+(d<<2)>>2]=+g[b+(d<<2)>>2];d=d+1|0;}while((d|0)<(a|0));return}function gt(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0,f=0.0,h=0.0,i=0;if((a|0)>0){d=0;e=0.0}else{f=0.0;return+f}while(1){h=e+ +g[b+(d<<2)>>2]*+g[c+(d<<2)>>2];i=d+1|0;if((i|0)<(a|0)){d=i;e=h}else{f=h;break}}return+f}function ht(a,b,c){a=a|0;b=+b;c=c|0;var d=0;if((a|0)>0){d=0}else{return}do{g[c+(d<<2)>>2]=b;d=d+1|0;}while((d|0)<(a|0));return}function it(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0;if((a|0)>0){c=0;d=-1.0000000150474662e+30}else{e=-1.0000000150474662e+30;return+e}do{f=+S(+(+g[b+(c<<2)>>2]));d=f>d?f:d;c=c+1|0;}while((c|0)<(a|0));e=d;return+e}function jt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;if((a|0)>0){c=0}else{return}do{d=b+(c<<2)|0;e=+g[d>>2];g[d>>2]=e*e;c=c+1|0;}while((c|0)<(a|0));return}function kt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;if((a|0)>0){c=0}else{return}do{d=b+(c<<2)|0;e=+g[d>>2];if(e!=0.0){g[d>>2]=1.0/e}c=c+1|0;}while((c|0)<(a|0));return}function lt(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0.0;if((a|0)>0){d=0}else{return}do{e=+g[b+(d<<2)>>2];if(e>=0.0){g[c+(d<<2)>>2]=+T(e)}d=d+1|0;}while((d|0)<(a|0));return}function mt(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0;if((a|0)>0){c=0}else{return}do{d=b+(c<<2)|0;e=+g[d>>2];if(e>0.0){g[d>>2]=1.0/+T(e)}c=c+1|0;}while((c|0)<(a|0));return}function nt(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c[a>>2]=0;do{if((b&3|0)==0){d=b}else{if((4%(b>>>0)|0|0)==0){d=4;break}a:do{if((b|0)==4){e=4}else{f=b;g=4;while(1){h=g;while(1){i=h-f|0;if((f|0)>=(h|0)){break}if((i|0)==(f|0)){e=f;break a}else{h=i}}i=f-h|0;if((h|0)==(i|0)){e=h;break}else{f=i;g=h}}}}while(0);d=da(4/(e>>>0)|0,b)|0}}while(0);c[a+8>>2]=d;d=a+4|0;a=c[d>>2]|0;if((a|0)==0){c[d>>2]=0;return}else{j=a}while(1){a=c[j>>2]|0;eF(c[j+4>>2]|0);eF(j);if((a|0)==0){break}else{j=a}}c[d>>2]=0;return}function ot(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;b=a|0;d=c[b>>2]|0;if((d|0)!=0){e=d;f=e|0;g=c[f>>2]|0;c[b>>2]=g;h=e;return h|0}d=c[a+8>>2]|0;i=kk(8)|0;j=i;k=kk(da(c[43746]|0,d)|0)|0;c[i+4>>2]=k;if((c[43746]|0)>0){l=0;m=c[b>>2]|0;while(1){n=k+(da(l,d)|0)|0;o=n;c[n>>2]=m;c[b>>2]=o;n=l+1|0;if((n|0)<(c[43746]|0)){l=n;m=o}else{break}}}m=a+4|0;c[i>>2]=c[m>>2];c[m>>2]=j;e=c[b>>2]|0;f=e|0;g=c[f>>2]|0;c[b>>2]=g;h=e;return h|0}function pt(a,b){a=a|0;b=b|0;var d=0;d=b|0;c[a>>2]=c[d>>2];c[d>>2]=a;return}function qt(a){a=a|0;var b=0,d=0;b=a|0;Wx(b,141360,304,1)|0;Ym(a);d=jk((e[(c[(Hx(b)|0)+8>>2]|0)+168>>1]|0)<<3)|0;c[(c[a+8>>2]|0)+132>>2]=d;vn(a,c[(c[(Hx(b)|0)+8>>2]|0)+116>>2]&1);return}function rt(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0;g=i;i=i+16|0;j=g|0;k=g+8|0;if((b|0)==0){l=0;i=g;return l|0}m=e+8|0;n=c[(c[m>>2]|0)+132>>2]|0;o=e|0;p=fw(o,b)|0;if((a[p]|0)==0){l=0;i=g;return l|0}a[j]=0;b=n+8|0;do{if((c[53568]|0)>2){q=ac(p|0,161560,(r=i,i=i+32|0,c[r>>2]=n,c[r+8>>2]=b,c[r+16>>2]=n+16,c[r+24>>2]=j,r)|0)|0;i=r;if((q|0)<=2){break}a[(c[m>>2]|0)+119|0]=1;s=+h[21580];q=c[53568]|0;a:do{if(s>0.0){if((q|0)>0){t=0;u=s}else{break}while(1){v=n+(t<<3)|0;h[v>>3]=+h[v>>3]/u;v=t+1|0;w=c[53568]|0;if((v|0)>=(w|0)){x=w;y=9;break a}t=v;u=+h[21580]}}else{x=q;y=9}}while(0);do{if((y|0)==9){if((x|0)<=3){break}vu(e,f,3)}}while(0);do{if((a[j]|0)!=33){if((d|0)==0){l=1;i=g;return l|0}if((Km(fw(o,d)|0)|0)<<24>>24==0){l=1}else{break}i=g;return l|0}}while(0);a[(c[m>>2]|0)+119|0]=3;l=1;i=g;return l|0}}while(0);x=ac(p|0,130648,(r=i,i=i+24|0,c[r>>2]=n,c[r+8>>2]=b,c[r+16>>2]=j,r)|0)|0;i=r;if((x|0)<=1){x=$w(o)|0;Fv(1,109024,(r=i,i=i+16|0,c[r>>2]=x,c[r+8>>2]=p,r)|0)|0;i=r;l=0;i=g;return l|0}a[(c[m>>2]|0)+119|0]=1;u=+h[21580];p=c[53568]|0;b:do{if(u>0.0){if((p|0)>0){z=0;A=u}else{break}while(1){x=n+(z<<3)|0;h[x>>3]=+h[x>>3]/A;x=z+1|0;b=c[53568]|0;if((x|0)>=(b|0)){B=b;y=20;break b}z=x;A=+h[21580]}}else{B=p;y=20}}while(0);c:do{if((y|0)==20){if((B|0)<=2){break}p=c[53570]|0;do{if((p|0)!=0){z=fw(o,p)|0;if((z|0)==0){break}x=ac(z|0,116320,(r=i,i=i+8|0,c[r>>2]=k,r)|0)|0;i=r;if((x|0)!=1){break}A=+h[21580];u=+h[k>>3];if(A>0.0){h[n+16>>3]=u/A}else{h[n+16>>3]=u}vu(e,f,3);break c}}while(0);wu(e,f)}}while(0);do{if((a[j]|0)!=33){if((d|0)==0){l=1;i=g;return l|0}if((Km(fw(o,d)|0)|0)<<24>>24==0){l=1}else{break}i=g;return l|0}}while(0);a[(c[m>>2]|0)+119|0]=3;l=1;i=g;return l|0}function st(a){a=a|0;var b=0,d=0,e=0;b=ux(a)|0;if((b|0)!=0){d=b;do{b=mw(a,d)|0;if((b|0)!=0){e=b;do{tn(e);e=ow(a,e)|0;}while((e|0)!=0)}un(d);d=vx(a,d)|0;}while((d|0)!=0)}if((c[53566]|0)!=0|(c[53552]|0)<0){uu(a)}if((Ix(a|0)|0)==(a|0)){return}_x(a,0,139536);return}function tt(b,e){b=b|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0,V=0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0;f=i;i=i+152|0;g=f|0;j=f+8|0;k=f+16|0;l=f+24|0;m=f+32|0;n=f+40|0;o=f+48|0;p=f+56|0;q=f+64|0;r=f+72|0;s=f+80|0;t=f+88|0;u=f+96|0;v=f+104|0;w=f+112|0;x=f+120|0;y=Wv(b,0,103264,0)|0;z=Wv(b,0,97632,0)|0;if((z|0)==0){A=Wv(b,0,97632,213344)|0}else{A=z}tu(b)|0;z=b+8|0;B=c[c[(c[z>>2]|0)+144>>2]>>2]|0;a:do{if((B|0)!=0){C=0;D=B;while(1){E=D+8|0;F=c[E>>2]|0;if((a[F+119|0]|0)==0){G=D|0;if((Za($w(G)|0,86848,7)|0)!=0){break}H=c[E>>2]|0}else{H=F}F=c[H+108>>2]|0;do{if((F|0)!=0){E=ew(D|0,168264)|0;if((E|0)==0){break}I=ac(E|0,98704,(J=i,i=i+16|0,c[J>>2]=v,c[J+8>>2]=w,J)|0)|0;i=J;if((I|0)!=2){break}K=+h[w>>3];h[F+56>>3]=+h[v>>3];h[F+64>>3]=K;a[F+81|0]=1}}while(0);C=C+1|0;D=c[(c[(c[z>>2]|0)+144>>2]|0)+(C<<2)>>2]|0;if((D|0)==0){break a}}D=$w(G)|0;C=$w(b|0)|0;Fv(1,82048,(J=i,i=i+16|0,c[J>>2]=D,c[J+8>>2]=C,J)|0)|0;i=J;L=-1;i=f;return L|0}}while(0);ut(b,y,A);do{if((Mw(b)|0)==0){M=2}else{A=Wv(b,2,104384,0)|0;if((A|0)==0|(c[53566]|0)<2){M=0;break}y=ux(b)|0;if((y|0)==0){M=0;break}G=y;y=0;while(1){v=mw(b,G)|0;if((v|0)==0){N=y}else{w=v;v=y;while(1){H=w|0;B=fw(H,A)|0;do{if((a[B]|0)==0){O=0}else{ih(w,t,u);C=1;K=0.0;P=0.0;Q=0.0;R=0.0;D=0;F=0;I=B;b:while(1){E=ac(I|0,102080,(J=i,i=i+24|0,c[J>>2]=r,c[J+8>>2]=s,c[J+16>>2]=q,J)|0)|0;i=J;if((E|0)==2){S=+h[r>>3];T=+h[s>>3];U=1;V=I+(c[q>>2]|0)|0}else{S=Q;T=R;U=F;V=I}E=ac(V|0,101336,(J=i,i=i+24|0,c[J>>2]=r,c[J+8>>2]=s,c[J+16>>2]=q,J)|0)|0;i=J;if((E|0)==2){W=+h[r>>3];X=+h[s>>3];Y=1;Z=V+(c[q>>2]|0)|0}else{W=K;X=P;Y=D;Z=V}E=0;_=Z;while(1){$=_;while(1){if((Qa(d[$]|0)|0)==0){break}else{$=$+1|0}}aa=a[$]|0;c:do{if(aa<<24>>24==0){ba=0;ca=E;da=$}else{ea=E+1|0;fa=$;ga=aa;while(1){ha=fa+1|0;if((Qa(ga&255|0)|0)!=0|ga<<24>>24==59){ba=ga;ca=ea;da=fa;break c}ia=a[ha]|0;if(ia<<24>>24==0){ba=0;ca=ea;da=ha;break}else{fa=ha;ga=ia}}}}while(0);if((Qa(ba&255|0)|0)==0){break}else{E=ca;_=da}}if(!((ca|0)>3&((ca|0)%3|0|0)==1)){ja=34;break}ka=kk(ca<<4)|0;_=ka;if((ca|0)==0){la=Z}else{E=ca;aa=Z;$=_;while(1){ga=ac(aa|0,100472,(J=i,i=i+24|0,c[J>>2]=r,c[J+8>>2]=s,c[J+16>>2]=q,J)|0)|0;i=J;if((ga|0)<2){ja=38;break b}ga=aa+(c[q>>2]|0)|0;h[$>>3]=+h[r>>3];h[$+8>>3]=+h[s>>3];fa=E-1|0;if((fa|0)==0){la=ga;break}else{E=fa;aa=ga;$=$+16|0}}}while(1){ma=la+1|0;if((Qa(a[la]|0)|0)==0){break}else{la=ma}}$=(a[la]|0)==0;aa=$?la:ma;E=$?0:C;$=bm(w,ca)|0;if((U|0)!=0){c[$+8>>2]=c[t>>2];h[$+16>>3]=S;h[$+24>>3]=T}if((Y|0)!=0){c[$+12>>2]=c[u>>2];h[$+32>>3]=W;h[$+40>>3]=X}if((ca|0)>0){ga=$|0;$=0;do{fa=(c[ga>>2]|0)+($<<4)|0;ea=_+($<<4)|0;c[fa>>2]=c[ea>>2];c[fa+4>>2]=c[ea+4>>2];c[fa+8>>2]=c[ea+8>>2];c[fa+12>>2]=c[ea+12>>2];$=$+1|0;}while(($|0)<(ca|0))}eF(ka);if((E|0)==0){ja=51;break}else{C=E;K=W;P=X;Q=S;R=T;D=Y;F=U;I=aa}}if((ja|0)==34){ja=0;sn(w);if(a[976]|0){O=0;break}a[976]=1;I=w;F=$w(c[((c[I>>2]&3|0)==3?w:w+32|0)+28>>2]|0)|0;D=$w(c[((c[I>>2]&3|0)==2?w:w-32|0)+28>>2]|0)|0;Fv(0,100880,(J=i,i=i+16|0,c[J>>2]=F,c[J+8>>2]=D,J)|0)|0;i=J;O=0;break}else if((ja|0)==38){ja=0;if(!(a[976]|0)){a[976]=1;D=w;F=$w(c[((c[D>>2]&3|0)==3?w:w+32|0)+28>>2]|0)|0;I=$w(c[((c[D>>2]&3|0)==2?w:w-32|0)+28>>2]|0)|0;Fv(0,99912,(J=i,i=i+16|0,c[J>>2]=F,c[J+8>>2]=I,J)|0)|0;i=J}eF(ka);sn(w);O=0;break}else if((ja|0)==51){ja=0;I=w+8|0;F=c[(c[I>>2]|0)+96>>2]|0;do{if((F|0)!=0){D=ew(H,103264)|0;if((D|0)==0){break}C=ac(D|0,98704,(J=i,i=i+16|0,c[J>>2]=o,c[J+8>>2]=p,J)|0)|0;i=J;if((C|0)!=2){break}R=+h[p>>3];h[F+56>>3]=+h[o>>3];h[F+64>>3]=R;a[F+81|0]=1}}while(0);F=c[(c[I>>2]|0)+108>>2]|0;do{if((F|0)!=0){C=ew(H,168264)|0;if((C|0)==0){break}D=ac(C|0,98704,(J=i,i=i+16|0,c[J>>2]=m,c[J+8>>2]=n,J)|0)|0;i=J;if((D|0)!=2){break}R=+h[n>>3];h[F+56>>3]=+h[m>>3];h[F+64>>3]=R;a[F+81|0]=1}}while(0);F=c[(c[I>>2]|0)+100>>2]|0;do{if((F|0)!=0){D=ew(H,99528)|0;if((D|0)==0){break}C=ac(D|0,98704,(J=i,i=i+16|0,c[J>>2]=k,c[J+8>>2]=l,J)|0)|0;i=J;if((C|0)!=2){break}R=+h[l>>3];h[F+56>>3]=+h[k>>3];h[F+64>>3]=R;a[F+81|0]=1}}while(0);F=c[(c[I>>2]|0)+104>>2]|0;if((F|0)==0){O=1;break}C=ew(H,99144)|0;if((C|0)==0){O=1;break}D=ac(C|0,98704,(J=i,i=i+16|0,c[J>>2]=g,c[J+8>>2]=j,J)|0)|0;i=J;if((D|0)!=2){O=1;break}R=+h[j>>3];h[F+56>>3]=+h[g>>3];h[F+64>>3]=R;a[F+81|0]=1;O=1;break}}}while(0);H=O+v|0;B=ow(b,w)|0;if((B|0)==0){N=H;break}else{w=B;v=H}}}v=vx(b,G)|0;if((v|0)==0){break}else{G=v;y=N}}if((N|0)==0){M=0;break}y=(N|0)==(Mw(b)|0);M=y?2:1}}while(0);N=c[(c[z>>2]|0)+8>>2]|0;d:do{if((c[N+88>>2]|0)==0){O=(e|0)!=0;do{if(O&(c[53566]|0)==1){if((nr(b)|0)==0){break}g=c[(c[z>>2]|0)+12>>2]|0;if((g|0)==0){break}a[g+81|0]=0}}while(0);$m(b);if(!O){na=0;ja=115;break}g=c[z>>2]|0;T=+h[g+16>>3];j=~~T;J=(j|0)>-1?j:-j|0;S=+(J|0);if((J|0)>-1){if((~~(S+.5)|0)==0){ja=81}}else{if((~~(S+-.5)|0)==0){ja=81}}do{if((ja|0)==81){J=~~+h[g+24>>3];j=(J|0)>-1?J:-J|0;S=+(j|0);if((j|0)>-1){if((~~(S+.5)|0)==0){oa=0;break d}else{break}}else{if((~~(S+-.5)|0)==0){oa=0;break d}else{break}}}}while(0);S=+h[g+24>>3];X=T/72.0;W=S/72.0;O=ux(b)|0;if((O|0)!=0){j=O;do{O=j+8|0;J=c[(c[O>>2]|0)+132>>2]|0;h[J>>3]=+h[J>>3]-X;J=(c[(c[O>>2]|0)+132>>2]|0)+8|0;h[J>>3]=+h[J>>3]-W;j=vx(b,j)|0;}while((j|0)!=0)}do{if((M|0)!=0){j=ux(b)|0;if((j|0)==0){break}else{pa=j}do{j=mw(b,pa)|0;if((j|0)!=0){g=j;do{j=g+8|0;J=c[j>>2]|0;O=c[J+8>>2]|0;do{if((O|0)!=0){if((c[O+4>>2]|0)>0){k=0;l=c[O>>2]|0;while(1){m=l+4|0;if((c[m>>2]|0)>0){n=0;o=c[l>>2]|0;while(1){p=o|0;h[p>>3]=+h[p>>3]-T;p=o+8|0;h[p>>3]=+h[p>>3]-S;p=n+1|0;if((p|0)<(c[m>>2]|0)){n=p;o=o+16|0}else{break}}}if((c[l+8>>2]|0)!=0){o=l+16|0;h[o>>3]=+h[o>>3]-T;o=l+24|0;h[o>>3]=+h[o>>3]-S}if((c[l+12>>2]|0)!=0){o=l+32|0;h[o>>3]=+h[o>>3]-T;o=l+40|0;h[o>>3]=+h[o>>3]-S}o=k+1|0;n=c[j>>2]|0;if((o|0)<(c[(c[n+8>>2]|0)+4>>2]|0)){k=o;l=l+48|0}else{qa=n;break}}}else{qa=J}l=c[qa+96>>2]|0;do{if((l|0)==0){ra=qa}else{if((a[l+81|0]|0)==0){ra=qa;break}k=l+56|0;h[k>>3]=+h[k>>3]-T;k=(c[(c[j>>2]|0)+96>>2]|0)+64|0;h[k>>3]=+h[k>>3]-S;ra=c[j>>2]|0}}while(0);l=c[ra+108>>2]|0;do{if((l|0)==0){sa=ra}else{if((a[l+81|0]|0)==0){sa=ra;break}k=l+56|0;h[k>>3]=+h[k>>3]-T;k=(c[(c[j>>2]|0)+108>>2]|0)+64|0;h[k>>3]=+h[k>>3]-S;sa=c[j>>2]|0}}while(0);l=c[sa+100>>2]|0;do{if((l|0)==0){ta=sa}else{if((a[l+81|0]|0)==0){ta=sa;break}k=l+56|0;h[k>>3]=+h[k>>3]-T;k=(c[(c[j>>2]|0)+100>>2]|0)+64|0;h[k>>3]=+h[k>>3]-S;ta=c[j>>2]|0}}while(0);l=c[ta+104>>2]|0;if((l|0)==0){break}if((a[l+81|0]|0)==0){break}k=l+56|0;h[k>>3]=+h[k>>3]-T;k=(c[(c[j>>2]|0)+104>>2]|0)+64|0;h[k>>3]=+h[k>>3]-S}}while(0);g=ow(b,g)|0;}while((g|0)!=0)}pa=vx(b,pa)|0;}while((pa|0)!=0)}}while(0);Bt(b,T,S);oa=0}else{c[N+84>>2]=0;$m(b);g=(c[z>>2]|0)+16|0;Ph(x,b);j=g;g=x;c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2];c[j+16>>2]=c[g+16>>2];c[j+20>>2]=c[g+20>>2];c[j+24>>2]=c[g+24>>2];c[j+28>>2]=c[g+28>>2];if((e|0)==0){na=1;ja=115}else{oa=1}}}while(0);if((ja|0)==115){c[53522]=1;ja=ux(b)|0;if((ja|0)==0){L=na;i=f;return L|0}else{ua=ja}while(1){ja=ua+8|0;e=c[ja>>2]|0;h[e+16>>3]=+h[c[e+132>>2]>>3]*72.0;e=c[ja>>2]|0;h[e+24>>3]=+h[(c[e+132>>2]|0)+8>>3]*72.0;e=vx(b,ua)|0;if((e|0)==0){L=na;break}else{ua=e}}i=f;return L|0}if((M|0)==2){c[53522]=1;Ot(b);L=oa;i=f;return L|0}else{Nt(b);L=oa;i=f;return L|0}return 0}function ut(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0;f=i;i=i+16|0;g=f|0;j=f+8|0;k=b+8|0;do{if(!((c[(c[k>>2]|0)+12>>2]|0)==0|(d|0)==0)){l=ac(fw(b|0,d)|0,98704,(m=i,i=i+16|0,c[m>>2]=g,c[m+8>>2]=j,m)|0)|0;i=m;if((l|0)!=2){break}l=c[(c[k>>2]|0)+12>>2]|0;n=+h[j>>3];h[l+56>>3]=+h[g>>3];h[l+64>>3]=n;a[(c[(c[k>>2]|0)+12>>2]|0)+81|0]=1}}while(0);if((e|0)==0){i=f;return}k=sy(b)|0;if((k|0)==0){i=f;return}else{o=k}do{Ct(o,b,d,e);o=ty(o)|0;}while((o|0)!=0);i=f;return}function vt(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=i;i=i+40|0;h=g|0;j=g+32|0;k=b|0;b=ew(k,164128)|0;if((b|0)==0){l=e;i=g;return l|0}m=a[b]|0;if(m<<24>>24==0){l=e;i=g;return l|0}do{if((Kb(m&255|0)|0)==0){n=b;o=((d[b]|0)-48|0)>>>0<10>>>0}else{if((Za(b|0,160072,4)|0)==0){l=0;i=g;return l|0}if((Za(b|0,155040,7)|0)==0){l=1;i=g;return l|0}else{p=(Za(b|0,151632,6)|0)==0;n=p?b+6|0:b;o=p;break}}}while(0);b=o?2:e;if((b|0)!=2){l=b;i=g;return l|0}if(((d[n]|0)-48|0)>>>0<10>>>0){b=ac(n|0,148776,(q=i,i=i+8|0,c[q>>2]=j,q)|0)|0;i=q;if((b|0)<1){r=11}}else{r=11}if((r|0)==11){r=fb()|0;b=(zc(0)|0)^r;c[j>>2]=b;r=h|0;nb(r|0,148776,(q=i,i=i+8|0,c[q>>2]=b,q)|0)|0;i=q;gw(k,164128,r)|0}c[f>>2]=c[j>>2];l=2;i=g;return l|0}function wt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0,p=0.0;f=i;i=i+8|0;g=f|0;c[g>>2]=1;j=vt(b,e,g)|0;if(!((c[53596]|0)==0|(j|0)==2)){Fv(0,145560,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0)|0;i=e}if((j|0)!=1){k=c[g>>2]|0;dc(k|0);i=f;return j|0}l=+(d|0);m=6.283185307179586/l;e=ux(b)|0;if((e|0)==0){k=c[g>>2]|0;dc(k|0);i=f;return j|0}else{n=0.0;o=e}while(1){p=l*+V(n);e=o+8|0;h[c[(c[e>>2]|0)+132>>2]>>3]=p;p=l*+W(n);h[(c[(c[e>>2]|0)+132>>2]|0)+8>>3]=p;a[(c[e>>2]|0)+119|0]=1;if((c[53568]|0)>2){wu(o,d)}e=vx(b,o)|0;if((e|0)==0){break}else{n=m+n;o=e}}k=c[g>>2]|0;dc(k|0);i=f;return j|0}function xt(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=i;i=i+1096|0;e=d|0;f=d+1024|0;g=d+1056|0;j=d+1080|0;k=d+1088|0;l=+h[21580];do{if((c[53566]|0)==0){h[21580]=+Gm(b);yt(b);m=b|0;n=ew(m,107080)|0;do{if((n|0)==0){o=1}else{p=a[n]|0;if((p<<24>>24|0)==0){o=1;break}else if((p<<24>>24|0)==75){if((Ya(n|0,106624)|0)==0){o=0;break}}else if((p<<24>>24|0)==109){if((Ya(n|0,106200)|0)==0){o=1;break}}p=$w(m)|0;Fv(0,105680,(q=i,i=i+16|0,c[q>>2]=n,c[q+8>>2]=p,q)|0)|0;i=q;o=1}}while(0);jr(b,g,0)|0;n=ew(m,112752)|0;a:do{if((n|0)==0){r=0}else{p=a[n]|0;do{if((p<<24>>24|0)==99){if((Ya(n|0,112296)|0)==0){r=1;break a}}else if((p<<24>>24|0)==115){if((Ya(n|0,111672)|0)==0){r=2;break a}if((Ya(n|0,111032)|0)==0){r=0;break a}}else if((p<<24>>24|0)==109){if((Ya(n|0,110368)|0)!=0){break}if((Wv(b,2,121896,0)|0)!=0){r=3;break a}s=$w(m)|0;Fv(0,109568,(q=i,i=i+8|0,c[q>>2]=s,q)|0)|0;i=q;Fv(3,108728,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0)|0;i=q;r=0;break a}else if((p<<24>>24|0)==0){r=0;break a}}while(0);p=$w(m)|0;Fv(0,107760,(q=i,i=i+16|0,c[q>>2]=n,c[q+8>>2]=p,q)|0)|0;i=q;r=0}}while(0);n=vv(b,0,f)|0;m=wv(b,-1,8)|0;c[53552]=m;p=(m|0)<0;do{if((n|0)==0){if(!((o|0)==0|p^1)){c[53552]=8;c[f+16>>2]=2;t=28;break}c[f+16>>2]=2;if((m|0)>-1){t=28;break}zt(b,o,r);lr(b,g)|0;s=e|0;do{if((c[53568]|0)>2&(c[53570]|0)!=0){u=ux(b)|0;if((u|0)==0){break}else{v=u}do{nb(s|0,116320,(q=i,i=i+8|0,h[q>>3]=+h[(c[(c[v+8>>2]|0)+132>>2]|0)+16>>3]*72.0,q)|0)|0;i=q;hw(v|0,c[53570]|0,s)|0;v=vx(b,v)|0;}while((v|0)!=0)}}while(0);Pt(b)}else{if(!p){t=28;break}c[53552]=8;t=28}}while(0);if((t|0)==28){p=fv(b,j,113264,k)|0;do{if((c[j>>2]|0)>1){m=0;do{n=c[p+(m<<2)>>2]|0;jv(n)|0;zt(n,o,r);lr(n,g)|0;qn(n,2);Pt(n);m=m+1|0;w=c[j>>2]|0;}while((m|0)<(w|0));if((a[k]|0)==0){x=0;y=w}else{m=jk(w)|0;a[m]=1;x=m;y=c[j>>2]|0}c[f+8>>2]=c[53552];c[f+20>>2]=x;c[f+12>>2]=1;rv(y,p,b,f)|0;if((x|0)==0){break}eF(x)}else{zt(b,o,r);lr(b,g)|0;Pt(b)}}while(0);$m(b);m=e|0;do{if((c[53568]|0)>2&(c[53570]|0)!=0){n=ux(b)|0;if((n|0)==0){break}else{z=n}do{nb(m|0,116320,(q=i,i=i+8|0,h[q>>3]=+h[(c[(c[z+8>>2]|0)+132>>2]|0)+16>>3]*72.0,q)|0)|0;i=q;hw(z|0,c[53570]|0,m)|0;z=vx(b,z)|0;}while((z|0)!=0)}}while(0);if((c[j>>2]|0)>0){m=0;do{n=c[p+(m<<2)>>2]|0;uu(n);s=n|0;Xx(s,139536)|0;Gx(b,s)|0;m=m+1|0;}while((m|0)<(c[j>>2]|0))}eF(p)}Xk(b)}else{h[21580]=72.0;yt(b);m=e|0;do{if((c[53568]|0)>2&(c[53570]|0)!=0){s=ux(b)|0;if((s|0)==0){break}else{A=s}do{nb(m|0,116320,(q=i,i=i+8|0,h[q>>3]=+h[(c[(c[A+8>>2]|0)+132>>2]|0)+16>>3]*72.0,q)|0)|0;i=q;hw(A|0,c[53570]|0,m)|0;A=vx(b,A)|0;}while((A|0)!=0)}}while(0);m=tt(b,1)|0;if((m|0)>=0){Uk(b,(m|0)==0|0);break}Fv(3,142592,(q=i,i=i+1|0,i=i+7&-8,c[q>>2]=0,q)|0)|0;i=q;i=d;return}}while(0);h[21580]=l;i=d;return}function yt(a){a=a|0;var d=0,f=0,g=0,i=0,j=0,k=0,l=0.0;qn(a,2);d=a|0;f=Em(d,Wv(a,0,105272,0)|0,2,2)|0;g=(Em(d,Wv(a,0,104896,0)|0,f,2)|0)&65535;b[(c[(Ix(d)|0)+8>>2]|0)+168>>1]=g;g=a+48|0;d=(c[(c[g>>2]|0)+8>>2]|0)+168|0;i=b[d>>1]|0;j=(i&65535)>>>0<10>>>0?i:10;b[d>>1]=j;d=j&65535;c[53568]=d;b[(c[(c[g>>2]|0)+8>>2]|0)+170>>1]=(f|0)<(d|0)?f:d;d=Lw(a)|0;c[53596]=Wv(a,1,104384,0)|0;f=Wv(a,1,103824,0)|0;g=ux(a)|0;if((g|0)!=0){j=g;do{g=j|0;Wx(g,141360,304,1)|0;Ym(j);i=jk((e[(c[(Hx(g)|0)+8>>2]|0)+168>>1]|0)<<3)|0;c[(c[j+8>>2]|0)+132>>2]=i;vn(j,c[(c[(Hx(g)|0)+8>>2]|0)+116>>2]&1);rt(c[53596]|0,f,j,d)|0;j=vx(a,j)|0;}while((j|0)!=0)}j=ux(a)|0;if((j|0)==0){return}else{k=j}do{j=mw(a,k)|0;if((j|0)!=0){d=j;do{j=d|0;Wx(j,103024,176,1)|0;Zm(d)|0;l=+Fm(j,c[53750]|0,1.0,1.0);h[(c[d+8>>2]|0)+128>>3]=l;d=ow(a,d)|0;}while((d|0)!=0)}k=vx(a,k)|0;}while((k|0)!=0);return}function zt(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0;f=i;i=i+24|0;g=f|0;j=f+8|0;k=f+16|0;l=b|0;m=ew(l,136896)|0;do{if((m|0)==0){if((d|0)==1){c[53660]=200;break}else{c[53660]=(Lw(b)|0)*100|0;break}}else{c[53660]=Rb(m|0)|0}}while(0);m=ru(b,d)|0;if((m|0)<2|(c[53660]|0)<0){i=f;return}if((d|0)!=0){n=c[53568]|0;p=wt(b,m,(d|0)==2?0:2)|0;q=Em(l,Wv(b,0,114704,0)|0,2,0)|0;if((q|0)==0|(q|0)>2){Fv(0,113856,(r=i,i=i+8|0,c[r>>2]=114704,r)|0)|0;i=r;s=2}else{s=q}q=(p|0)==0;p=q?s|4:s;s=kk(n<<2)|0;t=s;u=kk(da(m<<3,n)|0)|0;c[t>>2]=u;a:do{if((c[53568]|0)>1){c[s+4>>2]=u+(m<<3);if((c[53568]|0)>2){v=2;w=u}else{break}while(1){c[t+(v<<2)>>2]=w+((da(v,m)|0)<<3);n=v+1|0;if((n|0)>=(c[53568]|0)){break a}v=n;w=c[t>>2]|0}}}while(0);if((a[213992]|0)!=0){w=c[o>>2]|0;v=c[53660]|0;x=+h[21657];gc(w|0,119480,(r=i,i=i+40|0,c[r>>2]=e,c[r+8>>2]=q&1,c[r+16>>2]=p&3,c[r+24>>2]=v,h[r+32>>3]=x,r)|0)|0;i=r;Ma(118760,15,1,w|0)|0;ym();Ma(117848,13,1,w|0)|0}w=At(b,m,j,d,e,k)|0;if((a[213992]|0)!=0){d=c[o>>2]|0;x=+zm();gc(d|0,116936,(r=i,i=i+16|0,c[r>>2]=m,h[r+8>>3]=x,r)|0)|0;i=r}do{if((nu(w,m,c[j>>2]|0,t,c[k>>2]|0,c[53568]|0,p,e,c[53660]|0)|0)<0){Fv(3,116016,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r}else{d=ux(b)|0;if((d|0)==0){break}else{y=d}do{d=y+8|0;v=c[d>>2]|0;q=c[v+120>>2]|0;do{if((c[53568]|0)>0){h[c[v+132>>2]>>3]=+h[(c[t>>2]|0)+(q<<3)>>3];if((c[53568]|0)>1){z=1}else{break}do{h[(c[(c[d>>2]|0)+132>>2]|0)+(z<<3)>>3]=+h[(c[t+(z<<2)>>2]|0)+(q<<3)>>3];z=z+1|0;}while((z|0)<(c[53568]|0))}}while(0);y=vx(b,y)|0;}while((y|0)!=0)}}while(0);Qr(w);eF(c[t>>2]|0);eF(s);eF(c[k>>2]|0);i=f;return}do{if((e|0)==2){k=At(b,m,g,0,2,0)|0;s=Cs(k,m)|0;if((m|0)>0){t=b+8|0;w=0;do{y=s+(w<<2)|0;z=0;do{h[(c[(c[(c[t>>2]|0)+152>>2]|0)+(w<<2)>>2]|0)+(z<<3)>>3]=+(c[(c[y>>2]|0)+(z<<2)>>2]|0);z=z+1|0;}while((z|0)<(m|0));w=w+1|0;}while((w|0)<(m|0))}eF(c[s>>2]|0);eF(s);Qr(k);}else if((e|0)==1){if((yr(b,m)|0)!=0){break}w=$w(l)|0;Fv(0,133960,(r=i,i=i+8|0,c[r>>2]=w,r)|0)|0;i=r;Fv(3,131976,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;Fv(3,129712,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;Fv(3,126424,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;Gu(b,m)}else{Gu(b,m);if((e|0)!=3){break}w=ux(b)|0;if((w|0)==0){break}t=b+8|0;z=w;do{w=mw(b,z)|0;if((w|0)!=0){y=w;do{w=c[y>>2]&3;p=(c[c[((w|0)==3?y:y+32|0)+28>>2]>>2]|0)>>>4;j=(c[c[((w|0)==2?y:y-32|0)+28>>2]>>2]|0)>>>4;if((p|0)!=(j|0)){x=+h[(c[y+8>>2]|0)+136>>3];h[(c[(c[(c[t>>2]|0)+152>>2]|0)+(j<<2)>>2]|0)+(p<<3)>>3]=x;h[(c[(c[(c[t>>2]|0)+152>>2]|0)+(p<<2)>>2]|0)+(j<<3)>>3]=x}y=ow(b,y)|0;}while((y|0)!=0)}z=vx(b,z)|0;}while((z|0)!=0)}}while(0);xu(b,m);yu(b,m);if((a[213992]|0)!=0){l=c[53660]|0;x=+h[21657];gc(c[o>>2]|0,123944,(r=i,i=i+24|0,c[r>>2]=e,c[r+8>>2]=l,h[r+16>>3]=x,r)|0)|0;i=r;ym()}zu(b,m);i=f;return}function At(a,b,d,e,f,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0;j=Mw(a)|0;k=Lk()|0;if((f|0)==2){l=0;m=0}else{f=Wv(a,2,121896,0)|0;l=(c[53750]|0)!=0|0;m=(f|0)!=0}f=(e&-2|0)==2;e=kk(b<<4)|0;n=e;o=kk(b<<2)|0;p=o;q=(j<<1)+b<<2;j=kk(q)|0;r=m|f;if(r){s=kk(q)|0}else{s=0}t=(l|0)!=0;if(t){u=kk(q)|0}else{u=0}q=ux(a)|0;a:do{if((q|0)==0){v=u;w=s;x=0}else{l=u;y=0;z=q;A=s;B=j;C=0;while(1){Mk(k);if((c[(c[z+8>>2]|0)+120>>2]|0)!=(y|0)){break}c[p+(y<<2)>>2]=z;D=B+4|0;E=n+(y<<4)+4|0;c[E>>2]=B;if(r){c[n+(y<<4)+8>>2]=A;F=A+4|0}else{c[n+(y<<4)+8>>2]=0;F=A}if(t){c[n+(y<<4)+12>>2]=l;G=l+4|0}else{c[n+(y<<4)+12>>2]=0;G=l}H=rw(a,z)|0;if((H|0)==0){I=G;J=1;K=F;L=D;M=C}else{N=n+(y<<4)+12|0;O=n+(y<<4)+8|0;P=G;Q=H;H=1;R=1;S=F;T=D;D=C;while(1){U=Q;V=c[U>>2]&3;W=Q-32|0;X=c[((V|0)==2?Q:W)+28>>2]|0;Y=Q+32|0;Z=c[((V|0)==3?Q:Y)+28>>2]|0;do{if((X|0)==(Z|0)){_=D;$=T;aa=S;ba=R;ca=H;da=P}else{V=c[(c[Z+8>>2]|0)+120>>2]|0;ea=c[(c[X+8>>2]|0)+120>>2]|0;fa=(V|0)>(ea|0);ga=Ok(k,fa?ea:V,fa?V:ea,R)|0;if((ga|0)!=(R|0)){if(t){ea=(c[N>>2]|0)+(ga<<2)|0;g[ea>>2]=+h[(c[Q+8>>2]|0)+128>>3]+ +g[ea>>2]}if(!m){_=D;$=T;aa=S;ba=R;ca=H;da=P;break}ea=(c[O>>2]|0)+(ga<<2)|0;ha=+h[(c[Q+8>>2]|0)+136>>3];ia=+(~~+g[ea>>2]|0);g[ea>>2]=ha>ia?ha:ia;_=D;$=T;aa=S;ba=R;ca=H;da=P;break}ea=c[U>>2]&3;ga=c[((ea|0)==3?Q:Y)+28>>2]|0;if((ga|0)==(z|0)){ja=c[((ea|0)==2?Q:W)+28>>2]|0}else{ja=ga}ga=D+1|0;ea=R+1|0;V=T+4|0;c[T>>2]=c[(c[ja+8>>2]|0)+120>>2];if(t){g[P>>2]=+h[(c[Q+8>>2]|0)+128>>3];ka=P+4|0}else{ka=P}do{if(m){g[S>>2]=+h[(c[Q+8>>2]|0)+136>>3];la=S+4|0}else{if(!f){la=S;break}g[S>>2]=1.0;la=S+4|0}}while(0);_=ga;$=V;aa=la;ba=ea;ca=H+1|0;da=ka}}while(0);W=sw(a,Q,z)|0;if((W|0)==0){I=da;J=ca;K=aa;L=$;M=_;break}else{P=da;Q=W;H=ca;R=ba;S=aa;T=$;D=_}}}c[n+(y<<4)>>2]=J;c[c[E>>2]>>2]=y;D=vx(a,z)|0;if((D|0)==0){v=I;w=K;x=M;break a}else{l=I;y=y+1|0;z=D;A=K;B=L;C=M}}cc(121096,120256,895,170408);return 0}}while(0);M=(x|0)/2|0;do{if((M|0)!=(Mw(a)|0)){x=(M<<1)+b<<2;L=mk(c[e+4>>2]|0,x)|0;if(m){ma=mk(c[e+8>>2]|0,x)|0}else{ma=w}if(t){na=mk(c[e+12>>2]|0,x)|0}else{na=v}if((b|0)<=0){break}if(m){if(t){x=na;K=0;I=ma;J=L;while(1){_=c[n+(K<<4)>>2]|0;c[n+(K<<4)+4>>2]=J;c[n+(K<<4)+8>>2]=I;c[n+(K<<4)+12>>2]=x;$=K+1|0;if(($|0)<(b|0)){x=x+(_<<2)|0;K=$;I=I+(_<<2)|0;J=J+(_<<2)|0}else{break}}}else{J=0;I=ma;K=L;while(1){x=c[n+(J<<4)>>2]|0;c[n+(J<<4)+4>>2]=K;c[n+(J<<4)+8>>2]=I;_=J+1|0;if((_|0)<(b|0)){J=_;I=I+(x<<2)|0;K=K+(x<<2)|0}else{break}}}}else{if(t){K=na;I=0;J=L;while(1){x=c[n+(I<<4)>>2]|0;c[n+(I<<4)+4>>2]=J;c[n+(I<<4)+12>>2]=K;_=I+1|0;if((_|0)<(b|0)){K=K+(x<<2)|0;I=_;J=J+(x<<2)|0}else{break}}}else{J=0;I=L;while(1){K=c[n+(J<<4)>>2]|0;c[n+(J<<4)+4>>2]=I;x=J+1|0;if((x|0)<(b|0)){J=x;I=I+(K<<2)|0}else{break}}}}}}while(0);c[d>>2]=M;if((i|0)==0){eF(o);Nk(k);return n|0}else{c[i>>2]=p;Nk(k);return n|0}return 0}function Bt(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,l=0;f=b+8|0;b=(c[f>>2]|0)+32|0;h[b>>3]=+h[b>>3]-d;b=(c[f>>2]|0)+40|0;h[b>>3]=+h[b>>3]-e;b=(c[f>>2]|0)+16|0;h[b>>3]=+h[b>>3]-d;b=(c[f>>2]|0)+24|0;h[b>>3]=+h[b>>3]-e;b=c[f>>2]|0;g=c[b+12>>2]|0;do{if((g|0)==0){i=b}else{if((a[g+81|0]|0)==0){i=b;break}j=g+56|0;h[j>>3]=+h[j>>3]-d;j=(c[(c[f>>2]|0)+12>>2]|0)+64|0;h[j>>3]=+h[j>>3]-e;i=c[f>>2]|0}}while(0);if((c[i+172>>2]|0)<1){return}else{k=1;l=i}while(1){Bt(c[(c[l+176>>2]|0)+(k<<2)>>2]|0,d,e);i=c[f>>2]|0;if((k|0)<(c[i+172>>2]|0)){k=k+1|0;l=i}else{break}}return}function Ct(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0;f=i;i=i+64|0;g=f|0;j=f+32|0;k=a|0;do{if((Za($w(k)|0,86848,7)|0)==0){l=g;m=g+8|0;n=g+24|0;o=ac(fw(k,e)|0,98144,(p=i,i=i+32|0,c[p>>2]=g,c[p+8>>2]=m,c[p+16>>2]=g+16,c[p+24>>2]=n,p)|0)|0;i=p;if((o|0)!=4){break}q=+h[m>>3];r=+h[n>>3];if(q>r){h[m>>3]=r;h[n>>3]=q}n=j;c[n>>2]=c[l>>2];c[n+4>>2]=c[l+4>>2];c[n+8>>2]=c[l+8>>2];c[n+12>>2]=c[l+12>>2];c[n+16>>2]=c[l+16>>2];c[n+20>>2]=c[l+20>>2];c[n+24>>2]=c[l+24>>2];c[n+28>>2]=c[l+28>>2];Wx(k,139536,272,1)|0;l=(c[a+8>>2]|0)+16|0;c[l>>2]=c[n>>2];c[l+4>>2]=c[n+4>>2];c[l+8>>2]=c[n+8>>2];c[l+12>>2]=c[n+12>>2];c[l+16>>2]=c[n+16>>2];c[l+20>>2]=c[n+20>>2];c[l+24>>2]=c[n+24>>2];c[l+28>>2]=c[n+28>>2];n=b+8|0;l=(c[n>>2]|0)+172|0;m=c[l>>2]|0;o=m+1|0;c[l>>2]=o;l=c[n>>2]|0;p=c[l+176>>2]|0;if((p|0)==0){s=jk((m<<2)+8|0)|0}else{s=lk(p,m+2|0,4,c[l+172>>2]|0)|0}c[(c[n>>2]|0)+176>>2]=s;c[(c[(c[n>>2]|0)+176>>2]|0)+(o<<2)>>2]=a;Rj(a);ut(a,d,e);i=f;return}}while(0);s=sy(a)|0;if((s|0)==0){i=f;return}else{t=s}do{Ct(t,b,d,e);t=ty(t)|0;}while((t|0)!=0);i=f;return}function Dt(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;e=jk(64)|0;a=e+8|0;f=d+8|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];c[a+16>>2]=c[f+16>>2];c[a+20>>2]=c[f+20>>2];c[a+24>>2]=c[f+24>>2];c[a+28>>2]=c[f+28>>2];c[a+32>>2]=c[f+32>>2];c[a+36>>2]=c[f+36>>2];c[a+40>>2]=c[f+40>>2];c[a+44>>2]=c[f+44>>2];f=c[d+56>>2]|0;c[e+56>>2]=f;b[(c[f+8>>2]|0)+168>>1]=1;return e|0}function Et(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function Ft(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=c[b>>2]|0;a=c[d>>2]|0;if(e>>>0>a>>>0){f=1;return f|0}if(e>>>0<a>>>0){f=-1;return f|0}a=c[b+24>>2]|0;e=c[d+24>>2]|0;if(a>>>0>e>>>0){f=1;return f|0}if(a>>>0<e>>>0){f=-1;return f|0}e=~~(+h[b+8>>3]- +h[d+8>>3]);if((e|0)!=0){f=e;return f|0}e=~~(+h[b+16>>3]- +h[d+16>>3]);if((e|0)!=0){f=e;return f|0}e=~~(+h[b+32>>3]- +h[d+32>>3]);if((e|0)!=0){f=e;return f|0}f=~~(+h[b+40>>3]- +h[d+40>>3]);return f|0}function Gt(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0;g=i;i=i+8|0;h=e+8|0;j=b[(c[h>>2]|0)+168>>1]|0;k=j<<16>>16;if(!(j<<16>>16!=1&(a[215376]|0)==0)){l=g|0;c[l>>2]=e;m=+(f|0);im(d,l,0,1,m,m,11832);if((c[(c[h>>2]|0)+96>>2]|0)!=0){l=Hx(c[((c[e>>2]&3|0)==3?e:e+32|0)+28>>2]|0)|0;_m(l,c[(c[h>>2]|0)+96>>2]|0)}km(e);i=g;return}h=kk(k<<2)|0;l=h;n=j<<16>>16>0;do{if(n){j=0;o=e;while(1){c[l+(j<<2)>>2]=o;p=j+1|0;if((p|0)<(k|0)){j=p;o=c[(c[o+8>>2]|0)+172>>2]|0}else{break}}m=+(f|0);im(d,l,0,k,m,m,11832);if(n){q=0}else{break}do{o=c[l+(q<<2)>>2]|0;j=o+8|0;if((c[(c[j>>2]|0)+96>>2]|0)!=0){p=Hx(c[((c[o>>2]&3|0)==3?o:o+32|0)+28>>2]|0)|0;_m(p,c[(c[j>>2]|0)+96>>2]|0)}km(o);q=q+1|0;}while((q|0)<(k|0))}else{m=+(f|0);im(d,l,0,k,m,m,11832)}}while(0);eF(h);i=g;return}
+
+
+
+function Ht(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0.0,K=0.0,L=0,M=0.0,N=0.0,O=0.0,P=0.0;f=i;i=i+64|0;j=f|0;k=pl(b)|0;if((k|0)==4){l=b+8|0;m=jk(8)|0;n=m;c[m+4>>2]=4;o=jk(64)|0;p=m;c[p>>2]=o;m=c[l>>2]|0;q=+h[m+16>>3];r=+h[m+24>>3];s=-0.0- +h[m+88>>3];if((a[d+8|0]|0)==0){t=d|0;u=d+4|0;v=r- +h[m+80>>3]*+g[u>>2];h[o>>3]=q+ +g[t>>2]*s;h[o+8>>3]=v;w=c[p>>2]|0;x=c[l>>2]|0;v=r+ +h[x+80>>3]*+g[u>>2];h[w+16>>3]=q- +h[x+88>>3]*+g[t>>2];h[w+24>>3]=v;w=c[p>>2]|0;x=c[l>>2]|0;v=r+ +h[x+80>>3]*+g[u>>2];h[w+32>>3]=q+ +h[x+96>>3]*+g[t>>2];h[w+40>>3]=v;w=c[p>>2]|0;x=c[l>>2]|0;v=r- +h[x+80>>3]*+g[u>>2];h[w+48>>3]=q+ +h[x+96>>3]*+g[t>>2];h[w+56>>3]=v;y=n;i=f;return y|0}else{w=d|0;t=d+4|0;v=r+(-0.0- +h[m+80>>3]- +g[t>>2]);h[o>>3]=q+(s- +g[w>>2]);h[o+8>>3]=v;o=c[p>>2]|0;m=c[l>>2]|0;v=r+(+h[m+80>>3]+ +g[t>>2]);h[o+16>>3]=q+(-0.0- +h[m+88>>3]- +g[w>>2]);h[o+24>>3]=v;o=c[p>>2]|0;m=c[l>>2]|0;v=r+(+h[m+80>>3]+ +g[t>>2]);h[o+32>>3]=q+(+h[m+96>>3]+ +g[w>>2]);h[o+40>>3]=v;o=c[p>>2]|0;p=c[l>>2]|0;v=r+(-0.0- +h[p+80>>3]- +g[t>>2]);h[o+48>>3]=q+(+h[p+96>>3]+ +g[w>>2]);h[o+56>>3]=v;y=n;i=f;return y|0}}else if((k|0)==2){n=b+8|0;o=c[(c[n>>2]|0)+12>>2]|0;v=+h[o+16>>3];q=+h[o+24>>3];r=+h[o+32>>3];s=+h[o+40>>3];o=jk(8)|0;w=o;c[o+4>>2]=4;p=jk(64)|0;t=o;c[t>>2]=p;o=c[n>>2]|0;z=+h[o+16>>3];A=+h[o+24>>3];o=d|0;B=+g[o>>2];if((a[d+8|0]|0)==0){n=d+4|0;C=A+q*+g[n>>2];h[p>>3]=z+v*B;h[p+8>>3]=C;l=c[t>>2]|0;C=A+s*+g[n>>2];h[l+16>>3]=z+v*+g[o>>2];h[l+24>>3]=C;l=c[t>>2]|0;C=A+s*+g[n>>2];h[l+32>>3]=z+r*+g[o>>2];h[l+40>>3]=C;l=c[t>>2]|0;C=A+q*+g[n>>2];h[l+48>>3]=z+r*+g[o>>2];h[l+56>>3]=C;y=w;i=f;return y|0}else{l=d+4|0;C=A+(q- +g[l>>2]);h[p>>3]=z+(v-B);h[p+8>>3]=C;p=c[t>>2]|0;C=A+(s+ +g[l>>2]);h[p+16>>3]=z+(v- +g[o>>2]);h[p+24>>3]=C;p=c[t>>2]|0;C=A+(s+ +g[l>>2]);h[p+32>>3]=z+(r+ +g[o>>2]);h[p+40>>3]=C;p=c[t>>2]|0;C=A+(q- +g[l>>2]);h[p+48>>3]=z+(r+ +g[o>>2]);h[p+56>>3]=C;y=w;i=f;return y|0}}else if((k|0)==1|(k|0)==3){k=jk(8)|0;w=k;p=b+8|0;b=c[p>>2]|0;o=c[b+12>>2]|0;do{if(e<<24>>24==0){l=c[o+8>>2]|0;if((l|0)>2){D=0.0;E=+g[d>>2];F=+g[d+4>>2];G=l;H=c[o+44>>2]|0;I=1;break}else{D=+wn()*.01;E=0.0;F=0.0;G=8;H=0;I=0;break}}else{C=+h[b+88>>3];r=-0.0-C;z=+h[b+80>>3];q=z*-.5;h[j>>3]=r;h[j+8>>3]=q;h[j+16>>3]=C;h[j+24>>3]=q;q=z*.5;h[j+32>>3]=C;h[j+40>>3]=q;h[j+48>>3]=r;h[j+56>>3]=q;D=0.0;E=0.0;F=0.0;G=4;H=j|0;I=1}}while(0);c[k+4>>2]=G;j=k;c[j>>2]=jk(G<<4)|0;if((G|0)<=0){y=w;i=f;return y|0}q=+(G|0);k=d+8|0;b=d|0;o=d+4|0;d=(G|0)==4;r=-0.0-E;C=-0.0-F;if((I|0)==0){I=0;while(1){z=D+ +(I|0)*6.283185307179586/q;A=+V(z);s=+W(z);if((a[k]|0)==0){e=c[p>>2]|0;J=A*+g[b>>2]*(+h[e+88>>3]+ +h[e+96>>3]);K=+h[e+80>>3]*s*+g[o>>2]}else{e=c[p>>2]|0;J=A*(+h[e+88>>3]+ +h[e+96>>3]+ +g[b>>2]);K=s*(+h[e+80>>3]+ +g[o>>2])}e=G-I-1|0;h[(c[j>>2]|0)+(e<<4)>>3]=J*.5+ +h[(c[p>>2]|0)+16>>3];h[(c[j>>2]|0)+(e<<4)+8>>3]=K*.5+ +h[(c[p>>2]|0)+24>>3];e=I+1|0;if((e|0)<(G|0)){I=e}else{y=w;break}}i=f;return y|0}else{L=0}while(1){do{if((a[k]|0)==0){M=F*+h[H+(L<<4)+8>>3];N=E*+h[H+(L<<4)>>3]}else{if(!d){K=+h[H+(L<<4)>>3];J=+h[H+(L<<4)+8>>3];q=+T(K*K+J*J);M=J*(F/q+1.0);N=K*(E/q+1.0);break}if((L|0)==2){O=C;P=r}else if((L|0)==1){O=F;P=r}else if((L|0)==3){O=C;P=E}else if((L|0)==0){O=F;P=E}else{O=0.0;P=0.0}M=O+ +h[H+(L<<4)+8>>3];N=P+ +h[H+(L<<4)>>3]}}while(0);I=G-L-1|0;h[(c[j>>2]|0)+(I<<4)>>3]=N+ +h[(c[p>>2]|0)+16>>3];h[(c[j>>2]|0)+(I<<4)+8>>3]=M+ +h[(c[p>>2]|0)+24>>3];I=L+1|0;if((I|0)<(G|0)){L=I}else{y=w;break}}i=f;return y|0}else{y=0;i=f;return y|0}return 0}function It(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;g=i;i=i+8|0;f=g|0;j=f;k=i;i=i+16|0;l=i;i=i+16|0;m=c[b>>2]&3;n=(c[((m|0)==3?b:b+32|0)+28>>2]|0)+8|0;o=c[n>>2]|0;p=c[b+8>>2]|0;q=+h[o+24>>3]+ +h[p+24>>3];h[k>>3]=+h[o+16>>3]+ +h[p+16>>3];h[k+8>>3]=q;o=(c[((m|0)==2?b:b-32|0)+28>>2]|0)+8|0;b=c[o>>2]|0;q=+h[b+24>>3]+ +h[p+64>>3];h[l>>3]=+h[b+16>>3]+ +h[p+56>>3];h[l+8>>3]=q;if((e|0)==0){r=-1111;s=-1111;t=KB(d,k,s,l,r,j)|0;u=a;v=f|0;w=c[v>>2]|0;x=f+4|0;y=c[x>>2]|0;z=u|0;c[z>>2]=w;A=u+4|0;c[A>>2]=y;i=g;return}r=c[(c[o>>2]|0)+284>>2]|0;s=c[(c[n>>2]|0)+284>>2]|0;t=KB(d,k,s,l,r,j)|0;u=a;v=f|0;w=c[v>>2]|0;x=f+4|0;y=c[x>>2]|0;z=u|0;c[z>>2]=w;A=u+4|0;c[A>>2]=y;i=g;return}function Jt(a,b,e,f,g){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;h=i;i=i+8|0;j=h|0;k=j;l=i;i=i+8|0;m=i;i=i+32|0;n=i;i=i+16|0;p=i;i=i+16|0;q=(c[b+8>>2]|0)+144|0;r=c[q>>2]|0;s=c[q+4>>2]|0;c[j>>2]=r;c[j+4>>2]=s;j=r;r=n;q=j;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];q=p;r=j+(s-1<<4)|0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];do{if(g<<24>>24==0){t=-1111;u=-1111;v=8}else{if((f|0)>0){w=0;x=-1111;y=-1111}else{v=9;break}while(1){if((x|0)==-1111){r=(LB(c[e+(w<<2)>>2]|0,n)|0)==0;z=r?-1111:w}else{z=x}if((y|0)==-1111){r=(LB(c[e+(w<<2)>>2]|0,p)|0)==0;A=r?-1111:w}else{A=y}r=w+1|0;if((r|0)<(f|0)){w=r;x=z;y=A}else{t=A;u=z;v=8;break}}}}while(0);do{if((v|0)==8){if((f|0)>0){B=0;C=0}else{v=9;break}while(1){if((C|0)==(u|0)|(C|0)==(t|0)){D=B}else{D=(c[(c[e+(C<<2)>>2]|0)+4>>2]|0)+B|0}z=C+1|0;if((z|0)<(f|0)){B=D;C=z}else{break}}z=kk(D<<5)|0;A=0;y=0;while(1){do{if((y|0)==(u|0)|(y|0)==(t|0)){E=A}else{x=e+(y<<2)|0;w=c[x>>2]|0;g=c[w+4>>2]|0;if((g|0)>0){F=0;G=A;H=w;I=g}else{E=A;break}while(1){g=F+1|0;w=z+(G<<5)|0;r=(c[H>>2]|0)+(F<<4)|0;c[w>>2]=c[r>>2];c[w+4>>2]=c[r+4>>2];c[w+8>>2]=c[r+8>>2];c[w+12>>2]=c[r+12>>2];r=z+(G<<5)+16|0;w=(c[c[x>>2]>>2]|0)+(((g|0)<(I|0)?g:0)<<4)|0;c[r>>2]=c[w>>2];c[r+4>>2]=c[w+4>>2];c[r+8>>2]=c[w+8>>2];c[r+12>>2]=c[w+12>>2];w=G+1|0;r=c[x>>2]|0;q=c[r+4>>2]|0;if((g|0)<(q|0)){F=g;G=w;H=r;I=q}else{E=w;break}}}}while(0);x=y+1|0;if((x|0)<(f|0)){A=E;y=x}else{break}}if((E|0)==(D|0)){J=z;K=D;break}cc(151464,108624,79,170376)}}while(0);if((v|0)==9){J=kk(0)|0;K=0}vF(m|0,0,32)|0;if((MB(J,K,k,m|0,l)|0)<0){m=b;k=$w(c[((c[m>>2]&3|0)==3?b:b+32|0)+28>>2]|0)|0;K=$w(c[((c[m>>2]&3|0)==2?b:b-32|0)+28>>2]|0)|0;Fv(1,127880,(L=i,i=i+16|0,c[L>>2]=k,c[L+8>>2]=K,L)|0)|0;i=L;i=h;return}if((d[213992]|0)>>>0>1>>>0){K=c[o>>2]|0;k=b;m=$w(c[((c[k>>2]&3|0)==3?b:b+32|0)+28>>2]|0)|0;v=b-32|0;D=$w(c[((c[k>>2]&3|0)==2?b:v)+28>>2]|0)|0;gc(K|0,159536,(L=i,i=i+16|0,c[L>>2]=m,c[L+8>>2]=D,L)|0)|0;i=L;M=k;N=v}else{M=b;N=b-32|0}cm(b,c[((c[M>>2]&3|0)==2?b:N)+28>>2]|0,c[l>>2]|0,c[l+4>>2]|0,11832);eF(J);nm(a,b,n,p);i=h;return}function Kt(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0;f=i;i=i+96|0;g=f|0;j=f+64|0;k=f+80|0;pr(k,a);l=j;m=k;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];m=ux(a)|0;if((m|0)!=0){l=m;do{m=mw(a,l)|0;if((m|0)!=0){k=m;do{yl(k);k=ow(a,k)|0;}while((k|0)!=0)}l=vx(a,l)|0;}while((l|0)!=0)}l=$g(28664,c[43330]|0)|0;k=ux(a)|0;if((k|0)!=0){m=g;n=g+8|0;o=g+16|0;p=g+24|0;q=g+32|0;r=g+40|0;s=g+48|0;t=g+56|0;g=l|0;u=k;do{k=mw(a,u)|0;if((k|0)!=0){v=k;do{k=c[v>>2]&3;w=c[((k|0)==3?v:v+32|0)+28>>2]|0;x=c[((k|0)==2?v:v-32|0)+28>>2]|0;do{if(w>>>0<x>>>0){k=c[v+8>>2]|0;y=+h[k+24>>3];z=+h[k+16>>3];A=+h[k+64>>3];B=+h[k+56>>3];C=x;D=w}else{k=c[v+8>>2]|0;if(w>>>0>x>>>0){y=+h[k+64>>3];z=+h[k+56>>3];A=+h[k+24>>3];B=+h[k+16>>3];C=w;D=x;break}E=+h[k+56>>3];F=+h[k+64>>3];G=+h[k+16>>3];H=+h[k+24>>3];if(G<E){y=H;z=G;A=F;B=E;C=w;D=w;break}if(G>E){y=F;z=E;A=H;B=G;C=w;D=w;break}if(H<F){y=H;z=G;A=F;B=E;C=w;D=w;break}k=H>F;y=k?F:H;z=k?E:G;A=H;B=G;C=w;D=w}}while(0);c[n>>2]=D;h[o>>3]=z;h[p>>3]=y;c[q>>2]=C;h[r>>3]=B;h[s>>3]=A;c[t>>2]=v;w=c[(Hc[c[g>>2]&63](l,m,1)|0)+56>>2]|0;if((w|0)!=(v|0)){x=w+8|0;w=(c[x>>2]|0)+168|0;b[w>>1]=(b[w>>1]|0)+1;c[(c[v+8>>2]|0)+172>>2]=c[(c[x>>2]|0)+172>>2];c[(c[x>>2]|0)+172>>2]=v}v=ow(a,v)|0;}while((v|0)!=0)}u=vx(a,u)|0;}while((u|0)!=0)}Vg(l)|0;if((Hc[d&63](a,j,e)|0)!=0){I=1;i=f;return I|0}c[53522]=1;I=0;i=f;return I|0}function Lt(a,b){a=a|0;b=b|0;return Kt(a,4,b)|0}function Mt(e,f,j){e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;k=i;i=i+120|0;l=k|0;m=k+8|0;n=k+16|0;p=k+32|0;q=k+48|0;r=k+56|0;s=k+72|0;t=k+88|0;u=k+104|0;v=(c[53566]|0)>1;do{if((j|0)>5){w=jk((Lw(e)|0)<<2)|0;x=w;y=ux(e)|0;if((y|0)==0){z=0}else{A=(j|0)==8|0;B=0;C=y;while(1){y=Ht(C,f,A)|0;D=(c[C+8>>2]|0)+284|0;if((y|0)==0){c[D>>2]=-1111;E=B}else{c[D>>2]=B;c[x+(B<<2)>>2]=y;E=B+1|0}y=vx(e,C)|0;if((y|0)==0){z=E;break}else{B=E;C=y}}}if((w|0)==0){F=0;G=0;H=z;I=0;J=0;break}C=Hs(x,z)|0;B=(j|0)==8;if((C|0)!=0){if(B){F=C;G=0;H=z;I=x;J=1;break}F=C;G=IB(x,z)|0;H=z;I=x;J=1;break}if(B){Fv(0,97328,(K=i,i=i+1|0,i=i+7&-8,c[K>>2]=0,K)|0)|0;i=K;F=0;G=0;H=z;I=x;J=1;break}else{L=+g[f+4>>2];Fv(0,91824,(K=i,i=i+16|0,h[K>>3]=+g[f>>2],h[K+8>>3]=L,K)|0)|0;i=K;F=0;G=0;H=z;I=x;J=1;break}}else{F=0;G=0;H=0;I=0;J=0}}while(0);if((a[213992]|0)!=0){z=c[o>>2]|0;do{if((F|0)!=0&(j|0)==8){M=81792}else{if((G|0)==0){M=159792;break}M=(j|0)==10?168024:163872}}while(0);gc(z|0,86592,(K=i,i=i+8|0,c[K>>2]=M,K)|0)|0;i=K}M=(G|0)!=0;do{if(M){z=ux(e)|0;if((z|0)==0){break}F=q;f=r|0;E=r+8|0;B=s|0;C=s+8|0;A=z;do{z=mw(e,A)|0;if((z|0)!=0){y=z;do{z=c[y+8>>2]|0;D=c[y>>2]&3;N=(c[((D|0)==3?y:y+32|0)+28>>2]|0)+8|0;O=c[N>>2]|0;L=+h[O+24>>3]+ +h[z+24>>3];h[f>>3]=+h[O+16>>3]+ +h[z+16>>3];h[E>>3]=L;O=(c[((D|0)==2?y:y-32|0)+28>>2]|0)+8|0;D=c[O>>2]|0;L=+h[D+24>>3]+ +h[z+64>>3];h[B>>3]=+h[D+16>>3]+ +h[z+56>>3];h[C>>3]=L;KB(G,r,c[(c[N>>2]|0)+284>>2]|0,s,c[(c[O>>2]|0)+284>>2]|0,F)|0;O=c[q+4>>2]|0;N=z+144|0;c[N>>2]=c[q>>2];c[N+4>>2]=O;y=ow(e,y)|0;}while((y|0)!=0)}A=vx(e,A)|0;}while((A|0)!=0)}}while(0);q=ux(e)|0;if((q|0)==0){P=0}else{s=t|0;r=t+8|0;A=u|0;F=u+8|0;C=e+48|0;B=(j|0)==10;E=n;f=p;x=m;w=c[o>>2]|0;y=l|0;O=l+4|0;N=0;z=q;while(1){q=mw(e,z)|0;if((q|0)==0){Q=N}else{D=z+8|0;R=N;S=q;while(1){q=c[((c[S>>2]&3|0)==2?S:S-32|0)+28>>2]|0;T=S+8|0;U=c[T>>2]|0;do{if(v){if((c[U+8>>2]|0)==0){V=33;break}W=c[D>>2]|0;L=+h[W+24>>3]+ +h[U+24>>3];h[s>>3]=+h[W+16>>3]+ +h[U+16>>3];h[r>>3]=L;W=c[q+8>>2]|0;X=c[T>>2]|0;L=+h[W+24>>3]+ +h[X+64>>3];h[A>>3]=+h[W+16>>3]+ +h[X+56>>3];h[F>>3]=L;nm(e,S,t,u);Y=R}else{V=33}}while(0);do{if((V|0)==33){V=0;T=b[U+168>>1]|0;X=T<<16>>16;if(T<<16>>16==0){Y=R;break}if((z|0)==(q|0)){if((R|0)==0){T=jk(96)|0;c[T+84>>2]=jk(((Lw(e)|0)<<5)+11520|0)|0;Z=T}else{Z=R}Gt(Z,S,c[(c[(c[C>>2]|0)+8>>2]|0)+236>>2]|0);Y=Z;break}if(!M){ll(e,S,j,11832);Y=R;break}T=(a[215376]|0)!=0?1:X;if((T|0)>0){_=0;$=S}else{Y=R;break}while(1){if(B){Jt(e,$,I,H,1);aa=$+8|0}else{X=$+8|0;W=(c[X>>2]|0)+144|0;ba=c[W>>2]|0;ca=c[W+4>>2]|0;c[m>>2]=ba;c[m+4>>2]=ca;W=ba;ba=W;c[E>>2]=c[ba>>2];c[E+4>>2]=c[ba+4>>2];c[E+8>>2]=c[ba+8>>2];c[E+12>>2]=c[ba+12>>2];ba=W+(ca-1<<4)|0;c[f>>2]=c[ba>>2];c[f+4>>2]=c[ba+4>>2];c[f+8>>2]=c[ba+8>>2];c[f+12>>2]=c[ba+12>>2];ZB(x,l);ba=$;if((d[213992]|0)>>>0>1>>>0){ca=$w(c[((c[ba>>2]&3|0)==3?$:$+32|0)+28>>2]|0)|0;W=$-32|0;da=$w(c[((c[ba>>2]&3|0)==2?$:W)+28>>2]|0)|0;gc(w|0,154792,(K=i,i=i+16|0,c[K>>2]=ca,c[K+8>>2]=da,K)|0)|0;i=K;ea=W}else{ea=$-32|0}cm($,c[((c[ba>>2]&3|0)==2?$:ea)+28>>2]|0,c[y>>2]|0,c[O>>2]|0,11832);nm(e,$,n,p);aa=X}X=_+1|0;if((X|0)<(T|0)){_=X;$=c[(c[aa>>2]|0)+172>>2]|0}else{Y=R;break}}}}while(0);q=ow(e,S)|0;if((q|0)==0){Q=Y;break}else{R=Y;S=q}}}S=vx(e,z)|0;if((S|0)==0){P=Q;break}else{N=Q;z=S}}}if(M){JB(G)}if((P|0)!=0){eF(c[P+84>>2]|0);eF(P)}if(!J){i=k;return 0}if((H|0)>0){J=0;do{eF(c[I+(J<<2)>>2]|0);J=J+1|0;}while((J|0)<(H|0))}eF(I);i=k;return 0}function Nt(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=b[(c[a+8>>2]|0)+128>>1]&14;Ot(a);if((e|0)==8){Fv(0,129344,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f;f=a+48|0;g=(c[(c[f>>2]|0)+8>>2]|0)+128|0;b[g>>1]=b[g>>1]&-9;g=(c[(c[f>>2]|0)+8>>2]|0)+128|0;b[g>>1]=b[g>>1]|6;h=6}else if((e|0)==0){i=d;return}else{h=e}Kt(a,4,h)|0;i=d;return}function Ot(b){b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;a:do{if((c[b+48>>2]|0)==(b|0)){d=b+8|0;e=c[d>>2]|0;f=c[e+8>>2]|0;g=c[f+84>>2]|0;if((g|0)==0){break}i=+h[e+16>>3];if(i<0.0){j=i+-.5}else{j=i+.5}if((~~j|0)!=0){cc(115816,108624,893,171072)}i=+h[e+24>>3];if(i<0.0){k=i+-.5}else{k=i+.5}if((~~k|0)!=0){cc(102968,108624,894,171072)}if((c[e+116>>2]&1|0)==0){l=e;m=f;n=g}else{g=e+32|0;i=+h[g>>3];h[g>>3]=+h[e+40>>3];h[(c[d>>2]|0)+40>>3]=i;e=c[d>>2]|0;d=c[e+8>>2]|0;l=e;m=d;n=c[d+84>>2]|0}do{if((n|0)==2){i=+h[m+64>>3];if(i<=0.0){break a}o=i/+h[l+32>>3];i=+h[m+72>>3]/+h[l+40>>3];if(!(o<1.0|i<1.0)){p=o;q=i;break}if(o<i){p=1.0;q=i/o;break}else{p=o/i;q=1.0;break}}else if((n|0)==1){i=+h[m+16>>3];o=+h[l+40>>3]/+h[l+32>>3];if(o<i){p=1.0;q=i/o;break}else{p=o/i;q=1.0;break}}else if((n|0)==5){i=+h[m+64>>3];if(i<=0.0){break a}o=i/+h[l+32>>3];i=+h[m+72>>3]/+h[l+40>>3];if(!(o>1.0&i>1.0)){break a}r=o<i?o:i;p=r;q=r}else{break a}}while(0);d=(c[l+116>>2]&1|0)==0;r=d?q:p;i=d?p:q;do{if((c[53566]|0)>1){d=ux(b)|0;if((d|0)==0){break}o=i+-1.0;s=r+-1.0;e=d;do{d=mw(b,e)|0;if((d|0)!=0){g=d;do{d=g+8|0;f=c[d>>2]|0;t=c[f+8>>2]|0;do{if((t|0)!=0){u=c[g>>2]&3;v=c[(c[(c[((u|0)==2?g:g-32|0)+28>>2]|0)+8>>2]|0)+132>>2]|0;w=o*+h[v>>3]*72.0;x=s*+h[v+8>>3]*72.0;v=c[(c[(c[((u|0)==3?g:g+32|0)+28>>2]|0)+8>>2]|0)+132>>2]|0;y=o*+h[v>>3]*72.0;z=s*+h[v+8>>3]*72.0;if((c[t+4>>2]|0)>0){v=c[t>>2]|0;u=0;while(1){A=v+4|0;B=c[A>>2]|0;if((B|0)>0){C=c[v>>2]|0;D=0;E=B;while(1){b:do{if((D|u|0)==0){B=C|0;h[B>>3]=y+ +h[B>>3];B=C+8|0;h[B>>3]=z+ +h[B>>3]}else{do{if((u|0)==((c[(c[(c[d>>2]|0)+8>>2]|0)+4>>2]|0)-1|0)){if((D|0)!=(E-1|0)){break}B=C|0;h[B>>3]=w+ +h[B>>3];B=C+8|0;h[B>>3]=x+ +h[B>>3];break b}}while(0);B=C|0;h[B>>3]=i*+h[B>>3];B=C+8|0;h[B>>3]=r*+h[B>>3]}}while(0);B=D+1|0;F=c[A>>2]|0;if((B|0)<(F|0)){C=C+16|0;D=B;E=F}else{break}}}if((c[v+8>>2]|0)!=0){E=v+16|0;h[E>>3]=y+ +h[E>>3];E=v+24|0;h[E>>3]=z+ +h[E>>3]}if((c[v+12>>2]|0)!=0){E=v+32|0;h[E>>3]=w+ +h[E>>3];E=v+40|0;h[E>>3]=x+ +h[E>>3]}E=u+1|0;D=c[d>>2]|0;if((E|0)<(c[(c[D+8>>2]|0)+4>>2]|0)){v=v+48|0;u=E}else{G=D;break}}}else{G=f}u=c[G+96>>2]|0;do{if((u|0)==0){H=G}else{if((a[u+81|0]|0)==0){H=G;break}v=u+56|0;h[v>>3]=i*+h[v>>3];v=(c[(c[d>>2]|0)+96>>2]|0)+64|0;h[v>>3]=r*+h[v>>3];H=c[d>>2]|0}}while(0);u=c[H+100>>2]|0;do{if((u|0)==0){I=H}else{if((a[u+81|0]|0)==0){I=H;break}v=u+56|0;h[v>>3]=w+ +h[v>>3];v=(c[(c[d>>2]|0)+100>>2]|0)+64|0;h[v>>3]=x+ +h[v>>3];I=c[d>>2]|0}}while(0);u=c[I+104>>2]|0;if((u|0)==0){break}if((a[u+81|0]|0)==0){break}v=u+56|0;h[v>>3]=y+ +h[v>>3];v=(c[(c[d>>2]|0)+104>>2]|0)+64|0;h[v>>3]=z+ +h[v>>3]}}while(0);g=ow(b,g)|0;}while((g|0)!=0)}e=vx(b,e)|0;}while((e|0)!=0)}}while(0);e=ux(b)|0;if((e|0)!=0){g=e;do{e=g+8|0;d=c[(c[e>>2]|0)+132>>2]|0;h[d>>3]=i*+h[d>>3];d=(c[(c[e>>2]|0)+132>>2]|0)+8|0;h[d>>3]=r*+h[d>>3];g=vx(b,g)|0;}while((g|0)!=0)}Rt(b,i,r)}}while(0);I=ux(b)|0;if((I|0)==0){return}else{J=I}do{I=J+8|0;H=c[I>>2]|0;h[H+16>>3]=+h[c[H+132>>2]>>3]*72.0;H=c[I>>2]|0;h[H+24>>3]=+h[(c[H+132>>2]|0)+8>>3]*72.0;J=vx(b,J)|0;}while((J|0)!=0);return}function Pt(a){a=a|0;var d=0,e=0,f=0,g=0.0,j=0.0,k=0,l=0,m=0;d=i;$m(a);e=a+8|0;f=c[e>>2]|0;g=+h[f+16>>3]/72.0;j=+h[f+24>>3]/72.0;f=ux(a)|0;if((f|0)!=0){k=f;do{f=k+8|0;l=c[(c[f>>2]|0)+132>>2]|0;h[l>>3]=+h[l>>3]-g;l=(c[(c[f>>2]|0)+132>>2]|0)+8|0;h[l>>3]=+h[l>>3]-j;k=vx(a,k)|0;}while((k|0)!=0)}k=c[e>>2]|0;Qt(a,+h[k+16>>3],+h[k+24>>3]);k=b[(c[e>>2]|0)+128>>1]&14;Ot(a);if((k|0)==0){i=d;return}else if((k|0)==8){Fv(0,129344,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0)|0;i=e;e=a+48|0;l=(c[(c[e>>2]|0)+8>>2]|0)+128|0;b[l>>1]=b[l>>1]&-9;l=(c[(c[e>>2]|0)+8>>2]|0)+128|0;b[l>>1]=b[l>>1]|6;m=6}else{m=k}Kt(a,4,m)|0;i=d;return}function Qt(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,g=0,i=0;e=a+8|0;a=c[e>>2]|0;if((c[a+172>>2]|0)<1){f=a}else{g=1;i=a;while(1){Qt(c[(c[i+176>>2]|0)+(g<<2)>>2]|0,b,d);a=c[e>>2]|0;if((g|0)<(c[a+172>>2]|0)){g=g+1|0;i=a}else{f=a;break}}}i=f+32|0;h[i>>3]=+h[i>>3]-b;i=(c[e>>2]|0)+40|0;h[i>>3]=+h[i>>3]-d;i=(c[e>>2]|0)+16|0;h[i>>3]=+h[i>>3]-b;i=(c[e>>2]|0)+24|0;h[i>>3]=+h[i>>3]-d;return}function Rt(b,d,e){b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0,k=0,l=0;f=b+8|0;b=(c[f>>2]|0)+32|0;h[b>>3]=+h[b>>3]*d;b=(c[f>>2]|0)+40|0;h[b>>3]=+h[b>>3]*e;b=(c[f>>2]|0)+16|0;h[b>>3]=+h[b>>3]*d;b=(c[f>>2]|0)+24|0;h[b>>3]=+h[b>>3]*e;b=c[f>>2]|0;g=c[b+12>>2]|0;do{if((g|0)==0){i=b}else{if((a[g+81|0]|0)==0){i=b;break}j=g+56|0;h[j>>3]=+h[j>>3]*d;j=(c[(c[f>>2]|0)+12>>2]|0)+64|0;h[j>>3]=+h[j>>3]*e;i=c[f>>2]|0}}while(0);if((c[i+172>>2]|0)<1){return}else{k=1;l=i}while(1){Rt(c[(c[l+176>>2]|0)+(k<<2)>>2]|0,d,e);i=c[f>>2]|0;if((k|0)<(c[i+172>>2]|0)){k=k+1|0;l=i}else{break}}return}function St(a){a=a|0;return 0}function Tt(a){a=a|0;return 0}function Ut(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0.0,A=0,B=0.0,C=0,D=0,E=0;g=kk(f<<2)|0;i=g;j=(f|0)>0;k=b<<3;if(j){l=0;do{c[i+(l<<2)>>2]=kk(k)|0;l=l+1|0;}while((l|0)<(f|0))}l=kk(f<<3)|0;m=l;n=kk(b<<2)|0;o=n;p=kk(da(k,b)|0)|0;k=(b|0)>0;do{if(k){q=0;r=p;while(1){c[o+(q<<2)>>2]=r;s=q+1|0;if((s|0)<(b|0)){q=s;r=r+(b<<3)|0}else{break}}if(!k){break}r=(d|0)>0;q=0;do{s=o+(q<<2)|0;t=a+(q<<2)|0;u=0;while(1){if(r){v=c[t>>2]|0;w=c[a+(u<<2)>>2]|0;x=0.0;y=0;while(1){z=x+ +(da(c[w+(y<<2)>>2]|0,c[v+(y<<2)>>2]|0)|0);A=y+1|0;if((A|0)<(d|0)){x=z;y=A}else{B=z;break}}}else{B=0.0}h[(c[o+(u<<2)>>2]|0)+(q<<3)>>3]=B;h[(c[s>>2]|0)+(u<<3)>>3]=B;if((u|0)<(q|0)){u=u+1|0}else{break}}q=q+1|0;}while((q|0)<(b|0))}}while(0);Ns(o,b,f,i,m,1)|0;if(!j){eF(g);eF(l);C=c[o>>2]|0;D=C;eF(D);eF(n);return}do{if((d|0)>0){m=0;do{p=e+(m<<2)|0;q=i+(m<<2)|0;if(k){r=0;do{u=c[q>>2]|0;B=0.0;s=0;do{B=B+ +(c[(c[a+(s<<2)>>2]|0)+(r<<2)>>2]|0)*+h[u+(s<<3)>>3];s=s+1|0;}while((s|0)<(b|0));h[(c[p>>2]|0)+(r<<3)>>3]=B;r=r+1|0;}while((r|0)<(d|0))}else{r=0;do{h[(c[p>>2]|0)+(r<<3)>>3]=0.0;r=r+1|0;}while((r|0)<(d|0))}m=m+1|0;}while((m|0)<(f|0));if(j){E=0;break}eF(g);eF(l);C=c[o>>2]|0;D=C;eF(D);eF(n);return}else{E=0}}while(0);do{eF(c[i+(E<<2)>>2]|0);E=E+1|0;}while((E|0)<(f|0));eF(g);eF(l);C=c[o>>2]|0;D=C;eF(D);eF(n);return}function Vt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+40|0;g=f|0;h=f+8|0;j=f+16|0;k=f+24|0;c[g>>2]=e;c[j>>2]=0;c[k>>2]=0;zr(c[a>>2]|0,d,d<<2,h);Rs(c[h>>2]|0,a,d,b,j);Qs(a,c[j>>2]|0,b,d,b,k);eF(c[c[j>>2]>>2]|0);eF(c[j>>2]|0);j=(Ns(c[k>>2]|0,b,1,g,f+32|0,1)|0)&255;i=f;return j|0}function Wt(){c[44372]=0;eF(c[43678]|0);eF(c[43676]|0);eF(c[43674]|0);c[43678]=0;c[43676]=0;c[43674]=0;return}function Xt(a){a=a|0;eF(c[a+36>>2]|0);return}function Yt(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0;g=i;j=d+8|0;k=c[j>>2]|0;a:do{if((c[k+212>>2]|0)==0){l=pl(d)|0;if((l|0)==1){m=c[j>>2]|0;n=c[m+12>>2]|0;o=c[n+8>>2]|0;p=c[c[m+8>>2]>>2]|0;m=a[p]|0;do{if((m<<24>>24|0)==112){if((Ya(p|0,158472)|0)!=0){q=18;break}r=c[n+44>>2]|0;if((o|0)!=4){q=18;break}s=+h[r+8>>3];t=r+16|0;u=+h[r+24>>3];if(s==u){if(+h[r+40>>3]!=+h[r+56>>3]){q=18;break}if(+h[r>>3]!=+h[r+48>>3]){q=18;break}if(+h[t>>3]!=+h[r+32>>3]){q=18;break}}else{if(+h[r>>3]!=+h[t>>3]){q=21;break}if(+h[r+32>>3]!=+h[r+48>>3]){q=18;break}if(s!=+h[r+56>>3]){q=18;break}if(u!=+h[r+40>>3]){q=18;break}}c[b+40>>2]=1;q=22}else if((m<<24>>24|0)==98){if((Ya(p|0,121888)|0)!=0){q=18;break}c[b+40>>2]=1;q=22}else{q=18}}while(0);do{if((q|0)==18){if((o|0)>=3){q=21;break}if((c[n>>2]|0)==0){q=21;break}c[b+40>>2]=2}}while(0);if((q|0)==21){c[b+40>>2]=0;q=22}do{if((q|0)==22){if((o|0)<=2){break}p=kk(o<<4)|0;m=p;if((c[b+40>>2]|0)==1){r=n+44|0;u=e;h[p>>3]=u+ +h[c[r>>2]>>3]/72.0;s=f;h[p+8>>3]=s+ +h[(c[r>>2]|0)+8>>3]/72.0;h[p+16>>3]=+h[(c[r>>2]|0)+16>>3]/72.0-u;h[p+24>>3]=s+ +h[(c[r>>2]|0)+24>>3]/72.0;h[p+32>>3]=+h[(c[r>>2]|0)+32>>3]/72.0-u;h[p+40>>3]=+h[(c[r>>2]|0)+40>>3]/72.0-s;h[p+48>>3]=u+ +h[(c[r>>2]|0)+48>>3]/72.0;h[p+56>>3]=+h[(c[r>>2]|0)+56>>3]/72.0-s;v=m;w=o;break a}if((o|0)<=0){v=m;w=o;break a}r=n+44|0;s=e;u=f;p=0;while(1){t=c[r>>2]|0;x=+h[t+(p<<4)>>3];y=+h[t+(p<<4)+8>>3];z=+T(x*x+y*y);y=x*(s/z+1.0);t=m+(p<<4)|0;h[t>>3]=y;x=+h[(c[r>>2]|0)+(p<<4)+8>>3]*(u/z+1.0);h[t>>3]=y/72.0;h[m+(p<<4)+8>>3]=x/72.0;t=p+1|0;if((t|0)<(o|0)){p=t}else{v=m;w=o;break a}}}}while(0);o=ew(d|0,108448)|0;if((o|0)==0){A=0}else{A=Rb(o|0)|0}o=(A|0)<3?20:A;n=kk(o<<4)|0;if((o|0)<=0){v=n;w=o;break}u=e;s=+(o|0);x=f;m=0;while(1){y=+(m|0)/s*3.141592653589793*2.0;h[n+(m<<4)>>3]=(u+ +h[(c[j>>2]|0)+32>>3]*.5)*+V(y);h[n+(m<<4)+8>>3]=+W(y)*(x+ +h[(c[j>>2]|0)+40>>3]*.5);p=m+1|0;if((p|0)<(o|0)){m=p}else{v=n;w=o;break}}}else if((l|0)==2){o=kk(64)|0;n=c[(c[j>>2]|0)+12>>2]|0;x=+h[n+32>>3];u=+h[n+40>>3];s=-0.0-e+ +(~~+h[n+16>>3]|0)/72.0;y=-0.0-f+ +(~~+h[n+24>>3]|0)/72.0;h[o>>3]=s;h[o+8>>3]=y;z=e+ +(~~x|0)/72.0;h[o+16>>3]=z;h[o+24>>3]=y;y=f+ +(~~u|0)/72.0;h[o+32>>3]=z;h[o+40>>3]=y;h[o+48>>3]=s;h[o+56>>3]=y;c[b+40>>2]=1;v=o;w=4;break}else if((l|0)==3){c[b+40>>2]=2;o=ew(d|0,108448)|0;if((o|0)==0){B=0}else{B=Rb(o|0)|0}o=(B|0)<3?20:B;n=kk(o<<4)|0;if((o|0)<=0){v=n;w=o;break}y=e;s=+(o|0);z=f;m=0;while(1){u=+(m|0)/s*3.141592653589793*2.0;h[n+(m<<4)>>3]=(y+ +h[(c[j>>2]|0)+32>>3]*.5)*+V(u);h[n+(m<<4)+8>>3]=+W(u)*(z+ +h[(c[j>>2]|0)+40>>3]*.5);p=m+1|0;if((p|0)<(o|0)){m=p}else{v=n;w=o;break}}}else{Fv(1,128392,(o=i,i=i+8|0,c[o>>2]=c[c[(c[j>>2]|0)+8>>2]>>2],o)|0)|0;i=o;C=1;i=g;return C|0}}else{z=e+ +h[k+32>>3]*.5;y=f+ +h[k+40>>3]*.5;c[b+40>>2]=1;o=kk(64)|0;h[o>>3]=z;h[o+8>>3]=y;s=-0.0-z;h[o+16>>3]=s;h[o+24>>3]=y;h[o+32>>3]=s;s=-0.0-y;h[o+40>>3]=s;h[o+48>>3]=z;h[o+56>>3]=s;v=o;w=4}}while(0);c[b+36>>2]=v;c[b+32>>2]=w;f=+h[v>>3];e=+h[v+8>>3];if((w|0)>1){k=v;s=f;z=e;y=f;u=e;v=1;while(1){j=k+16|0;x=+h[j>>3];D=x<s?x:s;E=+h[k+24>>3];F=E<z?E:z;G=x>y?x:y;x=E>u?E:u;B=v+1|0;if((B|0)<(w|0)){k=j;s=D;z=F;y=G;u=x;v=B}else{H=D;I=F;J=G;K=x;break}}}else{H=f;I=e;J=f;K=e}h[b>>3]=H;h[b+8>>3]=I;h[b+16>>3]=J;h[b+24>>3]=K;if((w|0)<=(c[44372]|0)){C=0;i=g;return C|0}c[44372]=w;C=0;i=g;return C|0}function Zt(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0;g=i;j=d+8|0;k=c[j>>2]|0;a:do{if((c[k+212>>2]|0)==0){l=pl(d)|0;if((l|0)==2){m=kk(64)|0;n=c[(c[j>>2]|0)+12>>2]|0;o=+h[n+32>>3];p=+h[n+40>>3];q=+h[n+16>>3]/72.0;r=+h[n+24>>3]/72.0;h[m>>3]=q;h[m+8>>3]=r;s=o/72.0;h[m+16>>3]=s;h[m+24>>3]=r;r=p/72.0;h[m+32>>3]=s;h[m+40>>3]=r;h[m+48>>3]=q;h[m+56>>3]=r;c[b+40>>2]=1;t=m;u=4;v=36;break}else if((l|0)==1){m=c[(c[j>>2]|0)+12>>2]|0;n=m+8|0;w=c[n>>2]|0;do{if((w|0)>2){x=kk(w<<4)|0;y=m+44|0;z=0;while(1){h[x+(z<<4)>>3]=+h[(c[y>>2]|0)+(z<<4)>>3]/72.0;h[x+(z<<4)+8>>3]=+h[(c[y>>2]|0)+(z<<4)+8>>3]/72.0;A=z+1|0;if((A|0)<(w|0)){z=A}else{B=x;C=w;break}}}else{x=ew(d|0,108448)|0;if((x|0)==0){D=0}else{D=Rb(x|0)|0}x=(D|0)<3?20:D;z=kk(x<<4)|0;if((x|0)<=0){B=z;C=x;break}r=+(x|0);y=0;while(1){q=+(y|0)/r*3.141592653589793*2.0;h[z+(y<<4)>>3]=(+h[(c[j>>2]|0)+32>>3]*.5+0.0)*+V(q);h[z+(y<<4)+8>>3]=+W(q)*(+h[(c[j>>2]|0)+40>>3]*.5+0.0);A=y+1|0;if((A|0)<(x|0)){y=A}else{B=z;C=x;break}}}}while(0);w=c[c[(c[j>>2]|0)+8>>2]>>2]|0;x=a[w]|0;do{if((x<<24>>24|0)==98){if((Ya(w|0,121888)|0)!=0){break}c[b+40>>2]=1;t=B;u=C;v=36;break a}else if((x<<24>>24|0)==112){if(!((Ya(w|0,158472)|0)==0&(C|0)==4)){break}r=+h[B+8>>3];z=B+16|0;q=+h[B+24>>3];if(r==q){if(+h[B+40>>3]!=+h[B+56>>3]){break}if(+h[B>>3]!=+h[B+48>>3]){break}if(+h[z>>3]!=+h[B+32>>3]){break}}else{if(+h[B>>3]!=+h[z>>3]){break}if(+h[B+32>>3]!=+h[B+48>>3]){break}if(r!=+h[B+56>>3]){break}if(q!=+h[B+40>>3]){break}}c[b+40>>2]=1;t=B;u=4;v=36;break a}}while(0);do{if((c[n>>2]|0)<3){if((c[m>>2]|0)==0){break}c[b+40>>2]=2;t=B;u=C;v=36;break a}}while(0);c[b+40>>2]=0;t=B;u=C;v=36;break}else if((l|0)==3){c[b+40>>2]=2;m=ew(d|0,108448)|0;if((m|0)==0){E=0}else{E=Rb(m|0)|0}m=(E|0)<3?20:E;n=kk(m<<4)|0;if((m|0)<=0){F=m;G=n;break}q=+(m|0);w=0;while(1){r=+(w|0)/q*3.141592653589793*2.0;h[n+(w<<4)>>3]=(+h[(c[j>>2]|0)+32>>3]*.5+0.0)*+V(r);h[n+(w<<4)+8>>3]=+W(r)*(+h[(c[j>>2]|0)+40>>3]*.5+0.0);x=w+1|0;if((x|0)<(m|0)){w=x}else{t=n;u=m;v=36;break}}}else{Fv(1,115584,(m=i,i=i+8|0,c[m>>2]=c[c[(c[j>>2]|0)+8>>2]>>2],m)|0)|0;i=m;H=1;i=g;return H|0}}else{q=+h[k+32>>3]*.5;r=+h[k+40>>3]*.5;c[b+40>>2]=1;m=kk(64)|0;h[m>>3]=q;h[m+8>>3]=r;s=-0.0-q;h[m+16>>3]=s;h[m+24>>3]=r;h[m+32>>3]=s;s=-0.0-r;h[m+40>>3]=s;h[m+48>>3]=q;h[m+56>>3]=s;t=m;u=4;v=36}}while(0);do{if((v|0)==36){if(!((e!=1.0|f!=1.0)&(u|0)>0)){F=u;G=t;break}s=e;q=f;k=0;j=t;while(1){E=j|0;h[E>>3]=s*+h[E>>3];E=j+8|0;h[E>>3]=q*+h[E>>3];E=k+1|0;if((E|0)<(u|0)){k=E;j=j+16|0}else{F=u;G=t;break}}}}while(0);c[b+36>>2]=G;c[b+32>>2]=F;f=+h[G>>3];e=+h[G+8>>3];if((F|0)>1){t=G;q=f;s=e;r=f;p=e;G=1;while(1){u=t+16|0;o=+h[u>>3];I=o<q?o:q;J=+h[t+24>>3];K=J<s?J:s;L=o>r?o:r;o=J>p?J:p;v=G+1|0;if((v|0)<(F|0)){t=u;q=I;s=K;r=L;p=o;G=v}else{M=I;N=K;O=L;P=o;break}}}else{M=f;N=e;O=f;P=e}h[b>>3]=M;h[b+8>>3]=N;h[b+16>>3]=O;h[b+24>>3]=P;if((F|0)<=(c[44372]|0)){H=0;i=g;return H|0}c[44372]=F;H=0;i=g;return H|0}function _t(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;f=i;i=i+112|0;g=a;a=i;i=i+16|0;c[a>>2]=c[g>>2];c[a+4>>2]=c[g+4>>2];c[a+8>>2]=c[g+8>>2];c[a+12>>2]=c[g+12>>2];g=d;d=i;i=i+16|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];g=f|0;j=f+16|0;k=f+32|0;l=f+48|0;m=f+64|0;n=f+80|0;o=f+96|0;as(l,a,b|0);p=b+16|0;as(m,a,p);as(n,d,e|0);q=e+16|0;as(o,d,q);r=l|0;s=l+8|0;l=m|0;t=m+8|0;m=n|0;u=n+8|0;n=o|0;v=o+8|0;if(+h[r>>3]>+h[n>>3]|+h[m>>3]>+h[l>>3]|+h[s>>3]>+h[v>>3]){w=0;i=f;return w|0}if(+h[u>>3]>+h[t>>3]){w=0;i=f;return w|0}o=c[b+40>>2]|0;do{if((o&1|0)!=0){if((c[e+40>>2]&1|0)==0){break}else{w=1}i=f;return w|0}}while(0);do{if((o&2|0)!=0){if((c[e+40>>2]&2|0)==0){break}x=+h[p>>3]- +h[b>>3]+ +h[q>>3]- +h[e>>3];y=+h[a>>3]- +h[d>>3];z=+h[a+8>>3]- +h[d+8>>3];w=y*y+z*z<=x*x*.25|0;i=f;return w|0}}while(0);if((c[43678]|0)==0){c[43678]=kk(c[44372]<<4)|0;c[43676]=kk(c[44372]<<4)|0}q=b+32|0;p=c[q>>2]|0;x=+h[a>>3];z=+h[a+8>>3];if((p|0)>0){a=c[b+36>>2]|0;b=c[43678]|0;o=0;while(1){h[b>>3]=x+ +h[a>>3];h[b+8>>3]=z+ +h[a+8>>3];A=o+1|0;if((A|0)<(p|0)){a=a+16|0;b=b+16|0;o=A}else{break}}}o=e+32|0;b=c[o>>2]|0;z=+h[d>>3];x=+h[d+8>>3];if((b|0)>0){d=c[43676]|0;a=c[e+36>>2]|0;e=d;p=0;while(1){h[e>>3]=z+ +h[a>>3];h[e+8>>3]=x+ +h[a+8>>3];A=p+1|0;if((A|0)<(b|0)){a=a+16|0;e=e+16|0;p=A}else{break}}B=c[o>>2]|0;C=d}else{B=b;C=c[43676]|0}b=c[43678]|0;d=c[q>>2]|0;p=d-1|0;e=B-1|0;a=d<<1;A=B<<1;D=0;E=0;F=0;G=0;while(1){H=b+(D<<4)|0;I=b+(((p+D|0)%(d|0)|0)<<4)|0;$r(g,H,I);J=C+(E<<4)|0;K=C+(((e+E|0)%(B|0)|0)<<4)|0;$r(j,J,K);x=+bs(177e3,g,j);L=cs(I,H,J)|0;M=cs(K,J,H)|0;if((ds(I,H,K,J,k)|0)!=0){w=1;N=36;break}J=(L|0)==0;L=(M|0)==0;do{if(x==0.0&J&L){O=(D+1|0)%(d|0)|0;P=E;Q=F+1|0;R=G}else{if(x<0.0){if(L){O=(D+1|0)%(d|0)|0;P=E;Q=F+1|0;R=G;break}else{O=D;P=(E+1|0)%(B|0)|0;Q=F;R=G+1|0;break}}else{if(J){O=D;P=(E+1|0)%(B|0)|0;Q=F;R=G+1|0;break}else{O=(D+1|0)%(d|0)|0;P=E;Q=F+1|0;R=G;break}}}}while(0);if(((Q|0)<(d|0)|(R|0)<(B|0))&(Q|0)<(a|0)&(R|0)<(A|0)){D=O;E=P;F=Q;G=R}else{break}}if((N|0)==36){i=f;return w|0}N=c[43678]|0;x=+h[N>>3];z=+h[N+8>>3];do{if(!(x>+h[n>>3]|x<+h[m>>3]|z>+h[v>>3])){if(z<+h[u>>3]){break}if(($t(c[43676]|0,c[o>>2]|0,x,z)|0)==0){break}else{w=1}i=f;return w|0}}while(0);o=c[43676]|0;z=+h[o>>3];x=+h[o+8>>3];if(z>+h[l>>3]|z<+h[r>>3]|x>+h[t>>3]){w=0;i=f;return w|0}if(x<+h[s>>3]){w=0;i=f;return w|0}w=($t(c[43678]|0,c[q>>2]|0,z,x)|0)!=0|0;i=f;return w|0}function $t(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,i=0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0;f=c[43674]|0;if((f|0)==0){g=kk(c[44372]<<4)|0;c[43674]=g;i=g}else{i=f}f=(b|0)>0;a:do{if(f){g=0;do{h[i+(g<<4)>>3]=+h[a+(g<<4)>>3]-d;h[i+(g<<4)+8>>3]=+h[a+(g<<4)+8>>3]-e;g=g+1|0;}while((g|0)<(b|0));if(!f){j=0.0;break}g=b-1|0;k=0;l=0.0;b:while(1){m=(g+k|0)%(b|0)|0;n=+h[i+(k<<4)+8>>3];o=n==0.0;do{if(o){if(+h[i+(m<<4)+8>>3]!=0.0){p=10;break}if(+h[i+(k<<4)>>3]*+h[i+(m<<4)>>3]<0.0){q=1;p=19;break b}else{r=l}}else{p=10}}while(0);do{if((p|0)==10){p=0;s=+h[i+(m<<4)+8>>3];if(n<0.0|s>0.0){if(s<0.0|n>0.0){r=l;break}}t=(+h[i+(k<<4)>>3]*s- +h[i+(m<<4)>>3]*n)/(s-n);if(t==0.0){q=1;p=19;break b}if(t<=0.0){r=l;break}if(o|s==0.0){r=l+.5;break}else{r=l+1.0;break}}}while(0);o=k+1|0;if((o|0)<(b|0)){k=o;l=r}else{j=r;break a}}if((p|0)==19){return q|0}}else{j=0.0}}while(0);q=((~~j|0)%2|0|0)==1|0;return q|0}function au(){nt(175056,24);c[44268]=0;return}function bu(){return ot(175056)|0}function cu(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+h[a>>3]- +h[b>>3];d=+h[a+8>>3]- +h[b+8>>3];return+(+T(c*c+d*d))}function du(a){a=a|0;c[a+16>>2]=c[44268];c[44268]=(c[44268]|0)+1;return}function eu(a){a=a|0;var b=0,d=0;b=a+20|0;d=(c[b>>2]|0)-1|0;c[b>>2]=d;if((d|0)!=0){return}pt(a,175056);return}function fu(a){a=a|0;var b=0;b=a+20|0;c[b>>2]=(c[b>>2]|0)+1;return}function gu(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0,F=0;e=da(d,d)|0;f=kk(e<<3)|0;g=f;i=kk(d<<3)|0;j=i;k=(d|0)>0;if(k){l=0;do{h[j+(l<<3)>>3]=+h[c+(l<<3)>>3];l=l+1|0;}while((l|0)<(d|0))}l=(e|0)==0;if(!l){m=0;do{h[g+(m<<3)>>3]=+h[a+(m<<3)>>3];m=m+1|0;}while((m|0)<(e|0))}m=d-1|0;n=(m|0)>0;a:do{if(n){o=0;p=0;while(1){q=(p|0)<(d|0);if(q){r=o;s=p;t=0.0}else{break a}do{u=+S(+(+h[a+((da(s,d)|0)+p<<3)>>3]));v=u<t;r=v?r:s;t=v?t:u;s=s+1|0;}while((s|0)<(d|0));if(t<1.0e-10){break a}if(q){v=da(r,d)|0;w=da(p,d)|0;x=p;do{y=a+(x+v<<3)|0;u=+h[y>>3];z=a+(x+w<<3)|0;h[y>>3]=+h[z>>3];h[z>>3]=u;x=x+1|0;}while((x|0)<(d|0))}x=c+(r<<3)|0;u=+h[x>>3];w=c+(p<<3)|0;h[x>>3]=+h[w>>3];h[w>>3]=u;x=p+1|0;b:do{if((x|0)<(d|0)){v=da(p,d)|0;q=a+(v+p<<3)|0;if(k){A=x;B=u}else{z=x;C=u;while(1){D=+h[a+((da(z,d)|0)+p<<3)>>3];y=c+(z<<3)|0;h[y>>3]=+h[y>>3]-D/+h[q>>3]*C;y=z+1|0;if((y|0)>=(d|0)){break b}z=y;C=+h[w>>3]}}while(1){z=da(A,d)|0;C=+h[a+(z+p<<3)>>3]/+h[q>>3];y=c+(A<<3)|0;h[y>>3]=+h[y>>3]-C*B;y=0;do{E=a+(y+z<<3)|0;h[E>>3]=+h[E>>3]-C*+h[a+(y+v<<3)>>3];y=y+1|0;}while((y|0)<(d|0));y=A+1|0;if((y|0)>=(d|0)){break b}A=y;B=+h[w>>3]}}}while(0);if((x|0)<(m|0)){o=r;p=x}else{F=21;break}}}else{F=21}}while(0);do{if((F|0)==21){B=+h[a+(e-1<<3)>>3];if(+S(+B)<1.0e-10){break}h[b+(m<<3)>>3]=+h[c+(m<<3)>>3]/B;if(n){r=0;do{A=d-r|0;s=A-2|0;B=+h[c+(s<<3)>>3];p=b+(s<<3)|0;h[p>>3]=B;o=da(s,d)|0;w=A-1|0;t=B;do{t=t- +h[a+(w+o<<3)>>3]*+h[b+(w<<3)>>3];h[p>>3]=t;w=w+1|0;}while((w|0)<(d|0));h[p>>3]=t/+h[a+(o+s<<3)>>3];r=r+1|0;}while((r|0)<(m|0))}if(k){r=0;do{h[c+(r<<3)>>3]=+h[j+(r<<3)>>3];r=r+1|0;}while((r|0)<(d|0))}if(!l){r=0;do{h[a+(r<<3)>>3]=+h[g+(r<<3)>>3];r=r+1|0;}while((r|0)<(e|0))}eF(f);eF(i);return}}while(0);ib(10408)|0;eF(f);eF(i);return}function hu(b,e,f,g,i){b=b|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0;b=c[g>>2]|0;j=c[g+4>>2]|0;a:do{if((e|0)>0){if((f|0)>2){k=b;l=j;m=0;n=0}else{o=b;p=j;q=0;r=0;while(1){s=(c[i+(q<<2)>>2]|0)+8|0;t=c[s>>2]|0;if((a[t+119|0]|0)==0){h[o>>3]=+wn();h[p>>3]=+wn();u=r}else{v=c[t+132>>2]|0;h[o>>3]=+h[v>>3];h[p>>3]=+h[v+8>>3];u=(d[(c[s>>2]|0)+119|0]|0)>>>0>1>>>0?1:r}s=q+1|0;if((s|0)<(e|0)){o=o+8|0;p=p+8|0;q=s;r=u}else{w=u;break a}}}while(1){r=(c[i+(m<<2)>>2]|0)+8|0;q=c[r>>2]|0;if((a[q+119|0]|0)==0){h[k>>3]=+wn();h[l>>3]=+wn();p=2;while(1){x=+wn();h[(c[g+(p<<2)>>2]|0)+(m<<3)>>3]=x;o=p+1|0;if((o|0)<(f|0)){p=o}else{y=n;break}}}else{p=c[q+132>>2]|0;h[k>>3]=+h[p>>3];h[l>>3]=+h[p+8>>3];o=p+16|0;p=2;while(1){h[(c[g+(p<<2)>>2]|0)+(m<<3)>>3]=+h[o>>3];s=p+1|0;if((s|0)<(f|0)){o=o+8|0;p=s}else{break}}y=(d[(c[r>>2]|0)+119|0]|0)>>>0>1>>>0?1:n}p=m+1|0;if((p|0)<(e|0)){k=k+8|0;l=l+8|0;m=p;n=y}else{w=y;break}}}else{w=0}}while(0);if((f|0)>0){z=0}else{return w|0}do{Ss(e,c[g+(z<<2)>>2]|0);z=z+1|0;}while((z|0)<(f|0));return w|0}function iu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0.0;d=jk(((da(b+1|0,b)|0)/2|0)<<2)|0;e=d;f=pu(b,b,0.0)|0;i=pu(b,b,0.0)|0;j=(b|0)>0;do{if((c[a+8>>2]|0)==0){if(j){k=0}else{break}do{l=a+(k<<4)|0;if((c[l>>2]|0)>1){m=a+(k<<4)+4|0;n=f+(k<<2)|0;o=1;do{p=c[(c[m>>2]|0)+(o<<2)>>2]|0;h[(c[f+(p<<2)>>2]|0)+(k<<3)>>3]=-1.0;h[(c[n>>2]|0)+(p<<3)>>3]=-1.0;o=o+1|0;}while((o|0)<(c[l>>2]|0))}k=k+1|0;}while((k|0)<(b|0))}else{if(j){q=0}else{break}do{l=a+(q<<4)|0;if((c[l>>2]|0)>1){o=a+(q<<4)+4|0;n=a+(q<<4)+8|0;m=f+(q<<2)|0;p=1;do{r=c[(c[o>>2]|0)+(p<<2)>>2]|0;s=-1.0/+g[(c[n>>2]|0)+(p<<2)>>2];h[(c[f+(r<<2)>>2]|0)+(q<<3)>>3]=s;h[(c[m>>2]|0)+(r<<3)>>3]=s;p=p+1|0;}while((p|0)<(c[l>>2]|0))}q=q+1|0;}while((q|0)<(b|0))}}while(0);if((xr(b,f,i)|0)==0){eF(d);t=0;qu(f);qu(i);return t|0}if((b|0)>0){u=0;v=0;w=b}else{t=e;qu(f);qu(i);return t|0}while(1){d=i+(v<<2)|0;q=u;a=v;while(1){if((v|0)==(a|0)){x=0.0}else{j=c[d>>2]|0;x=+h[j+(v<<3)>>3]+ +h[(c[i+(a<<2)>>2]|0)+(a<<3)>>3]- +h[j+(a<<3)>>3]*2.0}g[e+(q<<2)>>2]=x;j=a+1|0;if((j|0)<(b|0)){q=q+1|0;a=j}else{break}}a=v+1|0;if((a|0)<(b|0)){u=u+w|0;v=a;w=w-1|0}else{t=e;break}}qu(f);qu(i);return t|0}function ju(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0.0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0,A=0.0,B=0.0,C=0.0;e=i;if((c[b+8>>2]|0)==0){f=0;i=e;return f|0}j=ku(b,d)|0;if((d|0)>0){k=0;l=0;m=0.0;while(1){n=l+k|0;p=b+(k<<4)|0;q=c[p>>2]|0;if((q|0)>1){r=b+(k<<4)+4|0;s=(da(k,d)|0)-n|0;t=b+(k<<4)+8|0;u=1;v=m;w=q;while(1){q=c[(c[r>>2]|0)+(u<<2)>>2]|0;if((q|0)<(k|0)){x=v;y=w}else{z=j+(s+q<<2)|0;A=+g[(c[t>>2]|0)+(u<<2)>>2];q=~~(+g[z>>2]-A);g[z>>2]=A;x=v+ +(((q|0)>-1?q:-q|0)|0);y=c[p>>2]|0}q=u+1|0;if((q|0)<(y|0)){u=q;v=x;w=y}else{B=x;break}}}else{B=m}w=k+1|0;if((w|0)<(d|0)){k=w;l=n;m=B}else{C=B;break}}}else{C=0.0}if((a[213992]|0)==0){f=j;i=e;return f|0}gc(c[o>>2]|0,119712,(l=i,i=i+8|0,h[l>>3]=C,l)|0)|0;i=l;f=j;i=e;return f|0}function ku(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;c=i;i=i+16|0;d=c|0;e=jk(((da(b+1|0,b)|0)/2|0)<<2)|0;f=jk(b<<2)|0;h=f;vr(d,b);if((b|0)>0){j=0;k=0;l=b}else{eF(f);wr(d);i=c;return e|0}while(1){Sr(k,a,b,h);m=j;n=k;while(1){g[e+(m<<2)>>2]=+g[h+(n<<2)>>2];o=n+1|0;if((o|0)<(b|0)){m=m+1|0;n=o}else{break}}n=k+1|0;if((n|0)<(b|0)){j=j+l|0;k=n;l=l-1|0}else{break}}eF(f);wr(d);i=c;return e|0}function lu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;i=i+16|0;e=d|0;f=jk(((da(b+1|0,b)|0)/2|0)<<2)|0;h=jk(b<<2)|0;j=h;vr(e,b);if((b|0)>0){k=0;l=0;m=b}else{eF(h);wr(e);i=d;return f|0}while(1){ur(l,a,b,j,e);n=k;o=l;while(1){g[f+(n<<2)>>2]=+(c[j+(o<<2)>>2]|0);p=o+1|0;if((p|0)<(b|0)){n=n+1|0;o=p}else{break}}o=l+1|0;if((o|0)<(b|0)){k=k+m|0;l=o;m=m-1|0}else{break}}eF(h);wr(e);i=d;return f|0}function mu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0;d=a+8|0;e=c[d>>2]|0;f=(b|0)>0;if(f){h=0;i=0;do{i=(c[a+(h<<4)>>2]|0)+i|0;h=h+1|0;}while((h|0)<(b|0));j=i<<2}else{j=0}i=jk(j)|0;j=b<<2;h=jk(j)|0;k=h;if(f){vF(h|0,0,j|0)|0}if((c[d>>2]|0)==0){if(f){j=0;l=i;while(1){c[a+(j<<4)+8>>2]=l;As(a,j,k);m=a+(j<<4)|0;n=c[m>>2]|0;o=n-1|0;if((n|0)>=2){n=a+(j<<4)+4|0;p=+(o|0);q=1;while(1){r=c[(c[n>>2]|0)+(q<<2)>>2]|0;s=p+ +((c[a+(r<<4)>>2]|0)-1|0);g[l+(q<<2)>>2]=s- +((zs(a,j,r,k)|0)<<1|0);if((q|0)<(o|0)){q=q+1|0}else{break}}}Bs(a,j,k);q=j+1|0;if((q|0)<(b|0)){j=q;l=l+(c[m>>2]<<2)|0}else{break}}}t=lu(a,b)|0}else{if(f){l=0;j=i;while(1){As(a,l,k);i=a+(l<<4)|0;q=c[i>>2]|0;o=q-1|0;if((q|0)<2){u=a+(l<<4)+8|0}else{n=a+(l<<4)+4|0;r=q-2|0;q=a+(l<<4)+8|0;v=1;while(1){w=c[(c[n>>2]|0)+(v<<2)>>2]|0;x=r+(c[a+(w<<4)>>2]|0)|0;p=+(x-((zs(a,l,w,k)|0)<<1)|0);s=+g[(c[q>>2]|0)+(v<<2)>>2];if(p>s){y=+(x-((zs(a,l,w,k)|0)<<1)|0)}else{y=s}g[j+(v<<2)>>2]=y;if((v|0)<(o|0)){v=v+1|0}else{u=q;break}}}Bs(a,l,k);c[u>>2]=j;q=l+1|0;if((q|0)<(b|0)){l=q;j=j+(c[i>>2]<<2)|0}else{break}}}t=ku(a,b)|0}eF(h);eF(c[d>>2]|0);c[d>>2]=0;if((e|0)==0|f^1){return t|0}else{z=0;A=e}do{c[a+(z<<4)+8>>2]=A;A=A+(c[a+(z<<4)>>2]<<2)|0;z=z+1|0;}while((z|0)<(b|0));return t|0}function nu(b,e,f,j,k,l,m,n,p){b=b|0;e=e|0;f=f|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0.0,za=0.0,Aa=0.0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0.0,Ia=0.0,Ja=0.0,La=0.0,Na=0,Oa=0,Pa=0.0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0.0,bb=0,cb=0,db=0,eb=0.0,fb=0,gb=0,hb=0.0,ib=0.0,jb=0,kb=0.0,lb=0.0,mb=0.0,nb=0,ob=0.0,pb=0,qb=0.0,rb=0.0,sb=0.0,tb=0,ub=0.0,vb=0,wb=0.0,xb=0.0,zb=0,Ab=0,Bb=0,Cb=0.0,Db=0.0,Eb=0.0,Fb=0.0,Gb=0,Hb=0.0,Ib=0;f=i;i=i+40|0;q=f|0;r=f+8|0;s=f+24|0;t=f+32|0;u=m&4;v=m&3;if((p|0)<0){w=0;i=f;return w|0}if((a[213992]|0)!=0){ym()}m=(n|0)==2;do{if(m){if((a[213992]|0)!=0){Ma(157464,24,1,c[o>>2]|0)|0}x=mu(b,e)|0;y=14}else{if((n|0)==1){z=iu(b,e)|0;if((z|0)!=0){A=z;break}Fv(0,127544,(B=i,i=i+1|0,i=i+7&-8,c[B>>2]=0,B)|0)|0;i=B;Fv(3,115272,(B=i,i=i+1|0,i=i+7&-8,c[B>>2]=0,B)|0)|0;i=B;y=15;break}else if((n|0)!=3){y=15;break}if((a[213992]|0)!=0){Ma(108184,21,1,c[o>>2]|0)|0}x=ju(b,e)|0;y=14}}while(0);if((y|0)==14){if((x|0)==0){y=15}else{A=x}}do{if((y|0)==15){if((a[213992]|0)!=0){Ma(102560,26,1,c[o>>2]|0)|0}if((c[b+8>>2]|0)==0){A=lu(b,e)|0;break}else{A=ku(b,e)|0;break}}}while(0);if((a[213992]|0)!=0){x=c[o>>2]|0;C=+zm();gc(x|0,96864,(B=i,i=i+8|0,h[B>>3]=C,B)|0)|0;i=B;Ma(91480,25,1,x|0)|0;ym()}do{if((u|0)!=0&(e|0)>1){x=m&1;n=(e|0)>50?50:e;z=kk(n<<2)|0;D=z;E=e<<3;F=kk(da(n,E)|0)|0;G=(n|0)>0;if(G){H=0;do{c[D+(H<<2)>>2]=F+((da(H,e)|0)<<3);H=H+1|0;}while((H|0)<(n|0))}H=n<<1;F=(H|0)>50?H:50;H=(F|0)>(e|0)?e:F;c[q>>2]=0;Xr(b,e,H,q,x);Yr(c[q>>2]|0,e,H);Ut(c[q>>2]|0,H,e,D,n);eF(c[c[q>>2]>>2]|0);eF(c[q>>2]|0);H=e<<2;F=kk(H)|0;I=F;J=(e|0)>0;if(J){vF(F|0,-1|0,H|0)|0}vr(r,e);K=c[b+8>>2]|0;if(m){Ds(b,e)}L=kk(H)|0;M=kk(160)|0;N=kk(e*160|0)|0;O=kk(160)|0;P=O;Q=0;do{c[P+(Q<<2)>>2]=N+((da(Q,e)|0)<<2);Q=Q+1|0;}while((Q|0)<40);Q=L;N=M;x=(yb()|0)%(e|0)|0;c[I+(x<<2)>>2]=0;c[N>>2]=x;R=c[P>>2]|0;if(m){Rr(x,b,e,R)}else{ur(x,b,e,R,r)}if(J){R=0;U=x;V=0;while(1){W=c[(c[P>>2]|0)+(V<<2)>>2]|0;c[Q+(V<<2)>>2]=W;X=(W|0)>(R|0);Y=X?V:U;Z=V+1|0;if((Z|0)<(e|0)){R=X?W:R;U=Y;V=Z}else{_=Y;$=1;break}}}else{_=x;$=1}while(1){c[I+(_<<2)>>2]=$;c[N+($<<2)>>2]=_;V=P+($<<2)|0;U=c[V>>2]|0;if(m){Rr(_,b,e,U)}else{ur(_,b,e,U,r)}if(J){U=0;R=_;Y=0;while(1){Z=Q+(Y<<2)|0;W=c[Z>>2]|0;X=c[(c[V>>2]|0)+(Y<<2)>>2]|0;aa=(W|0)<(X|0)?W:X;c[Z>>2]=aa;do{if((aa|0)>(U|0)){ba=Y;ca=aa}else{if((aa|0)!=(U|0)){ba=R;ca=U;break}if(((yb()|0)%(Y+1|0)|0|0)!=0){ba=R;ca=U;break}ba=Y;ca=c[Z>>2]|0}}while(0);Z=Y+1|0;if((Z|0)<(e|0)){U=ca;R=ba;Y=Z}else{ea=ba;break}}}else{ea=_}Y=$+1|0;if((Y|0)<40){_=ea;$=Y}else{break}}if(J){vF(L|0,-1|0,H|0)|0}Q=kk(H)|0;x=e<<4;Y=kk(x)|0;R=Y;if(J){U=e-1|0;V=U<<2;Z=0;aa=0;X=0;W=0;fa=0;while(1){ga=I+(fa<<2)|0;do{if((c[ga>>2]|0)>-1){ha=R+(fa<<4)+4|0;c[ha>>2]=kk(V)|0;ia=R+(fa<<4)+8|0;c[ia>>2]=kk(V)|0;c[R+(fa<<4)>>2]=U;a[R+(fa<<4)+12|0]=1;ja=c[ga>>2]|0;if((fa|0)>0){ka=P+(ja<<2)|0;la=0;do{c[(c[ha>>2]|0)+(la<<2)>>2]=la;c[(c[ia>>2]|0)+(la<<2)>>2]=c[(c[ka>>2]|0)+(la<<2)>>2];la=la+1|0;}while((la|0)<(fa|0))}la=fa+1|0;if((la|0)>=(e|0)){ma=U;na=X;oa=aa;pa=Z;qa=la;break}ka=P+(ja<<2)|0;ra=fa;sa=la;while(1){c[(c[ha>>2]|0)+(ra<<2)>>2]=sa;c[(c[ia>>2]|0)+(ra<<2)>>2]=c[(c[ka>>2]|0)+(sa<<2)>>2];ta=sa+1|0;if((ta|0)<(e|0)){ra=sa;sa=ta}else{ma=U;na=X;oa=aa;pa=Z;qa=la;break}}}else{if((Z|0)<40){la=kk(H)|0;sa=kk(H)|0;a[R+(fa<<4)+12|0]=1;ua=sa;va=la;wa=e}else{a[R+(fa<<4)+12|0]=0;ua=X;va=aa;wa=Z}c[R+(fa<<4)+4>>2]=va;c[R+(fa<<4)+8>>2]=ua;c[R+(fa<<4)>>2]=40;la=0;do{c[va+(la<<2)>>2]=c[N+(la<<2)>>2];c[ua+(la<<2)>>2]=c[(c[P+(la<<2)>>2]|0)+(fa<<2)>>2];la=la+1|0;}while((la|0)<40);ma=40;na=ua+160|0;oa=va+160|0;pa=wa-40|0;qa=fa+1|0}}while(0);ga=ma+W|0;if((qa|0)<(e|0)){Z=pa;aa=oa;X=na;W=ga;fa=qa}else{xa=ga;break}}}else{xa=0}eF(L);eF(Q);if((O|0)!=0){eF(c[P>>2]|0);eF(O)}fa=kk(x)|0;W=fa;X=xa+e<<2;aa=kk(X)|0;Z=kk(X)|0;if(J){X=(v|0)==2;N=aa;aa=Z;Z=0;while(1){c[W+(Z<<4)+4>>2]=N;c[W+(Z<<4)+8>>2]=aa;H=c[R+(Z<<4)>>2]|0;U=W+(Z<<4)|0;c[U>>2]=H+1;V=c[R+(Z<<4)+8>>2]|0;I=(H|0)>0;do{if(X){if(!I){ya=0.0;break}H=R+(Z<<4)+4|0;C=0.0;ga=1;while(1){la=ga-1|0;c[N+(ga<<2)>>2]=c[(c[H>>2]|0)+(la<<2)>>2];za=+(c[V+(la<<2)>>2]|0);Aa=-1.0/(za*za);g[aa+(ga<<2)>>2]=Aa;za=C-Aa;la=ga+1|0;if((la|0)<(c[U>>2]|0)){C=za;ga=la}else{ya=za;break}}}else{if(!I){ya=0.0;break}ga=R+(Z<<4)+4|0;C=0.0;H=1;while(1){la=H-1|0;c[N+(H<<2)>>2]=c[(c[ga>>2]|0)+(la<<2)>>2];za=-1.0/+(c[V+(la<<2)>>2]|0);g[aa+(H<<2)>>2]=za;Aa=C-za;la=H+1|0;if((la|0)<(c[U>>2]|0)){C=Aa;H=la}else{ya=Aa;break}}}}while(0);c[N>>2]=Z;g[aa>>2]=ya;V=c[U>>2]|0;I=Z+1|0;if((I|0)<(e|0)){N=N+(V<<2)|0;aa=aa+(V<<2)|0;Z=I}else{break}}}Z=kk(l<<2)|0;aa=Z;N=n<<3;X=kk(da(N,l)|0)|0;c[aa>>2]=X;a:do{if((l|0)>1){c[Z+4>>2]=X+(n<<3);if((l|0)>2){Ba=2;Ca=X}else{Da=0;y=81;break}while(1){c[aa+(Ba<<2)>>2]=Ca+((da(Ba,n)|0)<<3);x=Ba+1|0;if((x|0)>=(l|0)){y=80;break a}Ba=x;Ca=c[aa>>2]|0}}else{y=80}}while(0);if((y|0)==80){if((l|0)>0){Da=0;y=81}else{Ea=0}}if((y|0)==81){while(1){y=0;if(G){X=aa+(Da<<2)|0;U=0;do{h[(c[X>>2]|0)+(U<<3)>>3]=0.0;U=U+1|0;}while((U|0)<(n|0))}U=Da+1|0;if((U|0)<(l|0)){Da=U;y=81}else{break}}do{if((l|0)==2){h[c[aa>>2]>>3]=1.0;U=Z+4|0;if((Vt(D,n,e,c[U>>2]|0)|0)<<24>>24!=0){Fa=0;break}X=c[U>>2]|0;if(G){x=0;O=X;while(1){h[O+(x<<3)>>3]=0.0;P=x+1|0;Q=c[U>>2]|0;if((P|0)<(n|0)){x=P;O=Q}else{Ga=Q;break}}}else{Ga=X}h[Ga+8>>3]=1.0;Fa=0}else{O=0;while(1){h[(c[aa+(O<<2)>>2]|0)+(O<<3)>>3]=1.0;x=O+1|0;if((x|0)<(l|0)){O=x}else{Fa=0;break}}}}while(0);while(1){_s(D,e,n,c[aa+(Fa<<2)>>2]|0,c[j+(Fa<<2)>>2]|0);G=Fa+1|0;if((G|0)<(l|0)){Fa=G}else{Ea=1;break}}}c[s>>2]=0;c[t>>2]=0;Rs(W,D,e,n,s);Ps(D,c[s>>2]|0,n,e,n,t);eF(c[c[s>>2]>>2]|0);eF(c[s>>2]|0);G=kk(E)|0;O=G;X=kk(N)|0;x=X;C=+ou(j,R,l,e,v);U=0;b:while(1){if(Ea){Q=0;do{if(J){P=j+(Q<<2)|0;L=0;do{I=O+(L<<3)|0;h[I>>3]=0.0;V=c[R+(L<<4)+8>>2]|0;H=c[W+(L<<4)+4>>2]|0;ga=c[W+(L<<4)+8>>2]|0;la=W+(L<<4)|0;if((c[la>>2]|0)>1){Aa=0.0;sa=1;while(1){ra=c[H+(sa<<2)>>2]|0;za=+Fs(j,l,L,ra);if(za>1.0e-30){Ha=(-0.0- +g[ga+(sa<<2)>>2]*+(c[V+(sa-1<<2)>>2]|0))/za;h[I>>3]=+h[I>>3]+Ha*+h[(c[P>>2]|0)+(ra<<3)>>3];Ia=Aa-Ha}else{Ia=Aa}ra=sa+1|0;if((ra|0)<(c[la>>2]|0)){Aa=Ia;sa=ra}else{break}}Ja=Ia;La=+h[I>>3]}else{Ja=0.0;La=0.0}h[I>>3]=La+Ja*+h[(c[P>>2]|0)+(L<<3)>>3];L=L+1|0;}while((L|0)<(e|0))}Os(D,n,e,O,x);L=aa+(Q<<2)|0;if((Ar(c[t>>2]|0,c[L>>2]|0,x,n,.001,n,0)|0)!=0){Na=-1;break b}_s(D,e,n,c[L>>2]|0,c[j+(Q<<2)>>2]|0);Q=Q+1|0;}while((Q|0)<(l|0))}if((U&1|0)==0){Aa=+ou(j,R,l,e,v);Ha=+S(+(Aa-C))/(Aa+1.0e-10);Oa=Ha>=+h[21657];Pa=Aa}else{Oa=1;Pa=C}Q=U+1|0;if((Q|0)<50&Oa){C=Pa;U=Q}else{Na=Q;break}}eF(X);eF(G);if(m){Es(b,e,K)}if(J){U=0;do{if((a[R+(U<<4)+12|0]|0)!=0){eF(c[R+(U<<4)+4>>2]|0);eF(c[R+(U<<4)+8>>2]|0)}U=U+1|0;}while((U|0)<(e|0))}eF(Y);eF(c[fa+4>>2]|0);eF(c[fa+8>>2]|0);eF(fa);eF(F);eF(M);eF(c[aa>>2]|0);eF(Z);U=c[t>>2]|0;if((U|0)!=0){eF(c[U>>2]|0);eF(c[t>>2]|0)}eF(c[D>>2]|0);eF(z);wr(r);if((Na|0)<0){Qa=-1;Ra=0;Sa=0;Ta=0;Ua=0;Va=0;Wa=0;Xa=0;Ya=0;break}if(Ea){Za=0}else{_a=0;y=129;break}while(1){do{if(J){U=c[j+(Za<<2)>>2]|0;R=0;C=1.0;do{Aa=+S(+(+h[U+(R<<3)>>3]));C=Aa>C?Aa:C;R=R+1|0;}while((R|0)<(e|0));if(!J){y=124;break}R=j+(Za<<2)|0;U=0;do{K=(c[R>>2]|0)+(U<<3)|0;h[K>>3]=+h[K>>3]/C;U=U+1|0;}while((U|0)<(e|0));if(!J){y=124;break}U=j+(Za<<2)|0;R=0;while(1){C=(+wn()+-.5)*1.0e-6;K=(c[U>>2]|0)+(R<<3)|0;h[K>>3]=+h[K>>3]+C;K=R+1|0;if((K|0)<(e|0)){R=K}else{$a=U;break}}}else{y=124}}while(0);if((y|0)==124){y=0;$a=j+(Za<<2)|0}Ss(e,c[$a>>2]|0);U=Za+1|0;if((U|0)<(l|0)){Za=U}else{_a=0;y=129;break}}}else{_a=hu(0,e,l,j,k)|0;y=129}}while(0);c:do{if((y|0)==129){if((a[213992]|0)!=0){Za=c[o>>2]|0;Pa=+zm();gc(Za|0,86240,(B=i,i=i+8|0,h[B>>3]=Pa,B)|0)|0;i=B}if((e|0)==1|(p|0)==0){w=0;i=f;return w|0}if((a[213992]|0)!=0){Za=c[o>>2]|0;Pa=+zm();gc(Za|0,96864,(B=i,i=i+8|0,h[B>>3]=Pa,B)|0)|0;i=B;Ma(81504,26,1,Za|0)|0;ym()}Za=l<<2;$a=jk(Za)|0;Ea=e<<2;Na=da(Ea,l)|0;r=jk(Na)|0;t=(l|0)>0;if(t){b=(e|0)>0;m=0;do{Oa=r+((da(m,e)|0)<<2)|0;s=$a+(m<<2)|0;c[s>>2]=Oa;d:do{if(b){Fa=j+(m<<2)|0;Ga=0;Da=Oa;while(1){g[Da+(Ga<<2)>>2]=+h[(c[Fa>>2]|0)+(Ga<<3)>>3];Ca=Ga+1|0;if((Ca|0)>=(e|0)){break d}Ga=Ca;Da=c[s>>2]|0}}}while(0);m=m+1|0;}while((m|0)<(l|0))}do{if((v|0)==0){m=e-1|0;if((m|0)>0){ab=0.0;bb=0;cb=0;db=e}else{eb=0.0;fb=(da(e+1|0,e)|0)/2|0;gb=0;break}while(1){b=bb+1|0;s=e-cb|0;if((s|0)>1){Pa=ab;Oa=1;Da=b;while(1){hb=Pa+ +g[A+(Da<<2)>>2];Ga=Oa+1|0;if((Ga|0)<(s|0)){Pa=hb;Oa=Ga;Da=Da+1|0}else{break}}ib=hb;jb=bb+db|0}else{ib=ab;jb=b}Da=cb+1|0;if((Da|0)<(m|0)){ab=ib;bb=jb;cb=Da;db=db-1|0}else{kb=ib;y=149;break}}}else{kb=+(e|0)*+(e-1|0)*.5;y=149}}while(0);do{if((y|0)==149){m=(da(e+1|0,e)|0)/2|0;if((v|0)!=2){eb=kb;fb=m;gb=0;break}jt(m,A);eb=kb;fb=m;gb=1}}while(0);kt(fb,A);m=e<<3;Da=jk(m)|0;Oa=Da;vF(Da|0,0,m|0)|0;s=e-1|0;Ga=(s|0)>0;if(Ga){Fa=0;Ca=0;Ba=e;while(1){xa=Fa+1|0;qa=e-Ca|0;if((qa|0)>1){Pa=0.0;na=1;oa=xa;while(1){Ja=+g[A+(oa<<2)>>2];lb=Pa+Ja;pa=Oa+(na+Ca<<3)|0;h[pa>>3]=+h[pa>>3]-Ja;pa=na+1|0;if((pa|0)<(qa|0)){Pa=lb;na=pa;oa=oa+1|0}else{break}}mb=lb;nb=Fa+Ba|0}else{mb=0.0;nb=xa}oa=Oa+(Ca<<3)|0;h[oa>>3]=+h[oa>>3]-mb;oa=Ca+1|0;if((oa|0)<(s|0)){Fa=nb;Ca=oa;Ba=Ba-1|0}else{break}}}Ba=(e|0)>0;if(Ba){Ca=0;Fa=e;oa=0;while(1){g[A+(Ca<<2)>>2]=+h[Oa+(oa<<3)>>3];na=oa+1|0;if((na|0)<(e|0)){Ca=Fa+Ca|0;Fa=Fa-1|0;oa=na}else{break}}}oa=jk(Za)|0;Fa=jk(Na)|0;c[oa>>2]=Fa;e:do{if((l|0)>1){Ca=1;na=Fa;while(1){c[oa+(Ca<<2)>>2]=na+((da(Ca,e)|0)<<2);qa=Ca+1|0;if((qa|0)>=(l|0)){break e}Ca=qa;na=c[oa>>2]|0}}}while(0);Fa=jk(Ea)|0;Na=jk(Ea)|0;Za=jk(fb<<2)|0;if((a[213992]|0)!=0){na=c[o>>2]|0;Pa=+zm();gc(na|0,96864,(B=i,i=i+8|0,h[B>>3]=Pa,B)|0)|0;i=B;Ma(167776,15,1,na|0)|0;ym()}if((p|0)>0){Pa=eb;na=c[o>>2]|0;Ca=(_a|0)==0;Ja=1.7976931348623157e+308;xa=0;while(1){vF(Da|0,0,m|0)|0;if(gb){lt(fb,A,Za)}if(Ga){qa=0;pa=0;ma=e;while(1){wa=e-pa-1|0;ht(wa,0.0,Na);if(t){va=pa+1|0;ua=0;do{$=$a+(ua<<2)|0;ht(wa,+g[(c[$>>2]|0)+(pa<<2)>>2],Fa);dt(wa,Fa,-1.0,(c[$>>2]|0)+(va<<2)|0);jt(wa,Fa);ct(wa,Fa,Na,Na);ua=ua+1|0;}while((ua|0)<(l|0))}mt(wa,Na);ua=(wa|0)>0;if(ua){va=0;do{b=Na+(va<<2)|0;La=+g[b>>2];if(La>=3.4028234663852886e+38|La<0.0){g[b>>2]=0.0}va=va+1|0;}while((va|0)<(wa|0))}va=qa+1|0;do{if(gb){if(!ua){ob=0.0;pb=va;break}b=pa+1|0;$=va;La=0.0;ea=0;while(1){_=Za+($<<2)|0;Ia=+g[Na+(ea<<2)>>2]*+g[_>>2];g[_>>2]=Ia;ya=Ia;qb=La+ya;_=Oa+(b+ea<<3)|0;h[_>>3]=+h[_>>3]-ya;_=ea+1|0;if((_|0)<(wa|0)){$=$+1|0;La=qb;ea=_}else{break}}ob=qb;pb=qa+ma|0}else{if(!ua){ob=0.0;pb=va;break}ea=pa+1|0;$=va;La=0.0;b=0;while(1){ya=+g[Na+(b<<2)>>2];g[Za+($<<2)>>2]=ya;Ia=ya;rb=La+Ia;I=Oa+(ea+b<<3)|0;h[I>>3]=+h[I>>3]-Ia;I=b+1|0;if((I|0)<(wa|0)){$=$+1|0;La=rb;b=I}else{break}}ob=rb;pb=qa+ma|0}}while(0);wa=Oa+(pa<<3)|0;h[wa>>3]=+h[wa>>3]-ob;wa=pa+1|0;if((wa|0)<(s|0)){qa=pb;pa=wa;ma=ma-1|0}else{break}}}if(Ba){ma=0;pa=e;qa=0;while(1){g[Za+(ma<<2)>>2]=+h[Oa+(qa<<3)>>3];wa=qa+1|0;if((wa|0)<(e|0)){ma=pa+ma|0;pa=pa-1|0;qa=wa}else{break}}}do{if(t){qa=0;do{at(Za,e,c[$a+(qa<<2)>>2]|0,c[oa+(qa<<2)>>2]|0);qa=qa+1|0;}while((qa|0)<(l|0));if(t){sb=0.0;tb=0}else{y=191;break}do{sb=sb+ +gt(e,c[$a+(tb<<2)>>2]|0,c[oa+(tb<<2)>>2]|0);tb=tb+1|0;}while((tb|0)<(l|0));La=Pa+sb*2.0;if(t){ub=La;vb=0}else{wb=La;break}while(1){qa=$a+(vb<<2)|0;at(A,e,c[qa>>2]|0,Fa);La=ub- +gt(e,c[qa>>2]|0,Fa);qa=vb+1|0;if((qa|0)<(l|0)){ub=La;vb=qa}else{wb=La;break}}}else{y=191}}while(0);if((y|0)==191){y=0;wb=Pa+0.0}La=Ja-wb;if(La<0.0){xb=-0.0-La}else{xb=La}La=+h[21657];if(xb/Ja<La){zb=1}else{zb=wb<La|0}if(t){qa=0;do{pa=$a+(qa<<2)|0;ma=c[pa>>2]|0;do{if(Ca){if((Br(A,ma,c[oa+(qa<<2)>>2]|0,e,.001,e)|0)<0){Qa=-1;Ra=Za;Sa=Na;Ta=Fa;Ua=oa;Va=Oa;Wa=A;Xa=$a;Ya=r;break c}}else{ft(e,ma,Fa);if((Br(A,Fa,c[oa+(qa<<2)>>2]|0,e,.001,e)|0)<0){Qa=-1;Ra=Za;Sa=Na;Ta=Fa;Ua=oa;Va=Oa;Wa=A;Xa=$a;Ya=r;break c}if(Ba){Ab=0}else{break}do{if((d[(c[(c[k+(Ab<<2)>>2]|0)+8>>2]|0)+119|0]|0)>>>0<=1>>>0){g[(c[pa>>2]|0)+(Ab<<2)>>2]=+g[Fa+(Ab<<2)>>2]}Ab=Ab+1|0;}while((Ab|0)<(e|0))}}while(0);qa=qa+1|0;}while((qa|0)<(l|0))}do{if((a[213992]|0)!=0){if(((xa|0)%5|0|0)!=0){break}gc(na|0,163608,(B=i,i=i+8|0,h[B>>3]=wb,B)|0)|0;i=B;if(((xa+5|0)%50|0|0)!=0){break}Ka(10,na|0)|0}}while(0);qa=xa+1|0;if((qa|0)<(p|0)&zb<<24>>24==0){Ja=wb;xa=qa}else{Bb=qa;break}}}else{Bb=0}if((a[213992]|0)!=0){xa=c[o>>2]|0;if(Ga){na=0;Ca=0;Ja=0.0;m=e;while(1){Da=Ca+1|0;Ea=e-na|0;if((Ea|0)>1){qa=1;Pa=Ja;pa=Da;while(1){ma=qa+na|0;if(t){wa=0;La=0.0;while(1){va=c[$a+(wa<<2)>>2]|0;Ia=+g[va+(na<<2)>>2]- +g[va+(ma<<2)>>2];ya=La+Ia*Ia;va=wa+1|0;if((va|0)<(l|0)){wa=va;La=ya}else{Cb=ya;break}}}else{Cb=0.0}La=+T(Cb);ya=+g[A+(pa<<2)>>2];if(gb){Ia=1.0/+T(ya)-La;Db=Ia*Ia}else{Ia=1.0/ya-La;Db=Ia*Ia}Eb=Pa+ya*Db;wa=qa+1|0;if((wa|0)<(Ea|0)){qa=wa;Pa=Eb;pa=pa+1|0}else{break}}Fb=Eb;Gb=Ca+m|0}else{Fb=Ja;Gb=Da}pa=na+1|0;if((pa|0)<(s|0)){na=pa;Ca=Gb;Ja=Fb;m=m-1|0}else{Hb=Fb;break}}}else{Hb=0.0}Ja=+zm();gc(xa|0,154504,(B=i,i=i+24|0,h[B>>3]=Hb,c[B+8>>2]=Bb,h[B+16>>3]=Ja,B)|0)|0;i=B}if(t){Ib=0}else{Qa=Bb;Ra=Za;Sa=Na;Ta=Fa;Ua=oa;Va=Oa;Wa=A;Xa=$a;Ya=r;break}while(1){if(Ba){m=$a+(Ib<<2)|0;Ca=j+(Ib<<2)|0;na=0;do{h[(c[Ca>>2]|0)+(na<<3)>>3]=+g[(c[m>>2]|0)+(na<<2)>>2];na=na+1|0;}while((na|0)<(e|0))}na=Ib+1|0;if((na|0)<(l|0)){Ib=na}else{Qa=Bb;Ra=Za;Sa=Na;Ta=Fa;Ua=oa;Va=Oa;Wa=A;Xa=$a;Ya=r;break}}}}while(0);eF(Ya);eF(Xa);eF(Wa);if((Ua|0)!=0){eF(c[Ua>>2]|0);eF(Ua)}eF(Ta);eF(Sa);eF(Va);eF(Ra);w=Qa;i=f;return w|0}function ou(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0.0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;g=(e|0)>0;if((f|0)==2){if(!g){i=0.0;return+i}f=(d|0)>0;j=0;k=0.0;while(1){l=c[b+(j<<4)>>2]|0;if((l|0)>0){m=c[b+(j<<4)+4>>2]|0;n=b+(j<<4)+8|0;o=0;p=k;while(1){q=c[m+(o<<2)>>2]|0;if((q|0)>(j|0)){if(f){r=0;s=0.0;while(1){t=c[a+(r<<2)>>2]|0;u=+h[t+(j<<3)>>3]- +h[t+(q<<3)>>3];v=s+u*u;t=r+1|0;if((t|0)<(d|0)){r=t;s=v}else{w=v;break}}}else{w=0.0}s=+T(w);v=+(c[(c[n>>2]|0)+(o<<2)>>2]|0);u=v-s;x=p+u*u/(v*v)}else{x=p}r=o+1|0;if((r|0)<(l|0)){o=r;p=x}else{y=x;break}}}else{y=k}o=j+1|0;if((o|0)<(e|0)){j=o;k=y}else{i=y;break}}return+i}else{if(!g){i=0.0;return+i}g=(d|0)>0;j=0;y=0.0;while(1){f=c[b+(j<<4)>>2]|0;if((f|0)>0){o=c[b+(j<<4)+4>>2]|0;l=b+(j<<4)+8|0;n=0;k=y;while(1){m=c[o+(n<<2)>>2]|0;if((m|0)>(j|0)){if(g){r=0;x=0.0;while(1){q=c[a+(r<<2)>>2]|0;w=+h[q+(j<<3)>>3]- +h[q+(m<<3)>>3];p=x+w*w;q=r+1|0;if((q|0)<(d|0)){r=q;x=p}else{z=p;break}}}else{z=0.0}x=+T(z);p=+(c[(c[l>>2]|0)+(n<<2)>>2]|0);w=p-x;A=k+w*w/p}else{A=k}r=n+1|0;if((r|0)<(f|0)){n=r;k=A}else{B=A;break}}}else{B=y}n=j+1|0;if((n|0)<(e|0)){j=n;y=B}else{i=B;break}}return+i}return 0.0}function pu(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0;e=jk(a<<2)|0;f=jk(da(a<<3,b)|0)|0;if((a|0)<=0){return e|0}if((b|0)>0){g=f;i=0}else{j=f;f=0;while(1){c[e+(f<<2)>>2]=j;k=f+1|0;if((k|0)<(a|0)){j=j+(b<<3)|0;f=k}else{break}}return e|0}while(1){f=e+(i<<2)|0;c[f>>2]=g;j=g+(b<<3)|0;k=0;l=g;while(1){h[l+(k<<3)>>3]=d;m=k+1|0;if((m|0)>=(b|0)){break}k=m;l=c[f>>2]|0}f=i+1|0;if((f|0)<(a|0)){g=j;i=f}else{break}}return e|0}function qu(a){a=a|0;if((a|0)==0){return}eF(c[a>>2]|0);eF(a);return}function ru(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0.0,S=0,U=0.0,V=0,W=0.0,X=0,Y=0.0,Z=0,_=0,$=0;e=i;if((a[213992]|0)!=0){f=c[o>>2]|0;g=$w(b|0)|0;j=Lw(b)|0;gc(f|0,118408,(f=i,i=i+16|0,c[f>>2]=g,c[f+8>>2]=j,f)|0)|0;i=f}do{if((a[214184]|0)!=0){f=ux(b)|0;if((f|0)==0){break}j=b+48|0;g=0;k=f;while(1){f=vx(b,k)|0;l=rw(b,k)|0;a:do{if((l|0)==0){m=g;n=15}else{p=l;q=0;r=0;s=g;while(1){t=c[p>>2]&3;u=c[((t|0)==2?p:p-32|0)+28>>2]|0;v=c[((t|0)==3?p:p+32|0)+28>>2]|0;do{if((u|0)==(v|0)){w=r;x=q;y=s}else{t=(v|0)==(k|0);if((q|0)!=1){z=t?u:v;w=z;x=q+1|0;y=z;break}if(t&(u|0)==(r|0)){w=r;x=1;y=s;break}if((v|0)==(r|0)&(u|0)==(k|0)){w=r;x=1;y=s}else{A=f;B=s;break a}}}while(0);u=sw(b,p,k)|0;if((u|0)==0){break}else{p=u;q=x;r=w;s=y}}if((x|0)==0){m=y;n=15;break}else if((x|0)!=1){A=f;B=y;break}Gx(c[j>>2]|0,k|0)|0;if((y|0)==0){A=f;B=0;break}else{C=0;D=f;E=y}while(1){s=rw(b,E)|0;if((s|0)==0){break}else{F=s;G=0;H=0;I=C}while(1){s=c[F>>2]&3;r=c[((s|0)==2?F:F-32|0)+28>>2]|0;q=c[((s|0)==3?F:F+32|0)+28>>2]|0;do{if((r|0)==(q|0)){J=H;K=G;L=I}else{s=(q|0)==(E|0);if((G|0)!=1){p=s?r:q;J=p;K=G+1|0;L=p;break}if(s&(r|0)==(H|0)){J=H;K=1;L=I;break}if((q|0)==(H|0)&(r|0)==(E|0)){J=H;K=1;L=I}else{A=D;B=y;break a}}}while(0);r=sw(b,F,E)|0;if((r|0)==0){break}else{F=r;G=K;H=J;I=L}}if((K|0)==0){break}else if((K|0)!=1){A=D;B=y;break a}if((D|0)==(E|0)){M=vx(b,E)|0}else{M=D}Gx(c[j>>2]|0,E|0)|0;if((L|0)==0){A=M;B=y;break a}else{C=L;D=M;E=L}}if((D|0)==(E|0)){N=vx(b,E)|0}else{N=D}Gx(c[j>>2]|0,E|0)|0;A=N;B=y}}while(0);if((n|0)==15){n=0;Gx(c[j>>2]|0,k|0)|0;A=f;B=m}if((A|0)==0){break}else{g=B;k=A}}}}while(0);A=Lw(b)|0;B=Mw(b)|0;m=Wv(b,2,156808,0)|0;y=(d|0)==0;do{if(y){h[21657]=+(A|0)*1.0e-4;Oj(b,127200,173256);d=ew(c[b+48>>2]|0,115168)|0;if((d|0)==0){O=.99}else{O=+rF(d)}h[21674]=O;d=jk((A<<2)+4|0)|0;N=b+8|0;c[(c[N>>2]|0)+144>>2]=d;d=ux(b)|0;if((d|0)==0){P=0.0;break}else{Q=d;R=0.0;S=0}while(1){c[(c[(c[N>>2]|0)+144>>2]|0)+(S<<2)>>2]=Q;d=Q+8|0;c[(c[d>>2]|0)+120>>2]=S;c[(c[d>>2]|0)+124>>2]=-1;U=R+ +su(b,Q,m);d=vx(b,Q)|0;if((d|0)==0){P=U;break}else{Q=d;R=U;S=S+1|0}}}else{h[21657]=1.0e-4;Oj(b,127200,173256);N=ux(b)|0;if((N|0)==0){P=0.0;break}else{V=N;W=0.0;X=0}while(1){c[(c[V+8>>2]|0)+120>>2]=X;U=W+ +su(b,V,m);N=vx(b,V)|0;if((N|0)==0){P=U;break}else{V=N;W=U;X=X+1|0}}}}while(0);X=ew(b|0,108128)|0;do{if((X|0)==0){n=42}else{if((a[X]|0)==0){n=42;break}W=+h[21657];R=+rF(X);if(W>R){Y=W;break}Y=R}}while(0);if((n|0)==42){Y=P/((B|0)<1?1.0:+(B|0))*+T(+(A|0))+1.0}h[21638]=Y;if((c[53566]|0)!=0|y^1){i=e;return A|0}y=A<<2;B=jk(y)|0;n=B;X=A<<3;V=da(X,A)|0;m=jk(V)|0;S=(A|0)>0;if(S){Q=(A|0)>1;N=m;m=0;while(1){d=n+(m<<2)|0;c[d>>2]=N;E=N+(A<<3)|0;h[N>>3]=Y;if(Q){D=1;do{h[(c[d>>2]|0)+(D<<3)>>3]=Y;D=D+1|0;}while((D|0)<(A|0))}D=m+1|0;if((D|0)<(A|0)){N=E;m=D}else{break}}}m=b+8|0;c[(c[m>>2]|0)+152>>2]=B;B=jk(y)|0;b=B;N=jk(V)|0;if(S){V=(A|0)>1;Q=N;N=0;while(1){n=b+(N<<2)|0;c[n>>2]=Q;D=Q+(A<<3)|0;h[Q>>3]=1.0;if(V){d=1;do{h[(c[n>>2]|0)+(d<<3)>>3]=1.0;d=d+1|0;}while((d|0)<(A|0))}d=N+1|0;if((d|0)<(A|0)){Q=D;N=d}else{break}}}c[(c[m>>2]|0)+156>>2]=B;B=c[53568]|0;N=jk(y)|0;Q=N;V=jk(da(B,X)|0)|0;b:do{if(S){if((B|0)<=0){X=V;b=0;while(1){c[Q+(b<<2)>>2]=X;d=b+1|0;if((d|0)<(A|0)){X=X+(B<<3)|0;b=d}else{break b}}}if((B|0)>1){Z=V;_=0}else{b=V;X=0;while(1){c[Q+(X<<2)>>2]=b;h[b>>3]=1.0;D=X+1|0;if((D|0)<(A|0)){b=b+(B<<3)|0;X=D}else{break b}}}while(1){X=Q+(_<<2)|0;c[X>>2]=Z;b=Z+(B<<3)|0;h[Z>>3]=1.0;D=1;do{h[(c[X>>2]|0)+(D<<3)>>3]=1.0;D=D+1|0;}while((D|0)<(B|0));D=_+1|0;if((D|0)<(A|0)){Z=b;_=D}else{break}}}}while(0);c[(c[m>>2]|0)+160>>2]=N;N=c[53568]|0;_=y+4|0;y=jk(_)|0;Z=y;if(S){S=N<<3;B=(N|0)>0;Q=0;while(1){V=Z+(Q<<2)|0;c[V>>2]=jk(_)|0;if(B){D=0;do{X=jk(S)|0;c[(c[V>>2]|0)+(D<<2)>>2]=X;X=0;do{h[(c[(c[V>>2]|0)+(D<<2)>>2]|0)+(X<<3)>>3]=0.0;X=X+1|0;}while((X|0)<(N|0));D=D+1|0;}while((D|0)<(A|0))}else{D=0;do{X=jk(S)|0;c[(c[V>>2]|0)+(D<<2)>>2]=X;D=D+1|0;}while((D|0)<(A|0))}c[(c[V>>2]|0)+(A<<2)>>2]=0;D=Q+1|0;if((D|0)<(A|0)){Q=D}else{$=A;break}}}else{$=0}c[Z+($<<2)>>2]=0;c[(c[m>>2]|0)+164>>2]=y;i=e;return A|0}function su(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0.0;f=i;i=i+8|0;g=f|0;j=mw(b,d)|0;if((j|0)==0){k=0.0;i=f;return+k}d=b|0;if((e|0)==0){l=0.0;m=j;while(1){h[g>>3]=1.0;h[(c[m+8>>2]|0)+136>>3]=1.0;n=l+ +h[g>>3];o=ow(b,m)|0;if((o|0)==0){k=n;break}else{l=n;m=o}}i=f;return+k}else{p=0.0;q=j}while(1){j=fw(q|0,e)|0;a:do{if((a[j]|0)==0){r=9}else{m=ac(j|0,129224,(o=i,i=i+8|0,c[o>>2]=g,o)|0)|0;i=o;do{if((m|0)>=1){l=+h[g>>3];if(l<0.0){break}if(l!=0.0|(c[53566]|0)!=0){s=l;break a}}}while(0);Fv(0,126024,(o=i,i=i+8|0,c[o>>2]=j,o)|0)|0;i=o;m=$w(d)|0;Fv(3,131512,(o=i,i=i+16|0,c[o>>2]=m,h[o+8>>3]=1.0,o)|0)|0;i=o;r=9}}while(0);if((r|0)==9){r=0;h[g>>3]=1.0;s=1.0}h[(c[q+8>>2]|0)+136>>3]=s;l=p+ +h[g>>3];j=ow(b,q)|0;if((j|0)==0){k=l;break}else{p=l;q=j}}i=f;return+k}function tu(a){a=a|0;return ru(a,0)|0}function uu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;b=a+8|0;eF(c[(c[b>>2]|0)+144>>2]|0);if((c[53566]|0)!=0){return}a=c[b>>2]|0;d=c[a+152>>2]|0;if((d|0)==0){e=a}else{eF(c[d>>2]|0);eF(d);e=c[b>>2]|0}d=c[e+156>>2]|0;if((d|0)==0){f=e}else{eF(c[d>>2]|0);eF(d);f=c[b>>2]|0}d=c[f+160>>2]|0;if((d|0)==0){g=f}else{eF(c[d>>2]|0);eF(d);g=c[b>>2]|0}d=c[g+164>>2]|0;f=d;if((d|0)==0){h=g}else{g=c[f>>2]|0;if((g|0)!=0){e=0;a=f;i=g;do{g=c[i>>2]|0;if((g|0)==0){j=i}else{k=0;l=g;while(1){eF(l);g=k+1|0;m=c[a>>2]|0;n=c[m+(g<<2)>>2]|0;if((n|0)==0){j=m;break}else{k=g;l=n}}}eF(j);e=e+1|0;a=f+(e<<2)|0;i=c[a>>2]|0;}while((i|0)!=0)}eF(d);h=c[b>>2]|0}c[h+164>>2]=0;return}function vu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0;if((c[53568]|0)<=(d|0)){return}e=+(b|0);b=a+8|0;a=d;do{f=e*+wn();h[(c[(c[b>>2]|0)+132>>2]|0)+(a<<3)>>3]=f;a=a+1|0;}while((a|0)<(c[53568]|0));return}function wu(a,b){a=a|0;b=b|0;var d=0.0,e=0.0;if((c[53568]|0)<=2){return}d=+(b|0);b=a+8|0;a=2;do{e=d*+wn();h[(c[(c[b>>2]|0)+132>>2]|0)+(a<<3)>>3]=e;a=a+1|0;}while((a|0)<(c[53568]|0));return}function xu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0.0,l=0;e=i;if((a[213992]|0)!=0){Ma(102424,26,1,c[o>>2]|0)|0}f=wt(b,d,2)|0;if((f|0)==1){i=e;return}if((f|0)==0&(a[21544]^1)){Fv(0,96704,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f;a[21544]=1}f=b+8|0;b=c[c[(c[f>>2]|0)+144>>2]>>2]|0;if((b|0)==0){i=e;return}else{g=0;j=b}do{b=j+8|0;do{if((a[(c[b>>2]|0)+119|0]|0)==0){k=+wn();h[c[(c[b>>2]|0)+132>>2]>>3]=k;k=+wn();h[(c[(c[b>>2]|0)+132>>2]|0)+8>>3]=k;if((c[53568]|0)>2){l=2}else{break}do{k=+wn();h[(c[(c[b>>2]|0)+132>>2]|0)+(l<<3)>>3]=k;l=l+1|0;}while((l|0)<(c[53568]|0))}}while(0);g=g+1|0;j=c[(c[(c[f>>2]|0)+144>>2]|0)+(g<<2)>>2]|0;}while((j|0)!=0);i=e;return}function yu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0.0,z=0,A=0,B=0;e=i;i=i+80|0;f=e|0;if((a[213992]|0)!=0){Ma(91336,25,1,c[o>>2]|0)|0;ym()}g=b+8|0;j=c[g>>2]|0;k=c[j+156>>2]|0;l=c[j+152>>2]|0;j=(d|0)>0;do{if(j){m=0;do{if((m|0)>0){n=l+(m<<2)|0;p=k+(m<<2)|0;q=0;do{r=+h[(c[n>>2]|0)+(q<<3)>>3];s=1.0/(r*r);t=c[(c[g>>2]|0)+144>>2]|0;u=uw(b,c[t+(m<<2)>>2]|0,c[t+(q<<2)>>2]|0,0,0)|0;if((u|0)==0){v=s}else{v=s*+h[(c[u+8>>2]|0)+128>>3]}h[(c[k+(q<<2)>>2]|0)+(m<<3)>>3]=v;h[(c[p>>2]|0)+(q<<3)>>3]=v;q=q+1|0;}while((q|0)<(m|0))}m=m+1|0;}while((m|0)<(d|0));if(!j){break}m=0;q=c[53568]|0;while(1){if((q|0)>0){p=0;while(1){h[(c[(c[(c[g>>2]|0)+160>>2]|0)+(m<<2)>>2]|0)+(p<<3)>>3]=0.0;n=p+1|0;u=c[53568]|0;if((n|0)<(u|0)){p=n}else{w=u;break}}}else{w=q}p=m+1|0;if((p|0)<(d|0)){m=p;q=w}else{break}}}}while(0);w=c[g>>2]|0;k=c[c[w+144>>2]>>2]|0;if((k|0)!=0){b=0;l=k;k=w;while(1){if(j){w=l+8|0;q=0;do{a:do{if((b|0)!=(q|0)){m=c[g>>2]|0;p=c[(c[w>>2]|0)+132>>2]|0;u=c[(c[(c[(c[m+144>>2]|0)+(q<<2)>>2]|0)+8>>2]|0)+132>>2]|0;n=c[53568]|0;t=(n|0)>0;if(t){x=0;y=0.0}else{break}do{v=+h[p+(x<<3)>>3]- +h[u+(x<<3)>>3];h[f+(x<<3)>>3]=v;y=y+v*v;x=x+1|0;}while((x|0)<(n|0));v=+T(y);if(t){z=0;A=m}else{break}while(1){s=+h[f+(z<<3)>>3];h[(c[(c[(c[A+164>>2]|0)+(b<<2)>>2]|0)+(q<<2)>>2]|0)+(z<<3)>>3]=+h[(c[(c[A+156>>2]|0)+(b<<2)>>2]|0)+(q<<3)>>3]*(s-s*+h[(c[(c[A+152>>2]|0)+(b<<2)>>2]|0)+(q<<3)>>3]/v);n=c[g>>2]|0;u=(c[(c[n+160>>2]|0)+(b<<2)>>2]|0)+(z<<3)|0;h[u>>3]=+h[(c[(c[(c[n+164>>2]|0)+(b<<2)>>2]|0)+(q<<2)>>2]|0)+(z<<3)>>3]+ +h[u>>3];u=z+1|0;if((u|0)>=(c[53568]|0)){break a}z=u;A=c[g>>2]|0}}}while(0);q=q+1|0;}while((q|0)<(d|0));B=c[g>>2]|0}else{B=k}q=b+1|0;w=c[(c[B+144>>2]|0)+(q<<2)>>2]|0;if((w|0)==0){break}else{b=q;l=w;k=B}}}if((a[213992]|0)==0){i=e;return}B=c[o>>2]|0;y=+zm();gc(B|0,86160,(B=i,i=i+8|0,h[B>>3]=y,B)|0)|0;i=B;i=e;return}function zu(b,d){b=b|0;d=d|0;var e=0,f=0.0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0.0,C=0,D=0.0,E=0.0,F=0,G=0.0,H=0.0,I=0.0,J=0;e=i;f=+h[21657];h[21656]=f*f;g=Au(b,d)|0;if((g|0)!=0){j=g;do{Bu(b,d,j);j=Au(b,d)|0;}while((j|0)!=0)}if((a[213992]|0)==0){k=b+8|0}else{j=c[o>>2]|0;g=d-1|0;l=b+8|0;if((g|0)>0){m=c[l>>2]|0;n=c[m+144>>2]|0;p=c[53568]|0;q=(p|0)>0;r=m+156|0;s=m+152|0;f=0.0;m=0;while(1){t=m+1|0;if((t|0)<(d|0)){u=c[(c[r>>2]|0)+(m<<2)>>2]|0;v=c[(c[s>>2]|0)+(m<<2)>>2]|0;w=(c[n+(m<<2)>>2]|0)+8|0;x=f;y=t;while(1){if(q){z=c[(c[w>>2]|0)+132>>2]|0;A=c[(c[(c[n+(y<<2)>>2]|0)+8>>2]|0)+132>>2]|0;B=0.0;C=0;while(1){D=+h[z+(C<<3)>>3]- +h[A+(C<<3)>>3];E=B+D*D;F=C+1|0;if((F|0)<(p|0)){B=E;C=F}else{G=E;break}}}else{G=0.0}B=+h[v+(y<<3)>>3];E=x+ +h[u+(y<<3)>>3]*(G+B*B-B*2.0*+T(G));C=y+1|0;if((C|0)<(d|0)){x=E;y=C}else{H=E;break}}}else{H=f}if((t|0)<(g|0)){f=H;m=t}else{I=H;break}}}else{I=0.0}gc(j|0,81416,(J=i,i=i+8|0,h[J>>3]=I,J)|0)|0;i=J;m=c[(c[l>>2]|0)+148>>2]|0;g=(m|0)==(c[53660]|0)?163488:213472;I=+zm();gc(j|0,167648,(J=i,i=i+24|0,c[J>>2]=m,c[J+8>>2]=g,h[J+16>>3]=I,J)|0)|0;i=J;k=l}l=c[(c[k>>2]|0)+148>>2]|0;if((l|0)!=(c[53660]|0)){i=e;return}k=$w(b|0)|0;Fv(0,154336,(J=i,i=i+16|0,c[J>>2]=l,c[J+8>>2]=k,J)|0)|0;i=J;i=e;return}function Au(b,e){b=b|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0.0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0;f=i;g=(c[45226]|0)+1|0;c[45226]=g;j=c[b+8>>2]|0;if((c[j+148>>2]|0)>=(c[53660]|0)){k=0;i=f;return k|0}if((e|0)>0){b=c[j+144>>2]|0;l=c[53568]|0;m=(l|0)>0;n=0;p=0.0;q=0;while(1){r=c[b+(n<<2)>>2]|0;do{if((d[(c[r+8>>2]|0)+119|0]|0)>>>0>1>>>0){s=q;t=p}else{if(m){u=c[(c[j+160>>2]|0)+(n<<2)>>2]|0;v=0;w=0.0;while(1){x=+h[u+(v<<3)>>3];y=w+x*x;z=v+1|0;if((z|0)<(l|0)){v=z;w=y}else{A=y;break}}}else{A=0.0}if(A<=p){s=q;t=p;break}s=r;t=A}}while(0);r=n+1|0;if((r|0)<(e|0)){n=r;p=t;q=s}else{B=t;C=s;break}}}else{B=0.0;C=0}if(B<+h[21656]){k=0;i=f;return k|0}if((a[213992]|0)==0){k=C;i=f;return k|0}if(((g|0)%100|0|0)!=0){k=C;i=f;return k|0}g=c[o>>2]|0;t=+T(B);gc(g|0,148240,(s=i,i=i+8|0,h[s>>3]=t,s)|0)|0;i=s;if(((c[45226]|0)%1e3|0|0)!=0){k=C;i=f;return k|0}Ka(10,g|0)|0;k=C;i=f;return k|0}function Bu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,p=0.0;e=i;f=d+8|0;g=c[(c[f>>2]|0)+120>>2]|0;j=c[44368]|0;if((j|0)==0){k=c[53568]|0;l=kk(da(k<<3,k)|0)|0}else{k=c[53568]|0;l=mk(j,da(k<<3,k)|0)|0}k=l;c[44368]=k;Du(a,b,g,k);k=c[53568]|0;if((k|0)>0){l=a+8|0;j=0;do{h[177312+(j<<3)>>3]=-0.0- +h[(c[(c[(c[l>>2]|0)+160>>2]|0)+(g<<2)>>2]|0)+(j<<3)>>3];j=j+1|0;}while((j|0)<(k|0))}gu(c[44368]|0,177392,177312,k);if((c[53568]|0)>0){k=0;do{m=+h[21674];n=m+ +wn()*(1.0-m)*2.0;j=177392+(k<<3)|0;m=+h[j>>3]*n;h[j>>3]=m;j=(c[(c[f>>2]|0)+132>>2]|0)+(k<<3)|0;h[j>>3]=+h[j>>3]+m;k=k+1|0;}while((k|0)<(c[53568]|0))}k=(c[a+8>>2]|0)+148|0;c[k>>2]=(c[k>>2]|0)+1;Cu(a,b,g);if((Xm()|0)==0){i=e;return}g=c[53568]|0;if((g|0)>0){b=0;m=0.0;while(1){n=m+ +S(+(+h[177392+(b<<3)>>3]));a=b+1|0;if((a|0)<(g|0)){b=a;m=n}else{p=n;break}}}else{p=0.0}m=+T(p);b=c[o>>2]|0;g=$w(d|0)|0;gc(b|0,142112,(b=i,i=i+16|0,c[b>>2]=g,h[b+8>>3]=m,b)|0)|0;i=b;i=e;return}function Cu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0.0;e=i;i=i+80|0;f=e|0;g=a+8|0;a=c[g>>2]|0;j=c[(c[a+144>>2]|0)+(d<<2)>>2]|0;k=c[53568]|0;a:do{if((k|0)>0){l=0;m=a;while(1){h[(c[(c[m+160>>2]|0)+(d<<2)>>2]|0)+(l<<3)>>3]=0.0;n=l+1|0;o=c[53568]|0;if((n|0)>=(o|0)){p=o;break a}l=n;m=c[g>>2]|0}}else{p=k}}while(0);if((b|0)<=0){i=e;return}k=j+8|0;j=0;a=p;while(1){b:do{if((j|0)==(d|0)){q=a}else{p=c[g>>2]|0;m=c[(c[k>>2]|0)+132>>2]|0;l=c[(c[(c[(c[p+144>>2]|0)+(j<<2)>>2]|0)+8>>2]|0)+132>>2]|0;n=(a|0)>0;if(n){r=0;s=0.0}else{q=a;break}do{t=+h[m+(r<<3)>>3]- +h[l+(r<<3)>>3];h[f+(r<<3)>>3]=t;s=s+t*t;r=r+1|0;}while((r|0)<(a|0));t=+T(s);if(n){u=0;v=p}else{q=a;break}while(1){w=+h[f+(u<<3)>>3];h[(c[(c[(c[v+164>>2]|0)+(d<<2)>>2]|0)+(j<<2)>>2]|0)+(u<<3)>>3]=+h[(c[(c[v+156>>2]|0)+(d<<2)>>2]|0)+(j<<3)>>3]*(w-w*+h[(c[(c[v+152>>2]|0)+(d<<2)>>2]|0)+(j<<3)>>3]/t);l=c[g>>2]|0;m=(c[(c[l+160>>2]|0)+(d<<2)>>2]|0)+(u<<3)|0;h[m>>3]=+h[(c[(c[(c[l+164>>2]|0)+(d<<2)>>2]|0)+(j<<2)>>2]|0)+(u<<3)>>3]+ +h[m>>3];m=c[(c[g>>2]|0)+164>>2]|0;l=(c[(c[m+(j<<2)>>2]|0)+(d<<2)>>2]|0)+(u<<3)|0;w=+h[l>>3];h[l>>3]=-0.0- +h[(c[(c[m+(d<<2)>>2]|0)+(j<<2)>>2]|0)+(u<<3)>>3];m=c[g>>2]|0;l=(c[(c[m+160>>2]|0)+(j<<2)>>2]|0)+(u<<3)|0;h[l>>3]=+h[(c[(c[(c[m+164>>2]|0)+(j<<2)>>2]|0)+(d<<2)>>2]|0)+(u<<3)>>3]-w+ +h[l>>3];l=u+1|0;m=c[53568]|0;if((l|0)>=(m|0)){q=m;break b}u=l;v=c[g>>2]|0}}}while(0);p=j+1|0;if((p|0)<(b|0)){j=p;a=q}else{break}}i=e;return}function Du(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;f=i;i=i+80|0;g=f|0;j=a+8|0;a=c[j>>2]|0;k=c[a+156>>2]|0;l=c[a+152>>2]|0;m=c[(c[a+144>>2]|0)+(d<<2)>>2]|0;a=c[53568]|0;if((a|0)>0){n=0;o=a;while(1){if((o|0)>0){p=0;q=o;while(1){h[e+((da(q,n)|0)+p<<3)>>3]=0.0;r=p+1|0;s=c[53568]|0;if((r|0)<(s|0)){p=r;q=s}else{t=s;break}}}else{t=o}q=n+1|0;if((q|0)<(t|0)){n=q;o=t}else{u=t;break}}}else{u=a}if((b|0)>0){a=k+(d<<2)|0;k=l+(d<<2)|0;l=m+8|0;m=0;t=u;o=u;while(1){do{if((m|0)==(d|0)){v=t;w=o}else{n=(t|0)>0;if(n){q=c[(c[l>>2]|0)+132>>2]|0;p=c[(c[(c[(c[(c[j>>2]|0)+144>>2]|0)+(m<<2)>>2]|0)+8>>2]|0)+132>>2]|0;s=0;x=0.0;while(1){y=+h[q+(s<<3)>>3]- +h[p+(s<<3)>>3];h[g+(s<<3)>>3]=y;z=x+y*y;r=s+1|0;if((r|0)<(t|0)){s=r;x=z}else{A=z;break}}}else{A=0.0}x=+T(A);z=1.0/(x*x*x);if(n){B=0;C=t;D=o}else{v=t;w=o;break}while(1){x=+h[(c[a>>2]|0)+(m<<3)>>3];y=+h[(c[k>>2]|0)+(m<<3)>>3];E=+h[g+(B<<3)>>3];if((B|0)>0){s=0;F=x;G=y;p=D;while(1){q=e+((da(p,s)|0)+B<<3)|0;h[q>>3]=+h[q>>3]+z*F*G*E*+h[g+(s<<3)>>3];q=s+1|0;H=+h[(c[a>>2]|0)+(m<<3)>>3];I=+h[(c[k>>2]|0)+(m<<3)>>3];r=c[53568]|0;if((q|0)<(B|0)){s=q;F=H;G=I;p=r}else{J=H;K=I;L=r;break}}}else{J=x;K=y;L=C}p=e+((da(L,B)|0)+B<<3)|0;h[p>>3]=+h[p>>3]+J*(1.0-z*K*(A-E*E));p=B+1|0;s=c[53568]|0;if((p|0)<(s|0)){B=p;C=s;D=s}else{v=s;w=s;break}}}}while(0);n=m+1|0;if((n|0)<(b|0)){m=n;t=v;o=w}else{M=v;N=w;break}}}else{M=u;N=u}if((M|0)>1){O=1;P=M;Q=N}else{i=f;return}while(1){if((O|0)>0){N=0;M=Q;while(1){h[e+((da(M,O)|0)+N<<3)>>3]=+h[e+((da(M,N)|0)+O<<3)>>3];u=N+1|0;w=c[53568]|0;if((u|0)<(O|0)){N=u;M=w}else{R=w;S=w;break}}}else{R=P;S=Q}M=O+1|0;if((M|0)<(R|0)){O=M;P=R;Q=S}else{break}}i=f;return}function Eu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;b=a+8|0;if((c[(c[b>>2]|0)+124>>2]|0)>=0){cc(139008,136472,645,170200)}d=c[53680]|0;c[53680]=d+1;c[(c[b>>2]|0)+124>>2]=d;c[(c[53682]|0)+(d<<2)>>2]=a;if((d|0)<=0){return}d=c[b>>2]|0;e=c[d+124>>2]|0;if((e|0)<=0){return}f=e-1|0;g=(f|0)/2|0;i=(c[53682]|0)+(g<<2)|0;j=c[i>>2]|0;k=j+8|0;if(+h[(c[k>>2]|0)+136>>3]>+h[d+136>>3]){l=e;m=f;n=g;o=i;p=j;q=k}else{return}while(1){c[o>>2]=a;c[(c[b>>2]|0)+124>>2]=n;c[(c[53682]|0)+(l<<2)>>2]=p;c[(c[q>>2]|0)+124>>2]=l;if((m|0)<=1){r=8;break}k=n-1|0;j=(k|0)/2|0;i=(c[53682]|0)+(j<<2)|0;g=c[i>>2]|0;f=g+8|0;if(+h[(c[f>>2]|0)+136>>3]>+h[(c[b>>2]|0)+136>>3]){l=n;m=k;n=j;o=i;p=g;q=f}else{r=8;break}}if((r|0)==8){return}}function Fu(){var a=0,b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,v=0;a=c[53680]|0;if((a|0)==0){b=0;return b|0}d=c[53682]|0;e=c[d>>2]|0;f=a-1|0;c[53680]=f;a=c[d+(f<<2)>>2]|0;c[d>>2]=a;d=a+8|0;c[(c[d>>2]|0)+124>>2]=0;a:do{if((f|0)>1){g=c[(c[d>>2]|0)+124>>2]|0;i=g<<1|1;j=c[53680]|0;if((i|0)<(j|0)){k=g;l=i;m=j}else{break}while(1){j=l+1|0;i=c[53682]|0;if((j|0)<(m|0)){g=c[i+(j<<2)>>2]|0;n=+h[(c[g+8>>2]|0)+136>>3];o=c[i+(l<<2)>>2]|0;p=+h[(c[o+8>>2]|0)+136>>3];if(n<p){q=j;r=g;s=n}else{t=o;u=p;v=7}}else{o=c[i+(l<<2)>>2]|0;t=o;u=+h[(c[o+8>>2]|0)+136>>3];v=7}if((v|0)==7){v=0;q=l;r=t;s=u}if(+h[(c[d>>2]|0)+136>>3]<=s){break a}c[i+(q<<2)>>2]=a;c[(c[d>>2]|0)+124>>2]=q;c[(c[53682]|0)+(k<<2)>>2]=r;c[(c[r+8>>2]|0)+124>>2]=k;i=q<<1|1;o=c[53680]|0;if((i|0)<(o|0)){k=q;l=i;m=o}else{break}}}}while(0);c[(c[e+8>>2]|0)+124>>2]=-1;b=e;return b|0}function Gu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0.0;e=i;c[53682]=jk((d<<2)+4|0)|0;if((a[213992]|0)!=0){Ma(133632,28,1,c[o>>2]|0)|0;ym()}d=ux(b)|0;if((d|0)!=0){f=d;do{Hu(b,f);f=vx(b,f)|0;}while((f|0)!=0)}if((a[213992]|0)==0){g=c[53682]|0;j=g;eF(j);i=e;return}f=c[o>>2]|0;k=+zm();gc(f|0,86160,(f=i,i=i+8|0,h[f>>3]=k,f)|0)|0;i=f;g=c[53682]|0;j=g;eF(j);i=e;return}function Hu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;d=a+8|0;e=c[c[(c[d>>2]|0)+144>>2]>>2]|0;if((e|0)!=0){f=0;g=e;do{h[(c[g+8>>2]|0)+136>>3]=+h[21638];f=f+1|0;g=c[(c[(c[d>>2]|0)+144>>2]|0)+(f<<2)>>2]|0;}while((g|0)!=0)}c[53524]=b;g=b+8|0;h[(c[g>>2]|0)+136>>3]=0.0;c[(c[g>>2]|0)+128>>2]=0;Eu(c[53524]|0);g=Fu()|0;if((g|0)==0){return}else{i=g}do{g=c[53524]|0;if((i|0)!=(g|0)){b=c[i+8>>2]|0;j=+h[b+136>>3];f=c[(c[g+8>>2]|0)+120>>2]|0;g=c[b+120>>2]|0;h[(c[(c[(c[d>>2]|0)+152>>2]|0)+(g<<2)>>2]|0)+(f<<3)>>3]=j;h[(c[(c[(c[d>>2]|0)+152>>2]|0)+(f<<2)>>2]|0)+(g<<3)>>3]=j}g=rw(a,i)|0;if((g|0)!=0){f=i+8|0;b=g;do{g=c[b>>2]&3;e=c[((g|0)==3?b:b+32|0)+28>>2]|0;if((e|0)==(i|0)){k=c[((g|0)==2?b:b-32|0)+28>>2]|0}else{k=e}j=+h[(c[f>>2]|0)+136>>3]+ +h[(c[b+8>>2]|0)+136>>3];e=k+8|0;g=(c[e>>2]|0)+136|0;a:do{if(+h[g>>3]>j){h[g>>3]=j;l=c[e>>2]|0;m=c[l+124>>2]|0;if((m|0)<=-1){c[l+128>>2]=(c[(c[f>>2]|0)+128>>2]|0)+1;Eu(k);break}if((m|0)<=0){break}n=m-1|0;o=(n|0)/2|0;p=(c[53682]|0)+(o<<2)|0;q=c[p>>2]|0;r=q+8|0;if(+h[(c[r>>2]|0)+136>>3]>+h[l+136>>3]){s=m;t=n;u=o;v=p;w=q;x=r}else{break}while(1){c[v>>2]=k;c[(c[e>>2]|0)+124>>2]=u;c[(c[53682]|0)+(s<<2)>>2]=w;c[(c[x>>2]|0)+124>>2]=s;if((t|0)<=1){break a}r=u-1|0;q=(r|0)/2|0;p=(c[53682]|0)+(q<<2)|0;o=c[p>>2]|0;n=o+8|0;if(+h[(c[n>>2]|0)+136>>3]>+h[(c[e>>2]|0)+136>>3]){s=u;t=r;u=q;v=p;w=o;x=n}else{break}}}}while(0);b=sw(a,b,i)|0;}while((b|0)!=0)}i=Fu()|0;}while((i|0)!=0);return}function Iu(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;b=i;i=i+16|0;e=b|0;Tr();au();ks();c[53234]=Qc[d&3]()|0;ms();f=e|0;g=e+8|0;j=Qc[d&3]()|0;k=0.0;l=0.0;a:while(1){m=j+8|0;n=j|0;if((j|0)==0){o=3;break}else{p=k;q=l}while(1){if((gs()|0)==0){hs(e);r=+h[f>>3];s=+h[g>>3]}else{r=p;s=q}if((gs()|0)!=0){break}t=+h[m>>3];if(t<s){break}if(t==s){if(+h[n>>3]<r){break}}if((gs()|0)!=0){break a}u=is()|0;v=us(u)|0;w=ts(u)|0;x=ts(w)|0;y=vs(u)|0;z=ws(w)|0;A=c[u+20>>2]|0;du(A);Wr(c[u+8>>2]|0,a[u+16|0]|0,A);Wr(c[w+8>>2]|0,a[w+16|0]|0,A);ss(u);fs(w);ss(w);w=+h[y+8>>3]>+h[z+8>>3];u=w?z:y;B=Ur(u,w?y:z)|0;z=ns(B,w&1)|0;qs(v,z);Wr(B,w&1^1,A);eu(A);A=os(v,z)|0;if((A|0)!=0){fs(v);es(v,A,+cu(A,u))}A=os(z,x)|0;if((A|0)==0){p=r;q=s;continue}es(z,A,+cu(A,u));p=r;q=s}n=rs(j|0)|0;m=ts(n)|0;u=Ur(ws(n)|0,j)|0;A=ns(u,0)|0;qs(n,A);z=os(n,A)|0;if((z|0)!=0){fs(n);es(n,z,+cu(z,j))}z=ns(u,1)|0;qs(A,z);A=os(z,m)|0;if((A|0)!=0){es(z,A,+cu(A,j))}j=Qc[d&3]()|0;k=r;l=s}b:do{if((o|0)==3){while(1){o=0;if((gs()|0)==0){hs(e)}if((gs()|0)!=0){break b}d=is()|0;j=us(d)|0;g=ts(d)|0;f=ts(g)|0;A=vs(d)|0;z=ws(g)|0;m=c[d+20>>2]|0;du(m);Wr(c[d+8>>2]|0,a[d+16|0]|0,m);Wr(c[g+8>>2]|0,a[g+16|0]|0,m);ss(d);fs(g);ss(g);g=+h[A+8>>3]>+h[z+8>>3];d=g?z:A;u=Ur(d,g?A:z)|0;z=ns(u,g&1)|0;qs(j,z);Wr(u,g&1^1,m);eu(m);m=os(j,z)|0;if((m|0)!=0){fs(j);es(j,m,+cu(m,d))}m=os(z,f)|0;if((m|0)==0){o=3;continue}es(z,m,+cu(m,d));o=3}}}while(0);o=ts(c[53832]|0)|0;if((o|0)==(c[53830]|0)){i=b;return}else{C=o}do{Vr(c[C+8>>2]|0);C=ts(C)|0;}while((C|0)!=(c[53830]|0));i=b;return}function Ju(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,X=0.0,Y=0.0,Z=0,_=0,$=0.0,aa=0.0,ba=0,ca=0.0,ea=0.0,fa=0;e=i;i=i+8|0;f=e|0;if((Lw(b)|0)==1){g=(ux(b)|0)+8|0;h[c[(c[g>>2]|0)+132>>2]>>3]=0.0;h[(c[(c[g>>2]|0)+132>>2]|0)+8>>3]=0.0;j=d;i=e;return j|0}g=Lw(b)|0;k=da(g,g)|0;g=ux(b)|0;if((g|0)!=0){l=g;do{g=l+8|0;c[(c[(c[g>>2]|0)+112>>2]|0)+12>>2]=k;h[(c[(c[g>>2]|0)+112>>2]|0)+32>>3]=10.0;m=rw(b,l)|0;a:do{if((m|0)==0){n=11}else{p=m;q=0;b:while(1){r=c[p>>2]&3;s=c[((r|0)==3?p:p+32|0)+28>>2]|0;if((s|0)==(l|0)){t=c[((r|0)==2?p:p-32|0)+28>>2]|0}else{t=s}do{if((t|0)==(l|0)){u=q}else{if((q|0)==0){u=t;break}if((q|0)==(t|0)){u=q}else{break b}}}while(0);s=sw(b,p,l)|0;if((s|0)==0){n=11;break a}else{p=s;q=u}}c[c[(c[g>>2]|0)+112>>2]>>2]=k}}while(0);if((n|0)==11){n=0;c[c[(c[g>>2]|0)+112>>2]>>2]=0}l=vx(b,l)|0;}while((l|0)!=0)}do{if((d|0)==0){l=(Lw(b)|0)<3;k=ux(b)|0;if(l){v=k;break}if((k|0)!=0){l=k;do{if((c[c[(c[l+8>>2]|0)+112>>2]>>2]|0)==0){Mu(b,l,0)}l=vx(b,l)|0;}while((l|0)!=0)}l=ux(b)|0;if((l|0)==0){v=0;break}else{w=l;x=0;y=0}while(1){l=c[c[(c[w+8>>2]|0)+112>>2]>>2]|0;g=l>>>0>y>>>0;k=g?w:x;u=vx(b,w)|0;if((u|0)==0){v=k;break}else{w=u;x=k;y=g?l:y}}}else{v=d}}while(0);if((a[213992]|0)==0){z=v|0}else{d=c[o>>2]|0;y=v|0;x=$w(y)|0;gc(d|0,119768,(A=i,i=i+8|0,c[A>>2]=x,A)|0)|0;i=A;z=y}y=v+8|0;x=(c[(c[y>>2]|0)+112>>2]|0)+12|0;d=c[x>>2]|0;c[x>>2]=0;c[(c[(c[y>>2]|0)+112>>2]|0)+16>>2]=0;x=Wv(b,2,97008,0)|0;w=jk(8)|0;l=w;c[w>>2]=z;c:do{if((w|0)!=0){z=(x|0)==0;g=l;k=l;while(1){u=c[k>>2]|0;t=c[k+4>>2]|0;eF(k);m=u;if((u|0)==0){break c}q=(t|0)==0?0:g;p=u+8|0;u=(c[(c[(c[p>>2]|0)+112>>2]|0)+12>>2]|0)+1|0;s=rw(b,m)|0;d:do{if((s|0)==0){B=q;C=t}else{if(z){r=q;D=t;E=s;while(1){F=c[E>>2]&3;G=c[((F|0)==3?E:E+32|0)+28>>2]|0;if((G|0)==(m|0)){H=c[((F|0)==2?E:E-32|0)+28>>2]|0}else{H=G}G=H+8|0;F=(c[(c[G>>2]|0)+112>>2]|0)+12|0;do{if(u>>>0<(c[F>>2]|0)>>>0){c[F>>2]=u;c[(c[(c[G>>2]|0)+112>>2]|0)+16>>2]=m;I=(c[(c[p>>2]|0)+112>>2]|0)+8|0;c[I>>2]=(c[I>>2]|0)+1;I=jk(8)|0;J=I;c[I>>2]=H;if((r|0)==0){K=J;L=J;break}c[r+4>>2]=J;K=D;L=J}else{K=D;L=r}}while(0);G=sw(b,E,m)|0;if((G|0)==0){B=L;C=K;break d}else{r=L;D=K;E=G}}}else{M=q;N=t;O=s}while(1){E=O|0;if((a[fw(E,x)|0]|0)==48){if((Ya(fw(E,x)|0,91552)|0)==0){P=N;Q=M}else{n=39}}else{n=39}do{if((n|0)==39){n=0;E=c[O>>2]&3;D=c[((E|0)==3?O:O+32|0)+28>>2]|0;if((D|0)==(m|0)){R=c[((E|0)==2?O:O-32|0)+28>>2]|0}else{R=D}D=R+8|0;E=(c[(c[D>>2]|0)+112>>2]|0)+12|0;if(u>>>0>=(c[E>>2]|0)>>>0){P=N;Q=M;break}c[E>>2]=u;c[(c[(c[D>>2]|0)+112>>2]|0)+16>>2]=m;D=(c[(c[p>>2]|0)+112>>2]|0)+8|0;c[D>>2]=(c[D>>2]|0)+1;D=jk(8)|0;E=D;c[D>>2]=R;if((M|0)==0){P=E;Q=E;break}c[M+4>>2]=E;P=N;Q=E}}while(0);E=sw(b,O,m)|0;if((E|0)==0){B=Q;C=P;break}else{M=Q;N=P;O=E}}}}while(0);if((C|0)==0){break}else{g=B;k=C}}}}while(0);C=ux(b)|0;do{if((C|0)==0){S=0}else{B=C;O=0;while(1){P=c[(c[(c[B+8>>2]|0)+112>>2]|0)+12>>2]|0;if((P|0)==(d|0)){break}T=P>>>0>O>>>0?P:O;P=vx(b,B)|0;if((P|0)==0){n=48;break}else{B=P;O=T}}if((n|0)==48){if((T|0)>=0){S=T;break}}Fv(1,157624,(A=i,i=i+1|0,i=i+7&-8,c[A>>2]=0,A)|0)|0;i=A;j=v;i=e;return j|0}}while(0);T=ux(b)|0;if((T|0)!=0){n=T;do{T=n+8|0;d=c[(c[T>>2]|0)+112>>2]|0;do{if((c[d+8>>2]|0)==0){C=d+4|0;c[C>>2]=(c[C>>2]|0)+1;C=c[(c[(c[T>>2]|0)+112>>2]|0)+16>>2]|0;if((C|0)==0){break}else{U=C}do{C=U+8|0;O=(c[(c[C>>2]|0)+112>>2]|0)+4|0;c[O>>2]=(c[O>>2]|0)+1;U=c[(c[(c[C>>2]|0)+112>>2]|0)+16>>2]|0;}while((U|0)!=0)}}while(0);n=vx(b,n)|0;}while((n|0)!=0)}h[(c[(c[y>>2]|0)+112>>2]|0)+24>>3]=6.283185307179586;Lu(b,v);h[(c[(c[y>>2]|0)+112>>2]|0)+32>>3]=0.0;Ku(b,v);y=jk((S<<3)+8|0)|0;n=y;U=Hm(b|0,Wv(c[b+48>>2]|0,0,102688,0)|0,0)|0;e:do{if((U|0)==0){X=1.0;Y=0.0;Z=1}else{if((S|0)<1){X=0.0;Y=0.0;Z=1;break}else{_=1;$=0.0;aa=0.0;ba=U}while(1){ca=+sF(ba,f);if(ca<=0.0){X=aa;Y=$;Z=_;break e}ea=ca>.02?ca:.02;ca=$+ea;T=_+1|0;h[n+(_<<3)>>3]=ca;d=c[f>>2]|0;C=a[d]|0;f:do{if(C<<24>>24==0){fa=d}else{O=d;B=C;while(1){P=O+1|0;if(!((Qa(B<<24>>24|0)|0)!=0|B<<24>>24==58)){fa=O;break f}N=a[P]|0;if(N<<24>>24==0){fa=P;break}else{O=P;B=N}}}}while(0);if((_|0)<(S|0)){_=T;$=ca;aa=ea;ba=fa}else{X=ea;Y=ca;Z=T;break}}}}while(0);if((Z|0)<=(S|0)){fa=Z;aa=Y;while(1){Y=X+aa;h[n+(fa<<3)>>3]=Y;if((fa|0)<(S|0)){fa=fa+1|0;aa=Y}else{break}}}if((a[213992]|0)!=0){fa=c[o>>2]|0;Ma(127712,18,1,fa|0)|0;Z=0;while(1){gc(fa|0,115384,(A=i,i=i+8|0,h[A>>3]=+h[n+(Z<<3)>>3],A)|0)|0;i=A;if((Z|0)<(S|0)){Z=Z+1|0}else{break}}Ka(10,fa|0)|0}fa=ux(b)|0;if((fa|0)!=0){Z=fa;do{fa=Z+8|0;S=c[fa>>2]|0;A=c[S+112>>2]|0;aa=+h[n+(c[A+12>>2]<<3)>>3];X=aa*+V(+h[A+32>>3]);h[c[S+132>>2]>>3]=X;S=c[fa>>2]|0;X=aa*+W(+h[(c[S+112>>2]|0)+32>>3]);h[(c[S+132>>2]|0)+8>>3]=X;Z=vx(b,Z)|0;}while((Z|0)!=0)}eF(y);j=v;i=e;return j|0}function Ku(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0.0,i=0,j=0,k=0,l=0.0;d=c[(c[b+8>>2]|0)+112>>2]|0;if((c[d+16>>2]|0)==0){e=0.0}else{e=+h[d+32>>3]- +h[d+24>>3]*.5}d=rw(a,b)|0;if((d|0)==0){return}else{f=d;g=e}while(1){d=c[f>>2]&3;i=c[((d|0)==3?f:f+32|0)+28>>2]|0;if((i|0)==(b|0)){j=c[((d|0)==2?f:f-32|0)+28>>2]|0}else{j=i}i=j+8|0;d=c[(c[i>>2]|0)+112>>2]|0;do{if((c[d+16>>2]|0)==(b|0)){k=d+32|0;if(+h[k>>3]!=10.0){l=g;break}h[k>>3]=g+ +h[d+24>>3]*.5;k=c[(c[i>>2]|0)+112>>2]|0;e=g+ +h[k+24>>3];if((c[k+8>>2]|0)==0){l=e;break}Ku(a,j);l=e}else{l=g}}while(0);i=sw(a,f,b)|0;if((i|0)==0){break}else{f=i;g=l}}return}function Lu(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,g=0,i=0,j=0;d=c[(c[b+8>>2]|0)+112>>2]|0;e=+h[d+24>>3]/+((c[d+4>>2]|0)>>>0>>>0);d=rw(a,b)|0;if((d|0)==0){return}else{f=d}do{d=c[f>>2]&3;g=c[((d|0)==3?f:f+32|0)+28>>2]|0;if((g|0)==(b|0)){i=c[((d|0)==2?f:f-32|0)+28>>2]|0}else{i=g}g=i+8|0;d=c[(c[g>>2]|0)+112>>2]|0;do{if((c[d+16>>2]|0)==(b|0)){j=d+24|0;if(+h[j>>3]!=0.0){break}h[j>>3]=e*+((c[d+4>>2]|0)>>>0>>>0);if((c[(c[(c[g>>2]|0)+112>>2]|0)+8>>2]|0)==0){break}Lu(a,i)}}while(0);f=sw(a,f,b)|0;}while((f|0)!=0);return}function Mu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=(c[c[(c[b+8>>2]|0)+112>>2]>>2]|0)+1|0;f=rw(a,b)|0;if((f|0)==0){return}else{g=f}do{f=c[g>>2]&3;h=c[((f|0)==3?g:g+32|0)+28>>2]|0;if((h|0)==(b|0)){i=c[((f|0)==2?g:g-32|0)+28>>2]|0}else{i=h}do{if((i|0)!=(d|0)){h=c[(c[i+8>>2]|0)+112>>2]|0;if(e>>>0>=(c[h>>2]|0)>>>0){break}c[h>>2]=e;Mu(a,i,b)}}while(0);g=sw(a,g,b)|0;}while((g|0)!=0);return}function Nu(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0.0;qn(a,2);d=a+8|0;b[(c[d>>2]|0)+168>>1]=2;c[53568]=2;e=Lw(a)|0;f=jk(e*40|0)|0;g=jk((e<<2)+4|0)|0;c[(c[d>>2]|0)+144>>2]=g;g=ux(a)|0;if((g|0)!=0){e=0;i=g;while(1){qt(i);c[(c[i+8>>2]|0)+112>>2]=f+(e*40|0);c[(c[(c[d>>2]|0)+144>>2]|0)+(e<<2)>>2]=i;g=vx(a,i)|0;if((g|0)==0){break}else{e=e+1|0;i=g}}}i=ux(a)|0;if((i|0)==0){return}else{j=i}do{i=mw(a,j)|0;if((i|0)!=0){e=i;do{i=e|0;Wx(i,92664,176,1)|0;Zm(e)|0;k=+Fm(i,c[53750]|0,1.0,0.0);h[(c[e+8>>2]|0)+128>>3]=k;e=ow(a,e)|0;}while((e|0)!=0)}j=vx(a,j)|0;}while((j|0)!=0);return}function Ou(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=i;i=i+56|0;e=d|0;f=d+16|0;g=d+24|0;if((Lw(b)|0)==0){i=d;return}Nu(b);j=b|0;ew(j,108264)|0;k=ew(j,108264)|0;do{if((k|0)==0){l=0;m=0}else{if((a[k]|0)==0){l=0;m=1;break}n=Ax(b,k,0)|0;if((n|0)!=0){l=n;m=0;break}Fv(0,148416,(p=i,i=i+8|0,c[p>>2]=k,p)|0)|0;i=p;Fv(3,120912,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0)|0;i=p;l=0;m=1}}while(0);k=ew(j,112160)|0;do{if((k|0)==0){q=0}else{if((a[k]|0)==0){q=0;break}n=e|0;r=e+8|0;s=ac(k|0,105200,(p=i,i=i+16|0,c[p>>2]=n,c[p+8>>2]=r,p)|0)|0;i=p;if((s|0)==0){q=0;break}else if((s|0)==1){h[r>>3]=+h[n>>3]}if((a[213992]|0)==0){q=1;break}t=+h[r>>3];gc(c[o>>2]|0,99120,(p=i,i=i+16|0,h[p>>3]=+h[n>>3],h[p+8>>3]=t,p)|0)|0;i=p;q=1}}while(0);if((Lw(b)|0)==0){u=l}else{p=iv(b,f,0)|0;if((c[f>>2]|0)==1){k=Ju(b,l)|0;n=(m|0)!=0&(l|0)==0?k:l;r=(ux(b)|0)+8|0;eF(c[(c[r>>2]|0)+112>>2]|0);c[(c[r>>2]|0)+112>>2]=0;do{if((q|0)!=0){t=+h[e>>3];v=+h[e+8>>3];r=c[(c[k+8>>2]|0)+132>>2]|0;w=+h[r>>3];x=+h[r+8>>3];r=ux(b)|0;if((r|0)==0){break}else{y=r}do{if((y|0)!=(k|0)){r=y+8|0;s=c[(c[r>>2]|0)+132>>2]|0;h[s>>3]=w+t*(+h[s>>3]-w);s=(c[(c[r>>2]|0)+132>>2]|0)+8|0;h[s>>3]=x+v*(+h[s>>3]-x)}y=vx(b,y)|0;}while((y|0)!=0)}}while(0);nr(b)|0;Pt(b);z=n}else{tv(b,2,8,g)|0;c[g+12>>2]=0;if((c[f>>2]|0)>0){n=(q|0)==0;q=e|0;y=e+8|0;if((m|0)==0){e=0;while(1){k=c[p+(e<<2)>>2]|0;if((l|0)==0){A=24}else{if((Rx(k,l|0)|0)==0){A=24}else{B=l}}if((A|0)==24){A=0;B=0}jv(k)|0;s=Ju(k,B)|0;do{if(!n){x=+h[q>>3];v=+h[y>>3];r=c[(c[s+8>>2]|0)+132>>2]|0;w=+h[r>>3];t=+h[r+8>>3];r=ux(k)|0;if((r|0)==0){break}else{C=r}do{if((C|0)!=(s|0)){r=C+8|0;D=c[(c[r>>2]|0)+132>>2]|0;h[D>>3]=w+x*(+h[D>>3]-w);D=(c[(c[r>>2]|0)+132>>2]|0)+8|0;h[D>>3]=t+v*(+h[D>>3]-t)}C=vx(k,C)|0;}while((C|0)!=0)}}while(0);nr(k)|0;s=e+1|0;if((s|0)<(c[f>>2]|0)){e=s}else{E=l;break}}}else{e=l;C=0;while(1){B=c[p+(C<<2)>>2]|0;s=(e|0)!=0;if(s){if((Rx(B,e|0)|0)==0){A=33}else{F=e}}else{A=33}if((A|0)==33){A=0;F=0}jv(B)|0;D=Ju(B,F)|0;r=s?e:D;do{if(!n){t=+h[q>>3];v=+h[y>>3];s=c[(c[D+8>>2]|0)+132>>2]|0;w=+h[s>>3];x=+h[s+8>>3];s=ux(B)|0;if((s|0)==0){break}else{G=s}do{if((G|0)!=(D|0)){s=G+8|0;H=c[(c[s>>2]|0)+132>>2]|0;h[H>>3]=w+t*(+h[H>>3]-w);H=(c[(c[s>>2]|0)+132>>2]|0)+8|0;h[H>>3]=x+v*(+h[H>>3]-x)}G=vx(B,G)|0;}while((G|0)!=0)}}while(0);nr(B)|0;D=C+1|0;if((D|0)<(c[f>>2]|0)){e=r;C=D}else{E=r;break}}}}else{E=l}l=(ux(b)|0)+8|0;eF(c[(c[l>>2]|0)+112>>2]|0);c[(c[l>>2]|0)+112>>2]=0;sv(c[f>>2]|0,p,b,g)|0;Pt(b);z=E}if((c[f>>2]|0)>0){E=0;do{Gx(b,c[p+(E<<2)>>2]|0)|0;E=E+1|0;}while((E|0)<(c[f>>2]|0))}eF(p);u=z}if((m|0)!=0){gw(j,108264,$w(u|0)|0)|0}Xk(b);i=d;return}function Pu(a){a=a|0;var b=0,d=0,e=0;b=ux(a)|0;if((b|0)==0){return}else{d=b}do{b=mw(a,d)|0;if((b|0)!=0){e=b;do{tn(e);e=ow(a,e)|0;}while((e|0)!=0)}un(d);d=vx(a,d)|0;}while((d|0)!=0);eF(c[(c[a+8>>2]|0)+144>>2]|0);if((Ix(a|0)|0)==(a|0)){return}_x(a,0,98352);return}function Qu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0.0;b=i;i=i+32|0;d=b|0;e=Wv(a,1,119608,0)|0;f=Wv(a,0,119608,0)|0;g=Ru(a,f,e,Wv(a,0,157512,0)|0)|0;j=+T(+h[g>>3]+.1);_u(d,0.0,0.0,j,j);a=g+16|0;e=d;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];c[a+16>>2]=c[e+16>>2];c[a+20>>2]=c[e+20>>2];c[a+24>>2]=c[e+24>>2];c[a+28>>2]=c[e+28>>2];Su(g);Tu(g);Uu(g);i=b;return}function Ru(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0.0;f=jk(72)|0;g=f;c[f+60>>2]=0;i=f+56|0;c[i>>2]=a;j=a+8|0;k=c[j>>2]|0;if((c[k+172>>2]|0)<1){l=0;m=0;n=0;o=0.0}else{p=0;q=0;r=1;s=0;t=0.0;u=k;while(1){k=Ru(c[(c[u+176>>2]|0)+(r<<2)>>2]|0,b,d,e)|0;v=s+1|0;w=t+ +h[k>>3];x=(p|0)==0?k:p;if((q|0)!=0){c[q+52>>2]=k}y=c[j>>2]|0;if((r|0)<(c[y+172>>2]|0)){p=x;q=k;r=r+1|0;s=v;t=w;u=y}else{l=x;m=k;n=v;o=w;break}}}u=ux(a)|0;if((u|0)==0){z=l;A=n;B=o}else{s=u;u=l;l=m;m=n;t=o;while(1){n=s+8|0;if((c[c[(c[n>>2]|0)+112>>2]>>2]|0)==0){r=jk(72)|0;q=r;o=+Fm(s|0,d,1.0,0.0);w=o==0.0?1.0e3:o*1.0e3;h[r>>3]=w;c[r+60>>2]=1;c[r+56>>2]=s;if((l|0)!=0){c[l+52>>2]=q}c[c[(c[n>>2]|0)+112>>2]>>2]=a;C=t+w;D=m+1|0;E=q;F=(u|0)==0?q:u}else{C=t;D=m;E=l;F=u}q=vx(a,s)|0;if((q|0)==0){z=F;A=D;B=C;break}else{s=q;u=F;l=E;m=D;t=C}}}c[f+64>>2]=A;if((A|0)==0){C=+Fm(a|0,b,1.0,0.0);h[f>>3]=C==0.0?1.0e3:C*1.0e3;G=f+48|0;H=G;c[H>>2]=z;return g|0}b=f+8|0;h[b>>3]=B;B=+Fm(c[i>>2]|0,e,0.0,0.0);if(B==0.0){I=+h[b>>3]}else{C=B*2.0+ +T(+h[b>>3]);I=C*C}h[f>>3]=I;G=f+48|0;H=G;c[H>>2]=z;return g|0}function Su(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0.0,A=0,B=0;d=i;i=i+32|0;e=d|0;f=c[b+64>>2]|0;if((f|0)==0){i=d;return}g=jk(f<<2)|0;j=g;k=b+48|0;l=(f|0)>0;if(l){m=0;n=k;while(1){p=c[n>>2]|0;c[j+(m<<2)>>2]=p;q=m+1|0;if((q|0)<(f|0)){m=q;n=p+52|0}else{break}}}Jb(g|0,f|0,4,80);n=jk(f<<3)|0;m=n;if(l){p=0;do{h[m+(p<<3)>>3]=+h[c[j+(p<<2)>>2]>>3];p=p+1|0;}while((p|0)<(f|0))}r=+h[b+8>>3];if(+h[b>>3]==r){s=Zu(f,m,b+16|0)|0}else{t=+h[b+40>>3];u=+h[b+32>>3];h[e>>3]=+h[b+16>>3];h[e+8>>3]=+h[b+24>>3];v=t-u;w=(t+u- +T(v*v+r*4.0))*.5;h[e+16>>3]=u-w;h[e+24>>3]=t-w;s=Zu(f,m,e)|0}if((a[213992]|0)!=0){w=+h[b+24>>3];t=+h[b+32>>3];u=+h[b+40>>3];gc(c[o>>2]|0,108224,(x=i,i=i+32|0,h[x>>3]=+h[b+16>>3],h[x+8>>3]=w,h[x+16>>3]=t,h[x+24>>3]=u,x)|0)|0;i=x}if(!l){eF(g);eF(n);eF(s);i=d;return}b=c[o>>2]|0;e=0;do{p=s+(e<<5)|0;q=(c[j+(e<<2)>>2]|0)+16|0;y=p;c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];c[q+16>>2]=c[y+16>>2];c[q+20>>2]=c[y+20>>2];c[q+24>>2]=c[y+24>>2];c[q+28>>2]=c[y+28>>2];if((a[213992]|0)!=0){u=+h[p>>3];t=+h[s+(e<<5)+16>>3];w=t*.5;r=+h[s+(e<<5)+8>>3];v=+h[s+(e<<5)+24>>3];z=v*.5;gc(b|0,102600,(x=i,i=i+80|0,h[x>>3]=+h[m+(e<<3)>>3],h[x+8>>3]=u-w,h[x+16>>3]=r-z,h[x+24>>3]=u+w,h[x+32>>3]=r+z,h[x+40>>3]=t*v,h[x+48>>3]=u,h[x+56>>3]=r,h[x+64>>3]=t,h[x+72>>3]=v,x)|0)|0;i=x}e=e+1|0;}while((e|0)<(f|0));eF(g);eF(n);eF(s);if(l){A=0;B=k}else{i=d;return}while(1){k=c[B>>2]|0;if((c[k+60>>2]|0)==0){Su(k)}l=A+1|0;if((l|0)<(f|0)){A=l;B=k+52|0}else{break}}i=d;return}function Tu(b){b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,p=0;d=i;i=i+40|0;e=d|0;if((c[b+60>>2]|0)==0){f=c[b+48>>2]|0;if((f|0)!=0){g=f;do{Tu(g);g=c[g+52>>2]|0;}while((g|0)!=0)}j=+h[b+32>>3];k=+h[b+40>>3];l=+h[b+16>>3]-j*.5;m=+h[b+24>>3]-k*.5;g=c[(c[b+56>>2]|0)+8>>2]|0;h[g+16>>3]=l;h[g+24>>3]=m;h[g+32>>3]=j+l;h[g+40>>3]=k+m;i=d;return}m=+h[b+24>>3];k=+h[b+32>>3];l=+h[b+40>>3];g=c[b+56>>2]|0;f=g+8|0;n=c[f>>2]|0;h[n+16>>3]=+h[b+16>>3];h[n+24>>3]=m;h[(c[f>>2]|0)+32>>3]=k/72.0;h[(c[f>>2]|0)+40>>3]=l/72.0;n=g|0;vn(g,c[(c[(Hx(n)|0)+8>>2]|0)+116>>2]&1);b=e|0;e=c[53624]|0;do{if((e|0)!=0){if((a[fw(n,e)|0]|0)!=0){break}nb(b|0,115344,(p=i,i=i+8|0,h[p>>3]=+h[(c[f>>2]|0)+80>>3]*.7,p)|0)|0;i=p;hw(n,c[53624]|0,b)|0}}while(0);Ym(g);if((a[213992]|0)==0){i=d;return}g=c[o>>2]|0;b=$w(n)|0;n=c[f>>2]|0;l=+h[n+16>>3];k=+h[n+24>>3];m=+h[n+80>>3];j=+h[n+88>>3]+ +h[n+96>>3];gc(g|0,127608,(p=i,i=i+40|0,c[p>>2]=b,h[p+8>>3]=l,h[p+16>>3]=k,h[p+24>>3]=m,h[p+32>>3]=j,p)|0)|0;i=p;i=d;return}function Uu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=c[a+64>>2]|0;if((b|0)<=0){d=a;eF(d);return}e=0;f=a+48|0;while(1){g=c[f>>2]|0;Uu(g);h=e+1|0;if((h|0)<(b|0)){e=h;f=g+52|0}else{break}}d=a;eF(d);return}function Vu(a,b){a=a|0;b=b|0;var d=0.0,e=0;d=+h[c[a>>2]>>3]- +h[c[b>>2]>>3];if(d<0.0){e=1;return e|0}e=(d>0.0)<<31>>31;return e|0}function Wu(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c[53590]=Wv(a,1,142256,119360)|0;qn(a,2);d=a+8|0;b[(c[d>>2]|0)+168>>1]=2;c[53568]=2;Yu(a,0);e=jk((Lw(a)|0)<<2)|0;f=jk(((Lw(a)|0)<<2)+4|0)|0;c[(c[d>>2]|0)+144>>2]=f;f=ux(a)|0;if((f|0)!=0){g=0;h=f;while(1){f=h|0;Wx(f,110896,304,1)|0;c[(c[h+8>>2]|0)+112>>2]=e+(g<<2);i=g+1|0;c[(c[(c[d>>2]|0)+144>>2]|0)+(g<<2)>>2]=h;gw(f,142256,119360)|0;f=mw(a,h)|0;if((f|0)!=0){j=f;do{Wx(j|0,109720,304,1)|0;j=ow(a,j)|0;}while((j|0)!=0)}j=vx(a,h)|0;if((j|0)==0){break}else{g=i;h=j}}}do{if((Lw(a)|0)==0){if((c[(c[d>>2]|0)+172>>2]|0)!=0){break}return}}while(0);Qu(a);Xk(a);return}function Xu(a){a=a|0;var b=0,d=0,e=0;b=ux(a)|0;if((b|0)==0){return}eF(c[(c[b+8>>2]|0)+112>>2]|0);d=b;do{b=mw(a,d)|0;if((b|0)!=0){e=b;do{tn(e);e=ow(a,e)|0;}while((e|0)!=0)}un(d);d=vx(a,d)|0;}while((d|0)!=0);eF(c[(c[a+8>>2]|0)+144>>2]|0);if((Ix(a|0)|0)==(a|0)){return}_x(a,0,96984);return}function Yu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;d=i;i=i+16|0;e=d|0;f=(b|0)==0;if(f){c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;g=e}else{g=b}b=sy(a)|0;if((b|0)!=0){h=g+8|0;j=g+4|0;k=g|0;l=b;do{b=l|0;if((Za($w(b)|0,103864,7)|0)==0){Wx(b,96984,272,1)|0;b=(c[h>>2]|0)+1|0;c[h>>2]=b;m=c[j>>2]|0;if((b|0)<(m|0)){n=b;o=c[k>>2]|0}else{b=m+10|0;c[j>>2]=b;m=mk(c[k>>2]|0,b<<2)|0;c[k>>2]=m;n=c[h>>2]|0;o=m}c[o+(n<<2)>>2]=l;Yu(l,0)}else{Yu(l,g)}l=ty(l)|0;}while((l|0)!=0)}if(!f){i=d;return}f=e+8|0;l=a+8|0;c[(c[l>>2]|0)+172>>2]=c[f>>2];a=c[f>>2]|0;if((a|0)==0){i=d;return}f=mk(c[e>>2]|0,(a<<2)+4|0)|0;c[(c[l>>2]|0)+176>>2]=f;i=d;return}function Zu(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,l=0.0,m=0.0,n=0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0;g=i;j=f;f=i;i=i+32|0;tF(f,j,32)|0;if((b|0)>0){l=0.0;j=0;while(1){m=l+ +h[e+(j<<3)>>3];n=j+1|0;if((n|0)<(b|0)){l=m;j=n}else{p=m;break}}}else{p=0.0}l=+h[f+16>>3];m=+h[f+24>>3];if(p>l*m+.001){q=0;i=g;return q|0}j=jk(b<<5)|0;if((b|0)<1){q=j;i=g;return q|0}n=f+8|0;r=f|0;p=(c[k>>2]=d[n]|d[n+1|0]<<8|d[n+2|0]<<16|d[n+3|0]<<24,c[k+4>>2]=d[n+4|0]|d[n+5|0]<<8|d[n+6|0]<<16|d[n+7|0]<<24,+h[k>>3]);n=c[o>>2]|0;f=b;b=e;e=j;s=1.0;t=l;u=m;v=l<m?l:m;w=(c[k>>2]=d[r]|d[r+1|0]<<8|d[r+2|0]<<16|d[r+3|0]<<24,c[k+4>>2]=d[r+4|0]|d[r+5|0]<<8|d[r+6|0]<<16|d[r+7|0]<<24,+h[k>>3]);x=p;p=l;l=m;while(1){m=t<u?t:u;r=0;y=0.0;z=s;A=0.0;B=1.0;C=v;while(1){if((a[213992]|0)!=0){gc(n|0,159552,(D=i,i=i+32|0,h[D>>3]=w,h[D+8>>3]=t,h[D+16>>3]=x,h[D+24>>3]=u,D)|0)|0;i=D;gc(n|0,163216,(D=i,i=i+8|0,c[D>>2]=r,D)|0)|0;i=D}if((r|0)==0){E=+h[b>>3];F=C*C;G=E/F;H=F/E;r=1;y=E;z=E;A=E;B=G>H?G:H;C=m;continue}if((r|0)>=(f|0)){break}H=+h[b+(r<<3)>>3];G=H<y?y:H;E=H>z?z:H;F=A+H;H=F/C;I=H/(E/H);J=G/H/H;H=I>J?I:J;if(H>B){break}r=r+1|0;y=G;z=E;A=F;B=H;C=m}m=A/C;if((a[213992]|0)!=0){gc(n|0,131176,(D=i,i=i+32|0,c[D>>2]=r,h[D+8>>3]=A,h[D+16>>3]=C,h[D+24>>3]=m,D)|0)|0;i=D}K=(r|0)>0;if(C==t){if(K){B=m*.5;z=l*.5+x-B;L=0;y=w-t*.5;while(1){h[e+(L<<5)+24>>3]=m;H=+h[b+(L<<3)>>3]/m;h[e+(L<<5)+16>>3]=H;h[e+(L<<5)+8>>3]=z;h[e+(L<<5)>>3]=y+H*.5;M=L+1|0;if((M|0)<(r|0)){L=M;y=y+H}else{N=l;O=p;P=B;break}}}else{N=u;O=t;P=m*.5}B=N-m;Q=O;R=B;S=w;T=x-P;U=p;V=B}else{if(K){B=m*.5;y=w-p*.5+B;L=0;z=x+u*.5;while(1){h[e+(L<<5)+16>>3]=m;C=+h[b+(L<<3)>>3]/m;h[e+(L<<5)+24>>3]=C;h[e+(L<<5)>>3]=y;h[e+(L<<5)+8>>3]=z-C*.5;M=L+1|0;if((M|0)<(r|0)){L=M;z=z-C}else{W=p;X=l;Y=B;break}}}else{W=t;X=u;Y=m*.5}B=W-m;Q=B;R=X;S=w+Y;T=x;U=B;V=l}L=f-r|0;if((L|0)<1){q=j;break}else{f=L;b=b+(r<<3)|0;e=e+(r<<5)|0;s=0.0;t=Q;u=R;v=Q<R?Q:R;w=S;x=T;p=U;l=V}}i=g;return q|0}function _u(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;h[a>>3]=b;h[a+8>>3]=c;h[a+16>>3]=d;h[a+24>>3]=e;return}function $u(a){a=a|0;var d=0,e=0,f=0,g=0;qn(a,2);d=a+8|0;b[(c[d>>2]|0)+168>>1]=2;c[53568]=2;e=ux(a)|0;if((e|0)!=0){f=e;do{qt(f);f=vx(a,f)|0;}while((f|0)!=0)}f=ux(a)|0;if((f|0)!=0){e=f;do{f=mw(a,e)|0;if((f|0)!=0){g=f;do{Wx(g|0,81536,176,1)|0;Zm(g)|0;g=ow(a,g)|0;}while((g|0)!=0)}e=vx(a,e)|0;}while((e|0)!=0)}av(a,0);bv(a,0);cv(a,0);e=c[d>>2]|0;if((c[(c[e+8>>2]|0)+84>>2]|0)==0){d=b[e+128>>1]&14;if((d|0)==0){Xk(a);return}Lt(a,d)|0;Xk(a);return}else{d=ux(a)|0;if((d|0)!=0){e=d;do{d=e+8|0;g=c[d>>2]|0;h[c[g+132>>2]>>3]=+h[g+16>>3]/72.0;g=c[d>>2]|0;h[(c[g+132>>2]|0)+8>>3]=+h[g+24>>3]/72.0;e=vx(a,e)|0;}while((e|0)!=0)}Nt(a);Xk(a);return}}function av(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;d=i;i=i+16|0;e=d|0;f=(b|0)==0;if(f){c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;g=e}else{g=b}b=sy(a)|0;if((b|0)!=0){h=g+8|0;j=g+4|0;k=g|0;l=b;do{b=l|0;if((Za($w(b)|0,91512,7)|0)==0){Wx(b,86256,272,1)|0;Rj(l);b=(c[h>>2]|0)+1|0;c[h>>2]=b;m=c[j>>2]|0;if((b|0)<(m|0)){n=b;o=c[k>>2]|0}else{b=m+10|0;c[j>>2]=b;m=mk(c[k>>2]|0,b<<2)|0;c[k>>2]=m;n=c[h>>2]|0;o=m}c[o+(n<<2)>>2]=l;av(l,0)}else{av(l,g)}l=ty(l)|0;}while((l|0)!=0)}if(!f){i=d;return}f=e+8|0;l=a+8|0;c[(c[l>>2]|0)+172>>2]=c[f>>2];a=c[f>>2]|0;if((a|0)==0){i=d;return}f=mk(c[e>>2]|0,(a<<2)+4|0)|0;c[(c[l>>2]|0)+176>>2]=f;i=d;return}function bv(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0,ha=0,ia=0;e=i;i=i+32|0;f=e|0;g=c[a+48>>2]|0;if((d[213992]|0)>>>0>1>>>0){j=c[o>>2]|0;if((b|0)>0){k=b;do{Ma(115328,2,1,j|0)|0;k=k-1|0;}while((k|0)>0)}k=$w(a|0)|0;gc(j|0,108208,(l=i,i=i+8|0,c[l>>2]=k,l)|0)|0;i=l}k=a+8|0;j=c[k>>2]|0;if((c[j+172>>2]|0)<1){m=0}else{n=b+1|0;p=0;q=1;r=j;while(1){j=c[(c[r+176>>2]|0)+(q<<2)>>2]|0;bv(j,n);s=(Lw(j)|0)+p|0;j=c[k>>2]|0;if((q|0)<(c[j+172>>2]|0)){p=s;q=q+1|0;r=j}else{m=s;break}}}r=(Lw(a)|0)-m|0;m=c[k>>2]|0;q=(c[m+172>>2]|0)+r|0;p=(q|0)==0;do{if(p){if((c[m+12>>2]|0)!=0){break}h[m+24>>3]=0.0;h[(c[k>>2]|0)+16>>3]=0.0;h[(c[k>>2]|0)+40>>3]=18.0;h[(c[k>>2]|0)+32>>3]=18.0;i=e;return}}while(0);m=f+16|0;do{if((tv(a,4,4,f)|0)>>>0<3>>>0){c[m>>2]=3;t=0;u=0}else{if((c[m>>2]|0)!=4){t=0;u=0;break}if((c[f+28>>2]&2|0)==0){t=0;u=0;break}n=Wv(g,0,102592,0)|0;s=Wv(g,1,102592,0)|0;if((n|0)==0&(s|0)==0){j=$w(a|0)|0;Fv(0,96896,(l=i,i=i+8|0,c[l>>2]=j,l)|0)|0;i=l;t=0;u=0;break}else{c[f+24>>2]=jk(q)|0;t=s;u=n;break}}}while(0);g=jk(q<<5)|0;m=g;n=jk(q<<2)|0;s=n;j=c[k>>2]|0;if((c[j+172>>2]|0)<1){v=0}else{w=f+24|0;x=(u|0)==0;y=0;z=1;A=j;while(1){j=c[(c[A+176>>2]|0)+(z<<2)>>2]|0;B=m+(y<<5)|0;C=(c[j+8>>2]|0)+16|0;c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];c[B+8>>2]=c[C+8>>2];c[B+12>>2]=c[C+12>>2];c[B+16>>2]=c[C+16>>2];c[B+20>>2]=c[C+20>>2];c[B+24>>2]=c[C+24>>2];c[B+28>>2]=c[C+28>>2];C=j|0;if(!((c[w>>2]|0)==0|x)){j=Em(C,u,0,0)|0;c[(c[w>>2]|0)+(y<<2)>>2]=j}j=y+1|0;c[s+(y<<2)>>2]=C;C=c[k>>2]|0;if((z|0)<(c[C+172>>2]|0)){y=j;z=z+1|0;A=C}else{v=j;break}}}a:do{if((r|0)>0){A=ux(a)|0;if((A|0)==0){break}z=a|0;y=f+24|0;if((t|0)==0){w=A;u=v;while(1){x=w+8|0;j=(c[x>>2]|0)+112|0;if((c[j>>2]|0)==0){c[j>>2]=z;j=c[x>>2]|0;D=+h[j+88>>3]+ +h[j+96>>3];E=+h[j+80>>3];vF(m+(u<<5)|0,0,16)|0;h[m+(u<<5)+16>>3]=D;h[m+(u<<5)+24>>3]=E;c[s+(u<<2)>>2]=w;F=u+1|0}else{F=u}j=vx(a,w)|0;if((j|0)==0){break a}else{w=j;u=F}}}else{G=A;H=v}while(1){u=G+8|0;w=(c[u>>2]|0)+112|0;if((c[w>>2]|0)==0){c[w>>2]=z;w=c[u>>2]|0;E=+h[w+88>>3]+ +h[w+96>>3];D=+h[w+80>>3];vF(m+(H<<5)|0,0,16)|0;h[m+(H<<5)+16>>3]=E;h[m+(H<<5)+24>>3]=D;w=G|0;if((c[y>>2]|0)!=0){u=Em(w,t,0,0)|0;c[(c[y>>2]|0)+(H<<2)>>2]=u}c[s+(H<<2)>>2]=w;I=H+1|0}else{I=H}w=vx(a,G)|0;if((w|0)==0){break}else{G=w;H=I}}}}while(0);I=ov(q,m,f)|0;H=c[f+24>>2]|0;if((H|0)!=0){eF(H)}H=(q|0)>0;if(H){G=(b|0)>0;t=c[o>>2]|0;D=-2147483647.0;E=-2147483647.0;J=2147483647.0;K=2147483647.0;v=0;while(1){L=+(c[I+(v<<3)>>2]|0);M=+(c[I+(v<<3)+4>>2]|0);N=L+ +h[m+(v<<5)>>3];O=L+ +h[m+(v<<5)+16>>3];L=M+ +h[m+(v<<5)+8>>3];P=M+ +h[m+(v<<5)+24>>3];M=K<N?K:N;Q=J<L?J:L;R=E>O?E:O;S=D>P?D:P;F=c[s+(v<<2)>>2]|0;r=F+8|0;y=c[r>>2]|0;z=y+16|0;do{if((v|0)<(c[(c[k>>2]|0)+172>>2]|0)){h[z>>3]=N;h[y+24>>3]=L;h[y+32>>3]=O;h[y+40>>3]=P;if((d[213992]|0)>>>0<=1>>>0){break}if(G){A=b;do{Ma(115328,2,1,t|0)|0;A=A-1|0;}while((A|0)>0)}A=$w(F)|0;gc(t|0,127520,(l=i,i=i+40|0,c[l>>2]=A,h[l+8>>3]=N,h[l+16>>3]=L,h[l+24>>3]=O,h[l+32>>3]=P,l)|0)|0;i=l}else{h[z>>3]=(N+O)*.5;h[y+24>>3]=(L+P)*.5;if((d[213992]|0)>>>0<=1>>>0){break}if(G){A=b;do{Ma(115328,2,1,t|0)|0;A=A-1|0;}while((A|0)>0)}A=$w(F)|0;w=c[r>>2]|0;T=+h[w+16>>3];U=+h[w+24>>3];gc(t|0,157320,(l=i,i=i+24|0,c[l>>2]=A,h[l+8>>3]=T,h[l+16>>3]=U,l)|0)|0;i=l}}while(0);r=v+1|0;if((r|0)<(q|0)){D=S;E=R;J=Q;K=M;v=r}else{V=S;W=R;X=Q;Y=M;break}}}else{V=-2147483647.0;W=-2147483647.0;X=2147483647.0;Y=2147483647.0}v=c[k>>2]|0;t=c[v+12>>2]|0;do{if((t|0)==0){Z=Y;_=X;$=W;aa=V}else{K=+h[t+24>>3];if(p){ba=0.0;ca=0.0;da=K;ea=+h[t+32>>3]}else{ba=Y;ca=X;da=W;ea=V}J=K-(da-ba);if(J<=0.0){Z=ba;_=ca;$=da;aa=ea;break}K=J*.5;Z=ba-K;_=ca;$=da+K;aa=ea}}while(0);t=(b|0)>0;if(t){fa=+((c[f+8>>2]|0)>>>0>>>0)*.5}else{fa=0.0}ea=Z-fa;Z=$+fa;$=_-(fa+ +h[v+56>>3]);_=aa+(fa+ +h[v+88>>3]);if((d[213992]|0)>>>0>1>>>0){if(t){v=c[o>>2]|0;f=b;do{Ma(115328,2,1,v|0)|0;f=f-1|0;}while((f|0)>0)}f=c[o>>2]|0;v=$w(a|0)|0;gc(f|0,127520,(l=i,i=i+40|0,c[l>>2]=v,h[l+8>>3]=ea,h[l+16>>3]=$,h[l+24>>3]=Z,h[l+32>>3]=_,l)|0)|0;i=l}b:do{if(H){v=c[o>>2]|0;if(t){ga=0}else{f=0;while(1){p=c[s+(f<<2)>>2]|0;G=p+8|0;m=c[G>>2]|0;r=m+16|0;fa=+h[r>>3];F=m+24|0;aa=+h[F>>3];do{if((f|0)<(c[(c[k>>2]|0)+172>>2]|0)){y=m+32|0;z=m+40|0;da=fa-ea;ca=aa-$;ba=+h[y>>3]-ea;V=+h[z>>3]-$;h[r>>3]=da;h[F>>3]=ca;h[y>>3]=ba;h[z>>3]=V;if((d[213992]|0)>>>0<=1>>>0){break}z=$w(p)|0;gc(v|0,127520,(l=i,i=i+40|0,c[l>>2]=z,h[l+8>>3]=da,h[l+16>>3]=ca,h[l+24>>3]=ba,h[l+32>>3]=V,l)|0)|0;i=l}else{h[r>>3]=fa-ea;h[F>>3]=aa-$;if((d[213992]|0)>>>0<=1>>>0){break}z=$w(p)|0;y=c[G>>2]|0;V=+h[y+16>>3];ba=+h[y+24>>3];gc(v|0,157320,(l=i,i=i+24|0,c[l>>2]=z,h[l+8>>3]=V,h[l+16>>3]=ba,l)|0)|0;i=l}}while(0);f=f+1|0;if((f|0)>=(q|0)){break b}}}do{f=c[s+(ga<<2)>>2]|0;G=f+8|0;p=c[G>>2]|0;F=p+16|0;M=+h[F>>3];r=p+24|0;Q=+h[r>>3];do{if((ga|0)<(c[(c[k>>2]|0)+172>>2]|0)){m=p+32|0;z=p+40|0;R=M-ea;S=Q-$;aa=+h[m>>3]-ea;fa=+h[z>>3]-$;h[F>>3]=R;h[r>>3]=S;h[m>>3]=aa;h[z>>3]=fa;if((d[213992]|0)>>>0>1>>>0){ha=b}else{break}do{Ma(115328,2,1,v|0)|0;ha=ha-1|0;}while((ha|0)>0);z=$w(f)|0;gc(v|0,127520,(l=i,i=i+40|0,c[l>>2]=z,h[l+8>>3]=R,h[l+16>>3]=S,h[l+24>>3]=aa,h[l+32>>3]=fa,l)|0)|0;i=l}else{h[F>>3]=M-ea;h[r>>3]=Q-$;if((d[213992]|0)>>>0>1>>>0){ia=b}else{break}do{Ma(115328,2,1,v|0)|0;ia=ia-1|0;}while((ia|0)>0);z=$w(f)|0;m=c[G>>2]|0;fa=+h[m+16>>3];aa=+h[m+24>>3];gc(v|0,157320,(l=i,i=i+24|0,c[l>>2]=z,h[l+8>>3]=fa,h[l+16>>3]=aa,l)|0)|0;i=l}}while(0);ga=ga+1|0;}while((ga|0)<(q|0))}}while(0);Q=Z-ea;Z=_-$;_=ea-ea;ea=$-$;q=c[k>>2]|0;h[q+16>>3]=_;h[q+24>>3]=ea;h[q+32>>3]=Q;h[q+40>>3]=Z;if((d[213992]|0)>>>0>1>>>0){if(t){t=c[o>>2]|0;q=b;do{Ma(115328,2,1,t|0)|0;q=q-1|0;}while((q|0)>0)}q=c[o>>2]|0;t=$w(a|0)|0;gc(q|0,127520,(l=i,i=i+40|0,c[l>>2]=t,h[l+8>>3]=_,h[l+16>>3]=ea,h[l+24>>3]=Q,h[l+32>>3]=Z,l)|0)|0;i=l}eF(g);eF(n);eF(I);i=e;return}function cv(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0;e=i;f=a+8|0;g=c[f>>2]|0;j=+h[g+16>>3];k=+h[g+24>>3];if((d[213992]|0)>>>0>1>>>0){g=c[o>>2]|0;if((b|0)>0){l=b;do{Ma(115328,2,1,g|0)|0;l=l-1|0;}while((l|0)>0)}l=$w(a|0)|0;gc(g|0,119416,(m=i,i=i+8|0,c[m>>2]=l,m)|0)|0;i=m}l=(b|0)!=0;do{if(l){g=ux(a)|0;if((g|0)==0){break}n=(b|0)>0;p=c[o>>2]|0;q=g;do{g=q+8|0;r=c[g>>2]|0;do{if((c[r+112>>2]|0)==(a|0)){s=r+16|0;h[s>>3]=j+ +h[s>>3];s=(c[g>>2]|0)+24|0;h[s>>3]=k+ +h[s>>3];if((d[213992]|0)>>>0<=1>>>0){break}if(n){s=b;do{Ma(115328,2,1,p|0)|0;s=s-1|0;}while((s|0)>0)}s=$w(q|0)|0;t=c[g>>2]|0;u=+h[t+16>>3];v=+h[t+24>>3];gc(p|0,157320,(m=i,i=i+24|0,c[m>>2]=s,h[m+8>>3]=u,h[m+16>>3]=v,m)|0)|0;i=m}}while(0);q=vx(a,q)|0;}while((q|0)!=0)}}while(0);a=c[f>>2]|0;if((c[a+172>>2]|0)<1){i=e;return}q=(b|0)>0;p=c[o>>2]|0;n=b+1|0;g=1;r=a;while(1){a=c[(c[r+176>>2]|0)+(g<<2)>>2]|0;if(l){s=a+8|0;t=c[s>>2]|0;v=j+ +h[t+16>>3];u=k+ +h[t+24>>3];w=j+ +h[t+32>>3];x=k+ +h[t+40>>3];if((d[213992]|0)>>>0>1>>>0){if(q){y=b;do{Ma(115328,2,1,p|0)|0;y=y-1|0;}while((y|0)>0)}y=$w(a|0)|0;gc(p|0,127520,(m=i,i=i+40|0,c[m>>2]=y,h[m+8>>3]=v,h[m+16>>3]=u,h[m+24>>3]=w,h[m+32>>3]=x,m)|0)|0;i=m;z=c[s>>2]|0}else{z=t}h[z+16>>3]=v;h[z+24>>3]=u;h[z+32>>3]=w;h[z+40>>3]=x}cv(a,n);y=c[f>>2]|0;if((g|0)<(c[y+172>>2]|0)){g=g+1|0;r=y}else{break}}i=e;return}function dv(a){a=a|0;var b=0,c=0;b=ux(a)|0;if((b|0)==0){ev(a);return}else{c=b}do{un(c);c=vx(a,c)|0;}while((c|0)!=0);ev(a);return}function ev(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a+8|0;a=c[b>>2]|0;d=c[a+176>>2]|0;if((c[a+172>>2]|0)<1){e=d;f=e;eF(f);return}else{g=1;h=d}while(1){d=c[h+(g<<2)>>2]|0;dk(c[(c[d+8>>2]|0)+12>>2]|0);ev(d);d=c[b>>2]|0;a=c[d+176>>2]|0;if((g|0)<(c[d+172>>2]|0)){g=g+1|0;h=a}else{e=a;break}}f=e;eF(f);return}function fv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,la=0,na=0,oa=0,qa=0,ra=0;g=i;i=i+4256|0;h=1;j=0;k=i;i=i+168|0;c[k>>2]=0;while(1)switch(h|0){case 1:l=g|0;m=g+128|0;n=g+144|0;o=g+160|0;p=ma(20,b|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((p|0)==0){h=2;break}else{h=3;break};case 2:c[d>>2]=0;q=0;h=37;break;case 3:if((e|0)==0){r=118752;h=6;break}else{s=e;h=4;break};case 4:t=s+1|0;w=a[s]|0;if((w<<24>>24|0)==95){s=t;h=4;break}else if((w<<24>>24|0)==0){r=e;h=6;break}else{h=5;break};case 5:p=ma(2,w&255|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((p|0)==0){r=118752;h=6;break}else{s=t;h=4;break};case 6:x=ma(24,r|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;y=x+25|0;if((y|0)<129){h=7;break}else{h=8;break};case 7:z=l|0;h=9;break;case 8:p=ma(54,y|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;z=p;h=9;break;case 9:wa(172,z|0,r|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;p=ma(18,b|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((p|0)==0){h=11;break}else{A=p;h=10;break};case 10:a[(c[A+8>>2]|0)+157|0]=0;p=wa(88,b|0,A|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((p|0)==0){h=11;break}else{A=p;h=10;break};case 11:p=ma(54,40)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;B=p;p=o|0;c[n>>2]=p;c[n+4>>2]=o+4096;c[n+12>>2]=0;c[n+8>>2]=0;C=m|0;c[C>>2]=n;c[m+4>>2]=n;c[m+8>>2]=p;D=BF(178072,h,k)|0;h=38;break;case 38:if((D|0)==0){h=12;break}else{E=1;F=0;G=B;H=0;I=n;h=28;break};case 12:J=ma(18,b|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((J|0)==0){K=0;L=0;h=20;break}else{h=13;break};case 13:M=z+x|0;N=0;O=0;P=J;Q=0;h=14;break;case 14:R=c[P+8>>2]|0;if((a[R+157|0]|0)==0){h=15;break}else{S=Q;T=O;U=N;h=19;break};case 15:if((a[R+119|0]|0)==3){h=16;break}else{S=Q;T=O;U=N;h=19;break};case 16:if((O|0)==0){h=17;break}else{V=Q;W=O;X=N;h=18;break};case 17:pa(6,M|0,156992,(Y=i,i=i+8|0,c[Y>>2]=N,Y)|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;i=Y;p=pa(38,b|0,z|0,1)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;Aa(60,p|0,127304,272,1)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;c[B+(N<<2)>>2]=p;V=1;W=p;X=N+1|0;h=18;break;case 18:ja(26,b|0,P|0,26,W|0,m|0);if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;S=V;T=W;U=X;h=19;break;case 19:p=wa(88,b|0,P|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((p|0)==0){K=U;L=S;h=20;break}else{N=U;O=T;P=p;Q=S;h=14;break};case 20:Z=ma(18,b|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((Z|0)==0){_=K;$=B;h=27;break}else{h=21;break};case 21:aa=z+x|0;ba=K;ca=Z;da=B;ea=10;h=22;break;case 22:if((a[(c[ca+8>>2]|0)+157|0]|0)==0){h=23;break}else{fa=ea;ga=da;ha=ba;h=26;break};case 23:pa(6,aa|0,156992,(Y=i,i=i+8|0,c[Y>>2]=ba,Y)|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;i=Y;ia=pa(38,b|0,z|0,1)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;p=ia|0;Aa(60,p|0,127304,272,1)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;ja(26,b|0,ca|0,26,p|0,m|0);if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((ba|0)==(ea|0)){h=24;break}else{la=ea;na=da;h=25;break};case 24:p=ea<<1;oa=wa(206,da|0,ea<<3|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;la=p;na=oa;h=25;break;case 25:c[na+(ba<<2)>>2]=ia;fa=la;ga=na;ha=ba+1|0;h=26;break;case 26:oa=wa(88,b|0,ca|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((oa|0)==0){_=ha;$=ga;h=27;break}else{ba=ha;ca=oa;da=ga;ea=fa;h=22;break};case 27:E=0;F=L;G=$;H=_;I=c[C>>2]|0;h=28;break;case 28:oa=c[I+12>>2]|0;if((oa|0)==0){h=30;break}else{qa=oa;h=29;break};case 29:oa=c[qa+12>>2]|0;ka(150,c[qa>>2]|0);if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;ka(150,qa|0);if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;if((oa|0)==0){h=30;break}else{qa=oa;h=29;break};case 30:if((z|0)==(l|0)){h=32;break}else{h=31;break};case 31:ka(150,z|0);if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;h=32;break;case 32:if((E|0)==0){h=36;break}else{h=33;break};case 33:c[d>>2]=0;if((H|0)>0){ra=0;h=34;break}else{h=35;break};case 34:ma(38,c[G+(ra<<2)>>2]|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;oa=ra+1|0;if((oa|0)<(H|0)){ra=oa;h=34;break}else{h=35;break};case 35:ka(150,G|0);if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;q=0;h=37;break;case 36:oa=wa(206,G|0,H<<2|0)|0;if((u|0)!=0&(v|0)!=0){j=CF(c[u>>2]|0,k)|0;if((j|0)>0){h=-1;break}else return 0}u=v=0;c[d>>2]=H;a[f]=F;q=oa;h=37;break;case 37:i=g;return q|0;case-1:if((j|0)==11){D=v;h=38}u=v=0;break}return 0}function gv(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;kv(g,d);d=g|0;h=g+8|0;i=g+4|0;a:while(1){j=c[h>>2]|0;k=c[i>>2]|0;if((j|0)==(c[k>>2]|0)){if((k|0)==(c[d>>2]|0)){l=12;break}m=c[k+8>>2]|0;c[i>>2]=m;k=c[m+4>>2]|0;c[h>>2]=k;n=k}else{n=j}j=n-4|0;c[h>>2]=j;k=c[j>>2]|0;if((k|0)==0){l=12;break}a[(c[k+8>>2]|0)+157|0]=1;Dc[e&63](k,f);j=rw(b,k)|0;if((j|0)==0){continue}else{o=j}while(1){j=c[o>>2]&3;m=c[((j|0)==3?o:o+32|0)+28>>2]|0;if((m|0)==(k|0)){p=c[((j|0)==2?o:o-32|0)+28>>2]|0}else{p=m}if((a[(c[p+8>>2]|0)+157|0]|0)==0){kv(g,p)}m=sw(b,o,k)|0;if((m|0)==0){continue a}else{o=m}}}if((l|0)==12){return}}function hv(a,b){a=a|0;b=b|0;zx(b,a,1)|0;return}function iv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;f=i;i=i+4256|0;g=1;h=0;j=i;i=i+168|0;c[j>>2]=0;while(1)switch(g|0){case 1:k=f|0;l=f+128|0;m=f+144|0;n=f+160|0;o=ma(20,b|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((o|0)==0){g=2;break}else{g=3;break};case 2:c[d>>2]=0;p=0;g=30;break;case 3:if((e|0)==0){q=118752;g=6;break}else{r=e;g=4;break};case 4:s=r+1|0;t=a[r]|0;if((t<<24>>24|0)==95){r=s;g=4;break}else if((t<<24>>24|0)==0){q=e;g=6;break}else{g=5;break};case 5:o=ma(2,t&255|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((o|0)==0){q=118752;g=6;break}else{r=s;g=4;break};case 6:w=ma(24,q|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;x=w+25|0;if((x|0)<129){g=7;break}else{g=8;break};case 7:y=k|0;g=9;break;case 8:o=ma(54,x|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((o|0)==0){p=0;g=30;break}else{y=o;g=9;break};case 9:wa(172,y|0,q|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;o=ma(18,b|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((o|0)==0){g=11;break}else{z=o;g=10;break};case 10:a[(c[z+8>>2]|0)+157|0]=0;o=wa(88,b|0,z|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((o|0)==0){g=11;break}else{z=o;g=10;break};case 11:A=ma(54,40)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;o=n|0;c[m>>2]=o;c[m+4>>2]=n+4096;B=m+12|0;c[B>>2]=0;c[m+8>>2]=0;C=l|0;c[C>>2]=m;c[l+4>>2]=m;c[l+8>>2]=o;D=BF(178072,g,j)|0;g=31;break;case 31:if((D|0)==0){g=17;break}else{g=12;break};case 12:o=c[B>>2]|0;if((o|0)==0){g=14;break}else{E=o;g=13;break};case 13:o=c[E+12>>2]|0;ka(150,c[E>>2]|0);if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;ka(150,E|0);if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((o|0)==0){g=14;break}else{E=o;g=13;break};case 14:ka(150,A|0);if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((y|0)==(k|0)){g=16;break}else{g=15;break};case 15:ka(150,y|0);if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;g=16;break;case 16:c[d>>2]=0;p=0;g=30;break;case 17:F=A;G=ma(18,b|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((G|0)==0){H=0;I=F;J=m;g=25;break}else{g=18;break};case 18:K=y+w|0;L=0;M=G;N=F;O=10;g=19;break;case 19:if((a[(c[M+8>>2]|0)+157|0]|0)==0){g=20;break}else{P=O;Q=N;R=L;g=23;break};case 20:pa(6,K|0,156992,(o=i,i=i+8|0,c[o>>2]=L,o)|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;i=o;S=pa(38,b|0,y|0,1)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;o=S|0;Aa(60,o|0,127304,272,1)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;ja(26,b|0,M|0,26,o|0,l|0);if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((L|0)==(O|0)){g=21;break}else{T=O;U=N;g=22;break};case 21:o=O<<1;V=wa(206,N|0,O<<3|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;T=o;U=V;g=22;break;case 22:c[U+(L<<2)>>2]=S;P=T;Q=U;R=L+1|0;g=23;break;case 23:V=wa(88,b|0,M|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((V|0)==0){g=24;break}else{L=R;M=V;N=Q;O=P;g=19;break};case 24:H=R;I=Q;J=c[C>>2]|0;g=25;break;case 25:V=c[J+12>>2]|0;if((V|0)==0){g=27;break}else{W=V;g=26;break};case 26:V=c[W+12>>2]|0;ka(150,c[W>>2]|0);if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;ka(150,W|0);if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;if((V|0)==0){g=27;break}else{W=V;g=26;break};case 27:V=wa(206,I|0,H<<2|0)|0;if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;X=V;if((y|0)==(k|0)){g=29;break}else{g=28;break};case 28:ka(150,y|0);if((u|0)!=0&(v|0)!=0){h=CF(c[u>>2]|0,j)|0;if((h|0)>0){g=-1;break}else return 0}u=v=0;g=29;break;case 29:c[d>>2]=H;p=X;g=30;break;case 30:i=f;return p|0;case-1:if((h|0)==11){D=v;g=31}u=v=0;break}return 0}function jv(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=c[a+48>>2]|0;d=ux(a)|0;if((d|0)==0){e=0;return e|0}else{f=d;g=0}while(1){d=mw(b,f)|0;if((d|0)==0){h=g}else{i=d;d=g;while(1){if((Rx(a,c[((c[i>>2]&3|0)==2?i:i-32|0)+28>>2]|0)|0)==0){j=d}else{xw(a,i,1)|0;j=d+1|0}k=ow(b,i)|0;if((k|0)==0){h=j;break}else{i=k;d=j}}}d=vx(a,f)|0;if((d|0)==0){e=h;break}else{f=d;g=h}}return e|0}function kv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;f=b+8|0;g=b+4|0;b=c[g>>2]|0;if((c[f>>2]|0)!=(c[b+4>>2]|0)){h=d+8|0;j=c[h>>2]|0;k=j;l=k+157|0;a[l]=1;m=c[f>>2]|0;n=m+4|0;c[f>>2]=n;c[m>>2]=d;i=e;return}o=c[b+12>>2]|0;do{if((o|0)==0){b=kk(16)|0;if((b|0)==0){Fv(1,115176,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0)|0;i=p;rc(178072,1)}c[b+8>>2]=c[g>>2];c[b+12>>2]=0;q=kk(4e6)|0;c[b>>2]=q;if((q|0)==0){Fv(1,115176,(p=i,i=i+1|0,i=i+7&-8,c[p>>2]=0,p)|0)|0;i=p;rc(178072,1)}else{c[b+4>>2]=q+4e6;c[(c[g>>2]|0)+12>>2]=b;r=c[(c[g>>2]|0)+12>>2]|0;break}}else{r=o}}while(0);c[g>>2]=r;c[f>>2]=c[r>>2];h=d+8|0;j=c[h>>2]|0;k=j;l=k+157|0;a[l]=1;m=c[f>>2]|0;n=m+4|0;c[f>>2]=n;c[m>>2]=d;i=e;return}function lv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;e=i;f=a;a=i;i=i+16|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];g=+h[a>>3];if(g<0.0){j=g+-.5}else{j=g+.5}f=~~j;j=+h[a+8>>3];if(j<0.0){k=j+-.5}else{k=j+.5}a=~~k;k=+h[b>>3];if(k<0.0){l=k+-.5}else{l=k+.5}m=~~l;l=+h[b+8>>3];if(l<0.0){n=l+-.5}else{n=l+.5}b=~~n;o=m-f|0;p=((o|0)>-1?o:-o|0)<<1;q=o>>31|1;o=b-a|0;r=((o|0)>-1?o:-o|0)<<1;s=o>>31|1;Gk(d,f,a);if((p|0)>(r|0)){if((f|0)==(m|0)){i=e;return}o=a;t=f;u=r-(p>>1)|0;while(1){if((u|0)>-1){v=u-p|0;w=o+s|0}else{v=u;w=o}x=t+q|0;Gk(d,x,w);if((x|0)==(m|0)){break}else{o=w;t=x;u=v+r|0}}i=e;return}else{if((a|0)==(b|0)){i=e;return}v=a;a=f;f=p-(r>>1)|0;while(1){if((f|0)>-1){y=f-r|0;z=a+q|0}else{y=f;z=a}u=v+s|0;Gk(d,z,u);if((u|0)==(b|0)){break}else{v=u;a=z;f=y+p|0}}i=e;return}}function mv(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0,K=0.0,L=0,M=0.0,N=0,O=0.0,P=0,Q=0,R=0,S=0,T=0.0,U=0.0,V=0.0,W=0,X=0,Y=0.0,Z=0,_=0.0,$=0,aa=0,ba=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0.0,la=0,ma=0.0,na=0,oa=0.0,pa=0,qa=0.0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0.0,ya=0.0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0.0,Ka=0.0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0;j=i;i=i+40|0;k=j|0;l=j+16|0;m=j+32|0;if((b|0)<1){n=0;i=j;return n|0}p=g+16|0;if((c[p>>2]|0)>>>0>=4>>>0){q=kk(b<<5)|0;r=q;s=(b|0)>0;if(s){t=0;do{u=c[e+(t<<2)>>2]|0;$m(u);v=r+(t<<5)|0;w=(c[u+8>>2]|0)+16|0;c[v>>2]=c[w>>2];c[v+4>>2]=c[w+4>>2];c[v+8>>2]=c[w+8>>2];c[v+12>>2]=c[w+12>>2];c[v+16>>2]=c[w+16>>2];c[v+20>>2]=c[w+20>>2];c[v+24>>2]=c[w+24>>2];c[v+28>>2]=c[w+28>>2];t=t+1|0;}while((t|0)<(b|0))}do{if((c[p>>2]|0)==4){t=g+28|0;do{if((c[t>>2]&2|0)!=0){w=g+24|0;c[w>>2]=jk(b<<2)|0;if(s){x=0}else{break}do{v=ew(c[e+(x<<2)>>2]|0,108152)|0;do{if((v|0)!=0){u=ac(v|0,148336,(y=i,i=i+8|0,c[y>>2]=m,y)|0)|0;i=y;z=c[m>>2]|0;if(!((u|0)>0&(z|0)>-1)){break}c[(c[w>>2]|0)+(x<<2)>>2]=z}}while(0);x=x+1|0;}while((x|0)<(b|0))}}while(0);w=nv(b,r,g)|0;if((c[t>>2]&2|0)==0){A=w;break}eF(c[g+24>>2]|0);A=w}else{A=0}}while(0);eF(q);n=A;i=j;return n|0}A=c[g+20>>2]|0;q=(A|0)==0;r=c[o>>2]|0;x=0;m=0;s=0;w=0;v=0;z=0;while(1){u=c[e+(z<<2)>>2]|0;$m(u);do{if(q){B=v;C=w;D=s;E=m;F=x}else{if((a[A+z|0]|0)==0){B=v;C=w;D=s;E=m;F=x;break}G=c[u+8>>2]|0;H=+h[G+16>>3];if(H<0.0){I=H+-.5}else{I=H+.5}J=~~I;H=+h[G+24>>3];if(H<0.0){K=H+-.5}else{K=H+.5}L=~~K;H=+h[G+32>>3];if(H<0.0){M=H+-.5}else{M=H+.5}N=~~M;H=+h[G+40>>3];if(H<0.0){O=H+-.5}else{O=H+.5}G=~~O;if((v|0)==0){P=J;Q=L;R=N;S=G}else{P=(J|0)<(w|0)?J:w;Q=(L|0)<(s|0)?L:s;R=(N|0)>(m|0)?N:m;S=(G|0)>(x|0)?G:x}B=v+1|0;C=P;D=Q;E=R;F=S}}while(0);if((d[213992]|0)>>>0>2>>>0){t=$w(u|0)|0;G=c[u+8>>2]|0;H=+h[G+16>>3];T=+h[G+24>>3];U=+h[G+32>>3];V=+h[G+40>>3];gc(r|0,114504,(y=i,i=i+40|0,c[y>>2]=t,h[y+8>>3]=H,h[y+16>>3]=T,h[y+24>>3]=U,h[y+32>>3]=V,y)|0)|0;i=y}t=z+1|0;if((t|0)<(b|0)){x=F;m=E;s=D;w=C;v=B;z=t}else{break}}z=kk(b<<5)|0;B=z;v=0;do{w=B+(v<<5)|0;s=(c[(c[e+(v<<2)>>2]|0)+8>>2]|0)+16|0;c[w>>2]=c[s>>2];c[w+4>>2]=c[s+4>>2];c[w+8>>2]=c[s+8>>2];c[w+12>>2]=c[s+12>>2];c[w+16>>2]=c[s+16>>2];c[w+20>>2]=c[s+20>>2];c[w+24>>2]=c[s+24>>2];c[w+28>>2]=c[s+28>>2];v=v+1|0;}while((v|0)<(b|0));v=g+8|0;s=xv(b,B,c[v>>2]|0)|0;if((a[213992]|0)!=0){gc(r|0,136576,(y=i,i=i+8|0,c[y>>2]=s,y)|0)|0;i=y}if((s|0)<1){n=0;i=j;return n|0}w=(A|0)!=0;if(w){W=(C+E|0)/2|0;X=(D+F|0)/2|0}else{W=0;X=0}F=jk(b<<4)|0;D=F;E=g+12|0;g=(f|0)==0;C=k|0;m=k+8|0;O=+(s|0);x=l|0;S=l+8|0;R=0;do{Q=e+(R<<2)|0;P=c[Q>>2]|0;q=D+(R<<4)|0;c[D+(R<<4)+12>>2]=R;if((c[p>>2]|0)==3){t=(c[P+8>>2]|0)+16|0;G=c[v>>2]|0;yv(t,q,s,G,W,X,$w(P|0)|0)}else{P=c[Q>>2]|0;Q=c[v>>2]|0;G=c[E>>2]|0;t=g?P:f;N=Dk()|0;L=P+8|0;J=c[L>>2]|0;M=+h[J+16>>3];if(M<0.0){Y=M+-.5}else{Y=M+.5}Z=W-~~Y|0;M=+h[J+24>>3];if(M<0.0){_=M+-.5}else{_=M+.5}J=X-~~_|0;do{if((c[p>>2]|0)==1){$=kk((Lw(P)|0)<<2)|0;aa=$;ba=ux(P)|0;if((ba|0)!=0){da=ba;ba=0;while(1){ea=da+8|0;c[aa+(ba<<2)>>2]=c[(c[ea>>2]|0)+112>>2];c[(c[ea>>2]|0)+112>>2]=0;ea=vx(P,da)|0;if((ea|0)==0){break}else{da=ea;ba=ba+1|0}}}ba=c[L>>2]|0;if((c[ba+172>>2]|0)>=1){da=Z-Q|0;ea=J-Q|0;fa=Z+Q|0;ga=J+Q|0;ha=1;ia=ba;while(1){ba=c[(c[ia+176>>2]|0)+(ha<<2)>>2]|0;ja=c[ba+8>>2]|0;M=+h[ja+16>>3];if(M<0.0){ka=M+-.5}else{ka=M+.5}la=~~ka;M=+h[ja+24>>3];if(M<0.0){ma=M+-.5}else{ma=M+.5}na=~~ma;M=+h[ja+32>>3];if(M<0.0){oa=M+-.5}else{oa=M+.5}pa=~~oa;M=+h[ja+40>>3];if(M<0.0){qa=M+-.5}else{qa=M+.5}ja=~~qa;if((pa|0)>(la|0)&(ja|0)>(na|0)){ra=la+da|0;la=na+ea|0;na=fa+pa|0;pa=ga+ja|0;if((ra|0)>-1){sa=(ra|0)/(s|0)|0}else{sa=((ra+1|0)/(s|0)|0)-1|0}if((la|0)>-1){ta=(la|0)/(s|0)|0}else{ta=((la+1|0)/(s|0)|0)-1|0}if((na|0)>-1){ua=(na|0)/(s|0)|0}else{ua=((na+1|0)/(s|0)|0)-1|0}if((pa|0)>-1){va=(pa|0)/(s|0)|0}else{va=((pa+1|0)/(s|0)|0)-1|0}if(!((sa|0)>(ua|0)|(ta|0)>(va|0))){pa=sa;while(1){na=ta;while(1){Gk(N,pa,na);if((na|0)<(va|0)){na=na+1|0}else{break}}if((pa|0)<(ua|0)){pa=pa+1|0}else{break}}}pa=ux(ba)|0;if((pa|0)!=0){na=ba;la=pa;do{c[(c[la+8>>2]|0)+212>>2]=na;la=vx(ba,la)|0;}while((la|0)!=0)}wa=c[L>>2]|0}else{wa=ia}if((ha|0)<(c[wa+172>>2]|0)){ha=ha+1|0;ia=wa}else{break}}}ia=ux(P)|0;if((ia|0)!=0){M=+(Q|0);ha=ia;do{Pm(k,ha);K=+h[C>>3];I=+h[m>>3];if(K<0.0){xa=K+-.5}else{xa=K+.5}if(I<0.0){ya=I+-.5}else{ya=I+.5}ia=~~xa+Z|0;ga=~~ya+J|0;fa=ha+8|0;ea=c[fa>>2]|0;do{if((c[ea+212>>2]|0)==0){da=~~(M+(+h[ea+88>>3]+ +h[ea+96>>3])*.5);la=~~(M+ +h[ea+80>>3]*.5);ba=ia-da|0;na=ga-la|0;pa=da+ia|0;da=la+ga|0;if((ba|0)>-1){za=(ba|0)/(s|0)|0}else{za=((ba+1|0)/(s|0)|0)-1|0}if((na|0)>-1){Aa=(na|0)/(s|0)|0}else{Aa=((na+1|0)/(s|0)|0)-1|0}if((pa|0)>-1){Ba=(pa|0)/(s|0)|0}else{Ba=((pa+1|0)/(s|0)|0)-1|0}if((da|0)>-1){Ca=(da|0)/(s|0)|0}else{Ca=((da+1|0)/(s|0)|0)-1|0}if(!((za|0)>(Ba|0)|(Aa|0)>(Ca|0))){da=za;while(1){pa=Aa;while(1){Gk(N,da,pa);if((pa|0)<(Ca|0)){pa=pa+1|0}else{break}}if((da|0)<(Ba|0)){da=da+1|0}else{break}}}if((ia|0)>-1){Da=(ia|0)/(s|0)|0}else{Da=((ia+1|0)/(s|0)|0)-1|0}if((ga|0)>-1){Ea=(ga|0)/(s|0)|0}else{Ea=((ga+1|0)/(s|0)|0)-1|0}da=mw(t,ha)|0;if((da|0)==0){break}else{Fa=da}do{Ev(Fa,Da,Ea,N,Z,J,s,G);Fa=ow(t,Fa)|0;}while((Fa|0)!=0)}else{if((ia|0)>-1){Ga=(ia|0)/(s|0)|0}else{Ga=((ia+1|0)/(s|0)|0)-1|0}if((ga|0)>-1){Ha=(ga|0)/(s|0)|0}else{Ha=((ga+1|0)/(s|0)|0)-1|0}da=mw(t,ha)|0;if((da|0)==0){break}else{Ia=da}do{if((c[(c[fa>>2]|0)+212>>2]|0)!=(c[(c[(c[((c[Ia>>2]&3|0)==2?Ia:Ia-32|0)+28>>2]|0)+8>>2]|0)+212>>2]|0)){Ev(Ia,Ga,Ha,N,Z,J,s,G)}Ia=ow(t,Ia)|0;}while((Ia|0)!=0)}}while(0);ha=vx(P,ha)|0;}while((ha|0)!=0)}ha=ux(P)|0;if((ha|0)!=0){fa=ha;ha=0;while(1){c[(c[fa+8>>2]|0)+112>>2]=c[aa+(ha<<2)>>2];ga=vx(P,fa)|0;if((ga|0)==0){break}else{fa=ga;ha=ha+1|0}}}eF($)}else{ha=ux(P)|0;if((ha|0)==0){break}M=+(Q|0);fa=ha;do{Pm(l,fa);I=+h[x>>3];K=+h[S>>3];if(I<0.0){Ja=I+-.5}else{Ja=I+.5}if(K<0.0){Ka=K+-.5}else{Ka=K+.5}ha=~~Ja+Z|0;aa=~~Ka+J|0;ga=c[fa+8>>2]|0;ia=~~(M+(+h[ga+88>>3]+ +h[ga+96>>3])*.5);ea=~~(M+ +h[ga+80>>3]*.5);ga=ha-ia|0;da=aa-ea|0;pa=ia+ha|0;ia=ea+aa|0;if((ga|0)>-1){La=(ga|0)/(s|0)|0}else{La=((ga+1|0)/(s|0)|0)-1|0}if((da|0)>-1){Ma=(da|0)/(s|0)|0}else{Ma=((da+1|0)/(s|0)|0)-1|0}if((pa|0)>-1){Na=(pa|0)/(s|0)|0}else{Na=((pa+1|0)/(s|0)|0)-1|0}if((ia|0)>-1){Oa=(ia|0)/(s|0)|0}else{Oa=((ia+1|0)/(s|0)|0)-1|0}if(!((La|0)>(Na|0)|(Ma|0)>(Oa|0))){ia=La;while(1){pa=Ma;while(1){Gk(N,ia,pa);if((pa|0)<(Oa|0)){pa=pa+1|0}else{break}}if((ia|0)<(Na|0)){ia=ia+1|0}else{break}}}if((ha|0)>-1){Pa=(ha|0)/(s|0)|0}else{Pa=((ha+1|0)/(s|0)|0)-1|0}if((aa|0)>-1){Qa=(aa|0)/(s|0)|0}else{Qa=((aa+1|0)/(s|0)|0)-1|0}ia=mw(t,fa)|0;if((ia|0)!=0){pa=ia;do{Ev(pa,Pa,Qa,N,Z,J,s,G);pa=ow(t,pa)|0;}while((pa|0)!=0)}fa=vx(P,fa)|0;}while((fa|0)!=0)}}while(0);t=D+(R<<4)+4|0;c[t>>2]=Kk(N)|0;G=D+(R<<4)+8|0;c[G>>2]=Jk(N)|0;J=c[L>>2]|0;M=+(Q<<1|0);Z=~~+ca((M+(+h[J+32>>3]- +h[J+16>>3]))/O);u=~~+ca((M+(+h[J+40>>3]- +h[J+24>>3]))/O);c[q>>2]=u+Z;do{if((d[213992]|0)>>>0>2>>>0){J=$w(P|0)|0;fa=c[G>>2]|0;gc(r|0,126120,(y=i,i=i+32|0,c[y>>2]=J,c[y+8>>2]=fa,c[y+16>>2]=Z,c[y+24>>2]=u,y)|0)|0;i=y;if((c[G>>2]|0)>0){Ra=0}else{break}do{fa=c[t>>2]|0;J=c[fa+(Ra<<3)+4>>2]|0;gc(r|0,123640,(y=i,i=i+16|0,c[y>>2]=c[fa+(Ra<<3)>>2],c[y+8>>2]=J,y)|0)|0;i=y;Ra=Ra+1|0;}while((Ra|0)<(c[G>>2]|0))}}while(0);Ek(N);}R=R+1|0;}while((R|0)<(b|0));R=jk(b<<2)|0;Ra=R;Qa=0;do{c[Ra+(Qa<<2)>>2]=D+(Qa<<4);Qa=Qa+1|0;}while((Qa|0)<(b|0));Jb(R|0,b|0,4,180);Qa=Dk()|0;Pa=jk(b<<3)|0;if(w){w=-W|0;W=-X|0;X=0;while(1){do{if((a[A+X|0]|0)!=0){Na=c[Ra+(X<<2)>>2]|0;Oa=c[Na+12>>2]|0;Ma=c[Na+4>>2]|0;La=c[Na+8>>2]|0;Na=Pa+(Oa<<3)|0;c[Na>>2]=w;S=Pa+(Oa<<3)+4|0;c[S>>2]=W;if((La|0)>0){Oa=Ma;Ma=0;while(1){Fk(Qa,Oa);x=Ma+1|0;if((x|0)<(La|0)){Oa=Oa+8|0;Ma=x}else{break}}}if((d[213992]|0)>>>0<=1>>>0){break}Ma=c[Na>>2]|0;Oa=c[S>>2]|0;gc(r|0,113712,(y=i,i=i+24|0,c[y>>2]=La,c[y+8>>2]=Ma,c[y+16>>2]=Oa,y)|0)|0;i=y}}while(0);N=X+1|0;if((N|0)<(b|0)){X=N}else{Sa=0;break}}do{if((a[A+Sa|0]|0)==0){X=c[Ra+(Sa<<2)>>2]|0;Av(Sa,X,Qa,Pa+(c[X+12>>2]<<3)|0,s,c[v>>2]|0,B)}Sa=Sa+1|0;}while((Sa|0)<(b|0))}else{Sa=0;do{A=c[Ra+(Sa<<2)>>2]|0;Av(Sa,A,Qa,Pa+(c[A+12>>2]<<3)|0,s,c[v>>2]|0,B);Sa=Sa+1|0;}while((Sa|0)<(b|0))}eF(R);R=0;do{eF(c[D+(R<<4)+4>>2]|0);R=R+1|0;}while((R|0)<(b|0));eF(F);Ek(Qa);eF(z);if((d[213992]|0)>>>0>1>>>0){Ta=0}else{n=Pa;i=j;return n|0}while(1){z=c[Pa+(Ta<<3)>>2]|0;Qa=c[Pa+(Ta<<3)+4>>2]|0;gc(r|0,131600,(y=i,i=i+24|0,c[y>>2]=Ta,c[y+8>>2]=z,c[y+16>>2]=Qa,y)|0)|0;i=y;Qa=Ta+1|0;if((Qa|0)<(b|0)){Ta=Qa}else{n=Pa;break}}i=j;return n|0}function nv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0,H=0;f=i;g=jk(b<<3)|0;j=c[e+4>>2]|0;k=e+28|0;l=(j|0)>0;do{if((c[k>>2]&1|0)==0){if(l){m=1;n=(b-1+j|0)/(j|0)|0;p=j;break}else{q=~~+ca(+T(+(b|0)));m=1;n=(b-1+q|0)/(q|0)|0;p=q;break}}else{if(l){m=0;n=j;p=(b-1+j|0)/(j|0)|0;break}else{q=~~+ca(+T(+(b|0)));m=0;n=q;p=(b-1+q|0)/(q|0)|0;break}}}while(0);if((a[213992]|0)!=0){gc(c[o>>2]|0,117712,(j=i,i=i+24|0,c[j>>2]=(m|0)!=0?116800:115864,c[j+8>>2]=n,c[j+16>>2]=p,j)|0)|0;i=j}j=jk((p<<3)+8|0)|0;l=j;q=jk((n<<3)+8|0)|0;r=q;s=jk(b*24|0)|0;t=s;u=(b|0)>0;do{if(u){v=e+8|0;w=t;x=0;while(1){y=+h[d+(x<<5)+8>>3];z=+h[d+(x<<5)+24>>3];h[w>>3]=+h[d+(x<<5)+16>>3]- +h[d+(x<<5)>>3]+ +((c[v>>2]|0)>>>0>>>0);h[w+8>>3]=z-y+ +((c[v>>2]|0)>>>0>>>0);c[w+16>>2]=x;A=x+1|0;if((A|0)<(b|0)){w=w+24|0;x=A}else{break}}x=jk(b<<2)|0;w=x;if(u){B=0}else{C=x;D=w;break}while(1){c[w+(B<<2)>>2]=t+(B*24|0);v=B+1|0;if((v|0)<(b|0)){B=v}else{C=x;D=w;break}}}else{w=jk(b<<2)|0;C=w;D=w}}while(0);B=c[e+24>>2]|0;do{if((B|0)==0){if((c[k>>2]&64|0)!=0){break}Jb(C|0,b|0,4,24)}else{c[43654]=B;Jb(C|0,b|0,4,160)}}while(0);if(u){if((m|0)==0){B=0;e=0;t=0;while(1){w=c[D+(t<<2)>>2]|0;x=l+(B<<3)|0;y=+h[x>>3];z=+h[w>>3];h[x>>3]=y>z?y:z;x=r+(e<<3)|0;z=+h[x>>3];y=+h[w+8>>3];h[x>>3]=z>y?z:y;x=e+1|0;w=(x|0)==(n|0);v=t+1|0;if((v|0)<(b|0)){B=(w&1)+B|0;e=w?0:x;t=v}else{break}}}else{t=0;e=0;B=0;while(1){v=c[D+(B<<2)>>2]|0;x=l+(t<<3)|0;y=+h[x>>3];z=+h[v>>3];h[x>>3]=y>z?y:z;x=r+(e<<3)|0;z=+h[x>>3];y=+h[v+8>>3];h[x>>3]=z>y?z:y;x=t+1|0;v=(x|0)==(p|0);w=B+1|0;if((w|0)<(b|0)){t=v?0:x;e=(v&1)+e|0;B=w}else{break}}}}if((p|0)>=0){y=0.0;B=0;while(1){e=l+(B<<3)|0;z=+h[e>>3];h[e>>3]=y;if((B|0)<(p|0)){y=y+z;B=B+1|0}else{break}}}if((n|0)>0){y=0.0;B=n;while(1){e=B-1|0;z=+h[r+(e<<3)>>3];h[r+(B<<3)>>3]=y;E=y+z;if((e|0)>0){y=E;B=e}else{F=E;break}}}else{F=0.0}h[r>>3]=F;if(!u){eF(s);eF(C);eF(j);eF(q);i=f;return g|0}u=(m|0)==0;m=0;B=0;e=0;while(1){t=c[(c[D+(e<<2)>>2]|0)+16>>2]|0;F=+h[d+(t<<5)>>3];y=+h[d+(t<<5)+8>>3];E=+h[d+(t<<5)+16>>3];z=+h[d+(t<<5)+24>>3];w=c[k>>2]|0;do{if((w&4|0)==0){if((w&8|0)==0){c[g+(t<<3)>>2]=~~((+h[l+(m<<3)>>3]+ +h[l+(m+1<<3)>>3]-E-F)*.5);break}else{c[g+(t<<3)>>2]=~~(+h[l+(m+1<<3)>>3]-(E-F));break}}else{c[g+(t<<3)>>2]=~~+h[l+(m<<3)>>3]}}while(0);w=c[k>>2]|0;do{if((w&16|0)==0){if((w&32|0)==0){c[g+(t<<3)+4>>2]=~~((+h[r+(B<<3)>>3]+ +h[r+(B+1<<3)>>3]-z-y)*.5);break}else{c[g+(t<<3)+4>>2]=~~+h[r+(B+1<<3)>>3];break}}else{c[g+(t<<3)+4>>2]=~~(+h[r+(B<<3)>>3]-(z-y))}}while(0);if(u){t=B+1|0;w=(t|0)==(n|0);G=w?0:t;H=(w&1)+m|0}else{w=m+1|0;t=(w|0)==(p|0);G=(t&1)+B|0;H=t?0:w}w=e+1|0;if((w|0)<(b|0)){m=H;B=G;e=w}else{break}}eF(s);eF(C);eF(j);eF(q);i=f;return g|0}function ov(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=i;if((b|0)<1){h=0;i=g;return h|0}j=c[f+16>>2]|0;if((j|0)==3){k=f+8|0;l=xv(b,e,c[k>>2]|0)|0;if((a[213992]|0)!=0){gc(c[o>>2]|0,136576,(m=i,i=i+8|0,c[m>>2]=l,m)|0)|0;i=m}if((l|0)<1){h=0;i=g;return h|0}n=jk(b<<4)|0;p=n;q=(b|0)>0;if(q){r=0;do{c[p+(r<<4)+12>>2]=r;yv(e+(r<<5)|0,p+(r<<4)|0,l,c[k>>2]|0,0,0,213416);r=r+1|0;}while((r|0)<(b|0));r=jk(b<<2)|0;s=r;t=0;while(1){c[s+(t<<2)>>2]=p+(t<<4);u=t+1|0;if((u|0)<(b|0)){t=u}else{v=r;w=s;break}}}else{s=jk(b<<2)|0;v=s;w=s}Jb(v|0,b|0,4,180);s=Dk()|0;r=jk(b<<3)|0;if(q){t=0;do{u=c[w+(t<<2)>>2]|0;Av(t,u,s,r+(c[u+12>>2]<<3)|0,l,c[k>>2]|0,e);t=t+1|0;}while((t|0)<(b|0));eF(v);t=0;do{eF(c[p+(t<<4)+4>>2]|0);t=t+1|0;}while((t|0)<(b|0))}else{eF(v)}eF(n);Ek(s);if((d[213992]|0)>>>0<2>>>0|q^1){h=r;i=g;return h|0}q=c[o>>2]|0;s=0;while(1){n=c[r+(s<<3)>>2]|0;v=c[r+(s<<3)+4>>2]|0;gc(q|0,131600,(m=i,i=i+24|0,c[m>>2]=s,c[m+8>>2]=n,c[m+16>>2]=v,m)|0)|0;i=m;v=s+1|0;if((v|0)<(b|0)){s=v}else{h=r;break}}i=g;return h|0}else if((j|0)==4){h=nv(b,e,f)|0;i=g;return h|0}else{h=0;i=g;return h|0}return 0}function pv(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;if((a|0)<1){g=(a|0)>-1?a:-a|0;return g|0}i=(e|0)==0;j=(f|0)==0;f=0;while(1){k=c[b+(f<<2)>>2]|0;l=i?k:e;m=c[d+(f<<3)>>2]|0;n=c[d+(f<<3)+4>>2]|0;o=+(m|0);p=o/72.0;q=+(n|0);r=q/72.0;s=ux(k)|0;if((s|0)!=0){t=s;do{s=t+8|0;u=c[(c[s>>2]|0)+132>>2]|0;h[u>>3]=p+ +h[u>>3];u=(c[(c[s>>2]|0)+132>>2]|0)+8|0;h[u>>3]=r+ +h[u>>3];u=(c[s>>2]|0)+16|0;h[u>>3]=o+ +h[u>>3];u=(c[s>>2]|0)+24|0;h[u>>3]=q+ +h[u>>3];u=c[(c[s>>2]|0)+108>>2]|0;if((u|0)!=0){v=u+56|0;h[v>>3]=o+ +h[v>>3];v=(c[(c[s>>2]|0)+108>>2]|0)+64|0;h[v>>3]=q+ +h[v>>3]}do{if(!j){v=mw(l,t)|0;if((v|0)==0){break}else{w=v}do{v=w+8|0;s=c[v>>2]|0;u=c[s+96>>2]|0;if((u|0)==0){x=s}else{s=u+56|0;h[s>>3]=o+ +h[s>>3];s=(c[(c[v>>2]|0)+96>>2]|0)+64|0;h[s>>3]=q+ +h[s>>3];x=c[v>>2]|0}s=c[x+108>>2]|0;if((s|0)==0){y=x}else{u=s+56|0;h[u>>3]=o+ +h[u>>3];u=(c[(c[v>>2]|0)+108>>2]|0)+64|0;h[u>>3]=q+ +h[u>>3];y=c[v>>2]|0}u=c[y+100>>2]|0;if((u|0)==0){z=y}else{s=u+56|0;h[s>>3]=o+ +h[s>>3];s=(c[(c[v>>2]|0)+100>>2]|0)+64|0;h[s>>3]=q+ +h[s>>3];z=c[v>>2]|0}s=c[z+104>>2]|0;if((s|0)==0){A=z}else{u=s+56|0;h[u>>3]=o+ +h[u>>3];u=(c[(c[v>>2]|0)+104>>2]|0)+64|0;h[u>>3]=q+ +h[u>>3];A=c[v>>2]|0}u=c[A+8>>2]|0;do{if((u|0)!=0){if((c[u+4>>2]|0)>0){B=0;C=u}else{break}do{s=c[C>>2]|0;D=c[s+(B*48|0)>>2]|0;E=c[s+(B*48|0)+4>>2]|0;F=c[s+(B*48|0)+8>>2]|0;G=c[s+(B*48|0)+12>>2]|0;if((E|0)>0){s=0;do{H=D+(s<<4)|0;h[H>>3]=o+ +h[H>>3];H=D+(s<<4)+8|0;h[H>>3]=q+ +h[H>>3];s=s+1|0;}while((s|0)<(E|0))}if((F|0)!=0){E=(c[c[(c[v>>2]|0)+8>>2]>>2]|0)+(B*48|0)+16|0;h[E>>3]=o+ +h[E>>3];E=(c[c[(c[v>>2]|0)+8>>2]>>2]|0)+(B*48|0)+24|0;h[E>>3]=q+ +h[E>>3]}if((G|0)!=0){E=(c[c[(c[v>>2]|0)+8>>2]>>2]|0)+(B*48|0)+32|0;h[E>>3]=o+ +h[E>>3];E=(c[c[(c[v>>2]|0)+8>>2]>>2]|0)+(B*48|0)+40|0;h[E>>3]=q+ +h[E>>3]}B=B+1|0;C=c[(c[v>>2]|0)+8>>2]|0;}while((B|0)<(c[C+4>>2]|0))}}while(0);w=ow(l,w)|0;}while((w|0)!=0)}}while(0);t=vx(k,t)|0;}while((t|0)!=0)}qv(k,m,n);t=f+1|0;if((t|0)<(a|0)){f=t}else{g=0;break}}return g|0}function qv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0;e=a+8|0;a=c[e>>2]|0;f=a+16|0;g=a+24|0;i=a+32|0;j=a+40|0;k=+(b|0);l=k+ +h[i>>3];m=+(d|0);n=m+ +h[g>>3];o=m+ +h[j>>3];h[f>>3]=k+ +h[f>>3];h[g>>3]=n;h[i>>3]=l;h[j>>3]=o;j=c[e>>2]|0;i=c[j+12>>2]|0;if((i|0)==0){p=j}else{j=i+56|0;h[j>>3]=k+ +h[j>>3];j=(c[(c[e>>2]|0)+12>>2]|0)+64|0;h[j>>3]=m+ +h[j>>3];p=c[e>>2]|0}if((c[p+172>>2]|0)<1){return}else{q=1;r=p}while(1){qv(c[(c[r+176>>2]|0)+(q<<2)>>2]|0,b,d);p=c[e>>2]|0;if((q|0)<(c[p+172>>2]|0)){q=q+1|0;r=p}else{break}}return}function rv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=mv(a,b,d,e)|0;if((f|0)==0){g=1;return g|0}h=pv(a,b,f,d,c[e+12>>2]|0)|0;eF(f);g=h;return g|0}function sv(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0.0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0;f=mv(a,b,d,e)|0;if((f|0)==0){g=1;return g|0}i=pv(a,b,f,d,c[e+12>>2]|0)|0;eF(f);if((i|0)!=0){g=i;return g|0}$m(d);i=c[d+8>>2]|0;d=i+16|0;j=+h[d>>3];f=i+24|0;k=+h[f>>3];e=i+32|0;l=+h[e>>3];m=i+40|0;n=+h[m>>3];if((a|0)>0){o=n;p=l;q=k;r=j;i=0;while(1){s=c[(c[b+(i<<2)>>2]|0)+8>>2]|0;t=c[s+172>>2]|0;if((t|0)<1){u=o;v=p;w=q;x=r}else{y=c[s+176>>2]|0;s=1;z=o;A=p;B=q;C=r;while(1){D=c[(c[y+(s<<2)>>2]|0)+8>>2]|0;E=+h[D+16>>3];F=C<E?C:E;E=+h[D+24>>3];G=B<E?B:E;E=+h[D+32>>3];H=A>E?A:E;E=+h[D+40>>3];I=z>E?z:E;if((s|0)<(t|0)){s=s+1|0;z=I;A=H;B=G;C=F}else{u=I;v=H;w=G;x=F;break}}}s=i+1|0;if((s|0)<(a|0)){o=u;p=v;q=w;r=x;i=s}else{J=u;K=v;L=w;M=x;break}}}else{J=n;K=l;L=k;M=j}h[d>>3]=M;h[f>>3]=L;h[e>>3]=K;h[m>>3]=J;g=0;return g|0}function tv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0;g=i;i=i+8|0;h=g|0;if((f|0)==0){cc(120888,112128,1400,170552);return 0}j=b|0;b=ew(j,145176)|0;if((b|0)==0){k=e}else{l=ac(b|0,148336,(m=i,i=i+8|0,c[m>>2]=h,m)|0)|0;i=m;b=c[h>>2]|0;k=(l|0)==1&(b|0)>-1?b:e}c[f+8>>2]=k;if((a[213992]|0)!=0){gc(c[o>>2]|0,142208,(m=i,i=i+8|0,c[m>>2]=k,m)|0)|0;i=m}c[f+12>>2]=0;c[f+20>>2]=0;uv(ew(j,146488)|0,d,f)|0;i=g;return c[f+16>>2]|0}function uv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;f=i;i=i+16|0;j=f|0;k=f+8|0;if((e|0)==0){cc(120888,112128,1292,170128);return 0}l=e+28|0;c[l>>2]=0;m=e+16|0;c[m>>2]=d;d=e+4|0;c[d>>2]=0;c[e+24>>2]=0;do{if((b|0)!=0){n=a[b]|0;if(n<<24>>24==0){break}p=n<<24>>24;if((p|0)==97){if((Za(b|0,105176,5)|0)!=0){if((Za(b|0,102536,6)|0)!=0){break}c[m>>2]=5;q=ac(b+5|0,96840,(r=i,i=i+8|0,c[r>>2]=j,r)|0)|0;i=r;s=+g[j>>2];t=e|0;if((q|0)>0&s>0.0){g[t>>2]=s;break}else{g[t>>2]=1.0;break}}c[m>>2]=4;t=b+5|0;a:do{if((a[t]|0)==95){q=b+6|0;u=a[q]|0;if(u<<24>>24==0){v=q;break}else{w=q;x=u;y=0}while(1){switch(x<<24>>24|0){case 116:{u=y|16;c[l>>2]=u;z=u;break};case 108:{u=y|4;c[l>>2]=u;z=u;break};case 98:{u=y|32;c[l>>2]=u;z=u;break};case 105:{u=y|64;c[l>>2]=u;z=u;break};case 114:{u=y|8;c[l>>2]=u;z=u;break};case 99:{u=y|1;c[l>>2]=u;z=u;break};case 117:{u=y|2;c[l>>2]=u;z=u;break};default:{v=w;break a}}u=w+1|0;q=a[u]|0;if(q<<24>>24==0){v=u;break a}else{w=u;x=q;y=z}}}else{v=t}}while(0);t=ac(v|0,148336,(r=i,i=i+8|0,c[r>>2]=k,r)|0)|0;i=r;q=c[k>>2]|0;if(!((t|0)>0&(q|0)>0)){break}c[d>>2]=q;break}else if((p|0)==103){if(n<<24>>24!=103){break}if((Ya(b|0,86216)|0)!=0){break}c[m>>2]=3;break}else if((p|0)==110){if(n<<24>>24!=110){break}if((Ya(b|0,81480)|0)!=0){break}c[m>>2]=2;break}else if((p|0)==99){if(n<<24>>24!=99){break}if((Ya(b|0,91456)|0)!=0){break}c[m>>2]=1;break}else{break}}}while(0);if((a[213992]|0)==0){A=c[m>>2]|0;i=f;return A|0}b=c[o>>2]|0;Ma(167760,11,1,b|0)|0;switch(c[m>>2]|0){case 2:{B=81480;break};case 3:{B=86216;break};case 4:{B=105176;break};case 5:{B=102536;break};case 1:{B=91456;break};default:{B=139120}}gc(b|0,163592,(r=i,i=i+8|0,c[r>>2]=B,r)|0)|0;i=r;if((c[m>>2]|0)==5){gc(b|0,159504,(r=i,i=i+8|0,h[r>>3]=+g[e>>2],r)|0)|0;i=r}gc(b|0,154488,(r=i,i=i+8|0,c[r>>2]=c[d>>2],r)|0)|0;i=r;gc(b|0,151272,(r=i,i=i+8|0,c[r>>2]=c[l>>2],r)|0)|0;i=r;A=c[m>>2]|0;i=f;return A|0}function vv(a,b,c){a=a|0;b=b|0;c=c|0;return uv(ew(a|0,146488)|0,b,c)|0}function wv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+8|0;g=f|0;h=ew(b|0,145176)|0;do{if((h|0)==0){j=d}else{b=ac(h|0,148336,(k=i,i=i+8|0,c[k>>2]=g,k)|0)|0;i=k;k=c[g>>2]|0;if((b|0)==1&(k|0)>-1){j=k;break}k=a[h]|0;if(!((k<<24>>24|0)==116|(k<<24>>24|0)==84)){j=d;break}j=e}}while(0);i=f;return j|0}function xv(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,p=0.0,q=0.0,r=0,s=0.0,t=0.0,u=0,v=0;f=i;g=+((a*100|0)-1|0);if((a|0)>0){j=+(e<<1|0);e=0;k=0.0;l=0.0;while(1){m=j+(+h[b+(e<<5)+16>>3]- +h[b+(e<<5)>>3]);n=j+(+h[b+(e<<5)+24>>3]- +h[b+(e<<5)+8>>3]);p=l-(m+n);q=k-m*n;r=e+1|0;if((r|0)<(a|0)){e=r;k=q;l=p}else{s=q;t=p;break}}}else{s=0.0;t=0.0}l=t*t-g*4.0*s;if(l<0.0){Fv(1,121760,(u=i,i=i+8|0,h[u>>3]=l,u)|0)|0;i=u;v=-1;i=f;return v|0}k=+T(l);j=g*2.0;p=(k-t)/j;q=(-0.0-t-k)/j;e=~~p;a=(e|0)==0?1:e;if((d[213992]|0)>>>0<=2>>>0){v=a;i=f;return v|0}e=c[o>>2]|0;Ma(121216,27,1,e|0)|0;gc(e|0,120144,(u=i,i=i+40|0,h[u>>3]=g,h[u+8>>3]=t,h[u+16>>3]=s,h[u+24>>3]=l,h[u+32>>3]=k,u)|0)|0;i=u;gc(e|0,119328,(u=i,i=i+32|0,c[u>>2]=a,h[u+8>>3]=p,c[u+16>>2]=~~q,h[u+24>>3]=q,u)|0)|0;i=u;gc(e|0,118664,(u=i,i=i+16|0,h[u>>3]=s+(t*p+p*g*p),h[u+8>>3]=s+(t*q+q*g*q),u)|0)|0;i=u;v=a;i=f;return v|0}function yv(a,b,e,f,g,j,k){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;l=i;m=a;a=i;i=i+32|0;tF(a,m,32)|0;n=+h[a>>3];if(n<0.0){p=n+-.5}else{p=n+.5}q=+h[a+8>>3];if(q<0.0){r=q+-.5}else{r=q+.5}s=+h[a+16>>3];if(s<0.0){t=s+-.5}else{t=s+.5}u=+h[a+24>>3];if(u<0.0){v=u+-.5}else{v=u+.5}a=Dk()|0;m=g-f|0;w=j-f|0;x=g+f-~~p+~~t|0;g=j+f-~~r+~~v|0;if((m|0)>-1){y=(m|0)/(e|0)|0}else{y=((m+1|0)/(e|0)|0)-1|0}if((w|0)>-1){z=(w|0)/(e|0)|0}else{z=((w+1|0)/(e|0)|0)-1|0}if((x|0)>-1){A=(x|0)/(e|0)|0}else{A=((x+1|0)/(e|0)|0)-1|0}if((g|0)>-1){B=(g|0)/(e|0)|0}else{B=((g+1|0)/(e|0)|0)-1|0}if(!((y|0)>(A|0)|(z|0)>(B|0))){g=y;while(1){y=z;while(1){Gk(a,g,y);if((y|0)<(B|0)){y=y+1|0}else{break}}if((g|0)<(A|0)){g=g+1|0}else{break}}}g=b+4|0;c[g>>2]=Kk(a)|0;A=Jk(a)|0;B=b+8|0;c[B>>2]=A;v=+(f<<1|0);r=+(e|0);e=~~+ca((v+(s-n))/r);f=~~+ca((v+(u-q))/r);c[b>>2]=f+e;if((d[213992]|0)>>>0<=2>>>0){Ek(a);i=l;return}b=c[o>>2]|0;gc(b|0,126120,(z=i,i=i+32|0,c[z>>2]=k,c[z+8>>2]=A,c[z+16>>2]=e,c[z+24>>2]=f,z)|0)|0;i=z;if((c[B>>2]|0)>0){C=0}else{Ek(a);i=l;return}do{f=c[g>>2]|0;e=c[f+(C<<3)+4>>2]|0;gc(b|0,123640,(z=i,i=i+16|0,c[z>>2]=c[f+(C<<3)>>2],c[z+8>>2]=e,z)|0)|0;i=z;C=C+1|0;}while((C|0)<(c[B>>2]|0));Ek(a);i=l;return}function zv(a,b){a=a|0;b=b|0;return(c[c[b>>2]>>2]|0)-(c[c[a>>2]>>2]|0)|0}function Av(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;j=c[b+12>>2]|0;k=+h[i+(j<<5)>>3];l=+h[i+(j<<5)+8>>3];m=+h[i+(j<<5)+16>>3];n=+h[i+(j<<5)+24>>3];do{if((a|0)==0){o=+(g<<1|0);p=+(f|0);if((Bv((~~+ca((o+(m-k))/p)|0)/-2|0,(~~+ca((o+(n-l))/p)|0)/-2|0,b,d,e,f,i)|0)==0){break}return}}while(0);if((Bv(0,0,b,d,e,f,i)|0)!=0){return}if((~~+ca(m-k)|0)<(~~+ca(n-l)|0)){g=1;a:while(1){a=-g|0;if((g|0)>0){j=0;while(1){q=j-1|0;if((Bv(a,j,b,d,e,f,i)|0)!=0){r=37;break a}if((q|0)>(a|0)){j=q}else{s=q;break}}}else{s=0}if((g|0)>(a|0)){j=a;while(1){q=j+1|0;if((Bv(j,s,b,d,e,f,i)|0)!=0){r=37;break a}if((q|0)<(g|0)){j=q}else{t=q;break}}}else{t=a}if((s|0)<(g|0)){j=s;while(1){q=j+1|0;if((Bv(t,j,b,d,e,f,i)|0)!=0){r=37;break a}if((q|0)<(g|0)){j=q}else{u=q;break}}}else{u=s}if((t|0)>(a|0)){j=t;while(1){q=j-1|0;if((Bv(j,u,b,d,e,f,i)|0)!=0){r=37;break a}if((q|0)>(a|0)){j=q}else{v=q;break}}}else{v=t}if((u|0)>0){j=u;while(1){a=j-1|0;if((Bv(v,j,b,d,e,f,i)|0)!=0){r=37;break a}if((a|0)>0){j=a}else{break}}}g=g+1|0}if((r|0)==37){return}}else{g=1;b:while(1){v=-g|0;if((g|0)>0){u=0;while(1){t=u+1|0;if((Bv(u,v,b,d,e,f,i)|0)!=0){r=37;break b}if((t|0)<(g|0)){u=t}else{w=t;break}}}else{w=0}if((g|0)>(v|0)){u=v;while(1){t=u+1|0;if((Bv(w,u,b,d,e,f,i)|0)!=0){r=37;break b}if((t|0)<(g|0)){u=t}else{x=t;break}}}else{x=v}if((w|0)>(v|0)){u=w;while(1){t=u-1|0;if((Bv(u,x,b,d,e,f,i)|0)!=0){r=37;break b}if((t|0)>(v|0)){u=t}else{y=t;break}}}else{y=w}if((x|0)>(v|0)){u=x;while(1){t=u-1|0;if((Bv(y,u,b,d,e,f,i)|0)!=0){r=37;break b}if((t|0)>(v|0)){u=t}else{z=t;break}}}else{z=x}if((y|0)<0){u=y;while(1){v=u+1|0;if((Bv(u,z,b,d,e,f,i)|0)!=0){r=37;break b}if((v|0)<0){u=v}else{break}}}g=g+1|0}if((r|0)==37){return}}}function Bv(a,b,e,f,g,j,k){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0;l=i;i=i+8|0;m=l|0;n=m;p=e+4|0;q=c[e+8>>2]|0;r=(q|0)>0;a:do{if(r){s=m;t=n+4|0;u=0;v=c[p>>2]|0;while(1){w=v;x=c[w>>2]|0;y=c[w+4>>2]|0;c[m>>2]=x;c[m+4>>2]=y;c[s>>2]=x+a;c[t>>2]=y+b;if((Hk(f,n)|0)!=0){z=0;break}y=u+1|0;if((y|0)<(q|0)){u=y;v=v+8|0}else{break a}}i=l;return z|0}}while(0);v=c[e+12>>2]|0;A=+h[k+(v<<5)>>3];if(A<0.0){B=A+-.5}else{B=A+.5}A=+h[k+(v<<5)+8>>3];if(A<0.0){C=A+-.5}else{C=A+.5}v=g|0;c[v>>2]=(da(j,a)|0)-~~B;k=g+4|0;c[k>>2]=(da(j,b)|0)-~~C;if(r){r=m;j=n+4|0;g=0;e=c[p>>2]|0;while(1){p=e;u=c[p>>2]|0;t=c[p+4>>2]|0;c[m>>2]=u;c[m+4>>2]=t;c[r>>2]=u+a;c[j>>2]=t+b;Fk(f,n);t=g+1|0;if((t|0)<(q|0)){g=t;e=e+8|0}else{break}}}if((d[213992]|0)>>>0<=1>>>0){z=1;i=l;return z|0}e=c[v>>2]|0;v=c[k>>2]|0;gc(c[o>>2]|0,129304,(k=i,i=i+40|0,c[k>>2]=q,c[k+8>>2]=a,c[k+16>>2]=b,c[k+24>>2]=e,c[k+32>>2]=v,k)|0)|0;i=k;z=1;i=l;return z|0}function Cv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[43654]|0;e=c[d+(c[(c[a>>2]|0)+16>>2]<<2)>>2]|0;a=c[d+(c[(c[b>>2]|0)+16>>2]<<2)>>2]|0;if((e|0)>(a|0)){f=1;return f|0}f=((e|0)<(a|0))<<31>>31;return f|0}function Dv(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,g=0;d=c[a>>2]|0;a=c[b>>2]|0;e=+h[d+8>>3]+ +h[d>>3];f=+h[a+8>>3]+ +h[a>>3];if(e<f){g=1;return g|0}g=(e>f)<<31>>31;return g|0}function Ev(a,b,d,e,f,g,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0;l=i;i=i+64|0;m=l|0;n=l+32|0;o=l+48|0;p=n|0;h[p>>3]=+(b|0);b=n+8|0;h[b>>3]=+(d|0);do{if((k|0)!=0){d=a+8|0;q=c[(c[d>>2]|0)+8>>2]|0;if((q|0)==0){break}if((c[q+4>>2]|0)<=0){i=l;return}r=m;s=n;t=o;u=+(f|0);v=+(g|0);w=+(j|0);x=o|0;y=o+8|0;z=m+16|0;A=0;B=q;do{q=c[B>>2]|0;C=c[q+(A*48|0)>>2]|0;D=c[q+(A*48|0)+4>>2]|0;E=c[q+(A*48|0)+8>>2]|0;F=c[q+(A*48|0)+12>>2]|0;G=q+(A*48|0)+16|0;c[r>>2]=c[G>>2];c[r+4>>2]=c[G+4>>2];c[r+8>>2]=c[G+8>>2];c[r+12>>2]=c[G+12>>2];c[r+16>>2]=c[G+16>>2];c[r+20>>2]=c[G+20>>2];c[r+24>>2]=c[G+24>>2];c[r+28>>2]=c[G+28>>2];if((E|0)==0){E=C;c[s>>2]=c[E>>2];c[s+4>>2]=c[E+4>>2];c[s+8>>2]=c[E+8>>2];c[s+12>>2]=c[E+12>>2];E=C+16|0;c[t>>2]=c[E>>2];c[t+4>>2]=c[E+4>>2];c[t+8>>2]=c[E+8>>2];c[t+12>>2]=c[E+12>>2];H=2}else{c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];E=C;c[t>>2]=c[E>>2];c[t+4>>2]=c[E+4>>2];c[t+8>>2]=c[E+8>>2];c[t+12>>2]=c[E+12>>2];H=1}I=u+ +h[p>>3];h[p>>3]=I;J=v+ +h[b>>3];h[b>>3]=J;if(I<0.0){K=(I+1.0)/w+-1.0}else{K=I/w}h[p>>3]=K;if(J<0.0){L=(J+1.0)/w+-1.0}else{L=J/w}h[b>>3]=L;J=u+ +h[x>>3];h[x>>3]=J;I=v+ +h[y>>3];h[y>>3]=I;if(J<0.0){M=(J+1.0)/w+-1.0}else{M=J/w}h[x>>3]=M;if(I<0.0){N=(I+1.0)/w+-1.0}else{N=I/w}h[y>>3]=N;lv(n,o,e);if((H|0)<(D|0)){E=H;do{c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];G=C+(E<<4)|0;c[t>>2]=c[G>>2];c[t+4>>2]=c[G+4>>2];c[t+8>>2]=c[G+8>>2];c[t+12>>2]=c[G+12>>2];I=u+ +h[x>>3];h[x>>3]=I;J=v+ +h[y>>3];h[y>>3]=J;if(I<0.0){O=(I+1.0)/w+-1.0}else{O=I/w}h[x>>3]=O;if(J<0.0){P=(J+1.0)/w+-1.0}else{P=J/w}h[y>>3]=P;lv(n,o,e);E=E+1|0;}while((E|0)<(D|0))}if((F|0)!=0){c[s>>2]=c[t>>2];c[s+4>>2]=c[t+4>>2];c[s+8>>2]=c[t+8>>2];c[s+12>>2]=c[t+12>>2];c[t>>2]=c[z>>2];c[t+4>>2]=c[z+4>>2];c[t+8>>2]=c[z+8>>2];c[t+12>>2]=c[z+12>>2];J=u+ +h[x>>3];h[x>>3]=J;I=v+ +h[y>>3];h[y>>3]=I;if(J<0.0){Q=(J+1.0)/w+-1.0}else{Q=J/w}h[x>>3]=Q;if(I<0.0){R=(I+1.0)/w+-1.0}else{R=I/w}h[y>>3]=R;lv(n,o,e)}A=A+1|0;B=c[(c[d>>2]|0)+8>>2]|0;}while((A|0)<(c[B+4>>2]|0));i=l;return}}while(0);Pm(o,c[((c[a>>2]&3|0)==2?a:a-32|0)+28>>2]|0);a=o|0;R=+(f|0)+ +h[a>>3];h[a>>3]=R;f=o+8|0;Q=+(g|0)+ +h[f>>3];h[f>>3]=Q;if(R<0.0){S=(R+1.0)/+(j|0)+-1.0}else{S=R/+(j|0)}h[a>>3]=S;if(Q<0.0){T=(Q+1.0)/+(j|0)+-1.0}else{T=Q/+(j|0)}h[f>>3]=T;lv(n,o,e);i=l;return}function Fv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+16|0;f=e|0;g=f;c[g>>2]=d;c[g+4>>2]=0;g=Gv(a,b,f|0)|0;i=e;return g|0}function Gv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;f=(a|0)==3;if(f){g=c[53280]|0}else{g=(a|0)==2?1:a}c[53280]=g;h=c[53250]|0;c[53250]=h>>>0>g>>>0?h:g;if(g>>>0<(c[53282]|0)>>>0){g=c[53278]|0;do{if((g|0)==0){h=_a()|0;c[53278]=h;if((h|0)==0){j=1}else{k=h;break}i=e;return j|0}else{k=g}}while(0);if(f){l=k}else{c[53252]=lb(k|0)|0;l=c[53278]|0}Sb(l|0,b|0,d|0)|0;j=0;i=e;return j|0}l=c[43652]|0;if((l|0)==0){k=c[o>>2]|0;if(!f){gc(k|0,118168,(g=i,i=i+8|0,c[g>>2]=(a|0)==1?156768:127176,g)|0)|0;i=g}Sb(k|0,b|0,d|0)|0;j=0;i=e;return j|0}do{if((c[43650]|0)==0){k=dF(c[242]|0)|0;c[43650]=k;if((k|0)!=0){break}Ma(115128,35,1,c[o>>2]|0)|0;j=0;i=e;return j|0}}while(0);if(!f){Ec[l&63]((a|0)==1?156768:127176)|0;Ec[c[43652]&63](108144)|0}while(1){a=$b(c[43650]|0,c[242]|0,b|0,d|0)|0;l=c[242]|0;if((a|0)>-1&(a|0)<(l|0)){m=12;break}f=l<<1;l=a+1|0;a=(f|0)>(l|0)?f:l;c[242]=a;if((gF(c[43650]|0,a)|0)==0){m=14;break}}if((m|0)==12){Ec[c[43652]&63](c[43650]|0)|0;j=0;i=e;return j|0}else if((m|0)==14){Ma(115128,35,1,c[o>>2]|0)|0;j=0;i=e;return j|0}return 0}function Hv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d|0;f=e;c[f>>2]=b;c[f+4>>2]=0;Gv(1,a,e|0)|0;i=d;return}function Iv(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((e|0)==0){f=(d|0)==0?1024:d;c[b+12>>2]=1;g=dF(f)|0;c[b>>2]=g;h=f;i=g}else{c[b>>2]=e;c[b+12>>2]=0;h=d;i=e}c[b+8>>2]=i+h;c[b+4>>2]=i;a[i]=0;return}function Jv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=a+8|0;e=a|0;f=c[e>>2]|0;g=f;h=(c[d>>2]|0)-g|0;i=h<<1;j=h+b|0;b=(j|0)>(i|0)?j:i;i=a+4|0;j=(c[i>>2]|0)-g|0;g=a+12|0;if((c[g>>2]|0)==0){a=dF(b)|0;tF(a|0,f|0,j)|0;c[g>>2]=1;k=a}else{k=gF(f,b)|0}c[e>>2]=k;c[i>>2]=k+j;c[d>>2]=k+b;return 0}function Kv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=a+4|0;f=c[e>>2]|0;g=a+8|0;h=c[g>>2]|0;if((f+d|0)>>>0<=h>>>0){i=f;tF(i|0,b|0,d)|0;j=c[e>>2]|0;k=j+d|0;c[e>>2]=k;return d|0}l=a|0;m=c[l>>2]|0;n=m;o=h-n|0;h=o<<1;p=o+d|0;o=(p|0)>(h|0)?p:h;h=f-n|0;n=a+12|0;if((c[n>>2]|0)==0){a=dF(o)|0;tF(a|0,m|0,h)|0;c[n>>2]=1;q=a}else{q=gF(m,o)|0}c[l>>2]=q;l=q+h|0;c[e>>2]=l;c[g>>2]=q+o;i=l;tF(i|0,b|0,d)|0;j=c[e>>2]|0;k=j+d|0;c[e>>2]=k;return d|0}function Lv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=xF(b|0)|0;e=a+4|0;f=c[e>>2]|0;g=a+8|0;h=c[g>>2]|0;if((f+d|0)>>>0<=h>>>0){i=f;tF(i|0,b|0,d)|0;j=c[e>>2]|0;k=j+d|0;c[e>>2]=k;return d|0}l=a|0;m=c[l>>2]|0;n=m;o=h-n|0;h=o<<1;p=o+d|0;o=(p|0)>(h|0)?p:h;h=f-n|0;n=a+12|0;if((c[n>>2]|0)==0){a=dF(o)|0;tF(a|0,m|0,h)|0;c[n>>2]=1;q=a}else{q=gF(m,o)|0}c[l>>2]=q;l=q+h|0;c[e>>2]=l;c[g>>2]=q+o;i=l;tF(i|0,b|0,d)|0;j=c[e>>2]|0;k=j+d|0;c[e>>2]=k;return d|0}function Mv(a){a=a|0;if((c[a+12>>2]|0)==0){return}eF(c[a>>2]|0);return}function Nv(a){a=a|0;var b=0,e=0,f=0;b=a+4|0;e=c[b>>2]|0;if(e>>>0<=(c[a>>2]|0)>>>0){f=-1;return f|0}c[b>>2]=e-1;f=d[e]|0;return f|0}function Ov(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;g=i;h=c[b>>2]&3;if((h|0)==0){j=2}else if((h|0)==2|(h|0)==3){j=8}else if((h|0)==1){j=122}else{Fv(1,102488,(k=i,i=i+8|0,c[k>>2]=h,k)|0)|0;i=k;l=-1;i=g;return l|0}k=Oc[j&255](a,b)|0;if((k|0)==0){l=-1;i=g;return l|0}Sv(a,k,d,e,j,f);l=0;i=g;return l|0}function Pv(a,b){a=a|0;b=b|0;return a|0}function Qv(a,b){a=a|0;b=b|0;var c=0;if((Hx(b|0)|0)==(a|0)){c=b;return c|0}c=zx(a,b,0)|0;return c|0}function Rv(a,b){a=a|0;b=b|0;var c=0;if((Hx(b|0)|0)==(a|0)){c=b;return c|0}c=xw(a,b,0)|0;return c|0}function Sv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=(f|0)!=0;if(g){Tc[c&127](a,b,d)}h=sy(a)|0;if((h|0)!=0){i=h;do{h=Oc[e&255](i,b)|0;if((h|0)!=0){Sv(i,h,c,d,e,f)}i=ty(i)|0;}while((i|0)!=0)}if(g){return}Tc[c&127](a,b,d);return}function Tv(a,b,d){a=a|0;b=b|0;d=d|0;fy(c[53854]|0,c[b+8>>2]|0)|0;fy(c[53854]|0,c[b+12>>2]|0)|0;tx(c[53854]|0,b);return}function Uv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=a|0;e=Vx(d,173376,0)|0;if((e|0)!=0|(b|0)==0){f=e;g=f;return g|0}e=Ix(d)|0;Ov(e,e|0,64,0,1)|0;b=ux(e)|0;if((b|0)!=0){h=b;do{b=h|0;i=Vx(b,c[43580]|0,0)|0;if((i|0)==0){j=5}else{if((c[i+8>>2]|0)==0){j=5}}if((j|0)==5){j=0;Zv(a,b)}b=mw(e,h)|0;if((b|0)!=0){i=b;do{b=i|0;k=Vx(b,c[43580]|0,0)|0;if((k|0)==0){j=9}else{if((c[k+8>>2]|0)==0){j=9}}if((j|0)==9){j=0;Zv(a,b)}i=ow(e,i)|0;}while((i|0)!=0)}h=vx(e,h)|0;}while((h|0)!=0)}f=Vx(d,173376,0)|0;g=f;return g|0}function Vv(a){a=a|0;return Vx(a,c[43580]|0,0)|0}function Wv(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;g=i;i=i+72|0;h=g|0;j=g+24|0;k=g+48|0;do{if((b|0)==0){l=c[53550]|0;if((l|0)!=0){m=l;break}l=Hw(0,172632,0)|0;c[53550]=l;m=l}else{m=b}}while(0);b=m|0;if((f|0)==0){l=Vx(b,173376,0)|0;if((l|0)==0){n=0;i=g;return n|0}if((d|0)==0){o=c[l+16>>2]|0}else if((d|0)==1){o=c[l+8>>2]|0}else if((d|0)==3|(d|0)==2){o=c[l+12>>2]|0}else{Fv(1,96792,(p=i,i=i+8|0,c[p>>2]=d,p)|0)|0;i=p;n=0;i=g;return n|0}if((o|0)==0){n=0;i=g;return n|0}c[h+8>>2]=e;n=Hc[c[o>>2]&63](o,h,4)|0;i=g;return n|0}h=Ix(b)|0;Uv(m,1)|0;o=Vx(b,173376,0)|0;do{if((o|0)==0){q=0}else{if((d|0)==0){q=c[o+16>>2]|0;break}else if((d|0)==3|(d|0)==2){q=c[o+12>>2]|0;break}else if((d|0)==1){q=c[o+8>>2]|0;break}else{Fv(1,96792,(p=i,i=i+8|0,c[p>>2]=d,p)|0)|0;i=p;q=0;break}}}while(0);o=fh(q,0)|0;c[k+8>>2]=e;l=q|0;r=Hc[c[l>>2]&63](q,k,4)|0;fh(q,o)|0;do{if((r|0)==0){c[j+8>>2]=e;o=Hc[c[l>>2]&63](q,j,4)|0;if((o|0)!=0){k=c[o+16>>2]|0;o=sx(m,24)|0;a[o+20|0]=d;c[o+8>>2]=dy(m,e)|0;c[o+12>>2]=dy(m,f)|0;c[o+16>>2]=k;Hc[c[l>>2]&63](q,o,1)|0;s=o;t=37;break}o=Vx(h|0,173376,0)|0;do{if((o|0)==0){u=0}else{if((d|0)==0){u=c[o+16>>2]|0;break}else if((d|0)==1){u=c[o+8>>2]|0;break}else if((d|0)==3|(d|0)==2){u=c[o+12>>2]|0;break}else{Fv(1,96792,(p=i,i=i+8|0,c[p>>2]=d,p)|0)|0;i=p;u=0;break}}}while(0);o=bh(u)|0;k=sx(m,24)|0;v=k;a[k+20|0]=d;c[k+8>>2]=dy(m,e)|0;w=k+12|0;c[w>>2]=dy(m,f)|0;x=k+16|0;c[x>>2]=o;Hc[c[u>>2]&63](u,k,1)|0;if((d|0)==0){Ov(h,h|0,76,k,1)|0;s=v;t=37;break}else if((d|0)==3|(d|0)==2){k=ux(h)|0;if((k|0)==0){s=v;t=37;break}o=m+52|0;y=k;while(1){k=mw(h,y)|0;if((k|0)!=0){z=k;do{k=Vx(z|0,c[43580]|0,0)|0;A=c[x>>2]|0;if((A|0)>3){B=c[o>>2]|0;C=k+12|0;D=A<<2;c[C>>2]=Sc[c[(c[B>>2]|0)+8>>2]&127](c[B+12>>2]|0,c[C>>2]|0,D,D+4|0)|0;E=C}else{E=k+12|0}k=dy(m,c[w>>2]|0)|0;c[(c[E>>2]|0)+(c[x>>2]<<2)>>2]=k;z=ow(h,z)|0;}while((z|0)!=0)}z=vx(h,y)|0;if((z|0)==0){s=v;t=37;break}else{y=z}}}else if((d|0)==1){y=ux(h)|0;if((y|0)==0){F=v;break}o=m+52|0;z=y;while(1){y=Vx(z|0,c[43580]|0,0)|0;k=c[x>>2]|0;if((k|0)>3){C=c[o>>2]|0;D=y+12|0;B=k<<2;c[D>>2]=Sc[c[(c[C>>2]|0)+8>>2]&127](c[C+12>>2]|0,c[D>>2]|0,B,B+4|0)|0;G=D}else{G=y+12|0}y=dy(m,c[w>>2]|0)|0;c[(c[G>>2]|0)+(c[x>>2]<<2)>>2]=y;y=vx(h,z)|0;if((y|0)==0){s=v;t=37;break}else{z=y}}}else{F=v;break}}else{z=r+12|0;fy(m,c[z>>2]|0)|0;c[z>>2]=dy(m,f)|0;s=r;t=37}}while(0);do{if((t|0)==37){if(!((s|0)!=0&(d|0)==0)){F=s;break}hw(b,s,f)|0;F=s}}while(0);Lx(m,b,F);n=F;i=g;return n|0}function Xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;f=Vx(a|0,173376,0)|0;if((f|0)==0){g=0;i=e;return g|0}if((b|0)==0){h=c[f+16>>2]|0}else if((b|0)==3|(b|0)==2){h=c[f+12>>2]|0}else if((b|0)==1){h=c[f+8>>2]|0}else{Fv(1,96792,(f=i,i=i+8|0,c[f>>2]=b,f)|0)|0;i=f;g=0;i=e;return g|0}if((h|0)==0){g=0;i=e;return g|0}f=c[h>>2]|0;if((d|0)==0){g=Hc[f&63](h,0,128)|0;i=e;return g|0}else{g=Hc[f&63](h,d,8)|0;i=e;return g|0}return 0}function Yv(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=b+12|0;a[d]=a[d]|64;d=b|0;e=Wx(d,173376,20,0)|0;f=e+8|0;c[f>>2]=yy(b,174328,c[43326]|0)|0;g=e+12|0;c[g>>2]=yy(b,174328,c[43326]|0)|0;h=e+16|0;c[h>>2]=yy(b,174328,c[43326]|0)|0;e=uy(b)|0;if((e|0)!=0){i=Vx(e|0,173376,0)|0;fh(c[f>>2]|0,c[i+8>>2]|0)|0;fh(c[g>>2]|0,c[i+12>>2]|0)|0;fh(c[h>>2]|0,c[i+16>>2]|0)|0;j=uy(b)|0;k=(j|0)==0;l=k?b:j;Zv(l,d);return}i=c[53550]|0;if((i|0)==0|(i|0)==(b|0)){j=uy(b)|0;k=(j|0)==0;l=k?b:j;Zv(l,d);return}e=Vx(i|0,173376,0)|0;i=c[e+8>>2]|0;m=c[f>>2]|0;f=i|0;n=Hc[c[f>>2]&63](i,0,128)|0;if((n|0)!=0){o=m|0;p=n;do{n=c[p+8>>2]|0;q=c[p+12>>2]|0;r=c[p+16>>2]|0;s=sx(b,24)|0;a[s+20|0]=1;c[s+8>>2]=dy(b,n)|0;c[s+12>>2]=dy(b,q)|0;c[s+16>>2]=r;a[s+22|0]=a[p+22|0]|0;a[s+21|0]=a[p+21|0]|0;Hc[c[o>>2]&63](m,s,1)|0;p=Hc[c[f>>2]&63](i,p,8)|0;}while((p|0)!=0)}p=c[e+12>>2]|0;i=p;f=c[g>>2]|0;g=p;p=Hc[c[g>>2]&63](i,0,128)|0;if((p|0)!=0){m=f|0;o=p;do{p=c[o+8>>2]|0;s=c[o+12>>2]|0;r=c[o+16>>2]|0;q=sx(b,24)|0;a[q+20|0]=2;c[q+8>>2]=dy(b,p)|0;c[q+12>>2]=dy(b,s)|0;c[q+16>>2]=r;a[q+22|0]=a[o+22|0]|0;a[q+21|0]=a[o+21|0]|0;Hc[c[m>>2]&63](f,q,1)|0;o=Hc[c[g>>2]&63](i,o,8)|0;}while((o|0)!=0)}o=c[e+16>>2]|0;e=c[h>>2]|0;h=o|0;i=Hc[c[h>>2]&63](o,0,128)|0;if((i|0)==0){j=uy(b)|0;k=(j|0)==0;l=k?b:j;Zv(l,d);return}g=e|0;f=i;do{i=c[f+8>>2]|0;m=c[f+12>>2]|0;q=c[f+16>>2]|0;r=sx(b,24)|0;a[r+20|0]=0;c[r+8>>2]=dy(b,i)|0;c[r+12>>2]=dy(b,m)|0;c[r+16>>2]=q;a[r+22|0]=a[f+22|0]|0;a[r+21|0]=a[f+21|0]|0;Hc[c[g>>2]&63](e,r,1)|0;f=Hc[c[h>>2]&63](o,f,8)|0;}while((f|0)!=0);j=uy(b)|0;k=(j|0)==0;l=k?b:j;Zv(l,d);return}function Zv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;e=Wx(b,c[43580]|0,16,0)|0;f=b;g=c[f>>2]&3;h=a|0;a=Vx(h,173376,0)|0;do{if((a|0)==0){j=0}else{if((g|0)==3|(g|0)==2){j=c[a+12>>2]|0;break}else if((g|0)==0){j=c[a+16>>2]|0;break}else if((g|0)==1){j=c[a+8>>2]|0;break}else{Fv(1,96792,(k=i,i=i+8|0,c[k>>2]=g,k)|0)|0;i=k;j=0;break}}}while(0);g=e+8|0;if((c[g>>2]|0)!=0){i=d;return}a=Ix(h)|0;h=c[f>>2]&3;l=Vx(a|0,173376,0)|0;do{if((l|0)==0){m=0}else{if((h|0)==0){m=c[l+16>>2]|0;break}else if((h|0)==1){m=c[l+8>>2]|0;break}else if((h|0)==3|(h|0)==2){m=c[l+12>>2]|0;break}else{Fv(1,96792,(k=i,i=i+8|0,c[k>>2]=h,k)|0)|0;i=k;m=0;break}}}while(0);c[g>>2]=m;m=Ix(Hx(b)|0)|0;g=c[f>>2]&3;f=Vx(m|0,173376,0)|0;do{if((f|0)==0){n=0}else{if((g|0)==0){o=c[f+16>>2]|0}else if((g|0)==1){o=c[f+8>>2]|0}else if((g|0)==3|(g|0)==2){o=c[f+12>>2]|0}else{Fv(1,96792,(k=i,i=i+8|0,c[k>>2]=g,k)|0)|0;i=k;n=0;break}if((o|0)==0){n=0;break}n=bh(o)|0}}while(0);o=Hx(b)|0;k=e+12|0;c[k>>2]=sx(o,(n|0)<4?16:n<<2)|0;n=j|0;o=Hc[c[n>>2]&63](j,0,128)|0;if((o|0)==0){i=d;return}else{p=o}do{o=Hx(b)|0;e=dy(o,c[p+12>>2]|0)|0;c[(c[k>>2]|0)+(c[p+16>>2]<<2)>>2]=e;p=Hc[c[n>>2]&63](j,p,8)|0;}while((p|0)!=0);i=d;return}function _v(a){a=a|0;var b=0,d=0,e=0;c[53854]=a;b=a|0;d=Vx(b,c[43580]|0,0)|0;if((d|0)!=0){$v(a|0,d);Xx(b,c[d>>2]|0)|0}d=Vx(b,173376,0)|0;if((d|0)==0){e=0;return e|0}if((Ay(a,c[d+8>>2]|0)|0)!=0){e=1;return e|0}if((Ay(a,c[d+12>>2]|0)|0)!=0){e=1;return e|0}if((Ay(a,c[d+16>>2]|0)|0)!=0){e=1;return e|0}Xx(b,c[d>>2]|0)|0;e=0;return e|0}function $v(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;e=a|0;f=Hx(e)|0;g=Ix(Hx(e)|0)|0;e=c[a>>2]&3;a=Vx(g|0,173376,0)|0;do{if((a|0)!=0){if((e|0)==3|(e|0)==2){h=c[a+12>>2]|0}else if((e|0)==1){h=c[a+8>>2]|0}else if((e|0)==0){h=c[a+16>>2]|0}else{Fv(1,96792,(g=i,i=i+8|0,c[g>>2]=e,g)|0)|0;i=g;break}if((h|0)==0){break}g=bh(h)|0;j=b+12|0;k=c[j>>2]|0;if((g|0)>0){l=0;m=k}else{n=k;o=n;tx(f,o);i=d;return}while(1){fy(f,c[m+(l<<2)>>2]|0)|0;k=l+1|0;p=c[j>>2]|0;if((k|0)<(g|0)){l=k;m=p}else{n=p;break}}o=n;tx(f,o);i=d;return}}while(0);n=c[b+12>>2]|0;o=n;tx(f,o);i=d;return}function aw(a,b){a=a|0;b=b|0;var d=0;d=b|0;b=Vx(d,c[43580]|0,0)|0;do{if((b|0)!=0){if((c[b+8>>2]|0)==0){break}return}}while(0);Zv(a,d);return}function bw(a){a=a|0;var b=0,d=0;b=a|0;d=Vx(b,c[43580]|0,0)|0;if((d|0)==0){return}$v(a|0,d);Xx(b,c[43580]|0)|0;return}function cw(a,b){a=a|0;b=b|0;var d=0;d=b|0;b=Vx(d,c[43580]|0,0)|0;do{if((b|0)!=0){if((c[b+8>>2]|0)==0){break}return}}while(0);Zv(a,d);return}function dw(a){a=a|0;var b=0,d=0;b=a|0;d=Vx(b,c[43580]|0,0)|0;if((d|0)==0){return}$v(a|0,d);Xx(b,c[43580]|0)|0;return}function ew(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+24|0;e=d|0;f=Vx(a,c[43580]|0,0)|0;if((f|0)==0){g=0;i=d;return g|0}h=c[f+8>>2]|0;c[e+8>>2]=b;b=Hc[c[h>>2]&63](h,e,4)|0;if((b|0)==0){g=0;i=d;return g|0}e=Vx(a,c[43580]|0,0)|0;g=c[(c[e+12>>2]|0)+(c[b+16>>2]<<2)>>2]|0;i=d;return g|0}function fw(a,b){a=a|0;b=b|0;var d=0;d=Vx(a,c[43580]|0,0)|0;return c[(c[d+12>>2]|0)+(c[b+16>>2]<<2)>>2]|0}function gw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+24|0;f=e|0;g=Vx(a,c[43580]|0,0)|0;if((g|0)==0){h=-1;i=e;return h|0}j=c[g+8>>2]|0;c[f+8>>2]=b;b=Hc[c[j>>2]&63](j,f,4)|0;if((b|0)==0){h=-1;i=e;return h|0}hw(a,b,d)|0;h=0;i=e;return h|0}function hw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=i;i=i+24|0;g=f|0;h=Hx(b)|0;j=Vx(b,c[43580]|0,0)|0;k=d+16|0;l=j+12|0;fy(h,c[(c[l>>2]|0)+(c[k>>2]<<2)>>2]|0)|0;j=dy(h,e)|0;c[(c[l>>2]|0)+(c[k>>2]<<2)>>2]=j;j=b;if((c[j>>2]&3|0)!=0){Lx(h,b,d);i=f;return 0}l=c[(Vx(h|0,173376,0)|0)+16>>2]|0;m=d+8|0;n=c[m>>2]|0;o=fh(l,0)|0;c[g+8>>2]=n;n=l|0;p=Hc[c[n>>2]&63](l,g,4)|0;fh(l,o)|0;if((p|0)==0){o=c[m>>2]|0;m=c[k>>2]|0;k=c[j>>2]|0;j=sx(h,24)|0;a[j+20|0]=k&3;c[j+8>>2]=dy(h,o)|0;c[j+12>>2]=dy(h,e)|0;c[j+16>>2]=m;Hc[c[n>>2]&63](l,j,1)|0;Lx(h,b,d);i=f;return 0}else{j=p+12|0;fy(h,c[j>>2]|0)|0;c[j>>2]=dy(h,e)|0;Lx(h,b,d);i=f;return 0}return 0}function iw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=i;i=i+24|0;g=f|0;h=Hx(a)|0;j=a;k=c[j>>2]&3;do{if((h|0)==0){l=c[53550]|0;if((l|0)!=0){m=l;break}l=Hw(0,172632,0)|0;c[53550]=l;m=l}else{m=h}}while(0);h=Vx(m|0,173376,0)|0;do{if((h|0)!=0){if((k|0)==3|(k|0)==2){n=c[h+12>>2]|0}else if((k|0)==1){n=c[h+8>>2]|0}else if((k|0)==0){n=c[h+16>>2]|0}else{Fv(1,96792,(m=i,i=i+8|0,c[m>>2]=k,m)|0)|0;i=m;break}if((n|0)==0){break}c[g+8>>2]=b;m=Hc[c[n>>2]&63](n,g,4)|0;if((m|0)==0){break}else{o=m}p=hw(a,o,d)|0;i=f;return 0}}while(0);g=Hx(a)|0;o=Wv(g,c[j>>2]&3,b,e)|0;p=hw(a,o,d)|0;i=f;return 0}function jw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=i;i=i+24|0;e=d|0;f=Hx(a)|0;g=a;h=c[g>>2]|0;if(((c[b>>2]^h)&3|0)!=0){j=1;i=d;return j|0}k=f|0;f=Vx(k,173376,0)|0;if((f|0)==0){j=1;i=d;return j|0}l=e;m=e+8|0;e=0;n=1;o=h;h=f;while(1){p=o&3;if((p|0)==0){q=c[h+16>>2]|0}else if((p|0)==3|(p|0)==2){q=c[h+12>>2]|0}else if((p|0)==1){q=c[h+8>>2]|0}else{r=8;break}if((q|0)==0){j=n;r=19;break}f=c[q>>2]|0;if((e|0)==0){s=Hc[f&63](q,0,128)|0}else{s=Hc[f&63](q,e,8)|0}if((s|0)==0){j=n;r=19;break}f=c[s+8>>2]|0;t=Vx(b,c[43580]|0,0)|0;if((t|0)==0){j=1;r=19;break}u=c[t+8>>2]|0;c[m>>2]=f;f=Hc[c[u>>2]&63](u,l,4)|0;if((f|0)==0){j=1;r=19;break}u=Vx(a,c[43580]|0,0)|0;t=c[(c[u+12>>2]|0)+(c[s+16>>2]<<2)>>2]|0;hw(b,f,t)|0;if((gy(t)|0)!=0){t=Vx(b,c[43580]|0,0)|0;hy(c[(c[t+12>>2]|0)+(c[f+16>>2]<<2)>>2]|0)}f=c[g>>2]|0;t=Vx(k,173376,0)|0;if((t|0)==0){j=0;r=19;break}else{e=s;n=0;o=f;h=t}}if((r|0)==8){Fv(1,96792,(h=i,i=i+8|0,c[h>>2]=p,h)|0)|0;i=h;j=n;i=d;return j|0}else if((r|0)==19){i=d;return j|0}return 0}function kw(a,b,c){a=a|0;b=b|0;c=c|0;Yv(a);return}function lw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=Vx(b|0,c[43580]|0,0)|0;b=d+16|0;f=c[b>>2]|0;if((f|0)>3){g=c[a+52>>2]|0;h=e+12|0;i=f<<2;c[h>>2]=Sc[c[(c[g>>2]|0)+8>>2]&127](c[g+12>>2]|0,c[h>>2]|0,i,i+4|0)|0;j=h}else{j=e+12|0}e=dy(a,c[d+12>>2]|0)|0;c[(c[j>>2]|0)+(c[b>>2]<<2)>>2]=e;return}function mw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+40|0;e=d|0;do{if((c[b+12>>2]|0)==(a|0)){f=b+16|0}else{c[e+16>>2]=b;g=c[a+28>>2]|0;h=Hc[c[g>>2]&63](g,e,4)|0;if((h|0)==0){j=0}else{f=h;break}i=d;return j|0}}while(0);e=a+32|0;a=f+32|0;ah(c[e>>2]|0,c[a>>2]|0)|0;f=c[e>>2]|0;b=Hc[c[f>>2]&63](f,0,128)|0;c[a>>2]=Yg(c[e>>2]|0)|0;j=b;i=d;return j|0}function nw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;i=i+40|0;e=d|0;if((c[b+12>>2]|0)==(a|0)){f=b+16|0;i=d;return f|0}else{c[e+16>>2]=b;b=c[a+28>>2]|0;f=Hc[c[b>>2]&63](b,e,4)|0;i=d;return f|0}return 0}function ow(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;i=i+40|0;e=d|0;f=c[((c[b>>2]&3|0)==3?b:b+32|0)+28>>2]|0;do{if((c[f+12>>2]|0)==(a|0)){g=f+16|0}else{c[e+16>>2]=f;h=c[a+28>>2]|0;j=Hc[c[h>>2]&63](h,e,4)|0;if((j|0)==0){k=0}else{g=j;break}i=d;return k|0}}while(0);e=a+32|0;a=g+32|0;ah(c[e>>2]|0,c[a>>2]|0)|0;g=c[e>>2]|0;f=Hc[c[g>>2]&63](g,b|0,8)|0;c[a>>2]=Yg(c[e>>2]|0)|0;k=f;i=d;return k|0}function pw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+40|0;e=d|0;do{if((c[b+12>>2]|0)==(a|0)){f=b+16|0}else{c[e+16>>2]=b;g=c[a+28>>2]|0;h=Hc[c[g>>2]&63](g,e,4)|0;if((h|0)==0){j=0}else{f=h;break}i=d;return j|0}}while(0);e=a+32|0;a=f+28|0;ah(c[e>>2]|0,c[a>>2]|0)|0;f=c[e>>2]|0;b=Hc[c[f>>2]&63](f,0,128)|0;c[a>>2]=Yg(c[e>>2]|0)|0;j=b;i=d;return j|0}function qw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;i=i+40|0;e=d|0;f=c[((c[b>>2]&3|0)==2?b:b-32|0)+28>>2]|0;do{if((c[f+12>>2]|0)==(a|0)){g=f+16|0}else{c[e+16>>2]=f;h=c[a+28>>2]|0;j=Hc[c[h>>2]&63](h,e,4)|0;if((j|0)==0){k=0}else{g=j;break}i=d;return k|0}}while(0);e=a+32|0;a=g+28|0;ah(c[e>>2]|0,c[a>>2]|0)|0;g=c[e>>2]|0;f=Hc[c[g>>2]&63](g,b|0,8)|0;c[a>>2]=Yg(c[e>>2]|0)|0;k=f;i=d;return k|0}function rw(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;d=i;i=i+80|0;e=d|0;f=d+40|0;g=b+12|0;if((c[g>>2]|0)==(a|0)){h=b+16|0;j=4}else{c[f+16>>2]=b;k=c[a+28>>2]|0;l=Hc[c[k>>2]&63](k,f,4)|0;if((l|0)!=0){h=l;j=4}}do{if((j|0)==4){l=a+32|0;f=h+32|0;ah(c[l>>2]|0,c[f>>2]|0)|0;k=c[l>>2]|0;m=Hc[c[k>>2]&63](k,0,128)|0;c[f>>2]=Yg(c[l>>2]|0)|0;if((m|0)==0){break}else{n=m}i=d;return n|0}}while(0);do{if((c[g>>2]|0)==(a|0)){o=b+16|0}else{c[e+16>>2]=b;h=c[a+28>>2]|0;j=Hc[c[h>>2]&63](h,e,4)|0;if((j|0)==0){n=0}else{o=j;break}i=d;return n|0}}while(0);e=a+32|0;a=o+28|0;ah(c[e>>2]|0,c[a>>2]|0)|0;o=c[e>>2]|0;b=Hc[c[o>>2]&63](o,0,128)|0;c[a>>2]=Yg(c[e>>2]|0)|0;n=b;i=d;return n|0}function sw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;e=i;i=i+160|0;f=e|0;g=e+40|0;h=e+80|0;j=e+120|0;k=c[b>>2]|0;if((k&3|0)!=2){l=f+16|0;m=f;f=a+32|0;n=a+28|0;o=b;p=k;while(1){k=c[((p&3|0)==2?o:o-32|0)+28>>2]|0;if((c[k+12>>2]|0)==(a|0)){q=k+16|0}else{c[l>>2]=k;k=c[n>>2]|0;r=Hc[c[k>>2]&63](k,m,4)|0;if((r|0)==0){s=0;t=26;break}else{q=r}}r=q+28|0;ah(c[f>>2]|0,c[r>>2]|0)|0;k=c[f>>2]|0;u=Hc[c[k>>2]&63](k,o|0,8)|0;k=u;c[r>>2]=Yg(c[f>>2]|0)|0;if((u|0)==0){s=0;t=26;break}if((c[u+28>>2]|0)!=(d|0)){s=k;t=26;break}o=k;p=c[u>>2]|0}if((t|0)==26){i=e;return s|0}}p=c[b+60>>2]|0;do{if((c[p+12>>2]|0)==(a|0)){v=p+16|0;t=7}else{c[j+16>>2]=p;o=a+28|0;f=c[o>>2]|0;q=Hc[c[f>>2]&63](f,j,4)|0;if((q|0)!=0){v=q;t=7;break}w=a+32|0;x=o}}while(0);do{if((t|0)==7){j=a+32|0;p=v+32|0;ah(c[j>>2]|0,c[p>>2]|0)|0;o=c[j>>2]|0;q=Hc[c[o>>2]&63](o,b|0,8)|0;c[p>>2]=Yg(c[j>>2]|0)|0;if((q|0)==0){w=j;x=a+28|0;break}else{s=q;i=e;return s|0}}}while(0);b=g+16|0;v=h+16|0;q=h;h=d+12|0;j=d+16|0;p=g;g=0;while(1){if((g|0)==0){if((c[h>>2]|0)==(a|0)){y=j}else{c[v>>2]=d;o=c[x>>2]|0;f=Hc[c[o>>2]&63](o,q,4)|0;if((f|0)==0){s=0;t=26;break}else{y=f}}f=y+28|0;ah(c[w>>2]|0,c[f>>2]|0)|0;o=c[w>>2]|0;m=Hc[c[o>>2]&63](o,0,128)|0;c[f>>2]=Yg(c[w>>2]|0)|0;z=m}else{m=c[((c[g>>2]&3|0)==2?g:g-32|0)+28>>2]|0;if((c[m+12>>2]|0)==(a|0)){A=m+16|0}else{c[b>>2]=m;m=c[x>>2]|0;f=Hc[c[m>>2]&63](m,p,4)|0;if((f|0)==0){s=0;t=26;break}else{A=f}}f=A+28|0;ah(c[w>>2]|0,c[f>>2]|0)|0;m=c[w>>2]|0;o=Hc[c[m>>2]&63](m,g|0,8)|0;c[f>>2]=Yg(c[w>>2]|0)|0;z=o}o=z;if((z|0)==0){s=0;t=26;break}if((c[z+28>>2]|0)==(d|0)){g=o}else{s=o;t=26;break}}if((t|0)==26){i=e;return s|0}return 0}function tw(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;zx(b,d,1)|0;zx(b,e,1)|0;g=sx(b,64)|0;h=g;i=Jw(b,2)|0;j=g+32|0;k=c[j>>2]|0;l=g;m=c[l>>2]|0;c[g+4>>2]=f;c[g+36>>2]=f;f=i<<4;c[l>>2]=m&12|f|2;c[j>>2]=k&12|f|3;c[g+60>>2]=d;c[g+28>>2]=e;yw(b,h);if((a[b+12|0]&64)==0){Jx(b,g);return h|0}Wx(g,c[43580]|0,16,0)|0;cw(b,h);Jx(b,g);return h|0}function uw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;h=i;i=i+368|0;j=h|0;k=h+40|0;l=h+72|0;m=h+112|0;n=h+144|0;o=h+184|0;p=h+216|0;q=h+256|0;r=h+288|0;s=h+328|0;t=h+360|0;do{if((Yw(b,2,f,t,0)|0)==0){if((f|0)!=0){break}if((g|0)==0){u=0;v=0;w=0;x=0;y=6;break}if((Pw(b)|0)!=0){u=0;v=0;w=0;x=0;y=6}}else{u=0;v=2;w=c[t>>2]|0;x=0;y=6}}while(0);do{if((y|0)==6){z=s|0;A=(d|0)==0|(e|0)==0;do{if(!A){B=s;c[B>>2]=v|x;c[B+4>>2]=u|w;c[s+28>>2]=d;if((c[e+12>>2]|0)==(b|0)){C=e+16|0}else{c[r+16>>2]=e;B=c[b+28>>2]|0;D=Hc[c[B>>2]&63](B,r,4)|0;if((D|0)==0){break}else{C=D}}D=b+36|0;B=C+20|0;ah(c[D>>2]|0,c[B>>2]|0)|0;E=c[D>>2]|0;F=Hc[c[E>>2]&63](E,z,4)|0;c[B>>2]=Yg(c[D>>2]|0)|0;if((F|0)==0){break}else{G=F}i=h;return G|0}}while(0);do{if((Ow(b)|0)!=0){z=q|0;if(A){break}F=q;c[F>>2]=v|x;c[F+4>>2]=u|w;c[q+28>>2]=e;if((c[d+12>>2]|0)==(b|0)){H=d+16|0}else{c[p+16>>2]=d;F=c[b+28>>2]|0;D=Hc[c[F>>2]&63](F,p,4)|0;if((D|0)==0){break}else{H=D}}D=b+36|0;F=H+20|0;ah(c[D>>2]|0,c[F>>2]|0)|0;B=c[D>>2]|0;E=Hc[c[B>>2]&63](B,z,4)|0;c[F>>2]=Yg(c[D>>2]|0)|0;if((E|0)==0){break}else{G=E}i=h;return G|0}}while(0);if((g|0)==0){G=0;i=h;return G|0}E=b|0;D=Ix(E)|0;F=o|0;do{if(A){y=23}else{z=o;c[z>>2]=v|x;c[z+4>>2]=u|w;c[o+28>>2]=d;if((c[e+12>>2]|0)==(D|0)){I=e+16|0}else{c[n+16>>2]=e;z=c[D+28>>2]|0;B=Hc[c[z>>2]&63](z,n,4)|0;if((B|0)==0){y=23;break}else{I=B}}B=D+36|0;z=I+20|0;ah(c[B>>2]|0,c[z>>2]|0)|0;J=c[B>>2]|0;K=Hc[c[J>>2]&63](J,F,4)|0;c[z>>2]=Yg(c[B>>2]|0)|0;if((K|0)==0){y=23}else{L=K}}}while(0);if((y|0)==23){if((Ow(b)|0)==0){break}F=Ix(E)|0;D=m|0;if(A){break}K=m;c[K>>2]=v|x;c[K+4>>2]=u|w;c[m+28>>2]=e;if((c[d+12>>2]|0)==(F|0)){M=d+16|0}else{c[l+16>>2]=d;K=c[F+28>>2]|0;B=Hc[c[K>>2]&63](K,l,4)|0;if((B|0)==0){break}else{M=B}}B=F+36|0;F=M+20|0;ah(c[B>>2]|0,c[F>>2]|0)|0;K=c[B>>2]|0;z=Hc[c[K>>2]&63](K,D,4)|0;c[F>>2]=Yg(c[B>>2]|0)|0;if((z|0)==0){break}else{L=z}}z=L;yw(b,z);G=z;i=h;return G|0}}while(0);if((g|0)==0){G=0;i=h;return G|0}do{if((Pw(b)|0)!=0){if((a[b+12|0]&4)!=0&(d|0)==(e|0)){G=0;i=h;return G|0}g=k|0;if((d|0)==0|(e|0)==0){break}L=k;c[L>>2]=0;c[L+4>>2]=0;c[k+28>>2]=d;if((c[e+12>>2]|0)==(b|0)){N=e+16|0}else{c[j+16>>2]=e;L=c[b+28>>2]|0;M=Hc[c[L>>2]&63](L,j,4)|0;if((M|0)==0){break}else{N=M}}M=b+36|0;L=N+20|0;ah(c[M>>2]|0,c[L>>2]|0)|0;l=c[M>>2]|0;m=Hc[c[l>>2]&63](l,g,4)|0;c[L>>2]=Yg(c[M>>2]|0)|0;if((m|0)==0){break}else{G=0}i=h;return G|0}}while(0);if((Yw(b,2,f,t,1)|0)==0){G=0;i=h;return G|0}f=tw(b,d,e,c[t>>2]|0)|0;ax(b,2,f|0);G=f;i=h;return G|0}function vw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;d=i;i=i+80|0;e=d|0;f=d+40|0;g=(c[b>>2]&3|0)==3;h=g?b-32|0:b;j=g?b:b+32|0;b=c[j+28>>2]|0;g=c[h+28>>2]|0;if((c[b+12>>2]|0)==(a|0)){k=b+16|0}else{c[f+16>>2]=b;b=c[a+28>>2]|0;k=Hc[c[b>>2]&63](b,f,4)|0}f=a+32|0;b=c[f>>2]|0;l=k+32|0;ah(b,c[l>>2]|0)|0;m=h|0;Hc[c[b>>2]&63](b,m,2)|0;c[l>>2]=Yg(b)|0;b=a+36|0;l=c[b>>2]|0;h=k+24|0;ah(l,c[h>>2]|0)|0;Hc[c[l>>2]&63](l,m,2)|0;c[h>>2]=Yg(l)|0;if((c[g+12>>2]|0)==(a|0)){n=g+16|0}else{c[e+16>>2]=g;g=c[a+28>>2]|0;n=Hc[c[g>>2]&63](g,e,4)|0}e=c[f>>2]|0;f=n+28|0;ah(e,c[f>>2]|0)|0;g=j|0;Hc[c[e>>2]&63](e,g,2)|0;c[f>>2]=Yg(e)|0;e=c[b>>2]|0;b=n+20|0;ah(e,c[b>>2]|0)|0;Hc[c[e>>2]&63](e,g,2)|0;c[b>>2]=Yg(e)|0;i=d;return}
+
+
+
+function eh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Za=0,_a=0,$a=0,ab=0,bb=0;e=i;i=i+128|0;f=e|0;g=e+8|0;h=a+8|0;j=c[h>>2]|0;if((c[j>>2]&4096|0)==0){k=j}else{ah(a,0)|0;k=c[h>>2]|0}j=c[a+4>>2]|0;l=c[j>>2]|0;m=c[j+4>>2]|0;n=j+8|0;o=c[n>>2]|0;p=c[j+20>>2]|0;q=a+20|0;c[q>>2]=c[q>>2]&-32769;r=c[k+4>>2]|0;if((b|0)==0){if((r|0)==0){s=0;i=e;return s|0}if((d&448|0)==0){s=0;i=e;return s|0}if((d&64|0)==0){do{if((d&256|0)==0){t=r+4|0;u=c[t>>2]|0;if((u|0)==0){v=r;break}else{w=r;x=t;y=u}while(1){u=y|0;c[x>>2]=c[u>>2];c[u>>2]=w;u=y+4|0;t=c[u>>2]|0;if((t|0)==0){v=y;break}else{w=y;x=u;y=t}}}else{t=r|0;u=c[t>>2]|0;if((u|0)==0){v=r;break}else{z=r;A=t;B=u}while(1){u=B+4|0;c[A>>2]=c[u>>2];c[u>>2]=z;u=B|0;t=c[u>>2]|0;if((t|0)==0){v=B;break}else{z=B;A=u;B=t}}}}while(0);c[(c[h>>2]|0)+4>>2]=v;if((o|0)<0){s=c[v+8>>2]|0;i=e;return s|0}else{s=v+(-o|0)|0;i=e;return s|0}}v=j+16|0;if((c[v>>2]|0)==0){if((c[n>>2]|0)<0){C=9}else{D=k}}else{C=9}if((C|0)==9){k=a+12|0;B=-o|0;if((o|0)<0){A=r;while(1){z=A+4|0;y=c[z>>2]|0;if((y|0)!=0){x=y|0;c[z>>2]=c[x>>2];c[x>>2]=A;A=y;continue}y=c[A>>2]|0;x=c[v>>2]|0;if((x|0)!=0){Tc[x&127](a,c[A+8>>2]|0,j)}if((c[n>>2]|0)<0){Sc[c[k>>2]&127](a,A,0,j)|0}if((y|0)==0){break}else{A=y}}}else{A=r;while(1){y=A+4|0;x=c[y>>2]|0;if((x|0)!=0){z=x|0;c[y>>2]=c[z>>2];c[z>>2]=A;A=x;continue}x=c[A>>2]|0;z=c[v>>2]|0;if((z|0)!=0){Tc[z&127](a,A+B|0,j)}if((c[n>>2]|0)<0){Sc[c[k>>2]&127](a,A,0,j)|0}if((x|0)==0){break}else{A=x}}}D=c[h>>2]|0}c[D+16>>2]=0;c[(c[h>>2]|0)+4>>2]=0;s=0;i=e;return s|0}D=a+16|0;a:do{if((c[(c[D>>2]|0)+4>>2]|0)==8){if((d&4098|0)==0){C=51;break}A=(m|0)<0;k=b+l|0;if(A){E=c[k>>2]|0}else{E=k}k=a;B=Hc[c[k>>2]&63](a,b,4)|0;if((B|0)==0){C=51;break}v=(p|0)==0;x=(m|0)<1;z=B;while(1){B=z+l|0;if(A){F=c[B>>2]|0}else{F=B}do{if(v){if(x){G=Ya(E|0,F|0)|0;break}else{G=wF(E|0,F|0,m|0)|0;break}}else{G=Sc[p&127](a,E,F,j)|0}}while(0);if((G|0)!=0){C=51;break a}if((z|0)==(b|0)){break}B=Hc[c[k>>2]&63](a,z,8)|0;if((B|0)==0){C=51;break a}else{z=B}}z=c[(c[h>>2]|0)+4>>2]|0;c[f>>2]=c[z+4>>2];c[f+4>>2]=c[z>>2];H=z;I=f;C=202}else{C=51}}while(0);b:do{if((C|0)==51){do{if((d&2565|0)==0){if((d&32|0)!=0){G=b;if((o|0)<0){J=c[b+8>>2]|0}else{J=b+(-o|0)|0}F=J+l|0;if((m|0)<0){K=c[F>>2]|0}else{K=F}if((r|0)==0){L=f;M=f;N=G;O=J;C=222;break}else{P=J;Q=G;R=K;C=70;break}}if((r|0)==0){L=f;M=f;N=0;O=b;C=222;break}if((o|0)<0){S=c[r+8>>2]|0}else{S=r+(-o|0)|0}if((S|0)==(b|0)){T=b;U=r;V=0;W=f;X=f;C=151;break}G=b+l|0;if((m|0)>=0){P=b;Q=0;R=G;C=70;break}P=b;Q=0;R=c[G>>2]|0;C=70}else{do{if((d&512|0)==0){G=b+l|0;if((m|0)>=0){Y=G;break}Y=c[G>>2]|0}else{Y=b}}while(0);if((r|0)==0){L=f;M=f;N=0;O=b;C=222}else{P=b;Q=0;R=Y;C=70}}}while(0);c:do{if((C|0)==70){do{if((c[(c[D>>2]|0)+4>>2]|0)==4){G=c[(c[h>>2]|0)+24>>2]|0;if((G|0)==0){Z=r;_=f;$=f;break}if((d&516|0)==0){Z=r;_=f;$=f;break}F=(G|0)>0;if(!F){Z=r;_=f;$=f;break}E=(o|0)<0;z=(m|0)<0;k=(p|0)==0;x=(m|0)<1;v=-o|0;A=r;B=0;while(1){if(E){aa=c[A+8>>2]|0}else{aa=A+v|0}y=aa+l|0;if(z){ba=c[y>>2]|0}else{ba=y}do{if(k){if(x){ca=Ya(R|0,ba|0)|0;break}else{ca=wF(R|0,ba|0,m|0)|0;break}}else{ca=Sc[p&127](a,R,ba,j)|0}}while(0);if((ca|0)==0){C=89;break}c[g+(B<<2)>>2]=ca;if((ca|0)<0){da=A+4|0}else{da=A|0}y=c[da>>2]|0;w=B+1|0;if((y|0)==0){s=0;C=246;break}if((w|0)<(G|0)){A=y;B=w}else{C=77;break}}if((C|0)==77){if(F){ea=f;fa=f;ga=0;ha=r}else{Z=r;_=f;$=f;break}while(1){do{if((c[g+(ga<<2)>>2]|0)<0){B=ha+4|0;x=c[B>>2]|0;if((c[g+((ga|1)<<2)>>2]|0)<0){k=x|0;c[B>>2]=c[k>>2];c[k>>2]=ha;c[fa+4>>2]=x;ia=x+4|0;ja=x;ka=ea;break}else{c[ea>>2]=x;c[fa+4>>2]=ha;ia=x|0;ja=ha;ka=x;break}}else{x=ha|0;k=c[x>>2]|0;if((c[g+((ga|1)<<2)>>2]|0)>0){B=k+4|0;c[x>>2]=c[B>>2];c[B>>2]=ha;c[ea>>2]=k;ia=k|0;ja=fa;ka=k;break}else{c[fa+4>>2]=k;c[ea>>2]=ha;ia=k+4|0;ja=k;ka=ha;break}}}while(0);k=c[ia>>2]|0;B=ga+2|0;if((B|0)<(G|0)){ea=ka;fa=ja;ga=B;ha=k}else{Z=k;_=ja;$=ka;break}}}else if((C|0)==89){if(E){s=c[A+8>>2]|0;i=e;return s|0}else{s=A+v|0;i=e;return s|0}}else if((C|0)==246){i=e;return s|0}}else{Z=r;_=f;$=f}}while(0);G=(o|0)<0;F=(m|0)<0;k=(p|0)!=0;B=(m|0)<1;x=-o|0;z=Z;w=_;y=$;d:while(1){la=z;ma=w;while(1){if(G){na=c[la+8>>2]|0}else{na=la+x|0}t=na+l|0;if(F){oa=c[t>>2]|0}else{oa=t}do{if(k){pa=Sc[p&127](a,R,oa,j)|0}else{if(B){pa=Ya(R|0,oa|0)|0;break}else{pa=wF(R|0,oa|0,m|0)|0;break}}}while(0);if((pa|0)==0){T=P;U=la;V=Q;W=ma;X=y;C=151;break c}if((pa|0)>=0){break}t=la+4|0;qa=c[t>>2]|0;if((qa|0)==0){C=132;break d}if(G){ra=c[qa+8>>2]|0}else{ra=qa+x|0}u=ra+l|0;if(F){sa=c[u>>2]|0}else{sa=u}do{if(k){ta=Sc[p&127](a,R,sa,j)|0}else{if(B){ta=Ya(R|0,sa|0)|0;break}else{ta=wF(R|0,sa|0,m|0)|0;break}}}while(0);if((ta|0)>=0){C=129;break}u=qa|0;c[t>>2]=c[u>>2];c[u>>2]=la;c[ma+4>>2]=qa;u=c[qa+4>>2]|0;if((u|0)==0){L=y;M=qa;N=Q;O=P;C=222;break c}else{la=u;ma=qa}}if((C|0)==129){C=0;if((ta|0)==0){C=130;break}c[y>>2]=qa;c[ma+4>>2]=la;v=c[qa>>2]|0;if((v|0)==0){L=qa;M=la;N=Q;O=P;C=222;break c}else{z=v;w=la;y=qa;continue}}v=la|0;ua=c[v>>2]|0;if((ua|0)==0){C=150;break}if(G){va=c[ua+8>>2]|0}else{va=ua+x|0}A=va+l|0;if(F){wa=c[A>>2]|0}else{wa=A}do{if(k){xa=Sc[p&127](a,R,wa,j)|0}else{if(B){xa=Ya(R|0,wa|0)|0;break}else{xa=wF(R|0,wa|0,m|0)|0;break}}}while(0);if((xa|0)>0){A=ua+4|0;c[v>>2]=c[A>>2];c[A>>2]=la;c[y>>2]=ua;A=c[ua>>2]|0;if((A|0)==0){L=ua;M=ma;N=Q;O=P;C=222;break c}else{z=A;w=ma;y=ua;continue}}if((xa|0)==0){C=148;break}c[ma+4>>2]=ua;c[y>>2]=la;A=c[ua+4>>2]|0;if((A|0)==0){L=la;M=ua;N=Q;O=P;C=222;break c}else{z=A;w=ua;y=la}}if((C|0)==130){c[ma+4>>2]=la;T=P;U=qa;V=Q;W=la;X=y;C=151;break}else if((C|0)==132){c[ma+4>>2]=la;L=y;M=la;N=Q;O=P;C=222;break}else if((C|0)==148){c[y>>2]=la;T=P;U=ua;V=Q;W=ma;X=la;C=151;break}else if((C|0)==150){c[y>>2]=la;L=la;M=ma;N=Q;O=P;C=222;break}}}while(0);do{if((C|0)==151){if((U|0)==0){L=X;M=W;N=V;O=T;C=222;break}c[q>>2]=c[q>>2]|32768;w=U+4|0;c[X>>2]=c[w>>2];z=U|0;c[W+4>>2]=c[z>>2];if((d&516|0)!=0){ya=U;break}if((d&8|0)!=0){B=f|0;c[w>>2]=c[B>>2];c[z>>2]=0;c[B>>2]=U;za=W;Aa=T;C=189;break}if((d&16|0)!=0){B=f+4|0;c[z>>2]=c[B>>2];c[w>>2]=0;c[B>>2]=U;Ba=W;Ca=T;C=196;break}if((d&4098|0)!=0){H=U;I=W;C=202;break b}if((d&2049|0)!=0){if((c[(c[D>>2]|0)+4>>2]&4|0)!=0){ya=U;break}c[w>>2]=0;w=f+4|0;c[z>>2]=c[w>>2];c[w>>2]=U;Da=W;Ea=U;Fa=T;C=229;break}if((d&32|0)==0){s=0;i=e;return s|0}if((c[(c[D>>2]|0)+4>>2]&4|0)==0){c[V+4>>2]=0;w=f+4|0;c[V>>2]=c[w>>2];c[w>>2]=V;w=(c[h>>2]|0)+16|0;c[w>>2]=(c[w>>2]|0)+1;ya=U;break}w=c[j+16>>2]|0;if((w|0)!=0){Tc[w&127](a,T,j)}if((c[n>>2]|0)>=0){ya=U;break}Sc[c[a+12>>2]&127](a,V,0,j)|0;ya=U}}while(0);do{if((C|0)==222){c[M+4>>2]=0;c[L>>2]=0;if((d&8|0)!=0){za=M;Aa=O;C=189;break}if((d&16|0)!=0){Ba=M;Ca=O;C=196;break}if((d&516|0)!=0){Ga=O;Ha=M;break b}if((d&2049|0)!=0){Da=M;Ea=0;Fa=O;C=229;break}if((d&32|0)==0){Ga=0;Ha=M;break b}w=(c[h>>2]|0)+16|0;c[w>>2]=(c[w>>2]|0)+1;ya=N}}while(0);do{if((C|0)==189){w=f+4|0;z=c[w>>2]|0;if((z|0)==0){Ga=Aa;Ha=za;break b}B=z+4|0;k=c[B>>2]|0;if((k|0)==0){Ia=z;Ja=c[z>>2]|0}else{F=z;z=B;B=k;while(1){k=B|0;c[z>>2]=c[k>>2];c[k>>2]=F;k=B+4|0;x=c[k>>2]|0;if((x|0)==0){Ia=B;Ja=F;break}else{F=B;z=k;B=x}}}c[w>>2]=Ja;ya=Ia}else if((C|0)==196){B=f|0;z=c[B>>2]|0;if((z|0)==0){Ga=Ca;Ha=Ba;break b}F=z|0;y=c[F>>2]|0;if((y|0)==0){Ka=z;La=c[z+4>>2]|0}else{x=z;z=F;F=y;while(1){y=F+4|0;c[z>>2]=c[y>>2];c[y>>2]=x;y=F|0;k=c[y>>2]|0;if((k|0)==0){Ka=F;La=x;break}else{x=F;z=y;F=k}}}c[B>>2]=La;ya=Ka}else if((C|0)==229){F=j+12|0;z=c[F>>2]|0;do{if((z|0)==0){Ma=Fa}else{if((d&1|0)==0){Ma=Fa;break}Ma=Hc[z&63](a,Fa,j)|0}}while(0);do{if((Ma|0)==0){Na=Ea}else{if((o|0)>-1){Na=Ma+o|0;break}z=Sc[c[a+12>>2]&127](a,0,12,j)|0;B=z;if((z|0)!=0){c[z+8>>2]=Ma;Na=B;break}if((c[F>>2]|0)==0){Na=B;break}z=c[j+16>>2]|0;if((z|0)==0){Na=B;break}if((d&1|0)==0){Na=B;break}Tc[z&127](a,Ma,j);Na=B}}while(0);if((Na|0)==0){Ga=Ma;Ha=Da;break b}F=(c[h>>2]|0)+16|0;B=c[F>>2]|0;if((B|0)<=-1){ya=Na;break}c[F>>2]=B+1;ya=Na}}while(0);B=c[f>>2]|0;c[ya+4>>2]=B;c[ya>>2]=c[f+4>>2];e:do{if((c[(c[D>>2]|0)+4>>2]&8|0)==0){Oa=ya}else{if((d&516|0)==0){Oa=ya;break}F=(o|0)<0;if(F){Pa=c[ya+8>>2]|0}else{Pa=ya+(-o|0)|0}z=(m|0)<0;x=Pa+l|0;if(z){Qa=c[x>>2]|0}else{Qa=x}x=ya+4|0;if((B|0)==0){Oa=ya;break}w=(p|0)==0;k=(m|0)<1;if(F){F=ya;y=x;G=B;while(1){A=G|0;E=c[A>>2]|0;if((E|0)==0){Ra=G;Sa=A}else{u=G;Ta=A;A=E;while(1){E=A+4|0;c[Ta>>2]=c[E>>2];c[E>>2]=u;E=A|0;Ua=c[E>>2]|0;if((Ua|0)==0){Ra=A;Sa=E;break}else{u=A;Ta=E;A=Ua}}}A=y|0;c[A>>2]=Ra;Ta=(c[Ra+8>>2]|0)+l|0;if(z){Va=c[Ta>>2]|0}else{Va=Ta}do{if(w){if(k){Wa=Ya(Qa|0,Va|0)|0;break}else{Wa=wF(Qa|0,Va|0,m|0)|0;break}}else{Wa=Sc[p&127](a,Qa,Va,j)|0}}while(0);if((Wa|0)!=0){Oa=F;break e}c[A>>2]=c[Sa>>2];c[Sa>>2]=F;Ta=Ra+4|0;u=c[Ta>>2]|0;if((u|0)==0){Oa=Ra;break}else{F=Ra;y=Ta;G=u}}}else{G=ya;y=x;F=B;while(1){u=F|0;Ta=c[u>>2]|0;if((Ta|0)==0){Xa=F;Za=u}else{v=F;Ua=u;u=Ta;while(1){Ta=u+4|0;c[Ua>>2]=c[Ta>>2];c[Ta>>2]=v;Ta=u|0;E=c[Ta>>2]|0;if((E|0)==0){Xa=u;Za=Ta;break}else{v=u;Ua=Ta;u=E}}}u=y|0;c[u>>2]=Xa;Ua=Xa+(l-o)|0;if(z){_a=c[Ua>>2]|0}else{_a=Ua}do{if(w){if(k){$a=Ya(Qa|0,_a|0)|0;break}else{$a=wF(Qa|0,_a|0,m|0)|0;break}}else{$a=Sc[p&127](a,Qa,_a,j)|0}}while(0);if(($a|0)!=0){Oa=G;break e}c[u>>2]=c[Za>>2];c[Za>>2]=G;Ua=Xa+4|0;v=c[Ua>>2]|0;if((v|0)==0){Oa=Xa;break}else{G=Xa;y=Ua;F=v}}}}}while(0);c[(c[h>>2]|0)+4>>2]=Oa;if((o|0)<0){s=c[Oa+8>>2]|0;i=e;return s|0}else{s=Oa+(-o|0)|0;i=e;return s|0}}}while(0);do{if((C|0)==202){if((o|0)<0){ab=c[H+8>>2]|0}else{ab=H+(-o|0)|0}Oa=c[j+16>>2]|0;do{if((Oa|0)!=0){if((d&2|0)==0){break}Tc[Oa&127](a,ab,j)}}while(0);if((c[n>>2]|0)<0){Sc[c[a+12>>2]&127](a,H,0,j)|0}Oa=(c[h>>2]|0)+16|0;Xa=c[Oa>>2]|0;c[Oa>>2]=Xa-1;if((Xa|0)>=1){Ga=ab;Ha=I;break}c[(c[h>>2]|0)+16>>2]=-1;Ga=ab;Ha=I}}while(0);I=Ha;do{bb=I+4|0;I=c[bb>>2]|0;}while((I|0)!=0);c[bb>>2]=c[f>>2];c[(c[h>>2]|0)+4>>2]=c[f+4>>2];s=(d&2|0)!=0?Ga:0;i=e;return s|0}function fh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((c[c[a+8>>2]>>2]&4096|0)!=0){ah(a,0)|0}d=(b|0)!=0;a:do{if(d){if((c[c[b+8>>2]>>2]&4096|0)!=0){ah(b,0)|0}if((c[b+16>>2]|0)!=(c[a+16>>2]|0)){e=0;return e|0}if((b|0)==0){break}else{f=b}while(1){if((f|0)==(a|0)){e=0;break}f=c[f+28>>2]|0;if((f|0)==0){break a}}return e|0}}while(0);f=a+28|0;g=c[f>>2]|0;if((g|0)!=0){h=g+24|0;c[h>>2]=(c[h>>2]|0)-1}c[a+32>>2]=0;c[f>>2]=0;if(d){c[f>>2]=b;c[a>>2]=62;f=b+24|0;c[f>>2]=(c[f>>2]|0)+1;e=b;return e|0}else{c[a>>2]=c[c[a+16>>2]>>2];e=g;return e|0}return 0}function gh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;if((d&99|0)!=0){e=Hc[c[c[a+16>>2]>>2]&63](a,b,d)|0;return e|0}do{if((d&516|0)==0){f=c[a+16>>2]|0;g=c[f+4>>2]|0;if((d&384|0)!=0){if((g&12|0)==0){break}}if((g&12|0)==0){if((d&24|0)==0){e=0;return e|0}g=a+32|0;h=c[g>>2]|0;if((h|0)==0){i=47}else{j=c[(c[h+4>>2]|0)+8>>2]|0;k=c[(c[h+8>>2]|0)+4>>2]|0;if((j|0)<0){l=c[k+8>>2]|0}else{l=k+(-j|0)|0}if((l|0)==(b|0)){m=b;n=h}else{i=47}}a:do{if((i|0)==47){b:do{if((a|0)!=0){h=a;j=f;while(1){o=Hc[c[j>>2]&63](h,b,4)|0;if((o|0)!=0){break}k=c[h+28>>2]|0;if((k|0)==0){break b}h=k;j=c[k+16>>2]|0}c[g>>2]=h;m=o;n=h;break a}}while(0);c[g>>2]=0;e=0;return e|0}}while(0);j=(d&8|0)==0;k=Hc[c[c[n+16>>2]>>2]&63](n,m,d)|0;p=n;c:while(1){if((k|0)!=0){q=p+16|0;if((p|0)==(a|0)){e=k;i=64;break}else{r=k}do{s=a;while(1){if((Hc[c[c[s+16>>2]>>2]&63](s,r,4)|0)!=0){break}t=c[s+28>>2]|0;if((t|0)==(p|0)){e=r;i=64;break c}else{s=t}}r=Hc[c[c[q>>2]>>2]&63](p,r,d)|0;}while((r|0)!=0)}q=c[p+28>>2]|0;c[g>>2]=q;if((q|0)==0){e=0;i=64;break}s=c[c[q+16>>2]>>2]|0;if(j){k=Hc[s&63](q,0,256)|0;p=q;continue}else{k=Hc[s&63](q,0,128)|0;p=q;continue}}if((i|0)==64){return e|0}}if((d&408|0)==0){e=0;return e|0}d:do{if((a|0)==0){u=0;v=0}else{p=(d&272|0)!=0;if((d&136|0)==0){k=0;j=0;g=0;q=a;s=f;while(1){h=Hc[c[s>>2]&63](q,b,d)|0;do{if((h|0)==0){w=g;x=j;y=k}else{t=c[q+4>>2]|0;z=c[t+4>>2]|0;A=c[t+20>>2]|0;B=h+(c[t>>2]|0)|0;if((z|0)<0){C=c[B>>2]|0}else{C=B}if((k|0)!=0){do{if((A|0)==0){if((z|0)<1){D=Ya(C|0,j|0)|0;break}else{D=wF(C|0,j|0,z|0)|0;break}}else{D=Sc[A&127](q,C,j,t)|0}}while(0);if(!(p&(D|0)>0)){w=g;x=j;y=k;break}}w=q;x=C;y=h}}while(0);h=c[q+28>>2]|0;if((h|0)==0){u=y;v=w;break d}k=y;j=x;g=w;q=h;s=c[h+16>>2]|0}}else{s=0;q=0;g=0;j=a;k=f;while(1){h=Hc[c[k>>2]&63](j,b,d)|0;do{if((h|0)==0){E=g;F=q;G=s}else{t=c[j+4>>2]|0;A=c[t+4>>2]|0;z=c[t+20>>2]|0;B=h+(c[t>>2]|0)|0;if((A|0)<0){H=c[B>>2]|0}else{H=B}if((s|0)!=0){do{if((z|0)==0){if((A|0)<1){I=Ya(H|0,q|0)|0;break}else{I=wF(H|0,q|0,A|0)|0;break}}else{I=Sc[z&127](j,H,q,t)|0}}while(0);if(!((I|0)<0|p&(I|0)>0)){E=g;F=q;G=s;break}}E=j;F=H;G=h}}while(0);h=c[j+28>>2]|0;if((h|0)==0){u=G;v=E;break d}s=G;q=F;g=E;j=h;k=c[h+16>>2]|0}}}}while(0);c[a+32>>2]=v;e=u;return e|0}}while(0);e:do{if((a|0)==0){J=0;K=0}else{u=a;while(1){v=Hc[c[c[u+16>>2]>>2]&63](u,b,d)|0;if((v|0)!=0){J=v;K=u;break e}v=c[u+28>>2]|0;if((v|0)==0){J=0;K=0;break}else{u=v}}}}while(0);c[a+32>>2]=K;e=J;return e|0}function hh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=a|0;f=a+32|0;g=Hc[c[e>>2]&63](a,0,128)|0;while(1){if((g|0)==0){h=0;i=4;break}j=c[f>>2]|0;k=Hc[c[e>>2]&63](a,g,8)|0;l=Hc[b&63]((j|0)==0?a:j,g,d)|0;if((l|0)<0){h=l;i=4;break}else{g=k}}if((i|0)==4){return h|0}return 0}function ih(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=i;i=i+16|0;g=f|0;h=f+8|0;c[d>>2]=0;j=b|0;c[e>>2]=(Nw(Hx(j)|0)|0)!=0;k=c[53804]|0;a:do{if((k|0)!=0){l=fw(j,k)|0;m=a[l]|0;if(m<<24>>24==0){break}else{n=173856;o=134728}while(1){if(m<<24>>24==(a[o]|0)){if((Ya(l|0,o|0)|0)==0){break}}p=n+12|0;q=c[p>>2]|0;if((q|0)==0){break a}else{n=p;o=q}}c[d>>2]=c[n+4>>2];c[e>>2]=c[n+8>>2]}}while(0);n=c[53822]|0;do{if((n|0)!=0){if((c[e>>2]|0)!=1){break}o=fw(j,n)|0;if((a[o]|0)==0){break}jh(o,e)}}while(0);n=c[53818]|0;do{if((n|0)!=0){if((c[d>>2]|0)!=1){break}o=fw(j,n)|0;if((a[o]|0)==0){break}jh(o,d)}}while(0);if((a[(c[b+8>>2]|0)+153|0]|0)==0){i=f;return}n=b;j=b-32|0;o=Hx(c[((c[n>>2]&3|0)==2?b:j)+28>>2]|0)|0;k=c[n>>2]&3;ih(uw(o,c[((k|0)==2?b:j)+28>>2]|0,c[((k|0)==3?b:b+32|0)+28>>2]|0,0,0)|0,g,h);c[e>>2]=c[g>>2]|c[e>>2];c[d>>2]=c[h>>2]|c[d>>2];i=f;return}function jh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;e=i;c[d>>2]=0;if((a[b]|0)==0){i=e;return}else{f=b;g=0;h=0}a:while(1){b=c[43422]|0;j=c[43452]|0;k=(j|0)==0;l=c[43426]|0;m=(l|0)==0;do{if((b|0)==0){if(k){n=0;o=f}else{p=f;q=0;while(1){r=173808;s=j;while(1){t=xF(s|0)|0;u=r+8|0;if((Za(p|0,s|0,t|0)|0)==0){v=7;break}w=c[u>>2]|0;if((w|0)==0){x=p;y=q;break}else{r=u;s=w}}if((v|0)==7){v=0;x=p+t|0;y=c[r+4>>2]|q}if((p|0)==(x|0)){n=y;o=p;break}else{p=x;q=y}}}b:do{if(m){z=o;A=n}else{q=173704;p=l;while(1){B=xF(p|0)|0;s=q+8|0;if((Za(o|0,p|0,B|0)|0)==0){break}w=c[s>>2]|0;if((w|0)==0){z=o;A=n;break b}else{q=s;p=w}}z=o+B|0;A=c[q+4>>2]|n}}while(0);p=(A|0)!=0&(A&15|0)==0&1|A;if((p|0)==0){v=30;break a}else if((p|0)!=8){C=p;D=z;v=33;break}if((g|0)==3){E=3;F=z;G=h;break}else if((g|0)!=0){C=8;D=z;v=33;break}if((a[z]|0)==0){v=35;break a}else{C=8;D=z;v=33}}else{p=173688;r=b;while(1){H=xF(r|0)|0;w=p+8|0;if((Za(f|0,r|0,H|0)|0)==0){v=18;break}s=c[w>>2]|0;if((s|0)==0){I=f;J=0;v=19;break}else{p=w;r=s}}if((v|0)==18){v=0;r=c[p+4>>2]|0;s=f+H|0;if((H|0)==0){I=s;J=r;v=19}else{K=s;L=r}}c:do{if((v|0)==19){v=0;if(k){M=J;N=I}else{r=I;s=J;while(1){w=173808;u=j;while(1){O=xF(u|0)|0;P=w+8|0;if((Za(r|0,u|0,O|0)|0)==0){v=23;break}Q=c[P>>2]|0;if((Q|0)==0){R=r;S=s;break}else{w=P;u=Q}}if((v|0)==23){v=0;R=r+O|0;S=c[w+4>>2]|s}if((r|0)==(R|0)){M=S;N=r;break}else{r=R;s=S}}}if(m){K=N;L=M;break}else{T=173704;U=l}while(1){V=xF(U|0)|0;s=T+8|0;if((Za(N|0,U|0,V|0)|0)==0){break}r=c[s>>2]|0;if((r|0)==0){K=N;L=M;break c}else{T=s;U=r}}K=N+V|0;L=c[T+4>>2]|M}}while(0);p=(L|0)!=0&(L&15|0)==0&1|L;if((p|0)==0){v=30;break a}else if((p|0)!=8){C=p;D=K;v=33;break}if((g|0)==3){E=3;F=K;G=h;break}else if((g|0)!=0){C=8;D=K;v=33;break}if((a[K]|0)==0){v=35;break a}else{C=8;D=K;v=33}}}while(0);if((v|0)==33){v=0;l=h|C<<(g<<3);c[d>>2]=l;E=g+1|0;F=D;G=l}if((a[F]|0)!=0&(E|0)<4){f=F;g=E;h=G}else{v=35;break}}if((v|0)==30){Fv(0,105792,(G=i,i=i+8|0,c[G>>2]=f,G)|0)|0;i=G;i=e;return}else if((v|0)==35){i=e;return}}function kh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0.0,p=0.0;d=b&15;e=173472;while(1){if((d|0)==(c[e>>2]|0)){f=4;break}if((c[e+40>>2]|0)==0){g=0.0;break}else{e=e+24|0}}if((f|0)==4){g=+h[e+8>>3]+0.0}e=b>>>8&15;d=173472;while(1){if((e|0)==(c[d>>2]|0)){f=8;break}if((c[d+40>>2]|0)==0){i=g;break}else{d=d+24|0}}if((f|0)==8){i=g+ +h[d+8>>3]}d=b>>>16&15;e=173472;while(1){if((d|0)==(c[e>>2]|0)){f=12;break}if((c[e+40>>2]|0)==0){j=i;break}else{e=e+24|0}}if((f|0)==12){j=i+ +h[e+8>>3]}e=b>>>24&15;b=173472;while(1){if((e|0)==(c[b>>2]|0)){break}if((c[b+40>>2]|0)==0){k=j;f=17;break}else{b=b+24|0}}if((f|0)==17){l=k*10.0;m=a|0;n=c[53820]|0;o=+Fm(m,n,1.0,0.0);p=l*o;return+p}k=j+ +h[b+8>>3];l=k*10.0;m=a|0;n=c[53820]|0;o=+Fm(m,n,1.0,0.0);p=l*o;return+p}function lh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0;j=i;i=i+80|0;k=j|0;l=j+8|0;m=j+72|0;n=+kh(a,g);o=n*n;h[m>>3]=o;c[f+12>>2]=g;g=e+3|0;a=b+(g<<4)|0;p=f+32|0;f=a;c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];do{if((e|0)>(d|0)){n=+h[b+(e<<4)>>3]- +h[a>>3];q=+h[b+(e<<4)+8>>3]- +h[b+(g<<4)+8>>3];if(n*n+q*q>=o){r=e;break}r=e-3|0}else{r=e}}while(0);e=l+48|0;g=b+(r<<4)|0;c[e>>2]=c[g>>2];c[e+4>>2]=c[g+4>>2];c[e+8>>2]=c[g+8>>2];c[e+12>>2]=c[g+12>>2];a=l+32|0;d=b+(r+1<<4)|0;c[a>>2]=c[d>>2];c[a+4>>2]=c[d+4>>2];c[a+8>>2]=c[d+8>>2];c[a+12>>2]=c[d+12>>2];f=l+16|0;s=b+(r+2<<4)|0;c[f>>2]=c[s>>2];c[f+4>>2]=c[s+4>>2];c[f+8>>2]=c[s+8>>2];c[f+12>>2]=c[s+12>>2];t=l|0;u=l;c[u>>2]=c[p>>2];c[u+4>>2]=c[p+4>>2];c[u+8>>2]=c[p+8>>2];c[u+12>>2]=c[p+12>>2];c[k>>2]=t;c[k+4>>2]=m;_l(k,198,t,1);c[g>>2]=c[e>>2];c[g+4>>2]=c[e+4>>2];c[g+8>>2]=c[e+8>>2];c[g+12>>2]=c[e+12>>2];c[d>>2]=c[a>>2];c[d+4>>2]=c[a+4>>2];c[d+8>>2]=c[a+8>>2];c[d+12>>2]=c[a+12>>2];c[s>>2]=c[f>>2];c[s+4>>2]=c[f+4>>2];c[s+8>>2]=c[f+8>>2];c[s+12>>2]=c[f+12>>2];f=b+(r+3<<4)|0;c[f>>2]=c[u>>2];c[f+4>>2]=c[u+4>>2];c[f+8>>2]=c[u+8>>2];c[f+12>>2]=c[u+12>>2];i=j;return r|0}function mh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0;d=i;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=c[a>>2]|0;f=+h[b>>3]- +h[e>>3];g=+h[b+8>>3]- +h[e+8>>3];i=d;return f*f+g*g<=+h[c[a+4>>2]>>3]|0}function nh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0;j=i;i=i+80|0;k=j|0;l=j+8|0;m=j+72|0;n=+kh(a,g);o=n*n;h[m>>3]=o;c[f+8>>2]=g;g=b+(d<<4)|0;a=f+16|0;f=g;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];do{if((e|0)>(d|0)){f=d+3|0;n=+h[g>>3]- +h[b+(f<<4)>>3];p=+h[b+(d<<4)+8>>3]- +h[b+(f<<4)+8>>3];if(n*n+p*p>=o){q=d;break}q=f}else{q=d}}while(0);d=l;g=b+(q+3<<4)|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];e=l+16|0;f=b+(q+2<<4)|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];r=l+32|0;s=b+(q+1<<4)|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];t=l+48|0;u=t;c[u>>2]=c[a>>2];c[u+4>>2]=c[a+4>>2];c[u+8>>2]=c[a+8>>2];c[u+12>>2]=c[a+12>>2];c[k>>2]=t;c[k+4>>2]=m;_l(k,198,l|0,0);l=b+(q<<4)|0;c[l>>2]=c[u>>2];c[l+4>>2]=c[u+4>>2];c[l+8>>2]=c[u+8>>2];c[l+12>>2]=c[u+12>>2];c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];c[g>>2]=c[d>>2];c[g+4>>2]=c[d+4>>2];c[g+8>>2]=c[d+8>>2];c[g+12>>2]=c[d+12>>2];i=j;return q|0}function oh(a,b,d,e,f,g,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0.0,H=0.0,I=0.0,J=0.0;j=(g|0)!=0;k=(i|0)==0;if(j&(k^1)&(e|0)==(d|0)){l=b+(e<<4)|0;m=+h[l>>3];n=+h[b+(e<<4)+8>>3];o=e+3|0;p=b+(o<<4)|0;q=p|0;r=+h[q>>3];s=b+(o<<4)+8|0;t=+h[s>>3];u=+kh(a,g);v=+kh(a,i);w=m-r;x=n-t;y=+T(w*w+x*x);if(u+v<y){z=v;A=u}else{u=y/3.0;z=u;A=u}do{if(n==t){if(m<r){B=r-z;C=n;D=m+A;E=n;break}else{B=r+z;C=n;D=m-A;E=n;break}}else{if(n<t){B=m;C=t-z;D=m;E=n+A;break}else{B=m;C=t+z;D=m;E=n-A;break}}}while(0);o=e+1|0;F=b+(o<<4)|0;h[F>>3]=D;h[b+(o<<4)+8>>3]=E;o=l;l=F;c[o>>2]=c[l>>2];c[o+4>>2]=c[l+4>>2];c[o+8>>2]=c[l+8>>2];c[o+12>>2]=c[l+12>>2];h[q>>3]=B;h[s>>3]=C;s=b+(e+2<<4)|0;q=p;c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];c[s+12>>2]=c[q+12>>2];c[f+12>>2]=i;h[f+32>>3]=m;h[f+40>>3]=n;c[f+8>>2]=g;h[f+16>>3]=r;h[f+24>>3]=t;return}if(!k){t=+kh(a,i);r=+h[b+(e<<4)>>3];n=+h[b+(e<<4)+8>>3];k=e+3|0;q=b+(k<<4)|0;s=q|0;m=+h[s>>3];p=b+(k<<4)+8|0;C=+h[p>>3];B=r-m;E=n-C;D=+T(B*B+E*E)*.9;E=t<D?t:D;do{if(n==C){if(r<m){G=m-E;H=n;break}else{G=m+E;H=n;break}}else{if(n<C){G=r;H=C-E;break}else{G=r;H=C+E;break}}}while(0);k=e+1|0;h[b+(k<<4)>>3]=r;h[b+(k<<4)+8>>3]=n;h[s>>3]=G;h[p>>3]=H;p=b+(e+2<<4)|0;e=q;c[p>>2]=c[e>>2];c[p+4>>2]=c[e+4>>2];c[p+8>>2]=c[e+8>>2];c[p+12>>2]=c[e+12>>2];c[f+12>>2]=i;h[f+32>>3]=m;h[f+40>>3]=C}if(!j){return}C=+kh(a,g);a=b+(d<<4)|0;m=+h[a>>3];H=+h[b+(d<<4)+8>>3];j=d+3|0;G=+h[b+(j<<4)>>3];n=+h[b+(j<<4)+8>>3];r=m-G;E=H-n;D=+T(r*r+E*E)*.9;E=C<D?C:D;do{if(H==n){if(m<G){I=m+E;J=H;break}else{I=m-E;J=H;break}}else{if(H<n){I=m;J=H+E;break}else{I=m;J=H-E;break}}}while(0);j=d+1|0;i=b+(j<<4)|0;h[i>>3]=I;h[b+(j<<4)+8>>3]=J;j=a;a=i;c[j>>2]=c[a>>2];c[j+4>>2]=c[a+4>>2];c[j+8>>2]=c[a+8>>2];c[j+12>>2]=c[a+12>>2];a=d+2|0;h[b+(a<<4)>>3]=G;h[b+(a<<4)+8>>3]=n;c[f+8>>2]=g;h[f+16>>3]=m;h[f+24>>3]=H;return}function ph(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;var g=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0;f=i;g=b;b=i;i=i+16|0;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2];g=d;d=i;i=i+16|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];j=+h[b>>3];k=+h[d>>3]-j;l=+h[b+8>>3];m=+h[d+8>>3]-l;n=e*10.0/(+T(k*k+m*m)+1.0e-4);e=n*(k+(k>=0.0?1.0e-4:-1.0e-4));k=n*(m+(m>=0.0?1.0e-4:-1.0e-4));m=e*.5;n=k*.5;o=j-n;p=l-m;q=j+n;n=m+l;l=e+o;m=k+p;j=e+q;e=k+n;k=l>j?l:j;r=q>k?q:k;k=m>e?m:e;s=n>k?n:k;k=l<j?l:j;j=q<k?q:k;k=m<e?m:e;e=n<k?n:k;h[a>>3]=o<j?o:j;h[a+8>>3]=p<e?p:e;h[a+16>>3]=o>r?o:r;h[a+24>>3]=p>s?p:s;i=f;return}function qh(a,b,d,e,f,g,j){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;g=+g;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;k=i;i=i+48|0;l=d;d=i;i=i+16|0;c[d>>2]=c[l>>2];c[d+4>>2]=c[l+4>>2];c[d+8>>2]=c[l+8>>2];c[d+12>>2]=c[l+12>>2];l=e;e=i;i=i+16|0;c[e>>2]=c[l>>2];c[e+4>>2]=c[l+4>>2];c[e+8>>2]=c[l+8>>2];c[e+12>>2]=c[l+12>>2];l=k|0;m=k+16|0;n=(c[a+16>>2]|0)+12|0;o=c[n>>2]|0;c[n>>2]=b;pB(a,c[(c[a>>2]|0)+336>>2]|0);xB(a,g);b=d|0;p=e|0;q=+h[p>>3]- +h[b>>3];r=d+8|0;s=e+8|0;t=+h[s>>3]- +h[r>>3];u=10.0/(+T(q*q+t*t)+1.0e-4);v=u*(q+(q>=0.0?1.0e-4:-1.0e-4));h[p>>3]=v;q=u*(t+(t>=0.0?1.0e-4:-1.0e-4));h[s>>3]=q;s=m;p=l|0;e=l+8|0;w=m|0;x=m+8|0;y=k+32|0;z=d;d=0;while(1){A=j>>(d<<3);B=A&255;if((B|0)==0){C=8;break}t=+h[b>>3];u=+h[r>>3];h[p>>3]=v;h[e>>3]=q;h[w>>3]=t;h[x>>3]=u;D=A&15;A=173472;E=1;while(1){F=A+24|0;if((D|0)==(E|0)){C=6;break}G=c[F>>2]|0;if((G|0)==0){break}else{A=F;E=G}}if((C|0)==6){C=0;E=A+8|0;h[p>>3]=v*+h[E>>3]*f;h[e>>3]=q*+h[E>>3]*f;Rc[c[A+16>>2]&31](a,m,l,f,g,B);h[w>>3]=+h[w>>3]+ +h[p>>3];h[x>>3]=+h[x>>3]+ +h[e>>3]}c[y>>2]=c[s>>2];c[y+4>>2]=c[s+4>>2];c[y+8>>2]=c[s+8>>2];c[y+12>>2]=c[s+12>>2];c[z>>2]=c[y>>2];c[z+4>>2]=c[y+4>>2];c[z+8>>2]=c[y+8>>2];c[z+12>>2]=c[y+12>>2];E=d+1|0;if((E|0)<4){d=E}else{C=8;break}}if((C|0)==8){c[n>>2]=o;i=k;return}}function rh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0;j=i;i=i+80|0;k=b;b=i;i=i+16|0;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=d;d=i;i=i+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];k=j|0;if(f>4.0){l=f*.25*.35}else{l=.35}f=+h[d+8>>3];e=l*f;m=+h[d>>3];n=l*m;l=+h[b>>3];o=m+l;m=+h[b+8>>3];p=f+m;d=k+64|0;if((g&32|0)==0){h[k+64>>3]=o;h[k+72>>3]=p;q=k;c[q>>2]=c[d>>2];c[q+4>>2]=c[d+4>>2];c[q+8>>2]=c[d+8>>2];c[q+12>>2]=c[d+12>>2];h[k+16>>3]=e+o;h[k+24>>3]=p-n;q=k+32|0;r=b;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];h[k+48>>3]=o-e;h[k+56>>3]=n+p}else{r=b;c[d>>2]=c[r>>2];c[d+4>>2]=c[r+4>>2];c[d+8>>2]=c[r+8>>2];c[d+12>>2]=c[r+12>>2];d=k;c[d>>2]=c[r>>2];c[d+4>>2]=c[r+4>>2];c[d+8>>2]=c[r+8>>2];c[d+12>>2]=c[r+12>>2];h[k+16>>3]=e+l;h[k+24>>3]=m-n;h[k+32>>3]=o;h[k+40>>3]=p;h[k+48>>3]=l-e;h[k+56>>3]=n+m}if((g&64|0)!=0){rB(a,k|0,3,g>>>4&1^1);i=j;return}if((g&128|0)==0){rB(a,k+16|0,3,g>>>4&1^1);i=j;return}else{rB(a,k+32|0,3,g>>>4&1^1);i=j;return}}function sh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var j=0,k=0,l=0.0,m=0.0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0;j=i;i=i+144|0;k=b;b=i;i=i+16|0;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=d;d=i;i=i+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];k=j|0;l=e*4.0;do{if(l<f){if((g&32|0)==0){m=.45;break}m=f/l*.45}else{m=.45}}while(0);n=g&32;do{if(f>1.0){if((n|0)==0){o=0.0;p=0;break}o=(f+-1.0)*.05/e;p=n}else{o=0.0;p=n}}while(0);e=+h[d+8>>3];f=-0.0-e;l=m*f;q=+h[d>>3];r=m*q;m=o*f;f=o*q;o=+h[b>>3];s=q+o;t=+h[b+8>>3];u=e+t;v=o+q*.5;q=e*.5+t;d=k|0;n=k+128|0;if((p|0)==0){h[k+128>>3]=s;h[k+136>>3]=u;p=k;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];c[p+8>>2]=c[n+8>>2];c[p+12>>2]=c[n+12>>2];h[k+16>>3]=o-l;h[k+24>>3]=t-r;h[k+32>>3]=v-m;h[k+40>>3]=q-f;h[k+48>>3]=o;h[k+56>>3]=t;p=k+64|0;w=b;c[p>>2]=c[w>>2];c[p+4>>2]=c[w+4>>2];c[p+8>>2]=c[w+8>>2];c[p+12>>2]=c[w+12>>2];h[k+80>>3]=o;h[k+88>>3]=t;h[k+96>>3]=m+v;h[k+104>>3]=f+q;h[k+112>>3]=l+o;h[k+120>>3]=r+t}else{w=b;c[n>>2]=c[w>>2];c[n+4>>2]=c[w+4>>2];c[n+8>>2]=c[w+8>>2];c[n+12>>2]=c[w+12>>2];n=k;c[n>>2]=c[w>>2];c[n+4>>2]=c[w+4>>2];c[n+8>>2]=c[w+8>>2];c[n+12>>2]=c[w+12>>2];h[k+16>>3]=s-l;h[k+24>>3]=u-r;h[k+32>>3]=v-m;h[k+40>>3]=q-f;h[k+48>>3]=s-m;h[k+56>>3]=u-f;h[k+64>>3]=s;h[k+72>>3]=u;h[k+80>>3]=m+s;h[k+88>>3]=f+u;h[k+96>>3]=m+v;h[k+104>>3]=f+q;h[k+112>>3]=l+s;h[k+120>>3]=r+u}if((g&64|0)!=0){rB(a,d,6,1);i=j;return}if((g&128|0)==0){rB(a,d,9,1);i=j;return}else{rB(a,k+48|0,6,1);i=j;return}}function th(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;j=i;i=i+64|0;k=b;b=i;i=i+16|0;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=d;d=i;i=i+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];k=j|0;f=+h[d+8>>3];e=+h[d>>3];l=+h[b>>3];m=e+l;n=+h[b+8>>3];o=f+n;p=l+e*.2;q=f*.2+n;r=l+e*.6;l=f*.6+n;d=k|0;s=k|0;h[s>>3]=p-f;t=k+8|0;h[t>>3]=e+q;u=k+16|0;h[u>>3]=f+p;v=k+24|0;h[v>>3]=q-e;w=k+32|0;h[w>>3]=f+r;x=k+40|0;h[x>>3]=l-e;y=k+48|0;h[y>>3]=r-f;z=k+56|0;h[z>>3]=e+l;do{if((g&64|0)==0){if((g&128|0)==0){break}h[u>>3]=p;h[v>>3]=q;h[w>>3]=r;h[x>>3]=l}else{h[s>>3]=p;h[t>>3]=q;h[y>>3]=r;h[z>>3]=l}}while(0);rB(a,d,4,1);z=k;k=b;c[z>>2]=c[k>>2];c[z+4>>2]=c[k+4>>2];c[z+8>>2]=c[k+8>>2];c[z+12>>2]=c[k+12>>2];h[u>>3]=m;h[v>>3]=o;uB(a,d,2);i=j;return}function uh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;j=i;i=i+64|0;k=b;b=i;i=i+16|0;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=d;d=i;i=i+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];k=j|0;f=+h[d+8>>3];e=f*-.4;l=+h[d>>3];m=l*.4;n=+h[b>>3];o=n+l*.8;p=+h[b+8>>3];q=f*.8+p;r=l+n;l=f+p;d=k|0;s=k|0;h[s>>3]=e+n;t=k+8|0;h[t>>3]=m+p;u=k+16|0;h[u>>3]=n-e;v=k+24|0;h[v>>3]=p-m;w=k+32|0;h[w>>3]=o-e;x=k+40|0;h[x>>3]=q-m;y=k+48|0;h[y>>3]=e+o;z=k+56|0;h[z>>3]=m+q;do{if((g&64|0)==0){if((g&128|0)==0){break}A=u;B=b;c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2];h[w>>3]=o;h[x>>3]=q}else{B=k;A=b;c[B>>2]=c[A>>2];c[B+4>>2]=c[A+4>>2];c[B+8>>2]=c[A+8>>2];c[B+12>>2]=c[A+12>>2];h[y>>3]=o;h[z>>3]=q}}while(0);rB(a,d,4,g>>>4&1^1);h[s>>3]=o;h[t>>3]=q;h[k+16>>3]=r;h[v>>3]=l;uB(a,d,2);i=j;return}function vh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0;j=i;i=i+80|0;k=b;b=i;i=i+16|0;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=d;d=i;i=i+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];k=j|0;f=+h[d+8>>3];e=(-0.0-f)/3.0;l=+h[d>>3];m=l/3.0;n=+h[b>>3];o=l*.5+n;p=+h[b+8>>3];q=f*.5+p;d=k|0;h[k+64>>3]=l+n;h[k+72>>3]=f+p;r=k;s=k+64|0;c[r>>2]=c[s>>2];c[r+4>>2]=c[s+4>>2];c[r+8>>2]=c[s+8>>2];c[r+12>>2]=c[s+12>>2];h[k+16>>3]=e+o;h[k+24>>3]=m+q;s=k+32|0;r=s;t=b;c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];h[k+48>>3]=o-e;h[k+56>>3]=q-m;if((g&64|0)!=0){rB(a,s,3,g>>>4&1^1);i=j;return}s=g>>>4&1^1;if((g&128|0)==0){rB(a,d,4,s);i=j;return}else{rB(a,d,3,s);i=j;return}}function wh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var j=0,k=0,l=0.0,m=0.0;j=i;i=i+32|0;k=b;b=i;i=i+16|0;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=d;d=i;i=i+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];k=j|0;f=+h[d>>3];e=+h[d+8>>3];l=+T(f*f+e*e)*.5;m=f*.5+ +h[b>>3];h[k>>3]=m-l;f=+h[b+8>>3]+e*.5;h[k+8>>3]=f-l;h[k+16>>3]=l+m;h[k+24>>3]=l+f;qB(a,k|0,2,g>>>4&1^1);i=j;return}function xh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0.0;j=i;i=i+128|0;k=b;b=i;i=i+16|0;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=d;d=i;i=i+16|0;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];k=j|0;l=j+64|0;if(f>4.0){m=f*.5*.25}else{m=.5}f=+h[b>>3];e=+h[d>>3];n=+h[b+8>>3];o=+h[d+8>>3];p=m*o;q=m*e;d=l;r=b;c[d>>2]=c[r>>2];c[d+4>>2]=c[r+4>>2];c[d+8>>2]=c[r+8>>2];c[d+12>>2]=c[r+12>>2];h[l+16>>3]=f+e;h[l+24>>3]=n+o;r=k|0;h[k>>3]=q+(f-p);o=p+(q+n);h[k+8>>3]=o;h[k+48>>3]=q+(p+f);e=p+(n-q);h[k+56>>3]=e;n=p*-.95;m=q*4.0/3.0;h[k+16>>3]=q+(n+f)-m;s=p*4.0/3.0;h[k+24>>3]=o-s;h[k+32>>3]=q+(f-n)-m;h[k+40>>3]=e-s;uB(a,l|0,2);if((g&64|0)!=0){Qm(j+96|0,r,3,.5,0,r);tB(a,r,4,0,0,0);i=j;return}if((g&128|0)==0){tB(a,r,4,0,0,0);i=j;return}Qm(j+112|0,r,3,.5,r,0);tB(a,r,4,0,0,0);i=j;return}function yh(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=+f;g=g|0;var j=0,k=0;g=i;i=i+32|0;j=b;b=i;i=i+16|0;c[b>>2]=c[j>>2];c[b+4>>2]=c[j+4>>2];c[b+8>>2]=c[j+8>>2];c[b+12>>2]=c[j+12>>2];j=d;d=i;i=i+16|0;c[d>>2]=c[j>>2];c[d+4>>2]=c[j+4>>2];c[d+8>>2]=c[j+8>>2];c[d+12>>2]=c[j+12>>2];j=g|0;f=+h[b>>3]+ +h[d>>3];e=+h[b+8>>3]+ +h[d+8>>3];d=j;k=b;c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];h[j+16>>3]=f;h[j+24>>3]=e;uB(a,j|0,2);i=g;return}function zh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=xF(b|0)|0;do{if((d|0)<(c[45230]|0)){e=c[45228]|0}else{f=d+11|0;c[45230]=f;g=mk(c[45228]|0,f)|0;c[45228]=g;if((g|0)==0){h=0}else{e=g;break}return h|0}}while(0);d=a[b]|0;if(d<<24>>24==0){i=e}else{g=e;e=b;b=d;while(1){d=e+1|0;f=b&255;if((xb(f|0)|0)==0){j=b}else{j=(yF(f|0)|0)&255}f=g+1|0;a[g]=j;k=a[d]|0;if(k<<24>>24==0){i=f;break}else{g=f;e=d;b=k}}}a[i]=0;h=c[45228]|0;return h|0}function Ah(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;g=i;i=i+72|0;j=g|0;k=g+16|0;l=g+24|0;m=g+32|0;n=g+40|0;o=g+48|0;p=g+56|0;q=g+64|0;c[e+32>>2]=f;r=b;while(1){s=r+1|0;if((a[r]|0)==32){r=s}else{break}}c[q>>2]=255;b=a[r]|0;do{if(b<<24>>24==35){t=ac(r|0,127384,(u=i,i=i+32|0,c[u>>2]=n,c[u+8>>2]=o,c[u+16>>2]=p,c[u+24>>2]=q,u)|0)|0;i=u;if((t|0)<=2){v=a[r]|0;break}switch(f|0){case 0:{w=+((c[n>>2]|0)>>>0>>>0)/255.0;x=+((c[o>>2]|0)>>>0>>>0)/255.0;y=+((c[p>>2]|0)>>>0>>>0)/255.0;A=+((c[q>>2]|0)>>>0>>>0)/255.0;B=x<y?x:y;C=x>y?x:y;D=C<w?w:C;do{if(D>0.0){C=D-(B>w?w:B);E=C/D;if(E<=0.0){F=0.0;G=E;break}H=(D-w)/C;I=(D-x)/C;J=(D-y)/C;do{if(D==w){K=J-I}else{if(D==x){K=H+2.0-J;break}if(D!=y){K=0.0;break}K=I+4.0-H}}while(0);H=K*60.0;if(H>=0.0){F=H;G=E;break}F=H+360.0;G=E}else{F=0.0;G=0.0}}while(0);y=F/360.0;h[k>>3]=y;h[m>>3]=D;h[l>>3]=G;h[e>>3]=y;h[e+8>>3]=G;h[e+16>>3]=D;h[e+24>>3]=A;L=0;i=g;return L|0};case 2:{t=e;c[e>>2]=(((c[n>>2]|0)*65535|0)>>>0)/255|0;c[t+4>>2]=(((c[o>>2]|0)*65535|0)>>>0)/255|0;c[e+8>>2]=(((c[p>>2]|0)*65535|0)>>>0)/255|0;c[t+12>>2]=(((c[q>>2]|0)*65535|0)>>>0)/255|0;L=0;i=g;return L|0};case 4:{h[e>>3]=+((c[n>>2]|0)>>>0>>>0)/255.0;h[e+8>>3]=+((c[o>>2]|0)>>>0>>>0)/255.0;h[e+16>>3]=+((c[p>>2]|0)>>>0>>>0)/255.0;h[e+24>>3]=+((c[q>>2]|0)>>>0>>>0)/255.0;L=0;i=g;return L|0};case 3:{y=1.0- +((c[n>>2]|0)>>>0>>>0)/255.0;x=1.0- +((c[o>>2]|0)>>>0>>>0)/255.0;w=1.0- +((c[p>>2]|0)>>>0>>>0)/255.0;B=y<x?y:x;H=w<B?w:B;t=e;a[e]=~~(y-H)*255|0;a[t+1|0]=~~(x-H)*255|0;a[t+2|0]=~~(w-H)*255|0;a[t+3|0]=~~H*255|0;L=0;i=g;return L|0};case 1:{t=e;a[e]=c[n>>2];a[t+1|0]=c[o>>2];a[t+2|0]=c[p>>2];a[t+3|0]=c[q>>2];L=0;i=g;return L|0};default:{L=0;i=g;return L|0}}}else{v=b}}while(0);if(v<<24>>24==46){M=24}else{if(((v&255)-48|0)>>>0<10>>>0){M=24}else{N=v}}do{if((M|0)==24){v=xF(r|0)|0;do{if((v|0)<(c[45204]|0)){O=c[45202]|0;P=r}else{b=v+11|0;c[45204]=b;q=mk(c[45202]|0,b)|0;c[45202]=q;if((q|0)==0){L=-1}else{O=q;P=r;break}i=g;return L|0}}while(0);while(1){v=P+1|0;q=a[P]|0;if((q<<24>>24|0)==0){break}else if((q<<24>>24|0)==44){Q=32}else{Q=q}a[O]=Q;O=O+1|0;P=v}a[O]=0;v=ac(c[45202]|0,159488,(u=i,i=i+24|0,c[u>>2]=k,c[u+8>>2]=l,c[u+16>>2]=m,u)|0)|0;i=u;if((v|0)!=3){N=a[r]|0;break}A=+h[k>>3];D=A<1.0?A:1.0;A=D>0.0?D:0.0;h[k>>3]=A;D=+h[l>>3];G=D<1.0?D:1.0;D=G>0.0?G:0.0;h[l>>3]=D;G=+h[m>>3];F=G<1.0?G:1.0;G=F>0.0?F:0.0;h[m>>3]=G;switch(f|0){case 2:{a:do{if(D>0.0){F=A<1.0?A*6.0:0.0;v=~~F;K=F- +(v|0);F=G*(1.0-D);H=G*(1.0-D*K);w=G*(1.0-D*(1.0-K));switch(v|0){case 3:{R=G;S=H;T=F;break a;break};case 4:{R=G;S=F;T=w;break a;break};case 0:{R=F;S=w;T=G;break a;break};case 1:{R=F;S=G;T=H;break a;break};case 2:{R=w;S=G;T=F;break a;break};case 5:{R=H;S=F;T=G;break a;break};default:{R=0.0;S=0.0;T=0.0;break a}}}else{R=G;S=G;T=G}}while(0);v=e;c[e>>2]=~~(T*65535.0);c[v+4>>2]=~~(S*65535.0);c[e+8>>2]=~~(R*65535.0);c[v+12>>2]=65535;L=0;i=g;return L|0};case 1:{b:do{if(D>0.0){F=A<1.0?A*6.0:0.0;v=~~F;H=F- +(v|0);F=G*(1.0-D);w=G*(1.0-D*H);K=G*(1.0-D*(1.0-H));switch(v|0){case 2:{U=K;V=G;W=F;break b;break};case 1:{U=F;V=G;W=w;break b;break};case 4:{U=G;V=F;W=K;break b;break};case 3:{U=G;V=w;W=F;break b;break};case 0:{U=F;V=K;W=G;break b;break};case 5:{U=w;V=F;W=G;break b;break};default:{U=0.0;V=0.0;W=0.0;break b}}}else{U=G;V=G;W=G}}while(0);v=e;a[e]=~~(W*255.0);a[v+1|0]=~~(V*255.0);a[v+2|0]=~~(U*255.0);a[v+3|0]=-1;L=0;i=g;return L|0};case 3:{c:do{if(D>0.0){F=A<1.0?A*6.0:0.0;v=~~F;w=F- +(v|0);F=G*(1.0-D);K=G*(1.0-D*w);H=G*(1.0-D*(1.0-w));switch(v|0){case 2:{X=H;Y=G;Z=F;break c;break};case 4:{X=G;Y=F;Z=H;break c;break};case 1:{X=F;Y=G;Z=K;break c;break};case 5:{X=K;Y=F;Z=G;break c;break};case 0:{X=F;Y=H;Z=G;break c;break};case 3:{X=G;Y=K;Z=F;break c;break};default:{X=0.0;Y=0.0;Z=0.0;break c}}}else{X=G;Y=G;Z=G}}while(0);F=1.0-Z;K=1.0-Y;H=1.0-X;w=F<K?F:K;x=H<w?H:w;v=e;a[e]=~~(F-x)*255|0;a[v+1|0]=~~(K-x)*255|0;a[v+2|0]=~~(H-x)*255|0;a[v+3|0]=~~x*255|0;L=0;i=g;return L|0};case 4:{d:do{if(D>0.0){x=A<1.0?A*6.0:0.0;v=~~x;H=x- +(v|0);x=G*(1.0-D);K=G*(1.0-D*H);F=G*(1.0-D*(1.0-H));switch(v|0){case 1:{_=x;$=G;aa=K;break d;break};case 4:{_=G;$=x;aa=F;break d;break};case 5:{_=K;$=x;aa=G;break d;break};case 0:{_=x;$=F;aa=G;break d;break};case 2:{_=F;$=G;aa=x;break d;break};case 3:{_=G;$=K;aa=x;break d;break};default:{_=0.0;$=0.0;aa=0.0;break d}}}else{_=G;$=G;aa=G}}while(0);h[e>>3]=aa;h[e+8>>3]=$;h[e+16>>3]=_;h[e+24>>3]=1.0;L=0;i=g;return L|0};case 0:{h[e>>3]=A;h[e+8>>3]=D;h[e+16>>3]=G;h[e+24>>3]=1.0;L=0;i=g;return L|0};default:{L=0;i=g;return L|0}}}}while(0);do{if(N<<24>>24==98){ba=r}else{if((Za(s|0,122280,4)|0)==0|N<<24>>24==119){ba=r;break}if((Za(s|0,122216,4)|0)==0|N<<24>>24==108){ba=r;break}if((Za(s|0,122200,8)|0)==0){ba=r;break}e:do{if(N<<24>>24==47){m=gb(s|0,47)|0;if((m|0)==0){ca=s;break}if((a[s]|0)!=47){l=(qm(122192,s,4)|0)==0;ca=l?m+1|0:r;break}m=c[45206]|0;do{if((m|0)!=0){if((a[m]|0)==0){break}if((qm(122192,m,3)|0)==0){break}l=r+2|0;k=xF(m|0)|0;O=(xF(l|0)|0)+k|0;if((O+3|0)<(c[44758]|0)){da=c[44756]|0}else{k=O+13|0;c[44758]=k;O=mk(c[44756]|0,k)|0;c[44756]=O;da=O}nb(da|0,122184,(u=i,i=i+16|0,c[u>>2]=m,c[u+8>>2]=l,u)|0)|0;i=u;ca=c[44756]|0;break e}}while(0);ca=r+2|0}else{m=c[45206]|0;if((m|0)==0){ca=r;break}if((a[m]|0)==0){ca=r;break}if((qm(122192,m,3)|0)==0){ca=r;break}l=xF(m|0)|0;O=(xF(r|0)|0)+l|0;if((O+3|0)<(c[44758]|0)){ea=c[44756]|0}else{l=O+13|0;c[44758]=l;O=mk(c[44756]|0,l)|0;c[44756]=O;ea=O}nb(ea|0,122184,(u=i,i=i+16|0,c[u>>2]=m,c[u+8>>2]=r,u)|0)|0;i=u;ca=c[44756]|0}}while(0);m=xF(ca|0)|0;do{if((m|0)<(c[45230]|0)){fa=c[45228]|0}else{O=m+11|0;c[45230]=O;l=mk(c[45228]|0,O)|0;c[45228]=l;if((l|0)!=0){fa=l;break}c[j>>2]=0;L=-1;i=g;return L|0}}while(0);m=a[ca]|0;if(m<<24>>24==0){ga=fa}else{l=fa;O=ca;k=m;while(1){m=O+1|0;P=k&255;if((xb(P|0)|0)==0){ha=k}else{ha=(yF(P|0)|0)&255}P=l+1|0;a[l]=ha;Q=a[m]|0;if(Q<<24>>24==0){ga=P;break}else{l=P;O=m;k=Q}}}a[ga]=0;ba=c[45228]|0}}while(0);c[j>>2]=ba;if((ba|0)==0){L=-1;i=g;return L|0}ga=c[45200]|0;do{if((ga|0)==0){M=106}else{ha=c[ga>>2]|0;if((a[ha]|0)!=(a[ba]|0)){M=106;break}if((Ya(ha|0,ba|0)|0)==0){ia=ga}else{M=106}}}while(0);if((M|0)==106){M=vb(j|0,40448,2491,12,44)|0;c[45200]=M;ia=M}if((ia|0)==0){switch(f|0){case 3:{M=e;z=0;a[M]=z;z=z>>8;a[M+1|0]=z;z=z>>8;a[M+2|0]=z;z=z>>8;a[M+3|0]=z;L=1;i=g;return L|0};case 2:{M=e;c[e+8>>2]=0;c[M+4>>2]=0;c[e>>2]=0;c[M+12>>2]=65535;L=1;i=g;return L|0};case 4:{vF(e|0,0,24)|0;h[e+24>>3]=1.0;L=1;i=g;return L|0};case 0:{vF(e|0,0,24)|0;h[e+24>>3]=1.0;L=1;i=g;return L|0};case 1:{M=e;a[M+2|0]=0;a[M+1|0]=0;a[e]=0;a[M+3|0]=-1;L=1;i=g;return L|0};default:{L=1;i=g;return L|0}}}else{switch(f|0){case 0:{h[e>>3]=+((d[ia+4|0]|0)>>>0)/255.0;h[e+8>>3]=+((d[ia+5|0]|0)>>>0)/255.0;h[e+16>>3]=+((d[ia+6|0]|0)>>>0)/255.0;h[e+24>>3]=+((d[ia+10|0]|0)>>>0)/255.0;L=0;i=g;return L|0};case 1:{f=e;a[e]=a[ia+7|0]|0;a[f+1|0]=a[(c[45200]|0)+8|0]|0;a[f+2|0]=a[(c[45200]|0)+9|0]|0;a[f+3|0]=a[(c[45200]|0)+10|0]|0;L=0;i=g;return L|0};case 3:{G=1.0- +(d[ia+7|0]|0)/255.0;D=1.0- +(d[ia+8|0]|0)/255.0;A=1.0- +(d[ia+9|0]|0)/255.0;E=G<D?G:D;_=A<E?A:E;f=e;a[e]=~~(G-_)*255|0;a[f+1|0]=~~(D-_)*255|0;a[f+2|0]=~~(A-_)*255|0;a[f+3|0]=~~_*255|0;L=0;i=g;return L|0};case 2:{f=e;c[e>>2]=(((d[ia+7|0]|0)*65535|0)>>>0)/255|0;c[f+4>>2]=(((d[(c[45200]|0)+8|0]|0)*65535|0)>>>0)/255|0;c[e+8>>2]=(((d[(c[45200]|0)+9|0]|0)*65535|0)>>>0)/255|0;c[f+12>>2]=(((d[(c[45200]|0)+10|0]|0)*65535|0)>>>0)/255|0;L=0;i=g;return L|0};case 4:{h[e>>3]=+(d[ia+7|0]|0)/255.0;h[e+8>>3]=+(d[ia+8|0]|0)/255.0;h[e+16>>3]=+(d[ia+9|0]|0)/255.0;h[e+24>>3]=+(d[ia+10|0]|0)/255.0;L=0;i=g;return L|0};default:{L=0;i=g;return L|0}}}return 0}function Bh(a,b){a=a|0;b=b|0;return pm(c[a>>2]|0,c[b>>2]|0)|0}function Ch(a){a=a|0;c[45206]=a;return}function Dh(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=+f;var g=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,S=0,U=0,Y=0,Z=0,_=0,ba=0,ca=0,da=0.0,ea=0,fa=0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0,wa=0,xa=0,ya=0.0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0;g=i;j=a;a=i;i=i+16|0;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];k=+h[a>>3];l=+h[a+8>>3];m=+$(+(+W(e)/d),+(+V(e)/b));n=+$(+(+W(f)/d),+(+V(f)/b));o=n- +R((n-m)/6.283185307179586)*6.283185307179586;do{if(f-e>3.141592653589793){if(o-m>=3.141592653589793){p=o;break}p=o+6.283185307179586}else{p=o}}while(0);o=+V(m);e=o*b;f=+W(m);n=f*d;q=k+e-n*0.0;r=n+(l+e*0.0);e=d/b;a=jk(8)|0;n=p-m;j=e<.25?70344:70600;s=j+160|0;t=j+192|0;u=j+168|0;v=j+128|0;w=j+32|0;x=j+224|0;y=j+200|0;z=j+136|0;A=j+64|0;B=j+40|0;C=j|0;D=j+232|0;E=j+184|0;F=j+176|0;G=j+96|0;H=j+72|0;I=j+8|0;J=j+216|0;K=j+208|0;L=j+152|0;M=j+144|0;N=j+104|0;O=j+56|0;P=j+48|0;Q=j+248|0;S=j+240|0;U=j+88|0;Y=j+80|0;Z=j+24|0;_=j+16|0;ba=j+120|0;ca=j+112|0;p=(e*(e*.001+4.98)+.207)/(e+.0067)*b;j=1;da=n;while(1){if(da>1.5707963267948966){ea=1}else{if((j|0)<=0){fa=7;break}ga=(e*(e*+h[s>>3]+ +h[u>>3])+ +h[F>>3])/(e+ +h[E>>3]);ha=(e*(e*+h[t>>3]+ +h[y>>3])+ +h[K>>3])/(e+ +h[J>>3]);ia=(e*(e*+h[v>>3]+ +h[z>>3])+ +h[M>>3])/(e+ +h[L>>3]);ja=(e*(e*+h[w>>3]+ +h[B>>3])+ +h[P>>3])/(e+ +h[O>>3]);ka=(e*(e*+h[x>>3]+ +h[D>>3])+ +h[S>>3])/(e+ +h[Q>>3]);la=(e*(e*+h[A>>3]+ +h[H>>3])+ +h[Y>>3])/(e+ +h[U>>3]);ma=(e*(e*+h[C>>3]+ +h[I>>3])+ +h[_>>3])/(e+ +h[Z>>3]);na=(e*(e*+h[G>>3]+ +h[N>>3])+ +h[ca>>3])/(e+ +h[ba>>3]);oa=0;pa=m;while(1){qa=da+pa;ra=(pa+qa)*.5;sa=+V(ra*2.0);ta=+V(ra*4.0);ua=+V(ra*6.0);va=p*+aa(la*ta+(ma+ja*sa)+na*ua+(qa-pa)*(ha*ta+(ia+ga*sa)+ka*ua))<=1.0e-5;wa=oa+1|0;if(va&(wa|0)<(j|0)){oa=wa;pa=qa}else{break}}ea=va^1}oa=j<<1;pa=n/+(oa|0);if(ea&(oa|0)<1024){j=oa;da=pa}else{xa=oa;ya=pa;break}}if((fa|0)==7){fa=j<<1;xa=fa;ya=n/+(fa|0)}fa=a;n=f*b;f=o*d;c[45232]=100;j=jk(1600)|0;ea=a;c[ea>>2]=j;h[j>>3]=k;h[(c[ea>>2]|0)+8>>3]=l;j=a+4|0;c[j>>2]=1;a=c[ea>>2]|0;o=+h[a>>3];da=+h[a+8>>3];va=c[45232]|0;if((va|0)>4){za=1;Aa=a}else{c[45232]=va<<1;a=gF(c[ea>>2]|0,va<<5)|0;c[ea>>2]=a;za=c[j>>2]|0;Aa=a}h[Aa+(za<<4)>>3]=o;za=c[j>>2]|0;c[j>>2]=za+1;h[(c[ea>>2]|0)+(za<<4)+8>>3]=da;h[(c[ea>>2]|0)+(c[j>>2]<<4)>>3]=q;za=c[j>>2]|0;c[j>>2]=za+1;h[(c[ea>>2]|0)+(za<<4)+8>>3]=r;h[(c[ea>>2]|0)+(c[j>>2]<<4)>>3]=q;za=c[j>>2]|0;c[j>>2]=za+1;h[(c[ea>>2]|0)+(za<<4)+8>>3]=r;da=+X(ya*.5);o=+W(ya)*(+T(da*da*3.0+4.0)+-1.0)/3.0;if((xa|0)>0){da=-0.0-n-f*0.0;p=f+n*-0.0;n=r;r=q;za=0;q=m;while(1){m=ya+q;f=+V(m);e=+W(m);pa=f*b;ka=e*d;ga=e*b;e=f*d;f=k+pa-ka*0.0;ia=ka+(l+pa*0.0);pa=-0.0-ga-e*0.0;ka=e+ga*-0.0;Aa=c[j>>2]|0;a=c[45232]|0;if((Aa+3|0)<(a|0)){Ba=Aa;Ca=c[ea>>2]|0}else{c[45232]=a<<1;Aa=gF(c[ea>>2]|0,a<<5)|0;c[ea>>2]=Aa;Ba=c[j>>2]|0;Ca=Aa}h[Ca+(Ba<<4)>>3]=r+o*da;Aa=c[j>>2]|0;c[j>>2]=Aa+1;h[(c[ea>>2]|0)+(Aa<<4)+8>>3]=n+o*p;h[(c[ea>>2]|0)+(c[j>>2]<<4)>>3]=f-o*pa;Aa=c[j>>2]|0;c[j>>2]=Aa+1;h[(c[ea>>2]|0)+(Aa<<4)+8>>3]=ia-o*ka;h[(c[ea>>2]|0)+(c[j>>2]<<4)>>3]=f;Aa=c[j>>2]|0;c[j>>2]=Aa+1;h[(c[ea>>2]|0)+(Aa<<4)+8>>3]=ia;Aa=za+1|0;if((Aa|0)<(xa|0)){da=pa;p=ka;n=ia;r=f;za=Aa;q=m}else{break}}}za=c[ea>>2]|0;q=+h[za>>3];r=+h[za+8>>3];xa=c[j>>2]|0;Ba=xa-1|0;n=+h[za+(Ba<<4)>>3];p=+h[za+(Ba<<4)+8>>3];Ba=c[45232]|0;if((xa+3|0)<(Ba|0)){Da=xa;Ea=za;Fa=Ea+(Da<<4)|0;h[Fa>>3]=n;Ga=c[j>>2]|0;Ha=Ga+1|0;c[j>>2]=Ha;Ia=c[ea>>2]|0;Ja=Ia+(Ga<<4)+8|0;h[Ja>>3]=p;Ka=c[j>>2]|0;La=c[ea>>2]|0;Ma=La+(Ka<<4)|0;h[Ma>>3]=q;Na=c[j>>2]|0;Oa=Na+1|0;c[j>>2]=Oa;Pa=c[ea>>2]|0;Qa=Pa+(Na<<4)+8|0;h[Qa>>3]=r;Ra=c[j>>2]|0;Sa=c[ea>>2]|0;Ta=Sa+(Ra<<4)|0;h[Ta>>3]=q;Ua=c[j>>2]|0;Va=Ua+1|0;c[j>>2]=Va;Wa=c[ea>>2]|0;Xa=Wa+(Ua<<4)+8|0;h[Xa>>3]=r;Ya=c[ea>>2]|0;Za=Ya;_a=c[j>>2]|0;$a=_a<<4;ab=gF(Za,$a)|0;bb=ab;c[ea>>2]=bb;c[45232]=0;i=g;return fa|0}c[45232]=Ba<<1;za=gF(c[ea>>2]|0,Ba<<5)|0;c[ea>>2]=za;Da=c[j>>2]|0;Ea=za;Fa=Ea+(Da<<4)|0;h[Fa>>3]=n;Ga=c[j>>2]|0;Ha=Ga+1|0;c[j>>2]=Ha;Ia=c[ea>>2]|0;Ja=Ia+(Ga<<4)+8|0;h[Ja>>3]=p;Ka=c[j>>2]|0;La=c[ea>>2]|0;Ma=La+(Ka<<4)|0;h[Ma>>3]=q;Na=c[j>>2]|0;Oa=Na+1|0;c[j>>2]=Oa;Pa=c[ea>>2]|0;Qa=Pa+(Na<<4)+8|0;h[Qa>>3]=r;Ra=c[j>>2]|0;Sa=c[ea>>2]|0;Ta=Sa+(Ra<<4)|0;h[Ta>>3]=q;Ua=c[j>>2]|0;Va=Ua+1|0;c[j>>2]=Va;Wa=c[ea>>2]|0;Xa=Wa+(Ua<<4)+8|0;h[Xa>>3]=r;Ya=c[ea>>2]|0;Za=Ya;_a=c[j>>2]|0;$a=_a<<4;ab=gF(Za,$a)|0;bb=ab;c[ea>>2]=bb;c[45232]=0;i=g;return fa|0}function Eh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=b|0;b=ew(e,122168)|0;do{if((b|0)==0){f=0}else{if((a[b]|0)==0){f=0;break}g=Gn(b,0,120)|0;if((g|0)!=0){f=g;break}g=$w(e)|0;Fv(0,158584,(h=i,i=i+8|0,c[h>>2]=g,h)|0)|0;i=h;Fv(3,128528,(h=i,i=i+8|0,c[h>>2]=b,h)|0)|0;i=h;f=0}}while(0);i=d;return f|0}function Fh(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=i;d=jk(304)|0;e=d;if((d|0)==0){Fv(1,115680,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f}f=a+16|0;a=c[f>>2]|0;c[d>>2]=a;c[f>>2]=e;if((a|0)==0){c[d+144>>2]=3;c[d+148>>2]=0;h[d+152>>3]=1.0;i=b;return e|0}else{f=d+16|0;g=a+16|0;c[f>>2]=c[g>>2];c[f+4>>2]=c[g+4>>2];c[f+8>>2]=c[g+8>>2];c[f+12>>2]=c[g+12>>2];c[f+16>>2]=c[g+16>>2];c[f+20>>2]=c[g+20>>2];c[f+24>>2]=c[g+24>>2];c[f+28>>2]=c[g+28>>2];c[f+32>>2]=c[g+32>>2];c[f+36>>2]=c[g+36>>2];g=d+56|0;f=a+56|0;c[g>>2]=c[f>>2];c[g+4>>2]=c[f+4>>2];c[g+8>>2]=c[f+8>>2];c[g+12>>2]=c[f+12>>2];c[g+16>>2]=c[f+16>>2];c[g+20>>2]=c[f+20>>2];c[g+24>>2]=c[f+24>>2];c[g+28>>2]=c[f+28>>2];c[g+32>>2]=c[f+32>>2];c[g+36>>2]=c[f+36>>2];c[d+144>>2]=c[a+144>>2];c[d+148>>2]=c[a+148>>2];h[d+152>>3]=+h[a+152>>3];c[d+136>>2]=c[a+136>>2];f=d+96|0;d=a+96|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];c[f+20>>2]=c[d+20>>2];c[f+24>>2]=c[d+24>>2];c[f+28>>2]=c[d+28>>2];c[f+32>>2]=c[d+32>>2];c[f+36>>2]=c[d+36>>2];i=b;return e|0}return 0}function Gh(a){a=a|0;var b=0;b=a+16|0;a=c[b>>2]|0;if((a|0)==0){cc(108512,102832,116,170080)}else{eF(c[a+212>>2]|0);eF(c[a+208>>2]|0);eF(c[a+216>>2]|0);eF(c[a+220>>2]|0);eF(c[a+224>>2]|0);eF(c[a+228>>2]|0);eF(c[a+232>>2]|0);eF(c[a+236>>2]|0);eF(c[a+240>>2]|0);eF(c[a+244>>2]|0);eF(c[a+248>>2]|0);eF(c[a+252>>2]|0);eF(c[a+256>>2]|0);eF(c[a+272>>2]|0);eF(c[a+284>>2]|0);eF(c[a+280>>2]|0);c[b>>2]=c[a>>2];eF(a);return}}function Hh(d,e,f,g,h,i,j){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0;k=c[d+16>>2]|0;l=c[d+152>>2]|0;if(!((l&32768|0)==0|(e|0)==0)){c[k+192>>2]=e}do{if((l&65536|0)==0){m=0}else{c[k+212>>2]=fk(i,j)|0;if((f|0)==0){m=0;break}if((a[f]|0)==0){m=0;break}c[k+208>>2]=fk(f,j)|0;m=1}}while(0);a:do{if((l&4194304|0)==0){n=m}else{do{if((g|0)!=0){if((a[g]|0)==0){break}c[k+228>>2]=fk(g,j)|0;f=k+260|0;b[f>>1]=b[f>>1]|1;n=1;break a}}while(0);f=c[k+192>>2]|0;if((f|0)==0){n=m;break}c[k+228>>2]=Lb(f|0)|0;n=1}}while(0);if((l&8388608|0)==0|(h|0)==0){o=n;return o|0}if((a[h]|0)==0){o=n;return o|0}c[k+244>>2]=fk(h,j)|0;o=1;return o|0}function Ih(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;i=i+64|0;g=f|0;h=c[(c[b>>2]|0)+168>>2]|0;j=c[(c[(c[h+8>>2]|0)+8>>2]|0)+92>>2]|0;Jh(b,e);b=ew(d,97248)|0;do{if((b|0)!=0){if((a[b]|0)==0){break}Lv(e,b)|0;k=e+4|0;l=c[k>>2]|0;if(l>>>0<(c[e+8>>2]|0)>>>0){m=l}else{Jv(e,1)|0;m=c[k>>2]|0}a[m]=0;l=c[e>>2]|0;c[k>>2]=l;n=l;i=f;return n|0}}while(0);if(!((h|0)==(d|0)|(j|0)==0)){Lv(e,j)|0;j=e+4|0;m=c[j>>2]|0;if(m>>>0<(c[e+8>>2]|0)>>>0){o=m}else{Jv(e,1)|0;o=c[j>>2]|0}c[j>>2]=o+1;a[o]=95}o=Sx(d)|0;if((o|0)==0){p=(h|0)==(d|0)?91736:86520;q=(c[d>>2]|0)>>>4}else if((o|0)==2){p=167984;q=(c[d>>2]|0)>>>4}else if((o|0)==1){p=81736;q=(c[d>>2]|0)>>>4}else{p=0;q=0}Lv(e,p)|0;p=g|0;nb(p|0,163832,(g=i,i=i+8|0,c[g>>2]=q,g)|0)|0;i=g;Lv(e,p)|0;p=e+4|0;g=c[p>>2]|0;if(g>>>0<(c[e+8>>2]|0)>>>0){r=g}else{Jv(e,1)|0;r=c[p>>2]|0}a[r]=0;r=c[e>>2]|0;c[p>>2]=r;n=r;i=f;return n|0}function Jh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;i=i+128|0;f=e|0;g=c[b+160>>2]|0;do{if((g|0)>1){if((c[b+152>>2]&64|0)==0){break}Lv(d,c[(c[(c[b>>2]|0)+308>>2]|0)+(g<<2)>>2]|0)|0;h=d+4|0;j=c[h>>2]|0;if(j>>>0<(c[d+8>>2]|0)>>>0){k=j}else{Jv(d,1)|0;k=c[h>>2]|0}c[h>>2]=k+1;a[k]=95}}while(0);k=c[b+196>>2]|0;if((k|0)<=0){i=e;return}g=f|0;f=c[b+200>>2]|0;nb(g|0,159176,(b=i,i=i+16|0,c[b>>2]=k,c[b+8>>2]=f,b)|0)|0;i=b;Lv(d,g)|0;i=e;return}function Kh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,j=0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0,w=0;e=i;i=i+24|0;f=e|0;j=e+8|0;k=+h[(c[a+16>>2]|0)+152>>3];l=Lh(d,0,f)|0;if((l-1|0)>>>0<2>>>0){i=e;return l|0}m=+h[b+16>>3];n=(+h[b>>3]+m)*.5;h[j>>3]=n;o=+h[b+24>>3];p=(+h[b+8>>3]+o)*.5;h[j+8>>3]=p;q=m-n;n=o-p;b=k>.5;if(b){xB(a,.5)}d=c[f>>2]|0;f=d+8|0;r=c[f>>2]|0;s=c[r>>2]|0;if((s|0)!=0){t=r;p=0.0;r=s;while(1){s=t+4|0;if(+g[s>>2]==0.0){u=p}else{nB(a,r);if((c[t+12>>2]|0)==0){v=6.283185307179586}else{v=p+ +g[s>>2]*6.283185307179586}s=Dh(j,q,n,p,v)|0;tB(a,c[s>>2]|0,c[s+4>>2]|0,0,0,1);YB(s);u=v}s=t+12|0;w=c[s>>2]|0;if((w|0)==0){break}else{t=s;p=u;r=w}}}if(b){xB(a,k)}eF(c[d+4>>2]|0);eF(c[f>>2]|0);eF(d);i=e;return l|0}function Lh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0,x=0.0,y=0,z=0.0,A=0.0,B=0,C=0.0,D=0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;f=i;i=i+8|0;h=f|0;j=jk(12)|0;k=j;l=Lb(b|0)|0;a:do{if((d|0)==0){m=1;n=l;while(1){o=a[n]|0;if((o<<24>>24|0)==0){p=m;break a}else if((o<<24>>24|0)==58){q=m+1|0}else{q=m}m=q;n=n+1|0}}else{p=d}}while(0);d=j+4|0;c[d>>2]=l;q=jk((p*12|0)+12|0)|0;p=j+8|0;c[p>>2]=q;n=La(l|0,87264)|0;b:do{if((n|0)==0){r=0;s=1.0;t=0;u=31}else{l=n;m=0;v=1.0;o=0;while(1){w=gb(l|0,59)|0;if((w|0)==0){x=0.0}else{y=w+1|0;a[w]=0;z=+sF(y,h);A=(c[h>>2]|0)==(y|0)|z<0.0?-1.0:z;if(A<0.0){u=18;break}else{x=A}}A=x-v;do{if(A>0.0){if(a[14800]|0){B=o;C=v;break}if(A<1.0e-5&A>-1.0e-5){B=o;C=v;break}Fv(0,160368,(D=i,i=i+8|0,c[D>>2]=b,D)|0)|0;i=D;a[14800]=1;B=3;C=v}else{B=o;C=x}}while(0);E=v-C;if(C>0.0){a[q+(m*12|0)+8|0]=1}if((a[l]|0)!=0){c[q+(m*12|0)>>2]=l}F=m+1|0;g[q+(m*12|0)+4>>2]=C;if(E<1.0e-5&E>-1.0e-5){G=F;H=B;break b}y=La(0,87264)|0;if((y|0)==0){break}else{l=y;m=F;v=E;o=B}}if((u|0)==18){if(a[14800]|0){I=1}else{Fv(1,159912,(D=i,i=i+8|0,c[D>>2]=b,D)|0)|0;i=D;a[14800]=1;I=2}eF(c[d>>2]|0);eF(c[p>>2]|0);eF(j);J=I;i=f;return J|0}if(E<=0.0){G=F;H=B;break}o=(m|0)>-1;if(o){K=0;L=0}else{r=B;s=E;t=F;u=31;break}do{L=(+g[q+(K*12|0)+4>>2]==0.0)+L|0;K=K+1|0;}while((K|0)<(F|0));if((L|0)<=0){r=B;s=E;t=F;u=31;break}if(!o){G=F;H=B;break}v=E/+(L|0);m=0;while(1){l=q+(m*12|0)+4|0;if(+g[l>>2]==0.0){g[l>>2]=v}l=m+1|0;if((l|0)<(F|0)){m=l}else{G=F;H=B;break}}}}while(0);if((u|0)==31){u=q+((t-1|0)*12|0)+4|0;g[u>>2]=s+ +g[u>>2];G=t;H=r}r=G;while(1){G=r-1|0;if((r|0)<=0){break}if(+g[q+(G*12|0)+4>>2]>0.0){break}else{r=G}}c[q+(r*12|0)>>2]=0;c[j>>2]=r;c[e>>2]=k;J=H;i=f;return J|0}function Mh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,j=0,k=0,l=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0.0;f=i;i=i+72|0;j=f|0;k=f+8|0;l=+h[(c[a+16>>2]|0)+152>>3];m=Lh(d,0,j)|0;if((m-1|0)>>>0<2>>>0){i=f;return m|0}d=k|0;if((e|0)==0){e=k;n=b;c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];n=k+16|0;e=b+16|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];e=k+32|0;n=b+32|0;c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];n=k+48|0;e=b+48|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2]}else{e=k;n=b+32|0;c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];n=k+16|0;e=b+48|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2];e=k+32|0;n=b;c[e>>2]=c[n>>2];c[e+4>>2]=c[n+4>>2];c[e+8>>2]=c[n+8>>2];c[e+12>>2]=c[n+12>>2];n=k+48|0;e=b+16|0;c[n>>2]=c[e>>2];c[n+4>>2]=c[e+4>>2];c[n+8>>2]=c[e+8>>2];c[n+12>>2]=c[e+12>>2]}e=k+16|0;o=+h[e>>3];n=k|0;p=+h[n>>3];q=o-p;b=k+32|0;h[b>>3]=p;h[e>>3]=p;r=l>.5;if(r){xB(a,.5)}s=c[j>>2]|0;j=s+8|0;t=c[j>>2]|0;u=c[t>>2]|0;if((u|0)!=0){v=k+48|0;k=t;t=u;do{u=k+4|0;if(+g[u>>2]!=0.0){nB(a,t);if((c[k+12>>2]|0)==0){w=o}else{w=+h[n>>3]+q*+g[u>>2]}h[b>>3]=w;h[e>>3]=w;rB(a,d,4,1);p=+h[e>>3];h[v>>3]=p;h[n>>3]=p}k=k+12|0;t=c[k>>2]|0;}while((t|0)!=0)}if(r){xB(a,l)}eF(c[s+4>>2]|0);eF(c[j>>2]|0);eF(s);i=f;return m|0}function Nh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;e=b;b=i;i=i+32|0;tF(b,e,32)|0;e=c[a+16>>2]|0;f=c[a+152>>2]|0;if((f&4259840|0)==0){i=d;return}g=(f&131072|0)!=0;h=e+264|0;if(g){c[h>>2]=0;c[e+268>>2]=2}else{c[h>>2]=2;c[e+268>>2]=4}h=e+272|0;eF(c[h>>2]|0);j=jk(c[e+268>>2]<<4)|0;e=j;c[h>>2]=e;h=b;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];h=j+16|0;j=b+16|0;c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];if((f&8192|0)==0){RA(a,e,e,2)|0}if(g){i=d;return}qi(e);i=d;return}function Oh(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;c=i;i=i+144|0;d=c|0;e=c+64|0;f=c+128|0;g=b|0;j=+h[g>>3];k=a+16|0;l=+h[k>>3];do{if(j<=l){m=+h[a>>3];if(j<m){break}n=+h[b+8>>3];o=+h[a+24>>3];if(n>o){break}p=+h[a+8>>3];if(n<p){break}n=+h[b+16>>3];if(n>l|n<m){break}n=+h[b+24>>3];if(n>o|n<p){break}n=+h[b+32>>3];if(n>l|n<m){break}n=+h[b+40>>3];if(n>o|n<p){break}n=+h[b+48>>3];if(n>l|n<m){break}m=+h[b+56>>3];if(m>o|m<p){break}i=c;return}}while(0);q=b+48|0;l=+ui(b,q,b+16|0);if(!(l<4.0&+ui(b,q,b+32|0)<4.0)){q=d|0;d=e|0;Qm(f,b,3,.5,q,d);Oh(a,q);Oh(a,d);i=c;return}d=a+24|0;q=a+8|0;f=a|0;l=+h[g>>3];j=+h[k>>3];do{if(l>j){h[k>>3]=l;r=l}else{if(l>=+h[f>>3]){r=j;break}h[f>>3]=l;r=j}}while(0);j=+h[b+8>>3];l=+h[d>>3];do{if(j>l){h[d>>3]=j;s=j}else{if(j>=+h[q>>3]){s=l;break}h[q>>3]=j;s=l}}while(0);l=+h[b+16>>3];do{if(l>r){h[k>>3]=l;t=l}else{if(l>=+h[f>>3]){t=r;break}h[f>>3]=l;t=r}}while(0);r=+h[b+24>>3];do{if(r>s){h[d>>3]=r;u=r}else{if(r>=+h[q>>3]){u=s;break}h[q>>3]=r;u=s}}while(0);s=+h[b+32>>3];do{if(s>t){h[k>>3]=s;v=s}else{if(s>=+h[f>>3]){v=t;break}h[f>>3]=s;v=t}}while(0);t=+h[b+40>>3];do{if(t>u){h[d>>3]=t;w=t}else{if(t>=+h[q>>3]){w=u;break}h[q>>3]=t;w=u}}while(0);u=+h[b+48>>3];do{if(u>v){h[k>>3]=u}else{if(u>=+h[f>>3]){break}h[f>>3]=u}}while(0);u=+h[b+56>>3];if(u>w){h[d>>3]=u;i=c;return}if(u>=+h[q>>3]){i=c;return}h[q>>3]=u;i=c;return}function Ph(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0,S=0.0,T=0.0,U=0.0,V=0.0,W=0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0;e=i;i=i+48|0;f=e|0;g=e+32|0;j=c[d+8>>2]|0;d=c[j+136>>2]|0;k=+h[j+16>>3];l=+h[j+24>>3];m=+h[j+32>>3];n=+h[j+40>>3];o=c[(c[j+8>>2]|0)+88>>2]|0;if((o|0)==0){h[b>>3]=k;h[b+8>>3]=l;h[b+16>>3]=m;h[b+24>>3]=n;i=e;return}j=k==m&l==n;p=j?-1.7976931348623157e+308:n;n=j?-1.7976931348623157e+308:m;m=j?1.7976931348623157e+308:l;l=j?1.7976931348623157e+308:k;j=o;a:do{if((c[j>>2]|0)>0){q=f;r=f|0;s=f+16|0;t=d+144|0;u=o+12|0;k=p;v=n;w=m;x=l;y=0;z=0.0;A=0;B=c[o+8>>2]|0;while(1){c[q>>2]=c[54];c[q+4>>2]=c[55];c[q+8>>2]=c[56];c[q+12>>2]=c[57];c[q+16>>2]=c[58];c[q+20>>2]=c[59];c[q+24>>2]=c[60];c[q+28>>2]=c[61];b:do{switch(c[B>>2]|0){case 4:case 5:{C=B+8|0;D=c[C+4>>2]|0;E=c[C>>2]|0;F=+h[D>>3];G=+h[D+8>>3];if((E|0)>1){H=G;I=F;J=G;K=F;C=D;D=1;while(1){L=C+24|0;M=+h[L>>3];do{if(M<K){N=M;O=I}else{if(M<=I){N=K;O=I;break}N=K;O=M}}while(0);M=+h[C+32>>3];do{if(M<J){P=M;Q=H}else{if(M<=H){P=J;Q=H;break}P=J;Q=M}}while(0);R=D+1|0;if((R|0)<(E|0)){H=Q;I=O;J=P;K=N;C=L;D=R}else{S=Q;T=O;U=P;V=N;break}}}else{S=G;T=F;U=G;V=F}K=v<V?V:v;J=x>V?V:x;I=k<U?U:k;H=w>U?U:w;h[B+80>>3]=V;h[B+88>>3]=U;h[B+96>>3]=T;h[B+104>>3]=S;W=A;X=z;Y=J>T?T:J;Z=H>S?S:H;_=K<T?T:K;$=I<S?S:I;break};case 7:{D=B+112|0;c[D>>2]=jk(56)|0;C=Lb(c[B+40>>2]|0)|0;c[c[D>>2]>>2]=C;a[(c[D>>2]|0)+48|0]=a[74912+(c[B+24>>2]|0)|0]|0;c[r>>2]=A;h[s>>3]=z;C=c[t>>2]|0;E=Hc[c[C>>2]&63](C,q,1)|0;c[(c[D>>2]|0)+4>>2]=E;sm(g,d,c[D>>2]|0);I=+h[B+8>>3];K=+h[B+16>>3];E=c[D>>2]|0;H=+h[E+32>>3];J=+h[E+40>>3];D=a[E+48|0]|0;if((D|0)==114){aa=I;ba=I-H}else if((D|0)==110){M=H*.5;aa=I+M;ba=I-M}else if((D|0)==108){aa=I+H;ba=I}else{aa=0.0;ba=0.0}I=K+ +h[E+16>>3];K=I-J;h[B+80>>3]=ba;h[B+88>>3]=K;h[B+96>>3]=aa;h[B+104>>3]=I;J=v<ba?ba:v;H=x>ba?ba:x;M=k<K?K:k;ca=w>K?K:w;K=J<aa?aa:J;J=H>aa?aa:H;H=M<I?I:M;M=ca>I?I:ca;if((c[u>>2]|0)!=0){W=A;X=z;Y=J;Z=M;_=K;$=H;break b}c[u>>2]=130;W=A;X=z;Y=J;Z=M;_=K;$=H;break};case 10:{W=c[B+16>>2]|0;X=+h[B+8>>3];Y=x;Z=w;_=v;$=k;break};case 2:case 3:{E=B+8|0;D=c[E+4>>2]|0;C=c[E>>2]|0;H=+h[D>>3];K=+h[D+8>>3];if((C|0)>1){M=K;J=H;ca=K;I=H;E=D;D=1;while(1){R=E+24|0;da=+h[R>>3];do{if(da<I){ea=da;fa=J}else{if(da<=J){ea=I;fa=J;break}ea=I;fa=da}}while(0);da=+h[E+32>>3];do{if(da<ca){ga=da;ha=M}else{if(da<=M){ga=ca;ha=M;break}ga=ca;ha=da}}while(0);L=D+1|0;if((L|0)<(C|0)){M=ha;J=fa;ca=ga;I=ea;E=R;D=L}else{ia=ha;ja=fa;ka=ga;la=ea;break}}}else{ia=K;ja=H;ka=K;la=H}I=v<la?la:v;ca=x>la?la:x;J=k<ka?ka:k;M=w>ka?ka:w;h[B+80>>3]=la;h[B+88>>3]=ka;h[B+96>>3]=ja;h[B+104>>3]=ia;W=A;X=z;Y=ca>ja?ja:ca;Z=M>ia?ia:M;_=I<ja?ja:I;$=J<ia?ia:J;break};case 0:case 1:{J=+h[B+8>>3];I=+h[B+24>>3];M=J-I;ca=+h[B+16>>3];F=+h[B+32>>3];G=ca-F;da=J+I;I=ca+F;h[B+80>>3]=M;h[B+88>>3]=G;h[B+96>>3]=da;h[B+104>>3]=I;F=v<M?M:v;ca=x>M?M:x;M=k<G?G:k;J=w>G?G:w;G=F<da?da:F;F=ca>da?da:ca;ca=M<I?I:M;if(J<=I){W=A;X=z;Y=F;Z=J;_=G;$=ca;break b}W=A;X=z;Y=F;Z=I;_=G;$=ca;break};case 6:{D=B+8|0;E=c[D+4>>2]|0;C=c[D>>2]|0;ca=+h[E>>3];G=+h[E+8>>3];if((C|0)>1){I=G;F=ca;J=G;M=ca;D=E;E=1;while(1){L=D+24|0;da=+h[L>>3];do{if(da<M){ma=da;na=F}else{if(da<=F){ma=M;na=F;break}ma=M;na=da}}while(0);da=+h[D+32>>3];do{if(da<J){oa=da;pa=I}else{if(da<=I){oa=J;pa=I;break}oa=J;pa=da}}while(0);R=E+1|0;if((R|0)<(C|0)){I=pa;F=na;J=oa;M=ma;D=L;E=R}else{qa=pa;ra=na;sa=oa;ta=ma;break}}}else{qa=G;ra=ca;sa=G;ta=ca}M=v<ta?ta:v;J=x>ta?ta:x;F=k<sa?sa:k;I=w>sa?sa:w;h[B+80>>3]=ta;h[B+88>>3]=sa;h[B+96>>3]=ra;h[B+104>>3]=qa;W=A;X=z;Y=J>ra?ra:J;Z=I>qa?qa:I;_=M<ra?ra:M;$=F<qa?qa:F;break};default:{W=A;X=z;Y=x;Z=w;_=v;$=k}}}while(0);E=y+1|0;if((E|0)<(c[j>>2]|0)){k=$;v=_;w=Z;x=Y;y=E;z=X;A=W;B=B+120|0}else{ua=$;va=_;wa=Z;xa=Y;break a}}}else{ua=p;va=n;wa=m;xa=l}}while(0);h[b>>3]=xa;h[b+8>>3]=wa;h[b+16>>3]=va;h[b+24>>3]=ua;i=e;return}function Qh(a){a=a|0;if((c[a>>2]|0)!=7){return}ck(c[a+112>>2]|0,1);return}function Rh(d,e){d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Za=0,_a=0.0,$a=0.0,ab=0.0,bb=0.0,cb=0.0,db=0.0,eb=0,fb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0;f=i;i=i+200|0;j=f|0;k=f+8|0;l=f+16|0;m=f+24|0;n=f+56|0;o=f+184|0;p=d+152|0;q=c[p>>2]|0;r=d+352|0;s=+h[r>>3];t=+h[d+432>>3];u=s*t/72.0;h[d+488>>3]=u;v=+h[d+440>>3];w=s*v/72.0;h[d+496>>3]=w;h[d+520>>3]=t/72.0;t=v/72.0;x=d+528|0;h[x>>3]=t;if((q&4096|c[53492]|0)!=0){h[x>>3]=t*-1.0}x=d+360|0;t=+((c[d+448>>2]|0)>>>0>>>0);if((c[x>>2]|0)==0){h[d+368>>3]=t/u;h[d+376>>3]=+((c[d+452>>2]|0)>>>0>>>0)/w}else{h[d+376>>3]=t/w;h[d+368>>3]=+((c[d+452>>2]|0)>>>0>>>0)/u}y=e|0;vB(d,Hm(y,Wv(e,0,154768,0)|0,213440)|0);z=d+160|0;c[z>>2]=0;A=jk(304)|0;if((A|0)==0){Fv(1,115680,(B=i,i=i+1|0,i=i+7&-8,c[B>>2]=0,B)|0)|0;i=B}C=d+16|0;D=c[C>>2]|0;c[A>>2]=D;c[C>>2]=A;if((D|0)==0){c[A+144>>2]=3;c[A+148>>2]=0;h[A+152>>3]=1.0}else{E=A+16|0;F=D+16|0;c[E>>2]=c[F>>2];c[E+4>>2]=c[F+4>>2];c[E+8>>2]=c[F+8>>2];c[E+12>>2]=c[F+12>>2];c[E+16>>2]=c[F+16>>2];c[E+20>>2]=c[F+20>>2];c[E+24>>2]=c[F+24>>2];c[E+28>>2]=c[F+28>>2];c[E+32>>2]=c[F+32>>2];c[E+36>>2]=c[F+36>>2];F=A+56|0;E=D+56|0;c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];c[F+12>>2]=c[E+12>>2];c[F+16>>2]=c[E+16>>2];c[F+20>>2]=c[E+20>>2];c[F+24>>2]=c[E+24>>2];c[F+28>>2]=c[E+28>>2];c[F+32>>2]=c[E+32>>2];c[F+36>>2]=c[E+36>>2];c[A+144>>2]=c[D+144>>2];c[A+148>>2]=c[D+148>>2];h[A+152>>3]=+h[D+152>>3];c[A+136>>2]=c[D+136>>2];E=A+96|0;F=D+96|0;c[E>>2]=c[F>>2];c[E+4>>2]=c[F+4>>2];c[E+8>>2]=c[F+8>>2];c[E+12>>2]=c[F+12>>2];c[E+16>>2]=c[F+16>>2];c[E+20>>2]=c[F+20>>2];c[E+24>>2]=c[F+24>>2];c[E+28>>2]=c[F+28>>2];c[E+32>>2]=c[F+32>>2];c[E+36>>2]=c[F+36>>2]}c[A+4>>2]=0;c[A+8>>2]=e;c[A+12>>2]=0;A=e+8|0;mi(d,c[(c[A>>2]|0)+12>>2]|0,y);SA(d,e);do{if((q&2|0)!=0){nB(d,119400);F=ew(y,120224)|0;do{if((F|0)!=0){if((a[F]|0)==0){break}nB(d,F)}}while(0);F=ew(y,160752)|0;do{if((F|0)!=0){if((a[F]|0)==0){break}lB(d,F)}}while(0);oi(d,e);F=ux(e)|0;if((F|0)==0){break}else{G=F}do{F=G|0;E=ew(F,123768)|0;do{if((E|0)!=0){if((a[E]|0)==0){break}lB(d,E)}}while(0);E=ew(F,121832)|0;do{if((E|0)!=0){if((a[E]|0)==0){break}nB(d,E)}}while(0);E=ew(F,121048)|0;do{if((E|0)!=0){if((a[E]|0)==0){break}if((gb(E|0,58)|0)==0){lB(d,E);break}D=Lb(E|0)|0;H=La(D|0,87264)|0;if((H|0)!=0){I=H;do{if((a[I]|0)!=0){lB(d,I)}I=La(0,87264)|0;}while((I|0)!=0)}eF(D)}}while(0);E=ew(F,160752)|0;do{if((E|0)!=0){if((a[E]|0)==0){break}lB(d,E)}}while(0);E=mw(e,G)|0;if((E|0)!=0){F=E;do{E=F|0;I=ew(E,123768)|0;do{if((I|0)!=0){if((a[I]|0)==0){break}if((gb(I|0,58)|0)==0){lB(d,I);break}H=Lb(I|0)|0;J=La(H|0,87264)|0;if((J|0)!=0){K=J;do{if((a[K]|0)!=0){lB(d,K)}K=La(0,87264)|0;}while((K|0)!=0)}eF(H)}}while(0);I=ew(E,160752)|0;do{if((I|0)!=0){if((a[I]|0)==0){break}lB(d,I)}}while(0);F=ow(e,F)|0;}while((F|0)!=0)}G=vx(e,G)|0;}while((G|0)!=0)}}while(0);G=ux(e)|0;if((G|0)!=0){q=G;do{a[(c[q+8>>2]|0)+116|0]=0;q=vx(e,q)|0;}while((q|0)!=0)}q=d|0;G=c[q>>2]|0;F=c[G+312>>2]|0;I=d+156|0;c[I>>2]=F;E=c[G+316>>2]|0;do{if((E|0)==0){if((F|0)<=1){L=0;M=1;N=F;O=62;break}if((c[p>>2]&64|0)!=0){L=0;M=1;N=F;O=62;break}Fv(0,161048,(B=i,i=i+8|0,c[B>>2]=c[d+52>>2],B)|0)|0;i=B;c[I>>2]=1;c[z>>2]=1;P=0}else{G=E+4|0;do{if((c[E>>2]|0)>1){if((c[p>>2]&64|0)!=0){Q=F;break}Fv(0,161048,(B=i,i=i+8|0,c[B>>2]=c[d+52>>2],B)|0)|0;i=B;c[E+8>>2]=(c[I>>2]|0)+1;Q=c[I>>2]|0}else{Q=F}}while(0);L=E+8|0;M=c[G>>2]|0;N=Q;O=62}}while(0);do{if((O|0)==62){c[z>>2]=M;if((M|0)<=(N|0)){P=L;break}TA(d);Gh(d);i=f;return}}while(0);L=d+196|0;N=d+172|0;M=L;Q=d+164|0;E=d+200|0;F=d+168|0;D=m;K=n|0;n=o+4|0;J=o+8|0;R=o|0;S=d+164|0;T=d+320|0;U=d+240|0;V=d+288|0;W=d+328|0;X=d+248|0;Z=d+296|0;_=d+304|0;aa=d+312|0;ba=d+12|0;ca=d+472|0;da=ca;ea=d+456|0;fa=d+336|0;ga=d+256|0;ha=d+344|0;ia=d+264|0;ja=d+272|0;ka=d+280|0;la=d+384|0;ma=d+504|0;na=d+392|0;oa=d+512|0;pa=j|0;qa=d+256|0;ra=j+4|0;j=L|0;L=d+188|0;sa=d+192|0;ta=d+184|0;ua=d+176|0;va=d+180|0;wa=d+172|0;xa=qa;ya=m+16|0;m=d+288|0;za=d+304|0;Aa=d+384|0;Ba=d+504|0;Ca=d+368|0;Da=d+376|0;Ea=ca|0;ca=d+456|0;Fa=d+476|0;Ga=d+460|0;Ha=d+480|0;Ia=d+464|0;Ja=d+484|0;Ka=d+468|0;Ma=P;while(1){P=c[(c[q>>2]|0)+316>>2]|0;if((c[((P|0)==0?I:P)>>2]|0)>1){WA(d)}P=c[N>>2]|0;Na=c[N+4>>2]|0;c[M>>2]=P;c[M+4>>2]=Na;Oa=P;a:do{if((Oa|0)>-1){P=Na;Pa=Oa;while(1){if(!((Pa|0)<(c[Q>>2]|0)&(P|0)>-1)){break a}if((P|0)>=(c[F>>2]|0)){break a}Qa=c[C>>2]|0;Ra=c[p>>2]|0;if((c[z>>2]|0)>1|(Pa|0)>0){Iv(o,128,K);Sa=Qa+212|0;Ta=c[Sa>>2]|0;Jh(d,o);Lv(o,Ta)|0;Ua=c[n>>2]|0;if(Ua>>>0<(c[J>>2]|0)>>>0){Va=Ua}else{Jv(o,1)|0;Va=c[n>>2]|0}a[Va]=0;Ua=c[R>>2]|0;c[n>>2]=Ua;c[Sa>>2]=Ua;Wa=Ta}else{Wa=0}Ch(ew(y,148552)|0);Ta=c[M>>2]|0;Ua=c[M+4>>2]|0;Sa=c[S>>2]|0;Xa=c[S+4>>2]|0;Za=(c[x>>2]|0)==0;u=+((Za?Ta:Ua)|0);w=+h[T>>3];t=w*u- +h[U>>3];h[V>>3]=t;v=+((Za?Ua:Ta)|0);s=+h[W>>3];_a=v*s- +h[X>>3];h[Z>>3]=_a;h[_>>3]=w+t;h[aa>>3]=s+_a;if((c[(c[ba>>2]|0)+28>>2]|0)==0){c[da>>2]=c[ea>>2];c[da+4>>2]=c[ea+4>>2];c[da+8>>2]=c[ea+8>>2];c[da+12>>2]=c[ea+12>>2]}else{Ta=c[Ea>>2]|0;Ua=c[ca>>2]|0;c[Ea>>2]=(Ta|0)<(Ua|0)?Ta:Ua;Ua=c[Fa>>2]|0;Ta=c[Ga>>2]|0;c[Fa>>2]=(Ua|0)<(Ta|0)?Ua:Ta;Ta=c[Ha>>2]|0;Ua=c[Ia>>2]|0;c[Ha>>2]=(Ta|0)>(Ua|0)?Ta:Ua;Ua=c[Ja>>2]|0;Ta=c[Ka>>2]|0;c[Ja>>2]=(Ua|0)>(Ta|0)?Ua:Ta}Ta=c[p>>2]|0;_a=+h[fa>>3];if((Ta&128|0)==0){t=w*(u- +((Za?Sa:Xa)|0)*.5)+_a;h[ga>>3]=t;u=s*(v- +((Za?Xa:Sa)|0)*.5)+ +h[ha>>3];h[ia>>3]=u;v=w+t;h[ja>>3]=v;$a=t;ab=u;bb=v;cb=s+u}else{u=+h[Ca>>3]*.5;s=_a-u;h[ga>>3]=s;v=+h[ha>>3];t=+h[Da>>3]*.5;w=v-t;h[ia>>3]=w;db=_a+u;h[ja>>3]=db;$a=s;ab=w;bb=db;cb=v+t}h[ka>>3]=cb;do{if(Za){t=+h[r>>3];h[ma>>3]=+h[la>>3]/t-$a;if((c[53492]|Ta&4096|0)==0){h[oa>>3]=+h[na>>3]/t-ab;break}else{h[oa>>3]=-0.0-cb- +h[na>>3]/t;break}}else{t=+h[r>>3];h[oa>>3]=-0.0-cb- +h[na>>3]/t;if((c[53492]|Ta&4096|0)==0){h[Ba>>3]=+h[Aa>>3]/t-$a;break}else{h[Ba>>3]=-0.0-bb- +h[Aa>>3]/t;break}}}while(0);UA(d);lB(d,159752);nB(d,119400);do{if((Ra&4259840|0)!=0){if((c[Qa+208>>2]|0)==0){if((b[Qa+260>>1]&1)==0){break}}do{if((Ra&655360|0)==0){eb=0;fb=0}else{Ta=Ra&131072;Za=Ta>>>16^2;Sa=Za+2|0;c[Qa+264>>2]=Za;Za=jk(Sa<<4)|0;Xa=Za;c[Za>>2]=c[m>>2];c[Za+4>>2]=c[m+4>>2];c[Za+8>>2]=c[m+8>>2];c[Za+12>>2]=c[m+12>>2];Ua=Za+16|0;c[Ua>>2]=c[za>>2];c[Ua+4>>2]=c[za+4>>2];c[Ua+8>>2]=c[za+8>>2];c[Ua+12>>2]=c[za+12>>2];if((Ta|0)!=0){eb=Xa;fb=Sa;break}qi(Xa);eb=Xa;fb=Sa}}while(0);if((Ra&8192|0)==0){RA(d,eb,eb,fb)|0}c[Qa+272>>2]=eb;c[Qa+268>>2]=fb}}while(0);do{if((Ra&32768|0)!=0){H=c[(c[A>>2]|0)+12>>2]|0;if((H|0)==0){break}c[Qa+192>>2]=c[H>>2]}}while(0);H=(Ra&4|0)!=0;do{if(!H){Sa=Qa+208|0;if((c[Sa>>2]|0)==0){if((b[Qa+260>>1]&1)==0){break}}tF(D|0,xa|0,32)|0;Xa=c[C>>2]|0;Ta=c[p>>2]|0;do{if((Ta&4259840|0)!=0){Ua=(Ta&131072|0)!=0;Za=Xa+264|0;if(Ua){c[Za>>2]=0;c[Xa+268>>2]=2}else{c[Za>>2]=2;c[Xa+268>>2]=4}Za=Xa+272|0;eF(c[Za>>2]|0);hb=jk(c[Xa+268>>2]<<4)|0;ib=hb;c[Za>>2]=ib;c[hb>>2]=c[D>>2];c[hb+4>>2]=c[D+4>>2];c[hb+8>>2]=c[D+8>>2];c[hb+12>>2]=c[D+12>>2];Za=hb+16|0;c[Za>>2]=c[ya>>2];c[Za+4>>2]=c[ya+4>>2];c[Za+8>>2]=c[ya+8>>2];c[Za+12>>2]=c[ya+12>>2];if((Ta&8192|0)==0){RA(d,ib,ib,2)|0}if(Ua){break}qi(ib)}}while(0);gB(d,c[Sa>>2]|0,c[Qa+228>>2]|0,c[Qa+244>>2]|0,c[Qa+212>>2]|0)}}while(0);Ta=ew(y,120224)|0;if((Ta|0)==0){jb=1;kb=162072}else{Xa=(a[Ta]|0)==0;jb=Xa&1;kb=Xa?162072:Ta}Ta=c[p>>2]|0;Xa=(a[kb]|0)==116;do{if((Ta&256|0)==0){if(!Xa){lb=kb;mb=jb;O=118;break}ib=(Ya(kb|0,118712)|0)==0;lb=ib?162072:kb;mb=ib?1:jb;O=118}else{if(!Xa){lb=kb;mb=jb;O=118;break}if((Ya(kb|0,118712)|0)!=0){lb=kb;mb=jb;O=118}}}while(0);do{if((O|0)==118){O=0;if(!((Ta&33554432|0)==0|(mb|0)==0)){break}if((Vh(lb,pa,k)|0)<<24>>24==0){nB(d,lb);lB(d,118712);sB(d,qa,1);break}c[l>>2]=0;Xa=c[pa>>2]|0;nB(d,Xa);lB(d,118712);Uh(e,l)|0;ib=c[ra>>2]|0;Ua=Em(y,c[53722]|0,0,0)|0;t=+g[k>>2];if((ib|0)==0){oB(d,159752,Ua,t)}else{oB(d,ib,Ua,t)}sB(d,qa,(c[l>>2]|0)>>>1&1|2);eF(Xa)}}while(0);Ta=c[A>>2]|0;Xa=c[(c[Ta+8>>2]|0)+88>>2]|0;if((Xa|0)==0){nb=Ta}else{Ta=kk(16e3)|0;Ua=Xa;do{if((c[Ua>>2]|0)>0){ib=1e3;Za=c[Xa+8>>2]|0;hb=0;ob=0;pb=1;qb=Ta;rb=1;while(1){sb=Za|0;b:do{switch(c[sb>>2]|0){case 0:case 1:{if(+h[Za+96>>3]<+h[ga>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ja>>3]<+h[Za+80>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[Za+104>>3]<+h[ia>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ka>>3]<+h[Za+88>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}yb=Za+24|0;h[qb>>3]=+h[Za+8>>3]- +h[yb>>3];zb=Za+32|0;h[qb+8>>3]=+h[Za+16>>3]- +h[zb>>3];h[qb+16>>3]=+h[yb>>3];h[qb+24>>3]=+h[zb>>3];qB(d,qb,2,(c[sb>>2]|0)==0?pb:0);tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break};case 7:{if(+h[Za+96>>3]<+h[ga>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ja>>3]<+h[Za+80>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[Za+104>>3]<+h[ia>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ka>>3]<+h[Za+88>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}h[qb>>3]=+h[Za+8>>3];h[qb+8>>3]=+h[Za+16>>3];kB(d,qb,c[Za+112>>2]|0);tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break};case 14:{Fv(0,161720,(B=i,i=i+1|0,i=i+7&-8,c[B>>2]=0,B)|0)|0;i=B;tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break};case 2:case 3:{if(+h[Za+96>>3]<+h[ga>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ja>>3]<+h[Za+80>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[Za+104>>3]<+h[ia>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ka>>3]<+h[Za+88>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}zb=Za+8|0;yb=c[zb+4>>2]|0;Ab=zb|0;zb=c[Ab>>2]|0;if((ib|0)<(zb|0)){Bb=ib<<1;Cb=(Bb|0)>(zb|0)?Bb:zb;Db=mk(qb,Cb<<4)|0;Eb=Cb}else{Db=qb;Eb=ib}if((zb|0)>0){Cb=0;do{h[Db+(Cb<<4)>>3]=+h[yb+(Cb*24|0)>>3];h[Db+(Cb<<4)+8>>3]=+h[yb+(Cb*24|0)+8>>3];Cb=Cb+1|0;}while((Cb|0)<(zb|0))}rB(d,Db,c[Ab>>2]|0,(c[sb>>2]|0)==2?pb:0);tb=rb;ub=Db;vb=pb;wb=ob;xb=Eb;break};case 8:{nB(d,c[Za+8>>2]|0);tb=rb;ub=qb;vb=1;wb=ob;xb=ib;break};case 9:{lB(d,c[Za+8>>2]|0);tb=rb;ub=qb;vb=1;wb=ob;xb=ib;break};case 4:case 5:{if(+h[Za+96>>3]<+h[ga>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ja>>3]<+h[Za+80>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[Za+104>>3]<+h[ia>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ka>>3]<+h[Za+88>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}zb=Za+8|0;Cb=c[zb+4>>2]|0;yb=zb|0;zb=c[yb>>2]|0;if((ib|0)<(zb|0)){Bb=ib<<1;Fb=(Bb|0)>(zb|0)?Bb:zb;Gb=mk(qb,Fb<<4)|0;Hb=Fb}else{Gb=qb;Hb=ib}if((zb|0)>0){Fb=0;do{h[Gb+(Fb<<4)>>3]=+h[Cb+(Fb*24|0)>>3];h[Gb+(Fb<<4)+8>>3]=+h[Cb+(Fb*24|0)+8>>3];Fb=Fb+1|0;}while((Fb|0)<(zb|0))}tB(d,Gb,c[yb>>2]|0,0,0,(c[sb>>2]|0)==4?pb&255:0);tb=rb;ub=Gb;vb=pb;wb=ob;xb=Hb;break};case 6:{if(+h[Za+96>>3]<+h[ga>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ja>>3]<+h[Za+80>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[Za+104>>3]<+h[ia>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}if(+h[ka>>3]<+h[Za+88>>3]){tb=rb;ub=qb;vb=pb;wb=ob;xb=ib;break b}zb=Za+8|0;Fb=c[zb+4>>2]|0;Cb=zb|0;zb=c[Cb>>2]|0;if((ib|0)<(zb|0)){Ab=ib<<1;Bb=(Ab|0)>(zb|0)?Ab:zb;Ib=mk(qb,Bb<<4)|0;Jb=Bb}else{Ib=qb;Jb=ib}if((zb|0)>0){Bb=0;do{h[Ib+(Bb<<4)>>3]=+h[Fb+(Bb*24|0)>>3];h[Ib+(Bb<<4)+8>>3]=+h[Fb+(Bb*24|0)+8>>3];Bb=Bb+1|0;}while((Bb|0)<(zb|0))}uB(d,Ib,c[Cb>>2]|0);tb=rb;ub=Ib;vb=pb;wb=ob;xb=Jb;break};case 12:{if((rb|0)==0){tb=0;ub=qb;vb=pb;wb=ob;xb=ib;break b}Fv(0,161384,(B=i,i=i+1|0,i=i+7&-8,c[B>>2]=0,B)|0)|0;i=B;tb=0;ub=qb;vb=pb;wb=ob;xb=ib;break};case 13:{zb=Za+16|0;if((c[Za+8>>2]|0)!=2){Bb=c[zb+36>>2]|0;Fb=c[Bb+12>>2]|0;t=+g[Bb+8>>2];yb=~~(+$(+(+h[Za+40>>3]- +h[Za+24>>3]),+(+h[Za+32>>3]- +h[zb>>3]))*180.0/3.141592653589793);nB(d,c[Bb+4>>2]|0);oB(d,Fb,yb,t);tb=rb;ub=qb;vb=2;wb=ob;xb=ib;break b}yb=c[Za+68>>2]|0;Fb=c[yb+4>>2]|0;Bb=c[yb+12>>2]|0;t=+g[yb+8>>2];v=+h[Za+40>>3];db=+h[zb>>3];if(v==db){if(+h[Za+48>>3]==+h[Za+24>>3]){Kb=0}else{O=171}}else{O=171}if((O|0)==171){O=0;Kb=~~(+Y((db-v)/+h[Za+32>>3])*180.0/3.141592653589793)}nB(d,Fb);oB(d,Bb,Kb,t);tb=rb;ub=qb;vb=3;wb=ob;xb=ib;break};case 11:{Yh(c[Za+8>>2]|0)|0;pB(d,176472);tb=rb;ub=qb;vb=pb;wb=176472;xb=ib;break};default:{tb=rb;ub=qb;vb=pb;wb=ob;xb=ib}}}while(0);sb=hb+1|0;if((sb|0)<(c[Ua>>2]|0)){ib=xb;Za=Za+120|0;hb=sb;ob=wb;pb=vb;qb=ub;rb=tb}else{break}}if((wb|0)==0){Mb=ub;break}pB(d,c[(c[q>>2]|0)+336>>2]|0);Mb=ub}else{Mb=Ta}}while(0);eF(Mb);nb=c[A>>2]|0}Ta=c[nb+12>>2]|0;if((Ta|0)!=0){ek(d,4,Ta)}if(H){Ta=(c[q>>2]|0)+28|0;c[Ta>>2]=(c[Ta>>2]|0)+1}else{if((c[Qa+208>>2]|0)==0){if((b[Qa+260>>1]&1)!=0){O=188}}else{O=188}if((O|0)==188){O=0;hB(d)}Ta=(c[q>>2]|0)+28|0;c[Ta>>2]=(c[Ta>>2]|0)+1;Th(d,e,Ra)}c:do{if((Ra&1|0)==0){if((Ra&16|0)!=0){aB(d);Ta=ux(e)|0;if((Ta|0)!=0){Ua=Ta;do{Ta=mw(e,Ua)|0;if((Ta|0)!=0){Xa=Ta;do{Xh(d,Xa);Xa=ow(e,Xa)|0;}while((Xa|0)!=0)}Ua=vx(e,Ua)|0;}while((Ua|0)!=0)}bB(d);_A(d);Ua=ux(e)|0;if((Ua|0)!=0){Xa=Ua;do{Wh(d,Xa);Xa=vx(e,Xa)|0;}while((Xa|0)!=0)}$A(d);break}if((Ra&8|0)==0){Xa=ux(e)|0;if((Xa|0)==0){break}else{Nb=Xa}while(1){Wh(d,Nb);Xa=mw(e,Nb)|0;if((Xa|0)!=0){Ua=Xa;do{Wh(d,c[((c[Ua>>2]&3|0)==2?Ua:Ua-32|0)+28>>2]|0);Xh(d,Ua);Ua=ow(e,Ua)|0;}while((Ua|0)!=0)}Nb=vx(e,Nb)|0;if((Nb|0)==0){break c}}}_A(d);Ua=ux(e)|0;if((Ua|0)!=0){Xa=Ua;do{Ua=c[A>>2]|0;d:do{if((c[Ua+172>>2]|0)<1){O=212}else{Ta=Xa|0;rb=1;qb=Ua;while(1){if((Rx(c[(c[qb+176>>2]|0)+(rb<<2)>>2]|0,Ta)|0)!=0){break d}pb=c[A>>2]|0;if((rb|0)<(c[pb+172>>2]|0)){rb=rb+1|0;qb=pb}else{O=212;break}}}}while(0);if((O|0)==212){O=0;Wh(d,Xa)}Xa=vx(e,Xa)|0;}while((Xa|0)!=0)}$A(d);aB(d);Xa=ux(e)|0;if((Xa|0)!=0){Ua=Xa;do{Xa=mw(e,Ua)|0;if((Xa|0)!=0){qb=Xa;do{Xa=c[A>>2]|0;e:do{if((c[Xa+172>>2]|0)<1){O=220}else{rb=qb|0;Ta=1;Cb=Xa;while(1){if((Rx(c[(c[Cb+176>>2]|0)+(Ta<<2)>>2]|0,rb)|0)!=0){break e}pb=c[A>>2]|0;if((Ta|0)<(c[pb+172>>2]|0)){Ta=Ta+1|0;Cb=pb}else{O=220;break}}}}while(0);if((O|0)==220){O=0;Xh(d,qb)}qb=ow(e,qb)|0;}while((qb|0)!=0)}Ua=vx(e,Ua)|0;}while((Ua|0)!=0)}bB(d)}else{_A(d);Ua=ux(e)|0;if((Ua|0)!=0){qb=Ua;do{Wh(d,qb);qb=vx(e,qb)|0;}while((qb|0)!=0)}$A(d);aB(d);qb=ux(e)|0;if((qb|0)!=0){Ua=qb;do{qb=mw(e,Ua)|0;if((qb|0)!=0){Xa=qb;do{Xh(d,Xa);Xa=ow(e,Xa)|0;}while((Xa|0)!=0)}Ua=vx(e,Ua)|0;}while((Ua|0)!=0)}bB(d)}}while(0);if(H){Th(d,e,Ra)}VA(d);if((Wa|0)!=0){Mv(o);c[Qa+212>>2]=Wa}Ua=(c[L>>2]|0)+(c[j>>2]|0)|0;Xa=(c[sa>>2]|0)+(c[E>>2]|0)|0;c[M>>2]=Ua;c[M+4>>2]=Xa;do{if((Ua|0)>-1){if(!((Ua|0)<(c[Q>>2]|0)&(Xa|0)>-1)){O=236;break}if((Xa|0)<(c[F>>2]|0)){Ob=Xa;Pb=Ua}else{O=236}}else{O=236}}while(0);if((O|0)==236){O=0;Qa=c[ta>>2]|0;if((Qa|0)==0){Ra=c[ua>>2]|0;c[E>>2]=Ra;Qb=Ua;Rb=Ra}else{Ra=c[wa>>2]|0;c[j>>2]=Ra;Qb=Ra;Rb=Xa}Ra=(c[va>>2]|0)+Qb|0;H=Rb+Qa|0;c[M>>2]=Ra;c[M+4>>2]=H;Ob=H;Pb=Ra}if((Pb|0)>-1){P=Ob;Pa=Pb}else{break}}}}while(0);Oa=c[(c[q>>2]|0)+316>>2]|0;if((c[((Oa|0)==0?I:Oa)>>2]|0)>1){XA(d)}if((Ma|0)==0){Sb=0;Tb=(c[z>>2]|0)+1|0}else{Sb=Ma+4|0;Tb=c[Ma>>2]|0}c[z>>2]=Tb;if((Tb|0)>(c[I>>2]|0)){break}else{Ma=Sb}}TA(d);Gh(d);i=f;return}function Sh(a){a=a|0;var b=0,d=0,e=0,f=0;b=c[43702]|0;if((b|0)==0){d=$g(10328,c[43330]|0)|0;c[43702]=d;e=d}else{e=b}if((Hc[c[e>>2]&63](e,a,4)|0)!=0){f=0;return f|0}e=c[43702]|0;b=c[e>>2]|0;d=Lb(a|0)|0;Hc[b&63](e,d,1)|0;f=1;return f|0}function Th(e,f,j){e=e|0;f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0.0,qa=0;k=i;i=i+152|0;l=k|0;m=k+32|0;n=k+64|0;o=k+72|0;p=k+136|0;q=k+144|0;r=f+8|0;s=c[r>>2]|0;if((c[s+172>>2]|0)<1){i=k;return}t=e+156|0;u=(j&4|0)!=0;v=e+16|0;w=p|0;x=o|0;y=o;z=o+32|0;A=z;B=z|0;z=o+16|0;C=o+8|0;D=o+24|0;E=o|0;F=o+48|0;G=o+40|0;H=o+56|0;o=l;I=e+152|0;J=l+16|0;l=(j&8|0)==0;K=p+4|0;p=m;L=m+16|0;m=e|0;M=e+160|0;N=1;O=s;while(1){s=c[(c[O+176>>2]|0)+(N<<2)>>2]|0;a:do{if((c[t>>2]|0)<2){P=9}else{Q=Hm(s|0,Wv(s,0,162416,0)|0,213440)|0;if(($h(c[m>>2]|0,c[M>>2]|0,c[t>>2]|0,Q)|0)<<24>>24!=0){P=9;break}if((a[Q]|0)!=0){break}Q=ux(s)|0;if((Q|0)==0){break}else{R=Q}do{if((li(e,s,R)|0)<<24>>24!=0){P=9;break a}R=vx(s,R)|0;}while((R|0)!=0)}}while(0);do{if((P|0)==9){P=0;if(u){Th(e,s,j)}Q=jk(304)|0;if((Q|0)==0){Fv(1,115680,(S=i,i=i+1|0,i=i+7&-8,c[S>>2]=0,S)|0)|0;i=S}T=c[v>>2]|0;c[Q>>2]=T;c[v>>2]=Q;if((T|0)==0){c[Q+144>>2]=3;c[Q+148>>2]=0;h[Q+152>>3]=1.0}else{U=Q+16|0;V=T+16|0;c[U>>2]=c[V>>2];c[U+4>>2]=c[V+4>>2];c[U+8>>2]=c[V+8>>2];c[U+12>>2]=c[V+12>>2];c[U+16>>2]=c[V+16>>2];c[U+20>>2]=c[V+20>>2];c[U+24>>2]=c[V+24>>2];c[U+28>>2]=c[V+28>>2];c[U+32>>2]=c[V+32>>2];c[U+36>>2]=c[V+36>>2];V=Q+56|0;U=T+56|0;c[V>>2]=c[U>>2];c[V+4>>2]=c[U+4>>2];c[V+8>>2]=c[U+8>>2];c[V+12>>2]=c[U+12>>2];c[V+16>>2]=c[U+16>>2];c[V+20>>2]=c[U+20>>2];c[V+24>>2]=c[U+24>>2];c[V+28>>2]=c[U+28>>2];c[V+32>>2]=c[U+32>>2];c[V+36>>2]=c[U+36>>2];c[Q+144>>2]=c[T+144>>2];c[Q+148>>2]=c[T+148>>2];h[Q+152>>3]=+h[T+152>>3];c[Q+136>>2]=c[T+136>>2];U=Q+96|0;V=T+96|0;c[U>>2]=c[V>>2];c[U+4>>2]=c[V+4>>2];c[U+8>>2]=c[V+8>>2];c[U+12>>2]=c[V+12>>2];c[U+16>>2]=c[V+16>>2];c[U+20>>2]=c[V+20>>2];c[U+24>>2]=c[V+24>>2];c[U+28>>2]=c[V+28>>2];c[U+32>>2]=c[V+32>>2];c[U+36>>2]=c[V+36>>2]}c[Q+4>>2]=1;c[Q+8>>2]=s;c[Q+12>>2]=1;Q=s+8|0;V=s|0;mi(e,c[(c[Q>>2]|0)+12>>2]|0,V);YA(e,s);U=c[v>>2]|0;T=U+208|0;if((c[T>>2]|0)==0){W=(b[U+260>>1]&1)!=0}else{W=1}Ch(ew(V,148552)|0);if(!(u|W^1)){tF(p|0,(c[Q>>2]|0)+16|0,32)|0;X=c[v>>2]|0;Y=c[I>>2]|0;do{if((Y&4259840|0)!=0){Z=(Y&131072|0)!=0;_=X+264|0;if(Z){c[_>>2]=0;c[X+268>>2]=2}else{c[_>>2]=2;c[X+268>>2]=4}_=X+272|0;eF(c[_>>2]|0);$=jk(c[X+268>>2]<<4)|0;aa=$;c[_>>2]=aa;c[$>>2]=c[p>>2];c[$+4>>2]=c[p+4>>2];c[$+8>>2]=c[p+8>>2];c[$+12>>2]=c[p+12>>2];_=$+16|0;c[_>>2]=c[L>>2];c[_+4>>2]=c[L+4>>2];c[_+8>>2]=c[L+8>>2];c[_+12>>2]=c[L+12>>2];if((Y&8192|0)==0){RA(e,aa,aa,2)|0}if(Z){break}qi(aa)}}while(0);gB(e,c[T>>2]|0,c[U+228>>2]|0,c[U+244>>2]|0,c[U+212>>2]|0)}c[n>>2]=0;Y=Uh(s,n)|0;if((Y|0)==0){ba=0}else{pB(e,Y);ba=c[n>>2]&1}Y=d[(c[Q>>2]|0)+112|0]|0;do{if((Y&1|0)==0){if((Y&2|0)!=0){X=Im(V,c[53728]|0,139280)|0;ca=Im(V,c[53730]|0,136712)|0;da=X;P=47;break}if((Y&8|0)!=0){X=Im(V,c[53724]|0,133792)|0;ca=Im(V,c[53726]|0,131744)|0;da=X;P=47;break}if((Y&4|0)!=0){X=Im(V,c[53710]|0,129560)|0;ca=Im(V,c[53712]|0,126280)|0;da=X;P=47;break}X=ew(V,123768)|0;if((X|0)==0){ea=0}else{ea=(a[X]|0)==0?0:X}X=ew(V,121832)|0;if((X|0)==0){fa=ea}else{fa=(a[X]|0)==0?ea:X}X=ew(V,121048)|0;if((X|0)==0){ga=ea}else{ga=(a[X]|0)==0?ea:X}do{if((ba|0)==0|(ga|0)==0){X=ew(V,120224)|0;if((X|0)==0){ha=ba;ia=ga;break}aa=(a[X]|0)==0;ha=aa?ba:1;ia=aa?ga:X}else{ha=ba;ia=ga}}while(0);X=(fa|0)==0?159752:fa;aa=(ia|0)==0?119400:ia;c[w>>2]=0;if((ha|0)==0){ja=0;ka=X;la=aa}else{ma=ha;na=X;oa=aa;P=49}}else{aa=Im(V,c[53728]|0,145328)|0;ca=Im(V,c[53730]|0,142384)|0;da=aa;P=47}}while(0);if((P|0)==47){P=0;c[w>>2]=0;ma=1;na=(da|0)==0?159752:da;oa=(ca|0)==0?119400:ca;P=49}do{if((P|0)==49){P=0;if((Vh(oa,w,q)|0)<<24>>24==0){nB(e,oa);ja=ma;ka=na;la=oa;break}nB(e,c[w>>2]|0);Y=c[K>>2]|0;aa=Em(V,c[53722]|0,0,0)|0;pa=+g[q>>2];if((Y|0)==0){oB(e,159752,aa,pa)}else{oB(e,Y,aa,pa)}ja=(c[n>>2]|0)>>>1&1|2;ka=na;la=oa}}while(0);aa=c[53716]|0;do{if((aa|0)!=0){Y=fw(V,aa)|0;if((Y|0)==0){break}if((a[Y]|0)==0){break}xB(e,+Fm(V,c[53716]|0,1.0,0.0))}}while(0);aa=c[n>>2]|0;do{if((aa&4|0)==0){if((aa&64|0)==0){if((Em(V,c[53714]|0,1,0)|0)!=0){lB(e,ka);sB(e,(c[Q>>2]|0)+16|0,ja);break}if((ja|0)==0){break}lB(e,118712);sB(e,(c[Q>>2]|0)+16|0,ja);break}Y=(c[Q>>2]|0)+16|0;c[y>>2]=c[Y>>2];c[y+4>>2]=c[Y+4>>2];c[y+8>>2]=c[Y+8>>2];c[y+12>>2]=c[Y+12>>2];Y=(c[Q>>2]|0)+32|0;c[A>>2]=c[Y>>2];c[A+4>>2]=c[Y+4>>2];c[A+8>>2]=c[Y+8>>2];c[A+12>>2]=c[Y+12>>2];h[z>>3]=+h[B>>3];h[D>>3]=+h[C>>3];h[F>>3]=+h[E>>3];h[H>>3]=+h[G>>3];if((Em(V,c[53714]|0,1,0)|0)==0){lB(e,118712)}else{lB(e,ka)}if((Mh(e,x,la,0)|0)>1){Y=$w(V)|0;Fv(3,117808,(S=i,i=i+8|0,c[S>>2]=Y,S)|0)|0;i=S}sB(e,(c[Q>>2]|0)+16|0,0)}else{Y=(Em(V,c[53714]|0,1,0)|0)!=0;if((ja|0)==0&(Y^1)){break}X=(c[Q>>2]|0)+16|0;c[y>>2]=c[X>>2];c[y+4>>2]=c[X+4>>2];c[y+8>>2]=c[X+8>>2];c[y+12>>2]=c[X+12>>2];X=(c[Q>>2]|0)+32|0;c[A>>2]=c[X>>2];c[A+4>>2]=c[X+4>>2];c[A+8>>2]=c[X+8>>2];c[A+12>>2]=c[X+12>>2];h[z>>3]=+h[B>>3];h[D>>3]=+h[C>>3];h[F>>3]=+h[E>>3];h[H>>3]=+h[G>>3];if(Y){lB(e,ka)}else{lB(e,118712)}ol(e,x,4,aa,ja)}}while(0);eF(c[w>>2]|0);aa=c[(c[Q>>2]|0)+12>>2]|0;if((aa|0)!=0){ek(e,5,aa)}if(W){if(u){tF(o|0,(c[Q>>2]|0)+16|0,32)|0;aa=c[v>>2]|0;V=c[I>>2]|0;do{if((V&4259840|0)!=0){Y=(V&131072|0)!=0;X=aa+264|0;if(Y){c[X>>2]=0;c[aa+268>>2]=2}else{c[X>>2]=2;c[aa+268>>2]=4}X=aa+272|0;eF(c[X>>2]|0);Z=jk(c[aa+268>>2]<<4)|0;_=Z;c[X>>2]=_;c[Z>>2]=c[o>>2];c[Z+4>>2]=c[o+4>>2];c[Z+8>>2]=c[o+8>>2];c[Z+12>>2]=c[o+12>>2];X=Z+16|0;c[X>>2]=c[J>>2];c[X+4>>2]=c[J+4>>2];c[X+8>>2]=c[J+8>>2];c[X+12>>2]=c[J+12>>2];if((V&8192|0)==0){RA(e,_,_,2)|0}if(Y){break}qi(_)}}while(0);gB(e,c[T>>2]|0,c[U+228>>2]|0,c[U+244>>2]|0,c[U+212>>2]|0)}hB(e)}do{if(!l){V=ux(s)|0;if((V|0)==0){break}else{qa=V}do{Wh(e,qa);V=mw(s,qa)|0;if((V|0)!=0){aa=V;do{Xh(e,aa);aa=ow(s,aa)|0;}while((aa|0)!=0)}qa=vx(s,qa)|0;}while((qa|0)!=0)}}while(0);ZA(e,f);Gh(e);if(u){break}Th(e,s,j)}}while(0);s=c[r>>2]|0;if((N|0)<(c[s+172>>2]|0)){N=N+1|0;O=s}else{break}}i=k;return}function Uh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=ew(b|0,164344)|0;a:do{if((e|0)==0){f=0;g=0}else{if((a[e]|0)==0){f=0;g=0;break}Yh(e)|0;b=c[44118]|0;if((b|0)==0){f=176472;g=0;break}else{h=0;i=176472;j=b}while(1){b=i;k=j;while(1){if((Ya(k|0,164776)|0)==0){l=10;break}if((Ya(k|0,164016)|0)==0){m=b;l=13;break}if((Ya(k|0,163264)|0)==0){n=b;l=15;break}o=b+4|0;if((Ya(k|0,162776)|0)==0){p=b;l=17;break}q=c[o>>2]|0;if((q|0)==0){f=176472;g=h;break a}else{b=o;k=q}}if((l|0)==10){l=0;r=b+4|0;s=h|1}else if((l|0)==13){while(1){l=0;k=m+4|0;q=c[k>>2]|0;c[m>>2]=q;if((q|0)==0){break}else{m=k;l=13}}r=b;s=h|3}else if((l|0)==15){while(1){l=0;k=n+4|0;q=c[k>>2]|0;c[n>>2]=q;if((q|0)==0){break}else{n=k;l=15}}r=b;s=h|64}else if((l|0)==17){while(1){l=0;k=p+4|0;q=c[k>>2]|0;c[p>>2]=q;if((q|0)==0){break}else{p=k;l=17}}r=b;s=h|4}k=c[r>>2]|0;if((k|0)==0){f=176472;g=s;break}else{h=s;i=r;j=k}}}}while(0);c[d>>2]=g;return f|0}function Vh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0,n=0;f=i;i=i+8|0;h=f|0;do{if((Lh(b,0,h)|0)==0){j=c[h>>2]|0;k=c[j>>2]|0;if((k|0)<2){break}l=j+8|0;if((c[c[l>>2]>>2]|0)==0){break}if((k|0)>2){Fv(0,110296,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k}k=kk((xF(b|0)|0)+1|0)|0;c[d>>2]=k;zF(k|0,c[c[l>>2]>>2]|0)|0;if((c[(c[l>>2]|0)+12>>2]|0)==0){c[d+4>>2]=0}else{k=c[d>>2]|0;m=k+((xF(k|0)|0)+1)|0;c[d+4>>2]=m;zF(m|0,c[(c[l>>2]|0)+12>>2]|0)|0}m=c[l>>2]|0;do{if((a[m+8|0]|0)==0){if((a[m+20|0]|0)==0){g[e>>2]=0.0;break}else{g[e>>2]=1.0- +g[m+16>>2];break}}else{g[e>>2]=+g[m+4>>2]}}while(0);eF(c[j+4>>2]|0);eF(c[l>>2]|0);eF(j);n=1;i=f;return n|0}}while(0);c[d>>2]=0;n=0;i=f;return n|0}function Wh(d,f){d=d|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0,N=0.0,O=0,P=0.0,Q=0,R=0,S=0,T=0;g=i;j=c[d>>2]|0;k=f+8|0;if((c[(c[k>>2]|0)+8>>2]|0)==0){i=g;return}l=f|0;if((li(d,Hx(l)|0,f)|0)<<24>>24==0){i=g;return}m=c[k>>2]|0;if(+h[m+64>>3]<+h[d+256>>3]){i=g;return}if(+h[d+272>>3]<+h[m+48>>3]){i=g;return}if(+h[m+72>>3]<+h[d+264>>3]){i=g;return}if(+h[d+280>>3]<+h[m+56>>3]){i=g;return}n=m+116|0;m=c[j+28>>2]|0;if((a[n]|0)==(m|0)){i=g;return}a[n]=m;vB(d,$w(l)|0);m=Hm(l,c[53642]|0,213440)|0;if((a[m]|0)!=0){vB(d,m)}m=Hm(l,c[53582]|0,213440)|0;a:do{if((a[m]|0)!=0){Yh(m)|0;n=c[44118]|0;if((n|0)==0){break}else{o=176476;p=n}while(1){if((a[p]|0)==105){if((Ya(p|0,91128)|0)==0){break}}n=c[o>>2]|0;if((n|0)==0){break a}else{o=o+4|0;p=n}}i=g;return}}while(0);p=c[d+152>>2]|0;o=jk(304)|0;if((o|0)==0){Fv(1,115680,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0)|0;i=m}m=d+16|0;n=c[m>>2]|0;c[o>>2]=n;c[m>>2]=o;if((n|0)==0){c[o+144>>2]=3;c[o+148>>2]=0;h[o+152>>3]=1.0}else{m=o+16|0;j=n+16|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];c[m+16>>2]=c[j+16>>2];c[m+20>>2]=c[j+20>>2];c[m+24>>2]=c[j+24>>2];c[m+28>>2]=c[j+28>>2];c[m+32>>2]=c[j+32>>2];c[m+36>>2]=c[j+36>>2];j=o+56|0;m=n+56|0;c[j>>2]=c[m>>2];c[j+4>>2]=c[m+4>>2];c[j+8>>2]=c[m+8>>2];c[j+12>>2]=c[m+12>>2];c[j+16>>2]=c[m+16>>2];c[j+20>>2]=c[m+20>>2];c[j+24>>2]=c[m+24>>2];c[j+28>>2]=c[m+28>>2];c[j+32>>2]=c[m+32>>2];c[j+36>>2]=c[m+36>>2];c[o+144>>2]=c[n+144>>2];c[o+148>>2]=c[n+148>>2];h[o+152>>3]=+h[n+152>>3];c[o+136>>2]=c[n+136>>2];m=o+96|0;j=n+96|0;c[m>>2]=c[j>>2];c[m+4>>2]=c[j+4>>2];c[m+8>>2]=c[j+8>>2];c[m+12>>2]=c[j+12>>2];c[m+16>>2]=c[j+16>>2];c[m+20>>2]=c[j+20>>2];c[m+24>>2]=c[j+24>>2];c[m+28>>2]=c[j+28>>2];c[m+32>>2]=c[j+32>>2];c[m+36>>2]=c[j+36>>2]}c[o+4>>2]=2;c[o+8>>2]=f;c[o+12>>2]=8;do{if((p&16777216|0)!=0){if((e[(c[(Hx(l)|0)+8>>2]|0)+170>>1]|0)>>>0<=2>>>0){h[o+168>>3]=0.0;break}q=+h[(c[(c[k>>2]|0)+132>>2]|0)+16>>3]*72.0;if(q<0.0){r=q+-.5}else{r=q+.5}h[o+168>>3]=+(~~r|0)}}while(0);mi(d,c[(c[k>>2]|0)+104>>2]|0,l);do{if((p&4259840|0)!=0){if((c[o+208>>2]|0)==0){if((b[o+260>>1]&1)==0){break}}j=pl(f)|0;m=c[k>>2]|0;r=+h[m+16>>3];q=+h[m+24>>3];m=Im(l,c[53582]|0,213440)|0;do{if((a[m]|0)==0){s=0}else{Yh(m)|0;n=c[44118]|0;if((n|0)==0){s=0;break}else{t=176472;u=0;v=n}while(1){n=(Ya(v|0,164776)|0)==0;w=n?1:u;n=t+4|0;x=c[n>>2]|0;if((x|0)==0){s=w;break}else{t=n;u=w;v=x}}}}while(0);b:do{if((j&-3|0)==1){m=c[(c[k>>2]|0)+12>>2]|0;x=m+8|0;w=c[x>>2]|0;do{if((w|0)==4){y=+h[m+16>>3];if(y<0.0){z=y+-.5}else{z=y+.5}if(((~~z|0)%90|0|0)!=0){A=1;break}if(+h[m+24>>3]!=0.0){A=1;break}if(+h[m+32>>3]!=0.0){A=1;break}A=(c[m+4>>2]|s|0)==0}else{A=1}}while(0);if(!((m|0)!=0&A)){B=61;break}if((p&524288|0)==0){B=61;break}n=(w|0)<3?1:w;C=m+4|0;D=c[C>>2]|0;E=(D|0)>1?D:1;D=c[m+44>>2]|0;F=ew(l,165160)|0;if((F|0)==0){G=0}else{G=Rb(F|0)|0}F=(G-4|0)>>>0>56>>>0?20:G;if((c[C>>2]|s|0)==0){c[o+264>>2]=0;C=jk(32)|0;h[C>>3]=r- +h[(c[k>>2]|0)+88>>3];h[C+8>>3]=q- +h[(c[k>>2]|0)+80>>3]*.5;h[C+16>>3]=r+ +h[(c[k>>2]|0)+88>>3];h[C+24>>3]=q+ +h[(c[k>>2]|0)+80>>3]*.5;H=C;I=2;break}C=c[x>>2]|0;do{if((C|0)<3){if(+h[m+32>>3]!=0.0){break}if(+h[m+24>>3]!=0.0){break}J=o+264|0;if((c[m>>2]|0)!=0){c[J>>2]=1;K=jk(32)|0;h[K>>3]=r;h[K+8>>3]=q;L=(E<<1)-1|0;h[K+16>>3]=r+ +h[D+(L<<4)>>3];h[K+24>>3]=q+ +h[D+(L<<4)+8>>3];H=K;I=2;break b}c[J>>2]=2;J=(E<<1)-1|0;y=+h[D+(J<<4)>>3];M=+h[D+(J<<4)+8>>3];N=6.283185307179586/+(F|0);J=jk(F<<4)|0;if((F|0)>0){O=0;P=0.0}else{H=J;I=F;break b}while(1){h[J+(O<<4)>>3]=y*+V(P);h[J+(O<<4)+8>>3]=M*+W(P);K=O+1|0;if((K|0)<(F|0)){O=K;P=N+P}else{Q=0;break}}while(1){K=J+(Q<<4)|0;h[K>>3]=r+ +h[K>>3];K=J+(Q<<4)+8|0;h[K>>3]=q+ +h[K>>3];K=Q+1|0;if((K|0)<(F|0)){Q=K}else{H=J;I=F;break b}}}}while(0);m=da(C,E-1|0)|0;c[o+264>>2]=2;w=c[x>>2]|0;if((w|0)<(F|0)){J=jk(n<<4)|0;if((n|0)>0){R=0}else{H=J;I=n;break}while(1){K=R+m|0;h[J+(R<<4)>>3]=r+ +h[D+(K<<4)>>3];h[J+(R<<4)+8>>3]=q+ +h[D+(K<<4)+8>>3];K=R+1|0;if((K|0)<(n|0)){R=K}else{H=J;I=n;break}}}else{n=(w|0)/(F|0)|0;J=jk(F<<4)|0;if((F|0)>0){S=0;T=0}else{H=J;I=F;break}while(1){x=T+m|0;h[J+(S<<4)>>3]=r+ +h[D+(x<<4)>>3];h[J+(S<<4)+8>>3]=q+ +h[D+(x<<4)+8>>3];x=S+1|0;if((x|0)<(F|0)){S=x;T=T+n|0}else{H=J;I=F;break}}}}else{B=61}}while(0);if((B|0)==61){c[o+264>>2]=0;j=jk(32)|0;h[j>>3]=r- +h[(c[k>>2]|0)+88>>3];h[j+8>>3]=q- +h[(c[k>>2]|0)+80>>3]*.5;h[j+16>>3]=r+ +h[(c[k>>2]|0)+96>>3];h[j+24>>3]=q+ +h[(c[k>>2]|0)+80>>3]*.5;H=j;I=2}if((p&8192|0)==0){RA(d,H,H,I)|0}c[o+272>>2]=H;c[o+268>>2]=I}}while(0);Ch(ew(l,148552)|0);cB(d,f);Dc[c[(c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]|0)+20>>2]&63](d,f);f=c[(c[k>>2]|0)+108>>2]|0;k=f;do{if((f|0)!=0){if((a[k+81|0]|0)==0){break}ek(d,10,k)}}while(0);dB(d);Gh(d);i=g;return}function Xh(f,j){f=f|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0,U=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Za=0,_a=0,$a=0,ab=0.0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0.0,mb=0.0,nb=0.0,ob=0.0,pb=0.0,qb=0.0,rb=0.0,sb=0.0,tb=0.0,ub=0.0,vb=0.0,wb=0.0,xb=0.0,yb=0.0,zb=0.0,Ab=0.0,Bb=0.0,Cb=0.0,Db=0.0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0;k=i;i=i+2088|0;l=k|0;m=k+48|0;n=k+96|0;o=k+144|0;p=k+192|0;q=k+200|0;r=k+248|0;s=k+312|0;t=k+1112|0;u=k+1912|0;v=k+1928|0;w=k+2056|0;tF(w|0,f+256|0,32)|0;x=j+8|0;y=c[x>>2]|0;z=c[y+8>>2]|0;do{if((z|0)==0){A=6}else{if(+h[z+24>>3]<+h[w>>3]){A=6;break}if(+h[w+16>>3]<+h[z+8>>3]){A=6;break}if(+h[z+32>>3]<+h[w+8>>3]){A=6;break}if(+h[w+24>>3]<+h[z+16>>3]){A=6}}}while(0);do{if((A|0)==6){z=c[y+96>>2]|0;if((z|0)==0){B=y}else{if((nn(z,w)|0)<<24>>24!=0){break}B=c[x>>2]|0}z=c[B+108>>2]|0;C=z;if((z|0)==0){i=k;return}if((a[C+81|0]|0)==0){i=k;return}if((nn(C,w)|0)<<24>>24!=0){break}i=k;return}}while(0);w=j;B=j-32|0;Hx(c[((c[w>>2]&3|0)==2?j:B)+28>>2]|0)|0;y=f+156|0;a:do{if((c[y>>2]|0)>=2){C=Hm(j|0,c[53776]|0,213440)|0;z=f|0;D=f+160|0;if(($h(c[z>>2]|0,c[D>>2]|0,c[y>>2]|0,C)|0)<<24>>24!=0){break}if((a[C]|0)!=0){i=k;return}C=j+32|0;E=0;do{F=c[w>>2]&3;if((E|0)<1){G=(F|0)==3?j:C}else{G=(F|0)==2?j:B}F=Hm(c[G+28>>2]|0,c[53612]|0,213440)|0;if((a[F]|0)==0){break a}E=E+1|0;if(($h(c[z>>2]|0,c[D>>2]|0,c[y>>2]|0,F)|0)<<24>>24!=0){break a}}while((E|0)<2);i=k;return}}while(0);y=j+32|0;G=xF($w(c[((c[w>>2]&3|0)==3?j:y)+28>>2]|0)|0)|0;E=dF(G+3+(xF($w(c[((c[w>>2]&3|0)==2?j:B)+28>>2]|0)|0)|0)|0)|0;zF(E|0,$w(c[((c[w>>2]&3|0)==3?j:y)+28>>2]|0)|0)|0;G=(Nw(Hx(c[((c[w>>2]&3|0)==2?j:B)+28>>2]|0)|0)|0)==0;D=E+(xF(E|0)|0)|0;if(G){a[D]=a[91968]|0;a[D+1|0]=a[91969]|0;a[D+2|0]=a[91970]|0}else{a[D]=a[92624]|0;a[D+1|0]=a[92625]|0;a[D+2|0]=a[92626]|0}AF(E|0,$w(c[((c[w>>2]&3|0)==2?j:B)+28>>2]|0)|0)|0;vB(f,E);eF(E);E=j|0;D=Hm(E,c[53814]|0,213440)|0;if((a[D]|0)!=0){vB(f,D)}D=Hm(E,c[53760]|0,213440)|0;b:do{if((a[D]|0)==0){H=0}else{Yh(D)|0;G=c[44118]|0;if((G|0)==0){H=176472;break}else{I=176476;J=G}while(1){if((a[J]|0)==105){if((Ya(J|0,91128)|0)==0){break}}G=c[I>>2]|0;if((G|0)==0){H=176472;break b}else{I=I+4|0;J=G}}i=k;return}}while(0);J=v|0;v=f+152|0;I=c[v>>2]|0;D=jk(304)|0;if((D|0)==0){Fv(1,115680,(K=i,i=i+1|0,i=i+7&-8,c[K>>2]=0,K)|0)|0;i=K}G=f+16|0;z=c[G>>2]|0;c[D>>2]=z;c[G>>2]=D;if((z|0)==0){c[D+144>>2]=3;c[D+148>>2]=0;h[D+152>>3]=1.0}else{C=D+16|0;F=z+16|0;c[C>>2]=c[F>>2];c[C+4>>2]=c[F+4>>2];c[C+8>>2]=c[F+8>>2];c[C+12>>2]=c[F+12>>2];c[C+16>>2]=c[F+16>>2];c[C+20>>2]=c[F+20>>2];c[C+24>>2]=c[F+24>>2];c[C+28>>2]=c[F+28>>2];c[C+32>>2]=c[F+32>>2];c[C+36>>2]=c[F+36>>2];F=D+56|0;C=z+56|0;c[F>>2]=c[C>>2];c[F+4>>2]=c[C+4>>2];c[F+8>>2]=c[C+8>>2];c[F+12>>2]=c[C+12>>2];c[F+16>>2]=c[C+16>>2];c[F+20>>2]=c[C+20>>2];c[F+24>>2]=c[C+24>>2];c[F+28>>2]=c[C+28>>2];c[F+32>>2]=c[C+32>>2];c[F+36>>2]=c[C+36>>2];c[D+144>>2]=c[z+144>>2];c[D+148>>2]=c[z+148>>2];h[D+152>>3]=+h[z+152>>3];c[D+136>>2]=c[z+136>>2];C=D+96|0;F=z+96|0;c[C>>2]=c[F>>2];c[C+4>>2]=c[F+4>>2];c[C+8>>2]=c[F+8>>2];c[C+12>>2]=c[F+12>>2];c[C+16>>2]=c[F+16>>2];c[C+20>>2]=c[F+20>>2];c[C+24>>2]=c[F+24>>2];c[C+28>>2]=c[F+28>>2];c[C+32>>2]=c[F+32>>2];c[C+36>>2]=c[F+36>>2]}c[D+4>>2]=3;c[D+8>>2]=j;c[D+12>>2]=9;F=(H|0)==0;do{if(!F){if((c[(c[x>>2]|0)+8>>2]|0)==0){break}pB(f,H)}}while(0);C=c[53772]|0;do{if((C|0)!=0){z=fw(E,C)|0;if((z|0)==0){break}if((a[z]|0)==0){break}xB(f,+Fm(E,c[53772]|0,1.0,0.0))}}while(0);do{if((I&16777216|0)!=0){if((e[(c[(Hx(c[((c[w>>2]&3|0)==3?j:y)+28>>2]|0)|0)+8>>2]|0)+170>>1]|0)>>>0<=2>>>0){vF(D+176|0,0,16)|0;break}L=+h[(c[(c[(c[((c[w>>2]&3|0)==3?j:y)+28>>2]|0)+8>>2]|0)+132>>2]|0)+16>>3]*72.0;if(L<0.0){M=L+-.5}else{M=L+.5}h[D+176>>3]=+(~~M|0);L=+h[(c[(c[(c[((c[w>>2]&3|0)==2?j:B)+28>>2]|0)+8>>2]|0)+132>>2]|0)+16>>3]*72.0;if(L<0.0){N=L+-.5}else{N=L+.5}h[D+184>>3]=+(~~N|0)}}while(0);do{if((I&32768|0)!=0){C=c[(c[x>>2]|0)+96>>2]|0;if((C|0)==0){O=c[D+192>>2]|0}else{z=c[C>>2]|0;c[D+192>>2]=z;O=z}z=D+196|0;c[z>>2]=O;C=D+204|0;c[C>>2]=O;P=D+200|0;c[P>>2]=O;Q=c[x>>2]|0;R=c[Q+108>>2]|0;if((R|0)==0){S=Q}else{c[z>>2]=c[R>>2];S=c[x>>2]|0}R=c[S+104>>2]|0;if((R|0)==0){U=S}else{c[P>>2]=c[R>>2];U=c[x>>2]|0}R=c[U+100>>2]|0;if((R|0)==0){break}c[C>>2]=c[R>>2]}}while(0);c:do{if((I&65536|0)==0){X=0}else{Iv(u,128,J);c[D+212>>2]=fk(Ih(f,E,u)|0,E)|0;Mv(u);U=ew(E,83344)|0;if((U|0)==0){A=67}else{if((a[U]|0)==0){A=67}else{Y=U;A=69}}do{if((A|0)==67){U=ew(E,82904)|0;if((U|0)==0){Z=0;break}if((a[U]|0)==0){Z=0}else{Y=U;A=69}}}while(0);if((A|0)==69){Z=fk(Y,E)|0}U=ew(E,82520)|0;if((U|0)==0){A=72}else{if((a[U]|0)==0){A=72}else{_=U;A=74}}do{if((A|0)==72){U=ew(E,81944)|0;if((U|0)!=0){if((a[U]|0)!=0){_=U;A=74;break}}if((Z|0)==0){break}c[D+208>>2]=Lb(Z|0)|0}}while(0);if((A|0)==74){c[D+208>>2]=fk(_,E)|0}U=ew(E,81232)|0;if((U|0)==0){A=79}else{if((a[U]|0)==0){A=79}else{aa=U;A=81}}do{if((A|0)==79){U=ew(E,80736)|0;if((U|0)!=0){if((a[U]|0)!=0){aa=U;A=81;break}}if((Z|0)==0){break}c[D+216>>2]=Lb(Z|0)|0}}while(0);if((A|0)==81){c[D+216>>2]=fk(aa,E)|0}U=ew(E,80256)|0;if((U|0)==0){A=86}else{if((a[U]|0)==0){A=86}else{ba=U;A=88}}do{if((A|0)==86){U=ew(E,79928)|0;if((U|0)!=0){if((a[U]|0)!=0){ba=U;A=88;break}}if((Z|0)==0){break}c[D+220>>2]=Lb(Z|0)|0}}while(0);if((A|0)==88){c[D+220>>2]=fk(ba,E)|0;U=D+260|0;b[U>>1]=b[U>>1]|128}U=ew(E,79504)|0;if((U|0)==0){A=93}else{if((a[U]|0)==0){A=93}else{ca=U}}do{if((A|0)==93){U=ew(E,79152)|0;if((U|0)!=0){if((a[U]|0)!=0){ca=U;break}}if((Z|0)==0){X=0;break c}c[D+224>>2]=Lb(Z|0)|0;X=Z;break c}}while(0);c[D+224>>2]=fk(ca,E)|0;U=D+260|0;b[U>>1]=b[U>>1]|256;X=Z}}while(0);d:do{if((I&8388608|0)==0){da=0}else{Z=ew(E,78880)|0;do{if((Z|0)==0){ea=0}else{if((a[Z]|0)==0){ea=0;break}ea=fk(Z,E)|0}}while(0);Z=ew(E,168888)|0;do{if((Z|0)==0){A=105}else{if((a[Z]|0)==0){A=105;break}ca=D+260|0;b[ca>>1]=b[ca>>1]|64;c[D+244>>2]=fk(Z,E)|0}}while(0);do{if((A|0)==105){if((ea|0)==0){break}c[D+244>>2]=Lb(ea|0)|0}}while(0);Z=ew(E,168536)|0;do{if((Z|0)==0){A=110}else{if((a[Z]|0)==0){A=110;break}c[D+248>>2]=fk(Z,E)|0}}while(0);do{if((A|0)==110){if((ea|0)==0){break}c[D+248>>2]=Lb(ea|0)|0}}while(0);Z=ew(E,168152)|0;do{if((Z|0)==0){A=115}else{if((a[Z]|0)==0){A=115;break}c[D+252>>2]=fk(Z,E)|0;ca=D+260|0;b[ca>>1]=b[ca>>1]|16}}while(0);do{if((A|0)==115){if((ea|0)==0){break}c[D+252>>2]=Lb(ea|0)|0}}while(0);Z=ew(E,167432)|0;do{if((Z|0)!=0){if((a[Z]|0)==0){break}ca=D+260|0;b[ca>>1]=b[ca>>1]|32;c[D+256>>2]=fk(Z,E)|0;da=ea;break d}}while(0);if((ea|0)==0){da=0;break}c[D+256>>2]=Lb(ea|0)|0;da=ea}}while(0);e:do{if((I&4194304|0)!=0){ea=ew(E,166968)|0;if((ea|0)==0){A=125}else{if((a[ea]|0)==0){A=125}else{fa=ea;A=127}}do{if((A|0)==125){ea=ew(E,166528)|0;if((ea|0)!=0){if((a[ea]|0)!=0){fa=ea;A=127;break}}ea=c[D+192>>2]|0;if((ea|0)==0){break}c[D+228>>2]=Lb(ea|0)|0}}while(0);if((A|0)==127){c[D+228>>2]=fk(fa,E)|0;ea=D+260|0;b[ea>>1]=b[ea>>1]|1}ea=ew(E,166176)|0;do{if((ea|0)==0){A=133}else{if((a[ea]|0)==0){A=133;break}c[D+232>>2]=fk(ea,E)|0;Z=D+260|0;b[Z>>1]=b[Z>>1]|8}}while(0);do{if((A|0)==133){ea=c[D+192>>2]|0;if((ea|0)==0){break}c[D+232>>2]=Lb(ea|0)|0}}while(0);ea=ew(E,165800)|0;do{if((ea|0)==0){A=138}else{if((a[ea]|0)==0){A=138;break}c[D+236>>2]=fk(ea,E)|0;Z=D+260|0;b[Z>>1]=b[Z>>1]|2}}while(0);do{if((A|0)==138){ea=c[D+200>>2]|0;if((ea|0)==0){break}c[D+236>>2]=Lb(ea|0)|0}}while(0);ea=ew(E,165472)|0;do{if((ea|0)!=0){if((a[ea]|0)==0){break}c[D+240>>2]=fk(ea,E)|0;Z=D+260|0;b[Z>>1]=b[Z>>1]|4;break e}}while(0);ea=c[D+204>>2]|0;if((ea|0)==0){break}c[D+240>>2]=Lb(ea|0)|0}}while(0);eF(X);eF(da);do{if((I&4259840|0)!=0){da=c[(c[x>>2]|0)+8>>2]|0;if((da|0)==0){break}if((c[D+208>>2]|0)==0){if((c[D+228>>2]|0)==0){break}}if((I&524288|0)==0){break}N=+h[(c[G>>2]|0)+152>>3]*.5;M=N>2.0?N:2.0;X=c[da+4>>2]|0;if((X|0)>0){fa=da|0;da=r;ea=s;Z=t;ca=r|0;ba=r+16|0;aa=r+32|0;_=r+48|0;Y=0;u=0;J=0;U=0;while(1){S=c[fa>>2]|0;O=kk(24)|0;R=O;c[O+16>>2]=1;C=(c[S+(U*48|0)+4>>2]|0)-1|0;P=(C|0)/3|0;if((C|0)>2){C=S+(U*48|0)|0;S=R;z=0;do{Q=z*3|0;ga=c[C>>2]|0;ha=ga+(Q<<4)|0;c[da>>2]=c[ha>>2];c[da+4>>2]=c[ha+4>>2];c[da+8>>2]=c[ha+8>>2];c[da+12>>2]=c[ha+12>>2];ha=ga+(Q+1<<4)|0;c[ba>>2]=c[ha>>2];c[ba+4>>2]=c[ha+4>>2];c[ba+8>>2]=c[ha+8>>2];c[ba+12>>2]=c[ha+12>>2];ha=ga+(Q+2<<4)|0;c[aa>>2]=c[ha>>2];c[aa+4>>2]=c[ha+4>>2];c[aa+8>>2]=c[ha+8>>2];c[aa+12>>2]=c[ha+12>>2];ha=ga+(Q+3<<4)|0;c[_>>2]=c[ha>>2];c[_+4>>2]=c[ha+4>>2];c[_+8>>2]=c[ha+8>>2];c[_+12>>2]=c[ha+12>>2];S=ki(ca,S)|0;z=z+1|0;}while((z|0)<(P|0))}if((O|0)==0){ia=J;ja=u;ka=Y}else{P=0;z=R;S=0;C=J;ha=u;Q=Y;while(1){ga=c[z+16>>2]|0;la=s+(S<<4)|0;ma=t+(S<<4)|0;N=+h[z>>3];L=+h[z+8>>3];do{if((P|0)==0){na=+h[ga>>3];oa=+h[ga+8>>3];pa=na;qa=oa;ra=N*2.0-na;sa=L*2.0-oa}else{oa=+h[P>>3];na=+h[P+8>>3];if((ga|0)==0){pa=N*2.0-oa;qa=L*2.0-na;ra=oa;sa=na;break}else{pa=+h[ga>>3];qa=+h[ga+8>>3];ra=oa;sa=na;break}}}while(0);na=+$(+(sa-L),+(ra-N));oa=+$(+(qa-L),+(pa-N))-na;if(oa>0.0){ta=oa+ -6.283185307179586}else{ta=oa}oa=na+ta*.5;na=M*+V(oa);ua=M*+W(oa);h[la>>3]=N+na;h[s+(S<<4)+8>>3]=L+ua;h[ma>>3]=N-na;h[t+(S<<4)+8>>3]=L-ua;va=S+1|0;wa=(ga|0)==0;if(wa|(va|0)==50){xa=va<<1;ya=xa-1|0;if((C|0)>0){za=0;Aa=0;do{za=(c[ha+(Aa<<2)>>2]|0)+za|0;Aa=Aa+1|0;}while((Aa|0)<(C|0));Ba=za;Ca=(C|0)>1?C:1}else{Ba=0;Ca=0}Aa=C+1|0;Da=mk(ha,Aa<<2)|0;c[Da+(Ca<<2)>>2]=xa;Ea=mk(Q,Ba+xa<<4)|0;do{if((S|0)>-1){Fa=ya+Ba|0;Ga=Ea+(Ba<<4)|0;c[Ga>>2]=c[ea>>2];c[Ga+4>>2]=c[ea+4>>2];c[Ga+8>>2]=c[ea+8>>2];c[Ga+12>>2]=c[ea+12>>2];Ga=Ea+(Fa<<4)|0;c[Ga>>2]=c[Z>>2];c[Ga+4>>2]=c[Z+4>>2];c[Ga+8>>2]=c[Z+8>>2];c[Ga+12>>2]=c[Z+12>>2];if((S|0)>0){Ha=1}else{break}do{Ga=Ea+(Ha+Ba<<4)|0;Ia=s+(Ha<<4)|0;c[Ga>>2]=c[Ia>>2];c[Ga+4>>2]=c[Ia+4>>2];c[Ga+8>>2]=c[Ia+8>>2];c[Ga+12>>2]=c[Ia+12>>2];Ia=Ea+(Fa-Ha<<4)|0;Ga=t+(Ha<<4)|0;c[Ia>>2]=c[Ga>>2];c[Ia+4>>2]=c[Ga+4>>2];c[Ia+8>>2]=c[Ga+8>>2];c[Ia+12>>2]=c[Ga+12>>2];Ha=Ha+1|0;}while((Ha|0)<(va|0))}}while(0);ya=la;c[ea>>2]=c[ya>>2];c[ea+4>>2]=c[ya+4>>2];c[ea+8>>2]=c[ya+8>>2];c[ea+12>>2]=c[ya+12>>2];ya=ma;c[Z>>2]=c[ya>>2];c[Z+4>>2]=c[ya+4>>2];c[Z+8>>2]=c[ya+8>>2];c[Z+12>>2]=c[ya+12>>2];Ja=1;Ka=Aa;Ma=Da;Na=Ea}else{Ja=va;Ka=C;Ma=ha;Na=Q}if(wa){Oa=R;break}else{P=z;z=ga;S=Ja;C=Ka;ha=Ma;Q=Na}}while(1){Q=c[Oa+16>>2]|0;eF(Oa);if((Q|0)==0){ia=Ka;ja=Ma;ka=Na;break}else{Oa=Q}}}Q=U+1|0;if((Q|0)<(X|0)){Y=ka;u=ja;J=ia;U=Q}else{Pa=ka;Qa=ja;Ra=ia;break}}}else{Pa=0;Qa=0;Ra=0}c[D+276>>2]=Ra;c[D+280>>2]=Qa;if((I&8192|0)==0){if((Ra|0)>0){U=0;J=0;while(1){u=(c[Qa+(U<<2)>>2]|0)+J|0;Y=U+1|0;if((Y|0)<(Ra|0)){U=Y;J=u}else{Sa=u;break}}}else{Sa=0}RA(f,Pa,Pa,Sa)|0}c[D+284>>2]=Pa;c[D+264>>2]=2;c[D+272>>2]=Pa;c[D+268>>2]=c[Qa>>2]}}while(0);eB(f,j);Qa=c[D+208>>2]|0;if((Qa|0)==0){if((b[D+260>>1]&1)!=0){A=181}}else{A=181}if((A|0)==181){gB(f,Qa,c[D+228>>2]|0,c[D+244>>2]|0,c[D+212>>2]|0)}D=q;ta=+h[(c[G>>2]|0)+152>>3];Ch(ew(E,148552)|0);f:do{if((c[(c[x>>2]|0)+8>>2]|0)!=0){pa=+Fm(E,c[53820]|0,1.0,0.0);Qa=Hm(E,c[53816]|0,213440)|0;Pa=(H|0)!=0;g:do{if(Pa){Sa=c[H>>2]|0;if((Sa|0)==0){Ta=0;break}else{Ua=H;Va=Sa}while(1){Sa=Ua+4|0;if((a[Va]|0)==116){if((Ya(Va|0,87744)|0)==0){Ta=1;break g}}Ra=c[Sa>>2]|0;if((Ra|0)==0){Ta=0;break}else{Ua=Sa;Va=Ra}}}else{Ta=0}}while(0);Ra=Qa;Sa=0;I=0;while(1){ia=a[Ra]|0;if((ia<<24>>24|0)==58){Wa=Sa+1|0;Xa=I}else if((ia<<24>>24|0)==59){Wa=Sa;Xa=I+1|0}else if((ia<<24>>24|0)==0){break}else{Wa=Sa;Xa=I}Ra=Ra+1|0;Sa=Wa;I=Xa}Ra=(Sa|0)==0;do{if((I|0)==0|Ra){Za=Qa}else{ia=l;ja=m;ka=o;Oa=Lh(Qa,Sa+1|0,p)|0;if((Oa|0)>1){Na=Hx(c[((c[w>>2]&3|0)==3?j:y)+28>>2]|0)|0;Ma=$w(c[((c[w>>2]&3|0)==3?j:y)+28>>2]|0)|0;Ka=(Nw(Na)|0)!=0;Na=$w(c[((c[w>>2]&3|0)==2?j:B)+28>>2]|0)|0;Fv(3,84552,(K=i,i=i+24|0,c[K>>2]=Ma,c[K+8>>2]=Ka?84144:83704,c[K+16>>2]=Na,K)|0)|0;i=K;if((Oa|0)==2){Za=159752;break}}else{if((Oa|0)==1){Za=159752;break}}Oa=c[(c[x>>2]|0)+8>>2]|0;if((c[Oa+4>>2]|0)>0){Na=l+8|0;Ka=l+12|0;Ma=l+32|0;Ja=l+4|0;Ha=l|0;t=l+16|0;s=m|0;Ba=n|0;Ca=n+4|0;r=o|0;J=o+4|0;U=c[p>>2]|0;u=U+8|0;Y=0;X=0;Z=Oa;while(1){Oa=(c[Z>>2]|0)+(Y*48|0)|0;c[ia>>2]=c[Oa>>2];c[ia+4>>2]=c[Oa+4>>2];c[ia+8>>2]=c[Oa+8>>2];c[ia+12>>2]=c[Oa+12>>2];c[ia+16>>2]=c[Oa+16>>2];c[ia+20>>2]=c[Oa+20>>2];c[ia+24>>2]=c[Oa+24>>2];c[ia+28>>2]=c[Oa+28>>2];c[ia+32>>2]=c[Oa+32>>2];c[ia+36>>2]=c[Oa+36>>2];c[ia+40>>2]=c[Oa+40>>2];c[ia+44>>2]=c[Oa+44>>2];Oa=c[u>>2]|0;ea=c[Oa>>2]|0;h:do{if((ea|0)==0){_a=X}else{ca=X;qa=1.0;_=1;aa=Oa;ba=ea;i:while(1){da=aa+4|0;ra=+g[da>>2];do{if(ra<1.0e-5&ra>-1.0e-5){$a=_;ab=qa;bb=ca}else{lB(f,ba);sa=+g[da>>2];M=qa-sa;cb=c[aa>>2]|0;if((_|0)!=0){ji(l,sa,n,o);fa=c[Ba>>2]|0;tB(f,fa,c[Ca>>2]|0,0,0,0);eF(fa);if(M<1.0e-5&M>-1.0e-5){A=204;break i}else{$a=0;ab=M;bb=cb;break}}if(M<1.0e-5&M>-1.0e-5){A=206;break i}c[ja>>2]=c[ka>>2];c[ja+4>>2]=c[ka+4>>2];c[ja+8>>2]=c[ka+8>>2];c[ja+12>>2]=c[ka+12>>2];c[ja+16>>2]=c[ka+16>>2];c[ja+20>>2]=c[ka+20>>2];c[ja+24>>2]=c[ka+24>>2];c[ja+28>>2]=c[ka+28>>2];c[ja+32>>2]=c[ka+32>>2];c[ja+36>>2]=c[ka+36>>2];c[ja+40>>2]=c[ka+40>>2];c[ja+44>>2]=c[ka+44>>2];sa=+g[da>>2];ji(m,sa/(M+sa),n,o);eF(c[s>>2]|0);fa=c[Ba>>2]|0;tB(f,fa,c[Ca>>2]|0,0,0,0);eF(fa);$a=0;ab=M;bb=cb}}while(0);da=aa+12|0;fa=c[da>>2]|0;if((fa|0)==0){_a=bb;break h}else{ca=bb;qa=ab;_=$a;aa=da;ba=fa}}if((A|0)==204){A=0;eF(c[r>>2]|0);_a=cb;break}else if((A|0)==206){A=0;ba=c[r>>2]|0;tB(f,ba,c[J>>2]|0,0,0,0);eF(ba);_a=cb;break}}}while(0);if((c[Na>>2]|0)!=0){lB(f,c[c[u>>2]>>2]|0);nB(f,c[c[u>>2]>>2]|0);qh(f,2,t,c[Ha>>2]|0,pa,ta,c[Na>>2]|0)}if((c[Ka>>2]|0)!=0){lB(f,_a);nB(f,_a);qh(f,3,Ma,(c[Ha>>2]|0)+((c[Ja>>2]|0)-1<<4)|0,pa,ta,c[Ka>>2]|0)}ea=c[(c[x>>2]|0)+8>>2]|0;Oa=c[ea+4>>2]|0;do{if((Oa|0)>1){if((c[Na>>2]|0)==0){if((c[Ka>>2]|0)==0|F){db=ea;eb=Oa;break}}else{if(F){db=ea;eb=Oa;break}}pB(f,H);ga=c[(c[x>>2]|0)+8>>2]|0;db=ga;eb=c[ga+4>>2]|0}else{db=ea;eb=Oa}}while(0);Oa=Y+1|0;if((Oa|0)<(eb|0)){Y=Oa;X=_a;Z=db}else{fb=U;break}}}else{fb=c[p>>2]|0}eF(fb);break f}}while(0);Qa=d[(c[x>>2]|0)+115|0]|0;do{if((Qa&1|0)==0){if((Qa&2|0)!=0){I=c[53764]|0;U=Im(E,I,ei(Za,139280)|0)|0;gb=U;hb=Im(E,c[53766]|0,136712)|0;A=229;break}if((Qa&8|0)!=0){U=c[53806]|0;I=Im(E,U,ei(Za,133792)|0)|0;gb=I;hb=Im(E,c[53808]|0,131744)|0;A=229;break}if((Qa&4|0)==0){ib=Im(E,c[53802]|0,Za)|0;jb=Za;break}else{I=c[53752]|0;U=Im(E,I,ei(Za,129560)|0)|0;gb=U;hb=Im(E,c[53754]|0,126280)|0;A=229;break}}else{U=c[53824]|0;I=Im(E,U,ei(Za,145328)|0)|0;gb=I;hb=Im(E,c[53826]|0,142384)|0;A=229}}while(0);do{if((A|0)==229){if((gb|0)==(Za|0)){ib=hb;jb=Za;break}lB(f,gb);ib=hb;jb=gb}}while(0);if((ib|0)!=(Za|0)){nB(f,ib)}if(Ta<<24>>24!=0){Qa=(a[jb]|0)==0?159752:jb;I=(a[ib]|0)==0?159752:ib;lB(f,118712);nB(f,Qa);U=c[c[(c[x>>2]|0)+8>>2]>>2]|0;c[D>>2]=c[U>>2];c[D+4>>2]=c[U+4>>2];c[D+8>>2]=c[U+8>>2];c[D+12>>2]=c[U+12>>2];c[D+16>>2]=c[U+16>>2];c[D+20>>2]=c[U+20>>2];c[D+24>>2]=c[U+24>>2];c[D+28>>2]=c[U+28>>2];c[D+32>>2]=c[U+32>>2];c[D+36>>2]=c[U+36>>2];c[D+40>>2]=c[U+40>>2];c[D+44>>2]=c[U+44>>2];U=c[53804]|0;do{if((U|0)==0){A=240}else{Z=fw(E,U)|0;X=a[Z]|0;if((X<<24>>24|0)==102){if((Ya(Z|0,86688)|0)==0){kb=6;break}else{A=240;break}}else if((X<<24>>24|0)==98){if((Ya(Z|0,85856)|0)==0){kb=8;break}if((Ya(Z|0,85384)|0)==0){kb=4;break}else{A=240;break}}else if((X<<24>>24|0)==110){if((Ya(Z|0,84920)|0)==0){kb=2;break}else{A=240;break}}else{A=240;break}}}while(0);if((A|0)==240){U=(Nw(Hx(c[((c[w>>2]&3|0)==2?j:B)+28>>2]|0)|0)|0)!=0;kb=U?6:2}U=rm(q,kb,ta,0,0)|0;Z=U+8|0;rB(f,c[Z>>2]|0,c[U>>2]|0,1);if((U|0)!=0){eF(c[Z>>2]|0);eF(U)}lB(f,Qa);if((I|0)!=(Qa|0)){nB(f,I)}U=c[q+8>>2]|0;if((U|0)!=0){qh(f,2,q+16|0,c[q>>2]|0,pa,ta,U)}U=c[q+12>>2]|0;if((U|0)==0){break}qh(f,3,q+32|0,(c[q>>2]|0)+((c[q+4>>2]|0)-1<<4)|0,pa,ta,U);break}U=c[x>>2]|0;if(Ra){do{if((a[U+115|0]&3)==0){if((a[jb]|0)!=0){lB(f,jb);nB(f,ib);break}lB(f,159752);if((a[ib]|0)==0){nB(f,159752);break}else{nB(f,ib);break}}}while(0);Ra=c[(c[x>>2]|0)+8>>2]|0;if((c[Ra+4>>2]|0)<=0){break}I=q|0;Qa=q+4|0;Z=q+8|0;X=q+12|0;Y=Pa^1;Ka=q+32|0;Na=q+16|0;if(Pa){Ja=0;Ha=Ra;while(1){Ma=(c[Ha>>2]|0)+(Ja*48|0)|0;c[D>>2]=c[Ma>>2];c[D+4>>2]=c[Ma+4>>2];c[D+8>>2]=c[Ma+8>>2];c[D+12>>2]=c[Ma+12>>2];c[D+16>>2]=c[Ma+16>>2];c[D+20>>2]=c[Ma+20>>2];c[D+24>>2]=c[Ma+24>>2];c[D+28>>2]=c[Ma+28>>2];c[D+32>>2]=c[Ma+32>>2];c[D+36>>2]=c[Ma+36>>2];c[D+40>>2]=c[Ma+40>>2];c[D+44>>2]=c[Ma+44>>2];Ma=c[I>>2]|0;t=c[Qa>>2]|0;do{if((c[v>>2]&16384|0)==0){tB(f,Ma,t,0,0,0);u=c[Z>>2]|0;if((u|0)!=0){qh(f,2,Na,c[I>>2]|0,pa,ta,u)}u=c[X>>2]|0;if((u|0)!=0){qh(f,3,Ka,(c[I>>2]|0)+((c[Qa>>2]|0)-1<<4)|0,pa,ta,u)}if((c[(c[(c[x>>2]|0)+8>>2]|0)+4>>2]|0)<=1){break}if((c[Z>>2]|0)==0){if((c[X>>2]|0)==0|Y){break}}pB(f,H)}else{tB(f,Ma,t,c[Z>>2]|0,c[X>>2]|0,0)}}while(0);Ja=Ja+1|0;Ha=c[(c[x>>2]|0)+8>>2]|0;if((Ja|0)>=(c[Ha+4>>2]|0)){break f}}}else{Ha=0;Ja=Ra;while(1){Pa=(c[Ja>>2]|0)+(Ha*48|0)|0;c[D>>2]=c[Pa>>2];c[D+4>>2]=c[Pa+4>>2];c[D+8>>2]=c[Pa+8>>2];c[D+12>>2]=c[Pa+12>>2];c[D+16>>2]=c[Pa+16>>2];c[D+20>>2]=c[Pa+20>>2];c[D+24>>2]=c[Pa+24>>2];c[D+28>>2]=c[Pa+28>>2];c[D+32>>2]=c[Pa+32>>2];c[D+36>>2]=c[Pa+36>>2];c[D+40>>2]=c[Pa+40>>2];c[D+44>>2]=c[Pa+44>>2];Pa=c[I>>2]|0;t=c[Qa>>2]|0;do{if((c[v>>2]&16384|0)==0){tB(f,Pa,t,0,0,0);Ma=c[Z>>2]|0;if((Ma|0)!=0){qh(f,2,Na,c[I>>2]|0,pa,ta,Ma)}Ma=c[X>>2]|0;if((Ma|0)!=0){qh(f,3,Ka,(c[I>>2]|0)+((c[Qa>>2]|0)-1<<4)|0,pa,ta,Ma)}if((c[(c[(c[x>>2]|0)+8>>2]|0)+4>>2]|0)<=1){break}if((c[Z>>2]|0)!=0){break}if((c[X>>2]|0)==0|Y){break}pB(f,0)}else{tB(f,Pa,t,c[Z>>2]|0,c[X>>2]|0,0)}}while(0);Ha=Ha+1|0;Ja=c[(c[x>>2]|0)+8>>2]|0;if((Ha|0)>=(c[Ja+4>>2]|0)){break f}}}}Ja=U+8|0;Ha=c[Ja>>2]|0;X=c[Ha+4>>2]|0;Z=X*48|0;Y=dF(Z)|0;Qa=Y;I=dF(Z)|0;Z=I;qa=+(Sa+2|0)*.5;Ka=(X|0)>0;j:do{if(Ka){Na=q+4|0;Ra=q|0;ra=0.0;M=0.0;t=0;Pa=Ha;while(1){Ma=(c[Pa>>2]|0)+(t*48|0)|0;c[D>>2]=c[Ma>>2];c[D+4>>2]=c[Ma+4>>2];c[D+8>>2]=c[Ma+8>>2];c[D+12>>2]=c[Ma+12>>2];c[D+16>>2]=c[Ma+16>>2];c[D+20>>2]=c[Ma+20>>2];c[D+24>>2]=c[Ma+24>>2];c[D+28>>2]=c[Ma+28>>2];c[D+32>>2]=c[Ma+32>>2];c[D+36>>2]=c[Ma+36>>2];c[D+40>>2]=c[Ma+40>>2];c[D+44>>2]=c[Ma+44>>2];Ma=c[Na>>2]|0;c[Qa+(t*48|0)+4>>2]=Ma;c[Z+(t*48|0)+4>>2]=Ma;u=Ma<<4;J=dF(u)|0;r=J;c[Qa+(t*48|0)>>2]=r;Ca=dF(u)|0;c[Z+(t*48|0)>>2]=Ca;u=c[Ra>>2]|0;sa=+h[u>>3];L=+h[u+8>>3];Ba=Ma-1|0;if((Ba|0)>0){Ma=J+8|0;N=ra;ua=M;na=L;oa=sa;J=0;while(1){s=J+1|0;lb=+h[u+(s<<4)>>3];mb=+h[u+(s<<4)+8>>3];ka=r+(J<<4)|0;if((J|0)==0){nb=oa-lb;ob=na-mb;pb=2.0/+T(nb*nb+ob*ob+1.0e-4);qb=ob*pb;h[ka>>3]=qb;h[Ma>>3]=-0.0-nb*pb;rb=qb}else{qb=ua-lb;pb=N-mb;nb=2.0/+T(qb*qb+pb*pb+1.0e-4);ob=pb*nb;h[ka>>3]=ob;h[r+(J<<4)+8>>3]=-0.0-qb*nb;rb=ob}ka=J+2|0;ob=+h[u+(ka<<4)>>3];nb=+h[u+(ka<<4)+8>>3];ja=J+3|0;qb=+h[u+(ja<<4)>>3];pb=+h[u+(ja<<4)+8>>3];ia=r+(s<<4)|0;Oa=r+(ka<<4)|0;sb=lb-ob;tb=mb-nb;ub=+T(sb*sb+tb*tb);if(ub<1.0e-4){vb=oa-qb;wb=na-pb;xb=wb;yb=vb;zb=+T(vb*vb+wb*wb+1.0e-4)}else{xb=tb;yb=sb;zb=ub}ub=2.0/zb;sb=xb*ub;tb=-0.0-yb*ub;ea=Oa;h[Oa>>3]=sb;h[r+(ka<<4)+8>>3]=tb;Oa=ia;c[Oa>>2]=c[ea>>2];c[Oa+4>>2]=c[ea+4>>2];c[Oa+8>>2]=c[ea+8>>2];c[Oa+12>>2]=c[ea+12>>2];h[Ca+(J<<4)>>3]=oa-qa*rb;h[Ca+(J<<4)+8>>3]=na-qa*+h[r+(J<<4)+8>>3];h[Ca+(s<<4)>>3]=lb-qa*+h[ia>>3];h[Ca+(s<<4)+8>>3]=mb-qa*+h[r+(s<<4)+8>>3];h[Ca+(ka<<4)>>3]=ob-qa*sb;h[Ca+(ka<<4)+8>>3]=nb-qa*tb;if((ja|0)<(Ba|0)){N=nb;ua=ob;na=pb;oa=qb;J=ja}else{Ab=nb;Bb=ob;Cb=pb;Db=qb;Eb=ja;break}}}else{Ab=ra;Bb=M;Cb=L;Db=sa;Eb=0}oa=Bb-Db;na=Ab-Cb;ua=2.0/+T(oa*oa+na*na+1.0e-4);N=na*ua;na=-0.0-oa*ua;h[r+(Eb<<4)>>3]=N;h[r+(Eb<<4)+8>>3]=na;h[Ca+(Eb<<4)>>3]=Db-qa*N;h[Ca+(Eb<<4)+8>>3]=Cb-qa*na;J=t+1|0;if((J|0)>=(X|0)){break j}ra=Ab;M=Bb;t=J;Pa=c[Ja>>2]|0}}}while(0);Ja=Lb(jb|0)|0;Ha=La(Ja|0,87264)|0;if((Ha|0)==0){Fb=jb;Gb=jb}else{Sa=jb;U=jb;Pa=jb;t=Ha;Ha=0;while(1){Ra=(a[t]|0)==0?159752:t;do{if((Ra|0)==(Pa|0)){Hb=Pa}else{if((a[(c[x>>2]|0)+115|0]&3)!=0){Hb=Ra;break}lB(f,Ra);nB(f,Ra);Hb=Ra}}while(0);Na=(Ha|0)==0;J=Na?Ra:Sa;Ba=(Ha|0)==1?Ra:Na?Ra:U;if(Ka){Na=0;do{u=c[Z+(Na*48|0)>>2]|0;Ma=c[Qa+(Na*48|0)>>2]|0;ja=c[Z+(Na*48|0)+4>>2]|0;if((ja|0)>0){ka=0;do{s=u+(ka<<4)|0;h[s>>3]=+h[Ma+(ka<<4)>>3]+ +h[s>>3];s=u+(ka<<4)+8|0;h[s>>3]=+h[Ma+(ka<<4)+8>>3]+ +h[s>>3];ka=ka+1|0;}while((ka|0)<(ja|0))}tB(f,u,ja,0,0,0);Na=Na+1|0;}while((Na|0)<(X|0))}Na=La(0,87264)|0;if((Na|0)==0){Fb=J;Gb=Ba;break}else{Sa=J;U=Ba;Pa=Hb;t=Na;Ha=Ha+1|0}}}Ha=q+8|0;t=c[Ha>>2]|0;if((t|0)==0){Ib=0}else{do{if((Gb|0)==0){Jb=0;Kb=t}else{if((a[(c[x>>2]|0)+115|0]&3)!=0){Jb=Gb;Kb=t;break}lB(f,Gb);nB(f,Gb);Jb=Gb;Kb=c[Ha>>2]|0}}while(0);qh(f,2,q+16|0,c[q>>2]|0,pa,ta,Kb);Ib=Jb}Ha=q+12|0;t=c[Ha>>2]|0;if((t|0)!=0){do{if((Ib|0)==(Fb|0)){Mb=t}else{if((a[(c[x>>2]|0)+115|0]&3)!=0){Mb=t;break}lB(f,Fb);nB(f,Fb);Mb=c[Ha>>2]|0}}while(0);qh(f,3,q+32|0,(c[q>>2]|0)+((c[q+4>>2]|0)-1<<4)|0,pa,ta,Mb)}eF(Ja);if(Ka){Ha=0;do{eF(c[Qa+(Ha*48|0)>>2]|0);eF(c[Z+(Ha*48|0)>>2]|0);Ha=Ha+1|0;}while((Ha|0)<(X|0))}eF(Y);eF(I)}}while(0);Mb=c[G>>2]|0;G=c[Mb+8>>2]|0;q=Mb+208|0;if((c[q>>2]|0)==0){if((b[Mb+260>>1]&1)!=0){A=316}}else{A=316}do{if((A|0)==316){hB(f);Fb=Mb+276|0;x=c[Fb>>2]|0;if((x|0)==0){break}Ib=Mb+280|0;if((x|0)<=1){break}x=c[Ib>>2]|0;Jb=Mb+268|0;Kb=Mb+284|0;Gb=Mb+272|0;Hb=Mb+228|0;jb=Mb+244|0;Eb=Mb+212|0;D=1;v=c[x>>2]|0;H=x;do{c[Jb>>2]=c[H+(D<<2)>>2];c[Gb>>2]=(c[Kb>>2]|0)+(v<<4);gB(f,c[q>>2]|0,c[Hb>>2]|0,c[jb>>2]|0,c[Eb>>2]|0);hB(f);H=c[Ib>>2]|0;v=(c[H+(D<<2)>>2]|0)+v|0;D=D+1|0;}while((D|0)<(c[Fb>>2]|0))}}while(0);c[Mb+268>>2]=0;c[Mb+272>>2]=0;q=G+8|0;A=c[q>>2]|0;Fb=c[A+8>>2]|0;if((Fb|0)==0){Nb=A;Ob=Mb+260|0}else{A=c[Fb>>2]|0;Fb=c[A>>2]|0;if((c[A+8>>2]|0)==0){Pb=Fb|0;Qb=Fb+8|0}else{Pb=A+16|0;Qb=A+24|0}A=Mb+260|0;Fb=b[A>>1]|0;bi(f,+h[Pb>>3],+h[Qb>>3],Fb<<8<<16>>16>>15&255,c[Mb+220>>2]|0,Fb<<14<<16>>16>>15&255,Fb<<11<<16>>16>>15&255);Fb=c[(c[q>>2]|0)+8>>2]|0;Qb=(c[Fb+4>>2]|0)-1|0;Pb=c[Fb>>2]|0;Fb=Pb+(Qb*48|0)+16|0;if((c[Pb+(Qb*48|0)+12>>2]|0)==0){D=c[Pb+(Qb*48|0)>>2]|0;v=(c[Pb+(Qb*48|0)+4>>2]|0)-1|0;Rb=D+(v<<4)|0;Sb=D+(v<<4)+8|0}else{Rb=Fb+16|0;Sb=Fb+24|0}Fb=b[A>>1]|0;bi(f,+h[Rb>>3],+h[Sb>>3],Fb<<7<<16>>16>>15&255,c[Mb+224>>2]|0,Fb<<13<<16>>16>>15&255,Fb<<10<<16>>16>>15&255);Nb=c[q>>2]|0;Ob=A}A=c[Nb+96>>2]|0;Nb=b[Ob>>1]<<12<<16>>16>>15<<16>>16;Fb=Mb+216|0;Sb=c[Fb>>2]|0;Rb=Mb+232|0;v=c[Rb>>2]|0;D=Mb+248|0;Qb=c[D>>2]|0;Pb=Mb+212|0;H=c[Pb>>2]|0;Ib=G|0;if((Km(Hm(Ib,c[53810]|0,90608)|0)|0)<<24>>24==0){Tb=0}else{Tb=c[(c[q>>2]|0)+8>>2]|0}ci(f,A,11,Nb,Sb,v,Qb,H,Tb);Tb=c[(c[q>>2]|0)+108>>2]|0;H=b[Ob>>1]<<12<<16>>16>>15<<16>>16;Qb=c[Fb>>2]|0;Fb=c[Rb>>2]|0;Rb=c[D>>2]|0;D=c[Pb>>2]|0;if((Km(Hm(Ib,c[53810]|0,90608)|0)|0)<<24>>24==0){Ub=0}else{Ub=c[(c[q>>2]|0)+8>>2]|0}ci(f,Tb,11,H,Qb,Fb,Rb,D,Ub);ci(f,c[(c[q>>2]|0)+100>>2]|0,7,b[Ob>>1]<<13<<16>>16>>15<<16>>16,c[Mb+224>>2]|0,c[Mb+240>>2]|0,c[Mb+256>>2]|0,c[Pb>>2]|0,0);ci(f,c[(c[q>>2]|0)+104>>2]|0,6,b[Ob>>1]<<14<<16>>16>>15<<16>>16,c[Mb+220>>2]|0,c[Mb+236>>2]|0,c[Mb+252>>2]|0,c[Pb>>2]|0,0);fB(f);Gh(f);i=k;return}function Yh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;d=i;i=i+144|0;e=d+128|0;if(!(a[14792]|0)){Iv(175216,128,176872);a[14792]=1}Iv(e,128,d|0);f=e+4|0;g=e+8|0;h=e|0;j=0;k=0;l=b;a:while(1){m=j;n=l;while(1){o=a[n]|0;b:do{if(o<<24>>24==0){p=n;q=0}else{r=n;s=o;while(1){if((Qa(s<<24>>24|0)|0)==0){t=a[r]|0;if(t<<24>>24!=44){p=r;q=t;break b}}t=r+1|0;u=a[t]|0;if(u<<24>>24==0){p=t;q=0;break}else{r=t;s=u}}}}while(0);o=q<<24>>24;if((o|0)==0){v=30;break a}else if(!((o|0)==40|(o|0)==41)){w=p;x=q;v=10;break}s=p+1|0;if((o|0)==40){if(m<<24>>24==0){m=1;n=s;continue}else{v=16;break a}}else if((o|0)==41){if(m<<24>>24==0){v=18;break a}else{m=0;n=s;continue}}else{y=s;break}}c:do{if((v|0)==10){while(1){v=0;n=x<<24>>24;if((n|0)==40|(n|0)==41|(n|0)==44|(n|0)==0){y=w;break c}n=c[f>>2]|0;if(n>>>0<(c[g>>2]|0)>>>0){z=n}else{Jv(e,1)|0;z=c[f>>2]|0}c[f>>2]=z+1;a[z]=x;n=w+1|0;w=n;x=a[n]|0;v=10}}}while(0);if(m<<24>>24==0){if((k|0)==63){v=21;break}n=c[43805]|0;if(n>>>0<(c[43806]|0)>>>0){A=n}else{Jv(175216,1)|0;A=c[43805]|0}c[43805]=A+1;a[A]=0;c[176472+(k<<2)>>2]=c[43805];B=k+1|0}else{B=k}n=c[f>>2]|0;if(n>>>0<(c[g>>2]|0)>>>0){C=n}else{Jv(e,1)|0;C=c[f>>2]|0}a[C]=0;n=c[h>>2]|0;c[f>>2]=n;Lv(175216,n)|0;n=c[43805]|0;if(n>>>0<(c[43806]|0)>>>0){D=n}else{Jv(175216,1)|0;D=c[43805]|0}c[43805]=D+1;a[D]=0;j=m;k=B;l=y}if((v|0)==16){Fv(1,116872,(E=i,i=i+8|0,c[E>>2]=b,E)|0)|0;i=E;c[44118]=0;Mv(e);i=d;return 176472}else if((v|0)==18){Fv(1,115968,(E=i,i=i+8|0,c[E>>2]=b,E)|0)|0;i=E;c[44118]=0;Mv(e);i=d;return 176472}else if((v|0)==21){Fv(0,114648,(E=i,i=i+8|0,c[E>>2]=b,E)|0)|0;i=E;c[44181]=0;Mv(e);i=d;return 176472}else if((v|0)==30){if(m<<24>>24!=0){Fv(1,113800,(E=i,i=i+8|0,c[E>>2]=b,E)|0)|0;i=E;c[44118]=0;Mv(e);i=d;return 176472}c[176472+(k<<2)>>2]=0;Mv(e);e=c[43805]|0;if(e>>>0<(c[43806]|0)>>>0){F=e}else{Jv(175216,1)|0;F=c[43805]|0}a[F]=0;c[43805]=c[43804];i=d;return 176472}return 0}function Zh(a){a=a|0;var b=0;b=c[44736]|0;if((a|0)!=0){c[44736]=b+1;if((b|0)!=0){return}c[44734]=Lb(Ab(1,0)|0)|0;Ab(1,113248)|0;return}if((b|0)<=0){return}a=b-1|0;c[44736]=a;if((a|0)!=0){return}Ab(1,c[44734]|0)|0;eF(c[44734]|0);return}function _h(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0.0,ba=0.0,ca=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,Ma=0,Na=0,Oa=0,Pa=0.0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0.0,Ua=0,Va=0,Wa=0.0,Xa=0.0,Za=0.0,_a=0.0,$a=0,ab=0,bb=0.0,cb=0.0,db=0.0,eb=0.0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0.0,ob=0.0,pb=0.0,qb=0.0,rb=0.0,sb=0.0,tb=0.0;e=i;i=i+232|0;f=e|0;g=e+8|0;j=e+16|0;k=e+24|0;l=e+32|0;m=e+40|0;n=e+48|0;p=e+56|0;q=e+104|0;r=e+136|0;s=e+168|0;t=e+200|0;if((a[213992]|0)!=0){ym()}u=d+8|0;if((c[(c[u>>2]|0)+8>>2]|0)==0){Fv(1,112688,(v=i,i=i+1|0,i=i+7&-8,c[v>>2]=0,v)|0)|0;i=v;if((a[213992]|0)==0){w=-1;i=e;return w|0}x=c[o>>2]|0;y=$w(d|0)|0;z=+zm();gc(x|0,112248,(v=i,i=i+16|0,c[v>>2]=y,h[v+8>>3]=z,v)|0)|0;i=v;w=-1;i=e;return w|0}y=ux(d)|0;a:do{if((y|0)!=0){x=p;A=q|0;B=q+8|0;C=q+16|0;D=q+24|0;E=r|0;F=r+8|0;G=r+16|0;H=r+24|0;I=p+8|0;J=p+12|0;K=p+32|0;L=p+4|0;M=p|0;N=t|0;O=t+8|0;P=t+16|0;Q=t+24|0;R=p+16|0;S=s|0;T=s+8|0;U=s+16|0;V=s+24|0;W=y;b:while(1){X=W+8|0;Y=c[X>>2]|0;h[Y+48>>3]=+h[Y+16>>3]- +h[Y+88>>3];Y=c[X>>2]|0;h[Y+56>>3]=+h[Y+24>>3]- +h[Y+80>>3]*.5;Y=c[X>>2]|0;h[Y+64>>3]=+h[Y+16>>3]+ +h[Y+96>>3];Y=c[X>>2]|0;h[Y+72>>3]=+h[Y+24>>3]+ +h[Y+80>>3]*.5;Y=mw(d,W)|0;if((Y|0)!=0){X=Y;do{Y=c[(c[X+8>>2]|0)+8>>2]|0;if((Y|0)!=0){Z=Y+4|0;if((c[Z>>2]|0)<=0){break b}_=Y|0;$=c[_>>2]|0;c[x>>2]=c[$>>2];c[x+4>>2]=c[$+4>>2];c[x+8>>2]=c[$+8>>2];c[x+12>>2]=c[$+12>>2];c[x+16>>2]=c[$+16>>2];c[x+20>>2]=c[$+20>>2];c[x+24>>2]=c[$+24>>2];c[x+28>>2]=c[$+28>>2];c[x+32>>2]=c[$+32>>2];c[x+36>>2]=c[$+36>>2];c[x+40>>2]=c[$+40>>2];c[x+44>>2]=c[$+44>>2];ai(q,p);z=+h[A>>3];aa=+h[B>>3];ba=+h[C>>3];ca=+h[D>>3];if((c[Z>>2]|0)>0){$=0;ea=ca;fa=ba;ga=aa;ha=z;while(1){if(($|0)>0){ia=(c[_>>2]|0)+($*48|0)|0;c[x>>2]=c[ia>>2];c[x+4>>2]=c[ia+4>>2];c[x+8>>2]=c[ia+8>>2];c[x+12>>2]=c[ia+12>>2];c[x+16>>2]=c[ia+16>>2];c[x+20>>2]=c[ia+20>>2];c[x+24>>2]=c[ia+24>>2];c[x+28>>2]=c[ia+28>>2];c[x+32>>2]=c[ia+32>>2];c[x+36>>2]=c[ia+36>>2];c[x+40>>2]=c[ia+40>>2];c[x+44>>2]=c[ia+44>>2];ai(r,p);ja=+h[E>>3];ka=+h[F>>3];la=+h[G>>3];ma=+h[H>>3];na=ha<ja?ha:ja;oa=ga<ka?ga:ka;pa=fa>la?fa:la;qa=ea>ma?ea:ma}else{na=ha;oa=ga;pa=fa;qa=ea}ia=c[I>>2]|0;if((ia|0)==0){ra=na;sa=oa;ta=pa;ua=qa}else{ph(s,R,c[M>>2]|0,1.0,ia);ma=+h[S>>3];la=+h[T>>3];ka=+h[U>>3];ja=+h[V>>3];ra=na<ma?na:ma;sa=oa<la?oa:la;ta=pa>ka?pa:ka;ua=qa>ja?qa:ja}ia=c[J>>2]|0;if((ia|0)==0){va=ra;wa=sa;xa=ta;ya=ua}else{ph(t,K,(c[M>>2]|0)+((c[L>>2]|0)-1<<4)|0,1.0,ia);ja=+h[N>>3];ka=+h[O>>3];la=+h[P>>3];ma=+h[Q>>3];va=ra<ja?ra:ja;wa=sa<ka?sa:ka;xa=ta>la?ta:la;ya=ua>ma?ua:ma}ia=$+1|0;if((ia|0)<(c[Z>>2]|0)){$=ia;ea=ya;fa=xa;ga=wa;ha=va}else{za=ya;Aa=xa;Ba=wa;Ca=va;break}}}else{za=ca;Aa=ba;Ba=aa;Ca=z}h[Y+8>>3]=Ca;h[Y+16>>3]=Ba;h[Y+24>>3]=Aa;h[Y+32>>3]=za;}X=ow(d,X)|0;}while((X|0)!=0)}W=vx(d,W)|0;if((W|0)==0){break a}}cc(94032,102832,3891,170496);return 0}}while(0);c[b+168>>2]=d;t=b+293|0;a[t]=0;s=d|0;p=ew(s,99560)|0;do{if((p|0)!=0){r=ac(p|0,99168,(v=i,i=i+16|0,c[v>>2]=m,c[v+8>>2]=n,v)|0)|0;i=v;if((r|0)<=0){break}za=+h[m>>3]*72.0;q=b+208|0;h[q>>3]=za;h[b+200>>3]=za;if((r|0)>1){h[q>>3]=+h[n>>3]*72.0}a[t]=1}}while(0);t=b+292|0;a[t]=0;p=ew(s,98736)|0;do{if((p|0)!=0){q=ac(p|0,99168,(v=i,i=i+16|0,c[v>>2]=m,c[v+8>>2]=n,v)|0)|0;i=v;if((q|0)<=0){break}za=+h[m>>3]*72.0;r=b+224|0;h[r>>3]=za;h[b+216>>3]=za;if((q|0)>1){h[r>>3]=+h[n>>3]*72.0}a[t]=1}}while(0);t=b+294|0;a[t]=0;n=b+232|0;m=(c[(c[u>>2]|0)+8>>2]|0)+48|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];m=c[(c[u>>2]|0)+8>>2]|0;do{if(+h[m+48>>3]>.001){if(+h[m+56>>3]<=.001){Da=m;break}a[t]=1;Da=c[(c[u>>2]|0)+8>>2]|0}else{Da=m}}while(0);c[b+288>>2]=(a[Da+81|0]|0)==0?0:90;Da=b+196|0;c[Da>>2]=98168;m=ew(s,97472)|0;do{if((m|0)!=0){if((a[m]|0)==0){break}c[Da>>2]=m}}while(0);m=b+256|0;Da=(c[u>>2]|0)+16|0;c[m>>2]=c[Da>>2];c[m+4>>2]=c[Da+4>>2];c[m+8>>2]=c[Da+8>>2];c[m+12>>2]=c[Da+12>>2];c[m+16>>2]=c[Da+16>>2];c[m+20>>2]=c[Da+20>>2];c[m+24>>2]=c[Da+24>>2];c[m+28>>2]=c[Da+28>>2];c[53714]=Wv(d,0,96360,0)|0;c[53716]=Wv(d,0,95840,0)|0;c[b+320>>2]=Im(0,c[53626]|0,95312)|0;h[b+328>>3]=+Fm(0,c[53624]|0,14.0,1.0);c[b+336>>2]=29704;c[b+188>>2]=$w(s)|0;Da=b+304|0;m=c[Da>>2]|0;if((m|0)!=0){eF(m);c[Da>>2]=0}m=b+308|0;t=c[m>>2]|0;if((t|0)!=0){eF(t);c[m>>2]=0}t=b+316|0;n=c[t>>2]|0;if((n|0)!=0){eF(n);c[t>>2]=0}n=ew(s,104872)|0;do{if((n|0)==0){c[m>>2]=0;c[b+312>>2]=1}else{p=ew(s,102120)|0;r=b+296|0;c[r>>2]=(p|0)==0?101368:p;p=ew(s,100968)|0;q=b+300|0;y=(p|0)==0?100504:p;c[q>>2]=y;p=sc(c[r>>2]|0,y|0)|0;if((p|0)!=0){Fv(0,99976,(v=i,i=i+8|0,c[v>>2]=a[p]|0,v)|0)|0;i=v;c[q>>2]=213440}q=Lb(n|0)|0;c[Da>>2]=q;p=La(q|0,c[r>>2]|0)|0;do{if((p|0)==0){Ea=0}else{q=0;y=p;W=0;while(1){Fa=q+1|0;if((q|0)<(W|0)){Ga=W;Ha=c[m>>2]|0}else{Q=W+128|0;P=c[m>>2]|0;if((P|0)==0){Ia=kk(Q<<2)|0}else{Ia=mk(P,Q<<2)|0}P=Ia;c[m>>2]=P;Ga=Q;Ha=P}c[Ha+(Fa<<2)>>2]=y;P=La(0,c[r>>2]|0)|0;if((P|0)==0){break}else{q=Fa;y=P;W=Ga}}if((Fa|0)==0){Ea=0;break}W=mk(c[m>>2]|0,(Fa<<2)+8|0)|0;c[m>>2]=W;c[W>>2]=0;c[(c[m>>2]|0)+(q+2<<2)>>2]=0;Ea=Fa}}while(0);r=b+312|0;c[r>>2]=Ea;p=ew(s,104368)|0;if((p|0)==0){break}if((a[p]|0)==0){break}W=kk((c[r>>2]<<2)+8|0)|0;y=W;P=c[r>>2]|0;do{if((P|0)<1){Ja=66}else{Q=1;O=0;N=P;while(1){if(($h(b,Q,N,p)|0)<<24>>24==0){Ka=O}else{L=O+1|0;c[y+(L<<2)>>2]=Q;Ka=L}L=c[r>>2]|0;if((Q|0)<(L|0)){Q=Q+1|0;O=Ka;N=L}else{break}}if((Ka|0)==0){Ja=66;break}c[y>>2]=Ka;c[y+(Ka+1<<2)>>2]=(c[r>>2]|0)+1;Ma=y}}while(0);if((Ja|0)==66){Fv(0,103720,(v=i,i=i+8|0,c[v>>2]=p,v)|0)|0;i=v;eF(W);Ma=0}c[t>>2]=Ma}}while(0);Ma=c[44736]|0;c[44736]=Ma+1;if((Ma|0)==0){c[44734]=Lb(Ab(1,0)|0)|0;Ab(1,113248)|0}Ma=DA(b)|0;c:do{if((Ma|0)!=0){t=b+56|0;Ka=b|0;Ea=b+184|0;Fa=b+192|0;m=d+48|0;Ga=b+28|0;Ha=Ma;while(1){Ia=c[t>>2]|0;if((Ia|0)==0){c[Ha+20>>2]=0;c[Ha+24>>2]=0}else{c[Ha+20>>2]=c[Ia+8>>2];c[Ha+24>>2]=c[(c[t>>2]|0)+12>>2]}c[Ha+12>>2]=Ka;c[Ha+28>>2]=c[Ea>>2];c[Ha+620>>2]=24632;c[Ha+624>>2]=c[6156];if((c[(c[u>>2]|0)+8>>2]|0)==0){Ja=77;break}Na=Ha+52|0;Ia=OA(Ha,c[Na>>2]|0)|0;Da=Ha+56|0;c[Da>>2]=Ia;if((Ia|0)==24){n=Ha+152|0;c[n>>2]=c[n>>2]|520}else if((Ia|0)==21){n=Ha+152|0;c[n>>2]=c[n>>2]|1}else if((Ia|0)==999){Ja=83;break}else{Ia=ew(s,106184)|0;do{if((Ia|0)==0){Ja=94}else{n=a[Ia]|0;if((n<<24>>24|0)==101){if((Ya(Ia+1|0,105256)|0)==0){Oa=16;break}else{Ja=94;break}}else if((n<<24>>24|0)==110){if((Ya(Ia+1|0,105664)|0)==0){Oa=1;break}else{Ja=94;break}}else{Ja=94;break}}}while(0);if((Ja|0)==94){Ja=0;Oa=0}Ia=Ha+152|0;c[Ia>>2]=c[Ia>>2]|Oa}Ia=c[Fa>>2]|0;d:do{if((Ia|0)==0){c[44738]=0;Ja=103}else{do{if((c[Ia+152>>2]&32|0)!=0){if((Ya(c[Na>>2]|0,c[Ia+52>>2]|0)|0)!=0){break}n=c[44738]|0;if((n|0)==0){Ja=103;break d}c[n+8>>2]=Ha;c[Ha+36>>2]=c[(c[44738]|0)+36>>2];Ja=105;break d}}while(0);QA(Ia);c[Fa>>2]=0;c[Ga>>2]=0;c[44738]=0;Ja=103}}while(0);do{if((Ja|0)==103){Ja=0;if((PA(Ha)|0)!=0){break}c[Fa>>2]=Ha;Ja=105}}while(0);if((Ja|0)==105){Ja=0;c[Ha+8>>2]=0;c[Ha+104>>2]=25400;Ia=Ha|0;Y=c[Ia>>2]|0;do{if((a[Y+292|0]|0)==0){if((c[Da>>2]|0)==300){z=+h[(c[Ha+68>>2]|0)+8>>3];h[Ha+248>>3]=z;h[Ha+240>>3]=z;break}else{h[Ha+248>>3]=4.0;h[Ha+240>>3]=4.0;break}}else{n=Ha+240|0;y=Y+216|0;c[n>>2]=c[y>>2];c[n+4>>2]=c[y+4>>2];c[n+8>>2]=c[y+8>>2];c[n+12>>2]=c[y+12>>2]}}while(0);e:do{if((a[Y+293|0]|0)==0){switch(c[Da>>2]|0){case 2:case 3:case 4:case 22:case 21:case 30:{h[Ha+424>>3]=36.0;h[Ha+416>>3]=36.0;break e;break};case 300:{y=Ha+416|0;n=(c[Ha+84>>2]|0)+8|0;c[y>>2]=c[n>>2];c[y+4>>2]=c[n+4>>2];c[y+8>>2]=c[n+8>>2];c[y+12>>2]=c[n+12>>2];break e;break};default:{vF(Ha+416|0,0,16)|0;break e}}}else{n=Ha+416|0;y=Y+200|0;c[n>>2]=c[y>>2];c[n+4>>2]=c[y+4>>2];c[n+8>>2]=c[y+8>>2];c[n+12>>2]=c[y+12>>2]}}while(0);y=c[Y+192>>2]|0;z=+h[(c[(c[u>>2]|0)+8>>2]|0)+24>>3];f:do{if(z!=0.0){h[Ha+440>>3]=z;h[Ha+432>>3]=z}else{do{if((y|0)!=0){if((a[y+128|0]|0)==0){break}n=Ha+432|0;r=y+112|0;c[n>>2]=c[r>>2];c[n+4>>2]=c[r+4>>2];c[n+8>>2]=c[r+8>>2];c[n+12>>2]=c[r+12>>2];break f}}while(0);r=Ha+432|0;if((c[Da>>2]|0)==300){n=r;P=(c[Ha+84>>2]|0)+40|0;c[n>>2]=c[P>>2];c[n+4>>2]=c[P+4>>2];c[n+8>>2]=c[P+8>>2];c[n+12>>2]=c[P+12>>2];break}else{h[Ha+440>>3]=96.0;h[r>>3]=96.0;break}}}while(0);z=+h[Y+272>>3];aa=+h[Y+280>>3];ba=+h[Y+256>>3];ca=+h[Y+264>>3];za=+h[Ha+240>>3];Aa=ba-za;h[Ha+208>>3]=Aa;Ba=+h[Ha+248>>3];Ca=ca-Ba;h[Ha+216>>3]=Ca;va=z+za;h[Ha+224>>3]=va;za=aa+Ba;h[Ha+232>>3]=za;Ba=va-Aa;Aa=za-Ca;h[j>>3]=1.0;Da=c[(c[u>>2]|0)+8>>2]|0;Ca=+h[Da+64>>3];do{if(Ca>.001){za=+h[Da+72>>3];if(za<=.001){Pa=Aa;Qa=Ba;Ra=1.0;break}va=Ba==0.0?Ca:Ba;wa=Aa==0.0?za:Aa;if(!(Ca<va|za<wa)){if(!((a[Da+80|0]|0)!=0&Ca>va&za>wa)){Pa=wa;Qa=va;Ra=1.0;break}}xa=Ca/va;ya=za/wa;za=xa<ya?xa:ya;h[j>>3]=za;Pa=wa;Qa=va;Ra=za}else{Pa=Aa;Qa=Ba;Ra=1.0}}while(0);Ba=(z+ba)*.5;h[k>>3]=Ba;Aa=(aa+ca)*.5;h[l>>3]=Aa;Da=Ha+360|0;c[Da>>2]=c[Y+288>>2];h[f>>3]=Ra*Qa;h[g>>3]=Ra*Pa;y=ew(s,108712)|0;if((y|0)==0){Sa=Ba;Ta=Aa}else{r=dF((xF(y|0)|0)+1|0)|0;P=dF((xF(y|0)|0)+1|0)|0;n=ac(y|0,107704,(v=i,i=i+32|0,c[v>>2]=f,c[v+8>>2]=g,c[v+16>>2]=j,c[v+24>>2]=r,v)|0)|0;i=v;do{if((n|0)==4){N=Ax(c[m>>2]|0,r,0)|0;if((N|0)==0){break}O=N+8|0;h[k>>3]=+h[(c[O>>2]|0)+16>>3];h[l>>3]=+h[(c[O>>2]|0)+24>>3]}else{O=ac(y|0,107056,(v=i,i=i+40|0,c[v>>2]=f,c[v+8>>2]=g,c[v+16>>2]=j,c[v+24>>2]=r,c[v+32>>2]=P,v)|0)|0;i=v;if((O|0)!=4){ac(y|0,106592,(v=i,i=i+40|0,c[v>>2]=f,c[v+8>>2]=g,c[v+16>>2]=j,c[v+24>>2]=k,c[v+32>>2]=l,v)|0)|0;i=v;break}O=Ax(c[m>>2]|0,r,0)|0;if((O|0)==0){break}N=O+8|0;h[k>>3]=+h[(c[N>>2]|0)+16>>3];h[l>>3]=+h[(c[N>>2]|0)+24>>3]}}while(0);eF(r);eF(P);Sa=+h[k>>3];Ta=+h[l>>3]}y=Ha+368|0;h[y>>3]=+h[f>>3];n=Ha+376|0;h[n>>3]=+h[g>>3];Y=Ha+352|0;h[Y>>3]=+h[j>>3];h[Ha+336>>3]=Sa;h[Ha+344>>3]=Ta;N=c[Ia>>2]|0;ca=+h[y>>3];aa=+h[n>>3];n=(c[Da>>2]|0)==0;ba=n?aa:ca;z=n?ca:aa;aa=+h[Ha+416>>3];ca=+h[Ha+424>>3];do{if((a[N+294|0]|0)==0){Ja=149}else{if((c[Ha+152>>2]&32|0)==0){Ja=149;break}Aa=+h[N+232>>3]-aa*2.0;Ba=+h[N+240>>3]-ca*2.0;do{if(Aa<1.0e-4){c[Ha+164>>2]=1;Ua=1}else{n=~~(z/Aa);y=Ha+164|0;c[y>>2]=n;if(z-Aa*+(n|0)<=1.0e-4){Ua=n;break}O=n+1|0;c[y>>2]=O;Ua=O}}while(0);do{if(Ba<1.0e-4){c[Ha+168>>2]=1;Va=1}else{O=~~(ba/Ba);y=Ha+168|0;c[y>>2]=O;if(ba-Ba*+(O|0)<=1.0e-4){Va=O;break}n=O+1|0;c[y>>2]=n;Va=n}}while(0);c[Ha+204>>2]=da(Va,Ua)|0;Wa=z<Aa?z:Aa;Xa=ba<Ba?ba:Ba;Za=Aa;_a=Ba;$a=Va;ab=Ua}}while(0);do{if((Ja|0)==149){Ja=0;do{if((c[Ha+68>>2]|0)==0){bb=0.0;cb=0.0}else{Ia=c[Ha+84>>2]|0;Ca=+h[Ia+24>>3]-aa*2.0;za=Ca<0.0?0.0:Ca;Ca=+h[Ia+32>>3]-ca*2.0;if(Ca>=0.0){bb=za;cb=Ca;break}bb=za;cb=0.0}}while(0);c[Ha+204>>2]=1;c[Ha+168>>2]=1;c[Ha+164>>2]=1;Ba=bb<z?z:bb;if(cb>=ba){Wa=z;Xa=ba;Za=Ba;_a=cb;$a=1;ab=1;break}Wa=z;Xa=ba;Za=Ba;_a=ba;$a=1;ab=1}}while(0);Ia=Ha+432|0;ba=(aa*2.0+Za)*+h[Ia>>3]/72.0;if(ba<0.0){db=ba+-.5}else{db=ba+.5}c[Ha+448>>2]=~~db;P=Ha+440|0;ba=(ca*2.0+_a)*+h[P>>3]/72.0;if(ba<0.0){eb=ba+-.5}else{eb=ba+.5}c[Ha+452>>2]=~~eb;r=Ha+188|0;n=Ha+180|0;y=Ha+176|0;O=Ha+172|0;Q=N+196|0;vF(O|0,0,24)|0;q=a[c[Q>>2]|0]|0;if((q|0)==66){fb=0;gb=0;hb=1;ib=0}else if((q|0)==76){fb=0;gb=1;hb=0;ib=0}else if((q|0)==82){c[O>>2]=ab-1;fb=0;gb=-1;hb=0;ib=0}else if((q|0)==84){c[y>>2]=$a-1;fb=0;gb=0;hb=-1;ib=0}else{fb=0;gb=0;hb=0;ib=0}q=n;c[q>>2]=gb|ib;c[q+4>>2]=fb|hb;n=a[(c[Q>>2]|0)+1|0]|0;L=gb;M=hb;if((n|0)==66){jb=0;kb=0;lb=1;mb=0}else if((n|0)==76){jb=0;kb=1;lb=0;mb=0}else if((n|0)==82){c[O>>2]=ab-1;jb=0;kb=-1;lb=0;mb=0}else if((n|0)==84){c[y>>2]=$a-1;jb=0;kb=0;lb=-1;mb=0}else{jb=0;kb=0;lb=0;mb=0}y=r;c[y>>2]=kb|mb;c[y+4>>2]=jb|lb;r=kb+L|0;if((((r|0)>-1?r:-r|0)|0)==1){r=lb+M|0;if((((r|0)>-1?r:-r|0)|0)!=1){Ja=172}}else{Ja=172}if((Ja|0)==172){Ja=0;c[q>>2]=0;c[q+4>>2]=1;c[y>>2]=1;c[y+4>>2]=0;Fv(0,109544,(v=i,i=i+8|0,c[v>>2]=c[Q>>2],v)|0)|0;i=v}do{if((a[(c[(c[u>>2]|0)+8>>2]|0)+82|0]|0)==0){nb=0.0;ob=0.0}else{if(Za>Wa){pb=(Za-Wa)*.5}else{pb=0.0}if(_a<=Xa){nb=pb;ob=0.0;break}nb=pb;ob=(_a-Xa)*.5}}while(0);N=(c[Da>>2]|0)==0;ba=N?Xa:Wa;z=N?Wa:Xa;Ba=(N?aa:ca)+(N?nb:ob);h[Ha+384>>3]=Ba;Aa=(N?ca:aa)+(N?ob:nb);h[Ha+392>>3]=Aa;za=z+Ba;h[Ha+400>>3]=za;Ca=ba+Aa;h[Ha+408>>3]=Ca;va=+h[Y>>3];h[Ha+320>>3]=z/va;h[Ha+328>>3]=ba/va;va=+h[Ia>>3];ba=Ba*va/72.0;if(ba<0.0){qb=ba+-.5}else{qb=ba+.5}Q=~~qb;y=Ha+456|0;c[y>>2]=Q;ba=+h[P>>3];Ba=Aa*ba/72.0;if(Ba<0.0){rb=Ba+-.5}else{rb=Ba+.5}q=~~rb;c[Ha+460>>2]=q;Ba=za*va/72.0;if(Ba<0.0){sb=Ba+-.5}else{sb=Ba+.5}r=~~sb;M=Ha+464|0;c[M>>2]=r;Ba=Ca*ba/72.0;if(Ba<0.0){tb=Ba+-.5}else{tb=Ba+.5}L=~~tb;c[Ha+468>>2]=L;if(!N){N=y;c[N>>2]=q;c[N+4>>2]=Q;Q=M;c[Q>>2]=L;c[Q+4>>2]=r}if((c[Ha+152>>2]&128|0)==0){Rh(Ha,d)}c[44738]=Ha}Ha=EA(b)|0;if((Ha|0)==0){break c}}if((Ja|0)==77){Fv(1,111648,(v=i,i=i+1|0,i=i+7&-8,c[v>>2]=0,v)|0)|0;i=v;Ha=c[44736]|0;do{if((Ha|0)>0){m=Ha-1|0;c[44736]=m;if((m|0)!=0){break}Ab(1,c[44734]|0)|0;eF(c[44734]|0)}}while(0);if((a[213992]|0)==0){w=-1;i=e;return w|0}Ha=c[o>>2]|0;m=$w(s)|0;Ba=+zm();gc(Ha|0,112248,(v=i,i=i+16|0,c[v>>2]=m,h[v+8>>3]=Ba,v)|0)|0;i=v;w=-1;i=e;return w|0}else if((Ja|0)==83){Fv(1,111e3,(v=i,i=i+8|0,c[v>>2]=c[Na>>2],v)|0)|0;i=v;m=c[44736]|0;do{if((m|0)>0){Ha=m-1|0;c[44736]=Ha;if((Ha|0)!=0){break}Ab(1,c[44734]|0)|0;eF(c[44734]|0)}}while(0);if((a[213992]|0)==0){w=-1;i=e;return w|0}m=c[o>>2]|0;Ha=$w(s)|0;Ba=+zm();gc(m|0,112248,(v=i,i=i+16|0,c[v>>2]=Ha,h[v+8>>3]=Ba,v)|0)|0;i=v;w=-1;i=e;return w|0}}}while(0);Na=c[44736]|0;do{if((Na|0)>0){Ja=Na-1|0;c[44736]=Ja;if((Ja|0)!=0){break}Ab(1,c[44734]|0)|0;eF(c[44734]|0)}}while(0);if((a[213992]|0)==0){w=0;i=e;return w|0}Na=c[o>>2]|0;Ja=$w(s)|0;tb=+zm();gc(Na|0,112248,(v=i,i=i+16|0,c[v>>2]=Ja,h[v+8>>3]=tb,v)|0)|0;i=v;w=0;i=e;return w|0}function $h(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;g=i;i=i+160|0;h=g+128|0;j=g+136|0;k=g+144|0;c[h>>2]=0;c[j>>2]=0;Iv(k,128,g|0);Lv(k,f)|0;f=k+4|0;l=c[f>>2]|0;if(l>>>0<(c[k+8>>2]|0)>>>0){m=l}else{Jv(k,1)|0;m=c[f>>2]|0}a[m]=0;m=c[k>>2]|0;c[f>>2]=m;f=b+300|0;l=b+296|0;n=b+308|0;o=b+312|0;b=m;while(1){m=ec(b|0,c[f>>2]|0,h|0)|0;if((m|0)==0){p=0;q=43;break}r=ec(m|0,c[l>>2]|0,j|0)|0;m=(r|0)!=0;if(m){s=ec(0,c[l>>2]|0,j|0)|0}else{s=0}t=((s|0)!=0)+(m&1)|0;if((t|0)==1){m=a[r]|0;if((m<<24>>24|0)==0){q=12}else if((m<<24>>24|0)==97){if((Ya(r|0,103064)|0)==0){u=d}else{v=97;w=r;q=10}}else{v=m;w=r;q=10}a:do{if((q|0)==10){while(1){q=0;x=w+1|0;if(((v&255)-48|0)>>>0>=10>>>0){break}y=a[x]|0;if(y<<24>>24==0){q=12;break a}else{v=y;w=x;q=10}}x=c[n>>2]|0;if((x|0)==0){u=-1;break}y=c[o>>2]|0;if((y|0)<1){u=-1;break}else{z=1}while(1){A=c[x+(z<<2)>>2]|0;if(m<<24>>24==(a[A]|0)){if((Ya(r|0,A|0)|0)==0){u=z;break a}}if((z|0)<(y|0)){z=z+1|0}else{u=-1;break}}}}while(0);if((q|0)==12){q=0;u=Rb(r|0)|0}B=(u|0)==(d|0)}else if((t|0)==2){m=a[r]|0;if((m<<24>>24|0)==97){if((Ya(r|0,103064)|0)==0){C=0}else{D=97;E=r;q=21}}else if((m<<24>>24|0)==0){q=23}else{D=m;E=r;q=21}b:do{if((q|0)==21){while(1){q=0;y=E+1|0;if(((D&255)-48|0)>>>0>=10>>>0){break}x=a[y]|0;if(x<<24>>24==0){q=23;break b}else{D=x;E=y;q=21}}y=c[n>>2]|0;if((y|0)==0){C=-1;break}x=c[o>>2]|0;if((x|0)<1){C=-1;break}else{F=1}while(1){A=c[y+(F<<2)>>2]|0;if(m<<24>>24==(a[A]|0)){if((Ya(r|0,A|0)|0)==0){C=F;break b}}if((F|0)<(x|0)){F=F+1|0}else{C=-1;break}}}}while(0);if((q|0)==23){q=0;C=Rb(r|0)|0}m=a[s]|0;if((m<<24>>24|0)==97){if((Ya(s|0,103064)|0)==0){G=e}else{H=97;I=s;q=31}}else if((m<<24>>24|0)==0){q=33}else{H=m;I=s;q=31}c:do{if((q|0)==31){while(1){q=0;t=I+1|0;if(((H&255)-48|0)>>>0>=10>>>0){break}x=a[t]|0;if(x<<24>>24==0){q=33;break c}else{H=x;I=t;q=31}}t=c[n>>2]|0;if((t|0)==0){G=-1;break}x=c[o>>2]|0;if((x|0)<1){G=-1;break}else{J=1}while(1){y=c[t+(J<<2)>>2]|0;if(m<<24>>24==(a[y]|0)){if((Ya(s|0,y|0)|0)==0){G=J;break c}}if((J|0)<(x|0)){J=J+1|0}else{G=-1;break}}}}while(0);if((q|0)==33){q=0;G=Rb(s|0)|0}if((G&C|0)<=-1){b=0;continue}m=(C|0)>(G|0);if(((m?G:C)|0)>(d|0)){b=0;continue}B=((m?C:G)|0)>=(d|0)}else{b=0;continue}if(B){p=B&1;q=43;break}else{b=0}}if((q|0)==43){Mv(k);i=g;return p|0}return 0}function ai(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0;d=i;e=b;b=i;i=i+48|0;tF(b,e,48)|0;e=c[b+4>>2]|0;if((e|0)<=0){cc(93584,102832,3865,171016)}if(((e|0)%3|0|0)!=1){cc(93080,102832,3866,171016)}f=c[b>>2]|0;g=+h[f>>3];j=+h[f+8>>3];if((e|0)>1){k=1;l=j;m=g;n=j;o=g}else{p=j;q=g;r=j;s=g;t=a|0;h[t>>3]=q;u=a+8|0;h[u>>3]=p;v=a+16|0;h[v>>3]=s;w=a+24|0;h[w>>3]=r;i=d;return}while(1){b=k+1|0;x=k+2|0;g=(+h[f+(k<<4)>>3]+ +h[f+(b<<4)>>3])*.5;j=(+h[f+(k<<4)+8>>3]+ +h[f+(b<<4)+8>>3])*.5;y=m<g?m:g;z=l<j?l:j;A=o>g?o:g;g=n>j?n:j;j=+h[f+(x<<4)>>3];B=+h[f+(x<<4)+8>>3];C=y<j?y:j;y=z<B?z:B;z=A>j?A:j;j=g>B?g:B;x=k+3|0;if((x|0)<(e|0)){k=x;l=y;m=C;n=j;o=z}else{p=y;q=C;r=j;s=z;break}}t=a|0;h[t>>3]=q;u=a+8|0;h[u>>3]=p;v=a+16|0;h[v>>3]=s;w=a+24|0;h[w>>3]=r;i=d;return}function bi(a,d,e,f,g,i,j){a=a|0;d=+d;e=+e;f=f|0;g=g|0;i=i|0;j=j|0;var k=0;j=c[a+16>>2]|0;if(f<<24>>24==0){k=c[j+208>>2]|0}else{k=g}do{if(i<<24>>24==0){if(!((k|0)==0&(b[j+260>>1]&1)==0)){break}return}}while(0);k=c[a+152>>2]|0;if((k&4259840|0)==0){return}i=(k&131072|0)!=0;g=j+264|0;if(i){c[g>>2]=0;c[j+268>>2]=2}else{c[g>>2]=2;c[j+268>>2]=4}g=j+272|0;eF(c[g>>2]|0);f=jk(c[j+268>>2]<<4)|0;j=f;c[g>>2]=j;h[f>>3]=d+-3.0;h[f+8>>3]=e+-3.0;h[f+16>>3]=d+3.0;h[f+24>>3]=e+3.0;if((k&8192|0)==0){RA(a,j,j,2)|0}if(i){return}qi(j);return}function ci(b,d,e,f,g,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0;n=i;i=i+64|0;o=n|0;p=n+48|0;q=c[b+152>>2]|0;if((d|0)==0){i=n;return}if((a[d+81|0]|0)==0){i=n;return}if((l|0)==0){r=0}else{s=jk((xF(l|0)|0)+11|0)|0;if((e|0)==7){t=89496}else if((e|0)==11){t=90024}else if((e|0)==6){t=89080}else{cc(88624,102832,2642,170728)}nb(s|0,88176,(u=i,i=i+16|0,c[u>>2]=l,c[u+8>>2]=t,u)|0)|0;i=u;r=s}s=b+16|0;u=(c[s>>2]|0)+12|0;t=c[u>>2]|0;c[u>>2]=e;u=(g|0)==0&(f|0)==0;do{if(!u){if((q&4|0)!=0){break}di(b,d);gB(b,g,j,k,r)}}while(0);ek(b,e,d);a:do{if((m|0)!=0){e=p;f=c[d>>2]|0;l=a[f]|0;if(l<<24>>24==0){break}else{v=f;w=l}while(1){l=v+1|0;if((Qa(w&255|0)|0)==0){break}f=a[l]|0;if(f<<24>>24==0){break a}else{v=l;w=f}}if((a[v]|0)==0){break}x=+h[d+24>>3];f=d+56|0;y=x*.5+ +h[f>>3];z=+h[d+64>>3]- +h[d+32>>3]*.5;h[o>>3]=y;h[o+8>>3]=z;h[o+16>>3]=y-x;h[o+24>>3]=z;Wm(p,m,f);f=o+32|0;c[f>>2]=c[e>>2];c[f+4>>2]=c[e+4>>2];c[f+8>>2]=c[e+8>>2];c[f+12>>2]=c[e+12>>2];pB(b,c[(c[b>>2]|0)+336>>2]|0);lB(b,c[d+8>>2]|0);uB(b,o|0,3)}}while(0);if(!u){if((q&4|0)!=0){di(b,d);gB(b,g,j,k,r)}hB(b)}if((r|0)!=0){eF(r)}c[(c[s>>2]|0)+12>>2]=t;i=n;return}function di(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0;d=c[a+16>>2]|0;e=c[a+152>>2]|0;if((e&4259840|0)==0){return}f=(e&131072|0)!=0;g=d+264|0;if(f){c[g>>2]=0;c[d+268>>2]=2}else{c[g>>2]=2;c[d+268>>2]=4}g=d+272|0;eF(c[g>>2]|0);i=jk(c[d+268>>2]<<4)|0;d=i;c[g>>2]=d;g=b+56|0;j=b+24|0;h[i>>3]=+h[g>>3]- +h[j>>3]*.5;k=b+64|0;l=b+32|0;h[i+8>>3]=+h[k>>3]- +h[l>>3]*.5;h[i+16>>3]=+h[g>>3]+ +h[j>>3]*.5;h[i+24>>3]=+h[k>>3]+ +h[l>>3]*.5;if((e&8192|0)==0){RA(a,d,d,2)|0}if(f){return}qi(d);return}function ei(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=1;f=b;while(1){b=a[f]|0;if((b<<24>>24|0)==0){break}else if((b<<24>>24|0)==58){g=e+1|0}else{g=e}e=g;f=f+1|0}f=da((xF(d|0)|0)+1|0,e)|0;if((c[45192]|0)<(f|0)){g=f+10|0;c[45192]=g;c[45194]=gF(c[45194]|0,g)|0}zF(c[45194]|0,d|0)|0;g=e-1|0;e=c[45194]|0;if((g|0)==0){h=e;return h|0}else{i=g;j=e}while(1){e=j+(xF(j|0)|0)|0;z=58;a[e]=z;z=z>>8;a[e+1|0]=z;AF(c[45194]|0,d|0)|0;e=i-1|0;g=c[45194]|0;if((e|0)==0){h=g;break}else{i=e;j=g}}return h|0}function fi(a,b,c){a=+a;b=+b;c=+c;return+((1.0-a/b)*c*.5)}function gi(a,b,c){a=+a;b=+b;c=+c;return+(a/b*c*.5)}function hi(a,b,c){a=+a;b=+b;c=+c;var d=0.0,e=0.0;d=a/b;if(d>.5){e=1.0-d}else{e=d}return+(e*c)}function ii(a,b,c){a=+a;b=+b;c=+c;return+(c*.5)}function ji(a,b,d,e){a=a|0;b=+b;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0,A=0.0,B=0,C=0.0,D=0;f=i;i=i+32|0;g=f+16|0;j=c[a+4>>2]|0;k=j-1|0;l=(k|0)/3|0;if((j-4|0)>>>0<3>>>0){c[d+4>>2]=4;j=d|0;c[j>>2]=jk(64)|0;c[e+4>>2]=4;m=jk(64)|0;c[e>>2]=m;Qm(f|0,c[a>>2]|0,3,b,c[j>>2]|0,m);i=f;return}m=jk(l<<3)|0;j=m;n=a|0;a=(k|0)>2;a:do{if(a){o=0.0;k=c[n>>2]|0;p=0;while(1){q=+h[k+16>>3];r=+h[k>>3]-q;s=+h[k+24>>3];t=+h[k+8>>3]-s;u=+T(r*r+t*t);t=+h[k+32>>3];r=q-t;q=+h[k+40>>3];v=s-q;s=u+ +T(r*r+v*v);v=t- +h[k+48>>3];t=q- +h[k+56>>3];q=s+ +T(v*v+t*t);h[j+(p<<3)>>3]=q;w=o+q;x=p+1|0;if((x|0)<(l|0)){o=w;k=k+48|0;p=x}else{break}}o=b*w;if(a){y=0.0;z=0}else{A=0.0;B=0;C=o;break}while(1){q=y+ +h[j+(z<<3)>>3];p=z+1|0;if(q>=o){A=q;B=z;C=o;break a}if((p|0)<(l|0)){y=q;z=p}else{A=q;B=p;C=o;break}}}else{A=0.0;B=0;C=b*0.0}}while(0);z=B*3|0;a=z+4|0;p=d+4|0;c[p>>2]=a;k=d|0;c[k>>2]=jk(a<<4)|0;a=((l-B|0)*3|0)+1|0;l=e+4|0;c[l>>2]=a;d=e|0;c[d>>2]=jk(a<<4)|0;if((c[p>>2]|0)>0){a=0;while(1){e=(c[k>>2]|0)+(a<<4)|0;x=(c[n>>2]|0)+(a<<4)|0;c[e>>2]=c[x>>2];c[e+4>>2]=c[x+4>>2];c[e+8>>2]=c[x+8>>2];c[e+12>>2]=c[x+12>>2];x=a+1|0;if((x|0)<(c[p>>2]|0)){a=x}else{break}}D=a-3|0}else{D=-4}b:do{if((c[l>>2]|0)>0){a=D;p=0;while(1){x=(c[d>>2]|0)+(p<<4)|0;e=(c[n>>2]|0)+(a<<4)|0;c[x>>2]=c[e>>2];c[x+4>>2]=c[e+4>>2];c[x+8>>2]=c[e+8>>2];c[x+12>>2]=c[e+12>>2];e=p+1|0;if((e|0)>=(c[l>>2]|0)){break b}a=a+1|0;p=e}}}while(0);b=+h[j+(B<<3)>>3];Qm(g,(c[n>>2]|0)+(z<<4)|0,3,(C-(A-b))/b,(c[k>>2]|0)+(z<<4)|0,c[d>>2]|0);eF(m);i=f;return}function ki(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,j=0,k=0,l=0.0;d=i;i=i+144|0;e=a+48|0;f=+ui(a,e,a+16|0);if(!(f<4.0&+ui(a,e,a+32|0)<4.0)){g=d|0;j=d+64|0;Qm(d+128|0,a,3,.5,g,j);k=ki(j,ki(g,b)|0)|0;i=d;return k|0}g=b+16|0;if((c[g>>2]|0)==1){c[g>>2]=0;j=b;b=a;c[j>>2]=c[b>>2];c[j+4>>2]=c[b+4>>2];c[j+8>>2]=c[b+8>>2];c[j+12>>2]=c[b+12>>2]}f=+h[e>>3];l=+h[a+56>>3];a=kk(24)|0;e=a;c[a+16>>2]=0;h[a>>3]=f;h[a+8>>3]=l;c[g>>2]=e;k=e;i=d;return k|0}function li(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=b+156|0;if((c[f>>2]|0)<2){g=1;return g|0}h=Hm(e|0,c[53612]|0,213440)|0;i=b|0;j=b+160|0;if(($h(c[i>>2]|0,c[j>>2]|0,c[f>>2]|0,h)|0)<<24>>24!=0){g=1;return g|0}if((a[h]|0)!=0){g=0;return g|0}if((rw(d,e)|0)==0){g=1;return g|0}h=rw(d,e)|0;if((h|0)==0){g=0;return g|0}else{k=h}while(1){h=Hm(k|0,c[53776]|0,213440)|0;if((a[h]|0)==0){g=1;l=9;break}if(($h(c[i>>2]|0,c[j>>2]|0,c[f>>2]|0,h)|0)<<24>>24!=0){g=1;l=9;break}h=sw(d,k,e)|0;if((h|0)==0){g=0;l=9;break}else{k=h}}if((l|0)==9){return g|0}return 0}function mi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;f=i;i=i+144|0;g=f+128|0;h=ew(e,83344)|0;j=ew(e,166968)|0;k=ew(e,78880)|0;Iv(g,128,f|0);if((d|0)==0){l=0}else{l=c[d>>2]|0}if((h|0)==0){m=5}else{if((a[h]|0)==0){m=5}else{n=h}}if((m|0)==5){n=ew(e,82904)|0}Hh(b,l,n,j,k,Ih(b,e,g)|0,e)|0;Mv(g);i=f;return}function ni(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function oi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=d+8|0;d=c[e>>2]|0;if((c[d+172>>2]|0)<1){return}else{f=1;g=d}while(1){d=c[(c[g+176>>2]|0)+(f<<2)>>2]|0;oi(b,d);h=d|0;d=ew(h,123768)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}lB(b,d)}}while(0);d=ew(h,121832)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}lB(b,d)}}while(0);d=ew(h,120224)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}lB(b,d)}}while(0);d=ew(h,121048)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}nB(b,d)}}while(0);d=ew(h,160752)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}lB(b,d)}}while(0);d=c[e>>2]|0;if((f|0)<(c[d+172>>2]|0)){f=f+1|0;g=d}else{break}}return}function pi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0.0,k=0,l=0.0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;e=i;f=a;a=i;i=i+16|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=d;d=i;i=i+32|0;tF(d,f,32)|0;g=+h[a>>3];j=+h[d>>3];f=g<j;do{if(f){k=0}else{if(g>+h[d+16>>3]){k=0;break}l=+h[a+8>>3];if(l<+h[d+8>>3]){k=0;break}k=l<=+h[d+24>>3]|0}}while(0);l=+h[b>>3];do{if(l<j){m=0}else{if(l>+h[d+16>>3]){m=0;break}n=+h[b+8>>3];if(n<+h[d+8>>3]){m=0;break}m=n<=+h[d+24>>3]|0}}while(0);if((k|0)!=(m|0)){o=0;i=e;return o|0}if((k|0)!=0){o=1;i=e;return o|0}n=+h[a+8>>3];do{if(g==l){p=+h[d+8>>3];if(f|n>=p^+h[b+8>>3]>=p^1){break}if(g>+h[d+16>>3]){break}else{o=0}i=e;return o|0}else{p=+h[b+8>>3];if(n==p){if(!(g>=j^l>=j)){break}if(n<+h[d+8>>3]){break}if(n>+h[d+24>>3]){break}else{o=0}i=e;return o|0}q=(p-n)/(l-g);a=g<l;r=a?g:l;s=a?l:g;t=n+q*(j-g);u=+h[d+8>>3];do{if(!(j<r|j>s|t<u)){if(t>+h[d+24>>3]){break}else{o=0}i=e;return o|0}}while(0);v=+h[d+16>>3];w=t+q*(v-j);do{if(w>=u){if(w>+h[d+24>>3]|v<r|v>s){break}else{o=0}i=e;return o|0}}while(0);a=n<p;s=a?n:p;r=a?p:n;w=g+(u-n)/q;do{if(w>=j){if(w>v|u<s|u>r){break}else{o=0}i=e;return o|0}}while(0);p=+h[d+24>>3];t=w+(p-u)/q;if(t<j){break}if(t>v|p<s|p>r){break}else{o=0}i=e;return o|0}}while(0);o=-1;i=e;return o|0}function qi(a){a=a|0;var b=0,c=0.0;b=a+16|0;c=+h[b>>3];h[a+32>>3]=c;h[a+48>>3]=c;h[a+40>>3]=+h[a+24>>3];h[a+56>>3]=+h[a+8>>3];h[b>>3]=+h[a>>3];return}function ri(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0,k=0.0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;e=i;f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=b|0;g=+h[f>>3];j=b+8|0;k=+h[j>>3];l=d;while(1){if((l|0)==0){break}else if((l|0)==270){m=5;break}else if((l|0)==90){m=3;break}else if((l|0)==180){m=4;break}if((l|0)<0){m=7;break}if((l|0)<=360){m=10;break}l=(l|0)%360|0}if((m|0)==3){h[f>>3]=k;h[j>>3]=-0.0-g}else if((m|0)==4){h[f>>3]=g;h[j>>3]=-0.0-k}else if((m|0)==5){h[f>>3]=k;h[j>>3]=g}else if((m|0)==7){si(a,b,-l|0);i=e;return}else if((m|0)==10){if((c[43782]|0)==(l|0)){n=+h[1491];o=+h[1490]}else{p=+(l|0)/6.283185307179586;q=+W(p);h[1490]=q;r=+V(p);h[1491]=r;c[43782]=l;n=r;o=q}h[a>>3]=g*n-k*o;h[a+8>>3]=g*o+k*n;i=e;return}l=a;a=b;c[l>>2]=c[a>>2];c[l+4>>2]=c[a+4>>2];c[l+8>>2]=c[a+8>>2];c[l+12>>2]=c[a+12>>2];i=e;return}function si(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0,k=0.0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;e=i;f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=b|0;g=+h[f>>3];j=b+8|0;k=+h[j>>3];l=d;while(1){if((l|0)==90){m=3;break}else if((l|0)==0){break}else if((l|0)==270){m=5;break}else if((l|0)==180){m=4;break}if((l|0)<0){m=7;break}if((l|0)<=360){m=10;break}l=(l|0)%360|0}if((m|0)==3){h[f>>3]=-0.0-k;h[j>>3]=g}else if((m|0)==4){h[f>>3]=g;h[j>>3]=-0.0-k}else if((m|0)==5){h[f>>3]=k;h[j>>3]=g}else if((m|0)==7){ri(a,b,-l|0);i=e;return}else if((m|0)==10){m=360-l|0;if((c[43782]|0)==(m|0)){n=+h[1491];o=+h[1490]}else{p=+(m|0)/6.283185307179586;q=+W(p);h[1490]=q;r=+V(p);h[1491]=r;c[43782]=m;n=r;o=q}h[a>>3]=g*n-k*o;h[a+8>>3]=g*o+k*n;i=e;return}m=a;a=b;c[m>>2]=c[a>>2];c[m+4>>2]=c[a+4>>2];c[m+8>>2]=c[a+8>>2];c[m+12>>2]=c[a+12>>2];i=e;return}function ti(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0;e=i;f=b;b=i;i=i+32|0;tF(b,f,32)|0;f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];g=+h[d>>3];j=+h[d+8>>3];k=+h[b>>3]+j;l=+h[b+24>>3]+g;m=+h[b+16>>3]+j;h[a>>3]=+h[b+8>>3]+g;h[a+8>>3]=k;h[a+16>>3]=l;h[a+24>>3]=m;i=e;return}function ui(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0;e=i;f=a;a=i;i=i+16|0;c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];f=b;b=i;i=i+16|0;c[b>>2]=c[f>>2];c[b+4>>2]=c[f+4>>2];c[b+8>>2]=c[f+8>>2];c[b+12>>2]=c[f+12>>2];f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];g=+h[a>>3];j=+h[b>>3]-g;k=+h[a+8>>3];l=+h[b+8>>3]-k;m=j*(+h[d+8>>3]-k)-l*(+h[d>>3]-g);g=m*m;if(g<1.0e-10){n=0.0;i=e;return+n}n=g/(j*j+l*l);i=e;return+n}function vi(b){b=b|0;var d=0,e=0,f=0;d=i;if((a[174897]|0)!=0){i=d;return}a[174897]=1;e=zd(c[43716]|0)|0;Fv(1,120352,(f=i,i=i+16|0,c[f>>2]=b,c[f+8>>2]=e,f)|0)|0;i=f;wi();i=d;return}function wi(){var b=0,d=0,e=0,f=0,g=0;b=i;d=c[43719]|0;c[d+4>>2]=c[d>>2];d=c[43728]|0;if((d|0)>0){Kv(c[43719]|0,c[43726]|0,d)|0}Kv(c[43719]|0,c[43725]|0,c[43727]|0)|0;d=c[43719]|0;e=c[d+4>>2]|0;if(e>>>0<(c[d+8>>2]|0)>>>0){f=d;g=e}else{Jv(d,1)|0;d=c[43719]|0;f=d;g=c[d+4>>2]|0}c[f+4>>2]=g+1;a[g]=0;g=c[43719]|0;f=c[g>>2]|0;c[g+4>>2]=f;Fv(3,79472,(g=i,i=i+8|0,c[g>>2]=f,g)|0)|0;i=g;i=b;return}function xi(b,e,f){b=b|0;e=e|0;f=f|0;c[43719]=e;Iv(174880,128,0);c[43717]=b;a[174899]=0;a[174896]=0;a[174897]=0;c[43727]=0;c[43728]=0;a[174898]=1;b=f+52|0;f=md(Tj(d[(c[(c[b>>2]|0)+8>>2]|0)+115|0]|0)|0)|0;c[43716]=f;rd(f,c[(c[(c[b>>2]|0)+8>>2]|0)+136>>2]|0);sd(c[43716]|0,98,8);td(c[43716]|0,70);return 0}function yi(e,f,g){e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;j=i;i=i+264|0;k=j|0;l=j+8|0;m=j+16|0;n=j+24|0;o=j+56|0;p=j+88|0;q=j+120|0;r=j+152|0;s=j+184|0;t=j+216|0;u=j+248|0;v=j+256|0;if((pm(f,97048)|0)==0){w=jk(120)|0;c[w+100>>2]=-1;a[w+88|0]=-1;x=v;y=c[g>>2]|0;if((y|0)!=0){z=v|0;v=g;A=y;while(1){y=v+8|0;B=c[v+4>>2]|0;c[z>>2]=A;C=vb(x|0,3264,21,8,28)|0;if((C|0)==0){Fv(0,120960,(D=i,i=i+16|0,c[D>>2]=A,c[D+8>>2]=82896,D)|0)|0;i=D;E=1}else{F=Oc[c[C+4>>2]&255](w,B)|0;E=(d[174896]|0|F)&255}a[174896]=E;F=c[y>>2]|0;if((F|0)==0){break}else{v=y;A=F}}}c[44692]=w;a[174898]=0;c[43718]=285;i=j;return}do{if((pm(f,91560)|0)!=0){if((pm(f,86296)|0)==0){break}if((pm(f,81584)|0)==0){a[174898]=1;w=jk(104)|0;b[w+80>>1]=1;b[w+82>>1]=1;A=u;v=c[g>>2]|0;if((v|0)!=0){E=u|0;x=g;z=v;while(1){v=x+8|0;F=c[x+4>>2]|0;c[E>>2]=z;y=vb(A|0,70864,21,8,28)|0;if((y|0)==0){Fv(0,120960,(D=i,i=i+16|0,c[D>>2]=z,c[D+8>>2]=109488,D)|0)|0;i=D;G=1}else{B=Oc[c[y+4>>2]&255](w,F)|0;G=(d[174896]|0|B)&255}a[174896]=G;B=c[v>>2]|0;if((B|0)==0){break}else{x=v;z=B}}}c[44692]=w;c[43718]=286;i=j;return}if((pm(f,163664)|0)==0){z=t;c[z>>2]=c[4952];c[z+4>>2]=c[4953];c[z+8>>2]=c[4954];c[z+12>>2]=c[4955];c[z+16>>2]=c[4956];c[z+20>>2]=c[4957];c[z+24>>2]=c[4958];c[z+28>>2]=c[4959];h[t+16>>3]=-1.0;c[t+24>>2]=0;do{if((g|0)!=0){x=k;A=c[g>>2]|0;if((A|0)==0){break}E=k|0;B=g;v=A;while(1){A=B+8|0;F=c[B+4>>2]|0;c[E>>2]=v;y=vb(x|0,25920,3,8,28)|0;if((y|0)==0){Fv(0,120960,(D=i,i=i+16|0,c[D>>2]=v,c[D+8>>2]=114616,D)|0)|0;i=D;H=1}else{C=Oc[c[y+4>>2]&255](z,F)|0;H=(d[174896]|0|C)&255}a[174896]=H;C=c[A>>2]|0;if((C|0)==0){break}else{B=A;v=C}}}}while(0);w=c[e+144>>2]|0;c[44692]=Hc[c[w>>2]&63](w,z,1)|0;c[43718]=287;i=j;return}if((pm(f,159656)|0)==0){w=s;c[w>>2]=c[4952];c[w+4>>2]=c[4953];c[w+8>>2]=c[4954];c[w+12>>2]=c[4955];c[w+16>>2]=c[4956];c[w+20>>2]=c[4957];c[w+24>>2]=c[4958];c[w+28>>2]=c[4959];h[s+16>>3]=-1.0;c[s+24>>2]=1;v=c[e+144>>2]|0;c[44692]=Hc[c[v>>2]&63](v,w,1)|0;c[43718]=289;i=j;return}if((pm(f,142280)|0)==0){w=r;c[w>>2]=c[4952];c[w+4>>2]=c[4953];c[w+8>>2]=c[4954];c[w+12>>2]=c[4955];c[w+16>>2]=c[4956];c[w+20>>2]=c[4957];c[w+24>>2]=c[4958];c[w+28>>2]=c[4959];h[r+16>>3]=-1.0;c[r+24>>2]=32;v=c[e+144>>2]|0;c[44692]=Hc[c[v>>2]&63](v,w,1)|0;c[43718]=293;i=j;return}if((pm(f,154648)|0)==0){w=q;c[w>>2]=c[4952];c[w+4>>2]=c[4953];c[w+8>>2]=c[4954];c[w+12>>2]=c[4955];c[w+16>>2]=c[4956];c[w+20>>2]=c[4957];c[w+24>>2]=c[4958];c[w+28>>2]=c[4959];h[q+16>>3]=-1.0;c[q+24>>2]=4;v=c[e+144>>2]|0;c[44692]=Hc[c[v>>2]&63](v,w,1)|0;c[43718]=290;i=j;return}if((pm(f,151360)|0)==0){w=p;c[w>>2]=c[4952];c[w+4>>2]=c[4953];c[w+8>>2]=c[4954];c[w+12>>2]=c[4955];c[w+16>>2]=c[4956];c[w+20>>2]=c[4957];c[w+24>>2]=c[4958];c[w+28>>2]=c[4959];h[p+16>>3]=-1.0;c[p+24>>2]=2;v=c[e+144>>2]|0;c[44692]=Hc[c[v>>2]&63](v,w,1)|0;c[43718]=288;i=j;return}if((pm(f,148472)|0)==0){w=o;c[w>>2]=c[4952];c[w+4>>2]=c[4953];c[w+8>>2]=c[4954];c[w+12>>2]=c[4955];c[w+16>>2]=c[4956];c[w+20>>2]=c[4957];c[w+24>>2]=c[4958];c[w+28>>2]=c[4959];h[o+16>>3]=-1.0;c[o+24>>2]=8;v=c[e+144>>2]|0;c[44692]=Hc[c[v>>2]&63](v,w,1)|0;c[43718]=291;i=j;return}if((pm(f,145248)|0)==0){w=n;c[w>>2]=c[4952];c[w+4>>2]=c[4953];c[w+8>>2]=c[4954];c[w+12>>2]=c[4955];c[w+16>>2]=c[4956];c[w+20>>2]=c[4957];c[w+24>>2]=c[4958];c[w+28>>2]=c[4959];h[n+16>>3]=-1.0;c[n+24>>2]=16;v=c[e+144>>2]|0;c[44692]=Hc[c[v>>2]&63](v,w,1)|0;c[43718]=292;i=j;return}if((pm(f,139176)|0)==0){c[44692]=0;w=m;v=c[g>>2]|0;if((v|0)!=0){B=m|0;x=g;E=v;while(1){v=x+8|0;C=c[x+4>>2]|0;c[B>>2]=E;A=vb(w|0,71320,1,8,28)|0;if((A|0)==0){Fv(0,120960,(D=i,i=i+16|0,c[D>>2]=E,c[D+8>>2]=120184,D)|0)|0;i=D;I=1}else{F=Oc[c[A+4>>2]&255](178768,C)|0;I=(d[174896]|0|F)&255}a[174896]=I;F=c[v>>2]|0;if((F|0)==0){break}else{x=v;E=F}}}c[43718]=282;i=j;return}if((pm(f,136632)|0)==0){c[43718]=276;i=j;return}if((pm(f,133736)|0)==0){c[43718]=279;i=j;return}if((pm(f,131648)|0)!=0){if((pm(f,167840)|0)==0){c[43718]=262;i=j;return}else{c[43718]=268;a[174897]=1;E=zd(c[43716]|0)|0;Fv(1,129424,(D=i,i=i+16|0,c[D>>2]=f,c[D+8>>2]=E,D)|0)|0;i=D;i=j;return}}E=jk(40)|0;x=l;w=c[g>>2]|0;if((w|0)!=0){B=l|0;z=g;F=w;while(1){w=z+8|0;v=c[z+4>>2]|0;c[B>>2]=F;C=vb(x|0,21624,2,8,28)|0;if((C|0)==0){Fv(0,120960,(D=i,i=i+16|0,c[D>>2]=F,c[D+8>>2]=126216,D)|0)|0;i=D;J=1}else{A=Oc[c[C+4>>2]&255](E,v)|0;J=(d[174896]|0|A)&255}a[174896]=J;A=c[w>>2]|0;if((A|0)==0){break}else{z=w;F=A}}}c[44692]=E;c[43718]=284;i=j;return}}while(0);a[174898]=0;c[43718]=260;i=j;return}function zi(b,d){b=b|0;d=d|0;var e=0,f=0;b=i;if((pm(d,97048)|0)==0){c[43718]=264;a[174898]=1;i=b;return}do{if((pm(d,91560)|0)!=0){if((pm(d,86296)|0)==0){break}if((pm(d,81584)|0)==0){c[43718]=265;a[174898]=0;i=b;return}if((pm(d,167840)|0)==0){c[43718]=263;i=b;return}if((pm(d,163664)|0)==0){c[43718]=266;i=b;return}if((pm(d,159656)|0)==0){c[43718]=270;i=b;return}if((pm(d,154648)|0)==0){c[43718]=271;i=b;return}if((pm(d,151360)|0)==0){c[43718]=269;i=b;return}if((pm(d,148472)|0)==0){c[43718]=272;i=b;return}if((pm(d,145248)|0)==0){c[43718]=273;i=b;return}if((pm(d,142280)|0)==0){c[43718]=274;i=b;return}if((pm(d,139176)|0)==0){if((c[43718]|0)==282){c[43718]=281;i=b;return}else{c[43718]=258;i=b;return}}if((pm(d,136632)|0)==0){if((c[43718]|0)==276){c[43718]=275;i=b;return}else{c[43718]=277;i=b;return}}if((pm(d,133736)|0)==0){if((c[43718]|0)==279){c[43718]=278;i=b;return}else{c[43718]=280;i=b;return}}if((pm(d,131648)|0)!=0){c[43718]=268;a[174897]=1;e=zd(c[43716]|0)|0;Fv(1,129424,(f=i,i=i+16|0,c[f>>2]=d,c[f+8>>2]=e,f)|0)|0;i=f;i=b;return}if((c[43718]|0)==284){c[43718]=283;i=b;return}else{c[43718]=259;i=b;return}}}while(0);c[43718]=261;i=b;return}function Ai(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((a[174898]|0)==0|(e|0)==0){return}else{f=e;g=0;h=d}while(1){d=h+1|0;e=a[h]|0;if((e&255)>>>0>31>>>0){b=c[43719]|0;i=c[b+4>>2]|0;if(i>>>0<(c[b+8>>2]|0)>>>0){j=b;k=i}else{Jv(b,1)|0;b=c[43719]|0;j=b;k=c[b+4>>2]|0}c[j+4>>2]=k+1;a[k]=e;l=g+1|0}else{l=g}e=f-1|0;if((e|0)==0){break}else{f=e;g=l;h=d}}if((l|0)==0){return}c[43718]=267;return}function Bi(){var b=0;b=(a[174897]|a[174896])<<24>>24;qd(c[43716]|0);Mv(174880);return b|0}function Ci(){var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;b=i;c[43718]=0;d=0;a:while(1){e=a[174899]|0;do{if((e<<24>>24|0)==2){f=-1;g=41;break a}else if((e<<24>>24|0)==0){a[174899]=1;h=6;j=0;k=157976}else{l=c[43717]|0;m=a[l]|0;if(m<<24>>24==0){a[174899]=2;h=7;j=d;k=127960;break}n=l+1|0;b:do{if(m<<24>>24==60){o=a[n]|0;c:do{if(o<<24>>24==33){if((Za(l+2|0,115392,2)|0)!=0){p=n;q=33;g=18;break}r=l+4|0;s=r;t=1;while(1){u=s;while(1){v=u+1|0;w=a[u]|0;if((w<<24>>24|0)==0){x=u;break c}else if((w<<24>>24|0)==62){g=14;break}else if((w<<24>>24|0)==60){g=12;break}else{u=v}}if((g|0)==12){g=0;y=t+1|0;z=60}else if((g|0)==14){g=0;y=t-1|0;z=62}if((y|0)==0){break}else{s=v;t=y}}t=u-2|0;if(t>>>0>=r>>>0){if((Za(t|0,115392,2)|0)==0){A=u;B=z;g=20;break}}Fv(0,102712,(C=i,i=i+1|0,i=i+7&-8,c[C>>2]=0,C)|0)|0;i=C;a[174896]=1;A=u;B=a[u]|0;g=20}else{p=n;q=o;g=18}}while(0);d:do{if((g|0)==18){while(1){g=0;if((q<<24>>24|0)==0|(q<<24>>24|0)==62){A=p;B=q;g=20;break d}o=p+1|0;p=o;q=a[o]|0;g=18}}}while(0);do{if((g|0)==20){g=0;if(B<<24>>24!=62){x=A;break}D=A+1|0;break b}}while(0);Fv(0,108288,(C=i,i=i+1|0,i=i+7&-8,c[C>>2]=0,C)|0)|0;i=C;a[174896]=1;D=x}else{r=l;o=m;while(1){do{if((o<<24>>24|0)==38){t=r+1|0;if((a[t]|0)==35){g=26;break}E=fn(t,174880)|0}else if((o<<24>>24|0)==0|(o<<24>>24|0)==60){D=r;break b}else{g=26}}while(0);if((g|0)==26){g=0;t=c[43721]|0;if(t>>>0<(c[43722]|0)>>>0){F=t}else{Jv(174880,1)|0;F=c[43721]|0}c[43721]=F+1;a[F]=o;E=r+1|0}r=E;o=a[E]|0}}}while(0);h=D-l|0;j=D;k=l}}while(0);c[43726]=c[43725];c[43728]=c[43727];c[43725]=k;c[43727]=h;e=c[43721]|0;m=c[43720]|0;n=e-m|0;o=c[43716]|0;if((e|0)==(m|0)){G=ud(o,k,h,(h|0)==0|0)|0}else{if(e>>>0<(c[43722]|0)>>>0){H=e}else{Jv(174880,1)|0;H=c[43721]|0}a[H]=0;e=c[43720]|0;c[43721]=e;G=ud(o,e,n,0)|0}if(!((G|0)!=0|(a[174897]|0)!=0)){n=Ad(yd(c[43716]|0)|0)|0;e=zd(c[43716]|0)|0;Fv(1,120352,(C=i,i=i+16|0,c[C>>2]=n,c[C+8>>2]=e,C)|0)|0;i=C;wi();a[174897]=1;c[43718]=268}if((j|0)!=0){c[43717]=j}e=c[43718]|0;if((e|0)==0){d=j}else{f=e;g=41;break}}if((g|0)==41){i=b;return f|0}return 0}function Di(a,b){a=a|0;b=b|0;c[a+36>>2]=Lb(b|0)|0;return 0}function Ei(a,b){a=a|0;b=b|0;c[a+32>>2]=Lb(b|0)|0;return 0}function Fi(a,b){a=a|0;b=b|0;return pm(c[a>>2]|0,c[b>>2]|0)|0}function Gi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;f=(Cb(a[d]|0)|0)<<24>>24;do{if((f|0)==82){g=d+1|0;if((pm(g,118688)|0)!=0){h=g;j=5;break}c[b>>2]=114;k=0;i=e;return k|0}else if((f|0)!=76){h=d+1|0;j=5}}while(0);do{if((j|0)==5){if((pm(h,117768)|0)==0){break}do{if((f|0)!=67){if((pm(h,116848)|0)!=0){break}Fv(0,115896,(g=i,i=i+8|0,c[g>>2]=d,g)|0)|0;i=g;k=1;i=e;return k|0}}while(0);c[b>>2]=110;k=0;i=e;return k|0}}while(0);c[b>>2]=108;k=0;i=e;return k|0}function Hi(a,b){a=a|0;b=b|0;c[a+4>>2]=b;return 0}function Ii(a,b){a=a|0;b=b|0;c[a>>2]=b;return 0}function Ji(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0;d=i;i=i+8|0;e=d|0;f=Ja(b|0,e|0,10)|0;if((c[e>>2]|0)==(b|0)){Fv(0,111576,(g=i,i=i+16|0,c[g>>2]=112168,c[g+8>>2]=b,g)|0)|0;i=g;j=1;i=d;return j|0}if((f|0)>255){Fv(0,110912,(g=i,i=i+24|0,c[g>>2]=112168,c[g+8>>2]=b,c[g+16>>2]=255,g)|0)|0;i=g;j=1;i=d;return j|0}if((f|0)<0){Fv(0,110160,(g=i,i=i+24|0,c[g>>2]=112168,c[g+8>>2]=b,c[g+16>>2]=0,g)|0)|0;i=g;j=1;i=d;return j|0}else{h[a+16>>3]=+(f|0);j=0;i=d;return j|0}return 0}function Ki(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;g=(Cb(a[e]|0)|0)<<24>>24;do{if((g|0)==67){if((pm(e+1|0,116848)|0)==0){h=0}else{break}i=f;return h|0}else if((g|0)==82){if((pm(e+1|0,118688)|0)!=0){break}j=d+36|0;b[j>>1]=b[j>>1]|2;h=0;i=f;return h|0}else if((g|0)==76){if((pm(e+1|0,117768)|0)!=0){break}j=d+36|0;b[j>>1]=b[j>>1]|4;h=0;i=f;return h|0}else if((g|0)==84){if((pm(e+1|0,83696)|0)!=0){break}j=d+36|0;b[j>>1]=b[j>>1]|6;h=0;i=f;return h|0}}while(0);Fv(0,83296,(d=i,i=i+8|0,c[d>>2]=e,d)|0)|0;i=d;h=1;i=f;return h|0}function Li(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;g=(Cb(a[e]|0)|0)<<24>>24;do{if((g|0)==76){if((pm(e+1|0,117768)|0)!=0){break}h=d+36|0;b[h>>1]=b[h>>1]|512;j=0;i=f;return j|0}else if((g|0)==67){if((pm(e+1|0,116848)|0)==0){j=0}else{break}i=f;return j|0}else if((g|0)==82){if((pm(e+1|0,118688)|0)!=0){break}h=d+36|0;b[h>>1]=b[h>>1]|256;j=0;i=f;return j|0}}while(0);Fv(0,84096,(d=i,i=i+8|0,c[d>>2]=e,d)|0)|0;i=d;j=1;i=f;return j|0}function Mi(a,b){a=a|0;b=b|0;c[a+20>>2]=Lb(b|0)|0;return 0}function Ni(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+8|0;g=f|0;h=Ja(e|0,g|0,10)|0;if((c[g>>2]|0)==(e|0)){Fv(0,111576,(j=i,i=i+16|0,c[j>>2]=84544,c[j+8>>2]=e,j)|0)|0;i=j;k=1;i=f;return k|0}if((h|0)>255){Fv(0,110912,(j=i,i=i+24|0,c[j>>2]=84544,c[j+8>>2]=e,c[j+16>>2]=255,j)|0)|0;i=j;k=1;i=f;return k|0}if((h|0)<0){Fv(0,110160,(j=i,i=i+24|0,c[j>>2]=84544,c[j+8>>2]=e,c[j+16>>2]=0,j)|0)|0;i=j;k=1;i=f;return k|0}else{a[d+33|0]=h;h=d+36|0;b[h>>1]=b[h>>1]|32;k=0;i=f;return k|0}return 0}function Oi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+8|0;g=f|0;h=Ja(e|0,g|0,10)|0;if((c[g>>2]|0)==(e|0)){Fv(0,111576,(j=i,i=i+16|0,c[j>>2]=84904,c[j+8>>2]=e,j)|0)|0;i=j;k=1;i=f;return k|0}if((h|0)>255){Fv(0,110912,(j=i,i=i+24|0,c[j>>2]=84904,c[j+8>>2]=e,c[j+16>>2]=255,j)|0)|0;i=j;k=1;i=f;return k|0}if((h|0)<0){Fv(0,110160,(j=i,i=i+24|0,c[j>>2]=84904,c[j+8>>2]=e,c[j+16>>2]=0,j)|0)|0;i=j;k=1;i=f;return k|0}else{a[d+34|0]=h;h=d+36|0;b[h>>1]=b[h>>1]|64;k=0;i=f;return k|0}return 0}function Pi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0;f=i;i=i+8|0;g=f|0;h=Ja(e|0,g|0,10)|0;if((c[g>>2]|0)==(e|0)){Fv(0,111576,(j=i,i=i+16|0,c[j>>2]=85368,c[j+8>>2]=e,j)|0)|0;i=j;k=1;i=f;return k|0}if((h|0)>127){Fv(0,110912,(j=i,i=i+24|0,c[j>>2]=85368,c[j+8>>2]=e,c[j+16>>2]=127,j)|0)|0;i=j;k=1;i=f;return k|0}if((h|0)<-128){Fv(0,110160,(j=i,i=i+24|0,c[j>>2]=85368,c[j+8>>2]=e,c[j+16>>2]=-128,j)|0)|0;i=j;k=1;i=f;return k|0}else{a[d+32|0]=h;h=d+36|0;b[h>>1]=b[h>>1]|128;k=0;i=f;return k|0}return 0}function Qi(a,b){a=a|0;b=b|0;c[a+24>>2]=Lb(b|0)|0;return 0}function Ri(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+8|0;f=e|0;g=Ja(d|0,f|0,10)|0;if((c[f>>2]|0)==(d|0)){Fv(0,111576,(h=i,i=i+16|0,c[h>>2]=86680,c[h+8>>2]=d,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)>65535){Fv(0,110912,(h=i,i=i+24|0,c[h>>2]=86680,c[h+8>>2]=d,c[h+16>>2]=65535,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)<0){Fv(0,110160,(h=i,i=i+24|0,c[h>>2]=86680,c[h+8>>2]=d,c[h+16>>2]=0,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)==0){Fv(0,85816,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0)|0;i=h;j=1;i=e;return j|0}else{b[a+80>>1]=g;j=0;i=e;return j|0}return 0}function Si(a,e){a=a|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;g=(Cb(d[e]|0|0)|0)<<24>>24;do{if((g|0)==70){if((pm(e+1|0,87736)|0)==0){h=0}else{break}i=f;return h|0}else if((g|0)==84){if((pm(e+1|0,88168)|0)!=0){break}j=a+36|0;b[j>>1]=b[j>>1]|1;h=0;i=f;return h|0}}while(0);Fv(0,87216,(a=i,i=i+8|0,c[a>>2]=e,a)|0)|0;i=a;h=1;i=f;return h|0}function Ti(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+8|0;e=d|0;f=Ja(b|0,e|0,10)|0;if((c[e>>2]|0)==(b|0)){Fv(0,111576,(g=i,i=i+16|0,c[g>>2]=88608,c[g+8>>2]=b,g)|0)|0;i=g;h=1;i=d;return h|0}if((f|0)>360){Fv(0,110912,(g=i,i=i+24|0,c[g>>2]=88608,c[g+8>>2]=b,c[g+16>>2]=360,g)|0)|0;i=g;h=1;i=d;return h|0}if((f|0)<0){Fv(0,110160,(g=i,i=i+24|0,c[g>>2]=88608,c[g+8>>2]=b,c[g+16>>2]=0,g)|0)|0;i=g;h=1;i=d;return h|0}else{c[a+28>>2]=f&65535;h=0;i=d;return h|0}return 0}function Ui(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+8|0;f=e|0;g=Ja(d|0,f|0,10)|0;if((c[f>>2]|0)==(d|0)){Fv(0,111576,(h=i,i=i+16|0,c[h>>2]=89072,c[h+8>>2]=d,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)>65535){Fv(0,110912,(h=i,i=i+24|0,c[h>>2]=89072,c[h+8>>2]=d,c[h+16>>2]=65535,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)<0){Fv(0,110160,(h=i,i=i+24|0,c[h>>2]=89072,c[h+8>>2]=d,c[h+16>>2]=0,h)|0)|0;i=h;j=1;i=e;return j|0}else{b[a+40>>1]=g;j=0;i=e;return j|0}return 0}function Vi(a,b){a=a|0;b=b|0;c[a>>2]=Lb(b|0)|0;return 0}function Wi(a,b){a=a|0;b=b|0;c[a+16>>2]=Lb(b|0)|0;return 0}function Xi(a,b){a=a|0;b=b|0;c[a+4>>2]=Lb(b|0)|0;return 0}function Yi(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+8|0;f=e|0;g=Ja(d|0,f|0,10)|0;if((c[f>>2]|0)==(d|0)){Fv(0,111576,(h=i,i=i+16|0,c[h>>2]=90016,c[h+8>>2]=d,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)>65535){Fv(0,110912,(h=i,i=i+24|0,c[h>>2]=90016,c[h+8>>2]=d,c[h+16>>2]=65535,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)<0){Fv(0,110160,(h=i,i=i+24|0,c[h>>2]=90016,c[h+8>>2]=d,c[h+16>>2]=0,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)==0){Fv(0,89456,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0)|0;i=h;j=1;i=e;return j|0}else{b[a+82>>1]=g;j=0;i=e;return j|0}return 0}function Zi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;g=Lb(e|0)|0;e=La(g|0,94896)|0;if((e|0)==0){h=0;eF(g);i=f;return h|0}j=d+42|0;d=e;e=0;while(1){a:do{if(((Cb(a[d]|0)|0)&255|0)==82){k=d+1|0;if((pm(k,94416)|0)==0){b[j>>1]=b[j>>1]|4;l=e;break}if((pm(k,94024)|0)==0){b[j>>1]=b[j>>1]|2;l=e;break}else{Fv(0,93544,(m=i,i=i+8|0,c[m>>2]=d,m)|0)|0;i=m;l=1;break}}else{if((pm(d,93072)|0)==0){b[j>>1]=b[j>>1]&-385;l=e;break}do{if((pm(d,92608)|0)!=0){if((pm(d,91960)|0)==0){break}if((pm(d,91120)|0)==0){b[j>>1]=b[j>>1]|128;l=e;break a}if((pm(d,90600)|0)==0){b[j>>1]=b[j>>1]|256;l=e;break a}else{Fv(0,93544,(m=i,i=i+8|0,c[m>>2]=d,m)|0)|0;i=m;l=1;break a}}}while(0);b[j>>1]=b[j>>1]|32;l=e}}while(0);k=La(0,94896)|0;if((k|0)==0){h=l;break}else{d=k;e=l}}eF(g);i=f;return h|0}function _i(a,b){a=a|0;b=b|0;c[a+8>>2]=Lb(b|0)|0;return 0}function $i(a,b){a=a|0;b=b|0;c[a+12>>2]=Lb(b|0)|0;return 0}function aj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;g=(Cb(a[e]|0)|0)<<24>>24;do{if((g|0)==77){if((pm(e+1|0,95816)|0)==0){h=0}else{break}i=f;return h|0}else if((g|0)==66){if((pm(e+1|0,97464)|0)!=0){break}j=d+36|0;b[j>>1]=b[j>>1]|16;h=0;i=f;return h|0}else if((g|0)==84){if((pm(e+1|0,96352)|0)!=0){break}j=d+36|0;b[j>>1]=b[j>>1]|8;h=0;i=f;return h|0}}while(0);Fv(0,95272,(d=i,i=i+8|0,c[d>>2]=e,d)|0)|0;i=d;h=1;i=f;return h|0}function bj(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+8|0;f=e|0;g=Ja(d|0,f|0,10)|0;if((c[f>>2]|0)==(d|0)){Fv(0,111576,(h=i,i=i+16|0,c[h>>2]=98160,c[h+8>>2]=d,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)>65535){Fv(0,110912,(h=i,i=i+24|0,c[h>>2]=98160,c[h+8>>2]=d,c[h+16>>2]=65535,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)<0){Fv(0,110160,(h=i,i=i+24|0,c[h>>2]=98160,c[h+8>>2]=d,c[h+16>>2]=0,h)|0)|0;i=h;j=1;i=e;return j|0}else{b[a+38>>1]=g;j=0;i=e;return j|0}return 0}function cj(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;g=(Cb(a[e]|0)|0)<<24>>24;do{if((g|0)==67){if((pm(e+1|0,116848)|0)==0){h=0}else{break}i=f;return h|0}else if((g|0)==76){if((pm(e+1|0,117768)|0)!=0){break}j=d+36|0;b[j>>1]=b[j>>1]|4;h=0;i=f;return h|0}else if((g|0)==82){if((pm(e+1|0,118688)|0)!=0){break}j=d+36|0;b[j>>1]=b[j>>1]|2;h=0;i=f;return h|0}}while(0);Fv(0,115896,(d=i,i=i+8|0,c[d>>2]=e,d)|0)|0;i=d;h=1;i=f;return h|0}function dj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+8|0;f=e|0;g=Ja(d|0,f|0,10)|0;if((c[f>>2]|0)==(d|0)){Fv(0,111576,(h=i,i=i+16|0,c[h>>2]=79912,c[h+8>>2]=d,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)>127){Fv(0,110912,(h=i,i=i+24|0,c[h>>2]=79912,c[h+8>>2]=d,c[h+16>>2]=127,h)|0)|0;i=h;j=1;i=e;return j|0}if((g|0)<0){Fv(0,110160,(h=i,i=i+24|0,c[h>>2]=79912,c[h+8>>2]=d,c[h+16>>2]=0,h)|0)|0;i=h;j=1;i=e;return j|0}else{a[b+88|0]=g;j=0;i=e;return j|0}return 0}function ej(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;if((a[d]|0)==42){f=b+112|0;a[f]=a[f]|1;g=0;i=e;return g|0}else{Fv(0,80216,(f=i,i=i+8|0,c[f>>2]=d,f)|0)|0;i=f;g=1;i=e;return g|0}return 0}function fj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=i;if((a[d]|0)==42){f=b+112|0;a[f]=a[f]|2;g=0;i=e;return g|0}else{Fv(0,80672,(f=i,i=i+8|0,c[f>>2]=d,f)|0)|0;i=f;g=1;i=e;return g|0}return 0}
+
+
+
+function eD(b){b=b|0;var d=0;_z(b,122952)|0;d=ew(c[(c[b>>2]|0)+168>>2]|0,122800)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}_z(b,122592)|0;_z(b,d)|0;_z(b,122416)|0}}while(0);_z(b,122224)|0;_z(b,122040)|0;_z(b,121976)|0;d=b+12|0;_z(b,gk(c[c[c[d>>2]>>2]>>2]|0)|0)|0;_z(b,121864)|0;_z(b,gk(c[(c[c[d>>2]>>2]|0)+4>>2]|0)|0)|0;_z(b,121640)|0;_z(b,gk(c[(c[c[d>>2]>>2]|0)+8>>2]|0)|0)|0;_z(b,121592)|0;_z(b,148920)|0;return}function fD(b){b=b|0;var d=0,e=0,f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0;d=i;e=c[b+16>>2]|0;_z(b,124800)|0;f=e+8|0;if((a[$w(c[f>>2]|0)|0]|0)!=0){_z(b,124616)|0;_z(b,gk($w(c[f>>2]|0)|0)|0)|0}f=da(c[b+168>>2]|0,c[b+164>>2]|0)|0;dA(b,124384,(e=i,i=i+8|0,c[e>>2]=f,e)|0);i=e;f=c[b+452>>2]|0;dA(b,124120,(e=i,i=i+16|0,c[e>>2]=c[b+448>>2],c[e+8>>2]=f,e)|0);i=e;g=+h[b+432>>3]/72.0;j=+h[b+440>>3]/72.0;k=+h[b+392>>3]*j;l=g*+h[b+400>>3];m=j*+h[b+408>>3];dA(b,123832,(e=i,i=i+32|0,h[e>>3]=+h[b+384>>3]*g,h[e+8>>3]=k,h[e+16>>3]=l,h[e+24>>3]=m,e)|0);i=e;_z(b,123456)|0;_z(b,123208)|0;_z(b,128448)|0;i=d;return}function gD(a){a=a|0;_z(a,124920)|0;return}function hD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;_z(a,128192)|0;_z(a,gk(b)|0)|0;_z(a,125096)|0;return}function iD(a){a=a|0;_z(a,130512)|0;return}function jD(b){b=b|0;var d=0,e=0,f=0.0,g=0,j=0.0,k=0.0,l=0;d=i;e=c[b+16>>2]|0;_z(b,128192)|0;_z(b,gk(c[e+212>>2]|0)|0)|0;_z(b,125592)|0;f=+h[b+496>>3];g=-(c[b+360>>2]|0)|0;j=+h[b+504>>3];k=-0.0- +h[b+512>>3];dA(b,125320,(l=i,i=i+40|0,h[l>>3]=+h[b+488>>3],h[l+8>>3]=f,c[l+16>>2]=g,h[l+24>>3]=j,h[l+32>>3]=k,l)|0);i=l;l=e+8|0;if((a[$w(c[l>>2]|0)|0]|0)==0){i=d;return}_z(b,127488)|0;_z(b,gk($w(c[l>>2]|0)|0)|0)|0;_z(b,126984)|0;i=d;return}function kD(a){a=a|0;_z(a,130512)|0;return}function lD(a){a=a|0;var b=0;b=c[a+16>>2]|0;_z(a,128192)|0;_z(a,gk(c[b+212>>2]|0)|0)|0;_z(a,125880)|0;_z(a,127488)|0;_z(a,gk($w(c[b+8>>2]|0)|0)|0)|0;_z(a,126984)|0;return}function mD(a){a=a|0;_z(a,130512)|0;return}function nD(a){a=a|0;var b=0,d=0,e=0,f=0;b=i;d=c[a+16>>2]|0;_z(a,128192)|0;_z(a,gk(c[d+212>>2]|0)|0)|0;e=c[a+160>>2]|0;if((e|0)>1){f=gk(c[(c[(c[a>>2]|0)+308>>2]|0)+(e<<2)>>2]|0)|0;dA(a,126656,(e=i,i=i+8|0,c[e>>2]=f,e)|0);i=e}_z(a,126312)|0;_z(a,127488)|0;_z(a,gk($w(c[d+8>>2]|0)|0)|0)|0;_z(a,126984)|0;i=b;return}function oD(a){a=a|0;_z(a,130512)|0;return}function pD(a){a=a|0;var b=0,d=0;b=c[a+16>>2]|0;_z(a,128192)|0;_z(a,gk(c[b+212>>2]|0)|0)|0;_z(a,127832)|0;_z(a,127488)|0;d=fk(127272,c[b+8>>2]|0)|0;_z(a,gk(d)|0)|0;eF(d);_z(a,126984)|0;return}function qD(a){a=a|0;_z(a,130512)|0;return}function rD(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;_z(b,130304)|0;if((f|0)!=0){_z(b,130072)|0;_z(b,gk(f)|0)|0;_z(b,144328)|0}_z(b,130984)|0;_z(b,129896)|0;do{if((c|0)!=0){if((a[c]|0)==0){break}_z(b,129608)|0;_z(b,c)|0;_z(b,144328)|0}}while(0);do{if((d|0)!=0){if((a[d]|0)==0){break}_z(b,129104)|0;_z(b,gk(d)|0)|0;_z(b,144328)|0}}while(0);if((e|0)==0){g=_z(b,128448)|0;return}if((a[e]|0)==0){g=_z(b,128448)|0;return}_z(b,128728)|0;_z(b,gk(e)|0)|0;_z(b,144328)|0;g=_z(b,128448)|0;return}function sD(a){a=a|0;_z(a,130696)|0;_z(a,130512)|0;return}function tD(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;g=i;j=e;e=i;i=i+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];j=c[b+16>>2]|0;_z(b,136736)|0;k=a[f+48|0]|0;if((k|0)==114){_z(b,135944)|0}else if((k|0)==108){_z(b,136200)|0}else{_z(b,135672)|0}k=e+8|0;l=+h[f+24>>3]+ +h[k>>3];h[k>>3]=l;dA(b,135392,(k=i,i=i+16|0,h[k>>3]=+h[e>>3],h[k+8>>3]=-0.0-l,k)|0);i=k;e=f+4|0;m=c[e>>2]|0;n=c[m+8>>2]|0;do{if((n|0)==0){dA(b,133808,(k=i,i=i+8|0,c[k>>2]=c[m>>2],k)|0);i=k;o=0;p=0}else{q=c[(c[(c[(c[b>>2]|0)+168>>2]|0)+8>>2]|0)+232>>2]|0;if((q|0)==2){r=n+24|0;s=n+32|0;t=n+28|0}else if((q|0)==1){r=n|0;s=n+16|0;t=n+8|0}else{r=n+4|0;s=n+16|0;t=n+8|0}q=c[s>>2]|0;u=c[t>>2]|0;v=c[n+12>>2]|0;dA(b,135008,(k=i,i=i+8|0,c[k>>2]=c[r>>2],k)|0);i=k;w=c[n+24>>2]|0;if((w|0)!=0){dA(b,134752,(k=i,i=i+8|0,c[k>>2]=w,k)|0);i=k}_z(b,144328)|0;if((u|0)!=0){dA(b,134552,(k=i,i=i+8|0,c[k>>2]=u,k)|0);i=k}if((v|0)!=0){dA(b,134344,(k=i,i=i+8|0,c[k>>2]=v,k)|0);i=k}if((q|0)==0){o=0;p=u;break}dA(b,134096,(k=i,i=i+8|0,c[k>>2]=q,k)|0);i=k;o=q;p=u}}while(0);n=c[e>>2]|0;do{if((n|0)!=0){r=c[n+24>>2]<<25>>25;if((r|0)==0){break}if((r&1|0)!=0&(p|0)==0){dA(b,133496,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k}if((r&2|0)!=0&(o|0)==0){dA(b,133328,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k}if((r&36|0)!=0){dA(b,133152,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;if((r&4|0)==0){x=0}else{dA(b,133016,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k;x=1}if((r&32|0)!=0){dA(b,132832,(k=i,i=i+8|0,c[k>>2]=(x|0)!=0?132712:213408,k)|0);i=k}dA(b,144328,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k}if((r&8|0)!=0){dA(b,132376,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k}if((r&16|0)==0){break}dA(b,132136,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0);i=k}}while(0);dA(b,131760,(k=i,i=i+8|0,h[k>>3]=+h[(c[e>>2]|0)+16>>3],k)|0);i=k;e=j+16|0;x=c[j+48>>2]|0;if((x|0)==5){j=c[e>>2]|0;if((pm(j,168168)|0)==0){y=_z(b,130984)|0;z=f|0;A=c[z>>2]|0;B=hk(A,1)|0;C=_z(b,B)|0;D=_z(b,130832)|0;i=g;return}dA(b,131400,(k=i,i=i+8|0,c[k>>2]=j,k)|0);i=k;y=_z(b,130984)|0;z=f|0;A=c[z>>2]|0;B=hk(A,1)|0;C=_z(b,B)|0;D=_z(b,130832)|0;i=g;return}else if((x|0)==1){x=e;j=d[x+1|0]|0;o=d[x+2|0]|0;dA(b,131112,(k=i,i=i+24|0,c[k>>2]=d[e]|0,c[k+8>>2]=j,c[k+16>>2]=o,k)|0);i=k;y=_z(b,130984)|0;z=f|0;A=c[z>>2]|0;B=hk(A,1)|0;C=_z(b,B)|0;D=_z(b,130832)|0;i=g;return}else{cc(143376,143104,436,169944)}}function uD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0.0,g=0;d=i;if((c|0)==3){e=BD(a)|0}else if((c|0)==2){e=AD(a,b,2)|0}else{e=0}_z(a,137720)|0;zD(a,c,e);e=b|0;c=b+8|0;f=-0.0- +h[c>>3];dA(a,137472,(g=i,i=i+16|0,h[g>>3]=+h[e>>3],h[g+8>>3]=f,g)|0);i=g;f=+h[b+24>>3]- +h[c>>3];dA(a,137240,(g=i,i=i+16|0,h[g>>3]=+h[b+16>>3]- +h[e>>3],h[g+8>>3]=f,g)|0);i=g;_z(a,137008)|0;i=d;return}function vD(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0.0,j=0;e=i;if((d|0)==2){f=AD(a,b,c)|0}else if((d|0)==3){f=BD(a)|0}else{f=0}_z(a,138128)|0;zD(a,d,f);_z(a,148072)|0;if((c|0)>0){f=0;do{g=-0.0- +h[b+(f<<4)+8>>3];dA(a,147760,(j=i,i=i+16|0,h[j>>3]=+h[b+(f<<4)>>3],h[j+8>>3]=g,j)|0);i=j;f=f+1|0;}while((f|0)<(c|0))}g=-0.0- +h[b+8>>3];dA(a,137944,(j=i,i=i+16|0,h[j>>3]=+h[b>>3],h[j+8>>3]=g,j)|0);i=j;_z(a,147496)|0;i=e;return}function wD(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0.0,o=0.0;f=i;if((g|0)==2){j=AD(a,b,d)|0}else if((g|0)==3){j=BD(a)|0}else{j=0}_z(a,142760)|0;zD(a,g,j);_z(a,142424)|0;if((d|0)>0){k=0;l=77}else{m=_z(a,147496)|0;i=f;return}do{n=+h[b+(k<<4)>>3];o=-0.0- +h[b+(k<<4)+8>>3];dA(a,141960,(j=i,i=i+24|0,c[j>>2]=l&255,h[j+8>>3]=n,h[j+16>>3]=o,j)|0);i=j;l=(k|0)==0?67:32;k=k+1|0;}while((k|0)<(d|0));m=_z(a,147496)|0;i=f;return}function xD(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,g=0.0,j=0;d=i;_z(a,148624)|0;zD(a,0,0);_z(a,148072)|0;if((c|0)>0){e=0}else{f=_z(a,147496)|0;i=d;return}do{g=-0.0- +h[b+(e<<4)+8>>3];dA(a,147760,(j=i,i=i+16|0,h[j>>3]=+h[b+(e<<4)>>3],h[j+8>>3]=g,j)|0);i=j;e=e+1|0;}while((e|0)<(c|0));f=_z(a,147496)|0;i=d;return}function yD(a,b){a=a|0;b=b|0;_z(a,149224)|0;_z(a,gk(b)|0)|0;_z(a,148920)|0;return}function zD(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0;g=i;j=c[b+16>>2]|0;_z(b,147208)|0;do{if((e|0)==2){dA(b,146920,(k=i,i=i+8|0,c[k>>2]=f,k)|0);i=k}else if((e|0)==0){_z(b,146088)|0}else if((e|0)==3){dA(b,146680,(k=i,i=i+8|0,c[k>>2]=f,k)|0);i=k}else{l=j+56|0;m=l;n=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24|0;m=j+88|0;o=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24|0;do{if((o|0)==5){_z(b,n)|0}else if((o|0)==1){p=n;if(n>>>0<16777216>>>0){_z(b,146088)|0;break}else{dA(b,143600,(k=i,i=i+24|0,c[k>>2]=p&255,c[k+8>>2]=p>>>8&255,c[k+16>>2]=p>>>16&255,k)|0);i=k;break}}else{cc(143376,143104,83,169960)}}while(0);if((c[m>>2]|0)!=1){break}n=a[l+3|0]|0;if((n<<24>>24|0)==0|(n<<24>>24|0)==(-1|0)){break}dA(b,146408,(k=i,i=i+8|0,h[k>>3]=+((n&255)>>>0)/255.0,k)|0);i=k}}while(0);_z(b,145776)|0;f=j+16|0;e=f;n=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24|0;e=j+48|0;o=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24|0;do{if((o|0)==1){p=n;if(n>>>0<16777216>>>0){_z(b,146088)|0;break}else{dA(b,143600,(k=i,i=i+24|0,c[k>>2]=p&255,c[k+8>>2]=p>>>8&255,c[k+16>>2]=p>>>16&255,k)|0);i=k;break}}else if((o|0)==5){_z(b,n)|0}else{cc(143376,143104,83,169960)}}while(0);q=+h[j+152>>3];if(q!=1.0){dA(b,145368,(k=i,i=i+8|0,h[k>>3]=q,k)|0);i=k}n=c[j+144>>2]|0;if((n|0)==1){dA(b,144880,(k=i,i=i+8|0,c[k>>2]=143816,k)|0);i=k}else if((n|0)==2){dA(b,144880,(k=i,i=i+8|0,c[k>>2]=144088,k)|0);i=k}if((c[e>>2]|0)!=1){r=_z(b,144328)|0;i=g;return}e=a[f+3|0]|0;if((e<<24>>24|0)==0|(e<<24>>24|0)==(-1|0)){r=_z(b,144328)|0;i=g;return}dA(b,144616,(k=i,i=i+8|0,h[k>>3]=+((e&255)>>>0)/255.0,k)|0);i=k;r=_z(b,144328)|0;i=g;return}function AD(b,e,f){b=b|0;e=e|0;f=f|0;var j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0;j=i;i=i+32|0;k=j|0;l=c[43700]|0;c[43700]=l+1;m=c[b+16>>2]|0;n=+(c[m+136>>2]|0)*3.141592653589793/180.0;vF(k|0,0,32)|0;rn(e,k|0,f,n,0);dA(b,139320,(f=i,i=i+8|0,c[f>>2]=l,f)|0);i=f;n=+h[k+8>>3];o=+h[k+16>>3];p=+h[k+24>>3];dA(b,138784,(f=i,i=i+32|0,h[f>>3]=+h[k>>3],h[f+8>>3]=n,h[f+16>>3]=o,h[f+24>>3]=p,f)|0);i=f;k=m+140|0;p=+g[k>>2];if(p>0.0){dA(b,138496,(f=i,i=i+8|0,h[f>>3]=p+-.001,f)|0);i=f}else{_z(b,141248)|0}e=m+56|0;q=e;r=d[q]|d[q+1|0]<<8|d[q+2|0]<<16|d[q+3|0]<<24|0;q=m+88|0;s=d[q]|d[q+1|0]<<8|d[q+2|0]<<16|d[q+3|0]<<24|0;do{if((s|0)==1){t=r;if(r>>>0<16777216>>>0){_z(b,146088)|0;break}else{dA(b,143600,(f=i,i=i+24|0,c[f>>2]=t&255,c[f+8>>2]=t>>>8&255,c[f+16>>2]=t>>>16&255,f)|0);i=f;break}}else if((s|0)==5){_z(b,r)|0}else{cc(143376,143104,83,169960);return 0}}while(0);_z(b,141008)|0;do{if((c[q>>2]|0)==1){r=a[e+3|0]|0;if((r<<24>>24|0)==0|(r<<24>>24|0)==(-1|0)){u=13;break}dA(b,140760,(f=i,i=i+8|0,h[f>>3]=+((r&255)>>>0)/255.0,f)|0);i=f}else{u=13}}while(0);if((u|0)==13){_z(b,140536)|0}_z(b,140288)|0;p=+g[k>>2];if(p>0.0){dA(b,138496,(f=i,i=i+8|0,h[f>>3]=p,f)|0);i=f}else{_z(b,139976)|0}k=m+96|0;u=k;e=d[u]|d[u+1|0]<<8|d[u+2|0]<<16|d[u+3|0]<<24|0;u=m+128|0;m=d[u]|d[u+1|0]<<8|d[u+2|0]<<16|d[u+3|0]<<24|0;do{if((m|0)==1){q=e;if(e>>>0<16777216>>>0){_z(b,146088)|0;break}else{dA(b,143600,(f=i,i=i+24|0,c[f>>2]=q&255,c[f+8>>2]=q>>>8&255,c[f+16>>2]=q>>>16&255,f)|0);i=f;break}}else if((m|0)==5){_z(b,e)|0}else{cc(143376,143104,83,169960);return 0}}while(0);_z(b,141008)|0;do{if((c[u>>2]|0)==1){e=a[k+3|0]|0;if((e<<24>>24|0)==0|(e<<24>>24|0)==(-1|0)){break}dA(b,140760,(f=i,i=i+8|0,h[f>>3]=+((e&255)>>>0)/255.0,f)|0);i=f;v=_z(b,138280)|0;i=j;return l|0}}while(0);_z(b,140536)|0;v=_z(b,138280)|0;i=j;return l|0}function BD(b){b=b|0;var e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;f=c[43698]|0;c[43698]=f+1;g=c[b+16>>2]|0;j=+(c[g+136>>2]|0)*3.141592653589793/180.0;k=j;if(j==0.0){l=50;m=50}else{l=~~((+V(k)+1.0)*50.0);m=~~((1.0- +W(k))*50.0)}dA(b,141568,(n=i,i=i+24|0,c[n>>2]=f,c[n+8>>2]=l,c[n+16>>2]=m,n)|0);i=n;_z(b,141248)|0;m=g+56|0;l=m;o=d[l]|d[l+1|0]<<8|d[l+2|0]<<16|d[l+3|0]<<24|0;l=g+88|0;p=d[l]|d[l+1|0]<<8|d[l+2|0]<<16|d[l+3|0]<<24|0;do{if((p|0)==1){q=o;if(o>>>0<16777216>>>0){_z(b,146088)|0;break}else{dA(b,143600,(n=i,i=i+24|0,c[n>>2]=q&255,c[n+8>>2]=q>>>8&255,c[n+16>>2]=q>>>16&255,n)|0);i=n;break}}else if((p|0)==5){_z(b,o)|0}else{cc(143376,143104,83,169960);return 0}}while(0);_z(b,141008)|0;do{if((c[l>>2]|0)==1){o=a[m+3|0]|0;if((o<<24>>24|0)==0|(o<<24>>24|0)==(-1|0)){r=12;break}dA(b,140760,(n=i,i=i+8|0,h[n>>3]=+((o&255)>>>0)/255.0,n)|0);i=n}else{r=12}}while(0);if((r|0)==12){_z(b,140536)|0}_z(b,140288)|0;_z(b,139976)|0;r=g+96|0;m=r;l=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24|0;m=g+128|0;g=d[m]|d[m+1|0]<<8|d[m+2|0]<<16|d[m+3|0]<<24|0;do{if((g|0)==5){_z(b,l)|0}else if((g|0)==1){o=l;if(l>>>0<16777216>>>0){_z(b,146088)|0;break}else{dA(b,143600,(n=i,i=i+24|0,c[n>>2]=o&255,c[n+8>>2]=o>>>8&255,c[n+16>>2]=o>>>16&255,n)|0);i=n;break}}else{cc(143376,143104,83,169960);return 0}}while(0);_z(b,141008)|0;do{if((c[m>>2]|0)==1){l=a[r+3|0]|0;if((l<<24>>24|0)==0|(l<<24>>24|0)==(-1|0)){break}dA(b,140760,(n=i,i=i+8|0,h[n>>3]=+((l&255)>>>0)/255.0,n)|0);i=n;s=_z(b,139672)|0;i=e;return f|0}}while(0);_z(b,140536)|0;s=_z(b,139672)|0;i=e;return f|0}function CD(a){a=a|0;var b=0;_z(a,113040)|0;b=a+12|0;_z(a,c[c[c[b>>2]>>2]>>2]|0)|0;_z(a,112536)|0;_z(a,c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0;_z(a,111984)|0;_z(a,c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0;_z(a,111408)|0;return}function DD(b){b=b|0;var d=0,e=0,f=0;d=i;e=c[b+16>>2]|0;_z(b,115728)|0;f=e+8|0;if((a[$w(c[f>>2]|0)|0]|0)!=0){_z(b,114328)|0;_z(b,$w(c[f>>2]|0)|0)|0}f=da(c[b+168>>2]|0,c[b+164>>2]|0)|0;dA(b,113600,(b=i,i=i+8|0,c[b>>2]=f,b)|0);i=b;i=d;return}function ED(a){a=a|0;c[44760]=1;return}function FD(a){a=a|0;c[44760]=-1;return}function GD(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=i;j=e;e=i;i=i+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];j=b+16|0;k=c[j>>2]|0;if((c[k+144>>2]|0)==0){i=g;return}l=f+4|0;m=~~(+h[(c[l>>2]|0)+16>>3]*+h[b+352>>3]);if((m|0)==0){i=g;return}if((a[b+144|0]|0)==0){_z(b,141528)|0}else{_z(b,c[b+148>>2]|0)|0}_z(b,123160)|0;n=e+8|0;h[n>>3]=+h[n>>3]- +(m|0)*.55;fA(b,e);_z(b,121576)|0;_z(b,c[f>>2]|0)|0;_z(b,120744)|0;_z(b,101232)|0;e=k+16|0;n=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24|0;e=k+48|0;k=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24|0;do{if((k|0)==5){_z(b,n)|0}else if((k|0)==1){e=n;if(n>>>0<16777216>>>0){_z(b,147720)|0;break}else{dA(b,144560,(o=i,i=i+24|0,c[o>>2]=e&255,c[o+8>>2]=e>>>8&255,c[o+16>>2]=e>>>16&255,o)|0);i=o;break}}else{cc(158736,153704,51,169904)}}while(0);_z(b,119984)|0;n=c[l>>2]|0;l=c[n+8>>2]|0;k=c[((l|0)==0?n|0:l+4|0)>>2]|0;_z(b,119152)|0;_z(b,k)|0;_z(b,119152)|0;dA(b,118496,(o=i,i=i+8|0,c[o>>2]=m,o)|0);i=o;m=a[f+48|0]|0;if((m|0)==114){_z(b,116632)|0}else if((m|0)==108){_z(b,117568)|0}m=c[j>>2]|0;switch(c[m+12>>2]|0){case 1:{p=1;q=166792;r=(c[c[m+8>>2]>>2]|0)>>>4;break};case 11:case 6:case 7:{p=0;q=80504;r=(c[c[m+8>>2]>>2]|0)>>>4;break};case 8:{p=1;q=85248;r=(c[c[m+8>>2]>>2]|0)>>>4;break};case 0:{p=1;q=166792;r=-1;break};case 5:{p=0;q=166792;r=(c[c[m+8>>2]>>2]|0)>>>4;break};case 10:{p=0;q=85248;r=(c[c[m+8>>2]>>2]|0)>>>4;break};case 4:{p=0;q=162648;r=-1;break};case 9:case 2:case 3:{p=1;q=80504;r=(c[c[m+8>>2]>>2]|0)>>>4;break};default:{cc(158736,153704,108,169880)}}dA(b,150608,(o=i,i=i+24|0,c[o>>2]=p,c[o+8>>2]=q,c[o+16>>2]=r,o)|0);i=o;_z(b,113632)|0;i=g;return}function HD(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0;g=i;j=b+16|0;k=c[j>>2]|0;l=k+144|0;if((c[l>>2]|0)==0){i=g;return}m=e|0;n=+h[m>>3];o=e+8|0;p=+h[o>>3];q=+h[e+24>>3]-p;h[m>>3]=n-(+h[e+16>>3]-n);h[o>>3]=p-q;if((a[b+144|0]|0)==0){_z(b,141528)|0}else{_z(b,c[b+148>>2]|0)|0}_z(b,125560)|0;gA(b,e,2);_z(b,101232)|0;do{if((f|0)==0){if((c[44760]|0)==0){_z(b,147720)|0;break}else{_z(b,131088)|0;break}}else{e=k+56|0;o=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24|0;e=k+88|0;m=d[e]|d[e+1|0]<<8|d[e+2|0]<<16|d[e+3|0]<<24|0;if((m|0)==1){e=o;if(o>>>0<16777216>>>0){_z(b,147720)|0;break}else{dA(b,144560,(r=i,i=i+24|0,c[r>>2]=e&255,c[r+8>>2]=e>>>8&255,c[r+16>>2]=e>>>16&255,r)|0);i=r;break}}else if((m|0)==5){_z(b,o)|0;break}else{cc(158736,153704,51,169904)}}}while(0);if((c[44760]|0)==1){c[44760]=0}_z(b,138464)|0;eA(b,+h[k+152>>3]);_z(b,128648)|0;f=k+16|0;o=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;f=k+48|0;k=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;do{if((k|0)==1){f=o;if(o>>>0<16777216>>>0){_z(b,147720)|0;break}else{dA(b,144560,(r=i,i=i+24|0,c[r>>2]=f&255,c[r+8>>2]=f>>>8&255,c[r+16>>2]=f>>>16&255,r)|0);i=r;break}}else if((k|0)==5){_z(b,o)|0}else{cc(158736,153704,51,169904)}}while(0);o=c[l>>2]|0;if((o|0)==1){_z(b,95704)|0;s=c[l>>2]|0}else{s=o}if((s|0)==2){_z(b,90464)|0}s=c[j>>2]|0;switch(c[s+12>>2]|0){case 5:{t=0;u=166792;v=(c[c[s+8>>2]>>2]|0)>>>4;break};case 8:{t=1;u=85248;v=(c[c[s+8>>2]>>2]|0)>>>4;break};case 9:case 2:case 3:{t=1;u=80504;v=(c[c[s+8>>2]>>2]|0)>>>4;break};case 11:case 6:case 7:{t=0;u=80504;v=(c[c[s+8>>2]>>2]|0)>>>4;break};case 0:{t=1;u=166792;v=-1;break};case 4:{t=0;u=162648;v=-1;break};case 1:{t=1;u=166792;v=(c[c[s+8>>2]>>2]|0)>>>4;break};case 10:{t=0;u=85248;v=(c[c[s+8>>2]>>2]|0)>>>4;break};default:{cc(158736,153704,108,169880)}}dA(b,150608,(r=i,i=i+24|0,c[r>>2]=t,c[r+8>>2]=u,c[r+16>>2]=v,r)|0);i=r;_z(b,113632)|0;i=g;return}function ID(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;j=i;k=b+16|0;l=c[k>>2]|0;m=l+144|0;if((c[m>>2]|0)==0){i=j;return}if((a[b+144|0]|0)==0){_z(b,141528)|0}else{_z(b,c[b+148>>2]|0)|0}_z(b,133296)|0;gA(b,e,f);_z(b,101232)|0;do{if((g|0)==0){if((c[44760]|0)==0){_z(b,147720)|0;break}else{_z(b,131088)|0;break}}else{f=l+56|0;e=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;f=l+88|0;n=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;if((n|0)==1){f=e;if(e>>>0<16777216>>>0){_z(b,147720)|0;break}else{dA(b,144560,(o=i,i=i+24|0,c[o>>2]=f&255,c[o+8>>2]=f>>>8&255,c[o+16>>2]=f>>>16&255,o)|0);i=o;break}}else if((n|0)==5){_z(b,e)|0;break}else{cc(158736,153704,51,169904)}}}while(0);if((c[44760]|0)==1){c[44760]=0}_z(b,138464)|0;eA(b,+h[l+152>>3]);_z(b,128648)|0;g=l+16|0;e=d[g]|d[g+1|0]<<8|d[g+2|0]<<16|d[g+3|0]<<24|0;g=l+48|0;l=d[g]|d[g+1|0]<<8|d[g+2|0]<<16|d[g+3|0]<<24|0;do{if((l|0)==1){g=e;if(e>>>0<16777216>>>0){_z(b,147720)|0;break}else{dA(b,144560,(o=i,i=i+24|0,c[o>>2]=g&255,c[o+8>>2]=g>>>8&255,c[o+16>>2]=g>>>16&255,o)|0);i=o;break}}else if((l|0)==5){_z(b,e)|0}else{cc(158736,153704,51,169904)}}while(0);e=c[m>>2]|0;if((e|0)==1){_z(b,95704)|0;p=c[m>>2]|0}else{p=e}if((p|0)==2){_z(b,90464)|0}p=c[k>>2]|0;switch(c[p+12>>2]|0){case 4:{q=0;r=162648;s=-1;break};case 0:{q=1;r=166792;s=-1;break};case 10:{q=0;r=85248;s=(c[c[p+8>>2]>>2]|0)>>>4;break};case 9:case 2:case 3:{q=1;r=80504;s=(c[c[p+8>>2]>>2]|0)>>>4;break};case 5:{q=0;r=166792;s=(c[c[p+8>>2]>>2]|0)>>>4;break};case 1:{q=1;r=166792;s=(c[c[p+8>>2]>>2]|0)>>>4;break};case 11:case 6:case 7:{q=0;r=80504;s=(c[c[p+8>>2]>>2]|0)>>>4;break};case 8:{q=1;r=85248;s=(c[c[p+8>>2]>>2]|0)>>>4;break};default:{cc(158736,153704,108,169880)}}dA(b,150608,(o=i,i=i+24|0,c[o>>2]=q,c[o+8>>2]=r,c[o+16>>2]=s,o)|0);i=o;_z(b,113632)|0;i=j;return}function JD(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0;k=i;j=b+16|0;g=c[j>>2]|0;l=g+144|0;if((c[l>>2]|0)==0){i=k;return}if((a[b+144|0]|0)==0){_z(b,141528)|0}else{_z(b,c[b+148>>2]|0)|0}_z(b,106864)|0;gA(b,e,f);_z(b,101232)|0;f=g+16|0;e=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;f=g+48|0;m=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;do{if((m|0)==5){_z(b,e)|0}else if((m|0)==1){f=e;if(e>>>0<16777216>>>0){_z(b,147720)|0;break}else{dA(b,144560,(n=i,i=i+24|0,c[n>>2]=f&255,c[n+8>>2]=f>>>8&255,c[n+16>>2]=f>>>16&255,n)|0);i=n;break}}else{cc(158736,153704,51,169904)}}while(0);_z(b,138464)|0;eA(b,+h[g+152>>3]);g=c[l>>2]|0;if((g|0)==1){_z(b,95704)|0;o=c[l>>2]|0}else{o=g}if((o|0)==2){_z(b,90464)|0}_z(b,135904)|0;o=c[j>>2]|0;switch(c[o+12>>2]|0){case 10:{p=0;q=85248;r=(c[c[o+8>>2]>>2]|0)>>>4;break};case 9:case 2:case 3:{p=1;q=80504;r=(c[c[o+8>>2]>>2]|0)>>>4;break};case 5:{p=0;q=166792;r=(c[c[o+8>>2]>>2]|0)>>>4;break};case 1:{p=1;q=166792;r=(c[c[o+8>>2]>>2]|0)>>>4;break};case 0:{p=1;q=166792;r=-1;break};case 11:case 6:case 7:{p=0;q=80504;r=(c[c[o+8>>2]>>2]|0)>>>4;break};case 8:{p=1;q=85248;r=(c[c[o+8>>2]>>2]|0)>>>4;break};case 4:{p=0;q=162648;r=-1;break};default:{cc(158736,153704,108,169880)}}dA(b,150608,(n=i,i=i+24|0,c[n>>2]=p,c[n+8>>2]=q,c[n+16>>2]=r,n)|0);i=n;_z(b,113632)|0;i=k;return}function KD(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=i;h=b+16|0;j=c[h>>2]|0;k=j+144|0;if((c[k>>2]|0)==0){i=g;return}if((a[b+144|0]|0)==0){_z(b,141528)|0}else{_z(b,c[b+148>>2]|0)|0}_z(b,106864)|0;gA(b,e,f);_z(b,101232)|0;f=j+16|0;e=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;f=j+48|0;j=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;do{if((j|0)==5){_z(b,e)|0}else if((j|0)==1){f=e;if(e>>>0<16777216>>>0){_z(b,147720)|0;break}else{dA(b,144560,(l=i,i=i+24|0,c[l>>2]=f&255,c[l+8>>2]=f>>>8&255,c[l+16>>2]=f>>>16&255,l)|0);i=l;break}}else{cc(158736,153704,51,169904)}}while(0);e=c[k>>2]|0;if((e|0)==1){_z(b,95704)|0;m=c[k>>2]|0}else{m=e}if((m|0)==2){_z(b,90464)|0}m=c[h>>2]|0;switch(c[m+12>>2]|0){case 9:case 2:case 3:{n=1;o=80504;p=(c[c[m+8>>2]>>2]|0)>>>4;break};case 11:case 6:case 7:{n=0;o=80504;p=(c[c[m+8>>2]>>2]|0)>>>4;break};case 4:{n=0;o=162648;p=-1;break};case 8:{n=1;o=85248;p=(c[c[m+8>>2]>>2]|0)>>>4;break};case 0:{n=1;o=166792;p=-1;break};case 10:{n=0;o=85248;p=(c[c[m+8>>2]>>2]|0)>>>4;break};case 5:{n=0;o=166792;p=(c[c[m+8>>2]>>2]|0)>>>4;break};case 1:{n=1;o=166792;p=(c[c[m+8>>2]>>2]|0)>>>4;break};default:{cc(158736,153704,108,169880)}}dA(b,150608,(l=i,i=i+24|0,c[l>>2]=n,c[l+8>>2]=o,c[l+16>>2]=p,l)|0);i=l;_z(b,113632)|0;i=g;return}function LD(a,b){a=a|0;b=b|0;_z(a,123360)|0;_z(a,b)|0;_z(a,113632)|0;return}function MD(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0;d=i;i=i+16|0;e=d|0;f=c[44698]|0;if((f|0)==0){c[44696]=64;g=kk(64)|0;c[44698]=g;h=g}else{h=f}if((b|0)==0){j=h;a[j]=0;k=c[44698]|0;i=d;return k|0}f=e+15|0;g=e+14|0;e=h;h=0;l=0;m=b;b=0;n=0;a:while(1){b:do{if((h|0)==0){p=e;q=m;r=b;s=n;while(1){t=a[q]|0;if(t<<24>>24==0){j=p;u=67;break a}v=c[44696]|0;if((l|0)>(v-8|0)){w=v<<1;c[44696]=w;v=mk(c[44698]|0,w)|0;c[44698]=v;x=v+l|0;y=a[q]|0}else{x=p;y=t}if((y<<24>>24|0)==62){z=x;A=q;B=122560;C=4;D=r;E=s;u=62;break b}else if((y<<24>>24|0)==38){t=a[q+1|0]|0;c:do{if(t<<24>>24==35){v=a[q+2|0]|0;if((v<<24>>24|0)==120|(v<<24>>24|0)==88){w=q+3|0;while(1){F=a[w]|0;if((F-48&255)>>>0<10>>>0|(F-97&255)>>>0<6>>>0|(F-65&255)>>>0<6>>>0){w=w+1|0}else{G=F;break c}}}if((v-48&255)>>>0>=10>>>0){G=v;break}w=q+3|0;while(1){F=a[w]|0;if((F-48&255)>>>0<10>>>0){w=w+1|0}else{G=F;break}}}else{if(!((t-97&255)>>>0<26>>>0|(t-65&255)>>>0<26>>>0)){G=t;break}w=q+2|0;while(1){v=a[w]|0;if((v-97&255)>>>0<26>>>0|(v-65&255)>>>0<26>>>0){w=w+1|0}else{G=v;break}}}}while(0);if(G<<24>>24!=59){H=5;I=105552;J=q;K=r;L=s;M=x;u=60;break b}if((y<<24>>24|0)==62){z=x;A=q;B=122560;C=4;D=r;E=s;u=62;break b}else if((y<<24>>24|0)==45){N=q;O=r;P=s;Q=x;u=47;break b}else if((y<<24>>24|0)==60){H=4;I=149904;J=q;K=r;L=s;M=x;u=60;break b}}else if((y<<24>>24|0)==45){N=q;O=r;P=s;Q=x;u=47;break b}else if((y<<24>>24|0)==60){H=4;I=149904;J=q;K=r;L=s;M=x;u=60;break b}if((y<<24>>24|0)==39){z=x;A=q;B=95432;C=5;D=r;E=s;u=62;break b}else if((y<<24>>24|0)==34){H=6;I=101104;J=q;K=r;L=s;M=x;u=60;break b}if(y<<24>>24>=0){H=1;I=q;J=q;K=r;L=s;M=x;u=60;break b}t=0;w=127;v=y&255;while(1){R=t+1|0;S=v&w;F=w>>>1;if(F>>>0<S>>>0){t=R;w=F;v=S}else{break}}if((t|0)>0){T=S;U=R}else{T=S+(s<<6)|0;U=r}v=U-1|0;if((v|0)<=0){V=q;W=x;X=T;Y=v;u=56;break b}p=x;q=q+1|0;r=v;s=T}}else{s=e;r=m;q=b;p=n;d:while(1){v=a[r]|0;if(v<<24>>24==0){j=s;u=67;break a}w=c[44696]|0;if((l|0)>(w-8|0)){F=w<<1;c[44696]=F;w=mk(c[44698]|0,F)|0;c[44698]=w;Z=w+l|0;_=a[r]|0}else{Z=s;_=v}switch(_<<24>>24){case 62:{z=Z;A=r;B=122560;C=4;D=q;E=p;u=62;break b;break};case 45:{N=r;O=q;P=p;Q=Z;u=47;break b;break};case 38:{v=a[r+1|0]|0;e:do{if(v<<24>>24==35){w=a[r+2|0]|0;if((w<<24>>24|0)==120|(w<<24>>24|0)==88){F=r+3|0;while(1){$=a[F]|0;if(($-48&255)>>>0<10>>>0|($-97&255)>>>0<6>>>0|($-65&255)>>>0<6>>>0){F=F+1|0}else{aa=$;break e}}}if((w-48&255)>>>0>=10>>>0){aa=w;break}F=r+3|0;while(1){$=a[F]|0;if(($-48&255)>>>0<10>>>0){F=F+1|0}else{aa=$;break}}}else{if(!((v-97&255)>>>0<26>>>0|(v-65&255)>>>0<26>>>0)){aa=v;break}F=r+2|0;while(1){w=a[F]|0;if((w-97&255)>>>0<26>>>0|(w-65&255)>>>0<26>>>0){F=F+1|0}else{aa=w;break}}}}while(0);if(aa<<24>>24!=59){H=5;I=105552;J=r;K=q;L=p;M=Z;u=60;break b}if((_<<24>>24|0)==62){z=Z;A=r;B=122560;C=4;D=q;E=p;u=62;break b}else if((_<<24>>24|0)==45){N=r;O=q;P=p;Q=Z;u=47;break b}else if((_<<24>>24|0)==60){H=4;I=149904;J=r;K=q;L=p;M=Z;u=60;break b}else if((_<<24>>24|0)==32){break d}break};case 60:{H=4;I=149904;J=r;K=q;L=p;M=Z;u=60;break b;break};case 32:{break d;break};default:{}}if((_<<24>>24|0)==39){z=Z;A=r;B=95432;C=5;D=q;E=p;u=62;break b}else if((_<<24>>24|0)==34){H=6;I=101104;J=r;K=q;L=p;M=Z;u=60;break b}if(_<<24>>24>=0){H=1;I=r;J=r;K=q;L=p;M=Z;u=60;break b}v=0;t=127;F=_&255;while(1){ba=v+1|0;ca=F&t;w=t>>>1;if(w>>>0<ca>>>0){v=ba;t=w;F=ca}else{break}}if((v|0)>0){da=ca;ea=ba}else{da=ca+(p<<6)|0;ea=q}F=ea-1|0;if((F|0)<=0){V=r;W=Z;X=da;Y=F;u=56;break b}s=Z;r=r+1|0;q=F;p=da}s=(a[h]|0)==32;H=s?6:1;I=s?106736:r;J=r;K=q;L=p;M=Z;u=60}}while(0);if((u|0)==47){u=0;z=Q;A=N;B=113480;C=5;D=O;E=P;u=62}else if((u|0)==56){u=0;a[f]=59;s=X;F=3;t=g;while(1){fa=t-1|0;a[t]=(s>>>0)%10|0|48;ga=(s>>>0)/10|0;ha=F+1|0;if((F|0)>11){u=58;break a}if(s>>>0>9>>>0){s=ga;F=ha;t=fa}else{break}}F=t-2|0;a[fa]=35;a[F]=38;if((ha|0)==0){ia=W;ja=l;ka=V;la=Y;ma=ga}else{z=W;A=V;B=F;C=ha;D=Y;E=ga;u=62}}else if((u|0)==60){u=0;z=M;A=J;B=I;C=H;D=K;E=L;u=62}if((u|0)==62){u=0;F=C+l|0;s=z;w=B;$=C;while(1){na=$-1|0;a[s]=a[w]|0;if((na|0)==0){break}s=s+1|0;w=w+1|0;$=na}ia=z+C|0;ja=F;ka=A;la=D;ma=E}e=ia;h=ka;l=ja;m=ka+1|0;b=la;n=ma}if((u|0)==58){Ma(90208,46,1,c[o>>2]|0)|0;mb(1);return 0}else if((u|0)==67){a[j]=0;k=c[44698]|0;i=d;return k|0}return 0}function ND(a){a=a|0;var b=0;_z(a,152832)|0;_z(a,152536)|0;b=a+12|0;_z(a,MD(c[c[c[b>>2]>>2]>>2]|0)|0)|0;_z(a,152296)|0;_z(a,MD(c[(c[c[b>>2]>>2]|0)+4>>2]|0)|0)|0;_z(a,151992)|0;_z(a,MD(c[(c[c[b>>2]>>2]|0)+8>>2]|0)|0)|0;_z(a,151680)|0;return}function OD(b){b=b|0;var d=0,e=0,f=0;d=i;e=c[b+16>>2]|0;c[44746]=~~(+h[b+232>>3]- +h[b+216>>3]);c[44742]=~~(+h[b+224>>3]- +h[b+208>>3]);_z(b,80072)|0;_z(b,79648)|0;f=$w(c[e+8>>2]|0)|0;if((a[f]|0)!=0){_z(b,79296)|0;_z(b,MD(f)|0)|0;_z(b,79024)|0}f=da(c[b+168>>2]|0,c[b+164>>2]|0)|0;dA(b,78744,(e=i,i=i+8|0,c[e>>2]=f,e)|0);i=e;_z(b,168704)|0;_z(b,168328)|0;_z(b,167920)|0;_z(b,167168)|0;_z(b,166728)|0;_z(b,166328)|0;_z(b,165944)|0;_z(b,165624)|0;_z(b,165320)|0;_z(b,164952)|0;_z(b,164584)|0;_z(b,164200)|0;_z(b,163744)|0;_z(b,162960)|0;_z(b,162576)|0;_z(b,162264)|0;_z(b,161896)|0;_z(b,161592)|0;_z(b,161248)|0;_z(b,160920)|0;_z(b,160600)|0;_z(b,162264)|0;_z(b,160208)|0;_z(b,161592)|0;_z(b,161248)|0;_z(b,159720)|0;_z(b,162960)|0;_z(b,162576)|0;_z(b,162264)|0;_z(b,160208)|0;_z(b,161592)|0;_z(b,161248)|0;_z(b,160920)|0;_z(b,160600)|0;_z(b,162264)|0;_z(b,161896)|0;_z(b,161592)|0;_z(b,161248)|0;_z(b,158952)|0;_z(b,158696)|0;_z(b,158352)|0;_z(b,158064)|0;_z(b,157728)|0;_z(b,157128)|0;f=(c[44746]|0)+10|0;dA(b,156816,(e=i,i=i+16|0,c[e>>2]=c[44742],c[e+8>>2]=f,e)|0);i=e;_z(b,156496)|0;_z(b,155096)|0;_z(b,154704)|0;_z(b,153936)|0;_z(b,153632)|0;f=c[44746]|0;dA(b,153336,(e=i,i=i+16|0,c[e>>2]=c[44742],c[e+8>>2]=f,e)|0);i=e;f=c[44746]|0;dA(b,153048,(e=i,i=i+16|0,c[e>>2]=c[44742],c[e+8>>2]=f,e)|0);i=e;i=d;return}function PD(a){a=a|0;_z(a,84768)|0;_z(a,84376)|0;_z(a,83904)|0;_z(a,83544)|0;_z(a,84376)|0;_z(a,83120)|0;_z(a,82704)|0;_z(a,82200)|0;_z(a,84376)|0;_z(a,81632)|0;_z(a,80920)|0;_z(a,84376)|0;_z(a,80464)|0;return}function QD(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0;g=i;_z(b,87568)|0;do{if((d|0)!=0){if((a[d]|0)==0){break}h=MD(d)|0;dA(b,87040,(j=i,i=i+8|0,c[j>>2]=h,j)|0);i=j}}while(0);do{if((e|0)!=0){if((a[e]|0)==0){break}d=MD(e)|0;dA(b,86448,(j=i,i=i+8|0,c[j>>2]=d,j)|0);i=j}}while(0);if((f|0)==0){k=_z(b,85224)|0;i=g;return}if((a[f]|0)==0){k=_z(b,85224)|0;i=g;return}e=MD(f)|0;dA(b,85608,(j=i,i=i+8|0,c[j>>2]=e,j)|0);i=j;k=_z(b,85224)|0;i=g;return}function RD(a){a=a|0;_z(a,88048)|0;return}function SD(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;g=i;j=e;e=i;i=i+16|0;c[e>>2]=c[j>>2];c[e+4>>2]=c[j+4>>2];c[e+8>>2]=c[j+8>>2];c[e+12>>2]=c[j+12>>2];j=c[b+16>>2]|0;k=a[f+48|0]|0;if((k|0)==108){l=+h[e>>3];m=+h[f+32>>3]}else if((k|0)==114){n=+h[f+32>>3];l=+h[e>>3]-n;m=n}else{n=+h[f+32>>3];l=+h[e>>3]-n*.5;m=n}k=f+40|0;n=+h[k>>3];o=f+4|0;p=(c[o>>2]|0)+16|0;q=+h[p>>3];if(n<q){r=q*1.1+1.0;h[k>>3]=r;s=r;t=+h[p>>3]}else{s=n;t=q}q=l+-8.0;n=+((c[44746]|0)>>>0>>>0)- +h[e+8>>3];r=t/5.0;if(t<12.0){u=r+1.4}else{u=r+2.0}r=n-s+u;dA(b,94736,(e=i,i=i+1|0,i=i+7&-8,c[e>>2]=0,e)|0);i=e;dA(b,96112,(e=i,i=i+16|0,h[e>>3]=q,h[e+8>>3]=r,e)|0);i=e;dA(b,95648,(e=i,i=i+16|0,h[e>>3]=l+m+8.0-q,h[e+8>>3]=n+u-r,e)|0);i=e;_z(b,94264)|0;_z(b,93808)|0;p=c[o>>2]|0;k=c[p+8>>2]|0;do{if((k|0)==0){dA(b,93384,(e=i,i=i+8|0,c[e>>2]=c[p>>2],e)|0);i=e}else{dA(b,93384,(e=i,i=i+8|0,c[e>>2]=c[k+4>>2],e)|0);i=e;v=c[k+8>>2]|0;if((v|0)!=0){dA(b,92904,(e=i,i=i+8|0,c[e>>2]=v,e)|0);i=e}v=c[k+12>>2]|0;if((v|0)!=0){dA(b,92288,(e=i,i=i+8|0,c[e>>2]=v,e)|0);i=e}v=c[k+16>>2]|0;if((v|0)==0){break}dA(b,91720,(e=i,i=i+8|0,c[e>>2]=v,e)|0);i=e}}while(0);dA(b,90888,(e=i,i=i+8|0,h[e>>3]=+h[(c[o>>2]|0)+16>>3],e)|0);i=e;o=j+16|0;k=c[j+48>>2]|0;if((k|0)==5){j=c[o>>2]|0;if((pm(j,158656)|0)==0){w=_z(b,89320)|0;x=f|0;y=c[x>>2]|0;z=MD(y)|0;A=_z(b,z)|0;B=_z(b,88912)|0;C=_z(b,88456)|0;i=g;return}dA(b,90432,(e=i,i=i+8|0,c[e>>2]=j,e)|0);i=e;w=_z(b,89320)|0;x=f|0;y=c[x>>2]|0;z=MD(y)|0;A=_z(b,z)|0;B=_z(b,88912)|0;C=_z(b,88456)|0;i=g;return}else if((k|0)==1){k=o;j=d[k+1|0]|0;p=d[k+2|0]|0;dA(b,89832,(e=i,i=i+24|0,c[e>>2]=d[o]|0,c[e+8>>2]=j,c[e+16>>2]=p,e)|0);i=e;w=_z(b,89320)|0;x=f|0;y=c[x>>2]|0;z=MD(y)|0;A=_z(b,z)|0;B=_z(b,88912)|0;C=_z(b,88456)|0;i=g;return}else{cc(106400,105968,439,169832)}}function TD(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0;f=i;_z(a,97208)|0;g=+h[b>>3];j=+h[b+16>>3]-g;k=+h[b+8>>3];l=+h[b+24>>3]-k;m=+((c[44746]|0)>>>0>>>0)-(k+l);dA(a,96112,(b=i,i=i+16|0,h[b>>3]=g-j,h[b+8>>3]=m,b)|0);i=b;dA(a,95648,(b=i,i=i+16|0,h[b>>3]=j*2.0,h[b+8>>3]=l*2.0,b)|0);i=b;if((e|0)==0){_z(a,99360)|0;n=_z(a,105056)|0;YD(a);o=_z(a,95136)|0;i=f;return}e=c[a+16>>2]|0;_z(a,100312)|0;p=e+56|0;q=d[p]|d[p+1|0]<<8|d[p+2|0]<<16|d[p+3|0]<<24|0;p=e+88|0;e=d[p]|d[p+1|0]<<8|d[p+2|0]<<16|d[p+3|0]<<24|0;do{if((e|0)==5){_z(a,q)|0}else if((e|0)==1){p=q;if(q>>>0<16777216>>>0){_z(a,107320)|0;break}else{dA(a,106800,(b=i,i=i+24|0,c[b>>2]=p&255,c[b+8>>2]=p>>>8&255,c[b+16>>2]=p>>>16&255,b)|0);i=b;break}}else{cc(106400,105968,95,169848)}}while(0);_z(a,99776)|0;n=_z(a,105056)|0;YD(a);o=_z(a,95136)|0;i=f;return}function UD(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0;g=i;_z(a,118440)|0;j=c[44746]|0;dA(a,105448,(k=i,i=i+16|0,c[k>>2]=c[44742],c[k+8>>2]=j,k)|0);i=k;if((f|0)==0){_z(a,99360)|0}else{f=c[a+16>>2]|0;_z(a,100312)|0;j=f+56|0;l=d[j]|d[j+1|0]<<8|d[j+2|0]<<16|d[j+3|0]<<24|0;j=f+88|0;f=d[j]|d[j+1|0]<<8|d[j+2|0]<<16|d[j+3|0]<<24|0;do{if((f|0)==1){j=l;if(l>>>0<16777216>>>0){_z(a,107320)|0;break}else{dA(a,106800,(k=i,i=i+24|0,c[k>>2]=j&255,c[k+8>>2]=j>>>8&255,c[k+16>>2]=j>>>16&255,k)|0);i=k;break}}else if((f|0)==5){_z(a,l)|0}else{cc(106400,105968,95,169848)}}while(0);_z(a,99776)|0}_z(a,105056)|0;YD(a);_z(a,104616)|0;if((e|0)<=0){m=_z(a,111952)|0;i=g;return}l=e-1|0;f=0;do{n=+h[b+(f<<4)>>3];o=+((c[44746]|0)>>>0>>>0)- +h[b+(f<<4)+8>>3];if((f|0)==0){_z(a,103368)|0;dA(a,98960,(k=i,i=i+16|0,h[k>>3]=n,h[k+8>>3]=o,k)|0);i=k;_z(a,98544)|0}else{dA(a,98960,(k=i,i=i+16|0,h[k>>3]=n,h[k+8>>3]=o,k)|0);i=k}if((f|0)==(l|0)){_z(a,97832)|0}f=f+1|0;}while((f|0)<(e|0));m=_z(a,111952)|0;i=g;return}function VD(a,b,e,f,g,j){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;g=i;_z(a,118440)|0;f=c[44746]|0;dA(a,105448,(k=i,i=i+16|0,c[k>>2]=c[44742],c[k+8>>2]=f,k)|0);i=k;if((j|0)==0){_z(a,99360)|0}else{j=c[a+16>>2]|0;_z(a,100312)|0;f=j+56|0;l=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;f=j+88|0;j=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;do{if((j|0)==1){f=l;if(l>>>0<16777216>>>0){_z(a,107320)|0;break}else{dA(a,106800,(k=i,i=i+24|0,c[k>>2]=f&255,c[k+8>>2]=f>>>8&255,c[k+16>>2]=f>>>16&255,k)|0);i=k;break}}else if((j|0)==5){_z(a,l)|0}else{cc(106400,105968,95,169848)}}while(0);_z(a,99776)|0}_z(a,105056)|0;YD(a);_z(a,104616)|0;if((e|0)>0){m=0;n=103368}else{o=_z(a,100744)|0;p=_z(a,104128)|0;i=g;return}do{q=+h[b+(m<<4)>>3];r=+((c[44746]|0)>>>0>>>0)- +h[b+(m<<4)+8>>3];dA(a,102816,(k=i,i=i+24|0,c[k>>2]=n,h[k+8>>3]=q,h[k+16>>3]=r,k)|0);i=k;n=(m|0)==0?101736:213360;m=m+1|0;}while((m|0)<(e|0));o=_z(a,100744)|0;p=_z(a,104128)|0;i=g;return}function WD(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0.0;e=i;_z(a,118440)|0;f=c[44746]|0;dA(a,117512,(g=i,i=i+16|0,c[g>>2]=c[44742],c[g+8>>2]=f,g)|0);i=g;_z(a,116472)|0;if((d|0)<=0){j=_z(a,112512)|0;YD(a);k=_z(a,111952)|0;i=e;return}f=d-1|0;l=0;do{if((l|0)==0){_z(a,115672)|0;m=+((c[44746]|0)>>>0>>>0)- +h[b+8>>3];dA(a,114272,(g=i,i=i+16|0,h[g>>3]=+h[b>>3],h[g+8>>3]=m,g)|0);i=g;_z(a,113576)|0}else{m=+((c[44746]|0)>>>0>>>0)- +h[b+(l<<4)+8>>3];dA(a,114272,(g=i,i=i+16|0,h[g>>3]=+h[b+(l<<4)>>3],h[g+8>>3]=m,g)|0);i=g}if((l|0)==(f|0)){_z(a,113016)|0}l=l+1|0;}while((l|0)<(d|0));j=_z(a,112512)|0;YD(a);k=_z(a,111952)|0;i=e;return}function XD(a,b){a=a|0;b=b|0;_z(a,119952)|0;_z(a,MD(b)|0)|0;_z(a,119128)|0;return}function YD(a){a=a|0;var b=0,e=0,f=0,g=0,j=0,k=0,l=0.0,m=0;b=i;e=c[a+16>>2]|0;_z(a,111360)|0;f=e+16|0;g=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;f=e+48|0;j=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24|0;do{if((j|0)==5){_z(a,g)|0}else if((j|0)==1){f=g;if(g>>>0<16777216>>>0){_z(a,107320)|0;break}else{dA(a,106800,(k=i,i=i+24|0,c[k>>2]=f&255,c[k+8>>2]=f>>>8&255,c[k+16>>2]=f>>>16&255,k)|0);i=k;break}}else{cc(106400,105968,95,169848)}}while(0);l=+h[e+152>>3];if(l!=1.0){dA(a,110648,(k=i,i=i+8|0,h[k>>3]=l,k)|0);i=k}k=c[e+144>>2]|0;if((k|0)==1){_z(a,11e4)|0;m=_z(a,108488)|0;i=b;return}else if((k|0)==2){_z(a,109232)|0;m=_z(a,108488)|0;i=b;return}else{m=_z(a,108488)|0;i=b;return}}function ZD(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=c[a+16>>2]|0;e=c[c[a+12>>2]>>2]|0;f=c[e>>2]|0;g=c[e+4>>2]|0;h=c[e+8>>2]|0;dA(a,83056,(e=i,i=i+32|0,c[e>>2]=112680,c[e+8>>2]=f,c[e+16>>2]=g,c[e+24>>2]=h,e)|0);i=e;h=$w(c[d+8>>2]|0)|0;dA(a,82656,(e=i,i=i+16|0,c[e>>2]=112680,c[e+8>>2]=h,e)|0);i=e;dA(a,82104,(e=i,i=i+8|0,c[e>>2]=112680,e)|0);i=e;i=b;return}function _D(a){a=a|0;var b=0;b=i;dA(a,83456,(a=i,i=i+8|0,c[a>>2]=112680,a)|0);i=a;i=b;return}function $D(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;d=i;e=c[b+456>>2]|0;f=c[b+460>>2]|0;g=c[b+464>>2]|0;j=c[b+468>>2]|0;k=b+360|0;do{if(!(a[17808]|0)){l=c[k>>2]|0;if((l|0)==0|(l|0)==90){break}Fv(0,83856,(m=i,i=i+16|0,c[m>>2]=14536,c[m+8>>2]=103320,m)|0)|0;i=m;a[17808]=1}}while(0);n=(+(j|0)- +(f|0))/72.0;o=(+(g|0)- +(e|0))/72.0;e=(c[k>>2]|0)==90;p=e?n:o;q=e?o:n;dA(b,102752,(m=i,i=i+16|0,h[m>>3]=p,h[m+8>>3]=q,m)|0);i=m;dA(b,101536,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;if(p>0.0){n=+Mb(+p);r=n+(3.0- +(~~n|0))}else{r=3.0}h[21655]=r;n=+U(+10.0,+r);h[21655]=n;dA(b,101128,(m=i,i=i+16|0,h[m>>3]=n,h[m+8>>3]=n,m)|0);i=m;dA(b,100648,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,100232,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,99704,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,99304,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,98888,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,98464,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,97688,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,97056,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,96024,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,95552,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,95080,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,94592,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;dA(b,94216,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,93752,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,93272,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;dA(b,92824,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,92128,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,91584,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,90776,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;dA(b,90296,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,89736,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,89264,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,88768,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,88376,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,87920,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,87488,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;dA(b,86912,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,86304,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,85512,(m=i,i=i+8|0,c[m>>2]=112680,m)|0);i=m;dA(b,85160,(m=i,i=i+16|0,h[m>>3]=q,h[m+8>>3]=p,m)|0);i=m;dA(b,84720,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;dA(b,84248,(m=i,i=i+1|0,i=i+7&-8,c[m>>2]=0,m)|0);i=m;i=d;return}function aE(a){a=a|0;var b=0;b=i;dA(a,104104,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0);i=a;i=b;return}function bE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;f=i;g=d;d=i;i=i+16|0;c[d>>2]=c[g>>2];c[d+4>>2]=c[g+4>>2];c[d+8>>2]=c[g+8>>2];c[d+12>>2]=c[g+12>>2];g=a[e+48|0]|0;if((g|0)==108){j=+h[e+32>>3];k=+h[d>>3]}else if((g|0)==114){l=+h[e+32>>3];g=d|0;m=+h[g>>3]-l;h[g>>3]=m;j=l;k=m}else{m=+h[e+32>>3];g=d|0;l=+h[g>>3]-m*.5;h[g>>3]=l;j=m;k=l}g=e+4|0;n=c[g>>2]|0;o=d+8|0;h[o>>3]=+h[n+16>>3]/216.0+ +h[o>>3];p=d|0;h[p>>3]=j/144.0+k;d=c[n>>2]|0;do{if((d|0)!=0){n=c[44108]|0;if((n|0)==0){q=25648}else{if((Ya(n|0,d|0)|0)==0){break}else{q=25648}}while(1){n=c[q+4>>2]|0;if((n|0)==0){Fv(1,147152,(r=i,i=i+16|0,c[r>>2]=14536,c[r+8>>2]=d,r)|0)|0;i=r;s=ob(d|0,45)|0;if((s|0)==0){t=144080;break}a[s]=0;q=25648;continue}else{if((Ya(n|0,d|0)|0)==0){u=11;break}q=q+8|0;continue}}if((u|0)==11){t=q|0}dA(b,162024,(r=i,i=i+8|0,c[r>>2]=t,r)|0);i=r;c[44108]=c[c[g>>2]>>2]}}while(0);if(!(a[14560]|0)){k=+h[21655];dA(b,158160,(r=i,i=i+16|0,c[r>>2]=1,h[r+8>>3]=k,r)|0);i=r;a[14560]=1}g=c[e>>2]|0;e=c[44112]|0;if((e|0)==0){c[44110]=64;t=dF(64)|0;c[44112]=t;v=t}else{v=e}e=a[g]|0;if(e<<24>>24==0){w=v;a[w]=0;x=c[44112]|0;y=+h[p>>3];z=+h[o>>3];dA(b,153160,(r=i,i=i+24|0,c[r>>2]=x,h[r+8>>3]=y,h[r+16>>3]=z,r)|0);i=r;i=f;return}else{A=0;B=v;C=g;D=e}while(1){e=C+1|0;g=c[44110]|0;if((A|0)>(g-8|0)){v=g<<1;c[44110]=v;g=gF(c[44112]|0,v)|0;c[44112]=g;E=g+A|0}else{E=B}if(D<<24>>24>-1){if(D<<24>>24==92){a[E]=92;F=E+1|0;G=A+1|0}else{F=E;G=A}a[F]=D;H=F+1|0;I=G+1|0}else{a[E]=92;nb(E+1|0,150176,(r=i,i=i+8|0,c[r>>2]=D&255,r)|0)|0;i=r;H=E+4|0;I=A+4|0}g=a[e]|0;if(g<<24>>24==0){w=H;break}else{A=I;B=H;C=e;D=g}}a[w]=0;x=c[44112]|0;y=+h[p>>3];z=+h[o>>3];dA(b,153160,(r=i,i=i+24|0,c[r>>2]=x,h[r+8>>3]=y,h[r+16>>3]=z,r)|0);i=r;i=f;return}function cE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0.0,j=0.0,k=0.0;e=i;f=+h[b>>3];g=(+h[b+16>>3]-f)*2.0/72.0;j=+h[b+8>>3];k=(+h[b+24>>3]-j)*2.0/72.0;dA(a,84448,(a=i,i=i+48|0,c[a>>2]=1,c[a+8>>2]=(d|0)!=0?79808:213480,h[a+16>>3]=g,h[a+24>>3]=k,h[a+32>>3]=f/72.0,h[a+40>>3]=j/72.0,a)|0);i=a;i=e;return}function dE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;hE(a,b,c,1);return}function eE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0.0,D=0,E=0,F=0;g=i;i=i+80|0;f=g|0;e=g+64|0;j=dF((d*140|0)+140|0)|0;k=+h[b>>3];l=f+48|0;h[l>>3]=k;m=+h[b+8>>3];n=f+56|0;h[n>>3]=m;if(k<0.0){o=k+-.5}else{o=k+.5}if(m<0.0){p=m+-.5}else{p=m+.5}q=nb(j|0,106168,(r=i,i=i+16|0,c[r>>2]=~~o,c[r+8>>2]=~~p,r)|0)|0;i=r;if((d|0)>3){s=f|0;t=f;u=l;l=e|0;v=e+8|0;w=0;x=1;y=j+q|0;q=3;while(1){c[t>>2]=c[u>>2];c[t+4>>2]=c[u+4>>2];c[t+8>>2]=c[u+8>>2];c[t+12>>2]=c[u+12>>2];z=w+1|0;h[f+16>>3]=+h[b+(z<<4)>>3];h[f+24>>3]=+h[b+(z<<4)+8>>3];z=w+2|0;h[f+32>>3]=+h[b+(z<<4)>>3];h[f+40>>3]=+h[b+(z<<4)+8>>3];z=w+3|0;h[f+48>>3]=+h[b+(z<<4)>>3];h[n>>3]=+h[b+(z<<4)+8>>3];z=1;A=y;do{Qm(e,s,3,+(z|0)/6.0,0,0);p=+h[l>>3];o=+h[v>>3];if(p<0.0){B=p+-.5}else{B=p+.5}if(o<0.0){C=o+-.5}else{C=o+.5}D=nb(A|0,106168,(r=i,i=i+16|0,c[r>>2]=~~B,c[r+8>>2]=~~C,r)|0)|0;i=r;A=A+D|0;z=z+1|0;}while((z|0)<7);z=x+6|0;D=q+3|0;if((D|0)<(d|0)){w=q;x=z;y=A;q=D}else{E=z;break}}}else{E=1}dA(a,94872,(r=i,i=i+8|0,c[r>>2]=j,r)|0);i=r;eF(j);if((E|0)<=0){F=_z(a,100464)|0;i=g;return}j=E-1|0;q=0;do{dA(a,89408,(r=i,i=i+8|0,c[r>>2]=((q|0)%(j|0)|0|0)!=0,r)|0);i=r;q=q+1|0;}while((q|0)<(E|0));F=_z(a,100464)|0;i=g;return}function fE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0.0,k=0.0,l=0.0,m=0;e=i;if((d|0)>0){f=0}else{g=_z(a,100464)|0;i=e;return}do{j=+h[b+(f<<4)>>3];if(j<0.0){k=j+-.5}else{k=j+.5}j=+h[b+(f<<4)+8>>3];if(j<0.0){l=j+-.5}else{l=j+.5}dA(a,106168,(m=i,i=i+16|0,c[m>>2]=~~k,c[m+8>>2]=~~l,m)|0);i=m;f=f+1|0;}while((f|0)<(d|0));g=_z(a,100464)|0;i=e;return}function gE(a,b){a=a|0;b=b|0;var d=0;d=i;dA(a,121064,(a=i,i=i+16|0,c[a>>2]=112680,c[a+8>>2]=b,a)|0);i=a;i=d;return}function hE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0.0,k=0.0,l=0.0,m=0,n=0,o=0.0,p=0.0;f=i;if((d|0)>0){g=0;do{j=+h[b+(g<<4)>>3];if(j<0.0){k=j+-.5}else{k=j+.5}j=+h[b+(g<<4)+8>>3];if(j<0.0){l=j+-.5}else{l=j+.5}dA(a,106168,(m=i,i=i+16|0,c[m>>2]=~~k,c[m+8>>2]=~~l,m)|0);i=m;g=g+1|0;}while((g|0)<(d|0))}if((e|0)==0){n=_z(a,100464)|0;i=f;return}l=+h[b>>3];if(l<0.0){o=l+-.5}else{o=l+.5}l=+h[b+8>>3];if(l<0.0){p=l+-.5}else{p=l+.5}dA(a,106168,(m=i,i=i+16|0,c[m>>2]=~~o,c[m+8>>2]=~~p,m)|0);i=m;n=_z(a,100464)|0;i=f;return}function iE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=i;b=c;c=i;i=i+32|0;tF(c,b,32)|0;i=d;return}function jE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0.0,k=0.0;e=i;f=d;d=i;i=i+32|0;tF(d,f,32)|0;f=b+8|0;b=c[f>>2]|0;dA(a,104488,(g=i,i=i+16|0,c[g>>2]=b,c[g+8>>2]=b,g)|0);i=g;j=(+h[d+16>>3]+ +h[d>>3])*.5;k=(+h[d+24>>3]+ +h[d+8>>3])*.5;dA(a,104008,(g=i,i=i+24|0,c[g>>2]=c[f>>2],h[g+8>>3]=j,h[g+16>>3]=k,g)|0);i=g;i=e;return}function kE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0;e=i;f=d;d=i;i=i+32|0;tF(d,f,32)|0;g=+h[d>>3];j=+h[d+16>>3]-g;k=+h[d+24>>3];l=k- +h[d+8>>3];m=+(~~(+h[a+232>>3]- +h[a+216>>3])>>>0>>>0)-k;dA(a,103144,(d=i,i=i+40|0,c[d>>2]=c[b+8>>2],h[d+8>>3]=j,h[d+16>>3]=l,h[d+24>>3]=g,h[d+32>>3]=m,d)|0);i=d;_z(a,102528)|0;i=e;return}function lE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0.0;f=i;i=i+64|0;g=d;d=i;i=i+32|0;tF(d,g,32)|0;g=f|0;if((a|0)==0){cc(101464,101048,216,170880)}if((b|0)==0){cc(100576,101048,217,170880)}j=b+8|0;if((c[j>>2]|0)==0){cc(100144,101048,218,170880)}if((c[b+52>>2]|0)==0){i=f;return}b=g;k=d;c[b>>2]=c[k>>2];c[b+4>>2]=c[k+4>>2];c[b+8>>2]=c[k+8>>2];c[b+12>>2]=c[k+12>>2];k=g+32|0;b=k;l=d+16|0;c[b>>2]=c[l>>2];c[b+4>>2]=c[l+4>>2];c[b+8>>2]=c[l+8>>2];c[b+12>>2]=c[l+12>>2];l=g|0;m=+h[l>>3];b=g+16|0;h[b>>3]=m;n=+h[g+40>>3];d=g+24|0;h[d>>3]=n;o=+h[k>>3];h[g+48>>3]=o;k=g+8|0;p=+h[k>>3];h[g+56>>3]=p;if(e<<24>>24==0){q=g+32|0}else{dA(a,99632,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r;dA(a,99240,(r=i,i=i+16|0,h[r>>3]=m,h[r+8>>3]=p,r)|0);i=r;dA(a,99240,(r=i,i=i+16|0,h[r>>3]=m,h[r+8>>3]=n,r)|0);i=r;dA(a,99240,(r=i,i=i+16|0,h[r>>3]=o,h[r+8>>3]=n,r)|0);i=r;dA(a,99240,(r=i,i=i+16|0,h[r>>3]=o,h[r+8>>3]=p,r)|0);i=r;dA(a,99240,(r=i,i=i+16|0,h[r>>3]=m,h[r+8>>3]=p,r)|0);i=r;e=c[j>>2]|0;dA(a,98824,(r=i,i=i+16|0,c[r>>2]=4,c[r+8>>2]=e,r)|0);i=r;q=g+32|0}dA(a,99632,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0);i=r;m=+h[l>>3];s=+h[k>>3];dA(a,99240,(r=i,i=i+16|0,h[r>>3]=m,h[r+8>>3]=s,r)|0);i=r;t=+h[d>>3];dA(a,99240,(r=i,i=i+16|0,h[r>>3]=+h[b>>3],h[r+8>>3]=t,r)|0);i=r;dA(a,99240,(r=i,i=i+16|0,h[r>>3]=+h[q>>3],h[r+8>>3]=n,r)|0);i=r;dA(a,99240,(r=i,i=i+16|0,h[r>>3]=o,h[r+8>>3]=p,r)|0);i=r;dA(a,99240,(r=i,i=i+16|0,h[r>>3]=m,h[r+8>>3]=s,r)|0);i=r;q=c[j>>2]|0;dA(a,98400,(r=i,i=i+16|0,c[r>>2]=4,c[r+8>>2]=q,r)|0);i=r;i=f;return}function mE(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0.0;f=i;i=i+80|0;g=e;e=i;i=i+32|0;tF(e,g,32)|0;g=f|0;if((b|0)==0){cc(101464,101048,157,170904)}if((d|0)==0){cc(100576,101048,158,170904)}if((c[d+8>>2]|0)==0){cc(100144,101048,159,170904)}j=d+52|0;do{if((c[j>>2]|0)==0){k=10}else{l=d+60|0;m=c[l>>2]|0;if((m|0)==156){break}Cc[m&255](d);c[j>>2]=0;c[l>>2]=0;c[d+56>>2]=0;k=10}}while(0);do{if((k|0)==10){if((CB(d)|0)<<24>>24==0){i=f;return}l=Ta(c[d+20>>2]|0)|0;if(((c[d+24>>2]|0)-6|0)>>>0<2>>>0){Xb(l|0,g|0)|0;m=c[g+36>>2]|0;c[d+56>>2]=m;n=dF(m)|0;c[j>>2]=n;Ra(l|0,n|0,m|0)|0;a[d+16|0]=1}if((c[j>>2]|0)!=0){c[d+60>>2]=156}DB(d);if((c[j>>2]|0)!=0){break}i=f;return}}while(0);o=+h[e+8>>3]- +(c[d+36>>2]|0);dA(b,97560,(j=i,i=i+16|0,h[j>>3]=+h[e>>3]- +(c[d+32>>2]|0),h[j+8>>3]=o,j)|0);i=j;if((a[d+16|0]|0)==0){dA(b,96824,(j=i,i=i+8|0,c[j>>2]=c[d+12>>2],j)|0);i=j}else{bl(b,d)}dA(b,95920,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0);i=j;i=f;return}function nE(a){a=a|0;eF(c[a+52>>2]|0);return}function oE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=i;f=d;d=i;i=i+32|0;tF(d,f,32)|0;if((a|0)==0){cc(101464,101048,125,170832)}f=c[a+16>>2]|0;if((f|0)==0){cc(95392,101048,127,170832)}if((b|0)==0){cc(100576,101048,128,170832)}d=b+8|0;if((c[d>>2]|0)==0){cc(100144,101048,129,170832)}if((c[f+8>>2]|0)==0){cc(95008,101048,132,170832)}else{dA(a,94528,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;dA(a,94136,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;dA(a,93664,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;dA(a,93192,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;dA(a,92744,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;dA(a,92048,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;dA(a,91416,(f=i,i=i+8|0,c[f>>2]=c[d>>2],f)|0);i=f;dA(a,90696,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;dA(a,90096,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0);i=f;i=e;return}}function pE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,j=0.0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0;e=i;f=d;d=i;i=i+32|0;tF(d,f,32)|0;if((a|0)==0){cc(101464,101048,101,170928)}if((b|0)==0){cc(100576,101048,102,170928)}f=c[b+8>>2]|0;if((f|0)==0){cc(100144,101048,103,170928)}g=+h[d>>3];if(g<0.0){j=g+-.5}else{j=g+.5}b=~~j;j=+h[d+8>>3];if(j<0.0){k=j+-.5}else{k=j+.5}l=~~k;k=+h[d+16>>3];if(k<0.0){m=k+-.5}else{m=k+.5}n=~~m;m=+h[d+24>>3];if(m<0.0){o=m+-.5}else{o=m+.5}d=~~o;dA(a,89608,(p=i,i=i+144|0,c[p>>2]=2,c[p+8>>2]=5,c[p+16>>2]=0,c[p+24>>2]=0,c[p+32>>2]=0,c[p+40>>2]=-1,c[p+48>>2]=1,c[p+56>>2]=-1,c[p+64>>2]=0,h[p+72>>3]=0.0,c[p+80>>2]=0,c[p+88>>2]=0,c[p+96>>2]=0,c[p+104>>2]=0,c[p+112>>2]=0,c[p+120>>2]=5,c[p+128>>2]=0,c[p+136>>2]=f,p)|0);i=p;dA(a,89184,(p=i,i=i+80|0,c[p>>2]=b,c[p+8>>2]=l,c[p+16>>2]=b,c[p+24>>2]=d,c[p+32>>2]=n,c[p+40>>2]=d,c[p+48>>2]=n,c[p+56>>2]=l,c[p+64>>2]=b,c[p+72>>2]=l,p)|0);i=p;i=e;return}function qE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0;e=i;f=d;d=i;i=i+32|0;tF(d,f,32)|0;g=+h[d+16>>3];j=+h[d>>3];k=(g-j)*72.0/96.0;l=+h[d+24>>3];m=+h[d+8>>3];n=(l-m)*72.0/96.0;o=(g+j-k)*.5;if((a|0)==0){cc(101464,101048,57,170856)}if((b|0)==0){cc(100576,101048,58,170856)}d=b+8|0;if((c[d>>2]|0)==0){cc(100144,101048,59,170856)}_z(a,88712)|0;_z(a,c[d>>2]|0)|0;d=a+360|0;j=-0.0-(l+m+n)*.5;if((c[d>>2]|0)==0){dA(a,87376,(p=i,i=i+32|0,h[p>>3]=k,h[p+8>>3]=n,h[p+16>>3]=o,h[p+24>>3]=j,p)|0);i=p;q=_z(a,86816)|0;i=e;return}else{dA(a,88248,(p=i,i=i+32|0,h[p>>3]=n,h[p+8>>3]=k,h[p+16>>3]=o,h[p+24>>3]=j,p)|0);i=p;dA(a,87832,(p=i,i=i+24|0,c[p>>2]=c[d>>2],h[p+8>>3]=o,h[p+16>>3]=j,p)|0);i=p;q=_z(a,86816)|0;i=e;return}}function rE(a){a=a|0;c[53566]=1;xt(a);c[53566]=0;return}function sE(a){a=a|0;c[53566]=2;xt(a);c[53566]=0;return}function tE(a){a=a|0;var b=0;if((zE(a)|0)!=0){b=1;return b|0}b=(uE(a)|0)!=0|0;return b|0}function uE(a){a=a|0;var b=0;if(a>>>0<131072>>>0){b=(d[3432+((d[3432+(a>>>8)|0]|0)<<5|a>>>3&31)|0]|0)>>>((a&7)>>>0)&1;return b|0}else{b=a>>>0<196606>>>0|0;return b|0}return 0}function vE(a){a=a|0;return Wa(a|0)|0}function wE(a){a=a|0;var b=0;if(a>>>0<32>>>0|(a-127|0)>>>0<33>>>0|(a-8232|0)>>>0<2>>>0){b=1;return b|0}b=(a-65529|0)>>>0<3>>>0|0;return b|0}function xE(a,b){a=a|0;b=b|0;var c=0;switch(b|0){case 6:{c=AE(a)|0;break};case 1:{c=tE(a)|0;break};case 8:{c=CE(a)|0;break};case 2:{c=uE(a)|0;break};case 4:{c=wE(a)|0;break};case 11:{c=FE(a)|0;break};case 12:{c=GE(a)|0;break};case 3:{c=vE(a)|0;break};case 10:{c=EE(a)|0;break};case 5:{c=zE(a)|0;break};case 9:{c=DE(a)|0;break};case 7:{c=BE(a)|0;break};default:{c=0}}return c|0}function yE(b){b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;c=a[b]|0;d=1;e=336;f=97;while(1){if(c<<24>>24==f<<24>>24){if((Ya(b|0,e|0)|0)==0){g=d;h=5;break}}i=e+6|0;j=a[i]|0;if(j<<24>>24==0){g=0;h=5;break}else{d=d+1|0;e=i;f=j}}if((h|0)==5){return g|0}return 0}function zE(a){a=a|0;return(a-48|0)>>>0<10>>>0|0}function AE(a){a=a|0;var b=0;if((EE(a)|0)!=0){b=0;return b|0}b=(CE(a)|0)!=0|0;return b|0}function BE(a){a=a|0;var b=0;if((HE(a)|0)!=(a|0)){b=1;return b|0}b=(a|0)==223|0;return b|0}function CE(a){a=a|0;var b=0;if(a>>>0<255>>>0){b=(a+1&127)>>>0>32>>>0|0;return b|0}if(a>>>0<8232>>>0|(a-8234|0)>>>0<47062>>>0|(a-57344|0)>>>0<8185>>>0){b=1;return b|0}else{return((a-65532|0)>>>0>1048579>>>0|(a&65534|0)==65534)&1^1|0}return 0}function DE(a){a=a|0;var b=0;if(a>>>0>=131072>>>0){b=0;return b|0}b=(d[6408+((d[6408+(a>>>8)|0]|0)<<5|a>>>3&31)|0]|0)>>>((a&7)>>>0)&1;return b|0}function EE(a){a=a|0;return(bF(20968,a)|0)!=0|0}function FE(a){a=a|0;return(JE(a)|0)!=(a|0)|0}function GE(a){a=a|0;var b=0;if((a-48|0)>>>0<10>>>0){b=1;return b|0}b=((a|32)-97|0)>>>0<6>>>0|0;return b|0}function HE(a){a=a|0;return IE(a,0)|0}function IE(c,f){c=c|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;g=(f<<1)-1|0;h=f-1|0;if((uE(c)|0)==0|(c-1536|0)>>>0<2560>>>0|(c-11776|0)>>>0<30784>>>0|(c-43008|0)>>>0<22272>>>0){i=c;return i|0}do{if((f|0)==0){if((c-11520|0)>>>0>=38>>>0){j=0;break}i=c-7264|0;return i|0}else{if((c-4256|0)>>>0>=46>>>0){j=0;break}do{if((c|0)>4293){if((c|0)==4301|(c|0)==4295){break}else{i=c}return i|0}}while(0);i=c+7264|0;return i|0}}while(0);while(1){k=a[71074+(j<<2)|0]|0;l=k<<24>>24;m=c-(e[71072+(j<<2)>>1]|0)|0;n=j+1|0;if((m-(l&h)|0)>>>0<(d[71075+(j<<2)|0]|0)>>>0){o=12;break}if((n|0)==61){break}else{j=n}}if((o|0)==12){if(k<<24>>24==1){i=f+c-(m&1)|0;return i|0}else{i=(da(l,g)|0)+c|0;return i|0}}g=1-f|0;l=b[14808+(g<<1)>>1]|0;a:do{if(l<<16>>16!=0){m=0;k=l;while(1){o=m+1|0;if((k&65535|0)==(c|0)){break}j=b[14808+(o<<2)+(g<<1)>>1]|0;if(j<<16>>16==0){break a}else{m=o;k=j}}i=e[14808+(m<<2)+(f<<1)>>1]|0;return i|0}}while(0);if((c-66600+(f*40|0)|0)>>>0>=40>>>0){i=c;return i|0}i=c-40+(f*80|0)|0;return i|0}function JE(a){a=a|0;return IE(a,1)|0}function KE(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0;g=i;i=i+8|0;h=g|0;c[h>>2]=b;if((e|0)==0){j=0;i=g;return j|0}do{if((f|0)!=0){if((b|0)==0){k=h;c[h>>2]=k;l=k}else{l=b}k=a[e]|0;m=k&255;if(k<<24>>24>-1){c[l>>2]=m;j=k<<24>>24!=0|0;i=g;return j|0}k=m-194|0;if(k>>>0>50>>>0){break}m=e+1|0;n=c[r+(k<<2)>>2]|0;if(f>>>0<4>>>0){if((n&-2147483648>>>(((f*6|0)-6|0)>>>0)|0)!=0){break}}k=d[m]|0;m=k>>>3;if((m-16|m+(n>>26))>>>0>7>>>0){break}m=k-128|n<<6;if((m|0)>=0){c[l>>2]=m;j=2;i=g;return j|0}n=(d[e+2|0]|0)-128|0;if(n>>>0>63>>>0){break}k=n|m<<6;if((k|0)>=0){c[l>>2]=k;j=3;i=g;return j|0}m=(d[e+3|0]|0)-128|0;if(m>>>0>63>>>0){break}c[l>>2]=m|k<<6;j=4;i=g;return j|0}}while(0);c[(Vb()|0)>>2]=84;j=-1;i=g;return j|0}function LE(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;f=i;i=i+104|0;g=f|0;h=f+8|0;j=f+16|0;k=f+24|0;l=f+32|0;m=f+40|0;n=f+48|0;o=f+56|0;p=dF(20)|0;q=p;if((p|0)==0){r=12;i=f;return r|0}s=dF(2048)|0;c[p+16>>2]=s;if((s|0)==0){eF(p);r=12;i=f;return r|0}c[p>>2]=512;c[p+4>>2]=10240;c[p+8>>2]=128;c[p+12>>2]=0;s=_E(0,0)|0;if((s|0)==0){eF(c[p+16>>2]|0);eF(p);r=12;i=f;return r|0}vF(o|0,0,44)|0;c[o>>2]=s;c[o+4>>2]=q;c[o+12>>2]=d;c[o+36>>2]=e;d=o+28|0;c[d>>2]=-1;t=ME(o)|0;a:do{if((t|0)==0){u=o+20|0;v=c[u>>2]|0;w=v-1|0;c[b>>2]=w;x=c[o+8>>2]|0;y=c[d>>2]|0;if((y|0)>-1){if((c[o+32>>2]|0)!=0){z=2;A=0;B=0;C=0;break}}if((y|0)>(w|0)){z=6;A=0;B=0;C=0;break}w=fF(1,68)|0;D=w;if((w|0)==0){z=12;A=D;B=0;C=0;break}E=y>>>31;c[w+60>>2]=E^1;c[w+64>>2]=c[o+32>>2];c[w+28>>2]=v;if((E|0)==1){if((e&8|0)==0){F=13}else{G=0}}else{F=13}if((F|0)==13){E=NE(0,q,x,D)|0;if((E|0)!=0){z=E;A=D;B=0;C=0;break}E=c[w+40>>2]|0;if((E|0)>0){v=(E<<2)+4|0;y=dF(v)|0;H=y;if((y|0)==0){z=12;A=D;B=0;C=0;break}c[w+32>>2]=H;vF(y|0,-1|0,v|0)|0;I=H}else{I=0}H=fF(E<<1|1,4)|0;c[w+36>>2]=H;if((H|0)==0){z=12;A=D;B=0;C=0;break}H=fF(c[u>>2]|0,12)|0;if((H|0)==0){z=12;A=D;B=0;C=0;break}c[w+16>>2]=H;H=NE(s,q,x,D)|0;if((H|0)==0){G=I}else{z=H;A=D;B=0;C=0;break}}H=o+24|0;u=p+12|0;E=c[u>>2]|0;c[j>>2]=0;c[k>>2]=0;v=TE(q,x)|0;b:do{if((v|0)==0){y=TE(q,0)|0;if((y|0)!=0){J=y;break}y=p+16|0;K=c[u>>2]|0;c:do{if((K|0)>(E|0)){L=0;M=0;N=0;O=K;d:while(1){P=O-1|0;c[u>>2]=P;Q=c[y>>2]|0;R=c[Q+(P<<2)>>2]|0;P=O-2|0;c[u>>2]=P;S=c[Q+(P<<2)>>2]|0;do{if((R|0)==0){P=c[S>>2]|0;if((P|0)==2){T=c[S+4>>2]|0;U=TE(q,L)|0;if((U|0)!=0){V=U;W=M;break c}U=TE(q,S)|0;if((U|0)!=0){V=U;W=M;break c}U=TE(q,1)|0;if((U|0)!=0){V=U;W=M;break c}U=TE(q,c[T>>2]|0)|0;if((U|0)!=0){V=U;W=M;break c}U=TE(q,0)|0;if((U|0)!=0){V=U;W=M;break c}if((c[T+4>>2]|0)>1){F=45}else{if((c[T+8>>2]|0)>1){F=45}else{X=L}}if((F|0)==45){F=0;c[j>>2]=0;X=0}Y=N+1|0;Z=M;_=X;break}else if((P|0)==0){T=c[S+4>>2]|0;U=c[T>>2]|0;if(!((U|0)>-1|(U|0)==-4)){Y=N;Z=M;_=L;break}U=T+8|0;T=(c[U>>2]|0)+L|0;c[U>>2]=T;if((T|0)<=(c[k>>2]|0)){Y=N;Z=M;_=L;break}c[k>>2]=T;Y=N;Z=M;_=L;break}else if((P|0)==1){T=c[S+4>>2]|0;U=TE(q,c[T+4>>2]|0)|0;if((U|0)!=0){V=U;W=M;break c}U=TE(q,0)|0;if((U|0)!=0){V=U;W=M;break c}U=TE(q,c[T>>2]|0)|0;if((U|0)!=0){V=U;W=M;break c}$=TE(q,0)|0}else if((P|0)==3){P=c[S+4>>2]|0;U=TE(q,c[P+4>>2]|0)|0;if((U|0)!=0){V=U;W=M;break c}U=TE(q,0)|0;if((U|0)!=0){V=U;W=M;break c}U=TE(q,c[P>>2]|0)|0;if((U|0)!=0){V=U;W=M;break c}$=TE(q,0)|0}else{Y=N;Z=M;_=L;break}if(($|0)==0){Y=N;Z=M;_=L}else{V=$;W=M;break c}}else if((R|0)==1){U=S+4|0;P=c[U>>2]|0;T=O-3|0;c[u>>2]=T;aa=c[Q+(T<<2)>>2]|0;c[j>>2]=aa;T=P+4|0;ba=c[T>>2]|0;do{if((ba|0)>1){c[l>>2]=0;ca=P;F=51}else{if((c[P+8>>2]|0)<=1){da=aa;break}c[l>>2]=0;ea=P;if((ba|0)>0){ca=ea;F=51}else{fa=ba;ga=0;ha=aa;ia=ea;F=60}}}while(0);e:do{if((F|0)==51){F=0;ea=ba;ja=0;ka=1;la=aa;while(1){ma=UE(s,q,c[ca>>2]|0,(ka|0)<(ea|0)?1:2,j,G,m,k)|0;if((ma|0)!=0){J=ma;break b}ma=c[m>>2]|0;if((ja|0)==0){na=ma}else{oa=aF(s,0,0,1,32)|0;if((oa|0)==0){J=12;break b}pa=aF(s,0,0,1,8)|0;qa=oa+4|0;c[qa>>2]=pa;if((pa|0)==0){J=12;break b}c[oa>>2]=1;c[oa+8>>2]=-1;c[oa+12>>2]=-1;c[pa>>2]=ja;c[(c[qa>>2]|0)+4>>2]=ma;c[oa+16>>2]=(c[ma+16>>2]|0)+(c[ja+16>>2]|0);na=oa}if((na|0)==0){J=12;break b}oa=c[T>>2]|0;if((ka|0)>=(oa|0)){fa=oa;ga=na;ha=la;ia=ca;F=60;break e}ea=oa;ja=na;ka=ka+1|0;la=c[j>>2]|0}}}while(0);if((F|0)==60){F=0;T=P+8|0;ba=c[T>>2]|0;do{if((ba|0)==-1){la=c[j>>2]|0;ka=UE(s,q,c[ia>>2]|0,0,j,0,l,k)|0;if((ka|0)!=0){J=ka;break b}ka=c[l>>2]|0;ja=aF(s,0,0,1,32)|0;ea=ja;if((ja|0)==0){F=65;break d}oa=aF(s,0,0,1,16)|0;c[ja+4>>2]=oa;if((oa|0)==0){F=65;break d}c[ja>>2]=2;c[ja+8>>2]=-1;c[ja+12>>2]=-1;c[oa>>2]=ka;c[oa+4>>2]=0;c[oa+8>>2]=-1;ma=oa+12|0;a[ma]=a[ma]&-2;c[ja+16>>2]=c[ka+16>>2];c[l>>2]=ea;ra=la;sa=ea}else{if((fa|0)<(ba|0)){ta=fa;ua=0}else{ra=ha;sa=0;break}while(1){ea=c[j>>2]|0;la=UE(s,q,c[ia>>2]|0,0,j,0,n,k)|0;if((la|0)!=0){J=la;break b}la=c[n>>2]|0;if((ua|0)==0){va=la}else{ka=aF(s,0,0,1,32)|0;if((ka|0)==0){F=73;break d}ja=aF(s,0,0,1,8)|0;ma=ka+4|0;c[ma>>2]=ja;if((ja|0)==0){F=73;break d}c[ka>>2]=1;c[ka+8>>2]=-1;c[ka+12>>2]=-1;c[ja>>2]=la;c[(c[ma>>2]|0)+4>>2]=ua;c[ka+16>>2]=(c[ua+16>>2]|0)+(c[la+16>>2]|0);va=ka}c[l>>2]=va;if((va|0)==0){J=12;break b}ka=aF(s,0,0,1,32)|0;if((ka|0)==0){J=12;break b}la=aF(s,0,0,1,20)|0;c[ka+4>>2]=la;if((la|0)==0){J=12;break b}c[ka>>2]=0;c[ka+8>>2]=-1;c[ka+12>>2]=-1;c[la>>2]=-1;c[la+4>>2]=-1;c[la+8>>2]=-1;la=aF(s,0,0,1,32)|0;ma=la;if((la|0)==0){F=79;break d}ja=aF(s,0,0,1,8)|0;oa=la+4|0;c[oa>>2]=ja;if((ja|0)==0){F=79;break d}c[la>>2]=3;c[la+8>>2]=-1;c[la+12>>2]=-1;c[ja>>2]=ka;c[(c[oa>>2]|0)+4>>2]=va;c[la+16>>2]=(c[va+16>>2]|0)+(c[ka+16>>2]|0);c[l>>2]=ma;ka=ta+1|0;if((ka|0)<(c[T>>2]|0)){ta=ka;ua=ma}else{ra=ea;sa=ma;break}}}}while(0);c[j>>2]=ra;do{if((ga|0)==0){wa=sa;F=85}else{if((sa|0)==0){xa=ga;break}T=aF(s,0,0,1,32)|0;if((T|0)==0){J=12;break b}ba=aF(s,0,0,1,8)|0;P=T+4|0;c[P>>2]=ba;if((ba|0)==0){J=12;break b}c[T>>2]=1;c[T+8>>2]=-1;c[T+12>>2]=-1;c[ba>>2]=ga;c[(c[P>>2]|0)+4>>2]=sa;c[T+16>>2]=(c[sa+16>>2]|0)+(c[ga+16>>2]|0);wa=T;F=85}}while(0);if((F|0)==85){F=0;if((wa|0)==0){J=12;break b}else{xa=wa}}c[U>>2]=c[xa+4>>2];c[S>>2]=c[xa>>2];da=ra}T=N-1|0;P=da-aa+M|0;if((T|0)!=0){Y=T;Z=P;_=da;break}c[j>>2]=P;Y=0;Z=P;_=P}else{Y=N;Z=M;_=L}}while(0);S=c[u>>2]|0;if((S|0)>(E|0)){L=_;M=Z;N=Y;O=S}else{V=0;W=Z;break c}}if((F|0)==65){c[l>>2]=0;J=12;break b}else if((F|0)==73){c[l>>2]=0;J=12;break b}else if((F|0)==79){c[l>>2]=0;J=12;break b}}else{V=0;W=0}}while(0);y=(c[H>>2]|0)+W|0;K=c[k>>2]|0;c[H>>2]=(K|0)>(y|0)?K:y;J=V}else{J=v}}while(0);if((J|0)!=0){z=J;A=D;B=0;C=0;break}v=c[H>>2]|0;c[H>>2]=v+1;E=aF(s,0,0,1,32)|0;if((E|0)==0){z=12;A=D;B=0;C=0;break}y=aF(s,0,0,1,20)|0;c[E+4>>2]=y;if((y|0)==0){z=12;A=D;B=0;C=0;break}c[E>>2]=0;c[E+8>>2]=-1;c[E+12>>2]=-1;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=v;v=aF(s,0,0,1,32)|0;y=v;if((v|0)==0){z=12;A=D;B=0;C=0;break}K=aF(s,0,0,1,8)|0;O=v+4|0;c[O>>2]=K;if((K|0)==0){z=12;A=D;B=0;C=0;break}c[v>>2]=1;c[v+8>>2]=-1;c[v+12>>2]=-1;c[K>>2]=x;c[(c[O>>2]|0)+4>>2]=E;c[v+16>>2]=(c[E+16>>2]|0)+(c[x+16>>2]|0);E=c[u>>2]|0;O=TE(q,v)|0;if((O|0)!=0){z=O;A=D;B=0;C=0;break}O=TE(q,0)|0;if((O|0)!=0){z=O;A=D;B=0;C=0;break}O=c[u>>2]|0;f:do{if((O|0)>(E|0)){K=p+16|0;N=O;g:while(1){M=N-1|0;c[u>>2]=M;L=c[K>>2]|0;S=c[L+(M<<2)>>2]|0;M=N-2|0;c[u>>2]=M;ya=c[L+(M<<2)>>2]|0;do{if((S|0)==3){M=c[ya+4>>2]|0;L=M;do{if((c[M+4>>2]|0)==0){F=141}else{if((c[(c[L>>2]|0)+8>>2]|0)!=0){F=141;break}c[ya+8>>2]=0}}while(0);if((F|0)==141){F=0;c[ya+8>>2]=1}c[ya+24>>2]=c[(c[L>>2]|0)+24>>2];c[ya+28>>2]=c[(c[L>>2]|0)+28>>2]}else if((S|0)==2){M=c[ya+4>>2]|0;Q=M;if((c[(c[Q>>2]|0)+8>>2]|0)==0){za=0}else{za=(c[(c[M+4>>2]|0)+8>>2]|0)!=0|0}c[ya+8>>2]=za;R=c[Q>>2]|0;if((c[R+8>>2]|0)==0){c[ya+24>>2]=c[R+24>>2];Aa=M+4|0}else{P=SE(q,R,0,0,g)|0;if((P|0)!=0){z=P;A=D;B=0;C=0;break a}Ba=dF((c[g>>2]<<2)+4|0)|0;P=Ba;if((Ba|0)==0){z=12;A=D;B=0;C=0;break a}c[P>>2]=-1;c[h>>2]=0;Ca=SE(q,c[Q>>2]|0,P,h,0)|0;if((Ca|0)!=0){F=150;break g}R=M+4|0;M=ya+24|0;c[M>>2]=RE(s,c[(c[R>>2]|0)+24>>2]|0,c[(c[Q>>2]|0)+24>>2]|0,P,c[h>>2]|0)|0;eF(Ba);if((c[M>>2]|0)==0){z=12;A=D;B=0;C=0;break a}else{Aa=R}}R=c[Aa>>2]|0;if((c[R+8>>2]|0)==0){c[ya+28>>2]=c[R+28>>2];break}M=SE(q,R,0,0,g)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}Da=dF((c[g>>2]<<2)+4|0)|0;M=Da;if((Da|0)==0){z=12;A=D;B=0;C=0;break a}c[M>>2]=-1;c[h>>2]=0;Ea=SE(q,c[Aa>>2]|0,M,h,0)|0;if((Ea|0)!=0){F=157;break g}R=ya+28|0;c[R>>2]=RE(s,c[(c[Q>>2]|0)+28>>2]|0,c[(c[Aa>>2]|0)+28>>2]|0,M,c[h>>2]|0)|0;eF(Da);if((c[R>>2]|0)==0){z=12;A=D;B=0;C=0;break a}}else if((S|0)==1){R=c[ya+4>>2]|0;M=R;Q=R+4|0;if((c[(c[M>>2]|0)+8>>2]|0)==0){Fa=(c[(c[Q>>2]|0)+8>>2]|0)!=0|0}else{Fa=1}c[ya+8>>2]=Fa;R=RE(s,c[(c[M>>2]|0)+24>>2]|0,c[(c[Q>>2]|0)+24>>2]|0,0,0)|0;c[ya+24>>2]=R;if((R|0)==0){z=12;A=D;B=0;C=0;break a}R=RE(s,c[(c[M>>2]|0)+28>>2]|0,c[(c[Q>>2]|0)+28>>2]|0,0,0)|0;c[ya+28>>2]=R;if((R|0)==0){z=12;A=D;B=0;C=0;break a}}else if((S|0)==0){R=c[ya>>2]|0;if((R|0)==1){Q=TE(q,ya)|0;if((Q|0)!=0){z=Q;A=D;B=0;C=0;break a}Q=TE(q,2)|0;if((Q|0)!=0){z=Q;A=D;B=0;C=0;break a}Q=ya+4|0;M=TE(q,c[(c[Q>>2]|0)+4>>2]|0)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,0)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,c[c[Q>>2]>>2]|0)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,0)|0;if((M|0)==0){break}else{z=M;A=D;B=0;C=0;break a}}else if((R|0)==2){M=TE(q,ya)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,3)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,c[c[ya+4>>2]>>2]|0)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,0)|0;if((M|0)==0){break}else{z=M;A=D;B=0;C=0;break a}}else if((R|0)==0){M=c[ya+4>>2]|0;Q=M;P=c[Q>>2]|0;if((P|0)==-4){c[ya+8>>2]=0;T=M+8|0;ba=c[T>>2]|0;ma=aF(s,0,0,1,64)|0;if((ma|0)==0){F=104;break g}c[ma>>2]=ba;c[ma+4>>2]=0;c[ma+8>>2]=1114111;c[ma+20>>2]=0;c[ma+24>>2]=0;vF(ma+28|0,-1|0,16)|0;c[ya+24>>2]=ma;ma=c[T>>2]|0;T=c[M+4>>2]|0;ba=aF(s,0,0,1,64)|0;if((ba|0)==0){F=106;break g}c[ba>>2]=ma;c[ba+4>>2]=0;c[ba+8>>2]=1114111;c[ba+20>>2]=0;c[ba+24>>2]=0;c[ba+28>>2]=T;c[ba+32>>2]=-1;c[ba+36>>2]=-1;c[ba+40>>2]=-1;c[ya+28>>2]=ba;break}ba=ya+8|0;if((P|0)<0){c[ba>>2]=1;P=aF(s,0,0,1,32)|0;if((P|0)==0){F=110;break g}c[P>>2]=-1;c[P+4>>2]=-1;c[P+8>>2]=-1;c[ya+24>>2]=P;P=aF(s,0,0,1,32)|0;if((P|0)==0){F=112;break g}c[P>>2]=-1;c[P+4>>2]=-1;c[P+8>>2]=-1;c[ya+28>>2]=P;break}else{c[ba>>2]=0;ba=M+8|0;P=c[ba>>2]|0;T=c[Q>>2]|0;ma=M+4|0;ea=c[ma>>2]|0;ka=aF(s,0,0,1,64)|0;if((ka|0)==0){F=115;break g}c[ka>>2]=P;c[ka+4>>2]=T;c[ka+8>>2]=ea;c[ka+20>>2]=0;c[ka+24>>2]=0;vF(ka+28|0,-1|0,16)|0;c[ya+24>>2]=ka;ka=c[ba>>2]|0;ba=c[Q>>2]|0;Q=c[ma>>2]|0;ma=c[M+12>>2]|0;ea=c[M+16>>2]|0;M=aF(s,0,0,1,64)|0;if((M|0)==0){F=117;break g}c[M>>2]=ka;c[M+4>>2]=ba;c[M+8>>2]=Q;c[M+20>>2]=ma;c[M+24>>2]=ea;vF(M+28|0,-1|0,16)|0;c[ya+28>>2]=M;break}}else if((R|0)==3){R=TE(q,ya)|0;if((R|0)!=0){z=R;A=D;B=0;C=0;break a}R=TE(q,1)|0;if((R|0)!=0){z=R;A=D;B=0;C=0;break a}R=ya+4|0;M=TE(q,c[(c[R>>2]|0)+4>>2]|0)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,0)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,c[c[R>>2]>>2]|0)|0;if((M|0)!=0){z=M;A=D;B=0;C=0;break a}M=TE(q,0)|0;if((M|0)==0){break}else{z=M;A=D;B=0;C=0;break a}}else{break}}}while(0);N=c[u>>2]|0;if((N|0)<=(E|0)){break f}}if((F|0)==104){c[ya+24>>2]=0;z=12;A=D;B=0;C=0;break a}else if((F|0)==106){c[ya+28>>2]=0;z=12;A=D;B=0;C=0;break a}else if((F|0)==110){c[ya+24>>2]=0;z=12;A=D;B=0;C=0;break a}else if((F|0)==112){c[ya+28>>2]=0;z=12;A=D;B=0;C=0;break a}else if((F|0)==115){c[ya+24>>2]=0;z=12;A=D;B=0;C=0;break a}else if((F|0)==117){c[ya+28>>2]=0;z=12;A=D;B=0;C=0;break a}else if((F|0)==150){eF(Ba);z=Ca;A=D;B=0;C=0;break a}else if((F|0)==157){eF(Da);z=Ea;A=D;B=0;C=0;break a}}}while(0);E=c[H>>2]|0;u=E<<2;O=dF(u)|0;x=O;if((O|0)==0){z=12;A=D;B=x;C=0;break}N=dF(u)|0;u=N;if((N|0)==0){z=12;A=D;B=x;C=u;break}if((E|0)>0){vF(O|0,0,((E|0)>1?E<<2:4)|0)|0}OE(y,0,x,0)|0;E=c[H>>2]|0;if((E|0)>0){K=0;S=0;while(1){c[u+(K<<2)>>2]=S;M=x+(K<<2)|0;R=S+1+(c[M>>2]|0)|0;c[M>>2]=0;M=K+1|0;if((M|0)<(E|0)){K=M;S=R}else{Ga=R;break}}}else{Ga=0}S=fF(Ga+1|0,32)|0;K=S;if((S|0)==0){z=12;A=D;B=x;C=u;break}c[w>>2]=K;S=w+4|0;c[S>>2]=Ga;E=OE(y,K,x,u)|0;if((E|0)!=0){z=E;A=D;B=x;C=u;break}c[w+20>>2]=0;E=v+24|0;R=c[E>>2]|0;if((c[R>>2]|0)>-1){M=1;ea=R;while(1){R=ea+32|0;ma=M+1|0;if((c[R>>2]|0)>-1){M=ma;ea=R}else{Ha=ma;break}}}else{Ha=1}ea=fF(Ha,32)|0;M=ea;if((ea|0)==0){z=12;A=D;B=x;C=u;break}c[w+8>>2]=M;ea=c[E>>2]|0;y=c[ea>>2]|0;if((y|0)>-1){ma=0;R=ea;ea=y;while(1){c[M+(ma<<5)+8>>2]=K+(c[u+(ea<<2)>>2]<<5);c[M+(ma<<5)+12>>2]=c[R>>2];y=M+(ma<<5)+16|0;c[y>>2]=0;Q=R+12|0;ba=c[Q>>2]|0;if((ba|0)!=0){ka=0;while(1){Ia=ka+1|0;if((c[ba+(ka<<2)>>2]|0)>-1){ka=Ia}else{break}}ka=Ia<<2;ba=dF(ka)|0;c[y>>2]=ba;if((ba|0)==0){z=12;A=D;B=x;C=u;break a}tF(ba|0,c[Q>>2]|0,ka)|0}c[M+(ma<<5)+20>>2]=c[R+16>>2];ka=ma+1|0;ba=R+32|0;T=c[ba>>2]|0;if((T|0)>-1){ma=ka;R=ba;ea=T}else{Ja=ka;break}}}else{Ja=0}c[M+(Ja<<5)+8>>2]=0;c[S>>2]=Ga;c[w+12>>2]=K+(c[u+(c[c[v+28>>2]>>2]<<2)>>2]<<5);c[w+52>>2]=c[H>>2];c[w+56>>2]=e;$E(s);eF(c[p+16>>2]|0);eF(p);eF(O);eF(N);c[b+4>>2]=w;r=0;i=f;return r|0}else{z=t;A=0;B=0;C=0}}while(0);$E(s);eF(c[p+16>>2]|0);eF(p);if((B|0)!=0){eF(B)}if((C|0)!=0){eF(C)}c[b+4>>2]=A;PE(b);r=z;i=f;return r|0}function ME(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0;d=i;i=i+424|0;e=d|0;f=d+8|0;g=d+72|0;h=d+328|0;j=d+336|0;k=d+384|0;l=d+392|0;m=c[b+4>>2]|0;n=m+12|0;o=c[n>>2]|0;if((c[b+40>>2]|0)==0){p=b+20|0;TE(m,c[p>>2]|0)|0;TE(m,2)|0;c[p>>2]=(c[p>>2]|0)+1}p=TE(m,0)|0;q=b+12|0;r=b+16|0;c[r>>2]=c[q>>2];s=c[n>>2]|0;t=(p|0)==0;a:do{if((s|0)>(o|0)&t){u=m+16|0;v=b+36|0;w=b|0;x=b+24|0;y=b+20|0;z=f|0;A=b+28|0;B=l|0;C=k|0;D=k+1|0;E=j;F=b;G=j+12|0;H=j+40|0;I=j+24|0;J=j+8|0;K=0;L=0;M=s;b:while(1){N=M-1|0;c[n>>2]=N;O=c[u>>2]|0;c:do{switch(c[O+(N<<2)>>2]|0){case 7:{P=c[q>>2]|0;Q=a[P]|0;if((Q|0)==41){c[q>>2]=P+1;R=0;S=L;T=K;break c}else if((Q|0)!=124){R=0;S=L;T=K;break c}Q=TE(m,7)|0;if((Q|0)!=0){U=Q;V=L;W=6;break b}Q=TE(m,K)|0;if((Q|0)!=0){U=Q;V=L;W=6;break b}Q=TE(m,8)|0;if((Q|0)!=0){U=Q;V=L;W=6;break b}Q=TE(m,3)|0;if((Q|0)!=0){U=Q;V=L;W=6;break b}c[q>>2]=(c[q>>2]|0)+1;R=0;S=L;T=K;break};case 4:{Q=TE(m,9)|0;if((Q|0)!=0){U=Q;V=L;W=6;break b}R=TE(m,1)|0;S=L;T=K;break};case 5:{Q=c[q>>2]|0;P=a[Q]|0;if(P<<24>>24==0){R=0;S=L;T=K;break c}X=c[v>>2]&1;Y=(X|0)!=0;if(Y&P<<24>>24==124){R=0;S=L;T=K;break c}do{if(!(Y&P<<24>>24==41&(L|0)>0)){if((X|0)==0&P<<24>>24==92){if((a[Q+1|0]|0)==41){break}}Z=TE(m,5)|0;if((Z|0)!=0){U=Z;V=L;W=6;break b}Z=TE(m,K)|0;if((Z|0)!=0){U=Z;V=L;W=6;break b}Z=TE(m,6)|0;if((Z|0)!=0){U=Z;V=L;W=6;break b}R=TE(m,4)|0;S=L;T=K;break c}}while(0);P=(X|L|0)==0?8:0;Y=L-1|0;if((X|0)!=0){R=P;S=Y;T=K;break c}c[q>>2]=Q+2;R=P;S=Y;T=K;break};case 1:{Y=c[q>>2]|0;d:do{switch(a[Y]|0){case 91:{P=Y+1|0;c[q>>2]=P;Z=dF(128)|0;if((Z|0)==0){_=12;W=297;break b}if((a[P]|0)==94){$=Y+2|0;c[q>>2]=$;aa=1;ba=$}else{aa=0;ba=P}P=(aa|0)==0;$=ba;ca=32;da=0;ea=0;fa=Z;e:while(1){Z=a[$]|0;if((Z<<24>>24|0)==0){ga=$;ha=7;ia=fa;W=140;break}else if((Z<<24>>24|0)==93){if($>>>0>(c[q>>2]|0)>>>0){W=85;break}}Z=KE(e,$,-1)|0;if((Z|0)<0){c[e>>2]=-1;ja=1}else{ja=Z}Z=$+ja|0;do{if((a[Z]|0)==45){ka=ja+1|0;la=$+ka|0;if((a[la]|0)==93){W=94;break}ma=c[e>>2]|0;na=KE(e,la,-1)|0;if((na|0)<0){c[e>>2]=-1;oa=1;pa=-1}else{oa=na;pa=c[e>>2]|0}qa=$+(oa+ka)|0;ra=pa;sa=ma;ta=ma>>>0>pa>>>0?11:0;ua=0}else{W=94}}while(0);f:do{if((W|0)==94){W=0;ma=a[$]|0;do{if((ma<<24>>24|0)==91){ka=a[$+1|0]|0;if((ka<<24>>24|0)==46|(ka<<24>>24|0)==61){ga=$;ha=3;ia=fa;W=140;break e}else if((ka<<24>>24|0)!=58){va=0;break}ka=$+2|0;na=ka;while(1){la=a[na]|0;wa=la<<24>>24==0;if(la<<24>>24!=58&(wa^1)){na=na+1|0}else{break}}if(wa){ga=$;ha=4;ia=fa;W=140;break e}la=na-$-2|0;xa=(la|0)>63?63:la;DF(z|0,ka|0,xa|0)|0;a[f+xa|0]=0;xa=yE(z)|0;qa=na+2|0;ra=1114111;sa=0;ta=(xa|0)==0?4:0;ua=xa;break f}else if((ma<<24>>24|0)==45){if((a[$+1|0]|0)==93){va=0;break}va=(c[q>>2]|0)==($|0)?0:11}else{va=0}}while(0);ma=c[e>>2]|0;qa=Z;ra=ma;sa=ma;ta=va;ua=0}}while(0);if((ta|0)!=0){ga=qa;ha=ta;ia=fa;W=140;break}Z=(ua|0)!=0;do{if(P|Z^1){ma=c[w>>2]|0;if((da|0)<(ca|0)){ya=ca;za=fa}else{if((ca|0)>1024){ga=qa;ha=12;ia=fa;W=140;break e}xa=gF(fa,ca<<3)|0;if((xa|0)==0){ga=qa;ha=12;ia=fa;W=140;break e}else{ya=ca<<1;za=xa}}xa=aF(ma,0,0,1,32)|0;if((xa|0)==0){W=112;break e}la=aF(ma,0,0,1,20)|0;ma=xa+4|0;c[ma>>2]=la;if((la|0)==0){W=112;break e}c[xa>>2]=0;c[xa+8>>2]=-1;c[xa+12>>2]=-1;c[la>>2]=sa;c[la+4>>2]=ra;c[la+8>>2]=-1;c[za+(da<<2)>>2]=xa;c[(c[ma>>2]|0)+12>>2]=ua;Aa=0;Ba=ya;Ca=da+1|0;Da=ea;Ea=za}else{if((ea|0)>63){Aa=12;Ba=ca;Ca=da;Da=ea;Ea=fa;break}c[g+(ea<<2)>>2]=ua;Aa=0;Ba=ca;Ca=da;Da=ea+1|0;Ea=fa}}while(0);ma=(Aa|0)==0;if(ma&(((c[v>>2]&2|0)==0|Z)^1)){Fa=sa;Ga=Ba;Ha=Ca;Ia=Ea}else{if(ma){$=qa;ca=Ba;da=Ca;ea=Da;fa=Ea;continue}else{ga=qa;ha=Aa;ia=Ea;W=140;break}}while(1){ma=Fa;while(1){if(ma>>>0>ra>>>0){$=qa;ca=Ga;da=Ha;ea=Da;fa=Ia;continue e}if((BE(ma)|0)!=0){W=118;break}Ka=ma+1|0;if((FE(ma)|0)==0){ma=Ka}else{W=129;break}}if((W|0)==118){W=0;xa=HE(ma)|0;la=ma+1|0;g:do{if((BE(la)|0)==0){La=xa;Ma=la}else{Na=xa;Oa=la;while(1){if((HE(Oa)|0)!=(Na+1|0)|Oa>>>0>ra>>>0){La=Na;Ma=Oa;break g}Pa=HE(Oa)|0;Qa=Oa+1|0;if((BE(Qa)|0)==0){La=Pa;Ma=Qa;break}else{Na=Pa;Oa=Qa}}}}while(0);la=c[w>>2]|0;if((Ha|0)<(Ga|0)){Ra=Ga;Sa=Ia}else{if((Ga|0)>1024){ga=qa;ha=12;ia=Ia;W=140;break e}Oa=gF(Ia,Ga<<3)|0;if((Oa|0)==0){ga=qa;ha=12;ia=Ia;W=140;break e}else{Ra=Ga<<1;Sa=Oa}}Oa=aF(la,0,0,1,32)|0;Na=Oa;do{if((Oa|0)==0){Ta=0}else{na=aF(la,0,0,1,20)|0;c[Oa+4>>2]=na;if((na|0)==0){Ta=0;break}c[Oa>>2]=0;c[Oa+8>>2]=-1;c[Oa+12>>2]=-1;c[na>>2]=xa;c[na+4>>2]=La;c[na+8>>2]=-1;Ta=Na}}while(0);c[Sa+(Ha<<2)>>2]=Ta;Ua=Ma;Va=Ra;Wa=Ta;Xa=Sa}else if((W|0)==129){W=0;Na=JE(ma)|0;h:do{if((FE(Ka)|0)==0){Ya=Ka;Za=Na}else{xa=Ka;Oa=Na;while(1){if((JE(xa)|0)!=(Oa+1|0)|xa>>>0>ra>>>0){Ya=xa;Za=Oa;break h}la=xa+1|0;na=JE(xa)|0;if((FE(la)|0)==0){Ya=la;Za=na;break}else{xa=la;Oa=na}}}}while(0);ma=c[w>>2]|0;if((Ha|0)<(Ga|0)){_a=Ga;$a=Ia}else{if((Ga|0)>1024){ga=qa;ha=12;ia=Ia;W=140;break e}Oa=gF(Ia,Ga<<3)|0;if((Oa|0)==0){ga=qa;ha=12;ia=Ia;W=140;break e}else{_a=Ga<<1;$a=Oa}}Oa=aF(ma,0,0,1,32)|0;xa=Oa;do{if((Oa|0)==0){ab=0}else{na=aF(ma,0,0,1,20)|0;c[Oa+4>>2]=na;if((na|0)==0){ab=0;break}c[Oa>>2]=0;c[Oa+8>>2]=-1;c[Oa+12>>2]=-1;c[na>>2]=Na;c[na+4>>2]=Za;c[na+8>>2]=-1;ab=xa}}while(0);c[$a+(Ha<<2)>>2]=ab;Ua=Ya;Va=_a;Wa=ab;Xa=$a}if((Wa|0)==0){W=141;break e}else{Fa=Ua;Ga=Va;Ha=Ha+1|0;Ia=Xa}}}i:do{if((W|0)==85){W=0;c[q>>2]=$+1;ca=(aa|0)!=0;if(ca){Jb(fa|0,da|0,4,148)}j:do{if((da|0)>0){P=(ea|0)>0;Z=(ea<<2)+4|0;if(ca){bb=0;cb=0;db=0;eb=0}else{xa=0;Na=0;while(1){Oa=fa+(xa<<2)|0;ma=c[(c[Oa>>2]|0)+4>>2]|0;do{if((ma|0)==0){fb=Na;gb=0}else{c[ma+8>>2]=c[x>>2];if(P){na=aF(c[w>>2]|0,0,0,0,Z)|0;la=na;ka=ma+16|0;c[ka>>2]=la;if((na|0)==0){hb=Na;ib=12;jb=fa;break i}else{kb=0;lb=la}do{c[lb+(kb<<2)>>2]=c[g+(kb<<2)>>2];kb=kb+1|0;lb=c[ka>>2]|0}while((kb|0)<(ea|0));c[lb+(ea<<2)>>2]=0}else{c[ma+16>>2]=0}if((Na|0)==0){fb=c[Oa>>2]|0;gb=0;break}ka=c[w>>2]|0;la=c[Oa>>2]|0;na=aF(ka,0,0,1,32)|0;Qa=na;do{if((na|0)==0){mb=0}else{Pa=aF(ka,0,0,1,8)|0;nb=na+4|0;c[nb>>2]=Pa;if((Pa|0)==0){mb=0;break}c[na>>2]=3;c[na+8>>2]=-1;c[na+12>>2]=-1;c[Pa>>2]=Na;c[(c[nb>>2]|0)+4>>2]=la;c[na+16>>2]=(c[la+16>>2]|0)+(c[Na+16>>2]|0);mb=Qa}}while(0);fb=mb;gb=(mb|0)==0?12:0}}while(0);Oa=xa+1|0;if((Oa|0)<(da|0)&(gb|0)==0){xa=Oa;Na=fb}else{ob=gb;pb=0;qb=fb;break j}}}while(1){Na=fa+(bb<<2)|0;xa=c[(c[Na>>2]|0)+4>>2]|0;Oa=xa;ma=c[Oa>>2]|0;Qa=xa+4|0;la=c[Qa>>2]|0;do{if((ma|0)<(cb|0)){na=la+1|0;rb=eb;sb=0;tb=(na|0)<(cb|0)?cb:na;ub=db}else{if((ma|0)<=(db|0)){na=la+1|0;rb=eb;sb=0;tb=na;ub=na;break}c[Oa>>2]=db;c[Qa>>2]=ma-1;na=la+1|0;if((xa|0)==0){rb=eb;sb=0;tb=na;ub=na;break}c[xa+8>>2]=c[x>>2];if(P){ka=aF(c[w>>2]|0,0,0,0,Z)|0;nb=ka;Pa=xa+16|0;c[Pa>>2]=nb;if((ka|0)==0){hb=eb;ib=12;jb=fa;break i}else{vb=0;wb=nb}do{c[wb+(vb<<2)>>2]=c[g+(vb<<2)>>2];vb=vb+1|0;wb=c[Pa>>2]|0}while((vb|0)<(ea|0));c[wb+(ea<<2)>>2]=0}else{c[xa+16>>2]=0}if((eb|0)==0){rb=c[Na>>2]|0;sb=0;tb=na;ub=na;break}Pa=c[w>>2]|0;nb=c[Na>>2]|0;ka=aF(Pa,0,0,1,32)|0;xb=ka;do{if((ka|0)==0){yb=0}else{zb=aF(Pa,0,0,1,8)|0;Ab=ka+4|0;c[Ab>>2]=zb;if((zb|0)==0){yb=0;break}c[ka>>2]=3;c[ka+8>>2]=-1;c[ka+12>>2]=-1;c[zb>>2]=eb;c[(c[Ab>>2]|0)+4>>2]=nb;c[ka+16>>2]=(c[nb+16>>2]|0)+(c[eb+16>>2]|0);yb=xb}}while(0);rb=yb;sb=(yb|0)==0?12:0;tb=na;ub=na}}while(0);Na=bb+1|0;if((Na|0)<(da|0)&(sb|0)==0){bb=Na;cb=tb;db=ub;eb=rb}else{ob=sb;pb=ub;qb=rb;break}}}else{ob=0;pb=0;qb=0}}while(0);if((ob|0)!=0|ca^1){hb=qb;ib=ob;jb=fa;break}Z=c[w>>2]|0;P=c[x>>2]|0;Na=aF(Z,0,0,1,32)|0;xa=Na;if((Na|0)==0){hb=qb;ib=12;jb=fa;break}la=aF(Z,0,0,1,20)|0;Z=Na+4|0;c[Z>>2]=la;if((la|0)==0){hb=qb;ib=12;jb=fa;break}c[Na>>2]=0;c[Na+8>>2]=-1;c[Na+12>>2]=-1;c[la>>2]=pb;c[la+4>>2]=1114111;c[la+8>>2]=P;P=c[Z>>2]|0;if((ea|0)>0){Z=aF(c[w>>2]|0,0,0,0,(ea<<2)+4|0)|0;la=Z;ma=P+16|0;c[ma>>2]=la;if((Z|0)==0){hb=qb;ib=12;jb=fa;break}else{Bb=0;Cb=la}do{c[Cb+(Bb<<2)>>2]=c[g+(Bb<<2)>>2];Bb=Bb+1|0;Cb=c[ma>>2]|0}while((Bb|0)<(ea|0));c[Cb+(ea<<2)>>2]=0}else{c[P+16>>2]=0}if((qb|0)==0){hb=xa;ib=0;jb=fa;break}ma=c[w>>2]|0;ca=aF(ma,0,0,1,32)|0;la=ca;do{if((ca|0)==0){Db=0}else{Z=aF(ma,0,0,1,8)|0;Qa=ca+4|0;c[Qa>>2]=Z;if((Z|0)==0){Db=0;break}c[ca>>2]=3;c[ca+8>>2]=-1;c[ca+12>>2]=-1;c[Z>>2]=qb;c[(c[Qa>>2]|0)+4>>2]=xa;c[ca+16>>2]=(c[Na+16>>2]|0)+(c[qb+16>>2]|0);Db=la}}while(0);hb=Db;ib=(Db|0)==0?12:0;jb=fa}else if((W|0)==112){W=0;c[za+(da<<2)>>2]=0;ga=qa;ha=12;ia=za;W=140}else if((W|0)==141){W=0;c[q>>2]=qa;hb=0;ib=12;jb=Xa}}while(0);if((W|0)==140){W=0;c[q>>2]=ga;hb=0;ib=ha;jb=ia}eF(jb);c[x>>2]=(c[x>>2]|0)+1;if((ib|0)==0){R=0;S=L;T=hb;break c}else{_=ib;W=297;break b}break};case 40:{if((c[v>>2]&1|0)!=0){Eb=Y;W=74}break};case 46:{da=(c[v>>2]&4|0)==0;fa=c[w>>2]|0;ea=c[x>>2]|0;$=aF(fa,0,0,1,32)|0;la=$;Na=($|0)==0;if(da){if(Na){_=12;W=297;break b}da=aF(fa,0,0,1,20)|0;c[$+4>>2]=da;if((da|0)==0){_=12;W=297;break b}c[$>>2]=0;c[$+8>>2]=-1;c[$+12>>2]=-1;c[da>>2]=0;c[da+4>>2]=1114111;c[da+8>>2]=ea;Fb=(c[x>>2]|0)+1|0;Gb=la}else{if(Na){_=12;W=297;break b}Na=aF(fa,0,0,1,20)|0;c[$+4>>2]=Na;if((Na|0)==0){_=12;W=297;break b}c[$>>2]=0;c[$+8>>2]=-1;c[$+12>>2]=-1;c[Na>>2]=0;c[Na+4>>2]=9;c[Na+8>>2]=ea;ea=c[w>>2]|0;Na=(c[x>>2]|0)+1|0;fa=aF(ea,0,0,1,32)|0;if((fa|0)==0){_=12;W=297;break b}da=aF(ea,0,0,1,20)|0;c[fa+4>>2]=da;if((da|0)==0){_=12;W=297;break b}c[fa>>2]=0;c[fa+8>>2]=-1;c[fa+12>>2]=-1;c[da>>2]=11;c[da+4>>2]=1114111;c[da+8>>2]=Na;Na=c[w>>2]|0;da=aF(Na,0,0,1,32)|0;if((da|0)==0){_=12;W=297;break b}ea=aF(Na,0,0,1,8)|0;Na=da+4|0;c[Na>>2]=ea;if((ea|0)==0){_=12;W=297;break b}c[da>>2]=3;c[da+8>>2]=-1;c[da+12>>2]=-1;c[ea>>2]=la;c[(c[Na>>2]|0)+4>>2]=fa;c[da+16>>2]=(c[fa+16>>2]|0)+(c[$+16>>2]|0);Fb=(c[x>>2]|0)+2|0;Gb=da}c[x>>2]=Fb;c[q>>2]=(c[q>>2]|0)+1;R=0;S=L;T=Gb;break c;break};case 94:{if((c[v>>2]&1|0)==0){if((Y|0)!=(c[r>>2]|0)){break d}da=TE(m,5)|0;if((da|0)!=0){U=da;V=L;W=6;break b}}da=c[w>>2]|0;$=aF(da,0,0,1,32)|0;if(($|0)==0){_=12;W=297;break b}fa=aF(da,0,0,1,20)|0;c[$+4>>2]=fa;if((fa|0)==0){_=12;W=297;break b}c[$>>2]=0;c[$+8>>2]=-1;c[$+12>>2]=-1;c[fa>>2]=-2;c[fa+4>>2]=1;c[fa+8>>2]=-1;c[q>>2]=(c[q>>2]|0)+1;R=0;S=L;T=$;break c;break};case 36:{if((c[v>>2]&1|0)==0){if((a[Y+1|0]|0)!=0){break d}}$=c[w>>2]|0;fa=aF($,0,0,1,32)|0;if((fa|0)==0){_=12;W=297;break b}da=aF($,0,0,1,20)|0;c[fa+4>>2]=da;if((da|0)==0){_=12;W=297;break b}c[fa>>2]=0;c[fa+8>>2]=-1;c[fa+12>>2]=-1;c[da>>2]=-2;c[da+4>>2]=2;c[da+8>>2]=-1;c[q>>2]=(c[q>>2]|0)+1;R=0;S=L;T=fa;break c;break};case 92:{fa=Y+1|0;da=a[fa]|0;do{if((c[v>>2]&1|0)==0){if(da<<24>>24==40){c[q>>2]=fa;Eb=fa;W=74;break d}else{$=a[Y+1|0]|0;if($<<24>>24==41){W=268;break d}else{Hb=$;break}}}else{Hb=da}}while(0);da=Y+1|0;fa=Hb<<24>>24==0;if(fa){_=5;W=297;break b}else{Ib=0;Kb=996}while(1){$=Ib+1|0;if((a[992+(Ib<<3)|0]|0)==Hb<<24>>24){Lb=Kb;break}Na=996+($<<3)|0;if(($|0)==12){Lb=Na;break}else{Ib=$;Kb=Na}}Na=c[Lb>>2]|0;if((Na|0)!=0){tF(E|0,F|0,40)|0;c[G>>2]=Na;c[H>>2]=1;Na=ME(j)|0;if((Na|0)!=0){_=Na;W=297;break b}c[q>>2]=(c[q>>2]|0)+2;c[x>>2]=c[I>>2];R=0;S=L;T=c[J>>2]|0;break c}if(fa){_=5;W=297;break b}c[q>>2]=da;Na=a[da]|0;k:do{switch(Na|0){case 60:{$=c[w>>2]|0;la=aF($,0,0,1,32)|0;ea=la;do{if((la|0)==0){Mb=0}else{ca=aF($,0,0,1,20)|0;c[la+4>>2]=ca;if((ca|0)==0){Mb=0;break}c[la>>2]=0;c[la+8>>2]=-1;c[la+12>>2]=-1;c[ca>>2]=-2;c[ca+4>>2]=16;c[ca+8>>2]=-1;Mb=ea}}while(0);c[q>>2]=(c[q>>2]|0)+1;Nb=Mb;break};case 62:{ea=c[w>>2]|0;la=aF(ea,0,0,1,32)|0;$=la;do{if((la|0)==0){Ob=0}else{ca=aF(ea,0,0,1,20)|0;c[la+4>>2]=ca;if((ca|0)==0){Ob=0;break}c[la>>2]=0;c[la+8>>2]=-1;c[la+12>>2]=-1;c[ca>>2]=-2;c[ca+4>>2]=32;c[ca+8>>2]=-1;Ob=$}}while(0);c[q>>2]=(c[q>>2]|0)+1;Nb=Ob;break};case 120:{$=Y+2|0;c[q>>2]=$;la=a[$]|0;if(la<<24>>24==123){$=Y+3|0;c[q>>2]=$;ea=0;ca=$;while(1){$=a[ca]|0;if(($<<24>>24|0)==125|($<<24>>24|0)==0){Pb=ca;Qb=ea;break}if((GE($<<24>>24)|0)==0){_=9;W=297;break b}$=c[q>>2]|0;a[l+ea|0]=a[$]|0;xa=ea+1|0;ma=$+1|0;c[q>>2]=ma;if(xa>>>0>31>>>0){Pb=ma;Qb=xa;break}else{ea=xa;ca=ma}}c[q>>2]=Pb+1;a[l+Qb|0]=0;ca=Ja(B|0,0,16)|0;ea=c[w>>2]|0;ma=c[x>>2]|0;xa=aF(ea,0,0,1,32)|0;$=xa;do{if((xa|0)==0){Rb=0}else{P=aF(ea,0,0,1,20)|0;c[xa+4>>2]=P;if((P|0)==0){Rb=0;break}c[xa>>2]=0;c[xa+8>>2]=-1;c[xa+12>>2]=-1;c[P>>2]=ca;c[P+4>>2]=ca;c[P+8>>2]=ma;Rb=$}}while(0);c[x>>2]=(c[x>>2]|0)+1;Nb=Rb;break k}else{vF(C|0,0,3)|0;$=(GE(la<<24>>24)|0)==0;ma=c[q>>2]|0;if($){Sb=ma}else{a[C]=a[ma]|0;$=ma+1|0;c[q>>2]=$;Sb=$}if((GE(a[Sb]|0)|0)!=0){$=c[q>>2]|0;a[D]=a[$]|0;c[q>>2]=$+1}$=Ja(C|0,0,16)|0;ma=c[w>>2]|0;ca=c[x>>2]|0;xa=aF(ma,0,0,1,32)|0;ea=xa;do{if((xa|0)==0){Tb=0}else{P=aF(ma,0,0,1,20)|0;c[xa+4>>2]=P;if((P|0)==0){Tb=0;break}c[xa>>2]=0;c[xa+8>>2]=-1;c[xa+12>>2]=-1;c[P>>2]=$;c[P+4>>2]=$;c[P+8>>2]=ca;Tb=ea}}while(0);c[x>>2]=(c[x>>2]|0)+1;Nb=Tb;break k}break};case 98:{ea=c[w>>2]|0;ca=aF(ea,0,0,1,32)|0;$=ca;do{if((ca|0)==0){Ub=0}else{xa=aF(ea,0,0,1,20)|0;c[ca+4>>2]=xa;if((xa|0)==0){Ub=0;break}c[ca>>2]=0;c[ca+8>>2]=-1;c[ca+12>>2]=-1;c[xa>>2]=-2;c[xa+4>>2]=64;c[xa+8>>2]=-1;Ub=$}}while(0);c[q>>2]=(c[q>>2]|0)+1;Nb=Ub;break};case 66:{$=c[w>>2]|0;ca=aF($,0,0,1,32)|0;ea=ca;do{if((ca|0)==0){Vb=0}else{xa=aF($,0,0,1,20)|0;c[ca+4>>2]=xa;if((xa|0)==0){Vb=0;break}c[ca>>2]=0;c[ca+8>>2]=-1;c[ca+12>>2]=-1;c[xa>>2]=-2;c[xa+4>>2]=128;c[xa+8>>2]=-1;Vb=ea}}while(0);c[q>>2]=(c[q>>2]|0)+1;Nb=Vb;break};default:{if((zE(Na)|0)!=0){ea=(a[c[q>>2]|0]|0)-48|0;ca=c[w>>2]|0;$=c[x>>2]|0;xa=aF(ca,0,0,1,32)|0;if((xa|0)==0){_=12;W=297;break b}ma=aF(ca,0,0,1,20)|0;c[xa+4>>2]=ma;if((ma|0)==0){_=12;W=297;break b}c[xa>>2]=0;c[xa+8>>2]=-1;c[xa+12>>2]=-1;c[ma>>2]=-4;c[ma+4>>2]=ea;c[ma+8>>2]=$;c[x>>2]=(c[x>>2]|0)+1;$=c[A>>2]|0;c[A>>2]=(ea|0)<($|0)?$:ea;c[q>>2]=(c[q>>2]|0)+1;R=0;S=L;T=xa;break c}xa=c[w>>2]|0;ea=a[c[q>>2]|0]|0;$=c[x>>2]|0;ma=aF(xa,0,0,1,32)|0;ca=ma;do{if((ma|0)==0){Wb=0}else{la=aF(xa,0,0,1,20)|0;c[ma+4>>2]=la;if((la|0)==0){Wb=0;break}c[ma>>2]=0;c[ma+8>>2]=-1;c[ma+12>>2]=-1;c[la>>2]=ea;c[la+4>>2]=ea;c[la+8>>2]=$;Wb=ca}}while(0);c[x>>2]=(c[x>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+1;Nb=Wb}}}while(0);if((Nb|0)==0){_=12;W=297;break b}else{R=0;S=L;T=Nb;break c}break};case 41:{if((L|0)!=0){W=267}break};case 42:case 124:case 123:case 43:case 63:{W=267;break};case 0:{W=268;break};default:{}}}while(0);if((W|0)==74){W=0;Q=L+1|0;c[q>>2]=Eb+1;X=TE(m,c[y>>2]|0)|0;if((X|0)!=0){U=X;V=Q;W=6;break b}X=TE(m,2)|0;if((X|0)!=0){U=X;V=Q;W=6;break b}X=TE(m,0)|0;if((X|0)!=0){U=X;V=Q;W=6;break b}c[y>>2]=(c[y>>2]|0)+1;R=0;S=Q;T=K;break c}else if((W|0)==267){W=0;if((c[v>>2]&1|0)!=0){W=268}}if((W|0)==268){W=0;Q=c[w>>2]|0;X=aF(Q,0,0,1,32)|0;if((X|0)==0){_=12;W=297;break b}Na=aF(Q,0,0,1,20)|0;c[X+4>>2]=Na;if((Na|0)==0){_=12;W=297;break b}c[X>>2]=0;c[X+8>>2]=-1;c[X+12>>2]=-1;c[Na>>2]=-1;c[Na+4>>2]=-1;c[Na+8>>2]=-1;R=0;S=L;T=X;break c}X=KE(h,Y,-1)|0;if((X|0)<0){c[h>>2]=-1;Xb=1}else{Xb=X}do{if((c[v>>2]&2|0)==0){W=283}else{if((FE(c[h>>2]|0)|0)==0){if((BE(c[h>>2]|0)|0)==0){W=283;break}}X=c[w>>2]|0;Na=HE(c[h>>2]|0)|0;Q=HE(c[h>>2]|0)|0;da=c[x>>2]|0;fa=aF(X,0,0,1,32)|0;if((fa|0)==0){_=12;W=297;break b}ca=aF(X,0,0,1,20)|0;c[fa+4>>2]=ca;if((ca|0)==0){_=12;W=297;break b}c[fa>>2]=0;c[fa+8>>2]=-1;c[fa+12>>2]=-1;c[ca>>2]=Na;c[ca+4>>2]=Q;c[ca+8>>2]=da;da=c[w>>2]|0;ca=JE(c[h>>2]|0)|0;Q=JE(c[h>>2]|0)|0;Na=c[x>>2]|0;X=aF(da,0,0,1,32)|0;if((X|0)==0){_=12;W=297;break b}$=aF(da,0,0,1,20)|0;c[X+4>>2]=$;if(($|0)==0){_=12;W=297;break b}c[X>>2]=0;c[X+8>>2]=-1;c[X+12>>2]=-1;c[$>>2]=ca;c[$+4>>2]=Q;c[$+8>>2]=Na;Na=c[w>>2]|0;$=aF(Na,0,0,1,32)|0;if(($|0)==0){_=12;W=297;break b}Q=aF(Na,0,0,1,8)|0;Na=$+4|0;c[Na>>2]=Q;if((Q|0)==0){_=12;W=297;break b}c[$>>2]=3;c[$+8>>2]=-1;c[$+12>>2]=-1;c[Q>>2]=fa;c[(c[Na>>2]|0)+4>>2]=X;c[$+16>>2]=(c[X+16>>2]|0)+(c[fa+16>>2]|0);Yb=$}}while(0);if((W|0)==283){W=0;Y=c[w>>2]|0;$=c[h>>2]|0;fa=c[x>>2]|0;X=aF(Y,0,0,1,32)|0;if((X|0)==0){_=12;W=297;break b}Na=aF(Y,0,0,1,20)|0;c[X+4>>2]=Na;if((Na|0)==0){_=12;W=297;break b}c[X>>2]=0;c[X+8>>2]=-1;c[X+12>>2]=-1;c[Na>>2]=$;c[Na+4>>2]=$;c[Na+8>>2]=fa;Yb=X}c[x>>2]=(c[x>>2]|0)+1;c[q>>2]=(c[q>>2]|0)+Xb;R=0;S=L;T=Yb;break};case 3:{X=TE(m,5)|0;if((X|0)!=0){U=X;V=L;W=6;break b}R=TE(m,4)|0;S=L;T=K;break};case 0:{if((c[v>>2]&1|0)!=0){X=TE(m,7)|0;if((X|0)!=0){U=X;V=L;W=6;break b}}R=TE(m,3)|0;S=L;T=K;break};case 8:{X=M-2|0;c[n>>2]=X;fa=c[O+(X<<2)>>2]|0;X=c[w>>2]|0;Na=aF(X,0,0,1,32)|0;if((Na|0)==0){_=12;W=297;break b}$=aF(X,0,0,1,8)|0;X=Na+4|0;c[X>>2]=$;if(($|0)==0){_=12;W=297;break b}c[Na>>2]=3;c[Na+8>>2]=-1;c[Na+12>>2]=-1;c[$>>2]=fa;c[(c[X>>2]|0)+4>>2]=K;c[Na+16>>2]=(c[K+16>>2]|0)+(c[fa+16>>2]|0);R=0;S=L;T=Na;break};case 9:{Na=c[q>>2]|0;fa=a[Na]|0;switch(fa<<24>>24|0){case 43:case 63:{if((c[v>>2]&1|0)==0){R=0;S=L;T=K;break c}else{W=41}break};case 42:{W=41;break};case 92:{X=c[v>>2]|0;if((X&1|0)!=0){R=0;S=L;T=K;break c}$=Na+1|0;if((a[$]|0)!=123){R=0;S=L;T=K;break c}c[q>>2]=$;Zb=$;_b=X;break};case 123:{X=c[v>>2]|0;if((X&1|0)==0){R=0;S=L;T=K;break c}else{Zb=Na;_b=X}break};default:{R=0;S=L;T=K;break c}}if((W|0)==41){W=0;c[q>>2]=Na+1;Na=c[w>>2]|0;X=aF(Na,0,0,1,32)|0;if((X|0)==0){_=12;W=297;break b}$=aF(Na,0,0,1,16)|0;c[X+4>>2]=$;if(($|0)==0){_=12;W=297;break b}c[X>>2]=2;c[X+8>>2]=-1;c[X+12>>2]=-1;c[$>>2]=K;c[$+4>>2]=fa<<24>>24==43;c[$+8>>2]=fa<<24>>24==63?1:-1;fa=$+12|0;a[fa]=a[fa]&-2;c[X+16>>2]=c[K+16>>2];R=TE(m,9)|0;S=L;T=X;break c}X=Zb+1|0;c[q>>2]=X;fa=a[X]|0;if((fa-48&255)>>>0<10>>>0){$=fa<<24>>24;if(($-48|0)>>>0<10>>>0){$b=-1;ac=X;bc=$}else{_=10;W=297;break b}while(1){$=(($b|0)<0?-48:($b*10|0)-48|0)+bc|0;Na=ac+1|0;Y=a[Na]|0;Q=Y<<24>>24;if((Q-48|0)>>>0<10>>>0){$b=$;ac=Na;bc=Q}else{cc=$;dc=Na;ec=Y;break}}}else{cc=-1;dc=X;ec=fa}do{if(ec<<24>>24==44){Y=dc+1|0;Na=a[Y]|0;$=Na<<24>>24;if(($-48|0)>>>0<10>>>0){fc=-1;gc=Y;hc=$}else{ic=Y;jc=-1;kc=Na;break}while(1){Na=((fc|0)<0?-48:(fc*10|0)-48|0)+hc|0;Y=gc+1|0;$=a[Y]|0;Q=$<<24>>24;if((Q-48|0)>>>0<10>>>0){fc=Na;gc=Y;hc=Q}else{lc=Na;mc=Y;nc=$;W=54;break}}}else{lc=cc;mc=dc;nc=ec;W=54}}while(0);do{if((W|0)==54){W=0;if((lc|0)<=-1){ic=mc;jc=lc;kc=nc;break}if((cc|0)>(lc|0)|(lc|0)>255){_=10;W=297;break b}else{ic=mc;jc=lc;kc=nc}}}while(0);if(kc<<24>>24==0){_=9;W=297;break b}if((ic|0)==(X|0)){_=10;W=297;break b}if((_b&1|0)==0){if(kc<<24>>24!=92){_=10;W=297;break b}if((a[ic+1|0]|0)!=125){_=10;W=297;break b}oc=ic+2|0}else{if(kc<<24>>24!=125){_=10;W=297;break b}oc=ic+1|0}if((jc|cc|0)==0){fa=c[w>>2]|0;$=aF(fa,0,0,1,32)|0;if(($|0)==0){_=12;W=297;break b}Y=aF(fa,0,0,1,20)|0;c[$+4>>2]=Y;if((Y|0)==0){_=12;W=297;break b}c[$>>2]=0;c[$+8>>2]=-1;c[$+12>>2]=-1;c[Y>>2]=-1;c[Y+4>>2]=-1;c[Y+8>>2]=-1;pc=$}else{$=(jc&cc|0)<0;Y=c[w>>2]|0;fa=aF(Y,0,0,1,32)|0;if((fa|0)==0){_=12;W=297;break b}Na=aF(Y,0,0,1,16)|0;c[fa+4>>2]=Na;if((Na|0)==0){_=12;W=297;break b}c[fa>>2]=2;c[fa+8>>2]=-1;c[fa+12>>2]=-1;c[Na>>2]=K;c[Na+4>>2]=$?1:cc;c[Na+8>>2]=$?1:jc;$=Na+12|0;a[$]=a[$]&-2;c[fa+16>>2]=c[K+16>>2];pc=fa}c[q>>2]=oc;R=TE(m,9)|0;S=L;T=pc;break};case 6:{fa=M-2|0;c[n>>2]=fa;$=c[O+(fa<<2)>>2]|0;fa=c[w>>2]|0;Na=aF(fa,0,0,1,32)|0;if((Na|0)==0){_=12;W=297;break b}Y=aF(fa,0,0,1,8)|0;fa=Na+4|0;c[fa>>2]=Y;if((Y|0)==0){_=12;W=297;break b}c[Na>>2]=1;c[Na+8>>2]=-1;c[Na+12>>2]=-1;c[Y>>2]=$;c[(c[fa>>2]|0)+4>>2]=K;c[Na+16>>2]=(c[K+16>>2]|0)+(c[$+16>>2]|0);R=0;S=L;T=Na;break};case 2:{Na=M-2|0;c[n>>2]=Na;$=c[O+(Na<<2)>>2]|0;if((c[K+12>>2]|0)>-1){Na=c[w>>2]|0;fa=aF(Na,0,0,1,32)|0;if((fa|0)==0){_=12;W=297;break b}Y=aF(Na,0,0,1,20)|0;c[fa+4>>2]=Y;if((Y|0)==0){_=12;W=297;break b}c[fa>>2]=0;c[fa+8>>2]=-1;c[fa+12>>2]=-1;c[Y>>2]=-1;c[Y+4>>2]=-1;c[Y+8>>2]=-1;Y=c[w>>2]|0;Na=aF(Y,0,0,1,32)|0;if((Na|0)==0){_=12;W=297;break b}Q=aF(Y,0,0,1,8)|0;Y=Na+4|0;c[Y>>2]=Q;if((Q|0)==0){_=12;W=297;break b}c[Na>>2]=1;c[Na+8>>2]=-1;c[Na+12>>2]=-1;c[Q>>2]=fa;c[(c[Y>>2]|0)+4>>2]=K;Y=K+16|0;Q=Na+16|0;c[Q>>2]=(c[Y>>2]|0)+(c[fa+16>>2]|0);c[Q>>2]=c[Y>>2];qc=Na}else{qc=K}c[qc+12>>2]=$;$=qc+16|0;c[$>>2]=(c[$>>2]|0)+1;R=0;S=L;T=qc;break};case 10:{$=M-2|0;c[n>>2]=$;c[v>>2]=c[O+($<<2)>>2];R=0;S=L;T=K;break};default:{R=0;S=L;T=K}}}while(0);O=c[n>>2]|0;N=(R|0)==0;if((O|0)>(o|0)&N){K=T;L=S;M=O}else{rc=T;sc=S;tc=R;uc=N;break a}}if((W|0)==6){rc=K;sc=V;tc=U;uc=(U|0)==0;break}else if((W|0)==297){i=d;return _|0}}else{rc=0;sc=0;tc=p;uc=t}}while(0);t=(sc|0)>0;if(t|uc^1){_=t?8:tc;i=d;return _|0}c[b+8>>2]=rc;_=0;i=d;return _|0}function NE(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0;g=d+12|0;h=c[g>>2]|0;i=(b|0)==0|(f|0)==0;if(!i){c[f+48>>2]=0;c[c[f+36>>2]>>2]=-1}j=c[f+28>>2]|0;k=dF((j<<3)+8|0)|0;l=k;if((k|0)==0){m=12;return m|0}c[l>>2]=-1;n=dF((j<<2)+4|0)|0;o=n;if((n|0)==0){eF(k);m=12;return m|0}c[o>>2]=-1;p=0;while(1){if(p>>>0>j>>>0){break}else{p=p+1|0}}TE(d,e)|0;e=TE(d,0)|0;p=c[g>>2]|0;a:do{if((p|0)>(h|0)&(e|0)==0){j=d+16|0;q=f+32|0;r=f+16|0;s=f+36|0;t=0;u=-1;v=1;w=0;x=0;y=0;z=l;A=p;while(1){B=A-1|0;c[g>>2]=B;C=c[j>>2]|0;b:do{switch(c[C+(B<<2)>>2]|0){case 1:{D=A-2|0;c[g>>2]=D;E=c[C+(D<<2)>>2]|0;if(i){D=c[(c[c[E+4>>2]>>2]|0)+20>>2]|0;F=A-3|0;c[g>>2]=F;c[E+20>>2]=(c[C+(F<<2)>>2]|0)+D;G=0;H=z;I=y;J=x;K=w;L=v;M=-1;N=t;break b}else{D=A-3|0;c[g>>2]=D;F=c[C+(D<<2)>>2]|0;D=A-4|0;c[g>>2]=D;E=(F|0)==0;G=0;H=z;I=y;J=x;K=w;L=v;M=E?u:c[C+(D<<2)>>2]|0;N=E&1;break b}break};case 6:{E=A-2|0;c[g>>2]=E;D=c[C+(E<<2)>>2]|0;E=0;do{O=z+(E<<2)|0;E=E+1|0}while((c[O>>2]|0)>-1);c[O>>2]=D<<1|1;c[z+(E<<2)>>2]=-1;F=0;while(1){if((c[o+(F<<2)>>2]|0)>-1){F=F+1|0}else{break}}c[o+(F-1<<2)>>2]=-1;G=0;H=z;I=y;J=x;K=w;L=v;M=u;N=t;break};case 0:{E=A-2|0;c[g>>2]=E;D=c[C+(E<<2)>>2]|0;E=D;P=D+12|0;Q=c[P>>2]|0;if((Q|0)>-1){R=0;do{S=z+(R<<2)|0;R=R+1|0}while((c[S>>2]|0)>-1);c[S>>2]=Q<<1;c[z+(R<<2)>>2]=-1;do{if(!i){F=0;while(1){if((c[o+(F<<2)>>2]|0)>-1){F=F+1|0}else{break}}c[(c[r>>2]|0)+(Q*12|0)+8>>2]=0;if((F|0)<=0){break}T=dF((F<<2)+4|0)|0;U=T;if((T|0)==0){V=u;W=w;X=x;Y=y;Z=z;_=12;break a}c[(c[r>>2]|0)+(Q*12|0)+8>>2]=U;T=c[o>>2]|0;if((T|0)>-1){$=0;aa=T;T=U;while(1){c[T>>2]=aa;ba=$+1|0;ca=c[o+(ba<<2)>>2]|0;da=U+(ba<<2)|0;if((ca|0)>-1){$=ba;aa=ca;T=da}else{ea=da;break}}}else{ea=U}c[ea>>2]=-1}}while(0);Q=TE(d,c[P>>2]|0)|0;if((Q|0)!=0){V=u;W=w;X=x;Y=y;Z=z;_=Q;break a}Q=TE(d,6)|0;if((Q|0)!=0){V=u;W=w;X=x;Y=y;Z=z;_=Q;break a}}Q=c[D>>2]|0;do{if((Q|0)==3){R=c[D+4>>2]|0;T=c[R>>2]|0;aa=c[R+4>>2]|0;R=(c[z>>2]|0)>-1;$=v+1|0;F=TE(d,R?$:v)|0;if((F|0)!=0){fa=F;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}F=TE(d,R?v:w)|0;if((F|0)!=0){fa=F;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}F=TE(d,z)|0;if((F|0)!=0){fa=F;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}F=TE(d,(c[z>>2]|0)>>>31^1)|0;if((F|0)!=0){fa=F;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}F=TE(d,D)|0;if((F|0)!=0){fa=F;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}F=aa;aa=TE(d,F)|0;if((aa|0)!=0){fa=aa;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}aa=T;T=TE(d,aa)|0;if((T|0)!=0){fa=T;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}T=TE(d,3)|0;if((T|0)!=0){fa=T;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}T=TE(d,F)|0;if((T|0)!=0){fa=T;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}T=TE(d,0)|0;if((T|0)!=0){fa=T;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}T=TE(d,2)|0;if((T|0)!=0){fa=T;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}T=TE(d,aa)|0;if((T|0)!=0){fa=T;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}T=TE(d,0)|0;if((T|0)!=0){fa=T;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}if((c[z>>2]|0)>-1){if(i){ma=0;na=x;oa=u}else{T=VE(b,E,w)|0;c[(c[q>>2]|0)+(w<<2)>>2]=t;if((u|0)>-1){aa=c[s>>2]|0;F=0;while(1){pa=aa+(F<<2)|0;qa=F+1|0;if((c[pa>>2]|0)>-1){F=qa}else{break}}c[pa>>2]=w;c[(c[s>>2]|0)+(qa<<2)>>2]=u;c[(c[s>>2]|0)+(F+2<<2)>>2]=-1;ra=x+1|0;sa=-1}else{ra=x;sa=u}aa=c[z>>2]|0;if((aa|0)>-1){U=0;R=aa;do{aa=(R|0)/2|0;da=c[r>>2]|0;if((R&1|0)==0){c[da+(aa*12|0)>>2]=w}else{c[da+(aa*12|0)+4>>2]=w}U=U+1|0;R=c[z+(U<<2)>>2]|0;}while((R|0)>-1)}c[z>>2]=-1;ma=T;na=ra;oa=sa}c[z>>2]=-1;ta=ma;ua=y+1|0;va=na;wa=v;xa=$;ya=oa}else{ta=0;ua=y;va=x;wa=w;xa=v;ya=u}if((c[D+16>>2]|0)<=0){fa=ta;ga=ua;ha=va;ia=wa;ja=xa;ka=ya;la=t;break}fa=ta;ga=ua;ha=va;ia=xa+1|0;ja=xa+2|0;ka=ya;la=t}else if((Q|0)==2){R=c[D+4>>2]|0;if(i){if((c[z>>2]|0)>-1){za=1}else{za=a[R+12|0]&1}U=TE(d,za)|0;if((U|0)!=0){fa=U;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}}else{U=TE(d,w)|0;if((U|0)!=0){fa=U;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}U=TE(d,a[R+12|0]&1)|0;if((U|0)!=0){fa=U;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}}U=TE(d,D)|0;if((U|0)!=0){fa=U;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}U=TE(d,1)|0;if((U|0)!=0){fa=U;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}U=TE(d,c[R>>2]|0)|0;if((U|0)!=0){fa=U;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}U=TE(d,0)|0;if((U|0)!=0){fa=U;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}if((c[z>>2]|0)<=-1){if((a[R+12|0]&1)==0){fa=0;ga=y;ha=x;ia=w;ja=v;ka=u;la=0;break}}if(i){Aa=0;Ba=x;Ca=u}else{U=VE(b,E,w)|0;c[(c[q>>2]|0)+(w<<2)>>2]=(a[R+12|0]&1)==0?t:1;if((u|0)>-1){R=c[s>>2]|0;F=0;while(1){Da=R+(F<<2)|0;Ea=F+1|0;if((c[Da>>2]|0)>-1){F=Ea}else{break}}c[Da>>2]=w;c[(c[s>>2]|0)+(Ea<<2)>>2]=u;c[(c[s>>2]|0)+(F+2<<2)>>2]=-1;Fa=x+1|0;Ga=-1}else{Fa=x;Ga=u}R=c[z>>2]|0;if((R|0)>-1){$=0;T=R;do{R=(T|0)/2|0;aa=c[r>>2]|0;if((T&1|0)==0){c[aa+(R*12|0)>>2]=w}else{c[aa+(R*12|0)+4>>2]=w}$=$+1|0;T=c[z+($<<2)>>2]|0;}while((T|0)>-1)}c[z>>2]=-1;Aa=U;Ba=Fa;Ca=Ga}c[z>>2]=-1;fa=Aa;ga=y+1|0;ha=Ba;ia=v;ja=v+1|0;ka=Ca;la=0}else if((Q|0)==0){T=c[c[D+4>>2]>>2]|0;if(!((T|0)>-1|(T|0)==-4)){fa=0;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}if((c[z>>2]|0)<=-1){fa=0;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}if(i){c[D+20>>2]=1;Ha=0;Ia=x;Ja=u}else{T=VE(b,E,w)|0;c[(c[q>>2]|0)+(w<<2)>>2]=t;if((u|0)>-1){$=c[s>>2]|0;F=0;while(1){Ka=$+(F<<2)|0;La=F+1|0;if((c[Ka>>2]|0)>-1){F=La}else{break}}c[Ka>>2]=w;c[(c[s>>2]|0)+(La<<2)>>2]=u;c[(c[s>>2]|0)+(F+2<<2)>>2]=-1;Ma=x+1|0;Na=-1}else{Ma=x;Na=u}$=c[z>>2]|0;if(($|0)>-1){U=0;R=$;do{$=(R|0)/2|0;aa=c[r>>2]|0;if((R&1|0)==0){c[aa+($*12|0)>>2]=w}else{c[aa+($*12|0)+4>>2]=w}U=U+1|0;R=c[z+(U<<2)>>2]|0;}while((R|0)>-1)}c[z>>2]=-1;Ha=T;Ia=Ma;Ja=Na}c[z>>2]=-1;fa=Ha;ga=y+1|0;ha=Ia;ia=v;ja=v+1|0;ka=Ja;la=t}else if((Q|0)==1){R=c[D+4>>2]|0;U=c[R>>2]|0;F=c[R+4>>2]|0;R=TE(d,D)|0;if((R|0)!=0){fa=R;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}R=TE(d,5)|0;if((R|0)!=0){fa=R;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}R=TE(d,F)|0;if((R|0)!=0){fa=R;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}R=TE(d,0)|0;if((R|0)!=0){fa=R;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}R=U+20|0;$=TE(d,(c[R>>2]|0)+v|0)|0;if(($|0)!=0){fa=$;ga=y;ha=x;ia=w;ja=v;ka=u;la=t;break}if((c[R>>2]|0)>0){R=(c[F+20>>2]|0)>0;Oa=(R&1)+v|0;Pa=R?v:-1}else{Oa=v;Pa=-1}R=TE(d,Pa)|0;if((R|0)!=0){fa=R;ga=y;ha=x;ia=w;ja=Oa;ka=u;la=t;break}R=TE(d,4)|0;if((R|0)!=0){fa=R;ga=y;ha=x;ia=w;ja=Oa;ka=u;la=t;break}R=TE(d,U)|0;if((R|0)!=0){fa=R;ga=y;ha=x;ia=w;ja=Oa;ka=u;la=t;break}fa=TE(d,0)|0;ga=y;ha=x;ia=w;ja=Oa;ka=u;la=t}else{fa=0;ga=y;ha=x;ia=w;ja=v;ka=u;la=t}}while(0);D=c[P>>2]|0;if((D|0)>-1){Qa=0}else{G=fa;H=z;I=ga;J=ha;K=ia;L=ja;M=ka;N=la;break b}do{Ra=o+(Qa<<2)|0;Qa=Qa+1|0}while((c[Ra>>2]|0)>-1);c[Ra>>2]=D;c[o+(Qa<<2)>>2]=-1;G=fa;H=z;I=ga;J=ha;K=ia;L=ja;M=ka;N=la;break};case 4:{P=A-2|0;c[g>>2]=P;Q=c[C+(P<<2)>>2]|0;P=A-3|0;c[g>>2]=P;G=0;H=z;I=y;J=x;K=(Q|0)>-1?Q:w;L=c[C+(P<<2)>>2]|0;M=u;N=t;break};case 5:{P=A-2|0;c[g>>2]=P;Q=c[C+(P<<2)>>2]|0;if(!i){G=0;H=z;I=y;J=x;K=w;L=v;M=u;N=t;break b}P=c[Q+4>>2]|0;c[Q+20>>2]=(c[(c[P+4>>2]|0)+20>>2]|0)+(c[(c[P>>2]|0)+20>>2]|0);G=0;H=z;I=y;J=x;K=w;L=v;M=u;N=t;break};case 2:{P=z;while(1){if((c[P>>2]|0)>-1){P=P+4|0}else{G=0;H=P;I=y;J=x;K=w;L=v;M=u;N=t;break}}break};case 3:{P=A-2|0;c[g>>2]=P;D=c[C+(P<<2)>>2]|0;P=A-3|0;c[g>>2]=P;Q=c[C+(P<<2)>>2]|0;P=A-4|0;c[g>>2]=P;E=c[C+(P<<2)>>2]|0;P=A-5|0;c[g>>2]=P;if(i){R=c[E+4>>2]|0;U=E+16|0;c[E+20>>2]=(c[(c[R>>2]|0)+20>>2]|0)+(c[C+(P<<2)>>2]|0)+(c[(c[R+4>>2]|0)+20>>2]|0)+((c[U>>2]|0)>0?2:0);Sa=c[g>>2]|0;Ta=c[j>>2]|0;Ua=U}else{Sa=P;Ta=C;Ua=E+16|0}E=Sa-1|0;c[g>>2]=E;P=c[Ta+(E<<2)>>2]|0;E=Sa-2|0;c[g>>2]=E;U=c[Ta+(E<<2)>>2]|0;E=Sa-3|0;c[g>>2]=E;R=c[Ta+(E<<2)>>2]|0;if((c[Ua>>2]|0)<=0){G=0;H=P;I=y;J=x;K=w;L=v;M=u;N=1;break b}if(i){Va=0}else{WE(b,D,U)|0;c[(c[q>>2]|0)+(U<<2)>>2]=1;U=WE(b,Q,R)|0;c[(c[q>>2]|0)+(R<<2)>>2]=1;Va=U}G=Va;H=P;I=y+2|0;J=x;K=w;L=v;M=u;N=1;break};default:{G=0;H=z;I=y;J=x;K=w;L=v;M=u;N=t}}}while(0);C=c[g>>2]|0;if((C|0)>(h|0)&(G|0)==0){t=N;u=M;v=L;w=K;x=J;y=I;z=H;A=C}else{V=M;W=K;X=J;Y=I;Z=H;_=G;break a}}}else{V=-1;W=0;X=0;Y=0;Z=l;_=e}}while(0);do{if(i){Wa=X}else{e=c[Z>>2]|0;if((e|0)>-1){l=f+16|0;G=0;H=e;do{e=(H|0)/2|0;I=c[l>>2]|0;if((H&1|0)==0){c[I+(e*12|0)>>2]=W}else{c[I+(e*12|0)+4>>2]=W}G=G+1|0;H=c[Z+(G<<2)>>2]|0;}while((H|0)>-1)}c[Z>>2]=-1;if((V|0)<=-1){Wa=X;break}H=f+36|0;G=c[H>>2]|0;l=0;while(1){Xa=G+(l<<2)|0;Ya=l+1|0;if((c[Xa>>2]|0)>-1){l=Ya}else{break}}c[Xa>>2]=W;c[(c[H>>2]|0)+(Ya<<2)>>2]=V;c[(c[H>>2]|0)+(l+2<<2)>>2]=-1;Wa=X+1|0}}while(0);c[f+48>>2]=Y;c[f+40>>2]=Y;c[f+44>>2]=Wa;eF(k);eF(n);m=_;return m|0}function OE(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a;a:while(1){a=c[f>>2]|0;do{if((a|0)==1){g=c[f+4>>2]|0;h=g;i=g+4|0;g=QE(c[(c[h>>2]|0)+28>>2]|0,c[(c[i>>2]|0)+24>>2]|0,b,d,e)|0;if((g|0)!=0){j=g;k=10;break a}g=OE(c[h>>2]|0,b,d,e)|0;if((g|0)==0){l=i}else{j=g;k=10;break a}}else if((a|0)==3){g=c[f+4>>2]|0;i=OE(c[g>>2]|0,b,d,e)|0;if((i|0)!=0){j=i;k=10;break a}l=g+4|0}else if((a|0)==2){g=c[f+4>>2]|0;i=g;if((c[g+8>>2]|0)!=-1){l=i;break}g=c[i>>2]|0;h=QE(c[g+28>>2]|0,c[g+24>>2]|0,b,d,e)|0;if((h|0)==0){l=i}else{j=h;k=10;break a}}else{j=0;k=10;break a}}while(0);f=c[l>>2]|0}if((k|0)==10){return j|0}return 0}function PE(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;b=c[a+4>>2]|0;if((b|0)==0){return}a=b+4|0;d=b;e=c[d>>2]|0;if((c[a>>2]|0)==0){f=e}else{g=0;h=e;while(1){do{if((c[h+(g<<5)+8>>2]|0)==0){i=h}else{e=c[h+(g<<5)+16>>2]|0;if((e|0)==0){j=h}else{eF(e);j=c[d>>2]|0}e=c[j+(g<<5)+28>>2]|0;if((e|0)==0){i=j;break}eF(e);i=c[d>>2]|0}}while(0);e=g+1|0;if(e>>>0<(c[a>>2]|0)>>>0){g=e;h=i}else{f=i;break}}}if((f|0)!=0){eF(f)}f=b+8|0;i=c[f>>2]|0;if((i|0)!=0){if((c[i+8>>2]|0)==0){k=i}else{h=i;while(1){i=c[h+16>>2]|0;if((i|0)!=0){eF(i)}if((c[h+40>>2]|0)==0){break}else{h=h+32|0}}k=c[f>>2]|0}eF(k)}k=b+16|0;f=c[k>>2]|0;if((f|0)!=0){h=b+28|0;i=c[h>>2]|0;if((i|0)==0){l=f}else{g=0;a=f;f=i;while(1){i=c[a+(g*12|0)+8>>2]|0;if((i|0)==0){m=f;n=a}else{eF(i);m=c[h>>2]|0;n=c[k>>2]|0}i=g+1|0;if(i>>>0<m>>>0){g=i;a=n;f=m}else{l=n;break}}}eF(l)}l=c[b+32>>2]|0;if((l|0)!=0){eF(l)}l=c[b+20>>2]|0;if((l|0)!=0){eF(l)}l=c[b+36>>2]|0;if((l|0)!=0){eF(l)}eF(b);return}function QE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;g=a|0;a=c[g>>2]|0;h=(a|0)>-1;if((d|0)==0){if(!h){i=0;return i|0}j=b|0;k=g;l=a;while(1){a:do{if((c[j>>2]|0)>-1){a=b;m=l;while(1){n=e+(m<<2)|0;c[n>>2]=(c[n>>2]|0)+1;n=a+32|0;if((c[n>>2]|0)<=-1){break a}a=n;m=c[k>>2]|0}}}while(0);m=k+32|0;a=c[m>>2]|0;if((a|0)>-1){k=m;l=a}else{i=0;break}}return i|0}if(!h){i=0;return i|0}h=b|0;l=g;b:while(1){g=c[h>>2]|0;c:do{if((g|0)>-1){k=l+4|0;e=l+8|0;j=l+16|0;a=l+20|0;m=l+24|0;n=l+28|0;o=l+12|0;p=b;q=-1;r=h;s=g;while(1){t=p;u=r;v=s;while(1){w=t+32|0;if((v|0)!=(q|0)){break}x=w|0;y=c[x>>2]|0;if((y|0)>-1){t=w;u=x;v=y}else{break c}}y=d+(c[f+(c[l>>2]<<2)>>2]<<5)|0;while(1){z=y+8|0;if((c[z>>2]|0)==0){break}else{y=y+32|0}}c[y+40>>2]=0;c[y>>2]=c[k>>2];c[y+4>>2]=c[e>>2];c[z>>2]=d+(c[f+(c[u>>2]<<2)>>2]<<5);c[y+12>>2]=c[u>>2];x=c[t+16>>2]|c[j>>2]|((c[a>>2]|0)!=0?4:0)|((c[m>>2]|0)!=0?8:0);A=y+20|0;c[A>>2]=x;B=c[n>>2]|0;if((B|0)>-1){c[y+24>>2]=B;c[A>>2]=x|256}else{c[y+24>>2]=c[a>>2]}x=c[m>>2]|0;if((x|0)==0){c[y+28>>2]=0}else{A=0;while(1){C=A+1|0;if((c[x+(A<<2)>>2]|0)==0){break}else{A=C}}A=dF(C<<2)|0;x=A;u=y+28|0;c[u>>2]=x;if((A|0)==0){i=12;D=50;break b}A=c[c[m>>2]>>2]|0;if((A|0)==0){E=x}else{B=0;F=A;A=x;while(1){c[A>>2]=F;x=B+1|0;G=c[(c[m>>2]|0)+(x<<2)>>2]|0;H=(c[u>>2]|0)+(x<<2)|0;if((G|0)==0){E=H;break}else{B=x;F=G;A=H}}}c[E>>2]=0}A=c[o>>2]|0;if((A|0)==0){I=0}else{F=0;while(1){if((c[A+(F<<2)>>2]|0)>-1){F=F+1|0}else{I=F;break}}}F=t+12|0;A=c[F>>2]|0;if((A|0)==0){J=0}else{B=0;while(1){if((c[A+(B<<2)>>2]|0)>-1){B=B+1|0}else{J=B;break}}}B=y+16|0;A=c[B>>2]|0;if((A|0)!=0){eF(A)}c[B>>2]=0;A=J+I|0;if((A|0)>0){t=dF((A<<2)+4|0)|0;A=t;c[B>>2]=A;if((t|0)==0){i=12;D=50;break b}t=c[o>>2]|0;d:do{if((t|0)==0){K=0}else{u=c[t>>2]|0;if((u|0)>-1){L=0;M=u;N=A}else{K=0;break}while(1){c[N+(L<<2)>>2]=M;u=L+1|0;H=c[(c[o>>2]|0)+(u<<2)>>2]|0;if((H|0)<=-1){K=u;break d}L=u;M=H;N=c[B>>2]|0}}}while(0);A=c[F>>2]|0;do{if((A|0)==0){O=K}else{t=c[A>>2]|0;if((t|0)<=-1){O=K;break}y=(K|0)>0;H=0;u=K;G=A;x=t;while(1){t=c[B>>2]|0;e:do{if(y){P=0;while(1){Q=P+1|0;if((c[t+(P<<2)>>2]|0)==(x|0)){R=u;S=G;break e}if((Q|0)<(K|0)){P=Q}else{D=41;break}}}else{D=41}}while(0);if((D|0)==41){D=0;c[t+(u<<2)>>2]=x;R=u+1|0;S=c[F>>2]|0}P=H+1|0;Q=c[S+(P<<2)>>2]|0;if((Q|0)>-1){H=P;u=R;G=S;x=Q}else{O=R;break}}}}while(0);c[(c[B>>2]|0)+(O<<2)>>2]=-1}F=w|0;A=c[F>>2]|0;if((A|0)>-1){p=w;q=v;r=F;s=A}else{break}}}}while(0);g=l+32|0;if((c[g>>2]|0)>-1){l=g}else{i=0;D=50;break}}if((D|0)==50){return i|0}return 0}function RE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;g=(e|0)==0;a:do{if(g){h=0}else{i=0;while(1){if((c[e+(i<<2)>>2]|0)<=-1){h=i;break a}i=i+1|0}}}while(0);i=0;while(1){if((c[b+(i<<5)>>2]|0)>-1){i=i+1|0}else{j=0;break}}while(1){if((c[d+(j<<5)>>2]|0)>-1){j=j+1|0}else{break}}k=aF(a,0,0,1,(j+i<<5)+32|0)|0;i=k;if((k|0)==0){l=0;return l|0}k=c[b>>2]|0;b:do{if((k|0)>-1){j=(h|0)>0;m=0;n=k;while(1){c[i+(m<<5)>>2]=n;c[i+(m<<5)+4>>2]=c[b+(m<<5)+4>>2];c[i+(m<<5)+8>>2]=c[b+(m<<5)+8>>2];c[i+(m<<5)+16>>2]=c[b+(m<<5)+16>>2]|f;c[i+(m<<5)+20>>2]=c[b+(m<<5)+20>>2];c[i+(m<<5)+24>>2]=c[b+(m<<5)+24>>2];c[i+(m<<5)+28>>2]=c[b+(m<<5)+28>>2];o=b+(m<<5)+12|0;p=c[o>>2]|0;q=(p|0)==0;if(q&g){c[i+(m<<5)+12>>2]=0}else{c:do{if(q){r=0}else{s=0;while(1){if((c[p+(s<<2)>>2]|0)<=-1){r=s;break c}s=s+1|0}}}while(0);p=aF(a,0,0,0,(r+h<<2)+4|0)|0;q=p;if((p|0)==0){l=0;break}if((r|0)>0){p=0;while(1){c[q+(p<<2)>>2]=c[(c[o>>2]|0)+(p<<2)>>2];s=p+1|0;if((s|0)<(r|0)){p=s}else{t=r;break}}}else{t=0}if(j){p=0;while(1){c[q+(p+t<<2)>>2]=c[e+(p<<2)>>2];o=p+1|0;if((o|0)<(h|0)){p=o}else{u=h;break}}}else{u=0}c[q+(u+t<<2)>>2]=-1;c[i+(m<<5)+12>>2]=q}p=m+1|0;o=c[b+(p<<5)>>2]|0;if((o|0)>-1){m=p;n=o}else{v=p;break b}}return l|0}else{v=0}}while(0);b=c[d>>2]|0;t=i+(v<<5)|0;d:do{if((b|0)>-1){u=0;h=b;e=v;r=t;while(1){c[r>>2]=h;c[i+(e<<5)+4>>2]=c[d+(u<<5)+4>>2];c[i+(e<<5)+8>>2]=c[d+(u<<5)+8>>2];c[i+(e<<5)+16>>2]=c[d+(u<<5)+16>>2];c[i+(e<<5)+20>>2]=c[d+(u<<5)+20>>2];c[i+(e<<5)+24>>2]=c[d+(u<<5)+24>>2];c[i+(e<<5)+28>>2]=c[d+(u<<5)+28>>2];g=d+(u<<5)+12|0;f=c[g>>2]|0;if((f|0)==0){c[i+(e<<5)+12>>2]=0}else{k=0;while(1){if((c[f+(k<<2)>>2]|0)>-1){k=k+1|0}else{break}}f=aF(a,0,0,0,(k<<2)+4|0)|0;q=f;if((f|0)==0){l=0;break}if((k|0)>0){f=0;while(1){c[q+(f<<2)>>2]=c[(c[g>>2]|0)+(f<<2)>>2];n=f+1|0;if((n|0)<(k|0)){f=n}else{w=k;break}}}else{w=0}c[q+(w<<2)>>2]=-1;c[i+(e<<5)+12>>2]=q}k=u+1|0;f=c[d+(k<<5)>>2]|0;g=k+v|0;n=i+(g<<5)|0;if((f|0)>-1){u=k;h=f;e=g;r=n}else{x=n;break d}}return l|0}else{x=t}}while(0);c[x>>2]=-1;l=i;return l|0}function SE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;g=a+12|0;h=c[g>>2]|0;i=(f|0)!=0;if(i){c[f>>2]=0}j=TE(a,b)|0;if((j|0)!=0){k=j;return k|0}j=a+16|0;b=(d|0)==0;l=(e|0)==0;a:while(1){m=c[g>>2]|0;if((m|0)<=(h|0)){k=0;n=28;break}o=m-1|0;c[g>>2]=o;m=c[(c[j>>2]|0)+(o<<2)>>2]|0;o=c[m>>2]|0;do{if((o|0)==1){p=c[m+4>>2]|0;q=TE(a,c[p>>2]|0)|0;if((q|0)!=0){k=q;n=28;break a}r=TE(a,c[p+4>>2]|0)|0}else if((o|0)==3){p=c[m+4>>2]|0;q=c[p>>2]|0;if((c[q+8>>2]|0)!=0){r=TE(a,q)|0;break}q=c[p+4>>2]|0;if((c[q+8>>2]|0)==0){continue a}r=TE(a,q)|0}else if((o|0)==0){q=c[m+4>>2]|0;p=c[q>>2]|0;if((p|0)==(-2|0)){if(l){continue a}c[e>>2]=c[e>>2]|c[q+4>>2];continue a}else if((p|0)!=(-3|0)){continue a}p=c[q+4>>2]|0;if((p|0)<=-1){continue a}b:do{if(!b){q=c[d>>2]|0;c:do{if((q|0)>-1){s=0;t=d;u=q;while(1){v=s+1|0;if((u|0)==(p|0)){break}w=d+(v<<2)|0;x=c[w>>2]|0;if((x|0)>-1){s=v;t=w;u=x}else{y=v;z=w;break c}}if((p|0)<0){y=s;z=t}else{break b}}else{y=0;z=d}}while(0);c[z>>2]=p;c[d+(y+1<<2)>>2]=-1}}while(0);if(!i){continue a}c[f>>2]=(c[f>>2]|0)+1;continue a}else if((o|0)==2){p=c[c[m+4>>2]>>2]|0;if((c[p+8>>2]|0)==0){continue a}r=TE(a,p)|0}else{continue a}}while(0);if((r|0)!=0){k=r;n=28;break}}if((n|0)==28){return k|0}return 0}function TE(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=a+12|0;e=c[d>>2]|0;f=a|0;g=c[f>>2]|0;if((e|0)<(g|0)){c[(c[a+16>>2]|0)+(e<<2)>>2]=b;c[d>>2]=(c[d>>2]|0)+1;h=0;return h|0}d=c[a+4>>2]|0;if((g|0)>=(d|0)){h=12;return h|0}e=(c[a+8>>2]|0)+g|0;g=(e|0)>(d|0)?d:e;e=a+16|0;d=gF(c[e>>2]|0,g<<2)|0;if((d|0)==0){h=12;return h|0}else{c[f>>2]=g;c[e>>2]=d;TE(a,b)|0;return 0}return 0}function UE(b,d,e,f,g,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0;k=d+12|0;l=c[k>>2]|0;TE(d,e)|0;e=TE(d,0)|0;a:do{if((e|0)==0){m=d+16|0;n=(f&1|0)==0;o=(f&2|0)==0;p=i;q=1;r=0;b:while(1){s=c[k>>2]|0;if((s|0)<=(l|0)){t=r;u=0;break a}v=s-1|0;c[k>>2]=v;w=c[m>>2]|0;x=c[w+(v<<2)>>2]|0;if((x|0)==1){v=s-2|0;c[k>>2]=v;p=c[w+(v<<2)>>2]|0;q=q;r=r;continue}else if((x|0)!=0){p=p;q=q;r=r;continue}x=s-2|0;c[k>>2]=x;s=c[w+(x<<2)>>2]|0;x=c[s>>2]|0;do{if((x|0)==0){w=c[s+4>>2]|0;v=c[w+8>>2]|0;y=c[w>>2]|0;z=c[w+4>>2]|0;do{if((y|0)>-1|(y|0)==-4){A=r+1|0;B=q;C=z;D=y;E=(c[g>>2]|0)+v|0}else{if((y|0)!=-3){A=r;B=q;C=z;D=y;E=v;break}if(!n){A=r;B=q;C=-1;D=-1;E=-1;break}if(o|(q|0)==0){A=r;B=q;C=z;D=-3;E=v;break}c[h+(z<<2)>>2]=1;A=r;B=0;C=z;D=-3;E=v}}while(0);v=aF(b,0,0,1,32)|0;z=v;do{if((v|0)==0){F=0}else{y=aF(b,0,0,1,20)|0;c[v+4>>2]=y;if((y|0)==0){F=0;break}c[v>>2]=0;c[v+8>>2]=-1;c[v+12>>2]=-1;c[y>>2]=D;c[y+4>>2]=C;c[y+8>>2]=E;F=z}}while(0);c[p>>2]=F;z=(F|0)==0?12:0;if((E|0)<=(c[j>>2]|0)){G=z;H=A;I=B;J=p;break}c[j>>2]=E;G=z;H=A;I=B;J=p}else if((x|0)==1){z=c[s+4>>2]|0;v=z;y=c[v>>2]|0;w=z+4|0;z=c[w>>2]|0;K=aF(b,0,0,1,32)|0;if((K|0)==0){L=29;break b}M=aF(b,0,0,1,8)|0;N=K+4|0;c[N>>2]=M;if((M|0)==0){L=29;break b}c[K>>2]=1;c[K+8>>2]=-1;c[K+12>>2]=-1;c[M>>2]=y;c[(c[N>>2]|0)+4>>2]=z;c[K+16>>2]=(c[z+16>>2]|0)+(c[y+16>>2]|0);c[p>>2]=K;K=c[N>>2]|0;N=K;c[N>>2]=0;y=K+4|0;c[y>>2]=0;K=TE(d,c[w>>2]|0)|0;if((K|0)!=0){t=r;u=K;break a}K=TE(d,0)|0;if((K|0)!=0){t=r;u=K;break a}K=TE(d,y)|0;if((K|0)!=0){t=r;u=K;break a}K=TE(d,1)|0;if((K|0)!=0){t=r;u=K;break a}K=TE(d,c[v>>2]|0)|0;if((K|0)!=0){t=r;u=K;break a}G=TE(d,0)|0;H=r;I=q;J=N}else if((x|0)==2){N=c[s+4>>2]|0;K=N;v=TE(d,c[K>>2]|0)|0;if((v|0)!=0){t=r;u=v;break a}v=TE(d,0)|0;if((v|0)!=0){t=r;u=v;break a}v=c[K>>2]|0;K=c[N+4>>2]|0;y=c[N+8>>2]|0;w=a[N+12|0]|0;N=aF(b,0,0,1,32)|0;if((N|0)==0){L=40;break b}z=aF(b,0,0,1,16)|0;M=N+4|0;c[M>>2]=z;if((z|0)==0){L=40;break b}c[N>>2]=2;c[N+8>>2]=-1;c[N+12>>2]=-1;c[z>>2]=v;c[z+4>>2]=K;c[z+8>>2]=y;y=z+12|0;a[y]=a[y]&-2|w&1;c[N+16>>2]=c[v+16>>2];c[p>>2]=N;p=c[M>>2]|0;q=q;r=r;continue b}else if((x|0)==3){M=c[s+4>>2]|0;N=M;v=c[N>>2]|0;w=M+4|0;M=c[w>>2]|0;y=aF(b,0,0,1,32)|0;if((y|0)==0){L=20;break b}z=aF(b,0,0,1,8)|0;K=y+4|0;c[K>>2]=z;if((z|0)==0){L=20;break b}c[y>>2]=3;c[y+8>>2]=-1;c[y+12>>2]=-1;c[z>>2]=v;c[(c[K>>2]|0)+4>>2]=M;c[y+16>>2]=(c[M+16>>2]|0)+(c[v+16>>2]|0);c[p>>2]=y;y=c[K>>2]|0;K=TE(d,c[w>>2]|0)|0;if((K|0)!=0){t=r;u=K;break a}K=TE(d,0)|0;if((K|0)!=0){t=r;u=K;break a}K=TE(d,y+4|0)|0;if((K|0)!=0){t=r;u=K;break a}K=TE(d,1)|0;if((K|0)!=0){t=r;u=K;break a}K=TE(d,c[N>>2]|0)|0;if((K|0)!=0){t=r;u=K;break a}G=TE(d,0)|0;H=r;I=q;J=y}else{p=p;q=q;r=r;continue b}}while(0);if((G|0)==0){p=J;q=I;r=H}else{t=H;u=G;break a}}if((L|0)==20){c[p>>2]=0;t=r;u=12;break}else if((L|0)==29){c[p>>2]=0;t=r;u=12;break}else if((L|0)==40){c[p>>2]=0;t=r;u=12;break}}else{t=0;u=e}}while(0);c[g>>2]=(c[g>>2]|0)+t;return u|0}function VE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=aF(a,0,0,0,8)|0;if((e|0)==0){f=12;return f|0}g=aF(a,0,0,1,32)|0;h=g;do{if((g|0)!=0){i=aF(a,0,0,1,20)|0;c[g+4>>2]=i;if((i|0)==0){break}c[g>>2]=0;c[g+8>>2]=-1;c[g+12>>2]=-1;c[i>>2]=-3;c[i+4>>2]=d;c[i+8>>2]=-1;c[e>>2]=h;i=aF(a,0,0,0,32)|0;j=e+4|0;c[j>>2]=i;if((i|0)==0){f=12;return f|0}k=b+4|0;c[i+4>>2]=c[k>>2];i=b|0;c[c[j>>2]>>2]=c[i>>2];c[(c[j>>2]|0)+8>>2]=-1;c[(c[j>>2]|0)+12>>2]=-1;c[(c[j>>2]|0)+24>>2]=0;c[(c[j>>2]|0)+28>>2]=0;c[(c[j>>2]|0)+20>>2]=0;c[k>>2]=e;c[i>>2]=1;f=0;return f|0}}while(0);c[e>>2]=0;f=12;return f|0}function WE(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=aF(a,0,0,0,8)|0;if((e|0)==0){f=12;return f|0}g=aF(a,0,0,1,32)|0;h=g;do{if((g|0)!=0){i=aF(a,0,0,1,20)|0;c[g+4>>2]=i;if((i|0)==0){break}c[g>>2]=0;c[g+8>>2]=-1;c[g+12>>2]=-1;c[i>>2]=-3;c[i+4>>2]=d;c[i+8>>2]=-1;c[e+4>>2]=h;i=aF(a,0,0,0,32)|0;j=e;c[j>>2]=i;if((i|0)==0){f=12;return f|0}k=b+4|0;c[i+4>>2]=c[k>>2];i=b|0;c[c[j>>2]>>2]=c[i>>2];c[(c[j>>2]|0)+8>>2]=-1;c[(c[j>>2]|0)+12>>2]=-1;c[(c[j>>2]|0)+24>>2]=0;c[(c[j>>2]|0)+28>>2]=0;c[(c[j>>2]|0)+20>>2]=0;c[k>>2]=e;c[i>>2]=1;f=0;return f|0}}while(0);c[e+4>>2]=0;f=12;return f|0}function XE(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[c[(c[a>>2]|0)+4>>2]>>2]|0;a=c[c[(c[b>>2]|0)+4>>2]>>2]|0;if((d|0)<(a|0)){e=-1;return e|0}e=(d|0)>(a|0)|0;return e|0}function YE(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Ec=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0;g=i;i=i+16|0;h=g|0;j=g+8|0;k=c[a+4>>2]|0;a=k;l=k+40|0;m=c[l>>2]|0;do{if((m|0)<1|(d|0)==0){n=0}else{o=dF(m<<2)|0;if((o|0)==0){p=12}else{n=o;break}i=g;return p|0}}while(0);m=n;a:do{if((c[k+60>>2]|0)==0){c[h>>2]=0;o=f&1;q=f&2;r=k+56|0;s=c[r>>2]&4;if((n|0)==0){t=0}else{t=c[l>>2]|0}u=t<<2;v=c[k+52>>2]|0;w=v<<3;x=w+8|0;y=u+12+w+(x+(da(u,v)|0)<<1)|0;z=dF(y)|0;if((z|0)==0){A=12;break}vF(z|0,0,y|0)|0;y=z;B=z+u&3;C=((B|0)==0?0:4-B|0)+u|0;B=z+C|0;D=C+x|0;C=z+D&3;E=((C|0)==0?0:4-C|0)+D|0;D=z+E|0;C=E+x|0;x=z+C&3;E=((x|0)==0?0:4-x|0)+C|0;C=z+E|0;x=E+w|0;w=z+x&3;if((v|0)>0){E=t<<3;F=0;G=z+(((w|0)==0?0:4-w|0)+x)|0;while(1){c[D+(F<<3)+4>>2]=G;c[B+(F<<3)+4>>2]=G+u;x=F+1|0;if((x|0)<(v|0)){F=x;G=G+E|0}else{H=0;break}}do{c[C+(H<<3)>>2]=-1;H=H+1|0;}while((H|0)<(v|0))}v=KE(h,b,4)|0;if((v|0)<1){if((v|0)<0){A=1;break}I=v+1|0}else{I=v}v=k+8|0;E=(s|0)==0;G=(o|0)==0;F=(t|0)>0;u=k+12|0;x=k+44|0;w=k+32|0;J=k+36|0;K=(t|0)==0;L=F^1;M=0;N=b+I|0;O=0;P=I;Q=D;R=y;S=0;T=-1;U=B;V=B;while(1){if((T|0)<0){W=c[v>>2]|0;X=W+8|0;b:do{if((c[X>>2]|0)==0){Y=V;Z=T;_=S}else{$=(O|0)==0;aa=(M|0)==95;ba=(O|0)<1&G;ca=((M|0)!=10|E)^1;ea=V;fa=T;ga=S;ha=W;ia=X;while(1){ja=ha;ka=ia;c:while(1){la=ja+12|0;if((c[C+(c[la>>2]<<3)>>2]|0)>=(O|0)){ma=ga;na=fa;oa=ea;break}pa=ja+20|0;qa=c[pa>>2]|0;if((qa|0)==0){ra=260;break}d:do{if((qa&1|0)==0|ba|ca){if((qa&2|0)!=0){sa=c[h>>2]|0;if((sa|q|0)!=0&((sa|0)!=10|E)){break}}do{if((qa&16|0)!=0){if(aa){break d}if((tE(M)|0)!=0){break d}sa=c[h>>2]|0;if((sa|0)==95){break}if((tE(sa)|0)==0){break d}}}while(0);sa=c[pa>>2]|0;if((sa&32|0)==0){ta=sa}else{if(!aa){if((tE(M)|0)==0){break}}sa=c[h>>2]|0;if((sa|0)==95){break}if((tE(sa)|0)!=0){break}ta=c[pa>>2]|0}do{if((ta&64|0)==0|$){ua=ta}else{sa=c[h>>2]|0;if((sa|0)==0){ua=ta;break}if(aa){va=1;wa=sa}else{sa=(tE(M)|0)!=0|0;va=sa;wa=c[h>>2]|0}if((wa|0)==95){xa=1}else{xa=(tE(wa)|0)!=0|0}if((va|0)==(xa|0)){break d}ua=c[pa>>2]|0}}while(0);if((ua&128|0)==0){ra=260;break c}if($){break}sa=c[h>>2]|0;if((sa|0)==0){break}if(aa){ya=1;za=sa}else{sa=(tE(M)|0)!=0|0;ya=sa;za=c[h>>2]|0}if((za|0)==95){Aa=1}else{Aa=(tE(za)|0)!=0|0}if((ya|0)==(Aa|0)){ra=260;break c}}}while(0);pa=ja+40|0;if((c[pa>>2]|0)==0){Y=ea;Z=fa;_=ga;break b}else{ja=ja+32|0;ka=pa}}if((ra|0)==260){ra=0;pa=ea|0;c[pa>>2]=c[ka>>2];if(F){qa=ea+4|0;sa=0;do{c[(c[qa>>2]|0)+(sa<<2)>>2]=-1;sa=sa+1|0;}while((sa|0)<(t|0))}sa=c[ja+16>>2]|0;do{if((sa|0)!=0){qa=c[sa>>2]|0;if((qa|0)<=-1){break}ka=ea+4|0;Ba=sa;Ca=qa;do{if((Ca|0)<(t|0)){c[(c[ka>>2]|0)+(Ca<<2)>>2]=O}Ba=Ba+4|0;Ca=c[Ba>>2]|0;}while((Ca|0)>-1)}}while(0);sa=(c[pa>>2]|0)!=(c[u>>2]|0);if(sa|L){Da=sa?ga:1;Ea=sa?fa:O;Fa=ea+4|0}else{sa=ea+4|0;Ca=0;while(1){c[n+(Ca<<2)>>2]=c[(c[sa>>2]|0)+(Ca<<2)>>2];Ba=Ca+1|0;if((Ba|0)<(t|0)){Ca=Ba}else{Da=1;Ea=O;Fa=sa;break}}}c[C+(c[la>>2]<<3)>>2]=O;c[C+(c[la>>2]<<3)+4>>2]=Fa;ma=Da;na=Ea;oa=ea+8|0}sa=ja+40|0;if((c[sa>>2]|0)==0){Y=oa;Z=na;_=ma;break}else{ea=oa;fa=na;ga=ma;ha=ja+32|0;ia=sa}}}}while(0);c[Y>>2]=0;Ga=_;Ha=Z}else{if(K|(V|0)==(U|0)){Ia=T;break}else{Ga=S;Ha=T}}X=c[h>>2]|0;if((X|0)==0){Ia=Ha;break}W=O+P|0;ia=KE(h,N,4)|0;if((ia|0)<1){if((ia|0)<0){A=1;break a}Ja=ia+1|0}else{Ja=ia}ia=N+Ja|0;if((c[x>>2]|0)==0|(Ga|0)==0){Ka=U;La=Ga;Ma=Q}else{ha=U|0;ga=c[ha>>2]|0;if((ga|0)==0){Na=Q}else{fa=Q;ea=ha;ha=ga;while(1){ga=c[J>>2]|0;aa=c[ga>>2]|0;$=ea+4|0;e:do{if((aa|0)>-1){ca=0;ba=aa;while(1){sa=c[ga+((ca|1)<<2)>>2]|0;if((ba|0)>=(t|0)){Oa=fa;break e}Ca=c[$>>2]|0;if((c[Ca+(sa<<2)>>2]|0)==(c[n+(sa<<2)>>2]|0)){if((c[Ca+(ba<<2)>>2]|0)<(c[n+(ba<<2)>>2]|0)){Oa=fa;break e}}Ca=ca+2|0;sa=c[ga+(Ca<<2)>>2]|0;if((sa|0)>-1){ca=Ca;ba=sa}else{ra=288;break}}}else{ra=288}}while(0);if((ra|0)==288){ra=0;c[fa>>2]=ha;ga=fa+4|0;aa=c[ga>>2]|0;c[ga>>2]=c[$>>2];c[$>>2]=aa;Oa=fa+8|0}aa=ea+8|0;ga=c[aa>>2]|0;if((ga|0)==0){Na=Oa;break}else{fa=Oa;ea=aa;ha=ga}}}c[Na>>2]=0;Ka=Q;La=0;Ma=U}ha=c[Ka>>2]|0;if((ha|0)==0){Pa=Ma;Qa=Ha;Ra=La;Sa=R}else{ea=(W|0)==0;fa=(X|0)==95;ga=(W|0)<1&G;aa=((X|0)!=10|E)^1;ba=Ka;ca=Ma;ja=Ha;sa=La;Ca=R;pa=ha;while(1){ha=pa+8|0;if((c[ha>>2]|0)==0){Ta=ca;Ua=ja;Va=sa;Wa=Ca}else{Ba=ba+4|0;ka=ca;qa=ja;Xa=sa;Ya=Ca;_a=pa;$a=ha;while(1){f:do{if((c[_a>>2]|0)>>>0>X>>>0){ab=Ya;bb=Xa;cb=qa;db=ka}else{if((c[_a+4>>2]|0)>>>0<X>>>0){ab=Ya;bb=Xa;cb=qa;db=ka;break}ha=_a+20|0;eb=c[ha>>2]|0;g:do{if((eb|0)!=0){if(!((eb&1|0)==0|ga|aa)){ab=Ya;bb=Xa;cb=qa;db=ka;break f}if((eb&2|0)!=0){fb=c[h>>2]|0;if((fb|q|0)!=0&((fb|0)!=10|E)){ab=Ya;bb=Xa;cb=qa;db=ka;break f}}do{if((eb&16|0)!=0){if(fa){ab=Ya;bb=Xa;cb=qa;db=ka;break f}if((tE(X)|0)!=0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}fb=c[h>>2]|0;if((fb|0)==95){break}if((tE(fb)|0)==0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}}}while(0);fb=c[ha>>2]|0;if((fb&32|0)==0){gb=fb}else{if(!fa){if((tE(X)|0)==0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}}fb=c[h>>2]|0;if((fb|0)==95){ab=Ya;bb=Xa;cb=qa;db=ka;break f}if((tE(fb)|0)!=0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}gb=c[ha>>2]|0}do{if((gb&64|0)==0|ea){hb=gb}else{fb=c[h>>2]|0;if((fb|0)==0){hb=gb;break}if(fa){ib=1;jb=fb}else{fb=(tE(X)|0)!=0|0;ib=fb;jb=c[h>>2]|0}if((jb|0)==95){kb=1}else{kb=(tE(jb)|0)!=0|0}if((ib|0)==(kb|0)){ab=Ya;bb=Xa;cb=qa;db=ka;break f}hb=c[ha>>2]|0}}while(0);if((hb&128|0)==0){lb=hb}else{if(ea){ab=Ya;bb=Xa;cb=qa;db=ka;break f}fb=c[h>>2]|0;if((fb|0)==0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}if(fa){mb=1;nb=fb}else{fb=(tE(X)|0)!=0|0;mb=fb;nb=c[h>>2]|0}if((nb|0)==95){ob=1}else{ob=(tE(nb)|0)!=0|0}if((mb|0)!=(ob|0)){ab=Ya;bb=Xa;cb=qa;db=ka;break f}lb=c[ha>>2]|0}do{if((lb&4|0)==0){pb=lb}else{if((c[r>>2]&2|0)!=0){pb=lb;break}if((xE(X,c[_a+24>>2]|0)|0)==0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}pb=c[ha>>2]|0}}while(0);do{if((pb&4|0)!=0){if((c[r>>2]&2|0)==0){break}fb=JE(X)|0;qb=_a+24|0;if((xE(fb,c[qb>>2]|0)|0)!=0){break}fb=HE(X)|0;if((xE(fb,c[qb>>2]|0)|0)==0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}}}while(0);if((c[ha>>2]&8|0)==0){break}qb=c[_a+28>>2]|0;fb=c[qb>>2]|0;if((fb|0)==0){break}if((c[r>>2]&2|0)==0){rb=qb;sb=fb;while(1){if((xE(X,sb)|0)!=0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}rb=rb+4|0;sb=c[rb>>2]|0;if((sb|0)==0){break g}}}else{tb=qb}do{sb=HE(X)|0;if((xE(sb,c[tb>>2]|0)|0)!=0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}sb=JE(X)|0;if((xE(sb,c[tb>>2]|0)|0)!=0){ab=Ya;bb=Xa;cb=qa;db=ka;break f}tb=tb+4|0;}while((c[tb>>2]|0)!=0)}}while(0);if(F){ha=0;do{c[Ya+(ha<<2)>>2]=c[(c[Ba>>2]|0)+(ha<<2)>>2];ha=ha+1|0;}while((ha|0)<(t|0))}ha=c[_a+16>>2]|0;do{if((ha|0)!=0){eb=c[ha>>2]|0;if((eb|0)>-1){ub=ha;vb=eb}else{break}do{if((vb|0)<(t|0)){c[Ya+(vb<<2)>>2]=W}ub=ub+4|0;vb=c[ub>>2]|0;}while((vb|0)>-1)}}while(0);ha=_a+12|0;eb=c[ha>>2]|0;if((c[C+(eb<<3)>>2]|0)<(W|0)){qb=ka|0;c[qb>>2]=c[$a>>2];sb=ka+4|0;rb=c[sb>>2]|0;c[sb>>2]=Ya;c[C+(c[ha>>2]<<3)>>2]=W;c[C+(c[ha>>2]<<3)+4>>2]=sb;do{if((c[qb>>2]|0)==(c[u>>2]|0)){if((qa|0)==-1){if(F){wb=0}else{xb=1;yb=W;break}}else{if(!F){xb=Xa;yb=qa;break}if((c[c[sb>>2]>>2]|0)>(c[n>>2]|0)){xb=Xa;yb=qa;break}else{wb=0}}while(1){c[n+(wb<<2)>>2]=c[(c[sb>>2]|0)+(wb<<2)>>2];ha=wb+1|0;if((ha|0)<(t|0)){wb=ha}else{xb=1;yb=W;break}}}else{xb=Xa;yb=qa}}while(0);ab=rb;bb=xb;cb=yb;db=ka+8|0;break}sb=c[w>>2]|0;qb=c[C+(eb<<3)+4>>2]|0;ha=c[qb>>2]|0;if(F){zb=0}else{ab=Ya;bb=Xa;cb=qa;db=ka;break}while(1){fb=c[Ya+(zb<<2)>>2]|0;Ab=c[ha+(zb<<2)>>2]|0;if((c[sb+(zb<<2)>>2]|0)==0){if((fb|0)<(Ab|0)){break}if((fb|0)>(Ab|0)){ab=Ya;bb=Xa;cb=qa;db=ka;break f}}else{if((fb|0)>(Ab|0)){break}if((fb|0)<(Ab|0)){ab=Ya;bb=Xa;cb=qa;db=ka;break f}}Ab=zb+1|0;if((Ab|0)<(t|0)){zb=Ab}else{ab=Ya;bb=Xa;cb=qa;db=ka;break f}}c[qb>>2]=Ya;if((c[$a>>2]|0)==(c[u>>2]|0)){Bb=0}else{ab=ha;bb=Xa;cb=qa;db=ka;break}while(1){c[n+(Bb<<2)>>2]=c[Ya+(Bb<<2)>>2];sb=Bb+1|0;if((sb|0)<(t|0)){Bb=sb}else{ab=ha;bb=1;cb=W;db=ka;break}}}}while(0);ha=_a+40|0;if((c[ha>>2]|0)==0){Ta=db;Ua=cb;Va=bb;Wa=ab;break}else{ka=db;qa=cb;Xa=bb;Ya=ab;_a=_a+32|0;$a=ha}}}$a=ba+8|0;_a=c[$a>>2]|0;if((_a|0)==0){Pa=Ta;Qa=Ua;Ra=Va;Sa=Wa;break}else{ba=$a;ca=Ta;ja=Ua;sa=Va;Ca=Wa;pa=_a}}}c[Pa>>2]=0;M=X;N=ia;O=W;P=Ja;Q=Ka;R=Sa;S=Ra;T=Qa;U=Ma;V=Pa}eF(z);Cb=Ia>>>31;Db=Ia;ra=373}else{c[j>>2]=0;V=f&1;U=f&2;T=k+56|0;S=c[T>>2]&4;R=_E(0,0)|0;if((R|0)==0){A=12;break}Q=aF(R,0,0,0,32)|0;P=Q;if((Q|0)==0){$E(R);A=12;break}c[Q+24>>2]=0;c[Q+28>>2]=0;Q=c[l>>2]|0;if((Q|0)==0){Eb=0;ra=9}else{O=dF(Q<<2)|0;N=O;if((O|0)==0){Fb=12;Gb=0;Hb=0;Ib=N;Jb=0}else{Eb=N;ra=9}}do{if((ra|0)==9){N=Eb;O=c[k+28>>2]|0;if((O|0)==0){Kb=0}else{M=dF(O<<3)|0;O=M;if((M|0)==0){Fb=12;Gb=O;Hb=0;Ib=Eb;Jb=0;break}else{Kb=O}}O=k+52|0;M=c[O>>2]|0;if((M|0)==0){Lb=0}else{u=dF(M<<2)|0;M=u;if((u|0)==0){Fb=12;Gb=Kb;Hb=M;Ib=Eb;Jb=0;break}else{Lb=M}}M=Lb;u=(n|0)==0;F=k+8|0;C=k+12|0;w=k+32|0;r=(S|0)==0;E=(V|0)==0;q=b;G=1;J=-1;x=-1;K=P;L=Q;h:while(1){do{if((L|0)>0){if(u){vF(N|0,-1|0,L<<2|0)|0;break}else{v=0;do{c[Eb+(v<<2)>>2]=-1;c[n+(v<<2)>>2]=-1;v=v+1|0;}while((v|0)<(c[l>>2]|0))}}}while(0);v=c[O>>2]|0;if((v|0)>0){vF(M|0,0,v<<2|0)|0}v=c[j>>2]|0;B=G+J|0;y=KE(j,q,4)|0;if((y|0)<1){if((y|0)<0){A=1;break a}Mb=y+1|0}else{Mb=y}y=q+Mb|0;D=c[j>>2]|0;o=c[F>>2]|0;s=o+8|0;if((c[s>>2]|0)==0){Nb=Mb;Ob=x;Pb=K;Qb=0;ra=195}else{pa=(B|0)==0;Ca=(v|0)==95;sa=(B|0)<1&E;ja=((v|0)!=10|r)^1;ca=0;ba=0;fa=K;ea=o;o=s;while(1){s=ea+20|0;aa=c[s>>2]|0;i:do{if((aa|0)==0){ra=56}else{if(!((aa&1|0)==0|sa|ja)){Rb=fa;Sb=ba;Tb=ca;break}if((aa&2|0)!=0){ga=c[j>>2]|0;if((ga|U|0)!=0&((ga|0)!=10|r)){Rb=fa;Sb=ba;Tb=ca;break}}do{if((aa&16|0)!=0){if(Ca){Rb=fa;Sb=ba;Tb=ca;break i}if((tE(v)|0)!=0){Rb=fa;Sb=ba;Tb=ca;break i}ga=c[j>>2]|0;if((ga|0)==95){break}if((tE(ga)|0)==0){Rb=fa;Sb=ba;Tb=ca;break i}}}while(0);ga=c[s>>2]|0;if((ga&32|0)==0){Ub=ga}else{if(!Ca){if((tE(v)|0)==0){Rb=fa;Sb=ba;Tb=ca;break}}ga=c[j>>2]|0;if((ga|0)==95){Rb=fa;Sb=ba;Tb=ca;break}if((tE(ga)|0)!=0){Rb=fa;Sb=ba;Tb=ca;break}Ub=c[s>>2]|0}do{if((Ub&64|0)==0|pa){Vb=Ub}else{ga=c[j>>2]|0;if((ga|0)==0){Vb=Ub;break}if(Ca){Wb=1;Xb=ga}else{ga=(tE(v)|0)!=0|0;Wb=ga;Xb=c[j>>2]|0}if((Xb|0)==95){Yb=1}else{Yb=(tE(Xb)|0)!=0|0}if((Wb|0)==(Yb|0)){Rb=fa;Sb=ba;Tb=ca;break i}Vb=c[s>>2]|0}}while(0);if((Vb&128|0)==0){ra=56;break}if(pa){Rb=fa;Sb=ba;Tb=ca;break}ga=c[j>>2]|0;if((ga|0)==0){Rb=fa;Sb=ba;Tb=ca;break}if(Ca){Zb=1;_b=ga}else{ga=(tE(v)|0)!=0|0;Zb=ga;_b=c[j>>2]|0}if((_b|0)==95){$b=1}else{$b=(tE(_b)|0)!=0|0}if((Zb|0)==($b|0)){ra=56}else{Rb=fa;Sb=ba;Tb=ca}}}while(0);do{if((ra|0)==56){ra=0;if((ca|0)==0){Rb=fa;Sb=c[ea+16>>2]|0;Tb=c[o>>2]|0;break}s=fa+28|0;aa=c[s>>2]|0;if((aa|0)==0){ga=aF(R,0,0,0,32)|0;_a=ga;if((ga|0)==0){ra=60;break h}c[ga+24>>2]=fa;c[ga+28>>2]=0;$a=aF(R,0,0,0,c[l>>2]<<2)|0;c[ga+20>>2]=$a;if(($a|0)==0){ra=67;break h}c[s>>2]=_a;ac=_a}else{ac=aa}c[ac>>2]=B;c[ac+4>>2]=y;c[ac+8>>2]=c[o>>2];c[ac+12>>2]=c[ea+12>>2];c[ac+16>>2]=c[j>>2];if((c[l>>2]|0)>0){aa=ac+20|0;_a=0;do{c[(c[aa>>2]|0)+(_a<<2)>>2]=c[Eb+(_a<<2)>>2];_a=_a+1|0;}while((_a|0)<(c[l>>2]|0))}_a=c[ea+16>>2]|0;if((_a|0)==0){Rb=ac;Sb=ba;Tb=ca;break}aa=c[_a>>2]|0;if((aa|0)<=-1){Rb=ac;Sb=ba;Tb=ca;break}s=ac+20|0;$a=_a;_a=aa;while(1){aa=$a+4|0;c[(c[s>>2]|0)+(_a<<2)>>2]=B;ga=c[aa>>2]|0;if((ga|0)>-1){$a=aa;_a=ga}else{Rb=ac;Sb=ba;Tb=ca;break}}}}while(0);_a=ea+40|0;if((c[_a>>2]|0)==0){break}else{ca=Tb;ba=Sb;fa=Rb;ea=ea+32|0;o=_a}}do{if((Sb|0)==0){bc=0}else{o=c[Sb>>2]|0;if((o|0)>-1){cc=Sb;dc=o}else{bc=Sb;break}while(1){c[Eb+(dc<<2)>>2]=B;o=cc+4|0;ea=c[o>>2]|0;if((ea|0)>-1){cc=o;dc=ea}else{bc=o;break}}}}while(0);if((Tb|0)==0){Nb=Mb;Ob=x;Pb=Rb;Qb=bc;ra=195}else{ec=y;fc=B;gc=Mb;hc=x;ic=Rb;jc=bc;kc=Tb}}j:while(1){if((ra|0)==195){ra=0;o=Pb+24|0;if((c[o>>2]|0)==0){break}ea=Pb+8|0;fa=c[ea>>2]|0;if((c[fa+20>>2]&256|0)==0){lc=fa}else{c[Lb+(c[Pb+12>>2]<<2)>>2]=0;lc=c[ea>>2]|0}ea=c[Pb>>2]|0;fa=c[Pb+4>>2]|0;c[j>>2]=c[Pb+16>>2];ba=c[l>>2]|0;if((ba|0)>0){ca=Pb+20|0;v=0;do{c[Eb+(v<<2)>>2]=c[(c[ca>>2]|0)+(v<<2)>>2];v=v+1|0;}while((v|0)<(ba|0))}ec=fa;fc=ea;gc=Nb;hc=Ob;ic=c[o>>2]|0;jc=Qb;kc=lc}if((kc|0)==(c[C>>2]|0)){mc=jc;nc=ic;oc=gc;pc=fc}else{ba=kc;v=jc;ca=ic;Ca=gc;pa=fc;ja=ec;while(1){sa=ba+8|0;do{if((c[sa>>2]|0)==0){ra=109}else{if((c[ba+20>>2]&256|0)==0){ra=109;break}_a=c[ba+24>>2]|0;ZE(_a+1|0,Kb,c[T>>2]&-9,a,Eb,pa);$a=c[Kb+(_a<<3)>>2]|0;s=c[Kb+(_a<<3)+4>>2]|0;_a=s-$a|0;if((Za(b+$a|0,ja-1|0,_a|0)|0)!=0){Nb=Ca;Ob=hc;Pb=ca;Qb=v;ra=195;continue j}ga=(s|0)==($a|0);$a=ga&1;s=Lb+(c[ba+12>>2]<<2)|0;if(ga){if((c[s>>2]|0)!=0){Nb=Ca;Ob=hc;Pb=ca;Qb=v;ra=195;continue j}}c[s>>2]=$a;$a=_a-1|0;_a=$a+pa|0;s=c[j>>2]|0;ga=KE(j,ja+$a|0,4)|0;if((ga|0)<1){if((ga|0)<0){A=1;break a}qc=ga+1|0}else{qc=ga}rc=s;sc=qc+$a|0;tc=_a;uc=qc}}while(0);do{if((ra|0)==109){ra=0;_a=c[j>>2]|0;if((_a|0)==0){Nb=Ca;Ob=hc;Pb=ca;Qb=v;ra=195;continue j}$a=KE(j,ja,4)|0;if(($a|0)>=1){rc=_a;sc=$a;tc=pa;uc=$a;break}if(($a|0)<0){A=1;break a}s=$a+1|0;rc=_a;sc=s;tc=pa;uc=s}}while(0);s=ja+sc|0;_a=tc+Ca|0;if((c[sa>>2]|0)==0){Nb=uc;Ob=hc;Pb=ca;Qb=v;ra=195;continue j}$a=(_a|0)==0;ga=(rc|0)==95;aa=(_a|0)<1&E;Ya=((rc|0)!=10|r)^1;Xa=v;qa=ca;ka=ba;Ba=0;$=sa;while(1){k:do{if((c[ka>>2]|0)>>>0>rc>>>0){vc=Ba;wc=qa;xc=Xa}else{if((c[ka+4>>2]|0)>>>0<rc>>>0){vc=Ba;wc=qa;xc=Xa;break}ha=ka+20|0;qb=c[ha>>2]|0;l:do{if((qb|0)!=0){if(!((qb&1|0)==0|aa|Ya)){vc=Ba;wc=qa;xc=Xa;break k}if((qb&2|0)!=0){sb=c[j>>2]|0;if((sb|U|0)!=0&((sb|0)!=10|r)){vc=Ba;wc=qa;xc=Xa;break k}}do{if((qb&16|0)!=0){if(ga){vc=Ba;wc=qa;xc=Xa;break k}if((tE(rc)|0)!=0){vc=Ba;wc=qa;xc=Xa;break k}sb=c[j>>2]|0;if((sb|0)==95){break}if((tE(sb)|0)==0){vc=Ba;wc=qa;xc=Xa;break k}}}while(0);sb=c[ha>>2]|0;if((sb&32|0)==0){yc=sb}else{if(!ga){if((tE(rc)|0)==0){vc=Ba;wc=qa;xc=Xa;break k}}sb=c[j>>2]|0;if((sb|0)==95){vc=Ba;wc=qa;xc=Xa;break k}if((tE(sb)|0)!=0){vc=Ba;wc=qa;xc=Xa;break k}yc=c[ha>>2]|0}do{if((yc&64|0)==0|$a){zc=yc}else{sb=c[j>>2]|0;if((sb|0)==0){zc=yc;break}if(ga){Ac=1;Bc=sb}else{sb=(tE(rc)|0)!=0|0;Ac=sb;Bc=c[j>>2]|0}if((Bc|0)==95){Cc=1}else{Cc=(tE(Bc)|0)!=0|0}if((Ac|0)==(Cc|0)){vc=Ba;wc=qa;xc=Xa;break k}zc=c[ha>>2]|0}}while(0);if((zc&128|0)==0){Dc=zc}else{if($a){vc=Ba;wc=qa;xc=Xa;break k}sb=c[j>>2]|0;if((sb|0)==0){vc=Ba;wc=qa;xc=Xa;break k}if(ga){Ec=1;Fc=sb}else{sb=(tE(rc)|0)!=0|0;Ec=sb;Fc=c[j>>2]|0}if((Fc|0)==95){Gc=1}else{Gc=(tE(Fc)|0)!=0|0}if((Ec|0)!=(Gc|0)){vc=Ba;wc=qa;xc=Xa;break k}Dc=c[ha>>2]|0}do{if((Dc&4|0)==0){Hc=Dc}else{if((c[T>>2]&2|0)!=0){Hc=Dc;break}if((xE(rc,c[ka+24>>2]|0)|0)==0){vc=Ba;wc=qa;xc=Xa;break k}Hc=c[ha>>2]|0}}while(0);do{if((Hc&4|0)!=0){if((c[T>>2]&2|0)==0){break}sb=JE(rc)|0;eb=ka+24|0;if((xE(sb,c[eb>>2]|0)|0)!=0){break}sb=HE(rc)|0;if((xE(sb,c[eb>>2]|0)|0)==0){vc=Ba;wc=qa;xc=Xa;break k}}}while(0);if((c[ha>>2]&8|0)==0){break}eb=c[ka+28>>2]|0;sb=c[eb>>2]|0;if((sb|0)==0){break}if((c[T>>2]&2|0)==0){rb=eb;Ab=sb;while(1){if((xE(rc,Ab)|0)!=0){vc=Ba;wc=qa;xc=Xa;break k}rb=rb+4|0;Ab=c[rb>>2]|0;if((Ab|0)==0){break l}}}else{Ic=eb}do{Ab=HE(rc)|0;if((xE(Ab,c[Ic>>2]|0)|0)!=0){vc=Ba;wc=qa;xc=Xa;break k}Ab=JE(rc)|0;if((xE(Ab,c[Ic>>2]|0)|0)!=0){vc=Ba;wc=qa;xc=Xa;break k}Ic=Ic+4|0;}while((c[Ic>>2]|0)!=0)}}while(0);if((Ba|0)==0){vc=c[$>>2]|0;wc=qa;xc=c[ka+16>>2]|0;break}ha=qa+28|0;qb=c[ha>>2]|0;if((qb|0)==0){eb=aF(R,0,0,0,32)|0;Ab=eb;if((eb|0)==0){ra=169;break h}c[eb+24>>2]=qa;c[eb+28>>2]=0;rb=aF(R,0,0,0,c[l>>2]<<2)|0;c[eb+20>>2]=rb;if((rb|0)==0){ra=176;break h}c[ha>>2]=Ab;Jc=Ab}else{Jc=qb}c[Jc>>2]=_a;c[Jc+4>>2]=s;c[Jc+8>>2]=c[$>>2];c[Jc+12>>2]=c[ka+12>>2];c[Jc+16>>2]=c[j>>2];if((c[l>>2]|0)>0){qb=Jc+20|0;Ab=0;do{c[(c[qb>>2]|0)+(Ab<<2)>>2]=c[Eb+(Ab<<2)>>2];Ab=Ab+1|0;}while((Ab|0)<(c[l>>2]|0))}Ab=c[ka+16>>2]|0;if((Ab|0)==0){vc=Ba;wc=Jc;xc=Xa;break}qb=Jc+20|0;ha=c[Ab>>2]|0;if((ha|0)>-1){Kc=Ab;Lc=ha}else{vc=Ba;wc=Jc;xc=Xa;break}while(1){c[(c[qb>>2]|0)+(Lc<<2)>>2]=_a;ha=Kc+4|0;Ab=c[ha>>2]|0;if((Ab|0)>-1){Kc=ha;Lc=Ab}else{vc=Ba;wc=Jc;xc=Xa;break}}}}while(0);qb=ka+40|0;if((c[qb>>2]|0)==0){break}else{Xa=xc;qa=wc;ka=ka+32|0;Ba=vc;$=qb}}if((vc|0)==0){Nb=uc;Ob=hc;Pb=wc;Qb=xc;ra=195;continue j}do{if((xc|0)==0){Mc=0}else{$=c[xc>>2]|0;if(($|0)>-1){Nc=xc;Oc=$}else{Mc=xc;break}while(1){$=Nc+4|0;c[Eb+(Oc<<2)>>2]=_a;Ba=c[$>>2]|0;if((Ba|0)>-1){Nc=$;Oc=Ba}else{Mc=$;break}}}}while(0);if((vc|0)==(c[C>>2]|0)){mc=Mc;nc=wc;oc=uc;pc=_a;break}else{ba=vc;v=Mc;ca=wc;Ca=uc;pa=_a;ja=s}}}m:do{if((hc|0)<(pc|0)){ra=96}else{if((hc|0)!=(pc|0)|u){Nb=oc;Ob=hc;Pb=nc;Qb=mc;ra=195;continue j}ja=c[l>>2]|0;pa=c[w>>2]|0;if((ja|0)>0){Pc=0}else{Nb=oc;Ob=hc;Pb=nc;Qb=mc;ra=195;continue j}while(1){Ca=c[Eb+(Pc<<2)>>2]|0;ca=c[n+(Pc<<2)>>2]|0;if((c[pa+(Pc<<2)>>2]|0)==0){if((Ca|0)<(ca|0)){ra=96;break m}if((Ca|0)>(ca|0)){Nb=oc;Ob=hc;Pb=nc;Qb=mc;ra=195;continue j}}else{if((Ca|0)>(ca|0)){Qc=ja;break m}if((Ca|0)<(ca|0)){Nb=oc;Ob=hc;Pb=nc;Qb=mc;ra=195;continue j}}ca=Pc+1|0;if((ca|0)<(ja|0)){Pc=ca}else{Nb=oc;Ob=hc;Pb=nc;Qb=mc;ra=195;continue j}}}}while(0);if((ra|0)==96){ra=0;if(u){Nb=oc;Ob=pc;Pb=nc;Qb=mc;ra=195;continue}Qc=c[l>>2]|0}if((Qc|0)>0){Rc=0}else{Nb=oc;Ob=pc;Pb=nc;Qb=mc;ra=195;continue}while(1){c[n+(Rc<<2)>>2]=c[Eb+(Rc<<2)>>2];ja=Rc+1|0;if((ja|0)<(c[l>>2]|0)){Rc=ja}else{Nb=oc;Ob=pc;Pb=nc;Qb=mc;ra=195;continue j}}}if((Ob|0)>=0){ra=205;break}if((c[j>>2]|0)==0){ra=205;break}c[j>>2]=D;q=y;G=Nb;J=B;x=Ob;K=Pb;L=c[l>>2]|0}if((ra|0)==60){$E(R);if((Eb|0)!=0){eF(N)}if((Kb|0)!=0){eF(Kb)}if((Lb|0)==0){A=12;break a}eF(M);A=12;break a}else if((ra|0)==67){$E(R);if((Eb|0)!=0){eF(N)}if((Kb|0)!=0){eF(Kb)}if((Lb|0)==0){A=12;break a}eF(M);A=12;break a}else if((ra|0)==169){$E(R);if((Eb|0)!=0){eF(N)}if((Kb|0)!=0){eF(Kb)}if((Lb|0)==0){A=12;break a}eF(M);A=12;break a}else if((ra|0)==176){$E(R);if((Eb|0)!=0){eF(N)}if((Kb|0)!=0){eF(Kb)}if((Lb|0)==0){A=12;break a}eF(M);A=12;break a}else if((ra|0)==205){Fb=Ob>>>31;Gb=Kb;Hb=Lb;Ib=Eb;Jb=Ob;break}}}while(0);$E(R);if((Ib|0)!=0){eF(Ib)}if((Gb|0)!=0){eF(Gb)}if((Hb|0)==0){Cb=Fb;Db=Jb;ra=373;break}eF(Hb);Cb=Fb;Db=Jb;ra=373}}while(0);do{if((ra|0)==373){if((Cb|0)!=0){A=Cb;break}ZE(d,e,c[k+56>>2]|0,a,n,Db);A=0}}while(0);if((n|0)==0){p=A;i=g;return p|0}eF(m);p=A;i=g;return p|0}function ZE(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;do{if((g|0)>-1){if((d&8|0)!=0){h=0;break}i=c[e+16>>2]|0;j=e+28|0;k=c[j>>2]|0;l=(a|0)!=0;if((k|0)!=0&l){m=e+48|0;n=0;while(1){o=c[i+(n*12|0)>>2]|0;if((o|0)==(c[m>>2]|0)){c[b+(n<<3)>>2]=g;p=g}else{q=c[f+(o<<2)>>2]|0;c[b+(n<<3)>>2]=q;p=q}q=c[i+(n*12|0)+4>>2]|0;if((q|0)==(c[m>>2]|0)){c[b+(n<<3)+4>>2]=g;r=g}else{o=c[f+(q<<2)>>2]|0;c[b+(n<<3)+4>>2]=o;r=o}if((p|0)==-1|(r|0)==-1){c[b+(n<<3)+4>>2]=-1;c[b+(n<<3)>>2]=-1}o=n+1|0;q=c[j>>2]|0;if(o>>>0<q>>>0&o>>>0<a>>>0){n=o}else{s=q;break}}}else{s=k}if((s|0)!=0&l){t=0;u=s}else{h=0;break}while(1){n=b+(t<<3)+4|0;m=c[i+(t*12|0)+8>>2]|0;do{if((m|0)==0){v=u}else{q=c[m>>2]|0;if((q|0)<=-1){v=u;break}o=b+(t<<3)|0;w=0;x=q;q=c[o>>2]|0;while(1){if((q|0)<(c[b+(x<<3)>>2]|0)){y=21}else{if((c[n>>2]|0)>(c[b+(x<<3)+4>>2]|0)){y=21}else{z=q}}if((y|0)==21){y=0;c[n>>2]=-1;c[o>>2]=-1;z=-1}A=w+1|0;B=c[m+(A<<2)>>2]|0;if((B|0)>-1){w=A;x=B;q=z}else{break}}v=c[j>>2]|0}}while(0);m=t+1|0;if(m>>>0<v>>>0&m>>>0<a>>>0){t=m;u=v}else{h=m;break}}}else{h=0}}while(0);if(h>>>0<a>>>0){C=h}else{return}do{c[b+(C<<3)>>2]=-1;c[b+(C<<3)+4>>2]=-1;C=C+1|0;}while(C>>>0<a>>>0);return}function _E(a,b){a=a|0;b=b|0;var c=0,d=0;if((a|0)==0){c=fF(1,24)|0}else{vF(b|0,0,24)|0;c=b}if((c|0)==0){d=0;return d|0}d=c;return d|0}function $E(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;if((b|0)==0){d=a;eF(d);return}else{e=b}while(1){eF(c[e>>2]|0);b=c[e+4>>2]|0;eF(e);if((b|0)==0){break}else{e=b}}d=a;eF(d);return}function aF(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g=a+16|0;if((c[g>>2]|0)!=0){h=0;return h|0}i=a+12|0;j=c[i>>2]|0;do{if(j>>>0<f>>>0){if((b|0)!=0){if((d|0)!=0){c[a+8>>2]=d;c[i>>2]=1024;k=1024;l=d;break}c[g>>2]=1;h=0;return h|0}m=f<<3;n=m>>>0>1024>>>0?m:1024;m=dF(8)|0;o=m;if((m|0)==0){c[g>>2]=1;h=0;return h|0}p=dF(n)|0;q=m;c[q>>2]=p;if((p|0)==0){eF(m);c[g>>2]=1;h=0;return h|0}c[m+4>>2]=0;m=a+4|0;p=c[m>>2]|0;if((p|0)!=0){c[p+4>>2]=o}p=a|0;if((c[p>>2]|0)==0){c[p>>2]=o}c[m>>2]=o;o=c[q>>2]|0;c[a+8>>2]=o;c[i>>2]=n;k=n;l=o}else{k=j;l=c[a+8>>2]|0}}while(0);j=l+f&3;g=((j|0)==0?0:4-j|0)+f|0;c[a+8>>2]=l+g;c[i>>2]=k-g;if((e|0)==0){h=l;return h|0}vF(l|0,0,g|0)|0;h=l;return h|0}function bF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((b|0)==0){d=a+((cF(a)|0)<<2)|0;return d|0}else{e=a}while(1){f=c[e>>2]|0;if((f|0)==0|(f|0)==(b|0)){break}else{e=e+4|0}}d=(f|0)!=0?e:0;return d|0}function cF(a){a=a|0;var b=0;b=a;while(1){if((c[b>>2]|0)==0){break}else{b=b+4|0}}return b-a>>2|0}function dF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;do{if(a>>>0<245>>>0){if(a>>>0<11>>>0){b=16}else{b=a+11&-8}d=b>>>3;e=c[53374]|0;f=e>>>(d>>>0);if((f&3|0)!=0){g=(f&1^1)+d|0;h=g<<1;i=213536+(h<<2)|0;j=213536+(h+2<<2)|0;h=c[j>>2]|0;k=h+8|0;l=c[k>>2]|0;do{if((i|0)==(l|0)){c[53374]=e&~(1<<g)}else{if(l>>>0<(c[53378]|0)>>>0){fc();return 0}m=l+12|0;if((c[m>>2]|0)==(h|0)){c[m>>2]=i;c[j>>2]=l;break}else{fc();return 0}}}while(0);l=g<<3;c[h+4>>2]=l|3;j=h+(l|4)|0;c[j>>2]=c[j>>2]|1;n=k;return n|0}if(b>>>0<=(c[53376]|0)>>>0){o=b;break}if((f|0)!=0){j=2<<d;l=f<<d&(j|-j);j=(l&-l)-1|0;l=j>>>12&16;i=j>>>(l>>>0);j=i>>>5&8;m=i>>>(j>>>0);i=m>>>2&4;p=m>>>(i>>>0);m=p>>>1&2;q=p>>>(m>>>0);p=q>>>1&1;r=(j|l|i|m|p)+(q>>>(p>>>0))|0;p=r<<1;q=213536+(p<<2)|0;m=213536+(p+2<<2)|0;p=c[m>>2]|0;i=p+8|0;l=c[i>>2]|0;do{if((q|0)==(l|0)){c[53374]=e&~(1<<r)}else{if(l>>>0<(c[53378]|0)>>>0){fc();return 0}j=l+12|0;if((c[j>>2]|0)==(p|0)){c[j>>2]=q;c[m>>2]=l;break}else{fc();return 0}}}while(0);l=r<<3;m=l-b|0;c[p+4>>2]=b|3;q=p;e=q+b|0;c[q+(b|4)>>2]=m|1;c[q+l>>2]=m;l=c[53376]|0;if((l|0)!=0){q=c[53379]|0;d=l>>>3;l=d<<1;f=213536+(l<<2)|0;k=c[53374]|0;h=1<<d;do{if((k&h|0)==0){c[53374]=k|h;s=f;t=213536+(l+2<<2)|0}else{d=213536+(l+2<<2)|0;g=c[d>>2]|0;if(g>>>0>=(c[53378]|0)>>>0){s=g;t=d;break}fc();return 0}}while(0);c[t>>2]=q;c[s+12>>2]=q;c[q+8>>2]=s;c[q+12>>2]=f}c[53376]=m;c[53379]=e;n=i;return n|0}l=c[53375]|0;if((l|0)==0){o=b;break}h=(l&-l)-1|0;l=h>>>12&16;k=h>>>(l>>>0);h=k>>>5&8;p=k>>>(h>>>0);k=p>>>2&4;r=p>>>(k>>>0);p=r>>>1&2;d=r>>>(p>>>0);r=d>>>1&1;g=c[213800+((h|l|k|p|r)+(d>>>(r>>>0))<<2)>>2]|0;r=g;d=g;p=(c[g+4>>2]&-8)-b|0;while(1){g=c[r+16>>2]|0;if((g|0)==0){k=c[r+20>>2]|0;if((k|0)==0){break}else{u=k}}else{u=g}g=(c[u+4>>2]&-8)-b|0;k=g>>>0<p>>>0;r=u;d=k?u:d;p=k?g:p}r=d;i=c[53378]|0;if(r>>>0<i>>>0){fc();return 0}e=r+b|0;m=e;if(r>>>0>=e>>>0){fc();return 0}e=c[d+24>>2]|0;f=c[d+12>>2]|0;do{if((f|0)==(d|0)){q=d+20|0;g=c[q>>2]|0;if((g|0)==0){k=d+16|0;l=c[k>>2]|0;if((l|0)==0){v=0;break}else{w=l;x=k}}else{w=g;x=q}while(1){q=w+20|0;g=c[q>>2]|0;if((g|0)!=0){w=g;x=q;continue}q=w+16|0;g=c[q>>2]|0;if((g|0)==0){break}else{w=g;x=q}}if(x>>>0<i>>>0){fc();return 0}else{c[x>>2]=0;v=w;break}}else{q=c[d+8>>2]|0;if(q>>>0<i>>>0){fc();return 0}g=q+12|0;if((c[g>>2]|0)!=(d|0)){fc();return 0}k=f+8|0;if((c[k>>2]|0)==(d|0)){c[g>>2]=f;c[k>>2]=q;v=f;break}else{fc();return 0}}}while(0);a:do{if((e|0)!=0){f=d+28|0;i=213800+(c[f>>2]<<2)|0;do{if((d|0)==(c[i>>2]|0)){c[i>>2]=v;if((v|0)!=0){break}c[53375]=c[53375]&~(1<<c[f>>2]);break a}else{if(e>>>0<(c[53378]|0)>>>0){fc();return 0}q=e+16|0;if((c[q>>2]|0)==(d|0)){c[q>>2]=v}else{c[e+20>>2]=v}if((v|0)==0){break a}}}while(0);if(v>>>0<(c[53378]|0)>>>0){fc();return 0}c[v+24>>2]=e;f=c[d+16>>2]|0;do{if((f|0)!=0){if(f>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[v+16>>2]=f;c[f+24>>2]=v;break}}}while(0);f=c[d+20>>2]|0;if((f|0)==0){break}if(f>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[v+20>>2]=f;c[f+24>>2]=v;break}}}while(0);if(p>>>0<16>>>0){e=p+b|0;c[d+4>>2]=e|3;f=r+(e+4)|0;c[f>>2]=c[f>>2]|1}else{c[d+4>>2]=b|3;c[r+(b|4)>>2]=p|1;c[r+(p+b)>>2]=p;f=c[53376]|0;if((f|0)!=0){e=c[53379]|0;i=f>>>3;f=i<<1;q=213536+(f<<2)|0;k=c[53374]|0;g=1<<i;do{if((k&g|0)==0){c[53374]=k|g;y=q;z=213536+(f+2<<2)|0}else{i=213536+(f+2<<2)|0;l=c[i>>2]|0;if(l>>>0>=(c[53378]|0)>>>0){y=l;z=i;break}fc();return 0}}while(0);c[z>>2]=e;c[y+12>>2]=e;c[e+8>>2]=y;c[e+12>>2]=q}c[53376]=p;c[53379]=m}n=d+8|0;return n|0}else{if(a>>>0>4294967231>>>0){o=-1;break}f=a+11|0;g=f&-8;k=c[53375]|0;if((k|0)==0){o=g;break}r=-g|0;i=f>>>8;do{if((i|0)==0){A=0}else{if(g>>>0>16777215>>>0){A=31;break}f=(i+1048320|0)>>>16&8;l=i<<f;h=(l+520192|0)>>>16&4;j=l<<h;l=(j+245760|0)>>>16&2;B=14-(h|f|l)+(j<<l>>>15)|0;A=g>>>((B+7|0)>>>0)&1|B<<1}}while(0);i=c[213800+(A<<2)>>2]|0;b:do{if((i|0)==0){C=0;D=r;E=0}else{if((A|0)==31){F=0}else{F=25-(A>>>1)|0}d=0;m=r;p=i;q=g<<F;e=0;while(1){B=c[p+4>>2]&-8;l=B-g|0;if(l>>>0<m>>>0){if((B|0)==(g|0)){C=p;D=l;E=p;break b}else{G=p;H=l}}else{G=d;H=m}l=c[p+20>>2]|0;B=c[p+16+(q>>>31<<2)>>2]|0;j=(l|0)==0|(l|0)==(B|0)?e:l;if((B|0)==0){C=G;D=H;E=j;break}else{d=G;m=H;p=B;q=q<<1;e=j}}}}while(0);if((E|0)==0&(C|0)==0){i=2<<A;r=k&(i|-i);if((r|0)==0){o=g;break}i=(r&-r)-1|0;r=i>>>12&16;e=i>>>(r>>>0);i=e>>>5&8;q=e>>>(i>>>0);e=q>>>2&4;p=q>>>(e>>>0);q=p>>>1&2;m=p>>>(q>>>0);p=m>>>1&1;I=c[213800+((i|r|e|q|p)+(m>>>(p>>>0))<<2)>>2]|0}else{I=E}if((I|0)==0){J=D;K=C}else{p=I;m=D;q=C;while(1){e=(c[p+4>>2]&-8)-g|0;r=e>>>0<m>>>0;i=r?e:m;e=r?p:q;r=c[p+16>>2]|0;if((r|0)!=0){p=r;m=i;q=e;continue}r=c[p+20>>2]|0;if((r|0)==0){J=i;K=e;break}else{p=r;m=i;q=e}}}if((K|0)==0){o=g;break}if(J>>>0>=((c[53376]|0)-g|0)>>>0){o=g;break}q=K;m=c[53378]|0;if(q>>>0<m>>>0){fc();return 0}p=q+g|0;k=p;if(q>>>0>=p>>>0){fc();return 0}e=c[K+24>>2]|0;i=c[K+12>>2]|0;do{if((i|0)==(K|0)){r=K+20|0;d=c[r>>2]|0;if((d|0)==0){j=K+16|0;B=c[j>>2]|0;if((B|0)==0){L=0;break}else{M=B;N=j}}else{M=d;N=r}while(1){r=M+20|0;d=c[r>>2]|0;if((d|0)!=0){M=d;N=r;continue}r=M+16|0;d=c[r>>2]|0;if((d|0)==0){break}else{M=d;N=r}}if(N>>>0<m>>>0){fc();return 0}else{c[N>>2]=0;L=M;break}}else{r=c[K+8>>2]|0;if(r>>>0<m>>>0){fc();return 0}d=r+12|0;if((c[d>>2]|0)!=(K|0)){fc();return 0}j=i+8|0;if((c[j>>2]|0)==(K|0)){c[d>>2]=i;c[j>>2]=r;L=i;break}else{fc();return 0}}}while(0);c:do{if((e|0)!=0){i=K+28|0;m=213800+(c[i>>2]<<2)|0;do{if((K|0)==(c[m>>2]|0)){c[m>>2]=L;if((L|0)!=0){break}c[53375]=c[53375]&~(1<<c[i>>2]);break c}else{if(e>>>0<(c[53378]|0)>>>0){fc();return 0}r=e+16|0;if((c[r>>2]|0)==(K|0)){c[r>>2]=L}else{c[e+20>>2]=L}if((L|0)==0){break c}}}while(0);if(L>>>0<(c[53378]|0)>>>0){fc();return 0}c[L+24>>2]=e;i=c[K+16>>2]|0;do{if((i|0)!=0){if(i>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[L+16>>2]=i;c[i+24>>2]=L;break}}}while(0);i=c[K+20>>2]|0;if((i|0)==0){break}if(i>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[L+20>>2]=i;c[i+24>>2]=L;break}}}while(0);d:do{if(J>>>0<16>>>0){e=J+g|0;c[K+4>>2]=e|3;i=q+(e+4)|0;c[i>>2]=c[i>>2]|1}else{c[K+4>>2]=g|3;c[q+(g|4)>>2]=J|1;c[q+(J+g)>>2]=J;i=J>>>3;if(J>>>0<256>>>0){e=i<<1;m=213536+(e<<2)|0;r=c[53374]|0;j=1<<i;do{if((r&j|0)==0){c[53374]=r|j;O=m;P=213536+(e+2<<2)|0}else{i=213536+(e+2<<2)|0;d=c[i>>2]|0;if(d>>>0>=(c[53378]|0)>>>0){O=d;P=i;break}fc();return 0}}while(0);c[P>>2]=k;c[O+12>>2]=k;c[q+(g+8)>>2]=O;c[q+(g+12)>>2]=m;break}e=p;j=J>>>8;do{if((j|0)==0){Q=0}else{if(J>>>0>16777215>>>0){Q=31;break}r=(j+1048320|0)>>>16&8;i=j<<r;d=(i+520192|0)>>>16&4;B=i<<d;i=(B+245760|0)>>>16&2;l=14-(d|r|i)+(B<<i>>>15)|0;Q=J>>>((l+7|0)>>>0)&1|l<<1}}while(0);j=213800+(Q<<2)|0;c[q+(g+28)>>2]=Q;c[q+(g+20)>>2]=0;c[q+(g+16)>>2]=0;m=c[53375]|0;l=1<<Q;if((m&l|0)==0){c[53375]=m|l;c[j>>2]=e;c[q+(g+24)>>2]=j;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break}l=c[j>>2]|0;if((Q|0)==31){R=0}else{R=25-(Q>>>1)|0}e:do{if((c[l+4>>2]&-8|0)==(J|0)){S=l}else{j=l;m=J<<R;while(1){T=j+16+(m>>>31<<2)|0;i=c[T>>2]|0;if((i|0)==0){break}if((c[i+4>>2]&-8|0)==(J|0)){S=i;break e}else{j=i;m=m<<1}}if(T>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[T>>2]=e;c[q+(g+24)>>2]=j;c[q+(g+12)>>2]=e;c[q+(g+8)>>2]=e;break d}}}while(0);l=S+8|0;m=c[l>>2]|0;i=c[53378]|0;if(S>>>0<i>>>0){fc();return 0}if(m>>>0<i>>>0){fc();return 0}else{c[m+12>>2]=e;c[l>>2]=e;c[q+(g+8)>>2]=m;c[q+(g+12)>>2]=S;c[q+(g+24)>>2]=0;break}}}while(0);n=K+8|0;return n|0}}while(0);K=c[53376]|0;if(o>>>0<=K>>>0){S=K-o|0;T=c[53379]|0;if(S>>>0>15>>>0){J=T;c[53379]=J+o;c[53376]=S;c[J+(o+4)>>2]=S|1;c[J+K>>2]=S;c[T+4>>2]=o|3}else{c[53376]=0;c[53379]=0;c[T+4>>2]=K|3;S=T+(K+4)|0;c[S>>2]=c[S>>2]|1}n=T+8|0;return n|0}T=c[53377]|0;if(o>>>0<T>>>0){S=T-o|0;c[53377]=S;T=c[53380]|0;K=T;c[53380]=K+o;c[K+(o+4)>>2]=S|1;c[T+4>>2]=o|3;n=T+8|0;return n|0}do{if((c[44322]|0)==0){T=Hb(30)|0;if((T-1&T|0)==0){c[44324]=T;c[44323]=T;c[44325]=-1;c[44326]=-1;c[44327]=0;c[53485]=0;c[44322]=(zc(0)|0)&-16^1431655768;break}else{fc();return 0}}}while(0);T=o+48|0;S=c[44324]|0;K=o+47|0;J=S+K|0;R=-S|0;S=J&R;if(S>>>0<=o>>>0){n=0;return n|0}Q=c[53484]|0;do{if((Q|0)!=0){O=c[53482]|0;P=O+S|0;if(P>>>0<=O>>>0|P>>>0>Q>>>0){n=0}else{break}return n|0}}while(0);f:do{if((c[53485]&4|0)==0){Q=c[53380]|0;g:do{if((Q|0)==0){U=182}else{P=Q;O=213944;while(1){V=O|0;L=c[V>>2]|0;if(L>>>0<=P>>>0){W=O+4|0;if((L+(c[W>>2]|0)|0)>>>0>P>>>0){break}}L=c[O+8>>2]|0;if((L|0)==0){U=182;break g}else{O=L}}if((O|0)==0){U=182;break}P=J-(c[53377]|0)&R;if(P>>>0>=2147483647>>>0){X=0;break}e=Ub(P|0)|0;L=(e|0)==((c[V>>2]|0)+(c[W>>2]|0)|0);Y=L?e:-1;Z=L?P:0;_=e;$=P;U=191}}while(0);do{if((U|0)==182){Q=Ub(0)|0;if((Q|0)==-1){X=0;break}P=Q;e=c[44323]|0;L=e-1|0;if((L&P|0)==0){aa=S}else{aa=S-P+(L+P&-e)|0}e=c[53482]|0;P=e+aa|0;if(!(aa>>>0>o>>>0&aa>>>0<2147483647>>>0)){X=0;break}L=c[53484]|0;if((L|0)!=0){if(P>>>0<=e>>>0|P>>>0>L>>>0){X=0;break}}L=Ub(aa|0)|0;P=(L|0)==(Q|0);Y=P?Q:-1;Z=P?aa:0;_=L;$=aa;U=191}}while(0);h:do{if((U|0)==191){L=-$|0;if((Y|0)!=-1){ba=Z;ca=Y;U=202;break f}do{if((_|0)!=-1&$>>>0<2147483647>>>0&$>>>0<T>>>0){P=c[44324]|0;Q=K-$+P&-P;if(Q>>>0>=2147483647>>>0){da=$;break}if((Ub(Q|0)|0)==-1){Ub(L|0)|0;X=Z;break h}else{da=Q+$|0;break}}else{da=$}}while(0);if((_|0)==-1){X=Z}else{ba=da;ca=_;U=202;break f}}}while(0);c[53485]=c[53485]|4;ea=X;U=199}else{ea=0;U=199}}while(0);do{if((U|0)==199){if(S>>>0>=2147483647>>>0){break}X=Ub(S|0)|0;_=Ub(0)|0;if(!((_|0)!=-1&(X|0)!=-1&X>>>0<_>>>0)){break}da=_-X|0;_=da>>>0>(o+40|0)>>>0;if(_){ba=_?da:ea;ca=X;U=202}}}while(0);do{if((U|0)==202){ea=(c[53482]|0)+ba|0;c[53482]=ea;if(ea>>>0>(c[53483]|0)>>>0){c[53483]=ea}ea=c[53380]|0;i:do{if((ea|0)==0){S=c[53378]|0;if((S|0)==0|ca>>>0<S>>>0){c[53378]=ca}c[53486]=ca;c[53487]=ba;c[53489]=0;c[53383]=c[44322];c[53382]=-1;S=0;do{X=S<<1;da=213536+(X<<2)|0;c[213536+(X+3<<2)>>2]=da;c[213536+(X+2<<2)>>2]=da;S=S+1|0;}while(S>>>0<32>>>0);S=ca+8|0;if((S&7|0)==0){fa=0}else{fa=-S&7}S=ba-40-fa|0;c[53380]=ca+fa;c[53377]=S;c[ca+(fa+4)>>2]=S|1;c[ca+(ba-36)>>2]=40;c[53381]=c[44326]}else{S=213944;while(1){ga=c[S>>2]|0;ha=S+4|0;ia=c[ha>>2]|0;if((ca|0)==(ga+ia|0)){U=214;break}da=c[S+8>>2]|0;if((da|0)==0){break}else{S=da}}do{if((U|0)==214){if((c[S+12>>2]&8|0)!=0){break}da=ea;if(!(da>>>0>=ga>>>0&da>>>0<ca>>>0)){break}c[ha>>2]=ia+ba;da=c[53380]|0;X=(c[53377]|0)+ba|0;_=da;Z=da+8|0;if((Z&7|0)==0){ja=0}else{ja=-Z&7}Z=X-ja|0;c[53380]=_+ja;c[53377]=Z;c[_+(ja+4)>>2]=Z|1;c[_+(X+4)>>2]=40;c[53381]=c[44326];break i}}while(0);if(ca>>>0<(c[53378]|0)>>>0){c[53378]=ca}S=ca+ba|0;X=213944;while(1){ka=X|0;if((c[ka>>2]|0)==(S|0)){U=224;break}_=c[X+8>>2]|0;if((_|0)==0){break}else{X=_}}do{if((U|0)==224){if((c[X+12>>2]&8|0)!=0){break}c[ka>>2]=ca;S=X+4|0;c[S>>2]=(c[S>>2]|0)+ba;S=ca+8|0;if((S&7|0)==0){la=0}else{la=-S&7}S=ca+(ba+8)|0;if((S&7|0)==0){ma=0}else{ma=-S&7}S=ca+(ma+ba)|0;_=S;Z=la+o|0;da=ca+Z|0;$=da;K=S-(ca+la)-o|0;c[ca+(la+4)>>2]=o|3;j:do{if((_|0)==(c[53380]|0)){T=(c[53377]|0)+K|0;c[53377]=T;c[53380]=$;c[ca+(Z+4)>>2]=T|1}else{if((_|0)==(c[53379]|0)){T=(c[53376]|0)+K|0;c[53376]=T;c[53379]=$;c[ca+(Z+4)>>2]=T|1;c[ca+(T+Z)>>2]=T;break}T=ba+4|0;Y=c[ca+(T+ma)>>2]|0;if((Y&3|0)==1){aa=Y&-8;W=Y>>>3;k:do{if(Y>>>0<256>>>0){V=c[ca+((ma|8)+ba)>>2]|0;R=c[ca+(ba+12+ma)>>2]|0;J=213536+(W<<1<<2)|0;do{if((V|0)!=(J|0)){if(V>>>0<(c[53378]|0)>>>0){fc();return 0}if((c[V+12>>2]|0)==(_|0)){break}fc();return 0}}while(0);if((R|0)==(V|0)){c[53374]=c[53374]&~(1<<W);break}do{if((R|0)==(J|0)){na=R+8|0}else{if(R>>>0<(c[53378]|0)>>>0){fc();return 0}L=R+8|0;if((c[L>>2]|0)==(_|0)){na=L;break}fc();return 0}}while(0);c[V+12>>2]=R;c[na>>2]=V}else{J=S;L=c[ca+((ma|24)+ba)>>2]|0;O=c[ca+(ba+12+ma)>>2]|0;do{if((O|0)==(J|0)){Q=ma|16;P=ca+(T+Q)|0;e=c[P>>2]|0;if((e|0)==0){M=ca+(Q+ba)|0;Q=c[M>>2]|0;if((Q|0)==0){oa=0;break}else{pa=Q;qa=M}}else{pa=e;qa=P}while(1){P=pa+20|0;e=c[P>>2]|0;if((e|0)!=0){pa=e;qa=P;continue}P=pa+16|0;e=c[P>>2]|0;if((e|0)==0){break}else{pa=e;qa=P}}if(qa>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[qa>>2]=0;oa=pa;break}}else{P=c[ca+((ma|8)+ba)>>2]|0;if(P>>>0<(c[53378]|0)>>>0){fc();return 0}e=P+12|0;if((c[e>>2]|0)!=(J|0)){fc();return 0}M=O+8|0;if((c[M>>2]|0)==(J|0)){c[e>>2]=O;c[M>>2]=P;oa=O;break}else{fc();return 0}}}while(0);if((L|0)==0){break}O=ca+(ba+28+ma)|0;V=213800+(c[O>>2]<<2)|0;do{if((J|0)==(c[V>>2]|0)){c[V>>2]=oa;if((oa|0)!=0){break}c[53375]=c[53375]&~(1<<c[O>>2]);break k}else{if(L>>>0<(c[53378]|0)>>>0){fc();return 0}R=L+16|0;if((c[R>>2]|0)==(J|0)){c[R>>2]=oa}else{c[L+20>>2]=oa}if((oa|0)==0){break k}}}while(0);if(oa>>>0<(c[53378]|0)>>>0){fc();return 0}c[oa+24>>2]=L;J=ma|16;O=c[ca+(J+ba)>>2]|0;do{if((O|0)!=0){if(O>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[oa+16>>2]=O;c[O+24>>2]=oa;break}}}while(0);O=c[ca+(T+J)>>2]|0;if((O|0)==0){break}if(O>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[oa+20>>2]=O;c[O+24>>2]=oa;break}}}while(0);ra=ca+((aa|ma)+ba)|0;sa=aa+K|0}else{ra=_;sa=K}T=ra+4|0;c[T>>2]=c[T>>2]&-2;c[ca+(Z+4)>>2]=sa|1;c[ca+(sa+Z)>>2]=sa;T=sa>>>3;if(sa>>>0<256>>>0){W=T<<1;Y=213536+(W<<2)|0;O=c[53374]|0;L=1<<T;do{if((O&L|0)==0){c[53374]=O|L;ta=Y;ua=213536+(W+2<<2)|0}else{T=213536+(W+2<<2)|0;V=c[T>>2]|0;if(V>>>0>=(c[53378]|0)>>>0){ta=V;ua=T;break}fc();return 0}}while(0);c[ua>>2]=$;c[ta+12>>2]=$;c[ca+(Z+8)>>2]=ta;c[ca+(Z+12)>>2]=Y;break}W=da;L=sa>>>8;do{if((L|0)==0){va=0}else{if(sa>>>0>16777215>>>0){va=31;break}O=(L+1048320|0)>>>16&8;aa=L<<O;T=(aa+520192|0)>>>16&4;V=aa<<T;aa=(V+245760|0)>>>16&2;R=14-(T|O|aa)+(V<<aa>>>15)|0;va=sa>>>((R+7|0)>>>0)&1|R<<1}}while(0);L=213800+(va<<2)|0;c[ca+(Z+28)>>2]=va;c[ca+(Z+20)>>2]=0;c[ca+(Z+16)>>2]=0;Y=c[53375]|0;R=1<<va;if((Y&R|0)==0){c[53375]=Y|R;c[L>>2]=W;c[ca+(Z+24)>>2]=L;c[ca+(Z+12)>>2]=W;c[ca+(Z+8)>>2]=W;break}R=c[L>>2]|0;if((va|0)==31){wa=0}else{wa=25-(va>>>1)|0}l:do{if((c[R+4>>2]&-8|0)==(sa|0)){xa=R}else{L=R;Y=sa<<wa;while(1){ya=L+16+(Y>>>31<<2)|0;aa=c[ya>>2]|0;if((aa|0)==0){break}if((c[aa+4>>2]&-8|0)==(sa|0)){xa=aa;break l}else{L=aa;Y=Y<<1}}if(ya>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[ya>>2]=W;c[ca+(Z+24)>>2]=L;c[ca+(Z+12)>>2]=W;c[ca+(Z+8)>>2]=W;break j}}}while(0);R=xa+8|0;Y=c[R>>2]|0;J=c[53378]|0;if(xa>>>0<J>>>0){fc();return 0}if(Y>>>0<J>>>0){fc();return 0}else{c[Y+12>>2]=W;c[R>>2]=W;c[ca+(Z+8)>>2]=Y;c[ca+(Z+12)>>2]=xa;c[ca+(Z+24)>>2]=0;break}}}while(0);n=ca+(la|8)|0;return n|0}}while(0);X=ea;Z=213944;while(1){za=c[Z>>2]|0;if(za>>>0<=X>>>0){Aa=c[Z+4>>2]|0;Ba=za+Aa|0;if(Ba>>>0>X>>>0){break}}Z=c[Z+8>>2]|0}Z=za+(Aa-39)|0;if((Z&7|0)==0){Ca=0}else{Ca=-Z&7}Z=za+(Aa-47+Ca)|0;da=Z>>>0<(ea+16|0)>>>0?X:Z;Z=da+8|0;$=ca+8|0;if(($&7|0)==0){Da=0}else{Da=-$&7}$=ba-40-Da|0;c[53380]=ca+Da;c[53377]=$;c[ca+(Da+4)>>2]=$|1;c[ca+(ba-36)>>2]=40;c[53381]=c[44326];c[da+4>>2]=27;c[Z>>2]=c[53486];c[Z+4>>2]=c[53487];c[Z+8>>2]=c[53488];c[Z+12>>2]=c[53489];c[53486]=ca;c[53487]=ba;c[53489]=0;c[53488]=Z;Z=da+28|0;c[Z>>2]=7;if((da+32|0)>>>0<Ba>>>0){$=Z;while(1){Z=$+4|0;c[Z>>2]=7;if(($+8|0)>>>0<Ba>>>0){$=Z}else{break}}}if((da|0)==(X|0)){break}$=da-ea|0;Z=X+($+4)|0;c[Z>>2]=c[Z>>2]&-2;c[ea+4>>2]=$|1;c[X+$>>2]=$;Z=$>>>3;if($>>>0<256>>>0){K=Z<<1;_=213536+(K<<2)|0;S=c[53374]|0;j=1<<Z;do{if((S&j|0)==0){c[53374]=S|j;Ea=_;Fa=213536+(K+2<<2)|0}else{Z=213536+(K+2<<2)|0;Y=c[Z>>2]|0;if(Y>>>0>=(c[53378]|0)>>>0){Ea=Y;Fa=Z;break}fc();return 0}}while(0);c[Fa>>2]=ea;c[Ea+12>>2]=ea;c[ea+8>>2]=Ea;c[ea+12>>2]=_;break}K=ea;j=$>>>8;do{if((j|0)==0){Ga=0}else{if($>>>0>16777215>>>0){Ga=31;break}S=(j+1048320|0)>>>16&8;X=j<<S;da=(X+520192|0)>>>16&4;Z=X<<da;X=(Z+245760|0)>>>16&2;Y=14-(da|S|X)+(Z<<X>>>15)|0;Ga=$>>>((Y+7|0)>>>0)&1|Y<<1}}while(0);j=213800+(Ga<<2)|0;c[ea+28>>2]=Ga;c[ea+20>>2]=0;c[ea+16>>2]=0;_=c[53375]|0;Y=1<<Ga;if((_&Y|0)==0){c[53375]=_|Y;c[j>>2]=K;c[ea+24>>2]=j;c[ea+12>>2]=ea;c[ea+8>>2]=ea;break}Y=c[j>>2]|0;if((Ga|0)==31){Ha=0}else{Ha=25-(Ga>>>1)|0}m:do{if((c[Y+4>>2]&-8|0)==($|0)){Ia=Y}else{j=Y;_=$<<Ha;while(1){Ja=j+16+(_>>>31<<2)|0;X=c[Ja>>2]|0;if((X|0)==0){break}if((c[X+4>>2]&-8|0)==($|0)){Ia=X;break m}else{j=X;_=_<<1}}if(Ja>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[Ja>>2]=K;c[ea+24>>2]=j;c[ea+12>>2]=ea;c[ea+8>>2]=ea;break i}}}while(0);$=Ia+8|0;Y=c[$>>2]|0;_=c[53378]|0;if(Ia>>>0<_>>>0){fc();return 0}if(Y>>>0<_>>>0){fc();return 0}else{c[Y+12>>2]=K;c[$>>2]=K;c[ea+8>>2]=Y;c[ea+12>>2]=Ia;c[ea+24>>2]=0;break}}}while(0);ea=c[53377]|0;if(ea>>>0<=o>>>0){break}Y=ea-o|0;c[53377]=Y;ea=c[53380]|0;$=ea;c[53380]=$+o;c[$+(o+4)>>2]=Y|1;c[ea+4>>2]=o|3;n=ea+8|0;return n|0}}while(0);c[(Vb()|0)>>2]=12;n=0;return n|0}function eF(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;if((a|0)==0){return}b=a-8|0;d=b;e=c[53378]|0;if(b>>>0<e>>>0){fc()}f=c[a-4>>2]|0;g=f&3;if((g|0)==1){fc()}h=f&-8;i=a+(h-8)|0;j=i;a:do{if((f&1|0)==0){k=c[b>>2]|0;if((g|0)==0){return}l=-8-k|0;m=a+l|0;n=m;o=k+h|0;if(m>>>0<e>>>0){fc()}if((n|0)==(c[53379]|0)){p=a+(h-4)|0;if((c[p>>2]&3|0)!=3){q=n;r=o;break}c[53376]=o;c[p>>2]=c[p>>2]&-2;c[a+(l+4)>>2]=o|1;c[i>>2]=o;return}p=k>>>3;if(k>>>0<256>>>0){k=c[a+(l+8)>>2]|0;s=c[a+(l+12)>>2]|0;t=213536+(p<<1<<2)|0;do{if((k|0)!=(t|0)){if(k>>>0<e>>>0){fc()}if((c[k+12>>2]|0)==(n|0)){break}fc()}}while(0);if((s|0)==(k|0)){c[53374]=c[53374]&~(1<<p);q=n;r=o;break}do{if((s|0)==(t|0)){u=s+8|0}else{if(s>>>0<e>>>0){fc()}v=s+8|0;if((c[v>>2]|0)==(n|0)){u=v;break}fc()}}while(0);c[k+12>>2]=s;c[u>>2]=k;q=n;r=o;break}t=m;p=c[a+(l+24)>>2]|0;v=c[a+(l+12)>>2]|0;do{if((v|0)==(t|0)){w=a+(l+20)|0;x=c[w>>2]|0;if((x|0)==0){y=a+(l+16)|0;z=c[y>>2]|0;if((z|0)==0){A=0;break}else{B=z;C=y}}else{B=x;C=w}while(1){w=B+20|0;x=c[w>>2]|0;if((x|0)!=0){B=x;C=w;continue}w=B+16|0;x=c[w>>2]|0;if((x|0)==0){break}else{B=x;C=w}}if(C>>>0<e>>>0){fc()}else{c[C>>2]=0;A=B;break}}else{w=c[a+(l+8)>>2]|0;if(w>>>0<e>>>0){fc()}x=w+12|0;if((c[x>>2]|0)!=(t|0)){fc()}y=v+8|0;if((c[y>>2]|0)==(t|0)){c[x>>2]=v;c[y>>2]=w;A=v;break}else{fc()}}}while(0);if((p|0)==0){q=n;r=o;break}v=a+(l+28)|0;m=213800+(c[v>>2]<<2)|0;do{if((t|0)==(c[m>>2]|0)){c[m>>2]=A;if((A|0)!=0){break}c[53375]=c[53375]&~(1<<c[v>>2]);q=n;r=o;break a}else{if(p>>>0<(c[53378]|0)>>>0){fc()}k=p+16|0;if((c[k>>2]|0)==(t|0)){c[k>>2]=A}else{c[p+20>>2]=A}if((A|0)==0){q=n;r=o;break a}}}while(0);if(A>>>0<(c[53378]|0)>>>0){fc()}c[A+24>>2]=p;t=c[a+(l+16)>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[53378]|0)>>>0){fc()}else{c[A+16>>2]=t;c[t+24>>2]=A;break}}}while(0);t=c[a+(l+20)>>2]|0;if((t|0)==0){q=n;r=o;break}if(t>>>0<(c[53378]|0)>>>0){fc()}else{c[A+20>>2]=t;c[t+24>>2]=A;q=n;r=o;break}}else{q=d;r=h}}while(0);d=q;if(d>>>0>=i>>>0){fc()}A=a+(h-4)|0;e=c[A>>2]|0;if((e&1|0)==0){fc()}do{if((e&2|0)==0){if((j|0)==(c[53380]|0)){B=(c[53377]|0)+r|0;c[53377]=B;c[53380]=q;c[q+4>>2]=B|1;if((q|0)!=(c[53379]|0)){return}c[53379]=0;c[53376]=0;return}if((j|0)==(c[53379]|0)){B=(c[53376]|0)+r|0;c[53376]=B;c[53379]=q;c[q+4>>2]=B|1;c[d+B>>2]=B;return}B=(e&-8)+r|0;C=e>>>3;b:do{if(e>>>0<256>>>0){u=c[a+h>>2]|0;g=c[a+(h|4)>>2]|0;b=213536+(C<<1<<2)|0;do{if((u|0)!=(b|0)){if(u>>>0<(c[53378]|0)>>>0){fc()}if((c[u+12>>2]|0)==(j|0)){break}fc()}}while(0);if((g|0)==(u|0)){c[53374]=c[53374]&~(1<<C);break}do{if((g|0)==(b|0)){D=g+8|0}else{if(g>>>0<(c[53378]|0)>>>0){fc()}f=g+8|0;if((c[f>>2]|0)==(j|0)){D=f;break}fc()}}while(0);c[u+12>>2]=g;c[D>>2]=u}else{b=i;f=c[a+(h+16)>>2]|0;t=c[a+(h|4)>>2]|0;do{if((t|0)==(b|0)){p=a+(h+12)|0;v=c[p>>2]|0;if((v|0)==0){m=a+(h+8)|0;k=c[m>>2]|0;if((k|0)==0){E=0;break}else{F=k;G=m}}else{F=v;G=p}while(1){p=F+20|0;v=c[p>>2]|0;if((v|0)!=0){F=v;G=p;continue}p=F+16|0;v=c[p>>2]|0;if((v|0)==0){break}else{F=v;G=p}}if(G>>>0<(c[53378]|0)>>>0){fc()}else{c[G>>2]=0;E=F;break}}else{p=c[a+h>>2]|0;if(p>>>0<(c[53378]|0)>>>0){fc()}v=p+12|0;if((c[v>>2]|0)!=(b|0)){fc()}m=t+8|0;if((c[m>>2]|0)==(b|0)){c[v>>2]=t;c[m>>2]=p;E=t;break}else{fc()}}}while(0);if((f|0)==0){break}t=a+(h+20)|0;u=213800+(c[t>>2]<<2)|0;do{if((b|0)==(c[u>>2]|0)){c[u>>2]=E;if((E|0)!=0){break}c[53375]=c[53375]&~(1<<c[t>>2]);break b}else{if(f>>>0<(c[53378]|0)>>>0){fc()}g=f+16|0;if((c[g>>2]|0)==(b|0)){c[g>>2]=E}else{c[f+20>>2]=E}if((E|0)==0){break b}}}while(0);if(E>>>0<(c[53378]|0)>>>0){fc()}c[E+24>>2]=f;b=c[a+(h+8)>>2]|0;do{if((b|0)!=0){if(b>>>0<(c[53378]|0)>>>0){fc()}else{c[E+16>>2]=b;c[b+24>>2]=E;break}}}while(0);b=c[a+(h+12)>>2]|0;if((b|0)==0){break}if(b>>>0<(c[53378]|0)>>>0){fc()}else{c[E+20>>2]=b;c[b+24>>2]=E;break}}}while(0);c[q+4>>2]=B|1;c[d+B>>2]=B;if((q|0)!=(c[53379]|0)){H=B;break}c[53376]=B;return}else{c[A>>2]=e&-2;c[q+4>>2]=r|1;c[d+r>>2]=r;H=r}}while(0);r=H>>>3;if(H>>>0<256>>>0){d=r<<1;e=213536+(d<<2)|0;A=c[53374]|0;E=1<<r;do{if((A&E|0)==0){c[53374]=A|E;I=e;J=213536+(d+2<<2)|0}else{r=213536+(d+2<<2)|0;h=c[r>>2]|0;if(h>>>0>=(c[53378]|0)>>>0){I=h;J=r;break}fc()}}while(0);c[J>>2]=q;c[I+12>>2]=q;c[q+8>>2]=I;c[q+12>>2]=e;return}e=q;I=H>>>8;do{if((I|0)==0){K=0}else{if(H>>>0>16777215>>>0){K=31;break}J=(I+1048320|0)>>>16&8;d=I<<J;E=(d+520192|0)>>>16&4;A=d<<E;d=(A+245760|0)>>>16&2;r=14-(E|J|d)+(A<<d>>>15)|0;K=H>>>((r+7|0)>>>0)&1|r<<1}}while(0);I=213800+(K<<2)|0;c[q+28>>2]=K;c[q+20>>2]=0;c[q+16>>2]=0;r=c[53375]|0;d=1<<K;c:do{if((r&d|0)==0){c[53375]=r|d;c[I>>2]=e;c[q+24>>2]=I;c[q+12>>2]=q;c[q+8>>2]=q}else{A=c[I>>2]|0;if((K|0)==31){L=0}else{L=25-(K>>>1)|0}d:do{if((c[A+4>>2]&-8|0)==(H|0)){M=A}else{J=A;E=H<<L;while(1){N=J+16+(E>>>31<<2)|0;h=c[N>>2]|0;if((h|0)==0){break}if((c[h+4>>2]&-8|0)==(H|0)){M=h;break d}else{J=h;E=E<<1}}if(N>>>0<(c[53378]|0)>>>0){fc()}else{c[N>>2]=e;c[q+24>>2]=J;c[q+12>>2]=q;c[q+8>>2]=q;break c}}}while(0);A=M+8|0;B=c[A>>2]|0;E=c[53378]|0;if(M>>>0<E>>>0){fc()}if(B>>>0<E>>>0){fc()}else{c[B+12>>2]=e;c[A>>2]=e;c[q+8>>2]=B;c[q+12>>2]=M;c[q+24>>2]=0;break}}}while(0);q=(c[53382]|0)-1|0;c[53382]=q;if((q|0)==0){O=213952}else{return}while(1){q=c[O>>2]|0;if((q|0)==0){break}else{O=q+8|0}}c[53382]=-1;return}function fF(a,b){a=a|0;b=b|0;var d=0,e=0;do{if((a|0)==0){d=0}else{e=da(b,a)|0;if((b|a)>>>0<=65535>>>0){d=e;break}d=((e>>>0)/(a>>>0)|0|0)==(b|0)?e:-1}}while(0);b=dF(d)|0;if((b|0)==0){return b|0}if((c[b-4>>2]&3|0)==0){return b|0}vF(b|0,0,d|0)|0;return b|0}function gF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if((a|0)==0){d=dF(b)|0;return d|0}if(b>>>0>4294967231>>>0){c[(Vb()|0)>>2]=12;d=0;return d|0}if(b>>>0<11>>>0){e=16}else{e=b+11&-8}f=hF(a-8|0,e)|0;if((f|0)!=0){d=f+8|0;return d|0}f=dF(b)|0;if((f|0)==0){d=0;return d|0}e=c[a-4>>2]|0;g=(e&-8)-((e&3|0)==0?8:4)|0;tF(f|0,a|0,g>>>0<b>>>0?g:b)|0;eF(a);d=f;return d|0}function hF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=a+4|0;e=c[d>>2]|0;f=e&-8;g=a;h=g+f|0;i=h;j=c[53378]|0;if(g>>>0<j>>>0){fc();return 0}k=e&3;if(!((k|0)!=1&g>>>0<h>>>0)){fc();return 0}l=g+(f|4)|0;m=c[l>>2]|0;if((m&1|0)==0){fc();return 0}if((k|0)==0){if(b>>>0<256>>>0){n=0;return n|0}do{if(f>>>0>=(b+4|0)>>>0){if((f-b|0)>>>0>c[44324]<<1>>>0){break}else{n=a}return n|0}}while(0);n=0;return n|0}if(f>>>0>=b>>>0){k=f-b|0;if(k>>>0<=15>>>0){n=a;return n|0}c[d>>2]=e&1|b|2;c[g+(b+4)>>2]=k|3;c[l>>2]=c[l>>2]|1;iF(g+b|0,k);n=a;return n|0}if((i|0)==(c[53380]|0)){k=(c[53377]|0)+f|0;if(k>>>0<=b>>>0){n=0;return n|0}l=k-b|0;c[d>>2]=e&1|b|2;c[g+(b+4)>>2]=l|1;c[53380]=g+b;c[53377]=l;n=a;return n|0}if((i|0)==(c[53379]|0)){l=(c[53376]|0)+f|0;if(l>>>0<b>>>0){n=0;return n|0}k=l-b|0;if(k>>>0>15>>>0){c[d>>2]=e&1|b|2;c[g+(b+4)>>2]=k|1;c[g+l>>2]=k;o=g+(l+4)|0;c[o>>2]=c[o>>2]&-2;p=g+b|0;q=k}else{c[d>>2]=e&1|l|2;e=g+(l+4)|0;c[e>>2]=c[e>>2]|1;p=0;q=0}c[53376]=q;c[53379]=p;n=a;return n|0}if((m&2|0)!=0){n=0;return n|0}p=(m&-8)+f|0;if(p>>>0<b>>>0){n=0;return n|0}q=p-b|0;e=m>>>3;a:do{if(m>>>0<256>>>0){l=c[g+(f+8)>>2]|0;k=c[g+(f+12)>>2]|0;o=213536+(e<<1<<2)|0;do{if((l|0)!=(o|0)){if(l>>>0<j>>>0){fc();return 0}if((c[l+12>>2]|0)==(i|0)){break}fc();return 0}}while(0);if((k|0)==(l|0)){c[53374]=c[53374]&~(1<<e);break}do{if((k|0)==(o|0)){r=k+8|0}else{if(k>>>0<j>>>0){fc();return 0}s=k+8|0;if((c[s>>2]|0)==(i|0)){r=s;break}fc();return 0}}while(0);c[l+12>>2]=k;c[r>>2]=l}else{o=h;s=c[g+(f+24)>>2]|0;t=c[g+(f+12)>>2]|0;do{if((t|0)==(o|0)){u=g+(f+20)|0;v=c[u>>2]|0;if((v|0)==0){w=g+(f+16)|0;x=c[w>>2]|0;if((x|0)==0){y=0;break}else{z=x;A=w}}else{z=v;A=u}while(1){u=z+20|0;v=c[u>>2]|0;if((v|0)!=0){z=v;A=u;continue}u=z+16|0;v=c[u>>2]|0;if((v|0)==0){break}else{z=v;A=u}}if(A>>>0<j>>>0){fc();return 0}else{c[A>>2]=0;y=z;break}}else{u=c[g+(f+8)>>2]|0;if(u>>>0<j>>>0){fc();return 0}v=u+12|0;if((c[v>>2]|0)!=(o|0)){fc();return 0}w=t+8|0;if((c[w>>2]|0)==(o|0)){c[v>>2]=t;c[w>>2]=u;y=t;break}else{fc();return 0}}}while(0);if((s|0)==0){break}t=g+(f+28)|0;l=213800+(c[t>>2]<<2)|0;do{if((o|0)==(c[l>>2]|0)){c[l>>2]=y;if((y|0)!=0){break}c[53375]=c[53375]&~(1<<c[t>>2]);break a}else{if(s>>>0<(c[53378]|0)>>>0){fc();return 0}k=s+16|0;if((c[k>>2]|0)==(o|0)){c[k>>2]=y}else{c[s+20>>2]=y}if((y|0)==0){break a}}}while(0);if(y>>>0<(c[53378]|0)>>>0){fc();return 0}c[y+24>>2]=s;o=c[g+(f+16)>>2]|0;do{if((o|0)!=0){if(o>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[y+16>>2]=o;c[o+24>>2]=y;break}}}while(0);o=c[g+(f+20)>>2]|0;if((o|0)==0){break}if(o>>>0<(c[53378]|0)>>>0){fc();return 0}else{c[y+20>>2]=o;c[o+24>>2]=y;break}}}while(0);if(q>>>0<16>>>0){c[d>>2]=p|c[d>>2]&1|2;y=g+(p|4)|0;c[y>>2]=c[y>>2]|1;n=a;return n|0}else{c[d>>2]=c[d>>2]&1|b|2;c[g+(b+4)>>2]=q|3;d=g+(p|4)|0;c[d>>2]=c[d>>2]|1;iF(g+b|0,q);n=a;return n|0}return 0}
+
+
+
+function ol(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0,D=0,E=0,F=0,G=0.0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0,Q=0,R=0;g=i;i=i+80|0;j=g|0;k=e&2130706432;if((e&8|0)==0){l=(k|0)==0?4:k}else{l=8}m=jk((d<<6)+64|0)|0;n=m;o=(d|0)>0;a:do{if(o){p=d-1|0;q=b+8|0;r=0;s=12.0;while(1){t=r+1|0;if((r|0)<(p|0)){u=b+(t<<4)|0;v=b+(t<<4)+8|0}else{u=b;v=q}w=+h[u>>3]- +h[b+(r<<4)>>3];x=+h[v>>3]- +h[b+(r<<4)+8>>3];y=+T(w*w+x*x)/3.0;z=s<y?s:y;if((t|0)<(d|0)){r=t;s=z}else{break}}if(!o){A=0;break}r=d-1|0;q=(l|0)==4;p=(k|0)==16777216;t=b+8|0;if((e&2113929216|0)==67108864){B=0;C=0;while(1){s=+h[b+(C<<4)>>3];y=+h[b+(C<<4)+8>>3];if((C|0)<(r|0)){D=C+1|0;E=b+(D<<4)|0;F=b+(D<<4)+8|0}else{E=b;F=t}x=+h[E>>3]-s;w=+h[F>>3]-y;G=z/+T(x*x+w*w)/3.0;D=B+1|0;H=n+(B<<4)|0;if(q){I=G*.5;h[H>>3]=s+x*I;h[n+(B<<4)+8>>3]=y+w*I}else{h[H>>3]=s;h[n+(B<<4)+8>>3]=y}H=B+2|0;h[n+(D<<4)>>3]=s+x*G;h[n+(D<<4)+8>>3]=y+w*G;D=B+3|0;I=1.0-G;h[n+(H<<4)>>3]=s+x*I;h[n+(H<<4)+8>>3]=y+w*I;if(q){I=1.0-G*.5;h[n+(D<<4)>>3]=s+x*I;h[n+(D<<4)+8>>3]=y+w*I;J=B+4|0}else{J=D}D=C+1|0;if((D|0)<(d|0)){B=J;C=D}else{A=J;break a}}}else{K=0;L=0}while(1){I=+h[b+(L<<4)>>3];w=+h[b+(L<<4)+8>>3];if((L|0)<(r|0)){C=L+1|0;M=b+(C<<4)|0;N=b+(C<<4)+8|0}else{M=b;N=t}y=+h[M>>3]-I;x=+h[N>>3]-w;s=z/+T(y*y+x*x);if(p){O=s*.5}else{O=s}C=K+1|0;B=n+(K<<4)|0;if(q){s=O*.5;h[B>>3]=I+y*s;h[n+(K<<4)+8>>3]=w+x*s}else{h[B>>3]=I;h[n+(K<<4)+8>>3]=w}B=K+2|0;h[n+(C<<4)>>3]=I+y*O;h[n+(C<<4)+8>>3]=w+x*O;C=K+3|0;s=1.0-O;h[n+(B<<4)>>3]=I+y*s;h[n+(B<<4)+8>>3]=w+x*s;if(q){s=1.0-O*.5;h[n+(C<<4)>>3]=I+y*s;h[n+(C<<4)+8>>3]=w+x*s;P=K+4|0}else{P=C}C=L+1|0;if((C|0)<(d|0)){K=P;L=C}else{A=P;break}}}else{A=0}}while(0);P=n+(A<<4)|0;c[P>>2]=c[m>>2];c[P+4>>2]=c[m+4>>2];c[P+8>>2]=c[m+8>>2];c[P+12>>2]=c[m+12>>2];P=m+16|0;L=n+(A+1<<4)|0;c[L>>2]=c[P>>2];c[L+4>>2]=c[P+4>>2];c[L+8>>2]=c[P+8>>2];c[L+12>>2]=c[P+12>>2];L=m+32|0;K=n+(A+2<<4)|0;c[K>>2]=c[L>>2];c[K+4>>2]=c[L+4>>2];c[K+8>>2]=c[L+8>>2];c[K+12>>2]=c[L+12>>2];if((l|0)==4){K=d*96|0;A=kk(K+32|0)|0;N=A;if(o){M=A+K|0;K=d*6|0;J=0;F=0;E=1;e=N;while(1){k=F<<2;v=e;u=n+(k<<4)|0;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];u=N+(E<<4)|0;v=n+((k|1)<<4)|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];u=N+(J+2<<4)|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];v=N+(J+3<<4)|0;u=n+((k|2)<<4)|0;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];v=N+(J+4<<4)|0;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];u=J+6|0;v=N+(J+5<<4)|0;q=n+((k|3)<<4)|0;c[v>>2]=c[q>>2];c[v+4>>2]=c[q+4>>2];c[v+8>>2]=c[q+8>>2];c[v+12>>2]=c[q+12>>2];q=F+1|0;if((q|0)<(d|0)){J=u;F=q;E=u|1;e=N+(u<<4)|0}else{break}}Q=K|1;R=M}else{Q=1;R=N}M=R;c[M>>2]=c[A>>2];c[M+4>>2]=c[A+4>>2];c[M+8>>2]=c[A+8>>2];c[M+12>>2]=c[A+12>>2];M=A+16|0;R=N+(Q<<4)|0;c[R>>2]=c[M>>2];c[R+4>>2]=c[M+4>>2];c[R+8>>2]=c[M+8>>2];c[R+12>>2]=c[M+12>>2];tB(a,M,Q,0,0,f&255);eF(A);eF(m);i=g;return}else if((l|0)==8){rB(a,b,d,f);if(!o){eF(m);i=g;return}o=j|0;A=j;Q=j+16|0;M=0;do{R=M*3|0;N=n+(R+2<<4)|0;c[A>>2]=c[N>>2];c[A+4>>2]=c[N+4>>2];c[A+8>>2]=c[N+8>>2];c[A+12>>2]=c[N+12>>2];N=n+(R+4<<4)|0;c[Q>>2]=c[N>>2];c[Q+4>>2]=c[N+4>>2];c[Q+8>>2]=c[N+8>>2];c[Q+12>>2]=c[N+12>>2];uB(a,o,2);M=M+1|0;}while((M|0)<(d|0));eF(m);i=g;return}else if((l|0)==16777216){M=d+1|0;o=jk(M<<4)|0;Q=o;if((d|0)>1){A=1;do{N=Q+(A<<4)|0;R=b+(A<<4)|0;c[N>>2]=c[R>>2];c[N+4>>2]=c[R+4>>2];c[N+8>>2]=c[R+8>>2];c[N+12>>2]=c[R+12>>2];A=A+1|0;}while((A|0)<(d|0))}A=d*3|0;R=n+(A+1<<4)|0;c[o>>2]=c[R>>2];c[o+4>>2]=c[R+4>>2];c[o+8>>2]=c[R+8>>2];c[o+12>>2]=c[R+12>>2];N=Q+(d<<4)|0;K=n+(A-1<<4)|0;c[N>>2]=c[K>>2];c[N+4>>2]=c[K+4>>2];c[N+8>>2]=c[K+8>>2];c[N+12>>2]=c[K+12>>2];rB(a,Q,M,f);eF(o);o=j;c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2];K=j+16|0;o=K;c[o>>2]=c[R>>2];c[o+4>>2]=c[R+4>>2];c[o+8>>2]=c[R+8>>2];c[o+12>>2]=c[R+12>>2];R=j+32|0;h[R>>3]=+h[K>>3]+(+h[j>>3]- +h[n+(A<<4)>>3]);h[j+40>>3]=+h[j+24>>3]+(+h[j+8>>3]- +h[n+(A<<4)+8>>3]);uB(a,K,2);K=R;c[o>>2]=c[K>>2];c[o+4>>2]=c[K+4>>2];c[o+8>>2]=c[K+8>>2];c[o+12>>2]=c[K+12>>2];uB(a,j|0,2);eF(m);i=g;return}else if((l|0)==33554432){K=d+2|0;o=jk(K<<4)|0;R=o;A=b;c[o>>2]=c[A>>2];c[o+4>>2]=c[A+4>>2];c[o+8>>2]=c[A+8>>2];c[o+12>>2]=c[A+12>>2];A=o+16|0;c[A>>2]=c[L>>2];c[A+4>>2]=c[L+4>>2];c[A+8>>2]=c[L+8>>2];c[A+12>>2]=c[L+12>>2];A=m+48|0;n=A;M=m+64|0;h[o+32>>3]=+h[L>>3]+(+h[n>>3]- +h[M>>3])/3.0;Q=m+56|0;N=m+72|0;h[o+40>>3]=+h[m+40>>3]+(+h[Q>>3]- +h[N>>3])/3.0;O=+h[n>>3];h[o+48>>3]=O+(O- +h[M>>3])/3.0;O=+h[Q>>3];h[o+56>>3]=O+(O- +h[N>>3])/3.0;if((K|0)>4){N=4;do{Q=R+(N<<4)|0;M=b+(N-2<<4)|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=c[M+4>>2];c[Q+8>>2]=c[M+8>>2];c[Q+12>>2]=c[M+12>>2];N=N+1|0;}while((N|0)<(K|0))}rB(a,R,K,f);eF(o);o=j;c[o>>2]=c[A>>2];c[o+4>>2]=c[A+4>>2];c[o+8>>2]=c[A+8>>2];c[o+12>>2]=c[A+12>>2];A=j+16|0;c[A>>2]=c[L>>2];c[A+4>>2]=c[L+4>>2];c[A+8>>2]=c[L+8>>2];c[A+12>>2]=c[L+12>>2];uB(a,j|0,2);eF(m);i=g;return}else if((l|0)==50331648){A=d+3|0;o=jk(A<<4)|0;K=o;R=b;c[o>>2]=c[R>>2];c[o+4>>2]=c[R+4>>2];c[o+8>>2]=c[R+8>>2];c[o+12>>2]=c[R+12>>2];R=b|0;O=+h[R>>3];N=P;h[o+16>>3]=O-(O- +h[N>>3])*.25;M=m+56|0;O=+h[b+8>>3]+(+h[M>>3]- +h[m+72>>3])/3.0;h[o+24>>3]=O;z=+h[R>>3];h[o+32>>3]=z-(z- +h[N>>3])*2.0;h[o+40>>3]=O;O=+h[R>>3];h[o+48>>3]=O-(O- +h[N>>3])*2.25;h[o+56>>3]=+h[M>>3];h[o+64>>3]=+h[m+48>>3];h[o+72>>3]=+h[M>>3];if((A|0)>4){M=4;do{N=K+(M<<4)|0;R=b+(M-3<<4)|0;c[N>>2]=c[R>>2];c[N+4>>2]=c[R+4>>2];c[N+8>>2]=c[R+8>>2];c[N+12>>2]=c[R+12>>2];M=M+1|0;}while((M|0)<(A|0))}rB(a,K,A,f);eF(o);eF(m);i=g;return}else if((l|0)==67108864){if((d|0)!=4){cc(155064,126504,688,169992)}o=jk(96)|0;A=b;c[o>>2]=c[A>>2];c[o+4>>2]=c[A+4>>2];c[o+8>>2]=c[A+8>>2];c[o+12>>2]=c[A+12>>2];A=o+16|0;c[A>>2]=c[L>>2];c[A+4>>2]=c[L+4>>2];c[A+8>>2]=c[L+8>>2];c[A+12>>2]=c[L+12>>2];A=o+32|0;K=m+64|0;c[A>>2]=c[K>>2];c[A+4>>2]=c[K+4>>2];c[A+8>>2]=c[K+8>>2];c[A+12>>2]=c[K+12>>2];A=o+48|0;M=b+32|0;c[A>>2]=c[M>>2];c[A+4>>2]=c[M+4>>2];c[A+8>>2]=c[M+8>>2];c[A+12>>2]=c[M+12>>2];M=o+64|0;A=m+128|0;c[M>>2]=c[A>>2];c[M+4>>2]=c[A+4>>2];c[M+8>>2]=c[A+8>>2];c[M+12>>2]=c[A+12>>2];M=o+80|0;R=m+160|0;c[M>>2]=c[R>>2];c[M+4>>2]=c[R+4>>2];c[M+8>>2]=c[R+8>>2];c[M+12>>2]=c[R+12>>2];rB(a,o,6,f);eF(o);o=j|0;h[j>>3]=+h[P>>3]+(+h[m+176>>3]- +h[m>>3]);h[j+8>>3]=+h[m+24>>3]+(+h[m+184>>3]- +h[m+8>>3]);R=j+16|0;c[R>>2]=c[K>>2];c[R+4>>2]=c[K+4>>2];c[R+8>>2]=c[K+8>>2];c[R+12>>2]=c[K+12>>2];uB(a,o,2);c[R>>2]=c[A>>2];c[R+4>>2]=c[A+4>>2];c[R+8>>2]=c[A+8>>2];c[R+12>>2]=c[A+12>>2];uB(a,o,2);c[R>>2]=c[m>>2];c[R+4>>2]=c[m+4>>2];c[R+8>>2]=c[m+8>>2];c[R+12>>2]=c[m+12>>2];uB(a,o,2);eF(m);i=g;return}else if((l|0)==83886080){if((d|0)!=4){cc(155064,126504,711,169992)}o=jk(192)|0;R=b;c[o>>2]=c[R>>2];c[o+4>>2]=c[R+4>>2];c[o+8>>2]=c[R+8>>2];c[o+12>>2]=c[R+12>>2];R=o+16|0;A=b+16|0;c[R>>2]=c[A>>2];c[R+4>>2]=c[A+4>>2];c[R+8>>2]=c[A+8>>2];c[R+12>>2]=c[A+12>>2];A=m+48|0;O=+h[A>>3];R=m+64|0;z=O+(+h[R>>3]-O);K=o+32|0;M=K;h[M>>3]=z;N=m+56|0;O=+h[N>>3];Q=m+72|0;s=O+(+h[Q>>3]-O);n=o+40|0;h[n>>3]=s;O=z+(+h[A>>3]- +h[L>>3]);e=o+48|0;h[e>>3]=O;x=s+(+h[N>>3]- +h[m+40>>3]);E=o+56|0;h[E>>3]=x;w=O+(+h[R>>3]- +h[A>>3]);A=o+64|0;h[A>>3]=w;y=x+(+h[Q>>3]- +h[N>>3]);N=o+72|0;h[N>>3]=y;Q=o+80|0;h[Q>>3]=w+(z-O);h[o+88>>3]=y+(s-x);R=m+96|0;x=+h[R>>3];F=m+80|0;s=x+(+h[F>>3]-x);J=o+144|0;h[J>>3]=s;u=m+104|0;x=+h[u>>3];q=m+88|0;y=x+(+h[q>>3]-x);h[o+152>>3]=y;x=s+(+h[R>>3]- +h[m+112>>3]);v=o+128|0;h[v>>3]=x;O=y+(+h[u>>3]- +h[m+120>>3]);k=o+136|0;h[k>>3]=O;z=x+(+h[F>>3]- +h[R>>3]);R=o+112|0;h[R>>3]=z;w=O+(+h[q>>3]- +h[u>>3]);u=o+120|0;h[u>>3]=w;q=o+96|0;F=q;h[F>>3]=z+(s-x);p=o+104|0;h[p>>3]=w+(y-O);t=o+160|0;r=b+32|0;c[t>>2]=c[r>>2];c[t+4>>2]=c[r+4>>2];c[t+8>>2]=c[r+8>>2];c[t+12>>2]=c[r+12>>2];r=o+176|0;t=b+48|0;c[r>>2]=c[t>>2];c[r+4>>2]=c[t+4>>2];c[r+8>>2]=c[t+8>>2];c[r+12>>2]=c[t+12>>2];rB(a,o,12,f);t=j|0;r=j;c[r>>2]=c[K>>2];c[r+4>>2]=c[K+4>>2];c[r+8>>2]=c[K+8>>2];c[r+12>>2]=c[K+12>>2];O=+h[M>>3];y=O-(+h[e>>3]-O);M=j+16|0;h[M>>3]=y;O=+h[n>>3];w=O-(+h[E>>3]-O);n=j+24|0;h[n>>3]=w;K=j+32|0;h[K>>3]=y+(+h[A>>3]- +h[e>>3]);e=j+40|0;h[e>>3]=w+(+h[N>>3]- +h[E>>3]);E=j+48|0;c[E>>2]=c[Q>>2];c[E+4>>2]=c[Q+4>>2];c[E+8>>2]=c[Q+8>>2];c[E+12>>2]=c[Q+12>>2];uB(a,t,4);c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];w=+h[F>>3];y=w-(+h[R>>3]-w);h[M>>3]=y;w=+h[p>>3];O=w-(+h[u>>3]-w);h[n>>3]=O;h[K>>3]=y+(+h[v>>3]- +h[R>>3]);h[e>>3]=O+(+h[k>>3]- +h[u>>3]);c[E>>2]=c[J>>2];c[E+4>>2]=c[J+4>>2];c[E+8>>2]=c[J+8>>2];c[E+12>>2]=c[J+12>>2];uB(a,t,4);eF(o);eF(m);i=g;return}else if((l|0)==100663296){o=d+5|0;t=jk(o<<4)|0;J=b+16|0;O=+h[J>>3];E=b|0;y=+h[E>>3]-O;w=y*.125+(O+y*.5);u=t;h[u>>3]=w;k=b+40|0;y=+h[k>>3];e=b+24|0;R=m+56|0;v=m+72|0;O=y+(+h[e>>3]-y)*.5+(+h[R>>3]- +h[v>>3])*3.0*.5;h[t+8>>3]=O;y=+h[J>>3];x=+h[E>>3]-y;s=y+x*.5-x*.25;h[t+16>>3]=s;h[t+24>>3]=O;h[t+32>>3]=s;x=+h[k>>3];h[t+40>>3]=x+(+h[e>>3]-x)*.5;K=L;n=m+48|0;x=s+(+h[K>>3]- +h[n>>3])*.5;h[t+48>>3]=x;s=+h[k>>3];h[t+56>>3]=s+(+h[e>>3]-s)*.5;h[t+64>>3]=x;x=+h[k>>3];s=x+(+h[e>>3]-x)*.5+(+h[R>>3]- +h[v>>3]);h[t+72>>3]=s;h[t+80>>3]=w;h[t+88>>3]=s;h[t+96>>3]=w;x=s-(+h[R>>3]- +h[v>>3])*.25;h[t+104>>3]=x;h[t+112>>3]=w+(+h[K>>3]- +h[n>>3]);h[t+120>>3]=x+(+h[R>>3]- +h[v>>3])*.5;h[t+128>>3]=+h[u>>3];h[t+136>>3]=O+(+h[R>>3]- +h[v>>3])*.25;rB(a,t,o,f);h[j>>3]=+h[J>>3];O=+h[k>>3];h[j+8>>3]=O+(+h[e>>3]-O)*.5;h[j+16>>3]=+h[E>>3];h[j+24>>3]=O+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,j|0,2);eF(t);eF(m);i=g;return}else if((l|0)==117440512){t=d+1|0;E=jk(t<<4)|0;e=P;h[E>>3]=+h[e>>3];k=m+56|0;J=m+72|0;h[E+8>>3]=+h[m+24>>3]-(+h[k>>3]- +h[J>>3])*.5;h[E+16>>3]=+h[m+48>>3];O=+h[k>>3];h[E+24>>3]=O-(O- +h[J>>3])*.5;h[E+32>>3]=+h[b+32>>3];o=b+40|0;h[E+40>>3]=+h[o>>3]+(+h[k>>3]- +h[J>>3])*.5;h[E+48>>3]=+h[e>>3];h[E+56>>3]=+h[o>>3]+(+h[k>>3]- +h[J>>3])*.5;O=+h[b+8>>3];h[E+72>>3]=O-(O- +h[b+56>>3])*.5;h[E+64>>3]=+h[b>>3];rB(a,E,t,f);eF(E);eF(m);i=g;return}else if((l|0)==134217728){E=d+4|0;t=jk(E<<4)|0;J=b+16|0;O=+h[J>>3];k=b|0;o=L;e=m+48|0;x=O+(+h[k>>3]-O)*.5+(+h[o>>3]- +h[e>>3])*.25;h[t>>3]=x;v=b+40|0;O=+h[v>>3];R=b+24|0;w=O+(+h[R>>3]-O)*.5;h[t+8>>3]=w;h[t+16>>3]=x;u=m+56|0;n=m+72|0;O=w+(+h[u>>3]- +h[n>>3])*.5;h[t+24>>3]=O;s=x+(+h[o>>3]- +h[e>>3])*.5;h[t+32>>3]=s;h[t+40>>3]=O;h[t+48>>3]=s;s=O+(+h[u>>3]- +h[n>>3])*.5;h[t+56>>3]=s;x=+h[J>>3];y=x+(+h[k>>3]-x)*.5-(+h[o>>3]- +h[e>>3])*3.0*.25;h[t+64>>3]=y;h[t+72>>3]=s;h[t+80>>3]=y;h[t+88>>3]=O;y=+h[J>>3];s=y+(+h[k>>3]-y)*.5-(+h[o>>3]- +h[e>>3])*.25;h[t+96>>3]=s;h[t+104>>3]=O;h[t+112>>3]=s;h[t+120>>3]=w;rB(a,t,E,f);h[j>>3]=+h[J>>3];w=+h[v>>3];h[j+8>>3]=w+(+h[R>>3]-w)*.5;h[j+16>>3]=+h[k>>3];h[j+24>>3]=w+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,j|0,2);eF(t);eF(m);i=g;return}else if((l|0)==150994944){t=d+2|0;k=jk(t<<4)|0;R=b+16|0;w=+h[R>>3];v=b|0;J=L;E=m+48|0;s=w+(+h[v>>3]-w)*.5+(+h[J>>3]- +h[E>>3])*3.0*.25;h[k>>3]=s;e=b+40|0;w=+h[e>>3];o=b+24|0;O=w+(+h[o>>3]-w)*.5;h[k+8>>3]=O;h[k+16>>3]=s;n=m+56|0;u=m+72|0;s=O+(+h[n>>3]- +h[u>>3])*.25;h[k+24>>3]=s;w=+h[R>>3];h[k+32>>3]=w+(+h[v>>3]-w)*.5+(+h[J>>3]- +h[E>>3])*.25;w=s+(+h[n>>3]- +h[u>>3])*.5;h[k+40>>3]=w;y=+h[R>>3];h[k+48>>3]=y+(+h[v>>3]-y)*.5-(+h[J>>3]- +h[E>>3])*.25;h[k+56>>3]=w;w=+h[R>>3];y=w+(+h[v>>3]-w)*.5-(+h[J>>3]- +h[E>>3])*3.0*.25;h[k+64>>3]=y;h[k+72>>3]=s;h[k+80>>3]=y;h[k+88>>3]=O;rB(a,k,t,f);h[j>>3]=+h[R>>3];O=+h[e>>3];h[j+8>>3]=O+(+h[o>>3]-O)*.5;h[j+16>>3]=+h[v>>3];h[j+24>>3]=O+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,j|0,2);eF(k);eF(m);i=g;return}else if((l|0)==167772160){k=d+1|0;v=jk(k<<4)|0;o=b+16|0;O=+h[o>>3];e=b|0;R=L;t=m+48|0;y=O+(+h[e>>3]-O)*.5+(+h[R>>3]- +h[t>>3]);h[v>>3]=y;E=b+40|0;O=+h[E>>3];J=b+24|0;u=m+56|0;n=m+72|0;s=O+(+h[J>>3]-O)*.5+(+h[u>>3]- +h[n>>3])*.25;h[v+8>>3]=s;O=y-(+h[R>>3]- +h[t>>3]);h[v+16>>3]=O;h[v+24>>3]=s+(+h[u>>3]- +h[n>>3]);h[v+32>>3]=O;O=s+(+h[u>>3]- +h[n>>3])*.5;h[v+40>>3]=O;y=+h[o>>3];w=+h[e>>3]-y;x=y+w*.5-w*.25;h[v+48>>3]=x;h[v+56>>3]=O;h[v+64>>3]=x;h[v+72>>3]=s;rB(a,v,k,f);h[j>>3]=+h[o>>3];s=+h[E>>3];h[j+8>>3]=s+(+h[J>>3]-s)*.5;h[j+16>>3]=+h[e>>3];h[j+24>>3]=s+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,j|0,2);eF(v);eF(m);i=g;return}else if((l|0)==184549376){v=d+4|0;e=jk(v<<4)|0;J=b+16|0;s=+h[J>>3];E=b|0;x=+h[E>>3]-s;o=L;k=m+48|0;O=x*.125+(s+x*.5)+(+h[o>>3]- +h[k>>3])*.5;h[e>>3]=O;n=b+40|0;x=+h[n>>3];u=b+24|0;t=m+56|0;R=m+72|0;s=x+(+h[u>>3]-x)*.5+(+h[t>>3]- +h[R>>3])*.25;h[e+8>>3]=s;x=+h[J>>3];w=+h[E>>3]-x;y=x+w*.5-w*.125;h[e+16>>3]=y;h[e+24>>3]=s;h[e+32>>3]=y;w=s+(+h[t>>3]- +h[R>>3])*.5;h[e+40>>3]=w;s=y-(+h[o>>3]- +h[k>>3])*.5;h[e+48>>3]=s;h[e+56>>3]=w;K=e+64|0;h[K>>3]=s;s=+h[n>>3];w=s+(+h[u>>3]-s)*.5-(+h[t>>3]- +h[R>>3])*.25;h[e+72>>3]=w;s=O-(+h[o>>3]- +h[k>>3])*.5;h[e+80>>3]=s;h[e+88>>3]=w;h[e+96>>3]=s;s=w-(+h[t>>3]- +h[R>>3])*.5;h[e+104>>3]=s;R=e+112|0;h[R>>3]=O;h[e+120>>3]=s;rB(a,e,v,f);v=j|0;t=j|0;h[t>>3]=+h[J>>3];s=+h[n>>3];J=j+8|0;h[J>>3]=s+(+h[u>>3]-s)*.5;k=j+16|0;h[k>>3]=+h[K>>3];K=b+8|0;o=b+56|0;p=j+24|0;h[p>>3]=s+(+h[K>>3]- +h[o>>3])*.5;uB(a,v,2);h[t>>3]=+h[R>>3];s=+h[n>>3];h[J>>3]=s+(+h[u>>3]-s)*.5;h[k>>3]=+h[E>>3];h[p>>3]=s+(+h[K>>3]- +h[o>>3])*.5;uB(a,v,2);eF(e);eF(m);i=g;return}else if((l|0)==201326592){e=d<<4;v=jk(e)|0;o=b+16|0;s=+h[o>>3];h[v>>3]=s;K=b+40|0;O=+h[K>>3];p=b+24|0;E=m+56|0;k=m+72|0;w=O+(+h[p>>3]-O)*.5+(+h[E>>3]- +h[k>>3])*.125;h[v+8>>3]=w;u=L;J=m+48|0;O=s+(+h[u>>3]- +h[J>>3])*2.0;h[v+16>>3]=O;h[v+24>>3]=w;h[v+32>>3]=O;O=w+(+h[E>>3]- +h[k>>3])*.5;h[v+40>>3]=O;h[v+48>>3]=s;h[v+56>>3]=O;rB(a,v,d,f);eF(v);v=jk(e)|0;O=+h[o>>3]+(+h[u>>3]- +h[J>>3]);h[v>>3]=O;s=+h[K>>3];w=s+(+h[p>>3]-s)*.5-(+h[E>>3]- +h[k>>3])*5.0*.125;h[v+8>>3]=w;s=O+(+h[u>>3]- +h[J>>3]);J=v+16|0;h[J>>3]=s;h[v+24>>3]=w;h[v+32>>3]=s;s=w+(+h[E>>3]- +h[k>>3])*.5;h[v+40>>3]=s;h[v+48>>3]=O;h[v+56>>3]=s;rB(a,v,d,f);h[j>>3]=+h[J>>3];s=+h[K>>3];h[j+8>>3]=s+(+h[p>>3]-s)*.5;h[j+16>>3]=+h[b>>3];h[j+24>>3]=s+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,j|0,2);eF(v);eF(m);i=g;return}else if((l|0)==218103808){v=d<<4;p=jk(v)|0;K=b|0;s=+h[K>>3];h[p>>3]=s;J=b+40|0;O=+h[J>>3];k=b+24|0;E=m+56|0;u=m+72|0;w=O+(+h[k>>3]-O)*.5+(+h[E>>3]- +h[u>>3])*.125;h[p+8>>3]=w;h[p+16>>3]=s;O=w+(+h[E>>3]- +h[u>>3])*.5;h[p+24>>3]=O;y=s-(+h[E>>3]- +h[u>>3])*2.0;h[p+32>>3]=y;h[p+40>>3]=O;h[p+48>>3]=y;h[p+56>>3]=w;rB(a,p,d,f);eF(p);p=jk(v)|0;w=+h[K>>3]-(+h[L>>3]- +h[m+48>>3]);h[p>>3]=w;y=+h[J>>3];O=y+(+h[k>>3]-y)*.5-(+h[E>>3]- +h[u>>3])*5.0*.125;h[p+8>>3]=O;h[p+16>>3]=w;y=O+(+h[E>>3]- +h[u>>3])*.5;h[p+24>>3]=y;s=w-(+h[E>>3]- +h[u>>3]);h[p+32>>3]=s;h[p+40>>3]=y;u=p+48|0;h[u>>3]=s;h[p+56>>3]=O;rB(a,p,d,f);h[j>>3]=+h[b+16>>3];O=+h[J>>3];h[j+8>>3]=O+(+h[k>>3]-O)*.5;h[j+16>>3]=+h[u>>3];h[j+24>>3]=O+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,j|0,2);eF(p);eF(m);i=g;return}else if((l|0)==234881024){p=d<<4;u=jk(p)|0;k=b+16|0;O=+h[k>>3];J=b|0;E=L;K=m+48|0;s=O+(+h[J>>3]-O)*.5-(+h[E>>3]- +h[K>>3])*9.0*.125;h[u>>3]=s;v=b+40|0;O=+h[v>>3];o=b+24|0;e=m+56|0;n=m+72|0;y=O+(+h[o>>3]-O)*.5+(+h[e>>3]- +h[n>>3])*.125;h[u+8>>3]=y;O=s+(+h[E>>3]- +h[K>>3]);h[u+16>>3]=O;h[u+24>>3]=y;h[u+32>>3]=O;O=y+(+h[e>>3]- +h[n>>3])*.5;h[u+40>>3]=O;h[u+48>>3]=s;h[u+56>>3]=O;rB(a,u,d,f);eF(u);u=jk(p)|0;O=+h[k>>3];s=O+(+h[J>>3]-O)*.5-(+h[E>>3]- +h[K>>3])*9.0*.125;h[u>>3]=s;O=+h[v>>3];y=O+(+h[o>>3]-O)*.5-(+h[e>>3]- +h[n>>3])*5.0*.125;h[u+8>>3]=y;O=s+(+h[E>>3]- +h[K>>3]);h[u+16>>3]=O;h[u+24>>3]=y;h[u+32>>3]=O;O=y+(+h[e>>3]- +h[n>>3])*.5;h[u+40>>3]=O;h[u+48>>3]=s;h[u+56>>3]=O;rB(a,u,d,f);eF(u);u=jk(p)|0;O=+h[k>>3];s=O+(+h[J>>3]-O)*.5+(+h[E>>3]- +h[K>>3])*.125;h[u>>3]=s;O=+h[v>>3];y=O+(+h[o>>3]-O)*.5-(+h[e>>3]- +h[n>>3])*5.0*.125;h[u+8>>3]=y;O=s+(+h[E>>3]- +h[K>>3]);h[u+16>>3]=O;h[u+24>>3]=y;h[u+32>>3]=O;O=y+(+h[e>>3]- +h[n>>3])*.5;h[u+40>>3]=O;h[u+48>>3]=s;h[u+56>>3]=O;rB(a,u,d,f);eF(u);u=jk(p)|0;O=+h[k>>3];s=O+(+h[J>>3]-O)*.5+(+h[E>>3]- +h[K>>3])*.125;h[u>>3]=s;O=+h[v>>3];y=O+(+h[o>>3]-O)*.5+(+h[e>>3]- +h[n>>3])*.125;h[u+8>>3]=y;O=s+(+h[E>>3]- +h[K>>3]);p=u+16|0;h[p>>3]=O;h[u+24>>3]=y;h[u+32>>3]=O;O=y+(+h[e>>3]- +h[n>>3])*.5;h[u+40>>3]=O;h[u+48>>3]=s;h[u+56>>3]=O;rB(a,u,d,f);n=j|0;e=j|0;h[e>>3]=+h[p>>3];O=+h[v>>3];p=j+8|0;h[p>>3]=O+(+h[o>>3]-O)*.5;R=j+16|0;h[R>>3]=+h[J>>3];t=b+8|0;M=b+56|0;F=j+24|0;h[F>>3]=O+(+h[t>>3]- +h[M>>3])*.5;uB(a,n,2);O=+h[k>>3];h[e>>3]=O+(+h[J>>3]-O)*.5-(+h[E>>3]- +h[K>>3])*9.0*.125;s=+h[v>>3];h[p>>3]=s+(+h[o>>3]-s)*.5;h[R>>3]=O;h[F>>3]=s+(+h[t>>3]- +h[M>>3])*.5;uB(a,n,2);eF(u);eF(m);i=g;return}else if((l|0)==251658240){u=d<<4;n=jk(u)|0;M=b+16|0;s=+h[M>>3];t=b|0;F=L;R=m+48|0;O=s+(+h[t>>3]-s)*.5-(+h[F>>3]- +h[R>>3]);h[n>>3]=O;o=b+40|0;s=+h[o>>3];p=b+24|0;v=m+56|0;K=m+72|0;y=s+(+h[p>>3]-s)*.5+(+h[v>>3]- +h[K>>3])*.125;h[n+8>>3]=y;s=O+(+h[F>>3]- +h[R>>3])*2.0;h[n+16>>3]=s;h[n+24>>3]=y;h[n+32>>3]=s;s=y+(+h[v>>3]- +h[K>>3])*.5;h[n+40>>3]=s;h[n+48>>3]=O;h[n+56>>3]=s;rB(a,n,d,f);eF(n);n=jk(u)|0;s=+h[M>>3];O=s+(+h[t>>3]-s)*.5-(+h[F>>3]- +h[R>>3]);u=n;h[u>>3]=O;s=+h[o>>3];y=s+(+h[p>>3]-s)*.5-(+h[v>>3]- +h[K>>3])*5.0*.125;h[n+8>>3]=y;s=O+(+h[F>>3]- +h[R>>3])*2.0;R=n+16|0;h[R>>3]=s;h[n+24>>3]=y;h[n+32>>3]=s;s=y+(+h[v>>3]- +h[K>>3])*.5;h[n+40>>3]=s;h[n+48>>3]=O;h[n+56>>3]=s;rB(a,n,d,f);K=j|0;v=j|0;h[v>>3]=+h[R>>3];s=+h[o>>3];R=j+8|0;h[R>>3]=s+(+h[p>>3]-s)*.5;F=j+16|0;h[F>>3]=+h[t>>3];t=b+8|0;E=b+56|0;J=j+24|0;h[J>>3]=s+(+h[t>>3]- +h[E>>3])*.5;uB(a,K,2);h[v>>3]=+h[M>>3];s=+h[o>>3];h[R>>3]=s+(+h[p>>3]-s)*.5;h[F>>3]=+h[u>>3];h[J>>3]=s+(+h[t>>3]- +h[E>>3])*.5;uB(a,K,2);eF(n);eF(m);i=g;return}else if((l|0)==268435456){n=jk(d<<4)|0;K=b|0;h[n>>3]=+h[K>>3];E=m+56|0;t=m+72|0;h[n+8>>3]=+h[m+24>>3]-(+h[E>>3]- +h[t>>3])*.5;J=m+48|0;h[n+16>>3]=+h[J>>3];s=+h[E>>3];h[n+24>>3]=s-(s- +h[t>>3])*.5;h[n+32>>3]=+h[b+32>>3];u=b+40|0;h[n+40>>3]=+h[u>>3]+(+h[E>>3]- +h[t>>3])*.5;h[n+48>>3]=+h[K>>3];h[n+56>>3]=+h[u>>3]+(+h[E>>3]- +h[t>>3])*.5;rB(a,n,d,f);F=b+16|0;p=L;s=+h[F>>3]+(+h[p>>3]- +h[J>>3])*.25;R=j|0;o=j|0;h[o>>3]=s;O=+h[u>>3];M=b+24|0;y=O+(+h[M>>3]-O)*.5+(+h[E>>3]- +h[t>>3])*.125;v=j+8|0;h[v>>3]=y;e=j+16|0;h[e>>3]=s+(+h[p>>3]- +h[J>>3])*.25;k=j+24|0;h[k>>3]=y-(+h[E>>3]- +h[t>>3])*.25;uB(a,R,2);y=+h[F>>3]+(+h[p>>3]- +h[J>>3])*.25;h[o>>3]=y;s=+h[u>>3];O=s+(+h[M>>3]-s)*.5-(+h[E>>3]- +h[t>>3])*.125;h[v>>3]=O;h[e>>3]=y+(+h[p>>3]- +h[J>>3])*.25;h[k>>3]=O+(+h[E>>3]- +h[t>>3])*.25;uB(a,R,2);h[o>>3]=+h[F>>3]+(+h[p>>3]- +h[J>>3])*.25;O=+h[u>>3]+(+h[E>>3]- +h[t>>3])*3.0*.25;h[v>>3]=O;h[e>>3]=+h[K>>3]-(+h[p>>3]- +h[J>>3])*.25;h[k>>3]=O;uB(a,R,2);eF(n);eF(m);i=g;return}else if((l|0)==285212672){n=jk(d<<4)|0;R=b+16|0;O=+h[R>>3];k=b|0;J=L;p=m+48|0;y=O+(+h[k>>3]-O)*.5+(+h[J>>3]- +h[p>>3])*.5;h[n>>3]=y;K=b+40|0;O=+h[K>>3];e=b+24|0;s=O+(+h[e>>3]-O)*.5+(+h[J>>3]- +h[p>>3])*.5;h[n+8>>3]=s;h[n+16>>3]=y;y=+h[K>>3];O=y+(+h[e>>3]-y)*.5-(+h[J>>3]- +h[p>>3])*.5;h[n+24>>3]=O;y=+h[R>>3];w=y+(+h[k>>3]-y)*.5-(+h[J>>3]- +h[p>>3])*.5;h[n+32>>3]=w;h[n+40>>3]=O;h[n+48>>3]=w;h[n+56>>3]=s;rB(a,n,d,f);eF(n);s=+h[R>>3];w=s+(+h[k>>3]-s)*.5;s=w+(+h[J>>3]- +h[p>>3])*3.0*.25;n=j|0;v=j|0;h[v>>3]=s;O=+h[K>>3];y=O+(+h[e>>3]-O)*.5;O=y+(+h[J>>3]- +h[p>>3])*3.0*.25;t=j+8|0;h[t>>3]=O;E=j+16|0;h[E>>3]=s;s=y-(+h[J>>3]- +h[p>>3])*3.0*.25;u=j+24|0;h[u>>3]=s;y=w-(+h[J>>3]- +h[p>>3])*3.0*.25;h[j+32>>3]=y;h[j+40>>3]=s;h[j+48>>3]=y;h[j+56>>3]=O;F=j+64|0;o=j;c[F>>2]=c[o>>2];c[F+4>>2]=c[o+4>>2];c[F+8>>2]=c[o+8>>2];c[F+12>>2]=c[o+12>>2];uB(a,n,5);O=+h[R>>3];y=+h[k>>3];h[v>>3]=O+(y-O)*.5+(+h[J>>3]- +h[p>>3])*3.0*.25;O=+h[K>>3];h[t>>3]=O+(+h[e>>3]-O)*.5;h[E>>3]=y;o=b+8|0;F=b+56|0;h[u>>3]=O+(+h[o>>3]- +h[F>>3])*.5;uB(a,n,2);O=+h[R>>3];h[v>>3]=O;y=+h[K>>3];h[t>>3]=y+(+h[e>>3]-y)*.5;h[E>>3]=O+(+h[k>>3]-O)*.5-(+h[J>>3]- +h[p>>3])*3.0*.25;h[u>>3]=y+(+h[o>>3]- +h[F>>3])*.5;uB(a,n,2);eF(m);i=g;return}else if((l|0)==301989888){n=d+12|0;F=jk(n<<4)|0;o=b+16|0;y=+h[o>>3];u=b|0;p=L;J=m+48|0;O=y+(+h[u>>3]-y)*.5+(+h[p>>3]- +h[J>>3])*.25;h[F>>3]=O;k=b+40|0;y=+h[k>>3];E=b+24|0;e=m+56|0;t=m+72|0;s=y+(+h[E>>3]-y)*.5+(+h[e>>3]- +h[t>>3])*.5;K=F+8|0;h[K>>3]=s;h[F+16>>3]=O;y=s+(+h[e>>3]- +h[t>>3])*.125;v=F+24|0;h[v>>3]=y;s=O-(+h[p>>3]- +h[J>>3])*.125;R=F+32|0;h[R>>3]=s;w=y+(+h[e>>3]- +h[t>>3])*.125;h[F+40>>3]=w;h[F+48>>3]=O;x=w+(+h[e>>3]- +h[t>>3])*.125;h[F+56>>3]=x;h[F+64>>3]=O;O=x+(+h[e>>3]- +h[t>>3])*.125;h[F+72>>3]=O;h[F+80>>3]=s;h[F+88>>3]=O;s=+h[o>>3];z=s+(+h[u>>3]-s)*.5;h[F+96>>3]=z;h[F+104>>3]=x;s=z-(+h[p>>3]- +h[J>>3])*.125;h[F+112>>3]=s;h[F+120>>3]=O;I=s-(+h[p>>3]- +h[J>>3])*.125;h[F+128>>3]=I;h[F+136>>3]=O;h[F+144>>3]=I;h[F+152>>3]=x;x=I+(+h[p>>3]- +h[J>>3])*.125;h[F+160>>3]=x;h[F+168>>3]=w;h[F+176>>3]=I;h[F+184>>3]=y;h[F+192>>3]=I;I=+h[K>>3];h[F+200>>3]=I;h[F+208>>3]=x;h[F+216>>3]=I;K=F+224|0;h[K>>3]=z;h[F+232>>3]=+h[v>>3];h[F+240>>3]=+h[R>>3];h[F+248>>3]=I;rB(a,F,n,f);I=+h[K>>3];n=j|0;R=j|0;h[R>>3]=I;z=+h[k>>3];x=z+(+h[E>>3]-z)*.5;v=j+8|0;h[v>>3]=x;J=j+16|0;h[J>>3]=I;p=j+24|0;h[p>>3]=x+(+h[e>>3]- +h[t>>3])*.125;uB(a,n,2);x=+h[K>>3];h[R>>3]=x;I=+h[k>>3];z=I+(+h[E>>3]-I)*.5+(+h[e>>3]- +h[t>>3])*.25;h[v>>3]=z;h[J>>3]=x;h[p>>3]=z+(+h[e>>3]- +h[t>>3])*.125;uB(a,n,2);h[R>>3]=+h[o>>3];z=+h[k>>3];h[v>>3]=z+(+h[E>>3]-z)*.5;h[J>>3]=+h[u>>3];h[p>>3]=z+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,n,2);eF(F);eF(m);i=g;return}else if((l|0)==318767104){F=d+4|0;n=jk(F<<4)|0;p=b+16|0;z=+h[p>>3];u=b|0;J=L;E=m+48|0;x=z+(+h[u>>3]-z)*.5+(+h[J>>3]- +h[E>>3])*.125;h[n>>3]=x;v=b+40|0;z=+h[v>>3];k=b+24|0;o=m+56|0;R=m+72|0;I=z+(+h[k>>3]-z)*.5+(+h[o>>3]- +h[R>>3])*.5;h[n+8>>3]=I;z=x+(+h[J>>3]- +h[E>>3])*.125;h[n+16>>3]=z;y=I+(+h[o>>3]- +h[R>>3])*.125;h[n+24>>3]=y;h[n+32>>3]=z;z=y+(+h[o>>3]- +h[R>>3])*.25;h[n+40>>3]=z;h[n+48>>3]=x;w=z+(+h[o>>3]- +h[R>>3])*.125;h[n+56>>3]=w;O=x-(+h[J>>3]- +h[E>>3])*.25;h[n+64>>3]=O;h[n+72>>3]=w;w=O-(+h[J>>3]- +h[E>>3])*.125;h[n+80>>3]=w;h[n+88>>3]=z;h[n+96>>3]=w;h[n+104>>3]=y;h[n+112>>3]=O;h[n+120>>3]=I;rB(a,n,F,f);I=+h[p>>3];O=I+(+h[u>>3]-I)*.5;F=j|0;E=j|0;h[E>>3]=O;I=+h[v>>3];y=I+(+h[k>>3]-I)*.5;J=j+8|0;h[J>>3]=y;t=j+16|0;h[t>>3]=O;e=j+24|0;h[e>>3]=y+(+h[o>>3]- +h[R>>3])*.125;uB(a,F,2);y=+h[p>>3];O=y+(+h[u>>3]-y)*.5;h[E>>3]=O;y=+h[v>>3];I=y+(+h[k>>3]-y)*.5+(+h[o>>3]- +h[R>>3])*.25;h[J>>3]=I;h[t>>3]=O;h[e>>3]=I+(+h[o>>3]- +h[R>>3])*.125;uB(a,F,2);h[E>>3]=+h[p>>3];I=+h[v>>3];h[J>>3]=I+(+h[k>>3]-I)*.5;h[t>>3]=+h[u>>3];h[e>>3]=I+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,F,2);eF(n);eF(m);i=g;return}else if((l|0)==335544320){n=d+12|0;F=jk(n<<4)|0;e=b+16|0;I=+h[e>>3];u=b|0;t=L;k=m+48|0;O=I+(+h[u>>3]-I)*.5+(+h[t>>3]- +h[k>>3])*.25;h[F>>3]=O;J=b+40|0;I=+h[J>>3];v=b+24|0;p=m+56|0;E=m+72|0;y=I+(+h[v>>3]-I)*.5+(+h[p>>3]- +h[E>>3])*.5;R=F+8|0;h[R>>3]=y;h[F+16>>3]=O;I=y+(+h[p>>3]- +h[E>>3])*.125;o=F+24|0;h[o>>3]=I;y=O-(+h[t>>3]- +h[k>>3])*.125;K=F+32|0;h[K>>3]=y;w=I+(+h[p>>3]- +h[E>>3])*.125;h[F+40>>3]=w;h[F+48>>3]=O;z=w+(+h[p>>3]- +h[E>>3])*.125;h[F+56>>3]=z;h[F+64>>3]=O;O=z+(+h[p>>3]- +h[E>>3])*.125;h[F+72>>3]=O;h[F+80>>3]=y;h[F+88>>3]=O;y=+h[e>>3];x=y+(+h[u>>3]-y)*.5;h[F+96>>3]=x;h[F+104>>3]=z;y=x-(+h[t>>3]- +h[k>>3])*.125;h[F+112>>3]=y;h[F+120>>3]=O;s=y-(+h[t>>3]- +h[k>>3])*.125;h[F+128>>3]=s;h[F+136>>3]=O;h[F+144>>3]=s;h[F+152>>3]=z;z=s+(+h[t>>3]- +h[k>>3])*.125;h[F+160>>3]=z;h[F+168>>3]=w;h[F+176>>3]=s;h[F+184>>3]=I;h[F+192>>3]=s;s=+h[R>>3];h[F+200>>3]=s;h[F+208>>3]=z;h[F+216>>3]=s;R=F+224|0;h[R>>3]=x;h[F+232>>3]=+h[o>>3];h[F+240>>3]=+h[K>>3];h[F+248>>3]=s;rB(a,F,n,f);n=j|0;K=j;c[K>>2]=c[R>>2];c[K+4>>2]=c[R+4>>2];c[K+8>>2]=c[R+8>>2];c[K+12>>2]=c[R+12>>2];R=j|0;K=j+16|0;h[K>>3]=+h[R>>3];s=+h[J>>3];o=j+24|0;h[o>>3]=s+(+h[v>>3]-s)*.5;uB(a,n,2);h[R>>3]=+h[e>>3];s=+h[J>>3];h[j+8>>3]=s+(+h[v>>3]-s)*.5;h[K>>3]=+h[u>>3];h[o>>3]=s+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,n,2);eF(F);eF(m);i=g;return}else if((l|0)==352321536){F=d+4|0;n=jk(F<<4)|0;o=b+16|0;s=+h[o>>3];u=b|0;K=L;v=m+48|0;x=s+(+h[u>>3]-s)*.5+(+h[K>>3]- +h[v>>3])*.125;h[n>>3]=x;J=b+40|0;s=+h[J>>3];e=b+24|0;R=m+56|0;k=m+72|0;z=s+(+h[e>>3]-s)*.5+(+h[R>>3]- +h[k>>3])*.5;t=n+8|0;h[t>>3]=z;s=x+(+h[K>>3]- +h[v>>3])*.125;h[n+16>>3]=s;I=z+(+h[R>>3]- +h[k>>3])*.125;h[n+24>>3]=I;h[n+32>>3]=s;s=I+(+h[R>>3]- +h[k>>3])*.25;h[n+40>>3]=s;h[n+48>>3]=x;w=s+(+h[R>>3]- +h[k>>3])*.125;h[n+56>>3]=w;O=x-(+h[K>>3]- +h[v>>3])*.25;h[n+64>>3]=O;h[n+72>>3]=w;w=O-(+h[K>>3]- +h[v>>3])*.125;h[n+80>>3]=w;h[n+88>>3]=s;h[n+96>>3]=w;h[n+104>>3]=I;h[n+112>>3]=O;h[n+120>>3]=z;rB(a,n,F,f);z=+h[o>>3];O=z+(+h[u>>3]-z)*.5;F=j|0;v=j|0;h[v>>3]=O;K=j+8|0;h[K>>3]=+h[t>>3];t=j+16|0;h[t>>3]=O;O=+h[J>>3];k=j+24|0;h[k>>3]=O+(+h[e>>3]-O)*.5;uB(a,F,2);h[v>>3]=+h[o>>3];O=+h[J>>3];h[K>>3]=O+(+h[e>>3]-O)*.5;h[t>>3]=+h[u>>3];h[k>>3]=O+(+h[b+8>>3]- +h[b+56>>3])*.5;uB(a,F,2);eF(n);eF(m);i=g;return}else if((l|0)==369098752){n=d+5|0;F=jk(n<<4)|0;k=P;u=L;t=m+48|0;h[F>>3]=+h[k>>3]-(+h[u>>3]- +h[t>>3])*.5;e=m+56|0;K=m+72|0;h[F+8>>3]=+h[m+24>>3]-(+h[e>>3]- +h[K>>3])*.5;h[F+16>>3]=+h[t>>3];O=+h[e>>3];h[F+24>>3]=O-(O- +h[K>>3])*.5;h[F+32>>3]=+h[b+32>>3];J=b+40|0;h[F+40>>3]=+h[J>>3];O=+h[u>>3];h[F+48>>3]=O+(O- +h[t>>3])*.5;h[F+56>>3]=+h[J>>3];O=+h[u>>3];h[F+64>>3]=O+(O- +h[t>>3])*.5;h[F+72>>3]=+h[J>>3]+(+h[e>>3]- +h[K>>3])*.5;h[F+80>>3]=+h[k>>3]-(+h[u>>3]- +h[t>>3])*.5;h[F+88>>3]=+h[J>>3]+(+h[e>>3]- +h[K>>3])*.5;h[F+96>>3]=+h[k>>3]-(+h[u>>3]- +h[t>>3])*.5;K=b+56|0;h[F+104>>3]=+h[K>>3];e=b+8|0;O=+h[e>>3];h[F+120>>3]=O-(O- +h[K>>3])*.5;h[F+112>>3]=+h[b>>3];h[F+136>>3]=+h[e>>3];h[F+128>>3]=+h[k>>3]-(+h[u>>3]- +h[t>>3])*.5;rB(a,F,n,f);eF(F);eF(m);i=g;return}else if((l|0)==385875968){F=d+3|0;n=jk(F<<4)|0;t=P;u=L;k=m+48|0;h[n>>3]=+h[t>>3]-(+h[u>>3]- +h[k>>3])*.5;e=m+56|0;K=m+72|0;h[n+8>>3]=+h[m+24>>3]-(+h[e>>3]- +h[K>>3])*.5;h[n+16>>3]=+h[k>>3];O=+h[e>>3];h[n+24>>3]=O-(O- +h[K>>3])*.5;h[n+32>>3]=+h[b+32>>3];J=b+40|0;h[n+40>>3]=+h[J>>3]+(+h[e>>3]- +h[K>>3])*.5;h[n+48>>3]=+h[t>>3]-(+h[u>>3]- +h[k>>3])*.5;h[n+56>>3]=+h[J>>3]+(+h[e>>3]- +h[K>>3])*.5;h[n+64>>3]=+h[t>>3]-(+h[u>>3]- +h[k>>3])*.5;K=b+56|0;h[n+72>>3]=+h[K>>3];e=b+8|0;O=+h[e>>3];h[n+88>>3]=O-(O- +h[K>>3])*.5;h[n+80>>3]=+h[b>>3];h[n+104>>3]=+h[e>>3];h[n+96>>3]=+h[t>>3]-(+h[u>>3]- +h[k>>3])*.5;rB(a,n,F,f);eF(n);eF(m);i=g;return}else if((l|0)==402653184){n=d+3|0;F=jk(n<<4)|0;k=b|0;h[F>>3]=+h[k>>3];u=b+8|0;t=m+56|0;e=m+72|0;h[F+8>>3]=+h[u>>3]-(+h[t>>3]- +h[e>>3])*.5;K=L;O=+h[K>>3];J=m+48|0;h[F+16>>3]=O+(O- +h[J>>3])*.5;h[F+24>>3]=+h[u>>3]-(+h[t>>3]- +h[e>>3])*.5;O=+h[K>>3];h[F+32>>3]=O+(O- +h[J>>3])*.5;h[F+40>>3]=+h[m+40>>3];h[F+48>>3]=+h[b+16>>3];O=+h[b+24>>3];u=b+40|0;h[F+56>>3]=O-(O- +h[u>>3])*.5;O=+h[K>>3];h[F+64>>3]=O+(O- +h[J>>3])*.5;h[F+72>>3]=+h[u>>3];h[F+88>>3]=+h[u>>3]+(+h[t>>3]- +h[e>>3])*.5;O=+h[K>>3];h[F+80>>3]=O+(O- +h[J>>3])*.5;h[F+104>>3]=+h[b+56>>3]+(+h[t>>3]- +h[e>>3])*.5;h[F+96>>3]=+h[k>>3];rB(a,F,n,f);eF(F);eF(m);i=g;return}else if((l|0)==419430400){l=d+5|0;d=jk(l<<4)|0;h[d>>3]=+h[b>>3];F=b+8|0;n=m+56|0;k=m+72|0;h[d+8>>3]=+h[F>>3]-(+h[n>>3]- +h[k>>3])*.5;e=L;O=+h[e>>3];L=m+48|0;h[d+16>>3]=O+(O- +h[L>>3])*.5;h[d+24>>3]=+h[F>>3]-(+h[n>>3]- +h[k>>3])*.5;O=+h[e>>3];h[d+32>>3]=O+(O- +h[L>>3])*.5;h[d+40>>3]=+h[m+40>>3];h[d+48>>3]=+h[b+16>>3];O=+h[b+24>>3];F=b+40|0;h[d+56>>3]=O-(O- +h[F>>3])*.5;O=+h[e>>3];h[d+64>>3]=O+(O- +h[L>>3])*.5;h[d+72>>3]=+h[F>>3];h[d+88>>3]=+h[F>>3]+(+h[n>>3]- +h[k>>3])*.5;O=+h[e>>3];h[d+80>>3]=O+(O- +h[L>>3])*.5;F=b+56|0;h[d+104>>3]=+h[F>>3]+(+h[n>>3]- +h[k>>3])*.5;k=P;h[d+96>>3]=+h[k>>3]-(+h[e>>3]- +h[L>>3])*.5;h[d+112>>3]=+h[k>>3]-(+h[e>>3]- +h[L>>3])*.5;h[d+120>>3]=+h[F>>3];h[d+128>>3]=+h[b+48>>3];h[d+136>>3]=+h[F>>3];rB(a,d,l,f);eF(d);eF(m);i=g;return}else{eF(m);i=g;return}}function pl(a){a=a|0;var b=0,d=0;b=c[(c[a+8>>2]|0)+8>>2]|0;do{if((b|0)==0){d=0}else{a=c[c[b+4>>2]>>2]|0;if((a|0)==80){d=1;break}if((a|0)==56){d=2;break}if((a|0)==4){d=3;break}d=(a|0)==76?4:0}}while(0);return d|0}function ql(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0.0,H=0.0,I=0,J=0.0,K=0.0,L=0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,U=0.0,X=0.0,Y=0,Z=0,_=0,aa=0,ba=0.0,ca=0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0,na=0,oa=0.0,pa=0,qa=0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0;d=i;i=i+64|0;e=d|0;f=d+16|0;g=d+24|0;j=d+32|0;k=d+40|0;l=d+48|0;m=jk(48)|0;n=b+8|0;o=c[(c[(c[n>>2]|0)+8>>2]|0)+8>>2]|0;p=c[o>>2]|0;q=c[o+4>>2]|0;r=c[o+8>>2]|0;s=+h[o+16>>3];t=+h[o+32>>3];u=+h[o+24>>3];o=b|0;b=(Km(ew(o,168440)|0)|0)&255|p;p=(b|0)!=0;do{if(p){v=+Fm(o,c[53574]|0,0.0,.01);w=+Fm(o,c[53618]|0,0.0,.02);x=(v>w?v:w)*72.0;if(x<0.0){y=x+-.5}else{y=x+.5}z=~~y;x=+(z|0);if((z|0)>0){A=x;B=x;break}z=c[n>>2]|0;x=+h[z+32>>3];w=+h[z+40>>3];v=(x<w?x:w)*72.0;if(v<0.0){C=v+-.5}else{C=v+.5}v=+(~~C|0);A=v;B=v}else{z=c[n>>2]|0;v=+h[z+32>>3]*72.0;if(v<0.0){D=v+-.5}else{D=v+.5}v=+h[z+40>>3]*72.0;if(v<0.0){E=v+-.5}else{E=v+.5}A=+(~~E|0);B=+(~~D|0)}}while(0);z=Em(o,c[53598]|0,q,0)|0;D=s+ +Fm(o,c[53602]|0,0.0,-360.0);if((r|0)==0){s=+Fm(o,c[53584]|0,0.0,-100.0);q=Em(o,c[53586]|0,4,0)|0;F=q;G=s;H=+Fm(o,c[53636]|0,0.0,-100.0)}else{F=r;G=t;H=u}r=c[(c[n>>2]|0)+104>>2]|0;u=+h[r+24>>3];t=+h[r+32>>3];r=~~u;q=(r|0)>-1?r:-r|0;s=+(q|0);if((q|0)>-1){if((~~(s+.5)|0)==0){I=22}else{I=25}}else{if((~~(s+-.5)|0)==0){I=22}else{I=25}}do{if((I|0)==22){q=~~t;r=(q|0)>-1?q:-q|0;s=+(r|0);if((r|0)>-1){if((~~(s+.5)|0)==0){J=t;K=u;break}else{I=25;break}}else{if((~~(s+-.5)|0)==0){J=t;K=u;break}else{I=25;break}}}}while(0);do{if((I|0)==25){r=ew(o,78824)|0;if((r|0)==0){J=t+8.0;K=u+16.0;break}q=ac(r|0,168832,(L=i,i=i+16|0,c[L>>2]=f,c[L+8>>2]=g,L)|0)|0;i=L;s=+h[f>>3];if(s<0.0){h[f>>3]=0.0;M=0.0}else{M=s}s=+h[g>>3];if(s<0.0){h[g>>3]=0.0;N=0.0}else{N=s}if((q|0)<=0){J=t+8.0;K=u+16.0;break}s=M*72.0;r=s<0.0;if(r){O=s+-.5}else{O=s+.5}E=u+ +(~~O<<1|0);if((q|0)>1){C=N*72.0;if(C<0.0){P=C+-.5}else{P=C+.5}J=t+ +(~~P<<1|0);K=E;break}else{if(r){Q=s+-.5}else{Q=s+.5}J=t+ +(~~Q<<1|0);K=E;break}}}while(0);Q=K- +h[(c[(c[n>>2]|0)+104>>2]|0)+24>>3];t=+h[c[(c[(Hx(o)|0)+8>>2]|0)+8>>2]>>3];if(t>0.0){P=t*72.0;if(P<0.0){R=P+-.5}else{R=P+.5}P=+(~~R|0);g=~~(K/P);f=~~(J/P);U=P*+((P*+(f|0)+1.0e-5<J)+f|0);X=P*+((P*+(g|0)+1.0e-5<K)+g|0)}else{U=J;X=K}g=c[(c[n>>2]|0)+8>>2]|0;do{if((a[g+12|0]|0)==0){f=ew(o,87160)|0;if((f|0)==0){Y=0;Z=0;break}if((a[f]|0)==0){Y=0;Z=0;break}FB(k,Hx(o)|0,f);r=c[k>>2]|0;q=c[k+4>>2]|0;if((r|0)==-1&(q|0)==-1){_=$w(o)|0;Fv(0,166888,(L=i,i=i+16|0,c[L>>2]=f,c[L+8>>2]=_,L)|0)|0;i=L;Y=0;Z=0;break}else{a[(c[(Hx(o)|0)+8>>2]|0)+114|0]=1;Y=q+2|0;Z=r+2|0;break}}else{r=c[g>>2]|0;if((a[r]|0)!=99){Y=0;Z=0;break}if((Ya(r|0,102208)|0)!=0){Y=0;Z=0;break}r=ew(o,114736)|0;FB(j,Hx(o)|0,r);q=c[j>>2]|0;_=c[j+4>>2]|0;if((q|0)==-1&(_|0)==-1){f=$w(o)|0;Fv(0,168056,(L=i,i=i+16|0,c[L>>2]=(r|0)!=0?r:167344,c[L+8>>2]=f,L)|0)|0;i=L;Y=0;Z=0;break}else{a[(c[(Hx(o)|0)+8>>2]|0)+114|0]=1;Y=_+2|0;Z=q+2|0;break}}}while(0);K=+(Z|0);Z=e|0;h[Z>>3]=X>K?X:K;K=+(Y|0);Y=e+8|0;h[Y>>3]=U>K?U:K;if((F|0)<3){aa=H!=0.0|G!=0.0?120:F}else{aa=F}F=ew(o,166472)|0;do{if((F|0)==0){I=66}else{j=a[F]|0;if(!((j<<24>>24|0)==116|(j<<24>>24|0)==98)){I=66;break}a[(c[(c[n>>2]|0)+104>>2]|0)+80|0]=j}}while(0);if((I|0)==66){a[(c[(c[n>>2]|0)+104>>2]|0)+80|0]=99}if((aa|0)==4){if(D<0.0){ba=D+-.5}else{ba=D+.5}if(((~~ba|0)%90|0|0)==0&H==0.0&G==0.0){ca=1}else{I=72}}else{I=72}do{if((I|0)==72){F=c[n>>2]|0;j=c[(c[(c[F+8>>2]|0)+8>>2]|0)+44>>2]|0;if((j|0)!=0){Dc[c[j>>2]&63](l,e);j=e;g=l;c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2];ca=0;break}ba=+h[Y>>3];J=ba*1.4142135623730951;do{if(A>J){if((a[(c[F+104>>2]|0)+80|0]|0)!=99){I=77;break}P=ba/A;R=+T(1.0/(1.0-P*P));P=R*+h[Z>>3];h[Z>>3]=P;ea=P;fa=ba}else{I=77}}while(0);if((I|0)==77){ba=+h[Z>>3]*1.4142135623730951;h[Z>>3]=ba;h[Y>>3]=J;ea=ba;fa=J}if((aa|0)<=2){ca=0;break}ba=+V(3.141592653589793/+(aa|0));h[Z>>3]=ea/ba;h[Y>>3]=fa/ba;ca=0}}while(0);fa=+h[Y>>3];if((Km(Hm(o,c[53630]|0,86632)|0)|0)<<24>>24==0){ea=+h[Z>>3];ba=B>ea?B:ea;h[Z>>3]=ba;ea=+h[Y>>3];ga=ba;ha=A>ea?A:ea}else{l=c[(c[n>>2]|0)+104>>2]|0;if(B<+h[l+24>>3]){I=83}else{if(A<+h[l+32>>3]){I=83}}if((I|0)==83){I=$w(o)|0;l=$w(Hx(o)|0)|0;Fv(0,166096,(L=i,i=i+16|0,c[L>>2]=I,c[L+8>>2]=l,L)|0)|0;i=L}h[Z>>3]=B;ga=B;ha=A}h[Y>>3]=ha;if(p){A=ga>ha?ga:ha;h[Y>>3]=A;h[Z>>3]=A;ia=A;ja=A}else{ia=ha;ja=ga}do{if((Km(Hm(o,c[53606]|0,86632)|0)|0)<<24>>24==0){if(ca){ga=+h[Z>>3];h[(c[(c[n>>2]|0)+104>>2]|0)+40>>3]=(X>ga?X:ga)-Q;break}ga=+h[Y>>3];if(U<ga){ha=+h[Z>>3]*+T(1.0-U*U/(ga*ga));h[(c[(c[n>>2]|0)+104>>2]|0)+40>>3]=(X>ha?X:ha)-Q;break}else{h[(c[(c[n>>2]|0)+104>>2]|0)+40>>3]=X-Q;break}}else{h[(c[(c[n>>2]|0)+104>>2]|0)+40>>3]=X-Q}}while(0);Q=+h[Y>>3]-fa;if(U<K){ka=K-U+Q}else{ka=Q}h[(c[(c[n>>2]|0)+104>>2]|0)+48>>3]=U+ka;o=(z|0)<1?1:z;do{if((aa|0)<3){p=jk(o<<5)|0;L=p;ka=+h[Z>>3]*.5;U=+h[Y>>3]*.5;h[p>>3]=-0.0-ka;h[p+8>>3]=-0.0-U;h[p+16>>3]=ka;h[p+24>>3]=U;if((z|0)>1){la=ka;ma=2;na=1;oa=U}else{pa=2;qa=L;break}while(1){ra=la+4.0;sa=oa+4.0;h[L+(ma<<4)>>3]=-0.0-ra;h[L+(ma<<4)+8>>3]=-0.0-sa;p=ma|1;h[L+(p<<4)>>3]=ra;h[L+(p<<4)+8>>3]=sa;p=na+1|0;if((p|0)<(z|0)){la=ra;ma=ma+2|0;na=p;oa=sa}else{break}}h[Z>>3]=ra*2.0;h[Y>>3]=sa*2.0;pa=2;qa=L}else{p=jk(da(o<<4,aa)|0)|0;l=p;I=c[(c[(c[(c[n>>2]|0)+8>>2]|0)+8>>2]|0)+44>>2]|0;do{if((I|0)==0){J=6.283185307179586/+(aa|0);U=J*.5;ka=+W(U);Q=+cb(+(+S(+H)+ +S(+G)),+1.0);K=H*1.4142135623730951/+V(U);U=G*.5;fa=(J+ -3.141592653589793)*.5;X=+V(fa)*.5;ha=+W(fa)*.5;ga=fa+(3.141592653589793-J)*.5;if((aa|0)<=0){ta=0.0;ua=0.0;break}fa=D/180.0*3.141592653589793;if(ca){A=J+ga;B=ha+ka*+W(A);ea=U*B+(X+ka*+V(A))*(Q+K*B);A=fa+ +$(+B,+ea);ba=+W(A);P=+V(A);A=+cb(+ea,+B);B=P*A*+h[Z>>3];P=ba*A*+h[Y>>3];h[p>>3]=B;h[p+8>>3]=P;A=+S(+P);ba=+S(+B);ea=-0.0-B;h[p+16>>3]=ea;h[p+24>>3]=P;h[p+32>>3]=ea;ea=-0.0-P;h[p+40>>3]=ea;h[p+48>>3]=B;h[p+56>>3]=ea;ta=P!=0.0?A:0.0;ua=B!=0.0?ba:0.0;break}else{ba=X;X=ha;ha=ga;ga=0.0;B=0.0;F=0;while(1){A=J+ha;P=ba+ka*+V(A);ea=X+ka*+W(A);R=U*ea+P*(Q+K*ea);t=fa+ +$(+ea,+R);N=+W(t);O=+V(t);t=+cb(+R,+ea);R=O*t*+h[Z>>3];O=N*t*+h[Y>>3];t=+S(+R);N=t>ga?t:ga;t=+S(+O);u=t>B?t:B;h[l+(F<<4)>>3]=R;h[l+(F<<4)+8>>3]=O;g=F+1|0;if((g|0)<(aa|0)){ba=P;X=ea;ha=A;ga=N;B=u;F=g}else{ta=u;ua=N;break}}}}else{Dc[c[I+4>>2]&63](l,e);ta=+h[Y>>3]*.5;ua=+h[Z>>3]*.5}}while(0);B=ua*2.0;ga=ta*2.0;ha=ja>B?ja:B;h[Z>>3]=ha;X=ia>ga?ia:ga;h[Y>>3]=X;ba=ha/B;B=X/ga;I=(aa|0)>0;if(I){L=0;do{F=l+(L<<4)|0;g=l+(L<<4)+8|0;ga=B*+h[g>>3];h[F>>3]=ba*+h[F>>3];h[g>>3]=ga;L=L+1|0;}while((L|0)<(aa|0))}if((z|0)<=1){pa=aa;qa=l;break}L=aa-1|0;ba=+h[p>>3];B=+h[p+8>>3];ga=+$(+(B- +h[l+(L<<4)+8>>3]),+(ba- +h[l+(L<<4)>>3]));if(I){va=ga;wa=ba;xa=B;ya=0}else{pa=aa;qa=l;break}while(1){L=ya+1|0;g=(L|0)==(aa|0)?0:L;B=+h[l+(g<<4)>>3];ba=+h[l+(g<<4)+8>>3];ga=+$(+(ba-xa),+(B-wa));X=(va+3.141592653589793-ga)*.5;ha=4.0/+W(X);fa=va-X;X=ha*+W(fa);K=ha*+V(fa);fa=wa;ha=xa;g=1;do{fa=K+fa;ha=X+ha;F=(da(g,aa)|0)+ya|0;h[l+(F<<4)>>3]=fa;h[l+(F<<4)+8>>3]=ha;g=g+1|0;}while((g|0)<(z|0));if((L|0)<(aa|0)){va=ga;wa=B;xa=ba;ya=L}else{break}}if(!I){pa=aa;qa=l;break}p=da(aa,z-1|0)|0;g=0;ha=+h[Z>>3];fa=+h[Y>>3];while(1){F=g+p|0;X=+h[l+(F<<4)+8>>3];K=+S(+(+h[l+(F<<4)>>3]))*2.0;Q=K>ha?K:ha;h[Z>>3]=Q;K=+S(+X)*2.0;X=K>fa?K:fa;h[Y>>3]=X;F=g+1|0;if((F|0)<(aa|0)){g=F;ha=Q;fa=X}else{pa=aa;qa=l;break}}}}while(0);c[m>>2]=b;c[m+4>>2]=z;c[m+8>>2]=pa;h[m+16>>3]=D;h[m+32>>3]=G;h[m+24>>3]=H;c[m+44>>2]=qa;h[(c[n>>2]|0)+32>>3]=+h[Z>>3]/72.0;h[(c[n>>2]|0)+40>>3]=+h[Y>>3]/72.0;c[(c[n>>2]|0)+12>>2]=m;i=d;return}function rl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0;b=i;i=i+16|0;d=a|0;e=(c[(c[(Hx(d)|0)+8>>2]|0)+116>>2]|0)>>>2&1^1;f=a+8|0;g=c[c[(c[f>>2]|0)+104>>2]>>2]|0;c[43784]=g;j=xF(g|0)|0;g=jk((j|0)>1?j+1|0:2)|0;j=Wl(a,e,1,g)|0;if((j|0)==0){Fv(1,79400,(k=i,i=i+8|0,c[k>>2]=c[c[(c[f>>2]|0)+104>>2]>>2],k)|0)|0;i=k;c[43784]=79104;l=Wl(a,e,1,g)|0}else{l=j}eF(g);Xl(b|0,a,l);a=c[f>>2]|0;m=+h[a+32>>3]*72.0;if(m<0.0){n=m+-.5}else{n=m+.5}m=+(~~n|0);n=+h[a+40>>3]*72.0;if(n<0.0){o=n+-.5}else{o=n+.5}n=+(~~o|0);a=l|0;if((Km(Hm(d,c[53630]|0,86632)|0)|0)<<24>>24==0){o=+h[a>>3];g=l+8|0;p=+h[g>>3];q=o>m?o:m;r=p>n?p:n;s=g}else{q=m;r=n;s=l+8|0}Yl(l,q,r,(Km(Hm(d,c[53606]|0,86632)|0)|0)&255);Zl(l,q*-.5,r*.5,15);h[(c[f>>2]|0)+32>>3]=+h[a>>3]/72.0;h[(c[f>>2]|0)+40>>3]=(+h[s>>3]+1.0)/72.0;c[(c[f>>2]|0)+12>>2]=l;i=b;return}function sl(a){a=a|0;var b=0,d=0,e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0.0,n=0,o=0.0;b=jk(48)|0;d=a+8|0;e=c[(c[(c[(c[d>>2]|0)+8>>2]|0)+8>>2]|0)+4>>2]|0;f=a|0;g=+Fm(f,c[53574]|0,1.7976931348623157e+308,0.0);i=+Fm(f,c[53618]|0,1.7976931348623157e+308,0.0);j=g<i?g:i;if(j==1.7976931348623157e+308&i==1.7976931348623157e+308){h[(c[d>>2]|0)+40>>3]=.05;h[(c[d>>2]|0)+32>>3]=.05}else{if(j>0.0){k=j>3.0e-4?j:3.0e-4}else{k=j}h[(c[d>>2]|0)+40>>3]=k;h[(c[d>>2]|0)+32>>3]=k}k=+h[(c[d>>2]|0)+32>>3]*72.0;a=Em(f,c[53598]|0,e,0)|0;e=jk((a|0)<1?32:a<<5)|0;f=e;j=k*.5;i=-0.0-j;h[e>>3]=i;h[e+8>>3]=i;h[e+16>>3]=j;h[e+24>>3]=j;if((a|0)>1){i=j;g=j;e=2;l=1;while(1){m=g+4.0;j=i+4.0;h[f+(e<<4)>>3]=-0.0-m;h[f+(e<<4)+8>>3]=-0.0-j;n=e|1;h[f+(n<<4)>>3]=m;h[f+(n<<4)+8>>3]=j;n=l+1|0;if((n|0)<(a|0)){i=j;g=m;e=e+2|0;l=n}else{break}}o=m*2.0}else{o=k}c[b>>2]=1;c[b+4>>2]=a;c[b+8>>2]=2;vF(b+16|0,0,24)|0;c[b+44>>2]=f;k=o/72.0;h[(c[d>>2]|0)+32>>3]=k;h[(c[d>>2]|0)+40>>3]=k;c[(c[d>>2]|0)+12>>2]=b;return}function tl(a){a=a|0;var b=0,d=0;b=c[(c[a+8>>2]|0)+8>>2]|0;if((b|0)==0){d=0;return d|0}d=(c[c[b+4>>2]>>2]|0)==80|0;return d|0}function ul(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=c[53500]|0;if((d|0)==0){e=0;return e|0}f=c[53650]|0;if((f|0)<=0){e=0;return e|0}g=a[b]|0;h=0;while(1){i=c[d+(h<<2)>>2]|0;j=c[i>>2]|0;if((a[j]|0)==g<<24>>24){if((Ya(j|0,b|0)|0)==0){e=i;k=7;break}}i=h+1|0;if((i|0)<(f|0)){h=i}else{e=0;k=7;break}}if((k|0)==7){return e|0}return 0}function vl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;e=i;do{if((Sm(ew(d|0,114736)|0)|0)==0){f=b}else{if((a[b]|0)==101){if((Ya(b|0,107896)|0)==0){f=b;break}}f=102208}}while(0);b=a[f]|0;if(b<<24>>24==99){if((Ya(f|0,102208)|0)==0){g=99}else{h=7}}else{h=7}a:do{if((h|0)==7){d=c[42902]|0;if((d|0)==0){g=b;break}else{j=171608;k=d}while(1){if((a[k]|0)==b<<24>>24){if((Ya(k|0,f|0)|0)==0){l=j;break}}d=j+16|0;m=c[d>>2]|0;if((m|0)==0){g=b;break a}else{j=d;k=m}}i=e;return l|0}}while(0);k=c[53500]|0;j=c[53650]|0;if((k|0)==0){b=j+1|0;c[53650]=b;n=kk(b<<2)|0}else{b:do{if((j|0)>0){b=0;while(1){o=c[k+(b<<2)>>2]|0;h=c[o>>2]|0;if((a[h]|0)==g<<24>>24){if((Ya(h|0,f|0)|0)==0){break}}b=b+1|0;if((b|0)>=(j|0)){break b}}if((o|0)==0){break}else{l=o}i=e;return l|0}}while(0);o=j+1|0;c[53650]=o;n=mk(k,o<<2)|0}c[53500]=n;n=jk(16)|0;o=n;c[(c[53500]|0)+(j<<2)>>2]=o;c[n>>2]=c[42902];c[n+4>>2]=c[42903];c[n+8>>2]=c[42904];c[n+12>>2]=c[42905];j=Lb(f|0)|0;c[n>>2]=j;do{if((c[53666]|0)==0){if((a[f]|0)==99){if((Ya(f|0,102208)|0)==0){break}}Fv(0,167480,(k=i,i=i+16|0,c[k>>2]=c[42902],c[k+8>>2]=j,k)|0)|0;i=k;a[n+12|0]=0;l=o;i=e;return l|0}}while(0);a[n+12|0]=1;l=o;i=e;return l|0}function wl(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;j=i;i=i+40|0;k=j|0;l=e|0;m=c[(c[(c[(Hx(l)|0)+48>>2]|0)+8>>2]|0)+116>>2]&3;n=e+8|0;o=c[n>>2]|0;p=+h[o+16>>3];q=+h[o+24>>3];if((m|0)==3){r=p;s=q;t=5}else if((m|0)==0){r=q;s=p;t=5}else if((m|0)==1){r=p;s=-0.0-q;t=5}else if((m|0)==2){r=-0.0-q;s=p;t=5}else{u=0.0;v=0.0;t=6}do{if((t|0)==5){if(s>=0.0){u=s;v=r;t=6;break}w=s+-.5;x=r}}while(0);if((t|0)==6){w=u+.5;x=v}o=~~w;if(x<0.0){y=x+-.5}else{y=x+.5}z=~~y;A=c[f+8>>2]|0;y=+h[A+16>>3];x=+h[A+24>>3];if((m|0)==2){B=-0.0-x;C=y;t=15}else if((m|0)==1){B=y;C=-0.0-x;t=15}else if((m|0)==3){B=y;C=x;t=15}else if((m|0)==0){B=x;C=y;t=15}else{D=0.0;E=0.0;t=16}do{if((t|0)==15){if(C>=0.0){D=C;E=B;t=16;break}F=C+-.5;G=B}}while(0);if((t|0)==16){F=D+.5;G=E}t=~~F;if(G<0.0){H=G+-.5}else{H=G+.5}m=~~H;A=g+33|0;f=a[A]|0;I=f&255;do{if((f<<24>>24|0)==15|(f<<24>>24|0)==0){J=0}else{K=c[g+24>>2]|0;if((K|0)==0){L=(c[(c[(Hx(l)|0)+8>>2]|0)+116>>2]&1|0)==0;M=c[n>>2]|0;H=+h[M+80>>3]*.5;G=-0.0-H;F=+h[M+88>>3];E=-0.0-F;N=L?H:F;O=L?F:H;P=L?E:G;Q=L?G:E}else{N=+h[K+24>>3];O=+h[K+16>>3];P=+h[K>>3];Q=+h[K+8>>3]}K=~~((P+O)*.5);L=~~((Q+N)*.5);if((I&1|0)==0){R=0;S=0}else{M=o-t+K|0;T=z-m+~~Q|0;R=(da(M,M)|0)+(da(T,T)|0)|0;S=96440}if((I&2|0)==0){U=R;V=S}else{T=o-t+~~O|0;M=z-m+L|0;W=(da(M,M)|0)+(da(T,T)|0)|0;T=(S|0)==0|(W|0)<(R|0);U=T?W:R;V=T?91152:S}if((I&4|0)==0){X=U;Y=V}else{T=o-t+K|0;K=z-m+~~N|0;W=(da(T,T)|0)+(da(K,K)|0)|0;K=(V|0)==0|(W|0)<(U|0);X=K?W:U;Y=K?85880:V}if((I&8|0)==0){J=Y;break}K=o-t+~~P|0;W=z-m+L|0;L=(Y|0)==0|((da(W,W)|0)+(da(K,K)|0)|0)<(X|0);J=L?81272:Y}}while(0);c[k+36>>2]=c[g+36>>2];xl(e,c[g+24>>2]|0,k,J,d[A]|0,0)|0;A=b;b=k;c[A>>2]=c[b>>2];c[A+4>>2]=c[b+4>>2];c[A+8>>2]=c[b+8>>2];c[A+12>>2]=c[b+12>>2];c[A+16>>2]=c[b+16>>2];c[A+20>>2]=c[b+20>>2];c[A+24>>2]=c[b+24>>2];c[A+28>>2]=c[b+28>>2];c[A+32>>2]=c[b+32>>2];c[A+36>>2]=c[b+36>>2];i=j;return}function xl(b,d,e,f,g,j){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0.0,Z=0,_=0,aa=0,ba=0,ca=0.0;k=i;i=i+160|0;l=k|0;m=k+16|0;n=k+32|0;o=k+48|0;p=k+64|0;q=k+80|0;r=k+96|0;s=k+112|0;t=k+128|0;u=k+144|0;if((d|0)==0){vF(l|0,0,16)|0;v=(c[(c[(Hx(b|0)|0)+8>>2]|0)+116>>2]&1|0)==0;w=c[b+8>>2]|0;x=+h[w+80>>3]*.5;y=+h[w+88>>3];z=v?y:x;A=v?x:y;B=0;C=A;D=-0.0-z;E=-0.0-A;F=z;G=+h[l>>3];H=+h[l+8>>3]}else{z=+h[d>>3];A=+h[d+8>>3];y=+h[d+16>>3];x=+h[d+24>>3];I=(z+y)*.5;J=(A+x)*.5;h[l>>3]=I;h[l+8>>3]=J;B=1;C=x;D=z;E=A;F=y;G=I;H=J}J=(F>C?F:C)*4.0;v=l|0;w=l+8|0;a:do{if((f|0)==0){K=B;L=1;M=0;N=0;O=0;P=0.0;Q=0}else{R=a[f]|0;if(R<<24>>24==0){K=B;L=1;M=0;N=0;O=0;P=0.0;Q=0;break}S=f+1|0;switch(R<<24>>24|0){case 101:{if((a[S]|0)!=0){K=B;L=1;M=0;N=0;O=0;P=0.0;Q=1;break a}if((j|0)==0){h[v>>3]=F}else{zl(m,j,H,J);R=l;T=m;c[R>>2]=c[T>>2];c[R+4>>2]=c[T+4>>2];c[R+8>>2]=c[T+8>>2];c[R+12>>2]=c[T+12>>2]}K=1;L=0;M=g&2;N=0;O=1;P=0.0;Q=0;break a;break};case 115:{h[w>>3]=E;T=a[S]|0;if((T|0)==0){if((j|0)==0){h[v>>3]=G}else{zl(n,j,-0.0-J,G);R=l;U=n;c[R>>2]=c[U>>2];c[R+4>>2]=c[U+4>>2];c[R+8>>2]=c[U+8>>2];c[R+12>>2]=c[U+12>>2]}K=1;L=0;M=g&1;N=0;O=1;P=-1.5707963267948966;Q=0;break a}else if((T|0)==101){if((j|0)==0){h[v>>3]=F}else{zl(o,j,-0.0-J,J);U=l;R=o;c[U>>2]=c[R>>2];c[U+4>>2]=c[R+4>>2];c[U+8>>2]=c[R+8>>2];c[U+12>>2]=c[R+12>>2]}K=1;L=0;M=g&3;N=0;O=1;P=-.7853981633974483;Q=0;break a}else if((T|0)==119){if((j|0)==0){h[v>>3]=D}else{I=-0.0-J;zl(p,j,I,I);T=l;R=p;c[T>>2]=c[R>>2];c[T+4>>2]=c[R+4>>2];c[T+8>>2]=c[R+8>>2];c[T+12>>2]=c[R+12>>2]}K=1;L=0;M=g&9;N=0;O=1;P=-2.356194490192345;Q=0;break a}else{h[w>>3]=H;K=B;L=1;M=0;N=0;O=0;P=0.0;Q=1;break a}break};case 119:{if((a[S]|0)!=0){K=B;L=1;M=0;N=0;O=0;P=0.0;Q=1;break a}if((j|0)==0){h[v>>3]=D}else{zl(q,j,H,-0.0-J);R=l;T=q;c[R>>2]=c[T>>2];c[R+4>>2]=c[T+4>>2];c[R+8>>2]=c[T+8>>2];c[R+12>>2]=c[T+12>>2]}K=1;L=0;M=g&8;N=0;O=1;P=3.141592653589793;Q=0;break a;break};case 110:{h[w>>3]=C;T=a[S]|0;if((T|0)==0){if((j|0)==0){h[v>>3]=G}else{zl(r,j,J,G);S=l;R=r;c[S>>2]=c[R>>2];c[S+4>>2]=c[R+4>>2];c[S+8>>2]=c[R+8>>2];c[S+12>>2]=c[R+12>>2]}K=1;L=0;M=g&4;N=0;O=1;P=1.5707963267948966;Q=0;break a}else if((T|0)==101){if((j|0)==0){h[v>>3]=F}else{zl(s,j,J,J);R=l;S=s;c[R>>2]=c[S>>2];c[R+4>>2]=c[S+4>>2];c[R+8>>2]=c[S+8>>2];c[R+12>>2]=c[S+12>>2]}K=1;L=0;M=g&6;N=0;O=1;P=.7853981633974483;Q=0;break a}else if((T|0)==119){if((j|0)==0){h[v>>3]=D}else{zl(t,j,J,-0.0-J);T=l;S=t;c[T>>2]=c[S>>2];c[T+4>>2]=c[S+4>>2];c[T+8>>2]=c[S+8>>2];c[T+12>>2]=c[S+12>>2]}K=1;L=0;M=g&12;N=0;O=1;P=2.356194490192345;Q=0;break a}else{h[w>>3]=H;K=B;L=1;M=0;N=0;O=0;P=0.0;Q=1;break a}break};case 95:{K=B;L=1;M=g;N=1;O=0;P=0.0;Q=0;break a;break};case 99:{K=B;L=1;M=0;N=0;O=0;P=0.0;Q=0;break a;break};default:{K=B;L=1;M=0;N=0;O=0;P=0.0;Q=1;break a}}}}while(0);B=b|0;ri(u,l,(c[(c[(Hx(B)|0)+8>>2]|0)+116>>2]&3)*90|0);b=l;l=u;c[b>>2]=c[l>>2];c[b+4>>2]=c[l+4>>2];c[b+8>>2]=c[l+8>>2];c[b+12>>2]=c[l+12>>2];if(N<<24>>24==0){l=c[(c[(Hx(B)|0)+8>>2]|0)+116>>2]&3;b=M&255;do{if((l|0)==2){if((M|0)==4){V=1;break}else if((M|0)==1){V=4;break}else{V=b;break}}else if((l|0)==1){if((M|0)==4){V=2;break}else if((M|0)==1){V=8;break}else if((M|0)==8){V=4;break}else if((M|0)==2){V=1;break}else{V=b;break}}else if((l|0)==3){if((M|0)==4){V=2;break}else if((M|0)==1){V=8;break}else if((M|0)==8){V=1;break}else if((M|0)==2){V=4;break}else{V=b;break}}else{V=b}}while(0);a[e+33|0]=V}else{a[e+33|0]=M}c[e+24>>2]=d;H=+h[v>>3];if(H<0.0){W=H+-.5}else{W=H+.5}h[e>>3]=+(~~W|0);W=+h[w>>3];if(W<0.0){X=W+-.5}else{X=W+.5}h[e+8>>3]=+(~~X|0);d=c[(c[(Hx(B)|0)+8>>2]|0)+116>>2]&3;do{if((d|0)==2){Y=P*-1.0}else if((d|0)==1){Y=P+ -1.5707963267948966}else if((d|0)==3){if(P==3.141592653589793){Y=-1.5707963267948966;break}if(P==2.356194490192345){Y=-.7853981633974483;break}if(P==1.5707963267948966){Y=0.0;break}if(P==0.0){Y=1.5707963267948966;break}if(P==-.7853981633974483){Y=2.356194490192345;break}if(P!=-1.5707963267948966){Y=P;break}Y=3.141592653589793}else{Y=P}}while(0);h[e+16>>3]=Y;Y=+h[v>>3];P=+h[w>>3];if(Y==0.0&P==0.0){a[e+32|0]=-128;Z=e+29|0;a[Z]=O;_=e+28|0;a[_]=K;aa=e+30|0;a[aa]=L;ba=e+31|0;a[ba]=N;i=k;return Q|0}X=+$(+P,+Y)+4.71238898038469;if(X<6.283185307179586){ca=X}else{ca=X+ -6.283185307179586}a[e+32|0]=~~(ca*256.0/6.283185307179586);Z=e+29|0;a[Z]=O;_=e+28|0;a[_]=K;aa=e+30|0;a[aa]=L;ba=e+31|0;a[ba]=N;i=k;return Q|0}function yl(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;i=i+80|0;e=d|0;f=d+40|0;g=b+8|0;h=c[g>>2]|0;j=h+16|0;k=j;if((a[k+31|0]|0)==0){l=h}else{h=c[b>>2]&3;wl(e,c[((h|0)==3?b:b+32|0)+28>>2]|0,c[((h|0)==2?b:b-32|0)+28>>2]|0,k);k=j;j=e;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];c[k+16>>2]=c[j+16>>2];c[k+20>>2]=c[j+20>>2];c[k+24>>2]=c[j+24>>2];c[k+28>>2]=c[j+28>>2];c[k+32>>2]=c[j+32>>2];c[k+36>>2]=c[j+36>>2];l=c[g>>2]|0}g=l+56|0;l=g;if((a[l+31|0]|0)==0){i=d;return}j=c[b>>2]&3;wl(f,c[((j|0)==2?b:b-32|0)+28>>2]|0,c[((j|0)==3?b:b+32|0)+28>>2]|0,l);l=g;g=f;c[l>>2]=c[g>>2];c[l+4>>2]=c[g+4>>2];c[l+8>>2]=c[g+8>>2];c[l+12>>2]=c[g+12>>2];c[l+16>>2]=c[g+16>>2];c[l+20>>2]=c[g+20>>2];c[l+24>>2]=c[g+24>>2];c[l+28>>2]=c[g+28>>2];c[l+32>>2]=c[g+32>>2];c[l+36>>2]=c[g+36>>2];i=d;return}function zl(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=i;i=i+112|0;g=f|0;j=f+64|0;k=f+80|0;l=f+96|0;m=c[b>>2]|0;n=c[(c[(Hx(m|0)|0)+8>>2]|0)+116>>2]&3;h[j>>3]=e;h[j+8>>3]=d;o=(n|0)!=0;if(o){ri(k,j,n*90|0);p=j;q=k;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];r=p}else{r=j}j=g|0;p=g+16|0;q=g;vF(g|0,0,16)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];p=g+32|0;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];p=g+48|0;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];_l(b,c[(c[(c[(c[m+8>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]|0,j,1);if(!o){s=a;c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];c[s+12>>2]=c[q+12>>2];i=f;return}si(l,j,n*90|0);n=l;c[q>>2]=c[n>>2];c[q+4>>2]=c[n+4>>2];c[q+8>>2]=c[n+8>>2];c[q+12>>2]=c[n+12>>2];s=a;c[s>>2]=c[q>>2];c[s+4>>2]=c[q+4>>2];c[s+8>>2]=c[q+8>>2];c[s+12>>2]=c[q+12>>2];i=f;return}function Al(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,j=0.0;d=i;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];f=+h[b>>3]/1.902113032590307;g=+h[b+8>>3]/1.1180339887498947;j=(f>g?f:g)*.9510565162951535*.8090169943749475/.29389262614623657;h[a>>3]=j*2.0*.9510565162951535;h[a+8>>3]=j*1.8090169943749475;i=d;return}function Bl(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0;c=b|0;d=+h[c>>3];e=b+8|0;f=+h[e>>3];g=f/d;do{if(g>.9510565162951536){i=f;j=f/.9510565162951536}else{if(g>=.9510565162951536){i=f;j=d;break}i=d*.9510565162951536;j=d}}while(0);d=j/1.902113032590307;f=d*.9510565162951535;g=f*.30901699437494745/.7694208842938134;k=d*.19098300562505266*.5;h[a>>3]=f;h[a+8>>3]=d*.3090169943749474-k;h[a+16>>3]=g*.5877852522924732;h[a+24>>3]=g*.8090169943749473-k;h[a+32>>3]=d*6.123233995736766e-17;h[a+40>>3]=d-k;h[a+48>>3]=g*-.587785252292473;h[a+56>>3]=g*.8090169943749475-k;h[a+64>>3]=d*-.9510565162951535;h[a+72>>3]=d*.3090169943749475-k;h[a+80>>3]=g*-.9510565162951536;h[a+88>>3]=g*-.3090169943749473-k;h[a+96>>3]=d*-.5877852522924732;h[a+104>>3]=d*-.8090169943749473-k;h[a+112>>3]=g*-1.8369701987210297e-16;h[a+120>>3]=g*-1.0-k;h[a+128>>3]=d*.5877852522924729;h[a+136>>3]=d*-.8090169943749476-k;h[a+144>>3]=g*.9510565162951535;h[a+152>>3]=g*-.3090169943749476-k;h[c>>3]=j;h[e>>3]=i;return}function Cl(a){a=a|0;var b=0;b=c[(c[a+8>>2]|0)+12>>2]|0;if((b|0)==0){return}eF(c[b+44>>2]|0);eF(b);return}function Dl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=i;i=i+56|0;h=g|0;j=g+40|0;k=g+48|0;if((a[e]|0)==0){l=b;c[l>>2]=c[43356];c[l+4>>2]=c[43357];c[l+8>>2]=c[43358];c[l+12>>2]=c[43359];c[l+16>>2]=c[43360];c[l+20>>2]=c[43361];c[l+24>>2]=c[43362];c[l+28>>2]=c[43363];c[l+32>>2]=c[43364];c[l+36>>2]=c[43365];i=g;return}l=(f|0)==0?82448:f;c[j>>2]=15;f=d+8|0;m=c[f>>2]|0;do{if((a[(c[m+104>>2]|0)+82|0]|0)==0){n=m;o=8}else{p=xj(d,e,j)|0;if((p|0)==0){n=c[f>>2]|0;o=8;break}if((xl(d,p,h,l,c[j>>2]|0,0)|0)==0){break}p=$w(d|0)|0;Fv(0,81824,(q=i,i=i+24|0,c[q>>2]=p,c[q+8>>2]=e,c[q+16>>2]=l,q)|0)|0;i=q}}while(0);do{if((o|0)==8){if((c[(c[n+8>>2]|0)+8>>2]|0)==17560){r=0}else{c[k>>2]=d;c[k+4>>2]=0;r=k}if((xl(d,0,h,e,c[j>>2]|0,r)|0)==0){break}l=$w(d|0)|0;Fv(0,81120,(q=i,i=i+16|0,c[q>>2]=l,c[q+8>>2]=e,q)|0)|0;i=q}}while(0);q=b;b=h;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];c[q+16>>2]=c[b+16>>2];c[q+20>>2]=c[b+20>>2];c[q+24>>2]=c[b+24>>2];c[q+28>>2]=c[b+28>>2];c[q+32>>2]=c[b+32>>2];c[q+36>>2]=c[b+36>>2];i=g;return}function El(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0;d=i;i=i+16|0;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=d|0;f=c[a+4>>2]|0;g=c[a>>2]|0;si(e,b,(c[(c[(Hx(g|0)|0)+8>>2]|0)+116>>2]&3)*90|0);j=+h[e>>3];k=+h[e+8>>3];if((f|0)!=0){if(+h[f>>3]>j){l=0;i=d;return l|0}if(j>+h[f+16>>3]|+h[f+8>>3]>k){l=0;i=d;return l|0}l=k<=+h[f+24>>3]|0;i=d;return l|0}if((g|0)==(c[43740]|0)){m=c[43734]|0}else{f=c[(c[g+8>>2]|0)+12>>2]|0;c[43736]=f;c[43732]=c[f+44>>2];e=c[f+8>>2]|0;c[43734]=e;b=da((c[f+4>>2]|0)-1|0,e)|0;c[43738]=(b|0)<0?0:b;c[43740]=g;m=e}if((m|0)<=0){l=1;i=d;return l|0}e=c[43738]|0;g=c[43732]|0;n=+h[21871];o=+h[21872];b=0;f=0;while(1){a=e+f|0;p=+h[g+(a<<4)>>3];q=+h[g+(a<<4)+8>>3];a=((f+4|0)%(m|0)|0)+e|0;r=-0.0-(+h[g+(a<<4)+8>>3]-q);s=+h[g+(a<<4)>>3]-p;t=q*s+p*r;a=((k*s+j*r-t>=0.0^s*o+n*r-t>=0.0)&1)+b|0;u=f+2|0;if((a|0)==2){l=0;v=12;break}if((u|0)<(m|0)){b=a;f=u}else{l=1;v=12;break}}if((v|0)==12){i=d;return l|0}return 0}function Fl(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;e=c[b+8>>2]|0;if((a[(c[e+104>>2]|0)+82|0]|0)==0){h=0;return h|0}if((a[e+145|0]|0)==0){h=0;return h|0}h=zj(b,d,0,f,g)|0;return h|0}function Gl(e,f){e=e|0;f=f|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0.0,$=0.0,aa=0,ba=0,ca=0;j=i;i=i+48|0;k=j|0;l=j+32|0;m=j+40|0;n=c[e+16>>2]|0;o=n+208|0;p=c[o>>2]|0;if((p|0)==0){if((b[n+260>>1]&1)==0){q=0}else{r=3}}else{r=3}do{if((r|0)==3){if((c[e+152>>2]&4|0)!=0){q=1;break}gB(e,p,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0);q=1}}while(0);p=f+8|0;s=c[p>>2]|0;t=c[s+12>>2]|0;u=c[t+44>>2]|0;v=c[t+8>>2]|0;w=c[t+4>>2]|0;if((c[44090]|0)<(v|0)){t=v+5|0;c[44090]=t;x=c[44092]|0;if((x|0)==0){y=kk(t<<4)|0}else{y=mk(x,t<<4)|0}c[44092]=y;z=c[p>>2]|0}else{z=s}s=(c[z+104>>2]|0)+56|0;y=z+16|0;c[s>>2]=c[y>>2];c[s+4>>2]=c[y+4>>2];c[s+8>>2]=c[y+8>>2];c[s+12>>2]=c[y+12>>2];y=c[p>>2]|0;A=+h[y+32>>3]*72.0;if(A<0.0){B=A+-.5}else{B=A+.5}A=(+h[y+88>>3]+ +h[y+96>>3])/+(~~B|0);B=+h[y+40>>3]*72.0;if(B<0.0){C=B+-.5}else{C=B+.5}B=+h[y+80>>3]/+(~~C|0);y=Hl(e,f)|0;s=l|0;c[s>>2]=0;z=d[(c[p>>2]|0)+117|0]|0;do{if((z&1|0)==0){if((z&2|0)!=0){t=f|0;x=Im(t,c[53592]|0,91912)|0;lB(e,x);nB(e,Im(t,c[53594]|0,91048)|0);D=x;E=0;F=1;break}if((z&8|0)!=0){x=f|0;t=Im(x,c[53638]|0,90552)|0;lB(e,t);nB(e,Im(x,c[53640]|0,89960)|0);D=t;E=0;F=1;break}if((z&4|0)!=0){t=f|0;x=Im(t,c[53576]|0,89400)|0;lB(e,x);nB(e,Im(t,c[53578]|0,89016)|0);D=x;E=0;F=1;break}do{if((y&1|0)==0){x=f|0;if((y&576|0)==0){G=0;H=0;I=x;break}t=Im(x,c[53632]|0,213320)|0;if((a[t]|0)!=0){G=t;H=1;I=x;break}t=Im(x,c[53644]|0,213320)|0;G=(a[t]|0)==0?116344:t;H=1;I=x}else{x=f|0;t=Im(x,c[53632]|0,213320)|0;if((a[t]|0)==0){J=Im(x,c[53644]|0,213320)|0;K=(a[J]|0)==0?116344:J}else{K=t}if((Vh(K,s,m)|0)<<24>>24==0){nB(e,K);G=K;H=1;I=x;break}nB(e,c[s>>2]|0);t=c[l+4>>2]|0;J=Em(x,c[53622]|0,0,0)|0;C=+g[m>>2];if((t|0)==0){oB(e,88552,J,C)}else{oB(e,t,J,C)}G=K;H=(y&2|0)==0?2:3;I=x}}while(0);x=Im(I,c[53644]|0,213320)|0;J=(a[x]|0)!=0?x:88552;lB(e,J);D=J;E=G;F=H}else{J=f|0;x=Im(J,c[53646]|0,93016)|0;lB(e,x);nB(e,Im(J,c[53648]|0,92528)|0);D=x;E=0;F=1}}while(0);H=c[(c[p>>2]|0)+8>>2]|0;do{if((a[H+12|0]|0)==0){L=0;r=40}else{G=c[H>>2]|0;if((a[G]|0)!=99){M=1;r=42;break}L=(Ya(G|0,102208)|0)!=0;r=40}}while(0);do{if((r|0)==40){if((w|0)!=0|F<<24>>24==0|L){M=L;r=42;break}lB(e,88104);N=0;O=1;r=43}}while(0);if((r|0)==42){if((w|0)>0){N=M;O=w;r=43}else{P=F;Q=0;R=M}}if((r|0)==43){M=(v|0)>0;w=(v|0)<3;L=(y&512|0)!=0;H=f|0;G=(y&8|0)==0;I=k|0;K=k|0;m=k+8|0;l=k+24|0;z=k+16|0;x=(y&64|0)==0;J=(y&1024|0)==0;t=(y&2130706444|0)==0;S=F;F=0;while(1){if(M){T=da(F,v)|0;U=c[44092]|0;V=0;do{W=V+T|0;C=+h[u+(W<<4)+8>>3];h[U+(V<<4)>>3]=A*+h[u+(W<<4)>>3]+ +h[(c[p>>2]|0)+16>>3];h[U+(V<<4)+8>>3]=B*C+ +h[(c[p>>2]|0)+24>>3];V=V+1|0;}while((V|0)<(v|0))}do{if(w){do{if(L&(F|0)==0){if((gb(E|0,58)|0)==0){X=S;break}if((Kh(e,c[44092]|0,E)|0)<=1){X=0;break}V=$w(H)|0;Fv(3,87648,(Y=i,i=i+8|0,c[Y>>2]=V,Y)|0)|0;i=Y;X=0}else{X=S}}while(0);qB(e,c[44092]|0,v,X&255);if(G){break}V=c[p>>2]|0;C=+h[V+80>>3]*.75*.5;Z=+h[V+96>>3]*.6614;_=Z+ +h[V+16>>3];$=C+ +h[V+24>>3];h[K>>3]=_;h[m>>3]=$;h[l>>3]=$;h[z>>3]=_-Z*2.0;uB(e,I,2);Z=+h[m>>3]-C*2.0;h[m>>3]=Z;h[l>>3]=Z;uB(e,I,2);}else{if(!x){do{if((F|0)==0){if((Mh(e,c[44092]|0,E,1)|0)<=1){break}V=$w(H)|0;Fv(3,87648,(Y=i,i=i+8|0,c[Y>>2]=V,Y)|0)|0;i=Y}}while(0);rB(e,c[44092]|0,v,0);break}if(!J){lB(e,88104);rB(e,c[44092]|0,v,S&255);lB(e,D);uB(e,(c[44092]|0)+32|0,2);break}V=c[44092]|0;U=S&255;if(t){rB(e,V,v,U);break}else{ol(e,V,v,y,U);break}}}while(0);U=F+1|0;if((U|0)<(O|0)){S=0;F=U}else{P=0;Q=O;R=N;break}}}N=c[(c[p>>2]|0)+8>>2]|0;do{if((a[N+12|0]|0)==0){O=ew(f|0,87160)|0;if((O|0)!=0){aa=O;r=70}}else{O=c[N>>2]|0;if((a[O]|0)!=99){aa=O;r=70;break}if((Ya(O|0,102208)|0)!=0){aa=O;r=70;break}aa=ew(f|0,114736)|0;r=70}}while(0);if((r|0)==70){if((v|0)>0){r=c[44092]|0;N=0;do{Z=+h[u+(N<<4)+8>>3];h[r+(N<<4)>>3]=A*+h[u+(N<<4)>>3]+ +h[(c[p>>2]|0)+16>>3];h[r+(N<<4)+8>>3]=B*Z+ +h[(c[p>>2]|0)+24>>3];N=N+1|0;}while((N|0)<(v|0))}N=P&255;do{if(P<<24>>24==0|R){ba=P}else{if((v|0)<3){do{if((y&512|0)!=0&(Q|0)==0){if((gb(E|0,58)|0)==0){ca=P;break}if((Kh(e,c[44092]|0,E)|0)<=1){ca=0;break}r=$w(f|0)|0;Fv(3,87648,(Y=i,i=i+8|0,c[Y>>2]=r,Y)|0)|0;i=Y;ca=0}else{ca=P}}while(0);qB(e,c[44092]|0,v,ca&255);if((y&8|0)==0){ba=ca;break}r=c[p>>2]|0;B=+h[r+80>>3]*.75*.5;A=+h[r+96>>3]*.6614;u=k|0;Z=A+ +h[r+16>>3];C=B+ +h[r+24>>3];h[k>>3]=Z;r=k+8|0;h[r>>3]=C;O=k+24|0;h[O>>3]=C;h[k+16>>3]=Z-A*2.0;uB(e,u,2);A=+h[r>>3]-B*2.0;h[r>>3]=A;h[O>>3]=A;uB(e,u,2);ba=ca;break}if((y&64|0)==0){u=c[44092]|0;if((y&12|0)==0){rB(e,u,v,N);ba=P;break}else{ol(e,u,v,y,N);ba=P;break}}else{if((Mh(e,c[44092]|0,E,1)|0)>1){u=$w(f|0)|0;Fv(3,87648,(Y=i,i=i+8|0,c[Y>>2]=u,Y)|0)|0;i=Y}rB(e,c[44092]|0,v,0);ba=P;break}}}while(0);P=c[44092]|0;wB(e,aa,P,v,ba,Hm(f|0,c[53616]|0,86632)|0)}eF(c[s>>2]|0);ek(e,10,c[(c[p>>2]|0)+104>>2]|0);if(!q){i=j;return}if((c[e+152>>2]&4|0)!=0){gB(e,c[o>>2]|0,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0)}hB(e);i=j;return}function Hl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+8|0;f=e|0;g=Il(d,f)|0;if((g|0)!=0){pB(b,g)}g=c[53600]|0;do{if((g|0)!=0){h=d|0;j=fw(h,g)|0;if((j|0)==0){break}if((a[j]|0)==0){break}xB(b,+Fm(h,c[53600]|0,1.0,0.0))}}while(0);i=e;return c[f>>2]|0}function Il(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0;e=Im(b|0,c[53582]|0,213320)|0;a:do{if((a[e]|0)==0){f=0;g=0}else{i=Yh(e)|0;j=c[i>>2]|0;if((j|0)==0){f=i;g=0;break}k=b+8|0;l=0;m=i;n=j;while(1){j=a[n]|0;b:do{switch(j<<24>>24){case 114:{if((Ya(n|0,84864)|0)==0){o=m;while(1){p=o+4|0;q=c[p>>2]|0;c[o>>2]=q;if((q|0)==0){break}else{o=p}}r=m;s=l|4;break b}if((Ya(n|0,83656)|0)==0){t=m}else{u=21;break b}while(1){o=t+4|0;p=c[o>>2]|0;c[t>>2]=p;if((p|0)==0){break}else{t=o}}r=m;s=l|3;break};case 100:{if((Ya(n|0,84432)|0)==0){v=m}else{u=37;break b}while(1){o=v+4|0;p=c[o>>2]|0;c[v>>2]=p;if((p|0)==0){break}else{v=o}}r=m;s=l|8;break};case 105:{if((Ya(n|0,84048)|0)!=0){u=21;break b}r=m+4|0;s=l|32;break};case 115:{u=22;break};case 119:{u=33;break};case 102:{if((Ya(n|0,85312)|0)!=0){u=21;break b}r=m+4|0;s=l|1;break};default:{u=37}}}while(0);if((u|0)==21){u=0;if((j<<24>>24|0)==115){u=22}else if((j<<24>>24|0)==119){u=33}else{u=37}}c:do{if((u|0)==22){u=0;if((Ya(n|0,83248)|0)!=0){u=37;break}o=c[(c[(c[k>>2]|0)+8>>2]|0)+8>>2]|0;do{if((o|0)!=0){if((c[o+8>>2]|0)!=4){break}w=+h[o+16>>3];if(w<0.0){x=w+-.5}else{x=w+.5}if(((~~x|0)%90|0|0)!=0){break}if(+h[o+24>>3]!=0.0){break}if(+h[o+32>>3]==0.0){y=m}else{break}while(1){p=y+4|0;q=c[p>>2]|0;c[y>>2]=q;if((q|0)==0){break}else{y=p}}r=m;s=l|64;break c}}while(0);if(j<<24>>24==119){u=33}else{u=37}}}while(0);do{if((u|0)==33){u=0;if((Ya(n|0,82832)|0)!=0){u=37;break}j=c[(c[(c[k>>2]|0)+8>>2]|0)+8>>2]|0;if((j|0)==0){u=37;break}if((c[j+8>>2]|0)<3){z=m}else{u=37;break}while(1){j=z+4|0;o=c[j>>2]|0;c[z>>2]=o;if((o|0)==0){break}else{z=j}}r=m;s=l|512}}while(0);if((u|0)==37){u=0;r=m+4|0;s=l}j=c[r>>2]|0;if((j|0)==0){f=i;g=s;break a}else{l=s;m=r;n=j}}}}while(0);r=c[(c[(c[b+8>>2]|0)+8>>2]|0)+8>>2]|0;if((r|0)==0){A=g;c[d>>2]=A;return f|0}A=c[r+40>>2]|g;c[d>>2]=A;return f|0}function Jl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,j=0.0,k=0.0,l=0;d=i;i=i+16|0;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=d|0;f=c[a>>2]|0;si(e,b,(c[(c[(Hx(f|0)|0)+8>>2]|0)+116>>2]&3)*90|0);g=+h[e>>3];j=+h[e+8>>3];e=c[f+8>>2]|0;k=+h[e+80>>3]*.5;if(j<-0.0-k|j>k){l=0;i=d;return l|0}if(g<-0.0- +h[e+88>>3]){l=0;i=d;return l|0}l=g<=+h[e+96>>3]|0;i=d;return l|0}function Kl(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0;e=i;f=c[a+16>>2]|0;g=f+208|0;j=c[g>>2]|0;if((j|0)==0){k=(b[f+260>>1]&1)!=0}else{k=1}l=d+8|0;d=c[l>>2]|0;m=c[d+12>>2]|0;if((m|0)==0){i=e;return}if(k){if((c[a+152>>2]&4|0)==0){gB(a,j,c[f+228>>2]|0,c[f+244>>2]|0,c[f+212>>2]|0)}n=c[l>>2]|0}else{n=d}d=m+4|0;o=+h[n+24>>3]+ +(c[d+4>>2]|0);j=c[m>>2]|0;gc(c[a+36>>2]|0,80576,(m=i,i=i+24|0,h[m>>3]=+h[n+16>>3]+ +(c[d>>2]|0),h[m+8>>3]=o,c[m+16>>2]=j,m)|0)|0;i=m;m=c[l>>2]|0;j=(c[m+104>>2]|0)+56|0;d=m+16|0;c[j>>2]=c[d>>2];c[j+4>>2]=c[d+4>>2];c[j+8>>2]=c[d+8>>2];c[j+12>>2]=c[d+12>>2];ek(a,10,c[(c[l>>2]|0)+104>>2]|0);if(!k){i=e;return}if((c[a+152>>2]&4|0)!=0){gB(a,c[g>>2]|0,c[f+228>>2]|0,c[f+244>>2]|0,c[f+212>>2]|0)}hB(a);i=e;return}function Ll(a){a=a|0;Sl(c[(c[a+8>>2]|0)+12>>2]|0);return}function Ml(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0;h=i;i=i+40|0;j=h|0;if((a[f]|0)==0){k=b;c[k>>2]=c[43356];c[k+4>>2]=c[43357];c[k+8>>2]=c[43358];c[k+12>>2]=c[43359];c[k+16>>2]=c[43360];c[k+20>>2]=c[43361];c[k+24>>2]=c[43362];c[k+28>>2]=c[43363];c[k+32>>2]=c[43364];c[k+36>>2]=c[43365];i=h;return}k=(g|0)==0?82448:g;g=c[(c[e+8>>2]|0)+12>>2]|0;l=Rl(g,f)|0;do{if((l|0)==0){if((xl(e,g+16|0,j,f,15,0)|0)==0){break}m=$w(e|0)|0;Fv(0,81120,(n=i,i=i+16|0,c[n>>2]=m,c[n+8>>2]=f,n)|0)|0;i=n}else{if((xl(e,l+16|0,j,k,d[l+65|0]|0,0)|0)==0){break}m=$w(e|0)|0;Fv(0,81824,(n=i,i=i+24|0,c[n>>2]=m,c[n+8>>2]=f,c[n+16>>2]=k,n)|0)|0;i=n}}while(0);n=b;b=j;c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];c[n+16>>2]=c[b+16>>2];c[n+20>>2]=c[b+20>>2];c[n+24>>2]=c[b+24>>2];c[n+28>>2]=c[b+28>>2];c[n+32>>2]=c[b+32>>2];c[n+36>>2]=c[b+36>>2];i=h;return}function Nl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0;d=i;i=i+16|0;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=d|0;f=c[a+4>>2]|0;g=c[a>>2]|0;si(e,b,(c[(c[(Hx(g|0)|0)+8>>2]|0)+116>>2]&3)*90|0);a=b;j=e;c[a>>2]=c[j>>2];c[a+4>>2]=c[j+4>>2];c[a+8>>2]=c[j+8>>2];c[a+12>>2]=c[j+12>>2];if((f|0)==0){j=c[(c[g+8>>2]|0)+12>>2]|0;k=j+16|0;l=j+24|0;m=j+32|0;n=j+40|0}else{k=f;l=f+8|0;m=f+16|0;n=f+24|0}o=+h[b>>3];if(+h[k>>3]>o){p=0;i=d;return p|0}if(o>+h[m>>3]){p=0;i=d;return p|0}o=+h[b+8>>3];if(+h[l>>3]>o){p=0;i=d;return p|0}p=o<=+h[n>>3]|0;i=d;return p|0}function Ol(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0;j=i;i=i+32|0;k=j|0;if((a[d+28|0]|0)==0){l=0;i=j;return l|0}m=+h[d>>3];d=b+8|0;n=c[(c[d>>2]|0)+12>>2]|0;o=n+48|0;if((c[o>>2]|0)<=0){l=e;i=j;return l|0}p=b|0;b=n+56|0;n=0;while(1){q=(c[(c[(Hx(p)|0)+8>>2]|0)+116>>2]&1|0)==0;r=c[(c[b>>2]|0)+(n<<2)>>2]|0;if(q){s=r+16|0;t=r+32|0}else{s=r+24|0;t=r+40|0}u=+(~~+h[s>>3]|0);if(u<=m){v=+(~~+h[t>>3]|0);if(m<=v){break}}r=n+1|0;if((r|0)<(c[o>>2]|0)){n=r}else{l=e;w=14;break}}if((w|0)==14){i=j;return l|0}if((c[(c[(Hx(p)|0)+8>>2]|0)+116>>2]&1|0)==0){h[f>>3]=u+ +h[(c[d>>2]|0)+16>>3];p=c[d>>2]|0;h[f+8>>3]=+h[p+24>>3]- +h[p+80>>3]*.5;h[f+16>>3]=v+ +h[(c[d>>2]|0)+16>>3]}else{ti(k,(c[(c[b>>2]|0)+(n<<2)>>2]|0)+16|0,(c[d>>2]|0)+16|0);n=f;b=k;c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=c[b+8>>2];c[n+12>>2]=c[b+12>>2];c[n+16>>2]=c[b+16>>2];c[n+20>>2]=c[b+20>>2];c[n+24>>2]=c[b+24>>2];c[n+28>>2]=c[b+28>>2]}b=c[d>>2]|0;h[f+24>>3]=+h[b+24>>3]+ +h[b+80>>3]*.5;c[g>>2]=1;l=e;i=j;return l|0}function Pl(d,e){d=d|0;e=e|0;var f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0.0,C=0;f=i;i=i+112|0;j=f|0;k=f+32|0;l=f+96|0;m=f+104|0;n=c[d+16>>2]|0;o=n+208|0;if((c[o>>2]|0)==0){p=(b[n+260>>1]&1)!=0}else{p=1}q=e+8|0;r=c[q>>2]|0;s=c[r+12>>2]|0;t=s;u=j;v=s+16|0;c[u>>2]=c[v>>2];c[u+4>>2]=c[v+4>>2];c[u+8>>2]=c[v+8>>2];c[u+12>>2]=c[v+12>>2];c[u+16>>2]=c[v+16>>2];c[u+20>>2]=c[v+20>>2];c[u+24>>2]=c[v+24>>2];c[u+28>>2]=c[v+28>>2];v=r+16|0;s=j|0;h[s>>3]=+h[v>>3]+ +h[s>>3];s=r+24|0;r=j+8|0;h[r>>3]=+h[s>>3]+ +h[r>>3];r=j+16|0;w=r|0;h[w>>3]=+h[v>>3]+ +h[w>>3];w=j+24|0;h[w>>3]=+h[s>>3]+ +h[w>>3];do{if(p){if((c[d+152>>2]&4|0)!=0){break}gB(d,c[o>>2]|0,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0)}}while(0);w=Hl(d,e)|0;s=e|0;v=Im(s,c[53644]|0,213320)|0;lB(d,(a[v]|0)!=0?v:88552);do{if((w&1|0)==0){x=0}else{v=Im(s,c[53632]|0,213320)|0;if((a[v]|0)==0){y=Im(s,c[53644]|0,213320)|0;z=(a[y]|0)==0?116344:y}else{z=v}v=l|0;if((Vh(z,v,m)|0)<<24>>24==0){nB(d,z);x=1;break}nB(d,c[v>>2]|0);y=c[l+4>>2]|0;A=Em(s,c[53622]|0,0,0)|0;B=+g[m>>2];if((y|0)==0){oB(d,88552,A,B)}else{oB(d,y,A,B)}eF(c[v>>2]|0);x=w>>>1&1|2}}while(0);m=c[c[(c[q>>2]|0)+8>>2]>>2]|0;if((a[m]|0)==77){q=(Ya(m|0,93976)|0)==0;C=q?w|4:w}else{C=w}if((C&2130706444|0)==0){sB(d,j,x)}else{j=k;c[j>>2]=c[u>>2];c[j+4>>2]=c[u+4>>2];c[j+8>>2]=c[u+8>>2];c[j+12>>2]=c[u+12>>2];u=k+32|0;j=u;w=r;c[j>>2]=c[w>>2];c[j+4>>2]=c[w+4>>2];c[j+8>>2]=c[w+8>>2];c[j+12>>2]=c[w+12>>2];h[k+16>>3]=+h[u>>3];h[k+24>>3]=+h[k+8>>3];h[k+48>>3]=+h[k>>3];h[k+56>>3]=+h[k+40>>3];ol(d,k|0,4,C,x)}Ql(d,e,t);if(!p){i=f;return}if((c[d+152>>2]&4|0)!=0){gB(d,c[o>>2]|0,c[n+228>>2]|0,c[n+244>>2]|0,c[n+212>>2]|0)}hB(d);i=f;return}function Ql(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0;f=i;i=i+32|0;g=f|0;j=e+52|0;k=c[j>>2]|0;if((k|0)==0){l=d+8|0}else{m=d+8|0;n=c[m>>2]|0;o=(+h[e+24>>3]+ +h[e+40>>3])*.5+ +h[n+24>>3];h[k+56>>3]=(+h[e+16>>3]+ +h[e+32>>3])*.5+ +h[n+16>>3];h[k+64>>3]=o;ek(b,10,c[j>>2]|0);j=Im(d|0,c[53644]|0,213320)|0;lB(b,(a[j]|0)!=0?j:88552);l=m}m=c[l>>2]|0;o=+h[m+16>>3];p=+h[m+24>>3];m=e+48|0;if((c[m>>2]|0)<=0){i=f;return}l=e+64|0;j=e+56|0;e=g+16|0;k=g|0;n=g+24|0;q=g+8|0;r=g|0;s=g+16|0;t=g;g=0;do{if((g|0)>0){u=(c[j>>2]|0)+(g<<2)|0;v=c[u>>2]|0;if((a[l]|0)==0){w=v+32|0;c[e>>2]=c[w>>2];c[e+4>>2]=c[w+4>>2];c[e+8>>2]=c[w+8>>2];c[e+12>>2]=c[w+12>>2];x=+h[(c[u>>2]|0)+16>>3];h[k>>3]=x;y=+h[n>>3];h[q>>3]=y;z=x;A=y;B=+h[s>>3];C=y}else{w=v+16|0;c[t>>2]=c[w>>2];c[t+4>>2]=c[w+4>>2];c[t+8>>2]=c[w+8>>2];c[t+12>>2]=c[w+12>>2];y=+h[k>>3];h[s>>3]=y;x=+h[(c[u>>2]|0)+40>>3];h[n>>3]=x;z=y;A=+h[q>>3];B=y;C=x}h[k>>3]=o+z;h[q>>3]=p+A;h[s>>3]=o+B;h[n>>3]=p+C;uB(b,r,2)}Ql(b,d,c[(c[j>>2]|0)+(g<<2)>>2]|0);g=g+1|0;}while((g|0)<(c[m>>2]|0));i=f;return}function Rl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=c[b+60>>2]|0;do{if((e|0)!=0){if((a[e]|0)!=(a[d]|0)){break}if((Ya(e|0,d|0)|0)==0){f=b}else{break}return f|0}}while(0);e=c[b+48>>2]|0;if((e|0)<=0){f=0;return f|0}g=c[b+56>>2]|0;b=0;while(1){h=Rl(c[g+(b<<2)>>2]|0,d)|0;i=b+1|0;if((h|0)!=0){f=h;j=8;break}if((i|0)<(e|0)){b=i}else{f=0;j=8;break}}if((j|0)==8){return f|0}return 0}function Sl(a){a=a|0;var b=0,d=0,e=0;b=a+48|0;d=a+56|0;if((c[b>>2]|0)>0){e=0;do{Sl(c[(c[d>>2]|0)+(e<<2)>>2]|0);e=e+1|0;}while((e|0)<(c[b>>2]|0))}eF(c[a+60>>2]|0);dk(c[a+52>>2]|0);eF(c[d>>2]|0);eF(a);return}function Tl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,j=0.0,k=0.0,l=0.0,m=0;d=i;i=i+16|0;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=d|0;f=c[a>>2]|0;si(e,b,(c[(c[(Hx(f|0)|0)+8>>2]|0)+116>>2]&3)*90|0);g=+h[e>>3];j=+h[e+8>>3];if((f|0)==(c[44094]|0)){k=+h[1813]}else{e=c[(c[f+8>>2]|0)+12>>2]|0;b=(c[e+4>>2]<<1)-2|0;l=+h[(c[e+44>>2]|0)+(((b|0)<0?1:b|1)<<4)>>3];h[1813]=l;c[44094]=f;k=l}if(+S(+g)>k){m=0;i=d;return m|0}if(+S(+j)>k){m=0;i=d;return m|0}k=+cb(+g,+j);m=k<=+h[1813]|0;i=d;return m|0}function Ul(e,f){e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0;g=i;i=i+8|0;j=g|0;k=c[e+16>>2]|0;l=k+208|0;m=c[l>>2]|0;if((m|0)==0){if((b[k+260>>1]&1)==0){n=0}else{o=3}}else{o=3}do{if((o|0)==3){if((c[e+152>>2]&4|0)!=0){n=1;break}gB(e,m,c[k+228>>2]|0,c[k+244>>2]|0,c[k+212>>2]|0);n=1}}while(0);m=f+8|0;p=c[(c[m>>2]|0)+12>>2]|0;q=c[p+44>>2]|0;r=c[p+8>>2]|0;s=c[p+4>>2]|0;if((c[44096]|0)<(r|0)){p=r+2|0;c[44096]=p;t=c[44098]|0;if((t|0)==0){u=kk(p<<4)|0}else{u=mk(t,p<<4)|0}c[44098]=u}Il(f,j)|0;if((c[j>>2]&32|0)==0){pB(e,14492)}else{pB(e,14488)}j=d[(c[m>>2]|0)+117|0]|0;do{if((j&1|0)==0){if((j&2|0)!=0){u=f|0;lB(e,Im(u,c[53592]|0,91912)|0);p=Im(u,c[53594]|0,91048)|0;nB(e,p);v=p;break}if((j&8|0)!=0){p=f|0;lB(e,Im(p,c[53638]|0,90552)|0);u=Im(p,c[53640]|0,89960)|0;nB(e,u);v=u;break}u=f|0;if((j&4|0)!=0){lB(e,Im(u,c[53576]|0,89400)|0);p=Im(u,c[53578]|0,89016)|0;nB(e,p);v=p;break}p=Im(u,c[53632]|0,213320)|0;if((a[p]|0)==0){t=Im(u,c[53644]|0,213320)|0;w=(a[t]|0)==0?88552:t}else{w=p}nB(e,w);p=Im(u,c[53644]|0,213320)|0;lB(e,(a[p]|0)!=0?p:88552);v=w}else{p=f|0;lB(e,Im(p,c[53646]|0,93016)|0);u=Im(p,c[53648]|0,92528)|0;nB(e,u);v=u}}while(0);do{if((s|0)==0){if((a[v]|0)==0){x=1;o=28;break}lB(e,v);x=1;o=28}else{if((s|0)>0){x=s;o=28}}}while(0);if((o|0)==28){o=(r|0)>0;s=0;v=1;while(1){if(o){f=da(s,r)|0;w=c[44098]|0;j=0;while(1){u=j+f|0;y=+h[q+(u<<4)+8>>3];h[w+(j<<4)>>3]=+h[q+(u<<4)>>3]+ +h[(c[m>>2]|0)+16>>3];h[w+(j<<4)+8>>3]=y+ +h[(c[m>>2]|0)+24>>3];u=j+1|0;if((u|0)<(r|0)){j=u}else{z=w;break}}}else{z=c[44098]|0}qB(e,z,r,v);w=s+1|0;if((w|0)<(x|0)){s=w;v=0}else{break}}}if(!n){i=g;return}if((c[e+152>>2]&4|0)!=0){gB(e,c[l>>2]|0,c[k+228>>2]|0,c[k+244>>2]|0,c[k+212>>2]|0)}hB(e);i=g;return}function Vl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;d=i;i=i+16|0;e=b;b=i;i=i+16|0;c[b>>2]=c[e>>2];c[b+4>>2]=c[e+4>>2];c[b+8>>2]=c[e+8>>2];c[b+12>>2]=c[e+12>>2];e=d|0;f=c[a+4>>2]|0;g=c[a>>2]|0;a=g|0;si(e,b,(c[(c[(Hx(a)|0)+8>>2]|0)+116>>2]&3)*90|0);j=+h[e>>3];k=+h[e+8>>3];if((f|0)!=0){if(+h[f>>3]>j){l=0;i=d;return l|0}if(j>+h[f+16>>3]|+h[f+8>>3]>k){l=0;i=d;return l|0}l=k<=+h[f+24>>3]|0;i=d;return l|0}if((g|0)==(c[44082]|0)){m=+h[1805];n=+h[1804];o=+h[1807]}else{f=g+8|0;e=c[(c[f>>2]|0)+12>>2]|0;c[44078]=e;c[44074]=c[e+44>>2];c[44076]=c[e+8>>2];e=(c[(c[(Hx(a)|0)+8>>2]|0)+116>>2]&1|0)==0;a=c[f>>2]|0;p=+h[a+88>>3]+ +h[a+96>>3];if(e){h[1803]=p;q=+h[(c[f>>2]|0)+80>>3];h[1802]=q;r=p;s=q}else{h[1802]=p;q=+h[(c[f>>2]|0)+80>>3];h[1803]=q;r=q;s=p}if(r==0.0){h[1803]=1.0;t=1.0}else{t=r}if(s==0.0){h[1802]=1.0;u=1.0}else{u=s}s=+h[(c[f>>2]|0)+32>>3]*72.0;if(s<0.0){v=s+-.5}else{v=s+.5}s=+(~~v|0)/t;h[1805]=s;t=+h[(c[f>>2]|0)+40>>3]*72.0;if(t<0.0){w=t+-.5}else{w=t+.5}t=+(~~w|0)/u;h[1804]=t;u=+h[(c[f>>2]|0)+32>>3]*72.0;if(u<0.0){x=u+-.5}else{x=u+.5}u=+(~~x|0)*.5;h[1807]=u;x=+h[(c[f>>2]|0)+40>>3]*72.0;if(x<0.0){y=x+-.5}else{y=x+.5}h[1806]=+(~~y|0)*.5;f=da((c[(c[44078]|0)+4>>2]|0)-1|0,c[44076]|0)|0;c[44080]=(f|0)<0?0:f;c[44082]=g;m=s;n=t;o=u}u=j*m;m=k*n;if(+S(+u)>o){l=0;i=d;return l|0}n=+S(+m);k=+h[1806];if(n>k){l=0;i=d;return l|0}g=c[44076]|0;if((g|0)<3){l=+cb(+(u/o),+(m/k))<1.0|0;i=d;return l|0}f=(c[44084]|0)%(g|0)|0;e=(f+1|0)%(g|0)|0;a=c[44080]|0;b=a+f|0;z=c[44074]|0;k=+h[z+(b<<4)>>3];o=+h[z+(b<<4)+8>>3];b=a+e|0;n=+h[z+(b<<4)>>3];j=+h[z+(b<<4)+8>>3];t=+h[22043];s=+h[22044];y=-0.0-(j-o);x=n-k;w=o*x+k*y;if(m*x+u*y-w>=0.0^x*s+t*y-w>=0.0){l=0;i=d;return l|0}w=-0.0-(s-j);y=t-n;x=j*y+n*w;b=m*y+u*w-x>=0.0^o*y+k*w-x>=0.0;do{if(!b){x=-0.0-(o-s);w=k-t;y=w*s+t*x;if(m*w+u*x-y>=0.0^j*w+n*x-y>=0.0){break}else{l=1}i=d;return l|0}}while(0);a:do{if((g|0)>1){A=1;B=e;C=f;while(1){if(b){D=(C-1+g|0)%(g|0)|0;E=C}else{D=B;E=(B+1|0)%(g|0)|0}F=a+D|0;G=a+E|0;n=+h[z+(F<<4)>>3];j=+h[z+(F<<4)+8>>3];k=-0.0-(+h[z+(G<<4)+8>>3]-j);o=+h[z+(G<<4)>>3]-n;y=j*o+n*k;G=A+1|0;if(m*o+u*k-y>=0.0^s*o+t*k-y>=0.0){break}if((G|0)<(g|0)){A=G;B=E;C=D}else{H=D;break a}}c[44084]=D;l=0;i=d;return l|0}else{H=f}}while(0);c[44084]=H;l=1;i=d;return l|0}function Wl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0;g=jk(72)|0;i=g;j=c[(c[b+8>>2]|0)+104>>2]|0;k=0;l=1;m=c[43784]|0;while(1){n=a[m]|0;if((n<<24>>24|0)==92){o=m+1|0;p=a[o]|0;if((p<<24>>24|0)==92|(p<<24>>24|0)==123|(p<<24>>24|0)==125|(p<<24>>24|0)==124){q=k;r=l;s=o}else{t=o;u=p;v=4}}else if((n<<24>>24|0)==0){w=l;break}else{t=m;u=n;v=4}if((v|0)==4){v=0;if((u<<24>>24|0)==123){x=k+1|0;y=l}else if((u<<24>>24|0)==124){x=k;y=((k|0)==0)+l|0}else if((u<<24>>24|0)==125){x=k-1|0;y=l}else{x=k;y=l}if((x|0)<0){w=y;break}else{q=x;r=y;s=t}}k=q;l=r;m=s+1|0}s=g+56|0;c[s>>2]=jk(w<<2)|0;a[g+64|0]=d;w=(d|0)==0|0;d=j+82|0;m=f+1|0;r=(e|0)==0;e=b|0;l=j+16|0;q=j+4|0;k=j+8|0;j=0;t=0;y=0;x=0;u=0;n=f;p=0;o=f;z=0;a:while(1){A=j;B=t;C=x;D=u;E=n;F=p;G=o;H=z;while(1){I=A;J=B;K=C;L=0;M=D;N=E;O=F;P=G;b:while(1){Q=I;R=K;S=L;T=M;U=O;c:while(1){V=Q;W=R;X=S;Y=U;d:while(1){Z=V;_=W;e:while(1){if(y){v=81;break a}$=c[43784]|0;aa=a[$]|0;switch(aa<<24>>24|0){case 92:{v=56;break c;break};case 60:{break d;break};case 125:case 124:case 0:{break b;break};case 123:{break};case 62:{break e;break};default:{ba=J;ca=_;da=P;ea=$;break c}}fa=$+1|0;c[43784]=fa;if((_|0)!=0){v=33;break a}if((a[fa]|0)==0){v=33;break a}fa=Wl(b,w,0,f)|0;c[(c[s>>2]|0)+(Z<<2)>>2]=fa;if((fa|0)==0){v=36;break a}else{Z=Z+1|0;_=4}}if((a[d]|0)!=0){ba=J;ca=_;da=P;ea=$;break c}if((_&16|0)==0){v=25;break a}do{if(Y>>>0>m>>>0){fa=Y-1|0;if((fa|0)==(T|0)){ga=Y;break}ga=(a[fa]|0)==32?fa:Y}else{ga=Y}}while(0);a[ga]=0;fa=Lb(f|0)|0;c[43784]=(c[43784]|0)+1;V=Z;W=_&-17;X=fa;Y=ga}if((_&6|0)!=0){v=19;break a}if((a[d]|0)!=0){ba=J;ca=_;da=P;ea=$;break}c[43784]=$+1;Q=Z;R=_|18;S=X;T=f;U=f}f:do{if((v|0)==56){v=0;U=$+1|0;switch(a[U]|0){case 123:case 125:case 124:case 60:case 62:{c[43784]=U;ba=J;ca=_;da=P;ea=U;break f;break};case 32:{v=58;break};case 0:{ba=J;ca=_;da=P;ea=$;break f;break};default:{}}do{if((v|0)==58){v=0;if((a[d]|0)!=0){break}c[43784]=U;ba=1;ca=_;da=P;ea=U;break f}}while(0);a[P]=92;U=(c[43784]|0)+1|0;c[43784]=U;ba=J;ca=_|9;da=P+1|0;ea=U}}while(0);if((ca&4|0)!=0){if((a[ea]|0)!=32){v=63;break a}}if((ca&24|0)==0){ha=(a[ea]|0)==32?ca:ca|9}else{ha=ca}do{if((ha&8|0)==0){if((ha&16|0)==0){ia=T;ja=N;ka=Y;la=da;break}U=a[ea]|0;S=(ba|0)==0;do{if(U<<24>>24==32&S){if((Y|0)==(f|0)){ma=f;break}if((a[Y-1|0]|0)==32){ma=Y}else{v=77}}else{v=77}}while(0);if((v|0)==77){v=0;a[Y]=U;ma=Y+1|0}ia=S?T:ma-1|0;ja=N;ka=ma;la=da}else{R=a[ea]|0;Q=(ba|0)==0;do{if(R<<24>>24==32&Q){if((a[da-1|0]|0)!=32){v=71;break}if((a[d]|0)==0){na=da}else{v=71}}else{v=71}}while(0);if((v|0)==71){v=0;a[da]=R;na=da+1|0}ia=T;ja=Q?N:na-1|0;ka=Y;la=na}}while(0);S=(c[43784]|0)+1|0;c[43784]=S;if((a[S]|0)<0){oa=la;pa=S}else{I=Z;J=ba;K=ha;L=X;M=ia;N=ja;O=ka;P=la;continue}while(1){c[43784]=pa+1;S=oa+1|0;a[oa]=a[pa]|0;U=c[43784]|0;if((a[U]|0)<0){oa=S;pa=U}else{I=Z;J=ba;K=ha;L=X;M=ia;N=ja;O=ka;P=S;continue b}}}if(aa<<24>>24==0&r){v=40;break a}if((_&16|0)!=0){v=40;break a}if((_&4|0)==0){O=jk(72)|0;c[(c[s>>2]|0)+(Z<<2)>>2]=O;qa=Z+1|0;ra=O}else{qa=Z;ra=H}if((X|0)!=0){c[ra+60>>2]=X}if((_&5|0)==0){a[P]=32;sa=_|1;ta=P+1|0}else{sa=_;ta=P}if((sa&1|0)==0){ua=N;va=ta}else{do{if(ta>>>0>m>>>0){O=ta-1|0;if((O|0)==(N|0)){wa=ta;break}wa=(a[O]|0)==32?O:ta}else{wa=ta}}while(0);a[wa]=0;N=Lb(f|0)|0;c[ra+52>>2]=ak(e,N,(a[d]|0)!=0?2:0,+h[l>>3],c[q>>2]|0,c[k>>2]|0)|0;a[ra+64|0]=1;ua=f;va=f}xa=c[43784]|0;N=a[xa]|0;if((N<<24>>24|0)==0){j=qa;t=J;y=1;x=sa;u=T;n=ua;p=Y;o=va;z=ra;continue a}else if((N<<24>>24|0)==125){v=54;break a}c[43784]=xa+1;A=qa;B=J;C=0;D=T;E=ua;F=Y;G=va;H=ra}}if((v|0)==19){Sl(i);if((X|0)==0){ya=0;return ya|0}eF(X);ya=0;return ya|0}else if((v|0)==25){Sl(i);if((X|0)==0){ya=0;return ya|0}eF(X);ya=0;return ya|0}else if((v|0)==33){Sl(i);if((X|0)==0){ya=0;return ya|0}eF(X);ya=0;return ya|0}else if((v|0)==36){Sl(i);if((X|0)==0){ya=0;return ya|0}eF(X);ya=0;return ya|0}else if((v|0)==40){Sl(i);if((X|0)==0){ya=0;return ya|0}eF(X);ya=0;return ya|0}else if((v|0)==54){c[43784]=xa+1;c[g+48>>2]=qa;ya=i;return ya|0}else if((v|0)==63){Sl(i);if((X|0)==0){ya=0;return ya|0}eF(X);ya=0;return ya|0}else if((v|0)==81){c[g+48>>2]=Z;ya=i;return ya|0}return 0}function Xl(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,C=0.0,D=0.0;f=i;i=i+32|0;g=f|0;j=f+8|0;k=f+16|0;l=c[e+52>>2]|0;do{if((l|0)==0){m=e+48|0;if((c[m>>2]|0)<=0){n=0.0;o=0.0;break}p=e+56|0;q=k|0;r=k+8|0;s=e+64|0;t=0.0;u=0.0;v=0;while(1){Xl(k,d,c[(c[p>>2]|0)+(v<<2)>>2]|0);w=+h[q>>3];x=+h[r>>3];if((a[s]|0)==0){y=u+x;z=t>w?t:w}else{y=u>x?u:x;z=t+w}A=v+1|0;if((A|0)<(c[m>>2]|0)){t=z;u=y;v=A}else{n=y;o=z;break}}}else{u=+h[l+24>>3];t=+h[l+32>>3];if(!(u>0.0|t>0.0)){n=t;o=u;break}v=ew(d|0,78824)|0;if((v|0)==0){n=t+8.0;o=u+16.0;break}m=ac(v|0,168832,(v=i,i=i+16|0,c[v>>2]=g,c[v+8>>2]=j,v)|0)|0;i=v;if((m|0)<=0){n=t+8.0;o=u+16.0;break}w=+h[g>>3]*72.0;if(w<0.0){B=w+-.5}else{B=w+.5}w=u+ +(~~B<<1|0);u=+h[j>>3]*72.0;v=u>=0.0;if((m|0)>1){if(v){C=u+.5}else{C=u+-.5}n=t+ +(~~C<<1|0);o=w;break}else{if(v){D=u+.5}else{D=u+-.5}n=t+ +(~~D<<1|0);o=w;break}}}while(0);h[e>>3]=o;h[e+8>>3]=n;h[b>>3]=o;h[b+8>>3]=n;i=f;return}function Yl(b,d,e,f){b=b|0;d=+d;e=+e;f=f|0;var g=0,i=0.0,j=0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0;g=b|0;i=d- +h[g>>3];j=b+8|0;k=e- +h[j>>3];h[g>>3]=d;h[j>>3]=e;j=b+52|0;g=c[j>>2]|0;if((g|0)!=0&(f|0)==0){l=g+40|0;h[l>>3]=i+ +h[l>>3];l=(c[j>>2]|0)+48|0;h[l>>3]=k+ +h[l>>3]}l=b+48|0;j=c[l>>2]|0;if((j|0)==0){return}g=b+64|0;m=a[g]|0;n=(m<<24>>24==0?k:i)/+(j|0);if((j|0)<=0){return}j=b+56|0;b=0;o=m;while(1){m=c[(c[j>>2]|0)+(b<<2)>>2]|0;p=b+1|0;q=~~(n*+(p|0))-~~(n*+(b|0))|0;if(o<<24>>24==0){r=d;s=+(q|0)+ +h[m+8>>3]}else{r=+(q|0)+ +h[m>>3];s=e}Yl(m,r,s,f);if((p|0)>=(c[l>>2]|0)){break}b=p;o=a[g]|0}return}function Zl(b,d,e,f){b=b|0;d=+d;e=+e;f=f|0;var g=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0;a[b+65|0]=f;g=e- +h[b+8>>3];h[b+16>>3]=d;h[b+24>>3]=g;h[b+32>>3]=+h[b>>3]+d;h[b+40>>3]=e;i=c[b+48>>2]|0;j=i-1|0;if((i|0)<1){return}i=(f|0)==0;k=b+56|0;l=b+64|0;g=e;e=d;b=0;while(1){do{if(i){m=0}else{n=(b|0)==0;o=(b|0)==(j|0);if((a[l]|0)==0){if(n){m=o?15:14;break}else{m=o?11:10;break}}else{if(n){m=o?15:13;break}else{m=o?7:5;break}}}}while(0);Zl(c[(c[k>>2]|0)+(b<<2)>>2]|0,e,g,m&f);o=c[(c[k>>2]|0)+(b<<2)>>2]|0;if((a[l]|0)==0){p=e;q=g- +h[o+8>>3]}else{p=e+ +h[o>>3];q=g}if((b|0)<(j|0)){g=q;e=p;b=b+1|0}else{break}}return}function _l(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0;f=i;i=i+176|0;g=f|0;j=f+64|0;k=f+128|0;l=f+144|0;m=f+152|0;n=f+160|0;o=g|0;if(e<<24>>24==0){e=k;p=d+48|0;c[e>>2]=c[p>>2];c[e+4>>2]=c[p+4>>2];c[e+8>>2]=c[p+8>>2];c[e+12>>2]=c[p+12>>2];q=l;r=m;s=o;t=0}else{p=k;e=d;c[p>>2]=c[e>>2];c[p+4>>2]=c[e+4>>2];c[p+8>>2]=c[e+8>>2];c[p+12>>2]=c[e+12>>2];q=m;r=l;s=0;t=o}h[l>>3]=0.0;h[m>>3]=1.0;o=k|0;e=k+8|0;p=k;u=n;v=0;w=+h[o>>3];x=1.0;y=0.0;while(1){z=+h[e>>3];A=(x+y)*.5;Qm(n,d,3,A,s,t);c[p>>2]=c[u>>2];c[p+4>>2]=c[u+4>>2];c[p+8>>2]=c[u+8>>2];c[p+12>>2]=c[u+12>>2];if((Oc[b&255](a,k)|0)<<24>>24==0){B=j;C=g;c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];c[B+8>>2]=c[C+8>>2];c[B+12>>2]=c[C+12>>2];C=j+16|0;B=g+16|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];B=j+32|0;C=g+32|0;c[B>>2]=c[C>>2];c[B+4>>2]=c[C+4>>2];c[B+8>>2]=c[C+8>>2];c[B+12>>2]=c[C+12>>2];C=j+48|0;B=g+48|0;c[C>>2]=c[B>>2];c[C+4>>2]=c[B+4>>2];c[C+8>>2]=c[B+8>>2];c[C+12>>2]=c[B+12>>2];h[q>>3]=A;D=1}else{h[r>>3]=A;D=v}A=+h[o>>3];E=w-A;if(E<0.0){F=-0.0-E}else{F=E}if(F<=.5){E=z- +h[e>>3];if(E<0.0){G=-0.0-E}else{G=E}if(G<=.5){break}}v=D;w=A;x=+h[m>>3];y=+h[l>>3]}l=d;if(D<<24>>24==0){D=g;c[l>>2]=c[D>>2];c[l+4>>2]=c[D+4>>2];c[l+8>>2]=c[D+8>>2];c[l+12>>2]=c[D+12>>2];D=d+16|0;m=g+16|0;c[D>>2]=c[m>>2];c[D+4>>2]=c[m+4>>2];c[D+8>>2]=c[m+8>>2];c[D+12>>2]=c[m+12>>2];m=d+32|0;D=g+32|0;c[m>>2]=c[D>>2];c[m+4>>2]=c[D+4>>2];c[m+8>>2]=c[D+8>>2];c[m+12>>2]=c[D+12>>2];D=d+48|0;m=g+48|0;c[D>>2]=c[m>>2];c[D+4>>2]=c[m+4>>2];c[D+8>>2]=c[m+8>>2];c[D+12>>2]=c[m+12>>2];i=f;return}else{m=j;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];m=d+16|0;l=j+16|0;c[m>>2]=c[l>>2];c[m+4>>2]=c[l+4>>2];c[m+8>>2]=c[l+8>>2];c[m+12>>2]=c[l+12>>2];l=d+32|0;m=j+32|0;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];m=d+48|0;d=j+48|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];i=f;return}}function $l(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0;d=i;i=i+24|0;e=d|0;f=d+16|0;g=a+8|0;j=c[g>>2]|0;k=j+8|0;l=c[k>>2]|0;if((l|0)==0){i=d;return}if((c[(c[l+4>>2]|0)+12>>2]|0)==0){i=d;return}c[f>>2]=a;c[f+4>>2]=0;m=+h[j+96>>3];h[e>>3]=+h[b>>3]- +h[j+16>>3];h[e+8>>3]=+h[b+8>>3]- +h[j+24>>3];j=Oc[c[(c[(c[k>>2]|0)+4>>2]|0)+12>>2]&255](f,e)|0;h[(c[g>>2]|0)+96>>3]=m;am(f,a,b,j);i=d;return}function am(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;f=i;i=i+64|0;g=f|0;j=b+8|0;b=c[j>>2]|0;k=+h[b+96>>3];l=d|0;m=b+16|0;n=g|0;h[n>>3]=+h[l>>3]- +h[m>>3];o=d+8|0;p=b+24|0;q=g+8|0;h[q>>3]=+h[o>>3]- +h[p>>3];r=d+16|0;s=g+16|0;h[s>>3]=+h[r>>3]- +h[m>>3];t=d+24|0;u=g+24|0;h[u>>3]=+h[t>>3]- +h[p>>3];v=d+32|0;w=g+32|0;h[w>>3]=+h[v>>3]- +h[m>>3];x=d+40|0;y=g+40|0;h[y>>3]=+h[x>>3]- +h[p>>3];z=d+48|0;A=g+48|0;h[A>>3]=+h[z>>3]- +h[m>>3];m=d+56|0;d=g+56|0;h[d>>3]=+h[m>>3]- +h[p>>3];_l(a,c[(c[(c[b+8>>2]|0)+4>>2]|0)+12>>2]|0,g|0,e);h[l>>3]=+h[n>>3]+ +h[(c[j>>2]|0)+16>>3];h[o>>3]=+h[q>>3]+ +h[(c[j>>2]|0)+24>>3];h[r>>3]=+h[s>>3]+ +h[(c[j>>2]|0)+16>>3];h[t>>3]=+h[u>>3]+ +h[(c[j>>2]|0)+24>>3];h[v>>3]=+h[w>>3]+ +h[(c[j>>2]|0)+16>>3];h[x>>3]=+h[y>>3]+ +h[(c[j>>2]|0)+24>>3];h[z>>3]=+h[A>>3]+ +h[(c[j>>2]|0)+16>>3];h[m>>3]=+h[d>>3]+ +h[(c[j>>2]|0)+24>>3];h[(c[j>>2]|0)+96>>3]=k;i=f;return}function bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=b+8|0;b=c[e>>2]|0;if((a[b+112|0]|0)==0){f=e;g=b}else{e=b;while(1){b=(c[e+116>>2]|0)+8|0;h=c[b>>2]|0;if((a[h+112|0]|0)==0){f=b;g=h;break}else{e=h}}}if((c[g+8>>2]|0)==0){e=jk(40)|0;c[(c[f>>2]|0)+8>>2]=e;i=c[f>>2]|0}else{i=g}g=c[i+8>>2]|0;i=c[g>>2]|0;if((i|0)==0){j=kk(((c[g+4>>2]|0)*48|0)+48|0)|0}else{j=mk(i,((c[g+4>>2]|0)*48|0)+48|0)|0}c[c[(c[f>>2]|0)+8>>2]>>2]=j;j=(c[(c[f>>2]|0)+8>>2]|0)+4|0;g=c[j>>2]|0;c[j>>2]=g+1;j=c[c[(c[f>>2]|0)+8>>2]>>2]|0;f=j+(g*48|0)|0;c[f>>2]=jk(d<<4)|0;c[j+(g*48|0)+4>>2]=d;vF(j+(g*48|0)+8|0,0,40)|0;return f|0}function cm(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0;j=i;i=i+104|0;k=j|0;l=j+8|0;m=j+16|0;n=j+32|0;o=j+40|0;p=b;q=b+32|0;r=c[((c[p>>2]&3|0)==3?b:q)+28>>2]|0;s=Hx(r|0)|0;t=bm(b,f)|0;u=b+8|0;v=c[u>>2]|0;if((a[v+112|0]|0)==0){w=b;x=v}else{y=v;do{z=c[y+116>>2]|0;y=c[z+8>>2]|0;}while((a[y+112|0]|0)!=0);w=z;x=y}y=g+8|0;do{if((a[y]|0)==0){z=c[r+8>>2]|0;v=c[d+8>>2]|0;if((c[z+232>>2]|0)!=(c[v+232>>2]|0)){A=d;B=r;break}C=(c[z+236>>2]|0)>(c[v+236>>2]|0);A=C?r:d;B=C?d:r}else{A=d;B=r}}while(0);if((B|0)==(c[((c[w>>2]&3|0)==3?w:w+32|0)+28>>2]|0)){D=x+80|0;E=x+40|0;F=x+56|0;G=x+16|0}else{D=x+40|0;E=x+80|0;F=x+16|0;G=x+56|0}x=a[F+30|0]|0;F=c[D>>2]|0;D=c[E>>2]|0;do{if((a[G+30|0]|0)==0){H=0}else{E=B+8|0;w=c[(c[E>>2]|0)+8>>2]|0;if((w|0)==0){H=0;break}if((c[(c[w+4>>2]|0)+12>>2]|0)==0){H=0;break}c[n>>2]=B;c[n+4>>2]=D;w=f-4|0;r=m|0;d=m+8|0;C=0;while(1){if((C|0)>=(w|0)){break}v=C+3|0;h[r>>3]=+h[e+(v<<4)>>3]- +h[(c[E>>2]|0)+16>>3];h[d>>3]=+h[e+(v<<4)+8>>3]- +h[(c[E>>2]|0)+24>>3];if((Oc[c[(c[(c[(c[E>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]&255](n,m)|0)<<24>>24==0){break}else{C=v}}am(n,B,e+(C<<4)|0,1);H=C}}while(0);do{if(x<<24>>24==0){I=25}else{B=A+8|0;D=c[(c[B>>2]|0)+8>>2]|0;if((D|0)==0){I=25;break}if((c[(c[D+4>>2]|0)+12>>2]|0)==0){I=25;break}c[n>>2]=A;c[n+4>>2]=F;D=f-4|0;a:do{if((D|0)>0){G=m|0;E=m+8|0;d=D;while(1){h[G>>3]=+h[e+(d<<4)>>3]- +h[(c[B>>2]|0)+16>>3];h[E>>3]=+h[e+(d<<4)+8>>3]- +h[(c[B>>2]|0)+24>>3];r=d-3|0;if((Oc[c[(c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]|0)+12>>2]&255](n,m)|0)<<24>>24==0){J=d;break a}if((r|0)>0){d=r}else{J=r;break}}}else{J=D}}while(0);am(n,A,e+(J<<4)|0,0);K=J}}while(0);if((I|0)==25){K=f-4|0}J=f-4|0;f=H;while(1){if((f|0)>=(J|0)){break}H=f+3|0;L=+h[e+(f<<4)>>3]- +h[e+(H<<4)>>3];M=+h[e+(f<<4)+8>>3]- +h[e+(H<<4)+8>>3];if(L*L+M*M<1.0e-6){f=H}else{break}}b:do{if((K|0)>0){J=K;while(1){H=J+3|0;M=+h[e+(J<<4)>>3]- +h[e+(H<<4)>>3];L=+h[e+(J<<4)+8>>3]- +h[e+(H<<4)+8>>3];H=J-3|0;if(M*M+L*L>=1.0e-6){N=J;break b}if((H|0)>0){J=H}else{N=H;break}}}else{N=K}}while(0);K=c[(c[u>>2]|0)+116>>2]|0;if((K|0)==0){O=b}else{u=K;while(1){K=c[(c[u+8>>2]|0)+116>>2]|0;if((K|0)==0){break}else{u=K}}O=u}if((a[y]|0)==0){P=(Ec[c[g>>2]&63](O)|0)&255}else{P=0}ih(O,k,l);y=g+4|0;if((Ec[c[y>>2]&63](A)|0)<<24>>24!=0){c[l>>2]=0}if((Ec[c[y>>2]&63](c[((c[p>>2]&3|0)==3?b:q)+28>>2]|0)|0)<<24>>24!=0){c[k>>2]=0}if((P|0)!=0){P=c[k>>2]|0;c[k>>2]=c[l>>2];c[l>>2]=P}do{if((a[g+9|0]|0)==0){P=c[k>>2]|0;if((P|0)==0){Q=f}else{Q=nh(O,e,f,N,t,P)|0}P=c[l>>2]|0;if((P|0)==0){R=N;S=Q;break}R=lh(O,e,Q,N,t,P)|0;S=Q}else{P=c[l>>2]|0;q=c[k>>2]|0;if((q|P|0)==0){R=N;S=f;break}oh(O,e,f,N,t,q,P);R=N;S=f}}while(0);f=R+4|0;if((S|0)>=(f|0)){T=4-S|0;U=T+R|0;V=t+4|0;c[V>>2]=U;i=j;return}N=t|0;O=o;k=R+3|0;l=o|0;Q=o+16|0;g=o+32|0;P=o+48|0;o=s+8|0;s=S;while(1){q=(c[N>>2]|0)+(s-S<<4)|0;b=e+(s<<4)|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];c[O>>2]=c[b>>2];c[O+4>>2]=c[b+4>>2];c[O+8>>2]=c[b+8>>2];c[O+12>>2]=c[b+12>>2];b=s+1|0;if((s|0)>=(k|0)){I=54;break}q=(c[N>>2]|0)+(b-S<<4)|0;p=e+(b<<4)|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];c[Q>>2]=c[p>>2];c[Q+4>>2]=c[p+4>>2];c[Q+8>>2]=c[p+8>>2];c[Q+12>>2]=c[p+12>>2];p=s+2|0;q=(c[N>>2]|0)+(p-S<<4)|0;b=e+(p<<4)|0;c[q>>2]=c[b>>2];c[q+4>>2]=c[b+4>>2];c[q+8>>2]=c[b+8>>2];c[q+12>>2]=c[b+12>>2];c[g>>2]=c[b>>2];c[g+4>>2]=c[b+4>>2];c[g+8>>2]=c[b+8>>2];c[g+12>>2]=c[b+12>>2];b=s+3|0;q=e+(b<<4)|0;c[P>>2]=c[q>>2];c[P+4>>2]=c[q+4>>2];c[P+8>>2]=c[q+8>>2];c[P+12>>2]=c[q+12>>2];Oh((c[o>>2]|0)+16|0,l);if((b|0)<(f|0)){s=b}else{I=54;break}}if((I|0)==54){T=4-S|0;U=T+R|0;V=t+4|0;c[V>>2]=U;i=j;return}}function dm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;e=b;b=i;i=i+32|0;tF(b,e,32)|0;if(+h[b>>3]>=+h[b+16>>3]){i=d;return}if(+h[b+8>>3]>=+h[b+24>>3]){i=d;return}e=a+80|0;f=c[e>>2]|0;c[e>>2]=f+1;e=(c[a+84>>2]|0)+(f<<5)|0;f=b;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];c[e+16>>2]=c[f+16>>2];c[e+20>>2]=c[f+20>>2];c[e+24>>2]=c[f+24>>2];c[e+28>>2]=c[f+28>>2];i=d;return}function em(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0,Z=0,_=0,$=0,aa=0;j=i;i=i+40|0;k=j|0;l=d;m=c[l>>2]&3;n=d+32|0;o=c[((m|0)==3?d:n)+28>>2]|0;p=d+8|0;q=(c[p>>2]|0)+16|0;r=q;if((a[r+31|0]|0)!=0){wl(k,o,c[((m|0)==2?d:d-32|0)+28>>2]|0,r);r=q;q=k;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];c[r+16>>2]=c[q+16>>2];c[r+20>>2]=c[q+20>>2];c[r+24>>2]=c[q+24>>2];c[r+28>>2]=c[q+28>>2];c[r+32>>2]=c[q+32>>2];c[r+36>>2]=c[q+36>>2]}q=o+8|0;r=c[q>>2]|0;k=c[r+8>>2]|0;if((k|0)==0){s=0}else{s=c[(c[k+4>>2]|0)+16>>2]|0}k=c[p>>2]|0;t=+h[r+24>>3]+ +h[k+24>>3];m=b;u=b|0;h[u>>3]=+h[r+16>>3]+ +h[k+16>>3];k=b+8|0;h[k>>3]=t;do{if(g<<24>>24==0){r=c[p>>2]|0;if((a[r+45|0]|0)==0){a[b+29|0]=0;break}else{h[b+16>>3]=+h[r+32>>3];a[b+29|0]=1;break}}else{h[b+16>>3]=+fm(c[((c[l>>2]&3|0)==3?d:n)+28>>2]|0);a[b+29|0]=1}}while(0);c[b+80>>2]=0;c[b+88>>2]=d;b=f+32|0;c[b>>2]=c[m>>2];c[b+4>>2]=c[m+4>>2];c[b+8>>2]=c[m+8>>2];c[b+12>>2]=c[m+12>>2];m=(e|0)==1;do{if(m){if((a[(c[q>>2]|0)+156|0]|0)!=0){v=1;break}b=a[(c[p>>2]|0)+49|0]|0;n=b&255;if(b<<24>>24==0){w=47;break}t=+h[f>>3];x=+h[f+8>>3];y=+h[f+16>>3];z=+h[f+24>>3];do{if((n&4|0)==0){if((n&1|0)!=0){c[f+48>>2]=1;A=+h[k>>3];h[f+56>>3]=t;h[f+64>>3]=x;h[f+72>>3]=y;h[f+80>>3]=z>A?z:A;c[f+52>>2]=1;h[k>>3]=+h[k>>3]+-1.0;break}b=f+48|0;if((n&8|0)==0){c[b>>2]=2;l=c[q>>2]|0;A=+h[l+80>>3];if(A<0.0){B=A+-.5}else{B=A+.5}A=+h[l+24>>3]- +((~~B+1|0)/2|0|0);C=+h[k>>3];h[f+56>>3]=+h[u>>3];h[f+64>>3]=A;h[f+72>>3]=y;h[f+80>>3]=C;c[f+52>>2]=1;h[u>>3]=+h[u>>3]+1.0;break}else{c[b>>2]=8;C=+h[u>>3];b=c[q>>2]|0;A=+h[b+80>>3];if(A<0.0){D=A+-.5}else{D=A+.5}A=+h[b+24>>3]- +((~~D+1|0)/2|0|0);E=+h[k>>3];h[f+56>>3]=t;h[f+64>>3]=A;h[f+72>>3]=C;h[f+80>>3]=E;c[f+52>>2]=1;h[u>>3]=+h[u>>3]+-1.0;break}}else{c[f+48>>2]=4;b=c[q>>2]|0;if(+h[u>>3]<+h[b+16>>3]){E=t+-1.0;C=+h[k>>3];A=+h[b+80>>3];if(A<0.0){F=A+-.5}else{F=A+.5}A=+h[b+24>>3]+ +((~~F+1|0)/2|0|0);G=A+ +((c[(c[(Hx(o|0)|0)+8>>2]|0)+240>>2]|0)/2|0|0);l=c[q>>2]|0;A=+h[l+16>>3]- +h[l+88>>3];H=+h[l+80>>3];if(H<0.0){I=H+-.5}else{I=H+.5}H=+h[l+24>>3]- +((~~I+1|0)/2|0|0);h[f+56>>3]=E;h[f+64>>3]=C;h[f+72>>3]=y;h[f+80>>3]=G;h[f+88>>3]=E;h[f+96>>3]=H;h[f+104>>3]=A;h[f+112>>3]=C}else{C=+h[k>>3];A=y+1.0;H=+h[b+80>>3];if(H<0.0){J=H+-.5}else{J=H+.5}H=+h[b+24>>3]+ +((~~J+1|0)/2|0|0);E=H+ +((c[(c[(Hx(o|0)|0)+8>>2]|0)+240>>2]|0)/2|0|0);b=c[q>>2]|0;H=+h[b+16>>3]+ +h[b+96>>3]+0.0;G=+h[b+80>>3];if(G<0.0){K=G+-.5}else{K=G+.5}G=+h[b+24>>3]- +((~~K+1|0)/2|0|0);h[f+56>>3]=t;h[f+64>>3]=C;h[f+72>>3]=A;h[f+80>>3]=E;h[f+88>>3]=H;h[f+96>>3]=G;h[f+104>>3]=A;h[f+112>>3]=C}h[k>>3]=+h[k>>3]+1.0;c[f+52>>2]=2}}while(0);n=c[p>>2]|0;if((a[n+112|0]|0)==0){L=d;M=n}else{b=n;do{N=c[b+116>>2]|0;b=c[N+8>>2]|0;}while((a[b+112|0]|0)!=0);L=N;M=b}if((o|0)==(c[((c[L>>2]&3|0)==3?L:L+32|0)+28>>2]|0)){a[M+46|0]=0;i=j;return}else{a[M+86|0]=0;i=j;return}}else{w=47}}while(0);do{if((w|0)==47){do{if((e|0)==2){M=a[(c[p>>2]|0)+49|0]|0;L=M&255;if(M<<24>>24==0){break}K=+h[f>>3];J=+h[f+8>>3];I=+h[f+16>>3];F=+h[f+24>>3];do{if((L&4|0)==0){if((L&1|0)!=0){if((c[f+48>>2]|0)==4){M=c[q>>2]|0;D=+h[M+80>>3];if(D<0.0){O=D+-.5}else{O=D+.5}D=+h[M+24>>3]- +((~~O+1|0)/2|0|0);B=I+1.0;t=+h[u>>3];y=D- +((c[(c[(Hx(o|0)|0)+8>>2]|0)+240>>2]|0)/2|0|0);M=c[q>>2]|0;z=+h[M+16>>3]+ +h[M+96>>3]+0.0;x=+h[M+80>>3];if(x<0.0){P=x+-.5}else{P=x+.5}x=+h[M+24>>3]+ +((~~P+1|0)/2|0|0);h[f+56>>3]=t;h[f+64>>3]=y;h[f+72>>3]=B;h[f+80>>3]=D;h[f+88>>3]=z;h[f+96>>3]=D;h[f+104>>3]=B;h[f+112>>3]=x;c[f+52>>2]=2}else{x=+h[k>>3];h[f+56>>3]=K;h[f+64>>3]=J;h[f+72>>3]=I;h[f+80>>3]=F>x?F:x;c[f+52>>2]=1}h[k>>3]=+h[k>>3]+-1.0;break}x=+h[u>>3];if((L&8|0)==0){M=c[q>>2]|0;B=+h[M+24>>3];D=+h[M+80>>3];M=D>=0.0;if((c[f+48>>2]|0)==4){if(M){Q=D+.5}else{Q=D+-.5}R=+h[k>>3];S=B+ +((~~Q+1|0)/2|0|0)}else{if(M){T=D+.5}else{T=D+-.5}R=B- +((~~T+1|0)/2|0|0);S=+h[k>>3]+1.0}h[f+56>>3]=x;h[f+64>>3]=R;h[f+72>>3]=I;h[f+80>>3]=S;c[f+52>>2]=1;h[u>>3]=+h[u>>3]+1.0;break}else{B=x+1.0;M=c[q>>2]|0;x=+h[M+24>>3];D=+h[M+80>>3];M=D>=0.0;if((c[f+48>>2]|0)==4){if(M){U=D+.5}else{U=D+-.5}V=+h[k>>3]+-1.0;W=x+ +((~~U+1|0)/2|0|0)}else{if(M){X=D+.5}else{X=D+-.5}V=x- +((~~X+1|0)/2|0|0);W=+h[k>>3]+1.0}h[f+56>>3]=K;h[f+64>>3]=V;h[f+72>>3]=B;h[f+80>>3]=W;c[f+52>>2]=1;h[u>>3]=+h[u>>3]+-1.0;break}}else{B=+h[k>>3];h[f+56>>3]=K;h[f+64>>3]=J<B?J:B;h[f+72>>3]=I;h[f+80>>3]=F;c[f+52>>2]=1;h[k>>3]=+h[k>>3]+1.0}}while(0);M=c[p>>2]|0;if((a[M+112|0]|0)==0){Y=d;Z=M}else{N=M;do{_=c[N+116>>2]|0;N=c[_+8>>2]|0;}while((a[N+112|0]|0)!=0);Y=_;Z=N}if((o|0)==(c[((c[Y>>2]&3|0)==3?Y:Y+32|0)+28>>2]|0)){a[Z+46|0]=0}else{a[Z+86|0]=0}c[f+48>>2]=L;i=j;return}}while(0);if(m){v=1;break}v=c[f+48>>2]|0}}while(0);do{if((s|0)==0){$=f+56|0;aa=f+52|0}else{m=f+56|0;Z=f+52|0;Y=Gc[s&127](o,(c[p>>2]|0)+16|0,v,m,Z)|0;if((Y|0)==0){$=m;aa=Z;break}c[f+48>>2]=Y;i=j;return}}while(0);v=$;$=f;c[v>>2]=c[$>>2];c[v+4>>2]=c[$+4>>2];c[v+8>>2]=c[$+8>>2];c[v+12>>2]=c[$+12>>2];c[v+16>>2]=c[$+16>>2];c[v+20>>2]=c[$+20>>2];c[v+24>>2]=c[$+24>>2];c[v+28>>2]=c[$+28>>2];c[aa>>2]=1;if((e|0)==8){cc(115336,154560,571,171032)}else if((e|0)==2){W=+h[k>>3];if((c[f+48>>2]|0)==4){h[f+64>>3]=W;i=j;return}else{h[f+80>>3]=W;i=j;return}}else if((e|0)==1){h[f+80>>3]=+h[k>>3];c[f+48>>2]=1;h[k>>3]=+h[k>>3]+-1.0;i=j;return}else{i=j;return}}function fm(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0,i=0.0,j=0,k=0.0,l=0.0,m=0,n=0,o=0.0,p=0.0;b=c[a+8>>2]|0;a=c[b+172>>2]|0;d=c[a>>2]|0;if((d|0)==0){e=0.0;f=0.0}else{g=0;i=0.0;j=d;do{i=i+ +h[(c[(c[((c[j>>2]&3|0)==3?j:j+32|0)+28>>2]|0)+8>>2]|0)+16>>3];g=g+1|0;j=c[a+(g<<2)>>2]|0;}while((j|0)!=0);e=+(g|0);f=i}g=c[b+180>>2]|0;j=c[g>>2]|0;if((j|0)==0){k=0.0;l=0.0;m=0}else{a=0;i=0.0;n=j;do{i=i+ +h[(c[(c[((c[n>>2]&3|0)==2?n:n-32|0)+28>>2]|0)+8>>2]|0)+16>>3];a=a+1|0;n=c[g+(a<<2)>>2]|0;}while((n|0)!=0);k=+(a|0);l=i;m=j}i=+h[b+16>>3];o=+h[b+24>>3];p=+$(+(o- +h[(c[(c[((c[d>>2]&3|0)==3?d:d+32|0)+28>>2]|0)+8>>2]|0)+24>>3]),+(i-f/e));return+((p+ +$(+(+h[(c[(c[((c[m>>2]&3|0)==2?m:m-32|0)+28>>2]|0)+8>>2]|0)+24>>3]-o),+(l/k-i)))*.5)}function gm(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0,Z=0,_=0,$=0;j=i;i=i+40|0;k=j|0;l=d;m=c[l>>2]&3;n=d-32|0;o=c[((m|0)==2?d:n)+28>>2]|0;p=d+8|0;q=(c[p>>2]|0)+56|0;r=q;if((a[r+31|0]|0)!=0){wl(k,o,c[((m|0)==3?d:d+32|0)+28>>2]|0,r);r=q;q=k;c[r>>2]=c[q>>2];c[r+4>>2]=c[q+4>>2];c[r+8>>2]=c[q+8>>2];c[r+12>>2]=c[q+12>>2];c[r+16>>2]=c[q+16>>2];c[r+20>>2]=c[q+20>>2];c[r+24>>2]=c[q+24>>2];c[r+28>>2]=c[q+28>>2];c[r+32>>2]=c[q+32>>2];c[r+36>>2]=c[q+36>>2]}q=o+8|0;r=c[q>>2]|0;k=c[r+8>>2]|0;if((k|0)==0){s=0}else{s=c[(c[k+4>>2]|0)+16>>2]|0}k=b+40|0;m=c[p>>2]|0;t=+h[r+24>>3]+ +h[m+64>>3];u=k;h[b+40>>3]=+h[r+16>>3]+ +h[m+56>>3];m=b+48|0;h[m>>3]=t;do{if(g<<24>>24==0){r=c[p>>2]|0;if((a[r+85|0]|0)==0){a[b+69|0]=0;break}else{h[b+56>>3]=+h[r+72>>3];a[b+69|0]=1;break}}else{t=+fm(c[((c[l>>2]&3|0)==2?d:n)+28>>2]|0)+3.141592653589793;h[b+56>>3]=t;if(t<6.283185307179586){a[b+69|0]=1;break}else{cc(126168,154560,608,170720)}}}while(0);n=f+32|0;c[n>>2]=c[u>>2];c[n+4>>2]=c[u+4>>2];c[n+8>>2]=c[u+8>>2];c[n+12>>2]=c[u+12>>2];u=(e|0)==1;do{if(u){if((a[(c[q>>2]|0)+156|0]|0)!=0){v=4;break}n=a[(c[p>>2]|0)+89|0]|0;l=n&255;if(n<<24>>24==0){w=50;break}t=+h[f>>3];x=+h[f+8>>3];y=+h[f+16>>3];do{if((l&4|0)==0){if((l&1|0)==0){n=f+48|0;if((l&8|0)==0){c[n>>2]=2;g=k|0;r=c[q>>2]|0;z=+h[r+80>>3];if(z<0.0){A=z+-.5}else{A=z+.5}z=+h[r+24>>3]+ +((~~A+1|0)/2|0|0);B=+h[m>>3];h[f+56>>3]=+h[g>>3];h[f+64>>3]=B;h[f+72>>3]=y;h[f+80>>3]=z;c[f+52>>2]=1;h[g>>3]=+h[g>>3]+1.0;break}else{c[n>>2]=8;n=k|0;z=+h[n>>3];g=c[q>>2]|0;B=+h[g+80>>3];if(B<0.0){C=B+-.5}else{C=B+.5}B=+h[g+24>>3]+ +((~~C+1|0)/2|0|0);D=+h[m>>3];h[f+56>>3]=t;h[f+64>>3]=D;h[f+72>>3]=z;h[f+80>>3]=B;c[f+52>>2]=1;h[n>>3]=+h[n>>3]+-1.0;break}}c[f+48>>2]=1;n=c[q>>2]|0;if(+h[k>>3]<+h[n+16>>3]){B=t+-1.0;z=+h[m>>3];D=+h[n+80>>3];if(D<0.0){E=D+-.5}else{E=D+.5}D=+h[n+24>>3]- +((~~E+1|0)/2|0|0);F=D- +((c[(c[(Hx(o|0)|0)+8>>2]|0)+240>>2]|0)/2|0|0);g=c[q>>2]|0;D=+h[g+16>>3]- +h[g+88>>3];G=+h[g+80>>3];if(G<0.0){H=G+-.5}else{H=G+.5}G=+h[g+24>>3]+ +((~~H+1|0)/2|0|0);h[f+56>>3]=B;h[f+64>>3]=F;h[f+72>>3]=y;h[f+80>>3]=z;h[f+88>>3]=B;h[f+96>>3]=z;h[f+104>>3]=D;h[f+112>>3]=G}else{G=+h[m>>3];D=y+1.0;z=+h[n+80>>3];if(z<0.0){I=z+-.5}else{I=z+.5}z=+h[n+24>>3]- +((~~I+1|0)/2|0|0);B=z- +((c[(c[(Hx(o|0)|0)+8>>2]|0)+240>>2]|0)/2|0|0);n=c[q>>2]|0;z=+h[n+16>>3]+ +h[n+96>>3]+0.0;F=+h[n+80>>3];if(F<0.0){J=F+-.5}else{J=F+.5}F=+h[n+24>>3]+ +((~~J+1|0)/2|0|0);h[f+56>>3]=t;h[f+64>>3]=B;h[f+72>>3]=D;h[f+80>>3]=G;h[f+88>>3]=z;h[f+96>>3]=G;h[f+104>>3]=D;h[f+112>>3]=F}c[f+52>>2]=2;h[m>>3]=+h[m>>3]+-1.0}else{F=+h[f+24>>3];c[f+48>>2]=4;D=+h[m>>3];h[f+56>>3]=t;h[f+64>>3]=x<D?x:D;h[f+72>>3]=y;h[f+80>>3]=F;c[f+52>>2]=1;h[m>>3]=+h[m>>3]+1.0}}while(0);n=c[p>>2]|0;if((a[n+112|0]|0)==0){K=d;L=n}else{g=n;do{M=c[g+116>>2]|0;g=c[M+8>>2]|0;}while((a[g+112|0]|0)!=0);K=M;L=g}if((o|0)==(c[((c[K>>2]&3|0)==2?K:K-32|0)+28>>2]|0)){a[L+86|0]=0}else{a[L+46|0]=0}c[f+48>>2]=l;i=j;return}else{w=50}}while(0);do{if((w|0)==50){do{if((e|0)==2){L=a[(c[p>>2]|0)+89|0]|0;K=L&255;if(L<<24>>24==0){break}J=+h[f>>3];I=+h[f+8>>3];H=+h[f+16>>3];E=+h[f+24>>3];do{if((K&4|0)==0){if((K&1|0)!=0){if((c[f+48>>2]|0)==4){C=J+-1.0;L=c[q>>2]|0;A=+h[L+80>>3];if(A<0.0){N=A+-.5}else{N=A+.5}A=+h[L+24>>3]- +((~~N+1|0)/2|0|0);y=+h[k>>3];x=A- +((c[(c[(Hx(o|0)|0)+8>>2]|0)+240>>2]|0)/2|0|0);L=c[q>>2]|0;t=+h[L+16>>3]- +h[L+88>>3]+-2.0;F=+h[L+80>>3];if(F<0.0){O=F+-.5}else{O=F+.5}F=+h[L+24>>3]+ +((~~O+1|0)/2|0|0);h[f+56>>3]=C;h[f+64>>3]=x;h[f+72>>3]=y;h[f+80>>3]=A;h[f+88>>3]=C;h[f+96>>3]=A;h[f+104>>3]=t;h[f+112>>3]=F;c[f+52>>2]=2}else{F=+h[b+8>>3];h[f+56>>3]=J;h[f+64>>3]=I;h[f+72>>3]=H;h[f+80>>3]=E>F?E:F;c[f+52>>2]=1}h[m>>3]=+h[m>>3]+-1.0;break}L=k|0;F=+h[L>>3];if((K&8|0)==0){t=F+-1.0;M=c[q>>2]|0;A=+h[M+24>>3];C=+h[M+80>>3];M=C>=0.0;if((c[f+48>>2]|0)==4){if(M){P=C+.5}else{P=C+-.5}Q=+h[m>>3]+-1.0;R=A+ +((~~P+1|0)/2|0|0)}else{if(M){S=C+.5}else{S=C+-.5}Q=A- +((~~S+1|0)/2|0|0);R=+h[m>>3]}h[f+56>>3]=t;h[f+64>>3]=Q;h[f+72>>3]=H;h[f+80>>3]=R;c[f+52>>2]=1;h[L>>3]=+h[L>>3]+1.0;break}else{t=F+1.0;M=c[q>>2]|0;F=+h[M+24>>3];A=+h[M+80>>3];M=A>=0.0;if((c[f+48>>2]|0)==4){if(M){T=A+.5}else{T=A+-.5}U=+h[m>>3]+-1.0;V=F+ +((~~T+1|0)/2|0|0)}else{if(M){W=A+.5}else{W=A+-.5}U=F- +((~~W+1|0)/2|0|0);V=+h[m>>3]+1.0}h[f+56>>3]=J;h[f+64>>3]=U;h[f+72>>3]=t;h[f+80>>3]=V;c[f+52>>2]=1;h[L>>3]=+h[L>>3]+-1.0;break}}else{t=+h[m>>3];h[f+56>>3]=J;h[f+64>>3]=I<t?I:t;h[f+72>>3]=H;h[f+80>>3]=E;c[f+52>>2]=1;h[m>>3]=+h[m>>3]+1.0}}while(0);L=c[p>>2]|0;if((a[L+112|0]|0)==0){X=d;Y=L}else{M=L;do{Z=c[M+116>>2]|0;M=c[Z+8>>2]|0;}while((a[M+112|0]|0)!=0);X=Z;Y=M}if((o|0)==(c[((c[X>>2]&3|0)==2?X:X-32|0)+28>>2]|0)){a[Y+86|0]=0}else{a[Y+46|0]=0}c[f+48>>2]=K;i=j;return}}while(0);if(u){v=4;break}v=c[f+48>>2]|0}}while(0);do{if((s|0)==0){_=f+56|0;$=f+52|0}else{u=f+56|0;Y=f+52|0;X=Gc[s&127](o,(c[p>>2]|0)+56|0,v,u,Y)|0;if((X|0)==0){_=u;$=Y;break}c[f+48>>2]=X;i=j;return}}while(0);v=_;_=f;c[v>>2]=c[_>>2];c[v+4>>2]=c[_+4>>2];c[v+8>>2]=c[_+8>>2];c[v+12>>2]=c[_+12>>2];c[v+16>>2]=c[_+16>>2];c[v+20>>2]=c[_+20>>2];c[v+24>>2]=c[_+24>>2];c[v+28>>2]=c[_+28>>2];c[$>>2]=1;if((e|0)==8){cc(115336,154560,767,170720)}else if((e|0)==2){V=+h[m>>3];if((c[f+48>>2]|0)==4){h[f+64>>3]=V;i=j;return}else{h[f+80>>3]=V;i=j;return}}else if((e|0)==1){h[f+64>>3]=+h[m>>3];c[f+48>>2]=4;h[m>>3]=+h[m>>3]+1.0;i=j;return}else{i=j;return}}function hm(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0;d=c[b+8>>2]|0;e=c[d+96>>2]|0;if((a[d+44|0]|0)==0){if((a[d+84|0]|0)!=0){f=3}}else{f=3}do{if((f|0)==3){g=a[d+49|0]|0;i=g&255;if((i&8|0)!=0){j=0;return j|0}k=a[d+89|0]|0;if((k&8)!=0){j=0;return j|0}if(g<<24>>24!=k<<24>>24){break}if((i&5|0)==0){break}else{j=0}return j|0}}while(0);if((e|0)==0){j=18;return j|0}d=(c[(c[(Hx(c[((c[b>>2]&3|0)==2?b:b-32|0)+28>>2]|0)|0)+8>>2]|0)+116>>2]&1|0)==0;j=~~(+h[(d?e+24|0:e+32|0)>>3]+18.0);return j|0}function im(b,d,e,f,g,j,k){b=b|0;d=d|0;e=e|0;f=f|0;g=+g;j=+j;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0,A=0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0.0,aa=0.0,ba=0,ca=0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0,ka=0,la=0.0,ma=0,na=0,oa=0,pa=0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0,va=0,wa=0.0;b=i;i=i+16e3|0;l=b|0;m=c[d+(e<<2)>>2]|0;n=c[m+8>>2]|0;do{if((a[n+44|0]|0)==0){if((a[n+84|0]|0)!=0){o=4;break}p=a[n+49|0]|0;q=a[n+89|0]|0}else{o=4}}while(0);a:do{if((o|0)==4){r=n+16|0;s=a[r+33|0]|0;t=s&255;u=(t&8|0)==0;do{if(u){v=a[n+89|0]|0;if((v&8)==0){if(s<<24>>24!=v<<24>>24){p=s;q=v;break a}if((t&5|0)==0){p=s;q=s;break a}if(!u){break}}v=n+56|0;w=a[v+33|0]|0;if((w&8)!=0){break}if((t&4|0)!=0){jm(d,e,f,g,j,k);i=b;return}if((t&1|0)==0){cc(115336,154560,1233,170392)}x=g*.5/+(f|0);y=x>2.0?x:2.0;z=(c[((c[m>>2]&3|0)==3?m:m+32|0)+28>>2]|0)+8|0;A=c[z>>2]|0;x=+h[A+16>>3];B=+h[A+24>>3];C=x+ +h[r>>3];D=B+ +h[n+24>>3];E=x+ +h[v>>3];x=B+ +h[n+64>>3];v=C<E?-1:1;F=+h[A+80>>3]*.5;A=w&255;w=0;while(1){G=w+1|0;if((c[4e4+(w<<2)>>2]|0)==(A|0)){H=w;break}if((G|0)<8){w=G}else{H=-1;break}}w=0;while(1){A=w+1|0;if((c[4e4+(w<<2)>>2]|0)==(t|0)){o=56;break}if((A|0)<8){w=A}else{I=0;break}}do{if((o|0)==56){if((w|H|0)<0){I=0;break}I=(c[40032+(w<<5)+(H<<2)>>2]|0)==67}}while(0);J=(D+F-B)*3.0;K=(x+F-B)*3.0;if((f|0)<=0){i=b;return}L=y*+((I?-v|0:v)|0);w=l|0;A=l|0;G=l+8|0;M=l+16|0;N=l+24|0;O=l+32|0;P=l+40|0;Q=(C+E)*.5;R=l+48|0;S=l+56|0;T=l+64|0;U=l+72|0;V=l+80|0;W=l+88|0;X=l+96|0;Y=l+104|0;Z=1;_=e;$=F<K?F:K;K=F<J?F:J;J=0.0;aa=F;ba=m;while(1){ca=_+1|0;da=aa+j;ea=K+j;fa=$+j;ga=L+J;h[A>>3]=C;h[G>>3]=D;ha=C+ga;h[M>>3]=ha;h[N>>3]=D-ea/3.0;ia=B-da;h[O>>3]=ha;h[P>>3]=ia;h[R>>3]=Q;h[S>>3]=ia;ha=E-ga;h[T>>3]=ha;h[U>>3]=ia;h[V>>3]=ha;h[W>>3]=x-fa/3.0;h[X>>3]=E;h[Y>>3]=x;ja=ba+8|0;ka=ba;do{if((c[(c[ja>>2]|0)+96>>2]|0)==0){la=da}else{ma=(c[(c[(Hx(c[((c[ka>>2]&3|0)==3?ba:ba+32|0)+28>>2]|0)|0)+8>>2]|0)+116>>2]&1|0)==0;na=c[(c[ja>>2]|0)+96>>2]|0;ha=+h[(ma?na+32|0:na+24|0)>>3];h[na+64>>3]=+h[(c[z>>2]|0)+24>>3]-da-ha*.5;h[(c[(c[ja>>2]|0)+96>>2]|0)+56>>3]=+h[(c[z>>2]|0)+16>>3];a[(c[(c[ja>>2]|0)+96>>2]|0)+81|0]=1;if(ha<=j){la=da;break}la=da+(ha-j)}}while(0);cm(ba,c[((c[ka>>2]&3|0)==2?ba:ba-32|0)+28>>2]|0,w,7,k);if((Z|0)>=(f|0)){break}Z=Z+1|0;_=ca;$=fa;K=ea;J=ga;aa=la;ba=c[d+(ca<<2)>>2]|0}i=b;return}}while(0);do{if((s&2)==0){u=n+56|0;ba=a[u+33|0]|0;if((ba&2)!=0){break}aa=j*.5/+(f|0);J=aa>2.0?aa:2.0;_=(c[((c[m>>2]&3|0)==3?m:m+32|0)+28>>2]|0)+8|0;Z=c[_>>2]|0;aa=+h[Z+16>>3];K=+h[Z+24>>3];$=aa+ +h[r>>3];x=K+ +h[n+24>>3];E=aa+ +h[u>>3];Q=K+ +h[n+64>>3];u=x<Q?-1:1;K=+h[Z+88>>3];Z=ba&255;ba=0;while(1){w=ba+1|0;if((c[4e4+(ba<<2)>>2]|0)==(Z|0)){oa=ba;break}if((w|0)<8){ba=w}else{oa=-1;break}}ba=0;while(1){Z=ba+1|0;if((c[4e4+(ba<<2)>>2]|0)==(t|0)){o=36;break}if((Z|0)<8){ba=Z}else{pa=u;break}}do{if((o|0)==36){if((ba|oa|0)<0){pa=u;break}Z=c[40032+(ba<<5)+(oa<<2)>>2]|0;if(!((Z|0)==12|(Z|0)==67)){pa=u;break}if(x!=Q){pa=u;break}pa=-u|0}}while(0);B=($+K-aa)*3.0;D=(E+K-aa)*3.0;if((f|0)<=0){i=b;return}C=J*+(pa|0);u=l|0;ba=l|0;Z=l+8|0;w=l+16|0;z=l+24|0;Y=l+32|0;X=l+40|0;L=(x+Q)*.5;W=l+48|0;V=l+56|0;U=l+64|0;T=l+72|0;S=l+80|0;R=l+88|0;P=l+96|0;O=l+104|0;F=K<D?K:D;D=K<B?K:B;B=K;y=0.0;N=1;M=e;G=m;while(1){A=M+1|0;da=B+g;ha=D+g;ia=F+g;qa=C+y;h[ba>>3]=$;h[Z>>3]=x;ra=x+qa;h[w>>3]=$-ha/3.0;h[z>>3]=ra;sa=aa-da;h[Y>>3]=sa;h[X>>3]=ra;h[W>>3]=sa;h[V>>3]=L;ra=Q-qa;h[U>>3]=sa;h[T>>3]=ra;h[S>>3]=E-ia/3.0;h[R>>3]=ra;h[P>>3]=E;h[O>>3]=Q;v=G+8|0;ja=G;do{if((c[(c[v>>2]|0)+96>>2]|0)==0){ta=da}else{na=(c[(c[(Hx(c[((c[ja>>2]&3|0)==3?G:G+32|0)+28>>2]|0)|0)+8>>2]|0)+116>>2]&1|0)==0;ma=c[(c[v>>2]|0)+96>>2]|0;ra=+h[(na?ma+24|0:ma+32|0)>>3];h[ma+56>>3]=+h[(c[_>>2]|0)+16>>3]-da-ra*.5;h[(c[(c[v>>2]|0)+96>>2]|0)+64>>3]=+h[(c[_>>2]|0)+24>>3];a[(c[(c[v>>2]|0)+96>>2]|0)+81|0]=1;if(ra<=g){ta=da;break}ta=da+(ra-g)}}while(0);cm(G,c[((c[ja>>2]&3|0)==2?G:G-32|0)+28>>2]|0,u,7,k);if((N|0)>=(f|0)){break}F=ia;D=ha;B=ta;y=qa;N=N+1|0;M=A;G=c[d+(A<<2)>>2]|0}i=b;return}}while(0);jm(d,e,f,g,j,k);i=b;return}}while(0);ta=j*.5/+(f|0);j=ta>2.0?ta:2.0;pa=(c[((c[m>>2]&3|0)==3?m:m+32|0)+28>>2]|0)+8|0;oa=c[pa>>2]|0;ta=+h[oa+16>>3];la=+h[oa+24>>3];y=ta+ +h[n+16>>3];B=la+ +h[n+24>>3];D=ta+ +h[n+56>>3];F=la+ +h[n+64>>3];n=B<F?-1:1;la=+h[oa+96>>3];oa=p&255;p=q&255;q=0;while(1){I=q+1|0;if((c[4e4+(q<<2)>>2]|0)==(p|0)){ua=q;break}if((I|0)<8){q=I}else{ua=-1;break}}q=0;while(1){p=q+1|0;if((c[4e4+(q<<2)>>2]|0)==(oa|0)){o=14;break}if((p|0)<8){q=p}else{va=n;break}}do{if((o|0)==14){if((q|ua|0)<0){va=n;break}oa=c[40032+(q<<5)+(ua<<2)>>2]|0;if(!((oa|0)==32|(oa|0)==65)){va=n;break}if(B!=F){va=n;break}va=-n|0}}while(0);Q=ta+la;E=(Q-y)*3.0;L=(Q-D)*3.0;if((f|0)<=0){i=b;return}Q=j*+(va|0);va=l|0;n=l|0;ua=l+8|0;q=l+16|0;o=l+24|0;oa=l+32|0;p=l+40|0;j=(B+F)*.5;I=l+48|0;H=l+56|0;t=l+64|0;r=l+72|0;s=l+80|0;G=l+88|0;M=l+96|0;N=l+104|0;aa=la<L?la:L;L=la<E?la:E;E=la;la=0.0;l=1;u=e;e=m;while(1){m=u+1|0;$=E+g;x=L+g;C=aa+g;K=Q+la;h[n>>3]=y;h[ua>>3]=B;J=B+K;h[q>>3]=y+x/3.0;h[o>>3]=J;da=ta+$;h[oa>>3]=da;h[p>>3]=J;h[I>>3]=da;h[H>>3]=j;J=F-K;h[t>>3]=da;h[r>>3]=J;h[s>>3]=D+C/3.0;h[G>>3]=J;h[M>>3]=D;h[N>>3]=F;_=e+8|0;O=e;do{if((c[(c[_>>2]|0)+96>>2]|0)==0){wa=$}else{P=(c[(c[(Hx(c[((c[O>>2]&3|0)==3?e:e+32|0)+28>>2]|0)|0)+8>>2]|0)+116>>2]&1|0)==0;R=c[(c[_>>2]|0)+96>>2]|0;J=+h[(P?R+24|0:R+32|0)>>3];h[R+56>>3]=J*.5+($+ +h[(c[pa>>2]|0)+16>>3]);h[(c[(c[_>>2]|0)+96>>2]|0)+64>>3]=+h[(c[pa>>2]|0)+24>>3];a[(c[(c[_>>2]|0)+96>>2]|0)+81|0]=1;if(J<=g){wa=$;break}wa=$+(J-g)}}while(0);cm(e,c[((c[O>>2]&3|0)==2?e:e-32|0)+28>>2]|0,va,7,k);if((l|0)>=(f|0)){break}aa=C;L=x;E=wa;la=K;l=l+1|0;u=m;e=c[d+(m<<2)>>2]|0}i=b;return}function jm(b,e,f,g,j,k){b=b|0;e=e|0;f=f|0;g=+g;j=+j;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0.0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0,W=0,X=0.0,Y=0,Z=0;l=i;i=i+16e3|0;m=l|0;n=c[b+(e<<2)>>2]|0;o=g*.5/+(f|0);g=o>2.0?o:2.0;p=(c[((c[n>>2]&3|0)==3?n:n+32|0)+28>>2]|0)+8|0;q=c[p>>2]|0;o=+h[q+16>>3];r=+h[q+24>>3];s=c[n+8>>2]|0;t=s+16|0;u=o+ +h[t>>3];v=r+ +h[s+24>>3];w=s+56|0;x=o+ +h[w>>3];y=r+ +h[s+64>>3];z=u<x?-1.0:1.0;A=+h[q+80>>3]*.5;s=d[t+33|0]|0;t=d[w+33|0]|0;w=0;while(1){B=w+1|0;if((c[4e4+(w<<2)>>2]|0)==(t|0)){C=w;break}if((B|0)<8){w=B}else{C=-1;break}}w=0;while(1){t=w+1|0;if((c[4e4+(w<<2)>>2]|0)==(s|0)){D=7;break}if((t|0)<8){w=t}else{E=0.0;break}}a:do{if((D|0)==7){if((w|C|0)<0){E=0.0;break}switch(c[40032+(w<<5)+(C<<2)>>2]|0){case 74:case 75:case 85:{E=z*(g*2.0+(+h[q+88>>3]-(o-u)+(+h[q+96>>3]-(x-o)))*.5);break a;break};case 41:{E=z*(g+(+h[q+96>>3]-(u-o)));break a;break};case 83:{E=z*(+h[q+88>>3]-(o-u));break a;break};case 15:{E=z*(g+(+h[q+96>>3]-(x-o)));break a;break};case 48:{E=z*(g+(+h[q+96>>3]-(u-o)));break a;break};case 14:case 37:case 47:case 51:case 57:case 58:{E=z*((+h[q+88>>3]-(o-u)+(+h[q+96>>3]-(x-o)))/3.0);break a;break};case 84:{E=z*(g+(+h[q+88>>3]-(o-u)+(+h[q+96>>3]-(x-o)))*.5);break a;break};case 38:{E=z*(g+(+h[q+88>>3]-(o-x)));break a;break};case 73:{E=z*(g+(+h[q+88>>3]-(o-u)));break a;break};default:{E=0.0;break a}}}}while(0);o=r+A;F=(o-v)*3.0;G=(o-y)*3.0;if((f|0)<=0){i=l;return}o=g*z;q=m|0;C=m|0;w=m+8|0;D=m+16|0;s=m+24|0;t=m+32|0;B=m+40|0;z=(u+x)*.5;H=m+48|0;I=m+56|0;J=m+64|0;K=m+72|0;L=m+80|0;M=m+88|0;N=m+96|0;O=m+104|0;g=A<G?A:G;G=A<F?A:F;F=E;E=A;m=1;P=e;e=n;while(1){n=P+1|0;A=E+j;Q=G+j;R=g+j;S=o+F;h[C>>3]=u;h[w>>3]=v;T=u+S;h[D>>3]=T;h[s>>3]=v+Q/3.0;U=r+A;h[t>>3]=T;h[B>>3]=U;h[H>>3]=z;h[I>>3]=U;T=x-S;h[J>>3]=T;h[K>>3]=U;h[L>>3]=T;h[M>>3]=y+R/3.0;h[N>>3]=x;h[O>>3]=y;V=e+8|0;W=e;do{if((c[(c[V>>2]|0)+96>>2]|0)==0){X=A}else{Y=(c[(c[(Hx(c[((c[W>>2]&3|0)==3?e:e+32|0)+28>>2]|0)|0)+8>>2]|0)+116>>2]&1|0)==0;Z=c[(c[V>>2]|0)+96>>2]|0;T=+h[(Y?Z+32|0:Z+24|0)>>3];h[Z+64>>3]=T*.5+(A+ +h[(c[p>>2]|0)+24>>3]);h[(c[(c[V>>2]|0)+96>>2]|0)+56>>3]=+h[(c[p>>2]|0)+16>>3];a[(c[(c[V>>2]|0)+96>>2]|0)+81|0]=1;if(T<=j){X=A;break}X=A+(T-j)}}while(0);cm(e,c[((c[W>>2]&3|0)==2?e:e-32|0)+28>>2]|0,q,7,k);if((m|0)>=(f|0)){break}g=R;G=Q;F=S;E=X;m=m+1|0;P=n;e=c[b+(n<<2)>>2]|0}i=l;return}function km(b){b=b|0;var d=0,e=0,f=0;if(!((c[53786]|0)!=0|(c[53784]|0)!=0)){return}d=b+8|0;e=c[(c[d>>2]|0)+100>>2]|0;do{if((e|0)!=0){if((a[e+81|0]|0)!=0){break}if((lm(b,1)|0)==0){break}f=Hx(c[((c[b>>2]&3|0)==3?b:b+32|0)+28>>2]|0)|0;_m(f,c[(c[d>>2]|0)+100>>2]|0)}}while(0);e=c[(c[d>>2]|0)+104>>2]|0;if((e|0)==0){return}if((a[e+81|0]|0)!=0){return}if((lm(b,0)|0)==0){return}e=Hx(c[((c[b>>2]&3|0)==3?b:b+32|0)+28>>2]|0)|0;_m(e,c[(c[d>>2]|0)+104>>2]|0);return}function lm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0;e=i;i=i+96|0;f=e|0;g=e+64|0;j=e+80|0;k=b+8|0;if((a[(c[k>>2]|0)+112|0]|0)==6){l=0;i=e;return l|0}m=c[53786]|0;if((m|0)==0){n=4}else{if((a[fw(b|0,m)|0]|0)==0){n=4}}do{if((n|0)==4){m=c[53784]|0;if((m|0)==0){l=0;i=e;return l|0}if((a[fw(b|0,m)|0]|0)==0){l=0}else{break}i=e;return l|0}}while(0);n=d<<24>>24==0;d=c[k>>2]|0;if(n){o=d+104|0}else{o=d+100|0}k=c[o>>2]|0;o=c[d+8>>2]|0;a:do{if((o|0)==0){m=d;while(1){if((a[m+112|0]|0)==0){break}p=c[(c[m+116>>2]|0)+8>>2]|0;q=c[p+8>>2]|0;if((q|0)==0){m=p}else{r=q;break a}}m=b;q=$w(c[((c[m>>2]&3|0)==3?b:b+32|0)+28>>2]|0)|0;p=$w(c[((c[m>>2]&3|0)==2?b:b-32|0)+28>>2]|0)|0;Fv(1,114544,(m=i,i=i+16|0,c[m>>2]=q,c[m+8>>2]=p,m)|0)|0;i=m;l=0;i=e;return l|0}else{r=o}}while(0);do{if(n){o=c[r>>2]|0;if((c[o+8>>2]|0)==0){d=o|0;m=c[d>>2]|0;s=+h[m>>3];t=+h[m+8>>3];p=f;q=m;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];q=f+16|0;p=(c[d>>2]|0)+16|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];p=f+32|0;q=(c[d>>2]|0)+32|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];q=f+48|0;p=(c[d>>2]|0)+48|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];Qm(g,f|0,3,.1,0,0);u=+h[g>>3];v=+h[g+8>>3];w=s;x=t;break}else{p=c[o>>2]|0;u=+h[p>>3];v=+h[p+8>>3];w=+h[o+16>>3];x=+h[o+24>>3];break}}else{o=(c[r+4>>2]|0)-1|0;p=c[r>>2]|0;q=p+(o*48|0)|0;if((c[p+(o*48|0)+12>>2]|0)==0){d=p+(o*48|0)+4|0;m=c[d>>2]|0;y=m-1|0;z=q|0;A=c[z>>2]|0;t=+h[A+(y<<4)>>3];s=+h[A+(y<<4)+8>>3];y=f;B=A+(m-4<<4)|0;c[y>>2]=c[B>>2];c[y+4>>2]=c[B+4>>2];c[y+8>>2]=c[B+8>>2];c[y+12>>2]=c[B+12>>2];B=f+16|0;y=(c[z>>2]|0)+((c[d>>2]|0)-3<<4)|0;c[B>>2]=c[y>>2];c[B+4>>2]=c[y+4>>2];c[B+8>>2]=c[y+8>>2];c[B+12>>2]=c[y+12>>2];y=f+32|0;B=(c[z>>2]|0)+((c[d>>2]|0)-2<<4)|0;c[y>>2]=c[B>>2];c[y+4>>2]=c[B+4>>2];c[y+8>>2]=c[B+8>>2];c[y+12>>2]=c[B+12>>2];B=f+48|0;y=(c[z>>2]|0)+((c[d>>2]|0)-1<<4)|0;c[B>>2]=c[y>>2];c[B+4>>2]=c[y+4>>2];c[B+8>>2]=c[y+8>>2];c[B+12>>2]=c[y+12>>2];Qm(j,f|0,3,.9,0,0);u=+h[j>>3];v=+h[j+8>>3];w=t;x=s;break}else{y=(c[p+(o*48|0)+4>>2]|0)-1|0;B=c[q>>2]|0;u=+h[B+(y<<4)>>3];v=+h[B+(y<<4)+8>>3];w=+h[p+(o*48|0)+32>>3];x=+h[p+(o*48|0)+40>>3];break}}}while(0);s=+$(+(v-x),+(u-w));j=b|0;u=s+ +Fm(j,c[53786]|0,-25.0,-180.0)/180.0*3.141592653589793;s=+Fm(j,c[53784]|0,1.0,0.0)*10.0;h[k+56>>3]=w+s*+V(u);h[k+64>>3]=x+s*+W(u);a[k+81|0]=1;l=1;i=e;return l|0}function mm(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0,E=0.0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0;f=i;i=i+32|0;g=f|0;j=f+16|0;k=b[(c[d+8>>2]|0)+128>>1]&14;d=(c[e+8>>2]|0)+8|0;e=c[d>>2]|0;l=c[e>>2]|0;m=c[l>>2]|0;if((c[l+8>>2]|0)==0){n=m|0;o=m+8|0}else{n=l+16|0;o=l+24|0}p=+h[n>>3];q=+h[o>>3];o=c[e+4>>2]|0;e=o-1|0;n=l+(e*48|0)+16|0;if((c[l+(e*48|0)+12>>2]|0)==0){r=c[l+(e*48|0)>>2]|0;s=(c[l+(e*48|0)+4>>2]|0)-1|0;t=r+(s<<4)|0;u=r+(s<<4)+8|0}else{t=n+16|0;u=n+24|0}v=+h[t>>3];w=+h[u>>3];x=p-v;y=q-w;if(x*x+y*y<1.0e-6){z=p;A=q;B=a|0;h[B>>3]=z;C=a+8|0;h[C>>3]=A;i=f;return}if((k|0)==10|(k|0)==4){h[g>>3]=(p+v)*.5;h[g+8>>3]=(q+w)*.5;Wm(j,c[d>>2]|0,g);z=+h[j>>3];A=+h[j+8>>3];B=a|0;h[B>>3]=z;C=a+8|0;h[C>>3]=A;i=f;return}if((o|0)>0){D=0;E=0.0;F=m}else{cc(107648,154560,1318,170104)}while(1){j=c[l+(D*48|0)+4>>2]|0;if((j|0)>3){g=0;d=3;w=E;while(1){q=+h[F+(g<<4)>>3]- +h[F+(d<<4)>>3];v=+h[F+(g<<4)+8>>3]- +h[F+(d<<4)+8>>3];p=w+ +T(q*q+v*v);k=d+3|0;if((k|0)<(j|0)){g=g+3|0;d=k;w=p}else{G=p;break}}}else{G=E}d=D+1|0;if((d|0)>=(o|0)){break}D=d;E=G;F=c[l+(d*48|0)>>2]|0}F=0;E=G*.5;D=m;a:while(1){m=c[l+(F*48|0)+4>>2]|0;if((m|0)>3){d=0;g=3;H=E;while(1){I=+h[D+(d<<4)>>3];J=+h[D+(d<<4)+8>>3];K=+h[D+(g<<4)>>3];L=+h[D+(g<<4)+8>>3];G=I-K;w=J-L;M=+T(G*G+w*w);if(M>=H){break a}w=H-M;j=g+3|0;if((j|0)<(m|0)){d=d+3|0;g=j;H=w}else{N=w;break}}}else{N=E}g=F+1|0;if((g|0)>=(o|0)){O=19;break}F=g;E=N;D=c[l+(g*48|0)>>2]|0}if((O|0)==19){cc(107648,154560,1318,170104)}N=M-H;z=(H*K+I*N)/M;A=(H*L+J*N)/M;B=a|0;h[B>>3]=z;C=a+8|0;h[C>>3]=A;i=f;return}function nm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;a=i;f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];f=e;e=i;i=i+16|0;c[e>>2]=c[f>>2];c[e+4>>2]=c[f+4>>2];c[e+8>>2]=c[f+8>>2];c[e+12>>2]=c[f+12>>2];km(b);i=a;return}function om(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;e=c[b+8>>2]|0;f=c[e+8>>2]|0;if((f|0)==0){g=e}else{h=f;i=d;return h|0}while(1){if((a[g+112|0]|0)==0){break}f=c[(c[g+116>>2]|0)+8>>2]|0;e=c[f+8>>2]|0;if((e|0)==0){g=f}else{h=e;j=5;break}}if((j|0)==5){i=d;return h|0}j=b;g=$w(c[((c[j>>2]&3|0)==3?b:b+32|0)+28>>2]|0)|0;e=$w(c[((c[j>>2]&3|0)==2?b:b-32|0)+28>>2]|0)|0;Fv(1,114544,(b=i,i=i+16|0,c[b>>2]=g,c[b+8>>2]=e,b)|0)|0;i=b;h=0;i=d;return h|0}function pm(b,c){b=b|0;c=c|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;e=a[b]|0;a:do{if(e<<24>>24==0){f=c;g=0}else{h=b;i=c;j=e;while(1){k=yF(j&255|0)|0;if((k|0)!=(yF(d[i]|0|0)|0)){break}k=h+1|0;l=i+1|0;m=a[k]|0;if(m<<24>>24==0){f=l;g=0;break a}else{h=k;i=l;j=m}}f=i;g=d[h]|0}}while(0);e=yF(g|0)|0;return e-(yF(d[f]|0|0)|0)|0}function qm(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((e|0)==0){f=0;return f|0}else{g=b;h=c;i=e}while(1){e=i-1|0;c=yF(d[g]|0)|0;if((c|0)!=(yF(d[h]|0)|0)){j=7;break}if((e|0)==0){f=0;j=8;break}if((a[g]|0)==0){f=0;j=8;break}if((a[h]|0)==0){f=0;j=8;break}g=g+1|0;h=h+1|0;i=e}if((j|0)==7){i=yF(d[g]|0)|0;f=i-(yF(d[h]|0)|0)|0;return f|0}else if((j|0)==8){return f|0}return 0}function rm(b,d,e,f,g){b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0,S=0.0,U=0.0,X=0,Y=0.0,Z=0.0,_=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0.0,ra=0,sa=0,ta=0.0,ua=0,va=0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0.0,Ha=0.0,Ia=0.0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0.0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0.0,Xa=0.0,Ya=0,Za=0,_a=0.0,$a=0.0,ab=0.0,bb=0.0,cb=0,db=0,eb=0,fb=0,gb=0.0,hb=0.0,ib=0,jb=0;j=i;i=i+80|0;k=j|0;l=j+64|0;m=k;n=jk(12)|0;o=n+4|0;c[o>>2]=0;p=n+8|0;c[p>>2]=2e3;q=jk(128e3)|0;r=q;s=n;c[s>>2]=r;t=c[b+4>>2]|0;u=c[b>>2]|0;v=+h[u>>3];w=+h[u+8>>3];b=c[o>>2]|0;x=c[p>>2]|0;if((b|0)<(x|0)){y=b;z=r}else{c[p>>2]=x<<1;r=mk(q,x<<7)|0;c[s>>2]=r;y=c[o>>2]|0;z=r}h[z+(y<<6)>>3]=v;h[(c[s>>2]|0)+(c[o>>2]<<6)+8>>3]=w;y=c[o>>2]|0;c[o>>2]=y+1;h[(c[s>>2]|0)+(y<<6)+16>>3]=0.0;y=k+48|0;z=u;c[y>>2]=c[z>>2];c[y+4>>2]=c[z+4>>2];c[y+8>>2]=c[z+8>>2];c[y+12>>2]=c[z+12>>2];if((t|0)>3){z=k|0;r=k|0;x=k+8|0;q=l|0;b=l+8|0;A=k+16|0;B=k+32|0;w=0.0;k=0;C=3;while(1){c[m>>2]=c[y>>2];c[m+4>>2]=c[y+4>>2];c[m+8>>2]=c[y+8>>2];c[m+12>>2]=c[y+12>>2];D=u+(k+1<<4)|0;c[A>>2]=c[D>>2];c[A+4>>2]=c[D+4>>2];c[A+8>>2]=c[D+8>>2];c[A+12>>2]=c[D+12>>2];D=u+(k+2<<4)|0;c[B>>2]=c[D>>2];c[B+4>>2]=c[D+4>>2];c[B+8>>2]=c[D+8>>2];c[B+12>>2]=c[D+12>>2];D=u+(k+3<<4)|0;c[y>>2]=c[D>>2];c[y+4>>2]=c[D+4>>2];c[y+8>>2]=c[D+8>>2];c[y+12>>2]=c[D+12>>2];v=+h[x>>3];E=+h[r>>3];F=w;D=1;while(1){Qm(l,z,3,+(D|0)/20.0,0,0);G=+h[q>>3];H=+h[b>>3];I=E-G;J=v-H;K=F+ +T(I*I+J*J);L=c[o>>2]|0;M=c[p>>2]|0;if((L|0)<(M|0)){N=L;O=c[s>>2]|0}else{c[p>>2]=M<<1;L=mk(c[s>>2]|0,M<<7)|0;c[s>>2]=L;N=c[o>>2]|0;O=L}h[O+(N<<6)>>3]=G;h[(c[s>>2]|0)+(c[o>>2]<<6)+8>>3]=H;L=c[o>>2]|0;c[o>>2]=L+1;h[(c[s>>2]|0)+(L<<6)+16>>3]=K;L=D+1|0;if((L|0)<21){v=H;E=G;F=K;D=L}else{break}}D=C+3|0;if((D|0)<(t|0)){w=K;k=C;C=D}else{break}}}C=c[o>>2]|0;if((c[p>>2]|0)>(C|0)){c[s>>2]=mk(c[s>>2]|0,C<<6)|0}C=c[o>>2]|0;o=c[s>>2]|0;p=C-1|0;K=+h[o+(p<<6)+16>>3];k=(C|0)>0;do{if(k){w=+(C|0);t=(g|0)==2;N=(f|0)==0;O=0;while(1){F=+(O-1|0);if((O|0)>0&F<w){P=F}else{P=F-w*+R(F/w)}b=~~P;q=O+1|0;F=+(q|0);if(F<w){Q=F}else{Q=F-w*+R(F/w)}z=~~Q;l=o+(O<<6)|0;F=+h[l>>3];r=o+(O<<6)+8|0;E=+h[r>>3];x=o+(O<<6)+16|0;v=+h[x>>3];y=o+(O<<6)+24|0;u=o+(O<<6)+32|0;B=o+(O<<6)+40|0;A=o+(O<<6)+48|0;m=o+(O<<6)+56|0;G=+h[o+(z<<6)+8>>3]-E;H=+h[o+(z<<6)>>3]-F;do{if(H==0.0&G==0.0){S=0.0}else{J=+$(+G,+H);if(J>=0.0){S=J;break}S=J+6.283185307179586}}while(0);H=+h[o+(b<<6)+8>>3]-E;G=+h[o+(b<<6)>>3]-F;do{if(G==0.0&H==0.0){U=0.0}else{J=+$(+H,+G);if(J>=0.0){U=J;break}U=J+6.283185307179586}}while(0);G=+Mc[d&15](v,K,e);do{if((O|0)==0){H=S+1.5707963267948966;if(!t){X=0;Y=G;Z=H;_=H;aa=E;ba=F;break}X=0;Y=G;Z=H;_=H;aa=E-G*+W(S);ba=F-G*+V(S)}else{if((O|0)==(p|0)){H=U+ -1.5707963267948966;if(!t){X=0;Y=G;Z=H;_=H;aa=E;ba=F;break}X=0;Y=G;Z=H;_=H;aa=E-G*+W(U);ba=F-G*+V(U);break}H=S-U;if(H<0.0){ca=H+6.283185307179586}else{ca=H}H=1.5707963267948966-ca*.5;J=+V(H);if(J==0.0){da=0.0}else{da=G/J}J=S+1.5707963267948966;I=J+H;if(N){if(da<=G*10.0){X=0;Y=da;Z=I;_=I;aa=E;ba=F;break}}I=U+ -1.5707963267948966;if(I>=0.0&I<6.283185307179586){ea=I}else{ea=I- +R(I/6.283185307179586)*6.283185307179586}if(J>=0.0&J<6.283185307179586){X=1;Y=G;Z=ea;_=J;aa=E;ba=F;break}X=1;Y=G;Z=ea;_=J- +R(J/6.283185307179586)*6.283185307179586;aa=E;ba=F}}while(0);h[l>>3]=ba;h[r>>3]=aa;h[x>>3]=v;a[y]=108;h[u>>3]=Z;h[B>>3]=Y;c[A>>2]=X;h[m>>3]=_;if((q|0)<(C|0)){O=q}else{break}}O=jk(12)|0;N=O;if(!k){fa=ba;ga=aa;ha=Z;ia=Y;ja=O;ka=N;break}t=O;b=O+4|0;z=O+8|0;D=(f|0)==1;L=0;while(1){w=+h[o+(L<<6)>>3];F=+h[o+(L<<6)+8>>3];E=+h[o+(L<<6)+32>>3];G=+h[o+(L<<6)+40>>3];M=c[o+(L<<6)+48>>2]|0;J=+h[o+(L<<6)+56>>3];I=w+G*+V(E);H=F+G*+W(E);la=c[t>>2]|0;if((la|0)<(c[b>>2]|0)){ma=la;na=c[z>>2]|0}else{c[b>>2]=2e3;la=mk(c[z>>2]|0,32e3)|0;c[z>>2]=la;ma=c[t>>2]|0;na=la}c[t>>2]=ma+1;h[na+(ma<<4)>>3]=I;h[na+(ma<<4)+8>>3]=H;do{if((M|0)!=0){if(!D){H=w+G*+V(J);I=w+G*+W(J);la=c[t>>2]|0;if((la|0)<(c[b>>2]|0)){oa=la;pa=c[z>>2]|0}else{c[b>>2]=2e3;la=mk(c[z>>2]|0,32e3)|0;c[z>>2]=la;oa=c[t>>2]|0;pa=la}c[t>>2]=oa+1;h[pa+(oa<<4)>>3]=H;h[pa+(oa<<4)+8>>3]=I;break}I=E-J;if(I>.0017453292519943296){qa=I}else{qa=I+6.283185307179586}if(qa>=3.141592653589793){I=w+G*+V(J);H=w+G*+W(J);la=c[t>>2]|0;if((la|0)<(c[b>>2]|0)){ra=la;sa=c[z>>2]|0}else{c[b>>2]=2e3;la=mk(c[z>>2]|0,32e3)|0;c[z>>2]=la;ra=c[t>>2]|0;sa=la}c[t>>2]=ra+1;h[sa+(ra<<4)>>3]=I;h[sa+(ra<<4)+8>>3]=H;break}H=J+qa;I=w+G*+V(H);ta=F+G*+W(H);la=c[t>>2]|0;if((la|0)<(c[b>>2]|0)){ua=la;va=c[z>>2]|0}else{c[b>>2]=2e3;la=mk(c[z>>2]|0,32e3)|0;c[z>>2]=la;ua=c[t>>2]|0;va=la}c[t>>2]=ua+1;h[va+(ua<<4)>>3]=I;h[va+(ua<<4)+8>>3]=ta;if(G==0.0){break}if(J>H){ta=J;while(1){I=ta+ -6.283185307179586;if(I>H){ta=I}else{wa=I;break}}}else{wa=J}ta=H-wa;if(ta>6.283185307179586){I=ta;while(1){xa=I+ -6.283185307179586;if(xa>6.283185307179586){I=xa}else{ya=xa;break}}}else{ya=ta}I=ya/19.0;la=1;do{xa=H-I*+(la|0);za=w+G*+V(xa);Aa=F+G*+W(xa);Ba=c[t>>2]|0;if((Ba|0)<(c[b>>2]|0)){Ca=Ba;Da=c[z>>2]|0}else{c[b>>2]=2e3;Ba=mk(c[z>>2]|0,32e3)|0;c[z>>2]=Ba;Ca=c[t>>2]|0;Da=Ba}c[t>>2]=Ca+1;h[Da+(Ca<<4)>>3]=za;h[Da+(Ca<<4)+8>>3]=Aa;la=la+1|0;}while((la|0)<20)}}while(0);M=L+1|0;if((M|0)<(C|0)){L=M}else{fa=w;ga=F;ha=E;ia=G;ja=O;ka=N;break}}}else{N=jk(12)|0;fa=0.0;ga=0.0;ha=0.0;ia=0.0;ja=N;ka=N}}while(0);Ca=(g|0)==1;ya=ha+3.141592653589793;do{if(Ca){wa=fa+ia*+V(ha);qa=ga+ia*+W(ha);g=ja;Da=c[g>>2]|0;ua=ja+4|0;if((Da|0)<(c[ua>>2]|0)){Ea=Da;Fa=c[ja+8>>2]|0}else{c[ua>>2]=2e3;Da=ja+8|0;va=mk(c[Da>>2]|0,32e3)|0;c[Da>>2]=va;Ea=c[g>>2]|0;Fa=va}c[g>>2]=Ea+1;h[Fa+(Ea<<4)>>3]=wa;h[Fa+(Ea<<4)+8>>3]=qa;if(ia==0.0){Ga=ha;break}if(ya>ha){qa=ya;while(1){wa=qa+ -6.283185307179586;if(wa>ha){qa=wa}else{Ha=wa;break}}}else{Ha=ya}qa=ha-Ha;if(qa>6.283185307179586){wa=qa;while(1){Y=wa+ -6.283185307179586;if(Y>6.283185307179586){wa=Y}else{Ia=Y;break}}}else{Ia=qa}wa=Ia/19.0;va=ja+8|0;Da=1;while(1){Y=ha-wa*+(Da|0);Z=fa+ia*+V(Y);aa=ga+ia*+W(Y);ra=c[g>>2]|0;if((ra|0)<(c[ua>>2]|0)){Ja=ra;Ka=c[va>>2]|0}else{c[ua>>2]=2e3;ra=mk(c[va>>2]|0,32e3)|0;c[va>>2]=ra;Ja=c[g>>2]|0;Ka=ra}c[g>>2]=Ja+1;h[Ka+(Ja<<4)>>3]=Z;h[Ka+(Ja<<4)+8>>3]=aa;ra=Da+1|0;if((ra|0)<20){Da=ra}else{Ga=ha;break}}}else{wa=fa+ia*+V(ya);qa=ga+ia*+W(ya);Da=ja;g=c[Da>>2]|0;va=ja+4|0;if((g|0)<(c[va>>2]|0)){La=g;Ma=c[ja+8>>2]|0}else{c[va>>2]=2e3;va=ja+8|0;g=mk(c[va>>2]|0,32e3)|0;c[va>>2]=g;La=c[Da>>2]|0;Ma=g}c[Da>>2]=La+1;h[Ma+(La<<4)>>3]=wa;h[Ma+(La<<4)+8>>3]=qa;Ga=ya}}while(0);La=C-2|0;if((La|0)>-1){C=ja;Ma=ja+4|0;Ja=ja+8|0;Ka=(f|0)==1;f=La;while(1){ya=+h[o+(f<<6)>>3];ha=+h[o+(f<<6)+8>>3];Ia=+h[o+(f<<6)+40>>3];La=c[o+(f<<6)+48>>2]|0;Ha=+h[o+(f<<6)+32>>3]+3.141592653589793;qa=+h[o+(f<<6)+56>>3]+3.141592653589793;wa=ya+Ia*+V(qa);aa=ha+Ia*+W(qa);Ea=c[C>>2]|0;if((Ea|0)<(c[Ma>>2]|0)){Na=Ea;Oa=c[Ja>>2]|0}else{c[Ma>>2]=2e3;Ea=mk(c[Ja>>2]|0,32e3)|0;c[Ja>>2]=Ea;Na=c[C>>2]|0;Oa=Ea}c[C>>2]=Na+1;h[Oa+(Na<<4)>>3]=wa;h[Oa+(Na<<4)+8>>3]=aa;do{if((La|0)!=0){if(!Ka){aa=ya+Ia*+V(Ha);wa=ya+Ia*+W(Ha);Ea=c[C>>2]|0;if((Ea|0)<(c[Ma>>2]|0)){Pa=Ea;Qa=c[Ja>>2]|0}else{c[Ma>>2]=2e3;Ea=mk(c[Ja>>2]|0,32e3)|0;c[Ja>>2]=Ea;Pa=c[C>>2]|0;Qa=Ea}c[C>>2]=Pa+1;h[Qa+(Pa<<4)>>3]=aa;h[Qa+(Pa<<4)+8>>3]=wa;break}wa=qa-Ha;if(wa>.0017453292519943296){Ra=wa}else{Ra=wa+6.283185307179586}if(Ra>=3.141592653589793){wa=ya+Ia*+V(Ha);aa=ya+Ia*+W(Ha);Ea=c[C>>2]|0;if((Ea|0)<(c[Ma>>2]|0)){Sa=Ea;Ta=c[Ja>>2]|0}else{c[Ma>>2]=2e3;Ea=mk(c[Ja>>2]|0,32e3)|0;c[Ja>>2]=Ea;Sa=c[C>>2]|0;Ta=Ea}c[C>>2]=Sa+1;h[Ta+(Sa<<4)>>3]=wa;h[Ta+(Sa<<4)+8>>3]=aa;break}aa=Ha+Ra;wa=ya+Ia*+V(aa);Z=ha+Ia*+W(aa);Ea=c[C>>2]|0;if((Ea|0)<(c[Ma>>2]|0)){Ua=Ea;Va=c[Ja>>2]|0}else{c[Ma>>2]=2e3;Ea=mk(c[Ja>>2]|0,32e3)|0;c[Ja>>2]=Ea;Ua=c[C>>2]|0;Va=Ea}c[C>>2]=Ua+1;h[Va+(Ua<<4)>>3]=wa;h[Va+(Ua<<4)+8>>3]=Z;if(Ia==0.0){break}if(Ha>aa){Z=Ha;while(1){wa=Z+ -6.283185307179586;if(wa>aa){Z=wa}else{Wa=wa;break}}}else{Wa=Ha}Z=aa-Wa;if(Z>6.283185307179586){G=Z;while(1){E=G+ -6.283185307179586;if(E>6.283185307179586){G=E}else{Xa=E;break}}}else{Xa=Z}G=Xa/19.0;Ea=1;do{E=aa-G*+(Ea|0);F=ya+Ia*+V(E);w=ha+Ia*+W(E);Fa=c[C>>2]|0;if((Fa|0)<(c[Ma>>2]|0)){Ya=Fa;Za=c[Ja>>2]|0}else{c[Ma>>2]=2e3;Fa=mk(c[Ja>>2]|0,32e3)|0;c[Ja>>2]=Fa;Ya=c[C>>2]|0;Za=Fa}c[C>>2]=Ya+1;h[Za+(Ya<<4)>>3]=F;h[Za+(Ya<<4)+8>>3]=w;Ea=Ea+1|0;}while((Ea|0)<20)}}while(0);if((f|0)>0){f=f-1|0}else{_a=ya;$a=ha;ab=Ha;bb=Ia;break}}}else{_a=fa;$a=ga;ab=Ga;bb=ia}if(!Ca){cb=c[s>>2]|0;db=cb;eF(db);eF(n);i=j;return ka|0}ia=ab+3.141592653589793;Ga=_a+bb*+V(ab);ga=$a+bb*+W(ab);Ca=ja;f=c[Ca>>2]|0;Ya=ja+4|0;if((f|0)<(c[Ya>>2]|0)){eb=f;fb=c[ja+8>>2]|0}else{c[Ya>>2]=2e3;f=ja+8|0;Za=mk(c[f>>2]|0,32e3)|0;c[f>>2]=Za;eb=c[Ca>>2]|0;fb=Za}c[Ca>>2]=eb+1;h[fb+(eb<<4)>>3]=Ga;h[fb+(eb<<4)+8>>3]=ga;if(bb==0.0){cb=c[s>>2]|0;db=cb;eF(db);eF(n);i=j;return ka|0}if(ia>ab){ga=ia;while(1){Ga=ga+ -6.283185307179586;if(Ga>ab){ga=Ga}else{gb=Ga;break}}}else{gb=ia}ia=ab-gb;if(ia>6.283185307179586){gb=ia;while(1){ga=gb+ -6.283185307179586;if(ga>6.283185307179586){gb=ga}else{hb=ga;break}}}else{hb=ia}ia=hb/19.0;eb=ja+8|0;ja=1;do{hb=ab-ia*+(ja|0);gb=_a+bb*+V(hb);ga=$a+bb*+W(hb);fb=c[Ca>>2]|0;if((fb|0)<(c[Ya>>2]|0)){ib=fb;jb=c[eb>>2]|0}else{c[Ya>>2]=2e3;fb=mk(c[eb>>2]|0,32e3)|0;c[eb>>2]=fb;ib=c[Ca>>2]|0;jb=fb}c[Ca>>2]=ib+1;h[jb+(ib<<4)>>3]=gb;h[jb+(ib<<4)+8>>3]=ga;ja=ja+1|0;}while((ja|0)<20);cb=c[s>>2]|0;db=cb;eF(db);eF(n);i=j;return ka|0}function sm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0;f=i;i=i+8|0;g=f|0;c[g>>2]=0;j=e+4|0;k=c[j>>2]|0;if((k|0)==0){cc(115016,154384,202,169928)}l=k|0;m=c[l>>2]|0;if((m|0)==0){cc(126064,154384,205,169928)}n=k+8|0;if((c[n>>2]|0)==0){k=c[43664]|0;do{if((k|0)==0){p=9}else{if((pm(k,m)|0)!=0){p=9;break}q=c[43662]|0}}while(0);if((p|0)==9){c[43664]=m;m=vb(174656,13152,35,36,48)|0;c[43662]=m;q=m}c[n>>2]=q}if((a[213992]|0)==0){r=0}else{q=(Sh(c[l>>2]|0)|0)==0;r=q?0:g}do{if((AB(d,e,r)|0)<<24>>24==0){q=c[j>>2]|0;n=c[q>>2]|0;s=+h[q+16>>3];q=e+32|0;h[q>>3]=0.0;h[e+40>>3]=s*1.2;h[e+16>>3]=0.0;h[e+24>>3]=s*.1;c[e+8>>2]=0;c[e+12>>2]=0;do{if((qm(n,102048,4)|0)==0){t=37952;u=96296}else{if((qm(n,91056,5)|0)==0){t=72360;u=81152;break}if((qm(n,85760,9)|0)==0){t=72360;u=81152;break}t=1216;u=167368}}while(0);if((r|0)!=0){c[r>>2]=u}n=c[e>>2]|0;if((n|0)==0){break}m=a[n]|0;if(m<<24>>24==0){v=0.0}else{p=n;n=m;w=0.0;while(1){m=p+1|0;x=w+ +h[t+((n&255)<<3)>>3];h[q>>3]=x;k=a[m]|0;if(k<<24>>24==0){v=x;break}else{p=m;n=k;w=x}}}h[q>>3]=s*v}}while(0);if((r|0)==0){y=e+32|0;z=b;A=y;c[z>>2]=c[A>>2];c[z+4>>2]=c[A+4>>2];c[z+8>>2]=c[A+8>>2];c[z+12>>2]=c[A+12>>2];i=f;return}r=c[g>>2]|0;g=c[o>>2]|0;t=c[l>>2]|0;if((r|0)==0){gc(g|0,107584,(B=i,i=i+8|0,c[B>>2]=t,B)|0)|0;i=B;y=e+32|0;z=b;A=y;c[z>>2]=c[A>>2];c[z+4>>2]=c[A+4>>2];c[z+8>>2]=c[A+8>>2];c[z+12>>2]=c[A+12>>2];i=f;return}else{gc(g|0,114456,(B=i,i=i+16|0,c[B>>2]=t,c[B+8>>2]=r,B)|0)|0;i=B;y=e+32|0;z=b;A=y;c[z>>2]=c[A>>2];c[z+4>>2]=c[A+4>>2];c[z+8>>2]=c[A+8>>2];c[z+12>>2]=c[A+12>>2];i=f;return}}function tm(a){a=a|0;var b=0,d=0;b=a+108|0;c[b>>2]=0;c[a+112>>2]=32;c[a+116>>2]=-1;c[a+120>>2]=44;c[a+124>>2]=6;c[a+128>>2]=72;c[a+132>>2]=0;c[a+136>>2]=0;c[a+140>>2]=0;d=$g(b,c[43330]|0)|0;c[a+144>>2]=d;return d|0}function um(a,b,d){a=a|0;b=b|0;d=d|0;d=fF(1,32)|0;a=c[b>>2]|0;if((a|0)!=0){c[d>>2]=Lb(a|0)|0}a=c[b+4>>2]|0;if((a|0)!=0){c[d+4>>2]=Lb(a|0)|0}a=d+24|0;c[a>>2]=c[a>>2]&-128|c[b+24>>2]&127;h[d+16>>3]=+h[b+16>>3];c[d+8>>2]=c[b+8>>2];return d|0}function vm(a,b,d){a=a|0;b=b|0;d=d|0;d=c[b>>2]|0;if((d|0)!=0){eF(d)}d=c[b+4>>2]|0;if((d|0)==0){eF(b);return}eF(d);eF(b);return}function wm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0.0;e=c[b>>2]|0;a=c[d>>2]|0;f=(a|0)==0;do{if((e|0)==0){if(f){g=5}else{i=-1}}else{if(f){i=1;break}j=Ya(e|0,a|0)|0;if((j|0)==0){g=5}else{i=j}}}while(0);do{if((g|0)==5){a=c[b+4>>2]|0;e=c[d+4>>2]|0;f=(e|0)==0;if((a|0)==0){if(!f){i=-1;break}}else{if(f){i=1;break}f=Ya(a|0,e|0)|0;if((f|0)!=0){i=f;break}}f=c[b+24>>2]<<25>>25;e=c[d+24>>2]<<25>>25;if((f|0)!=(e|0)){i=f-e|0;break}k=+h[b+16>>3];l=+h[d+16>>3];if(k<l){i=-1;break}i=k>l|0}}while(0);return i|0}function xm(a,b){a=a|0;b=b|0;return pm(c[a>>2]|0,c[b>>2]|0)|0}function ym(){ub(214072)|0;return}function zm(){var a=0,b=0;a=i;i=i+16|0;b=a|0;ub(b|0)|0;i=a;return+(+((c[b+4>>2]|0)+(c[b>>2]|0)-(c[53518]|0)-(c[53519]|0)|0)/60.0)}function Am(a){a=a|0;var b=0,d=0;b=jk(16)|0;d=(a|0)<2?2:a;a=jk(d<<2)|0;c[b>>2]=a;c[b+12>>2]=a;c[b+8>>2]=a;c[b+4>>2]=a+(d<<2);return b|0}function Bm(a){a=a|0;eF(c[a>>2]|0);eF(a);return}function Cm(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+12|0;e=c[d>>2]|0;c[d>>2]=e+4;c[e>>2]=b;if((c[d>>2]|0)>>>0<(c[a+4>>2]|0)>>>0){return}c[d>>2]=c[a>>2];return}function Dm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=a+8|0;d=c[b>>2]|0;if((d|0)==(c[a+12>>2]|0)){e=0;return e|0}f=d+4|0;c[b>>2]=f;g=c[d>>2]|0;if(f>>>0<(c[a+4>>2]|0)>>>0){e=g;return e|0}c[b>>2]=c[a>>2];e=g;return e|0}function Em(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0;g=i;i=i+8|0;h=g|0;do{if((d|0)==0){j=e}else{k=fw(b,d)|0;if((k|0)==0){j=e;break}if((a[k]|0)==0){j=e;break}l=Ja(k|0,h|0,10)|0;if((k|0)==(c[h>>2]|0)){j=e;break}j=(l|0)<(f|0)?f:l}}while(0);i=g;return j|0}function Fm(b,d,e,f){b=b|0;d=d|0;e=+e;f=+f;var g=0,h=0,j=0.0,k=0,l=0.0;g=i;i=i+8|0;h=g|0;do{if((d|0)==0|(b|0)==0){j=e}else{k=fw(b,d)|0;if((k|0)==0){j=e;break}if((a[k]|0)==0){j=e;break}l=+sF(k,h);if((k|0)==(c[h>>2]|0)){j=e;break}j=l<f?f:l}}while(0);i=g;return+j}function Gm(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,j=0,k=0.0,l=0;d=i;i=i+8|0;e=d|0;f=+h[21580];if(f>0.0){g=f;i=d;return+g}j=Wv(b,0,114184,0)|0;do{if((j|0)==0|(b|0)==0){k=-1.0}else{l=fw(b|0,j)|0;if((l|0)==0){k=-1.0;break}if((a[l]|0)==0){k=-1.0;break}f=+sF(l,e);if((l|0)==(c[e>>2]|0)){k=-1.0;break}k=f<0.0?0.0:f}}while(0);g=k==0.0?72.0:k;i=d;return+g}function Hm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((b|0)==0|(a|0)==0){d=c;return d|0}d=fw(a,b)|0;return d|0}function Im(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;if((c|0)==0|(b|0)==0){e=d}else{e=fw(b,c)|0}do{if((e|0)!=0){if((a[e]|0)==0){break}else{f=e}return f|0}}while(0);f=d;return f|0}function Jm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((b|0)==0){d=c&255;return d|0}else{d=Vm(fw(a,b)|0,0)|0;return d|0}return 0}function Km(a){a=a|0;return Vm(a,0)|0}function Lm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;b=a+8|0;d=c[b>>2]|0;e=d+220|0;f=c[e>>2]|0;if((f|0)!=0&(f|0)!=(a|0)){g=b;h=e;i=f;j=d}else{k=a;return k|0}do{a=c[(c[i+8>>2]|0)+220>>2]|0;if((a|0)==0){l=j}else{c[h>>2]=a;l=c[g>>2]|0}m=c[l+220>>2]|0;g=m+8|0;j=c[g>>2]|0;h=j+220|0;i=c[h>>2]|0;}while((i|0)!=0&(i|0)!=(m|0));k=m;return k|0}function Mm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;if((a|0)==(b|0)){d=a;return d|0}e=a+8|0;f=c[e>>2]|0;g=f+220|0;h=c[g>>2]|0;do{if((h|0)==0){c[g>>2]=a;c[(c[e>>2]|0)+216>>2]=1;i=a}else{if((h|0)==(a|0)){i=a;break}else{j=e;k=g;l=h;m=f}do{n=c[(c[l+8>>2]|0)+220>>2]|0;if((n|0)==0){o=m}else{c[k>>2]=n;o=c[j>>2]|0}p=c[o+220>>2]|0;j=p+8|0;m=c[j>>2]|0;k=m+220|0;l=c[k>>2]|0;}while((l|0)!=0&(l|0)!=(p|0));i=p}}while(0);p=b+8|0;l=c[p>>2]|0;k=l+220|0;m=c[k>>2]|0;do{if((m|0)==0){c[k>>2]=b;c[(c[p>>2]|0)+216>>2]=1;q=b}else{if((m|0)==(b|0)){q=b;break}else{r=p;s=k;t=m;u=l}do{j=c[(c[t+8>>2]|0)+220>>2]|0;if((j|0)==0){v=u}else{c[s>>2]=j;v=c[r>>2]|0}w=c[v+220>>2]|0;r=w+8|0;u=c[r>>2]|0;s=u+220|0;t=c[s>>2]|0;}while((t|0)!=0&(t|0)!=(w|0));q=w}}while(0);w=i+8|0;t=c[w>>2]|0;s=q+8|0;u=c[s>>2]|0;if((c[t+120>>2]|0)>(c[u+120>>2]|0)){c[t+220>>2]=q;t=(c[s>>2]|0)+216|0;c[t>>2]=(c[t>>2]|0)+(c[(c[w>>2]|0)+216>>2]|0);d=q;return d|0}else{c[u+220>>2]=i;u=(c[w>>2]|0)+216|0;c[u>>2]=(c[u>>2]|0)+(c[(c[s>>2]|0)+216>>2]|0);d=i;return d|0}return 0}function Nm(b){b=b|0;var d=0;d=b+8|0;c[(c[d>>2]|0)+216>>2]=1;c[(c[d>>2]|0)+220>>2]=0;a[(c[d>>2]|0)+159|0]=0;return}function Om(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;d=a+8|0;e=c[d>>2]|0;f=e+220|0;g=c[f>>2]|0;do{if((g|0)!=0&(g|0)!=(a|0)){h=d;i=f;j=g;k=e;do{l=c[(c[j+8>>2]|0)+220>>2]|0;if((l|0)==0){m=k}else{c[i>>2]=l;m=c[h>>2]|0}n=c[m+220>>2]|0;h=n+8|0;k=c[h>>2]|0;i=k+220|0;j=c[i>>2]|0;}while((j|0)!=0&(j|0)!=(n|0));if((n|0)==(a|0)){o=c[d>>2]|0;break}else{cc(114360,125704,195,171112)}}else{o=e}}while(0);c[o+220>>2]=b;o=(c[b+8>>2]|0)+216|0;c[o>>2]=(c[o>>2]|0)+(c[(c[d>>2]|0)+216>>2]|0);return}function Pm(a,b){a=a|0;b=b|0;var d=0,e=0.0;d=c[(c[b+8>>2]|0)+132>>2]|0;e=+h[d+8>>3]*72.0;h[a>>3]=+h[d>>3]*72.0;h[a+8>>3]=e;return}function Qm(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0,x=0,y=0,z=0;j=i;i=i+576|0;k=j|0;l=(d|0)<0;do{if(!l){m=0;while(1){n=k+(m<<4)|0;o=b+(m<<4)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];if((m|0)<(d|0)){m=m+1|0}else{break}}if((d|0)<1){break}p=1.0-e;m=1;while(1){o=d-m|0;if((o|0)>=0){n=m-1|0;q=0;r=+h[k+(n*96|0)>>3];s=+h[k+(n*96|0)+8>>3];while(1){t=q+1|0;u=+h[k+(n*96|0)+(t<<4)>>3];h[k+(m*96|0)+(q<<4)>>3]=p*r+u*e;v=+h[k+(n*96|0)+(t<<4)+8>>3];h[k+(m*96|0)+(q<<4)+8>>3]=p*s+v*e;if((q|0)<(o|0)){q=t;r=u;s=v}else{break}}}if((m|0)<(d|0)){m=m+1|0}else{break}}}}while(0);if(!((f|0)==0|l)){b=0;while(1){m=f+(b<<4)|0;q=k+(b*96|0)|0;c[m>>2]=c[q>>2];c[m+4>>2]=c[q+4>>2];c[m+8>>2]=c[q+8>>2];c[m+12>>2]=c[q+12>>2];if((b|0)<(d|0)){b=b+1|0}else{break}}}if((g|0)==0|l){w=k+(d*96|0)|0;x=a;y=w;c[x>>2]=c[y>>2];c[x+4>>2]=c[y+4>>2];c[x+8>>2]=c[y+8>>2];c[x+12>>2]=c[y+12>>2];i=j;return}else{z=0}while(1){l=g+(z<<4)|0;b=k+((d-z|0)*96|0)+(z<<4)|0;c[l>>2]=c[b>>2];c[l+4>>2]=c[b+4>>2];c[l+8>>2]=c[b+8>>2];c[l+12>>2]=c[b+12>>2];if((z|0)<(d|0)){z=z+1|0}else{break}}w=k+(d*96|0)|0;x=a;y=w;c[x>>2]=c[y>>2];c[x+4>>2]=c[y+4>>2];c[x+8>>2]=c[y+8>>2];c[x+12>>2]=c[y+12>>2];i=j;return}function Rm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=0;while(1){e=c[53742]|0;if((e-d|0)<1024){f=e+1024|0;c[53742]=f;g=mk(c[53740]|0,f)|0;c[53740]=g;h=c[53742]|0;i=g}else{h=e;i=c[53740]|0}e=db(i+d|0,h-d|0,b|0)|0;if((e|0)==0){break}g=(xF(e|0)|0)+d|0;e=c[53740]|0;if((a[e+(g-1)|0]|0)==10){j=g;k=e;l=8;break}else{d=g}}if((l|0)==8){m=(j|0)>0;n=m?k:0;return n|0}j=d;k=c[53740]|0;m=(j|0)>0;n=m?k:0;return n|0}function Sm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;d=i;if((b|0)==0){e=0;i=d;return e|0}if((a[b]|0)==0){e=0;i=d;return e|0}f=c[53686]|0;if((f|0)==0){g=c[53702]|0;h=c[43778]|0;do{if((c[43774]|0)==(g|0)){j=h}else{if((h|0)==0){k=g}else{eF(c[h>>2]|0);eF(c[43778]|0);c[43778]=0;k=c[53702]|0}c[43774]=k;if((k|0)==0){e=b;i=d;return e|0}if((a[k]|0)==0){e=b;i=d;return e|0}else{l=Tm(k)|0;c[43778]=l;j=l;break}}}while(0);if(!((a[b]|0)!=47&(j|0)!=0)){e=b;i=d;return e|0}k=c[43776]|0;h=c[44762]|0;g=gF(h,k+2+(xF(b|0)|0)|0)|0;c[44762]=g;k=c[j>>2]|0;if((k|0)==0){e=0;i=d;return e|0}nb(g|0,117488,(m=i,i=i+24|0,c[m>>2]=k,c[m+8>>2]=96224,c[m+16>>2]=b,m)|0)|0;i=m;a:do{if((kb(c[44762]|0,4)|0)!=0){k=j;while(1){k=k+4|0;g=c[k>>2]|0;if((g|0)==0){e=0;break}nb(c[44762]|0,117488,(m=i,i=i+24|0,c[m>>2]=g,c[m+8>>2]=96224,c[m+16>>2]=b,m)|0)|0;i=m;if((kb(c[44762]|0,4)|0)==0){break a}}i=d;return e|0}}while(0);e=c[44762]|0;i=d;return e|0}else{j=c[53704]|0;do{if((j|0)!=0){if((a[j]|0)==0){break}if((c[43774]|0)==0){c[43778]=Tm(j)|0;k=c[53704]|0;c[43774]=k;n=k}else{n=j}k=ob(b|0,47)|0;g=(k|0)==0?b:k+1|0;k=ob(g|0,92)|0;h=(k|0)==0?g:k+1|0;k=ob(h|0,58)|0;g=(k|0)==0?h:k+1|0;if(!(a[11872]|(g|0)==(b|0))){Fv(0,101800,(m=i,i=i+16|0,c[m>>2]=b,c[m+8>>2]=n,m)|0)|0;i=m;a[11872]=1}k=c[43778]|0;h=c[43776]|0;l=c[44762]|0;o=gF(l,h+2+(xF(g|0)|0)|0)|0;c[44762]=o;h=c[k>>2]|0;if((h|0)==0){e=0;i=d;return e|0}nb(o|0,117488,(m=i,i=i+24|0,c[m>>2]=h,c[m+8>>2]=96224,c[m+16>>2]=g,m)|0)|0;i=m;b:do{if((kb(c[44762]|0,4)|0)!=0){h=k;while(1){h=h+4|0;o=c[h>>2]|0;if((o|0)==0){e=0;break}nb(c[44762]|0,117488,(m=i,i=i+24|0,c[m>>2]=o,c[m+8>>2]=96224,c[m+16>>2]=g,m)|0)|0;i=m;if((kb(c[44762]|0,4)|0)==0){break b}}i=d;return e|0}}while(0);e=c[44762]|0;i=d;return e|0}}while(0);if(a[11872]|0){e=0;i=d;return e|0}Fv(0,107392,(m=i,i=i+8|0,c[m>>2]=f,m)|0)|0;i=m;a[11872]=1;e=0;i=d;return e|0}return 0}function Tm(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=0;d=La(Lb(a|0)|0,117440)|0;a=0;e=0;while(1){if((a|0)==0){f=kk((b<<2)+8|0)|0}else{f=mk(a,(b<<2)+8|0)|0}g=f;h=b+1|0;c[g+(b<<2)>>2]=d;i=xF(d|0)|0;j=e>>>0>i>>>0?e:i;i=La(0,117440)|0;if((i|0)==0){break}else{b=h;d=i;a=g;e=j}}c[g+(h<<2)>>2]=0;c[43776]=j;return g|0}function Um(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=c[d>>2]|0;a:do{if((f|0)==0){g=0}else{if((b|0)==0){h=0;while(1){i=h+1|0;if((c[d+(i<<2)>>2]|0)==0){g=i;break a}else{h=i}}}else{j=0;k=f}while(1){if((a[b]|0)==(a[k]|0)){if((Ya(b|0,k|0)|0)==0){g=j;break a}}h=j+1|0;i=c[d+(h<<2)>>2]|0;if((i|0)==0){g=h;break}else{j=h;k=i}}}}while(0);return c[e+(g<<2)>>2]|0}function Vm(b,c){b=b|0;c=c|0;var d=0,e=0;do{if((b|0)==0){d=c}else{e=a[b]|0;if(e<<24>>24==0){d=c;break}if((pm(b,90984)|0)==0){d=0;break}if((pm(b,85704)|0)==0){d=0;break}if((pm(b,81088)|0)==0){d=1;break}if((pm(b,167288)|0)==0){d=1;break}if(((e<<24>>24)-48|0)>>>0>=10>>>0){d=c;break}d=(Rb(b|0)|0)&255}}while(0);return d|0}function Wm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0.0,C=0,D=0,E=0,F=0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0;e=i;i=i+640|0;f=d;d=i;i=i+16|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];f=e|0;g=e+576|0;j=c[b+4>>2]|0;k=c[b>>2]|0;l=+h[d>>3];m=+h[d+8>>3];if((j|0)>0){n=1.0e+38;d=-1;b=-1;o=0;while(1){p=c[k+(o*48|0)>>2]|0;q=c[k+(o*48|0)+4>>2]|0;if((q|0)>0){r=n;s=d;t=b;u=0;while(1){v=+h[p+(u<<4)>>3]-l;w=+h[p+(u<<4)+8>>3]-m;x=v*v+w*w;y=(s|0)==-1|x<r;w=y?x:r;z=y?u:s;A=y?o:t;y=u+1|0;if((y|0)<(q|0)){r=w;s=z;t=A;u=y}else{B=w;C=z;D=A;break}}}else{B=n;C=d;D=b}u=o+1|0;if((u|0)<(j|0)){n=B;d=C;b=D;o=u}else{E=C;F=D;break}}}else{E=-1;F=-1}D=c[k+(F*48|0)>>2]|0;C=(((E|0)==((c[k+(F*48|0)+4>>2]|0)-1|0))<<31>>31)+E|0;E=C-((C|0)%3|0)|0;B=+h[D+(E<<4)>>3];h[g>>3]=B;n=+h[D+(E<<4)+8>>3];h[g+8>>3]=n;C=E+1|0;h[g+16>>3]=+h[D+(C<<4)>>3];h[g+24>>3]=+h[D+(C<<4)+8>>3];C=E+2|0;h[g+32>>3]=+h[D+(C<<4)>>3];h[g+40>>3]=+h[D+(C<<4)+8>>3];C=E+3|0;r=+h[D+(C<<4)>>3];h[g+48>>3]=r;w=+h[D+(C<<4)+8>>3];h[g+56>>3]=w;x=B-l;B=n-m;n=r-l;r=w-m;C=f+288|0;w=1.0;v=0.0;G=n*n+r*r;r=x*x+B*B;while(1){D=f;E=g;c[D>>2]=c[E>>2];c[D+4>>2]=c[E+4>>2];c[D+8>>2]=c[E+8>>2];c[D+12>>2]=c[E+12>>2];E=f+16|0;D=g+16|0;c[E>>2]=c[D>>2];c[E+4>>2]=c[D+4>>2];c[E+8>>2]=c[D+8>>2];c[E+12>>2]=c[D+12>>2];D=f+32|0;E=g+32|0;c[D>>2]=c[E>>2];c[D+4>>2]=c[E+4>>2];c[D+8>>2]=c[E+8>>2];c[D+12>>2]=c[E+12>>2];E=f+48|0;D=g+48|0;c[E>>2]=c[D>>2];c[E+4>>2]=c[D+4>>2];c[E+8>>2]=c[D+8>>2];c[E+12>>2]=c[D+12>>2];B=(v+w)*.5;x=1.0-B;D=0;n=+h[f>>3];H=+h[f+8>>3];while(1){E=D+1|0;I=+h[f+(E<<4)>>3];h[f+96+(D<<4)>>3]=x*n+B*I;J=+h[f+(E<<4)+8>>3];h[f+96+(D<<4)+8>>3]=x*H+B*J;if((D|0)<2){D=E;n=I;H=J}else{break}}D=0;H=+h[f+96>>3];n=+h[f+104>>3];while(1){E=D+1|0;J=+h[f+96+(E<<4)>>3];h[f+192+(D<<4)>>3]=x*H+B*J;I=+h[f+96+(E<<4)+8>>3];h[f+192+(D<<4)+8>>3]=x*n+B*I;if((D|0)<1){D=E;H=J;n=I}else{break}}n=+h[f+200>>3];h[f+288>>3]=x*+h[f+192>>3]+B*+h[f+208>>3];K=x*n+B*+h[f+216>>3];h[f+296>>3]=K;L=+h[C>>3];if(+S(+(r-G))<1.0){M=10;break}if(+S(+(w-v))<1.0e-5){M=10;break}D=r<G;n=L-l;H=K-m;I=n*n+H*H;w=D?B:w;v=D?v:B;G=D?I:G;r=D?r:I}if((M|0)==10){h[a>>3]=L;h[a+8>>3]=K;i=e;return}}function Xm(){return c[53510]|0}function Ym(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,v=0,w=0,x=0,y=0,z=0;d=i;i=i+32|0;e=d|0;f=d+8|0;g=d+16|0;j=d+24|0;k=b|0;l=c[53574]|0;m=(b|0)==0;do{if((l|0)==0|m){n=.75}else{o=fw(k,l)|0;if((o|0)==0){n=.75;break}if((a[o]|0)==0){n=.75;break}p=+sF(o,j);if((o|0)==(c[j>>2]|0)){n=.75;break}n=p<.01?.01:p}}while(0);j=b+8|0;h[(c[j>>2]|0)+32>>3]=n;l=c[53618]|0;do{if((l|0)==0|m){q=.5}else{o=fw(k,l)|0;if((o|0)==0){q=.5;break}if((a[o]|0)==0){q=.5;break}n=+sF(o,g);if((o|0)==(c[g>>2]|0)){q=.5;break}q=n<.02?.02:n}}while(0);h[(c[j>>2]|0)+40>>3]=q;g=c[53590]|0;if((g|0)==0|m){r=159064;s=13}else{l=fw(k,g)|0;if((l|0)==0){s=14}else{r=l;s=13}}if((s|0)==13){if((a[r]|0)==0){s=14}else{t=r}}if((s|0)==14){t=159064}r=vl(t,b)|0;c[(c[j>>2]|0)+8>>2]=r;r=fw(k,c[53614]|0)|0;t=c[53624]|0;do{if((t|0)==0|m){u=14.0}else{l=fw(k,t)|0;if((l|0)==0){u=14.0;break}if((a[l]|0)==0){u=14.0;break}q=+sF(l,f);if((l|0)==(c[f>>2]|0)){u=14.0;break}u=q<1.0?1.0:q}}while(0);f=c[53626]|0;if((f|0)==0|m){v=154088;s=22}else{t=fw(k,f)|0;if((t|0)==0){s=23}else{v=t;s=22}}if((s|0)==22){if((a[v]|0)==0){s=23}else{w=v}}if((s|0)==23){w=154088}v=c[53628]|0;if((v|0)==0|m){x=150904;s=26}else{m=fw(k,v)|0;if((m|0)==0){s=27}else{x=m;s=26}}if((s|0)==26){if((a[x]|0)==0){s=27}else{y=x}}if((s|0)==27){y=150904}s=(gy(r)|0)!=0;x=(pl(b)|0)==2;m=ak(k,r,(x?4:0)|(s?2:0),u,w,y)|0;c[(c[j>>2]|0)+104>>2]=m;m=c[53572]|0;do{if((m|0)!=0){s=fw(k,m)|0;if((s|0)==0){break}if((a[s]|0)==0){break}x=(gy(s)|0)!=0;r=ak(k,s,x?2:0,u,w,y)|0;c[(c[j>>2]|0)+108>>2]=r;r=(c[(Hx(k)|0)+8>>2]|0)+113|0;a[r]=a[r]|16}}while(0);y=c[53588]|0;do{if((y|0)==0){z=0}else{w=fw(k,y)|0;if((w|0)==0){z=0;break}if((a[w]|0)==0){z=0;break}m=Ja(w|0,e|0,10)|0;if((w|0)==(c[e>>2]|0)){z=0;break}z=(m|0)<0?0:m&255}}while(0);a[(c[j>>2]|0)+144|0]=z;Cc[c[c[(c[(c[j>>2]|0)+8>>2]|0)+4>>2]>>2]&255](b);i=d;return}function Zm(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0,E=0.0,F=0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0.0,V=0,W=0,X=0.0,Y=0,Z=0,_=0.0,$=0,aa=0,ba=0.0,ca=0,da=0,ea=0,fa=0.0,ga=0,ha=0,ia=0.0,ja=0,ka=0,la=0,ma=0,na=0.0,oa=0,pa=0,qa=0,ra=0.0,sa=0,ta=0,ua=0.0,va=0,wa=0,xa=0,ya=0.0,za=0,Aa=0,Ba=0;d=i;i=i+328|0;e=d|0;f=d+8|0;g=d+16|0;h=d+24|0;j=d+32|0;k=d+72|0;l=d+112|0;m=d+152|0;n=d+192|0;o=d+232|0;p=d+240|0;q=d+248|0;r=d+288|0;s=b;t=b+32|0;u=Hx(c[((c[s>>2]&3|0)==3?b:t)+28>>2]|0)|0;v=c[53790]|0;do{if((v|0)==0){w=0;x=0.0;y=0;z=0}else{A=b|0;B=fw(A,v)|0;if((B|0)==0){w=0;x=0.0;y=0;z=0;break}if((a[B]|0)==0){w=0;x=0.0;y=0;z=0;break}C=c[53796]|0;D=(b|0)==0;do{if((C|0)==0|D){E=14.0}else{F=fw(A,C)|0;if((F|0)==0){E=14.0;break}if((a[F]|0)==0){E=14.0;break}G=+sF(F,p);if((F|0)==(c[p>>2]|0)){E=14.0;break}E=G<1.0?1.0:G}}while(0);C=c[53798]|0;if((C|0)==0|D){H=154088;I=11}else{F=fw(A,C)|0;if((F|0)==0){I=12}else{H=F;I=11}}if((I|0)==11){if((a[H]|0)==0){I=12}else{J=H}}if((I|0)==12){J=154088}F=c[53800]|0;if((F|0)==0|D){K=150904;I=15}else{C=fw(A,F)|0;if((C|0)==0){I=16}else{K=C;I=15}}if((I|0)==15){if((a[K]|0)==0){I=16}else{L=K}}if((I|0)==16){L=150904}C=(gy(B)|0)!=0;F=ak(A,B,C?2:0,E,J,L)|0;C=b+8|0;c[(c[C>>2]|0)+96>>2]=F;F=(c[u+8>>2]|0)+113|0;a[F]=a[F]|1;F=c[53788]|0;if((F|0)==0|D){M=90984}else{M=fw(A,F)|0}F=Vm(M,0)|0;a[(c[C>>2]|0)+114|0]=F;w=1;x=E;y=J;z=L}}while(0);L=c[53748]|0;do{if((L|0)==0){N=x;O=y;P=z}else{J=b|0;M=fw(J,L)|0;if((M|0)==0){N=x;O=y;P=z;break}if((a[M]|0)==0){N=x;O=y;P=z;break}do{if((y|0)==0){K=c[53796]|0;H=(b|0)==0;do{if((K|0)==0|H){Q=14.0}else{p=fw(J,K)|0;if((p|0)==0){Q=14.0;break}if((a[p]|0)==0){Q=14.0;break}E=+sF(p,o);if((p|0)==(c[o>>2]|0)){Q=14.0;break}Q=E<1.0?1.0:E}}while(0);K=c[53798]|0;if((K|0)==0|H){R=154088;I=31}else{p=fw(J,K)|0;if((p|0)==0){I=32}else{R=p;I=31}}if((I|0)==31){if((a[R]|0)==0){I=32}else{S=R}}if((I|0)==32){S=154088}p=c[53800]|0;if((p|0)==0|H){T=150904;I=35}else{K=fw(J,p)|0;if((K|0)!=0){T=K;I=35}}if((I|0)==35){if((a[T]|0)!=0){U=Q;V=S;W=T;break}}U=Q;V=S;W=150904}else{U=x;V=y;W=z}}while(0);A=(gy(M)|0)!=0;D=ak(J,M,A?2:0,U,V,W)|0;c[(c[b+8>>2]|0)+108>>2]=D;D=(c[u+8>>2]|0)+113|0;a[D]=a[D]|32;N=U;O=V;P=W}}while(0);W=c[53792]|0;do{if((W|0)==0){X=0.0;Y=0;Z=0;_=N;$=O;aa=P}else{V=b|0;z=fw(V,W)|0;if((z|0)==0){X=0.0;Y=0;Z=0;_=N;$=O;aa=P;break}if((a[z]|0)==0){X=0.0;Y=0;Z=0;_=N;$=O;aa=P;break}do{if((O|0)==0){y=c[53796]|0;S=(b|0)==0;do{if((y|0)==0|S){ba=14.0}else{T=fw(V,y)|0;if((T|0)==0){ba=14.0;break}if((a[T]|0)==0){ba=14.0;break}U=+sF(T,h);if((T|0)==(c[h>>2]|0)){ba=14.0;break}ba=U<1.0?1.0:U}}while(0);y=c[53798]|0;if((y|0)==0|S){ca=154088;I=49}else{H=fw(V,y)|0;if((H|0)==0){I=50}else{ca=H;I=49}}if((I|0)==49){if((a[ca]|0)==0){I=50}else{da=ca}}if((I|0)==50){da=154088}H=c[53800]|0;if((H|0)==0|S){ea=150904;I=53}else{y=fw(V,H)|0;if((y|0)!=0){ea=y;I=53}}if((I|0)==53){if((a[ea]|0)!=0){fa=ba;ga=da;ha=ea;break}}fa=ba;ga=da;ha=150904}else{fa=N;ga=O;ha=P}}while(0);M=c[53778]|0;J=(b|0)==0;do{if((M|0)==0|J){ia=fa}else{y=fw(V,M)|0;if((y|0)==0){ia=fa;break}if((a[y]|0)==0){ia=fa;break}U=+sF(y,g);if((y|0)==(c[g>>2]|0)){ia=fa;break}ia=U<1.0?1.0:U}}while(0);M=c[53780]|0;if((M|0)==0|J){ja=ga}else{ja=fw(V,M)|0}if((ja|0)==0){I=64}else{if((a[ja]|0)==0){I=64}else{ka=ja}}if((I|0)==64){ka=ga}M=c[53782]|0;if((M|0)==0|J){la=ha}else{la=fw(V,M)|0}if((la|0)==0){I=69}else{if((a[la]|0)==0){I=69}else{ma=la}}if((I|0)==69){ma=ha}M=(gy(z)|0)!=0;y=ak(V,z,M?2:0,ia,ka,ma)|0;c[(c[b+8>>2]|0)+100>>2]=y;y=(c[u+8>>2]|0)+113|0;a[y]=a[y]|2;X=ia;Y=ka;Z=ma;_=fa;$=ga;aa=ha}}while(0);ha=c[53756]|0;ga=b|0;do{if((ha|0)!=0){ma=fw(ga,ha)|0;if((ma|0)==0){break}if((a[ma]|0)==0){break}do{if((Y|0)==0){do{if(($|0)==0){ka=c[53796]|0;la=(b|0)==0;do{if((ka|0)==0|la){na=14.0}else{ja=fw(ga,ka)|0;if((ja|0)==0){na=14.0;break}if((a[ja]|0)==0){na=14.0;break}fa=+sF(ja,f);if((ja|0)==(c[f>>2]|0)){na=14.0;break}na=fa<1.0?1.0:fa}}while(0);ka=c[53798]|0;if((ka|0)==0|la){oa=154088;I=83}else{ja=fw(ga,ka)|0;if((ja|0)==0){I=84}else{oa=ja;I=83}}if((I|0)==83){if((a[oa]|0)==0){I=84}else{pa=oa}}if((I|0)==84){pa=154088}ja=c[53800]|0;if((ja|0)==0|la){qa=150904;I=87}else{ka=fw(ga,ja)|0;if((ka|0)!=0){qa=ka;I=87}}if((I|0)==87){if((a[qa]|0)!=0){ra=na;sa=pa;ta=qa;break}}ra=na;sa=pa;ta=150904}else{ra=_;sa=$;ta=aa}}while(0);S=c[53778]|0;ka=(b|0)==0;do{if((S|0)==0|ka){ua=ra}else{ja=fw(ga,S)|0;if((ja|0)==0){ua=ra;break}if((a[ja]|0)==0){ua=ra;break}fa=+sF(ja,e);if((ja|0)==(c[e>>2]|0)){ua=ra;break}ua=fa<1.0?1.0:fa}}while(0);S=c[53780]|0;if((S|0)==0|ka){va=sa}else{va=fw(ga,S)|0}if((va|0)==0){I=98}else{if((a[va]|0)==0){I=98}else{wa=va}}if((I|0)==98){wa=sa}S=c[53782]|0;if((S|0)==0|ka){xa=ta}else{xa=fw(ga,S)|0}if((xa|0)!=0){if((a[xa]|0)!=0){ya=ua;za=wa;Aa=xa;break}}ya=ua;za=wa;Aa=ta}else{ya=X;za=Y;Aa=Z}}while(0);z=(gy(ma)|0)!=0;V=ak(ga,ma,z?2:0,ya,za,Aa)|0;c[(c[b+8>>2]|0)+104>>2]=V;V=(c[u+8>>2]|0)+113|0;a[V]=a[V]|4}}while(0);u=ew(ga,148040)|0;Aa=(u|0)!=0?u:213424;if((a[Aa]|0)!=0){a[(c[(c[((c[s>>2]&3|0)==3?b:t)+28>>2]|0)+8>>2]|0)+145|0]=1}u=b+8|0;za=c[u>>2]|0;Z=za+16|0;Y=c[((c[s>>2]&3|0)==3?b:t)+28>>2]|0;t=c[(c[(c[(c[Y+8>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0;ta=l|0;l=m;wa=n;do{if((Aa|0)==0){I=110}else{xa=gb(Aa|0,58)|0;if((xa|0)==0){I=110;break}a[xa]=0;Vc[t&63](m,Y,Aa,xa+1|0);c[ta>>2]=c[l>>2];c[ta+4>>2]=c[l+4>>2];c[ta+8>>2]=c[l+8>>2];c[ta+12>>2]=c[l+12>>2];c[ta+16>>2]=c[l+16>>2];c[ta+20>>2]=c[l+20>>2];c[ta+24>>2]=c[l+24>>2];c[ta+28>>2]=c[l+28>>2];c[ta+32>>2]=c[l+32>>2];a[xa]=58}}while(0);if((I|0)==110){Vc[t&63](n,Y,Aa,0);c[ta>>2]=c[wa>>2];c[ta+4>>2]=c[wa+4>>2];c[ta+8>>2]=c[wa+8>>2];c[ta+12>>2]=c[wa+12>>2];c[ta+16>>2]=c[wa+16>>2];c[ta+20>>2]=c[wa+20>>2];c[ta+24>>2]=c[wa+24>>2];c[ta+28>>2]=c[wa+28>>2];c[ta+32>>2]=c[wa+32>>2]}wa=q|0;c[wa>>2]=c[ta>>2];c[wa+4>>2]=c[ta+4>>2];c[wa+8>>2]=c[ta+8>>2];c[wa+12>>2]=c[ta+12>>2];c[wa+16>>2]=c[ta+16>>2];c[wa+20>>2]=c[ta+20>>2];c[wa+24>>2]=c[ta+24>>2];c[wa+28>>2]=c[ta+28>>2];c[wa+32>>2]=c[ta+32>>2];q=Z;c[q>>2]=c[wa>>2];c[q+4>>2]=c[wa+4>>2];c[q+8>>2]=c[wa+8>>2];c[q+12>>2]=c[wa+12>>2];c[q+16>>2]=c[wa+16>>2];c[q+20>>2]=c[wa+20>>2];c[q+24>>2]=c[wa+24>>2];c[q+28>>2]=c[wa+28>>2];c[q+32>>2]=c[wa+32>>2];c[za+52>>2]=Aa;Aa=c[53758]|0;do{if((Aa|0)!=0){za=fw(ga,Aa)|0;if((za|0)==0){break}if((a[za]|0)==0){break}if((Vm(za,0)|0)<<24>>24!=0){break}a[(c[u>>2]|0)+46|0]=0}}while(0);Aa=ew(ga,141944)|0;za=(Aa|0)!=0?Aa:213424;if((a[za]|0)==0){Ba=b-32|0}else{Aa=b-32|0;a[(c[(c[((c[s>>2]&3|0)==2?b:Aa)+28>>2]|0)+8>>2]|0)+145|0]=1;Ba=Aa}Aa=c[u>>2]|0;wa=Aa+56|0;q=c[((c[s>>2]&3|0)==2?b:Ba)+28>>2]|0;Ba=c[(c[(c[(c[q+8>>2]|0)+8>>2]|0)+4>>2]|0)+8>>2]|0;b=j;s=k;do{if((za|0)==0){I=122}else{Z=gb(za|0,58)|0;if((Z|0)==0){I=122;break}a[Z]=0;Vc[Ba&63](j,q,za,Z+1|0);c[ta>>2]=c[b>>2];c[ta+4>>2]=c[b+4>>2];c[ta+8>>2]=c[b+8>>2];c[ta+12>>2]=c[b+12>>2];c[ta+16>>2]=c[b+16>>2];c[ta+20>>2]=c[b+20>>2];c[ta+24>>2]=c[b+24>>2];c[ta+28>>2]=c[b+28>>2];c[ta+32>>2]=c[b+32>>2];a[Z]=58}}while(0);if((I|0)==122){Vc[Ba&63](k,q,za,0);c[ta>>2]=c[s>>2];c[ta+4>>2]=c[s+4>>2];c[ta+8>>2]=c[s+8>>2];c[ta+12>>2]=c[s+12>>2];c[ta+16>>2]=c[s+16>>2];c[ta+20>>2]=c[s+20>>2];c[ta+24>>2]=c[s+24>>2];c[ta+28>>2]=c[s+28>>2];c[ta+32>>2]=c[s+32>>2]}s=r|0;c[s>>2]=c[ta>>2];c[s+4>>2]=c[ta+4>>2];c[s+8>>2]=c[ta+8>>2];c[s+12>>2]=c[ta+12>>2];c[s+16>>2]=c[ta+16>>2];c[s+20>>2]=c[ta+20>>2];c[s+24>>2]=c[ta+24>>2];c[s+28>>2]=c[ta+28>>2];c[s+32>>2]=c[ta+32>>2];ta=wa;c[ta>>2]=c[s>>2];c[ta+4>>2]=c[s+4>>2];c[ta+8>>2]=c[s+8>>2];c[ta+12>>2]=c[s+12>>2];c[ta+16>>2]=c[s+16>>2];c[ta+20>>2]=c[s+20>>2];c[ta+24>>2]=c[s+24>>2];c[ta+28>>2]=c[s+28>>2];c[ta+32>>2]=c[s+32>>2];c[Aa+92>>2]=za;za=c[53794]|0;if((za|0)==0){i=d;return w|0}Aa=fw(ga,za)|0;if((Aa|0)==0){i=d;return w|0}if((a[Aa]|0)==0){i=d;return w|0}if((Vm(Aa,0)|0)<<24>>24!=0){i=d;return w|0}a[(c[u>>2]|0)+86|0]=0;i=d;return w|0}function _m(a,b){a=a|0;b=b|0;var e=0,f=0,g=0.0,i=0,j=0.0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;e=c[a+8>>2]|0;a=c[e+116>>2]|0;f=e+16|0;g=(c[k>>2]=d[f]|d[f+1|0]<<8|d[f+2|0]<<16|d[f+3|0]<<24,c[k+4>>2]=d[f+4|0]|d[f+5|0]<<8|d[f+6|0]<<16|d[f+7|0]<<24,+h[k>>3]);i=e+24|0;j=(c[k>>2]=d[i]|d[i+1|0]<<8|d[i+2|0]<<16|d[i+3|0]<<24,c[k+4>>2]=d[i+4|0]|d[i+5|0]<<8|d[i+6|0]<<16|d[i+7|0]<<24,+h[k>>3]);l=e+32|0;m=(c[k>>2]=d[l]|d[l+1|0]<<8|d[l+2|0]<<16|d[l+3|0]<<24,c[k+4>>2]=d[l+4|0]|d[l+5|0]<<8|d[l+6|0]<<16|d[l+7|0]<<24,+h[k>>3]);n=e+40|0;o=(c[k>>2]=d[n]|d[n+1|0]<<8|d[n+2|0]<<16|d[n+3|0]<<24,c[k+4>>2]=d[n+4|0]|d[n+5|0]<<8|d[n+6|0]<<16|d[n+7|0]<<24,+h[k>>3]);p=+h[b+56>>3];q=+h[b+64>>3];e=(a&1|0)==0;r=+h[b+24>>3];s=+h[b+32>>3];t=(e?r:s)*.5;u=p-t;v=p+t;t=(e?s:r)*.5;r=q-t;s=q+t;h[f>>3]=u<g?u:g;h[i>>3]=r<j?r:j;h[l>>3]=v>m?v:m;h[n>>3]=s>o?s:o;return}function $m(b){b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0;do{if((Lw(b)|0)==0){if((c[(c[b+8>>2]|0)+172>>2]|0)!=0){break}return}}while(0);d=ux(b)|0;e=b+8|0;if((d|0)==0){f=-2147483647.0;g=-2147483647.0;i=2147483647.0;j=2147483647.0}else{k=-2147483647.0;l=-2147483647.0;m=2147483647.0;n=2147483647.0;o=d;while(1){d=c[o+8>>2]|0;p=c[d+132>>2]|0;q=+h[p>>3]*72.0;r=+h[p+8>>3]*72.0;s=(+h[d+88>>3]+ +h[d+96>>3])*.5;t=+h[d+80>>3]*.5;u=q-s;v=r-t;w=q+s;s=r+t;t=n<u?n:u;u=m<v?m:v;v=l>w?l:w;w=k>s?k:s;p=c[d+108>>2]|0;do{if((p|0)==0){x=t;y=u;z=v;A=w}else{if((a[p+81|0]|0)==0){x=t;y=u;z=v;A=w;break}s=+h[p+56>>3];r=+h[p+64>>3];d=(c[(c[e>>2]|0)+116>>2]&1|0)==0;q=+h[p+24>>3];B=+h[p+32>>3];C=(d?q:B)*.5;D=s-C;E=s+C;C=D<t?D:t;D=E>v?E:v;E=(d?B:q)*.5;q=r-E;B=r+E;E=q<u?q:u;if(B<=w){x=C;y=E;z=D;A=w;break}x=C;y=E;z=D;A=B}}while(0);p=mw(b,o)|0;if((p|0)==0){F=A;G=z;H=y;I=x}else{w=A;u=z;v=y;t=x;d=p;while(1){p=c[d+8>>2]|0;J=c[p+8>>2]|0;do{if((J|0)==0){K=t;L=v;M=u;N=w}else{O=c[J+4>>2]|0;if((O|0)>0){P=c[J>>2]|0;B=w;D=u;E=v;C=t;Q=0;while(1){R=c[P+(Q*48|0)+4>>2]|0;if((R|0)>0){S=c[P+(Q*48|0)>>2]|0;q=B;r=D;s=E;T=C;U=0;while(1){V=+h[S+(U<<4)>>3];W=+h[S+(U<<4)+8>>3];X=T<V?T:V;Y=s<W?s:W;Z=r>V?r:V;V=q>W?q:W;_=U+1|0;if((_|0)<(R|0)){q=V;r=Z;s=Y;T=X;U=_}else{$=V;aa=Z;ba=Y;ca=X;break}}}else{$=B;aa=D;ba=E;ca=C}U=Q+1|0;if((U|0)<(O|0)){B=$;D=aa;E=ba;C=ca;Q=U}else{da=$;ea=aa;fa=ba;ga=ca;break}}}else{da=w;ea=u;fa=v;ga=t}Q=c[p+96>>2]|0;do{if((Q|0)==0){ha=ga;ia=fa;ja=ea;ka=da}else{if((a[Q+81|0]|0)==0){ha=ga;ia=fa;ja=ea;ka=da;break}C=+h[Q+56>>3];E=+h[Q+64>>3];O=(c[(c[e>>2]|0)+116>>2]&1|0)==0;D=+h[Q+24>>3];B=+h[Q+32>>3];T=(O?D:B)*.5;s=C-T;r=C+T;T=s<ga?s:ga;s=r>ea?r:ea;r=(O?B:D)*.5;D=E-r;B=E+r;r=D<fa?D:fa;if(B<=da){ha=T;ia=r;ja=s;ka=da;break}ha=T;ia=r;ja=s;ka=B}}while(0);Q=c[p+100>>2]|0;do{if((Q|0)==0){la=ha;ma=ia;na=ja;oa=ka}else{if((a[Q+81|0]|0)==0){la=ha;ma=ia;na=ja;oa=ka;break}B=+h[Q+56>>3];s=+h[Q+64>>3];O=(c[(c[e>>2]|0)+116>>2]&1|0)==0;r=+h[Q+24>>3];T=+h[Q+32>>3];D=(O?r:T)*.5;E=B-D;C=B+D;D=E<ha?E:ha;E=C>ja?C:ja;C=(O?T:r)*.5;r=s-C;T=s+C;C=r<ia?r:ia;if(T<=ka){la=D;ma=C;na=E;oa=ka;break}la=D;ma=C;na=E;oa=T}}while(0);Q=c[p+104>>2]|0;do{if((Q|0)==0){pa=la;qa=ma;ra=na;sa=oa}else{if((a[Q+81|0]|0)==0){pa=la;qa=ma;ra=na;sa=oa;break}T=+h[Q+56>>3];E=+h[Q+64>>3];O=(c[(c[e>>2]|0)+116>>2]&1|0)==0;C=+h[Q+24>>3];D=+h[Q+32>>3];r=(O?C:D)*.5;s=T-r;B=T+r;r=s<la?s:la;s=B>na?B:na;B=(O?D:C)*.5;C=E-B;D=E+B;B=C<ma?C:ma;if(D<=oa){pa=r;qa=B;ra=s;sa=oa;break}pa=r;qa=B;ra=s;sa=D}}while(0);Q=c[p+108>>2]|0;if((Q|0)==0){K=pa;L=qa;M=ra;N=sa;break}if((a[Q+81|0]|0)==0){K=pa;L=qa;M=ra;N=sa;break}D=+h[Q+56>>3];s=+h[Q+64>>3];O=(c[(c[e>>2]|0)+116>>2]&1|0)==0;B=+h[Q+24>>3];r=+h[Q+32>>3];C=(O?B:r)*.5;E=D-C;T=D+C;C=E<pa?E:pa;E=T>ra?T:ra;T=(O?r:B)*.5;B=s-T;r=s+T;T=B<qa?B:qa;if(r<=sa){K=C;L=T;M=E;N=sa;break}K=C;L=T;M=E;N=r}}while(0);p=ow(b,d)|0;if((p|0)==0){F=N;G=M;H=L;I=K;break}else{w=N;u=M;v=L;t=K;d=p}}}d=vx(b,o)|0;if((d|0)==0){f=F;g=G;i=H;j=I;break}else{k=F;l=G;m=H;n=I;o=d}}}o=c[e>>2]|0;e=c[o+172>>2]|0;if((e|0)<1){ta=f;ua=g;va=i;wa=j}else{b=c[o+176>>2]|0;I=f;f=g;g=i;i=j;d=1;while(1){p=c[(c[b+(d<<2)>>2]|0)+8>>2]|0;j=+h[p+16>>3];n=+h[p+24>>3];H=+h[p+32>>3];m=+h[p+40>>3];G=i<j?i:j;j=g<n?g:n;n=f>H?f:H;H=I>m?I:m;if((d|0)<(e|0)){I=H;f=n;g=j;i=G;d=d+1|0}else{ta=H;ua=n;va=j;wa=G;break}}}d=c[o+12>>2]|0;do{if((d|0)==0){xa=wa;ya=va;za=ua;Aa=ta}else{if((a[d+81|0]|0)==0){xa=wa;ya=va;za=ua;Aa=ta;break}i=+h[d+56>>3];g=+h[d+64>>3];e=(c[o+116>>2]&1|0)==0;f=+h[d+24>>3];I=+h[d+32>>3];G=(e?f:I)*.5;j=i-G;n=i+G;G=j<wa?j:wa;j=n>ua?n:ua;n=(e?I:f)*.5;f=g-n;I=g+n;n=f<va?f:va;if(I<=ta){xa=G;ya=n;za=j;Aa=ta;break}xa=G;ya=n;za=j;Aa=I}}while(0);h[o+16>>3]=xa;h[o+24>>3]=ya;h[o+32>>3]=za;h[o+40>>3]=Aa;return}function an(a){a=a|0;var b=0;if((c[a+48>>2]|0)==(a|0)){b=1;return b|0}b=(qm($w(a|0)|0,138824,7)|0)==0|0;return b|0}
+
+
+
+function bn(d){d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;e=i;i=i+224|0;f=e|0;g=e+24|0;h=e+48|0;j=e+72|0;k=e+80|0;l=$g(10368,c[43330]|0)|0;xn(d,l);m=$g(20008,c[43330]|0)|0;n=ry(d,136240,1)|0;Wx(n|0,133528,272,1)|0;Iv(k,128,e+96|0);o=ux(d)|0;if((o|0)!=0){p=l|0;q=j;r=j|0;s=j+4|0;j=m|0;t=f;u=f+8|0;v=f+12|0;w=f+16|0;x=f+20|0;f=h;y=h+8|0;z=h+12|0;A=h+16|0;B=h+20|0;h=g;C=g+8|0;D=g+12|0;E=g+16|0;F=g+20|0;g=o;do{do{if((a[(c[g+8>>2]|0)+118|0]|0)==0){o=mw(d,g)|0;if((o|0)==0){break}else{G=o}do{o=G;H=c[o>>2]&3;I=G+32|0;J=c[((H|0)==3?G:I)+28>>2]|0;K=G-32|0;L=c[((H|0)==2?G:K)+28>>2]|0;do{if((a[(c[L+8>>2]|0)+118|0]|0)==0){H=J|0;do{if((Za($w(H)|0,138824,7)|0)==0){M=$w(H)|0;N=Hc[c[p>>2]&63](l,M,512)|0;if((N|0)==0){O=0;break}O=c[N+12>>2]|0}else{O=0}}while(0);N=L|0;do{if((Za($w(N)|0,138824,7)|0)==0){M=$w(N)|0;P=Hc[c[p>>2]&63](l,M,512)|0;if((P|0)==0){Q=0;break}Q=c[P+12>>2]|0}else{Q=0}}while(0);P=(O|0)!=0;M=(Q|0)==0;if(M&(P^1)){break}if((O|0)==(Q|0)){R=$w(H)|0;S=$w(H)|0;Fv(0,118504,(T=i,i=i+16|0,c[T>>2]=R,c[T+8>>2]=S,T)|0)|0;i=T;break}S=c[o>>2]&3;c[r>>2]=c[((S|0)==3?G:I)+28>>2];c[s>>2]=c[((S|0)==2?G:K)+28>>2];S=Hc[c[j>>2]&63](m,q,512)|0;if((S|0)!=0){R=c[S+16>>2]|0;U=c[S+20>>2]|0;S=uw(Hx(R|0)|0,R,U,0,1)|0;Wx(S,112056,176,1)|0;jw(G|0,S)|0;break}if(M){if((Rx(O,N)|0)==0){M=Bn(J,O,k,n)|0;S=uw(Hx(M|0)|0,M,L,0,1)|0;M=S|0;Wx(M,112056,176,1)|0;jw(G|0,M)|0;c[u>>2]=H;c[v>>2]=N;M=S;U=c[M>>2]&3;R=S+32|0;c[w>>2]=c[((U|0)==3?S:R)+28>>2];V=S-32|0;c[x>>2]=c[((U|0)==2?S:V)+28>>2];Hc[c[j>>2]&63](m,t,1)|0;c[u>>2]=N;c[v>>2]=H;U=c[M>>2]&3;c[w>>2]=c[((U|0)==2?S:V)+28>>2];c[x>>2]=c[((U|0)==3?S:R)+28>>2];Hc[c[j>>2]&63](m,t,1)|0;break}else{R=$w(N)|0;S=$w(O|0)|0;Fv(0,118128,(T=i,i=i+16|0,c[T>>2]=R,c[T+8>>2]=S,T)|0)|0;i=T;break}}if(!P){if((Rx(Q,H)|0)==0){P=Bn(L,Q,k,n)|0;S=uw(Hx(H)|0,J,P,0,1)|0;P=S|0;Wx(P,112056,176,1)|0;jw(G|0,P)|0;c[C>>2]=H;c[D>>2]=N;P=S;R=c[P>>2]&3;U=S+32|0;c[E>>2]=c[((R|0)==3?S:U)+28>>2];V=S-32|0;c[F>>2]=c[((R|0)==2?S:V)+28>>2];Hc[c[j>>2]&63](m,h,1)|0;c[C>>2]=N;c[D>>2]=H;R=c[P>>2]&3;c[E>>2]=c[((R|0)==2?S:V)+28>>2];c[F>>2]=c[((R|0)==3?S:U)+28>>2];Hc[c[j>>2]&63](m,h,1)|0;break}else{U=$w(H)|0;S=$w(Q|0)|0;Fv(0,118208,(T=i,i=i+16|0,c[T>>2]=U,c[T+8>>2]=S,T)|0)|0;i=T;break}}S=O|0;if((Rx(Q,S)|0)!=0){U=$w(S)|0;R=$w(Q|0)|0;Fv(0,118368,(T=i,i=i+16|0,c[T>>2]=U,c[T+8>>2]=R,T)|0)|0;i=T;break}R=Q|0;if((Rx(O,R)|0)==0){U=Bn(J,O,k,n)|0;V=Bn(L,Q,k,n)|0;P=uw(Hx(U|0)|0,U,V,0,1)|0;V=P|0;Wx(V,112056,176,1)|0;jw(G|0,V)|0;c[y>>2]=H;c[z>>2]=N;V=P;U=c[V>>2]&3;M=P+32|0;c[A>>2]=c[((U|0)==3?P:M)+28>>2];W=P-32|0;c[B>>2]=c[((U|0)==2?P:W)+28>>2];Hc[c[j>>2]&63](m,f,1)|0;c[y>>2]=N;c[z>>2]=H;U=c[V>>2]&3;c[A>>2]=c[((U|0)==2?P:W)+28>>2];c[B>>2]=c[((U|0)==3?P:M)+28>>2];Hc[c[j>>2]&63](m,f,1)|0;break}else{M=$w(R)|0;R=$w(S)|0;Fv(0,118288,(T=i,i=i+16|0,c[T>>2]=M,c[T+8>>2]=R,T)|0)|0;i=T;break}}}while(0);G=ow(d,G)|0;}while((G|0)!=0)}}while(0);g=vx(d,g)|0;}while((g|0)!=0)}Mv(k);Vg(m)|0;m=Lw(n)|0;k=ux(n)|0;if((k|0)!=0){g=k;while(1){k=vx(n,g)|0;Gx(d,g|0)|0;if((k|0)==0){break}else{g=k}}}Kw(n)|0;if((m|0)==0){X=Vg(l)|0;i=e;return m|0}n=(c[d+8>>2]|0)+128|0;b[n>>1]=b[n>>1]|1;X=Vg(l)|0;i=e;return m|0}function cn(a){a=a|0;var b=0;b=$g(10368,c[43330]|0)|0;xn(a,b);return b|0}function dn(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=ry(b,136240,1)|0;Wx(d|0,133528,272,1)|0;e=ux(b)|0;if((e|0)!=0){f=e;do{e=mw(b,f)|0;if((e|0)!=0){g=e;do{e=c[g>>2]&3;h=c[((e|0)==3?g:g+32|0)+28>>2]|0;i=c[((e|0)==2?g:g-32|0)+28>>2]|0;if((a[(c[h+8>>2]|0)+118|0]|0)==0){if((a[(c[i+8>>2]|0)+118|0]|0)!=0){j=5}}else{j=5}if((j|0)==5){j=0;e=An(h,d)|0;h=An(i,d)|0;i=uw(Hx(e|0)|0,e,h,0,1)|0;Wx(i,112056,176,1)|0;jw(g|0,i)|0}g=ow(b,g)|0;}while((g|0)!=0)}f=vx(b,f)|0;}while((f|0)!=0)}f=ux(d)|0;if((f|0)==0){k=Kw(d)|0;return}else{l=f}do{Gx(b,l|0)|0;l=vx(d,l)|0;}while((l|0)!=0);k=Kw(d)|0;return}function en(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Wv(a,b,c,0)|0;if((e|0)!=0){f=e;return f|0}f=Wv(a,b,c,d)|0;return f|0}function fn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=i;i=i+24|0;f=e|0;g=e+8|0;h=gb(b|0,59)|0;j=d+4|0;k=c[j>>2]|0;l=d+8|0;if(k>>>0<(c[l>>2]|0)>>>0){m=k}else{Jv(d,1)|0;m=c[j>>2]|0}c[j>>2]=m+1;a[m]=38;if((h|0)==0){n=b;i=e;return n|0}m=h-b|0;if((m-2|0)>>>0>6>>>0){n=b;i=e;return n|0}k=g|0;DF(k|0,b|0,m|0)|0;a[g+m|0]=0;c[f>>2]=k;m=vb(f|0,26544,252,8,120)|0;if((m|0)==0){n=b;i=e;return n|0}nb(k|0,131392,(b=i,i=i+8|0,c[b>>2]=c[m+4>>2],b)|0)|0;i=b;b=c[j>>2]|0;if(b>>>0<(c[l>>2]|0)>>>0){o=b}else{Jv(d,1)|0;o=c[j>>2]|0}c[j>>2]=o+1;a[o]=35;Lv(d,k)|0;k=c[j>>2]|0;if(k>>>0<(c[l>>2]|0)>>>0){p=k}else{Jv(d,1)|0;p=c[j>>2]|0}c[j>>2]=p+1;a[p]=59;n=h+1|0;i=e;return n|0}function gn(a,b){a=a|0;b=b|0;return Ya(c[a>>2]|0,c[b>>2]|0)|0}function hn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;e=i;i=i+1056|0;f=e|0;g=e+8|0;h=e+16|0;c[g>>2]=b;if((c[44702]|0)!=(d|0)){c[44702]=d;a[23e3]=0}Iv(h,1024,e+32|0);j=b+1|0;c[g>>2]=j;k=a[b]|0;b=h+4|0;l=h+8|0;if(k<<24>>24!=0){m=f|0;n=f+1|0;f=d|0;d=k;k=j;do{a:do{if((d&255)>>>0<192>>>0){if(d<<24>>24!=38){o=d;break}j=jn(g)|0;if((j|0)==0){o=38;break}if(j>>>0<127>>>0){o=j&255;break}p=c[b>>2]|0;q=p>>>0>=(c[l>>2]|0)>>>0;if(j>>>0<2047>>>0){if(q){Jv(h,1)|0;r=c[b>>2]|0}else{r=p}c[b>>2]=r+1;a[r]=j>>>6|192;o=(j&63|128)&255;break}if(q){Jv(h,1)|0;s=c[b>>2]|0}else{s=p}c[b>>2]=s+1;a[s]=j>>>12|224;p=c[b>>2]|0;if(p>>>0<(c[l>>2]|0)>>>0){t=p}else{Jv(h,1)|0;t=c[b>>2]|0}c[b>>2]=t+1;a[t]=j>>>6&63|128;o=(j&63|128)&255}else{do{if((d&255)>>>0<224>>>0){u=1}else{if((d&255)>>>0<240>>>0){u=2;break}if((d&255)>>>0<248>>>0){u=3;break}if(!(a[23e3]|0)){j=$w(f)|0;Fv(0,128976,(v=i,i=i+8|0,c[v>>2]=j,v)|0)|0;i=v;a[23e3]=1}a[m]=d;a[n]=0;j=kn(m)|0;p=xF(j|0)|0;if((p|0)>1){q=j;w=p;while(1){x=w-1|0;y=c[b>>2]|0;if(y>>>0<(c[l>>2]|0)>>>0){z=y}else{Jv(h,1)|0;z=c[b>>2]|0}y=a[q]|0;c[b>>2]=z+1;a[z]=y;if((x|0)>1){q=q+1|0;w=x}else{break}}A=j+(p-1)|0}else{A=j}w=a[A]|0;eF(j);o=w;break a}}while(0);w=d;q=0;x=k;while(1){if((a[x]&-64)<<24>>24!=-128){break}y=c[b>>2]|0;if(y>>>0<(c[l>>2]|0)>>>0){B=y}else{Jv(h,1)|0;B=c[b>>2]|0}c[b>>2]=B+1;a[B]=w;y=x+1|0;c[g>>2]=y;C=a[x]|0;D=q+1|0;if((D|0)<(u|0)){w=C;q=D;x=y}else{o=C;break a}}if(!(a[23e3]|0)){x=$w(f)|0;Fv(0,125768,(v=i,i=i+16|0,c[v>>2]=u+1,c[v+8>>2]=x,v)|0)|0;i=v;a[23e3]=1}a[m]=w;a[n]=0;x=kn(m)|0;q=xF(x|0)|0;if((q|0)>1){C=x;y=q;while(1){D=y-1|0;E=c[b>>2]|0;if(E>>>0<(c[l>>2]|0)>>>0){F=E}else{Jv(h,1)|0;F=c[b>>2]|0}E=a[C]|0;c[b>>2]=F+1;a[F]=E;if((D|0)>1){C=C+1|0;y=D}else{break}}G=x+(q-1)|0}else{G=x}y=a[G]|0;eF(x);o=y}}while(0);y=c[b>>2]|0;if(y>>>0<(c[l>>2]|0)>>>0){H=y}else{Jv(h,1)|0;H=c[b>>2]|0}c[b>>2]=H+1;a[H]=o;y=c[g>>2]|0;k=y+1|0;c[g>>2]=k;d=a[y]|0;}while(d<<24>>24!=0)}d=c[b>>2]|0;if(d>>>0<(c[l>>2]|0)>>>0){I=d;a[I]=0;J=h|0;K=c[J>>2]|0;c[b>>2]=K;L=Lb(K|0)|0;Mv(h);i=e;return L|0}Jv(h,1)|0;I=c[b>>2]|0;a[I]=0;J=h|0;K=c[J>>2]|0;c[b>>2]=K;L=Lb(K|0)|0;Mv(h);i=e;return L|0}function jn(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=i;i=i+24|0;e=d|0;f=c[b>>2]|0;if((a[f]|0)!=35){g=d+8|0;c[e>>2]=g;h=g;g=0;while(1){j=a[f+g|0]|0;if((j<<24>>24|0)==59){k=17;break}else if((j<<24>>24|0)==0){l=0;m=f;k=20;break}a[h]=j;j=g+1|0;if((j|0)<8){h=h+1|0;g=j}else{l=0;m=f;k=20;break}}if((k|0)==17){a[h]=0;h=vb(e|0,26544,252,8,120)|0;if((h|0)==0){l=0;m=f;c[b>>2]=m;i=d;return l|0}l=c[h+4>>2]|0;m=f+(g+1)|0;c[b>>2]=m;i=d;return l|0}else if((k|0)==20){c[b>>2]=m;i=d;return l|0}}k=a[f+1|0]|0;a:do{if((k&-33)<<24>>24==88){g=2;h=0;while(1){e=a[f+g|0]|0;j=e&255;do{if((e-65&255)>>>0<6>>>0){n=j-55|0}else{if((e-97&255)>>>0<6>>>0){n=j-87|0;break}if((e-48&255)>>>0>=10>>>0){o=h;p=g;q=j;break a}n=j-48|0}}while(0);j=n+(h<<4)|0;e=g+1|0;if((e|0)<8){g=e;h=j}else{o=j;p=e;q=n;break}}}else{h=1;g=0;e=k;while(1){j=e&255;if((e-48&255)>>>0>=10>>>0){o=g;p=h;q=j;break a}r=(g*10|0)-48+j|0;s=h+1|0;if((s|0)>=8){o=r;p=s;q=j;break a}h=s;g=r;e=a[f+s|0]|0}}}while(0);if((q|0)!=59){l=0;m=f;c[b>>2]=m;i=d;return l|0}l=o;m=f+(p+1)|0;c[b>>2]=m;i=d;return l|0}function kn(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=i;i=i+1048|0;e=d|0;f=d+8|0;Iv(f,1024,d+24|0);c[e>>2]=b+1;g=a[b]|0;b=f+4|0;h=f+8|0;if(g<<24>>24!=0){j=g;do{if(j<<24>>24==38){g=jn(e)|0;k=(g|0)!=0?g:38}else{k=j&255}do{if(k>>>0<127>>>0){g=c[b>>2]|0;if(g>>>0<(c[h>>2]|0)>>>0){l=g}else{Jv(f,1)|0;l=c[b>>2]|0}c[b>>2]=l+1;a[l]=k}else{g=c[b>>2]|0;m=g>>>0>=(c[h>>2]|0)>>>0;if(k>>>0<2047>>>0){if(m){Jv(f,1)|0;n=c[b>>2]|0}else{n=g}c[b>>2]=n+1;a[n]=k>>>6|192;o=c[b>>2]|0;if(o>>>0<(c[h>>2]|0)>>>0){p=o}else{Jv(f,1)|0;p=c[b>>2]|0}c[b>>2]=p+1;a[p]=k&63|128;break}if(m){Jv(f,1)|0;q=c[b>>2]|0}else{q=g}c[b>>2]=q+1;a[q]=k>>>12|224;g=c[b>>2]|0;if(g>>>0<(c[h>>2]|0)>>>0){r=g}else{Jv(f,1)|0;r=c[b>>2]|0}c[b>>2]=r+1;a[r]=k>>>6&63|128;g=c[b>>2]|0;if(g>>>0<(c[h>>2]|0)>>>0){s=g}else{Jv(f,1)|0;s=c[b>>2]|0}c[b>>2]=s+1;a[s]=k&63|128}}while(0);g=c[e>>2]|0;c[e>>2]=g+1;j=a[g]|0;}while(j<<24>>24!=0)}j=c[b>>2]|0;if(j>>>0<(c[h>>2]|0)>>>0){t=j;a[t]=0;u=f|0;v=c[u>>2]|0;c[b>>2]=v;w=Lb(v|0)|0;Mv(f);i=d;return w|0}Jv(f,1)|0;t=c[b>>2]|0;a[t]=0;u=f|0;v=c[u>>2]|0;c[b>>2]=v;w=Lb(v|0)|0;Mv(f);i=d;return w|0}function ln(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i;i=i+1040|0;e=d|0;Iv(e,1024,d+16|0);f=a[b]|0;g=e+4|0;h=e+8|0;if(f<<24>>24!=0){j=b;b=f;while(1){f=j+1|0;if((b&255)>>>0<127>>>0){k=c[g>>2]|0;if(k>>>0<(c[h>>2]|0)>>>0){l=k}else{Jv(e,1)|0;l=c[g>>2]|0}c[g>>2]=l+1;a[l]=b;m=f}else{k=a[f]&63|b<<6;f=c[g>>2]|0;if(f>>>0<(c[h>>2]|0)>>>0){n=f}else{Jv(e,1)|0;n=c[g>>2]|0}c[g>>2]=n+1;a[n]=k;m=j+2|0}k=a[m]|0;if(k<<24>>24==0){break}else{j=m;b=k}}}b=c[g>>2]|0;if(b>>>0<(c[h>>2]|0)>>>0){o=b;a[o]=0;p=e|0;q=c[p>>2]|0;c[g>>2]=q;r=Lb(q|0)|0;Mv(e);i=d;return r|0}Jv(e,1)|0;o=c[g>>2]|0;a[o]=0;p=e|0;q=c[p>>2]|0;c[g>>2]=q;r=Lb(q|0)|0;Mv(e);i=d;return r|0}function mn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0;d=i;i=i+24|0;e=b;b=i;i=i+32|0;tF(b,e,32)|0;e=d|0;f=d+8|0;g=+h[b+16>>3];j=c[a+8>>2]|0;if(g<+h[j+48>>3]){k=0;i=d;return k|0}l=+h[b>>3];if(+h[j+64>>3]<l){k=0;i=d;return k|0}m=+h[b+24>>3];if(m<+h[j+56>>3]){k=0;i=d;return k|0}n=+h[b+8>>3];if(+h[j+72>>3]<n){k=0;i=d;return k|0}o=+h[j+24>>3]-(m+n)*.5;h[f>>3]=+h[j+16>>3]-(g+l)*.5;h[f+8>>3]=o;c[e>>2]=a;c[e+4>>2]=0;k=Oc[c[(c[(c[j+8>>2]|0)+4>>2]|0)+12>>2]&255](e,f)|0;i=d;return k|0}function nn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0.0,f=0.0,g=0.0,j=0.0,k=0;c=i;d=b;b=i;i=i+32|0;tF(b,d,32)|0;e=+h[a+24>>3]*.5;f=+h[a+32>>3]*.5;g=+h[a+56>>3];j=+h[a+64>>3];if(+h[b+16>>3]<g-e){k=0;i=c;return k|0}if(e+g<+h[b>>3]){k=0;i=c;return k|0}if(+h[b+24>>3]<j-f){k=0;i=c;return k|0}k=f+j>=+h[b+8>>3]|0;i=c;return k|0}function on(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0,ka=0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0;e=i;i=i+384|0;f=b;b=i;i=i+32|0;tF(b,f,32)|0;f=e|0;g=e+16|0;j=e+32|0;l=e+64|0;m=e+96|0;n=e+128|0;o=e+160|0;p=e+176|0;q=e+192|0;r=e+224|0;s=e+256|0;t=e+288|0;u=e+320|0;v=e+336|0;w=e+352|0;x=a+8|0;a=c[x>>2]|0;y=c[a+8>>2]|0;do{if((y|0)==0){z=a}else{if(+h[y+24>>3]<+h[b>>3]){z=a;break}if(+h[b+16>>3]<+h[y+8>>3]){z=a;break}if(+h[y+32>>3]<+h[b+8>>3]){z=a;break}if(+h[b+24>>3]<+h[y+16>>3]){z=a;break}A=y+4|0;if((c[A>>2]|0)<=0){z=a;break}B=y|0;C=w;D=b;E=u;F=v;G=w|0;H=w+8|0;I=w+16|0;J=w+24|0;K=f|0;L=f+8|0;M=g|0;N=g+8|0;O=j|0;P=l+16|0;Q=m+8|0;R=n+24|0;S=o|0;T=o+8|0;U=p|0;V=p+8|0;W=q|0;X=r+16|0;Y=s+8|0;Z=t+24|0;_=0;a:while(1){$=c[B>>2]|0;aa=$+(_*48|0)|0;ba=d[aa]|d[aa+1|0]<<8|d[aa+2|0]<<16|d[aa+3|0]<<24|0;aa=$+(_*48|0)+4|0;ca=d[aa]|d[aa+1|0]<<8|d[aa+2|0]<<16|d[aa+3|0]<<24|0;aa=$+(_*48|0)+8|0;da=d[aa]|d[aa+1|0]<<8|d[aa+2|0]<<16|d[aa+3|0]<<24|0;aa=$+(_*48|0)+12|0;ea=d[aa]|d[aa+1|0]<<8|d[aa+2|0]<<16|d[aa+3|0]<<24|0;aa=$+(_*48|0)+16|0;fa=(c[k>>2]=d[aa]|d[aa+1|0]<<8|d[aa+2|0]<<16|d[aa+3|0]<<24,c[k+4>>2]=d[aa+4|0]|d[aa+5|0]<<8|d[aa+6|0]<<16|d[aa+7|0]<<24,+h[k>>3]);aa=$+(_*48|0)+24|0;ga=(c[k>>2]=d[aa]|d[aa+1|0]<<8|d[aa+2|0]<<16|d[aa+3|0]<<24,c[k+4>>2]=d[aa+4|0]|d[aa+5|0]<<8|d[aa+6|0]<<16|d[aa+7|0]<<24,+h[k>>3]);aa=$+(_*48|0)+32|0;ha=(c[k>>2]=d[aa]|d[aa+1|0]<<8|d[aa+2|0]<<16|d[aa+3|0]<<24,c[k+4>>2]=d[aa+4|0]|d[aa+5|0]<<8|d[aa+6|0]<<16|d[aa+7|0]<<24,+h[k>>3]);aa=$+(_*48|0)+40|0;ia=(c[k>>2]=d[aa]|d[aa+1|0]<<8|d[aa+2|0]<<16|d[aa+3|0]<<24,c[k+4>>2]=d[aa+4|0]|d[aa+5|0]<<8|d[aa+6|0]<<16|d[aa+7|0]<<24,+h[k>>3]);tF(C|0,D|0,32)|0;if((ca|0)==0){ja=9;break}aa=ba;c[F>>2]=c[aa>>2];c[F+4>>2]=c[aa+4>>2];c[F+8>>2]=c[aa+8>>2];c[F+12>>2]=c[aa+12>>2];if((ca|0)>1){aa=1;do{$=ba+(aa<<4)|0;c[E>>2]=c[$>>2];c[E+4>>2]=c[$+4>>2];c[E+8>>2]=c[$+8>>2];c[E+12>>2]=c[$+12>>2];if((pi(u,v,w)|0)!=-1){ka=1;ja=31;break a}c[F>>2]=c[E>>2];c[F+4>>2]=c[E+4>>2];c[F+8>>2]=c[E+8>>2];c[F+12>>2]=c[E+12>>2];aa=aa+1|0;}while((aa|0)<(ca|0))}do{if((da|0)!=0){la=+h[ba+8>>3];ma=+h[G>>3];na=+h[H>>3];oa=+h[I>>3];pa=+h[J>>3];h[S>>3]=+h[ba>>3];h[T>>3]=la;h[U>>3]=fa;h[V>>3]=ga;ph(q,p,o,1.0,da);if(oa<+h[W>>3]){break}ph(r,p,o,1.0,da);if(+h[X>>3]<ma){break}ph(s,p,o,1.0,da);if(pa<+h[Y>>3]){break}ph(t,p,o,1.0,da);if(+h[Z>>3]>=na){ka=1;ja=31;break a}}}while(0);do{if((ea|0)!=0){da=ca-1|0;ga=+h[ba+(da<<4)+8>>3];fa=+h[G>>3];na=+h[H>>3];pa=+h[I>>3];ma=+h[J>>3];h[K>>3]=+h[ba+(da<<4)>>3];h[L>>3]=ga;h[M>>3]=ha;h[N>>3]=ia;ph(j,g,f,1.0,ea);if(pa<+h[O>>3]){break}ph(l,g,f,1.0,ea);if(+h[P>>3]<fa){break}ph(m,g,f,1.0,ea);if(ma<+h[Q>>3]){break}ph(n,g,f,1.0,ea);if(+h[R>>3]>=na){ka=1;ja=31;break a}}}while(0);ea=_+1|0;if((ea|0)<(c[A>>2]|0)){_=ea}else{ja=24;break}}if((ja|0)==9){cc(110072,125704,1607,170152);return 0}else if((ja|0)==24){z=c[x>>2]|0;break}else if((ja|0)==31){i=e;return ka|0}}}while(0);ja=c[z+96>>2]|0;do{if((ja|0)!=0){ia=+h[ja+24>>3]*.5;ha=+h[ja+32>>3]*.5;na=+h[ja+56>>3];ma=+h[ja+64>>3];if(+h[b+16>>3]<na-ia){break}if(ia+na<+h[b>>3]){break}if(+h[b+24>>3]<ma-ha){break}if(ha+ma<+h[b+8>>3]){break}else{ka=1}i=e;return ka|0}}while(0);ka=0;i=e;return ka|0}function pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;a:do{if((b|0)==0){f=d}else{g=a[b]|0;if(g<<24>>24==0){f=d;break}switch(g<<24>>24|0){case 121:case 89:{g=(pm(b+1|0,113648)|0)==0;h=g?10:0;j=16;break};case 116:case 84:{g=(pm(b+1|0,114392)|0)==0;h=g?10:0;j=16;break};case 111:case 79:{g=(pm(b+1|0,117616)|0)==0;h=g?8:0;j=16;break};case 108:case 76:{g=(pm(b+1|0,120032)|0)==0;h=g?2:0;j=16;break};case 102:case 70:{g=(pm(b+1|0,120800)|0)==0;h=g?2:0;j=16;break};case 110:case 78:{g=b+1|0;if((pm(g,119232)|0)==0){f=0;break a}if((pm(g,118568)|0)==0){f=2;break a}break};case 99:case 67:{g=b+1|0;if((pm(g,123448)|0)==0){f=4;break a}k=(pm(g,121632)|0)==0;h=k?12:0;j=16;break};case 112:case 80:{k=(pm(b+1|0,116696)|0)==0;h=k?6:0;j=16;break};case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:{f=10;break a;break};case 48:{f=2;break a;break};case 115:case 83:{k=(pm(b+1|0,115760)|0)==0;h=k?10:0;j=16;break};default:{}}if((j|0)==16){if((h|0)!=0){f=h;break}}Fv(0,113096,(k=i,i=i+8|0,c[k>>2]=b,k)|0)|0;i=k;f=d}}while(0);i=e;return f|0}function qn(d,f){d=d|0;f=f|0;var g=0,h=0;g=ew(d|0,112576)|0;do{if((g|0)==0){h=f}else{if((a[g]|0)==0){h=0;break}h=pn(g,f)|0}}while(0);f=(c[d+8>>2]|0)+128|0;b[f>>1]=e[f>>1]|h;return}function rn(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;var f=0,g=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0;f=e&1;g=e&2;a:do{if((c|0)==2){i=+h[a>>3];j=+h[a+16>>3]-i;k=+h[a+8>>3];l=+h[a+24>>3]-k;m=k-l;n=i-j;o=k+l;p=i+j}else{j=+h[a>>3];i=+h[a+8>>3];if((c|0)>0){q=j;r=i;s=j;t=i;u=1;v=j;w=i}else{m=i;n=j;o=i;p=j;break}while(1){j=v<s?v:s;i=w<t?w:t;l=v>q?v:q;k=w>r?w:r;if((u|0)>=(c|0)){m=i;n=j;o=k;p=l;break a}x=+h[a+(u<<4)>>3];y=+h[a+(u<<4)+8>>3];q=l;r=k;s=j;t=i;u=u+1|0;v=x;w=y}}}while(0);w=n+(p-n)*.5;v=m+(o-m)*.5;if((f|0)==0){t=o-v;o=d;d=+W(o);s=+V(o);if((g|0)==0){h[b+8>>3]=t*d-v;h[b+24>>3]=-0.0-v-(v-m)*d}else{o=t*d;h[b+8>>3]=v-o;h[b+24>>3]=v+o}o=(p-w)*s;h[b>>3]=w-o;h[b+16>>3]=w+o;return}else{o=w-n;n=v-m;m=+T(o*o+n*n);if((g|0)==0){h[b+8>>3]=-0.0-v}else{h[b+8>>3]=v}h[b>>3]=w;h[b+16>>3]=m*.25;h[b+24>>3]=m;return}}function sn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=a+8|0;a=c[b>>2]|0;d=c[a+8>>2]|0;if((d|0)==0){e=a;f=e+8|0;c[f>>2]=0;return}a=c[d>>2]|0;if((c[d+4>>2]|0)>0){d=0;g=a;while(1){eF(c[g+(d*48|0)>>2]|0);h=d+1|0;i=c[(c[b>>2]|0)+8>>2]|0;j=c[i>>2]|0;if((h|0)<(c[i+4>>2]|0)){d=h;g=j}else{k=j;break}}}else{k=a}eF(k);eF(c[(c[b>>2]|0)+8>>2]|0);e=c[b>>2]|0;f=e+8|0;c[f>>2]=0;return}function tn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=a+8|0;eF(c[(c[b>>2]|0)+144>>2]|0);d=c[b>>2]|0;e=c[d+8>>2]|0;if((e|0)==0){f=d}else{d=c[e>>2]|0;if((c[e+4>>2]|0)>0){e=0;g=d;while(1){eF(c[g+(e*48|0)>>2]|0);h=e+1|0;i=c[(c[b>>2]|0)+8>>2]|0;j=c[i>>2]|0;if((h|0)<(c[i+4>>2]|0)){e=h;g=j}else{k=j;break}}}else{k=d}eF(k);eF(c[(c[b>>2]|0)+8>>2]|0);f=c[b>>2]|0}c[f+8>>2]=0;dk(c[(c[b>>2]|0)+96>>2]|0);dk(c[(c[b>>2]|0)+108>>2]|0);dk(c[(c[b>>2]|0)+100>>2]|0);dk(c[(c[b>>2]|0)+104>>2]|0);Xx(a|0,112056)|0;return}function un(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=a+8|0;d=c[b>>2]|0;e=c[d+132>>2]|0;if((e|0)==0){f=d}else{eF(e);f=c[b>>2]|0}e=c[f+8>>2]|0;if((e|0)==0){g=f}else{Cc[c[(c[e+4>>2]|0)+4>>2]&255](a);g=c[b>>2]|0}dk(c[g+104>>2]|0);dk(c[(c[b>>2]|0)+108>>2]|0);Xx(a|0,111456)|0;return}function vn(a,b){a=a|0;b=b|0;var d=0,e=0.0;d=a+8|0;a=c[d>>2]|0;if(b<<24>>24==0){e=+h[a+32>>3]*72.0*.5;h[a+96>>3]=e;h[(c[d>>2]|0)+88>>3]=e;b=c[d>>2]|0;h[b+80>>3]=+h[b+40>>3]*72.0;return}else{e=+h[a+40>>3]*72.0*.5;h[a+96>>3]=e;h[(c[d>>2]|0)+88>>3]=e;a=c[d>>2]|0;h[a+80>>3]=+h[a+32>>3]*72.0;return}}function wn(){return+(+(yb()|0)/2147483647.0)}function xn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;i=i+8|0;e=d|0;f=a+8|0;a=c[f>>2]|0;if((c[a+172>>2]|0)<1){i=d;return}g=b|0;h=e;j=1;k=a;while(1){a=c[(c[k+176>>2]|0)+(j<<2)>>2]|0;c[e>>2]=$w(a|0)|0;if((Hc[c[g>>2]&63](b,h,512)|0)==0){l=jk(16)|0;c[l+8>>2]=c[e>>2];c[l+12>>2]=a;Hc[c[g>>2]&63](b,l,1)|0}else{Fv(0,110752,(l=i,i=i+8|0,c[l>>2]=c[e>>2],l)|0)|0;i=l}xn(a,b);a=c[f>>2]|0;if((j|0)<(c[a+172>>2]|0)){j=j+1|0;k=a}else{break}}i=d;return}function yn(a,b){a=a|0;b=b|0;var d=0,e=0;d=Hc[c[a>>2]&63](a,b,512)|0;if((d|0)==0){e=0;return e|0}e=c[d+12>>2]|0;return e|0}function zn(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function An(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b|0;f=Hx(e)|0;if((a[(c[b+8>>2]|0)+118|0]|0)==0){g=b;return g|0}zx(d,b,1)|0;b=gb($w(e)|0,58)|0;if((b|0)==0){cc(118576,125704,1203,170336);return 0}e=b+1|0;b=Ax(f,e,0)|0;if((b|0)!=0){g=b;return g|0}b=Ax(f,e,1)|0;e=b|0;Wx(e,111456,304,1)|0;d=Xv(f,1,0)|0;if((d|0)==0){g=b;return g|0}else{h=d}while(1){d=fw(e,h)|0;i=c[h+12>>2]|0;if((d|0)!=(i|0)){hw(e,h,i)|0}i=Xv(f,1,h)|0;if((i|0)==0){g=b;break}else{h=i}}return g|0}function Bn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=i;i=i+104|0;Lv(e,118056)|0;h=g|0;j=c[45212]|0;c[45212]=j+1;nb(h|0,131392,(k=i,i=i+8|0,c[k>>2]=j,k)|0)|0;i=k;Lv(e,h)|0;h=e+4|0;k=c[h>>2]|0;j=e+8|0;if(k>>>0<(c[j>>2]|0)>>>0){l=k}else{Jv(e,1)|0;l=c[h>>2]|0}c[h>>2]=l+1;a[l]=58;l=d|0;Lv(e,$w(l)|0)|0;k=Ix(l)|0;l=c[h>>2]|0;if(l>>>0<(c[j>>2]|0)>>>0){m=l}else{Jv(e,1)|0;m=c[h>>2]|0}a[m]=0;m=c[e>>2]|0;c[h>>2]=m;h=Ax(k,m,1)|0;m=h|0;Wx(m,111456,304,1)|0;a[(c[h+8>>2]|0)+118|0]=1;zx(d,h,1)|0;zx(f,b,1)|0;b=Hx(m)|0;f=c[53614]|0;do{if((f|0)==0){d=Sx(m)|0;if((d|0)==2){n=Wv(b,2,117960,213424)|0;break}else if((d|0)==1){n=Wv(b,1,117960,213424)|0;break}else if((d|0)==0){n=Wv(b,0,117960,213424)|0;break}else{n=0;break}}else{n=f}}while(0);hw(m,n,213424)|0;c[53614]=n;n=Hx(m)|0;f=c[53582]|0;do{if((f|0)==0){b=Sx(m)|0;if((b|0)==2){o=Wv(n,2,117928,213424)|0;break}else if((b|0)==1){o=Wv(n,1,117928,213424)|0;break}else if((b|0)==0){o=Wv(n,0,117928,213424)|0;break}else{o=0;break}}else{o=f}}while(0);hw(m,o,117840)|0;c[53582]=o;o=Hx(m)|0;f=c[53590]|0;do{if((f|0)==0){n=Sx(m)|0;if((n|0)==1){p=Wv(o,1,117624,213424)|0;break}else if((n|0)==2){p=Wv(o,2,117624,213424)|0;break}else if((n|0)==0){p=Wv(o,0,117624,213424)|0;break}else{p=0;break}}else{p=f}}while(0);hw(m,p,117584)|0;c[53590]=p;i=g;return h|0}function Cn(a,b,d){a=a|0;b=b|0;d=d|0;d=jk(24)|0;c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];c[d+16>>2]=c[b+16>>2];c[d+20>>2]=c[b+20>>2];return d|0}function Dn(a,b,c){a=a|0;b=b|0;c=c|0;eF(b);return}function En(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;e=c[b>>2]|0;a=c[d>>2]|0;do{if(e>>>0<a>>>0){f=-1}else{if(e>>>0>a>>>0){f=1;break}g=c[b+4>>2]|0;h=c[d+4>>2]|0;if(g>>>0<h>>>0){f=-1;break}f=g>>>0>h>>>0|0}}while(0);return f|0}function Fn(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ka=0,La=0.0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0;g=i;i=i+264|0;j=g|0;k=g+8|0;l=g+16|0;m=g+24|0;n=g+32|0;o=g+40|0;p=g+48|0;q=g+56|0;r=g+64|0;s=g+72|0;t=g+80|0;u=g+88|0;v=g+96|0;w=g+104|0;x=g+112|0;y=g+120|0;z=g+184|0;if((b|0)==0){A=f;i=g;return A|0}if((f|0)==0){B=fF(1,20)|0;c[B+4>>2]=e>>>0>80>>>0?e:80;C=B}else{C=f}f=C|0;B=c[f>>2]|0;e=c[C+4>>2]|0;if((B|0)==0){D=100;E=fF(100,e)|0}else{F=B+100|0;G=gF(c[C+8>>2]|0,da(F,e)|0)|0;vF(G+(da(e,B)|0)|0,0,e*100|0|0)|0;D=F;E=G}G=y;F=z|0;B=z+8|0;H=B;I=z+16|0;J=z+24|0;K=z+32|0;L=(d|0)==0;M=z+72|0;N=z;O=B;B=d+4|0;P=d+8|0;Q=y|0;R=y+8|0;S=z+8|0;T=d+24|0;U=z+8|0;V=d+40|0;W=d+20|0;X=d+12|0;Y=J;Z=z+40|0;_=d+16|0;$=z+16|0;z=d+28|0;aa=d+32|0;ba=d+36|0;ca=d+44|0;ea=D;D=b;b=E;a:while(1){E=D;while(1){fa=E+1|0;if((Qa(a[E]|0)|0)==0){break}else{E=fa}}b:do{switch(a[E]|0){case 76:{c[F>>2]=6;ga=Jn(fa,O)|0;if((ga|0)==0){ha=125;break a}if(L){ia=ga;break b}c[M>>2]=c[X>>2];ja=ga;ha=121;break};case 112:{c[F>>2]=3;ga=Jn(fa,O)|0;if((ga|0)==0){ha=125;break a}if(L){ia=ga;break b}c[M>>2]=c[B>>2];ja=ga;ha=121;break};case 99:{ga=Ja(fa|0,v|0,10)|0;ka=c[v>>2]|0;la=(ka|0)==(fa|0)?0:ka;if((la|0)==0|(ga|0)<1){ha=125;break a}else{ma=la}do{la=a[ma]|0;na=la<<24>>24==0;ma=ma+1|0}while(la<<24>>24!=45&(na^1));if(na){ha=125;break a}oa=fF(ga+1|0,1)|0;if((ga|0)>0){la=ga;ka=oa;pa=ma;while(1){qa=a[pa]|0;if(qa<<24>>24==0){ha=41;break a}ra=ka+1|0;a[ka]=qa;qa=la-1|0;sa=pa+1|0;if((qa|0)>0){la=qa;ka=ra;pa=sa}else{ta=ra;ua=sa;break}}}else{ta=oa;ua=ma}a[ta]=0;if((In(oa,y)|0)==0){ha=125;break a}if((c[Q>>2]|0)==0){c[F>>2]=9;c[S>>2]=c[R>>2];if(L){ia=ua;break b}c[M>>2]=c[T>>2];ia=ua;break b}else{c[F>>2]=14;tF(U|0,G|0,64)|0;if(L){ia=ua;break b}c[M>>2]=c[V>>2];ia=ua;break b}break};case 83:{c[F>>2]=11;pa=Ja(fa|0,m|0,10)|0;ka=c[m>>2]|0;la=(ka|0)==(fa|0)?0:ka;if((la|0)==0|(pa|0)<1){ha=125;break a}else{va=la}do{la=a[va]|0;wa=la<<24>>24==0;va=va+1|0}while(la<<24>>24!=45&(wa^1));if(wa){ha=125;break a}xa=fF(pa+1|0,1)|0;if((pa|0)>0){la=pa;ka=xa;ga=va;while(1){sa=a[ga]|0;if(sa<<24>>24==0){ha=102;break a}ra=ka+1|0;a[ka]=sa;sa=la-1|0;qa=ga+1|0;if((sa|0)>0){la=sa;ka=ra;ga=qa}else{ya=ra;za=qa;break}}}else{ya=xa;za=va}a[ya]=0;c[S>>2]=xa;if(L){ia=za;break b}c[M>>2]=c[aa>>2];ia=za;break};case 73:{c[F>>2]=12;h[H>>3]=+sF(fa,l);ga=c[l>>2]|0;if((ga|0)==(fa|0)){ha=125;break a}h[I>>3]=+sF(ga,l);ka=c[l>>2]|0;if((ga|0)==(ka|0)){ha=125;break a}h[J>>3]=+sF(ka,l);ga=c[l>>2]|0;if((ka|0)==(ga|0)){ha=125;break a}h[K>>3]=+sF(ga,l);ka=c[l>>2]|0;la=(ga|0)==(ka|0)?0:ka;if((la|0)==0){ha=125;break a}ka=Ja(la|0,k|0,10)|0;ga=c[k>>2]|0;pa=(ga|0)==(la|0)?0:ga;if((pa|0)==0|(ka|0)<1){ha=125;break a}else{Aa=pa}do{pa=a[Aa]|0;Ba=pa<<24>>24==0;Aa=Aa+1|0}while(pa<<24>>24!=45&(Ba^1));if(Ba){ha=125;break a}Ca=fF(ka+1|0,1)|0;if((ka|0)>0){pa=ka;ga=Ca;la=Aa;while(1){qa=a[la]|0;if(qa<<24>>24==0){ha=115;break a}ra=ga+1|0;a[ga]=qa;qa=pa-1|0;sa=la+1|0;if((qa|0)>0){pa=qa;ga=ra;la=sa}else{Da=ra;Ea=sa;break}}}else{Da=Ca;Ea=Aa}a[Da]=0;c[Z>>2]=Ca;if(L){ia=Ea;break b}c[M>>2]=c[ba>>2];ia=Ea;break};case 101:{c[F>>2]=1;h[H>>3]=+sF(fa,w);la=c[w>>2]|0;if((la|0)==(fa|0)){ha=125;break a}h[I>>3]=+sF(la,w);ga=c[w>>2]|0;if((la|0)==(ga|0)){ha=125;break a}h[J>>3]=+sF(ga,w);la=c[w>>2]|0;if((ga|0)==(la|0)){ha=125;break a}h[K>>3]=+sF(la,w);ga=c[w>>2]|0;pa=(la|0)==(ga|0)?0:ga;if((pa|0)==0){ha=125;break a}if(L){ia=pa;break b}c[M>>2]=c[d>>2];ja=pa;ha=121;break};case 67:{pa=Ja(fa|0,u|0,10)|0;ga=c[u>>2]|0;la=(ga|0)==(fa|0)?0:ga;if((la|0)==0|(pa|0)<1){ha=125;break a}else{Fa=la}do{la=a[Fa]|0;Ga=la<<24>>24==0;Fa=Fa+1|0}while(la<<24>>24!=45&(Ga^1));if(Ga){ha=125;break a}Ha=fF(pa+1|0,1)|0;if((pa|0)>0){la=pa;ga=Ha;ka=Fa;while(1){sa=a[ka]|0;if(sa<<24>>24==0){ha=54;break a}ra=ga+1|0;a[ga]=sa;sa=la-1|0;qa=ka+1|0;if((sa|0)>0){la=sa;ga=ra;ka=qa}else{Ia=ra;Ka=qa;break}}}else{Ia=Ha;Ka=Fa}a[Ia]=0;if((In(Ha,y)|0)==0){ha=125;break a}if((c[Q>>2]|0)==0){c[F>>2]=8;c[S>>2]=c[R>>2];if(L){ia=Ka;break b}c[M>>2]=c[W>>2];ia=Ka;break b}else{c[F>>2]=13;tF(U|0,G|0,64)|0;if(L){ia=Ka;break b}c[M>>2]=c[V>>2];ia=Ka;break b}break};case 70:{c[F>>2]=10;La=+sF(fa,o);ka=c[o>>2]|0;if((ka|0)==(fa|0)){ha=125;break a}h[H>>3]=La;if((ka|0)==0){ha=125;break a}ga=Ja(ka|0,n|0,10)|0;la=c[n>>2]|0;pa=(la|0)==(ka|0)?0:la;if((pa|0)==0|(ga|0)<1){ha=125;break a}else{Ma=pa}do{pa=a[Ma]|0;Na=pa<<24>>24==0;Ma=Ma+1|0}while(pa<<24>>24!=45&(Na^1));if(Na){ha=125;break a}Oa=fF(ga+1|0,1)|0;if((ga|0)>0){pa=ga;la=Oa;ka=Ma;while(1){qa=a[ka]|0;if(qa<<24>>24==0){ha=93;break a}ra=la+1|0;a[la]=qa;qa=pa-1|0;sa=ka+1|0;if((qa|0)>0){pa=qa;la=ra;ka=sa}else{Pa=ra;Ra=sa;break}}}else{Pa=Oa;Ra=Ma}a[Pa]=0;c[$>>2]=Oa;if(L){ia=Ra;break b}c[M>>2]=c[z>>2];ia=Ra;break};case 116:{c[F>>2]=15;c[S>>2]=Ja(fa|0,j|0,10)|0;ka=c[j>>2]|0;la=(ka|0)==(fa|0)?0:ka;if((la|0)==0){ha=125;break a}if(L){ia=la;break b}c[M>>2]=c[ca>>2];ja=la;ha=121;break};case 66:{c[F>>2]=5;la=Jn(fa,O)|0;if((la|0)==0){ha=125;break a}if(L){ia=la;break b}c[M>>2]=c[P>>2];ja=la;ha=121;break};case 80:{c[F>>2]=2;la=Jn(fa,O)|0;if((la|0)==0){ha=125;break a}if(L){ia=la;break b}c[M>>2]=c[B>>2];ja=la;ha=121;break};case 0:{break a;break};case 98:{c[F>>2]=4;la=Jn(fa,O)|0;if((la|0)==0){ha=125;break a}if(L){ia=la;break b}c[M>>2]=c[P>>2];ja=la;ha=121;break};case 84:{c[F>>2]=7;La=+sF(fa,t);la=c[t>>2]|0;if((la|0)==(fa|0)){ha=125;break a}h[H>>3]=La;if((la|0)==0){ha=125;break a}La=+sF(la,s);ka=c[s>>2]|0;if((ka|0)==(la|0)){ha=125;break a}h[I>>3]=La;if((ka|0)==0){ha=125;break a}la=Ja(ka|0,r|0,10)|0;pa=c[r>>2]|0;ga=(pa|0)==(ka|0)?0:pa;do{if((la|0)<0){c[Y>>2]=0}else{if((la|0)>0){c[Y>>2]=2;break}else{c[Y>>2]=1;break}}}while(0);if((ga|0)==0){ha=125;break a}La=+sF(ga,q);la=c[q>>2]|0;if((la|0)==(ga|0)){ha=125;break a}h[K>>3]=La;if((la|0)==0){ha=125;break a}pa=Ja(la|0,p|0,10)|0;ka=c[p>>2]|0;sa=(ka|0)==(la|0)?0:ka;if((sa|0)==0|(pa|0)<1){ha=125;break a}else{Sa=sa}do{sa=a[Sa]|0;Ta=sa<<24>>24==0;Sa=Sa+1|0}while(sa<<24>>24!=45&(Ta^1));if(Ta){ha=125;break a}Ua=fF(pa+1|0,1)|0;if((pa|0)>0){ga=pa;sa=Ua;ka=Sa;while(1){la=a[ka]|0;if(la<<24>>24==0){ha=82;break a}ra=sa+1|0;a[sa]=la;la=ga-1|0;qa=ka+1|0;if((la|0)>0){ga=la;sa=ra;ka=qa}else{Va=ra;Wa=qa;break}}}else{Va=Ua;Wa=Sa}a[Va]=0;c[Z>>2]=Ua;if(L){ia=Wa;break b}c[M>>2]=c[_>>2];ia=Wa;break};case 69:{c[F>>2]=0;h[H>>3]=+sF(fa,x);ka=c[x>>2]|0;if((ka|0)==(fa|0)){ha=125;break a}h[I>>3]=+sF(ka,x);sa=c[x>>2]|0;if((ka|0)==(sa|0)){ha=125;break a}h[J>>3]=+sF(sa,x);ka=c[x>>2]|0;if((sa|0)==(ka|0)){ha=125;break a}h[K>>3]=+sF(ka,x);sa=c[x>>2]|0;ga=(ka|0)==(sa|0)?0:sa;if((ga|0)==0){ha=125;break a}if(L){ia=ga;break b}c[M>>2]=c[d>>2];ja=ga;ha=121;break};default:{ha=125;break a}}}while(0);if((ha|0)==121){ha=0;if((ja|0)==0){break}else{ia=ja}}E=c[f>>2]|0;if((E|0)==(ea|0)){ga=ea<<1;sa=gF(b,da(ga,e)|0)|0;ka=da(ea,e)|0;vF(sa+ka|0,0,ka|0)|0;Xa=ga;Ya=sa;Za=c[f>>2]|0}else{Xa=ea;Ya=b;Za=E}tF(Ya+(da(Za,e)|0)|0,N|0,80)|0;c[f>>2]=(c[f>>2]|0)+1;ea=Xa;D=ia;b=Ya}if((ha|0)==41){eF(oa);ha=125}else if((ha|0)==54){eF(Ha);ha=125}else if((ha|0)==82){eF(Ua);ha=125}else if((ha|0)==93){eF(Oa);ha=125}else if((ha|0)==102){eF(xa);ha=125}else if((ha|0)==115){eF(Ca);ha=125}if((ha|0)==125){ha=C+16|0;c[ha>>2]=c[ha>>2]|1}ha=c[f>>2]|0;if((ha|0)==0){eF(b);eF(C);A=0;i=g;return A|0}else{c[C+8>>2]=gF(b,da(ha,e)|0)|0;A=C;i=g;return A|0}return 0}function Gn(a,b,c){a=a|0;b=b|0;c=c|0;return Fn(a,b,c,0)|0}function Hn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;b=c[a+12>>2]|0;if((a|0)==0){return}d=c[a+8>>2]|0;e=a|0;a:do{if((c[e>>2]|0)>0){f=a+4|0;g=(b|0)==0;h=0;while(1){i=da(c[f>>2]|0,h)|0;j=d+i|0;if(!g){Cc[b&255](j)}b:do{switch(c[j>>2]|0){case 13:case 14:{k=c[d+(i+8)>>2]|0;if((k|0)==1){l=d+(i+48)|0;m=d+(i+52)|0;n=c[m>>2]|0;if((c[l>>2]|0)>0){o=0;p=n;while(1){eF(c[p+(o<<3)+4>>2]|0);q=o+1|0;r=c[m>>2]|0;if((q|0)<(c[l>>2]|0)){o=q;p=r}else{s=r;break}}}else{s=n}eF(s);break b}else if((k|0)==2){p=d+(i+64)|0;o=d+(i+68)|0;l=c[o>>2]|0;if((c[p>>2]|0)>0){m=0;r=l;while(1){eF(c[r+(m<<3)+4>>2]|0);q=m+1|0;t=c[o>>2]|0;if((q|0)<(c[p>>2]|0)){m=q;r=t}else{u=t;break}}}else{u=l}eF(u);break b}else{break b}break};case 8:case 9:{eF(c[d+(i+8)>>2]|0);break};case 4:case 5:{eF(c[d+(i+12)>>2]|0);break};case 6:{eF(c[d+(i+12)>>2]|0);break};case 2:case 3:{eF(c[d+(i+12)>>2]|0);break};case 7:{eF(c[d+(i+40)>>2]|0);break};case 10:{eF(c[d+(i+16)>>2]|0);break};case 11:{eF(c[d+(i+8)>>2]|0);break};case 12:{eF(c[d+(i+40)>>2]|0);break};default:{}}}while(0);h=h+1|0;if((h|0)>=(c[e>>2]|0)){break a}}}}while(0);eF(d);eF(a);return}function In(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;e=i;i=i+128|0;f=e|0;j=e+8|0;k=e+16|0;l=e+24|0;m=e+32|0;n=e+40|0;o=e+48|0;p=e+56|0;q=e+64|0;r=e+72|0;s=e+80|0;t=e+88|0;u=e+96|0;v=e+104|0;w=e+112|0;x=e+120|0;y=a[b]|0;if((y|0)==91){z=b+1|0;c[d>>2]=1;A=d+8|0;B=A;C=+sF(z,x);D=c[x>>2]|0;if((D|0)==(z|0)){E=0;i=e;return E|0}h[A>>3]=C;if((D|0)==0){E=0;i=e;return E|0}C=+sF(D,w);A=c[w>>2]|0;if((A|0)==(D|0)){E=0;i=e;return E|0}h[d+16>>3]=C;if((A|0)==0){E=0;i=e;return E|0}C=+sF(A,v);D=c[v>>2]|0;if((D|0)==(A|0)){E=0;i=e;return E|0}h[d+24>>3]=C;if((D|0)==0){E=0;i=e;return E|0}C=+sF(D,u);A=c[u>>2]|0;if((A|0)==(D|0)){E=0;i=e;return E|0}h[d+32>>3]=C;if((A|0)==0){E=0;i=e;return E|0}D=d+40|0;u=Ja(A|0,t|0,10)|0;c[D>>2]=u;v=c[t>>2]|0;t=(v|0)==(A|0)?0:v;if((t|0)==0){E=0;i=e;return E|0}v=fF(u,8)|0;A=v;a:do{if((u|0)>0){w=t;x=0;b:while(1){C=+sF(w,s);F=c[s>>2]|0;if((F|0)==(w|0)|(F|0)==0){G=14;break}g[A+(x<<3)>>2]=C;H=A+(x<<3)+4|0;I=Ja(F|0,r|0,10)|0;J=c[r>>2]|0;K=(J|0)==(F|0)?0:J;if((K|0)==0|(I|0)<1){break}else{L=K}do{K=a[L]|0;M=K<<24>>24==0;L=L+1|0}while(K<<24>>24!=45&(M^1));if(M){break}N=fF(I+1|0,1)|0;if((I|0)>0){K=I;J=N;F=L;while(1){O=a[F]|0;if(O<<24>>24==0){G=21;break b}P=J+1|0;a[J]=O;O=K-1|0;Q=F+1|0;if((O|0)>0){K=O;J=P;F=Q}else{R=P;S=Q;break}}}else{R=N;S=L}a[R]=0;c[H>>2]=N;F=x+1|0;if((F|0)<(c[D>>2]|0)){w=S;x=F}else{break a}}if((G|0)==14){eF(v);E=0;i=e;return E|0}else if((G|0)==21){eF(N)}eF(v);E=0;i=e;return E|0}}while(0);c[B+36>>2]=A;E=z;i=e;return E|0}else if((y|0)==40){z=b+1|0;c[d>>2]=2;C=+sF(z,q);A=c[q>>2]|0;if((A|0)==(z|0)){E=0;i=e;return E|0}h[d+8>>3]=C;if((A|0)==0){E=0;i=e;return E|0}C=+sF(A,p);q=c[p>>2]|0;if((q|0)==(A|0)){E=0;i=e;return E|0}h[d+16>>3]=C;if((q|0)==0){E=0;i=e;return E|0}C=+sF(q,o);A=c[o>>2]|0;if((A|0)==(q|0)){E=0;i=e;return E|0}h[d+24>>3]=C;if((A|0)==0){E=0;i=e;return E|0}C=+sF(A,n);q=c[n>>2]|0;if((q|0)==(A|0)){E=0;i=e;return E|0}h[d+32>>3]=C;if((q|0)==0){E=0;i=e;return E|0}C=+sF(q,m);A=c[m>>2]|0;if((A|0)==(q|0)){E=0;i=e;return E|0}h[d+40>>3]=C;if((A|0)==0){E=0;i=e;return E|0}C=+sF(A,l);q=c[l>>2]|0;if((q|0)==(A|0)){E=0;i=e;return E|0}h[d+48>>3]=C;if((q|0)==0){E=0;i=e;return E|0}A=d+56|0;l=Ja(q|0,k|0,10)|0;c[A>>2]=l;m=c[k>>2]|0;k=(m|0)==(q|0)?0:m;if((k|0)==0){E=0;i=e;return E|0}m=fF(l,8)|0;q=m;c:do{if((l|0)>0){n=k;o=0;d:while(1){C=+sF(n,j);p=c[j>>2]|0;if((p|0)==(n|0)|(p|0)==0){G=41;break}g[q+(o<<3)>>2]=C;B=q+(o<<3)+4|0;v=Ja(p|0,f|0,10)|0;N=c[f>>2]|0;S=(N|0)==(p|0)?0:N;if((S|0)==0|(v|0)<1){break}else{T=S}do{S=a[T]|0;U=S<<24>>24==0;T=T+1|0}while(S<<24>>24!=45&(U^1));if(U){break}V=fF(v+1|0,1)|0;if((v|0)>0){H=v;S=V;N=T;while(1){p=a[N]|0;if(p<<24>>24==0){G=48;break d}D=S+1|0;a[S]=p;p=H-1|0;R=N+1|0;if((p|0)>0){H=p;S=D;N=R}else{W=D;X=R;break}}}else{W=V;X=T}a[W]=0;c[B>>2]=V;N=o+1|0;if((N|0)<(c[A>>2]|0)){n=X;o=N}else{break c}}if((G|0)==41){eF(m);E=0;i=e;return E|0}else if((G|0)==48){eF(V)}eF(m);E=0;i=e;return E|0}}while(0);c[d+60>>2]=q;E=z;i=e;return E|0}else if((y|0)==35|(y|0)==47){c[d>>2]=0;c[d+8>>2]=b;E=b;i=e;return E|0}else{if((tb(y|0)|0)==0){E=0;i=e;return E|0}c[d>>2]=0;c[d+8>>2]=b;E=b;i=e;return E|0}return 0}function Jn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=i;i=i+16|0;e=d|0;f=d+8|0;g=Ja(a|0,e|0,10)|0;j=c[e>>2]|0;e=(j|0)==(a|0)?0:j;if((e|0)==0){k=0;i=d;return k|0}j=fF(g,24)|0;a=j;l=b|0;c[l>>2]=g;a:do{if((g|0)>0){m=0;n=e;o=a;while(1){h[o>>3]=+sF(n,f);p=c[f>>2]|0;if((n|0)==(p|0)){q=4;break}h[o+8>>3]=+sF(p,f);r=c[f>>2]|0;if((p|0)==(r|0)){q=6;break}h[o+16>>3]=0.0;p=m+1|0;if((p|0)<(c[l>>2]|0)){m=p;n=r;o=o+24|0}else{s=r;break a}}if((q|0)==4){eF(j);k=0;i=d;return k|0}else if((q|0)==6){eF(j);k=0;i=d;return k|0}}else{s=e}}while(0);c[b+4>>2]=a;k=s;i=d;return k|0}function Kn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;Vo(a);b=a;d=c[b>>2]&3;e=a-32|0;f=a+32|0;g=So(c[((d|0)==2?a:e)+28>>2]|0,c[((d|0)==3?a:f)+28>>2]|0)|0;if((g|0)==0){d=c[b>>2]&3;Zo(c[((d|0)==2?a:e)+28>>2]|0,c[((d|0)==3?a:f)+28>>2]|0,a)|0;return}else{ep(a,g);return}}function Ln(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=b+8|0;b=c[d>>2]|0;e=b+204|0;if((c[e+4>>2]|0)>0){f=0;g=b;h=e}else{return}while(1){c[g+180>>2]=c[(c[h>>2]|0)+(f<<2)>>2];e=c[d>>2]|0;b=c[e+180>>2]|0;do{if((b|0)==0){i=e}else{j=b;do{k=j+8|0;a[(c[k>>2]|0)+157|0]=0;j=c[(c[k>>2]|0)+164>>2]|0;}while((j|0)!=0);j=c[d>>2]|0;k=c[j+180>>2]|0;if((k|0)==0){i=j;break}else{l=k}do{Mn(l);l=c[(c[l+8>>2]|0)+164>>2]|0;}while((l|0)!=0);i=c[d>>2]|0}}while(0);b=f+1|0;e=i+204|0;if((b|0)<(c[e+4>>2]|0)){f=b;g=i;h=e}else{break}}return}function Mn(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=b+8|0;b=(c[d>>2]|0)+157|0;if((a[b]|0)!=0){return}a[b]=1;a[(c[d>>2]|0)+158|0]=1;b=c[d>>2]|0;e=c[c[b+180>>2]>>2]|0;if((e|0)==0){f=b}else{b=0;g=e;while(1){e=g;h=g-32|0;i=c[((c[e>>2]&3|0)==2?g:h)+28>>2]|0;j=c[i+8>>2]|0;do{if((a[j+158|0]|0)==0){if((a[j+157|0]|0)!=0){k=b;break}Mn(i);k=b}else{Vo(g);l=c[e>>2]&3;m=g+32|0;n=So(c[((l|0)==2?g:h)+28>>2]|0,c[((l|0)==3?g:m)+28>>2]|0)|0;if((n|0)==0){l=c[e>>2]&3;Zo(c[((l|0)==2?g:h)+28>>2]|0,c[((l|0)==3?g:m)+28>>2]|0,g)|0}else{ep(g,n)}k=b-1|0}}while(0);h=k+1|0;e=c[d>>2]|0;i=c[(c[e+180>>2]|0)+(h<<2)>>2]|0;if((i|0)==0){f=e;break}else{b=h;g=i}}}a[f+158|0]=0;return}function Nn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=ux(a)|0;if((b|0)==0){d=0;return d|0}else{e=0;f=b}while(1){b=mw(a,f)|0;if((b|0)==0){g=e}else{h=e;i=b;while(1){b=c[i>>2]&3;j=c[(c[(c[((b|0)==2?i:i-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0;k=c[(c[(c[((b|0)==3?i:i+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0;if((j|0)==(k|0)){l=h}else{b=j-k|0;l=h-1+((b|0)>-1?b:-b|0)|0}b=ow(a,i)|0;if((b|0)==0){g=l;break}else{h=l;i=b}}}i=vx(a,f)|0;if((i|0)==0){d=g;break}else{e=g;f=i}}return d|0}function On(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=ux(b)|0;if((d|0)==0){return}else{e=d}do{d=e+8|0;f=(c[d>>2]|0)+172|0;if((c[f+4>>2]|0)>0){g=0;h=f;do{a[(c[(c[(c[h>>2]|0)+(g<<2)>>2]|0)+8>>2]|0)+112|0]=0;g=g+1|0;h=(c[d>>2]|0)+172|0;}while((g|0)<(c[h+4>>2]|0))}e=vx(b,e)|0;}while((e|0)!=0);return}function Pn(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,C=0.0,D=0.0,E=0,F=0.0,G=0,H=0,I=0,J=0.0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0.0,qa=0.0,ra=0.0,sa=0;e=i;f=c[d+24>>2]|0;c[44276]=kk((Lw(b)|0)*24|0)|0;c[44318]=0;g=ux(b)|0;if((g|0)!=0){j=g;do{c[(c[j+8>>2]|0)+120>>2]=-1;j=vx(b,j)|0;}while((j|0)!=0)}j=ux(b)|0;if((j|0)!=0){g=j;do{j=g+8|0;do{if((c[(c[j>>2]|0)+216>>2]|0)==0){k=jk(4)|0;c[(c[44276]|0)+((c[44318]|0)*24|0)>>2]=k;c[c[(c[44276]|0)+((c[44318]|0)*24|0)>>2]>>2]=g;c[(c[44276]|0)+((c[44318]|0)*24|0)+4>>2]=1;k=c[44318]|0;l=c[44276]|0;h[l+(k*24|0)+8>>3]=+h[(c[j>>2]|0)+32>>3];h[l+(k*24|0)+16>>3]=+h[(c[j>>2]|0)+40>>3];c[(c[j>>2]|0)+120>>2]=k;c[44318]=(c[44318]|0)+1}else{k=Lm(g)|0;l=k+8|0;m=c[l>>2]|0;n=c[m+120>>2]|0;if((n|0)>-1){p=(c[44276]|0)+(n*24|0)+4|0;q=c[p>>2]|0;c[p>>2]=q+1;c[(c[(c[44276]|0)+(n*24|0)>>2]|0)+(q<<2)>>2]=g;q=c[44276]|0;p=q+(n*24|0)+8|0;h[p>>3]=+h[(c[j>>2]|0)+32>>3]+ +h[p>>3];p=q+(n*24|0)+16|0;r=+h[p>>3];s=+h[(c[j>>2]|0)+40>>3];h[p>>3]=r<s?s:r;c[(c[j>>2]|0)+120>>2]=n;break}n=jk(c[m+216>>2]<<2)|0;c[(c[44276]|0)+((c[44318]|0)*24|0)>>2]=n;c[c[(c[44276]|0)+((c[44318]|0)*24|0)>>2]>>2]=k;n=c[44318]|0;m=c[44276]|0;if((k|0)==(g|0)){c[m+(n*24|0)+4>>2]=1;k=c[44318]|0;p=c[44276]|0;h[p+(k*24|0)+8>>3]=+h[(c[l>>2]|0)+32>>3];h[p+(k*24|0)+16>>3]=+h[(c[l>>2]|0)+40>>3];t=k}else{c[(c[m+(n*24|0)>>2]|0)+4>>2]=g;c[(c[44276]|0)+((c[44318]|0)*24|0)+4>>2]=2;n=c[44318]|0;m=c[44276]|0;h[m+(n*24|0)+8>>3]=+h[(c[l>>2]|0)+32>>3]+ +h[(c[j>>2]|0)+32>>3];r=+h[(c[l>>2]|0)+40>>3];s=+h[(c[j>>2]|0)+40>>3];h[m+(n*24|0)+16>>3]=r<s?s:r;t=n}c[(c[l>>2]|0)+120>>2]=t;c[(c[j>>2]|0)+120>>2]=c[44318];c[44318]=(c[44318]|0)+1}}while(0);g=vx(b,g)|0;}while((g|0)!=0)}g=(f|0)==-1;a:do{if((f|0)>0|g){t=b+8|0;j=d+8|0;l=d|0;n=g^1;m=c[o>>2]|0;k=0;r=1.7976931348623157e+308;while(1){p=ux(b)|0;if((p|0)!=0){q=p;do{c[(c[q+8>>2]|0)+232>>2]=0;q=vx(b,q)|0;}while((q|0)!=0)}Yp(b);Qn(b);q=c[44320]|0;p=c[t>>2]|0;s=+(da(c[p+240>>2]|0,q-1|0)|0);if((q|0)>0){u=c[44394]|0;v=c[p+236>>2]|0;w=0.0;x=s;p=0;while(1){y=+h[u+(p*40|0)+24>>3]+ +(da(c[u+(p*40|0)+16>>2]|0,v)|0);z=w<y?y:w;y=x+ +h[u+(p*40|0)+32>>3];A=p+1|0;if((A|0)<(q|0)){w=z;x=y;p=A}else{B=z;C=y;break}}}else{B=0.0;C=s}x=B/C;h[j>>3]=x;if((a[213992]|0)==0){D=x}else{gc(m|0,121560,(p=i,i=i+8|0,h[p>>3]=x,p)|0)|0;i=p;D=+h[j>>3]}if(D<=+h[l>>3]){break}if(!(r>D|n)){break}c[43750]=jk((Lw(b)|0)<<2)|0;if((Lw(b)|0)>0){p=0;do{c[(c[43750]|0)+(p<<2)>>2]=p;p=p+1|0;}while((p|0)<(Lw(b)|0))}Qn(b);p=c[43750]|0;Jb(p|0,Lw(b)|0,4,166);p=c[44320]|0;q=c[43750]|0;u=c[44394]|0;v=0;while(1){if((v|0)>=(p|0)){E=0;F=0.0;break}G=c[q+(v<<2)>>2]|0;H=v+1|0;if((c[u+(G*40|0)+12>>2]|0)<2){v=H}else{I=30;break}}do{if((I|0)==30){I=0;if((p|0)<=(H|0)){E=G;F=0.0;break}E=G;F=+h[u+((c[q+(H<<2)>>2]|0)*40|0)+24>>3]}}while(0);do{if((v|0)!=(p|0)){Jb(c[u+(E*40|0)+4>>2]|0,c[u+(E*40|0)+12>>2]|0,4,104);q=c[44394]|0;s=+h[q+(E*40|0)+24>>3];if(F>s*.25){if(F<s*3.0*.25){J=F}else{I=35}}else{I=35}if((I|0)==35){I=0;J=s*.5}A=c[q+(E*40|0)+12>>2]|0;if((A|0)>0){K=0.0;L=0;M=0;N=0;O=0;P=q}else{break}while(1){q=c[P+(E*40|0)+8>>2]|0;do{if((c[q+(O<<2)>>2]|0)==0){Q=c[(c[P+(E*40|0)+4>>2]|0)+(O<<2)>>2]|0;R=Q+8|0;s=+h[R>>3]*72.0;x=K>0.0?+(c[(c[t>>2]|0)+236>>2]|0):0.0;S=(L|0)==0;if(K+s+x<=J|S){T=N;U=S?Q:M;V=S?1:L;W=K+(s+x);X=P;break}S=M+4|0;Y=c[S>>2]|0;if((Y|0)>0){Z=Q+4|0;_=M|0;$=Q|0;Q=0;aa=c[Z>>2]|0;ba=Y;while(1){if((aa|0)>0){Y=0;do{a[(c[(Zo(c[(c[_>>2]|0)+(Q<<2)>>2]|0,c[(c[$>>2]|0)+(Y<<2)>>2]|0,0)|0)+8>>2]|0)+112|0]=1;Y=Y+1|0;ca=c[Z>>2]|0;}while((Y|0)<(ca|0));ea=ca;fa=c[S>>2]|0}else{ea=aa;fa=ba}Y=Q+1|0;if((Y|0)<(fa|0)){Q=Y;aa=ea;ba=fa}else{break}}ga=c[(c[44394]|0)+(E*40|0)+8>>2]|0}else{ga=q}c[ga+(O<<2)>>2]=1;ba=(c[44394]|0)+(E*40|0)+12|0;c[ba>>2]=(c[ba>>2]|0)-1;ba=(c[44394]|0)+(E*40|0)+16|0;c[ba>>2]=(c[ba>>2]|0)+1;ba=c[44394]|0;aa=ba+(E*40|0)+24|0;h[aa>>3]=+h[aa>>3]-(+h[R>>3]*72.0+ +(c[(c[t>>2]|0)+236>>2]|0));T=N;U=M;V=L;W=K;X=ba}else{T=N+1|0;U=M;V=L;W=K;X=P}}while(0);q=O+1|0;if((q|0)<(T+A|0)){K=W;L=V;M=U;N=T;O=q;P=X}else{break}}}}while(0);u=k+1|0;if((u|0)<(f|0)|g){k=u;r=D}else{break a}}t=d+20|0;c[d+16>>2]=c[t>>2];c[t>>2]=k}}while(0);Yp(b);Qn(b);g=c[44320]|0;if((g|0)>0){f=0;X=0;P=0;O=c[44394]|0;T=g;while(1){g=O+(P*40|0)|0;N=c[O+(P*40|0)+12>>2]|0;U=(X|0)==0;do{if((N|0)==0){if(U){ha=c[g>>2]|0}else{ha=f}ia=X+1|0;ja=ha;ka=O;la=T}else{if(U){ia=0;ja=f;ka=O;la=T;break}if((c[g>>2]|0)>(f|0)&(N|0)>0){ma=0;na=O}else{ia=X;ja=f;ka=O;la=T;break}while(1){M=c[(c[na+(P*40|0)+4>>2]|0)+(ma<<2)>>2]|0;V=M+4|0;if((c[V>>2]|0)>0){L=M|0;M=0;do{E=(c[(c[(c[L>>2]|0)+(M<<2)>>2]|0)+8>>2]|0)+232|0;c[E>>2]=(c[E>>2]|0)-X;M=M+1|0;}while((M|0)<(c[V>>2]|0));oa=c[44394]|0}else{oa=na}V=ma+1|0;if((V|0)<(c[oa+(P*40|0)+12>>2]|0)){ma=V;na=oa}else{break}}ia=X;ja=f;ka=oa;la=c[44320]|0}}while(0);N=P+1|0;if((N|0)<(la|0)){f=ja;X=ia;P=N;O=ka;T=la}else{break}}}Qn(b);la=c[44320]|0;T=c[b+8>>2]|0;D=+(da(c[T+240>>2]|0,la-1|0)|0);if((la|0)<=0){pa=0.0;qa=D;ra=pa/qa;sa=d+8|0;h[sa>>3]=ra;i=e;return}b=c[44394]|0;ka=c[T+236>>2]|0;W=0.0;K=D;T=0;while(1){D=+h[b+(T*40|0)+24>>3]+ +(da(c[b+(T*40|0)+16>>2]|0,ka)|0);J=W<D?D:W;D=K+ +h[b+(T*40|0)+32>>3];O=T+1|0;if((O|0)<(la|0)){W=J;K=D;T=O}else{pa=J;qa=D;break}}ra=pa/qa;sa=d+8|0;h[sa>>3]=ra;i=e;return}function Qn(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0;c[44320]=0;b=c[44394]|0;if((b|0)!=0){if((c[44318]|0)>0){d=0;e=b;while(1){f=c[e+(d*40|0)+4>>2]|0;if((f|0)==0){g=e}else{eF(f);g=c[44394]|0}f=c[g+(d*40|0)+8>>2]|0;if((f|0)==0){i=g}else{eF(f);i=c[44394]|0}f=d+1|0;if((f|0)<(c[44318]|0)){d=f;e=i}else{j=i;break}}}else{j=b}eF(j)}c[44394]=jk((c[44318]|0)*40|0)|0;j=c[44318]|0;if((j|0)>0){b=0;i=j;while(1){j=jk(i<<2)|0;c[(c[44394]|0)+(b*40|0)+4>>2]=j;j=jk(c[44318]<<2)|0;c[(c[44394]|0)+(b*40|0)+8>>2]=j;c[(c[44394]|0)+(b*40|0)>>2]=b;c[(c[44394]|0)+(b*40|0)+12>>2]=0;c[(c[44394]|0)+(b*40|0)+16>>2]=0;j=b+1|0;vF((c[44394]|0)+(b*40|0)+24|0,0,16)|0;e=c[44318]|0;if((j|0)<(e|0)){b=j;i=e}else{break}}}i=ux(a)|0;if((i|0)!=0){b=i;do{i=mw(a,b)|0;if((i|0)!=0){e=i;do{i=e;j=c[i>>2]&3;d=(c[(c[(c[((j|0)==3?e:e+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)+1|0;g=e-32|0;if((d|0)<(c[(c[(c[((j|0)==2?e:g)+28>>2]|0)+8>>2]|0)+232>>2]|0)){j=d;do{d=(c[44394]|0)+(j*40|0)+16|0;c[d>>2]=(c[d>>2]|0)+1;j=j+1|0;}while((j|0)<(c[(c[(c[((c[i>>2]&3|0)==2?e:g)+28>>2]|0)+8>>2]|0)+232>>2]|0))}e=ow(a,e)|0;}while((e|0)!=0)}b=vx(a,b)|0;}while((b|0)!=0)}if((c[44318]|0)<=0){return}b=a+8|0;a=0;do{e=c[44276]|0;g=(c[c[e+(a*24|0)>>2]>>2]|0)+8|0;i=c[(c[g>>2]|0)+232>>2]|0;if((i|0)<(c[44320]|0)){k=i}else{c[44320]=i+1;k=c[(c[g>>2]|0)+232>>2]|0}i=c[44394]|0;j=i+(k*40|0)+24|0;l=+h[j>>3];h[j>>3]=l+(+h[e+(a*24|0)+8>>3]*72.0+(l>0.0?+(c[(c[b>>2]|0)+236>>2]|0):0.0));j=c[(c[g>>2]|0)+232>>2]|0;d=i+(j*40|0)+32|0;l=+h[e+(a*24|0)+16>>3]*72.0;if(+h[d>>3]<l){h[d>>3]=l;m=c[(c[g>>2]|0)+232>>2]|0}else{m=j}c[(c[i+(m*40|0)+4>>2]|0)+(c[i+(m*40|0)+12>>2]<<2)>>2]=e+(a*24|0);e=(c[44394]|0)+((c[(c[g>>2]|0)+232>>2]|0)*40|0)+12|0;c[e>>2]=(c[e>>2]|0)+1;a=a+1|0;}while((a|0)<(c[44318]|0));return}function Rn(a){a=a|0;var b=0,d=0;b=ux(a)|0;if((b|0)==0){return}else{d=b}do{c[(c[d+8>>2]|0)+216>>2]=0;d=vx(a,d)|0;}while((d|0)!=0);return}function Sn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;e=d+8|0;c[e>>2]=5;f=ew(a|0,158384)|0;do{if((f|0)!=0){a=ac(f|0,128368,(g=i,i=i+16|0,c[g>>2]=d,c[g+8>>2]=e,g)|0)|0;i=g;if((a|0)<1){break}Fv(0,115472,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0)|0;i=g;c[b+24>>2]=0;c[b+32>>2]=0;i=d;return 0}}while(0);c[b+24>>2]=0;c[b+32>>2]=0;i=d;return 0}function Tn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=b;b=c[a>>2]|0;a=b+4|0;if((c[a>>2]|0)>0){e=b|0;b=0;f=0;while(1){g=c[(c[e>>2]|0)+(f<<2)>>2]|0;h=Hx(g|0)|0;i=mw(h,g)|0;if((i|0)==0){j=b}else{g=b;k=i;while(1){i=g+1|0;l=ow(h,k)|0;if((l|0)==0){j=i;break}else{g=i;k=l}}}k=f+1|0;if((k|0)<(c[a>>2]|0)){b=j;f=k}else{m=j;break}}}else{m=0}j=c[d>>2]|0;d=j+4|0;if((c[d>>2]|0)<=0){n=0;o=(n|0)<(m|0);p=o&1;q=(n|0)>(m|0);r=q&1;s=p-r|0;return s|0}f=j|0;j=0;b=0;while(1){a=c[(c[f>>2]|0)+(b<<2)>>2]|0;e=Hx(a|0)|0;k=mw(e,a)|0;if((k|0)==0){t=j}else{a=j;g=k;while(1){k=a+1|0;h=ow(e,g)|0;if((h|0)==0){t=k;break}else{a=k;g=h}}}g=b+1|0;if((g|0)<(c[d>>2]|0)){j=t;b=g}else{n=t;break}}o=(n|0)<(m|0);p=o&1;q=(n|0)>(m|0);r=q&1;s=p-r|0;return s|0}function Un(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0;d=c[44394]|0;e=+h[d+((c[b>>2]|0)*40|0)+24>>3];f=+h[d+((c[a>>2]|0)*40|0)+24>>3];return(e>f)-(e<f)|0}function Vn(b){b=b|0;var d=0,e=0,f=0;d=c[53812]|0;do{if((d|0)!=0){e=fw(b|0,d)|0;if((e|0)==0){break}if((a[e]|0)==0){break}if((Km(e)|0)<<24>>24==0){f=1}else{break}return f|0}}while(0);f=0;return f|0}function Wn(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;co(b);d=ux(b)|0;if((d|0)==0){return}else{f=d}do{d=mw(b,f)|0;if((d|0)!=0){g=d;do{d=g+8|0;a:do{if((c[(c[d>>2]|0)+172>>2]|0)==0){h=c[53812]|0;do{if((h|0)!=0){i=fw(g|0,h)|0;if((i|0)==0){break}if((a[i]|0)==0){break}if((Km(i)|0)<<24>>24==0){break a}}}while(0);h=g;i=g+32|0;j=Lm(c[((c[h>>2]&3|0)==3?g:i)+28>>2]|0)|0;k=g-32|0;l=Lm(c[((c[h>>2]&3|0)==2?g:k)+28>>2]|0)|0;if((j|0)==(l|0)){break}do{if((c[(c[j+8>>2]|0)+212>>2]|0)==0){if((c[(c[l+8>>2]|0)+212>>2]|0)!=0){break}m=So(j,l)|0;if((m|0)==0){Zo(j,l,g)|0;break a}else{ep(g,m);break a}}}while(0);l=c[h>>2]&3;j=c[((l|0)==3?g:i)+28>>2]|0;m=c[((l|0)==2?g:k)+28>>2]|0;l=c[j+8>>2]|0;n=c[l+212>>2]|0;if((n|0)==0){o=0}else{o=(c[l+232>>2]|0)-(c[(c[(c[(c[n+8>>2]|0)+252>>2]|0)+8>>2]|0)+232>>2]|0)|0}n=c[m+8>>2]|0;l=c[n+212>>2]|0;if((l|0)==0){p=0}else{p=(c[n+232>>2]|0)-(c[(c[(c[(c[l+8>>2]|0)+252>>2]|0)+8>>2]|0)+232>>2]|0)|0}l=(e[(c[d>>2]|0)+170>>1]|0)+(o-p)|0;if((l|0)>0){q=0.0;r=+(l|0)}else{q=+(-l|0);r=0.0}l=bp(b)|0;a[(c[l+8>>2]|0)+156|0]=2;n=Lm(j)|0;j=Lm(m)|0;m=Jp(l,n,q,(c[(c[d>>2]|0)+156>>2]|0)*10|0)|0;n=g;c[(c[(Jp(l,j,r,c[(c[d>>2]|0)+156>>2]|0)|0)+8>>2]|0)+116>>2]=n;c[(c[m+8>>2]|0)+116>>2]=n}}while(0);g=ow(b,g)|0;}while((g|0)!=0)}f=vx(b,f)|0;}while((f|0)!=0);return}function Xn(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0;g=c[d>>2]&3;i=c[(c[(c[((g|0)==3?d:d+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0;j=c[(c[(c[((g|0)==2?d:d-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0;g=(i|0)>(j|0)?i:j;j=d+8|0;d=(c[j>>2]|0)+172|0;if((c[d>>2]|0)!=0){cc(108464,148536,149,170280)}c[d>>2]=e;d=a+8|0;if((f|0)==0){f=e;while(1){a=f+8|0;i=(c[a>>2]|0)+154|0;b[i>>1]=(b[i>>1]|0)+(b[(c[j>>2]|0)+154>>1]|0);i=(c[a>>2]|0)+156|0;c[i>>2]=(c[i>>2]|0)+(c[(c[j>>2]|0)+156>>2]|0);i=f;a=f-32|0;k=(c[((c[i>>2]&3|0)==2?f:a)+28>>2]|0)+8|0;l=c[k>>2]|0;if((c[l+232>>2]|0)==(g|0)){m=8;break}n=+((c[(c[d>>2]|0)+236>>2]|0)/2|0|0);o=l+88|0;h[o>>3]=n+ +h[o>>3];o=(c[k>>2]|0)+96|0;h[o>>3]=n+ +h[o>>3];o=c[c[(c[(c[((c[i>>2]&3|0)==2?f:a)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;if((o|0)==0){m=8;break}else{f=o}}if((m|0)==8){return}}else{f=e;while(1){e=f+8|0;o=(c[e>>2]|0)+168|0;b[o>>1]=(b[o>>1]|0)+(b[(c[j>>2]|0)+168>>1]|0);o=(c[e>>2]|0)+154|0;b[o>>1]=(b[o>>1]|0)+(b[(c[j>>2]|0)+154>>1]|0);o=(c[e>>2]|0)+156|0;c[o>>2]=(c[o>>2]|0)+(c[(c[j>>2]|0)+156>>2]|0);o=f;e=f-32|0;a=(c[((c[o>>2]&3|0)==2?f:e)+28>>2]|0)+8|0;i=c[a>>2]|0;if((c[i+232>>2]|0)==(g|0)){m=8;break}n=+((c[(c[d>>2]|0)+236>>2]|0)/2|0|0);k=i+88|0;h[k>>3]=n+ +h[k>>3];k=(c[a>>2]|0)+96|0;h[k>>3]=n+ +h[k>>3];k=c[c[(c[(c[((c[o>>2]&3|0)==2?f:e)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;if((k|0)==0){m=8;break}else{f=k}}if((m|0)==8){return}}}function Yn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;do{if(!((a|0)==0|(b|0)==0)){d=c[a>>2]&3;e=c[b>>2]&3;if((c[((d|0)==3?a:a+32|0)+28>>2]|0)!=(c[((e|0)==3?b:b+32|0)+28>>2]|0)){break}if((c[((d|0)==2?a:a-32|0)+28>>2]|0)!=(c[((e|0)==2?b:b-32|0)+28>>2]|0)){break}if((c[(c[a+8>>2]|0)+96>>2]|0)!=(c[(c[b+8>>2]|0)+96>>2]|0)){break}if((Kp(a,b)|0)==0){break}else{f=1}return f|0}}while(0);f=0;return f|0}function Zn(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=b+8|0;c[(c[d>>2]|0)+180>>2]=0;c[(c[d>>2]|0)+220>>2]=0;co(b);e=c[d>>2]|0;if((c[e+172>>2]|0)>=1){f=1;g=e;while(1){eo(b,c[(c[g+176>>2]|0)+(f<<2)>>2]|0);e=c[d>>2]|0;if((f|0)<(c[e+172>>2]|0)){f=f+1|0;g=e}else{break}}}g=ux(b)|0;if((g|0)!=0){f=g;do{g=mw(b,f)|0;if((g|0)!=0){e=g;do{g=e;h=c[g>>2]|0;i=(c[(c[((h&3|0)==2?e:e-32|0)+28>>2]|0)+8>>2]|0)+160|0;j=a[i]|0;if(j<<24>>24<3){a[i]=j+1;k=c[g>>2]|0}else{k=h}h=(c[(c[((k&3|0)==3?e:e+32|0)+28>>2]|0)+8>>2]|0)+160|0;g=a[h]|0;if(g<<24>>24<3){a[h]=g+1}e=ow(b,e)|0;}while((e|0)!=0)}f=vx(b,f)|0;}while((f|0)!=0)}f=ux(b)|0;if((f|0)!=0){k=f;do{do{if((c[(c[k+8>>2]|0)+212>>2]|0)==0){if((k|0)!=(Lm(k)|0)){break}_o(b,k);f=(c[d>>2]|0)+220|0;c[f>>2]=(c[f>>2]|0)+1}}while(0);f=mw(b,k)|0;if((f|0)!=0){e=f;f=0;while(1){g=e+8|0;h=c[g>>2]|0;a:do{if((c[h+172>>2]|0)==0){j=e;i=c[j>>2]|0;l=i&3;m=e+32|0;n=c[((l|0)==3?e:m)+28>>2]|0;o=c[n+8>>2]|0;do{if((a[o+159|0]|0)!=7){p=e-32|0;q=c[((l|0)==2?e:p)+28>>2]|0;r=c[q+8>>2]|0;if((a[r+159|0]|0)==7){break}do{if((f|0)==0){s=i}else{t=c[f>>2]&3;if((n|0)!=(c[((t|0)==3?f:f+32|0)+28>>2]|0)){s=i;break}if((q|0)!=(c[((t|0)==2?f:f-32|0)+28>>2]|0)){s=i;break}if((c[o+232>>2]|0)==(c[r+232>>2]|0)){ep(e,f);Wo(e);u=f;break a}if((c[h+96>>2]|0)!=0){s=i;break}t=f+8|0;if((c[(c[t>>2]|0)+96>>2]|0)!=0){s=i;break}if((Kp(e,f)|0)==0){s=c[j>>2]|0;break}if((a[215376]|0)==0){Xn(b,e,c[(c[t>>2]|0)+172>>2]|0,1);Wo(e);u=f;break a}else{a[(c[g>>2]|0)+112|0]=6;u=f;break a}}}while(0);r=s&3;q=c[((r|0)==3?e:m)+28>>2]|0;if((q|0)==(c[((r|0)==2?e:p)+28>>2]|0)){Wo(e);u=e;break a}r=Lm(q)|0;q=Lm(c[((c[j>>2]&3|0)==2?e:p)+28>>2]|0)|0;t=c[j>>2]&3;if((c[((t|0)==3?e:m)+28>>2]|0)!=(r|0)){u=f;break a}if((c[((t|0)==2?e:p)+28>>2]|0)!=(q|0)){u=f;break a}t=c[(c[r+8>>2]|0)+232>>2]|0;v=c[(c[q+8>>2]|0)+232>>2]|0;if((t|0)==(v|0)){cp(b,e);u=e;break a}if((v|0)>(t|0)){_n(b,r,q,e);u=e;break a}t=uw(b,q,r,0,0)|0;do{if((t|0)!=0){r=c[t>>2]&3;q=c[((r|0)==2?t:t-32|0)+28>>2]|0;if((q|0)==(c[((c[j>>2]&3|0)==2?e:p)+28>>2]|0)){break}v=t+8|0;if((c[(c[v>>2]|0)+172>>2]|0)==0){_n(b,c[((r|0)==3?t:t+32|0)+28>>2]|0,q,t)}if((c[(c[g>>2]|0)+96>>2]|0)!=0){break}if((c[(c[v>>2]|0)+96>>2]|0)!=0){break}if((Kp(e,t)|0)==0){break}if((a[215376]|0)==0){Wo(e);Xn(b,e,c[(c[v>>2]|0)+172>>2]|0,1);u=f;break a}else{a[(c[g>>2]|0)+112|0]=6;a[(c[v>>2]|0)+153|0]=1;u=f;break a}}}while(0);t=c[j>>2]&3;_n(b,c[((t|0)==2?e:p)+28>>2]|0,c[((t|0)==3?e:m)+28>>2]|0,e);u=e;break a}}while(0);do{if((f|0)==0){w=i}else{o=c[f>>2]&3;if((c[((o|0)==3?f:f+32|0)+28>>2]|0)!=(n|0)){w=i;break}t=e-32|0;if((c[((o|0)==2?f:f-32|0)+28>>2]|0)!=(c[((l|0)==2?e:t)+28>>2]|0)){w=i;break}o=f+8|0;if((c[(c[o>>2]|0)+96>>2]|0)!=(c[h+96>>2]|0)){w=i;break}if((Kp(f,e)|0)==0){w=c[j>>2]|0;break}v=c[(c[o>>2]|0)+172>>2]|0;if((v|0)!=0){Xn(b,e,v,0);Wo(e);u=f;break a}v=c[j>>2]&3;if((c[(c[(c[((v|0)==3?e:m)+28>>2]|0)+8>>2]|0)+232>>2]|0)!=(c[(c[(c[((v|0)==2?e:t)+28>>2]|0)+8>>2]|0)+232>>2]|0)){u=f;break a}ep(e,f);Wo(e);u=f;break a}}while(0);i=c[((w&3|0)==3?e:m)+28>>2]|0;l=c[i+8>>2]|0;if((a[l+159|0]|0)==7){x=c[(c[(c[(c[l+212>>2]|0)+8>>2]|0)+256>>2]|0)+(c[l+232>>2]<<2)>>2]|0;y=w}else{l=Lm(i)|0;x=l;y=c[j>>2]|0}l=c[((y&3|0)==2?e:e-32|0)+28>>2]|0;i=c[l+8>>2]|0;if((a[i+159|0]|0)==7){z=c[(c[(c[(c[i+212>>2]|0)+8>>2]|0)+256>>2]|0)+(c[i+232>>2]<<2)>>2]|0}else{z=Lm(l)|0}l=(c[(c[x+8>>2]|0)+232>>2]|0)>(c[(c[z+8>>2]|0)+232>>2]|0);i=l?x:z;n=l?z:x;l=n+8|0;t=i+8|0;if((c[(c[l>>2]|0)+212>>2]|0)==(c[(c[t>>2]|0)+212>>2]|0)){u=e;break}v=So(n,i)|0;if((v|0)!=0){Xn(b,e,v,1);u=e;break}if((c[(c[l>>2]|0)+232>>2]|0)==(c[(c[t>>2]|0)+232>>2]|0)){u=e;break}_n(b,n,i,e);i=c[(c[g>>2]|0)+172>>2]|0;if((i|0)==0){u=e;break}n=i;while(1){i=n;l=n-32|0;if((c[(c[(c[((c[i>>2]&3|0)==2?n:l)+28>>2]|0)+8>>2]|0)+232>>2]|0)>(c[(c[t>>2]|0)+232>>2]|0)){u=e;break a}a[(c[n+8>>2]|0)+112|0]=5;v=c[c[(c[(c[((c[i>>2]&3|0)==2?n:l)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;if((v|0)==0){u=e;break}else{n=v}}}else{u=e}}while(0);g=ow(b,e)|0;if((g|0)==0){break}else{e=g;f=u}}}k=vx(b,k)|0;}while((k|0)!=0)}if((Ix(b|0)|0)==(b|0)){return}b=c[(c[d>>2]|0)+204>>2]|0;if((b|0)==0){A=kk(4)|0}else{A=mk(b,4)|0}c[(c[d>>2]|0)+204>>2]=A;A=c[d>>2]|0;c[c[A+204>>2]>>2]=c[A+180>>2];return}function _n(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0.0,u=0,v=0,w=0,x=0;g=f+8|0;i=c[g>>2]|0;if((c[i+96>>2]|0)==0){j=-1}else{j=((c[(c[e+8>>2]|0)+232>>2]|0)+(c[(c[d+8>>2]|0)+232>>2]|0)|0)/2|0}if((c[i+172>>2]|0)!=0){cc(121016,148536,90,170360)}i=c[(c[d+8>>2]|0)+232>>2]|0;k=e+8|0;l=c[(c[k>>2]|0)+232>>2]|0;if((i|0)>=(l|0)){cc(112216,148536,104,170360)}m=b|0;n=b+8|0;o=d;d=i;i=l;while(1){l=d+1|0;if((l|0)<(i|0)){do{if((l|0)==(j|0)){p=c[(c[g>>2]|0)+96>>2]|0;q=+h[p+24>>3];r=+h[p+32>>3];p=bp(b)|0;s=p+8|0;c[(c[s>>2]|0)+104>>2]=c[(c[g>>2]|0)+96>>2];t=+(c[(c[(Ix(Hx(p|0)|0)|0)+8>>2]|0)+236>>2]|0);h[(c[s>>2]|0)+88>>3]=t;if((a[(c[g>>2]|0)+114|0]|0)!=0){u=p;break}v=(c[(c[(Ix(m)|0)+8>>2]|0)+116>>2]&1|0)==0;w=(c[s>>2]|0)+80|0;if(v){h[w>>3]=r;h[(c[s>>2]|0)+96>>3]=q;u=p;break}else{h[w>>3]=q;h[(c[s>>2]|0)+96>>3]=r;u=p;break}}else{p=bp(b)|0;r=+((c[(c[n>>2]|0)+236>>2]|0)/2|0|0);s=p+8|0;w=(c[s>>2]|0)+88|0;h[w>>3]=r+ +h[w>>3];w=(c[s>>2]|0)+96|0;h[w>>3]=r+ +h[w>>3];u=p}}while(0);c[(c[u+8>>2]|0)+232>>2]=l;x=u}else{x=e}wp(Zo(o,x,f)|0);p=c[(c[k>>2]|0)+232>>2]|0;if((l|0)<(p|0)){o=x;d=l;i=p}else{break}}if((c[(c[g>>2]|0)+172>>2]|0)==0){cc(112216,148536,104,170360)}else{return}}function $n(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;b=a|0;d=Ix(b)|0;e=ux(a)|0;if((e|0)==0){return}else{f=e}do{e=rw(Ix(b)|0,f)|0;if((e|0)!=0){g=0;h=e;while(1){e=sw(Ix(b)|0,h,f)|0;do{if((Rx(a,h|0)|0)==0){i=(c[h>>2]&3|0)==2?h:h-32|0;j=(Yn(g,i)|0)==0;k=c[i>>2]&3;l=c[((k|0)==3?i:i+32|0)+28>>2]|0;m=c[(c[l+8>>2]|0)+232>>2]|0;n=c[((k|0)==2?i:i-32|0)+28>>2]|0;k=c[(c[n+8>>2]|0)+232>>2]|0;o=(m|0)==(k|0);if(!j){if(o){p=g}else{p=0}c[(c[i+8>>2]|0)+172>>2]=p;j=c[(c[g+8>>2]|0)+172>>2]|0;if((j|0)==0){q=g;break}Xn(a,i,j,0);Xo(i);q=g;break}if(!o){if((k|0)>(m|0)){ao(l,n,i);q=i;break}else{ao(n,l,i);q=i;break}}m=To(l,n)|0;if((m|0)==0){cp(d,i);q=i;break}if((i|0)==(m|0)){q=g;break}Xo(i);if((c[(c[i+8>>2]|0)+172>>2]|0)!=0){q=g;break}ep(i,m);q=g}else{q=g}}while(0);if((e|0)==0){break}else{g=q;h=e}}}f=vx(a,f)|0;}while((f|0)!=0);return}function ao(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;g=c[d+8>>2]|0;i=c[g+212>>2]|0;do{if((i|0)==0){j=d}else{k=c[i+8>>2]|0;if((a[k+260|0]|0)!=0){j=d;break}j=c[(c[k+256>>2]|0)+(c[g+232>>2]<<2)>>2]|0}}while(0);g=c[e+8>>2]|0;i=c[g+212>>2]|0;do{if((i|0)==0){l=e;m=g}else{k=c[i+8>>2]|0;if((a[k+260|0]|0)!=0){l=e;m=g;break}n=c[(c[k+256>>2]|0)+(c[g+232>>2]<<2)>>2]|0;l=n;m=c[n+8>>2]|0}}while(0);g=(j|0)==(d|0)&(l|0)==(e|0)?1:5;e=f+8|0;d=(c[e>>2]|0)+172|0;i=c[d>>2]|0;n=i;k=j+8|0;o=c[(c[k>>2]|0)+232>>2]|0;p=l+8|0;q=c[m+232>>2]|0;if((o|0)>=(q|0)){cc(136680,132440,81,170296)}m=c[i>>2]&3;do{if((c[((m|0)==3?n:i+32|0)+28>>2]|0)==(j|0)){if((c[((m|0)==2?n:i-32|0)+28>>2]|0)!=(l|0)){break}return}}while(0);if((b[(c[i+8>>2]|0)+168>>1]|0)<=1){a:do{if((q-o|0)==1){i=So(j,l)|0;do{if((i|0)!=0){if((Kp(f,i)|0)==0){break}c[(c[e>>2]|0)+172>>2]=i;m=i+8|0;a[(c[m>>2]|0)+112|0]=g;r=(c[m>>2]|0)+168|0;b[r>>1]=(b[r>>1]|0)+1;if((a[(c[k>>2]|0)+156|0]|0)!=0){s=i;break a}if((a[(c[p>>2]|0)+156|0]|0)!=0){s=i;break a}Wo(f);s=i;break a}}while(0);c[(c[e>>2]|0)+172>>2]=0;i=Zo(j,l,f)|0;a[(c[i+8>>2]|0)+112|0]=g;s=i}else{s=n}}while(0);o=c[(c[p>>2]|0)+232>>2]|0;if((o-(c[(c[k>>2]|0)+232>>2]|0)|0)<=1){return}q=s;i=c[q>>2]|0;if((c[((i&3|0)==3?s:s+32|0)+28>>2]|0)==(j|0)){t=s;u=i;v=o}else{c[(c[e>>2]|0)+172>>2]=0;o=Zo(j,c[((c[q>>2]&3|0)==2?s:s-32|0)+28>>2]|0,f)|0;c[(c[e>>2]|0)+172>>2]=o;Vo(s);t=o;u=c[o>>2]|0;v=c[(c[p>>2]|0)+232>>2]|0}o=u&3;u=c[((o|0)==2?t:t-32|0)+28>>2]|0;s=c[u+8>>2]|0;if((c[s+232>>2]|0)==(v|0)){w=t;x=o;y=u}else{u=s;while(1){s=c[c[u+180>>2]>>2]|0;o=c[s>>2]&3;t=c[((o|0)==2?s:s-32|0)+28>>2]|0;e=c[t+8>>2]|0;if((c[e+232>>2]|0)==(v|0)){w=s;x=o;y=t;break}else{u=e}}}if((y|0)==(l|0)){return}a[(c[(Zo(c[((x|0)==3?w:w+32|0)+28>>2]|0,l,f)|0)+8>>2]|0)+112|0]=g;Vo(w);return}c[d>>2]=0;do{if(((c[(c[p>>2]|0)+232>>2]|0)-(c[(c[k>>2]|0)+232>>2]|0)|0)==1){d=So(j,l)|0;if((d|0)==0){break}if((Kp(f,d)|0)==0){break}ep(f,d);if((a[(c[k>>2]|0)+156|0]|0)!=0){return}if((a[(c[p>>2]|0)+156|0]|0)!=0){return}Wo(f);return}}while(0);d=c[(c[k>>2]|0)+232>>2]|0;k=c[(c[p>>2]|0)+232>>2]|0;if((d|0)>=(k|0)){return}w=j|0;x=g&255;g=n;n=d;d=j;j=k;while(1){if((n|0)<(j-1|0)){k=Hx(w)|0;y=g;u=g-32|0;v=(c[((c[y>>2]&3|0)==2?g:u)+28>>2]|0)+8|0;e=c[v>>2]|0;t=c[e+232>>2]|0;o=c[e+236>>2]|0;e=k+8|0;s=c[(c[e>>2]|0)+184>>2]|0;q=c[s+(t*44|0)+4>>2]|0;i=(c[s+(t*44|0)>>2]|0)-1|0;if((i|0)>(o|0)){s=i;do{i=c[q+(s<<2)>>2]|0;r=i+8|0;c[(c[r>>2]|0)+236>>2]=s+1;c[q+(c[(c[r>>2]|0)+236>>2]<<2)>>2]=i;s=s-1|0;}while((s|0)>(o|0))}s=o+1|0;if((s|0)<(o+2|0)){c[q+(s<<2)>>2]=0}s=(c[(c[e>>2]|0)+184>>2]|0)+(t*44|0)|0;c[s>>2]=(c[s>>2]|0)+1;s=bp(k)|0;i=s+8|0;h[(c[i>>2]|0)+88>>3]=+h[(c[v>>2]|0)+88>>3];h[(c[i>>2]|0)+96>>3]=+h[(c[v>>2]|0)+96>>3];c[(c[i>>2]|0)+232>>2]=c[(c[v>>2]|0)+232>>2];c[(c[i>>2]|0)+236>>2]=(c[(c[v>>2]|0)+236>>2]|0)+1;c[(c[(c[(c[e>>2]|0)+184>>2]|0)+(t*44|0)+4>>2]|0)+(c[(c[i>>2]|0)+236>>2]<<2)>>2]=s;z=s;A=y;B=u}else{z=l;A=g;B=g-32|0}a[(c[(Zo(d,z,f)|0)+8>>2]|0)+112|0]=x;s=(c[g+8>>2]|0)+168|0;b[s>>1]=(b[s>>1]|0)-1;s=n+1|0;i=c[(c[p>>2]|0)+232>>2]|0;if((s|0)<(i|0)){g=c[c[(c[(c[((c[A>>2]&3|0)==2?g:B)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;n=s;d=z;j=i}else{break}}return}function bo(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;Zn(d);e=d+8|0;c[(c[e>>2]|0)+208>>2]=1;f=c[e>>2]|0;c[c[f+204>>2]>>2]=c[f+180>>2];qp(d);sp(d,0);f=d|0;g=Ix(f)|0;h=c[e>>2]|0;i=b[h+224>>1]|0;if(i<<16>>16>0){j=g+8|0;a[(c[(c[j>>2]|0)+184>>2]|0)+(((i<<16>>16)-1|0)*44|0)+33|0]=0;k=c[e>>2]|0;l=k;m=b[k+224>>1]|0;n=j}else{l=h;m=i;n=g+8|0}i=m<<16>>16;if(m<<16>>16>(b[l+226>>1]|0)){o=i;p=l}else{m=i;i=l;while(1){l=c[(c[i+184>>2]|0)+(m*44|0)>>2]|0;h=c[(c[(c[(c[i+256>>2]|0)+(m<<2)>>2]|0)+8>>2]|0)+236>>2]|0;j=c[n>>2]|0;k=c[j+184>>2]|0;q=c[k+(m*44|0)+4>>2]|0;do{if((l|0)<1){r=h-l|0;s=r+1|0;t=c[k+(m*44|0)>>2]|0;if((s|0)<(t|0)){u=r;r=s;while(1){s=c[q+(r<<2)>>2]|0;v=s+8|0;c[(c[v>>2]|0)+236>>2]=u+l;c[q+(c[(c[v>>2]|0)+236>>2]<<2)>>2]=s;s=r+1|0;v=c[n>>2]|0;w=c[(c[v+184>>2]|0)+(m*44|0)>>2]|0;if((s|0)<(w|0)){u=r;r=s}else{x=v;y=w;break}}}else{x=j;y=t}r=l-1|0;u=y+r|0;if((u|0)<(y|0)){z=u}else{A=x;B=r;break}while(1){c[q+(z<<2)>>2]=0;u=z+1|0;w=c[n>>2]|0;if((u|0)<(c[(c[w+184>>2]|0)+(m*44|0)>>2]|0)){z=u}else{A=w;B=r;break}}}else{r=(c[k+(m*44|0)>>2]|0)-1|0;if((r|0)>(h|0)){t=l-1|0;w=r;do{r=c[q+(w<<2)>>2]|0;u=r+8|0;c[(c[u>>2]|0)+236>>2]=t+w;c[q+(c[(c[u>>2]|0)+236>>2]<<2)>>2]=r;w=w-1|0;}while((w|0)>(h|0))}w=h+1|0;if((w|0)<(h+l|0)){vF(q+(w<<2)|0,0,(l<<2)-4|0)|0}A=c[n>>2]|0;B=l-1|0}}while(0);l=(c[A+184>>2]|0)+(m*44|0)|0;c[l>>2]=(c[l>>2]|0)+B;l=c[(c[e>>2]|0)+184>>2]|0;if((c[l+(m*44|0)>>2]|0)>0){q=h;k=0;j=l;while(1){w=c[(c[j+(m*44|0)+4>>2]|0)+(k<<2)>>2]|0;c[(c[(c[(c[n>>2]|0)+184>>2]|0)+(m*44|0)+4>>2]|0)+(q<<2)>>2]=w;t=w+8|0;c[(c[t>>2]|0)+236>>2]=q;if((a[(c[t>>2]|0)+156|0]|0)==1){c[w+12>>2]=g}ap(d,w);_o(Ix(f)|0,w);w=(c[(Ix(f)|0)+8>>2]|0)+220|0;c[w>>2]=(c[w>>2]|0)+1;w=k+1|0;t=c[(c[e>>2]|0)+184>>2]|0;if((w|0)<(c[t+(m*44|0)>>2]|0)){q=q+1|0;k=w;j=t}else{C=t;break}}}else{C=l}c[C+(m*44|0)+4>>2]=(c[(c[(c[n>>2]|0)+184>>2]|0)+(m*44|0)+4>>2]|0)+(h<<2);a[(c[(c[n>>2]|0)+184>>2]|0)+(m*44|0)+33|0]=0;j=m+1|0;k=c[e>>2]|0;if((m|0)<(b[k+226>>1]|0)){m=j;i=k}else{o=j;p=k;break}}}i=c[n>>2]|0;if((o|0)<(b[i+226>>1]|0)){a[(c[i+184>>2]|0)+(o*44|0)+33|0]=0;D=c[e>>2]|0}else{D=p}a[D+260|0]=1;$n(d);d=c[e>>2]|0;D=b[d+224>>1]|0;if(D<<16>>16>(b[d+226>>1]|0)){return}p=D<<16>>16;D=d;while(1){d=c[(c[D+256>>2]|0)+(p<<2)>>2]|0;o=d+8|0;i=c[o>>2]|0;n=c[c[i+180>>2]>>2]|0;if((n|0)==0){E=i}else{i=n;while(1){Vo(i);n=c[o>>2]|0;m=c[c[n+180>>2]>>2]|0;if((m|0)==0){E=n;break}else{i=m}}}i=c[c[E+172>>2]>>2]|0;if((i|0)!=0){h=i;do{Vo(h);h=c[c[(c[o>>2]|0)+172>>2]>>2]|0;}while((h|0)!=0)}ap(Ix(f)|0,d);c[(c[(c[e>>2]|0)+256>>2]|0)+(p<<2)>>2]=0;h=c[e>>2]|0;if((p|0)<(b[h+226>>1]|0)){p=p+1|0;D=h}else{break}}return}function co(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;d=i;e=ux(b)|0;if((e|0)!=0){f=e;do{e=f+8|0;g=c[e>>2]|0;if((a[g+159|0]|0)==7){Nm(f);h=c[e>>2]|0}else{h=g}c[h+212>>2]=0;f=vx(b,f)|0;}while((f|0)!=0)}f=b+8|0;h=c[f>>2]|0;if((c[h+172>>2]|0)<1){i=d;return}g=b|0;b=1;e=h;while(1){h=c[(c[e+176>>2]|0)+(b<<2)>>2]|0;j=ux(h)|0;if((j|0)!=0){k=h+8|0;l=h;m=j;while(1){j=vx(h,m)|0;n=m+8|0;do{if((a[(c[n>>2]|0)+159|0]|0)==0){Om(m,c[(c[k>>2]|0)+252>>2]|0);c[(c[n>>2]|0)+212>>2]=l;a[(c[n>>2]|0)+159|0]=7;o=mw(h,m)|0;if((o|0)==0){break}else{p=o}do{o=c[(c[p+8>>2]|0)+172>>2]|0;a:do{if((o|0)!=0){q=o;do{r=q;s=q-32|0;t=c[(c[((c[r>>2]&3|0)==2?q:s)+28>>2]|0)+8>>2]|0;if((a[t+156|0]|0)!=1){break a}c[t+212>>2]=l;q=c[c[(c[(c[((c[r>>2]&3|0)==2?q:s)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;}while((q|0)!=0)}}while(0);p=ow(h,p)|0;}while((p|0)!=0)}else{o=m|0;q=$w(o)|0;s=$w(g)|0;Fv(0,86464,(r=i,i=i+16|0,c[r>>2]=q,c[r+8>>2]=s,r)|0)|0;i=r;Gx(h,o)|0}}while(0);if((j|0)==0){break}else{m=j}}}m=c[f>>2]|0;if((b|0)<(c[m+172>>2]|0)){b=b+1|0;e=m}else{break}}i=d;return}function eo(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;f=e+8|0;g=jk((b[(c[f>>2]|0)+226>>1]<<2)+8|0)|0;c[(c[f>>2]|0)+256>>2]=g;g=c[f>>2]|0;h=b[g+224>>1]|0;if(h<<16>>16<=(b[g+226>>1]|0)){g=e;i=h<<16>>16;h=0;while(1){j=bp(d)|0;c[(c[(c[f>>2]|0)+256>>2]|0)+(i<<2)>>2]=j;k=j+8|0;c[(c[k>>2]|0)+232>>2]=i;a[(c[k>>2]|0)+159|0]=7;c[(c[k>>2]|0)+212>>2]=g;if((h|0)!=0){k=(c[(Zo(h,j,0)|0)+8>>2]|0)+154|0;b[k>>1]=(b[k>>1]|0)*1e3}if((i|0)<(b[(c[f>>2]|0)+226>>1]|0)){i=i+1|0;h=j}else{break}}}h=ux(e)|0;if((h|0)!=0){i=h;do{h=(c[(c[(c[f>>2]|0)+256>>2]|0)+(c[(c[i+8>>2]|0)+232>>2]<<2)>>2]|0)+8|0;g=(c[h>>2]|0)+216|0;c[g>>2]=(c[g>>2]|0)+1;g=mw(e,i)|0;if((g|0)!=0){d=g;do{g=d;j=c[g>>2]&3;k=c[(c[(c[((j|0)==3?d:d+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0;l=d-32|0;if((k|0)<(c[(c[(c[((j|0)==2?d:l)+28>>2]|0)+8>>2]|0)+232>>2]|0)){j=k;do{k=(c[(c[c[(c[h>>2]|0)+180>>2]>>2]|0)+8>>2]|0)+168|0;b[k>>1]=(b[k>>1]|0)+1;j=j+1|0;}while((j|0)<(c[(c[(c[((c[g>>2]&3|0)==2?d:l)+28>>2]|0)+8>>2]|0)+232>>2]|0))}d=ow(e,d)|0;}while((d|0)!=0)}i=vx(e,i)|0;}while((i|0)!=0)}i=c[f>>2]|0;e=b[i+224>>1]|0;if(e<<16>>16>(b[i+226>>1]|0)){return}d=e<<16>>16;e=i;while(1){i=(c[(c[(c[e+256>>2]|0)+(d<<2)>>2]|0)+8>>2]|0)+216|0;h=c[i>>2]|0;if((h|0)>1){c[i>>2]=h-1;m=c[f>>2]|0}else{m=e}if((d|0)<(b[m+226>>1]|0)){d=d+1|0;e=m}else{break}}return}function fo(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=(c[(c[e+8>>2]|0)+212>>2]|0)+8|0;e=c[h>>2]|0;i=e;j=f+1|0;if((a[i+261|0]|0)==(j|0)){return}k=b[e+224>>1]|0;l=b[i+226>>1]|0;if(k<<16>>16>l<<16>>16){m=k;n=e;o=l}else{l=k<<16>>16;k=e;while(1){rp(d,c[(c[k+256>>2]|0)+(l<<2)>>2]|0);p=c[h>>2]|0;q=b[p+226>>1]|0;if((l|0)<(q<<16>>16|0)){l=l+1|0;k=p}else{break}}m=b[p+224>>1]|0;n=p;o=q}if(m<<16>>16>o<<16>>16){r=n}else{o=m<<16>>16;m=n;while(1){tp(g,c[(c[m+256>>2]|0)+(o<<2)>>2]|0,f);n=c[h>>2]|0;q=n;if((o|0)<(b[q+226>>1]|0)){o=o+1|0;m=n}else{r=q;break}}}a[r+261|0]=j;return}function go(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=ux(b)|0;if((d|0)==0){ho(b);return}else{e=d}do{c[(c[e+8>>2]|0)+212>>2]=0;d=mw(b,e)|0;if((d|0)!=0){f=d;do{d=c[(c[f+8>>2]|0)+172>>2]|0;a:do{if((d|0)!=0){g=d;do{h=g;i=g-32|0;j=c[(c[((c[h>>2]&3|0)==2?g:i)+28>>2]|0)+8>>2]|0;if((a[j+156|0]|0)!=1){break a}c[j+212>>2]=0;g=c[c[(c[(c[((c[h>>2]&3|0)==2?g:i)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;}while((g|0)!=0)}}while(0);f=ow(b,f)|0;}while((f|0)!=0)}e=vx(b,e)|0;}while((e|0)!=0);ho(b);return}function ho(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=b+8|0;e=c[d>>2]|0;if((c[e+172>>2]|0)>=1){f=1;g=e;while(1){ho(c[(c[g+176>>2]|0)+(f<<2)>>2]|0);e=c[d>>2]|0;if((f|0)<(c[e+172>>2]|0)){f=f+1|0;g=e}else{break}}}g=ux(b)|0;if((g|0)==0){return}f=b;d=g;do{g=(c[d+8>>2]|0)+212|0;if((c[g>>2]|0)==0){c[g>>2]=f}g=mw(b,d)|0;if((g|0)!=0){e=g;do{g=c[(c[e+8>>2]|0)+172>>2]|0;a:do{if((g|0)!=0){h=g;do{i=h;j=c[i>>2]|0;k=h-32|0;l=c[(c[((j&3|0)==2?h:k)+28>>2]|0)+8>>2]|0;if((a[l+156|0]|0)!=1){break a}m=l+212|0;if((c[m>>2]|0)==0){c[m>>2]=f;n=c[i>>2]|0}else{n=j}h=c[c[(c[(c[((n&3|0)==2?h:k)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;}while((h|0)!=0)}}while(0);e=ow(b,e)|0;}while((e|0)!=0)}d=vx(b,d)|0;}while((d|0)!=0);return}function io(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0,da=0.0,ea=0.0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0;d=i;i=i+128|0;e=d|0;f=d+64|0;g=d+80|0;j=d+96|0;k=d+112|0;l=cn(b)|0;m=ux(b)|0;if((m|0)==0){n=Vg(l)|0;i=d;return}o=e;p=g;q=k;r=e|0;s=e+16|0;t=e+32|0;u=e+48|0;e=j|0;v=j+8|0;w=f|0;x=f+8|0;y=m;a:while(1){m=mw(b,y)|0;if((m|0)!=0){z=m;do{m=z|0;A=ew(m,145320)|0;do{if((A|0)==0){B=0}else{if((a[A]|0)==0){B=0;break}C=yn(l,A)|0;if((C|0)!=0){B=C;break}Fv(0,154736,(D=i,i=i+8|0,c[D>>2]=A,D)|0)|0;i=D;B=0}}while(0);A=ew(m,161760)|0;do{if((A|0)==0){E=13}else{if((a[A]|0)==0){E=13;break}C=yn(l,A)|0;if((C|0)==0){Fv(0,154736,(D=i,i=i+8|0,c[D>>2]=A,D)|0)|0;i=D;E=13;break}else{F=C;G=1;H=(B|0)==0;E=14;break}}}while(0);if((E|0)==13){E=0;if((B|0)!=0){F=0;G=0;H=0;E=14}}do{if((E|0)==14){E=0;A=z+8|0;C=c[(c[A>>2]|0)+8>>2]|0;if((C|0)==0){break}if((c[C+4>>2]|0)>1){I=z;J=$w(c[((c[I>>2]&3|0)==3?z:z+32|0)+28>>2]|0)|0;K=$w(c[((c[I>>2]&3|0)==2?z:z-32|0)+28>>2]|0)|0;Fv(0,130536,(D=i,i=i+16|0,c[D>>2]=J,c[D+8>>2]=K,D)|0)|0;i=D;break}K=c[C>>2]|0;C=c[K+4>>2]|0;J=z;I=c[J>>2]&3;L=z-32|0;M=c[((I|0)==2?z:L)+28>>2]|0;N=z+32|0;O=c[((I|0)==3?z:N)+28>>2]|0;I=kk(48)|0;P=I;Q=K+12|0;c[I+12>>2]=c[Q>>2];R=K+8|0;c[I+8>>2]=c[R>>2];b:do{if(H){E=41}else{S=c[B+8>>2]|0;T=S+16|0;U=T;V=c[M+8>>2]|0;W=+h[V+16>>3];X=+h[V+24>>3];Y=+h[T>>3];do{if(Y<=W){Z=+h[S+32>>3];if(Z<W){break}_=+h[S+24>>3];if(_>X){break}$=+h[S+40>>3];if($<X){break}T=K|0;V=c[T>>2]|0;aa=+h[V>>3];ba=+h[V+8>>3];if(!(Y>aa|Z<aa|_>ba|$<ba)){ca=c[O+8>>2]|0;da=+h[ca+16>>3];ea=+h[ca+24>>3];if(!(Y>da|Z<da|_>ea|$<ea)){ca=$w(c[((c[J>>2]&3|0)==3?z:N)+28>>2]|0)|0;fa=$w(c[((c[J>>2]&3|0)==2?z:L)+28>>2]|0)|0;ga=ew(m,145320)|0;Fv(0,108904,(D=i,i=i+24|0,c[D>>2]=ca,c[D+8>>2]=fa,c[D+16>>2]=ga,D)|0)|0;i=D;E=41;break b}if((c[R>>2]|0)==0){E=29;break a}ga=K+16|0;fa=K+24|0;jo(f,aa,ba,+h[ga>>3],+h[fa>>3],U);ba=+h[w>>3];aa=+h[x>>3];ca=c[T>>2]|0;h[ca+48>>3]=ba;h[ca+56>>3]=aa;ca=c[T>>2]|0;ea=(aa+ +h[fa>>3])*.5;h[ca+16>>3]=(ba+ +h[ga>>3])*.5;h[ca+24>>3]=ea;ca=c[T>>2]|0;ea=(+h[ca+24>>3]+ +h[fa>>3])*.5;h[ca>>3]=(+h[ca+16>>3]+ +h[ga>>3])*.5;h[ca+8>>3]=ea;ca=c[T>>2]|0;ea=(aa+ +h[ca+24>>3])*.5;h[ca+32>>3]=(ba+ +h[ca+16>>3])*.5;h[ca+40>>3]=ea;ca=c[Q>>2]|0;if((ca|0)==0){ha=3;break b}ha=(lh(z,c[T>>2]|0,0,0,P,ca)|0)+3|0;break b}ca=C-1|0;c:do{if((ca|0)>0){if((ko(V,U)|0)==0){ia=3}else{ja=0;break}while(1){if((ia|0)>=(ca|0)){ja=ia;break c}if((ko((c[T>>2]|0)+(ia<<4)|0,U)|0)==0){ia=ia+3|0}else{ja=ia;break}}}else{ja=0}}while(0);V=c[Q>>2]|0;ga=(V|0)!=0;if((ja|0)==(ca|0)){if(!ga){E=36;break a}fa=I+32|0;ka=c[T>>2]|0;jo(g,+h[K+32>>3],+h[K+40>>3],+h[ka+(ca<<4)>>3],+h[ka+(ca<<4)+8>>3],U);c[fa>>2]=c[p>>2];c[fa+4>>2]=c[p+4>>2];c[fa+8>>2]=c[p+8>>2];c[fa+12>>2]=c[p+12>>2];ha=ca;break b}if(ga){la=lh(z,c[T>>2]|0,0,ja,P,V)|0}else{la=ja}ha=la+3|0;break b}}while(0);U=$w(c[((c[J>>2]&3|0)==3?z:N)+28>>2]|0)|0;S=$w(c[((c[J>>2]&3|0)==2?z:L)+28>>2]|0)|0;V=ew(m,145320)|0;Fv(0,116216,(D=i,i=i+24|0,c[D>>2]=U,c[D+8>>2]=S,c[D+16>>2]=V,D)|0)|0;i=D;E=41}}while(0);do{if((E|0)==41){E=0;V=C-1|0;if((c[Q>>2]|0)==0){ha=V;break}S=I+32|0;U=K+32|0;c[S>>2]=c[U>>2];c[S+4>>2]=c[U+4>>2];c[S+8>>2]=c[U+8>>2];c[S+12>>2]=c[U+12>>2];ha=V}}while(0);d:do{if(G){C=c[F+8>>2]|0;V=C+16|0;U=V;S=c[O+8>>2]|0;Y=+h[S+16>>3];X=+h[S+24>>3];W=+h[V>>3];do{if(W<=Y){ea=+h[C+32>>3];if(ea<Y){break}ba=+h[C+24>>3];if(ba>X){break}aa=+h[C+40>>3];if(aa<X){break}V=K|0;S=c[V>>2]|0;$=+h[S+(ha<<4)>>3];_=+h[S+(ha<<4)+8>>3];if(!(W>$|ea<$|ba>_|aa<_)){ga=c[M+8>>2]|0;da=+h[ga+16>>3];Z=+h[ga+24>>3];if(!(W>da|ea<da|ba>Z|aa<Z)){ga=$w(c[((c[J>>2]&3|0)==3?z:N)+28>>2]|0)|0;fa=$w(c[((c[J>>2]&3|0)==2?z:L)+28>>2]|0)|0;ka=ew(m,161760)|0;Fv(0,81688,(D=i,i=i+24|0,c[D>>2]=ga,c[D+8>>2]=fa,c[D+16>>2]=ka,D)|0)|0;i=D;E=67;break d}if((c[Q>>2]|0)==0){E=54;break a}ka=I+32|0;fa=I+40|0;jo(j,$,_,+h[ka>>3],+h[fa>>3],U);_=+h[e>>3];$=+h[v>>3];ga=ha-3|0;ma=c[V>>2]|0;h[ma+(ga<<4)>>3]=_;h[ma+(ga<<4)+8>>3]=$;ma=ha-1|0;na=c[V>>2]|0;Z=($+ +h[fa>>3])*.5;h[na+(ma<<4)>>3]=(_+ +h[ka>>3])*.5;h[na+(ma<<4)+8>>3]=Z;na=c[V>>2]|0;Z=(+h[na+(ma<<4)+8>>3]+ +h[fa>>3])*.5;h[na+(ha<<4)>>3]=(+h[na+(ma<<4)>>3]+ +h[ka>>3])*.5;h[na+(ha<<4)+8>>3]=Z;na=ha-2|0;ka=c[V>>2]|0;Z=($+ +h[ka+(ma<<4)+8>>3])*.5;h[ka+(na<<4)>>3]=(_+ +h[ka+(ma<<4)>>3])*.5;h[ka+(na<<4)+8>>3]=Z;na=c[R>>2]|0;if((na|0)==0){oa=ga;break d}oa=nh(z,c[V>>2]|0,ga,ga,P,na)|0;break d}e:do{if((ha|0)>0){na=ha;ga=S;while(1){ka=ga+(na<<4)|0;c[o>>2]=c[ka>>2];c[o+4>>2]=c[ka+4>>2];c[o+8>>2]=c[ka+8>>2];c[o+12>>2]=c[ka+12>>2];pa=na-1|0;ka=(c[V>>2]|0)+(pa<<4)|0;c[s>>2]=c[ka>>2];c[s+4>>2]=c[ka+4>>2];c[s+8>>2]=c[ka+8>>2];c[s+12>>2]=c[ka+12>>2];qa=na-2|0;ka=(c[V>>2]|0)+(qa<<4)|0;c[t>>2]=c[ka>>2];c[t+4>>2]=c[ka+4>>2];c[t+8>>2]=c[ka+8>>2];c[t+12>>2]=c[ka+12>>2];ra=na-3|0;ka=(c[V>>2]|0)+(ra<<4)|0;c[u>>2]=c[ka>>2];c[u+4>>2]=c[ka+4>>2];c[u+8>>2]=c[ka+8>>2];c[u+12>>2]=c[ka+12>>2];if((ko(r,U)|0)!=0){break}if((ra|0)<=0){sa=ra;break e}na=ra;ga=c[V>>2]|0}ga=(c[V>>2]|0)+(na<<4)|0;c[ga>>2]=c[o>>2];c[ga+4>>2]=c[o+4>>2];c[ga+8>>2]=c[o+8>>2];c[ga+12>>2]=c[o+12>>2];ga=(c[V>>2]|0)+(pa<<4)|0;c[ga>>2]=c[s>>2];c[ga+4>>2]=c[s+4>>2];c[ga+8>>2]=c[s+8>>2];c[ga+12>>2]=c[s+12>>2];ga=(c[V>>2]|0)+(qa<<4)|0;c[ga>>2]=c[t>>2];c[ga+4>>2]=c[t+4>>2];c[ga+8>>2]=c[t+8>>2];c[ga+12>>2]=c[t+12>>2];ga=(c[V>>2]|0)+(ra<<4)|0;c[ga>>2]=c[u>>2];c[ga+4>>2]=c[u+4>>2];c[ga+8>>2]=c[u+8>>2];c[ga+12>>2]=c[u+12>>2];sa=na}else{sa=ha}}while(0);if((sa|0)==0){if((c[R>>2]|0)==0){E=63;break a}S=I+16|0;T=c[V>>2]|0;jo(k,+h[K+16>>3],+h[K+24>>3],+h[T>>3],+h[T+8>>3],U);c[S>>2]=c[q>>2];c[S+4>>2]=c[q+4>>2];c[S+8>>2]=c[q+8>>2];c[S+12>>2]=c[q+12>>2];oa=0;break d}else{S=sa-3|0;T=c[R>>2]|0;if((T|0)==0){oa=S;break d}oa=nh(z,c[V>>2]|0,S,ha-3|0,P,T)|0;break d}}}while(0);U=$w(c[((c[J>>2]&3|0)==3?z:N)+28>>2]|0)|0;C=$w(c[((c[J>>2]&3|0)==2?z:L)+28>>2]|0)|0;T=ew(m,161760)|0;Fv(0,86720,(D=i,i=i+24|0,c[D>>2]=U,c[D+8>>2]=C,c[D+16>>2]=T,D)|0)|0;i=D;E=67}else{E=67}}while(0);do{if((E|0)==67){E=0;if((c[R>>2]|0)==0){oa=0;break}L=I+16|0;J=K+16|0;c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];oa=0}}while(0);R=ha-oa+1|0;J=I+4|0;c[J>>2]=R;L=kk(R<<4)|0;R=I;c[R>>2]=L;N=K|0;do{if((c[J>>2]|0)>0){Q=(c[N>>2]|0)+(oa<<4)|0;c[L>>2]=c[Q>>2];c[L+4>>2]=c[Q+4>>2];c[L+8>>2]=c[Q+8>>2];c[L+12>>2]=c[Q+12>>2];if((c[J>>2]|0)>1){ta=oa;ua=1}else{break}do{ta=ta+1|0;Q=(c[R>>2]|0)+(ua<<4)|0;M=(c[N>>2]|0)+(ta<<4)|0;c[Q>>2]=c[M>>2];c[Q+4>>2]=c[M+4>>2];c[Q+8>>2]=c[M+8>>2];c[Q+12>>2]=c[M+12>>2];ua=ua+1|0;}while((ua|0)<(c[J>>2]|0))}}while(0);eF(c[N>>2]|0);eF(K);c[c[(c[A>>2]|0)+8>>2]>>2]=P}}while(0);z=ow(b,z)|0;}while((z|0)!=0)}z=vx(b,y)|0;if((z|0)==0){E=75;break}else{y=z}}if((E|0)==29){cc(102800,97192,361,170424)}else if((E|0)==36){cc(91704,97192,379,170424)}else if((E|0)==54){cc(91704,97192,421,170424)}else if((E|0)==63){cc(102800,97192,444,170424)}else if((E|0)==75){n=Vg(l)|0;i=d;return}}function jo(a,b,d,e,f,g){a=a|0;b=+b;d=+d;e=+e;f=+f;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0;j=i;i=i+416|0;k=j|0;l=j+104|0;m=j+208|0;n=j+312|0;o=+h[g>>3];p=+h[g+8>>3];q=+h[g+16>>3];r=+h[g+24>>3];do{if(o>e){s=+(~~((d-f)*(o-b)/(b-e))|0)+d;if(s<p|s>r){break}h[a>>3]=o;h[a+8>>3]=s;i=j;return}}while(0);do{if(q<e){s=+(~~((d-f)*(q-b)/(b-e))|0)+d;if(s<p|s>r){break}h[a>>3]=q;h[a+8>>3]=s;i=j;return}}while(0);do{if(p>f){s=+(~~((b-e)*(p-d)/(d-f))|0)+b;if(s<o|s>q){break}h[a>>3]=s;h[a+8>>3]=p;i=j;return}}while(0);do{if(r<f){s=+(~~((b-e)*(r-d)/(d-f))|0)+b;if(s<o|s>q){break}h[a>>3]=s;h[a+8>>3]=r;i=j;return}}while(0);j=k|0;nb(j|0,159736,(k=i,i=i+16|0,h[k>>3]=b,h[k+8>>3]=d,k)|0)|0;i=k;a=l|0;nb(a|0,159736,(k=i,i=i+16|0,h[k>>3]=e,h[k+8>>3]=f,k)|0)|0;i=k;l=m|0;nb(l|0,159736,(k=i,i=i+16|0,h[k>>3]=o,h[k+8>>3]=p,k)|0)|0;i=k;m=n|0;nb(m|0,159736,(k=i,i=i+16|0,h[k>>3]=q,h[k+8>>3]=r,k)|0)|0;i=k;Fv(1,167928,(k=i,i=i+32|0,c[k>>2]=j,c[k+8>>2]=a,c[k+16>>2]=l,c[k+24>>2]=m,k)|0)|0;i=k;cc(163768,97192,78,171e3)}function ko(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0;d=i;i=i+128|0;e=d|0;f=e|0;g=e;j=a;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];j=e+16|0;g=a+16|0;c[j>>2]=c[g>>2];c[j+4>>2]=c[g+4>>2];c[j+8>>2]=c[g+8>>2];c[j+12>>2]=c[g+12>>2];g=e+32|0;j=a+32|0;c[g>>2]=c[j>>2];c[g+4>>2]=c[j+4>>2];c[g+8>>2]=c[j+8>>2];c[g+12>>2]=c[j+12>>2];j=e+48|0;e=a+48|0;c[j>>2]=c[e>>2];c[j+4>>2]=c[e+4>>2];c[j+8>>2]=c[e+8>>2];c[j+12>>2]=c[e+12>>2];e=b|0;j=b+8|0;g=b+24|0;k=+lo(a,0.0,1.0,+h[e>>3],+h[j>>3],+h[g>>3]);if(k>=0.0&k<2.0){Qm(d+64|0,f,3,k,a,0);l=k}else{l=2.0}m=b+16|0;k=+lo(a,0.0,l>1.0?1.0:l,+h[m>>3],+h[j>>3],+h[g>>3]);if(k>=0.0&k<l){Qm(d+80|0,f,3,k,a,0);n=k}else{n=l}l=+mo(a,0.0,n>1.0?1.0:n,+h[j>>3],+h[e>>3],+h[m>>3]);if(l>=0.0&l<n){Qm(d+96|0,f,3,l,a,0);o=l}else{o=n}n=+mo(a,0.0,o>1.0?1.0:o,+h[g>>3],+h[e>>3],+h[m>>3]);if(!(n>=0.0&n<o)){p=o;q=p<2.0;r=q&1;i=d;return r|0}Qm(d+112|0,f,3,n,a,0);p=n;q=p<2.0;r=q&1;i=d;return r|0}function lo(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0,u=0.0,v=0.0,w=0.0;g=i;i=i+144|0;j=g|0;k=g+64|0;l=g+128|0;m=+h[a>>3];if(m<d){n=-1}else{n=m>d|0}m=+h[a+16>>3];if(m<d){o=-1}else{o=m>d|0}m=+h[a+32>>3];if(m<d){p=-1}else{p=m>d|0}m=+h[a+48>>3];if(m<d){q=-1}else{q=m>d|0}r=((o|0)!=(n|0)&(n|0)!=0&1)+((n|0)==0)+((p|0)!=(o|0)&(o|0)!=0&1)+((q|0)!=(p|0)&(p|0)!=0&1)|0;if((r|0)==0){s=-1.0;i=g;return+s}else if((r|0)==1){t=10}do{if((t|0)==10){if(m<0.0){u=m+-.5}else{u=m+.5}if(d<0.0){v=d+-.5}else{v=d+.5}if((~~u|0)!=(~~v|0)){break}w=+h[a+56>>3];i=g;return+(w<e|w>f?-1.0:c)}}while(0);t=j|0;j=k|0;Qm(l,a,3,.5,t,j);v=(b+c)*.5;u=+lo(t,b,v,d,e,f);if(u>=0.0){s=u;i=g;return+s}s=+lo(j,v,c,d,e,f);i=g;return+s}function mo(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;var g=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0;g=i;i=i+144|0;j=g|0;k=g+64|0;l=g+128|0;m=+h[a+8>>3];if(m<d){n=-1}else{n=m>d|0}m=+h[a+24>>3];if(m<d){o=-1}else{o=m>d|0}m=+h[a+40>>3];if(m<d){p=-1}else{p=m>d|0}m=+h[a+56>>3];if(m<d){q=-1}else{q=m>d|0}r=((o|0)!=(n|0)&(n|0)!=0&1)+((n|0)==0)+((p|0)!=(o|0)&(o|0)!=0&1)+((q|0)!=(p|0)&(p|0)!=0&1)|0;if((r|0)==1){s=10}else if((r|0)==0){t=-1.0;i=g;return+t}do{if((s|0)==10){if(m<0.0){u=m+-.5}else{u=m+.5}if(d<0.0){v=d+-.5}else{v=d+.5}if((~~u|0)!=(~~v|0)){break}w=+h[a+48>>3];i=g;return+(w<e|w>f?-1.0:c)}}while(0);s=j|0;j=k|0;Qm(l,a,3,.5,s,j);v=(b+c)*.5;u=+mo(s,b,v,d,e,f);if(u>=0.0){t=u;i=g;return+t}t=+mo(j,v,c,d,e,f);i=g;return+t}function no(d){d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,la=0,ma=0,na=0,oa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0;e=i;f=1;g=0;h=i;i=i+168|0;c[h>>2]=0;while(1)switch(f|0){case 1:j=d+8|0;k=c[j>>2]|0;if(((b[k+226>>1]|0)-(b[k+224>>1]|0)|0)<2){f=60;break}else{f=2;break};case 2:l=c[k+184>>2]|0;if((c[l+88>>2]|0)==0){m=1;n=k;f=30;break}else{o=1;p=2;q=k;r=l;f=4;break};case 3:l=p+1|0;if((c[s+(l*44|0)>>2]|0)==0){f=5;break}else{o=p;p=l;q=t;r=s;f=4;break};case 4:if((c[r+(o*44|0)>>2]|0)>0){w=0;x=r;y=q;f=6;break}else{t=q;s=r;f=3;break};case 5:if((p|0)>0){m=p;n=t;f=30;break}else{f=56;break};case 6:z=(c[(c[x+(o*44|0)+4>>2]|0)+(w<<2)>>2]|0)+8|0;A=c[z>>2]|0;if((a[A+156|0]|0)==1){f=7;break}else{f=29;break};case 7:if((c[A+176>>2]|0)==1){f=8;break}else{f=29;break};case 8:if((c[A+184>>2]|0)==1){f=9;break}else{f=29;break};case 9:if((c[A+104>>2]|0)==0){B=w;C=y;f=10;break}else{f=29;break};case 10:D=B+1|0;E=c[C+184>>2]|0;if((D|0)<(c[E+(o*44|0)>>2]|0)){f=11;break}else{f=27;break};case 11:F=c[(c[(c[E+(o*44|0)+4>>2]|0)+(D<<2)>>2]|0)+8>>2]|0;G=c[c[(c[z>>2]|0)+172>>2]>>2]|0;H=F+172|0;I=c[c[H>>2]>>2]|0;if((a[F+156|0]|0)==1){f=12;break}else{f=27;break};case 12:if((c[H+4>>2]|0)==1){f=13;break}else{f=27;break};case 13:if((c[F+184>>2]|0)==1){f=14;break}else{f=27;break};case 14:if((c[F+104>>2]|0)==0){f=15;break}else{f=27;break};case 15:if((c[((c[G>>2]&3|0)==3?G:G+32|0)+28>>2]|0)==(c[((c[I>>2]&3|0)==3?I:I+32|0)+28>>2]|0)){f=16;break}else{f=27;break};case 16:J=c[G+8>>2]|0;if((a[J+112|0]|0)==0){K=G;L=J;f=18;break}else{M=J;f=19;break};case 17:K=N;L=O;f=18;break;case 18:P=c[I+8>>2]|0;if((a[P+112|0]|0)==0){Q=I;R=P;f=22;break}else{S=P;f=20;break};case 19:N=c[M+116>>2]|0;O=c[N+8>>2]|0;if((a[O+112|0]|0)==0){f=17;break}else{M=O;f=19;break};case 20:T=c[S+116>>2]|0;U=c[T+8>>2]|0;if((a[U+112|0]|0)==0){f=21;break}else{S=U;f=20;break};case 21:Q=T;R=U;f=22;break;case 22:if((a[L+153|0]|0)==0){f=23;break}else{f=27;break};case 23:if((a[R+153|0]|0)==0){f=24;break}else{f=27;break};case 24:l=c[Q>>2]&3;V=c[K>>2]&3;if((da((c[(c[(c[((V|0)==3?K:K+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((V|0)==2?K:K-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0,(c[(c[(c[((l|0)==3?Q:Q+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((l|0)==2?Q:Q-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0)|0)>0){f=25;break}else{f=27;break};case 25:l=wa(26,J+16|0,P+16|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,h)|0;if((g|0)>0){f=-1;break}else return}u=v=0;if((l|0)==0){f=26;break}else{f=27;break};case 26:B=D;C=c[j>>2]|0;f=10;break;case 27:if((D-w|0)>1){f=28;break}else{f=29;break};case 28:ja(8,d|0,o|0,w|0,B|0,1);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,h)|0;if((g|0)>0){f=-1;break}else return}u=v=0;f=29;break;case 29:l=w+1|0;V=c[j>>2]|0;W=c[V+184>>2]|0;if((l|0)<(c[W+(o*44|0)>>2]|0)){w=l;x=W;y=V;f=6;break}else{t=V;s=W;f=3;break};case 30:W=c[n+184>>2]|0;if((c[W+(m*44|0)>>2]|0)>0){X=0;Y=W;Z=n;f=31;break}else{_=n;f=55;break};case 31:$=(c[(c[Y+(m*44|0)+4>>2]|0)+(X<<2)>>2]|0)+8|0;aa=c[$>>2]|0;if((a[aa+156|0]|0)==1){f=32;break}else{f=54;break};case 32:if((c[aa+184>>2]|0)==1){f=33;break}else{f=54;break};case 33:if((c[aa+176>>2]|0)==1){f=34;break}else{f=54;break};case 34:if((c[aa+104>>2]|0)==0){ba=X;ca=Z;f=35;break}else{f=54;break};case 35:ea=ba+1|0;fa=c[ca+184>>2]|0;if((ea|0)<(c[fa+(m*44|0)>>2]|0)){f=36;break}else{f=52;break};case 36:ga=c[(c[(c[fa+(m*44|0)+4>>2]|0)+(ea<<2)>>2]|0)+8>>2]|0;ha=c[c[(c[$>>2]|0)+180>>2]>>2]|0;ia=ga+180|0;la=c[c[ia>>2]>>2]|0;if((a[ga+156|0]|0)==1){f=37;break}else{f=52;break};case 37:if((c[ia+4>>2]|0)==1){f=38;break}else{f=52;break};case 38:if((c[ga+176>>2]|0)==1){f=39;break}else{f=52;break};case 39:if((c[ga+104>>2]|0)==0){f=40;break}else{f=52;break};case 40:if((c[((c[ha>>2]&3|0)==2?ha:ha-32|0)+28>>2]|0)==(c[((c[la>>2]&3|0)==2?la:la-32|0)+28>>2]|0)){f=41;break}else{f=52;break};case 41:ma=c[ha+8>>2]|0;if((a[ma+112|0]|0)==0){na=ha;oa=ma;f=43;break}else{qa=ma;f=44;break};case 42:na=ra;oa=sa;f=43;break;case 43:ta=c[la+8>>2]|0;if((a[ta+112|0]|0)==0){ua=la;va=ta;f=47;break}else{xa=ta;f=45;break};case 44:ra=c[qa+116>>2]|0;sa=c[ra+8>>2]|0;if((a[sa+112|0]|0)==0){f=42;break}else{qa=sa;f=44;break};case 45:ya=c[xa+116>>2]|0;za=c[ya+8>>2]|0;if((a[za+112|0]|0)==0){f=46;break}else{xa=za;f=45;break};case 46:ua=ya;va=za;f=47;break;case 47:if((a[oa+153|0]|0)==0){f=48;break}else{f=52;break};case 48:if((a[va+153|0]|0)==0){f=49;break}else{f=52;break};case 49:W=c[ua>>2]&3;V=c[na>>2]&3;if((da((c[(c[(c[((V|0)==3?na:na+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((V|0)==2?na:na-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0,(c[(c[(c[((W|0)==3?ua:ua+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((W|0)==2?ua:ua-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0)|0)>0){f=50;break}else{f=52;break};case 50:W=wa(26,ma+56|0,ta+56|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,h)|0;if((g|0)>0){f=-1;break}else return}u=v=0;if((W|0)==0){f=51;break}else{f=52;break};case 51:ba=ea;ca=c[j>>2]|0;f=35;break;case 52:if((ea-X|0)>1){f=53;break}else{f=54;break};case 53:ja(8,d|0,m|0,X|0,ba|0,0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,h)|0;if((g|0)>0){f=-1;break}else return}u=v=0;f=54;break;case 54:W=X+1|0;V=c[j>>2]|0;l=c[V+184>>2]|0;if((W|0)<(c[l+(m*44|0)>>2]|0)){X=W;Y=l;Z=V;f=31;break}else{_=V;f=55;break};case 55:V=m-1|0;if((V|0)>0){m=V;n=_;f=30;break}else{f=56;break};case 56:Aa=BF(178392,f,h)|0;f=61;break;case 61:if((Aa|0)==0){f=57;break}else{f=58;break};case 57:V=c[j>>2]|0;if((c[V+172>>2]|0)<1){f=60;break}else{Ba=1;Ca=V;f=59;break};case 58:pa(16,3,129512,(V=i,i=i+1|0,i=i+7&-8,c[V>>2]=0,V)|0)|0;if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,h)|0;if((g|0)>0){f=-1;break}else return}u=v=0;i=V;f=60;break;case 59:ka(106,c[(c[Ca+176>>2]|0)+(Ba<<2)>>2]|0);if((u|0)!=0&(v|0)!=0){g=CF(c[u>>2]|0,h)|0;if((g|0)>0){f=-1;break}else return}u=v=0;V=c[j>>2]|0;if((Ba|0)<(c[V+172>>2]|0)){Ba=Ba+1|0;Ca=V;f=59;break}else{f=60;break};case 60:i=e;return;case-1:if((g|0)==56){Aa=v;f=61}u=v=0;break}}function oo(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;g=a+8|0;h=c[(c[g>>2]|0)+184>>2]|0;i=c[h+(b*44|0)+4>>2]|0;j=c[i+(d<<2)>>2]|0;k=d+1|0;do{if((d|0)<(e|0)){l=(f|0)==1;m=j+8|0;n=k;o=i;while(1){p=c[o+(n<<2)>>2]|0;q=p+8|0;r=c[q>>2]|0;do{if(l){s=c[c[r+180>>2]>>2]|0;if((s|0)==0){t=r;break}else{u=s;v=r}while(1){s=c[(c[m>>2]|0)+180>>2]|0;w=c[s>>2]|0;x=c[u>>2]|0;a:do{if((w|0)==0){y=u-32|0;z=14}else{A=u-32|0;B=c[((x&3|0)==2?u:A)+28>>2]|0;C=0;D=w;while(1){E=C+1|0;if((c[((c[D>>2]&3|0)==2?D:D-32|0)+28>>2]|0)==(B|0)){break}F=c[s+(E<<2)>>2]|0;if((F|0)==0){y=A;z=14;break a}else{C=E;D=F}}if((D|0)==0){y=A;z=14}else{G=D;H=v}}}while(0);if((z|0)==14){z=0;s=Zo(j,c[((x&3|0)==2?u:y)+28>>2]|0,u)|0;G=s;H=c[q>>2]|0}s=c[c[H+172>>2]>>2]|0;if((s|0)!=0){w=s;do{ep(w,G);Vo(w);w=c[c[(c[q>>2]|0)+172>>2]>>2]|0;}while((w|0)!=0)}Vo(u);w=c[q>>2]|0;x=c[c[w+180>>2]>>2]|0;if((x|0)==0){t=w;break}else{u=x;v=w}}}else{w=c[c[r+172>>2]>>2]|0;if((w|0)==0){t=r;break}else{I=w;J=r}while(1){w=c[(c[m>>2]|0)+172>>2]|0;x=c[w>>2]|0;s=c[I>>2]|0;b:do{if((x|0)==0){K=I+32|0;z=24}else{C=I+32|0;B=c[((s&3|0)==3?I:C)+28>>2]|0;F=0;E=x;while(1){L=F+1|0;if((c[((c[E>>2]&3|0)==3?E:E+32|0)+28>>2]|0)==(B|0)){break}M=c[w+(L<<2)>>2]|0;if((M|0)==0){K=C;z=24;break b}else{F=L;E=M}}if((E|0)==0){K=C;z=24}else{N=E;O=J}}}while(0);if((z|0)==24){z=0;w=Zo(c[((s&3|0)==3?I:K)+28>>2]|0,j,I)|0;N=w;O=c[q>>2]|0}w=c[c[O+180>>2]>>2]|0;if((w|0)!=0){x=w;do{ep(x,N);Vo(x);x=c[c[(c[q>>2]|0)+180>>2]>>2]|0;}while((x|0)!=0)}Vo(I);x=c[q>>2]|0;s=c[c[x+172>>2]>>2]|0;if((s|0)==0){t=x;break}else{I=s;J=x}}}}while(0);if((c[t+176>>2]|0)!=(-(c[t+184>>2]|0)|0)){z=29;break}ap(a,p);if((n|0)>=(e|0)){z=3;break}n=n+1|0;o=c[(c[(c[g>>2]|0)+184>>2]|0)+(b*44|0)+4>>2]|0}if((z|0)==3){P=c[(c[g>>2]|0)+184>>2]|0;break}else if((z|0)==29){cc(115624,108424,115,170248)}}else{P=h}}while(0);h=e+1|0;e=P+(b*44|0)|0;if((h|0)<(c[e>>2]|0)){Q=k;R=h;S=P}else{T=k;U=e;c[U>>2]=T;V=c[g>>2]|0;W=V+184|0;X=W;Y=c[X>>2]|0;Z=Y+(b*44|0)+4|0;_=c[Z>>2]|0;$=_+(T<<2)|0;c[$>>2]=0;return}while(1){e=c[S+(b*44|0)+4>>2]|0;k=c[e+(R<<2)>>2]|0;c[e+(Q<<2)>>2]=k;c[(c[k+8>>2]|0)+236>>2]=Q;k=Q+1|0;e=R+1|0;P=c[(c[g>>2]|0)+184>>2]|0;h=P+(b*44|0)|0;if((e|0)<(c[h>>2]|0)){Q=k;R=e;S=P}else{T=k;U=h;break}}c[U>>2]=T;V=c[g>>2]|0;W=V+184|0;X=W;Y=c[X>>2]|0;Z=Y+(b*44|0)+4|0;_=c[Z>>2]|0;$=_+(T<<2)|0;c[$>>2]=0;return}function po(d){d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0;e=i;f=d+8|0;g=c[f>>2]|0;h=b[g+224>>1]|0;if(h<<16>>16<=(b[g+226>>1]|0)){j=h<<16>>16;h=g;while(1){c[(c[h+256>>2]|0)+(j<<2)>>2]=0;g=c[f>>2]|0;if((j|0)<(b[g+226>>1]|0)){j=j+1|0;h=g}else{break}}}Xp(d);h=ux(d)|0;if((h|0)!=0){j=h;do{h=c[j+8>>2]|0;g=(c[(c[f>>2]|0)+256>>2]|0)+(c[h+232>>2]<<2)|0;k=c[g>>2]|0;if((k|0)==0){l=7}else{if((c[(c[k+8>>2]|0)+236>>2]|0)>(c[h+236>>2]|0)){l=7}}if((l|0)==7){l=0;c[g>>2]=j}g=mw(d,j)|0;if((g|0)!=0){h=g;do{g=c[(c[h+8>>2]|0)+172>>2]|0;if((g|0)==0){m=h}else{k=g;while(1){g=c[(c[k+8>>2]|0)+172>>2]|0;if((g|0)==0){break}else{k=g}}m=k}g=m;n=c[g>>2]|0;o=m-32|0;p=c[((n&3|0)==2?m:o)+28>>2]|0;q=c[p+8>>2]|0;r=c[q+232>>2]|0;s=h;t=c[s>>2]|0;u=h-32|0;if((r|0)<(c[(c[(c[((t&3|0)==2?h:u)+28>>2]|0)+8>>2]|0)+232>>2]|0)){v=m;w=g;g=o;o=p;p=q;q=r;r=n;n=t;while(1){t=(c[(c[f>>2]|0)+256>>2]|0)+(q<<2)|0;x=c[t>>2]|0;if((x|0)==0){l=15}else{if((c[(c[x+8>>2]|0)+236>>2]|0)>(c[p+236>>2]|0)){l=15}else{y=r;z=n}}if((l|0)==15){l=0;c[t>>2]=o;y=c[w>>2]|0;z=c[s>>2]|0}t=c[c[(c[(c[((y&3|0)==2?v:g)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;x=t;A=c[x>>2]|0;B=t-32|0;C=c[((A&3|0)==2?t:B)+28>>2]|0;D=c[C+8>>2]|0;E=c[D+232>>2]|0;if((E|0)<(c[(c[(c[((z&3|0)==2?h:u)+28>>2]|0)+8>>2]|0)+232>>2]|0)){v=t;w=x;g=B;o=C;p=D;q=E;r=A;n=z}else{break}}}h=ow(d,h)|0;}while((h|0)!=0)}j=vx(d,j)|0;}while((j|0)!=0)}j=c[f>>2]|0;z=b[j+224>>1]|0;a:do{if(z<<16>>16>(b[j+226>>1]|0)){F=j}else{y=d|0;m=z<<16>>16;h=j;while(1){G=c[(c[h+256>>2]|0)+(m<<2)>>2]|0;H=G+8|0;n=c[(c[H>>2]|0)+236>>2]|0;if((c[(c[(c[(c[(Ix(y)|0)+8>>2]|0)+184>>2]|0)+(m*44|0)+4>>2]|0)+(n<<2)>>2]|0)!=(G|0)){break}n=c[(c[(c[(Ix(y)|0)+8>>2]|0)+184>>2]|0)+(m*44|0)+4>>2]|0;r=c[f>>2]|0;c[(c[r+184>>2]|0)+(m*44|0)+4>>2]=n+(c[(c[(c[(c[r+256>>2]|0)+(m<<2)>>2]|0)+8>>2]|0)+236>>2]<<2);r=c[(c[f>>2]|0)+184>>2]|0;if((c[r+(m*44|0)>>2]|0)>0){n=0;q=-1;p=r;b:while(1){r=c[(c[p+(m*44|0)+4>>2]|0)+(n<<2)>>2]|0;if((r|0)==0){I=q;break}o=c[r+8>>2]|0;do{if((a[o+156|0]|0)==0){if((Rx(d,r|0)|0)==0){I=q;break b}else{J=n}}else{g=c[c[o+172>>2]>>2]|0;if((g|0)==0){J=q;break}else{K=g}while(1){g=c[(c[K+8>>2]|0)+116>>2]|0;if((g|0)==0){break}K=g}g=K;if((Rx(d,c[((c[g>>2]&3|0)==3?K:K+32|0)+28>>2]|0)|0)==0){J=q;break}w=(Rx(d,c[((c[g>>2]&3|0)==2?K:K-32|0)+28>>2]|0)|0)==0;J=w?q:n}}while(0);o=n+1|0;r=c[(c[f>>2]|0)+184>>2]|0;if((o|0)<(c[r+(m*44|0)>>2]|0)){n=o;q=J;p=r}else{I=J;break}}if((I|0)==-1){l=35}else{L=I}}else{l=35}if((l|0)==35){l=0;p=$w(y)|0;Fv(0,128768,(M=i,i=i+16|0,c[M>>2]=p,c[M+8>>2]=m,M)|0)|0;i=M;L=-1}c[(c[(c[f>>2]|0)+184>>2]|0)+(m*44|0)>>2]=L+1;p=c[f>>2]|0;if((m|0)<(b[p+226>>1]|0)){m=m+1|0;h=p}else{F=p;break a}}h=$w(G|0)|0;y=c[(c[H>>2]|0)+236>>2]|0;Fv(1,159192,(M=i,i=i+24|0,c[M>>2]=h,c[M+8>>2]=y,c[M+16>>2]=m,M)|0)|0;i=M;rc(178392,1)}}while(0);if((c[F+172>>2]|0)<1){i=e;return}else{N=1;O=F}while(1){po(c[(c[O+176>>2]|0)+(N<<2)>>2]|0);F=c[f>>2]|0;if((N|0)<(c[F+172>>2]|0)){N=N+1|0;O=F}else{break}}i=e;return}function qo(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[53734]=b;e=(a[215384]|0)+1&255;a[215384]=e<<24>>24==0?1:e;e=b+8|0;c[(c[e>>2]|0)+208>>2]=0;c[(c[e>>2]|0)+220>>2]=0;e=ux(b)|0;if((e|0)==0){return}if((d|0)>0){f=e}else{d=e;do{do{if((d|0)==(Lm(d)|0)){if((a[(c[d+8>>2]|0)+157|0]|0)==(a[215384]|0)){break}c[(c[(c[53734]|0)+8>>2]|0)+180>>2]=0;c[53672]=0;ro(d);e=(c[(c[53734]|0)+8>>2]|0)+208|0;g=c[e>>2]|0;c[e>>2]=g+1;e=(c[(c[53734]|0)+8>>2]|0)+204|0;h=c[e>>2]|0;if((h|0)==0){i=kk(c[e+4>>2]<<2)|0}else{i=mk(h,c[e+4>>2]<<2)|0}c[(c[(c[53734]|0)+8>>2]|0)+204>>2]=i;e=c[(c[53734]|0)+8>>2]|0;c[(c[e+204>>2]|0)+(g<<2)>>2]=c[e+180>>2]}}while(0);d=vx(b,d)|0;}while((d|0)!=0);return}do{d=c[f+8>>2]|0;i=c[d+212>>2]|0;if((i|0)==0){if((f|0)==(Lm(f)|0)){j=f;k=6}}else{j=c[(c[(c[i+8>>2]|0)+256>>2]|0)+(c[d+232>>2]<<2)>>2]|0;k=6}do{if((k|0)==6){k=0;if((a[(c[j+8>>2]|0)+157|0]|0)==(a[215384]|0)){break}c[(c[(c[53734]|0)+8>>2]|0)+180>>2]=0;c[53672]=0;ro(j);d=(c[(c[53734]|0)+8>>2]|0)+208|0;i=c[d>>2]|0;c[d>>2]=i+1;d=(c[(c[53734]|0)+8>>2]|0)+204|0;e=c[d>>2]|0;if((e|0)==0){l=kk(c[d+4>>2]<<2)|0}else{l=mk(e,c[d+4>>2]<<2)|0}c[(c[(c[53734]|0)+8>>2]|0)+204>>2]=l;d=c[(c[53734]|0)+8>>2]|0;c[(c[d+204>>2]|0)+(i<<2)>>2]=c[d+180>>2]}}while(0);f=vx(b,f)|0;}while((f|0)!=0);return}function ro(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;i=i+32|0;e=d|0;f=(c[(c[53734]|0)+8>>2]|0)+220|0;c[f>>2]=(c[f>>2]|0)+1;f=b+8|0;a[(c[f>>2]|0)+157|0]=a[215384]|0;g=c[53672]|0;h=(c[f>>2]|0)+168|0;if((g|0)==0){c[h>>2]=0;c[(c[(c[53734]|0)+8>>2]|0)+180>>2]=b}else{c[h>>2]=g;c[(c[(c[53672]|0)+8>>2]|0)+164>>2]=b}c[53672]=b;c[(c[f>>2]|0)+164>>2]=0;g=c[f>>2]|0;f=g+180|0;h=e;j=c[f+4>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=j;j=g+172|0;h=e+8|0;f=c[j+4>>2]|0;c[h>>2]=c[j>>2];c[h+4>>2]=f;f=g+188|0;h=e+16|0;j=c[f+4>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=j;j=g+196|0;g=e+24|0;h=c[j+4>>2]|0;c[g>>2]=c[j>>2];c[g+4>>2]=h;h=0;do{g=c[e+(h<<3)>>2]|0;do{if((g|0)!=0){j=c[g>>2]|0;if((j|0)==0){break}else{k=0;l=j}do{j=c[l>>2]&3;f=c[((j|0)==2?l:l-32|0)+28>>2]|0;if((f|0)==(b|0)){m=c[((j|0)==3?l:l+32|0)+28>>2]|0}else{m=f}do{if((a[(c[m+8>>2]|0)+157|0]|0)!=(a[215384]|0)){if((m|0)!=(Lm(m)|0)){break}ro(m)}}while(0);k=k+1|0;l=c[g+(k<<2)>>2]|0;}while((l|0)!=0)}}while(0);h=h+1|0;}while((h|0)<4);i=d;return}function so(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=ux(d)|0;if((e|0)!=0){f=e;do{e=f|0;Wx(e,162896,304,1)|0;Ym(f);vn(f,c[(c[(Hx(e)|0)+8>>2]|0)+116>>2]&1);e=f+8|0;c[(c[e>>2]|0)+176>>2]=0;g=jk(20)|0;c[(c[e>>2]|0)+172>>2]=g;c[(c[e>>2]|0)+184>>2]=0;g=jk(20)|0;c[(c[e>>2]|0)+180>>2]=g;c[(c[e>>2]|0)+200>>2]=0;g=jk(12)|0;c[(c[e>>2]|0)+196>>2]=g;c[(c[e>>2]|0)+192>>2]=0;g=jk(12)|0;c[(c[e>>2]|0)+188>>2]=g;c[(c[e>>2]|0)+208>>2]=0;g=jk(12)|0;c[(c[e>>2]|0)+204>>2]=g;c[(c[e>>2]|0)+216>>2]=1;f=vx(d,f)|0;}while((f|0)!=0)}f=ux(d)|0;if((f|0)==0){return}else{h=f}do{f=mw(d,h)|0;if((f|0)!=0){e=f;do{f=e|0;Wx(f,158888,176,1)|0;Zm(e)|0;g=Em(f,c[53750]|0,1,0)|0;i=e+8|0;c[(c[i>>2]|0)+156>>2]=g;g=e;j=Hm(c[((c[g>>2]&3|0)==3?e:e+32|0)+28>>2]|0,c[53620]|0,213336)|0;k=Hm(c[((c[g>>2]&3|0)==2?e:e-32|0)+28>>2]|0,c[53620]|0,213336)|0;b[(c[i>>2]|0)+154>>1]=1;b[(c[i>>2]|0)+168>>1]=1;if((a[j]|0)!=0&(j|0)==(k|0)){b[(c[i>>2]|0)+154>>1]=1e3;k=(c[i>>2]|0)+156|0;c[k>>2]=(c[k>>2]|0)*100|0}if((Vn(e)|0)!=0){b[(c[i>>2]|0)+154>>1]=0;c[(c[i>>2]|0)+156>>2]=0}k=(Em(f,c[53762]|0,0,0)|0)&255;a[(c[i>>2]|0)+152|0]=k;k=(Em(f,c[53774]|0,1,0)|0)&65535;b[(c[i>>2]|0)+170>>1]=k;e=ow(d,e)|0;}while((e|0)!=0)}h=vx(d,h)|0;}while((h|0)!=0);return}function to(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=c[(c[b+8>>2]|0)+180>>2]|0;if((d|0)!=0){e=d;while(1){d=e+8|0;f=c[d>>2]|0;g=c[f+164>>2]|0;h=c[f+176>>2]|0;if((h|0)>0){i=h;h=f;while(1){j=i-1|0;k=c[(c[h+172>>2]|0)+(j<<2)>>2]|0;Vo(k);eF(c[k+8>>2]|0);eF(k|0);k=c[d>>2]|0;if((j|0)>0){i=j;h=k}else{l=k;break}}}else{l=f}h=l+180|0;i=c[h+4>>2]|0;if((i|0)>0){k=i-1|0;i=c[(c[h>>2]|0)+(k<<2)>>2]|0;Vo(i);eF(c[i+8>>2]|0);eF(i|0);if((k|0)>0){i=k;do{i=i-1|0;k=c[(c[(c[d>>2]|0)+180>>2]|0)+(i<<2)>>2]|0;Vo(k);eF(c[k+8>>2]|0);eF(k|0);}while((i|0)>0)}m=c[d>>2]|0}else{m=l}if((a[m+156|0]|0)==1){i=c[m+180>>2]|0;if((i|0)==0){n=m}else{eF(i);n=c[d>>2]|0}i=c[n+172>>2]|0;if((i|0)==0){o=n}else{eF(i);o=c[d>>2]|0}eF(o);eF(e)}if((g|0)==0){break}else{e=g}}}e=ux(b)|0;if((e|0)==0){vo(b);return}else{p=e}do{e=mw(b,p)|0;if((e|0)!=0){o=e;do{tn(o);o=ow(b,o)|0;}while((o|0)!=0)}uo(p);p=vx(b,p)|0;}while((p|0)!=0);vo(b);return}function uo(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;b=a+8|0;d=c[b>>2]|0;e=c[d+172>>2]|0;if((e|0)==0){f=d}else{eF(e);f=c[b>>2]|0}e=c[f+180>>2]|0;if((e|0)==0){g=f}else{eF(e);g=c[b>>2]|0}e=c[g+188>>2]|0;if((e|0)==0){h=g}else{eF(e);h=c[b>>2]|0}e=c[h+196>>2]|0;if((e|0)==0){i=h}else{eF(e);i=c[b>>2]|0}e=c[i+204>>2]|0;if((e|0)==0){j=i}else{eF(e);j=c[b>>2]|0}dk(c[j+104>>2]|0);j=c[(c[b>>2]|0)+8>>2]|0;if((j|0)==0){k=a|0;l=Xx(k,162896)|0;return}Cc[c[(c[j+4>>2]|0)+4>>2]&255](a);k=a|0;l=Xx(k,162896)|0;return}function vo(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=sy(a)|0;if((d|0)!=0){e=d;do{vo(e);e=ty(e)|0;}while((e|0)!=0)}e=a+8|0;d=c[e>>2]|0;f=c[d+176>>2]|0;if((f|0)==0){g=d}else{eF(f);g=c[e>>2]|0}f=c[g+256>>2]|0;if((f|0)==0){h=g}else{eF(f);h=c[e>>2]|0}f=c[h+204>>2]|0;if((f|0)==0){i=h}else{eF(f);i=c[e>>2]|0}f=c[i+184>>2]|0;do{if((f|0)!=0){h=b[i+224>>1]|0;if(h<<16>>16>(b[i+226>>1]|0)){j=h;k=f}else{g=h<<16>>16;h=f;while(1){eF(c[h+(g*44|0)+12>>2]|0);l=c[e>>2]|0;if((g|0)>=(b[l+226>>1]|0)){break}g=g+1|0;h=c[l+184>>2]|0}j=b[l+224>>1]|0;k=c[l+184>>2]|0}if(j<<16>>16==-1){eF(k-44|0);break}else{eF(k);break}}}while(0);k=a|0;if((Ix(k)|0)==(a|0)){return}Xx(k,167088)|0;return}function wo(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0;d=i;i=i+40|0;e=d|0;f=a|0;g=Em(f,Wv(a,0,120216,0)|0,-1,1)|0;qn(a,10);h=Sn(a,e)|0;xo(a);so(a);j=e+32|0;k=(g|0)==2;l=(g|0)==3;m=e+28|0;n=e+24|0;if((g|0)==1){Zp(a,h);yo(a,1);i=d;return}else{o=h}while(1){Zp(a,o);if((c[j>>2]|0)==0){p=o}else{Fv(0,157336,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0)|0;i=h;c[n>>2]=0;p=0}jp(a,(p|0)!=0|0);if(k){q=6;break}Hp(a,p);if(l){q=8;break}h=(c[m>>2]|0)-1|0;c[m>>2]=h;if((c[n>>2]|0)==0|(h|0)==0){q=10;break}else{o=p}}if((q|0)==6){yo(a,2);i=d;return}else if((q|0)==8){yo(a,2);i=d;return}else if((q|0)==10){p=a+8|0;do{if((b[(c[p>>2]|0)+128>>1]&16)!=0){o=ry(a,115032,0)|0;if((o|0)==0){break}n=ux(o)|0;a:do{if((n|0)!=0){m=n;while(1){l=vx(o,m)|0;ap(a,m);k=c[(c[m+8>>2]|0)+232>>2]|0;j=c[(c[p>>2]|0)+184>>2]|0;h=j+(k*44|0)|0;g=c[h>>2]|0;e=j+(k*44|0)+4|0;j=0;r=0;while(1){if((r|0)>=(g|0)){q=20;break}s=c[e>>2]|0;t=s+(r<<2)|0;u=c[t>>2]|0;v=r+1|0;if((u|0)==(m|0)){q=16;break}else{j=u;r=v}}if((q|0)==16){q=0;do{if((v|0)<(g|0)){c[t>>2]=c[s+(v<<2)>>2];e=r+2|0;u=c[(c[p>>2]|0)+184>>2]|0;w=u+(k*44|0)|0;x=c[w>>2]|0;if((e|0)<(x|0)){y=e;z=u}else{A=w;B=x;break}while(1){x=c[z+(k*44|0)+4>>2]|0;c[x+(y-1<<2)>>2]=c[x+(y<<2)>>2];x=y+1|0;w=c[(c[p>>2]|0)+184>>2]|0;u=w+(k*44|0)|0;e=c[u>>2]|0;if((x|0)<(e|0)){y=x;z=w}else{A=u;B=e;break}}}else{A=h;B=g}}while(0);c[A>>2]=B-1}else if((q|0)==20){q=0;if((j|0)!=(m|0)){break}}uo(m);Cx(a,m)|0;if((l|0)==0){break a}else{m=l}}cc(107992,102136,238,170008)}}while(0);vy(a,o)|0}}while(0);pq(a);Ao(a);if((Km(ew(f,127320)|0)|0)<<24>>24!=0){io(a)}Xk(a);i=d;return}}function xo(a){a=a|0;var b=0,c=0;b=a|0;if((Ix(b)|0)!=(a|0)){Wx(b,167088,272,1)|0}b=sy(a)|0;if((b|0)==0){return}else{c=b}do{xo(c);c=ty(c)|0;}while((c|0)!=0);return}function yo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;i=i+1024|0;e=Wv(a,1,96272,213336)|0;f=Wv(a,1,85640,213336)|0;g=ux(a)|0;if((g|0)==0){i=d;return}h=d|0;if((b|0)<=0){j=g;do{j=vx(a,j)|0;}while((j|0)!=0);i=d;return}if((b|0)>1){b=g;do{j=b+8|0;nb(h|0,80896,(k=i,i=i+8|0,c[k>>2]=c[(c[j>>2]|0)+232>>2],k)|0)|0;i=k;l=b|0;hw(l,e,h)|0;nb(h|0,80896,(k=i,i=i+8|0,c[k>>2]=c[(c[j>>2]|0)+236>>2],k)|0)|0;i=k;hw(l,f,h)|0;b=vx(a,b)|0;}while((b|0)!=0);i=d;return}else{b=g;do{nb(h|0,80896,(k=i,i=i+8|0,c[k>>2]=c[(c[b+8>>2]|0)+232>>2],k)|0)|0;i=k;hw(b|0,e,h)|0;b=vx(a,b)|0;}while((b|0)!=0);i=d;return}}function zo(b,c){b=b|0;c=c|0;var d=0,e=0,f=0,g=0;d=i;e=b;b=i;i=i+40|0;tF(b,e,40)|0;e=c;c=i;i=i+40|0;tF(c,e,40)|0;e=a[b+28|0]|0;do{if((a[c+28|0]|0)==0){f=e<<24>>24!=0|0}else{if(e<<24>>24==0){f=-1;break}g=~~(+h[b>>3]- +h[c>>3]);if((g|0)!=0){f=g;break}f=~~(+h[b+8>>3]- +h[c+8>>3])}}while(0);i=d;return f|0}function Ao(a){a=a|0;Bo(a,1);return}function Bo(d,e){d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0.0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0.0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Vb=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0,xc=0,yc=0,zc=0,Ac=0,Bc=0,Cc=0,Dc=0,Fc=0,Gc=0,Hc=0,Ic=0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0,Pc=0,Qc=0,Rc=0,Sc=0,Tc=0,Uc=0,Vc=0,Wc=0,Xc=0,Yc=0,Zc=0,_c=0,$c=0,ad=0,bd=0,cd=0,dd=0,ed=0,fd=0,gd=0.0,hd=0.0,id=0.0,jd=0,kd=0,ld=0.0,md=0,nd=0.0,od=0,pd=0.0,qd=0.0,rd=0,sd=0.0,td=0,ud=0,vd=0,wd=0,xd=0,yd=0,zd=0,Ad=0,Bd=0,Cd=0,Dd=0,Ed=0,Fd=0.0,Gd=0.0,Hd=0.0,Id=0.0,Jd=0,Kd=0,Ld=0,Md=0,Nd=0.0,Od=0.0,Pd=0,Qd=0,Rd=0,Sd=0,Td=0,Ud=0,Vd=0,Wd=0,Xd=0,Yd=0,Zd=0,_d=0,$d=0,ae=0,be=0,ce=0,de=0,ee=0,fe=0,ge=0,he=0,ie=0,je=0,ke=0,le=0,me=0,ne=0.0,oe=0.0,pe=0.0,qe=0.0,re=0.0,se=0.0,te=0.0,ue=0,ve=0,we=0,xe=0,ye=0,ze=0,Ae=0,Be=0,Ce=0,De=0,Ee=0,Fe=0,Ge=0,He=0,Ie=0,Je=0,Ke=0.0,Le=0.0,Me=0.0,Ne=0.0,Oe=0,Pe=0,Qe=0,Re=0,Se=0,Te=0,Ue=0,Ve=0,We=0,Xe=0,Ye=0,Ze=0,_e=0,$e=0,af=0,bf=0,cf=0,df=0;f=i;i=i+7336|0;g=f|0;j=f+8|0;k=f+704|0;l=f+1400|0;m=f+2096|0;n=f+2792|0;o=f+2800|0;p=f+2912|0;q=f+3088|0;r=f+3152|0;s=f+3160|0;t=f+3856|0;u=f+4552|0;v=f+4728|0;w=f+4904|0;x=f+5080|0;y=f+5144|0;z=f+5208|0;A=f+5272|0;B=f+5968|0;C=f+6664|0;D=f+6672|0;E=f+6704|0;F=f+6736|0;G=f+6768|0;H=f+6800|0;I=f+7184|0;J=f+7248|0;K=f+7312|0;L=d+8|0;M=b[(c[L>>2]|0)+128>>1]&14;N=I|0;O=I+8|0;c[O>>2]=f+6832;P=J|0;Q=J+8|0;c[Q>>2]=f+7008;do{if((M|0)==4){R=ux(d)|0;if((R|0)!=0){S=R;do{R=S+8|0;T=c[R>>2]|0;if((c[T+204>>2]|0)!=0){U=T+96|0;V=+h[U>>3];h[U>>3]=+(c[T+240>>2]|0);c[(c[R>>2]|0)+240>>2]=~~V}S=vx(d,S)|0;}while((S|0)!=0)}if((a[(c[L>>2]|0)+113|0]&1)!=0){Fv(0,110208,(S=i,i=i+1|0,i=i+7&-8,c[S>>2]=0,S)|0)|0;i=S}S=ux(d)|0;if((S|0)==0){W=0;X=0;break}else{Y=S}while(1){S=mw(d,Y)|0;if((S|0)!=0){R=S;do{ll(d,R,4,11848);R=ow(d,R)|0;}while((R|0)!=0)}R=vx(d,Y)|0;if((R|0)==0){W=0;X=0;break}else{Y=R}}}else if((M|0)==0){i=f;return}else{go(d);if((gl()|0)!=0){i=f;return}R=jk(96)|0;S=R;T=c[(c[L>>2]|0)+236>>2]|0;c[K+8>>2]=(T|0)/4|0;U=K+12|0;c[U>>2]=T;T=jk(512)|0;Z=K+4|0;c[Z>>2]=0;_=K|0;c[_>>2]=0;$=c[L>>2]|0;aa=b[$+224>>1]|0;ba=aa<<16>>16;do{if(aa<<16>>16>(b[$+226>>1]|0)){ca=T;ea=0;fa=11520;ga=ba}else{ha=T;ia=0;ja=0;ka=ba;la=$;a:while(1){ma=c[la+184>>2]|0;na=c[ma+(ka*44|0)>>2]|0;oa=na+ja|0;pa=c[ma+(ka*44|0)+4>>2]|0;ma=c[pa>>2]|0;if((ma|0)!=0){V=+(c[_>>2]|0);qa=c[ma+8>>2]|0;ra=+h[qa+16>>3]- +h[qa+88>>3];c[_>>2]=~~(V<ra?V:ra)}do{if((na|0)!=0){qa=c[pa+(na-1<<2)>>2]|0;if((qa|0)==0){break}ra=+(c[Z>>2]|0);sa=c[qa+8>>2]|0;V=+h[sa+16>>3]+ +h[sa+96>>3];c[Z>>2]=~~(ra>V?ra:V)}}while(0);c[_>>2]=(c[_>>2]|0)-16;c[Z>>2]=(c[Z>>2]|0)+16;b:do{if((na|0)>0){pa=ha;sa=ia;qa=1;ta=ma;while(1){ua=ta+8|0;va=c[ua>>2]|0;wa=c[va+112>>2]|0;if((wa|0)==0){xa=va}else{ya=wa+8|0;wa=c[(c[ya>>2]|0)+96>>2]|0;if((wa|0)==0){za=22;break a}Aa=wa+56|0;wa=va+16|0;c[Aa>>2]=c[wa>>2];c[Aa+4>>2]=c[wa+4>>2];c[Aa+8>>2]=c[wa+8>>2];c[Aa+12>>2]=c[wa+12>>2];a[(c[(c[ya>>2]|0)+96>>2]|0)+81|0]=1;xa=c[ua>>2]|0}do{if((a[xa+156|0]|0)==0){Ba=xa;za=27}else{if((Ec[c[2963]&63](ta)|0)<<24>>24==0){Ca=sa;Da=pa;break}Ba=c[ua>>2]|0;za=27}}while(0);do{if((za|0)==27){za=0;ya=c[c[Ba+180>>2]>>2]|0;if((ya|0)==0){Ea=pa;Fa=sa;Ga=Ba}else{wa=pa;Aa=sa;va=0;Ha=ya;while(1){ya=c[Ha+8>>2]|0;Ia=a[ya+112|0]|0;do{if((Ia<<24>>24|0)==4|(Ia<<24>>24|0)==6){Ja=Aa;Ka=wa}else{c[ya+164>>2]=81;La=Aa+1|0;c[wa+(Aa<<2)>>2]=Ha;if((La&127|0)!=0){Ja=La;Ka=wa;break}if((wa|0)==0){Ma=kk((Aa<<2)+516|0)|0}else{Ma=mk(wa,(Aa<<2)+516|0)|0}Ja=La;Ka=Ma}}while(0);ya=va+1|0;Ia=c[ua>>2]|0;La=c[(c[Ia+180>>2]|0)+(ya<<2)>>2]|0;if((La|0)==0){Ea=Ka;Fa=Ja;Ga=Ia;break}else{wa=Ka;Aa=Ja;va=ya;Ha=La}}}do{if((c[Ga+188>>2]|0)==0){Na=Fa;Oa=Ea;Pa=Ga}else{Ha=c[c[Ga+188>>2]>>2]|0;if((Ha|0)==0){Na=Fa;Oa=Ea;Pa=Ga;break}else{Qa=Ea;Ra=Fa;Sa=0;Ta=Ha}while(1){Ha=c[Ta>>2]&3;c[(c[Ta+8>>2]|0)+164>>2]=(c[(c[(c[((Ha|0)==3?Ta:Ta+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0)<(c[(c[(c[((Ha|0)==2?Ta:Ta-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0)?146:162;Ha=Ra+1|0;c[Qa+(Ra<<2)>>2]=Ta;if((Ha&127|0)==0){if((Qa|0)==0){Ua=kk((Ra<<2)+516|0)|0}else{Ua=mk(Qa,(Ra<<2)+516|0)|0}Va=Ua}else{Va=Qa}va=Sa+1|0;Aa=c[ua>>2]|0;wa=c[(c[Aa+188>>2]|0)+(va<<2)>>2]|0;if((wa|0)==0){Na=Ha;Oa=Va;Pa=Aa;break}else{Qa=Va;Ra=Ha;Sa=va;Ta=wa}}}}while(0);wa=c[Pa+204>>2]|0;if((wa|0)==0){Ca=Na;Da=Oa;break}if((a[Pa+156|0]|0)==0){va=Pa+96|0;V=+h[va>>3];h[va>>3]=+(c[Pa+240>>2]|0);c[(c[ua>>2]|0)+240>>2]=~~V;Wa=c[(c[ua>>2]|0)+204>>2]|0}else{Wa=wa}wa=c[Wa>>2]|0;if((wa|0)==0){Ca=Na;Da=Oa;break}else{Xa=Oa;Ya=Na;Za=0;_a=wa}while(1){wa=c[_a>>2]&3;va=c[((wa|0)==3?_a:_a+32|0)+28>>2]|0;Ha=c[((wa|0)==2?_a:_a-32|0)+28>>2]|0;do{if((va|0)==(Ha|0)){wa=c[_a+8>>2]|0;if((a[wa+44|0]|0)!=0){$a=16;ab=4;break}bb=(a[wa+84|0]|0)==0?8:4;za=51}else{bb=(c[(c[va+8>>2]|0)+232>>2]|0)==(c[(c[Ha+8>>2]|0)+232>>2]|0)?2:1;za=51}}while(0);do{if((za|0)==51){za=0;if((bb|0)==1){$a=(c[(c[va+8>>2]|0)+232>>2]|0)<(c[(c[Ha+8>>2]|0)+232>>2]|0)?16:32;ab=1;break}else if((bb|0)==2){$a=(c[(c[va+8>>2]|0)+236>>2]|0)<(c[(c[Ha+8>>2]|0)+236>>2]|0)?16:32;ab=2;break}else{$a=16;ab=bb;break}}}while(0);c[(c[_a+8>>2]|0)+164>>2]=ab|$a|128;Ha=Ya+1|0;c[Xa+(Ya<<2)>>2]=_a;if((Ha&127|0)==0){if((Xa|0)==0){cb=kk((Ya<<2)+516|0)|0}else{cb=mk(Xa,(Ya<<2)+516|0)|0}db=cb}else{db=Xa}va=Za+1|0;wa=c[(c[(c[ua>>2]|0)+204>>2]|0)+(va<<2)>>2]|0;if((wa|0)==0){Ca=Ha;Da=db;break}else{Xa=db;Ya=Ha;Za=va;_a=wa}}}}while(0);ua=c[L>>2]|0;wa=c[ua+184>>2]|0;if((qa|0)>=(c[wa+(ka*44|0)>>2]|0)){eb=Da;fb=Ca;gb=ua;break b}ua=c[(c[wa+(ka*44|0)+4>>2]|0)+(qa<<2)>>2]|0;pa=Da;sa=Ca;qa=qa+1|0;ta=ua}}else{eb=ha;fb=ia;gb=la}}while(0);hb=ka+1|0;if((ka|0)<(b[gb+226>>1]|0)){ha=eb;ia=fb;ja=oa;ka=hb;la=gb}else{za=63;break}}if((za|0)==22){cc(151800,123888,319,171096)}else if((za|0)==63){ca=eb;ea=fb;fa=(oa<<5)+11520|0;ga=hb;break}}}while(0);Jb(ca|0,ea|0,4,194);c[R+84>>2]=jk(fa)|0;$=K+16|0;c[$>>2]=jk(ga<<5)|0;ba=(M|0)==2;do{if(ba){T=c[(c[L>>2]|0)+180>>2]|0;if((T|0)==0){break}else{ib=T}do{T=ib+8|0;aa=c[T>>2]|0;do{if((a[aa+156|0]|0)==1){if((c[aa+104>>2]|0)==0){jb=aa;break}if((c[aa+176>>2]|0)==0){jb=aa;break}la=(c[c[aa+180>>2]>>2]|0)+8|0;ka=c[la>>2]|0;if((a[ka+112|0]|0)==0){kb=la;lb=ka}else{la=ka;while(1){ka=(c[la+116>>2]|0)+8|0;ja=c[ka>>2]|0;if((a[ja+112|0]|0)==0){kb=ka;lb=ja;break}else{la=ja}}}la=c[lb+96>>2]|0;V=+h[la+24>>3];ra=+h[la+32>>3];la=(c[(c[(Hx(ib)|0)+8>>2]|0)+116>>2]&1|0)==0;h[(c[(c[kb>>2]|0)+96>>2]|0)+56>>3]=+h[(c[T>>2]|0)+16>>3]+(la?V:ra)*.5;h[(c[(c[kb>>2]|0)+96>>2]|0)+64>>3]=+h[(c[T>>2]|0)+24>>3];a[(c[(c[kb>>2]|0)+96>>2]|0)+81|0]=1;jb=c[T>>2]|0}else{jb=aa}}while(0);ib=c[jb+164>>2]|0;}while((ib|0)!=0)}}while(0);if((ea|0)>0){aa=p;T=q|0;la=p|0;ja=q|0;ka=q+8|0;ia=s+52|0;ha=t+52|0;ma=(M|0)==10;na=R+80|0;ta=j+52|0;qa=k+52|0;sa=o;pa=o|0;ua=o|0;wa=o+8|0;va=o+16|0;Ha=o+64|0;Aa=o+72|0;La=o+48|0;ya=o+64|0;Ia=o+32|0;mb=o+96|0;nb=o+96|0;ob=o+104|0;pb=o+80|0;qb=l+52|0;rb=m+52|0;sb=q;tb=ja+32|0;ub=ja-32|0;vb=u;wb=v;xb=x|0;yb=y|0;zb=z|0;Ab=A;Bb=B;Cb=D;Db=E;Eb=F;Fb=G;Gb=H;Hb=u|0;Ib=x|0;Kb=x+8|0;Lb=v|0;Mb=y|0;Nb=y+8|0;Ob=w|0;Pb=z|0;Qb=z+8|0;Rb=x;Sb=Ib+32|0;Tb=Ib-32|0;Ub=y;Vb=Mb+32|0;Wb=Mb-32|0;Xb=z;Yb=Pb+32|0;Zb=Pb-32|0;_b=A|0;$b=A+16|0;ac=A+52|0;bc=B+52|0;dc=R+56|0;ec=R+69|0;fc=R+16|0;gc=R+29|0;hc=B|0;ic=B+16|0;jc=J|0;kc=J;lc=P+32|0;mc=P-32|0;nc=I|0;oc=I;pc=N+32|0;qc=N-32|0;rc=0;while(1){sc=ca+(rc<<2)|0;tc=c[sc>>2]|0;uc=tc+8|0;vc=c[uc>>2]|0;wc=c[vc+172>>2]|0;if((wc|0)==0){xc=tc;yc=vc}else{zc=wc;while(1){Ac=c[zc+8>>2]|0;wc=c[Ac+172>>2]|0;if((wc|0)==0){break}else{zc=wc}}xc=zc;yc=Ac}wc=c[yc+116>>2]|0;if((wc|0)==0){Bc=xc}else{Cc=wc;while(1){wc=c[(c[Cc+8>>2]|0)+116>>2]|0;if((wc|0)==0){break}else{Cc=wc}}Bc=Cc}if((a[vc+44|0]|0)==0){zc=(a[vc+84|0]|0)==0?Bc:tc;Dc=zc;Fc=c[zc+8>>2]|0}else{Dc=tc;Fc=vc}zc=Dc+8|0;if((c[Fc+164>>2]&32|0)==0){Gc=Dc}else{wc=c[O>>2]|0;tF(wc|0,Fc|0,176)|0;tF(nc|0,Dc|0,32)|0;c[O>>2]=wc;wc=Dc;c[((c[oc>>2]&3|0)==3?N:pc)+28>>2]=c[((c[wc>>2]&3|0)==2?Dc:Dc-32|0)+28>>2];c[((c[oc>>2]&3|0)==2?N:qc)+28>>2]=c[((c[wc>>2]&3|0)==3?Dc:Dc+32|0)+28>>2];wc=c[O>>2]|0;Hc=wc+16|0;Ic=(c[zc>>2]|0)+56|0;c[Hc>>2]=c[Ic>>2];c[Hc+4>>2]=c[Ic+4>>2];c[Hc+8>>2]=c[Ic+8>>2];c[Hc+12>>2]=c[Ic+12>>2];c[Hc+16>>2]=c[Ic+16>>2];c[Hc+20>>2]=c[Ic+20>>2];c[Hc+24>>2]=c[Ic+24>>2];c[Hc+28>>2]=c[Ic+28>>2];c[Hc+32>>2]=c[Ic+32>>2];c[Hc+36>>2]=c[Ic+36>>2];Ic=wc+56|0;Hc=(c[zc>>2]|0)+16|0;c[Ic>>2]=c[Hc>>2];c[Ic+4>>2]=c[Hc+4>>2];c[Ic+8>>2]=c[Hc+8>>2];c[Ic+12>>2]=c[Hc+12>>2];c[Ic+16>>2]=c[Hc+16>>2];c[Ic+20>>2]=c[Hc+20>>2];c[Ic+24>>2]=c[Hc+24>>2];c[Ic+28>>2]=c[Hc+28>>2];c[Ic+32>>2]=c[Hc+32>>2];c[Ic+36>>2]=c[Hc+36>>2];a[wc+112|0]=1;c[wc+116>>2]=Dc;Gc=N}wc=rc+1|0;c:do{if((wc|0)<(ea|0)){Hc=Gc+8|0;Ic=1;zc=wc;while(1){Jc=ca+(zc<<2)|0;Kc=c[Jc>>2]|0;Lc=Kc+8|0;Mc=c[Lc>>2]|0;Nc=c[Mc+172>>2]|0;if((Nc|0)==0){Oc=Kc;Pc=Mc}else{Qc=Nc;while(1){Rc=c[Qc+8>>2]|0;Nc=c[Rc+172>>2]|0;if((Nc|0)==0){break}else{Qc=Nc}}Oc=Qc;Pc=Rc}Nc=c[Pc+116>>2]|0;if((Nc|0)==0){Sc=Oc}else{Tc=Nc;while(1){Nc=c[(c[Tc+8>>2]|0)+116>>2]|0;if((Nc|0)==0){break}else{Tc=Nc}}Sc=Tc}if((Bc|0)!=(Sc|0)){Uc=Ic;Vc=zc;break c}if((a[(c[uc>>2]|0)+113|0]|0)==0){if((a[Mc+44|0]|0)==0){Qc=(a[Mc+84|0]|0)==0?Bc:Kc;Wc=Qc;Xc=c[Qc+8>>2]|0}else{Wc=Kc;Xc=Mc}Qc=Wc+8|0;if((c[Xc+164>>2]&32|0)==0){Yc=Xc}else{Nc=c[Q>>2]|0;tF(Nc|0,Xc|0,176)|0;tF(jc|0,Wc|0,32)|0;c[Q>>2]=Nc;Nc=Wc;c[((c[kc>>2]&3|0)==3?P:lc)+28>>2]=c[((c[Nc>>2]&3|0)==2?Wc:Wc-32|0)+28>>2];c[((c[kc>>2]&3|0)==2?P:mc)+28>>2]=c[((c[Nc>>2]&3|0)==3?Wc:Wc+32|0)+28>>2];Nc=c[Q>>2]|0;Zc=Nc+16|0;_c=(c[Qc>>2]|0)+56|0;c[Zc>>2]=c[_c>>2];c[Zc+4>>2]=c[_c+4>>2];c[Zc+8>>2]=c[_c+8>>2];c[Zc+12>>2]=c[_c+12>>2];c[Zc+16>>2]=c[_c+16>>2];c[Zc+20>>2]=c[_c+20>>2];c[Zc+24>>2]=c[_c+24>>2];c[Zc+28>>2]=c[_c+28>>2];c[Zc+32>>2]=c[_c+32>>2];c[Zc+36>>2]=c[_c+36>>2];_c=Nc+56|0;Zc=(c[Qc>>2]|0)+16|0;c[_c>>2]=c[Zc>>2];c[_c+4>>2]=c[Zc+4>>2];c[_c+8>>2]=c[Zc+8>>2];c[_c+12>>2]=c[Zc+12>>2];c[_c+16>>2]=c[Zc+16>>2];c[_c+20>>2]=c[Zc+20>>2];c[_c+24>>2]=c[Zc+24>>2];c[_c+28>>2]=c[Zc+28>>2];c[_c+32>>2]=c[Zc+32>>2];c[_c+36>>2]=c[Zc+36>>2];a[Nc+112|0]=1;c[Nc+116>>2]=Wc;Yc=Nc}Nc=c[Hc>>2]|0;Zc=Nc+16|0;_c=Yc+16|0;Qc=a[Nc+44|0]|0;if((a[Yc+44|0]|0)==0){$c=Qc<<24>>24!=0|0}else{if(Qc<<24>>24==0){Uc=Ic;Vc=zc;break c}if((~~(+h[Zc>>3]- +h[_c>>3])|0)!=0){Uc=Ic;Vc=zc;break c}$c=~~(+h[Nc+24>>3]- +h[Yc+24>>3])}if(($c|0)!=0){Uc=Ic;Vc=zc;break c}_c=Nc+56|0;Zc=Yc+56|0;Qc=a[Nc+84|0]|0;if((a[Yc+84|0]|0)==0){ad=Qc<<24>>24!=0|0}else{if(Qc<<24>>24==0){Uc=Ic;Vc=zc;break c}if((~~(+h[_c>>3]- +h[Zc>>3])|0)!=0){Uc=Ic;Vc=zc;break c}ad=~~(+h[Nc+64>>3]- +h[Yc+64>>3])}if((ad|0)!=0){Uc=Ic;Vc=zc;break c}Nc=c[uc>>2]|0;if((c[Nc+164>>2]&15|0)==2){if((c[Nc+96>>2]|0)!=(c[(c[Lc>>2]|0)+96>>2]|0)){Uc=Ic;Vc=zc;break c}}if((c[(c[(c[Jc>>2]|0)+8>>2]|0)+164>>2]&64|0)!=0){Uc=Ic;Vc=zc;break c}}Nc=Ic+1|0;Zc=zc+1|0;if((Zc|0)<(ea|0)){Ic=Nc;zc=Zc}else{Uc=Nc;Vc=Zc;break}}}else{Uc=1;Vc=wc}}while(0);wc=c[tc>>2]&3;uc=c[((wc|0)==3?tc:tc+32|0)+28>>2]|0;vc=c[((wc|0)==2?tc:tc-32|0)+28>>2]|0;wc=c[uc+8>>2]|0;Cc=c[wc+232>>2]|0;d:do{if((uc|0)==(vc|0)){zc=c[L>>2]|0;do{if((Cc|0)==(b[zc+226>>1]|0)){if((Cc|0)>0){bd=~~(+h[(c[(c[c[(c[zc+184>>2]|0)+((Cc-1|0)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]- +h[wc+24>>3]);break}else{bd=~~+h[wc+80>>3];break}}else{if((Cc|0)==(b[zc+224>>1]|0)){bd=~~(+h[wc+24>>3]- +h[(c[(c[c[(c[zc+184>>2]|0)+((Cc+1|0)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]);break}else{Ic=c[zc+184>>2]|0;ra=+h[wc+24>>3];Hc=~~(+h[(c[(c[c[Ic+((Cc-1|0)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]-ra);Zc=~~(ra- +h[(c[(c[c[Ic+((Cc+1|0)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]);bd=(Hc|0)<(Zc|0)?Hc:Zc;break}}}while(0);im(S,ca,rc,Uc,+(c[U>>2]|0),+((bd|0)/2|0|0),11848);if((Uc|0)>0){cd=0}else{break}do{zc=c[(c[(c[ca+(cd+rc<<2)>>2]|0)+8>>2]|0)+96>>2]|0;if((zc|0)!=0){_m(d,zc)}cd=cd+1|0;}while((cd|0)<(Uc|0))}else{if((Cc|0)==(c[(c[vc+8>>2]|0)+232>>2]|0)){c[ka>>2]=la;zc=c[sc>>2]|0;Zc=zc+8|0;Hc=c[Zc>>2]|0;Ic=a[Hc+113|0]|0;if((c[Hc+164>>2]&32|0)==0){dd=zc}else{tF(aa|0,Hc|0,176)|0;tF(T|0,zc|0,32)|0;c[ka>>2]=la;Hc=zc;c[((c[sb>>2]&3|0)==3?ja:tb)+28>>2]=c[((c[Hc>>2]&3|0)==2?zc:zc-32|0)+28>>2];c[((c[sb>>2]&3|0)==2?ja:ub)+28>>2]=c[((c[Hc>>2]&3|0)==3?zc:zc+32|0)+28>>2];Hc=(c[ka>>2]|0)+16|0;Nc=(c[Zc>>2]|0)+56|0;c[Hc>>2]=c[Nc>>2];c[Hc+4>>2]=c[Nc+4>>2];c[Hc+8>>2]=c[Nc+8>>2];c[Hc+12>>2]=c[Nc+12>>2];c[Hc+16>>2]=c[Nc+16>>2];c[Hc+20>>2]=c[Nc+20>>2];c[Hc+24>>2]=c[Nc+24>>2];c[Hc+28>>2]=c[Nc+28>>2];c[Hc+32>>2]=c[Nc+32>>2];c[Hc+36>>2]=c[Nc+36>>2];Nc=(c[ka>>2]|0)+56|0;Hc=(c[Zc>>2]|0)+16|0;c[Nc>>2]=c[Hc>>2];c[Nc+4>>2]=c[Hc+4>>2];c[Nc+8>>2]=c[Hc+8>>2];c[Nc+12>>2]=c[Hc+12>>2];c[Nc+16>>2]=c[Hc+16>>2];c[Nc+20>>2]=c[Hc+20>>2];c[Nc+24>>2]=c[Hc+24>>2];c[Nc+28>>2]=c[Hc+28>>2];c[Nc+32>>2]=c[Hc+32>>2];c[Nc+36>>2]=c[Hc+36>>2];a[(c[ka>>2]|0)+112|0]=1;c[(c[ka>>2]|0)+116>>2]=zc;dd=ja}e:do{if((Uc|0)>1){zc=1;while(1){Hc=zc+1|0;if((a[(c[(c[ca+(zc+rc<<2)>>2]|0)+8>>2]|0)+113|0]|0)!=0){break e}if((Hc|0)<(Uc|0)){zc=Hc}else{za=133;break}}}else{za=133}}while(0);do{if((za|0)==133){za=0;if(Ic<<24>>24!=0){break}zc=dd+8|0;Jc=c[zc>>2]|0;if((c[Jc+96>>2]|0)!=0){Lc=dd;Mc=c[Lc>>2]&3;Kc=c[((Mc|0)==3?dd:dd+32|0)+28>>2]|0;Tc=dd-32|0;Hc=c[((Mc|0)==2?dd:Tc)+28>>2]|0;Mc=Hx(Kc|0)|0;Nc=c[zc>>2]|0;Zc=c[Nc+172>>2]|0;while(1){_c=c[(c[Zc+8>>2]|0)+172>>2]|0;if((_c|0)==0){break}else{Zc=_c}}_c=(c[((c[Zc>>2]&3|0)==3?Zc:Zc+32|0)+28>>2]|0)+8|0;Qc=(c[Nc+96>>2]|0)+56|0;ed=(c[_c>>2]|0)+16|0;c[Qc>>2]=c[ed>>2];c[Qc+4>>2]=c[ed+4>>2];c[Qc+8>>2]=c[ed+8>>2];c[Qc+12>>2]=c[ed+12>>2];a[(c[(c[zc>>2]|0)+96>>2]|0)+81|0]=1;if(ba){ed=c[Kc+8>>2]|0;Qc=c[zc>>2]|0;ra=+h[ed+24>>3]+ +h[Qc+24>>3];fd=c[Hc+8>>2]|0;V=+h[fd+16>>3]+ +h[Qc+56>>3];gd=+h[fd+24>>3]+ +h[Qc+64>>3];fd=c[Qc+96>>2]|0;hd=+h[fd+56>>3];id=+h[fd+64>>3]- +h[fd+32>>3]*.5;h[ua>>3]=+h[ed+16>>3]+ +h[Qc+16>>3];h[wa>>3]=ra;c[va>>2]=c[sa>>2];c[va+4>>2]=c[sa+4>>2];c[va+8>>2]=c[sa+8>>2];c[va+12>>2]=c[sa+12>>2];h[Ha>>3]=hd;h[Aa>>3]=id;c[La>>2]=c[ya>>2];c[La+4>>2]=c[ya+4>>2];c[La+8>>2]=c[ya+8>>2];c[La+12>>2]=c[ya+12>>2];c[Ia>>2]=c[ya>>2];c[Ia+4>>2]=c[ya+4>>2];c[Ia+8>>2]=c[ya+8>>2];c[Ia+12>>2]=c[ya+12>>2];h[nb>>3]=V;h[ob>>3]=gd;c[pb>>2]=c[mb>>2];c[pb+4>>2]=c[mb+4>>2];c[pb+8>>2]=c[mb+8>>2];c[pb+12>>2]=c[mb+12>>2];c[n>>2]=7;jd=pa;kd=7}else{Qc=c[_c>>2]|0;gd=+h[Qc+16>>3];V=gd- +h[Qc+88>>3];id=gd+ +h[Qc+96>>3];gd=+h[Qc+24>>3];hd=gd+ +h[Qc+80>>3]*.5;Qc=c[Kc+8>>2]|0;_c=c[Qc+232>>2]|0;ed=c[(c[Mc+8>>2]|0)+184>>2]|0;fd=~~(+(~~(gd- +(c[ed+(_c*44|0)+16>>2]|0)- +h[Qc+24>>3]+ +(c[ed+(_c*44|0)+20>>2]|0))|0)/6.0);if((fd|0)<5){ld=5.0}else{ld=+(fd|0)}gd=hd-ld;No(K,S,Kc,dd,l,1);No(K,S,Hc,dd,m,0);fd=c[qb>>2]|0;_c=fd-1|0;ra=+h[l+56+(_c<<5)>>3];h[22617]=ra;h[22618]=+h[l+56+(_c<<5)+24>>3];h[22619]=V;h[22620]=gd;h[22621]=ra;h[22622]=gd;_c=(c[rb>>2]|0)-1|0;ra=+h[m+56+(_c<<5)+16>>3];h[22623]=ra;h[22624]=hd;h[22625]=id;h[22628]=gd;h[22626]=+h[m+56+(_c<<5)+24>>3];h[22627]=ra;if((fd|0)>0){fd=0;do{dm(S,l+56+(fd<<5)|0);fd=fd+1|0;}while((fd|0)<(c[qb>>2]|0))}dm(S,180936);dm(S,180968);dm(S,181e3);fd=c[rb>>2]|0;if((fd|0)>0){Hc=fd;do{Hc=Hc-1|0;dm(S,m+56+(Hc<<5)|0);}while((Hc|0)>0)}if(ma){md=il(S,n)|0}else{md=kl(S,n)|0}Hc=c[n>>2]|0;if((Hc|0)==0){break d}else{jd=md;kd=Hc}}cm(dd,c[((c[Lc>>2]&3|0)==2?dd:Tc)+28>>2]|0,jd,kd,11848);break d}if(ba){Hc=c[dd>>2]&3;Mo(c[(c[((Hc|0)==3?dd:dd+32|0)+28>>2]|0)+8>>2]|0,c[(c[((Hc|0)==2?dd:dd-32|0)+28>>2]|0)+8>>2]|0,ca,rc,Uc,2);break d}Hc=a[Jc+49|0]|0;fd=a[Jc+89|0]|0;do{if(Hc<<24>>24!=1|fd<<24>>24==4){if(!(fd<<24>>24!=1|Hc<<24>>24==4)){break}Kc=c[dd>>2]&3;Mc=c[((Kc|0)==3?dd:dd+32|0)+28>>2]|0;zc=c[((Kc|0)==2?dd:dd-32|0)+28>>2]|0;Kc=Hx(Mc|0)|0;Nc=c[Mc+8>>2]|0;Zc=c[Nc+232>>2]|0;_c=c[Kc+8>>2]|0;if((Zc|0)>0){Kc=c[_c+184>>2]|0;ed=((a[_c+113|0]&1)==0?-1:-2)+Zc|0;nd=+h[(c[(c[c[Kc+(ed*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]- +(c[Kc+(ed*44|0)+16>>2]|0)- +h[Nc+24>>3]- +(c[Kc+(Zc*44|0)+20>>2]|0)}else{nd=+(c[_c+240>>2]|0)}ra=+(Uc+1|0);gd=+(c[U>>2]|0)/ra;id=nd/ra;No(K,S,Mc,dd,s,1);No(K,S,zc,dd,t,0);if((Uc|0)>0){od=0}else{break d}while(1){zc=c[ca+(od+rc<<2)>>2]|0;Mc=c[ia>>2]|0;_c=Mc-1|0;ra=+h[s+56+(_c<<5)>>3];hd=+h[s+56+(_c<<5)+16>>3];V=+h[s+56+(_c<<5)+24>>3];h[22617]=ra;h[22618]=V;od=od+1|0;pd=+(od|0);qd=gd*pd;h[22619]=qd+hd;hd=id*pd+V;h[22620]=hd;h[22621]=ra;h[22622]=hd;_c=(c[ha>>2]|0)-1|0;ra=+h[t+56+(_c<<5)+16>>3];h[22623]=ra;h[22624]=id+hd;V=+h[t+56+(_c<<5)>>3];pd=+h[t+56+(_c<<5)+24>>3];h[22627]=ra;h[22626]=pd;h[22625]=V-qd;h[22628]=hd;if((Mc|0)>0){Mc=0;do{dm(S,s+56+(Mc<<5)|0);Mc=Mc+1|0;}while((Mc|0)<(c[ia>>2]|0))}dm(S,180936);dm(S,180968);dm(S,181e3);Mc=c[ha>>2]|0;if((Mc|0)>0){_c=Mc;do{_c=_c-1|0;dm(S,t+56+(_c<<5)|0);}while((_c|0)>0)}if(ma){rd=il(S,r)|0}else{rd=kl(S,r)|0}_c=c[r>>2]|0;if((_c|0)==0){break d}cm(zc,c[((c[zc>>2]&3|0)==2?zc:zc-32|0)+28>>2]|0,rd,_c,11848);c[na>>2]=0;if((od|0)>=(Uc|0)){break d}}}}while(0);Hc=c[dd>>2]&3;fd=c[((Hc|0)==3?dd:dd+32|0)+28>>2]|0;Jc=c[((Hc|0)==2?dd:dd-32|0)+28>>2]|0;Hc=Hx(fd|0)|0;Tc=c[fd+8>>2]|0;Lc=c[Tc+232>>2]|0;_c=c[Hc+8>>2]|0;if((Lc|0)<(b[_c+226>>1]|0)){Hc=c[_c+184>>2]|0;Mc=Lc+1|0;sd=+h[Tc+24>>3]- +(c[Hc+(Lc*44|0)+24>>2]|0)-(+h[(c[(c[c[Hc+(Mc*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]+ +(c[Hc+(Mc*44|0)+28>>2]|0))}else{sd=+(c[_c+240>>2]|0)}id=+(Uc+1|0);gd=+(c[U>>2]|0)/id;hd=sd/id;Oo(K,S,fd,dd,j,1);Oo(K,S,Jc,dd,k,0);if((Uc|0)<=0){break d}if(ma){Jc=0;while(1){fd=c[ca+(Jc+rc<<2)>>2]|0;_c=c[ta>>2]|0;Mc=_c-1|0;id=+h[j+56+(Mc<<5)>>3];qd=+h[j+56+(Mc<<5)+8>>3];V=+h[j+56+(Mc<<5)+16>>3];h[22617]=id;h[22620]=qd;Jc=Jc+1|0;pd=+(Jc|0);ra=gd*pd;h[22619]=ra+V;V=qd-hd*pd;h[22618]=V;h[22621]=id;h[22624]=V;Mc=(c[qa>>2]|0)-1|0;id=+h[k+56+(Mc<<5)+16>>3];h[22623]=id;h[22622]=V-hd;pd=+h[k+56+(Mc<<5)>>3];qd=+h[k+56+(Mc<<5)+8>>3];h[22627]=id;h[22628]=qd;h[22625]=pd-ra;h[22626]=V;if((_c|0)>0){_c=0;do{dm(S,j+56+(_c<<5)|0);_c=_c+1|0;}while((_c|0)<(c[ta>>2]|0))}dm(S,180936);dm(S,180968);dm(S,181e3);_c=c[qa>>2]|0;if((_c|0)>0){Mc=_c;do{Mc=Mc-1|0;dm(S,k+56+(Mc<<5)|0);}while((Mc|0)>0)}Mc=il(S,g)|0;_c=c[g>>2]|0;if((_c|0)==0){break d}cm(fd,c[((c[fd>>2]&3|0)==2?fd:fd-32|0)+28>>2]|0,Mc,_c,11848);c[na>>2]=0;if((Jc|0)>=(Uc|0)){break d}}}else{Jc=0;while(1){_c=c[ca+(Jc+rc<<2)>>2]|0;Mc=c[ta>>2]|0;Hc=Mc-1|0;V=+h[j+56+(Hc<<5)>>3];ra=+h[j+56+(Hc<<5)+8>>3];pd=+h[j+56+(Hc<<5)+16>>3];h[22617]=V;h[22620]=ra;Jc=Jc+1|0;qd=+(Jc|0);id=gd*qd;h[22619]=id+pd;pd=ra-hd*qd;h[22618]=pd;h[22621]=V;h[22624]=pd;Hc=(c[qa>>2]|0)-1|0;V=+h[k+56+(Hc<<5)+16>>3];h[22623]=V;h[22622]=pd-hd;qd=+h[k+56+(Hc<<5)>>3];ra=+h[k+56+(Hc<<5)+8>>3];h[22627]=V;h[22628]=ra;h[22625]=qd-id;h[22626]=pd;if((Mc|0)>0){Mc=0;do{dm(S,j+56+(Mc<<5)|0);Mc=Mc+1|0;}while((Mc|0)<(c[ta>>2]|0))}dm(S,180936);dm(S,180968);dm(S,181e3);Mc=c[qa>>2]|0;if((Mc|0)>0){fd=Mc;do{fd=fd-1|0;dm(S,k+56+(fd<<5)|0);}while((fd|0)>0)}fd=kl(S,g)|0;Mc=c[g>>2]|0;if((Mc|0)==0){break d}cm(_c,c[((c[_c>>2]&3|0)==2?_c:_c-32|0)+28>>2]|0,fd,Mc,11848);c[na>>2]=0;if((Jc|0)>=(Uc|0)){break d}}}}}while(0);Lo(ca,rc,Uc,dd,M);break}c[Kb>>2]=Hb;c[Nb>>2]=Lb;c[Qb>>2]=Ob;if((c[44380]|0)==0){c[44380]=kk(32e3)|0;c[44378]=kk(32e3)|0;c[44384]=2e3;c[44382]=2e3}Ic=c[sc>>2]|0;Jc=Ic;Mc=Ic+32|0;fd=Hx(c[((c[Jc>>2]&3|0)==3?Ic:Mc)+28>>2]|0)|0;Hc=c[Jc>>2]&3;Lc=Ic-32|0;Tc=(c[(c[(c[((Hc|0)==3?Ic:Mc)+28>>2]|0)+8>>2]|0)+232>>2]|0)-(c[(c[(c[((Hc|0)==2?Ic:Lc)+28>>2]|0)+8>>2]|0)+232>>2]|0)|0;Hc=Ic+8|0;Zc=c[Hc>>2]|0;do{if((((Tc|0)>-1?Tc:-Tc|0)|0)>1){tF(vb|0,Zc|0,176)|0;Kc=Ic|0;tF(xb|0,Kc|0,32)|0;c[Kb>>2]=Hb;Nc=c[Hc>>2]|0;if((c[Nc+164>>2]&32|0)==0){tF(wb|0,Nc|0,176)|0;tF(yb|0,Kc|0,32)|0;c[Nb>>2]=Lb;c[((c[Rb>>2]&3|0)==3?Ib:Sb)+28>>2]=c[((c[Jc>>2]&3|0)==3?Ic:Mc)+28>>2]}else{ed=c[Nb>>2]|0;tF(ed|0,Nc|0,176)|0;tF(yb|0,Kc|0,32)|0;c[Nb>>2]=ed;c[((c[Ub>>2]&3|0)==3?Mb:Vb)+28>>2]=c[((c[Jc>>2]&3|0)==2?Ic:Lc)+28>>2];c[((c[Ub>>2]&3|0)==2?Mb:Wb)+28>>2]=c[((c[Jc>>2]&3|0)==3?Ic:Mc)+28>>2];ed=(c[Nb>>2]|0)+16|0;Kc=(c[Hc>>2]|0)+56|0;c[ed>>2]=c[Kc>>2];c[ed+4>>2]=c[Kc+4>>2];c[ed+8>>2]=c[Kc+8>>2];c[ed+12>>2]=c[Kc+12>>2];c[ed+16>>2]=c[Kc+16>>2];c[ed+20>>2]=c[Kc+20>>2];c[ed+24>>2]=c[Kc+24>>2];c[ed+28>>2]=c[Kc+28>>2];c[ed+32>>2]=c[Kc+32>>2];c[ed+36>>2]=c[Kc+36>>2];Kc=(c[Nb>>2]|0)+56|0;ed=(c[Hc>>2]|0)+16|0;c[Kc>>2]=c[ed>>2];c[Kc+4>>2]=c[ed+4>>2];c[Kc+8>>2]=c[ed+8>>2];c[Kc+12>>2]=c[ed+12>>2];c[Kc+16>>2]=c[ed+16>>2];c[Kc+20>>2]=c[ed+20>>2];c[Kc+24>>2]=c[ed+24>>2];c[Kc+28>>2]=c[ed+28>>2];c[Kc+32>>2]=c[ed+32>>2];c[Kc+36>>2]=c[ed+36>>2];a[(c[Nb>>2]|0)+112|0]=1;c[(c[Nb>>2]|0)+116>>2]=Ic;c[((c[Rb>>2]&3|0)==3?Ib:Sb)+28>>2]=c[((c[Jc>>2]&3|0)==2?Ic:Lc)+28>>2];ed=(c[Kb>>2]|0)+16|0;Kc=(c[Hc>>2]|0)+56|0;c[ed>>2]=c[Kc>>2];c[ed+4>>2]=c[Kc+4>>2];c[ed+8>>2]=c[Kc+8>>2];c[ed+12>>2]=c[Kc+12>>2];c[ed+16>>2]=c[Kc+16>>2];c[ed+20>>2]=c[Kc+20>>2];c[ed+24>>2]=c[Kc+24>>2];c[ed+28>>2]=c[Kc+28>>2];c[ed+32>>2]=c[Kc+32>>2];c[ed+36>>2]=c[Kc+36>>2]}Kc=c[Hc>>2]|0;ed=c[Kc+172>>2]|0;if((ed|0)==0){td=Ic;ud=Kc}else{Kc=ed;while(1){vd=c[Kc+8>>2]|0;ed=c[vd+172>>2]|0;if((ed|0)==0){break}else{Kc=ed}}td=Kc;ud=vd}ed=c[ud+116>>2]|0;if((ed|0)==0){wd=td}else{Nc=ed;while(1){ed=c[(c[Nc+8>>2]|0)+116>>2]|0;if((ed|0)==0){break}else{Nc=ed}}wd=Nc}Kc=c[(c[wd+8>>2]|0)+172>>2]|0;if((Kc|0)==0){xd=wd}else{ed=Kc;while(1){Kc=c[(c[ed+8>>2]|0)+172>>2]|0;if((Kc|0)==0){break}else{ed=Kc}}xd=ed}c[((c[Rb>>2]&3|0)==2?Ib:Tb)+28>>2]=c[((c[xd>>2]&3|0)==2?xd:xd-32|0)+28>>2];a[(c[Kb>>2]|0)+84|0]=0;a[(c[Kb>>2]|0)+112|0]=1;h[(c[Kb>>2]|0)+64>>3]=0.0;h[(c[Kb>>2]|0)+56>>3]=0.0;c[(c[Kb>>2]|0)+116>>2]=Ic;yd=Ib;zd=1}else{if((c[Zc+164>>2]&32|0)==0){yd=Ic;zd=0;break}Nc=c[Kb>>2]|0;tF(Nc|0,Zc|0,176)|0;tF(xb|0,Ic|0,32)|0;c[Kb>>2]=Nc;c[((c[Rb>>2]&3|0)==3?Ib:Sb)+28>>2]=c[((c[Jc>>2]&3|0)==2?Ic:Lc)+28>>2];c[((c[Rb>>2]&3|0)==2?Ib:Tb)+28>>2]=c[((c[Jc>>2]&3|0)==3?Ic:Mc)+28>>2];Nc=(c[Kb>>2]|0)+16|0;Kc=(c[Hc>>2]|0)+56|0;c[Nc>>2]=c[Kc>>2];c[Nc+4>>2]=c[Kc+4>>2];c[Nc+8>>2]=c[Kc+8>>2];c[Nc+12>>2]=c[Kc+12>>2];c[Nc+16>>2]=c[Kc+16>>2];c[Nc+20>>2]=c[Kc+20>>2];c[Nc+24>>2]=c[Kc+24>>2];c[Nc+28>>2]=c[Kc+28>>2];c[Nc+32>>2]=c[Kc+32>>2];c[Nc+36>>2]=c[Kc+36>>2];Kc=(c[Kb>>2]|0)+56|0;Nc=(c[Hc>>2]|0)+16|0;c[Kc>>2]=c[Nc>>2];c[Kc+4>>2]=c[Nc+4>>2];c[Kc+8>>2]=c[Nc+8>>2];c[Kc+12>>2]=c[Nc+12>>2];c[Kc+16>>2]=c[Nc+16>>2];c[Kc+20>>2]=c[Nc+20>>2];c[Kc+24>>2]=c[Nc+24>>2];c[Kc+28>>2]=c[Nc+28>>2];c[Kc+32>>2]=c[Nc+32>>2];c[Kc+36>>2]=c[Nc+36>>2];a[(c[Kb>>2]|0)+112|0]=1;c[(c[Kb>>2]|0)+116>>2]=Ic;yd=Ib;zd=0}}while(0);do{if(ba){Ic=c[44380]|0;Hc=yd+8|0;Mc=c[Hc>>2]|0;if((a[Mc+112|0]|0)==0){Ad=yd;Bd=Hc}else{Hc=Mc;do{Cd=c[Hc+116>>2]|0;Dd=Cd+8|0;Hc=c[Dd>>2]|0;}while((a[Hc+112|0]|0)!=0);Ad=Cd;Bd=Dd}Hc=Ad;ed=c[Hc>>2]|0;Mc=ed&3;Jc=c[((Mc|0)==2?Ad:Ad-32|0)+28>>2]|0;Lc=Ad+32|0;Zc=c[((Mc|0)==3?Ad:Lc)+28>>2]|0;Mc=Jc+8|0;Tc=Zc+8|0;Nc=(c[(c[Mc>>2]|0)+232>>2]|0)-(c[(c[Tc>>2]|0)+232>>2]|0)|0;Kc=(Nc|0)>-1?Nc:-Nc|0;if((Kc|0)==2){if((a[(c[(Hx(Jc|0)|0)+8>>2]|0)+113|0]&1)!=0){za=220;break}Ed=c[Hc>>2]|0}else if((Kc|0)==1){za=220;break}else{Ed=ed}if((c[((c[yd>>2]&3|0)==3?yd:yd+32|0)+28>>2]|0)==(c[((Ed&3|0)==3?Ad:Lc)+28>>2]|0)){Lc=c[Tc>>2]|0;ed=c[Bd>>2]|0;Kc=c[Mc>>2]|0;Fd=+h[Kc+16>>3]+ +h[ed+56>>3];Gd=+h[Kc+24>>3]+ +h[ed+64>>3];Hd=+h[Lc+16>>3]+ +h[ed+16>>3];Id=+h[Lc+24>>3]+ +h[ed+24>>3];Jd=ed;Kd=Jc}else{ed=c[Mc>>2]|0;Mc=c[Bd>>2]|0;Lc=c[Tc>>2]|0;Fd=+h[Lc+16>>3]+ +h[Mc+16>>3];Gd=+h[Lc+24>>3]+ +h[Mc+24>>3];Hd=+h[ed+16>>3]+ +h[Mc+56>>3];Id=+h[ed+24>>3]+ +h[Mc+64>>3];Jd=Mc;Kd=Zc}Zc=c[Jd+96>>2]|0;if((Zc|0)==0){Mc=Ic;h[Ic>>3]=Hd;h[Ic+8>>3]=Id;ed=Ic+16|0;c[ed>>2]=c[Mc>>2];c[ed+4>>2]=c[Mc+4>>2];c[ed+8>>2]=c[Mc+8>>2];c[ed+12>>2]=c[Mc+12>>2];Mc=Ic+32|0;h[Ic+32>>3]=Fd;h[Ic+40>>3]=Gd;ed=Ic+48|0;c[ed>>2]=c[Mc>>2];c[ed+4>>2]=c[Mc+4>>2];c[ed+8>>2]=c[Mc+8>>2];c[ed+12>>2]=c[Mc+12>>2];Ld=4;Md=Kd;break}hd=+h[Zc+24>>3];gd=+h[Zc+32>>3];Zc=(c[(c[(Hx(Jc|0)|0)+8>>2]|0)+116>>2]&1|0)==0;pd=Zc?gd:hd;Jc=c[(c[Bd>>2]|0)+96>>2]|0;id=+h[Jc+56>>3];qd=+h[Jc+64>>3];ra=(Zc?hd:gd)*.5;if((~~((Gd-Id)*(id-Hd)-(Fd-Hd)*(qd-Id))|0)>0){Nd=id+ra;Od=qd-pd*.5}else{Nd=id-ra;Od=qd+pd*.5}Zc=Ic;h[Ic>>3]=Hd;h[Ic+8>>3]=Id;Jc=Ic+16|0;c[Jc>>2]=c[Zc>>2];c[Jc+4>>2]=c[Zc+4>>2];c[Jc+8>>2]=c[Zc+8>>2];c[Jc+12>>2]=c[Zc+12>>2];Zc=Ic+64|0;h[Ic+64>>3]=Nd;h[Ic+72>>3]=Od;Jc=Ic+48|0;c[Jc>>2]=c[Zc>>2];c[Jc+4>>2]=c[Zc+4>>2];c[Jc+8>>2]=c[Zc+8>>2];c[Jc+12>>2]=c[Zc+12>>2];Jc=Ic+32|0;c[Jc>>2]=c[Zc>>2];c[Jc+4>>2]=c[Zc+4>>2];c[Jc+8>>2]=c[Zc+8>>2];c[Jc+12>>2]=c[Zc+12>>2];Zc=Ic+96|0;h[Ic+96>>3]=Fd;h[Ic+104>>3]=Gd;Jc=Ic+80|0;c[Jc>>2]=c[Zc>>2];c[Jc+4>>2]=c[Zc+4>>2];c[Jc+8>>2]=c[Zc+8>>2];c[Jc+12>>2]=c[Zc+12>>2];Ld=7;Md=Kd}else{za=220}}while(0);if((za|0)==220){za=0;Zc=c[yd>>2]&3;Jc=c[((Zc|0)==3?yd:yd+32|0)+28>>2]|0;Mc=c[((Zc|0)==2?yd:yd-32|0)+28>>2]|0;Do(D,K,Jc,0,yd);c[Ab>>2]=c[Cb>>2];c[Ab+4>>2]=c[Cb+4>>2];c[Ab+8>>2]=c[Cb+8>>2];c[Ab+12>>2]=c[Cb+12>>2];c[Ab+16>>2]=c[Cb+16>>2];c[Ab+20>>2]=c[Cb+20>>2];c[Ab+24>>2]=c[Cb+24>>2];c[Ab+28>>2]=c[Cb+28>>2];pd=+h[_b>>3];qd=+h[$b>>3];Zc=Jc+8|0;ed=c[Zc>>2]|0;do{if((a[ed+156|0]|0)==1){if((c[ed+176>>2]|0)>1){Pd=1;break}Pd=(c[ed+184>>2]|0)>1|0}else{Pd=0}}while(0);em(S,yd,1,A,Pd);ra=+h[A+56+((c[ac>>2]|0)-1<<5)+8>>3];ed=c[Zc>>2]|0;id=+h[ed+24>>3];Lc=c[ed+232>>2]|0;gd=+(~~(id- +(c[(c[(c[(Hx(Jc|0)|0)+8>>2]|0)+184>>2]|0)+(Lc*44|0)+16>>2]|0))|0);if(pd<qd&gd<ra){Lc=c[ac>>2]|0;c[ac>>2]=Lc+1;h[A+56+(Lc<<5)>>3]=pd;h[A+56+(Lc<<5)+8>>3]=gd;h[A+56+(Lc<<5)+16>>3]=qd;h[A+56+(Lc<<5)+24>>3]=ra}Lc=Mc+8|0;f:do{if((a[(c[Lc>>2]|0)+156|0]|0)==1){ed=fd+8|0;Tc=Mc;Kc=0;Hc=-1;Nc=0;Qc=yd;Qd=Jc;Rd=Lc;while(1){Sd=Tc;Td=0;Ud=Hc;Vd=Nc;Wd=0;Xd=Qc;Yd=Qd;Zd=Rd;while(1){if((Ec[c[2963]&63](Sd)|0)<<24>>24!=0){_d=Sd;$d=Wd;ae=Xd;be=Yd;ce=Zd;de=Kc;ee=Qc;break f}fe=Wd|1;ge=c[(c[Yd+8>>2]|0)+232>>2]|0;he=c[$>>2]|0;ie=he+(ge<<5)|0;ra=+h[ie>>3];je=he+(ge<<5)+8|0;gd=+h[je>>3];ke=he+(ge<<5)+16|0;id=+h[ke>>3];le=he+(ge<<5)+24|0;hd=+h[le>>3];if(ra==id){he=c[(c[ed>>2]|0)+184>>2]|0;me=ge+1|0;V=+(c[_>>2]|0);ne=+h[(c[(c[c[he+(me*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]+ +(c[he+(me*44|0)+20>>2]|0);oe=+(c[Z>>2]|0);pe=+h[(c[(c[c[he+(ge*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]- +(c[he+(ge*44|0)+16>>2]|0);h[ie>>3]=V;h[je>>3]=ne;h[ke>>3]=oe;h[le>>3]=pe;qe=pe;re=oe;se=V;te=ne}else{qe=hd;re=id;se=ra;te=gd}h[180936+(Wd<<5)>>3]=se;h[180944+(Wd<<5)>>3]=te;h[180952+(Wd<<5)>>3]=re;h[180960+(Wd<<5)>>3]=qe;if((Td|0)==0){le=c[Zd>>2]|0;ke=c[c[le+180>>2]>>2]|0;je=c[(c[((c[ke>>2]&3|0)==2?ke:ke-32|0)+28>>2]|0)+8>>2]|0;g:do{if((a[je+156|0]|0)==1){ke=le+16|0;ie=0;ge=je;while(1){he=ge+180|0;if((c[he+4>>2]|0)!=1){ue=ie;break g}if((c[ge+176>>2]|0)!=1){ue=ie;break g}me=ie+1|0;if(+h[ge+16>>3]!=+h[ke>>3]){ue=ie;break g}ve=c[c[he>>2]>>2]|0;he=c[(c[((c[ve>>2]&3|0)==2?ve:ve-32|0)+28>>2]|0)+8>>2]|0;if((a[he+156|0]|0)==1){ie=me;ge=he}else{ue=me;break}}}else{ue=0}}while(0);je=(ue|0)<(((a[(c[ed>>2]|0)+113|0]&1)!=0?5:3)|0);we=je?ue:ue-2|0;xe=je?Ud:1;ye=je&1^1}else{we=Vd;xe=Ud;ye=Td}if(!((ye|0)==0|(xe|0)>0)){break}je=Wd+2|0;Do(E,K,Sd,Xd,c[c[(c[Zd>>2]|0)+180>>2]>>2]|0);le=180936+(fe<<5)|0;c[le>>2]=c[Db>>2];c[le+4>>2]=c[Db+4>>2];c[le+8>>2]=c[Db+8>>2];c[le+12>>2]=c[Db+12>>2];c[le+16>>2]=c[Db+16>>2];c[le+20>>2]=c[Db+20>>2];c[le+24>>2]=c[Db+24>>2];c[le+28>>2]=c[Db+28>>2];le=c[c[(c[Zd>>2]|0)+180>>2]>>2]|0;zc=c[le>>2]&3;ge=c[((zc|0)==3?le:le+32|0)+28>>2]|0;ie=c[((zc|0)==2?le:le-32|0)+28>>2]|0;zc=ie+8|0;if((a[(c[zc>>2]|0)+156|0]|0)==1){Sd=ie;Td=ye;Ud=xe-1|0;Vd=we;Wd=je;Xd=le;Yd=ge;Zd=zc}else{_d=ie;$d=je;ae=le;be=ge;ce=zc;de=Kc;ee=Qc;break f}}Do(F,K,Sd,Xd,c[c[(c[Zd>>2]|0)+180>>2]>>2]|0);c[Bb>>2]=c[Eb>>2];c[Bb+4>>2]=c[Eb+4>>2];c[Bb+8>>2]=c[Eb+8>>2];c[Bb+12>>2]=c[Eb+12>>2];c[Bb+16>>2]=c[Eb+16>>2];c[Bb+20>>2]=c[Eb+20>>2];c[Bb+24>>2]=c[Eb+24>>2];c[Bb+28>>2]=c[Eb+28>>2];Yd=c[(c[((c[Xd>>2]&3|0)==2?Xd:Xd-32|0)+28>>2]|0)+8>>2]|0;do{if((a[Yd+156|0]|0)==1){if((c[Yd+176>>2]|0)>1){ze=1;break}ze=(c[Yd+184>>2]|0)>1|0}else{ze=0}}while(0);gm(S,Xd,1,B,ze);Yd=(c[bc>>2]|0)-1|0;Wd=c[Zd>>2]|0;gd=+h[Wd+24>>3];Vd=c[Wd+232>>2]|0;Wd=~~(gd+ +(c[(c[(c[(Hx(Sd|0)|0)+8>>2]|0)+184>>2]|0)+(Vd*44|0)+20>>2]|0));gd=+h[B+56+(Yd<<5)>>3];ra=+h[B+56+(Yd<<5)+16>>3];id=+h[B+56+(Yd<<5)+24>>3];hd=+(Wd|0);if(gd<ra&id<hd){Wd=c[bc>>2]|0;c[bc>>2]=Wd+1;h[B+56+(Wd<<5)>>3]=gd;h[B+56+(Wd<<5)+8>>3]=id;h[B+56+(Wd<<5)+16>>3]=ra;h[B+56+(Wd<<5)+24>>3]=hd}h[dc>>3]=1.5707963267948966;a[ec]=1;Fo(S,Qc,Xd,A,B,fe);do{if(ma){Ae=il(S,C)|0;za=251}else{Wd=kl(S,C)|0;if(!ba){Ae=Wd;za=251;break}Yd=c[C>>2]|0;if((Yd|0)<=4){Be=Wd;Ce=Yd;za=252;break}Vd=Wd+16|0;Ud=Wd;c[Vd>>2]=c[Ud>>2];c[Vd+4>>2]=c[Ud+4>>2];c[Vd+8>>2]=c[Ud+8>>2];c[Vd+12>>2]=c[Ud+12>>2];Ud=Wd+32|0;Vd=Wd+(Yd-1<<4)|0;c[Ud>>2]=c[Vd>>2];c[Ud+4>>2]=c[Vd+4>>2];c[Ud+8>>2]=c[Vd+8>>2];c[Ud+12>>2]=c[Vd+12>>2];uF(Wd+48|0,Vd|0,16)|0;c[C>>2]=4;De=4;Ee=Wd}}while(0);if((za|0)==251){za=0;Be=Ae;Ce=c[C>>2]|0;za=252}if((za|0)==252){za=0;if((Ce|0)==0){break d}else{De=Ce;Ee=Be}}Xd=De+Kc|0;if((Xd|0)>(c[44384]|0)){c[44384]=Xd<<1;Sd=mk(c[44380]|0,Xd<<5)|0;c[44380]=Sd;Fe=c[C>>2]|0;Ge=Sd}else{Fe=De;Ge=c[44380]|0}if((Fe|0)>0){Sd=(Fe|0)>1;Xd=Kc;Wd=0;while(1){Vd=Ge+(Xd<<4)|0;Ud=Ee+(Wd<<4)|0;c[Vd>>2]=c[Ud>>2];c[Vd+4>>2]=c[Ud+4>>2];c[Vd+8>>2]=c[Ud+8>>2];c[Vd+12>>2]=c[Ud+12>>2];Ud=Wd+1|0;if((Ud|0)<(Fe|0)){Xd=Xd+1|0;Wd=Ud}else{break}}He=(Sd?Fe:1)+Kc|0}else{He=Kc}Wd=c[c[(c[Zd>>2]|0)+180>>2]>>2]|0;if((we|0)==0){Ie=Wd}else{Xd=we;Ud=Wd;while(1){Wd=Xd-1|0;Vd=c[c[(c[(c[((c[Ud>>2]&3|0)==2?Ud:Ud-32|0)+28>>2]|0)+8>>2]|0)+180>>2]>>2]|0;if((Wd|0)==0){Ie=Vd;break}else{Xd=Wd;Ud=Vd}}}Ud=Ge+(He<<4)|0;Xd=Ge+(He-1<<4)|0;c[Ud>>2]=c[Xd>>2];c[Ud+4>>2]=c[Xd+4>>2];c[Ud+8>>2]=c[Xd+8>>2];c[Ud+12>>2]=c[Xd+12>>2];Ud=He+2|0;Zd=Ge+(He+1<<4)|0;c[Zd>>2]=c[Xd>>2];c[Zd+4>>2]=c[Xd+4>>2];c[Zd+8>>2]=c[Xd+8>>2];c[Zd+12>>2]=c[Xd+12>>2];Xd=Ie;Zd=Ie+32|0;Sd=Ge+(Ud<<4)|0;Vd=(c[(c[((c[Xd>>2]&3|0)==3?Ie:Zd)+28>>2]|0)+8>>2]|0)+16|0;c[Sd>>2]=c[Vd>>2];c[Sd+4>>2]=c[Vd+4>>2];c[Sd+8>>2]=c[Vd+8>>2];c[Sd+12>>2]=c[Vd+12>>2];Go(Qc,S);Vd=c[Xd>>2]&3;Xd=c[((Vd|0)==3?Ie:Zd)+28>>2]|0;Zd=c[((Vd|0)==2?Ie:Ie-32|0)+28>>2]|0;Vd=Xd+8|0;Do(G,K,Xd,c[c[(c[Vd>>2]|0)+172>>2]>>2]|0,Ie);c[Ab>>2]=c[Fb>>2];c[Ab+4>>2]=c[Fb+4>>2];c[Ab+8>>2]=c[Fb+8>>2];c[Ab+12>>2]=c[Fb+12>>2];c[Ab+16>>2]=c[Fb+16>>2];c[Ab+20>>2]=c[Fb+20>>2];c[Ab+24>>2]=c[Fb+24>>2];c[Ab+28>>2]=c[Fb+28>>2];Sd=c[Vd>>2]|0;do{if((a[Sd+156|0]|0)==1){if((c[Sd+176>>2]|0)>1){Je=1;break}Je=(c[Sd+184>>2]|0)>1|0}else{Je=0}}while(0);em(S,Ie,1,A,Je);Sd=(c[ac>>2]|0)-1|0;Wd=c[Vd>>2]|0;hd=+h[Wd+24>>3];Yd=c[Wd+232>>2]|0;Wd=~~(hd- +(c[(c[(c[(Hx(Xd|0)|0)+8>>2]|0)+184>>2]|0)+(Yd*44|0)+16>>2]|0));hd=+h[A+56+(Sd<<5)>>3];ra=+h[A+56+(Sd<<5)+8>>3];id=+h[A+56+(Sd<<5)+16>>3];gd=+(Wd|0);if(hd<id&gd<ra){Wd=c[ac>>2]|0;c[ac>>2]=Wd+1;h[A+56+(Wd<<5)>>3]=hd;h[A+56+(Wd<<5)+8>>3]=gd;h[A+56+(Wd<<5)+16>>3]=id;h[A+56+(Wd<<5)+24>>3]=ra}h[fc>>3]=-1.5707963267948966;a[gc]=1;Wd=Zd+8|0;if((a[(c[Wd>>2]|0)+156|0]|0)==1){Tc=Zd;Kc=Ud;Hc=xe;Nc=we;Qc=Ie;Qd=Xd;Rd=Wd}else{_d=Zd;$d=0;ae=Ie;be=Xd;ce=Wd;de=Ud;ee=Ie;break}}}else{_d=Mc;$d=0;ae=yd;be=Jc;ce=Lc;de=0;ee=yd}}while(0);Lc=$d+1|0;Jc=c[(c[be+8>>2]|0)+232>>2]|0;Mc=c[$>>2]|0;Zc=Mc+(Jc<<5)|0;qd=+h[Zc>>3];Rd=Mc+(Jc<<5)+8|0;pd=+h[Rd>>3];Qd=Mc+(Jc<<5)+16|0;ra=+h[Qd>>3];Qc=Mc+(Jc<<5)+24|0;id=+h[Qc>>3];if(qd==ra){Mc=c[(c[fd+8>>2]|0)+184>>2]|0;Nc=Jc+1|0;gd=+(c[_>>2]|0);hd=+h[(c[(c[c[Mc+(Nc*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]+ +(c[Mc+(Nc*44|0)+20>>2]|0);ne=+(c[Z>>2]|0);V=+h[(c[(c[c[Mc+(Jc*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]- +(c[Mc+(Jc*44|0)+16>>2]|0);h[Zc>>3]=gd;h[Rd>>3]=hd;h[Qd>>3]=ne;h[Qc>>3]=V;Ke=V;Le=ne;Me=gd;Ne=hd}else{Ke=id;Le=ra;Me=qd;Ne=pd}h[180936+($d<<5)>>3]=Me;h[180944+($d<<5)>>3]=Ne;h[180952+($d<<5)>>3]=Le;h[180960+($d<<5)>>3]=Ke;Do(H,K,_d,ae,0);c[Bb>>2]=c[Gb>>2];c[Bb+4>>2]=c[Gb+4>>2];c[Bb+8>>2]=c[Gb+8>>2];c[Bb+12>>2]=c[Gb+12>>2];c[Bb+16>>2]=c[Gb+16>>2];c[Bb+20>>2]=c[Gb+20>>2];c[Bb+24>>2]=c[Gb+24>>2];c[Bb+28>>2]=c[Gb+28>>2];pd=+h[hc>>3];qd=+h[ic>>3];Qc=(zd|0)!=0;Qd=Qc?Mb:ae;Rd=ae;Zc=ae-32|0;Jc=c[(c[((c[Rd>>2]&3|0)==2?ae:Zc)+28>>2]|0)+8>>2]|0;do{if((a[Jc+156|0]|0)==1){if((c[Jc+176>>2]|0)>1){Oe=1;break}Oe=(c[Jc+184>>2]|0)>1|0}else{Oe=0}}while(0);gm(S,Qd,1,B,Oe);ra=+h[B+56+((c[bc>>2]|0)-1<<5)+24>>3];Jc=c[ce>>2]|0;id=+h[Jc+24>>3];fd=c[Jc+232>>2]|0;hd=+(~~(id+ +(c[(c[(c[(Hx(_d|0)|0)+8>>2]|0)+184>>2]|0)+(fd*44|0)+20>>2]|0))|0);if(pd<qd&ra<hd){fd=c[bc>>2]|0;c[bc>>2]=fd+1;h[B+56+(fd<<5)>>3]=pd;h[B+56+(fd<<5)+8>>3]=ra;h[B+56+(fd<<5)+16>>3]=qd;h[B+56+(fd<<5)+24>>3]=hd}Fo(S,ee,ae,A,B,Lc);if(ma){Pe=il(S,C)|0}else{Pe=kl(S,C)|0}fd=c[C>>2]|0;if(ba&(fd|0)>4){Jc=Pe+16|0;Mc=Pe;c[Jc>>2]=c[Mc>>2];c[Jc+4>>2]=c[Mc+4>>2];c[Jc+8>>2]=c[Mc+8>>2];c[Jc+12>>2]=c[Mc+12>>2];Mc=Pe+32|0;Jc=Pe+(fd-1<<4)|0;c[Mc>>2]=c[Jc>>2];c[Mc+4>>2]=c[Jc+4>>2];c[Mc+8>>2]=c[Jc+8>>2];c[Mc+12>>2]=c[Jc+12>>2];uF(Pe+48|0,Jc|0,16)|0;c[C>>2]=4;Qe=4}else{if((fd|0)==0){break}else{Qe=fd}}fd=Qe+de|0;if((fd|0)>(c[44384]|0)){c[44384]=fd<<1;c[44380]=mk(c[44380]|0,fd<<5)|0;Re=c[C>>2]|0}else{Re=Qe}if((Re|0)>0){fd=c[44380]|0;Jc=(Re|0)>1;Mc=de;Nc=0;while(1){Hc=fd+(Mc<<4)|0;Kc=Pe+(Nc<<4)|0;c[Hc>>2]=c[Kc>>2];c[Hc+4>>2]=c[Kc+4>>2];c[Hc+8>>2]=c[Kc+8>>2];c[Hc+12>>2]=c[Kc+12>>2];Kc=Nc+1|0;if((Kc|0)<(Re|0)){Mc=Mc+1|0;Nc=Kc}else{break}}Se=(Jc?Re:1)+de|0}else{Se=de}Go(ee,S);if(Qc){Te=(c[Ub>>2]&3|0)==2?Mb:Wb}else{Te=(c[Rd>>2]&3|0)==2?ae:Zc}Ld=Se;Md=c[Te+28>>2]|0}if((Uc|0)==1){cm(yd,Md,c[44380]|0,Ld,11848);break}Nc=Ld-1|0;Mc=(Nc|0)>1;if(Mc){qd=+((da(c[U>>2]|0,Uc-1|0)|0)/2|0|0);fd=c[44380]|0;Lc=1;do{Qd=fd+(Lc<<4)|0;h[Qd>>3]=+h[Qd>>3]-qd;Lc=Lc+1|0;}while((Lc|0)<(Nc|0))}Lc=c[44384]|0;if((Lc|0)>(c[44382]|0)){c[44382]=Lc;fd=mk(c[44378]|0,Lc<<4)|0;c[44378]=fd;Ue=fd}else{Ue=c[44378]|0}fd=(Ld|0)>0;if(fd){Lc=c[44380]|0;Zc=0;do{Rd=Ue+(Zc<<4)|0;Qc=Lc+(Zc<<4)|0;c[Rd>>2]=c[Qc>>2];c[Rd+4>>2]=c[Qc+4>>2];c[Rd+8>>2]=c[Qc+8>>2];c[Rd+12>>2]=c[Qc+12>>2];Zc=Zc+1|0;}while((Zc|0)<(Ld|0))}cm(yd,Md,Ue,Ld,11848);if((Uc|0)>1){Ve=1}else{break}do{Zc=c[ca+(Ve+rc<<2)>>2]|0;Lc=Zc+8|0;Qc=c[Lc>>2]|0;if((c[Qc+164>>2]&32|0)==0){We=Zc}else{Rd=c[Qb>>2]|0;tF(Rd|0,Qc|0,176)|0;tF(zb|0,Zc|0,32)|0;c[Qb>>2]=Rd;Rd=Zc;c[((c[Xb>>2]&3|0)==3?Pb:Yb)+28>>2]=c[((c[Rd>>2]&3|0)==2?Zc:Zc-32|0)+28>>2];c[((c[Xb>>2]&3|0)==2?Pb:Zb)+28>>2]=c[((c[Rd>>2]&3|0)==3?Zc:Zc+32|0)+28>>2];Rd=(c[Qb>>2]|0)+16|0;Qc=(c[Lc>>2]|0)+56|0;c[Rd>>2]=c[Qc>>2];c[Rd+4>>2]=c[Qc+4>>2];c[Rd+8>>2]=c[Qc+8>>2];c[Rd+12>>2]=c[Qc+12>>2];c[Rd+16>>2]=c[Qc+16>>2];c[Rd+20>>2]=c[Qc+20>>2];c[Rd+24>>2]=c[Qc+24>>2];c[Rd+28>>2]=c[Qc+28>>2];c[Rd+32>>2]=c[Qc+32>>2];c[Rd+36>>2]=c[Qc+36>>2];Qc=(c[Qb>>2]|0)+56|0;Rd=(c[Lc>>2]|0)+16|0;c[Qc>>2]=c[Rd>>2];c[Qc+4>>2]=c[Rd+4>>2];c[Qc+8>>2]=c[Rd+8>>2];c[Qc+12>>2]=c[Rd+12>>2];c[Qc+16>>2]=c[Rd+16>>2];c[Qc+20>>2]=c[Rd+20>>2];c[Qc+24>>2]=c[Rd+24>>2];c[Qc+28>>2]=c[Rd+28>>2];c[Qc+32>>2]=c[Rd+32>>2];c[Qc+36>>2]=c[Rd+36>>2];a[(c[Qb>>2]|0)+112|0]=1;c[(c[Qb>>2]|0)+116>>2]=Zc;We=Pb}if(Mc){Zc=c[44380]|0;qd=+(c[U>>2]|0);Rd=1;do{Qc=Zc+(Rd<<4)|0;h[Qc>>3]=qd+ +h[Qc>>3];Rd=Rd+1|0;}while((Rd|0)<(Nc|0))}Rd=c[44378]|0;if(fd){Zc=c[44380]|0;Qc=0;do{Lc=Rd+(Qc<<4)|0;Jc=Zc+(Qc<<4)|0;c[Lc>>2]=c[Jc>>2];c[Lc+4>>2]=c[Jc+4>>2];c[Lc+8>>2]=c[Jc+8>>2];c[Lc+12>>2]=c[Jc+12>>2];Qc=Qc+1|0;}while((Qc|0)<(Ld|0))}cm(We,c[((c[We>>2]&3|0)==2?We:We-32|0)+28>>2]|0,Rd,Ld,11848);Ve=Ve+1|0;}while((Ve|0)<(Uc|0))}}while(0);if((Vc|0)<(ea|0)){rc=Vc}else{break}}}rc=c[(c[L>>2]|0)+180>>2]|0;if((rc|0)!=0){U=rc;do{rc=U+8|0;Pb=c[rc>>2]|0;do{if((a[Pb+156|0]|0)==1){Qb=c[Pb+104>>2]|0;if((Qb|0)==0){Xe=Pb;break}if((c[Pb+176>>2]|0)==0){Ye=Qb}else{Qb=(c[c[Pb+180>>2]>>2]|0)+8|0;Zb=c[Qb>>2]|0;if((a[Zb+112|0]|0)==0){Ze=Qb;_e=Zb}else{Qb=Zb;while(1){Zb=(c[Qb+116>>2]|0)+8|0;Xb=c[Zb>>2]|0;if((a[Xb+112|0]|0)==0){Ze=Zb;_e=Xb;break}else{Qb=Xb}}}Qb=c[_e+96>>2]|0;qd=+h[Qb+24>>3];pd=+h[Qb+32>>3];Qb=(c[(c[(Hx(U)|0)+8>>2]|0)+116>>2]&1|0)==0;h[(c[(c[Ze>>2]|0)+96>>2]|0)+56>>3]=+h[(c[rc>>2]|0)+16>>3]+(Qb?qd:pd)*.5;h[(c[(c[Ze>>2]|0)+96>>2]|0)+64>>3]=+h[(c[rc>>2]|0)+24>>3];a[(c[(c[Ze>>2]|0)+96>>2]|0)+81|0]=1;Ye=c[(c[rc>>2]|0)+104>>2]|0}_m(d,Ye);Xe=c[rc>>2]|0}else{Xe=Pb}}while(0);U=c[Xe+164>>2]|0;}while((U|0)!=0)}if((e|0)==0){W=S;X=ca;break}U=ux(d)|0;if((U|0)==0){W=S;X=ca;break}else{$e=U}while(1){U=mw(d,$e)|0;if((U|0)!=0){Pb=U;do{do{if((Ec[c[2962]&63](Pb)|0)<<24>>24!=0){U=c[(c[Pb+8>>2]|0)+8>>2]|0;if((U|0)==0){break}rc=c[U+4>>2]|0;Qb=kk(rc*48|0)|0;Xb=U|0;if((rc|0)>0){U=(c[Xb>>2]|0)+((rc-1|0)*48|0)|0;Zb=0;Yb=Qb;while(1){zb=U-48|0;Wb=Yb+48|0;Mb=c[U+4>>2]|0;Ub=kk(Mb<<4)|0;if((Mb|0)>0){ba=(c[U>>2]|0)+(Mb-1<<4)|0;ma=0;bc=Ub;while(1){ic=bc;hc=ba;c[ic>>2]=c[hc>>2];c[ic+4>>2]=c[hc+4>>2];c[ic+8>>2]=c[hc+8>>2];c[ic+12>>2]=c[hc+12>>2];hc=ma+1|0;if((hc|0)<(Mb|0)){ba=ba-16|0;ma=hc;bc=bc+16|0}else{break}}}c[Yb>>2]=Ub;c[Yb+4>>2]=Mb;c[Yb+8>>2]=c[U+12>>2];c[Yb+12>>2]=c[U+8>>2];bc=Yb+16|0;ma=U+32|0;c[bc>>2]=c[ma>>2];c[bc+4>>2]=c[ma+4>>2];c[bc+8>>2]=c[ma+8>>2];c[bc+12>>2]=c[ma+12>>2];ma=Yb+32|0;bc=U+16|0;c[ma>>2]=c[bc>>2];c[ma+4>>2]=c[bc+4>>2];c[ma+8>>2]=c[bc+8>>2];c[ma+12>>2]=c[bc+12>>2];bc=Zb+1|0;if((bc|0)<(rc|0)){U=zb;Zb=bc;Yb=Wb}else{break}}Yb=0;Zb=c[Xb>>2]|0;while(1){eF(c[Zb+(Yb*48|0)>>2]|0);U=Yb+1|0;Rd=c[Xb>>2]|0;if((U|0)<(rc|0)){Yb=U;Zb=Rd}else{af=Rd;break}}}else{af=c[Xb>>2]|0}eF(af);c[Xb>>2]=Qb}}while(0);Pb=ow(d,Pb)|0;}while((Pb|0)!=0)}Pb=vx(d,$e)|0;if((Pb|0)==0){W=S;X=ca;break}else{$e=Pb}}}}while(0);do{if((c[53792]|0)!=0|(c[53756]|0)!=0){if(!((c[53786]|0)!=0|(c[53784]|0)!=0)){break}$e=ux(d)|0;if(($e|0)==0){break}else{bf=$e}do{do{if((c[53792]|0)!=0){$e=pw(d,bf)|0;if(($e|0)==0){break}else{cf=$e}do{$e=cf;ca=cf-32|0;af=(c[$e>>2]&3|0)==2?cf:ca;if((c[(c[af+8>>2]|0)+100>>2]|0)!=0){lm(af,1)|0;_m(d,c[(c[((c[$e>>2]&3|0)==2?cf:ca)+8>>2]|0)+100>>2]|0)}cf=qw(d,cf)|0;}while((cf|0)!=0)}}while(0);do{if((c[53756]|0)!=0){ca=mw(d,bf)|0;if((ca|0)==0){break}else{df=ca}do{ca=df+8|0;do{if((c[(c[ca>>2]|0)+104>>2]|0)!=0){if((lm(df,0)|0)==0){break}_m(d,c[(c[ca>>2]|0)+104>>2]|0)}}while(0);df=ow(d,df)|0;}while((df|0)!=0)}}while(0);bf=vx(d,bf)|0;}while((bf|0)!=0)}}while(0);if((M|0)!=4){eF(X);eF(c[W+84>>2]|0);eF(W);eF(c[K+16>>2]|0);hl()}c[53522]=1;c[53746]=1;i=f;return}function Co(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;e=i;i=i+480|0;f=e|0;g=e+176|0;j=e+352|0;k=e+416|0;l=f|0;m=j|0;n=j+8|0;c[n>>2]=l;o=g|0;p=k|0;q=k+8|0;c[q>>2]=o;r=c[b>>2]|0;b=c[d>>2]|0;d=r+8|0;s=c[d>>2]|0;t=c[s+164>>2]|0;u=t&15;v=b+8|0;w=c[v>>2]|0;x=c[w+164>>2]&15;if((u|0)!=(x|0)){y=x-u|0;i=e;return y|0}u=c[s+172>>2]|0;if((u|0)==0){z=r;A=s}else{x=u;while(1){B=c[x+8>>2]|0;u=c[B+172>>2]|0;if((u|0)==0){break}else{x=u}}z=x;A=B}B=c[A+116>>2]|0;if((B|0)==0){C=z}else{z=B;while(1){B=c[(c[z+8>>2]|0)+116>>2]|0;if((B|0)==0){break}else{z=B}}C=z}z=c[w+172>>2]|0;if((z|0)==0){D=b;E=w}else{B=z;while(1){F=c[B+8>>2]|0;z=c[F+172>>2]|0;if((z|0)==0){break}else{B=z}}D=B;E=F}F=c[E+116>>2]|0;if((F|0)==0){G=D}else{D=F;while(1){F=c[(c[D+8>>2]|0)+116>>2]|0;if((F|0)==0){break}else{D=F}}G=D}D=c[C>>2]|0;F=D&3;E=c[(c[((F|0)==3?C:C+32|0)+28>>2]|0)+8>>2]|0;B=c[(c[((F|0)==2?C:C-32|0)+28>>2]|0)+8>>2]|0;F=(c[E+232>>2]|0)-(c[B+232>>2]|0)|0;z=c[G>>2]|0;A=z&3;x=c[(c[((A|0)==3?G:G+32|0)+28>>2]|0)+8>>2]|0;u=c[(c[((A|0)==2?G:G-32|0)+28>>2]|0)+8>>2]|0;A=(c[x+232>>2]|0)-(c[u+232>>2]|0)|0;H=(F|0)>-1?F:-F|0;F=(A|0)>-1?A:-A|0;if((H|0)!=(F|0)){y=H-F|0;i=e;return y|0}F=~~(+h[E+16>>3]- +h[B+16>>3]);B=(F|0)>-1?F:-F|0;F=~~(+h[x+16>>3]- +h[u+16>>3]);u=(F|0)>-1?F:-F|0;if((B|0)!=(u|0)){y=B-u|0;i=e;return y|0}u=D>>>4;D=z>>>4;if((u|0)!=(D|0)){y=u-D|0;i=e;return y|0}if((a[s+44|0]|0)==0){D=(a[s+84|0]|0)==0?C:r;C=c[D+8>>2]|0;I=D;J=C;K=c[C+164>>2]|0}else{I=r;J=s;K=t}t=I+8|0;if((K&32|0)==0){L=I;M=w}else{tF(f|0,J|0,176)|0;tF(j|0,I|0,32)|0;c[n>>2]=l;l=I;J=j;c[((c[J>>2]&3|0)==3?m:m+32|0)+28>>2]=c[((c[l>>2]&3|0)==2?I:I-32|0)+28>>2];c[((c[J>>2]&3|0)==2?m:m-32|0)+28>>2]=c[((c[l>>2]&3|0)==3?I:I+32|0)+28>>2];l=c[n>>2]|0;n=l+16|0;J=(c[t>>2]|0)+56|0;c[n>>2]=c[J>>2];c[n+4>>2]=c[J+4>>2];c[n+8>>2]=c[J+8>>2];c[n+12>>2]=c[J+12>>2];c[n+16>>2]=c[J+16>>2];c[n+20>>2]=c[J+20>>2];c[n+24>>2]=c[J+24>>2];c[n+28>>2]=c[J+28>>2];c[n+32>>2]=c[J+32>>2];c[n+36>>2]=c[J+36>>2];J=l+56|0;n=(c[t>>2]|0)+16|0;c[J>>2]=c[n>>2];c[J+4>>2]=c[n+4>>2];c[J+8>>2]=c[n+8>>2];c[J+12>>2]=c[n+12>>2];c[J+16>>2]=c[n+16>>2];c[J+20>>2]=c[n+20>>2];c[J+24>>2]=c[n+24>>2];c[J+28>>2]=c[n+28>>2];c[J+32>>2]=c[n+32>>2];c[J+36>>2]=c[n+36>>2];a[l+112|0]=1;c[l+116>>2]=I;L=m;M=c[v>>2]|0}if((a[M+44|0]|0)==0){m=(a[M+84|0]|0)==0?G:b;N=m;O=c[m+8>>2]|0}else{N=b;O=M}M=N+8|0;if((c[O+164>>2]&32|0)==0){P=O}else{tF(g|0,O|0,176)|0;tF(k|0,N|0,32)|0;c[q>>2]=o;o=N;O=k;c[((c[O>>2]&3|0)==3?p:p+32|0)+28>>2]=c[((c[o>>2]&3|0)==2?N:N-32|0)+28>>2];c[((c[O>>2]&3|0)==2?p:p-32|0)+28>>2]=c[((c[o>>2]&3|0)==3?N:N+32|0)+28>>2];o=c[q>>2]|0;q=o+16|0;p=(c[M>>2]|0)+56|0;c[q>>2]=c[p>>2];c[q+4>>2]=c[p+4>>2];c[q+8>>2]=c[p+8>>2];c[q+12>>2]=c[p+12>>2];c[q+16>>2]=c[p+16>>2];c[q+20>>2]=c[p+20>>2];c[q+24>>2]=c[p+24>>2];c[q+28>>2]=c[p+28>>2];c[q+32>>2]=c[p+32>>2];c[q+36>>2]=c[p+36>>2];p=o+56|0;q=(c[M>>2]|0)+16|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];c[p+16>>2]=c[q+16>>2];c[p+20>>2]=c[q+20>>2];c[p+24>>2]=c[q+24>>2];c[p+28>>2]=c[q+28>>2];c[p+32>>2]=c[q+32>>2];c[p+36>>2]=c[q+36>>2];a[o+112|0]=1;c[o+116>>2]=N;P=o}o=c[L+8>>2]|0;L=o+16|0;N=P+16|0;q=a[o+44|0]|0;do{if((a[P+44|0]|0)==0){Q=q<<24>>24!=0|0}else{if(q<<24>>24==0){y=-1;i=e;return y|0}p=~~(+h[L>>3]- +h[N>>3]);if((p|0)==0){Q=~~(+h[o+24>>3]- +h[P+24>>3]);break}else{y=p;i=e;return y|0}}}while(0);if((Q|0)!=0){y=Q;i=e;return y|0}Q=o+56|0;N=P+56|0;L=a[o+84|0]|0;do{if((a[P+84|0]|0)==0){R=L<<24>>24!=0|0}else{if(L<<24>>24==0){y=-1;i=e;return y|0}q=~~(+h[Q>>3]- +h[N>>3]);if((q|0)==0){R=~~(+h[o+64>>3]- +h[P+64>>3]);break}else{y=q;i=e;return y|0}}}while(0);if((R|0)!=0){y=R;i=e;return y|0}R=c[(c[d>>2]|0)+164>>2]&192;d=c[(c[v>>2]|0)+164>>2]&192;if((R|0)==(d|0)){y=((c[r>>2]|0)>>>4)-((c[b>>2]|0)>>>4)|0;i=e;return y|0}else{y=R-d|0;i=e;return y|0}return 0}function Do(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0,y=0.0,z=0.0,A=0.0,B=0.0;i=Hx(e|0)|0;j=e+8|0;k=c[j>>2]|0;l=+h[k+16>>3]- +h[k+88>>3]+-4.0;k=Jo(e,f,g,-1)|0;do{if((k|0)==0){m=l>=0.0;if(m){n=l+.5}else{n=l+-.5}o=c[d>>2]|0;if((~~n|0)>=(o|0)){p=o;break}if(m){q=l+.5}else{q=l+-.5}p=~~q}else{m=Ko(c[j>>2]|0,k)|0;do{if((m|0)==0){o=c[k+8>>2]|0;r=+h[o+16>>3]+ +(c[o+240>>2]|0);if((a[o+156|0]|0)==0){s=r+ +(c[(c[i+8>>2]|0)+236>>2]|0)*.5;break}else{s=r+ +(c[d+8>>2]|0);break}}else{s=+h[(c[m+8>>2]|0)+32>>3]+ +(c[d+8>>2]|0)}}while(0);r=s<l?s:l;if(r<0.0){t=r+-.5}else{t=r+.5}p=~~t}}while(0);t=+(p|0);p=c[j>>2]|0;do{if((a[p+156|0]|0)==1){if((c[p+104>>2]|0)==0){u=22;break}v=+h[p+16>>3]+10.0}else{u=22}}while(0);if((u|0)==22){v=+h[p+16>>3]+ +h[p+96>>3]+4.0}p=Jo(e,f,g,1)|0;do{if((p|0)==0){g=v>=0.0;if(g){w=v+.5}else{w=v+-.5}f=c[d+4>>2]|0;if((~~w|0)<=(f|0)){x=f;break}if(g){y=v+.5}else{y=v+-.5}x=~~y}else{g=Ko(c[j>>2]|0,p)|0;do{if((g|0)==0){f=c[p+8>>2]|0;l=+h[f+16>>3]- +h[f+88>>3];if((a[f+156|0]|0)==0){z=l- +(c[(c[i+8>>2]|0)+236>>2]|0)*.5;break}else{z=l- +(c[d+8>>2]|0);break}}else{z=+h[(c[g+8>>2]|0)+16>>3]- +(c[d+8>>2]|0)}}while(0);l=z>v?z:v;if(l<0.0){A=l+-.5}else{A=l+.5}x=~~A}}while(0);A=+(x|0);x=c[j>>2]|0;do{if((a[x+156|0]|0)==1){if((c[x+104>>2]|0)==0){B=A;break}v=A- +h[x+96>>3];if(v>=t){B=v;break}B=+h[x+16>>3]}else{B=A}}while(0);A=+h[x+24>>3];j=c[x+232>>2]|0;x=c[(c[i+8>>2]|0)+184>>2]|0;v=A- +(c[x+(j*44|0)+16>>2]|0);z=A+ +(c[x+(j*44|0)+20>>2]|0);h[b>>3]=t;h[b+8>>3]=v;h[b+16>>3]=B;h[b+24>>3]=z;return}function Eo(b){b=b|0;var d=0,e=0;d=c[b+8>>2]|0;if((a[d+156|0]|0)!=1){e=0;return e|0}if((c[d+176>>2]|0)>1){e=1;return e|0}e=(c[d+184>>2]|0)>1|0;return e|0}function Fo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var i=0,j=0,k=0,l=0.0,m=0,n=0.0,o=0,p=0;i=Ho(b,-1)|0;j=Ho(b,1)|0;do{if((i|0)!=0){if((om(i)|0)!=0){break}return}}while(0);do{if((j|0)!=0){if((om(j)|0)!=0){break}return}}while(0);j=Io(d,-1)|0;i=Io(d,1)|0;do{if((j|0)!=0){if((om(j)|0)!=0){break}return}}while(0);do{if((i|0)!=0){if((om(i)|0)!=0){break}return}}while(0);i=e+52|0;if((c[i>>2]|0)>0){j=0;do{dm(a,e+56+(j<<5)|0);j=j+1|0;}while((j|0)<(c[i>>2]|0))}i=a+80|0;j=c[i>>2]|0;e=j+1|0;d=e+g|0;b=d-3|0;if((g|0)>0){k=0;do{dm(a,180936+(k<<5)|0);k=k+1|0;}while((k|0)<(g|0))}g=c[f+52>>2]|0;if((g|0)>0){k=g;do{k=k-1|0;dm(a,f+56+(k<<5)|0);}while((k|0)>0)}k=d-2|0;if((k|0)>=(e|0)){d=a+84|0;f=j;do{j=c[d>>2]|0;g=j+(f<<5)|0;l=+h[g>>3];do{if((f-e&1|0)==0){m=j+(f<<5)+16|0;n=+h[m>>3];if(l<n){break}o=~~((l+n)*.5);h[g>>3]=+(o-8|0);h[m>>3]=+(o+8|0)}else{o=j+(f<<5)+16|0;n=+h[o>>3];if(l+16.0<=n){break}m=~~((l+n)*.5);h[g>>3]=+(m-8|0);h[o>>3]=+(m+8|0)}}while(0);f=f+1|0;}while((f|0)<(k|0))}if(((c[i>>2]|0)-1|0)<=0){return}k=a+84|0;a=0;while(1){f=c[k>>2]|0;d=f+(a<<5)|0;g=a+1|0;j=f+(g<<5)|0;do{if((a|0)<(e|0)|(a|0)>(b|0)){p=31}else{if((a-e&1|0)!=0){p=31;break}l=+h[d>>3]+16.0;m=f+(g<<5)+16|0;if(l>+h[m>>3]){h[m>>3]=l}l=+h[f+(a<<5)+16>>3]+-16.0;m=j|0;if(l>=+h[m>>3]){break}h[m>>3]=l}}while(0);do{if((p|0)==31){p=0;if(!((g|0)>=(e|0)&(a|0)<(b|0))){break}if((g-e&1|0)!=0){break}m=d|0;l=+h[f+(g<<5)+16>>3];if(+h[m>>3]+16.0>l){h[m>>3]=l+-16.0}m=f+(a<<5)+16|0;l=+h[j>>3];if(+h[m>>3]+-16.0>=l){break}h[m>>3]=l+16.0}}while(0);if((g|0)<((c[i>>2]|0)-1|0)){a=g}else{break}}return}function Go(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0.0,q=0,r=0;e=c[((c[b>>2]&3|0)==2?b:b-32|0)+28>>2]|0;b=e+8|0;if((a[(c[b>>2]|0)+156|0]|0)!=1){return}f=d+84|0;g=d+80|0;d=0;i=e;e=b;while(1){if((Ec[c[2963]&63](i)|0)<<24>>24!=0){j=14;break}b=c[g>>2]|0;a:do{if((d|0)<(b|0)){k=c[f>>2]|0;l=+h[(c[e>>2]|0)+24>>3];m=d;while(1){n=m+1|0;if(+h[k+(m<<5)+8>>3]<=l){o=m;break a}if((n|0)<(b|0)){m=n}else{o=n;break}}}else{o=d}}while(0);if((o|0)>=(b|0)){j=14;break}m=c[f>>2]|0;k=c[e>>2]|0;do{if(+h[m+(o<<5)+24>>3]>=+h[k+24>>3]){l=+h[m+(o<<5)>>3];n=~~l;p=+h[m+(o<<5)+16>>3];if((c[k+104>>2]|0)==0){q=~~((l+p)*.5);h[k+16>>3]=+(q|0);h[(c[e>>2]|0)+88>>3]=+(q-n|0);h[(c[e>>2]|0)+96>>3]=+(~~p-q|0);break}else{q=~~p;r=~~(p+ +h[k+96>>3]);h[k+16>>3]=+(q|0);h[(c[e>>2]|0)+88>>3]=+(q-n|0);h[(c[e>>2]|0)+96>>3]=+(r-q|0);break}}}while(0);k=c[c[(c[e>>2]|0)+180>>2]>>2]|0;m=c[((c[k>>2]&3|0)==2?k:k-32|0)+28>>2]|0;k=m+8|0;if((a[(c[k>>2]|0)+156|0]|0)==1){d=o;i=m;e=k}else{j=14;break}}if((j|0)==14){return}}function Ho(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=c[a>>2]&3;e=c[(c[(c[((d|0)==3?a:a+32|0)+28>>2]|0)+8>>2]|0)+180>>2]|0;f=c[e>>2]|0;if((f|0)==0){g=0;return g|0}h=a-32|0;i=0;j=0;k=f;while(1){f=c[(c[(c[((c[k>>2]&3|0)==2?k:k-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((da(f-(c[(c[(c[((d|0)==2?a:h)+28>>2]|0)+8>>2]|0)+236>>2]|0)|0,b)|0)<1){l=i}else{m=c[k+8>>2]|0;if((c[m+8>>2]|0)==0){n=c[m+116>>2]|0;if((n|0)==0){l=i;break}if((c[(c[n+8>>2]|0)+8>>2]|0)==0){l=i;break}}if((i|0)!=0){if((da((c[(c[(c[((c[i>>2]&3|0)==2?i:i-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0)-f|0,b)|0)<=0){l=i;break}}l=k}}while(0);f=j+1|0;n=c[e+(f<<2)>>2]|0;if((n|0)==0){g=l;break}else{i=l;j=f;k=n}}return g|0}function Io(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=c[a>>2]&3;e=c[(c[(c[((d|0)==2?a:a-32|0)+28>>2]|0)+8>>2]|0)+172>>2]|0;f=c[e>>2]|0;if((f|0)==0){g=0;return g|0}h=a+32|0;i=0;j=0;k=f;while(1){f=c[(c[(c[((c[k>>2]&3|0)==3?k:k+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((da(f-(c[(c[(c[((d|0)==3?a:h)+28>>2]|0)+8>>2]|0)+236>>2]|0)|0,b)|0)<1){l=i}else{m=c[k+8>>2]|0;if((c[m+8>>2]|0)==0){n=c[m+116>>2]|0;if((n|0)==0){l=i;break}if((c[(c[n+8>>2]|0)+8>>2]|0)==0){l=i;break}}if((i|0)!=0){if((da((c[(c[(c[((c[i>>2]&3|0)==3?i:i+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0)-f|0,b)|0)<=0){l=i;break}}l=k}}while(0);f=j+1|0;n=c[e+(f<<2)>>2]|0;if((n|0)==0){g=l;break}else{i=l;j=f;k=n}}return g|0}function Jo(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;g=b+8|0;h=c[(c[g>>2]|0)+232>>2]|0;i=c[(c[(Hx(b|0)|0)+8>>2]|0)+184>>2]|0;b=c[(c[g>>2]|0)+236>>2]|0;g=b+f|0;if((g|0)<=-1){j=0;return j|0}k=c[i+(h*44|0)>>2]|0;l=i+(h*44|0)+4|0;h=(e|0)==0;i=(d|0)==0;m=g;a:while(1){if((m|0)>=(k|0)){j=0;n=26;break}g=c[(c[l>>2]|0)+(m<<2)>>2]|0;o=c[g+8>>2]|0;p=a[o+156|0]|0;if((p<<24>>24|0)==0){j=g;n=26;break}else if((p<<24>>24|0)==1){if((c[o+104>>2]|0)!=0){j=g;n=26;break}}p=(c[o+236>>2]|0)>(b|0);q=o+180|0;if((c[q+4>>2]|0)!=1){j=g;n=26;break}b:do{if(h){n=17}else{r=c[c[q>>2]>>2]|0;s=e;t=0;while(1){u=c[((c[r>>2]&3|0)==2?r:r-32|0)+28>>2]|0;v=c[((c[s>>2]&3|0)==2?s:s-32|0)+28>>2]|0;if((u|0)==(v|0)){n=17;break b}w=c[u+8>>2]|0;u=c[v+8>>2]|0;if(p^(c[w+236>>2]|0)>(c[u+236>>2]|0)){break b}v=w+180|0;if((c[v+4>>2]|0)!=1){n=17;break b}if((a[w+156|0]|0)==0){n=17;break b}w=u+180|0;if((c[w+4>>2]|0)!=1){n=17;break b}if((a[u+156|0]|0)==0){n=17;break b}u=t+1|0;if((u|0)<2){r=c[c[v>>2]>>2]|0;s=c[c[w>>2]>>2]|0;t=u}else{n=17;break}}}}while(0);c:do{if((n|0)==17){n=0;q=o+172|0;if((c[q+4>>2]|0)!=1|i){j=g;n=26;break a}t=c[c[q>>2]>>2]|0;q=d;s=0;while(1){r=c[((c[t>>2]&3|0)==3?t:t+32|0)+28>>2]|0;u=c[((c[q>>2]&3|0)==3?q:q+32|0)+28>>2]|0;if((r|0)==(u|0)){j=g;n=26;break a}w=c[r+8>>2]|0;r=c[u+8>>2]|0;if(p^(c[w+236>>2]|0)>(c[r+236>>2]|0)){break c}u=w+172|0;if((c[u+4>>2]|0)!=1){j=g;n=26;break a}if((a[w+156|0]|0)==0){j=g;n=26;break a}w=r+172|0;if((c[w+4>>2]|0)!=1){j=g;n=26;break a}if((a[r+156|0]|0)==0){j=g;n=26;break a}r=s+1|0;if((r|0)<2){t=c[c[u>>2]>>2]|0;q=c[c[w>>2]>>2]|0;s=r}else{j=g;n=26;break a}}}}while(0);g=m+f|0;if((g|0)>-1){m=g}else{j=0;n=26;break}}if((n|0)==26){return j|0}return 0}function Ko(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0;if((a[b+156|0]|0)==0){e=c[b+212>>2]|0;f=e;g=e}else{e=c[(c[(c[c[b+180>>2]>>2]|0)+8>>2]|0)+116>>2]|0;b=e;i=c[e>>2]&3;f=c[(c[(c[((i|0)==2?b:e-32|0)+28>>2]|0)+8>>2]|0)+212>>2]|0;g=c[(c[(c[((i|0)==3?b:e+32|0)+28>>2]|0)+8>>2]|0)+212>>2]|0}e=d+8|0;b=c[e>>2]|0;if((a[b+156|0]|0)==0){i=c[b+212>>2]|0;if((i|0)==(Hx(d|0)|0)){j=0;k=(j|0)==0;l=(j|0)==(g|0);m=k|l;n=(j|0)==(f|0);o=m|n;p=o?0:j;return p|0}j=c[(c[e>>2]|0)+212>>2]|0;k=(j|0)==0;l=(j|0)==(g|0);m=k|l;n=(j|0)==(f|0);o=m|n;p=o?0:j;return p|0}p=c[(c[(c[c[b+180>>2]>>2]|0)+8>>2]|0)+116>>2]|0;b=p;j=p;o=p+32|0;n=c[((c[j>>2]&3|0)==3?b:o)+28>>2]|0;m=c[(c[n+8>>2]|0)+212>>2]|0;l=(m|0)==(Hx(n|0)|0);n=c[j>>2]|0;do{if(!l){m=c[(c[(c[((n&3|0)==3?b:o)+28>>2]|0)+8>>2]|0)+212>>2]|0;k=m;if((m|0)==0|(k|0)==(g|0)|(k|0)==(f|0)){break}d=c[m+8>>2]|0;m=c[e>>2]|0;q=+h[m+16>>3];if(+h[d+16>>3]>q){break}if(q>+h[d+32>>3]){break}q=+h[m+24>>3];if(+h[d+24>>3]>q){break}if(q>+h[d+40>>3]){break}else{r=k}return r|0}}while(0);o=p-32|0;p=c[((n&3|0)==2?b:o)+28>>2]|0;n=c[(c[p+8>>2]|0)+212>>2]|0;if((n|0)==(Hx(p|0)|0)){r=0;return r|0}p=c[(c[(c[((c[j>>2]&3|0)==2?b:o)+28>>2]|0)+8>>2]|0)+212>>2]|0;o=p;if((p|0)==0|(o|0)==(g|0)|(o|0)==(f|0)){r=0;return r|0}f=c[p+8>>2]|0;p=c[e>>2]|0;q=+h[p+16>>3];if(+h[f+16>>3]>q){r=0;return r|0}if(q>+h[f+32>>3]){r=0;return r|0}q=+h[p+24>>3];if(+h[f+24>>3]>q){r=0;return r|0}r=q>+h[f+40>>3]?0:o;return r|0}
+
+
+
+function ww(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;i=i+72|0;g=f|0;h=f+40|0;j=(c[e>>2]&3|0)==2?e:e-32|0;e=j|0;k=c[j>>2]&3;l=c[((k|0)==3?j:j+32|0)+28>>2]|0;m=c[((k|0)==2?j:j-32|0)+28>>2]|0;k=j;n=k|0;o=k+4|0;k=d[o]|d[o+1|0]<<8|d[o+2|0]<<16|d[o+3|0]<<24|0;o=h|0;if((l|0)==0|(m|0)==0){p=-1;i=f;return p|0}q=h;c[q>>2]=d[n]|d[n+1|0]<<8|d[n+2|0]<<16|d[n+3|0]<<24;c[q+4>>2]=k;c[h+28>>2]=l;do{if((c[m+12>>2]|0)==(b|0)){r=m+16|0}else{c[g+16>>2]=m;l=c[b+28>>2]|0;h=Hc[c[l>>2]&63](l,g,4)|0;if((h|0)==0){p=-1}else{r=h;break}i=f;return p|0}}while(0);g=b+36|0;m=r+20|0;ah(c[g>>2]|0,c[m>>2]|0)|0;r=c[g>>2]|0;h=Hc[c[r>>2]&63](r,o,4)|0;c[m>>2]=Yg(c[g>>2]|0)|0;if((h|0)==0){p=-1;i=f;return p|0}h=b|0;if((Ix(h)|0)==(b|0)){if((a[b+12|0]&64)!=0){dw(j)}Nx(b,j|0);ay(e);_w(b,2,c[j+4>>2]|0)}if((Ov(b,e,36,0,0)|0)!=0){p=-1;i=f;return p|0}if((Ix(h)|0)!=(b|0)){p=0;i=f;return p|0}tx(b,j|0);p=0;i=f;return p|0}function xw(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=i;i=i+72|0;g=f|0;h=f+40|0;j=b;k=zx(a,c[((c[j>>2]&3|0)==3?b:b+32|0)+28>>2]|0,e)|0;l=zx(a,c[((c[j>>2]&3|0)==2?b:b-32|0)+28>>2]|0,e)|0;if((k|0)==0|(l|0)==0){m=0;i=f;return m|0}n=b;o=n|0;p=n+4|0;n=d[p]|d[p+1|0]<<8|d[p+2|0]<<16|d[p+3|0]<<24|0;p=h|0;q=h;c[q>>2]=d[o]|d[o+1|0]<<8|d[o+2|0]<<16|d[o+3|0]<<24;c[q+4>>2]=n;c[h+28>>2]=k;if((c[l+12>>2]|0)==(a|0)){r=l+16|0;s=5}else{c[g+16>>2]=l;l=c[a+28>>2]|0;k=Hc[c[l>>2]&63](l,g,4)|0;if((k|0)==0){t=0}else{r=k;s=5}}if((s|0)==5){s=a+36|0;k=r+20|0;ah(c[s>>2]|0,c[k>>2]|0)|0;r=c[s>>2]|0;g=Hc[c[r>>2]&63](r,p,4)|0;c[k>>2]=Yg(c[s>>2]|0)|0;t=g}if((e|0)!=0&(t|0)==0){yw(a,b);u=b}else{u=t}if((u|0)==0){m=0;i=f;return m|0}t=c[u>>2]&3;if((t|0)==(c[j>>2]&3|0)){m=u;i=f;return m|0}m=(t|0)==3?u-32|0:u+32|0;i=f;return m|0}function yw(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;e=i;i=i+152|0;f=e|0;g=e+40|0;h=e+80|0;j=e+120|0;k=c[b>>2]&3;l=(k|0)==2?b:b-32|0;m=(k|0)==3?b:b+32|0;k=c[m+28>>2]|0;n=c[l+28>>2]|0;if((a|0)==0){i=e;return}o=b;b=j|0;p=g;q=k+12|0;r=k+16|0;s=l|0;l=f;t=n+12|0;u=n+16|0;v=m|0;m=f+16|0;f=g+16|0;g=j;w=j+28|0;j=h;x=h+16|0;if((k|0)==0|(n|0)==0){h=a;do{if((c[q>>2]|0)==(h|0)){y=r}else{c[f>>2]=k;z=c[h+28>>2]|0;y=Hc[c[z>>2]&63](z,p,4)|0}z=h+32|0;A=c[z>>2]|0;B=y+32|0;ah(A,c[B>>2]|0)|0;Hc[c[A>>2]&63](A,s,1)|0;c[B>>2]=Yg(A)|0;A=h+36|0;B=c[A>>2]|0;C=y+24|0;ah(B,c[C>>2]|0)|0;Hc[c[B>>2]&63](B,s,1)|0;c[C>>2]=Yg(B)|0;if((c[t>>2]|0)==(h|0)){D=u}else{c[m>>2]=n;B=c[h+28>>2]|0;D=Hc[c[B>>2]&63](B,l,4)|0}B=c[z>>2]|0;z=D+28|0;ah(B,c[z>>2]|0)|0;Hc[c[B>>2]&63](B,v,1)|0;c[z>>2]=Yg(B)|0;B=c[A>>2]|0;A=D+20|0;ah(B,c[A>>2]|0)|0;Hc[c[B>>2]&63](B,v,1)|0;c[A>>2]=Yg(B)|0;h=uy(h)|0;}while((h|0)!=0);i=e;return}else{E=a}while(1){a=o|0;h=o+4|0;D=d[h]|d[h+1|0]<<8|d[h+2|0]<<16|d[h+3|0]<<24|0;c[g>>2]=d[a]|d[a+1|0]<<8|d[a+2|0]<<16|d[a+3|0]<<24;c[g+4>>2]=D;c[w>>2]=k;if((c[t>>2]|0)==(E|0)){F=u;G=10}else{c[x>>2]=n;D=c[E+28>>2]|0;a=Hc[c[D>>2]&63](D,j,4)|0;if((a|0)!=0){F=a;G=10}}if((G|0)==10){G=0;a=E+36|0;D=F+20|0;ah(c[a>>2]|0,c[D>>2]|0)|0;h=c[a>>2]|0;y=Hc[c[h>>2]&63](h,b,4)|0;c[D>>2]=Yg(c[a>>2]|0)|0;if((y|0)!=0){G=16;break}}if((c[q>>2]|0)==(E|0)){H=r}else{c[f>>2]=k;y=c[E+28>>2]|0;H=Hc[c[y>>2]&63](y,p,4)|0}y=E+32|0;a=c[y>>2]|0;D=H+32|0;ah(a,c[D>>2]|0)|0;Hc[c[a>>2]&63](a,s,1)|0;c[D>>2]=Yg(a)|0;a=E+36|0;D=c[a>>2]|0;h=H+24|0;ah(D,c[h>>2]|0)|0;Hc[c[D>>2]&63](D,s,1)|0;c[h>>2]=Yg(D)|0;if((c[t>>2]|0)==(E|0)){I=u}else{c[m>>2]=n;D=c[E+28>>2]|0;I=Hc[c[D>>2]&63](D,l,4)|0}D=c[y>>2]|0;y=I+28|0;ah(D,c[y>>2]|0)|0;Hc[c[D>>2]&63](D,v,1)|0;c[y>>2]=Yg(D)|0;D=c[a>>2]|0;a=I+20|0;ah(D,c[a>>2]|0)|0;Hc[c[D>>2]&63](D,v,1)|0;c[a>>2]=Yg(D)|0;D=uy(E)|0;if((D|0)==0){G=16;break}else{E=D}}if((G|0)==16){i=e;return}}function zw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;e=c[(c[b+28>>2]|0)+4>>2]|0;a=c[(c[d+28>>2]|0)+4>>2]|0;f=e-a|0;do{if((e|0)==(a|0)){if((c[b>>2]&3|0)==0){g=0;return g|0}if((c[d>>2]&3|0)==0){g=0;return g|0}else{h=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;break}}else{h=f}}while(0);if((h|0)==0){g=0;return g|0}g=h>>31|1;return g|0}function Aw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;e=c[b+28>>2]|0;a=c[d+28>>2]|0;if((e|0)==(a|0)){f=((c[b>>2]|0)>>>4)-((c[d>>2]|0)>>>4)|0}else{f=((c[e>>2]|0)>>>4)-((c[a>>2]|0)>>>4)|0}if((f|0)==0){g=0;return g|0}g=f>>31|1;return g|0}function Bw(){var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;e=i;i=i+2224|0;f=e+1024|0;g=e+1424|0;c[53298]=0;c[53306]=-2;h=e|0;j=0;k=0;l=f;m=f;n=200;o=g;p=g;a:while(1){b[m>>1]=j;if((l+(n-1<<1)|0)>>>0>m>>>0){q=l;r=m;s=n;t=o;u=p}else{g=m-l>>1;v=g+1|0;if(n>>>0>9999>>>0){w=152;break}x=n<<1;y=x>>>0>1e4>>>0?1e4:x;x=dF(y*6|0|3)|0;if((x|0)==0){w=152;break}z=x;A=l;tF(x|0,A|0,v<<1)|0;B=x+((y>>>1&1073741823)<<2)|0;tF(B|0,p|0,v<<2)|0;if((l|0)!=(f|0)){eF(A)}if((y-1|0)>(g|0)){q=z;r=z+(g<<1)|0;s=y;t=B+(g<<2)|0;u=B}else{C=z;D=1;break}}if((j|0)==6){C=q;D=0;break}z=a[75496+j|0]|0;B=z<<24>>24;do{if(z<<24>>24==-18){w=22}else{g=c[53306]|0;if((g|0)==-2){y=jy()|0;c[53306]=y;E=y}else{E=g}do{if((E|0)<1){c[53306]=0;F=0}else{if(E>>>0>=269>>>0){F=2;break}F=d[74992+E|0]|0}}while(0);g=F+B|0;if(g>>>0>59>>>0){w=22;break}if((d[75696+g|0]|0)!=(F|0)){w=22;break}y=a[75264+g|0]|0;g=y<<24>>24;if(y<<24>>24<1){G=-g|0;w=23;break}else{c[53306]=-2;y=t+4|0;c[y>>2]=c[53300];H=g;I=(k|0)==0?0:k-1|0;J=r;K=y;break}}}while(0);do{if((w|0)==22){w=0;B=a[75616+j|0]|0;if(B<<24>>24!=0){G=B&255;w=23;break}B=c[53306]|0;do{if((k|0)==0){c[53298]=(c[53298]|0)+1;oy(148320);L=r;M=t;N=z}else if((k|0)==3){if((B|0)<1){if((B|0)==0){C=q;D=1;break a}else{L=r;M=t;N=z;break}}else{c[53306]=-2;L=r;M=t;N=z;break}}else{L=r;M=t;N=z}}while(0);while(1){if(N<<24>>24!=-18){B=(N<<24>>24)+1|0;if(N<<24>>24>-2&(B|0)<60&(B|0)==19){break}}if((L|0)==(q|0)){C=q;D=1;break a}B=L-2|0;L=B;M=M-4|0;N=a[75496+(b[B>>1]|0)|0]|0}B=M+4|0;c[B>>2]=c[53300];H=1;I=3;J=L;K=B}}while(0);b:do{if((w|0)==23){w=0;z=d[75328+G|0]|0;B=1-z|0;y=t+(B<<2)|0;g=c[y>>2]|0;c:do{switch(G|0){case 32:{A=c[t-16>>2]|0;v=c[t-8>>2]|0;x=c[t>>2]|0;do{if((x|0)==0){O=v}else{P=xF(v|0)|0;Q=P+2+(xF(x|0)|0)|0;if((Q|0)<1025){R=h}else{R=dF(Q)|0}nb(R|0,81472,(Q=i,i=i+16|0,c[Q>>2]=v,c[Q+8>>2]=x,Q)|0)|0;i=Q;Q=dy(c[53732]|0,R)|0;fy(c[53732]|0,v)|0;fy(c[53732]|0,x)|0;if((R|0)==(h|0)){O=Q;break}eF(R);O=Q}}while(0);x=Ax(c[c[53540]>>2]|0,A,1)|0;v=sx(c[53732]|0,16)|0;Q=v;c[v>>2]=259;c[v+4>>2]=x;c[v+8>>2]=O;v=c[53540]|0;x=v+12|0;P=c[x>>2]|0;if((P|0)!=0){c[P+12>>2]=Q}c[x>>2]=Q;x=v+8|0;if((c[x>>2]|0)==0){c[x>>2]=Q}fy(c[53732]|0,A)|0;S=g;break};case 12:{S=1;break};case 21:{if((c[t-4>>2]|0)==0){Q=c[53540]|0;x=c[Q+24>>2]|0;if((x|0)==0){T=Q}else{v=x;x=Q;while(1){Q=v+4|0;P=c[Q>>2]|0;U=Wv(c[x>>2]|0,1,P,0)|0;V=Q|0;c[V>>2]=U;if((U|0)==0){c[V>>2]=Wv(c[c[53540]>>2]|0,1,P,213328)|0}c[v>>2]=266;fy(c[53732]|0,P)|0;P=c[v+12>>2]|0;V=c[53540]|0;if((P|0)==0){T=V;break}else{v=P;x=V}}}x=c[T+8>>2]|0;if((x|0)==0){W=T;X=0}else{v=x;x=T;while(1){A=c[v+4>>2]|0;V=c[x+24>>2]|0;if((V|0)==0){Y=x}else{P=V;do{do{if((c[P>>2]|0)==266){V=c[P+4>>2]|0;if((V|0)==0){break}hw(A,V,c[P+8>>2]|0)|0}}while(0);P=c[P+12>>2]|0;}while((P|0)!=0);Y=c[53540]|0}P=c[v+12>>2]|0;if((P|0)==0){break}else{v=P;x=Y}}W=Y;X=c[Y+8>>2]|0}Gw(X);c[W+12>>2]=0;c[W+8>>2]=0;x=c[53540]|0;v=x+24|0;Gw(c[v>>2]|0);c[x+28>>2]=0;c[v>>2]=0;v=c[53540]|0;x=v+16|0;Gw(c[x>>2]|0);c[v+20>>2]=0;c[x>>2]=0;c[(c[53540]|0)+4>>2]=0;S=g;break c}Ew(2);x=c[53540]|0;v=c[x+24>>2]|0;if((v|0)==0){Z=0}else{P=a[172752]|0;A=0;V=v;while(1){do{if((c[V>>2]|0)==267){v=c[V+4>>2]|0;if((a[v]|0)!=P<<24>>24){_=A;break}if((Ya(v|0,172752)|0)!=0){_=A;break}_=c[V+8>>2]|0}else{_=A}}while(0);v=c[V+12>>2]|0;if((v|0)==0){Z=_;break}else{A=_;V=v}}}V=c[x+16>>2]|0;A=V+12|0;P=c[A>>2]|0;if((P|0)==0){$=x}else{v=V;V=A;A=P;do{P=v+4|0;do{if((c[v>>2]|0)==262){U=c[P>>2]|0;Q=ux(U)|0;if((Q|0)==0){break}else{aa=Q}do{Q=zx(c[c[53540]>>2]|0,aa,0)|0;Fw(Q,0,c[V>>2]|0,Z);aa=vx(U,aa)|0;}while((aa|0)!=0)}else{U=c[P>>2]|0;if((U|0)==0){break}Fw(c[U+4>>2]|0,c[U+8>>2]|0,A,Z);Q=c[U+12>>2]|0;if((Q|0)==0){break}else{ba=Q}do{Fw(c[ba+4>>2]|0,c[ba+8>>2]|0,c[V>>2]|0,Z);ba=c[ba+12>>2]|0;}while((ba|0)!=0)}}while(0);v=c[V>>2]|0;V=v+12|0;A=c[V>>2]|0;}while((A|0)!=0);$=c[53540]|0}A=$+8|0;Gw(c[A>>2]|0);c[$+12>>2]=0;c[A>>2]=0;A=c[53540]|0;V=A+16|0;Gw(c[V>>2]|0);c[A+20>>2]=0;c[V>>2]=0;V=c[53540]|0;A=V+24|0;Gw(c[A>>2]|0);c[V+28>>2]=0;c[A>>2]=0;c[(c[53540]|0)+4>>2]=0;S=g;break};case 34:{Cw(258,0);S=g;break};case 35:{S=258;break};case 36:{S=259;break};case 37:{S=260;break};case 38:{S=c[t-4>>2]|0;break};case 39:{S=0;break};case 48:{A=c[t-8>>2]|0;V=c[t>>2]|0;v=sx(c[53732]|0,16)|0;x=v;c[v>>2]=267;c[v+4>>2]=A;c[v+8>>2]=V;V=c[53540]|0;v=V+28|0;A=c[v>>2]|0;if((A|0)!=0){c[A+12>>2]=x}c[v>>2]=x;v=V+24|0;if((c[v>>2]|0)!=0){S=g;break c}c[v>>2]=x;S=g;break};case 2:{py();fx(c[53732]|0);S=g;break};case 25:{x=c[53540]|0;v=c[x+8>>2]|0;if((v|0)==0){V=c[x+4>>2]|0;if((V|0)==0){ca=0;da=x}else{x=sx(c[53732]|0,16)|0;c[x>>2]=262;c[x+4>>2]=V;c[x+8>>2]=0;ca=x;da=c[53540]|0}c[da+4>>2]=0;ea=ca}else{x=sx(c[53732]|0,16)|0;c[x>>2]=265;c[x+4>>2]=v;c[x+8>>2]=0;c[(c[53540]|0)+12>>2]=0;c[(c[53540]|0)+8>>2]=0;ea=x}if((ea|0)==0){S=g;break c}x=c[53540]|0;v=x+20|0;V=c[v>>2]|0;if((V|0)!=0){c[V+12>>2]=ea}c[v>>2]=ea;v=x+16|0;if((c[v>>2]|0)!=0){S=g;break c}c[v>>2]=ea;S=g;break};case 3:{v=c[53732]|0;if((v|0)==0){S=g;break c}Kw(v)|0;c[53854]=0;c[53732]=0;S=g;break};case 6:{v=c[t>>2]|0;x=c[53732]|0;if((x|0)==0){a[174920]=(c[t-8>>2]&255)<<1&2|c[t-4>>2]&1|a[174920]&-12|8;V=Hw(v,174920,c[53840]|0)|0;c[53732]=V;fa=V}else{fa=x}c[53854]=fa;x=c[53540]|0;V=sx(fa,36)|0;c[V+32>>2]=x;c[V>>2]=fa;c[53540]=V;fy(0,v)|0;S=g;break};case 55:{S=0;break};case 59:{S=c[t>>2]|0;break};case 60:{S=c[t>>2]|0;break};case 61:{S=c[t>>2]|0;break};case 62:{v=c[t-8>>2]|0;V=c[t>>2]|0;x=xF(v|0)|0;A=x+1+(xF(V|0)|0)|0;if((A|0)<1025){ga=h}else{ga=dF(A)|0}zF(ga|0,v|0)|0;AF(ga|0,V|0)|0;A=dy(c[53732]|0,ga)|0;fy(c[53732]|0,v)|0;fy(c[53732]|0,V)|0;if((ga|0)!=(h|0)){eF(ga)}S=A;break};case 8:{S=0;break};case 9:{S=1;break};case 7:{S=c[t>>2]|0;break};case 49:{A=c[t>>2]|0;V=sx(c[53732]|0,16)|0;v=V;c[V>>2]=267;c[V+4>>2]=A;c[V+8>>2]=0;V=c[53540]|0;A=V+28|0;x=c[A>>2]|0;if((x|0)!=0){c[x+12>>2]=v}c[A>>2]=v;A=V+24|0;if((c[A>>2]|0)!=0){S=g;break c}c[A>>2]=v;S=g;break};case 51:{v=c[t>>2]|0;A=c[53540]|0;V=ry(c[A>>2]|0,v,1)|0;x=sx(c[53732]|0,36)|0;c[x+32>>2]=A;c[x>>2]=V;c[53540]=x;fy(c[53732]|0,v)|0;S=g;break};case 52:{v=c[53540]|0;x=c[v>>2]|0;V=c[v+32>>2]|0;tx(c[53732]|0,v);c[53540]=V;c[V+4>>2]=x;S=g;break};case 53:{S=c[t>>2]|0;break};case 54:{S=0;break};case 26:{S=1;break};case 27:{S=0;break};case 30:{x=c[t>>2]|0;V=Ax(c[c[53540]>>2]|0,x,1)|0;v=sx(c[53732]|0,16)|0;A=v;c[v>>2]=259;c[v+4>>2]=V;c[v+8>>2]=0;v=c[53540]|0;V=v+12|0;P=c[V>>2]|0;if((P|0)!=0){c[P+12>>2]=A}c[V>>2]=A;V=v+8|0;if((c[V>>2]|0)==0){c[V>>2]=A}fy(c[53732]|0,x)|0;S=g;break};case 10:{S=0;break};case 11:{S=0;break};case 24:{x=c[53540]|0;A=c[x+8>>2]|0;if((A|0)==0){V=c[x+4>>2]|0;if((V|0)==0){ha=0;ia=x}else{x=sx(c[53732]|0,16)|0;c[x>>2]=262;c[x+4>>2]=V;c[x+8>>2]=0;ha=x;ia=c[53540]|0}c[ia+4>>2]=0;ja=ha}else{x=sx(c[53732]|0,16)|0;c[x>>2]=265;c[x+4>>2]=A;c[x+8>>2]=0;c[(c[53540]|0)+12>>2]=0;c[(c[53540]|0)+8>>2]=0;ja=x}if((ja|0)==0){S=g;break c}x=c[53540]|0;A=x+20|0;V=c[A>>2]|0;if((V|0)!=0){c[V+12>>2]=ja}c[A>>2]=ja;A=x+16|0;if((c[A>>2]|0)!=0){S=g;break c}c[A>>2]=ja;S=g;break};case 31:{A=c[t-8>>2]|0;x=c[t>>2]|0;V=Ax(c[c[53540]>>2]|0,A,1)|0;v=sx(c[53732]|0,16)|0;P=v;c[v>>2]=259;c[v+4>>2]=V;c[v+8>>2]=x;x=c[53540]|0;v=x+12|0;V=c[v>>2]|0;if((V|0)!=0){c[V+12>>2]=P}c[v>>2]=P;v=x+8|0;if((c[v>>2]|0)==0){c[v>>2]=P}fy(c[53732]|0,A)|0;S=g;break};case 33:{Cw(c[t-8>>2]|0,c[t-4>>2]|0);S=g;break};default:{S=g}}}while(0);g=r+(-z<<1)|0;A=t+(B<<2)|0;c[y>>2]=S;P=(d[75392+G|0]|0)-24|0;v=b[g>>1]|0;x=v+(a[75456+P|0]|0)|0;do{if(x>>>0<60>>>0){if((d[75696+x|0]|0)!=(v|0)){break}H=a[75264+x|0]|0;I=k;J=g;K=A;break b}}while(0);H=a[75576+P|0]|0;I=k;J=g;K=A}}while(0);j=H;k=I;l=q;m=J+2|0;n=s;o=K;p=u}if((w|0)==152){oy(116392);C=l;D=2}if((C|0)==(f|0)){i=e;return D|0}eF(C);i=e;return D|0}function Cw(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=i;if((d|0)!=0){Fv(0,167720,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f}d=c[(c[53540]|0)+24>>2]|0;if((d|0)!=0){g=d;do{if((c[g+8>>2]|0)==0){Fv(0,167720,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f}g=c[g+12>>2]|0;}while((g|0)!=0)}if((b|0)==260){h=2}else if((b|0)==258){h=0}else if((b|0)==259){h=1}else{h=0}Ew(h);b=c[53540]|0;g=c[b+24>>2]|0;if((g|0)==0){j=b;k=0;l=j+24|0;Gw(k);m=j+28|0;c[m>>2]=0;c[l>>2]=0;i=e;return}else{n=g}do{g=c[n+4>>2]|0;b=c[c[53540]>>2]|0;if((a[g+21|0]|0)!=0&(b|0)==(c[53732]|0)){o=g;p=14}else{f=Wv(b,h,c[g+8>>2]|0,c[n+8>>2]|0)|0;if((c[c[53540]>>2]|0)==(c[53732]|0)){o=f;p=14}}if((p|0)==14){p=0;a[o+22|0]=1}n=c[n+12>>2]|0;}while((n|0)!=0);n=c[53540]|0;j=n;k=c[n+24>>2]|0;l=j+24|0;Gw(k);m=j+28|0;c[m>>2]=0;c[l>>2]=0;i=e;return}function Dw(a,b){a=a|0;b=b|0;var d=0,e=0;c[53304]=a;c[53732]=0;c[53854]=0;d=(b|0)!=0?b:174304;c[53840]=d;iy(d,a);Bw()|0;a=c[53854]|0;if((a|0)!=0){e=a;return e|0}qy();e=c[53854]|0;return e|0}function Ew(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[(c[53540]|0)+24>>2]|0;if((d|0)==0){return}if((b|0)==2){e=d}else{f=d;do{d=f+4|0;g=c[d>>2]|0;h=Wv(c[c[53540]>>2]|0,b,g,0)|0;i=d|0;c[i>>2]=h;if((h|0)==0){c[i>>2]=Wv(c[c[53540]>>2]|0,b,g,213328)|0}c[f>>2]=266;fy(c[53732]|0,g)|0;f=c[f+12>>2]|0;}while((f|0)!=0);return}do{f=e+4|0;b=c[f>>2]|0;if((a[b]|0)==(a[172752]|0)){if((Ya(b|0,172752)|0)!=0){j=5}}else{j=5}if((j|0)==5){j=0;g=Wv(c[c[53540]>>2]|0,2,b,0)|0;i=f|0;c[i>>2]=g;if((g|0)==0){c[i>>2]=Wv(c[c[53540]>>2]|0,2,b,213328)|0}c[e>>2]=266;fy(c[53732]|0,b)|0}e=c[e+12>>2]|0;}while((e|0)!=0);return}function Fw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;f=d+4|0;if((c[d>>2]|0)==262){d=c[f>>2]|0;g=ux(d)|0;if((g|0)==0){return}else{h=g}do{g=zx(c[c[53540]>>2]|0,h,0)|0;i=uw(c[c[53540]>>2]|0,a,g,e,1)|0;do{if((i|0)!=0){g=c[i>>2]&3;j=c[((g|0)==2?i:i-32|0)+28>>2]|0;k=(c[((g|0)==3?i:i+32|0)+28>>2]|0)!=(j|0)&(j|0)==(a|0);j=k?b:0;g=k?0:b;if((g|0)!=0){k=Wv(c[c[53540]>>2]|0,2,97656,0)|0;if((k|0)==0){l=Wv(c[c[53540]>>2]|0,2,97656,213328)|0}else{l=k}hw(i|0,l,g)|0}if((j|0)==0){m=i|0}else{g=Wv(c[c[53540]>>2]|0,2,91384,0)|0;if((g|0)==0){n=Wv(c[c[53540]>>2]|0,2,91384,213328)|0}else{n=g}g=i|0;hw(g,n,j)|0;m=g}g=c[(c[53540]|0)+24>>2]|0;if((g|0)==0){break}else{o=g}do{do{if((c[o>>2]|0)==266){g=c[o+4>>2]|0;if((g|0)==0){break}hw(m,g,c[o+8>>2]|0)|0}}while(0);o=c[o+12>>2]|0;}while((o|0)!=0)}}while(0);h=vx(d,h)|0;}while((h|0)!=0);return}else{h=c[f>>2]|0;if((h|0)==0){return}else{p=h}do{h=zx(c[c[53540]>>2]|0,c[p+4>>2]|0,0)|0;f=c[p+8>>2]|0;d=uw(c[c[53540]>>2]|0,a,h,e,1)|0;do{if((d|0)!=0){h=c[d>>2]&3;o=c[((h|0)==2?d:d-32|0)+28>>2]|0;m=(c[((h|0)==3?d:d+32|0)+28>>2]|0)!=(o|0)&(o|0)==(a|0);o=m?b:f;h=m?f:b;if((h|0)!=0){m=Wv(c[c[53540]>>2]|0,2,97656,0)|0;if((m|0)==0){q=Wv(c[c[53540]>>2]|0,2,97656,213328)|0}else{q=m}hw(d|0,q,h)|0}if((o|0)==0){r=d|0}else{h=Wv(c[c[53540]>>2]|0,2,91384,0)|0;if((h|0)==0){s=Wv(c[c[53540]>>2]|0,2,91384,213328)|0}else{s=h}h=d|0;hw(h,s,o)|0;r=h}h=c[(c[53540]|0)+24>>2]|0;if((h|0)==0){break}else{t=h}do{do{if((c[t>>2]|0)==266){h=c[t+4>>2]|0;if((h|0)==0){break}hw(r,h,c[t+8>>2]|0)|0}}while(0);t=c[t+12>>2]|0;}while((t|0)!=0)}}while(0);p=c[p+12>>2]|0;}while((p|0)!=0);return}}function Gw(a){a=a|0;var b=0,d=0;if((a|0)==0){return}else{b=a}while(1){a=c[b+12>>2]|0;d=c[b>>2]|0;if((d|0)==267|(d|0)==266){fy(c[53732]|0,c[b+8>>2]|0)|0}else if((d|0)==265){Gw(c[b+4>>2]|0)}tx(c[53732]|0,b);if((a|0)==0){break}else{b=a}}return}function Hw(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;f=i;i=i+8|0;g=d;d=i;i=i+4|0;i=i+7&-8;c[d>>2]=c[g>>2];g=f|0;h=(e|0)!=0;if(h){j=c[e>>2]|0;k=(j|0)==0?174232:j}else{k=174232}j=Ec[c[k>>2]&63](e)|0;l=k+4|0;m=Oc[c[l>>2]&255](j,68)|0;c[m>>2]=k;c[m+12>>2]=j;if(h){h=c[e+4>>2]|0;c[m+4>>2]=(h|0)==0?174272:h;h=c[e+8>>2]|0;n=(h|0)==0?174256:h}else{c[m+4>>2]=174272;n=174256}c[m+8>>2]=n;a[m+40|0]=1;n=Oc[c[l>>2]&255](j,56)|0;j=n;l=n;c[l>>2]=c[l>>2]&-4;l=n+52|0;c[l>>2]=m;h=n+12|0;k=c[d>>2]|0;c[h>>2]=k;a[h]=k&255|8;c[n+48>>2]=j;k=Oc[c[c[m+4>>2]>>2]&255](j,e)|0;c[(c[l>>2]|0)+16>>2]=k;if((Yw(j,0,b,g,1)|0)==0){o=Iw(j)|0;p=o|0;ax(o,0,p);i=f;return o|0}c[n+4>>2]=c[g>>2];o=Iw(j)|0;p=o|0;ax(o,0,p);i=f;return o|0}function Iw(b){b=b|0;var d=0,e=0,f=0,g=0;c[b+24>>2]=yy(b,173952,c[43326]|0)|0;c[b+28>>2]=yy(b,173992,c[43326]|0)|0;d=b|0;e=(Ix(d)|0)==(b|0);c[b+32>>2]=yy(b,e?174152:174072,c[43326]|0)|0;e=(Ix(d)|0)==(b|0);c[b+36>>2]=yy(b,e?174192:174112,c[43326]|0)|0;c[b+40>>2]=yy(b,174032,c[43326]|0)|0;e=uy(b)|0;do{if((e|0)!=0){f=(c[e+52>>2]|0)+24|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;f=b;c[f>>2]=c[f>>2]&15|g<<4;g=c[e+40>>2]|0;Hc[c[g>>2]&63](g,d,1)|0;if((a[e+12|0]&64)!=0){break}Jx(b,d);return b|0}}while(0);Yv(b);Jx(b,d);return b|0}function Jw(a,b){a=a|0;b=b|0;var d=0;d=(c[a+52>>2]|0)+24+(b<<2)|0;b=(c[d>>2]|0)+1|0;c[d>>2]=b;return b|0}function Kw(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=uy(b)|0;e=(d|0)==0;do{if(e){f=b+52|0;if((c[(c[c[f>>2]>>2]|0)+16>>2]|0)==0){break}Nx(b,b|0);_w(b,0,c[b+4>>2]|0);g=c[f>>2]|0;Cc[c[(c[g>>2]|0)+16>>2]&255](c[g+12>>2]|0);h=0;return h|0}}while(0);g=sy(b)|0;if((g|0)!=0){f=g;while(1){g=ty(f)|0;Kw(f)|0;if((g|0)==0){break}else{f=g}}}f=ux(b)|0;if((f|0)!=0){g=f;while(1){f=vx(b,g)|0;Cx(b,g)|0;if((f|0)==0){break}else{g=f}}}gx(b);g=b|0;Nx(b,g);if((Ay(b,c[b+28>>2]|0)|0)!=0){h=-1;return h|0}if((Ay(b,c[b+24>>2]|0)|0)!=0){h=-1;return h|0}if((Ay(b,c[b+36>>2]|0)|0)!=0){h=-1;return h|0}if((Ay(b,c[b+32>>2]|0)|0)!=0){h=-1;return h|0}if((Ay(b,c[b+40>>2]|0)|0)!=0){h=-1;return h|0}do{if((a[b+12|0]&64)!=0){if((_v(b)|0)==0){break}else{h=-1}return h|0}}while(0);ay(b|0);_w(b,0,c[b+4>>2]|0);if(!e){vy(d,b)|0;tx(d,g);h=0;return h|0}d=b+52|0;e=c[d>>2]|0;f=c[e+36>>2]|0;if((f|0)==0){i=e}else{e=f;while(1){Qx(b,c[e>>2]|0)|0;f=c[d>>2]|0;j=c[f+36>>2]|0;if((j|0)==0){i=f;break}else{e=j}}}Cc[c[(c[i+4>>2]|0)+20>>2]&255](c[i+16>>2]|0);if((by(b)|0)!=0){h=-1;return h|0}b=c[d>>2]|0;d=c[b+12>>2]|0;i=(c[b>>2]|0)+12|0;Dc[c[i>>2]&63](d,g);Dc[c[i>>2]&63](d,b);h=0;return h|0}function Lw(a){a=a|0;return bh(c[a+28>>2]|0)|0}function Mw(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;b=ux(a)|0;if((b|0)==0){d=0;return d|0}e=a+32|0;f=b;b=0;while(1){g=nw(a,f)|0;if((g|0)==0){h=0}else{i=c[e>>2]|0;j=g+32|0;ah(i,c[j>>2]|0)|0;g=bh(i)|0;c[j>>2]=Yg(i)|0;h=g}g=h+b|0;i=vx(a,f)|0;if((i|0)==0){d=g;break}else{f=i;b=g}}return d|0}function Nw(b){b=b|0;return a[b+12|0]&1|0}function Ow(b){b=b|0;return(a[b+12|0]&1^1)&255|0}function Pw(a){a=a|0;return(d[a+12|0]|0)>>>1&1|0}function Qw(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=c[b+4>>2]|0;b=c[d+4>>2]|0;if((e|0)==(b|0)){f=0;return f|0}f=e-b>>31|1;return f|0}function Rw(a,b){a=a|0;b=b|0;return a|0}function Sw(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if((d|0)==0){c[e>>2]=c[5410];c[5410]=(c[5410]|0)+2;return 1}b=a;if((f|0)==0){g=cy(b,d)|0}else{g=dy(b,d)|0}c[e>>2]=g;return 1}function Tw(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function Uw(a,b,c){a=a|0;b=b|0;c=c|0;if((c&1|0)!=0){return}fy(a,c)|0;return}function Vw(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((c&1|0)==0){d=c}else{d=0}return d|0}function Ww(a){a=a|0;return}function Xw(a,b,c){a=a|0;b=b|0;c=c|0;return}function Yw(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=(e|0)!=0;do{if(h){do{if((a[e]|0)!=37){i=c[b+52>>2]|0;j=Gc[c[(c[i+4>>2]|0)+4>>2]&127](c[i+16>>2]|0,d,e,f,g)|0;if((j|0)==0){break}else{k=j}return k|0}}while(0);j=bx(b,d,e,f)|0;if((j|0)==0){break}else{k=j}return k|0}}while(0);if((g|0)==0){k=0;return k|0}j=c[b+52>>2]|0;i=Gc[c[(c[j+4>>2]|0)+4>>2]&127](c[j+16>>2]|0,d,0,f,g)|0;if((i|0)==0|h^1){k=i;return k|0}cx(b,d,e,c[f>>2]|0);k=i;return k|0}function Zw(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[a+52>>2]|0;return Hc[c[(c[e+4>>2]|0)+8>>2]&63](c[e+16>>2]|0,b,d)|0}function _w(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;ex(a,b,d)|0;e=c[a+52>>2]|0;Tc[c[(c[e+4>>2]|0)+12>>2]&127](c[e+16>>2]|0,b,d);return}function $w(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=i;d=Hx(a)|0;e=a;f=a+4|0;a=dx(d,c[e>>2]&3,c[f>>2]|0)|0;if((a|0)!=0){g=a;i=b;return g|0}a=c[d+52>>2]|0;d=c[(c[a+4>>2]|0)+16>>2]|0;do{if((d|0)!=0){h=Hc[d&63](c[a+16>>2]|0,c[e>>2]&3,c[f>>2]|0)|0;if((h|0)==0){break}else{g=h}i=b;return g|0}}while(0);if((c[e>>2]&3|0)==2){g=0;i=b;return g|0}e=c[f>>2]|0;nb(212968,113184,(f=i,i=i+16|0,c[f>>2]=37,c[f+8>>2]=e,f)|0)|0;i=f;g=212968;i=b;return g|0}function ax(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[a+52>>2]|0;Tc[c[(c[e+4>>2]|0)+24>>2]&127](c[e+16>>2]|0,b,d);return}function bx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0;f=i;i=i+24|0;g=f|0;h=c[(c[a+52>>2]|0)+44+(((b|0)==3?2:b)<<2)>>2]|0;if((h|0)==0){j=0;i=f;return j|0}b=cy(a,d)|0;if((b|0)==0){j=0;i=f;return j|0}c[g+20>>2]=b;b=Hc[c[h>>2]&63](h,g,4)|0;if((b|0)==0){j=0;i=f;return j|0}c[e>>2]=c[b+16>>2];j=1;i=f;return j|0}function cx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=sx(a,24)|0;c[f+16>>2]=e;c[f+20>>2]=dy(a,d)|0;d=(b|0)==3?2:b;b=a+52|0;e=c[b>>2]|0;g=c[e+44+(d<<2)>>2]|0;if((g|0)==0){h=yy(a,172656,c[43326]|0)|0;c[(c[b>>2]|0)+44+(d<<2)>>2]=h;i=h;j=c[b>>2]|0}else{i=g;j=e}e=c[j+56+(d<<2)>>2]|0;if((e|0)==0){j=yy(a,172696,c[43326]|0)|0;c[(c[b>>2]|0)+56+(d<<2)>>2]=j;k=j}else{k=e}Hc[c[i>>2]&63](i,f,1)|0;Hc[c[k>>2]&63](k,f,1)|0;return}function dx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+24|0;f=e|0;g=c[(c[a+52>>2]|0)+56+(((b|0)==3?2:b)<<2)>>2]|0;if((g|0)==0){h=0;i=e;return h|0}c[f+16>>2]=d;d=Hc[c[g>>2]&63](g,f,4)|0;if((d|0)==0){h=0;i=e;return h|0}h=c[d+20>>2]|0;i=e;return h|0}function ex(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0;e=i;i=i+24|0;f=e|0;g=(b|0)==3?2:b;b=a+52|0;h=c[(c[b>>2]|0)+56+(g<<2)>>2]|0;if((h|0)==0){j=0;i=e;return j|0}c[f+16>>2]=d;d=Hc[c[h>>2]&63](h,f,4)|0;if((d|0)==0){j=0;i=e;return j|0}f=c[(c[b>>2]|0)+44+(g<<2)>>2]|0;Hc[c[f>>2]&63](f,d,2)|0;f=c[(c[b>>2]|0)+56+(g<<2)>>2]|0;Hc[c[f>>2]&63](f,d,2)|0;fy(a,c[d+20>>2]|0)|0;tx(a,d);j=1;i=e;return j|0}function fx(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=i;i=i+24|0;e=d|0;c[53854]=b;f=b+52|0;g=c[f>>2]|0;h=e;j=e+16|0;e=0;do{k=g+44+(e<<2)|0;l=c[k>>2]|0;do{if((l|0)!=0){m=Hc[c[l>>2]&63](l,0,128)|0;if((m|0)==0){break}else{n=m}while(1){m=c[k>>2]|0;o=Hc[c[m>>2]&63](m,n,8)|0;do{if((a[c[n+20>>2]|0]|0)==37){m=c[(c[f>>2]|0)+56+(e<<2)>>2]|0;if((m|0)==0){break}c[j>>2]=c[n+16>>2];p=Hc[c[m>>2]&63](m,h,4)|0;if((p|0)==0){break}m=c[(c[f>>2]|0)+44+(e<<2)>>2]|0;Hc[c[m>>2]&63](m,p,2)|0;m=c[(c[f>>2]|0)+56+(e<<2)>>2]|0;Hc[c[m>>2]&63](m,p,2)|0;fy(b,c[p+20>>2]|0)|0;tx(b,p)}}while(0);if((o|0)==0){break}else{n=o}}}}while(0);e=e+1|0;}while((e|0)<3);i=d;return}function gx(a){a=a|0;var b=0,d=0,e=0;c[53854]=a;b=a+52|0;a=c[b>>2]|0;d=a+44|0;e=c[d>>2]|0;if((e|0)!=0){Vg(e)|0;c[d>>2]=0}d=a+48|0;e=c[d>>2]|0;if((e|0)!=0){Vg(e)|0;c[d>>2]=0}d=a+52|0;a=c[d>>2]|0;if((a|0)!=0){Vg(a)|0;c[d>>2]=0}d=c[b>>2]|0;b=d+56|0;a=c[b>>2]|0;if((a|0)!=0){Vg(a)|0;c[b>>2]=0}b=d+60|0;a=c[b>>2]|0;if((a|0)!=0){Vg(a)|0;c[b>>2]=0}b=d+64|0;d=c[b>>2]|0;if((d|0)==0){return}Vg(d)|0;c[b>>2]=0;return}function hx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return(c[b+16>>2]|0)-(c[d+16>>2]|0)|0}function ix(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return(c[b+20>>2]|0)-(c[d+20>>2]|0)|0}function jx(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;if((db(b|0,c|0,a|0)|0)==0){d=0;return d|0}d=xF(b|0)|0;return d|0}function kx(a,b){a=a|0;b=b|0;return Oa(b|0,a|0)|0}function lx(a){a=a|0;return Ia(a|0)|0}function mx(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+32|0;d=b|0;e=b+16|0;c[4961]=c[43565];c[4962]=c[43566];c[d>>2]=a;c[d+4>>2]=xF(a|0)|0;c[d+8>>2]=0;c[e>>2]=174232;c[e+4>>2]=174272;c[e+8>>2]=19840;a=Dw(d,e)|0;i=b;return a|0}function nx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((e|0)==0){f=0;return f|0}g=b+8|0;h=c[g>>2]|0;if((h|0)>=(c[b+4>>2]|0)){f=0;return f|0}i=c[b>>2]|0;b=0;j=a[i+h|0]|0;k=d;d=i+(h+1)|0;while(1){a[k]=j;l=b+1|0;if(!(j<<24>>24!=10&(l|0)<(e|0))){break}h=a[d]|0;if(h<<24>>24==0){break}else{b=l;j=h;k=k+1|0;d=d+1|0}}c[g>>2]=(c[g>>2]|0)+l;f=l;return f|0}function ox(a){a=a|0;return 0}function px(a,b){a=a|0;b=b|0;a=dF(b)|0;vF(a|0,0,b|0)|0;return a|0}function qx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=gF(b,d)|0;if(d>>>0<=c>>>0){return a|0}vF(a+c|0,0,d-c|0)|0;return a|0}function rx(a,b){a=a|0;b=b|0;eF(b);return}function sx(a,b){a=a|0;b=b|0;var d=0,e=0;d=i;e=c[a+52>>2]|0;a=Oc[c[(c[e>>2]|0)+4>>2]&255](c[e+12>>2]|0,b)|0;if((a|0)!=0){i=d;return a|0}Fv(1,98640,(b=i,i=i+1|0,i=i+7&-8,c[b>>2]=0,b)|0)|0;i=b;i=d;return a|0}function tx(a,b){a=a|0;b=b|0;var d=0;if((b|0)==0){return}d=c[a+52>>2]|0;Dc[c[(c[d>>2]|0)+12>>2]&63](c[d+12>>2]|0,b);return}function ux(a){a=a|0;var b=0,d=0;b=c[a+24>>2]|0;a=Hc[c[b>>2]&63](b,0,128)|0;if((a|0)==0){d=0;return d|0}d=c[a+16>>2]|0;return d|0}function vx(a,b){a=a|0;b=b|0;var d=0,e=0;d=nw(a,b)|0;if((d|0)==0){e=0;return e|0}b=c[a+24>>2]|0;a=Hc[c[b>>2]&63](b,d,8)|0;if((a|0)==0){e=0;return e|0}e=c[a+16>>2]|0;return e|0}function wx(a){a=a|0;var b=0,d=0;b=c[a+24>>2]|0;a=Hc[c[b>>2]&63](b,0,256)|0;if((a|0)==0){d=0;return d|0}d=c[a+16>>2]|0;return d|0}function xx(a,b){a=a|0;b=b|0;var d=0,e=0;d=nw(a,b)|0;if((d|0)==0){e=0;return e|0}b=c[a+24>>2]|0;a=Hc[c[b>>2]&63](b,d,16)|0;if((a|0)==0){e=0;return e|0}e=c[a+16>>2]|0;return e|0}function yx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;c[53265]=d;c[53258]=213056;f=c[b+28>>2]|0;g=Hc[c[f>>2]&63](f,213016,4)|0;if((g|0)==0){h=0}else{h=c[g+16>>2]|0}if((h|0)!=0|(e|0)==0){i=h;return i|0}h=b|0;e=Ix(h)|0;do{if((e|0)!=(b|0)){c[53265]=d;c[53258]=213056;g=c[e+28>>2]|0;f=Hc[c[g>>2]&63](g,213016,4)|0;if((f|0)==0){break}g=c[f+16>>2]|0;if((g|0)==0){break}zx(b,g,1)|0;i=g;return i|0}}while(0);if((Zw(b,1,d)|0)==0){i=0;return i|0}e=Jw(b,1)|0;g=sx(b,52)|0;f=g;j=g;k=c[j>>2]|0;c[g+4>>2]=d;c[j>>2]=e<<4|k&12|1;c[g+12>>2]=Ix(h)|0;if((a[(Ix(h)|0)+12|0]&64)!=0){Wx(g,c[43580]|0,16,0)|0}k=g+16|0;e=b;do{j=e+28|0;bh(c[j>>2]|0)|0;if((Ix(e|0)|0)==(e|0)){l=k}else{l=sx(e,36)|0}c[l+16>>2]=f;d=c[j>>2]|0;Hc[c[d>>2]&63](d,l,1)|0;d=c[e+24>>2]|0;Hc[c[d>>2]&63](d,l,1)|0;e=uy(e)|0;}while((e|0)!=0);if((a[(Ix(h)|0)+12|0]&64)!=0){aw(b,f)}Jx(b,g);i=f;return i|0}function zx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=a|0;f=Ix(e)|0;if((f|0)!=(c[b+12>>2]|0)){g=0;return g|0}c[53265]=c[b+4>>2];c[53258]=213056;f=a+28|0;h=c[f>>2]|0;i=Hc[c[h>>2]&63](h,213016,4)|0;if((i|0)==0){j=0}else{j=c[i+16>>2]|0}if((j|0)!=0|(d|0)==0){g=j;return g|0}j=uy(a)|0;if((j|0)==0){g=0;return g|0}i=zx(j,b,d)|0;bh(c[f>>2]|0)|0;if((Ix(e)|0)==(a|0)){k=i+16|0}else{k=sx(a,36)|0}c[k+16>>2]=i;e=c[f>>2]|0;f=k;Hc[c[e>>2]&63](e,f,1)|0;e=c[a+24>>2]|0;Hc[c[e>>2]&63](e,f,1)|0;g=i;return g|0}function Ax(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;f=i;i=i+8|0;g=f|0;h=b|0;j=Ix(h)|0;do{if((Yw(b,1,d,g,0)|0)!=0){c[53265]=c[g>>2];c[53258]=213056;k=c[b+28>>2]|0;l=Hc[c[k>>2]&63](k,213016,4)|0;do{if((l|0)!=0){k=c[l+16>>2]|0;if((k|0)==0){break}else{m=k}i=f;return m|0}}while(0);if((e|0)==0|(j|0)==(b|0)){break}c[53265]=c[g>>2];c[53258]=213056;l=c[j+28>>2]|0;k=Hc[c[l>>2]&63](l,213016,4)|0;if((k|0)==0){break}l=c[k+16>>2]|0;if((l|0)==0){break}m=zx(b,l,1)|0;i=f;return m|0}}while(0);if((e|0)==0){m=0;i=f;return m|0}if((Yw(b,1,d,g,1)|0)==0){m=0;i=f;return m|0}d=c[g>>2]|0;g=Jw(b,1)|0;e=sx(b,52)|0;j=e;l=e;k=c[l>>2]|0;c[e+4>>2]=d;c[l>>2]=g<<4|k&12|1;c[e+12>>2]=Ix(h)|0;if((a[(Ix(h)|0)+12|0]&64)!=0){Wx(e,c[43580]|0,16,0)|0}k=e+16|0;g=b;do{l=g+28|0;bh(c[l>>2]|0)|0;if((Ix(g|0)|0)==(g|0)){n=k}else{n=sx(g,36)|0}c[n+16>>2]=j;d=c[l>>2]|0;Hc[c[d>>2]&63](d,n,1)|0;d=c[g+24>>2]|0;Hc[c[d>>2]&63](d,n,1)|0;g=uy(g)|0;}while((g|0)!=0);if((a[(Ix(h)|0)+12|0]&64)!=0){aw(b,j)}Jx(b,e);ax(b,1,e);m=j;i=f;return m|0}function Bx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;c[53288]=b;d=rw(a,b)|0;if((d|0)!=0){e=d;while(1){d=sw(a,e,b)|0;vw(a,e,0);if((d|0)==0){break}else{e=d}}}e=c[a+28>>2]|0;Hc[c[e>>2]&63](e,213136,2)|0;e=c[a+24>>2]|0;Hc[c[e>>2]&63](e,213136,2)|0;return}function Cx(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=d|0;f=d+4|0;c[53265]=c[f>>2];c[53258]=213056;g=c[b+28>>2]|0;h=Hc[c[g>>2]&63](g,213016,4)|0;if((h|0)==0){i=-1;return i|0}if((c[h+16>>2]|0)==0){i=-1;return i|0}h=b|0;if((Ix(h)|0)==(b|0)){g=rw(b,d)|0;if((g|0)!=0){j=g;while(1){g=sw(b,j,d)|0;ww(b,j)|0;if((g|0)==0){break}else{j=g}}}if((a[b+12|0]&64)!=0){bw(d)}Nx(b,d|0);ay(e);_w(b,1,c[f>>2]|0)}if((Ov(b,e,10,0,0)|0)!=0){i=-1;return i|0}if((Ix(h)|0)!=(b|0)){i=0;return i|0}tx(b,d|0);i=0;return i|0}function Dx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=c[(c[b+16>>2]|0)+4>>2]|0;b=c[(c[d+16>>2]|0)+4>>2]|0;if((e|0)==(b|0)){f=0;return f|0}f=e-b>>31|1;return f|0}function Ex(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=(c[c[b+16>>2]>>2]|0)>>>4;b=(c[c[d+16>>2]>>2]|0)>>>4;if((e|0)==(b|0)){f=0;return f|0}f=e-b>>31|1;return f|0}function Fx(a,b,d){a=a|0;b=b|0;d=d|0;d=c[b+16>>2]|0;if((d+16|0)==(b|0)){return}tx(c[d+12>>2]|0,b);return}function Gx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;e=b;f=c[e>>2]|0;do{if((f&3|0)==0){if((uy(b)|0)==(a|0)){g=c[e>>2]|0;h=5;break}else{Fv(1,87664,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0)|0;i=j;k=-1;break}}else{g=f;h=5}}while(0);do{if((h|0)==5){f=g&3;if((f|0)==3|(f|0)==2){k=ww(a,b)|0;break}else if((f|0)==1){k=Cx(a,b)|0;break}else if((f|0)==0){k=Kw(b)|0;break}else{Fv(1,139728,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0)|0;i=j;k=0;break}}}while(0);i=d;return k|0}function Hx(a){a=a|0;var b=0,d=0,e=0;b=i;d=c[a>>2]&3;if((d|0)==1){e=c[a+12>>2]|0}else if((d|0)==3|(d|0)==2){e=c[(c[a+28>>2]|0)+12>>2]|0}else if((d|0)==0){e=a}else{Fv(1,111488,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0)|0;i=a;e=0}i=b;return e|0}function Ix(a){a=a|0;var b=0,d=0,e=0;b=i;d=c[a>>2]&3;if((d|0)==1){e=c[a+12>>2]|0}else if((d|0)==3|(d|0)==2){e=c[(c[a+28>>2]|0)+12>>2]|0}else if((d|0)==0){e=c[a+48>>2]|0}else{Fv(1,119456,(a=i,i=i+1|0,i=i+7&-8,c[a>>2]=0,a)|0)|0;i=a;e=0}i=b;return e|0}function Jx(b,d){b=b|0;d=d|0;var e=0;e=c[b+52>>2]|0;if((a[e+40|0]|0)==0){Tx(b,d,100,0);return}else{Kx(b,d,c[e+36>>2]|0);return}}function Kx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((d|0)==0){return}Kx(a,b,c[d+8>>2]|0);e=b;f=c[b>>2]&3;if((f|0)==0){g=c[d>>2]|0}else if((f|0)==1){g=(c[d>>2]|0)+12|0}else if((f|0)==2){g=(c[d>>2]|0)+24|0}else{return}f=c[g>>2]|0;if((f|0)==0){return}Tc[f&127](a,e,c[d+4>>2]|0);return}function Lx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=c[b+52>>2]|0;if((a[f+40|0]|0)==0){Tx(b,d,101,e);return}else{Mx(b,d,e,c[f+36>>2]|0);return}}function Mx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)==0){return}Mx(a,b,d,c[e+8>>2]|0);f=b;g=c[b>>2]&3;if((g|0)==2){h=(c[e>>2]|0)+28|0}else if((g|0)==0){h=(c[e>>2]|0)+4|0}else if((g|0)==1){h=(c[e>>2]|0)+16|0}else{return}g=c[h>>2]|0;if((g|0)==0){return}Vc[g&63](a,f,c[e+4>>2]|0,d);return}function Nx(b,d){b=b|0;d=d|0;var e=0;e=c[b+52>>2]|0;if((a[e+40|0]|0)==0){Tx(b,d,102,0);return}else{Ox(b,d,c[e+36>>2]|0);return}}function Ox(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((d|0)==0){return}Ox(a,b,c[d+8>>2]|0);e=b;f=c[b>>2]&3;if((f|0)==2){g=(c[d>>2]|0)+32|0}else if((f|0)==0){g=(c[d>>2]|0)+8|0}else if((f|0)==1){g=(c[d>>2]|0)+20|0}else{return}f=c[g>>2]|0;if((f|0)==0){return}Tc[f&127](a,e,c[d+4>>2]|0);return}function Px(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=sx(a,12)|0;c[e>>2]=b;c[e+4>>2]=d;d=a+52|0;c[e+8>>2]=c[(c[d>>2]|0)+36>>2];c[(c[d>>2]|0)+36>>2]=e;return}function Qx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=(c[a+52>>2]|0)+36|0;e=c[d>>2]|0;if((e|0)==0){f=-1;return f|0}do{if((c[e>>2]|0)==(b|0)){c[d>>2]=c[e+8>>2];g=e;h=8}else{i=e;while(1){if((i|0)==0){f=-1;h=10;break}j=i+8|0;k=c[j>>2]|0;if((c[k>>2]|0)==(b|0)){break}else{i=k}}if((h|0)==10){return f|0}if((k|0)==0){l=i;break}c[j>>2]=c[k+8>>2];g=i;h=8}}while(0);do{if((h|0)==8){if((g|0)==0){f=-1}else{l=g;break}return f|0}}while(0);tx(a,l);f=0;return f|0}function Rx(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;e=c[a>>2]&3;if((e|0)==3|(e|0)==2){f=c[(c[a+28>>2]|0)+12>>2]|0}else if((e|0)==1){f=c[a+12>>2]|0}else if((e|0)==0){f=c[a+48>>2]|0}else{Fv(1,119456,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0)|0;i=g;f=0}e=b;h=c[e>>2]&3;if((h|0)==0){j=c[b+48>>2]|0}else if((h|0)==3|(h|0)==2){j=c[(c[b+28>>2]|0)+12>>2]|0}else if((h|0)==1){j=c[b+12>>2]|0}else{Fv(1,119456,(g=i,i=i+1|0,i=i+7&-8,c[g>>2]=0,g)|0)|0;i=g;j=0}if((f|0)!=(j|0)){k=0;i=d;return k|0}j=c[e>>2]&3;if((j|0)==1){k=(yx(a,c[b+4>>2]|0,0)|0)!=0|0;i=d;return k|0}else if((j|0)==0){j=b;while(1){if((j|0)==(a|0)){k=1;l=18;break}e=uy(j)|0;if((e|0)==0){k=0;l=18;break}else{j=e}}if((l|0)==18){i=d;return k|0}}else{k=(xw(a,b,0)|0)!=0|0;i=d;return k|0}return 0}function Sx(a){a=a|0;return c[a>>2]&3|0}function Tx(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;f=i;i=i+168|0;g=f|0;h=f+24|0;j=f+48|0;k=f+72|0;l=f+96|0;m=f+120|0;n=f+144|0;o=Wx(a|0,173400,44,0)|0;if((d|0)==100){p=c[b>>2]&3;if((p|0)==1){q=o+12|0}else if((p|0)==2){q=o+16|0}else if((p|0)==0){q=o+8|0}else{Fv(1,135120,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;q=0}p=c[q>>2]|0;if((p|0)==0){s=Hx(b|0)|0;t=yy(s,173336,c[43326]|0)|0;c[q>>2]=t;u=t}else{u=p}p=b+4|0;c[n+8>>2]=c[p>>2];t=u|0;if((Hc[c[t>>2]&63](u,n,4)|0)!=0){i=f;return}n=sx(Hx(b|0)|0,24)|0;c[n+16>>2]=b;c[n+8>>2]=c[p>>2];c[n+12>>2]=a;if((e|0)!=0){p=sx(a,8)|0;c[n+20>>2]=p;c[p>>2]=e}Hc[c[t>>2]&63](u,n,1)|0;i=f;return}else if((d|0)==101){n=b;u=c[n>>2]&3;if((u|0)==0){v=o+8|0}else if((u|0)==1){v=o+12|0}else if((u|0)==2){v=o+16|0}else{Fv(1,135120,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;v=0}u=c[v>>2]|0;if((u|0)==0){t=Hx(b|0)|0;p=yy(t,173336,c[43326]|0)|0;c[v>>2]=p;w=p}else{w=u}u=b+4|0;c[m+8>>2]=c[u>>2];if((Hc[c[w>>2]&63](w,m,4)|0)!=0){i=f;return}m=c[n>>2]&3;if((m|0)==2){x=o+40|0}else if((m|0)==0){x=o+32|0}else if((m|0)==1){x=o+36|0}else{Fv(1,135120,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;x=0}m=c[x>>2]|0;if((m|0)==0){w=Hx(b|0)|0;p=yy(w,173336,c[43326]|0)|0;c[x>>2]=p;y=p}else{y=m}c[l+8>>2]=c[u>>2];if((Hc[c[y>>2]&63](y,l,4)|0)!=0){i=f;return}l=c[n>>2]&3;if((l|0)==0){z=o+20|0}else if((l|0)==1){z=o+24|0}else if((l|0)==2){z=o+28|0}else{Fv(1,135120,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;z=0}l=c[z>>2]|0;if((l|0)==0){n=Hx(b|0)|0;y=yy(n,173336,c[43326]|0)|0;c[z>>2]=y;A=y}else{A=l}c[k+8>>2]=c[u>>2];l=A|0;y=Hc[c[l>>2]&63](A,k,4)|0;if((y|0)==0){k=sx(Hx(b|0)|0,24)|0;c[k+16>>2]=b;c[k+8>>2]=c[u>>2];c[k+12>>2]=a;if((e|0)!=0){u=sx(a,8)|0;c[k+20>>2]=u;c[u>>2]=e}Hc[c[l>>2]&63](A,k,1)|0;B=k}else{B=y}y=c[B+20>>2]|0;if((y|0)==0){i=f;return}else{C=y}while(1){if((c[C>>2]|0)==(e|0)){D=73;break}y=c[C+4>>2]|0;if((y|0)==0){D=73;break}else{C=y}}if((D|0)==73){i=f;return}}else if((d|0)==102){d=b;D=c[d>>2]&3;if((D|0)==0){E=o+8|0}else if((D|0)==1){E=o+12|0}else if((D|0)==2){E=o+16|0}else{Fv(1,135120,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;E=0}D=c[E>>2]|0;if((D|0)==0){C=Hx(b|0)|0;y=yy(C,173336,c[43326]|0)|0;c[E>>2]=y;F=y}else{F=D}D=b+4|0;c[j+8>>2]=c[D>>2];y=F|0;E=Hc[c[y>>2]&63](F,j,4)|0;if((E|0)!=0){Hc[c[y>>2]&63](F,E,2)|0}E=c[d>>2]&3;if((E|0)==0){G=o+20|0}else if((E|0)==1){G=o+24|0}else if((E|0)==2){G=o+28|0}else{Fv(1,135120,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;G=0}E=c[G>>2]|0;if((E|0)==0){F=Hx(b|0)|0;y=yy(F,173336,c[43326]|0)|0;c[G>>2]=y;H=y}else{H=E}c[h+8>>2]=c[D>>2];E=H|0;y=Hc[c[E>>2]&63](H,h,4)|0;if((y|0)!=0){Hc[c[E>>2]&63](H,y,2)|0}y=c[d>>2]&3;if((y|0)==0){I=o+32|0}else if((y|0)==1){I=o+36|0}else if((y|0)==2){I=o+40|0}else{Fv(1,135120,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;I=0}o=c[I>>2]|0;if((o|0)==0){y=Hx(b|0)|0;d=yy(y,173336,c[43326]|0)|0;c[I>>2]=d;J=d}else{J=o}c[g+8>>2]=c[D>>2];o=J|0;if((Hc[c[o>>2]&63](J,g,4)|0)!=0){i=f;return}g=sx(Hx(b|0)|0,24)|0;c[g+16>>2]=b;c[g+8>>2]=c[D>>2];c[g+12>>2]=a;if((e|0)!=0){D=sx(a,8)|0;c[g+20>>2]=D;c[D>>2]=e}Hc[c[o>>2]&63](J,g,1)|0;i=f;return}else{Fv(1,79840,(r=i,i=i+1|0,i=i+7&-8,c[r>>2]=0,r)|0)|0;i=r;i=f;return}}function Ux(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;d=c[b+20>>2]|0;a=b+12|0;if((d|0)==0){e=c[a>>2]|0;tx(e,b);return}else{f=d}while(1){d=c[f+4>>2]|0;tx(c[a>>2]|0,f);if((d|0)==0){break}else{f=d}}e=c[a>>2]|0;tx(e,b);return}function Vx(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;g=b+8|0;h=c[g>>2]|0;j=h;while(1){if((j|0)==0){k=0;l=14;break}m=c[j>>2]|0;if((m|0)==(d|0)){l=7;break}if((a[d]|0)==(a[m]|0)){if((Ya(d|0,m|0)|0)==0){l=7;break}}m=c[j+4>>2]|0;if((m|0)==(h|0)){k=0;l=14;break}else{j=m}}if((l|0)==7){d=b;m=c[d>>2]|0;if((m&4|0)==0){if((j|0)==(h|0)&(e|0)==0){k=h;i=f;return k|0}c[g>>2]=j;g=e<<2&4;c[d>>2]=m&-5|g;d=m&3;if((d-2|0)>>>0>=2>>>0){k=j;i=f;return k|0}m=(d|0)==3?b-32|0:b+32|0;c[m+8>>2]=j;b=m;c[b>>2]=c[b>>2]&-5|g;k=j;i=f;return k|0}else{if((e|0)==0){k=j;i=f;return k|0}if((h|0)==(j|0)){k=h;i=f;return k|0}Fv(1,168464,(h=i,i=i+1|0,i=i+7&-8,c[h>>2]=0,h)|0)|0;i=h;k=j;i=f;return k|0}}else if((l|0)==14){i=f;return k|0}return 0}function Wx(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=Hx(b)|0;h=b+8|0;i=c[h>>2]|0;j=i;while(1){if((j|0)==0){k=0;break}l=c[j>>2]|0;if((l|0)==(d|0)){m=7;break}if((a[d]|0)==(a[l]|0)){if((Ya(d|0,l|0)|0)==0){m=7;break}}l=c[j+4>>2]|0;if((l|0)==(i|0)){k=0;break}else{j=l}}do{if((m|0)==7){l=b;n=c[l>>2]|0;if((n&4|0)!=0){k=j;break}if((j|0)==(i|0)){k=i;break}c[h>>2]=j;c[l>>2]=n&-5;l=n&3;if((l-2|0)>>>0>=2>>>0){k=j;break}n=(l|0)==3?b-32|0:b+32|0;c[n+8>>2]=j;l=n;c[l>>2]=c[l>>2]&-5;k=j}}while(0);do{if((k|0)!=0|(e|0)==0){o=k}else{j=sx(g,e)|0;i=j;c[j>>2]=dy(g,d)|0;m=b;l=c[m>>2]&3;if((l|0)==1){n=c[h>>2]|0;do{if((n|0)==0){c[j+4>>2]=i}else{p=n+4|0;q=c[p>>2]|0;if((q|0)==(n|0)){c[p>>2]=i;c[j+4>>2]=n;break}else{c[j+4>>2]=q;c[p>>2]=i;break}}}while(0);n=c[m>>2]|0;if((n&4|0)!=0){o=i;break}c[h>>2]=i;c[m>>2]=n&-5;p=n&3;if((p-2|0)>>>0>=2>>>0){o=i;break}n=(p|0)==3?b-32|0:b+32|0;c[n+8>>2]=i;p=n;c[p>>2]=c[p>>2]&-5;o=i;break}else if((l|0)==3|(l|0)==2){p=c[h>>2]|0;do{if((p|0)==0){c[j+4>>2]=i}else{n=p+4|0;q=c[n>>2]|0;if((q|0)==(p|0)){c[n>>2]=i;c[j+4>>2]=p;break}else{c[j+4>>2]=q;c[n>>2]=i;break}}}while(0);p=c[m>>2]|0;if((p&4|0)!=0){o=i;break}c[h>>2]=i;c[m>>2]=p&-5;n=p&3;if((n-2|0)>>>0>=2>>>0){o=i;break}p=(n|0)==3?b-32|0:b+32|0;c[p+8>>2]=i;n=p;c[n>>2]=c[n>>2]&-5;o=i;break}else if((l|0)==0){n=c[h>>2]|0;do{if((n|0)==0){c[j+4>>2]=i}else{p=n+4|0;q=c[p>>2]|0;if((q|0)==(n|0)){c[p>>2]=i;c[j+4>>2]=n;break}else{c[j+4>>2]=q;c[p>>2]=i;break}}}while(0);j=c[m>>2]|0;if((j&4|0)!=0){o=i;break}c[h>>2]=i;c[m>>2]=j&-5;n=j&3;if((n-2|0)>>>0>=2>>>0){o=i;break}j=(n|0)==3?b-32|0:b+32|0;c[j+8>>2]=i;n=j;c[n>>2]=c[n>>2]&-5;o=i;break}else{o=i;break}}}while(0);if((f|0)==0){r=o;return r|0}Vx(b,d,1)|0;r=o;return r|0}function Xx(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=b;f=Hx(b)|0;g=b+8|0;h=c[g>>2]|0;i=h;while(1){if((i|0)==0){j=-1;k=18;break}l=c[i>>2]|0;if((l|0)==(d|0)){k=7;break}if((a[d]|0)==(a[l]|0)){if((Ya(d|0,l|0)|0)==0){k=7;break}}l=c[i+4>>2]|0;if((l|0)==(h|0)){j=-1;k=18;break}else{i=l}}if((k|0)==7){d=b;l=c[d>>2]|0;do{if((l&4|0)==0){if((i|0)==(h|0)){m=h;n=h;break}c[g>>2]=i;c[d>>2]=l&-5;o=l&3;if((o-2|0)>>>0>=2>>>0){m=i;n=i;break}p=(o|0)==3?b-32|0:b+32|0;c[p+8>>2]=i;o=p;c[o>>2]=c[o>>2]&-5;m=i;n=i}else{m=i;n=h}}while(0);if((m|0)==0){j=-1;return j|0}else{q=n}do{r=q+4|0;q=c[r>>2]|0;}while((q|0)!=(m|0));q=m+4|0;c[r>>2]=c[q>>2];r=c[d>>2]|0;n=r&3;do{if((n|0)==1|(n|0)==3|(n|0)==2){Ov(Ix(f|0)|0,e,26,m,0)|0}else if((n|0)==0){if((c[g>>2]|0)!=(m|0)){break}h=c[q>>2]|0;c[g>>2]=(h|0)==(m|0)?0:h;c[d>>2]=r&-5}}while(0);fy(f,c[m>>2]|0)|0;tx(f,m);j=0;return j|0}else if((k|0)==18){return j|0}return 0}function Yx(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;a=d;e=b+8|0;if((c[e>>2]|0)!=(a|0)){return}f=c[d+4>>2]|0;d=(f|0)==(a|0)?0:f;c[e>>2]=d;e=b;f=c[e>>2]|0;c[e>>2]=f&-5;e=f&3;if((e-2|0)>>>0>=2>>>0){return}f=(e|0)==3?b-36+4|0:b+32|0;c[f+8>>2]=d;d=f;c[d>>2]=c[d>>2]&-5;return}function Zx(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=(d|0)<0?-d|0:d;if((b|0)==0){Wx(a|0,c,f,e)|0;if((d|0)>-1){return}g=sy(a)|0;if((g|0)==0){return}else{h=g}do{Zx(h,0,c,d,e);h=ty(h)|0;}while((h|0)!=0);return}else if((b|0)==1|(b|0)==2|(b|0)==3){h=ux(a)|0;if((h|0)==0){return}if((b|0)==1){b=h;do{Wx(b|0,c,f,e)|0;b=vx(a,b)|0;}while((b|0)!=0);return}else{i=h}do{h=mw(a,i)|0;if((h|0)!=0){b=h;do{Wx(b|0,c,f,e)|0;b=ow(a,b)|0;}while((b|0)!=0)}i=vx(a,i)|0;}while((i|0)!=0);return}else{return}}function _x(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if((b|0)==0){Ov(a,a|0,92,c,1)|0;return}else if((b|0)==1|(b|0)==2|(b|0)==3){d=ux(a)|0;if((d|0)==0){return}if((b|0)==1){b=d;do{Xx(b|0,c)|0;b=vx(a,b)|0;}while((b|0)!=0);return}else{e=d}do{d=mw(a,e)|0;if((d|0)!=0){b=d;do{Xx(b|0,c)|0;b=ow(a,b)|0;}while((b|0)!=0)}e=vx(a,e)|0;}while((e|0)!=0);return}else{return}}function $x(a,b,c){a=a|0;b=b|0;c=c|0;Xx(b|0,c)|0;return}function ay(a){a=a|0;var b=0,d=0,e=0;b=Hx(a|0)|0;d=a+8|0;a=c[d>>2]|0;if((a|0)==0){c[d>>2]=0;return}else{e=a}while(1){a=c[e+4>>2]|0;fy(b,c[e>>2]|0)|0;tx(b,e);if((a|0)==(c[d>>2]|0)){break}else{e=a}}c[d>>2]=0;return}function by(b){b=b|0;var d=0,e=0,f=0,g=0;if((b|0)==0){d=214176}else{d=(c[b+52>>2]|0)+20|0}e=c[d>>2]|0;if((e|0)!=0){f=e;g=Ay(b,f)|0;return g|0}e=yy(b,172584,c[43326]|0)|0;c[d>>2]=e;a[173232]=1;a[173464]=1;f=e;g=Ay(b,f)|0;return g|0}function cy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;e=i;i=i+24|0;f=e|0;if((b|0)==0){g=214176}else{g=(c[b+52>>2]|0)+20|0}h=c[g>>2]|0;if((h|0)==0){j=yy(b,172584,c[43326]|0)|0;c[g>>2]=j;a[173232]=1;a[173464]=1;k=j}else{k=h}c[f+12>>2]=d;d=Hc[c[k>>2]&63](k,f,4)|0;if((d|0)==0){l=0;i=e;return l|0}l=c[d+12>>2]|0;i=e;return l|0}function dy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;e=i;i=i+24|0;f=e|0;if((d|0)==0){g=0;i=e;return g|0}h=(b|0)==0;if(h){j=214176}else{j=(c[b+52>>2]|0)+20|0}k=c[j>>2]|0;if((k|0)==0){l=yy(b,172584,c[43326]|0)|0;c[j>>2]=l;a[173232]=1;a[173464]=1;m=l}else{m=k}c[f+12>>2]=d;k=m|0;l=Hc[c[k>>2]&63](m,f,4)|0;if((l|0)==0){f=(xF(d|0)|0)+20|0;if(h){n=dF(f)|0}else{n=sx(b,f)|0}c[n+8>>2]=1;f=n+16|0;zF(f|0,d|0)|0;c[n+12>>2]=f;Hc[c[k>>2]&63](m,n,1)|0;o=n}else{n=l+8|0;c[n>>2]=(c[n>>2]|0)+1;o=l}g=c[o+12>>2]|0;i=e;return g|0}function ey(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;e=i;i=i+24|0;f=e|0;if((d|0)==0){g=0;i=e;return g|0}h=(b|0)==0;if(h){j=214176}else{j=(c[b+52>>2]|0)+20|0}k=c[j>>2]|0;if((k|0)==0){l=yy(b,172584,c[43326]|0)|0;c[j>>2]=l;a[173232]=1;a[173464]=1;m=l}else{m=k}c[f+12>>2]=d;k=m|0;l=Hc[c[k>>2]&63](m,f,4)|0;if((l|0)==0){f=(xF(d|0)|0)+20|0;if(h){n=dF(f)|0}else{n=sx(b,f)|0}c[n+8>>2]=a[173232]|0?-2147483647:1;f=n+16|0;zF(f|0,d|0)|0;c[n+12>>2]=f;Hc[c[k>>2]&63](m,n,1)|0;o=n}else{n=l+8|0;c[n>>2]=(c[n>>2]|0)+1;o=l}g=c[o+12>>2]|0;i=e;return g|0}function fy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;e=i;i=i+24|0;f=e|0;if((d|0)==0){g=-1;i=e;return g|0}if((b|0)==0){h=214176}else{h=(c[b+52>>2]|0)+20|0}j=c[h>>2]|0;if((j|0)==0){k=yy(b,172584,c[43326]|0)|0;c[h>>2]=k;a[173232]=1;a[173464]=1;l=k}else{l=j}c[f+12>>2]=d;j=Hc[c[l>>2]&63](l,f,4)|0;if((j|0)==0){g=-1;i=e;return g|0}if((c[j+12>>2]|0)!=(d|0)){g=0;i=e;return g|0}d=j+8|0;f=(c[d>>2]|0)-1|0;c[d>>2]=f;if(!((f|0)==0|a[173464]^1)){g=0;i=e;return g|0}zy(b,l,j)|0;g=0;i=e;return g|0}function gy(b){b=b|0;var d=0;if((b|0)==0){d=0;return d|0}d=(a[173232]|0?-2147483648:0)&c[b-8>>2];return d|0}function hy(b){b=b|0;var d=0;if((b|0)==0){return}d=b-8|0;c[d>>2]=c[d>>2]|(a[173232]|0?-2147483648:0);return}function iy(a,b){a=a|0;b=b|0;c[53838]=a;c[53678]=b;c[44744]=0;return}function jy(){var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,_a=0,$a=0,ab=0,bb=0;e=i;i=i+2088|0;f=e|0;g=e+1024|0;h=e+2048|0;j=e+2064|0;k=e+2072|0;l=e+2080|0;if(!(a[76488]|0)){a[76488]=1;if((c[53308]|0)==0){c[53308]=1}if((c[53304]|0)==0){c[53304]=c[q>>2]}if((c[53296]|0)==0){c[53296]=c[p>>2]}m=c[53324]|0;if((m|0)==0){n=10}else{o=c[53320]|0;r=c[m+(o<<2)>>2]|0;if((r|0)==0){n=10}else{s=o;t=m;u=r}}if((n|0)==10){ky();r=ly(c[53304]|0,16384)|0;c[(c[53324]|0)+(c[53320]<<2)>>2]=r;r=c[53320]|0;m=c[53324]|0;s=r;t=m;u=c[m+(r<<2)>>2]|0}r=t+(s<<2)|0;c[53310]=c[u+16>>2];u=c[(c[r>>2]|0)+8>>2]|0;c[53318]=u;c[53294]=u;c[53304]=c[c[r>>2]>>2];a[213264]=a[u]|0}u=l|0;a:while(1){l=c[53318]|0;a[l]=a[213264]|0;r=(c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]|0)+(c[53308]|0)|0;s=l;t=l;b:while(1){l=r;m=s;while(1){o=c[76496+(d[m]<<2)>>2]&255;if((b[78488+(l<<1)>>1]|0)==0){v=l;w=o}else{c[53312]=l;c[53314]=m;v=l;w=o}c:while(1){o=w&255;x=v;do{y=(b[78280+(x<<1)>>1]|0)+o|0;if((b[77736+(y<<1)>>1]|0)==(x|0)){break c}z=b[77528+(x<<1)>>1]|0;x=z<<16>>16;}while(z<<16>>16<=88);v=x;w=c[76304+(o<<2)>>2]&255}z=b[75760+(y<<1)>>1]|0;A=m+1|0;if((b[78280+(z<<1)>>1]|0)==224){B=z;C=A;D=t;break}else{l=z;m=A}}d:while(1){m=D;l=B;A=C;e:while(1){z=b[78488+(l<<1)>>1]|0;if(z<<16>>16==0){E=c[53314]|0;F=b[78488+(c[53312]<<1)>>1]|0}else{E=A;F=z}c[53294]=D;z=E;c[53302]=z-m;a[213264]=a[E]|0;a[E]=0;c[53318]=E;G=F<<16>>16;f:while(1){switch(G|0){case 4:{n=36;break b;break};case 18:{n=83;break a;break};case 19:{n=86;break a;break};case 5:{n=38;break b;break};case 21:{n=96;break b;break};case 3:{n=33;break b;break};case 15:{n=76;break a;break};case 16:{n=78;break a;break};case 17:{n=80;break a;break};case 2:{n=30;break b;break};case 0:{break f;break};case 14:{n=72;break a;break};case 11:{n=64;break a;break};case 12:{n=66;break a;break};case 24:{n=111;break b;break};case 25:{n=114;break b;break};case 1:{n=28;break a;break};case 9:{n=60;break b;break};case 30:{n=154;break b;break};case 31:{n=162;break a;break};case 32:{n=165;break b;break};case 29:{n=145;break b;break};case 33:{break};case 10:{n=62;break b;break};case 20:{n=89;break a;break};case 6:{n=40;break b;break};case 7:{n=43;break b;break};case 8:{n=45;break b;break};case 28:{n=137;break b;break};case 26:{n=122;break b;break};case 27:{n=127;break b;break};case 13:{n=68;break a;break};case 22:{n=101;break a;break};case 23:{n=104;break b;break};case 34:case 35:case 36:case 37:{H=0;n=238;break a;break};default:{n=237;break a}}I=z-(c[53294]|0)|0;J=I-1|0;a[E]=a[213264]|0;K=c[53320]|0;L=c[53324]|0;M=L+(K<<2)|0;N=c[M>>2]|0;if((c[N+44>>2]|0)==0){c[53310]=c[N+16>>2];c[c[M>>2]>>2]=c[53304];c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+44>>2]=1;M=c[53320]|0;O=c[53324]|0;P=M;Q=O;R=c[O+(M<<2)>>2]|0}else{P=K;Q=L;R=N}N=c[53318]|0;L=c[53310]|0;K=c[R+4>>2]|0;S=c[53294]|0;if(N>>>0<=(K+L|0)>>>0){break e}if(N>>>0>(K+(L+1)|0)>>>0){n=188;break a}L=N-S|0;if((c[R+40>>2]|0)==0){T=(L|0)==1?1:2;U=S;V=P;W=Q}else{N=L-1|0;if((N|0)>0){L=0;M=S;O=K;while(1){a[O]=a[M]|0;K=L+1|0;if((K|0)<(N|0)){L=K;M=M+1|0;O=O+1|0}else{break}}O=c[53320]|0;M=c[53324]|0;X=O;Y=M;Z=c[M+(O<<2)>>2]|0}else{X=P;Y=Q;Z=R}if((c[Z+44>>2]|0)==2){c[53310]=0;c[(c[Y+(X<<2)>>2]|0)+16>>2]=0}else{O=c[Z+12>>2]|0;M=O-N-1|0;if((M|0)==0){L=Z;K=c[53318]|0;_=O;while(1){$=L+4|0;O=c[$>>2]|0;if((c[L+20>>2]|0)==0){n=199;break a}aa=_<<1;if((aa|0)==0){ba=(_>>>3)+_|0}else{ba=aa}c[L+12>>2]=ba;aa=gF(O,ba+2|0)|0;c[$>>2]=aa;if((aa|0)==0){n=203;break a}ca=aa+(K-O)|0;c[53318]=ca;O=c[(c[53324]|0)+(c[53320]<<2)>>2]|0;aa=c[O+12>>2]|0;da=aa-N-1|0;if((da|0)==0){L=O;K=ca;_=aa}else{ea=da;fa=O;break}}}else{ea=M;fa=Z}_=Hc[c[c[(c[53838]|0)+8>>2]>>2]&63](c[53678]|0,(c[fa+4>>2]|0)+N|0,ea>>>0>8192>>>0?8192:ea)|0;c[53310]=_;c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+16>>2]=_}do{if((c[53310]|0)==0){if((N|0)==0){my(c[53304]|0);ga=1;break}else{c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+44>>2]=2;ga=2;break}}else{ga=0}}while(0);M=c[53310]|0;_=M+N|0;K=c[53320]|0;L=c[53324]|0;O=c[L+(K<<2)>>2]|0;if(_>>>0>(c[O+12>>2]|0)>>>0){da=gF(c[O+4>>2]|0,_+(M>>>1)|0)|0;c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+4>>2]=da;da=c[53320]|0;_=c[53324]|0;if((c[(c[_+(da<<2)>>2]|0)+4>>2]|0)==0){n=213;break a}ha=da;ia=_;ja=c[53310]|0}else{ha=K;ia=L;ja=M}M=ja+N|0;c[53310]=M;a[(c[(c[ia+(ha<<2)>>2]|0)+4>>2]|0)+M|0]=0;a[(c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+4>>2]|0)+((c[53310]|0)+1)|0]=0;M=c[53320]|0;L=c[53324]|0;K=c[(c[L+(M<<2)>>2]|0)+4>>2]|0;c[53294]=K;T=ga;U=K;V=M;W=L}if((T|0)==0){break d}else if((T|0)==2){n=227;break e}else if((T|0)!=1){continue a}a[77520]=0;c[53318]=U;G=(((c[53308]|0)-1|0)/2|0)+34|0}a[E]=a[213264]|0;l=c[53312]|0;A=c[53314]|0}if((n|0)==227){n=0;A=W+(V<<2)|0;l=(c[(c[A>>2]|0)+4>>2]|0)+(c[53310]|0)|0;c[53318]=l;m=(c[(c[A>>2]|0)+28>>2]|0)+(c[53308]|0)|0;if(U>>>0<l>>>0){ka=m;la=U}else{B=m;C=l;D=U;continue}while(1){m=a[la]|0;if(m<<24>>24==0){ma=1}else{ma=c[76496+((m&255)<<2)>>2]&255}if((b[78488+(ka<<1)>>1]|0)==0){na=ma;oa=ka}else{c[53312]=ka;c[53314]=la;na=ma;oa=ka}g:while(1){m=na&255;A=oa;do{pa=(b[78280+(A<<1)>>1]|0)+m|0;if((b[77736+(pa<<1)>>1]|0)==(A|0)){break g}G=b[77528+(A<<1)>>1]|0;A=G<<16>>16;}while(G<<16>>16<=88);na=c[76304+(m<<2)>>2]&255;oa=A}N=b[75760+(pa<<1)>>1]|0;G=la+1|0;if(G>>>0<l>>>0){ka=N;la=G}else{B=N;C=l;D=U;continue d}}}l=S+J|0;c[53318]=l;N=(c[(c[Q+(P<<2)>>2]|0)+28>>2]|0)+(c[53308]|0)|0;if((J|0)>0){G=N;z=S;while(1){o=a[z]|0;if(o<<24>>24==0){qa=1}else{qa=c[76496+((o&255)<<2)>>2]&255}if((b[78488+(G<<1)>>1]|0)==0){ra=qa;sa=G}else{c[53312]=G;c[53314]=z;ra=qa;sa=G}h:while(1){o=ra&255;x=sa;do{ta=(b[78280+(x<<1)>>1]|0)+o|0;if((b[77736+(ta<<1)>>1]|0)==(x|0)){break h}L=b[77528+(x<<1)>>1]|0;x=L<<16>>16;}while(L<<16>>16<=88);ra=c[76304+(o<<2)>>2]&255;sa=x}A=b[75760+(ta<<1)>>1]|0;m=z+1|0;if(m>>>0<l>>>0){G=A;z=m}else{ua=A;break}}}else{ua=N}if((b[78488+(ua<<1)>>1]|0)!=0){c[53312]=ua;c[53314]=l}z=b[78280+(ua<<1)>>1]|0;if((b[77736+(z+1<<1)>>1]|0)==(ua|0)){va=z}else{z=ua;while(1){G=b[77528+(z<<1)>>1]|0;A=G<<16>>16;m=b[78280+(A<<1)>>1]|0;if((b[77736+(m+1<<1)>>1]|0)==G<<16>>16){va=m;break}else{z=A}}}z=b[75760+(va+1<<1)>>1]|0;wa=z<<16>>16==88?0:z<<16>>16;if((wa|0)==0){B=ua;C=l;D=S}else{n=186;break}}if((n|0)==186){n=0;z=S+I|0;c[53318]=z;r=wa;s=z;t=S;continue}z=U+J|0;c[53318]=z;N=(c[(c[W+(V<<2)>>2]|0)+28>>2]|0)+(c[53308]|0)|0;if((J|0)>0){xa=N;ya=U}else{r=N;s=z;t=U;continue}while(1){N=a[ya]|0;if(N<<24>>24==0){za=1}else{za=c[76496+((N&255)<<2)>>2]&255}if((b[78488+(xa<<1)>>1]|0)==0){Aa=za;Ba=xa}else{c[53312]=xa;c[53314]=ya;Aa=za;Ba=xa}i:while(1){N=Aa&255;A=Ba;do{Ca=(b[78280+(A<<1)>>1]|0)+N|0;if((b[77736+(Ca<<1)>>1]|0)==(A|0)){break i}m=b[77528+(A<<1)>>1]|0;A=m<<16>>16;}while(m<<16>>16<=88);Aa=c[76304+(N<<2)>>2]&255;Ba=A}l=b[75760+(Ca<<1)>>1]|0;m=ya+1|0;if(m>>>0<z>>>0){xa=l;ya=m}else{r=l;s=z;t=U;continue b}}}if((n|0)==30){n=0;t=c[53302]|0;if((t|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10}c[5104]=(c[5104]|0)+1;continue}else if((n|0)==33){n=0;t=c[53302]|0;if((t|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10}c[53308]=3;continue}else if((n|0)==36){n=0;t=c[53302]|0;if((t|0)==0){continue}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10;continue}else if((n|0)==38){n=0;t=c[53302]|0;if((t|0)==0){continue}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10;continue}else if((n|0)==40){n=0;t=c[53302]|0;if((t|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10}c[53308]=1;continue}else if((n|0)==43){n=0;t=c[53302]|0;if((t|0)==0){continue}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10;continue}else if((n|0)==45){n=0;t=c[53302]|0;if((t|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10}t=c[53294]|0;s=t+1|0;r=(Za(s|0,134168,4)|0)==0;z=r?t+5|0:s;s=ac(z|0,131560,(Da=i,i=i+24|0,c[Da>>2]=k,c[Da+8>>2]=u,c[Da+16>>2]=j,Da)|0)|0;i=Da;if((s|0)<=0){continue}c[5104]=(c[k>>2]|0)-1;if((s|0)<=1){continue}s=z+(c[j>>2]|0)|0;z=s;while(1){t=a[z]|0;if((t<<24>>24|0)==34|(t<<24>>24|0)==0){break}z=z+1|0}if((z|0)==(s|0)){continue}a[z]=0;t=z-s|0;r=c[43712]|0;if((r|0)<(t|0)){if((r|0)==0){Ea=dF(t+1|0)|0}else{Ea=gF(c[43714]|0,t+1|0)|0}c[43714]=Ea;c[43712]=t;Fa=Ea}else{Fa=c[43714]|0}zF(Fa|0,s|0)|0;c[53674]=c[43714];continue}else if((n|0)==60){n=0;t=c[53302]|0;if((t|0)==0){continue}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10;continue}else if((n|0)==62){n=0;t=c[53302]|0;if((t|0)==0){continue}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10;continue}else if((n|0)==96){n=0;t=c[53302]|0;if((t|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10}c[53308]=5;t=c[53536]|0;if((t|0)==0){r=dF(1024)|0;c[53536]=r;c[53532]=r+1024;Ga=r}else{Ga=t}c[53526]=Ga;a[Ga]=0;continue}else if((n|0)==104){n=0;t=c[53302]|0;if((t|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(t-1)|0]|0)==10}t=c[53526]|0;if(t>>>0>(c[53536]|0)>>>0){r=t-1|0;c[53526]=r;Ha=r}else{Ha=t}c[53526]=Ha+1;a[Ha]=34;t=c[53526]|0;r=c[53532]|0;if(t>>>0<r>>>0){Ia=t}else{l=c[53536]|0;m=l;G=r-m<<1;r=gF(l,G)|0;c[53536]=r;c[53532]=r+G;G=r+(t-m)|0;c[53526]=G;Ia=G}c[53526]=Ia+1;a[Ia]=0;continue}else if((n|0)==111){n=0;G=c[53302]|0;if((G|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(G-1)|0]|0)==10}c[5104]=(c[5104]|0)+1;continue}else if((n|0)==114){n=0;G=c[53302]|0;if((G|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(G-1)|0]|0)==10}G=c[53294]|0;m=c[53526]|0;if(m>>>0>(c[53536]|0)>>>0){t=m-1|0;c[53526]=t;Ja=t}else{Ja=m}m=a[G]|0;c[53526]=Ja+1;a[Ja]=m;if(m<<24>>24==0){continue}else{Ka=G}while(1){G=Ka+1|0;m=c[53526]|0;t=c[53532]|0;if(m>>>0<t>>>0){La=m}else{r=c[53536]|0;l=r;L=t-l<<1;t=gF(r,L)|0;c[53536]=t;c[53532]=t+L;L=t+(m-l)|0;c[53526]=L;La=L}L=a[G]|0;c[53526]=La+1;a[La]=L;if(L<<24>>24==0){continue a}else{Ka=G}}}else if((n|0)==122){n=0;s=c[53302]|0;if((s|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(s-1)|0]|0)==10}c[53308]=7;c[44700]=1;s=c[53536]|0;if((s|0)==0){z=dF(1024)|0;c[53536]=z;c[53532]=z+1024;Na=z}else{Na=s}c[53526]=Na;a[Na]=0;continue}else if((n|0)==127){n=0;s=c[53302]|0;if((s|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(s-1)|0]|0)==10}s=(c[44700]|0)-1|0;c[44700]=s;if((s|0)==0){n=136;break}s=c[53294]|0;z=c[53526]|0;if(z>>>0>(c[53536]|0)>>>0){G=z-1|0;c[53526]=G;Oa=G}else{Oa=z}z=a[s]|0;c[53526]=Oa+1;a[Oa]=z;if(z<<24>>24==0){continue}else{Pa=s}while(1){s=Pa+1|0;z=c[53526]|0;G=c[53532]|0;if(z>>>0<G>>>0){Qa=z}else{L=c[53536]|0;l=L;m=G-l<<1;G=gF(L,m)|0;c[53536]=G;c[53532]=G+m;m=G+(z-l)|0;c[53526]=m;Qa=m}m=a[s]|0;c[53526]=Qa+1;a[Qa]=m;if(m<<24>>24==0){continue a}else{Pa=s}}}else if((n|0)==137){n=0;s=c[53302]|0;if((s|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(s-1)|0]|0)==10}c[44700]=(c[44700]|0)+1;s=c[53294]|0;m=c[53526]|0;if(m>>>0>(c[53536]|0)>>>0){l=m-1|0;c[53526]=l;Ra=l}else{Ra=m}m=a[s]|0;c[53526]=Ra+1;a[Ra]=m;if(m<<24>>24==0){continue}else{Sa=s}while(1){s=Sa+1|0;m=c[53526]|0;l=c[53532]|0;if(m>>>0<l>>>0){Ta=m}else{z=c[53536]|0;G=z;L=l-G<<1;l=gF(z,L)|0;c[53536]=l;c[53532]=l+L;L=l+(m-G)|0;c[53526]=L;Ta=L}L=a[s]|0;c[53526]=Ta+1;a[Ta]=L;if(L<<24>>24==0){continue a}else{Sa=s}}}else if((n|0)==145){n=0;s=c[53302]|0;if((s|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(s-1)|0]|0)==10}s=c[53294]|0;L=c[53526]|0;if(L>>>0>(c[53536]|0)>>>0){G=L-1|0;c[53526]=G;Ua=G}else{Ua=L}L=a[s]|0;c[53526]=Ua+1;a[Ua]=L;if(L<<24>>24!=0){L=s;do{L=L+1|0;s=c[53526]|0;G=c[53532]|0;if(s>>>0<G>>>0){Va=s}else{m=c[53536]|0;l=m;z=G-l<<1;G=gF(m,z)|0;c[53536]=G;c[53532]=G+z;z=G+(s-l)|0;c[53526]=z;Va=z}z=a[L]|0;c[53526]=Va+1;a[Va]=z;}while(z<<24>>24!=0)}c[5104]=(c[5104]|0)+1;continue}else if((n|0)==154){n=0;L=c[53302]|0;if((L|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(L-1)|0]|0)==10}L=c[53294]|0;z=c[53526]|0;if(z>>>0>(c[53536]|0)>>>0){l=z-1|0;c[53526]=l;Wa=l}else{Wa=z}z=a[L]|0;c[53526]=Wa+1;a[Wa]=z;if(z<<24>>24==0){continue}else{Xa=L}while(1){L=Xa+1|0;z=c[53526]|0;l=c[53532]|0;if(z>>>0<l>>>0){Ya=z}else{s=c[53536]|0;G=s;m=l-G<<1;l=gF(s,m)|0;c[53536]=l;c[53532]=l+m;m=l+(z-G)|0;c[53526]=m;Ya=m}m=a[L]|0;c[53526]=Ya+1;a[Ya]=m;if(m<<24>>24==0){continue a}else{Xa=L}}}else if((n|0)==165){n=0;L=c[53302]|0;if((L|0)==0){_a=0}else{c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(L-1)|0]|0)==10;_a=c[53302]|0}Ma(c[53294]|0,_a|0,1,c[53296]|0)|0;continue}}if((n|0)==28){_a=c[53302]|0;if((_a|0)==0){H=-1;i=e;return H|0}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10;H=-1;i=e;return H|0}else if((n|0)==64){_a=c[53302]|0;if((_a|0)==0){H=259;i=e;return H|0}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10;H=259;i=e;return H|0}else if((n|0)==66){_a=c[53302]|0;if((_a|0)==0){H=260;i=e;return H|0}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10;H=260;i=e;return H|0}else if((n|0)==68){_a=c[53302]|0;if((_a|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10}if((c[44744]|0)!=0){H=258;i=e;return H|0}c[44744]=258;H=258;i=e;return H|0}else if((n|0)==72){_a=c[53302]|0;if((_a|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10}if((c[44744]|0)!=0){H=261;i=e;return H|0}c[44744]=261;H=261;i=e;return H|0}else if((n|0)==76){_a=c[53302]|0;if((_a|0)==0){H=263;i=e;return H|0}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10;H=263;i=e;return H|0}else if((n|0)==78){_a=c[53302]|0;if((_a|0)==0){H=262;i=e;return H|0}c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10;H=262;i=e;return H|0}else if((n|0)==80){_a=c[53302]|0;if((_a|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10}H=(c[44744]|0)==261?264:45;i=e;return H|0}else if((n|0)==83){_a=c[53302]|0;if((_a|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10}H=(c[44744]|0)==258?264:45;i=e;return H|0}else if((n|0)==86){_a=c[53302]|0;if((_a|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10}c[53300]=dy(c[53854]|0,c[53294]|0)|0;H=267;i=e;return H|0}else if((n|0)==89){_a=c[53302]|0;if((_a|0)==0){$a=-1}else{c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(_a-1)|0]|0)==10;$a=(c[53302]|0)-1|0}_a=g|0;g=c[53294]|0;Xa=a[g+$a|0]|0;if(((Xa&255)-48|0)>>>0<10>>>0|Xa<<24>>24==46){ab=g}else{g=c[53674]|0;Iv(h,1024,f|0);Lv(h,142776)|0;Lv(h,c[53294]|0)|0;nb(_a|0,139064,(Da=i,i=i+8|0,c[Da>>2]=c[5104],Da)|0)|0;i=Da;Lv(h,_a)|0;Lv(h,(g|0)==0?145136:g)|0;Lv(h,136512)|0;g=h+4|0;_a=c[g>>2]|0;if(_a>>>0<(c[h+8>>2]|0)>>>0){bb=_a}else{Jv(h,1)|0;bb=c[g>>2]|0}a[bb]=0;bb=c[h>>2]|0;c[g>>2]=bb;Fv(0,bb,(Da=i,i=i+1|0,i=i+7&-8,c[Da>>2]=0,Da)|0)|0;i=Da;Mv(h);h=(c[53302]|0)-1|0;a[E]=a[213264]|0;E=D+h|0;c[53318]=E;c[53294]=D;c[53302]=h;a[213264]=a[E]|0;a[E]=0;c[53318]=E;ab=c[53294]|0}c[53300]=dy(c[53854]|0,ab)|0;H=267;i=e;return H|0}else if((n|0)==101){ab=c[53302]|0;if((ab|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(ab-1)|0]|0)==10}c[53308]=1;c[53300]=dy(c[53854]|0,c[53536]|0)|0;H=268;i=e;return H|0}else if((n|0)==136){c[53308]=1;c[53300]=ey(c[53854]|0,c[53536]|0)|0;H=268;i=e;return H|0}else if((n|0)==162){ab=c[53302]|0;if((ab|0)!=0){c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+28>>2]=(a[(c[53294]|0)+(ab-1)|0]|0)==10}H=a[c[53294]|0]|0;i=e;return H|0}else if((n|0)==188){ny(159416);return 0}else if((n|0)==199){c[$>>2]=0;ny(154408);return 0}else if((n|0)==203){ny(154408);return 0}else if((n|0)==213){ny(148936);return 0}else if((n|0)==237){ny(163776);return 0}else if((n|0)==238){i=e;return H|0}return 0}function ky(){var a=0,b=0,d=0;a=c[53324]|0;if((a|0)==0){b=dF(4)|0;d=b;c[53324]=d;if((b|0)==0){ny(163504)}c[d>>2]=0;c[53322]=1;c[53320]=0;return}d=c[53322]|0;if((c[53320]|0)>>>0<(d-1|0)>>>0){return}b=d+8|0;d=gF(a,b<<2)|0;a=d;c[53324]=a;if((d|0)==0){ny(163504)}vF(a+(c[53322]<<2)|0,0,32)|0;c[53322]=b;return}function ly(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=dF(48)|0;f=e;if((e|0)==0){ny(131672);return 0}c[e+12>>2]=d;g=dF(d+2|0)|0;c[e+4>>2]=g;if((g|0)==0){ny(131672);return 0}c[e+20>>2]=1;d=Vb()|0;h=c[d>>2]|0;c[e+16>>2]=0;a[g]=0;a[g+1|0]=0;c[e+8>>2]=g;c[e+28>>2]=1;c[e+44>>2]=0;g=c[53324]|0;if((g|0)==0){i=0}else{i=c[g+(c[53320]<<2)>>2]|0}if((i|0)==(f|0)){i=g+(c[53320]<<2)|0;c[53310]=c[(c[i>>2]|0)+16>>2];j=c[(c[i>>2]|0)+8>>2]|0;c[53318]=j;c[53294]=j;c[53304]=c[c[i>>2]>>2];a[213264]=a[j]|0;c[e>>2]=b;c[e+40>>2]=1;k=10}else{c[e>>2]=b;c[e+40>>2]=1;if((g|0)==0){l=0}else{k=10}}if((k|0)==10){l=c[g+(c[53320]<<2)>>2]|0}if((l|0)!=(f|0)){c[e+32>>2]=1;c[e+36>>2]=0}if((b|0)==0){m=0;n=e+24|0;o=n;c[o>>2]=m;c[d>>2]=h;return f|0}m=(Ob(Ta(b|0)|0)|0)>0|0;n=e+24|0;o=n;c[o>>2]=m;c[d>>2]=h;return f|0}function my(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;d=c[53324]|0;if((d|0)==0){e=3}else{if((c[d+(c[53320]<<2)>>2]|0)==0){e=3}else{f=d;e=5}}do{if((e|0)==3){ky();d=ly(c[53304]|0,16384)|0;c[(c[53324]|0)+(c[53320]<<2)>>2]=d;d=c[53324]|0;if((d|0)!=0){f=d;e=5;break}d=Vb()|0;g=0;h=d;i=c[d>>2]|0}}while(0);do{if((e|0)==5){d=c[f+(c[53320]<<2)>>2]|0;j=Vb()|0;k=c[j>>2]|0;if((d|0)==0){g=0;h=j;i=k;break}c[d+16>>2]=0;l=d+4|0;a[c[l>>2]|0]=0;a[(c[l>>2]|0)+1|0]=0;c[d+8>>2]=c[l>>2];c[d+28>>2]=1;c[d+44>>2]=0;l=c[53324]|0;if((l|0)==0){m=0}else{m=c[l+(c[53320]<<2)>>2]|0}if((m|0)!=(d|0)){g=d;h=j;i=k;break}n=l+(c[53320]<<2)|0;c[53310]=c[(c[n>>2]|0)+16>>2];l=c[(c[n>>2]|0)+8>>2]|0;c[53318]=l;c[53294]=l;c[53304]=c[c[n>>2]>>2];a[213264]=a[l]|0;g=d;h=j;i=k}}while(0);c[g>>2]=b;c[g+40>>2]=1;m=c[53324]|0;if((m|0)==0){o=0}else{o=c[m+(c[53320]<<2)>>2]|0}if((o|0)!=(g|0)){c[g+32>>2]=1;c[g+36>>2]=0}if((b|0)==0){p=0}else{p=(Ob(Ta(b|0)|0)|0)>0|0}c[g+24>>2]=p;c[h>>2]=i;i=(c[53324]|0)+(c[53320]<<2)|0;c[53310]=c[(c[i>>2]|0)+16>>2];h=c[(c[i>>2]|0)+8>>2]|0;c[53318]=h;c[53294]=h;c[53304]=c[c[i>>2]>>2];a[213264]=a[h]|0;return}function ny(a){a=a|0;var b=0;gc(c[o>>2]|0,168432,(b=i,i=i+8|0,c[b>>2]=a,b)|0)|0;i=b;mb(2)}function oy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;i=i+2064|0;e=d+2048|0;Iv(e,1024,d|0);f=c[53674]|0;if((f|0)!=0){Lv(e,f)|0;Lv(e,98096)|0}Lv(e,b)|0;b=d+1024|0;nb(b|0,92536,(f=i,i=i+8|0,c[f>>2]=c[5104],f)|0)|0;i=f;Lv(e,b)|0;Lv(e,c[53294]|0)|0;Lv(e,87168)|0;b=e+4|0;g=c[b>>2]|0;if(g>>>0<(c[e+8>>2]|0)>>>0){h=g}else{Jv(e,1)|0;h=c[b>>2]|0}a[h]=0;h=c[e>>2]|0;c[b>>2]=h;Fv(0,h,(f=i,i=i+1|0,i=i+7&-8,c[f>>2]=0,f)|0)|0;i=f;Mv(e);i=d;return}function py(){var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;b=c[53294]|0;d=c[53318]|0;a[d]=a[213264]|0;e=c[53320]|0;f=c[53324]|0;g=c[f+(e<<2)>>2]|0;h=c[g+4>>2]|0;if(d>>>0>=(h+2|0)>>>0){i=b;j=d;k=j-1|0;a[k]=64;c[53294]=i;l=a[k]|0;a[213264]=l;c[53318]=k;return}m=(c[53310]|0)+2|0;n=c[g+12>>2]|0;g=h+(n+2)|0;o=h+m|0;if((m|0)>0){m=g;h=o;do{h=h-1|0;m=m-1|0;a[m]=a[h]|0;p=c[53320]|0;q=c[53324]|0;r=c[q+(p<<2)>>2]|0;}while(h>>>0>(c[r+4>>2]|0)>>>0);s=m;t=h;u=c[r+12>>2]|0;v=p;w=q}else{s=g;t=o;u=n;v=e;w=f}f=s-t|0;t=d+f|0;c[53310]=u;c[(c[w+(v<<2)>>2]|0)+16>>2]=u;if(t>>>0<((c[(c[(c[53324]|0)+(c[53320]<<2)>>2]|0)+4>>2]|0)+2|0)>>>0){ny(82416)}else{i=b+f|0;j=t;k=j-1|0;a[k]=64;c[53294]=i;l=a[k]|0;a[213264]=l;c[53318]=k;return}}function qy(){var b=0,d=0,e=0;b=c[53324]|0;if((b|0)==0){return}d=c[b+(c[53320]<<2)>>2]|0;if((d|0)==0){return}c[d+16>>2]=0;b=d+4|0;a[c[b>>2]|0]=0;a[(c[b>>2]|0)+1|0]=0;c[d+8>>2]=c[b>>2];c[d+28>>2]=1;c[d+44>>2]=0;b=c[53324]|0;if((b|0)==0){e=0}else{e=c[b+(c[53320]<<2)>>2]|0}if((e|0)!=(d|0)){return}d=b+(c[53320]<<2)|0;c[53310]=c[(c[d>>2]|0)+16>>2];b=c[(c[d>>2]|0)+8>>2]|0;c[53318]=b;c[53294]=b;c[53304]=c[c[d>>2]>>2];a[213264]=a[b]|0;return}function ry(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;f=i;i=i+120|0;g=f|0;h=f+56|0;j=f+112|0;do{if((d|0)!=0){if((Yw(b,0,d,j,0)|0)==0){break}k=c[j>>2]|0;l=b+40|0;By(b,c[l>>2]|0,174032);c[h+4>>2]=k;k=c[l>>2]|0;l=Hc[c[k>>2]&63](k,h|0,4)|0;if((l|0)==0){break}else{m=l}i=f;return m|0}}while(0);if((e|0)==0){m=0;i=f;return m|0}if((Yw(b,0,d,j,1)|0)==0){m=0;i=f;return m|0}d=c[j>>2]|0;j=b+40|0;By(b,c[j>>2]|0,174032);c[g+4>>2]=d;e=c[j>>2]|0;j=Hc[c[e>>2]&63](e,g|0,4)|0;if((j|0)==0){g=sx(b,56)|0;c[g+52>>2]=c[b+52>>2];e=g+12|0;h=c[b+12>>2]|0;c[e>>2]=h;a[e]=h&255&-9;c[g+44>>2]=b;c[g+48>>2]=c[b+48>>2];c[g+4>>2]=d;n=Iw(g)|0}else{n=j}ax(b,0,n|0);m=n;i=f;return m|0}function sy(a){a=a|0;var b=0;b=c[a+40>>2]|0;return Hc[c[b>>2]&63](b,0,128)|0}function ty(a){a=a|0;var b=0,d=0,e=0;b=c[a+44>>2]|0;if((b|0)==0){d=0;return d|0}e=c[b+40>>2]|0;d=Hc[c[e>>2]&63](e,a|0,8)|0;return d|0}function uy(a){a=a|0;return c[a+44>>2]|0}function vy(a,b){a=a|0;b=b|0;var d=0;d=c[a+40>>2]|0;return Hc[c[d>>2]&63](d,b|0,2)|0}function wy(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=c[53852]|0;a=(b|0)!=0;do{if((e|0)==0){if(a){eF(b);f=0;break}else{f=dF(d)|0;break}}else{if(a){tx(e,b);f=0;break}else{f=sx(e,d)|0;break}}}while(0);return f|0}function xy(a,b,d){a=a|0;b=b|0;d=d|0;d=c[53852]|0;if((d|0)==0){eF(b);return}else{tx(d,b);return}}function yy(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=b+28|0;f=c[e>>2]|0;c[e>>2]=114;c[53852]=a;a=$g(b,d)|0;c[e>>2]=f;c[53852]=0;return a|0}function zy(a,b,d){a=a|0;b=b|0;d=d|0;c[53852]=a;return Hc[c[b>>2]&63](b,d,2)|0}function Ay(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=(Wg(b,0,0)|0)+28|0;e=c[d>>2]|0;c[d>>2]=114;c[53852]=a;if((Vg(b)|0)!=0){f=1;return f|0}c[d>>2]=e;c[53852]=0;f=0;return f|0}function By(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)==0){return}if((Wg(b,0,0)|0)==(c|0)){return}Wg(b,c,0)|0;return}function Cy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;if((b|0)==0){e=117688;return e|0}if((a[b]|0)==0){e=117688;return e|0}f=d+1|0;a[d]=34;g=a[b]|0;if(((g&255)-48|0)>>>0<10>>>0|g<<24>>24==46){h=1}else{h=g<<24>>24==45|0}do{if(g<<24>>24==0){a[f]=34;a[d+2|0]=0;i=169768;j=126080}else{k=b+1|0;l=f;m=g;n=0;o=0;p=0;q=h;r=0;a:while(1){b:do{if((r|0)==0){s=k;t=l;u=m;v=n;w=o;x=p;y=q;while(1){z=u&255;do{if(u<<24>>24==34){a[t]=92;A=y;B=1;C=w;D=t+1|0}else{if((y|0)==0){E=u<<24>>24!=95&(tb(z|0)|0)==0&u<<24>>24>-1;A=0;B=E?1:x;C=w;D=t;break}if((u<<24>>24|0)==46){E=(w|0)==0;A=E?y:0;B=E?x:1;C=w+1|0;D=t;break}else if((u<<24>>24|0)==45){E=(v|0)==0;A=E?y:0;B=E?x:1;C=w;D=t;break}else{E=(z-48|0)>>>0<10>>>0;A=E?y:0;B=E?x:1;C=w;D=t;break}}}while(0);z=D+1|0;a[D]=u;E=s+1|0;F=a[s]|0;G=v+1|0;H=c[43162]|0;do{if((H|0)==0){I=B;J=G;K=z}else{if(F<<24>>24==0|(G|0)<(H|0)){I=B;J=G;K=z;break}if((tb(u<<24>>24|0)|0)!=0){L=1;M=A;N=B;O=C;P=G;Q=F;R=z;S=E;break b}T=a[D]|0;if(T<<24>>24<0|(T-45&255)>>>0<2>>>0|T<<24>>24==92){L=1;M=A;N=B;O=C;P=G;Q=F;R=z;S=E;break b}if(F<<24>>24>-1&(((tb(F&255|0)|0)!=0|F<<24>>24==46|F<<24>>24==45)^1)){L=1;M=A;N=B;O=C;P=G;Q=F;R=z;S=E;break b}a[z]=92;a[D+2|0]=10;I=1;J=0;K=D+3|0}}while(0);if(F<<24>>24==0){U=K;V=J;W=I;break a}else{s=E;t=K;u=F;v=J;w=C;x=I;y=A}}}else{y=k;x=l;w=m;v=n;u=o;t=p;s=q;c:while(1){z=w&255;do{if(w<<24>>24==34){a[x]=92;X=s;Y=1;Z=u;_=x+1|0}else{if((s|0)==0){G=w<<24>>24!=95&(tb(z|0)|0)==0&w<<24>>24>-1;X=0;Y=G?1:t;Z=u;_=x;break}if((w<<24>>24|0)==45){G=(v|0)==0;X=G?s:0;Y=G?t:1;Z=u;_=x;break}else if((w<<24>>24|0)==46){G=(u|0)==0;X=G?s:0;Y=G?t:1;Z=u+1|0;_=x;break}else{G=(z-48|0)>>>0<10>>>0;X=G?s:0;Y=G?t:1;Z=u;_=x;break}}}while(0);$=_+1|0;a[_]=w;aa=y+1|0;ba=a[y]|0;z=v+1|0;do{if((c[43162]|0)==0){ca=Y;da=z;ea=$}else{F=ba&255;E=ba<<24>>24==0;if(E){U=$;V=z;W=Y;break a}do{if((tb(w<<24>>24|0)|0)==0){G=a[_]|0;if(G<<24>>24<0|(G-45&255)>>>0<2>>>0|G<<24>>24==92){break}if(!(ba<<24>>24>-1&(((tb(F|0)|0)!=0|ba<<24>>24==46|ba<<24>>24==45)^1))){break c}}}while(0);if(E|(z|0)<(c[43162]|0)){ca=Y;da=z;ea=$;break}if((tb(a[_]|0)|0)!=0){L=1;M=X;N=Y;O=Z;P=z;Q=ba;R=$;S=aa;break b}G=a[_]|0;if(G<<24>>24<0|(G-45&255)>>>0<2>>>0|G<<24>>24==92){L=1;M=X;N=Y;O=Z;P=z;Q=ba;R=$;S=aa;break b}if(ba<<24>>24>-1&(((tb(F|0)|0)!=0|ba<<24>>24==46|ba<<24>>24==45)^1)){L=1;M=X;N=Y;O=Z;P=z;Q=ba;R=$;S=aa;break b}a[$]=92;a[_+2|0]=10;ca=1;da=0;ea=_+3|0}}while(0);if(ba<<24>>24==0){U=ea;V=da;W=ca;break a}else{y=aa;x=ea;w=ba;v=da;u=Z;t=ca;s=X}}a[$]=92;a[_+2|0]=10;L=0;M=X;N=1;O=Z;P=0;Q=ba;R=_+3|0;S=aa}}while(0);if(Q<<24>>24==0){U=R;V=P;W=N;break}else{k=S;l=R;m=Q;n=P;o=O;p=N;q=M;r=L}}a[U]=34;a[U+1|0]=0;if((W|0)!=0){e=d;return e|0}if((V|0)!=1){i=169768;j=126080;break}if(((a[b]|0)-45&255)>>>0<2>>>0){e=d}else{i=169768;j=126080;break}return e|0}}while(0);while(1){V=i+4|0;if((pm(j,b)|0)==0){e=d;fa=49;break}W=c[V>>2]|0;if((W|0)==0){e=b;fa=49;break}else{i=V;j=W}}if((fa|0)==49){return e|0}return 0}function Dy(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=((xF(b|0)|0)<<1)+2|0;e=d>>>0>1024>>>0?d:1024;d=c[44748]|0;if((e|0)>(c[44750]|0)){if((d|0)==0){f=dF(e)|0}else{f=gF(d,e)|0}c[44748]=f;c[44750]=e;g=f}else{g=d}if((gy(b)|0)==0){h=Cy(b,g)|0;return h|0}a[g]=60;d=g+1|0;f=a[b]|0;if(f<<24>>24==0){i=g;j=d}else{e=b;b=d;d=f;while(1){f=e+1|0;a[b]=d;k=b+1|0;l=a[f]|0;if(l<<24>>24==0){i=b;j=k;break}else{e=f;b=k;d=l}}}a[j]=62;a[i+2|0]=0;h=g;return h|0}function Ey(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=b|0;e=$w(d)|0;do{if((e|0)!=0){if((a[e]|0)==37){break}else{f=0}return f|0}}while(0);e=Vv(d)|0;a:do{if((e|0)!=0){g=Vv(uy(b)|0)|0;if((g|0)==0){break}h=bh(c[(Vv(Ix(d)|0)|0)+8>>2]|0)|0;if((h|0)<=0){break}i=c[e+12>>2]|0;j=g+12|0;g=0;b:while(1){k=c[i+(g<<2)>>2]|0;do{if((k|0)!=0){l=c[(c[j>>2]|0)+(g<<2)>>2]|0;if((l|0)==0){break}if((Ya(k|0,l|0)|0)!=0){f=0;break b}}}while(0);g=g+1|0;if((g|0)>=(h|0)){break a}}return f|0}}while(0);e=Uv(b,0)|0;if((e|0)==0){f=1;return f|0}if((bh(c[e+8>>2]|0)|0)>0){f=0;return f|0}else{return(bh(c[e+12>>2]|0)|0)<1|0}return 0}function Fy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;c[53668]=0;e=ew(b|0,141056)|0;do{if((e|0)!=0){if(((a[e]|0)-48|0)>>>0>=10>>>0){break}f=Ja(e|0,0,10)|0;if(!((f|0)==0|(f|0)>59)){break}c[43162]=f}}while(0);Gy(b,1);if((Hy(b,d,1)|0)==-1){g=-1;return g|0}if((Iy(b,d)|0)==-1){g=-1;return g|0}e=(c[53668]|0)-1|0;c[53668]=e;f=b+52|0;a:do{if((e|0)>0){b=e;while(1){b=b-1|0;if((Oc[c[(c[(c[f>>2]|0)+8>>2]|0)+4>>2]&255](d,130632)|0)==-1){g=-1;break}if((b|0)<=0){break a}}return g|0}}while(0);if((Oc[c[(c[(c[f>>2]|0)+8>>2]|0)+4>>2]&255](d,161536)|0)==-1){g=-1;return g|0}c[43162]=128;g=Ec[c[(c[(c[f>>2]|0)+8>>2]|0)+8>>2]&63](d)|0;return g|0}function Gy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a;c[d>>2]=c[d>>2]&-9;d=sy(a)|0;if((d|0)!=0){e=d;do{Gy(e,0);e=ty(e)|0;}while((e|0)!=0)}if((b|0)==0){return}b=ux(a)|0;if((b|0)==0){return}else{f=b}do{b=f;c[b>>2]=c[b>>2]&-9;b=mw(a,f)|0;if((b|0)!=0){e=b;do{b=e;c[b>>2]=c[b>>2]&-9;e=ow(a,e)|0;}while((e|0)!=0)}f=vx(a,f)|0;}while((f|0)!=0);return}function Hy(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;f=b;if((e|0)==0){if((uy(b)|0)==0){g=3}else{h=0;i=213448;j=151608}}else{g=3}if((g|0)==3){k=(a[b+12|0]&1)==0?213448:148768;l=(Pw(b)|0)==0;c[53512]=Wv(b,2,142576,0)|0;c[53684]=Wv(b,2,139520,0)|0;h=1;i=l?213448:145552;j=k}k=$w(b|0)|0;if((k|0)==0){g=6}else{if((a[k]|0)==37){g=6}else{m=136888;n=k}}if((g|0)==6){m=213448;n=213448}g=c[53668]|0;k=b+52|0;a:do{if((g|0)>0){l=g;while(1){l=l-1|0;if((Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](d,130632)|0)==-1){o=-1;break}if((l|0)<=0){break a}}return o|0}}while(0);if((Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](d,i)|0)==-1){o=-1;return o|0}do{if(!((a[n]|0)==0&(h|0)==0)){if((Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](d,j)|0)==-1){o=-1;return o|0}if((Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](d,133952)|0)==-1){o=-1;return o|0}if((a[n]|0)==0){break}i=Dy(n)|0;if((Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](d,i)|0)==-1){o=-1}else{break}return o|0}}while(0);if((Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](d,m)|0)==-1){o=-1;return o|0}if((Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](d,131968)|0)==-1){o=-1;return o|0}c[53668]=(c[53668]|0)+1;k=Uv(b,0)|0;do{if((k|0)!=0){if((Oy(b,d,129280,c[k+16>>2]|0,e)|0)==-1){o=-1;return o|0}if((Oy(b,d,126080,c[k+8>>2]|0,e)|0)==-1){o=-1;return o|0}if((Oy(b,d,123600,c[k+12>>2]|0,e)|0)==-1){o=-1}else{break}return o|0}}while(0);c[f>>2]=c[f>>2]|8;o=0;return o|0}function Iy(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;e=i;i=i+24|0;if((Jy(b,d)|0)==-1){f=-1;i=e;return f|0}g=Uv(Ix(b|0)|0,0)|0;h=ux(b)|0;if((h|0)==0){f=0;i=e;return f|0}j=(g|0)==0;k=e|0;l=g+12|0;m=g+8|0;g=h;a:while(1){h=g;if((Ky(b,g,(c[h>>2]|0)>>>4)|0)!=0){if(j){n=0}else{n=c[m>>2]|0}if((Ly(g,d,n)|0)==-1){f=-1;o=43;break}}p=mw(b,g)|0;if((p|0)!=0){q=g;r=p;while(1){p=r;s=r-32|0;t=c[((c[p>>2]&3|0)==2?r:s)+28>>2]|0;do{if((q|0)==(t|0)){u=q}else{if((Ky(b,t,(c[h>>2]|0)>>>4)|0)==0){u=q;break}if(j){v=0}else{v=c[m>>2]|0}if((Ly(c[((c[p>>2]&3|0)==2?r:s)+28>>2]|0,d,v)|0)==-1){f=-1;o=43;break a}u=c[((c[p>>2]&3|0)==2?r:s)+28>>2]|0}}while(0);t=sy(b)|0;b:do{if((t|0)==0){o=19}else{w=t;while(1){if((Ey(w)|0)==0){if((xw(w,r,0)|0)!=0){break b}}x=ty(w)|0;if((x|0)==0){o=19;break}else{w=x}}}}while(0);if((o|0)==19){o=0;if(j){y=0}else{y=c[l>>2]|0}t=c[p>>2]&3;w=c[((t|0)==3?r:r+32|0)+28>>2]|0;x=c[((t|0)==2?r:s)+28>>2]|0;t=w|0;z=Hx(t)|0;A=c[53668]|0;B=z+52|0;if((A|0)>0){z=A;do{z=z-1|0;if((Oc[c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]&255](d,130632)|0)==-1){f=-1;o=43;break a}}while((z|0)>0)}z=$w(t)|0;s=Hx(t)|0;if((z|0)==0){nb(k|0,160056,(C=i,i=i+8|0,c[C>>2]=c[w+4>>2],C)|0)|0;i=C;if((Oc[c[(c[(c[s+52>>2]|0)+8>>2]|0)+4>>2]&255](d,k)|0)==-1){f=-1;o=43;break a}}else{A=Dy(z)|0;if((Oc[c[(c[(c[s+52>>2]|0)+8>>2]|0)+4>>2]&255](d,A)|0)==-1){f=-1;o=43;break a}}if((My(r,d,c[53512]|0)|0)==-1){f=-1;o=43;break a}A=(Nw(Hx(t)|0)|0)!=0;if((Oc[c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]&255](d,A?116312:109e3)|0)==-1){f=-1;o=43;break a}A=x|0;s=$w(A)|0;z=Hx(A)|0;if((s|0)==0){nb(k|0,160056,(C=i,i=i+8|0,c[C>>2]=c[x+4>>2],C)|0)|0;i=C;if((Oc[c[(c[(c[z+52>>2]|0)+8>>2]|0)+4>>2]&255](d,k)|0)==-1){f=-1;o=43;break a}}else{A=Dy(s)|0;if((Oc[c[(c[(c[z+52>>2]|0)+8>>2]|0)+4>>2]&255](d,A)|0)==-1){f=-1;o=43;break a}}if((My(r,d,c[53684]|0)|0)==-1){f=-1;o=43;break a}A=r|0;do{if((c[p>>2]&8|0)==0){if((Ny(A,d,y)|0)==-1){f=-1;o=43;break a}}else{z=$w(A)|0;s=Hx(A)|0;if((z|0)==0){break}if((a[z]|0)==0){break}D=s+52|0;if((Oc[c[(c[(c[D>>2]|0)+8>>2]|0)+4>>2]&255](d,97624)|0)==-1){f=-1;o=43;break a}s=Dy(z)|0;if((Oc[c[(c[(c[D>>2]|0)+8>>2]|0)+4>>2]&255](d,s)|0)==-1){f=-1;o=43;break a}if((Oc[c[(c[(c[D>>2]|0)+8>>2]|0)+4>>2]&255](d,92088)|0)==-1){f=-1;o=43;break a}}}while(0);if((Oc[c[(c[(c[B>>2]|0)+8>>2]|0)+4>>2]&255](d,103256)|0)==-1){f=-1;o=43;break a}}A=ow(b,r)|0;if((A|0)==0){break}else{q=u;r=A}}}r=vx(b,g)|0;if((r|0)==0){f=0;o=43;break}else{g=r}}if((o|0)==43){i=e;return f|0}return 0}function Jy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=sy(a)|0;if((d|0)==0){e=0;return e|0}else{f=d}a:while(1){if((Ey(f)|0)==0){if((Hy(f,b,0)|0)==-1){e=-1;g=11;break}if((Iy(f,b)|0)==-1){e=-1;g=11;break}d=(c[53668]|0)-1|0;c[53668]=d;a=f+52|0;if((d|0)>0){h=d;do{h=h-1|0;if((Oc[c[(c[(c[a>>2]|0)+8>>2]|0)+4>>2]&255](b,130632)|0)==-1){e=-1;g=11;break a}}while((h|0)>0)}if((Oc[c[(c[(c[a>>2]|0)+8>>2]|0)+4>>2]&255](b,161536)|0)==-1){e=-1;g=11;break}}else{Jy(f,b)|0}h=ty(f)|0;if((h|0)==0){e=0;g=11;break}else{f=h}}if((g|0)==11){return e|0}return 0}function Ky(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=sy(a)|0;a:do{if((e|0)!=0){f=e;while(1){if((Ey(f)|0)==0){if((zx(f,b,0)|0)!=0){g=0;break}}f=ty(f)|0;if((f|0)==0){break a}}return g|0}}while(0);if((c[b>>2]|0)>>>4>>>0<d>>>0){g=0;return g|0}e=pw(a,b)|0;b:do{if((e|0)!=0){f=e;while(1){if((c[c[f+28>>2]>>2]|0)>>>4>>>0<d>>>0){g=0;break}f=qw(a,f)|0;if((f|0)==0){break b}}return g|0}}while(0);do{if((pw(a,b)|0)==0){if((mw(a,b)|0)==0){g=1}else{break}return g|0}}while(0);a=Vv(b|0)|0;if((a|0)==0){g=0;return g|0}b=a+8|0;d=c[b>>2]|0;e=Hc[c[d>>2]&63](d,0,128)|0;if((e|0)==0){g=0;return g|0}d=a+12|0;a=e;while(1){if((c[(c[d>>2]|0)+(c[a+16>>2]<<2)>>2]|0)!=(c[a+12>>2]|0)){g=1;h=16;break}e=c[b>>2]|0;f=Hc[c[e>>2]&63](e,a,8)|0;if((f|0)==0){g=0;h=16;break}else{a=f}}if((h|0)==16){return g|0}return 0}function Ly(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;i=i+24|0;f=e|0;g=a|0;h=Hx(g)|0;j=c[53668]|0;k=h+52|0;a:do{if((j|0)>0){h=j;while(1){h=h-1|0;if((Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](b,130632)|0)==-1){l=-1;break}if((h|0)<=0){break a}}i=e;return l|0}}while(0);j=f|0;f=$w(g)|0;h=Hx(g)|0;do{if((f|0)==0){nb(j|0,160056,(m=i,i=i+8|0,c[m>>2]=c[a+4>>2],m)|0)|0;i=m;if((Oc[c[(c[(c[h+52>>2]|0)+8>>2]|0)+4>>2]&255](b,j)|0)==-1){l=-1}else{break}i=e;return l|0}else{m=Dy(f)|0;if((Oc[c[(c[(c[h+52>>2]|0)+8>>2]|0)+4>>2]&255](b,m)|0)==-1){l=-1}else{break}i=e;return l|0}}while(0);do{if((c[a>>2]&8|0)==0){if((Ny(g,b,d)|0)==-1){l=-1}else{break}i=e;return l|0}}while(0);l=Oc[c[(c[(c[k>>2]|0)+8>>2]|0)+4>>2]&255](b,103256)|0;i=e;return l|0}function My(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if((e|0)==0){f=0;return f|0}g=b|0;b=Hx(g)|0;h=fw(g,e)|0;if((a[h]|0)==0){f=0;return f|0}e=b+52|0;if((Oc[c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2]&255](d,164120)|0)==-1){f=-1;return f|0}do{if((gy(h)|0)==0){b=gb(h|0,58)|0;if((b|0)==0){g=((xF(h|0)|0)<<1)+2|0;i=g>>>0>1024>>>0?g:1024;g=c[44748]|0;if((i|0)>(c[44750]|0)){if((g|0)==0){j=dF(i)|0}else{j=gF(g,i)|0}c[44748]=j;c[44750]=i;k=j}else{k=g}g=Cy(h,k)|0;if((Oc[c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2]&255](d,g)|0)==-1){f=-1}else{break}return f|0}a[b]=0;g=((xF(h|0)|0)<<1)+2|0;i=g>>>0>1024>>>0?g:1024;g=c[44748]|0;if((i|0)>(c[44750]|0)){if((g|0)==0){l=dF(i)|0}else{l=gF(g,i)|0}c[44748]=l;c[44750]=i;m=l}else{m=g}g=Cy(h,m)|0;if((Oc[c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2]&255](d,g)|0)==-1){f=-1;return f|0}if((Oc[c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2]&255](d,164120)|0)==-1){f=-1;return f|0}g=b+1|0;i=((xF(g|0)|0)<<1)+2|0;n=i>>>0>1024>>>0?i:1024;i=c[44748]|0;if((n|0)>(c[44750]|0)){if((i|0)==0){o=dF(n)|0}else{o=gF(i,n)|0}c[44748]=o;c[44750]=n;p=o}else{p=i}i=Cy(g,p)|0;if((Oc[c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2]&255](d,i)|0)==-1){f=-1;return f|0}else{a[b]=58;break}}else{b=Dy(h)|0;if((Oc[c[(c[(c[e>>2]|0)+8>>2]|0)+4>>2]&255](d,b)|0)==-1){f=-1}else{break}return f|0}}while(0);f=0;return f|0}function Ny(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;f=b;do{if(((c[f>>2]&3)-2|0)>>>0<2>>>0){g=$w(b)|0;h=Hx(b)|0;if((g|0)==0){i=0;break}if((a[g]|0)==0){i=0;break}j=h+52|0;if((Oc[c[(c[(c[j>>2]|0)+8>>2]|0)+4>>2]&255](d,97624)|0)==-1){k=-1;return k|0}h=Dy(g)|0;if((Oc[c[(c[(c[j>>2]|0)+8>>2]|0)+4>>2]&255](d,h)|0)==-1){k=-1}else{i=1;break}return k|0}else{i=0}}while(0);h=Vv(b)|0;j=Hx(b)|0;a:do{if((h|0)==0){l=i}else{b=e|0;g=Hc[c[b>>2]&63](e,0,128)|0;if((g|0)==0){l=i;break}m=h+12|0;n=j+52|0;o=g;g=i;b:while(1){do{if(((c[f>>2]&3)-2|0)>>>0<2>>>0){p=c[53512]|0;if((p|0)!=0){if((c[o+16>>2]|0)==(c[p+16>>2]|0)){q=g;break}}p=c[53684]|0;if((p|0)==0){r=14;break}if((c[o+16>>2]|0)==(c[p+16>>2]|0)){q=g}else{r=14}}else{r=14}}while(0);do{if((r|0)==14){r=0;p=o+16|0;if((c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)==(c[o+12>>2]|0)){q=g;break}s=g+1|0;do{if((g|0)==0){t=c[53668]|0;if((t|0)>0){u=t;do{u=u-1|0;if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,130632)|0)==-1){k=-1;r=33;break b}}while((u|0)>0)}if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,86840)|0)==-1){k=-1;r=33;break b}c[53668]=(c[53668]|0)+1}else{if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,82040)|0)==-1){k=-1;r=33;break b}u=c[53668]|0;if((u|0)>0){v=u}else{break}do{v=v-1|0;if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,130632)|0)==-1){k=-1;r=33;break b}}while((v|0)>0)}}while(0);u=Dy(c[o+8>>2]|0)|0;if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,u)|0)==-1){k=-1;r=33;break b}if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,168256)|0)==-1){k=-1;r=33;break b}u=Dy(c[(c[m>>2]|0)+(c[p>>2]<<2)>>2]|0)|0;if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,u)|0)==-1){k=-1;r=33;break b}else{q=s}}}while(0);u=Hc[c[b>>2]&63](e,o,8)|0;if((u|0)==0){l=q;break a}else{o=u;g=q}}if((r|0)==33){return k|0}}}while(0);do{if((l|0)>0){if((Oc[c[(c[(c[j+52>>2]|0)+8>>2]|0)+4>>2]&255](d,92088)|0)==-1){k=-1;return k|0}else{c[53668]=(c[53668]|0)-1;break}}}while(0);c[f>>2]=c[f>>2]|8;k=0;return k|0}function Oy(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;h=(g|0)!=0;if(h){i=0}else{i=fh(f,0)|0}g=f|0;j=Hc[c[g>>2]&63](f,0,128)|0;do{if((j|0)==0){k=34}else{l=(i|0)==0;m=i|0;n=b+52|0;o=0;p=j;a:while(1){q=p+12|0;r=c[q>>2]|0;if((r|0)==0){k=7}else{if((a[r]|0)==0){k=7}else{k=12}}do{if((k|0)==7){k=0;if((a[p+22|0]|0)!=0){k=12;break}if(l){s=o;break}r=Hc[c[m>>2]&63](i,p,4)|0;t=c[r+12>>2]|0;if((t|0)!=0){if((a[t]|0)!=0){k=12;break}}if((a[r+22|0]|0)==0){k=12}else{s=o}}}while(0);if((k|0)==12){k=0;r=o+1|0;do{if((o|0)==0){t=c[53668]|0;if((t|0)>0){u=t;do{u=u-1|0;if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,130632)|0)==-1){v=-1;k=36;break a}}while((u|0)>0)}if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,e)|0)==-1){v=-1;k=36;break a}if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,86840)|0)==-1){v=-1;k=36;break a}c[53668]=(c[53668]|0)+1}else{if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,82040)|0)==-1){v=-1;k=36;break a}u=c[53668]|0;if((u|0)>0){w=u}else{break}do{w=w-1|0;if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,130632)|0)==-1){v=-1;k=36;break a}}while((w|0)>0)}}while(0);u=Dy(c[p+8>>2]|0)|0;if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,u)|0)==-1){v=-1;k=36;break}if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,168256)|0)==-1){v=-1;k=36;break}u=Dy(c[q>>2]|0)|0;if((Oc[c[(c[(c[n>>2]|0)+8>>2]|0)+4>>2]&255](d,u)|0)==-1){v=-1;k=36;break}else{s=r}}u=Hc[c[g>>2]&63](f,p,8)|0;if((u|0)==0){k=27;break}else{o=s;p=u}}if((k|0)==27){if((s|0)<=0){k=34;break}c[53668]=(c[53668]|0)-1;p=b+52|0;b:do{if((s|0)>1){if((Oc[c[(c[(c[p>>2]|0)+8>>2]|0)+4>>2]&255](d,121736)|0)==-1){v=-1;return v|0}o=c[53668]|0;if((o|0)>0){x=o}else{break}while(1){x=x-1|0;if((Oc[c[(c[(c[p>>2]|0)+8>>2]|0)+4>>2]&255](d,130632)|0)==-1){v=-1;break}if((x|0)<=0){break b}}return v|0}}while(0);r=(Oc[c[(c[(c[p>>2]|0)+8>>2]|0)+4>>2]&255](d,120864)|0)==-1;if(r|h){v=r<<31>>31}else{break}return v|0}else if((k|0)==36){return v|0}}}while(0);do{if((k|0)==34){if(h){v=0}else{break}return v|0}}while(0);fh(f,i)|0;v=0;return v|0}function Py(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;f=i;i=i+8|0;g=f|0;h=g;j=ux(d)|0;if((j|0)==0){k=0;i=f;return k|0}l=d+8|0;m=c[o>>2]|0;n=0;p=0;q=j;j=0;while(1){r=mw(d,q)|0;if((r|0)==0){s=n;t=p;u=j}else{v=r;r=n;w=p;x=j;while(1){y=c[v>>2]&3;z=c[((y|0)==2?v:v-32|0)+28>>2]|0;A=(b[(c[v+8>>2]|0)+168>>1]|0)==0;do{if((q|0)==(z|0)){if(A){B=x;C=w;D=r;break}if((w|0)==0){E=jk(96)|0;c[E+84>>2]=jk(((Lw(d)|0)<<5)+11520|0)|0;F=E}else{F=w}Gt(F,v,c[(c[l>>2]|0)+236>>2]|0);B=x;C=F;D=r}else{if(A){B=x;C=w;D=r;break}E=c[((y|0)==3?v:v+32|0)+28>>2]|0;G=z+8|0;H=c[(c[G>>2]|0)+212>>2]|0;I=E+8|0;J=c[(c[I>>2]|0)+212>>2]|0;K=jk(12)|0;L=K;if((a[(c[G>>2]|0)+118|0]|0)==0){M=z|0;N=H}else{M=H;N=c[(c[(c[H+8>>2]|0)+132>>2]|0)+48>>2]|0}if((a[(c[I>>2]|0)+118|0]|0)==0){O=E|0;P=J}else{O=J;P=c[(c[(c[J+8>>2]|0)+132>>2]|0)+48>>2]|0}J=c[(c[(c[N+8>>2]|0)+132>>2]|0)+44>>2]|0;E=c[(c[(c[P+8>>2]|0)+132>>2]|0)+44>>2]|0;do{if((J|0)>(E|0)){I=M;H=J;G=N;while(1){Qy(L,G,I,0,e);Q=G|0;R=H-1|0;S=c[(c[(c[G+8>>2]|0)+132>>2]|0)+48>>2]|0;if((R|0)>(E|0)){I=Q;H=R;G=S}else{T=Q;U=O;V=S;W=P;break}}}else{if((E|0)>(J|0)){X=O;Y=E;Z=P}else{T=M;U=O;V=N;W=P;break}while(1){Qy(L,Z,X,0,e);G=Z|0;H=Y-1|0;I=c[(c[(c[Z+8>>2]|0)+132>>2]|0)+48>>2]|0;if((H|0)>(J|0)){X=G;Y=H;Z=I}else{T=M;U=G;V=N;W=I;break}}}}while(0);if((V|0)==(W|0)){_=U;$=T;aa=W}else{J=U;E=T;I=W;G=V;while(1){Qy(L,G,0,E,e);Qy(L,I,J,0,e);H=G|0;S=c[(c[(c[G+8>>2]|0)+132>>2]|0)+48>>2]|0;Q=I|0;R=c[(c[(c[I+8>>2]|0)+132>>2]|0)+48>>2]|0;if((S|0)==(R|0)){_=Q;$=H;aa=S;break}else{J=Q;E=H;I=R;G=S}}}Qy(L,aa,_,$,e);G=K+8|0;I=K;if((Hs(c[G>>2]|0,c[I>>2]|0)|0)==0){if((a[213992]|0)==0){B=1;C=w;D=L;break}Ma(155176,50,1,m|0)|0;B=1;C=w;D=L;break}E=IB(c[G>>2]|0,c[I>>2]|0)|0;if((E|0)==0){Fv(0,116504,(J=i,i=i+1|0,i=i+7&-8,c[J>>2]=0,J)|0)|0;i=J;B=1;C=w;D=L;break}if((v|0)!=0){J=v;do{S=J+8|0;R=(c[S>>2]|0)+144|0;It(h,J,E,0,c[G>>2]|0,c[I>>2]|0);H=R;R=c[g+4>>2]|0;c[H>>2]=c[g>>2];c[H+4>>2]=R;Jt(d,J,c[G>>2]|0,c[I>>2]|0,0);J=c[(c[S>>2]|0)+172>>2]|0;}while((J|0)!=0)}c[I>>2]=0;B=x;C=w;D=L}}while(0);z=ow(d,v)|0;if((z|0)==0){s=D;t=C;u=B;break}else{v=z;r=D;w=C;x=B}}}x=vx(d,q)|0;if((x|0)==0){break}else{n=s;p=t;q=x;j=u}}if((s|0)!=0){eF(c[s+8>>2]|0);eF(s)}if((t|0)==0){k=u;i=f;return k|0}eF(c[t+84>>2]|0);eF(t);k=u;i=f;return k|0}function Qy(b,d,e,f,i){b=b|0;d=d|0;e=e|0;f=f|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0;j=ux(d)|0;if((j|0)!=0){k=e;l=f;m=b+4|0;n=b|0;o=b+8|0;p=j;do{j=c[p+8>>2]|0;do{if(!((c[j+212>>2]|0)!=(d|0)|(p|0)==(k|0)|(p|0)==(l|0))){if((a[j+118|0]|0)!=0){break}q=Ht(p,i,0)|0;r=c[m>>2]|0;s=c[o>>2]|0;do{if((r|0)==(c[n>>2]|0)){if((s|0)==0){t=kk(400)|0;c[o>>2]=t;c[m>>2]=100;u=t;break}else{c[m>>2]=r<<1;t=mk(s,r<<3)|0;c[o>>2]=t;u=t;break}}else{u=s}}while(0);s=c[n>>2]|0;c[n>>2]=s+1;c[u+(s<<2)>>2]=q}}while(0);p=vx(d,p)|0;}while((p|0)!=0)}p=d+8|0;d=c[p>>2]|0;if((c[d+172>>2]|0)<1){return}u=e;e=f;f=i+8|0;n=i|0;o=i+4|0;i=b+4|0;m=b|0;l=b+8|0;b=1;k=d;while(1){d=c[(c[k+176>>2]|0)+(b<<2)>>2]|0;if((d|0)==(u|0)|(d|0)==(e|0)){v=k}else{j=jk(8)|0;s=j;r=c[d+8>>2]|0;w=+h[r+16>>3];x=+h[r+24>>3];y=+h[r+32>>3];z=+h[r+40>>3];c[j+4>>2]=4;r=jk(64)|0;d=j;c[d>>2]=r;if((a[f]|0)==0){A=+g[n>>2];B=+g[o>>2];C=(w+y)*.5*(A+-1.0);D=(x+z)*.5*(B+-1.0);E=z*B-D;F=y*A-C;G=x*B-D;H=w*A-C}else{C=+g[n>>2];A=+g[o>>2];E=z+A;F=y+C;G=x-A;H=w-C}h[r>>3]=H;h[(c[d>>2]|0)+8>>3]=G;h[(c[d>>2]|0)+16>>3]=H;h[(c[d>>2]|0)+24>>3]=E;h[(c[d>>2]|0)+32>>3]=F;h[(c[d>>2]|0)+40>>3]=E;h[(c[d>>2]|0)+48>>3]=F;h[(c[d>>2]|0)+56>>3]=G;d=c[i>>2]|0;r=c[l>>2]|0;do{if((d|0)==(c[m>>2]|0)){if((r|0)==0){j=kk(400)|0;c[l>>2]=j;c[i>>2]=100;I=j;break}else{c[i>>2]=d<<1;j=mk(r,d<<3)|0;c[l>>2]=j;I=j;break}}else{I=r}}while(0);r=c[m>>2]|0;c[m>>2]=r+1;c[I+(r<<2)>>2]=s;v=c[p>>2]|0}if((b|0)<(c[v+172>>2]|0)){b=b+1|0;k=v}else{break}}return}function Ry(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;f=i;i=i+128|0;g=f|0;h=jk(Lw(b)|0)|0;j=b+8|0;k=c[c[(c[j>>2]|0)+132>>2]>>2]|0;do{if((k|0)==0){l=0;m=0}else{n=g|0;o=$w(b|0)|0;p=c[53848]|0;nb(n|0,126592,(q=i,i=i+16|0,c[q>>2]=o,c[q+8>>2]=p,q)|0)|0;i=q;p=ry(b,n,1)|0;Wx(p|0,154280,272,1)|0;n=jk(56)|0;o=p+8|0;c[(c[o>>2]|0)+132>>2]=n;c[c[(c[o>>2]|0)+132>>2]>>2]=k;c[(c[(c[o>>2]|0)+132>>2]|0)+4>>2]=c[(c[(c[j>>2]|0)+132>>2]|0)+4>>2];o=c[k+4>>2]|0;if((o|0)==0){l=p;m=1;break}else{r=k;s=o}while(1){if((a[h+(c[(c[s+8>>2]|0)+120>>2]|0)|0]|0)==0){Sy(b,s,p,h)}o=c[r+20>>2]|0;if((o|0)==0){l=p;m=1;break}else{r=r+16|0;s=o}}}}while(0);s=ux(b)|0;if((s|0)==0){t=m;u=l;v=0}else{r=g|0;k=b|0;j=m;m=l;l=s;s=0;while(1){p=c[l+8>>2]|0;do{if((a[h+(c[p+120>>2]|0)|0]|0)==0){if((a[p+119|0]|0)!=3){w=s;x=m;y=j;break}if((m|0)==0){o=$w(k)|0;n=(c[53848]|0)+j|0;nb(r|0,126592,(q=i,i=i+16|0,c[q>>2]=o,c[q+8>>2]=n,q)|0)|0;i=q;n=ry(b,r,1)|0;Wx(n|0,154280,272,1)|0;o=jk(56)|0;c[(c[n+8>>2]|0)+132>>2]=o;z=n;A=j+1|0}else{z=m;A=j}Sy(b,l,z,h);w=1;x=z;y=A}else{w=s;x=m;y=j}}while(0);p=vx(b,l)|0;if((p|0)==0){t=y;u=x;v=w;break}else{j=y;m=x;l=p;s=w}}}if((u|0)!=0){jv(u)|0}u=ux(b)|0;if((u|0)==0){B=t}else{w=g|0;g=b|0;s=t;t=u;while(1){if((a[h+(c[(c[t+8>>2]|0)+120>>2]|0)|0]|0)==0){u=$w(g)|0;l=(c[53848]|0)+s|0;nb(w|0,123560,(q=i,i=i+16|0,c[q>>2]=u,c[q+8>>2]=l,q)|0)|0;i=q;l=ry(b,w,1)|0;Wx(l|0,154280,272,1)|0;u=jk(56)|0;c[(c[l+8>>2]|0)+132>>2]=u;Sy(b,t,l,h);jv(l)|0;C=s+1|0}else{C=s}l=vx(b,t)|0;if((l|0)==0){B=C;break}else{s=C;t=l}}}eF(h);c[53848]=(c[53848]|0)+B;if((d|0)!=0){c[d>>2]=B}if((e|0)!=0){c[e>>2]=v}v=jk((B<<2)+4|0)|0;e=sy(b)|0;if((e|0)==0){D=B;E=v}else{b=B;B=e;e=v;while(1){d=e+4|0;c[e>>2]=B;h=b-1|0;t=ty(B)|0;if((t|0)==0){D=h;E=d;break}else{b=h;B=t;e=d}}}if((D|0)==0){c[E>>2]=0;i=f;return v|0}else{cc(114768,107904,134,170616);return 0}return 0}function Sy(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;a[f+(c[(c[d+8>>2]|0)+120>>2]|0)|0]=1;zx(e,d,1)|0;g=rw(b,d)|0;if((g|0)==0){return}else{h=g}do{g=c[h>>2]&3;i=c[((g|0)==3?h:h+32|0)+28>>2]|0;if((i|0)==(d|0)){j=c[((g|0)==2?h:h-32|0)+28>>2]|0}else{j=i}if((a[f+(c[(c[j+8>>2]|0)+120>>2]|0)|0]|0)==0){Sy(b,j,e,f)}h=sw(b,h,d)|0;}while((h|0)!=0);return}function Ty(b){b=b|0;var d=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=i;i=i+8|0;f=d|0;Zx(b,1,102216,304,1);bn(b)|0;g=jk(((Lw(b)|0)<<2)+4|0)|0;j=b+8|0;c[(c[j>>2]|0)+144>>2]=g;g=ux(b)|0;if((g|0)!=0){k=g;g=0;while(1){Ym(k);l=k|0;m=jk(e[(c[(Hx(l)|0)+8>>2]|0)+168>>1]<<3)|0;n=k+8|0;c[(c[n>>2]|0)+132>>2]=m;vn(k,c[(c[(Hx(l)|0)+8>>2]|0)+116>>2]&1);c[(c[(c[j>>2]|0)+144>>2]|0)+(g<<2)>>2]=k;c[(c[n>>2]|0)+120>>2]=g;n=vx(b,k)|0;if((n|0)==0){break}else{k=n;g=g+1|0}}}g=Wv(b,2,145056,0)|0;k=ux(b)|0;if((k|0)!=0){n=k;do{k=mw(b,n)|0;if((k|0)!=0){l=k;do{k=l|0;Wx(k,91160,176,1)|0;p=+Fm(k,c[53750]|0,1.0,0.0);m=l+8|0;h[(c[m>>2]|0)+128>>3]=p;p=+Fm(k,g,+h[(c[6536]|0)+32>>3],0.0);h[(c[m>>2]|0)+136>>3]=p;Zm(l)|0;l=ow(b,l)|0;}while((l|0)!=0)}n=vx(b,n)|0;}while((n|0)!=0)}n=Wv(b,1,111528,0)|0;if((n|0)==0){q=1;r=0;i=d;return}g=Wv(b,1,104752,0)|0;b=c[c[(c[j>>2]|0)+144>>2]>>2]|0;if((b|0)==0){q=1;r=0;i=d;return}l=c[o>>2]|0;if((g|0)==0){m=0;k=b;do{s=k|0;t=fw(s,n)|0;do{if((a[t]|0)!=0){u=k+8|0;v=c[(c[u>>2]|0)+132>>2]|0;a[f]=0;w=v+8|0;x=ac(t|0,103888,(y=i,i=i+24|0,c[y>>2]=v,c[y+8>>2]=w,c[y+16>>2]=f,y)|0)|0;i=y;if((x|0)<=1){x=$w(s)|0;gc(l|0,96448,(y=i,i=i+16|0,c[y>>2]=x,c[y+8>>2]=t,y)|0)|0;i=y;break}p=+h[21580];if(p>0.0){x=v;h[x>>3]=+h[x>>3]/p;x=w;h[x>>3]=+h[x>>3]/+h[21580]}a[(c[u>>2]|0)+119|0]=1;if((a[f]|0)!=33){break}a[(c[u>>2]|0)+119|0]=3}}while(0);m=m+1|0;k=c[(c[(c[j>>2]|0)+144>>2]|0)+(m<<2)>>2]|0;}while((k|0)!=0);q=1;r=0;i=d;return}else{z=0;A=b}do{b=A|0;k=fw(b,n)|0;do{if((a[k]|0)!=0){m=A+8|0;t=c[(c[m>>2]|0)+132>>2]|0;a[f]=0;s=t+8|0;u=ac(k|0,103888,(y=i,i=i+24|0,c[y>>2]=t,c[y+8>>2]=s,c[y+16>>2]=f,y)|0)|0;i=y;if((u|0)<=1){u=$w(b)|0;gc(l|0,96448,(y=i,i=i+16|0,c[y>>2]=u,c[y+8>>2]=k,y)|0)|0;i=y;break}p=+h[21580];if(p>0.0){u=t;h[u>>3]=+h[u>>3]/p;u=s;h[u>>3]=+h[u>>3]/+h[21580]}a[(c[m>>2]|0)+119|0]=1;if((a[f]|0)!=33){if((Km(fw(b,g)|0)|0)<<24>>24==0){break}}a[(c[m>>2]|0)+119|0]=3}}while(0);z=z+1|0;A=c[(c[(c[j>>2]|0)+144>>2]|0)+(z<<2)>>2]|0;}while((A|0)!=0);q=1;r=0;i=d;return}function Uy(a){a=a|0;var b=0,d=0,e=0;b=ux(a)|0;if((b|0)!=0){d=b;do{b=mw(a,d)|0;if((b|0)!=0){e=b;do{tn(e);e=ow(a,e)|0;}while((e|0)!=0)}un(d);d=vx(a,d)|0;}while((d|0)!=0)}Vy(a);d=a+8|0;eF(c[(c[d>>2]|0)+144>>2]|0);eF(c[(c[d>>2]|0)+132>>2]|0);return}function Vy(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;b=a+8|0;d=c[b>>2]|0;e=c[d+176>>2]|0;if((c[d+172>>2]|0)<1){f=e}else{d=1;g=e;while(1){e=c[g+(d<<2)>>2]|0;h=e+8|0;dk(c[(c[h>>2]|0)+12>>2]|0);i=c[(c[h>>2]|0)+132>>2]|0;if((i|0)!=0){eF(c[i>>2]|0);eF(c[(c[h>>2]|0)+132>>2]|0)}Vy(e);e=c[b>>2]|0;h=c[e+176>>2]|0;if((d|0)<(c[e+172>>2]|0)){d=d+1|0;g=h}else{f=h;break}}}eF(f);f=a|0;if((Ix(f)|0)==(a|0)){return}Xx(f,120088)|0;return}function Wy(a){a=a|0;var b=0,d=0,e=0,f=0;b=kk(24)|0;d=b;c[53372]=d;c[b>>2]=$g(25440,c[43330]|0)|0;c[b+16>>2]=0;c[b+12>>2]=0;e=kk(16)|0;c[e+12>>2]=0;f=kk(a*20|0)|0;c[e>>2]=f;c[e+8>>2]=f+(a*20|0);c[e+4>>2]=f;c[b+4>>2]=e;return d|0}function Xy(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a+12|0;e=c[d>>2]|0;if((e|0)>=(b|0)){return}f=e<<1;e=(f|0)<(b|0)?b:f;f=a+16|0;a=c[f>>2]|0;if((a|0)!=0){eF(a)}c[f>>2]=kk(e<<3)|0;c[d>>2]=e;return}function Yy(a){a=a|0;var b=0;b=c[a>>2]|0;Hc[c[b>>2]&63](b,0,64)|0;c[a+20>>2]=c[a+16>>2];b=c[a+4>>2]|0;c[a+8>>2]=b;c[b+4>>2]=c[b>>2];return}function Zy(a){a=a|0;var b=0,d=0;Vg(c[a>>2]|0)|0;b=c[a+4>>2]|0;if((b|0)!=0){d=b;while(1){b=c[d+12>>2]|0;eF(c[d>>2]|0);eF(d);if((b|0)==0){break}else{d=b}}}eF(c[a+16>>2]|0);eF(a);return}function _y(a,b,e,f){a=a|0;b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0;g=i;i=i+24|0;h=g|0;c[h>>2]=b;c[h+4>>2]=e;j=c[a>>2]|0;k=(Hc[c[j>>2]&63](j,h,1)|0)+8|0;h=c[k>>2]|0;j=a+20|0;a=c[j>>2]|0;c[j>>2]=a+8;c[a>>2]=f;c[a+4>>2]=h;c[k>>2]=a;if((d[213992]|0)>>>0<=2>>>0){i=g;return}a=c[o>>2]|0;k=$w(f|0)|0;gc(a|0,163312,(a=i,i=i+24|0,c[a>>2]=b,c[a+8>>2]=e,c[a+16>>2]=k,a)|0)|0;i=a;i=g;return}function $y(a,b){a=a|0;b=b|0;hh(c[a>>2]|0,b,a)|0;return}function az(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+24|0;f=e|0;c[f>>2]=b;c[f+4>>2]=d;d=c[a>>2]|0;a=Hc[c[d>>2]&63](d,f,4)|0;i=e;return a|0}function bz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=(c[53372]|0)+8|0;a=c[d>>2]|0;e=c[a+4>>2]|0;if((e|0)==(c[a+8>>2]|0)){f=a+12|0;g=c[f>>2]|0;if((g|0)==0){h=(e-(c[a>>2]|0)|0)/20|0;i=kk(16)|0;j=i;c[i+12>>2]=0;k=kk(h*40|0)|0;c[i>>2]=k;c[i+8>>2]=k+((h<<1)*20|0);c[i+4>>2]=k;c[f>>2]=j;l=j}else{l=g}c[d>>2]=l;d=c[l>>2]|0;c[l+4>>2]=d;m=l;n=d}else{m=a;n=e}c[m+4>>2]=n+20;c[n>>2]=c[b>>2];c[n+4>>2]=c[b+4>>2];c[n+8>>2]=0;return n|0}function cz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;e=c[b>>2]|0;a=c[d>>2]|0;if((e|0)==(a|0)){f=(c[b+4>>2]|0)-(c[d+4>>2]|0)|0;return f|0}else{f=e-a|0;return f|0}return 0}function dz(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;f=i;i=i+16|0;g=f|0;h=(d|0)==0;if(h){c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;j=g}else{j=d}d=sy(a)|0;if((d|0)!=0){k=e+8|0;l=e|0;m=j+8|0;n=j+4|0;o=j|0;p=d;do{d=p|0;if((Za($w(d)|0,123792,7)|0)==0){Wx(d,92056,272,1)|0;d=jk(56)|0;q=p+8|0;c[(c[q>>2]|0)+132>>2]=d;b[(c[q>>2]|0)+168>>1]=b[(c[k>>2]|0)+168>>1]|0;c[(c[(c[q>>2]|0)+132>>2]|0)+44>>2]=(c[(c[(c[k>>2]|0)+132>>2]|0)+44>>2]|0)+1;c[(c[(c[q>>2]|0)+132>>2]|0)+48>>2]=l;q=(c[m>>2]|0)+1|0;c[m>>2]=q;d=c[n>>2]|0;if((q|0)<(d|0)){r=q;s=c[o>>2]|0}else{q=d+10|0;c[n>>2]=q;d=mk(c[o>>2]|0,q<<2)|0;c[o>>2]=d;r=c[m>>2]|0;s=d}c[s+(r<<2)>>2]=p;dz(p,0,p)}else{dz(p,j,e)}p=ty(p)|0;}while((p|0)!=0)}if(!h){i=f;return}h=g+8|0;p=a+8|0;c[(c[p>>2]|0)+172>>2]=c[h>>2];a=c[h>>2]|0;if((a|0)==0){i=f;return}h=mk(c[g>>2]|0,(a<<2)+4|0)|0;c[(c[p>>2]|0)+176>>2]=h;i=f;return}function ez(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0;d=i;i=i+56|0;e=d|0;c[e+4>>2]=Wv(b,0,159312,0)|0;c[e+8>>2]=Wv(b,0,163152,0)|0;c[e+12>>2]=Wv(b,0,131152,0)|0;c[e>>2]=b;c[e+16>>2]=0;c[e+36>>2]=tv(b,2,4,e+20|0)|0;fz(b,e);e=ux(b)|0;if((e|0)==0){gz(b,b);hz(b);i=d;return}else{f=e}do{e=f+8|0;g=c[e>>2]|0;if((a[g+118|0]|0)!=0){j=c[(c[(c[g+212>>2]|0)+8>>2]|0)+132>>2]|0;k=+h[j+24>>3]- +h[j+8>>3];l=+h[j+32>>3]- +h[j+16>>3];m=k*.5;n=l*.5;o=m*72.0;p=n*72.0;h[c[g+132>>2]>>3]=m;h[(c[(c[e>>2]|0)+132>>2]|0)+8>>3]=n;h[(c[e>>2]|0)+32>>3]=k;h[(c[e>>2]|0)+40>>3]=l;h[(c[e>>2]|0)+96>>3]=o;h[(c[e>>2]|0)+88>>3]=o;h[(c[e>>2]|0)+80>>3]=l*72.0;g=c[e>>2]|0;j=c[(c[g+12>>2]|0)+44>>2]|0;h[j>>3]=+h[g+96>>3];h[j+8>>3]=p;h[j+16>>3]=-0.0- +h[(c[e>>2]|0)+88>>3];h[j+24>>3]=p;h[j+32>>3]=-0.0- +h[(c[e>>2]|0)+88>>3];l=-0.0-p;h[j+40>>3]=l;h[j+48>>3]=+h[(c[e>>2]|0)+96>>3];h[j+56>>3]=l}f=vx(b,f)|0;}while((f|0)!=0);gz(b,b);hz(b);i=d;return}function fz(f,g){f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0.0,L=0.0,M=0.0,N=0.0,O=0,P=0,Q=0.0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0.0,ma=0.0,na=0,oa=0,pa=0.0,qa=0,ra=0,sa=0,ta=0.0,ua=0.0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0.0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0.0,Ra=0.0,Sa=0.0,Ta=0.0,Ua=0,Va=0,Wa=0,Xa=0.0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0;j=i;i=i+200|0;k=j|0;l=j+32|0;m=j+40|0;n=j+144|0;p=j+152|0;q=j+160|0;if((a[213992]|0)!=0){r=c[o>>2]|0;s=$w(f|0)|0;gc(r|0,103288,(t=i,i=i+8|0,c[t>>2]=s,t)|0)|0;i=t}s=ux(f)|0;if((s|0)!=0){r=s;do{c[(c[r+8>>2]|0)+164>>2]=0;r=vx(f,r)|0;}while((r|0)!=0)}r=m|0;m=g+16|0;s=c[m>>2]|0;c[m>>2]=s+1;nb(r|0,154944,(t=i,i=i+8|0,c[t>>2]=s,t)|0)|0;i=t;if((d[213992]|0)>>>0>1>>>0){s=c[o>>2]|0;m=$w(f|0)|0;gc(s|0,151080,(t=i,i=i+16|0,c[t>>2]=r,c[t+8>>2]=m,t)|0)|0;i=t}m=Hw(148168,173936,0)|0;r=m|0;Wx(r,92056,272,1)|0;s=jk(56)|0;u=m+8|0;c[(c[u>>2]|0)+132>>2]=s;s=f+8|0;b[(c[u>>2]|0)+168>>1]=b[(c[s>>2]|0)+168>>1]|0;v=Wv(f,0,145432,0)|0;do{if((v|0)!=0){w=fw(f|0,v)|0;x=Wv(m,0,145432,0)|0;if((x|0)==0){Wv(m,0,145432,w)|0;break}else{hw(r,x,w)|0;break}}}while(0);v=Wv(f,0,142080,0)|0;do{if((v|0)!=0){w=fw(f|0,v)|0;x=Wv(m,0,142080,0)|0;if((x|0)==0){Wv(m,0,142080,w)|0;break}else{hw(r,x,w)|0;break}}}while(0);v=Wv(f,0,138944,0)|0;do{if((v|0)!=0){w=fw(f|0,v)|0;x=Wv(m,0,138944,0)|0;if((x|0)==0){Wv(m,0,138944,w)|0;break}else{hw(r,x,w)|0;break}}}while(0);v=c[s>>2]|0;if((c[v+172>>2]|0)<1){y=0}else{w=g+4|0;x=g|0;z=k|0;A=k+8|0;B=k+16|0;C=k+24|0;k=1;D=0;E=v;while(1){v=c[(c[E+176>>2]|0)+(k<<2)>>2]|0;Rj(v);F=v|0;G=Ax(m,$w(F)|0,1)|0;Wx(G|0,81280,304,1)|0;H=jk(32)|0;I=G+8|0;c[(c[I>>2]|0)+112>>2]=H;H=kk(e[(c[u>>2]|0)+168>>1]<<3)|0;c[(c[I>>2]|0)+132>>2]=H;c[(c[I>>2]|0)+212>>2]=v;H=D+1|0;c[(c[I>>2]|0)+120>>2]=D;J=c[w>>2]|0;do{if((J|0)==0){K=1.7976931348623157e+308;L=1.7976931348623157e+308;M=-1.7976931348623157e+308;N=-1.7976931348623157e+308}else{O=fw(F,J)|0;if((a[O]|0)==0){K=1.7976931348623157e+308;L=1.7976931348623157e+308;M=-1.7976931348623157e+308;N=-1.7976931348623157e+308;break}if((c[x>>2]|0)!=(v|0)){P=fw(uy(v)|0,J)|0;if((P|0)==(O|0)){K=1.7976931348623157e+308;L=1.7976931348623157e+308;M=-1.7976931348623157e+308;N=-1.7976931348623157e+308;break}if((Ya(O|0,P|0)|0)==0){K=1.7976931348623157e+308;L=1.7976931348623157e+308;M=-1.7976931348623157e+308;N=-1.7976931348623157e+308;break}}a[l]=0;P=ac(O|0,129200,(t=i,i=i+40|0,c[t>>2]=z,c[t+8>>2]=A,c[t+16>>2]=B,c[t+24>>2]=C,c[t+32>>2]=l,t)|0)|0;i=t;if((P|0)<=3){P=$w(F)|0;Fv(0,125976,(t=i,i=i+16|0,c[t>>2]=P,c[t+8>>2]=O,t)|0)|0;i=t;K=1.7976931348623157e+308;L=1.7976931348623157e+308;M=-1.7976931348623157e+308;N=-1.7976931348623157e+308;break}Q=+h[21580];if(Q>0.0){h[z>>3]=+h[z>>3]/Q;h[A>>3]=+h[A>>3]/Q;h[B>>3]=+h[B>>3]/Q;h[C>>3]=+h[C>>3]/Q}O=a[l]|0;do{if(O<<24>>24==33){a[(c[I>>2]|0)+119|0]=3}else{P=(c[I>>2]|0)+119|0;if(O<<24>>24==63){a[P]=2;break}else{a[P]=1;break}}}while(0);K=+h[z>>3];L=+h[A>>3];M=+h[B>>3];N=+h[C>>3]}}while(0);F=ux(v)|0;if((F|0)!=0){J=G;O=F;do{c[(c[O+8>>2]|0)+164>>2]=J;O=vx(v,O)|0;}while((O|0)!=0)}O=c[I>>2]|0;if((a[O+119|0]|0)!=0){h[c[O+132>>2]>>3]=(M+K)*.5;h[(c[(c[I>>2]|0)+132>>2]|0)+8>>3]=(N+L)*.5}O=c[s>>2]|0;if((k|0)<(c[O+172>>2]|0)){k=k+1|0;D=H;E=O}else{y=H;break}}}E=ux(f)|0;a:do{if((E|0)==0){R=y}else{D=f;k=y;C=E;b:while(1){S=C+8|0;B=c[S>>2]|0;do{if((c[B+164>>2]|0)==0){A=B+212|0;z=c[A>>2]|0;if((z|0)!=0){if((z|0)!=(c[(c[(c[s>>2]|0)+132>>2]|0)+48>>2]|0)){break b}}c[A>>2]=D;if((a[(c[S>>2]|0)+118|0]|0)!=0){T=k;break}A=Ax(m,$w(C|0)|0,1)|0;Wx(A|0,81280,304,1)|0;z=jk(32)|0;l=A+8|0;c[(c[l>>2]|0)+112>>2]=z;z=kk(e[(c[u>>2]|0)+168>>1]<<3)|0;c[(c[l>>2]|0)+132>>2]=z;c[(c[S>>2]|0)+164>>2]=A;c[(c[l>>2]|0)+120>>2]=k;h[(c[l>>2]|0)+32>>3]=+h[(c[S>>2]|0)+32>>3];h[(c[l>>2]|0)+40>>3]=+h[(c[S>>2]|0)+40>>3];h[(c[l>>2]|0)+88>>3]=+h[(c[S>>2]|0)+88>>3];h[(c[l>>2]|0)+96>>3]=+h[(c[S>>2]|0)+96>>3];h[(c[l>>2]|0)+80>>3]=+h[(c[S>>2]|0)+80>>3];c[(c[l>>2]|0)+8>>2]=c[(c[S>>2]|0)+8>>2];c[(c[l>>2]|0)+12>>2]=c[(c[S>>2]|0)+12>>2];A=c[S>>2]|0;if((a[A+119|0]|0)!=0){h[c[(c[l>>2]|0)+132>>2]>>3]=+h[c[A+132>>2]>>3];h[(c[(c[l>>2]|0)+132>>2]|0)+8>>3]=+h[(c[(c[S>>2]|0)+132>>2]|0)+8>>3];a[(c[l>>2]|0)+119|0]=a[(c[S>>2]|0)+119|0]|0}c[(c[(c[l>>2]|0)+112>>2]|0)+8>>2]=C;T=k+1|0}else{T=k}}while(0);B=vx(f,C)|0;if((B|0)==0){R=T;break a}else{k=T;C=B}}k=$w(C|0)|0;D=$w(f|0)|0;H=$w(c[(c[S>>2]|0)+212>>2]|0)|0;Fv(1,136344,(t=i,i=i+24|0,c[t>>2]=k,c[t+8>>2]=D,c[t+16>>2]=H,t)|0)|0;i=t;rc(177912,1)}}while(0);S=ux(f)|0;if((S|0)!=0){T=S;do{S=c[(c[T+8>>2]|0)+164>>2]|0;E=S;y=mw(f,T)|0;if((y|0)!=0){H=S+8|0;D=y;do{y=c[(c[(c[((c[D>>2]&3|0)==2?D:D-32|0)+28>>2]|0)+8>>2]|0)+164>>2]|0;k=y;if((y|0)!=(S|0)){if(y>>>0>S>>>0){U=uw(m,E,k,0,1)|0}else{U=uw(m,k,E,0,1)|0}Wx(U|0,85888,176,1)|0;k=D+8|0;I=U+8|0;h[(c[I>>2]|0)+136>>3]=+h[(c[k>>2]|0)+136>>3];h[(c[I>>2]|0)+128>>3]=+h[(c[k>>2]|0)+128>>3];k=y+8|0;y=(c[(c[k>>2]|0)+112>>2]|0)+4|0;c[y>>2]=(c[y>>2]|0)+1;y=(c[(c[H>>2]|0)+112>>2]|0)+4|0;c[y>>2]=(c[y>>2]|0)+1;y=c[I>>2]|0;B=c[y+172>>2]|0;do{if((B|0)==0){l=c[(c[k>>2]|0)+112>>2]|0;c[l>>2]=(c[l>>2]|0)+1;l=c[(c[H>>2]|0)+112>>2]|0;c[l>>2]=(c[l>>2]|0)+1;l=c[I>>2]|0;A=c[l+172>>2]|0;z=b[l+168>>1]|0;if((A|0)!=0){V=A;W=z;X=63;break}Y=kk((z<<16>>16<<2)+4|0)|0;Z=z}else{V=B;W=b[y+168>>1]|0;X=63}}while(0);if((X|0)==63){X=0;Y=mk(V,(W<<16>>16<<2)+4|0)|0;Z=W}c[Y+(Z<<16>>16<<2)>>2]=D;c[(c[I>>2]|0)+172>>2]=Y;y=(c[I>>2]|0)+168|0;b[y>>1]=(b[y>>1]|0)+1}D=ow(f,D)|0;}while((D|0)!=0)}T=vx(f,T)|0;}while((T|0)!=0)}T=c[(c[s>>2]|0)+132>>2]|0;Y=c[T>>2]|0;if((Y|0)!=0){Z=jk((c[T+4>>2]<<4)+16|0)|0;c[c[(c[u>>2]|0)+132>>2]>>2]=Z;T=Y|0;Y=c[T>>2]|0;if((Y|0)==0){_=0}else{W=f|0;V=R;R=Z;Z=0;U=T;T=Y;while(1){Y=c[(c[(c[U+4>>2]|0)+8>>2]|0)+164>>2]|0;D=Y;if((Y|0)==0){aa=Z;ba=R;ca=V}else{H=T;E=c[H>>2]&3;S=c[((E|0)==2?T:T-32|0)+28>>2]|0;C=c[((E|0)==3?T:T+32|0)+28>>2]|0;E=xF($w(W)|0)|0;y=S|0;B=xF($w(y)|0)|0;k=C|0;z=(E+8+B+(xF($w(k)|0)|0)|0)>999;B=$w(W)|0;if(z){z=$w(k)|0;k=$w(y)|0;y=(c[H>>2]|0)>>>4;nb(175272,133608,(t=i,i=i+32|0,c[t>>2]=B,c[t+8>>2]=z,c[t+16>>2]=k,c[t+24>>2]=y,t)|0)|0;i=t}else{y=c[(c[C+8>>2]|0)+120>>2]|0;C=c[(c[S+8>>2]|0)+120>>2]|0;S=(c[H>>2]|0)>>>4;nb(175272,131488,(t=i,i=i+32|0,c[t>>2]=B,c[t+8>>2]=y,c[t+16>>2]=C,c[t+24>>2]=S,t)|0)|0;i=t}S=Ax(m,175272,1)|0;Wx(S|0,81280,304,1)|0;C=jk(32)|0;y=S+8|0;c[(c[y>>2]|0)+112>>2]=C;C=kk(e[(c[u>>2]|0)+168>>1]<<3)|0;c[(c[y>>2]|0)+132>>2]=C;c[(c[y>>2]|0)+120>>2]=V;if(S>>>0>D>>>0){da=uw(m,D,S,0,1)|0}else{da=uw(m,S,D,0,1)|0}Wx(da|0,85888,176,1)|0;D=da+8|0;h[(c[D>>2]|0)+136>>3]=+h[(c[(c[U>>2]|0)+8>>2]|0)+136>>3];h[(c[D>>2]|0)+128>>3]=+h[(c[(c[U>>2]|0)+8>>2]|0)+128>>3];C=c[U>>2]|0;B=c[D>>2]|0;H=b[B+168>>1]|0;k=c[B+172>>2]|0;if((k|0)==0){ea=kk((H<<16>>16<<2)+4|0)|0}else{ea=mk(k,(H<<16>>16<<2)+4|0)|0}c[ea+(H<<16>>16<<2)>>2]=C;c[(c[D>>2]|0)+172>>2]=ea;C=(c[D>>2]|0)+168|0;b[C>>1]=(b[C>>1]|0)+1;C=(c[(c[y>>2]|0)+112>>2]|0)+4|0;c[C>>2]=(c[C>>2]|0)+1;C=Y+8|0;Y=(c[(c[C>>2]|0)+112>>2]|0)+4|0;c[Y>>2]=(c[Y>>2]|0)+1;Y=c[(c[y>>2]|0)+112>>2]|0;c[Y>>2]=(c[Y>>2]|0)+1;Y=c[(c[C>>2]|0)+112>>2]|0;c[Y>>2]=(c[Y>>2]|0)+1;c[R+4>>2]=S;h[R+8>>3]=+h[U+8>>3];c[R>>2]=da;aa=Z+1|0;ba=R+16|0;ca=V+1|0}S=U+16|0;Y=c[S>>2]|0;if((Y|0)==0){_=aa;break}else{V=ca;R=ba;Z=aa;U=S;T=Y}}}c[(c[(c[u>>2]|0)+132>>2]|0)+4>>2]=_}_=Ry(m,n,p)|0;T=c[_>>2]|0;c:do{if((T|0)!=0){U=g|0;aa=_;Z=T;d:while(1){aa=aa+4|0;lz(Z,q);ba=ux(Z)|0;if((ba|0)!=0){R=ba;do{ba=R+8|0;ca=c[ba>>2]|0;V=c[ca+212>>2]|0;do{if((V|0)==0){if((c[(c[ca+112>>2]|0)+8>>2]|0)!=0){break}Gx(Z,R|0)|0}else{da=V;ea=c[(c[ca+112>>2]|0)+4>>2]|0;if((ea|0)==0){fa=V+8|0}else{W=jk((ea<<4)+16|0)|0;Y=W;S=c[c[(c[ba>>2]|0)+112>>2]>>2]|0;C=jk((S*24|0)+24|0)|0;y=C;D=rw(Z,R)|0;if((D|0)==0){ga=0}else{H=D;D=0;while(1){k=c[H>>2]&3;B=c[((k|0)==2?H:H-32|0)+28>>2]|0;if((B|0)==(R|0)){ha=c[((k|0)==3?H:H+32|0)+28>>2]|0}else{ha=B}B=c[(c[ha+8>>2]|0)+132>>2]|0;k=c[(c[ba>>2]|0)+132>>2]|0;L=+h[B>>3]- +h[k>>3];N=+h[B+8>>3]- +h[k+8>>3];c[y+(D*24|0)>>2]=H;h[y+(D*24|0)+8>>3]=+$(+N,+L);h[y+(D*24|0)+16>>3]=L*L+N*N;k=D+1|0;B=sw(Z,H,R)|0;if((B|0)==0){ga=k;break}else{H=B;D=k}}}if((ga|0)!=(S|0)){X=95;break d}Jb(C|0,S|0,24,16);do{if((S|0)>1){D=S-1|0;if((D|0)>0){ia=0}else{break}while(1){H=y+(ia*24|0)+8|0;N=+h[H>>3];k=ia+1|0;do{if((k|0)<(S|0)){B=k;while(1){z=B+1|0;if(+h[y+(B*24|0)+8>>3]!=N){ja=B;break}if((z|0)<(S|0)){B=z}else{ja=z;break}}if((ja|0)==(k|0)){ka=k;break}if((ja|0)==(S|0)){la=3.141592653589793}else{la=+h[y+(ja*24|0)+8>>3]}L=(la-N)/+(ja-ia|0);K=L>.03490658503988659?.03490658503988659:L;if((ia|0)>=(ja|0)){ka=ia;break}h[H>>3]=N+0.0;if((k|0)<(ja|0)){ma=0.0;na=k}else{ka=ja;break}while(1){L=K+ma;B=y+(na*24|0)+8|0;h[B>>3]=+h[B>>3]+L;B=na+1|0;if((B|0)<(ja|0)){ma=L;na=B}else{ka=ja;break}}}else{ka=k}}while(0);if((ka|0)<(D|0)){ia=ka}else{break}}}}while(0);y=C;S=c[y>>2]|0;if((S|0)==0){oa=0}else{D=C+8|0;k=0;H=y;y=S;while(1){S=H+24|0;B=c[S>>2]|0;if((B|0)==0){pa=+h[D>>3]+6.283185307179586}else{pa=+h[H+32>>3]}z=y+8|0;E=c[z>>2]|0;A=b[E+168>>1]|0;l=A<<16>>16;x=c[y>>2]&3;w=c[((x|0)==2?y:y-32|0)+28>>2]|0;if((w|0)==(R|0)){qa=c[((x|0)==3?y:y+32|0)+28>>2]|0}else{qa=w}N=+h[H+8>>3];K=(pa-N)/+(A<<16>>16|0);L=K>.03490658503988659?.03490658503988659:K;if(qa>>>0>R>>>0){ra=1;sa=k;ta=L;ua=N}else{ra=-1;sa=k-1+l|0;ta=-0.0-L;ua=N+ +(l-1|0)*L}if(A<<16>>16>0){A=c[E+172>>2]|0;L=ua;E=sa;w=0;while(1){x=c[A>>2]|0;c[Y+(E<<4)>>2]=x;O=c[x>>2]&3;v=c[((O|0)==3?x:x+32|0)+28>>2]|0;if((c[(c[v+8>>2]|0)+164>>2]|0)==(R|0)){va=v}else{va=c[((O|0)==2?x:x-32|0)+28>>2]|0}c[Y+(E<<4)+4>>2]=va;h[Y+(E<<4)+8>>3]=L;x=w+1|0;if((x|0)<(b[(c[z>>2]|0)+168>>1]|0)){A=A+4|0;L=ta+L;E=E+ra|0;w=x}else{break}}wa=c[S>>2]|0}else{wa=B}w=l+k|0;if((wa|0)==0){oa=w;break}else{k=w;H=S;y=wa}}}if((oa|0)!=(ea|0)){X=125;break d}y=V+8|0;c[c[(c[y>>2]|0)+132>>2]>>2]=W;c[(c[(c[y>>2]|0)+132>>2]|0)+4>>2]=ea;eF(C);fa=y}fz(da,g);h[(c[ba>>2]|0)+32>>3]=+h[(c[(c[fa>>2]|0)+132>>2]|0)+24>>3];h[(c[ba>>2]|0)+40>>3]=+h[(c[(c[fa>>2]|0)+132>>2]|0)+32>>3];y=c[(c[fa>>2]|0)+132>>2]|0;L=+h[y+32>>3]*72.0;N=+h[y+24>>3]*72.0*.5;h[(c[ba>>2]|0)+88>>3]=N;h[(c[ba>>2]|0)+96>>3]=N;h[(c[ba>>2]|0)+80>>3]=L}}while(0);R=vx(Z,R)|0;}while((R|0)!=0)}if((Lw(Z)|0)>1){if((c[U>>2]|0)==(f|0)){ir(Z)|0}qz(Z,q)}Z=c[aa>>2]|0;if((Z|0)==0){break c}}if((X|0)==95){cc(159976,164056,643,170568)}else if((X|0)==125){cc(167512,164056,767,170704)}}}while(0);X=c[n>>2]|0;do{if((X|0)>1){if((c[p>>2]|0)==0){xa=0;ya=X}else{q=jk(X)|0;a[q]=1;xa=q;ya=c[n>>2]|0}c[g+40>>2]=xa;q=mv(ya,_,0,g+20|0)|0;if((xa|0)==0){za=q;break}eF(xa);za=q}else{if((X|0)!=1){za=0;break}$m(c[_>>2]|0);za=0}}while(0);X=c[n>>2]|0;n=(c[g>>2]|0)!=(f|0);xa=(X|0)!=0;do{if(xa){ya=c[(c[_>>2]|0)+8>>2]|0;ta=+h[ya+16>>3];if(ta<0.0){Aa=ta+-.5}else{Aa=ta+.5}p=~~Aa;ta=+h[ya+24>>3];if(ta<0.0){Ba=ta+-.5}else{Ba=ta+.5}q=~~Ba;ta=+h[ya+32>>3];if(ta<0.0){Ca=ta+-.5}else{Ca=ta+.5}fa=~~Ca;ta=+h[ya+40>>3];if(ta<0.0){Da=ta+-.5}else{Da=ta+.5}ya=~~Da;if((X|0)<=1){Ea=0;Fa=ya;Ga=fa;Ha=q;Ia=p;break}oa=c[za>>2]|0;wa=c[za+4>>2]|0;ra=oa+p|0;p=wa+q|0;q=oa+fa|0;fa=wa+ya|0;ya=_+4|0;wa=c[ya>>2]|0;if((wa|0)==0){Ea=0;Fa=fa;Ga=q;Ha=p;Ia=ra;break}else{Ja=ra;Ka=p;La=q;Ma=fa;Na=za;Oa=ya;Pa=wa}while(1){wa=Na+8|0;ya=c[Pa+8>>2]|0;ta=+h[ya+16>>3];if(ta<0.0){Qa=ta+-.5}else{Qa=ta+.5}ta=+h[ya+24>>3];if(ta<0.0){Ra=ta+-.5}else{Ra=ta+.5}ta=+h[ya+32>>3];if(ta<0.0){Sa=ta+-.5}else{Sa=ta+.5}ta=+h[ya+40>>3];if(ta<0.0){Ta=ta+-.5}else{Ta=ta+.5}ya=c[wa>>2]|0;fa=c[Na+12>>2]|0;q=ya+~~Qa|0;p=fa+~~Ra|0;ra=ya+~~Sa|0;ya=fa+~~Ta|0;fa=(Ja|0)<(q|0)?Ja:q;q=(Ka|0)<(p|0)?Ka:p;p=(La|0)>(ra|0)?La:ra;ra=(Ma|0)>(ya|0)?Ma:ya;ya=Oa+4|0;oa=c[ya>>2]|0;if((oa|0)==0){Ea=0;Fa=ra;Ga=p;Ha=q;Ia=fa;break}else{Ja=fa;Ka=q;La=p;Ma=ra;Na=wa;Oa=ya;Pa=oa}}}else{oa=c[g+12>>2]|0;ya=f|0;wa=Em(ya,c[g+8>>2]|0,54,3)|0;Ea=1;Fa=Em(ya,oa,36,3)|0;Ga=wa;Ha=0;Ia=0}}while(0);g=c[s>>2]|0;Pa=c[g+12>>2]|0;do{if((Pa|0)==0){Ua=Ea;Va=Ga;Wa=Ia}else{Ta=+h[Pa+24>>3];if(Ta<0.0){Xa=Ta+-.5}else{Xa=Ta+.5}Oa=~~Xa+(Ia-Ga)|0;if((Oa|0)<=0){Ua=0;Va=Ga;Wa=Ia;break}Na=(Oa|0)/2|0;Ua=0;Va=Na+Ga|0;Wa=Ia-Na|0}}while(0);if(n&(Ua|0)==0){Ua=Em(r,c[53720]|0,8,0)|0;Za=Ua;_a=c[s>>2]|0}else{Za=0;_a=g}g=Za-Wa|0;Wa=~~(+h[_a+56>>3]+ +(Za-Ha|0));Ha=Za+Va+g|0;Va=~~(+(Fa|0)+(+h[_a+88>>3]+ +(Wa+Za|0)));do{if(xa){Za=c[_>>2]|0;if((Za|0)==0){break}else{$a=za;ab=_;bb=Za}while(1){Za=ab+4|0;if(($a|0)==0){cb=g;db=Wa;eb=0}else{cb=(c[$a>>2]|0)+g|0;db=(c[$a+4>>2]|0)+Wa|0;eb=$a+8|0}Xa=+(cb|0)/72.0;Ta=+(db|0)/72.0;_a=ux(bb)|0;if((_a|0)!=0){Fa=_a;do{_a=Fa+8|0;Ua=c[(c[_a>>2]|0)+132>>2]|0;h[Ua>>3]=Xa+ +h[Ua>>3];Ua=(c[(c[_a>>2]|0)+132>>2]|0)+8|0;h[Ua>>3]=Ta+ +h[Ua>>3];Fa=vx(bb,Fa)|0;}while((Fa|0)!=0)}Fa=c[Za>>2]|0;if((Fa|0)==0){break}else{$a=eb;ab=Za;bb=Fa}}}}while(0);bb=c[(c[u>>2]|0)+132>>2]|0;vF(bb+8|0,0,16)|0;h[bb+24>>3]=+(Ha|0)/72.0;h[bb+32>>3]=+(Va|0)/72.0;eF(za);za=ux(m)|0;if((za|0)!=0){Va=za;do{za=Va+8|0;bb=c[za>>2]|0;Ha=c[bb+212>>2]|0;do{if((Ha|0)==0){ab=c[(c[bb+112>>2]|0)+8>>2]|0;if((ab|0)==0){break}eb=ab+8|0;h[c[(c[eb>>2]|0)+132>>2]>>3]=+h[c[bb+132>>2]>>3];h[(c[(c[eb>>2]|0)+132>>2]|0)+8>>3]=+h[(c[(c[za>>2]|0)+132>>2]|0)+8>>3]}else{eb=Ha+8|0;h[(c[(c[eb>>2]|0)+132>>2]|0)+8>>3]=+h[c[bb+132>>2]>>3]- +h[bb+32>>3]*.5;ab=c[za>>2]|0;h[(c[(c[eb>>2]|0)+132>>2]|0)+16>>3]=+h[(c[ab+132>>2]|0)+8>>3]- +h[ab+40>>3]*.5;ab=c[(c[eb>>2]|0)+132>>2]|0;h[ab+24>>3]=+h[ab+8>>3]+ +h[(c[za>>2]|0)+32>>3];ab=c[(c[eb>>2]|0)+132>>2]|0;h[ab+32>>3]=+h[ab+16>>3]+ +h[(c[za>>2]|0)+40>>3]}}while(0);Va=vx(m,Va)|0;}while((Va|0)!=0)}Va=(c[(c[s>>2]|0)+132>>2]|0)+8|0;s=(c[(c[u>>2]|0)+132>>2]|0)+8|0;c[Va>>2]=c[s>>2];c[Va+4>>2]=c[s+4>>2];c[Va+8>>2]=c[s+8>>2];c[Va+12>>2]=c[s+12>>2];c[Va+16>>2]=c[s+16>>2];c[Va+20>>2]=c[s+20>>2];c[Va+24>>2]=c[s+24>>2];c[Va+28>>2]=c[s+28>>2];s=c[_>>2]|0;if((s|0)!=0){Va=_;za=s;do{Va=Va+4|0;eF(c[(c[za+8>>2]|0)+132>>2]|0);Xx(za|0,92056)|0;za=c[Va>>2]|0;}while((za|0)!=0)}za=c[(c[u>>2]|0)+132>>2]|0;Va=c[za>>2]|0;if((Va|0)==0){fb=za}else{eF(Va);fb=c[(c[u>>2]|0)+132>>2]|0}eF(fb);Xx(r,92056)|0;r=ux(m)|0;if((r|0)!=0){fb=r;while(1){r=vx(m,fb)|0;u=mw(m,fb)|0;if((u|0)!=0){Va=u;do{eF(c[(c[Va+8>>2]|0)+172>>2]|0);Xx(Va|0,85888)|0;Va=ow(m,Va)|0;}while((Va|0)!=0)}Va=fb+8|0;eF(c[(c[Va>>2]|0)+112>>2]|0);eF(c[(c[Va>>2]|0)+132>>2]|0);Xx(fb|0,81280)|0;if((r|0)==0){break}else{fb=r}}}Kw(m)|0;eF(_);if((a[213992]|0)==0){i=j;return}_=c[o>>2]|0;m=$w(f|0)|0;gc(_|0,97616,(t=i,i=i+8|0,c[t>>2]=m,t)|0)|0;i=t;i=j;return}function gz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0.0,i=0.0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0;d=a+8|0;e=c[d>>2]|0;f=c[e+132>>2]|0;g=+h[f+8>>3];i=+h[f+16>>3];f=(a|0)!=(b|0);if(f){j=ux(a)|0;if((j|0)!=0){k=j;do{j=k+8|0;l=c[j>>2]|0;if((c[l+212>>2]|0)==(a|0)){m=c[l+132>>2]|0;h[m>>3]=g+ +h[m>>3];m=(c[(c[j>>2]|0)+132>>2]|0)+8|0;h[m>>3]=i+ +h[m>>3]}k=vx(a,k)|0;}while((k|0)!=0)}n=c[d>>2]|0}else{n=e}if((c[n+172>>2]|0)<1){return}if(f){f=1;e=n;while(1){k=c[(c[e+176>>2]|0)+(f<<2)>>2]|0;m=c[(c[k+8>>2]|0)+132>>2]|0;j=m+8|0;l=m+16|0;o=m+24|0;p=m+32|0;q=i+ +h[l>>3];r=g+ +h[o>>3];s=i+ +h[p>>3];h[j>>3]=g+ +h[j>>3];h[l>>3]=q;h[o>>3]=r;h[p>>3]=s;gz(k,b);k=c[d>>2]|0;if((f|0)<(c[k+172>>2]|0)){f=f+1|0;e=k}else{break}}return}else{e=1;f=n;while(1){gz(c[(c[f+176>>2]|0)+(e<<2)>>2]|0,a);n=c[d>>2]|0;if((e|0)<(c[n+172>>2]|0)){e=e+1|0;f=n}else{break}}return}}function hz(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0,i=0,j=0;b=a+8|0;a=c[b>>2]|0;d=c[a+132>>2]|0;e=+h[d+16>>3]*72.0;f=+h[d+24>>3]*72.0;g=+h[d+32>>3]*72.0;h[a+16>>3]=+h[d+8>>3]*72.0;h[a+24>>3]=e;h[a+32>>3]=f;h[a+40>>3]=g;a=c[b>>2]|0;if((c[a+172>>2]|0)<1){return}else{i=1;j=a}while(1){hz(c[(c[j+176>>2]|0)+(i<<2)>>2]|0);a=c[b>>2]|0;if((i|0)<(c[a+172>>2]|0)){i=i+1|0;j=a}else{break}}return}function iz(a){a=a|0;var d=0,e=0,f=0,g=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=i;e=1;f=0;g=i;i=i+168|0;c[g>>2]=0;while(1)switch(e|0){case 1:j=+h[21580];k=+sa(2,a|0);if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;h[21580]=k;la(16,a|0,2);if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;l=ma(12,56)|0;if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;m=a+8|0;c[(c[m>>2]|0)+132>>2]=l;l=a|0;n=Aa(56,a|0,0,116440,0)|0;if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;o=Aa(52,l|0,n|0,2,2)|0;if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;b[(c[m>>2]|0)+168>>1]=o;o=(c[m>>2]|0)+168|0;n=b[o>>1]|0;l=(n&65535)>>>0<10>>>0?n:10;b[o>>1]=l;c[53568]=l&65535;Ba(100,a|0,0,a|0);if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;ka(90,a|0);if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;ka(92,a|0);if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;p=BF(177912,e,g)|0;e=14;break;case 14:if((p|0)==0){e=2;break}else{e=13;break};case 2:ka(132,a|0);if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;ka(86,a|0);if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;q=b[(c[m>>2]|0)+128>>1]|0;if((q&14)==0){e=12;break}else{e=3;break};case 3:r=q&14;if((r|0)==2){e=10;break}else if((r|0)==12){e=4;break}else{s=q;e=6;break};case 4:l=pa(58,a|0,12,10)|0;if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;if((l|0)==0){e=9;break}else{e=5;break};case 5:c[53566]=2;s=b[(c[m>>2]|0)+128>>1]|0;e=6;break;case 6:if((s&1)==0){e=8;break}else{e=7;break};case 7:pa(16,0,109112,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0)|0;if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;i=l;e=9;break;case 8:wa(50,a|0,r|0)|0;if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;e=9;break;case 9:c[53566]=0;e=10;break;case 10:if((c[53522]|0)<1){e=11;break}else{e=12;break};case 11:wa(50,a|0,2)|0;if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;e=12;break;case 12:ka(44,a|0);if((u|0)!=0&(v|0)!=0){f=CF(c[u>>2]|0,g)|0;if((f|0)>0){e=-1;break}else return}u=v=0;h[21580]=j;e=13;break;case 13:i=d;return;case-1:if((f|0)==1){p=v;e=14}u=v=0;break}}function jz(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0,f=0.0,g=0.0;c=+h[a+8>>3];d=+h[b+8>>3];do{if(c>d){e=1}else{if(c<d){e=-1;break}f=+h[a+16>>3];g=+h[b+16>>3];if(f>g){e=1;break}e=(f<g)<<31>>31}}while(0);return e|0}function kz(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,g=0.0;b=i;d=c[6536]|0;c[44182]=c[d>>2];c[44183]=c[d+4>>2];c[44185]=c[d+8>>2];c[44187]=c[d+12>>2];h[22099]=0.0;h[22094]=+h[d+16>>3];h[22095]=+h[d+24>>3];d=a|0;c[44186]=Em(d,Wv(a,0,121720,0)|0,600,0)|0;e=+Fm(d,Wv(a,0,158192,0)|0,.3,0.0);h[22096]=e;h[(c[6536]|0)+32>>3]=e;e=+h[(c[6536]|0)+40>>3];if(e==-1.0){f=+Fm(d,Wv(a,0,127856,0)|0,-1.0,0.0)}else{f=e}h[22097]=f;c[44184]=1;d=vt(a,2,176736)|0;c[44196]=d;if((d|0)==0){Fv(0,115224,(d=i,i=i+1|0,i=i+7&-8,c[d>>2]=0,d)|0)|0;i=d;c[44184]=2}c[44212]=(da(c[44186]|0,c[44187]|0)|0)/100|0;f=+h[22096];h[22101]=f*f;if((c[44182]|0)==0){i=b;return}e=+h[22099];if(e>0.0){g=e}else{e=f*3.0;h[22099]=e;g=e}h[22100]=g*g;i=b;return}function lz(b,d){b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0,j=0.0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,S=0.0,U=0.0,X=0.0,Y=0,Z=0,_=0,aa=0,ba=0,ca=0.0,da=0.0,ea=0,fa=0,ga=0,ha=0,ia=0;e=b+8|0;f=c[c[(c[e>>2]|0)+132>>2]>>2]|0;g=+h[22097];if(g==-1.0){i=Lw(b)|0;j=+h[22095]*+h[22096]*+T(+(i|0))/5.0;h[22097]=j;k=1;l=j}else{k=0;l=g}i=c[44186]|0;h[d+8>>3]=l*+(i-(c[44212]|0)|0)/+(i|0);h[d+16>>3]=+h[22096];h[d+24>>3]=+h[22094];i=d|0;c[i>>2]=(c[44186]|0)-(c[44212]|0);m=c[44185]|0;n=c[44212]|0;do{if((m|0)>-1){if((m|0)<=(n|0)){c[44213]=m;c[d+32>>2]=0;break}if((m|0)>(c[44186]|0)){break}c[44213]=n;c[d+32>>2]=m-n}else{c[44213]=n;c[d+32>>2]=c[i>>2]}}while(0);i=Lw(b)|0;d=i-(c[(c[(c[e>>2]|0)+132>>2]|0)+4>>2]|0)|0;e=ux(b)|0;if((e|0)==0){o=0;p=0;q=0;r=0;s=0}else{i=0;n=0;m=0;t=0;u=0;v=e;while(1){e=c[v+8>>2]|0;if((a[e+119|0]|0)==0){w=u;x=t;y=m;z=n;A=i}else{B=c[e+132>>2]|0;l=+h[B>>3];if((u|0)==0){e=~~l;C=~~+h[B+8>>3];D=C;E=e;F=C;G=e}else{g=+(i|0);j=+h[B+8>>3];H=+(n|0);I=+(m|0);J=+(t|0);D=~~(j>J?j:J);E=~~(l>I?l:I);F=~~(j<H?j:H);G=~~(l<g?l:g)}w=u+1|0;x=D;y=E;z=F;A=G}B=vx(b,v)|0;if((B|0)==0){o=A;p=z;q=y;r=x;s=w;break}else{i=A;n=z;m=y;t=x;u=w;v=B}}}g=+h[22096]*(+T(+(d|0))+1.0)*.5*1.2;h[22103]=g;h[22102]=g;do{if((s|0)==1){K=+(o|0);L=+(p|0);M=g;N=g}else{if((s|0)<=1){K=0.0;L=0.0;M=g;N=g;break}l=+(o+q|0)*.5;H=+(p+r|0)*.5;j=+(q-o|0)*1.2;I=+(r-p|0)*1.2;J=g*g*4.0;O=I*j/J;do{if(O<1.0){if(O>0.0){P=+T(O)*2.0;Q=j/P;h[22102]=Q;S=I/P;h[22103]=S;U=S;X=Q;break}if(j>0.0){Q=j*.5;h[22102]=Q;S=J/j*.5;h[22103]=S;U=S;X=Q;break}if(I<=0.0){U=g;X=g;break}Q=J/I*.5;h[22102]=Q;S=I*.5;h[22103]=S;U=S;X=Q}else{Q=j*.5;h[22102]=Q;S=I*.5;h[22103]=S;U=S;X=Q}}while(0);I=+$(+U,+X);j=X/+V(I);h[22102]=j;J=U/+W(I);h[22103]=J;K=l;L=H;M=j;N=J}}while(0);h[22104]=M*M;h[22105]=N*N;if((c[44196]|0)==2){Y=c[44184]|0}else{p=fb()|0;Y=(zc(0)|0)^p}dc(Y|0);a:do{if((f|0)==0){Y=ux(b)|0;p=(Y|0)==0;if((s|0)==0){if(p){break}else{Z=Y}while(1){N=+h[22102];M=N*(+wn()*2.0+-1.0);r=Z+8|0;h[c[(c[r>>2]|0)+132>>2]>>3]=M;M=+h[22103];N=M*(+wn()*2.0+-1.0);h[(c[(c[r>>2]|0)+132>>2]|0)+8>>3]=N;Z=vx(b,Z)|0;if((Z|0)==0){break a}}}if(p){break}else{_=Y}do{r=_+8|0;o=c[r>>2]|0;if((a[o+119|0]|0)==0){H=+h[22102];l=H*(+wn()*2.0+-1.0);h[c[(c[r>>2]|0)+132>>2]>>3]=l;l=+h[22103];H=l*(+wn()*2.0+-1.0);h[(c[(c[r>>2]|0)+132>>2]|0)+8>>3]=H}else{q=c[o+132>>2]|0;h[q>>3]=+h[q>>3]-K;q=(c[(c[r>>2]|0)+132>>2]|0)+8|0;h[q>>3]=+h[q>>3]-L}_=vx(b,_)|0;}while((_|0)!=0)}else{if((c[f>>2]|0)!=0){Y=f;do{p=Y+8|0;H=K+ +h[22102]*+V(+h[p>>3]);q=(c[Y+4>>2]|0)+8|0;h[c[(c[q>>2]|0)+132>>2]>>3]=H;H=L+ +h[22103]*+W(+h[p>>3]);h[(c[(c[q>>2]|0)+132>>2]|0)+8>>3]=H;a[(c[q>>2]|0)+119|0]=1;Y=Y+16|0;}while((c[Y>>2]|0)!=0)}Y=ux(b)|0;if((Y|0)==0){break}H=K*.1;l=L*.1;q=Y;do{Y=q+8|0;p=c[Y>>2]|0;if((c[(c[p+112>>2]|0)+8>>2]|0)==0){if((c[p+212>>2]|0)!=0){aa=38}}else{aa=38}do{if((aa|0)==38){aa=0;if((a[p+119|0]|0)!=0){r=c[p+132>>2]|0;h[r>>3]=+h[r>>3]-K;r=(c[(c[Y>>2]|0)+132>>2]|0)+8|0;h[r>>3]=+h[r>>3]-L;break}r=rw(b,q)|0;do{if((r|0)==0){aa=51}else{N=0.0;M=0.0;o=0;d=r;while(1){v=c[d>>2]&3;w=c[((v|0)==2?d:d-32|0)+28>>2]|0;u=c[((v|0)==3?d:d+32|0)+28>>2]|0;do{if((w|0)==(u|0)){ba=o;ca=M;da=N}else{v=c[((w|0)==(q|0)?u:w)+8>>2]|0;if((a[v+119|0]|0)==0){ba=o;ca=M;da=N;break}if((o|0)==0){x=c[v+132>>2]|0;ba=1;ca=+h[x>>3];da=+h[x+8>>3];break}else{U=+(o|0);x=c[v+132>>2]|0;v=o+1|0;X=+(v|0);ba=v;ca=(M*U+ +h[x>>3])/X;da=(U*N+ +h[x+8>>3])/X;break}}}while(0);w=sw(b,d,q)|0;if((w|0)==0){break}else{N=da;M=ca;o=ba;d=w}}if((ba|0)>1){h[c[(c[Y>>2]|0)+132>>2]>>3]=ca;h[(c[(c[Y>>2]|0)+132>>2]|0)+8>>3]=da;break}if((ba|0)!=1){aa=51;break}h[c[(c[Y>>2]|0)+132>>2]>>3]=H+ca*.98;h[(c[(c[Y>>2]|0)+132>>2]|0)+8>>3]=l+da*.9}}while(0);if((aa|0)==51){aa=0;M=+wn()*6.283185307179586;N=+wn()*.9;X=N*+h[22102]*+V(M);h[c[(c[Y>>2]|0)+132>>2]>>3]=X;X=N*+h[22103]*+W(M);h[(c[(c[Y>>2]|0)+132>>2]|0)+8>>3]=X}a[(c[Y>>2]|0)+119|0]=1}}while(0);q=vx(b,q)|0;}while((q|0)!=0)}}while(0);do{if((c[44182]|0)==0){aa=c[44213]|0;if((aa|0)>0){ea=0;fa=aa}else{break}while(1){aa=c[44186]|0;da=+h[22097]*+(aa-ea|0)/+(aa|0);if(da>0.0){aa=ux(b)|0;if((aa|0)!=0){ba=aa;do{aa=ba+8|0;h[(c[(c[aa>>2]|0)+112>>2]|0)+24>>3]=0.0;h[(c[(c[aa>>2]|0)+112>>2]|0)+16>>3]=0.0;ba=vx(b,ba)|0;}while((ba|0)!=0)}ba=ux(b)|0;if((ba|0)!=0){aa=ba;do{ba=vx(b,aa)|0;if((ba|0)!=0){_=aa+8|0;Z=ba;do{ba=c[(c[Z+8>>2]|0)+132>>2]|0;s=c[(c[_>>2]|0)+132>>2]|0;ca=+h[ba>>3]- +h[s>>3];l=+h[ba+8>>3]- +h[s+8>>3];oz(aa,Z,ca,l,ca*ca+l*l);Z=vx(b,Z)|0;}while((Z|0)!=0)}Z=mw(b,aa)|0;if((Z|0)!=0){_=Z;do{Z=c[((c[_>>2]&3|0)==2?_:_-32|0)+28>>2]|0;if((aa|0)!=(Z|0)){mz(aa,Z,_)}_=ow(b,_)|0;}while((_|0)!=0)}aa=vx(b,aa)|0;}while((aa|0)!=0)}nz(b,da,f);ga=c[44213]|0}else{ga=fa}aa=ea+1|0;if((aa|0)<(ga|0)){ea=aa;fa=ga}else{break}}}else{aa=Wy(Lw(b)|0)|0;Xy(aa,Lw(b)|0);_=c[44213]|0;if((_|0)>0){Z=0;s=_;while(1){_=c[44186]|0;l=+h[22097]*+(_-Z|0)/+(_|0);if(l>0.0){Yy(aa);_=ux(b)|0;if((_|0)!=0){ba=_;do{_=ba+8|0;h[(c[(c[_>>2]|0)+112>>2]|0)+24>>3]=0.0;h[(c[(c[_>>2]|0)+112>>2]|0)+16>>3]=0.0;q=c[(c[_>>2]|0)+132>>2]|0;ca=+h[22099];_=~~+R(+h[q>>3]/ca);_y(aa,_,~~+R(+h[q+8>>3]/ca),ba);ba=vx(b,ba)|0;}while((ba|0)!=0)}ba=ux(b)|0;if((ba|0)!=0){q=ba;do{ba=mw(b,q)|0;if((ba|0)!=0){_=ba;do{ba=c[((c[_>>2]&3|0)==2?_:_-32|0)+28>>2]|0;if((q|0)!=(ba|0)){mz(q,ba,_)}_=ow(b,_)|0;}while((_|0)!=0)}q=vx(b,q)|0;}while((q|0)!=0)}$y(aa,8);nz(b,l,f);ha=c[44213]|0}else{ha=s}q=Z+1|0;if((q|0)<(ha|0)){Z=q;s=ha}else{break}}}Zy(aa)}}while(0);do{if(K!=0.0|L!=0.0){ha=ux(b)|0;if((ha|0)==0){break}else{ia=ha}do{ha=ia+8|0;f=c[(c[ha>>2]|0)+132>>2]|0;h[f>>3]=K+ +h[f>>3];f=(c[(c[ha>>2]|0)+132>>2]|0)+8|0;h[f>>3]=L+ +h[f>>3];ia=vx(b,ia)|0;}while((ia|0)!=0)}}while(0);if((k|0)==0){return}h[22097]=-1.0;return}function mz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;e=b+8|0;b=c[(c[e>>2]|0)+132>>2]|0;f=a+8|0;a=c[(c[f>>2]|0)+132>>2]|0;g=+h[b>>3]- +h[a>>3];i=+h[b+8>>3]- +h[a+8>>3];j=g*g+i*i;if(j==0.0){while(1){k=+(5-((yb()|0)%10|0)|0);l=+(5-((yb()|0)%10|0)|0);m=k*k+l*l;if(m!=0.0){n=l;o=k;p=m;break}}}else{n=i;o=g;p=j}j=+T(p);a=c[d+8>>2]|0;p=+h[a+128>>3];if((c[44183]|0)==0){q=j*p/+h[a+136>>3]}else{q=p*(j- +h[a+136>>3])/j}j=o*q;a=(c[(c[e>>2]|0)+112>>2]|0)+16|0;h[a>>3]=+h[a>>3]-j;o=n*q;a=(c[(c[e>>2]|0)+112>>2]|0)+24|0;h[a>>3]=+h[a>>3]-o;a=(c[(c[f>>2]|0)+112>>2]|0)+16|0;h[a>>3]=j+ +h[a>>3];a=(c[(c[f>>2]|0)+112>>2]|0)+24|0;h[a>>3]=o+ +h[a>>3];return}function nz(b,d,e){b=b|0;d=+d;e=e|0;var f=0.0,g=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0;f=d*d;g=ux(b)|0;if((g|0)==0){return}if((e|0)==0){e=g;do{i=e+8|0;j=c[i>>2]|0;if((a[j+119|0]&2)==0){k=c[j+112>>2]|0;l=+h[k+16>>3];m=+h[k+24>>3];n=l*l+m*m;if(n<f){k=c[j+132>>2]|0;o=l+ +h[k>>3];p=m+ +h[k+8>>3];q=k}else{r=d/+T(n);k=c[j+132>>2]|0;o=l*r+ +h[k>>3];p=m*r+ +h[k+8>>3];q=k}h[q>>3]=o;h[(c[(c[i>>2]|0)+132>>2]|0)+8>>3]=p}e=vx(b,e)|0;}while((e|0)!=0);return}else{s=g}do{g=s+8|0;e=c[g>>2]|0;a:do{if((a[e+119|0]&2)==0){q=c[e+112>>2]|0;p=+h[q+16>>3];o=+h[q+24>>3];r=p*p+o*o;if(r<f){i=c[e+132>>2]|0;t=p+ +h[i>>3];u=o+ +h[i+8>>3];v=i}else{m=d/+T(r);i=c[e+132>>2]|0;t=p*m+ +h[i>>3];u=o*m+ +h[i+8>>3];v=i}m=+T(t*t/+h[22104]+u*u/+h[22105]);do{if((c[q+8>>2]|0)==0){if((c[e+212>>2]|0)!=0){break}h[v>>3]=t/m;h[(c[(c[g>>2]|0)+132>>2]|0)+8>>3]=u/m;break a}}while(0);if(m<1.0){h[v>>3]=t;h[(c[(c[g>>2]|0)+132>>2]|0)+8>>3]=u;break}else{h[v>>3]=t*.95/m;h[(c[(c[g>>2]|0)+132>>2]|0)+8>>3]=u*.95/m;break}}}while(0);s=vx(b,s)|0;}while((s|0)!=0);return}function oz(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=+e;f=+f;var g=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0;if(f==0.0){while(1){g=+(5-((yb()|0)%10|0)|0);i=+(5-((yb()|0)%10|0)|0);j=g*g+i*i;if(j!=0.0){k=i;l=j;m=g;break}}}else{k=e;l=f;m=d}if((c[44183]|0)==0){n=+h[22101]/l}else{d=+T(l);n=+h[22101]/(l*d)}o=a+8|0;a=c[o>>2]|0;do{if((c[(c[a+112>>2]|0)+8>>2]|0)==0){if((c[a+212>>2]|0)!=0){p=n;break}q=c[b+8>>2]|0;if((c[(c[q+112>>2]|0)+8>>2]|0)!=0){p=n;break}if((c[q+212>>2]|0)!=0){p=n;break}p=n*10.0}else{p=n}}while(0);n=m*p;a=b+8|0;b=(c[(c[a>>2]|0)+112>>2]|0)+16|0;h[b>>3]=n+ +h[b>>3];m=k*p;b=(c[(c[a>>2]|0)+112>>2]|0)+24|0;h[b>>3]=m+ +h[b>>3];b=(c[(c[o>>2]|0)+112>>2]|0)+16|0;h[b>>3]=+h[b>>3]-n;b=(c[(c[o>>2]|0)+112>>2]|0)+24|0;h[b>>3]=+h[b>>3]-m;return}function pz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0,t=0.0;a=c[b+8>>2]|0;e=c[b>>2]|0;f=c[b+4>>2]|0;b=(a|0)==0;if(!b){g=a;do{i=g|0;j=a;do{if((g|0)!=(j|0)){k=c[i>>2]|0;l=c[j>>2]|0;m=c[(c[l+8>>2]|0)+132>>2]|0;n=c[(c[k+8>>2]|0)+132>>2]|0;o=+h[m>>3]- +h[n>>3];p=+h[m+8>>3]- +h[n+8>>3];oz(k,l,o,p,o*o+p*p)}j=c[j+4>>2]|0;}while((j|0)!=0);g=c[g+4>>2]|0;}while((g|0)!=0)}g=e-1|0;j=f-1|0;i=az(d,g,j)|0;if(!((i|0)==0|b)){l=i+8|0;i=a;do{k=c[i>>2]|0;n=c[l>>2]|0;if((n|0)!=0){m=k+8|0;q=n;do{n=c[q>>2]|0;r=c[(c[n+8>>2]|0)+132>>2]|0;s=c[(c[m>>2]|0)+132>>2]|0;p=+h[r>>3]- +h[s>>3];o=+h[r+8>>3]- +h[s+8>>3];t=p*p+o*o;if(t<+h[22100]){oz(k,n,p,o,t)}q=c[q+4>>2]|0;}while((q|0)!=0)}i=c[i+4>>2]|0;}while((i|0)!=0)}i=az(d,g,f)|0;if(!((i|0)==0|b)){l=i+8|0;i=a;do{q=c[i>>2]|0;k=c[l>>2]|0;if((k|0)!=0){m=q+8|0;n=k;do{k=c[n>>2]|0;s=c[(c[k+8>>2]|0)+132>>2]|0;r=c[(c[m>>2]|0)+132>>2]|0;t=+h[s>>3]- +h[r>>3];o=+h[s+8>>3]- +h[r+8>>3];p=t*t+o*o;if(p<+h[22100]){oz(q,k,t,o,p)}n=c[n+4>>2]|0;}while((n|0)!=0)}i=c[i+4>>2]|0;}while((i|0)!=0)}i=f+1|0;l=az(d,g,i)|0;if(!((l|0)==0|b)){g=l+8|0;l=a;do{n=c[l>>2]|0;q=c[g>>2]|0;if((q|0)!=0){m=n+8|0;k=q;do{q=c[k>>2]|0;r=c[(c[q+8>>2]|0)+132>>2]|0;s=c[(c[m>>2]|0)+132>>2]|0;p=+h[r>>3]- +h[s>>3];o=+h[r+8>>3]- +h[s+8>>3];t=p*p+o*o;if(t<+h[22100]){oz(n,q,p,o,t)}k=c[k+4>>2]|0;}while((k|0)!=0)}l=c[l+4>>2]|0;}while((l|0)!=0)}l=az(d,e,j)|0;if(!((l|0)==0|b)){g=l+8|0;l=a;do{k=c[l>>2]|0;n=c[g>>2]|0;if((n|0)!=0){m=k+8|0;q=n;do{n=c[q>>2]|0;s=c[(c[n+8>>2]|0)+132>>2]|0;r=c[(c[m>>2]|0)+132>>2]|0;t=+h[s>>3]- +h[r>>3];o=+h[s+8>>3]- +h[r+8>>3];p=t*t+o*o;if(p<+h[22100]){oz(k,n,t,o,p)}q=c[q+4>>2]|0;}while((q|0)!=0)}l=c[l+4>>2]|0;}while((l|0)!=0)}l=az(d,e,i)|0;if(!((l|0)==0|b)){g=l+8|0;l=a;do{q=c[l>>2]|0;k=c[g>>2]|0;if((k|0)!=0){m=q+8|0;n=k;do{k=c[n>>2]|0;r=c[(c[k+8>>2]|0)+132>>2]|0;s=c[(c[m>>2]|0)+132>>2]|0;p=+h[r>>3]- +h[s>>3];o=+h[r+8>>3]- +h[s+8>>3];t=p*p+o*o;if(t<+h[22100]){oz(q,k,p,o,t)}n=c[n+4>>2]|0;}while((n|0)!=0)}l=c[l+4>>2]|0;}while((l|0)!=0)}l=e+1|0;e=az(d,l,j)|0;if(!((e|0)==0|b)){j=e+8|0;e=a;do{g=c[e>>2]|0;n=c[j>>2]|0;if((n|0)!=0){q=g+8|0;m=n;do{n=c[m>>2]|0;k=c[(c[n+8>>2]|0)+132>>2]|0;s=c[(c[q>>2]|0)+132>>2]|0;t=+h[k>>3]- +h[s>>3];o=+h[k+8>>3]- +h[s+8>>3];p=t*t+o*o;if(p<+h[22100]){oz(g,n,t,o,p)}m=c[m+4>>2]|0;}while((m|0)!=0)}e=c[e+4>>2]|0;}while((e|0)!=0)}e=az(d,l,f)|0;if(!((e|0)==0|b)){f=e+8|0;e=a;do{j=c[e>>2]|0;m=c[f>>2]|0;if((m|0)!=0){g=j+8|0;q=m;do{m=c[q>>2]|0;n=c[(c[m+8>>2]|0)+132>>2]|0;s=c[(c[g>>2]|0)+132>>2]|0;p=+h[n>>3]- +h[s>>3];o=+h[n+8>>3]- +h[s+8>>3];t=p*p+o*o;if(t<+h[22100]){oz(j,m,p,o,t)}q=c[q+4>>2]|0;}while((q|0)!=0)}e=c[e+4>>2]|0;}while((e|0)!=0)}e=az(d,l,i)|0;if((e|0)==0|b){return 0}b=e+8|0;e=a;do{a=c[e>>2]|0;i=c[b>>2]|0;if((i|0)!=0){l=a+8|0;d=i;do{i=c[d>>2]|0;f=c[(c[i+8>>2]|0)+132>>2]|0;q=c[(c[l>>2]|0)+132>>2]|0;t=+h[f>>3]- +h[q>>3];o=+h[f+8>>3]- +h[q+8>>3];p=t*t+o*o;if(p<+h[22100]){oz(a,i,t,o,p)}d=c[d+4>>2]|0;}while((d|0)!=0)}e=c[e+4>>2]|0;}while((e|0)!=0);return 0}function qz(b,d){b=b|0;d=d|0;var e=0,f=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0,L=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,U=0,V=0,W=0,X=0,Y=0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,ea=0.0,fa=0,ga=0,ha=0.0,ia=0.0,ja=0.0,ka=0,la=0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0;e=i;i=i+16|0;f=e|0;j=ew(b|0,124936)|0;if((a[213992]|0)!=0){Ma(114144,8,1,c[o>>2]|0)|0}if((j|0)==0){k=5}else{if((a[j]|0)==0){k=5}else{l=j}}if((k|0)==5){l=107192}j=gb(l|0,58)|0;do{if((j|0)==0){m=l;n=0}else{if((j|0)!=(l|0)){if(((a[l]|0)-48|0)>>>0>=10>>>0){m=l;n=0;break}}p=Rb(l|0)|0;m=j+1|0;n=(p|0)<0?0:p}}while(0);if((a[213992]|0)!=0){gc(c[o>>2]|0,101408,(j=i,i=i+16|0,c[j>>2]=n,c[j+8>>2]=m,j)|0)|0;i=j}do{if((n|0)!=0){j=f;l=Lw(b)|0;p=Mw(b)|0;or(f,b);c[53494]=c[j>>2];c[53495]=c[j+4>>2];c[53496]=c[j+8>>2];if((a[213984]|0)!=0){g[53494]=+g[53494]/72.0;g[53495]=+g[53495]/72.0}j=ux(b)|0;if((j|0)==0){i=e;return}else{q=j;r=0}while(1){j=vx(b,q)|0;if((j|0)==0){s=r}else{t=q+8|0;u=j;j=r;while(1){v=(rz(c[t>>2]|0,c[u+8>>2]|0)|0)+j|0;w=vx(b,u)|0;if((w|0)==0){s=v;break}else{u=w;j=v}}}j=vx(b,q)|0;if((j|0)==0){break}else{q=j;r=s}}if((s|0)==0){i=e;return}j=c[d>>2]|0;x=+h[d+8>>3];y=+h[d+16>>3];z=+h[d+24>>3];u=c[d+32>>2]|0;a:do{if((n|0)>0){t=z>0.0;v=x==0.0;A=+(l|0);B=+(p|0);C=+(da(l-1|0,l)|0);w=(u|0)>0;D=+(j|0);E=y;F=s;G=0;b:while(1){h[39]=E;c[74]=j;h[38]=x;c[82]=u;if(t){h[40]=z}H=E*E;h[21637]=H;if(v){I=E*+T(A)/5.0;h[38]=I;J=I}else{J=x}I=H*+h[40];h[21428]=I;h[21429]=B*I*2.0/C;c:do{if(w){I=J*D/D;if(I>0.0){K=0;L=I}else{M=F;break}while(1){N=ux(b)|0;if((N|0)!=0){O=N;do{N=O+8|0;h[(c[(c[N>>2]|0)+112>>2]|0)+24>>3]=0.0;h[(c[(c[N>>2]|0)+112>>2]|0)+16>>3]=0.0;O=vx(b,O)|0;}while((O|0)!=0)}O=ux(b)|0;if((O|0)==0){k=62;break b}else{P=O;Q=0}while(1){O=vx(b,P)|0;if((O|0)==0){R=Q}else{N=P+8|0;S=O;O=Q;while(1){U=S+8|0;V=c[U>>2]|0;W=c[V+132>>2]|0;X=c[N>>2]|0;Y=c[X+132>>2]|0;I=+h[W>>3]- +h[Y>>3];H=+h[W+8>>3]- +h[Y+8>>3];Z=I*I+H*H;if(Z==0.0){do{_=+(5-((yb()|0)%10|0)|0);$=+(5-((yb()|0)%10|0)|0);aa=_*_+$*$;}while(aa==0.0);ba=$;ca=aa;ea=_;fa=c[N>>2]|0;ga=c[U>>2]|0}else{ba=H;ca=Z;ea=I;fa=X;ga=V}Y=rz(fa,ga)|0;ha=((Y|0)==0?+h[21429]:+h[21428])/ca;ia=ea*ha;W=(c[ga+112>>2]|0)+16|0;h[W>>3]=ia+ +h[W>>3];ja=ba*ha;W=(c[(c[U>>2]|0)+112>>2]|0)+24|0;h[W>>3]=ja+ +h[W>>3];W=(c[(c[N>>2]|0)+112>>2]|0)+16|0;h[W>>3]=+h[W>>3]-ia;W=(c[(c[N>>2]|0)+112>>2]|0)+24|0;h[W>>3]=+h[W>>3]-ja;W=Y+O|0;Y=vx(b,S)|0;if((Y|0)==0){R=W;break}else{S=Y;O=W}}}O=mw(b,P)|0;if((O|0)!=0){S=P+8|0;N=O;do{O=c[S>>2]|0;W=(c[((c[N>>2]&3|0)==2?N:N-32|0)+28>>2]|0)+8|0;Y=c[W>>2]|0;if((rz(O,Y)|0)==0){ka=c[Y+132>>2]|0;la=c[O+132>>2]|0;ja=+h[ka>>3]- +h[la>>3];ia=+h[ka+8>>3]- +h[la+8>>3];ha=+T(ja*ja+ia*ia);la=(a[213984]|0)==0;ma=+h[O+32>>3];if(la){na=+g[53494];oa=+g[53495];pa=+h[O+40>>3]*oa*.5;qa=ma*na*.5;ra=na;sa=oa}else{oa=+g[53494];na=+g[53495];pa=+h[O+40>>3]*.5+na;qa=ma*.5+oa;ra=oa;sa=na}na=+T(qa*qa+pa*pa);oa=+h[Y+32>>3];if(la){ta=sa*+h[Y+40>>3]*.5;ua=ra*oa*.5}else{ta=sa+ +h[Y+40>>3]*.5;ua=ra+oa*.5}oa=na+ +T(ua*ua+ta*ta);na=ha-oa;ma=na*na/(ha*(+h[39]+oa));oa=ja*ma;la=(c[Y+112>>2]|0)+16|0;h[la>>3]=+h[la>>3]-oa;ja=ia*ma;la=(c[(c[W>>2]|0)+112>>2]|0)+24|0;h[la>>3]=+h[la>>3]-ja;la=(c[(c[S>>2]|0)+112>>2]|0)+16|0;h[la>>3]=oa+ +h[la>>3];la=(c[(c[S>>2]|0)+112>>2]|0)+24|0;h[la>>3]=ja+ +h[la>>3]}N=ow(b,N)|0;}while((N|0)!=0)}N=vx(b,P)|0;if((N|0)==0){break}else{P=N;Q=R}}if((R|0)==0){k=62;break b}ja=L*L;N=ux(b)|0;if((N|0)!=0){S=N;do{N=S+8|0;la=c[N>>2]|0;do{if((a[la+119|0]|0)!=3){W=c[la+112>>2]|0;oa=+h[W+16>>3];ma=+h[W+24>>3];ia=oa*oa+ma*ma;if(ia<ja){W=c[la+132>>2]|0;h[W>>3]=oa+ +h[W>>3];W=(c[(c[N>>2]|0)+132>>2]|0)+8|0;h[W>>3]=ma+ +h[W>>3];break}else{ha=+T(ia);W=c[la+132>>2]|0;h[W>>3]=L*oa/ha+ +h[W>>3];W=(c[(c[N>>2]|0)+132>>2]|0)+8|0;h[W>>3]=L*ma/ha+ +h[W>>3];break}}}while(0);S=vx(b,S)|0;}while((S|0)!=0)}S=K+1|0;if((S|0)>=(c[82]|0)){M=R;break c}N=c[74]|0;ja=+h[38]*+(N-S|0)/+(N|0);if(ja>0.0){K=S;L=ja}else{M=R;break}}}else{M=F}}while(0);S=G+1|0;if((M|0)!=0&(S|0)<(n|0)){E=y+E;F=M;G=S}else{va=M;break a}}if((k|0)==62){i=e;return}}else{va=s}}while(0);if((va|0)!=0){break}i=e;return}}while(0);mr(b,m)|0;i=e;return}function rz(b,d){b=b|0;d=d|0;var e=0,f=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0;e=c[d+132>>2]|0;f=c[b+132>>2]|0;i=+h[e>>3]- +h[f>>3];if(i<0.0){j=-0.0-i}else{j=i}i=+h[e+8>>3]- +h[f+8>>3];if(i<0.0){k=-0.0-i}else{k=i}f=(a[213984]|0)==0;i=+h[b+32>>3];if(f){l=+g[53494];m=+h[d+32>>3]*l*.5;n=i*l*.5}else{l=+g[53494];m=+h[d+32>>3]*.5+l;n=i*.5+l}if(j>n+m){o=0;return o|0}m=+h[b+40>>3];if(f){n=+g[53495];p=+h[d+40>>3]*n*.5;q=m*n*.5}else{n=+g[53495];p=+h[d+40>>3]*.5+n;q=m*.5+n}o=k<=q+p|0;return o|0}function sz(a){a=a|0;var b=0;b=a;while(1){a=c[b>>2]|0;eF(b);if((a|0)==0){break}else{b=a}}return}function tz(){var a=0,b=0,d=0,e=0;a=jk(1992)|0;b=a;if((a|0)==0){return b|0}d=zz(b)|0;c[d+4>>2]=0;e=a+1972|0;c[e>>2]=(c[e>>2]|0)+1;c[a>>2]=d;return b|0}function uz(a){a=a|0;var b=0;b=a|0;vz(a,c[b>>2]|0);eF(c[b>>2]|0);eF(a);return 0}function vz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+1980|0;e=a+1912|0;f=a+1936|0;if((c[b+4>>2]|0)>0){g=0;do{h=b+8+(g*20|0)+16|0;i=c[h>>2]|0;do{if((i|0)!=0){vz(a,i);eF(c[h>>2]|0);Ez(b,g);c[d>>2]=(c[d>>2]|0)-1;if((c[e>>2]|0)==0){break}c[f>>2]=(c[f>>2]|0)+1}}while(0);g=g+1|0;}while((g|0)<64);return}else{g=0;do{do{if((c[b+8+(g*20|0)+16>>2]|0)!=0){Ez(b,g);c[d>>2]=(c[d>>2]|0)-1;if((c[e>>2]|0)==0){break}c[f>>2]=(c[f>>2]|0)+1}}while(0);g=g+1|0;}while((g|0)<64);return}}function wz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((b|0)==0){cc(116120,154984,194,171160);return 0}e=b+4|0;if((c[e>>2]|0)<=-1){cc(126392,154984,195,171160);return 0}if((d|0)==0){cc(114696,154984,196,171160);return 0}f=a+1952|0;c[f>>2]=(c[f>>2]|0)+1;if((c[e>>2]|0)>0){g=0;h=0}else{e=0;f=0;while(1){i=b+8+(f*20|0)|0;do{if((c[b+8+(f*20|0)+16>>2]|0)==0){j=e}else{if((Jz(d,i|0)|0)==0){j=e;break}k=jk(8)|0;c[k+4>>2]=i;c[k>>2]=e;j=k}}while(0);i=f+1|0;if((i|0)<64){e=j;f=i}else{l=j;break}}return l|0}while(1){j=b+8+(h*20|0)+16|0;do{if((c[j>>2]|0)==0){m=g}else{if((Jz(d,b+8+(h*20|0)|0)|0)==0){m=g;break}f=wz(a,c[j>>2]|0,d)|0;if((g|0)==0){m=f;break}else{n=g}do{o=n|0;n=c[o>>2]|0;}while((n|0)!=0);c[o>>2]=f;m=g}}while(0);j=h+1|0;if((j|0)<64){g=m;h=j}else{l=m;break}}return l|0}function xz(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=i;i=i+48|0;h=g|0;j=g+8|0;k=g+32|0;c[h>>2]=0;if((b|0)==0|(e|0)==0){cc(107824,154984,247,171192);return 0}if((f|0)<=-1){cc(102152,154984,248,171192);return 0}if((c[(c[e>>2]|0)+4>>2]|0)<(f|0)){cc(102152,154984,248,171192);return 0}else{l=0}while(1){m=l+1|0;if((c[b+(l<<2)>>2]|0)>(c[b+(l+2<<2)>>2]|0)){n=8;break}if((m|0)<2){l=m}else{break}}if((n|0)==8){cc(96376,154984,250,171192);return 0}l=a+1912|0;m=c[a+1908>>2]|0;do{if((c[l>>2]|0)==0){o=a+1908|0;if((m|0)==0){p=o;n=14}else{q=o}}else{if((m|0)==0){o=a+1916|0;c[o>>2]=(c[o>>2]|0)+1;p=a+1908|0;n=14;break}else{o=a+1924|0;c[o>>2]=(c[o>>2]|0)+1;q=a+1908|0;break}}}while(0);if((n|0)==14){n=a+1964|0;c[n>>2]=(c[n>>2]|0)+1;q=p}if((yz(a,b,d,c[e>>2]|0,h,f)|0)==0){r=0;i=g;return r|0}do{if((c[l>>2]|0)!=0){if((c[q>>2]|0)==0){f=a+1944|0;c[f>>2]=(c[f>>2]|0)+1;break}else{f=a+1948|0;c[f>>2]=(c[f>>2]|0)+1;break}}}while(0);q=zz(a)|0;l=a+1976|0;c[l>>2]=(c[l>>2]|0)+1;c[q+4>>2]=(c[(c[e>>2]|0)+4>>2]|0)+1;Bz(j|0,c[e>>2]|0);l=j;f=j+16|0;c[f>>2]=c[e>>2];Dz(a,j,q,0)|0;Bz(k,c[h>>2]|0);d=k;c[l>>2]=c[d>>2];c[l+4>>2]=c[d+4>>2];c[l+8>>2]=c[d+8>>2];c[l+12>>2]=c[d+12>>2];c[f>>2]=c[h>>2];Dz(a,j,q,0)|0;c[e>>2]=q;q=a+1980|0;c[q>>2]=(c[q>>2]|0)+2;r=1;i=g;return r|0}function yz(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;h=i;i=i+80|0;j=h|0;k=h+24|0;l=h+32|0;m=h+48|0;n=h+64|0;c[k>>2]=0;if((b|0)==0|(e|0)==0|(f|0)==0){cc(163272,154984,311,171176);return 0}if((g|0)<=-1){cc(159256,154984,312,171176);return 0}o=e+4|0;if((c[o>>2]|0)<(g|0)){cc(159256,154984,312,171176);return 0}do{if((c[a+1912>>2]|0)!=0){if((c[a+1908>>2]|0)==0){p=a+1944|0;c[p>>2]=(c[p>>2]|0)+1;break}else{p=a+1948|0;c[p>>2]=(c[p>>2]|0)+1;break}}}while(0);p=c[o>>2]|0;if((p|0)<=(g|0)){if((p|0)!=(g|0)){cc(154208,154984,341,171176);return 0}p=j;o=b;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];c[j+16>>2]=d;o=a+1980|0;c[o>>2]=(c[o>>2]|0)+1;q=Dz(a,j,e,f)|0;i=h;return q|0}o=Cz(b,e)|0;p=e+8+(o*20|0)+16|0;r=e+8+(o*20|0)|0;if((yz(a,b,d,c[p>>2]|0,k,g)|0)==0){Iz(l,b,r);b=r;g=l;c[b>>2]=c[g>>2];c[b+4>>2]=c[g+4>>2];c[b+8>>2]=c[g+8>>2];c[b+12>>2]=c[g+12>>2];q=0;i=h;return q|0}else{Bz(m,c[p>>2]|0);p=r;r=m;c[p>>2]=c[r>>2];c[p+4>>2]=c[r+4>>2];c[p+8>>2]=c[r+8>>2];c[p+12>>2]=c[r+12>>2];r=c[k>>2]|0;c[j+16>>2]=r;Bz(n,r);r=j;k=n;c[r>>2]=c[k>>2];c[r+4>>2]=c[k+4>>2];c[r+8>>2]=c[k+8>>2];c[r+12>>2]=c[k+12>>2];k=a+1980|0;c[k>>2]=(c[k>>2]|0)+1;q=Dz(a,j,e,f)|0;i=h;return q|0}return 0}function zz(a){a=a|0;var b=0;b=a+1968|0;c[b>>2]=(c[b>>2]|0)+1;b=dF(1288)|0;a=b;c[b>>2]=0;c[b+4>>2]=-1;b=0;do{Fz(a+8+(b*20|0)|0);c[a+8+(b*20|0)+16>>2]=0;b=b+1|0;}while((b|0)<64);return a|0}function Az(a){a=a|0;var b=0;c[a>>2]=0;c[a+4>>2]=-1;b=0;do{Fz(a+8+(b*20|0)|0);c[a+8+(b*20|0)+16>>2]=0;b=b+1|0;}while((b|0)<64);return}function Bz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;d=i;i=i+32|0;e=d|0;f=d+16|0;if((b|0)==0){cc(81248,164736,99,171248)}Fz(e);g=e;h=f;j=0;k=1;while(1){do{if((c[b+8+(j*20|0)+16>>2]|0)==0){l=k}else{m=b+8+(j*20|0)|0;if((k|0)==0){Iz(f,e,m);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];l=0;break}else{n=m;c[g>>2]=c[n>>2];c[g+4>>2]=c[n+4>>2];c[g+8>>2]=c[n+8>>2];c[g+12>>2]=c[n+12>>2];l=0;break}}}while(0);n=j+1|0;if((n|0)<64){j=n;k=l}else{break}}l=a;c[l>>2]=c[g>>2];c[l+4>>2]=c[g+4>>2];c[l+8>>2]=c[g+8>>2];c[l+12>>2]=c[g+12>>2];i=d;return}function Cz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=i;i=i+32|0;e=d|0;f=d+16|0;if((a|0)==0|(b|0)==0){cc(132216,164736,125,171224);return 0}g=e;h=f;j=0;k=1;l=0;m=0;n=0;while(1){do{if((c[b+8+(j*20|0)+16>>2]|0)==0){o=n;p=m;q=l;r=k}else{s=b+8+(j*20|0)|0;t=Hz(s)|0;Iz(f,a,s);c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];c[g+12>>2]=c[h+12>>2];s=(Hz(e)|0)-t|0;if(!((s|0)>=(l|0)&(k|0)==0)){o=j;p=t;q=s;r=0;break}u=(s|0)==(l|0)&(t|0)<(m|0);o=u?j:n;p=u?t:m;q=u?s:l;r=0}}while(0);s=j+1|0;if((s|0)<64){j=s;k=r;l=q;m=p;n=o}else{break}}i=d;return o|0}function Dz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if((b|0)==0){cc(116928,164736,167,171360);return 0}if((d|0)==0){cc(81248,164736,168,171360);return 0}f=d|0;if((c[f>>2]|0)<64){g=0;while(1){h=g+1|0;if((c[d+8+(g*20|0)+16>>2]|0)==0){break}if((h|0)<64){g=h}else{i=9;break}}if((i|0)==9){cc(109424,164736,178,171360);return 0}i=d+8+(g*20|0)|0;g=b;c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];c[f>>2]=(c[f>>2]|0)+1;j=0;return j|0}do{if((c[a+1912>>2]|0)!=0){if((c[a+1908>>2]|0)==0){f=a+1944|0;c[f>>2]=(c[f>>2]|0)+1;break}else{f=a+1948|0;c[f>>2]=(c[f>>2]|0)+1;break}}}while(0);if((e|0)==0){cc(103392,164736,187,171360);return 0}Kz(a,d,b,e);if((c[d+4>>2]|0)==0){d=a+1972|0;c[d>>2]=(c[d>>2]|0)+1;j=1;return j|0}else{d=a+1976|0;c[d>>2]=(c[d>>2]|0)+1;j=1;return j|0}return 0}function Ez(a,b){a=a|0;b=b|0;var d=0;if(!((a|0)!=0&b>>>0<64>>>0)){cc(97840,164736,201,171312)}d=a+8+(b*20|0)+16|0;if((c[d>>2]|0)==0){cc(92240,164736,202,171312)}else{Fz(a+8+(b*20|0)|0);c[d>>2]=0;d=a|0;c[d>>2]=(c[d>>2]|0)-1;return}}function Fz(a){a=a|0;vF(a|0,0,16)|0;return}function Gz(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;d=b|0;c[d>>2]=1;c[d+8>>2]=-1;c[d+12>>2]=0;c[d+4>>2]=0;e=a;a=d;c[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];i=b;return}function Hz(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;b=i;if((a|0)==0){cc(118600,156592,154,171144);return 0}d=c[a>>2]|0;if((d|0)>(c[a+8>>2]|0)){e=0;i=b;return e|0}else{f=0;g=1;h=d}while(1){d=(c[a+(f+2<<2)>>2]|0)-h|0;j=da(d,g)|0;k=f+1|0;if(((j>>>0)/(d>>>0)|0|0)!=(g|0)){break}if((k|0)>=2){e=j;l=8;break}f=k;g=j;h=c[a+(k<<2)>>2]|0}if((l|0)==8){i=b;return e|0}Fv(1,126672,(l=i,i=i+1|0,i=i+7&-8,c[l>>2]=0,l)|0)|0;i=l;e=-1;i=b;return e|0}function Iz(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;i=i+16|0;f=e|0;if((b|0)==0|(d|0)==0){cc(114688,156592,197,171328)}g=c[b>>2]|0;h=c[b+8>>2]|0;if((g|0)>(h|0)){j=a;k=d;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];i=e;return}k=c[d>>2]|0;j=c[d+8>>2]|0;if((k|0)>(j|0)){l=a;m=b;c[l>>2]=c[m>>2];c[l+4>>2]=c[m+4>>2];c[l+8>>2]=c[m+8>>2];c[l+12>>2]=c[m+12>>2];i=e;return}else{c[f>>2]=(g|0)<(k|0)?g:k;c[f+8>>2]=(h|0)>(j|0)?h:j;j=c[b+4>>2]|0;h=c[d+4>>2]|0;c[f+4>>2]=(j|0)<(h|0)?j:h;h=c[b+12>>2]|0;b=c[d+12>>2]|0;c[f+12>>2]=(h|0)>(b|0)?h:b;b=a;a=f;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];i=e;return}}function Jz(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((a|0)==0|(b|0)==0){cc(107560,156592,218,171240);return 0}else{d=0}while(1){e=d+2|0;if((c[a+(d<<2)>>2]|0)>(c[b+(e<<2)>>2]|0)){f=0;g=6;break}h=d+1|0;if((c[b+(d<<2)>>2]|0)>(c[a+(e<<2)>>2]|0)){f=0;g=6;break}if((h|0)<2){d=h}else{f=1;g=6;break}}if((g|0)==6){return f|0}return 0}function Kz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;f=i;i=i+440|0;h=f|0;j=f+16|0;k=f+32|0;l=f+48|0;m=f+64|0;n=f+328|0;o=f+344|0;p=f+360|0;q=f+376|0;r=f+392|0;s=f+408|0;t=f+424|0;if((b|0)==0){cc(108600,150992,40,171128)}if((d|0)==0){cc(123264,150992,41,171128)}u=a+1912|0;do{if((c[u>>2]|0)!=0){if((c[a+1908>>2]|0)==0){v=a+1928|0;c[v>>2]=(c[v>>2]|0)+1;break}else{v=a+1932|0;c[v>>2]=(c[v>>2]|0)+1;break}}}while(0);v=b+4|0;w=c[v>>2]|0;x=t;y=0;do{if((c[b+8+(y*20|0)+16>>2]|0)==0){z=11;break}A=a+4+(y*20|0)|0;B=b+8+(y*20|0)|0;c[A>>2]=c[B>>2];c[A+4>>2]=c[B+4>>2];c[A+8>>2]=c[B+8>>2];c[A+12>>2]=c[B+12>>2];c[A+16>>2]=c[B+16>>2];y=y+1|0;}while((y|0)<64);if((z|0)==11){cc(166560,150992,111,171296)}y=a+1284|0;B=d;c[y>>2]=c[B>>2];c[y+4>>2]=c[B+4>>2];c[y+8>>2]=c[B+8>>2];c[y+12>>2]=c[B+12>>2];c[y+16>>2]=c[B+16>>2];B=a+1304|0;y=B;d=a+4|0;c[y>>2]=c[d>>2];c[y+4>>2]=c[d+4>>2];c[y+8>>2]=c[d+8>>2];c[y+12>>2]=c[d+12>>2];d=1;do{Iz(t,B,a+4+(d*20|0)|0);c[y>>2]=c[x>>2];c[y+4>>2]=c[x+4>>2];c[y+8>>2]=c[x+8>>2];c[y+12>>2]=c[x+12>>2];d=d+1|0;}while((d|0)<65);d=a+1320|0;c[d>>2]=Hz(B)|0;Az(b);B=q;x=r;y=s;t=p;A=a+1848|0;c[A>>2]=0;C=a+1844|0;c[C>>2]=0;D=a+1868|0;Gz(p);p=D;c[p>>2]=c[t>>2];c[p+4>>2]=c[t+4>>2];c[p+8>>2]=c[t+8>>2];c[p+12>>2]=c[t+12>>2];E=a+1852|0;c[E>>2]=c[t>>2];c[E+4>>2]=c[t+4>>2];c[E+8>>2]=c[t+8>>2];c[E+12>>2]=c[t+12>>2];t=a+1888|0;c[t>>2]=0;E=a+1884|0;c[E>>2]=0;F=0;do{c[a+1584+(F<<2)>>2]=0;c[a+1324+(F<<2)>>2]=-1;F=F+1|0;}while((F|0)<65);F=n;G=o;H=0;while(1){c[m+(H<<2)>>2]=Hz(a+4+(H*20|0)|0)|0;I=H+1|0;if((I|0)<65){H=I}else{J=0;K=0;L=0;M=0;break}}while(1){H=J+1|0;I=a+4+(J*20|0)|0;N=c[m+(J<<2)>>2]|0;O=H;P=K;Q=L;R=M;do{Iz(o,I,a+4+(O*20|0)|0);c[F>>2]=c[G>>2];c[F+4>>2]=c[G+4>>2];c[F+8>>2]=c[G+8>>2];c[F+12>>2]=c[G+12>>2];S=(Hz(n)|0)-N|0;T=S-(c[m+(O<<2)>>2]|0)|0;S=T>>>0>P>>>0;P=S?T:P;Q=S?J:Q;R=S?O:R;O=O+1|0;}while((O|0)<65);if((H|0)<64){J=H;K=P;L=Q;M=R}else{break}}M=l;L=a+1584+(Q<<2)|0;if((c[L>>2]|0)!=0){cc(80304,150992,257,171344)}c[a+1324+(Q<<2)>>2]=0;c[L>>2]=1;L=a+1852|0;K=a+4+(Q*20|0)|0;if((c[C>>2]|0)==0){Q=L;J=K;c[Q>>2]=c[J>>2];c[Q+4>>2]=c[J+4>>2];c[Q+8>>2]=c[J+8>>2];c[Q+12>>2]=c[J+12>>2]}else{Iz(l,K,L);K=L;c[K>>2]=c[M>>2];c[K+4>>2]=c[M+4>>2];c[K+8>>2]=c[M+8>>2];c[K+12>>2]=c[M+12>>2]}c[E>>2]=Hz(L)|0;c[C>>2]=(c[C>>2]|0)+1;M=k;K=a+1584+(R<<2)|0;if((c[K>>2]|0)!=0){cc(80304,150992,257,171344)}c[a+1324+(R<<2)>>2]=1;c[K>>2]=1;K=a+4+(R*20|0)|0;if((c[A>>2]|0)==0){R=K;c[p>>2]=c[R>>2];c[p+4>>2]=c[R+4>>2];c[p+8>>2]=c[R+8>>2];c[p+12>>2]=c[R+12>>2]}else{Iz(k,K,D);c[p>>2]=c[M>>2];c[p+4>>2]=c[M+4>>2];c[p+8>>2]=c[M+8>>2];c[p+12>>2]=c[M+12>>2]}c[t>>2]=Hz(D)|0;M=(c[A>>2]|0)+1|0;c[A>>2]=M;p=c[C>>2]|0;a:do{if((p+M|0)<65){K=a+1892|0;k=j;R=0;l=0;J=p;Q=M;while(1){m=65-(c[K>>2]|0)|0;if((J|0)<(m|0)&(Q|0)<(m|0)){U=0;V=-1;W=R;X=l}else{Y=J;Z=Q;break a}while(1){do{if((c[a+1584+(U<<2)>>2]|0)==0){m=a+4+(U*20|0)|0;Iz(r,m,L);c[B>>2]=c[x>>2];c[B+4>>2]=c[x+4>>2];c[B+8>>2]=c[x+8>>2];c[B+12>>2]=c[x+12>>2];n=Hz(q)|0;G=c[E>>2]|0;Iz(s,m,D);c[B>>2]=c[y>>2];c[B+4>>2]=c[y+4>>2];c[B+8>>2]=c[y+8>>2];c[B+12>>2]=c[y+12>>2];m=Hz(q)|0;F=m-(c[t>>2]|0)+(G-n)|0;n=(F|0)>-1?F:-F|0;G=F>>>31;if((n|0)>(V|0)){_=G;$=U;aa=n;break}if((n|0)!=(V|0)){_=X;$=W;aa=V;break}n=(c[a+1844+(G<<2)>>2]|0)<(c[a+1844+(X<<2)>>2]|0);_=n?G:X;$=n?U:W;aa=V}else{_=X;$=W;aa=V}}while(0);n=U+1|0;if((n|0)<65){U=n;V=aa;W=$;X=_}else{break}}n=a+1584+($<<2)|0;if((c[n>>2]|0)!=0){break}c[a+1324+($<<2)>>2]=_;c[n>>2]=1;n=a+1844+(_<<2)|0;G=a+1852+(_<<4)|0;F=a+4+($*20|0)|0;if((c[n>>2]|0)==0){m=G;o=F;c[m>>2]=c[o>>2];c[m+4>>2]=c[o+4>>2];c[m+8>>2]=c[o+8>>2];c[m+12>>2]=c[o+12>>2]}else{Iz(j,F,G);F=G;c[F>>2]=c[k>>2];c[F+4>>2]=c[k+4>>2];c[F+8>>2]=c[k+8>>2];c[F+12>>2]=c[k+12>>2]}c[a+1884+(_<<2)>>2]=Hz(G)|0;c[n>>2]=(c[n>>2]|0)+1;n=c[C>>2]|0;G=c[A>>2]|0;if((G+n|0)<65){R=$;l=_;J=n;Q=G}else{Y=n;Z=G;break a}}cc(80304,150992,257,171344)}else{Y=p;Z=M}}while(0);if((Y+Z|0)<65){M=(Y|0)>=(65-(c[a+1892>>2]|0)|0)|0;p=h;_=a+1844+(M<<2)|0;$=a+1852+(M<<4)|0;j=$;X=a+1884+(M<<2)|0;W=0;do{aa=a+1584+(W<<2)|0;if((c[aa>>2]|0)==0){c[a+1324+(W<<2)>>2]=M;c[aa>>2]=1;aa=a+4+(W*20|0)|0;if((c[_>>2]|0)==0){V=aa;c[j>>2]=c[V>>2];c[j+4>>2]=c[V+4>>2];c[j+8>>2]=c[V+8>>2];c[j+12>>2]=c[V+12>>2]}else{Iz(h,aa,$);c[j>>2]=c[p>>2];c[j+4>>2]=c[p+4>>2];c[j+8>>2]=c[p+8>>2];c[j+12>>2]=c[p+12>>2]}c[X>>2]=Hz($)|0;c[_>>2]=(c[_>>2]|0)+1;}W=W+1|0;}while((W|0)<65);ba=c[C>>2]|0;ca=c[A>>2]|0}else{ba=Y;ca=Z}if((ba+ca|0)!=65){cc(90120,150992,210,171264)}Z=c[a+1892>>2]|0;if((ba|0)<(Z|0)|(ca|0)<(Z|0)){cc(84992,150992,212,171264)}Z=Hz(L)|0;L=(Hz(D)|0)+Z|0;do{if((c[u>>2]|0)!=0){if((c[a+1908>>2]|0)!=0|(L|0)==0){break}Z=a+1960|0;g[Z>>2]=+((c[d>>2]|0)>>>0>>>0)/+(L|0)+ +g[Z>>2]}}while(0);c[e>>2]=zz(a)|0;c[v>>2]=w;c[(c[e>>2]|0)+4>>2]=w;w=c[e>>2]|0;if((w|0)==0){cc(106776,150992,298,171280)}else{da=0}do{v=c[a+1324+(da<<2)>>2]|0;if(v>>>0>=2>>>0){z=65;break}if((v|0)==0){Dz(a,a+4+(da*20|0)|0,b,0)|0}else if((v|0)==1){Dz(a,a+4+(da*20|0)|0,w,0)|0}da=da+1|0;}while((da|0)<65);if((z|0)==65){cc(95440,150992,303,171280)}if(((c[c[e>>2]>>2]|0)+(c[b>>2]|0)|0)==65){i=f;return}else{cc(113536,150992,86,171128)}}function Lz(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;return(c[b>>2]|0)-(c[d>>2]|0)|0}
+
+
+
+function Lo(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0.0,H=0,I=0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0.0,ja=0,ka=0.0,la=0.0,ma=0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0,va=0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0,Ba=0.0,Ca=0.0,Da=0.0,Ea=0.0,Fa=0.0,Ga=0.0,Ha=0.0,Ia=0.0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0.0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0.0,sb=0.0,tb=0.0,ub=0.0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0.0,Cb=0.0,Db=0,Eb=0.0,Fb=0.0,Gb=0.0,Hb=0.0,Ib=0.0,Kb=0.0,Lb=0.0,Mb=0.0;j=i;i=i+272|0;k=j|0;l=j+8|0;m=j+16|0;n=j+176|0;o=j+192|0;p=j+208|0;q=f;r=f+32|0;s=Hx(c[((c[q>>2]&3|0)==3?f:r)+28>>2]|0)|0;t=c[q>>2]&3;q=c[((t|0)==3?f:r)+28>>2]|0;r=c[((t|0)==2?f:f-32|0)+28>>2]|0;f=(e|0)>0;do{if(f){t=0;u=0;v=0;while(1){w=c[(c[b+(t+d<<2)>>2]|0)+8>>2]|0;x=((c[w+96>>2]|0)!=0)+v|0;if((a[w+44|0]|0)==0){if((a[w+84|0]|0)==0){y=u}else{z=4}}else{z=4}if((z|0)==4){z=0;y=1}w=t+1|0;if((w|0)<(e|0)){t=w;u=y;v=x}else{break}}if((y|0)==0){if((x|0)==0){break}v=m;u=n;t=o;w=c[b+(d<<2)>>2]|0;A=jk(e<<2)|0;B=A;if(f){C=0;do{c[B+(C<<2)>>2]=c[b+(C+d<<2)>>2];C=C+1|0;}while((C|0)<(e|0))}Jb(A|0,e|0,4,152);C=c[q+8>>2]|0;D=w+8|0;E=c[D>>2]|0;F=+h[C+16>>3]+ +h[E+16>>3];G=+h[C+24>>3]+ +h[E+24>>3];E=n|0;h[E>>3]=F;H=n+8|0;h[H>>3]=G;I=c[r+8>>2]|0;J=c[D>>2]|0;G=+h[I+16>>3]+ +h[J+56>>3];K=+h[I+24>>3]+ +h[J+64>>3];J=o|0;h[J>>3]=G;D=o+8|0;h[D>>3]=K;K=F+ +h[C+96>>3];F=G- +h[I+88>>3];G=(K+F)*.5;I=c[B>>2]|0;C=m|0;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];L=m+16|0;M=L;c[M>>2]=c[u>>2];c[M+4>>2]=c[u+4>>2];c[M+8>>2]=c[u+8>>2];c[M+12>>2]=c[u+12>>2];M=m+32|0;N=M;c[N>>2]=c[t>>2];c[N+4>>2]=c[t+4>>2];c[N+8>>2]=c[t+8>>2];c[N+12>>2]=c[t+12>>2];N=m+48|0;O=N;c[O>>2]=c[t>>2];c[O+4>>2]=c[t+4>>2];c[O+8>>2]=c[t+8>>2];c[O+12>>2]=c[t+12>>2];cm(I,c[((c[I>>2]&3|0)==2?I:I-32|0)+28>>2]|0,C,4,11848);P=I+8|0;h[(c[(c[P>>2]|0)+96>>2]|0)+56>>3]=G;I=c[(c[P>>2]|0)+96>>2]|0;h[I+64>>3]=+h[H>>3]+(+h[I+32>>3]+6.0)*.5;a[(c[(c[P>>2]|0)+96>>2]|0)+81|0]=1;Q=+h[H>>3]+3.0;I=c[(c[P>>2]|0)+96>>2]|0;R=Q+ +h[I+32>>3];S=+h[I+24>>3]*.5;T=G-S;U=G+S;a:do{if((x|0)>1){I=L|0;P=m+24|0;V=M|0;W=m+40|0;X=N|0;Y=m+56|0;Z=m+64|0;_=m+72|0;$=m+80|0;aa=m+88|0;ba=m+96|0;ca=m+104|0;da=m+112|0;ea=m+120|0;fa=k+4|0;ga=k|0;ha=(g|0)==6|0;S=Q;ia=R;ja=1;ka=0.0;la=0.0;while(1){ma=c[B+(ja<<2)>>2]|0;if((ja&1|0)==0){c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];h[I>>3]=T;h[P>>3]=+h[H>>3];h[V>>3]=T;h[W>>3]=ia;h[X>>3]=U;h[Y>>3]=ia;h[Z>>3]=U;na=+h[D>>3];h[_>>3]=na;oa=+h[J>>3];h[$>>3]=oa;h[aa>>3]=na;h[ba>>3]=oa;oa=ia+6.0;h[ca>>3]=oa;h[da>>3]=+h[E>>3];h[ea>>3]=oa;oa=+h[(c[(c[ma+8>>2]|0)+96>>2]|0)+32>>3];pa=la;qa=ka;ra=ia+(oa+6.0);sa=S;ta=ia+oa*.5+6.0}else{ua=ma+8|0;va=c[(c[ua>>2]|0)+96>>2]|0;if((ja|0)==1){oa=+h[va+24>>3]*.5;wa=G+oa;xa=G-oa}else{wa=la;xa=ka}oa=S-(+h[va+32>>3]+6.0);c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];h[I>>3]=+h[E>>3];na=oa+-6.0;h[P>>3]=na;h[V>>3]=+h[J>>3];h[W>>3]=na;c[O>>2]=c[t>>2];c[O+4>>2]=c[t+4>>2];c[O+8>>2]=c[t+8>>2];c[O+12>>2]=c[t+12>>2];h[Z>>3]=wa;h[_>>3]=+h[D>>3];h[$>>3]=wa;h[aa>>3]=oa;h[ba>>3]=xa;h[ca>>3]=oa;h[da>>3]=xa;h[ea>>3]=+h[H>>3];pa=wa;qa=xa;ra=ia;sa=oa;ta=oa+ +h[(c[(c[ua>>2]|0)+96>>2]|0)+32>>3]*.5}c[fa>>2]=8;c[ga>>2]=C;ua=fl(n,o,k,l,ha)|0;if((c[l>>2]|0)==0){break}va=ma+8|0;h[(c[(c[va>>2]|0)+96>>2]|0)+56>>3]=G;h[(c[(c[va>>2]|0)+96>>2]|0)+64>>3]=ta;a[(c[(c[va>>2]|0)+96>>2]|0)+81|0]=1;cm(ma,c[((c[ma>>2]&3|0)==2?ma:ma-32|0)+28>>2]|0,ua,c[l>>2]|0,11848);ua=ja+1|0;if((ua|0)<(x|0)){S=sa;ia=ra;ja=ua;ka=qa;la=pa}else{ya=sa;za=ra;Aa=ua;Ba=qa;Ca=pa;break a}}i=j;return}else{ya=Q;za=R;Aa=1;Ba=0.0;Ca=0.0}}while(0);b:do{if((Aa|0)<(e|0)){w=L|0;ja=m+24|0;ha=M|0;ga=m+40|0;fa=N|0;ea=m+56|0;da=m+64|0;ca=m+72|0;ba=m+80|0;aa=m+88|0;$=m+96|0;_=m+104|0;Z=m+112|0;W=m+120|0;V=k+4|0;P=k|0;I=(g|0)==6|0;R=(K*2.0+F)/3.0;Q=(K+F*2.0)/3.0;G=ya;la=za;Y=Aa;ka=Ba;ia=Ca;while(1){X=c[B+(Y<<2)>>2]|0;if((Y&1|0)==0){c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];h[w>>3]=T;h[ja>>3]=+h[H>>3];h[ha>>3]=T;h[ga>>3]=la;h[fa>>3]=U;h[ea>>3]=la;h[da>>3]=U;S=+h[D>>3];h[ca>>3]=S;oa=+h[J>>3];h[ba>>3]=oa;h[aa>>3]=S;h[$>>3]=oa;oa=la+6.0;h[_>>3]=oa;h[Z>>3]=+h[E>>3];Da=ia;Ea=ka;Fa=oa;Ga=G;Ha=oa}else{ua=(Y|0)==1;oa=ua?R:ka;S=ua?Q:ia;na=G+-6.0;c[v>>2]=c[u>>2];c[v+4>>2]=c[u+4>>2];c[v+8>>2]=c[u+8>>2];c[v+12>>2]=c[u+12>>2];h[w>>3]=+h[E>>3];Ia=na+-6.0;h[ja>>3]=Ia;h[ha>>3]=+h[J>>3];h[ga>>3]=Ia;c[O>>2]=c[t>>2];c[O+4>>2]=c[t+4>>2];c[O+8>>2]=c[t+8>>2];c[O+12>>2]=c[t+12>>2];h[da>>3]=S;h[ca>>3]=+h[D>>3];h[ba>>3]=S;h[aa>>3]=na;h[$>>3]=oa;h[_>>3]=na;h[Z>>3]=oa;Da=S;Ea=oa;Fa=la;Ga=na;Ha=+h[H>>3]}h[W>>3]=Ha;c[V>>2]=8;c[P>>2]=C;ua=fl(n,o,k,l,I)|0;ma=c[l>>2]|0;if((ma|0)==0){break}cm(X,c[((c[X>>2]&3|0)==2?X:X-32|0)+28>>2]|0,ua,ma,11848);ma=Y+1|0;if((ma|0)<(e|0)){G=Ga;la=Fa;Y=ma;ka=Ea;ia=Da}else{break b}}i=j;return}}while(0);eF(A);i=j;return}C=jk(156)|0;if((Nw(s)|0)==0){Ja=Hw(162440,173920,0)|0}else{Ja=Hw(162440,173944,0)|0}Wx(Ja|0,106832,272,1)|0;Wv(Ja,0,101184,213456)|0;H=jk(96)|0;D=Ja+8|0;c[(c[D>>2]|0)+8>>2]=H;H=s+8|0;h[c[(c[D>>2]|0)+8>>2]>>3]=+h[c[(c[H>>2]|0)+8>>2]>>3];h[(c[(c[D>>2]|0)+8>>2]|0)+24>>3]=+h[(c[(c[H>>2]|0)+8>>2]|0)+24>>3];a[(c[D>>2]|0)+115|0]=a[(c[H>>2]|0)+115|0]|0;c[(c[D>>2]|0)+116>>2]=(c[(c[H>>2]|0)+116>>2]&1|0)==0?1:0;c[(c[D>>2]|0)+236>>2]=c[(c[H>>2]|0)+236>>2];c[(c[D>>2]|0)+240>>2]=c[(c[H>>2]|0)+240>>2];t=s|0;O=Xv(Ix(t)|0,1,0)|0;J=Xv(Ix(t)|0,1,O)|0;if((J|0)!=0){O=J;do{Wv(Ja,1,c[O+8>>2]|0,c[O+12>>2]|0)|0;O=Xv(Ix(t)|0,1,O)|0;}while((O|0)!=0)}O=Xv(Ix(t)|0,2,0)|0;A=Xv(Ix(t)|0,2,O)|0;if((A|0)!=0){O=A;do{Wv(Ja,2,c[O+8>>2]|0,c[O+12>>2]|0)|0;O=Xv(Ix(t)|0,2,O)|0;}while((O|0)!=0)}if((Wv(Ja,2,153464,0)|0)==0){Wv(Ja,2,153464,213456)|0}if((Wv(Ja,2,151416,0)|0)==0){Wv(Ja,2,151416,213456)|0}O=C;c[O>>2]=c[53812];t=C+4|0;c[t>>2]=c[53770];A=C+8|0;c[A>>2]=c[53768];J=C+12|0;c[J>>2]=c[53750];E=C+16|0;c[E>>2]=c[53774];u=C+20|0;c[u>>2]=c[53800];v=C+24|0;c[v>>2]=c[53798];B=C+28|0;c[B>>2]=c[53796];N=C+32|0;c[N>>2]=c[53794];M=C+36|0;c[M>>2]=c[53792];L=C+40|0;c[L>>2]=c[53790];Y=C+44|0;c[Y>>2]=c[53788];I=C+48|0;c[I>>2]=c[53782];P=C+52|0;c[P>>2]=c[53780];V=C+56|0;c[V>>2]=c[53778];W=C+60|0;c[W>>2]=c[53758];Z=C+64|0;c[Z>>2]=c[53756];_=C+68|0;c[_>>2]=c[53748];$=C+72|0;c[$>>2]=c[53618];aa=C+76|0;c[aa>>2]=c[53574];ba=C+80|0;c[ba>>2]=c[53590];ca=C+84|0;c[ca>>2]=c[53582];da=C+88|0;c[da>>2]=c[53624];ga=C+92|0;c[ga>>2]=c[53626];ha=C+96|0;c[ha>>2]=c[53628];ja=C+100|0;c[ja>>2]=c[53614];w=C+104|0;c[w>>2]=c[53572];ea=C+108|0;c[ea>>2]=c[53588];fa=C+112|0;c[fa>>2]=c[53604];ma=C+116|0;c[ma>>2]=c[53586];ua=C+120|0;c[ua>>2]=c[53598];X=C+124|0;c[X>>2]=c[53584];va=C+128|0;c[va>>2]=c[53602];Ka=C+132|0;c[Ka>>2]=c[53636];La=C+136|0;c[La>>2]=c[53630];Ma=C+140|0;c[Ma>>2]=c[53606];Na=C+144|0;c[Na>>2]=c[53620];Oa=C+152|0;c[Oa>>2]=c[53522];Pa=C+148|0;c[Pa>>2]=c[53718];c[53812]=0;c[53770]=Wv(Ja,2,147448,0)|0;c[53768]=Wv(Ja,2,144280,0)|0;Qa=Wv(Ja,2,142360,0)|0;c[53750]=Qa;if((Qa|0)==0){c[53750]=Wv(Ja,2,142360,213456)|0}c[53774]=0;c[53800]=0;c[53798]=Wv(Ja,2,139248,0)|0;c[53796]=Wv(Ja,2,135624,0)|0;c[53794]=Wv(Ja,2,133768,0)|0;c[53792]=0;c[53790]=Wv(Ja,2,166600,0)|0;c[53788]=Wv(Ja,2,131720,0)|0;c[53782]=0;c[53780]=Wv(Ja,2,128320,0)|0;c[53778]=Wv(Ja,2,126248,0)|0;c[53758]=Wv(Ja,2,123736,0)|0;c[53756]=0;c[53748]=0;c[53618]=Wv(Ja,1,121824,0)|0;c[53574]=Wv(Ja,1,120688,0)|0;c[53590]=Wv(Ja,1,119936,0)|0;c[53582]=0;c[53624]=Wv(Ja,1,135624,0)|0;c[53626]=Wv(Ja,1,139248,0)|0;c[53628]=0;c[53614]=Wv(Ja,1,166600,0)|0;c[53572]=0;c[53588]=0;c[53604]=Wv(Ja,1,119384,0)|0;c[53586]=Wv(Ja,1,118704,0)|0;c[53598]=Wv(Ja,1,117792,0)|0;c[53584]=Wv(Ja,1,116864,0)|0;c[53602]=Wv(Ja,1,115952,0)|0;c[53636]=Wv(Ja,1,114632,0)|0;c[53630]=Wv(Ja,1,113792,0)|0;c[53606]=0;c[53620]=0;c[53718]=Wv(Ja,0,119384,0)|0;Qa=ry(Ja,113672,1)|0;Ra=Qa|0;Wx(Ra,106832,272,1)|0;gw(Ra,101184,95624)|0;Ra=~~+h[(c[r+8>>2]|0)+16>>3];Sa=~~+h[(c[q+8>>2]|0)+16>>3];Ta=(c[(c[H>>2]|0)+116>>2]&1|0)==0;Ua=Ta?r:q;Va=Ta?q:r;Ta=Po(Qa,Va)|0;Qa=Po(Ja,Ua)|0;if(f){Wa=0;Xa=0;while(1){Ya=c[b+(Wa+d<<2)>>2]|0;Za=Ya+8|0;_a=c[Za>>2]|0;if((a[_a+112|0]|0)==0){$a=Ya;ab=Za}else{Za=_a;do{bb=c[Za+116>>2]|0;cb=bb+8|0;Za=c[cb>>2]|0;}while((a[Za+112|0]|0)!=0);$a=bb;ab=cb}if((c[((c[$a>>2]&3|0)==3?$a:$a+32|0)+28>>2]|0)==(Va|0)){Za=uw(Ja,Ta,Qa,0,1)|0;jw($a|0,Za|0)|0;db=Za}else{Za=uw(Ja,Qa,Ta,0,1)|0;jw($a|0,Za|0)|0;db=Za}c[(c[ab>>2]|0)+120>>2]=db;do{if((Xa|0)==0){Za=c[ab>>2]|0;if((a[Za+44|0]|0)!=0){eb=0;break}if((a[Za+84|0]|0)!=0){eb=0;break}c[(c[db+8>>2]|0)+120>>2]=$a;eb=db}else{eb=Xa}}while(0);Za=Wa+1|0;if((Za|0)<(e|0)){Wa=Za;Xa=eb}else{break}}if((eb|0)==0){z=54}else{fb=eb}}else{z=54}if((z|0)==54){fb=uw(Ja,Ta,Qa,0,1)|0}hw(fb|0,c[53750]|0,90272)|0;c[(c[D>>2]|0)+136>>2]=c[(c[H>>2]|0)+136>>2];qn(Ja,g);so(Ja);Zp(Ja,0);jp(Ja,0);Hp(Ja,0);Xa=Va+8|0;Wa=c[Xa>>2]|0;Za=c[Ua+8>>2]|0;_a=Ta+8|0;Ya=c[(c[D>>2]|0)+180>>2]|0;if((Ya|0)!=0){U=+(Ra|0);T=+(~~((+h[(c[_a>>2]|0)+16>>3]+ +h[(c[Qa+8>>2]|0)+16>>3])*.5)|0);F=+(Sa|0);K=+(~~((+h[Wa+16>>3]- +h[Wa+96>>3]+ +h[Za+16>>3]+ +h[Za+88>>3])*.5)|0);Za=Ya;do{Ya=Za;do{if((Ya|0)==(Ta|0)){Wa=Za+8|0;h[(c[Wa>>2]|0)+24>>3]=U;h[(c[Wa>>2]|0)+16>>3]=T}else{Wa=Za+8|0;gb=(c[Wa>>2]|0)+24|0;if((Ya|0)==(Qa|0)){h[gb>>3]=F;h[(c[Wa>>2]|0)+16>>3]=T;break}else{h[gb>>3]=K;break}}}while(0);Za=c[(c[Za+8>>2]|0)+164>>2]|0;}while((Za|0)!=0)}pq(Ja);Bo(Ja,0);Xk(Ja);Za=c[Xa>>2]|0;Qa=c[_a>>2]|0;if((c[(c[H>>2]|0)+116>>2]&1|0)==0){hb=Qa+16|0;ib=+h[Za+24>>3]- +h[Qa+24>>3]}else{hb=Qa+24|0;ib=+h[Za+24>>3]+ +h[Qa+16>>3]}K=+h[Za+16>>3]- +h[hb>>3];if(f){Za=p;Qa=p|0;Ta=p+16|0;Sa=p+32|0;Ra=p+48|0;D=p+56|0;Ua=0;do{Va=c[b+(Ua+d<<2)>>2]|0;Ya=Va+8|0;gb=c[Ya>>2]|0;if((a[gb+112|0]|0)==0){jb=Va;kb=Ya;lb=gb}else{Ya=gb;do{mb=c[Ya+116>>2]|0;nb=mb+8|0;Ya=c[nb>>2]|0;}while((a[Ya+112|0]|0)!=0);jb=mb;kb=nb;lb=Ya}gb=c[lb+120>>2]|0;Va=gb+8|0;Wa=c[Va>>2]|0;do{if(!((gb|0)==(fb|0)&(c[Wa+120>>2]|0)==0)){ob=c[c[Wa+8>>2]>>2]|0;pb=ob+4|0;qb=bm(jb,c[pb>>2]|0)|0;c[qb+8>>2]=c[ob+8>>2];T=+h[ob+16>>3];F=+h[ob+24>>3];if((c[(c[H>>2]|0)+116>>2]&1|0)==0){rb=T;sb=F}else{rb=F;sb=-0.0-T}h[qb+16>>3]=K+rb;h[qb+24>>3]=ib+sb;c[qb+12>>2]=c[ob+12>>2];T=+h[ob+32>>3];F=+h[ob+40>>3];if((c[(c[H>>2]|0)+116>>2]&1|0)==0){tb=T;ub=F}else{tb=F;ub=-0.0-T}h[qb+32>>3]=K+tb;h[qb+40>>3]=ib+ub;c:do{if((c[pb>>2]|0)>0){vb=qb|0;wb=ob|0;xb=0;do{yb=c[vb>>2]|0;zb=yb+(xb<<4)|0;Ab=c[wb>>2]|0;T=+h[Ab+(xb<<4)>>3];F=+h[Ab+(xb<<4)+8>>3];if((c[(c[H>>2]|0)+116>>2]&1|0)==0){Bb=T;Cb=F}else{Bb=F;Cb=-0.0-T}Ab=zb;h[zb>>3]=K+Bb;h[yb+(xb<<4)+8>>3]=ib+Cb;c[Za>>2]=c[Ab>>2];c[Za+4>>2]=c[Ab+4>>2];c[Za+8>>2]=c[Ab+8>>2];c[Za+12>>2]=c[Ab+12>>2];Ab=xb+1|0;if((Ab|0)>=(c[pb>>2]|0)){break c}yb=c[vb>>2]|0;zb=yb+(Ab<<4)|0;Db=c[wb>>2]|0;T=+h[Db+(Ab<<4)>>3];F=+h[Db+(Ab<<4)+8>>3];if((c[(c[H>>2]|0)+116>>2]&1|0)==0){Eb=T;Fb=F}else{Eb=F;Fb=-0.0-T}Db=zb;h[zb>>3]=K+Eb;h[yb+(Ab<<4)+8>>3]=ib+Fb;c[Ta>>2]=c[Db>>2];c[Ta+4>>2]=c[Db+4>>2];c[Ta+8>>2]=c[Db+8>>2];c[Ta+12>>2]=c[Db+12>>2];Db=xb+2|0;Ab=c[vb>>2]|0;yb=Ab+(Db<<4)|0;zb=c[wb>>2]|0;T=+h[zb+(Db<<4)>>3];F=+h[zb+(Db<<4)+8>>3];if((c[(c[H>>2]|0)+116>>2]&1|0)==0){Gb=T;Hb=F}else{Gb=F;Hb=-0.0-T}zb=yb;h[yb>>3]=K+Gb;h[Ab+(Db<<4)+8>>3]=ib+Hb;c[Sa>>2]=c[zb>>2];c[Sa+4>>2]=c[zb+4>>2];c[Sa+8>>2]=c[zb+8>>2];c[Sa+12>>2]=c[zb+12>>2];xb=xb+3|0;zb=c[wb>>2]|0;T=+h[zb+(xb<<4)>>3];F=+h[zb+(xb<<4)+8>>3];if((c[(c[H>>2]|0)+116>>2]&1|0)==0){Ib=T;Kb=F}else{Ib=F;Kb=-0.0-T}h[Ra>>3]=K+Ib;h[D>>3]=ib+Kb;Oh((c[H>>2]|0)+16|0,Qa);}while((xb|0)<(c[pb>>2]|0))}}while(0);pb=c[(c[kb>>2]|0)+96>>2]|0;if((pb|0)==0){break}ob=c[(c[Va>>2]|0)+96>>2]|0;T=+h[ob+56>>3];F=+h[ob+64>>3];if((c[(c[H>>2]|0)+116>>2]&1|0)==0){Lb=T;Mb=F}else{Lb=F;Mb=-0.0-T}h[pb+56>>3]=K+Lb;h[pb+64>>3]=ib+Mb;a[(c[(c[kb>>2]|0)+96>>2]|0)+81|0]=1;_m(s,c[(c[kb>>2]|0)+96>>2]|0)}}while(0);Ua=Ua+1|0;}while((Ua|0)<(e|0))}c[53812]=c[O>>2];c[53770]=c[t>>2];c[53768]=c[A>>2];c[53750]=c[J>>2];c[53774]=c[E>>2];c[53800]=c[u>>2];c[53798]=c[v>>2];c[53796]=c[B>>2];c[53794]=c[N>>2];c[53792]=c[M>>2];c[53790]=c[L>>2];c[53788]=c[Y>>2];c[53782]=c[I>>2];c[53780]=c[P>>2];c[53778]=c[V>>2];c[53758]=c[W>>2];c[53756]=c[Z>>2];c[53748]=c[_>>2];c[53618]=c[$>>2];c[53574]=c[aa>>2];c[53590]=c[ba>>2];c[53582]=c[ca>>2];c[53624]=c[da>>2];c[53626]=c[ga>>2];c[53628]=c[ha>>2];c[53614]=c[ja>>2];c[53572]=c[w>>2];c[53588]=c[ea>>2];c[53604]=c[fa>>2];c[53586]=c[ma>>2];c[53598]=c[ua>>2];c[53584]=c[X>>2];c[53602]=c[va>>2];c[53636]=c[Ka>>2];c[53630]=c[La>>2];c[53606]=c[Ma>>2];c[53620]=c[Na>>2];c[53718]=c[Pa>>2];c[53522]=c[Oa>>2];eF(C);to(Ja);Kw(Ja)|0;i=j;return}}while(0);Mo(c[q+8>>2]|0,c[r+8>>2]|0,b,d,e,g);i=j;return}function Mo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0.0;j=i;i=i+160|0;k=j|0;l=c[(c[d+(e<<2)>>2]|0)+8>>2]|0;m=+h[a+16>>3]+ +h[l+16>>3];n=+h[a+24>>3]+ +h[l+24>>3];o=+h[b+16>>3]+ +h[l+56>>3];p=+h[b+24>>3]+ +h[l+64>>3];do{if((f|0)>1){q=+h[a+80>>3];r=q/+(f-1|0);s=n-q*.5}else{if((f|0)>0){r=0.0;s=n;break}i=j;return}}while(0);a=k|0;l=k|0;b=k+8|0;q=(m*2.0+o)/3.0;t=k+16|0;u=k+24|0;v=(m+o*2.0)/3.0;w=k+32|0;x=k+40|0;y=k+48|0;z=k+56|0;A=k+64|0;B=k+72|0;C=k+80|0;D=k+88|0;E=k+96|0;F=k+104|0;G=k+112|0;H=k+120|0;I=k+128|0;J=k+136|0;K=k+144|0;L=k+152|0;if((g&-9|0)==2){g=0;M=s;while(1){k=c[d+(g+e<<2)>>2]|0;h[l>>3]=m;h[b>>3]=n;h[t>>3]=q;h[u>>3]=M;h[w>>3]=v;h[x>>3]=M;h[y>>3]=o;h[z>>3]=p;cm(k,c[((c[k>>2]&3|0)==2?k:k-32|0)+28>>2]|0,a,4,11848);k=g+1|0;if((k|0)<(f|0)){g=k;M=r+M}else{break}}i=j;return}else{g=0;M=s;while(1){k=c[d+(g+e<<2)>>2]|0;h[l>>3]=m;h[b>>3]=n;h[t>>3]=m;h[u>>3]=n;h[w>>3]=q;h[x>>3]=M;h[y>>3]=q;h[z>>3]=M;h[A>>3]=q;h[B>>3]=M;h[C>>3]=v;h[D>>3]=M;h[E>>3]=v;h[F>>3]=M;h[G>>3]=v;h[H>>3]=M;h[I>>3]=o;h[J>>3]=p;h[K>>3]=o;h[L>>3]=p;cm(k,c[((c[k>>2]&3|0)==2?k:k-32|0)+28>>2]|0,a,10,11848);k=g+1|0;if((k|0)<(f|0)){g=k;M=r+M}else{break}}i=j;return}}function No(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;j=i;i=i+32|0;k=j|0;l=Hx(d|0)|0;Do(k,a,d,0,e);a=f;m=k;c[a>>2]=c[m>>2];c[a+4>>2]=c[m+4>>2];c[a+8>>2]=c[m+8>>2];c[a+12>>2]=c[m+12>>2];c[a+16>>2]=c[m+16>>2];c[a+20>>2]=c[m+20>>2];c[a+24>>2]=c[m+24>>2];c[a+28>>2]=c[m+28>>2];n=+h[f>>3];o=+h[f+16>>3];c[f+48>>2]=4;if(g<<24>>24==0){gm(b,e,2,f,0)}else{em(b,e,2,f,0)}e=f+52|0;b=c[e>>2]|0;p=+h[f+56+(b-1<<5)+24>>3];g=c[d+8>>2]|0;q=+(~~(+h[g+24>>3]+ +(c[(c[(c[l+8>>2]|0)+184>>2]|0)+((c[g+232>>2]|0)*44|0)+20>>2]|0))|0);if(!(n<o&p<q)){i=j;return}c[e>>2]=b+1;h[f+56+(b<<5)>>3]=n;h[f+56+(b<<5)+8>>3]=p;h[f+56+(b<<5)+16>>3]=o;h[f+56+(b<<5)+24>>3]=q;i=j;return}function Oo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;j=i;i=i+32|0;k=j|0;l=Hx(d|0)|0;Do(k,a,d,0,e);a=f;m=k;c[a>>2]=c[m>>2];c[a+4>>2]=c[m+4>>2];c[a+8>>2]=c[m+8>>2];c[a+12>>2]=c[m+12>>2];c[a+16>>2]=c[m+16>>2];c[a+20>>2]=c[m+20>>2];c[a+24>>2]=c[m+24>>2];c[a+28>>2]=c[m+28>>2];n=+h[f>>3];o=+h[f+16>>3];c[f+48>>2]=1;if(g<<24>>24==0){gm(b,e,2,f,0)}else{em(b,e,2,f,0)}e=f+52|0;b=c[e>>2]|0;p=+h[f+56+(b-1<<5)+8>>3];g=c[d+8>>2]|0;q=+(~~(+h[g+24>>3]- +(c[(c[(c[l+8>>2]|0)+184>>2]|0)+((c[g+232>>2]|0)*44|0)+20>>2]|0))|0);if(!(n<o&q<p)){i=j;return}c[e>>2]=b+1;h[f+56+(b<<5)>>3]=n;h[f+56+(b<<5)+8>>3]=q;h[f+56+(b<<5)+16>>3]=o;h[f+56+(b<<5)+24>>3]=p;i=j;return}function Po(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;e=b|0;f=Ax(a,$w(e)|0,1)|0;a=f|0;Wx(a,85112,304,1)|0;jw(e,a)|0;if((pl(b)|0)!=2){i=d;return f|0}e=b+8|0;b=kk((xF(c[c[(c[e>>2]|0)+104>>2]>>2]|0)|0)+3|0)|0;nb(b|0,80376,(g=i,i=i+8|0,c[g>>2]=c[c[(c[e>>2]|0)+104>>2]>>2],g)|0)|0;i=g;gw(a,166600,b)|0;i=d;return f|0}function Qo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0.0,i=0.0,j=0.0;d=c[(c[(c[a>>2]|0)+8>>2]|0)+96>>2]|0;a=c[(c[(c[b>>2]|0)+8>>2]|0)+96>>2]|0;b=(a|0)!=0;if((d|0)==0){e=b&1;return e|0}if(!b){e=-1;return e|0}f=+h[d+24>>3];g=+h[d+32>>3];i=+h[a+24>>3];j=+h[a+32>>3];if(f>i){e=-1;return e|0}if(f<i){e=1;return e|0}if(g>j){e=-1;return e|0}e=g<j|0;return e|0}function Ro(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=c[(c[a+8>>2]|0)+116>>2]|0;if((b|0)==0){d=a}else{a=b;while(1){b=c[(c[a+8>>2]|0)+116>>2]|0;if((b|0)==0){break}else{a=b}}d=a}a=c[d>>2]&3;b=c[(c[((a|0)==2?d:d-32|0)+28>>2]|0)+8>>2]|0;e=c[b+232>>2]|0;f=c[(c[((a|0)==3?d:d+32|0)+28>>2]|0)+8>>2]|0;d=c[f+232>>2]|0;if((e|0)>(d|0)){g=0;return g|0}if((e|0)<(d|0)){g=1;return g|0}g=(c[b+236>>2]|0)<(c[f+236>>2]|0)|0;return g|0}function So(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=(c[a+8>>2]|0)+180|0;e=(c[b+8>>2]|0)+172|0;f=c[d>>2]|0;g=c[d+4>>2]|0;d=c[e>>2]|0;h=c[e+4>>2]|0;if(!((g|0)>0&(h|0)>0)){i=0;return i|0}if((g|0)<(h|0)){h=c[f>>2]|0;if((h|0)==0){i=0;return i|0}else{j=0;k=h}while(1){h=j+1|0;if((c[((c[k>>2]&3|0)==2?k:k-32|0)+28>>2]|0)==(b|0)){i=k;l=9;break}g=c[f+(h<<2)>>2]|0;if((g|0)==0){i=0;l=9;break}else{j=h;k=g}}if((l|0)==9){return i|0}}else{k=c[d>>2]|0;if((k|0)==0){i=0;return i|0}else{m=0;n=k}while(1){k=m+1|0;if((c[((c[n>>2]&3|0)==3?n:n+32|0)+28>>2]|0)==(a|0)){i=n;l=9;break}j=c[d+(k<<2)>>2]|0;if((j|0)==0){i=0;l=9;break}else{m=k;n=j}}if((l|0)==9){return i|0}}return 0}function To(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=(c[a+8>>2]|0)+188|0;e=(c[b+8>>2]|0)+196|0;f=c[d>>2]|0;g=c[d+4>>2]|0;d=c[e>>2]|0;h=c[e+4>>2]|0;if(!((g|0)>0&(h|0)>0)){i=0;return i|0}if((g|0)<(h|0)){h=c[f>>2]|0;if((h|0)==0){i=0;return i|0}else{j=0;k=h}while(1){h=j+1|0;if((c[((c[k>>2]&3|0)==2?k:k-32|0)+28>>2]|0)==(b|0)){i=k;l=9;break}g=c[f+(h<<2)>>2]|0;if((g|0)==0){i=0;l=9;break}else{j=h;k=g}}if((l|0)==9){return i|0}}else{k=c[d>>2]|0;if((k|0)==0){i=0;return i|0}else{m=0;n=k}while(1){k=m+1|0;if((c[((c[n>>2]&3|0)==3?n:n+32|0)+28>>2]|0)==(a|0)){i=n;l=9;break}j=c[d+(k<<2)>>2]|0;if((j|0)==0){i=0;l=9;break}else{m=k;n=j}}if((l|0)==9){return i|0}}return 0}function Uo(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;b=a;d=a+32|0;e=(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+180|0;f=c[e>>2]|0;if((f|0)==0){g=kk((c[e+4>>2]<<2)+8|0)|0}else{g=mk(f,(c[e+4>>2]<<2)+8|0)|0}c[(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+180>>2]=g;g=(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+184|0;e=c[g>>2]|0;c[g>>2]=e+1;c[(c[(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+180>>2]|0)+(e<<2)>>2]=a;e=(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+180|0;c[(c[e>>2]|0)+(c[e+4>>2]<<2)>>2]=0;e=a-32|0;d=(c[(c[((c[b>>2]&3|0)==2?a:e)+28>>2]|0)+8>>2]|0)+172|0;g=c[d>>2]|0;if((g|0)==0){h=kk((c[d+4>>2]<<2)+8|0)|0}else{h=mk(g,(c[d+4>>2]<<2)+8|0)|0}c[(c[(c[((c[b>>2]&3|0)==2?a:e)+28>>2]|0)+8>>2]|0)+172>>2]=h;h=(c[(c[((c[b>>2]&3|0)==2?a:e)+28>>2]|0)+8>>2]|0)+176|0;d=c[h>>2]|0;c[h>>2]=d+1;c[(c[(c[(c[((c[b>>2]&3|0)==2?a:e)+28>>2]|0)+8>>2]|0)+172>>2]|0)+(d<<2)>>2]=a;d=(c[(c[((c[b>>2]&3|0)==2?a:e)+28>>2]|0)+8>>2]|0)+172|0;c[(c[d>>2]|0)+(c[d+4>>2]<<2)>>2]=0;return a|0}function Vo(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((a|0)==0){cc(95824,144408,117,170808)}b=a;d=c[b>>2]|0;e=(c[(c[((d&3|0)==3?a:a+32|0)+28>>2]|0)+8>>2]|0)+180|0;f=e+4|0;g=f;h=c[g>>2]|0;a:do{if((h|0)>0){i=c[e>>2]|0;j=0;while(1){k=i+(j<<2)|0;l=j+1|0;if((c[k>>2]|0)==(a|0)){break}if((l|0)<(h|0)){j=l}else{m=d;break a}}j=h-1|0;c[f>>2]=j;c[k>>2]=c[i+(j<<2)>>2];c[(c[e>>2]|0)+(c[g>>2]<<2)>>2]=0;m=c[b>>2]|0}else{m=d}}while(0);d=(c[(c[((m&3|0)==2?a:a-32|0)+28>>2]|0)+8>>2]|0)+172|0;m=d+4|0;b=m;g=c[b>>2]|0;if((g|0)<=0){return}e=c[d>>2]|0;k=0;while(1){n=e+(k<<2)|0;f=k+1|0;if((c[n>>2]|0)==(a|0)){break}if((f|0)<(g|0)){k=f}else{o=13;break}}if((o|0)==13){return}o=g-1|0;c[m>>2]=o;c[n>>2]=c[e+(o<<2)>>2];c[(c[d>>2]|0)+(c[b>>2]<<2)>>2]=0;return}function Wo(a){a=a|0;var b=0,d=0,e=0,f=0,g=0;b=a;d=a+32|0;e=(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+204|0;f=c[e>>2]|0;if((f|0)==0){g=kk((c[e+4>>2]<<2)+8|0)|0}else{g=mk(f,(c[e+4>>2]<<2)+8|0)|0}c[(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+204>>2]=g;g=(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+208|0;e=c[g>>2]|0;c[g>>2]=e+1;c[(c[(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+204>>2]|0)+(e<<2)>>2]=a;e=(c[(c[((c[b>>2]&3|0)==3?a:d)+28>>2]|0)+8>>2]|0)+204|0;c[(c[e>>2]|0)+(c[e+4>>2]<<2)>>2]=0;return}function Xo(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;b=(c[(c[((c[a>>2]&3|0)==3?a:a+32|0)+28>>2]|0)+8>>2]|0)+204|0;d=b+4|0;e=d;f=c[e>>2]|0;g=c[b>>2]|0;h=g;a:do{if((f|0)>0){i=0;while(1){j=i+1|0;if((c[h+(i<<2)>>2]|0)==(a|0)){break}if((j|0)<(f|0)){i=j}else{break a}}return}}while(0);if((g|0)==0){k=kk((f<<2)+8|0)|0}else{k=mk(g,(f<<2)+8|0)|0}c[b>>2]=k;f=c[e>>2]|0;c[d>>2]=f+1;c[k+(f<<2)>>2]=a;c[(c[b>>2]|0)+(c[e>>2]<<2)>>2]=0;return}function Yo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;g=jk(64)|0;h=g+32|0;i=h;c[i>>2]=c[i>>2]|3;j=g;k=g;c[k>>2]=c[k>>2]&-4|2;l=g+8|0;c[l>>2]=jk(176)|0;m=h;c[((c[k>>2]&3|0)==3?j:m)+28>>2]=d;d=g-32|0;c[((c[k>>2]&3|0)==2?j:d)+28>>2]=e;a[(c[l>>2]|0)+112|0]=1;if((f|0)==0){c[(c[l>>2]|0)+156>>2]=1;b[(c[l>>2]|0)+154>>1]=1;b[(c[l>>2]|0)+168>>1]=1;b[(c[l>>2]|0)+170>>1]=1;return j|0}e=f;c[k>>2]=c[k>>2]&15|c[e>>2]&-16;c[i>>2]=c[i>>2]&15|c[e>>2]&-16;i=f+8|0;b[(c[l>>2]|0)+168>>1]=b[(c[i>>2]|0)+168>>1]|0;b[(c[l>>2]|0)+154>>1]=b[(c[i>>2]|0)+154>>1]|0;c[(c[l>>2]|0)+156>>2]=c[(c[i>>2]|0)+156>>2];b[(c[l>>2]|0)+170>>1]=b[(c[i>>2]|0)+170>>1]|0;h=c[((c[k>>2]&3|0)==3?j:m)+28>>2]|0;m=c[e>>2]&3;n=f+32|0;do{if((h|0)==(c[((m|0)==3?f:n)+28>>2]|0)){o=(c[l>>2]|0)+16|0;p=(c[i>>2]|0)+16|0;c[o>>2]=c[p>>2];c[o+4>>2]=c[p+4>>2];c[o+8>>2]=c[p+8>>2];c[o+12>>2]=c[p+12>>2];c[o+16>>2]=c[p+16>>2];c[o+20>>2]=c[p+20>>2];c[o+24>>2]=c[p+24>>2];c[o+28>>2]=c[p+28>>2];c[o+32>>2]=c[p+32>>2];c[o+36>>2]=c[p+36>>2];q=f-32|0}else{p=f-32|0;if((h|0)!=(c[((m|0)==2?f:p)+28>>2]|0)){q=p;break}o=(c[l>>2]|0)+16|0;r=(c[i>>2]|0)+56|0;c[o>>2]=c[r>>2];c[o+4>>2]=c[r+4>>2];c[o+8>>2]=c[r+8>>2];c[o+12>>2]=c[r+12>>2];c[o+16>>2]=c[r+16>>2];c[o+20>>2]=c[r+20>>2];c[o+24>>2]=c[r+24>>2];c[o+28>>2]=c[r+28>>2];c[o+32>>2]=c[r+32>>2];c[o+36>>2]=c[r+36>>2];q=p}}while(0);m=c[((c[k>>2]&3|0)==2?j:d)+28>>2]|0;d=c[e>>2]&3;do{if((m|0)==(c[((d|0)==2?f:q)+28>>2]|0)){e=(c[l>>2]|0)+56|0;k=(c[i>>2]|0)+56|0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];c[e+16>>2]=c[k+16>>2];c[e+20>>2]=c[k+20>>2];c[e+24>>2]=c[k+24>>2];c[e+28>>2]=c[k+28>>2];c[e+32>>2]=c[k+32>>2];c[e+36>>2]=c[k+36>>2]}else{if((m|0)!=(c[((d|0)==3?f:n)+28>>2]|0)){break}k=(c[l>>2]|0)+56|0;e=(c[i>>2]|0)+16|0;c[k>>2]=c[e>>2];c[k+4>>2]=c[e+4>>2];c[k+8>>2]=c[e+8>>2];c[k+12>>2]=c[e+12>>2];c[k+16>>2]=c[e+16>>2];c[k+20>>2]=c[e+20>>2];c[k+24>>2]=c[e+24>>2];c[k+28>>2]=c[e+28>>2];c[k+32>>2]=c[e+32>>2];c[k+36>>2]=c[e+36>>2]}}while(0);n=(c[i>>2]|0)+172|0;if((c[n>>2]|0)==0){c[n>>2]=g}c[(c[l>>2]|0)+116>>2]=f;return j|0}function Zo(a,b,c){a=a|0;b=b|0;c=c|0;return Uo(Yo(a,b,c)|0)|0}function _o(a,b){a=a|0;b=b|0;var d=0,e=0;d=a+8|0;a=b+8|0;c[(c[a>>2]|0)+164>>2]=c[(c[d>>2]|0)+180>>2];e=c[(c[a>>2]|0)+164>>2]|0;if((e|0)!=0){c[(c[e+8>>2]|0)+168>>2]=b}c[(c[d>>2]|0)+180>>2]=b;c[(c[a>>2]|0)+168>>2]=0;if((c[(c[a>>2]|0)+164>>2]|0)==(b|0)){cc(120656,144408,215,170688)}else{return}}function $o(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if((a|0)==(b|0)){cc(112448,144408,220,170672)}d=b+8|0;e=(c[d>>2]|0)+164|0;if((c[e>>2]|0)!=0){cc(105872,144408,221,170672)}f=a+8|0;c[e>>2]=c[(c[f>>2]|0)+164>>2];e=c[(c[f>>2]|0)+164>>2]|0;if((e|0)!=0){c[(c[e+8>>2]|0)+168>>2]=b}c[(c[d>>2]|0)+168>>2]=a;c[(c[f>>2]|0)+164>>2]=b;return}function ap(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a+8|0;a=c[(c[d>>2]|0)+180>>2]|0;e=a;if((a|0)==0|(e|0)==(b|0)){f=e}else{e=a;while(1){a=c[(c[e+8>>2]|0)+164>>2]|0;g=a;if((a|0)==0|(g|0)==(b|0)){f=g;break}else{e=a}}}if((f|0)==0){cc(100160,144408,231,170784)}f=b+8|0;b=c[f>>2]|0;e=c[b+164>>2]|0;if((e|0)==0){h=b;i=0}else{c[(c[e+8>>2]|0)+168>>2]=c[b+168>>2];b=c[f>>2]|0;h=b;i=c[b+164>>2]|0}b=c[h+168>>2]|0;if((b|0)==0){c[(c[d>>2]|0)+180>>2]=i;return}else{c[(c[b+8>>2]|0)+164>>2]=i;return}}function bp(b){b=b|0;var d=0,e=0,f=0;d=jk(52)|0;e=d;c[e>>2]=c[e>>2]&-4|1;e=jk(304)|0;f=d+8|0;c[f>>2]=e;c[d+12>>2]=b;a[e+156|0]=1;h[(c[f>>2]|0)+96>>3]=1.0;h[(c[f>>2]|0)+88>>3]=1.0;h[(c[f>>2]|0)+80>>3]=1.0;c[(c[f>>2]|0)+216>>2]=1;c[(c[f>>2]|0)+176>>2]=0;e=jk(20)|0;c[(c[f>>2]|0)+172>>2]=e;c[(c[f>>2]|0)+184>>2]=0;e=jk(20)|0;c[(c[f>>2]|0)+180>>2]=e;e=b+8|0;c[(c[f>>2]|0)+164>>2]=c[(c[e>>2]|0)+180>>2];b=c[(c[f>>2]|0)+164>>2]|0;if((b|0)!=0){c[(c[b+8>>2]|0)+168>>2]=d}b=d;c[(c[e>>2]|0)+180>>2]=b;c[(c[f>>2]|0)+168>>2]=0;if((c[(c[f>>2]|0)+164>>2]|0)==(b|0)){cc(120656,144408,215,170688);return 0}else{b=(c[e>>2]|0)+220|0;c[b>>2]=(c[b>>2]|0)+1;return d|0}return 0}function cp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=d;f=d+32|0;g=(c[(c[((c[e>>2]&3|0)==3?d:f)+28>>2]|0)+8>>2]|0)+188|0;h=c[g>>2]|0;if((h|0)==0){i=kk((c[g+4>>2]<<2)+8|0)|0}else{i=mk(h,(c[g+4>>2]<<2)+8|0)|0}c[(c[(c[((c[e>>2]&3|0)==3?d:f)+28>>2]|0)+8>>2]|0)+188>>2]=i;i=(c[(c[((c[e>>2]&3|0)==3?d:f)+28>>2]|0)+8>>2]|0)+192|0;g=c[i>>2]|0;c[i>>2]=g+1;c[(c[(c[(c[((c[e>>2]&3|0)==3?d:f)+28>>2]|0)+8>>2]|0)+188>>2]|0)+(g<<2)>>2]=d;g=(c[(c[((c[e>>2]&3|0)==3?d:f)+28>>2]|0)+8>>2]|0)+188|0;c[(c[g>>2]|0)+(c[g+4>>2]<<2)>>2]=0;g=d-32|0;f=(c[(c[((c[e>>2]&3|0)==2?d:g)+28>>2]|0)+8>>2]|0)+196|0;i=c[f>>2]|0;if((i|0)==0){j=kk((c[f+4>>2]<<2)+8|0)|0}else{j=mk(i,(c[f+4>>2]<<2)+8|0)|0}c[(c[(c[((c[e>>2]&3|0)==2?d:g)+28>>2]|0)+8>>2]|0)+196>>2]=j;j=(c[(c[((c[e>>2]&3|0)==2?d:g)+28>>2]|0)+8>>2]|0)+200|0;f=c[j>>2]|0;c[j>>2]=f+1;c[(c[(c[(c[((c[e>>2]&3|0)==2?d:g)+28>>2]|0)+8>>2]|0)+196>>2]|0)+(f<<2)>>2]=d;f=(c[(c[((c[e>>2]&3|0)==2?d:g)+28>>2]|0)+8>>2]|0)+196|0;c[(c[f>>2]|0)+(c[f+4>>2]<<2)>>2]=0;a[(c[b+8>>2]|0)+228|0]=1;a[(c[(Ix(b|0)|0)+8>>2]|0)+228|0]=1;return}function dp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((a|0)==0){cc(95824,144408,269,170760)}b=c[(c[a+8>>2]|0)+116>>2]|0;do{if((b|0)!=0){d=(c[b+8>>2]|0)+172|0;if((c[d>>2]|0)!=(a|0)){break}c[d>>2]=0}}while(0);b=a;d=c[b>>2]|0;e=(c[(c[((d&3|0)==3?a:a+32|0)+28>>2]|0)+8>>2]|0)+188|0;f=e+4|0;g=f;h=c[g>>2]|0;a:do{if((h|0)>0){i=c[e>>2]|0;j=0;while(1){k=i+(j<<2)|0;l=j+1|0;if((c[k>>2]|0)==(a|0)){break}if((l|0)<(h|0)){j=l}else{m=d;break a}}j=h-1|0;c[f>>2]=j;c[k>>2]=c[i+(j<<2)>>2];c[(c[e>>2]|0)+(c[g>>2]<<2)>>2]=0;m=c[b>>2]|0}else{m=d}}while(0);d=(c[(c[((m&3|0)==2?a:a-32|0)+28>>2]|0)+8>>2]|0)+196|0;m=d+4|0;b=m;g=c[b>>2]|0;if((g|0)<=0){return}e=c[d>>2]|0;k=0;while(1){n=e+(k<<2)|0;f=k+1|0;if((c[n>>2]|0)==(a|0)){break}if((f|0)<(g|0)){k=f}else{o=16;break}}if((o|0)==16){return}o=g-1|0;c[m>>2]=o;c[n>>2]=c[e+(o<<2)>>2];c[(c[d>>2]|0)+(c[b>>2]<<2)>>2]=0;return}function ep(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,j=0,k=0;f=i;g=a+8|0;a=(c[g>>2]|0)+172|0;h=c[a>>2]|0;if((h|0)==(d|0)){Fv(0,94472,(j=i,i=i+1|0,i=i+7&-8,c[j>>2]=0,j)|0)|0;i=j;i=f;return}if((h|0)!=0){cc(89112,144408,340,170264)}c[a>>2]=d;a=(c[d+8>>2]|0)+170|0;h=b[(c[g>>2]|0)+170>>1]|0;if((e[a>>1]|0)>>>0<(h&65535)>>>0){b[a>>1]=h;k=d}else{k=d}while(1){d=k+8|0;h=(c[d>>2]|0)+168|0;b[h>>1]=(b[h>>1]|0)+(b[(c[g>>2]|0)+168>>1]|0);h=(c[d>>2]|0)+154|0;b[h>>1]=(b[h>>1]|0)+(b[(c[g>>2]|0)+154>>1]|0);h=(c[d>>2]|0)+156|0;c[h>>2]=(c[h>>2]|0)+(c[(c[g>>2]|0)+156>>2]|0);h=c[(c[d>>2]|0)+172>>2]|0;if((h|0)==0){break}k=h}i=f;return}function fp(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;e=d+8|0;d=c[e>>2]|0;f=c[d+172>>2]|0;if((f|0)==0){g=d;h=g+172|0;c[h>>2]=0;return}else{i=f;j=d}while(1){d=i;f=i+8|0;k=(c[f>>2]|0)+168|0;b[k>>1]=(b[k>>1]|0)-(b[j+168>>1]|0);k=(c[f>>2]|0)+154|0;b[k>>1]=(b[k>>1]|0)-(b[(c[e>>2]|0)+154>>1]|0);k=(c[f>>2]|0)+156|0;c[k>>2]=(c[k>>2]|0)-(c[(c[e>>2]|0)+156>>2]|0);k=c[f>>2]|0;f=c[k+172>>2]|0;do{if((b[k+168>>1]|0)==0){l=i;m=c[l>>2]|0;n=i+32|0;o=(c[(c[((m&3|0)==3?d:n)+28>>2]|0)+8>>2]|0)+180|0;p=c[o>>2]|0;q=c[p>>2]|0;if((q|0)==0){r=m}else{s=0;t=o;o=q;q=p;p=m;while(1){a:do{if((o|0)==(d|0)){m=t+4|0;u=m;v=c[u>>2]|0;if((v|0)<=0){w=p;break}x=q;y=0;while(1){z=x+(y<<2)|0;A=y+1|0;if((c[z>>2]|0)==(d|0)){break}if((A|0)<(v|0)){y=A}else{w=p;break a}}y=v-1|0;c[m>>2]=y;c[z>>2]=c[x+(y<<2)>>2];c[(c[t>>2]|0)+(c[u>>2]<<2)>>2]=0;w=c[l>>2]|0}else{w=p}}while(0);y=s+1|0;A=(c[(c[((w&3|0)==3?d:n)+28>>2]|0)+8>>2]|0)+180|0;B=c[A>>2]|0;C=c[B+(y<<2)>>2]|0;if((C|0)==0){r=w;break}else{s=y;t=A;o=C;q=B;p=w}}}p=i-32|0;q=(c[(c[((r&3|0)==2?d:p)+28>>2]|0)+8>>2]|0)+172|0;o=c[q>>2]|0;t=c[o>>2]|0;if((t|0)==0){break}else{D=0;E=q;F=t;G=o;H=r}while(1){b:do{if((F|0)==(d|0)){o=E+4|0;t=o;q=c[t>>2]|0;if((q|0)<=0){I=H;break}s=G;n=0;while(1){J=s+(n<<2)|0;B=n+1|0;if((c[J>>2]|0)==(d|0)){break}if((B|0)<(q|0)){n=B}else{I=H;break b}}n=q-1|0;c[o>>2]=n;c[J>>2]=c[s+(n<<2)>>2];c[(c[E>>2]|0)+(c[t>>2]<<2)>>2]=0;I=c[l>>2]|0}else{I=H}}while(0);n=D+1|0;u=(c[(c[((I&3|0)==2?d:p)+28>>2]|0)+8>>2]|0)+172|0;x=c[u>>2]|0;m=c[x+(n<<2)>>2]|0;if((m|0)==0){break}else{D=n;E=u;F=m;G=x;H=I}}}}while(0);c:do{if((a[(c[i+8>>2]|0)+112|0]|0)==1){k=d;do{p=c[(c[((c[k>>2]&3|0)==2?k:k-32|0)+28>>2]|0)+8>>2]|0;if((a[p+156|0]|0)!=1){break c}l=p+180|0;if((c[l+4>>2]|0)!=1){break c}k=c[c[l>>2]>>2]|0;l=k+8|0;p=(c[l>>2]|0)+168|0;b[p>>1]=(b[p>>1]|0)-(b[(c[e>>2]|0)+168>>1]|0);p=(c[l>>2]|0)+154|0;b[p>>1]=(b[p>>1]|0)-(b[(c[e>>2]|0)+154>>1]|0);p=(c[l>>2]|0)+156|0;c[p>>2]=(c[p>>2]|0)-(c[(c[e>>2]|0)+156>>2]|0);}while((a[(c[l>>2]|0)+112|0]|0)==1)}}while(0);d=c[e>>2]|0;if((f|0)==0){g=d;break}else{i=f;j=d}}h=g+172|0;c[h>>2]=0;return}function gp(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0.0;e=d+8|0;f=c[e>>2]|0;g=c[f+180>>2]|0;if((g|0)==0){i=f}else{f=g;do{g=f+8|0;j=c[g>>2]|0;k=c[j+188>>2]|0;do{if((k|0)==0){l=j}else{m=c[k>>2]|0;if((m|0)==0){l=j;break}else{n=0;o=m}while(1){m=c[o>>2]&3;p=c[((m|0)==3?o:o+32|0)+28>>2]|0;q=c[p+8>>2]|0;r=c[q+236>>2]|0;s=c[(c[(c[((m|0)==2?o:o-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;m=(r|0)<(s|0);t=m?s:r;u=c[q+232>>2]|0;q=Hx(p|0)|0;p=(m?r:s)+1|0;a:do{if((p|0)<(t|0)){s=c[(c[(c[q+8>>2]|0)+184>>2]|0)+(u*44|0)+4>>2]|0;r=p;while(1){m=c[(c[s+(r<<2)>>2]|0)+8>>2]|0;v=a[m+156|0]|0;if((v<<24>>24|0)==1){if((c[m+104>>2]|0)!=0){w=r;break a}}else if((v<<24>>24|0)==0){w=r;break a}v=r+1|0;if((v|0)<(t|0)){r=v}else{w=v;break}}}else{w=p}}while(0);if((w|0)==(t|0)){p=o;do{u=p+8|0;a[(c[u>>2]|0)+113|0]=1;p=c[(c[u>>2]|0)+172>>2]|0;}while((p|0)!=0)}p=n+1|0;t=c[g>>2]|0;u=c[(c[t+188>>2]|0)+(p<<2)>>2]|0;if((u|0)==0){l=t;break}else{n=p;o=u}}}}while(0);j=l+204|0;if((c[j+4>>2]|0)>0){k=0;u=j;while(1){j=c[(c[u>>2]|0)+(k<<2)>>2]|0;p=c[j>>2]&3;t=c[(c[((p|0)==2?j:j-32|0)+28>>2]|0)+8>>2]|0;q=c[t+232>>2]|0;r=c[((p|0)==3?j:j+32|0)+28>>2]|0;p=c[r+8>>2]|0;do{if((q|0)==(c[p+232>>2]|0)){s=c[p+236>>2]|0;v=c[t+236>>2]|0;m=(s|0)<(v|0);x=m?v:s;y=Hx(r|0)|0;z=(m?s:v)+1|0;b:do{if((z|0)<(x|0)){v=c[(c[(c[y+8>>2]|0)+184>>2]|0)+(q*44|0)+4>>2]|0;s=z;while(1){m=c[(c[v+(s<<2)>>2]|0)+8>>2]|0;A=a[m+156|0]|0;if((A<<24>>24|0)==1){if((c[m+104>>2]|0)!=0){B=s;break b}}else if((A<<24>>24|0)==0){B=s;break b}A=s+1|0;if((A|0)<(x|0)){s=A}else{B=A;break}}}else{B=z}}while(0);if((B|0)==(x|0)){C=j}else{break}do{z=C+8|0;a[(c[z>>2]|0)+113|0]=1;C=c[(c[z>>2]|0)+172>>2]|0;}while((C|0)!=0)}}while(0);j=k+1|0;q=c[g>>2]|0;r=q+204|0;if((j|0)<(c[r+4>>2]|0)){k=j;u=r}else{D=q;break}}}else{D=l}f=c[D+164>>2]|0;}while((f|0)!=0);i=c[e>>2]|0}f=c[i+184>>2]|0;if((c[f+40>>2]|0)==0){if((c[i+172>>2]|0)>0){E=26}}else{E=26}c:do{if((E|0)==26){D=c[f+4>>2]|0;l=c[D>>2]|0;if((l|0)==0){break}else{F=0;G=l}d:while(1){l=c[(c[G+8>>2]|0)+196>>2]|0;C=c[l>>2]|0;if((C|0)!=0){B=0;o=C;do{C=c[o+8>>2]|0;if((c[C+96>>2]|0)!=0){if((a[C+113|0]|0)==0){break d}}B=B+1|0;o=c[l+(B<<2)>>2]|0;}while((o|0)!=0)}F=F+1|0;G=c[D+(F<<2)>>2]|0;if((G|0)==0){break c}}if((b[i+224>>1]|0)!=0){cc(118328,135760,190,171056);return 0}D=(b[i+226>>1]|0)+3|0;if((f|0)==0){H=kk(D*44|0)|0}else{H=mk(f,D*44|0)|0}c[(c[e>>2]|0)+184>>2]=H+44;D=c[e>>2]|0;o=b[D+226>>1]|0;B=o<<16>>16;l=c[D+184>>2]|0;if(o<<16>>16>-1){o=B;D=l;while(1){C=o-1|0;tF(D+(o*44|0)|0,D+(C*44|0)|0,44)|0;n=c[(c[e>>2]|0)+184>>2]|0;if((o|0)>0){o=C;D=n}else{I=-1;J=n;break}}}else{I=B;J=l}c[J+(I*44|0)+8>>2]=0;c[(c[(c[e>>2]|0)+184>>2]|0)+(I*44|0)>>2]=0;D=jk(8)|0;c[(c[(c[e>>2]|0)+184>>2]|0)+(I*44|0)+12>>2]=D;c[(c[(c[e>>2]|0)+184>>2]|0)+(I*44|0)+4>>2]=D;c[(c[(c[e>>2]|0)+184>>2]|0)+(I*44|0)+40>>2]=0;c[(c[(c[e>>2]|0)+184>>2]|0)+(I*44|0)+20>>2]=1;c[(c[(c[e>>2]|0)+184>>2]|0)+(I*44|0)+16>>2]=1;c[(c[(c[e>>2]|0)+184>>2]|0)+(I*44|0)+28>>2]=1;c[(c[(c[e>>2]|0)+184>>2]|0)+(I*44|0)+24>>2]=1;D=(c[e>>2]|0)+224|0;b[D>>1]=(b[D>>1]|0)-1}}while(0);mp(d);I=c[(c[e>>2]|0)+180>>2]|0;if((I|0)==0){K=0;return K|0}else{L=0;M=I}while(1){I=M+8|0;J=c[I>>2]|0;H=c[J+188>>2]|0;do{if((H|0)==0){N=L;O=J}else{f=c[H>>2]|0;if((f|0)==0){P=L;Q=J}else{i=0;G=L;F=f;while(1){f=c[F+8>>2]|0;E=c[f+96>>2]|0;do{if((E|0)==0){R=G}else{if((a[f+113|0]|0)==0){hp(F);R=1;break}if((c[(c[e>>2]|0)+116>>2]&1|0)==0){h[f+136>>3]=+h[E+24>>3];R=G;break}else{h[f+136>>3]=+h[E+32>>3];R=G;break}}}while(0);E=i+1|0;f=c[I>>2]|0;D=c[(c[f+188>>2]|0)+(E<<2)>>2]|0;if((D|0)==0){P=R;Q=f;break}else{i=E;G=R;F=D}}}F=Q+204|0;if((c[F+4>>2]|0)>0){S=0;T=P;U=F}else{N=P;O=Q;break}while(1){F=c[(c[U>>2]|0)+(S<<2)>>2]|0;G=c[F>>2]&3;i=c[((G|0)==3?F:F+32|0)+28>>2]|0;D=c[((G|0)==2?F:F-32|0)+28>>2]|0;do{if((c[(c[i+8>>2]|0)+232>>2]|0)!=(c[(c[D+8>>2]|0)+232>>2]|0)|(i|0)==(D|0)){V=T}else{G=F+8|0;E=c[G>>2]|0;f=c[E+172>>2]|0;if((f|0)==0){W=G;X=E}else{o=f;while(1){f=o+8|0;n=c[f>>2]|0;C=c[n+172>>2]|0;if((C|0)==0){W=f;X=n;break}else{o=C}}}a[E+113|0]=a[X+113|0]|0;o=c[G>>2]|0;C=c[o+96>>2]|0;if((C|0)==0){V=T;break}if((a[o+113|0]|0)==0){hp(F);V=1;break}else{Y=+h[((c[(c[e>>2]|0)+116>>2]&1|0)==0?C+24|0:C+32|0)>>3];C=(c[W>>2]|0)+136|0;Z=+h[C>>3];h[C>>3]=Y>Z?Y:Z;V=T;break}}}while(0);F=S+1|0;D=c[I>>2]|0;i=D+204|0;if((F|0)<(c[i+4>>2]|0)){S=F;T=V;U=i}else{N=V;O=D;break}}}}while(0);I=c[O+164>>2]|0;if((I|0)==0){break}else{L=N;M=I}}if((N|0)==0){K=0;return K|0}np(d);K=N;return K|0}function hp(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0.0,G=0,H=0.0,I=0.0,J=0;d=i;i=i+16|0;e=d|0;f=b+8|0;if((c[(c[f>>2]|0)+96>>2]|0)==0){i=d;return}g=b;j=b+32|0;k=Hx(c[((c[g>>2]&3|0)==3?b:j)+28>>2]|0)|0;l=c[g>>2]&3;m=c[(c[((l|0)==3?b:j)+28>>2]|0)+8>>2]|0;n=c[m+232>>2]|0;o=k+8|0;p=n-1|0;q=c[(c[o>>2]|0)+184>>2]|0;r=c[q+(p*44|0)+4>>2]|0;s=c[q+(p*44|0)>>2]|0;q=e+8|0;c[q>>2]=-1;t=e|0;c[t>>2]=-1;u=e+12|0;c[u>>2]=s;v=e+4|0;c[v>>2]=s;e=b-32|0;w=c[m+236>>2]|0;m=c[(c[(c[((l|0)==2?b:e)+28>>2]|0)+8>>2]|0)+236>>2]|0;l=(w|0)>(m|0);x=l?w:m;y=l?m:w;w=0;m=s;l=-1;z=s;while(1){s=m-1|0;if((w|0)>(s|0)){A=l;B=z;break}ip(c[(c[r+(w<<2)>>2]|0)+8>>2]|0,t,y,x);if((w|0)!=(s|0)){ip(c[(c[r+(s<<2)>>2]|0)+8>>2]|0,t,y,x)}C=c[v>>2]|0;D=c[t>>2]|0;if((C-D|0)<2){A=D;B=C;break}else{w=w+1|0;m=s;l=D;z=C}}if((A|0)>(B|0)){E=(c[u>>2]|0)+(c[q>>2]|0)|0}else{E=A+B|0}B=(E+1|0)/2|0;E=c[o>>2]|0;A=c[E+184>>2]|0;q=c[A+(p*44|0)+4>>2]|0;u=c[q>>2]|0;if((u|0)==0){F=+h[(c[(c[c[A+(n*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]+ +(c[A+(n*44|0)+20>>2]|0)+ +(c[E+240>>2]|0)}else{F=+h[(c[u+8>>2]|0)+24>>3]- +(c[A+(p*44|0)+16>>2]|0)}u=~~F;E=A+(p*44|0)|0;if((q|0)==0){G=kk((c[E>>2]<<2)+8|0)|0}else{G=mk(q,(c[E>>2]<<2)+8|0)|0}E=G;c[(c[(c[o>>2]|0)+184>>2]|0)+(p*44|0)+4>>2]=E;G=c[(c[(c[o>>2]|0)+184>>2]|0)+(p*44|0)>>2]|0;if((G|0)>(B|0)){q=G;while(1){G=q-1|0;A=c[E+(G<<2)>>2]|0;c[E+(q<<2)>>2]=A;n=(c[A+8>>2]|0)+236|0;c[n>>2]=(c[n>>2]|0)+1;if((G|0)>(B|0)){q=G}else{break}}}q=bp(k)|0;k=E+(B<<2)|0;c[k>>2]=q;G=q+8|0;c[(c[G>>2]|0)+236>>2]=B;c[(c[G>>2]|0)+232>>2]=p;G=(c[(c[o>>2]|0)+184>>2]|0)+(p*44|0)|0;B=(c[G>>2]|0)+1|0;c[G>>2]=B;c[E+(B<<2)>>2]=0;B=c[k>>2]|0;k=c[(c[f>>2]|0)+96>>2]|0;F=+h[k+24>>3];H=+h[k+32>>3];k=(c[(c[o>>2]|0)+116>>2]&1|0)==0;E=B+8|0;h[(c[E>>2]|0)+80>>3]=k?H:F;G=c[E>>2]|0;q=~~(+h[G+80>>3]*.5);I=(k?F:H)*.5;h[G+96>>3]=I;h[(c[E>>2]|0)+88>>3]=I;c[(c[E>>2]|0)+104>>2]=c[(c[f>>2]|0)+96>>2];h[(c[E>>2]|0)+24>>3]=+(q+u|0);u=Zo(B,c[((c[g>>2]&3|0)==3?b:j)+28>>2]|0,b)|0;f=u+8|0;h[(c[f>>2]|0)+16>>3]=-0.0- +h[(c[E>>2]|0)+88>>3];h[(c[f>>2]|0)+56>>3]=+h[(c[(c[((c[g>>2]&3|0)==3?b:j)+28>>2]|0)+8>>2]|0)+96>>3];a[(c[f>>2]|0)+112|0]=4;f=Zo(B,c[((c[g>>2]&3|0)==2?b:e)+28>>2]|0,b)|0;B=f+8|0;h[(c[B>>2]|0)+16>>3]=+h[(c[E>>2]|0)+96>>3];h[(c[B>>2]|0)+56>>3]=+h[(c[(c[((c[g>>2]&3|0)==2?b:e)+28>>2]|0)+8>>2]|0)+88>>3];a[(c[B>>2]|0)+112|0]=4;B=c[(c[o>>2]|0)+184>>2]|0;e=B+(p*44|0)+16|0;if((c[e>>2]|0)<(q|0)){c[e>>2]=q;J=c[(c[o>>2]|0)+184>>2]|0}else{J=B}B=J+(p*44|0)+20|0;if((c[B>>2]|0)<(q|0)){c[B>>2]=q}c[(c[E>>2]|0)+112>>2]=b;i=d;return}function ip(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if((a[b+156|0]|0)!=1){return}g=c[b+236>>2]|0;h=b+180|0;if((c[b+176>>2]|0)!=0){b=c[h>>2]|0;i=c[b>>2]|0;if((i|0)==0){return}else{j=0;k=0;l=0;m=i}while(1){i=c[(c[(c[((c[m>>2]&3|0)==2?m:m-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;if((i|0)>(e|0)){n=(i|0)<(f|0)?l:1;o=k}else{n=l;o=1}i=j+1|0;p=c[b+(i<<2)>>2]|0;if((p|0)==0){break}else{j=i;k=o;l=n;m=p}}if(o<<24>>24!=0&n<<24>>24==0){c[d>>2]=g+1}if(!(n<<24>>24!=0&o<<24>>24==0)){return}c[d+4>>2]=g-1;return}if((c[h+4>>2]|0)!=2){cc(80712,135760,63,169976)}o=c[h>>2]|0;h=c[o>>2]|0;n=c[o+4>>2]|0;o=c[(c[(c[((c[h>>2]&3|0)==2?h:h-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;h=c[(c[(c[((c[n>>2]&3|0)==2?n:n-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;n=(o|0)>(h|0);m=n?o:h;l=n?h:o;if((m|0)<=(e|0)){c[d>>2]=g;c[d+8>>2]=g;return}if((l|0)>=(f|0)){c[d+4>>2]=g;c[d+12>>2]=g;return}o=(l|0)<(e|0);h=(m|0)>(f|0);if(o&h){return}if(o){q=13}else{if((l|0)==(e|0)&(m|0)<(f|0)){q=13}}if((q|0)==13){c[d+8>>2]=g}do{if(!h){if((m|0)==(f|0)&(l|0)>(e|0)){break}return}}while(0);c[d+12>>2]=g;return}function jp(d,e){d=d|0;e=e|0;var f=0,g=0,j=0,k=0.0,l=0.0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;f=i;if((a[213992]|0)!=0){ym()}a[172624]=0;c[53542]=d;g=d|0;j=((Mw(Ix(g)|0)|0)<<2)+4|0;c[53516]=jk(j)|0;c[53514]=jk(j)|0;c[53656]=8;c[53660]=24;h[21677]=.995;j=ew(g,149032)|0;do{if((j|0)!=0){k=+rF(j);if(k<=0.0){break}l=k*+(c[53656]|0);if(l<1.0){m=1}else{m=~~l}c[53656]=m;l=k*+(c[53660]|0);if(l<1.0){n=1}else{n=~~l}c[53660]=n}}while(0);n=d+8|0;m=c[n>>2]|0;if((b[m+128>>1]&16)!=0){j=(b[m+226>>1]|0)+2|0;m=jk(j<<2)|0;Ap(d,m,j,0)|0;eF(m)}Zn(d);qo(d,1);qp(d);xp(d);c[53706]=b[(c[n>>2]|0)+224>>1]|0;c[53708]=b[(c[n>>2]|0)+226>>1]|0;m=c[n>>2]|0;j=m+204|0;do{if((c[j+4>>2]|0)>0){p=0;q=0;r=m;s=j;do{c[r+180>>2]=c[(c[s>>2]|0)+(q<<2)>>2];do{if((q|0)>0){t=c[n>>2]|0;u=b[t+224>>1]|0;if(u<<16>>16>(b[t+226>>1]|0)){break}v=u<<16>>16;u=t;while(1){t=c[u+184>>2]|0;w=t+(v*44|0)+4|0;c[w>>2]=(c[w>>2]|0)+(c[t+(v*44|0)>>2]<<2);c[(c[(c[n>>2]|0)+184>>2]|0)+(v*44|0)>>2]=0;t=c[n>>2]|0;if((v|0)<(b[t+226>>1]|0)){v=v+1|0;u=t}else{break}}}}while(0);p=(kp(d,0,e)|0)+p|0;q=q+1|0;r=c[n>>2]|0;s=r+204|0;x=c[s+4>>2]|0;}while((q|0)<(x|0));if((x|0)<2){y=r;z=p;break}else{A=0;B=0;C=s}while(1){q=c[(c[C>>2]|0)+(A<<2)>>2]|0;if((B|0)!=0){c[(c[B+8>>2]|0)+164>>2]=q}u=q+8|0;c[(c[u>>2]|0)+168>>2]=B;v=c[(c[u>>2]|0)+164>>2]|0;if((v|0)==0){D=q}else{q=v;while(1){v=c[(c[q+8>>2]|0)+164>>2]|0;if((v|0)==0){break}else{q=v}}D=q}v=A+1|0;u=(c[n>>2]|0)+204|0;E=u+4|0;if((v|0)<(c[E>>2]|0)){A=v;B=D;C=u}else{break}}c[E>>2]=1;s=c[n>>2]|0;c[s+180>>2]=c[c[s+204>>2]>>2];b[(c[n>>2]|0)+224>>1]=c[53706];b[(c[n>>2]|0)+226>>1]=c[53708];y=c[n>>2]|0;z=p}else{y=m;z=0}}while(0);m=b[y+224>>1]|0;if(m<<16>>16>(b[y+226>>1]|0)){F=y}else{E=c[o>>2]|0;C=m<<16>>16;m=y;while(1){y=c[m+184>>2]|0;c[y+(C*44|0)>>2]=c[y+(C*44|0)+8>>2];y=c[(c[n>>2]|0)+184>>2]|0;c[y+(C*44|0)+4>>2]=c[y+(C*44|0)+12>>2];y=c[n>>2]|0;D=c[y+184>>2]|0;a:do{if((c[D+(C*44|0)>>2]|0)>0){B=0;A=D;x=y;while(1){j=c[(c[A+(C*44|0)+4>>2]|0)+(B<<2)>>2]|0;if((j|0)==0){break}c[(c[j+8>>2]|0)+236>>2]=B;j=B+1|0;s=c[n>>2]|0;r=c[s+184>>2]|0;if((j|0)<(c[r+(C*44|0)>>2]|0)){B=j;A=r;x=s}else{G=s;break a}}if((a[213992]|0)==0){H=x}else{A=$w(g)|0;q=c[(c[(c[n>>2]|0)+184>>2]|0)+(C*44|0)>>2]|0;gc(E|0,137088,(I=i,i=i+32|0,c[I>>2]=A,c[I+8>>2]=C,c[I+16>>2]=B,c[I+24>>2]=q,I)|0)|0;i=I;H=c[n>>2]|0}c[(c[H+184>>2]|0)+(C*44|0)>>2]=B;G=c[n>>2]|0}else{G=y}}while(0);if((C|0)<(b[G+226>>1]|0)){C=C+1|0;m=G}else{F=G;break}}}do{if((c[F+172>>2]|0)<1){J=z}else{G=z;m=1;C=F;while(1){K=(lp(c[(c[C+176>>2]|0)+(m<<2)>>2]|0,e)|0)+G|0;H=c[n>>2]|0;L=c[H+172>>2]|0;if((m|0)<(L|0)){G=K;m=m+1|0;C=H}else{break}}if((L|0)<=0){J=K;break}C=ew(g,79488)|0;if((C|0)!=0){if((Km(C)|0)<<24>>24==0){J=K;break}}go(d);a[172624]=1;J=kp(d,2,e)|0}}while(0);e=c[53514]|0;if((e|0)!=0){eF(e);c[53514]=0}e=c[53516]|0;if((e|0)!=0){eF(e);c[53516]=0}e=c[n>>2]|0;if((c[e+172>>2]|0)<1){M=e}else{d=1;K=e;while(1){np(c[(c[K+176>>2]|0)+(d<<2)>>2]|0);e=c[n>>2]|0;if((d|0)<(c[e+172>>2]|0)){d=d+1|0;K=e}else{M=e;break}}}K=b[M+224>>1]|0;if(K<<16>>16<=(b[M+226>>1]|0)){d=K<<16>>16;K=M;while(1){M=c[K+184>>2]|0;if((c[M+(d*44|0)>>2]|0)>0){e=0;L=M;while(1){F=(c[(c[L+(d*44|0)+4>>2]|0)+(e<<2)>>2]|0)+8|0;c[(c[F>>2]|0)+236>>2]=e;z=c[F>>2]|0;C=c[z+188>>2]|0;do{if((C|0)!=0){m=c[C>>2]|0;if((m|0)==0){break}else{N=0;O=m;P=z}while(1){m=O+8|0;if((a[(c[m>>2]|0)+112|0]|0)==4){dp(O);eF(c[m>>2]|0);eF(O|0);Q=N-1|0;R=c[F>>2]|0}else{Q=N;R=P}m=Q+1|0;G=c[(c[R+188>>2]|0)+(m<<2)>>2]|0;if((G|0)==0){break}else{N=m;O=G;P=R}}}}while(0);F=e+1|0;z=c[n>>2]|0;C=c[z+184>>2]|0;if((F|0)<(c[C+(d*44|0)>>2]|0)){e=F;L=C}else{S=C;T=z;break}}}else{S=M;T=K}L=c[S+(d*44|0)+40>>2]|0;if((L|0)==0){U=T}else{eF(c[L+8>>2]|0);eF(L);U=c[n>>2]|0}if((d|0)<(b[U+226>>1]|0)){d=d+1|0;K=U}else{break}}}if((a[213992]|0)==0){i=f;return}U=c[o>>2]|0;K=$w(g)|0;l=+zm();gc(U|0,139784,(I=i,i=i+24|0,c[I>>2]=K,c[I+8>>2]=J,h[I+16>>3]=l,I)|0)|0;i=I;i=f;return}function kp(e,f,g){e=e|0;f=f|0;g=g|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,pb=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0;j=i;if((f|0)>1){k=up(0)|0;l=c[(c[e+8>>2]|0)+180>>2]|0;if((l|0)!=0){m=l;do{l=m+8|0;n=c[l>>2]|0;h[n+16>>3]=+(c[n+236>>2]|0);m=c[(c[l>>2]|0)+164>>2]|0;}while((m|0)!=0)}if((f|0)<3){p=k;q=5}else{r=k;s=k;t=0}}else{p=2147483647;q=5}a:do{if((q|0)==5){k=e|0;m=e+8|0;l=c[o>>2]|0;n=f;u=p;v=p;while(1){w=c[53660]|0;do{if((n|0)<2){x=(w|0)>4?4:w;if((Ix(k)|0)==(e|0)){sp(e,n)}if((n|0)==0){Bp(e)}Cp(e);y=up(0)|0;if((y|0)>(v|0)){z=v;A=y;B=x;break}C=c[(c[m>>2]|0)+180>>2]|0;if((C|0)==0){z=y;A=y;B=x;break}else{D=C}while(1){C=D+8|0;E=c[C>>2]|0;h[E+16>>3]=+(c[E+236>>2]|0);E=c[(c[C>>2]|0)+164>>2]|0;if((E|0)==0){z=y;A=y;B=x;break}else{D=E}}}else{if((u|0)<=(v|0)){z=v;A=v;B=w;break}x=c[m>>2]|0;y=c[x+180>>2]|0;if((y|0)==0){F=x}else{x=y;do{y=x+8|0;E=c[y>>2]|0;c[E+236>>2]=~~+h[E+16>>3];x=c[(c[y>>2]|0)+164>>2]|0;}while((x|0)!=0);F=c[m>>2]|0}x=b[F+224>>1]|0;if(x<<16>>16>(b[F+226>>1]|0)){z=v;A=v;B=w;break}y=x<<16>>16;while(1){a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(y*44|0)+33|0]=0;x=c[(c[m>>2]|0)+184>>2]|0;Jb(c[x+(y*44|0)+4>>2]|0,c[x+(y*44|0)>>2]|0,4,56);if((y|0)<(b[(c[m>>2]|0)+226>>1]|0)){y=y+1|0}else{z=v;A=v;B=w;break}}}}while(0);b:do{if((B|0)>0){w=0;y=0;x=A;E=z;while(1){if((a[213992]|0)!=0){gc(l|0,134200,(C=i,i=i+40|0,c[C>>2]=n,c[C+8>>2]=w,c[C+16>>2]=y,c[C+24>>2]=x,c[C+32>>2]=E,C)|0)|0;i=C}C=y+1|0;if((y|0)>=(c[53656]|0)|(x|0)==0){G=x;H=E;break b}I=((w|0)%4|0|0)<2;J=I&1;K=c[m>>2]|0;if((w&1|0)==0){L=b[K+224>>1]|0;M=1;N=K+226|0;O=(L<<16>>16<=(b[(c[(c[53542]|0)+8>>2]|0)+224>>1]|0))+(L<<16>>16)|0}else{L=b[K+226>>1]|0;M=-1;N=K+224|0;O=((L<<16>>16>=(b[(c[(c[53542]|0)+8>>2]|0)+226>>1]|0))<<31>>31)+(L<<16>>16)|0}L=(b[N>>1]|0)+M|0;c:do{if((O|0)!=(L|0)){P=(M|0)<0;Q=I^1;R=O;S=K;while(1){T=c[53514]|0;U=c[S+184>>2]|0;V=c[U+(R*44|0)+4>>2]|0;do{if((c[U+(R*44|0)>>2]|0)>0){W=T;X=T+4|0;Y=0;do{Z=(c[V+(Y<<2)>>2]|0)+8|0;_=c[Z>>2]|0;do{if(P){$=c[c[_+180>>2]>>2]|0;if(($|0)==0){aa=_;q=44;break}else{ba=0;ca=0;ea=$;fa=_}while(1){$=c[ea+8>>2]|0;if((b[$+154>>1]|0)>0){c[T+(ca<<2)>>2]=d[$+88|0]|c[(c[(c[((c[ea>>2]&3|0)==2?ea:ea-32|0)+28>>2]|0)+8>>2]|0)+236>>2]<<8;ga=ca+1|0;ha=c[Z>>2]|0}else{ga=ca;ha=fa}$=ba+1|0;ia=c[(c[ha+180>>2]|0)+($<<2)>>2]|0;if((ia|0)==0){ja=ga;ka=ha;q=43;break}else{ba=$;ca=ga;ea=ia;fa=ha}}}else{ia=c[c[_+172>>2]>>2]|0;if((ia|0)==0){aa=_;q=44;break}else{la=0;ma=0;na=ia;oa=_}while(1){ia=c[na+8>>2]|0;if((b[ia+154>>1]|0)>0){c[T+(ma<<2)>>2]=d[ia+48|0]|c[(c[(c[((c[na>>2]&3|0)==3?na:na+32|0)+28>>2]|0)+8>>2]|0)+236>>2]<<8;pa=ma+1|0;qa=c[Z>>2]|0}else{pa=ma;qa=oa}ia=la+1|0;$=c[(c[qa+172>>2]|0)+(ia<<2)>>2]|0;if(($|0)==0){ja=pa;ka=qa;q=43;break}else{la=ia;ma=pa;na=$;oa=qa}}}}while(0);do{if((q|0)==43){q=0;if((ja|0)==2){c[ka+240>>2]=((c[X>>2]|0)+(c[T>>2]|0)|0)/2|0;break}else if((ja|0)==0){aa=ka;q=44;break}else if((ja|0)==1){c[ka+240>>2]=c[T>>2];break}else{Jb(W|0,ja|0,4,4);_=(ja|0)/2|0;if((ja&1|0)!=0){c[(c[Z>>2]|0)+240>>2]=c[T+(_<<2)>>2];break}$=c[T+(_<<2)>>2]|0;ia=(c[T+(ja-1<<2)>>2]|0)-$|0;ra=c[T+(_-1<<2)>>2]|0;_=ra-(c[T>>2]|0)|0;if((_|0)==(ia|0)){c[(c[Z>>2]|0)+240>>2]=(ra+$|0)/2|0;break}else{sa=((da(_,$)|0)+(da(ra,ia)|0)|0)/(_+ia|0)|0;c[(c[Z>>2]|0)+240>>2]=sa;break}}}}while(0);if((q|0)==44){q=0;c[aa+240>>2]=-1}Y=Y+1|0;ta=c[m>>2]|0;ua=c[(c[ta+184>>2]|0)+(R*44|0)>>2]|0;}while((Y|0)<(ua|0));if((ua|0)>0){va=0;wa=0;xa=ta}else{break}while(1){Y=c[(c[V+(wa<<2)>>2]|0)+8>>2]|0;do{if((c[Y+184>>2]|0)==0){if((c[Y+176>>2]|0)!=0){ya=va;za=xa;break}W=Y+196|0;do{if((c[W+4>>2]|0)>0){X=c[W>>2]|0;Z=X;sa=c[Z>>2]|0;ia=c[((c[sa>>2]&3|0)==3?sa:sa+32|0)+28>>2]|0;sa=c[X+4>>2]|0;if((sa|0)==0){Aa=ia}else{X=1;_=ia;ia=sa;while(1){sa=c[((c[ia>>2]&3|0)==3?ia:ia+32|0)+28>>2]|0;ra=(c[(c[sa+8>>2]|0)+236>>2]|0)>(c[(c[_+8>>2]|0)+236>>2]|0)?sa:_;sa=X+1|0;$=c[Z+(sa<<2)>>2]|0;if(($|0)==0){Aa=ra;break}else{X=sa;_=ra;ia=$}}}ia=c[(c[Aa+8>>2]|0)+240>>2]|0;if((ia|0)<=-1){Ba=1;break}c[Y+240>>2]=ia+1;Ba=0}else{ia=Y+188|0;if((c[ia+4>>2]|0)<=0){Ba=1;break}_=c[ia>>2]|0;ia=_;X=c[ia>>2]|0;Z=c[((c[X>>2]&3|0)==2?X:X-32|0)+28>>2]|0;X=c[_+4>>2]|0;if((X|0)==0){Ca=Z}else{_=1;$=Z;Z=X;while(1){X=c[((c[Z>>2]&3|0)==2?Z:Z-32|0)+28>>2]|0;ra=(c[(c[X+8>>2]|0)+236>>2]|0)<(c[(c[$+8>>2]|0)+236>>2]|0)?X:$;X=_+1|0;sa=c[ia+(X<<2)>>2]|0;if((sa|0)==0){Ca=ra;break}else{_=X;$=ra;Z=sa}}}Z=c[(c[Ca+8>>2]|0)+240>>2]|0;if((Z|0)<=0){Ba=1;break}c[Y+240>>2]=Z-1;Ba=0}}while(0);ya=Ba|va;za=c[m>>2]|0}else{ya=va;za=xa}}while(0);Y=wa+1|0;Da=c[za+184>>2]|0;Ea=c[Da+(R*44|0)>>2]|0;if((Y|0)<(Ea|0)){va=ya;wa=Y;xa=za}else{break}}Y=c[Da+(R*44|0)+4>>2]|0;if((Ea|0)<=0){break}W=(ya&255|J|0)==0;Z=Y+(Ea<<2)|0;$=0;_=Ea;while(1){ia=_-1|0;d:do{if(Y>>>0<Z>>>0){sa=a[172624]|0;ra=Y;X=$;while(1){Fa=ra;while(1){if(Fa>>>0<Z>>>0){Ga=Fa}else{Ha=X;break d}while(1){Ia=c[Ga>>2]|0;Ja=c[Ia+8>>2]|0;Ka=c[Ja+240>>2]|0;La=Ga+4|0;if((Ka|0)>=0){break}if(La>>>0<Z>>>0){Ga=La}else{Ha=X;break d}}La=Ja+212|0;Ma=Ja+232|0;Na=Ja+159|0;Oa=Ja+156|0;Pa=Ga;Qa=0;e:while(1){if(Qa<<24>>24==0){Ra=Pa+4|0;if(Ra>>>0>=Z>>>0){Ha=X;break d}Sa=c[Ra>>2]|0;Ta=c[Sa+8>>2]|0;Ua=Ra;Va=Sa;Wa=Ta;Xa=c[Ta+212>>2]|0}else{Ta=Pa;while(1){Sa=Ta+4|0;if(Sa>>>0>=Z>>>0){Ha=X;break d}Ra=c[Sa>>2]|0;Ya=c[Ra+8>>2]|0;if((c[Ya+212>>2]|0)==0){Ua=Sa;Va=Ra;Wa=Ya;Xa=0;break}else{Ta=Sa}}}Ta=c[La>>2]|0;Za=Va+8|0;Sa=(Ta|0)!=(Xa|0);do{if(sa){if(Sa){break e}else{q=90}}else{if((Ta|0)==0|Sa^1|(Xa|0)==0){q=90;break}if((a[Na]|0)==7){if((a[Oa]|0)==1){break}}if((a[Wa+159|0]|0)!=7){break e}if((a[Wa+156|0]|0)!=1){break e}}}while(0);do{if((q|0)==90){q=0;Sa=c[m>>2]|0;Ta=c[(c[Sa+184>>2]|0)+((c[Ma>>2]|0)*44|0)+40>>2]|0;if((Ta|0)==0){break}Ya=(c[Sa+116>>2]&1|0)==0;Sa=da(c[Ta+4>>2]|0,c[(c[(Ya?Ia:Va)+8>>2]|0)+280>>2]|0)|0;if((a[(c[Ta+8>>2]|0)+((c[(c[(Ya?Va:Ia)+8>>2]|0)+280>>2]|0)+Sa)|0]|0)!=0){break e}}}while(0);_a=c[Wa+240>>2]|0;if((_a|0)>-1){q=94;break}Pa=Ua;Qa=(Xa|0)==0?Qa:1}if((q|0)==94){q=0;if(!((Ka|0)<=(_a|0)&((Ka|0)!=(_a|0)|Q))){break}}if(Ua>>>0<Z>>>0){Fa=Ua}else{Ha=X;break d}}Fa=c[Ma>>2]|0;Qa=Ja+236|0;Pa=c[Qa>>2]|0;Oa=c[Wa+236>>2]|0;c[Qa>>2]=Oa;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(Fa*44|0)+4>>2]|0)+(Oa<<2)>>2]=Ia;c[(c[Za>>2]|0)+236>>2]=Pa;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(Fa*44|0)+4>>2]|0)+(Pa<<2)>>2]=Va;Pa=X+1|0;if(Ua>>>0<Z>>>0){ra=Ua;X=Pa}else{Ha=Pa;break}}}else{Ha=$}}while(0);if((ia|0)>0){Z=W?Z-4|0:Z;$=Ha;_=ia}else{break}}if((Ha|0)==0){break}a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(R*44|0)+33|0]=0;if((R|0)<=0){break}a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+((R-1|0)*44|0)+33|0]=0}}while(0);V=R+M|0;if((V|0)==(L|0)){break c}R=V;S=c[m>>2]|0}}}while(0);vp(e,J^1);L=up(0)|0;if((L|0)>(E|0)){$a=E;ab=C}else{K=c[(c[m>>2]|0)+180>>2]|0;if((K|0)!=0){I=K;do{K=I+8|0;S=c[K>>2]|0;h[S+16>>3]=+(c[S+236>>2]|0);I=c[(c[K>>2]|0)+164>>2]|0;}while((I|0)!=0)}$a=L;ab=+(L|0)<+(E|0)*+h[21677]?0:C}I=w+1|0;if((I|0)<(B|0)){w=I;y=ab;x=L;E=$a}else{G=L;H=$a;break}}}else{G=A;H=z}}while(0);E=n+1|0;if((G|0)==0){r=H;s=0;t=B;break a}if((E|0)<3){n=E;u=G;v=H}else{r=H;s=G;t=B;break}}}}while(0);do{if((s|0)>(r|0)){B=e+8|0;G=c[B>>2]|0;H=c[G+180>>2]|0;if((H|0)==0){bb=G}else{G=H;do{H=G+8|0;z=c[H>>2]|0;c[z+236>>2]=~~+h[z+16>>3];G=c[(c[H>>2]|0)+164>>2]|0;}while((G|0)!=0);bb=c[B>>2]|0}G=b[bb+224>>1]|0;if(G<<16>>16>(b[bb+226>>1]|0)){break}H=G<<16>>16;while(1){a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(H*44|0)+33|0]=0;G=c[(c[B>>2]|0)+184>>2]|0;Jb(c[G+(H*44|0)+4>>2]|0,c[G+(H*44|0)>>2]|0,4,56);if((H|0)<(b[(c[B>>2]|0)+226>>1]|0)){H=H+1|0}else{break}}}}while(0);if((r|0)>0){vp(e,0);cb=up(0)|0}else{cb=r}if(!((g|0)!=0&(t|0)>0)){i=j;return cb|0}g=e+8|0;e=0;r=c[g>>2]|0;f:while(1){bb=b[r+226>>1]|0;if(bb<<16>>16<(b[r+224>>1]|0)){db=r}else{s=bb<<16>>16;bb=r;while(1){a[(c[bb+184>>2]|0)+(s*44|0)+32|0]=0;H=c[g>>2]|0;B=c[H+184>>2]|0;G=c[B+(s*44|0)>>2]|0;if((G-1|0)>0){z=(s|0)>0;A=s+1|0;$a=0;ab=B;B=H;M=G;while(1){G=c[ab+(s*44|0)+4>>2]|0;Ha=c[G+($a<<2)>>2]|0;Ua=$a+1|0;Va=c[G+(Ua<<2)>>2]|0;Za=Ha+8|0;Ia=c[Za>>2]|0;Wa=Ia+236|0;Ja=c[Wa>>2]|0;Ma=Va+8|0;_a=c[Ma>>2]|0;Ka=c[_a+236>>2]|0;if((Ja|0)>=(Ka|0)){q=125;break f}Xa=Ia;Ga=c[Ia+212>>2]|0;Ea=c[_a+212>>2]|0;ya=(Ga|0)!=(Ea|0);do{if(a[172624]|0){if(ya){eb=B;fb=ab;gb=M}else{q=133}}else{if((Ga|0)==0|ya^1|(Ea|0)==0){q=133;break}if((a[Xa+159|0]|0)==7){if((a[Ia+156|0]|0)==1){q=135;break}}if((a[_a+159|0]|0)!=7){eb=B;fb=ab;gb=M;break}if((a[_a+156|0]|0)==1){q=135}else{eb=B;fb=ab;gb=M}}}while(0);do{if((q|0)==133){q=0;Xa=c[ab+((c[Ia+232>>2]|0)*44|0)+40>>2]|0;if((Xa|0)==0){q=135;break}Ea=(c[B+116>>2]&1|0)==0;ya=da(c[Xa+4>>2]|0,c[(c[(Ea?Ha:Va)+8>>2]|0)+280>>2]|0)|0;if((a[(c[Xa+8>>2]|0)+((c[(c[(Ea?Va:Ha)+8>>2]|0)+280>>2]|0)+ya)|0]|0)==0){q=135}else{eb=B;fb=ab;gb=M}}}while(0);do{if((q|0)==135){q=0;g:do{if(z){ya=c[_a+172>>2]|0;Ea=c[ya>>2]|0;Xa=(Ea|0)==0;Ga=c[Ia+172>>2]|0;Da=Ga;za=c[Da>>2]|0;if(Xa){hb=0}else{if((za|0)==0){xa=ya;while(1){wa=xa+4|0;if((c[wa>>2]|0)==0){ib=0;jb=0;break g}else{xa=wa}}}else{kb=0;lb=ya;mb=Ea}while(1){xa=c[mb+8>>2]|0;wa=b[xa+154>>1]|0;va=c[(c[(c[((c[mb>>2]&3|0)==3?mb:mb+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;Ba=xa+16|0;xa=kb;Ca=Da;Aa=za;while(1){ta=c[(c[(c[((c[Aa>>2]&3|0)==3?Aa:Aa+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((ta-va|0)>0){q=143}else{if((ta|0)!=(va|0)){nb=xa;break}if(+h[(c[Aa+8>>2]|0)+16>>3]>+h[Ba>>3]){q=143}else{nb=xa}}}while(0);if((q|0)==143){q=0;nb=(da(b[(c[(c[Ca>>2]|0)+8>>2]|0)+154>>1]|0,wa)|0)+xa|0}ta=Ca+4|0;ua=c[ta>>2]|0;if((ua|0)==0){break}else{xa=nb;Ca=ta;Aa=ua}}Aa=lb+4|0;Ca=c[Aa>>2]|0;if((Ca|0)==0){hb=nb;break}else{kb=nb;lb=Aa;mb=Ca}}}Da=Ga;if((za|0)==0){ib=hb;jb=0;break}if(Xa){Ca=Da;while(1){Aa=Ca+4|0;if((c[Aa>>2]|0)==0){ib=hb;jb=0;break g}else{Ca=Aa}}}else{ob=0;pb=Da;qb=za}while(1){Ca=c[qb+8>>2]|0;Xa=b[Ca+154>>1]|0;Ga=c[(c[(c[((c[qb>>2]&3|0)==3?qb:qb+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;Aa=Ca+16|0;Ca=ob;xa=ya;wa=Ea;while(1){Ba=c[(c[(c[((c[wa>>2]&3|0)==3?wa:wa+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((Ba-Ga|0)>0){q=153}else{if((Ba|0)!=(Ga|0)){rb=Ca;break}if(+h[(c[wa+8>>2]|0)+16>>3]>+h[Aa>>3]){q=153}else{rb=Ca}}}while(0);if((q|0)==153){q=0;rb=(da(b[(c[(c[xa>>2]|0)+8>>2]|0)+154>>1]|0,Xa)|0)+Ca|0}Ba=xa+4|0;va=c[Ba>>2]|0;if((va|0)==0){break}else{Ca=rb;xa=Ba;wa=va}}wa=pb+4|0;xa=c[wa>>2]|0;if((xa|0)==0){ib=hb;jb=rb;break}else{ob=rb;pb=wa;qb=xa}}}else{ib=0;jb=0}}while(0);if((c[ab+(A*44|0)>>2]|0)>0){L=c[_a+180>>2]|0;C=c[L>>2]|0;Ea=(C|0)==0;ya=c[Ia+180>>2]|0;za=ya;Da=c[za>>2]|0;if(Ea){sb=0}else{xa=(Da|0)==0;wa=0;Ca=L;Xa=C;while(1){Aa=c[Xa+8>>2]|0;Ga=b[Aa+154>>1]|0;va=c[(c[(c[((c[Xa>>2]&3|0)==2?Xa:Xa-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;if(xa){tb=wa}else{Ba=Aa+56|0;Aa=wa;ua=za;ta=Da;while(1){aa=c[(c[(c[((c[ta>>2]&3|0)==2?ta:ta-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((aa-va|0)>0){q=164}else{if((aa|0)!=(va|0)){ub=Aa;break}if(+h[(c[ta+8>>2]|0)+56>>3]>+h[Ba>>3]){q=164}else{ub=Aa}}}while(0);if((q|0)==164){q=0;ub=(da(b[(c[(c[ua>>2]|0)+8>>2]|0)+154>>1]|0,Ga)|0)+Aa|0}aa=ua+4|0;ja=c[aa>>2]|0;if((ja|0)==0){tb=ub;break}else{Aa=ub;ua=aa;ta=ja}}}ta=Ca+4|0;ua=c[ta>>2]|0;if((ua|0)==0){sb=tb;break}else{wa=tb;Ca=ta;Xa=ua}}}Xa=sb+ib|0;if((Da|0)==0){vb=0}else{Ca=0;wa=ya;za=Da;while(1){xa=c[za+8>>2]|0;ua=b[xa+154>>1]|0;ta=c[(c[(c[((c[za>>2]&3|0)==2?za:za-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;if(Ea){wb=Ca}else{Aa=xa+56|0;xa=Ca;Ga=L;Ba=C;while(1){va=c[(c[(c[((c[Ba>>2]&3|0)==2?Ba:Ba-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((va-ta|0)>0){q=174}else{if((va|0)!=(ta|0)){xb=xa;break}if(+h[(c[Ba+8>>2]|0)+56>>3]>+h[Aa>>3]){q=174}else{xb=xa}}}while(0);if((q|0)==174){q=0;xb=(da(b[(c[(c[Ga>>2]|0)+8>>2]|0)+154>>1]|0,ua)|0)+xa|0}va=Ga+4|0;ja=c[va>>2]|0;if((ja|0)==0){wb=xb;break}else{xa=xb;Ga=va;Ba=ja}}}Ba=wa+4|0;Ga=c[Ba>>2]|0;if((Ga|0)==0){vb=wb;break}else{Ca=wb;wa=Ba;za=Ga}}}yb=Xa;zb=vb+jb|0}else{yb=ib;zb=jb}if((zb|0)>(yb|0)){eb=B;fb=ab;gb=M;break}za=a[Ia+156|0]|0;if(za<<24>>24==(a[_a+156|0]|0)){eb=B;fb=ab;gb=M;break}wa=(M|0)>0;do{if(wa){Ca=0;C=0;L=0;do{Ea=(a[(c[(c[G+(L<<2)>>2]|0)+8>>2]|0)+156|0]|0)==0|0;Ca=(Ea^1)+Ca|0;C=Ea+C|0;L=L+1|0;}while((L|0)<(M|0));L=za<<24>>24==0;if((C|0)>=(Ca|0)){Ab=L;q=186;break}Bb=L?Ha:Va}else{Ab=za<<24>>24==0;q=186}}while(0);if((q|0)==186){q=0;Bb=Ab?Va:Ha}if(wa){za=0;Xa=0;while(1){L=(c[G+(Xa<<2)>>2]|0)==(Bb|0)?Xa:za;Ea=Xa+1|0;if((Ea|0)<(M|0)){za=L;Xa=Ea}else{Cb=L;break}}}else{Cb=0}Xa=(a[(c[Bb+8>>2]|0)+156|0]|0)==0|0;h:do{if((Cb|0)>0){za=0;wa=Cb;while(1){L=wa-1|0;Ea=za+1|0;if((a[(c[(c[G+(L<<2)>>2]|0)+8>>2]|0)+156|0]|0)!=(Xa|0)){Db=za;break h}if((L|0)>0){za=Ea;wa=L}else{Db=Ea;break}}}else{Db=0}}while(0);wa=Cb+1|0;i:do{if((wa|0)<(M|0)){za=0;Ca=wa;while(1){C=za+1|0;if((a[(c[(c[G+(Ca<<2)>>2]|0)+8>>2]|0)+156|0]|0)!=(Xa|0)){Eb=za;break i}Ea=Ca+1|0;if((Ea|0)<(M|0)){za=C;Ca=Ea}else{Eb=C;break}}}else{Eb=0}}while(0);wa=c[Ia+232>>2]|0;c[Wa>>2]=Ka;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(wa*44|0)+4>>2]|0)+(Ka<<2)>>2]=Ha;c[(c[Ma>>2]|0)+236>>2]=Ja;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(wa*44|0)+4>>2]|0)+(Ja<<2)>>2]=Va;wa=c[g>>2]|0;Ca=c[wa+184>>2]|0;za=c[Ca+(s*44|0)>>2]|0;if((za|0)>0){C=c[Ca+(s*44|0)+4>>2]|0;Ea=Cb;L=0;while(1){Da=(c[C+(L<<2)>>2]|0)==(Bb|0)?L:Ea;ya=L+1|0;if((ya|0)<(za|0)){Ea=Da;L=ya}else{Fb=Da;break}}}else{Fb=Cb}j:do{if((Fb|0)>0){L=c[Ca+(s*44|0)+4>>2]|0;Ea=0;C=Fb;while(1){Da=C-1|0;ya=Ea+1|0;if((a[(c[(c[L+(Da<<2)>>2]|0)+8>>2]|0)+156|0]|0)!=(Xa|0)){Gb=Ea;break j}if((Da|0)>0){Ea=ya;C=Da}else{Gb=ya;break}}}else{Gb=0}}while(0);C=Fb+1|0;k:do{if((C|0)<(za|0)){Ea=c[Ca+(s*44|0)+4>>2]|0;L=0;ya=C;while(1){Da=L+1|0;if((a[(c[(c[Ea+(ya<<2)>>2]|0)+8>>2]|0)+156|0]|0)!=(Xa|0)){Hb=L;break k}Ga=ya+1|0;if((Ga|0)<(za|0)){L=Da;ya=Ga}else{Hb=Da;break}}}else{Hb=0}}while(0);Xa=Gb-Hb|0;C=Db-Eb|0;if((((Xa|0)>-1?Xa:-Xa|0)|0)<=(((C|0)>-1?C:-C|0)|0)){eb=wa;fb=Ca;gb=za;break}C=c[Za>>2]|0;Xa=c[C+232>>2]|0;ya=C+236|0;C=c[ya>>2]|0;L=c[(c[Ma>>2]|0)+236>>2]|0;c[ya>>2]=L;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(Xa*44|0)+4>>2]|0)+(L<<2)>>2]=Ha;c[(c[Ma>>2]|0)+236>>2]=C;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(Xa*44|0)+4>>2]|0)+(C<<2)>>2]=Va;C=c[g>>2]|0;Xa=c[C+184>>2]|0;eb=C;fb=Xa;gb=c[Xa+(s*44|0)>>2]|0}}while(0);if((Ua|0)<(gb-1|0)){$a=Ua;ab=fb;B=eb;M=gb}else{Ib=eb;break}}}else{Ib=H}if((s|0)>(b[Ib+224>>1]|0)){s=s-1|0;bb=Ib}else{db=Ib;break}}}bb=e+1|0;if((bb|0)<(t|0)){e=bb;r=db}else{q=210;break}}if((q|0)==125){cc(87312,117264,465,171048);return 0}else if((q|0)==210){i=j;return cb|0}return 0}function lp(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;bo(a);xp(a);Bp(a);Cp(a);e=kp(a,2,d)|0;f=a+8|0;a=c[f>>2]|0;if((c[a+172>>2]|0)<1){g=e;h=a}else{i=1;j=e;e=a;while(1){a=(lp(c[(c[e+176>>2]|0)+(i<<2)>>2]|0,d)|0)+j|0;k=c[f>>2]|0;if((i|0)<(c[k+172>>2]|0)){i=i+1|0;j=a;e=k}else{g=a;h=k;break}}}e=c[h+256>>2]|0;if((e|0)==0){return g|0}j=b[h+224>>1]|0;if(j<<16>>16>(b[h+226>>1]|0)){return g|0}i=j<<16>>16;c[e+(i<<2)>>2]=c[c[(c[h+184>>2]|0)+(i*44|0)+4>>2]>>2];h=c[f>>2]|0;if(j<<16>>16<(b[h+226>>1]|0)){l=i;m=h}else{return g|0}do{l=l+1|0;c[(c[m+256>>2]|0)+(l<<2)>>2]=c[c[(c[m+184>>2]|0)+(l*44|0)+4>>2]>>2];m=c[f>>2]|0;}while((l|0)<(b[m+226>>1]|0));return g|0}function mp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=a+8|0;a=c[d>>2]|0;e=c[a+256>>2]|0;do{if((e|0)==0){f=a}else{g=b[a+224>>1]|0;if(g<<16>>16>(b[a+226>>1]|0)){f=a;break}h=g<<16>>16;c[e+(h<<2)>>2]=c[c[(c[a+184>>2]|0)+(h*44|0)+4>>2]>>2];i=c[d>>2]|0;if(g<<16>>16<(b[i+226>>1]|0)){j=h;k=i}else{f=i;break}while(1){i=j+1|0;c[(c[k+256>>2]|0)+(i<<2)>>2]=c[c[(c[k+184>>2]|0)+(i*44|0)+4>>2]>>2];h=c[d>>2]|0;if((i|0)<(b[h+226>>1]|0)){j=i;k=h}else{f=h;break}}}}while(0);if((c[f+172>>2]|0)<1){return}else{l=1;m=f}while(1){mp(c[(c[m+176>>2]|0)+(l<<2)>>2]|0);f=c[d>>2]|0;if((l|0)<(c[f+172>>2]|0)){l=l+1|0;m=f}else{break}}return}function np(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;d=a+8|0;e=c[d>>2]|0;if((c[e+172>>2]|0)<1){f=e}else{g=1;h=e;while(1){np(c[(c[h+176>>2]|0)+(g<<2)>>2]|0);e=c[d>>2]|0;if((g|0)<(c[e+172>>2]|0)){g=g+1|0;h=e}else{f=e;break}}}if((c[f+256>>2]|0)==0){return}h=b[f+224>>1]|0;if(h<<16>>16>(b[f+226>>1]|0)){return}g=a|0;e=h<<16>>16;h=f;while(1){f=c[(c[h+256>>2]|0)+(e<<2)>>2]|0;i=op(a,f,-1)|0;j=op(a,f,1)|0;c[(c[(c[d>>2]|0)+256>>2]|0)+(e<<2)>>2]=i;f=c[(c[(c[(Ix(g)|0)+8>>2]|0)+184>>2]|0)+(e*44|0)+4>>2]|0;k=i+8|0;c[(c[(c[d>>2]|0)+184>>2]|0)+(e*44|0)+4>>2]=f+(c[(c[k>>2]|0)+236>>2]<<2);c[(c[(c[d>>2]|0)+184>>2]|0)+(e*44|0)>>2]=(c[(c[j+8>>2]|0)+236>>2]|0)+1-(c[(c[k>>2]|0)+236>>2]|0);k=c[d>>2]|0;if((e|0)<(b[k+226>>1]|0)){e=e+1|0;h=k}else{break}}return}function op(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;if((d|0)==0){cc(145896,117264,754,170184);return 0}f=(e|0)<0;g=d;a:while(1){d=g;while(1){h=c[d+8>>2]|0;i=c[h+236>>2]|0;if(f){if((i|0)<=0){j=22;break a}k=(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+((c[h+232>>2]|0)*44|0)+4>>2]|0)+(i-1<<2)|0}else{k=(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+((c[h+232>>2]|0)*44|0)+4>>2]|0)+(i+1<<2)|0}h=c[k>>2]|0;if((h|0)==0){j=22;break a}l=h+8|0;m=c[l>>2]|0;if((da((c[m+236>>2]|0)-i|0,e)|0)<=0){j=11;break a}i=a[m+156|0]|0;if(i<<24>>24==0){if((Rx(b,h|0)|0)!=0){g=h;continue a}n=c[l>>2]|0;o=n;p=a[n+156|0]|0}else{o=m;p=i}if(p<<24>>24!=1){d=h;continue}if((c[o+176>>2]|0)!=1){d=h;continue}i=o+180|0;if((c[i+4>>2]|0)!=1){d=h;continue}m=c[c[i>>2]>>2]|0;i=c[m+8>>2]|0;if((a[i+112|0]|0)==0){q=m}else{m=i;do{r=c[m+116>>2]|0;m=c[r+8>>2]|0;}while((a[m+112|0]|0)!=0);q=r}if((Rx(b,q|0)|0)==0){d=h}else{g=h;continue a}}}if((j|0)==11){cc(142888,117264,760,170184);return 0}else if((j|0)==22){return g|0}return 0}function pp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;e=d;f=c[e>>2]&3;g=c[((f|0)==2?d:d-32|0)+28>>2]|0;h=c[(c[g+8>>2]|0)+188>>2]|0;a:do{if((h|0)!=0){i=h;j=c[i>>2]|0;if((j|0)==0){break}k=d+32|0;l=0;m=j;while(1){j=l+1|0;if((c[((c[m>>2]&3|0)==2?m:m-32|0)+28>>2]|0)==(c[((f|0)==3?d:k)+28>>2]|0)){break}n=c[i+(j<<2)>>2]|0;if((n|0)==0){break a}else{l=j;m=n}}ep(d,m);l=(c[d+8>>2]|0)+172|0;if((c[l>>2]|0)==0){c[l>>2]=m}l=c[m+8>>2]|0;do{if((a[l+112|0]|0)==4){i=l+116|0;if((c[i>>2]|0)!=0){break}c[i>>2]=d}}while(0);l=(c[(c[((c[e>>2]&3|0)==3?d:k)+28>>2]|0)+8>>2]|0)+204|0;m=c[l>>2]|0;if((m|0)==0){o=kk((c[l+4>>2]<<2)+8|0)|0}else{o=mk(m,(c[l+4>>2]<<2)+8|0)|0}c[(c[(c[((c[e>>2]&3|0)==3?d:k)+28>>2]|0)+8>>2]|0)+204>>2]=o;l=(c[(c[((c[e>>2]&3|0)==3?d:k)+28>>2]|0)+8>>2]|0)+208|0;m=c[l>>2]|0;c[l>>2]=m+1;c[(c[(c[(c[((c[e>>2]&3|0)==3?d:k)+28>>2]|0)+8>>2]|0)+204>>2]|0)+(m<<2)>>2]=d;m=(c[(c[((c[e>>2]&3|0)==3?d:k)+28>>2]|0)+8>>2]|0)+204|0;c[(c[m>>2]|0)+(c[m+4>>2]<<2)>>2]=0;return}}while(0);e=Yo(g,c[((f|0)==3?d:d+32|0)+28>>2]|0,d)|0;f=d+8|0;d=e+8|0;a[(c[d>>2]|0)+112|0]=(a[(c[f>>2]|0)+112|0]|0)==4?4:3;c[(c[d>>2]|0)+96>>2]=c[(c[f>>2]|0)+96>>2];cp(b,e);return}function qp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;d=a+8|0;e=jk((b[(c[d>>2]|0)+226>>1]<<2)+8|0)|0;f=e;g=ux(a)|0;if((g|0)!=0){h=g;do{g=f+(c[(c[h+8>>2]|0)+232>>2]<<2)|0;c[g>>2]=(c[g>>2]|0)+1;g=mw(a,h)|0;if((g|0)!=0){i=g;do{g=c[i>>2]&3;j=c[(c[(c[((g|0)==3?i:i+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0;k=c[(c[(c[((g|0)==2?i:i-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0;g=(j|0)>(k|0);l=g?j:k;m=(g?k:j)+1|0;if((m|0)<(l|0)){j=m;do{m=f+(j<<2)|0;c[m>>2]=(c[m>>2]|0)+1;j=j+1|0;}while((j|0)<(l|0))}i=ow(a,i)|0;}while((i|0)!=0)}h=vx(a,h)|0;}while((h|0)!=0)}h=jk(((b[(c[d>>2]|0)+226>>1]|0)*44|0)+88|0)|0;c[(c[d>>2]|0)+184>>2]=h;h=c[d>>2]|0;a=b[h+224>>1]|0;if(a<<16>>16>(b[h+226>>1]|0)){eF(e);return}i=a<<16>>16;a=h;while(1){h=f+(i<<2)|0;l=c[h>>2]|0;c[(c[a+184>>2]|0)+(i*44|0)>>2]=l;c[(c[(c[d>>2]|0)+184>>2]|0)+(i*44|0)+8>>2]=l;l=jk((c[h>>2]<<2)+4|0)|0;c[(c[(c[d>>2]|0)+184>>2]|0)+(i*44|0)+4>>2]=l;c[(c[(c[d>>2]|0)+184>>2]|0)+(i*44|0)+12>>2]=l;l=c[d>>2]|0;if((i|0)<(b[l+226>>1]|0)){i=i+1|0;a=l}else{break}}eF(e);return}function rp(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;e=i;f=d+8|0;g=c[(c[f>>2]|0)+232>>2]|0;h=a+8|0;j=c[(c[h>>2]|0)+184>>2]|0;k=c[j+(g*44|0)>>2]|0;if((c[j+(g*44|0)+8>>2]|0)<1){l=$w(a|0)|0;a=$w(d|0)|0;Fv(1,134832,(m=i,i=i+40|0,c[m>>2]=1070,c[m+8>>2]=l,c[m+16>>2]=a,c[m+24>>2]=g,c[m+32>>2]=k,m)|0)|0;i=m;i=e;return}c[(c[j+(g*44|0)+4>>2]|0)+(k<<2)>>2]=d;c[(c[f>>2]|0)+236>>2]=k;k=(c[(c[h>>2]|0)+184>>2]|0)+(g*44|0)|0;c[k>>2]=(c[k>>2]|0)+1;k=c[h>>2]|0;j=c[k+184>>2]|0;if((c[j+(g*44|0)>>2]|0)>(c[j+(g*44|0)+8>>2]|0)){cc(118064,117264,1077,170464)}a=c[(c[f>>2]|0)+236>>2]|0;l=c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(g*44|0)+8>>2]|0;if((a|0)>(l|0)){n=$w(d|0)|0;o=c[(c[f>>2]|0)+236>>2]|0;p=c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(g*44|0)+8>>2]|0;Fv(1,109736,(m=i,i=i+40|0,c[m>>2]=1090,c[m+8>>2]=n,c[m+16>>2]=o,c[m+24>>2]=g,c[m+32>>2]=p,m)|0)|0;i=m;i=e;return}p=b[k+224>>1]|0;o=b[k+226>>1]|0;do{if((g|0)>=(p|0)){if((g|0)>(o<<16>>16|0)){break}if(((c[j+(g*44|0)+4>>2]|0)+(a<<2)|0)>>>0<=((c[j+(g*44|0)+12>>2]|0)+(l<<2)|0)>>>0){i=e;return}k=$w(d|0)|0;n=c[(c[h>>2]|0)+184>>2]|0;q=(c[n+(g*44|0)+4>>2]|0)+(c[(c[f>>2]|0)+236>>2]<<2)|0;r=(c[n+(g*44|0)+12>>2]|0)+(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(g*44|0)+8>>2]<<2)|0;Fv(1,98240,(m=i,i=i+56|0,c[m>>2]=1101,c[m+8>>2]=g,c[m+16>>2]=k,c[m+24>>2]=q,c[m+32>>2]=g,c[m+40>>2]=g,c[m+48>>2]=r,m)|0)|0;i=m;i=e;return}}while(0);Fv(1,103912,(m=i,i=i+32|0,c[m>>2]=1095,c[m+8>>2]=g,c[m+16>>2]=p,c[m+24>>2]=o<<16>>16,m)|0)|0;i=m;i=e;return}function sp(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;f=i;g=d+8|0;h=Am(c[(c[g>>2]|0)+220>>2]|0)|0;j=c[g>>2]|0;k=c[j+180>>2]|0;if((k|0)==0){l=j}else{j=k;do{k=j+8|0;a[(c[k>>2]|0)+157|0]=0;j=c[(c[k>>2]|0)+164>>2]|0;}while((j|0)!=0);l=c[g>>2]|0}j=b[l+224>>1]|0;if(j<<16>>16>(b[l+226>>1]|0)){m=l}else{k=j<<16>>16;j=l;while(1){c[(c[j+184>>2]|0)+(k*44|0)>>2]=0;l=c[g>>2]|0;if((k|0)<(b[l+226>>1]|0)){k=k+1|0;j=l}else{m=l;break}}}j=c[m+180>>2]|0;if((j|0)!=0){m=(e|0)==0;k=j;do{j=k;l=k+8|0;n=c[l>>2]|0;do{if((c[c[(m?n+172|0:n+180|0)>>2]>>2]|0)==0){o=n+157|0;if((a[o]|0)!=0){p=n;break}a[o]=1;Cm(h,j);o=Dm(h)|0;if((o|0)!=0){q=o;do{if((a[(c[q+8>>2]|0)+159|0]|0)==7){fo(d,q,e,h)}else{rp(d,q);tp(h,q,e)}q=Dm(h)|0;}while((q|0)!=0)}p=c[l>>2]|0}else{p=n}}while(0);k=c[p+164>>2]|0;}while((k|0)!=0)}if((Dm(h)|0)!=0){Fv(1,92696,(k=i,i=i+1|0,i=i+7&-8,c[k>>2]=0,k)|0)|0;i=k}k=c[g>>2]|0;p=b[k+224>>1]|0;if(p<<16>>16<=(b[k+226>>1]|0)){k=p<<16>>16;while(1){a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(k*44|0)+33|0]=0;p=c[g>>2]|0;do{if((c[p+116>>2]&1|0)==0){r=p}else{e=c[p+184>>2]|0;m=c[e+(k*44|0)>>2]|0;if((m|0)<=0){r=p;break}n=c[e+(k*44|0)+4>>2]|0;e=m-1|0;m=(e|0)/2|0;l=0;while(1){j=c[n+(l<<2)>>2]|0;q=c[n+(e-l<<2)>>2]|0;o=c[j+8>>2]|0;s=c[o+232>>2]|0;t=o+236|0;o=c[t>>2]|0;u=q+8|0;v=c[(c[u>>2]|0)+236>>2]|0;c[t>>2]=v;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(s*44|0)+4>>2]|0)+(v<<2)>>2]=j;c[(c[u>>2]|0)+236>>2]=o;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(s*44|0)+4>>2]|0)+(o<<2)>>2]=q;if((l|0)<(m|0)){l=l+1|0}else{break}}r=c[g>>2]|0}}while(0);if((k|0)<(b[r+226>>1]|0)){k=k+1|0}else{break}}}if((Ix(d|0)|0)!=(d|0)){Bm(h);i=f;return}if((up(0)|0)<=0){Bm(h);i=f;return}vp(d,0);Bm(h);i=f;return}function tp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=d+8|0;d=c[f>>2]|0;if((e|0)==0){e=d+180|0;if((c[e+4>>2]|0)>0){g=0;h=e;i=d}else{return}while(1){e=c[(c[h>>2]|0)+(g<<2)>>2]|0;j=e;k=e-32|0;l=(c[(c[((c[j>>2]&3|0)==2?e:k)+28>>2]|0)+8>>2]|0)+157|0;if((a[l]|0)==0){a[l]=1;Cm(b,c[((c[j>>2]&3|0)==2?e:k)+28>>2]|0);m=c[f>>2]|0}else{m=i}k=g+1|0;e=m+180|0;if((k|0)<(c[e+4>>2]|0)){g=k;h=e;i=m}else{break}}return}else{m=d+172|0;if((c[m+4>>2]|0)>0){n=0;o=m;p=d}else{return}while(1){d=c[(c[o>>2]|0)+(n<<2)>>2]|0;m=d;i=d+32|0;h=(c[(c[((c[m>>2]&3|0)==3?d:i)+28>>2]|0)+8>>2]|0)+157|0;if((a[h]|0)==0){a[h]=1;Cm(b,c[((c[m>>2]&3|0)==3?d:i)+28>>2]|0);q=c[f>>2]|0}else{q=p}i=n+1|0;d=q+172|0;if((i|0)<(c[d+4>>2]|0)){n=i;o=d;p=q}else{break}}return}}function up(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0;d=(c[53542]|0)+8|0;e=c[d>>2]|0;f=b[e+224>>1]|0;if(f<<16>>16>=(b[e+226>>1]|0)){g=0;return g|0}i=f<<16>>16;f=0;j=e;while(1){e=c[j+184>>2]|0;if((a[e+(i*44|0)+33|0]|0)==0){k=c[e+(i*44|0)+4>>2]|0;l=i+1|0;m=c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(l*44|0)>>2]|0;if((c[43800]|0)>(m|0)){n=j;o=e}else{p=m+1|0;c[43800]=p;m=c[43798]|0;if((m|0)==0){q=kk(p<<2)|0}else{q=mk(m,p<<2)|0}c[43798]=q;p=c[d>>2]|0;n=p;o=c[p+184>>2]|0}if((c[o+(l*44|0)>>2]|0)>0){p=0;while(1){c[(c[43798]|0)+(p<<2)>>2]=0;m=p+1|0;r=c[d>>2]|0;s=c[r+184>>2]|0;if((m|0)<(c[s+(l*44|0)>>2]|0)){p=m}else{t=s;u=r;break}}}else{t=o;u=n}do{if((c[t+(i*44|0)>>2]|0)>0){p=0;r=0;s=0;m=u;v=u;while(1){w=k+(s<<2)|0;x=c[(c[(c[w>>2]|0)+8>>2]|0)+180>>2]|0;y=c[x>>2]|0;do{if((r|0)>0){if((y|0)==0){z=r;A=m;B=p;C=v;break}D=c[43798]|0;E=p;F=0;G=y;while(1){H=c[(c[(c[((c[G>>2]&3|0)==2?G:G-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;if((H|0)<(r|0)){I=b[(c[G+8>>2]|0)+154>>1]|0;J=E;K=H;while(1){H=K+1|0;L=(da(c[D+(H<<2)>>2]|0,I)|0)+J|0;if((H|0)<(r|0)){J=L;K=H}else{M=L;break}}}else{M=E}K=F+1|0;J=c[x+(K<<2)>>2]|0;if((J|0)==0){N=M;O=22;break}else{E=M;F=K;G=J}}}else{N=p;O=22}}while(0);do{if((O|0)==22){O=0;if((y|0)==0){z=r;A=m;B=N;C=v;break}else{P=r;Q=1;R=y}while(1){x=c[(c[(c[((c[R>>2]&3|0)==2?R:R-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;S=(x|0)>(P|0)?x:P;G=(c[43798]|0)+(x<<2)|0;c[G>>2]=(c[G>>2]|0)+(b[(c[R+8>>2]|0)+154>>1]|0);G=c[(c[(c[(c[w>>2]|0)+8>>2]|0)+180>>2]|0)+(Q<<2)>>2]|0;if((G|0)==0){break}P=S;Q=Q+1|0;R=G}G=c[d>>2]|0;z=S;A=G;B=N;C=G}}while(0);w=s+1|0;T=c[A+184>>2]|0;U=c[T+(i*44|0)>>2]|0;if((w|0)<(U|0)){p=B;r=z;s=w;m=A;v=C}else{break}}if((U|0)<=0){V=B;W=T;X=C;break}v=c[T+(i*44|0)+4>>2]|0;m=B;s=0;while(1){r=c[(c[v+(s<<2)>>2]|0)+8>>2]|0;if((a[r+145|0]|0)==0){Y=m}else{p=c[r+180>>2]|0;r=p;w=c[r>>2]|0;do{if((w|0)==0){Z=0}else{y=c[p+4>>2]|0;if((y|0)==0){Z=0;break}G=w;x=0;F=1;E=y;while(1){y=c[(c[(c[((c[G>>2]&3|0)==2?G:G-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;D=c[G+8>>2]|0;_=+h[D+16>>3];J=D+154|0;D=F;K=x;I=E;while(1){L=c[I+8>>2]|0;if(+((c[(c[(c[((c[I>>2]&3|0)==2?I:I-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0)-y|0)*(+h[L+16>>3]-_)<0.0){$=(da(b[L+154>>1]|0,b[J>>1]|0)|0)+K|0}else{$=K}L=D+1|0;H=c[r+(L<<2)>>2]|0;if((H|0)==0){break}else{D=L;K=$;I=H}}I=F+1|0;K=c[r+(I<<2)>>2]|0;if((K|0)==0){Z=$;break}else{G=E;x=$;F=I;E=K}}}}while(0);Y=Z+m|0}r=s+1|0;if((r|0)<(U|0)){m=Y;s=r}else{V=Y;W=T;X=C;break}}}else{V=0;W=t;X=u}}while(0);k=c[W+(l*44|0)>>2]|0;if((k|0)>0){s=c[W+(l*44|0)+4>>2]|0;m=V;v=0;while(1){r=c[(c[s+(v<<2)>>2]|0)+8>>2]|0;if((a[r+145|0]|0)==0){aa=m}else{w=c[r+172>>2]|0;r=w;p=c[r>>2]|0;do{if((p|0)==0){ba=0}else{E=c[w+4>>2]|0;if((E|0)==0){ba=0;break}F=p;x=0;G=1;K=E;while(1){E=c[(c[(c[((c[F>>2]&3|0)==3?F:F+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;I=c[F+8>>2]|0;_=+h[I+56>>3];D=I+154|0;I=G;J=x;y=K;while(1){H=c[y+8>>2]|0;if(+((c[(c[(c[((c[y>>2]&3|0)==3?y:y+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0)-E|0)*(+h[H+56>>3]-_)<0.0){ca=(da(b[H+154>>1]|0,b[D>>1]|0)|0)+J|0}else{ca=J}H=I+1|0;L=c[r+(H<<2)>>2]|0;if((L|0)==0){break}else{I=H;J=ca;y=L}}y=G+1|0;J=c[r+(y<<2)>>2]|0;if((J|0)==0){ba=ca;break}else{F=K;x=ca;G=y;K=J}}}}while(0);aa=ba+m|0}r=v+1|0;if((r|0)<(k|0)){m=aa;v=r}else{ea=aa;break}}}else{ea=V}c[(c[X+184>>2]|0)+(i*44|0)+36>>2]=ea;a[(c[(c[d>>2]|0)+184>>2]|0)+(i*44|0)+33|0]=1;fa=ea;ga=c[d>>2]|0;ha=l}else{fa=c[e+(i*44|0)+36>>2]|0;ga=j;ha=i+1|0}v=fa+f|0;if((ha|0)<(b[ga+226>>1]|0)){i=ha;f=v;j=ga}else{g=v;break}}return g|0}function vp(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0;f=d+8|0;d=c[f>>2]|0;g=b[d+224>>1]|0;if(g<<16>>16>(b[d+226>>1]|0)){i=d}else{j=g<<16>>16;g=d;while(1){a[(c[g+184>>2]|0)+(j*44|0)+32|0]=1;d=c[f>>2]|0;if((j|0)<(b[d+226>>1]|0)){j=j+1|0;g=d}else{i=d;break}}}g=(e|0)!=0;e=i;a:while(1){i=b[e+224>>1]|0;if(i<<16>>16>(b[e+226>>1]|0)){k=76;break}j=i<<16>>16;i=0;d=e;while(1){l=(c[d+184>>2]|0)+(j*44|0)+32|0;if((a[l]|0)==0){m=i;n=d}else{a[l]=0;l=c[f>>2]|0;o=c[l+184>>2]|0;p=c[o+(j*44|0)>>2]|0;b:do{if((p-1|0)>0){q=(j|0)>0;r=j+1|0;s=j-1|0;t=0;u=0;v=o;w=l;x=p;while(1){y=a[172624]|0;z=c[v+(j*44|0)+4>>2]|0;A=c[z+(u<<2)>>2]|0;B=c[A+8>>2]|0;C=x-1|0;D=w+116|0;E=v+(r*44|0)|0;F=u;G=A;A=B;H=c[B+236>>2]|0;while(1){I=F+1|0;J=c[z+(I<<2)>>2]|0;K=A+236|0;L=J+8|0;B=c[L>>2]|0;M=c[B+236>>2]|0;if((H|0)>=(M|0)){k=12;break a}N=A;O=c[A+212>>2]|0;P=c[B+212>>2]|0;Q=(O|0)!=(P|0);do{if(y){if(!Q){k=20}}else{if((O|0)==0|Q^1|(P|0)==0){k=20;break}if((a[N+159|0]|0)==7){if((a[A+156|0]|0)==1){k=22;break}}if((a[B+159|0]|0)!=7){break}if((a[B+156|0]|0)==1){k=22}}}while(0);do{if((k|0)==20){k=0;N=c[v+((c[A+232>>2]|0)*44|0)+40>>2]|0;if((N|0)==0){k=22;break}P=(c[D>>2]&1|0)==0;Q=da(c[N+4>>2]|0,c[(c[(P?G:J)+8>>2]|0)+280>>2]|0)|0;if((a[(c[N+8>>2]|0)+((c[(c[(P?J:G)+8>>2]|0)+280>>2]|0)+Q)|0]|0)==0){k=22}}}while(0);if((k|0)==22){k=0;c:do{if(q){Q=c[B+172>>2]|0;P=c[Q>>2]|0;N=(P|0)==0;O=c[A+172>>2]|0;R=O;S=c[R>>2]|0;if(N){T=0}else{if((S|0)==0){U=Q;while(1){V=U+4|0;if((c[V>>2]|0)==0){W=0;X=0;break c}else{U=V}}}else{Y=0;Z=Q;_=P}while(1){U=c[_+8>>2]|0;V=b[U+154>>1]|0;$=c[(c[(c[((c[_>>2]&3|0)==3?_:_+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;aa=U+16|0;U=Y;ba=R;ca=S;while(1){ea=c[(c[(c[((c[ca>>2]&3|0)==3?ca:ca+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((ea-$|0)>0){k=30}else{if((ea|0)!=($|0)){fa=U;break}if(+h[(c[ca+8>>2]|0)+16>>3]>+h[aa>>3]){k=30}else{fa=U}}}while(0);if((k|0)==30){k=0;fa=(da(b[(c[(c[ba>>2]|0)+8>>2]|0)+154>>1]|0,V)|0)+U|0}ea=ba+4|0;ga=c[ea>>2]|0;if((ga|0)==0){break}else{U=fa;ba=ea;ca=ga}}ca=Z+4|0;ba=c[ca>>2]|0;if((ba|0)==0){T=fa;break}else{Y=fa;Z=ca;_=ba}}}R=O;if((S|0)==0){W=T;X=0;break}if(N){ba=R;while(1){ca=ba+4|0;if((c[ca>>2]|0)==0){W=T;X=0;break c}else{ba=ca}}}else{ha=0;ia=R;ja=S}while(1){ba=c[ja+8>>2]|0;N=b[ba+154>>1]|0;O=c[(c[(c[((c[ja>>2]&3|0)==3?ja:ja+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;ca=ba+16|0;ba=ha;U=Q;V=P;while(1){aa=c[(c[(c[((c[V>>2]&3|0)==3?V:V+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((aa-O|0)>0){k=40}else{if((aa|0)!=(O|0)){ka=ba;break}if(+h[(c[V+8>>2]|0)+16>>3]>+h[ca>>3]){k=40}else{ka=ba}}}while(0);if((k|0)==40){k=0;ka=(da(b[(c[(c[U>>2]|0)+8>>2]|0)+154>>1]|0,N)|0)+ba|0}aa=U+4|0;$=c[aa>>2]|0;if(($|0)==0){break}else{ba=ka;U=aa;V=$}}V=ia+4|0;U=c[V>>2]|0;if((U|0)==0){W=T;X=ka;break}else{ha=ka;ia=V;ja=U}}}else{W=0;X=0}}while(0);if((c[E>>2]|0)>0){P=c[B+180>>2]|0;Q=c[P>>2]|0;S=(Q|0)==0;R=c[A+180>>2]|0;U=R;V=c[U>>2]|0;if(S){la=0}else{ba=(V|0)==0;N=0;ca=P;O=Q;while(1){$=c[O+8>>2]|0;aa=b[$+154>>1]|0;ga=c[(c[(c[((c[O>>2]&3|0)==2?O:O-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;if(ba){ma=N}else{ea=$+56|0;$=N;na=U;oa=V;while(1){pa=c[(c[(c[((c[oa>>2]&3|0)==2?oa:oa-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((pa-ga|0)>0){k=51}else{if((pa|0)!=(ga|0)){qa=$;break}if(+h[(c[oa+8>>2]|0)+56>>3]>+h[ea>>3]){k=51}else{qa=$}}}while(0);if((k|0)==51){k=0;qa=(da(b[(c[(c[na>>2]|0)+8>>2]|0)+154>>1]|0,aa)|0)+$|0}pa=na+4|0;ra=c[pa>>2]|0;if((ra|0)==0){ma=qa;break}else{$=qa;na=pa;oa=ra}}}oa=ca+4|0;na=c[oa>>2]|0;if((na|0)==0){la=ma;break}else{N=ma;ca=oa;O=na}}}O=la+W|0;if((V|0)==0){sa=0}else{ca=0;N=R;U=V;while(1){ba=c[U+8>>2]|0;na=b[ba+154>>1]|0;oa=c[(c[(c[((c[U>>2]&3|0)==2?U:U-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;if(S){ta=ca}else{$=ba+56|0;ba=ca;aa=P;ea=Q;while(1){ga=c[(c[(c[((c[ea>>2]&3|0)==2?ea:ea-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;do{if((ga-oa|0)>0){k=61}else{if((ga|0)!=(oa|0)){ua=ba;break}if(+h[(c[ea+8>>2]|0)+56>>3]>+h[$>>3]){k=61}else{ua=ba}}}while(0);if((k|0)==61){k=0;ua=(da(b[(c[(c[aa>>2]|0)+8>>2]|0)+154>>1]|0,na)|0)+ba|0}ga=aa+4|0;ra=c[ga>>2]|0;if((ra|0)==0){ta=ua;break}else{ba=ua;aa=ga;ea=ra}}}ea=N+4|0;aa=c[ea>>2]|0;if((aa|0)==0){sa=ta;break}else{ca=ta;N=ea;U=aa}}}va=O;wa=sa+X|0}else{va=W;wa=X}if((wa|0)<(va|0)){break}if(g&(va|0)>0&(wa|0)==(va|0)){break}}if((I|0)<(C|0)){F=I;G=J;A=B;H=M}else{xa=t;ya=w;break b}}F=c[A+232>>2]|0;c[K>>2]=M;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(F*44|0)+4>>2]|0)+(M<<2)>>2]=G;c[(c[L>>2]|0)+236>>2]=H;c[(c[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(F*44|0)+4>>2]|0)+(H<<2)>>2]=J;F=va-wa+t|0;a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(j*44|0)+33|0]=0;a[(c[(c[f>>2]|0)+184>>2]|0)+(j*44|0)+32|0]=1;C=c[f>>2]|0;if((b[C+224>>1]|0)<(j|0)){a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(s*44|0)+33|0]=0;a[(c[(c[f>>2]|0)+184>>2]|0)+(s*44|0)+32|0]=1;za=c[f>>2]|0}else{za=C}if((b[za+226>>1]|0)>(j|0)){a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(r*44|0)+33|0]=0;a[(c[(c[f>>2]|0)+184>>2]|0)+(r*44|0)+32|0]=1;Aa=c[f>>2]|0}else{Aa=za}C=c[Aa+184>>2]|0;E=c[C+(j*44|0)>>2]|0;if((I|0)<(E-1|0)){t=F;u=I;v=C;w=Aa;x=E}else{xa=F;ya=Aa;break}}}else{xa=0;ya=l}}while(0);m=xa+i|0;n=ya}if((j|0)<(b[n+226>>1]|0)){j=j+1|0;i=m;d=n}else{break}}if((m|0)>0){e=n}else{k=76;break}}if((k|0)==12){cc(87312,117264,514,169864)}else if((k|0)==76){return}}function wp(b){b=b|0;var d=0,e=0,f=0,g=0;d=c[b>>2]&3;e=c[(c[((d|0)==2?b:b-32|0)+28>>2]|0)+8>>2]|0;if((a[e+156|0]|0)==1){f=2}else{f=(a[e+160|0]|0)<2|0}e=c[(c[((d|0)==3?b:b+32|0)+28>>2]|0)+8>>2]|0;if((a[e+156|0]|0)==1){g=2}else{g=(a[e+160|0]|0)<2|0}e=(c[b+8>>2]|0)+156|0;c[e>>2]=da(c[e>>2]|0,c[9576+(g*12|0)+(f<<2)>>2]|0)|0;return}function xp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;d=i;e=c[53718]|0;if(!((e|0)!=0|(c[53604]|0)!=0)){i=d;return}f=Hm(b|0,e,0)|0;if((f|0)!=0){e=a[f]|0;do{if((e<<24>>24|0)==105){if((Ya(f|0,168592)|0)!=0){break}g=ux(b)|0;if((g|0)==0){i=d;return}else{h=g}do{yp(b,h,0);h=vx(b,h)|0;}while((h|0)!=0);i=d;return}else if((e<<24>>24|0)==111){if((Ya(f|0,82584)|0)!=0){break}g=ux(b)|0;if((g|0)==0){i=d;return}else{j=g}do{yp(b,j,1);j=vx(b,j)|0;}while((j|0)!=0);i=d;return}else if((e<<24>>24|0)==0){i=d;return}}while(0);Fv(1,164440,(k=i,i=i+8|0,c[k>>2]=f,k)|0)|0;i=k;i=d;return}f=sy(b)|0;if((f|0)!=0){e=f;do{if(($p(e)|0)==0){xp(e)}e=ty(e)|0;}while((e|0)!=0)}if((c[53604]|0)==0){i=d;return}e=ux(b)|0;if((e|0)==0){i=d;return}else{l=e}do{e=l|0;f=Hm(e,c[53604]|0,0)|0;a:do{if((f|0)!=0){j=a[f]|0;do{if((j<<24>>24|0)==111){if((Ya(f|0,82584)|0)!=0){break}yp(b,l,1);break a}else if((j<<24>>24|0)==105){if((Ya(f|0,168592)|0)!=0){break}yp(b,l,0);break a}else if((j<<24>>24|0)==0){break a}}while(0);j=$w(e)|0;Fv(1,160448,(k=i,i=i+16|0,c[k>>2]=f,c[k+8>>2]=j,k)|0)|0;i=k}}while(0);l=vx(b,l)|0;}while((l|0)!=0);i=d;return}function yp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=c[53516]|0;g=d+8|0;d=c[g>>2]|0;if((c[d+212>>2]|0)!=0){return}h=(e|0)!=0;if(h){e=c[c[d+180>>2]>>2]|0;if((e|0)==0){return}else{i=0;j=0;k=e;l=d}while(1){e=c[(c[k+8>>2]|0)+116>>2]|0;if((e|0)==0){m=k}else{n=e;while(1){e=c[(c[n+8>>2]|0)+116>>2]|0;if((e|0)==0){break}else{n=e}}m=n}e=c[m>>2]&3;if((c[(c[(c[((e|0)==3?m:m+32|0)+28>>2]|0)+8>>2]|0)+212>>2]|0)==(c[(c[(c[((e|0)==2?m:m-32|0)+28>>2]|0)+8>>2]|0)+212>>2]|0)){c[f+(i<<2)>>2]=k;o=i+1|0;p=c[g>>2]|0}else{o=i;p=l}e=j+1|0;q=c[(c[p+180>>2]|0)+(e<<2)>>2]|0;if((q|0)==0){r=o;break}else{i=o;j=e;k=q;l=p}}}else{p=c[c[d+172>>2]>>2]|0;if((p|0)==0){return}else{s=0;t=0;u=p;v=d}while(1){d=c[(c[u+8>>2]|0)+116>>2]|0;if((d|0)==0){w=u}else{p=d;while(1){d=c[(c[p+8>>2]|0)+116>>2]|0;if((d|0)==0){break}else{p=d}}w=p}n=c[w>>2]&3;if((c[(c[(c[((n|0)==3?w:w+32|0)+28>>2]|0)+8>>2]|0)+212>>2]|0)==(c[(c[(c[((n|0)==2?w:w-32|0)+28>>2]|0)+8>>2]|0)+212>>2]|0)){c[f+(s<<2)>>2]=u;x=s+1|0;y=c[g>>2]|0}else{x=s;y=v}n=t+1|0;d=c[(c[y+172>>2]|0)+(n<<2)>>2]|0;if((d|0)==0){r=x;break}else{s=x;t=n;u=d;v=y}}}if((r|0)<2){return}c[f+(r<<2)>>2]=0;Jb(f|0,r|0,4,124);r=c[f+4>>2]|0;if((r|0)==0){return}if(h){h=1;y=r;while(1){v=c[f+(h-1<<2)>>2]|0;u=c[((c[v>>2]&3|0)==2?v:v-32|0)+28>>2]|0;v=c[((c[y>>2]&3|0)==2?y:y-32|0)+28>>2]|0;if((To(u,v)|0)!=0){z=24;break}t=Yo(u,v,0)|0;a[(c[t+8>>2]|0)+112|0]=4;cp(b,t);t=h+1|0;v=c[f+(t<<2)>>2]|0;if((v|0)==0){z=24;break}else{h=t;y=v}}if((z|0)==24){return}}else{y=1;h=r;while(1){r=c[f+(y-1<<2)>>2]|0;v=c[((c[r>>2]&3|0)==3?r:r+32|0)+28>>2]|0;r=c[((c[h>>2]&3|0)==3?h:h+32|0)+28>>2]|0;if((To(v,r)|0)!=0){z=24;break}t=Yo(v,r,0)|0;a[(c[t+8>>2]|0)+112|0]=4;cp(b,t);t=y+1|0;r=c[f+(t<<2)>>2]|0;if((r|0)==0){z=24;break}else{y=t;h=r}}if((z|0)==24){return}}}function zp(a,b){a=a|0;b=b|0;return((c[c[a>>2]>>2]|0)>>>4)-((c[c[b>>2]>>2]|0)>>>4)|0}function Ap(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=a+8|0;i=c[g>>2]|0;if((c[i+172>>2]|0)<1){j=f}else{k=f;f=1;l=i;while(1){i=Ap(c[(c[l+176>>2]|0)+(f<<2)>>2]|0,d,e,k)|0;m=c[g>>2]|0;if((f|0)<(c[m+172>>2]|0)){k=i;f=f+1|0;l=m}else{j=i;break}}}l=a|0;if((Ix(l)|0)==(a|0)){n=j;return n|0}vF(d|0,0,e<<2|0)|0;e=ux(a)|0;if((e|0)!=0){f=e;do{e=f+8|0;c[d+(c[(c[e>>2]|0)+232>>2]<<2)>>2]=1;k=mw(a,f)|0;if((k|0)!=0){i=k;do{k=c[(c[e>>2]|0)+232>>2]|0;m=i;o=i-32|0;if((k|0)<(c[(c[(c[((c[m>>2]&3|0)==2?i:o)+28>>2]|0)+8>>2]|0)+232>>2]|0)){p=k;do{p=p+1|0;c[d+(p<<2)>>2]=1;}while((p|0)<(c[(c[(c[((c[m>>2]&3|0)==2?i:o)+28>>2]|0)+8>>2]|0)+232>>2]|0))}i=ow(a,i)|0;}while((i|0)!=0)}f=vx(a,f)|0;}while((f|0)!=0)}f=c[g>>2]|0;i=b[f+224>>1]|0;if(i<<16>>16>(b[f+226>>1]|0)){n=j;return n|0}e=j;j=i<<16>>16;i=f;while(1){if((c[d+(j<<2)>>2]|0)==0){if((e|0)==0){q=ry(Ix(l)|0,156320,1)|0}else{q=e}f=Ax(q,0,1)|0;Wx(f|0,151840,304,1)|0;o=f+8|0;c[(c[o>>2]|0)+232>>2]=j;h[(c[o>>2]|0)+96>>3]=.5;h[(c[o>>2]|0)+88>>3]=.5;h[(c[o>>2]|0)+80>>3]=1.0;c[(c[o>>2]|0)+216>>2]=1;c[(c[o>>2]|0)+176>>2]=0;m=jk(20)|0;c[(c[o>>2]|0)+172>>2]=m;c[(c[o>>2]|0)+184>>2]=0;m=jk(20)|0;c[(c[o>>2]|0)+180>>2]=m;zx(a,f,1)|0;r=q;s=c[g>>2]|0}else{r=e;s=i}if((j|0)<(b[s+226>>1]|0)){e=r;j=j+1|0;i=s}else{n=r;break}}return n|0}function Bp(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=d+8|0;f=c[e>>2]|0;g=b[f+224>>1]|0;if(g<<16>>16>(b[f+226>>1]|0)){return}h=g<<16>>16;g=f;while(1){f=c[g+184>>2]|0;do{if((c[f+(h*44|0)>>2]|0)>0){i=0;j=0;k=f;while(1){l=(c[(c[k+(h*44|0)+4>>2]|0)+(i<<2)>>2]|0)+8|0;a[(c[l>>2]|0)+158|0]=0;a[(c[l>>2]|0)+157|0]=0;c[(c[l>>2]|0)+280>>2]=i;if((c[(c[l>>2]|0)+192>>2]|0)>0&(j|0)==0){l=c[(c[(c[e>>2]|0)+184>>2]|0)+(h*44|0)>>2]|0;m=jk(12)|0;c[m>>2]=l;c[m+4>>2]=l;c[m+8>>2]=jk(da(l,l)|0)|0;c[(c[(c[e>>2]|0)+184>>2]|0)+(h*44|0)+40>>2]=m;n=1}else{n=j}m=i+1|0;o=c[e>>2]|0;p=c[o+184>>2]|0;q=c[p+(h*44|0)>>2]|0;if((m|0)<(q|0)){i=m;j=n;k=p}else{break}}if((n|0)!=0&(q|0)>0){r=0;s=p;t=o}else{u=o;break}while(1){k=c[(c[s+(h*44|0)+4>>2]|0)+(r<<2)>>2]|0;if((a[(c[k+8>>2]|0)+157|0]|0)==0){Gp(d,k);v=c[e>>2]|0}else{v=t}k=r+1|0;j=c[v+184>>2]|0;if((k|0)<(c[j+(h*44|0)>>2]|0)){r=k;s=j;t=v}else{u=v;break}}}else{u=g}}while(0);if((h|0)<(b[u+226>>1]|0)){h=h+1|0;g=u}else{break}}return}function Cp(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0,xa=0,ya=0,za=0,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Qa=0,Ra=0,Sa=0;e=d+8|0;f=c[e>>2]|0;if((a[f+228|0]|0)==0){return}g=b[f+224>>1]|0;if(g<<16>>16>(b[f+226>>1]|0)){return}h=g<<16>>16;g=0;i=f;a:while(1){f=c[i+184>>2]|0;j=c[f+(h*44|0)>>2]|0;if((j|0)==0){k=g;l=i}else{m=c[(c[c[f+(h*44|0)+4>>2]>>2]|0)+8>>2]|0;f=c[m+236>>2]|0;if((j|0)>0){j=1;n=m;while(1){a[n+157|0]=0;m=c[(c[e>>2]|0)+184>>2]|0;if((j|0)>=(c[m+(h*44|0)>>2]|0)){break}o=c[(c[(c[m+(h*44|0)+4>>2]|0)+(j<<2)>>2]|0)+8>>2]|0;j=j+1|0;n=o}p=(j<<2)+4|0}else{p=4}if((g|0)==0){q=kk(p)|0}else{q=mk(g,p)|0}n=q;o=c[e>>2]|0;m=c[o+184>>2]|0;r=c[m+(h*44|0)>>2]|0;do{if((r|0)>0){s=0;t=0;u=o;v=m;w=r;while(1){if((c[u+116>>2]&1|0)==0){x=(c[v+(h*44|0)+4>>2]|0)+(w+~t<<2)|0}else{x=(c[v+(h*44|0)+4>>2]|0)+(t<<2)|0}y=c[x>>2]|0;z=y+8|0;A=c[z>>2]|0;B=A+196|0;if((c[B+4>>2]|0)>0){C=0;D=0;E=B;while(1){B=c[(c[E>>2]|0)+(D<<2)>>2]|0;do{if((c[(c[B+8>>2]|0)+156>>2]|0)==0){F=0}else{G=B;H=c[((c[G>>2]&3|0)==3?B:B+32|0)+28>>2]|0;I=H+8|0;J=c[I>>2]|0;K=a[J+156|0]|0;if(K<<24>>24==0){L=(Rx(d,H|0)|0)!=0|0;H=c[I>>2]|0;M=L;N=H;O=a[H+156|0]|0}else{M=0;N=J;O=K}do{if(O<<24>>24==1){if((c[N+176>>2]|0)!=1){P=27;break}K=N+180|0;if((c[K+4>>2]|0)!=1){P=27;break}J=c[c[K>>2]>>2]|0;K=c[J+8>>2]|0;if((a[K+112|0]|0)==0){Q=J}else{J=K;do{R=c[J+116>>2]|0;J=c[R+8>>2]|0;}while((a[J+112|0]|0)!=0);Q=R}if((Rx(d,Q|0)|0)==0){P=27}else{S=1}}else{P=27}}while(0);if((P|0)==27){P=0;S=0}if((S|M|0)==0){F=0;break}J=c[((c[G>>2]&3|0)==2?B:B-32|0)+28>>2]|0;K=J+8|0;H=c[K>>2]|0;L=a[H+156|0]|0;if(L<<24>>24==0){I=(Rx(d,J|0)|0)!=0|0;J=c[K>>2]|0;T=I;U=J;V=a[J+156|0]|0}else{T=0;U=H;V=L}do{if(V<<24>>24==1){if((c[U+176>>2]|0)!=1){P=38;break}L=U+180|0;if((c[L+4>>2]|0)!=1){P=38;break}H=c[c[L>>2]>>2]|0;L=c[H+8>>2]|0;if((a[L+112|0]|0)==0){W=H}else{H=L;do{X=c[H+116>>2]|0;H=c[X+8>>2]|0;}while((a[H+112|0]|0)!=0);W=X}if((Rx(d,W|0)|0)==0){P=38}else{Y=1}}else{P=38}}while(0);if((P|0)==38){P=0;Y=0}F=Y|T}}while(0);B=F+C|0;G=D+1|0;H=c[z>>2]|0;L=H+196|0;if((G|0)<(c[L+4>>2]|0)){C=B;D=G;E=L}else{Z=B;_=H;break}}}else{Z=0;_=A}E=_+188|0;if((c[E+4>>2]|0)>0){D=0;C=0;H=E;while(1){E=c[(c[H>>2]|0)+(C<<2)>>2]|0;do{if((c[(c[E+8>>2]|0)+156>>2]|0)==0){$=0}else{B=E;L=c[((c[B>>2]&3|0)==3?E:E+32|0)+28>>2]|0;G=L+8|0;J=c[G>>2]|0;I=a[J+156|0]|0;if(I<<24>>24==0){K=(Rx(d,L|0)|0)!=0|0;L=c[G>>2]|0;aa=K;ba=L;ca=a[L+156|0]|0}else{aa=0;ba=J;ca=I}do{if(ca<<24>>24==1){if((c[ba+176>>2]|0)!=1){P=52;break}I=ba+180|0;if((c[I+4>>2]|0)!=1){P=52;break}J=c[c[I>>2]>>2]|0;I=c[J+8>>2]|0;if((a[I+112|0]|0)==0){da=J}else{J=I;do{ea=c[J+116>>2]|0;J=c[ea+8>>2]|0;}while((a[J+112|0]|0)!=0);da=ea}if((Rx(d,da|0)|0)==0){P=52}else{fa=1}}else{P=52}}while(0);if((P|0)==52){P=0;fa=0}if((fa|aa|0)==0){$=0;break}J=c[((c[B>>2]&3|0)==2?E:E-32|0)+28>>2]|0;I=J+8|0;L=c[I>>2]|0;K=a[L+156|0]|0;if(K<<24>>24==0){G=(Rx(d,J|0)|0)!=0|0;J=c[I>>2]|0;ga=G;ha=J;ia=a[J+156|0]|0}else{ga=0;ha=L;ia=K}do{if(ia<<24>>24==1){if((c[ha+176>>2]|0)!=1){P=63;break}K=ha+180|0;if((c[K+4>>2]|0)!=1){P=63;break}L=c[c[K>>2]>>2]|0;K=c[L+8>>2]|0;if((a[K+112|0]|0)==0){ja=L}else{L=K;do{ka=c[L+116>>2]|0;L=c[ka+8>>2]|0;}while((a[L+112|0]|0)!=0);ja=ka}if((Rx(d,ja|0)|0)==0){P=63}else{la=1}}else{P=63}}while(0);if((P|0)==63){P=0;la=0}$=la|ga}}while(0);E=$+D|0;B=C+1|0;L=c[z>>2]|0;K=L+188|0;if((B|0)<(c[K+4>>2]|0)){D=E;C=B;H=K}else{ma=E;na=L;break}}}else{ma=0;na=_}do{if((ma|Z|0)==0){c[n+(s<<2)>>2]=y;oa=s+1|0}else{if((a[na+157|0]|0)!=0|(Z|0)!=0){oa=s;break}oa=(Fp(d,y,n+(s<<2)|0,h)|0)+s|0}}while(0);y=t+1|0;pa=c[e>>2]|0;H=c[pa+184>>2]|0;C=c[H+(h*44|0)>>2]|0;if((y|0)<(C|0)){s=oa;t=y;u=pa;v=H;w=C}else{break}}if((oa|0)==0){break}do{if((c[pa+116>>2]&1|0)==0){w=n+(oa-1<<2)|0;if(n>>>0<w>>>0){qa=n;ra=w}else{sa=pa;break}do{w=c[qa>>2]|0;c[qa>>2]=c[ra>>2];c[ra>>2]=w;qa=qa+4|0;ra=ra-4|0;}while(qa>>>0<ra>>>0);sa=c[e>>2]|0}else{sa=pa}}while(0);w=c[sa+184>>2]|0;if((c[w+(h*44|0)>>2]|0)>0){ta=0;ua=w}else{break}do{w=c[n+(ta<<2)>>2]|0;c[(c[ua+(h*44|0)+4>>2]|0)+(ta<<2)>>2]=w;c[(c[w+8>>2]|0)+236>>2]=ta+f;ta=ta+1|0;va=c[e>>2]|0;ua=c[va+184>>2]|0;wa=c[ua+(h*44|0)>>2]|0;}while((ta|0)<(wa|0));if((wa|0)>0){xa=0;ya=ua;za=va}else{break}while(1){w=(c[(c[ya+(h*44|0)+4>>2]|0)+(xa<<2)>>2]|0)+8|0;v=c[w>>2]|0;u=c[v+188>>2]|0;do{if((u|0)==0){Aa=za}else{t=c[u>>2]|0;if((t|0)==0){Aa=za;break}else{Ba=0;Ca=t;Da=v;Ea=za}while(1){t=c[Ca>>2]|0;s=t&3;C=c[(c[(c[((s|0)==2?Ca:Ca-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;H=c[(c[(c[((s|0)==3?Ca:Ca+32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0;if((c[Ea+116>>2]&1|0)==0){if((C|0)<(H|0)){P=84}else{Fa=Ba;Ga=Da}}else{if((C|0)>(H|0)){P=84}else{Fa=Ba;Ga=Da}}if((P|0)==84){P=0;do{if((c[(c[Ca+8>>2]|0)+156>>2]|0)!=0){H=Ca;C=c[((t&3|0)==3?Ca:Ca+32|0)+28>>2]|0;s=C+8|0;y=c[s>>2]|0;D=a[y+156|0]|0;if(D<<24>>24==0){z=(Rx(d,C|0)|0)!=0|0;C=c[s>>2]|0;Ha=z;Ia=C;Ja=a[C+156|0]|0}else{Ha=0;Ia=y;Ja=D}do{if(Ja<<24>>24==1){if((c[Ia+176>>2]|0)!=1){P=94;break}D=Ia+180|0;if((c[D+4>>2]|0)!=1){P=94;break}y=c[c[D>>2]>>2]|0;D=c[y+8>>2]|0;if((a[D+112|0]|0)==0){Ka=y}else{y=D;do{La=c[y+116>>2]|0;y=c[La+8>>2]|0;}while((a[y+112|0]|0)!=0);Ka=La}if((Rx(d,Ka|0)|0)==0){P=94}else{Ma=1}}else{P=94}}while(0);if((P|0)==94){P=0;Ma=0}if((Ma|Ha|0)==0){break}y=c[((c[H>>2]&3|0)==2?Ca:Ca-32|0)+28>>2]|0;D=y+8|0;C=c[D>>2]|0;z=a[C+156|0]|0;if(z<<24>>24==0){s=(Rx(d,y|0)|0)!=0|0;y=c[D>>2]|0;Na=s;Oa=y;Pa=a[y+156|0]|0}else{Na=0;Oa=C;Pa=z}do{if(Pa<<24>>24==1){if((c[Oa+176>>2]|0)!=1){P=105;break}z=Oa+180|0;if((c[z+4>>2]|0)!=1){P=105;break}C=c[c[z>>2]>>2]|0;z=c[C+8>>2]|0;if((a[z+112|0]|0)==0){Qa=C}else{C=z;do{Ra=c[C+116>>2]|0;C=c[Ra+8>>2]|0;}while((a[C+112|0]|0)!=0);Qa=Ra}if((Rx(d,Qa|0)|0)==0){P=105}else{Sa=1}}else{P=105}}while(0);if((P|0)==105){P=0;Sa=0}if((Sa|Na|0)!=0){P=107;break a}}}while(0);dp(Ca);pp(d,Ca);Fa=Ba-1|0;Ga=c[w>>2]|0}t=Fa+1|0;H=c[(c[Ga+188>>2]|0)+(t<<2)>>2]|0;C=c[e>>2]|0;if((H|0)==0){Aa=C;break}else{Ba=t;Ca=H;Da=Ga;Ea=C}}}}while(0);w=xa+1|0;v=c[Aa+184>>2]|0;if((w|0)<(c[v+(h*44|0)>>2]|0)){xa=w;ya=v;za=Aa}else{break}}}}while(0);a[(c[(c[(c[53542]|0)+8>>2]|0)+184>>2]|0)+(h*44|0)+33|0]=0;k=n;l=c[e>>2]|0}if((h|0)<(b[l+226>>1]|0)){h=h+1|0;g=k;i=l}else{break}}if((P|0)==107){cc(132240,117264,1292,170600)}if((k|0)==0){return}eF(k);return}function Dp(a,b){a=a|0;b=b|0;return(c[a>>2]|0)-(c[b>>2]|0)|0}function Ep(a,b){a=a|0;b=b|0;return(c[(c[(c[a>>2]|0)+8>>2]|0)+236>>2]|0)-(c[(c[(c[b>>2]|0)+8>>2]|0)+236>>2]|0)|0}function Fp(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;g=d+8|0;a[(c[g>>2]|0)+157|0]=1;h=c[g>>2]|0;i=h+188|0;do{if((c[i+4>>2]|0)>0){j=c[c[i>>2]>>2]|0;if((j|0)==0){k=0;l=h;break}else{m=0;n=0;o=j}while(1){do{if((c[(c[o+8>>2]|0)+156>>2]|0)==0){p=n}else{j=o;q=c[((c[j>>2]&3|0)==3?o:o+32|0)+28>>2]|0;r=q+8|0;s=c[r>>2]|0;t=a[s+156|0]|0;if(t<<24>>24==0){u=(Rx(b,q|0)|0)!=0|0;q=c[r>>2]|0;v=u;w=q;x=a[q+156|0]|0}else{v=0;w=s;x=t}do{if(x<<24>>24==1){if((c[w+176>>2]|0)!=1){y=13;break}t=w+180|0;if((c[t+4>>2]|0)!=1){y=13;break}s=c[c[t>>2]>>2]|0;t=c[s+8>>2]|0;if((a[t+112|0]|0)==0){z=s}else{s=t;do{A=c[s+116>>2]|0;s=c[A+8>>2]|0;}while((a[s+112|0]|0)!=0);z=A}if((Rx(b,z|0)|0)==0){y=13}else{B=1}}else{y=13}}while(0);if((y|0)==13){y=0;B=0}if((B|v|0)==0){p=n;break}s=o-32|0;t=c[((c[j>>2]&3|0)==2?o:s)+28>>2]|0;q=t+8|0;u=c[q>>2]|0;r=a[u+156|0]|0;if(r<<24>>24==0){C=(Rx(b,t|0)|0)!=0|0;t=c[q>>2]|0;D=C;E=t;F=a[t+156|0]|0}else{D=0;E=u;F=r}do{if(F<<24>>24==1){if((c[E+176>>2]|0)!=1){y=24;break}r=E+180|0;if((c[r+4>>2]|0)!=1){y=24;break}u=c[c[r>>2]>>2]|0;r=c[u+8>>2]|0;if((a[r+112|0]|0)==0){G=u}else{u=r;do{H=c[u+116>>2]|0;u=c[H+8>>2]|0;}while((a[u+112|0]|0)!=0);G=H}if((Rx(b,G|0)|0)==0){y=24}else{I=1}}else{y=24}}while(0);if((y|0)==24){y=0;I=0}if((I|D|0)==0){p=n;break}u=c[((c[j>>2]&3|0)==2?o:s)+28>>2]|0;if((a[(c[u+8>>2]|0)+157|0]|0)!=0){p=n;break}p=(Fp(b,u,e+(n<<2)|0,f)|0)+n|0}}while(0);u=m+1|0;r=c[g>>2]|0;t=c[(c[r+188>>2]|0)+(u<<2)>>2]|0;if((t|0)==0){k=p;l=r;break}else{m=u;n=p;o=t}}}else{k=0;l=h}}while(0);if((c[l+232>>2]|0)==(f|0)){c[e+(k<<2)>>2]=d;return k+1|0}else{cc(129928,117264,1221,170048);return 0}return 0}function Gp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;e=d+8|0;d=c[e>>2]|0;f=c[(c[(c[b+8>>2]|0)+184>>2]|0)+((c[d+232>>2]|0)*44|0)+40>>2]|0;a[d+157|0]=1;a[(c[e>>2]|0)+158|0]=1;d=(c[(c[(Ix(b|0)|0)+8>>2]|0)+172>>2]|0)>0;g=c[e>>2]|0;h=c[g+188>>2]|0;if((h|0)==0){i=g;j=i;k=j+158|0;a[k]=0;return}l=c[h>>2]|0;if((l|0)==0){i=g;j=i;k=j+158|0;a[k]=0;return}g=f|0;h=f+4|0;m=f+8|0;f=0;n=l;a:while(1){do{if(d){l=n;if((Rx(b,c[((c[l>>2]&3|0)==3?n:n+32|0)+28>>2]|0)|0)==0){o=f;break}if((Rx(b,c[((c[l>>2]&3|0)==2?n:n-32|0)+28>>2]|0)|0)==0){o=f}else{p=7}}else{p=7}}while(0);do{if((p|0)==7){p=0;l=n+8|0;if((c[(c[l>>2]|0)+156>>2]|0)==0){o=f;break}q=n;r=c[q>>2]&3;s=n-32|0;t=c[(c[((r|0)==2?n:s)+28>>2]|0)+8>>2]|0;u=c[t+280>>2]|0;v=(u|0)<(c[g>>2]|0);if((a[t+158|0]|0)==1){if(!v){p=10;break a}t=c[(c[(c[((r|0)==3?n:n+32|0)+28>>2]|0)+8>>2]|0)+280>>2]|0;w=c[h>>2]|0;if((t|0)>=(w|0)){p=12;break a}x=(da(w,u)|0)+t|0;a[(c[m>>2]|0)+x|0]=1;dp(n);x=f-1|0;if((a[(c[l>>2]|0)+112|0]|0)==4){o=x;break}pp(b,n);o=x;break}else{if(!v){p=16;break a}v=c[(c[(c[((r|0)==3?n:n+32|0)+28>>2]|0)+8>>2]|0)+280>>2]|0;r=c[h>>2]|0;if((v|0)>=(r|0)){p=18;break a}x=(da(r,v)|0)+u|0;a[(c[m>>2]|0)+x|0]=1;x=c[((c[q>>2]&3|0)==2?n:s)+28>>2]|0;if((a[(c[x+8>>2]|0)+157|0]|0)!=0){o=f;break}Gp(b,x);o=f;break}}}while(0);x=o+1|0;s=c[e>>2]|0;q=c[(c[s+188>>2]|0)+(x<<2)>>2]|0;if((q|0)==0){i=s;p=22;break}else{f=x;n=q}}if((p|0)==10){cc(126736,117264,982,170584)}else if((p|0)==12){cc(124192,117264,983,170584)}else if((p|0)==16){cc(126736,117264,991,170584)}else if((p|0)==18){cc(124192,117264,992,170584)}else if((p|0)==22){j=i;k=j+158|0;a[k]=0;return}}function Hp(d,f){d=d|0;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0,ba=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,wa=0.0,xa=0.0,ya=0,za=0.0,Aa=0.0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;g=i;i=i+8|0;j=g|0;k=d+8|0;if((c[(c[k>>2]|0)+180>>2]|0)==0){i=g;return}go(d);Ip(d);if((a[215376]|0)!=0){no(d)}l=c[k>>2]|0;m=b[l+224>>1]|0;if(m<<16>>16>(b[l+226>>1]|0)){n=l}else{p=m<<16>>16;m=l;q=l;while(1){l=c[m+184>>2]|0;r=c[l+(p*44|0)>>2]|0;if((r|0)>0){s=0;t=0;u=l;while(1){v=(c[(c[u+(p*44|0)+4>>2]|0)+(s<<2)>>2]|0)+8|0;c[(c[v>>2]|0)+236>>2]=t;w=c[v>>2]|0;if((a[w+159|0]|0)==6){x=c[w+216>>2]|0}else{x=1}w=x+t|0;v=s+1|0;y=c[k>>2]|0;z=c[y+184>>2]|0;A=c[z+(p*44|0)>>2]|0;if((v|0)<(A|0)){s=v;t=w;u=z}else{B=w;C=z;D=A;E=y;F=y;break}}}else{B=0;C=l;D=r;E=m;F=q}if((B|0)>(D|0)){u=c[C+(p*44|0)+4>>2]|0;if((u|0)==0){G=kk((B<<2)+4|0)|0}else{G=mk(u,(B<<2)+4|0)|0}c[(c[(c[k>>2]|0)+184>>2]|0)+(p*44|0)+4>>2]=G;u=c[(c[k>>2]|0)+184>>2]|0;t=c[u+(p*44|0)>>2]|0;if((t|0)>0){s=t;t=u;while(1){y=s-1|0;A=c[t+(p*44|0)+4>>2]|0;z=c[A+(y<<2)>>2]|0;c[A+(c[(c[z+8>>2]|0)+236>>2]<<2)>>2]=z;z=c[(c[k>>2]|0)+184>>2]|0;if((y|0)>0){s=y;t=z}else{H=z;break}}}else{H=u}c[H+(p*44|0)>>2]=B;c[(c[(c[(c[k>>2]|0)+184>>2]|0)+(p*44|0)+4>>2]|0)+(B<<2)>>2]=0;t=c[k>>2]|0;I=t;J=t}else{I=E;J=F}if((p|0)<(b[I+226>>1]|0)){p=p+1|0;m=I;q=J}else{n=J;break}}}J=c[n+180>>2]|0;if((J|0)!=0){n=J;do{J=n+8|0;q=c[J>>2]|0;I=c[q+224>>2]|0;if((I|0)==0){K=q}else{Lp(d,I);K=c[J>>2]|0}I=c[K+228>>2]|0;if((I|0)==0){L=K}else{Lp(d,I);L=c[J>>2]|0}J=c[L+204>>2]|0;if((J|0)!=0){I=J;J=0;while(1){if((c[I+(J<<2)>>2]|0)==0){break}else{J=J+1|0}}}n=c[L+164>>2]|0;}while((n|0)!=0)}if((gp(d)|0)!=0){Ip(d)}n=c[k>>2]|0;L=c[n+180>>2]|0;if((L|0)==0){M=n}else{n=L;do{L=n+8|0;K=c[L>>2]|0;J=K+172|0;I=K+244|0;K=c[J+4>>2]|0;c[I>>2]=c[J>>2];c[I+4>>2]=K;K=c[L>>2]|0;I=K+180|0;J=K+252|0;K=c[I+4>>2]|0;c[J>>2]=c[I>>2];c[J+4>>2]=K;K=c[L>>2]|0;J=c[K+180>>2]|0;I=0;while(1){if((c[J+(I<<2)>>2]|0)==0){break}else{I=I+1|0}}J=K+172|0;u=c[J>>2]|0;q=0;while(1){if((c[u+(q<<2)>>2]|0)==0){break}else{q=q+1|0}}c[J+4>>2]=0;u=jk((q+I<<2)+16|0)|0;c[(c[L>>2]|0)+172>>2]=u;c[(c[L>>2]|0)+184>>2]=0;u=jk(16)|0;c[(c[L>>2]|0)+180>>2]=u;n=c[(c[L>>2]|0)+164>>2]|0;}while((n|0)!=0);M=c[k>>2]|0}n=M;u=c[M+184>>2]|0;K=(a[n+113|0]&1)==0;m=c[M+236>>2]|0;c[j>>2]=m;c[j+4>>2]=K?m:5;m=b[M+224>>1]|0;if(m<<16>>16>(b[n+226>>1]|0)){N=M}else{M=m<<16>>16;while(1){m=u+(M*44|0)+4|0;c[(c[(c[c[m>>2]>>2]|0)+8>>2]|0)+232>>2]=0;n=u+(M*44|0)|0;if((c[n>>2]|0)>0){O=+(c[j+((M&1)<<2)>>2]|0);K=0;P=0.0;while(1){p=c[(c[m>>2]|0)+(K<<2)>>2]|0;F=p+8|0;E=c[F>>2]|0;c[E+240>>2]=~~+h[E+96>>3];E=c[F>>2]|0;B=E+204|0;if((c[B+4>>2]|0)>0){H=c[c[B>>2]>>2]|0;if((H|0)==0){Q=0;R=E}else{B=0;G=0;C=H;H=E;while(1){E=c[C>>2]&3;if((c[((E|0)==3?C:C+32|0)+28>>2]|0)==(c[((E|0)==2?C:C-32|0)+28>>2]|0)){E=(hm(C)|0)+B|0;S=E;T=c[F>>2]|0}else{S=B;T=H}E=G+1|0;D=c[(c[T+204>>2]|0)+(E<<2)>>2]|0;if((D|0)==0){Q=S;R=T;break}else{B=S;G=E;C=D;H=T}}}H=R+96|0;h[H>>3]=+(Q|0)+ +h[H>>3]}H=K+1|0;C=c[(c[m>>2]|0)+(H<<2)>>2]|0;if((C|0)==0){U=P}else{G=C+8|0;V=O+(+h[(c[F>>2]|0)+96>>3]+ +h[(c[G>>2]|0)+88>>3]);Jp(p,C,V,0)|0;C=~~(P+V);c[(c[G>>2]|0)+232>>2]=C;U=+(C|0)}C=c[F>>2]|0;G=c[C+112>>2]|0;do{if((G|0)!=0){B=c[C+252>>2]|0;D=c[B>>2]|0;E=c[B+4>>2]|0;B=E;x=(c[(c[(c[((c[D>>2]&3|0)==2?D:D-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0)>(c[(c[(c[((c[E>>2]&3|0)==2?B:E-32|0)+28>>2]|0)+8>>2]|0)+236>>2]|0);E=x?B:D;t=x?D:B;B=G+8|0;D=c[B>>2]|0;V=+((da(c[(c[k>>2]|0)+236>>2]|0,e[D+170>>1]|0)|0)/2|0|0);x=c[E>>2]&3;s=c[((x|0)==2?E:E-32|0)+28>>2]|0;r=c[((x|0)==3?E:E+32|0)+28>>2]|0;if((Wp(r,s)|0)==0){Jp(s,r,+(~~(+h[(c[r+8>>2]|0)+88>>3]+(V+ +h[(c[s+8>>2]|0)+96>>3]))|0),c[D+156>>2]|0)|0}D=c[t>>2]&3;s=c[((D|0)==3?t:t+32|0)+28>>2]|0;r=c[((D|0)==2?t:t-32|0)+28>>2]|0;if((Wp(r,s)|0)!=0){break}Jp(s,r,+(~~(+h[(c[r+8>>2]|0)+88>>3]+(V+ +h[(c[s+8>>2]|0)+96>>3]))|0),c[(c[B>>2]|0)+156>>2]|0)|0}}while(0);G=(c[F>>2]|0)+188|0;if((c[G+4>>2]|0)>0){C=0;p=G;do{G=c[(c[p>>2]|0)+(C<<2)>>2]|0;B=c[G>>2]&3;s=c[((B|0)==3?G:G+32|0)+28>>2]|0;r=c[((B|0)==2?G:G-32|0)+28>>2]|0;B=(c[(c[s+8>>2]|0)+236>>2]|0)<(c[(c[r+8>>2]|0)+236>>2]|0);t=B?s:r;D=B?r:s;V=+h[(c[t+8>>2]|0)+96>>3]+ +h[(c[D+8>>2]|0)+88>>3];s=G+8|0;G=~~(V+ +(da(c[(c[k>>2]|0)+236>>2]|0,e[(c[s>>2]|0)+170>>1]|0)|0));r=So(t,D)|0;do{if((r|0)==0){B=c[s>>2]|0;if((c[B+96>>2]|0)!=0){break}Jp(t,D,+(G|0),c[B+156>>2]|0)|0}else{W=+(G|0);X=V+ +(c[(c[k>>2]|0)+236>>2]|0);Y=+h[(c[s>>2]|0)+136>>3];B=Y<0.0;if(B){Z=Y+-.5}else{Z=Y+.5}if(W>X+ +(~~Z|0)){_=W}else{if(B){$=Y+-.5}else{$=Y+.5}_=X+ +(~~$|0)}B=~~_;if((B|0)>65535){Fv(1,92328,(aa=i,i=i+16|0,h[aa>>3]=+(B|0),c[aa+8>>2]=65535,aa)|0)|0;i=aa;ba=65535}else{ba=B}B=(c[r+8>>2]|0)+170|0;E=b[B>>1]|0;b[B>>1]=(E&65535|0)>(ba|0)?E:ba&65535}}while(0);C=C+1|0;p=(c[F>>2]|0)+188|0;}while((C|0)<(c[p+4>>2]|0))}if((H|0)<(c[n>>2]|0)){K=H;P=U}else{break}}}K=c[k>>2]|0;if((M|0)<(b[K+226>>1]|0)){M=M+1|0}else{N=K;break}}}M=c[N+180>>2]|0;if((M|0)==0){ea=N}else{N=M;do{M=N+8|0;ba=c[M>>2]|0;Q=c[ba+252>>2]|0;do{if((Q|0)==0){fa=ba}else{R=c[Q>>2]|0;if((R|0)==0){fa=ba;break}else{ga=0;ha=R}while(1){R=bp(d)|0;T=R+8|0;a[(c[T>>2]|0)+156|0]=2;S=ha+8|0;j=c[S>>2]|0;u=~~(+h[j+56>>3]- +h[j+16>>3]);K=(u|0)>0;n=K?0:-u|0;m=K?u:0;u=ha;K=ha+32|0;Jp(R,c[((c[u>>2]&3|0)==3?ha:K)+28>>2]|0,+(m+1|0),c[j+156>>2]|0)|0;j=ha-32|0;Jp(R,c[((c[u>>2]&3|0)==2?ha:j)+28>>2]|0,+(n+1|0),c[(c[S>>2]|0)+156>>2]|0)|0;S=c[u>>2]&3;u=(c[(c[(c[((S|0)==3?ha:K)+28>>2]|0)+8>>2]|0)+232>>2]|0)-m|0;m=(c[(c[(c[((S|0)==2?ha:j)+28>>2]|0)+8>>2]|0)+232>>2]|0)-n|0;c[(c[T>>2]|0)+232>>2]=((u|0)<(m|0)?u:m)-1;m=ga+1|0;u=c[M>>2]|0;T=c[(c[u+252>>2]|0)+(m<<2)>>2]|0;if((T|0)==0){fa=u;break}else{ga=m;ha=T}}}}while(0);N=c[fa+164>>2]|0;}while((N|0)!=0);ea=c[k>>2]|0}if((c[ea+172>>2]|0)>0){Sp(d);Tp(d);Up(d);Vp(d);ia=c[k>>2]|0}else{ia=ea}ea=c[ia+8>>2]|0;do{if((c[ea+84>>2]|0)==3){U=+h[ea+64>>3];_=+h[ea+72>>3];if(U*_<=1.0){break}Qp(d);ia=c[k>>2]|0;$=(c[ia+116>>2]&1|0)==0?U:_;Jp(c[ia+244>>2]|0,c[ia+248>>2]|0,$<65535.0?$:65535.0,1e3)|0}}while(0);ea=d|0;ia=ew(ea,87072)|0;if((ia|0)==0){ja=2147483647}else{$=+rF(ia);ja=~~($*+(Lw(d)|0))}do{if((ok(d,2,ja)|0)!=0){ia=c[k>>2]|0;N=b[ia+224>>1]|0;fa=b[ia+226>>1]|0;a:do{if(N<<16>>16<=fa<<16>>16){ha=N<<16>>16;ga=ia;M=fa;b:while(1){ba=c[ga+184>>2]|0;Q=c[ba+(ha*44|0)>>2]|0;c:do{if((Q|0)>0){H=c[ba+(ha*44|0)+4>>2]|0;T=0;do{ka=c[H+(T<<2)>>2]|0;m=c[ka+8>>2]|0;u=c[m+252>>2]|0;do{if((u|0)!=0){n=u;j=c[n>>2]|0;if((j|0)==0){break}else{la=0;ma=j}do{j=c[ma>>2]&3;if((c[(c[(c[((j|0)==2?ma:ma-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)>(ha|0)){na=ga;oa=M;break c}la=la+1|0;if((c[(c[(c[((j|0)==3?ma:ma+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)>(ha|0)){na=ga;oa=M;break c}ma=c[n+(la<<2)>>2]|0;}while((ma|0)!=0)}}while(0);u=c[m+244>>2]|0;do{if((u|0)!=0){n=u;j=c[n>>2]|0;if((j|0)==0){break}else{pa=0;qa=j}do{j=c[qa>>2]&3;if((c[(c[(c[((j|0)==3?qa:qa+32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)>(ha|0)){na=ga;oa=M;break c}pa=pa+1|0;if((c[(c[(c[((j|0)==2?qa:qa-32|0)+28>>2]|0)+8>>2]|0)+232>>2]|0)>(ha|0)){na=ga;oa=M;break c}qa=c[n+(pa<<2)>>2]|0;}while((qa|0)!=0)}}while(0);T=T+1|0;}while((T|0)<(Q|0));if((ka|0)==0){na=ga;oa=M;break}T=c[H>>2]|0;u=c[c[ba+((((ha|0)<(M<<16>>16|0)?1:-1)+ha|0)*44|0)+4>>2]>>2]|0;if((u|0)==0){break b}m=bp(d)|0;n=m+8|0;a[(c[n>>2]|0)+156|0]=2;Jp(m,T,0.0,0)|0;Jp(m,u,0.0,0)|0;m=c[(c[T+8>>2]|0)+232>>2]|0;T=c[(c[u+8>>2]|0)+232>>2]|0;c[(c[n>>2]|0)+232>>2]=(m|0)<(T|0)?m:T;T=c[k>>2]|0;na=T;oa=b[T+226>>1]|0}else{na=ga;oa=M}}while(0);if((ha|0)<(oa<<16>>16|0)){ha=ha+1|0;ga=na;M=oa}else{break a}}cc(82320,162848,111,170952)}}while(0);fa=ew(ea,87072)|0;if((fa|0)==0){ra=2147483647}else{$=+rF(fa);ra=~~($*+(Lw(d)|0))}if((ok(d,2,ra)|0)==0){break}cc(152680,162848,134,170744)}}while(0);ra=c[k>>2]|0;ea=c[ra+184>>2]|0;oa=b[ra+224>>1]|0;if(oa<<16>>16<=(b[ra+226>>1]|0)){na=oa<<16>>16;oa=ra;while(1){ra=ea+(na*44|0)|0;if((c[ra>>2]|0)>0){ka=ea+(na*44|0)+4|0;qa=na;pa=0;do{ma=(c[(c[ka>>2]|0)+(pa<<2)>>2]|0)+8|0;la=c[ma>>2]|0;h[la+16>>3]=+(c[la+232>>2]|0);c[(c[ma>>2]|0)+232>>2]=qa;pa=pa+1|0;}while((pa|0)<(c[ra>>2]|0));sa=c[k>>2]|0}else{sa=oa}if((na|0)<(b[sa+226>>1]|0)){na=na+1|0;oa=sa}else{break}}}Mp(d,d);sa=c[k>>2]|0;d:do{if((b[sa+226>>1]|0)>0){oa=c[sa+8>>2]|0;na=c[oa+84>>2]|0;if((na|0)==0){break}$=+h[sa+32>>3];ea=~~($- +h[sa+16>>3]);_=+h[sa+40>>3];ra=~~(_- +h[sa+24>>3]);pa=(c[sa+116>>2]&1|0)==0;qa=pa?ra:ea;ka=pa?ea:ra;do{if((na|0)==4){U=+h[oa+48>>3];Z=+h[oa+56>>3];if(U<.001|Z<.001){break d}P=+h[oa+32>>3];O=+h[oa+40>>3];V=U-P-P;P=Z-O-O;O=V/$;Z=P/_;if(!(O<1.0|Z<1.0)){break d}U=O<Z?O:Z;Z=U>.5?U:.5;U=P*+ca(_*Z/P)/_;h[oa+64>>3]=$*(V*+ca($*Z/V)/$);h[(c[(c[k>>2]|0)+8>>2]|0)+72>>3]=_*U;ra=c[k>>2]|0;ta=c[ra+8>>2]|0;ua=ra;va=122}else if((na|0)==2){ta=oa;ua=sa;va=122}else if((na|0)==5){U=+h[oa+64>>3];if(U<=0.0){break d}V=U/$;U=+h[oa+72>>3]/_;if(!(V>1.0&U>1.0)){break d}Z=V<U?V:U;wa=Z;xa=Z;ya=sa}else if((na|0)==1){Z=+h[oa+16>>3];U=+(qa|0)/+(ka|0);if(U<Z){wa=1.0;xa=Z/U;ya=sa;break}else{wa=U/Z;xa=1.0;ya=sa;break}}else{break d}}while(0);do{if((va|0)==122){_=+h[ta+64>>3];if(_<=0.0){break d}$=_/+(ka|0);_=+h[ta+72>>3]/+(qa|0);if(!($<1.0|_<1.0)){wa=$;xa=_;ya=ua;break}if($<_){wa=1.0;xa=_/$;ya=ua;break}else{wa=$/_;xa=1.0;ya=ua;break}}}while(0);qa=(c[ya+116>>2]&1|0)==0;_=qa?xa:wa;$=qa?wa:xa;qa=c[ya+180>>2]|0;if((qa|0)!=0){ka=qa;do{qa=ka+8|0;oa=(c[qa>>2]|0)+16|0;Z=$*+h[oa>>3];if(Z<0.0){za=Z+-.5}else{za=Z+.5}h[oa>>3]=+(~~za|0);oa=(c[qa>>2]|0)+24|0;Z=_*+h[oa>>3];if(Z<0.0){Aa=Z+-.5}else{Aa=Z+.5}h[oa>>3]=+(~~Aa|0);ka=c[(c[qa>>2]|0)+164>>2]|0;}while((ka|0)!=0)}Np(d,$,_)}}while(0);e:do{if((f|0)!=0){ya=c[k>>2]|0;Aa=+h[ya+32>>3]- +h[ya+16>>3];za=+h[ya+40>>3]- +h[ya+24>>3];xa=Aa/za;if((a[213992]|0)!=0){ya=c[o>>2]|0;gc(ya|0,131256,(aa=i,i=i+16|0,h[aa>>3]=xa,h[aa+8>>3]=Aa*za/1.0e4,aa)|0)|0;i=aa;ua=Nn(d)|0;gc(ya|0,116648,(aa=i,i=i+8|0,c[aa>>2]=ua,aa)|0)|0;i=aa}za=+h[f>>3];do{if(xa>za*1.1){c[f+24>>2]=~~(za*+((c[f+20>>2]|0)-(c[f+16>>2]|0)|0)/xa)}else{ua=f+24|0;if(xa>za*.8){c[ua>>2]=0;break}c[ua>>2]=-1;if((a[213992]|0)==0){break e}Ma(109280,34,1,c[o>>2]|0)|0}}while(0);if((a[213992]|0)==0){break}gc(c[o>>2]|0,103400,(aa=i,i=i+8|0,c[aa>>2]=c[f+24>>2],aa)|0)|0;i=aa}}while(0);aa=c[(c[k>>2]|0)+180>>2]|0;f:do{if((aa|0)!=0){f=aa;do{d=f+8|0;ua=c[d>>2]|0;ya=c[ua+180>>2]|0;ta=c[ya>>2]|0;if((ta|0)==0){Ba=ya;Ca=ua}else{ua=0;ya=ta;while(1){eF(c[ya+8>>2]|0);eF(ya|0);ta=ua+1|0;va=c[d>>2]|0;sa=c[va+180>>2]|0;ka=c[sa+(ta<<2)>>2]|0;if((ka|0)==0){Ba=sa;Ca=va;break}else{ua=ta;ya=ka}}}if((Ba|0)==0){Da=Ca}else{eF(Ba);Da=c[d>>2]|0}ya=c[Da+172>>2]|0;if((ya|0)==0){Ea=Da}else{eF(ya);Ea=c[d>>2]|0}ya=Ea+252|0;ua=Ea+180|0;ka=c[ya+4>>2]|0;c[ua>>2]=c[ya>>2];c[ua+4>>2]=ka;ka=c[d>>2]|0;ua=ka+244|0;ya=ka+172|0;ka=c[ua+4>>2]|0;c[ya>>2]=c[ua>>2];c[ya+4>>2]=ka;f=c[(c[d>>2]|0)+164>>2]|0;}while((f|0)!=0);f=c[(c[k>>2]|0)+180>>2]|0;if((f|0)==0){break}else{Fa=f;Ga=0}while(1){f=Ga+8|0;g:do{if((Ga|0)==0){ka=Fa;while(1){ya=ka+8|0;ua=c[ya>>2]|0;ta=c[ua+164>>2]|0;if((a[ua+156|0]|0)!=2){Ha=ka;Ia=ta;break g}c[(c[k>>2]|0)+180>>2]=ta;eF(c[ya>>2]|0);eF(ka);if((ta|0)==0){break f}else{ka=ta}}}else{ka=Fa;while(1){ta=ka+8|0;ya=c[ta>>2]|0;ua=c[ya+164>>2]|0;if((a[ya+156|0]|0)!=2){Ha=ka;Ia=ua;break g}c[(c[f>>2]|0)+164>>2]=ua;eF(c[ta>>2]|0);eF(ka);if((ua|0)==0){break f}else{ka=ua}}}}while(0);if((Ia|0)==0){break}else{Fa=Ia;Ga=Ha}}}}while(0);c[(c[(c[(c[k>>2]|0)+180>>2]|0)+8>>2]|0)+168>>2]=0;i=g;return}function Ip(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;e=d+8|0;f=c[e>>2]|0;g=c[f+184>>2]|0;i=b[f+224>>1]|0;if(i<<16>>16<=(b[f+226>>1]|0)){j=i<<16>>16;i=f;while(1){f=g+(j*44|0)|0;if((c[f>>2]|0)>0){k=g+(j*44|0)+4|0;l=g+(j*44|0)+28|0;m=g+(j*44|0)+20|0;n=g+(j*44|0)+24|0;o=g+(j*44|0)+16|0;p=0;do{q=(c[(c[k>>2]|0)+(p<<2)>>2]|0)+8|0;r=c[q>>2]|0;s=+h[r+80>>3];if(s<0.0){t=s+-.5}else{t=s+.5}u=(~~t+1|0)/2|0;v=c[r+204>>2]|0;do{if((v|0)==0){w=u}else{r=v;x=c[r>>2]|0;if((x|0)==0){w=u;break}else{y=u;z=0;A=x}while(1){x=c[A>>2]&3;do{if((c[((x|0)==3?A:A+32|0)+28>>2]|0)==(c[((x|0)==2?A:A-32|0)+28>>2]|0)){B=c[(c[A+8>>2]|0)+96>>2]|0;if((B|0)==0){C=y;break}s=+(y|0);D=+h[B+32>>3]*.5;C=~~(s>D?s:D)}else{C=y}}while(0);x=z+1|0;B=c[r+(x<<2)>>2]|0;if((B|0)==0){w=C;break}else{y=C;z=x;A=B}}}}while(0);if((c[l>>2]|0)<(w|0)){c[m>>2]=w;c[l>>2]=w}if((c[n>>2]|0)<(w|0)){c[o>>2]=w;c[n>>2]=w}u=c[q>>2]|0;v=c[u+212>>2]|0;do{if((v|0)!=0){if((v|0)==(d|0)){E=0;F=u}else{r=Em(v,c[53720]|0,8,0)|0;E=r;F=c[q>>2]|0}r=c[F+232>>2]|0;B=v+8|0;x=c[B>>2]|0;if((r|0)==(b[x+224>>1]|0)){G=x+124|0;H=c[G>>2]|0;I=E+w|0;c[G>>2]=(H|0)>(I|0)?H:I;J=c[(c[q>>2]|0)+232>>2]|0;K=c[B>>2]|0}else{J=r;K=x}if((J|0)!=(b[K+226>>1]|0)){break}x=c[K+120>>2]|0;r=E+w|0;c[K+120>>2]=(x|0)>(r|0)?x:r}}while(0);p=p+1|0;}while((p|0)<(c[f>>2]|0));L=c[e>>2]|0}else{L=i}if((j|0)<(b[L+226>>1]|0)){j=j+1|0;i=L}else{break}}}L=Op(d)|0;i=b[(c[e>>2]|0)+226>>1]|0;j=i<<16>>16;h[(c[(c[c[g+(j*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]=+(c[g+(j*44|0)+16>>2]|0);K=c[e>>2]|0;if(i<<16>>16>(b[K+224>>1]|0)){i=0;w=j;j=K;while(1){E=w-1|0;J=(c[g+(E*44|0)+24>>2]|0)+(c[g+(w*44|0)+28>>2]|0)+(c[j+240>>2]|0)|0;F=(c[g+(w*44|0)+20>>2]|0)+8+(c[g+(E*44|0)+16>>2]|0)|0;A=(J|0)>(F|0)?J:F;if((c[g+(E*44|0)>>2]|0)>0){h[(c[(c[c[g+(E*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]=+(A|0)+ +h[(c[(c[c[g+(w*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3];M=c[e>>2]|0}else{M=j}F=(i|0)>(A|0)?i:A;if((E|0)>(b[M+224>>1]|0)){i=F;w=E;j=M}else{N=F;O=M;break}}}else{N=0;O=K}do{if((L|0)==0){P=N;Q=O}else{if((c[O+116>>2]&1|0)==0){P=N;Q=O;break}Pp(d,0);K=c[e>>2]|0;if((a[K+264|0]|0)==0){P=N;Q=K;break}M=b[K+226>>1]|0;j=M<<16>>16;w=b[K+224>>1]|0;if(M<<16>>16<=w<<16>>16){P=0;Q=K;break}M=w<<16>>16;w=~~+h[(c[(c[c[g+(j*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3];i=0;F=j;while(1){j=F-1|0;E=~~+h[(c[(c[c[g+(j*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3];A=E-w|0;J=(i|0)>(A|0)?i:A;if((j|0)>(M|0)){w=E;i=J;F=j}else{P=J;Q=K;break}}}}while(0);do{if((a[Q+264|0]|0)==0){R=Q}else{N=b[Q+226>>1]|0;if(N<<16>>16<=(b[Q+224>>1]|0)){R=Q;break}t=+(P|0);d=N<<16>>16;N=Q;while(1){O=d-1|0;if((c[g+(O*44|0)>>2]|0)>0){h[(c[(c[c[g+(O*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]=t+ +h[(c[(c[c[g+(d*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3];S=c[e>>2]|0}else{S=N}if((O|0)>(b[S+224>>1]|0)){d=O;N=S}else{R=S;break}}}}while(0);S=c[R+180>>2]|0;if((S|0)==0){return}else{T=S}do{S=T+8|0;R=c[S>>2]|0;h[R+24>>3]=+h[(c[(c[c[g+((c[R+232>>2]|0)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3];T=c[(c[S>>2]|0)+164>>2]|0;}while((T|0)!=0);return}function Jp(a,d,e,f){a=a|0;d=d|0;e=+e;f=f|0;var g=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0.0;g=i;j=jk(64)|0;k=j+32|0;l=k;c[l>>2]=c[l>>2]|3;l=j;m=j;c[m>>2]=c[m>>2]&-4|2;n=j+8|0;c[n>>2]=jk(176)|0;c[((c[m>>2]&3|0)==3?l:k)+28>>2]=a;c[((c[m>>2]&3|0)==2?l:j-32|0)+28>>2]=d;do{if(e>65535.0){Fv(1,92328,(d=i,i=i+16|0,h[d>>3]=e,c[d+8>>2]=65535,d)|0)|0;i=d;o=65535.0;p=4}else{if(e>=0.0){o=e;p=4;break}q=e+-.5}}while(0);if((p|0)==4){q=o+.5}b[(c[n>>2]|0)+170>>1]=~~q;c[(c[n>>2]|0)+156>>2]=f;Uo(l)|0;i=g;return l|0}function Kp(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=c[b+8>>2]|0;b=a[e+84|0]|0;f=c[d+8>>2]|0;if(b<<24>>24!=(a[f+84|0]|0)){g=0;return g|0}do{if(+h[e+56>>3]==+h[f+56>>3]){if(+h[e+64>>3]==+h[f+64>>3]|b<<24>>24==0){break}else{g=0}return g|0}else{if(b<<24>>24==0){break}else{g=0}return g|0}}while(0);do{if(+h[e+16>>3]==+h[f+16>>3]){if(+h[e+24>>3]==+h[f+24>>3]){g=1}else{break}return g|0}}while(0);g=(a[e+44|0]|0)==0|0;return g|0}function Lp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;d=b+8|0;e=c[d>>2]|0;if((c[e+216>>2]|0)<2){return}f=~~(+h[e+16>>3]- +h[e+88>>3]);g=~~+h[e+24>>3];e=b|0;vn(b,c[(c[(Hx(e)|0)+8>>2]|0)+116>>2]&1);i=+(g|0);h[(c[d>>2]|0)+24>>3]=i;j=+(f|0);f=c[d>>2]|0;h[f+16>>3]=j+ +h[f+88>>3];f=c[d>>2]|0;k=j+ +h[f+88>>3]+ +h[f+96>>3];f=~~(k+ +(c[(c[(Hx(e)|0)+8>>2]|0)+236>>2]|0));e=c[d>>2]|0;d=e+180|0;if((c[d+4>>2]|0)>0){g=c[c[d>>2]>>2]|0;d=c[e+236>>2]|0;l=pw(a,c[((c[g>>2]&3|0)==2?g:g-32|0)+28>>2]|0)|0;if((l|0)==0){return}g=f;m=l;l=d+1|0;while(1){d=(c[m>>2]&3|0)==2?m:m-32|0;n=d;o=d+32|0;p=c[((c[n>>2]&3|0)==3?d:o)+28>>2]|0;do{if((p|0)==(b|0)){q=l;r=g}else{if((Lm(p)|0)!=(b|0)){q=l;r=g;break}s=c[((c[n>>2]&3|0)==3?d:o)+28>>2]|0;t=s|0;u=Hx(t)|0;v=Lm(s)|0;if((v|0)!=(s|0)){$o(v,s)}w=s+8|0;c[(c[w>>2]|0)+236>>2]=l;c[(c[w>>2]|0)+232>>2]=c[(c[v+8>>2]|0)+232>>2];v=c[w>>2]|0;c[(c[(c[(c[u+8>>2]|0)+184>>2]|0)+((c[v+232>>2]|0)*44|0)+4>>2]|0)+(c[v+236>>2]<<2)>>2]=s;vn(s,c[(c[(Hx(t)|0)+8>>2]|0)+116>>2]&1);h[(c[w>>2]|0)+24>>3]=i;k=+(g|0);s=c[w>>2]|0;h[s+16>>3]=k+ +h[s+88>>3];s=c[w>>2]|0;j=k+ +h[s+88>>3]+ +h[s+96>>3];s=~~(j+ +(c[(c[(Hx(t)|0)+8>>2]|0)+236>>2]|0));fp(d);t=d-32|0;w=(c[(c[((c[n>>2]&3|0)==2?d:t)+28>>2]|0)+8>>2]|0)+172|0;v=c[w>>2]|0;if((v|0)==0){x=kk((c[w+4>>2]<<2)+8|0)|0}else{x=mk(v,(c[w+4>>2]<<2)+8|0)|0}c[(c[(c[((c[n>>2]&3|0)==2?d:t)+28>>2]|0)+8>>2]|0)+172>>2]=x;w=(c[(c[((c[n>>2]&3|0)==2?d:t)+28>>2]|0)+8>>2]|0)+176|0;v=c[w>>2]|0;c[w>>2]=v+1;c[(c[(c[(c[((c[n>>2]&3|0)==2?d:t)+28>>2]|0)+8>>2]|0)+172>>2]|0)+(v<<2)>>2]=d;v=(c[(c[((c[n>>2]&3|0)==2?d:t)+28>>2]|0)+8>>2]|0)+172|0;c[(c[v>>2]|0)+(c[v+4>>2]<<2)>>2]=0;q=l+1|0;r=s}}while(0);d=qw(a,m)|0;if((d|0)==0){break}else{g=r;m=d;l=q}}return}else{q=c[c[e+172>>2]>>2]|0;l=c[e+236>>2]|0;e=mw(a,c[((c[q>>2]&3|0)==3?q:q+32|0)+28>>2]|0)|0;if((e|0)==0){return}q=f;f=e;e=l+1|0;while(1){l=f;m=f-32|0;r=c[((c[l>>2]&3|0)==2?f:m)+28>>2]|0;do{if((r|0)==(b|0)){y=e;z=q}else{if((Lm(r)|0)!=(b|0)){y=e;z=q;break}g=c[((c[l>>2]&3|0)==2?f:m)+28>>2]|0;x=g|0;d=Hx(x)|0;n=Lm(g)|0;if((n|0)!=(g|0)){$o(n,g)}o=g+8|0;c[(c[o>>2]|0)+236>>2]=e;c[(c[o>>2]|0)+232>>2]=c[(c[n+8>>2]|0)+232>>2];n=c[o>>2]|0;c[(c[(c[(c[d+8>>2]|0)+184>>2]|0)+((c[n+232>>2]|0)*44|0)+4>>2]|0)+(c[n+236>>2]<<2)>>2]=g;vn(g,c[(c[(Hx(x)|0)+8>>2]|0)+116>>2]&1);h[(c[o>>2]|0)+24>>3]=i;j=+(q|0);g=c[o>>2]|0;h[g+16>>3]=j+ +h[g+88>>3];g=c[o>>2]|0;k=j+ +h[g+88>>3]+ +h[g+96>>3];g=~~(k+ +(c[(c[(Hx(x)|0)+8>>2]|0)+236>>2]|0));fp(f);x=f+32|0;o=(c[(c[((c[l>>2]&3|0)==3?f:x)+28>>2]|0)+8>>2]|0)+180|0;n=c[o>>2]|0;if((n|0)==0){A=kk((c[o+4>>2]<<2)+8|0)|0}else{A=mk(n,(c[o+4>>2]<<2)+8|0)|0}c[(c[(c[((c[l>>2]&3|0)==3?f:x)+28>>2]|0)+8>>2]|0)+180>>2]=A;o=(c[(c[((c[l>>2]&3|0)==3?f:x)+28>>2]|0)+8>>2]|0)+184|0;n=c[o>>2]|0;c[o>>2]=n+1;c[(c[(c[(c[((c[l>>2]&3|0)==3?f:x)+28>>2]|0)+8>>2]|0)+180>>2]|0)+(n<<2)>>2]=f;n=(c[(c[((c[l>>2]&3|0)==3?f:x)+28>>2]|0)+8>>2]|0)+180|0;c[(c[n>>2]|0)+(c[n+4>>2]<<2)>>2]=0;y=e+1|0;z=g}}while(0);l=ow(a,f)|0;if((l|0)==0){break}else{q=z;f=l;e=y}}return}}function Mp(d,e){d=d|0;e=e|0;var f=0,g=0,i=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0,G=0.0,H=0.0,I=0,J=0,K=0.0,L=0.0;f=d+8|0;g=c[f>>2]|0;if((c[g+172>>2]|0)>=1){i=1;j=g;while(1){Mp(c[(c[j+176>>2]|0)+(i<<2)>>2]|0,e);g=c[f>>2]|0;if((i|0)<(c[g+172>>2]|0)){i=i+1|0;j=g}else{break}}}j=(Ix(d|0)|0)==(d|0);d=c[f>>2]|0;do{if(j){i=b[d+224>>1]|0;g=b[d+226>>1]|0;if(i<<16>>16>g<<16>>16){k=2147483647.0;l=-2147483647.0}else{m=g<<16>>16;n=c[d+184>>2]|0;o=2147483647.0;p=-2147483647.0;q=i<<16>>16;while(1){r=c[n+(q*44|0)>>2]|0;do{if((r|0)==0){s=p;t=o}else{u=c[n+(q*44|0)+4>>2]|0;v=c[u>>2]|0;if((v|0)==0){s=p;t=o;break}w=c[v+8>>2]|0;v=a[w+156|0]|0;if(v<<24>>24!=0&(r|0)>1){x=1;while(1){y=x+1|0;z=c[(c[u+(x<<2)>>2]|0)+8>>2]|0;A=a[z+156|0]|0;if(A<<24>>24!=0&(y|0)<(r|0)){x=y}else{B=z;C=A;break}}}else{B=w;C=v}if(C<<24>>24!=0){s=p;t=o;break}D=+(~~(+h[B+16>>3]- +h[B+88>>3])|0);E=o<D?o:D;x=c[(c[u+(r-1<<2)>>2]|0)+8>>2]|0;if((a[x+156|0]|0)==0){F=x}else{x=r-2|0;while(1){A=c[(c[u+(x<<2)>>2]|0)+8>>2]|0;if((a[A+156|0]|0)==0){F=A;break}else{x=x-1|0}}}D=+(~~(+h[F+16>>3]+ +h[F+96>>3])|0);s=p>D?p:D;t=E}}while(0);if((q|0)<(m|0)){o=t;p=s;q=q+1|0}else{k=t;l=s;break}}}q=c[d+172>>2]|0;if((q|0)<1){G=l;H=k;I=g;J=i;break}m=c[d+176>>2]|0;p=k;n=1;o=l;while(1){r=c[(c[m+(n<<2)>>2]|0)+8>>2]|0;D=+(~~(+h[r+16>>3]+-8.0)|0);K=p<D?p:D;D=+(~~(+h[r+32>>3]+8.0)|0);L=o>D?o:D;if((n|0)<(q|0)){p=K;n=n+1|0;o=L}else{G=L;H=K;I=g;J=i;break}}}else{G=+(c[(c[(c[d+248>>2]|0)+8>>2]|0)+232>>2]|0);H=+(c[(c[(c[d+244>>2]|0)+8>>2]|0)+232>>2]|0);I=b[d+226>>1]|0;J=b[d+224>>1]|0}}while(0);F=c[(c[e+8>>2]|0)+184>>2]|0;l=+h[(c[(c[c[F+((I<<16>>16)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]- +(c[d+120>>2]|0);k=+h[(c[(c[c[F+((J<<16>>16)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]+ +(c[d+124>>2]|0);h[d+16>>3]=H;h[d+24>>3]=l;d=c[f>>2]|0;h[d+32>>3]=G;h[d+40>>3]=k;return}function Np(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,g=0,i=0;e=a+8|0;a=c[e>>2]|0;if((c[a+172>>2]|0)<1){f=a}else{g=1;i=a;while(1){Np(c[(c[i+176>>2]|0)+(g<<2)>>2]|0,b,d);a=c[e>>2]|0;if((g|0)<(c[a+172>>2]|0)){g=g+1|0;i=a}else{f=a;break}}}i=f+16|0;h[i>>3]=+h[i>>3]*b;i=(c[e>>2]|0)+24|0;h[i>>3]=+h[i>>3]*d;i=(c[e>>2]|0)+32|0;h[i>>3]=+h[i>>3]*b;i=(c[e>>2]|0)+40|0;h[i>>3]=+h[i>>3]*d;return}function Op(a){a=a|0;var d=0,e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;d=a|0;e=c[(c[(Ix(d)|0)+8>>2]|0)+184>>2]|0;if((Ix(d)|0)==(a|0)){f=8}else{f=Em(d,c[53720]|0,8,0)|0}g=a+8|0;i=c[g>>2]|0;j=c[i+120>>2]|0;k=c[i+124>>2]|0;if((c[i+172>>2]|0)<1){l=k;m=j;n=0}else{o=k;k=j;j=1;p=0;q=i;while(1){i=c[(c[q+176>>2]|0)+(j<<2)>>2]|0;r=Op(i)|0|p;s=c[i+8>>2]|0;i=c[g>>2]|0;if((b[s+226>>1]|0)==(b[i+226>>1]|0)){t=(c[s+120>>2]|0)+f|0;u=(k|0)>(t|0)?k:t}else{u=k}if((b[s+224>>1]|0)==(b[i+224>>1]|0)){t=(c[s+124>>2]|0)+f|0;v=(o|0)>(t|0)?o:t}else{v=o}if((j|0)<(c[i+172>>2]|0)){o=v;k=u;j=j+1|0;p=r;q=i}else{l=v;m=u;n=r;break}}}do{if((Ix(d)|0)==(a|0)){w=n;x=m;y=l}else{if((c[(c[g>>2]|0)+12>>2]|0)==0){w=n;x=m;y=l;break}if((c[(c[(Ix(d)|0)+8>>2]|0)+116>>2]&1|0)!=0){w=1;x=m;y=l;break}u=c[g>>2]|0;w=1;x=~~(+(m|0)+ +h[u+56>>3]);y=~~(+(l|0)+ +h[u+88>>3])}}while(0);c[(c[g>>2]|0)+120>>2]=x;c[(c[g>>2]|0)+124>>2]=y;if((Ix(d)|0)==(a|0)){return w|0}a=e+((b[(c[g>>2]|0)+224>>1]|0)*44|0)+20|0;d=c[a>>2]|0;c[a>>2]=(d|0)>(y|0)?d:y;y=e+((b[(c[g>>2]|0)+226>>1]|0)*44|0)+16|0;g=c[y>>2]|0;c[y>>2]=(g|0)>(x|0)?g:x;return w|0}function Pp(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0;e=a|0;f=c[(c[(Ix(e)|0)+8>>2]|0)+184>>2]|0;if((Ix(e)|0)==(a|0)){g=0}else{g=Em(e,c[53720]|0,8,0)|0}i=a+8|0;j=c[i>>2]|0;k=c[j+120>>2]|0;l=c[j+124>>2]|0;if((c[j+172>>2]|0)<1){m=k;n=l;o=j}else{p=g+d|0;q=k;k=l;l=1;r=j;while(1){j=c[(c[r+176>>2]|0)+(l<<2)>>2]|0;Pp(j,p);s=c[j+8>>2]|0;j=c[i>>2]|0;if((b[s+226>>1]|0)==(b[j+226>>1]|0)){t=(c[s+120>>2]|0)+g|0;u=(q|0)>(t|0)?q:t}else{u=q}if((b[s+224>>1]|0)==(b[j+224>>1]|0)){t=(c[s+124>>2]|0)+g|0;v=(k|0)>(t|0)?k:t}else{v=k}if((l|0)<(c[j+172>>2]|0)){q=u;k=v;l=l+1|0;r=j}else{m=u;n=v;o=j;break}}}c[o+120>>2]=m;c[(c[i>>2]|0)+124>>2]=n;do{if((Ix(e)|0)!=(a|0)){o=c[i>>2]|0;if((c[o+12>>2]|0)==0){break}w=+h[o+104>>3];x=+h[o+72>>3];v=~~(w>x?w:x)-(n+m)-~~(+h[(c[(c[c[f+((b[o+224>>1]|0)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3]- +h[(c[(c[c[f+((b[o+226>>1]|0)*44|0)+4>>2]>>2]|0)+8>>2]|0)+24>>3])|0;if((v|0)<=0){break}o=(Ix(e)|0)+8|0;u=c[(c[o>>2]|0)+184>>2]|0;r=c[i>>2]|0;l=b[r+226>>1]|0;k=l<<16>>16;q=b[r+224>>1]|0;g=q<<16>>16;p=(v+1|0)/2|0;j=(c[r+120>>2]|0)+p+(d-(c[u+(k*44|0)+16>>2]|0))|0;if((j|0)>0){if(l<<16>>16<q<<16>>16){y=r}else{x=+(j|0);l=k;while(1){if((c[u+(l*44|0)>>2]|0)>0){k=(c[(c[c[u+(l*44|0)+4>>2]>>2]|0)+8>>2]|0)+24|0;h[k>>3]=x+ +h[k>>3]}if((l|0)>(g|0)){l=l-1|0}else{break}}y=c[i>>2]|0}z=v+d-p+j+(c[y+124>>2]|0)-(c[u+(g*44|0)+20>>2]|0)|0;A=y}else{z=v+d-p+(c[r+124>>2]|0)-(c[u+(g*44|0)+20>>2]|0)|0;A=r}do{if((z|0)>0){l=c[o>>2]|0;if(q<<16>>16<=(b[l+224>>1]|0)){B=A;break}x=+(z|0);k=g;t=l;while(1){l=k-1|0;if((c[u+(l*44|0)>>2]|0)>0){s=(c[(c[c[u+(l*44|0)+4>>2]>>2]|0)+8>>2]|0)+24|0;h[s>>3]=x+ +h[s>>3];C=c[o>>2]|0}else{C=t}if((l|0)>(b[C+224>>1]|0)){k=l;t=C}else{break}}B=c[i>>2]|0}else{B=A}}while(0);o=B+124|0;c[o>>2]=v-p+(c[o>>2]|0);o=(c[i>>2]|0)+120|0;c[o>>2]=(c[o>>2]|0)+p}}while(0);if((Ix(e)|0)==(a|0)){return}a=c[i>>2]|0;e=f+((b[a+224>>1]|0)*44|0)+20|0;B=c[e>>2]|0;A=c[a+124>>2]|0;c[e>>2]=(B|0)>(A|0)?B:A;A=c[i>>2]|0;i=f+((b[A+226>>1]|0)*44|0)+16|0;f=c[i>>2]|0;B=c[A+120>>2]|0;c[i>>2]=(f|0)>(B|0)?f:B;return}function Qp(a){a=a|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0.0,n=0,o=0,p=0;d=i;e=a|0;f=Em(e,c[53720]|0,8,0)|0;Rp(a);g=a+8|0;a=c[g>>2]|0;j=c[a+244>>2]|0;k=c[a+248>>2]|0;l=b[a+224>>1]|0;if(l<<16>>16>(b[a+226>>1]|0)){i=d;return}m=+(f|0);f=l<<16>>16;l=a;while(1){a=c[l+184>>2]|0;do{if((c[a+(f*44|0)>>2]|0)!=0){n=c[c[a+(f*44|0)+4>>2]>>2]|0;if((n|0)==0){o=$w(e)|0;Fv(1,97888,(p=i,i=i+16|0,c[p>>2]=o,c[p+8>>2]=f,p)|0)|0;i=p;break}else{Jp(j,n,m+ +h[(c[n+8>>2]|0)+88>>3]+ +h[l+96>>3],0)|0;n=c[g>>2]|0;p=c[n+184>>2]|0;o=c[(c[p+(f*44|0)+4>>2]|0)+((c[p+(f*44|0)>>2]|0)-1<<2)>>2]|0;Jp(o,k,m+ +h[(c[o+8>>2]|0)+96>>3]+ +h[n+64>>3],0)|0;break}}}while(0);a=c[g>>2]|0;if((f|0)<(b[a+226>>1]|0)){f=f+1|0;l=a}else{break}}i=d;return}function Rp(b){b=b|0;var d=0,e=0,f=0,g=0,i=0,j=0.0,k=0.0;d=b+8|0;if((c[(c[d>>2]|0)+244>>2]|0)!=0){return}e=b|0;f=bp(Ix(e)|0)|0;a[(c[f+8>>2]|0)+156|0]=2;g=bp(Ix(e)|0)|0;a[(c[g+8>>2]|0)+156|0]=2;do{if((c[(c[d>>2]|0)+12>>2]|0)!=0){if((Ix(e)|0)==(b|0)){break}if((c[(c[(Ix(e)|0)+8>>2]|0)+116>>2]&1|0)!=0){break}i=c[d>>2]|0;j=+h[i+48>>3];k=+h[i+80>>3];Jp(f,g,+(~~(j>k?j:k)|0),0)|0}}while(0);c[(c[d>>2]|0)+244>>2]=f;c[(c[d>>2]|0)+248>>2]=g;return}function Sp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;do{if((Ix(a|0)|0)==(a|0)){b=a+8|0}else{Qp(a);d=a+8|0;e=c[d>>2]|0;f=So(c[e+244>>2]|0,c[e+248>>2]|0)|0;if((f|0)==0){e=c[d>>2]|0;Jp(c[e+244>>2]|0,c[e+248>>2]|0,1.0,128)|0;b=d;break}else{e=(c[f+8>>2]|0)+156|0;c[e>>2]=(c[e>>2]|0)+128;b=d;break}}}while(0);a=c[b>>2]|0;if((c[a+172>>2]|0)<1){return}else{g=1;h=a}while(1){Sp(c[(c[h+176>>2]|0)+(g<<2)>>2]|0);a=c[b>>2]|0;if((g|0)<(c[a+172>>2]|0)){g=g+1|0;h=a}else{break}}return}function Tp(d){d=d|0;var e=0,f=0,g=0,i=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;e=d|0;f=Em(e,c[53720]|0,8,0)|0;g=d+8|0;i=c[g>>2]|0;j=b[i+224>>1]|0;if(j<<16>>16>(b[i+226>>1]|0)){k=i}else{l=+(f|0);f=j<<16>>16;j=i;while(1){i=c[j+184>>2]|0;a:do{if((c[i+(f*44|0)>>2]|0)!=0){m=c[c[i+(f*44|0)+4>>2]>>2]|0;if((m|0)==0){break}n=m+8|0;m=c[(c[n>>2]|0)+236>>2]|0;b:do{if((m|0)>0){o=m;c:while(1){o=o-1|0;p=c[(c[(c[(c[(Ix(e)|0)+8>>2]|0)+184>>2]|0)+(f*44|0)+4>>2]|0)+(o<<2)>>2]|0;q=p+8|0;r=c[q>>2]|0;s=a[r+156|0]|0;do{if((s<<24>>24|0)==1){t=c[c[r+252>>2]>>2]|0;u=c[(c[t+8>>2]|0)+116>>2]|0;if((u|0)==0){v=t}else{t=u;while(1){u=c[(c[t+8>>2]|0)+116>>2]|0;if((u|0)==0){break}else{t=u}}v=t}u=v;if((Rx(d,c[((c[u>>2]&3|0)==3?v:v+32|0)+28>>2]|0)|0)!=0){break}if((Rx(d,c[((c[u>>2]&3|0)==2?v:v-32|0)+28>>2]|0)|0)==0){w=14;break c}}else if((s<<24>>24|0)==0){x=r;break c}}while(0);if((o|0)<=0){break b}}if((w|0)==14){w=0;x=c[q>>2]|0}Jp(p,c[(c[g>>2]|0)+244>>2]|0,l+ +h[x+96>>3],0)|0}}while(0);m=(c[(c[(c[g>>2]|0)+184>>2]|0)+(f*44|0)>>2]|0)+(c[(c[n>>2]|0)+236>>2]|0)|0;if((m|0)<(c[(c[(c[(Ix(e)|0)+8>>2]|0)+184>>2]|0)+(f*44|0)>>2]|0)){y=m}else{break}d:while(1){z=c[(c[(c[(c[(Ix(e)|0)+8>>2]|0)+184>>2]|0)+(f*44|0)+4>>2]|0)+(y<<2)>>2]|0;A=z+8|0;m=c[A>>2]|0;o=a[m+156|0]|0;do{if((o<<24>>24|0)==1){r=c[c[m+252>>2]>>2]|0;s=c[(c[r+8>>2]|0)+116>>2]|0;if((s|0)==0){B=r}else{r=s;while(1){s=c[(c[r+8>>2]|0)+116>>2]|0;if((s|0)==0){break}else{r=s}}B=r}s=B;if((Rx(d,c[((c[s>>2]&3|0)==3?B:B+32|0)+28>>2]|0)|0)!=0){break}if((Rx(d,c[((c[s>>2]&3|0)==2?B:B-32|0)+28>>2]|0)|0)==0){w=23;break d}}else if((o<<24>>24|0)==0){C=m;break d}}while(0);y=y+1|0;if((y|0)>=(c[(c[(c[(Ix(e)|0)+8>>2]|0)+184>>2]|0)+(f*44|0)>>2]|0)){break a}}if((w|0)==23){w=0;C=c[A>>2]|0}Jp(c[(c[g>>2]|0)+248>>2]|0,z,l+ +h[C+88>>3],0)|0}}while(0);i=c[g>>2]|0;if((f|0)<(b[i+226>>1]|0)){f=f+1|0;j=i}else{k=i;break}}}if((c[k+172>>2]|0)<1){return}else{D=1;E=k}while(1){Tp(c[(c[E+176>>2]|0)+(D<<2)>>2]|0);k=c[g>>2]|0;if((D|0)<(c[k+172>>2]|0)){D=D+1|0;E=k}else{break}}return}function Up(a){a=a|0;var b=0,d=0,e=0.0,f=0,g=0,i=0;b=Em(a|0,c[53720]|0,8,0)|0;Rp(a);d=a+8|0;a=c[d>>2]|0;if((c[a+172>>2]|0)<1){return}e=+(b|0);b=1;f=a;while(1){a=c[(c[f+176>>2]|0)+(b<<2)>>2]|0;Rp(a);g=c[d>>2]|0;i=a+8|0;Jp(c[g+244>>2]|0,c[(c[i>>2]|0)+244>>2]|0,e+ +h[g+96>>3],0)|0;g=c[d>>2]|0;Jp(c[(c[i>>2]|0)+248>>2]|0,c[g+248>>2]|0,e+ +h[g+64>>3],0)|0;Up(a);a=c[d>>2]|0;if((b|0)<(c[a+172>>2]|0)){b=b+1|0;f=a}else{break}}return}function Vp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=Em(a|0,c[53720]|0,8,0)|0;e=a+8|0;a=c[e>>2]|0;if((c[a+172>>2]|0)<1){return}else{f=1;g=a}while(1){Rp(c[(c[g+176>>2]|0)+(f<<2)>>2]|0);h=c[e>>2]|0;i=c[h+172>>2]|0;if((f|0)<(i|0)){f=f+1|0;g=h}else{break}}if((i|0)<1){return}j=+(d|0);d=1;g=h;h=i;while(1){i=d+1|0;f=c[g+176>>2]|0;a=c[f+(d<<2)>>2]|0;if((d|0)<(h|0)){k=i;l=f;f=a;m=g;while(1){n=c[l+(k<<2)>>2]|0;o=(b[(c[f+8>>2]|0)+224>>1]|0)>(b[(c[n+8>>2]|0)+224>>1]|0);p=o?n:f;q=o?f:n;n=c[p+8>>2]|0;o=c[q+8>>2]|0;r=b[o+224>>1]|0;s=r<<16>>16;if((b[n+226>>1]|0)<r<<16>>16){t=m}else{r=(c[(c[(c[c[(c[n+184>>2]|0)+(s*44|0)+4>>2]>>2]|0)+8>>2]|0)+236>>2]|0)<(c[(c[(c[c[(c[o+184>>2]|0)+(s*44|0)+4>>2]>>2]|0)+8>>2]|0)+236>>2]|0);Jp(c[(c[(r?p:q)+8>>2]|0)+248>>2]|0,c[(c[(r?q:p)+8>>2]|0)+244>>2]|0,j,0)|0;t=c[e>>2]|0}p=c[t+176>>2]|0;q=c[p+(d<<2)>>2]|0;if((k|0)<(c[t+172>>2]|0)){k=k+1|0;l=p;f=q;m=t}else{u=q;break}}}else{u=a}Vp(u);m=c[e>>2]|0;f=c[m+172>>2]|0;if((d|0)<(f|0)){d=i;g=m;h=f}else{break}}return}function Wp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if((a|0)==(b|0)){d=1;return d|0}e=c[(c[a+8>>2]|0)+180>>2]|0;a=c[e>>2]|0;if((a|0)==0){d=0;return d|0}else{f=0;g=a}while(1){a=f+1|0;if((Wp(c[((c[g>>2]&3|0)==2?g:g-32|0)+28>>2]|0,b)|0)!=0){d=1;h=5;break}i=c[e+(a<<2)>>2]|0;if((i|0)==0){d=0;h=5;break}else{f=a;g=i}}if((h|0)==5){return d|0}return 0}function Xp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;d=a+8|0;b[(c[d>>2]|0)+224>>1]=32767;b[(c[d>>2]|0)+226>>1]=-1;e=ux(a)|0;f=c[d>>2]|0;if((e|0)==0){g=0;h=f;i=h+252|0;j=g;c[i>>2]=j;return}else{k=e;l=0;m=f}while(1){f=m+226|0;e=k+8|0;n=c[(c[e>>2]|0)+232>>2]|0;if((b[f>>1]|0)<(n|0)){b[f>>1]=n;o=c[d>>2]|0;p=c[(c[e>>2]|0)+232>>2]|0}else{o=m;p=n}n=o+224|0;if((b[n>>1]|0)>(p|0)){b[n>>1]=p}if((l|0)==0){q=k}else{q=(c[(c[e>>2]|0)+232>>2]|0)<(c[(c[l+8>>2]|0)+232>>2]|0)?k:l}e=vx(a,k)|0;n=c[d>>2]|0;if((e|0)==0){g=q;h=n;break}else{k=e;l=q;m=n}}i=h+252|0;j=g;c[i>>2]=j;return}function Yp(a){a=a|0;var b=0,d=0,e=0.0,f=0,g=0,h=0,i=0,j=0;b=ew(a|0,147792)|0;if((b|0)==0){d=2147483647}else{e=+rF(b);d=~~(e*+(Lw(a)|0))}b=a+8|0;f=c[b>>2]|0;g=f+204|0;if((c[g+4>>2]|0)>0){h=0;i=f;j=g}else{return}do{c[i+180>>2]=c[(c[j>>2]|0)+(h<<2)>>2];ok(a,(c[(c[b>>2]|0)+172>>2]|0)==0|0,d)|0;h=h+1|0;i=c[b>>2]|0;j=i+204|0;}while((h|0)<(c[j+4>>2]|0));return}function Zp(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;f=i;i=i+104|0;g=f|0;h=d|0;if((ew(h,162288)|0)==0){_p(d,e)}else{j=d+8|0;k=(c[j>>2]|0)+128|0;b[k>>1]=b[k>>1]|16;c[53670]=0;k=Hw(109200,173936,0)|0;Wx(k|0,103336,272,1)|0;Px(k,19768,21560);if((a[(c[j>>2]|0)+113|0]&1)!=0){l=ux(d)|0;if((l|0)!=0){m=l;do{l=mw(d,m)|0;if((l|0)!=0){n=l;do{l=(c[n+8>>2]|0)+170|0;b[l>>1]=b[l>>1]<<1;n=ow(d,n)|0;}while((n|0)!=0)}m=vx(d,m)|0;}while((m|0)!=0)}m=(c[j>>2]|0)+240|0;c[m>>2]=((c[m>>2]|0)+1|0)/2|0}m=ew(h,147792)|0;if((m|0)==0){p=2147483647}else{q=+rF(m);p=~~(q*+(Lw(d)|0))}aq(d,0);c[53670]=0;m=ux(d)|0;if((m|0)!=0){n=k+8|0;l=m;do{if((cq(l)|0)==(l|0)){m=Ax(k,$w(l|0)|0,1)|0;r=m+8|0;c[(c[r>>2]|0)+176>>2]=0;s=jk(20)|0;c[(c[r>>2]|0)+172>>2]=s;c[(c[r>>2]|0)+184>>2]=0;s=jk(20)|0;c[(c[r>>2]|0)+180>>2]=s;s=c[53670]|0;t=(c[r>>2]|0)+168|0;if((s|0)==0){c[t>>2]=0;c[(c[n>>2]|0)+180>>2]=m}else{c[t>>2]=s;c[(c[(c[53670]|0)+8>>2]|0)+164>>2]=m}c[53670]=m;c[(c[r>>2]|0)+164>>2]=0;c[(c[l+8>>2]|0)+148>>2]=m}l=vx(d,l)|0;}while((l|0)!=0)}l=ux(d)|0;if((l|0)!=0){n=l;do{l=n+8|0;if((c[(c[l>>2]|0)+148>>2]|0)==0){m=c[(c[(cq(n)|0)+8>>2]|0)+148>>2]|0;c[(c[l>>2]|0)+148>>2]=m}n=vx(d,n)|0;}while((n|0)!=0)}n=ux(d)|0;if((n|0)!=0){m=g|0;g=k+8|0;l=n;do{n=c[(c[l+8>>2]|0)+148>>2]|0;r=mw(d,l)|0;if((r|0)!=0){s=n;n=r;while(1){r=c[53812]|0;do{if((r|0)==0){u=30}else{t=fw(n|0,r)|0;if((t|0)==0){u=30;break}if((a[t]|0)==0){u=30;break}if((Km(t)|0)<<24>>24==0){v=s}else{u=30}}}while(0);a:do{if((u|0)==30){u=0;r=n;t=n-32|0;w=c[(c[(cq(c[((c[r>>2]&3|0)==2?n:t)+28>>2]|0)|0)+8>>2]|0)+148>>2]|0;if((s|0)==(w|0)){v=s;break}x=c[r>>2]&3;y=n+32|0;z=c[((x|0)==3?n:y)+28>>2]|0;A=c[(c[z+8>>2]|0)+212>>2]|0;B=c[(c[(c[((x|0)==2?n:t)+28>>2]|0)+8>>2]|0)+212>>2]|0;x=B;C=A;do{if((A|0)!=(B|0)){D=C;E=x;b:while(1){F=c[D+8>>2]|0;G=c[F+192>>2]|0;H=E;while(1){I=c[H+8>>2]|0;if((G|0)>=(c[I+192>>2]|0)){break}J=c[I+188>>2]|0;if((D|0)==(J|0)){K=D;break b}else{H=J}}G=c[F+188>>2]|0;if((G|0)==(H|0)){K=H;break}else{D=G;E=H}}if((K|0)==(C|0)|(K|0)==(x|0)){break}do{if((Vm(ew(A,168304)|0,0)|0)<<24>>24==0){if((Vm(ew(B,168304)|0,0)|0)<<24>>24!=0){break}gq(k,s,w,n);v=s;break a}}while(0);E=pw(k,s)|0;if((E|0)!=0){D=E;do{E=mw(k,c[((c[D>>2]&3|0)==3?D:D+32|0)+28>>2]|0)|0;if((E|0)!=0){if((c[((c[E>>2]&3|0)==2?E:E-32|0)+28>>2]|0)==(w|0)){v=s;break a}}D=qw(k,D)|0;}while((D|0)!=0)}D=c[43648]|0;c[43648]=D+1;nb(m|0,164168,(L=i,i=i+8|0,c[L>>2]=D,L)|0)|0;i=L;D=Ax(k,m,1)|0;E=D+8|0;c[(c[E>>2]|0)+176>>2]=0;G=jk(20)|0;c[(c[E>>2]|0)+172>>2]=G;c[(c[E>>2]|0)+184>>2]=0;G=jk(20)|0;c[(c[E>>2]|0)+180>>2]=G;G=c[53670]|0;J=(c[E>>2]|0)+168|0;if((G|0)==0){c[J>>2]=0;c[(c[g>>2]|0)+180>>2]=D}else{c[J>>2]=G;c[(c[(c[53670]|0)+8>>2]|0)+164>>2]=D}c[53670]=D;c[(c[E>>2]|0)+164>>2]=0;E=uw(k,D,s,0,1)|0;G=uw(k,D,w,0,1)|0;D=n+8|0;J=(c[E+8>>2]|0)+156|0;c[J>>2]=(c[J>>2]|0)+((c[(c[D>>2]|0)+156>>2]|0)*1e3|0);J=G+8|0;G=(c[J>>2]|0)+170|0;E=b[G>>1]|0;I=b[(c[D>>2]|0)+170>>1]|0;b[G>>1]=(E&65535)>>>0>(I&65535)>>>0?E:I;I=(c[J>>2]|0)+156|0;c[I>>2]=(c[I>>2]|0)+(c[(c[D>>2]|0)+156>>2]|0);v=s;break a}}while(0);B=cq(z)|0;A=c[r>>2]&3;if((B|0)==(c[(c[(c[(c[(c[((A|0)==3?n:y)+28>>2]|0)+8>>2]|0)+212>>2]|0)+8>>2]|0)+200>>2]|0)){u=39}else{B=cq(c[((A|0)==2?n:t)+28>>2]|0)|0;if((B|0)==(c[(c[(c[(c[(c[((c[r>>2]&3|0)==2?n:t)+28>>2]|0)+8>>2]|0)+212>>2]|0)+8>>2]|0)+196>>2]|0)){u=39}else{M=s;N=w}}if((u|0)==39){u=0;M=w;N=s}gq(k,M,N,n);v=M}}while(0);B=ow(d,n)|0;if((B|0)==0){break}else{s=v;n=B}}}l=vx(d,l)|0;}while((l|0)!=0)}bq(d,k,0,0);l=ux(k)|0;if((l|0)!=0){v=l;do{l=v+8|0;a[(c[l>>2]|0)+158|0]=0;a[(c[l>>2]|0)+157|0]=0;v=vx(k,v)|0;}while((v|0)!=0)}v=ux(k)|0;if((v|0)!=0){l=v;do{fq(k,l);l=vx(k,l)|0;}while((l|0)!=0)}l=ux(k)|0;if((l|0)!=0){v=l;do{c[(c[v+8>>2]|0)+128>>2]=0;v=vx(k,v)|0;}while((v|0)!=0)}v=ux(k)|0;do{if((v|0)==0){O=0}else{l=v;M=0;while(1){if((c[(c[l+8>>2]|0)+128>>2]|0)==0){N=M+1|0;eq(k,l,N);P=N}else{P=M}N=vx(k,l)|0;if((N|0)==0){break}else{l=N;M=P}}if((P|0)<=1){O=P;break}M=Ax(k,92264,1)|0;l=M+8|0;c[(c[l>>2]|0)+176>>2]=0;N=jk(20)|0;c[(c[l>>2]|0)+172>>2]=N;c[(c[l>>2]|0)+184>>2]=0;N=jk(20)|0;c[(c[l>>2]|0)+180>>2]=N;N=c[53670]|0;u=(c[l>>2]|0)+168|0;if((N|0)==0){c[u>>2]=0;c[(c[k+8>>2]|0)+180>>2]=M}else{c[u>>2]=N;c[(c[(c[53670]|0)+8>>2]|0)+164>>2]=M}c[53670]=M;c[(c[l>>2]|0)+164>>2]=0;l=ux(k)|0;if((l|0)==0){O=P;break}else{Q=l;R=1}while(1){if((c[(c[Q+8>>2]|0)+128>>2]|0)==(R|0)){uw(k,M,Q,0,1)|0;S=R+1|0}else{S=R}l=vx(k,Q)|0;if((l|0)==0){O=P;break}else{Q=l;R=S}}}}while(0);S=ux(k)|0;if((S|0)!=0){R=S;do{S=mw(k,R)|0;if((S|0)!=0){Q=R+8|0;P=S;do{S=(c[Q>>2]|0)+180|0;v=c[S>>2]|0;if((v|0)==0){T=kk((c[S+4>>2]<<2)+8|0)|0}else{T=mk(v,(c[S+4>>2]<<2)+8|0)|0}c[(c[Q>>2]|0)+180>>2]=T;S=(c[Q>>2]|0)+184|0;v=c[S>>2]|0;c[S>>2]=v+1;c[(c[(c[Q>>2]|0)+180>>2]|0)+(v<<2)>>2]=P;v=(c[Q>>2]|0)+180|0;c[(c[v>>2]|0)+(c[v+4>>2]<<2)>>2]=0;v=P;S=P-32|0;M=(c[(c[((c[v>>2]&3|0)==2?P:S)+28>>2]|0)+8>>2]|0)+172|0;l=c[M>>2]|0;if((l|0)==0){U=kk((c[M+4>>2]<<2)+8|0)|0}else{U=mk(l,(c[M+4>>2]<<2)+8|0)|0}c[(c[(c[((c[v>>2]&3|0)==2?P:S)+28>>2]|0)+8>>2]|0)+172>>2]=U;M=(c[(c[((c[v>>2]&3|0)==2?P:S)+28>>2]|0)+8>>2]|0)+176|0;l=c[M>>2]|0;c[M>>2]=l+1;c[(c[(c[(c[((c[v>>2]&3|0)==2?P:S)+28>>2]|0)+8>>2]|0)+172>>2]|0)+(l<<2)>>2]=P;l=(c[(c[((c[v>>2]&3|0)==2?P:S)+28>>2]|0)+8>>2]|0)+172|0;c[(c[l>>2]|0)+(c[l+4>>2]<<2)>>2]=0;P=ow(k,P)|0;}while((P|0)!=0)}R=vx(k,R)|0;}while((R|0)!=0)}if((e|0)!=0){Rn(k);On(k)}e=ew(h,97800)|0;if((e|0)==0){V=-1}else{V=Rb(e|0)|0}nk(k,1,p,V)|0;b[(c[j>>2]|0)+224>>1]=32767;b[(c[j>>2]|0)+226>>1]=-1;if((O|0)>1){V=jk((O<<2)+4|0)|0;p=1;while(1){c[V+(p<<2)>>2]=32767;if((p|0)<(O|0)){p=p+1|0}else{W=V;break}}}else{W=0}V=ux(d)|0;if((V|0)!=0){if((W|0)==0){p=V;do{O=c[(c[(c[(c[(cq(p)|0)+8>>2]|0)+148>>2]|0)+8>>2]|0)+232>>2]|0;e=p+8|0;c[(c[e>>2]|0)+232>>2]=O;O=c[j>>2]|0;h=O+226|0;R=c[(c[e>>2]|0)+232>>2]|0;if((b[h>>1]|0)<(R|0)){b[h>>1]=R;X=c[j>>2]|0;Y=c[(c[e>>2]|0)+232>>2]|0}else{X=O;Y=R}R=X+224|0;if((b[R>>1]|0)>(Y|0)){b[R>>1]=Y}p=vx(d,p)|0;}while((p|0)!=0)}else{p=V;do{V=(c[(c[(cq(p)|0)+8>>2]|0)+148>>2]|0)+8|0;Y=p+8|0;c[(c[Y>>2]|0)+232>>2]=c[(c[V>>2]|0)+232>>2];X=c[j>>2]|0;R=X+226|0;O=c[Y>>2]|0;e=c[O+232>>2]|0;if((b[R>>1]|0)<(e|0)){b[R>>1]=e;R=c[Y>>2]|0;Z=c[j>>2]|0;_=c[R+232>>2]|0;$=R}else{Z=X;_=e;$=O}O=Z+224|0;if((b[O>>1]|0)>(_|0)){b[O>>1]=_;aa=c[Y>>2]|0}else{aa=$}c[aa+128>>2]=c[(c[V>>2]|0)+128>>2];V=c[Y>>2]|0;Y=W+(c[V+128>>2]<<2)|0;O=c[Y>>2]|0;e=c[V+232>>2]|0;c[Y>>2]=(O|0)<(e|0)?O:e;p=vx(d,p)|0;}while((p|0)!=0)}}p=(W|0)!=0;do{if(p){aa=ux(d)|0;if((aa|0)==0){ba=1;break}else{ca=aa}while(1){aa=c[ca+8>>2]|0;$=aa+232|0;c[$>>2]=(c[$>>2]|0)-(c[W+(c[aa+128>>2]<<2)>>2]|0);aa=vx(d,ca)|0;if((aa|0)==0){ba=1;break}else{ca=aa}}}else{aa=b[(c[j>>2]|0)+224>>1]|0;$=aa<<16>>16;if(aa<<16>>16<=0){ba=0;break}_=ux(d)|0;if((_|0)!=0){Z=_;do{_=(c[Z+8>>2]|0)+232|0;c[_>>2]=(c[_>>2]|0)-$;Z=vx(d,Z)|0;}while((Z|0)!=0)}Z=(c[j>>2]|0)+224|0;b[Z>>1]=(b[Z>>1]|0)-aa;Z=(c[j>>2]|0)+226|0;b[Z>>1]=(b[Z>>1]|0)-aa;ba=0}}while(0);dq(d,ba);ba=ux(k)|0;if((ba|0)!=0){j=ba;do{ba=j+8|0;ca=c[ba>>2]|0;Z=c[ca+172>>2]|0;if((Z|0)==0){da=ca}else{eF(Z);da=c[ba>>2]|0}ba=c[da+180>>2]|0;if((ba|0)!=0){eF(ba)}j=vx(k,j)|0;}while((j|0)!=0)}eF(c[(c[(ux(d)|0)+8>>2]|0)+112>>2]|0);j=ux(d)|0;if((j|0)!=0){da=j;do{c[(c[da+8>>2]|0)+112>>2]=0;da=vx(d,da)|0;}while((da|0)!=0)}if(p){eF(W)}Kw(k)|0}if((a[213992]|0)==0){i=f;return}k=c[d+8>>2]|0;d=b[k+224>>1]|0;gc(c[o>>2]|0,130928,(L=i,i=i+16|0,c[L>>2]=b[k+226>>1]|0,c[L+8>>2]=d,L)|0)|0;i=L;i=f;return}function _p(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0.0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0;f=i;i=i+8|0;g=f|0;h=g;j=d+8|0;if((a[(c[j>>2]|0)+113|0]&1)!=0){k=ux(d)|0;if((k|0)!=0){l=k;do{k=mw(d,l)|0;if((k|0)!=0){m=k;do{k=(c[m+8>>2]|0)+170|0;b[k>>1]=b[k>>1]<<1;m=ow(d,m)|0;}while((m|0)!=0)}l=vx(d,l)|0;}while((l|0)!=0)}l=(c[j>>2]|0)+240|0;c[l>>2]=((c[l>>2]|0)+1|0)/2|0}do{if((e|0)==0){lq(d,d);Wn(d);mq(h,d);l=c[g>>2]|0;m=c[g+4>>2]|0;qo(d,0);n=0;o=l&65535;p=m&65535}else{Rn(d);On(d);lq(d,d);Wn(d);mq(h,d);m=c[g>>2]|0;l=c[g+4>>2]|0;qo(d,0);k=c[j>>2]|0;if((c[k+208>>2]|0)>1){q=l&65535;r=m&65535}else{s=l&65535;l=m&65535;if((c[k+172>>2]|0)>0){q=s;r=l}else{n=e;o=l;p=s;break}}c[e+32>>2]=1;n=0;o=r;p=q}}while(0);Ln(d);q=c[j>>2]|0;if((c[q+216>>2]|0)==0){if((c[q+212>>2]|0)!=0){t=15}}else{t=15}do{if((t|0)==15){q=ux(d)|0;if((q|0)==0){break}else{u=q;v=0}while(1){do{if((u|0)==(Lm(u)|0)){q=u+8|0;r=c[q>>2]|0;do{if((c[r+184>>2]|0)==0){e=c[(c[j>>2]|0)+216>>2]|0;if((e|0)==0|(u|0)==(e|0)){w=v;x=r;break}g=Zo(u,e,0)|0;e=g+8|0;b[(c[e>>2]|0)+170>>1]=p;c[(c[e>>2]|0)+156>>2]=0;w=g;x=c[q>>2]|0}else{w=v;x=r}}while(0);if((c[x+176>>2]|0)!=0){y=w;break}r=c[(c[j>>2]|0)+212>>2]|0;q=r;if((r|0)==0|(u|0)==(q|0)){y=w;break}r=Zo(q,u,0)|0;q=r+8|0;b[(c[q>>2]|0)+170>>1]=o;c[(c[q>>2]|0)+156>>2]=0;y=r}else{y=v}}while(0);r=vx(d,u)|0;if((r|0)==0){break}else{u=r;v=y}}if((y|0)==0){break}qo(d,0)}}while(0);y=(n|0)==0;do{if(y){v=ew(d|0,147792)|0;if((v|0)==0){z=2147483647}else{A=+rF(v);z=~~(A*+(Lw(d)|0))}v=c[j>>2]|0;u=v+204|0;if((c[u+4>>2]|0)>0){B=0;C=v;D=u}else{break}do{c[C+180>>2]=c[(c[D>>2]|0)+(B<<2)>>2];ok(d,(c[(c[j>>2]|0)+172>>2]|0)==0|0,z)|0;B=B+1|0;C=c[j>>2]|0;D=C+204|0;}while((B|0)<(c[D+4>>2]|0))}else{Pn(d,n)}}while(0);n=ux(d)|0;D=c[j>>2]|0;a:do{if((n|0)==0){b[D+226>>1]=0;b[(c[j>>2]|0)+224>>1]=0}else{b[D+224>>1]=32767;b[(c[j>>2]|0)+226>>1]=-1;B=n;do{C=Lm(B)|0;z=B+8|0;do{if((C|0)==(B|0)){E=z}else{u=c[z>>2]|0;v=c[u+232>>2]|0;if(y){F=v}else{if((v|0)==0){F=0}else{E=z;break}}c[u+232>>2]=F+(c[(c[C+8>>2]|0)+232>>2]|0);E=B+8|0}}while(0);C=c[j>>2]|0;z=C+226|0;u=c[E>>2]|0;v=c[u+232>>2]|0;if((b[z>>1]|0)<(v|0)){b[z>>1]=v;z=c[E>>2]|0;G=c[j>>2]|0;H=z;I=c[z+232>>2]|0}else{G=C;H=u;I=v}v=G+224|0;if((b[v>>1]|0)>(I|0)){b[v>>1]=I;J=c[E>>2]|0}else{J=H}v=a[J+159|0]|0;if(!((v<<24>>24|0)==0|(v<<24>>24|0)==6)){Nm(B)}B=vx(d,B)|0;}while((B|0)!=0);B=d|0;if((Ix(B)|0)!=(d|0)){break}if((c[53850]|0)==100){v=c[j>>2]|0;if((c[v+172>>2]|0)<1){break}else{K=1;L=v}while(1){nq(c[(c[L+176>>2]|0)+(K<<2)>>2]|0);v=c[j>>2]|0;if((K|0)<(c[v+172>>2]|0)){K=K+1|0;L=v}else{break a}}}v=sy(Ix(B)|0)|0;if((v|0)==0){break}else{M=v}do{if((a[(c[M+8>>2]|0)+262|0]|0)==7){oq(d,M)}M=ty(M)|0;}while((M|0)!=0)}}while(0);M=c[j>>2]|0;L=M+204|0;if((c[L+4>>2]|0)>0){K=0;J=M;M=L;while(1){c[J+180>>2]=c[(c[M>>2]|0)+(K<<2)>>2];L=c[j>>2]|0;H=c[L+180>>2]|0;if((H|0)==0){N=L}else{L=H;do{H=L+8|0;E=(c[H>>2]|0)+172|0;I=E+4|0;G=c[I>>2]|0;if((G|0)>-1){F=G;while(1){c[(c[E>>2]|0)+(F<<2)>>2]=0;if((F|0)>0){F=F-1|0}else{break}}}c[I>>2]=0;F=(c[H>>2]|0)+180|0;E=F+4|0;G=c[E>>2]|0;if((G|0)>-1){y=G;while(1){c[(c[F>>2]|0)+(y<<2)>>2]=0;if((y|0)>0){y=y-1|0}else{break}}}c[E>>2]=0;a[(c[H>>2]|0)+157|0]=0;L=c[(c[H>>2]|0)+164>>2]|0;}while((L|0)!=0);N=c[j>>2]|0}L=K+1|0;y=N+204|0;if((L|0)<(c[y+4>>2]|0)){K=L;J=N;M=y}else{break}}}M=ux(d)|0;if((M|0)==0){O=c[j>>2]|0;P=O+204|0;Q=c[P>>2]|0;R=Q;eF(R);S=c[j>>2]|0;T=S+204|0;c[T>>2]=0;U=c[j>>2]|0;V=U+204|0;W=V+4|0;c[W>>2]=0;i=f;return}else{X=M}do{M=mw(d,X)|0;if((M|0)!=0){N=M;do{M=N+8|0;J=c[M>>2]|0;K=c[J+172>>2]|0;do{if((K|0)==0){Y=J}else{y=K+8|0;if((N|0)!=(c[(c[y>>2]|0)+116>>2]|0)){Y=J;break}L=ux(d)|0;if((L|0)!=0){F=L;do{L=mw(d,F)|0;if((L|0)!=0){I=L;do{do{if((N|0)!=(I|0)){L=(c[I+8>>2]|0)+172|0;G=c[L>>2]|0;if(!((G|0)!=0&(K|0)==(G|0))){break}c[L>>2]=0}}while(0);I=ow(d,I)|0;}while((I|0)!=0)}F=vx(d,F)|0;}while((F|0)!=0)}eF(c[y>>2]|0);eF(K);Y=c[M>>2]|0}}while(0);c[Y+172>>2]=0;N=ow(d,N)|0;}while((N|0)!=0)}X=vx(d,X)|0;}while((X|0)!=0);O=c[j>>2]|0;P=O+204|0;Q=c[P>>2]|0;R=Q;eF(R);S=c[j>>2]|0;T=S+204|0;c[T>>2]=0;U=c[j>>2]|0;V=U+204|0;W=V+4|0;c[W>>2]=0;i=f;return}function $p(a){a=a|0;return(Za($w(a|0)|0,116432,7)|0)==0|0}function aq(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if((ux(b)|0)==0){return}do{if((an(b)|0)==0){e=d}else{if((d|0)==0){c[(c[b+8>>2]|0)+192>>2]=0;e=b;break}f=d+8|0;g=b+8|0;c[(c[g>>2]|0)+192>>2]=(c[(c[f>>2]|0)+192>>2]|0)+1;c[(c[g>>2]|0)+188>>2]=d;g=(c[f>>2]|0)+172|0;h=c[g>>2]|0;i=h+1|0;c[g>>2]=i;g=c[f>>2]|0;j=c[g+176>>2]|0;if((j|0)==0){k=jk((h<<2)+8|0)|0}else{k=lk(j,h+2|0,4,c[g+172>>2]|0)|0}c[(c[f>>2]|0)+176>>2]=k;c[(c[(c[f>>2]|0)+176>>2]|0)+(i<<2)>>2]=b;Rj(b);hq(d,b);e=b}}while(0);d=sy(b)|0;if((d|0)!=0){k=d;do{aq(k,e);k=ty(k)|0;}while((k|0)!=0)}do{if((an(b)|0)!=0){k=ux(b)|0;if((k|0)==0){break}d=b;i=k;do{k=(c[i+8>>2]|0)+212|0;if((c[k>>2]|0)==0){c[k>>2]=d}i=vx(b,i)|0;}while((i|0)!=0)}}while(0);i=ew(b|0,151672)|0;a:do{if((i|0)!=0){if((a[i]|0)==0){break}do{if((Ya(i|0,148832)|0)!=0){if((Ya(i|0,145656)|0)==0){a[(c[e+8>>2]|0)+229|0]=1;break}do{if((Ya(i|0,142656)|0)!=0){if((Ya(i|0,139584)|0)==0){a[(c[e+8>>2]|0)+230|0]=1;break}if((Ya(i|0,136936)|0)!=0){break a}d=ux(b)|0;if((d|0)==0){break a}k=cq(d)|0;f=vx(b,d)|0;if((f|0)==0){break a}else{l=f}while(1){f=cq(k)|0;c[(c[(cq(l)|0)+8>>2]|0)+152>>2]=f;l=vx(b,l)|0;if((l|0)==0){break a}}}}while(0);k=ux(b)|0;do{if((k|0)==0){m=0}else{f=cq(k)|0;d=vx(b,k)|0;if((d|0)==0){m=f;break}else{n=d}while(1){d=cq(f)|0;c[(c[(cq(n)|0)+8>>2]|0)+152>>2]=d;d=vx(b,n)|0;if((d|0)==0){m=f;break}else{n=d}}}}while(0);k=e+8|0;f=c[k>>2]|0;d=c[f+200>>2]|0;if((d|0)==0){o=m;p=f}else{f=cq(m)|0;c[(c[(cq(d)|0)+8>>2]|0)+152>>2]=f;o=f;p=c[k>>2]|0}c[p+200>>2]=o;break a}}while(0);k=ux(b)|0;do{if((k|0)==0){q=0}else{f=cq(k)|0;d=vx(b,k)|0;if((d|0)==0){q=f;break}else{r=d}while(1){d=cq(f)|0;c[(c[(cq(r)|0)+8>>2]|0)+152>>2]=d;d=vx(b,r)|0;if((d|0)==0){q=f;break}else{r=d}}}}while(0);k=e+8|0;f=c[k>>2]|0;d=c[f+196>>2]|0;if((d|0)==0){s=q;t=f}else{f=cq(q)|0;c[(c[(cq(d)|0)+8>>2]|0)+152>>2]=f;s=f;t=c[k>>2]|0}c[t+196>>2]=s}}while(0);if((an(b)|0)==0){return}s=b+8|0;t=c[s>>2]|0;q=c[t+196>>2]|0;if((q|0)==0){return}if((q|0)!=(c[t+200>>2]|0)){return}t=ux(b)|0;do{if((t|0)==0){u=0}else{q=cq(t)|0;e=vx(b,t)|0;if((e|0)==0){u=q;break}else{v=e}while(1){e=cq(q)|0;c[(c[(cq(v)|0)+8>>2]|0)+152>>2]=e;e=vx(b,v)|0;if((e|0)==0){u=q;break}else{v=e}}}}while(0);c[(c[s>>2]|0)+196>>2]=u;c[(c[s>>2]|0)+200>>2]=u;return}function bq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;do{if((an(a)|0)==0){f=d;g=e}else{if((Vm(ew(a|0,168304)|0,0)|0)<<24>>24==0){f=d;g=e;break}h=ux(a)|0;if((h|0)==0){i=e;j=d}else{k=b+8|0;l=e;m=h;h=d;while(1){if((pw(a,m)|0)==0){n=c[(c[(cq(m)|0)+8>>2]|0)+148>>2]|0;if((h|0)==0){o=Ax(b,87016,1)|0;p=o+8|0;c[(c[p>>2]|0)+176>>2]=0;q=jk(20)|0;c[(c[p>>2]|0)+172>>2]=q;c[(c[p>>2]|0)+184>>2]=0;q=jk(20)|0;c[(c[p>>2]|0)+180>>2]=q;q=c[53670]|0;r=(c[p>>2]|0)+168|0;if((q|0)==0){c[r>>2]=0;c[(c[k>>2]|0)+180>>2]=o}else{c[r>>2]=q;c[(c[(c[53670]|0)+8>>2]|0)+164>>2]=o}c[53670]=o;c[(c[p>>2]|0)+164>>2]=0;s=o}else{s=h}uw(b,s,n,0,1)|0;t=s}else{t=h}if((mw(a,m)|0)==0){n=c[(c[(cq(m)|0)+8>>2]|0)+148>>2]|0;if((l|0)==0){o=Ax(b,82176,1)|0;p=o+8|0;c[(c[p>>2]|0)+176>>2]=0;q=jk(20)|0;c[(c[p>>2]|0)+172>>2]=q;c[(c[p>>2]|0)+184>>2]=0;q=jk(20)|0;c[(c[p>>2]|0)+180>>2]=q;q=c[53670]|0;r=(c[p>>2]|0)+168|0;if((q|0)==0){c[r>>2]=0;c[(c[k>>2]|0)+180>>2]=o}else{c[r>>2]=q;c[(c[(c[53670]|0)+8>>2]|0)+164>>2]=o}c[53670]=o;c[(c[p>>2]|0)+164>>2]=0;u=o}else{u=l}uw(b,n,u,0,1)|0;v=u}else{v=l}n=vx(a,m)|0;if((n|0)==0){i=v;j=t;break}else{l=v;m=n;h=t}}}if((j|0)==0|(i|0)==0){f=j;g=i;break}h=(c[(uw(b,j,i,0,1)|0)+8>>2]|0)+156|0;c[h>>2]=(c[h>>2]|0)+1e3;f=j;g=i}}while(0);i=sy(a)|0;if((i|0)==0){return}else{w=i}do{bq(w,b,f,g);w=ty(w)|0;}while((w|0)!=0);return}function cq(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=(c[b>>2]|0)+152|0;e=c[d>>2]|0;if((e|0)==0){c[d>>2]=a;return a|0}if((e|0)==(a|0)){return a|0}else{a=cq(e)|0;c[(c[b>>2]|0)+152>>2]=a;return a|0}return 0}function dq(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=a+8|0;f=c[e>>2]|0;if((c[f+172>>2]|0)<1){g=f}else{h=1;i=f;while(1){dq(c[(c[i+176>>2]|0)+(h<<2)>>2]|0,0);f=c[e>>2]|0;if((h|0)<(c[f+172>>2]|0)){h=h+1|0;i=f}else{g=f;break}}}if((c[g+188>>2]|0)==0&(d|0)==0){return}b[g+224>>1]=32767;b[(c[e>>2]|0)+226>>1]=-1;g=ux(a)|0;if((g|0)==0){j=0}else{d=g;g=0;while(1){i=c[(c[d+8>>2]|0)+232>>2]|0;h=c[e>>2]|0;f=h+226|0;if((b[f>>1]|0)<(i|0)){b[f>>1]=i;k=c[e>>2]|0}else{k=h}h=k+224|0;if((b[h>>1]|0)>(i|0)){b[h>>1]=i;l=d}else{l=g}i=vx(a,d)|0;if((i|0)==0){j=l;break}else{d=i;g=l}}}c[(c[e>>2]|0)+252>>2]=j;return}function eq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=(c[b+8>>2]|0)+128|0;if((c[e>>2]|0)!=0){return}c[e>>2]=d;e=mw(a,b)|0;if((e|0)!=0){f=e;do{eq(a,c[((c[f>>2]&3|0)==2?f:f-32|0)+28>>2]|0,d);f=ow(a,f)|0;}while((f|0)!=0)}f=pw(a,b)|0;if((f|0)==0){return}else{g=f}do{eq(a,c[((c[g>>2]&3|0)==3?g:g+32|0)+28>>2]|0,d);g=qw(a,g)|0;}while((g|0)!=0);return}
+
+
+
+function iF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;d=a;e=d+b|0;f=e;g=c[a+4>>2]|0;a:do{if((g&1|0)==0){h=c[a>>2]|0;if((g&3|0)==0){return}i=d+(-h|0)|0;j=i;k=h+b|0;l=c[53378]|0;if(i>>>0<l>>>0){fc()}if((j|0)==(c[53379]|0)){m=d+(b+4)|0;if((c[m>>2]&3|0)!=3){n=j;o=k;break}c[53376]=k;c[m>>2]=c[m>>2]&-2;c[d+(4-h)>>2]=k|1;c[e>>2]=k;return}m=h>>>3;if(h>>>0<256>>>0){p=c[d+(8-h)>>2]|0;q=c[d+(12-h)>>2]|0;r=213536+(m<<1<<2)|0;do{if((p|0)!=(r|0)){if(p>>>0<l>>>0){fc()}if((c[p+12>>2]|0)==(j|0)){break}fc()}}while(0);if((q|0)==(p|0)){c[53374]=c[53374]&~(1<<m);n=j;o=k;break}do{if((q|0)==(r|0)){s=q+8|0}else{if(q>>>0<l>>>0){fc()}t=q+8|0;if((c[t>>2]|0)==(j|0)){s=t;break}fc()}}while(0);c[p+12>>2]=q;c[s>>2]=p;n=j;o=k;break}r=i;m=c[d+(24-h)>>2]|0;t=c[d+(12-h)>>2]|0;do{if((t|0)==(r|0)){u=16-h|0;v=d+(u+4)|0;w=c[v>>2]|0;if((w|0)==0){x=d+u|0;u=c[x>>2]|0;if((u|0)==0){y=0;break}else{z=u;A=x}}else{z=w;A=v}while(1){v=z+20|0;w=c[v>>2]|0;if((w|0)!=0){z=w;A=v;continue}v=z+16|0;w=c[v>>2]|0;if((w|0)==0){break}else{z=w;A=v}}if(A>>>0<l>>>0){fc()}else{c[A>>2]=0;y=z;break}}else{v=c[d+(8-h)>>2]|0;if(v>>>0<l>>>0){fc()}w=v+12|0;if((c[w>>2]|0)!=(r|0)){fc()}x=t+8|0;if((c[x>>2]|0)==(r|0)){c[w>>2]=t;c[x>>2]=v;y=t;break}else{fc()}}}while(0);if((m|0)==0){n=j;o=k;break}t=d+(28-h)|0;l=213800+(c[t>>2]<<2)|0;do{if((r|0)==(c[l>>2]|0)){c[l>>2]=y;if((y|0)!=0){break}c[53375]=c[53375]&~(1<<c[t>>2]);n=j;o=k;break a}else{if(m>>>0<(c[53378]|0)>>>0){fc()}i=m+16|0;if((c[i>>2]|0)==(r|0)){c[i>>2]=y}else{c[m+20>>2]=y}if((y|0)==0){n=j;o=k;break a}}}while(0);if(y>>>0<(c[53378]|0)>>>0){fc()}c[y+24>>2]=m;r=16-h|0;t=c[d+r>>2]|0;do{if((t|0)!=0){if(t>>>0<(c[53378]|0)>>>0){fc()}else{c[y+16>>2]=t;c[t+24>>2]=y;break}}}while(0);t=c[d+(r+4)>>2]|0;if((t|0)==0){n=j;o=k;break}if(t>>>0<(c[53378]|0)>>>0){fc()}else{c[y+20>>2]=t;c[t+24>>2]=y;n=j;o=k;break}}else{n=a;o=b}}while(0);a=c[53378]|0;if(e>>>0<a>>>0){fc()}y=d+(b+4)|0;z=c[y>>2]|0;do{if((z&2|0)==0){if((f|0)==(c[53380]|0)){A=(c[53377]|0)+o|0;c[53377]=A;c[53380]=n;c[n+4>>2]=A|1;if((n|0)!=(c[53379]|0)){return}c[53379]=0;c[53376]=0;return}if((f|0)==(c[53379]|0)){A=(c[53376]|0)+o|0;c[53376]=A;c[53379]=n;c[n+4>>2]=A|1;c[n+A>>2]=A;return}A=(z&-8)+o|0;s=z>>>3;b:do{if(z>>>0<256>>>0){g=c[d+(b+8)>>2]|0;t=c[d+(b+12)>>2]|0;h=213536+(s<<1<<2)|0;do{if((g|0)!=(h|0)){if(g>>>0<a>>>0){fc()}if((c[g+12>>2]|0)==(f|0)){break}fc()}}while(0);if((t|0)==(g|0)){c[53374]=c[53374]&~(1<<s);break}do{if((t|0)==(h|0)){B=t+8|0}else{if(t>>>0<a>>>0){fc()}m=t+8|0;if((c[m>>2]|0)==(f|0)){B=m;break}fc()}}while(0);c[g+12>>2]=t;c[B>>2]=g}else{h=e;m=c[d+(b+24)>>2]|0;l=c[d+(b+12)>>2]|0;do{if((l|0)==(h|0)){i=d+(b+20)|0;p=c[i>>2]|0;if((p|0)==0){q=d+(b+16)|0;v=c[q>>2]|0;if((v|0)==0){C=0;break}else{D=v;E=q}}else{D=p;E=i}while(1){i=D+20|0;p=c[i>>2]|0;if((p|0)!=0){D=p;E=i;continue}i=D+16|0;p=c[i>>2]|0;if((p|0)==0){break}else{D=p;E=i}}if(E>>>0<a>>>0){fc()}else{c[E>>2]=0;C=D;break}}else{i=c[d+(b+8)>>2]|0;if(i>>>0<a>>>0){fc()}p=i+12|0;if((c[p>>2]|0)!=(h|0)){fc()}q=l+8|0;if((c[q>>2]|0)==(h|0)){c[p>>2]=l;c[q>>2]=i;C=l;break}else{fc()}}}while(0);if((m|0)==0){break}l=d+(b+28)|0;g=213800+(c[l>>2]<<2)|0;do{if((h|0)==(c[g>>2]|0)){c[g>>2]=C;if((C|0)!=0){break}c[53375]=c[53375]&~(1<<c[l>>2]);break b}else{if(m>>>0<(c[53378]|0)>>>0){fc()}t=m+16|0;if((c[t>>2]|0)==(h|0)){c[t>>2]=C}else{c[m+20>>2]=C}if((C|0)==0){break b}}}while(0);if(C>>>0<(c[53378]|0)>>>0){fc()}c[C+24>>2]=m;h=c[d+(b+16)>>2]|0;do{if((h|0)!=0){if(h>>>0<(c[53378]|0)>>>0){fc()}else{c[C+16>>2]=h;c[h+24>>2]=C;break}}}while(0);h=c[d+(b+20)>>2]|0;if((h|0)==0){break}if(h>>>0<(c[53378]|0)>>>0){fc()}else{c[C+20>>2]=h;c[h+24>>2]=C;break}}}while(0);c[n+4>>2]=A|1;c[n+A>>2]=A;if((n|0)!=(c[53379]|0)){F=A;break}c[53376]=A;return}else{c[y>>2]=z&-2;c[n+4>>2]=o|1;c[n+o>>2]=o;F=o}}while(0);o=F>>>3;if(F>>>0<256>>>0){z=o<<1;y=213536+(z<<2)|0;C=c[53374]|0;b=1<<o;do{if((C&b|0)==0){c[53374]=C|b;G=y;H=213536+(z+2<<2)|0}else{o=213536+(z+2<<2)|0;d=c[o>>2]|0;if(d>>>0>=(c[53378]|0)>>>0){G=d;H=o;break}fc()}}while(0);c[H>>2]=n;c[G+12>>2]=n;c[n+8>>2]=G;c[n+12>>2]=y;return}y=n;G=F>>>8;do{if((G|0)==0){I=0}else{if(F>>>0>16777215>>>0){I=31;break}H=(G+1048320|0)>>>16&8;z=G<<H;b=(z+520192|0)>>>16&4;C=z<<b;z=(C+245760|0)>>>16&2;o=14-(b|H|z)+(C<<z>>>15)|0;I=F>>>((o+7|0)>>>0)&1|o<<1}}while(0);G=213800+(I<<2)|0;c[n+28>>2]=I;c[n+20>>2]=0;c[n+16>>2]=0;o=c[53375]|0;z=1<<I;if((o&z|0)==0){c[53375]=o|z;c[G>>2]=y;c[n+24>>2]=G;c[n+12>>2]=n;c[n+8>>2]=n;return}z=c[G>>2]|0;if((I|0)==31){J=0}else{J=25-(I>>>1)|0}c:do{if((c[z+4>>2]&-8|0)==(F|0)){K=z}else{I=z;G=F<<J;while(1){L=I+16+(G>>>31<<2)|0;o=c[L>>2]|0;if((o|0)==0){break}if((c[o+4>>2]&-8|0)==(F|0)){K=o;break c}else{I=o;G=G<<1}}if(L>>>0<(c[53378]|0)>>>0){fc()}c[L>>2]=y;c[n+24>>2]=I;c[n+12>>2]=n;c[n+8>>2]=n;return}}while(0);L=K+8|0;F=c[L>>2]|0;J=c[53378]|0;if(K>>>0<J>>>0){fc()}if(F>>>0<J>>>0){fc()}c[F+12>>2]=y;c[L>>2]=y;c[n+8>>2]=F;c[n+12>>2]=K;c[n+24>>2]=0;return}function jF(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0.0,P=0.0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,ea=0.0,fa=0.0,ga=0,ha=0,ia=0.0,ja=0.0,ka=0,la=0.0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0.0,va=0,wa=0.0,xa=0,ya=0.0,za=0,Aa=0,Ba=0,Ca=0.0,Da=0,Ea=0.0,Fa=0.0,Ga=0,Ha=0,Ia=0,Ja=0,Ka=0,La=0,Ma=0,Na=0,Oa=0,Pa=0,Ra=0,Sa=0,Ta=0,Ua=0,Va=0,Wa=0,Ya=0,Za=0,_a=0,$a=0,ab=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0,ob=0,qb=0,rb=0,sb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Db=0,Eb=0,Fb=0,Gb=0,Hb=0,Ib=0,Jb=0,Kb=0,Lb=0,Mb=0,Nb=0,Ob=0,Pb=0,Qb=0,Rb=0,Sb=0,Tb=0,Ub=0,Wb=0,Xb=0,Yb=0,Zb=0,_b=0,$b=0,ac=0,bc=0,cc=0,dc=0,ec=0,fc=0,gc=0,hc=0,ic=0,jc=0,kc=0,lc=0,mc=0,nc=0,oc=0,pc=0,qc=0,rc=0,sc=0,tc=0,uc=0,vc=0,wc=0.0,xc=0,yc=0,zc=0.0,Ac=0.0,Bc=0.0,Cc=0.0,Dc=0.0,Ec=0.0,Fc=0.0,Gc=0,Hc=0,Ic=0.0,Jc=0,Kc=0,Lc=0,Mc=0,Nc=0,Oc=0;g=i;i=i+512|0;h=g|0;if((e|0)==1){j=-1074;k=53}else if((e|0)==0){j=-149;k=24}else if((e|0)==2){j=-1074;k=53}else{l=0.0;i=g;return+l}e=b+4|0;m=b+100|0;do{n=c[e>>2]|0;if(n>>>0<(c[m>>2]|0)>>>0){c[e>>2]=n+1;o=d[n]|0}else{o=mF(b)|0}}while((Qa(o|0)|0)!=0);do{if((o|0)==45|(o|0)==43){n=1-(((o|0)==45)<<1)|0;p=c[e>>2]|0;if(p>>>0<(c[m>>2]|0)>>>0){c[e>>2]=p+1;q=d[p]|0;r=n;break}else{q=mF(b)|0;r=n;break}}else{q=o;r=1}}while(0);o=0;n=q;while(1){if((n|32|0)!=(a[95936+o|0]|0)){u=o;v=n;break}do{if(o>>>0<7>>>0){q=c[e>>2]|0;if(q>>>0<(c[m>>2]|0)>>>0){c[e>>2]=q+1;w=d[q]|0;break}else{w=mF(b)|0;break}}else{w=n}}while(0);q=o+1|0;if(q>>>0<8>>>0){o=q;n=w}else{u=q;v=w;break}}do{if((u|0)==3){x=23}else if((u|0)!=8){w=(f|0)==0;if(!(u>>>0<4>>>0|w)){if((u|0)==8){break}else{x=23;break}}a:do{if((u|0)==0){n=0;o=v;while(1){if((o|32|0)!=(a[141816+n|0]|0)){y=o;z=n;break a}do{if(n>>>0<2>>>0){q=c[e>>2]|0;if(q>>>0<(c[m>>2]|0)>>>0){c[e>>2]=q+1;A=d[q]|0;break}else{A=mF(b)|0;break}}else{A=o}}while(0);q=n+1|0;if(q>>>0<3>>>0){n=q;o=A}else{y=A;z=q;break}}}else{y=v;z=u}}while(0);if((z|0)==0){do{if((y|0)==48){o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;B=d[o]|0}else{B=mF(b)|0}if((B|32|0)!=120){if((c[m>>2]|0)==0){C=48;break}c[e>>2]=(c[e>>2]|0)-1;C=48;break}o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;D=d[o]|0;E=0}else{D=mF(b)|0;E=0}while(1){if((D|0)==46){x=70;break}else if((D|0)!=48){F=D;G=0;I=0;J=0;K=0;L=E;M=0;N=0;O=1.0;P=0.0;Q=0;break}o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;D=d[o]|0;E=1;continue}else{D=mF(b)|0;E=1;continue}}b:do{if((x|0)==70){o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;R=d[o]|0}else{R=mF(b)|0}if((R|0)==48){T=-1;U=-1}else{F=R;G=0;I=0;J=0;K=0;L=E;M=1;N=0;O=1.0;P=0.0;Q=0;break}while(1){o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;V=d[o]|0}else{V=mF(b)|0}if((V|0)!=48){F=V;G=0;I=0;J=T;K=U;L=1;M=1;N=0;O=1.0;P=0.0;Q=0;break b}o=EF(U,T,-1,-1)|0;T=H;U=o}}}while(0);c:while(1){o=F-48|0;do{if(o>>>0<10>>>0){W=o;x=84}else{n=F|32;q=(F|0)==46;if(!((n-97|0)>>>0<6>>>0|q)){X=F;break c}if(q){if((M|0)==0){Y=G;Z=I;_=G;$=I;aa=L;ba=1;ca=N;ea=O;fa=P;ga=Q;break}else{X=46;break c}}else{W=(F|0)>57?n-87|0:o;x=84;break}}}while(0);if((x|0)==84){x=0;o=0;do{if((G|0)<(o|0)|(G|0)==(o|0)&I>>>0<8>>>0){ha=N;ia=O;ja=P;ka=W+(Q<<4)|0}else{n=0;if((G|0)<(n|0)|(G|0)==(n|0)&I>>>0<14>>>0){la=O*.0625;ha=N;ia=la;ja=P+la*+(W|0);ka=Q;break}if(!((W|0)!=0&(N|0)==0)){ha=N;ia=O;ja=P;ka=Q;break}ha=1;ia=O;ja=P+O*.5;ka=Q}}while(0);o=EF(I,G,1,0)|0;Y=H;Z=o;_=J;$=K;aa=1;ba=M;ca=ha;ea=ia;fa=ja;ga=ka}o=c[e>>2]|0;if(o>>>0<(c[m>>2]|0)>>>0){c[e>>2]=o+1;F=d[o]|0;G=Y;I=Z;J=_;K=$;L=aa;M=ba;N=ca;O=ea;P=fa;Q=ga;continue}else{F=mF(b)|0;G=Y;I=Z;J=_;K=$;L=aa;M=ba;N=ca;O=ea;P=fa;Q=ga;continue}}if((L|0)==0){o=(c[m>>2]|0)==0;if(!o){c[e>>2]=(c[e>>2]|0)-1}do{if(w){lF(b,0)}else{if(o){break}n=c[e>>2]|0;c[e>>2]=n-1;if((M|0)==0){break}c[e>>2]=n-2}}while(0);l=+(r|0)*0.0;i=g;return+l}o=(M|0)==0;n=o?I:K;q=o?G:J;o=0;if((G|0)<(o|0)|(G|0)==(o|0)&I>>>0<8>>>0){o=Q;p=G;ma=I;while(1){na=o<<4;oa=EF(ma,p,1,0)|0;pa=H;qa=0;if((pa|0)<(qa|0)|(pa|0)==(qa|0)&oa>>>0<8>>>0){o=na;p=pa;ma=oa}else{ra=na;break}}}else{ra=Q}do{if((X|32|0)==112){ma=kF(b,f)|0;p=H;if(!((ma|0)==0&(p|0)==(-2147483648|0))){sa=p;ta=ma;break}if(w){lF(b,0);l=0.0;i=g;return+l}else{if((c[m>>2]|0)==0){sa=0;ta=0;break}c[e>>2]=(c[e>>2]|0)-1;sa=0;ta=0;break}}else{if((c[m>>2]|0)==0){sa=0;ta=0;break}c[e>>2]=(c[e>>2]|0)-1;sa=0;ta=0}}while(0);ma=EF(n<<2|0>>>30,q<<2|n>>>30,-32,-1)|0;p=EF(ma,H,ta,sa)|0;ma=H;if((ra|0)==0){l=+(r|0)*0.0;i=g;return+l}o=0;if((ma|0)>(o|0)|(ma|0)==(o|0)&p>>>0>(-j|0)>>>0){c[(Vb()|0)>>2]=34;l=+(r|0)*1.7976931348623157e+308*1.7976931348623157e+308;i=g;return+l}o=j-106|0;na=(o|0)<0|0?-1:0;if((ma|0)<(na|0)|(ma|0)==(na|0)&p>>>0<o>>>0){c[(Vb()|0)>>2]=34;l=+(r|0)*2.2250738585072014e-308*2.2250738585072014e-308;i=g;return+l}if((ra|0)>-1){o=ra;la=P;na=ma;oa=p;while(1){pa=o<<1;if(la<.5){ua=la;va=pa}else{ua=la+-1.0;va=pa|1}wa=la+ua;pa=EF(oa,na,-1,-1)|0;qa=H;if((va|0)>-1){o=va;la=wa;na=qa;oa=pa}else{xa=va;ya=wa;za=qa;Aa=pa;break}}}else{xa=ra;ya=P;za=ma;Aa=p}oa=0;na=FF(32,0,j,(j|0)<0|0?-1:0)|0;o=EF(Aa,za,na,H)|0;na=H;if((oa|0)>(na|0)|(oa|0)==(na|0)&k>>>0>o>>>0){na=o;Ba=(na|0)<0?0:na}else{Ba=k}do{if((Ba|0)<53){la=+(r|0);wa=+pb(+(+nF(1.0,84-Ba|0)),+la);if(!((Ba|0)<32&ya!=0.0)){Ca=ya;Da=xa;Ea=wa;Fa=la;break}na=xa&1;Ca=(na|0)==0?0.0:ya;Da=(na^1)+xa|0;Ea=wa;Fa=la}else{Ca=ya;Da=xa;Ea=0.0;Fa=+(r|0)}}while(0);la=Fa*Ca+(Ea+Fa*+(Da>>>0>>>0))-Ea;if(la==0.0){c[(Vb()|0)>>2]=34}l=+oF(la,Aa);i=g;return+l}else{C=y}}while(0);p=j+k|0;ma=-p|0;na=C;o=0;while(1){if((na|0)==46){x=139;break}else if((na|0)!=48){Ga=na;Ha=0;Ia=o;Ja=0;Ka=0;break}oa=c[e>>2]|0;if(oa>>>0<(c[m>>2]|0)>>>0){c[e>>2]=oa+1;na=d[oa]|0;o=1;continue}else{na=mF(b)|0;o=1;continue}}d:do{if((x|0)==139){na=c[e>>2]|0;if(na>>>0<(c[m>>2]|0)>>>0){c[e>>2]=na+1;La=d[na]|0}else{La=mF(b)|0}if((La|0)==48){Ma=-1;Na=-1}else{Ga=La;Ha=1;Ia=o;Ja=0;Ka=0;break}while(1){na=c[e>>2]|0;if(na>>>0<(c[m>>2]|0)>>>0){c[e>>2]=na+1;Oa=d[na]|0}else{Oa=mF(b)|0}if((Oa|0)!=48){Ga=Oa;Ha=1;Ia=1;Ja=Ma;Ka=Na;break d}na=EF(Na,Ma,-1,-1)|0;Ma=H;Na=na}}}while(0);o=h|0;c[o>>2]=0;na=Ga-48|0;oa=(Ga|0)==46;e:do{if(na>>>0<10>>>0|oa){n=h+496|0;q=Ja;pa=Ka;qa=0;Pa=0;Ra=0;Sa=Ia;Ta=Ha;Ua=0;Va=0;Wa=Ga;Ya=na;Za=oa;while(1){do{if(Za){if((Ta|0)==0){_a=Va;$a=Ua;ab=1;bb=Sa;cb=Ra;db=qa;eb=Pa;fb=qa;gb=Pa}else{hb=q;ib=pa;jb=qa;kb=Pa;lb=Ra;mb=Sa;nb=Ua;ob=Va;qb=Wa;break e}}else{rb=EF(Pa,qa,1,0)|0;sb=H;tb=(Wa|0)!=48;if((Ua|0)>=125){if(!tb){_a=Va;$a=Ua;ab=Ta;bb=Sa;cb=Ra;db=sb;eb=rb;fb=q;gb=pa;break}c[n>>2]=c[n>>2]|1;_a=Va;$a=Ua;ab=Ta;bb=Sa;cb=Ra;db=sb;eb=rb;fb=q;gb=pa;break}ub=h+(Ua<<2)|0;if((Va|0)==0){vb=Ya}else{vb=Wa-48+((c[ub>>2]|0)*10|0)|0}c[ub>>2]=vb;ub=Va+1|0;wb=(ub|0)==9;_a=wb?0:ub;$a=(wb&1)+Ua|0;ab=Ta;bb=1;cb=tb?rb:Ra;db=sb;eb=rb;fb=q;gb=pa}}while(0);rb=c[e>>2]|0;if(rb>>>0<(c[m>>2]|0)>>>0){c[e>>2]=rb+1;xb=d[rb]|0}else{xb=mF(b)|0}rb=xb-48|0;sb=(xb|0)==46;if(rb>>>0<10>>>0|sb){q=fb;pa=gb;qa=db;Pa=eb;Ra=cb;Sa=bb;Ta=ab;Ua=$a;Va=_a;Wa=xb;Ya=rb;Za=sb}else{yb=fb;zb=gb;Ab=db;Bb=eb;Cb=cb;Db=bb;Eb=ab;Fb=$a;Gb=_a;Hb=xb;x=162;break}}}else{yb=Ja;zb=Ka;Ab=0;Bb=0;Cb=0;Db=Ia;Eb=Ha;Fb=0;Gb=0;Hb=Ga;x=162}}while(0);if((x|0)==162){oa=(Eb|0)==0;hb=oa?Ab:yb;ib=oa?Bb:zb;jb=Ab;kb=Bb;lb=Cb;mb=Db;nb=Fb;ob=Gb;qb=Hb}oa=(mb|0)!=0;do{if(oa){if((qb|32|0)!=101){x=171;break}na=kF(b,f)|0;Za=H;do{if((na|0)==0&(Za|0)==(-2147483648|0)){if(w){lF(b,0);l=0.0;i=g;return+l}else{if((c[m>>2]|0)==0){Ib=0;Jb=0;break}c[e>>2]=(c[e>>2]|0)-1;Ib=0;Jb=0;break}}else{Ib=Za;Jb=na}}while(0);na=EF(Jb,Ib,ib,hb)|0;Kb=H;Lb=na}else{x=171}}while(0);do{if((x|0)==171){if((qb|0)<=-1){Kb=hb;Lb=ib;break}if((c[m>>2]|0)==0){Kb=hb;Lb=ib;break}c[e>>2]=(c[e>>2]|0)-1;Kb=hb;Lb=ib}}while(0);if(!oa){c[(Vb()|0)>>2]=22;lF(b,0);l=0.0;i=g;return+l}na=c[o>>2]|0;if((na|0)==0){l=+(r|0)*0.0;i=g;return+l}Za=0;do{if((Lb|0)==(kb|0)&(Kb|0)==(jb|0)&((jb|0)<(Za|0)|(jb|0)==(Za|0)&kb>>>0<10>>>0)){if(k>>>0<=30>>>0){if((na>>>(k>>>0)|0)!=0){break}}l=+(r|0)*+(na>>>0>>>0);i=g;return+l}}while(0);na=(j|0)/-2|0;Za=(na|0)<0|0?-1:0;if((Kb|0)>(Za|0)|(Kb|0)==(Za|0)&Lb>>>0>na>>>0){c[(Vb()|0)>>2]=34;l=+(r|0)*1.7976931348623157e+308*1.7976931348623157e+308;i=g;return+l}na=j-106|0;Za=(na|0)<0|0?-1:0;if((Kb|0)<(Za|0)|(Kb|0)==(Za|0)&Lb>>>0<na>>>0){c[(Vb()|0)>>2]=34;l=+(r|0)*2.2250738585072014e-308*2.2250738585072014e-308;i=g;return+l}if((ob|0)==0){Mb=nb}else{if((ob|0)<9){na=h+(nb<<2)|0;Za=ob;oa=c[na>>2]|0;do{oa=oa*10|0;Za=Za+1|0;}while((Za|0)<9);c[na>>2]=oa}Mb=nb+1|0}Za=Lb;do{if((lb|0)<9){if(!((lb|0)<=(Za|0)&(Za|0)<18)){break}if((Za|0)==9){l=+(r|0)*+((c[o>>2]|0)>>>0>>>0);i=g;return+l}if((Za|0)<9){l=+(r|0)*+((c[o>>2]|0)>>>0>>>0)/+(c[29728+(8-Za<<2)>>2]|0);i=g;return+l}Ya=k+27+(Za*-3|0)|0;Wa=c[o>>2]|0;if((Ya|0)<=30){if((Wa>>>(Ya>>>0)|0)!=0){break}}l=+(r|0)*+(Wa>>>0>>>0)*+(c[29728+(Za-10<<2)>>2]|0);i=g;return+l}}while(0);o=(Za|0)%9|0;if((o|0)==0){Nb=0;Ob=Mb;Pb=0;Qb=Za}else{oa=(Za|0)>-1?o:o+9|0;o=c[29728+(8-oa<<2)>>2]|0;do{if((Mb|0)==0){Rb=0;Sb=0;Tb=Za}else{na=1e9/(o|0)|0;Wa=Za;Ya=0;Va=0;Ua=0;while(1){Ta=h+(Va<<2)|0;Sa=c[Ta>>2]|0;Ra=((Sa>>>0)/(o>>>0)|0)+Ua|0;c[Ta>>2]=Ra;Ub=da((Sa>>>0)%(o>>>0)|0,na)|0;Sa=Va+1|0;if((Va|0)==(Ya|0)&(Ra|0)==0){Wb=Sa&127;Xb=Wa-9|0}else{Wb=Ya;Xb=Wa}if((Sa|0)==(Mb|0)){break}else{Wa=Xb;Ya=Wb;Va=Sa;Ua=Ub}}if((Ub|0)==0){Rb=Mb;Sb=Wb;Tb=Xb;break}c[h+(Mb<<2)>>2]=Ub;Rb=Mb+1|0;Sb=Wb;Tb=Xb}}while(0);Nb=Sb;Ob=Rb;Pb=0;Qb=9-oa+Tb|0}f:while(1){o=h+(Nb<<2)|0;if((Qb|0)<18){Za=Ob;Ua=Pb;while(1){Va=0;Ya=Za+127|0;Wa=Za;while(1){na=Ya&127;Sa=h+(na<<2)|0;Ra=c[Sa>>2]|0;Ta=EF(Ra<<29|0>>>3,0<<29|Ra>>>3,Va,0)|0;Ra=H;Pa=0;if(Ra>>>0>Pa>>>0|Ra>>>0==Pa>>>0&Ta>>>0>1e9>>>0){Pa=PF(Ta,Ra,1e9,0)|0;qa=QF(Ta,Ra,1e9,0)|0;Yb=Pa;Zb=qa}else{Yb=0;Zb=Ta}c[Sa>>2]=Zb;Sa=(na|0)==(Nb|0);if((na|0)!=(Wa+127&127|0)|Sa){_b=Wa}else{_b=(Zb|0)==0?na:Wa}if(Sa){break}else{Va=Yb;Ya=na-1|0;Wa=_b}}Wa=Ua-29|0;if((Yb|0)==0){Za=_b;Ua=Wa}else{$b=Wa;ac=_b;bc=Yb;break}}}else{if((Qb|0)==18){cc=Ob;dc=Pb}else{ec=Nb;fc=Ob;gc=Pb;hc=Qb;break}while(1){if((c[o>>2]|0)>>>0>=9007199>>>0){ec=Nb;fc=cc;gc=dc;hc=18;break f}Ua=0;Za=cc+127|0;Wa=cc;while(1){Ya=Za&127;Va=h+(Ya<<2)|0;na=c[Va>>2]|0;Sa=EF(na<<29|0>>>3,0<<29|na>>>3,Ua,0)|0;na=H;Ta=0;if(na>>>0>Ta>>>0|na>>>0==Ta>>>0&Sa>>>0>1e9>>>0){Ta=PF(Sa,na,1e9,0)|0;qa=QF(Sa,na,1e9,0)|0;ic=Ta;jc=qa}else{ic=0;jc=Sa}c[Va>>2]=jc;Va=(Ya|0)==(Nb|0);if((Ya|0)!=(Wa+127&127|0)|Va){kc=Wa}else{kc=(jc|0)==0?Ya:Wa}if(Va){break}else{Ua=ic;Za=Ya-1|0;Wa=kc}}Wa=dc-29|0;if((ic|0)==0){cc=kc;dc=Wa}else{$b=Wa;ac=kc;bc=ic;break}}}o=Nb+127&127;if((o|0)==(ac|0)){Wa=ac+127&127;Za=h+((ac+126&127)<<2)|0;c[Za>>2]=c[Za>>2]|c[h+(Wa<<2)>>2];lc=Wa}else{lc=ac}c[h+(o<<2)>>2]=bc;Nb=o;Ob=lc;Pb=$b;Qb=Qb+9|0}g:while(1){mc=fc+1&127;oa=h+((fc+127&127)<<2)|0;o=ec;Wa=gc;Za=hc;while(1){Ua=(Za|0)==18;Ya=(Za|0)>27?9:1;nc=o;oc=Wa;while(1){Va=0;while(1){Sa=Va+nc&127;if((Sa|0)==(fc|0)){pc=2;break}qa=c[h+(Sa<<2)>>2]|0;Sa=c[29720+(Va<<2)>>2]|0;if(qa>>>0<Sa>>>0){pc=2;break}Ta=Va+1|0;if(qa>>>0>Sa>>>0){pc=Va;break}if((Ta|0)<2){Va=Ta}else{pc=Ta;break}}if((pc|0)==2&Ua){break g}qc=Ya+oc|0;if((nc|0)==(fc|0)){nc=fc;oc=qc}else{break}}Ua=(1<<Ya)-1|0;Va=1e9>>>(Ya>>>0);rc=Za;sc=nc;Ta=nc;tc=0;do{Sa=h+(Ta<<2)|0;qa=c[Sa>>2]|0;na=(qa>>>(Ya>>>0))+tc|0;c[Sa>>2]=na;tc=da(qa&Ua,Va)|0;qa=(Ta|0)==(sc|0)&(na|0)==0;Ta=Ta+1&127;rc=qa?rc-9|0:rc;sc=qa?Ta:sc;}while((Ta|0)!=(fc|0));if((tc|0)==0){o=sc;Wa=qc;Za=rc;continue}if((mc|0)!=(sc|0)){break}c[oa>>2]=c[oa>>2]|1;o=sc;Wa=qc;Za=rc}c[h+(fc<<2)>>2]=tc;ec=sc;fc=mc;gc=qc;hc=rc}Za=nc&127;if((Za|0)==(fc|0)){c[h+(mc-1<<2)>>2]=0;uc=mc}else{uc=fc}la=+((c[h+(Za<<2)>>2]|0)>>>0>>>0);Za=nc+1&127;if((Za|0)==(uc|0)){Wa=uc+1&127;c[h+(Wa-1<<2)>>2]=0;vc=Wa}else{vc=uc}wa=+(r|0);wc=wa*(la*1.0e9+ +((c[h+(Za<<2)>>2]|0)>>>0>>>0));Za=oc+53|0;Wa=Za-j|0;if((Wa|0)<(k|0)){xc=(Wa|0)<0?0:Wa;yc=1}else{xc=k;yc=0}if((xc|0)<53){la=+pb(+(+nF(1.0,105-xc|0)),+wc);zc=+Xa(+wc,+(+nF(1.0,53-xc|0)));Ac=la;Bc=zc;Cc=la+(wc-zc)}else{Ac=0.0;Bc=0.0;Cc=wc}o=nc+2&127;do{if((o|0)==(vc|0)){Dc=Bc}else{oa=c[h+(o<<2)>>2]|0;do{if(oa>>>0<5e8>>>0){if((oa|0)==0){if((nc+3&127|0)==(vc|0)){Ec=Bc;break}}Ec=wa*.25+Bc}else{if(oa>>>0>5e8>>>0){Ec=wa*.75+Bc;break}if((nc+3&127|0)==(vc|0)){Ec=wa*.5+Bc;break}else{Ec=wa*.75+Bc;break}}}while(0);if((53-xc|0)<=1){Dc=Ec;break}if(+Xa(+Ec,+1.0)!=0.0){Dc=Ec;break}Dc=Ec+1.0}}while(0);wa=Cc+Dc-Ac;do{if((Za&2147483647|0)>(-2-p|0)){if(+S(+wa)<9007199254740992.0){Fc=wa;Gc=yc;Hc=oc}else{Fc=wa*.5;Gc=(yc|0)!=0&(xc|0)==(Wa|0)?0:yc;Hc=oc+1|0}if((Hc+50|0)<=(ma|0)){if(!((Gc|0)!=0&Dc!=0.0)){Ic=Fc;Jc=Hc;break}}c[(Vb()|0)>>2]=34;Ic=Fc;Jc=Hc}else{Ic=wa;Jc=oc}}while(0);l=+oF(Ic,Jc);i=g;return+l}else if((z|0)==3){ma=c[e>>2]|0;if(ma>>>0<(c[m>>2]|0)>>>0){c[e>>2]=ma+1;Kc=d[ma]|0}else{Kc=mF(b)|0}if((Kc|0)==40){Lc=1}else{if((c[m>>2]|0)==0){l=+s;i=g;return+l}c[e>>2]=(c[e>>2]|0)-1;l=+s;i=g;return+l}while(1){ma=c[e>>2]|0;if(ma>>>0<(c[m>>2]|0)>>>0){c[e>>2]=ma+1;Mc=d[ma]|0}else{Mc=mF(b)|0}if(!((Mc-48|0)>>>0<10>>>0|(Mc-65|0)>>>0<26>>>0)){if(!((Mc-97|0)>>>0<26>>>0|(Mc|0)==95)){break}}Lc=Lc+1|0}if((Mc|0)==41){l=+s;i=g;return+l}ma=(c[m>>2]|0)==0;if(!ma){c[e>>2]=(c[e>>2]|0)-1}if(w){c[(Vb()|0)>>2]=22;lF(b,0);l=0.0;i=g;return+l}if((Lc|0)==0|ma){l=+s;i=g;return+l}else{Nc=Lc}while(1){ma=Nc-1|0;c[e>>2]=(c[e>>2]|0)-1;if((ma|0)==0){l=+s;break}else{Nc=ma}}i=g;return+l}else{if((c[m>>2]|0)!=0){c[e>>2]=(c[e>>2]|0)-1}c[(Vb()|0)>>2]=22;lF(b,0);l=0.0;i=g;return+l}}}while(0);do{if((x|0)==23){b=(c[m>>2]|0)==0;if(!b){c[e>>2]=(c[e>>2]|0)-1}if(u>>>0<4>>>0|(f|0)==0|b){break}else{Oc=u}do{c[e>>2]=(c[e>>2]|0)-1;Oc=Oc-1|0;}while(Oc>>>0>3>>>0)}}while(0);l=+(r|0)*t;i=g;return+l}function kF(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;e=a+4|0;f=c[e>>2]|0;g=a+100|0;if(f>>>0<(c[g>>2]|0)>>>0){c[e>>2]=f+1;h=d[f]|0}else{h=mF(a)|0}do{if((h|0)==45|(h|0)==43){f=(h|0)==45|0;i=c[e>>2]|0;if(i>>>0<(c[g>>2]|0)>>>0){c[e>>2]=i+1;j=d[i]|0}else{j=mF(a)|0}if((j-48|0)>>>0<10>>>0|(b|0)==0){k=f;l=j;break}if((c[g>>2]|0)==0){k=f;l=j;break}c[e>>2]=(c[e>>2]|0)-1;k=f;l=j}else{k=0;l=h}}while(0);if((l-48|0)>>>0>9>>>0){if((c[g>>2]|0)==0){m=-2147483648;n=0;return(H=m,n)|0}c[e>>2]=(c[e>>2]|0)-1;m=-2147483648;n=0;return(H=m,n)|0}else{o=l;p=0}while(1){q=o-48+p|0;l=c[e>>2]|0;if(l>>>0<(c[g>>2]|0)>>>0){c[e>>2]=l+1;r=d[l]|0}else{r=mF(a)|0}if(!((r-48|0)>>>0<10>>>0&(q|0)<214748364)){break}o=r;p=q*10|0}p=q;o=(q|0)<0|0?-1:0;if((r-48|0)>>>0<10>>>0){q=r;l=o;h=p;while(1){j=OF(h,l,10,0)|0;b=H;f=EF(q,(q|0)<0|0?-1:0,-48,-1)|0;i=EF(f,H,j,b)|0;b=H;j=c[e>>2]|0;if(j>>>0<(c[g>>2]|0)>>>0){c[e>>2]=j+1;s=d[j]|0}else{s=mF(a)|0}j=21474836;if((s-48|0)>>>0<10>>>0&((b|0)<(j|0)|(b|0)==(j|0)&i>>>0<2061584302>>>0)){q=s;l=b;h=i}else{t=s;u=b;v=i;break}}}else{t=r;u=o;v=p}if((t-48|0)>>>0<10>>>0){do{t=c[e>>2]|0;if(t>>>0<(c[g>>2]|0)>>>0){c[e>>2]=t+1;w=d[t]|0}else{w=mF(a)|0}}while((w-48|0)>>>0<10>>>0)}if((c[g>>2]|0)!=0){c[e>>2]=(c[e>>2]|0)-1}e=(k|0)!=0;k=FF(0,0,v,u)|0;m=e?H:u;n=e?k:v;return(H=m,n)|0}function lF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;c[a+104>>2]=b;d=c[a+8>>2]|0;e=c[a+4>>2]|0;f=d-e|0;c[a+108>>2]=f;if((b|0)!=0&(f|0)>(b|0)){c[a+100>>2]=e+b;return}else{c[a+100>>2]=d;return}}function mF(b){b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=b+104|0;f=c[e>>2]|0;if((f|0)==0){g=3}else{if((c[b+108>>2]|0)<(f|0)){g=3}}do{if((g|0)==3){f=qF(b)|0;if((f|0)<0){break}h=c[e>>2]|0;i=c[b+8>>2]|0;do{if((h|0)==0){g=8}else{j=c[b+4>>2]|0;k=h-(c[b+108>>2]|0)-1|0;if((i-j|0)<=(k|0)){g=8;break}c[b+100>>2]=j+k}}while(0);if((g|0)==8){c[b+100>>2]=i}h=c[b+4>>2]|0;if((i|0)!=0){k=b+108|0;c[k>>2]=i+1-h+(c[k>>2]|0)}k=h-1|0;if((d[k]|0|0)==(f|0)){l=f;return l|0}a[k]=f;l=f;return l|0}}while(0);c[b+100>>2]=0;l=-1;return l|0}function nF(a,b){a=+a;b=b|0;var d=0.0,e=0,f=0.0,g=0;do{if((b|0)>1023){d=a*8.98846567431158e+307;e=b-1023|0;if((e|0)<=1023){f=d;g=e;break}e=b-2046|0;f=d*8.98846567431158e+307;g=(e|0)>1023?1023:e}else{if((b|0)>=-1022){f=a;g=b;break}d=a*2.2250738585072014e-308;e=b+1022|0;if((e|0)>=-1022){f=d;g=e;break}e=b+2044|0;f=d*2.2250738585072014e-308;g=(e|0)<-1022?-1022:e}}while(0);return+(f*(c[k>>2]=0<<20|0>>>12,c[k+4>>2]=g+1023<<20|0>>>12,+h[k>>3]))}function oF(a,b){a=+a;b=b|0;return+(+nF(a,b))}function pF(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=b+74|0;e=a[d]|0;a[d]=e-1&255|e;e=b+20|0;d=b+44|0;if((c[e>>2]|0)>>>0>(c[d>>2]|0)>>>0){Hc[c[b+36>>2]&63](b,0,0)|0}c[b+16>>2]=0;c[b+28>>2]=0;c[e>>2]=0;e=b|0;f=c[e>>2]|0;if((f&20|0)==0){g=c[d>>2]|0;c[b+8>>2]=g;c[b+4>>2]=g;h=0;return h|0}if((f&4|0)==0){h=-1;return h|0}c[e>>2]=f|32;h=-1;return h|0}function qF(a){a=a|0;var b=0,e=0,f=0,g=0;b=i;i=i+8|0;e=b|0;if((c[a+8>>2]|0)==0){if((pF(a)|0)==0){f=3}else{g=-1}}else{f=3}do{if((f|0)==3){if((Hc[c[a+32>>2]&63](a,e,1)|0)!=1){g=-1;break}g=d[e]|0}}while(0);i=b;return g|0}function rF(a){a=a|0;return+(+sF(a,0))}function sF(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0.0,j=0,k=0,l=0,m=0;d=i;i=i+112|0;e=d|0;vF(e|0,0,112)|0;f=e+4|0;c[f>>2]=a;g=e+8|0;c[g>>2]=-1;c[e+44>>2]=a;c[e+76>>2]=-1;lF(e,0);h=+jF(e,1,1);j=(c[f>>2]|0)-(c[g>>2]|0)+(c[e+108>>2]|0)|0;if((b|0)==0){k=112;l=0;i=d;return+h}if((j|0)==0){m=a}else{m=a+j|0}c[b>>2]=m;k=112;l=0;i=d;return+h}function tF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=b|0;if((b&3)==(d&3)){while(b&3){if((e|0)==0)return f|0;a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b]=a[d]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function uF(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b]=a[c]|0}b=e}else{tF(b,c,d)|0}return b|0}function vF(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;g=b&3;h=d|d<<8|d<<16|d<<24;i=f&~3;if(g){g=b+4-g|0;while((b|0)<(g|0)){a[b]=d;b=b+1|0}}while((b|0)<(i|0)){c[b>>2]=h;b=b+4|0}}while((b|0)<(f|0)){a[b]=d;b=b+1|0}return b-e|0}function wF(a,b,c){a=a|0;b=b|0;c=c|0;var e=0,f=0,g=0;while((e|0)<(c|0)){f=d[a+e|0]|0;g=d[b+e|0]|0;if((f|0)!=(g|0))return((f|0)>(g|0)?1:-1)|0;e=e+1|0}return 0}function xF(b){b=b|0;var c=0;c=b;while(a[c]|0){c=c+1|0}return c-b|0}function yF(a){a=a|0;if((a|0)<65)return a|0;if((a|0)>90)return a|0;return a-65+97|0}function zF(b,c){b=b|0;c=c|0;var d=0;do{a[b+d|0]=a[c+d|0];d=d+1|0}while(a[c+(d-1)|0]|0);return b|0}function AF(b,c){b=b|0;c=c|0;var d=0,e=0;d=b+(xF(b)|0)|0;do{a[d+e|0]=a[c+e|0];e=e+1|0}while(a[c+(e-1)|0]|0);return b|0}function BF(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;w=w+1|0;c[a>>2]=w;while((e|0)<40){if((c[d+(e<<2)>>2]|0)==0){c[d+(e<<2)>>2]=w;c[d+((e<<2)+4)>>2]=b;c[d+((e<<2)+8)>>2]=0;return 0}e=e+2|0}sb(116);sb(111);sb(111);sb(32);sb(109);sb(97);sb(110);sb(121);sb(32);sb(115);sb(101);sb(116);sb(106);sb(109);sb(112);sb(115);sb(32);sb(105);sb(110);sb(32);sb(97);sb(32);sb(102);sb(117);sb(110);sb(99);sb(116);sb(105);sb(111);sb(110);sb(32);sb(99);sb(97);sb(108);sb(108);sb(44);sb(32);sb(98);sb(117);sb(105);sb(108);sb(100);sb(32);sb(119);sb(105);sb(116);sb(104);sb(32);sb(97);sb(32);sb(104);sb(105);sb(103);sb(104);sb(101);sb(114);sb(32);sb(118);sb(97);sb(108);sb(117);sb(101);sb(32);sb(102);sb(111);sb(114);sb(32);sb(77);sb(65);sb(88);sb(95);sb(83);sb(69);sb(84);sb(74);sb(77);sb(80);sb(83);sb(10);ea(0);return 0}function CF(a,b){a=a|0;b=b|0;var d=0,e=0;while((d|0)<20){e=c[b+(d<<2)>>2]|0;if((e|0)==0)break;if((e|0)==(a|0)){return c[b+((d<<2)+4)>>2]|0}d=d+2|0}return 0}function DF(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0;while((e|0)<(d|0)){a[b+e|0]=f?0:a[c+e|0]|0;f=f?1:(a[c+e|0]|0)==0;e=e+1|0}return b|0}function EF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=a+c>>>0;return(H=b+d+(e>>>0<a>>>0|0)>>>0,e|0)|0}function FF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=b-d>>>0;e=b-d-(c>>>0>a>>>0|0)>>>0;return(H=e,a-c>>>0|0)|0}function GF(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){H=b<<c|(a&(1<<c)-1<<32-c)>>>32-c;return a<<c}H=a<<c-32;return 0}function HF(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){H=b>>>c;return a>>>c|(b&(1<<c)-1)<<32-c}H=0;return b>>>c-32|0}function IF(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){H=b>>c;return a>>>c|(b&(1<<c)-1)<<32-c}H=(b|0)<0?-1:0;return b>>c-32|0}function JF(b){b=b|0;var c=0;c=a[n+(b>>>24)|0]|0;if((c|0)<8)return c|0;c=a[n+(b>>16&255)|0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>8&255)|0]|0;if((c|0)<8)return c+16|0;return(a[n+(b&255)|0]|0)+24|0}function KF(b){b=b|0;var c=0;c=a[m+(b&255)|0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)|0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)|0]|0;if((c|0)<8)return c+16|0;return(a[m+(b>>>24)|0]|0)+24|0}function LF(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=a&65535;d=b&65535;e=da(d,c)|0;f=a>>>16;a=(e>>>16)+(da(d,f)|0)|0;d=b>>>16;b=da(d,c)|0;return(H=(a>>>16)+(da(d,f)|0)+(((a&65535)+b|0)>>>16)|0,a+b<<16|e&65535|0)|0}function MF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=b>>31|((b|0)<0?-1:0)<<1;f=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;g=d>>31|((d|0)<0?-1:0)<<1;h=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;i=FF(e^a,f^b,e,f)|0;b=H;a=g^e;e=h^f;f=FF((RF(i,b,FF(g^c,h^d,g,h)|0,H,0)|0)^a,H^e,a,e)|0;return(H=H,f)|0}function NF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;i=i+8|0;g=f|0;h=b>>31|((b|0)<0?-1:0)<<1;j=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;l=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;m=FF(h^a,j^b,h,j)|0;b=H;RF(m,b,FF(k^d,l^e,k,l)|0,H,g)|0;l=FF(c[g>>2]^h,c[g+4>>2]^j,h,j)|0;j=H;i=f;return(H=j,l)|0}function OF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;a=c;c=LF(e,a)|0;f=H;return(H=(da(b,a)|0)+(da(d,e)|0)+f|f&0,c|0|0)|0}function PF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=RF(a,b,c,d,0)|0;return(H=H,e)|0}function QF(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=i;i=i+8|0;g=f|0;RF(a,b,d,e,g)|0;i=f;return(H=c[g+4>>2]|0,c[g>>2]|0)|0}function RF(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,I=0,J=0,K=0,L=0,M=0;g=a;h=b;i=h;j=d;k=e;l=k;if((i|0)==0){m=(f|0)!=0;if((l|0)==0){if(m){c[f>>2]=(g>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(g>>>0)/(j>>>0)>>>0;return(H=n,o)|0}else{if(!m){n=0;o=0;return(H=n,o)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;o=0;return(H=n,o)|0}}m=(l|0)==0;do{if((j|0)==0){if(m){if((f|0)!=0){c[f>>2]=(i>>>0)%(j>>>0);c[f+4>>2]=0}n=0;o=(i>>>0)/(j>>>0)>>>0;return(H=n,o)|0}if((g|0)==0){if((f|0)!=0){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(l>>>0)}n=0;o=(i>>>0)/(l>>>0)>>>0;return(H=n,o)|0}p=l-1|0;if((p&l|0)==0){if((f|0)!=0){c[f>>2]=a|0;c[f+4>>2]=p&i|b&0}n=0;o=i>>>((KF(l|0)|0)>>>0);return(H=n,o)|0}p=(JF(l|0)|0)-(JF(i|0)|0)|0;if(p>>>0<=30){q=p+1|0;r=31-p|0;s=q;t=i<<r|g>>>(q>>>0);u=i>>>(q>>>0);v=0;w=g<<r;break}if((f|0)==0){n=0;o=0;return(H=n,o)|0}c[f>>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(H=n,o)|0}else{if(!m){r=(JF(l|0)|0)-(JF(i|0)|0)|0;if(r>>>0<=31){q=r+1|0;p=31-r|0;x=r-31>>31;s=q;t=g>>>(q>>>0)&x|i<<p;u=i>>>(q>>>0)&x;v=0;w=g<<p;break}if((f|0)==0){n=0;o=0;return(H=n,o)|0}c[f>>2]=a|0;c[f+4>>2]=h|b&0;n=0;o=0;return(H=n,o)|0}p=j-1|0;if((p&j|0)!=0){x=(JF(j|0)|0)+33-(JF(i|0)|0)|0;q=64-x|0;r=32-x|0;y=r>>31;z=x-32|0;A=z>>31;s=x;t=r-1>>31&i>>>(z>>>0)|(i<<r|g>>>(x>>>0))&A;u=A&i>>>(x>>>0);v=g<<q&y;w=(i<<q|g>>>(z>>>0))&y|g<<r&x-33>>31;break}if((f|0)!=0){c[f>>2]=p&g;c[f+4>>2]=0}if((j|0)==1){n=h|b&0;o=a|0|0;return(H=n,o)|0}else{p=KF(j|0)|0;n=i>>>(p>>>0)|0;o=i<<32-p|g>>>(p>>>0)|0;return(H=n,o)|0}}}while(0);if((s|0)==0){B=w;C=v;D=u;E=t;F=0;G=0}else{g=d|0|0;d=k|e&0;e=EF(g,d,-1,-1)|0;k=H;i=w;w=v;v=u;u=t;t=s;s=0;while(1){I=w>>>31|i<<1;J=s|w<<1;j=u<<1|i>>>31|0;a=u>>>31|v<<1|0;FF(e,k,j,a)|0;b=H;h=b>>31|((b|0)<0?-1:0)<<1;K=h&1;L=FF(j,a,h&g,(((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1)&d)|0;M=H;b=t-1|0;if((b|0)==0){break}else{i=I;w=J;v=M;u=L;t=b;s=K}}B=I;C=J;D=M;E=L;F=0;G=K}K=C;C=0;if((f|0)!=0){c[f>>2]=E;c[f+4>>2]=D}n=(K|0)>>>31|(B|C)<<1|(C<<1|K>>>31)&0|F;o=(K<<1|0>>>31)&-2|G;return(H=n,o)|0}function SF(a){a=+a;return+T(+a)}function TF(a,b){a=a|0;b=b|0;rc(a|0,b|0)}function UF(a){a=a|0;return tb(a|0)|0}function VF(a,b,c){a=a|0;b=b|0;c=c|0;return nb(a|0,b|0,c|0)|0}function WF(a,b,c){a=a|0;b=b|0;c=c|0;return gc(a|0,b|0,c|0)|0}function XF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ma(a|0,b|0,c|0,d|0)|0}function YF(a,b){a=a|0;b=b|0;return Ka(a|0,b|0)|0}function ZF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Jb(a|0,b|0,c|0,d|0)}function _F(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Bc[a&63](b|0,c|0,d|0,e|0,f|0)}function $F(a,b){a=a|0;b=b|0;Cc[a&255](b|0)}function aG(a,b,c){a=a|0;b=b|0;c=c|0;Dc[a&63](b|0,c|0)}function bG(a,b){a=a|0;b=b|0;return Ec[a&63](b|0)|0}function cG(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=+e;return Fc[a&7](b|0,c|0,+d,+e)|0}function dG(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return Gc[a&127](b|0,c|0,d|0,e|0,f|0)|0}function eG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Hc[a&63](b|0,c|0,d|0)|0}function fG(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Ic[a&15](b|0,c|0,d|0,e|0,f|0,g|0)}function gG(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=+i;return Jc[a&3](b|0,c|0,d|0,e|0,+f,+g,+h,+i)|0}function hG(a,b){a=a|0;b=b|0;return+Kc[a&3](b|0)}function iG(a,b){a=a|0;b=+b;return+Lc[a&3](+b)}function jG(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;return+Mc[a&15](+b,+c,+d)}function kG(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Nc[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function lG(a,b,c){a=a|0;b=b|0;c=c|0;return Oc[a&255](b|0,c|0)|0}function mG(a){a=a|0;return+Pc[a&3]()}function nG(a){a=a|0;return Qc[a&3]()|0}function oG(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=g|0;Rc[a&31](b|0,c|0,d|0,+e,+f,g|0)}function pG(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Sc[a&127](b|0,c|0,d|0,e|0)|0}function qG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Tc[a&127](b|0,c|0,d|0)}function rG(a){a=a|0;Uc[a&3]()}function sG(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Vc[a&63](b|0,c|0,d|0,e|0)}function tG(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ea(0)}function uG(a){a=a|0;ea(1)}function vG(a,b){a=a|0;b=b|0;ea(2)}function wG(a){a=a|0;ea(3);return 0}function xG(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;ea(4);return 0}function yG(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ea(5);return 0}function zG(a,b,c){a=a|0;b=b|0;c=c|0;ea(6);return 0}function AG(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ea(7)}function BG(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=+h;ea(8);return 0}function CG(a){a=a|0;ea(9);return 0.0}function DG(a){a=+a;ea(10);return 0.0}function EG(a,b,c){a=+a;b=+b;c=+c;ea(11);return 0.0}function FG(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;ea(12)}function GG(a,b){a=a|0;b=b|0;ea(13);return 0}function HG(){ea(14);return 0.0}function IG(){ea(15);return 0}function JG(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=+e;f=f|0;ea(16)}function KG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ea(17);return 0}function LG(a,b,c){a=a|0;b=b|0;c=c|0;ea(18)}function MG(){ea(19)}function NG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ea(20)}
+
+
+
+
+// EMSCRIPTEN_END_FUNCS
+var Bc=[tG,tG,Mf,tG,sf,tG,JC,tG,oo,tG,xg,tG,tg,tG,cD,tG,Xe,tG,Ye,tG,eg,tG,tf,tG,ug,tG,gv,tG,XC,tG,QD,tG,fg,tG,rD,tG,Nf,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG,tG];var Cc=[uG,uG,NC,uG,sl,uG,hC,uG,eD,uG,iC,uG,kD,uG,WC,uG,TC,uG,Cl,uG,gC,uG,xC,uG,to,uG,HC,uG,dv,uG,tC,uG,Ll,uG,lD,uG,mD,uG,fC,uG,$D,uG,Xu,uG,Xk,uG,Lq,uG,ND,uG,aE,uG,Pu,uG,ZD,uG,rl,uG,iD,uG,FD,uG,PD,uG,nD,uG,pD,uG,SB,uG,jD,uG,wC,uG,uC,uG,_k,uG,xt,uG,ql,uG,SC,uG,sC,uG,Ot,uG,jC,uG,kz,uG,Ty,uG,vC,uG,sE,uG,IC,uG,Ou,uG,UC,uG,CD,uG,po,uG,QC,uG,VC,uG,MC,uG,Ww,uG,OD,uG,PC,uG,Bm,uG,RD,uG,LC,uG,DD,uG,rE,uG,Qh,uG,ez,uG,_D,uG,ED,uG,sk,uG,qD,uG,Uy,uG,st,uG,wo,uG,pA,uG,eF,uG,$k,uG,Mq,uG,nE,uG,$u,uG,fD,uG,uA,uG,yC,uG,RC,uG,NB,uG,gD,uG,rk,uG,oD,uG,iz,uG,sD,uG,Wu,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG];var Dc=[vG,vG,Kl,vG,Ug,vG,Bl,vG,zi,vG,pk,vG,rx,vG,wA,vG,qn,vG,Cm,vG,gE,vG,sA,vG,Hv,vG,hv,vG,bD,vG,AC,vG,Pl,vG,tk,vG,LD,vG,Ul,vG,TF,vG,XD,vG,FC,vG,Al,vG,Gl,vG,yD,vG,vG,vG,vG,vG,vG,vG,vG,vG,vG,vG,vG,vG];var Ec=[wG,wG,UF,wG,mA,wG,dF,wG,TB,wG,Am,wG,jk,wG,ox,wG,lA,wG,ux,wG,Lw,wG,jA,wG,xF,wG,nA,wG,St,wG,Dm,wG,oA,wG,aA,wG,uk,wG,Kw,wG,kA,wG,Tt,wG,iA,wG,Eo,wG,lx,wG,hA,wG,Ro,wG,kk,wG,$w,wG,wG,wG,wG,wG,wG,wG];var Fc=[xG,xG,Yt,xG,Zt,xG,xG,xG];var Gc=[yG,yG,de,yG,Js,yG,me,yG,ke,yG,ne,yG,oe,yG,pe,yG,$d,yG,Ne,yG,je,yG,Fl,yG,Pe,yG,Oe,yG,Ie,yG,Ke,yG,he,yG,He,yG,Me,yG,Je,yG,Le,yG,Qe,yG,qe,yG,ve,yG,we,yG,xe,yG,se,yG,re,yG,ue,yG,te,yG,Zd,yG,_d,yG,Ge,yG,Ae,yG,Be,yG,De,yG,Fe,yG,Ee,yG,ye,yG,ie,yG,Ce,yG,ze,yG,ge,yG,Ol,yG,ce,yG,ae,yG,Sw,yG,le,yG,be,yG,fe,yG,ee,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG,yG];var Hc=[zG,zG,_g,zG,Mt,zG,VF,zG,pz,zG,jx,zG,Py,zG,Zq,zG,Fv,zG,nx,zG,jf,zG,Tw,zG,pf,zG,Xf,zG,Cn,zG,WF,zG,bz,zG,qk,zG,Tg,zG,ry,zG,Pk,zG,Xj,zG,um,zG,eh,zG,Vw,zG,Jf,zG,Df,zG,bg,zG,Sq,zG,Kt,zG,Dt,zG,gh,zG];var Ic=[AG,AG,$C,AG,DC,AG,nC,AG,JD,AG,eE,AG,wD,AG,VD,AG];var Jc=[BG,BG,OB,BG];var Kc=[CG,CG,Gm,CG];var Lc=[DG,DG,SF,DG];var Mc=[EG,EG,ii,EG,hi,EG,fi,EG,gi,EG,EG,EG,EG,EG,EG,EG];var Nc=[FG,FG];var Oc=[GG,GG,Pv,GG,Dp,GG,Ii,GG,Rv,GG,Pi,GG,jg,GG,kg,GG,jz,GG,Di,GG,Ue,GG,yB,GG,Dv,GG,zo,GG,Fi,GG,_z,GG,Zi,GG,Is,GG,Vi,GG,_i,GG,Li,GG,_f,GG,Bh,GG,Hi,GG,xm,GG,Lt,GG,Tl,GG,Xi,GG,Ep,GG,$i,GG,Kr,GG,Ff,GG,cj,GG,Ei,GG,Gi,GG,lg,GG,mg,GG,ng,GG,Ni,GG,Ui,GG,Vu,GG,El,GG,ig,GG,Fg,GG,vx,GG,Nl,GG,ej,GG,Gf,GG,of,GG,Lr,GG,YF,GG,Qi,GG,Tn,GG,Gg,GG,kx,GG,Ki,GG,ag,GG,Jl,GG,Wi,GG,px,GG,gn,GG,Qv,GG,zp,GG,lf,GG,aj,GG,Si,GG,Hg,GG,Ri,GG,bj,GG,tr,GG,Er,GG,Gr,GG,Mi,GG,mf,GG,XE,GG,Rw,GG,Qo,GG,If,GG,Zf,GG,fj,GG,Cv,GG,Ir,GG,Yi,GG,Un,GG,QB,GG,Ve,GG,zF,GG,dj,GG,We,GG,Mr,GG,zv,GG,RB,GG,Vl,GG,hg,GG,gg,GG,Ti,GG,Ji,GG,Co,GG,Oi,GG,mh,GG,LB,GG,gF,GG,Hr,GG,mk,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG,GG];var Pc=[HG,HG,zm,HG];var Qc=[IG,IG,sr,IG];var Rc=[JG,JG,uh,JG,wh,JG,vh,JG,xh,JG,rh,JG,yh,JG,sh,JG,th,JG,JG,JG,JG,JG,JG,JG,JG,JG,JG,JG,JG,JG,JG,JG];var Sc=[KG,KG,Fd,KG,Yf,KG,Od,KG,Uq,KG,Hf,KG,Rk,KG,En,KG,rf,KG,zf,KG,Lf,KG,Aw,KG,kf,KG,Dx,KG,qx,KG,ef,KG,nf,KG,Af,KG,Uf,KG,Sf,KG,Xg,KG,XF,KG,ix,KG,$e,KG,Lz,KG,Ft,KG,Em,KG,zw,KG,Wv,KG,df,KG,Wx,KG,hx,KG,af,KG,Bf,KG,hf,KG,Wf,KG,wm,KG,dg,KG,ff,KG,cz,KG,Qw,KG,Jd,KG,vd,KG,Sd,KG,gf,KG,Ld,KG,Vd,KG,Ef,KG,Tf,KG,Ex,KG,Vf,KG,Ud,KG,Cf,KG,$f,KG,Pr,KG,$q,KG,Zj,KG,wy,KG,yf,KG,KG,KG,KG,KG,KG,KG,KG,KG,KG,KG];var Tc=[LG,LG,xy,LG,Yj,LG,vm,LG,TD,LG,Bx,LG,qA,LG,ZC,LG,KD,LG,Ux,LG,Fx,LG,nj,LG,el,LG,Yx,LG,EC,LG,qj,LG,Et,LG,bE,LG,vw,LG,kC,LG,zC,LG,SD,LG,jq,LG,Tv,LG,WD,LG,aD,LG,Tq,LG,lC,LG,YC,LG,UB,LG,HD,LG,uD,LG,kw,LG,xD,LG,fE,LG,Ai,LG,oC,LG,Sk,LG,lw,LG,oj,LG,kq,LG,zn,LG,Xw,LG,tA,LG,vA,LG,mj,LG,$x,LG,pj,LG,cE,LG,yi,LG,dz,LG,iq,LG,ni,LG,tD,LG,Qk,LG,xA,LG,HB,LG,Dn,LG,rA,LG,_q,LG,BC,LG,Uw,LG,GD,LG,LG,LG];var Uc=[MG,MG,ym,MG];var Vc=[NG,NG,_C,NG,pE,NG,mE,NG,Ml,NG,oE,NG,kE,NG,bf,NG,iE,NG,jE,NG,qE,NG,CC,NG,dE,NG,qf,NG,cg,NG,lE,NG,hD,NG,Dl,NG,mC,NG,ID,NG,ZF,NG,dC,NG,vD,NG,UD,NG,Kf,NG,OC,NG,NG,NG,NG,NG,NG,NG,NG,NG,NG,NG,NG,NG];return{_vizRenderFromString:ld,_strlen:xF,_strcat:AF,_free:eF,_memcmp:wF,_strncpy:DF,_memmove:uF,_tolower:yF,_saveSetjmp:BF,_memset:vF,_malloc:dF,_memcpy:tF,_realloc:gF,_strcpy:zF,_calloc:fF,_testSetjmp:CF,runPostSets:kd,stackAlloc:Wc,stackSave:Xc,stackRestore:Yc,setThrew:Zc,setTempRet0:ad,setTempRet1:bd,setTempRet2:cd,setTempRet3:dd,setTempRet4:ed,setTempRet5:fd,setTempRet6:gd,setTempRet7:hd,setTempRet8:id,setTempRet9:jd,dynCall_viiiii:_F,dynCall_vi:$F,dynCall_vii:aG,dynCall_ii:bG,dynCall_iiiff:cG,dynCall_iiiiii:dG,dynCall_iiii:eG,dynCall_viiiiii:fG,dynCall_iiiiidddd:gG,dynCall_di:hG,dynCall_dd:iG,dynCall_dddd:jG,dynCall_viiiiiiiii:kG,dynCall_iii:lG,dynCall_d:mG,dynCall_i:nG,dynCall_viiiddi:oG,dynCall_iiiii:pG,dynCall_viii:qG,dynCall_v:rG,dynCall_viiii:sG}
+// EMSCRIPTEN_END_ASM
+
+})({Math:Math,
+Int8Array:Int8Array,Int16Array:Int16Array,Int32Array:Int32Array,Uint8Array:Uint8Array,Uint16Array:Uint16Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array},{abort:aa,assert:J,asmPrintInt:function(a,b){e.print("int "+a+","+b)},asmPrintFloat:function(a,b){e.print("float "+a+","+b)},min:va,invoke_viiiii:function(a,b,c,d,g,i){try{e.dynCall_viiiii(a,b,c,d,g,i)}catch(h){"number"!==typeof h&&"longjmp"!==h&&k(h),u.setThrew(1,0)}},invoke_vi:function(a,b){try{e.dynCall_vi(a,b)}catch(c){"number"!==
+typeof c&&"longjmp"!==c&&k(c),u.setThrew(1,0)}},invoke_vii:function(a,b,c){try{e.dynCall_vii(a,b,c)}catch(d){"number"!==typeof d&&"longjmp"!==d&&k(d),u.setThrew(1,0)}},invoke_ii:function(a,b){try{return e.dynCall_ii(a,b)}catch(c){"number"!==typeof c&&"longjmp"!==c&&k(c),u.setThrew(1,0)}},invoke_iiiff:function(a,b,c,d,g){try{return e.dynCall_iiiff(a,b,c,d,g)}catch(i){"number"!==typeof i&&"longjmp"!==i&&k(i),u.setThrew(1,0)}},invoke_iiiiii:function(a,b,c,d,g,i){try{return e.dynCall_iiiiii(a,b,c,d,g,
+i)}catch(h){"number"!==typeof h&&"longjmp"!==h&&k(h),u.setThrew(1,0)}},invoke_iiii:function(a,b,c,d){try{return e.dynCall_iiii(a,b,c,d)}catch(g){"number"!==typeof g&&"longjmp"!==g&&k(g),u.setThrew(1,0)}},invoke_viiiiii:function(a,b,c,d,g,i,h){try{e.dynCall_viiiiii(a,b,c,d,g,i,h)}catch(j){"number"!==typeof j&&"longjmp"!==j&&k(j),u.setThrew(1,0)}},invoke_iiiiidddd:function(a,b,c,d,g,i,h,j,l){try{return e.dynCall_iiiiidddd(a,b,c,d,g,i,h,j,l)}catch(n){"number"!==typeof n&&"longjmp"!==n&&k(n),u.setThrew(1,
+0)}},invoke_di:function(a,b){try{return e.dynCall_di(a,b)}catch(c){"number"!==typeof c&&"longjmp"!==c&&k(c),u.setThrew(1,0)}},invoke_dd:function(a,b){try{return e.dynCall_dd(a,b)}catch(c){"number"!==typeof c&&"longjmp"!==c&&k(c),u.setThrew(1,0)}},invoke_dddd:function(a,b,c,d){try{return e.dynCall_dddd(a,b,c,d)}catch(g){"number"!==typeof g&&"longjmp"!==g&&k(g),u.setThrew(1,0)}},invoke_viiiiiiiii:function(a,b,c,d,g,i,h,j,l,n){try{e.dynCall_viiiiiiiii(a,b,c,d,g,i,h,j,l,n)}catch(m){"number"!==typeof m&&
+"longjmp"!==m&&k(m),u.setThrew(1,0)}},invoke_iii:function(a,b,c){try{return e.dynCall_iii(a,b,c)}catch(d){"number"!==typeof d&&"longjmp"!==d&&k(d),u.setThrew(1,0)}},invoke_d:function(a){try{return e.dynCall_d(a)}catch(b){"number"!==typeof b&&"longjmp"!==b&&k(b),u.setThrew(1,0)}},invoke_i:function(a){try{return e.dynCall_i(a)}catch(b){"number"!==typeof b&&"longjmp"!==b&&k(b),u.setThrew(1,0)}},invoke_viiiddi:function(a,b,c,d,g,i,h){try{e.dynCall_viiiddi(a,b,c,d,g,i,h)}catch(j){"number"!==typeof j&&
+"longjmp"!==j&&k(j),u.setThrew(1,0)}},invoke_iiiii:function(a,b,c,d,g){try{return e.dynCall_iiiii(a,b,c,d,g)}catch(i){"number"!==typeof i&&"longjmp"!==i&&k(i),u.setThrew(1,0)}},invoke_viii:function(a,b,c,d){try{e.dynCall_viii(a,b,c,d)}catch(g){"number"!==typeof g&&"longjmp"!==g&&k(g),u.setThrew(1,0)}},invoke_v:function(a){try{e.dynCall_v(a)}catch(b){"number"!==typeof b&&"longjmp"!==b&&k(b),u.setThrew(1,0)}},invoke_viiii:function(a,b,c,d,g){try{e.dynCall_viiii(a,b,c,d,g)}catch(i){"number"!==typeof i&&
+"longjmp"!==i&&k(i),u.setThrew(1,0)}},_llvm_lifetime_end:M(),_lseek:Pb,__scanString:Q,_fclose:function(a){Mb(a);return Lb(a)},_fflush:M(),_strtol:Ab,_fputc:ra,_strtok:function(a,b){return Fb(a,b,dc)},_fwrite:Db,_send:function(a,b,c){return!K.ae(a)?(H(g.H),-1):Ba(a,b,c)},_fputs:Qb,_tmpnam:Fa,_isspace:yb,_read:fb,_ceil:Hc,_fileno:function(a){return a},_strstr:function(a,b){var c=0,d;do{c||(d=a,c=b);var e=v[a++|0],g=v[c++|0];if(0==g)return d;g!=e&&(a=d+1,c=0)}while(e);return 0},_fsync:Mb,_isblank:function(a){return 32==
+a||9==a},_fmod:function(a,b){return a%b},_strcmp:function(a,b){return xb(a,b,ha)},_strncmp:xb,_tmpfile:Ra,_snprintf:hb,_fgetc:Ea,__getFloat:Bb,_hypot:function(a,b){return Math.sqrt(a*a+b*b)},_fgets:function(a,b,c){var e=d.D(c);if(!e||e.error||e.Ua)return 0;for(var g,i=0;i<b-1&&10!=g;i++){g=Ea(c);if(-1==g){if(e.error||e.Ua&&0==i)return 0;if(e.Ua)break}v[a+i|0]=g}v[a+i|0]=0;return a},_close:Lb,_getgid:function(){return 0},_strchr:function(a,b){a--;do{a++;var c=v[a];if(c==b)return a}while(c);return 0},
+_asin:Ic,_puts:function(a){var b=t[ma>>2],a=Qb(a,b);return 0>a?a:0>ra(10,b)?-1:a+1},___setErrNo:H,_access:function(a,b){a=R(a);if(b&-8)return H(g.B),-1;var c;try{c=d.F(a,{T:q}).k}catch(e){return d.sa(e),-1}var l="";b&4&&(l+="r");b&2&&(l+="w");b&1&&(l+="x");return l&&d.Da(c,l)?(H(g.mc),-1):0},_ftell:function(a){a=d.D(a);return!a?(H(g.H),-1):d.vb(a.k.mode)?(H(g.nb),-1):a.position},_exit:function(a){Gb(a)},_sprintf:Cb,_strrchr:function(a,b){var c=a+Aa(a);do{if(v[c]==b)return c;c--}while(c>=a);return 0},
+_copysign:function(a,b){return Pa(a)===Pa(b)?a:-a},_recv:function(a,b,c){return!K.ae(a)?(H(g.H),-1):fb(a,b,c)},_cos:uc,_putchar:function(a){return ra(a,t[ma>>2])},_isalnum:function(a){return 48<=a&&57>=a||97<=a&&122>=a||65<=a&&90>=a},_times:function(a){0!==a&&cc(a,0,16);return 0},_bsearch:function(a,b,c,d,g){for(var i=0,h,j,l;i<c;)if(h=i+c>>>1,l=b+h*d,j=e.dynCall_iii(g,a,l),0>j)c=h;else if(0<j)i=h+1;else return l;return 0},__exit:Gb,_isupper:function(a){return 65<=a&&90>=a},_rand:function(){return Math.floor(2147483648*
+Math.random())},_fabsf:Jc,_setlocale:Qa,_bcopy:function(a,b,c){bc(b,a,c)},_toupper:function(a){return 97<=a&&122>=a?a-97+65:a},_pread:function(a,b,c,e){a=d.D(a);if(!a)return H(g.H),-1;try{return d.P(a,v,b,c,e)}catch(l){return d.sa(l),-1}},_fopen:Kb,_open:Jb,_sqrtf:Kc,_sysconf:function(a){switch(a){case 30:return 4096;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 79:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;
+case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;
+case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return 1}H(g.B);return-1},_putenv:function(a){if(0===a)return H(g.B),-1;var a=R(a),
+b=a.indexOf("=");if(""===a||-1===a.indexOf("="))return H(g.B),-1;var c=a.slice(0,b),a=a.slice(b+1);if(!(c in U)||U[c]!==a)U[c]=a,Ca(U);return 0},_qsort:function(a,b,c,d){if(!(0==b||0==c)){for(var g=[],i=0;i<b;i++)g.push(i);g.sort(function(b,g){return e.dynCall_iii(d,a+b*c,a+g*c)});var h=ia(b*c);Za(h,a,b*c);for(i=0;i<b;i++)g[i]!=i&&Za(a+i*c,h+g[i]*c,c);Ib(h)}},_isalpha:function(a){return 97<=a&&122>=a||65<=a&&90>=a},_strdup:function(a){var b=Aa(a),c=ia(b+1);Za(c,a,b)|0;v[c+b|0]=0;return c},_log10:function(a){return Math.log(a)/
+Math.LN10},_fread:Nb,_isatty:function(a){a=d.D(a);return!a?(H(g.H),0):!a.aa?(H(g.vd),0):1},__formatString:gb,_getenv:Da,_atoi:function(a){return Ab(a,r,10)},_vfprintf:function(a,b,c){return Eb(a,b,t[c>>2])},_llvm_pow_f64:Lc,_sbrk:Rb,___errno_location:function(){return Na},_strerror:ya,_fstat:function(a,b){var c=d.D(a);return!c?(H(g.H),-1):Ob(c.path,b)},_llvm_lifetime_start:M(),__parseInt:zb,_vsprintf:function(a,b,c){return Cb(a,b,t[c>>2])},_vsnprintf:function(a,b,c,d){return hb(a,b,c,t[d>>2])},_sscanf:function(a,
+b,c){var d=0;return Q(b,function(){return v[a+d++|0]},function(){d--},c)},_feof:function(a){a=d.D(a);return Number(a&&a.Ua)},___assert_fail:function(a,b,c,d){ba=q;k("Assertion failed: "+R(a)+", at: "+[b?R(b):"unknown filename",c,d?R(d):"unknown function"]+" at "+bb())},_srand:M(),_strtok_r:Fb,_abort:function(){e.abort()},_fprintf:Eb,_tan:wc,___buildEnvironment:Ca,_fabs:Dc,_floor:zc,__reallyNegative:Pa,_fseek:function(a,b,c){if(-1==Pb(a,b,c))return-1;a=d.D(a);a.Ua=G;return 0},_sqrt:sc,_write:Ba,_sin:vc,
+_stat:Ob,_longjmp:function(a,b){u.setThrew(a,b||1);k("longjmp")},_strpbrk:function(a,b){for(var c,d={};;){c=v[b++|0];if(!c)break;d[c]=1}for(;;){c=v[a];if(!c)break;if(c in d)return a;a++}return 0},_llvm_va_end:M(),_acos:Cc,_pwrite:function(a,b,c,e){a=d.D(a);if(!a)return H(g.H),-1;try{return d.write(a,v,b,c,e)}catch(l){return d.sa(l),-1}},_strerror_r:wb,_atan2:yc,_exp:xc,_time:function(a){var b=Math.floor(Date.now()/1E3);a&&(t[a>>2]=b);return b},STACKTOP:X,STACK_MAX:nb,tempDoublePtr:sa,ABORT:ba,cttz_i8:Nc,
+ctlz_i8:Mc,NaN:NaN,Infinity:Infinity,_stderr:Ha,_stdout:ma,_stdin:Ga,___fsmu8:p},$);e._vizRenderFromString=u._vizRenderFromString;var Aa=e._strlen=u._strlen,Bc=e._strcat=u._strcat,Ib=e._free=u._free,rc=e._memcmp=u._memcmp,Gc=e._strncpy=u._strncpy,bc=e._memmove=u._memmove,tc=e._tolower=u._tolower,Ec=e._saveSetjmp=u._saveSetjmp,cc=e._memset=u._memset,ia=e._malloc=u._malloc,Za=e._memcpy=u._memcpy;e._realloc=u._realloc;var Ac=e._strcpy=u._strcpy;e._calloc=u._calloc;var Fc=e._testSetjmp=u._testSetjmp,
+qc=e.runPostSets=u.runPostSets;e.dynCall_viiiii=u.dynCall_viiiii;e.dynCall_vi=u.dynCall_vi;e.dynCall_vii=u.dynCall_vii;e.dynCall_ii=u.dynCall_ii;e.dynCall_iiiff=u.dynCall_iiiff;e.dynCall_iiiiii=u.dynCall_iiiiii;e.dynCall_iiii=u.dynCall_iiii;e.dynCall_viiiiii=u.dynCall_viiiiii;e.dynCall_iiiiidddd=u.dynCall_iiiiidddd;e.dynCall_di=u.dynCall_di;e.dynCall_dd=u.dynCall_dd;e.dynCall_dddd=u.dynCall_dddd;e.dynCall_viiiiiiiii=u.dynCall_viiiiiiiii;e.dynCall_iii=u.dynCall_iii;e.dynCall_d=u.dynCall_d;e.dynCall_i=
+u.dynCall_i;e.dynCall_viiiddi=u.dynCall_viiiddi;e.dynCall_iiiii=u.dynCall_iiiii;e.dynCall_viii=u.dynCall_viii;e.dynCall_v=u.dynCall_v;e.dynCall_viiii=u.dynCall_viiii;l.hd=function(a){return u.stackAlloc(a)};l.kd=function(){return u.stackSave()};l.jd=function(a){u.stackRestore(a)};var za=function(){function a(a,b){this.C=a|0;this.K=b|0}function b(a,b){a!=r&&("number"==typeof a?this.ea(a):b==r&&"string"!=typeof a?this.Q(a,256):this.Q(a,b))}function c(){return new b(r)}function d(a,b){var c=l[a.charCodeAt(b)];
+return c==r?-1:c}function e(a){var b=c();b.za(a);return b}function g(a){var b=1,c;if(0!=(c=a>>>16))a=c,b+=16;if(0!=(c=a>>8))a=c,b+=8;if(0!=(c=a>>4))a=c,b+=4;if(0!=(c=a>>2))a=c,b+=2;0!=a>>1&&(b+=1);return b}function h(a){this.R=a}function j(a){this.R=a;this.ke=a.Cf();this.le=this.ke&32767;this.Tf=this.ke>>15;this.pg=(1<<a.A-15)-1;this.Uf=2*a.g}a.zd={};a.za=function(b){if(-128<=b&&128>b){var c=a.zd[b];if(c)return c}c=new a(b|0,0>b?-1:0);-128<=b&&128>b&&(a.zd[b]=c);return c};a.ea=function(b){return isNaN(b)||
+!isFinite(b)?a.ZERO:b<=-a.Cd?a.MIN_VALUE:b+1>=a.Cd?a.MAX_VALUE:0>b?a.ea(-b).G():new a(b%a.va|0,b/a.va|0)};a.ra=function(b,c){return new a(b,c)};a.Q=function(b,c){0==b.length&&k(Error("number format error: empty string"));var d=c||10;(2>d||36<d)&&k(Error("radix out of range: "+d));if("-"==b.charAt(0))return a.Q(b.substring(1),d).G();0<=b.indexOf("-")&&k(Error('number format error: interior "-" character: '+b));for(var e=a.ea(Math.pow(d,8)),f=a.ZERO,g=0;g<b.length;g+=8){var i=Math.min(8,b.length-g),
+h=parseInt(b.substring(g,g+i),d);8>i?(i=a.ea(Math.pow(d,i)),f=f.multiply(i).add(a.ea(h))):(f=f.multiply(e),f=f.add(a.ea(h)))}return f};a.rc=65536;a.gi=16777216;a.va=a.rc*a.rc;a.hi=a.va/2;a.ii=a.va*a.rc;a.Te=a.va*a.va;a.Cd=a.Te/2;a.ZERO=a.za(0);a.ONE=a.za(1);a.Ad=a.za(-1);a.MAX_VALUE=a.ra(-1,2147483647);a.MIN_VALUE=a.ra(0,-2147483648);a.Bd=a.za(16777216);a.prototype.kc=function(){return this.K*a.va+this.uf()};a.prototype.toString=function(b){b=b||10;(2>b||36<b)&&k(Error("radix out of range: "+b));
+if(this.Ma())return"0";if(this.U()){if(this.ca(a.MIN_VALUE)){var c=a.ea(b),d=this.Ja(c),c=d.multiply(c).Eb(this);return d.toString(b)+c.C.toString(b)}return"-"+this.G().toString(b)}for(var d=a.ea(Math.pow(b,6)),c=this,e="";;){var f=c.Ja(d),g=c.Eb(f.multiply(d)).C.toString(b),c=f;if(c.Ma())return g+e;for(;6>g.length;)g="0"+g;e=""+g+e}};a.prototype.uf=function(){return 0<=this.C?this.C:a.va+this.C};a.prototype.Ma=function(){return 0==this.K&&0==this.C};a.prototype.U=function(){return 0>this.K};a.prototype.ge=
+function(){return 1==(this.C&1)};a.prototype.ca=function(a){return this.K==a.K&&this.C==a.C};a.prototype.ie=function(a){return 0>this.yc(a)};a.prototype.yf=function(a){return 0<this.yc(a)};a.prototype.zf=function(a){return 0<=this.yc(a)};a.prototype.yc=function(a){if(this.ca(a))return 0;var b=this.U(),c=a.U();return b&&!c?-1:!b&&c?1:this.Eb(a).U()?-1:1};a.prototype.G=function(){return this.ca(a.MIN_VALUE)?a.MIN_VALUE:this.Xf().add(a.ONE)};a.prototype.add=function(b){var c=this.K>>>16,d=this.K&65535,
+e=this.C>>>16,f=b.K>>>16,g=b.K&65535,i=b.C>>>16,h;h=0+((this.C&65535)+(b.C&65535));b=0+(h>>>16);b+=e+i;e=0+(b>>>16);e+=d+g;d=0+(e>>>16);d=d+(c+f)&65535;return a.ra((b&65535)<<16|h&65535,d<<16|e&65535)};a.prototype.Eb=function(a){return this.add(a.G())};a.prototype.multiply=function(b){if(this.Ma()||b.Ma())return a.ZERO;if(this.ca(a.MIN_VALUE))return b.ge()?a.MIN_VALUE:a.ZERO;if(b.ca(a.MIN_VALUE))return this.ge()?a.MIN_VALUE:a.ZERO;if(this.U())return b.U()?this.G().multiply(b.G()):this.G().multiply(b).G();
+if(b.U())return this.multiply(b.G()).G();if(this.ie(a.Bd)&&b.ie(a.Bd))return a.ea(this.kc()*b.kc());var c=this.K>>>16,d=this.K&65535,e=this.C>>>16,f=this.C&65535,g=b.K>>>16,i=b.K&65535,h=b.C>>>16,b=b.C&65535,j,l,m,n;n=0+f*b;m=0+(n>>>16);m+=e*b;l=0+(m>>>16);m=(m&65535)+f*h;l+=m>>>16;m&=65535;l+=d*b;j=0+(l>>>16);l=(l&65535)+e*h;j+=l>>>16;l&=65535;l+=f*i;j+=l>>>16;l&=65535;j=j+(c*b+d*h+e*i+f*g)&65535;return a.ra(m<<16|n&65535,j<<16|l)};a.prototype.Ja=function(b){b.Ma()&&k(Error("division by zero"));
+if(this.Ma())return a.ZERO;if(this.ca(a.MIN_VALUE)){if(b.ca(a.ONE)||b.ca(a.Ad))return a.MIN_VALUE;if(b.ca(a.MIN_VALUE))return a.ONE;var c=this.ng().Ja(b).shiftLeft(1);if(c.ca(a.ZERO))return b.U()?a.ONE:a.Ad;var d=this.Eb(b.multiply(c));return c.add(d.Ja(b))}if(b.ca(a.MIN_VALUE))return a.ZERO;if(this.U())return b.U()?this.G().Ja(b.G()):this.G().Ja(b).G();if(b.U())return this.Ja(b.G()).G();for(var e=a.ZERO,d=this;d.zf(b);){for(var c=Math.max(1,Math.floor(d.kc()/b.kc())),f=Math.ceil(Math.log(c)/Math.LN2),
+f=48>=f?1:Math.pow(2,f-48),g=a.ea(c),i=g.multiply(b);i.U()||i.yf(d);)c-=f,g=a.ea(c),i=g.multiply(b);g.Ma()&&(g=a.ONE);e=e.add(g);d=d.Eb(i)}return e};a.prototype.Xf=function(){return a.ra(~this.C,~this.K)};a.prototype.shiftLeft=function(b){b&=63;if(0==b)return this;var c=this.C;return 32>b?a.ra(c<<b,this.K<<b|c>>>32-b):a.ra(0,c<<b-32)};a.prototype.ng=function(){var b;b=1;if(0==b)return this;var c=this.K;return 32>b?a.ra(this.C>>>b|c<<32-b,c>>b):a.ra(c>>b-32,0<=c?0:-1)};b.prototype.Ga=function(a,b,
+c,d,e,f){for(;0<=--f;){var g=b*this[a++]+c[d]+e,e=Math.floor(g/67108864);c[d++]=g&67108863}return e};b.prototype.A=26;b.prototype.ha=67108863;b.prototype.X=67108864;b.prototype.Qe=Math.pow(2,52);b.prototype.xd=26;b.prototype.yd=0;var l=[],n,m;n=48;for(m=0;9>=m;++m)l[n++]=m;n=97;for(m=10;36>m;++m)l[n++]=m;n=65;for(m=10;36>m;++m)l[n++]=m;h.prototype.Id=function(a){return 0>a.p||0<=a.ya(this.R)?a.Pf(this.R):a};h.prototype.ve=function(a){return a};h.prototype.reduce=function(a){a.tb(this.R,r,a)};h.prototype.me=
+function(a,b,c){a.Vc(b,c);this.reduce(c)};h.prototype.ye=function(a,b){a.ze(b);this.reduce(b)};j.prototype.Id=function(a){var d=c();a.abs().Tb(this.R.g,d);d.tb(this.R,r,d);0>a.p&&0<d.ya(b.ZERO)&&this.R.W(d,d);return d};j.prototype.ve=function(a){var b=c();a.copyTo(b);this.reduce(b);return b};j.prototype.reduce=function(a){for(;a.g<=this.Uf;)a[a.g++]=0;for(var b=0;b<this.R.g;++b){var c=a[b]&32767,d=c*this.le+((c*this.Tf+(a[b]>>15)*this.le&this.pg)<<15)&a.ha,c=b+this.R.g;for(a[c]+=this.R.Ga(0,d,a,b,
+0,this.R.g);a[c]>=a.X;)a[c]-=a.X,a[++c]++}a.ia();a.Qd(this.R.g,a);0<=a.ya(this.R)&&a.W(this.R,a)};j.prototype.me=function(a,b,c){a.Vc(b,c);this.reduce(c)};j.prototype.ye=function(a,b){a.ze(b);this.reduce(b)};b.prototype.copyTo=function(a){for(var b=this.g-1;0<=b;--b)a[b]=this[b];a.g=this.g;a.p=this.p};b.prototype.za=function(a){this.g=1;this.p=0>a?-1:0;0<a?this[0]=a:-1>a?this[0]=a+DV:this.g=0};b.prototype.Q=function(a,c){var e;if(16==c)e=4;else if(8==c)e=3;else if(256==c)e=8;else if(2==c)e=1;else if(32==
+c)e=5;else if(4==c)e=2;else{this.rf(a,c);return}this.p=this.g=0;for(var g=a.length,i=G,h=0;0<=--g;){var j=8==e?a[g]&255:d(a,g);0>j?"-"==a.charAt(g)&&(i=q):(i=G,0==h?this[this.g++]=j:h+e>this.A?(this[this.g-1]|=(j&(1<<this.A-h)-1)<<h,this[this.g++]=j>>this.A-h):this[this.g-1]|=j<<h,h+=e,h>=this.A&&(h-=this.A))}8==e&&0!=(a[0]&128)&&(this.p=-1,0<h&&(this[this.g-1]|=(1<<this.A-h)-1<<h));this.ia();i&&b.ZERO.W(this,this)};b.prototype.ia=function(){for(var a=this.p&this.ha;0<this.g&&this[this.g-1]==a;)--this.g};
+b.prototype.Tb=function(a,b){var c;for(c=this.g-1;0<=c;--c)b[c+a]=this[c];for(c=a-1;0<=c;--c)b[c]=0;b.g=this.g+a;b.p=this.p};b.prototype.Qd=function(a,b){for(var c=a;c<this.g;++c)b[c-a]=this[c];b.g=Math.max(this.g-a,0);b.p=this.p};b.prototype.he=function(a,b){var c=a%this.A,d=this.A-c,e=(1<<d)-1,f=Math.floor(a/this.A),g=this.p<<c&this.ha,i;for(i=this.g-1;0<=i;--i)b[i+f+1]=this[i]>>d|g,g=(this[i]&e)<<c;for(i=f-1;0<=i;--i)b[i]=0;b[f]=g;b.g=this.g+f+1;b.p=this.p;b.ia()};b.prototype.cg=function(a,b){b.p=
+this.p;var c=Math.floor(a/this.A);if(c>=this.g)b.g=0;else{var d=a%this.A,e=this.A-d,f=(1<<d)-1;b[0]=this[c]>>d;for(var g=c+1;g<this.g;++g)b[g-c-1]|=(this[g]&f)<<e,b[g-c]=this[g]>>d;0<d&&(b[this.g-c-1]|=(this.p&f)<<e);b.g=this.g-c;b.ia()}};b.prototype.W=function(a,b){for(var c=0,d=0,e=Math.min(a.g,this.g);c<e;)d+=this[c]-a[c],b[c++]=d&this.ha,d>>=this.A;if(a.g<this.g){for(d-=a.p;c<this.g;)d+=this[c],b[c++]=d&this.ha,d>>=this.A;d+=this.p}else{for(d+=this.p;c<a.g;)d-=a[c],b[c++]=d&this.ha,d>>=this.A;
+d-=a.p}b.p=0>d?-1:0;-1>d?b[c++]=this.X+d:0<d&&(b[c++]=d);b.g=c;b.ia()};b.prototype.Vc=function(a,c){var d=this.abs(),e=a.abs(),f=d.g;for(c.g=f+e.g;0<=--f;)c[f]=0;for(f=0;f<e.g;++f)c[f+d.g]=d.Ga(0,e[f],c,f,0,d.g);c.p=0;c.ia();this.p!=a.p&&b.ZERO.W(c,c)};b.prototype.ze=function(a){for(var b=this.abs(),c=a.g=2*b.g;0<=--c;)a[c]=0;for(c=0;c<b.g-1;++c){var d=b.Ga(c,b[c],a,2*c,0,1);if((a[c+b.g]+=b.Ga(c+1,2*b[c],a,2*c+1,d,b.g-c-1))>=b.X)a[c+b.g]-=b.X,a[c+b.g+1]=1}0<a.g&&(a[a.g-1]+=b.Ga(c,b[c],a,2*c,0,1));
+a.p=0;a.ia()};b.prototype.tb=function(a,d,e){var f=a.abs();if(!(0>=f.g)){var h=this.abs();if(h.g<f.g)d!=r&&d.za(0),e!=r&&this.copyTo(e);else{e==r&&(e=c());var j=c(),l=this.p,a=a.p,m=this.A-g(f[f.g-1]);0<m?(f.he(m,j),h.he(m,e)):(f.copyTo(j),h.copyTo(e));f=j.g;h=j[f-1];if(0!=h){var n=h*(1<<this.xd)+(1<f?j[f-2]>>this.yd:0),s=this.Qe/n,n=(1<<this.xd)/n,u=1<<this.yd,t=e.g,x=t-f,v=d==r?c():d;j.Tb(x,v);0<=e.ya(v)&&(e[e.g++]=1,e.W(v,e));b.ONE.Tb(f,v);for(v.W(j,j);j.g<f;)j[j.g++]=0;for(;0<=--x;){var z=e[--t]==
+h?this.ha:Math.floor(e[t]*s+(e[t-1]+u)*n);if((e[t]+=j.Ga(0,z,e,x,0,f))<z){j.Tb(x,v);for(e.W(v,e);e[t]<--z;)e.W(v,e)}}d!=r&&(e.Qd(f,d),l!=a&&b.ZERO.W(d,d));e.g=f;e.ia();0<m&&e.cg(m,e);0>l&&b.ZERO.W(e,e)}}}};b.prototype.Cf=function(){if(1>this.g)return 0;var a=this[0];if(0==(a&1))return 0;var b=a&3,b=b*(2-(a&15)*b)&15,b=b*(2-(a&255)*b)&255,b=b*(2-((a&65535)*b&65535))&65535,b=b*(2-a*b%this.X)%this.X;return 0<b?this.X-b:-b};b.prototype.exp=function(a,d){if(4294967295<a||1>a)return b.ONE;var e=c(),f=c(),
+h=d.Id(this),j=g(a)-1;for(h.copyTo(e);0<=--j;)if(d.ye(e,f),0<(a&1<<j))d.me(f,h,e);else var l=e,e=f,f=l;return d.ve(e)};b.prototype.toString=function(a){if(0>this.p)return"-"+this.G().toString(a);if(16==a)a=4;else if(8==a)a=3;else if(2==a)a=1;else if(32==a)a=5;else if(4==a)a=2;else return this.og(a);var b=(1<<a)-1,c,d=G,e="",f=this.g,g=this.A-f*this.A%a;if(0<f--){if(g<this.A&&0<(c=this[f]>>g))d=q,e="0123456789abcdefghijklmnopqrstuvwxyz".charAt(c);for(;0<=f;)g<a?(c=(this[f]&(1<<g)-1)<<a-g,c|=this[--f]>>
+(g+=this.A-a)):(c=this[f]>>(g-=a)&b,0>=g&&(g+=this.A,--f)),0<c&&(d=q),d&&(e+="0123456789abcdefghijklmnopqrstuvwxyz".charAt(c))}return d?e:"0"};b.prototype.G=function(){var a=c();b.ZERO.W(this,a);return a};b.prototype.abs=function(){return 0>this.p?this.G():this};b.prototype.ya=function(a){var b=this.p-a.p;if(0!=b)return b;var c=this.g,b=c-a.g;if(0!=b)return 0>this.p?-b:b;for(;0<=--c;)if(0!=(b=this[c]-a[c]))return b;return 0};b.prototype.Pf=function(a){var d=c();this.abs().tb(a,r,d);0>this.p&&0<d.ya(b.ZERO)&&
+a.W(d,d);return d};b.ZERO=e(0);b.ONE=e(1);b.prototype.rf=function(a,c){this.za(0);c==r&&(c=10);for(var e=this.Ob(c),g=Math.pow(c,e),i=G,h=0,j=0,l=0;l<a.length;++l){var m=d(a,l);0>m?"-"==a.charAt(l)&&0==this.gd()&&(i=q):(j=c*j+m,++h>=e&&(this.Nd(g),this.Md(j),j=h=0))}0<h&&(this.Nd(Math.pow(c,h)),this.Md(j));i&&b.ZERO.W(this,this)};b.prototype.Ob=function(a){return Math.floor(Math.LN2*this.A/Math.log(a))};b.prototype.gd=function(){return 0>this.p?-1:0>=this.g||1==this.g&&0>=this[0]?0:1};b.prototype.Nd=
+function(a){this[this.g]=this.Ga(0,a-1,this,0,0,this.g);++this.g;this.ia()};b.prototype.Md=function(a){var b=0;if(0!=a){for(;this.g<=b;)this[this.g++]=0;for(this[b]+=a;this[b]>=this.X;)this[b]-=this.X,++b>=this.g&&(this[this.g++]=0),++this[b]}};b.prototype.og=function(a){a==r&&(a=10);if(0==this.gd()||2>a||36<a)return"0";var b=this.Ob(a),b=Math.pow(a,b),d=e(b),f=c(),g=c(),h="";for(this.tb(d,f,g);0<f.gd();)h=(b+g.fe()).toString(a).substr(1)+h,f.tb(d,f,g);return g.fe().toString(a)+h};b.prototype.fe=
+function(){if(0>this.p){if(1==this.g)return this[0]-this.X;if(0==this.g)return-1}else{if(1==this.g)return this[0];if(0==this.g)return 0}return(this[1]&(1<<32-this.A)-1)<<this.A|this[0]};b.prototype.sc=function(a,b){for(var c=0,d=0,e=Math.min(a.g,this.g);c<e;)d+=this[c]+a[c],b[c++]=d&this.ha,d>>=this.A;if(a.g<this.g){for(d+=a.p;c<this.g;)d+=this[c],b[c++]=d&this.ha,d>>=this.A;d+=this.p}else{for(d+=this.p;c<a.g;)d+=a[c],b[c++]=d&this.ha,d>>=this.A;d+=a.p}b.p=0>d?-1:0;0<d?b[c++]=d:-1>d&&(b[c++]=this.X+
+d);b.g=c;b.ia()};var s={abs:function(b,c){var d=new a(b,c),d=d.U()?d.G():d;t[sa>>2]=d.C;t[sa+4>>2]=d.K},Sd:function(){s.of||(s.of=q,s.Ce=new b,s.Ce.Q("4294967296",10),s.od=new b,s.od.Q("18446744073709551616",10),s.wj=new b,s.xj=new b)},Wi:function(a,c){var d=new b;d.Q(c.toString(),10);var e=new b;d.Vc(s.Ce,e);d=new b;d.Q(a.toString(),10);var f=new b;d.sc(e,f);return f},stringify:function(c,d,e){c=(new a(c,d)).toString();e&&"-"==c[0]&&(s.Sd(),e=new b,e.Q(c,10),c=new b,s.od.sc(e,c),c=c.toString(10));
+return c},Q:function(c,d,e,f,g){s.Sd();var h=new b;h.Q(c,d);c=new b;c.Q(e,10);e=new b;e.Q(f,10);g&&0>h.ya(b.ZERO)&&(f=new b,h.sc(s.od,f),h=f);f=G;0>h.ya(c)?(h=c,f=q):0<h.ya(e)&&(h=e,f=q);h=a.Q(h.toString());t[sa>>2]=h.C;t[sa+4>>2]=h.K;f&&k("range error")}};return s}();jb.prototype=Error();var Tb,Ta=r,xa=function b(){!e.calledRun&&mb&&kb();e.calledRun||(xa=b)};e.callMain=e.vi=function(b){function c(){for(var b=0;3>b;b++)g.push(0)}J(0==fa,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");
+J(0==cb.length,"cannot call main when preRun functions remain to be called");b=b||[];Wa&&Ta!==r&&e.ab("preload time: "+(Date.now()-Ta)+" ms");Sa||(Sa=q,qa(ka));var d=b.length+1,g=[D(V("/bin/this.program"),"i8",ja)];c();for(var i=0;i<d-1;i+=1)g.push(D(V(b[i]),"i8",ja)),c();g.push(0);g=D(g,"i32",ja);Tb=X;try{var h=e._main(d,g,0);e.noExitRuntime||Sb(h)}catch(j){j instanceof jb||("SimulateInfiniteLoop"==j?e.noExitRuntime=q:(j&&("object"===typeof j&&j.stack)&&e.ab("exception thrown: "+[j,j.stack]),k(j)))}finally{}};
+e.run=e.oj=kb;e.exit=e.Di=Sb;e.abort=e.abort=aa;if(e.preInit)for("function"==typeof e.preInit&&(e.preInit=[e.preInit]);0<e.preInit.length;)e.preInit.pop()();var mb=q;e.noInitialRun&&(mb=G);kb();return e.ccall("vizRenderFromString","string",["string","string","string"],[$a,ec,ab])};
+
diff --git a/pkg/analyzer/doc/support/web_app.dart.js b/pkg/analyzer/doc/support/web_app.dart.js
new file mode 100644
index 0000000..720a137
--- /dev/null
+++ b/pkg/analyzer/doc/support/web_app.dart.js
@@ -0,0 +1,4107 @@
+(function(){var supportsDirectProtoAccess=function(){var z=function(){}
+z.prototype={p:{}}
+var y=new z()
+return y.__proto__&&y.__proto__.p===z.prototype.p}()
+function map(a){a=Object.create(null)
+a.x=0
+delete a.x
+return a}var A=map()
+var B=map()
+var C=map()
+var D=map()
+var E=map()
+var F=map()
+var G=map()
+var H=map()
+var J=map()
+var K=map()
+var L=map()
+var M=map()
+var N=map()
+var O=map()
+var P=map()
+var Q=map()
+var R=map()
+var S=map()
+var T=map()
+var U=map()
+var V=map()
+var W=map()
+var X=map()
+var Y=map()
+var Z=map()
+function I(){}init()
+function setupProgram(a,b){"use strict"
+function generateAccessor(a9,b0,b1){var g=a9.split("-")
+var f=g[0]
+var e=f.length
+var d=f.charCodeAt(e-1)
+var c
+if(g.length>1)c=true
+else c=false
+d=d>=60&&d<=64?d-59:d>=123&&d<=126?d-117:d>=37&&d<=43?d-27:0
+if(d){var a0=d&3
+var a1=d>>2
+var a2=f=f.substring(0,e-1)
+var a3=f.indexOf(":")
+if(a3>0){a2=f.substring(0,a3)
+f=f.substring(a3+1)}if(a0){var a4=a0&2?"r":""
+var a5=a0&1?"this":"r"
+var a6="return "+a5+"."+f
+var a7=b1+".prototype.g"+a2+"="
+var a8="function("+a4+"){"+a6+"}"
+if(c)b0.push(a7+"$reflectable("+a8+");\n")
+else b0.push(a7+a8+";\n")}if(a1){var a4=a1&2?"r,v":"v"
+var a5=a1&1?"this":"r"
+var a6=a5+"."+f+"=v"
+var a7=b1+".prototype.s"+a2+"="
+var a8="function("+a4+"){"+a6+"}"
+if(c)b0.push(a7+"$reflectable("+a8+");\n")
+else b0.push(a7+a8+";\n")}}return f}function defineClass(a2,a3){var g=[]
+var f="function "+a2+"("
+var e=""
+var d=""
+for(var c=0;c<a3.length;c++){if(c!=0)f+=", "
+var a0=generateAccessor(a3[c],g,a2)
+d+="'"+a0+"',"
+var a1="p_"+a0
+f+=a1
+e+="this."+a0+" = "+a1+";\n"}if(supportsDirectProtoAccess)e+="this."+"$deferredAction"+"();"
+f+=") {\n"+e+"}\n"
+f+=a2+".builtin$cls=\""+a2+"\";\n"
+f+="$desc=$collectedClasses."+a2+"[1];\n"
+f+=a2+".prototype = $desc;\n"
+if(typeof defineClass.name!="string")f+=a2+".name=\""+a2+"\";\n"
+f+=a2+"."+"$__fields__"+"=["+d+"];\n"
+f+=g.join("")
+return f}init.createNewIsolate=function(){return new I()}
+init.classIdExtractor=function(c){return c.constructor.name}
+init.classFieldsExtractor=function(c){var g=c.constructor.$__fields__
+if(!g)return[]
+var f=[]
+f.length=g.length
+for(var e=0;e<g.length;e++)f[e]=c[g[e]]
+return f}
+init.instanceFromClassId=function(c){return new init.allClasses[c]()}
+init.initializeEmptyInstance=function(c,d,e){init.allClasses[c].apply(d,e)
+return d}
+var z=supportsDirectProtoAccess?function(c,d){var g=c.prototype
+g.__proto__=d.prototype
+g.constructor=c
+g["$is"+c.name]=c
+return convertToFastObject(g)}:function(){function tmp(){}return function(a0,a1){tmp.prototype=a1.prototype
+var g=new tmp()
+convertToSlowObject(g)
+var f=a0.prototype
+var e=Object.keys(f)
+for(var d=0;d<e.length;d++){var c=e[d]
+g[c]=f[c]}g["$is"+a0.name]=a0
+g.constructor=a0
+a0.prototype=g
+return g}}()
+function finishClasses(a4){var g=init.allClasses
+a4.combinedConstructorFunction+="return [\n"+a4.constructorsList.join(",\n  ")+"\n]"
+var f=new Function("$collectedClasses",a4.combinedConstructorFunction)(a4.collected)
+a4.combinedConstructorFunction=null
+for(var e=0;e<f.length;e++){var d=f[e]
+var c=d.name
+var a0=a4.collected[c]
+var a1=a0[0]
+a0=a0[1]
+g[c]=d
+a1[c]=d}f=null
+var a2=init.finishedClasses
+function finishClass(c1){if(a2[c1])return
+a2[c1]=true
+var a5=a4.pending[c1]
+if(a5&&a5.indexOf("+")>0){var a6=a5.split("+")
+a5=a6[0]
+var a7=a6[1]
+finishClass(a7)
+var a8=g[a7]
+var a9=a8.prototype
+var b0=g[c1].prototype
+var b1=Object.keys(a9)
+for(var b2=0;b2<b1.length;b2++){var b3=b1[b2]
+if(!u.call(b0,b3))b0[b3]=a9[b3]}}if(!a5||typeof a5!="string"){var b4=g[c1]
+var b5=b4.prototype
+b5.constructor=b4
+b5.$isMh=b4
+b5.$deferredAction=function(){}
+return}finishClass(a5)
+var b6=g[a5]
+if(!b6)b6=existingIsolateProperties[a5]
+var b4=g[c1]
+var b5=z(b4,b6)
+if(a9)b5.$deferredAction=mixinDeferredActionHelper(a9,b5)
+if(Object.prototype.hasOwnProperty.call(b5,"%")){var b7=b5["%"].split(";")
+if(b7[0]){var b8=b7[0].split("|")
+for(var b2=0;b2<b8.length;b2++){init.interceptorsByTag[b8[b2]]=b4
+init.leafTags[b8[b2]]=true}}if(b7[1]){b8=b7[1].split("|")
+if(b7[2]){var b9=b7[2].split("|")
+for(var b2=0;b2<b9.length;b2++){var c0=g[b9[b2]]
+c0.$nativeSuperclassTag=b8[0]}}for(b2=0;b2<b8.length;b2++){init.interceptorsByTag[b8[b2]]=b4
+init.leafTags[b8[b2]]=false}}b5.$deferredAction()}if(b5.$isvB)b5.$deferredAction()}var a3=Object.keys(a4.pending)
+for(var e=0;e<a3.length;e++)finishClass(a3[e])}function finishAddStubsHelper(){var g=this
+while(!g.hasOwnProperty("$deferredAction"))g=g.__proto__
+delete g.$deferredAction
+var f=Object.keys(g)
+for(var e=0;e<f.length;e++){var d=f[e]
+var c=d.charCodeAt(0)
+var a0
+if(d!=="^"&&d!=="$reflectable"&&c!==43&&c!==42&&(a0=g[d])!=null&&a0.constructor===Array&&d!=="<>")addStubs(g,a0,d,false,[])}convertToFastObject(g)
+g=g.__proto__
+g.$deferredAction()}function mixinDeferredActionHelper(c,d){var g
+if(d.hasOwnProperty("$deferredAction"))g=d.$deferredAction
+return function foo(){var f=this
+while(!f.hasOwnProperty("$deferredAction"))f=f.__proto__
+if(g)f.$deferredAction=g
+else{delete f.$deferredAction
+convertToFastObject(f)}c.$deferredAction()
+f.$deferredAction()}}function processClassData(b1,b2,b3){b2=convertToSlowObject(b2)
+var g
+var f=Object.keys(b2)
+var e=false
+var d=supportsDirectProtoAccess&&b1!="Mh"
+for(var c=0;c<f.length;c++){var a0=f[c]
+var a1=a0.charCodeAt(0)
+if(a0==="static"){processStatics(init.statics[b1]=b2.static,b3)
+delete b2.static}else if(a1===43){w[g]=a0.substring(1)
+var a2=b2[a0]
+if(a2>0)b2[g].$reflectable=a2}else if(a1===42){b2[g].$defaultValues=b2[a0]
+var a3=b2.$methodsWithOptionalArguments
+if(!a3)b2.$methodsWithOptionalArguments=a3={}
+a3[a0]=g}else{var a4=b2[a0]
+if(a0!=="^"&&a4!=null&&a4.constructor===Array&&a0!=="<>")if(d)e=true
+else addStubs(b2,a4,a0,false,[])
+else g=a0}}if(e)b2.$deferredAction=finishAddStubsHelper
+var a5=b2["^"],a6,a7,a8=a5
+var a9=a8.split(";")
+a8=a9[1]?a9[1].split(","):[]
+a7=a9[0]
+a6=a7.split(":")
+if(a6.length==2){a7=a6[0]
+var b0=a6[1]
+if(b0)b2.$signature=function(b4){return function(){return init.types[b4]}}(b0)}if(a7)b3.pending[b1]=a7
+b3.combinedConstructorFunction+=defineClass(b1,a8)
+b3.constructorsList.push(b1)
+b3.collected[b1]=[m,b2]
+i.push(b1)}function processStatics(a3,a4){var g=Object.keys(a3)
+for(var f=0;f<g.length;f++){var e=g[f]
+if(e==="^")continue
+var d=a3[e]
+var c=e.charCodeAt(0)
+var a0
+if(c===43){v[a0]=e.substring(1)
+var a1=a3[e]
+if(a1>0)a3[a0].$reflectable=a1
+if(d&&d.length)init.typeInformation[a0]=d}else if(c===42){m[a0].$defaultValues=d
+var a2=a3.$methodsWithOptionalArguments
+if(!a2)a3.$methodsWithOptionalArguments=a2={}
+a2[e]=a0}else if(typeof d==="function"){m[a0=e]=d
+h.push(e)
+init.globalFunctions[e]=d}else if(d.constructor===Array)addStubs(m,d,e,true,h)
+else{a0=e
+processClassData(e,d,a4)}}}function addStubs(b2,b3,b4,b5,b6){var g=0,f=b3[g],e
+if(typeof f=="string")e=b3[++g]
+else{e=f
+f=b4}var d=[b2[b4]=b2[f]=e]
+e.$stubName=b4
+b6.push(b4)
+for(g++;g<b3.length;g++){e=b3[g]
+if(typeof e!="function")break
+if(!b5)e.$stubName=b3[++g]
+d.push(e)
+if(e.$stubName){b2[e.$stubName]=e
+b6.push(e.$stubName)}}for(var c=0;c<d.length;g++,c++)d[c].$callName=b3[g]
+var a0=b3[g]
+b3=b3.slice(++g)
+var a1=b3[0]
+var a2=a1>>1
+var a3=(a1&1)===1
+var a4=a1===3
+var a5=a1===1
+var a6=b3[1]
+var a7=a6>>1
+var a8=(a6&1)===1
+var a9=a2+a7!=d[0].length
+var b0=b3[2]
+if(typeof b0=="number")b3[2]=b0+b
+var b1=2*a7+a2+3
+if(a0){e=tearOff(d,b3,b5,b4,a9)
+b2[b4].$getter=e
+e.$getterStub=true
+if(b5){init.globalFunctions[b4]=e
+b6.push(a0)}b2[a0]=e
+d.push(e)
+e.$stubName=a0
+e.$callName=null}}Function.prototype.$0=function(){return this()}
+Function.prototype.$1=function(c){return this(c)}
+Function.prototype.$2=function(c,d){return this(c,d)}
+Function.prototype.$4=function(c,d,e,f){return this(c,d,e,f)}
+Function.prototype.$3=function(c,d,e){return this(c,d,e)}
+function tearOffGetter(c,d,e,f){return f?new Function("funcs","reflectionInfo","name","H","c","return function tearOff_"+e+y+++"(x) {"+"if (c === null) c = "+"H.qm"+"("+"this, funcs, reflectionInfo, false, [x], name);"+"return new c(this, funcs[0], x, name);"+"}")(c,d,e,H,null):new Function("funcs","reflectionInfo","name","H","c","return function tearOff_"+e+y+++"() {"+"if (c === null) c = "+"H.qm"+"("+"this, funcs, reflectionInfo, false, [], name);"+"return new c(this, funcs[0], null, name);"+"}")(c,d,e,H,null)}function tearOff(c,d,e,f,a0){var g
+return e?function(){if(g===void 0)g=H.qm(this,c,d,true,[],f).prototype
+return g}:tearOffGetter(c,d,f,a0)}var y=0
+if(!init.libraries)init.libraries=[]
+if(!init.mangledNames)init.mangledNames=map()
+if(!init.mangledGlobalNames)init.mangledGlobalNames=map()
+if(!init.statics)init.statics=map()
+if(!init.typeInformation)init.typeInformation=map()
+if(!init.globalFunctions)init.globalFunctions=map()
+var x=init.libraries
+var w=init.mangledNames
+var v=init.mangledGlobalNames
+var u=Object.prototype.hasOwnProperty
+var t=a.length
+var s=map()
+s.collected=map()
+s.pending=map()
+s.constructorsList=[]
+s.combinedConstructorFunction="function $reflectable(fn){fn.$reflectable=1;return fn};\n"+"var $desc;\n"
+for(var r=0;r<t;r++){var q=a[r]
+var p=q[0]
+var o=q[1]
+var n=q[2]
+var m=q[3]
+var l=q[4]
+var k=!!q[5]
+var j=l&&l["^"]
+if(j instanceof Array)j=j[0]
+var i=[]
+var h=[]
+processStatics(l,s)
+x.push([p,o,i,h,n,j,k,m])}finishClasses(s)}I.HU=function(){}
+var dart=[["","",,H,{"^":"",FK:{"^":"Mh;a"}}],["","",,J,{"^":"",
+v:function(a){return void 0},
+Qu:function(a,b,c,d){return{i:a,p:b,e:c,x:d}},
+m:function(a){var z,y,x,w
+z=a[init.dispatchPropertyName]
+if(z==null)if($.M==null){H.u()
+z=a[init.dispatchPropertyName]}if(z!=null){y=z.p
+if(!1===y)return z.i
+if(!0===y)return a
+x=Object.getPrototypeOf(a)
+if(y===x)return z.i
+if(z.e===x)throw H.b(new P.D("Return interceptor for "+H.d(y(a,z))))}w=H.w(a)
+if(w==null){if(typeof a=="function")return C.DG
+y=Object.getPrototypeOf(a)
+if(y==null||y===Object.prototype)return C.ZQ
+else return C.vB}return w},
+vB:{"^":"Mh;",
+D:function(a,b){return a===b},
+gM:function(a){return H.wP(a)},
+w:["UG",function(a){return H.H(a)}],
+"%":"ANGLEInstancedArrays|Animation|AnimationEffect|AnimationNode|AnimationTimeline|AudioListener|AudioParam|AudioTrack|BarProp|Body|CSS|Cache|CacheStorage|Canvas2DContextAttributes|CanvasGradient|CanvasPattern|CanvasRenderingContext2D|CircularGeofencingRegion|ConsoleBase|Coordinates|Counter|Credential|CredentialsContainer|Crypto|CryptoKey|DOMError|DOMFileSystem|DOMFileSystemSync|DOMImplementation|DOMMatrix|DOMMatrixReadOnly|DOMParser|DOMPoint|DOMPointReadOnly|DataTransfer|Database|DeprecatedStorageInfo|DeprecatedStorageQuota|DeviceAcceleration|DeviceRotationRate|DirectoryEntrySync|DirectoryReader|DirectoryReaderSync|EXTBlendMinMax|EXTFragDepth|EXTShaderTextureLOD|EXTTextureFilterAnisotropic|EntrySync|FederatedCredential|FileEntrySync|FileError|FileReaderSync|FileWriterSync|FormData|GamepadButton|Geofencing|GeofencingRegion|Geolocation|Geoposition|HTMLAllCollection|IDBCursor|IDBCursorWithValue|IDBFactory|IDBKeyRange|IDBObjectStore|ImageBitmap|ImageData|InjectedScriptHost|LocalCredential|MIDIInputMap|MIDIOutputMap|MediaDeviceInfo|MediaError|MediaKeyError|MediaKeys|MemoryInfo|MessageChannel|Metadata|MutationObserver|MutationRecord|NavigatorUserMediaError|NodeFilter|NodeIterator|OESElementIndexUint|OESStandardDerivatives|OESTextureFloat|OESTextureFloatLinear|OESTextureHalfFloat|OESTextureHalfFloatLinear|OESVertexArrayObject|PagePopupController|PerformanceEntry|PerformanceMark|PerformanceMeasure|PerformanceNavigation|PerformanceResourceTiming|PerformanceTiming|PeriodicWave|PositionError|PushManager|PushRegistration|RGBColor|RTCIceCandidate|RTCSessionDescription|RTCStatsResponse|Range|ReadableStream|Rect|Request|Response|SQLError|SQLResultSet|SQLTransaction|SVGAngle|SVGAnimatedAngle|SVGAnimatedBoolean|SVGAnimatedEnumeration|SVGAnimatedInteger|SVGAnimatedLength|SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedPreserveAspectRatio|SVGAnimatedRect|SVGAnimatedString|SVGAnimatedTransformList|SVGMatrix|SVGPoint|SVGPreserveAspectRatio|SVGRect|SVGRenderingIntent|SVGUnitTypes|Screen|Selection|ServiceWorkerClient|ServiceWorkerClients|ServiceWorkerContainer|SourceInfo|SpeechRecognitionAlternative|SpeechSynthesisVoice|StorageInfo|StorageQuota|Stream|StyleMedia|SubtleCrypto|TextMetrics|Timing|TreeWalker|VTTRegion|ValidityState|VideoPlaybackQuality|VideoTrack|WebGLActiveInfo|WebGLBuffer|WebGLCompressedTextureATC|WebGLCompressedTextureETC1|WebGLCompressedTexturePVRTC|WebGLCompressedTextureS3TC|WebGLContextAttributes|WebGLDebugRendererInfo|WebGLDebugShaders|WebGLDepthTexture|WebGLDrawBuffers|WebGLExtensionLoseContext|WebGLFramebuffer|WebGLLoseContext|WebGLProgram|WebGLRenderbuffer|WebGLRenderingContext|WebGLShader|WebGLShaderPrecisionFormat|WebGLTexture|WebGLUniformLocation|WebGLVertexArrayObjectOES|WebKitCSSMatrix|WebKitMutationObserver|WorkerConsole|WorkerPerformance|XMLSerializer|XPathEvaluator|XPathExpression|XPathNSResolver|XPathResult|XSLTProcessor|mozRTCIceCandidate|mozRTCSessionDescription"},
+yE:{"^":"vB;",
+w:function(a){return String(a)},
+gM:function(a){return a?519018:218159},
+$isa2:1},
+PE:{"^":"vB;",
+D:function(a,b){return null==b},
+w:function(a){return"null"},
+gM:function(a){return 0}},
+Ue:{"^":"vB;",
+gM:function(a){return 0},
+w:["tk",function(a){return String(a)}],
+$isvm:1},
+iC:{"^":"Ue;"},
+k:{"^":"Ue;"},
+c5:{"^":"Ue;",
+w:function(a){var z=a[$.$get$fa()]
+return z==null?this.tk(a):J.A(z)}},
+jd:{"^":"vB;",
+uy:function(a,b){if(!!a.immutable$list)throw H.b(new P.ub(b))},
+PP:function(a,b){if(!!a.fixed$length)throw H.b(new P.ub(b))},
+FV:function(a,b){var z
+this.PP(a,"addAll")
+for(z=0;z<2;++z)a.push(b[z])},
+U:function(a,b){var z,y
+z=a.length
+for(y=0;y<z;++y){b.$1(a[y])
+if(a.length!==z)throw H.b(new P.UV(a))}},
+ez:function(a,b){return H.VM(new H.A8(a,b),[null,null])},
+W:function(a,b){return a[b]},
+gtH:function(a){if(a.length>0)return a[0]
+throw H.b(H.Wp())},
+YW:function(a,b,c,d,e){var z,y
+this.uy(a,"set range")
+P.jB(b,c,a.length,null,null,null)
+z=c-b
+if(z===0)return
+if(e<0)H.vh(P.TE(e,0,null,"skipCount",null))
+if(e+z>d.length)throw H.b(H.ar())
+if(e<b)for(y=z-1;y>=0;--y)a[b+y]=d[e+y]
+else for(y=0;y<z;++y)a[b+y]=d[e+y]},
+Vr:function(a,b){var z,y
+z=a.length
+for(y=0;y<z;++y){if(b.$1(a[y]))return!0
+if(a.length!==z)throw H.b(new P.UV(a))}return!1},
+tg:function(a,b){var z
+for(z=0;z<a.length;++z)if(J.RM(a[z],b))return!0
+return!1},
+w:function(a){return P.WE(a,"[","]")},
+gk:function(a){return new J.m1(a,a.length,0,null)},
+gM:function(a){return H.wP(a)},
+gA:function(a){return a.length},
+sA:function(a,b){this.PP(a,"set length")
+if(b<0)throw H.b(P.TE(b,0,null,"newLength",null))
+a.length=b},
+q:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(H.HY(a,b))
+if(b>=a.length||b<0)throw H.b(H.HY(a,b))
+return a[b]},
+t:function(a,b,c){this.uy(a,"indexed set")
+if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(H.HY(a,b))
+if(b>=a.length||b<0)throw H.b(H.HY(a,b))
+a[b]=c},
+$isDD:1,
+$iszM:1,
+$aszM:null,
+$isqC:1},
+Po:{"^":"jd;"},
+m1:{"^":"Mh;a,b,c,d",
+gl:function(){return this.d},
+F:function(){var z,y,x
+z=this.a
+y=z.length
+if(this.b!==y)throw H.b(H.lk(z))
+x=this.c
+if(x>=y){this.d=null
+return!1}this.d=z[x]
+this.c=x+1
+return!0}},
+jX:{"^":"vB;",
+JV:function(a,b){return a%b},
+yu:function(a){var z
+if(a>=-2147483648&&a<=2147483647)return a|0
+if(isFinite(a)){z=a<0?Math.ceil(a):Math.floor(a)
+return z+0}throw H.b(new P.ub(""+a))},
+w:function(a){if(a===0&&1/a<0)return"-0.0"
+else return""+a},
+gM:function(a){return a&0x1FFFFFFF},
+BU:function(a,b){return(a|0)===a?a/b|0:this.yu(a/b)},
+wG:function(a,b){var z
+if(a>0)z=b>31?0:a>>>b
+else{z=b>31?31:b
+z=a>>z>>>0}return z},
+B:function(a,b){if(typeof b!=="number")throw H.b(H.G(b))
+return a<b},
+$islf:1},
+im:{"^":"jX;",$islf:1,$isKN:1},
+VA:{"^":"jX;",$islf:1},
+Dr:{"^":"vB;",
+J:function(a,b){if(b<0)throw H.b(H.HY(a,b))
+if(b>=a.length)throw H.b(H.HY(a,b))
+return a.charCodeAt(b)},
+Qi:function(a,b,c){var z
+H.fI(c)
+if(c>a.length)throw H.b(P.TE(c,0,a.length,null,null))
+z=c+b.length
+if(z>a.length)return!1
+return b===a.substring(c,z)},
+nC:function(a,b){return this.Qi(a,b,0)},
+C:function(a,b,c){if(c==null)c=a.length
+if(typeof c!=="number"||Math.floor(c)!==c)H.vh(H.G(c))
+if(b<0)throw H.b(P.F(b,null,null))
+if(b>c)throw H.b(P.F(b,null,null))
+if(c>a.length)throw H.b(P.F(c,null,null))
+return a.substring(b,c)},
+G:function(a,b){return this.C(a,b,null)},
+hc:function(a){return a.toLowerCase()},
+bS:function(a){var z,y,x,w,v
+z=a.trim()
+y=z.length
+if(y===0)return z
+if(this.J(z,0)===133){x=J.mm(z,1)
+if(x===y)return""}else x=0
+w=y-1
+v=this.J(z,w)===133?J.r9(z,w):y
+if(x===0&&v===y)return z
+return z.substring(x,v)},
+w:function(a){return a},
+gM:function(a){var z,y,x
+for(z=a.length,y=0,x=0;x<z;++x){y=536870911&y+a.charCodeAt(x)
+y=536870911&y+((524287&y)<<10>>>0)
+y^=y>>6}y=536870911&y+((67108863&y)<<3>>>0)
+y^=y>>11
+return 536870911&y+((16383&y)<<15>>>0)},
+gA:function(a){return a.length},
+q:function(a,b){if(b>=a.length||!1)throw H.b(H.HY(a,b))
+return a[b]},
+$isDD:1,
+$isqU:1,
+static:{
+Ga:function(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0
+default:return!1}switch(a){case 5760:case 6158:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0
+default:return!1}},
+mm:function(a,b){var z,y
+for(z=a.length;b<z;){y=C.xB.J(a,b)
+if(y!==32&&y!==13&&!J.Ga(y))break;++b}return b},
+r9:function(a,b){var z,y
+for(;b>0;b=z){z=b-1
+y=C.xB.J(a,z)
+if(y!==32&&y!==13&&!J.Ga(y))break}return b}}}}],["","",,H,{"^":"",
+zd:function(a,b){var z=a.v(b)
+if(!init.globalState.d.cy)init.globalState.f.bL()
+return z},
+Rq:function(a,b){var z,y,x,w,v,u
+z={}
+z.a=b
+if(b==null){b=[]
+z.a=b
+y=b}else y=b
+if(!J.v(y).$iszM)throw H.b(P.q("Arguments to main must be a List: "+H.d(y)))
+init.globalState=new H.O2(0,0,1,null,null,null,null,null,null,null,null,null,a)
+y=init.globalState
+x=self.window==null
+w=self.Worker
+v=x&&!!self.postMessage
+y.x=v
+v=!v
+if(v)w=w!=null&&$.$get$Kb()!=null
+else w=!0
+y.y=w
+y.r=x&&v
+y.f=new H.cC(P.NZ(null,H.IY),0)
+y.z=H.VM(new H.N5(0,null,null,null,null,null,0),[P.KN,H.aX])
+y.ch=H.VM(new H.N5(0,null,null,null,null,null,0),[P.KN,null])
+if(y.x){x=new H.JH()
+y.Q=x
+self.onmessage=function(c,d){return function(e){c(d,e)}}(H.Mg,x)
+self.dartPrint=self.dartPrint||function(c){return function(d){if(self.console&&self.console.log)self.console.log(d)
+else self.postMessage(c(d))}}(H.wI)}if(init.globalState.x)return
+y=init.globalState.a++
+x=H.VM(new H.N5(0,null,null,null,null,null,0),[P.KN,H.yo])
+w=P.Ls(null,null,null,P.KN)
+v=new H.yo(0,null,!1)
+u=new H.aX(y,x,w,init.createNewIsolate(),v,new H.ku(H.Uh()),new H.ku(H.Uh()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
+w.AN(0,0)
+u.co(0,v)
+init.globalState.e=u
+init.globalState.d=u
+y=H.N7()
+x=H.KT(y,[y]).Zg(a)
+if(x)u.v(new H.PK(z,a))
+else{y=H.KT(y,[y,y]).Zg(a)
+if(y)u.v(new H.JO(z,a))
+else u.v(a)}init.globalState.f.bL()},
+yl:function(){var z=init.currentScript
+if(z!=null)return String(z.src)
+if(init.globalState.x)return H.mf()
+return},
+mf:function(){var z,y
+z=new Error().stack
+if(z==null){z=function(){try{throw new Error()}catch(x){return x.stack}}()
+if(z==null)throw H.b(new P.ub("No stack trace"))}y=z.match(new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","m"))
+if(y!=null)return y[1]
+y=z.match(new RegExp("^[^@]*@(.*):[0-9]*$","m"))
+if(y!=null)return y[1]
+throw H.b(new P.ub('Cannot extract URI from "'+H.d(z)+'"'))},
+Mg:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=new H.fP(!0,[]).QS(b.data)
+y=J.U6(z)
+switch(y.q(z,"command")){case"start":init.globalState.b=y.q(z,"id")
+x=y.q(z,"functionName")
+w=x==null?init.globalState.cx:init.globalFunctions[x]()
+v=y.q(z,"args")
+u=new H.fP(!0,[]).QS(y.q(z,"msg"))
+t=y.q(z,"isSpawnUri")
+s=y.q(z,"startPaused")
+r=new H.fP(!0,[]).QS(y.q(z,"replyTo"))
+y=init.globalState.a++
+q=H.VM(new H.N5(0,null,null,null,null,null,0),[P.KN,H.yo])
+p=P.Ls(null,null,null,P.KN)
+o=new H.yo(0,null,!1)
+n=new H.aX(y,q,p,init.createNewIsolate(),o,new H.ku(H.Uh()),new H.ku(H.Uh()),!1,!1,[],P.Ls(null,null,null,null),null,null,!1,!0,P.Ls(null,null,null,null))
+p.AN(0,0)
+n.co(0,o)
+init.globalState.f.a.B7(0,new H.IY(n,new H.jl(w,v,u,t,s,r),"worker-start"))
+init.globalState.d=n
+init.globalState.f.bL()
+break
+case"spawn-worker":break
+case"message":if(y.q(z,"port")!=null)J.TT(y.q(z,"port"),y.q(z,"msg"))
+init.globalState.f.bL()
+break
+case"close":init.globalState.ch.Rz(0,$.$get$jp().q(0,a))
+a.terminate()
+init.globalState.f.bL()
+break
+case"log":H.VL(y.q(z,"msg"))
+break
+case"print":if(init.globalState.x){y=init.globalState.Q
+q=P.Td(["command","print","msg",z])
+q=new H.jP(!0,P.E8(null,P.KN)).a3(q)
+y.toString
+self.postMessage(q)}else P.JS(y.q(z,"msg"))
+break
+case"error":throw H.b(y.q(z,"msg"))}},
+VL:function(a){var z,y,x,w
+if(init.globalState.x){y=init.globalState.Q
+x=P.Td(["command","log","msg",a])
+x=new H.jP(!0,P.E8(null,P.KN)).a3(x)
+y.toString
+self.postMessage(x)}else try{self.console.log(a)}catch(w){H.p(w)
+z=H.ts(w)
+throw H.b(P.FM(z))}},
+Z7:function(a,b,c,d,e,f){var z,y,x,w
+z=init.globalState.d
+y=z.a
+$.te=$.te+("_"+y)
+$.eb=$.eb+("_"+y)
+y=z.e
+x=init.globalState.d.a
+w=z.f
+f.wR(0,["spawned",new H.JM(y,x),w,z.r])
+x=new H.Vg(a,b,c,d,z)
+if(e){z.v8(w,w)
+init.globalState.f.a.B7(0,new H.IY(z,x,"start isolate"))}else x.$0()},
+Gx:function(a){return new H.fP(!0,[]).QS(new H.jP(!1,P.E8(null,P.KN)).a3(a))},
+PK:{"^":"L:0;a,b",
+$0:function(){this.b.$1(this.a.a)}},
+JO:{"^":"L:0;a,b",
+$0:function(){this.b.$2(this.a.a,null)}},
+O2:{"^":"Mh;a,b,c,d,e,f,r,x,y,z,Q,ch,cx",static:{
+wI:function(a){var z=P.Td(["command","print","msg",a])
+return new H.jP(!0,P.E8(null,P.KN)).a3(z)}}},
+aX:{"^":"Mh;a,b,c,En:d<,EE:e<,f,r,x,y,z,Q,ch,cx,cy,db,dx",
+v8:function(a,b){if(!this.f.D(0,a))return
+if(this.Q.AN(0,b)&&!this.y)this.y=!0
+this.Wp()},
+cK:function(a){var z,y,x,w,v
+if(!this.y)return
+z=this.Q
+z.Rz(0,a)
+if(z.a===0){for(z=this.z;z.length!==0;){y=z.pop()
+x=init.globalState.f.a
+w=x.b
+v=x.a
+w=(w-1&v.length-1)>>>0
+x.b=w
+v[w]=y
+if(w===x.c)x.wL();++x.d}this.y=!1}this.Wp()},
+h4:function(a,b){var z,y,x
+if(this.ch==null)this.ch=[]
+for(z=J.v(a),y=0;x=this.ch,y<x.length;y+=2)if(z.D(a,x[y])){this.ch[y+1]=b
+return}x.push(a)
+this.ch.push(b)},
+Hh:function(a){var z,y,x
+if(this.ch==null)return
+for(z=J.v(a),y=0;x=this.ch,y<x.length;y+=2)if(z.D(a,x[y])){z=this.ch
+x=y+2
+z.toString
+if(typeof z!=="object"||z===null||!!z.fixed$length)H.vh(new P.ub("removeRange"))
+P.jB(y,x,z.length,null,null,null)
+z.splice(y,x-y)
+return}},
+MZ:function(a,b){if(!this.r.D(0,a))return
+this.db=b},
+l7:function(a,b,c){var z
+if(b!==0)z=b===1&&!this.cy
+else z=!0
+if(z){a.wR(0,c)
+return}z=this.cx
+if(z==null){z=P.NZ(null,null)
+this.cx=z}z.B7(0,new H.NY(a,c))},
+bc:function(a,b){var z
+if(!this.r.D(0,a))return
+if(b!==0)z=b===1&&!this.cy
+else z=!0
+if(z){this.Dm()
+return}z=this.cx
+if(z==null){z=P.NZ(null,null)
+this.cx=z}z.B7(0,this.gIm())},
+hk:function(a,b){var z,y,x
+z=this.dx
+if(z.a===0){if(this.db&&this===init.globalState.e)return
+if(self.console&&self.console.error)self.console.error(a,b)
+else{P.JS(a)
+if(b!=null)P.JS(b)}return}y=new Array(2)
+y.fixed$length=Array
+y[0]=J.A(a)
+y[1]=b==null?null:b.w(0)
+for(x=new P.lm(z,z.r,null,null),x.c=z.e;x.F();)x.d.wR(0,y)},
+v:function(a){var z,y,x,w,v,u,t
+z=init.globalState.d
+init.globalState.d=this
+$=this.d
+y=null
+x=this.cy
+this.cy=!0
+try{y=a.$0()}catch(u){t=H.p(u)
+w=t
+v=H.ts(u)
+this.hk(w,v)
+if(this.db){this.Dm()
+if(this===init.globalState.e)throw u}}finally{this.cy=x
+init.globalState.d=z
+if(z!=null)$=z.gEn()
+if(this.cx!=null)for(;t=this.cx,!t.gl0(t);)this.cx.Ux().$0()}return y},
+Zt:function(a){return this.b.q(0,a)},
+co:function(a,b){var z=this.b
+if(z.x4(0,a))throw H.b(P.FM("Registry: ports must be registered only once."))
+z.t(0,a,b)},
+Wp:function(){var z=this.b
+if(z.gA(z)-this.c.a>0||this.y||!this.x)init.globalState.z.t(0,this.a,this)
+else this.Dm()},
+Dm:[function(){var z,y,x
+z=this.cx
+if(z!=null)z.V1(0)
+for(z=this.b,y=z.gUQ(z),y=y.gk(y);y.F();)y.gl().EC()
+z.V1(0)
+this.c.V1(0)
+init.globalState.z.Rz(0,this.a)
+this.dx.V1(0)
+if(this.ch!=null){for(x=0;z=this.ch,x<z.length;x+=2)z[x].wR(0,z[x+1])
+this.ch=null}},"$0","gIm",0,0,2]},
+NY:{"^":"L:2;a,b",
+$0:function(){this.a.wR(0,this.b)}},
+cC:{"^":"Mh;a,b",
+Jc:function(){var z=this.a
+if(z.b===z.c)return
+return z.Ux()},
+xB:function(){var z,y,x
+z=this.Jc()
+if(z==null){if(init.globalState.e!=null)if(init.globalState.z.x4(0,init.globalState.e.a))if(init.globalState.r){y=init.globalState.e.b
+y=y.gl0(y)}else y=!1
+else y=!1
+else y=!1
+if(y)H.vh(P.FM("Program exited with open ReceivePorts."))
+y=init.globalState
+if(y.x){x=y.z
+x=x.gl0(x)&&y.f.b===0}else x=!1
+if(x){y=y.Q
+x=P.Td(["command","close"])
+x=new H.jP(!0,H.VM(new P.ey(0,null,null,null,null,null,0),[null,P.KN])).a3(x)
+y.toString
+self.postMessage(x)}return!1}z.VU()
+return!0},
+Ex:function(){if(self.window!=null)new H.RA(this).$0()
+else for(;this.xB(););},
+bL:function(){var z,y,x,w,v
+if(!init.globalState.x)this.Ex()
+else try{this.Ex()}catch(x){w=H.p(x)
+z=w
+y=H.ts(x)
+w=init.globalState.Q
+v=P.Td(["command","error","msg",H.d(z)+"\n"+H.d(y)])
+v=new H.jP(!0,P.E8(null,P.KN)).a3(v)
+w.toString
+self.postMessage(v)}}},
+RA:{"^":"L:2;a",
+$0:function(){if(!this.a.xB())return
+P.ww(C.RT,this)}},
+IY:{"^":"Mh;a,b,c",
+VU:function(){var z=this.a
+if(z.y){z.z.push(this)
+return}z.v(this.b)}},
+JH:{"^":"Mh;"},
+jl:{"^":"L:0;a,b,c,d,e,f",
+$0:function(){H.Z7(this.a,this.b,this.c,this.d,this.e,this.f)}},
+Vg:{"^":"L:2;a,b,c,d,e",
+$0:function(){var z,y,x,w
+z=this.e
+z.x=!0
+if(!this.d)this.a.$1(this.c)
+else{y=this.a
+x=H.N7()
+w=H.KT(x,[x,x]).Zg(y)
+if(w)y.$2(this.b,this.c)
+else{x=H.KT(x,[x]).Zg(y)
+if(x)y.$1(this.b)
+else y.$0()}}z.Wp()}},
+Iy:{"^":"Mh;"},
+JM:{"^":"Iy;b,a",
+wR:function(a,b){var z,y,x,w
+z=init.globalState.z.q(0,this.a)
+if(z==null)return
+y=this.b
+if(y.c)return
+x=H.Gx(b)
+if(z.gEE()===y){y=J.U6(x)
+switch(y.q(x,0)){case"pause":z.v8(y.q(x,1),y.q(x,2))
+break
+case"resume":z.cK(y.q(x,1))
+break
+case"add-ondone":z.h4(y.q(x,1),y.q(x,2))
+break
+case"remove-ondone":z.Hh(y.q(x,1))
+break
+case"set-errors-fatal":z.MZ(y.q(x,1),y.q(x,2))
+break
+case"ping":z.l7(y.q(x,1),y.q(x,2),y.q(x,3))
+break
+case"kill":z.bc(y.q(x,1),y.q(x,2))
+break
+case"getErrors":y=y.q(x,1)
+z.dx.AN(0,y)
+break
+case"stopErrors":y=y.q(x,1)
+z.dx.Rz(0,y)
+break}return}y=init.globalState.f
+w="receive "+H.d(b)
+y.a.B7(0,new H.IY(z,new H.Ua(this,x),w))},
+D:function(a,b){var z,y
+if(b==null)return!1
+if(b instanceof H.JM){z=this.b
+y=b.b
+y=z==null?y==null:z===y
+z=y}else z=!1
+return z},
+gM:function(a){return this.b.a}},
+Ua:{"^":"L:0;a,b",
+$0:function(){var z=this.a.b
+if(!z.c)z.z6(0,this.b)}},
+ns:{"^":"Iy;b,c,a",
+wR:function(a,b){var z,y,x
+z=P.Td(["command","message","port",this,"msg",b])
+y=new H.jP(!0,P.E8(null,P.KN)).a3(z)
+if(init.globalState.x){init.globalState.Q.toString
+self.postMessage(y)}else{x=init.globalState.ch.q(0,this.b)
+if(x!=null)x.postMessage(y)}},
+D:function(a,b){var z,y
+if(b==null)return!1
+if(b instanceof H.ns){z=this.b
+y=b.b
+if(z==null?y==null:z===y){z=this.a
+y=b.a
+if(z==null?y==null:z===y){z=this.c
+y=b.c
+y=z==null?y==null:z===y
+z=y}else z=!1}else z=!1}else z=!1
+return z},
+gM:function(a){return(this.b<<16^this.a<<8^this.c)>>>0}},
+yo:{"^":"Mh;a,b,c",
+EC:function(){this.c=!0
+this.b=null},
+z6:function(a,b){if(this.c)return
+this.mY(b)},
+mY:function(a){return this.b.$1(a)},
+$isaL:1},
+yH:{"^":"Mh;a,b,c",
+Qa:function(a,b){var z,y
+if(a===0)z=self.setTimeout==null||init.globalState.x
+else z=!1
+if(z){this.c=1
+z=init.globalState.f
+y=init.globalState.d
+z.a.B7(0,new H.IY(y,new H.FA(this,b),"timer"))
+this.b=!0}else if(self.setTimeout!=null){++init.globalState.f.b
+this.c=self.setTimeout(H.tR(new H.Av(this,b),0),a)}else throw H.b(new P.ub("Timer greater than 0."))},
+static:{
+cy:function(a,b){var z=new H.yH(!0,!1,null)
+z.Qa(a,b)
+return z}}},
+FA:{"^":"L:2;a,b",
+$0:function(){this.a.c=null
+this.b.$0()}},
+Av:{"^":"L:2;a,b",
+$0:function(){this.a.c=null;--init.globalState.f.b
+this.b.$0()}},
+ku:{"^":"Mh;a",
+gM:function(a){var z=this.a
+z=C.jn.wG(z,0)^C.jn.BU(z,4294967296)
+z=(~z>>>0)+(z<<15>>>0)&4294967295
+z=((z^z>>>12)>>>0)*5&4294967295
+z=((z^z>>>4)>>>0)*2057&4294967295
+return(z^z>>>16)>>>0},
+D:function(a,b){var z,y
+if(b==null)return!1
+if(b===this)return!0
+if(b instanceof H.ku){z=this.a
+y=b.a
+return z==null?y==null:z===y}return!1}},
+jP:{"^":"Mh;a,b",
+a3:[function(a){var z,y,x,w,v
+if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return a
+z=this.b
+y=z.q(0,a)
+if(y!=null)return["ref",y]
+z.t(0,a,z.gA(z))
+z=J.v(a)
+if(!!z.$isWZ)return["buffer",a]
+if(!!z.$isET)return["typed",a]
+if(!!z.$isDD)return this.BE(a)
+if(!!z.$isym){x=this.gpC()
+w=z.gvc(a)
+w=H.K1(w,x,H.W8(w,"cX",0),null)
+w=P.PW(w,!0,H.W8(w,"cX",0))
+z=z.gUQ(a)
+z=H.K1(z,x,H.W8(z,"cX",0),null)
+return["map",w,P.PW(z,!0,H.W8(z,"cX",0))]}if(!!z.$isvm)return this.xw(a)
+if(!!z.$isvB)this.jf(a)
+if(!!z.$isaL)this.kz(a,"RawReceivePorts can't be transmitted:")
+if(!!z.$isJM)return this.PE(a)
+if(!!z.$isns)return this.ff(a)
+if(!!z.$isL){v=a.$static_name
+if(v==null)this.kz(a,"Closures can't be transmitted:")
+return["function",v]}if(!!z.$isku)return["capability",a.a]
+if(!(a instanceof P.Mh))this.jf(a)
+return["dart",init.classIdExtractor(a),this.jG(init.classFieldsExtractor(a))]},"$1","gpC",2,0,1],
+kz:function(a,b){throw H.b(new P.ub(H.d(b==null?"Can't transmit:":b)+" "+H.d(a)))},
+jf:function(a){return this.kz(a,null)},
+BE:function(a){var z=this.dY(a)
+if(!!a.fixed$length)return["fixed",z]
+if(!a.fixed$length)return["extendable",z]
+if(!a.immutable$list)return["mutable",z]
+if(a.constructor===Array)return["const",z]
+this.kz(a,"Can't serialize indexable: ")},
+dY:function(a){var z,y
+z=[]
+C.Nm.sA(z,a.length)
+for(y=0;y<a.length;++y)z[y]=this.a3(a[y])
+return z},
+jG:function(a){var z
+for(z=0;z<a.length;++z)C.Nm.t(a,z,this.a3(a[z]))
+return a},
+xw:function(a){var z,y,x
+if(!!a.constructor&&a.constructor!==Object)this.kz(a,"Only plain JS Objects are supported:")
+z=Object.keys(a)
+y=[]
+C.Nm.sA(y,z.length)
+for(x=0;x<z.length;++x)y[x]=this.a3(a[z[x]])
+return["js-object",z,y]},
+ff:function(a){if(this.a)return["sendport",a.b,a.a,a.c]
+return["raw sendport",a]},
+PE:function(a){if(this.a)return["sendport",init.globalState.b,a.a,a.b.a]
+return["raw sendport",a]}},
+fP:{"^":"Mh;a,b",
+QS:[function(a){var z,y,x,w,v
+if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return a
+if(typeof a!=="object"||a===null||a.constructor!==Array)throw H.b(P.q("Bad serialized message: "+H.d(a)))
+switch(C.Nm.gtH(a)){case"ref":return this.b[a[1]]
+case"buffer":z=a[1]
+this.b.push(z)
+return z
+case"typed":z=a[1]
+this.b.push(z)
+return z
+case"fixed":z=a[1]
+this.b.push(z)
+y=H.VM(this.NB(z),[null])
+y.fixed$length=Array
+return y
+case"extendable":z=a[1]
+this.b.push(z)
+return H.VM(this.NB(z),[null])
+case"mutable":z=a[1]
+this.b.push(z)
+return this.NB(z)
+case"const":z=a[1]
+this.b.push(z)
+y=H.VM(this.NB(z),[null])
+y.fixed$length=Array
+return y
+case"map":return this.di(a)
+case"sendport":return this.Vf(a)
+case"raw sendport":z=a[1]
+this.b.push(z)
+return z
+case"js-object":return this.ZQ(a)
+case"function":z=init.globalFunctions[a[1]]()
+this.b.push(z)
+return z
+case"capability":return new H.ku(a[1])
+case"dart":x=a[1]
+w=a[2]
+v=init.instanceFromClassId(x)
+this.b.push(v)
+this.NB(w)
+return init.initializeEmptyInstance(x,v,w)
+default:throw H.b("couldn't deserialize: "+H.d(a))}},"$1","gia",2,0,1],
+NB:function(a){var z
+for(z=0;z<a.length;++z)C.Nm.t(a,z,this.QS(a[z]))
+return a},
+di:function(a){var z,y,x,w,v
+z=a[1]
+y=a[2]
+x=P.u5()
+this.b.push(x)
+z=J.iu(z,this.gia()).br(0)
+for(w=J.U6(y),v=0;v<z.length;++v)x.t(0,z[v],this.QS(w.q(y,v)))
+return x},
+Vf:function(a){var z,y,x,w,v,u,t
+z=a[1]
+y=a[2]
+x=a[3]
+w=init.globalState.b
+if(z==null?w==null:z===w){v=init.globalState.z.q(0,y)
+if(v==null)return
+u=v.Zt(x)
+if(u==null)return
+t=new H.JM(u,y)}else t=new H.ns(z,x,y)
+this.b.push(t)
+return t},
+ZQ:function(a){var z,y,x,w,v,u
+z=a[1]
+y=a[2]
+x={}
+this.b.push(x)
+for(w=J.U6(z),v=J.U6(y),u=0;u<w.gA(z);++u)x[w.q(z,u)]=this.QS(v.q(y,u))
+return x}}}],["","",,H,{"^":"",
+e:function(a){return init.types[a]},
+wV:function(a,b){var z
+if(b!=null){z=b.x
+if(z!=null)return z}return!!J.v(a).$isXj},
+d:function(a){var z
+if(typeof a==="string")return a
+if(typeof a==="number"){if(a!==0)return""+a}else if(!0===a)return"true"
+else if(!1===a)return"false"
+else if(a==null)return"null"
+z=J.A(a)
+if(typeof z!=="string")throw H.b(H.G(a))
+return z},
+wP:function(a){var z=a.$identityHash
+if(z==null){z=Math.random()*0x3fffffff|0
+a.$identityHash=z}return z},
+l:function(a){var z,y,x,w,v,u,t,s
+z=J.v(a)
+y=z.constructor
+if(typeof y=="function"){x=y.name
+w=typeof x==="string"?x:null}else w=null
+if(w==null||z===C.Ok||!!J.v(a).$isk){v=C.w2(a)
+if(v==="Object"){u=a.constructor
+if(typeof u=="function"){t=String(u).match(/^\s*function\s*([\w$]*)\s*\(/)
+s=t==null?null:t[1]
+if(typeof s==="string"&&/^\w+$/.test(s))w=s}if(w==null)w=v}else w=v}w=w
+if(w.length>1&&C.xB.J(w,0)===36)w=C.xB.G(w,1)
+return function(b,c){return b.replace(/[^<,> ]+/g,function(d){return c[d]||d})}(w+H.i(H.j(a),0,null),init.mangledGlobalNames)},
+H:function(a){return"Instance of '"+H.l(a)+"'"},
+VK:function(a,b){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(H.G(a))
+return a[b]},
+aw:function(a,b,c){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(H.G(a))
+a[b]=c},
+HY:function(a,b){var z
+if(typeof b!=="number"||Math.floor(b)!==b)return new P.AT(!0,b,"index",null)
+z=J.Hm(a)
+if(b<0||b>=z)return P.Cf(b,a,"index",null,z)
+return P.F(b,"index",null)},
+G:function(a){return new P.AT(!0,a,null,null)},
+fI:function(a){return a},
+Yx:function(a){return a},
+b:function(a){var z
+if(a==null)a=new P.B()
+z=new Error()
+z.dartException=a
+if("defineProperty" in Object){Object.defineProperty(z,"message",{get:H.J})
+z.name=""}else z.toString=H.J
+return z},
+J:function(){return J.A(this.dartException)},
+vh:function(a){throw H.b(a)},
+lk:function(a){throw H.b(new P.UV(a))},
+p:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+z=new H.Hk(a)
+if(a==null)return
+if(typeof a!=="object")return a
+if("dartException" in a)return z.$1(a.dartException)
+else if(!("message" in a))return a
+y=a.message
+if("number" in a&&typeof a.number=="number"){x=a.number
+w=x&65535
+if((C.jn.wG(x,16)&8191)===10)switch(w){case 438:return z.$1(H.T3(H.d(y)+" (Error "+w+")",null))
+case 445:case 5007:v=H.d(y)+" (Error "+w+")"
+return z.$1(new H.ZQ(v,null))}}if(a instanceof TypeError){u=$.$get$U2()
+t=$.$get$k1()
+s=$.$get$Re()
+r=$.$get$fN()
+q=$.$get$qi()
+p=$.$get$rZ()
+o=$.$get$BX()
+$.$get$tt()
+n=$.$get$dt()
+m=$.$get$A7()
+l=u.qS(y)
+if(l!=null)return z.$1(H.T3(y,l))
+else{l=t.qS(y)
+if(l!=null){l.method="call"
+return z.$1(H.T3(y,l))}else{l=s.qS(y)
+if(l==null){l=r.qS(y)
+if(l==null){l=q.qS(y)
+if(l==null){l=p.qS(y)
+if(l==null){l=o.qS(y)
+if(l==null){l=r.qS(y)
+if(l==null){l=n.qS(y)
+if(l==null){l=m.qS(y)
+v=l!=null}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0
+if(v)return z.$1(new H.ZQ(y,l==null?null:l.method))}}return z.$1(new H.vV(typeof y==="string"?y:""))}if(a instanceof RangeError){if(typeof y==="string"&&y.indexOf("call stack")!==-1)return new P.VS()
+y=function(b){try{return String(b)}catch(k){}return null}(a)
+return z.$1(new P.AT(!1,null,null,typeof y==="string"?y.replace(/^RangeError:\s*/,""):y))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof y==="string"&&y==="too much recursion")return new P.VS()
+return a},
+ts:function(a){var z
+if(a==null)return new H.XO(a,null)
+z=a.$cachedTrace
+if(z!=null)return z
+return a.$cachedTrace=new H.XO(a,null)},
+CU:function(a){if(a==null||typeof a!='object')return J.hf(a)
+else return H.wP(a)},
+B7:function(a,b){var z,y,x,w
+z=a.length
+for(y=0;y<z;y=w){x=y+1
+w=x+1
+b.t(0,a[y],a[x])}return b},
+ft:function(a,b,c,d,e,f,g){switch(c){case 0:return H.zd(b,new H.dr(a))
+case 1:return H.zd(b,new H.TL(a,d))
+case 2:return H.zd(b,new H.KX(a,d,e))
+case 3:return H.zd(b,new H.uZ(a,d,e,f))
+case 4:return H.zd(b,new H.OQ(a,d,e,f,g))}throw H.b(P.FM("Unsupported number of arguments for wrapped closure"))},
+tR:function(a,b){var z
+if(a==null)return
+z=a.$identity
+if(!!z)return z
+z=function(c,d,e,f){return function(g,h,i,j){return f(c,e,d,g,h,i,j)}}(a,b,init.globalState.d,H.ft)
+a.$identity=z
+return z},
+iA:function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+z=b[0]
+y=z.$callName
+if(!!J.v(c).$iszM){z.$reflectionInfo=c
+x=H.I(z).r}else x=c
+w=d?Object.create(new H.zx().constructor.prototype):Object.create(new H.rT(null,null,null,null).constructor.prototype)
+w.$initialize=w.constructor
+if(d)v=function(){this.$initialize()}
+else{u=$.yj
+$.yj=u+1
+u=new Function("a,b,c,d","this.$initialize(a,b,c,d);"+u)
+v=u}w.constructor=v
+v.prototype=w
+u=!d
+if(u){t=e.length==1&&!0
+s=H.bx(a,z,t)
+s.$reflectionInfo=c}else{w.$static_name=f
+s=z
+t=!1}if(typeof x=="number")r=function(g,h){return function(){return g(h)}}(H.e,x)
+else if(u&&typeof x=="function"){q=t?H.yS:H.DV
+r=function(g,h){return function(){return g.apply({$receiver:h(this)},arguments)}}(x,q)}else throw H.b("Error in reflectionInfo.")
+w.$signature=r
+w[y]=s
+for(u=b.length,p=1;p<u;++p){o=b[p]
+n=o.$callName
+if(n!=null){m=d?o:H.bx(a,o,t)
+w[n]=m}}w["call*"]=s
+w.$requiredArgCount=z.$requiredArgCount
+w.$defaultValues=z.$defaultValues
+return v},
+vq:function(a,b,c,d){var z=H.DV
+switch(b?-1:a){case 0:return function(e,f){return function(){return f(this)[e]()}}(c,z)
+case 1:return function(e,f){return function(g){return f(this)[e](g)}}(c,z)
+case 2:return function(e,f){return function(g,h){return f(this)[e](g,h)}}(c,z)
+case 3:return function(e,f){return function(g,h,i){return f(this)[e](g,h,i)}}(c,z)
+case 4:return function(e,f){return function(g,h,i,j){return f(this)[e](g,h,i,j)}}(c,z)
+case 5:return function(e,f){return function(g,h,i,j,k){return f(this)[e](g,h,i,j,k)}}(c,z)
+default:return function(e,f){return function(){return e.apply(f(this),arguments)}}(d,z)}},
+bx:function(a,b,c){var z,y,x,w,v,u
+if(c)return H.Hf(a,b)
+z=b.$stubName
+y=b.length
+x=a[z]
+w=b==null?x==null:b===x
+v=!w||y>=27
+if(v)return H.vq(y,!w,z,b)
+if(y===0){w=$.mJ
+if(w==null){w=H.E2("self")
+$.mJ=w}w="return function(){return this."+H.d(w)+"."+H.d(z)+"();"
+v=$.yj
+$.yj=v+1
+return new Function(w+H.d(v)+"}")()}u="abcdefghijklmnopqrstuvwxyz".split("").splice(0,y).join(",")
+w="return function("+u+"){return this."
+v=$.mJ
+if(v==null){v=H.E2("self")
+$.mJ=v}v=w+H.d(v)+"."+H.d(z)+"("+u+");"
+w=$.yj
+$.yj=w+1
+return new Function(v+H.d(w)+"}")()},
+Z4:function(a,b,c,d){var z,y
+z=H.DV
+y=H.yS
+switch(b?-1:a){case 0:throw H.b(new H.Eq("Intercepted function with no arguments."))
+case 1:return function(e,f,g){return function(){return f(this)[e](g(this))}}(c,z,y)
+case 2:return function(e,f,g){return function(h){return f(this)[e](g(this),h)}}(c,z,y)
+case 3:return function(e,f,g){return function(h,i){return f(this)[e](g(this),h,i)}}(c,z,y)
+case 4:return function(e,f,g){return function(h,i,j){return f(this)[e](g(this),h,i,j)}}(c,z,y)
+case 5:return function(e,f,g){return function(h,i,j,k){return f(this)[e](g(this),h,i,j,k)}}(c,z,y)
+case 6:return function(e,f,g){return function(h,i,j,k,l){return f(this)[e](g(this),h,i,j,k,l)}}(c,z,y)
+default:return function(e,f,g,h){return function(){h=[g(this)]
+Array.prototype.push.apply(h,arguments)
+return e.apply(f(this),h)}}(d,z,y)}},
+Hf:function(a,b){var z,y,x,w,v,u,t,s
+z=H.oN()
+y=$.P4
+if(y==null){y=H.E2("receiver")
+$.P4=y}x=b.$stubName
+w=b.length
+v=a[x]
+u=b==null?v==null:b===v
+t=!u||w>=28
+if(t)return H.Z4(w,!u,x,b)
+if(w===1){y="return function(){return this."+H.d(z)+"."+H.d(x)+"(this."+H.d(y)+");"
+u=$.yj
+$.yj=u+1
+return new Function(y+H.d(u)+"}")()}s="abcdefghijklmnopqrstuvwxyz".split("").splice(0,w-1).join(",")
+y="return function("+s+"){return this."+H.d(z)+"."+H.d(x)+"(this."+H.d(y)+", "+s+");"
+u=$.yj
+$.yj=u+1
+return new Function(y+H.d(u)+"}")()},
+qm:function(a,b,c,d,e,f){var z
+b.fixed$length=Array
+if(!!J.v(c).$iszM){c.fixed$length=Array
+z=c}else z=c
+return H.iA(a,b,z,!!d,e,f)},
+SE:function(a,b){var z=J.U6(b)
+throw H.b(H.aq(H.l(a),z.C(b,3,z.gA(b))))},
+Go:function(a,b){var z
+if(a!=null)z=(typeof a==="object"||typeof a==="function")&&J.v(a)[b]
+else z=!0
+if(z)return a
+H.SE(a,b)},
+eQ:function(a){throw H.b(new P.t7("Cyclic initialization for static "+H.d(a)))},
+KT:function(a,b,c){return new H.tD(a,b,c,null)},
+N7:function(){return C.KZ},
+Uh:function(){return(Math.random()*0x100000000>>>0)+(Math.random()*0x100000000>>>0)*4294967296},
+VM:function(a,b){a.$builtinTypeInfo=b
+return a},
+j:function(a){if(a==null)return
+return a.$builtinTypeInfo},
+IM:function(a,b){return H.Y9(a["$as"+H.d(b)],H.j(a))},
+W8:function(a,b,c){var z=H.IM(a,b)
+return z==null?null:z[c]},
+Kp:function(a,b){var z=H.j(a)
+return z==null?null:z[b]},
+Ko:function(a,b){if(a==null)return"dynamic"
+else if(typeof a==="object"&&a!==null&&a.constructor===Array)return a[0].builtin$cls+H.i(a,1,b)
+else if(typeof a=="function")return a.builtin$cls
+else if(typeof a==="number"&&Math.floor(a)===a)return C.jn.w(a)
+else return},
+i:function(a,b,c){var z,y,x,w,v,u
+if(a==null)return""
+z=new P.Rn("")
+for(y=b,x=!0,w=!0,v="";y<a.length;++y){if(x)x=!1
+else z.a=v+", "
+u=a[y]
+if(u!=null)w=!1
+v=z.a+=H.d(H.Ko(u,c))}return w?"":"<"+H.d(z)+">"},
+Y9:function(a,b){if(typeof a=="function"){a=a.apply(null,b)
+if(a==null)return a
+if(typeof a==="object"&&a!==null&&a.constructor===Array)return a
+if(typeof a=="function")return a.apply(null,b)}return b},
+hv:function(a,b){var z,y
+if(a==null||b==null)return!0
+z=a.length
+for(y=0;y<z;++y)if(!H.t1(a[y],b[y]))return!1
+return!0},
+IG:function(a,b,c){return a.apply(b,H.IM(b,c))},
+t1:function(a,b){var z,y,x,w,v
+if(a===b)return!0
+if(a==null||b==null)return!0
+if('func' in b)return H.Ly(a,b)
+if('func' in a)return b.builtin$cls==="EH"
+z=typeof a==="object"&&a!==null&&a.constructor===Array
+y=z?a[0]:a
+x=typeof b==="object"&&b!==null&&b.constructor===Array
+w=x?b[0]:b
+if(w!==y){if(!('$is'+H.Ko(w,null) in y.prototype))return!1
+v=y.prototype["$as"+H.d(H.Ko(w,null))]}else v=null
+if(!z&&v==null||!x)return!0
+z=z?a.slice(1):null
+x=x?b.slice(1):null
+return H.hv(H.Y9(v,z),x)},
+Hc:function(a,b,c){var z,y,x,w,v
+z=b==null
+if(z&&a==null)return!0
+if(z)return c
+if(a==null)return!1
+y=a.length
+x=b.length
+if(c){if(y<x)return!1}else if(y!==x)return!1
+for(w=0;w<x;++w){z=a[w]
+v=b[w]
+if(!(H.t1(z,v)||H.t1(v,z)))return!1}return!0},
+Vt:function(a,b){var z,y,x,w,v,u
+if(b==null)return!0
+if(a==null)return!1
+z=Object.getOwnPropertyNames(b)
+z.fixed$length=Array
+y=z
+for(z=y.length,x=0;x<z;++x){w=y[x]
+if(!Object.hasOwnProperty.call(a,w))return!1
+v=b[w]
+u=a[w]
+if(!(H.t1(v,u)||H.t1(u,v)))return!1}return!0},
+Ly:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+if(!('func' in a))return!1
+if("v" in a){if(!("v" in b)&&"ret" in b)return!1}else if(!("v" in b)){z=a.ret
+y=b.ret
+if(!(H.t1(z,y)||H.t1(y,z)))return!1}x=a.args
+w=b.args
+v=a.opt
+u=b.opt
+t=x!=null?x.length:0
+s=w!=null?w.length:0
+r=v!=null?v.length:0
+q=u!=null?u.length:0
+if(t>s)return!1
+if(t+r<s+q)return!1
+if(t===s){if(!H.Hc(x,w,!1))return!1
+if(!H.Hc(v,u,!0))return!1}else{for(p=0;p<t;++p){o=x[p]
+n=w[p]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}for(m=p,l=0;m<s;++l,++m){o=v[l]
+n=w[m]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}for(m=0;m<q;++l,++m){o=v[l]
+n=u[m]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}}return H.Vt(a.named,b.named)},
+F3:function(a){var z=$.n
+return"Instance of "+(z==null?"<Unknown>":z.$1(a))},
+kE:function(a){return H.wP(a)},
+iw:function(a,b,c){Object.defineProperty(a,b,{value:c,enumerable:false,writable:true,configurable:true})},
+w:function(a){var z,y,x,w,v,u
+z=$.n.$1(a)
+y=$.z[z]
+if(y!=null){Object.defineProperty(a,init.dispatchPropertyName,{value:y,enumerable:false,writable:true,configurable:true})
+return y.i}x=$.a[z]
+if(x!=null)return x
+w=init.interceptorsByTag[z]
+if(w==null){z=$.c.$2(a,z)
+if(z!=null){y=$.z[z]
+if(y!=null){Object.defineProperty(a,init.dispatchPropertyName,{value:y,enumerable:false,writable:true,configurable:true})
+return y.i}x=$.a[z]
+if(x!=null)return x
+w=init.interceptorsByTag[z]}}if(w==null)return
+x=w.prototype
+v=z[0]
+if(v==="!"){y=H.C(x)
+$.z[z]=y
+Object.defineProperty(a,init.dispatchPropertyName,{value:y,enumerable:false,writable:true,configurable:true})
+return y.i}if(v==="~"){$.a[z]=x
+return x}if(v==="-"){u=H.C(x)
+Object.defineProperty(Object.getPrototypeOf(a),init.dispatchPropertyName,{value:u,enumerable:false,writable:true,configurable:true})
+return u.i}if(v==="+")return H.Lc(a,x)
+if(v==="*")throw H.b(new P.D(z))
+if(init.leafTags[z]===true){u=H.C(x)
+Object.defineProperty(Object.getPrototypeOf(a),init.dispatchPropertyName,{value:u,enumerable:false,writable:true,configurable:true})
+return u.i}else return H.Lc(a,x)},
+Lc:function(a,b){var z=Object.getPrototypeOf(a)
+Object.defineProperty(z,init.dispatchPropertyName,{value:J.Qu(b,z,null,null),enumerable:false,writable:true,configurable:true})
+return b},
+C:function(a){return J.Qu(a,!1,null,!!a.$isXj)},
+VF:function(a,b,c){var z=b.prototype
+if(init.leafTags[a]===true)return J.Qu(z,!1,null,!!z.$isXj)
+else return J.Qu(z,c,null,null)},
+u:function(){if(!0===$.M)return
+$.M=!0
+H.Z1()},
+Z1:function(){var z,y,x,w,v,u,t,s
+$.z=Object.create(null)
+$.a=Object.create(null)
+H.f()
+z=init.interceptorsByTag
+y=Object.getOwnPropertyNames(z)
+if(typeof window!="undefined"){window
+x=function(){}
+for(w=0;w<y.length;++w){v=y[w]
+u=$.x7.$1(v)
+if(u!=null){t=H.VF(v,z[v],u)
+if(t!=null){Object.defineProperty(u,init.dispatchPropertyName,{value:t,enumerable:false,writable:true,configurable:true})
+x.prototype=u}}}}for(w=0;w<y.length;++w){v=y[w]
+if(/^[A-Za-z_]/.test(v)){s=z[v]
+z["!"+v]=s
+z["~"+v]=s
+z["-"+v]=s
+z["+"+v]=s
+z["*"+v]=s}}},
+f:function(){var z,y,x,w,v,u,t
+z=C.M1()
+z=H.ud(C.Mc,H.ud(C.hQ,H.ud(C.XQ,H.ud(C.XQ,H.ud(C.Jh,H.ud(C.lR,H.ud(C.ur(C.w2),z)))))))
+if(typeof dartNativeDispatchHooksTransformer!="undefined"){y=dartNativeDispatchHooksTransformer
+if(typeof y=="function")y=[y]
+if(y.constructor==Array)for(x=0;x<y.length;++x){w=y[x]
+if(typeof w=="function")z=w(z)||z}}v=z.getTag
+u=z.getUnknownTag
+t=z.prototypeForTag
+$.n=new H.y(v)
+$.c=new H.dC(u)
+$.x7=new H.wN(t)},
+ud:function(a,b){return a(b)||b},
+FD:{"^":"Mh;a,b,c,d,e,f,r,x",static:{
+I:function(a){var z,y,x
+z=a.$reflectionInfo
+if(z==null)return
+z.fixed$length=Array
+z=z
+y=z[0]
+x=z[1]
+return new H.FD(a,z,(y&1)===1,y>>1,x>>1,(x&1)===1,z[2],null)}}},
+Zr:{"^":"Mh;a,b,c,d,e,f",
+qS:function(a){var z,y,x
+z=new RegExp(this.a).exec(a)
+if(z==null)return
+y=Object.create(null)
+x=this.b
+if(x!==-1)y.arguments=z[x+1]
+x=this.c
+if(x!==-1)y.argumentsExpr=z[x+1]
+x=this.d
+if(x!==-1)y.expr=z[x+1]
+x=this.e
+if(x!==-1)y.method=z[x+1]
+x=this.f
+if(x!==-1)y.receiver=z[x+1]
+return y},
+static:{
+cM:function(a){var z,y,x,w,v,u
+a=a.replace(String({}),'$receiver$').replace(/[[\]{}()*+?.\\^$|]/g,"\\$&")
+z=a.match(/\\\$[a-zA-Z]+\\\$/g)
+if(z==null)z=[]
+y=z.indexOf("\\$arguments\\$")
+x=z.indexOf("\\$argumentsExpr\\$")
+w=z.indexOf("\\$expr\\$")
+v=z.indexOf("\\$method\\$")
+u=z.indexOf("\\$receiver\\$")
+return new H.Zr(a.replace('\\$arguments\\$','((?:x|[^x])*)').replace('\\$argumentsExpr\\$','((?:x|[^x])*)').replace('\\$expr\\$','((?:x|[^x])*)').replace('\\$method\\$','((?:x|[^x])*)').replace('\\$receiver\\$','((?:x|[^x])*)'),y,x,w,v,u)},
+S7:function(a){return function($expr$){var $argumentsExpr$='$arguments$'
+try{$expr$.$method$($argumentsExpr$)}catch(z){return z.message}}(a)},
+Mj:function(a){return function($expr$){try{$expr$.$method$}catch(z){return z.message}}(a)}}},
+ZQ:{"^":"Ge;a,b",
+w:function(a){var z=this.b
+if(z==null)return"NullError: "+H.d(this.a)
+return"NullError: method not found: '"+H.d(z)+"' on null"}},
+az:{"^":"Ge;a,b,c",
+w:function(a){var z,y
+z=this.b
+if(z==null)return"NoSuchMethodError: "+H.d(this.a)
+y=this.c
+if(y==null)return"NoSuchMethodError: method not found: '"+H.d(z)+"' ("+H.d(this.a)+")"
+return"NoSuchMethodError: method not found: '"+H.d(z)+"' on '"+H.d(y)+"' ("+H.d(this.a)+")"},
+static:{
+T3:function(a,b){var z,y
+z=b==null
+y=z?null:b.method
+return new H.az(a,y,z?null:b.receiver)}}},
+vV:{"^":"Ge;a",
+w:function(a){var z=this.a
+return z.length===0?"Error":"Error: "+z}},
+Hk:{"^":"L:1;a",
+$1:function(a){if(!!J.v(a).$isGe)if(a.$thrownJsError==null)a.$thrownJsError=this.a
+return a}},
+XO:{"^":"Mh;a,b",
+w:function(a){var z,y
+z=this.b
+if(z!=null)return z
+z=this.a
+y=z!==null&&typeof z==="object"?z.stack:null
+z=y==null?"":y
+this.b=z
+return z}},
+dr:{"^":"L:0;a",
+$0:function(){return this.a.$0()}},
+TL:{"^":"L:0;a,b",
+$0:function(){return this.a.$1(this.b)}},
+KX:{"^":"L:0;a,b,c",
+$0:function(){return this.a.$2(this.b,this.c)}},
+uZ:{"^":"L:0;a,b,c,d",
+$0:function(){return this.a.$3(this.b,this.c,this.d)}},
+OQ:{"^":"L:0;a,b,c,d,e",
+$0:function(){return this.a.$4(this.b,this.c,this.d,this.e)}},
+L:{"^":"Mh;",
+w:function(a){return"Closure '"+H.l(this)+"'"},
+gQl:function(){return this},
+gQl:function(){return this}},
+Bp:{"^":"L;"},
+zx:{"^":"Bp;",
+w:function(a){var z=this.$static_name
+if(z==null)return"Closure of unknown static method"
+return"Closure '"+z+"'"}},
+rT:{"^":"Bp;a,b,c,d",
+D:function(a,b){if(b==null)return!1
+if(this===b)return!0
+if(!(b instanceof H.rT))return!1
+return this.a===b.a&&this.b===b.b&&this.c===b.c},
+gM:function(a){var z,y
+z=this.c
+if(z==null)y=H.wP(this.a)
+else y=typeof z!=="object"?J.hf(z):H.wP(z)
+return(y^H.wP(this.b))>>>0},
+w:function(a){var z=this.c
+if(z==null)z=this.a
+return"Closure '"+H.d(this.d)+"' of "+H.H(z)},
+static:{
+DV:function(a){return a.a},
+yS:function(a){return a.c},
+oN:function(){var z=$.mJ
+if(z==null){z=H.E2("self")
+$.mJ=z}return z},
+E2:function(a){var z,y,x,w,v
+z=new H.rT("self","target","receiver","name")
+y=Object.getOwnPropertyNames(z)
+y.fixed$length=Array
+x=y
+for(y=x.length,w=0;w<y;++w){v=x[w]
+if(z[v]===a)return v}}}},
+Pe:{"^":"Ge;a",
+w:function(a){return this.a},
+static:{
+aq:function(a,b){return new H.Pe("CastError: Casting value of type "+H.d(a)+" to incompatible type "+H.d(b))}}},
+Eq:{"^":"Ge;a",
+w:function(a){return"RuntimeError: "+H.d(this.a)}},
+lb:{"^":"Mh;"},
+tD:{"^":"lb;a,b,c,d",
+Zg:function(a){var z=this.LC(a)
+return z==null?!1:H.Ly(z,this.za())},
+LC:function(a){var z=J.v(a)
+return"$signature" in z?z.$signature():null},
+za:function(){var z,y,x,w,v,u,t
+z={func:"dynafunc"}
+y=this.a
+x=J.v(y)
+if(!!x.$isnr)z.v=true
+else if(!x.$ishJ)z.ret=y.za()
+y=this.b
+if(y!=null&&y.length!==0)z.args=H.Dz(y)
+y=this.c
+if(y!=null&&y.length!==0)z.opt=H.Dz(y)
+y=this.d
+if(y!=null){w=Object.create(null)
+v=H.kU(y)
+for(x=v.length,u=0;u<x;++u){t=v[u]
+w[t]=y[t].za()}z.named=w}return z},
+w:function(a){var z,y,x,w,v,u,t,s
+z=this.b
+if(z!=null)for(y=z.length,x="(",w=!1,v=0;v<y;++v,w=!0){u=z[v]
+if(w)x+=", "
+x+=J.A(u)}else{x="("
+w=!1}z=this.c
+if(z!=null&&z.length!==0){x=(w?x+", ":x)+"["
+for(y=z.length,w=!1,v=0;v<y;++v,w=!0){u=z[v]
+if(w)x+=", "
+x+=J.A(u)}x+="]"}else{z=this.d
+if(z!=null){x=(w?x+", ":x)+"{"
+t=H.kU(z)
+for(y=t.length,w=!1,v=0;v<y;++v,w=!0){s=t[v]
+if(w)x+=", "
+x+=H.d(z[s].za())+" "+s}x+="}"}}return x+(") -> "+J.A(this.a))},
+static:{
+Dz:function(a){var z,y,x
+a=a
+z=[]
+for(y=a.length,x=0;x<y;++x)z.push(a[x].za())
+return z}}},
+hJ:{"^":"lb;",
+w:function(a){return"dynamic"},
+za:function(){return}},
+N5:{"^":"Mh;a,b,c,d,e,f,r",
+gA:function(a){return this.a},
+gl0:function(a){return this.a===0},
+gvc:function(a){return H.VM(new H.i5(this),[H.Kp(this,0)])},
+gUQ:function(a){return H.K1(this.gvc(this),new H.Mw(this),H.Kp(this,0),H.Kp(this,1))},
+x4:function(a,b){var z,y
+if(typeof b==="string"){z=this.b
+if(z==null)return!1
+return this.Xu(z,b)}else if(typeof b==="number"&&(b&0x3ffffff)===b){y=this.c
+if(y==null)return!1
+return this.Xu(y,b)}else return this.CX(b)},
+CX:function(a){var z=this.d
+if(z==null)return!1
+return this.X(this.i(z,this.xi(a)),a)>=0},
+q:function(a,b){var z,y,x
+if(typeof b==="string"){z=this.b
+if(z==null)return
+y=this.i(z,b)
+return y==null?null:y.b}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.c
+if(x==null)return
+y=this.i(x,b)
+return y==null?null:y.b}else return this.aa(b)},
+aa:function(a){var z,y,x
+z=this.d
+if(z==null)return
+y=this.i(z,this.xi(a))
+x=this.X(y,a)
+if(x<0)return
+return y[x].b},
+t:function(a,b,c){var z,y,x,w,v,u
+if(typeof b==="string"){z=this.b
+if(z==null){z=this.j()
+this.b=z}this.m(z,b,c)}else if(typeof b==="number"&&(b&0x3ffffff)===b){y=this.c
+if(y==null){y=this.j()
+this.c=y}this.m(y,b,c)}else{x=this.d
+if(x==null){x=this.j()
+this.d=x}w=this.xi(b)
+v=this.i(x,w)
+if(v==null)this.n(x,w,[this.Y(b,c)])
+else{u=this.X(v,b)
+if(u>=0)v[u].b=c
+else v.push(this.Y(b,c))}}},
+Rz:function(a,b){if(typeof b==="string")return this.Vz(this.b,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Vz(this.c,b)
+else return this.WM(b)},
+WM:function(a){var z,y,x,w
+z=this.d
+if(z==null)return
+y=this.i(z,this.xi(a))
+x=this.X(y,a)
+if(x<0)return
+w=y.splice(x,1)[0]
+this.Yp(w)
+return w.b},
+V1:function(a){if(this.a>0){this.f=null
+this.e=null
+this.d=null
+this.c=null
+this.b=null
+this.a=0
+this.r=this.r+1&67108863}},
+U:function(a,b){var z,y
+z=this.e
+y=this.r
+for(;z!=null;){b.$2(z.a,z.b)
+if(y!==this.r)throw H.b(new P.UV(this))
+z=z.c}},
+m:function(a,b,c){var z=this.i(a,b)
+if(z==null)this.n(a,b,this.Y(b,c))
+else z.b=c},
+Vz:function(a,b){var z
+if(a==null)return
+z=this.i(a,b)
+if(z==null)return
+this.Yp(z)
+this.R(a,b)
+return z.b},
+Y:function(a,b){var z,y
+z=new H.db(a,b,null,null)
+if(this.e==null){this.f=z
+this.e=z}else{y=this.f
+z.d=y
+y.c=z
+this.f=z}++this.a
+this.r=this.r+1&67108863
+return z},
+Yp:function(a){var z,y
+z=a.d
+y=a.c
+if(z==null)this.e=y
+else z.c=y
+if(y==null)this.f=z
+else y.d=z;--this.a
+this.r=this.r+1&67108863},
+xi:function(a){return J.hf(a)&0x3ffffff},
+X:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(J.RM(a[y].a,b))return y
+return-1},
+w:function(a){return P.vW(this)},
+i:function(a,b){return a[b]},
+n:function(a,b,c){a[b]=c},
+R:function(a,b){delete a[b]},
+Xu:function(a,b){return this.i(a,b)!=null},
+j:function(){var z=Object.create(null)
+this.n(z,"<non-identifier-key>",z)
+this.R(z,"<non-identifier-key>")
+return z},
+$isym:1},
+Mw:{"^":"L:1;a",
+$1:function(a){return this.a.q(0,a)}},
+db:{"^":"Mh;a,b,c,d"},
+i5:{"^":"cX;a",
+gA:function(a){return this.a.a},
+gk:function(a){var z,y
+z=this.a
+y=new H.N6(z,z.r,null,null)
+y.c=z.e
+return y},
+U:function(a,b){var z,y,x
+z=this.a
+y=z.e
+x=z.r
+for(;y!=null;){b.$1(y.a)
+if(x!==z.r)throw H.b(new P.UV(z))
+y=y.c}},
+$isqC:1},
+N6:{"^":"Mh;a,b,c,d",
+gl:function(){return this.d},
+F:function(){var z=this.a
+if(this.b!==z.r)throw H.b(new P.UV(z))
+else{z=this.c
+if(z==null){this.d=null
+return!1}else{this.d=z.a
+this.c=z.c
+return!0}}}},
+y:{"^":"L:1;a",
+$1:function(a){return this.a(a)}},
+dC:{"^":"L:8;a",
+$2:function(a,b){return this.a(a,b)}},
+wN:{"^":"L:9;a",
+$1:function(a){return this.a(a)}},
+VR:{"^":"Mh;a,b,c,d",
+w:function(a){return"RegExp/"+this.a+"/"},
+static:{
+v4:function(a,b,c,d){var z,y,x,w
+H.Yx(a)
+z=b?"m":""
+y=c?"":"i"
+x=d?"g":""
+w=function(e,f){try{return new RegExp(e,f)}catch(v){return v}}(a,z+y+x)
+if(w instanceof RegExp)return w
+throw H.b(new P.aE("Illegal RegExp pattern ("+String(w)+")",a,null))}}}}],["","",,H,{"^":"",
+Wp:function(){return new P.lj("No element")},
+Am:function(){return new P.lj("Too many elements")},
+ar:function(){return new P.lj("Too few elements")},
+ho:{"^":"cX;",
+gk:function(a){return new H.a7(this,this.gA(this),0,null)},
+U:function(a,b){var z,y
+z=this.gA(this)
+for(y=0;y<z;++y){b.$1(this.W(0,y))
+if(z!==this.gA(this))throw H.b(new P.UV(this))}},
+S:function(a,b){return this.p(this,b)},
+tt:function(a,b){var z,y
+z=H.VM([],[H.W8(this,"ho",0)])
+C.Nm.sA(z,this.gA(this))
+for(y=0;y<this.gA(this);++y)z[y]=this.W(0,y)
+return z},
+br:function(a){return this.tt(a,!0)},
+$isqC:1},
+a7:{"^":"Mh;a,b,c,d",
+gl:function(){return this.d},
+F:function(){var z,y,x,w
+z=this.a
+y=J.U6(z)
+x=y.gA(z)
+if(this.b!==x)throw H.b(new P.UV(z))
+w=this.c
+if(w>=x){this.d=null
+return!1}this.d=y.W(z,w);++this.c
+return!0}},
+i1:{"^":"cX;a,b",
+gk:function(a){var z=new H.MH(null,J.IT(this.a),this.b)
+z.$builtinTypeInfo=this.$builtinTypeInfo
+return z},
+gA:function(a){return J.Hm(this.a)},
+$ascX:function(a,b){return[b]},
+static:{
+K1:function(a,b,c,d){if(!!J.v(a).$isqC)return H.VM(new H.xy(a,b),[c,d])
+return H.VM(new H.i1(a,b),[c,d])}}},
+xy:{"^":"i1;a,b",$isqC:1},
+MH:{"^":"An;a,b,c",
+F:function(){var z=this.b
+if(z.F()){this.a=this.Mi(z.gl())
+return!0}this.a=null
+return!1},
+gl:function(){return this.a},
+Mi:function(a){return this.c.$1(a)}},
+A8:{"^":"ho;a,b",
+gA:function(a){return J.Hm(this.a)},
+W:function(a,b){return this.Mi(J.GA(this.a,b))},
+Mi:function(a){return this.b.$1(a)},
+$asho:function(a,b){return[b]},
+$ascX:function(a,b){return[b]},
+$isqC:1},
+U5:{"^":"cX;a,b",
+gk:function(a){var z=new H.SO(J.IT(this.a),this.b)
+z.$builtinTypeInfo=this.$builtinTypeInfo
+return z}},
+SO:{"^":"An;a,b",
+F:function(){for(var z=this.a;z.F();)if(this.Mi(z.gl()))return!0
+return!1},
+gl:function(){return this.a.gl()},
+Mi:function(a){return this.b.$1(a)}},
+SU:{"^":"Mh;"}}],["","",,H,{"^":"",
+kU:function(a){var z=H.VM(a?Object.keys(a):[],[null])
+z.fixed$length=Array
+return z}}],["","",,P,{"^":"",
+Oj:function(){var z,y,x
+z={}
+if(self.scheduleImmediate!=null)return P.EX()
+if(self.MutationObserver!=null&&self.document!=null){y=self.document.createElement("div")
+x=self.document.createElement("span")
+z.a=null
+new self.MutationObserver(H.tR(new P.th(z),1)).observe(y,{childList:true})
+return new P.ha(z,y,x)}else if(self.setImmediate!=null)return P.yt()
+return P.qW()},
+ZV:[function(a){++init.globalState.f.b
+self.scheduleImmediate(H.tR(new P.C6(a),0))},"$1","EX",2,0,3],
+oA:[function(a){++init.globalState.f.b
+self.setImmediate(H.tR(new P.Ft(a),0))},"$1","yt",2,0,3],
+Bz:[function(a){P.YF(C.RT,a)},"$1","qW",2,0,3],
+VH:function(a,b){var z=H.N7()
+z=H.KT(z,[z,z]).Zg(a)
+if(z){b.toString
+return a}else{b.toString
+return a}},
+pu:function(){var z,y
+for(;z=$.S6,z!=null;){$.mg=null
+y=z.b
+$.S6=y
+if(y==null)$.k8=null
+z.a.$0()}},
+eN:[function(){$.UD=!0
+try{P.pu()}finally{$.mg=null
+$.UD=!1
+if($.S6!=null)$.$get$Wc().$1(P.UI())}},"$0","UI",0,0,2],
+eW:function(a){var z=new P.OM(a,null)
+if($.S6==null){$.k8=z
+$.S6=z
+if(!$.UD)$.$get$Wc().$1(P.UI())}else{$.k8.b=z
+$.k8=z}},
+rR:function(a){var z,y,x
+z=$.S6
+if(z==null){P.eW(a)
+$.mg=$.k8
+return}y=new P.OM(a,null)
+x=$.mg
+if(x==null){y.b=z
+$.mg=y
+$.S6=y}else{y.b=x.b
+x.b=y
+$.mg=y
+if(y.b==null)$.k8=y}},
+rb:function(a){var z=$.X3
+if(C.NU===z){P.Tk(null,null,C.NU,a)
+return}z.toString
+P.Tk(null,null,z,z.kb(a,!0))},
+FE:function(a,b,c){var z,y,x,w,v,u,t
+try{b.$1(a.$0())}catch(u){t=H.p(u)
+z=t
+y=H.ts(u)
+$.X3.toString
+x=null
+if(x==null)c.$2(z,y)
+else{t=J.YA(x)
+w=t
+v=x.gII()
+c.$2(w,v)}}},
+NX:function(a,b,c,d){var z=a.Gv(0)
+if(!!J.v(z).$isb8)z.wM(new P.v1(b,c,d))
+else b.ZL(c,d)},
+TB:function(a,b){return new P.uR(a,b)},
+ww:function(a,b){var z=$.X3
+if(z===C.NU){z.toString
+return P.YF(a,b)}return P.YF(a,z.kb(b,!0))},
+YF:function(a,b){var z=C.jn.BU(a.a,1000)
+return H.cy(z<0?0:z,b)},
+L2:function(a,b,c,d,e){var z={}
+z.a=d
+P.rR(new P.pK(z,e))},
+T8:function(a,b,c,d){var z,y
+y=$.X3
+if(y===c)return d.$0()
+$.X3=c
+z=y
+try{y=d.$0()
+return y}finally{$.X3=z}},
+yv:function(a,b,c,d,e){var z,y
+y=$.X3
+if(y===c)return d.$1(e)
+$.X3=c
+z=y
+try{y=d.$1(e)
+return y}finally{$.X3=z}},
+Qx:function(a,b,c,d,e,f){var z,y
+y=$.X3
+if(y===c)return d.$2(e,f)
+$.X3=c
+z=y
+try{y=d.$2(e,f)
+return y}finally{$.X3=z}},
+Tk:function(a,b,c,d){var z=C.NU!==c
+if(z)d=c.kb(d,!(!z||!1))
+P.eW(d)},
+th:{"^":"L:1;a",
+$1:function(a){var z,y;--init.globalState.f.b
+z=this.a
+y=z.a
+z.a=null
+y.$0()}},
+ha:{"^":"L:10;a,b,c",
+$1:function(a){var z,y;++init.globalState.f.b
+this.a.a=a
+z=this.b
+y=this.c
+z.firstChild?z.removeChild(y):z.appendChild(y)}},
+C6:{"^":"L:0;a",
+$0:function(){--init.globalState.f.b
+this.a.$0()}},
+Ft:{"^":"L:0;a",
+$0:function(){--init.globalState.f.b
+this.a.$0()}},
+b8:{"^":"Mh;"},
+Fe:{"^":"Mh;a,b,c,d,e"},
+vs:{"^":"Mh;YM:a@,b,O1:c<",
+Rx:function(a,b){var z,y
+z=$.X3
+if(z!==C.NU){z.toString
+if(b!=null)b=P.VH(b,z)}y=H.VM(new P.vs(0,z,null),[null])
+this.xf(new P.Fe(null,y,b==null?1:3,a,b))
+return y},
+ml:function(a){return this.Rx(a,null)},
+wM:function(a){var z,y
+z=$.X3
+y=new P.vs(0,z,null)
+y.$builtinTypeInfo=this.$builtinTypeInfo
+if(z!==C.NU)z.toString
+this.xf(new P.Fe(null,y,8,a,null))
+return y},
+xf:function(a){var z,y
+z=this.a
+if(z<=1){a.a=this.c
+this.c=a}else{if(z===2){z=this.c
+y=z.a
+if(y<4){z.xf(a)
+return}this.a=y
+this.c=z.c}z=this.b
+z.toString
+P.Tk(null,null,z,new P.da(this,a))}},
+jQ:function(a){var z,y,x,w,v,u
+z={}
+z.a=a
+if(a==null)return
+y=this.a
+if(y<=1){x=this.c
+this.c=a
+if(x!=null){for(w=a;v=w.a,v!=null;w=v);w.a=x}}else{if(y===2){y=this.c
+u=y.a
+if(u<4){y.jQ(a)
+return}this.a=u
+this.c=y.c}z.a=this.N8(a)
+y=this.b
+y.toString
+P.Tk(null,null,y,new P.oQ(z,this))}},
+ah:function(){var z=this.c
+this.c=null
+return this.N8(z)},
+N8:function(a){var z,y,x
+for(z=a,y=null;z!=null;y=z,z=x){x=z.a
+z.a=y}return y},
+HH:function(a){var z
+if(!!J.v(a).$isb8)P.A9(a,this)
+else{z=this.ah()
+this.a=4
+this.c=a
+P.HZ(this,z)}},
+X2:function(a){var z=this.ah()
+this.a=4
+this.c=a
+P.HZ(this,z)},
+ZL:[function(a,b){var z=this.ah()
+this.a=8
+this.c=new P.OH(a,b)
+P.HZ(this,z)},function(a){return this.ZL(a,null)},"yk","$2","$1","gFa",2,2,11,0],
+$isb8:1,
+static:{
+k3:function(a,b){var z,y,x,w
+b.sYM(1)
+try{a.Rx(new P.pV(b),new P.U7(b))}catch(x){w=H.p(x)
+z=w
+y=H.ts(x)
+P.rb(new P.vr(b,z,y))}},
+A9:function(a,b){var z,y,x
+for(;z=a.a,z===2;)a=a.c
+y=b.c
+if(z>=4){b.c=null
+x=b.N8(y)
+b.a=a.a
+b.c=a.c
+P.HZ(b,x)}else{b.a=2
+b.c=a
+a.jQ(y)}},
+HZ:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z={}
+z.a=a
+for(y=a;!0;){x={}
+w=y.a===8
+if(b==null){if(w){z=y.c
+y=y.b
+x=z.a
+z=z.b
+y.toString
+P.L2(null,null,y,x,z)}return}for(;v=b.a,v!=null;b=v){b.a=null
+P.HZ(z.a,b)}y=z.a
+u=y.c
+x.a=w
+x.b=u
+t=!w
+if(t){s=b.c
+s=(s&1)!==0||s===8}else s=!0
+if(s){s=b.b
+r=s.b
+if(w){q=y.b
+q.toString
+q=q==null?r==null:q===r
+if(!q)r.toString
+else q=!0
+q=!q}else q=!1
+if(q){z=y.b
+y=u.a
+x=u.b
+z.toString
+P.L2(null,null,z,y,x)
+return}p=$.X3
+if(p==null?r!=null:p!==r)$.X3=r
+else p=null
+y=b.c
+if(y===8)new P.RT(z,x,w,b,r).$0()
+else if(t){if((y&1)!==0)new P.rq(x,w,b,u,r).$0()}else if((y&2)!==0)new P.RW(z,x,b,r).$0()
+if(p!=null)$.X3=p
+y=x.b
+t=J.v(y)
+if(!!t.$isb8){if(!!t.$isvs)if(y.a>=4){o=s.c
+s.c=null
+b=s.N8(o)
+s.a=y.a
+s.c=y.c
+z.a=y
+continue}else P.A9(y,s)
+else P.k3(y,s)
+return}}n=b.b
+o=n.c
+n.c=null
+b=n.N8(o)
+y=x.a
+x=x.b
+if(!y){n.a=4
+n.c=x}else{n.a=8
+n.c=x}z.a=n
+y=n}}}},
+da:{"^":"L:0;a,b",
+$0:function(){P.HZ(this.a,this.b)}},
+oQ:{"^":"L:0;a,b",
+$0:function(){P.HZ(this.b,this.a.a)}},
+pV:{"^":"L:1;a",
+$1:function(a){this.a.X2(a)}},
+U7:{"^":"L:12;a",
+$2:function(a,b){this.a.ZL(a,b)},
+$1:function(a){return this.$2(a,null)}},
+vr:{"^":"L:0;a,b,c",
+$0:function(){this.a.ZL(this.b,this.c)}},
+rq:{"^":"L:2;a,b,c,d,e",
+$0:function(){var z,y,x,w
+try{x=this.a
+x.b=this.e.FI(this.c.d,this.d)
+x.a=!1}catch(w){x=H.p(w)
+z=x
+y=H.ts(w)
+x=this.a
+x.b=new P.OH(z,y)
+x.a=!0}}},
+RW:{"^":"L:2;a,b,c,d",
+$0:function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+z=this.a.a.c
+y=!0
+r=this.c
+if(r.c===6){x=r.d
+try{y=this.d.FI(x,J.YA(z))}catch(q){r=H.p(q)
+w=r
+v=H.ts(q)
+r=J.YA(z)
+p=w
+o=(r==null?p==null:r===p)?z:new P.OH(w,v)
+r=this.b
+r.b=o
+r.a=!0
+return}}u=r.e
+if(y&&u!=null)try{r=u
+p=H.N7()
+p=H.KT(p,[p,p]).Zg(r)
+n=this.d
+m=this.b
+if(p)m.b=n.mg(u,J.YA(z),z.gII())
+else m.b=n.FI(u,J.YA(z))
+m.a=!1}catch(q){r=H.p(q)
+t=r
+s=H.ts(q)
+r=J.YA(z)
+p=t
+o=(r==null?p==null:r===p)?z:new P.OH(t,s)
+r=this.b
+r.b=o
+r.a=!0}}},
+RT:{"^":"L:2;a,b,c,d,e",
+$0:function(){var z,y,x,w,v,u
+z=null
+try{z=this.e.Gr(this.d.d)}catch(w){v=H.p(w)
+y=v
+x=H.ts(w)
+if(this.c){v=this.a.a.c.a
+u=y
+u=v==null?u==null:v===u
+v=u}else v=!1
+u=this.b
+if(v)u.b=this.a.a.c
+else u.b=new P.OH(y,x)
+u.a=!0
+return}if(!!J.v(z).$isb8){if(z instanceof P.vs&&z.gYM()>=4){if(z.gYM()===8){v=this.b
+v.b=z.gO1()
+v.a=!0}return}v=this.b
+v.b=z.ml(new P.jZ(this.a.a))
+v.a=!1}}},
+jZ:{"^":"L:1;a",
+$1:function(a){return this.a}},
+OM:{"^":"Mh;a,b"},
+qh:{"^":"Mh;",
+U:function(a,b){var z,y
+z={}
+y=H.VM(new P.vs(0,$.X3,null),[null])
+z.a=null
+z.a=this.X5(new P.lz(z,this,b,y),!0,new P.M4(y),y.gFa())
+return y},
+gA:function(a){var z,y
+z={}
+y=H.VM(new P.vs(0,$.X3,null),[P.KN])
+z.a=0
+this.X5(new P.B5(z),!0,new P.PI(z,y),y.gFa())
+return y}},
+lz:{"^":"L;a,b,c,d",
+$1:function(a){P.FE(new P.Rl(this.c,a),new P.Jb(),P.TB(this.a.a,this.d))},
+$signature:function(){return H.IG(function(a){return{func:1,args:[a]}},this.b,"qh")}},
+Rl:{"^":"L:0;a,b",
+$0:function(){return this.a.$1(this.b)}},
+Jb:{"^":"L:1;",
+$1:function(a){}},
+M4:{"^":"L:0;a",
+$0:function(){this.a.HH(null)}},
+B5:{"^":"L:1;a",
+$1:function(a){++this.a.a}},
+PI:{"^":"L:0;a,b",
+$0:function(){this.b.HH(this.a.a)}},
+MO:{"^":"Mh;"},
+NO:{"^":"Mh;"},
+aA:{"^":"Mh;"},
+v1:{"^":"L:0;a,b,c",
+$0:function(){return this.a.ZL(this.b,this.c)}},
+uR:{"^":"L:13;a,b",
+$2:function(a,b){return P.NX(this.a,this.b,a,b)}},
+OH:{"^":"Mh;kc:a>,II:b<",
+w:function(a){return H.d(this.a)},
+$isGe:1},
+m0:{"^":"Mh;"},
+pK:{"^":"L:0;a,b",
+$0:function(){var z,y,x
+z=this.a
+y=z.a
+if(y==null){x=new P.B()
+z.a=x
+z=x}else z=y
+y=this.b
+if(y==null)throw H.b(z)
+x=H.b(z)
+x.stack=J.A(y)
+throw x}},
+R8:{"^":"m0;",
+bH:function(a){var z,y,x,w
+try{if(C.NU===$.X3){x=a.$0()
+return x}x=P.T8(null,null,this,a)
+return x}catch(w){x=H.p(w)
+z=x
+y=H.ts(w)
+return P.L2(null,null,this,z,y)}},
+m1:function(a,b){var z,y,x,w
+try{if(C.NU===$.X3){x=a.$1(b)
+return x}x=P.yv(null,null,this,a,b)
+return x}catch(w){x=H.p(w)
+z=x
+y=H.ts(w)
+return P.L2(null,null,this,z,y)}},
+kb:function(a,b){if(b)return new P.hj(this,a)
+else return new P.MK(this,a)},
+oj:function(a,b){return new P.pQ(this,a)},
+q:function(a,b){return},
+Gr:function(a){if($.X3===C.NU)return a.$0()
+return P.T8(null,null,this,a)},
+FI:function(a,b){if($.X3===C.NU)return a.$1(b)
+return P.yv(null,null,this,a,b)},
+mg:function(a,b,c){if($.X3===C.NU)return a.$2(b,c)
+return P.Qx(null,null,this,a,b,c)}},
+hj:{"^":"L:0;a,b",
+$0:function(){return this.a.bH(this.b)}},
+MK:{"^":"L:0;a,b",
+$0:function(){return this.a.Gr(this.b)}},
+pQ:{"^":"L:1;a,b",
+$1:function(a){return this.a.m1(this.b,a)}}}],["","",,P,{"^":"",
+u5:function(){return H.VM(new H.N5(0,null,null,null,null,null,0),[null,null])},
+Td:function(a){return H.B7(a,H.VM(new H.N5(0,null,null,null,null,null,0),[null,null]))},
+EP:function(a,b,c){var z,y
+if(P.hB(a)){if(b==="("&&c===")")return"(...)"
+return b+"..."+c}z=[]
+y=$.$get$xg()
+y.push(a)
+try{P.Vr(a,z)}finally{y.pop()}y=P.vg(b,z,", ")+c
+return y.charCodeAt(0)==0?y:y},
+WE:function(a,b,c){var z,y,x
+if(P.hB(a))return b+"..."+c
+z=new P.Rn(b)
+y=$.$get$xg()
+y.push(a)
+try{x=z
+x.a=P.vg(x.gI(),a,", ")}finally{y.pop()}y=z
+y.a=y.gI()+c
+y=z.gI()
+return y.charCodeAt(0)==0?y:y},
+hB:function(a){var z,y
+for(z=0;y=$.$get$xg(),z<y.length;++z)if(a===y[z])return!0
+return!1},
+Vr:function(a,b){var z,y,x,w,v,u,t,s,r,q
+z=a.gk(a)
+y=0
+x=0
+while(!0){if(!(y<80||x<3))break
+if(!z.F())return
+w=H.d(z.gl())
+b.push(w)
+y+=w.length+2;++x}if(!z.F()){if(x<=5)return
+v=b.pop()
+u=b.pop()}else{t=z.gl();++x
+if(!z.F()){if(x<=4){b.push(H.d(t))
+return}v=H.d(t)
+u=b.pop()
+y+=v.length+2}else{s=z.gl();++x
+for(;z.F();t=s,s=r){r=z.gl();++x
+if(x>100){while(!0){if(!(y>75&&x>3))break
+y-=b.pop().length+2;--x}b.push("...")
+return}}u=H.d(t)
+v=H.d(s)
+y+=v.length+u.length+4}}if(x>b.length+2){y+=5
+q="..."}else q=null
+while(!0){if(!(y>80&&b.length>3))break
+y-=b.pop().length+2
+if(q==null){y+=5
+q="..."}}if(q!=null)b.push(q)
+b.push(u)
+b.push(v)},
+Ls:function(a,b,c,d){return H.VM(new P.b6(0,null,null,null,null,null,0),[d])},
+tM:function(a,b){var z,y,x
+z=P.Ls(null,null,null,b)
+for(y=a.length,x=0;x<a.length;a.length===y||(0,H.lk)(a),++x)z.AN(0,a[x])
+return z},
+vW:function(a){var z,y,x
+z={}
+if(P.hB(a))return"{...}"
+y=new P.Rn("")
+try{$.$get$xg().push(a)
+x=y
+x.a=x.gI()+"{"
+z.a=!0
+J.hE(a,new P.W0(z,y))
+z=y
+z.a=z.gI()+"}"}finally{$.$get$xg().pop()}z=y.gI()
+return z.charCodeAt(0)==0?z:z},
+ey:{"^":"N5;a,b,c,d,e,f,r",
+xi:function(a){return H.CU(a)&0x3ffffff},
+X:function(a,b){var z,y,x
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y){x=a[y].a
+if(x==null?b==null:x===b)return y}return-1},
+static:{
+E8:function(a,b){return H.VM(new P.ey(0,null,null,null,null,null,0),[a,b])}}},
+b6:{"^":"u3;a,b,c,d,e,f,r",
+gk:function(a){var z=new P.lm(this,this.r,null,null)
+z.c=this.e
+return z},
+gA:function(a){return this.a},
+tg:function(a,b){var z,y
+if(typeof b==="string"&&b!=="__proto__"){z=this.b
+if(z==null)return!1
+return z[b]!=null}else if(typeof b==="number"&&(b&0x3ffffff)===b){y=this.c
+if(y==null)return!1
+return y[b]!=null}else return this.PR(b)},
+PR:function(a){var z=this.d
+if(z==null)return!1
+return this.DF(z[this.rk(a)],a)>=0},
+Zt:function(a){var z=typeof a==="number"&&(a&0x3ffffff)===a
+if(z)return this.tg(0,a)?a:null
+else return this.vR(a)},
+vR:function(a){var z,y,x
+z=this.d
+if(z==null)return
+y=z[this.rk(a)]
+x=this.DF(y,a)
+if(x<0)return
+return J.w2(y,x).gSk()},
+U:function(a,b){var z,y
+z=this.e
+y=this.r
+for(;z!=null;){b.$1(z.a)
+if(y!==this.r)throw H.b(new P.UV(this))
+z=z.b}},
+AN:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__"){z=this.b
+if(z==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.b=y
+z=y}return this.cW(z,b)}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.c
+if(x==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.c=y
+x=y}return this.cW(x,b)}else return this.B7(0,b)},
+B7:function(a,b){var z,y,x
+z=this.d
+if(z==null){z=P.T2()
+this.d=z}y=this.rk(b)
+x=z[y]
+if(x==null)z[y]=[this.dg(b)]
+else{if(this.DF(x,b)>=0)return!1
+x.push(this.dg(b))}return!0},
+Rz:function(a,b){if(typeof b==="string"&&b!=="__proto__")return this.H4(this.b,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.H4(this.c,b)
+else return this.qg(0,b)},
+qg:function(a,b){var z,y,x
+z=this.d
+if(z==null)return!1
+y=z[this.rk(b)]
+x=this.DF(y,b)
+if(x<0)return!1
+this.GS(y.splice(x,1)[0])
+return!0},
+V1:function(a){if(this.a>0){this.f=null
+this.e=null
+this.d=null
+this.c=null
+this.b=null
+this.a=0
+this.r=this.r+1&67108863}},
+cW:function(a,b){if(a[b]!=null)return!1
+a[b]=this.dg(b)
+return!0},
+H4:function(a,b){var z
+if(a==null)return!1
+z=a[b]
+if(z==null)return!1
+this.GS(z)
+delete a[b]
+return!0},
+dg:function(a){var z,y
+z=new P.bn(a,null,null)
+if(this.e==null){this.f=z
+this.e=z}else{y=this.f
+z.c=y
+y.b=z
+this.f=z}++this.a
+this.r=this.r+1&67108863
+return z},
+GS:function(a){var z,y
+z=a.c
+y=a.b
+if(z==null)this.e=y
+else z.b=y
+if(y==null)this.f=z
+else y.c=z;--this.a
+this.r=this.r+1&67108863},
+rk:function(a){return J.hf(a)&0x3ffffff},
+DF:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(J.RM(a[y].a,b))return y
+return-1},
+$isqC:1,
+static:{
+T2:function(){var z=Object.create(null)
+z["<non-identifier-key>"]=z
+delete z["<non-identifier-key>"]
+return z}}},
+bn:{"^":"Mh;Sk:a<,b,c"},
+lm:{"^":"Mh;a,b,c,d",
+gl:function(){return this.d},
+F:function(){var z=this.a
+if(this.b!==z.r)throw H.b(new P.UV(z))
+else{z=this.c
+if(z==null){this.d=null
+return!1}else{this.d=z.a
+this.c=z.b
+return!0}}}},
+u3:{"^":"Vj;"},
+LU:{"^":"E9;"},
+E9:{"^":"Mh+lD;",$iszM:1,$aszM:null,$isqC:1},
+lD:{"^":"Mh;",
+gk:function(a){return new H.a7(a,this.gA(a),0,null)},
+W:function(a,b){return this.q(a,b)},
+U:function(a,b){var z,y
+z=this.gA(a)
+for(y=0;y<z;++y){b.$1(this.q(a,y))
+if(z!==this.gA(a))throw H.b(new P.UV(a))}},
+S:function(a,b){return H.VM(new H.U5(a,b),[H.W8(a,"lD",0)])},
+ez:function(a,b){return H.VM(new H.A8(a,b),[null,null])},
+w:function(a){return P.WE(a,"[","]")},
+$iszM:1,
+$aszM:null,
+$isqC:1},
+W0:{"^":"L:14;a,b",
+$2:function(a,b){var z,y
+z=this.a
+if(!z.a)this.b.a+=", "
+z.a=!1
+z=this.b
+y=z.a+=H.d(a)
+z.a=y+": "
+z.a+=H.d(b)}},
+Sw:{"^":"cX;a,b,c,d",
+gk:function(a){return new P.o0(this,this.c,this.d,this.b,null)},
+U:function(a,b){var z,y
+z=this.d
+for(y=this.b;y!==this.c;y=(y+1&this.a.length-1)>>>0){b.$1(this.a[y])
+if(z!==this.d)H.vh(new P.UV(this))}},
+gl0:function(a){return this.b===this.c},
+gA:function(a){return(this.c-this.b&this.a.length-1)>>>0},
+V1:function(a){var z,y,x,w
+z=this.b
+y=this.c
+if(z!==y){for(x=this.a,w=x.length-1;z!==y;z=(z+1&w)>>>0)x[z]=null
+this.c=0
+this.b=0;++this.d}},
+w:function(a){return P.WE(this,"{","}")},
+Ux:function(){var z,y,x
+z=this.b
+if(z===this.c)throw H.b(H.Wp());++this.d
+y=this.a
+x=y[z]
+y[z]=null
+this.b=(z+1&y.length-1)>>>0
+return x},
+B7:function(a,b){var z,y
+z=this.a
+y=this.c
+z[y]=b
+z=(y+1&z.length-1)>>>0
+this.c=z
+if(this.b===z)this.wL();++this.d},
+wL:function(){var z,y,x,w
+z=new Array(this.a.length*2)
+z.fixed$length=Array
+y=H.VM(z,[H.Kp(this,0)])
+z=this.a
+x=this.b
+w=z.length-x
+C.Nm.YW(y,0,w,z,x)
+C.Nm.YW(y,w,w+this.b,this.a,0)
+this.b=0
+this.c=this.a.length
+this.a=y},
+Eo:function(a,b){var z=new Array(8)
+z.fixed$length=Array
+this.a=H.VM(z,[b])},
+$isqC:1,
+static:{
+NZ:function(a,b){var z=H.VM(new P.Sw(null,0,0,0),[b])
+z.Eo(a,b)
+return z}}},
+o0:{"^":"Mh;a,b,c,d,e",
+gl:function(){return this.e},
+F:function(){var z,y
+z=this.a
+if(this.c!==z.d)H.vh(new P.UV(z))
+y=this.d
+if(y===this.b){this.e=null
+return!1}z=z.a
+this.e=z[y]
+this.d=(y+1&z.length-1)>>>0
+return!0}},
+Ma:{"^":"Mh;",
+FV:function(a,b){var z
+for(z=J.IT(b);z.F();)this.AN(0,z.gl())},
+w:function(a){return P.WE(this,"{","}")},
+U:function(a,b){var z
+for(z=new P.lm(this,this.r,null,null),z.c=this.e;z.F();)b.$1(z.d)},
+zV:function(a,b){var z,y,x
+z=new P.lm(this,this.r,null,null)
+z.c=this.e
+if(!z.F())return""
+y=new P.Rn("")
+if(b===""){do y.a+=H.d(z.d)
+while(z.F())}else{y.a=H.d(z.d)
+for(;z.F();){y.a+=b
+y.a+=H.d(z.d)}}x=y.a
+return x.charCodeAt(0)==0?x:x},
+$isqC:1},
+Vj:{"^":"Ma;"}}],["","",,P,{"^":"",zF:{"^":"Mh;"},fU:{"^":"Mh;a,b,c,d,e",
+w:function(a){return this.a}},Rc:{"^":"zF;a",
+h:function(a,b,c){var z,y,x,w
+for(z=b,y=null;z<c;++z){switch(a[z]){case"&":x="&amp;"
+break
+case'"':x="&quot;"
+break
+case"'":x="&#39;"
+break
+case"<":x="&lt;"
+break
+case">":x="&gt;"
+break
+case"/":x="&#47;"
+break
+default:x=null}if(x!=null){if(y==null)y=new P.Rn("")
+if(z>b){w=C.xB.C(a,b,z)
+y.a=y.a+w}y.a=y.a+x
+b=z+1}}if(y==null)return
+if(c>b)y.a+=J.ld(a,b,c)
+w=y.a
+return w.charCodeAt(0)==0?w:w}}}],["","",,P,{"^":"",
+h:function(a){if(typeof a==="number"||typeof a==="boolean"||null==a)return J.A(a)
+if(typeof a==="string")return JSON.stringify(a)
+return P.o(a)},
+o:function(a){var z=J.v(a)
+if(!!z.$isL)return z.w(a)
+return H.H(a)},
+FM:function(a){return new P.CD(a)},
+PW:function(a,b,c){var z,y
+z=H.VM([],[c])
+for(y=J.IT(a);y.F();)z.push(y.gl())
+if(b)return z
+z.fixed$length=Array
+return z},
+JS:function(a){var z=H.d(a)
+H.qw(z)},
+a2:{"^":"Mh;"},
+"+bool":0,
+iP:{"^":"Mh;"},
+CP:{"^":"lf;"},
+"+double":0,
+a6:{"^":"Mh;a",
+B:function(a,b){return C.jn.B(this.a,b.gm5())},
+D:function(a,b){if(b==null)return!1
+if(!(b instanceof P.a6))return!1
+return this.a===b.a},
+gM:function(a){return this.a&0x1FFFFFFF},
+w:function(a){var z,y,x,w,v
+z=new P.DW()
+y=this.a
+if(y<0)return"-"+new P.a6(-y).w(0)
+x=z.$1(C.jn.JV(C.jn.BU(y,6e7),60))
+w=z.$1(C.jn.JV(C.jn.BU(y,1e6),60))
+v=new P.P7().$1(C.jn.JV(y,1e6))
+return""+C.jn.BU(y,36e8)+":"+H.d(x)+":"+H.d(w)+"."+H.d(v)}},
+P7:{"^":"L:4;",
+$1:function(a){if(a>=1e5)return""+a
+if(a>=1e4)return"0"+a
+if(a>=1000)return"00"+a
+if(a>=100)return"000"+a
+if(a>=10)return"0000"+a
+return"00000"+a}},
+DW:{"^":"L:4;",
+$1:function(a){if(a>=10)return""+a
+return"0"+a}},
+Ge:{"^":"Mh;",
+gII:function(){return H.ts(this.$thrownJsError)}},
+B:{"^":"Ge;",
+w:function(a){return"Throw of null."}},
+AT:{"^":"Ge;a,b,c,d",
+gZ:function(){return"Invalid argument"+(!this.a?"(s)":"")},
+gu:function(){return""},
+w:function(a){var z,y,x,w,v,u
+z=this.c
+y=z!=null?" ("+H.d(z)+")":""
+z=this.d
+x=z==null?"":": "+H.d(z)
+w=this.gZ()+y+x
+if(!this.a)return w
+v=this.gu()
+u=P.h(this.b)
+return w+v+": "+H.d(u)},
+static:{
+q:function(a){return new P.AT(!1,null,null,a)},
+L3:function(a,b,c){return new P.AT(!0,a,b,c)},
+hG:function(a){return new P.AT(!1,null,a,"Must not be null")}}},
+bJ:{"^":"AT;e,f,a,b,c,d",
+gZ:function(){return"RangeError"},
+gu:function(){var z,y,x
+z=this.e
+if(z==null){z=this.f
+y=z!=null?": Not less than or equal to "+H.d(z):""}else{x=this.f
+if(x==null)y=": Not greater than or equal to "+H.d(z)
+else if(x>z)y=": Not in range "+H.d(z)+".."+H.d(x)+", inclusive"
+else y=x<z?": Valid value range is empty":": Only valid value is "+H.d(z)}return y},
+static:{
+F:function(a,b,c){return new P.bJ(null,null,!0,a,b,"Value not in range")},
+TE:function(a,b,c,d,e){return new P.bJ(b,c,!0,a,d,"Invalid value")},
+jB:function(a,b,c,d,e,f){if(0>a||a>c)throw H.b(P.TE(a,0,c,"start",f))
+if(a>b||b>c)throw H.b(P.TE(b,a,c,"end",f))
+return b}}},
+eY:{"^":"AT;e,A:f>,a,b,c,d",
+gZ:function(){return"RangeError"},
+gu:function(){if(J.aa(this.b,0))return": index must not be negative"
+var z=this.f
+if(z===0)return": no indices are valid"
+return": index should be less than "+H.d(z)},
+static:{
+Cf:function(a,b,c,d,e){var z=e!=null?e:J.Hm(b)
+return new P.eY(b,z,!0,a,c,"Index out of range")}}},
+ub:{"^":"Ge;a",
+w:function(a){return"Unsupported operation: "+this.a}},
+D:{"^":"Ge;a",
+w:function(a){var z=this.a
+return z!=null?"UnimplementedError: "+H.d(z):"UnimplementedError"}},
+lj:{"^":"Ge;a",
+w:function(a){return"Bad state: "+this.a}},
+UV:{"^":"Ge;a",
+w:function(a){var z=this.a
+if(z==null)return"Concurrent modification during iteration."
+return"Concurrent modification during iteration: "+H.d(P.h(z))+"."}},
+VS:{"^":"Mh;",
+w:function(a){return"Stack Overflow"},
+gII:function(){return},
+$isGe:1},
+t7:{"^":"Ge;a",
+w:function(a){return"Reading static variable '"+this.a+"' during its initialization"}},
+CD:{"^":"Mh;a",
+w:function(a){var z=this.a
+if(z==null)return"Exception"
+return"Exception: "+H.d(z)}},
+aE:{"^":"Mh;a,b,c",
+w:function(a){var z,y
+z=""!==this.a?"FormatException: "+this.a:"FormatException"
+y=this.b
+if(y.length>78)y=C.xB.C(y,0,75)+"..."
+return z+"\n"+y}},
+kM:{"^":"Mh;a",
+w:function(a){return"Expando:"+H.d(this.a)},
+q:function(a,b){var z=H.VK(b,"expando$values")
+return z==null?null:H.VK(z,this.KV(0))},
+KV:function(a){var z,y
+z=H.VK(this,"expando$key")
+if(z==null){y=$.Ss
+$.Ss=y+1
+z="expando$key$"+y
+H.aw(this,"expando$key",z)}return z}},
+EH:{"^":"Mh;"},
+KN:{"^":"lf;"},
+"+int":0,
+cX:{"^":"Mh;",
+S:["p",function(a,b){return H.VM(new H.U5(this,b),[H.W8(this,"cX",0)])}],
+U:function(a,b){var z
+for(z=this.gk(this);z.F();)b.$1(z.gl())},
+gA:function(a){var z,y
+z=this.gk(this)
+for(y=0;z.F();)++y
+return y},
+gV:function(a){var z,y
+z=this.gk(this)
+if(!z.F())throw H.b(H.Wp())
+y=z.gl()
+if(z.F())throw H.b(H.Am())
+return y},
+W:function(a,b){var z,y,x
+if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.hG("index"))
+if(b<0)H.vh(P.TE(b,0,null,"index",null))
+for(z=this.gk(this),y=0;z.F();){x=z.gl()
+if(b===y)return x;++y}throw H.b(P.Cf(b,this,"index",null,y))},
+w:function(a){return P.EP(this,"(",")")}},
+An:{"^":"Mh;"},
+zM:{"^":"Mh;",$aszM:null,$isqC:1},
+"+List":0,
+L8:{"^":"Mh;"},
+c8:{"^":"Mh;",
+w:function(a){return"null"}},
+"+Null":0,
+lf:{"^":"Mh;"},
+"+num":0,
+Mh:{"^":";",
+D:function(a,b){return this===b},
+gM:function(a){return H.wP(this)},
+w:function(a){return H.H(this)},
+toString:function(){return this.w(this)}},
+Gz:{"^":"Mh;"},
+qU:{"^":"Mh;"},
+"+String":0,
+Rn:{"^":"Mh;I:a<",
+gA:function(a){return this.a.length},
+w:function(a){var z=this.a
+return z.charCodeAt(0)==0?z:z},
+static:{
+vg:function(a,b,c){var z=J.IT(b)
+if(!z.F())return a
+if(c.length===0){do a+=H.d(z.gl())
+while(z.F())}else{a+=H.d(z.gl())
+for(;z.F();)a=a+c+H.d(z.gl())}return a}}}}],["","",,W,{"^":"",
+U9:function(a,b,c){var z,y
+z=document.body
+y=(z&&C.RY).O(z,a,b,c)
+y.toString
+z=new W.e7(y)
+z=z.S(z,new W.wJ())
+return z.gV(z)},
+rS:function(a){var z,y,x
+z="element tag unavailable"
+try{y=J.Ob(a)
+if(typeof y==="string")z=J.Ob(a)}catch(x){H.p(x)}return z},
+C0:function(a,b){a=536870911&a+b
+a=536870911&a+((524287&a)<<10>>>0)
+return a^a>>>6},
+Up:function(a){a=536870911&a+((67108863&a)<<3>>>0)
+a^=a>>>11
+return 536870911&a+((16383&a)<<15>>>0)},
+qc:function(a){var z
+if(a==null)return
+if("postMessage" in a){z=W.P1(a)
+if(!!J.v(z).$isD0)return z
+return}else return a},
+aF:function(a){var z=$.X3
+if(z===C.NU)return a
+return z.oj(a,!0)},
+Z0:function(a){return document.querySelector(a)},
+qE:{"^":"cv;",$isqE:1,$iscv:1,$isK:1,$isMh:1,"%":"HTMLAppletElement|HTMLBRElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDataListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLImageElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLMarqueeElement|HTMLMenuElement|HTMLMenuItemElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLOptGroupElement|HTMLOptionElement|HTMLParagraphElement|HTMLPictureElement|HTMLPreElement|HTMLProgressElement|HTMLQuoteElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableHeaderCellElement|HTMLTitleElement|HTMLTrackElement|HTMLUListElement|HTMLUnknownElement|PluginPlaceholderElement;HTMLElement"},
+Yy:{"^":"vB;",$iszM:1,
+$aszM:function(){return[W.M5]},
+$isqC:1,
+"%":"EntryArray"},
+Gh:{"^":"qE;LU:href}",
+w:function(a){return String(a)},
+$isvB:1,
+"%":"HTMLAnchorElement"},
+fY:{"^":"qE;LU:href}",
+w:function(a){return String(a)},
+$isvB:1,
+"%":"HTMLAreaElement"},
+fo:{"^":"D0;A:length=","%":"AudioTrackList"},
+nB:{"^":"qE;LU:href}","%":"HTMLBaseElement"},
+Az:{"^":"vB;","%":";Blob"},
+QP:{"^":"qE;",$isQP:1,$isD0:1,$isvB:1,"%":"HTMLBodyElement"},
+IF:{"^":"qE;oc:name=",$isIF:1,"%":"HTMLButtonElement"},
+nx:{"^":"K;A:length=",$isvB:1,"%":"CDATASection|CharacterData|Comment|ProcessingInstruction|Text"},
+lw:{"^":"vB;",$isMh:1,"%":"CSSCharsetRule|CSSFontFaceRule|CSSImportRule|CSSKeyframeRule|CSSKeyframesRule|CSSMediaRule|CSSPageRule|CSSRule|CSSStyleRule|CSSSupportsRule|CSSUnknownRule|CSSViewportRule|MozCSSKeyframeRule|MozCSSKeyframesRule|WebKitCSSFilterRule|WebKitCSSKeyframeRule|WebKitCSSKeyframesRule"},
+oJ:{"^":"BV;A:length=","%":"CSS2Properties|CSSStyleDeclaration|MSStyleCSSProperties"},
+BV:{"^":"vB+id;"},
+id:{"^":"Mh;"},
+Wv:{"^":"vB;",$isWv:1,$isMh:1,"%":"DataTransferItem"},
+Sb:{"^":"vB;A:length=",
+q:function(a,b){return a[b]},
+"%":"DataTransferItemList"},
+QF:{"^":"K;",
+Wk:function(a,b){return a.querySelector(b)},
+"%":"Document|HTMLDocument|XMLDocument"},
+hs:{"^":"K;",
+Wk:function(a,b){return a.querySelector(b)},
+$isvB:1,
+"%":"DocumentFragment|ShadowRoot"},
+Nh:{"^":"vB;",
+w:function(a){return String(a)},
+"%":"DOMException"},
+tk:{"^":"vB;",$istk:1,$isMh:1,"%":"Iterator"},
+IB:{"^":"vB;L:height=,H:left=,T:top=,P:width=",
+w:function(a){return"Rectangle ("+H.d(a.left)+", "+H.d(a.top)+") "+H.d(this.gP(a))+" x "+H.d(this.gL(a))},
+D:function(a,b){var z,y,x
+if(b==null)return!1
+z=J.v(b)
+if(!z.$istn)return!1
+y=a.left
+x=z.gH(b)
+if(y==null?x==null:y===x){y=a.top
+x=z.gT(b)
+if(y==null?x==null:y===x){y=this.gP(a)
+x=z.gP(b)
+if(y==null?x==null:y===x){y=this.gL(a)
+z=z.gL(b)
+z=y==null?z==null:y===z}else z=!1}else z=!1}else z=!1
+return z},
+gM:function(a){var z,y,x,w
+z=J.hf(a.left)
+y=J.hf(a.top)
+x=J.hf(this.gP(a))
+w=J.hf(this.gL(a))
+return W.Up(W.C0(W.C0(W.C0(W.C0(0,z),y),x),w))},
+$istn:1,
+$astn:I.HU,
+"%":";DOMRectReadOnly"},
+Yl:{"^":"ec;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[P.qU]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"DOMStringList"},
+nN:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[P.qU]},
+$isqC:1},
+ec:{"^":"nN+Gm;",$iszM:1,
+$aszM:function(){return[P.qU]},
+$isqC:1},
+NQ:{"^":"vB;A:length=","%":"DOMSettableTokenList|DOMTokenList"},
+wz:{"^":"LU;a",
+gA:function(a){return this.a.length},
+q:function(a,b){return this.a[b]},
+$asLU:I.HU,
+$aszM:I.HU,
+$iszM:1,
+$isqC:1},
+cv:{"^":"K;jO:id},ns:tagName=",
+gQg:function(a){return new W.i7(a)},
+gDD:function(a){return new W.I4(a)},
+w:function(a){return a.localName},
+N:function(a,b,c,d,e){var z
+if(d instanceof W.x)a.insertAdjacentHTML(b,c)
+else{z=this.O(a,c,d,e)
+switch(b.toLowerCase()){case"beforebegin":a.parentNode.insertBefore(z,a)
+break
+case"afterbegin":a.insertBefore(z,a.childNodes.length>0?a.childNodes[0]:null)
+break
+case"beforeend":a.appendChild(z)
+break
+case"afterend":a.parentNode.insertBefore(z,a.nextSibling)
+break
+default:H.vh(P.q("Invalid position "+b))}}},
+O:["DW",function(a,b,c,d){var z,y,x,w,v
+if(c==null){z=$.lt
+if(z==null){z=H.VM([],[W.kF])
+y=new W.vD(z)
+z.push(W.Tw(null))
+z.push(W.Bl())
+$.lt=y
+d=y}else d=z
+z=$.EU
+if(z==null){z=new W.MM(d)
+$.EU=z
+c=z}else{z.a=d
+c=z}}if($.xo==null){z=document.implementation.createHTMLDocument("")
+$.xo=z
+$.BO=z.createRange()
+z=$.xo
+z.toString
+x=z.createElement("base")
+J.Gq(x,document.baseURI)
+$.xo.head.appendChild(x)}z=$.xo
+if(!!this.$isQP)w=z.body
+else{y=a.tagName
+z.toString
+w=z.createElement(y)
+$.xo.body.appendChild(w)}if("createContextualFragment" in window.Range.prototype&&!C.Nm.tg(C.Sq,a.tagName)){$.BO.selectNodeContents(w)
+v=$.BO.createContextualFragment(b)}else{w.innerHTML=b
+v=$.xo.createDocumentFragment()
+for(;z=w.firstChild,z!=null;)v.appendChild(z)}z=$.xo.body
+if(w==null?z!=null:w!==z)J.Ns(w)
+c.Pn(v)
+document.adoptNode(v)
+return v},function(a,b,c){return this.O(a,b,c,null)},"E",null,null,"gkf",2,5,null,0,0],
+a7:function(a,b,c){return a.setAttribute(b,c)},
+Wk:function(a,b){return a.querySelector(b)},
+$iscv:1,
+$isK:1,
+$isMh:1,
+$isvB:1,
+$isD0:1,
+"%":";Element"},
+wJ:{"^":"L:1;",
+$1:function(a){return!!J.v(a).$iscv}},
+Fs:{"^":"qE;oc:name=","%":"HTMLEmbedElement"},
+M5:{"^":"vB;",$isMh:1,"%":"DirectoryEntry|Entry|FileEntry"},
+hY:{"^":"ea;kc:error=","%":"ErrorEvent"},
+ea:{"^":"vB;","%":"AnimationPlayerEvent|ApplicationCacheErrorEvent|AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CloseEvent|CustomEvent|DeviceLightEvent|DeviceMotionEvent|DeviceOrientationEvent|ExtendableEvent|FetchEvent|FontFaceSetLoadEvent|GamepadEvent|HashChangeEvent|IDBVersionChangeEvent|InstallEvent|MIDIConnectionEvent|MIDIMessageEvent|MediaKeyEvent|MediaKeyMessageEvent|MediaKeyNeededEvent|MediaQueryListEvent|MediaStreamEvent|MediaStreamTrackEvent|MessageEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|ProgressEvent|PushEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|RTCPeerConnectionIceEvent|RelatedEvent|ResourceProgressEvent|SecurityPolicyViolationEvent|SpeechRecognitionEvent|SpeechSynthesisEvent|StorageEvent|TrackEvent|TransitionEvent|WebGLContextEvent|WebKitAnimationEvent|WebKitTransitionEvent|XMLHttpRequestProgressEvent;ClipboardEvent|Event|InputEvent"},
+D0:{"^":"vB;",
+On:function(a,b,c,d){if(c!=null)this.v0(a,b,c,!1)},
+Y9:function(a,b,c,d){if(c!=null)this.Ci(a,b,c,!1)},
+v0:function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),!1)},
+Ci:function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),!1)},
+$isD0:1,
+"%":"AnalyserNode|AnimationPlayer|ApplicationCache|AudioBufferSourceNode|AudioChannelMerger|AudioChannelSplitter|AudioContext|AudioDestinationNode|AudioGainNode|AudioNode|AudioPannerNode|AudioSourceNode|BatteryManager|BiquadFilterNode|ChannelMergerNode|ChannelSplitterNode|ConvolverNode|DOMApplicationCache|DelayNode|DynamicsCompressorNode|EventSource|GainNode|IDBDatabase|InputMethodContext|JavaScriptAudioNode|MIDIAccess|MediaController|MediaElementAudioSourceNode|MediaQueryList|MediaSource|MediaStream|MediaStreamAudioDestinationNode|MediaStreamAudioSourceNode|MediaStreamTrack|MessagePort|NetworkInformation|Notification|OfflineAudioContext|OfflineResourceList|Oscillator|OscillatorNode|PannerNode|Performance|Presentation|RTCDTMFSender|RTCPeerConnection|RealtimeAnalyserNode|ScreenOrientation|ScriptProcessorNode|ServiceWorkerRegistration|SpeechRecognition|SpeechSynthesis|SpeechSynthesisUtterance|WaveShaperNode|mozRTCPeerConnection|webkitAudioContext|webkitAudioPannerNode;EventTarget;Vc|mr|KS|bD"},
+as:{"^":"qE;oc:name=","%":"HTMLFieldSetElement"},
+dU:{"^":"Az;",$isMh:1,"%":"File"},
+XV:{"^":"x5;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.dU]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"FileList"},
+zL:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.dU]},
+$isqC:1},
+x5:{"^":"zL+Gm;",$iszM:1,
+$aszM:function(){return[W.dU]},
+$isqC:1},
+H0:{"^":"D0;kc:error=","%":"FileReader"},
+Bf:{"^":"D0;kc:error=,A:length=","%":"FileWriter"},
+n5:{"^":"vB;",$isn5:1,$isMh:1,"%":"FontFace"},
+CV:{"^":"D0;",
+K:function(a,b,c){return a.forEach(H.tR(b,3),c)},
+U:function(a,b){b=H.tR(b,3)
+return a.forEach(b)},
+"%":"FontFaceSet"},
+Yu:{"^":"qE;A:length=,oc:name=","%":"HTMLFormElement"},
+GO:{"^":"vB;",$isMh:1,"%":"Gamepad"},
+F1:{"^":"vB;",
+K:function(a,b,c){return a.forEach(H.tR(b,3),c)},
+U:function(a,b){b=H.tR(b,3)
+return a.forEach(b)},
+"%":"Headers"},
+br:{"^":"vB;A:length=","%":"History"},
+xn:{"^":"HR;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"HTMLCollection|HTMLFormControlsCollection|HTMLOptionsCollection"},
+dx:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1},
+HR:{"^":"dx+Gm;",$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1},
+zU:{"^":"wa;",
+wR:function(a,b){return a.send(b)},
+"%":"XMLHttpRequest"},
+wa:{"^":"D0;","%":"XMLHttpRequestUpload;XMLHttpRequestEventTarget"},
+tX:{"^":"qE;oc:name=","%":"HTMLIFrameElement"},
+Mi:{"^":"qE;oc:name=",$iscv:1,$isvB:1,$isD0:1,"%":"HTMLInputElement"},
+MX:{"^":"qE;oc:name=","%":"HTMLKeygenElement"},
+Og:{"^":"qE;LU:href}","%":"HTMLLinkElement"},
+u8:{"^":"vB;",
+w:function(a){return String(a)},
+"%":"Location"},
+M6:{"^":"qE;oc:name=","%":"HTMLMapElement"},
+eL:{"^":"qE;kc:error=","%":"HTMLAudioElement|HTMLMediaElement|HTMLVideoElement"},
+G9:{"^":"D0;kc:error=","%":"MediaKeySession"},
+tL:{"^":"vB;A:length=","%":"MediaList"},
+Ee:{"^":"qE;oc:name=","%":"HTMLMetaElement"},
+Lk:{"^":"Im;",
+LV:function(a,b,c){return a.send(b,c)},
+wR:function(a,b){return a.send(b)},
+"%":"MIDIOutput"},
+Im:{"^":"D0;","%":"MIDIInput;MIDIPort"},
+AW:{"^":"vB;",$isMh:1,"%":"MimeType"},
+bw:{"^":"rr;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.AW]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"MimeTypeArray"},
+hm:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.AW]},
+$isqC:1},
+rr:{"^":"hm+Gm;",$iszM:1,
+$aszM:function(){return[W.AW]},
+$isqC:1},
+Aj:{"^":"w6;",$isAj:1,$isMh:1,"%":"DragEvent|MSPointerEvent|MouseEvent|PointerEvent|WheelEvent"},
+oU:{"^":"vB;",$isvB:1,"%":"Navigator"},
+e7:{"^":"LU;a",
+gV:function(a){var z,y
+z=this.a
+y=z.childNodes.length
+if(y===0)throw H.b(new P.lj("No elements"))
+if(y>1)throw H.b(new P.lj("More than one element"))
+return z.firstChild},
+FV:function(a,b){var z,y,x,w
+z=b.a
+y=this.a
+if(z!==y)for(x=z.childNodes.length,w=0;w<x;++w)y.appendChild(z.firstChild)
+return},
+gk:function(a){return C.t5.gk(this.a.childNodes)},
+gA:function(a){return this.a.childNodes.length},
+q:function(a,b){return this.a.childNodes[b]},
+$asLU:function(){return[W.K]},
+$aszM:function(){return[W.K]}},
+K:{"^":"D0;",
+wg:function(a){var z=a.parentNode
+if(z!=null)z.removeChild(a)},
+w:function(a){var z=a.nodeValue
+return z==null?this.UG(a):z},
+$isK:1,
+$isMh:1,
+"%":";Node"},
+BH:{"^":"Gb;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"NodeList|RadioNodeList"},
+xt:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1},
+Gb:{"^":"xt+Gm;",$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1},
+G7:{"^":"qE;oc:name=","%":"HTMLObjectElement"},
+wL:{"^":"qE;oc:name=","%":"HTMLOutputElement"},
+HD:{"^":"qE;oc:name=","%":"HTMLParamElement"},
+O4:{"^":"vB;",$isvB:1,"%":"Path2D"},
+qp:{"^":"vB;A:length=",$isMh:1,"%":"Plugin"},
+Ev:{"^":"ma;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.qp]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"PluginArray"},
+nj:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.qp]},
+$isqC:1},
+ma:{"^":"nj+Gm;",$iszM:1,
+$aszM:function(){return[W.qp]},
+$isqC:1},
+dK:{"^":"D0;",
+wR:function(a,b){return a.send(b)},
+"%":"DataChannel|RTCDataChannel"},
+p8:{"^":"vB;",$isp8:1,$isMh:1,"%":"RTCStatsReport"},
+qI:{"^":"qE;",$isqI:1,"%":"HTMLScriptElement"},
+lp:{"^":"qE;A:length=,oc:name=","%":"HTMLSelectElement"},
+Ji:{"^":"D0;",$isD0:1,$isvB:1,"%":"SharedWorker"},
+x8:{"^":"D0;",$isMh:1,"%":"SourceBuffer"},
+Mk:{"^":"mr;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.x8]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"SourceBufferList"},
+Vc:{"^":"D0+lD;",$iszM:1,
+$aszM:function(){return[W.x8]},
+$isqC:1},
+mr:{"^":"Vc+Gm;",$iszM:1,
+$aszM:function(){return[W.x8]},
+$isqC:1},
+Y4:{"^":"vB;",$isMh:1,"%":"SpeechGrammar"},
+Nn:{"^":"ecX;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.Y4]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"SpeechGrammarList"},
+qb:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.Y4]},
+$isqC:1},
+ecX:{"^":"qb+Gm;",$iszM:1,
+$aszM:function(){return[W.Y4]},
+$isqC:1},
+zD:{"^":"ea;kc:error=","%":"SpeechRecognitionError"},
+vK:{"^":"vB;A:length=",$isMh:1,"%":"SpeechRecognitionResult"},
+As:{"^":"vB;",
+q:function(a,b){return a.getItem(b)},
+U:function(a,b){var z,y
+for(z=0;!0;++z){y=a.key(z)
+if(y==null)return
+b.$2(y,a.getItem(y))}},
+gA:function(a){return a.length},
+"%":"Storage"},
+WW:{"^":"vB;",$isMh:1,"%":"CSSStyleSheet|StyleSheet"},
+Tb:{"^":"qE;",
+O:function(a,b,c,d){var z,y
+if("createContextualFragment" in window.Range.prototype)return this.DW(a,b,c,d)
+z=W.U9("<table>"+H.d(b)+"</table>",c,d)
+y=document.createDocumentFragment()
+y.toString
+z.toString
+new W.e7(y).FV(0,new W.e7(z))
+return y},
+"%":"HTMLTableElement"},
+Iv:{"^":"qE;",
+O:function(a,b,c,d){var z,y,x,w
+if("createContextualFragment" in window.Range.prototype)return this.DW(a,b,c,d)
+z=document.createDocumentFragment()
+y=document
+y=C.Ie.O(y.createElement("table"),b,c,d)
+y.toString
+y=new W.e7(y)
+x=y.gV(y)
+x.toString
+y=new W.e7(x)
+w=y.gV(y)
+z.toString
+w.toString
+new W.e7(z).FV(0,new W.e7(w))
+return z},
+"%":"HTMLTableRowElement"},
+BT:{"^":"qE;",
+O:function(a,b,c,d){var z,y,x
+if("createContextualFragment" in window.Range.prototype)return this.DW(a,b,c,d)
+z=document.createDocumentFragment()
+y=document
+y=C.Ie.O(y.createElement("table"),b,c,d)
+y.toString
+y=new W.e7(y)
+x=y.gV(y)
+z.toString
+x.toString
+new W.e7(z).FV(0,new W.e7(x))
+return z},
+"%":"HTMLTableSectionElement"},
+yY:{"^":"qE;",$isyY:1,"%":"HTMLTemplateElement"},
+FB:{"^":"qE;oc:name=","%":"HTMLTextAreaElement"},
+A1:{"^":"D0;",$isMh:1,"%":"TextTrack"},
+MN:{"^":"D0;",$isMh:1,"%":"TextTrackCue|VTTCue"},
+K8:{"^":"w1p;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$isXj:1,
+$isDD:1,
+$iszM:1,
+$aszM:function(){return[W.MN]},
+$isqC:1,
+"%":"TextTrackCueList"},
+RAp:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.MN]},
+$isqC:1},
+w1p:{"^":"RAp+Gm;",$iszM:1,
+$aszM:function(){return[W.MN]},
+$isqC:1},
+nJ:{"^":"bD;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.A1]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"TextTrackList"},
+KS:{"^":"D0+lD;",$iszM:1,
+$aszM:function(){return[W.A1]},
+$isqC:1},
+bD:{"^":"KS+Gm;",$iszM:1,
+$aszM:function(){return[W.A1]},
+$isqC:1},
+M0:{"^":"vB;A:length=","%":"TimeRanges"},
+a3:{"^":"vB;",$isMh:1,"%":"Touch"},
+o4:{"^":"kEI;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.a3]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"TouchList"},
+nNL:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.a3]},
+$isqC:1},
+kEI:{"^":"nNL+Gm;",$iszM:1,
+$aszM:function(){return[W.a3]},
+$isqC:1},
+w6:{"^":"ea;","%":"CompositionEvent|FocusEvent|KeyboardEvent|SVGZoomEvent|TextEvent|TouchEvent;UIEvent"},
+Fj:{"^":"vB;",
+w:function(a){return String(a)},
+$isvB:1,
+"%":"URL"},
+vX:{"^":"D0;A:length=","%":"VideoTrackList"},
+wf:{"^":"vB;A:length=","%":"VTTRegionList"},
+EK:{"^":"D0;",
+wR:function(a,b){return a.send(b)},
+"%":"WebSocket"},
+K5:{"^":"D0;",$isvB:1,$isD0:1,"%":"DOMWindow|Window"},
+ny:{"^":"D0;",$isD0:1,$isvB:1,"%":"Worker"},
+Cm:{"^":"D0;",$isvB:1,"%":"DedicatedWorkerGlobalScope|ServiceWorkerGlobalScope|SharedWorkerGlobalScope|WorkerGlobalScope"},
+RX:{"^":"K;oc:name=","%":"Attr"},
+ia:{"^":"vB;",$isMh:1,"%":"CSSPrimitiveValue;CSSValue;hw|lS"},
+YC:{"^":"vB;L:height=,H:left=,T:top=,P:width=",
+w:function(a){return"Rectangle ("+H.d(a.left)+", "+H.d(a.top)+") "+H.d(a.width)+" x "+H.d(a.height)},
+D:function(a,b){var z,y,x
+if(b==null)return!1
+z=J.v(b)
+if(!z.$istn)return!1
+y=a.left
+x=z.gH(b)
+if(y==null?x==null:y===x){y=a.top
+x=z.gT(b)
+if(y==null?x==null:y===x){y=a.width
+x=z.gP(b)
+if(y==null?x==null:y===x){y=a.height
+z=z.gL(b)
+z=y==null?z==null:y===z}else z=!1}else z=!1}else z=!1
+return z},
+gM:function(a){var z,y,x,w
+z=J.hf(a.left)
+y=J.hf(a.top)
+x=J.hf(a.width)
+w=J.hf(a.height)
+return W.Up(W.C0(W.C0(W.C0(W.C0(0,z),y),x),w))},
+$istn:1,
+$astn:I.HU,
+"%":"ClientRect"},
+S3:{"^":"x5e;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$isXj:1,
+$isDD:1,
+$iszM:1,
+$aszM:function(){return[P.tn]},
+$isqC:1,
+"%":"ClientRectList|DOMRectList"},
+yoo:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[P.tn]},
+$isqC:1},
+x5e:{"^":"yoo+Gm;",$iszM:1,
+$aszM:function(){return[P.tn]},
+$isqC:1},
+PR:{"^":"HRa;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.lw]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"CSSRuleList"},
+zLC:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.lw]},
+$isqC:1},
+HRa:{"^":"zLC+Gm;",$iszM:1,
+$aszM:function(){return[W.lw]},
+$isqC:1},
+VE:{"^":"lS;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.ia]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"CSSValueList|WebKitCSSFilterValue|WebKitCSSTransformValue"},
+hw:{"^":"ia+lD;",$iszM:1,
+$aszM:function(){return[W.ia]},
+$isqC:1},
+lS:{"^":"hw+Gm;",$iszM:1,
+$aszM:function(){return[W.ia]},
+$isqC:1},
+hq:{"^":"K;",$isvB:1,"%":"DocumentType"},
+w4:{"^":"IB;",
+gL:function(a){return a.height},
+gP:function(a){return a.width},
+"%":"DOMRect"},
+Ij:{"^":"t7i;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.GO]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"GamepadList"},
+dxW:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.GO]},
+$isqC:1},
+t7i:{"^":"dxW+Gm;",$iszM:1,
+$aszM:function(){return[W.GO]},
+$isqC:1},
+Nf:{"^":"qE;",$isD0:1,$isvB:1,"%":"HTMLFrameSetElement"},
+rh:{"^":"rrb;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"MozNamedAttrMap|NamedNodeMap"},
+hmZ:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1},
+rrb:{"^":"hmZ+Gm;",$iszM:1,
+$aszM:function(){return[W.K]},
+$isqC:1},
+XT:{"^":"D0;",$isD0:1,$isvB:1,"%":"ServiceWorker"},
+LO:{"^":"rla;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.vK]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"SpeechRecognitionResultList"},
+xth:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.vK]},
+$isqC:1},
+rla:{"^":"xth+Gm;",$iszM:1,
+$aszM:function(){return[W.vK]},
+$isqC:1},
+i9:{"^":"Gba;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a[b]},
+W:function(a,b){return a[b]},
+$iszM:1,
+$aszM:function(){return[W.WW]},
+$isqC:1,
+$isXj:1,
+$isDD:1,
+"%":"StyleSheetList"},
+Ocb:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[W.WW]},
+$isqC:1},
+Gba:{"^":"Ocb+Gm;",$iszM:1,
+$aszM:function(){return[W.WW]},
+$isqC:1},
+jx:{"^":"vB;",$isvB:1,"%":"WorkerLocation"},
+Iz:{"^":"vB;",$isvB:1,"%":"WorkerNavigator"},
+D9:{"^":"Mh;dA:a<",
+U:function(a,b){var z,y,x,w,v
+for(z=this.gvc(this),y=z.length,x=this.a,w=0;w<z.length;z.length===y||(0,H.lk)(z),++w){v=z[w]
+b.$2(v,x.getAttribute(v))}},
+gvc:function(a){var z,y,x,w,v
+z=this.a.attributes
+y=H.VM([],[P.qU])
+for(x=z.length,w=0;w<x;++w){v=z[w]
+if(v.namespaceURI==null)y.push(J.Ay(v))}return y}},
+i7:{"^":"D9;a",
+q:function(a,b){return this.a.getAttribute(b)},
+gA:function(a){return this.gvc(this).length}},
+I4:{"^":"hx;dA:a<",
+DG:function(){var z,y,x,w,v
+z=P.Ls(null,null,null,P.qU)
+for(y=this.a.className.split(" "),x=y.length,w=0;w<y.length;y.length===x||(0,H.lk)(y),++w){v=J.T0(y[w])
+if(v.length!==0)z.AN(0,v)}return z},
+p5:function(a){this.a.className=a.zV(0," ")},
+gA:function(a){return this.a.classList.length},
+tg:function(a,b){return typeof b==="string"&&this.a.classList.contains(b)},
+AN:function(a,b){var z,y
+z=this.a.classList
+y=z.contains(b)
+z.add(b)
+return!y},
+Rz:function(a,b){var z,y,x
+z=this.a.classList
+y=z.contains(b)
+z.remove(b)
+x=y
+return x}},
+RO:{"^":"qh;",
+X5:function(a,b,c,d){var z=new W.xC(0,this.a,this.b,W.aF(a),!1)
+z.$builtinTypeInfo=this.$builtinTypeInfo
+z.DN()
+return z}},
+Cq:{"^":"RO;a,b,c"},
+xC:{"^":"MO;a,b,c,d,e",
+Gv:function(a){if(this.b==null)return
+this.EO()
+this.b=null
+this.d=null
+return},
+DN:function(){var z=this.d
+if(z!=null&&this.a<=0)J.dZ(this.b,this.c,z,!1)},
+EO:function(){var z=this.d
+if(z!=null)J.EJ(this.b,this.c,z,!1)}},
+JQ:{"^":"Mh;a",
+i0:function(a){return $.$get$zX().tg(0,W.rS(a))},
+Eb:function(a,b,c){var z,y,x
+z=W.rS(a)
+y=$.$get$or()
+x=y.q(0,H.d(z)+"::"+b)
+if(x==null)x=y.q(0,"*::"+b)
+if(x==null)return!1
+return x.$4(a,b,c,this)},
+CY:function(a){var z,y
+z=$.$get$or()
+if(z.gl0(z)){for(y=0;y<262;++y)z.t(0,C.cm[y],W.pS())
+for(y=0;y<12;++y)z.t(0,C.BI[y],W.V4())}},
+$iskF:1,
+static:{
+Tw:function(a){var z,y
+z=document
+y=z.createElement("a")
+z=new W.mk(y,window.location)
+z=new W.JQ(z)
+z.CY(a)
+return z},
+qD:[function(a,b,c,d){return!0},"$4","pS",8,0,7],
+QW:[function(a,b,c,d){var z,y,x,w,v
+z=d.a
+y=z.a
+y.href=c
+x=y.hostname
+z=z.b
+w=z.hostname
+if(x==null?w==null:x===w){w=y.port
+v=z.port
+if(w==null?v==null:w===v){w=y.protocol
+z=z.protocol
+z=w==null?z==null:w===z}else z=!1}else z=!1
+if(!z)if(x==="")if(y.port===""){z=y.protocol
+z=z===":"||z===""}else z=!1
+else z=!1
+else z=!0
+return z},"$4","V4",8,0,7]}},
+Gm:{"^":"Mh;",
+gk:function(a){return new W.W9(a,this.gA(a),-1,null)},
+$iszM:1,
+$aszM:null,
+$isqC:1},
+vD:{"^":"Mh;a",
+i0:function(a){return C.Nm.Vr(this.a,new W.mD(a))},
+Eb:function(a,b,c){return C.Nm.Vr(this.a,new W.Eg(a,b,c))}},
+mD:{"^":"L:1;a",
+$1:function(a){return a.i0(this.a)}},
+Eg:{"^":"L:1;a,b,c",
+$1:function(a){return a.Eb(this.a,this.b,this.c)}},
+m6:{"^":"Mh;",
+i0:function(a){return this.a.tg(0,W.rS(a))},
+Eb:["jF",function(a,b,c){var z,y
+z=W.rS(a)
+y=this.c
+if(y.tg(0,H.d(z)+"::"+b))return this.d.Dt(c)
+else if(y.tg(0,"*::"+b))return this.d.Dt(c)
+else{y=this.b
+if(y.tg(0,H.d(z)+"::"+b))return!0
+else if(y.tg(0,"*::"+b))return!0
+else if(y.tg(0,H.d(z)+"::*"))return!0
+else if(y.tg(0,"*::*"))return!0}return!1}],
+CY:function(a,b,c,d){var z,y,x
+this.a.FV(0,c)
+z=b.S(0,new W.Eo())
+y=b.S(0,new W.Wk())
+this.b.FV(0,z)
+x=this.c
+x.FV(0,C.xD)
+x.FV(0,y)}},
+Eo:{"^":"L:1;",
+$1:function(a){return!C.Nm.tg(C.BI,a)}},
+Wk:{"^":"L:1;",
+$1:function(a){return C.Nm.tg(C.BI,a)}},
+ct:{"^":"m6;e,a,b,c,d",
+Eb:function(a,b,c){if(this.jF(a,b,c))return!0
+if(b==="template"&&c==="")return!0
+if(a.getAttribute("template")==="")return this.e.tg(0,b)
+return!1},
+static:{
+Bl:function(){var z,y,x,w
+z=H.VM(new H.A8(C.Qx,new W.IA()),[null,null])
+y=P.Ls(null,null,null,P.qU)
+x=P.Ls(null,null,null,P.qU)
+w=P.Ls(null,null,null,P.qU)
+w=new W.ct(P.tM(C.Qx,P.qU),y,x,w,null)
+w.CY(null,z,["TEMPLATE"],null)
+return w}}},
+IA:{"^":"L:1;",
+$1:function(a){return"TEMPLATE::"+H.d(a)}},
+Ow:{"^":"Mh;",
+i0:function(a){var z=J.v(a)
+if(!!z.$isj2)return!1
+z=!!z.$isd5
+if(z&&W.rS(a)==="foreignObject")return!1
+if(z)return!0
+return!1},
+Eb:function(a,b,c){if(b==="is"||C.xB.nC(b,"on"))return!1
+return this.i0(a)}},
+W9:{"^":"Mh;a,b,c,d",
+F:function(){var z,y
+z=this.c+1
+y=this.b
+if(z<y){this.d=J.w2(this.a,z)
+this.c=z
+return!0}this.d=null
+this.c=y
+return!1},
+gl:function(){return this.d}},
+dW:{"^":"Mh;a",
+On:function(a,b,c,d){return H.vh(new P.ub("You can only attach EventListeners to your own window."))},
+Y9:function(a,b,c,d){return H.vh(new P.ub("You can only attach EventListeners to your own window."))},
+$isD0:1,
+$isvB:1,
+static:{
+P1:function(a){if(a===window)return a
+else return new W.dW(a)}}},
+kF:{"^":"Mh;"},
+x:{"^":"Mh;",
+Pn:function(a){}},
+mk:{"^":"Mh;a,b"},
+MM:{"^":"Mh;a",
+Pn:function(a){new W.fm(this).$2(a,null)},
+EP:function(a,b){if(b==null)J.Ns(a)
+else b.removeChild(a)},
+I4:function(a,b){var z,y,x,w,v,u,t,s
+z=!0
+y=null
+x=null
+try{y=J.Q1(a)
+x=y.gdA().getAttribute("is")
+w=function(c){if(!(c.attributes instanceof NamedNodeMap))return true
+var r=c.childNodes
+if(c.lastChild&&c.lastChild!==r[r.length-1])return true
+if(c.children)if(!(c.children instanceof HTMLCollection||c.children instanceof NodeList))return true
+var q=0
+if(c.children)q=c.children.length
+for(var p=0;p<q;p++){var o=c.children[p]
+if(o.id=='attributes'||o.name=='attributes'||o.id=='lastChild'||o.name=='lastChild'||o.id=='children'||o.name=='children')return true}return false}(a)
+z=w?!0:!(a.attributes instanceof NamedNodeMap)}catch(t){H.p(t)}v="element unprintable"
+try{v=J.A(a)}catch(t){H.p(t)}try{u=W.rS(a)
+this.kR(a,b,z,v,u,y,x)}catch(t){if(H.p(t) instanceof P.AT)throw t
+else{this.EP(a,b)
+window
+s="Removing corrupted element "+H.d(v)
+if(typeof console!="undefined")console.warn(s)}}},
+kR:function(a,b,c,d,e,f,g){var z,y,x,w,v
+if(c){this.EP(a,b)
+window
+z="Removing element due to corrupted attributes on <"+d+">"
+if(typeof console!="undefined")console.warn(z)
+return}if(!this.a.i0(a)){this.EP(a,b)
+window
+z="Removing disallowed element <"+H.d(e)+"> from "+J.A(b)
+if(typeof console!="undefined")console.warn(z)
+return}if(g!=null)if(!this.a.Eb(a,"is",g)){this.EP(a,b)
+window
+z="Removing disallowed type extension <"+H.d(e)+' is="'+g+'">'
+if(typeof console!="undefined")console.warn(z)
+return}z=f.gvc(f)
+y=H.VM(z.slice(),[H.Kp(z,0)])
+for(x=f.gvc(f).length-1,z=f.a;x>=0;--x){w=y[x]
+if(!this.a.Eb(a,J.cH(w),z.getAttribute(w))){window
+v="Removing disallowed attribute <"+H.d(e)+" "+w+'="'+H.d(z.getAttribute(w))+'">'
+if(typeof console!="undefined")console.warn(v)
+z.getAttribute(w)
+z.removeAttribute(w)}}if(!!J.v(a).$isyY)this.Pn(a.content)}},
+fm:{"^":"L:15;a",
+$2:function(a,b){var z,y,x
+z=this.a
+switch(a.nodeType){case 1:z.I4(a,b)
+break
+case 8:case 11:case 3:case 4:break
+default:z.EP(a,b)}y=a.lastChild
+for(;y!=null;y=x){x=y.previousSibling
+this.$2(y,a)}}}}],["","",,P,{"^":"",tK:{"^":"vB;",$istK:1,$isMh:1,"%":"IDBIndex"},m9:{"^":"D0;kc:error=","%":"IDBOpenDBRequest|IDBRequest|IDBVersionChangeRequest"},nq:{"^":"D0;kc:error=","%":"IDBTransaction"}}],["","",,P,{"^":"",Y0:{"^":"tp;",$isvB:1,"%":"SVGAElement"},ZJ:{"^":"Pt;",$isvB:1,"%":"SVGAltGlyphElement"},ui:{"^":"d5;",$isvB:1,"%":"SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGSetElement"},jw:{"^":"d5;",$isvB:1,"%":"SVGFEBlendElement"},lv:{"^":"d5;",$isvB:1,"%":"SVGFEColorMatrixElement"},pf:{"^":"d5;",$isvB:1,"%":"SVGFEComponentTransferElement"},py:{"^":"d5;",$isvB:1,"%":"SVGFECompositeElement"},Ef:{"^":"d5;",$isvB:1,"%":"SVGFEConvolveMatrixElement"},zo:{"^":"d5;",$isvB:1,"%":"SVGFEDiffuseLightingElement"},q6:{"^":"d5;",$isvB:1,"%":"SVGFEDisplacementMapElement"},ih:{"^":"d5;",$isvB:1,"%":"SVGFEFloodElement"},v6:{"^":"d5;",$isvB:1,"%":"SVGFEGaussianBlurElement"},me:{"^":"d5;",$isvB:1,"%":"SVGFEImageElement"},oB:{"^":"d5;",$isvB:1,"%":"SVGFEMergeElement"},yu:{"^":"d5;",$isvB:1,"%":"SVGFEMorphologyElement"},MI:{"^":"d5;",$isvB:1,"%":"SVGFEOffsetElement"},bM:{"^":"d5;",$isvB:1,"%":"SVGFESpecularLightingElement"},Qy:{"^":"d5;",$isvB:1,"%":"SVGFETileElement"},ju:{"^":"d5;",$isvB:1,"%":"SVGFETurbulenceElement"},OE:{"^":"d5;",$isvB:1,"%":"SVGFilterElement"},BA:{"^":"tp;",$isBA:1,"%":"SVGGElement"},tp:{"^":"d5;",$isvB:1,"%":"SVGCircleElement|SVGClipPathElement|SVGDefsElement|SVGEllipseElement|SVGForeignObjectElement|SVGGeometryElement|SVGLineElement|SVGPathElement|SVGPolygonElement|SVGPolylineElement|SVGRectElement|SVGSwitchElement;SVGGraphicsElement"},rE:{"^":"tp;",$isvB:1,"%":"SVGImageElement"},Xk:{"^":"vB;",$isMh:1,"%":"SVGLength"},jK:{"^":"maa;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a.getItem(b)},
+W:function(a,b){return this.q(a,b)},
+$iszM:1,
+$aszM:function(){return[P.Xk]},
+$isqC:1,
+"%":"SVGLengthList"},nja:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[P.Xk]},
+$isqC:1},maa:{"^":"nja+Gm;",$iszM:1,
+$aszM:function(){return[P.Xk]},
+$isqC:1},uz:{"^":"d5;",$isvB:1,"%":"SVGMarkerElement"},Yd:{"^":"d5;",$isvB:1,"%":"SVGMaskElement"},uP:{"^":"vB;",$isMh:1,"%":"SVGNumber"},ZZ:{"^":"e0;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a.getItem(b)},
+W:function(a,b){return this.q(a,b)},
+$iszM:1,
+$aszM:function(){return[P.uP]},
+$isqC:1,
+"%":"SVGNumberList"},qba:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[P.uP]},
+$isqC:1},e0:{"^":"qba+Gm;",$iszM:1,
+$aszM:function(){return[P.uP]},
+$isqC:1},XW:{"^":"vB;",$isMh:1,"%":"SVGPathSeg|SVGPathSegArcAbs|SVGPathSegArcRel|SVGPathSegClosePath|SVGPathSegCurvetoCubicAbs|SVGPathSegCurvetoCubicRel|SVGPathSegCurvetoCubicSmoothAbs|SVGPathSegCurvetoCubicSmoothRel|SVGPathSegCurvetoQuadraticAbs|SVGPathSegCurvetoQuadraticRel|SVGPathSegCurvetoQuadraticSmoothAbs|SVGPathSegCurvetoQuadraticSmoothRel|SVGPathSegLinetoAbs|SVGPathSegLinetoHorizontalAbs|SVGPathSegLinetoHorizontalRel|SVGPathSegLinetoRel|SVGPathSegLinetoVerticalAbs|SVGPathSegLinetoVerticalRel|SVGPathSegMovetoAbs|SVGPathSegMovetoRel"},Sv:{"^":"f0;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a.getItem(b)},
+W:function(a,b){return this.q(a,b)},
+$iszM:1,
+$aszM:function(){return[P.XW]},
+$isqC:1,
+"%":"SVGPathSegList"},R1:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[P.XW]},
+$isqC:1},f0:{"^":"R1+Gm;",$iszM:1,
+$aszM:function(){return[P.XW]},
+$isqC:1},Gr:{"^":"d5;",$isvB:1,"%":"SVGPatternElement"},ED:{"^":"vB;A:length=","%":"SVGPointList"},j2:{"^":"d5;",$isj2:1,$isvB:1,"%":"SVGScriptElement"},Kq:{"^":"g0;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a.getItem(b)},
+W:function(a,b){return this.q(a,b)},
+$iszM:1,
+$aszM:function(){return[P.qU]},
+$isqC:1,
+"%":"SVGStringList"},S1:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[P.qU]},
+$isqC:1},g0:{"^":"S1+Gm;",$iszM:1,
+$aszM:function(){return[P.qU]},
+$isqC:1},O7:{"^":"hx;a",
+DG:function(){var z,y,x,w,v,u
+z=this.a.getAttribute("class")
+y=P.Ls(null,null,null,P.qU)
+if(z==null)return y
+for(x=z.split(" "),w=x.length,v=0;v<x.length;x.length===w||(0,H.lk)(x),++v){u=J.T0(x[v])
+if(u.length!==0)y.AN(0,u)}return y},
+p5:function(a){this.a.setAttribute("class",a.zV(0," "))}},d5:{"^":"cv;",
+gDD:function(a){return new P.O7(a)},
+O:function(a,b,c,d){var z,y,x,w,v
+if(c==null){z=H.VM([],[W.kF])
+d=new W.vD(z)
+z.push(W.Tw(null))
+z.push(W.Bl())
+z.push(new W.Ow())
+c=new W.MM(d)}y='<svg version="1.1">'+H.d(b)+"</svg>"
+z=document.body
+x=(z&&C.RY).E(z,y,c)
+w=document.createDocumentFragment()
+x.toString
+z=new W.e7(x)
+v=z.gV(z)
+for(;z=v.firstChild,z!=null;)w.appendChild(z)
+return w},
+$isd5:1,
+$isD0:1,
+$isvB:1,
+"%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGComponentTransferFunctionElement|SVGDescElement|SVGDiscardElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGHKernElement|SVGMetadataElement|SVGMissingGlyphElement|SVGStopElement|SVGStyleElement|SVGTitleElement|SVGVKernElement;SVGElement"},hy:{"^":"tp;",$isvB:1,"%":"SVGSVGElement"},aS:{"^":"d5;",$isvB:1,"%":"SVGSymbolElement"},mH:{"^":"tp;","%":";SVGTextContentElement"},Rk:{"^":"mH;",$isvB:1,"%":"SVGTextPathElement"},Pt:{"^":"mH;","%":"SVGTSpanElement|SVGTextElement;SVGTextPositioningElement"},zY:{"^":"vB;",$isMh:1,"%":"SVGTransform"},DT:{"^":"h0;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return a.getItem(b)},
+W:function(a,b){return this.q(a,b)},
+$iszM:1,
+$aszM:function(){return[P.zY]},
+$isqC:1,
+"%":"SVGTransformList"},T1:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[P.zY]},
+$isqC:1},h0:{"^":"T1+Gm;",$iszM:1,
+$aszM:function(){return[P.zY]},
+$isqC:1},ox:{"^":"tp;",$isvB:1,"%":"SVGUseElement"},ZD:{"^":"d5;",$isvB:1,"%":"SVGViewElement"},bW:{"^":"vB;",$isvB:1,"%":"SVGViewSpec"},cu:{"^":"d5;",$isvB:1,"%":"SVGGradientElement|SVGLinearGradientElement|SVGRadialGradientElement"},We:{"^":"d5;",$isvB:1,"%":"SVGCursorElement"},cB:{"^":"d5;",$isvB:1,"%":"SVGFEDropShadowElement"},Pi:{"^":"d5;",$isvB:1,"%":"SVGGlyphRefElement"},zu:{"^":"d5;",$isvB:1,"%":"SVGMPathElement"}}],["","",,P,{"^":"",r2:{"^":"vB;A:length=","%":"AudioBuffer"}}],["","",,P,{"^":""}],["","",,P,{"^":"",Fn:{"^":"i0;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)throw H.b(P.Cf(b,a,null,null,null))
+return P.mR(a.item(b))},
+W:function(a,b){return this.q(a,b)},
+$iszM:1,
+$aszM:function(){return[P.L8]},
+$isqC:1,
+"%":"SQLResultSetRowList"},U3:{"^":"vB+lD;",$iszM:1,
+$aszM:function(){return[P.L8]},
+$isqC:1},i0:{"^":"U3+Gm;",$iszM:1,
+$aszM:function(){return[P.L8]},
+$isqC:1}}],["","",,P,{"^":"",IU:{"^":"Mh;"}}],["","",,P,{"^":"",Ex:{"^":"Mh;"},tn:{"^":"Ex;",$astn:null}}],["","",,H,{"^":"",WZ:{"^":"vB;",$isWZ:1,"%":"ArrayBuffer"},ET:{"^":"vB;",$isET:1,"%":"DataView;ArrayBufferView;b0|fj|GV|Dg|pb|Ip|Pg"},b0:{"^":"ET;",
+gA:function(a){return a.length},
+$isXj:1,
+$isDD:1},Dg:{"^":"GV;",
+q:function(a,b){if(b>>>0!==b||b>=a.length)H.vh(H.HY(a,b))
+return a[b]}},fj:{"^":"b0+lD;",$iszM:1,
+$aszM:function(){return[P.CP]},
+$isqC:1},GV:{"^":"fj+SU;"},Pg:{"^":"Ip;",$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1},pb:{"^":"b0+lD;",$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1},Ip:{"^":"pb+SU;"},Hg:{"^":"Dg;",$iszM:1,
+$aszM:function(){return[P.CP]},
+$isqC:1,
+"%":"Float32Array"},fS:{"^":"Dg;",$iszM:1,
+$aszM:function(){return[P.CP]},
+$isqC:1,
+"%":"Float64Array"},xj:{"^":"Pg;",
+q:function(a,b){if(b>>>0!==b||b>=a.length)H.vh(H.HY(a,b))
+return a[b]},
+$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1,
+"%":"Int16Array"},dE:{"^":"Pg;",
+q:function(a,b){if(b>>>0!==b||b>=a.length)H.vh(H.HY(a,b))
+return a[b]},
+$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1,
+"%":"Int32Array"},ZA:{"^":"Pg;",
+q:function(a,b){if(b>>>0!==b||b>=a.length)H.vh(H.HY(a,b))
+return a[b]},
+$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1,
+"%":"Int8Array"},dT:{"^":"Pg;",
+q:function(a,b){if(b>>>0!==b||b>=a.length)H.vh(H.HY(a,b))
+return a[b]},
+$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1,
+"%":"Uint16Array"},nl:{"^":"Pg;",
+q:function(a,b){if(b>>>0!==b||b>=a.length)H.vh(H.HY(a,b))
+return a[b]},
+$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1,
+"%":"Uint32Array"},eE:{"^":"Pg;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)H.vh(H.HY(a,b))
+return a[b]},
+$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1,
+"%":"CanvasPixelArray|Uint8ClampedArray"},V6:{"^":"Pg;",
+gA:function(a){return a.length},
+q:function(a,b){if(b>>>0!==b||b>=a.length)H.vh(H.HY(a,b))
+return a[b]},
+$iszM:1,
+$aszM:function(){return[P.KN]},
+$isqC:1,
+"%":";Uint8Array"}}],["","",,H,{"^":"",
+qw:function(a){if(typeof dartPrint=="function"){dartPrint(a)
+return}if(typeof console=="object"&&typeof console.log!="undefined"){console.log(a)
+return}if(typeof window=="object")return
+if(typeof print=="function"){print(a)
+return}throw"Unable to print message: "+String(a)}}],["","",,P,{"^":"",
+mR:function(a){var z,y,x,w,v
+if(a==null)return
+z=P.u5()
+y=Object.getOwnPropertyNames(a)
+for(x=y.length,w=0;w<y.length;y.length===x||(0,H.lk)(y),++w){v=y[w]
+z.t(0,v,a[v])}return z},
+hx:{"^":"Mh;",
+VL:function(a){if($.$get$X4().b.test(H.Yx(a)))return a
+throw H.b(P.L3(a,"value","Not a valid class token"))},
+w:function(a){return this.DG().zV(0," ")},
+O4:function(a,b,c){var z,y
+this.VL(b)
+z=this.DG()
+if(!z.tg(0,b)){z.AN(0,b)
+y=!0}else{z.Rz(0,b)
+y=!1}this.p5(z)
+return y},
+lo:function(a,b){return this.O4(a,b,null)},
+gk:function(a){var z,y
+z=this.DG()
+y=new P.lm(z,z.r,null,null)
+y.c=z.e
+return y},
+U:function(a,b){this.DG().U(0,b)},
+gA:function(a){return this.DG().a},
+tg:function(a,b){if(typeof b!=="string")return!1
+this.VL(b)
+return this.DG().tg(0,b)},
+Zt:function(a){return this.tg(0,a)?a:null},
+AN:function(a,b){this.VL(b)
+return this.OS(0,new P.GE(b))},
+Rz:function(a,b){var z,y
+this.VL(b)
+z=this.DG()
+y=z.Rz(0,b)
+this.p5(z)
+return y},
+OS:function(a,b){var z,y
+z=this.DG()
+y=b.$1(z)
+this.p5(z)
+return y},
+$isqC:1},
+GE:{"^":"L:1;a",
+$1:function(a){return a.AN(0,this.a)}}}],["","",,Z,{"^":"",
+E:[function(){var z,y,x,w,v,u,t
+z=$.$get$t().innerHTML
+try{y=self.Viz(z,"svg")
+Z.r(y)}catch(v){u=H.p(v)
+x=u
+u=J.A(x)
+t=C.oW.h(u,0,u.length)
+w="<pre>"+H.d(t==null?u:t)+"</pre>"
+u=document.body;(u&&C.RY).N(u,"beforeend",w,null,null)}},"$0","cK",0,0,2],
+r:function(a){var z,y,x,w,v
+z=document.body;(z&&C.RY).N(z,"beforeend",a,C.Hv,null)
+z=$.$get$hh()
+y=z.style
+y.display="block"
+$.v7=H.Go(document.querySelector("svg"),"$isd5")
+z.toString
+z=H.VM(new W.Cq(z,"click",!1),[null])
+H.VM(new W.xC(0,z.a,z.b,W.aF(new Z.AR()),!1),[H.Kp(z,0)]).DN()
+for(z=new W.wz($.v7.querySelectorAll("g.node")),z=z.gk(z);z.F();){x=z.d
+y=J.RE(x)
+y.sjO(x,y.Wk(x,"title").textContent)}for(z=new W.wz($.v7.querySelectorAll("g.edge")),z=z.gk(z);z.F();){w=z.d
+y=J.RE(w)
+v=y.Wk(w,"title").textContent.split("->")
+y.a7(w,"x-from",v[0])
+w.setAttribute("x-to",v[1])}z=$.v7
+z.toString
+z=H.VM(new W.Cq(z,"mouseover",!1),[null])
+H.VM(new W.xC(0,z.a,z.b,W.aF(new Z.lg()),!1),[H.Kp(z,0)]).DN()
+z=$.v7
+z.toString
+z=H.VM(new W.Cq(z,"mouseleave",!1),[null])
+H.VM(new W.xC(0,z.a,z.b,W.aF(new Z.qK()),!1),[H.Kp(z,0)]).DN()},
+ws:function(a){var z,y
+z=[]
+if(a!=null)if(new P.O7(a).tg(0,"edge"))C.Nm.FV(z,[a.getAttribute("x-to"),a.getAttribute("x-from")])
+else z.push(a.id)
+y=new W.wz($.v7.querySelectorAll("g.node"))
+y.U(y,new Z.tb(z))
+y=new W.wz($.v7.querySelectorAll("g.edge"))
+y.U(y,new Z.GJ(z))},
+AR:{"^":"L:1;",
+$1:function(a){var z=$.v7
+z.toString
+new P.O7(z).lo(0,"zoom")}},
+lg:{"^":"L:5;",
+$1:function(a){var z,y
+z=H.Go(W.qc(a.relatedTarget),"$iscv")
+while(!0){y=z!=null
+if(!(y&&!J.v(z).$isBA))break
+z=z.parentElement}if(y){y=J.RE(z)
+y=y.gDD(z).tg(0,"edge")||y.gDD(z).tg(0,"node")}else y=!1
+if(y)Z.ws(z)
+else Z.ws(null)}},
+qK:{"^":"L:5;",
+$1:function(a){Z.ws(null)}},
+tb:{"^":"L:6;a",
+$1:function(a){var z=J.RE(a)
+if(C.Nm.tg(this.a,a.id))z.gDD(a).AN(0,"active")
+else z.gDD(a).Rz(0,"active")}},
+GJ:{"^":"L:6;a",
+$1:function(a){var z,y
+z=this.a
+if(z.length===2){z=C.Nm.tg(z,a.getAttribute("x-to"))&&C.Nm.tg(z,a.getAttribute("x-from"))
+y=J.RE(a)
+if(z)y.gDD(a).AN(0,"active")
+else y.gDD(a).Rz(0,"active")}else{z=C.Nm.tg(z,a.getAttribute("x-to"))||C.Nm.tg(z,a.getAttribute("x-from"))
+y=J.RE(a)
+if(z)y.gDD(a).AN(0,"active")
+else y.gDD(a).Rz(0,"active")}}}},1]]
+setupProgram(dart,0)
+J.RE=function(a){if(a==null)return a
+if(typeof a!="object"){if(typeof a=="function")return J.c5.prototype
+return a}if(a instanceof P.Mh)return a
+return J.m(a)}
+J.U6=function(a){if(typeof a=="string")return J.Dr.prototype
+if(a==null)return a
+if(a.constructor==Array)return J.jd.prototype
+if(typeof a!="object"){if(typeof a=="function")return J.c5.prototype
+return a}if(a instanceof P.Mh)return a
+return J.m(a)}
+J.Wx=function(a){if(typeof a=="number")return J.jX.prototype
+if(a==null)return a
+if(!(a instanceof P.Mh))return J.k.prototype
+return a}
+J.rY=function(a){if(typeof a=="string")return J.Dr.prototype
+if(a==null)return a
+if(!(a instanceof P.Mh))return J.k.prototype
+return a}
+J.v=function(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.im.prototype
+return J.VA.prototype}if(typeof a=="string")return J.Dr.prototype
+if(a==null)return J.PE.prototype
+if(typeof a=="boolean")return J.yE.prototype
+if(a.constructor==Array)return J.jd.prototype
+if(typeof a!="object"){if(typeof a=="function")return J.c5.prototype
+return a}if(a instanceof P.Mh)return a
+return J.m(a)}
+J.w1=function(a){if(a==null)return a
+if(a.constructor==Array)return J.jd.prototype
+if(typeof a!="object"){if(typeof a=="function")return J.c5.prototype
+return a}if(a instanceof P.Mh)return a
+return J.m(a)}
+J.A=function(a){return J.v(a).w(a)}
+J.Ay=function(a){return J.RE(a).goc(a)}
+J.EJ=function(a,b,c,d){return J.RE(a).Y9(a,b,c,d)}
+J.GA=function(a,b){return J.w1(a).W(a,b)}
+J.Gq=function(a,b){return J.RE(a).sLU(a,b)}
+J.Hm=function(a){return J.U6(a).gA(a)}
+J.IT=function(a){return J.w1(a).gk(a)}
+J.Ns=function(a){return J.w1(a).wg(a)}
+J.Ob=function(a){return J.RE(a).gns(a)}
+J.Q1=function(a){return J.RE(a).gQg(a)}
+J.RM=function(a,b){if(a==null)return b==null
+if(typeof a!="object")return b!=null&&a===b
+return J.v(a).D(a,b)}
+J.T0=function(a){return J.rY(a).bS(a)}
+J.TT=function(a,b){return J.RE(a).wR(a,b)}
+J.YA=function(a){return J.RE(a).gkc(a)}
+J.aa=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<b
+return J.Wx(a).B(a,b)}
+J.cH=function(a){return J.rY(a).hc(a)}
+J.dZ=function(a,b,c,d){return J.RE(a).On(a,b,c,d)}
+J.hE=function(a,b){return J.w1(a).U(a,b)}
+J.hf=function(a){return J.v(a).gM(a)}
+J.iu=function(a,b){return J.w1(a).ez(a,b)}
+J.ld=function(a,b,c){return J.rY(a).C(a,b,c)}
+J.w2=function(a,b){if(typeof b==="number")if(a.constructor==Array||typeof a=="string"||H.wV(a,a[init.dispatchPropertyName]))if(b>>>0===b&&b<a.length)return a[b]
+return J.U6(a).q(a,b)}
+I.uL=function(a){a.immutable$list=Array
+a.fixed$length=Array
+return a}
+var $=I.p
+C.RY=W.QP.prototype
+C.Ok=J.vB.prototype
+C.Nm=J.jd.prototype
+C.jn=J.im.prototype
+C.xB=J.Dr.prototype
+C.DG=J.c5.prototype
+C.t5=W.BH.prototype
+C.ZQ=J.iC.prototype
+C.Ie=W.Tb.prototype
+C.vB=J.k.prototype
+C.KZ=new H.hJ()
+C.NU=new P.R8()
+C.Hv=new W.x()
+C.RT=new P.a6(0)
+C.Hw=new P.fU("unknown",!0,!0,!0,!0)
+C.oW=new P.Rc(C.Hw)
+C.Mc=function(hooks) {
+  if (typeof dartExperimentalFixupGetTag != "function") return hooks;
+  hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);
+}
+C.lR=function(hooks) {
+  var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
+  if (userAgent.indexOf("Firefox") == -1) return hooks;
+  var getTag = hooks.getTag;
+  var quickMap = {
+    "BeforeUnloadEvent": "Event",
+    "DataTransfer": "Clipboard",
+    "GeoGeolocation": "Geolocation",
+    "Location": "!Location",
+    "WorkerMessageEvent": "MessageEvent",
+    "XMLDocument": "!Document"};
+  function getTagFirefox(o) {
+    var tag = getTag(o);
+    return quickMap[tag] || tag;
+  }
+  hooks.getTag = getTagFirefox;
+}
+C.w2=function getTagFallback(o) {
+  var constructor = o.constructor;
+  if (typeof constructor == "function") {
+    var name = constructor.name;
+    if (typeof name == "string" &&
+        name.length > 2 &&
+        name !== "Object" &&
+        name !== "Function.prototype") {
+      return name;
+    }
+  }
+  var s = Object.prototype.toString.call(o);
+  return s.substring(8, s.length - 1);
+}
+C.XQ=function(hooks) { return hooks; }
+
+C.ur=function(getTagFallback) {
+  return function(hooks) {
+    if (typeof navigator != "object") return hooks;
+    var ua = navigator.userAgent;
+    if (ua.indexOf("DumpRenderTree") >= 0) return hooks;
+    if (ua.indexOf("Chrome") >= 0) {
+      function confirm(p) {
+        return typeof window == "object" && window[p] && window[p].name == p;
+      }
+      if (confirm("Window") && confirm("HTMLElement")) return hooks;
+    }
+    hooks.getTag = getTagFallback;
+  };
+}
+C.Jh=function(hooks) {
+  var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
+  if (userAgent.indexOf("Trident/") == -1) return hooks;
+  var getTag = hooks.getTag;
+  var quickMap = {
+    "BeforeUnloadEvent": "Event",
+    "DataTransfer": "Clipboard",
+    "HTMLDDElement": "HTMLElement",
+    "HTMLDTElement": "HTMLElement",
+    "HTMLPhraseElement": "HTMLElement",
+    "Position": "Geoposition"
+  };
+  function getTagIE(o) {
+    var tag = getTag(o);
+    var newTag = quickMap[tag];
+    if (newTag) return newTag;
+    if (tag == "Object") {
+      if (window.DataView && (o instanceof window.DataView)) return "DataView";
+    }
+    return tag;
+  }
+  function prototypeForTagIE(tag) {
+    var constructor = window[tag];
+    if (constructor == null) return null;
+    return constructor.prototype;
+  }
+  hooks.getTag = getTagIE;
+  hooks.prototypeForTag = prototypeForTagIE;
+}
+C.M1=function() {
+  function typeNameInChrome(o) {
+    var constructor = o.constructor;
+    if (constructor) {
+      var name = constructor.name;
+      if (name) return name;
+    }
+    var s = Object.prototype.toString.call(o);
+    return s.substring(8, s.length - 1);
+  }
+  function getUnknownTag(object, tag) {
+    if (/^HTML[A-Z].*Element$/.test(tag)) {
+      var name = Object.prototype.toString.call(object);
+      if (name == "[object Object]") return null;
+      return "HTMLElement";
+    }
+  }
+  function getUnknownTagGenericBrowser(object, tag) {
+    if (self.HTMLElement && object instanceof HTMLElement) return "HTMLElement";
+    return getUnknownTag(object, tag);
+  }
+  function prototypeForTag(tag) {
+    if (typeof window == "undefined") return null;
+    if (typeof window[tag] == "undefined") return null;
+    var constructor = window[tag];
+    if (typeof constructor != "function") return null;
+    return constructor.prototype;
+  }
+  function discriminator(tag) { return null; }
+  var isBrowser = typeof navigator == "object";
+  return {
+    getTag: typeNameInChrome,
+    getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag,
+    prototypeForTag: prototypeForTag,
+    discriminator: discriminator };
+}
+C.hQ=function(hooks) {
+  var getTag = hooks.getTag;
+  var prototypeForTag = hooks.prototypeForTag;
+  function getTagFixed(o) {
+    var tag = getTag(o);
+    if (tag == "Document") {
+      if (!!o.xmlVersion) return "!Document";
+      return "!HTMLDocument";
+    }
+    return tag;
+  }
+  function prototypeForTagFixed(tag) {
+    if (tag == "Document") return null;
+    return prototypeForTag(tag);
+  }
+  hooks.getTag = getTagFixed;
+  hooks.prototypeForTag = prototypeForTagFixed;
+}
+C.cm=H.VM(I.uL(["*::class","*::dir","*::draggable","*::hidden","*::id","*::inert","*::itemprop","*::itemref","*::itemscope","*::lang","*::spellcheck","*::title","*::translate","A::accesskey","A::coords","A::hreflang","A::name","A::shape","A::tabindex","A::target","A::type","AREA::accesskey","AREA::alt","AREA::coords","AREA::nohref","AREA::shape","AREA::tabindex","AREA::target","AUDIO::controls","AUDIO::loop","AUDIO::mediagroup","AUDIO::muted","AUDIO::preload","BDO::dir","BODY::alink","BODY::bgcolor","BODY::link","BODY::text","BODY::vlink","BR::clear","BUTTON::accesskey","BUTTON::disabled","BUTTON::name","BUTTON::tabindex","BUTTON::type","BUTTON::value","CANVAS::height","CANVAS::width","CAPTION::align","COL::align","COL::char","COL::charoff","COL::span","COL::valign","COL::width","COLGROUP::align","COLGROUP::char","COLGROUP::charoff","COLGROUP::span","COLGROUP::valign","COLGROUP::width","COMMAND::checked","COMMAND::command","COMMAND::disabled","COMMAND::label","COMMAND::radiogroup","COMMAND::type","DATA::value","DEL::datetime","DETAILS::open","DIR::compact","DIV::align","DL::compact","FIELDSET::disabled","FONT::color","FONT::face","FONT::size","FORM::accept","FORM::autocomplete","FORM::enctype","FORM::method","FORM::name","FORM::novalidate","FORM::target","FRAME::name","H1::align","H2::align","H3::align","H4::align","H5::align","H6::align","HR::align","HR::noshade","HR::size","HR::width","HTML::version","IFRAME::align","IFRAME::frameborder","IFRAME::height","IFRAME::marginheight","IFRAME::marginwidth","IFRAME::width","IMG::align","IMG::alt","IMG::border","IMG::height","IMG::hspace","IMG::ismap","IMG::name","IMG::usemap","IMG::vspace","IMG::width","INPUT::accept","INPUT::accesskey","INPUT::align","INPUT::alt","INPUT::autocomplete","INPUT::autofocus","INPUT::checked","INPUT::disabled","INPUT::inputmode","INPUT::ismap","INPUT::list","INPUT::max","INPUT::maxlength","INPUT::min","INPUT::multiple","INPUT::name","INPUT::placeholder","INPUT::readonly","INPUT::required","INPUT::size","INPUT::step","INPUT::tabindex","INPUT::type","INPUT::usemap","INPUT::value","INS::datetime","KEYGEN::disabled","KEYGEN::keytype","KEYGEN::name","LABEL::accesskey","LABEL::for","LEGEND::accesskey","LEGEND::align","LI::type","LI::value","LINK::sizes","MAP::name","MENU::compact","MENU::label","MENU::type","METER::high","METER::low","METER::max","METER::min","METER::value","OBJECT::typemustmatch","OL::compact","OL::reversed","OL::start","OL::type","OPTGROUP::disabled","OPTGROUP::label","OPTION::disabled","OPTION::label","OPTION::selected","OPTION::value","OUTPUT::for","OUTPUT::name","P::align","PRE::width","PROGRESS::max","PROGRESS::min","PROGRESS::value","SELECT::autocomplete","SELECT::disabled","SELECT::multiple","SELECT::name","SELECT::required","SELECT::size","SELECT::tabindex","SOURCE::type","TABLE::align","TABLE::bgcolor","TABLE::border","TABLE::cellpadding","TABLE::cellspacing","TABLE::frame","TABLE::rules","TABLE::summary","TABLE::width","TBODY::align","TBODY::char","TBODY::charoff","TBODY::valign","TD::abbr","TD::align","TD::axis","TD::bgcolor","TD::char","TD::charoff","TD::colspan","TD::headers","TD::height","TD::nowrap","TD::rowspan","TD::scope","TD::valign","TD::width","TEXTAREA::accesskey","TEXTAREA::autocomplete","TEXTAREA::cols","TEXTAREA::disabled","TEXTAREA::inputmode","TEXTAREA::name","TEXTAREA::placeholder","TEXTAREA::readonly","TEXTAREA::required","TEXTAREA::rows","TEXTAREA::tabindex","TEXTAREA::wrap","TFOOT::align","TFOOT::char","TFOOT::charoff","TFOOT::valign","TH::abbr","TH::align","TH::axis","TH::bgcolor","TH::char","TH::charoff","TH::colspan","TH::headers","TH::height","TH::nowrap","TH::rowspan","TH::scope","TH::valign","TH::width","THEAD::align","THEAD::char","THEAD::charoff","THEAD::valign","TR::align","TR::bgcolor","TR::char","TR::charoff","TR::valign","TRACK::default","TRACK::kind","TRACK::label","TRACK::srclang","UL::compact","UL::type","VIDEO::controls","VIDEO::height","VIDEO::loop","VIDEO::mediagroup","VIDEO::muted","VIDEO::preload","VIDEO::width"]),[P.qU])
+C.Sq=I.uL(["HEAD","AREA","BASE","BASEFONT","BR","COL","COLGROUP","EMBED","FRAME","FRAMESET","HR","IMAGE","IMG","INPUT","ISINDEX","LINK","META","PARAM","SOURCE","STYLE","TITLE","WBR"])
+C.xD=I.uL([])
+C.Qx=H.VM(I.uL(["bind","if","ref","repeat","syntax"]),[P.qU])
+C.BI=H.VM(I.uL(["A::href","AREA::href","BLOCKQUOTE::cite","BODY::background","COMMAND::icon","DEL::cite","FORM::action","IMG::src","INPUT::src","INS::cite","Q::cite","VIDEO::poster"]),[P.qU])
+$.te="$cachedFunction"
+$.eb="$cachedInvocation"
+$.yj=0
+$.mJ=null
+$.P4=null
+$.n=null
+$.c=null
+$.x7=null
+$.z=null
+$.a=null
+$.M=null
+$.S6=null
+$.k8=null
+$.mg=null
+$.UD=!1
+$.X3=C.NU
+$.Ss=0
+$.xo=null
+$.BO=null
+$.lt=null
+$.EU=null
+$.v7=null
+$=null
+init.isHunkLoaded=function(a){return!!$dart_deferred_initializers$[a]}
+init.deferredInitialized=new Object(null)
+init.isHunkInitialized=function(a){return init.deferredInitialized[a]}
+init.initializeLoadedHunk=function(a){$dart_deferred_initializers$[a]($globals$,$)
+init.deferredInitialized[a]=true}
+init.deferredLibraryUris={}
+init.deferredLibraryHashes={};(function(a){for(var z=0;z<a.length;){var y=a[z++]
+var x=a[z++]
+var w=a[z++]
+I.$lazy(y,x,w)}})(["fa","$get$fa",function(){return init.getIsolateTag("_$dart_dartClosure")},"Kb","$get$Kb",function(){return H.yl()},"jp","$get$jp",function(){return new P.kM(null)},"U2","$get$U2",function(){return H.cM(H.S7({
+toString:function(){return"$receiver$"}}))},"k1","$get$k1",function(){return H.cM(H.S7({$method$:null,
+toString:function(){return"$receiver$"}}))},"Re","$get$Re",function(){return H.cM(H.S7(null))},"fN","$get$fN",function(){return H.cM(function(){var $argumentsExpr$='$arguments$'
+try{null.$method$($argumentsExpr$)}catch(z){return z.message}}())},"qi","$get$qi",function(){return H.cM(H.S7(void 0))},"rZ","$get$rZ",function(){return H.cM(function(){var $argumentsExpr$='$arguments$'
+try{(void 0).$method$($argumentsExpr$)}catch(z){return z.message}}())},"BX","$get$BX",function(){return H.cM(H.Mj(null))},"tt","$get$tt",function(){return H.cM(function(){try{null.$method$}catch(z){return z.message}}())},"dt","$get$dt",function(){return H.cM(H.Mj(void 0))},"A7","$get$A7",function(){return H.cM(function(){try{(void 0).$method$}catch(z){return z.message}}())},"Wc","$get$Wc",function(){return P.Oj()},"xg","$get$xg",function(){return[]},"zX","$get$zX",function(){return P.tM(["A","ABBR","ACRONYM","ADDRESS","AREA","ARTICLE","ASIDE","AUDIO","B","BDI","BDO","BIG","BLOCKQUOTE","BR","BUTTON","CANVAS","CAPTION","CENTER","CITE","CODE","COL","COLGROUP","COMMAND","DATA","DATALIST","DD","DEL","DETAILS","DFN","DIR","DIV","DL","DT","EM","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FORM","H1","H2","H3","H4","H5","H6","HEADER","HGROUP","HR","I","IFRAME","IMG","INPUT","INS","KBD","LABEL","LEGEND","LI","MAP","MARK","MENU","METER","NAV","NOBR","OL","OPTGROUP","OPTION","OUTPUT","P","PRE","PROGRESS","Q","S","SAMP","SECTION","SELECT","SMALL","SOURCE","SPAN","STRIKE","STRONG","SUB","SUMMARY","SUP","TABLE","TBODY","TD","TEXTAREA","TFOOT","TH","THEAD","TIME","TR","TRACK","TT","U","UL","VAR","VIDEO","WBR"],null)},"or","$get$or",function(){return P.u5()},"X4","$get$X4",function(){return new H.VR("^\\S+$",H.v4("^\\S+$",!1,!0,!1),null,null)},"hh","$get$hh",function(){return H.Go(W.Z0("#zoomBtn"),"$isIF")},"t","$get$t",function(){return H.Go(W.Z0("#dot"),"$isqI")}])
+I=I.$finishIsolateConstructor(I)
+$=new I()
+init.metadata=[null]
+init.types=[{func:1},{func:1,args:[,]},{func:1,v:true},{func:1,v:true,args:[{func:1,v:true}]},{func:1,ret:P.qU,args:[P.KN]},{func:1,args:[W.Aj]},{func:1,args:[W.cv]},{func:1,ret:P.a2,args:[W.cv,P.qU,P.qU,W.JQ]},{func:1,args:[,P.qU]},{func:1,args:[P.qU]},{func:1,args:[{func:1,v:true}]},{func:1,v:true,args:[,],opt:[P.Gz]},{func:1,args:[,],opt:[,]},{func:1,args:[,P.Gz]},{func:1,args:[,,]},{func:1,v:true,args:[W.K,W.K]}]
+function convertToFastObject(a){function MyClass(){}MyClass.prototype=a
+new MyClass()
+return a}function convertToSlowObject(a){a.__MAGIC_SLOW_PROPERTY=1
+delete a.__MAGIC_SLOW_PROPERTY
+return a}A=convertToFastObject(A)
+B=convertToFastObject(B)
+C=convertToFastObject(C)
+D=convertToFastObject(D)
+E=convertToFastObject(E)
+F=convertToFastObject(F)
+G=convertToFastObject(G)
+H=convertToFastObject(H)
+J=convertToFastObject(J)
+K=convertToFastObject(K)
+L=convertToFastObject(L)
+M=convertToFastObject(M)
+N=convertToFastObject(N)
+O=convertToFastObject(O)
+P=convertToFastObject(P)
+Q=convertToFastObject(Q)
+R=convertToFastObject(R)
+S=convertToFastObject(S)
+T=convertToFastObject(T)
+U=convertToFastObject(U)
+V=convertToFastObject(V)
+W=convertToFastObject(W)
+X=convertToFastObject(X)
+Y=convertToFastObject(Y)
+Z=convertToFastObject(Z)
+function init(){I.p=Object.create(null)
+init.allClasses=map()
+init.getTypeFromName=function(a){return init.allClasses[a]}
+init.interceptorsByTag=map()
+init.leafTags=map()
+init.finishedClasses=map()
+I.$lazy=function(a,b,c,d,e){if(!init.lazies)init.lazies=Object.create(null)
+init.lazies[a]=b
+e=e||I.p
+var z={}
+var y={}
+e[a]=z
+e[b]=function(){var x=this[a]
+try{if(x===z){this[a]=y
+try{x=this[a]=c()}finally{if(x===z)this[a]=null}}else if(x===y)H.eQ(d||a)
+return x}finally{this[b]=function(){return this[a]}}}}
+I.$finishIsolateConstructor=function(a){var z=a.p
+function Isolate(){var y=Object.keys(z)
+for(var x=0;x<y.length;x++){var w=y[x]
+this[w]=z[w]}var v=init.lazies
+var u=v?Object.keys(v):[]
+for(var x=0;x<u.length;x++)this[v[u[x]]]=null
+function ForceEfficientMap(){}ForceEfficientMap.prototype=this
+new ForceEfficientMap()
+for(var x=0;x<u.length;x++){var t=v[u[x]]
+this[t]=z[t]}}Isolate.prototype=a.prototype
+Isolate.prototype.constructor=Isolate
+Isolate.p=z
+Isolate.uL=a.uL
+Isolate.HU=a.HU
+return Isolate}}!function(){var z=function(a){var t={}
+t[a]=1
+return Object.keys(convertToFastObject(t))[0]}
+init.getIsolateTag=function(a){return z("___dart_"+a+init.isolateTag)}
+var y="___dart_isolate_tags_"
+var x=Object[y]||(Object[y]=Object.create(null))
+var w="_ZxYxX"
+for(var v=0;;v++){var u=z(w+"_"+v+"_")
+if(!(u in x)){x[u]=1
+init.isolateTag=u
+break}}init.dispatchPropertyName=init.getIsolateTag("dispatch_record")}();(function(a){if(typeof document==="undefined"){a(null)
+return}if(typeof document.currentScript!='undefined'){a(document.currentScript)
+return}var z=document.scripts
+function onLoad(b){for(var x=0;x<z.length;++x)z[x].removeEventListener("load",onLoad,false)
+a(b.target)}for(var y=0;y<z.length;++y)z[y].addEventListener("load",onLoad,false)})(function(a){init.currentScript=a
+if(typeof dartMainRunner==="function")dartMainRunner(function(b){H.Rq(Z.cK(),b)},[])
+else (function(b){H.Rq(Z.cK(),b)})([])})})()
\ No newline at end of file
diff --git a/pkg/analyzer/doc/tasks.html b/pkg/analyzer/doc/tasks.html
new file mode 100644
index 0000000..2224724
--- /dev/null
+++ b/pkg/analyzer/doc/tasks.html
@@ -0,0 +1,340 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Analysis Task Dependency Graph</title>
+    <link rel="stylesheet" href="support/style.css">
+    <script src="support/viz.js"></script>
+    <script type="application/dart" src="support/web_app.dart.js"></script>
+    <script src="support/dart.js"></script>
+</head>
+<body>
+<button id="zoomBtn">Zoom</button>
+<script type="text/vnd.graphviz" id="dot">
+digraph G {
+  tooltip="Analysis Task Dependency Graph";
+  node [fontname=Helvetica];
+  edge [fontname=Helvetica, fontcolor=gray];
+  BUILD_DIRECTIVES_ERRORS -> LibraryUnitErrorsTask
+  BUILD_DIRECTIVES_ERRORS [shape=box]
+  BUILD_LIBRARY_ERRORS -> LibraryUnitErrorsTask
+  BUILD_LIBRARY_ERRORS [shape=box]
+  BuildCompilationUnitElementTask -> COMPILATION_UNIT_CONSTANTS
+  BuildCompilationUnitElementTask -> COMPILATION_UNIT_ELEMENT
+  BuildCompilationUnitElementTask -> CREATED_RESOLVED_UNIT1
+  BuildCompilationUnitElementTask -> RESOLVED_UNIT1
+  BuildDirectiveElementsTask -> BUILD_DIRECTIVES_ERRORS
+  BuildDirectiveElementsTask -> LIBRARY_ELEMENT2
+  BuildEnumMemberElementsTask -> CREATED_RESOLVED_UNIT3
+  BuildEnumMemberElementsTask -> RESOLVED_UNIT3
+  BuildExportNamespaceTask -> LIBRARY_ELEMENT4
+  BuildLibraryElementTask -> BUILD_LIBRARY_ERRORS
+  BuildLibraryElementTask -> IS_LAUNCHABLE
+  BuildLibraryElementTask -> LIBRARY_ELEMENT1
+  BuildPublicNamespaceTask -> LIBRARY_ELEMENT3
+  BuildSourceExportClosureTask -> EXPORT_SOURCE_CLOSURE
+  BuildTypeProviderTask -> TYPE_PROVIDER
+  COMPILATION_UNIT_CONSTANTS -> EvaluateUnitConstantsTask
+  COMPILATION_UNIT_CONSTANTS [shape=box]
+  COMPILATION_UNIT_ELEMENT [shape=box]
+  CONSTANT_DEPENDENCIES -> ComputeConstantValueTask
+  CONSTANT_DEPENDENCIES [shape=box]
+  CONSTANT_EXPRESSIONS_DEPENDENCIES -> EvaluateUnitConstantsTask
+  CONSTANT_EXPRESSIONS_DEPENDENCIES [shape=box]
+  CONSTANT_EXPRESSION_RESOLVED -> ComputeConstantDependenciesTask
+  CONSTANT_EXPRESSION_RESOLVED [shape=box]
+  CONSTANT_VALUE -> ComputeConstantValueTask
+  CONSTANT_VALUE -> EvaluateUnitConstantsTask
+  CONSTANT_VALUE [shape=box]
+  CONTAINING_LIBRARIES -> DartErrorsTask
+  CONTAINING_LIBRARIES [shape=box]
+  CONTENT -> ScanDartTask
+  CONTENT [shape=box]
+  CREATED_RESOLVED_UNIT [shape=box]
+  CREATED_RESOLVED_UNIT1 [shape=box]
+  CREATED_RESOLVED_UNIT10 -> InferInstanceMembersInUnitTask
+  CREATED_RESOLVED_UNIT10 -> InferStaticVariableTypeTask
+  CREATED_RESOLVED_UNIT10 -> PartiallyResolveUnitReferencesTask
+  CREATED_RESOLVED_UNIT10 -> ResolveInstanceFieldsInUnitTask
+  CREATED_RESOLVED_UNIT10 -> ResolveUnitTask
+  CREATED_RESOLVED_UNIT10 [shape=box]
+  CREATED_RESOLVED_UNIT11 -> ResolveConstantExpressionTask
+  CREATED_RESOLVED_UNIT11 [shape=box]
+  CREATED_RESOLVED_UNIT12 [shape=box]
+  CREATED_RESOLVED_UNIT2 [shape=box]
+  CREATED_RESOLVED_UNIT3 [shape=box]
+  CREATED_RESOLVED_UNIT4 [shape=box]
+  CREATED_RESOLVED_UNIT5 [shape=box]
+  CREATED_RESOLVED_UNIT6 [shape=box]
+  CREATED_RESOLVED_UNIT7 [shape=box]
+  CREATED_RESOLVED_UNIT8 -> ResolveInstanceFieldsInUnitTask
+  CREATED_RESOLVED_UNIT8 [shape=box]
+  CREATED_RESOLVED_UNIT9 -> InferInstanceMembersInUnitTask
+  CREATED_RESOLVED_UNIT9 [shape=box]
+  ComputeConstantDependenciesTask -> CONSTANT_DEPENDENCIES
+  ComputeConstantValueTask -> CONSTANT_VALUE
+  ComputeInferableStaticVariableDependenciesTask -> INFERABLE_STATIC_VARIABLE_DEPENDENCIES
+  ComputeLibraryCycleTask -> LIBRARY_CYCLE
+  ComputeLibraryCycleTask -> LIBRARY_CYCLE_DEPENDENCIES
+  ComputeLibraryCycleTask -> LIBRARY_CYCLE_UNITS
+  ComputePropagableVariableDependenciesTask -> PROPAGABLE_VARIABLE_DEPENDENCIES
+  ContainingLibrariesTask -> CONTAINING_LIBRARIES
+  DART_ERRORS -> LibraryErrorsReadyTask
+  DART_ERRORS [shape=box]
+  DART_SCRIPTS -> ScanDartTask
+  DART_SCRIPTS [shape=box]
+  DartErrorsTask -> DART_ERRORS
+  EXPLICITLY_IMPORTED_LIBRARIES [shape=box]
+  EXPORTED_LIBRARIES -> BuildDirectiveElementsTask
+  EXPORTED_LIBRARIES -> ReadyLibraryElement2Task
+  EXPORTED_LIBRARIES -> ReadyLibraryElement5Task
+  EXPORTED_LIBRARIES -> ReadyLibraryElement6Task
+  EXPORTED_LIBRARIES [shape=box]
+  EXPORT_SOURCE_CLOSURE -> BuildExportNamespaceTask
+  EXPORT_SOURCE_CLOSURE [shape=box]
+  EvaluateUnitConstantsTask -> CREATED_RESOLVED_UNIT12
+  EvaluateUnitConstantsTask -> RESOLVED_UNIT12
+  GatherUsedImportedElementsTask -> USED_IMPORTED_ELEMENTS
+  GatherUsedLocalElementsTask -> USED_LOCAL_ELEMENTS
+  GenerateHintsTask -> HINTS
+  GenerateLintsTask -> LINTS
+  HINTS -> LibraryUnitErrorsTask
+  HINTS [shape=box]
+  IMPORTED_LIBRARIES -> BuildDirectiveElementsTask
+  IMPORTED_LIBRARIES -> ReadyLibraryElement2Task
+  IMPORTED_LIBRARIES -> ReadyLibraryElement5Task
+  IMPORTED_LIBRARIES -> ReadyLibraryElement6Task
+  IMPORTED_LIBRARIES -> ResolveUnitTypeNamesTask
+  IMPORTED_LIBRARIES [shape=box]
+  INCLUDED_PARTS -> BuildLibraryElementTask
+  INCLUDED_PARTS [shape=box]
+  INFERABLE_STATIC_VARIABLES_IN_UNIT -> InferStaticVariableTypesInUnitTask
+  INFERABLE_STATIC_VARIABLES_IN_UNIT [shape=box]
+  INFERABLE_STATIC_VARIABLE_DEPENDENCIES -> InferStaticVariableTypeTask
+  INFERABLE_STATIC_VARIABLE_DEPENDENCIES [shape=box]
+  INFERRED_STATIC_VARIABLE -> InferStaticVariableTypeTask
+  INFERRED_STATIC_VARIABLE -> InferStaticVariableTypesInUnitTask
+  INFERRED_STATIC_VARIABLE [shape=box]
+  IS_LAUNCHABLE [shape=box]
+  InferInstanceMembersInUnitTask -> CREATED_RESOLVED_UNIT10
+  InferInstanceMembersInUnitTask -> RESOLVED_UNIT10
+  InferStaticVariableTypeTask -> INFERRED_STATIC_VARIABLE
+  InferStaticVariableTypesInUnitTask -> CREATED_RESOLVED_UNIT8
+  InferStaticVariableTypesInUnitTask -> RESOLVED_UNIT8
+  LIBRARY_CYCLE [shape=box]
+  LIBRARY_CYCLE_DEPENDENCIES -> InferInstanceMembersInUnitTask
+  LIBRARY_CYCLE_DEPENDENCIES -> InferStaticVariableTypeTask
+  LIBRARY_CYCLE_DEPENDENCIES -> PartiallyResolveUnitReferencesTask
+  LIBRARY_CYCLE_DEPENDENCIES -> ResolveInstanceFieldsInUnitTask
+  LIBRARY_CYCLE_DEPENDENCIES [shape=box]
+  LIBRARY_CYCLE_UNITS -> InferInstanceMembersInUnitTask
+  LIBRARY_CYCLE_UNITS -> ResolveInstanceFieldsInUnitTask
+  LIBRARY_CYCLE_UNITS -> ResolveUnitTask
+  LIBRARY_CYCLE_UNITS [shape=box]
+  LIBRARY_ELEMENT -> LibraryErrorsReadyTask
+  LIBRARY_ELEMENT [shape=box]
+  LIBRARY_ELEMENT1 -> BuildDirectiveElementsTask
+  LIBRARY_ELEMENT1 -> ResolveVariableReferencesTask
+  LIBRARY_ELEMENT1 [shape=box]
+  LIBRARY_ELEMENT2 -> BuildPublicNamespaceTask
+  LIBRARY_ELEMENT2 -> BuildSourceExportClosureTask
+  LIBRARY_ELEMENT2 -> ComputeLibraryCycleTask
+  LIBRARY_ELEMENT2 -> ReadyLibraryElement2Task
+  LIBRARY_ELEMENT2 -> ResolveDirectiveElementsTask
+  LIBRARY_ELEMENT2 [shape=box]
+  LIBRARY_ELEMENT3 -> BuildExportNamespaceTask
+  LIBRARY_ELEMENT3 -> BuildTypeProviderTask
+  LIBRARY_ELEMENT3 [shape=box]
+  LIBRARY_ELEMENT4 -> ResolveLibraryTypeNamesTask
+  LIBRARY_ELEMENT4 -> ResolveUnitTypeNamesTask
+  LIBRARY_ELEMENT4 [shape=box]
+  LIBRARY_ELEMENT5 -> PartiallyResolveUnitReferencesTask
+  LIBRARY_ELEMENT5 -> PropagateVariableTypesInLibraryTask
+  LIBRARY_ELEMENT5 -> ReadyLibraryElement5Task
+  LIBRARY_ELEMENT5 -> ResolveInstanceFieldsInUnitTask
+  LIBRARY_ELEMENT5 [shape=box]
+  LIBRARY_ELEMENT6 -> PropagateVariableTypesInLibraryClosureTask
+  LIBRARY_ELEMENT6 -> ReadyLibraryElement6Task
+  LIBRARY_ELEMENT6 [shape=box]
+  LIBRARY_ELEMENT7 -> ResolveLibraryReferencesTask
+  LIBRARY_ELEMENT7 -> ResolveUnitTask
+  LIBRARY_ELEMENT7 [shape=box]
+  LIBRARY_ELEMENT8 -> EvaluateUnitConstantsTask
+  LIBRARY_ELEMENT8 -> ResolveLibraryTask
+  LIBRARY_ELEMENT8 [shape=box]
+  LIBRARY_ERRORS_READY [shape=box]
+  LIBRARY_SPECIFIC_UNITS -> GenerateHintsTask
+  LIBRARY_SPECIFIC_UNITS -> PropagateVariableTypesInLibraryTask
+  LIBRARY_SPECIFIC_UNITS -> ReadyResolvedUnitTask
+  LIBRARY_SPECIFIC_UNITS -> ResolveLibraryReferencesTask
+  LIBRARY_SPECIFIC_UNITS -> ResolveLibraryTypeNamesTask
+  LIBRARY_SPECIFIC_UNITS [shape=box]
+  LIBRARY_UNIT_ERRORS -> dartErrorsForUnit
+  LIBRARY_UNIT_ERRORS [shape=box]
+  LINE_INFO -> DartErrorsTask
+  LINE_INFO -> ParseDartTask
+  LINE_INFO [shape=box]
+  LINTS -> LibraryUnitErrorsTask
+  LINTS [shape=box]
+  LibraryErrorsReadyTask -> LIBRARY_ERRORS_READY
+  LibraryUnitErrorsTask -> LIBRARY_UNIT_ERRORS
+  MODIFICATION_TIME -> ParseDartTask
+  MODIFICATION_TIME [shape=box]
+  PARSED_UNIT -> BuildCompilationUnitElementTask
+  PARSED_UNIT -> DartErrorsTask
+  PARSED_UNIT [shape=box]
+  PARSE_ERRORS -> dartErrorsForSource
+  PARSE_ERRORS [shape=box]
+  PROPAGABLE_VARIABLES_IN_UNIT -> PropagateVariableTypesInUnitTask
+  PROPAGABLE_VARIABLES_IN_UNIT [shape=box]
+  PROPAGABLE_VARIABLE_DEPENDENCIES -> PropagateVariableTypeTask
+  PROPAGABLE_VARIABLE_DEPENDENCIES [shape=box]
+  PROPAGATED_VARIABLE -> PropagateVariableTypeTask
+  PROPAGATED_VARIABLE -> PropagateVariableTypesInUnitTask
+  PROPAGATED_VARIABLE [shape=box]
+  ParseDartTask -> EXPLICITLY_IMPORTED_LIBRARIES
+  ParseDartTask -> EXPORTED_LIBRARIES
+  ParseDartTask -> IMPORTED_LIBRARIES
+  ParseDartTask -> INCLUDED_PARTS
+  ParseDartTask -> LIBRARY_SPECIFIC_UNITS
+  ParseDartTask -> PARSED_UNIT
+  ParseDartTask -> PARSE_ERRORS
+  ParseDartTask -> SOURCE_KIND
+  ParseDartTask -> UNITS
+  PartiallyResolveUnitReferencesTask -> CREATED_RESOLVED_UNIT6
+  PartiallyResolveUnitReferencesTask -> INFERABLE_STATIC_VARIABLES_IN_UNIT
+  PartiallyResolveUnitReferencesTask -> PROPAGABLE_VARIABLES_IN_UNIT
+  PartiallyResolveUnitReferencesTask -> RESOLVED_UNIT6
+  PropagateVariableTypeTask -> PROPAGATED_VARIABLE
+  PropagateVariableTypesInLibraryClosureTask -> LIBRARY_ELEMENT7
+  PropagateVariableTypesInLibraryTask -> LIBRARY_ELEMENT6
+  PropagateVariableTypesInUnitTask -> CREATED_RESOLVED_UNIT7
+  PropagateVariableTypesInUnitTask -> RESOLVED_UNIT7
+  READY_LIBRARY_ELEMENT2 -> ComputeLibraryCycleTask
+  READY_LIBRARY_ELEMENT2 -> ReadyLibraryElement2Task
+  READY_LIBRARY_ELEMENT2 [shape=box]
+  READY_LIBRARY_ELEMENT5 -> PartiallyResolveUnitReferencesTask
+  READY_LIBRARY_ELEMENT5 -> ReadyLibraryElement5Task
+  READY_LIBRARY_ELEMENT5 [shape=box]
+  READY_LIBRARY_ELEMENT6 -> PropagateVariableTypesInLibraryClosureTask
+  READY_LIBRARY_ELEMENT6 -> ReadyLibraryElement6Task
+  READY_LIBRARY_ELEMENT6 [shape=box]
+  READY_RESOLVED_UNIT -> ResolveLibraryTask
+  READY_RESOLVED_UNIT -> VerifyUnitTask
+  READY_RESOLVED_UNIT [shape=box]
+  REFERENCED_NAMES [shape=box]
+  RESOLVED_UNIT -> GenerateHintsTask
+  RESOLVED_UNIT -> GenerateLintsTask
+  RESOLVED_UNIT -> ReadyResolvedUnitTask
+  RESOLVED_UNIT -> VerifyUnitTask
+  RESOLVED_UNIT [shape=box]
+  RESOLVED_UNIT1 -> BuildDirectiveElementsTask
+  RESOLVED_UNIT1 -> BuildLibraryElementTask
+  RESOLVED_UNIT1 -> ResolveDirectiveElementsTask
+  RESOLVED_UNIT1 [shape=box]
+  RESOLVED_UNIT10 -> ResolveUnitTask
+  RESOLVED_UNIT10 [shape=box]
+  RESOLVED_UNIT11 -> EvaluateUnitConstantsTask
+  RESOLVED_UNIT11 -> GatherUsedImportedElementsTask
+  RESOLVED_UNIT11 -> GatherUsedLocalElementsTask
+  RESOLVED_UNIT11 -> ResolveLibraryReferencesTask
+  RESOLVED_UNIT11 [shape=box]
+  RESOLVED_UNIT12 -> StrongModeVerifyUnitTask
+  RESOLVED_UNIT12 [shape=box]
+  RESOLVED_UNIT2 -> BuildEnumMemberElementsTask
+  RESOLVED_UNIT2 [shape=box]
+  RESOLVED_UNIT3 -> ResolveUnitTypeNamesTask
+  RESOLVED_UNIT3 [shape=box]
+  RESOLVED_UNIT4 -> ResolveLibraryTypeNamesTask
+  RESOLVED_UNIT4 -> ResolveVariableReferencesTask
+  RESOLVED_UNIT4 [shape=box]
+  RESOLVED_UNIT5 -> PartiallyResolveUnitReferencesTask
+  RESOLVED_UNIT5 [shape=box]
+  RESOLVED_UNIT6 -> ComputeInferableStaticVariableDependenciesTask
+  RESOLVED_UNIT6 -> ComputePropagableVariableDependenciesTask
+  RESOLVED_UNIT6 -> PropagateVariableTypeTask
+  RESOLVED_UNIT6 -> PropagateVariableTypesInUnitTask
+  RESOLVED_UNIT6 [shape=box]
+  RESOLVED_UNIT7 -> InferStaticVariableTypeTask
+  RESOLVED_UNIT7 -> InferStaticVariableTypesInUnitTask
+  RESOLVED_UNIT7 -> PropagateVariableTypesInLibraryTask
+  RESOLVED_UNIT7 [shape=box]
+  RESOLVED_UNIT8 -> ResolveInstanceFieldsInUnitTask
+  RESOLVED_UNIT8 [shape=box]
+  RESOLVED_UNIT9 -> InferInstanceMembersInUnitTask
+  RESOLVED_UNIT9 [shape=box]
+  RESOLVE_TYPE_NAMES_ERRORS -> LibraryUnitErrorsTask
+  RESOLVE_TYPE_NAMES_ERRORS [shape=box]
+  RESOLVE_UNIT_ERRORS -> LibraryUnitErrorsTask
+  RESOLVE_UNIT_ERRORS [shape=box]
+  ReadyLibraryElement2Task -> READY_LIBRARY_ELEMENT2
+  ReadyLibraryElement5Task -> READY_LIBRARY_ELEMENT5
+  ReadyLibraryElement6Task -> READY_LIBRARY_ELEMENT6
+  ReadyResolvedUnitTask -> READY_RESOLVED_UNIT
+  ResolveConstantExpressionTask -> CONSTANT_EXPRESSION_RESOLVED
+  ResolveDirectiveElementsTask -> CREATED_RESOLVED_UNIT2
+  ResolveDirectiveElementsTask -> RESOLVED_UNIT2
+  ResolveInstanceFieldsInUnitTask -> CREATED_RESOLVED_UNIT9
+  ResolveInstanceFieldsInUnitTask -> RESOLVED_UNIT9
+  ResolveLibraryReferencesTask -> LIBRARY_ELEMENT8
+  ResolveLibraryReferencesTask -> REFERENCED_NAMES
+  ResolveLibraryTask -> LIBRARY_ELEMENT
+  ResolveLibraryTypeNamesTask -> LIBRARY_ELEMENT5
+  ResolveUnitTask -> CONSTANT_EXPRESSIONS_DEPENDENCIES
+  ResolveUnitTask -> CREATED_RESOLVED_UNIT11
+  ResolveUnitTask -> RESOLVED_UNIT11
+  ResolveUnitTask -> RESOLVE_UNIT_ERRORS
+  ResolveUnitTypeNamesTask -> CREATED_RESOLVED_UNIT4
+  ResolveUnitTypeNamesTask -> RESOLVED_UNIT4
+  ResolveUnitTypeNamesTask -> RESOLVE_TYPE_NAMES_ERRORS
+  ResolveVariableReferencesTask -> CREATED_RESOLVED_UNIT5
+  ResolveVariableReferencesTask -> RESOLVED_UNIT5
+  ResolveVariableReferencesTask -> VARIABLE_REFERENCE_ERRORS
+  SCAN_ERRORS -> dartErrorsForSource
+  SCAN_ERRORS [shape=box]
+  SOURCE_KIND -> BuildDirectiveElementsTask
+  SOURCE_KIND [shape=box]
+  STRONG_MODE_ERRORS -> LibraryUnitErrorsTask
+  STRONG_MODE_ERRORS [shape=box]
+  ScanDartTask -> LINE_INFO
+  ScanDartTask -> SCAN_ERRORS
+  ScanDartTask -> TOKEN_STREAM
+  StrongModeVerifyUnitTask -> CREATED_RESOLVED_UNIT
+  StrongModeVerifyUnitTask -> RESOLVED_UNIT
+  StrongModeVerifyUnitTask -> STRONG_MODE_ERRORS
+  TOKEN_STREAM -> ParseDartTask
+  TOKEN_STREAM [shape=box]
+  TYPE_PROVIDER -> BuildEnumMemberElementsTask
+  TYPE_PROVIDER -> ComputeConstantDependenciesTask
+  TYPE_PROVIDER -> ComputeConstantValueTask
+  TYPE_PROVIDER -> GenerateHintsTask
+  TYPE_PROVIDER -> InferInstanceMembersInUnitTask
+  TYPE_PROVIDER -> InferStaticVariableTypeTask
+  TYPE_PROVIDER -> PartiallyResolveUnitReferencesTask
+  TYPE_PROVIDER -> PropagateVariableTypeTask
+  TYPE_PROVIDER -> ResolveInstanceFieldsInUnitTask
+  TYPE_PROVIDER -> ResolveLibraryTypeNamesTask
+  TYPE_PROVIDER -> ResolveUnitTask
+  TYPE_PROVIDER -> ResolveUnitTypeNamesTask
+  TYPE_PROVIDER -> ResolveVariableReferencesTask
+  TYPE_PROVIDER -> StrongModeVerifyUnitTask
+  TYPE_PROVIDER -> VerifyUnitTask
+  TYPE_PROVIDER [shape=box]
+  UNITS -> LibraryErrorsReadyTask
+  UNITS [shape=box]
+  USED_IMPORTED_ELEMENTS -> GenerateHintsTask
+  USED_IMPORTED_ELEMENTS [shape=box]
+  USED_LOCAL_ELEMENTS -> GenerateHintsTask
+  USED_LOCAL_ELEMENTS [shape=box]
+  VARIABLE_REFERENCE_ERRORS -> LibraryUnitErrorsTask
+  VARIABLE_REFERENCE_ERRORS [shape=box]
+  VERIFY_ERRORS -> LibraryUnitErrorsTask
+  VERIFY_ERRORS [shape=box]
+  VerifyUnitTask -> VERIFY_ERRORS
+  dartErrorsForSource -> DartErrorsTask
+  dartErrorsForSource [shape=hexagon]
+  dartErrorsForUnit -> DartErrorsTask
+  dartErrorsForUnit [shape=hexagon]
+}
+</script>
+</body>
+</html>
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 860c029..a320b8d 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -624,6 +624,11 @@
   bool get isDeprecated;
 
   /**
+   * Return `true` if this element has an annotation of the form '@JS(..)'.
+   */
+  bool get isJS;
+
+  /**
    * Return `true` if this element has an annotation of the form '@override'.
    */
   bool get isOverride;
@@ -813,6 +818,12 @@
   bool get isDeprecated;
 
   /**
+   * Return `true` if this annotation marks the associated element with the `JS`
+   * annotation.
+   */
+  bool get isJS;
+
+  /**
    * Return `true` if this annotation marks the associated member as requiring
    * overriding methods to call super.
    */
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index ba28157..63528f1b 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1620,6 +1620,16 @@
   static String _DEPRECATED_VARIABLE_NAME = "deprecated";
 
   /**
+   * The name of the class used to JS annotate an element.
+   */
+  static String _JS_CLASS_NAME = "JS";
+
+  /**
+   * The name of `js` library, used to define JS annotations.
+   */
+  static String _JS_LIB_NAME = "js";
+
+  /**
    * The name of `meta` library, used to define analysis annotations.
    */
   static String _META_LIB_NAME = "meta";
@@ -1708,6 +1718,11 @@
   }
 
   @override
+  bool get isJS => element is ConstructorElement &&
+        element.enclosingElement.name == _JS_CLASS_NAME &&
+        element.library?.name == _JS_LIB_NAME;
+
+  @override
   bool get isMustCallSuper =>
       element is PropertyAccessorElement &&
       element.name == _MUST_CALL_SUPER_VARIABLE_NAME &&
@@ -1923,6 +1938,16 @@
   }
 
   @override
+  bool get isJS {
+    for (ElementAnnotation annotation in metadata) {
+      if (annotation.isJS) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @override
   bool get isOverride {
     for (ElementAnnotation annotation in metadata) {
       if (annotation.isOverride) {
@@ -4105,6 +4130,9 @@
   bool get isDeprecated => false;
 
   @override
+  bool get isJS => false;
+
+  @override
   bool get isOverride => false;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/handle.dart b/pkg/analyzer/lib/src/dart/element/handle.dart
index 99b87b2..b922a4c 100644
--- a/pkg/analyzer/lib/src/dart/element/handle.dart
+++ b/pkg/analyzer/lib/src/dart/element/handle.dart
@@ -62,6 +62,9 @@
   bool get isEnum => actualElement.isEnum;
 
   @override
+  bool get isJS => actualElement.isJS;
+
+  @override
   bool get isMixinApplication => actualElement.isMixinApplication;
 
   @override
@@ -353,6 +356,9 @@
   bool get isDeprecated => actualElement.isDeprecated;
 
   @override
+  bool get isJS => actualElement.isJS;
+
+  @override
   bool get isOverride => actualElement.isOverride;
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index f467ce2..efb778f 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -461,6 +461,9 @@
   bool get isDeprecated => _baseElement.isDeprecated;
 
   @override
+  bool get isJS => _baseElement.isJS;
+
+  @override
   bool get isOverride => _baseElement.isOverride;
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/error.dart b/pkg/analyzer/lib/src/generated/error.dart
index 4a78c0d..f3947b4 100644
--- a/pkg/analyzer/lib/src/generated/error.dart
+++ b/pkg/analyzer/lib/src/generated/error.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/source/error_processor.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/dart/scanner/scanner.dart' show ScannerErrorCode;
+import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/generated/shared_messages.dart'
     as shared_messages;
 import 'package:analyzer/src/generated/java_core.dart';
@@ -2683,6 +2684,7 @@
     HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION,
     HintCode.INVALID_ASSIGNMENT,
     HintCode.INVALID_USE_OF_PROTECTED_MEMBER,
+    HintCode.MISSING_JS_LIB_ANNOTATION,
     HintCode.MISSING_REQUIRED_PARAM,
     HintCode.MISSING_RETURN,
     HintCode.NULL_AWARE_IN_CONDITION,
@@ -2706,6 +2708,7 @@
     HintCode.UNUSED_CATCH_CLAUSE,
     HintCode.UNUSED_CATCH_STACK,
     HintCode.UNUSED_LOCAL_VARIABLE,
+    HintCode.UNUSED_SHOWN_NAME,
     HintCode.USE_OF_VOID_RESULT,
     HintCode.FILE_IMPORT_INSIDE_LIB_REFERENCES_FILE_OUTSIDE,
     HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE,
@@ -3583,6 +3586,14 @@
   static const HintCode MISSING_REQUIRED_PARAM = const HintCode(
       'MISSING_REQUIRED_PARAM', "The parameter '{0}' is required. {1}");
 
+   /**
+   * Generate a hint for an element that is annotated with `@JS(...)` whose
+   * library declaration is not similarly annotated.
+   */
+  static const HintCode MISSING_JS_LIB_ANNOTATION = const HintCode(
+      'MISSING_JS_LIB_ANNOTATION',
+      "The @JS() annotation can only be used if it is also declared on the library directive.");
+
   /**
    * Generate a hint for methods or functions that have a return type, but do
    * not have a non-void return statement on all branches. At the end of methods
@@ -3778,6 +3789,12 @@
       "The value of the local variable '{0}' is not used");
 
   /**
+   * Unused shown names are names shown on imports which are never used.
+   */
+  static const HintCode UNUSED_SHOWN_NAME =
+      const HintCode('UNUSED_SHOWN_NAME', "The name {0} is shown, but not used.");
+
+  /**
    * Hint for cases where the source expects a method or function to return a
    * non-void result, but the method or function signature returns void.
    *
@@ -5715,12 +5732,19 @@
           "Add a case clause for the missing constant or add a default clause.");
 
   /**
+   * A flag indicating whether this warning is an error when running with strong
+   * mode enabled.
+   */
+  final bool isStrongModeError;
+
+  /**
    * Initialize a newly created error code to have the given [name]. The message
    * associated with the error will be created from the given [message]
    * template. The correction associated with the error will be created from the
    * given [correction] template.
    */
-  const StaticWarningCode(String name, String message, [String correction])
+  const StaticWarningCode(String name, String message,
+      [String correction, this.isStrongModeError = false])
       : super(name, message, correction);
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index aa3651e..ac7214d 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/visitor.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/member.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -305,6 +306,7 @@
   @override
   Object visitAnnotation(Annotation node) {
     _checkForInvalidAnnotationFromDeferredLibrary(node);
+    _checkForMissingJSLibAnnotation(node);
     return super.visitAnnotation(node);
   }
 
@@ -3729,50 +3731,6 @@
         [name.name]);
   }
 
-  void _checkForMissingRequiredParam(
-      DartType type, ArgumentList argumentList, AstNode node) {
-    if (type is FunctionType) {
-      List<ParameterElement> parameters = type.parameters;
-      for (ParameterElement param in parameters) {
-        if (param.parameterKind == ParameterKind.NAMED) {
-          ElementAnnotationImpl annotation = _getRequiredAnnotation(param);
-          if (annotation != null) {
-            String paramName = param.name;
-            if (!_containsNamedExpression(argumentList, paramName)) {
-              DartObject constantValue = annotation.constantValue;
-              String reason =
-                  constantValue.getField('reason')?.toStringValue() ?? '';
-              // Append a `.` if needed.
-              if (reason != null &&
-                  reason.isNotEmpty &&
-                  !reason.endsWith('.')) {
-                reason += '.';
-              }
-
-              _errorReporter.reportErrorForNode(
-                  HintCode.MISSING_REQUIRED_PARAM, node, [paramName, reason]);
-            }
-          }
-        }
-      }
-    }
-  }
-
-  ElementAnnotationImpl _getRequiredAnnotation(ParameterElement param) => param
-      .metadata
-      .firstWhere((ElementAnnotation e) => e.isRequired, orElse: () => null);
-
-  bool _containsNamedExpression(ArgumentList args, String name) {
-    for (Expression expression in args.arguments) {
-      if (expression is NamedExpression) {
-        if (expression.name.label.name == name) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
   /**
    * Check whether the given [executableElement] collides with the name of a
    * static method in one of its superclasses, and reports the appropriate
@@ -4249,6 +4207,38 @@
     }
   }
 
+  void _checkForMissingJSLibAnnotation(Annotation node) {
+    if (node.elementAnnotation?.isJS ?? false) {
+      Element element = ElementLocator.locate(node.parent);
+      if (element?.library?.isJS != true) {
+        _errorReporter.reportErrorForNode(
+            HintCode.MISSING_JS_LIB_ANNOTATION, node, [element.name]);
+      }
+    }
+  }
+
+  void _checkForMissingRequiredParam(
+      DartType type, ArgumentList argumentList, AstNode node) {
+    if (type is FunctionType) {
+      List<ParameterElement> parameters = type.parameters;
+      for (ParameterElement param in parameters) {
+        if (param.parameterKind == ParameterKind.NAMED) {
+          ElementAnnotationImpl annotation = _getRequiredAnnotation(param);
+          if (annotation != null) {
+            String paramName = param.name;
+            if (!_containsNamedExpression(argumentList, paramName)) {
+              DartObject constantValue = annotation.constantValue;
+              String reason =
+                  constantValue.getField('reason')?.toStringValue() ?? '';
+              _errorReporter.reportErrorForNode(
+                  HintCode.MISSING_REQUIRED_PARAM, node, [paramName, reason]);
+            }
+          }
+        }
+      }
+    }
+  }
+
   /**
    * Verify that the given function [body] does not contain return statements
    * that both have and do not have return values.
@@ -5662,6 +5652,17 @@
     return staticReturnType;
   }
 
+  bool _containsNamedExpression(ArgumentList args, String name) {
+    for (Expression expression in args.arguments) {
+      if (expression is NamedExpression) {
+        if (expression.name.label.name == name) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
   MethodElement _findOverriddenMemberThatMustCallSuper(MethodDeclaration node) {
     ExecutableElement overriddenMember = _getOverriddenMember(node.element);
     List<ExecutableElement> seen = <ExecutableElement>[];
@@ -5742,6 +5743,10 @@
     return _inheritanceManager.lookupInheritance(classElement, member.name);
   }
 
+  ElementAnnotationImpl _getRequiredAnnotation(ParameterElement param) => param
+      .metadata
+      .firstWhere((ElementAnnotation e) => e.isRequired, orElse: () => null);
+
   /**
    * Return the type of the first and only parameter of the given [setter].
    */
diff --git a/pkg/analyzer/lib/src/generated/incremental_resolution_validator.dart b/pkg/analyzer/lib/src/generated/incremental_resolution_validator.dart
index 78b0355..67885d1 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolution_validator.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolution_validator.dart
@@ -856,6 +856,8 @@
     if (a is LocalElement && b is LocalElement) {
       _verifyEqual('visibleRange', a.visibleRange, b.visibleRange);
     }
+    _verifyEqual(
+        'documentationComment', a.documentationComment, b.documentationComment);
   }
 
   void _verifyEqual(String name, actual, expected) {
diff --git a/pkg/analyzer/lib/src/generated/incremental_resolver.dart b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
index 3d3d7d8..9ed4477 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
@@ -1677,6 +1677,23 @@
     _updateEntry();
     // resolve references in the comment
     incrementalResolver._resolveReferences(newComment);
+    // update 'documentationComment' of the parent element(s)
+    {
+      AstNode parent = newComment.parent;
+      if (parent is AnnotatedNode) {
+        Element parentElement = ElementLocator.locate(newComment.parent);
+        if (parentElement is ElementImpl) {
+          setElementDocumentationComment(parentElement, parent);
+        } else if (parentElement == null && parent is FieldDeclaration) {
+          for (VariableDeclaration field in parent.fields.variables) {
+            if (field.element is ElementImpl) {
+              setElementDocumentationComment(
+                  field.element as ElementImpl, parent);
+            }
+          }
+        }
+      }
+    }
     // OK
     return true;
   }
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index 28cc6f4..32afd15 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -3386,7 +3386,7 @@
    */
   Identifier parsePrefixedIdentifier() {
     SimpleIdentifier qualifier = parseSimpleIdentifier();
-    if (!_matches(TokenType.PERIOD)) {
+    if (!_matches(TokenType.PERIOD) || _injectGenericCommentTypeList()) {
       return qualifier;
     }
     Token period = getAndAdvance();
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 0a3fdb8..3f1c0ed 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -4104,24 +4104,8 @@
   }
 
   @override
-  void visitPrefixedIdentifier(PrefixedIdentifier node) {
-    // If the prefixed identifier references some A.B, where A is a library
-    // prefix, then we can lookup the associated ImportDirective in
-    // prefixElementMap and remove it from the unusedImports list.
-    SimpleIdentifier prefixIdentifier = node.prefix;
-    Element element = prefixIdentifier.staticElement;
-    if (element is PrefixElement) {
-      usedElements.prefixes.add(element);
-      return;
-    }
-    // Otherwise, pass the prefixed identifier element and name onto
-    // visitIdentifier.
-    _visitIdentifier(element, prefixIdentifier.name);
-  }
-
-  @override
   void visitSimpleIdentifier(SimpleIdentifier node) {
-    _visitIdentifier(node.staticElement, node.name);
+    _visitIdentifier(node, node.staticElement);
   }
 
   /**
@@ -4132,7 +4116,7 @@
     directive.metadata.accept(this);
   }
 
-  void _visitIdentifier(Element element, String name) {
+  void _visitIdentifier(SimpleIdentifier identifier, Element element) {
     if (element == null) {
       return;
     }
@@ -4141,11 +4125,18 @@
     if (element is MultiplyDefinedElement) {
       MultiplyDefinedElement multiplyDefinedElement = element;
       for (Element elt in multiplyDefinedElement.conflictingElements) {
-        _visitIdentifier(elt, name);
+        _visitIdentifier(identifier, elt);
       }
       return;
-    } else if (element is PrefixElement) {
-      usedElements.prefixes.add(element);
+    }
+
+    // Record `importPrefix.identifier` into 'prefixMap'.
+    if (_recordPrefixMap(identifier, element)) {
+      return;
+    }
+
+    if (element is PrefixElement) {
+      usedElements.prefixMap.putIfAbsent(element, () => <Element>[]);
       return;
     } else if (element.enclosingElement is! CompilationUnitElement) {
       // Identifiers that aren't a prefix element and whose enclosing element
@@ -4166,6 +4157,30 @@
     // Remember the element.
     usedElements.elements.add(element);
   }
+
+  /**
+   * If the given [identifier] is prefixed with a [PrefixElement], fill the
+   * corresponding `UsedImportedElements.prefixMap` entry and return `true`.
+   */
+  bool _recordPrefixMap(SimpleIdentifier identifier, Element element) {
+    bool recordIfTargetIsPrefixElement(Expression target) {
+      if (target is SimpleIdentifier && target.staticElement is PrefixElement) {
+        List<Element> prefixedElements = usedElements.prefixMap
+            .putIfAbsent(target.staticElement, () => <Element>[]);
+        prefixedElements.add(element);
+        return true;
+      }
+      return false;
+    }
+    AstNode parent = identifier.parent;
+    if (parent is MethodInvocation && parent.methodName == identifier) {
+      return recordIfTargetIsPrefixElement(parent.target);
+    }
+    if (parent is PrefixedIdentifier && parent.identifier == identifier) {
+      return recordIfTargetIsPrefixElement(parent.prefix);
+    }
+    return false;
+  }
 }
 
 /**
@@ -4375,6 +4390,7 @@
             .removeUsedElements(_usedImportedElementsVisitor.usedElements);
         importsVerifier.generateDuplicateImportHints(definingUnitErrorReporter);
         importsVerifier.generateUnusedImportHints(definingUnitErrorReporter);
+        importsVerifier.generateUnusedShownNameHints(definingUnitErrorReporter);
       }
       _library.accept(new UnusedLocalElementsVerifier(
           _errorListener, _usedLocalElementsVisitor.usedElements));
@@ -4457,20 +4473,23 @@
 }
 
 /**
- * Instances of the class `ImportsVerifier` visit all of the referenced libraries in the
- * source code verifying that all of the imports are used, otherwise a
- * [HintCode.UNUSED_IMPORT] is generated with
- * [generateUnusedImportHints].
+ * Instances of the class `ImportsVerifier` visit all of the referenced libraries in the source code
+ * verifying that all of the imports are used, otherwise a [HintCode.UNUSED_IMPORT] hint is
+ * generated with [generateUnusedImportHints].
+ *
+ * Additionally, [generateDuplicateImportHints] generates [HintCode.DUPLICATE_IMPORT] hints and
+ * [HintCode.UNUSED_SHOWN_NAME] hints.
  *
  * While this class does not yet have support for an "Organize Imports" action, this logic built up
  * in this class could be used for such an action in the future.
  */
 class ImportsVerifier {
   /**
-   * A list of [ImportDirective]s that the current library imports, as identifiers are visited
-   * by this visitor and an import has been identified as being used by the library, the
-   * [ImportDirective] is removed from this list. After all the sources in the library have
-   * been evaluated, this list represents the set of unused imports.
+   * A list of [ImportDirective]s that the current library imports, but does not use.
+   *
+   * As identifiers are visited by this visitor and an import has been identified as being used
+   * by the library, the [ImportDirective] is removed from this list. After all the sources in the
+   * library have been evaluated, this list represents the set of unused imports.
    *
    * See [ImportsVerifier.generateUnusedImportErrors].
    */
@@ -4483,15 +4502,14 @@
   final List<ImportDirective> _duplicateImports = <ImportDirective>[];
 
   /**
-   * This is a map between the set of [LibraryElement]s that the current library imports, and
-   * a list of [ImportDirective]s that imports the library. In cases where the current library
-   * imports a library with a single directive (such as `import lib1.dart;`), the library
+   * This is a map between the set of [LibraryElement]s that the current library imports, and the
+   * list of [ImportDirective]s that import each [LibraryElement]. In cases where the current
+   * library imports a library with a single directive (such as `import lib1.dart;`), the library
    * element will map to a list of one [ImportDirective], which will then be removed from the
    * [unusedImports] list. In cases where the current library imports a library with multiple
-   * directives (such as `import lib1.dart; import lib1.dart show C;`), the
-   * [LibraryElement] will be mapped to a list of the import directives, and the namespace
-   * will need to be used to compute the correct [ImportDirective] being used, see
-   * [namespaceMap].
+   * directives (such as `import lib1.dart; import lib1.dart show C;`), the [LibraryElement] will
+   * be mapped to a list of the import directives, and the namespace will need to be used to
+   * compute the correct [ImportDirective] being used; see [_namespaceMap].
    */
   final HashMap<LibraryElement, List<ImportDirective>> _libraryMap =
       new HashMap<LibraryElement, List<ImportDirective>>();
@@ -4518,44 +4536,62 @@
   final HashMap<PrefixElement, List<ImportDirective>> _prefixElementMap =
       new HashMap<PrefixElement, List<ImportDirective>>();
 
+  /**
+   * A map of identifiers that the current library's imports show, but that the library does not
+   * use.
+   *
+   * Each import directive maps to a list of the identifiers that are imported via the "show"
+   * keyword.
+   *
+   * As each identifier is visited by this visitor, it is identified as being used by the library,
+   * and the identifier is removed from this map (under the import that imported it). After all the
+   * sources in the library have been evaluated, each list in this map's values present the set of
+   * unused shown elements.
+   *
+   * See [ImportsVerifier.generateUnusedShownNameHints].
+   */
+  final HashMap<ImportDirective, List<SimpleIdentifier>> _unusedShownNamesMap =
+      new HashMap<ImportDirective, List<SimpleIdentifier>>();
+
   void addImports(CompilationUnit node) {
     for (Directive directive in node.directives) {
       if (directive is ImportDirective) {
         ImportDirective importDirective = directive;
         LibraryElement libraryElement = importDirective.uriElement;
-        if (libraryElement != null) {
-          _unusedImports.add(importDirective);
-          //
-          // Initialize prefixElementMap
-          //
-          if (importDirective.asKeyword != null) {
-            SimpleIdentifier prefixIdentifier = importDirective.prefix;
-            if (prefixIdentifier != null) {
-              Element element = prefixIdentifier.staticElement;
-              if (element is PrefixElement) {
-                PrefixElement prefixElementKey = element;
-                List<ImportDirective> list =
-                    _prefixElementMap[prefixElementKey];
-                if (list == null) {
-                  list = new List<ImportDirective>();
-                  _prefixElementMap[prefixElementKey] = list;
-                }
-                list.add(importDirective);
-              }
-              // TODO (jwren) Can the element ever not be a PrefixElement?
-            }
-          }
-          //
-          // Initialize libraryMap: libraryElement -> importDirective
-          //
-          _putIntoLibraryMap(libraryElement, importDirective);
-          //
-          // For this new addition to the libraryMap, also recursively add any
-          // exports from the libraryElement.
-          //
-          _addAdditionalLibrariesForExports(
-              libraryElement, importDirective, new List<LibraryElement>());
+        if (libraryElement == null) {
+          continue;
         }
+        _unusedImports.add(importDirective);
+        //
+        // Initialize prefixElementMap
+        //
+        if (importDirective.asKeyword != null) {
+          SimpleIdentifier prefixIdentifier = importDirective.prefix;
+          if (prefixIdentifier != null) {
+            Element element = prefixIdentifier.staticElement;
+            if (element is PrefixElement) {
+              PrefixElement prefixElementKey = element;
+              List<ImportDirective> list = _prefixElementMap[prefixElementKey];
+              if (list == null) {
+                list = new List<ImportDirective>();
+                _prefixElementMap[prefixElementKey] = list;
+              }
+              list.add(importDirective);
+            }
+            // TODO (jwren) Can the element ever not be a PrefixElement?
+          }
+        }
+        //
+        // Initialize libraryMap: libraryElement -> importDirective
+        //
+        _putIntoLibraryMap(libraryElement, importDirective);
+        //
+        // For this new addition to the libraryMap, also recursively add any
+        // exports from the libraryElement.
+        //
+        _addAdditionalLibrariesForExports(
+            libraryElement, importDirective, new List<LibraryElement>());
+        _addShownNames(importDirective);
       }
     }
     if (_unusedImports.length > 1) {
@@ -4598,12 +4634,12 @@
   }
 
   /**
-   * After all of the compilation units have been visited by this visitor, this method can be called
-   * to report an [HintCode.UNUSED_IMPORT] hint for each of the import directives in the
-   * [unusedImports] list.
+   * Report an [HintCode.UNUSED_IMPORT] hint for each unused import.
    *
-   * @param errorReporter the error reporter to report the set of [HintCode.UNUSED_IMPORT]
-   *          hints to
+   * Only call this method after all of the compilation units have been visited by this visitor.
+   *
+   * @param errorReporter the error reporter used to report the set of [HintCode.UNUSED_IMPORT]
+   *          hints
    */
   void generateUnusedImportHints(ErrorReporter errorReporter) {
     for (ImportDirective unusedImport in _unusedImports) {
@@ -4621,32 +4657,60 @@
   }
 
   /**
+   * Report an [HintCode.UNUSED_SHOWN_NAME] hint for each unused shown name.
+   *
+   * Only call this method after all of the compilation units have been visited by this visitor.
+   *
+   * @param errorReporter the error reporter used to report the set of [HintCode.UNUSED_SHOWN_NAME]
+   *          hints
+   */
+  void generateUnusedShownNameHints(ErrorReporter reporter) {
+    _unusedShownNamesMap.forEach(
+        (ImportDirective importDirective, List<SimpleIdentifier> identifiers) {
+      if (_unusedImports.contains(importDirective)) {
+        // This import is actually wholly unused, not just one or more shown names from it.
+        // This is then an "unused import", rather than unused shown names.
+        return;
+      }
+      for (Identifier identifier in identifiers) {
+        reporter.reportErrorForNode(
+            HintCode.UNUSED_SHOWN_NAME, identifier, [identifier.name]);
+      }
+    });
+  }
+
+  /**
    * Remove elements from [_unusedImports] using the given [usedElements].
    */
   void removeUsedElements(UsedImportedElements usedElements) {
-    // Stop if all the imports are known to be used.
-    if (_unusedImports.isEmpty) {
+    // Stop if all the imports and shown names are known to be used.
+    if (_unusedImports.isEmpty && _unusedShownNamesMap.isEmpty) {
       return;
     }
     // Process import prefixes.
-    for (PrefixElement prefix in usedElements.prefixes) {
+    usedElements.prefixMap
+        .forEach((PrefixElement prefix, List<Element> elements) {
       List<ImportDirective> importDirectives = _prefixElementMap[prefix];
       if (importDirectives != null) {
         for (ImportDirective importDirective in importDirectives) {
           _unusedImports.remove(importDirective);
+          for (Element element in elements) {
+            _removeFromUnusedShownNamesMap(element, importDirective);
+          }
         }
       }
-    }
+    });
     // Process top-level elements.
     for (Element element in usedElements.elements) {
-      // Stop if all the imports are known to be used.
-      if (_unusedImports.isEmpty) {
+      // Stop if all the imports and shown names are known to be used.
+      if (_unusedImports.isEmpty && _unusedShownNamesMap.isEmpty) {
         return;
       }
-      // Prepare import directives for this library.
+      // Prepare import directives for this element's library.
       LibraryElement library = element.library;
       List<ImportDirective> importsLibrary = _libraryMap[library];
       if (importsLibrary == null) {
+        // element's library is not imported. Must be the current library.
         continue;
       }
       // If there is only one import directive for this library, then it must be
@@ -4655,6 +4719,7 @@
       if (importsLibrary.length == 1) {
         ImportDirective usedImportDirective = importsLibrary[0];
         _unusedImports.remove(usedImportDirective);
+        _removeFromUnusedShownNamesMap(element, usedImportDirective);
         continue;
       }
       // Otherwise, find import directives using namespaces.
@@ -4663,6 +4728,7 @@
         Namespace namespace = _computeNamespace(importDirective);
         if (namespace != null && namespace.get(name) != null) {
           _unusedImports.remove(importDirective);
+          _removeFromUnusedShownNamesMap(element, importDirective);
         }
       }
     }
@@ -4685,9 +4751,28 @@
   }
 
   /**
-   * Lookup and return the [Namespace] from the [namespaceMap], if the map does not
-   * have the computed namespace, compute it and cache it in the map. If the import directive is not
-   * resolved or is not resolvable, `null` is returned.
+   * Add every shown name from [importDirective] into [_unusedShownNamesMap].
+   */
+  void _addShownNames(ImportDirective importDirective) {
+    if (importDirective.combinators == null) {
+      return;
+    }
+    List<SimpleIdentifier> identifiers = new List<SimpleIdentifier>();
+    _unusedShownNamesMap[importDirective] = identifiers;
+    for (Combinator combinator in importDirective.combinators) {
+      if (combinator is ShowCombinator) {
+        for (SimpleIdentifier name in combinator.shownNames) {
+          identifiers.add(name);
+        }
+      }
+    }
+  }
+
+  /**
+   * Lookup and return the [Namespace] from the [_namespaceMap].
+   *
+   * If the map does not have the computed namespace, compute it and cache it in the map. If
+   * [importDirective] is not resolved or is not resolvable, `null` is returned.
    *
    * @param importDirective the import directive used to compute the returned namespace
    * @return the computed or looked up [Namespace]
@@ -4722,6 +4807,35 @@
     }
     importList.add(importDirective);
   }
+
+  /**
+   * Remove [element] from the list of names shown by [importDirective].
+   */
+  void _removeFromUnusedShownNamesMap(
+      Element element, ImportDirective importDirective) {
+    List<SimpleIdentifier> identifiers = _unusedShownNamesMap[importDirective];
+    if (identifiers == null) {
+      return;
+    }
+    for (Identifier identifier in identifiers) {
+      if (element is PropertyAccessorElement) {
+        // If the getter or setter of a variable is used, then the variable (the
+        // shown name) is used.
+        if (identifier.staticElement == element.variable) {
+          identifiers.remove(identifier);
+          break;
+        }
+      } else {
+        if (identifier.staticElement == element) {
+          identifiers.remove(identifier);
+          break;
+        }
+      }
+    }
+    if (identifiers.isEmpty) {
+      _unusedShownNamesMap.remove(importDirective);
+    }
+  }
 }
 
 /**
@@ -12566,9 +12680,10 @@
  */
 class UsedImportedElements {
   /**
-   * The set of referenced [PrefixElement]s.
+   * The map of referenced [PrefixElement]s and the [Element]s that they prefix.
    */
-  final Set<PrefixElement> prefixes = new HashSet<PrefixElement>();
+  final Map<PrefixElement, List<Element>> prefixMap =
+      new HashMap<PrefixElement, List<Element>>();
 
   /**
    * The set of referenced top-level [Element]s.
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 12c9aac..f76cf73 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -257,6 +257,8 @@
     } else {
       ExecutableElement staticMethodElement = node.staticElement;
       DartType staticType = _computeStaticReturnType(staticMethodElement);
+      staticType =
+          _refineAssignmentExpressionType(node, staticType, _getStaticType);
       _recordStaticType(node, staticType);
       MethodElement propagatedMethodElement = node.propagatedElement;
       if (!identical(propagatedMethodElement, staticMethodElement)) {
@@ -2095,6 +2097,44 @@
   }
 
   /**
+   * Attempts to make a better guess for the type of the given assignment
+   * [expression], given that resolution has so far produced the [currentType].
+   * The [typeAccessor] is used to access the corresponding type of the left
+   * and right operands.
+   */
+  DartType _refineAssignmentExpressionType(AssignmentExpression expression,
+      DartType currentType, DartType typeAccessor(Expression node)) {
+    Expression leftHandSize = expression.leftHandSide;
+    Expression rightHandSide = expression.rightHandSide;
+    TokenType operator = expression.operator.type;
+    DartType intType = _typeProvider.intType;
+    if (typeAccessor(leftHandSize) == intType) {
+      // int op= double
+      if (operator == TokenType.MINUS_EQ ||
+          operator == TokenType.PERCENT_EQ ||
+          operator == TokenType.PLUS_EQ ||
+          operator == TokenType.STAR_EQ) {
+        DartType doubleType = _typeProvider.doubleType;
+        if (typeAccessor(rightHandSide) == doubleType) {
+          return doubleType;
+        }
+      }
+      // int op= int
+      if (operator == TokenType.MINUS_EQ ||
+          operator == TokenType.PERCENT_EQ ||
+          operator == TokenType.PLUS_EQ ||
+          operator == TokenType.STAR_EQ ||
+          operator == TokenType.TILDE_SLASH_EQ) {
+        if (typeAccessor(rightHandSide) == intType) {
+          return intType;
+        }
+      }
+    }
+    // default
+    return currentType;
+  }
+
+  /**
    * Attempts to make a better guess for the type of the given binary
    * [expression], given that resolution has so far produced the [currentType].
    * The [typeAccessor] is used to access the corresponding type of the left
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 5cb69d9..bd866c7 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -987,6 +987,7 @@
   bool _finished = false;
 
   List<LinkedDependencyBuilder> _dependencies;
+  List<int> _exportDependencies;
   List<LinkedExportNameBuilder> _exportNames;
   bool _fallbackMode;
   List<int> _importDependencies;
@@ -1018,6 +1019,19 @@
   }
 
   @override
+  List<int> get exportDependencies => _exportDependencies ??= <int>[];
+
+  /**
+   * For each export in [UnlinkedUnit.exports], an index into [dependencies]
+   * of the library being exported.
+   */
+  void set exportDependencies(List<int> _value) {
+    assert(!_finished);
+    assert(_value == null || _value.every((e) => e >= 0));
+    _exportDependencies = _value;
+  }
+
+  @override
   List<LinkedExportNameBuilder> get exportNames => _exportNames ??= <LinkedExportNameBuilder>[];
 
   /**
@@ -1085,8 +1099,9 @@
     _units = _value;
   }
 
-  LinkedLibraryBuilder({List<LinkedDependencyBuilder> dependencies, List<LinkedExportNameBuilder> exportNames, bool fallbackMode, List<int> importDependencies, int numPrelinkedDependencies, List<LinkedUnitBuilder> units})
+  LinkedLibraryBuilder({List<LinkedDependencyBuilder> dependencies, List<int> exportDependencies, List<LinkedExportNameBuilder> exportNames, bool fallbackMode, List<int> importDependencies, int numPrelinkedDependencies, List<LinkedUnitBuilder> units})
     : _dependencies = dependencies,
+      _exportDependencies = exportDependencies,
       _exportNames = exportNames,
       _fallbackMode = fallbackMode,
       _importDependencies = importDependencies,
@@ -1111,12 +1126,16 @@
     assert(!_finished);
     _finished = true;
     fb.Offset offset_dependencies;
+    fb.Offset offset_exportDependencies;
     fb.Offset offset_exportNames;
     fb.Offset offset_importDependencies;
     fb.Offset offset_units;
     if (!(_dependencies == null || _dependencies.isEmpty)) {
       offset_dependencies = fbBuilder.writeList(_dependencies.map((b) => b.finish(fbBuilder)).toList());
     }
+    if (!(_exportDependencies == null || _exportDependencies.isEmpty)) {
+      offset_exportDependencies = fbBuilder.writeListUint32(_exportDependencies);
+    }
     if (!(_exportNames == null || _exportNames.isEmpty)) {
       offset_exportNames = fbBuilder.writeList(_exportNames.map((b) => b.finish(fbBuilder)).toList());
     }
@@ -1130,6 +1149,9 @@
     if (offset_dependencies != null) {
       fbBuilder.addOffset(0, offset_dependencies);
     }
+    if (offset_exportDependencies != null) {
+      fbBuilder.addOffset(6, offset_exportDependencies);
+    }
     if (offset_exportNames != null) {
       fbBuilder.addOffset(4, offset_exportNames);
     }
@@ -1167,6 +1189,7 @@
   _LinkedLibraryImpl(this._bp);
 
   List<idl.LinkedDependency> _dependencies;
+  List<int> _exportDependencies;
   List<idl.LinkedExportName> _exportNames;
   bool _fallbackMode;
   List<int> _importDependencies;
@@ -1180,6 +1203,12 @@
   }
 
   @override
+  List<int> get exportDependencies {
+    _exportDependencies ??= const fb.Uint32ListReader().vTableGet(_bp, 6, const <int>[]);
+    return _exportDependencies;
+  }
+
+  @override
   List<idl.LinkedExportName> get exportNames {
     _exportNames ??= const fb.ListReader<idl.LinkedExportName>(const _LinkedExportNameReader()).vTableGet(_bp, 4, const <idl.LinkedExportName>[]);
     return _exportNames;
@@ -1215,6 +1244,7 @@
   Map<String, Object> toJson() {
     Map<String, Object> _result = <String, Object>{};
     if (dependencies.isNotEmpty) _result["dependencies"] = dependencies.map((_value) => _value.toJson()).toList();
+    if (exportDependencies.isNotEmpty) _result["exportDependencies"] = exportDependencies;
     if (exportNames.isNotEmpty) _result["exportNames"] = exportNames.map((_value) => _value.toJson()).toList();
     if (fallbackMode != false) _result["fallbackMode"] = fallbackMode;
     if (importDependencies.isNotEmpty) _result["importDependencies"] = importDependencies;
@@ -1226,6 +1256,7 @@
   @override
   Map<String, Object> toMap() => {
     "dependencies": dependencies,
+    "exportDependencies": exportDependencies,
     "exportNames": exportNames,
     "fallbackMode": fallbackMode,
     "importDependencies": importDependencies,
@@ -4571,9 +4602,9 @@
     _codeRange = null;
     _constantInitializers?.forEach((b) => b.flushInformative());
     _documentationComment = null;
-    _localFunctions?.forEach((b) => b.flushInformative());
-    _localLabels?.forEach((b) => b.flushInformative());
-    _localVariables?.forEach((b) => b.flushInformative());
+    _localFunctions = null;
+    _localLabels = null;
+    _localVariables = null;
     _nameEnd = null;
     _nameOffset = null;
     _parameters?.forEach((b) => b.flushInformative());
@@ -8082,7 +8113,7 @@
     _codeRange = null;
     _constExpr?.flushInformative();
     _documentationComment = null;
-    _initializer?.flushInformative();
+    _initializer = null;
     _nameOffset = null;
     _type?.flushInformative();
   }
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 2a41e6c..e7e548c 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -600,7 +600,7 @@
   typeCast,
 
   /**
-   * Pop the top value from the stack and check whether is is a subclass of the
+   * Pop the top value from the stack and check whether it is a subclass of the
    * type with reference from [UnlinkedConst.references], push the result into
    * the stack.
    */
@@ -978,6 +978,12 @@
   dependencies:[LinkedDependency] (id: 0);
 
   /**
+   * For each export in [UnlinkedUnit.exports], an index into [dependencies]
+   * of the library being exported.
+   */
+  exportDependencies:[uint] (id: 6);
+
+  /**
    * Information about entities in the export namespace of the library that are
    * not in the public namespace of the library (that is, entities that are
    * brought into the namespace via `export` directives).
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index 8f86380..ebbe533 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -49,6 +49,9 @@
  * Annotation describing information which is not part of Dart semantics; in
  * other words, if this information (or any information it refers to) changes,
  * static analysis and runtime behavior of the library are unaffected.
+ *
+ * Information that has purely local effect (in other words, it does not affect
+ * the API of the code being analyzed) is also marked as `informative`.
  */
 const informative = null;
 
@@ -427,6 +430,13 @@
   List<LinkedDependency> get dependencies;
 
   /**
+   * For each export in [UnlinkedUnit.exports], an index into [dependencies]
+   * of the library being exported.
+   */
+  @Id(6)
+  List<int> get exportDependencies;
+
+  /**
    * Information about entities in the export namespace of the library that are
    * not in the public namespace of the library (that is, entities that are
    * brought into the namespace via `export` directives).
@@ -1428,7 +1438,7 @@
   typeCast,
 
   /**
-   * Pop the top value from the stack and check whether is is a subclass of the
+   * Pop the top value from the stack and check whether it is a subclass of the
    * type with reference from [UnlinkedConst.references], push the result into
    * the stack.
    */
@@ -1697,18 +1707,21 @@
   /**
    * The list of local functions.
    */
+  @informative
   @Id(18)
   List<UnlinkedExecutable> get localFunctions;
 
   /**
    * The list of local labels.
    */
+  @informative
   @Id(22)
   List<UnlinkedLabel> get localLabels;
 
   /**
    * The list of local variables.
    */
+  @informative
   @Id(19)
   List<UnlinkedVariable> get localVariables;
 
@@ -2605,6 +2618,7 @@
    * The synthetic initializer function of the variable.  Absent if the variable
    * does not have an initializer.
    */
+  @informative
   @Id(13)
   UnlinkedExecutable get initializer;
 
diff --git a/pkg/analyzer/lib/src/summary/link.dart b/pkg/analyzer/lib/src/summary/link.dart
index 0f642ef..8d7d33e 100644
--- a/pkg/analyzer/lib/src/summary/link.dart
+++ b/pkg/analyzer/lib/src/summary/link.dart
@@ -57,8 +57,8 @@
  * - Where possible, we favor method dispatch instead of "is" and "as"
  *   checks.  E.g. see [ReferenceableElementForLink.asConstructor].
  */
-
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart' show TokenType;
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/constant/value.dart';
@@ -71,6 +71,18 @@
 import 'package:analyzer/src/summary/prelink.dart';
 import 'package:analyzer/src/task/strong_mode.dart';
 
+bool isIncrementOrDecrement(UnlinkedExprAssignOperator operator) {
+  switch (operator) {
+    case UnlinkedExprAssignOperator.prefixDecrement:
+    case UnlinkedExprAssignOperator.prefixIncrement:
+    case UnlinkedExprAssignOperator.postfixDecrement:
+    case UnlinkedExprAssignOperator.postfixIncrement:
+      return true;
+    default:
+      return false;
+  }
+}
+
 /**
  * Link together the build unit consisting of [libraryUris], using
  * [getDependency] to fetch the [LinkedLibrary] objects from other
@@ -89,16 +101,7 @@
 Map<String, LinkedLibraryBuilder> link(Set<String> libraryUris,
     GetDependencyCallback getDependency, GetUnitCallback getUnit, bool strong) {
   Map<String, LinkedLibraryBuilder> linkedLibraries =
-      <String, LinkedLibraryBuilder>{};
-  for (String absoluteUri in libraryUris) {
-    Uri uri = Uri.parse(absoluteUri);
-    UnlinkedUnit getRelativeUnit(String relativeUri) =>
-        getUnit(resolveRelativeUri(uri, Uri.parse(relativeUri)).toString());
-    linkedLibraries[absoluteUri] = prelink(
-        getUnit(absoluteUri),
-        getRelativeUnit,
-        (String relativeUri) => getRelativeUnit(relativeUri)?.publicNamespace);
-  }
+      setupForLink(libraryUris, getUnit);
   relink(linkedLibraries, getDependency, getUnit, strong);
   return linkedLibraries;
 }
@@ -118,7 +121,32 @@
  */
 void relink(Map<String, LinkedLibraryBuilder> libraries,
     GetDependencyCallback getDependency, GetUnitCallback getUnit, bool strong) {
-  new _Linker(libraries, getDependency, getUnit, strong).link();
+  new Linker(libraries, getDependency, getUnit, strong).link();
+}
+
+/**
+ * Prepare to link together the build unit consisting of [libraryUris], using
+ * [getUnit] to fetch the [UnlinkedUnit] objects from both this build unit and
+ * other build units.
+ *
+ * The libraries are prelinked, and a map is returned whose keys are the URIs of
+ * the libraries in this build unit, and whose values are the corresponding
+ * [LinkedLibraryBuilder]s.
+ */
+Map<String, LinkedLibraryBuilder> setupForLink(
+    Set<String> libraryUris, GetUnitCallback getUnit) {
+  Map<String, LinkedLibraryBuilder> linkedLibraries =
+      <String, LinkedLibraryBuilder>{};
+  for (String absoluteUri in libraryUris) {
+    Uri uri = Uri.parse(absoluteUri);
+    UnlinkedUnit getRelativeUnit(String relativeUri) =>
+        getUnit(resolveRelativeUri(uri, Uri.parse(relativeUri)).toString());
+    linkedLibraries[absoluteUri] = prelink(
+        getUnit(absoluteUri),
+        getRelativeUnit,
+        (String relativeUri) => getRelativeUnit(relativeUri)?.publicNamespace);
+  }
+  return linkedLibraries;
 }
 
 /**
@@ -143,6 +171,9 @@
           .toList();
     }
     return result;
+  } else if (type is DynamicTypeImpl) {
+    result.reference = compilationUnit.addRawReference('dynamic');
+    return result;
   } else if (type is VoidTypeImpl) {
     result.reference = compilationUnit.addRawReference('void');
     return result;
@@ -168,6 +199,16 @@
       }
       return result;
     }
+    if (element is MethodElementForLink) {
+      result.reference = compilationUnit.addReference(element);
+      if (type.typeArguments.isNotEmpty) {
+        result.typeArguments = type.typeArguments
+            .map((DartType t) =>
+                _createLinkedType(t, compilationUnit, typeParameterContext))
+            .toList();
+      }
+      return result;
+    }
     // TODO(paulberry): implement other cases.
     throw new UnimplementedError('${element.runtimeType}');
   }
@@ -294,16 +335,16 @@
   List<MethodElementForLink> _methods;
   List<InterfaceType> _mixins;
   List<InterfaceType> _interfaces;
-  List<PropertyAccessorElementForLink> _accessors;
+  List<PropertyAccessorElement> _accessors;
 
   ClassElementForLink_Class(
       CompilationUnitElementForLink enclosingElement, this._unlinkedClass)
       : super(enclosingElement);
 
   @override
-  List<PropertyAccessorElementForLink> get accessors {
+  List<PropertyAccessorElement> get accessors {
     if (_accessors == null) {
-      _accessors = <PropertyAccessorElementForLink>[];
+      _accessors = <PropertyAccessorElement>[];
       Map<String, SyntheticVariableElementForLink> syntheticVariables =
           <String, SyntheticVariableElementForLink>{};
       for (UnlinkedExecutable unlinkedExecutable
@@ -317,8 +358,8 @@
           }
           SyntheticVariableElementForLink syntheticVariable = syntheticVariables
               .putIfAbsent(name, () => new SyntheticVariableElementForLink());
-          PropertyAccessorElementForLink accessor =
-              new PropertyAccessorElementForLink(
+          PropertyAccessorElementForLink_Executable accessor =
+              new PropertyAccessorElementForLink_Executable(
                   this, unlinkedExecutable, syntheticVariable);
           _accessors.add(accessor);
           if (unlinkedExecutable.kind == UnlinkedExecutableKind.getter) {
@@ -328,6 +369,14 @@
           }
         }
       }
+      for (FieldElementForLink_ClassField field in fields) {
+        _accessors
+            .add(new PropertyAccessorElementForLink_Variable(field, false));
+        if (!field.isConst && !field.isFinal) {
+          _accessors
+              .add(new PropertyAccessorElementForLink_Variable(field, true));
+        }
+      }
     }
     return _accessors;
   }
@@ -343,6 +392,11 @@
               .add(new ConstructorElementForLink(this, unlinkedExecutable));
         }
       }
+      if (_constructors.isEmpty) {
+        _unnamedConstructorComputed = true;
+        _unnamedConstructor = new ConstructorElementForLink_Synthetic(this);
+        _constructors.add(_unnamedConstructor);
+      }
     }
     return _constructors;
   }
@@ -443,11 +497,31 @@
   }
 
   @override
+  PropertyAccessorElement getGetter(String getterName) {
+    for (PropertyAccessorElement accessor in accessors) {
+      if (accessor.isGetter && accessor.name == getterName) {
+        return accessor;
+      }
+    }
+    return null;
+  }
+
+  @override
+  MethodElement getMethod(String methodName) {
+    for (MethodElement method in methods) {
+      if (method.name == methodName) {
+        return method;
+      }
+    }
+    return null;
+  }
+
+  @override
   void link(CompilationUnitElementInBuildUnit compilationUnit) {
     for (ConstructorElementForLink constructorElement in constructors) {
       constructorElement.link(compilationUnit);
     }
-    if (compilationUnit.library._linker.strongMode) {
+    if (library._linker.strongMode) {
       for (MethodElementForLink methodElement in methods) {
         methodElement.link(compilationUnit);
       }
@@ -465,12 +539,12 @@
    * Convert [typeRef] into an [InterfaceType].
    */
   InterfaceType _computeInterfaceType(EntityRef typeRef) {
-    if (_unlinkedClass.supertype != null) {
-      DartType supertype = enclosingElement._resolveTypeRef(typeRef, this);
-      if (supertype is InterfaceType) {
-        return supertype;
+    if (typeRef != null) {
+      DartType type = enclosingElement._resolveTypeRef(typeRef, this);
+      if (type is InterfaceType) {
+        return type;
       }
-      // In the event that the supertype isn't an interface type (which may
+      // In the event that the `typeRef` isn't an interface type (which may
       // happen in the event of erroneous code) just fall through and pretend
       // the supertype is `Object`.
     }
@@ -511,9 +585,9 @@
   List<FieldElementForLink_EnumField> get fields {
     if (_fields == null) {
       _fields = <FieldElementForLink_EnumField>[];
-      _fields.add(new FieldElementForLink_EnumField(null));
+      _fields.add(new FieldElementForLink_EnumField(null, this));
       for (UnlinkedEnumValue value in _unlinkedEnum.values) {
-        _fields.add(new FieldElementForLink_EnumField(value));
+        _fields.add(new FieldElementForLink_EnumField(value, this));
       }
     }
     return _fields;
@@ -538,12 +612,18 @@
   InterfaceType get supertype => library._linker.typeProvider.objectType;
 
   @override
+  DartType get type => _type ??= new InterfaceTypeImpl(this);
+
+  @override
+  List<TypeParameterElement> get typeParameters => const [];
+
+  @override
   ConstructorElementForLink get unnamedConstructor => null;
 
   @override
   DartType buildType(DartType getTypeArgument(int i),
           List<int> implicitFunctionTypeIndices) =>
-      _type ??= new InterfaceTypeImpl(this);
+      type;
 
   @override
   void link(CompilationUnitElementInBuildUnit compilationUnit) {}
@@ -577,9 +657,9 @@
    */
   final int unitNum;
 
-  CompilationUnitElementForLink(UnlinkedUnit unlinkedUnit, this.unitNum)
-      : _references = new List<ReferenceableElementForLink>(
-            unlinkedUnit.references.length),
+  CompilationUnitElementForLink(
+      UnlinkedUnit unlinkedUnit, this.unitNum, int numReferences)
+      : _references = new List<ReferenceableElementForLink>(numReferences),
         _unlinkedUnit = unlinkedUnit;
 
   @override
@@ -602,6 +682,18 @@
    */
   bool get isInBuildUnit;
 
+  /**
+   * Determine whether type inference is complete in this compilation unit.
+   */
+  bool get isTypeInferenceComplete {
+    LibraryCycleForLink libraryCycleForLink = library.libraryCycleForLink;
+    if (libraryCycleForLink == null) {
+      return true;
+    } else {
+      return libraryCycleForLink._node.isEvaluated;
+    }
+  }
+
   @override
   LibraryElementForLink get library => enclosingElement;
 
@@ -658,6 +750,14 @@
         name, () => UndefinedElementForLink.instance);
   }
 
+  /**
+   * Compute the type referred to by the given linked type [slot] (interpreted
+   * relative to [typeParameterContext]).  If there is no inferred type in the
+   * given slot, `dynamic` is returned.
+   */
+  DartType getLinkedType(
+      int slot, TypeParameterizedElementForLink typeParameterContext);
+
   @override
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 
@@ -668,17 +768,32 @@
    */
   ReferenceableElementForLink _resolveRef(int index) {
     if (_references[index] == null) {
-      UnlinkedReference unlinkedReference = _unlinkedUnit.references[index];
+      UnlinkedReference unlinkedReference =
+          index < _unlinkedUnit.references.length
+              ? _unlinkedUnit.references[index]
+              : null;
       LinkedReference linkedReference = _linkedUnit.references[index];
-      String name = unlinkedReference.name;
-      int containingReference = unlinkedReference.prefixReference;
+      String name = unlinkedReference == null
+          ? linkedReference.name
+          : unlinkedReference.name;
+      int containingReference = unlinkedReference == null
+          ? linkedReference.containingReference
+          : unlinkedReference.prefixReference;
       if (containingReference != 0 &&
           _linkedUnit.references[containingReference].kind !=
               ReferenceKind.prefix) {
         _references[index] =
             _resolveRef(containingReference).getContainedName(name);
       } else if (linkedReference.dependency == 0) {
-        _references[index] = enclosingElement.getContainedName(name);
+        if (name == 'void') {
+          _references[index] = enclosingElement._linker.voidElement;
+        } else if (name == '*bottom*') {
+          _references[index] = enclosingElement._linker.bottomElement;
+        } else if (name == 'dynamic') {
+          _references[index] = enclosingElement._linker.dynamicElement;
+        } else {
+          _references[index] = enclosingElement.getContainedName(name);
+        }
       } else {
         LibraryElementForLink dependency =
             enclosingElement._getDependency(linkedReference.dependency);
@@ -741,7 +856,7 @@
 
   CompilationUnitElementInBuildUnit(this.enclosingElement,
       UnlinkedUnit unlinkedUnit, this._linkedUnit, int unitNum)
-      : super(unlinkedUnit, unitNum);
+      : super(unlinkedUnit, unitNum, unlinkedUnit.references.length);
 
   @override
   bool get isInBuildUnit => true;
@@ -827,6 +942,16 @@
     throw new UnimplementedError('${element.runtimeType}');
   }
 
+  @override
+  DartType getLinkedType(
+      int slot, TypeParameterizedElementForLink typeParameterContext) {
+    // This method should only be called on compilation units that come from
+    // dependencies, never on compilation units that are part of the current
+    // build unit.
+    throw new StateError(
+        'Linker tried to access linked type from current build unit');
+  }
+
   /**
    * Perform type inference and const cycle detection on this
    * compilation unit.
@@ -836,6 +961,9 @@
       new InstanceMemberInferrer(enclosingElement._linker.typeProvider,
               enclosingElement.inheritanceManager)
           .inferCompilationUnit(this);
+      for (TopLevelVariableElementForLink variable in topLevelVariables) {
+        variable.link(this);
+      }
     }
     for (ClassElementForLink classElement in types) {
       classElement.link(this);
@@ -887,15 +1015,43 @@
   @override
   final LinkedUnit _linkedUnit;
 
+  List<EntityRef> _linkedTypeRefs;
+
   @override
   final LibraryElementInDependency enclosingElement;
 
   CompilationUnitElementInDependency(this.enclosingElement,
-      UnlinkedUnit unlinkedUnit, this._linkedUnit, int unitNum)
-      : super(unlinkedUnit, unitNum);
+      UnlinkedUnit unlinkedUnit, LinkedUnit linkedUnit, int unitNum)
+      : _linkedUnit = linkedUnit,
+        super(unlinkedUnit, unitNum, linkedUnit.references.length) {
+    // Make one pass through the linked types to determine the lengths for
+    // _linkedTypeRefs and _linkedTypes.  TODO(paulberry): add an int to the
+    // summary to make this unnecessary.
+    int maxLinkedTypeSlot = 0;
+    for (EntityRef ref in _linkedUnit.types) {
+      if (ref.slot > maxLinkedTypeSlot) {
+        maxLinkedTypeSlot = ref.slot;
+      }
+    }
+    // Initialize _linkedTypeRefs.
+    _linkedTypeRefs = new List<EntityRef>(maxLinkedTypeSlot + 1);
+    for (EntityRef ref in _linkedUnit.types) {
+      _linkedTypeRefs[ref.slot] = ref;
+    }
+  }
 
   @override
   bool get isInBuildUnit => false;
+
+  @override
+  DartType getLinkedType(
+      int slot, TypeParameterizedElementForLink typeParameterContext) {
+    if (slot < _linkedTypeRefs.length) {
+      return _resolveTypeRef(_linkedTypeRefs[slot], typeParameterContext);
+    } else {
+      return DynamicTypeImpl.instance;
+    }
+  }
 }
 
 /**
@@ -1131,6 +1287,7 @@
       UnlinkedExecutable unlinkedExecutable)
       : super(enclosingElement, unlinkedExecutable) {
     if (enclosingElement.enclosingElement.isInBuildUnit &&
+        _unlinkedExecutable != null &&
         _unlinkedExecutable.constCycleSlot != 0) {
       _constNode = new ConstConstructorNode(this);
     }
@@ -1184,6 +1341,21 @@
 }
 
 /**
+ * A synthetic constructor.
+ */
+class ConstructorElementForLink_Synthetic extends ConstructorElementForLink {
+  ConstructorElementForLink_Synthetic(
+      ClassElementForLink_Class enclosingElement)
+      : super(enclosingElement, null);
+
+  @override
+  String get name => '';
+
+  @override
+  List<ParameterElement> get parameters => const <ParameterElement>[];
+}
+
+/**
  * Instance of [ConstNode] representing a constant field or constant
  * top level variable.
  */
@@ -1349,6 +1521,7 @@
   DartType _inferredReturnType;
   FunctionTypeImpl _type;
   List<TypeParameterElementForLink> _typeParameters;
+  String _name;
   List<ParameterElementForLink> _parameters;
 
   /**
@@ -1359,6 +1532,12 @@
 
   ExecutableElementForLink(this.enclosingElement, this._unlinkedExecutable);
 
+  /**
+   * Return the compilation unit in which this executable appears.
+   */
+  CompilationUnitElementForLink get compilationUnit =>
+      enclosingElement.enclosingElement;
+
   @override
   TypeParameterizedElementForLink get enclosingTypeParameterContext =>
       enclosingElement;
@@ -1376,7 +1555,15 @@
   LibraryElementForLink get library => enclosingElement.library;
 
   @override
-  String get name => _unlinkedExecutable.name;
+  String get name {
+    if (_name == null) {
+      _name = _unlinkedExecutable.name;
+      if (_name == '-' && _unlinkedExecutable.parameters.isEmpty) {
+        _name = 'unary-';
+      }
+    }
+    return _name;
+  }
 
   @override
   List<ParameterElementForLink> get parameters {
@@ -1401,6 +1588,10 @@
         if (_unlinkedExecutable.kind == UnlinkedExecutableKind.constructor) {
           // TODO(paulberry): implement.
           throw new UnimplementedError();
+        } else if (!compilationUnit.isInBuildUnit) {
+          _inferredReturnType = compilationUnit.getLinkedType(
+              _unlinkedExecutable.inferredReturnTypeSlot, this);
+          return _inferredReturnType;
         } else if (_unlinkedExecutable.kind == UnlinkedExecutableKind.setter &&
             library._linker.strongMode) {
           // In strong mode, setters without an explicit return type are
@@ -1446,6 +1637,616 @@
   }
 }
 
+class ExprTypeComputer {
+  VariableElementForLink variable;
+  CompilationUnitElementForLink unit;
+  LibraryElementForLink library;
+  Linker linker;
+  TypeProvider typeProvider;
+  UnlinkedConst unlinkedConst;
+
+  final List<DartType> stack = <DartType>[];
+  int intPtr = 0;
+  int refPtr = 0;
+  int strPtr = 0;
+  int assignmentOperatorPtr = 0;
+
+  ExprTypeComputer(VariableElementForLink variableElement) {
+    this.variable = variableElement;
+    unit = variableElement.compilationUnit;
+    library = unit.enclosingElement;
+    linker = library._linker;
+    typeProvider = linker.typeProvider;
+    unlinkedConst = variableElement.unlinkedVariable.constExpr;
+  }
+
+  DartType compute() {
+    // Perform RPN evaluation of the constant, using a stack of inferred types.
+    for (UnlinkedConstOperation operation in unlinkedConst.operations) {
+      switch (operation) {
+        case UnlinkedConstOperation.pushInt:
+          intPtr++;
+          stack.add(typeProvider.intType);
+          break;
+        case UnlinkedConstOperation.pushLongInt:
+          int numInts = _getNextInt();
+          intPtr += numInts;
+          stack.add(typeProvider.intType);
+          break;
+        case UnlinkedConstOperation.pushDouble:
+          stack.add(typeProvider.doubleType);
+          break;
+        case UnlinkedConstOperation.pushTrue:
+        case UnlinkedConstOperation.pushFalse:
+          stack.add(typeProvider.boolType);
+          break;
+        case UnlinkedConstOperation.pushString:
+          strPtr++;
+          stack.add(typeProvider.stringType);
+          break;
+        case UnlinkedConstOperation.concatenate:
+          stack.length -= _getNextInt();
+          stack.add(typeProvider.stringType);
+          break;
+        case UnlinkedConstOperation.makeSymbol:
+          strPtr++;
+          stack.add(typeProvider.symbolType);
+          break;
+        case UnlinkedConstOperation.pushNull:
+          stack.add(BottomTypeImpl.instance);
+          break;
+        case UnlinkedConstOperation.pushReference:
+          _doPushReference();
+          break;
+        case UnlinkedConstOperation.extractProperty:
+          _doExtractProperty();
+          break;
+        case UnlinkedConstOperation.invokeConstructor:
+          _doInvokeConstructor();
+          break;
+        case UnlinkedConstOperation.makeUntypedList:
+          _doMakeUntypedList();
+          break;
+        case UnlinkedConstOperation.makeUntypedMap:
+          _doMakeUntypedMap();
+          break;
+        case UnlinkedConstOperation.makeTypedList:
+          _doMakeTypedList();
+          break;
+        case UnlinkedConstOperation.makeTypedMap:
+          _doMakeTypeMap();
+          break;
+        case UnlinkedConstOperation.not:
+          stack.length -= 1;
+          stack.add(typeProvider.boolType);
+          break;
+        case UnlinkedConstOperation.complement:
+          _computePrefixExpressionType('~');
+          break;
+        case UnlinkedConstOperation.negate:
+          _computePrefixExpressionType('unary-');
+          break;
+        case UnlinkedConstOperation.and:
+        case UnlinkedConstOperation.or:
+        case UnlinkedConstOperation.equal:
+        case UnlinkedConstOperation.notEqual:
+          stack.length -= 2;
+          stack.add(typeProvider.boolType);
+          break;
+        case UnlinkedConstOperation.bitXor:
+          _computeBinaryExpressionType(TokenType.CARET);
+          break;
+        case UnlinkedConstOperation.bitAnd:
+          _computeBinaryExpressionType(TokenType.AMPERSAND);
+          break;
+        case UnlinkedConstOperation.bitOr:
+          _computeBinaryExpressionType(TokenType.BAR);
+          break;
+        case UnlinkedConstOperation.bitShiftRight:
+          _computeBinaryExpressionType(TokenType.GT_GT);
+          break;
+        case UnlinkedConstOperation.bitShiftLeft:
+          _computeBinaryExpressionType(TokenType.LT_LT);
+          break;
+        case UnlinkedConstOperation.add:
+          _computeBinaryExpressionType(TokenType.PLUS);
+          break;
+        case UnlinkedConstOperation.subtract:
+          _computeBinaryExpressionType(TokenType.MINUS);
+          break;
+        case UnlinkedConstOperation.multiply:
+          _computeBinaryExpressionType(TokenType.STAR);
+          break;
+        case UnlinkedConstOperation.divide:
+          _computeBinaryExpressionType(TokenType.SLASH);
+          break;
+        case UnlinkedConstOperation.floorDivide:
+          _computeBinaryExpressionType(TokenType.TILDE_SLASH);
+          break;
+        case UnlinkedConstOperation.greater:
+          _computeBinaryExpressionType(TokenType.GT);
+          break;
+        case UnlinkedConstOperation.less:
+          _computeBinaryExpressionType(TokenType.LT);
+          break;
+        case UnlinkedConstOperation.greaterEqual:
+          _computeBinaryExpressionType(TokenType.GT_EQ);
+          break;
+        case UnlinkedConstOperation.lessEqual:
+          _computeBinaryExpressionType(TokenType.LT_EQ);
+          break;
+        case UnlinkedConstOperation.modulo:
+          _computeBinaryExpressionType(TokenType.PERCENT);
+          break;
+        case UnlinkedConstOperation.conditional:
+          _doConditional();
+          break;
+        case UnlinkedConstOperation.assignToRef:
+          _doAssignToRef();
+          break;
+        case UnlinkedConstOperation.assignToProperty:
+          _doAssignToProperty();
+          break;
+        case UnlinkedConstOperation.assignToIndex:
+          _doAssignToIndex();
+          break;
+        case UnlinkedConstOperation.extractIndex:
+          _doExtractIndex();
+          break;
+        case UnlinkedConstOperation.invokeMethodRef:
+          _doInvokeMethodRef();
+          break;
+        case UnlinkedConstOperation.invokeMethod:
+          _doInvokeMethod();
+          break;
+        case UnlinkedConstOperation.cascadeSectionBegin:
+          stack.add(stack.last);
+          break;
+        case UnlinkedConstOperation.cascadeSectionEnd:
+          stack.removeLast();
+          break;
+        case UnlinkedConstOperation.typeCast:
+          stack.removeLast();
+          DartType type = _getNextTypeRef();
+          stack.add(type);
+          break;
+        case UnlinkedConstOperation.typeCheck:
+          stack.removeLast();
+          refPtr++;
+          stack.add(typeProvider.boolType);
+          break;
+        case UnlinkedConstOperation.throwException:
+          stack.removeLast();
+          stack.add(BottomTypeImpl.instance);
+          break;
+        default:
+          // TODO(paulberry): implement.
+          throw new UnimplementedError('$operation');
+      }
+    }
+    assert(intPtr == unlinkedConst.ints.length);
+    assert(refPtr == unlinkedConst.references.length);
+    assert(strPtr == unlinkedConst.strings.length);
+    assert(assignmentOperatorPtr == unlinkedConst.assignmentOperators.length);
+    assert(stack.length == 1);
+    return _dynamicIfNull(stack[0]);
+  }
+
+  void _computeBinaryExpressionType(TokenType operator) {
+    DartType right = stack.removeLast();
+    DartType left = stack.removeLast();
+    _pushBinaryOperatorType(left, operator, right);
+  }
+
+  void _computePrefixExpressionType(String operatorName) {
+    DartType operand = stack.removeLast();
+    if (operand is InterfaceType) {
+      MethodElement method = operand.lookUpMethod(operatorName, library);
+      if (method != null) {
+        DartType type = method.returnType;
+        stack.add(type);
+        return;
+      }
+    }
+    stack.add(DynamicTypeImpl.instance);
+  }
+
+  void _doAssignToIndex() {
+    stack.removeLast();
+    stack.removeLast();
+    UnlinkedExprAssignOperator operator =
+        unlinkedConst.assignmentOperators[assignmentOperatorPtr++];
+    if (operator == UnlinkedExprAssignOperator.assign) {
+      // The type of the assignment is the type of the value,
+      // which is already in the stack.
+    } else if (isIncrementOrDecrement(operator)) {
+      // TODO(scheglov) implement
+      stack.add(DynamicTypeImpl.instance);
+    } else {
+      stack.removeLast();
+      // TODO(scheglov) implement
+      stack.add(DynamicTypeImpl.instance);
+    }
+  }
+
+  void _doAssignToProperty() {
+    DartType targetType = stack.removeLast();
+    String propertyName = _getNextString();
+    UnlinkedExprAssignOperator assignOperator =
+        unlinkedConst.assignmentOperators[assignmentOperatorPtr++];
+    if (assignOperator == UnlinkedExprAssignOperator.assign) {
+      // The type of the assignment is the type of the value,
+      // which is already in the stack.
+    } else if (assignOperator == UnlinkedExprAssignOperator.postfixDecrement ||
+        assignOperator == UnlinkedExprAssignOperator.postfixIncrement) {
+      DartType propertyType = _getPropertyType(targetType, propertyName);
+      stack.add(propertyType);
+    } else if (assignOperator == UnlinkedExprAssignOperator.prefixDecrement) {
+      _pushPropertyBinaryExpression(
+          targetType, propertyName, TokenType.MINUS, typeProvider.intType);
+    } else if (assignOperator == UnlinkedExprAssignOperator.prefixIncrement) {
+      _pushPropertyBinaryExpression(
+          targetType, propertyName, TokenType.PLUS, typeProvider.intType);
+    } else {
+      TokenType binaryOperator =
+          _convertAssignOperatorToTokenType(assignOperator);
+      DartType operandType = stack.removeLast();
+      _pushPropertyBinaryExpression(
+          targetType, propertyName, binaryOperator, operandType);
+    }
+  }
+
+  void _doAssignToRef() {
+    refPtr++;
+    UnlinkedExprAssignOperator operator =
+        unlinkedConst.assignmentOperators[assignmentOperatorPtr++];
+    if (operator == UnlinkedExprAssignOperator.assign) {
+      // The type of the assignment is the type of the value,
+      // which is already in the stack.
+    } else if (isIncrementOrDecrement(operator)) {
+      // TODO(scheglov) implement
+      stack.add(DynamicTypeImpl.instance);
+    } else {
+      stack.removeLast();
+      // TODO(scheglov) implement
+      stack.add(DynamicTypeImpl.instance);
+    }
+  }
+
+  void _doConditional() {
+    DartType elseType = stack.removeLast();
+    DartType thenType = stack.removeLast();
+    stack.removeLast();
+    DartType type = _leastUpperBound(thenType, elseType);
+    type = _dynamicIfNull(type);
+    stack.add(type);
+  }
+
+  void _doExtractIndex() {
+    stack.removeLast(); // index
+    DartType target = stack.removeLast();
+    stack.add(() {
+      if (target is InterfaceType) {
+        MethodElement method = target.lookUpMethod('[]', library);
+        if (method != null) {
+          return method.returnType;
+        }
+      }
+      return DynamicTypeImpl.instance;
+    }());
+  }
+
+  void _doExtractProperty() {
+    DartType target = stack.removeLast();
+    String propertyName = _getNextString();
+    stack.add(() {
+      if (target is InterfaceType) {
+        PropertyAccessorElement getter =
+            target.lookUpGetter(propertyName, library);
+        if (getter != null) {
+          return getter.returnType;
+        }
+        MethodElement method = target.lookUpMethod(propertyName, library);
+        if (method != null) {
+          return method.type;
+        }
+      }
+      return DynamicTypeImpl.instance;
+    }());
+  }
+
+  void _doInvokeConstructor() {
+    int numNamed = _getNextInt();
+    int numPositional = _getNextInt();
+    // TODO(paulberry): don't just pop the args; use their types
+    // to infer the type of type arguments.
+    stack.length -= numNamed + numPositional;
+    strPtr += numNamed;
+    EntityRef ref = unlinkedConst.references[refPtr++];
+    ConstructorElementForLink element =
+        unit._resolveRef(ref.reference).asConstructor;
+    if (element != null) {
+      stack.add(element.enclosingElement.buildType(
+          (int i) => i >= ref.typeArguments.length
+              ? DynamicTypeImpl.instance
+              : unit._resolveTypeRef(
+                  ref.typeArguments[i], variable._typeParameterContext),
+          const []));
+    } else {
+      stack.add(DynamicTypeImpl.instance);
+    }
+  }
+
+  void _doInvokeMethod() {
+    int numNamed = unlinkedConst.ints[intPtr++];
+    int numPositional = unlinkedConst.ints[intPtr++];
+    List<String> namedArgNames = _getNextStrings(numNamed);
+    List<DartType> namedArgTypeList = _popList(numNamed);
+    List<DartType> positionalArgTypes = _popList(numPositional);
+    String methodName = _getNextString();
+    DartType target = stack.removeLast();
+    stack.add(() {
+      if (target is InterfaceType) {
+        MethodElement method = target.lookUpMethod(methodName, library);
+        DartType rawMethodType = method?.type;
+        TypeSystem ts = linker.typeSystem;
+        if (rawMethodType is FunctionType) {
+          if (rawMethodType.typeFormals.isNotEmpty &&
+              ts is StrongTypeSystemImpl) {
+            List<DartType> paramTypes = <DartType>[];
+            List<DartType> argTypes = <DartType>[];
+            // Add positional parameter and argument types.
+            for (int i = 0; i < numPositional; i++) {
+              ParameterElement parameter = rawMethodType.parameters[i];
+              if (parameter != null) {
+                paramTypes.add(parameter.type);
+                argTypes.add(positionalArgTypes[i]);
+              }
+            }
+            // Prepare named argument types map.
+            Map<String, DartType> namedArgTypes = <String, DartType>{};
+            for (int i = 0; i < numNamed; i++) {
+              String name = namedArgNames[i];
+              DartType type = namedArgTypeList[i];
+              namedArgTypes[name] = type;
+            }
+            // Add named parameter and argument types.
+            Map<String, DartType> namedParameterTypes =
+                rawMethodType.namedParameterTypes;
+            namedArgTypes.forEach((String name, DartType argType) {
+              DartType parameterType = namedParameterTypes[name];
+              if (parameterType != null) {
+                paramTypes.add(parameterType);
+                argTypes.add(argType);
+              }
+            });
+            // Perform inference.
+            FunctionType inferred = ts.inferGenericFunctionCall(
+                typeProvider, rawMethodType, paramTypes, argTypes, null);
+            return inferred.returnType;
+          }
+          // Not a generic method, use the raw return type.
+          return rawMethodType.returnType;
+        }
+      }
+      return DynamicTypeImpl.instance;
+    }());
+  }
+
+  void _doInvokeMethodRef() {
+    int numNamed = _getNextInt();
+    int numPositional = _getNextInt();
+    // TODO(paulberry): don't just pop the args; use their types
+    // to infer the type of type arguments.
+    stack.length -= numNamed + numPositional;
+    strPtr += numNamed;
+    refPtr++;
+    // TODO(paulberry): implement.
+    stack.add(DynamicTypeImpl.instance);
+  }
+
+  void _doMakeTypedList() {
+    DartType itemType = _getNextTypeRef();
+    stack.length -= _getNextInt();
+    stack.add(typeProvider.listType.instantiate(<DartType>[itemType]));
+  }
+
+  void _doMakeTypeMap() {
+    DartType keyType = _getNextTypeRef();
+    DartType valueType = _getNextTypeRef();
+    stack.length -= 2 * _getNextInt();
+    stack.add(typeProvider.mapType.instantiate(<DartType>[keyType, valueType]));
+  }
+
+  void _doMakeUntypedList() {
+    int numItems = _getNextInt();
+    DartType itemType = numItems == 0
+        ? DynamicTypeImpl.instance
+        : _popList(numItems).reduce(_leastUpperBound);
+    itemType = _dynamicIfNull(itemType);
+    stack.add(typeProvider.listType.instantiate(<DartType>[itemType]));
+  }
+
+  void _doMakeUntypedMap() {
+    int numEntries = _getNextInt();
+    List<DartType> keysValues = _popList(2 * numEntries);
+    DartType keyType = null;
+    DartType valueType = null;
+    for (int i = 0; i < 2 * numEntries; i++) {
+      DartType type = keysValues[i];
+      if (i.isEven) {
+        keyType = keyType == null ? type : _leastUpperBound(keyType, type);
+      } else {
+        valueType =
+            valueType == null ? type : _leastUpperBound(valueType, type);
+      }
+    }
+    keyType = _dynamicIfNull(keyType);
+    valueType = _dynamicIfNull(valueType);
+    stack.add(typeProvider.mapType.instantiate(<DartType>[keyType, valueType]));
+  }
+
+  void _doPushReference() {
+    EntityRef ref = unlinkedConst.references[refPtr++];
+    if (ref.paramReference != 0) {
+      stack.add(typeProvider.typeType);
+    } else {
+      // Synthetic function types can't be directly referred
+      // to by expressions.
+      assert(ref.syntheticReturnType == null);
+      // Nor can implicit function types derived from
+      // function-typed parameters.
+      assert(ref.implicitFunctionTypeIndices.isEmpty);
+      ReferenceableElementForLink element =
+          variable.compilationUnit._resolveRef(ref.reference);
+      stack.add(element.asStaticType);
+    }
+  }
+
+  int _getNextInt() {
+    return unlinkedConst.ints[intPtr++];
+  }
+
+  String _getNextString() {
+    return unlinkedConst.strings[strPtr++];
+  }
+
+  List<String> _getNextStrings(int n) {
+    List<String> result = new List<String>(n);
+    for (int i = 0; i < n; i++) {
+      result[i] = _getNextString();
+    }
+    return result;
+  }
+
+  DartType _getNextTypeRef() {
+    EntityRef ref = unlinkedConst.references[refPtr++];
+    return unit._resolveTypeRef(ref, variable._typeParameterContext);
+  }
+
+  /**
+   * Return the type of the property with the given [propertyName] in the
+   * given [targetType]. May return `dynamic` if the property cannot be
+   * resolved.
+   */
+  DartType _getPropertyType(DartType targetType, String propertyName) {
+    return targetType is InterfaceType
+        ? targetType.lookUpGetter(propertyName, library)?.returnType
+        : DynamicTypeImpl.instance;
+  }
+
+  DartType _leastUpperBound(DartType s, DartType t) {
+    return linker.typeSystem.getLeastUpperBound(typeProvider, s, t);
+  }
+
+  List<DartType> _popList(int n) {
+    List<DartType> result = stack.sublist(stack.length - n, stack.length);
+    stack.length -= n;
+    return result;
+  }
+
+  void _pushBinaryOperatorType(
+      DartType left, TokenType operator, DartType right) {
+    if (left is InterfaceType) {
+      MethodElement method = left.lookUpMethod(operator.lexeme, library);
+      if (method != null) {
+        DartType type = method.returnType;
+        type = _refineBinaryExpressionType(operator, type, left, right);
+        stack.add(type);
+        return;
+      }
+    }
+    stack.add(DynamicTypeImpl.instance);
+  }
+
+  /**
+   * Extract the property with the given [propertyName], apply the operator
+   * with the given [operandType], push the type of applying operand of the
+   * given [operandType].
+   */
+  void _pushPropertyBinaryExpression(DartType targetType, String propertyName,
+      TokenType operator, DartType operandType) {
+    DartType propertyType = _getPropertyType(targetType, propertyName);
+    _pushBinaryOperatorType(propertyType, operator, operandType);
+  }
+
+  DartType _refineBinaryExpressionType(TokenType operator, DartType currentType,
+      DartType leftType, DartType rightType) {
+    DartType intType = typeProvider.intType;
+    if (leftType == intType) {
+      // int op double
+      if (operator == TokenType.MINUS ||
+          operator == TokenType.PERCENT ||
+          operator == TokenType.PLUS ||
+          operator == TokenType.STAR) {
+        DartType doubleType = typeProvider.doubleType;
+        if (rightType == doubleType) {
+          return doubleType;
+        }
+      }
+      // int op int
+      if (operator == TokenType.MINUS ||
+          operator == TokenType.PERCENT ||
+          operator == TokenType.PLUS ||
+          operator == TokenType.STAR ||
+          operator == TokenType.TILDE_SLASH) {
+        if (rightType == intType) {
+          return intType;
+        }
+      }
+    }
+    // default
+    return currentType;
+  }
+
+  static TokenType _convertAssignOperatorToTokenType(
+      UnlinkedExprAssignOperator o) {
+    switch (o) {
+      case UnlinkedExprAssignOperator.assign:
+        return null;
+      case UnlinkedExprAssignOperator.ifNull:
+        return TokenType.QUESTION_QUESTION;
+      case UnlinkedExprAssignOperator.multiply:
+        return TokenType.STAR;
+      case UnlinkedExprAssignOperator.divide:
+        return TokenType.SLASH;
+      case UnlinkedExprAssignOperator.floorDivide:
+        return TokenType.TILDE_SLASH;
+      case UnlinkedExprAssignOperator.modulo:
+        return TokenType.PERCENT;
+      case UnlinkedExprAssignOperator.plus:
+        return TokenType.PLUS;
+      case UnlinkedExprAssignOperator.minus:
+        return TokenType.MINUS;
+      case UnlinkedExprAssignOperator.shiftLeft:
+        return TokenType.LT_LT;
+      case UnlinkedExprAssignOperator.shiftRight:
+        return TokenType.GT_GT;
+      case UnlinkedExprAssignOperator.bitAnd:
+        return TokenType.AMPERSAND;
+      case UnlinkedExprAssignOperator.bitXor:
+        return TokenType.CARET;
+      case UnlinkedExprAssignOperator.bitOr:
+        return TokenType.BAR;
+      case UnlinkedExprAssignOperator.prefixIncrement:
+        return TokenType.PLUS_PLUS;
+      case UnlinkedExprAssignOperator.prefixDecrement:
+        return TokenType.MINUS_MINUS;
+      case UnlinkedExprAssignOperator.postfixIncrement:
+        return TokenType.PLUS_PLUS;
+      case UnlinkedExprAssignOperator.postfixDecrement:
+        return TokenType.MINUS_MINUS;
+    }
+  }
+
+  static DartType _dynamicIfNull(DartType type) {
+    if (type == null || type.isBottom || type.isVoid) {
+      return DynamicTypeImpl.instance;
+    }
+    return type;
+  }
+}
+
 /**
  * Element representing a field resynthesized from a summary during
  * linking.
@@ -1479,11 +2280,18 @@
 
   @override
   DartType get type {
+    // TODO(paulberry): can this be unified with
+    // [VariableElementForLink.asStaticType]?
     assert(!isStatic);
     if (_inferredInstanceType != null) {
       return _inferredInstanceType;
     } else if (_declaredType == null) {
       if (unlinkedVariable.type == null) {
+        if (!compilationUnit.isInBuildUnit) {
+          _inferredInstanceType = compilationUnit.getLinkedType(
+              unlinkedVariable.inferredTypeSlot, enclosingElement);
+          return _inferredInstanceType;
+        }
         _declaredType = DynamicTypeImpl.instance;
       } else {
         _declaredType = compilationUnit._resolveTypeRef(
@@ -1500,6 +2308,9 @@
     _inferredInstanceType = inferredType;
   }
 
+  @override
+  TypeParameterizedElementForLink get _typeParameterContext => enclosingElement;
+
   /**
    * Store the results of type inference for this field in
    * [compilationUnit].
@@ -1531,7 +2342,10 @@
    */
   final UnlinkedEnumValue unlinkedEnumValue;
 
-  FieldElementForLink_EnumField(this.unlinkedEnumValue);
+  @override
+  final ClassElementForLink_Enum enclosingElement;
+
+  FieldElementForLink_EnumField(this.unlinkedEnumValue, this.enclosingElement);
 
   @override
   ConstructorElementForLink get asConstructor => null;
@@ -1545,10 +2359,7 @@
   }
 
   @override
-  DartType get asStaticType {
-    // TODO(paulberry): implement.
-    throw new UnimplementedError();
-  }
+  DartType get asStaticType => enclosingElement.type;
 
   @override
   TypeInferenceNode get asTypeInferenceNode => null;
@@ -1659,19 +2470,119 @@
 }
 
 /**
+ * Specialization of [DependencyWalker] for linking library cycles.
+ */
+class LibraryCycleDependencyWalker extends DependencyWalker<LibraryCycleNode> {
+  @override
+  void evaluate(LibraryCycleNode v) {
+    v.link();
+  }
+
+  @override
+  void evaluateScc(List<LibraryCycleNode> scc) {
+    // There should never be a cycle among library cycles.
+    throw new StateError('Cycle among library cycles');
+  }
+}
+
+/**
  * An instance of [LibraryCycleForLink] represents a single library cycle
  * discovered during linking; it consists of one or more libraries in the build
  * unit being linked.
- *
- * This is a stub implementation; at the moment all libraries in the build unit
- * being linked are considered to be part of the same library cycle.  Hence
- * there is just a singleton instance of this class.
- * TODO(paulberry): replace this with a correct implementation.
  */
 class LibraryCycleForLink {
-  static final LibraryCycleForLink instance = const LibraryCycleForLink._();
+  /**
+   * The libraries in the cycle.
+   */
+  final List<LibraryElementInBuildUnit> libraries;
 
-  const LibraryCycleForLink._();
+  /**
+   * The library cycles which this library depends on.
+   */
+  final List<LibraryCycleForLink> dependencies;
+
+  /**
+   * The [LibraryCycleNode] for this library cycle.
+   */
+  LibraryCycleNode _node;
+
+  LibraryCycleForLink(this.libraries, this.dependencies) {
+    _node = new LibraryCycleNode(this);
+  }
+
+  LibraryCycleNode get node => _node;
+
+  /**
+   * Link this library cycle and any library cycles it depends on.  Does
+   * nothing if this library cycle has already been linked.
+   */
+  void ensureLinked() {
+    if (!node.isEvaluated) {
+      new LibraryCycleDependencyWalker().walk(node);
+    }
+  }
+}
+
+/**
+ * Specialization of [Node] used to link library cycles in proper dependency
+ * order.
+ */
+class LibraryCycleNode extends Node<LibraryCycleNode> {
+  /**
+   * The library cycle this [Node] represents.
+   */
+  final LibraryCycleForLink libraryCycle;
+
+  /**
+   * Indicates whether this library cycle has been linked yet.
+   */
+  bool _isLinked = false;
+
+  LibraryCycleNode(this.libraryCycle);
+
+  @override
+  bool get isEvaluated => _isLinked;
+
+  @override
+  List<LibraryCycleNode> computeDependencies() => libraryCycle.dependencies
+      .map((LibraryCycleForLink cycle) => cycle.node)
+      .toList();
+
+  /**
+   * Link this library cycle.
+   */
+  void link() {
+    for (LibraryElementInBuildUnit library in libraryCycle.libraries) {
+      library.link();
+    }
+    _isLinked = true;
+  }
+}
+
+/**
+ * Specialization of [DependencyWalker] for computing library cycles.
+ */
+class LibraryDependencyWalker extends DependencyWalker<LibraryNode> {
+  @override
+  void evaluate(LibraryNode v) => evaluateScc(<LibraryNode>[v]);
+
+  @override
+  void evaluateScc(List<LibraryNode> scc) {
+    Set<LibraryCycleForLink> dependentCycles = new Set<LibraryCycleForLink>();
+    for (LibraryNode node in scc) {
+      for (LibraryNode dependency in node.dependencies) {
+        if (dependency.isEvaluated) {
+          dependentCycles.add(dependency._libraryCycle);
+        }
+      }
+    }
+    LibraryCycleForLink cycle = new LibraryCycleForLink(
+        scc.map((LibraryNode n) => n.library).toList(),
+        dependentCycles.toList());
+    for (LibraryNode node in scc) {
+      node._libraryCycle = cycle;
+    }
+  }
 }
 
 /**
@@ -1685,7 +2596,7 @@
   /**
    * Pointer back to the linker.
    */
-  final _Linker _linker;
+  final Linker _linker;
 
   /**
    * The absolute URI of this library.
@@ -1697,9 +2608,13 @@
       <String, ReferenceableElementForLink>{};
   final List<LibraryElementForLink> _dependencies = <LibraryElementForLink>[];
   UnlinkedUnit _definingUnlinkedUnit;
+  List<LibraryElementForLink> _importedLibraries;
+  List<LibraryElementForLink> _exportedLibraries;
 
   LibraryElementForLink(this._linker, this._absoluteUri) {
-    _dependencies.length = _linkedLibrary.dependencies.length;
+    if (_linkedLibrary != null) {
+      _dependencies.length = _linkedLibrary.dependencies.length;
+    }
   }
 
   /**
@@ -1711,6 +2626,14 @@
   @override
   Element get enclosingElement => null;
 
+  @override
+  List<LibraryElementForLink> get exportedLibraries => _exportedLibraries ??=
+      _linkedLibrary.exportDependencies.map(_getDependency).toList();
+
+  @override
+  List<LibraryElementForLink> get importedLibraries => _importedLibraries ??=
+      _linkedLibrary.importDependencies.map(_getDependency).toList();
+
   /**
    * If this library is part of the build unit being linked, return the library
    * cycle it is part of.  Otherwise return `null`.
@@ -1785,11 +2708,18 @@
   @override
   final LinkedLibraryBuilder _linkedLibrary;
 
+  /**
+   * The [LibraryNode] representing this library in the library dependency
+   * graph.
+   */
+  LibraryNode _libraryNode;
+
   InheritanceManager _inheritanceManager;
 
-  LibraryElementInBuildUnit(
-      _Linker linker, Uri absoluteUri, this._linkedLibrary)
-      : super(linker, absoluteUri);
+  LibraryElementInBuildUnit(Linker linker, Uri absoluteUri, this._linkedLibrary)
+      : super(linker, absoluteUri) {
+    _libraryNode = new LibraryNode(this);
+  }
 
   /**
    * Get the inheritance manager for this library (creating it if necessary).
@@ -1798,7 +2728,12 @@
       _inheritanceManager ??= new InheritanceManager(this);
 
   @override
-  LibraryCycleForLink get libraryCycleForLink => LibraryCycleForLink.instance;
+  LibraryCycleForLink get libraryCycleForLink {
+    if (!_libraryNode.isEvaluated) {
+      new LibraryDependencyWalker().walk(_libraryNode);
+    }
+    return _libraryNode._libraryCycle;
+  }
 
   /**
    * If this library already has a dependency in its dependencies table matching
@@ -1857,7 +2792,7 @@
   final LinkedLibrary _linkedLibrary;
 
   LibraryElementInDependency(
-      _Linker linker, Uri absoluteUri, this._linkedLibrary)
+      Linker linker, Uri absoluteUri, this._linkedLibrary)
       : super(linker, absoluteUri);
 
   @override
@@ -1871,6 +2806,175 @@
 }
 
 /**
+ * Specialization of [Node] used to construct the library dependency graph.
+ */
+class LibraryNode extends Node<LibraryNode> {
+  /**
+   * The library this [Node] represents.
+   */
+  final LibraryElementInBuildUnit library;
+
+  /**
+   * The library cycle to which [library] belongs, if it has been computed.
+   * Otherwise `null`.
+   */
+  LibraryCycleForLink _libraryCycle;
+
+  LibraryNode(this.library);
+
+  @override
+  bool get isEvaluated => _libraryCycle != null;
+
+  @override
+  List<LibraryNode> computeDependencies() {
+    // Note: we only need to consider dependencies within the build unit being
+    // linked; dependencies in other build units can't participate in library
+    // cycles with us.
+    List<LibraryNode> dependencies = <LibraryNode>[];
+    for (LibraryElement dependency in library.importedLibraries) {
+      if (dependency is LibraryElementInBuildUnit) {
+        dependencies.add(dependency._libraryNode);
+      }
+    }
+    for (LibraryElement dependency in library.exportedLibraries) {
+      if (dependency is LibraryElementInBuildUnit) {
+        dependencies.add(dependency._libraryNode);
+      }
+    }
+    return dependencies;
+  }
+}
+
+/**
+ * Instances of [Linker] contain the necessary information to link
+ * together a single build unit.
+ */
+class Linker {
+  /**
+   * Callback to ask the client for a [LinkedLibrary] for a
+   * dependency.
+   */
+  final GetDependencyCallback getDependency;
+
+  /**
+   * Callback to ask the client for an [UnlinkedUnit].
+   */
+  final GetUnitCallback getUnit;
+
+  /**
+   * Map containing all library elements accessed during linking,
+   * whether they are part of the build unit being linked or whether
+   * they are dependencies.
+   */
+  final Map<Uri, LibraryElementForLink> _libraries =
+      <Uri, LibraryElementForLink>{};
+
+  /**
+   * List of library elements for the libraries in the build unit
+   * being linked.
+   */
+  final List<LibraryElementInBuildUnit> _librariesInBuildUnit =
+      <LibraryElementInBuildUnit>[];
+
+  /**
+   * Indicates whether type inference should use strong mode rules.
+   */
+  final bool strongMode;
+
+  LibraryElementForLink _coreLibrary;
+  LibraryElementForLink _asyncLibrary;
+  TypeProviderForLink _typeProvider;
+  TypeSystem _typeSystem;
+  SpecialTypeElementForLink _voidElement;
+  SpecialTypeElementForLink _dynamicElement;
+  SpecialTypeElementForLink _bottomElement;
+
+  Linker(Map<String, LinkedLibraryBuilder> linkedLibraries, this.getDependency,
+      this.getUnit, this.strongMode) {
+    // Create elements for the libraries to be linked.  The rest of
+    // the element model will be created on demand.
+    linkedLibraries
+        .forEach((String absoluteUri, LinkedLibraryBuilder linkedLibrary) {
+      Uri uri = Uri.parse(absoluteUri);
+      _librariesInBuildUnit.add(_libraries[uri] =
+          new LibraryElementInBuildUnit(this, uri, linkedLibrary));
+    });
+  }
+
+  /**
+   * Get the library element for `dart:async`.
+   */
+  LibraryElementForLink get asyncLibrary =>
+      _asyncLibrary ??= getLibrary(Uri.parse('dart:async'));
+
+  /**
+   * Get the element representing the "bottom" type.
+   */
+  SpecialTypeElementForLink get bottomElement => _bottomElement ??=
+      new SpecialTypeElementForLink(this, BottomTypeImpl.instance);
+
+  /**
+   * Get the library element for `dart:core`.
+   */
+  LibraryElementForLink get coreLibrary =>
+      _coreLibrary ??= getLibrary(Uri.parse('dart:core'));
+
+  /**
+   * Get the element representing `dynamic`.
+   */
+  SpecialTypeElementForLink get dynamicElement => _dynamicElement ??=
+      new SpecialTypeElementForLink(this, DynamicTypeImpl.instance);
+
+  /**
+   * Get an instance of [TypeProvider] for use during linking.
+   */
+  TypeProviderForLink get typeProvider =>
+      _typeProvider ??= new TypeProviderForLink(this);
+
+  /**
+   * Get an instance of [TypeSystem] for use during linking.
+   */
+  TypeSystem get typeSystem => _typeSystem ??=
+      strongMode ? new StrongTypeSystemImpl() : new TypeSystemImpl();
+
+  /**
+   * Get the element representing `void`.
+   */
+  SpecialTypeElementForLink get voidElement => _voidElement ??=
+      new SpecialTypeElementForLink(this, VoidTypeImpl.instance);
+
+  /**
+   * Get the library element for the library having the given [uri].
+   */
+  LibraryElementForLink getLibrary(Uri uri) => _libraries.putIfAbsent(
+      uri,
+      () => new LibraryElementInDependency(
+          this, uri, getDependency(uri.toString())));
+
+  /**
+   * Perform type inference and const cycle detection on all libraries
+   * in the build unit being linked.
+   */
+  void link() {
+    // Link library cycles in appropriate dependency order.
+    for (LibraryElementInBuildUnit library in _librariesInBuildUnit) {
+      library.libraryCycleForLink.ensureLinked();
+    }
+    // TODO(paulberry): set dependencies.
+  }
+
+  /**
+   * Throw away any information stored in the summary by a previous call to
+   * [link].
+   */
+  void unlink() {
+    for (LibraryElementInBuildUnit library in _librariesInBuildUnit) {
+      library.unlink();
+    }
+  }
+}
+
+/**
  * Element representing a method resynthesized from a summary during linking.
  */
 class MethodElementForLink extends ExecutableElementForLink
@@ -1948,13 +3052,13 @@
   @override
   DartType get asStaticType {
     // TODO(paulberry): implement.
-    throw new UnimplementedError();
+    return DynamicTypeImpl.instance;
   }
 
   @override
   TypeInferenceNode get asTypeInferenceNode {
     // TODO(paulberry): implement.
-    throw new UnimplementedError();
+    return null;
   }
 
   @override
@@ -2036,12 +3140,17 @@
       return _inferredType;
     } else if (_declaredType == null) {
       if (_unlinkedParam.isFunctionTyped) {
-        // TODO(paulberry): implement.
         _declaredType = new FunctionTypeImpl(
             new FunctionElementForLink_FunctionTypedParam(
                 this, enclosingElement, <int>[_parameterIndex]));
       } else if (_unlinkedParam.type == null) {
-        _declaredType = DynamicTypeImpl.instance;
+        if (!compilationUnit.isInBuildUnit) {
+          _inferredType = compilationUnit.getLinkedType(
+              _unlinkedParam.inferredTypeSlot, _typeParameterContext);
+          return _inferredType;
+        } else {
+          _declaredType = DynamicTypeImpl.instance;
+        }
       } else {
         _declaredType = compilationUnit._resolveTypeRef(
             _unlinkedParam.type, _typeParameterContext);
@@ -2073,17 +3182,29 @@
  * Element representing a getter or setter resynthesized from a summary during
  * linking.
  */
-class PropertyAccessorElementForLink extends ExecutableElementForLink
+abstract class PropertyAccessorElementForLink
     implements PropertyAccessorElementImpl {
+  void link(CompilationUnitElementInBuildUnit compilationUnit);
+}
+
+/**
+ * Specialization of [PropertyAccessorElementForLink] for non-synthetic
+ * accessors explicitly declared in the source code.
+ */
+class PropertyAccessorElementForLink_Executable extends ExecutableElementForLink
+    implements PropertyAccessorElementForLink {
   @override
   SyntheticVariableElementForLink variable;
 
-  PropertyAccessorElementForLink(ClassElementForLink_Class enclosingElement,
-      UnlinkedExecutable unlinkedExecutable, this.variable)
+  PropertyAccessorElementForLink_Executable(
+      ClassElementForLink_Class enclosingElement,
+      UnlinkedExecutable unlinkedExecutable,
+      this.variable)
       : super(enclosingElement, unlinkedExecutable);
 
   @override
-  PropertyAccessorElementForLink get correspondingGetter => variable.getter;
+  PropertyAccessorElementForLink_Executable get correspondingGetter =>
+      variable.getter;
 
   @override
   bool get isGetter =>
@@ -2102,6 +3223,75 @@
 }
 
 /**
+ * Specialization of [PropertyAccessorElementForLink] for synthetic accessors
+ * implied by a field or variable declaration.
+ */
+class PropertyAccessorElementForLink_Variable
+    implements PropertyAccessorElementForLink {
+  @override
+  final bool isSetter;
+
+  final VariableElementForLink _variable;
+  FunctionTypeImpl _type;
+
+  PropertyAccessorElementForLink_Variable(this._variable, this.isSetter);
+
+  @override
+  Element get enclosingElement => _variable.enclosingElement;
+
+  @override
+  bool get isGetter => !isSetter;
+
+  @override
+  bool get isStatic => _variable.isStatic;
+
+  @override
+  bool get isSynthetic => true;
+
+  @override
+  ElementKind get kind => isSetter ? ElementKind.SETTER : ElementKind.GETTER;
+
+  @override
+  String get name => isSetter ? '${_variable.name}=' : _variable.name;
+
+  @override
+  DartType get returnType {
+    if (isSetter) {
+      return VoidTypeImpl.instance;
+    } else if (_variable.hasImplicitType &&
+        !isStatic &&
+        !_variable.compilationUnit.isTypeInferenceComplete) {
+      // This is an instance field and we are currently inferring types in the
+      // library cycle containing it.  So we shouldn't use the inferred type
+      // (even if we have already computed it), since that would lead to
+      // non-deterministic type inference results.
+      return DynamicTypeImpl.instance;
+    } else {
+      return _variable.type;
+    }
+  }
+
+  @override
+  FunctionTypeImpl get type => _type ??= new FunctionTypeImpl(this);
+
+  @override
+  List<TypeParameterElement> get typeParameters {
+    // TODO(paulberry): is this correct for fields in generic classes?
+    return const [];
+  }
+
+  @override
+  bool isAccessibleIn(LibraryElement library) =>
+      !Identifier.isPrivateName(name) || identical(this.library, library);
+
+  @override
+  void link(CompilationUnitElementInBuildUnit compilationUnit) {}
+
+  @override
+  noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
+}
+
+/**
  * Abstract base class representing an element which can be the target
  * of a reference.
  */
@@ -2121,7 +3311,8 @@
   ConstVariableNode get asConstVariable;
 
   /**
-   * Return the static type of the entity referred to by thi element.
+   * Return the static type (possibly inferred) of the entity referred to by
+   * this element.
    */
   DartType get asStaticType;
 
@@ -2151,18 +3342,51 @@
 }
 
 /**
+ * Element used for references to special types such as `void`.
+ */
+class SpecialTypeElementForLink extends ReferenceableElementForLink {
+  final Linker linker;
+  final DartType type;
+
+  SpecialTypeElementForLink(this.linker, this.type);
+
+  @override
+  ConstructorElementForLink get asConstructor => null;
+
+  @override
+  ConstVariableNode get asConstVariable => null;
+
+  @override
+  DartType get asStaticType => linker.typeProvider.typeType;
+
+  @override
+  TypeInferenceNode get asTypeInferenceNode => null;
+
+  @override
+  DartType buildType(
+      DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) {
+    return type;
+  }
+
+  @override
+  ReferenceableElementForLink getContainedName(String name) {
+    return UndefinedElementForLink.instance;
+  }
+}
+
+/**
  * Element representing a synthetic variable resynthesized from a summary during
  * linking.
  */
 class SyntheticVariableElementForLink implements PropertyInducingElementImpl {
-  PropertyAccessorElementForLink _getter;
-  PropertyAccessorElementForLink _setter;
+  PropertyAccessorElementForLink_Executable _getter;
+  PropertyAccessorElementForLink_Executable _setter;
 
   @override
-  PropertyAccessorElementForLink get getter => _getter;
+  PropertyAccessorElementForLink_Executable get getter => _getter;
 
   @override
-  PropertyAccessorElementForLink get setter => _setter;
+  PropertyAccessorElementForLink_Executable get setter => _setter;
 
   @override
   void set type(DartType inferredType) {}
@@ -2183,6 +3407,23 @@
 
   @override
   bool get isStatic => true;
+
+  @override
+  TypeParameterizedElementForLink get _typeParameterContext => null;
+
+  /**
+   * Store the results of type inference for this variable in
+   * [compilationUnit].
+   */
+  void link(CompilationUnitElementInBuildUnit compilationUnit) {
+    if (hasImplicitType) {
+      TypeInferenceNode typeInferenceNode = this.asTypeInferenceNode;
+      if (typeInferenceNode != null) {
+        compilationUnit._storeLinkedType(unlinkedVariable.inferredTypeSlot,
+            typeInferenceNode.inferredType, null);
+      }
+    }
+  }
 }
 
 /**
@@ -2250,6 +3491,7 @@
       return;
     }
     int refPtr = 0;
+
     for (UnlinkedConstOperation operation in unlinkedConst.operations) {
       switch (operation) {
         case UnlinkedConstOperation.pushReference:
@@ -2269,6 +3511,20 @@
         case UnlinkedConstOperation.makeTypedMap:
           refPtr += 2;
           break;
+        case UnlinkedConstOperation.assignToRef:
+          // TODO(paulberry): if this reference refers to a variable, should it
+          // be considered a type inference dependency?
+          refPtr++;
+          break;
+        case UnlinkedConstOperation.invokeMethodRef:
+          // TODO(paulberry): if this reference refers to a variable, should it
+          // be considered a type inference dependency?
+          refPtr++;
+          break;
+        case UnlinkedConstOperation.typeCast:
+        case UnlinkedConstOperation.typeCheck:
+          refPtr++;
+          break;
         default:
           break;
       }
@@ -2286,89 +3542,11 @@
     return dependencies;
   }
 
-  @override
   void evaluate(bool inCycle) {
     if (inCycle) {
       _inferredType = DynamicTypeImpl.instance;
-    } else if (!variableElement.unlinkedVariable.constExpr.isValidConst) {
-      // TODO(paulberry): delete this case and fix errors.
-      throw new UnimplementedError();
     } else {
-      // Perform RPN evaluation of the cycle, using a stack of
-      // inferred types.
-      List<DartType> stack = <DartType>[];
-      int refPtr = 0;
-      int intPtr = 0;
-      UnlinkedConst unlinkedConst = variableElement.unlinkedVariable.constExpr;
-      TypeProvider typeProvider =
-          variableElement.compilationUnit.enclosingElement._linker.typeProvider;
-      for (UnlinkedConstOperation operation in unlinkedConst.operations) {
-        switch (operation) {
-          case UnlinkedConstOperation.pushInt:
-            intPtr++;
-            stack.add(typeProvider.intType);
-            break;
-          case UnlinkedConstOperation.pushNull:
-            stack.add(BottomTypeImpl.instance);
-            break;
-          case UnlinkedConstOperation.pushReference:
-            EntityRef ref = unlinkedConst.references[refPtr++];
-            if (ref.paramReference != 0) {
-              stack.add(typeProvider.typeType);
-            } else {
-              // Synthetic function types can't be directly referred
-              // to by expressions.
-              assert(ref.syntheticReturnType == null);
-              // Nor can implicit function types derived from
-              // function-typed parameters.
-              assert(ref.implicitFunctionTypeIndices.isEmpty);
-              ReferenceableElementForLink element =
-                  variableElement.compilationUnit._resolveRef(ref.reference);
-              TypeInferenceNode typeInferenceNode = element.asTypeInferenceNode;
-              if (typeInferenceNode != null) {
-                assert(typeInferenceNode.isEvaluated);
-                stack.add(typeInferenceNode._inferredType);
-              } else {
-                stack.add(element.asStaticType);
-              }
-            }
-            break;
-          case UnlinkedConstOperation.makeTypedList:
-            refPtr++;
-            stack.length -= unlinkedConst.ints[intPtr++];
-            // TODO(paulberry): implement.
-            stack.add(DynamicTypeImpl.instance);
-            break;
-          case UnlinkedConstOperation.makeTypedMap:
-            refPtr += 2;
-            // TODO(paulberry): implement.
-            throw new UnimplementedError('$operation');
-          case UnlinkedConstOperation.invokeConstructor:
-            // TODO(paulberry): don't just pop the args; use their types
-            // to infer the type of type arguments.
-            stack.length -=
-                unlinkedConst.ints[intPtr++] + unlinkedConst.ints[intPtr++];
-            EntityRef ref = unlinkedConst.references[refPtr++];
-            ConstructorElementForLink element = variableElement.compilationUnit
-                ._resolveRef(ref.reference)
-                .asConstructor;
-            if (ref.typeArguments.isNotEmpty) {
-              // TODO(paulberry): handle type arguments
-              throw new UnimplementedError();
-            }
-            // TODO(paulberry): do we have to follow constructor
-            // redirections?
-            stack.add(element.enclosingElement.type);
-            break;
-          default:
-            // TODO(paulberry): implement.
-            throw new UnimplementedError('$operation');
-        }
-      }
-      assert(refPtr == unlinkedConst.references.length);
-      assert(intPtr == unlinkedConst.ints.length);
-      assert(stack.length == 1);
-      _inferredType = stack[0];
+      _inferredType = new ExprTypeComputer(variableElement).compute();
     }
   }
 }
@@ -2394,6 +3572,18 @@
   TypeParameterElementForLink(this._unlinkedTypeParam, this.nestingLevel);
 
   @override
+  DartType get bound {
+    if (_unlinkedTypeParam.bound == null) {
+      return null;
+    }
+    // TODO(scheglov) implement
+    throw new UnimplementedError();
+  }
+
+  @override
+  ElementKind get kind => ElementKind.TYPE_PARAMETER;
+
+  @override
   String get name => _unlinkedTypeParam.name;
 
   @override
@@ -2477,7 +3667,7 @@
 }
 
 class TypeProviderForLink implements TypeProvider {
-  final _Linker _linker;
+  final Linker _linker;
 
   InterfaceType _boolType;
   InterfaceType _deprecatedType;
@@ -2614,9 +3804,11 @@
 
   InterfaceType _buildInterfaceType(
       LibraryElementForLink library, String name) {
-    return library
-        .getContainedName(name)
-        .buildType((int i) => DynamicTypeImpl.instance, const []);
+    return library.getContainedName(name).buildType((int i) {
+      // TODO(scheglov) accept type parameter names
+      var element = new TypeParameterElementImpl('T$i', -1);
+      return new TypeParameterTypeImpl(element);
+    }, const []);
   }
 }
 
@@ -2676,6 +3868,7 @@
   TypeInferenceNode _typeInferenceNode;
 
   FunctionElementForLink_Initializer _initializer;
+  DartType _staticType;
 
   /**
    * The compilation unit in which this variable appears.
@@ -2699,8 +3892,23 @@
 
   @override
   DartType get asStaticType {
-    // TODO(paulberry): implement.
-    throw new UnimplementedError();
+    if (_staticType == null) {
+      if (_typeInferenceNode != null) {
+        assert(_typeInferenceNode.isEvaluated);
+        _staticType = _typeInferenceNode.inferredType;
+      } else if (hasImplicitType) {
+        if (!compilationUnit.isInBuildUnit) {
+          _staticType = compilationUnit.getLinkedType(
+              unlinkedVariable.inferredTypeSlot, _typeParameterContext);
+        } else {
+          _staticType = DynamicTypeImpl.instance;
+        }
+      } else {
+        _staticType = compilationUnit._resolveTypeRef(
+            unlinkedVariable.type, _typeParameterContext);
+      }
+    }
+    return _staticType;
   }
 
   @override
@@ -2738,6 +3946,12 @@
     // TODO(paulberry): store inferred type.
   }
 
+  /**
+   * The context in which type parameters should be interpreted, or `null` if
+   * there are no type parameters in scope.
+   */
+  TypeParameterizedElementForLink get _typeParameterContext;
+
   @override
   DartType buildType(DartType getTypeArgument(int i),
           List<int> implicitFunctionTypeIndices) =>
@@ -2750,104 +3964,3 @@
   @override
   noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
 }
-
-/**
- * Instances of [_Linker] contain the necessary information to link
- * together a single build unit.
- */
-class _Linker {
-  /**
-   * Callback to ask the client for a [LinkedLibrary] for a
-   * dependency.
-   */
-  final GetDependencyCallback getDependency;
-
-  /**
-   * Callback to ask the client for an [UnlinkedUnit].
-   */
-  final GetUnitCallback getUnit;
-
-  /**
-   * Map containing all library elements accessed during linking,
-   * whether they are part of the build unit being linked or whether
-   * they are dependencies.
-   */
-  final Map<Uri, LibraryElementForLink> _libraries =
-      <Uri, LibraryElementForLink>{};
-
-  /**
-   * List of library elements for the libraries in the build unit
-   * being linked.
-   */
-  final List<LibraryElementInBuildUnit> _librariesInBuildUnit =
-      <LibraryElementInBuildUnit>[];
-
-  /**
-   * Indicates whether type inference should use strong mode rules.
-   */
-  final bool strongMode;
-
-  LibraryElementForLink _coreLibrary;
-  LibraryElementForLink _asyncLibrary;
-  TypeProviderForLink _typeProvider;
-
-  _Linker(Map<String, LinkedLibraryBuilder> linkedLibraries, this.getDependency,
-      this.getUnit, this.strongMode) {
-    // Create elements for the libraries to be linked.  The rest of
-    // the element model will be created on demand.
-    linkedLibraries
-        .forEach((String absoluteUri, LinkedLibraryBuilder linkedLibrary) {
-      Uri uri = Uri.parse(absoluteUri);
-      _librariesInBuildUnit.add(_libraries[uri] =
-          new LibraryElementInBuildUnit(this, uri, linkedLibrary));
-    });
-  }
-
-  /**
-   * Get the library element for `dart:async`.
-   */
-  LibraryElementForLink get asyncLibrary =>
-      _asyncLibrary ??= getLibrary(Uri.parse('dart:async'));
-
-  /**
-   * Get the library element for `dart:core`.
-   */
-  LibraryElementForLink get coreLibrary =>
-      _coreLibrary ??= getLibrary(Uri.parse('dart:core'));
-
-  /**
-   * Get an instance of [TypeProvider] for use during linking.
-   */
-  TypeProviderForLink get typeProvider =>
-      _typeProvider ??= new TypeProviderForLink(this);
-
-  /**
-   * Get the library element for the library having the given [uri].
-   */
-  LibraryElementForLink getLibrary(Uri uri) => _libraries.putIfAbsent(
-      uri,
-      () => new LibraryElementInDependency(
-          this, uri, getDependency(uri.toString())));
-
-  /**
-   * Perform type inference and const cycle detection on all libraries
-   * in the build unit being linked.
-   */
-  void link() {
-    // TODO(paulberry): link library cycles in appropriate dependency order.
-    for (LibraryElementInBuildUnit library in _librariesInBuildUnit) {
-      library.link();
-    }
-    // TODO(paulberry): set dependencies.
-  }
-
-  /**
-   * Throw away any information stored in the summary by a previous call to
-   * [link].
-   */
-  void unlink() {
-    for (LibraryElementInBuildUnit library in _librariesInBuildUnit) {
-      library.unlink();
-    }
-  }
-}
diff --git a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
index 59c1951..bde6e40 100644
--- a/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary/package_bundle_reader.dart
@@ -85,6 +85,15 @@
         }
         return false;
       }
+    } else if (target is VariableElement) {
+      if (!_resynthesizer
+          .hasLibrarySummary(target.library.source.uri.toString())) {
+        return false;
+      }
+      if (result == PROPAGATED_VARIABLE || result == INFERRED_STATIC_VARIABLE) {
+        entry.setValue(result, target, TargetedResult.EMPTY_LIST);
+        return true;
+      }
     }
     return false;
   }
diff --git a/pkg/analyzer/lib/src/summary/prelink.dart b/pkg/analyzer/lib/src/summary/prelink.dart
index ede4239..e98b64b 100644
--- a/pkg/analyzer/lib/src/summary/prelink.dart
+++ b/pkg/analyzer/lib/src/summary/prelink.dart
@@ -477,9 +477,12 @@
       }
     }
 
-    // Fill in imported names.
+    // Fill in imported and exported names.
     List<int> importDependencies =
         definingUnit.imports.map(handleImport).toList();
+    List<int> exportDependencies = definingUnit.publicNamespace.exports
+        .map((UnlinkedExportPublic exp) => uriToDependency[exp.uri])
+        .toList();
 
     // Link each compilation unit.
     List<LinkedUnitBuilder> linkedUnits = units.map(linkUnit).toList();
@@ -488,6 +491,7 @@
         units: linkedUnits,
         dependencies: dependencies,
         importDependencies: importDependencies,
+        exportDependencies: exportDependencies,
         exportNames: exportNames,
         numPrelinkedDependencies: dependencies.length);
   }
diff --git a/pkg/analyzer/lib/src/summary/summarize_ast.dart b/pkg/analyzer/lib/src/summary/summarize_ast.dart
index f8d96a1..3c4ddb7 100644
--- a/pkg/analyzer/lib/src/summary/summarize_ast.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart
@@ -1047,15 +1047,17 @@
   @override
   void visitForEachStatement(ForEachStatement node) {
     DeclaredIdentifier loopVariable = node.loopVariable;
-    serializeDeclaredIdentifier(
-        node,
-        loopVariable.documentationComment,
-        loopVariable.metadata,
-        loopVariable.isFinal,
-        loopVariable.isConst,
-        loopVariable.type,
-        true,
-        loopVariable.identifier);
+    if (loopVariable != null) {
+      serializeDeclaredIdentifier(
+          node,
+          loopVariable.documentationComment,
+          loopVariable.metadata,
+          loopVariable.isFinal,
+          loopVariable.isConst,
+          loopVariable.type,
+          true,
+          loopVariable.identifier);
+    }
     super.visitForEachStatement(node);
   }
 
diff --git a/pkg/analyzer/lib/src/summary/summarize_const_expr.dart b/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
index 8a6a4e1..6362f01 100644
--- a/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
@@ -271,12 +271,12 @@
     } else if (expr is AsExpression) {
       isValidConst = false;
       _serialize(expr.expression);
-      _serialize(expr.type.name);
+      references.add(serializeType(expr.type));
       operations.add(UnlinkedConstOperation.typeCast);
     } else if (expr is IsExpression) {
       isValidConst = false;
       _serialize(expr.expression);
-      _serialize(expr.type.name);
+      references.add(serializeType(expr.type));
       operations.add(UnlinkedConstOperation.typeCheck);
     } else if (expr is ThrowExpression) {
       isValidConst = false;
diff --git a/pkg/analyzer/lib/src/summary/summarize_elements.dart b/pkg/analyzer/lib/src/summary/summarize_elements.dart
index 3315785..bb2a42e 100644
--- a/pkg/analyzer/lib/src/summary/summarize_elements.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_elements.dart
@@ -20,6 +20,7 @@
 import 'package:analyzer/src/summary/name_filter.dart';
 import 'package:analyzer/src/summary/summarize_const_expr.dart';
 import 'package:crypto/crypto.dart';
+import 'package:path/path.dart' as path;
 
 /**
  * Serialize all the elements in [lib] to a summary using [ctx] as the context
@@ -156,8 +157,8 @@
   void addFallbackUnit(Source source) {
     String uri = source.uri.toString();
     _unlinkedUnitUris.add(uri);
-    _unlinkedUnits
-        .add(new UnlinkedUnitBuilder(fallbackModePath: source.fullName));
+    _unlinkedUnits.add(new UnlinkedUnitBuilder(
+        fallbackModePath: path.relative(source.fullName)));
   }
 
   void addLinkedLibrary(String uri, LinkedLibraryBuilder library) {
@@ -166,9 +167,13 @@
   }
 
   void addUnlinkedUnit(Source source, UnlinkedUnitBuilder unit) {
-    _unlinkedUnitUris.add(source.uri.toString());
+    addUnlinkedUnitWithHash(source.uri.toString(), unit, _hash(source.contents.data));
+  }
+
+  void addUnlinkedUnitWithHash(String uri, UnlinkedUnitBuilder unit, String hash) {
+    _unlinkedUnitUris.add(uri);
     _unlinkedUnits.add(unit);
-    _unlinkedUnitHashes.add(_hash(source.contents.data));
+    _unlinkedUnitHashes.add(hash);
   }
 
   /**
@@ -453,7 +458,6 @@
    * parameter [type], or return `null` if the type parameter is not in scope.
    */
   int findTypeParameterIndex(TypeParameterType type, Element context) {
-    Element originalContext = context;
     int index = 0;
     while (context != null) {
       List<TypeParameterElement> typeParameters;
@@ -1488,6 +1492,12 @@
   final List<int> linkedImports = <int>[];
 
   /**
+   * The linked portion of the "exports table".  This is the list of ints
+   * which should be written to [LinkedLibrary.exports].
+   */
+  final List<int> linkedExports = <int>[];
+
+  /**
    * Set of libraries which have been seen so far while visiting the transitive
    * closure of exports.
    */
@@ -1594,6 +1604,7 @@
     LinkedLibraryBuilder pb = new LinkedLibraryBuilder();
     for (ExportElement exportElement in libraryElement.exports) {
       addTransitiveExportClosure(exportElement.exportedLibrary);
+      linkedExports.add(serializeDependency(exportElement.exportedLibrary));
     }
     for (ImportElement importElement in libraryElement.imports) {
       addTransitiveExportClosure(importElement.importedLibrary);
@@ -1619,6 +1630,7 @@
       compilationUnitSerializer.createLinkedInfo();
     }
     pb.importDependencies = linkedImports;
+    pb.exportDependencies = linkedExports;
     List<String> exportedNames =
         libraryElement.exportNamespace.definedNames.keys.toList();
     exportedNames.sort();
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 88c44fe..3f80560 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -2764,6 +2764,7 @@
       usedImportedElementsList.forEach(verifier.removeUsedElements);
       verifier.generateDuplicateImportHints(errorReporter);
       verifier.generateUnusedImportHints(errorReporter);
+      verifier.generateUnusedShownNameHints(errorReporter);
     }
     // Unused local elements.
     {
diff --git a/pkg/analyzer/lib/src/task/dart_work_manager.dart b/pkg/analyzer/lib/src/task/dart_work_manager.dart
index 0122c88..4a81c18 100644
--- a/pkg/analyzer/lib/src/task/dart_work_manager.dart
+++ b/pkg/analyzer/lib/src/task/dart_work_manager.dart
@@ -204,7 +204,7 @@
       }
     }
     List<Source> libraries = partLibrariesMap[part];
-    return libraries != null ? libraries : Source.EMPTY_LIST;
+    return libraries?.toList() ?? Source.EMPTY_LIST;
   }
 
   @override
diff --git a/pkg/analyzer/test/generated/hint_code_test.dart b/pkg/analyzer/test/generated/hint_code_test.dart
index fa3da21..168c471 100644
--- a/pkg/analyzer/test/generated/hint_code_test.dart
+++ b/pkg/analyzer/test/generated/hint_code_test.dart
@@ -132,6 +132,12 @@
   final String reason;
   const _Required([this.reason]));
 }
+''',
+      'package:js/js.dart': r'''
+library js;
+class JS {
+  const JS([String js]) { }
+}
 '''
     });
   }
@@ -1241,6 +1247,65 @@
     verify([source]);
   }
 
+  void test_js_lib_OK() {
+    Source source = addSource(r'''
+@JS()
+library foo;
+
+import 'package:js/js.dart';
+
+@JS()
+class A { }
+''');
+    computeLibrarySourceErrors(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
+  void test_missing_js_lib_on_class_decl() {
+    Source source = addSource(r'''
+library foo;
+
+import 'package:js/js.dart';
+
+@JS()
+class A { }
+''');
+    computeLibrarySourceErrors(source);
+    assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]);
+    verify([source]);
+  }
+
+  void test_missing_js_lib_on_function() {
+    Source source = addSource(r'''
+library foo;
+
+import 'package:js/js.dart';
+
+@JS('acxZIndex')
+set _currentZIndex(int value) { }
+''');
+    computeLibrarySourceErrors(source);
+    assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]);
+    verify([source]);
+  }
+
+  void test_missing_js_lib_on_member() {
+    Source source = addSource(r'''
+library foo;
+
+import 'package:js/js.dart';
+
+class A {
+  @JS()
+  void a() { }
+}
+''');
+    computeLibrarySourceErrors(source);
+    assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]);
+    verify([source]);
+  }
+
   void test_missingReturn_async() {
     Source source = addSource('''
 import 'dart:async';
@@ -2838,6 +2903,82 @@
     verify([source, source2]);
   }
 
+  void test_unusedShownName() {
+    Source source = addSource(r'''
+library L;
+import 'lib1.dart' show A, B;
+A a;''');
+    Source source2 = addNamedSource(
+        "/lib1.dart", r'''
+library lib1;
+class A {}
+class B {}''');
+    computeLibrarySourceErrors(source);
+    assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
+    assertNoErrors(source2);
+    verify([source, source2]);
+  }
+
+  void test_unusedShownName_topLevelVariable() {
+    Source source = addSource(r'''
+library L;
+import 'lib1.dart' show var1, var2;
+import 'lib1.dart' show var3, var4;
+int a = var1;
+int b = var2;
+int c = var3;''');
+    Source source2 = addNamedSource(
+        "/lib1.dart",
+        r'''
+library lib1;
+const int var1 = 1;
+const int var2 = 2;
+const int var3 = 3;
+const int var4 = 4;''');
+    computeLibrarySourceErrors(source);
+    assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
+    assertNoErrors(source2);
+    verify([source, source2]);
+  }
+
+  void test_unusedShownName_as() {
+    Source source = addSource(r'''
+library L;
+import 'lib1.dart' as p show A, B;
+p.A a;''');
+    Source source2 = addNamedSource(
+        "/lib1.dart", r'''
+library lib1;
+class A {}
+class B {}''');
+    computeLibrarySourceErrors(source);
+    assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
+    assertNoErrors(source2);
+    verify([source, source2]);
+  }
+
+  void test_unusedShownName_duplicates() {
+    Source source = addSource(r'''
+library L;
+import 'lib1.dart' show A, B;
+import 'lib1.dart' show C, D;
+A a;
+C c;''');
+    Source source2 = addNamedSource(
+        "/lib1.dart", r'''
+library lib1;
+class A {}
+class B {}
+class C {}
+class D {}''');
+    computeLibrarySourceErrors(source);
+    assertErrors(source, [
+        HintCode.UNUSED_SHOWN_NAME,
+        HintCode.UNUSED_SHOWN_NAME]);
+    assertNoErrors(source2);
+    verify([source, source2]);
+  }
+
   void test_unusedLocalVariable_inCatch_exception() {
     enableUnusedLocalVariable = true;
     Source source = addSource(r'''
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index fd3a422..8b4cd5e 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -167,7 +167,7 @@
 class N {}
 class N2 {}''');
     computeLibrarySourceErrors(source);
-    assertNoErrors(source);
+    assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]);
   }
 
   void test_annotated_partOfDeclaration() {
diff --git a/pkg/analyzer/test/generated/non_hint_code_test.dart b/pkg/analyzer/test/generated/non_hint_code_test.dart
index 8d9c19d..9fc1dfb 100644
--- a/pkg/analyzer/test/generated/non_hint_code_test.dart
+++ b/pkg/analyzer/test/generated/non_hint_code_test.dart
@@ -1096,6 +1096,30 @@
     verify([source]);
   }
 
+  void test_unusedImport_prefix_topLevelFunction2() {
+    Source source = addSource(r'''
+library L;
+import 'lib1.dart' hide topLevelFunction;
+import 'lib1.dart' as one show topLevelFunction;
+import 'lib1.dart' as two show topLevelFunction;
+class A {
+  static void x() {
+    One o;
+    one.topLevelFunction();
+    two.topLevelFunction();
+  }
+}''');
+    addNamedSource(
+        "/lib1.dart",
+        r'''
+library lib1;
+class One {}
+topLevelFunction() {}''');
+    computeLibrarySourceErrors(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   void test_useOfVoidResult_implicitReturnValue() {
     Source source = addSource(r'''
 f() {}
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 1e6878d..c366b84 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -8643,7 +8643,9 @@
     expect(expression.keyword, token);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    expect(name.type, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments, isNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
     expect(expression.argumentList, isNotNull);
@@ -8656,12 +8658,79 @@
     expect(expression.keyword, token);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    expect(name.type, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments, isNull);
     expect(name.period, isNotNull);
     expect(name.name, isNotNull);
     expect(expression.argumentList, isNotNull);
   }
 
+  void
+      test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComment() {
+    enableGenericMethodComments = true;
+    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+    InstanceCreationExpression expression = parse(
+        "parseInstanceCreationExpression", <Object>[token], "A.B/*<E>*/.c()");
+    expect(expression.keyword, token);
+    ConstructorName name = expression.constructorName;
+    expect(name, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments.arguments, hasLength(1));
+    expect(name.period, isNotNull);
+    expect(name.name, isNotNull);
+    expect(expression.argumentList, isNotNull);
+  }
+
+  void
+      test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
+    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+    InstanceCreationExpression expression =
+        parse("parseInstanceCreationExpression", <Object>[token], "A.B<E>.c()");
+    expect(expression.keyword, token);
+    ConstructorName name = expression.constructorName;
+    expect(name, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments.arguments, hasLength(1));
+    expect(name.period, isNotNull);
+    expect(name.name, isNotNull);
+    expect(expression.argumentList, isNotNull);
+  }
+
+  void
+      test_parseInstanceCreationExpression_qualifiedType_typeParameterComment() {
+    enableGenericMethodComments = true;
+    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+    InstanceCreationExpression expression = parse(
+        "parseInstanceCreationExpression", <Object>[token], "A.B/*<E>*/()");
+    expect(expression.keyword, token);
+    ConstructorName name = expression.constructorName;
+    expect(name, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments.arguments, hasLength(1));
+    expect(name.period, isNull);
+    expect(name.name, isNull);
+    expect(expression.argumentList, isNotNull);
+  }
+
+  void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
+    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+    InstanceCreationExpression expression =
+        parse("parseInstanceCreationExpression", <Object>[token], "A.B<E>()");
+    expect(expression.keyword, token);
+    ConstructorName name = expression.constructorName;
+    expect(name, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments.arguments, hasLength(1));
+    expect(name.period, isNull);
+    expect(name.name, isNull);
+    expect(expression.argumentList, isNotNull);
+  }
+
   void test_parseInstanceCreationExpression_type() {
     Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
     InstanceCreationExpression expression =
@@ -8669,25 +8738,92 @@
     expect(expression.keyword, token);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    expect(name.type, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments, isNull);
     expect(name.period, isNull);
     expect(name.name, isNull);
     expect(expression.argumentList, isNotNull);
   }
 
   void test_parseInstanceCreationExpression_type_named() {
+    enableGenericMethodComments = true;
+    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+    InstanceCreationExpression expression =
+        parse("parseInstanceCreationExpression", <Object>[token], "A.c()");
+    expect(expression.keyword, token);
+    ConstructorName name = expression.constructorName;
+    expect(name, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments, isNull);
+    expect(name.period, isNull);
+    expect(name.name, isNull);
+    expect(expression.argumentList, isNotNull);
+  }
+
+  void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
+    enableGenericMethodComments = true;
+    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+    InstanceCreationExpression expression = parse(
+        "parseInstanceCreationExpression", <Object>[token], "A/*<B>*/.c()");
+    expect(expression.keyword, token);
+    ConstructorName name = expression.constructorName;
+    expect(name, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments.arguments, hasLength(1));
+    expect(name.period, isNotNull);
+    expect(name.name, isNotNull);
+    expect(expression.argumentList, isNotNull);
+  }
+
+  void test_parseInstanceCreationExpression_type_named_typeParameters() {
     Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
     InstanceCreationExpression expression =
         parse("parseInstanceCreationExpression", <Object>[token], "A<B>.c()");
     expect(expression.keyword, token);
     ConstructorName name = expression.constructorName;
     expect(name, isNotNull);
-    expect(name.type, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments.arguments, hasLength(1));
     expect(name.period, isNotNull);
     expect(name.name, isNotNull);
     expect(expression.argumentList, isNotNull);
   }
 
+  void test_parseInstanceCreationExpression_type_typeParameterComment() {
+    enableGenericMethodComments = true;
+    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+    InstanceCreationExpression expression =
+        parse("parseInstanceCreationExpression", <Object>[token], "A/*<B>*/()");
+    expect(expression.keyword, token);
+    ConstructorName name = expression.constructorName;
+    expect(name, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments.arguments, hasLength(1));
+    expect(name.period, isNull);
+    expect(name.name, isNull);
+    expect(expression.argumentList, isNotNull);
+  }
+
+  void test_parseInstanceCreationExpression_type_typeParameters() {
+    Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
+    InstanceCreationExpression expression =
+        parse("parseInstanceCreationExpression", <Object>[token], "A<B>()");
+    expect(expression.keyword, token);
+    ConstructorName name = expression.constructorName;
+    expect(name, isNotNull);
+    TypeName type = name.type;
+    expect(type, isNotNull);
+    expect(type.typeArguments.arguments, hasLength(1));
+    expect(name.period, isNull);
+    expect(name.name, isNull);
+    expect(expression.argumentList, isNotNull);
+  }
+
   void test_parseLibraryDirective() {
     LibraryDirective directive = parse("parseLibraryDirective",
         <Object>[emptyCommentAndMetadata()], "library l;");
diff --git a/pkg/analyzer/test/generated/static_type_analyzer_test.dart b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
index dd0d172..0e0e3a1 100644
--- a/pkg/analyzer/test/generated/static_type_analyzer_test.dart
+++ b/pkg/analyzer/test/generated/static_type_analyzer_test.dart
@@ -375,16 +375,42 @@
     _listener.assertNoErrors();
   }
 
-  void test_visitAssignmentExpression_compound() {
-    // i += 1
-    InterfaceType numType = _typeProvider.numType;
-    SimpleIdentifier identifier = _resolvedVariable(_typeProvider.intType, "i");
-    AssignmentExpression node = AstFactory.assignmentExpression(
-        identifier, TokenType.PLUS_EQ, _resolvedInteger(1));
-    MethodElement plusMethod = getMethod(numType, "+");
-    node.staticElement = plusMethod;
-    expect(_analyze(node), same(numType));
-    _listener.assertNoErrors();
+  void test_visitAssignmentExpression_compound_II() {
+    validate(TokenType operator) {
+      InterfaceType numType = _typeProvider.numType;
+      InterfaceType intType = _typeProvider.intType;
+      SimpleIdentifier identifier = _resolvedVariable(intType, "i");
+      AssignmentExpression node = AstFactory.assignmentExpression(
+          identifier, operator, _resolvedInteger(1));
+      MethodElement plusMethod = getMethod(numType, "+");
+      node.staticElement = plusMethod;
+      expect(_analyze(node), same(intType));
+      _listener.assertNoErrors();
+    }
+    validate(TokenType.MINUS_EQ);
+    validate(TokenType.PERCENT_EQ);
+    validate(TokenType.PLUS_EQ);
+    validate(TokenType.STAR_EQ);
+    validate(TokenType.TILDE_SLASH_EQ);
+  }
+
+  void test_visitAssignmentExpression_compound_plusID() {
+    validate(TokenType operator) {
+      InterfaceType numType = _typeProvider.numType;
+      InterfaceType intType = _typeProvider.intType;
+      InterfaceType doubleType = _typeProvider.doubleType;
+      SimpleIdentifier identifier = _resolvedVariable(intType, "i");
+      AssignmentExpression node = AstFactory.assignmentExpression(
+          identifier, operator, _resolvedDouble(1.0));
+      MethodElement plusMethod = getMethod(numType, "+");
+      node.staticElement = plusMethod;
+      expect(_analyze(node), same(doubleType));
+      _listener.assertNoErrors();
+    }
+    validate(TokenType.MINUS_EQ);
+    validate(TokenType.PERCENT_EQ);
+    validate(TokenType.PLUS_EQ);
+    validate(TokenType.STAR_EQ);
   }
 
   void test_visitAssignmentExpression_compoundIfNull_differentTypes() {
diff --git a/pkg/analyzer/test/generated/test_all.dart b/pkg/analyzer/test/generated/test_all.dart
index 4785daf..3536c10 100644
--- a/pkg/analyzer/test/generated/test_all.dart
+++ b/pkg/analyzer/test/generated/test_all.dart
@@ -8,22 +8,31 @@
 
 import '../utils.dart';
 import 'all_the_rest_test.dart' as all_the_rest;
+import 'checked_mode_compile_time_error_code_test.dart'
+    as checked_mode_compile_time_error_code_test;
 import 'compile_time_error_code_test.dart' as compile_time_error_code_test;
 import 'constant_test.dart' as constant_test;
 import 'declaration_resolver_test.dart' as declaration_resolver_test;
+import 'element_resolver_test.dart' as element_resolver_test;
 import 'engine_test.dart' as engine_test;
 import 'error_suppression_test.dart' as error_suppression_test;
+import 'hint_code_test.dart' as hint_code_test;
 import 'incremental_resolver_test.dart' as incremental_resolver_test;
 import 'incremental_scanner_test.dart' as incremental_scanner_test;
+import 'inheritance_manager_test.dart' as inheritance_manager_test;
 import 'java_core_test.dart' as java_core_test;
 import 'java_io_test.dart' as java_io_test;
 import 'non_error_resolver_test.dart' as non_error_resolver_test;
+import 'non_hint_code_test.dart' as non_hint_code_test;
 import 'parser_test.dart' as parser_test;
 import 'resolver_test.dart' as resolver_test;
 import 'scanner_test.dart' as scanner_test;
+import 'simple_resolver_test.dart' as simple_resolver_test;
 import 'source_factory_test.dart' as source_factory_test;
+import 'static_type_analyzer_test.dart' as static_type_analyzer_test;
 import 'static_type_warning_code_test.dart' as static_type_warning_code_test;
 import 'static_warning_code_test.dart' as static_warning_code_test;
+import 'strong_mode_test.dart' as strong_mode_test;
 import 'type_system_test.dart' as type_system_test;
 import 'utilities_test.dart' as utilities_test;
 
@@ -32,22 +41,30 @@
   initializeTestEnvironment();
   group('generated tests', () {
     all_the_rest.main();
+    checked_mode_compile_time_error_code_test.main();
     compile_time_error_code_test.main();
     constant_test.main();
     declaration_resolver_test.main();
+    element_resolver_test.main();
     engine_test.main();
     error_suppression_test.main();
+    hint_code_test.main();
     incremental_resolver_test.main();
     incremental_scanner_test.main();
+    inheritance_manager_test.main();
     java_core_test.main();
     java_io_test.main();
     non_error_resolver_test.main();
+    non_hint_code_test.main();
     parser_test.main();
     resolver_test.main();
     scanner_test.main();
+    simple_resolver_test.main();
     source_factory_test.main();
+    static_type_analyzer_test.main();
     static_type_warning_code_test.main();
     static_warning_code_test.main();
+    strong_mode_test.main();
     type_system_test.main();
     utilities_test.main();
   });
diff --git a/pkg/analyzer/test/reflective_tests.dart b/pkg/analyzer/test/reflective_tests.dart
index 820cb16..310e7d0 100644
--- a/pkg/analyzer/test/reflective_tests.dart
+++ b/pkg/analyzer/test/reflective_tests.dart
@@ -11,6 +11,12 @@
 import 'package:unittest/unittest.dart';
 
 /**
+ * A marker annotation used to annotate overridden test methods (so we cannot
+ * rename them to `fail_`) which are expected to fail.
+ */
+const _FailingTest failingTest = const _FailingTest();
+
+/**
  * A marker annotation used to instruct dart2js to keep reflection information
  * for the annotated classes.
  */
@@ -29,7 +35,7 @@
  * method invocation.
  *
  * If [type] declares method `tearDown`, it will be invoked after any test
- * method invocation. If method returns [Future] to test some asyncronous
+ * method invocation. If method returns [Future] to test some asynchronous
  * behavior, then `tearDown` will be invoked in `Future.complete`.
  */
 void runReflectiveTests(Type type) {
@@ -42,7 +48,8 @@
   }
   String className = MirrorSystem.getName(classMirror.simpleName);
   group(className, () {
-    classMirror.instanceMembers.forEach((symbol, memberMirror) {
+    classMirror.instanceMembers
+        .forEach((Symbol symbol, MethodMirror memberMirror) {
       // we need only methods
       if (memberMirror is! MethodMirror || !memberMirror.isRegularMethod) {
         return;
@@ -51,7 +58,11 @@
       // test_
       if (memberName.startsWith('test_')) {
         test(memberName, () {
-          return _runTest(classMirror, symbol);
+          if (_hasFailingTestAnnotation(memberMirror)) {
+            return _runFailingTest(classMirror, symbol);
+          } else {
+            return _runTest(classMirror, symbol);
+          }
         });
         return;
       }
@@ -77,6 +88,11 @@
   });
 }
 
+bool _hasFailingTestAnnotation(MethodMirror method) {
+  return method.metadata.any((InstanceMirror annotation) =>
+      annotation.type.reflectedType == _FailingTest);
+}
+
 Future _invokeSymbolIfExists(InstanceMirror instanceMirror, Symbol symbol) {
   var invocationResult = null;
   InstanceMirror closure;
@@ -120,3 +136,11 @@
 class ReflectiveTest {
   const ReflectiveTest();
 }
+
+/**
+ * A marker annotation used to annotate overridden test methods (so we cannot
+ * rename them to `fail_`) which are expected to fail.
+ */
+class _FailingTest {
+  const _FailingTest();
+}
diff --git a/pkg/analyzer/test/src/context/mock_sdk.dart b/pkg/analyzer/test/src/context/mock_sdk.dart
index a28f4b8..62d0beb 100644
--- a/pkg/analyzer/test/src/context/mock_sdk.dart
+++ b/pkg/analyzer/test/src/context/mock_sdk.dart
@@ -32,6 +32,15 @@
       Iterable<Future/*<T>*/> futures) => null;
   Future/*<R>*/ then/*<R>*/(/*=R*/ onValue(T value)) => null;
 }
+
+abstract class Completer<T> {
+  factory Completer() => new _AsyncCompleter<T>();
+  factory Completer.sync() => new _SyncCompleter<T>();
+  Future<T> get future;
+  void complete([value]);
+  void completeError(Object error, [StackTrace stackTrace]);
+  bool get isCompleted;
+}
 ''',
     const <String, String>{
       '/lib/async/stream.dart': r'''
@@ -118,8 +127,8 @@
   int operator |(int other);
   int operator <<(int other);
   int operator >>(int other);
-  int operator ~/(int other);
-  int operator %(int other);
+  int operator ~/(num other);
+  num operator %(num other);
   int operator ~();
   int toInt();
   double toDouble();
diff --git a/pkg/analyzer/test/src/summary/linker_test.dart b/pkg/analyzer/test/src/summary/linker_test.dart
new file mode 100644
index 0000000..81499ae
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/linker_test.dart
@@ -0,0 +1,400 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/src/summary/format.dart';
+import 'package:analyzer/src/summary/link.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../reflective_tests.dart';
+import 'summarize_ast_test.dart';
+
+main() {
+  groupSep = ' | ';
+  runReflectiveTests(LinkerUnitTest);
+}
+
+@reflectiveTest
+class LinkerUnitTest extends SummaryLinkerTest {
+  Linker linker;
+
+  LinkerInputs linkerInputs;
+  LibraryElementInBuildUnit _testLibrary;
+  @override
+  bool get allowMissingFiles => false;
+
+  LibraryElementInBuildUnit get testLibrary => _testLibrary ??=
+      linker.getLibrary(linkerInputs.testDartUri) as LibraryElementInBuildUnit;
+
+  void createLinker(String text, {String path: '/test.dart'}) {
+    linkerInputs = createLinkerInputs(text, path: path);
+    Map<String, LinkedLibraryBuilder> linkedLibraries =
+        setupForLink(linkerInputs.linkedLibraries, linkerInputs.getUnit);
+    linker = new Linker(linkedLibraries, linkerInputs.getDependency,
+        linkerInputs.getUnit, true);
+  }
+
+  LibraryElementForLink getLibrary(String uri) {
+    return linker.getLibrary(Uri.parse(uri));
+  }
+
+  void test_inferredType_instanceField_dynamic() {
+    createLinker('''
+var x;
+class C {
+  var f = x; // Inferred type: dynamic
+}
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    library.libraryCycleForLink.ensureLinked();
+    ClassElementForLink_Class cls = library.getContainedName('C');
+    expect(cls.fields, hasLength(1));
+    var field = cls.fields[0];
+    expect(field.type.toString(), 'dynamic');
+  }
+
+  void test_inferredType_methodParamType_dynamic() {
+    createLinker('''
+clas B {
+  void f(dynamic x) {}
+}
+class C extends B {
+  f(x) {} // Inferred param type: dynamic
+}
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    library.libraryCycleForLink.ensureLinked();
+    ClassElementForLink_Class cls = library.getContainedName('C');
+    expect(cls.methods, hasLength(1));
+    var method = cls.methods[0];
+    expect(method.parameters, hasLength(1));
+    expect(method.parameters[0].type.toString(), 'dynamic');
+  }
+
+  void test_inferredType_methodReturnType_dynamic() {
+    createLinker('''
+class B {
+  dynamic f() {}
+}
+class C extends B {
+  f() {} // Inferred return type: dynamic
+}
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    library.libraryCycleForLink.ensureLinked();
+    ClassElementForLink_Class cls = library.getContainedName('C');
+    expect(cls.methods, hasLength(1));
+    expect(cls.methods[0].returnType.toString(), 'dynamic');
+  }
+
+  void test_inferredType_staticField_dynamic() {
+    createLinker('''
+dynamic x = null;
+class C {
+  static var y = x;
+}
+''');
+    expect(
+        linker
+            .getLibrary(linkerInputs.testDartUri)
+            .getContainedName('C')
+            .getContainedName('y')
+            .asTypeInferenceNode
+            .inferredType
+            .toString(),
+        'dynamic');
+  }
+
+  void test_inferredType_topLevelVariable_dynamic() {
+    createLinker('''
+dynamic x = null;
+var y = x;
+''');
+    expect(
+        linker
+            .getLibrary(linkerInputs.testDartUri)
+            .getContainedName('y')
+            .asTypeInferenceNode
+            .inferredType
+            .toString(),
+        'dynamic');
+  }
+
+  void test_inferredTypeFromOutsideBuildUnit_dynamic() {
+    var bundle = createPackageBundle(
+        '''
+var x;
+var y = x; // Inferred type: dynamic
+''',
+        path: '/a.dart');
+    addBundle(bundle);
+    createLinker('''
+import 'a.dart';
+var z = y; // Inferred type: dynamic
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    expect(
+        library
+            .getContainedName('z')
+            .asTypeInferenceNode
+            .inferredType
+            .toString(),
+        'dynamic');
+  }
+
+  void test_inferredTypeFromOutsideBuildUnit_instanceField() {
+    var bundle = createPackageBundle(
+        '''
+class C {
+  var f = 0; // Inferred type: int
+}
+''',
+        path: '/a.dart');
+    addBundle(bundle);
+    createLinker('''
+import 'a.dart';
+var x = new C().f; // Inferred type: int
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    expect(
+        library
+            .getContainedName('x')
+            .asTypeInferenceNode
+            .inferredType
+            .toString(),
+        'int');
+  }
+
+  void test_inferredTypeFromOutsideBuildUnit_methodParamType_viaGeneric() {
+    var bundle = createPackageBundle(
+        '''
+class B {
+  T f<T>(T t) => t;
+}
+class C extends B {
+  f<T>(t) => t; // Inferred param type: T
+}
+''',
+        path: '/a.dart');
+    addBundle(bundle);
+    createLinker('''
+import 'a.dart';
+var x = new C().f(0); // Inferred type: int
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    expect(
+        library
+            .getContainedName('x')
+            .asTypeInferenceNode
+            .inferredType
+            .toString(),
+        'int');
+  }
+
+  void test_inferredType_methodReturnType_void() {
+    createLinker('''
+class B {
+  void f() {}
+}
+class C extends B {
+  f() {}
+}
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    library.libraryCycleForLink.ensureLinked();
+    ClassElementForLink_Class cls = library.getContainedName('C');
+    expect(cls.methods, hasLength(1));
+    expect(cls.methods[0].returnType.toString(), 'void');
+  }
+
+  void test_inferredTypeFromOutsideBuildUnit_methodParamType_viaInheritance() {
+    var bundle = createPackageBundle(
+        '''
+class B {
+  void f(int i) {}
+}
+class C extends B {
+  f(i) {} // Inferred param type: int
+}
+''',
+        path: '/a.dart');
+    addBundle(bundle);
+    createLinker('''
+import 'a.dart';
+class D extends C {
+  f(i) {} // Inferred param type: int
+}
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    library.libraryCycleForLink.ensureLinked();
+    ClassElementForLink_Class cls = library.getContainedName('D');
+    expect(cls.methods, hasLength(1));
+    var method = cls.methods[0];
+    expect(method.parameters, hasLength(1));
+    expect(method.parameters[0].type.toString(), 'int');
+  }
+
+  void test_inferredTypeFromOutsideBuildUnit_methodReturnType_viaCall() {
+    var bundle = createPackageBundle(
+        '''
+class B {
+  int f() => 0;
+}
+class C extends B {
+  f() => 1; // Inferred return type: int
+}
+''',
+        path: '/a.dart');
+    addBundle(bundle);
+    createLinker('''
+import 'a.dart';
+var x = new C().f(); // Inferred type: int
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    expect(
+        library
+            .getContainedName('x')
+            .asTypeInferenceNode
+            .inferredType
+            .toString(),
+        'int');
+  }
+
+  void test_inferredTypeFromOutsideBuildUnit_methodReturnType_viaInheritance() {
+    var bundle = createPackageBundle(
+        '''
+class B {
+  int f() => 0;
+}
+class C extends B {
+  f() => 1; // Inferred return type: int
+}
+''',
+        path: '/a.dart');
+    addBundle(bundle);
+    createLinker('''
+import 'a.dart';
+class D extends C {
+  f() => 2; //Inferred return type: int
+}
+''');
+    LibraryElementForLink library = linker.getLibrary(linkerInputs.testDartUri);
+    library.libraryCycleForLink.ensureLinked();
+    ClassElementForLink_Class cls = library.getContainedName('D');
+    expect(cls.methods, hasLength(1));
+    expect(cls.methods[0].returnType.toString(), 'int');
+  }
+
+  void test_inferredTypeFromOutsideBuildUnit_staticField() {
+    var bundle =
+        createPackageBundle('class C { static var f = 0; }', path: '/a.dart');
+    addBundle(bundle);
+    createLinker('import "a.dart"; var x = C.f;', path: '/b.dart');
+    expect(
+        linker
+            .getLibrary(linkerInputs.testDartUri)
+            .getContainedName('x')
+            .asTypeInferenceNode
+            .inferredType
+            .toString(),
+        'int');
+  }
+
+  void test_inferredTypeFromOutsideBuildUnit_topLevelVariable() {
+    var bundle = createPackageBundle('var a = 0;', path: '/a.dart');
+    addBundle(bundle);
+    createLinker('import "a.dart"; var b = a;', path: '/b.dart');
+    expect(
+        linker
+            .getLibrary(linkerInputs.testDartUri)
+            .getContainedName('b')
+            .asTypeInferenceNode
+            .inferredType
+            .toString(),
+        'int');
+  }
+
+  void test_libraryCycle_ignoresDependenciesOutsideBuildUnit() {
+    createLinker('import "dart:async";');
+    LibraryCycleForLink libraryCycle = testLibrary.libraryCycleForLink;
+    expect(libraryCycle.dependencies, isEmpty);
+    expect(libraryCycle.libraries, [testLibrary]);
+  }
+
+  void test_libraryCycle_linkEnsuresDependenciesLinked() {
+    addNamedSource('/a.dart', 'import "b.dart";');
+    addNamedSource('/b.dart', '');
+    addNamedSource('/c.dart', '');
+    createLinker('import "a.dart"; import "c.dart";');
+    LibraryElementForLink libA = getLibrary('file:///a.dart');
+    LibraryElementForLink libB = getLibrary('file:///b.dart');
+    LibraryElementForLink libC = getLibrary('file:///c.dart');
+    expect(libA.libraryCycleForLink.node.isEvaluated, isFalse);
+    expect(libB.libraryCycleForLink.node.isEvaluated, isFalse);
+    expect(libC.libraryCycleForLink.node.isEvaluated, isFalse);
+    libA.libraryCycleForLink.ensureLinked();
+    expect(libA.libraryCycleForLink.node.isEvaluated, isTrue);
+    expect(libB.libraryCycleForLink.node.isEvaluated, isTrue);
+    expect(libC.libraryCycleForLink.node.isEvaluated, isFalse);
+  }
+
+  void test_libraryCycle_nontrivial() {
+    addNamedSource('/a.dart', 'import "b.dart";');
+    addNamedSource('/b.dart', 'import "a.dart";');
+    createLinker('');
+    LibraryElementForLink libA = getLibrary('file:///a.dart');
+    LibraryElementForLink libB = getLibrary('file:///b.dart');
+    LibraryCycleForLink libraryCycle = libA.libraryCycleForLink;
+    expect(libB.libraryCycleForLink, same(libraryCycle));
+    expect(libraryCycle.dependencies, isEmpty);
+    expect(libraryCycle.libraries, unorderedEquals([libA, libB]));
+  }
+
+  void test_libraryCycle_nontrivial_dependencies() {
+    addNamedSource('/a.dart', '');
+    addNamedSource('/b.dart', '');
+    addNamedSource('/c.dart', 'import "a.dart"; import "d.dart";');
+    addNamedSource('/d.dart', 'import "b.dart"; import "c.dart";');
+    createLinker('');
+    LibraryElementForLink libA = getLibrary('file:///a.dart');
+    LibraryElementForLink libB = getLibrary('file:///b.dart');
+    LibraryElementForLink libC = getLibrary('file:///c.dart');
+    LibraryElementForLink libD = getLibrary('file:///d.dart');
+    LibraryCycleForLink libraryCycle = libC.libraryCycleForLink;
+    expect(libD.libraryCycleForLink, same(libraryCycle));
+    expect(libraryCycle.dependencies,
+        unorderedEquals([libA.libraryCycleForLink, libB.libraryCycleForLink]));
+    expect(libraryCycle.libraries, unorderedEquals([libC, libD]));
+  }
+
+  void test_libraryCycle_nontrivial_via_export() {
+    addNamedSource('/a.dart', 'export "b.dart";');
+    addNamedSource('/b.dart', 'export "a.dart";');
+    createLinker('');
+    LibraryElementForLink libA = getLibrary('file:///a.dart');
+    LibraryElementForLink libB = getLibrary('file:///b.dart');
+    LibraryCycleForLink libraryCycle = libA.libraryCycleForLink;
+    expect(libB.libraryCycleForLink, same(libraryCycle));
+    expect(libraryCycle.dependencies, isEmpty);
+    expect(libraryCycle.libraries, unorderedEquals([libA, libB]));
+  }
+
+  void test_libraryCycle_trivial() {
+    createLinker('');
+    LibraryCycleForLink libraryCycle = testLibrary.libraryCycleForLink;
+    expect(libraryCycle.dependencies, isEmpty);
+    expect(libraryCycle.libraries, [testLibrary]);
+  }
+
+  void test_libraryCycle_trivial_dependencies() {
+    addNamedSource('/a.dart', '');
+    addNamedSource('/b.dart', '');
+    createLinker('import "a.dart"; import "b.dart";');
+    LibraryElementForLink libA = getLibrary('file:///a.dart');
+    LibraryElementForLink libB = getLibrary('file:///b.dart');
+    LibraryCycleForLink libraryCycle = testLibrary.libraryCycleForLink;
+    expect(libraryCycle.dependencies,
+        unorderedEquals([libA.libraryCycleForLink, libB.libraryCycleForLink]));
+    expect(libraryCycle.libraries, [testLibrary]);
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/prelinker_test.dart b/pkg/analyzer/test/src/summary/prelinker_test.dart
index b4d4098..f2f1a82 100644
--- a/pkg/analyzer/test/src/summary/prelinker_test.dart
+++ b/pkg/analyzer/test/src/summary/prelinker_test.dart
@@ -49,7 +49,7 @@
 
   String resolveToAbsoluteUri(LibraryElement library, String relativeUri) {
     Source resolvedSource =
-        analysisContext.sourceFactory.resolveUri(library.source, relativeUri);
+        context.sourceFactory.resolveUri(library.source, relativeUri);
     if (resolvedSource == null) {
       fail('Failed to resolve relative uri "$relativeUri"');
     }
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
index 13c09c1..5e2bcd6 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
@@ -5,10 +5,15 @@
 library analyzer.test.src.summary.resynthesize_ast_test;
 
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/generated/engine.dart'
+    show AnalysisContext, AnalysisOptionsImpl;
+import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
+import 'package:analyzer/src/summary/link.dart';
 import 'package:analyzer/src/summary/prelink.dart';
 import 'package:analyzer/src/summary/resynthesize.dart';
 import 'package:analyzer/src/summary/summarize_ast.dart';
@@ -18,107 +23,531 @@
 import 'package:unittest/unittest.dart';
 
 import '../../reflective_tests.dart';
+import '../context/abstract_context.dart';
+import '../task/strong/inferred_type_test.dart';
 import 'resynthesize_test.dart';
+import 'summary_common.dart';
 
 main() {
   groupSep = ' | ';
   runReflectiveTests(ResynthesizeAstTest);
+  runReflectiveTests(AstInferredTypeTest);
 }
 
 @reflectiveTest
-class ResynthesizeAstTest extends ResynthesizeTest {
-  final Set<Source> serializedSources = new Set<Source>();
-  final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler();
-  final Map<Uri, UnlinkedUnitBuilder> uriToUnit = <Uri, UnlinkedUnitBuilder>{};
+class AstInferredTypeTest extends AbstractResynthesizeTest
+    with _AstResynthesizeTestMixin, InferredTypeMixin {
+  bool get checkPropagatedTypes {
+    // AST-based summaries do not yet handle propagated types.
+    // TODO(paulberry): fix this.
+    return false;
+  }
 
   @override
+  bool get skipBrokenAstInference => true;
+
+  @override
+  void addFile(String content, {String name: '/main.dart'}) {
+    addLibrarySource(name, content);
+  }
+
+  @override
+  CompilationUnitElement checkFile(String content) {
+    Source source = addSource('/main.dart', content);
+    SummaryResynthesizer resynthesizer = _encodeLibrary(source);
+    LibraryElementImpl resynthesized = _checkSource(resynthesizer, source);
+    for (Source otherSource in otherLibrarySources) {
+      _checkSource(resynthesizer, otherSource);
+    }
+    return resynthesized.definingCompilationUnit;
+  }
+
+  @override
+  void compareLocalVariableElementLists(ExecutableElement resynthesized,
+      ExecutableElement original, String desc) {
+    // We don't resynthesize local elements during link.
+    // So, we should not compare them.
+  }
+
+  @override
+  DartSdk createDartSdk() => AbstractContextTest.SHARED_STRONG_MOCK_SDK;
+
+  @override
+  AnalysisOptionsImpl createOptions() => new AnalysisOptionsImpl()
+    ..enableGenericMethods = true
+    ..strongMode = true;
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_async_allReturnsAreValues() {
+    super.test_blockBodiedLambdas_async_allReturnsAreValues();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_async_alReturnsAreFutures() {
+    super.test_blockBodiedLambdas_async_alReturnsAreFutures();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_async_mixOfValuesAndFutures() {
+    super.test_blockBodiedLambdas_async_mixOfValuesAndFutures();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_asyncStar() {
+    super.test_blockBodiedLambdas_asyncStar();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_basic_topLevel() {
+    super.test_blockBodiedLambdas_basic_topLevel();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_doesNotInferBottom_async() {
+    super.test_blockBodiedLambdas_doesNotInferBottom_async();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_doesNotInferBottom_asyncStar() {
+    super.test_blockBodiedLambdas_doesNotInferBottom_asyncStar();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_doesNotInferBottom_sync() {
+    super.test_blockBodiedLambdas_doesNotInferBottom_sync();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_doesNotInferBottom_syncStar() {
+    super.test_blockBodiedLambdas_doesNotInferBottom_syncStar();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_downwardsIncompatibleWithUpwardsInference() {
+    super.test_blockBodiedLambdas_downwardsIncompatibleWithUpwardsInference();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_LUB_topLevel() {
+    super.test_blockBodiedLambdas_LUB_topLevel();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_nestedLambdas() {
+    super.test_blockBodiedLambdas_nestedLambdas();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_noReturn() {
+    super.test_blockBodiedLambdas_noReturn();
+  }
+
+  @override
+  @failingTest
+  void test_blockBodiedLambdas_syncStar() {
+    super.test_blockBodiedLambdas_syncStar();
+  }
+
+  @override
+  @failingTest
+  void test_canInferAlsoFromStaticAndInstanceFieldsFlagOn() {
+    super.test_canInferAlsoFromStaticAndInstanceFieldsFlagOn();
+  }
+
+  @override
+  @failingTest
+  void test_downwardsInferenceAnnotations() {
+    super.test_downwardsInferenceAnnotations();
+  }
+
+  @override
+  @failingTest
+  void test_downwardsInferenceAsyncAwait() {
+    super.test_downwardsInferenceAsyncAwait();
+  }
+
+  @override
+  @failingTest
+  void test_downwardsInferenceForEach() {
+    super.test_downwardsInferenceForEach();
+  }
+
+  @override
+  @failingTest
+  void test_downwardsInferenceOnFunctionOfTUsingTheT() {
+    super.test_downwardsInferenceOnFunctionOfTUsingTheT();
+  }
+
+  @override
+  @failingTest
+  void test_downwardsInferenceOnGenericFunctionExpressions() {
+    super.test_downwardsInferenceOnGenericFunctionExpressions();
+  }
+
+  @override
+  @failingTest
+  void test_downwardsInferenceYieldYieldStar() {
+    super.test_downwardsInferenceYieldYieldStar();
+  }
+
+  @override
+  @failingTest
+  void test_genericMethods_inferJSBuiltin() {
+    super.test_genericMethods_inferJSBuiltin();
+  }
+
+  void test_infer_extractIndex_custom() {
+    var unit = checkFile('''
+class A {
+  String operator [](_) => null;
+}
+var a = new A();
+var b = a[0];
+  ''');
+    expect(unit.topLevelVariables[1].type.toString(), 'String');
+  }
+
+  void test_infer_extractIndex_fromList() {
+    var unit = checkFile('''
+var a = <int>[1, 2, 3];
+var b = a[0];
+  ''');
+    expect(unit.topLevelVariables[1].type.toString(), 'int');
+  }
+
+  void test_infer_extractIndex_fromMap() {
+    var unit = checkFile('''
+var a = <int, double>{};
+var b = a[0];
+  ''');
+    expect(unit.topLevelVariables[1].type.toString(), 'double');
+  }
+
+  void test_infer_extractProperty_getter() {
+    checkFile(r'''
+var a = 1.isEven;
+var b = 2.isNaN;
+var c = 3.foo;
+var d = foo.bar;
+  ''');
+  }
+
+  void test_infer_extractProperty_method() {
+    checkFile(r'''
+var a = 1.round;
+  ''');
+  }
+
+  void test_infer_invokeConstructor_factoryRedirected() {
+    checkFile(r'''
+class A {
+  factory A() = B;
+}
+class B implements A {}
+var a = new A();
+  ''');
+  }
+
+  void test_infer_invokeConstructor_named() {
+    checkFile(r'''
+class A {
+  A.aaa();
+}
+class B<K, V> {
+  B.bbb();
+}
+var a = new A.aaa();
+var b1 = new B.bbb();
+var b2 = new B<int, String>.bbb();
+var b3 = new B<List<int>, Map<List<int>, Set<String>>>.bbb();
+  ''');
+  }
+
+  void test_infer_invokeConstructor_named_importedWithPrefix() {
+    addFile(
+        r'''
+class A {
+  A.aaa();
+}
+class B<K, V> {
+  B.bbb();
+}
+''',
+        name: '/a.dart');
+    checkFile(r'''
+import 'a.dart' as p;
+var a = new p.A.aaa();
+var b1 = new p.B.bbb();
+var b2 = new p.B<int, String>.bbb();
+  ''');
+  }
+
+  void test_infer_invokeConstructor_unnamed() {
+    checkFile(r'''
+class A {
+  A();
+}
+class B<T> {
+  B();
+}
+var a = new A();
+var b1 = new B();
+var b2 = new B<int>();
+  ''');
+  }
+
+  void test_infer_invokeConstructor_unnamed_synthetic() {
+    checkFile(r'''
+class A {}
+class B<T> {}
+var a = new A();
+var b1 = new B();
+var b2 = new B<int>();
+  ''');
+  }
+
+  @override
+  @failingTest
+  void test_inferCorrectlyOnMultipleVariablesDeclaredTogether() {
+    super.test_inferCorrectlyOnMultipleVariablesDeclaredTogether();
+  }
+
+  @override
+  @failingTest
+  void test_inferenceInCyclesIsDeterministic() {
+    super.test_inferenceInCyclesIsDeterministic();
+  }
+
+  @override
+  @failingTest
+  void test_inferFromRhsOnlyIfItWontConflictWithOverriddenFields() {
+    super.test_inferFromRhsOnlyIfItWontConflictWithOverriddenFields();
+  }
+
+  @override
+  @failingTest
+  void test_inferTypesOnGenericInstantiations_4() {
+    super.test_inferTypesOnGenericInstantiations_4();
+  }
+
+  @override
+  @failingTest
+  void test_inferTypesOnGenericInstantiations_5() {
+    super.test_inferTypesOnGenericInstantiations_5();
+  }
+
+  @override
+  @failingTest
+  void test_inferTypesOnGenericInstantiationsInLibraryCycle() {
+    super.test_inferTypesOnGenericInstantiationsInLibraryCycle();
+  }
+
+  void test_invokeMethod_notGeneric_genericClass() {
+    var unit = checkFile(r'''
+class C<T> {
+  T m(int a, {String b, T c}) => null;
+}
+var v = new C<double>().m(1, b: 'bbb', c: 2.0);
+  ''');
+    expect(unit.topLevelVariables[0].type.toString(), 'double');
+  }
+
+  void test_invokeMethod_notGeneric_notGenericClass() {
+    var unit = checkFile(r'''
+class C {
+  int m(int a, {String b, int c}) => null;
+}
+var v = new C().m(1, b: 'bbb', c: 2.0);
+  ''');
+    expect(unit.topLevelVariables[0].type.toString(), 'int');
+  }
+
+  @override
+  @failingTest
+  void test_listLiteralsShouldNotInferBottom() {
+    super.test_listLiteralsShouldNotInferBottom();
+  }
+
+  @override
+  @failingTest
+  void test_mapLiteralsShouldNotInferBottom() {
+    super.test_mapLiteralsShouldNotInferBottom();
+  }
+
+  @override
+  @failingTest
+  void test_nullLiteralShouldNotInferAsBottom() {
+    super.test_nullLiteralShouldNotInferAsBottom();
+  }
+
+  LibraryElementImpl _checkSource(
+      SummaryResynthesizer resynthesizer, Source source) {
+    LibraryElementImpl resynthesized =
+        resynthesizer.getLibraryElement(source.uri.toString());
+    LibraryElementImpl original = context.computeLibraryElement(source);
+    checkLibraryElements(original, resynthesized);
+    return resynthesized;
+  }
+}
+
+@reflectiveTest
+class ResynthesizeAstTest extends ResynthesizeTest
+    with _AstResynthesizeTestMixin {
+  @override
   bool get checkPropagatedTypes => false;
 
   @override
   void checkLibrary(String text,
       {bool allowErrors: false, bool dumpSummaries: false}) {
     Source source = addTestSource(text);
-    SummaryResynthesizer resynthesizer = _encodeLibrary(source);
-    LibraryElementImpl resynthesized =
-        resynthesizer.getLibraryElement(source.uri.toString());
+    LibraryElementImpl resynthesized = _encodeDecodeLibraryElement(source);
     LibraryElementImpl original = context.computeLibraryElement(source);
     checkLibraryElements(original, resynthesized);
   }
 
   @override
+  DartSdk createDartSdk() => AbstractContextTest.SHARED_MOCK_SDK;
+
+  @override
   TestSummaryResynthesizer encodeDecodeLibrarySource(Source source) {
     return _encodeLibrary(source);
   }
 
   @override
-  void test_const_invokeConstructor_named() {
-    // TODO(scheglov) fix me
+  @failingTest
+  void test_constructor_initializers_field_notConst() {
+    super.test_constructor_initializers_field_notConst();
   }
 
   @override
-  void test_constructor_withCycles_const() {
-    // TODO(scheglov) fix me
-  }
-
-  @override
+  @failingTest
   void test_inferred_function_type_in_generic_class_constructor() {
-    // TODO(scheglov) fix me
+    super.test_inferred_function_type_in_generic_class_constructor();
   }
 
   @override
+  @failingTest
   void test_metadata_constructor_call_named() {
-    // TODO(scheglov) fix me
+    super.test_metadata_constructor_call_named();
   }
 
   @override
+  @failingTest
   void test_metadata_constructor_call_named_prefixed() {
-    // TODO(scheglov) fix me
+    super.test_metadata_constructor_call_named_prefixed();
   }
 
   @override
+  @failingTest
   void test_metadata_constructor_call_unnamed() {
-    // TODO(scheglov) fix me
+    super.test_metadata_constructor_call_unnamed();
   }
 
   @override
+  @failingTest
   void test_metadata_constructor_call_with_args() {
-    // TODO(scheglov) fix me
+    super.test_metadata_constructor_call_with_args();
   }
 
   @override
+  @failingTest
   void test_type_reference_to_import_part_in_subdir() {
-    // TODO(scheglov) fix me
+    super.test_type_reference_to_import_part_in_subdir();
   }
+}
 
-  @override
-  void test_unused_type_parameter() {
-    // TODO(paulberry): fix.
+/**
+ * Abstract mixin for serializing ASTs and resynthesizing elements from it.
+ */
+abstract class _AstResynthesizeTestMixin {
+  final Set<Source> serializedSources = new Set<Source>();
+  final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler();
+  final Map<String, UnlinkedUnitBuilder> uriToUnit =
+      <String, UnlinkedUnitBuilder>{};
+
+  AnalysisContext get context;
+
+  LibraryElementImpl _encodeDecodeLibraryElement(Source source) {
+    SummaryResynthesizer resynthesizer = _encodeLibrary(source);
+    return resynthesizer.getLibraryElement(source.uri.toString());
   }
 
   TestSummaryResynthesizer _encodeLibrary(Source source) {
-    addLibrary('dart:core');
     _serializeLibrary(source);
 
     PackageBundle bundle =
         new PackageBundle.fromBuffer(bundleAssembler.assemble().toBuffer());
 
     Map<String, UnlinkedUnit> unlinkedSummaries = <String, UnlinkedUnit>{};
-    Map<String, LinkedLibrary> linkedSummaries = <String, LinkedLibrary>{};
     for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) {
       String uri = bundle.unlinkedUnitUris[i];
       unlinkedSummaries[uri] = bundle.unlinkedUnits[i];
     }
-    for (int i = 0; i < bundle.linkedLibraryUris.length; i++) {
-      String uri = bundle.linkedLibraryUris[i];
-      linkedSummaries[uri] = bundle.linkedLibraries[i];
+
+    LinkedLibrary getDependency(String absoluteUri) {
+      Map<String, LinkedLibrary> sdkLibraries =
+          SerializedMockSdk.instance.uriToLinkedLibrary;
+      LinkedLibrary linkedLibrary = sdkLibraries[absoluteUri];
+      if (linkedLibrary == null) {
+        fail('Linker unexpectedly requested LinkedLibrary for "$absoluteUri".'
+            '  Libraries available: ${sdkLibraries.keys}');
+      }
+      return linkedLibrary;
     }
 
+    UnlinkedUnit getUnit(String absoluteUri) {
+      UnlinkedUnit unit = uriToUnit[absoluteUri] ??
+          SerializedMockSdk.instance.uriToUnlinkedUnit[absoluteUri];
+      if (unit == null) {
+        fail('Linker unexpectedly requested unit for "$absoluteUri".');
+      }
+      return unit;
+    }
+
+    Set<String> nonSdkLibraryUris = context.sources
+        .where((Source source) =>
+            !source.isInSystemLibrary &&
+            context.computeKindOf(source) == SourceKind.LIBRARY)
+        .map((Source source) => source.uri.toString())
+        .toSet();
+
+    Map<String, LinkedLibrary> linkedSummaries = link(nonSdkLibraryUris,
+        getDependency, getUnit, context.analysisOptions.strongMode);
+
     return new TestSummaryResynthesizer(
-        null, context, unlinkedSummaries, linkedSummaries);
+        null,
+        context,
+        new Map<String, UnlinkedUnit>()
+          ..addAll(SerializedMockSdk.instance.uriToUnlinkedUnit)
+          ..addAll(unlinkedSummaries),
+        new Map<String, LinkedLibrary>()
+          ..addAll(SerializedMockSdk.instance.uriToLinkedLibrary)
+          ..addAll(linkedSummaries));
   }
 
-  UnlinkedUnitBuilder _getUnlinkedUnit(Source source) {
-    return uriToUnit.putIfAbsent(source.uri, () {
+  UnlinkedUnit _getUnlinkedUnit(Source source) {
+    String uriStr = source.uri.toString();
+    {
+      UnlinkedUnit unlinkedUnitInSdk =
+          SerializedMockSdk.instance.uriToUnlinkedUnit[uriStr];
+      if (unlinkedUnitInSdk != null) {
+        return unlinkedUnitInSdk;
+      }
+    }
+    return uriToUnit.putIfAbsent(uriStr, () {
       CompilationUnit unit = context.computeResult(source, PARSED_UNIT);
       UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
       bundleAssembler.addUnlinkedUnit(source, unlinkedUnit);
@@ -127,6 +556,9 @@
   }
 
   void _serializeLibrary(Source librarySource) {
+    if (librarySource.isInSystemLibrary) {
+      return;
+    }
     if (!serializedSources.add(librarySource)) {
       return;
     }
@@ -141,7 +573,7 @@
       return resolvedSource;
     }
 
-    UnlinkedUnitBuilder getPart(String relativeUri) {
+    UnlinkedUnit getPart(String relativeUri) {
       return _getUnlinkedUnit(resolveRelativeUri(relativeUri));
     }
 
@@ -149,11 +581,9 @@
       return getPart(relativeUri).publicNamespace;
     }
 
-    UnlinkedUnitBuilder definingUnit = _getUnlinkedUnit(librarySource);
+    UnlinkedUnit definingUnit = _getUnlinkedUnit(librarySource);
     LinkedLibraryBuilder linkedLibrary =
         prelink(definingUnit, getPart, getImport);
-    bundleAssembler.addLinkedLibrary(
-        librarySource.uri.toString(), linkedLibrary);
     linkedLibrary.dependencies.skip(1).forEach((LinkedDependency d) {
       _serializeLibrary(resolveRelativeUri(d.uri));
     });
diff --git a/pkg/analyzer/test/src/summary/resynthesize_strong_test.dart b/pkg/analyzer/test/src/summary/resynthesize_strong_test.dart
index c52b604..d337de7 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_strong_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_strong_test.dart
@@ -19,6 +19,7 @@
 
 @reflectiveTest
 class ResynthesizeStrongTest extends ResynthesizeElementTest {
+  @override
   DartSdk createDartSdk() => AbstractContextTest.SHARED_STRONG_MOCK_SDK;
 
   @override
diff --git a/pkg/analyzer/test/src/summary/resynthesize_test.dart b/pkg/analyzer/test/src/summary/resynthesize_test.dart
index aa938d7..5b4f8ed 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_test.dart
@@ -38,125 +38,33 @@
   runReflectiveTests(ResynthesizeElementTest);
 }
 
-@reflectiveTest
-class ResynthesizeElementTest extends ResynthesizeTest {
-  @override
-  void checkLibrary(String text,
-      {bool allowErrors: false, bool dumpSummaries: false}) {
-    Source source = addTestSource(text);
-    LibraryElementImpl original = context.computeLibraryElement(source);
-    LibraryElementImpl resynthesized = resynthesizeLibraryElement(
-        encodeLibrary(original,
-            allowErrors: allowErrors, dumpSummaries: dumpSummaries),
-        source.uri.toString(),
-        original);
-    checkLibraryElements(original, resynthesized);
-  }
-
-  @override
-  SummaryResynthesizer encodeDecodeLibrarySource(Source librarySource) {
-    LibraryElement libraryElement =
-        context.computeLibraryElement(librarySource);
-    return encodeLibrary(libraryElement);
-  }
-
-  /**
-   * Serialize the given [library] into a summary.  Then create a
-   * [TestSummaryResynthesizer] which can deserialize it, along with any
-   * references it makes to `dart:core`.
-   *
-   * Errors will lead to a test failure unless [allowErrors] is `true`.
-   */
-  TestSummaryResynthesizer encodeLibrary(LibraryElementImpl library,
-      {bool allowErrors: false, bool dumpSummaries: false}) {
-    if (!allowErrors) {
-      assertNoErrors(library.source);
-    }
-    addLibrary('dart:core');
-    addLibrary('dart:async');
-    addLibrary('dart:math');
-    return encodeLibraryElement(library, dumpSummaries: dumpSummaries);
-  }
-
-  /**
-   * Convert the library element [library] into a summary, and then create a
-   * [TestSummaryResynthesizer] which can deserialize it.
-   *
-   * Caller is responsible for checking the library for errors, and adding any
-   * dependent libraries using [addLibrary].
-   */
-  TestSummaryResynthesizer encodeLibraryElement(LibraryElementImpl library,
-      {bool dumpSummaries: false}) {
-    Map<String, UnlinkedUnit> unlinkedSummaries = <String, UnlinkedUnit>{};
-    LinkedLibrary getLinkedSummaryFor(LibraryElement lib) {
-      LibrarySerializationResult serialized = serializeLibrary(
-          lib, context.typeProvider, context.analysisOptions.strongMode);
-      for (int i = 0; i < serialized.unlinkedUnits.length; i++) {
-        unlinkedSummaries[serialized.unitUris[i]] =
-            new UnlinkedUnit.fromBuffer(serialized.unlinkedUnits[i].toBuffer());
-      }
-      return new LinkedLibrary.fromBuffer(serialized.linked.toBuffer());
-    }
-    Map<String, LinkedLibrary> linkedSummaries = <String, LinkedLibrary>{
-      library.source.uri.toString(): getLinkedSummaryFor(library)
-    };
-    for (Source source in otherLibrarySources) {
-      LibraryElement original = context.computeLibraryElement(source);
-      String uri = source.uri.toString();
-      linkedSummaries[uri] = getLinkedSummaryFor(original);
-    }
-    if (dumpSummaries) {
-      unlinkedSummaries.forEach((String path, UnlinkedUnit unit) {
-        print('Unlinked $path: ${JSON.encode(canonicalize(unit))}');
-      });
-      linkedSummaries.forEach((String path, LinkedLibrary lib) {
-        print('Linked $path: ${JSON.encode(canonicalize(lib))}');
-      });
-    }
-    return new TestSummaryResynthesizer(
-        null, context, unlinkedSummaries, linkedSummaries);
-  }
-
-  /**
-   * Resynthesize the library element associated with [uri] using
-   * [resynthesizer], and verify that it only had to consult one summary in
-   * order to do so.  [original] is consulted merely to verify that no
-   * unnecessary resynthesis work was performed.
-   */
-  LibraryElementImpl resynthesizeLibraryElement(
-      TestSummaryResynthesizer resynthesizer,
-      String uri,
-      LibraryElement original) {
-    LibraryElementImpl resynthesized = resynthesizer.getLibraryElement(uri);
-    checkMinimalResynthesisWork(resynthesizer, original);
-    return resynthesized;
-  }
-
-  test_core() {
-    addLibrary('dart:async');
-    addLibrary('dart:math');
-    String uri = 'dart:core';
-    LibraryElementImpl original =
-        context.computeLibraryElement(context.sourceFactory.forUri(uri));
-    LibraryElementImpl resynthesized = resynthesizeLibraryElement(
-        encodeLibraryElement(original), uri, original);
-    checkLibraryElements(original, resynthesized);
-  }
-}
-
-@reflectiveTest
-abstract class ResynthesizeTest extends AbstractSingleUnitTest {
+/**
+ * Abstract base class for resynthesizing and comparing elements.
+ */
+abstract class AbstractResynthesizeTest extends AbstractSingleUnitTest {
   Set<Source> otherLibrarySources = new Set<Source>();
   bool constantInitializersAreInvalid = false;
 
   bool get checkPropagatedTypes => true;
 
+  /**
+   * Derived classes can override this getter to return `true` in order to
+   * cause certain checks to be skipped if they are known to fail with
+   * AST-based type inference.
+   *
+   * TODO(paulberry): remove this flag once AST-based type inference is fully
+   * working.
+   */
+  bool get skipBrokenAstInference => false;
+
   void addLibrary(String uri) {
     otherLibrarySources.add(context.sourceFactory.forUri(uri));
   }
 
-  void addLibrarySource(String filePath, String contents) {
-    otherLibrarySources.add(addSource(filePath, contents));
+  Source addLibrarySource(String filePath, String contents) {
+    Source source = addSource(filePath, contents);
+    otherLibrarySources.add(source);
+    return source;
   }
 
   void assertNoErrors(Source source) {
@@ -189,9 +97,6 @@
     }
   }
 
-  void checkLibrary(String text,
-      {bool allowErrors: false, bool dumpSummaries: false});
-
   void checkLibraryElements(
       LibraryElementImpl original, LibraryElementImpl resynthesized) {
     compareElements(resynthesized, original, '(library)');
@@ -818,13 +723,7 @@
       }
     }
     if (original is! Member) {
-      List<LocalVariableElement> rVariables = resynthesized.localVariables;
-      List<LocalVariableElement> oVariables = original.localVariables;
-      expect(rVariables, hasLength(oVariables.length));
-      for (int i = 0; i < oVariables.length; i++) {
-        compareVariableElements(rVariables[i], oVariables[i],
-            '$desc local variable ${oVariables[i].name}');
-      }
+      compareLocalVariableElementLists(resynthesized, original, desc);
     }
   }
 
@@ -903,6 +802,17 @@
     compareElements(resynthesized, original, desc);
   }
 
+  void compareLocalVariableElementLists(ExecutableElement resynthesized,
+      ExecutableElement original, String desc) {
+    List<LocalVariableElement> rVariables = resynthesized.localVariables;
+    List<LocalVariableElement> oVariables = original.localVariables;
+    expect(rVariables, hasLength(oVariables.length));
+    for (int i = 0; i < oVariables.length; i++) {
+      compareVariableElements(rVariables[i], oVariables[i],
+          '$desc local variable ${oVariables[i].name}');
+    }
+  }
+
   void compareMetadata(List<ElementAnnotation> resynthesized,
       List<ElementAnnotation> original, String desc) {
     expect(resynthesized, hasLength(original.length), reason: desc);
@@ -1159,8 +1069,10 @@
     VariableElementImpl resynthesizedActual =
         getActualElement(resynthesized, desc);
     VariableElementImpl originalActual = getActualElement(original, desc);
-    compareFunctionElements(resynthesizedActual.initializer,
-        originalActual.initializer, '$desc initializer');
+    if (!skipBrokenAstInference) {
+      compareFunctionElements(resynthesizedActual.initializer,
+          originalActual.initializer, '$desc initializer');
+    }
     if (originalActual is ConstVariableElement) {
       Element oEnclosing = original.enclosingElement;
       if (oEnclosing is ClassElement && oEnclosing.isEnum) {
@@ -1189,12 +1101,6 @@
       new AnalysisOptionsImpl()..enableGenericMethods = true;
 
   /**
-   * Return a [SummaryResynthesizer] to resynthesize the library with the
-   * given [librarySource].
-   */
-  SummaryResynthesizer encodeDecodeLibrarySource(Source librarySource);
-
-  /**
    * Serialize the given [library] into a summary.  Then create a
    * [TestSummaryResynthesizer] which can deserialize it, along with any
    * references it makes to `dart:core`.
@@ -1251,10 +1157,6 @@
         null, context, unlinkedSummaries, linkedSummaries);
   }
 
-  fail_library_hasExtUri() {
-    checkLibrary('import "dart-ext:doesNotExist.dart";');
-  }
-
   ElementImpl getActualElement(Element element, String desc) {
     if (element == null) {
       return null;
@@ -1300,6 +1202,134 @@
     prepareAnalysisContext(createOptions());
   }
 
+  void _assertUnresolvedIdentifier(Expression initializer, String desc) {
+    expect(initializer, new isInstanceOf<SimpleIdentifier>(), reason: desc);
+    SimpleIdentifier identifier = initializer;
+    expect(identifier.staticElement, isNull, reason: desc);
+  }
+}
+
+@reflectiveTest
+class ResynthesizeElementTest extends ResynthesizeTest {
+  @override
+  void checkLibrary(String text,
+      {bool allowErrors: false, bool dumpSummaries: false}) {
+    Source source = addTestSource(text);
+    LibraryElementImpl original = context.computeLibraryElement(source);
+    LibraryElementImpl resynthesized = resynthesizeLibraryElement(
+        encodeLibrary(original,
+            allowErrors: allowErrors, dumpSummaries: dumpSummaries),
+        source.uri.toString(),
+        original);
+    checkLibraryElements(original, resynthesized);
+  }
+
+  @override
+  SummaryResynthesizer encodeDecodeLibrarySource(Source librarySource) {
+    LibraryElement libraryElement =
+        context.computeLibraryElement(librarySource);
+    return encodeLibrary(libraryElement);
+  }
+
+  /**
+   * Serialize the given [library] into a summary.  Then create a
+   * [TestSummaryResynthesizer] which can deserialize it, along with any
+   * references it makes to `dart:core`.
+   *
+   * Errors will lead to a test failure unless [allowErrors] is `true`.
+   */
+  TestSummaryResynthesizer encodeLibrary(LibraryElementImpl library,
+      {bool allowErrors: false, bool dumpSummaries: false}) {
+    if (!allowErrors) {
+      assertNoErrors(library.source);
+    }
+    addLibrary('dart:core');
+    addLibrary('dart:async');
+    addLibrary('dart:math');
+    return encodeLibraryElement(library, dumpSummaries: dumpSummaries);
+  }
+
+  /**
+   * Convert the library element [library] into a summary, and then create a
+   * [TestSummaryResynthesizer] which can deserialize it.
+   *
+   * Caller is responsible for checking the library for errors, and adding any
+   * dependent libraries using [addLibrary].
+   */
+  TestSummaryResynthesizer encodeLibraryElement(LibraryElementImpl library,
+      {bool dumpSummaries: false}) {
+    Map<String, UnlinkedUnit> unlinkedSummaries = <String, UnlinkedUnit>{};
+    LinkedLibrary getLinkedSummaryFor(LibraryElement lib) {
+      LibrarySerializationResult serialized = serializeLibrary(
+          lib, context.typeProvider, context.analysisOptions.strongMode);
+      for (int i = 0; i < serialized.unlinkedUnits.length; i++) {
+        unlinkedSummaries[serialized.unitUris[i]] =
+            new UnlinkedUnit.fromBuffer(serialized.unlinkedUnits[i].toBuffer());
+      }
+      return new LinkedLibrary.fromBuffer(serialized.linked.toBuffer());
+    }
+    Map<String, LinkedLibrary> linkedSummaries = <String, LinkedLibrary>{
+      library.source.uri.toString(): getLinkedSummaryFor(library)
+    };
+    for (Source source in otherLibrarySources) {
+      LibraryElement original = context.computeLibraryElement(source);
+      String uri = source.uri.toString();
+      linkedSummaries[uri] = getLinkedSummaryFor(original);
+    }
+    if (dumpSummaries) {
+      unlinkedSummaries.forEach((String path, UnlinkedUnit unit) {
+        print('Unlinked $path: ${JSON.encode(canonicalize(unit))}');
+      });
+      linkedSummaries.forEach((String path, LinkedLibrary lib) {
+        print('Linked $path: ${JSON.encode(canonicalize(lib))}');
+      });
+    }
+    return new TestSummaryResynthesizer(
+        null, context, unlinkedSummaries, linkedSummaries);
+  }
+
+  /**
+   * Resynthesize the library element associated with [uri] using
+   * [resynthesizer], and verify that it only had to consult one summary in
+   * order to do so.  [original] is consulted merely to verify that no
+   * unnecessary resynthesis work was performed.
+   */
+  LibraryElementImpl resynthesizeLibraryElement(
+      TestSummaryResynthesizer resynthesizer,
+      String uri,
+      LibraryElement original) {
+    LibraryElementImpl resynthesized = resynthesizer.getLibraryElement(uri);
+    checkMinimalResynthesisWork(resynthesizer, original);
+    return resynthesized;
+  }
+
+  test_core() {
+    addLibrary('dart:async');
+    addLibrary('dart:math');
+    String uri = 'dart:core';
+    LibraryElementImpl original =
+        context.computeLibraryElement(context.sourceFactory.forUri(uri));
+    LibraryElementImpl resynthesized = resynthesizeLibraryElement(
+        encodeLibraryElement(original), uri, original);
+    checkLibraryElements(original, resynthesized);
+  }
+}
+
+@reflectiveTest
+abstract class ResynthesizeTest extends AbstractResynthesizeTest {
+  void checkLibrary(String text,
+      {bool allowErrors: false, bool dumpSummaries: false});
+
+  /**
+   * Return a [SummaryResynthesizer] to resynthesize the library with the
+   * given [librarySource].
+   */
+  SummaryResynthesizer encodeDecodeLibrarySource(Source librarySource);
+
+  fail_library_hasExtUri() {
+    checkLibrary('import "dart-ext:doesNotExist.dart";');
+  }
+
   test_class_abstract() {
     checkLibrary('abstract class C {}');
   }
@@ -3005,8 +3035,9 @@
 
   test_getElement_constructor_named() {
     String text = 'class C { C.named(); }';
+    Source source = addLibrarySource('/test.dart', text);
     ConstructorElement original = context
-        .computeLibraryElement(addTestSource(text))
+        .computeLibraryElement(source)
         .getType('C')
         .getNamedConstructor('named');
     expect(original, isNotNull);
@@ -3016,10 +3047,9 @@
 
   test_getElement_constructor_unnamed() {
     String text = 'class C { C(); }';
-    ConstructorElement original = context
-        .computeLibraryElement(addTestSource(text))
-        .getType('C')
-        .unnamedConstructor;
+    Source source = addLibrarySource('/test.dart', text);
+    ConstructorElement original =
+        context.computeLibraryElement(source).getType('C').unnamedConstructor;
     expect(original, isNotNull);
     ConstructorElement resynthesized = validateGetElement(text, original);
     compareConstructorElements(resynthesized, original, 'C.constructor');
@@ -3027,10 +3057,9 @@
 
   test_getElement_field() {
     String text = 'class C { var f; }';
-    FieldElement original = context
-        .computeLibraryElement(addTestSource(text))
-        .getType('C')
-        .getField('f');
+    Source source = addLibrarySource('/test.dart', text);
+    FieldElement original =
+        context.computeLibraryElement(source).getType('C').getField('f');
     expect(original, isNotNull);
     FieldElement resynthesized = validateGetElement(text, original);
     compareFieldElements(resynthesized, original, 'C.field f');
@@ -3038,10 +3067,9 @@
 
   test_getElement_getter() {
     String text = 'class C { get f => null; }';
-    PropertyAccessorElement original = context
-        .computeLibraryElement(addTestSource(text))
-        .getType('C')
-        .getGetter('f');
+    Source source = addLibrarySource('/test.dart', text);
+    PropertyAccessorElement original =
+        context.computeLibraryElement(source).getType('C').getGetter('f');
     expect(original, isNotNull);
     PropertyAccessorElement resynthesized = validateGetElement(text, original);
     comparePropertyAccessorElements(resynthesized, original, 'C.getter f');
@@ -3049,10 +3077,9 @@
 
   test_getElement_method() {
     String text = 'class C { f() {} }';
-    MethodElement original = context
-        .computeLibraryElement(addTestSource(text))
-        .getType('C')
-        .getMethod('f');
+    Source source = addLibrarySource('/test.dart', text);
+    MethodElement original =
+        context.computeLibraryElement(source).getType('C').getMethod('f');
     expect(original, isNotNull);
     MethodElement resynthesized = validateGetElement(text, original);
     compareMethodElements(resynthesized, original, 'C.method f');
@@ -3060,10 +3087,9 @@
 
   test_getElement_operator() {
     String text = 'class C { operator+(x) => null; }';
-    MethodElement original = context
-        .computeLibraryElement(addTestSource(text))
-        .getType('C')
-        .getMethod('+');
+    Source source = addLibrarySource('/test.dart', text);
+    MethodElement original =
+        context.computeLibraryElement(source).getType('C').getMethod('+');
     expect(original, isNotNull);
     MethodElement resynthesized = validateGetElement(text, original);
     compareMethodElements(resynthesized, original, 'C.operator+');
@@ -3071,10 +3097,9 @@
 
   test_getElement_setter() {
     String text = 'class C { void set f(value) {} }';
-    PropertyAccessorElement original = context
-        .computeLibraryElement(addTestSource(text))
-        .getType('C')
-        .getSetter('f');
+    Source source = addLibrarySource('/test.dart', text);
+    PropertyAccessorElement original =
+        context.computeLibraryElement(source).getType('C').getSetter('f');
     expect(original, isNotNull);
     PropertyAccessorElement resynthesized = validateGetElement(text, original);
     comparePropertyAccessorElements(resynthesized, original, 'C.setter f');
@@ -3082,7 +3107,7 @@
 
   test_getElement_unit() {
     String text = 'class C { f() {} }';
-    Source source = addTestSource(text);
+    Source source = addLibrarySource('/test.dart', text);
     CompilationUnitElement original =
         context.computeLibraryElement(source).definingCompilationUnit;
     expect(original, isNotNull);
@@ -3142,7 +3167,11 @@
 
   test_import_show() {
     addLibrary('dart:async');
-    checkLibrary('import "dart:async" show Future, Stream; Future f;');
+    checkLibrary('''
+import "dart:async" show Future, Stream;
+Future f;
+Stream s;
+''');
   }
 
   test_imports() {
@@ -4252,12 +4281,6 @@
     expect(result.location, location);
     return result;
   }
-
-  void _assertUnresolvedIdentifier(Expression initializer, String desc) {
-    expect(initializer, new isInstanceOf<SimpleIdentifier>(), reason: desc);
-    SimpleIdentifier identifier = initializer;
-    expect(identifier.staticElement, isNull, reason: desc);
-  }
 }
 
 class TestSummaryResynthesizer extends SummaryResynthesizer {
diff --git a/pkg/analyzer/test/src/summary/summarize_ast_strong_test.dart b/pkg/analyzer/test/src/summary/summarize_ast_strong_test.dart
index 1858f8f..13f10ce 100644
--- a/pkg/analyzer/test/src/summary/summarize_ast_strong_test.dart
+++ b/pkg/analyzer/test/src/summary/summarize_ast_strong_test.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-library analyzer.test.src.summary.summarize_ast_test;
+library analyzer.test.src.summary.summarize_ast_strong_test;
 
 import 'package:unittest/unittest.dart';
 
@@ -23,132 +23,152 @@
   bool get strongMode => true;
 
   @override
+  @failingTest
   test_bottom_reference_shared() {
-    // TODO(paulberry): fix.
+    super.test_bottom_reference_shared();
   }
 
   @override
+  @failingTest
   test_closure_executable_with_imported_return_type() {
-    // TODO(paulberry): fix.
+    super.test_closure_executable_with_imported_return_type();
   }
 
   @override
+  @failingTest
   test_closure_executable_with_return_type_from_closure() {
-    // TODO(paulberry): fix.
+    super.test_closure_executable_with_return_type_from_closure();
   }
 
   @override
+  @failingTest
   test_closure_executable_with_unimported_return_type() {
-    // TODO(paulberry): fix.
+    super.test_closure_executable_with_unimported_return_type();
   }
 
   @override
+  @failingTest
   test_field_propagated_type_final_immediate() {
-    // TODO(paulberry): fix.
+    super.test_field_propagated_type_final_immediate();
   }
 
   @override
+  @failingTest
   test_fully_linked_references_follow_other_references() {
-    // TODO(paulberry): fix.
+    super.test_fully_linked_references_follow_other_references();
   }
 
   @override
+  @failingTest
   test_implicit_dependencies_follow_other_dependencies() {
-    // TODO(paulberry): fix.
+    super.test_implicit_dependencies_follow_other_dependencies();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_bottom_return_type() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_bottom_return_type();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_imported_return_type() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_imported_return_type();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_return_type_from_closure() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_return_type_from_closure();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_return_type_from_closure_field() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_return_type_from_closure_field();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_return_type_from_closure_local() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_return_type_from_closure_local();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_unimported_return_type() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_unimported_return_type();
   }
 
   @override
+  @failingTest
   test_linked_reference_reuse() {
-    // TODO(paulberry): fix.
+    super.test_linked_reference_reuse();
   }
 
   @override
+  @failingTest
   test_linked_type_dependency_reuse() {
-    // TODO(paulberry): fix.
+    super.test_linked_type_dependency_reuse();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_genericClosure() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_genericClosure();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_genericClosure_inGenericFunction() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_genericClosure_inGenericFunction();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_inGenericClass() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_inGenericClass();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_inGenericFunction() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_inGenericFunction();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_noArguments() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_noArguments();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_withArguments() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_withArguments();
   }
 
   @override
+  @failingTest
   test_unused_type_parameter() {
-    // TODO(paulberry): fix.
+    super.test_unused_type_parameter();
   }
 
   @override
-  test_variable_inferred_type_implicit_initialized() {
-    // TODO(paulberry): fix.
-  }
-
-  @override
+  @failingTest
   test_variable_propagated_type_final_immediate() {
-    // TODO(paulberry): fix.
+    super.test_variable_propagated_type_final_immediate();
   }
 
   @override
+  @failingTest
   test_variable_propagated_type_new_reference() {
-    // TODO(paulberry): fix.
+    super.test_variable_propagated_type_new_reference();
   }
 
   @override
+  @failingTest
   test_variable_propagated_type_omit_dynamic() {
-    // TODO(paulberry): fix.
+    super.test_variable_propagated_type_omit_dynamic();
   }
 }
diff --git a/pkg/analyzer/test/src/summary/summarize_ast_test.dart b/pkg/analyzer/test/src/summary/summarize_ast_test.dart
index a1690c5..60b30a8 100644
--- a/pkg/analyzer/test/src/summary/summarize_ast_test.dart
+++ b/pkg/analyzer/test/src/summary/summarize_ast_test.dart
@@ -11,9 +11,12 @@
 import 'package:analyzer/src/dart/scanner/scanner.dart';
 import 'package:analyzer/src/generated/error.dart';
 import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/link.dart';
 import 'package:analyzer/src/summary/summarize_ast.dart';
+import 'package:analyzer/src/summary/summarize_elements.dart';
 import 'package:unittest/unittest.dart';
 
 import '../../reflective_tests.dart';
@@ -30,123 +33,147 @@
   bool get strongMode => false;
 
   @override
+  @failingTest
   test_bottom_reference_shared() {
-    // TODO(paulberry): fix.
+    super.test_bottom_reference_shared();
   }
 
   @override
+  @failingTest
   test_closure_executable_with_bottom_return_type() {
-    // TODO(paulberry): fix.
+    super.test_closure_executable_with_bottom_return_type();
   }
 
   @override
+  @failingTest
   test_closure_executable_with_imported_return_type() {
-    // TODO(paulberry): fix.
+    super.test_closure_executable_with_imported_return_type();
   }
 
   @override
+  @failingTest
   test_closure_executable_with_return_type_from_closure() {
-    // TODO(paulberry): fix.
+    super.test_closure_executable_with_return_type_from_closure();
   }
 
   @override
+  @failingTest
   test_closure_executable_with_unimported_return_type() {
-    // TODO(paulberry): fix.
+    super.test_closure_executable_with_unimported_return_type();
   }
 
   @override
+  @failingTest
   test_field_propagated_type_final_immediate() {
-    // TODO(paulberry): fix.
+    super.test_field_propagated_type_final_immediate();
   }
 
   @override
+  @failingTest
   test_fully_linked_references_follow_other_references() {
-    // TODO(paulberry): fix.
+    super.test_fully_linked_references_follow_other_references();
   }
 
   @override
+  @failingTest
   test_implicit_dependencies_follow_other_dependencies() {
-    // TODO(paulberry): fix.
+    super.test_implicit_dependencies_follow_other_dependencies();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_bottom_return_type() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_bottom_return_type();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_imported_return_type() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_imported_return_type();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_return_type_from_closure() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_return_type_from_closure();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_return_type_from_closure_field() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_return_type_from_closure_field();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_return_type_from_closure_local() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_return_type_from_closure_local();
   }
 
   @override
+  @failingTest
   test_initializer_executable_with_unimported_return_type() {
-    // TODO(paulberry): fix.
+    super.test_initializer_executable_with_unimported_return_type();
   }
 
   @override
+  @failingTest
   test_linked_reference_reuse() {
-    // TODO(paulberry): fix.
+    super.test_linked_reference_reuse();
   }
 
   @override
+  @failingTest
   test_linked_type_dependency_reuse() {
-    // TODO(paulberry): fix.
+    super.test_linked_type_dependency_reuse();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_inGenericClass() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_inGenericClass();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_inGenericFunction() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_inGenericFunction();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_noArguments() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_noArguments();
   }
 
   @override
+  @failingTest
   test_syntheticFunctionType_withArguments() {
-    // TODO(paulberry): fix.
+    super.test_syntheticFunctionType_withArguments();
   }
 
   @override
+  @failingTest
   test_unused_type_parameter() {
-    // TODO(paulberry): fix.
+    super.test_unused_type_parameter();
   }
 
   @override
+  @failingTest
   test_variable_propagated_type_final_immediate() {
-    // TODO(paulberry): fix.
+    super.test_variable_propagated_type_final_immediate();
   }
 
   @override
+  @failingTest
   test_variable_propagated_type_new_reference() {
-    // TODO(paulberry): fix.
+    super.test_variable_propagated_type_new_reference();
   }
 
   @override
+  @failingTest
   test_variable_propagated_type_omit_dynamic() {
-    // TODO(paulberry): fix.
+    super.test_variable_propagated_type_omit_dynamic();
   }
 }
 
@@ -155,19 +182,14 @@
  * AST.
  */
 @reflectiveTest
-abstract class LinkedSummarizeAstTest extends Object with SummaryTest {
+abstract class LinkedSummarizeAstTest extends SummaryLinkerTest
+    with SummaryTest {
   @override
   LinkedLibrary linked;
 
   @override
   List<UnlinkedUnit> unlinkedUnits;
 
-  /**
-   * Map from absolute URI to the [UnlinkedUnit] for each compilation unit
-   * passed to [addNamedSource].
-   */
-  Map<String, UnlinkedUnit> uriToUnit = <String, UnlinkedUnit>{};
-
   @override
   bool get checkAstDerivedData => true;
 
@@ -181,46 +203,19 @@
   bool get skipNonConstInitializers => false;
 
   @override
-  addNamedSource(String filePath, String contents) {
-    CompilationUnit unit = _parseText(contents);
-    UnlinkedUnit unlinkedUnit =
-        new UnlinkedUnit.fromBuffer(serializeAstUnlinked(unit).toBuffer());
-    uriToUnit[absUri(filePath)] = unlinkedUnit;
-  }
-
-  @override
   void serializeLibraryText(String text, {bool allowErrors: false}) {
-    Uri testDartUri = Uri.parse(absUri('/test.dart'));
-    CompilationUnit unit = _parseText(text);
-    UnlinkedUnit definingUnit =
-        new UnlinkedUnit.fromBuffer(serializeAstUnlinked(unit).toBuffer());
-    uriToUnit[testDartUri.toString()] = definingUnit;
-    LinkedLibrary getDependency(String absoluteUri) {
-      Map<String, LinkedLibrary> sdkLibraries =
-          SerializedMockSdk.instance.uriToLinkedLibrary;
-      LinkedLibrary linkedLibrary = sdkLibraries[absoluteUri];
-      if (linkedLibrary == null && !allowMissingFiles) {
-        fail('Linker unexpectedly requested LinkedLibrary for "$absoluteUri".'
-            '  Libraries available: ${sdkLibraries.keys}');
-      }
-      return linkedLibrary;
-    }
-    UnlinkedUnit getUnit(String absoluteUri) {
-      UnlinkedUnit unit = uriToUnit[absoluteUri] ??
-          SerializedMockSdk.instance.uriToUnlinkedUnit[absoluteUri];
-      if (unit == null && !allowMissingFiles) {
-        fail('Linker unexpectedly requested unit for "$absoluteUri".');
-      }
-      return unit;
-    }
-    linked = link(uriToUnit.keys.toSet(), getDependency, getUnit, strongMode)[
-        testDartUri.toString()];
+    Map<String, UnlinkedUnitBuilder> uriToUnit = this.uriToUnit;
+    LinkerInputs linkerInputs = createLinkerInputs(text);
+    linked = link(linkerInputs.linkedLibraries, linkerInputs.getDependency,
+        linkerInputs.getUnit, strongMode)[linkerInputs.testDartUri.toString()];
     expect(linked, isNotNull);
     validateLinkedLibrary(linked);
-    unlinkedUnits = <UnlinkedUnit>[definingUnit];
-    for (String relativeUri in definingUnit.publicNamespace.parts) {
+    unlinkedUnits = <UnlinkedUnit>[linkerInputs.unlinkedDefiningUnit];
+    for (String relativeUri
+        in linkerInputs.unlinkedDefiningUnit.publicNamespace.parts) {
       UnlinkedUnit unit = uriToUnit[
-          resolveRelativeUri(testDartUri, Uri.parse(relativeUri)).toString()];
+          resolveRelativeUri(linkerInputs.testDartUri, Uri.parse(relativeUri))
+              .toString()];
       if (unit == null) {
         if (!allowMissingFiles) {
           fail('Test referred to unknown unit $relativeUri');
@@ -237,6 +232,156 @@
     expect(cls.supertype, isNull);
     expect(cls.hasNoSupertype, isTrue);
   }
+}
+
+/**
+ * Instances of the class [LinkerInputs] encapsulate the necessary information
+ * to pass to the summary linker.
+ */
+class LinkerInputs {
+  final bool _allowMissingFiles;
+  final Map<String, UnlinkedUnit> _uriToUnit;
+  final Uri testDartUri;
+  final UnlinkedUnit unlinkedDefiningUnit;
+  final Map<String, LinkedLibrary> _dependentLinkedLibraries;
+  final Map<String, UnlinkedUnit> _dependentUnlinkedUnits;
+
+  LinkerInputs(
+      this._allowMissingFiles,
+      this._uriToUnit,
+      this.testDartUri,
+      this.unlinkedDefiningUnit,
+      this._dependentLinkedLibraries,
+      this._dependentUnlinkedUnits);
+
+  Set<String> get linkedLibraries => _uriToUnit.keys.toSet();
+
+  LinkedLibrary getDependency(String absoluteUri) {
+    Map<String, LinkedLibrary> sdkLibraries =
+        SerializedMockSdk.instance.uriToLinkedLibrary;
+    LinkedLibrary linkedLibrary =
+        sdkLibraries[absoluteUri] ?? _dependentLinkedLibraries[absoluteUri];
+    if (linkedLibrary == null && !_allowMissingFiles) {
+      Set<String> librariesAvailable = sdkLibraries.keys.toSet();
+      librariesAvailable.addAll(_dependentLinkedLibraries.keys);
+      fail('Linker unexpectedly requested LinkedLibrary for "$absoluteUri".'
+          '  Libraries available: ${librariesAvailable.toList()}');
+    }
+    return linkedLibrary;
+  }
+
+  UnlinkedUnit getUnit(String absoluteUri) {
+    UnlinkedUnit unit = _uriToUnit[absoluteUri] ??
+        SerializedMockSdk.instance.uriToUnlinkedUnit[absoluteUri] ??
+        _dependentUnlinkedUnits[absoluteUri];
+    if (unit == null && !_allowMissingFiles) {
+      fail('Linker unexpectedly requested unit for "$absoluteUri".');
+    }
+    return unit;
+  }
+}
+
+/**
+ * Base class providing the ability to run the summary linker using summaries
+ * build from ASTs.
+ */
+abstract class SummaryLinkerTest {
+  /**
+   * Map from absolute URI to the [UnlinkedUnit] for each compilation unit
+   * passed to [addNamedSource].
+   */
+  Map<String, UnlinkedUnitBuilder> uriToUnit = <String, UnlinkedUnitBuilder>{};
+
+  /**
+   * Map from absolute URI to the [LinkedLibrary] for each compilation unit in a
+   * package bundle passed to [addBundle].
+   */
+  Map<String, LinkedLibrary> _dependentLinkedLibraries =
+      <String, LinkedLibrary>{};
+
+  /**
+   * Map from absolute URI to the [UnlinkedUnit] for each compilation unit in a
+   * package bundle passed to [addBundle].
+   */
+  Map<String, UnlinkedUnit> _dependentUnlinkedUnits = <String, UnlinkedUnit>{};
+
+  /**
+   * A test will set this to `true` if it contains `import`, `export`, or
+   * `part` declarations that deliberately refer to non-existent files.
+   */
+  bool get allowMissingFiles;
+
+  /**
+   * Add the given package bundle as a dependency so that it may be referenced
+   * by the files under test.
+   */
+  void addBundle(PackageBundle bundle) {
+    for (int i = 0; i < bundle.linkedLibraryUris.length; i++) {
+      _dependentLinkedLibraries[bundle.linkedLibraryUris[i]] =
+          bundle.linkedLibraries[i];
+    }
+    for (int i = 0; i < bundle.unlinkedUnitUris.length; i++) {
+      _dependentUnlinkedUnits[bundle.unlinkedUnitUris[i]] =
+          bundle.unlinkedUnits[i];
+    }
+  }
+
+  /**
+   * Add the given source file so that it may be referenced by the file under
+   * test.
+   */
+  Source addNamedSource(String filePath, String contents) {
+    CompilationUnit unit = _parseText(contents);
+    UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
+    uriToUnit[absUri(filePath)] = unlinkedUnit;
+    // Tests using SummaryLinkerTest don't actually need the returned
+    // Source, so we can safely return `null`.
+    return null;
+  }
+
+  LinkerInputs createLinkerInputs(String text, {String path: '/test.dart'}) {
+    Uri testDartUri = Uri.parse(absUri(path));
+    CompilationUnit unit = _parseText(text);
+    UnlinkedUnitBuilder unlinkedDefiningUnit = serializeAstUnlinked(unit);
+    uriToUnit[testDartUri.toString()] = unlinkedDefiningUnit;
+    LinkerInputs linkerInputs = new LinkerInputs(
+        allowMissingFiles,
+        uriToUnit,
+        testDartUri,
+        unlinkedDefiningUnit,
+        _dependentLinkedLibraries,
+        _dependentUnlinkedUnits);
+    // Reset uriToUnit, _dependentLinkedLibraries, and _dependentUnlinkedUnits
+    // in case the test needs to start a new package bundle.
+    uriToUnit = <String, UnlinkedUnitBuilder>{};
+    _dependentLinkedLibraries = <String, LinkedLibrary>{};
+    _dependentUnlinkedUnits = <String, UnlinkedUnit>{};
+    return linkerInputs;
+  }
+
+  /**
+   * Link together the given file, along with any other files passed to
+   * [addNamedSource], to form a package bundle.  Reset the state of the buffers
+   * accumulated by [addNamedSource] and [addBundle] so that further bundles
+   * can be created.
+   */
+  PackageBundleBuilder createPackageBundle(String text,
+      {String path: '/test.dart'}) {
+    PackageBundleAssembler assembler = new PackageBundleAssembler();
+    LinkerInputs linkerInputs = createLinkerInputs(text, path: path);
+    Map<String, LinkedLibraryBuilder> linkedLibraries = link(
+        linkerInputs.linkedLibraries,
+        linkerInputs.getDependency,
+        linkerInputs.getUnit,
+        true);
+    linkedLibraries.forEach(assembler.addLinkedLibrary);
+    linkerInputs._uriToUnit.forEach((String uri, UnlinkedUnitBuilder unit) {
+      // Note: it doesn't matter what we store for the hash because it isn't
+      // used in these tests.
+      assembler.addUnlinkedUnitWithHash(uri, unit, 'HASH');
+    });
+    return assembler.assemble();
+  }
 
   CompilationUnit _parseText(String text) {
     CharSequenceReader reader = new CharSequenceReader(text);
diff --git a/pkg/analyzer/test/src/summary/summarize_elements_strong_test.dart b/pkg/analyzer/test/src/summary/summarize_elements_strong_test.dart
index 8a8bfe6..1ae97d4 100644
--- a/pkg/analyzer/test/src/summary/summarize_elements_strong_test.dart
+++ b/pkg/analyzer/test/src/summary/summarize_elements_strong_test.dart
@@ -5,9 +5,11 @@
 library analyzer.test.src.summary.summarize_elements_strong_test;
 
 import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk.dart';
 import 'package:unittest/unittest.dart';
 
 import '../../reflective_tests.dart';
+import '../context/abstract_context.dart';
 import 'summarize_elements_test.dart';
 import 'summary_common.dart';
 
@@ -27,4 +29,7 @@
 
   @override
   bool get strongMode => true;
+
+  @override
+  DartSdk createDartSdk() => AbstractContextTest.SHARED_STRONG_MOCK_SDK;
 }
diff --git a/pkg/analyzer/test/src/summary/summarize_elements_test.dart b/pkg/analyzer/test/src/summary/summarize_elements_test.dart
index da2a2bb..eda8138 100644
--- a/pkg/analyzer/test/src/summary/summarize_elements_test.dart
+++ b/pkg/analyzer/test/src/summary/summarize_elements_test.dart
@@ -6,6 +6,7 @@
 
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/summary/format.dart';
@@ -16,8 +17,9 @@
     as summarize_elements;
 import 'package:unittest/unittest.dart';
 
-import '../../generated/resolver_test_case.dart';
 import '../../reflective_tests.dart';
+import '../abstract_single_unit.dart';
+import '../context/abstract_context.dart';
 import 'summary_common.dart';
 
 main() {
@@ -29,7 +31,7 @@
  * Override of [SummaryTest] which creates summaries from the element model.
  */
 @reflectiveTest
-class SummarizeElementsTest extends ResolverTestCase with SummaryTest {
+class SummarizeElementsTest extends AbstractSingleUnitTest with SummaryTest {
   /**
    * The list of absolute unit URIs corresponding to the compilation units in
    * [unlinkedUnits].
@@ -71,11 +73,14 @@
 
   @override
   Source addNamedSource(String filePath, String contents) {
-    Source source = super.addNamedSource(filePath, contents);
+    Source source = super.addSource(filePath, contents);
     _fileContents[source] = contents;
     return source;
   }
 
+  @override
+  DartSdk createDartSdk() => AbstractContextTest.SHARED_MOCK_SDK;
+
   /**
    * Serialize the library containing the given class [element], then
    * deserialize it and return the summary of the class.
@@ -92,7 +97,7 @@
   void serializeLibraryElement(LibraryElement library) {
     summarize_elements.LibrarySerializationResult serializedLib =
         summarize_elements.serializeLibrary(
-            library, typeProvider, analysisContext.analysisOptions.strongMode);
+            library, context.typeProvider, context.analysisOptions.strongMode);
     {
       List<int> buffer = serializedLib.linked.toBuffer();
       linked = new LinkedLibrary.fromBuffer(buffer);
@@ -107,14 +112,15 @@
 
   @override
   void serializeLibraryText(String text, {bool allowErrors: false}) {
-    Source source = addSource(text);
+    Source source = addTestSource(text);
     _fileContents[source] = text;
-    LibraryElement library = resolve2(source);
+    LibraryElement library = context.computeLibraryElement(source);
     if (!allowErrors) {
-      assertNoErrors(source);
+      assertNoErrorsInSource(source);
     }
     serializeLibraryElement(library);
     expect(unlinkedUnits[0].imports.length, linked.importDependencies.length);
+    expect(unlinkedUnits[0].exports.length, linked.exportDependencies.length);
     expect(linked.units.length, unlinkedUnits.length);
     for (int i = 0; i < linked.units.length; i++) {
       expect(unlinkedUnits[i].references.length,
@@ -126,11 +132,12 @@
   @override
   void setUp() {
     super.setUp();
-    resetWithOptions(options);
+    prepareAnalysisContext(options);
   }
 
   test_class_no_superclass() {
-    UnlinkedClass cls = serializeClassElement(typeProvider.objectType.element);
+    UnlinkedClass cls =
+        serializeClassElement(context.typeProvider.objectType.element);
     expect(cls.supertype, isNull);
     expect(cls.hasNoSupertype, isTrue);
   }
@@ -141,7 +148,7 @@
    */
   void verifyPublicNamespace() {
     for (int i = 0; i < unlinkedUnits.length; i++) {
-      Source source = analysisContext.sourceFactory.forUri(unitUris[i]);
+      Source source = context.sourceFactory.forUri(unitUris[i]);
       String text = _fileContents[source];
       if (text == null) {
         if (!allowMissingFiles) {
diff --git a/pkg/analyzer/test/src/summary/summary_common.dart b/pkg/analyzer/test/src/summary/summary_common.dart
index a34f921..cfde5e9 100644
--- a/pkg/analyzer/test/src/summary/summary_common.dart
+++ b/pkg/analyzer/test/src/summary/summary_common.dart
@@ -23,7 +23,15 @@
     as summarize_elements;
 import 'package:unittest/unittest.dart';
 
-import '../../generated/analysis_context_factory.dart';
+import '../context/mock_sdk.dart';
+
+/**
+ * Convert [path] to a suitably formatted absolute path URI for the current
+ * platform.
+ */
+String absUri(String path) {
+  return FileUtilities2.createFile(path).toURI().toString();
+}
 
 /**
  * Convert a summary object (or a portion of one) into a canonical form that
@@ -99,13 +107,14 @@
 
   static SerializedMockSdk _serializeMockSdk() {
     try {
-      AnalysisContext analysisContext =
-          AnalysisContextFactory.contextWithCore();
+      AnalysisContext analysisContext = new MockSdk().context;
       Map<String, UnlinkedUnit> uriToUnlinkedUnit = <String, UnlinkedUnit>{};
       Map<String, LinkedLibrary> uriToLinkedLibrary = <String, LinkedLibrary>{};
       List<LibraryElement> libraries = [
         analysisContext.typeProvider.objectType.element.library,
-        analysisContext.typeProvider.futureType.element.library
+        analysisContext.typeProvider.futureType.element.library,
+        analysisContext.computeLibraryElement(
+            analysisContext.sourceFactory.resolveUri(null, 'dart:math')),
       ];
       for (LibraryElement library in libraries) {
         summarize_elements.LibrarySerializationResult serializedLibrary =
@@ -189,14 +198,6 @@
   List<UnlinkedUnit> get unlinkedUnits;
 
   /**
-   * Convert [path] to a suitably formatted absolute path URI for the current
-   * platform.
-   */
-  String absUri(String path) {
-    return FileUtilities2.createFile(path).toURI().toString();
-  }
-
-  /**
    * Add the given source file so that it may be referenced by the file under
    * test.
    */
@@ -4993,6 +4994,25 @@
     }
   }
 
+  test_executable_localVariables_forEachLoop_outside() {
+    String code = r'''
+f() { // 1
+  int i;
+  for (i in <int>[]) {
+    print(i);
+  }
+} // 4
+''';
+    UnlinkedExecutable executable = serializeExecutableText(code);
+    List<UnlinkedVariable> variables = executable.localVariables;
+    expect(variables, hasLength(1));
+    {
+      UnlinkedVariable i = variables.singleWhere((v) => v.name == 'i');
+      _assertVariableVisible(code, i, '{ // 1', '} // 4');
+      checkTypeRef(i.type, 'dart:core', 'dart:core', 'int');
+    }
+  }
+
   test_executable_localVariables_forLoop() {
     String code = r'''
 f() { // 1
@@ -5673,6 +5693,12 @@
         ReferenceKind.classOrEnum);
   }
 
+  test_export_dependency() {
+    serializeLibraryText('export "dart:async";');
+    expect(unlinkedUnits[0].exports, hasLength(1));
+    checkDependency(linked.exportDependencies[0], 'dart:async', 'dart:async');
+  }
+
   test_export_enum() {
     addNamedSource('/a.dart', 'enum E { v }');
     serializeLibraryText('export "a.dart";');
@@ -5734,6 +5760,21 @@
     expect(linked.exportNames, isNotEmpty);
   }
 
+  test_export_missing() {
+    if (!checkAstDerivedData) {
+      // TODO(paulberry): At the moment unresolved exports are not included in
+      // the element model, so we can't pass this test.
+      return;
+    }
+    // Unresolved exports are included since this is necessary for proper
+    // dependency tracking.
+    allowMissingFiles = true;
+    serializeLibraryText('export "foo.dart";', allowErrors: true);
+    expect(unlinkedUnits[0].imports, hasLength(1));
+    checkDependency(
+        linked.exportDependencies[0], absUri('/foo.dart'), 'foo.dart');
+  }
+
   test_export_names_excludes_names_from_library() {
     addNamedSource('/a.dart', 'part of my.lib; int y; int _y;');
     serializeLibraryText('library my.lib; part "a.dart"; int x; int _x;');
@@ -6674,7 +6715,6 @@
 ''');
     _assertUnlinkedConst(variable.constExpr, isValidConst: false, operators: [
       UnlinkedConstOperation.pushInt,
-      UnlinkedConstOperation.pushReference,
       UnlinkedConstOperation.typeCast,
     ], ints: [
       42
@@ -6693,7 +6733,6 @@
 ''');
     _assertUnlinkedConst(variable.constExpr, isValidConst: false, operators: [
       UnlinkedConstOperation.pushInt,
-      UnlinkedConstOperation.pushReference,
       UnlinkedConstOperation.typeCheck,
     ], ints: [
       42
@@ -7200,7 +7239,7 @@
     checkTypeRef(findVariable('f').type, 'dart:async', 'dart:async', 'Future',
         numTypeParameters: 1);
     checkTypeRef(findVariable('s').type, 'dart:async', 'dart:async', 'Stream',
-        numTypeParameters: 1);
+        expectedTargetUnit: 1, numTypeParameters: 1);
   }
 
   test_import_reference_merged_prefixed() {
@@ -7214,7 +7253,7 @@
     checkTypeRef(findVariable('f').type, 'dart:async', 'dart:async', 'Future',
         expectedPrefix: 'a', numTypeParameters: 1);
     checkTypeRef(findVariable('s').type, 'dart:async', 'dart:async', 'Stream',
-        expectedPrefix: 'a', numTypeParameters: 1);
+        expectedTargetUnit: 1, expectedPrefix: 'a', numTypeParameters: 1);
   }
 
   test_import_reference_merged_prefixed_separate_libraries() {
diff --git a/pkg/analyzer/test/src/summary/test_all.dart b/pkg/analyzer/test/src/summary/test_all.dart
index 0943a6e..fa620fe 100644
--- a/pkg/analyzer/test/src/summary/test_all.dart
+++ b/pkg/analyzer/test/src/summary/test_all.dart
@@ -16,6 +16,7 @@
 import 'resynthesize_ast_test.dart' as resynthesize_ast_test;
 import 'resynthesize_strong_test.dart' as resynthesize_strong_test;
 import 'resynthesize_test.dart' as resynthesize_test;
+import 'summarize_ast_strong_test.dart' as summarize_ast_strong_test;
 import 'summarize_ast_test.dart' as summarize_ast_test;
 import 'summarize_elements_strong_test.dart' as summarize_elements_strong_test;
 import 'summarize_elements_test.dart' as summarize_elements_test;
@@ -33,6 +34,7 @@
     resynthesize_ast_test.main();
     resynthesize_strong_test.main();
     resynthesize_test.main();
+    summarize_ast_strong_test.main();
     summarize_ast_test.main();
     summarize_elements_strong_test.main();
     summarize_elements_test.main();
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index 58944b6..3ace67a 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -7,1215 +7,911 @@
 /// Tests for type inference.
 library analyzer.test.src.task.strong.inferred_type_test;
 
+import 'package:analyzer/dart/element/element.dart';
 import 'package:unittest/unittest.dart';
 
-import 'strong_test_helper.dart';
+import '../../../reflective_tests.dart';
+import 'strong_test_helper.dart' as helper;
 
 void main() {
-  initStrongModeTests();
-
-  // Error also expected when declared type is `int`.
-  test('infer type on var', () {
-    checkFile('''
-      test1() {
-        int x = 3;
-        x = /*warning:INVALID_ASSIGNMENT*/"hi";
-      }
-    ''');
-  });
-
-  // If inferred type is `int`, error is also reported
-  test('infer type on var 2', () {
-    checkFile('''
-      test2() {
-        var x = 3;
-        x = /*warning:INVALID_ASSIGNMENT*/"hi";
-      }
-    ''');
-  });
-
-  test('No error when declared type is `num` and assigned null.', () {
-    checkFile('''
-        test1() {
-          num x = 3;
-          x = null;
-        }
-      ''');
-  });
-
-  test('do not infer type on dynamic', () {
-    checkFile('''
-      test() {
-        dynamic x = 3;
-        x = "hi";
-      }
-    ''');
-  });
-
-  test('do not infer type when initializer is null', () {
-    checkFile('''
-      test() {
-        var x = null;
-        x = "hi";
-        x = 3;
-      }
-    ''');
-  });
-
-  test('infer type on var from field', () {
-    checkFile('''
-      class A {
-        int x = 0;
-
-        test1() {
-          var a = x;
-          a = /*warning:INVALID_ASSIGNMENT*/"hi";
-          a = 3;
-          var b = y;
-          b = /*warning:INVALID_ASSIGNMENT*/"hi";
-          b = 4;
-          var c = z;
-          c = /*warning:INVALID_ASSIGNMENT*/"hi";
-          c = 4;
-        }
-
-        int y; // field def after use
-        final z = 42; // should infer `int`
-      }
-    ''');
-  });
-
-  test('infer type on var from top-level', () {
-    checkFile('''
-      int x = 0;
-
-      test1() {
-        var a = x;
-        a = /*warning:INVALID_ASSIGNMENT*/"hi";
-        a = 3;
-        var b = y;
-        b = /*warning:INVALID_ASSIGNMENT*/"hi";
-        b = 4;
-        var c = z;
-        c = /*warning:INVALID_ASSIGNMENT*/"hi";
-        c = 4;
-      }
-
-      int y = 0; // field def after use
-      final z = 42; // should infer `int`
-    ''');
-  });
-
-  test('do not infer field type when initializer is null', () {
-    checkFile('''
-      var x = null;
-      var y = 3;
-      class A {
-        static var x = null;
-        static var y = 3;
-
-        var x2 = null;
-        var y2 = 3;
-      }
-
-      test() {
-        x = "hi";
-        y = /*warning:INVALID_ASSIGNMENT*/"hi";
-        A.x = "hi";
-        A.y = /*warning:INVALID_ASSIGNMENT*/"hi";
-        new A().x2 = "hi";
-        new A().y2 = /*warning:INVALID_ASSIGNMENT*/"hi";
-      }
-    ''');
-  });
-
-  test('infer from variables in non-cycle imports with flag', () {
-    addFile(
-        '''
-          var x = 2;
-      ''',
-        name: '/a.dart');
-    checkFile('''
-          import 'a.dart';
-          var y = x;
-
-          test1() {
-            x = /*warning:INVALID_ASSIGNMENT*/"hi";
-            y = /*warning:INVALID_ASSIGNMENT*/"hi";
-          }
-    ''');
-  });
-
-  test('infer from variables in non-cycle imports with flag 2', () {
-    addFile(
-        '''
-          class A { static var x = 2; }
-      ''',
-        name: '/a.dart');
-    checkFile('''
-          import 'a.dart';
-          class B { static var y = A.x; }
-
-          test1() {
-            A.x = /*warning:INVALID_ASSIGNMENT*/"hi";
-            B.y = /*warning:INVALID_ASSIGNMENT*/"hi";
-          }
-    ''');
-  });
-
-  test('infer from variables in cycle libs when flag is on', () {
-    addFile(
-        '''
-          import 'main.dart';
-          var x = 2; // ok to infer
-      ''',
-        name: '/a.dart');
-    checkFile('''
-          import 'a.dart';
-          var y = x; // now ok :)
-
-          test1() {
-            int t = 3;
-            t = x;
-            t = y;
-          }
-    ''');
-  });
-
-  test('infer from variables in cycle libs when flag is on 2', () {
-    addFile(
-        '''
-          import 'main.dart';
-          class A { static var x = 2; }
-      ''',
-        name: '/a.dart');
-    checkFile('''
-          import 'a.dart';
-          class B { static var y = A.x; }
-
-          test1() {
-            int t = 3;
-            t = A.x;
-            t = B.y;
-          }
-    ''');
-  });
-
-  test('can infer also from static and instance fields (flag on)', () {
-    addFile(
-        '''
-          import 'b.dart';
-          class A {
-            static final a1 = B.b1;
-            final a2 = new B().b2;
-          }
-      ''',
-        name: '/a.dart');
-    addFile(
-        '''
-          class B {
-            static final b1 = 1;
-            final b2 = 1;
-          }
-      ''',
-        name: '/b.dart');
-    checkFile('''
-          import "a.dart";
-
-          test1() {
-            int x = 0;
-            // inference in A now works.
-            x = A.a1;
-            x = new A().a2;
-          }
-    ''');
-  });
-
-  test('inference in cycles is deterministic', () {
-    addFile(
-        '''
-          import 'b.dart';
-          class A {
-            static final a1 = B.b1;
-            final a2 = new B().b2;
-          }
-      ''',
-        name: '/a.dart');
-    addFile(
-        '''
-          class B {
-            static final b1 = 1;
-            final b2 = 1;
-          }
-      ''',
-        name: '/b.dart');
-    addFile(
-        '''
-          import "main.dart"; // creates a cycle
-
-          class C {
-            static final c1 = 1;
-            final c2 = 1;
-          }
-      ''',
-        name: '/c.dart');
-    addFile(
-        '''
-          library e;
-          import 'a.dart';
-          part 'e2.dart';
-
-          class E {
-            static final e1 = 1;
-            static final e2 = F.f1;
-            static final e3 = A.a1;
-            final e4 = 1;
-            final e5 = new F().f2;
-            final e6 = new A().a2;
-          }
-      ''',
-        name: '/e.dart');
-    addFile(
-        '''
-          part 'f2.dart';
-      ''',
-        name: '/f.dart');
-    addFile(
-        '''
-          part of e;
-          class F {
-            static final f1 = 1;
-            final f2 = 1;
-          }
-      ''',
-        name: '/e2.dart');
-    checkFile('''
-          import "a.dart";
-          import "c.dart";
-          import "e.dart";
-
-          class D {
-            static final d1 = A.a1 + 1;
-            static final d2 = C.c1 + 1;
-            final d3 = new A().a2;
-            final d4 = new C().c2;
-          }
-
-          test1() {
-            int x = 0;
-            // inference in A works, it's not in a cycle
-            x = A.a1;
-            x = new A().a2;
-
-            // Within a cycle we allow inference when the RHS is well known, but
-            // not when it depends on other fields within the cycle
-            x = C.c1;
-            x = D.d1;
-            x = D.d2;
-            x = new C().c2;
-            x = new D().d3;
-            x = /*info:DYNAMIC_CAST*/new D().d4;
-
-
-            // Similarly if the library contains parts.
-            x = E.e1;
-            x = E.e2;
-            x = E.e3;
-            x = new E().e4;
-            x = /*info:DYNAMIC_CAST*/new E().e5;
-            x = new E().e6;
-            x = F.f1;
-            x = new F().f2;
-          }
-    ''');
-  });
-
-  test('infer from complex expressions if the outer-most value is precise', () {
-    checkFile('''
-        class A { int x; B operator+(other) => null; }
-        class B extends A { B(ignore); }
-        var a = new A();
-        // Note: it doesn't matter that some of these refer to 'x'.
-        var b = new B(/*warning:UNDEFINED_IDENTIFIER*/x);  // allocations
-        var c1 = [/*warning:UNDEFINED_IDENTIFIER*/x];      // list literals
-        var c2 = const [];
-        var d = <dynamic, dynamic>{'a': 'b'};     // map literals
-        var e = new A()..x = 3; // cascades
-        var f = 2 + 3;          // binary expressions are OK if the left operand
-                                // is from a library in a different strongest
-                                // conected component.
-        var g = -3;
-        var h = new A() + 3;
-        var i = /*warning:UNDEFINED_OPERATOR*/- new A();
-        var j = null as B;
-
-        test1() {
-          a = /*warning:INVALID_ASSIGNMENT*/"hi";
-          a = new B(3);
-          b = /*warning:INVALID_ASSIGNMENT*/"hi";
-          b = new B(3);
-          c1 = [];
-          c1 = /*warning:INVALID_ASSIGNMENT*/{};
-          c2 = [];
-          c2 = /*warning:INVALID_ASSIGNMENT*/{};
-          d = {};
-          d = /*warning:INVALID_ASSIGNMENT*/3;
-          e = new A();
-          e = /*warning:INVALID_ASSIGNMENT*/{};
-          f = 3;
-          f = /*warning:INVALID_ASSIGNMENT*/false;
-          g = 1;
-          g = /*warning:INVALID_ASSIGNMENT*/false;
-          h = /*warning:INVALID_ASSIGNMENT*/false;
-          h = new B('b');
-          i = false;
-          j = new B('b');
-          j = /*warning:INVALID_ASSIGNMENT*/false;
-          j = /*warning:INVALID_ASSIGNMENT*/[];
-        }
-    ''');
-  });
-
-  test('infer list literal nested in map literal', () {
-    checkFile(r'''
-class Resource {}
-class Folder extends Resource {}
-
-Resource getResource(String str) => null;
-
-class Foo<T> {
-  Foo(T t);
+  helper.initStrongModeTests();
+  runReflectiveTests(InferredTypeTest);
 }
 
+abstract class InferredTypeMixin {
+  /**
+   * Add a new file with the given [name] and [content].
+   */
+  void addFile(String content, {String name: '/main.dart'});
+
+  /**
+   * Add the file, process it (resolve, validate, etc) and return the resolved
+   * unit element.
+   */
+  CompilationUnitElement checkFile(String content);
+
+  void test_blockBodiedLambdas_async_allReturnsAreValues() {
+    var mainUnit = checkFile(r'''
+import 'dart:async';
+import 'dart:math' show Random;
+main() {
+  var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
+    if (new Random().nextBool()) {
+      return 1;
+    } else {
+      return 2.0;
+    }
+  };
+  Future<num> g = f();
+  Future<int> h = /*info:ASSIGNMENT_CAST*/f();
+}
+''');
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → Future<num>');
+  }
+
+  void test_blockBodiedLambdas_async_alReturnsAreFutures() {
+    var mainUnit = checkFile(r'''
+import 'dart:async';
+import 'dart:math' show Random;
+main() {
+  var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
+    if (new Random().nextBool()) {
+      return new Future<int>.value(1);
+    } else {
+      return new Future<double>.value(2.0);
+    }
+  };
+  Future<num> g = f();
+  Future<int> h = /*info:ASSIGNMENT_CAST*/f();
+}
+''');
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → Future<num>');
+  }
+
+  void test_blockBodiedLambdas_async_mixOfValuesAndFutures() {
+    var mainUnit = checkFile(r'''
+  import 'dart:async';
+  import 'dart:math' show Random;
+  main() {
+    var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
+      if (new Random().nextBool()) {
+        return new Future<int>.value(1);
+      } else {
+        return 2.0;
+      }
+    };
+    Future<num> g = f();
+    Future<int> h = /*info:ASSIGNMENT_CAST*/f();
+  }
+''');
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → Future<num>');
+  }
+
+  void test_blockBodiedLambdas_asyncStar() {
+    var mainUnit = checkFile(r'''
+  import 'dart:async';
+  main() {
+    var f = /*info:INFERRED_TYPE_CLOSURE*/() async* {
+      yield 1;
+      Stream<double> s;
+      yield* s;
+    };
+    Stream<num> g = f();
+    Stream<int> h = /*info:ASSIGNMENT_CAST*/f();
+  }
+''');
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → Stream<num>');
+  }
+
+  void test_blockBodiedLambdas_basic() {
+    checkFile(r'''
+test1() {
+  List<int> o;
+  var y = o.map(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) { return x + 1; });
+  Iterable<int> z = y;
+}
+''');
+  }
+
+  void test_blockBodiedLambdas_basic_topLevel() {
+    checkFile(r'''
+List<int> o;
+var y = o.map(/*info:INFERRED_TYPE_CLOSURE*/(x) { return x + 1; });
+Iterable<int> z = y;
+''');
+  }
+
+  void test_blockBodiedLambdas_doesNotInferBottom_async() {
+    var mainUnit = checkFile(r'''
+import 'dart:async';
+main() async {
+  var f = () async { return null; };
+  Future y = f();
+  Future<String> z = /*warning:DOWN_CAST_COMPOSITE*/f();
+  String s = /*info:DYNAMIC_CAST*/await f();
+}
+''');
+
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → Future<dynamic>');
+  }
+
+  void test_blockBodiedLambdas_doesNotInferBottom_asyncStar() {
+    var mainUnit = checkFile(r'''
+import 'dart:async';
+main() async {
+  var f = () async* { yield null; };
+  Stream y = f();
+  Stream<String> z = /*warning:DOWN_CAST_COMPOSITE*/f();
+  String s = /*info:DYNAMIC_CAST*/await f().first;
+}
+''');
+
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → Stream<dynamic>');
+  }
+
+  void test_blockBodiedLambdas_doesNotInferBottom_sync() {
+    var mainUnit = checkFile(r'''
+var h = null;
+void foo(int f(Object _)) {}
+
 main() {
-  // List inside map
-  var map = <String, List<Folder>>{
-    'pkgA': /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/')],
-    'pkgB': /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgB/lib/')]
-  };
-  // Also try map inside list
-  var list = <Map<String, Folder>>[
-    /*info:INFERRED_TYPE_LITERAL*/{ 'pkgA': /*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/') },
-    /*info:INFERRED_TYPE_LITERAL*/{ 'pkgB': /*info:DOWN_CAST_IMPLICIT*/getResource('/pkgB/lib/') },
-  ];
-  // Instance creation too
-  var foo = new Foo<List<Folder>>(
-    /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/')]
-  );
+  var f = (Object x) { return null; };
+  String y = /*info:DYNAMIC_CAST*/f(42);
+
+  f = /*info:INFERRED_TYPE_CLOSURE*/(x) => 'hello';
+
+  foo(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) { return null; });
+  foo(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) { throw "not implemented"; });
 }
-    ''');
-  });
+''');
 
-  // but flags can enable this behavior.
-  test('infer if complex expressions read possibly inferred field', () {
+    var f = mainUnit.functions[1].localVariables[0];
+    expect(f.type.toString(), '(Object) → dynamic');
+  }
+
+  void test_blockBodiedLambdas_doesNotInferBottom_syncStar() {
+    var mainUnit = checkFile(r'''
+main() {
+  var f = () sync* { yield null; };
+  Iterable y = f();
+  Iterable<String> z = /*warning:DOWN_CAST_COMPOSITE*/f();
+  String s = /*info:DYNAMIC_CAST*/f().first;
+}
+''');
+
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → Iterable<dynamic>');
+  }
+
+  void test_blockBodiedLambdas_downwardsIncompatibleWithUpwardsInference() {
+    var mainUnit = checkFile(r'''
+main() {
+  String f() => null;
+  var g = f;
+  g = /*info:INFERRED_TYPE_CLOSURE*/() { return /*warning:RETURN_OF_INVALID_TYPE*/1; };
+}
+''');
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → String');
+  }
+
+  void test_blockBodiedLambdas_LUB() {
+    checkFile(r'''
+import 'dart:math' show Random;
+test2() {
+  List<num> o;
+  var y = o.map(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) {
+    if (new Random().nextBool()) {
+      return x.toInt() + 1;
+    } else {
+      return x.toDouble();
+    }
+  });
+  Iterable<num> w = y;
+  Iterable<int> z = /*info:ASSIGNMENT_CAST*/y;
+}
+''');
+  }
+
+  void test_blockBodiedLambdas_LUB_topLevel() {
+    checkFile(r'''
+import 'dart:math' show Random;
+List<num> o;
+var y = o.map(/*info:INFERRED_TYPE_CLOSURE*/(x) {
+  if (new Random().nextBool()) {
+    return x.toInt() + 1;
+  } else {
+    return x.toDouble();
+  }
+});
+Iterable<num> w = y;
+Iterable<int> z = /*info:ASSIGNMENT_CAST*/y;
+''');
+  }
+
+  void test_blockBodiedLambdas_nestedLambdas() {
+    // Original feature request: https://github.com/dart-lang/sdk/issues/25487
+    var mainUnit = checkFile(r'''
+main() {
+  var f = /*info:INFERRED_TYPE_CLOSURE*/() {
+    return /*info:INFERRED_TYPE_CLOSURE*/(int x) { return 2.0 * x; };
+  };
+}
+''');
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → (int) → num');
+  }
+
+  void test_blockBodiedLambdas_noReturn() {
+    var mainUnit = checkFile(r'''
+test1() {
+  List<int> o;
+  var y = o.map(/*info:INFERRED_TYPE_CLOSURE*/(x) { });
+  Iterable<int> z = /*warning:DOWN_CAST_COMPOSITE*/y;
+}
+''');
+    var f = mainUnit.functions[0].localVariables[1];
+    expect(f.type.toString(), 'Iterable<dynamic>');
+  }
+
+  void test_blockBodiedLambdas_syncStar() {
+    var mainUnit = checkFile(r'''
+main() {
+  var f = /*info:INFERRED_TYPE_CLOSURE*/() sync* {
+    yield 1;
+    yield* [3, 4.0];
+  };
+  Iterable<num> g = f();
+  Iterable<int> h = /*info:ASSIGNMENT_CAST*/f();
+}
+''');
+    var f = mainUnit.functions[0].localVariables[0];
+    expect(f.type.toString(), '() → Iterable<num>');
+  }
+
+  void test_canInferAlsoFromStaticAndInstanceFieldsFlagOn() {
     addFile(
         '''
-        class A {
-          var x = 3;
-        }
-      ''',
+import 'b.dart';
+class A {
+  static final a1 = B.b1;
+  final a2 = new B().b2;
+}
+''',
         name: '/a.dart');
-    checkFile('''
-        import 'a.dart';
-        class B {
-          var y = 3;
-        }
-        final t1 = new A();
-        final t2 = new A().x;
-        final t3 = new B();
-        final t4 = new B().y;
-
-        test1() {
-          int i = 0;
-          A a;
-          B b;
-          a = t1;
-          i = t2;
-          b = t3;
-          i = /*info:DYNAMIC_CAST*/t4;
-          i = new B().y; // B.y was inferred though
-        }
-    ''');
-  });
-
-  group('infer types on loop indices', () {
-    test('foreach loop', () {
-      checkFile('''
-      class Foo {
-        int bar = 42;
-      }
-
-      class Bar<T extends Iterable<String>> {
-        void foo(T t) {
-          for (var i in t) {
-            int x = /*warning:INVALID_ASSIGNMENT*/i;
-          }
-        }
-      }
-
-      class Baz<T, E extends Iterable<T>, S extends E> {
-        void foo(S t) {
-          for (var i in t) {
-            int x = /*warning:INVALID_ASSIGNMENT*/i;
-            T y = i;
-          }
-        }
-      }
-
-      test() {
-        var list = <Foo>[];
-        for (var x in list) {
-          String y = /*warning:INVALID_ASSIGNMENT*/x;
-        }
-
-        for (dynamic x in list) {
-          // The INVALID_ASSIGNMENT hint is because type propagation knows x is
-          // a Foo.
-          String y = /*info:DYNAMIC_CAST,info:INVALID_ASSIGNMENT*/x;
-        }
-
-        for (String x in /*warning:FOR_IN_OF_INVALID_ELEMENT_TYPE*/list) {
-          String y = x;
-        }
-
-        var z;
-        for(z in list) {
-          String y = /*info:DYNAMIC_CAST,info:INVALID_ASSIGNMENT*/z;
-        }
-
-        Iterable iter = list;
-        for (Foo /*info:DYNAMIC_CAST*/x in iter) {
-          var y = x;
-        }
-
-        dynamic iter2 = list;
-        for (Foo /*info:DYNAMIC_CAST*/x in /*info:DYNAMIC_CAST*/iter2) {
-          var y = x;
-        }
-
-        var map = <String, Foo>{};
-        // Error: map must be an Iterable.
-        for (var x in /*warning:FOR_IN_OF_INVALID_TYPE*/map) {
-          String y = /*info:DYNAMIC_CAST*/x;
-        }
-
-        // We're not properly inferring that map.keys is an Iterable<String>
-        // and that x is a String.
-        for (var x in map.keys) {
-          String y = x;
-        }
-      }
-      ''');
-    });
-
-    test('for loop, with inference', () {
-      checkFile('''
-      test() {
-        for (var i = 0; i < 10; i++) {
-          int j = i + 1;
-        }
-      }
-      ''');
-    });
-  });
-
-  test('propagate inference to field in class', () {
-    checkFile('''
-      class A {
-        int x = 2;
-      }
-
-      test() {
-        var a = new A();
-        A b = a;                      // doesn't require down cast
-        print(a.x);     // doesn't require dynamic invoke
-        print(a.x + 2); // ok to use in bigger expression
-      }
-    ''');
-  });
-
-  test('propagate inference to field in class dynamic warnings', () {
-    checkFile('''
-      class A {
-        int x = 2;
-      }
-
-      test() {
-        dynamic a = new A();
-        A b = /*info:DYNAMIC_CAST*/a;
-        print(/*info:DYNAMIC_INVOKE*/a.x);
-        print(/*info:DYNAMIC_INVOKE*/(/*info:DYNAMIC_INVOKE*/a.x) + 2);
-      }
-    ''');
-  });
-
-  test('propagate inference transitively', () {
-    checkFile('''
-      class A {
-        int x = 2;
-      }
-
-      test5() {
-        var a1 = new A();
-        a1.x = /*warning:INVALID_ASSIGNMENT*/"hi";
-
-        A a2 = new A();
-        a2.x = /*warning:INVALID_ASSIGNMENT*/"hi";
-      }
-    ''');
-  });
-
-  test('propagate inference transitively 2', () {
-    checkFile('''
-      class A {
-        int x = 42;
-      }
-
-      class B {
-        A a = new A();
-      }
-
-      class C {
-        B b = new B();
-      }
-
-      class D {
-        C c = new C();
-      }
-
-      void main() {
-        var d1 = new D();
-        print(d1.c.b.a.x);
-
-        D d2 = new D();
-        print(d2.c.b.a.x);
-      }
-    ''');
-  });
-
-  group('infer type on overridden fields', () {
-    test('2', () {
-      checkFile('''
-        class A {
-          int x = 2;
-        }
-
-        class B extends A {
-          /*severe:INVALID_FIELD_OVERRIDE*/get x => 3;
-        }
-
-        foo() {
-          String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
-          int z = new B().x;
-        }
-    ''');
-    });
-
-    test('4', () {
-      checkFile('''
-        class A {
-          final int x = 2;
-        }
-
-        class B implements A {
-          get x => 3;
-        }
-
-        foo() {
-          String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
-          int z = new B().x;
-        }
-    ''');
-    });
-  });
-
-  group('infer types on generic instantiations', () {
-    test('infer', () {
-      checkFile('''
-        class A<T> {
-          final T x = null;
-        }
-
-        class B implements A<int> {
-          /*severe:INVALID_METHOD_OVERRIDE*/dynamic get x => 3;
-        }
-
-        foo() {
-          String y = /*info:DYNAMIC_CAST*/new B().x;
-          int z = /*info:DYNAMIC_CAST*/new B().x;
-        }
-    ''');
-    });
-
-    test('3', () {
-      checkFile('''
-        class A<T> {
-          final T x = null;
-          final T w = null;
-        }
-
-        class B implements A<int> {
-          get x => 3;
-          get w => /*warning:RETURN_OF_INVALID_TYPE*/"hello";
-        }
-
-        foo() {
-          String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
-          int z = new B().x;
-        }
-    ''');
-    });
-
-    test('4', () {
-      checkFile('''
-        class A<T> {
-          T x;
-        }
-
-        class B<E> extends A<E> {
-          E y;
-          /*severe:INVALID_FIELD_OVERRIDE*/get x => y;
-        }
-
-        foo() {
-          int y = /*warning:INVALID_ASSIGNMENT*/new B<String>().x;
-          String z = new B<String>().x;
-        }
-    ''');
-    });
-
-    test('5', () {
-      checkFile('''
-        abstract class I<E> {
-          String m(a, String f(v, E e));
-        }
-
-        abstract class A<E> implements I<E> {
-          const A();
-          String m(a, String f(v, E e));
-        }
-
-        abstract class M {
-          final int y = 0;
-        }
-
-        class B<E> extends A<E> implements M {
-          const B();
-          int get y => 0;
-
-          m(a, f(v, E e)) {}
-        }
-
-        foo () {
-          int y = /*warning:INVALID_ASSIGNMENT*/new B().m(null, null);
-          String z = new B().m(null, null);
-        }
-    ''');
-    });
-  });
-
-  test('infer type regardless of declaration order or cycles', () {
     addFile(
         '''
-        import 'main.dart';
-
-        class B extends A { }
-      ''',
+class B {
+  static final b1 = 1;
+  final b2 = 1;
+}
+''',
         name: '/b.dart');
     checkFile('''
-        import 'b.dart';
-        class C extends B {
-          get x => null;
-        }
-        class A {
-          int get x => 0;
-        }
-        foo() {
-          int y = new C().x;
-          String z = /*warning:INVALID_ASSIGNMENT*/new C().x;
-        }
-    ''');
-  });
+import "a.dart";
 
-  // Note: this is a regression test for a non-deterministic behavior we used to
-  // have with inference in library cycles. If you see this test flake out,
-  // change `test` to `skip_test` and reopen bug #48.
-  test('infer types on generic instantiations in library cycle', () {
-    addFile(
-        '''
-          import 'main.dart';
-        abstract class I<E> {
-          A<E> m(a, String f(v, int e));
-        }
-      ''',
-        name: '/a.dart');
+test1() {
+  int x = 0;
+  // inference in A now works.
+  x = A.a1;
+  x = new A().a2;
+}
+''');
+  }
+
+  void test_conflictsCanHappen() {
     checkFile('''
-          import 'a.dart';
+class I1 {
+  int x;
+}
+class I2 extends I1 {
+  int y;
+}
 
-        abstract class A<E> implements I<E> {
-          const A();
+class A {
+  final I1 a = null;
+}
 
-          final E value = null;
-        }
+class B {
+  final I2 a = null;
+}
 
-        abstract class M {
-          final int y = 0;
-        }
+class C1 implements A, B {
+  /*severe:INVALID_METHOD_OVERRIDE*/get a => null;
+}
 
-        class B<E> extends A<E> implements M {
-          const B();
-          int get y => 0;
+// Still ambiguous
+class C2 implements B, A {
+  /*severe:INVALID_METHOD_OVERRIDE*/get a => null;
+}
+''');
+  }
 
-          m(a, f(v, int e)) {}
-        }
-
-        foo () {
-          int y = /*warning:INVALID_ASSIGNMENT*/new B<String>().m(null, null).value;
-          String z = new B<String>().m(null, null).value;
-        }
-    ''');
-  });
-
-  group('do not infer overridden fields that explicitly say dynamic', () {
-    test('infer', () {
-      checkFile('''
-          class A {
-            final int x = 2;
-          }
-
-          class B implements A {
-            /*severe:INVALID_METHOD_OVERRIDE*/dynamic get x => 3;
-          }
-
-          foo() {
-            String y = /*info:DYNAMIC_CAST*/new B().x;
-            int z = /*info:DYNAMIC_CAST*/new B().x;
-          }
-      ''');
-    });
-  });
-
-  test('conflicts can happen', () {
+  void test_conflictsCanHappen2() {
     checkFile('''
-        class I1 {
-          int x;
-        }
-        class I2 extends I1 {
-          int y;
-        }
+class I1 {
+  int x;
+}
+class I2 {
+  int y;
+}
 
-        class A {
-          final I1 a = null;
-        }
+class I3 implements I1, I2 {
+  int x;
+  int y;
+}
 
-        class B {
-          final I2 a = null;
-        }
+class A {
+  final I1 a = null;
+}
 
-        class C1 implements A, B {
-          /*severe:INVALID_METHOD_OVERRIDE*/get a => null;
-        }
+class B {
+  final I2 a = null;
+}
 
-        // Still ambiguous
-        class C2 implements B, A {
-          /*severe:INVALID_METHOD_OVERRIDE*/get a => null;
-        }
-    ''');
-  });
+class C1 implements A, B {
+  I3 get a => null;
+}
 
-  test('conflicts can happen 2', () {
+class C2 implements A, B {
+  /*severe:INVALID_METHOD_OVERRIDE*/get a => null;
+}
+''');
+  }
+
+  void test_doNotInferOverriddenFieldsThatExplicitlySayDynamic_infer() {
     checkFile('''
-        class I1 {
-          int x;
-        }
-        class I2 {
-          int y;
-        }
+class A {
+  final int x = 2;
+}
 
-        class I3 implements I1, I2 {
-          int x;
-          int y;
-        }
+class B implements A {
+  /*severe:INVALID_METHOD_OVERRIDE*/dynamic get x => 3;
+}
 
-        class A {
-          final I1 a = null;
-        }
+foo() {
+  String y = /*info:DYNAMIC_CAST*/new B().x;
+  int z = /*info:DYNAMIC_CAST*/new B().x;
+}
+''');
+  }
 
-        class B {
-          final I2 a = null;
-        }
-
-        class C1 implements A, B {
-          I3 get a => null;
-        }
-
-        class C2 implements A, B {
-          /*severe:INVALID_METHOD_OVERRIDE*/get a => null;
-        }
-    ''');
-  });
-
-  test('infer from RHS only if it wont conflict with overridden fields', () {
+  void test_dontInferFieldTypeWhenInitializerIsNull() {
     checkFile('''
-        class A {
-          var x;
-        }
+var x = null;
+var y = 3;
+class A {
+  static var x = null;
+  static var y = 3;
 
-        class B implements A {
-          var x = 2;
-        }
+  var x2 = null;
+  var y2 = 3;
+}
 
-        foo() {
-          String y = /*info:DYNAMIC_CAST*/new B().x;
-          int z = /*info:DYNAMIC_CAST*/new B().x;
-        }
-    ''');
-  });
+test() {
+  x = "hi";
+  y = /*warning:INVALID_ASSIGNMENT*/"hi";
+  A.x = "hi";
+  A.y = /*warning:INVALID_ASSIGNMENT*/"hi";
+  new A().x2 = "hi";
+  new A().y2 = /*warning:INVALID_ASSIGNMENT*/"hi";
+}
+''');
+  }
 
-  test('infer from RHS only if it wont conflict with overridden fields 2', () {
+  void test_dontInferTypeOnDynamic() {
     checkFile('''
-        class A {
-          final x = null;
-        }
+test() {
+  dynamic x = 3;
+  x = "hi";
+}
+''');
+  }
 
-        class B implements A {
-          final x = 2;
-        }
-
-        foo() {
-          String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
-          int z = new B().x;
-        }
-    ''');
-  });
-
-  test('infer correctly on multiple variables declared together', () {
+  void test_dontInferTypeWhenInitializerIsNull() {
     checkFile('''
-        class A {
-          var x, y = 2, z = "hi";
-        }
+test() {
+  var x = null;
+  x = "hi";
+  x = 3;
+}
+''');
+  }
 
-        class B implements A {
-          var x = 2, y = 3, z, w = 2;
-        }
-
-        foo() {
-          String s;
-          int i;
-
-          s = /*info:DYNAMIC_CAST*/new B().x;
-          s = /*warning:INVALID_ASSIGNMENT*/new B().y;
-          s = new B().z;
-          s = /*warning:INVALID_ASSIGNMENT*/new B().w;
-
-          i = /*info:DYNAMIC_CAST*/new B().x;
-          i = new B().y;
-          i = /*warning:INVALID_ASSIGNMENT*/new B().z;
-          i = new B().w;
-        }
-    ''');
-  });
-
-  test('infer consts transitively', () {
-    addFile(
-        '''
-        const b1 = 2;
-      ''',
-        name: '/b.dart');
-    addFile(
-        '''
-        import 'main.dart';
-        import 'b.dart';
-        const a1 = m2;
-        const a2 = b1;
-      ''',
-        name: '/a.dart');
+  void test_downwardInference_miscellaneous() {
     checkFile('''
-        import 'a.dart';
-        const m1 = a1;
-        const m2 = a2;
+typedef T Function2<S, T>(S x);
+class A<T> {
+  Function2<T, T> x;
+  A(this.x);
+}
+void main() {
+  {  // Variables, nested literals
+    var x = "hello";
+    var y = 3;
+    void f(List<Map<int, String>> l) {};
+    f(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/{y: x}]);
+  }
+  {
+    int f(int x) => 0;
+    A<int> a = /*info:INFERRED_TYPE_ALLOCATION*/new A(f);
+  }
+}
+''');
+  }
 
-        foo() {
-          int i;
-          i = m1;
-        }
-    ''');
-  });
-
-  test('infer statics transitively', () {
-    addFile(
-        '''
-        final b1 = 2;
-      ''',
-        name: '/b.dart');
-    addFile(
-        '''
-        import 'main.dart';
-        import 'b.dart';
-        final a1 = m2;
-        class A {
-          static final a2 = b1;
-        }
-      ''',
-        name: '/a.dart');
+  void test_downwardsInferenceAnnotations() {
     checkFile('''
-        import 'a.dart';
-        final m1 = a1;
-        final m2 = A.a2;
+class Foo {
+  const Foo(List<String> l);
+  const Foo.named(List<String> l);
+}
+@Foo(/*info:INFERRED_TYPE_LITERAL*/const [])
+class Bar {}
+@Foo.named(/*info:INFERRED_TYPE_LITERAL*/const [])
+class Baz {}
+''');
+  }
 
-        foo() {
-          int i;
-          i = m1;
-        }
-    ''');
-  });
-
-  test('infer statics transitively 2', () {
+  void test_downwardsInferenceAssignmentStatements() {
     checkFile('''
-        const x1 = 1;
-        final x2 = 1;
-        final y1 = x1;
-        final y2 = x2;
+void main() {
+  List<int> l;
+  l = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
+  l = (l = /*info:INFERRED_TYPE_LITERAL*/[1]);
+}
+''');
+  }
 
-        foo() {
-          int i;
-          i = y1;
-          i = y2;
-        }
-    ''');
-  });
-
-  test('infer statics transitively 3', () {
-    addFile(
-        '''
-        const a1 = 3;
-        const a2 = 4;
-        class A {
-          static const a3 = null;
-        }
-      ''',
-        name: '/a.dart');
+  void test_downwardsInferenceAsyncAwait() {
     checkFile('''
-        import 'a.dart' show a1, A;
-        import 'a.dart' as p show a2, A;
-        const t1 = 1;
-        const t2 = t1;
-        const t3 = a1;
-        const t4 = p.a2;
-        const t5 = A.a3;
-        const t6 = p.A.a3;
+import 'dart:async';
+Future test() async {
+  dynamic d;
+  List<int> l0 = /*warning:DOWN_CAST_COMPOSITE should be pass*/await /*pass should be info:INFERRED_TYPE_LITERAL*/[d];
+  List<int> l1 = await /*info:INFERRED_TYPE_ALLOCATION*/new Future.value(/*info:INFERRED_TYPE_LITERAL*/[/*info:DYNAMIC_CAST*/d]);
+}
+''');
+  }
 
-        foo() {
-          int i;
-          i = t1;
-          i = t2;
-          i = t3;
-          i = t4;
-        }
-    ''');
-  });
-
-  test('infer statics with method invocations', () {
-    addFile(
-        '''
-        m3(String a, String b, [a1,a2]) {}
-      ''',
-        name: '/a.dart');
+  void test_downwardsInferenceForEach() {
     checkFile('''
-        import 'a.dart';
-        class T {
-          static final T foo = m1(m2(m3('', '')));
-          static T m1(String m) { return null; }
-          static String m2(e) { return ''; }
-        }
+import 'dart:async';
+Future main() async {
+  for(int x in /*info:INFERRED_TYPE_LITERAL*/[1, 2, 3]) {}
+  await for(int x in /*info:INFERRED_TYPE_ALLOCATION*/new Stream()) {}
+}
+''');
+  }
 
-
-    ''');
-  });
-
-  test('downwards inference: miscellaneous', () {
+  void test_downwardsInferenceInitializingFormalDefaultFormal() {
     checkFile('''
-      typedef T Function2<S, T>(S x);
-      class A<T> {
-        Function2<T, T> x;
-        A(this.x);
-      }
-      void main() {
-          {  // Variables, nested literals
-            var x = "hello";
-            var y = 3;
-            void f(List<Map<int, String>> l) {};
-            f(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/{y: x}]);
-          }
-          {
-            int f(int x) => 0;
-            A<int> a = /*info:INFERRED_TYPE_ALLOCATION*/new A(f);
-          }
-      }
-      ''');
-  });
+typedef T Function2<S, T>([S x]);
+class Foo {
+  List<int> x;
+  Foo([this.x = /*info:INFERRED_TYPE_LITERAL*/const [1]]);
+  Foo.named([List<int> x = /*info:INFERRED_TYPE_LITERAL*/const [1]]);
+}
+void f([List<int> l = /*info:INFERRED_TYPE_LITERAL*/const [1]]) {}
+// We do this inference in an early task but don't preserve the infos.
+Function2<List<int>, String> g = /*pass should be info:INFERRED_TYPE_CLOSURE*/([llll = /*info:INFERRED_TYPE_LITERAL*/const [1]]) => "hello";
+''');
+  }
 
-  group('downwards inference on instance creations', () {
-    test('infer downwards', () {
-      checkFile('''
-      class A<S, T> {
-        S x;
-        T y;
-        A(this.x, this.y);
-        A.named(this.x, this.y);
-      }
+  void test_downwardsInferenceOnConstructorArguments_inferDownwards() {
+    checkFile('''
+class F0 {
+  F0(List<int> a) {}
+}
+class F1 {
+  F1({List<int> a}) {}
+}
+class F2 {
+  F2(Iterable<int> a) {}
+}
+class F3 {
+  F3(Iterable<Iterable<int>> a) {}
+}
+class F4 {
+  F4({Iterable<Iterable<int>> a}) {}
+}
+void main() {
+  new F0(/*info:INFERRED_TYPE_LITERAL*/[]);
+  new F0(/*info:INFERRED_TYPE_LITERAL*/[3]);
+  new F0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  new F0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello",
+                                      3]);
 
-      class B<S, T> extends A<T, S> {
-        B(S y, T x) : super(x, y);
-        B.named(S y, T x) : super.named(x, y);
-      }
+  new F1(a: /*info:INFERRED_TYPE_LITERAL*/[]);
+  new F1(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
+  new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
 
-      class C<S> extends B<S, S> {
-        C(S a) : super(a, a);
-        C.named(S a) : super.named(a, a);
-      }
+  new F2(/*info:INFERRED_TYPE_LITERAL*/[]);
+  new F2(/*info:INFERRED_TYPE_LITERAL*/[3]);
+  new F2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  new F2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
 
-      class D<S, T> extends B<T, int> {
-        D(T a) : super(a, 3);
-        D.named(T a) : super.named(a, 3);
-      }
+  new F3(/*info:INFERRED_TYPE_LITERAL*/[]);
+  new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
+  new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
+  new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
+                   /*info:INFERRED_TYPE_LITERAL*/[3]]);
 
-      class E<S, T> extends A<C<S>, T> {
-        E(T a) : super(null, a);
-      }
+  new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]);
+  new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
+  new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
+  new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
+                      /*info:INFERRED_TYPE_LITERAL*/[3]]);
+}
+''');
+  }
 
-      class F<S, T> extends A<S, T> {
-        F(S x, T y, {List<S> a, List<T> b}) : super(x, y);
-        F.named(S x, T y, [S a, T b]) : super(a, b);
-      }
+  void test_downwardsInferenceOnFunctionArguments_inferDownwards() {
+    checkFile('''
+void f0(List<int> a) {}
+void f1({List<int> a}) {}
+void f2(Iterable<int> a) {}
+void f3(Iterable<Iterable<int>> a) {}
+void f4({Iterable<Iterable<int>> a}) {}
+void main() {
+  f0(/*info:INFERRED_TYPE_LITERAL*/[]);
+  f0(/*info:INFERRED_TYPE_LITERAL*/[3]);
+  f0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  f0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
 
-      void main() {
-        {
-          A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new A(3, "hello");
-          A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new A.named(3, "hello");
-          A<int, String> a2 = new A<int, String>(3, "hello");
-          A<int, String> a3 = new A<int, String>.named(3, "hello");
-          A<int, String> a4 = /*severe:STATIC_TYPE_ERROR*/new A<int, dynamic>(3, "hello");
-          A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new A<dynamic, dynamic>.named(3, "hello");
-        }
-        {
-          A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new A(
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
-          A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new A.named(
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
-        }
-        {
-          A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new B("hello", 3);
-          A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new B.named("hello", 3);
-          A<int, String> a2 = new B<String, int>("hello", 3);
-          A<int, String> a3 = new B<String, int>.named("hello", 3);
-          A<int, String> a4 = /*severe:STATIC_TYPE_ERROR*/new B<String, dynamic>("hello", 3);
-          A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new B<dynamic, dynamic>.named("hello", 3);
-        }
-        {
-          A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new B(
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
-          A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new B.named(
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
-        }
-        {
-          A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(3);
-          A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new C.named(3);
-          A<int, int> a2 = new C<int>(3);
-          A<int, int> a3 = new C<int>.named(3);
-          A<int, int> a4 = /*severe:STATIC_TYPE_ERROR*/new C<dynamic>(3);
-          A<int, int> a5 = /*severe:STATIC_TYPE_ERROR*/new C<dynamic>.named(3);
-        }
-        {
-          A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
-          A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new C.named(
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
-        }
-        {
-          A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new D("hello");
-          A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new D.named("hello");
-          A<int, String> a2 = new D<int, String>("hello");
-          A<int, String> a3 = new D<String, String>.named("hello");
-          A<int, String> a4 = /*severe:STATIC_TYPE_ERROR*/new D<num, dynamic>("hello");
-          A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new D<dynamic, dynamic>.named("hello");
-        }
-        {
-          A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new D(
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
-          A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new D.named(
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
-        }
-        { // Currently we only allow variable constraints.  Test that we reject.
-          A<C<int>, String> a0 = /*severe:STATIC_TYPE_ERROR*/new E("hello");
-        }
-        { // Check named and optional arguments
-          A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello",
-              a: /*info:INFERRED_TYPE_LITERAL*/[3],
-              b: /*info:INFERRED_TYPE_LITERAL*/["hello"]);
-          A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello",
-              a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
-              b: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3]);
-          A<int, String> a2 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello", 3, "hello");
-          A<int, String> a3 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello");
-          A<int, String> a4 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
-          A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
-              /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
-        }
-      }
-        ''');
-    });
-  });
+  f1(a: /*info:INFERRED_TYPE_LITERAL*/[]);
+  f1(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
+  f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
 
-  group('downwards inference on list literals', () {
-    test('infer downwards', () {
-      checkFile('''
-      void foo([List<String> list1 = /*info:INFERRED_TYPE_LITERAL*/const [],
-                List<String> list2 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]]) {
-      }
+  f2(/*info:INFERRED_TYPE_LITERAL*/[]);
+  f2(/*info:INFERRED_TYPE_LITERAL*/[3]);
+  f2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  f2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
 
-      void main() {
-        {
-          List<int> l0 = /*info:INFERRED_TYPE_LITERAL*/[];
-          List<int> l1 = /*info:INFERRED_TYPE_LITERAL*/[3];
-          List<int> l2 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
-          List<int> l3 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
-        }
-        {
-          List<dynamic> l0 = [];
-          List<dynamic> l1 = [3];
-          List<dynamic> l2 = ["hello"];
-          List<dynamic> l3 = ["hello", 3];
-        }
-        {
-          List<int> l0 = /*severe:STATIC_TYPE_ERROR*/<num>[];
-          List<int> l1 = /*severe:STATIC_TYPE_ERROR*/<num>[3];
-          List<int> l2 = /*severe:STATIC_TYPE_ERROR*/<num>[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
-          List<int> l3 = /*severe:STATIC_TYPE_ERROR*/<num>[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
-        }
-        {
-          Iterable<int> i0 = /*info:INFERRED_TYPE_LITERAL*/[];
-          Iterable<int> i1 = /*info:INFERRED_TYPE_LITERAL*/[3];
-          Iterable<int> i2 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
-          Iterable<int> i3 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
-        }
-        {
-          const List<int> c0 = /*info:INFERRED_TYPE_LITERAL*/const [];
-          const List<int> c1 = /*info:INFERRED_TYPE_LITERAL*/const [3];
-          const List<int> c2 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
-          const List<int> c3 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
-        }
-      }
-      ''');
-    });
+  f3(/*info:INFERRED_TYPE_LITERAL*/[]);
+  f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
+  f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
+  f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
 
-    test('infer if value types match context', () {
-      checkFile(r'''
+  f4(a: /*info:INFERRED_TYPE_LITERAL*/[]);
+  f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
+  f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
+  f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
+}
+''');
+  }
+
+  void test_downwardsInferenceOnFunctionExpressions() {
+    checkFile('''
+typedef T Function2<S, T>(S x);
+
+void main () {
+  {
+    Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null;
+    Function2<int, String> l1 = (int x) => "hello";
+    Function2<int, String> l2 = /*warning:INVALID_ASSIGNMENT*/(String x) => "hello";
+    Function2<int, String> l3 = /*warning:INVALID_ASSIGNMENT*/(int x) => 3;
+    Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
+  }
+  {
+    Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => null;
+    Function2<int, String> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => "hello";
+    Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*/(x) => 3;
+    Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
+    Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/x;};
+  }
+  {
+    Function2<int, List<String>> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null;
+    Function2<int, List<String>> l1 = (int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
+    Function2<int, List<String>> l2 = /*warning:INVALID_ASSIGNMENT*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
+    Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
+    Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
+  }
+  {
+    Function2<int, int> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x;
+    Function2<int, int> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x+1;
+    Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*/(x) => x;
+    Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/x.substring(3);
+    Function2<String, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x.substring(3);
+  }
+}
+''');
+  }
+
+  void test_downwardsInferenceOnFunctionOfTUsingTheT() {
+    checkFile('''
+void main () {
+  {
+    /*=T*/ f/*<T>*/(/*=T*/ x) => null;
+    var v1 = f;
+    v1 = /*info:INFERRED_TYPE_CLOSURE*//*<S>*/(x) => x;
+  }
+  {
+    /*=List<T>*/ f/*<T>*/(/*=T*/ x) => null;
+    var v2 = f;
+    v2 = /*info:INFERRED_TYPE_CLOSURE*//*<S>*/(x) => /*info:INFERRED_TYPE_LITERAL*/[x];
+    Iterable<int> r = v2(42);
+    Iterable<String> s = v2('hello');
+    Iterable<List<int>> t = v2(<int>[]);
+    Iterable<num> u = v2(42);
+    Iterable<num> v = v2/*<num>*/(42);
+  }
+}
+''');
+  }
+
+  void test_downwardsInferenceOnGenericConstructorArguments_inferDownwards() {
+    checkFile('''
+class F0<T> {
+  F0(List<T> a) {}
+}
+class F1<T> {
+  F1({List<T> a}) {}
+}
+class F2<T> {
+  F2(Iterable<T> a) {}
+}
+class F3<T> {
+  F3(Iterable<Iterable<T>> a) {}
+}
+class F4<T> {
+  F4({Iterable<Iterable<T>> a}) {}
+}
+void main() {
+  new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
+  new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[3]);
+  new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello",
+                                      3]);
+
+  new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]);
+  new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
+  new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
+
+  new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
+  new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[3]);
+  new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
+  new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
+
+  new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
+  new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
+  new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
+  new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
+                   /*info:INFERRED_TYPE_LITERAL*/[3]]);
+
+  new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]);
+  new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
+  new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
+  new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
+                      /*info:INFERRED_TYPE_LITERAL*/[3]]);
+
+  new F3(/*info:INFERRED_TYPE_LITERAL*/[]);
+  new F3(/*info:INFERRED_TYPE_LITERAL*/[[3]]);
+  new F3(/*info:INFERRED_TYPE_LITERAL*/[["hello"]]);
+  new F3(/*info:INFERRED_TYPE_LITERAL*/[["hello"], [3]]);
+
+  new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]);
+  new F4(a: /*info:INFERRED_TYPE_LITERAL*/[[3]]);
+  new F4(a: /*info:INFERRED_TYPE_LITERAL*/[["hello"]]);
+  new F4(a: /*info:INFERRED_TYPE_LITERAL*/[["hello"], [3]]);
+}
+''');
+  }
+
+  void test_downwardsInferenceOnGenericFunctionExpressions() {
+    checkFile('''
+void main () {
+  {
+    String f/*<S>*/(int x) => null;
+    var v = f;
+    v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null;
+    v = /*<T>*/(int x) => "hello";
+    v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(String x) => "hello";
+    v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(int x) => 3;
+    v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
+  }
+  {
+    String f/*<S>*/(int x) => null;
+    var v = f;
+    v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => null;
+    v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => "hello";
+    v = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*//*<T>*/(x) => 3;
+    v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
+    v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/x;};
+  }
+  {
+    List<String> f/*<S>*/(int x) => null;
+    var v = f;
+    v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null;
+    v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
+    v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
+    v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
+    v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
+  }
+  {
+    int int2int/*<S>*/(int x) => null;
+    String int2String/*<T>*/(int x) => null;
+    String string2String/*<T>*/(String x) => null;
+    var x = int2int;
+    x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x;
+    x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x+1;
+    var y = int2String;
+    y = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*//*<T>*/(x) => x;
+    y = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => /*info:DYNAMIC_INVOKE, info:DYNAMIC_CAST*/x.substring(3);
+    var z = string2String;
+    z = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x.substring(3);
+  }
+}
+''');
+  }
+
+  void test_downwardsInferenceOnInstanceCreations_inferDownwards() {
+    checkFile('''
+class A<S, T> {
+  S x;
+  T y;
+  A(this.x, this.y);
+  A.named(this.x, this.y);
+}
+
+class B<S, T> extends A<T, S> {
+  B(S y, T x) : super(x, y);
+  B.named(S y, T x) : super.named(x, y);
+}
+
+class C<S> extends B<S, S> {
+  C(S a) : super(a, a);
+  C.named(S a) : super.named(a, a);
+}
+
+class D<S, T> extends B<T, int> {
+  D(T a) : super(a, 3);
+  D.named(T a) : super.named(a, 3);
+}
+
+class E<S, T> extends A<C<S>, T> {
+  E(T a) : super(null, a);
+}
+
+class F<S, T> extends A<S, T> {
+  F(S x, T y, {List<S> a, List<T> b}) : super(x, y);
+  F.named(S x, T y, [S a, T b]) : super(a, b);
+}
+
+void main() {
+  {
+    A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new A(3, "hello");
+    A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new A.named(3, "hello");
+    A<int, String> a2 = new A<int, String>(3, "hello");
+    A<int, String> a3 = new A<int, String>.named(3, "hello");
+    A<int, String> a4 = /*severe:STATIC_TYPE_ERROR*/new A<int, dynamic>(3, "hello");
+    A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new A<dynamic, dynamic>.named(3, "hello");
+  }
+  {
+    A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new A(
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
+    A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new A.named(
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello",
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
+  }
+  {
+    A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new B("hello", 3);
+    A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new B.named("hello", 3);
+    A<int, String> a2 = new B<String, int>("hello", 3);
+    A<int, String> a3 = new B<String, int>.named("hello", 3);
+    A<int, String> a4 = /*severe:STATIC_TYPE_ERROR*/new B<String, dynamic>("hello", 3);
+    A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new B<dynamic, dynamic>.named("hello", 3);
+  }
+  {
+    A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new B(
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
+    A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new B.named(
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3,
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
+  }
+  {
+    A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(3);
+    A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new C.named(3);
+    A<int, int> a2 = new C<int>(3);
+    A<int, int> a3 = new C<int>.named(3);
+    A<int, int> a4 = /*severe:STATIC_TYPE_ERROR*/new C<dynamic>(3);
+    A<int, int> a5 = /*severe:STATIC_TYPE_ERROR*/new C<dynamic>.named(3);
+  }
+  {
+    A<int, int> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new C(
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
+    A<int, int> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new C.named(
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
+  }
+  {
+    A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new D("hello");
+    A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new D.named("hello");
+    A<int, String> a2 = new D<int, String>("hello");
+    A<int, String> a3 = new D<String, String>.named("hello");
+    A<int, String> a4 = /*severe:STATIC_TYPE_ERROR*/new D<num, dynamic>("hello");
+    A<int, String> a5 = /*severe:STATIC_TYPE_ERROR*/new D<dynamic, dynamic>.named("hello");
+  }
+  {
+    A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new D(
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
+    A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new D.named(
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
+  }
+  { // Currently we only allow variable constraints.  Test that we reject.
+    A<C<int>, String> a0 = /*severe:STATIC_TYPE_ERROR*/new E("hello");
+  }
+  { // Check named and optional arguments
+    A<int, String> a0 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello",
+        a: /*info:INFERRED_TYPE_LITERAL*/[3],
+        b: /*info:INFERRED_TYPE_LITERAL*/["hello"]);
+    A<int, String> a1 = /*info:INFERRED_TYPE_ALLOCATION*/new F(3, "hello",
+        a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
+        b: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3]);
+    A<int, String> a2 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello", 3, "hello");
+    A<int, String> a3 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello");
+    A<int, String> a4 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello", /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/3);
+    A<int, String> a5 = /*info:INFERRED_TYPE_ALLOCATION*/new F.named(3, "hello",
+        /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hello");
+  }
+}
+  ''');
+  }
+
+  void test_downwardsInferenceOnListLiterals_inferDownwards() {
+    checkFile('''
+void foo([List<String> list1 = /*info:INFERRED_TYPE_LITERAL*/const [],
+          List<String> list2 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]]) {
+}
+
+void main() {
+  {
+    List<int> l0 = /*info:INFERRED_TYPE_LITERAL*/[];
+    List<int> l1 = /*info:INFERRED_TYPE_LITERAL*/[3];
+    List<int> l2 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
+    List<int> l3 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
+  }
+  {
+    List<dynamic> l0 = [];
+    List<dynamic> l1 = [3];
+    List<dynamic> l2 = ["hello"];
+    List<dynamic> l3 = ["hello", 3];
+  }
+  {
+    List<int> l0 = /*severe:STATIC_TYPE_ERROR*/<num>[];
+    List<int> l1 = /*severe:STATIC_TYPE_ERROR*/<num>[3];
+    List<int> l2 = /*severe:STATIC_TYPE_ERROR*/<num>[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
+    List<int> l3 = /*severe:STATIC_TYPE_ERROR*/<num>[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
+  }
+  {
+    Iterable<int> i0 = /*info:INFERRED_TYPE_LITERAL*/[];
+    Iterable<int> i1 = /*info:INFERRED_TYPE_LITERAL*/[3];
+    Iterable<int> i2 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
+    Iterable<int> i3 = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
+  }
+  {
+    const List<int> c0 = /*info:INFERRED_TYPE_LITERAL*/const [];
+    const List<int> c1 = /*info:INFERRED_TYPE_LITERAL*/const [3];
+    const List<int> c2 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
+    const List<int> c3 = /*info:INFERRED_TYPE_LITERAL*/const [/*severe:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3];
+  }
+}
+''');
+  }
+
+  void test_downwardsInferenceOnListLiterals_inferIfValueTypesMatchContext() {
+    checkFile(r'''
 class DartType {}
 typedef void Asserter<T>(T type);
 typedef Asserter<T> AsserterBuilder<S, T>(S arg);
@@ -1237,9 +933,9 @@
     assertDOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
     assertEOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
   }
-}
+  }
 
-abstract class G<T> {
+  abstract class G<T> {
   AsserterBuilder<List<Asserter<DartType>>, DartType> assertAOf;
   AsserterBuilder<List<Asserter<DartType>>, DartType> get assertDOf;
 
@@ -1270,571 +966,305 @@
   g.assertAOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
   g.assertDOf(/*info:INFERRED_TYPE_LITERAL*/[_isInt, _isString]);
 }
-    ''');
-    });
-  });
+  ''');
+  }
 
-  group('downwards inference on function arguments', () {
-    test('infer downwards', () {
-      checkFile('''
-      void f0(List<int> a) {}
-      void f1({List<int> a}) {}
-      void f2(Iterable<int> a) {}
-      void f3(Iterable<Iterable<int>> a) {}
-      void f4({Iterable<Iterable<int>> a}) {}
-      void main() {
-        f0(/*info:INFERRED_TYPE_LITERAL*/[]);
-        f0(/*info:INFERRED_TYPE_LITERAL*/[3]);
-        f0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        f0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
-
-        f1(a: /*info:INFERRED_TYPE_LITERAL*/[]);
-        f1(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
-        f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        f1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
-
-        f2(/*info:INFERRED_TYPE_LITERAL*/[]);
-        f2(/*info:INFERRED_TYPE_LITERAL*/[3]);
-        f2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        f2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
-
-        f3(/*info:INFERRED_TYPE_LITERAL*/[]);
-        f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
-        f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
-        f3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
-
-        f4(a: /*info:INFERRED_TYPE_LITERAL*/[]);
-        f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
-        f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
-        f4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"], /*info:INFERRED_TYPE_LITERAL*/[3]]);
-      }
-      ''');
-    });
-  });
-
-  group('downwards inference on constructor arguments', () {
-    test('infer downwards', () {
-      checkFile('''
-      class F0 {
-        F0(List<int> a) {}
-      }
-      class F1 {
-        F1({List<int> a}) {}
-      }
-      class F2 {
-        F2(Iterable<int> a) {}
-      }
-      class F3 {
-        F3(Iterable<Iterable<int>> a) {}
-      }
-      class F4 {
-        F4({Iterable<Iterable<int>> a}) {}
-      }
-      void main() {
-        new F0(/*info:INFERRED_TYPE_LITERAL*/[]);
-        new F0(/*info:INFERRED_TYPE_LITERAL*/[3]);
-        new F0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        new F0(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello",
-                                            3]);
-
-        new F1(a: /*info:INFERRED_TYPE_LITERAL*/[]);
-        new F1(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
-        new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        new F1(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
-
-        new F2(/*info:INFERRED_TYPE_LITERAL*/[]);
-        new F2(/*info:INFERRED_TYPE_LITERAL*/[3]);
-        new F2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        new F2(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
-
-        new F3(/*info:INFERRED_TYPE_LITERAL*/[]);
-        new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
-        new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
-        new F3(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
-                         /*info:INFERRED_TYPE_LITERAL*/[3]]);
-
-        new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]);
-        new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
-        new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
-        new F4(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
-                            /*info:INFERRED_TYPE_LITERAL*/[3]]);
-      }
-      ''');
-    });
-  });
-
-  group('downwards inference on generic constructor arguments', () {
-    test('infer downwards', () {
-      checkFile('''
-      class F0<T> {
-        F0(List<T> a) {}
-      }
-      class F1<T> {
-        F1({List<T> a}) {}
-      }
-      class F2<T> {
-        F2(Iterable<T> a) {}
-      }
-      class F3<T> {
-        F3(Iterable<Iterable<T>> a) {}
-      }
-      class F4<T> {
-        F4({Iterable<Iterable<T>> a}) {}
-      }
-      void main() {
-        new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
-        new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[3]);
-        new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        new F0<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello",
-                                            3]);
-
-        new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]);
-        new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[3]);
-        new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        new F1<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
-
-        new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
-        new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[3]);
-        new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]);
-        new F2<int>(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello", 3]);
-
-        new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[]);
-        new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
-        new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
-        new F3<int>(/*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
-                         /*info:INFERRED_TYPE_LITERAL*/[3]]);
-
-        new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[]);
-        new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[3]]);
-        new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"]]);
-        new F4<int>(a: /*info:INFERRED_TYPE_LITERAL*/[/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"],
-                            /*info:INFERRED_TYPE_LITERAL*/[3]]);
-
-        new F3(/*info:INFERRED_TYPE_LITERAL*/[]);
-        new F3(/*info:INFERRED_TYPE_LITERAL*/[[3]]);
-        new F3(/*info:INFERRED_TYPE_LITERAL*/[["hello"]]);
-        new F3(/*info:INFERRED_TYPE_LITERAL*/[["hello"], [3]]);
-
-        new F4(a: /*info:INFERRED_TYPE_LITERAL*/[]);
-        new F4(a: /*info:INFERRED_TYPE_LITERAL*/[[3]]);
-        new F4(a: /*info:INFERRED_TYPE_LITERAL*/[["hello"]]);
-        new F4(a: /*info:INFERRED_TYPE_LITERAL*/[["hello"], [3]]);
-      }
-      ''');
-    });
-  });
-
-  group('downwards inference on map literals', () {
-    test('infer downwards', () {
-      checkFile('''
-      void foo([Map<int, String> m1 = /*info:INFERRED_TYPE_LITERAL*/const {1: "hello"},
-          Map<int, String> m2 = /*info:INFERRED_TYPE_LITERAL*/const {
-            // The warning is the type error, and the severe is the compile time
-            // error from const evaluation.
-            /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
-                "world"
-          }]) {
-      }
-      void main() {
-        {
-          Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
-          Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
-          Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{
-            /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello"
-          };
-          Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{
-            3: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
-          };
-          Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{
-            3: "hello",
-            /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
-                /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
-          };
-        }
-        {
-          Map<dynamic, dynamic> l0 = {};
-          Map<dynamic, dynamic> l1 = {3: "hello"};
-          Map<dynamic, dynamic> l2 = {"hello": "hello"};
-          Map<dynamic, dynamic> l3 = {3: 3};
-          Map<dynamic, dynamic> l4 = {3:"hello", "hello": 3};
-        }
-        {
-          Map<dynamic, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
-          Map<dynamic, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
-          Map<dynamic, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{"hello": "hello"};
-          Map<dynamic, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{
-            3: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
-          };
-          Map<dynamic, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{
-            3: "hello",
-            "hello": /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
-          };
-        }
-        {
-          Map<int, dynamic> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
-          Map<int, dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
-          Map<int, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/{
-            /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello"
-          };
-          Map<int, dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: 3};
-          Map<int, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL*/{
-            3:"hello",
-            /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": 3
-          };
-        }
-        {
-          Map<int, String> l0 = /*severe:STATIC_TYPE_ERROR*/<num, dynamic>{};
-          Map<int, String> l1 = /*severe:STATIC_TYPE_ERROR*/<num, dynamic>{3: "hello"};
-          Map<int, String> l3 = /*severe:STATIC_TYPE_ERROR*/<num, dynamic>{3: 3};
-        }
-        {
-          const Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/const {};
-          const Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/const {3: "hello"};
-          const Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/const {
-            /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
-                "hello"
-          };
-          const Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/const {
-            3: /*severe:MAP_VALUE_TYPE_NOT_ASSIGNABLE,warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
-          };
-          const Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/const {
-            3:"hello",
-            /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
-                /*severe:MAP_VALUE_TYPE_NOT_ASSIGNABLE,warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
-          };
-        }
-      }
-      ''');
-    });
-  });
-
-  test('downwards inference on function expressions', () {
+  void test_downwardsInferenceOnMapLiterals() {
     checkFile('''
-      typedef T Function2<S, T>(S x);
-
-      void main () {
-        {
-          Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null;
-          Function2<int, String> l1 = (int x) => "hello";
-          Function2<int, String> l2 = /*warning:INVALID_ASSIGNMENT*/(String x) => "hello";
-          Function2<int, String> l3 = /*warning:INVALID_ASSIGNMENT*/(int x) => 3;
-          Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
-        }
-        {
-          Function2<int, String> l0 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => null;
-          Function2<int, String> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => "hello";
-          Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*/(x) => 3;
-          Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
-          Function2<int, String> l4 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/x;};
-        }
-        {
-          Function2<int, List<String>> l0 = /*info:INFERRED_TYPE_CLOSURE*/(int x) => null;
-          Function2<int, List<String>> l1 = (int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
-          Function2<int, List<String>> l2 = /*warning:INVALID_ASSIGNMENT*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
-          Function2<int, List<String>> l3 = (int x) => /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
-          Function2<int, List<String>> l4 = /*info:INFERRED_TYPE_CLOSURE*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
-        }
-        {
-          Function2<int, int> l0 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x;
-          Function2<int, int> l1 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x+1;
-          Function2<int, String> l2 = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*/(x) => x;
-          Function2<int, String> l3 = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*/(x) => /*info:DYNAMIC_CAST, info:DYNAMIC_INVOKE*/x.substring(3);
-          Function2<String, String> l4 = /*info:INFERRED_TYPE_CLOSURE*/(x) => x.substring(3);
-        }
-      }
-      ''');
-  });
-
-  test('downwards inference on generic function expressions', () {
-    checkFile('''
-      void main () {
-        {
-          String f/*<S>*/(int x) => null;
-          var v = f;
-          v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null;
-          v = /*<T>*/(int x) => "hello";
-          v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(String x) => "hello";
-          v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(int x) => 3;
-          v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
-        }
-        {
-          String f/*<S>*/(int x) => null;
-          var v = f;
-          v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => null;
-          v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => "hello";
-          v = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*//*<T>*/(x) => 3;
-          v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/3;};
-          v = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) {return /*warning:RETURN_OF_INVALID_TYPE*/x;};
-        }
-        {
-          List<String> f/*<S>*/(int x) => null;
-          var v = f;
-          v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) => null;
-          v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
-          v = /*warning:INVALID_ASSIGNMENT*//*<T>*/(String x) => /*info:INFERRED_TYPE_LITERAL*/["hello"];
-          v = /*<T>*/(int x) => /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];
-          v = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(int x) {return /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/3];};
-        }
-        {
-          int int2int/*<S>*/(int x) => null;
-          String int2String/*<T>*/(int x) => null;
-          String string2String/*<T>*/(String x) => null;
-          var x = int2int;
-          x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x;
-          x = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x+1;
-          var y = int2String;
-          y = /*info:INFERRED_TYPE_CLOSURE, warning:INVALID_ASSIGNMENT*//*<T>*/(x) => x;
-          y = /*info:INFERRED_TYPE_CLOSURE, info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => /*info:DYNAMIC_INVOKE, info:DYNAMIC_CAST*/x.substring(3);
-          var z = string2String;
-          z = /*info:INFERRED_TYPE_CLOSURE*//*<T>*/(x) => x.substring(3);
-        }
-      }
-      ''');
-  });
-
-  test('downwards inference on function<T> using the T', () {
-    checkFile('''
-      void main () {
-        {
-          /*=T*/ f/*<T>*/(/*=T*/ x) => null;
-          var v1 = f;
-          v1 = /*info:INFERRED_TYPE_CLOSURE*//*<S>*/(x) => x;
-        }
-        {
-          /*=List<T>*/ f/*<T>*/(/*=T*/ x) => null;
-          var v2 = f;
-          v2 = /*info:INFERRED_TYPE_CLOSURE*//*<S>*/(x) => /*info:INFERRED_TYPE_LITERAL*/[x];
-          Iterable<int> r = v2(42);
-          Iterable<String> s = v2('hello');
-          Iterable<List<int>> t = v2(<int>[]);
-          Iterable<num> u = v2(42);
-          Iterable<num> v = v2/*<num>*/(42);
-        }
-      }
-    ''');
-  });
-
-  test('downwards inference initializing formal, default formal', () {
-    checkFile('''
-      typedef T Function2<S, T>([S x]);
-      class Foo {
-        List<int> x;
-        Foo([this.x = /*info:INFERRED_TYPE_LITERAL*/const [1]]);
-        Foo.named([List<int> x = /*info:INFERRED_TYPE_LITERAL*/const [1]]);
-      }
-      void f([List<int> l = /*info:INFERRED_TYPE_LITERAL*/const [1]]) {}
-      // We do this inference in an early task but don't preserve the infos.
-      Function2<List<int>, String> g = /*pass should be info:INFERRED_TYPE_CLOSURE*/([llll = /*info:INFERRED_TYPE_LITERAL*/const [1]]) => "hello";
-    ''');
-  });
-
-  test('downwards inference async/await', () {
-    checkFile('''
-      import 'dart:async';
-      Future test() async {
-        dynamic d;
-        List<int> l0 = /*warning:DOWN_CAST_COMPOSITE should be pass*/await /*pass should be info:INFERRED_TYPE_LITERAL*/[d];
-        List<int> l1 = await /*info:INFERRED_TYPE_ALLOCATION*/new Future.value(/*info:INFERRED_TYPE_LITERAL*/[/*info:DYNAMIC_CAST*/d]);
-      }
-    ''');
-  });
-
-  test('downwards inference foreach', () {
-    checkFile('''
-      import 'dart:async';
-      Future main() async {
-        for(int x in /*info:INFERRED_TYPE_LITERAL*/[1, 2, 3]) {}
-        await for(int x in /*info:INFERRED_TYPE_ALLOCATION*/new Stream()) {}
-      }
-    ''');
-  });
-
-  test('downwards inference yield/yield*', () {
-    checkFile('''
-      import 'dart:async';
-        Stream<List<int>> foo() async* {
-          yield /*info:INFERRED_TYPE_LITERAL*/[];
-          yield /*warning:YIELD_OF_INVALID_TYPE*/new Stream();
-          yield* /*warning:YIELD_OF_INVALID_TYPE*/[];
-          yield* /*info:INFERRED_TYPE_ALLOCATION*/new Stream();
-        }
-
-        Iterable<Map<int, int>> bar() sync* {
-          yield /*info:INFERRED_TYPE_LITERAL*/{};
-          yield /*warning:YIELD_OF_INVALID_TYPE*/new List();
-          yield* /*warning:YIELD_OF_INVALID_TYPE*/{};
-          yield* /*info:INFERRED_TYPE_ALLOCATION*/new List();
-        }
-        ''');
-  });
-
-  test('downwards inference, annotations', () {
-    checkFile('''
-        class Foo {
-          const Foo(List<String> l);
-          const Foo.named(List<String> l);
-        }
-        @Foo(/*info:INFERRED_TYPE_LITERAL*/const [])
-        class Bar {}
-        @Foo.named(/*info:INFERRED_TYPE_LITERAL*/const [])
-        class Baz {}
-        ''');
-  });
-
-  test('downwards inference, assignment statements', () {
-    checkFile('''
-    void main() {
-      List<int> l;
-      l = /*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/"hello"];
-      l = (l = /*info:INFERRED_TYPE_LITERAL*/[1]);
-    }
+void foo([Map<int, String> m1 = /*info:INFERRED_TYPE_LITERAL*/const {1: "hello"},
+    Map<int, String> m2 = /*info:INFERRED_TYPE_LITERAL*/const {
+      // The warning is the type error, and the severe is the compile time
+      // error from const evaluation.
+      /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
+          "world"
+    }]) {
+}
+void main() {
+  {
+    Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
+    Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
+    Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{
+      /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello"
+    };
+    Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{
+      3: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
+    };
+    Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{
+      3: "hello",
+      /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
+          /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
+    };
+  }
+  {
+    Map<dynamic, dynamic> l0 = {};
+    Map<dynamic, dynamic> l1 = {3: "hello"};
+    Map<dynamic, dynamic> l2 = {"hello": "hello"};
+    Map<dynamic, dynamic> l3 = {3: 3};
+    Map<dynamic, dynamic> l4 = {3:"hello", "hello": 3};
+  }
+  {
+    Map<dynamic, String> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
+    Map<dynamic, String> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
+    Map<dynamic, String> l2 = /*info:INFERRED_TYPE_LITERAL*/{"hello": "hello"};
+    Map<dynamic, String> l3 = /*info:INFERRED_TYPE_LITERAL*/{
+      3: /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
+    };
+    Map<dynamic, String> l4 = /*info:INFERRED_TYPE_LITERAL*/{
+      3: "hello",
+      "hello": /*warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
+    };
+  }
+  {
+    Map<int, dynamic> l0 = /*info:INFERRED_TYPE_LITERAL*/{};
+    Map<int, dynamic> l1 = /*info:INFERRED_TYPE_LITERAL*/{3: "hello"};
+    Map<int, dynamic> l2 = /*info:INFERRED_TYPE_LITERAL*/{
+      /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": "hello"
+    };
+    Map<int, dynamic> l3 = /*info:INFERRED_TYPE_LITERAL*/{3: 3};
+    Map<int, dynamic> l4 = /*info:INFERRED_TYPE_LITERAL*/{
+      3:"hello",
+      /*warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello": 3
+    };
+  }
+  {
+    Map<int, String> l0 = /*severe:STATIC_TYPE_ERROR*/<num, dynamic>{};
+    Map<int, String> l1 = /*severe:STATIC_TYPE_ERROR*/<num, dynamic>{3: "hello"};
+    Map<int, String> l3 = /*severe:STATIC_TYPE_ERROR*/<num, dynamic>{3: 3};
+  }
+  {
+    const Map<int, String> l0 = /*info:INFERRED_TYPE_LITERAL*/const {};
+    const Map<int, String> l1 = /*info:INFERRED_TYPE_LITERAL*/const {3: "hello"};
+    const Map<int, String> l2 = /*info:INFERRED_TYPE_LITERAL*/const {
+      /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
+          "hello"
+    };
+    const Map<int, String> l3 = /*info:INFERRED_TYPE_LITERAL*/const {
+      3: /*severe:MAP_VALUE_TYPE_NOT_ASSIGNABLE,warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
+    };
+    const Map<int, String> l4 = /*info:INFERRED_TYPE_LITERAL*/const {
+      3:"hello",
+      /*severe:MAP_KEY_TYPE_NOT_ASSIGNABLE,warning:MAP_KEY_TYPE_NOT_ASSIGNABLE*/"hello":
+          /*severe:MAP_VALUE_TYPE_NOT_ASSIGNABLE,warning:MAP_VALUE_TYPE_NOT_ASSIGNABLE*/3
+    };
+  }
+}
 ''');
-  });
+  }
 
-  test('inferred initializing formal checks default value', () {
+  void test_downwardsInferenceYieldYieldStar() {
     checkFile('''
-      class Foo {
-        var x = 1;
-        Foo([this.x = /*warning:INVALID_ASSIGNMENT*/"1"]);
-      }''');
-  });
+import 'dart:async';
+Stream<List<int>> foo() async* {
+  yield /*info:INFERRED_TYPE_LITERAL*/[];
+  yield /*warning:YIELD_OF_INVALID_TYPE*/new Stream();
+  yield* /*warning:YIELD_OF_INVALID_TYPE*/[];
+  yield* /*info:INFERRED_TYPE_ALLOCATION*/new Stream();
+}
 
-  group('generic methods', () {
-    test('dart:math min/max', () {
-      checkFile('''
-        import 'dart:math';
+Iterable<Map<int, int>> bar() sync* {
+  yield /*info:INFERRED_TYPE_LITERAL*/{};
+  yield /*warning:YIELD_OF_INVALID_TYPE*/new List();
+  yield* /*warning:YIELD_OF_INVALID_TYPE*/{};
+  yield* /*info:INFERRED_TYPE_ALLOCATION*/new List();
+}
+  ''');
+  }
 
-        void printInt(int x) => print(x);
-        void printDouble(double x) => print(x);
+  void test_genericMethods_basicDownwardInference() {
+    checkFile(r'''
+/*=T*/ f/*<S, T>*/(/*=S*/ s) => null;
+main() {
+  String x = f(42);
+  String y = (f)(42);
+}
+''');
+  }
 
-        num myMax(num x, num y) => max(x, y);
+  void test_genericMethods_correctlyRecognizeGenericUpperBound() {
+    // Regression test for https://github.com/dart-lang/sdk/issues/25740.
+    checkFile(r'''
+class Foo<T extends Pattern> {
+void method/*<U extends T>*/(dynamic/*=U*/ u) {}
+}
+main() {
+  new Foo().method/*<String>*/("str");
+  new Foo();
 
-        main() {
-          // Okay if static types match.
-          printInt(max(1, 2));
-          printInt(min(1, 2));
-          printDouble(max(1.0, 2.0));
-          printDouble(min(1.0, 2.0));
+  new Foo<String>().method("str");
+  new Foo().method("str");
 
-          // No help for user-defined functions from num->num->num.
-          printInt(/*info:DOWN_CAST_IMPLICIT*/myMax(1, 2));
-          printInt(myMax(1, 2) as int);
+  new Foo<String>().method(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/42);
+}
+''');
+  }
 
-          // Mixing int and double means return type is num.
-          printInt(/*info:DOWN_CAST_IMPLICIT*/max(1, 2.0));
-          printInt(/*info:DOWN_CAST_IMPLICIT*/min(1, 2.0));
-          printDouble(/*info:DOWN_CAST_IMPLICIT*/max(1, 2.0));
-          printDouble(/*info:DOWN_CAST_IMPLICIT*/min(1, 2.0));
+  void test_genericMethods_dartMathMinMax() {
+    checkFile('''
+import 'dart:math';
 
-          // Types other than int and double are not accepted.
-          printInt(
-              /*info:DOWN_CAST_IMPLICIT*/min(
-                  /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hi",
-                  /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"there"));
-        }
-    ''');
-    });
+void printInt(int x) => print(x);
+void printDouble(double x) => print(x);
 
-    test('Iterable and Future', () {
-      checkFile('''
-        import 'dart:async';
+num myMax(num x, num y) => max(x, y);
 
-        Future<int> make(int x) => (/*info:INFERRED_TYPE_ALLOCATION*/new Future(() => x));
+main() {
+  // Okay if static types match.
+  printInt(max(1, 2));
+  printInt(min(1, 2));
+  printDouble(max(1.0, 2.0));
+  printDouble(min(1.0, 2.0));
 
-        main() {
-          Iterable<Future<int>> list = <int>[1, 2, 3].map(make);
-          Future<List<int>> results = Future.wait(list);
-          Future<String> results2 = results.then((List<int> list)
-            => list.fold('', /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y.toString()));
-        }
-    ''');
-    });
+  // No help for user-defined functions from num->num->num.
+  printInt(/*info:DOWN_CAST_IMPLICIT*/myMax(1, 2));
+  printInt(myMax(1, 2) as int);
 
-    // TODO(jmesserly): we should change how this inference works.
-    // For now this test will cover what we use.
-    test('infer JS builtin', () {
-      checkFile('''
-        import 'dart:_foreign_helper' show JS;
-        main() {
-          String x = /*warning:INVALID_ASSIGNMENT*/JS('int', '42');
-          var y = JS('String', '"hello"');
-          y = "world";
-          y = /*warning:INVALID_ASSIGNMENT*/42;
-        }
-    ''');
-    });
+  // Mixing int and double means return type is num.
+  printInt(/*info:DOWN_CAST_IMPLICIT*/max(1, 2.0));
+  printInt(/*info:DOWN_CAST_IMPLICIT*/min(1, 2.0));
+  printDouble(/*info:DOWN_CAST_IMPLICIT*/max(1, 2.0));
+  printDouble(/*info:DOWN_CAST_IMPLICIT*/min(1, 2.0));
 
-    test('inferred generic instantiation', () {
-      checkFile('''
+  // Types other than int and double are not accepted.
+  printInt(
+      /*info:DOWN_CAST_IMPLICIT*/min(
+          /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"hi",
+          /*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/"there"));
+}
+''');
+  }
+
+  void test_genericMethods_doNotInferInvalidOverrideOfGenericMethod() {
+    checkFile('''
+class C {
+/*=T*/ m/*<T>*/(/*=T*/ x) => x;
+}
+class D extends C {
+/*severe:INVALID_METHOD_OVERRIDE*/m(x) => x;
+}
+main() {
+  int y = /*info:DYNAMIC_CAST*/new D()./*warning:WRONG_NUMBER_OF_TYPE_ARGUMENTS*/m/*<int>*/(42);
+  print(y);
+}
+''');
+  }
+
+  void test_genericMethods_downwardsInferenceAffectsArguments() {
+    checkFile(r'''
+/*=T*/ f/*<T>*/(List/*<T>*/ s) => null;
+main() {
+  String x = f(/*info:INFERRED_TYPE_LITERAL*/['hi']);
+  String y = f(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]);
+}
+''');
+  }
+
+  void test_genericMethods_downwardsInferenceFold() {
+    // Regression from https://github.com/dart-lang/sdk/issues/25491
+    // The first example works now, but the latter requires a full solution to
+    // https://github.com/dart-lang/sdk/issues/25490
+    checkFile(r'''
+void main() {
+  List<int> o;
+  int y = o.fold(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y);
+  var z = o.fold(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_INVOKE*/x + y);
+  y = /*info:DYNAMIC_CAST*/z;
+}
+void functionExpressionInvocation() {
+  List<int> o;
+  int y = (o.fold)(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y);
+  var z = (o.fold)(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_INVOKE*/x + y);
+  y = /*info:DYNAMIC_CAST*/z;
+}
+''');
+  }
+
+  void test_genericMethods_handleOverrideOfNonGenericWithGeneric() {
+    // Regression test for crash when adding genericity
+    checkFile('''
+class C {
+  m(x) => x;
+}
+class D extends C {
+  /*=T*/ m/*<T>*/(/*=T*/ x) => x;
+}
+main() {
+  int y = /*info:DYNAMIC_CAST*/(new D() as C).m(42);
+  print(y);
+}
+  ''');
+  }
+
+  void test_genericMethods_inferGenericInstantiation() {
+    checkFile('''
 import 'dart:math' as math;
 import 'dart:math' show min;
 
 class C {
-  /*=T*/ m/*<T extends num>*/(/*=T*/ x, /*=T*/ y) => null;
+/*=T*/ m/*<T extends num>*/(/*=T*/ x, /*=T*/ y) => null;
 }
 
 main() {
-  takeIII(math.max);
-  takeDDD(math.max);
-  takeNNN(math.max);
-  takeIDN(math.max);
-  takeDIN(math.max);
-  takeIIN(math.max);
-  takeDDN(math.max);
-  takeIIO(math.max);
-  takeDDO(math.max);
+takeIII(math.max);
+takeDDD(math.max);
+takeNNN(math.max);
+takeIDN(math.max);
+takeDIN(math.max);
+takeIIN(math.max);
+takeDDN(math.max);
+takeIIO(math.max);
+takeDDO(math.max);
 
-  takeOOI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
-  takeIDI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
-  takeDID(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
-  takeOON(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
-  takeOOO(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
+takeOOI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
+takeIDI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
+takeDID(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
+takeOON(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
+takeOOO(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/math.max);
 
-  // Also test SimpleIdentifier
-  takeIII(min);
-  takeDDD(min);
-  takeNNN(min);
-  takeIDN(min);
-  takeDIN(min);
-  takeIIN(min);
-  takeDDN(min);
-  takeIIO(min);
-  takeDDO(min);
+// Also test SimpleIdentifier
+takeIII(min);
+takeDDD(min);
+takeNNN(min);
+takeIDN(min);
+takeDIN(min);
+takeIIN(min);
+takeDDN(min);
+takeIIO(min);
+takeDDO(min);
 
-  takeOOI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
-  takeIDI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
-  takeDID(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
-  takeOON(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
-  takeOOO(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
+takeOOI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
+takeIDI(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
+takeDID(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
+takeOON(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
+takeOOO(/*severe:STATIC_TYPE_ERROR,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/min);
 
-  // Also PropertyAccess
-  takeIII(new C().m);
-  takeDDD(new C().m);
-  takeNNN(new C().m);
-  takeIDN(new C().m);
-  takeDIN(new C().m);
-  takeIIN(new C().m);
-  takeDDN(new C().m);
-  takeIIO(new C().m);
-  takeDDO(new C().m);
+// Also PropertyAccess
+takeIII(new C().m);
+takeDDD(new C().m);
+takeNNN(new C().m);
+takeIDN(new C().m);
+takeDIN(new C().m);
+takeIIN(new C().m);
+takeDDN(new C().m);
+takeIIO(new C().m);
+takeDDO(new C().m);
 
-  // Note: this is a warning because a downcast of a method tear-off could work
-  // (derived method can be a subtype):
-  //
-  //     class D extends C {
-  //       S m<S extends num>(Object x, Object y);
-  //     }
-  //
-  // That's legal because we're loosening parameter types.
-  //
-  takeOON(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
-  takeOOO(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
+// Note: this is a warning because a downcast of a method tear-off could work
+// (derived method can be a subtype):
+//
+//     class D extends C {
+//       S m<S extends num>(Object x, Object y);
+//     }
+//
+// That's legal because we're loosening parameter types.
+//
+takeOON(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
+takeOOO(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
 
-  // Note: this is a warning because a downcast of a method tear-off could work
-  // in "normal" Dart, due to bivariance.
-  takeOOI(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
-  takeIDI(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
-  takeDID(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
+// Note: this is a warning because a downcast of a method tear-off could work
+// in "normal" Dart, due to bivariance.
+takeOOI(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
+takeIDI(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
+takeDID(/*warning:DOWN_CAST_COMPOSITE,warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/new C().m);
 }
 
 void takeIII(int fn(int a, int b)) {}
@@ -1851,12 +1281,12 @@
 void takeOOI(int fn(Object a, Object b)) {}
 void takeIIO(Object fn(int a, int b)) {}
 void takeDDO(Object fn(double a, double b)) {}
-  ''');
-    });
+''');
+  }
 
+  void test_genericMethods_inferGenericMethodType() {
     // Regression test for https://github.com/dart-lang/sdk/issues/25668
-    test('infer generic method type', () {
-      checkFile('''
+    checkFile('''
 class C {
   /*=T*/ m/*<T>*/(/*=T*/ x) => x;
 }
@@ -1867,125 +1297,1082 @@
   int y = new D().m/*<int>*/(42);
   print(y);
 }
-    ''');
-    });
-
-    test('do not infer invalid override of generic method', () {
-      checkFile('''
-class C {
-  /*=T*/ m/*<T>*/(/*=T*/ x) => x;
-}
-class D extends C {
-  /*severe:INVALID_METHOD_OVERRIDE*/m(x) => x;
-}
-main() {
-  int y = /*info:DYNAMIC_CAST*/new D()./*warning:WRONG_NUMBER_OF_TYPE_ARGUMENTS*/m/*<int>*/(42);
-  print(y);
-}
-    ''');
-    });
-
-    // Regression test for crash when adding genericity
-    test('handle override of non-generic with generic', () {
-      checkFile('''
-class C {
-  m(x) => x;
-}
-class D extends C {
-  /*=T*/ m/*<T>*/(/*=T*/ x) => x;
-}
-main() {
-  int y = /*info:DYNAMIC_CAST*/(new D() as C).m(42);
-  print(y);
-}
-    ''');
-    });
-
-    test('correctly recognize generic upper bound', () {
-      // Regression test for https://github.com/dart-lang/sdk/issues/25740.
-      checkFile(r'''
-class Foo<T extends Pattern> {
-  void method/*<U extends T>*/(dynamic/*=U*/ u) {}
-}
-main() {
-  new Foo().method/*<String>*/("str");
-  new Foo();
-
-  new Foo<String>().method("str");
-  new Foo().method("str");
-
-  new Foo<String>().method(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/42);
-}
-      ''');
-    });
-
-    test('basic downwards inference', () {
-      checkFile(r'''
-/*=T*/ f/*<S, T>*/(/*=S*/ s) => null;
-main() {
-  String x = f(42);
-  String y = (f)(42);
-}
-      ''');
-    });
-
-    test('downwards inference affects arguments', () {
-      checkFile(r'''
-/*=T*/ f/*<T>*/(List/*<T>*/ s) => null;
-main() {
-  String x = f(/*info:INFERRED_TYPE_LITERAL*/['hi']);
-  String y = f(/*info:INFERRED_TYPE_LITERAL*/[/*warning:LIST_ELEMENT_TYPE_NOT_ASSIGNABLE*/42]);
-}
-      ''');
-    });
-
-    test('downwards inference fold', () {
-      // Regression from https://github.com/dart-lang/sdk/issues/25491
-      // The first example works now, but the latter requires a full solution to
-      // https://github.com/dart-lang/sdk/issues/25490
-      checkFile(r'''
-void main() {
-  List<int> o;
-  int y = o.fold(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y);
-  var z = o.fold(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_INVOKE*/x + y);
-  y = /*info:DYNAMIC_CAST*/z;
-}
-void functionExpressionInvocation() {
-  List<int> o;
-  int y = (o.fold)(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y);
-  var z = (o.fold)(0, /*info:INFERRED_TYPE_CLOSURE*/(x, y) => /*info:DYNAMIC_INVOKE*/x + y);
-  y = /*info:DYNAMIC_CAST*/z;
-}
-      ''');
-    });
-  });
-
-  // Regression test for https://github.com/dart-lang/dev_compiler/issues/47
-  test('null literal should not infer as bottom', () {
-    checkFile(r'''
-      var h = null;
-      void foo(int f(Object _)) {}
-
-      main() {
-        var f = (Object x) => null;
-        String y = /*info:DYNAMIC_CAST*/f(42);
-
-        f = /*info:INFERRED_TYPE_CLOSURE*/(x) => 'hello';
-
-        var g = null;
-        g = 'hello';
-        (/*info:DYNAMIC_INVOKE*/g.foo());
-
-        h = 'hello';
-        (/*info:DYNAMIC_INVOKE*/h.foo());
-
-        foo(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) => null);
-        foo(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) => throw "not implemented");
-      }
   ''');
-  });
+  }
 
-  test('list literals', () {
+  void test_genericMethods_inferJSBuiltin() {
+    // TODO(jmesserly): we should change how this inference works.
+    // For now this test will cover what we use.
+    checkFile('''
+import 'dart:_foreign_helper' show JS;
+main() {
+  String x = /*warning:INVALID_ASSIGNMENT*/JS('int', '42');
+  var y = JS('String', '"hello"');
+  y = "world";
+  y = /*warning:INVALID_ASSIGNMENT*/42;
+}
+''');
+  }
+
+  void test_genericMethods_IterableAndFuture() {
+    checkFile('''
+import 'dart:async';
+
+Future<int> make(int x) => (/*info:INFERRED_TYPE_ALLOCATION*/new Future(() => x));
+
+main() {
+  Iterable<Future<int>> list = <int>[1, 2, 3].map(make);
+  Future<List<int>> results = Future.wait(list);
+  Future<String> results2 = results.then((List<int> list)
+    => list.fold('', /*info:INFERRED_TYPE_CLOSURE*/(x, y) => x + y.toString()));
+}
+''');
+  }
+
+  void test_infer_assignToIndex() {
+    checkFile(r'''
+List<double> a = <double>[];
+var b = (a[0] = 1.0);
+''');
+  }
+
+  void test_infer_assignToProperty() {
+    checkFile(r'''
+class A {
+  int f;
+}
+var v_assign = (new A().f = 1);
+var v_plus = (new A().f += 1);
+var v_minus = (new A().f -= 1);
+var v_multiply = (new A().f *= 1);
+var v_prefix_pp = (++new A().f);
+var v_prefix_mm = (--new A().f);
+var v_postfix_pp = (new A().f++);
+var v_postfix_mm = (new A().f--);
+''');
+  }
+
+  void test_infer_assignToProperty_custom() {
+    checkFile(r'''
+class A {
+  int operator +(other) => 1;
+  double operator -(other) => 2.0;
+}
+class B {
+  A a;
+}
+var v_prefix_pp = (++new B().a);
+var v_prefix_mm = (--new B().a);
+var v_postfix_pp = (new B().a++);
+var v_postfix_mm = (new B().a--);
+''');
+  }
+
+  void test_infer_assignToRef() {
+    checkFile(r'''
+class A {
+  int f;
+}
+A a = new A();
+var b = (a.f = 1);
+var c = 0;
+var d = (c = 1);
+''');
+  }
+
+  void test_infer_binary_custom() {
+    checkFile(r'''
+class A {
+  int operator +(other) => 1;
+  double operator -(other) => 2.0;
+}
+var v_add = new A() + 'foo';
+var v_minus = new A() - 'bar';
+''');
+  }
+
+  void test_infer_binary_doubleDouble() {
+    checkFile(r'''
+var a_equal = 1.0 == 2.0;
+var a_notEqual = 1.0 != 2.0;
+var a_add = 1.0 + 2.0;
+var a_subtract = 1.0 - 2.0;
+var a_multiply = 1.0 * 2.0;
+var a_divide = 1.0 / 2.0;
+var a_floorDivide = 1.0 ~/ 2.0;
+var a_greater = 1.0 > 2.0;
+var a_less = 1.0 < 2.0;
+var a_greaterEqual = 1.0 >= 2.0;
+var a_lessEqual = 1.0 <= 2.0;
+var a_modulo = 1.0 % 2.0;
+''');
+  }
+
+  void test_infer_binary_doubleInt() {
+    checkFile(r'''
+var a_equal = 1.0 == 2;
+var a_notEqual = 1.0 != 2;
+var a_add = 1.0 + 2;
+var a_subtract = 1.0 - 2;
+var a_multiply = 1.0 * 2;
+var a_divide = 1.0 / 2;
+var a_floorDivide = 1.0 ~/ 2;
+var a_greater = 1.0 > 2;
+var a_less = 1.0 < 2;
+var a_greaterEqual = 1.0 >= 2;
+var a_lessEqual = 1.0 <= 2;
+var a_modulo = 1.0 % 2;
+''');
+  }
+
+  void test_infer_binary_intDouble() {
+    checkFile(r'''
+var a_equal = 1 == 2.0;
+var a_notEqual = 1 != 2.0;
+var a_add = 1 + 2.0;
+var a_subtract = 1 - 2.0;
+var a_multiply = 1 * 2.0;
+var a_divide = 1 / 2.0;
+var a_floorDivide = 1 ~/ 2.0;
+var a_greater = 1 > 2.0;
+var a_less = 1 < 2.0;
+var a_greaterEqual = 1 >= 2.0;
+var a_lessEqual = 1 <= 2.0;
+var a_modulo = 1 % 2.0;
+''');
+  }
+
+  void test_infer_binary_intInt() {
+    checkFile(r'''
+var a_equal = 1 == 2;
+var a_notEqual = 1 != 2;
+var a_bitXor = 1 ^ 2;
+var a_bitAnd = 1 & 2;
+var a_bitOr = 1 | 2;
+var a_bitShiftRight = 1 >> 2;
+var a_bitShiftLeft = 1 << 2;
+var a_add = 1 + 2;
+var a_subtract = 1 - 2;
+var a_multiply = 1 * 2;
+var a_divide = 1 / 2;
+var a_floorDivide = 1 ~/ 2;
+var a_greater = 1 > 2;
+var a_less = 1 < 2;
+var a_greaterEqual = 1 >= 2;
+var a_lessEqual = 1 <= 2;
+var a_modulo = 1 % 2;
+''');
+  }
+
+  void test_infer_conditional() {
+    checkFile(r'''
+var a = 1 == 2 ? 1 : 2.0;
+var b = 1 == 2 ? 1.0 : 2;
+''');
+  }
+
+  void test_infer_prefixExpression() {
+    checkFile(r'''
+var a_not = !true;
+var a_complement = ~1;
+var a_negate = -1;
+''');
+  }
+
+  void test_infer_prefixExpression_custom() {
+    checkFile(r'''
+class A {
+  A();
+  int operator ~() => 1;
+  double operator -() => 2.0;
+}
+var a = new A();
+var v_complement = ~a;
+var v_negate = -a;
+''');
+  }
+
+  void test_infer_throw() {
+    checkFile(r'''
+var t = true;
+var a = (throw 0);
+var b = (throw 0) ? 1 : 2;
+var c = t ? (throw 1) : 2;
+var d = t ? 1 : (throw 2);
+''');
+  }
+
+  void test_infer_typeCast() {
+    checkFile(r'''
+class A<T> {}
+class B<T> extends A<T> {
+  foo() {}
+}
+A<num> a = new B<int>();
+var b = (a as B<int>);
+main() {
+  b.foo();
+}
+''');
+  }
+
+  void test_infer_typedListLiteral() {
+    checkFile(r'''
+var a = <int>[];
+var b = <double>[1.0, 2.0, 3.0];
+var c = <List<int>>[];
+var d = <dynamic>[1, 2.0, false];
+''');
+  }
+
+  void test_infer_typedMapLiteral() {
+    checkFile(r'''
+var a = <int, String>{0: 'aaa', 1: 'bbb'};
+var b = <double, int>{1.1: 1, 2.2: 2};
+var c = <List<int>, Map<String, double>>{};
+var d = <int, dynamic>{};
+var e = <dynamic, int>{};
+var f = <dynamic, dynamic>{};
+''');
+  }
+
+  void test_infer_use_of_void() {
+    checkFile('''
+class B {
+  void f() {}
+}
+class C extends B {
+  f() {}
+}
+var x = new C()./*info:USE_OF_VOID_RESULT*/f();
+''');
+  }
+
+  void test_inferConstsTransitively() {
+    addFile(
+        '''
+const b1 = 2;
+''',
+        name: '/b.dart');
+    addFile(
+        '''
+import 'main.dart';
+import 'b.dart';
+const a1 = m2;
+const a2 = b1;
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+const m1 = a1;
+const m2 = a2;
+
+foo() {
+  int i;
+  i = m1;
+}
+''');
+  }
+
+  void test_inferCorrectlyOnMultipleVariablesDeclaredTogether() {
+    checkFile('''
+class A {
+  var x, y = 2, z = "hi";
+}
+
+class B implements A {
+  var x = 2, y = 3, z, w = 2;
+}
+
+foo() {
+  String s;
+  int i;
+
+  s = /*info:DYNAMIC_CAST*/new B().x;
+  s = /*warning:INVALID_ASSIGNMENT*/new B().y;
+  s = new B().z;
+  s = /*warning:INVALID_ASSIGNMENT*/new B().w;
+
+  i = /*info:DYNAMIC_CAST*/new B().x;
+  i = new B().y;
+  i = /*warning:INVALID_ASSIGNMENT*/new B().z;
+  i = new B().w;
+}
+''');
+  }
+
+  void test_inferenceInCyclesIsDeterministic() {
+    addFile(
+        '''
+import 'b.dart';
+class A {
+  static final a1 = B.b1;
+  final a2 = new B().b2;
+}
+''',
+        name: '/a.dart');
+    addFile(
+        '''
+class B {
+  static final b1 = 1;
+  final b2 = 1;
+}
+''',
+        name: '/b.dart');
+    addFile(
+        '''
+import "main.dart"; // creates a cycle
+
+class C {
+  static final c1 = 1;
+  final c2 = 1;
+}
+''',
+        name: '/c.dart');
+    addFile(
+        '''
+library e;
+import 'a.dart';
+part 'e2.dart';
+
+class E {
+  static final e1 = 1;
+  static final e2 = F.f1;
+  static final e3 = A.a1;
+  final e4 = 1;
+  final e5 = new F().f2;
+  final e6 = new A().a2;
+}
+''',
+        name: '/e.dart');
+    addFile(
+        '''
+part 'f2.dart';
+''',
+        name: '/f.dart');
+    addFile(
+        '''
+part of e;
+class F {
+  static final f1 = 1;
+  final f2 = 1;
+}
+''',
+        name: '/e2.dart');
+    checkFile('''
+import "a.dart";
+import "c.dart";
+import "e.dart";
+
+class D {
+  static final d1 = A.a1 + 1;
+  static final d2 = C.c1 + 1;
+  final d3 = new A().a2;
+  final d4 = new C().c2;
+}
+
+test1() {
+  int x = 0;
+  // inference in A works, it's not in a cycle
+  x = A.a1;
+  x = new A().a2;
+
+  // Within a cycle we allow inference when the RHS is well known, but
+  // not when it depends on other fields within the cycle
+  x = C.c1;
+  x = D.d1;
+  x = D.d2;
+  x = new C().c2;
+  x = new D().d3;
+  x = /*info:DYNAMIC_CAST*/new D().d4;
+
+
+  // Similarly if the library contains parts.
+  x = E.e1;
+  x = E.e2;
+  x = E.e3;
+  x = new E().e4;
+  x = /*info:DYNAMIC_CAST*/new E().e5;
+  x = new E().e6;
+  x = F.f1;
+  x = new F().f2;
+}
+''');
+  }
+
+  void test_inferFromComplexExpressionsIfOuterMostValueIsPrecise() {
+    checkFile('''
+class A { int x; B operator+(other) => null; }
+class B extends A { B(ignore); }
+var a = new A();
+// Note: it doesn't matter that some of these refer to 'x'.
+var b = new B(/*warning:UNDEFINED_IDENTIFIER*/x);  // allocations
+var c1 = [/*warning:UNDEFINED_IDENTIFIER*/x];      // list literals
+var c2 = const [];
+var d = <dynamic, dynamic>{'a': 'b'};     // map literals
+var e = new A()..x = 3; // cascades
+var f = 2 + 3;          // binary expressions are OK if the left operand
+                        // is from a library in a different strongest
+                        // conected component.
+var g = -3;
+var h = new A() + 3;
+var i = /*warning:UNDEFINED_OPERATOR*/- new A();
+var j = null as B;
+
+test1() {
+  a = /*warning:INVALID_ASSIGNMENT*/"hi";
+  a = new B(3);
+  b = /*warning:INVALID_ASSIGNMENT*/"hi";
+  b = new B(3);
+  c1 = [];
+  c1 = /*warning:INVALID_ASSIGNMENT*/{};
+  c2 = [];
+  c2 = /*warning:INVALID_ASSIGNMENT*/{};
+  d = {};
+  d = /*warning:INVALID_ASSIGNMENT*/3;
+  e = new A();
+  e = /*warning:INVALID_ASSIGNMENT*/{};
+  f = 3;
+  f = /*warning:INVALID_ASSIGNMENT*/false;
+  g = 1;
+  g = /*warning:INVALID_ASSIGNMENT*/false;
+  h = /*warning:INVALID_ASSIGNMENT*/false;
+  h = new B('b');
+  i = false;
+  j = new B('b');
+  j = /*warning:INVALID_ASSIGNMENT*/false;
+  j = /*warning:INVALID_ASSIGNMENT*/[];
+}
+''');
+  }
+
+  void test_inferFromRhsOnlyIfItWontConflictWithOverriddenFields() {
+    checkFile('''
+class A {
+  var x;
+}
+
+class B implements A {
+  var x = 2;
+}
+
+foo() {
+  String y = /*info:DYNAMIC_CAST*/new B().x;
+  int z = /*info:DYNAMIC_CAST*/new B().x;
+}
+''');
+  }
+
+  void test_inferFromRhsOnlyIfItWontConflictWithOverriddenFields2() {
+    checkFile('''
+class A {
+  final x = null;
+}
+
+class B implements A {
+  final x = 2;
+}
+
+foo() {
+  String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
+  int z = new B().x;
+}
+''');
+  }
+
+  void test_inferFromVariablesInCycleLibsWhenFlagIsOn() {
+    addFile(
+        '''
+import 'main.dart';
+var x = 2; // ok to infer
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+var y = x; // now ok :)
+
+test1() {
+  int t = 3;
+  t = x;
+  t = y;
+}
+''');
+  }
+
+  void test_inferFromVariablesInCycleLibsWhenFlagIsOn2() {
+    addFile(
+        '''
+import 'main.dart';
+class A { static var x = 2; }
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+class B { static var y = A.x; }
+
+test1() {
+  int t = 3;
+  t = A.x;
+  t = B.y;
+}
+''');
+  }
+
+  void test_inferFromVariablesInNonCycleImportsWithFlag() {
+    addFile(
+        '''
+var x = 2;
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+var y = x;
+
+test1() {
+  x = /*warning:INVALID_ASSIGNMENT*/"hi";
+  y = /*warning:INVALID_ASSIGNMENT*/"hi";
+}
+''');
+  }
+
+  void test_inferFromVariablesInNonCycleImportsWithFlag2() {
+    addFile(
+        '''
+class A { static var x = 2; }
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+class B { static var y = A.x; }
+
+test1() {
+  A.x = /*warning:INVALID_ASSIGNMENT*/"hi";
+  B.y = /*warning:INVALID_ASSIGNMENT*/"hi";
+}
+''');
+  }
+
+  void test_inferGenericMethodType_named() {
+    var unit = checkFile('''
+class C {
+  /*=T*/ m/*<T>*/(int a, {String b, /*=T*/ c}) => null;
+}
+var y = new C().m(1, b: 'bbb', c: 2.0);
+  ''');
+    expect(unit.topLevelVariables[0].type.toString(), 'double');
+  }
+
+  void test_inferGenericMethodType_positional() {
+    var unit = checkFile('''
+class C {
+  /*=T*/ m/*<T>*/(int a, [/*=T*/ b]) => null;
+}
+var y = new C().m(1, 2.0);
+  ''');
+    expect(unit.topLevelVariables[0].type.toString(), 'double');
+  }
+
+  void test_inferGenericMethodType_positional2() {
+    var unit = checkFile('''
+class C {
+  /*=T*/ m/*<T>*/(int a, [String b, /*=T*/ c]) => null;
+}
+var y = new C().m(1, 'bbb', 2.0);
+  ''');
+    expect(unit.topLevelVariables[0].type.toString(), 'double');
+  }
+
+  void test_inferGenericMethodType_required() {
+    var unit = checkFile('''
+class C {
+  /*=T*/ m/*<T>*/(/*=T*/ x) => x;
+}
+var y = new C().m(42);
+  ''');
+    expect(unit.topLevelVariables[0].type.toString(), 'int');
+  }
+
+  void test_inferIfComplexExpressionsReadPossibleInferredField() {
+    // but flags can enable this behavior.
+    addFile(
+        '''
+class A {
+  var x = 3;
+}
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+class B {
+  var y = 3;
+}
+final t1 = new A();
+final t2 = new A().x;
+final t3 = new B();
+final t4 = new B().y;
+
+test1() {
+  int i = 0;
+  A a;
+  B b;
+  a = t1;
+  i = t2;
+  b = t3;
+  i = /*info:DYNAMIC_CAST*/t4;
+  i = new B().y; // B.y was inferred though
+}
+''');
+  }
+
+  void test_inferListLiteralNestedInMapLiteral() {
+    checkFile(r'''
+class Resource {}
+class Folder extends Resource {}
+
+Resource getResource(String str) => null;
+
+class Foo<T> {
+  Foo(T t);
+}
+
+main() {
+  // List inside map
+  var map = <String, List<Folder>>{
+    'pkgA': /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/')],
+    'pkgB': /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgB/lib/')]
+  };
+  // Also try map inside list
+  var list = <Map<String, Folder>>[
+    /*info:INFERRED_TYPE_LITERAL*/{ 'pkgA': /*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/') },
+    /*info:INFERRED_TYPE_LITERAL*/{ 'pkgB': /*info:DOWN_CAST_IMPLICIT*/getResource('/pkgB/lib/') },
+  ];
+  // Instance creation too
+  var foo = new Foo<List<Folder>>(
+    /*info:INFERRED_TYPE_LITERAL*/[/*info:DOWN_CAST_IMPLICIT*/getResource('/pkgA/lib/')]
+  );
+}
+  ''');
+  }
+
+  void test_inferredInitializingFormalChecksDefaultValue() {
+    checkFile('''
+class Foo {
+  var x = 1;
+  Foo([this.x = /*warning:INVALID_ASSIGNMENT*/"1"]);
+}''');
+  }
+
+  void test_inferStaticsTransitively() {
+    addFile(
+        '''
+final b1 = 2;
+''',
+        name: '/b.dart');
+    addFile(
+        '''
+import 'main.dart';
+import 'b.dart';
+final a1 = m2;
+class A {
+  static final a2 = b1;
+}
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+final m1 = a1;
+final m2 = A.a2;
+
+foo() {
+  int i;
+  i = m1;
+}
+''');
+  }
+
+  void test_inferStaticsTransitively2() {
+    checkFile('''
+const x1 = 1;
+final x2 = 1;
+final y1 = x1;
+final y2 = x2;
+
+foo() {
+  int i;
+  i = y1;
+  i = y2;
+}
+''');
+  }
+
+  void test_inferStaticsTransitively3() {
+    addFile(
+        '''
+const a1 = 3;
+const a2 = 4;
+class A {
+  static const a3 = null;
+}
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart' show a1, A;
+import 'a.dart' as p show a2, A;
+const t1 = 1;
+const t2 = t1;
+const t3 = a1;
+const t4 = p.a2;
+const t5 = A.a3;
+const t6 = p.A.a3;
+
+foo() {
+  int i;
+  i = t1;
+  i = t2;
+  i = t3;
+  i = t4;
+}
+''');
+  }
+
+  void test_inferStaticsWithMethodInvocations() {
+    addFile(
+        '''
+m3(String a, String b, [a1,a2]) {}
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+class T {
+  static final T foo = m1(m2(m3('', '')));
+  static T m1(String m) { return null; }
+  static String m2(e) { return ''; }
+}
+''');
+  }
+
+  void test_inferTypeOnOverriddenFields2() {
+    checkFile('''
+class A {
+  int x = 2;
+}
+
+class B extends A {
+  /*severe:INVALID_FIELD_OVERRIDE*/get x => 3;
+}
+
+foo() {
+  String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
+  int z = new B().x;
+}
+''');
+  }
+
+  void test_inferTypeOnOverriddenFields4() {
+    checkFile('''
+class A {
+  final int x = 2;
+}
+
+class B implements A {
+  get x => 3;
+}
+
+foo() {
+  String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
+  int z = new B().x;
+}
+''');
+  }
+
+  void test_inferTypeOnVar() {
+    // Error also expected when declared type is `int`.
+    checkFile('''
+test1() {
+  int x = 3;
+  x = /*warning:INVALID_ASSIGNMENT*/"hi";
+}
+''');
+  }
+
+  void test_inferTypeOnVar2() {
+    checkFile('''
+test2() {
+  var x = 3;
+  x = /*warning:INVALID_ASSIGNMENT*/"hi";
+}
+''');
+  }
+
+  void test_inferTypeOnVarFromField() {
+    checkFile('''
+class A {
+  int x = 0;
+
+  test1() {
+    var a = x;
+    a = /*warning:INVALID_ASSIGNMENT*/"hi";
+    a = 3;
+    var b = y;
+    b = /*warning:INVALID_ASSIGNMENT*/"hi";
+    b = 4;
+    var c = z;
+    c = /*warning:INVALID_ASSIGNMENT*/"hi";
+    c = 4;
+  }
+
+  int y; // field def after use
+  final z = 42; // should infer `int`
+}
+''');
+  }
+
+  void test_inferTypeOnVarFromTopLevel() {
+    checkFile('''
+int x = 0;
+
+test1() {
+  var a = x;
+  a = /*warning:INVALID_ASSIGNMENT*/"hi";
+  a = 3;
+  var b = y;
+  b = /*warning:INVALID_ASSIGNMENT*/"hi";
+  b = 4;
+  var c = z;
+  c = /*warning:INVALID_ASSIGNMENT*/"hi";
+  c = 4;
+}
+
+int y = 0; // field def after use
+final z = 42; // should infer `int`
+''');
+  }
+
+  void test_inferTypeRegardlessOfDeclarationOrderOrCycles() {
+    addFile(
+        '''
+import 'main.dart';
+
+class B extends A { }
+''',
+        name: '/b.dart');
+    checkFile('''
+import 'b.dart';
+class C extends B {
+  get x => null;
+}
+class A {
+  int get x => 0;
+}
+foo() {
+  int y = new C().x;
+  String z = /*warning:INVALID_ASSIGNMENT*/new C().x;
+}
+''');
+  }
+
+  void test_inferTypesOnGenericInstantiations_3() {
+    checkFile('''
+class A<T> {
+  final T x = null;
+  final T w = null;
+}
+
+class B implements A<int> {
+  get x => 3;
+  get w => /*warning:RETURN_OF_INVALID_TYPE*/"hello";
+}
+
+foo() {
+  String y = /*warning:INVALID_ASSIGNMENT*/new B().x;
+  int z = new B().x;
+}
+''');
+  }
+
+  void test_inferTypesOnGenericInstantiations_4() {
+    checkFile('''
+class A<T> {
+  T x;
+}
+
+class B<E> extends A<E> {
+  E y;
+  /*severe:INVALID_FIELD_OVERRIDE*/get x => y;
+}
+
+foo() {
+  int y = /*warning:INVALID_ASSIGNMENT*/new B<String>().x;
+  String z = new B<String>().x;
+}
+''');
+  }
+
+  void test_inferTypesOnGenericInstantiations_5() {
+    checkFile('''
+abstract class I<E> {
+  String m(a, String f(v, E e));
+}
+
+abstract class A<E> implements I<E> {
+  const A();
+  String m(a, String f(v, E e));
+}
+
+abstract class M {
+  final int y = 0;
+}
+
+class B<E> extends A<E> implements M {
+  const B();
+  int get y => 0;
+
+  m(a, f(v, E e)) {}
+}
+
+foo () {
+  int y = /*warning:INVALID_ASSIGNMENT*/new B().m(null, null);
+  String z = new B().m(null, null);
+}
+''');
+  }
+
+  void test_inferTypesOnGenericInstantiations_infer() {
+    checkFile('''
+class A<T> {
+  final T x = null;
+}
+
+class B implements A<int> {
+  /*severe:INVALID_METHOD_OVERRIDE*/dynamic get x => 3;
+}
+
+foo() {
+  String y = /*info:DYNAMIC_CAST*/new B().x;
+  int z = /*info:DYNAMIC_CAST*/new B().x;
+}
+''');
+  }
+
+  void test_inferTypesOnGenericInstantiationsInLibraryCycle() {
+    // Note: this is a regression test for a non-deterministic behavior we used to
+    // have with inference in library cycles. If you see this test flake out,
+    // change `test` to `skip_test` and reopen bug #48.
+    addFile(
+        '''
+import 'main.dart';
+abstract class I<E> {
+  A<E> m(a, String f(v, int e));
+}
+''',
+        name: '/a.dart');
+    checkFile('''
+import 'a.dart';
+
+abstract class A<E> implements I<E> {
+  const A();
+
+  final E value = null;
+}
+
+abstract class M {
+  final int y = 0;
+}
+
+class B<E> extends A<E> implements M {
+  const B();
+  int get y => 0;
+
+  m(a, f(v, int e)) {}
+}
+
+foo () {
+  int y = /*warning:INVALID_ASSIGNMENT*/new B<String>().m(null, null).value;
+  String z = new B<String>().m(null, null).value;
+}
+''');
+  }
+
+  void test_inferTypesOnLoopIndices_forEachLoop() {
+    checkFile('''
+class Foo {
+  int bar = 42;
+}
+
+class Bar<T extends Iterable<String>> {
+  void foo(T t) {
+    for (var i in t) {
+      int x = /*warning:INVALID_ASSIGNMENT*/i;
+    }
+  }
+}
+
+class Baz<T, E extends Iterable<T>, S extends E> {
+  void foo(S t) {
+    for (var i in t) {
+      int x = /*warning:INVALID_ASSIGNMENT*/i;
+      T y = i;
+    }
+  }
+}
+
+test() {
+  var list = <Foo>[];
+  for (var x in list) {
+    String y = /*warning:INVALID_ASSIGNMENT*/x;
+  }
+
+  for (dynamic x in list) {
+    // The INVALID_ASSIGNMENT hint is because type propagation knows x is
+    // a Foo.
+    String y = /*info:DYNAMIC_CAST,info:INVALID_ASSIGNMENT*/x;
+  }
+
+  for (String x in /*warning:FOR_IN_OF_INVALID_ELEMENT_TYPE*/list) {
+    String y = x;
+  }
+
+  var z;
+  for(z in list) {
+    String y = /*info:DYNAMIC_CAST,info:INVALID_ASSIGNMENT*/z;
+  }
+
+  Iterable iter = list;
+  for (Foo /*info:DYNAMIC_CAST*/x in iter) {
+    var y = x;
+  }
+
+  dynamic iter2 = list;
+  for (Foo /*info:DYNAMIC_CAST*/x in /*info:DYNAMIC_CAST*/iter2) {
+    var y = x;
+  }
+
+  var map = <String, Foo>{};
+  // Error: map must be an Iterable.
+  for (var x in /*warning:FOR_IN_OF_INVALID_TYPE*/map) {
+    String y = /*info:DYNAMIC_CAST*/x;
+  }
+
+  // We're not properly inferring that map.keys is an Iterable<String>
+  // and that x is a String.
+  for (var x in map.keys) {
+    String y = x;
+  }
+}
+''');
+  }
+
+  void test_inferTypesOnLoopIndices_forLoopWithInference() {
+    checkFile('''
+test() {
+  for (var i = 0; i < 10; i++) {
+    int j = i + 1;
+  }
+}
+''');
+  }
+
+  void test_listLiterals() {
     checkFile(r'''
 test1() {
   var x = [1, 2, 3];
@@ -2000,21 +2387,39 @@
   x.add(4.0);
   List<int> y = /*info:ASSIGNMENT_CAST*/x;
 }
-    ''');
-  });
+  ''');
+  }
 
-  test('list literals should not infer bottom', () {
+  void test_listLiterals_topLevel() {
+    checkFile(r'''
+var x1 = [1, 2, 3];
+test1() {
+  x1.add(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi');
+  x1.add(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/4.0);
+  x1.add(4);
+  List<num> y = x1;
+}
+var x2 = [1, 2.0, 3];
+test2() {
+  x2.add(/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi');
+  x2.add(4.0);
+  List<int> y = /*info:ASSIGNMENT_CAST*/x2;
+}
+  ''');
+  }
+
+  void test_listLiteralsShouldNotInferBottom() {
     var unit = checkFile(r'''
 test1() {
   var x = [null];
   x.add(42);
 }
-    ''');
-    var x = unit.element.functions[0].localVariables[0];
+''');
+    var x = unit.functions[0].localVariables[0];
     expect(x.type.toString(), 'List<dynamic>');
-  });
+  }
 
-  test('map literals', () {
+  void test_mapLiterals() {
     checkFile(r'''
 test1() {
   var x = { 1: 'x', 2: 'y' };
@@ -2035,246 +2440,234 @@
   x[2] = p;
   Map<int, String> y = /*info:ASSIGNMENT_CAST*/x;
 }
-    ''');
-  });
+  ''');
+  }
 
-  test('map literals should not infer bottom', () {
+  void test_mapLiterals_topLevel() {
+    checkFile(r'''
+var x1 = { 1: 'x', 2: 'y' };
+test1() {
+  x1[3] = 'z';
+  x1[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi'] = 'w';
+  x1[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/4.0] = 'u';
+  x1[3] = /*warning:INVALID_ASSIGNMENT*/42;
+  Map<num, String> y = x1;
+}
+
+var x2 = { 1: 'x', 2: 'y', 3.0: new RegExp('.') };
+test2() {
+  x2[3] = 'z';
+  x2[/*warning:ARGUMENT_TYPE_NOT_ASSIGNABLE*/'hi'] = 'w';
+  x2[4.0] = 'u';
+  x2[3] = /*warning:INVALID_ASSIGNMENT*/42;
+  Pattern p = null;
+  x2[2] = p;
+  Map<int, String> y = /*info:ASSIGNMENT_CAST*/x2;
+}
+  ''');
+  }
+
+  void test_mapLiteralsShouldNotInferBottom() {
     var unit = checkFile(r'''
 test1() {
   var x = { null: null };
   x[3] = 'z';
 }
-
-    ''');
-    var x = unit.element.functions[0].localVariables[0];
+''');
+    var x = unit.functions[0].localVariables[0];
     expect(x.type.toString(), 'Map<dynamic, dynamic>');
-  });
+  }
 
-  group('block bodied lambdas', () {
-    // Original feature request: https://github.com/dart-lang/sdk/issues/25487
+  void test_noErrorWhenDeclaredTypeIsNumAndAssignedNull() {
+    checkFile('''
+test1() {
+  num x = 3;
+  x = null;
+}
+''');
+  }
 
-    test('basic', () {
-      checkFile(r'''
-        test1() {
-          List<int> o;
-          var y = o.map(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) { return x + 1; });
-          Iterable<int> z = y;
-        }
-      ''');
-    });
+  void test_nullLiteralShouldNotInferAsBottom() {
+    // Regression test for https://github.com/dart-lang/dev_compiler/issues/47
+    checkFile(r'''
+var h = null;
+void foo(int f(Object _)) {}
 
-    test('no return', () {
-      var mainUnit = checkFile(r'''
-        test1() {
-          List<int> o;
-          var y = o.map(/*info:INFERRED_TYPE_CLOSURE*/(x) { });
-          Iterable<int> z = /*warning:DOWN_CAST_COMPOSITE*/y;
-        }
-      ''');
-      var f = mainUnit.element.functions[0].localVariables[1];
-      expect(f.type.toString(), 'Iterable<dynamic>');
-    });
+main() {
+  var f = (Object x) => null;
+  String y = /*info:DYNAMIC_CAST*/f(42);
 
-    test('LUB', () {
-      checkFile(r'''
-        import 'dart:math' show Random;
-        test2() {
-          List<num> o;
-          var y = o.map(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) {
-            if (new Random().nextBool()) {
-              return x.toInt() + 1;
-            } else {
-              return x.toDouble();
-            }
-          });
-          Iterable<num> w = y;
-          Iterable<int> z = /*info:ASSIGNMENT_CAST*/y;
-        }
-      ''');
-    });
+  f = /*info:INFERRED_TYPE_CLOSURE*/(x) => 'hello';
 
-    group('does not infer bottom', () {
-      test('sync', () {
-        var mainUnit = checkFile(r'''
-          var h = null;
-          void foo(int f(Object _)) {}
+  var g = null;
+  g = 'hello';
+  (/*info:DYNAMIC_INVOKE*/g.foo());
 
-          main() {
-            var f = (Object x) { return null; };
-            String y = /*info:DYNAMIC_CAST*/f(42);
+  h = 'hello';
+  (/*info:DYNAMIC_INVOKE*/h.foo());
 
-            f = /*info:INFERRED_TYPE_CLOSURE*/(x) => 'hello';
+  foo(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) => null);
+  foo(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) => throw "not implemented");
+}
+''');
+  }
 
-            foo(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) { return null; });
-            foo(/*info:INFERRED_TYPE_CLOSURE,info:INFERRED_TYPE_CLOSURE*/(x) { throw "not implemented"; });
-          }
-        ''');
+  void test_propagateInferenceToFieldInClass() {
+    checkFile('''
+class A {
+  int x = 2;
+}
 
-        var f = mainUnit.element.functions[1].localVariables[0];
-        expect(f.type.toString(), '(Object) → dynamic');
-      });
+test() {
+  var a = new A();
+  A b = a;                      // doesn't require down cast
+  print(a.x);     // doesn't require dynamic invoke
+  print(a.x + 2); // ok to use in bigger expression
+}
+''');
+  }
 
-      test('sync*', () {
-        var mainUnit = checkFile(r'''
-          main() {
-            var f = () sync* { yield null; };
-            Iterable y = f();
-            Iterable<String> z = /*warning:DOWN_CAST_COMPOSITE*/f();
-            String s = /*info:DYNAMIC_CAST*/f().first;
-          }
-        ''');
+  void test_propagateInferenceToFieldInClassDynamicWarnings() {
+    checkFile('''
+class A {
+  int x = 2;
+}
 
-        var f = mainUnit.element.functions[0].localVariables[0];
-        expect(f.type.toString(), '() → Iterable<dynamic>');
-      });
+test() {
+  dynamic a = new A();
+  A b = /*info:DYNAMIC_CAST*/a;
+  print(/*info:DYNAMIC_INVOKE*/a.x);
+  print(/*info:DYNAMIC_INVOKE*/(/*info:DYNAMIC_INVOKE*/a.x) + 2);
+}
+''');
+  }
 
-      test('async', () {
-        var mainUnit = checkFile(r'''
-          import 'dart:async';
-          main() async {
-            var f = () async { return null; };
-            Future y = f();
-            Future<String> z = /*warning:DOWN_CAST_COMPOSITE*/f();
-            String s = /*info:DYNAMIC_CAST*/await f();
-          }
-        ''');
+  void test_propagateInferenceTransitively() {
+    checkFile('''
+class A {
+  int x = 2;
+}
 
-        var f = mainUnit.element.functions[0].localVariables[0];
-        expect(f.type.toString(), '() → Future<dynamic>');
-      });
+test5() {
+  var a1 = new A();
+  a1.x = /*warning:INVALID_ASSIGNMENT*/"hi";
 
-      test('async*', () {
-        var mainUnit = checkFile(r'''
-          import 'dart:async';
-          main() async {
-            var f = () async* { yield null; };
-            Stream y = f();
-            Stream<String> z = /*warning:DOWN_CAST_COMPOSITE*/f();
-            String s = /*info:DYNAMIC_CAST*/await f().first;
-          }
-        ''');
+  A a2 = new A();
+  a2.x = /*warning:INVALID_ASSIGNMENT*/"hi";
+}
+''');
+  }
 
-        var f = mainUnit.element.functions[0].localVariables[0];
-        expect(f.type.toString(), '() → Stream<dynamic>');
-      });
-    });
+  void test_propagateInferenceTransitively2() {
+    checkFile('''
+class A {
+  int x = 42;
+}
 
-    group('async', () {
-      test('all returns are values', () {
-        var mainUnit = checkFile(r'''
-          import 'dart:async';
-          import 'dart:math' show Random;
-          main() {
-            var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
-              if (new Random().nextBool()) {
-                return 1;
-              } else {
-                return 2.0;
-              }
-            };
-            Future<num> g = f();
-            Future<int> h = /*info:ASSIGNMENT_CAST*/f();
-          }
-        ''');
-        var f = mainUnit.element.functions[0].localVariables[0];
-        expect(f.type.toString(), '() → Future<num>');
-      });
+class B {
+  A a = new A();
+}
 
-      test('all returns are futures', () {
-        var mainUnit = checkFile(r'''
-          import 'dart:async';
-          import 'dart:math' show Random;
-          main() {
-            var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
-              if (new Random().nextBool()) {
-                return new Future<int>.value(1);
-              } else {
-                return new Future<double>.value(2.0);
-              }
-            };
-            Future<num> g = f();
-            Future<int> h = /*info:ASSIGNMENT_CAST*/f();
-          }
-        ''');
-        var f = mainUnit.element.functions[0].localVariables[0];
-        expect(f.type.toString(), '() → Future<num>');
-      });
+class C {
+  B b = new B();
+}
 
-      test('mix of values and futures', () {
-        var mainUnit = checkFile(r'''
-          import 'dart:async';
-          import 'dart:math' show Random;
-          main() {
-            var f = /*info:INFERRED_TYPE_CLOSURE*/() async {
-              if (new Random().nextBool()) {
-                return new Future<int>.value(1);
-              } else {
-                return 2.0;
-              }
-            };
-            Future<num> g = f();
-            Future<int> h = /*info:ASSIGNMENT_CAST*/f();
-          }
-        ''');
-        var f = mainUnit.element.functions[0].localVariables[0];
-        expect(f.type.toString(), '() → Future<num>');
-      });
-    });
+class D {
+  C c = new C();
+}
 
-    test('sync*', () {
-      var mainUnit = checkFile(r'''
-        main() {
-          var f = /*info:INFERRED_TYPE_CLOSURE*/() sync* {
-            yield 1;
-            yield* [3, 4.0];
-          };
-          Iterable<num> g = f();
-          Iterable<int> h = /*info:ASSIGNMENT_CAST*/f();
-        }
-      ''');
-      var f = mainUnit.element.functions[0].localVariables[0];
-      expect(f.type.toString(), '() → Iterable<num>');
-    });
+void main() {
+  var d1 = new D();
+  print(d1.c.b.a.x);
 
-    test('async*', () {
-      var mainUnit = checkFile(r'''
-        import 'dart:async';
-        main() {
-          var f = /*info:INFERRED_TYPE_CLOSURE*/() async* {
-            yield 1;
-            Stream<double> s;
-            yield* s;
-          };
-          Stream<num> g = f();
-          Stream<int> h = /*info:ASSIGNMENT_CAST*/f();
-        }
-      ''');
-      var f = mainUnit.element.functions[0].localVariables[0];
-      expect(f.type.toString(), '() → Stream<num>');
-    });
+  D d2 = new D();
+  print(d2.c.b.a.x);
+}
+''');
+  }
 
-    test('downwards incompatible with upwards inference', () {
-      var mainUnit = checkFile(r'''
-        main() {
-          String f() => null;
-          var g = f;
-          g = /*info:INFERRED_TYPE_CLOSURE*/() { return /*warning:RETURN_OF_INVALID_TYPE*/1; };
-        }
-      ''');
-      var f = mainUnit.element.functions[0].localVariables[0];
-      expect(f.type.toString(), '() → String');
-    });
+  void test_staticRefersToNonstaticField_inOtherLibraryCycle() {
+    addFile(
+        '''
+import 'b.dart';
+var x = new C().f;
+''',
+        name: '/a.dart');
+    addFile(
+        '''
+class C {
+  var f = 0;
+}
+''',
+        name: '/b.dart');
+    checkFile('''
+import 'a.dart';
+test() {
+  x = /*warning:INVALID_ASSIGNMENT*/"hi";
+}
+''');
+  }
 
-    test('nested lambdas', () {
-      var mainUnit = checkFile(r'''
-        main() {
-          var f = /*info:INFERRED_TYPE_CLOSURE*/() {
-            return /*info:INFERRED_TYPE_CLOSURE*/(int x) { return 2.0 * x; };
-          };
-        }
-      ''');
-      var f = mainUnit.element.functions[0].localVariables[0];
-      expect(f.type.toString(), '() → (int) → num');
-    });
-  });
+  void test_staticRefersToNonstaticField_inSameLibraryCycle() {
+    addFile(
+        '''
+import 'b.dart';
+var x = new C().f;
+class D {
+  var f = 0;
+}
+''',
+        name: '/a.dart');
+    addFile(
+        '''
+import 'a.dart';
+var y = new D().f;
+class C {
+  var f = 0;
+}
+''',
+        name: '/b.dart');
+    checkFile('''
+import 'a.dart';
+import 'b.dart';
+test() {
+  x = "hi";
+  y = "hi";
+}
+''');
+  }
+}
+
+@reflectiveTest
+class InferredTypeTest extends InferredTypeMixin {
+  /// Adds a file to check. The file should contain:
+  ///
+  ///   * all expected failures are listed in the source code using comments
+  ///     immediately in front of the AST node that should contain the error.
+  ///
+  ///   * errors are formatted as a token `level:Type`, where `level` is the
+  ///     logging level were the error would be reported at, and `Type` is the
+  ///     concrete subclass of [StaticInfo] that denotes the error.
+  ///
+  /// For example to check that an assignment produces a type error, you can
+  /// create a file like:
+  ///
+  ///     addFile('''
+  ///       String x = /*severe:STATIC_TYPE_ERROR*/3;
+  ///     ''');
+  ///     check();
+  ///
+  /// For a single file, you may also use [checkFile].
+  @override
+  void addFile(String content, {String name: '/main.dart'}) {
+    helper.addFile(content, name: name);
+  }
+
+  /// Adds a file using [helper.addFile] and calls [helper.check].
+  ///
+  /// Also returns the resolved compilation unit.
+  @override
+  CompilationUnitElement checkFile(String content) {
+    return helper.checkFile(content).element;
+  }
 }
diff --git a/pkg/analyzer/test/src/task/strong/test_all.dart b/pkg/analyzer/test/src/task/strong/test_all.dart
new file mode 100644
index 0000000..be9a178
--- /dev/null
+++ b/pkg/analyzer/test/src/task/strong/test_all.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library analyzer.test.src.task.strong.test_all;
+
+import 'package:unittest/unittest.dart';
+
+import '../../../utils.dart';
+import 'checker_test.dart' as checker_test;
+import 'inferred_type_test.dart' as inferred_type_test;
+
+/// Utility for manually running all tests.
+main() {
+  initializeTestEnvironment();
+  group('task tests', () {
+    checker_test.main();
+    inferred_type_test.main();
+  });
+}
diff --git a/pkg/analyzer/test/src/task/test_all.dart b/pkg/analyzer/test/src/task/test_all.dart
index 956a8e5..22108ff 100644
--- a/pkg/analyzer/test/src/task/test_all.dart
+++ b/pkg/analyzer/test/src/task/test_all.dart
@@ -20,6 +20,7 @@
 import 'model_test.dart' as model_test;
 import 'options_test.dart' as options_test;
 import 'options_work_manager_test.dart' as options_work_manager_test;
+import 'strong/test_all.dart' as strong_mode_test_all;
 import 'strong_mode_test.dart' as strong_mode_test;
 import 'yaml_test.dart' as yaml_test;
 
@@ -39,6 +40,7 @@
     model_test.main();
     options_test.main();
     options_work_manager_test.main();
+    strong_mode_test_all.main();
     strong_mode_test.main();
     yaml_test.main();
   });
diff --git a/pkg/analyzer/tool/task_dependency_graph/generate.dart b/pkg/analyzer/tool/task_dependency_graph/generate.dart
index 766ca03..2b904bb 100644
--- a/pkg/analyzer/tool/task_dependency_graph/generate.dart
+++ b/pkg/analyzer/tool/task_dependency_graph/generate.dart
@@ -42,9 +42,12 @@
 main() {
   String script = Platform.script.toFilePath(windows: Platform.isWindows);
   String pkgPath = normalize(join(dirname(script), '..', '..'));
-  GeneratedContent.generateAll(pkgPath, <GeneratedContent>[target]);
+  GeneratedContent.generateAll(pkgPath, <GeneratedContent>[target, htmlTarget]);
 }
 
+final GeneratedFile htmlTarget = new GeneratedFile(
+    'doc/tasks.html', (String pkgPath) => new Driver(pkgPath).generateHtml());
+
 final GeneratedFile target = new GeneratedFile(
     'tool/task_dependency_graph/tasks.dot',
     (String pkgPath) => new Driver(pkgPath).generateFileContents());
@@ -52,6 +55,7 @@
 typedef void GetterFinderCallback(PropertyAccessorElement element);
 
 class Driver {
+  static bool hasInitializedPlugins = false;
   PhysicalResourceProvider resourceProvider;
   AnalysisContext context;
   InterfaceType resultDescriptorType;
@@ -59,6 +63,7 @@
   ClassElement enginePluginClass;
   CompilationUnitElement taskUnitElement;
   InterfaceType extensionPointIdType;
+
   final String rootDir;
 
   Driver(String pkgPath) : rootDir = new Directory(pkgPath).absolute.path;
@@ -121,7 +126,28 @@
    * Generate the task dependency graph and return it as a [String].
    */
   String generateFileContents() {
-    AnalysisEngine.instance.processRequiredPlugins();
+    return '''
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+//
+// This file has been automatically generated.  Please do not edit it manually.
+// To regenerate the file, use the script
+// "pkg/analyzer/tool/task_dependency_graph/generate.dart".
+//
+// To render this graph using Graphviz (www.graphviz.org) use the command:
+// "dot tasks.dot -Tpdf -O".
+digraph G {
+${generateGraphData()}
+}
+''';
+  }
+
+  String generateGraphData() {
+    if (!hasInitializedPlugins) {
+      AnalysisEngine.instance.processRequiredPlugins();
+      hasInitializedPlugins = true;
+    }
     List<String> lines = <String>[];
     resourceProvider = PhysicalResourceProvider.INSTANCE;
     DartSdk sdk = DirectoryBasedDartSdk.defaultSdk;
@@ -197,20 +223,32 @@
       lines.add('  $result [shape=box]');
     }
     lines.sort();
+    return lines.join('\n');
+  }
+
+  String generateHtml() {
     return '''
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-//
-// This file has been automatically generated.  Please do not edit it manually.
-// To regenerate the file, use the script
-// "pkg/analyzer/tool/task_dependency_graph/generate.dart".
-//
-// To render this graph using Graphviz (www.graphviz.org) use the command:
-// "dot tasks.dot -Tpdf -O".
+<!DOCTYPE html>
+<html>
+<head>
+    <title>Analysis Task Dependency Graph</title>
+    <link rel="stylesheet" href="support/style.css">
+    <script src="support/viz.js"></script>
+    <script type="application/dart" src="support/web_app.dart.js"></script>
+    <script src="support/dart.js"></script>
+</head>
+<body>
+<button id="zoomBtn">Zoom</button>
+<script type="text/vnd.graphviz" id="dot">
 digraph G {
-${lines.join('\n')}
+  tooltip="Analysis Task Dependency Graph";
+  node [fontname=Helvetica];
+  edge [fontname=Helvetica, fontcolor=gray];
+${generateGraphData()}
 }
+</script>
+</body>
+</html>
 ''';
   }
 
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
index 428869f..7314a20 100644
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
@@ -254,27 +254,28 @@
   static ErrorSeverity computeSeverity(
       AnalysisError error, CommandLineOptions options,
       [AnalysisContext context]) {
+    bool isStrongMode = false;
     if (context != null) {
       ErrorProcessor processor = ErrorProcessor.getProcessor(context, error);
       // If there is a processor for this error, defer to it.
       if (processor != null) {
         return processor.severity;
       }
+      isStrongMode = context.analysisOptions.strongMode;
     }
 
     if (!options.enableTypeChecks &&
         error.errorCode.type == ErrorType.CHECKED_MODE_COMPILE_TIME_ERROR) {
       return ErrorSeverity.INFO;
-    }
-
-    if (options.hintsAreFatal && error.errorCode is HintCode) {
+    } else if (options.hintsAreFatal && error.errorCode is HintCode) {
+      return ErrorSeverity.ERROR;
+    } else if (options.lintsAreFatal && error.errorCode is LintCode) {
+      return ErrorSeverity.ERROR;
+    } else if (isStrongMode &&
+        error is StaticWarningCode &&
+        (error as StaticWarningCode).isStrongModeError) {
       return ErrorSeverity.ERROR;
     }
-
-    if (options.lintsAreFatal && error.errorCode is LintCode) {
-      return ErrorSeverity.ERROR;
-    }
-
     return error.errorCode.errorSeverity;
   }
 
@@ -302,6 +303,13 @@
     ErrorSeverity severity = computeSeverity(error, options, context);
     bool isOverridden = false;
 
+    // Skip TODOs categorically (unless escalated to ERROR or HINT.)
+    // https://github.com/dart-lang/sdk/issues/26215
+    if (error.errorCode.type == ErrorType.TODO &&
+        severity == ErrorSeverity.INFO) {
+      return null;
+    }
+
     // First check for a filter.
     if (severity == null) {
       // Null severity means the error has been explicitly ignored.
@@ -316,11 +324,6 @@
       if (severity == ErrorSeverity.INFO && options.disableHints) {
         return null;
       }
-
-      // Skip TODOs.
-      if (severity == ErrorType.TODO) {
-        return null;
-      }
     }
 
     return new ProcessedSeverity(severity, isOverridden);
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index 2256247..511c6c0 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -4,7 +4,6 @@
 
 library analyzer_cli.src.build_mode;
 
-import 'dart:convert';
 import 'dart:core' hide Resource;
 import 'dart:io' as io;
 
@@ -20,8 +19,8 @@
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
+import 'package:analyzer/src/summary/link.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
-import 'package:analyzer/src/summary/prelink.dart';
 import 'package:analyzer/src/summary/summarize_ast.dart';
 import 'package:analyzer/src/summary/summarize_elements.dart';
 import 'package:analyzer/task/dart.dart';
@@ -29,6 +28,10 @@
 import 'package:analyzer_cli/src/driver.dart';
 import 'package:analyzer_cli/src/error_formatter.dart';
 import 'package:analyzer_cli/src/options.dart';
+import 'package:protobuf/protobuf.dart';
+
+import 'message_grouper.dart';
+import 'worker_protocol.pb.dart';
 
 /**
  * Analyzer used when the "--build-mode" option is supplied.
@@ -95,20 +98,22 @@
 
     // Write summary.
     if (options.buildSummaryOutput != null) {
-      for (Source source in explicitSources) {
-        if (context.computeKindOf(source) == SourceKind.LIBRARY) {
-          if (options.buildSummaryFallback) {
-            assembler.addFallbackLibrary(source);
-          } else if (options.buildSummaryOnlyAst) {
-            _serializeAstBasedSummary(source);
-          } else {
-            LibraryElement libraryElement =
-                context.computeLibraryElement(source);
-            assembler.serializeLibraryElement(libraryElement);
+      if (options.buildSummaryOnlyAst && !options.buildSummaryFallback) {
+        _serializeAstBasedSummary(explicitSources);
+      } else {
+        for (Source source in explicitSources) {
+          if (context.computeKindOf(source) == SourceKind.LIBRARY) {
+            if (options.buildSummaryFallback) {
+              assembler.addFallbackLibrary(source);
+            } else {
+              LibraryElement libraryElement =
+                  context.computeLibraryElement(source);
+              assembler.serializeLibraryElement(libraryElement);
+            }
           }
-        }
-        if (options.buildSummaryFallback) {
-          assembler.addFallbackUnit(source);
+          if (options.buildSummaryFallback) {
+            assembler.addFallbackUnit(source);
+          }
         }
       }
       // Write the whole package bundle.
@@ -212,33 +217,28 @@
   }
 
   /**
-   * Serialize the library with the given [source] into [assembler] using only
-   * its AST, [UnlinkedUnit]s of input packages and ASTs (via [UnlinkedUnit]s)
-   * of package sources.
+   * Serialize the package with the given [sources] into [assembler] using only
+   * their ASTs and [LinkedUnit]s of input packages.
    */
-  void _serializeAstBasedSummary(Source source) {
-    Source resolveRelativeUri(String relativeUri) {
-      Source resolvedSource =
-          context.sourceFactory.resolveUri(source, relativeUri);
-      if (resolvedSource == null) {
-        context.sourceFactory.resolveUri(source, relativeUri);
-        throw new StateError('Could not resolve $relativeUri in the context of '
-            '$source (${source.runtimeType})');
-      }
-      return resolvedSource;
-    }
+  void _serializeAstBasedSummary(List<Source> sources) {
+    Set<String> sourceUris =
+        sources.map((Source s) => s.uri.toString()).toSet();
 
-    UnlinkedUnit _getUnlinkedUnit(Source source) {
+    LinkedLibrary _getDependency(String absoluteUri) =>
+        summaryDataStore.linkedMap[absoluteUri];
+
+    UnlinkedUnit _getUnit(String absoluteUri) {
       // Maybe an input package contains the source.
       {
-        String uriStr = source.uri.toString();
-        UnlinkedUnit unlinkedUnit = summaryDataStore.unlinkedMap[uriStr];
+        UnlinkedUnit unlinkedUnit = summaryDataStore.unlinkedMap[absoluteUri];
         if (unlinkedUnit != null) {
           return unlinkedUnit;
         }
       }
       // Parse the source and serialize its AST.
-      return uriToUnit.putIfAbsent(source.uri, () {
+      Uri uri = Uri.parse(absoluteUri);
+      Source source = context.sourceFactory.forUri2(uri);
+      return uriToUnit.putIfAbsent(uri, () {
         CompilationUnit unit = context.computeResult(source, PARSED_UNIT);
         UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
         assembler.addUnlinkedUnit(source, unlinkedUnit);
@@ -246,18 +246,9 @@
       });
     }
 
-    UnlinkedUnit getPart(String relativeUri) {
-      return _getUnlinkedUnit(resolveRelativeUri(relativeUri));
-    }
-
-    UnlinkedPublicNamespace getImport(String relativeUri) {
-      return getPart(relativeUri).publicNamespace;
-    }
-
-    UnlinkedUnitBuilder definingUnit = _getUnlinkedUnit(source);
-    LinkedLibraryBuilder linkedLibrary =
-        prelink(definingUnit, getPart, getImport);
-    assembler.addLinkedLibrary(source.uri.toString(), linkedLibrary);
+    Map<String, LinkedLibraryBuilder> linkResult =
+        link(sourceUris, _getDependency, _getUnit, options.strongMode);
+    linkResult.forEach(assembler.addLinkedLibrary);
   }
 
   /**
@@ -284,13 +275,33 @@
 }
 
 /**
- * Interface that every worker related data object has.
+ * Default implementation of [WorkerConnection] that works with stdio.
  */
-abstract class WorkDataObject {
-  /**
-   * Translate the data in this class into a JSON map.
-   */
-  Map<String, Object> toJson();
+class StdWorkerConnection implements WorkerConnection {
+  final MessageGrouper _messageGrouper;
+  final io.Stdout _stdoutStream;
+
+  StdWorkerConnection(io.Stdin stdinStream, this._stdoutStream)
+      : _messageGrouper = new MessageGrouper(stdinStream);
+
+  @override
+  WorkRequest readRequest() {
+    var buffer = _messageGrouper.next;
+    if (buffer == null) return null;
+
+    return new WorkRequest.fromBuffer(buffer);
+  }
+
+  @override
+  void writeResponse(WorkResponse response) {
+    var responseBuffer = response.writeToBuffer();
+
+    var writer = new CodedBufferWriter();
+    writer.writeInt32NoTag(responseBuffer.length);
+    writer.writeRawBytes(responseBuffer);
+
+    _stdoutStream.add(writer.toBuffer());
+  }
 }
 
 /**
@@ -298,14 +309,14 @@
  */
 abstract class WorkerConnection {
   /**
-   * Read a new line. Block until a line is read. Return `null` if EOF.
+   * Read a new [WorkRequest]. Returns [null] when there are no more requests.
    */
-  String readLineSync();
+  WorkRequest readRequest();
 
   /**
-   * Write the given [json] as a new line to the output.
+   * Write the given [response] as bytes to the output.
    */
-  void writeJson(Map<String, Object> json);
+  void writeResponse(WorkResponse response);
 }
 
 /**
@@ -320,17 +331,24 @@
   final StringBuffer errorBuffer = new StringBuffer();
   final StringBuffer outBuffer = new StringBuffer();
 
-  WorkerLoop(this.connection);
+  final String dartSdkPath;
 
-  factory WorkerLoop.std() {
-    WorkerConnection connection = new _StdWorkerConnection();
-    return new WorkerLoop(connection);
+  WorkerLoop(this.connection, {this.dartSdkPath});
+
+  factory WorkerLoop.std(
+      {io.Stdin stdinStream, io.Stdout stdoutStream, String dartSdkPath}) {
+    stdinStream ??= io.stdin;
+    stdoutStream ??= io.stdout;
+    WorkerConnection connection =
+        new StdWorkerConnection(stdinStream, stdoutStream);
+    return new WorkerLoop(connection, dartSdkPath: dartSdkPath);
   }
 
   /**
    * Performs analysis with given [options].
    */
   void analyze(CommandLineOptions options) {
+    options.dartSdkPath ??= dartSdkPath;
     new BuildMode(options, new AnalysisStats()).analyze();
   }
 
@@ -339,7 +357,7 @@
    */
   bool performSingle() {
     try {
-      WorkRequest request = _readRequest();
+      WorkRequest request = connection.readRequest();
       if (request == null) {
         return true;
       }
@@ -351,11 +369,15 @@
       // Analyze and respond.
       analyze(options);
       String msg = _getErrorOutputBuffersText();
-      _writeResponse(new WorkResponse(EXIT_CODE_OK, msg));
+      connection.writeResponse(new WorkResponse()
+        ..exitCode = EXIT_CODE_OK
+        ..output = msg);
     } catch (e, st) {
       String msg = _getErrorOutputBuffersText();
       msg += '$e \n $st';
-      _writeResponse(new WorkResponse(EXIT_CODE_ERROR, msg));
+      connection.writeResponse(new WorkResponse()
+        ..exitCode = EXIT_CODE_ERROR
+        ..output = msg);
     }
     return false;
   }
@@ -389,182 +411,4 @@
     }
     return msg;
   }
-
-  /**
-   * Read a new [WorkRequest]. Return `null` if EOF.
-   * Throw [ArgumentError] if cannot be parsed.
-   */
-  WorkRequest _readRequest() {
-    String line = connection.readLineSync();
-    if (line == null) {
-      return null;
-    }
-    Object json = JSON.decode(line);
-    if (json is Map) {
-      return new WorkRequest.fromJson(json);
-    } else {
-      throw new ArgumentError('The request line is not a  JSON object: $line');
-    }
-  }
-
-  void _writeResponse(WorkResponse response) {
-    Map<String, Object> json = response.toJson();
-    connection.writeJson(json);
-  }
-}
-
-/**
- * Input file.
- */
-class WorkInput implements WorkDataObject {
-  final String path;
-  final List<int> digest;
-
-  WorkInput(this.path, this.digest);
-
-  factory WorkInput.fromJson(Map<String, Object> json) {
-    // Parse path.
-    Object path2 = json['path'];
-    if (path2 == null) {
-      throw new ArgumentError('The field "path" is missing.');
-    }
-    if (path2 is! String) {
-      throw new ArgumentError('The field "path" must be a string.');
-    }
-    // Parse digest.
-    List<int> digest = const <int>[];
-    {
-      Object digestJson = json['digest'];
-      if (digestJson != null) {
-        if (digestJson is List && digestJson.every((e) => e is int)) {
-          digest = digestJson;
-        } else {
-          throw new ArgumentError(
-              'The field "digest" should be a list of int.');
-        }
-      }
-    }
-    // OK
-    return new WorkInput(path2, digest);
-  }
-
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> json = <String, Object>{};
-    if (path != null) {
-      json['path'] = path;
-    }
-    if (digest != null) {
-      json['digest'] = digest;
-    }
-    return json;
-  }
-}
-
-/**
- * Single work unit that Bazel sends to the worker.
- */
-class WorkRequest implements WorkDataObject {
-  /**
-   * Command line arguments for this request.
-   */
-  final List<String> arguments;
-
-  /**
-   * Input files that the worker is allowed to read during execution of this
-   * request.
-   */
-  final List<WorkInput> inputs;
-
-  WorkRequest(this.arguments, this.inputs);
-
-  factory WorkRequest.fromJson(Map<String, Object> json) {
-    // Parse arguments.
-    List<String> arguments = const <String>[];
-    {
-      Object argumentsJson = json['arguments'];
-      if (argumentsJson != null) {
-        if (argumentsJson is List && argumentsJson.every((e) => e is String)) {
-          arguments = argumentsJson;
-        } else {
-          throw new ArgumentError(
-              'The field "arguments" should be a list of strings.');
-        }
-      }
-    }
-    // Parse inputs.
-    List<WorkInput> inputs = const <WorkInput>[];
-    {
-      Object inputsJson = json['inputs'];
-      if (inputsJson != null) {
-        if (inputsJson is List &&
-            inputsJson.every((e) {
-              return e is Map && e.keys.every((key) => key is String);
-            })) {
-          inputs = inputsJson
-              .map((Map input) => new WorkInput.fromJson(input))
-              .toList();
-        } else {
-          throw new ArgumentError(
-              'The field "inputs" should be a list of objects.');
-        }
-      }
-    }
-    // No inputs.
-    if (arguments.isEmpty && inputs.isEmpty) {
-      throw new ArgumentError('Both "arguments" and "inputs" cannot be empty.');
-    }
-    // OK
-    return new WorkRequest(arguments, inputs);
-  }
-
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> json = <String, Object>{};
-    if (arguments != null) {
-      json['arguments'] = arguments;
-    }
-    if (inputs != null) {
-      json['inputs'] = inputs.map((input) => input.toJson()).toList();
-    }
-    return json;
-  }
-}
-
-/**
- * Result that the worker sends back to Bazel when it finished its work on a
- * [WorkRequest] message.
- */
-class WorkResponse implements WorkDataObject {
-  final int exitCode;
-  final String output;
-
-  WorkResponse(this.exitCode, this.output);
-
-  @override
-  Map<String, Object> toJson() {
-    Map<String, Object> json = <String, Object>{};
-    if (exitCode != null) {
-      json['exit_code'] = exitCode;
-    }
-    if (output != null) {
-      json['output'] = output;
-    }
-    return json;
-  }
-}
-
-/**
- * Default implementation of [WorkerConnection] that works with stdio.
- */
-class _StdWorkerConnection implements WorkerConnection {
-  @override
-  String readLineSync() {
-    return io.stdin.readLineSync();
-  }
-
-  @override
-  void writeJson(Map<String, Object> json) {
-    io.stdout.writeln(JSON.encode(json));
-  }
 }
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index f3016d5..a05f81e 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -245,7 +245,7 @@
   ErrorSeverity _buildModeAnalyze(CommandLineOptions options) {
     return _analyzeAllTag.makeCurrentWhile(() {
       if (options.buildModePersistentWorker) {
-        new WorkerLoop.std().run();
+        new WorkerLoop.std(dartSdkPath: options.dartSdkPath).run();
       } else {
         return new BuildMode(options, stats).analyze();
       }
diff --git a/pkg/analyzer_cli/lib/src/message_grouper.dart b/pkg/analyzer_cli/lib/src/message_grouper.dart
new file mode 100644
index 0000000..8696796
--- /dev/null
+++ b/pkg/analyzer_cli/lib/src/message_grouper.dart
@@ -0,0 +1,112 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+import 'dart:typed_data';
+
+/// Groups stdin input into messages by interpreting it as
+/// base-128 encoded lengths interleaved with raw data.
+///
+/// The base-128 encoding is in little-endian order, with the high bit set on
+/// all bytes but the last.  This was chosen since it's the same as the
+/// base-128 encoding used by protobufs, so it allows a modest amount of code
+/// reuse at the other end of the protocol.
+///
+/// Possible future improvements to consider (should a debugging need arise):
+/// - Put a magic number at the beginning of the stream.
+/// - Use a guard byte between messages to sanity check that the encoder and
+///   decoder agree on the encoding of lengths.
+class MessageGrouper {
+  final _state = new _MessageGrouperState();
+  final Stdin _stdin;
+
+  MessageGrouper(this._stdin);
+
+  /// Blocks until the next full message is received, and then returns it.
+  ///
+  /// Returns null at end of file.
+  List<int> get next {
+    var message;
+    while (message == null) {
+    var nextByte = _stdin.readByteSync();
+    if (nextByte == -1) return null;
+      message = _state.handleInput(nextByte);
+    }
+    return message;
+  }
+}
+
+/// State held by the [MessageGrouper] while waiting for additional data to
+/// arrive.
+class _MessageGrouperState {
+  /// `true` means we are waiting to receive bytes of base-128 encoded length.
+  /// Some bytes of length may have been received already.
+  ///
+  /// `false` means we are waiting to receive more bytes of message data.  Some
+  /// bytes of message data may have been received already.
+  bool waitingForLength = true;
+
+  /// If [waitingForLength] is `true`, the decoded value of the length bytes
+  /// received so far (if any).  If [waitingForLength] is `false`, the decoded
+  /// length that was most recently received.
+  int length = 0;
+
+  /// If [waitingForLength] is `true`, the amount by which the next received
+  /// length byte must be left-shifted; otherwise undefined.
+  int lengthShift = 0;
+
+  /// If [waitingForLength] is `false`, a [Uint8List] which is ready to receive
+  /// message data.  Otherwise null.
+  Uint8List message;
+
+  /// If [waitingForLength] is `false`, the number of message bytes that have
+  /// been received so far.  Otherwise zero.
+  int numMessageBytesReceived;
+
+  _MessageGrouperState() {
+    reset();
+  }
+
+  /// Handle one byte at a time.
+  ///
+  /// Returns a [List<int>] of message bytes if [byte] was the last byte in a
+  /// message, otherwise returns [null].
+  List<int> handleInput(int byte) {
+    if (waitingForLength) {
+      length |= (byte & 0x7f) << lengthShift;
+      if ((byte & 0x80) == 0) {
+        waitingForLength = false;
+        message = new Uint8List(length);
+        if (length == 0) {
+          // There is no message data to wait for, so just go ahead and deliver the
+          // empty message.
+          var messageToReturn = message;
+          reset();
+          return messageToReturn;
+        }
+      } else {
+        lengthShift += 7;
+      }
+    } else {
+      message[numMessageBytesReceived] = byte;
+      numMessageBytesReceived++;
+      if (numMessageBytesReceived == length) {
+        var messageToReturn = message;
+        reset();
+        return messageToReturn;
+      }
+    }
+    return null;
+  }
+
+  /// Reset the state so that we are ready to receive the next base-128 encoded
+  /// length.
+  void reset() {
+    waitingForLength = true;
+    length = 0;
+    lengthShift = 0;
+    message = null;
+    numMessageBytesReceived = 0;
+  }
+}
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 2c543fa..fc778f4 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -263,6 +263,12 @@
   }
 
   static CommandLineOptions _parse(List<String> args) {
+    // Check if the args are in a file (bazel worker mode).
+    if (args.last.startsWith('@')) {
+      var argsFile = new File(args.last.substring(1));
+      args = argsFile.readAsLinesSync();
+    }
+
     args = args.expand((String arg) => arg.split('=')).toList();
     var parser = new CommandLineParser()
       ..addFlag('batch',
@@ -459,9 +465,20 @@
 
       // Persistent worker.
       if (args.contains('--persistent_worker')) {
-        if (args.length != 2 || !args.contains('--build-mode')) {
+        bool validArgs;
+        if (!args.contains('--build-mode')) {
+          validArgs = false;
+        } else if (args.length == 2) {
+          validArgs = true;
+        } else if (args.length == 4 && args.contains('--dart-sdk')) {
+          validArgs = true;
+        } else {
+          validArgs = false;
+        }
+        if (!validArgs) {
           printAndFail('The --persistent_worker flag should be used with and '
-              'only with the --build-mode flag.');
+              'only with the --build-mode flag, and possibly the --dart-sdk '
+              'option. Got: $args');
           return null; // Only reachable in testing.
         }
         return new CommandLineOptions._fromArgs(results, definedVariables);
diff --git a/pkg/analyzer_cli/lib/src/worker_protocol.pb.dart b/pkg/analyzer_cli/lib/src/worker_protocol.pb.dart
new file mode 100755
index 0000000..908dfac
--- /dev/null
+++ b/pkg/analyzer_cli/lib/src/worker_protocol.pb.dart
@@ -0,0 +1,133 @@
+///
+//  Generated code. Do not modify.
+///
+library blaze.worker_worker_protocol;
+
+import 'package:protobuf/protobuf.dart';
+
+class Input extends GeneratedMessage {
+  static final BuilderInfo _i = new BuilderInfo('Input')
+    ..a(1, 'path', PbFieldType.OS)
+    ..a(2, 'digest', PbFieldType.OY)
+    ..hasRequiredFields = false
+  ;
+
+  Input() : super();
+  Input.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
+  Input.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
+  Input clone() => new Input()..mergeFromMessage(this);
+  BuilderInfo get info_ => _i;
+  static Input create() => new Input();
+  static PbList<Input> createRepeated() => new PbList<Input>();
+  static Input getDefault() {
+    if (_defaultInstance == null) _defaultInstance = new _ReadonlyInput();
+    return _defaultInstance;
+  }
+  static Input _defaultInstance;
+  static void $checkItem(Input v) {
+    if (v is !Input) checkItemFailed(v, 'Input');
+  }
+
+  String get path => $_get(0, 1, '');
+  void set path(String v) { $_setString(0, 1, v); }
+  bool hasPath() => $_has(0, 1);
+  void clearPath() => clearField(1);
+
+  List<int> get digest => $_get(1, 2, null);
+  void set digest(List<int> v) { $_setBytes(1, 2, v); }
+  bool hasDigest() => $_has(1, 2);
+  void clearDigest() => clearField(2);
+}
+
+class _ReadonlyInput extends Input with ReadonlyMessageMixin {}
+
+class WorkRequest extends GeneratedMessage {
+  static final BuilderInfo _i = new BuilderInfo('WorkRequest')
+    ..p(1, 'arguments', PbFieldType.PS)
+    ..pp(2, 'inputs', PbFieldType.PM, Input.$checkItem, Input.create)
+    ..hasRequiredFields = false
+  ;
+
+  WorkRequest() : super();
+  WorkRequest.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
+  WorkRequest.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
+  WorkRequest clone() => new WorkRequest()..mergeFromMessage(this);
+  BuilderInfo get info_ => _i;
+  static WorkRequest create() => new WorkRequest();
+  static PbList<WorkRequest> createRepeated() => new PbList<WorkRequest>();
+  static WorkRequest getDefault() {
+    if (_defaultInstance == null) _defaultInstance = new _ReadonlyWorkRequest();
+    return _defaultInstance;
+  }
+  static WorkRequest _defaultInstance;
+  static void $checkItem(WorkRequest v) {
+    if (v is !WorkRequest) checkItemFailed(v, 'WorkRequest');
+  }
+
+  List<String> get arguments => $_get(0, 1, null);
+
+  List<Input> get inputs => $_get(1, 2, null);
+}
+
+class _ReadonlyWorkRequest extends WorkRequest with ReadonlyMessageMixin {}
+
+class WorkResponse extends GeneratedMessage {
+  static final BuilderInfo _i = new BuilderInfo('WorkResponse')
+    ..a(1, 'exitCode', PbFieldType.O3)
+    ..a(2, 'output', PbFieldType.OS)
+    ..hasRequiredFields = false
+  ;
+
+  WorkResponse() : super();
+  WorkResponse.fromBuffer(List<int> i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
+  WorkResponse.fromJson(String i, [ExtensionRegistry r = ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
+  WorkResponse clone() => new WorkResponse()..mergeFromMessage(this);
+  BuilderInfo get info_ => _i;
+  static WorkResponse create() => new WorkResponse();
+  static PbList<WorkResponse> createRepeated() => new PbList<WorkResponse>();
+  static WorkResponse getDefault() {
+    if (_defaultInstance == null) _defaultInstance = new _ReadonlyWorkResponse();
+    return _defaultInstance;
+  }
+  static WorkResponse _defaultInstance;
+  static void $checkItem(WorkResponse v) {
+    if (v is !WorkResponse) checkItemFailed(v, 'WorkResponse');
+  }
+
+  int get exitCode => $_get(0, 1, 0);
+  void set exitCode(int v) { $_setUnsignedInt32(0, 1, v); }
+  bool hasExitCode() => $_has(0, 1);
+  void clearExitCode() => clearField(1);
+
+  String get output => $_get(1, 2, '');
+  void set output(String v) { $_setString(1, 2, v); }
+  bool hasOutput() => $_has(1, 2);
+  void clearOutput() => clearField(2);
+}
+
+class _ReadonlyWorkResponse extends WorkResponse with ReadonlyMessageMixin {}
+
+const Input$json = const {
+  '1': 'Input',
+  '2': const [
+    const {'1': 'path', '3': 1, '4': 1, '5': 9},
+    const {'1': 'digest', '3': 2, '4': 1, '5': 12},
+  ],
+};
+
+const WorkRequest$json = const {
+  '1': 'WorkRequest',
+  '2': const [
+    const {'1': 'arguments', '3': 1, '4': 3, '5': 9},
+    const {'1': 'inputs', '3': 2, '4': 3, '5': 11, '6': '.blaze.worker.Input'},
+  ],
+};
+
+const WorkResponse$json = const {
+  '1': 'WorkResponse',
+  '2': const [
+    const {'1': 'exit_code', '3': 1, '4': 1, '5': 5},
+    const {'1': 'output', '3': 2, '4': 1, '5': 9},
+  ],
+};
+
diff --git a/pkg/analyzer_cli/pubspec.yaml b/pkg/analyzer_cli/pubspec.yaml
index 6e59161..a1b2fe8 100644
--- a/pkg/analyzer_cli/pubspec.yaml
+++ b/pkg/analyzer_cli/pubspec.yaml
@@ -12,6 +12,7 @@
   linter: ^0.1.10
   package_config: ^0.1.1
   plugin: ^0.1.0
+  protobuf: ^0.5.0
   yaml: ^2.1.2
 dev_dependencies:
   test_reflective_loader: '>=0.0.3 <0.1.0'
diff --git a/pkg/analyzer_cli/test/all.dart b/pkg/analyzer_cli/test/all.dart
index 13f72d1..05d8a98 100644
--- a/pkg/analyzer_cli/test/all.dart
+++ b/pkg/analyzer_cli/test/all.dart
@@ -6,6 +6,7 @@
 import 'build_mode_test.dart' as build_mode_test;
 import 'driver_test.dart' as driver;
 import 'error_test.dart' as error;
+import 'message_grouper_test.dart' as message_grouper;
 import 'options_test.dart' as options;
 import 'package_prefix_test.dart' as package_prefix;
 import 'perf_report_test.dart' as perf;
@@ -24,6 +25,7 @@
   //sdk_ext.main();
   //strong_mode.main();
   error.main();
+  message_grouper.main();
   options.main();
   perf.main();
   plugin_manager.main();
diff --git a/pkg/analyzer_cli/test/build_mode_test.dart b/pkg/analyzer_cli/test/build_mode_test.dart
index 29c4da6..dcc2423 100644
--- a/pkg/analyzer_cli/test/build_mode_test.dart
+++ b/pkg/analyzer_cli/test/build_mode_test.dart
@@ -4,38 +4,59 @@
 
 library analyzer_cli.test.built_mode;
 
+import 'dart:collection';
 import 'dart:convert';
+import 'dart:io';
 
 import 'package:analyzer_cli/src/build_mode.dart';
 import 'package:analyzer_cli/src/driver.dart';
 import 'package:analyzer_cli/src/options.dart';
+import 'package:analyzer_cli/src/worker_protocol.pb.dart';
+import 'package:protobuf/protobuf.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:typed_mock/typed_mock.dart';
 import 'package:unittest/unittest.dart';
 
+import 'utils.dart';
+
 main() {
   defineReflectiveTests(WorkerLoopTest);
-  defineReflectiveTests(WorkInputTest);
-  defineReflectiveTests(WorkRequestTest);
 }
 
 typedef void _TestWorkerLoopAnalyze(CommandLineOptions options);
 
 @reflectiveTest
 class WorkerLoopTest {
-  final _TestWorkerConnection connection = new _TestWorkerConnection();
+  final TestStdinStream stdinStream = new TestStdinStream();
+  final TestStdoutStream stdoutStream = new TestStdoutStream();
+  _TestWorkerConnection connection;
+
+  WorkerLoopTest() {
+    connection = new _TestWorkerConnection(this.stdinStream, this.stdoutStream);
+  }
 
   void setUp() {}
 
+  List<int> _serializeProto(GeneratedMessage message) {
+    var buffer = message.writeToBuffer();
+
+    var writer = new CodedBufferWriter();
+    writer.writeInt32NoTag(buffer.length);
+    writer.writeRawBytes(buffer);
+
+    return writer.toBuffer();
+  }
+
   test_run() {
-    _setInputLine(JSON.encode({
-      'arguments': [
-        '--build-summary-input=/tmp/1.sum',
-        '--build-summary-input=/tmp/2.sum',
-        'package:foo/foo.dart|/inputs/foo/lib/foo.dart',
-        'package:foo/bar.dart|/inputs/foo/lib/bar.dart'
-      ],
-    }));
+    var request = new WorkRequest();
+    request.arguments.addAll([
+      '--build-summary-input=/tmp/1.sum',
+      '--build-summary-input=/tmp/2.sum',
+      'package:foo/foo.dart|/inputs/foo/lib/foo.dart',
+      'package:foo/bar.dart|/inputs/foo/lib/bar.dart',
+    ]);
+    stdinStream.addInputBytes(_serializeProto(request));
+
     new _TestWorkerLoop(connection, (CommandLineOptions options) {
       expect(options.buildSummaryInputs,
           unorderedEquals(['/tmp/1.sum', '/tmp/2.sum']));
@@ -51,235 +72,71 @@
       errorSink.writeln('errorSink b');
     }).run();
     expect(connection.outputList, hasLength(1));
-    expect(connection.outputList[0], {
-      'exit_code': WorkerLoop.EXIT_CODE_OK,
-      'output': allOf(contains('errorSink a'), contains('errorSink a'),
-          contains('outSink a'), contains('outSink b'))
-    });
+
+    var response = connection.outputList[0];
+    expect(response.exitCode, WorkerLoop.EXIT_CODE_OK);
+    expect(
+        response.output,
+        allOf(contains('errorSink a'), contains('errorSink a'),
+            contains('outSink a'), contains('outSink b')));
+
+    // Check that a serialized version was written to std out.
+    expect(stdoutStream.writes, hasLength(1));
+    expect(stdoutStream.writes[0], _serializeProto(response));
   }
 
   test_run_invalidOptions() {
-    _setInputLine(JSON.encode({
-      'arguments': ['--unknown-option', '/foo.dart', '/bar.dart',],
-    }));
+    var request = new WorkRequest();
+    request.arguments.addAll(['--unknown-option', '/foo.dart', '/bar.dart']);
+    stdinStream.addInputBytes(_serializeProto(request));
     new _TestWorkerLoop(connection).run();
     expect(connection.outputList, hasLength(1));
-    expect(connection.outputList[0],
-        {'exit_code': WorkerLoop.EXIT_CODE_ERROR, 'output': anything});
+
+    var response = connection.outputList[0];
+    expect(response.exitCode, WorkerLoop.EXIT_CODE_ERROR);
+    expect(response.output, anything);
   }
 
   test_run_invalidRequest_noArgumentsInputs() {
-    _setInputLine('{}');
+    stdinStream.addInputBytes(_serializeProto(new WorkRequest()));
+
     new _TestWorkerLoop(connection).run();
     expect(connection.outputList, hasLength(1));
-    expect(connection.outputList[0],
-        {'exit_code': WorkerLoop.EXIT_CODE_ERROR, 'output': anything});
+
+    var response = connection.outputList[0];
+    expect(response.exitCode, WorkerLoop.EXIT_CODE_ERROR);
+    expect(response.output, anything);
   }
 
-  test_run_invalidRequest_notJson() {
-    _setInputLine('not a JSON string');
+  test_run_invalidRequest_randomBytes() {
+    stdinStream.addInputBytes([1, 2, 3]);
     new _TestWorkerLoop(connection).run();
     expect(connection.outputList, hasLength(1));
-    expect(connection.outputList[0],
-        {'exit_code': WorkerLoop.EXIT_CODE_ERROR, 'output': anything});
+
+    var response = connection.outputList[0];
+    expect(response.exitCode, WorkerLoop.EXIT_CODE_ERROR);
+    expect(response.output, anything);
   }
 
   test_run_stopAtEOF() {
-    when(connection.readLineSync()).thenReturnList([null]);
+    stdinStream.addInputBytes([-1]);
     new _TestWorkerLoop(connection).run();
   }
-
-  void _setInputLine(String line) {
-    when(connection.readLineSync()).thenReturnList([line, null]);
-  }
-}
-
-@reflectiveTest
-class WorkInputTest {
-  test_fromJson() {
-    WorkInput input = new WorkInput.fromJson({
-      'path': '/my/path',
-      'digest': [1, 2, 3, 4, 5]
-    });
-    expect(input.path, '/my/path');
-    expect(input.digest, <int>[1, 2, 3, 4, 5]);
-  }
-
-  test_fromJson_digest_isMissing() {
-    WorkInput input = new WorkInput.fromJson({'path': '/my/path',});
-    expect(input.path, '/my/path');
-    expect(input.digest, <int>[]);
-  }
-
-  test_fromJson_digest_isNotList() {
-    expect(() {
-      new WorkInput.fromJson({'path': '/my/path', 'digest': 0});
-    }, throwsArgumentError);
-  }
-
-  test_fromJson_digest_isNotListOfInt() {
-    expect(() {
-      new WorkInput.fromJson({
-        'path': '/my/path',
-        'digest': ['a', 'b', 'c']
-      });
-    }, throwsArgumentError);
-  }
-
-  test_fromJson_path_isMissing() {
-    expect(() {
-      new WorkInput.fromJson({
-        'digest': [1, 2, 3, 4, 5]
-      });
-    }, throwsArgumentError);
-  }
-
-  test_fromJson_path_isNotString() {
-    expect(() {
-      new WorkInput.fromJson({
-        'path': 0,
-        'digest': [1, 2, 3, 4, 5]
-      });
-    }, throwsArgumentError);
-  }
-
-  test_toJson() {
-    WorkInput input = new WorkInput('/my/path', <int>[1, 2, 3, 4, 5]);
-    Map<String, Object> json = input.toJson();
-    expect(json, {
-      'path': '/my/path',
-      'digest': [1, 2, 3, 4, 5]
-    });
-  }
-
-  test_toJson_withoutDigest() {
-    WorkInput input = new WorkInput('/my/path', null);
-    Map<String, Object> json = input.toJson();
-    expect(json, {'path': '/my/path'});
-  }
-}
-
-@reflectiveTest
-class WorkRequestTest {
-  test_fromJson() {
-    WorkRequest request = new WorkRequest.fromJson({
-      'arguments': ['--arg1', '--arg2', '--arg3'],
-      'inputs': [
-        {
-          'path': '/my/path1',
-          'digest': [11, 12, 13]
-        },
-        {
-          'path': '/my/path2',
-          'digest': [21, 22, 23]
-        }
-      ]
-    });
-    expect(request.arguments, ['--arg1', '--arg2', '--arg3']);
-    expect(request.inputs, hasLength(2));
-    expect(request.inputs[0].path, '/my/path1');
-    expect(request.inputs[0].digest, <int>[11, 12, 13]);
-    expect(request.inputs[1].path, '/my/path2');
-    expect(request.inputs[1].digest, <int>[21, 22, 23]);
-  }
-
-  test_fromJson_arguments_isMissing() {
-    WorkRequest request = new WorkRequest.fromJson({
-      'inputs': [
-        {
-          'path': '/my/path1',
-          'digest': [11, 12, 13]
-        },
-      ]
-    });
-    expect(request.arguments, isEmpty);
-    expect(request.inputs, hasLength(1));
-    expect(request.inputs[0].path, '/my/path1');
-    expect(request.inputs[0].digest, <int>[11, 12, 13]);
-  }
-
-  test_fromJson_arguments_isNotList() {
-    expect(() {
-      new WorkRequest.fromJson({'arguments': 0, 'inputs': []});
-    }, throwsArgumentError);
-  }
-
-  test_fromJson_arguments_isNotListOfString() {
-    expect(() {
-      new WorkRequest.fromJson({
-        'arguments': [0, 1, 2],
-        'inputs': []
-      });
-    }, throwsArgumentError);
-  }
-
-  test_fromJson_inputs_isMissing() {
-    WorkRequest request = new WorkRequest.fromJson({
-      'arguments': ['--arg1', '--arg2', '--arg3'],
-    });
-    expect(request.arguments, ['--arg1', '--arg2', '--arg3']);
-    expect(request.inputs, hasLength(0));
-  }
-
-  test_fromJson_inputs_isNotList() {
-    expect(() {
-      new WorkRequest.fromJson({
-        'arguments': ['--arg1', '--arg2', '--arg3'],
-        'inputs': 0
-      });
-    }, throwsArgumentError);
-  }
-
-  test_fromJson_inputs_isNotListOfObject() {
-    expect(() {
-      new WorkRequest.fromJson({
-        'arguments': ['--arg1', '--arg2', '--arg3'],
-        'inputs': [0, 1, 2]
-      });
-    }, throwsArgumentError);
-  }
-
-  test_fromJson_noArgumentsInputs() {
-    expect(() {
-      new WorkRequest.fromJson({});
-    }, throwsArgumentError);
-  }
-
-  test_toJson() {
-    WorkRequest request = new WorkRequest(<String>[
-      '--arg1',
-      '--arg2',
-      '--arg3'
-    ], <WorkInput>[
-      new WorkInput('/my/path1', <int>[11, 12, 13]),
-      new WorkInput('/my/path2', <int>[21, 22, 23])
-    ]);
-    Map<String, Object> json = request.toJson();
-    expect(json, {
-      'arguments': ['--arg1', '--arg2', '--arg3'],
-      'inputs': [
-        {
-          'path': '/my/path1',
-          'digest': [11, 12, 13]
-        },
-        {
-          'path': '/my/path2',
-          'digest': [21, 22, 23]
-        }
-      ]
-    });
-  }
 }
 
 /**
- * [WorkerConnection] mock.
+ * A [StdWorkerConnection] which records its responses.
  */
-class _TestWorkerConnection extends TypedMock implements WorkerConnection {
-  final outputList = <Map<String, Object>>[];
+class _TestWorkerConnection extends StdWorkerConnection {
+  final outputList = <WorkResponse>[];
+
+  _TestWorkerConnection(Stdin stdinStream, Stdout stdoutStream)
+      : super(stdinStream, stdoutStream);
 
   @override
-  void writeJson(Map<String, Object> json) {
-    outputList.add(json);
+  void writeResponse(WorkResponse response) {
+    super.writeResponse(response);
+    outputList.add(response);
   }
 }
 
diff --git a/pkg/analyzer_cli/test/data/file_with_todo.dart b/pkg/analyzer_cli/test/data/file_with_todo.dart
new file mode 100644
index 0000000..dd3feda
--- /dev/null
+++ b/pkg/analyzer_cli/test/data/file_with_todo.dart
@@ -0,0 +1,2 @@
+//TODO: add main
+main() {}
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index efd6362..0b48331 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -66,6 +66,10 @@
         expect(processor.options['test_plugin'], isNotNull);
         expect(processor.exception, isNull);
       });
+      test('todos', () {
+        drive('data/file_with_todo.dart');
+        expect(outSink.toString().contains('[info]'), isFalse);
+      });
     });
 
     group('exit codes', () {
diff --git a/pkg/analyzer_cli/test/message_grouper_test.dart b/pkg/analyzer_cli/test/message_grouper_test.dart
new file mode 100644
index 0000000..6388f9b
--- /dev/null
+++ b/pkg/analyzer_cli/test/message_grouper_test.dart
@@ -0,0 +1,123 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer_cli/src/message_grouper.dart';
+import 'package:unittest/unittest.dart';
+
+import 'utils.dart';
+
+main() {
+  MessageGrouper messageGrouper;
+  TestStdinStream stdinStream;
+
+  setUp(() {
+    stdinStream = new TestStdinStream();
+    messageGrouper = new MessageGrouper(stdinStream);
+  });
+
+  group('message_grouper', () {
+    /// Check that if the message grouper produces the [expectedOutput] in
+    /// response to the corresponding [input].
+    void check(List<int> input, List<List<int>> expectedOutput) {
+      stdinStream.addInputBytes(input);
+      for (var chunk in expectedOutput) {
+        expect(messageGrouper.next, equals(chunk));
+      }
+    }
+
+    /// Make a simple message having the given [length]
+    List<int> makeMessage(int length) {
+      var result = <int>[];
+      for (int i = 0; i < length; i++) {
+        result.add(i & 0xff);
+      }
+      return result;
+    }
+
+    test('Empty message', () {
+      check([0], [[]]);
+    });
+
+    test('Short message', () {
+      check([
+        5,
+        10,
+        20,
+        30,
+        40,
+        50
+      ], [
+        [10, 20, 30, 40, 50]
+      ]);
+    });
+
+    test('Message with 2-byte length', () {
+      var len = 0x155;
+      var msg = makeMessage(len);
+      var encodedLen = [0xd5, 0x02];
+      check([]..addAll(encodedLen)..addAll(msg), [msg]);
+    });
+
+    test('Message with 3-byte length', () {
+      var len = 0x4103;
+      var msg = makeMessage(len);
+      var encodedLen = [0x83, 0x82, 0x01];
+      check([]..addAll(encodedLen)..addAll(msg), [msg]);
+    });
+
+    test('Multiple messages', () {
+      check([
+        2,
+        10,
+        20,
+        2,
+        30,
+        40
+      ], [
+        [10, 20],
+        [30, 40]
+      ]);
+    });
+
+    test('Empty message at start', () {
+      check([
+        0,
+        2,
+        10,
+        20
+      ], [
+        [],
+        [10, 20]
+      ]);
+    });
+
+    test('Empty message at end', () {
+      check([
+        2,
+        10,
+        20,
+        0
+      ], [
+        [10, 20],
+        []
+      ]);
+    });
+
+    test('Empty message in the middle', () {
+      check([
+        2,
+        10,
+        20,
+        0,
+        2,
+        30,
+        40
+      ], [
+        [10, 20],
+        [],
+        [30, 40]
+      ]);
+    });
+  });
+}
diff --git a/pkg/analyzer_cli/test/utils.dart b/pkg/analyzer_cli/test/utils.dart
index 07dbe4b..ce71009b 100644
--- a/pkg/analyzer_cli/test/utils.dart
+++ b/pkg/analyzer_cli/test/utils.dart
@@ -4,6 +4,7 @@
 
 library analyzer_cli.test.utils;
 
+import 'dart:collection';
 import 'dart:io';
 import 'dart:mirrors';
 
@@ -11,6 +12,7 @@
 import 'package:analyzer/src/generated/java_io.dart';
 import 'package:path/path.dart' as pathos;
 import 'package:path/path.dart' as path;
+import 'package:typed_mock/typed_mock.dart';
 import 'package:unittest/unittest.dart';
 
 /// Gets the test directory in a way that works with
@@ -63,3 +65,37 @@
 }
 
 class _TestUtils {}
+
+/**
+ * A [Stdin] mock.
+ */
+class TestStdinStream extends TypedMock implements Stdin {
+  final pendingBytes = new Queue<int>();
+
+  // Adds all the input bytes to this stream.
+  void addInputBytes(List<int> bytes) {
+    pendingBytes.addAll(bytes);
+  }
+
+  @override
+  int readByteSync() {
+    if (pendingBytes.isEmpty) {
+      return -1;
+    } else {
+      return pendingBytes.removeFirst();
+    }
+  }
+}
+
+/**
+ * A [Stdout] mock.
+ */
+class TestStdoutStream extends TypedMock implements Stdout {
+  final writes = <List<int>>[];
+
+  @override
+  void add(List<int> bytes) {
+    super.add(bytes);
+    writes.add(bytes);
+  }
+}
diff --git a/pkg/compiler/lib/compiler.dart b/pkg/compiler/lib/compiler.dart
index b4c22eb..11e99b3 100644
--- a/pkg/compiler/lib/compiler.dart
+++ b/pkg/compiler/lib/compiler.dart
@@ -52,8 +52,7 @@
  * As more features are added to the compiler, new names and
  * extensions may be introduced.
  */
-typedef EventSink<String> CompilerOutputProvider(String name,
-                                                 String extension);
+typedef EventSink<String> CompilerOutputProvider(String name, String extension);
 
 /**
  * Invoked by the compiler to report diagnostics. If [uri] is
@@ -65,8 +64,8 @@
  * diagnostic message, and [kind] indicates indicates what kind of
  * diagnostic it is.
  */
-typedef void DiagnosticHandler(Uri uri, int begin, int end,
-                               String message, Diagnostic kind);
+typedef void DiagnosticHandler(
+    Uri uri, int begin, int end, String message, Diagnostic kind);
 
 /**
  * Provides a package lookup mechanism in the case that no package root or
@@ -104,18 +103,13 @@
  * as the compiler may create multiple files to support lazy loading
  * of libraries.
  */
-Future<CompilationResult> compile(
-    Uri script,
-    Uri libraryRoot,
-    Uri packageRoot,
-    CompilerInputProvider inputProvider,
-    DiagnosticHandler handler,
+Future<CompilationResult> compile(Uri script, Uri libraryRoot, Uri packageRoot,
+    CompilerInputProvider inputProvider, DiagnosticHandler handler,
     [List<String> options = const [],
-     CompilerOutputProvider outputProvider,
-     Map<String, dynamic> environment = const {},
-     Uri packageConfig,
-     PackagesDiscoveryProvider packagesDiscoveryProvider]) {
-
+    CompilerOutputProvider outputProvider,
+    Map<String, dynamic> environment = const {},
+    Uri packageConfig,
+    PackagesDiscoveryProvider packagesDiscoveryProvider]) {
   CompilerOptions compilerOptions = new CompilerOptions.parse(
       entryPoint: script,
       libraryRoot: libraryRoot,
@@ -131,8 +125,9 @@
   new_api.CompilerOutput compilerOutput =
       new LegacyCompilerOutput(outputProvider);
 
-  return new_api.compile(compilerOptions, compilerInput,
-                         compilerDiagnostics, compilerOutput)
+  return new_api
+      .compile(
+          compilerOptions, compilerInput, compilerDiagnostics, compilerOutput)
       .then((new_api.CompilationResult result) {
     return new CompilationResult(result.compiler, isSuccess: result.isSuccess);
   });
diff --git a/pkg/compiler/lib/compiler_new.dart b/pkg/compiler/lib/compiler_new.dart
index 3988c2f..51de3810 100644
--- a/pkg/compiler/lib/compiler_new.dart
+++ b/pkg/compiler/lib/compiler_new.dart
@@ -125,4 +125,3 @@
     return new CompilationResult(compiler, isSuccess: success);
   });
 }
-
diff --git a/pkg/compiler/lib/src/apiimpl.dart b/pkg/compiler/lib/src/apiimpl.dart
index 9e04e16..bfadc5b 100644
--- a/pkg/compiler/lib/src/apiimpl.dart
+++ b/pkg/compiler/lib/src/apiimpl.dart
@@ -9,28 +9,22 @@
 
 import 'package:package_config/packages.dart';
 import 'package:package_config/packages_file.dart' as pkgs;
-import 'package:package_config/src/packages_impl.dart' show
-    MapPackages,
-    NonFilePackagesDirectoryPackages;
-import 'package:package_config/src/util.dart' show
-    checkValidPackageUri;
+import 'package:package_config/src/packages_impl.dart'
+    show MapPackages, NonFilePackagesDirectoryPackages;
+import 'package:package_config/src/util.dart' show checkValidPackageUri;
 
 import '../compiler_new.dart' as api;
 import 'common.dart';
-import 'common/tasks.dart' show
-    GenericTask;
+import 'common/tasks.dart' show GenericTask;
 import 'compiler.dart';
-import 'diagnostics/messages.dart' show
-    Message;
+import 'diagnostics/messages.dart' show Message;
 import 'elements/elements.dart' as elements;
 import 'environment.dart';
 import 'io/source_file.dart';
-import 'options.dart' show
-    CompilerOptions;
+import 'options.dart' show CompilerOptions;
 import 'platform_configuration.dart' as platform_configuration;
 import 'script.dart';
 
-
 /// Implements the [Compiler] using a [api.CompilerInput] for supplying the
 /// sources.
 class CompilerImpl extends Compiler {
@@ -50,21 +44,21 @@
 
   Uri get libraryRoot => options.platformConfigUri.resolve(".");
 
-  CompilerImpl(this.provider, api.CompilerOutput outputProvider,
-      this.handler, CompilerOptions options)
-      : super(options: options, outputProvider: outputProvider,
-          environment: new _Environment(options.environment)) {
+  CompilerImpl(this.provider, api.CompilerOutput outputProvider, this.handler,
+      CompilerOptions options)
+      : super(
+            options: options,
+            outputProvider: outputProvider,
+            environment: new _Environment(options.environment)) {
     _Environment env = environment;
     env.compiler = this;
     tasks.addAll([
-        userHandlerTask = new GenericTask('Diagnostic handler', this),
-        userProviderTask = new GenericTask('Input provider', this),
-        userPackagesDiscoveryTask =
-            new GenericTask('Package discovery', this),
+      userHandlerTask = new GenericTask('Diagnostic handler', this),
+      userProviderTask = new GenericTask('Input provider', this),
+      userPackagesDiscoveryTask = new GenericTask('Package discovery', this),
     ]);
   }
 
-
   void log(message) {
     callUserHandler(
         null, null, null, null, message, api.Diagnostic.VERBOSE_INFO);
@@ -72,7 +66,7 @@
 
   /// See [Compiler.translateResolvedUri].
   Uri translateResolvedUri(elements.LibraryElement importingLibrary,
-                           Uri resolvedUri, Spannable spannable) {
+      Uri resolvedUri, Spannable spannable) {
     if (resolvedUri.scheme == 'dart') {
       return translateDartUri(importingLibrary, resolvedUri, spannable);
     }
@@ -85,8 +79,8 @@
   Future<Script> readScript(Uri readableUri, [Spannable node]) {
     if (!readableUri.isAbsolute) {
       if (node == null) node = NO_LOCATION_SPANNABLE;
-      reporter.internalError(node,
-          'Relative uri $readableUri provided to readScript(Uri).');
+      reporter.internalError(
+          node, 'Relative uri $readableUri provided to readScript(Uri).');
     }
 
     // We need to store the current element since we are reporting read errors
@@ -101,9 +95,7 @@
             {'uri': readableUri, 'exception': exception});
       } else {
         reporter.withCurrentElement(element, () {
-          reporter.reportErrorMessage(
-              node,
-              MessageKind.READ_SCRIPT_ERROR,
+          reporter.reportErrorMessage(node, MessageKind.READ_SCRIPT_ERROR,
               {'uri': readableUri, 'exception': exception});
         });
       }
@@ -114,8 +106,7 @@
     if (resourceUri.scheme == 'dart-ext') {
       if (!options.allowNativeExtensions) {
         reporter.withCurrentElement(element, () {
-          reporter.reportErrorMessage(
-              node, MessageKind.DART_EXT_NOT_SUPPORTED);
+          reporter.reportErrorMessage(node, MessageKind.DART_EXT_NOT_SUPPORTED);
         });
       }
       return _synthesizeScript(readableUri);
@@ -132,7 +123,7 @@
         sourceFile = new StringSourceFile.fromUri(resourceUri, data);
       } else {
         String message = "Expected a 'String' or a 'List<int>' from the input "
-                         "provider, but got: ${Error.safeToString(data)}.";
+            "provider, but got: ${Error.safeToString(data)}.";
         reportReadError(message);
       }
       // We use [readableUri] as the URI for the script since need to preserve
@@ -168,19 +159,16 @@
   /// Internal libraries (whose name starts with '_') can be only resolved if
   /// [importingLibrary] is a platform or patch library.
   Uri translateDartUri(elements.LibraryElement importingLibrary,
-                       Uri resolvedUri, Spannable spannable) {
-
+      Uri resolvedUri, Spannable spannable) {
     Uri location = lookupLibraryUri(resolvedUri.path);
 
     if (location == null) {
-      reporter.reportErrorMessage(
-          spannable,
-          MessageKind.LIBRARY_NOT_FOUND,
+      reporter.reportErrorMessage(spannable, MessageKind.LIBRARY_NOT_FOUND,
           {'resolvedUri': resolvedUri});
       return null;
     }
 
-    if (resolvedUri.path.startsWith('_')  ) {
+    if (resolvedUri.path.startsWith('_')) {
       bool allowInternalLibraryAccess = importingLibrary != null &&
           (importingLibrary.isPlatformLibrary ||
               importingLibrary.isPatch ||
@@ -190,14 +178,12 @@
       if (!allowInternalLibraryAccess) {
         if (importingLibrary != null) {
           reporter.reportErrorMessage(
-              spannable,
-              MessageKind.INTERNAL_LIBRARY_FROM,
-              {'resolvedUri': resolvedUri,
-                'importingUri': importingLibrary.canonicalUri});
+              spannable, MessageKind.INTERNAL_LIBRARY_FROM, {
+            'resolvedUri': resolvedUri,
+            'importingUri': importingLibrary.canonicalUri
+          });
         } else {
-          reporter.reportErrorMessage(
-              spannable,
-              MessageKind.INTERNAL_LIBRARY,
+          reporter.reportErrorMessage(spannable, MessageKind.INTERNAL_LIBRARY,
               {'resolvedUri': resolvedUri});
           registerDisallowedLibraryUse(resolvedUri);
         }
@@ -206,16 +192,13 @@
     }
 
     if (location.scheme == "unsupported") {
-      reporter.reportErrorMessage(
-          spannable,
-          MessageKind.LIBRARY_NOT_SUPPORTED,
+      reporter.reportErrorMessage(spannable, MessageKind.LIBRARY_NOT_SUPPORTED,
           {'resolvedUri': resolvedUri});
       registerDisallowedLibraryUse(resolvedUri);
       return null;
     }
 
-    if (resolvedUri.path == 'html' ||
-        resolvedUri.path == 'io') {
+    if (resolvedUri.path == 'html' || resolvedUri.path == 'io') {
       // TODO(ahe): Get rid of mockableLibraryUsed when test.dart
       // supports this use case better.
       mockableLibraryUsed = true;
@@ -227,24 +210,18 @@
     try {
       checkValidPackageUri(uri);
     } on ArgumentError catch (e) {
-      reporter.reportErrorMessage(
-          node,
-          MessageKind.INVALID_PACKAGE_URI,
+      reporter.reportErrorMessage(node, MessageKind.INVALID_PACKAGE_URI,
           {'uri': uri, 'exception': e.message});
       return null;
     }
-    return packages.resolve(uri,
-        notFound: (Uri notFound) {
-          reporter.reportErrorMessage(
-              node,
-              MessageKind.LIBRARY_NOT_FOUND,
-              {'resolvedUri': uri});
-          return null;
-        });
+    return packages.resolve(uri, notFound: (Uri notFound) {
+      reporter.reportErrorMessage(
+          node, MessageKind.LIBRARY_NOT_FOUND, {'resolvedUri': uri});
+      return null;
+    });
   }
 
-  Future<elements.LibraryElement> analyzeUri(
-      Uri uri,
+  Future<elements.LibraryElement> analyzeUri(Uri uri,
       {bool skipLibraryWithPartOfTag: true}) {
     List<Future> setupFutures = new List<Future>();
     if (sdkLibraries == null) {
@@ -254,8 +231,8 @@
       setupFutures.add(setupPackages(uri));
     }
     return Future.wait(setupFutures).then((_) {
-      return super.analyzeUri(uri,
-          skipLibraryWithPartOfTag: skipLibraryWithPartOfTag);
+      return super
+          .analyzeUri(uri, skipLibraryWithPartOfTag: skipLibraryWithPartOfTag);
     });
   }
 
@@ -271,12 +248,11 @@
         }
         // The input provider may put a trailing 0 byte when it reads a source
         // file, which confuses the package config parser.
-        if (configContents.length > 0 &&
-            configContents.last == 0) {
+        if (configContents.length > 0 && configContents.last == 0) {
           configContents = configContents.sublist(0, configContents.length - 1);
         }
-        packages = new MapPackages(
-            pkgs.parse(configContents, options.packageConfig));
+        packages =
+            new MapPackages(pkgs.parse(configContents, options.packageConfig));
       }).catchError((error) {
         reporter.reportErrorMessage(
             NO_LOCATION_SPANNABLE,
@@ -298,7 +274,8 @@
 
   Future<Null> setupSdk() {
     if (sdkLibraries == null) {
-      return platform_configuration.load(options.platformConfigUri, provider)
+      return platform_configuration
+          .load(options.platformConfigUri, provider)
           .then((Map<String, Uri> mapping) {
         sdkLibraries = mapping;
       });
@@ -338,16 +315,15 @@
   }
 
   void reportDiagnostic(DiagnosticMessage message,
-                        List<DiagnosticMessage> infos,
-                        api.Diagnostic kind) {
+      List<DiagnosticMessage> infos, api.Diagnostic kind) {
     _reportDiagnosticMessage(message, kind);
     for (DiagnosticMessage info in infos) {
       _reportDiagnosticMessage(info, api.Diagnostic.INFO);
     }
   }
 
-  void _reportDiagnosticMessage(DiagnosticMessage diagnosticMessage,
-                                api.Diagnostic kind) {
+  void _reportDiagnosticMessage(
+      DiagnosticMessage diagnosticMessage, api.Diagnostic kind) {
     // [:span.uri:] might be [:null:] in case of a [Script] with no [uri]. For
     // instance in the [Types] constructor in typechecker.dart.
     SourceSpan span = diagnosticMessage.sourceSpan;
@@ -364,7 +340,7 @@
       mockableLibraryUsed && options.allowMockCompilation;
 
   void callUserHandler(Message message, Uri uri, int begin, int end,
-                       String text, api.Diagnostic kind) {
+      String text, api.Diagnostic kind) {
     userHandlerTask.measure(() {
       handler.report(message, uri, begin, end, text, kind);
     });
@@ -375,13 +351,13 @@
   }
 
   Future<Packages> callUserPackagesDiscovery(Uri uri) {
-    return userPackagesDiscoveryTask.measure(
-        () => options.packagesDiscoveryProvider(uri));
+    return userPackagesDiscoveryTask
+        .measure(() => options.packagesDiscoveryProvider(uri));
   }
 
   Uri lookupLibraryUri(String libraryName) {
-    assert(invariant(NO_LOCATION_SPANNABLE,
-        sdkLibraries != null, message: "setupSdk() has not been run"));
+    assert(invariant(NO_LOCATION_SPANNABLE, sdkLibraries != null,
+        message: "setupSdk() has not been run"));
     return sdkLibraries[libraryName];
   }
 
@@ -401,8 +377,8 @@
   _Environment(this.definitions);
 
   String valueOf(String name) {
-    assert(invariant(NO_LOCATION_SPANNABLE,
-        compiler.sdkLibraries != null, message: "setupSdk() has not been run"));
+    assert(invariant(NO_LOCATION_SPANNABLE, compiler.sdkLibraries != null,
+        message: "setupSdk() has not been run"));
 
     var result = definitions[name];
     if (result != null || definitions.containsKey(name)) return result;
diff --git a/pkg/compiler/lib/src/cache_strategy.dart b/pkg/compiler/lib/src/cache_strategy.dart
index 2a0a8f0..3136a18 100644
--- a/pkg/compiler/lib/src/cache_strategy.dart
+++ b/pkg/compiler/lib/src/cache_strategy.dart
@@ -2,9 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:collection' show
-    HashMap,
-    HashSet;
+import 'dart:collection' show HashMap, HashSet;
 
 /**
  * Helper class for allocating sets and maps appropriate for caching objects
diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart
index 1315016..2d0ee99 100644
--- a/pkg/compiler/lib/src/closure.dart
+++ b/pkg/compiler/lib/src/closure.dart
@@ -5,31 +5,22 @@
 library closureToClassMapper;
 
 import 'common.dart';
-import 'common/names.dart' show
-    Identifiers;
-import 'common/resolution.dart' show
-    Parsing,
-    Resolution;
-import 'common/tasks.dart' show
-    CompilerTask;
-import 'compiler.dart' show
-    Compiler;
+import 'common/names.dart' show Identifiers;
+import 'common/resolution.dart' show Parsing, Resolution;
+import 'common/tasks.dart' show CompilerTask;
+import 'compiler.dart' show Compiler;
 import 'constants/expressions.dart';
 import 'dart_types.dart';
 import 'elements/elements.dart';
-import 'elements/modelx.dart' show
-    BaseFunctionElementX,
-    ClassElementX,
-    ElementX,
-    LocalFunctionElementX;
+import 'elements/modelx.dart'
+    show BaseFunctionElementX, ClassElementX, ElementX, LocalFunctionElementX;
 import 'elements/visitor.dart' show ElementVisitor;
 import 'js_backend/js_backend.dart' show JavaScriptBackend;
 import 'resolution/tree_elements.dart' show TreeElements;
 import 'tokens/token.dart' show Token;
 import 'tree/tree.dart';
 import 'util/util.dart';
-import 'universe/universe.dart' show
-    Universe;
+import 'universe/universe.dart' show Universe;
 
 class ClosureTask extends CompilerTask {
   Map<Node, ClosureClassMap> closureMappingCache;
@@ -39,9 +30,8 @@
 
   String get name => "Closure Simplifier";
 
-  ClosureClassMap computeClosureToClassMapping(Element element,
-                                               Node node,
-                                               TreeElements elements) {
+  ClosureClassMap computeClosureToClassMapping(
+      Element element, Node node, TreeElements elements) {
     return measure(() {
       ClosureClassMap cached = closureMappingCache[node];
       if (cached != null) return cached;
@@ -107,9 +97,7 @@
   /// The [BoxLocal] or [LocalElement] being accessed through the field.
   final Local local;
 
-  ClosureFieldElement(String name,
-                      this.local,
-                      ClosureClassElement enclosing)
+  ClosureFieldElement(String name, this.local, ClosureClassElement enclosing)
       : super(name, ElementKind.FIELD, enclosing);
 
   /// Use [closureClass] instead.
@@ -128,8 +116,8 @@
   bool get hasNode => false;
 
   Node get node {
-    throw new SpannableAssertionFailure(local,
-        'Should not access node of ClosureFieldElement.');
+    throw new SpannableAssertionFailure(
+        local, 'Should not access node of ClosureFieldElement.');
   }
 
   bool get hasResolvedAst => hasTreeElements;
@@ -139,8 +127,8 @@
   }
 
   Expression get initializer {
-    throw new SpannableAssertionFailure(local,
-        'Should not access initializer of ClosureFieldElement.');
+    throw new SpannableAssertionFailure(
+        local, 'Should not access initializer of ClosureFieldElement.');
   }
 
   bool get isInstanceMember => true;
@@ -177,6 +165,7 @@
   DartType rawType;
   DartType thisType;
   FunctionType callType;
+
   /// Node that corresponds to this closure, used for source position.
   final FunctionExpression node;
 
@@ -187,18 +176,17 @@
 
   final List<ClosureFieldElement> _closureFields = <ClosureFieldElement>[];
 
-  ClosureClassElement(this.node,
-                      String name,
-                      Compiler compiler,
-                      LocalFunctionElement closure)
+  ClosureClassElement(
+      this.node, String name, Compiler compiler, LocalFunctionElement closure)
       : this.methodElement = closure,
-        super(name,
-              closure.compilationUnit,
-              // By assigning a fresh class-id we make sure that the hashcode
-              // is unique, but also emit closure classes after all other
-              // classes (since the emitter sorts classes by their id).
-              compiler.getNextFreeClassId(),
-              STATE_DONE) {
+        super(
+            name,
+            closure.compilationUnit,
+            // By assigning a fresh class-id we make sure that the hashcode
+            // is unique, but also emit closure classes after all other
+            // classes (since the emitter sorts classes by their id).
+            compiler.getNextFreeId(),
+            STATE_DONE) {
     JavaScriptBackend backend = compiler.backend;
     ClassElement superclass = methodElement.isInstanceMember
         ? backend.helpers.boundClosureClass
@@ -251,12 +239,14 @@
 // TODO(ngeoffray, ahe): These classes continuously cause problems.  We need to
 // find a more general solution.
 class BoxFieldElement extends ElementX
-    implements TypedElement, CapturedVariable, FieldElement,
+    implements
+        TypedElement,
+        CapturedVariable,
+        FieldElement,
         PrivatelyNamedJSEntity {
   final BoxLocal box;
 
-  BoxFieldElement(String name, this.variableElement,
-      BoxLocal box)
+  BoxFieldElement(String name, this.variableElement, BoxLocal box)
       : this.box = box,
         super(name, ElementKind.FIELD, box.executableContext);
 
@@ -323,9 +313,8 @@
     implements MethodElement {
   final LocalFunctionElement expression;
 
-  SynthesizedCallMethodElementX(String name,
-                                LocalFunctionElementX other,
-                                ClosureClassElement enclosing)
+  SynthesizedCallMethodElementX(
+      String name, LocalFunctionElementX other, ClosureClassElement enclosing)
       : expression = other,
         super(name, other.kind, other.modifiers, enclosing) {
     asyncMarker = other.asyncMarker;
@@ -378,8 +367,8 @@
     return capturedVariables.containsKey(variable);
   }
 
-  void forEachCapturedVariable(f(LocalVariableElement variable,
-                                 BoxFieldElement boxField)) {
+  void forEachCapturedVariable(
+      f(LocalVariableElement variable, BoxFieldElement boxField)) {
     capturedVariables.forEach(f);
   }
 }
@@ -416,10 +405,8 @@
   /// TODO(johnniwinter): Add variables to this only if the variable is mutated.
   final Set<Local> variablesUsedInTryOrGenerator = new Set<Local>();
 
-  ClosureClassMap(this.closureElement,
-                  this.closureClassElement,
-                  this.callElement,
-                  this.thisLocal);
+  ClosureClassMap(this.closureElement, this.closureClassElement,
+      this.callElement, this.thisLocal);
 
   void addFreeVariable(Local element) {
     assert(freeVariableMap[element] == null);
@@ -432,8 +419,7 @@
     return freeVariableMap.containsKey(element);
   }
 
-  void forEachFreeVariable(f(Local variable,
-                             CapturedVariable field)) {
+  void forEachFreeVariable(f(Local variable, CapturedVariable field)) {
     freeVariableMap.forEach(f);
   }
 
@@ -457,8 +443,7 @@
     return capturingScopesBox(variable);
   }
 
-  void forEachCapturedVariable(void f(Local variable,
-                                      CapturedVariable field)) {
+  void forEachCapturedVariable(void f(Local variable, CapturedVariable field)) {
     freeVariableMap.forEach((variable, copy) {
       if (variable is BoxLocal) return;
       f(variable, copy);
@@ -468,8 +453,8 @@
     });
   }
 
-  void forEachBoxedVariable(void f(LocalVariableElement local,
-                                   BoxFieldElement field)) {
+  void forEachBoxedVariable(
+      void f(LocalVariableElement local, BoxFieldElement field)) {
     freeVariableMap.forEach((variable, copy) {
       if (!isVariableBoxed(variable)) return;
       f(variable, copy);
@@ -521,9 +506,7 @@
 
   bool insideClosure = false;
 
-  ClosureTranslator(this.compiler,
-                    this.elements,
-                    this.closureMappingCache);
+  ClosureTranslator(this.compiler, this.elements, this.closureMappingCache);
 
   DiagnosticReporter get reporter => compiler.reporter;
 
@@ -568,8 +551,7 @@
     _capturedVariableMapping[variable] = null;
   }
 
-  void setCapturedVariableBoxField(Local variable,
-      BoxFieldElement boxField) {
+  void setCapturedVariableBoxField(Local variable, BoxFieldElement boxField) {
     assert(isCapturedVariable(variable));
     _capturedVariableMapping[variable] = boxField;
   }
@@ -591,9 +573,10 @@
   }
 
   void translateLazyInitializer(VariableElement element,
-                                VariableDefinitions node,
-                                Expression initializer) {
-    visitInvokable(element, node, () { visit(initializer); });
+      VariableDefinitions node, Expression initializer) {
+    visitInvokable(element, node, () {
+      visit(initializer);
+    });
     updateClosures();
   }
 
@@ -627,8 +610,7 @@
         }
       });
       ClosureClassElement closureClass = data.closureClassElement;
-      assert(closureClass != null ||
-             (fieldCaptures.isEmpty && boxes.isEmpty));
+      assert(closureClass != null || (fieldCaptures.isEmpty && boxes.isEmpty));
 
       void addClosureField(Local local, String name) {
         ClosureFieldElement closureField =
@@ -674,7 +656,7 @@
     // the factory.
     bool inCurrentContext(Local variable) {
       return variable == executableContext ||
-             variable.executableContext == executableContext;
+          variable.executableContext == executableContext;
     }
 
     if (insideClosure && !inCurrentContext(variable)) {
@@ -719,8 +701,8 @@
       visit(node.type);
     }
     for (Link<Node> link = node.definitions.nodes;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       Node definition = link.head;
       LocalElement element = elements[definition];
       assert(element != null);
@@ -748,7 +730,8 @@
     // TODO(karlklose,johnniwinther): if the type is null, the annotation is
     // from a parameter which has been analyzed before the method has been
     // resolved and the result has been thrown away.
-    if (compiler.options.enableTypeAssertions && type != null &&
+    if (compiler.options.enableTypeAssertions &&
+        type != null &&
         type.containsTypeVariables) {
       if (insideClosure && member.isFactoryConstructor) {
         // This is a closure in a factory constructor.  Since there is no
@@ -775,8 +758,7 @@
     } else {
       Element element = elements[node];
       if (element != null && element.isTypeVariable) {
-        if (outermostElement.isConstructor ||
-            outermostElement.isField) {
+        if (outermostElement.isConstructor || outermostElement.isField) {
           TypeVariableElement typeVariable = element;
           useTypeVariableAsLocal(typeVariable.type);
         } else {
@@ -796,7 +778,7 @@
       TypeVariableElement variable = element;
       analyzeType(variable.type);
     } else if (node.receiver == null &&
-               Elements.isInstanceSend(node, elements)) {
+        Elements.isInstanceSend(node, elements)) {
       registerNeedsThis();
     } else if (node.isSuperCall) {
       registerNeedsThis();
@@ -848,8 +830,7 @@
     type.forEachTypeVariable((TypeVariableType typeVariable) {
       // Field initializers are inlined and access the type variable as
       // normal parameters.
-      if (!outermostElement.isField &&
-          !outermostElement.isConstructor) {
+      if (!outermostElement.isField && !outermostElement.isConstructor) {
         registerNeedsThis();
       } else {
         useTypeVariableAsLocal(typeVariable);
@@ -862,8 +843,7 @@
     if (type == null) return;
     if (outermostElement.isClassMember &&
         compiler.backend.classNeedsRti(outermostElement.enclosingClass)) {
-      if (outermostElement.isConstructor ||
-          outermostElement.isField) {
+      if (outermostElement.isConstructor || outermostElement.isField) {
         analyzeTypeVariables(type);
       } else if (outermostElement.isInstanceMember) {
         if (type.containsTypeVariables) {
@@ -958,8 +938,8 @@
           node.initializer.asVariableDefinitions();
       if (definitions == null) return;
       for (Link<Node> link = definitions.definitions.nodes;
-           !link.isEmpty;
-           link = link.tail) {
+          !link.isEmpty;
+          link = link.tail) {
         Node definition = link.head;
         LocalVariableElement element = elements[definition];
         // Non-mutated variables should not be boxed.  The mutatedVariables set
@@ -984,20 +964,20 @@
       parts = parts.prepend(ownName);
     }
     for (Element enclosingElement = element.enclosingElement;
-         enclosingElement != null &&
-             (enclosingElement.kind == ElementKind.GENERATIVE_CONSTRUCTOR_BODY
-              || enclosingElement.kind == ElementKind.GENERATIVE_CONSTRUCTOR
-              || enclosingElement.kind == ElementKind.CLASS
-              || enclosingElement.kind == ElementKind.FUNCTION
-              || enclosingElement.kind == ElementKind.GETTER
-              || enclosingElement.kind == ElementKind.SETTER);
-         enclosingElement = enclosingElement.enclosingElement) {
+        enclosingElement != null &&
+            (enclosingElement.kind == ElementKind.GENERATIVE_CONSTRUCTOR_BODY ||
+                enclosingElement.kind == ElementKind.GENERATIVE_CONSTRUCTOR ||
+                enclosingElement.kind == ElementKind.CLASS ||
+                enclosingElement.kind == ElementKind.FUNCTION ||
+                enclosingElement.kind == ElementKind.GETTER ||
+                enclosingElement.kind == ElementKind.SETTER);
+        enclosingElement = enclosingElement.enclosingElement) {
       // TODO(johnniwinther): Simplify computed names.
       if (enclosingElement.isGenerativeConstructor ||
           enclosingElement.isGenerativeConstructorBody ||
           enclosingElement.isFactoryConstructor) {
-        parts = parts.prepend(
-            Elements.reconstructConstructorName(enclosingElement));
+        parts = parts
+            .prepend(Elements.reconstructConstructorName(enclosingElement));
       } else {
         String surroundingName =
             Elements.operatorNameToIdentifier(enclosingElement.name);
@@ -1014,18 +994,16 @@
 
   JavaScriptBackend get backend => compiler.backend;
 
-  ClosureClassMap globalizeClosure(FunctionExpression node,
-                                   LocalFunctionElement element) {
+  ClosureClassMap globalizeClosure(
+      FunctionExpression node, LocalFunctionElement element) {
     String closureName = computeClosureName(element);
-    ClosureClassElement globalizedElement = new ClosureClassElement(
-        node, closureName, compiler, element);
+    ClosureClassElement globalizedElement =
+        new ClosureClassElement(node, closureName, compiler, element);
     // Extend [globalizedElement] as an instantiated class in the closed world.
-    compiler.world.registerClass(
-        globalizedElement, isDirectlyInstantiated: true);
-    FunctionElement callElement =
-        new SynthesizedCallMethodElementX(Identifiers.call,
-                                          element,
-                                          globalizedElement);
+    compiler.world
+        .registerClass(globalizedElement, isDirectlyInstantiated: true);
+    FunctionElement callElement = new SynthesizedCallMethodElementX(
+        Identifiers.call, element, globalizedElement);
     backend.maybeMarkClosureAsNeededForReflection(
         globalizedElement, callElement, element);
     MemberElement enclosing = element.memberContext;
@@ -1036,13 +1014,12 @@
     // function. It could be [null] if we are inside a static method.
     ThisLocal thisElement = closureData.thisLocal;
 
-    return new ClosureClassMap(element, globalizedElement,
-                               callElement, thisElement);
+    return new ClosureClassMap(
+        element, globalizedElement, callElement, thisElement);
   }
 
-  void visitInvokable(ExecutableElement element,
-                      Node node,
-                      void visitChildren()) {
+  void visitInvokable(
+      ExecutableElement element, Node node, void visitChildren()) {
     bool oldInsideClosure = insideClosure;
     Element oldFunctionElement = executableContext;
     ClosureClassMap oldClosureData = closureData;
@@ -1070,14 +1047,13 @@
       // escape the potential type variables used in that closure.
       if (element is FunctionElement &&
           (compiler.backend.methodNeedsRti(element) ||
-           compiler.options.enableTypeAssertions)) {
+              compiler.options.enableTypeAssertions)) {
         analyzeTypeVariables(type);
       }
 
       visitChildren();
     });
 
-
     ClosureClassMap savedClosureData = closureData;
     bool savedInsideClosure = insideClosure;
 
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 1997d1c..0f3a7da 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -51,6 +51,7 @@
 
   // Experimental flags.
   static const String conditionalDirectives = '--conditional-directives';
+  static const String genericMethodSyntax = '--generic-method-syntax';
 }
 
 class Option {
diff --git a/pkg/compiler/lib/src/common.dart b/pkg/compiler/lib/src/common.dart
index df3ad46..bf49907 100644
--- a/pkg/compiler/lib/src/common.dart
+++ b/pkg/compiler/lib/src/common.dart
@@ -6,20 +6,16 @@
 /// of phase or subfunctionality.
 library dart2js.common;
 
-export 'diagnostics/diagnostic_listener.dart' show
-    DiagnosticMessage,
-    DiagnosticReporter;
-export 'diagnostics/invariant.dart' show
-    assertDebugMode,
-    InternalErrorFunction,
-    invariant;
-export 'diagnostics/messages.dart' show
-    MessageKind;
-export 'diagnostics/source_span.dart' show
-    SourceSpan;
-export 'diagnostics/spannable.dart' show
-    CURRENT_ELEMENT_SPANNABLE,
-    NO_LOCATION_SPANNABLE,
-    Spannable,
-    SpannableAssertionFailure;
+export 'diagnostics/diagnostic_listener.dart'
+    show DiagnosticMessage, DiagnosticReporter;
+export 'diagnostics/invariant.dart'
+    show assertDebugMode, InternalErrorFunction, invariant;
+export 'diagnostics/messages.dart' show MessageKind;
+export 'diagnostics/source_span.dart' show SourceSpan;
+export 'diagnostics/spannable.dart'
+    show
+        CURRENT_ELEMENT_SPANNABLE,
+        NO_LOCATION_SPANNABLE,
+        Spannable,
+        SpannableAssertionFailure;
 export 'helpers/helpers.dart';
diff --git a/pkg/compiler/lib/src/common/backend_api.dart b/pkg/compiler/lib/src/common/backend_api.dart
index d7af0cb..71a8c82 100644
--- a/pkg/compiler/lib/src/common/backend_api.dart
+++ b/pkg/compiler/lib/src/common/backend_api.dart
@@ -7,77 +7,44 @@
 import 'dart:async' show Future;
 
 import '../common.dart';
-import '../common/codegen.dart' show
-    CodegenImpact;
-import '../common/resolution.dart' show
-    ResolutionImpact;
-import '../compiler.dart' show
-    Compiler;
-import '../compile_time_constants.dart' show
-    BackendConstantEnvironment,
-    ConstantCompilerTask;
-import '../constants/expressions.dart' show
-    ConstantExpression;
-import '../constants/constant_system.dart' show
-    ConstantSystem;
-import '../constants/values.dart' show
-    ConstantValue;
-import '../dart_types.dart' show
-    DartType,
-    InterfaceType;
-import '../elements/elements.dart' show
-    ClassElement,
-    ConstructorElement,
-    Element,
-    FunctionElement,
-    LibraryElement,
-    MetadataAnnotation,
-    MethodElement;
-import '../enqueue.dart' show
-    Enqueuer,
-    CodegenEnqueuer,
-    ResolutionEnqueuer;
-import '../io/code_output.dart' show
-    CodeBuffer;
-import '../io/source_information.dart' show
-    SourceInformationStrategy;
-import '../js_backend/backend_helpers.dart' as js_backend show
-    BackendHelpers;
-import '../js_backend/js_backend.dart' as js_backend show
-    JavaScriptBackend;
-import '../library_loader.dart' show
-    LibraryLoader,
-    LoadedLibraries;
-import '../native/native.dart' as native show
-    NativeEnqueuer,
-    maybeEnableNative;
-import '../patch_parser.dart' show
-    checkNativeAnnotation, checkJsInteropAnnotation;
-import '../resolution/tree_elements.dart' show
-    TreeElements;
-import '../serialization/serialization.dart' show
-    DeserializerPlugin,
-    ObjectDecoder,
-    ObjectEncoder,
-    SerializerPlugin;
-import '../tree/tree.dart' show
-    Node,
-    Send;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/world_impact.dart' show
-    ImpactStrategy,
-    WorldImpact;
+import '../common/codegen.dart' show CodegenImpact;
+import '../common/resolution.dart' show ResolutionImpact;
+import '../compiler.dart' show Compiler;
+import '../compile_time_constants.dart'
+    show BackendConstantEnvironment, ConstantCompilerTask;
+import '../constants/expressions.dart' show ConstantExpression;
+import '../constants/constant_system.dart' show ConstantSystem;
+import '../constants/values.dart' show ConstantValue;
+import '../dart_types.dart' show DartType, InterfaceType;
+import '../elements/elements.dart'
+    show
+        ClassElement,
+        ConstructorElement,
+        Element,
+        FunctionElement,
+        LibraryElement,
+        MetadataAnnotation,
+        MethodElement;
+import '../enqueue.dart' show Enqueuer, CodegenEnqueuer, ResolutionEnqueuer;
+import '../io/code_output.dart' show CodeBuffer;
+import '../io/source_information.dart' show SourceInformationStrategy;
+import '../js_backend/backend_helpers.dart' as js_backend show BackendHelpers;
+import '../js_backend/js_backend.dart' as js_backend show JavaScriptBackend;
+import '../library_loader.dart' show LibraryLoader, LoadedLibraries;
+import '../native/native.dart' as native show NativeEnqueuer, maybeEnableNative;
+import '../patch_parser.dart'
+    show checkNativeAnnotation, checkJsInteropAnnotation;
+import '../resolution/tree_elements.dart' show TreeElements;
+import '../serialization/serialization.dart'
+    show DeserializerPlugin, ObjectDecoder, ObjectEncoder, SerializerPlugin;
+import '../tree/tree.dart' show Node, Send;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/world_impact.dart' show ImpactStrategy, WorldImpact;
 
-import 'codegen.dart' show
-    CodegenWorkItem;
-import 'registry.dart' show
-    Registry;
-import 'tasks.dart' show
-    CompilerTask;
-import 'work.dart' show
-    ItemCompilationContext;
-
+import 'codegen.dart' show CodegenWorkItem;
+import 'registry.dart' show Registry;
+import 'tasks.dart' show CompilerTask;
+import 'work.dart' show ItemCompilationContext;
 
 abstract class Backend {
   final Compiler compiler;
@@ -132,6 +99,7 @@
   native.NativeEnqueuer nativeResolutionEnqueuer(world) {
     return new native.NativeEnqueuer();
   }
+
   native.NativeEnqueuer nativeCodegenEnqueuer(world) {
     return new native.NativeEnqueuer();
   }
@@ -165,52 +133,44 @@
   /// Called during resolution when a constant value for [metadata] on
   /// [annotatedElement] has been evaluated.
   void registerMetadataConstant(MetadataAnnotation metadata,
-                                Element annotatedElement,
-                                Registry registry) {}
+      Element annotatedElement, Registry registry) {}
 
   /// Called to notify to the backend that a class is being instantiated.
   // TODO(johnniwinther): Remove this. It's only called once for each [cls] and
   // only with [Compiler.globalDependencies] as [registry].
-  void registerInstantiatedClass(ClassElement cls,
-                                 Enqueuer enqueuer,
-                                 Registry registry) {}
+  void registerInstantiatedClass(
+      ClassElement cls, Enqueuer enqueuer, Registry registry) {}
 
   /// Called to notify to the backend that a class is implemented by an
   /// instantiated class.
-  void registerImplementedClass(ClassElement cls,
-                                Enqueuer enqueuer,
-                                Registry registry) {}
+  void registerImplementedClass(
+      ClassElement cls, Enqueuer enqueuer, Registry registry) {}
 
   /// Called to instruct to the backend register [type] as instantiated on
   /// [enqueuer].
-  void registerInstantiatedType(InterfaceType type,
-                                Enqueuer enqueuer,
-                                Registry registry,
-                                {bool mirrorUsage: false}) {
+  void registerInstantiatedType(
+      InterfaceType type, Enqueuer enqueuer, Registry registry,
+      {bool mirrorUsage: false}) {
     registry.registerDependency(type.element);
     enqueuer.registerInstantiatedType(type, mirrorUsage: mirrorUsage);
   }
 
   /// Register a runtime type variable bound tests between [typeArgument] and
   /// [bound].
-  void registerTypeVariableBoundsSubtypeCheck(DartType typeArgument,
-                                              DartType bound) {}
+  void registerTypeVariableBoundsSubtypeCheck(
+      DartType typeArgument, DartType bound) {}
 
   /**
    * Call this to register that an instantiated generic class has a call
    * method.
    */
   void registerCallMethodWithFreeTypeVariables(
-      Element callMethod,
-      Enqueuer enqueuer,
-      Registry registry) {}
+      Element callMethod, Enqueuer enqueuer, Registry registry) {}
 
   /// Called to instruct the backend to register that a closure exists for a
   /// function on an instantiated generic class.
   void registerClosureWithFreeTypeVariables(
-      Element closure,
-      Enqueuer enqueuer,
-      Registry registry) {
+      Element closure, Enqueuer enqueuer, Registry registry) {
     enqueuer.universe.closuresWithFreeTypeVariables.add(closure);
   }
 
@@ -349,9 +309,8 @@
   /// Called by [MirrorUsageAnalyzerTask] after it has merged all @MirrorsUsed
   /// annotations. The arguments corresponds to the unions of the corresponding
   /// fields of the annotations.
-  void registerMirrorUsage(Set<String> symbols,
-                           Set<Element> targets,
-                           Set<Element> metaTargets) {}
+  void registerMirrorUsage(
+      Set<String> symbols, Set<Element> targets, Set<Element> metaTargets) {}
 
   /// Returns true if this element needs reflection information at runtime.
   bool isAccessibleByReflection(Element element) => true;
@@ -419,15 +378,12 @@
 
   void registerMainHasArguments(Enqueuer enqueuer) {}
 
-  void registerAsyncMarker(FunctionElement element,
-                           Enqueuer enqueuer,
-                           Registry registry) {}
+  void registerAsyncMarker(
+      FunctionElement element, Enqueuer enqueuer, Registry registry) {}
 
   /// Called when resolving a call to a foreign function.
-  void registerForeignCall(Send node,
-                           Element element,
-                           CallStructure callStructure,
-                           ForeignResolver resolver) {}
+  void registerForeignCall(Send node, Element element,
+      CallStructure callStructure, ForeignResolver resolver) {}
 
   /// Returns the location of the patch-file associated with [libraryName]
   /// resolved from [plaformConfigUri].
@@ -438,8 +394,8 @@
   /// Creates an impact strategy to use for compilation.
   ImpactStrategy createImpactStrategy(
       {bool supportDeferredLoad: true,
-       bool supportDumpInfo: true,
-       bool supportSerialization: true}) {
+      bool supportDumpInfo: true,
+      bool supportSerialization: true}) {
     return const ImpactStrategy();
   }
 }
@@ -473,7 +429,7 @@
 }
 
 /// Interface for serialization of backend specific data.
-class BackendSerialization  {
+class BackendSerialization {
   const BackendSerialization();
 
   SerializerPlugin get serializer => const SerializerPlugin();
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index 7e9b40f..0a9cf75 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -5,40 +5,24 @@
 library dart2js.common.codegen;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
-import '../constants/values.dart' show
-    ConstantValue;
-import '../dart_types.dart' show
-    DartType,
-    InterfaceType;
-import '../elements/elements.dart' show
-    AstElement,
-    ClassElement,
-    Element,
-    FunctionElement,
-    LocalFunctionElement;
-import '../enqueue.dart' show
-    CodegenEnqueuer;
-import '../resolution/tree_elements.dart' show
-    TreeElements;
-import '../universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    TypeUse;
-import '../universe/world_impact.dart' show
-    WorldImpact,
-    WorldImpactBuilder,
-    WorldImpactVisitor;
-import '../util/util.dart' show
-    Pair,
-    Setlet;
-import 'registry.dart' show
-    Registry,
-    EagerRegistry;
-import 'work.dart' show
-    ItemCompilationContext,
-    WorkItem;
+import '../compiler.dart' show Compiler;
+import '../constants/values.dart' show ConstantValue;
+import '../dart_types.dart' show DartType, InterfaceType;
+import '../elements/elements.dart'
+    show
+        AstElement,
+        ClassElement,
+        Element,
+        FunctionElement,
+        LocalFunctionElement;
+import '../enqueue.dart' show CodegenEnqueuer;
+import '../resolution/tree_elements.dart' show TreeElements;
+import '../universe/use.dart' show DynamicUse, StaticUse, TypeUse;
+import '../universe/world_impact.dart'
+    show WorldImpact, WorldImpactBuilder, WorldImpactVisitor;
+import '../util/util.dart' show Pair, Setlet;
+import 'registry.dart' show Registry, EagerRegistry;
+import 'work.dart' show ItemCompilationContext, WorkItem;
 
 class CodegenImpact extends WorldImpact {
   const CodegenImpact();
@@ -94,21 +78,23 @@
 
   Iterable<ConstantValue> get compileTimeConstants {
     return _compileTimeConstants != null
-        ? _compileTimeConstants : const <ConstantValue>[];
+        ? _compileTimeConstants
+        : const <ConstantValue>[];
   }
 
-  void registerTypeVariableBoundsSubtypeCheck(DartType subtype,
-                                              DartType supertype) {
+  void registerTypeVariableBoundsSubtypeCheck(
+      DartType subtype, DartType supertype) {
     if (_typeVariableBoundsSubtypeChecks == null) {
       _typeVariableBoundsSubtypeChecks = new Setlet<Pair<DartType, DartType>>();
     }
-    _typeVariableBoundsSubtypeChecks.add(
-        new Pair<DartType, DartType>(subtype, supertype));
+    _typeVariableBoundsSubtypeChecks
+        .add(new Pair<DartType, DartType>(subtype, supertype));
   }
 
   Iterable<Pair<DartType, DartType>> get typeVariableBoundsSubtypeChecks {
     return _typeVariableBoundsSubtypeChecks != null
-        ? _typeVariableBoundsSubtypeChecks : const <Pair<DartType, DartType>>[];
+        ? _typeVariableBoundsSubtypeChecks
+        : const <Pair<DartType, DartType>>[];
   }
 
   void registerConstSymbol(String name) {
@@ -119,8 +105,7 @@
   }
 
   Iterable<String> get constSymbols {
-    return _constSymbols != null
-        ? _constSymbols : const <String>[];
+    return _constSymbols != null ? _constSymbols : const <String>[];
   }
 
   void registerSpecializedGetInterceptor(Set<ClassElement> classes) {
@@ -132,7 +117,8 @@
 
   Iterable<Set<ClassElement>> get specializedGetInterceptors {
     return _specializedGetInterceptors != null
-        ? _specializedGetInterceptors : const <Set<ClassElement>>[];
+        ? _specializedGetInterceptors
+        : const <Set<ClassElement>>[];
   }
 
   void registerUseInterceptor() {
@@ -149,8 +135,7 @@
   }
 
   Iterable<ClassElement> get typeConstants {
-    return _typeConstants != null
-        ? _typeConstants : const <ClassElement>[];
+    return _typeConstants != null ? _typeConstants : const <ClassElement>[];
   }
 
   void registerAsyncMarker(FunctionElement element) {
@@ -161,8 +146,7 @@
   }
 
   Iterable<Element> get asyncMarkers {
-    return _asyncMarkers != null
-        ? _asyncMarkers : const <FunctionElement>[];
+    return _asyncMarkers != null ? _asyncMarkers : const <FunctionElement>[];
   }
 }
 
@@ -177,7 +161,7 @@
       : this.compiler = compiler,
         this.currentElement = currentElement,
         this.worldImpact = new _CodegenImpact(new EagerRegistry(
-          'EagerRegistry for $currentElement', compiler.enqueuer.codegen));
+            'EagerRegistry for $currentElement', compiler.enqueuer.codegen));
 
   bool get isForResolution => false;
 
@@ -204,8 +188,8 @@
     worldImpact.registerCompileTimeConstant(constant);
   }
 
-  void registerTypeVariableBoundsSubtypeCheck(DartType subtype,
-                                              DartType supertype) {
+  void registerTypeVariableBoundsSubtypeCheck(
+      DartType subtype, DartType supertype) {
     worldImpact.registerTypeVariableBoundsSubtypeCheck(subtype, supertype);
   }
 
@@ -242,16 +226,14 @@
 class CodegenWorkItem extends WorkItem {
   CodegenRegistry registry;
 
-  factory CodegenWorkItem(
-      Compiler compiler,
-      AstElement element,
+  factory CodegenWorkItem(Compiler compiler, AstElement element,
       ItemCompilationContext compilationContext) {
     // If this assertion fails, the resolution callbacks of the backend may be
     // missing call of form registry.registerXXX. Alternatively, the code
     // generation could spuriously be adding dependencies on things we know we
     // don't need.
-    assert(invariant(element,
-        compiler.enqueuer.resolution.hasBeenProcessed(element),
+    assert(invariant(
+        element, compiler.enqueuer.resolution.hasBeenProcessed(element),
         message: "$element has not been resolved."));
     assert(invariant(element, element.resolvedAst.elements != null,
         message: 'Resolution tree is null for $element in codegen work item'));
@@ -259,8 +241,7 @@
   }
 
   CodegenWorkItem.internal(
-      AstElement element,
-      ItemCompilationContext compilationContext)
+      AstElement element, ItemCompilationContext compilationContext)
       : super(element, compilationContext);
 
   TreeElements get resolutionTree => element.resolvedAst.elements;
diff --git a/pkg/compiler/lib/src/common/names.dart b/pkg/compiler/lib/src/common/names.dart
index 70ebabe..300d176 100644
--- a/pkg/compiler/lib/src/common/names.dart
+++ b/pkg/compiler/lib/src/common/names.dart
@@ -6,13 +6,9 @@
 /// the compiler.
 library dart2js.common.names;
 
-import '../elements/elements.dart' show
-    Name,
-    PublicName;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
+import '../elements/elements.dart' show Name, PublicName;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
 
 /// [String]s commonly used.
 class Identifiers {
@@ -106,8 +102,7 @@
       new Selector.call(Names.toString_, CallStructure.NO_ARGS);
 
   /// The selector for tearing off toString.
-  static final Selector toStringGetter =
-      new Selector.getter(Names.toString_);
+  static final Selector toStringGetter = new Selector.getter(Names.toString_);
 
   static final Selector hashCode_ =
       new Selector.getter(const PublicName('hashCode'));
@@ -131,9 +126,22 @@
   /// These objects are shared between different runs in batch-mode and must
   /// thus remain in the [Selector.canonicalizedValues] map.
   static final List<Selector> ALL = <Selector>[
-      cancel, current, iterator, moveNext, noSuchMethod_, noSuchMethodGetter,
-      toString_, toStringGetter, hashCode_, compareTo, equals, length,
-      codeUnitAt, index, runtimeType_];
+    cancel,
+    current,
+    iterator,
+    moveNext,
+    noSuchMethod_,
+    noSuchMethodGetter,
+    toString_,
+    toStringGetter,
+    hashCode_,
+    compareTo,
+    equals,
+    length,
+    codeUnitAt,
+    index,
+    runtimeType_
+  ];
 }
 
 /// [Uri]s commonly used.
diff --git a/pkg/compiler/lib/src/common/registry.dart b/pkg/compiler/lib/src/common/registry.dart
index 1ba7b9d..0499858 100644
--- a/pkg/compiler/lib/src/common/registry.dart
+++ b/pkg/compiler/lib/src/common/registry.dart
@@ -4,16 +4,10 @@
 
 library dart2js.common.registry;
 
-import '../dart_types.dart' show
-    InterfaceType;
-import '../enqueue.dart' show
-    Enqueuer;
-import '../elements/elements.dart' show
-    Element,
-    FunctionElement;
-import '../universe/use.dart' show
-    DynamicUse,
-    StaticUse;
+import '../dart_types.dart' show InterfaceType;
+import '../enqueue.dart' show Enqueuer;
+import '../elements/elements.dart' show Element, FunctionElement;
+import '../universe/use.dart' show DynamicUse, StaticUse;
 
 /// Interface for registration of element dependencies.
 abstract class Registry {
diff --git a/pkg/compiler/lib/src/common/resolution.dart b/pkg/compiler/lib/src/common/resolution.dart
index 7c675af..42f9617 100644
--- a/pkg/compiler/lib/src/common/resolution.dart
+++ b/pkg/compiler/lib/src/common/resolution.dart
@@ -1,4 +1,3 @@
-
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -6,49 +5,37 @@
 library dart2js.common.resolution;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
-import '../constants/expressions.dart' show
-    ConstantExpression;
-import '../core_types.dart' show
-    CoreTypes;
-import '../dart_types.dart' show
-    DartType,
-    InterfaceType;
-import '../elements/elements.dart' show
-    AstElement,
-    ClassElement,
-    Element,
-    ErroneousElement,
-    FunctionElement,
-    FunctionSignature,
-    LocalFunctionElement,
-    MetadataAnnotation,
-    MethodElement,
-    TypedefElement,
-    TypeVariableElement;
-import '../enqueue.dart' show
-    ResolutionEnqueuer;
-import '../options.dart' show
-    ParserOptions;
-import '../parser/element_listener.dart' show
-    ScannerOptions;
-import '../tree/tree.dart' show
-    AsyncForIn,
-    Send,
-    TypeAnnotation;
-import '../universe/world_impact.dart' show
-    WorldImpact;
-import 'work.dart' show
-    ItemCompilationContext,
-    WorkItem;
+import '../compiler.dart' show Compiler;
+import '../constants/expressions.dart' show ConstantExpression;
+import '../core_types.dart' show CoreTypes;
+import '../dart_types.dart' show DartType, InterfaceType;
+import '../elements/elements.dart'
+    show
+        AstElement,
+        ClassElement,
+        Element,
+        ErroneousElement,
+        FunctionElement,
+        FunctionSignature,
+        LocalFunctionElement,
+        MetadataAnnotation,
+        MethodElement,
+        ResolvedAst,
+        TypedefElement,
+        TypeVariableElement;
+import '../enqueue.dart' show ResolutionEnqueuer;
+import '../options.dart' show ParserOptions;
+import '../parser/element_listener.dart' show ScannerOptions;
+import '../tree/tree.dart' show AsyncForIn, Send, TypeAnnotation;
+import '../universe/world_impact.dart' show WorldImpact;
+import 'work.dart' show ItemCompilationContext, WorkItem;
 
 /// [WorkItem] used exclusively by the [ResolutionEnqueuer].
 class ResolutionWorkItem extends WorkItem {
   bool _isAnalyzed = false;
 
-  ResolutionWorkItem(AstElement element,
-                     ItemCompilationContext compilationContext)
+  ResolutionWorkItem(
+      AstElement element, ItemCompilationContext compilationContext)
       : super(element, compilationContext);
 
   WorldImpact run(Compiler compiler, ResolutionEnqueuer world) {
@@ -77,48 +64,69 @@
 enum Feature {
   /// Invocation of a generative construction on an abstract class.
   ABSTRACT_CLASS_INSTANTIATION,
+
   /// An assert statement with no message.
   ASSERT,
+
   /// An assert statement with a message.
   ASSERT_WITH_MESSAGE,
+
   /// A method with an `async` body modifier.
   ASYNC,
+
   /// An asynchronous for in statement like `await for (var e in i) {}`.
   ASYNC_FOR_IN,
+
   /// A method with an `async*` body modifier.
   ASYNC_STAR,
+
   /// A catch statement.
   CATCH_STATEMENT,
+
   /// A compile time error.
   COMPILE_TIME_ERROR,
+
   /// A fall through in a switch case.
   FALL_THROUGH_ERROR,
+
   /// A ++/-- operation.
   INC_DEC_OPERATION,
+
   /// A field whose initialization is not a constant.
   LAZY_FIELD,
+
   /// A catch clause with a variable for the stack trace.
   STACK_TRACE_IN_CATCH,
+
   /// String interpolation.
   STRING_INTERPOLATION,
+
   /// String juxtaposition.
   STRING_JUXTAPOSITION,
+
   /// An implicit call to `super.noSuchMethod`, like calling an unresolved
   /// super method.
   SUPER_NO_SUCH_METHOD,
+
   /// A redirection to the `Symbol` constructor.
   SYMBOL_CONSTRUCTOR,
+
   /// An synchronous for in statement, like `for (var e in i) {}`.
   SYNC_FOR_IN,
+
   /// A method with a `sync*` body modifier.
   SYNC_STAR,
+
   /// A throw expression.
   THROW_EXPRESSION,
+
   /// An implicit throw of a `NoSuchMethodError`, like calling an unresolved
   /// static method.
   THROW_NO_SUCH_METHOD,
+
   /// An implicit throw of a runtime error, like
   THROW_RUNTIME_ERROR,
+
   /// The need for a type variable bound check, like instantiation of a generic
   /// type whose type variable have non-trivial bounds.
   TYPE_VARIABLE_BOUNDS_CHECK,
@@ -133,8 +141,7 @@
   MapLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false});
 
   int get hashCode {
-    return
-        type.hashCode * 13 +
+    return type.hashCode * 13 +
         isConstant.hashCode * 17 +
         isEmpty.hashCode * 19;
   }
@@ -142,8 +149,7 @@
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! MapLiteralUse) return false;
-    return
-        type == other.type &&
+    return type == other.type &&
         isConstant == other.isConstant &&
         isEmpty == other.isEmpty;
   }
@@ -162,8 +168,7 @@
   ListLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false});
 
   int get hashCode {
-    return
-        type.hashCode * 13 +
+    return type.hashCode * 13 +
         isConstant.hashCode * 17 +
         isEmpty.hashCode * 19;
   }
@@ -171,8 +176,7 @@
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! ListLiteralUse) return false;
-    return
-        type == other.type &&
+    return type == other.type &&
         isConstant == other.isConstant &&
         isEmpty == other.isEmpty;
   }
@@ -204,6 +208,12 @@
   ResolutionWorkItem createWorkItem(
       Element element, ItemCompilationContext compilationContext);
 
+  /// Returns `true` if [element] as a fully computed [ResolvedAst].
+  bool hasResolvedAst(Element element);
+
+  /// Returns the `ResolvedAst` for the [element].
+  ResolvedAst getResolvedAst(Element element);
+
   /// Returns `true` if the [ResolutionImpact] for [element] is cached.
   bool hasResolutionImpact(Element element);
 
@@ -233,4 +243,4 @@
   measure(f());
   ScannerOptions getScannerOptionsFor(Element element);
   ParserOptions get parserOptions;
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/common/tasks.dart b/pkg/compiler/lib/src/common/tasks.dart
index 1088363..69e5f11 100644
--- a/pkg/compiler/lib/src/common/tasks.dart
+++ b/pkg/compiler/lib/src/common/tasks.dart
@@ -4,14 +4,11 @@
 
 library dart2js.common.tasks;
 
-import 'dart:developer' show
-    UserTag;
+import 'dart:developer' show UserTag;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
-import '../elements/elements.dart' show
-    Element;
+import '../compiler.dart' show Compiler;
+import '../elements/elements.dart' show Element;
 
 typedef void DeferredAction();
 
@@ -80,8 +77,8 @@
     // Use a nested CompilerTask for the measurement to ensure nested [measure]
     // calls work correctly. The subtasks will never themselves have nested
     // subtasks because they are not accessible outside.
-    GenericTask subtask = _subtasks.putIfAbsent(name,
-        () => new GenericTask(name, compiler));
+    GenericTask subtask =
+        _subtasks.putIfAbsent(name, () => new GenericTask(name, compiler));
     return subtask.measure(action);
   }
 
@@ -93,6 +90,5 @@
 class GenericTask extends CompilerTask {
   final String name;
 
-  GenericTask(this.name, Compiler compiler)
-      : super(compiler);
+  GenericTask(this.name, Compiler compiler) : super(compiler);
 }
diff --git a/pkg/compiler/lib/src/common/work.dart b/pkg/compiler/lib/src/common/work.dart
index 482d9e8..31dc75c 100644
--- a/pkg/compiler/lib/src/common/work.dart
+++ b/pkg/compiler/lib/src/common/work.dart
@@ -5,22 +5,16 @@
 library dart2js.common.work;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
-import '../elements/elements.dart' show
-    AstElement;
-import '../enqueue.dart' show
-    Enqueuer;
-import '../universe/world_impact.dart' show
-    WorldImpact;
-
+import '../compiler.dart' show Compiler;
+import '../elements/elements.dart' show AstElement;
+import '../enqueue.dart' show Enqueuer;
+import '../universe/world_impact.dart' show WorldImpact;
 
 /**
  * Contains backend-specific data that is used throughout the compilation of
  * one work item.
  */
-class ItemCompilationContext {
-}
+class ItemCompilationContext {}
 
 abstract class WorkItem {
   final ItemCompilationContext compilationContext;
diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart
index 1eabdf3..825176c 100644
--- a/pkg/compiler/lib/src/compile_time_constants.dart
+++ b/pkg/compiler/lib/src/compile_time_constants.dart
@@ -5,31 +5,23 @@
 library dart2js.compile_time_constant_evaluator;
 
 import 'common.dart';
-import 'common/resolution.dart' show
-    Resolution;
-import 'common/tasks.dart' show
-    CompilerTask;
-import 'compiler.dart' show
-    Compiler;
+import 'common/resolution.dart' show Resolution;
+import 'common/tasks.dart' show CompilerTask;
+import 'compiler.dart' show Compiler;
 import 'constant_system_dart.dart';
 import 'constants/constant_system.dart';
 import 'constants/evaluation.dart';
 import 'constants/expressions.dart';
 import 'constants/values.dart';
-import 'core_types.dart' show
-    CoreTypes;
+import 'core_types.dart' show CoreTypes;
 import 'dart_types.dart';
 import 'elements/elements.dart';
-import 'elements/modelx.dart' show
-    FunctionElementX;
-import 'resolution/tree_elements.dart' show
-    TreeElements;
+import 'elements/modelx.dart' show FunctionElementX;
+import 'resolution/tree_elements.dart' show TreeElements;
 import 'resolution/operators.dart';
 import 'tree/tree.dart';
-import 'util/util.dart' show
-    Link;
-import 'universe/call_structure.dart' show
-    CallStructure;
+import 'util/util.dart' show Link;
+import 'universe/call_structure.dart' show CallStructure;
 
 /// A [ConstantEnvironment] provides access for constants compiled for variable
 /// initializers.
@@ -87,9 +79,8 @@
   /// the compile-time constant for the backend interpretation of constants.
   ///
   /// The returned constant is always of the frontend interpretation.
-  ConstantExpression compileMetadata(MetadataAnnotation metadata,
-                                     Node node,
-                                     TreeElements elements);
+  ConstantExpression compileMetadata(
+      MetadataAnnotation metadata, Node node, TreeElements elements);
 
   /// Evaluates [constant] and caches the result.
   // TODO(johnniwinther): Remove when all constants are evaluated.
@@ -182,8 +173,7 @@
   void evaluate(ConstantExpression constant) {
     constantValueMap.putIfAbsent(constant, () {
       return constant.evaluate(
-          new _CompilerEnvironment(compiler),
-          constantSystem);
+          new _CompilerEnvironment(compiler), constantSystem);
     });
   }
 
@@ -263,11 +253,8 @@
           if (!constantSystem.isSubtype(
               compiler.types, constantType, elementType)) {
             if (isConst) {
-              reporter.reportErrorMessage(
-                  node,
-                  MessageKind.NOT_ASSIGNABLE,
-                  {'fromType': constantType,
-                   'toType': elementType});
+              reporter.reportErrorMessage(node, MessageKind.NOT_ASSIGNABLE,
+                  {'fromType': constantType, 'toType': elementType});
             } else {
               // If the field cannot be lazily initialized, we will throw
               // the exception at runtime.
@@ -292,10 +279,12 @@
   }
 
   ConstantExpression compileNodeWithDefinitions(
-      Node node, TreeElements definitions, {bool isConst: true}) {
+      Node node, TreeElements definitions,
+      {bool isConst: true}) {
     assert(node != null);
     CompileTimeConstantEvaluator evaluator = new CompileTimeConstantEvaluator(
-        this, definitions, compiler, isConst: isConst);
+        this, definitions, compiler,
+        isConst: isConst);
     AstConstant constant = evaluator.evaluate(node);
     if (constant != null) {
       cacheConstantValue(constant.expression, constant.value);
@@ -340,7 +329,8 @@
   }
 
   ConstantExpression compileNodeWithDefinitions(
-      Node node, TreeElements definitions, {bool isConst: true}) {
+      Node node, TreeElements definitions,
+      {bool isConst: true}) {
     ConstantExpression constant = definitions.getConstant(node);
     if (constant != null && getConstantValue(constant) != null) {
       return constant;
@@ -393,13 +383,17 @@
   }
 
   AstConstant visitLiteralBool(LiteralBool node) {
-    return new AstConstant(context, node,
+    return new AstConstant(
+        context,
+        node,
         new BoolConstantExpression(node.value),
         constantSystem.createBool(node.value));
   }
 
   AstConstant visitLiteralDouble(LiteralDouble node) {
-    return new AstConstant(context, node,
+    return new AstConstant(
+        context,
+        node,
         new DoubleConstantExpression(node.value),
         constantSystem.createDouble(node.value));
   }
@@ -426,7 +420,9 @@
       argumentValues.add(argument.value);
     }
     DartType type = elements.getType(node);
-    return new AstConstant(context, node,
+    return new AstConstant(
+        context,
+        node,
         new ListConstantExpression(type, argumentExpressions),
         constantSystem.createList(type, argumentValues));
   }
@@ -462,7 +458,9 @@
       map[key.value] = value.value;
     }
     InterfaceType type = elements.getType(node);
-    return new AstConstant(context, node,
+    return new AstConstant(
+        context,
+        node,
         new MapConstantExpression(type, keyExpressions, valueExpressions),
         constantSystem.createMap(
             compiler, type, keyValues, map.values.toList()));
@@ -474,7 +472,9 @@
   }
 
   AstConstant visitLiteralString(LiteralString node) {
-    return new AstConstant(context, node,
+    return new AstConstant(
+        context,
+        node,
         new StringConstantExpression(node.dartString.slowToString()),
         constantSystem.createString(node.dartString));
   }
@@ -485,7 +485,9 @@
     if (left == null || right == null) return null;
     StringConstantValue leftValue = left.value;
     StringConstantValue rightValue = right.value;
-    return new AstConstant(context, node,
+    return new AstConstant(
+        context,
+        node,
         new ConcatenateConstantExpression([left.expression, right.expression]),
         constantSystem.createString(new DartString.concat(
             leftValue.primitiveValue, rightValue.primitiveValue)));
@@ -529,7 +531,9 @@
           new DartString.concat(accumulator, partStringValue.primitiveValue);
     }
     ;
-    return new AstConstant(context, node,
+    return new AstConstant(
+        context,
+        node,
         new ConcatenateConstantExpression(subexpressions),
         constantSystem.createString(accumulator));
   }
@@ -580,7 +584,9 @@
       if (Elements.isStaticOrTopLevelFunction(element)) {
         FunctionElementX function = element;
         function.computeType(resolution);
-        result = new AstConstant(context, send,
+        result = new AstConstant(
+            context,
+            send,
             new FunctionConstantExpression(function),
             new FunctionConstantValue(function));
       } else if (Elements.isStaticOrTopLevelField(element)) {
@@ -591,14 +597,18 @@
           elementExpression = handler.compileVariable(element);
         }
         if (elementExpression != null) {
-          result = new AstConstant(context, send,
+          result = new AstConstant(
+              context,
+              send,
               new VariableConstantExpression(element),
               handler.getConstantValue(elementExpression));
         }
       } else if (Elements.isClass(element) || Elements.isTypedef(element)) {
         assert(elements.isTypeLiteral(send));
         DartType elementType = elements.getTypeLiteralType(send);
-        result = new AstConstant(context, send,
+        result = new AstConstant(
+            context,
+            send,
             new TypeConstantExpression(elementType),
             makeTypeConstant(elementType));
       } else if (send.receiver != null) {
@@ -619,7 +629,9 @@
         ConstantExpression variableExpression =
             handler.compileConstant(element);
         if (variableExpression != null) {
-          result = new AstConstant(context, send,
+          result = new AstConstant(
+              context,
+              send,
               new VariableConstantExpression(element),
               handler.getConstantValue(variableExpression));
         }
@@ -634,11 +646,13 @@
         }
         PrefixElement prefix =
             compiler.deferredLoadTask.deferredPrefixElement(send, elements);
-        result = new AstConstant(context, send,
+        result = new AstConstant(
+            context,
+            send,
             new DeferredConstantExpression(result.expression, prefix),
             new DeferredConstantValue(result.value, prefix));
-        compiler.deferredLoadTask.registerConstantDeferredUse(
-            result.value, prefix);
+        compiler.deferredLoadTask
+            .registerConstantDeferredUse(result.value, prefix);
       }
       return result;
     } else if (send.isCall) {
@@ -651,8 +665,12 @@
         ConstantValue result =
             constantSystem.identity.fold(left.value, right.value);
         if (result != null) {
-          return new AstConstant(context, send, new IdenticalConstantExpression(
-              left.expression, right.expression), result);
+          return new AstConstant(
+              context,
+              send,
+              new IdenticalConstantExpression(
+                  left.expression, right.expression),
+              result);
         }
       }
       return signalNotCompileTimeConstant(send);
@@ -672,7 +690,9 @@
       if (folded == null) {
         return signalNotCompileTimeConstant(send);
       }
-      return new AstConstant(context, send,
+      return new AstConstant(
+          context,
+          send,
           new UnaryConstantExpression(operator, receiverConstant.expression),
           folded);
     } else if (send.isOperator && !send.isPostfix) {
@@ -716,8 +736,12 @@
       if (folded == null) {
         return signalNotCompileTimeConstant(send);
       }
-      return new AstConstant(context, send, new BinaryConstantExpression(
-          left.expression, operator, right.expression), folded);
+      return new AstConstant(
+          context,
+          send,
+          new BinaryConstantExpression(
+              left.expression, operator, right.expression),
+          folded);
     }
     return signalNotCompileTimeConstant(send);
   }
@@ -729,11 +753,8 @@
     } else if (!condition.value.isBool) {
       DartType conditionType = condition.value.getType(coreTypes);
       if (isEvaluatingConstant) {
-        reporter.reportErrorMessage(
-            node.condition,
-            MessageKind.NOT_ASSIGNABLE,
-            {'fromType': conditionType,
-             'toType': coreTypes.boolType});
+        reporter.reportErrorMessage(node.condition, MessageKind.NOT_ASSIGNABLE,
+            {'fromType': conditionType, 'toType': coreTypes.boolType});
         return new ErroneousAstConstant(context, node);
       }
       return null;
@@ -744,11 +765,14 @@
       return null;
     }
     BoolConstantValue boolCondition = condition.value;
-    return new AstConstant(context, node, new ConditionalConstantExpression(
-        condition.expression, thenExpression.expression,
-        elseExpression.expression), boolCondition.primitiveValue
-        ? thenExpression.value
-        : elseExpression.value);
+    return new AstConstant(
+        context,
+        node,
+        new ConditionalConstantExpression(condition.expression,
+            thenExpression.expression, elseExpression.expression),
+        boolCondition.primitiveValue
+            ? thenExpression.value
+            : elseExpression.value);
   }
 
   AstConstant visitSendSet(SendSet node) {
@@ -762,9 +786,12 @@
    *
    * Invariant: [target] must be an implementation element.
    */
-  List<AstConstant> evaluateArgumentsToConstructor(Node node,
-      CallStructure callStructure, Link<Node> arguments,
-      ConstructorElement target, {AstConstant compileArgument(Node node)}) {
+  List<AstConstant> evaluateArgumentsToConstructor(
+      Node node,
+      CallStructure callStructure,
+      Link<Node> arguments,
+      ConstructorElement target,
+      {AstConstant compileArgument(Node node)}) {
     assert(invariant(node, target.isImplementation));
 
     AstConstant compileDefaultValue(VariableElement element) {
@@ -778,9 +805,8 @@
     if (!callStructure.signatureApplies(signature)) {
       String name = Elements.constructorNameForDiagnostics(
           target.enclosingClass.name, target.name);
-      reporter.reportErrorMessage(
-          node, MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS,
-          {'constructorName': name});
+      reporter.reportErrorMessage(node,
+          MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS, {'constructorName': name});
 
       return new List<AstConstant>.filled(
           target.functionSignature.parameterCount,
@@ -834,8 +860,7 @@
       if (constructor.isEffectiveTargetMalformed) {
         isInvalid = true;
       } else {
-        constructedType =
-            constructor.computeEffectiveTargetType(type);
+        constructedType = constructor.computeEffectiveTargetType(type);
         ConstructorElement target = constructor.effectiveTarget;
         // The constructor must be an implementation to ensure that field
         // initializers are handled correctly.
@@ -882,14 +907,26 @@
       return createFromEnvironmentConstant(node, constructedType, constructor,
           callStructure, normalizedArguments, concreteArguments);
     } else {
-      return makeConstructedConstant(compiler, handler, context, node, type,
-          constructor, constructedType, implementation, callStructure,
-          concreteArguments, normalizedArguments);
+      return makeConstructedConstant(
+          compiler,
+          handler,
+          context,
+          node,
+          type,
+          constructor,
+          constructedType,
+          implementation,
+          callStructure,
+          concreteArguments,
+          normalizedArguments);
     }
   }
 
-  AstConstant createFromEnvironmentConstant(Node node, InterfaceType type,
-      ConstructorElement constructor, CallStructure callStructure,
+  AstConstant createFromEnvironmentConstant(
+      Node node,
+      InterfaceType type,
+      ConstructorElement constructor,
+      CallStructure callStructure,
       List<AstConstant> normalizedArguments,
       List<AstConstant> concreteArguments) {
     var firstArgument = normalizedArguments[0].value;
@@ -906,8 +943,7 @@
       reporter.reportErrorMessage(
           normalizedArguments[0].node,
           MessageKind.NOT_ASSIGNABLE,
-          {'fromType': type,
-           'toType': coreTypes.stringType});
+          {'fromType': type, 'toType': coreTypes.stringType});
       return null;
     }
 
@@ -917,8 +953,7 @@
       reporter.reportErrorMessage(
           normalizedArguments[1].node,
           MessageKind.NOT_ASSIGNABLE,
-          {'fromType': type,
-           'toType': coreTypes.intType});
+          {'fromType': type, 'toType': coreTypes.intType});
       return null;
     }
 
@@ -928,8 +963,7 @@
       reporter.reportErrorMessage(
           normalizedArguments[1].node,
           MessageKind.NOT_ASSIGNABLE,
-          {'fromType': type,
-           'toType': coreTypes.boolType});
+          {'fromType': type, 'toType': coreTypes.boolType});
       return null;
     }
 
@@ -939,8 +973,7 @@
       reporter.reportErrorMessage(
           normalizedArguments[1].node,
           MessageKind.NOT_ASSIGNABLE,
-          {'fromType': type,
-           'toType': coreTypes.stringType});
+          {'fromType': type, 'toType': coreTypes.stringType});
       return null;
     }
 
@@ -989,24 +1022,31 @@
     }
   }
 
-  static AstConstant makeConstructedConstant(Compiler compiler,
-      ConstantCompilerBase handler, Element context, Node node,
-      InterfaceType type, ConstructorElement constructor,
-      InterfaceType constructedType, ConstructorElement target,
-      CallStructure callStructure, List<AstConstant> concreteArguments,
+  static AstConstant makeConstructedConstant(
+      Compiler compiler,
+      ConstantCompilerBase handler,
+      Element context,
+      Node node,
+      InterfaceType type,
+      ConstructorElement constructor,
+      InterfaceType constructedType,
+      ConstructorElement target,
+      CallStructure callStructure,
+      List<AstConstant> concreteArguments,
       List<AstConstant> normalizedArguments) {
     if (target.isRedirectingFactory) {
       // This happens is case of cyclic redirection.
       assert(invariant(node, compiler.compilationFailed,
           message: "makeConstructedConstant can only be called with the "
-          "effective target: $constructor"));
+              "effective target: $constructor"));
       return new ErroneousAstConstant(context, node);
     }
-    assert(invariant(node,
+    assert(invariant(
+        node,
         callStructure.signatureApplies(constructor.functionSignature) ||
             compiler.compilationFailed,
         message: "Call structure $callStructure does not apply to constructor "
-        "$constructor."));
+            "$constructor."));
 
     ConstructorEvaluator evaluator =
         new ConstructorEvaluator(constructedType, target, handler, compiler);
@@ -1018,8 +1058,10 @@
     fieldConstants.forEach((FieldElement field, AstConstant astConstant) {
       fieldValues[field] = astConstant.value;
     });
-    return new AstConstant(context, node, new ConstructedConstantExpression(
-            type, constructor, callStructure,
+    return new AstConstant(
+        context,
+        node,
+        new ConstructedConstantExpression(type, constructor, callStructure,
             concreteArguments.map((e) => e.expression).toList()),
         new ConstructedConstantValue(constructedType, fieldValues));
   }
@@ -1085,11 +1127,8 @@
       if (!constantSystem.isSubtype(
           compiler.types, constantType, elementType)) {
         reporter.withCurrentElement(constant.element, () {
-          reporter.reportErrorMessage(
-              constant.node,
-              MessageKind.NOT_ASSIGNABLE,
-              {'fromType': constantType,
-               'toType': elementType});
+          reporter.reportErrorMessage(constant.node, MessageKind.NOT_ASSIGNABLE,
+              {'fromType': constantType, 'toType': elementType});
         });
       }
     }
@@ -1127,7 +1166,9 @@
       List<AstConstant> compiledArguments, FunctionElement targetConstructor) {
     ConstructorEvaluator evaluator = new ConstructorEvaluator(
         constructedType.asInstanceOf(targetConstructor.enclosingClass),
-        targetConstructor, handler, compiler);
+        targetConstructor,
+        handler,
+        compiler);
     evaluator.evaluateConstructorFieldValues(compiledArguments);
     // Copy over the fieldValues from the super/redirect-constructor.
     // No need to go through [updateFieldValue] because the
@@ -1168,11 +1209,11 @@
           if (!target.isMalformed) {
             List<AstConstant> compiledArguments =
                 evaluateArgumentsToConstructor(
-                  call,
-                  elements.getSelector(call).callStructure,
-                  call.arguments,
-                  target,
-                  compileArgument: evaluateConstant);
+                    call,
+                    elements.getSelector(call).callStructure,
+                    call.arguments,
+                    target,
+                    compileArgument: evaluateConstant);
             evaluateSuperOrRedirectSend(compiledArguments, target);
           }
           foundSuperOrRedirect = true;
@@ -1202,7 +1243,9 @@
         // already and compilation will fail anyway. So just ignore that case.
         if (targetConstructor != null) {
           List<AstConstant> compiledArguments = evaluateArgumentsToConstructor(
-              functionNode, CallStructure.NO_ARGS, const Link<Node>(),
+              functionNode,
+              CallStructure.NO_ARGS,
+              const Link<Node>(),
               targetConstructor);
           evaluateSuperOrRedirectSend(compiledArguments, targetConstructor);
         }
@@ -1227,10 +1270,10 @@
   /// inheritance chain of [classElement].
   Map<FieldElement, AstConstant> buildFieldConstants(
       ClassElement classElement) {
-    Map<FieldElement, AstConstant> fieldConstants = <FieldElement, AstConstant>{
-    };
-    classElement.implementation
-        .forEachInstanceField((ClassElement enclosing, FieldElement field) {
+    Map<FieldElement, AstConstant> fieldConstants =
+        <FieldElement, AstConstant>{};
+    classElement.implementation.forEachInstanceField(
+        (ClassElement enclosing, FieldElement field) {
       AstConstant fieldValue = fieldValues[field];
       if (fieldValue == null) {
         // Use the default value.
@@ -1268,9 +1311,11 @@
 
   factory AstConstant.fromDefaultValue(VariableElement element,
       ConstantExpression constant, ConstantValue value) {
-    return new AstConstant(element, element.initializer != null
-        ? element.initializer
-        : element.node, constant, value);
+    return new AstConstant(
+        element,
+        element.initializer != null ? element.initializer : element.node,
+        constant,
+        value);
   }
 
   String toString() => expression.toString();
@@ -1278,9 +1323,13 @@
 
 /// A synthetic constant used to recover from errors.
 class ErroneousAstConstant extends AstConstant {
-  ErroneousAstConstant(Element element, Node node) : super(element, node,
-          // TODO(johnniwinther): Return a [NonConstantValue] instead.
-          new ErroneousConstantExpression(), new NullConstantValue());
+  ErroneousAstConstant(Element element, Node node)
+      : super(
+            element,
+            node,
+            // TODO(johnniwinther): Return a [NonConstantValue] instead.
+            new ErroneousConstantExpression(),
+            new NullConstantValue());
 }
 
 // TODO(johnniwinther): Clean this up.
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 2cfadd3..1b01849 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -4,161 +4,94 @@
 
 library dart2js.compiler_base;
 
-import 'dart:async' show
-    EventSink,
-    Future;
+import 'dart:async' show EventSink, Future;
 
 import '../compiler_new.dart' as api;
-import 'cache_strategy.dart' show
-    CacheStrategy;
-import 'closure.dart' as closureMapping show
-    ClosureTask;
+import 'cache_strategy.dart' show CacheStrategy;
+import 'closure.dart' as closureMapping show ClosureTask;
 import 'common.dart';
-import 'common/backend_api.dart' show
-    Backend;
-import 'common/codegen.dart' show
-    CodegenImpact,
-    CodegenWorkItem;
-import 'common/names.dart' show
-    Identifiers,
-    Uris;
-import 'common/registry.dart' show
-    EagerRegistry,
-    Registry;
-import 'common/resolution.dart' show
-    Parsing,
-    Resolution,
-    ResolutionWorkItem,
-    ResolutionImpact;
-import 'common/tasks.dart' show
-    CompilerTask,
-    GenericTask;
-import 'common/work.dart' show
-    ItemCompilationContext,
-    WorkItem;
+import 'common/backend_api.dart' show Backend;
+import 'common/codegen.dart' show CodegenImpact, CodegenWorkItem;
+import 'common/names.dart' show Identifiers, Uris;
+import 'common/registry.dart' show EagerRegistry, Registry;
+import 'common/resolution.dart'
+    show Parsing, Resolution, ResolutionWorkItem, ResolutionImpact;
+import 'common/tasks.dart' show CompilerTask, GenericTask;
+import 'common/work.dart' show ItemCompilationContext, WorkItem;
 import 'compile_time_constants.dart';
 import 'constants/values.dart';
-import 'core_types.dart' show
-    CoreClasses,
-    CoreTypes;
+import 'core_types.dart' show CoreClasses, CoreTypes;
 import 'dart_backend/dart_backend.dart' as dart_backend;
-import 'dart_types.dart' show
-    DartType,
-    DynamicType,
-    InterfaceType,
-    Types;
+import 'dart_types.dart' show DartType, DynamicType, InterfaceType, Types;
 import 'deferred_load.dart' show DeferredLoadTask, OutputUnit;
 import 'diagnostics/code_location.dart';
-import 'diagnostics/diagnostic_listener.dart' show
-    DiagnosticReporter;
-import 'diagnostics/invariant.dart' show
-    REPORT_EXCESS_RESOLUTION;
-import 'diagnostics/messages.dart' show
-    Message,
-    MessageTemplate;
-import 'dump_info.dart' show
-    DumpInfoTask;
+import 'diagnostics/diagnostic_listener.dart' show DiagnosticReporter;
+import 'diagnostics/invariant.dart' show REPORT_EXCESS_RESOLUTION;
+import 'diagnostics/messages.dart' show Message, MessageTemplate;
+import 'dump_info.dart' show DumpInfoTask;
 import 'elements/elements.dart';
-import 'elements/modelx.dart' show
-    ErroneousElementX,
-    ClassElementX,
-    CompilationUnitElementX,
-    DeferredLoaderGetterElementX,
-    MethodElementX,
-    LibraryElementX,
-    PrefixElementX;
-import 'enqueue.dart' show
-    CodegenEnqueuer,
-    Enqueuer,
-    EnqueueTask,
-    ResolutionEnqueuer,
-    QueueFilter;
+import 'elements/modelx.dart'
+    show
+        ErroneousElementX,
+        ClassElementX,
+        CompilationUnitElementX,
+        DeferredLoaderGetterElementX,
+        MethodElementX,
+        LibraryElementX,
+        PrefixElementX;
+import 'enqueue.dart'
+    show
+        CodegenEnqueuer,
+        Enqueuer,
+        EnqueueTask,
+        ResolutionEnqueuer,
+        QueueFilter;
 import 'environment.dart';
-import 'io/source_information.dart' show
-    SourceInformation;
-import 'js_backend/backend_helpers.dart' as js_backend show
-    BackendHelpers;
-import 'js_backend/js_backend.dart' as js_backend show
-    JavaScriptBackend;
-import 'library_loader.dart' show
-    ElementScanner,
-    LibraryLoader,
-    LibraryLoaderTask,
-    LoadedLibraries,
-    LibraryLoaderListener,
-    ResolvedUriTranslator,
-    ScriptLoader;
-import 'mirrors_used.dart' show
-    MirrorUsageAnalyzerTask;
-import 'common/names.dart' show
-    Selectors;
-import 'null_compiler_output.dart' show
-    NullCompilerOutput,
-    NullSink;
-import 'options.dart' show
-    CompilerOptions,
-    DiagnosticOptions,
-    ParserOptions;
-import 'parser/diet_parser_task.dart' show
-    DietParserTask;
-import 'parser/element_listener.dart' show
-    ScannerOptions;
-import 'parser/parser_task.dart' show
-    ParserTask;
-import 'patch_parser.dart' show
-    PatchParserTask;
-import 'resolution/registry.dart' show
-    ResolutionRegistry;
-import 'resolution/resolution.dart' show
-    ResolverTask;
-import 'resolution/tree_elements.dart' show
-    TreeElementMapping;
-import 'scanner/scanner_task.dart' show
-    ScannerTask;
-import 'serialization/task.dart' show
-    SerializationTask;
-import 'script.dart' show
-    Script;
-import 'ssa/nodes.dart' show
-    HInstruction;
-import 'tracer.dart' show
-    Tracer;
-import 'tokens/token.dart' show
-    StringToken,
-    Token,
-    TokenPair;
-import 'tokens/token_constants.dart' as Tokens show
-    COMMENT_TOKEN,
-    EOF_TOKEN;
-import 'tokens/token_map.dart' show
-    TokenMap;
-import 'tree/tree.dart' show
-    Node,
-    TypeAnnotation;
-import 'typechecker.dart' show
-    TypeCheckerTask;
+import 'id_generator.dart';
+import 'io/source_information.dart' show SourceInformation;
+import 'js_backend/backend_helpers.dart' as js_backend show BackendHelpers;
+import 'js_backend/js_backend.dart' as js_backend show JavaScriptBackend;
+import 'library_loader.dart'
+    show
+        ElementScanner,
+        LibraryLoader,
+        LibraryLoaderTask,
+        LoadedLibraries,
+        LibraryLoaderListener,
+        ResolvedUriTranslator,
+        ScriptLoader;
+import 'mirrors_used.dart' show MirrorUsageAnalyzerTask;
+import 'common/names.dart' show Selectors;
+import 'null_compiler_output.dart' show NullCompilerOutput, NullSink;
+import 'options.dart' show CompilerOptions, DiagnosticOptions, ParserOptions;
+import 'parser/diet_parser_task.dart' show DietParserTask;
+import 'parser/element_listener.dart' show ScannerOptions;
+import 'parser/parser_task.dart' show ParserTask;
+import 'patch_parser.dart' show PatchParserTask;
+import 'resolution/registry.dart' show ResolutionRegistry;
+import 'resolution/resolution.dart' show ResolverTask;
+import 'resolution/tree_elements.dart' show TreeElementMapping;
+import 'scanner/scanner_task.dart' show ScannerTask;
+import 'serialization/task.dart' show SerializationTask;
+import 'script.dart' show Script;
+import 'ssa/nodes.dart' show HInstruction;
+import 'tracer.dart' show Tracer;
+import 'tokens/token.dart' show StringToken, Token, TokenPair;
+import 'tokens/token_map.dart' show TokenMap;
+import 'tree/tree.dart' show Node, TypeAnnotation;
+import 'typechecker.dart' show TypeCheckerTask;
 import 'types/types.dart' as ti;
-import 'universe/call_structure.dart' show
-    CallStructure;
-import 'universe/selector.dart' show
-    Selector;
-import 'universe/universe.dart' show
-    Universe;
-import 'universe/use.dart' show
-    StaticUse;
-import 'universe/world_impact.dart' show
-    ImpactStrategy,
-    WorldImpact;
-import 'util/util.dart' show
-    Link,
-    Setlet;
-import 'world.dart' show
-    World;
+import 'universe/call_structure.dart' show CallStructure;
+import 'universe/selector.dart' show Selector;
+import 'universe/universe.dart' show Universe;
+import 'universe/use.dart' show StaticUse;
+import 'universe/world_impact.dart' show ImpactStrategy, WorldImpact;
+import 'util/util.dart' show Link, Setlet;
+import 'world.dart' show World;
 
-abstract class Compiler implements LibraryLoaderListener {
-
+abstract class Compiler implements LibraryLoaderListener, IdGenerator {
   final Stopwatch totalCompileTime = new Stopwatch();
-  int nextFreeClassId = 0;
+  final IdGenerator idGenerator = new IdGenerator();
   World world;
   Types types;
   _CompilerCoreTypes _coreTypes;
@@ -324,11 +257,10 @@
   /// A customizable filter that is applied to enqueued work items.
   QueueFilter enqueuerFilter = new QueueFilter();
 
-  final Selector symbolValidatedConstructorSelector = new Selector.call(
-      const PublicName('validated'), CallStructure.ONE_ARG);
+  final Selector symbolValidatedConstructorSelector =
+      new Selector.call(const PublicName('validated'), CallStructure.ONE_ARG);
 
-  static const String CREATE_INVOCATION_MIRROR =
-      'createInvocationMirror';
+  static const String CREATE_INVOCATION_MIRROR = 'createInvocationMirror';
 
   bool enabledRuntimeType = false;
   bool enabledFunctionApply = false;
@@ -360,13 +292,15 @@
     compilationFailedInternal = value;
   }
 
-  Compiler({CompilerOptions options,
-            api.CompilerOutput outputProvider,
-            this.environment: const _EmptyEnvironment()})
+  Compiler(
+      {CompilerOptions options,
+      api.CompilerOutput outputProvider,
+      this.environment: const _EmptyEnvironment()})
       : this.options = options,
         this.cacheStrategy = new CacheStrategy(options.hasIncrementalSupport),
         this.userOutputProvider = outputProvider == null
-            ? const NullCompilerOutput() : outputProvider {
+            ? const NullCompilerOutput()
+            : outputProvider {
     world = new World(this);
     // TODO(johnniwinther): Initialize core types in [initializeCoreClasses] and
     // make its field final.
@@ -386,11 +320,11 @@
     globalDependencies = new GlobalDependencyRegistry(this);
 
     if (options.emitJavaScript) {
-      js_backend.JavaScriptBackend jsBackend =
-          new js_backend.JavaScriptBackend(
-              this, generateSourceMap: options.generateSourceMap,
-              useStartupEmitter: options.useStartupEmitter,
-              useNewSourceInfo: options.useNewSourceInfo);
+      js_backend.JavaScriptBackend jsBackend = new js_backend.JavaScriptBackend(
+          this,
+          generateSourceMap: options.generateSourceMap,
+          useStartupEmitter: options.useStartupEmitter,
+          useNewSourceInfo: options.useNewSourceInfo);
       backend = jsBackend;
     } else {
       backend = new dart_backend.DartBackend(this, options.strips,
@@ -400,11 +334,17 @@
       }
     }
 
+    if (options.dumpInfo && options.useStartupEmitter) {
+      throw new ArgumentError(
+          '--dump-info is not supported with the fast startup emitter');
+    }
+
     tasks = [
-      dietParser = new DietParserTask(this, parsing.parserOptions),
+      dietParser = new DietParserTask(this, parsing.parserOptions, idGenerator),
       scanner = createScannerTask(),
       serialization = new SerializationTask(this),
-      libraryLoader = new LibraryLoaderTask(this,
+      libraryLoader = new LibraryLoaderTask(
+          this,
           new _ResolvedUriTranslator(this),
           new _ScriptLoader(this),
           new _ElementScanner(scanner),
@@ -431,7 +371,8 @@
   /// Creates the scanner task.
   ///
   /// Override this to mock the scanner for testing.
-  ScannerTask createScannerTask() => new ScannerTask(this);
+  ScannerTask createScannerTask() => new ScannerTask(this, dietParser,
+      preserveComments: options.preserveComments, commentMap: commentMap);
 
   /// Creates the resolver task.
   ///
@@ -450,7 +391,9 @@
   bool get disableTypeInference =>
       options.disableTypeInference || compilationFailed;
 
-  int getNextFreeClassId() => nextFreeClassId++;
+  // TODO(het): remove this and pass idGenerator directly instead
+  @deprecated
+  int getNextFreeId() => idGenerator.getNextFreeId();
 
   void unimplemented(Spannable spannable, String methodName) {
     reporter.internalError(spannable, "$methodName not implemented.");
@@ -548,20 +491,18 @@
           new UriLocation(importChainReversed.head);
       compactImportChain = compactImportChain.prepend(currentCodeLocation);
       for (Link<Uri> link = importChainReversed.tail;
-           !link.isEmpty;
-           link = link.tail) {
+          !link.isEmpty;
+          link = link.tail) {
         Uri uri = link.head;
         if (!currentCodeLocation.inSameLocation(uri)) {
           currentCodeLocation =
               options.verbose ? new UriLocation(uri) : new CodeLocation(uri);
-          compactImportChain =
-              compactImportChain.prepend(currentCodeLocation);
+          compactImportChain = compactImportChain.prepend(currentCodeLocation);
         }
       }
-      String importChain =
-          compactImportChain.map((CodeLocation codeLocation) {
-            return codeLocation.relativize(rootUri);
-          }).join(' => ');
+      String importChain = compactImportChain.map((CodeLocation codeLocation) {
+        return codeLocation.relativize(rootUri);
+      }).join(' => ');
 
       if (!importChains.contains(importChain)) {
         if (importChains.length > compactChainLimit) {
@@ -604,11 +545,12 @@
         if (loadedLibraries.containsLibrary(uri)) {
           Set<String> importChains =
               computeImportChainsFor(loadedLibraries, uri);
-          reporter.reportInfo(NO_LOCATION_SPANNABLE,
-             MessageKind.DISALLOWED_LIBRARY_IMPORT,
-              {'uri': uri,
-               'importChain': importChains.join(
-                   MessageTemplate.DISALLOWED_LIBRARY_IMPORT_PADDING)});
+          reporter.reportInfo(
+              NO_LOCATION_SPANNABLE, MessageKind.DISALLOWED_LIBRARY_IMPORT, {
+            'uri': uri,
+            'importChain': importChains
+                .join(MessageTemplate.DISALLOWED_LIBRARY_IMPORT_PADDING)
+          });
         }
       }
 
@@ -621,19 +563,19 @@
       if (importsMirrorsLibrary && !backend.supportsReflection) {
         Set<String> importChains =
             computeImportChainsFor(loadedLibraries, Uris.dart_mirrors);
-        reporter.reportErrorMessage(
-            NO_LOCATION_SPANNABLE,
-            MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND,
-            {'importChain': importChains.join(
-                MessageTemplate.MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING)});
+        reporter.reportErrorMessage(NO_LOCATION_SPANNABLE,
+            MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND, {
+          'importChain': importChains
+              .join(MessageTemplate.MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING)
+        });
       } else if (importsMirrorsLibrary && !options.enableExperimentalMirrors) {
         Set<String> importChains =
             computeImportChainsFor(loadedLibraries, Uris.dart_mirrors);
         reporter.reportWarningMessage(
-            NO_LOCATION_SPANNABLE,
-            MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
-            {'importChain': importChains.join(
-                 MessageTemplate.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)});
+            NO_LOCATION_SPANNABLE, MessageKind.IMPORT_EXPERIMENTAL_MIRRORS, {
+          'importChain': importChains
+              .join(MessageTemplate.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)
+        });
       }
 
       coreClasses.functionClass.ensureResolved(resolution);
@@ -641,7 +583,8 @@
           coreClasses.functionClass.lookupLocalMember('apply');
 
       if (options.preserveComments) {
-        return libraryLoader.loadLibrary(Uris.dart_mirrors)
+        return libraryLoader
+            .loadLibrary(Uris.dart_mirrors)
             .then((LibraryElement libraryElement) {
           documentClass = libraryElement.find('Comment');
         });
@@ -654,9 +597,8 @@
     if (field == null) return false;
     if (!resolution.hasBeenResolved(field)) return false;
     if (proxyConstant == null) {
-      proxyConstant =
-          constants.getConstantValue(
-              resolver.constantCompiler.compileConstant(field));
+      proxyConstant = constants
+          .getConstantValue(resolver.constantCompiler.compileConstant(field));
     }
     return proxyConstant == value;
   }
@@ -664,7 +606,8 @@
   Element findRequiredElement(LibraryElement library, String name) {
     var element = library.find(name);
     if (element == null) {
-      reporter.internalError(library,
+      reporter.internalError(
+          library,
           "The library '${library.canonicalUri}' does not contain required "
           "element: '$name'.");
     }
@@ -681,8 +624,8 @@
     } else if (coreClasses.symbolClass == cls) {
       symbolConstructor = cls.constructors.head;
     } else if (symbolImplementationClass == cls) {
-      symbolValidatedConstructor = cls.lookupConstructor(
-          symbolValidatedConstructorSelector.name);
+      symbolValidatedConstructor =
+          cls.lookupConstructor(symbolValidatedConstructorSelector.name);
     } else if (mirrorsUsedClass == cls) {
       mirrorsUsedConstructor = cls.constructors.head;
     } else if (coreClasses.intClass == cls) {
@@ -757,8 +700,8 @@
     // The selector objects held in static fields must remain canonical.
     for (Selector selector in Selectors.ALL) {
       Selector.canonicalizedValues
-        .putIfAbsent(selector.hashCode, () => <Selector>[])
-        .add(selector);
+          .putIfAbsent(selector.hashCode, () => <Selector>[])
+          .add(selector);
     }
 
     assert(uri != null || options.analyzeOnly || options.hasIncrementalSupport);
@@ -793,15 +736,13 @@
     if (main == null) {
       if (options.analyzeOnly) {
         if (!analyzeAll) {
-          errorElement = new ErroneousElementX(
-              MessageKind.CONSIDER_ANALYZE_ALL, {'main': Identifiers.main},
-              Identifiers.main, mainApp);
+          errorElement = new ErroneousElementX(MessageKind.CONSIDER_ANALYZE_ALL,
+              {'main': Identifiers.main}, Identifiers.main, mainApp);
         }
       } else {
         // Compilation requires a main method.
-        errorElement = new ErroneousElementX(
-            MessageKind.MISSING_MAIN, {'main': Identifiers.main},
-            Identifiers.main, mainApp);
+        errorElement = new ErroneousElementX(MessageKind.MISSING_MAIN,
+            {'main': Identifiers.main}, Identifiers.main, mainApp);
       }
       mainFunction = backend.helperForMissingMain();
     } else if (main.isError && main.isSynthesized) {
@@ -812,9 +753,8 @@
       }
       mainFunction = backend.helperForBadMain();
     } else if (!main.isFunction) {
-      errorElement = new ErroneousElementX(
-          MessageKind.MAIN_NOT_A_FUNCTION, {'main': Identifiers.main},
-          Identifiers.main, main);
+      errorElement = new ErroneousElementX(MessageKind.MAIN_NOT_A_FUNCTION,
+          {'main': Identifiers.main}, Identifiers.main, main);
       mainFunction = backend.helperForBadMain();
     } else {
       mainFunction = main;
@@ -825,7 +765,8 @@
         parameters.orderedForEachParameter((Element parameter) {
           if (index++ < 2) return;
           errorElement = new ErroneousElementX(
-              MessageKind.MAIN_WITH_EXTRA_PARAMETER, {'main': Identifiers.main},
+              MessageKind.MAIN_WITH_EXTRA_PARAMETER,
+              {'main': Identifiers.main},
               Identifiers.main,
               parameter);
           mainFunction = backend.helperForMainArity();
@@ -844,8 +785,7 @@
     if (errorElement != null &&
         errorElement.isSynthesized &&
         !mainApp.isSynthesized) {
-      reporter.reportWarningMessage(
-          errorElement, errorElement.messageKind,
+      reporter.reportWarningMessage(errorElement, errorElement.messageKind,
           errorElement.messageArguments);
     }
   }
@@ -857,14 +797,13 @@
   ///
   /// This operation assumes an unclosed resolution queue and is only supported
   /// when the '--analyze-main' option is used.
-  Future<LibraryElement> analyzeUri(
-      Uri libraryUri,
+  Future<LibraryElement> analyzeUri(Uri libraryUri,
       {bool skipLibraryWithPartOfTag: true}) {
     assert(options.analyzeMain);
     reporter.log('Analyzing $libraryUri (${options.buildId})');
-    return libraryLoader.loadLibrary(
-        libraryUri, skipFileWithPartOfTag: true).then(
-            (LibraryElement library) {
+    return libraryLoader
+        .loadLibrary(libraryUri, skipFileWithPartOfTag: true)
+        .then((LibraryElement library) {
       if (library == null) return null;
       fullyEnqueueLibrary(library, enqueuer.resolution);
       emptyQueue(enqueuer.resolution);
@@ -892,7 +831,7 @@
     phase = PHASE_RESOLVING;
     if (analyzeAll) {
       libraryLoader.libraries.forEach((LibraryElement library) {
-      reporter.log('Enqueuing ${library.canonicalUri}');
+        reporter.log('Enqueuing ${library.canonicalUri}');
         fullyEnqueueLibrary(library, enqueuer.resolution);
       });
     } else if (options.analyzeMain) {
@@ -901,8 +840,8 @@
       }
       if (librariesToAnalyzeWhenRun != null) {
         for (Uri libraryUri in librariesToAnalyzeWhenRun) {
-          fullyEnqueueLibrary(libraryLoader.lookupLibrary(libraryUri),
-              enqueuer.resolution);
+          fullyEnqueueLibrary(
+              libraryLoader.lookupLibrary(libraryUri), enqueuer.resolution);
         }
       }
     }
@@ -916,7 +855,7 @@
 
     _reporter.reportSuppressedMessagesSummary();
 
-    if (compilationFailed){
+    if (compilationFailed) {
       if (!options.generateCodeWithCompileTimeErrors) return;
       if (!backend.enableCodegenWithErrorsIfSupported(NO_LOCATION_SPANNABLE)) {
         return;
@@ -991,8 +930,7 @@
       ClassElement cls = element;
       cls.ensureResolved(resolution);
       cls.forEachLocalMember(enqueuer.resolution.addToWorkList);
-      backend.registerInstantiatedType(
-          cls.rawType, world, globalDependencies);
+      backend.registerInstantiatedType(cls.rawType, world, globalDependencies);
     } else {
       world.addToWorkList(element);
     }
@@ -1016,7 +954,7 @@
    */
   void emptyQueue(Enqueuer world) {
     world.forEach((WorkItem work) {
-    reporter.withCurrentElement(work.element, () {
+      reporter.withCurrentElement(work.element, () {
         world.applyImpact(work.element, work.run(this, world));
       });
     });
@@ -1086,29 +1024,28 @@
     }
     reporter.log('Excess resolution work: ${resolved.length}.');
     for (Element e in resolved) {
-      reporter.reportWarningMessage(e,
-          MessageKind.GENERIC,
+      reporter.reportWarningMessage(e, MessageKind.GENERIC,
           {'text': 'Warning: $e resolved but not compiled.'});
     }
   }
 
   WorldImpact analyzeElement(Element element) {
-    assert(invariant(element,
-           element.impliesType ||
-           element.isField ||
-           element.isFunction ||
-           element.isConstructor ||
-           element.isGetter ||
-           element.isSetter,
-           message: 'Unexpected element kind: ${element.kind}'));
+    assert(invariant(
+        element,
+        element.impliesType ||
+            element.isField ||
+            element.isFunction ||
+            element.isConstructor ||
+            element.isGetter ||
+            element.isSetter,
+        message: 'Unexpected element kind: ${element.kind}'));
     assert(invariant(element, element is AnalyzableElement,
         message: 'Element $element is not analyzable.'));
     assert(invariant(element, element.isDeclaration));
     return resolution.computeWorldImpact(element);
   }
 
-  WorldImpact analyze(ResolutionWorkItem work,
-                      ResolutionEnqueuer world) {
+  WorldImpact analyze(ResolutionWorkItem work, ResolutionEnqueuer world) {
     assert(invariant(work.element, identical(world, enqueuer.resolution)));
     assert(invariant(work.element, !work.isAnalyzed,
         message: 'Element ${work.element} has already been analyzed'));
@@ -1116,8 +1053,7 @@
       // TODO(ahe): Add structured diagnostics to the compiler API and
       // use it to separate this from the --verbose option.
       if (phase == PHASE_RESOLVING) {
-        reporter.log(
-            'Resolved ${enqueuer.resolution.processedElements.length} '
+        reporter.log('Resolved ${enqueuer.resolution.processedElements.length} '
             'elements.');
         progress.reset();
       }
@@ -1137,16 +1073,15 @@
     if (shouldPrintProgress) {
       // TODO(ahe): Add structured diagnostics to the compiler API and
       // use it to separate this from the --verbose option.
-      reporter.log(
-          'Compiled ${enqueuer.codegen.generatedCode.length} methods.');
+      reporter
+          .log('Compiled ${enqueuer.codegen.generatedCode.length} methods.');
       progress.reset();
     }
     return backend.codegen(work);
   }
 
   void reportDiagnostic(DiagnosticMessage message,
-                        List<DiagnosticMessage> infos,
-                        api.Diagnostic kind);
+      List<DiagnosticMessage> infos, api.Diagnostic kind);
 
   void reportCrashInUserCode(String message, exception, stackTrace) {
     _reporter.onCrashInUserCode(message, exception, stackTrace);
@@ -1155,8 +1090,8 @@
   /// Messages for which compile-time errors are reported but compilation
   /// continues regardless.
   static const List<MessageKind> BENIGN_ERRORS = const <MessageKind>[
-      MessageKind.INVALID_METADATA,
-      MessageKind.INVALID_METADATA_GENERIC,
+    MessageKind.INVALID_METADATA,
+    MessageKind.INVALID_METADATA_GENERIC,
   ];
 
   bool markCompilationAsFailed(DiagnosticMessage message, api.Diagnostic kind) {
@@ -1171,8 +1106,7 @@
   }
 
   void fatalDiagnosticReported(DiagnosticMessage message,
-                               List<DiagnosticMessage> infos,
-                               api.Diagnostic kind) {
+      List<DiagnosticMessage> infos, api.Diagnostic kind) {
     if (markCompilationAsFailed(message, kind)) {
       compilationFailed = true;
     }
@@ -1192,8 +1126,8 @@
    *
    * See [LibraryLoader] for terminology on URIs.
    */
-  Uri translateResolvedUri(LibraryElement importingLibrary,
-                           Uri resolvedUri, Spannable spannable) {
+  Uri translateResolvedUri(
+      LibraryElement importingLibrary, Uri resolvedUri, Spannable spannable) {
     unimplemented(importingLibrary, 'Compiler.translateResolvedUri');
     return null;
   }
@@ -1218,28 +1152,6 @@
 
   bool get isMockCompilation => false;
 
-  Token processAndStripComments(Token currentToken) {
-    Token firstToken = currentToken;
-    Token prevToken;
-    while (currentToken.kind != Tokens.EOF_TOKEN) {
-      if (identical(currentToken.kind, Tokens.COMMENT_TOKEN)) {
-        Token firstCommentToken = currentToken;
-        while (identical(currentToken.kind, Tokens.COMMENT_TOKEN)) {
-          currentToken = currentToken.next;
-        }
-        commentMap[currentToken] = firstCommentToken;
-        if (prevToken == null) {
-          firstToken = currentToken;
-        } else {
-          prevToken.next = currentToken;
-        }
-      }
-      prevToken = currentToken;
-      currentToken = currentToken.next;
-    }
-    return firstToken;
-  }
-
   void reportUnusedCode() {
     void checkLive(member) {
       if (member.isMalformed) return;
@@ -1314,8 +1226,8 @@
       userCodeLocations.add(new CodeLocation(mainApp.canonicalUri));
     }
     if (librariesToAnalyzeWhenRun != null) {
-      userCodeLocations.addAll(librariesToAnalyzeWhenRun.map(
-          (Uri uri) => new CodeLocation(uri)));
+      userCodeLocations.addAll(
+          librariesToAnalyzeWhenRun.map((Uri uri) => new CodeLocation(uri)));
     }
     if (userCodeLocations.isEmpty && assumeInUserCode) {
       // Assume in user code since [mainApp] has not been set yet.
@@ -1446,8 +1358,7 @@
   }
 
   @override
-  InterfaceType mapType([DartType keyType,
-                         DartType valueType]) {
+  InterfaceType mapType([DartType keyType, DartType valueType]) {
     mapClass.ensureResolved(resolution);
     InterfaceType type = mapClass.rawType;
     if (keyType == null && valueType == null) {
@@ -1546,9 +1457,7 @@
 
   Element get currentElement => _currentElement;
 
-  DiagnosticMessage createMessage(
-      Spannable spannable,
-      MessageKind messageKind,
+  DiagnosticMessage createMessage(Spannable spannable, MessageKind messageKind,
       [Map arguments = const {}]) {
     SourceSpan span = spanFromSpannable(spannable);
     MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
@@ -1556,64 +1465,58 @@
     return new DiagnosticMessage(span, spannable, message);
   }
 
-  void reportError(
-      DiagnosticMessage message,
+  void reportError(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
     reportDiagnosticInternal(message, infos, api.Diagnostic.ERROR);
   }
 
-  void reportWarning(
-      DiagnosticMessage message,
+  void reportWarning(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
     reportDiagnosticInternal(message, infos, api.Diagnostic.WARNING);
   }
 
-  void reportHint(
-      DiagnosticMessage message,
+  void reportHint(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
     reportDiagnosticInternal(message, infos, api.Diagnostic.HINT);
   }
 
   @deprecated
   void reportInfo(Spannable node, MessageKind messageKind,
-                  [Map arguments = const {}]) {
-    reportDiagnosticInternal(
-        createMessage(node, messageKind, arguments),
-        const <DiagnosticMessage>[],
-        api.Diagnostic.INFO);
+      [Map arguments = const {}]) {
+    reportDiagnosticInternal(createMessage(node, messageKind, arguments),
+        const <DiagnosticMessage>[], api.Diagnostic.INFO);
   }
 
   void reportDiagnosticInternal(DiagnosticMessage message,
-                                List<DiagnosticMessage> infos,
-                                api.Diagnostic kind) {
+      List<DiagnosticMessage> infos, api.Diagnostic kind) {
     if (!options.showAllPackageWarnings &&
         message.spannable != NO_LOCATION_SPANNABLE) {
       switch (kind) {
-      case api.Diagnostic.WARNING:
-      case api.Diagnostic.HINT:
-        Element element = elementFromSpannable(message.spannable);
-        if (!compiler.inUserCode(element, assumeInUserCode: true)) {
-          Uri uri = compiler.getCanonicalUri(element);
-          if (options.showPackageWarningsFor(uri)) {
-            reportDiagnostic(message, infos, kind);
+        case api.Diagnostic.WARNING:
+        case api.Diagnostic.HINT:
+          Element element = elementFromSpannable(message.spannable);
+          if (!compiler.inUserCode(element, assumeInUserCode: true)) {
+            Uri uri = compiler.getCanonicalUri(element);
+            if (options.showPackageWarningsFor(uri)) {
+              reportDiagnostic(message, infos, kind);
+              return;
+            }
+            SuppressionInfo info = suppressedWarnings.putIfAbsent(
+                uri, () => new SuppressionInfo());
+            if (kind == api.Diagnostic.WARNING) {
+              info.warnings++;
+            } else {
+              info.hints++;
+            }
+            lastDiagnosticWasFiltered = true;
             return;
           }
-          SuppressionInfo info =
-              suppressedWarnings.putIfAbsent(uri, () => new SuppressionInfo());
-          if (kind == api.Diagnostic.WARNING) {
-            info.warnings++;
-          } else {
-            info.hints++;
+          break;
+        case api.Diagnostic.INFO:
+          if (lastDiagnosticWasFiltered) {
+            return;
           }
-          lastDiagnosticWasFiltered = true;
-          return;
-        }
-        break;
-      case api.Diagnostic.INFO:
-        if (lastDiagnosticWasFiltered) {
-          return;
-        }
-        break;
+          break;
       }
     }
     lastDiagnosticWasFiltered = false;
@@ -1621,13 +1524,11 @@
   }
 
   void reportDiagnostic(DiagnosticMessage message,
-                        List<DiagnosticMessage> infos,
-                        api.Diagnostic kind) {
+      List<DiagnosticMessage> infos, api.Diagnostic kind) {
     compiler.reportDiagnostic(message, infos, kind);
     if (kind == api.Diagnostic.ERROR ||
         kind == api.Diagnostic.CRASH ||
-        (options.fatalWarnings &&
-         kind == api.Diagnostic.WARNING)) {
+        (options.fatalWarnings && kind == api.Diagnostic.WARNING)) {
       compiler.fatalDiagnosticReported(message, infos, kind);
     }
   }
@@ -1667,8 +1568,8 @@
   }
 
   void reportAssertionFailure(SpannableAssertionFailure ex) {
-    String message = (ex.message != null) ? tryToString(ex.message)
-                                          : tryToString(ex);
+    String message =
+        (ex.message != null) ? tryToString(ex.message) : tryToString(ex);
     reportDiagnosticInternal(
         createMessage(ex.node, MessageKind.GENERIC, {'text': message}),
         const <DiagnosticMessage>[],
@@ -1685,7 +1586,6 @@
     if (uri == null && currentElement != null) {
       uri = currentElement.compilationUnit.script.resourceUri;
       assert(invariant(currentElement, () {
-
         bool sameToken(Token token, Token sought) {
           if (token == sought) return true;
           if (token.stringValue == '>>') {
@@ -1842,7 +1742,8 @@
 
   Element _elementFromHInstruction(HInstruction instruction) {
     return instruction.sourceElement is Element
-        ? instruction.sourceElement : null;
+        ? instruction.sourceElement
+        : null;
   }
 
   internalError(Spannable node, reason) {
@@ -1857,17 +1758,14 @@
   void unhandledExceptionOnElement(Element element) {
     if (hasCrashed) return;
     hasCrashed = true;
-    reportDiagnostic(
-        createMessage(element, MessageKind.COMPILER_CRASHED),
-        const <DiagnosticMessage>[],
-        api.Diagnostic.CRASH);
+    reportDiagnostic(createMessage(element, MessageKind.COMPILER_CRASHED),
+        const <DiagnosticMessage>[], api.Diagnostic.CRASH);
     pleaseReportCrash();
   }
 
   void pleaseReportCrash() {
-    print(
-        MessageTemplate.TEMPLATES[MessageKind.PLEASE_REPORT_THE_CRASH]
-            .message({'buildId': compiler.options.buildId}));
+    print(MessageTemplate.TEMPLATES[MessageKind.PLEASE_REPORT_THE_CRASH]
+        .message({'buildId': compiler.options.buildId}));
   }
 
   /// Finds the approximate [Element] for [node]. [currentElement] is used as
@@ -1887,10 +1785,8 @@
   void log(message) {
     Message msg = MessageTemplate.TEMPLATES[MessageKind.GENERIC]
         .message({'text': '$message'});
-    reportDiagnostic(
-        new DiagnosticMessage(null, null, msg),
-        const <DiagnosticMessage>[],
-        api.Diagnostic.VERBOSE_INFO);
+    reportDiagnostic(new DiagnosticMessage(null, null, msg),
+        const <DiagnosticMessage>[], api.Diagnostic.VERBOSE_INFO);
   }
 
   String tryToString(object) {
@@ -1910,8 +1806,7 @@
         } else {
           reportDiagnostic(
               createMessage(
-                  new SourceSpan(uri, 0, 0),
-                  MessageKind.COMPILER_CRASHED),
+                  new SourceSpan(uri, 0, 0), MessageKind.COMPILER_CRASHED),
               const <DiagnosticMessage>[],
               api.Diagnostic.CRASH);
         }
@@ -1940,14 +1835,10 @@
         }
         MessageTemplate template = MessageTemplate.TEMPLATES[kind];
         Message message = template.message(
-            {'warnings': info.warnings,
-             'hints': info.hints,
-             'uri': uri},
-             options.terseDiagnostics);
-        reportDiagnostic(
-            new DiagnosticMessage(null, null, message),
-            const <DiagnosticMessage>[],
-            api.Diagnostic.HINT);
+            {'warnings': info.warnings, 'hints': info.hints, 'uri': uri},
+            options.terseDiagnostics);
+        reportDiagnostic(new DiagnosticMessage(null, null, message),
+            const <DiagnosticMessage>[], api.Diagnostic.HINT);
       });
     }
   }
@@ -2003,6 +1894,25 @@
   }
 
   @override
+  bool hasResolvedAst(Element element) {
+    return element is AstElement &&
+        hasBeenResolved(element) &&
+        element.hasResolvedAst;
+  }
+
+  @override
+  ResolvedAst getResolvedAst(Element element) {
+    if (hasResolvedAst(element)) {
+      AstElement astElement = element;
+      return astElement.resolvedAst;
+    }
+    assert(invariant(element, hasResolvedAst(element),
+        message: "ResolvedAst not available for $element."));
+    return null;
+  }
+
+
+  @override
   bool hasResolutionImpact(Element element) {
     return _resolutionImpactCache.containsKey(element);
   }
@@ -2029,9 +1939,9 @@
       assert(compiler.parser != null);
       Node tree = compiler.parser.parse(element);
       assert(invariant(element, !element.isSynthesized || tree == null));
-      ResolutionImpact resolutionImpact =
-          compiler.resolver.resolve(element);
-      if (compiler.serialization.supportSerialization || retainCachesForTesting) {
+      ResolutionImpact resolutionImpact = compiler.resolver.resolve(element);
+      if (compiler.serialization.supportSerialization ||
+          retainCachesForTesting) {
         // [ResolutionImpact] is currently only used by serialization. The
         // enqueuer uses the [WorldImpact] which is always cached.
         // TODO(johnniwinther): Align these use cases better; maybe only
@@ -2045,9 +1955,8 @@
         // Only analyze nodes with a corresponding [TreeElements].
         compiler.checker.check(element);
       }
-      WorldImpact worldImpact =
-          compiler.backend.impactTransformer.transformResolutionImpact(
-              resolutionImpact);
+      WorldImpact worldImpact = compiler.backend.impactTransformer
+          .transformResolutionImpact(resolutionImpact);
       return worldImpact;
     });
   }
@@ -2080,8 +1989,8 @@
   ResolutionWorkItem createWorkItem(
       Element element, ItemCompilationContext compilationContext) {
     if (compiler.serialization.isDeserialized(element)) {
-      return compiler.serialization.createResolutionWorkItem(
-          element, compilationContext);
+      return compiler.serialization
+          .createResolutionWorkItem(element, compilationContext);
     } else {
       return new ResolutionWorkItem(element, compilationContext);
     }
@@ -2147,8 +2056,8 @@
   _ResolvedUriTranslator(this.compiler);
 
   Uri translate(LibraryElement importingLibrary, Uri resolvedUri,
-      [Spannable spannable]) =>
-    compiler.translateResolvedUri(importingLibrary, resolvedUri, spannable);
+          [Spannable spannable]) =>
+      compiler.translateResolvedUri(importingLibrary, resolvedUri, spannable);
 }
 
 class _ScriptLoader implements ScriptLoader {
diff --git a/pkg/compiler/lib/src/constant_system_dart.dart b/pkg/compiler/lib/src/constant_system_dart.dart
index c2c819e..60e8899 100644
--- a/pkg/compiler/lib/src/constant_system_dart.dart
+++ b/pkg/compiler/lib/src/constant_system_dart.dart
@@ -4,13 +4,11 @@
 
 library dart2js.constant_system.dart;
 
-import 'compiler.dart' show
-    Compiler;
+import 'compiler.dart' show Compiler;
 import 'constants/constant_system.dart';
 import 'constants/values.dart';
 import 'dart_types.dart';
-import 'tree/tree.dart' show
-    DartString;
+import 'tree/tree.dart' show DartString;
 
 const DART_CONSTANT_SYSTEM = const DartConstantSystem();
 
@@ -77,7 +75,7 @@
 class BitOrOperation extends BinaryBitOperation {
   final String name = '|';
   const BitOrOperation();
-  int foldInts(int left, int right)  => left | right;
+  int foldInts(int left, int right) => left | right;
   apply(left, right) => left | right;
 }
 
@@ -104,6 +102,7 @@
     if (right > 100 || right < 0) return null;
     return left << right;
   }
+
   apply(left, right) => left << right;
 }
 
@@ -114,6 +113,7 @@
     if (right < 0) return null;
     return left >> right;
   }
+
   apply(left, right) => left >> right;
 }
 
@@ -161,8 +161,7 @@
       }
       // A division by 0 means that we might not have a folded value.
       if (foldedValue == null) return null;
-      if (left.isInt && right.isInt && !isDivide() ||
-          isTruncatingDivide()) {
+      if (left.isInt && right.isInt && !isDivide() || isTruncatingDivide()) {
         assert(foldedValue is int);
         return DART_CONSTANT_SYSTEM.createInt(foldedValue);
       } else {
@@ -199,6 +198,7 @@
     if (right == 0) return null;
     return left % right;
   }
+
   num foldNums(num left, num right) => left % right;
   apply(left, right) => left % right;
 }
@@ -210,11 +210,13 @@
     if (right == 0) return null;
     return left ~/ right;
   }
+
   num foldNums(num left, num right) {
     num ratio = left / right;
     if (ratio.isNaN || ratio.isInfinite) return null;
     return ratio.truncate().toInt();
   }
+
   apply(left, right) => left ~/ right;
   bool isTruncatingDivide() => true;
 }
@@ -244,13 +246,14 @@
     } else if (left.isString && right.isString) {
       StringConstantValue leftString = left;
       StringConstantValue rightString = right;
-      DartString result = new DartString.concat(leftString.primitiveValue,
-                                                rightString.primitiveValue);
+      DartString result = new DartString.concat(
+          leftString.primitiveValue, rightString.primitiveValue);
       return DART_CONSTANT_SYSTEM.createString(result);
     } else {
       return null;
     }
   }
+
   apply(left, right) => left + right;
 }
 
@@ -316,6 +319,7 @@
     }
     return DART_CONSTANT_SYSTEM.createBool(left == right);
   }
+
   apply(left, right) => left == right;
 }
 
@@ -329,6 +333,7 @@
     if (left.isNaN && right.isNaN) return null;
     return DART_CONSTANT_SYSTEM.createBool(left == right);
   }
+
   apply(left, right) => identical(left, right);
 }
 
@@ -339,6 +344,7 @@
     if (left.isNull) return right;
     return left;
   }
+
   apply(left, right) => left ?? right;
 }
 
@@ -407,7 +413,6 @@
 
   const DartConstantSystem();
 
-
   @override
   IntConstantValue createInt(int i) => new IntConstantValue(i);
 
@@ -426,16 +431,13 @@
   NullConstantValue createNull() => new NullConstantValue();
 
   @override
-  ListConstantValue createList(InterfaceType type,
-                               List<ConstantValue> values) {
+  ListConstantValue createList(InterfaceType type, List<ConstantValue> values) {
     return new ListConstantValue(type, values);
   }
 
   @override
-  MapConstantValue createMap(Compiler compiler,
-                             InterfaceType type,
-                             List<ConstantValue> keys,
-                             List<ConstantValue> values) {
+  MapConstantValue createMap(Compiler compiler, InterfaceType type,
+      List<ConstantValue> keys, List<ConstantValue> values) {
     return new MapConstantValue(type, keys, values);
   }
 
diff --git a/pkg/compiler/lib/src/constants/constant_constructors.dart b/pkg/compiler/lib/src/constants/constant_constructors.dart
index 4cc77b3..c389eef 100644
--- a/pkg/compiler/lib/src/constants/constant_constructors.dart
+++ b/pkg/compiler/lib/src/constants/constant_constructors.dart
@@ -11,14 +11,11 @@
 import '../elements/elements.dart';
 import '../resolution/operators.dart';
 import '../resolution/semantic_visitor.dart';
-import '../resolution/send_resolver.dart' show
-    DeclarationResolverMixin;
+import '../resolution/send_resolver.dart' show DeclarationResolverMixin;
 import '../resolution/send_structure.dart';
-import '../resolution/tree_elements.dart' show
-    TreeElements;
+import '../resolution/tree_elements.dart' show TreeElements;
 import '../tree/tree.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
+import '../universe/call_structure.dart' show CallStructure;
 
 import 'constructors.dart';
 import 'expressions.dart';
@@ -30,32 +27,32 @@
 }
 
 class ConstantConstructorComputer extends SemanticVisitor
-    with SemanticDeclarationResolvedMixin,
-         DeclarationResolverMixin,
-         GetBulkMixin,
-         SetBulkMixin,
-         ErrorBulkMixin,
-         InvokeBulkMixin,
-         IndexSetBulkMixin,
-         CompoundBulkMixin,
-         SetIfNullBulkMixin,
-         UnaryBulkMixin,
-         BaseBulkMixin,
-         BinaryBulkMixin,
-         PrefixBulkMixin,
-         PostfixBulkMixin,
-         NewBulkMixin,
-         InitializerBulkMixin,
-         FunctionBulkMixin,
-         VariableBulkMixin
+    with
+        SemanticDeclarationResolvedMixin,
+        DeclarationResolverMixin,
+        GetBulkMixin,
+        SetBulkMixin,
+        ErrorBulkMixin,
+        InvokeBulkMixin,
+        IndexSetBulkMixin,
+        CompoundBulkMixin,
+        SetIfNullBulkMixin,
+        UnaryBulkMixin,
+        BaseBulkMixin,
+        BinaryBulkMixin,
+        PrefixBulkMixin,
+        PostfixBulkMixin,
+        NewBulkMixin,
+        InitializerBulkMixin,
+        FunctionBulkMixin,
+        VariableBulkMixin
     implements SemanticDeclarationVisitor, SemanticSendVisitor {
   final Map<FieldElement, ConstantExpression> fieldMap =
       <FieldElement, ConstantExpression>{};
-  final Map<dynamic/*int|String*/, ConstantExpression> defaultValues =
-      <dynamic/*int|String*/, ConstantExpression>{};
+  final Map<dynamic /*int|String*/, ConstantExpression> defaultValues =
+      <dynamic /*int|String*/, ConstantExpression>{};
 
-  ConstantConstructorComputer(TreeElements elements)
-      : super(elements);
+  ConstantConstructorComputer(TreeElements elements) : super(elements);
 
   SemanticDeclarationVisitor get declVisitor => this;
 
@@ -73,7 +70,7 @@
 
   @override
   bulkHandleNode(Node node, String template, _) {
-    internalError(node, template.replaceFirst('#' , '$node'));
+    internalError(node, template.replaceFirst('#', '$node'));
   }
 
   internalError(Node node, String message) {
@@ -81,12 +78,12 @@
   }
 
   ConstantConstructor visitGenerativeConstructorDeclaration(
-        FunctionExpression node,
-        ConstructorElement constructor,
-        NodeList parameters,
-        NodeList initializers,
-        Node body,
-        _) {
+      FunctionExpression node,
+      ConstructorElement constructor,
+      NodeList parameters,
+      NodeList initializers,
+      Node body,
+      _) {
     applyParameters(parameters, _);
     ConstructedConstantExpression constructorInvocation =
         applyInitializers(node, _);
@@ -131,18 +128,12 @@
 
     return new RedirectingFactoryConstantConstructor(
         new ConstructedConstantExpression(
-            redirectionType,
-            redirectionTarget,
-            callStructure,
-            arguments));
+            redirectionType, redirectionTarget, callStructure, arguments));
   }
 
   @override
-  visitFactoryConstructorDeclaration(
-      FunctionExpression node,
-      ConstructorElement constructor,
-      NodeList parameters,
-      Node body, _) {
+  visitFactoryConstructorDeclaration(FunctionExpression node,
+      ConstructorElement constructor, NodeList parameters, Node body, _) {
     // TODO(johnniwinther): Handle constant constructors with errors.
     internalError(node, "Factory constructor cannot be constant: $node.");
   }
@@ -151,12 +142,8 @@
     computeParameterStructures(parameters).forEach((s) => s.dispatch(this, _));
   }
 
-  visitParameterDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      ParameterElement parameter,
-      int index,
-      _) {
+  visitParameterDeclaration(VariableDefinitions node, Node definition,
+      ParameterElement parameter, int index, _) {
     // Do nothing.
   }
 
@@ -171,23 +158,15 @@
     defaultValues[index] = defaultValue;
   }
 
-  visitNamedParameterDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      ParameterElement parameter,
-      ConstantExpression defaultValue,
-      _) {
+  visitNamedParameterDeclaration(VariableDefinitions node, Node definition,
+      ParameterElement parameter, ConstantExpression defaultValue, _) {
     assert(invariant(node, defaultValue != null));
     String name = parameter.name;
     defaultValues[name] = defaultValue;
   }
 
-  visitInitializingFormalDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      InitializingFormalElement parameter,
-      int index,
-      _) {
+  visitInitializingFormalDeclaration(VariableDefinitions node, Node definition,
+      InitializingFormalElement parameter, int index, _) {
     fieldMap[parameter.fieldElement] = new PositionalArgumentReference(index);
   }
 
@@ -231,18 +210,11 @@
     return constructorInvocation;
   }
 
-  visitFieldInitializer(
-      SendSet node,
-      FieldElement field,
-      Node initializer,
-      _) {
+  visitFieldInitializer(SendSet node, FieldElement field, Node initializer, _) {
     fieldMap[field] = apply(initializer);
   }
 
-  visitParameterGet(
-      Send node,
-      ParameterElement parameter,
-      _) {
+  visitParameterGet(Send node, ParameterElement parameter, _) {
     if (parameter.isNamed) {
       return new NamedArgumentReference(parameter.name);
     } else {
@@ -261,10 +233,7 @@
     List<ConstantExpression> argumentExpression =
         arguments.nodes.map((a) => apply(a)).toList();
     return new ConstructedConstantExpression(
-        type,
-        superConstructor,
-        callStructure,
-        argumentExpression);
+        type, superConstructor, callStructure, argumentExpression);
   }
 
   ConstructedConstantExpression visitImplicitSuperConstructorInvoke(
@@ -272,11 +241,8 @@
       ConstructorElement superConstructor,
       InterfaceType type,
       _) {
-     return new ConstructedConstantExpression(
-         type,
-         superConstructor,
-         CallStructure.NO_ARGS,
-         const <ConstantExpression>[]);
+    return new ConstructedConstantExpression(type, superConstructor,
+        CallStructure.NO_ARGS, const <ConstantExpression>[]);
   }
 
   ConstructedConstantExpression visitThisConstructorInvoke(
@@ -287,48 +253,29 @@
       _) {
     List<ConstantExpression> argumentExpression =
         arguments.nodes.map((a) => apply(a)).toList();
-    return new ConstructedConstantExpression(
-        currentClass.thisType,
-        thisConstructor,
-        callStructure,
-        argumentExpression);
+    return new ConstructedConstantExpression(currentClass.thisType,
+        thisConstructor, callStructure, argumentExpression);
   }
 
   @override
   ConstantExpression visitBinary(
-      Send node,
-      Node left,
-      BinaryOperator operator,
-      Node right,
-      _) {
-    return new BinaryConstantExpression(
-        apply(left), operator, apply(right));
+      Send node, Node left, BinaryOperator operator, Node right, _) {
+    return new BinaryConstantExpression(apply(left), operator, apply(right));
   }
 
-
   @override
   ConstantExpression visitUnary(
-      Send node,
-      UnaryOperator operator,
-      Node expression,
-      _) {
-    return new UnaryConstantExpression(
-        operator, apply(expression));
+      Send node, UnaryOperator operator, Node expression, _) {
+    return new UnaryConstantExpression(operator, apply(expression));
   }
 
   @override
-  ConstantExpression visitStaticFieldGet(
-      Send node,
-      FieldElement field,
-      _) {
+  ConstantExpression visitStaticFieldGet(Send node, FieldElement field, _) {
     return new VariableConstantExpression(field);
   }
 
   @override
-  ConstantExpression visitTopLevelFieldGet(
-      Send node,
-      FieldElement field,
-      _) {
+  ConstantExpression visitTopLevelFieldGet(Send node, FieldElement field, _) {
     return new VariableConstantExpression(field);
   }
 
@@ -354,14 +301,13 @@
 
   @override
   ConstantExpression visitConditional(Conditional node) {
-    return new ConditionalConstantExpression(
-        apply(node.condition),
-        apply(node.thenExpression),
-        apply(node.elseExpression));
+    return new ConditionalConstantExpression(apply(node.condition),
+        apply(node.thenExpression), apply(node.elseExpression));
   }
 
   @override
-  ConstantExpression visitParenthesizedExpression(ParenthesizedExpression node) {
+  ConstantExpression visitParenthesizedExpression(
+      ParenthesizedExpression node) {
     return apply(node.expression);
   }
 
@@ -383,4 +329,4 @@
   ConstantExpression visitNamedArgument(NamedArgument node) {
     return apply(node.expression);
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/constants/constant_system.dart b/pkg/compiler/lib/src/constants/constant_system.dart
index 06c9fad..aae267f 100644
--- a/pkg/compiler/lib/src/constants/constant_system.dart
+++ b/pkg/compiler/lib/src/constants/constant_system.dart
@@ -5,11 +5,9 @@
 library dart2js.constant_system;
 
 import '../dart_types.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../resolution/operators.dart';
-import '../tree/tree.dart' show
-    DartString;
+import '../tree/tree.dart' show DartString;
 import 'values.dart';
 
 abstract class Operation {
@@ -64,16 +62,12 @@
   ConstantValue createString(DartString string);
   ConstantValue createBool(bool value);
   ConstantValue createNull();
-  ConstantValue createList(InterfaceType type,
-                           List<ConstantValue> values);
+  ConstantValue createList(InterfaceType type, List<ConstantValue> values);
   // TODO(johnniwinther): Remove the need for [compiler].
-  ConstantValue createMap(Compiler compiler,
-                          InterfaceType type,
-                          List<ConstantValue> keys,
-                          List<ConstantValue> values);
+  ConstantValue createMap(Compiler compiler, InterfaceType type,
+      List<ConstantValue> keys, List<ConstantValue> values);
   // TODO(johnniwinther): Remove the need for [compiler].
-  ConstantValue createType(Compiler compiler,
-                           DartType type);
+  ConstantValue createType(Compiler compiler, DartType type);
 
   // We need to special case the subtype check for JavaScript constant
   // system because an int is a double at runtime.
@@ -92,35 +86,59 @@
 
   UnaryOperation lookupUnary(UnaryOperator operator) {
     switch (operator.kind) {
-      case UnaryOperatorKind.COMPLEMENT: return bitNot;
-      case UnaryOperatorKind.NEGATE: return negate;
-      case UnaryOperatorKind.NOT: return not;
-      default:  return null;
+      case UnaryOperatorKind.COMPLEMENT:
+        return bitNot;
+      case UnaryOperatorKind.NEGATE:
+        return negate;
+      case UnaryOperatorKind.NOT:
+        return not;
+      default:
+        return null;
     }
   }
 
   BinaryOperation lookupBinary(BinaryOperator operator) {
     switch (operator.kind) {
-      case BinaryOperatorKind.ADD:   return add;
-      case BinaryOperatorKind.SUB:   return subtract;
-      case BinaryOperatorKind.MUL:   return multiply;
-      case BinaryOperatorKind.DIV:   return divide;
-      case BinaryOperatorKind.MOD:   return modulo;
-      case BinaryOperatorKind.IDIV:  return truncatingDivide;
-      case BinaryOperatorKind.OR:   return bitOr;
-      case BinaryOperatorKind.AND:   return bitAnd;
-      case BinaryOperatorKind.XOR:   return bitXor;
-      case BinaryOperatorKind.LOGICAL_OR:  return booleanOr;
-      case BinaryOperatorKind.LOGICAL_AND:  return booleanAnd;
-      case BinaryOperatorKind.SHL:  return shiftLeft;
-      case BinaryOperatorKind.SHR:  return shiftRight;
-      case BinaryOperatorKind.LT:   return less;
-      case BinaryOperatorKind.LTEQ:  return lessEqual;
-      case BinaryOperatorKind.GT:   return greater;
-      case BinaryOperatorKind.GTEQ:  return greaterEqual;
-      case BinaryOperatorKind.EQ:  return equal;
-      case BinaryOperatorKind.IF_NULL: return ifNull;
-      default:    return null;
+      case BinaryOperatorKind.ADD:
+        return add;
+      case BinaryOperatorKind.SUB:
+        return subtract;
+      case BinaryOperatorKind.MUL:
+        return multiply;
+      case BinaryOperatorKind.DIV:
+        return divide;
+      case BinaryOperatorKind.MOD:
+        return modulo;
+      case BinaryOperatorKind.IDIV:
+        return truncatingDivide;
+      case BinaryOperatorKind.OR:
+        return bitOr;
+      case BinaryOperatorKind.AND:
+        return bitAnd;
+      case BinaryOperatorKind.XOR:
+        return bitXor;
+      case BinaryOperatorKind.LOGICAL_OR:
+        return booleanOr;
+      case BinaryOperatorKind.LOGICAL_AND:
+        return booleanAnd;
+      case BinaryOperatorKind.SHL:
+        return shiftLeft;
+      case BinaryOperatorKind.SHR:
+        return shiftRight;
+      case BinaryOperatorKind.LT:
+        return less;
+      case BinaryOperatorKind.LTEQ:
+        return lessEqual;
+      case BinaryOperatorKind.GT:
+        return greater;
+      case BinaryOperatorKind.GTEQ:
+        return greaterEqual;
+      case BinaryOperatorKind.EQ:
+        return equal;
+      case BinaryOperatorKind.IF_NULL:
+        return ifNull;
+      default:
+        return null;
     }
   }
 }
diff --git a/pkg/compiler/lib/src/constants/constructors.dart b/pkg/compiler/lib/src/constants/constructors.dart
index 7faf593..c2b53fc 100644
--- a/pkg/compiler/lib/src/constants/constructors.dart
+++ b/pkg/compiler/lib/src/constants/constructors.dart
@@ -5,11 +5,8 @@
 library dart2js.constants.constructors;
 
 import '../dart_types.dart';
-import '../elements/elements.dart' show
-    ConstructorElement,
-    FieldElement;
-import '../universe/call_structure.dart' show
-    CallStructure;
+import '../elements/elements.dart' show ConstructorElement, FieldElement;
+import '../universe/call_structure.dart' show CallStructure;
 import '../util/util.dart';
 import 'evaluation.dart';
 import 'expressions.dart';
@@ -31,8 +28,7 @@
   /// Computes the constant expressions of the fields of the created instance
   /// in a const constructor invocation with [arguments].
   Map<FieldElement, ConstantExpression> computeInstanceFields(
-      List<ConstantExpression> arguments,
-      CallStructure callStructure);
+      List<ConstantExpression> arguments, CallStructure callStructure);
 
   accept(ConstantConstructorVisitor visitor, arg);
 }
@@ -52,16 +48,13 @@
 }
 
 /// A generative constant constructor.
-class GenerativeConstantConstructor implements ConstantConstructor{
+class GenerativeConstantConstructor implements ConstantConstructor {
   final InterfaceType type;
-  final Map<dynamic/*int|String*/, ConstantExpression> defaultValues;
+  final Map<dynamic /*int|String*/, ConstantExpression> defaultValues;
   final Map<FieldElement, ConstantExpression> fieldMap;
   final ConstructedConstantExpression superConstructorInvocation;
 
-  GenerativeConstantConstructor(
-      this.type,
-      this.defaultValues,
-      this.fieldMap,
+  GenerativeConstantConstructor(this.type, this.defaultValues, this.fieldMap,
       this.superConstructorInvocation);
 
   ConstantConstructorKind get kind => ConstantConstructorKind.GENERATIVE;
@@ -71,14 +64,13 @@
   }
 
   Map<FieldElement, ConstantExpression> computeInstanceFields(
-      List<ConstantExpression> arguments,
-      CallStructure callStructure) {
-    NormalizedArguments args = new NormalizedArguments(
-        defaultValues, callStructure, arguments);
+      List<ConstantExpression> arguments, CallStructure callStructure) {
+    NormalizedArguments args =
+        new NormalizedArguments(defaultValues, callStructure, arguments);
     Map<FieldElement, ConstantExpression> appliedFieldMap =
         applyFields(args, superConstructorInvocation);
     fieldMap.forEach((FieldElement field, ConstantExpression constant) {
-     appliedFieldMap[field] = constant.apply(args);
+      appliedFieldMap[field] = constant.apply(args);
     });
     return appliedFieldMap;
   }
@@ -97,8 +89,7 @@
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! GenerativeConstantConstructor) return false;
-    return
-        type == other.type &&
+    return type == other.type &&
         superConstructorInvocation == other.superConstructorInvocation &&
         mapEquals(defaultValues, other.defaultValues) &&
         mapEquals(fieldMap, other.fieldMap);
@@ -151,25 +142,24 @@
 
 /// A redirecting generative constant constructor.
 class RedirectingGenerativeConstantConstructor implements ConstantConstructor {
-  final Map<dynamic/*int|String*/, ConstantExpression> defaultValues;
+  final Map<dynamic /*int|String*/, ConstantExpression> defaultValues;
   final ConstructedConstantExpression thisConstructorInvocation;
 
   RedirectingGenerativeConstantConstructor(
-      this.defaultValues,
-      this.thisConstructorInvocation);
+      this.defaultValues, this.thisConstructorInvocation);
 
   ConstantConstructorKind get kind {
     return ConstantConstructorKind.REDIRECTING_GENERATIVE;
   }
 
   InterfaceType computeInstanceType(InterfaceType newType) {
-    return thisConstructorInvocation.computeInstanceType()
+    return thisConstructorInvocation
+        .computeInstanceType()
         .substByContext(newType);
   }
 
   Map<FieldElement, ConstantExpression> computeInstanceFields(
-      List<ConstantExpression> arguments,
-      CallStructure callStructure) {
+      List<ConstantExpression> arguments, CallStructure callStructure) {
     NormalizedArguments args =
         new NormalizedArguments(defaultValues, callStructure, arguments);
     Map<FieldElement, ConstantExpression> appliedFieldMap =
@@ -190,8 +180,7 @@
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! RedirectingGenerativeConstantConstructor) return false;
-    return
-        thisConstructorInvocation == other.thisConstructorInvocation &&
+    return thisConstructorInvocation == other.thisConstructorInvocation &&
         GenerativeConstantConstructor.mapEquals(
             defaultValues, other.defaultValues);
   }
@@ -219,13 +208,13 @@
   }
 
   InterfaceType computeInstanceType(InterfaceType newType) {
-    return targetConstructorInvocation.computeInstanceType()
+    return targetConstructorInvocation
+        .computeInstanceType()
         .substByContext(newType);
   }
 
   Map<FieldElement, ConstantExpression> computeInstanceFields(
-      List<ConstantExpression> arguments,
-      CallStructure callStructure) {
+      List<ConstantExpression> arguments, CallStructure callStructure) {
     ConstantConstructor constantConstructor =
         targetConstructorInvocation.target.constantConstructor;
     return constantConstructor.computeInstanceFields(arguments, callStructure);
diff --git a/pkg/compiler/lib/src/constants/evaluation.dart b/pkg/compiler/lib/src/constants/evaluation.dart
index 176d736..88aad8a 100644
--- a/pkg/compiler/lib/src/constants/evaluation.dart
+++ b/pkg/compiler/lib/src/constants/evaluation.dart
@@ -4,10 +4,8 @@
 
 library dart2js.constants.evaluation;
 
-import '../compiler.dart' show
-    Compiler;
-import '../universe/call_structure.dart' show
-    CallStructure;
+import '../compiler.dart' show Compiler;
+import '../universe/call_structure.dart' show CallStructure;
 import 'expressions.dart';
 
 /// Environment used for evaluating constant expressions.
@@ -22,7 +20,7 @@
 /// The normalized arguments passed to a const constructor computed from the
 /// actual [arguments] and the [defaultValues] of the called construrctor.
 class NormalizedArguments {
-  final Map<dynamic/*int|String*/, ConstantExpression> defaultValues;
+  final Map<dynamic /*int|String*/, ConstantExpression> defaultValues;
   final CallStructure callStructure;
   final List<ConstantExpression> arguments;
 
diff --git a/pkg/compiler/lib/src/constants/expressions.dart b/pkg/compiler/lib/src/constants/expressions.dart
index 02f7b1a..809d7e0 100644
--- a/pkg/compiler/lib/src/constants/expressions.dart
+++ b/pkg/compiler/lib/src/constants/expressions.dart
@@ -8,18 +8,17 @@
 import '../constants/constant_system.dart';
 import '../core_types.dart';
 import '../dart_types.dart';
-import '../elements/elements.dart' show
-    ConstructorElement,
-    Element,
-    FieldElement,
-    FunctionElement,
-    PrefixElement,
-    VariableElement;
+import '../elements/elements.dart'
+    show
+        ConstructorElement,
+        Element,
+        FieldElement,
+        FunctionElement,
+        PrefixElement,
+        VariableElement;
 import '../resolution/operators.dart';
-import '../tree/tree.dart' show
-    DartString;
-import '../universe/call_structure.dart' show
-    CallStructure;
+import '../tree/tree.dart' show DartString;
+import '../universe/call_structure.dart' show CallStructure;
 import 'evaluation.dart';
 import 'values.dart';
 
@@ -48,7 +47,6 @@
   TYPE,
   UNARY,
   VARIABLE,
-
   POSITIONAL_REFERENCE,
   NAMED_REFERENCE,
 }
@@ -78,8 +76,8 @@
 
   /// Compute the [ConstantValue] for this expression using the [environment]
   /// and the [constantSystem].
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem);
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem);
 
   /// Returns the type of this constant expression, if it is independent of the
   /// environment values.
@@ -112,7 +110,7 @@
 
   String toString() {
     assertDebugMode('Use ConstantExpression.getText() instead of '
-                    'ConstantExpression.toString()');
+        'ConstantExpression.toString()');
     return getText();
   }
 }
@@ -126,8 +124,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     // TODO(johnniwinther): Use non-constant values for errors.
     return new NonConstantValue();
   }
@@ -146,8 +144,8 @@
   SyntheticConstantExpression(this.value);
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return value;
   }
 
@@ -166,8 +164,6 @@
   ConstantExpressionKind get kind => ConstantExpressionKind.SYNTHETIC;
 }
 
-
-
 /// A boolean, int, double, string, or null constant.
 abstract class PrimitiveConstantExpression extends ConstantExpression {
   /// The primitive value of this contant expression.
@@ -187,8 +183,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.createBool(primitiveValue);
   }
 
@@ -217,8 +213,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.createInt(primitiveValue);
   }
 
@@ -247,8 +243,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.createDouble(primitiveValue);
   }
 
@@ -277,8 +273,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.createString(new DartString.literal(primitiveValue));
   }
 
@@ -305,8 +301,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.createNull();
   }
 
@@ -336,8 +332,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.createList(type,
         values.map((v) => v.evaluate(environment, constantSystem)).toList());
   }
@@ -385,9 +381,10 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
-    return constantSystem.createMap(environment.compiler,
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
+    return constantSystem.createMap(
+        environment.compiler,
         type,
         keys.map((k) => k.evaluate(environment, constantSystem)).toList(),
         values.map((v) => v.evaluate(environment, constantSystem)).toList());
@@ -432,10 +429,7 @@
   final List<ConstantExpression> arguments;
 
   ConstructedConstantExpression(
-      this.type,
-      this.target,
-      this.callStructure,
-      this.arguments) {
+      this.type, this.target, this.callStructure, this.arguments) {
     assert(type.element == target.enclosingClass);
     assert(!arguments.contains(null));
   }
@@ -447,8 +441,8 @@
   }
 
   Map<FieldElement, ConstantExpression> computeInstanceFields() {
-    return target.constantConstructor.computeInstanceFields(
-        arguments, callStructure);
+    return target.constantConstructor
+        .computeInstanceFields(arguments, callStructure);
   }
 
   InterfaceType computeInstanceType() {
@@ -456,18 +450,17 @@
   }
 
   ConstructedConstantExpression apply(NormalizedArguments arguments) {
-    return new ConstructedConstantExpression(
-        type, target, callStructure,
+    return new ConstructedConstantExpression(type, target, callStructure,
         this.arguments.map((a) => a.apply(arguments)).toList());
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     Map<FieldElement, ConstantValue> fieldValues =
         <FieldElement, ConstantValue>{};
-    computeInstanceFields().forEach(
-        (FieldElement field, ConstantExpression constant) {
+    computeInstanceFields()
+        .forEach((FieldElement field, ConstantExpression constant) {
       fieldValues[field] = constant.evaluate(environment, constantSystem);
     });
     return new ConstructedConstantValue(computeInstanceType(), fieldValues);
@@ -476,9 +469,7 @@
   @override
   int _computeHashCode() {
     int hashCode =
-        13 * type.hashCode +
-        17 * target.hashCode +
-        19 * callStructure.hashCode;
+        13 * type.hashCode + 17 * target.hashCode + 19 * callStructure.hashCode;
     for (ConstantExpression value in arguments) {
       hashCode ^= 23 * value.hashCode;
     }
@@ -515,8 +506,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     DartString accumulator;
     for (ConstantExpression expression in expressions) {
       ConstantValue value = expression.evaluate(environment, constantSystem);
@@ -585,8 +576,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     // TODO(johnniwinther): Implement this.
     throw new UnsupportedError('SymbolConstantExpression.evaluate');
   }
@@ -611,8 +602,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.createType(environment.compiler, type);
   }
 
@@ -641,8 +632,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return element.constant.evaluate(environment, constantSystem);
   }
 
@@ -668,8 +659,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return new FunctionConstantValue(element);
   }
 
@@ -702,8 +693,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.lookupBinary(operator).fold(
         left.evaluate(environment, constantSystem),
         right.evaluate(environment, constantSystem));
@@ -711,9 +702,7 @@
 
   ConstantExpression apply(NormalizedArguments arguments) {
     return new BinaryConstantExpression(
-        left.apply(arguments),
-        operator,
-        right.apply(arguments));
+        left.apply(arguments), operator, right.apply(arguments));
   }
 
   DartType getKnownType(CoreTypes coreTypes) {
@@ -734,11 +723,11 @@
           assert(knownRightType == coreTypes.stringType);
           return coreTypes.stringType;
         } else if (knownLeftType == coreTypes.intType &&
-                   knownRightType == coreTypes.intType) {
+            knownRightType == coreTypes.intType) {
           return coreTypes.intType;
         }
         assert(knownLeftType == coreTypes.doubleType ||
-               knownRightType == coreTypes.doubleType);
+            knownRightType == coreTypes.doubleType);
         return coreTypes.doubleType;
       case BinaryOperatorKind.SUB:
       case BinaryOperatorKind.MUL:
@@ -748,7 +737,7 @@
           return coreTypes.intType;
         }
         assert(knownLeftType == coreTypes.doubleType ||
-               knownRightType == coreTypes.doubleType);
+            knownRightType == coreTypes.doubleType);
         return coreTypes.doubleType;
       case BinaryOperatorKind.DIV:
         return coreTypes.doubleType;
@@ -767,21 +756,18 @@
     }
   }
 
-
   int get precedence => PRECEDENCE_MAP[operator.kind];
 
   @override
   int _computeHashCode() {
-    return 13 * operator.hashCode +
-           17 * left.hashCode +
-           19 * right.hashCode;
+    return 13 * operator.hashCode + 17 * left.hashCode + 19 * right.hashCode;
   }
 
   @override
   bool _equals(BinaryConstantExpression other) {
     return operator == other.operator &&
-           left == other.left &&
-           right == other.right;
+        left == other.left &&
+        right == other.right;
   }
 
   static const Map<BinaryOperatorKind, int> PRECEDENCE_MAP = const {
@@ -822,8 +808,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return constantSystem.identity.fold(
         left.evaluate(environment, constantSystem),
         right.evaluate(environment, constantSystem));
@@ -831,22 +817,19 @@
 
   ConstantExpression apply(NormalizedArguments arguments) {
     return new IdenticalConstantExpression(
-        left.apply(arguments),
-        right.apply(arguments));
+        left.apply(arguments), right.apply(arguments));
   }
 
   int get precedence => 15;
 
   @override
   int _computeHashCode() {
-    return 17 * left.hashCode +
-           19 * right.hashCode;
+    return 17 * left.hashCode + 19 * right.hashCode;
   }
 
   @override
   bool _equals(IdenticalConstantExpression other) {
-    return left == other.left &&
-           right == other.right;
+    return left == other.left && right == other.right;
   }
 
   @override
@@ -869,30 +852,27 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
-    return constantSystem.lookupUnary(operator).fold(
-        expression.evaluate(environment, constantSystem));
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
+    return constantSystem
+        .lookupUnary(operator)
+        .fold(expression.evaluate(environment, constantSystem));
   }
 
   ConstantExpression apply(NormalizedArguments arguments) {
-    return new UnaryConstantExpression(
-        operator,
-        expression.apply(arguments));
+    return new UnaryConstantExpression(operator, expression.apply(arguments));
   }
 
   int get precedence => PRECEDENCE_MAP[operator.kind];
 
   @override
   int _computeHashCode() {
-    return 13 * operator.hashCode +
-           17 * expression.hashCode;
+    return 13 * operator.hashCode + 17 * expression.hashCode;
   }
 
   @override
   bool _equals(UnaryConstantExpression other) {
-    return operator == other.operator &&
-           expression == other.expression;
+    return operator == other.operator && expression == other.expression;
   }
 
   @override
@@ -907,7 +887,6 @@
   };
 }
 
-
 /// A string length constant expression like `a.length`.
 class StringLengthConstantExpression extends ConstantExpression {
   final ConstantExpression expression;
@@ -921,8 +900,8 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     ConstantValue value = expression.evaluate(environment, constantSystem);
     if (value.isString) {
       StringConstantValue stringValue = value;
@@ -957,9 +936,7 @@
   final ConstantExpression trueExp;
   final ConstantExpression falseExp;
 
-  ConditionalConstantExpression(this.condition,
-                                this.trueExp,
-                                this.falseExp);
+  ConditionalConstantExpression(this.condition, this.trueExp, this.falseExp);
 
   ConstantExpressionKind get kind => ConstantExpressionKind.CONDITIONAL;
 
@@ -968,10 +945,8 @@
   }
 
   ConstantExpression apply(NormalizedArguments arguments) {
-    return new ConditionalConstantExpression(
-        condition.apply(arguments),
-        trueExp.apply(arguments),
-        falseExp.apply(arguments));
+    return new ConditionalConstantExpression(condition.apply(arguments),
+        trueExp.apply(arguments), falseExp.apply(arguments));
   }
 
   int get precedence => 3;
@@ -979,26 +954,24 @@
   @override
   int _computeHashCode() {
     return 13 * condition.hashCode +
-           17 * trueExp.hashCode +
-           19 * falseExp.hashCode;
+        17 * trueExp.hashCode +
+        19 * falseExp.hashCode;
   }
 
   @override
   bool _equals(ConditionalConstantExpression other) {
     return condition == other.condition &&
-           trueExp == other.trueExp &&
-           falseExp == other.falseExp;
+        trueExp == other.trueExp &&
+        falseExp == other.falseExp;
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     ConstantValue conditionValue =
         condition.evaluate(environment, constantSystem);
-    ConstantValue trueValue =
-        trueExp.evaluate(environment, constantSystem);
-    ConstantValue falseValue =
-        falseExp.evaluate(environment, constantSystem);
+    ConstantValue trueValue = trueExp.evaluate(environment, constantSystem);
+    ConstantValue falseValue = falseExp.evaluate(environment, constantSystem);
     if (conditionValue.isTrue) {
       return trueValue;
     } else if (conditionValue.isFalse) {
@@ -1044,8 +1017,8 @@
   bool _equals(PositionalArgumentReference other) => index == other.index;
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     throw new UnsupportedError('PositionalArgumentReference.evaluate');
   }
 }
@@ -1075,8 +1048,8 @@
   bool _equals(NamedArgumentReference other) => name == other.name;
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     throw new UnsupportedError('NamedArgumentReference.evaluate');
   }
 }
@@ -1089,24 +1062,20 @@
 
   @override
   int _computeHashCode() {
-    return 13 * name.hashCode +
-           17 * defaultValue.hashCode;
+    return 13 * name.hashCode + 17 * defaultValue.hashCode;
   }
 
   @override
   bool _equals(FromEnvironmentConstantExpression other) {
-    return name == other.name &&
-           defaultValue == other.defaultValue;
+    return name == other.name && defaultValue == other.defaultValue;
   }
 }
 
 /// A `const bool.fromEnvironment` constant.
 class BoolFromEnvironmentConstantExpression
     extends FromEnvironmentConstantExpression {
-
   BoolFromEnvironmentConstantExpression(
-      ConstantExpression name,
-      ConstantExpression defaultValue)
+      ConstantExpression name, ConstantExpression defaultValue)
       : super(name, defaultValue);
 
   ConstantExpressionKind get kind {
@@ -1118,14 +1087,13 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     ConstantValue nameConstantValue =
         name.evaluate(environment, constantSystem);
     ConstantValue defaultConstantValue;
     if (defaultValue != null) {
-      defaultConstantValue =
-          defaultValue.evaluate(environment, constantSystem);
+      defaultConstantValue = defaultValue.evaluate(environment, constantSystem);
     } else {
       defaultConstantValue = constantSystem.createBool(false);
     }
@@ -1145,8 +1113,7 @@
   }
 
   ConstantExpression apply(NormalizedArguments arguments) {
-    return new BoolFromEnvironmentConstantExpression(
-        name.apply(arguments),
+    return new BoolFromEnvironmentConstantExpression(name.apply(arguments),
         defaultValue != null ? defaultValue.apply(arguments) : null);
   }
 
@@ -1157,10 +1124,8 @@
 /// A `const int.fromEnvironment` constant.
 class IntFromEnvironmentConstantExpression
     extends FromEnvironmentConstantExpression {
-
   IntFromEnvironmentConstantExpression(
-      ConstantExpression name,
-      ConstantExpression defaultValue)
+      ConstantExpression name, ConstantExpression defaultValue)
       : super(name, defaultValue);
 
   ConstantExpressionKind get kind {
@@ -1172,14 +1137,13 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     ConstantValue nameConstantValue =
         name.evaluate(environment, constantSystem);
     ConstantValue defaultConstantValue;
     if (defaultValue != null) {
-      defaultConstantValue =
-          defaultValue.evaluate(environment, constantSystem);
+      defaultConstantValue = defaultValue.evaluate(environment, constantSystem);
     } else {
       defaultConstantValue = constantSystem.createNull();
     }
@@ -1201,8 +1165,7 @@
   }
 
   ConstantExpression apply(NormalizedArguments arguments) {
-    return new IntFromEnvironmentConstantExpression(
-        name.apply(arguments),
+    return new IntFromEnvironmentConstantExpression(name.apply(arguments),
         defaultValue != null ? defaultValue.apply(arguments) : null);
   }
 
@@ -1213,10 +1176,8 @@
 /// A `const String.fromEnvironment` constant.
 class StringFromEnvironmentConstantExpression
     extends FromEnvironmentConstantExpression {
-
   StringFromEnvironmentConstantExpression(
-      ConstantExpression name,
-      ConstantExpression defaultValue)
+      ConstantExpression name, ConstantExpression defaultValue)
       : super(name, defaultValue);
 
   ConstantExpressionKind get kind {
@@ -1228,14 +1189,13 @@
   }
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     ConstantValue nameConstantValue =
         name.evaluate(environment, constantSystem);
     ConstantValue defaultConstantValue;
     if (defaultValue != null) {
-      defaultConstantValue =
-          defaultValue.evaluate(environment, constantSystem);
+      defaultConstantValue = defaultValue.evaluate(environment, constantSystem);
     } else {
       defaultConstantValue = constantSystem.createNull();
     }
@@ -1253,8 +1213,7 @@
   }
 
   ConstantExpression apply(NormalizedArguments arguments) {
-    return new StringFromEnvironmentConstantExpression(
-        name.apply(arguments),
+    return new StringFromEnvironmentConstantExpression(name.apply(arguments),
         defaultValue != null ? defaultValue.apply(arguments) : null);
   }
 
@@ -1273,8 +1232,8 @@
   ConstantExpressionKind get kind => ConstantExpressionKind.DEFERRED;
 
   @override
-  ConstantValue evaluate(Environment environment,
-                         ConstantSystem constantSystem) {
+  ConstantValue evaluate(
+      Environment environment, ConstantSystem constantSystem) {
     return expression.evaluate(environment, constantSystem);
   }
 
@@ -1284,8 +1243,7 @@
   }
 
   ConstantExpression apply(NormalizedArguments arguments) {
-    return new DeferredConstantExpression(
-        expression.apply(arguments), prefix);
+    return new DeferredConstantExpression(expression.apply(arguments), prefix);
   }
 
   @override
@@ -1324,12 +1282,12 @@
   R visitUnary(UnaryConstantExpression exp, A context);
   R visitStringLength(StringLengthConstantExpression exp, A context);
   R visitConditional(ConditionalConstantExpression exp, A context);
-  R visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp,
-                             A context);
-  R visitIntFromEnvironment(IntFromEnvironmentConstantExpression exp,
-                            A context);
-  R visitStringFromEnvironment(StringFromEnvironmentConstantExpression exp,
-                               A context);
+  R visitBoolFromEnvironment(
+      BoolFromEnvironmentConstantExpression exp, A context);
+  R visitIntFromEnvironment(
+      IntFromEnvironmentConstantExpression exp, A context);
+  R visitStringFromEnvironment(
+      StringFromEnvironmentConstantExpression exp, A context);
   R visitDeferred(DeferredConstantExpression exp, A context);
 
   R visitPositional(PositionalArgumentReference exp, A context);
@@ -1339,9 +1297,8 @@
 class ConstExpPrinter extends ConstantExpressionVisitor {
   final StringBuffer sb = new StringBuffer();
 
-  void write(ConstantExpression parent,
-             ConstantExpression child,
-             {bool leftAssociative: true}) {
+  void write(ConstantExpression parent, ConstantExpression child,
+      {bool leftAssociative: true}) {
     if (child.precedence < parent.precedence ||
         !leftAssociative && child.precedence == parent.precedence) {
       sb.write('(');
@@ -1478,7 +1435,6 @@
         visit(expression);
         sb.write("}");
       }
-
     }
     sb.write('"');
   }
@@ -1572,7 +1528,7 @@
 
   @override
   void visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp,
-                                [_]) {
+      [_]) {
     sb.write('const bool.fromEnvironment(');
     visit(exp.name);
     if (exp.defaultValue != null) {
@@ -1595,7 +1551,7 @@
 
   @override
   void visitStringFromEnvironment(StringFromEnvironmentConstantExpression exp,
-                                  [_]) {
+      [_]) {
     sb.write('const String.fromEnvironment(');
     visit(exp.name);
     if (exp.defaultValue != null) {
diff --git a/pkg/compiler/lib/src/constants/values.dart b/pkg/compiler/lib/src/constants/values.dart
index 3b0ed7d..1cc0271 100644
--- a/pkg/compiler/lib/src/constants/values.dart
+++ b/pkg/compiler/lib/src/constants/values.dart
@@ -8,11 +8,7 @@
 import '../core_types.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart'
-    show ClassElement,
-         Element,
-         FieldElement,
-         FunctionElement,
-         PrefixElement;
+    show ClassElement, Element, FieldElement, FunctionElement, PrefixElement;
 import '../tree/tree.dart' hide unparse;
 import '../util/util.dart' show Hashing;
 
@@ -89,7 +85,7 @@
 
   String toString() {
     assertDebugMode("Use Constant.unparse() or Constant.toStructuredString() "
-                    "instead of Constant.toString().");
+        "instead of Constant.toString().");
     return toStructuredString();
   }
 }
@@ -104,7 +100,7 @@
   bool get isFunction => true;
 
   bool operator ==(var other) {
-    if (other is !FunctionConstantValue) return false;
+    if (other is! FunctionConstantValue) return false;
     return identical(other.element, element);
   }
 
@@ -141,7 +137,7 @@
   bool get isPrimitive => true;
 
   bool operator ==(var other) {
-    if (other is !PrimitiveConstantValue) return false;
+    if (other is! PrimitiveConstantValue) return false;
     PrimitiveConstantValue otherPrimitive = other;
     // We use == instead of 'identical' so that DartStrings compare correctly.
     return primitiveValue == otherPrimitive.primitiveValue;
@@ -195,20 +191,34 @@
 
   factory IntConstantValue(int value) {
     switch (value) {
-      case 0: return const IntConstantValue._internal(0);
-      case 1: return const IntConstantValue._internal(1);
-      case 2: return const IntConstantValue._internal(2);
-      case 3: return const IntConstantValue._internal(3);
-      case 4: return const IntConstantValue._internal(4);
-      case 5: return const IntConstantValue._internal(5);
-      case 6: return const IntConstantValue._internal(6);
-      case 7: return const IntConstantValue._internal(7);
-      case 8: return const IntConstantValue._internal(8);
-      case 9: return const IntConstantValue._internal(9);
-      case 10: return const IntConstantValue._internal(10);
-      case -1: return const IntConstantValue._internal(-1);
-      case -2: return const IntConstantValue._internal(-2);
-      default: return new IntConstantValue._internal(value);
+      case 0:
+        return const IntConstantValue._internal(0);
+      case 1:
+        return const IntConstantValue._internal(1);
+      case 2:
+        return const IntConstantValue._internal(2);
+      case 3:
+        return const IntConstantValue._internal(3);
+      case 4:
+        return const IntConstantValue._internal(4);
+      case 5:
+        return const IntConstantValue._internal(5);
+      case 6:
+        return const IntConstantValue._internal(6);
+      case 7:
+        return const IntConstantValue._internal(7);
+      case 8:
+        return const IntConstantValue._internal(8);
+      case 9:
+        return const IntConstantValue._internal(9);
+      case 10:
+        return const IntConstantValue._internal(10);
+      case -1:
+        return const IntConstantValue._internal(-1);
+      case -2:
+        return const IntConstantValue._internal(-2);
+      default:
+        return new IntConstantValue._internal(value);
     }
   }
 
@@ -233,7 +243,7 @@
   // The is [:!IntConstant:] check at the beginning of the function makes sure
   // that we compare only equal to integer constants.
   bool operator ==(var other) {
-    if (other is !IntConstantValue) return false;
+    if (other is! IntConstantValue) return false;
     IntConstantValue otherInt = other;
     return primitiveValue == otherInt.primitiveValue;
   }
@@ -288,7 +298,7 @@
   DartType getType(CoreTypes types) => types.doubleType;
 
   bool operator ==(var other) {
-    if (other is !DoubleConstantValue) return false;
+    if (other is! DoubleConstantValue) return false;
     DoubleConstantValue otherDouble = other;
     double otherValue = otherDouble.primitiveValue;
     if (primitiveValue == 0.0 && otherValue == 0.0) {
@@ -390,10 +400,10 @@
 
   bool operator ==(var other) {
     if (identical(this, other)) return true;
-    if (other is !StringConstantValue) return false;
+    if (other is! StringConstantValue) return false;
     StringConstantValue otherString = other;
     return hashCode == otherString.hashCode &&
-           primitiveValue == otherString.primitiveValue;
+        primitiveValue == otherString.primitiveValue;
   }
 
   DartString toDartString() => primitiveValue;
@@ -436,7 +446,7 @@
 
   bool operator ==(other) {
     return other is TypeConstantValue &&
-           representedType == other.representedType;
+        representedType == other.representedType;
   }
 
   int get hashCode => representedType.hashCode * 13;
@@ -463,7 +473,7 @@
 
   bool operator ==(var other) {
     if (identical(this, other)) return true;
-    if (other is !ListConstantValue) return false;
+    if (other is! ListConstantValue) return false;
     ListConstantValue otherList = other;
     if (hashCode != otherList.hashCode) return false;
     if (type != otherList.type) return false;
@@ -484,7 +494,7 @@
     StringBuffer sb = new StringBuffer();
     _unparseTypeArguments(sb);
     sb.write('[');
-    for (int i = 0 ; i < length ; i++) {
+    for (int i = 0; i < length; i++) {
       if (i > 0) sb.write(',');
       sb.write(entries[i].unparse());
     }
@@ -497,7 +507,7 @@
     sb.write('ListConstant(');
     _unparseTypeArguments(sb);
     sb.write('[');
-    for (int i = 0 ; i < length ; i++) {
+    for (int i = 0; i < length; i++) {
       if (i > 0) sb.write(', ');
       sb.write(entries[i].toStructuredString());
     }
@@ -512,14 +522,12 @@
   final int hashCode;
   Map<ConstantValue, ConstantValue> _lookupMap;
 
-  MapConstantValue(InterfaceType type,
-                   List<ConstantValue> keys,
-                   List<ConstantValue> values)
+  MapConstantValue(
+      InterfaceType type, List<ConstantValue> keys, List<ConstantValue> values)
       : this.keys = keys,
         this.values = values,
-        this.hashCode = Hashing.listHash(values,
-                            Hashing.listHash(keys,
-                                Hashing.objectHash(type))),
+        this.hashCode = Hashing.listHash(
+            values, Hashing.listHash(keys, Hashing.objectHash(type))),
         super(type) {
     assert(keys.length == values.length);
   }
@@ -528,7 +536,7 @@
 
   bool operator ==(var other) {
     if (identical(this, other)) return true;
-    if (other is !MapConstantValue) return false;
+    if (other is! MapConstantValue) return false;
     MapConstantValue otherMap = other;
     if (hashCode != otherMap.hashCode) return false;
     if (type != other.type) return false;
@@ -561,7 +569,7 @@
     StringBuffer sb = new StringBuffer();
     _unparseTypeArguments(sb);
     sb.write('{');
-    for (int i = 0 ; i < length ; i++) {
+    for (int i = 0; i < length; i++) {
       if (i > 0) sb.write(',');
       sb.write(keys[i].unparse());
       sb.write(':');
@@ -597,8 +605,8 @@
   bool get isInterceptor => true;
 
   bool operator ==(other) {
-    return other is InterceptorConstantValue
-        && dispatchedType == other.dispatchedType;
+    return other is InterceptorConstantValue &&
+        dispatchedType == other.dispatchedType;
   }
 
   int get hashCode => dispatchedType.hashCode * 43;
@@ -629,8 +637,7 @@
   bool get isDummy => true;
 
   bool operator ==(other) {
-    return other is SyntheticConstantValue
-        && payload == other.payload;
+    return other is SyntheticConstantValue && payload == other.payload;
   }
 
   get hashCode => payload.hashCode * 17 + kind.hashCode;
@@ -652,11 +659,11 @@
   final Map<FieldElement, ConstantValue> fields;
   final int hashCode;
 
-  ConstructedConstantValue(InterfaceType type,
-                           Map<FieldElement, ConstantValue> fields)
-    : this.fields = fields,
-      hashCode = Hashing.mapHash(fields, Hashing.objectHash(type)),
-      super(type) {
+  ConstructedConstantValue(
+      InterfaceType type, Map<FieldElement, ConstantValue> fields)
+      : this.fields = fields,
+        hashCode = Hashing.mapHash(fields, Hashing.objectHash(type)),
+        super(type) {
     assert(type != null);
     assert(!fields.containsValue(null));
   }
@@ -665,7 +672,7 @@
 
   bool operator ==(var otherVar) {
     if (identical(this, otherVar)) return true;
-    if (otherVar is !ConstructedConstantValue) return false;
+    if (otherVar is! ConstructedConstantValue) return false;
     ConstructedConstantValue other = otherVar;
     if (hashCode != other.hashCode) return false;
     if (type != other.type) return false;
@@ -728,9 +735,9 @@
   bool get isReference => true;
 
   bool operator ==(other) {
-    return other is DeferredConstantValue
-        && referenced == other.referenced
-        && prefix == other.prefix;
+    return other is DeferredConstantValue &&
+        referenced == other.referenced &&
+        prefix == other.prefix;
   }
 
   get hashCode => (referenced.hashCode * 17 + prefix.hashCode) & 0x3fffffff;
diff --git a/pkg/compiler/lib/src/cps_ir/backward_null_check_remover.dart b/pkg/compiler/lib/src/cps_ir/backward_null_check_remover.dart
index 4a018ef..5bdfc6c 100644
--- a/pkg/compiler/lib/src/cps_ir/backward_null_check_remover.dart
+++ b/pkg/compiler/lib/src/cps_ir/backward_null_check_remover.dart
@@ -71,7 +71,9 @@
     if (prim is ReceiverCheck && prim.isNullCheck) {
       Primitive value = prim.value;
       LetPrim let = prim.parent;
-      prim..replaceUsesWith(value)..destroy();
+      prim
+        ..replaceUsesWith(value)
+        ..destroy();
       let.remove();
     } else if (prim is GetLength || prim is GetField || prim is GetIndex) {
       if (prim.hasNoRefinedUses) {
diff --git a/pkg/compiler/lib/src/cps_ir/bounds_checker.dart b/pkg/compiler/lib/src/cps_ir/bounds_checker.dart
index faaf93e..b4ca8e1 100644
--- a/pkg/compiler/lib/src/cps_ir/bounds_checker.dart
+++ b/pkg/compiler/lib/src/cps_ir/bounds_checker.dart
@@ -124,13 +124,13 @@
     return lengthOf
         .putIfAbsent(indexableObject, () => <int, SignedVariable>{})
         .putIfAbsent(effectNumber, () {
-            int length = types.getContainerLength(type);
-            if (length != null) {
-              return octagon.makeVariable(length, length);
-            } else {
-              return octagon.makeVariable(0, MAX_UINT32);
-            }
-        });
+      int length = types.getContainerLength(type);
+      if (length != null) {
+        return octagon.makeVariable(length, length);
+      } else {
+        return octagon.makeVariable(0, MAX_UINT32);
+      }
+    });
   }
 
   // ------------- CONSTRAINT HELPERS -----------------
@@ -493,9 +493,8 @@
   void visitBoundsCheck(BoundsCheck node) {
     if (node.checks == BoundsCheck.NONE) return;
     assert(node.indexRef != null); // Because there is at least one check.
-    SignedVariable length = node.lengthRef == null
-        ? null
-        : getValue(node.length);
+    SignedVariable length =
+        node.lengthRef == null ? null : getValue(node.length);
     SignedVariable index = getValue(node.index);
     if (node.hasUpperBoundCheck) {
       if (isDefinitelyLessThan(index, length)) {
@@ -519,12 +518,16 @@
       }
     }
     if (!node.lengthUsedInCheck && node.lengthRef != null) {
-      node..lengthRef.unlink()..lengthRef = null;
+      node
+        ..lengthRef.unlink()
+        ..lengthRef = null;
     }
     if (node.checks == BoundsCheck.NONE) {
       // We can't remove the bounds check node because it may still be used to
       // restrict code motion.  But the index is no longer needed.
-      node..indexRef.unlink()..indexRef = null;
+      node
+        ..indexRef.unlink()
+        ..indexRef = null;
     }
   }
 
diff --git a/pkg/compiler/lib/src/cps_ir/builtin_operator.dart b/pkg/compiler/lib/src/cps_ir/builtin_operator.dart
index 5751644..7c5e45c 100644
--- a/pkg/compiler/lib/src/cps_ir/builtin_operator.dart
+++ b/pkg/compiler/lib/src/cps_ir/builtin_operator.dart
@@ -212,7 +212,7 @@
 
 /// True for the built-in operators that may be used in a compound assignment.
 bool isCompoundableOperator(BuiltinOperator operator) {
-  switch(operator) {
+  switch (operator) {
     case BuiltinOperator.NumAdd:
     case BuiltinOperator.NumSubtract:
     case BuiltinOperator.NumMultiply:
@@ -228,12 +228,11 @@
 int getEffectsOfBuiltinMethod(BuiltinMethod method) {
   switch (method) {
     case BuiltinMethod.Push:
-      return Effects.changesIndexableContent |
-             Effects.changesIndexableLength;
+      return Effects.changesIndexableContent | Effects.changesIndexableLength;
     case BuiltinMethod.Pop:
       return Effects.dependsOnIndexableContent |
-             Effects.dependsOnIndexableLength |
-             Effects.changesIndexableLength;
+          Effects.dependsOnIndexableLength |
+          Effects.changesIndexableLength;
     case BuiltinMethod.SetLength:
       return Effects.changesIndexableLength;
   }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_fragment.dart b/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
index 903b672..992ae55 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_fragment.dart
@@ -118,27 +118,22 @@
     return letPrim(new Refinement(value, type));
   }
 
-  Primitive invokeBuiltin(BuiltinMethod method,
-                          Primitive receiver,
-                          List<Primitive> arguments,
-                          {bool receiverIsNotNull: false}) {
+  Primitive invokeBuiltin(
+      BuiltinMethod method, Primitive receiver, List<Primitive> arguments,
+      {bool receiverIsNotNull: false}) {
     ApplyBuiltinMethod apply =
         new ApplyBuiltinMethod(method, receiver, arguments, sourceInformation);
     return letPrim(apply);
   }
 
   /// Inserts an invocation and returns a primitive holding the returned value.
-  Primitive invokeMethod(Primitive receiver,
-      Selector selector,
-      TypeMask mask,
+  Primitive invokeMethod(Primitive receiver, Selector selector, TypeMask mask,
       List<Primitive> arguments,
-      {Primitive interceptor,
-       CallingConvention callingConvention}) {
-    InvokeMethod invoke =
-        new InvokeMethod(receiver, selector, mask, arguments,
-                         sourceInformation: sourceInformation,
-                         callingConvention: callingConvention,
-                         interceptor: interceptor);
+      {Primitive interceptor, CallingConvention callingConvention}) {
+    InvokeMethod invoke = new InvokeMethod(receiver, selector, mask, arguments,
+        sourceInformation: sourceInformation,
+        callingConvention: callingConvention,
+        interceptor: interceptor);
     return letPrim(invoke);
   }
 
@@ -168,8 +163,8 @@
   /// Call [continueLoop] with the returned continuation to iterate the loop.
   ///
   /// The loop body becomes the new hole.
-  Continuation beginLoop([List<Parameter> loopVars,
-                          List<Primitive> initialValues]) {
+  Continuation beginLoop(
+      [List<Parameter> loopVars, List<Primitive> initialValues]) {
     if (initialValues == null) {
       assert(loopVars == null);
       loopVars = <Parameter>[];
@@ -195,13 +190,14 @@
   ///
   /// The other branch becomes the new hole.
   CpsFragment branch(Primitive condition,
-                     {bool negate: false,
-                      bool strict: false}) {
+      {bool negate: false, bool strict: false}) {
     Continuation trueCont = new Continuation(<Parameter>[]);
     Continuation falseCont = new Continuation(<Parameter>[]);
-    put(new LetCont.two(trueCont, falseCont,
-            new Branch(condition, trueCont, falseCont,
-                       sourceInformation, strict: strict)));
+    put(new LetCont.two(
+        trueCont,
+        falseCont,
+        new Branch(condition, trueCont, falseCont, sourceInformation,
+            strict: strict)));
     if (negate) {
       context = trueCont;
       return new CpsFragment(sourceInformation, falseCont);
@@ -278,11 +274,9 @@
   /// remains open, even if [target] never returns.
   ///
   /// The [target] function is destroyed and should not be reused.
-  Primitive inlineFunction(FunctionDefinition target,
-                           Primitive receiver,
-                           List<Primitive> arguments,
-                           {Entity hint,
-                            Primitive interceptor}) {
+  Primitive inlineFunction(
+      FunctionDefinition target, Primitive receiver, List<Primitive> arguments,
+      {Entity hint, Primitive interceptor}) {
     if (interceptor != null) {
       target.interceptorParameter.replaceUsesWith(interceptor);
     }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
index b7d7cdf..7927ba0 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder.dart
@@ -6,42 +6,31 @@
 
 import '../closure.dart' as closure;
 import '../common.dart';
-import '../common/names.dart' show
-    Names,
-    Selectors;
-import '../compile_time_constants.dart' show
-    BackendConstantEnvironment;
+import '../common/names.dart' show Names, Selectors;
+import '../compile_time_constants.dart' show BackendConstantEnvironment;
 import '../constants/constant_system.dart';
-import '../constants/values.dart' show
-    ConstantValue,
-    PrimitiveConstantValue;
+import '../constants/values.dart' show ConstantValue, PrimitiveConstantValue;
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../io/source_information.dart';
-import '../js/js.dart' as js show
-    js,
-    objectLiteral,
-    Expression,
-    LiteralStatement,
-    Template,
-    InterpolatedExpression,
-    isIdentityTemplate;
-import '../native/native.dart' show
-    NativeBehavior;
+import '../js/js.dart' as js
+    show
+        js,
+        objectLiteral,
+        Expression,
+        LiteralStatement,
+        Template,
+        InterpolatedExpression,
+        isIdentityTemplate;
+import '../native/native.dart' show NativeBehavior;
 import '../tree/tree.dart' as ast;
-import '../types/types.dart' show
-    TypeMask;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector,
-    SelectorKind;
+import '../types/types.dart' show TypeMask;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector, SelectorKind;
 
-import 'cps_ir_builder_task.dart' show
-    GlobalProgramInformation;
+import 'cps_ir_builder_task.dart' show GlobalProgramInformation;
 import 'cps_ir_nodes.dart' as ir;
 
-
 /// A mapping from variable elements to their compile-time values.
 ///
 /// Map elements denoted by parameters and local variables to the
@@ -110,7 +99,7 @@
 
   ir.Primitive lookup(Local element) {
     assert(invariant(element, variable2index.containsKey(element),
-                     message: "Unknown variable: $element."));
+        message: "Unknown variable: $element."));
     return index2value[variable2index[element]];
   }
 
@@ -158,8 +147,8 @@
   /// The environment is the one in effect at the point where the jump's
   /// continuation will be bound.  Continuations can take an extra argument
   /// (see [addJump]).
-  JumpCollector(this._continuationEnvironment, this.target,
-      bool hasExtraArgument) {
+  JumpCollector(
+      this._continuationEnvironment, this.target, bool hasExtraArgument) {
     if (hasExtraArgument) _continuationEnvironment.extend(null, null);
   }
 
@@ -168,7 +157,8 @@
   /// There is no jump target, it is implicitly the exit from the function.
   /// There is no environment at the destination.
   JumpCollector.retrn(this._continuation)
-      : _continuationEnvironment = null, target = null;
+      : _continuationEnvironment = null,
+        target = null;
 
   /// Construct a collector for collecting goto jumps.
   ///
@@ -280,8 +270,8 @@
       [ir.Primitive value, SourceInformation sourceInformation]) {
     assert(_continuation == null);
     _buildTryExit(builder);
-    ir.InvokeContinuation invoke = new ir.InvokeContinuation.uninitialized(
-        isEscapingTry: isEscapingTry);
+    ir.InvokeContinuation invoke =
+        new ir.InvokeContinuation.uninitialized(isEscapingTry: isEscapingTry);
     builder.add(invoke);
     _invocations.add(invoke);
     // Truncate the environment at the invocation site so it only includes
@@ -316,8 +306,8 @@
       int length = _continuationEnvironment.length;
       for (int varIndex = 0; varIndex < length; ++varIndex) {
         for (Environment invocationEnvironment in _invocationEnvironments) {
-          assert(invocationEnvironment.sameDomain(length,
-                                                  _continuationEnvironment));
+          assert(invocationEnvironment.sameDomain(
+              length, _continuationEnvironment));
           if (invocationEnvironment[varIndex] !=
               _continuationEnvironment[varIndex]) {
             ir.Parameter parameter = new ir.Parameter(
@@ -399,10 +389,9 @@
     if (value != null) ++delta;
     if (delta > 0) builder.environment.discard(delta);
     if (value != null) builder.environment.extend(null, value);
-    builder.add(new ir.InvokeContinuation(_continuation,
-        builder.environment.index2value,
-        isRecursive: true,
-        isEscapingTry: isEscapingTry));
+    builder.add(new ir.InvokeContinuation(
+        _continuation, builder.environment.index2value,
+        isRecursive: true, isEscapingTry: isEscapingTry));
     builder._current = null;
   }
 }
@@ -424,8 +413,7 @@
       [ir.Primitive value, SourceInformation sourceInformation]) {
     isEmpty = false;
     builder.add(new ir.InvokeContinuation(continuation, <ir.Primitive>[value],
-        isEscapingTry: isEscapingTry,
-        sourceInformation: sourceInformation));
+        isEscapingTry: isEscapingTry, sourceInformation: sourceInformation));
     builder._current = null;
   }
 }
@@ -444,7 +432,8 @@
   JumpCollector _breakJoin;
 
   GotoJumpCollector(JumpTarget target, this._stateVariableIndex,
-      this._stateValue, this._breakJoin) : super.goto(target);
+      this._stateValue, this._breakJoin)
+      : super.goto(target);
 
   void addJump(IrBuilder builder,
       [ir.Primitive value, SourceInformation sourceInformation]) {
@@ -599,11 +588,10 @@
   GlobalProgramInformation get program => state.program;
 
   IrBuilder(GlobalProgramInformation program,
-            BackendConstantEnvironment constants,
-            ExecutableElement currentElement)
-    : state = new IrBuilderSharedState(program, constants, currentElement),
-      environment = new Environment.empty(),
-      mutableVariables = <Local, ir.MutableVariable>{};
+      BackendConstantEnvironment constants, ExecutableElement currentElement)
+      : state = new IrBuilderSharedState(program, constants, currentElement),
+        environment = new Environment.empty(),
+        mutableVariables = <Local, ir.MutableVariable>{};
 
   IrBuilder._internal(this.state, this.environment, this.mutableVariables);
 
@@ -630,8 +618,7 @@
 
   /// Creates a [ir.MutableVariable] for the given local.
   void makeMutableVariable(Local local) {
-    mutableVariables[local] =
-        new ir.MutableVariable(local);
+    mutableVariables[local] = new ir.MutableVariable(local);
   }
 
   /// Remove an [ir.MutableVariable] for a local.
@@ -650,8 +637,7 @@
   bool get isOpen => root == null || _current != null;
 
   List<ir.Primitive> buildFunctionHeader(Iterable<Local> parameters,
-                                        {ClosureScope closureScope,
-                                         ClosureEnvironment env}) {
+      {ClosureScope closureScope, ClosureEnvironment env}) {
     _createThisParameter();
     _enterClosureEnvironment(env);
     _enterScope(closureScope);
@@ -687,10 +673,8 @@
     return primitive;
   }
 
-  ir.Primitive buildInvokeStatic(Element element,
-                                 Selector selector,
-                                 List<ir.Primitive> arguments,
-                                 SourceInformation sourceInformation) {
+  ir.Primitive buildInvokeStatic(Element element, Selector selector,
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     assert(!element.isLocal);
     assert(!element.isInstanceMember);
     assert(isOpen);
@@ -701,41 +685,38 @@
         new ir.InvokeStatic(element, selector, arguments, sourceInformation));
   }
 
-  ir.Primitive _buildInvokeSuper(Element target,
-                                 Selector selector,
-                                 List<ir.Primitive> arguments,
-                                 SourceInformation sourceInformation) {
+  ir.Primitive _buildInvokeSuper(Element target, Selector selector,
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     assert(target.isInstanceMember);
     assert(isOpen);
     return addPrimitive(new ir.InvokeMethodDirectly(
         buildThis(), target, selector, arguments, sourceInformation));
   }
 
-  ir.Primitive _buildInvokeDynamic(ir.Primitive receiver,
-                                   Selector selector,
-                                   TypeMask mask,
-                                   List<ir.Primitive> arguments,
-                                   SourceInformation sourceInformation) {
+  ir.Primitive _buildInvokeDynamic(
+      ir.Primitive receiver,
+      Selector selector,
+      TypeMask mask,
+      List<ir.Primitive> arguments,
+      SourceInformation sourceInformation) {
     assert(isOpen);
-    return addPrimitive(new ir.InvokeMethod(
-        receiver, selector, mask, arguments,
+    return addPrimitive(new ir.InvokeMethod(receiver, selector, mask, arguments,
         sourceInformation: sourceInformation));
   }
 
-  ir.Primitive _buildInvokeCall(ir.Primitive target,
-                                CallStructure callStructure,
-                                TypeMask mask,
-                                List<ir.Definition> arguments,
-                                SourceInformation sourceInformation) {
+  ir.Primitive _buildInvokeCall(
+      ir.Primitive target,
+      CallStructure callStructure,
+      TypeMask mask,
+      List<ir.Definition> arguments,
+      SourceInformation sourceInformation) {
     Selector selector = callStructure.callSelector;
     return _buildInvokeDynamic(
         target, selector, mask, arguments, sourceInformation);
   }
 
-  ir.Primitive buildStaticNoSuchMethod(
-      Selector selector,
-      List<ir.Primitive> arguments,
-      SourceInformation sourceInformation) {
+  ir.Primitive buildStaticNoSuchMethod(Selector selector,
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     ir.Primitive receiver = buildStringConstant('');
     ir.Primitive name = buildStringConstant(selector.name);
     ir.Primitive argumentList = buildListLiteral(null, arguments);
@@ -748,7 +729,7 @@
 
   /// Create a [ir.Constant] from [value] and add it to the CPS term.
   ir.Constant buildConstant(ConstantValue value,
-                            {SourceInformation sourceInformation}) {
+      {SourceInformation sourceInformation}) {
     assert(isOpen);
     return addPrimitive(
         new ir.Constant(value, sourceInformation: sourceInformation));
@@ -787,9 +768,9 @@
 
   /// Creates a non-constant list literal of the provided [type] and with the
   /// provided [values].
-  ir.Primitive buildListLiteral(InterfaceType type,
-                                Iterable<ir.Primitive> values,
-                                {TypeMask allocationSiteType}) {
+  ir.Primitive buildListLiteral(
+      InterfaceType type, Iterable<ir.Primitive> values,
+      {TypeMask allocationSiteType}) {
     assert(isOpen);
     return addPrimitive(new ir.LiteralList(type, values.toList(),
         allocationSiteType: allocationSiteType));
@@ -832,12 +813,13 @@
     ir.Continuation elseContinuation = new ir.Continuation([]);
     thenContinuation.body = thenBuilder.root;
     elseContinuation.body = elseBuilder.root;
-    add(new ir.LetCont(join.continuation,
-            new ir.LetCont.two(thenContinuation, elseContinuation,
-                new ir.Branch.strict(condition,
-                                     thenContinuation,
-                                     elseContinuation,
-                                     sourceInformation))));
+    add(new ir.LetCont(
+        join.continuation,
+        new ir.LetCont.two(
+            thenContinuation,
+            elseContinuation,
+            new ir.Branch.strict(condition, thenContinuation, elseContinuation,
+                sourceInformation))));
     environment = join.environment;
     return environment.discard(1);
   }
@@ -863,12 +845,8 @@
   ir.FunctionDefinition makeFunctionDefinition(
       SourceInformation sourceInformation) {
     _ensureReturn();
-    return new ir.FunctionDefinition(
-        state.currentElement,
-        state.thisParameter,
-        state.functionParameters,
-        state.returnContinuation,
-        root,
+    return new ir.FunctionDefinition(state.currentElement, state.thisParameter,
+        state.functionParameters, state.returnContinuation, root,
         sourceInformation: sourceInformation);
   }
 
@@ -882,65 +860,51 @@
       SourceInformation sourceInformation) {
     // TODO(johnniwinther): This shouldn't be necessary.
     SelectorKind kind = Elements.isOperatorName(method.name)
-        ? SelectorKind.OPERATOR : SelectorKind.CALL;
-    Selector selector =
-        new Selector(kind, method.memberName, callStructure);
+        ? SelectorKind.OPERATOR
+        : SelectorKind.CALL;
+    Selector selector = new Selector(kind, method.memberName, callStructure);
     return _buildInvokeSuper(method, selector, arguments, sourceInformation);
   }
 
   /// Create a read access of the [method] on the super class, i.e. a
   /// closurization of [method].
-  ir.Primitive buildSuperMethodGet(MethodElement method,
-                                   SourceInformation sourceInformation) {
+  ir.Primitive buildSuperMethodGet(
+      MethodElement method, SourceInformation sourceInformation) {
     // TODO(johnniwinther): This should have its own ir node.
-    return _buildInvokeSuper(
-        method,
-        new Selector.getter(method.memberName),
-        const <ir.Primitive>[],
-        sourceInformation);
+    return _buildInvokeSuper(method, new Selector.getter(method.memberName),
+        const <ir.Primitive>[], sourceInformation);
   }
 
   /// Create a getter invocation of the [getter] on the super class.
-  ir.Primitive buildSuperGetterGet(MethodElement getter,
-                                   SourceInformation sourceInformation) {
+  ir.Primitive buildSuperGetterGet(
+      MethodElement getter, SourceInformation sourceInformation) {
     // TODO(johnniwinther): This should have its own ir node.
-    return _buildInvokeSuper(
-        getter,
-        new Selector.getter(getter.memberName),
-        const <ir.Primitive>[],
-        sourceInformation);
+    return _buildInvokeSuper(getter, new Selector.getter(getter.memberName),
+        const <ir.Primitive>[], sourceInformation);
   }
 
   /// Create an setter invocation of the [setter] on the super class with
   /// [value].
-  ir.Primitive buildSuperSetterSet(MethodElement setter,
-                                   ir.Primitive value,
-                                   SourceInformation sourceInformation) {
+  ir.Primitive buildSuperSetterSet(MethodElement setter, ir.Primitive value,
+      SourceInformation sourceInformation) {
     // TODO(johnniwinther): This should have its own ir node.
-    _buildInvokeSuper(
-        setter,
-        new Selector.setter(setter.memberName),
-        <ir.Primitive>[value],
-        sourceInformation);
+    _buildInvokeSuper(setter, new Selector.setter(setter.memberName),
+        <ir.Primitive>[value], sourceInformation);
     return value;
   }
 
   /// Create an invocation of the index [method] on the super class with
   /// the provided [index].
-  ir.Primitive buildSuperIndex(MethodElement method,
-                               ir.Primitive index,
-                               SourceInformation sourceInformation) {
+  ir.Primitive buildSuperIndex(MethodElement method, ir.Primitive index,
+      SourceInformation sourceInformation) {
     return _buildInvokeSuper(
-        method, new Selector.index(), <ir.Primitive>[index],
-        sourceInformation);
+        method, new Selector.index(), <ir.Primitive>[index], sourceInformation);
   }
 
   /// Create an invocation of the index set [method] on the super class with
   /// the provided [index] and [value].
-  ir.Primitive buildSuperIndexSet(MethodElement method,
-                                  ir.Primitive index,
-                                  ir.Primitive value,
-                                  SourceInformation sourceInformation) {
+  ir.Primitive buildSuperIndexSet(MethodElement method, ir.Primitive index,
+      ir.Primitive value, SourceInformation sourceInformation) {
     _buildInvokeSuper(method, new Selector.indexSet(),
         <ir.Primitive>[index, value], sourceInformation);
     return value;
@@ -949,21 +913,20 @@
   /// Create a dynamic invocation on [receiver] where the method name and
   /// argument structure are defined by [selector] and the argument values are
   /// defined by [arguments].
-  ir.Primitive buildDynamicInvocation(ir.Primitive receiver,
-                                      Selector selector,
-                                      TypeMask mask,
-                                      List<ir.Primitive> arguments,
-                                      SourceInformation sourceInformation) {
+  ir.Primitive buildDynamicInvocation(
+      ir.Primitive receiver,
+      Selector selector,
+      TypeMask mask,
+      List<ir.Primitive> arguments,
+      SourceInformation sourceInformation) {
     return _buildInvokeDynamic(
         receiver, selector, mask, arguments, sourceInformation);
   }
 
   /// Create a dynamic getter invocation on [receiver] where the getter name is
   /// defined by [selector].
-  ir.Primitive buildDynamicGet(ir.Primitive receiver,
-                               Selector selector,
-                               TypeMask mask,
-                               SourceInformation sourceInformation) {
+  ir.Primitive buildDynamicGet(ir.Primitive receiver, Selector selector,
+      TypeMask mask, SourceInformation sourceInformation) {
     assert(selector.isGetter);
     FieldElement field = program.locateSingleField(selector, mask);
     if (field != null) {
@@ -978,11 +941,8 @@
 
   /// Create a dynamic setter invocation on [receiver] where the setter name and
   /// argument are defined by [selector] and [value], respectively.
-  ir.Primitive buildDynamicSet(ir.Primitive receiver,
-                               Selector selector,
-                               TypeMask mask,
-                               ir.Primitive value,
-                               SourceInformation sourceInformation) {
+  ir.Primitive buildDynamicSet(ir.Primitive receiver, Selector selector,
+      TypeMask mask, ir.Primitive value, SourceInformation sourceInformation) {
     assert(selector.isSetter);
     FieldElement field = program.locateSingleField(selector, mask);
     if (field != null) {
@@ -990,22 +950,22 @@
       // treated as a field access, since the setter might not be emitted.
       buildFieldSet(receiver, field, value, sourceInformation);
     } else {
-      _buildInvokeDynamic(receiver, selector, mask, <ir.Primitive>[value],
-                          sourceInformation);
+      _buildInvokeDynamic(
+          receiver, selector, mask, <ir.Primitive>[value], sourceInformation);
     }
     return value;
   }
 
   /// Create a dynamic index set invocation on [receiver] with the provided
   /// [index] and [value].
-  ir.Primitive buildDynamicIndexSet(ir.Primitive receiver,
-                                    TypeMask mask,
-                                    ir.Primitive index,
-                                    ir.Primitive value,
-                                    SourceInformation sourceInformation) {
-    _buildInvokeDynamic(
-        receiver, new Selector.indexSet(), mask, <ir.Primitive>[index, value],
-        sourceInformation);
+  ir.Primitive buildDynamicIndexSet(
+      ir.Primitive receiver,
+      TypeMask mask,
+      ir.Primitive index,
+      ir.Primitive value,
+      SourceInformation sourceInformation) {
+    _buildInvokeDynamic(receiver, new Selector.indexSet(), mask,
+        <ir.Primitive>[index, value], sourceInformation);
     return value;
   }
 
@@ -1019,42 +979,37 @@
       SourceInformation sourceInformation) {
     // TODO(johnniwinther): Maybe this should have its own ir node.
     return buildCallInvocation(
-        buildLocalGet(function), callStructure, arguments,
-        sourceInformation);
+        buildLocalGet(function), callStructure, arguments, sourceInformation);
   }
 
   /// Create a static invocation of [function].
   ///
   /// The arguments are not named and their values are defined by [arguments].
-  ir.Primitive buildStaticFunctionInvocation(
-      MethodElement function,
-      List<ir.Primitive> arguments,
-      SourceInformation sourceInformation) {
+  ir.Primitive buildStaticFunctionInvocation(MethodElement function,
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     Selector selector = new Selector.call(
         function.memberName, new CallStructure(arguments.length));
     return buildInvokeStatic(function, selector, arguments, sourceInformation);
   }
 
   /// Create a getter invocation of the static [getter].
-  ir.Primitive buildStaticGetterGet(MethodElement getter,
-                                    SourceInformation sourceInformation) {
+  ir.Primitive buildStaticGetterGet(
+      MethodElement getter, SourceInformation sourceInformation) {
     Selector selector = new Selector.getter(getter.memberName);
     return buildInvokeStatic(
         getter, selector, const <ir.Primitive>[], sourceInformation);
   }
 
   /// Create a write access to the static [field] with the [value].
-  ir.Primitive buildStaticFieldSet(FieldElement field,
-                                   ir.Primitive value,
-                                   SourceInformation sourceInformation) {
+  ir.Primitive buildStaticFieldSet(FieldElement field, ir.Primitive value,
+      SourceInformation sourceInformation) {
     addPrimitive(new ir.SetStatic(field, value, sourceInformation));
     return value;
   }
 
   /// Create a setter invocation of the static [setter] with the [value].
-  ir.Primitive buildStaticSetterSet(MethodElement setter,
-                                    ir.Primitive value,
-                                    SourceInformation sourceInformation) {
+  ir.Primitive buildStaticSetterSet(MethodElement setter, ir.Primitive value,
+      SourceInformation sourceInformation) {
     Selector selector = new Selector.setter(setter.memberName);
     buildInvokeStatic(
         setter, selector, <ir.Primitive>[value], sourceInformation);
@@ -1064,23 +1019,18 @@
   /// Create an erroneous invocation where argument structure is defined by
   /// [selector] and the argument values are defined by [arguments].
   // TODO(johnniwinther): Make this more fine-grained.
-  ir.Primitive buildErroneousInvocation(
-      Element element,
-      Selector selector,
-      List<ir.Primitive> arguments,
-      SourceInformation sourceInformation) {
+  ir.Primitive buildErroneousInvocation(Element element, Selector selector,
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     // TODO(johnniwinther): This should have its own ir node.
     return buildInvokeStatic(element, selector, arguments, sourceInformation);
   }
 
   /// Concatenate string values.  The arguments must be strings.
-  ir.Primitive buildStringConcatenation(List<ir.Primitive> arguments,
-                                        SourceInformation sourceInformation) {
+  ir.Primitive buildStringConcatenation(
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     assert(isOpen);
     return addPrimitive(new ir.ApplyBuiltinOperator(
-        ir.BuiltinOperator.StringConcatenate,
-        arguments,
-        sourceInformation));
+        ir.BuiltinOperator.StringConcatenate, arguments, sourceInformation));
   }
 
   /// Create an invocation of the `call` method of [functionExpression], where
@@ -1102,10 +1052,11 @@
   /// An if-then statement is created if [buildElsePart] is a no-op.
   // TODO(johnniwinther): Unify implementation with [buildConditional] and
   // [_buildLogicalOperator].
-  void buildIf(ir.Primitive condition,
-               void buildThenPart(IrBuilder builder),
-               void buildElsePart(IrBuilder builder),
-               SourceInformation sourceInformation) {
+  void buildIf(
+      ir.Primitive condition,
+      void buildThenPart(IrBuilder builder),
+      void buildElsePart(IrBuilder builder),
+      SourceInformation sourceInformation) {
     assert(isOpen);
 
     // The then and else parts are delimited.
@@ -1129,14 +1080,12 @@
         ? <ir.Continuation>[elseContinuation, thenContinuation]
         : <ir.Continuation>[thenContinuation, elseContinuation];
 
-    ir.Expression result =
-        new ir.LetCont.many(arms,
-            new ir.Branch.strict(condition,
-                                 thenContinuation,
-                                 elseContinuation,
-                                 sourceInformation));
+    ir.Expression result = new ir.LetCont.many(
+        arms,
+        new ir.Branch.strict(
+            condition, thenContinuation, elseContinuation, sourceInformation));
 
-    JumpCollector join;  // Null if there is no join.
+    JumpCollector join; // Null if there is no join.
     if (thenBuilder.isOpen && elseBuilder.isOpen) {
       // There is a join-point continuation.  Build the term
       // 'let cont join(x, ...) = [] in Result' and plug invocations of the
@@ -1181,9 +1130,10 @@
 
   void addRecursiveContinuation(BackwardJumpCollector collector) {
     assert(environment.length == collector.environment.length);
-    add(new ir.LetCont(collector.continuation,
-            new ir.InvokeContinuation(collector.continuation,
-                                      environment.index2value)));
+    add(new ir.LetCont(
+        collector.continuation,
+        new ir.InvokeContinuation(
+            collector.continuation, environment.index2value)));
     environment = collector.environment;
   }
 
@@ -1200,14 +1150,15 @@
   ///
   /// [loopVariables] is the list of variables declared in the for-loop
   /// initializer.
-  void buildFor({SubbuildFunction buildInitializer,
-                 SubbuildFunction buildCondition,
-                 SourceInformation conditionSourceInformation,
-                 SubbuildFunction buildBody,
-                 SubbuildFunction buildUpdate,
-                 JumpTarget target,
-                 ClosureScope closureScope,
-                 List<LocalElement> loopVariables}) {
+  void buildFor(
+      {SubbuildFunction buildInitializer,
+      SubbuildFunction buildCondition,
+      SourceInformation conditionSourceInformation,
+      SubbuildFunction buildBody,
+      SubbuildFunction buildUpdate,
+      JumpTarget target,
+      ClosureScope closureScope,
+      List<LocalElement> loopVariables}) {
     assert(isOpen);
 
     // For loops use four named continuations: the entry to the condition,
@@ -1290,8 +1241,8 @@
     // Connect the inner and outer body builders.  This is done only after
     // it is guaranteed that the updateBuilder has a non-empty term.
     if (hasContinues) {
-      outerBodyBuilder.add(new ir.LetCont(continueCollector.continuation,
-          innerBodyBuilder.root));
+      outerBodyBuilder.add(new ir.LetCont(
+          continueCollector.continuation, innerBodyBuilder.root));
       continueCollector.continuation.body = updateBuilder.root;
     } else {
       outerBodyBuilder.add(innerBodyBuilder.root);
@@ -1303,12 +1254,11 @@
     bodyContinuation.body = outerBodyBuilder.root;
     // Note the order of continuations: the first one is the one that will
     // be filled by LetCont.plug.
-    ir.LetCont branch =
-        new ir.LetCont.two(exitContinuation, bodyContinuation,
-            new ir.Branch.strict(condition,
-                                 bodyContinuation,
-                                 exitContinuation,
-                                 conditionSourceInformation));
+    ir.LetCont branch = new ir.LetCont.two(
+        exitContinuation,
+        bodyContinuation,
+        new ir.Branch.strict(condition, bodyContinuation, exitContinuation,
+            conditionSourceInformation));
     // If there are breaks in the body, then there must be a join-point
     // continuation for the normal exit and the breaks.  Otherwise, the
     // successor is translated in the hole in the exit continuation.
@@ -1342,22 +1292,23 @@
   /// [buildBody] creates the body, `b`, of the loop. The jump [target] is used
   /// to identify which `break` and `continue` statements that have this for-in
   /// statement as their target.
-  void buildForIn({SubbuildFunction buildExpression,
-                   SubbuildFunction buildVariableDeclaration,
-                   Element variableElement,
-                   Selector variableSelector,
-                   TypeMask variableMask,
-                   SourceInformation variableSetSourceInformation,
-                   TypeMask currentMask,
-                   SourceInformation currentSourceInformation,
-                   TypeMask iteratorMask,
-                   SourceInformation iteratorSourceInformation,
-                   TypeMask moveNextMask,
-                   SourceInformation moveNextSourceInformation,
-                   SubbuildFunction buildBody,
-                   JumpTarget target,
-                   ClosureScope closureScope,
-                   SourceInformation conditionSourceInformation}) {
+  void buildForIn(
+      {SubbuildFunction buildExpression,
+      SubbuildFunction buildVariableDeclaration,
+      Element variableElement,
+      Selector variableSelector,
+      TypeMask variableMask,
+      SourceInformation variableSetSourceInformation,
+      TypeMask currentMask,
+      SourceInformation currentSourceInformation,
+      TypeMask iteratorMask,
+      SourceInformation iteratorSourceInformation,
+      TypeMask moveNextMask,
+      SourceInformation moveNextSourceInformation,
+      SubbuildFunction buildBody,
+      JumpTarget target,
+      ClosureScope closureScope,
+      SourceInformation conditionSourceInformation}) {
     // The for-in loop
     //
     // for (a in e) s;
@@ -1377,11 +1328,8 @@
     // in expressionReceiver.iterator () iteratorInvoked
     ir.Primitive expressionReceiver = buildExpression(this);
     List<ir.Primitive> emptyArguments = <ir.Primitive>[];
-    ir.Primitive iterator = addPrimitive(
-        new ir.InvokeMethod(expressionReceiver,
-            Selectors.iterator,
-            iteratorMask,
-            emptyArguments));
+    ir.Primitive iterator = addPrimitive(new ir.InvokeMethod(
+        expressionReceiver, Selectors.iterator, iteratorMask, emptyArguments));
 
     // Fill with:
     // let cont loop(x, ...) =
@@ -1391,11 +1339,8 @@
     // in loop(v, ...)
     JumpCollector loop = new BackwardJumpCollector(environment, target: target);
     addRecursiveContinuation(loop);
-    ir.Primitive condition = addPrimitive(
-        new ir.InvokeMethod(iterator,
-            Selectors.moveNext,
-            moveNextMask,
-            emptyArguments));
+    ir.Primitive condition = addPrimitive(new ir.InvokeMethod(
+        iterator, Selectors.moveNext, moveNextMask, emptyArguments));
 
     // As a delimited term, build:
     // <<BODY>> =
@@ -1410,38 +1355,31 @@
     if (buildVariableDeclaration != null) {
       buildVariableDeclaration(bodyBuilder);
     }
-    ir.Primitive currentValue = bodyBuilder.addPrimitive(
-        new ir.InvokeMethod(
-            iterator,
-            Selectors.current,
-            currentMask,
-            emptyArguments,
-            sourceInformation: currentSourceInformation));
+    ir.Primitive currentValue = bodyBuilder.addPrimitive(new ir.InvokeMethod(
+        iterator, Selectors.current, currentMask, emptyArguments,
+        sourceInformation: currentSourceInformation));
     // TODO(johnniwinther): Extract this as a provided strategy.
     if (Elements.isLocal(variableElement)) {
       bodyBuilder.buildLocalVariableSet(
-          variableElement,
-          currentValue,
-          variableSetSourceInformation);
+          variableElement, currentValue, variableSetSourceInformation);
     } else if (Elements.isError(variableElement) ||
-               Elements.isMalformed(variableElement)) {
+        Elements.isMalformed(variableElement)) {
       Selector selector = new Selector.setter(
           new Name(variableElement.name, variableElement.library));
       List<ir.Primitive> value = <ir.Primitive>[currentValue];
       // Note the comparison below.  It can be the case that an element isError
       // and isMalformed.
       if (Elements.isError(variableElement)) {
-        bodyBuilder.buildStaticNoSuchMethod(selector, value,
-            variableSetSourceInformation);
+        bodyBuilder.buildStaticNoSuchMethod(
+            selector, value, variableSetSourceInformation);
       } else {
         bodyBuilder.buildErroneousInvocation(
             variableElement, selector, value, variableSetSourceInformation);
       }
     } else if (Elements.isStaticOrTopLevel(variableElement)) {
       if (variableElement.isField) {
-        bodyBuilder.addPrimitive(
-            new ir.SetStatic(
-                variableElement, currentValue, variableSetSourceInformation));
+        bodyBuilder.addPrimitive(new ir.SetStatic(
+            variableElement, currentValue, variableSetSourceInformation));
       } else {
         bodyBuilder.buildStaticSetterSet(
             variableElement, currentValue, variableSetSourceInformation);
@@ -1449,9 +1387,8 @@
     } else {
       ir.Primitive receiver = bodyBuilder.buildThis();
       assert(receiver != null);
-      bodyBuilder.buildDynamicSet(
-          receiver, variableSelector, variableMask, currentValue,
-          variableSetSourceInformation);
+      bodyBuilder.buildDynamicSet(receiver, variableSelector, variableMask,
+          currentValue, variableSetSourceInformation);
     }
 
     // Translate the body in the hole in the delimited term above, and add
@@ -1477,12 +1414,11 @@
     bodyContinuation.body = bodyBuilder.root;
     // Note the order of continuations: the first one is the one that will
     // be filled by LetCont.plug.
-    ir.LetCont branch =
-        new ir.LetCont.two(exitContinuation, bodyContinuation,
-            new ir.Branch.strict(condition,
-                                 bodyContinuation,
-                                 exitContinuation,
-                                 conditionSourceInformation));
+    ir.LetCont branch = new ir.LetCont.two(
+        exitContinuation,
+        bodyContinuation,
+        new ir.Branch.strict(condition, bodyContinuation, exitContinuation,
+            conditionSourceInformation));
     // If there are breaks in the body, then there must be a join-point
     // continuation for the normal exit and the breaks.  Otherwise, the
     // successor is translated in the hole in the exit continuation.
@@ -1505,11 +1441,12 @@
   ///
   /// The jump [target] is used to identify which `break` and `continue`
   /// statements that have this `while` statement as their target.
-  void buildWhile({SubbuildFunction buildCondition,
-                   SubbuildFunction buildBody,
-                   JumpTarget target,
-                   ClosureScope closureScope,
-                   SourceInformation sourceInformation}) {
+  void buildWhile(
+      {SubbuildFunction buildCondition,
+      SubbuildFunction buildBody,
+      JumpTarget target,
+      ClosureScope closureScope,
+      SourceInformation sourceInformation}) {
     assert(isOpen);
     // While loops use four named continuations: the entry to the body, the
     // loop exit, the loop back edge (continue), and the loop exit (break).
@@ -1554,12 +1491,11 @@
     bodyContinuation.body = bodyBuilder.root;
     // Note the order of continuations: the first one is the one that will
     // be filled by LetCont.plug.
-    ir.LetCont branch =
-        new ir.LetCont.two(exitContinuation, bodyContinuation,
-            new ir.Branch.strict(condition,
-                                 bodyContinuation,
-                                 exitContinuation,
-                                 sourceInformation));
+    ir.LetCont branch = new ir.LetCont.two(
+        exitContinuation,
+        bodyContinuation,
+        new ir.Branch.strict(
+            condition, bodyContinuation, exitContinuation, sourceInformation));
     // If there are breaks in the body, then there must be a join-point
     // continuation for the normal exit and the breaks.  Otherwise, the
     // successor is translated in the hole in the exit continuation.
@@ -1577,7 +1513,6 @@
     }
   }
 
-
   /// Creates a do-while loop.
   ///
   /// The body and condition are created by [buildBody] and [buildCondition].
@@ -1585,11 +1520,12 @@
   /// statements in the body that have the loop as their target.
   /// [closureScope] contains all the variables declared in the loop (but not
   /// declared in some inner closure scope).
-  void buildDoWhile({SubbuildFunction buildBody,
-                     SubbuildFunction buildCondition,
-                     JumpTarget target,
-                     ClosureScope closureScope,
-                     SourceInformation sourceInformation}) {
+  void buildDoWhile(
+      {SubbuildFunction buildBody,
+      SubbuildFunction buildCondition,
+      JumpTarget target,
+      ClosureScope closureScope,
+      SourceInformation sourceInformation}) {
     assert(isOpen);
     // The CPS translation of [[do body; while (condition); successor]] is:
     //
@@ -1642,12 +1578,11 @@
     repeatBuilder.jumpTo(loop);
     repeatContinuation.body = repeatBuilder.root;
 
-    continueBuilder.add(
-        new ir.LetCont.two(exitContinuation, repeatContinuation,
-            new ir.Branch.strict(condition,
-                                 repeatContinuation,
-                                 exitContinuation,
-                                 sourceInformation)));
+    continueBuilder.add(new ir.LetCont.two(
+        exitContinuation,
+        repeatContinuation,
+        new ir.Branch.strict(condition, repeatContinuation, exitContinuation,
+            sourceInformation)));
     continueCollector.continuation.body = continueBuilder.root;
 
     // Construct the loop continuation (i.e., the body and condition).
@@ -1655,18 +1590,16 @@
     // let cont continue(x, ...) =
     //   <Continue>
     // in [[body]]; continue(v, ...)
-    loopBuilder.add(
-        new ir.LetCont(continueCollector.continuation,
-            bodyBuilder.root));
+    loopBuilder
+        .add(new ir.LetCont(continueCollector.continuation, bodyBuilder.root));
 
     // And tie it all together.
     add(new ir.LetCont(breakCollector.continuation, loopBuilder.root));
     environment = breakCollector.environment;
   }
 
-  void buildSimpleSwitch(JumpCollector join,
-                         List<SwitchCaseInfo> cases,
-                         SubbuildFunction buildDefaultBody) {
+  void buildSimpleSwitch(JumpCollector join, List<SwitchCaseInfo> cases,
+      SubbuildFunction buildDefaultBody) {
     IrBuilder casesBuilder = makeDelimitedBuilder();
     for (SwitchCaseInfo caseInfo in cases) {
       ir.Primitive condition = caseInfo.buildCondition(casesBuilder);
@@ -1678,12 +1611,11 @@
       // A LetCont.two term has a hole as the body of the first listed
       // continuation, to be plugged by the translation.  Therefore put the
       // else continuation first.
-      casesBuilder.add(
-          new ir.LetCont.two(elseContinuation, thenContinuation,
-              new ir.Branch.strict(condition,
-                                   thenContinuation,
-                                   elseContinuation,
-                                   caseInfo.sourceInformation)));
+      casesBuilder.add(new ir.LetCont.two(
+          elseContinuation,
+          thenContinuation,
+          new ir.Branch.strict(condition, thenContinuation, elseContinuation,
+              caseInfo.sourceInformation)));
     }
 
     if (buildDefaultBody == null) {
@@ -1715,13 +1647,14 @@
   ///
   /// Please see the function's implementation for where these functions are
   /// called.
-  void _helpBuildTryCatch(TryStatementInfo variables,
+  void _helpBuildTryCatch(
+      TryStatementInfo variables,
       void enterTry(IrBuilder builder),
       SubbuildFunction buildTryBlock,
       void leaveTry(IrBuilder builder),
       List<ir.Parameter> buildCatch(IrBuilder builder, JumpCollector join),
-      void leaveTryCatch(IrBuilder builder, JumpCollector join,
-          ir.Expression body)) {
+      void leaveTryCatch(
+          IrBuilder builder, JumpCollector join, ir.Expression body)) {
     JumpCollector join = new ForwardJumpCollector(environment);
     IrBuilder tryCatchBuilder = makeDelimitedBuilder();
 
@@ -1759,8 +1692,7 @@
     List<ir.Parameter> catchParameters = buildCatch(catchBuilder, join);
     ir.Continuation catchContinuation = new ir.Continuation(catchParameters);
     catchContinuation.body = catchBuilder.root;
-    tryCatchBuilder.add(
-        new ir.LetHandler(catchContinuation, tryBuilder.root));
+    tryCatchBuilder.add(new ir.LetHandler(catchContinuation, tryBuilder.root));
 
     leaveTryCatch(this, join, tryCatchBuilder.root);
   }
@@ -1772,9 +1704,8 @@
   /// [buildTryBlock] builds the try block.
   /// [catchClauseInfos] provides access to the catch type, exception variable,
   /// and stack trace variable, and a function for building the catch block.
-  void buildTryCatch(TryStatementInfo variables,
-                     SubbuildFunction buildTryBlock,
-                     List<CatchClauseInfo> catchClauseInfos) {
+  void buildTryCatch(TryStatementInfo variables, SubbuildFunction buildTryBlock,
+      List<CatchClauseInfo> catchClauseInfos) {
     assert(isOpen);
     // Catch handlers are in scope for their body.  The CPS translation of
     // [[try tryBlock catch (ex, st) catchBlock; successor]] is:
@@ -1828,8 +1759,7 @@
       restoreJump(builder.state.returnCollector);
     }
 
-    List<ir.Parameter> buildCatch(IrBuilder builder,
-                                  JumpCollector join) {
+    List<ir.Parameter> buildCatch(IrBuilder builder, JumpCollector join) {
       // Translate the catch clauses.  Multiple clauses are translated as if
       // they were explicitly cascaded if/else type tests.
 
@@ -1871,9 +1801,8 @@
 
       // Expand multiple catch clauses into an explicit if/then/else.  Iterate
       // them in reverse so the current block becomes the next else block.
-      ir.Expression catchBody = (catchAll == null)
-          ? new ir.Rethrow()
-          : buildCatchClause(catchAll);
+      ir.Expression catchBody =
+          (catchAll == null) ? new ir.Rethrow() : buildCatchClause(catchAll);
       for (CatchClauseInfo clause in catchClauseInfos.reversed) {
         ir.Continuation thenContinuation = new ir.Continuation([]);
         ir.Continuation elseContinuation = new ir.Continuation([]);
@@ -1884,16 +1813,14 @@
         // environment with the nested builder because this part cannot mutate
         // it.
         IrBuilder checkBuilder = builder.makeDelimitedBuilder(environment);
-        ir.Primitive typeMatches =
-            checkBuilder.buildTypeOperator(exceptionParameter,
-                clause.type,
-                clause.sourceInformation,
-                isTypeTest: true);
-        checkBuilder.add(new ir.LetCont.two(thenContinuation, elseContinuation,
-            new ir.Branch.strict(typeMatches,
-                                 thenContinuation,
-                                 elseContinuation,
-                                 clause.sourceInformation)));
+        ir.Primitive typeMatches = checkBuilder.buildTypeOperator(
+            exceptionParameter, clause.type, clause.sourceInformation,
+            isTypeTest: true);
+        checkBuilder.add(new ir.LetCont.two(
+            thenContinuation,
+            elseContinuation,
+            new ir.Branch.strict(typeMatches, thenContinuation,
+                elseContinuation, clause.sourceInformation)));
         catchBody = checkBuilder.root;
       }
       builder.add(catchBody);
@@ -1901,16 +1828,16 @@
       return <ir.Parameter>[exceptionParameter, traceParameter];
     }
 
-    void leaveTryCatch(IrBuilder builder, JumpCollector join,
-                       ir.Expression body) {
+    void leaveTryCatch(
+        IrBuilder builder, JumpCollector join, ir.Expression body) {
       // Add the binding for the join-point continuation and continue the
       // translation in its body.
       builder.add(new ir.LetCont(join.continuation, body));
       builder.environment = join.environment;
     }
 
-    _helpBuildTryCatch(variables, enterTry, buildTryBlock, leaveTry,
-        buildCatch, leaveTryCatch);
+    _helpBuildTryCatch(variables, enterTry, buildTryBlock, leaveTry, buildCatch,
+        leaveTryCatch);
   }
 
   /// Translates a try/finally.
@@ -1920,8 +1847,7 @@
   /// [buildTryBlock] builds the try block.
   /// [buildFinallyBlock] builds the finally block.
   void buildTryFinally(TryStatementInfo variables,
-                       SubbuildFunction buildTryBlock,
-                       SubbuildFunction buildFinallyBlock) {
+      SubbuildFunction buildTryBlock, SubbuildFunction buildFinallyBlock) {
     assert(isOpen);
     // Try/finally is implemented in terms of try/catch and by duplicating the
     // code for finally at all exits.  The encoding is:
@@ -1952,13 +1878,13 @@
       savedContinues = builder.state.continueCollectors;
       savedReturn = builder.state.returnCollector;
 
-      builder.state.breakCollectors = newBreaks =
-          savedBreaks.map(interceptJump).toList();
-      builder.state.continueCollectors = newContinues =
-          savedContinues.map(interceptJump).toList();
+      builder.state.breakCollectors =
+          newBreaks = savedBreaks.map(interceptJump).toList();
+      builder.state.continueCollectors =
+          newContinues = savedContinues.map(interceptJump).toList();
       builder.state.returnCollector = newReturn =
           new ForwardJumpCollector(environment, hasExtraArgument: true)
-              ..enterTry(variables.boxedOnEntry);
+            ..enterTry(variables.boxedOnEntry);
     }
 
     void leaveTry(IrBuilder builder) {
@@ -1976,8 +1902,7 @@
       builder.state.returnCollector = savedReturn;
     }
 
-    List<ir.Parameter> buildCatch(IrBuilder builder,
-                                  JumpCollector join) {
+    List<ir.Parameter> buildCatch(IrBuilder builder, JumpCollector join) {
       // The catch block of the try/catch used for try/finally is the finally
       // code followed by a rethrow.
       buildFinallyBlock(builder);
@@ -1988,13 +1913,13 @@
       return <ir.Parameter>[new ir.Parameter(null), new ir.Parameter(null)];
     }
 
-    void leaveTryCatch(IrBuilder builder, JumpCollector join,
-                       ir.Expression body) {
+    void leaveTryCatch(
+        IrBuilder builder, JumpCollector join, ir.Expression body) {
       // Build a list of continuations for jumps from the try block and
       // duplicate the finally code before jumping to the actual target.
       List<ir.Continuation> exits = <ir.Continuation>[join.continuation];
-      void addJump(JumpCollector newCollector,
-                   JumpCollector originalCollector) {
+      void addJump(
+          JumpCollector newCollector, JumpCollector originalCollector) {
         if (newCollector.isEmpty) return;
         IrBuilder builder = makeDelimitedBuilder(newCollector.environment);
         buildFinallyBlock(builder);
@@ -2021,8 +1946,8 @@
       buildFinallyBlock(builder);
     }
 
-    _helpBuildTryCatch(variables, enterTry, buildTryBlock, leaveTry,
-        buildCatch, leaveTryCatch);
+    _helpBuildTryCatch(variables, enterTry, buildTryBlock, leaveTry, buildCatch,
+        leaveTryCatch);
   }
 
   /// Create a return statement `return value;` or `return;` if [value] is
@@ -2041,16 +1966,14 @@
 
   /// Generate the body for a native function [function] that is annotated with
   /// an implementation in JavaScript (provided as string in [javaScriptCode]).
-  void buildNativeFunctionBody(
-      FunctionElement function,
-      String javaScriptCode,
+  void buildNativeFunctionBody(FunctionElement function, String javaScriptCode,
       SourceInformation sourceInformation) {
     NativeBehavior behavior = new NativeBehavior();
     behavior.sideEffects.setAllSideEffects();
     // Generate a [ForeignCode] statement from the given native code.
     buildForeignCode(
-        js.js.statementTemplateYielding(
-            new js.LiteralStatement(javaScriptCode)),
+        js.js
+            .statementTemplateYielding(new js.LiteralStatement(javaScriptCode)),
         <ir.Primitive>[],
         behavior,
         sourceInformation);
@@ -2062,9 +1985,8 @@
   /// Generates a call to the real target, which is given by [functions]'s
   /// `fixedBackendName`, passing all parameters as arguments.  The target can
   /// be the JavaScript implementation of a function, getter, or setter.
-  void buildRedirectingNativeFunctionBody(FunctionElement function,
-                                          String name,
-                                          SourceInformation sourceInformation) {
+  void buildRedirectingNativeFunctionBody(FunctionElement function, String name,
+      SourceInformation sourceInformation) {
     List<ir.Primitive> arguments = <ir.Primitive>[];
     NativeBehavior behavior = new NativeBehavior();
     behavior.sideEffects.setAllSideEffects();
@@ -2084,9 +2006,8 @@
         // The parameter type is a function type either directly or through
         // typedef(s).
         ir.Constant arity = buildIntegerConstant(type.computeArity());
-        input = buildStaticFunctionInvocation(
-            program.closureConverter, <ir.Primitive>[input, arity],
-            sourceInformation);
+        input = buildStaticFunctionInvocation(program.closureConverter,
+            <ir.Primitive>[input, arity], sourceInformation);
       }
       arguments.add(input);
       argumentTemplates.add('#');
@@ -2115,10 +2036,8 @@
       !(value is ir.Constant && value.value.isNull);
 
   /// Builds a call to a resolved js-interop element.
-  ir.Primitive buildInvokeJsInteropMember(
-      FunctionElement element,
-      List<ir.Primitive> arguments,
-      SourceInformation sourceInformation) {
+  ir.Primitive buildInvokeJsInteropMember(FunctionElement element,
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     program.addNativeMethod(element);
     String target = program.getJsInteropTargetPath(element);
     // Strip off trailing arguments that were not specified.
@@ -2128,8 +2047,9 @@
     var inputs = arguments.where(_isNotNull).toList();
 
     var behavior = new NativeBehavior()..sideEffects.setAllSideEffects();
-    DartType type = element.isConstructor ?
-        element.enclosingClass.thisType : element.type.returnType;
+    DartType type = element.isConstructor
+        ? element.enclosingClass.thisType
+        : element.type.returnType;
     // Native behavior effects here are similar to native/behavior.dart.
     // The return type is dynamic if we don't trust js-interop type
     // declarations.
@@ -2144,7 +2064,8 @@
 
     // It also includes any other JS interop type if we don't trust the
     // annotation or if is declared too broad.
-    if (!program.trustJSInteropTypeAnnotations || type.isObject ||
+    if (!program.trustJSInteropTypeAnnotations ||
+        type.isObject ||
         type.isDynamic) {
       behavior.typesInstantiated.add(program.jsJavascriptObjectType);
     }
@@ -2158,17 +2079,15 @@
       var args = new List.filled(inputs.length, '#').join(',');
       code = element.isConstructor ? "new $target($args)" : "$target($args)";
     }
-    return buildForeignCode(js.js.parseForeignJS(code),
-        inputs, behavior, sourceInformation);
+    return buildForeignCode(
+        js.js.parseForeignJS(code), inputs, behavior, sourceInformation);
     // TODO(sigmund): should we record the source-information here?
   }
 
   /// Builds an object literal that results from invoking a factory constructor
   /// of a js-interop anonymous type.
-  ir.Primitive buildJsInteropObjectLiteral(
-      ConstructorElement constructor,
-      List<ir.Primitive> arguments,
-      SourceInformation sourceInformation) {
+  ir.Primitive buildJsInteropObjectLiteral(ConstructorElement constructor,
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     assert(program.isJsInteropAnonymous(constructor));
     program.addNativeMethod(constructor);
     FunctionSignature params = constructor.functionSignature;
@@ -2178,7 +2097,7 @@
     params.orderedForEachParameter((ParameterElement parameter) {
       // TODO(jacobr): throw if parameter names do not match names of property
       // names in the class.
-      assert (parameter.isNamed);
+      assert(parameter.isNamed);
       ir.Primitive argument = arguments[i++];
       if (_isNotNull(argument)) {
         filteredArguments.add(argument);
@@ -2220,8 +2139,7 @@
   }
 
   /// Creates a labeled statement
-  void buildLabeledStatement({SubbuildFunction buildBody,
-                              JumpTarget target}) {
+  void buildLabeledStatement({SubbuildFunction buildBody, JumpTarget target}) {
     JumpCollector join = new ForwardJumpCollector(environment, target: target);
     IrBuilder innerBuilder = makeDelimitedBuilder();
     innerBuilder.state.breakCollectors.add(join);
@@ -2257,8 +2175,8 @@
     return buildJumpInternal(target, state.continueCollectors);
   }
 
-  bool buildJumpInternal(JumpTarget target,
-                         Iterable<JumpCollector> collectors) {
+  bool buildJumpInternal(
+      JumpTarget target, Iterable<JumpCollector> collectors) {
     assert(isOpen);
     for (JumpCollector collector in collectors) {
       if (target == collector.target) {
@@ -2291,8 +2209,7 @@
 
   /// Create a negation of [condition].
   ir.Primitive buildNegation(
-      ir.Primitive condition,
-      SourceInformation sourceInformation) {
+      ir.Primitive condition, SourceInformation sourceInformation) {
     // ! e is translated as e ? false : true
 
     // Add a continuation parameter for the result of the expression.
@@ -2310,16 +2227,17 @@
     ir.Constant falseConstant = makeBoolConstant(false);
 
     thenContinuation.body = new ir.LetPrim(falseConstant)
-        ..plug(new ir.InvokeContinuation(joinContinuation, [falseConstant]));
+      ..plug(new ir.InvokeContinuation(joinContinuation, [falseConstant]));
     elseContinuation.body = new ir.LetPrim(trueConstant)
-        ..plug(new ir.InvokeContinuation(joinContinuation, [trueConstant]));
+      ..plug(new ir.InvokeContinuation(joinContinuation, [trueConstant]));
 
-    add(new ir.LetCont(joinContinuation,
-          new ir.LetCont.two(thenContinuation, elseContinuation,
-              new ir.Branch.strict(condition,
-                                   thenContinuation,
-                                   elseContinuation,
-                                   sourceInformation))));
+    add(new ir.LetCont(
+        joinContinuation,
+        new ir.LetCont.two(
+            thenContinuation,
+            elseContinuation,
+            new ir.Branch.strict(condition, thenContinuation, elseContinuation,
+                sourceInformation))));
     return resultParameter;
   }
 
@@ -2376,12 +2294,11 @@
     rightTrueContinuation.body = rightTrueBuilder.root;
     rightFalseContinuation.body = rightFalseBuilder.root;
     // The right subexpression has two continuations.
-    rightBuilder.add(
-        new ir.LetCont.two(rightTrueContinuation, rightFalseContinuation,
-            new ir.Branch.strict(rightValue,
-                                 rightTrueContinuation,
-                                 rightFalseContinuation,
-                                 sourceInformation)));
+    rightBuilder.add(new ir.LetCont.two(
+        rightTrueContinuation,
+        rightFalseContinuation,
+        new ir.Branch.strict(rightValue, rightTrueContinuation,
+            rightFalseContinuation, sourceInformation)));
     // Depending on the operator, the left subexpression's continuations are
     // either the right subexpression or an invocation of the join-point
     // continuation.
@@ -2393,21 +2310,21 @@
       leftFalseContinuation.body = emptyBuilder.root;
     }
 
-    add(new ir.LetCont(join.continuation,
-            new ir.LetCont.two(leftTrueContinuation, leftFalseContinuation,
-                new ir.Branch.strict(leftValue,
-                                     leftTrueContinuation,
-                                     leftFalseContinuation,
-                                     sourceInformation))));
+    add(new ir.LetCont(
+        join.continuation,
+        new ir.LetCont.two(
+            leftTrueContinuation,
+            leftFalseContinuation,
+            new ir.Branch.strict(leftValue, leftTrueContinuation,
+                leftFalseContinuation, sourceInformation))));
     environment = join.environment;
     return environment.discard(1);
   }
 
   ir.Primitive buildIdentical(ir.Primitive x, ir.Primitive y,
-                              {SourceInformation sourceInformation}) {
+      {SourceInformation sourceInformation}) {
     return addPrimitive(new ir.ApplyBuiltinOperator(
-        ir.BuiltinOperator.Identical, <ir.Primitive>[x, y],
-        sourceInformation));
+        ir.BuiltinOperator.Identical, <ir.Primitive>[x, y], sourceInformation));
   }
 
   /// Called when entering a nested function with free variables.
@@ -2428,8 +2345,8 @@
       } else {
         // Unboxed variables are loaded from the function object immediately.
         // This includes BoxLocals which are themselves unboxed variables.
-        environment.extend(local,
-            addPrimitive(new ir.GetField(thisPrim, location.field)));
+        environment.extend(
+            local, addPrimitive(new ir.GetField(thisPrim, location.field)));
       }
     });
 
@@ -2482,9 +2399,7 @@
     ClosureLocation location = state.boxedVariables[parameterElement];
     if (location != null) {
       addPrimitive(new ir.SetField(
-          environment.lookup(location.box),
-          location.field,
-          parameter));
+          environment.lookup(location.box), location.field, parameter));
     } else {
       environment.extend(parameterElement, parameter);
     }
@@ -2499,7 +2414,7 @@
   }
 
   void declareLocalVariable(LocalElement variableElement,
-                            {ir.Primitive initialValue}) {
+      {ir.Primitive initialValue}) {
     assert(isOpen);
     if (initialValue == null) {
       initialValue = buildNullConstant();
@@ -2507,13 +2422,9 @@
     ClosureLocation location = state.boxedVariables[variableElement];
     if (location != null) {
       addPrimitive(new ir.SetField(
-          environment.lookup(location.box),
-          location.field,
-          initialValue));
+          environment.lookup(location.box), location.field, initialValue));
     } else if (isInMutableVariable(variableElement)) {
-      add(new ir.LetMutable(
-          getMutableVariable(variableElement),
-          initialValue));
+      add(new ir.LetMutable(getMutableVariable(variableElement), initialValue));
     } else {
       initialValue.useElementAsHint(variableElement);
       environment.extend(variableElement, initialValue);
@@ -2521,16 +2432,17 @@
   }
 
   /// Add [functionElement] to the environment with provided [definition].
-  void declareLocalFunction(LocalFunctionElement functionElement,
-                            closure.ClosureClassElement classElement,
-                            SourceInformation sourceInformation) {
+  void declareLocalFunction(
+      LocalFunctionElement functionElement,
+      closure.ClosureClassElement classElement,
+      SourceInformation sourceInformation) {
     ir.Primitive closure =
-         buildFunctionExpression(classElement, sourceInformation);
+        buildFunctionExpression(classElement, sourceInformation);
     declareLocalVariable(functionElement, initialValue: closure);
   }
 
   ir.Primitive buildFunctionExpression(closure.ClosureClassElement classElement,
-                                       SourceInformation sourceInformation) {
+      SourceInformation sourceInformation) {
     List<ir.Primitive> arguments = <ir.Primitive>[];
     for (closure.ClosureFieldElement field in classElement.closureFields) {
       // Captured 'this' and type variables are not always available as locals
@@ -2552,22 +2464,19 @@
 
   /// Create a read access of [local] function, variable, or parameter.
   // TODO(johnniwinther): Make [sourceInformation] mandatory.
-  ir.Primitive buildLocalGet(
-      LocalElement local,
+  ir.Primitive buildLocalGet(LocalElement local,
       {SourceInformation sourceInformation}) {
     assert(isOpen);
     ClosureLocation location = state.boxedVariables[local];
     if (location != null) {
       ir.Primitive result = new ir.GetField(
-          environment.lookup(location.box),
-          location.field,
+          environment.lookup(location.box), location.field,
           sourceInformation: sourceInformation);
       result.useElementAsHint(local);
       return addPrimitive(result);
     } else if (isInMutableVariable(local)) {
-      return addPrimitive(
-          new ir.GetMutable(
-              getMutableVariable(local), sourceInformation: sourceInformation));
+      return addPrimitive(new ir.GetMutable(getMutableVariable(local),
+          sourceInformation: sourceInformation));
     } else {
       return environment.lookup(local);
     }
@@ -2575,22 +2484,16 @@
 
   /// Create a write access to [local] variable or parameter with the provided
   /// [value].
-  ir.Primitive buildLocalVariableSet(
-      LocalElement local,
-      ir.Primitive value,
+  ir.Primitive buildLocalVariableSet(LocalElement local, ir.Primitive value,
       SourceInformation sourceInformation) {
     assert(isOpen);
     ClosureLocation location = state.boxedVariables[local];
     if (location != null) {
       addPrimitive(new ir.SetField(
-          environment.lookup(location.box),
-          location.field,
-          value,
+          environment.lookup(location.box), location.field, value,
           sourceInformation: sourceInformation));
     } else if (isInMutableVariable(local)) {
-      addPrimitive(new ir.SetMutable(
-          getMutableVariable(local),
-          value,
+      addPrimitive(new ir.SetMutable(getMutableVariable(local), value,
           sourceInformation: sourceInformation));
     } else {
       value.useElementAsHint(local);
@@ -2603,8 +2506,8 @@
   ///
   /// The loop variables will subsequently be declared using
   /// [declareLocalVariable].
-  void _enterForLoopInitializer(ClosureScope scope,
-                                List<LocalElement> loopVariables) {
+  void _enterForLoopInitializer(
+      ClosureScope scope, List<LocalElement> loopVariables) {
     if (scope == null) return;
     // If there are no boxed loop variables, don't create the box here, let
     // it be created inside the body instead.
@@ -2613,8 +2516,7 @@
   }
 
   /// Called before building the body of a for-loop.
-  void _enterForLoopBody(ClosureScope scope,
-                         List<LocalElement> loopVariables) {
+  void _enterForLoopBody(ClosureScope scope, List<LocalElement> loopVariables) {
     if (scope == null) return;
     // If there are boxed loop variables, the box has already been created
     // at the initializer.
@@ -2623,8 +2525,8 @@
   }
 
   /// Called before building the update of a for-loop.
-  void _enterForLoopUpdate(ClosureScope scope,
-                           List<LocalElement> loopVariables) {
+  void _enterForLoopUpdate(
+      ClosureScope scope, List<LocalElement> loopVariables) {
     if (scope == null) return;
     // If there are no boxed loop variables, then the box is created inside the
     // body, so there is no need to explicitly renew it.
@@ -2650,38 +2552,29 @@
     return state.thisParameter;
   }
 
-  ir.Primitive buildFieldGet(
-      ir.Primitive receiver,
-      FieldElement target,
+  ir.Primitive buildFieldGet(ir.Primitive receiver, FieldElement target,
       SourceInformation sourceInformation) {
     return addPrimitive(new ir.GetField(receiver, target,
         sourceInformation: sourceInformation,
         isFinal: program.fieldNeverChanges(target)));
   }
 
-  void buildFieldSet(ir.Primitive receiver,
-                     FieldElement target,
-                     ir.Primitive value,
-                     SourceInformation sourceInformation) {
-    addPrimitive(new ir.SetField(
-        receiver, target, value, sourceInformation: sourceInformation));
+  void buildFieldSet(ir.Primitive receiver, FieldElement target,
+      ir.Primitive value, SourceInformation sourceInformation) {
+    addPrimitive(new ir.SetField(receiver, target, value,
+        sourceInformation: sourceInformation));
   }
 
   ir.Primitive buildSuperFieldGet(
-      FieldElement target,
-      SourceInformation sourceInformation) {
-    return addPrimitive(
-        new ir.GetField(
-            buildThis(), target, sourceInformation: sourceInformation));
+      FieldElement target, SourceInformation sourceInformation) {
+    return addPrimitive(new ir.GetField(buildThis(), target,
+        sourceInformation: sourceInformation));
   }
 
-  ir.Primitive buildSuperFieldSet(
-      FieldElement target,
-      ir.Primitive value,
+  ir.Primitive buildSuperFieldSet(FieldElement target, ir.Primitive value,
       SourceInformation sourceInformation) {
-    addPrimitive(
-        new ir.SetField(
-            buildThis(), target, value, sourceInformation: sourceInformation));
+    addPrimitive(new ir.SetField(buildThis(), target, value,
+        sourceInformation: sourceInformation));
     return value;
   }
 
@@ -2690,8 +2583,8 @@
   /// The header for a constructor body differs from other functions in that
   /// some parameters are already boxed, and the box is passed as an argument
   /// instead of being created in the header.
-  void buildConstructorBodyHeader(Iterable<Local> parameters,
-                                  ClosureScope closureScope) {
+  void buildConstructorBodyHeader(
+      Iterable<Local> parameters, ClosureScope closureScope) {
     _createThisParameter();
     for (Local param in parameters) {
       ir.Parameter parameter = _createLocalParameter(param);
@@ -2731,8 +2624,7 @@
             ? buildNullConstant()
             : buildTypeExpression(argument);
       });
-      arguments = new List<ir.Primitive>.from(arguments)
-          ..addAll(typeArguments);
+      arguments = new List<ir.Primitive>.from(arguments)..addAll(typeArguments);
     }
     return addPrimitive(new ir.InvokeConstructor(
         type, element, selector, arguments, sourceInformation,
@@ -2749,8 +2641,8 @@
         ir.Primitive value = buildTypeVariableAccess(variable);
         arguments.add(value);
       });
-      return addPrimitive(new ir.TypeExpression(ir.TypeExpressionKind.COMPLETE,
-                                                type, arguments));
+      return addPrimitive(new ir.TypeExpression(
+          ir.TypeExpressionKind.COMPLETE, type, arguments));
     } else if (type.treatAsDynamic) {
       return buildNullConstant();
     } else {
@@ -2766,7 +2658,7 @@
   /// corresponding type argument (field initializers are evaluated before the
   /// receiver object is created).
   ir.Primitive buildTypeVariableAccess(TypeVariableType variable,
-                                       {SourceInformation sourceInformation}) {
+      {SourceInformation sourceInformation}) {
     // If the local exists in the environment, use that.
     // This is put here when we are inside a constructor or field initializer,
     // (or possibly a closure inside one of these).
@@ -2791,25 +2683,26 @@
   }
 
   /// Reifies the value of [variable] on the current receiver object.
-  ir.Primitive buildReifyTypeVariable(TypeVariableType variable,
-                                      SourceInformation sourceInformation) {
+  ir.Primitive buildReifyTypeVariable(
+      TypeVariableType variable, SourceInformation sourceInformation) {
     ir.Primitive typeArgument =
         buildTypeVariableAccess(variable, sourceInformation: sourceInformation);
     return addPrimitive(
         new ir.ReifyRuntimeType(typeArgument, sourceInformation));
   }
 
-  ir.Primitive buildInvocationMirror(Selector selector,
-                                     List<ir.Primitive> arguments) {
+  ir.Primitive buildInvocationMirror(
+      Selector selector, List<ir.Primitive> arguments) {
     return addPrimitive(new ir.CreateInvocationMirror(selector, arguments));
   }
 
-  ir.Primitive buildForeignCode(js.Template codeTemplate,
-                                List<ir.Primitive> arguments,
-                                NativeBehavior behavior,
-                                SourceInformation sourceInformation,
-                                {Element dependency,
-                                 TypeMask type}) {
+  ir.Primitive buildForeignCode(
+      js.Template codeTemplate,
+      List<ir.Primitive> arguments,
+      NativeBehavior behavior,
+      SourceInformation sourceInformation,
+      {Element dependency,
+      TypeMask type}) {
     assert(behavior != null);
     if (type == null) {
       type = program.getTypeMaskForForeign(behavior);
@@ -2822,11 +2715,7 @@
       return addPrimitive(new ir.Refinement(arguments.single, type));
     }
     ir.Primitive result = addPrimitive(new ir.ForeignCode(
-        codeTemplate,
-        type,
-        arguments,
-        behavior,
-        sourceInformation,
+        codeTemplate, type, arguments, behavior, sourceInformation,
         dependency: dependency));
     if (!codeTemplate.isExpression) {
       // Close the term if this is a "throw" expression or native body.
@@ -2837,10 +2726,9 @@
   }
 
   /// Creates a type test or type cast of [value] against [type].
-  ir.Primitive buildTypeOperator(ir.Primitive value,
-                                 DartType type,
-                                 SourceInformation sourceInformation,
-                                 {bool isTypeTest}) {
+  ir.Primitive buildTypeOperator(
+      ir.Primitive value, DartType type, SourceInformation sourceInformation,
+      {bool isTypeTest}) {
     assert(isOpen);
     assert(isTypeTest != null);
 
@@ -2849,10 +2737,8 @@
     if (type.isMalformed) {
       ErroneousElement element = type.element;
       ir.Primitive message = buildStringConstant(element.message);
-      return buildStaticFunctionInvocation(
-          program.throwTypeErrorHelper,
-          <ir.Primitive>[message],
-          sourceInformation);
+      return buildStaticFunctionInvocation(program.throwTypeErrorHelper,
+          <ir.Primitive>[message], sourceInformation);
     }
 
     List<ir.Primitive> typeArguments = const <ir.Primitive>[];
@@ -2891,11 +2777,11 @@
   /// expression whose result is either [value] if [value] is not null, or
   /// `right` if [value] is null. Only when [value] is null, [buildRight] is
   /// evaluated to produce the `right` value.
-  ir.Primitive buildIfNull(ir.Primitive value,
-                           ir.Primitive buildRight(IrBuilder builder),
-                           SourceInformation sourceInformation) {
-    ir.Primitive condition =
-        _buildCheckNull(value, sourceInformation);
+  ir.Primitive buildIfNull(
+      ir.Primitive value,
+      ir.Primitive buildRight(IrBuilder builder),
+      SourceInformation sourceInformation) {
+    ir.Primitive condition = _buildCheckNull(value, sourceInformation);
     return buildConditional(
         condition, buildRight, (_) => value, sourceInformation);
   }
@@ -2903,18 +2789,18 @@
   /// Create a conditional send. This is equivalent to a conditional expression
   /// that checks if [receiver] is null, if so, it returns null, otherwise it
   /// evaluates the [buildSend] expression.
-  ir.Primitive buildIfNotNullSend(ir.Primitive receiver,
-                                  ir.Primitive buildSend(IrBuilder builder),
-                                  SourceInformation sourceInformation) {
-    ir.Primitive condition =
-        _buildCheckNull(receiver, sourceInformation);
+  ir.Primitive buildIfNotNullSend(
+      ir.Primitive receiver,
+      ir.Primitive buildSend(IrBuilder builder),
+      SourceInformation sourceInformation) {
+    ir.Primitive condition = _buildCheckNull(receiver, sourceInformation);
     return buildConditional(
         condition, (_) => receiver, buildSend, sourceInformation);
   }
 
   /// Creates a type test checking whether [value] is null.
-  ir.Primitive _buildCheckNull(ir.Primitive value,
-                               SourceInformation sourceInformation) {
+  ir.Primitive _buildCheckNull(
+      ir.Primitive value, SourceInformation sourceInformation) {
     assert(isOpen);
     return buildIdentical(value, buildNullConstant(),
         sourceInformation: sourceInformation);
@@ -3017,11 +2903,12 @@
   final SubbuildFunction buildCatchBlock;
   final SourceInformation sourceInformation;
 
-  CatchClauseInfo({this.type,
-                   this.exceptionVariable,
-                   this.stackTraceVariable,
-                   this.buildCatchBlock,
-                   this.sourceInformation});
+  CatchClauseInfo(
+      {this.type,
+      this.exceptionVariable,
+      this.stackTraceVariable,
+      this.buildCatchBlock,
+      this.sourceInformation});
 }
 
 class SwitchCaseInfo {
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
index 1afb9d3..e9d1845 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
@@ -6,45 +6,32 @@
 
 import '../closure.dart' as closure;
 import '../common.dart';
-import '../common/names.dart' show
-    Identifiers,
-    Names,
-    Selectors;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
+import '../common/names.dart' show Identifiers, Names, Selectors;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
 import '../constants/expressions.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    SynthesizedConstructorElementX,
-    ConstructorBodyElementX,
-    FunctionSignatureX;
+import '../elements/modelx.dart'
+    show
+        SynthesizedConstructorElementX,
+        ConstructorBodyElementX,
+        FunctionSignatureX;
 import '../io/source_information.dart';
-import '../js_backend/backend_helpers.dart' show
-    BackendHelpers;
-import '../js_backend/js_backend.dart' show
-    JavaScriptBackend,
-    SyntheticConstantKind;
-import '../resolution/tree_elements.dart' show
-    TreeElements;
+import '../js_backend/backend_helpers.dart' show BackendHelpers;
+import '../js_backend/js_backend.dart'
+    show JavaScriptBackend, SyntheticConstantKind;
+import '../resolution/tree_elements.dart' show TreeElements;
 import '../resolution/semantic_visitor.dart';
 import '../resolution/operators.dart' as op;
 import '../tree/tree.dart' as ast;
-import '../types/types.dart' show
-    TypeMask;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
-import '../constants/values.dart' show
-    ConstantValue;
+import '../types/types.dart' show TypeMask;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../constants/values.dart' show ConstantValue;
 import 'cps_ir_nodes.dart' as ir;
 import 'cps_ir_builder.dart';
-import '../native/native.dart' show
-    NativeBehavior,
-    HasCapturedPlaceholders;
+import '../native/native.dart' show NativeBehavior, HasCapturedPlaceholders;
 
 // TODO(karlklose): remove.
 import '../js/js.dart' as js show js, Template, Expression, Name;
@@ -54,8 +41,7 @@
 import 'package:js_runtime/shared/embedded_names.dart'
     show JsBuiltin, JsGetName;
 import '../constants/values.dart';
-import 'type_mask_system.dart' show
-    TypeMaskSystem;
+import 'type_mask_system.dart' show TypeMaskSystem;
 
 typedef void IrBuilderCallback(Element element, ir.FunctionDefinition irNode);
 
@@ -88,8 +74,8 @@
 
   String get name => 'CPS builder';
 
-  ir.FunctionDefinition buildNode(AstElement element,
-                                  TypeMaskSystem typeMaskSystem) {
+  ir.FunctionDefinition buildNode(
+      AstElement element, TypeMaskSystem typeMaskSystem) {
     return measure(() {
       bailoutMessage = null;
 
@@ -99,10 +85,8 @@
         SourceInformationBuilder sourceInformationBuilder =
             sourceInformationStrategy.createBuilderForContext(element);
 
-        IrBuilderVisitor builder =
-            new IrBuilderVisitor(
-                elementsMapping, compiler, sourceInformationBuilder,
-                typeMaskSystem);
+        IrBuilderVisitor builder = new IrBuilderVisitor(elementsMapping,
+            compiler, sourceInformationBuilder, typeMaskSystem);
         ir.FunctionDefinition irNode = builder.buildExecutable(element);
         if (irNode == null) {
           bailoutMessage = builder.bailoutMessage;
@@ -125,18 +109,19 @@
 /// For statements, `null` is returned.
 // TODO(johnniwinther): Implement [SemanticDeclVisitor].
 class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
-    with IrBuilderMixin<ast.Node>,
-         SemanticSendResolvedMixin<ir.Primitive, dynamic>,
-         ErrorBulkMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfStaticsMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfLocalsMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfDynamicsMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfConstantsMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfNewMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfCompoundsMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfSetIfNullsMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfIndexCompoundsMixin<ir.Primitive, dynamic>,
-         BaseImplementationOfSuperIndexSetIfNullMixin<ir.Primitive, dynamic>
+    with
+        IrBuilderMixin<ast.Node>,
+        SemanticSendResolvedMixin<ir.Primitive, dynamic>,
+        ErrorBulkMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfStaticsMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfLocalsMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfDynamicsMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfConstantsMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfNewMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfCompoundsMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfSetIfNullsMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfIndexCompoundsMixin<ir.Primitive, dynamic>,
+        BaseImplementationOfSuperIndexSetIfNullMixin<ir.Primitive, dynamic>
     implements SemanticSendVisitor<ir.Primitive, dynamic> {
   final TreeElements elements;
   final Compiler compiler;
@@ -170,10 +155,8 @@
   // arguments, and what the arguments are.
 
   /// Construct a top-level visitor.
-  IrBuilderVisitor(this.elements,
-                   this.compiler,
-                   this.sourceInformationBuilder,
-                   this.typeMaskSystem);
+  IrBuilderVisitor(this.elements, this.compiler, this.sourceInformationBuilder,
+      this.typeMaskSystem);
 
   JavaScriptBackend get backend => compiler.backend;
   BackendHelpers get helpers => backend.helpers;
@@ -209,11 +192,8 @@
   /// Returns the [ClosureScope] for any function, possibly different from the
   /// one currently being built.
   ClosureScope getClosureScopeForFunction(FunctionElement function) {
-    closure.ClosureClassMap map =
-        compiler.closureToClassMapper.computeClosureToClassMapping(
-            function,
-            function.node,
-            elements);
+    closure.ClosureClassMap map = compiler.closureToClassMapper
+        .computeClosureToClassMapping(function, function.node, elements);
     return new ClosureScope(map.capturingScopes[function.node]);
   }
 
@@ -226,9 +206,7 @@
 
   IrBuilder getBuilderFor(Element element) {
     return new IrBuilder(
-        new GlobalProgramInformation(compiler),
-        backend.constants,
-        element);
+        new GlobalProgramInformation(compiler), backend.constants, element);
   }
 
   /// Builds the [ir.FunctionDefinition] for an executable element. In case the
@@ -297,8 +275,8 @@
     ClassElement clazz = type.element;
     assert(clazz.typeVariables.length == type.typeArguments.length);
     for (int i = 0; i < clazz.typeVariables.length; ++i) {
-      irBuilder.declareTypeVariable(clazz.typeVariables[i],
-          type.typeArguments[i]);
+      irBuilder.declareTypeVariable(
+          clazz.typeVariables[i], type.typeArguments[i]);
     }
     loadTypeVariablesForSuperClasses(clazz);
   }
@@ -338,7 +316,7 @@
         // Create origin body element for patched constructors.
         ConstructorBodyElementX patch = bodyElement;
         ConstructorBodyElementX origin =
-        new ConstructorBodyElementX(constructor.origin);
+            new ConstructorBodyElementX(constructor.origin);
         origin.applyPatch(patch);
         classElement.origin.addBackendMember(bodyElement.origin);
       }
@@ -402,8 +380,8 @@
           backend.isNativeOrExtendsNative(classElement)) {
         parameters.add(new ExplicitReceiverParameter(constructor));
       }
-      constructor.functionSignature.orderedForEachParameter(
-          (ParameterElement p) => parameters.add(p));
+      constructor.functionSignature
+          .orderedForEachParameter((ParameterElement p) => parameters.add(p));
 
       int firstTypeArgumentParameterIndex;
 
@@ -486,14 +464,14 @@
         }
       } else {
         instance = new ir.CreateInstance(
-          classElement,
-          instanceArguments,
-          typeInformation,
-          constructor.hasNode
-              ? sourceInformationBuilder.buildCreate(constructor.node)
-              // TODO(johnniwinther): Provide source information for creation
-              // through synthetic constructors.
-              : null);
+            classElement,
+            instanceArguments,
+            typeInformation,
+            constructor.hasNode
+                ? sourceInformationBuilder.buildCreate(constructor.node)
+                // TODO(johnniwinther): Provide source information for creation
+                // through synthetic constructors.
+                : null);
         irBuilder.add(new ir.LetPrim(instance));
       }
 
@@ -505,8 +483,8 @@
         for (Local param in getConstructorBodyParameters(bodyElement)) {
           bodyArguments.add(irBuilder.environment.lookup(param));
         }
-        Selector selector = new Selector.call(target.memberName,
-            new CallStructure(bodyArguments.length));
+        Selector selector = new Selector.call(
+            target.memberName, new CallStructure(bodyArguments.length));
         irBuilder.addPrimitive(new ir.InvokeMethodDirectly(
             instance, bodyElement, selector, bodyArguments, null));
       }
@@ -515,7 +493,7 @@
       irBuilder.buildReturn(
           value: instance,
           sourceInformation:
-          sourceInformationBuilder.buildImplicitReturn(constructor));
+              sourceInformationBuilder.buildImplicitReturn(constructor));
 
       return irBuilder.makeFunctionDefinition(
           sourceInformationBuilder.buildVariableDeclaration());
@@ -527,11 +505,8 @@
   /// Every visitor can only be applied to nodes in one context, because
   /// the [elements] field is specific to that context.
   IrBuilderVisitor makeVisitorForContext(AstElement context) {
-    return new IrBuilderVisitor(
-        context.resolvedAst.elements,
-        compiler,
-        sourceInformationBuilder.forContext(context),
-        typeMaskSystem);
+    return new IrBuilderVisitor(context.resolvedAst.elements, compiler,
+        sourceInformationBuilder.forContext(context), typeMaskSystem);
   }
 
   /// Builds the IR for an [expression] taken from a different [context].
@@ -550,8 +525,7 @@
       Map<FieldElement, ir.Primitive> fieldValues) {
     assert(constructor.enclosingClass.implementation.isMixinApplication);
     assert(constructor.isSynthesized);
-    ConstructorElement target =
-        constructor.definingConstructor.implementation;
+    ConstructorElement target = constructor.definingConstructor.implementation;
     // The resolver gives us the exact same FunctionSignature for the two
     // constructors. The parameters for the synthesized constructor
     // are already in the environment, so the target constructor's parameters
@@ -568,8 +542,7 @@
   ///
   /// Defaults for optional arguments are evaluated in order to ensure
   /// all parameters are available in the environment.
-  void loadArguments(ConstructorElement target,
-      CallStructure call,
+  void loadArguments(ConstructorElement target, CallStructure call,
       List<ir.Primitive> arguments) {
     assert(target.isImplementation);
     assert(target == elements.analyzedElement);
@@ -676,8 +649,8 @@
       return;
     }
     // Evaluate initializing parameters, e.g. `Foo(this.x)`.
-    constructor.functionSignature.orderedForEachParameter(
-        (ParameterElement parameter) {
+    constructor.functionSignature
+        .orderedForEachParameter((ParameterElement parameter) {
       if (parameter.isInitializingFormal) {
         InitializingFormalElement fieldParameter = parameter;
         fieldValues[fieldParameter.fieldElement] =
@@ -688,7 +661,7 @@
     ast.FunctionExpression node = constructor.node;
     bool hasConstructorCall = false; // Has this() or super() initializer?
     if (node != null && node.initializers != null) {
-      for(ast.Node initializer in node.initializers) {
+      for (ast.Node initializer in node.initializers) {
         if (initializer is ast.SendSet) {
           // Field initializer.
           FieldElement field = elements[initializer];
@@ -699,15 +672,11 @@
           Selector selector = elements.getSelector(initializer);
           List<ir.Primitive> arguments = initializer.arguments.mapToList(visit);
           evaluateConstructorCallFromInitializer(
-              target,
-              selector.callStructure,
-              arguments,
-              supers,
-              fieldValues);
+              target, selector.callStructure, arguments, supers, fieldValues);
           hasConstructorCall = true;
         } else {
-          reporter.internalError(initializer,
-              "Unexpected initializer type $initializer");
+          reporter.internalError(
+              initializer, "Unexpected initializer type $initializer");
         }
       }
     }
@@ -720,11 +689,7 @@
       }
       target = target.implementation;
       evaluateConstructorCallFromInitializer(
-          target,
-          CallStructure.NO_ARGS,
-          const [],
-          supers,
-          fieldValues);
+          target, CallStructure.NO_ARGS, const [], supers, fieldValues);
     }
     // Add this constructor after the superconstructors.
     supers.add(constructor);
@@ -748,11 +713,8 @@
   ir.FunctionDefinition buildConstructorBody(ConstructorBodyElement body) {
     ConstructorElement constructor = body.constructor;
     ast.FunctionExpression node = constructor.node;
-    closureClassMap =
-        compiler.closureToClassMapper.computeClosureToClassMapping(
-            constructor,
-            node,
-            elements);
+    closureClassMap = compiler.closureToClassMapper
+        .computeClosureToClassMapping(constructor, node, elements);
 
     // We compute variables boxed in mutable variables on entry to each try
     // block, not including variables captured by a closure (which are boxed
@@ -766,8 +728,8 @@
     IrBuilder builder = getBuilderFor(body);
 
     return withBuilder(builder, () {
-      irBuilder.buildConstructorBodyHeader(getConstructorBodyParameters(body),
-          getClosureScopeForNode(node));
+      irBuilder.buildConstructorBodyHeader(
+          getConstructorBodyParameters(body), getClosureScopeForNode(node));
       visit(node.body);
       return irBuilder.makeFunctionDefinition(
           sourceInformationBuilder.buildVariableDeclaration());
@@ -782,27 +744,21 @@
     assert(node != null);
     assert(elements[node] != null);
 
-    closureClassMap =
-        compiler.closureToClassMapper.computeClosureToClassMapping(
-            element,
-            node,
-            elements);
+    closureClassMap = compiler.closureToClassMapper
+        .computeClosureToClassMapping(element, node, elements);
     TryBoxedVariables variables = _analyzeTryBoxedVariables(node);
     tryStatements = variables.tryStatements;
     IrBuilder builder = getBuilderFor(element);
-    return withBuilder(builder,
-        () => _makeFunctionBody(builder, element, node));
+    return withBuilder(
+        builder, () => _makeFunctionBody(builder, element, node));
   }
 
   ir.FunctionDefinition buildStaticFieldInitializer(FieldElement element) {
     if (!backend.constants.lazyStatics.contains(element)) {
       return null; // Nothing to do.
     }
-    closureClassMap =
-        compiler.closureToClassMapper.computeClosureToClassMapping(
-            element,
-            element.node,
-            elements);
+    closureClassMap = compiler.closureToClassMapper
+        .computeClosureToClassMapping(element, element.node, elements);
     IrBuilder builder = getBuilderFor(element);
     return withBuilder(builder, () {
       irBuilder.buildFunctionHeader(<Local>[]);
@@ -812,7 +768,7 @@
       irBuilder.buildReturn(
           value: initialValue,
           sourceInformation:
-          sourceInformationBuilder.buildReturn(sendSet.assignmentOperator));
+              sourceInformationBuilder.buildReturn(sendSet.assignmentOperator));
       return irBuilder.makeFunctionDefinition(
           sourceInformationBuilder.buildVariableDeclaration());
     });
@@ -847,8 +803,7 @@
   /// appear in a canonical order.  A [CallStructure] reflecting this order
   /// is returned.
   CallStructure normalizeStaticArguments(CallStructure callStructure,
-      FunctionElement target,
-      List<ir.Primitive> arguments) {
+      FunctionElement target, List<ir.Primitive> arguments) {
     target = target.implementation;
     FunctionSignature signature = target.functionSignature;
     if (!signature.optionalParametersAreNamed &&
@@ -877,7 +832,8 @@
     // value in the temporary list, otherwise the default value.
     signature.orderedOptionalParameters.forEach((ParameterElement element) {
       int nameIndex = callStructure.namedArguments.indexOf(element.name);
-      arguments.add(nameIndex == -1 ? translateDefaultValue(element)
+      arguments.add(nameIndex == -1
+          ? translateDefaultValue(element)
           : namedArguments[nameIndex]);
       normalizedNames.add(element.name);
     });
@@ -890,8 +846,8 @@
   /// list [arguments] is normalized by sorting it in place so that the named
   /// arguments appear in a canonical order.  A [CallStructure] reflecting this
   /// order is returned.
-  CallStructure normalizeDynamicArguments(CallStructure callStructure,
-      List<ir.Primitive> arguments) {
+  CallStructure normalizeDynamicArguments(
+      CallStructure callStructure, List<ir.Primitive> arguments) {
     assert(arguments.length == callStructure.argumentCount);
     if (callStructure.namedArguments.isEmpty) return callStructure;
     int destinationIndex = callStructure.positionalArgumentCount;
@@ -900,8 +856,8 @@
       int sourceIndex = callStructure.namedArguments.indexOf(argName);
       arguments[destinationIndex++] = namedArguments[sourceIndex];
     }
-    return new CallStructure(callStructure.argumentCount,
-        callStructure.getOrderedNamedArguments());
+    return new CallStructure(
+        callStructure.argumentCount, callStructure.getOrderedNamedArguments());
   }
 
   /// Read the value of [field].
@@ -922,9 +878,7 @@
   }
 
   ir.FunctionDefinition _makeFunctionBody(
-      IrBuilder builder,
-      FunctionElement element,
-      ast.FunctionExpression node) {
+      IrBuilder builder, FunctionElement element, ast.FunctionExpression node) {
     FunctionSignature signature = element.functionSignature;
     List<Local> parameters = <Local>[];
     signature.orderedForEachParameter(
@@ -943,8 +897,8 @@
     }
 
     irBuilder.buildFunctionHeader(parameters,
-                                  closureScope: getClosureScopeForNode(node),
-                                  env: getClosureEnvironment());
+        closureScope: getClosureScopeForNode(node),
+        env: getClosureEnvironment());
 
     if (element == helpers.jsArrayTypedConstructor) {
       // Generate a body for JSArray<E>.typed(allocation):
@@ -965,21 +919,23 @@
 
         ir.Primitive typeInformation = irBuilder.addPrimitive(
             new ir.TypeExpression(ir.TypeExpressionKind.INSTANCE,
-                                  element.enclosingClass.thisType,
-                                  <ir.Primitive>[typeArgument]));
+                element.enclosingClass.thisType, <ir.Primitive>[typeArgument]));
 
         MethodElement helper = helpers.setRuntimeTypeInfo;
         CallStructure callStructure = CallStructure.TWO_ARGS;
         Selector selector = new Selector.call(helper.memberName, callStructure);
         allocation = irBuilder.buildInvokeStatic(
-            helper, selector, <ir.Primitive>[allocation, typeInformation],
+            helper,
+            selector,
+            <ir.Primitive>[allocation, typeInformation],
             sourceInformationBuilder.buildGeneric(node));
       }
 
       ir.Primitive refinement = irBuilder.addPrimitive(
           new ir.Refinement(allocation, typeMaskSystem.arrayType));
 
-      irBuilder.buildReturn(value: refinement,
+      irBuilder.buildReturn(
+          value: refinement,
           sourceInformation:
               sourceInformationBuilder.buildImplicitReturn(element));
     } else {
@@ -999,15 +955,15 @@
   }
 
   ir.Primitive visitFunctionExpression(ast.FunctionExpression node) {
-    return irBuilder.buildFunctionExpression(makeSubFunction(node),
-        sourceInformationBuilder.buildCreate(node));
+    return irBuilder.buildFunctionExpression(
+        makeSubFunction(node), sourceInformationBuilder.buildCreate(node));
   }
 
   visitFunctionDeclaration(ast.FunctionDeclaration node) {
     LocalFunctionElement element = elements[node.function];
     Object inner = makeSubFunction(node.function);
-    irBuilder.declareLocalFunction(element, inner,
-        sourceInformationBuilder.buildCreate(node.function));
+    irBuilder.declareLocalFunction(
+        element, inner, sourceInformationBuilder.buildCreate(node.function));
   }
 
   // ## Statements ##
@@ -1078,10 +1034,9 @@
     });
     ClassElement cls = redirectingConstructor.enclosingClass;
     InterfaceType targetType =
-          redirectingConstructor.computeEffectiveTargetType(cls.thisType);
-    CallStructure callStructure = new CallStructure(
-        redirectingSignature.parameterCount,
-        namedParameters);
+        redirectingConstructor.computeEffectiveTargetType(cls.thisType);
+    CallStructure callStructure =
+        new CallStructure(redirectingSignature.parameterCount, namedParameters);
     callStructure =
         normalizeStaticArguments(callStructure, targetConstructor, arguments);
     ir.Primitive instance = irBuilder.buildConstructorInvocation(
@@ -1117,11 +1072,8 @@
   }
 
   visitIf(ast.If node) {
-    irBuilder.buildIf(
-        build(node.condition),
-        subbuild(node.thenPart),
-        subbuild(node.elsePart),
-        sourceInformationBuilder.buildIf(node));
+    irBuilder.buildIf(build(node.condition), subbuild(node.thenPart),
+        subbuild(node.elsePart), sourceInformationBuilder.buildIf(node));
   }
 
   visitLabeledStatement(ast.LabeledStatement node) {
@@ -1131,8 +1083,7 @@
     } else {
       JumpTarget target = elements.getTargetDefinition(body);
       irBuilder.buildLabeledStatement(
-          buildBody: subbuild(body),
-          target: target);
+          buildBody: subbuild(body), target: target);
     }
   }
 
@@ -1208,7 +1159,7 @@
             irBuilder.buildLocalVariableSet(
                 variable, current, sourceInformation);
           } else if (Elements.isError(variable) ||
-                     Elements.isMalformed(variable)) {
+              Elements.isMalformed(variable)) {
             Selector selector =
                 new Selector.setter(new Name(variable.name, variable.library));
             List<ir.Primitive> args = <ir.Primitive>[current];
@@ -1259,8 +1210,8 @@
       return builder.addPrimitive(new ir.Await(cancellation));
     }
 
-    irBuilder.buildTryFinally(new TryStatementInfo(), buildTryBody,
-        buildFinallyBody);
+    irBuilder.buildTryFinally(
+        new TryStatementInfo(), buildTryBody, buildFinallyBody);
   }
 
   visitAwait(ast.Await node) {
@@ -1292,16 +1243,16 @@
         variableSelector: selector,
         variableMask: elements.getTypeMask(identifier),
         variableSetSourceInformation:
-          sourceInformationBuilder.buildForInSet(node),
+            sourceInformationBuilder.buildForInSet(node),
         currentMask: elements.getCurrentTypeMask(node),
         currentSourceInformation:
-          sourceInformationBuilder.buildForInCurrent(node),
+            sourceInformationBuilder.buildForInCurrent(node),
         moveNextMask: elements.getMoveNextTypeMask(node),
         moveNextSourceInformation:
-          sourceInformationBuilder.buildForInMoveNext(node),
+            sourceInformationBuilder.buildForInMoveNext(node),
         iteratorMask: elements.getIteratorTypeMask(node),
         iteratorSourceInformation:
-          sourceInformationBuilder.buildForInIterator(node),
+            sourceInformationBuilder.buildForInIterator(node),
         buildBody: subbuild(node.body),
         target: elements.getTargetDefinition(node),
         closureScope: getClosureScopeForNode(node));
@@ -1359,13 +1310,13 @@
       if (nativeBody != null) {
         ast.LiteralString jsCode = nativeBody.asLiteralString();
         String javaScriptCode = jsCode.dartString.slowToString();
-        assert(invariant(nativeBody,
-            !nativeRedirectionRegExp.hasMatch(javaScriptCode),
-          message: "Deprecated syntax, use @JSName('name') instead."));
-        assert(invariant(nativeBody,
-            function.functionSignature.parameterCount == 0,
+        assert(invariant(
+            nativeBody, !nativeRedirectionRegExp.hasMatch(javaScriptCode),
+            message: "Deprecated syntax, use @JSName('name') instead."));
+        assert(invariant(
+            nativeBody, function.functionSignature.parameterCount == 0,
             message: 'native "..." syntax is restricted to '
-              'functions with zero parameters.'));
+                'functions with zero parameters.'));
         irBuilder.buildNativeFunctionBody(function, javaScriptCode,
             sourceInformationBuilder.buildForeignCode(node));
       } else {
@@ -1374,8 +1325,7 @@
       }
     } else {
       irBuilder.buildReturn(
-          value: build(node.expression),
-          sourceInformation: source);
+          value: build(node.expression), sourceInformation: source);
     }
   }
 
@@ -1471,8 +1421,8 @@
     for (int i = 0; i < continueTargets.length; ++i) {
       // The state value is i, the case's position in the list of recursive
       // cases.
-      irBuilder.state.continueCollectors.add(new GotoJumpCollector(
-          continueTargets[i], stateIndex, i, join));
+      irBuilder.state.continueCollectors
+          .add(new GotoJumpCollector(continueTargets[i], stateIndex, i, join));
     }
 
     // For each non-default case use a pair of functions, one to translate the
@@ -1523,7 +1473,8 @@
               if (condition == null) {
                 condition = buildComparison();
               } else {
-                condition = irBuilder.buildLogicalOperator(condition,
+                condition = irBuilder.buildLogicalOperator(
+                    condition,
                     nested(buildComparison),
                     sourceInformationBuilder.buildSwitchCase(switchCase),
                     isLazyOr: true);
@@ -1589,8 +1540,8 @@
         target: elements.getTargetDefinition(node));
     irBuilder.state.breakCollectors.add(exit);
     for (int i = 0; i < continueTargets.length; ++i) {
-      irBuilder.state.continueCollectors.add(new GotoJumpCollector(
-          continueTargets[i], stateIndex, i, loop));
+      irBuilder.state.continueCollectors
+          .add(new GotoJumpCollector(continueTargets[i], stateIndex, i, loop));
     }
     cases.clear();
     for (int i = 0; i < continueTargets.length; ++i) {
@@ -1628,16 +1579,14 @@
 
     // A loop with a simple switch in the body.
     IrBuilder whileBuilder = irBuilder.makeDelimitedBuilder();
-    whileBuilder.buildWhile(
-        buildCondition: (IrBuilder builder) {
-          ir.Primitive condition = builder.buildIdentical(
-              builder.environment.index2value[stateIndex], initial);
-          return builder.buildNegation(condition,
-              sourceInformationBuilder.buildSwitch(node));
-        },
-        buildBody: (IrBuilder builder) {
-          builder.buildSimpleSwitch(loop, cases, null);
-        });
+    whileBuilder.buildWhile(buildCondition: (IrBuilder builder) {
+      ir.Primitive condition = builder.buildIdentical(
+          builder.environment.index2value[stateIndex], initial);
+      return builder.buildNegation(
+          condition, sourceInformationBuilder.buildSwitch(node));
+    }, buildBody: (IrBuilder builder) {
+      builder.buildSimpleSwitch(loop, cases, null);
+    });
     // Jump to the exit continuation.  This jump is the body of the loop exit
     // continuation, so the loop exit continuation can be eta-reduced.  The
     // jump is here for simplicity because `buildWhile` does not expose the
@@ -1646,7 +1595,7 @@
     whileBuilder.jumpTo(exit);
     irBuilder.add(new ir.LetCont(exit.continuation, whileBuilder.root));
     irBuilder.environment = exit.environment;
-    irBuilder.environment.discard(1);  // Discard the state variable.
+    irBuilder.environment.discard(1); // Discard the state variable.
     irBuilder.state.breakCollectors.removeLast();
     irBuilder.state.continueCollectors.length -= continueTargets.length;
   }
@@ -1683,19 +1632,15 @@
       // try { try tryBlock catch (ex, st) catchBlock } finally finallyBlock
       irBuilder.buildTryFinally(tryStatements[node.finallyBlock],
           (IrBuilder inner) {
-            inner.buildTryCatch(tryStatements[node.catchBlocks],
-                subbuild(node.tryBlock),
-                catchClauseInfos);
-          },
-          subbuild(node.finallyBlock));
+        inner.buildTryCatch(tryStatements[node.catchBlocks],
+            subbuild(node.tryBlock), catchClauseInfos);
+      }, subbuild(node.finallyBlock));
     } else if (!node.catchBlocks.isEmpty) {
       irBuilder.buildTryCatch(tryStatements[node.catchBlocks],
-          subbuild(node.tryBlock),
-          catchClauseInfos);
+          subbuild(node.tryBlock), catchClauseInfos);
     } else {
       irBuilder.buildTryFinally(tryStatements[node.finallyBlock],
-          subbuild(node.tryBlock),
-          subbuild(node.finallyBlock));
+          subbuild(node.tryBlock), subbuild(node.finallyBlock));
     }
   }
 
@@ -1743,8 +1688,8 @@
     return irBuilder.state.constants.getConstantValueForVariable(element);
   }
 
-  ir.Primitive buildConstantExpression(ConstantExpression expression,
-                                       SourceInformation sourceInformation) {
+  ir.Primitive buildConstantExpression(
+      ConstantExpression expression, SourceInformation sourceInformation) {
     return irBuilder.buildConstant(
         irBuilder.state.constants.getConstantValue(expression),
         sourceInformation: sourceInformation);
@@ -1756,8 +1701,8 @@
   /// allocation site for a List object (a literal list or a call to one
   /// of the List constructors).
   TypeMask getAllocationSiteType(ast.Node node) {
-    return compiler.typesTask.getGuaranteedTypeOfNode(
-        elements.analyzedElement, node);
+    return compiler.typesTask
+        .getGuaranteedTypeOfNode(elements.analyzedElement, node);
   }
 
   ir.Primitive visitLiteralList(ast.LiteralList node) {
@@ -1770,7 +1715,7 @@
     // TODO(sra): In checked mode, the elements must be checked as though
     // operator[]= is called.
     ir.Primitive list = irBuilder.buildListLiteral(type, values,
-          allocationSiteType: allocationSiteType);
+        allocationSiteType: allocationSiteType);
     if (type.treatAsRaw) return list;
     // Call JSArray<E>.typed(allocation) to install the reified type.
     ConstructorElement constructor = helpers.jsArrayTypedConstructor;
@@ -1783,8 +1728,8 @@
 
     if (allocationSiteType == null) return tagged;
 
-    return irBuilder.addPrimitive(
-        new ir.Refinement(tagged, allocationSiteType));
+    return irBuilder
+        .addPrimitive(new ir.Refinement(tagged, allocationSiteType));
   }
 
   ir.Primitive visitLiteralMap(ast.LiteralMap node) {
@@ -1841,8 +1786,7 @@
     return translateConstant(node);
   }
 
-  ir.Primitive visitParenthesizedExpression(
-      ast.ParenthesizedExpression node) {
+  ir.Primitive visitParenthesizedExpression(ast.ParenthesizedExpression node) {
     assert(irBuilder.isOpen);
     return visit(node.expression);
   }
@@ -1907,10 +1851,8 @@
   }
 
   @override
-  ir.Primitive visitExpressionInvoke(ast.Send node,
-                                     ast.Node expression,
-                                     ast.NodeList argumentsNode,
-                                     CallStructure callStructure, _) {
+  ir.Primitive visitExpressionInvoke(ast.Send node, ast.Node expression,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     ir.Primitive receiver = visit(expression);
     List<ir.Primitive> arguments = argumentsNode.nodes.mapToList(visit);
     callStructure = normalizeDynamicArguments(callStructure, arguments);
@@ -1926,10 +1868,9 @@
 
   @override
   ir.Primitive handleConstantGet(
-      ast.Node node,
-      ConstantExpression constant, _) {
-    return buildConstantExpression(constant,
-        sourceInformationBuilder.buildGet(node));
+      ast.Node node, ConstantExpression constant, _) {
+    return buildConstantExpression(
+        constant, sourceInformationBuilder.buildGet(node));
   }
 
   /// If [node] is null, returns this.
@@ -1940,10 +1881,7 @@
 
   @override
   ir.Primitive handleDynamicGet(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      _) {
+      ast.Send node, ast.Node receiver, Name name, _) {
     return irBuilder.buildDynamicGet(
         translateReceiver(receiver),
         new Selector.getter(name),
@@ -1953,10 +1891,7 @@
 
   @override
   ir.Primitive visitIfNotNullDynamicPropertyGet(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      _) {
+      ast.Send node, ast.Node receiver, Name name, _) {
     ir.Primitive target = visit(receiver);
     return irBuilder.buildIfNotNullSend(
         target,
@@ -1970,54 +1905,40 @@
 
   @override
   ir.Primitive visitDynamicTypeLiteralGet(
-      ast.Send node,
-      ConstantExpression constant,
-      _) {
-    return buildConstantExpression(constant,
-        sourceInformationBuilder.buildGet(node));
+      ast.Send node, ConstantExpression constant, _) {
+    return buildConstantExpression(
+        constant, sourceInformationBuilder.buildGet(node));
   }
 
   @override
   ir.Primitive visitLocalVariableGet(
-      ast.Send node,
-      LocalVariableElement element,
-      _) {
+      ast.Send node, LocalVariableElement element, _) {
     return element.isConst
         ? irBuilder.buildConstant(getConstantForVariable(element),
             sourceInformation: sourceInformationBuilder.buildGet(node))
         : irBuilder.buildLocalGet(element);
   }
 
-  ir.Primitive handleLocalGet(
-      ast.Send node,
-      LocalElement element,
-      _) {
+  ir.Primitive handleLocalGet(ast.Send node, LocalElement element, _) {
     return irBuilder.buildLocalGet(element);
   }
 
   @override
   ir.Primitive handleStaticFunctionGet(
-      ast.Send node,
-      MethodElement function,
-      _) {
+      ast.Send node, MethodElement function, _) {
     return irBuilder.addPrimitive(new ir.GetStatic(function, isFinal: true));
   }
 
   @override
-  ir.Primitive handleStaticGetterGet(
-      ast.Send node,
-      FunctionElement getter,
-      _) {
-   return buildStaticGetterGet(
-       getter, node, sourceInformationBuilder.buildGet(node));
+  ir.Primitive handleStaticGetterGet(ast.Send node, FunctionElement getter, _) {
+    return buildStaticGetterGet(
+        getter, node, sourceInformationBuilder.buildGet(node));
   }
 
   /// Create a getter invocation of the static getter [getter]. This also
   /// handles the special case where [getter] is the `loadLibrary`
   /// pseudo-function on library prefixes of deferred imports.
-  ir.Primitive buildStaticGetterGet(
-      MethodElement getter,
-      ast.Send node,
+  ir.Primitive buildStaticGetterGet(MethodElement getter, ast.Send node,
       SourceInformation sourceInformation) {
     if (getter.isDeferredLoaderGetter) {
       PrefixElement prefix = getter.enclosingElement;
@@ -2033,48 +1954,39 @@
   }
 
   @override
-  ir.Primitive visitSuperFieldGet(
-      ast.Send node,
-      FieldElement field,
-      _) {
+  ir.Primitive visitSuperFieldGet(ast.Send node, FieldElement field, _) {
     return irBuilder.buildSuperFieldGet(
         field, sourceInformationBuilder.buildGet(node));
   }
 
   @override
-  ir.Primitive visitSuperGetterGet(
-      ast.Send node,
-      FunctionElement getter,
-      _) {
+  ir.Primitive visitSuperGetterGet(ast.Send node, FunctionElement getter, _) {
     return irBuilder.buildSuperGetterGet(
         getter, sourceInformationBuilder.buildGet(node));
   }
 
   @override
-  ir.Primitive visitSuperMethodGet(
-      ast.Send node,
-      MethodElement method,
-      _) {
+  ir.Primitive visitSuperMethodGet(ast.Send node, MethodElement method, _) {
     return irBuilder.buildSuperMethodGet(
         method, sourceInformationBuilder.buildGet(node));
   }
 
   @override
-  ir.Primitive visitUnresolvedSuperGet(
-      ast.Send node,
-      Element element, _) {
+  ir.Primitive visitUnresolvedSuperGet(ast.Send node, Element element, _) {
     return buildSuperNoSuchMethod(
-        elements.getSelector(node), elements.getTypeMask(node), [],
+        elements.getSelector(node),
+        elements.getTypeMask(node),
+        [],
         sourceInformationBuilder.buildGet(node));
   }
 
   @override
   ir.Primitive visitUnresolvedSuperSet(
-      ast.Send node,
-      Element element,
-      ast.Node rhs, _) {
+      ast.Send node, Element element, ast.Node rhs, _) {
     return buildSuperNoSuchMethod(
-        elements.getSelector(node), elements.getTypeMask(node), [visit(rhs)],
+        elements.getSelector(node),
+        elements.getTypeMask(node),
+        [visit(rhs)],
         sourceInformationBuilder.buildAssignment(node));
   }
 
@@ -2090,22 +2002,20 @@
   }
 
   ir.Primitive translateTypeVariableTypeLiteral(
-      TypeVariableElement element,
-      SourceInformation sourceInformation) {
+      TypeVariableElement element, SourceInformation sourceInformation) {
     return irBuilder.buildReifyTypeVariable(element.type, sourceInformation);
   }
 
   @override
-  ir.Primitive visitTypeVariableTypeLiteralGet(ast.Send node,
-                                               TypeVariableElement element, _) {
-    return translateTypeVariableTypeLiteral(element,
-        sourceInformationBuilder.buildGet(node));
+  ir.Primitive visitTypeVariableTypeLiteralGet(
+      ast.Send node, TypeVariableElement element, _) {
+    return translateTypeVariableTypeLiteral(
+        element, sourceInformationBuilder.buildGet(node));
   }
 
   ir.Primitive translateLogicalOperator(ast.Expression left,
-                                        ast.Expression right,
-                                        SourceInformation sourceInformation,
-                                        {bool isLazyOr}) {
+      ast.Expression right, SourceInformation sourceInformation,
+      {bool isLazyOr}) {
     ir.Primitive leftValue = visit(left);
 
     ir.Primitive buildRightValue(IrBuilder rightBuilder) {
@@ -2113,75 +2023,60 @@
     }
 
     return irBuilder.buildLogicalOperator(
-        leftValue, buildRightValue, sourceInformation, isLazyOr: isLazyOr);
+        leftValue, buildRightValue, sourceInformation,
+        isLazyOr: isLazyOr);
   }
 
   @override
-  ir.Primitive visitIfNull(
-      ast.Send node, ast.Node left, ast.Node right, _) {
-    return irBuilder.buildIfNull(build(left), subbuild(right),
-        sourceInformationBuilder.buildIf(node));
+  ir.Primitive visitIfNull(ast.Send node, ast.Node left, ast.Node right, _) {
+    return irBuilder.buildIfNull(
+        build(left), subbuild(right), sourceInformationBuilder.buildIf(node));
   }
 
   @override
   ir.Primitive visitLogicalAnd(
       ast.Send node, ast.Node left, ast.Node right, _) {
-    return translateLogicalOperator(left, right,
-        sourceInformationBuilder.buildIf(node), isLazyOr: false);
+    return translateLogicalOperator(
+        left, right, sourceInformationBuilder.buildIf(node),
+        isLazyOr: false);
   }
 
   @override
-  ir.Primitive visitLogicalOr(
-      ast.Send node, ast.Node left, ast.Node right, _) {
-    return translateLogicalOperator(left, right,
-        sourceInformationBuilder.buildIf(node), isLazyOr: true);
+  ir.Primitive visitLogicalOr(ast.Send node, ast.Node left, ast.Node right, _) {
+    return translateLogicalOperator(
+        left, right, sourceInformationBuilder.buildIf(node),
+        isLazyOr: true);
   }
 
   @override
-  ir.Primitive visitAs(
-      ast.Send node,
-      ast.Node expression,
-      DartType type,
-      _) {
+  ir.Primitive visitAs(ast.Send node, ast.Node expression, DartType type, _) {
     ir.Primitive receiver = visit(expression);
     return irBuilder.buildTypeOperator(
-        receiver,
-        type,
-        sourceInformationBuilder.buildAs(node),
+        receiver, type, sourceInformationBuilder.buildAs(node),
         isTypeTest: false);
   }
 
   @override
-  ir.Primitive visitIs(
-      ast.Send node,
-      ast.Node expression,
-      DartType type,
-      _) {
+  ir.Primitive visitIs(ast.Send node, ast.Node expression, DartType type, _) {
     ir.Primitive value = visit(expression);
     return irBuilder.buildTypeOperator(
-        value,
-        type,
-        sourceInformationBuilder.buildIs(node),
+        value, type, sourceInformationBuilder.buildIs(node),
         isTypeTest: true);
   }
 
   @override
-  ir.Primitive visitIsNot(ast.Send node,
-                          ast.Node expression, DartType type, _) {
+  ir.Primitive visitIsNot(
+      ast.Send node, ast.Node expression, DartType type, _) {
     ir.Primitive value = visit(expression);
     ir.Primitive check = irBuilder.buildTypeOperator(
-        value,
-        type,
-        sourceInformationBuilder.buildIs(node),
+        value, type, sourceInformationBuilder.buildIs(node),
         isTypeTest: true);
-    return irBuilder.buildNegation(check,
-        sourceInformationBuilder.buildIf(node));
+    return irBuilder.buildNegation(
+        check, sourceInformationBuilder.buildIf(node));
   }
 
-  ir.Primitive translateBinary(ast.Send node,
-                               ast.Node left,
-                               op.BinaryOperator operator,
-                               ast.Node right) {
+  ir.Primitive translateBinary(ast.Send node, ast.Node left,
+      op.BinaryOperator operator, ast.Node right) {
     ir.Primitive receiver = visit(left);
     Selector selector = new Selector.binaryOperator(operator.selectorName);
     List<ir.Primitive> arguments = <ir.Primitive>[visit(right)];
@@ -2196,17 +2091,13 @@
   }
 
   @override
-  ir.Primitive visitBinary(ast.Send node,
-                           ast.Node left,
-                           op.BinaryOperator operator,
-                           ast.Node right, _) {
+  ir.Primitive visitBinary(ast.Send node, ast.Node left,
+      op.BinaryOperator operator, ast.Node right, _) {
     return translateBinary(node, left, operator, right);
   }
 
   @override
-  ir.Primitive visitIndex(ast.Send node,
-                          ast.Node receiver,
-                          ast.Node index, _) {
+  ir.Primitive visitIndex(ast.Send node, ast.Node receiver, ast.Node index, _) {
     ir.Primitive target = visit(receiver);
     Selector selector = new Selector.index();
     List<ir.Primitive> arguments = <ir.Primitive>[visit(index)];
@@ -2220,70 +2111,50 @@
         sourceInformationBuilder.buildCall(receiver, node.selector));
   }
 
-  ir.Primitive translateSuperBinary(FunctionElement function,
-                                    op.BinaryOperator operator,
-                                    ast.Node argument,
-                                    SourceInformation sourceInformation) {
-    List<ir.Primitive> arguments = <ir.Primitive>[visit(argument)];
-    return irBuilder.buildSuperMethodInvocation(function,
-        CallStructure.ONE_ARG, arguments, sourceInformation);
-  }
-
-  @override
-  ir.Primitive visitSuperBinary(
-      ast.Send node,
+  ir.Primitive translateSuperBinary(
       FunctionElement function,
       op.BinaryOperator operator,
       ast.Node argument,
-      _) {
+      SourceInformation sourceInformation) {
+    List<ir.Primitive> arguments = <ir.Primitive>[visit(argument)];
+    return irBuilder.buildSuperMethodInvocation(
+        function, CallStructure.ONE_ARG, arguments, sourceInformation);
+  }
+
+  @override
+  ir.Primitive visitSuperBinary(ast.Send node, FunctionElement function,
+      op.BinaryOperator operator, ast.Node argument, _) {
     return translateSuperBinary(function, operator, argument,
         sourceInformationBuilder.buildBinary(node));
   }
 
   @override
   ir.Primitive visitSuperIndex(
-      ast.Send node,
-      FunctionElement function,
-      ast.Node index,
-      _) {
-    return irBuilder.buildSuperIndex(function, visit(index),
-        sourceInformationBuilder.buildIndex(node));
+      ast.Send node, FunctionElement function, ast.Node index, _) {
+    return irBuilder.buildSuperIndex(
+        function, visit(index), sourceInformationBuilder.buildIndex(node));
   }
 
   @override
-  ir.Primitive visitEquals(
-      ast.Send node,
-      ast.Node left,
-      ast.Node right,
-      _) {
+  ir.Primitive visitEquals(ast.Send node, ast.Node left, ast.Node right, _) {
     return translateBinary(node, left, op.BinaryOperator.EQ, right);
   }
 
   @override
   ir.Primitive visitSuperEquals(
-      ast.Send node,
-      FunctionElement function,
-      ast.Node argument,
-      _) {
+      ast.Send node, FunctionElement function, ast.Node argument, _) {
     return translateSuperBinary(function, op.BinaryOperator.EQ, argument,
         sourceInformationBuilder.buildBinary(node));
   }
 
   @override
-  ir.Primitive visitNot(
-      ast.Send node,
-      ast.Node expression,
-      _) {
-    return irBuilder.buildNegation(visit(expression),
-        sourceInformationBuilder.buildIf(node));
+  ir.Primitive visitNot(ast.Send node, ast.Node expression, _) {
+    return irBuilder.buildNegation(
+        visit(expression), sourceInformationBuilder.buildIf(node));
   }
 
   @override
-  ir.Primitive visitNotEquals(
-      ast.Send node,
-      ast.Node left,
-      ast.Node right,
-      _) {
+  ir.Primitive visitNotEquals(ast.Send node, ast.Node left, ast.Node right, _) {
     return irBuilder.buildNegation(
         translateBinary(node, left, op.BinaryOperator.NOT_EQ, right),
         sourceInformationBuilder.buildIf(node));
@@ -2291,10 +2162,7 @@
 
   @override
   ir.Primitive visitSuperNotEquals(
-      ast.Send node,
-      FunctionElement function,
-      ast.Node argument,
-      _) {
+      ast.Send node, FunctionElement function, ast.Node argument, _) {
     return irBuilder.buildNegation(
         translateSuperBinary(function, op.BinaryOperator.NOT_EQ, argument,
             sourceInformationBuilder.buildBinary(node)),
@@ -2302,32 +2170,30 @@
   }
 
   @override
-  ir.Primitive visitUnary(ast.Send node,
-                          op.UnaryOperator operator, ast.Node expression, _) {
+  ir.Primitive visitUnary(
+      ast.Send node, op.UnaryOperator operator, ast.Node expression, _) {
     // TODO(johnniwinther): Clean up the creation of selectors.
     Selector selector = operator.selector;
     ir.Primitive receiver = translateReceiver(expression);
     return irBuilder.buildDynamicInvocation(
-        receiver, selector, elements.getTypeMask(node), const [],
+        receiver,
+        selector,
+        elements.getTypeMask(node),
+        const [],
         sourceInformationBuilder.buildCall(expression, node));
   }
 
   @override
   ir.Primitive visitSuperUnary(
-      ast.Send node,
-      op.UnaryOperator operator,
-      FunctionElement function,
-      _) {
-    return irBuilder.buildSuperMethodInvocation(
-        function, CallStructure.NO_ARGS, const [],
-        sourceInformationBuilder.buildCall(node, node));
+      ast.Send node, op.UnaryOperator operator, FunctionElement function, _) {
+    return irBuilder.buildSuperMethodInvocation(function, CallStructure.NO_ARGS,
+        const [], sourceInformationBuilder.buildCall(node, node));
   }
 
   // TODO(johnniwinther): Handle this in the [IrBuilder] to ensure the correct
   // semantic correlation between arguments and invocation.
   CallStructure translateDynamicArguments(ast.NodeList nodeList,
-                                          CallStructure callStructure,
-                                          List<ir.Primitive> arguments) {
+      CallStructure callStructure, List<ir.Primitive> arguments) {
     assert(arguments.isEmpty);
     for (ast.Node node in nodeList) arguments.add(visit(node));
     return normalizeDynamicArguments(callStructure, arguments);
@@ -2335,19 +2201,18 @@
 
   // TODO(johnniwinther): Handle this in the [IrBuilder] to ensure the correct
   // semantic correlation between arguments and invocation.
-  CallStructure translateStaticArguments(ast.NodeList nodeList,
-                                         Element element,
-                                         CallStructure callStructure,
-                                         List<ir.Primitive> arguments) {
+  CallStructure translateStaticArguments(ast.NodeList nodeList, Element element,
+      CallStructure callStructure, List<ir.Primitive> arguments) {
     assert(arguments.isEmpty);
     for (ast.Node node in nodeList) arguments.add(visit(node));
     return normalizeStaticArguments(callStructure, element, arguments);
   }
 
-  ir.Primitive translateCallInvoke(ir.Primitive target,
-                                   ast.NodeList argumentsNode,
-                                   CallStructure callStructure,
-                                   SourceInformation sourceInformation) {
+  ir.Primitive translateCallInvoke(
+      ir.Primitive target,
+      ast.NodeList argumentsNode,
+      CallStructure callStructure,
+      SourceInformation sourceInformation) {
     List<ir.Primitive> arguments = <ir.Primitive>[];
     callStructure =
         translateDynamicArguments(argumentsNode, callStructure, arguments);
@@ -2356,14 +2221,10 @@
   }
 
   @override
-  ir.Primitive handleConstantInvoke(
-      ast.Send node,
-      ConstantExpression constant,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    ir.Primitive target = buildConstantExpression(constant,
-        sourceInformationBuilder.buildGet(node));
+  ir.Primitive handleConstantInvoke(ast.Send node, ConstantExpression constant,
+      ast.NodeList arguments, CallStructure callStructure, _) {
+    ir.Primitive target = buildConstantExpression(
+        constant, sourceInformationBuilder.buildGet(node));
     return translateCallInvoke(target, arguments, callStructure,
         sourceInformationBuilder.buildCall(node, arguments));
   }
@@ -2376,15 +2237,14 @@
       ast.NodeList argumentsNode,
       CallStructure callStructure,
       _) {
-
     // TODO(sigmund): move these checks down after visiting arguments
     // (see issue #25355)
     ast.Send send = node.send;
     // If an allocation refers to a type using a deferred import prefix (e.g.
     // `new lib.A()`), we must ensure that the deferred import has already been
     // loaded.
-    var prefix = compiler.deferredLoadTask.deferredPrefixElement(
-        send, elements);
+    var prefix =
+        compiler.deferredLoadTask.deferredPrefixElement(send, elements);
     if (prefix != null) buildCheckDeferredIsLoaded(prefix, send);
 
     // We also emit deferred import checks when using redirecting factories that
@@ -2439,12 +2299,8 @@
   }
 
   @override
-  ir.Primitive handleDynamicInvoke(
-      ast.Send node,
-      ast.Node receiver,
-      ast.NodeList argumentsNode,
-      Selector selector,
-      _) {
+  ir.Primitive handleDynamicInvoke(ast.Send node, ast.Node receiver,
+      ast.NodeList argumentsNode, Selector selector, _) {
     ir.Primitive target = translateReceiver(receiver);
     List<ir.Primitive> arguments = <ir.Primitive>[];
     CallStructure callStructure = translateDynamicArguments(
@@ -2458,35 +2314,24 @@
   }
 
   @override
-  ir.Primitive visitIfNotNullDynamicPropertyInvoke(
-      ast.Send node,
-      ast.Node receiver,
-      ast.NodeList argumentsNode,
-      Selector selector,
-      _) {
+  ir.Primitive visitIfNotNullDynamicPropertyInvoke(ast.Send node,
+      ast.Node receiver, ast.NodeList argumentsNode, Selector selector, _) {
     ir.Primitive target = visit(receiver);
-    return irBuilder.buildIfNotNullSend(
-        target,
-        nested(() {
-          List<ir.Primitive> arguments = <ir.Primitive>[];
-          CallStructure callStructure = translateDynamicArguments(
-              argumentsNode, selector.callStructure, arguments);
-          return irBuilder.buildDynamicInvocation(
-              target,
-              new Selector(selector.kind, selector.memberName, callStructure),
-              elements.getTypeMask(node),
-              arguments,
-              sourceInformationBuilder.buildCall(node, node.selector));
-        }),
-        sourceInformationBuilder.buildIf(node));
+    return irBuilder.buildIfNotNullSend(target, nested(() {
+      List<ir.Primitive> arguments = <ir.Primitive>[];
+      CallStructure callStructure = translateDynamicArguments(
+          argumentsNode, selector.callStructure, arguments);
+      return irBuilder.buildDynamicInvocation(
+          target,
+          new Selector(selector.kind, selector.memberName, callStructure),
+          elements.getTypeMask(node),
+          arguments,
+          sourceInformationBuilder.buildCall(node, node.selector));
+    }), sourceInformationBuilder.buildIf(node));
   }
 
-  ir.Primitive handleLocalInvoke(
-      ast.Send node,
-      LocalElement element,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure,
-      _) {
+  ir.Primitive handleLocalInvoke(ast.Send node, LocalElement element,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     ir.Primitive function = irBuilder.buildLocalGet(element);
     List<ir.Primitive> arguments = <ir.Primitive>[];
     callStructure =
@@ -2501,40 +2346,26 @@
   }
 
   @override
-  ir.Primitive handleStaticFieldInvoke(
-      ast.Send node,
-      FieldElement field,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure,
-      _) {
+  ir.Primitive handleStaticFieldInvoke(ast.Send node, FieldElement field,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     SourceInformation src = sourceInformationBuilder.buildGet(node);
     ir.Primitive target = buildStaticFieldGet(field, src);
     List<ir.Primitive> arguments = <ir.Primitive>[];
     callStructure =
         translateDynamicArguments(argumentsNode, callStructure, arguments);
-    return irBuilder.buildCallInvocation(
-        target,
-        callStructure,
-        arguments,
+    return irBuilder.buildCallInvocation(target, callStructure, arguments,
         sourceInformationBuilder.buildCall(node, argumentsNode));
   }
 
   @override
-  ir.Primitive handleStaticFunctionInvoke(ast.Send node,
-      MethodElement function,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure,
-      _) {
+  ir.Primitive handleStaticFunctionInvoke(ast.Send node, MethodElement function,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     if (compiler.backend.isForeign(function)) {
-      return handleForeignCode(
-          node,
-          function,
-          argumentsNode,
-          callStructure);
+      return handleForeignCode(node, function, argumentsNode, callStructure);
     } else {
       List<ir.Primitive> arguments = <ir.Primitive>[];
-      callStructure = translateStaticArguments(argumentsNode, function,
-          callStructure, arguments);
+      callStructure = translateStaticArguments(
+          argumentsNode, function, callStructure, arguments);
       Selector selector = new Selector.call(function.memberName, callStructure);
       return irBuilder.buildInvokeStatic(function, selector, arguments,
           sourceInformationBuilder.buildCall(node, node.selector));
@@ -2546,7 +2377,8 @@
       ast.Send node,
       MethodElement function,
       ast.NodeList arguments,
-      CallStructure callStructure, _) {
+      CallStructure callStructure,
+      _) {
     return irBuilder.buildStaticNoSuchMethod(
         elements.getSelector(node),
         arguments.nodes.mapToList(visit),
@@ -2554,77 +2386,49 @@
   }
 
   @override
-  ir.Primitive handleStaticGetterInvoke(
-      ast.Send node,
-      FunctionElement getter,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure,
-      _) {
+  ir.Primitive handleStaticGetterInvoke(ast.Send node, FunctionElement getter,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     ir.Primitive target = buildStaticGetterGet(
         getter, node, sourceInformationBuilder.buildGet(node));
     List<ir.Primitive> arguments = <ir.Primitive>[];
     callStructure =
         translateDynamicArguments(argumentsNode, callStructure, arguments);
-    return irBuilder.buildCallInvocation(
-        target,
-        callStructure,
-        arguments,
+    return irBuilder.buildCallInvocation(target, callStructure, arguments,
         sourceInformationBuilder.buildCall(node, argumentsNode));
   }
 
   @override
-  ir.Primitive visitSuperFieldInvoke(
-      ast.Send node,
-      FieldElement field,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure,
-      _) {
+  ir.Primitive visitSuperFieldInvoke(ast.Send node, FieldElement field,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     ir.Primitive target = irBuilder.buildSuperFieldGet(
         field, sourceInformationBuilder.buildGet(node));
     List<ir.Primitive> arguments = <ir.Primitive>[];
     callStructure =
         translateDynamicArguments(argumentsNode, callStructure, arguments);
-    return irBuilder.buildCallInvocation(
-        target,
-        callStructure,
-        arguments,
+    return irBuilder.buildCallInvocation(target, callStructure, arguments,
         sourceInformationBuilder.buildCall(node, argumentsNode));
   }
 
   @override
-  ir.Primitive visitSuperGetterInvoke(
-      ast.Send node,
-      FunctionElement getter,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure,
-      _) {
-    ir.Primitive target = irBuilder.buildSuperGetterGet(getter,
-        sourceInformationBuilder.buildGet(node));
+  ir.Primitive visitSuperGetterInvoke(ast.Send node, FunctionElement getter,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
+    ir.Primitive target = irBuilder.buildSuperGetterGet(
+        getter, sourceInformationBuilder.buildGet(node));
     List<ir.Primitive> arguments = <ir.Primitive>[];
     callStructure =
         translateDynamicArguments(argumentsNode, callStructure, arguments);
-    return irBuilder.buildCallInvocation(
-        target,
-        callStructure,
-        arguments,
+    return irBuilder.buildCallInvocation(target, callStructure, arguments,
         sourceInformationBuilder.buildCall(node, argumentsNode));
   }
 
   @override
-  ir.Primitive visitSuperMethodInvoke(
-      ast.Send node,
-      MethodElement method,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure,
-      _) {
+  ir.Primitive visitSuperMethodInvoke(ast.Send node, MethodElement method,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     List<ir.Primitive> arguments = <ir.Primitive>[];
-    callStructure = translateStaticArguments(argumentsNode, method,
-        callStructure, arguments);
-    return irBuilder.buildSuperMethodInvocation(
-        method,
-        callStructure,
-        arguments,
-        sourceInformationBuilder.buildCall(node, node.selector));
+    callStructure = translateStaticArguments(
+        argumentsNode, method, callStructure, arguments);
+    return irBuilder.buildSuperMethodInvocation(method, callStructure,
+        arguments, sourceInformationBuilder.buildCall(node, node.selector));
   }
 
   @override
@@ -2632,10 +2436,11 @@
       ast.Send node,
       MethodElement method,
       ast.NodeList arguments,
-      CallStructure callStructure, _) {
+      CallStructure callStructure,
+      _) {
     List<ir.Primitive> normalizedArguments = <ir.Primitive>[];
-    CallStructure normalizedCallStructure =
-      translateDynamicArguments(arguments, callStructure, normalizedArguments);
+    CallStructure normalizedCallStructure = translateDynamicArguments(
+        arguments, callStructure, normalizedArguments);
     return buildSuperNoSuchMethod(
         new Selector.call(method.memberName, normalizedCallStructure),
         elements.getTypeMask(node),
@@ -2644,11 +2449,8 @@
   }
 
   @override
-  ir.Primitive visitUnresolvedSuperInvoke(
-      ast.Send node,
-      Element element,
-      ast.NodeList argumentsNode,
-      Selector selector, _) {
+  ir.Primitive visitUnresolvedSuperInvoke(ast.Send node, Element element,
+      ast.NodeList argumentsNode, Selector selector, _) {
     List<ir.Primitive> arguments = <ir.Primitive>[];
     CallStructure callStructure = translateDynamicArguments(
         argumentsNode, selector.callStructure, arguments);
@@ -2663,14 +2465,8 @@
 
   @override
   ir.Primitive visitThisInvoke(
-      ast.Send node,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    return translateCallInvoke(
-        irBuilder.buildThis(),
-        arguments,
-        callStructure,
+      ast.Send node, ast.NodeList arguments, CallStructure callStructure, _) {
+    return translateCallInvoke(irBuilder.buildThis(), arguments, callStructure,
         sourceInformationBuilder.buildCall(node, arguments));
   }
 
@@ -2691,11 +2487,7 @@
 
   @override
   ir.Primitive visitIndexSet(
-       ast.SendSet node,
-       ast.Node receiver,
-       ast.Node index,
-       ast.Node rhs,
-       _) {
+      ast.SendSet node, ast.Node receiver, ast.Node index, ast.Node rhs, _) {
     return irBuilder.buildDynamicIndexSet(
         visit(receiver),
         elements.getTypeMask(node),
@@ -2705,24 +2497,14 @@
   }
 
   @override
-  ir.Primitive visitSuperIndexSet(
-      ast.SendSet node,
-      FunctionElement function,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
-    return irBuilder.buildSuperIndexSet(
-        function,
-        visit(index),
-        visit(rhs),
+  ir.Primitive visitSuperIndexSet(ast.SendSet node, FunctionElement function,
+      ast.Node index, ast.Node rhs, _) {
+    return irBuilder.buildSuperIndexSet(function, visit(index), visit(rhs),
         sourceInformationBuilder.buildIndexSet(node));
   }
 
-  ir.Primitive translateIfNull(
-       ast.SendSet node,
-       ir.Primitive getValue(),
-       ast.Node rhs,
-       void setValue(ir.Primitive value)) {
+  ir.Primitive translateIfNull(ast.SendSet node, ir.Primitive getValue(),
+      ast.Node rhs, void setValue(ir.Primitive value)) {
     ir.Primitive value = getValue();
     // Unlike other compound operators if-null conditionally will not do the
     // assignment operation.
@@ -2730,15 +2512,11 @@
       ir.Primitive newValue = build(rhs);
       setValue(newValue);
       return newValue;
-    }),
-    sourceInformationBuilder.buildIf(node));
+    }), sourceInformationBuilder.buildIf(node));
   }
 
-  ir.Primitive translateCompounds(
-      ast.SendSet node,
-      ir.Primitive getValue(),
-      CompoundRhs rhs,
-      void setValue(ir.Primitive value)) {
+  ir.Primitive translateCompounds(ast.SendSet node, ir.Primitive getValue(),
+      CompoundRhs rhs, void setValue(ir.Primitive value)) {
     ir.Primitive value = getValue();
     op.BinaryOperator operator = rhs.operator;
     assert(operator.kind != op.BinaryOperatorKind.IF_NULL);
@@ -2760,8 +2538,8 @@
         sourceInformationBuilder.buildCall(node, node.assignmentOperator);
     ir.Primitive result = irBuilder.buildDynamicInvocation(
         value,
-        new Selector(operatorSelector.kind, operatorSelector.memberName,
-            callStructure),
+        new Selector(
+            operatorSelector.kind, operatorSelector.memberName, callStructure),
         operatorTypeMask,
         arguments,
         operatorSourceInformation);
@@ -2769,11 +2547,8 @@
     return rhs.kind == CompoundKind.POSTFIX ? value : result;
   }
 
-  ir.Primitive translateSetIfNull(
-      ast.SendSet node,
-      ir.Primitive getValue(),
-      ast.Node rhs,
-      void setValue(ir.Primitive value)) {
+  ir.Primitive translateSetIfNull(ast.SendSet node, ir.Primitive getValue(),
+      ast.Node rhs, void setValue(ir.Primitive value)) {
     ir.Primitive value = getValue();
     // Unlike other compound operators if-null conditionally will not do the
     // assignment operation.
@@ -2781,8 +2556,7 @@
       ir.Primitive newValue = build(rhs);
       setValue(newValue);
       return newValue;
-    }),
-    sourceInformationBuilder.buildIf(node));
+    }), sourceInformationBuilder.buildIf(node));
   }
 
   @override
@@ -2794,66 +2568,64 @@
       ast.Node rhs,
       arg,
       {bool isGetterValid,
-       bool isSetterValid}) {
-    return translateSetIfNull(node, () {
-      if (isGetterValid) {
-        return irBuilder.buildSuperMethodGet(
-            indexFunction, sourceInformationBuilder.buildIndex(node));
-      } else {
-        return buildSuperNoSuchGetter(
-            indexFunction,
-            elements.getGetterTypeMaskInComplexSendSet(node),
-            sourceInformationBuilder.buildIndex(node));
-      }
-    }, rhs, (ir.Primitive result) {
-      if (isSetterValid) {
-        return irBuilder.buildSuperMethodGet(
-            indexSetFunction, sourceInformationBuilder.buildIndexSet(node));
-      } else {
-        return buildSuperNoSuchSetter(
-            indexSetFunction, elements.getTypeMask(node), result,
-            sourceInformationBuilder.buildIndexSet(node));
-      }
-    });
+      bool isSetterValid}) {
+    return translateSetIfNull(
+        node,
+        () {
+          if (isGetterValid) {
+            return irBuilder.buildSuperMethodGet(
+                indexFunction, sourceInformationBuilder.buildIndex(node));
+          } else {
+            return buildSuperNoSuchGetter(
+                indexFunction,
+                elements.getGetterTypeMaskInComplexSendSet(node),
+                sourceInformationBuilder.buildIndex(node));
+          }
+        },
+        rhs,
+        (ir.Primitive result) {
+          if (isSetterValid) {
+            return irBuilder.buildSuperMethodGet(
+                indexSetFunction, sourceInformationBuilder.buildIndexSet(node));
+          } else {
+            return buildSuperNoSuchSetter(
+                indexSetFunction,
+                elements.getTypeMask(node),
+                result,
+                sourceInformationBuilder.buildIndexSet(node));
+          }
+        });
   }
 
   @override
   ir.Primitive visitIndexSetIfNull(
-      ast.SendSet node,
-      ast.Node receiver,
-      ast.Node index,
-      ast.Node rhs,
-      arg) {
+      ast.SendSet node, ast.Node receiver, ast.Node index, ast.Node rhs, arg) {
     ir.Primitive target = visit(receiver);
     ir.Primitive indexValue = visit(index);
-    return translateSetIfNull(node, () {
-      Selector selector = new Selector.index();
-      List<ir.Primitive> arguments = <ir.Primitive>[indexValue];
-      CallStructure callStructure =
-          normalizeDynamicArguments(selector.callStructure, arguments);
-      return irBuilder.buildDynamicInvocation(
-          target,
-          new Selector(selector.kind, selector.memberName, callStructure),
-          elements.getGetterTypeMaskInComplexSendSet(node),
-          arguments,
-          sourceInformationBuilder.buildCall(receiver, node));
-    }, rhs, (ir.Primitive result) {
-      irBuilder.buildDynamicIndexSet(
-          target,
-          elements.getTypeMask(node),
-          indexValue,
-          result,
-          sourceInformationBuilder.buildIndexSet(node));
-    });
+    return translateSetIfNull(
+        node,
+        () {
+          Selector selector = new Selector.index();
+          List<ir.Primitive> arguments = <ir.Primitive>[indexValue];
+          CallStructure callStructure =
+              normalizeDynamicArguments(selector.callStructure, arguments);
+          return irBuilder.buildDynamicInvocation(
+              target,
+              new Selector(selector.kind, selector.memberName, callStructure),
+              elements.getGetterTypeMaskInComplexSendSet(node),
+              arguments,
+              sourceInformationBuilder.buildCall(receiver, node));
+        },
+        rhs,
+        (ir.Primitive result) {
+          irBuilder.buildDynamicIndexSet(target, elements.getTypeMask(node),
+              indexValue, result, sourceInformationBuilder.buildIndexSet(node));
+        });
   }
 
   @override
   ir.Primitive handleDynamicSet(
-      ast.SendSet node,
-      ast.Node receiver,
-      Name name,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ast.Node receiver, Name name, ast.Node rhs, _) {
     return irBuilder.buildDynamicSet(
         translateReceiver(receiver),
         new Selector.setter(name),
@@ -2864,11 +2636,7 @@
 
   @override
   ir.Primitive visitIfNotNullDynamicPropertySet(
-      ast.SendSet node,
-      ast.Node receiver,
-      Name name,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ast.Node receiver, Name name, ast.Node rhs, _) {
     ir.Primitive target = visit(receiver);
     return irBuilder.buildIfNotNullSend(
         target,
@@ -2883,116 +2651,95 @@
 
   @override
   ir.Primitive handleLocalSet(
-      ast.SendSet node,
-      LocalElement element,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, LocalElement element, ast.Node rhs, _) {
     ir.Primitive value = visit(rhs);
     value = checkTypeVsElement(value, element);
-    return irBuilder.buildLocalVariableSet(element, value,
-        sourceInformationBuilder.buildAssignment(node));
+    return irBuilder.buildLocalVariableSet(
+        element, value, sourceInformationBuilder.buildAssignment(node));
   }
 
   @override
   ir.Primitive handleStaticFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     ir.Primitive value = visit(rhs);
-    irBuilder.addPrimitive(new ir.SetStatic(field, value,
-        sourceInformationBuilder.buildAssignment(node)));
+    irBuilder.addPrimitive(new ir.SetStatic(
+        field, value, sourceInformationBuilder.buildAssignment(node)));
     return value;
   }
 
   @override
   ir.Primitive visitSuperFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs,
-      _) {
-    return irBuilder.buildSuperFieldSet(field, visit(rhs),
-        sourceInformationBuilder.buildAssignment(node));
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
+    return irBuilder.buildSuperFieldSet(
+        field, visit(rhs), sourceInformationBuilder.buildAssignment(node));
   }
 
   @override
   ir.Primitive visitSuperSetterSet(
-      ast.SendSet node,
-      FunctionElement setter,
-      ast.Node rhs,
-      _) {
-    return irBuilder.buildSuperSetterSet(setter, visit(rhs),
-        sourceInformationBuilder.buildAssignment(node));
+      ast.SendSet node, FunctionElement setter, ast.Node rhs, _) {
+    return irBuilder.buildSuperSetterSet(
+        setter, visit(rhs), sourceInformationBuilder.buildAssignment(node));
   }
 
   @override
   ir.Primitive visitUnresolvedSuperIndexSet(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      ast.Node rhs,
-      arg) {
+      ast.Send node, Element element, ast.Node index, ast.Node rhs, arg) {
     return giveup(node, 'visitUnresolvedSuperIndexSet');
   }
 
   @override
   ir.Primitive handleStaticSetterSet(
-      ast.SendSet node,
-      FunctionElement setter,
-      ast.Node rhs,
-      _) {
-    return irBuilder.buildStaticSetterSet(setter, visit(rhs),
-        sourceInformationBuilder.buildAssignment(node));
+      ast.SendSet node, FunctionElement setter, ast.Node rhs, _) {
+    return irBuilder.buildStaticSetterSet(
+        setter, visit(rhs), sourceInformationBuilder.buildAssignment(node));
   }
 
   @override
   ir.Primitive handleTypeLiteralConstantCompounds(
-      ast.SendSet node,
-      ConstantExpression constant,
-      CompoundRhs rhs,
-      arg) {
+      ast.SendSet node, ConstantExpression constant, CompoundRhs rhs, arg) {
     SourceInformation src = sourceInformationBuilder.buildGet(node);
-    return translateCompounds(node, () {
-      return buildConstantExpression(constant, src);
-    }, rhs, (ir.Primitive value) {
-      // The binary operator will throw before this.
-    });
+    return translateCompounds(
+        node,
+        () {
+          return buildConstantExpression(constant, src);
+        },
+        rhs,
+        (ir.Primitive value) {
+          // The binary operator will throw before this.
+        });
   }
 
   @override
   ir.Primitive handleTypeLiteralConstantSetIfNulls(
-      ast.SendSet node,
-      ConstantExpression constant,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ConstantExpression constant, ast.Node rhs, _) {
     // The type literal is never `null`.
-    return buildConstantExpression(constant,
-        sourceInformationBuilder.buildGet(node));
+    return buildConstantExpression(
+        constant, sourceInformationBuilder.buildGet(node));
   }
 
   @override
   ir.Primitive handleDynamicCompounds(
-      ast.SendSet node,
-      ast.Node receiver,
-      Name name,
-      CompoundRhs rhs,
-      arg) {
+      ast.SendSet node, ast.Node receiver, Name name, CompoundRhs rhs, arg) {
     ir.Primitive target = translateReceiver(receiver);
     ir.Primitive helper() {
-      return translateCompounds(node, () {
-        return irBuilder.buildDynamicGet(
-            target,
-            new Selector.getter(name),
-            elements.getGetterTypeMaskInComplexSendSet(node),
-            sourceInformationBuilder.buildGet(node));
-      }, rhs, (ir.Primitive result) {
-        irBuilder.buildDynamicSet(
-            target,
-            new Selector.setter(name),
-            elements.getTypeMask(node),
-            result,
-            sourceInformationBuilder.buildAssignment(node));
-      });
+      return translateCompounds(
+          node,
+          () {
+            return irBuilder.buildDynamicGet(
+                target,
+                new Selector.getter(name),
+                elements.getGetterTypeMaskInComplexSendSet(node),
+                sourceInformationBuilder.buildGet(node));
+          },
+          rhs,
+          (ir.Primitive result) {
+            irBuilder.buildDynamicSet(
+                target,
+                new Selector.setter(name),
+                elements.getTypeMask(node),
+                result,
+                sourceInformationBuilder.buildAssignment(node));
+          });
     }
     return node.isConditional
         ? irBuilder.buildIfNotNullSend(
@@ -3002,27 +2749,27 @@
 
   @override
   ir.Primitive handleDynamicSetIfNulls(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      ast.Node rhs,
-      _) {
+      ast.Send node, ast.Node receiver, Name name, ast.Node rhs, _) {
     ir.Primitive target = translateReceiver(receiver);
     ir.Primitive helper() {
-      return translateSetIfNull(node, () {
-        return irBuilder.buildDynamicGet(
-            target,
-            new Selector.getter(name),
-            elements.getGetterTypeMaskInComplexSendSet(node),
-            sourceInformationBuilder.buildGet(node));
-      }, rhs, (ir.Primitive result) {
-        irBuilder.buildDynamicSet(
-            target,
-            new Selector.setter(name),
-            elements.getTypeMask(node),
-            result,
-            sourceInformationBuilder.buildAssignment(node));
-      });
+      return translateSetIfNull(
+          node,
+          () {
+            return irBuilder.buildDynamicGet(
+                target,
+                new Selector.getter(name),
+                elements.getGetterTypeMaskInComplexSendSet(node),
+                sourceInformationBuilder.buildGet(node));
+          },
+          rhs,
+          (ir.Primitive result) {
+            irBuilder.buildDynamicSet(
+                target,
+                new Selector.setter(name),
+                elements.getTypeMask(node),
+                result,
+                sourceInformationBuilder.buildAssignment(node));
+          });
     }
     return node.isConditional
         ? irBuilder.buildIfNotNullSend(
@@ -3030,9 +2777,7 @@
         : helper();
   }
 
-  ir.Primitive buildLocalNoSuchSetter(
-      LocalElement local,
-      ir.Primitive value,
+  ir.Primitive buildLocalNoSuchSetter(LocalElement local, ir.Primitive value,
       SourceInformation sourceInformation) {
     Selector selector = new Selector.setter(
         new Name(local.name, local.library, isSetter: true));
@@ -3042,51 +2787,50 @@
 
   @override
   ir.Primitive handleLocalCompounds(
-      ast.SendSet node,
-      LocalElement local,
-      CompoundRhs rhs,
-      arg,
+      ast.SendSet node, LocalElement local, CompoundRhs rhs, arg,
       {bool isSetterValid}) {
-    return translateCompounds(node, () {
-      return irBuilder.buildLocalGet(local);
-    }, rhs, (ir.Primitive result) {
-      if (isSetterValid) {
-        irBuilder.buildLocalVariableSet(
-            local, result,
-            sourceInformationBuilder.buildAssignment(node));
-      } else {
-        Selector selector = new Selector.setter(
-            new Name(local.name, local.library, isSetter: true));
-        irBuilder.buildStaticNoSuchMethod(
-            selector, <ir.Primitive>[result],
-            sourceInformationBuilder.buildAssignment(node));
-      }
-    });
+    return translateCompounds(
+        node,
+        () {
+          return irBuilder.buildLocalGet(local);
+        },
+        rhs,
+        (ir.Primitive result) {
+          if (isSetterValid) {
+            irBuilder.buildLocalVariableSet(
+                local, result, sourceInformationBuilder.buildAssignment(node));
+          } else {
+            Selector selector = new Selector.setter(
+                new Name(local.name, local.library, isSetter: true));
+            irBuilder.buildStaticNoSuchMethod(selector, <ir.Primitive>[result],
+                sourceInformationBuilder.buildAssignment(node));
+          }
+        });
   }
 
   @override
   ir.Primitive handleLocalSetIfNulls(
-      ast.SendSet node,
-      LocalElement local,
-      ast.Node rhs,
-      _,
+      ast.SendSet node, LocalElement local, ast.Node rhs, _,
       {bool isSetterValid}) {
-    return translateSetIfNull(node, () {
-      return irBuilder.buildLocalGet(
-          local, sourceInformation: sourceInformationBuilder.buildGet(node));
-    }, rhs, (ir.Primitive result) {
-      SourceInformation sourceInformation =
-          sourceInformationBuilder.buildAssignment(node);
-      if (isSetterValid) {
-        irBuilder.buildLocalVariableSet(
-            local, result, sourceInformation);
-      } else {
-        Selector selector = new Selector.setter(
-            new Name(local.name, local.library, isSetter: true));
-        irBuilder.buildStaticNoSuchMethod(
-            selector, <ir.Primitive>[result], sourceInformation);
-      }
-    });
+    return translateSetIfNull(
+        node,
+        () {
+          return irBuilder.buildLocalGet(local,
+              sourceInformation: sourceInformationBuilder.buildGet(node));
+        },
+        rhs,
+        (ir.Primitive result) {
+          SourceInformation sourceInformation =
+              sourceInformationBuilder.buildAssignment(node);
+          if (isSetterValid) {
+            irBuilder.buildLocalVariableSet(local, result, sourceInformation);
+          } else {
+            Selector selector = new Selector.setter(
+                new Name(local.name, local.library, isSetter: true));
+            irBuilder.buildStaticNoSuchMethod(
+                selector, <ir.Primitive>[result], sourceInformation);
+          }
+        });
   }
 
   @override
@@ -3098,42 +2842,46 @@
       CompoundSetter setterKind,
       CompoundRhs rhs,
       arg) {
-    return translateCompounds(node, () {
-      SourceInformation sourceInformation =
-          sourceInformationBuilder.buildGet(node);
-      switch (getterKind) {
-        case CompoundGetter.FIELD:
-          return buildStaticFieldGet(getter, sourceInformation);
-        case CompoundGetter.GETTER:
-          return buildStaticGetterGet(getter, node, sourceInformation);
-        case CompoundGetter.METHOD:
-          return irBuilder.addPrimitive(new ir.GetStatic(getter,
-              sourceInformation: sourceInformation, isFinal: true));
-        case CompoundGetter.UNRESOLVED:
-          return irBuilder.buildStaticNoSuchMethod(
-              new Selector.getter(new Name(getter.name, getter.library)),
-              <ir.Primitive>[],
-              sourceInformation);
-      }
-    }, rhs, (ir.Primitive result) {
-      SourceInformation sourceInformation =
-          sourceInformationBuilder.buildAssignment(node);
-      switch (setterKind) {
-        case CompoundSetter.FIELD:
-          irBuilder.addPrimitive(
-              new ir.SetStatic(setter, result, sourceInformation));
-          return;
-        case CompoundSetter.SETTER:
-          irBuilder.buildStaticSetterSet(setter, result, sourceInformation);
-          return;
-        case CompoundSetter.INVALID:
-          irBuilder.buildStaticNoSuchMethod(
-              new Selector.setter(new Name(setter.name, setter.library)),
-              <ir.Primitive>[result],
-              sourceInformation);
-          return;
-      }
-    });
+    return translateCompounds(
+        node,
+        () {
+          SourceInformation sourceInformation =
+              sourceInformationBuilder.buildGet(node);
+          switch (getterKind) {
+            case CompoundGetter.FIELD:
+              return buildStaticFieldGet(getter, sourceInformation);
+            case CompoundGetter.GETTER:
+              return buildStaticGetterGet(getter, node, sourceInformation);
+            case CompoundGetter.METHOD:
+              return irBuilder.addPrimitive(new ir.GetStatic(getter,
+                  sourceInformation: sourceInformation, isFinal: true));
+            case CompoundGetter.UNRESOLVED:
+              return irBuilder.buildStaticNoSuchMethod(
+                  new Selector.getter(new Name(getter.name, getter.library)),
+                  <ir.Primitive>[],
+                  sourceInformation);
+          }
+        },
+        rhs,
+        (ir.Primitive result) {
+          SourceInformation sourceInformation =
+              sourceInformationBuilder.buildAssignment(node);
+          switch (setterKind) {
+            case CompoundSetter.FIELD:
+              irBuilder.addPrimitive(
+                  new ir.SetStatic(setter, result, sourceInformation));
+              return;
+            case CompoundSetter.SETTER:
+              irBuilder.buildStaticSetterSet(setter, result, sourceInformation);
+              return;
+            case CompoundSetter.INVALID:
+              irBuilder.buildStaticNoSuchMethod(
+                  new Selector.setter(new Name(setter.name, setter.library)),
+                  <ir.Primitive>[result],
+                  sourceInformation);
+              return;
+          }
+        });
   }
 
   @override
@@ -3145,49 +2893,50 @@
       CompoundSetter setterKind,
       ast.Node rhs,
       _) {
-    return translateSetIfNull(node, () {
-      SourceInformation sourceInformation =
-          sourceInformationBuilder.buildGet(node);
-      switch (getterKind) {
-        case CompoundGetter.FIELD:
-          return buildStaticFieldGet(getter, sourceInformation);
-        case CompoundGetter.GETTER:
-          return buildStaticGetterGet(getter, node, sourceInformation);
-        case CompoundGetter.METHOD:
-          return irBuilder.addPrimitive(new ir.GetStatic(getter,
-              sourceInformation: sourceInformation,
-              isFinal: true));
-        case CompoundGetter.UNRESOLVED:
-          return irBuilder.buildStaticNoSuchMethod(
-              new Selector.getter(new Name(getter.name, getter.library)),
-              <ir.Primitive>[],
-              sourceInformation);
-      }
-    }, rhs, (ir.Primitive result) {
-      SourceInformation sourceInformation =
-          sourceInformationBuilder.buildAssignment(node);
-      switch (setterKind) {
-        case CompoundSetter.FIELD:
-          irBuilder.addPrimitive(new ir.SetStatic(
-              setter, result, sourceInformation));
-          return;
-        case CompoundSetter.SETTER:
-          irBuilder.buildStaticSetterSet(setter, result, sourceInformation);
-          return;
-        case CompoundSetter.INVALID:
-          irBuilder.buildStaticNoSuchMethod(
-              new Selector.setter(new Name(setter.name, setter.library)),
-              <ir.Primitive>[result],
-              sourceInformation);
-          return;
-      }
-    });
+    return translateSetIfNull(
+        node,
+        () {
+          SourceInformation sourceInformation =
+              sourceInformationBuilder.buildGet(node);
+          switch (getterKind) {
+            case CompoundGetter.FIELD:
+              return buildStaticFieldGet(getter, sourceInformation);
+            case CompoundGetter.GETTER:
+              return buildStaticGetterGet(getter, node, sourceInformation);
+            case CompoundGetter.METHOD:
+              return irBuilder.addPrimitive(new ir.GetStatic(getter,
+                  sourceInformation: sourceInformation, isFinal: true));
+            case CompoundGetter.UNRESOLVED:
+              return irBuilder.buildStaticNoSuchMethod(
+                  new Selector.getter(new Name(getter.name, getter.library)),
+                  <ir.Primitive>[],
+                  sourceInformation);
+          }
+        },
+        rhs,
+        (ir.Primitive result) {
+          SourceInformation sourceInformation =
+              sourceInformationBuilder.buildAssignment(node);
+          switch (setterKind) {
+            case CompoundSetter.FIELD:
+              irBuilder.addPrimitive(
+                  new ir.SetStatic(setter, result, sourceInformation));
+              return;
+            case CompoundSetter.SETTER:
+              irBuilder.buildStaticSetterSet(setter, result, sourceInformation);
+              return;
+            case CompoundSetter.INVALID:
+              irBuilder.buildStaticNoSuchMethod(
+                  new Selector.setter(new Name(setter.name, setter.library)),
+                  <ir.Primitive>[result],
+                  sourceInformation);
+              return;
+          }
+        });
   }
 
   ir.Primitive buildSuperNoSuchGetter(
-      Element element,
-      TypeMask mask,
-      SourceInformation sourceInformation) {
+      Element element, TypeMask mask, SourceInformation sourceInformation) {
     return buildSuperNoSuchMethod(
         new Selector.getter(new Name(element.name, element.library)),
         mask,
@@ -3195,11 +2944,8 @@
         sourceInformation);
   }
 
-  ir.Primitive buildSuperNoSuchSetter(
-      Element element,
-      TypeMask mask,
-      ir.Primitive value,
-      SourceInformation sourceInformation) {
+  ir.Primitive buildSuperNoSuchSetter(Element element, TypeMask mask,
+      ir.Primitive value, SourceInformation sourceInformation) {
     return buildSuperNoSuchMethod(
         new Selector.setter(new Name(element.name, element.library)),
         mask,
@@ -3216,39 +2962,43 @@
       CompoundSetter setterKind,
       CompoundRhs rhs,
       arg) {
-    return translateCompounds(node, () {
-      switch (getterKind) {
-        case CompoundGetter.FIELD:
-          return irBuilder.buildSuperFieldGet(
-              getter, sourceInformationBuilder.buildGet(node));
-        case CompoundGetter.GETTER:
-          return irBuilder.buildSuperGetterGet(
-              getter, sourceInformationBuilder.buildGet(node));
-        case CompoundGetter.METHOD:
-          return irBuilder.buildSuperMethodGet(
-              getter, sourceInformationBuilder.buildGet(node));
-        case CompoundGetter.UNRESOLVED:
-          return buildSuperNoSuchGetter(
-              getter, elements.getGetterTypeMaskInComplexSendSet(node),
-              sourceInformationBuilder.buildGet(node));
-      }
-    }, rhs, (ir.Primitive result) {
-      switch (setterKind) {
-        case CompoundSetter.FIELD:
-          irBuilder.buildSuperFieldSet(setter, result,
-              sourceInformationBuilder.buildAssignment(node));
-          return;
-        case CompoundSetter.SETTER:
-          irBuilder.buildSuperSetterSet(setter, result,
-              sourceInformationBuilder.buildAssignment(node));
-          return;
-        case CompoundSetter.INVALID:
-          buildSuperNoSuchSetter(
-              setter, elements.getTypeMask(node), result,
-              sourceInformationBuilder.buildAssignment(node));
-          return;
-      }
-    });
+    return translateCompounds(
+        node,
+        () {
+          switch (getterKind) {
+            case CompoundGetter.FIELD:
+              return irBuilder.buildSuperFieldGet(
+                  getter, sourceInformationBuilder.buildGet(node));
+            case CompoundGetter.GETTER:
+              return irBuilder.buildSuperGetterGet(
+                  getter, sourceInformationBuilder.buildGet(node));
+            case CompoundGetter.METHOD:
+              return irBuilder.buildSuperMethodGet(
+                  getter, sourceInformationBuilder.buildGet(node));
+            case CompoundGetter.UNRESOLVED:
+              return buildSuperNoSuchGetter(
+                  getter,
+                  elements.getGetterTypeMaskInComplexSendSet(node),
+                  sourceInformationBuilder.buildGet(node));
+          }
+        },
+        rhs,
+        (ir.Primitive result) {
+          switch (setterKind) {
+            case CompoundSetter.FIELD:
+              irBuilder.buildSuperFieldSet(setter, result,
+                  sourceInformationBuilder.buildAssignment(node));
+              return;
+            case CompoundSetter.SETTER:
+              irBuilder.buildSuperSetterSet(setter, result,
+                  sourceInformationBuilder.buildAssignment(node));
+              return;
+            case CompoundSetter.INVALID:
+              buildSuperNoSuchSetter(setter, elements.getTypeMask(node), result,
+                  sourceInformationBuilder.buildAssignment(node));
+              return;
+          }
+        });
   }
 
   @override
@@ -3260,98 +3010,92 @@
       CompoundSetter setterKind,
       ast.Node rhs,
       _) {
-    return translateSetIfNull(node, () {
-      switch (getterKind) {
-        case CompoundGetter.FIELD:
-          return irBuilder.buildSuperFieldGet(
-              getter, sourceInformationBuilder.buildGet(node));
-        case CompoundGetter.GETTER:
-          return irBuilder.buildSuperGetterGet(
-              getter, sourceInformationBuilder.buildGet(node));
-        case CompoundGetter.METHOD:
-          return irBuilder.buildSuperMethodGet(
-              getter, sourceInformationBuilder.buildGet(node));
-        case CompoundGetter.UNRESOLVED:
-          return buildSuperNoSuchGetter(
-              getter,
-              elements.getGetterTypeMaskInComplexSendSet(node),
-              sourceInformationBuilder.buildGet(node));
-      }
-    }, rhs, (ir.Primitive result) {
-      switch (setterKind) {
-        case CompoundSetter.FIELD:
-          irBuilder.buildSuperFieldSet(
-              setter, result,
-              sourceInformationBuilder.buildAssignment(node));
-          return;
-        case CompoundSetter.SETTER:
-          irBuilder.buildSuperSetterSet(
-              setter, result,
-              sourceInformationBuilder.buildAssignment(node));
-          return;
-        case CompoundSetter.INVALID:
-          buildSuperNoSuchSetter(
-              setter, elements.getTypeMask(node), result,
-              sourceInformationBuilder.buildAssignment(node));
-          return;
-      }
-    });
+    return translateSetIfNull(
+        node,
+        () {
+          switch (getterKind) {
+            case CompoundGetter.FIELD:
+              return irBuilder.buildSuperFieldGet(
+                  getter, sourceInformationBuilder.buildGet(node));
+            case CompoundGetter.GETTER:
+              return irBuilder.buildSuperGetterGet(
+                  getter, sourceInformationBuilder.buildGet(node));
+            case CompoundGetter.METHOD:
+              return irBuilder.buildSuperMethodGet(
+                  getter, sourceInformationBuilder.buildGet(node));
+            case CompoundGetter.UNRESOLVED:
+              return buildSuperNoSuchGetter(
+                  getter,
+                  elements.getGetterTypeMaskInComplexSendSet(node),
+                  sourceInformationBuilder.buildGet(node));
+          }
+        },
+        rhs,
+        (ir.Primitive result) {
+          switch (setterKind) {
+            case CompoundSetter.FIELD:
+              irBuilder.buildSuperFieldSet(setter, result,
+                  sourceInformationBuilder.buildAssignment(node));
+              return;
+            case CompoundSetter.SETTER:
+              irBuilder.buildSuperSetterSet(setter, result,
+                  sourceInformationBuilder.buildAssignment(node));
+              return;
+            case CompoundSetter.INVALID:
+              buildSuperNoSuchSetter(setter, elements.getTypeMask(node), result,
+                  sourceInformationBuilder.buildAssignment(node));
+              return;
+          }
+        });
   }
 
   @override
-  ir.Primitive handleTypeVariableTypeLiteralCompounds(
-      ast.SendSet node,
-      TypeVariableElement typeVariable,
-      CompoundRhs rhs,
-      arg) {
-    return translateCompounds(node, () {
-      return irBuilder.buildReifyTypeVariable(
-          typeVariable.type,
-          sourceInformationBuilder.buildGet(node));
-    }, rhs, (ir.Primitive value) {
-      // The binary operator will throw before this.
-    });
+  ir.Primitive handleTypeVariableTypeLiteralCompounds(ast.SendSet node,
+      TypeVariableElement typeVariable, CompoundRhs rhs, arg) {
+    return translateCompounds(
+        node,
+        () {
+          return irBuilder.buildReifyTypeVariable(
+              typeVariable.type, sourceInformationBuilder.buildGet(node));
+        },
+        rhs,
+        (ir.Primitive value) {
+          // The binary operator will throw before this.
+        });
   }
 
   @override
   ir.Primitive visitTypeVariableTypeLiteralSetIfNull(
-      ast.Send node,
-      TypeVariableElement element,
-      ast.Node rhs,
-      _) {
+      ast.Send node, TypeVariableElement element, ast.Node rhs, _) {
     // The type variable is never `null`.
-    return translateTypeVariableTypeLiteral(element,
-        sourceInformationBuilder.buildGet(node));
+    return translateTypeVariableTypeLiteral(
+        element, sourceInformationBuilder.buildGet(node));
   }
 
   @override
-  ir.Primitive handleIndexCompounds(
-      ast.SendSet node,
-      ast.Node receiver,
-      ast.Node index,
-      CompoundRhs rhs,
-      arg) {
+  ir.Primitive handleIndexCompounds(ast.SendSet node, ast.Node receiver,
+      ast.Node index, CompoundRhs rhs, arg) {
     ir.Primitive target = visit(receiver);
     ir.Primitive indexValue = visit(index);
-    return translateCompounds(node, () {
-      Selector selector = new Selector.index();
-      List<ir.Primitive> arguments = <ir.Primitive>[indexValue];
-      CallStructure callStructure =
-          normalizeDynamicArguments(selector.callStructure, arguments);
-      return irBuilder.buildDynamicInvocation(
-          target,
-          new Selector(selector.kind, selector.memberName, callStructure),
-          elements.getGetterTypeMaskInComplexSendSet(node),
-          arguments,
-          sourceInformationBuilder.buildCall(receiver, node));
-    }, rhs, (ir.Primitive result) {
-      irBuilder.buildDynamicIndexSet(
-          target,
-          elements.getTypeMask(node),
-          indexValue,
-          result,
-          sourceInformationBuilder.buildIndexSet(node));
-    });
+    return translateCompounds(
+        node,
+        () {
+          Selector selector = new Selector.index();
+          List<ir.Primitive> arguments = <ir.Primitive>[indexValue];
+          CallStructure callStructure =
+              normalizeDynamicArguments(selector.callStructure, arguments);
+          return irBuilder.buildDynamicInvocation(
+              target,
+              new Selector(selector.kind, selector.memberName, callStructure),
+              elements.getGetterTypeMaskInComplexSendSet(node),
+              arguments,
+              sourceInformationBuilder.buildCall(receiver, node));
+        },
+        rhs,
+        (ir.Primitive result) {
+          irBuilder.buildDynamicIndexSet(target, elements.getTypeMask(node),
+              indexValue, result, sourceInformationBuilder.buildIndexSet(node));
+        });
   }
 
   @override
@@ -3363,42 +3107,41 @@
       CompoundRhs rhs,
       arg,
       {bool isGetterValid,
-       bool isSetterValid}) {
+      bool isSetterValid}) {
     ir.Primitive indexValue = visit(index);
-    return translateCompounds(node, () {
-      if (isGetterValid) {
-        return irBuilder.buildSuperIndex(
-            indexFunction,
-            indexValue,
-            sourceInformationBuilder.buildIndex(node));
-      } else {
-        return buildSuperNoSuchMethod(
-            new Selector.index(),
-            elements.getGetterTypeMaskInComplexSendSet(node),
-            <ir.Primitive>[indexValue],
-            sourceInformationBuilder.buildIndex(node));
-      }
-    }, rhs, (ir.Primitive result) {
-      if (isSetterValid) {
-        irBuilder.buildSuperIndexSet(indexSetFunction, indexValue, result,
-            sourceInformationBuilder.buildIndexSet(node));
-      } else {
-        buildSuperNoSuchMethod(
-            new Selector.indexSet(),
-            elements.getTypeMask(node),
-            <ir.Primitive>[indexValue, result],
-            sourceInformationBuilder.buildIndexSet(node));
-      }
-    });
+    return translateCompounds(
+        node,
+        () {
+          if (isGetterValid) {
+            return irBuilder.buildSuperIndex(indexFunction, indexValue,
+                sourceInformationBuilder.buildIndex(node));
+          } else {
+            return buildSuperNoSuchMethod(
+                new Selector.index(),
+                elements.getGetterTypeMaskInComplexSendSet(node),
+                <ir.Primitive>[indexValue],
+                sourceInformationBuilder.buildIndex(node));
+          }
+        },
+        rhs,
+        (ir.Primitive result) {
+          if (isSetterValid) {
+            irBuilder.buildSuperIndexSet(indexSetFunction, indexValue, result,
+                sourceInformationBuilder.buildIndexSet(node));
+          } else {
+            buildSuperNoSuchMethod(
+                new Selector.indexSet(),
+                elements.getTypeMask(node),
+                <ir.Primitive>[indexValue, result],
+                sourceInformationBuilder.buildIndexSet(node));
+          }
+        });
   }
 
   /// Build code to handle foreign code, that is, native JavaScript code, or
   /// builtin values and operations of the backend.
-  ir.Primitive handleForeignCode(ast.Send node,
-      MethodElement function,
-      ast.NodeList argumentList,
-      CallStructure callStructure) {
-
+  ir.Primitive handleForeignCode(ast.Send node, MethodElement function,
+      ast.NodeList argumentList, CallStructure callStructure) {
     void validateArgumentCount({int minimum, int exactly}) {
       assert((minimum == null) != (exactly == null));
       int count = 0;
@@ -3420,15 +3163,14 @@
 
     /// Call a helper method from the isolate library. The isolate library uses
     /// its own isolate structure, that encapsulates dart2js's isolate.
-    ir.Primitive buildIsolateHelperInvocation(MethodElement element,
-        CallStructure callStructure) {
+    ir.Primitive buildIsolateHelperInvocation(
+        MethodElement element, CallStructure callStructure) {
       if (element == null) {
-        reporter.internalError(node,
-            'Isolate library and compiler mismatch.');
+        reporter.internalError(node, 'Isolate library and compiler mismatch.');
       }
       List<ir.Primitive> arguments = <ir.Primitive>[];
-      callStructure = translateStaticArguments(argumentList, element,
-          callStructure, arguments);
+      callStructure = translateStaticArguments(
+          argumentList, element, callStructure, arguments);
       Selector selector = new Selector.call(element.memberName, callStructure);
       return irBuilder.buildInvokeStatic(element, selector, arguments,
           sourceInformationBuilder.buildCall(node, node.selector));
@@ -3437,11 +3179,12 @@
     /// Lookup the value of the enum described by [node].
     getEnumValue(ast.Node node, EnumClassElement enumClass, List values) {
       Element element = elements[node];
-      if (element is! FieldElement || element.enclosingClass != enumClass) {
+      if (element is! EnumConstantElement ||
+          element.enclosingClass != enumClass) {
         internalError(node, 'expected a JsBuiltin enum value');
       }
-
-      int index = enumClass.enumValues.indexOf(element);
+      EnumConstantElement enumConstant = element;
+      int index = enumConstant.index;
       return values[index];
     }
 
@@ -3457,9 +3200,9 @@
       }
     }
 
-    Link<ast.Node> argumentNodes  = argumentList.nodes;
+    Link<ast.Node> argumentNodes = argumentList.nodes;
     NativeBehavior behavior =
-    compiler.enqueuer.resolution.nativeEnqueuer.getNativeBehaviorOf(node);
+        compiler.enqueuer.resolution.nativeEnqueuer.getNativeBehaviorOf(node);
     switch (function.name) {
       case 'JS':
         validateArgumentCount(minimum: 2);
@@ -3467,13 +3210,12 @@
         // which already have been analyzed by the resolver and can be retrieved
         // using [NativeBehavior]. We can ignore these arguments in the backend.
         List<ir.Primitive> arguments =
-        argumentNodes.skip(2).mapToList(visit, growable: false);
+            argumentNodes.skip(2).mapToList(visit, growable: false);
         if (behavior.codeTemplate.positionalArgumentCount != arguments.length) {
-          reporter.reportErrorMessage(
-              node, MessageKind.GENERIC,
-              {'text':
-              'Mismatch between number of placeholders'
-                  ' and number of arguments.'});
+          reporter.reportErrorMessage(node, MessageKind.GENERIC, {
+            'text': 'Mismatch between number of placeholders'
+                ' and number of arguments.'
+          });
           return irBuilder.buildNullConstant();
         }
 
@@ -3494,12 +3236,11 @@
         ast.Node argument = node.arguments.single;
         FunctionElement closure = elements[argument].implementation;
         if (!Elements.isStaticOrTopLevelFunction(closure)) {
-          internalError(argument,
-              'only static or toplevel function supported');
+          internalError(argument, 'only static or toplevel function supported');
         }
         if (closure.functionSignature.hasOptionalParameters) {
-          internalError(argument,
-              'closures with optional parameters not supported');
+          internalError(
+              argument, 'closures with optional parameters not supported');
         }
         return irBuilder.buildForeignCode(
             js.js.expressionTemplateYielding(
@@ -3510,19 +3251,19 @@
             dependency: closure);
 
       case 'JS_BUILTIN':
-      // The first argument is a description of the type and effect of the
-      // builtin, which has already been analyzed in the frontend.  The second
-      // argument must be a [JsBuiltin] value.  All other arguments are
-      // values used by the JavaScript template that is associated with the
-      // builtin.
+        // The first argument is a description of the type and effect of the
+        // builtin, which has already been analyzed in the frontend.  The second
+        // argument must be a [JsBuiltin] value.  All other arguments are
+        // values used by the JavaScript template that is associated with the
+        // builtin.
         validateArgumentCount(minimum: 2);
 
         ast.Node builtin = argumentNodes.tail.head;
-        JsBuiltin value = getEnumValue(builtin, helpers.jsBuiltinEnum,
-            JsBuiltin.values);
+        JsBuiltin value =
+            getEnumValue(builtin, helpers.jsBuiltinEnum, JsBuiltin.values);
         js.Template template = backend.emitter.builtinTemplateFor(value);
         List<ir.Primitive> arguments =
-        argumentNodes.skip(2).mapToList(visit, growable: false);
+            argumentNodes.skip(2).mapToList(visit, growable: false);
         return irBuilder.buildForeignCode(template, arguments, behavior,
             sourceInformationBuilder.buildForeignCode(node));
 
@@ -3531,7 +3272,7 @@
 
         String name = expectStringConstant(argumentNodes.tail.head);
         js.Expression access =
-        backend.emitter.generateEmbeddedGlobalAccess(name);
+            backend.emitter.generateEmbeddedGlobalAccess(name);
         js.Template template = js.js.expressionTemplateYielding(access);
         return irBuilder.buildForeignCode(template, <ir.Primitive>[], behavior,
             sourceInformationBuilder.buildForeignCode(node));
@@ -3544,7 +3285,7 @@
         if (argumentValue is ir.Constant && argumentValue.value.isType) {
           TypeConstantValue constant = argumentValue.value;
           ConstantValue interceptorValue =
-          new InterceptorConstantValue(constant.representedType);
+              new InterceptorConstantValue(constant.representedType);
           return irBuilder.buildConstant(interceptorValue);
         }
         return internalError(argument, 'expected Type as argument');
@@ -3556,12 +3297,11 @@
         validateArgumentCount(exactly: 1);
 
         ast.Node argument = argumentNodes.head;
-        JsGetName id = getEnumValue(argument, helpers.jsGetNameEnum,
-            JsGetName.values);
+        JsGetName id =
+            getEnumValue(argument, helpers.jsGetNameEnum, JsGetName.values);
         js.Name name = backend.namer.getNameForJsGetName(argument, id);
-        ConstantValue nameConstant =
-        new SyntheticConstantValue(SyntheticConstantKind.NAME,
-            js.js.quoteName(name));
+        ConstantValue nameConstant = new SyntheticConstantValue(
+            SyntheticConstantKind.NAME, js.js.quoteName(name));
 
         return irBuilder.buildConstant(nameConstant);
 
@@ -3585,8 +3325,8 @@
       case 'JS_STRING_CONCAT':
         validateArgumentCount(exactly: 2);
         List<ir.Primitive> arguments = argumentNodes.mapToList(visit);
-        return irBuilder.buildStringConcatenation(arguments,
-            sourceInformationBuilder.buildForeignCode(node));
+        return irBuilder.buildStringConcatenation(
+            arguments, sourceInformationBuilder.buildForeignCode(node));
 
       case 'JS_CURRENT_ISOLATE_CONTEXT':
         validateArgumentCount(exactly: 0);
@@ -3596,8 +3336,8 @@
           // to fetch the current isolate.
           continue getStaticState;
         }
-        return buildIsolateHelperInvocation(helpers.currentIsolate,
-            CallStructure.NO_ARGS);
+        return buildIsolateHelperInvocation(
+            helpers.currentIsolate, CallStructure.NO_ARGS);
 
       getStaticState: case 'JS_GET_STATIC_STATE':
         validateArgumentCount(exactly: 0);
@@ -3624,12 +3364,14 @@
 
         if (!compiler.hasIsolateSupport) {
           ir.Primitive closure = visit(argumentNodes.tail.head);
-          return irBuilder.buildCallInvocation(closure, CallStructure.NO_ARGS,
+          return irBuilder.buildCallInvocation(
+              closure,
+              CallStructure.NO_ARGS,
               const <ir.Primitive>[],
               sourceInformationBuilder.buildForeignCode(node));
         }
-        return buildIsolateHelperInvocation(helpers.callInIsolate,
-            CallStructure.TWO_ARGS);
+        return buildIsolateHelperInvocation(
+            helpers.callInIsolate, CallStructure.TWO_ARGS);
 
       default:
         return giveup(node, 'unplemented native construct: ${function.name}');
@@ -3669,22 +3411,21 @@
     assert(irBuilder.isOpen);
     List<ir.Primitive> parts = <ir.Primitive>[];
     buildStringParts(node, parts);
-    return irBuilder.buildStringConcatenation(parts,
-        sourceInformationBuilder.buildStringInterpolation(node));
+    return irBuilder.buildStringConcatenation(
+        parts, sourceInformationBuilder.buildStringInterpolation(node));
   }
 
   ir.Primitive visitStringInterpolation(ast.StringInterpolation node) {
     assert(irBuilder.isOpen);
     List<ir.Primitive> parts = <ir.Primitive>[];
     buildStringParts(node, parts);
-    return irBuilder.buildStringConcatenation(parts,
-        sourceInformationBuilder.buildStringInterpolation(node));
+    return irBuilder.buildStringConcatenation(
+        parts, sourceInformationBuilder.buildStringInterpolation(node));
   }
 
   ir.Primitive translateConstant(ast.Node node) {
     assert(irBuilder.isOpen);
-    return irBuilder.buildConstant(
-        getConstantForNode(node),
+    return irBuilder.buildConstant(getConstantForNode(node),
         sourceInformation: sourceInformationBuilder.buildGet(node));
   }
 
@@ -3695,16 +3436,13 @@
     return irBuilder.buildNonTailThrow(visit(node.expression));
   }
 
-  ir.Primitive buildSuperNoSuchMethod(
-      Selector selector,
-      TypeMask mask,
-      List<ir.Primitive> arguments,
-      SourceInformation sourceInformation) {
+  ir.Primitive buildSuperNoSuchMethod(Selector selector, TypeMask mask,
+      List<ir.Primitive> arguments, SourceInformation sourceInformation) {
     ClassElement cls = elements.analyzedElement.enclosingClass;
     MethodElement element = cls.lookupSuperMember(Identifiers.noSuchMethod_);
     if (!Selectors.noSuchMethod_.signatureApplies(element)) {
-      element = compiler.coreClasses.objectClass.lookupMember(
-          Identifiers.noSuchMethod_);
+      element = compiler.coreClasses.objectClass
+          .lookupMember(Identifiers.noSuchMethod_);
     }
     return irBuilder.buildSuperMethodInvocation(
         element,
@@ -3714,11 +3452,8 @@
   }
 
   @override
-  ir.Primitive visitUnresolvedCompound(
-      ast.Send node,
-      Element element,
-      op.AssignmentOperator operator,
-      ast.Node rhs, _) {
+  ir.Primitive visitUnresolvedCompound(ast.Send node, Element element,
+      op.AssignmentOperator operator, ast.Node rhs, _) {
     return irBuilder.buildStaticNoSuchMethod(
         new Selector.getter(new Name(element.name, element.library)),
         [],
@@ -3731,14 +3466,13 @@
       Element element,
       DartType type,
       ast.NodeList arguments,
-      Selector selector, _) {
+      Selector selector,
+      _) {
     // If the class is missing it's a runtime error.
     ir.Primitive message =
         irBuilder.buildStringConstant("Unresolved class: '${element.name}'");
-    return irBuilder.buildStaticFunctionInvocation(
-        helpers.throwRuntimeError,
-        <ir.Primitive>[message],
-        sourceInformationBuilder.buildNew(node));
+    return irBuilder.buildStaticFunctionInvocation(helpers.throwRuntimeError,
+        <ir.Primitive>[message], sourceInformationBuilder.buildNew(node));
   }
 
   @override
@@ -3747,7 +3481,8 @@
       Element constructor,
       DartType type,
       ast.NodeList argumentsNode,
-      Selector selector, _) {
+      Selector selector,
+      _) {
     // If the class is there but the constructor is missing, it's an NSM error.
     List<ir.Primitive> arguments = <ir.Primitive>[];
     CallStructure callStructure = translateDynamicArguments(
@@ -3764,30 +3499,26 @@
       ConstructorElement constructor,
       DartType type,
       ast.NodeList argumentsNode,
-      CallStructure callStructure, _) {
+      CallStructure callStructure,
+      _) {
     List<ir.Primitive> arguments = <ir.Primitive>[];
     callStructure =
         translateDynamicArguments(argumentsNode, callStructure, arguments);
     return irBuilder.buildStaticNoSuchMethod(
-        new Selector.call(constructor.memberName, callStructure), arguments,
+        new Selector.call(constructor.memberName, callStructure),
+        arguments,
         sourceInformationBuilder.buildNew(node));
   }
 
   @override
-  ir.Primitive visitUnresolvedGet(
-      ast.Send node,
-      Element element, _) {
-    return irBuilder.buildStaticNoSuchMethod(
-        elements.getSelector(node), [],
+  ir.Primitive visitUnresolvedGet(ast.Send node, Element element, _) {
+    return irBuilder.buildStaticNoSuchMethod(elements.getSelector(node), [],
         sourceInformationBuilder.buildGet(node));
   }
 
   @override
-  ir.Primitive visitUnresolvedInvoke(
-      ast.Send node,
-      Element element,
-      ast.NodeList arguments,
-      Selector selector, _) {
+  ir.Primitive visitUnresolvedInvoke(ast.Send node, Element element,
+      ast.NodeList arguments, Selector selector, _) {
     return irBuilder.buildStaticNoSuchMethod(
         elements.getSelector(node),
         arguments.nodes.mapToList(visit),
@@ -3796,11 +3527,12 @@
 
   @override
   ir.Primitive visitUnresolvedRedirectingFactoryConstructorInvoke(
-       ast.NewExpression node,
-       ConstructorElement constructor,
-       InterfaceType type,
-       ast.NodeList argumentsNode,
-       CallStructure callStructure, _) {
+      ast.NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      ast.NodeList argumentsNode,
+      CallStructure callStructure,
+      _) {
     String nameString = Elements.reconstructConstructorName(constructor);
     Name name = new Name(nameString, constructor.library);
     List<ir.Primitive> arguments = <ir.Primitive>[];
@@ -3814,31 +3546,25 @@
 
   @override
   ir.Primitive visitUnresolvedSet(
-      ast.Send node,
-      Element element,
-      ast.Node rhs, _) {
+      ast.Send node, Element element, ast.Node rhs, _) {
     return irBuilder.buildStaticNoSuchMethod(elements.getSelector(node),
-        [visit(rhs)],
-        sourceInformationBuilder.buildAssignment(node));
+        [visit(rhs)], sourceInformationBuilder.buildAssignment(node));
   }
 
   @override
   ir.Primitive visitUnresolvedSuperIndex(
-      ast.Send node,
-      Element function,
-      ast.Node index, _) {
+      ast.Send node, Element function, ast.Node index, _) {
     // Assume the index getter is missing.
     return buildSuperNoSuchMethod(
-        new Selector.index(), elements.getTypeMask(node), [visit(index)],
+        new Selector.index(),
+        elements.getTypeMask(node),
+        [visit(index)],
         sourceInformationBuilder.buildIndex(node));
   }
 
   @override
-  ir.Primitive visitUnresolvedSuperBinary(
-      ast.Send node,
-      Element element,
-      op.BinaryOperator operator,
-      ast.Node argument, _) {
+  ir.Primitive visitUnresolvedSuperBinary(ast.Send node, Element element,
+      op.BinaryOperator operator, ast.Node argument, _) {
     return buildSuperNoSuchMethod(
         elements.getSelector(node),
         elements.getTypeMask(node),
@@ -3848,11 +3574,11 @@
 
   @override
   ir.Primitive visitUnresolvedSuperUnary(
-      ast.Send node,
-      op.UnaryOperator operator,
-      Element element, _) {
+      ast.Send node, op.UnaryOperator operator, Element element, _) {
     return buildSuperNoSuchMethod(
-        elements.getSelector(node), elements.getTypeMask(node), [],
+        elements.getSelector(node),
+        elements.getTypeMask(node),
+        [],
         sourceInformationBuilder.buildCall(node, node.selector));
   }
 
@@ -3868,9 +3594,7 @@
 
   @override
   ir.Primitive visitClassTypeLiteralSet(
-      ast.SendSet node,
-      TypeConstantExpression constant,
-      ast.Node rhs, _) {
+      ast.SendSet node, TypeConstantExpression constant, ast.Node rhs, _) {
     InterfaceType type = constant.type;
     ClassElement element = type.element;
     return irBuilder.buildStaticNoSuchMethod(
@@ -3881,9 +3605,7 @@
 
   @override
   ir.Primitive visitTypedefTypeLiteralSet(
-      ast.SendSet node,
-      TypeConstantExpression constant,
-      ast.Node rhs, _) {
+      ast.SendSet node, TypeConstantExpression constant, ast.Node rhs, _) {
     TypedefType type = constant.type;
     TypedefElement element = type.element;
     return irBuilder.buildStaticNoSuchMethod(
@@ -3894,21 +3616,19 @@
 
   @override
   ir.Primitive visitTypeVariableTypeLiteralSet(
-      ast.SendSet node,
-      TypeVariableElement element,
-      ast.Node rhs, _) {
+      ast.SendSet node, TypeVariableElement element, ast.Node rhs, _) {
     return irBuilder.buildStaticNoSuchMethod(
-        new Selector.setter(element.memberName), [visit(rhs)],
+        new Selector.setter(element.memberName),
+        [visit(rhs)],
         sourceInformationBuilder.buildAssignment(node));
   }
 
   @override
   ir.Primitive visitDynamicTypeLiteralSet(
-      ast.SendSet node,
-      ConstantExpression constant,
-      ast.Node rhs, _) {
+      ast.SendSet node, ConstantExpression constant, ast.Node rhs, _) {
     return irBuilder.buildStaticNoSuchMethod(
-        new Selector.setter(Names.dynamic_), [visit(rhs)],
+        new Selector.setter(Names.dynamic_),
+        [visit(rhs)],
         sourceInformationBuilder.buildAssignment(node));
   }
 
@@ -3918,7 +3638,8 @@
       ConstructorElement element,
       InterfaceType type,
       ast.NodeList arguments,
-      CallStructure callStructure, _) {
+      CallStructure callStructure,
+      _) {
     for (ast.Node argument in arguments) visit(argument);
     ir.Primitive name =
         irBuilder.buildStringConstant(element.enclosingClass.name);
@@ -3930,9 +3651,7 @@
 
   @override
   ir.Primitive handleFinalStaticFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs, _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     // TODO(asgerf): Include class name somehow for static class members?
     return irBuilder.buildStaticNoSuchMethod(
         new Selector.setter(field.memberName),
@@ -3942,9 +3661,7 @@
 
   @override
   ir.Primitive visitFinalSuperFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs, _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     return buildSuperNoSuchMethod(
         new Selector.setter(field.memberName),
         elements.getTypeMask(node),
@@ -3954,9 +3671,7 @@
 
   @override
   ir.Primitive handleImmutableLocalSet(
-      ast.SendSet node,
-      LocalElement local,
-      ast.Node rhs, _) {
+      ast.SendSet node, LocalElement local, ast.Node rhs, _) {
     return irBuilder.buildStaticNoSuchMethod(
         new Selector.setter(new Name(local.name, local.library)),
         [visit(rhs)],
@@ -3965,10 +3680,7 @@
 
   @override
   ir.Primitive handleStaticFunctionSet(
-      ast.Send node,
-      MethodElement function,
-      ast.Node rhs,
-      _) {
+      ast.Send node, MethodElement function, ast.Node rhs, _) {
     return irBuilder.buildStaticNoSuchMethod(
         new Selector.setter(function.memberName),
         [visit(rhs)],
@@ -3977,10 +3689,7 @@
 
   @override
   ir.Primitive handleStaticGetterSet(
-      ast.SendSet node,
-      GetterElement getter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, GetterElement getter, ast.Node rhs, _) {
     return irBuilder.buildStaticNoSuchMethod(
         new Selector.setter(getter.memberName),
         [visit(rhs)],
@@ -3988,10 +3697,7 @@
   }
 
   @override
-  ir.Primitive handleStaticSetterGet(
-      ast.Send node,
-      SetterElement setter,
-      _) {
+  ir.Primitive handleStaticSetterGet(ast.Send node, SetterElement setter, _) {
     return irBuilder.buildStaticNoSuchMethod(
         new Selector.getter(setter.memberName),
         [],
@@ -3999,11 +3705,8 @@
   }
 
   @override
-  ir.Primitive handleStaticSetterInvoke(
-      ast.Send node,
-      SetterElement setter,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure, _) {
+  ir.Primitive handleStaticSetterInvoke(ast.Send node, SetterElement setter,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     // Translate as a method call.
     List<ir.Primitive> arguments = argumentsNode.nodes.mapToList(visit);
     return irBuilder.buildStaticNoSuchMethod(
@@ -4014,10 +3717,7 @@
 
   @override
   ir.Primitive visitSuperGetterSet(
-      ast.SendSet node,
-      GetterElement getter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, GetterElement getter, ast.Node rhs, _) {
     return buildSuperNoSuchMethod(
         new Selector.setter(getter.memberName),
         elements.getTypeMask(node),
@@ -4027,10 +3727,7 @@
 
   @override
   ir.Primitive visitSuperMethodSet(
-      ast.Send node,
-      MethodElement method,
-      ast.Node rhs,
-      _) {
+      ast.Send node, MethodElement method, ast.Node rhs, _) {
     return buildSuperNoSuchMethod(
         new Selector.setter(method.memberName),
         elements.getTypeMask(node),
@@ -4039,9 +3736,7 @@
   }
 
   @override
-  ir.Primitive visitSuperSetterGet(
-      ast.Send node,
-      SetterElement setter, _) {
+  ir.Primitive visitSuperSetterGet(ast.Send node, SetterElement setter, _) {
     return buildSuperNoSuchMethod(
         new Selector.getter(setter.memberName),
         elements.getTypeMask(node),
@@ -4050,11 +3745,8 @@
   }
 
   @override
-  ir.Primitive visitSuperSetterInvoke(
-      ast.Send node,
-      SetterElement setter,
-      ast.NodeList argumentsNode,
-      CallStructure callStructure, _) {
+  ir.Primitive visitSuperSetterInvoke(ast.Send node, SetterElement setter,
+      ast.NodeList argumentsNode, CallStructure callStructure, _) {
     List<ir.Primitive> arguments = <ir.Primitive>[];
     callStructure =
         translateDynamicArguments(argumentsNode, callStructure, arguments);
@@ -4068,7 +3760,7 @@
   ir.FunctionDefinition nullIfGiveup(ir.FunctionDefinition action()) {
     try {
       return action();
-    } catch(e) {
+    } catch (e) {
       if (e == ABORT_IRNODE_BUILDER) {
         return null;
       }
@@ -4297,7 +3989,7 @@
   }
 
   TypeMask getTypeMaskForNativeFunction(FunctionElement function) {
-    return  _compiler.typesTask.getGuaranteedReturnTypeOfElement(function);
+    return _compiler.typesTask.getGuaranteedReturnTypeOfElement(function);
   }
 
   FieldElement locateSingleField(Selector selector, TypeMask type) {
@@ -4324,13 +4016,13 @@
   bool isJsInterop(FunctionElement element) => _backend.isJsInterop(element);
 
   bool isJsInteropAnonymous(FunctionElement element) =>
-    _backend.jsInteropAnalysis.hasAnonymousAnnotation(element.contextClass);
+      _backend.jsInteropAnalysis.hasAnonymousAnnotation(element.contextClass);
 
   String getJsInteropTargetPath(FunctionElement element) {
     return '${_backend.namer.fixedBackendPath(element)}.'
-      '${_backend.nativeData.getFixedBackendName(element)}';
+        '${_backend.nativeData.getFixedBackendName(element)}';
   }
 
   DartType get jsJavascriptObjectType =>
-    _backend.helpers.jsJavaScriptObjectClass.thisType;
+      _backend.helpers.jsJavaScriptObjectClass.thisType;
 }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_integrity.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_integrity.dart
index efdc27f..cee7a1e 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_integrity.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_integrity.dart
@@ -27,7 +27,6 @@
 /// - Each reference object occurs only once in the IR (no sharing).
 ///
 class CheckCpsIntegrity extends TrampolineRecursiveVisitor {
-
   FunctionDefinition topLevelNode;
   final Map<Definition, ScopeType> inScope = <Definition, ScopeType>{};
   final List<Definition> definitions = [];
@@ -40,13 +39,16 @@
     int i = 0;
     for (Reference ref = def.firstRef; ref != null; ref = ref.next) {
       if (ref.definition != def) {
-        error('Reference to ${ref.definition} found in '
-              'reference chain for $def', def);
+        error(
+            'Reference to ${ref.definition} found in '
+            'reference chain for $def',
+            def);
       }
       if (ref == anchor) {
         error('Cyclic reference chain for $def', def);
       }
-      if (i & ++i == 0) { // Move the anchor every 2^Nth step.
+      if (i & ++i == 0) {
+        // Move the anchor every 2^Nth step.
         anchor = ref;
       }
     }
@@ -225,9 +227,9 @@
       sexpr = '(Set DUMP_IR flag to enable SExpr dump)';
     }
     throw 'CPS integrity violation\n'
-          'After \'$previousPass\' on ${topLevelNode.element}\n'
-          '$message\n\n'
-          '$sexpr\n';
+        'After \'$previousPass\' on ${topLevelNode.element}\n'
+        '$message\n\n'
+        '$sexpr\n';
   }
 }
 
@@ -260,7 +262,7 @@
     _worklist.add(node);
     if (node.parent != _parent) {
       error('Parent pointer on $node is ${node.parent} but should be $_parent',
-            node);
+          node);
     }
   }
 
@@ -268,7 +270,7 @@
   processReference(Reference node) {
     if (node.parent != _parent) {
       error('Parent pointer on $node is ${node.parent} but should be $_parent',
-            node);
+          node);
     }
   }
 }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
index d543cc6..3e82f93 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
@@ -423,14 +423,9 @@
   final SourceInformation sourceInformation;
   Expression body;
 
-  FunctionDefinition(
-      this.element,
-      this.receiverParameter,
-      this.parameters,
-      this.returnContinuation,
-      this.body,
-      {this.interceptorParameter,
-       this.sourceInformation});
+  FunctionDefinition(this.element, this.receiverParameter, this.parameters,
+      this.returnContinuation, this.body,
+      {this.interceptorParameter, this.sourceInformation});
 
   accept(BlockVisitor visitor) => visitor.visitFunctionDefinition(this);
 
@@ -568,8 +563,8 @@
   InvokeMethod(
       Primitive receiver, this.selector, this.mask, List<Primitive> arguments,
       {this.sourceInformation,
-       CallingConvention callingConvention,
-       Primitive interceptor})
+      CallingConvention callingConvention,
+      Primitive interceptor})
       : this.receiverRef = new Reference<Primitive>(receiver),
         this.argumentRefs = _referenceList(arguments),
         this.interceptorRef = _optionalReference(interceptor),
@@ -1144,9 +1139,7 @@
   MutableVariable get variable => variableRef.definition;
   Primitive get value => valueRef.definition;
 
-  SetMutable(
-      MutableVariable variable,
-      Primitive value,
+  SetMutable(MutableVariable variable, Primitive value,
       {this.sourceInformation})
       : this.variableRef = new Reference<MutableVariable>(variable),
         this.valueRef = new Reference<Primitive>(value);
@@ -1181,11 +1174,8 @@
 
   Primitive get object => objectRef.definition;
 
-  GetField(
-      Primitive object,
-      this.field,
-      {this.sourceInformation,
-       this.isFinal: false})
+  GetField(Primitive object, this.field,
+      {this.sourceInformation, this.isFinal: false})
       : this.objectRef = new Reference<Primitive>(object);
 
   accept(Visitor visitor) => visitor.visitGetField(this);
@@ -1213,10 +1203,7 @@
   Primitive get object => objectRef.definition;
   Primitive get value => valueRef.definition;
 
-  SetField(
-      Primitive object,
-      this.field,
-      Primitive value,
+  SetField(Primitive object, this.field, Primitive value,
       {this.sourceInformation})
       : this.objectRef = new Reference<Primitive>(object),
         this.valueRef = new Reference<Primitive>(value);
@@ -1548,12 +1535,8 @@
   Primitive argument(int n) => argumentRefs[n].definition;
   Iterable<Primitive> get arguments => _dereferenceList(argumentRefs);
 
-  ForeignCode(
-      this.codeTemplate,
-      this.storedType,
-      List<Primitive> arguments,
-      this.nativeBehavior,
-      this.sourceInformation,
+  ForeignCode(this.codeTemplate, this.storedType, List<Primitive> arguments,
+      this.nativeBehavior, this.sourceInformation,
       {this.dependency})
       : this.argumentRefs = _referenceList(arguments) {
     effects = Effects.from(nativeBehavior.sideEffects);
@@ -2084,10 +2067,7 @@
   /// boolean.
   bool isStrictCheck;
 
-  Branch(
-      Primitive condition,
-      Continuation trueCont,
-      Continuation falseCont,
+  Branch(Primitive condition, Continuation trueCont, Continuation falseCont,
       this.sourceInformation,
       {bool strict})
       : this.conditionRef = new Reference<Primitive>(condition),
@@ -2097,18 +2077,12 @@
     assert(strict != null);
   }
 
-  Branch.strict(
-      Primitive condition,
-      Continuation trueCont,
-      Continuation falseCont,
-      SourceInformation sourceInformation)
+  Branch.strict(Primitive condition, Continuation trueCont,
+      Continuation falseCont, SourceInformation sourceInformation)
       : this(condition, trueCont, falseCont, sourceInformation, strict: true);
 
-  Branch.loose(
-      Primitive condition,
-      Continuation trueCont,
-      Continuation falseCont,
-      SourceInformation sourceInformation)
+  Branch.loose(Primitive condition, Continuation trueCont,
+      Continuation falseCont, SourceInformation sourceInformation)
       : this(condition, trueCont, falseCont, sourceInformation, strict: false);
 
   accept(BlockVisitor visitor) => visitor.visitBranch(this);
@@ -2888,8 +2862,8 @@
   }
 
   Definition visitGetMutable(GetMutable node) {
-    return new GetMutable(
-        getCopy(node.variableRef), sourceInformation: node.sourceInformation);
+    return new GetMutable(getCopy(node.variableRef),
+        sourceInformation: node.sourceInformation);
   }
 
   Definition visitParameter(Parameter node) {
@@ -3004,8 +2978,7 @@
 
   Definition visitForeignCode(ForeignCode node) {
     return new ForeignCode(node.codeTemplate, node.storedType,
-        getList(node.argumentRefs), node.nativeBehavior,
-        node.sourceInformation,
+        getList(node.argumentRefs), node.nativeBehavior, node.sourceInformation,
         dependency: node.dependency);
   }
 }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
index 5dad783..185f011 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes_sexpr.dart
@@ -7,8 +7,7 @@
 import '../constants/values.dart';
 import '../util/util.dart';
 import 'cps_ir_nodes.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
+import '../universe/call_structure.dart' show CallStructure;
 
 /// A [Decorator] is a function used by [SExpressionStringifier] to augment the
 /// output produced for a node or reference.  It can be provided to the
@@ -178,8 +177,8 @@
     return '$indentation(LetMutable ($name $value)\n$body)';
   }
 
-  String formatArguments(CallStructure call,
-      List<Reference<Primitive>> arguments,
+  String formatArguments(
+      CallStructure call, List<Reference<Primitive>> arguments,
       [CallingConvention callingConvention = CallingConvention.Normal]) {
     int positionalArgumentCount = call.positionalArgumentCount;
     List<String> args =
@@ -191,15 +190,16 @@
       args.add("($name: $arg)");
     }
     // Constructors can have type parameter after the named arguments.
-    args.addAll(
-        arguments.skip(positionalArgumentCount + argumentNames.length)
-            .map(access));
+    args.addAll(arguments
+        .skip(positionalArgumentCount + argumentNames.length)
+        .map(access));
     return '(${args.join(' ')})';
   }
 
   String visitInvokeStatic(InvokeStatic node) {
     String name = node.target.name;
-    String args = formatArguments(node.selector.callStructure, node.argumentRefs);
+    String args =
+        formatArguments(node.selector.callStructure, node.argumentRefs);
     return '(InvokeStatic $name $args)';
   }
 
@@ -207,8 +207,8 @@
     String name = node.selector.name;
     String interceptor = optionalAccess(node.interceptorRef);
     String receiver = access(node.receiverRef);
-    String arguments = formatArguments(node.selector.callStructure,
-        node.argumentRefs, node.callingConvention);
+    String arguments = formatArguments(
+        node.selector.callStructure, node.argumentRefs, node.callingConvention);
     return '(InvokeMethod $interceptor $receiver $name $arguments)';
   }
 
@@ -216,8 +216,8 @@
     String interceptor = optionalAccess(node.interceptorRef);
     String receiver = access(node.receiverRef);
     String name = node.selector.name;
-    String arguments = formatArguments(node.selector.callStructure,
-        node.argumentRefs, node.callingConvention);
+    String arguments = formatArguments(
+        node.selector.callStructure, node.argumentRefs, node.callingConvention);
     return '(InvokeMethodDirectly $interceptor $receiver $name $arguments)';
   }
 
@@ -232,7 +232,8 @@
     if (!node.target.name.isEmpty) {
       name = '${name}.${node.target.name}';
     }
-    String args = formatArguments(node.selector.callStructure, node.argumentRefs);
+    String args =
+        formatArguments(node.selector.callStructure, node.argumentRefs);
     return '(InvokeConstructor $name $args)';
   }
 
@@ -241,7 +242,7 @@
     if (node.isRecursive) name = 'rec $name';
     String args = node.argumentRefs == null
         ? '**** NULL ****'
-	: node.argumentRefs.map(access).join(' ');
+        : node.argumentRefs.map(access).join(' ');
     String escaping = node.isEscapingTry ? ' escape' : '';
     return '$indentation(InvokeContinuation $name ($args)$escaping)';
   }
@@ -259,10 +260,8 @@
     String condition = access(node.conditionRef);
     assert(isBranchTarget(node.trueContinuation));
     assert(isBranchTarget(node.falseContinuation));
-    String trueCont =
-        indentBlock(() => visit(node.trueContinuation));
-    String falseCont =
-        indentBlock(() => visit(node.falseContinuation));
+    String trueCont = indentBlock(() => visit(node.trueContinuation));
+    String falseCont = indentBlock(() => visit(node.falseContinuation));
     String strict = node.isStrictCheck ? 'Strict' : 'NonStrict';
     return '$indentation(Branch $strict $condition\n$trueCont\n$falseCont)';
   }
@@ -494,7 +493,7 @@
 
   String visitList(ListConstantValue constant, _) {
     String entries =
-      constant.entries.map((entry) => entry.accept(this, _)).join(' ');
+        constant.entries.map((entry) => entry.accept(this, _)).join(' ');
     return '(List $entries)';
   }
 
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
index 8a53864..7b7e1e4 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_tracer.dart
@@ -52,7 +52,6 @@
     throw 'The IR tracer reached an unexpected IR instruction: $node';
   }
 
-
   int countUses(cps_ir.Definition definition) {
     int count = 0;
     cps_ir.Reference ref = definition.firstRef;
@@ -307,7 +306,7 @@
 
   visitInterceptor(cps_ir.Interceptor node) {
     return 'Interceptor(${formatReference(node.inputRef)}, '
-           '${node.interceptedClasses})';
+        '${node.interceptedClasses})';
   }
 
   visitGetMutable(cps_ir.GetMutable node) {
@@ -361,8 +360,8 @@
   visitForeignCode(cps_ir.ForeignCode node) {
     String id = names.name(node);
     String arguments = node.argumentRefs.map(formatReference).join(', ');
-    printStmt(id,
-        "ForeignCode ${node.type} ${node.codeTemplate.source} $arguments");
+    printStmt(
+        id, "ForeignCode ${node.type} ${node.codeTemplate.source} $arguments");
   }
 
   visitGetLength(cps_ir.GetLength node) {
@@ -391,12 +390,10 @@
 
   visitBoundsCheck(cps_ir.BoundsCheck node) {
     String object = formatReference(node.objectRef);
-    String index = node.indexRef == null
-        ? 'no-index'
-        : formatReference(node.indexRef);
-    String length = node.lengthRef == null
-        ? 'no-length'
-        : formatReference(node.lengthRef);
+    String index =
+        node.indexRef == null ? 'no-index' : formatReference(node.indexRef);
+    String length =
+        node.lengthRef == null ? 'no-length' : formatReference(node.lengthRef);
     return 'BoundsCheck $object $index $length ${node.checkString}';
   }
 
@@ -416,13 +413,7 @@
  */
 class Names {
   final Map<Object, String> names = {};
-  final Map<String, int> counters = {
-    'r': 0,
-    'B': 0,
-    'v': 0,
-    'x': 0,
-    'c': 0
-  };
+  final Map<String, int> counters = {'r': 0, 'B': 0, 'v': 0, 'x': 0, 'c': 0};
 
   String prefix(x) {
     if (x is cps_ir.Parameter) return 'r';
@@ -532,14 +523,11 @@
     unexpectedNode(node);
   }
 
-  visitThrow(cps_ir.Throw exp) {
-  }
+  visitThrow(cps_ir.Throw exp) {}
 
-  visitRethrow(cps_ir.Rethrow exp) {
-  }
+  visitRethrow(cps_ir.Rethrow exp) {}
 
-  visitUnreachable(cps_ir.Unreachable node) {
-  }
+  visitUnreachable(cps_ir.Unreachable node) {}
 
   visitGetLazyStatic(cps_ir.GetLazyStatic node) {
     unexpectedNode(node);
diff --git a/pkg/compiler/lib/src/cps_ir/eagerly_load_statics.dart b/pkg/compiler/lib/src/cps_ir/eagerly_load_statics.dart
index e03f9ca..60a7977 100644
--- a/pkg/compiler/lib/src/cps_ir/eagerly_load_statics.dart
+++ b/pkg/compiler/lib/src/cps_ir/eagerly_load_statics.dart
@@ -23,7 +23,7 @@
       <Continuation, Map<FieldElement, Primitive>>{};
 
   static Map<FieldElement, Primitive> cloneFieldMap(
-        Map<FieldElement, Primitive> map) {
+      Map<FieldElement, Primitive> map) {
     return new Map<FieldElement, Primitive>.from(map);
   }
 
@@ -62,9 +62,8 @@
       // No reason to create a GetStatic when the field is final.
       node.replaceWithFragment(new CpsFragment(), initializer);
     } else if (initializer != null) {
-      GetStatic newNode = new GetStatic.witnessed(node.element,
-          initializer, sourceInformation: node.sourceInformation)
-          ..type = node.type;
+      GetStatic newNode = new GetStatic.witnessed(node.element, initializer,
+          sourceInformation: node.sourceInformation)..type = node.type;
       node.replaceWith(newNode);
     } else {
       initializerFor[node.element] = node;
diff --git a/pkg/compiler/lib/src/cps_ir/effects.dart b/pkg/compiler/lib/src/cps_ir/effects.dart
index 9ab55cd..29d3172 100644
--- a/pkg/compiler/lib/src/cps_ir/effects.dart
+++ b/pkg/compiler/lib/src/cps_ir/effects.dart
@@ -30,8 +30,7 @@
   static const int changesIndexableLength = _changes << _indexableLength;
   static const int changesOther = _changes << _other;
 
-  static const int changesAll =
-      changesStaticField |
+  static const int changesAll = changesStaticField |
       changesInstanceField |
       changesIndexableContent |
       changesIndexableLength |
@@ -45,8 +44,7 @@
   static const int dependsOnIndexableLength = _depends << _indexableLength;
   static const int dependsOnOther = _depends << _other;
 
-  static const int dependsOnAll =
-      dependsOnStaticField |
+  static const int dependsOnAll = dependsOnStaticField |
       dependsOnInstanceField |
       dependsOnIndexableContent |
       dependsOnIndexableLength |
@@ -131,9 +129,9 @@
     return new EffectNumbers._zero().._effectNumbers.setAll(0, _effectNumbers);
   }
 
-  int operator[](int i) => _effectNumbers[i];
+  int operator [](int i) => _effectNumbers[i];
 
-  void operator[]=(int i, int value) {
+  void operator []=(int i, int value) {
     _effectNumbers[i] = value;
   }
 
@@ -146,15 +144,19 @@
   void set staticField(int n) {
     _effectNumbers[Effects._staticField] = n;
   }
+
   void set instanceField(int n) {
     _effectNumbers[Effects._instanceField] = n;
   }
+
   void set indexableContent(int n) {
     _effectNumbers[Effects._indexableContent] = n;
   }
+
   void set indexableLength(int n) {
     _effectNumbers[Effects._indexableLength] = n;
   }
+
   void set other(int n) {
     _effectNumbers[Effects._other] = n;
   }
diff --git a/pkg/compiler/lib/src/cps_ir/finalize.dart b/pkg/compiler/lib/src/cps_ir/finalize.dart
index 9376800..e583f49 100644
--- a/pkg/compiler/lib/src/cps_ir/finalize.dart
+++ b/pkg/compiler/lib/src/cps_ir/finalize.dart
@@ -38,18 +38,22 @@
   CpsFragment visitBoundsCheck(BoundsCheck node) {
     CpsFragment cps = new CpsFragment(node.sourceInformation);
     if (node.hasNoChecks) {
-      node..replaceUsesWith(node.object)..destroy();
+      node
+        ..replaceUsesWith(node.object)
+        ..destroy();
       return cps;
     }
     Continuation fail = cps.letCont();
     Primitive index = node.index;
     if (node.hasIntegerCheck) {
-      cps.ifTruthy(cps.applyBuiltin(BuiltinOperator.IsNotUnsigned32BitInteger,
-          [index, index]))
+      cps
+          .ifTruthy(cps.applyBuiltin(
+              BuiltinOperator.IsNotUnsigned32BitInteger, [index, index]))
           .invokeContinuation(fail);
     } else if (node.hasLowerBoundCheck) {
-      cps.ifTruthy(cps.applyBuiltin(BuiltinOperator.NumLt,
-          [index, cps.makeZero()]))
+      cps
+          .ifTruthy(
+              cps.applyBuiltin(BuiltinOperator.NumLt, [index, cps.makeZero()]))
           .invokeContinuation(fail);
     }
     if (node.hasUpperBoundCheck) {
@@ -63,25 +67,29 @@
         lengthBinding.remove();
         cps.letPrim(length);
       }
-      cps.ifTruthy(cps.applyBuiltin(BuiltinOperator.NumGe,
-          [index, length]))
+      cps
+          .ifTruthy(cps.applyBuiltin(BuiltinOperator.NumGe, [index, length]))
           .invokeContinuation(fail);
     }
     if (node.hasEmptinessCheck) {
-      cps.ifTruthy(cps.applyBuiltin(BuiltinOperator.StrictEq,
-          [node.length, cps.makeZero()]))
+      cps
+          .ifTruthy(cps.applyBuiltin(
+              BuiltinOperator.StrictEq, [node.length, cps.makeZero()]))
           .invokeContinuation(fail);
     }
     cps.insideContinuation(fail).invokeStaticThrower(
-          helpers.throwIndexOutOfRangeException,
-          [node.object, index]);
-    node..replaceUsesWith(node.object)..destroy();
+        helpers.throwIndexOutOfRangeException, [node.object, index]);
+    node
+      ..replaceUsesWith(node.object)
+      ..destroy();
     return cps;
   }
 
   void visitGetStatic(GetStatic node) {
     if (node.witnessRef != null) {
-      node..witnessRef.unlink()..witnessRef = null;
+      node
+        ..witnessRef.unlink()
+        ..witnessRef = null;
     }
   }
 
@@ -93,7 +101,7 @@
       // after allocation.  After the finalize pass, this assumption is no
       // longer needed, so we can replace the remaining idenitity templates.
       Refinement refinement = new Refinement(node.argument(0), node.type)
-          ..type = node.type;
+        ..type = node.type;
       node.replaceWith(refinement);
     }
   }
diff --git a/pkg/compiler/lib/src/cps_ir/gvn.dart b/pkg/compiler/lib/src/cps_ir/gvn.dart
index d8eeff0..8970f5c 100644
--- a/pkg/compiler/lib/src/cps_ir/gvn.dart
+++ b/pkg/compiler/lib/src/cps_ir/gvn.dart
@@ -95,10 +95,10 @@
     // GetLazyStatic cannot have side effects because the field has already
     // been initialized.
     return prim.isSafeForElimination ||
-           prim is GetField ||
-           prim is GetLength ||
-           prim is GetIndex ||
-           prim is GetLazyStatic;
+        prim is GetField ||
+        prim is GetLength ||
+        prim is GetIndex ||
+        prim is GetLazyStatic;
   }
 
   @override
@@ -150,7 +150,9 @@
         Interceptor interceptor = existing;
         interceptor.interceptedClasses.addAll(prim.interceptedClasses);
       }
-      prim..replaceUsesWith(existing)..destroy();
+      prim
+        ..replaceUsesWith(existing)
+        ..destroy();
       node.remove();
       return next;
     }
@@ -247,7 +249,7 @@
     Continuation enclosingLoop = currentLoopHeader;
     Continuation hoistTarget = null;
     while (loopHierarchy.getDepth(enclosingLoop) > hoistDepth &&
-           canHoistHeapDependencyOutOfLoop(prim, enclosingLoop)) {
+        canHoistHeapDependencyOutOfLoop(prim, enclosingLoop)) {
       hoistTarget = enclosingLoop;
       enclosingLoop = loopHierarchy.getEnclosingLoop(enclosingLoop);
     }
@@ -294,17 +296,14 @@
 
     // Put the primitive in the environment while processing the loop.
     environment[gvn] = prim;
-    loopHoistedBindings
-        .putIfAbsent(hoistTarget, () => <int>[])
-        .add(gvn);
+    loopHoistedBindings.putIfAbsent(hoistTarget, () => <int>[]).add(gvn);
     return true;
   }
 
   /// If the given primitive is a trivial primitive that should be hoisted
   /// on-demand, hoist it and its dependent values above [loopBinding].
-  void hoistTrivialPrimitive(Primitive prim,
-                             LetCont loopBinding,
-                             Continuation enclosingLoop) {
+  void hoistTrivialPrimitive(
+      Primitive prim, LetCont loopBinding, Continuation enclosingLoop) {
     assert(isFastConstant(prim));
 
     // The primitive might already be bound in an outer scope.  Do not relocate
@@ -439,9 +438,11 @@
   final List vector;
   final int hashCode;
 
-  GvnEntry(List vector) : vector = vector, hashCode = computeHashCode(vector);
+  GvnEntry(List vector)
+      : vector = vector,
+        hashCode = computeHashCode(vector);
 
-  bool operator==(other) {
+  bool operator ==(other) {
     if (other is! GvnEntry) return false;
     GvnEntry entry = other;
     List otherVector = entry.vector;
@@ -461,7 +462,7 @@
       hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
       hash = hash ^ (hash >> 6);
     }
-    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) <<  3));
+    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
     hash = hash ^ (hash >> 11);
     return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
   }
@@ -600,6 +601,7 @@
 }
 
 typedef ReferenceCallback(Reference ref);
+
 class InputVisitor extends DeepRecursiveVisitor {
   ReferenceCallback callback;
 
diff --git a/pkg/compiler/lib/src/cps_ir/inline.dart b/pkg/compiler/lib/src/cps_ir/inline.dart
index 076e809..cbb673d 100644
--- a/pkg/compiler/lib/src/cps_ir/inline.dart
+++ b/pkg/compiler/lib/src/cps_ir/inline.dart
@@ -14,8 +14,8 @@
 import '../elements/elements.dart';
 import '../js_backend/js_backend.dart' show JavaScriptBackend;
 import '../js_backend/codegen/task.dart' show CpsFunctionCompiler;
-import '../types/types.dart' show
-    FlatTypeMask, ForwardingTypeMask, TypeMask, UnionTypeMask;
+import '../types/types.dart'
+    show FlatTypeMask, ForwardingTypeMask, TypeMask, UnionTypeMask;
 import '../universe/call_structure.dart' show CallStructure;
 import '../universe/selector.dart' show Selector;
 import 'package:js_ast/js_ast.dart' as js;
@@ -62,7 +62,7 @@
     if (callStructure == null) {
       if (otherCallStructure != null) return false;
     } else if (otherCallStructure == null ||
-               !callStructure.match(otherCallStructure)) {
+        !callStructure.match(otherCallStructure)) {
       return false;
     }
 
@@ -97,20 +97,23 @@
   // copied because the compiler passes will mutate them.
   final CopyingVisitor copier = new CopyingVisitor();
 
-  void _putInternal(ExecutableElement element, CallStructure callStructure,
+  void _putInternal(
+      ExecutableElement element,
+      CallStructure callStructure,
       TypeMask receiver,
       List<TypeMask> arguments,
       bool decision,
       FunctionDefinition function) {
-    map.putIfAbsent(element, () => <CacheEntry>[])
-        .add(new CacheEntry(callStructure, receiver, arguments, decision,
-            function));
+    map.putIfAbsent(element, () => <CacheEntry>[]).add(
+        new CacheEntry(callStructure, receiver, arguments, decision, function));
   }
 
   /// Put a positive inlining decision in the cache.
   ///
   /// A positive inlining decision maps to an IR function definition.
-  void putPositive(ExecutableElement element, CallStructure callStructure,
+  void putPositive(
+      ExecutableElement element,
+      CallStructure callStructure,
       TypeMask receiver,
       List<TypeMask> arguments,
       FunctionDefinition function) {
@@ -119,10 +122,8 @@
   }
 
   /// Put a negative inlining decision in the cache.
-  void putNegative(ExecutableElement element,
-      CallStructure callStructure,
-      TypeMask receiver,
-      List<TypeMask> arguments) {
+  void putNegative(ExecutableElement element, CallStructure callStructure,
+      TypeMask receiver, List<TypeMask> arguments) {
     _putInternal(element, callStructure, receiver, arguments, false, null);
   }
 
@@ -188,10 +189,11 @@
     if (element is ConstructorBodyElement) {
       ClassElement class_ = element.enclosingClass;
       return !functionCompiler.compiler.world.hasAnyStrictSubclass(class_) &&
-          class_.constructors.tail?.isEmpty ?? false;
+              class_.constructors.tail?.isEmpty ??
+          false;
     }
-    return functionCompiler.compiler.typesTask.typesInferrer.isCalledOnce(
-        element);
+    return functionCompiler.compiler.typesTask.typesInferrer
+        .isCalledOnce(element);
   }
 
   void rewrite(FunctionDefinition node, [CallStructure callStructure]) {
@@ -344,25 +346,21 @@
   /// function that takes optional arguments not passed at the call site.
   FunctionDefinition buildAdapter(InvokeMethod node, FunctionElement target) {
     Parameter thisParameter = new Parameter(new ThisParameterLocal(target))
-        ..type = node.receiver.type;
-    Parameter interceptorParameter = node.interceptorRef != null
-        ? new Parameter(null)
-        : null;
-    List<Parameter> parameters = new List<Parameter>.generate(
-        node.argumentRefs.length,
-        (int index) {
-          // TODO(kmillikin): Use a hint for the parameter names.
-          return new Parameter(null)
-              ..type = node.argument(index).type;
-        });
+      ..type = node.receiver.type;
+    Parameter interceptorParameter =
+        node.interceptorRef != null ? new Parameter(null) : null;
+    List<Parameter> parameters =
+        new List<Parameter>.generate(node.argumentRefs.length, (int index) {
+      // TODO(kmillikin): Use a hint for the parameter names.
+      return new Parameter(null)..type = node.argument(index).type;
+    });
     Continuation returnContinuation = new Continuation.retrn();
     CpsFragment cps = new CpsFragment();
 
     FunctionSignature signature = target.functionSignature;
     int requiredParameterCount = signature.requiredParameterCount;
     List<Primitive> arguments = new List<Primitive>.generate(
-        requiredParameterCount,
-        (int index) => parameters[index]);
+        requiredParameterCount, (int index) => parameters[index]);
 
     int parameterIndex = requiredParameterCount;
     CallStructure newCallStructure;
@@ -400,21 +398,17 @@
       newCallStructure = new CallStructure(signature.parameterCount);
     }
 
-    Selector newSelector =
-        new Selector(node.selector.kind, node.selector.memberName,
-            newCallStructure);
-    Primitive result = cps.invokeMethod(thisParameter,
-        newSelector,
-        node.mask,
-        arguments,
+    Selector newSelector = new Selector(
+        node.selector.kind, node.selector.memberName, newCallStructure);
+    Primitive result = cps.invokeMethod(
+        thisParameter, newSelector, node.mask, arguments,
         interceptor: interceptorParameter,
         callingConvention: node.callingConvention);
     result.type = typeSystem.getInvokeReturnType(node.selector, node.mask);
     returnContinuation.parameters.single.type = result.type;
     cps.invokeContinuation(returnContinuation, <Primitive>[result]);
-    return new FunctionDefinition(target, thisParameter, parameters,
-        returnContinuation,
-        cps.root,
+    return new FunctionDefinition(
+        target, thisParameter, parameters, returnContinuation, cps.root,
         interceptorParameter: interceptorParameter);
   }
 
@@ -427,7 +421,7 @@
   // if the call was inlined, and the inlined function body is available in
   // [_fragment].  If the call was not inlined, null is returned.
   Primitive tryInlining(InvocationPrimitive invoke, FunctionElement target,
-                        CallStructure callStructure) {
+      CallStructure callStructure) {
     // Quick checks: do not inline or even cache calls to targets without an
     // AST node, targets that are asynchronous or generator functions, or
     // targets containing a try statement.
@@ -468,9 +462,8 @@
             : abstractReceiver.nonNullable();
     List<TypeMask> abstractArguments =
         invoke.arguments.map(abstractType).toList();
-    var cachedResult = _inliner.cache.get(target, callStructure,
-        abstractReceiverInMethod,
-        abstractArguments);
+    var cachedResult = _inliner.cache.get(
+        target, callStructure, abstractReceiverInMethod, abstractArguments);
 
     // Negative inlining result in the cache.
     if (cachedResult == InliningCache.NO_INLINE) return null;
@@ -482,11 +475,11 @@
       // Add a null check to the inlined function body if necessary.  The
       // cached function body does not contain the null check.
       if (receiver != null && abstractReceiver.isNullable) {
-        receiver = nullReceiverGuard(
-            invoke, _fragment, receiver, abstractReceiver);
+        receiver =
+            nullReceiverGuard(invoke, _fragment, receiver, abstractReceiver);
       }
       return _fragment.inlineFunction(function, receiver, arguments,
-            interceptor: invoke.interceptor, hint: invoke.hint);
+          interceptor: invoke.interceptor, hint: invoke.hint);
     }
 
     // Positive inlining result in the cache.
@@ -542,35 +535,30 @@
     return finish(function);
   }
 
-  Primitive nullReceiverGuard(InvocationPrimitive invoke,
-                              CpsFragment fragment,
-                              Primitive dartReceiver,
-                              TypeMask abstractReceiver) {
+  Primitive nullReceiverGuard(InvocationPrimitive invoke, CpsFragment fragment,
+      Primitive dartReceiver, TypeMask abstractReceiver) {
     if (invoke is! InvokeMethod) return dartReceiver;
     InvokeMethod invokeMethod = invoke;
     Selector selector = invokeMethod.selector;
     if (typeSystem.isDefinitelyNum(abstractReceiver, allowNull: true)) {
-      Primitive condition = _fragment.letPrim(
-          new ApplyBuiltinOperator(BuiltinOperator.IsNotNumber,
-                                   <Primitive>[dartReceiver],
-                                   invoke.sourceInformation));
+      Primitive condition = _fragment.letPrim(new ApplyBuiltinOperator(
+          BuiltinOperator.IsNotNumber,
+          <Primitive>[dartReceiver],
+          invoke.sourceInformation));
       condition.type = typeSystem.boolType;
-      Primitive check = _fragment.letPrim(
-          new ReceiverCheck.nullCheck(dartReceiver, selector,
-              invoke.sourceInformation,
-              condition: condition));
+      Primitive check = _fragment.letPrim(new ReceiverCheck.nullCheck(
+          dartReceiver, selector, invoke.sourceInformation,
+          condition: condition));
       check.type = abstractReceiver.nonNullable();
       return check;
     }
 
-    Primitive check = _fragment.letPrim(
-        new ReceiverCheck.nullCheck(dartReceiver, selector,
-            invoke.sourceInformation));
+    Primitive check = _fragment.letPrim(new ReceiverCheck.nullCheck(
+        dartReceiver, selector, invoke.sourceInformation));
     check.type = abstractReceiver.nonNullable();
     return check;
   }
 
-
   @override
   Primitive visitInvokeStatic(InvokeStatic node) {
     return tryInlining(node, node.target, null);
@@ -585,8 +573,8 @@
     if (node.selector.isSetter != element.isSetter) return null;
     if (node.selector.name != element.name) return null;
 
-    return tryInlining(node, element.asFunctionElement(),
-        node.selector.callStructure);
+    return tryInlining(
+        node, element.asFunctionElement(), node.selector.callStructure);
   }
 
   @override
@@ -613,8 +601,8 @@
     ClassElement enclosingClass = target.enclosingClass;
     if (target.isOperator &&
         (enclosingClass == backend.helpers.jsNumberClass ||
-         enclosingClass == backend.helpers.jsDoubleClass ||
-         enclosingClass == backend.helpers.jsIntClass)) {
+            enclosingClass == backend.helpers.jsDoubleClass ||
+            enclosingClass == backend.helpers.jsIntClass)) {
       // These should be handled by operator specialization.
       return true;
     }
diff --git a/pkg/compiler/lib/src/cps_ir/insert_refinements.dart b/pkg/compiler/lib/src/cps_ir/insert_refinements.dart
index d5412c6..28d013f 100644
--- a/pkg/compiler/lib/src/cps_ir/insert_refinements.dart
+++ b/pkg/compiler/lib/src/cps_ir/insert_refinements.dart
@@ -118,15 +118,14 @@
       // Skip arguments that provide no refinement.
       if (argSuccessType == types.dynamicType) continue;
 
-      applyRefinement(node.parent,
-          new Refinement(node.argument(i), argSuccessType));
+      applyRefinement(
+          node.parent, new Refinement(node.argument(i), argSuccessType));
     }
   }
 
   void visitInvokeStatic(InvokeStatic node) {
     node.argumentRefs.forEach(processReference);
-    _refineArguments(node,
-        _getSuccessTypesForStaticMethod(types, node.target));
+    _refineArguments(node, _getSuccessTypesForStaticMethod(types, node.target));
   }
 
   void visitInvokeMethod(InvokeMethod node) {
@@ -150,8 +149,8 @@
 
       // Refine arguments of methods on numbers which we know will throw on
       // invalid argument values.
-      _refineArguments(node,
-          _getSuccessTypesForInstanceMethod(types, type, selector));
+      _refineArguments(
+          node, _getSuccessTypesForInstanceMethod(types, type, selector));
     }
   }
 
@@ -212,10 +211,8 @@
     // This can happen either for calls to `==` or `identical` calls, such
     // as the ones inserted by the unsugaring pass.
 
-    void refineEquality(Primitive first,
-                        Primitive second,
-                        Continuation trueCont,
-                        Continuation falseCont) {
+    void refineEquality(Primitive first, Primitive second,
+        Continuation trueCont, Continuation falseCont) {
       if (second is Constant && second.value.isNull) {
         Refinement refinedTrue = new Refinement(first, types.nullType);
         Refinement refinedFalse = new Refinement(first, types.nonNullType);
@@ -233,19 +230,15 @@
     }
 
     if (condition is InvokeMethod && condition.selector == Selectors.equals) {
-      refineEquality(condition.receiver,
-                     condition.argument(0),
-                     trueCont,
-                     falseCont);
+      refineEquality(
+          condition.receiver, condition.argument(0), trueCont, falseCont);
       return;
     }
 
     if (condition is ApplyBuiltinOperator &&
         condition.operator == BuiltinOperator.Identical) {
-      refineEquality(condition.argument(0),
-                     condition.argument(1),
-                     trueCont,
-                     falseCont);
+      refineEquality(
+          condition.argument(0), condition.argument(1), trueCont, falseCont);
       return;
     }
 
@@ -292,7 +285,7 @@
         return [types.intType];
 
       case 'modPow':
-       return [types.intType, types.intType];
+        return [types.intType, types.intType];
     }
     // Note: num methods on int values are handled below.
   }
@@ -300,13 +293,13 @@
   if (types.isDefinitelyNum(receiver)) {
     switch (selector.name) {
       case 'clamp':
-          return [types.numType, types.numType];
+        return [types.numType, types.numType];
       case 'toStringAsFixed':
       case 'toStringAsPrecision':
       case 'toRadixString':
-          return [types.intType];
+        return [types.intType];
       case 'toStringAsExponential':
-          return [types.intType.nullable()];
+        return [types.intType.nullable()];
       case 'compareTo':
       case 'remainder':
       case '+':
@@ -324,7 +317,7 @@
       case '>':
       case '<=':
       case '>=':
-          return [types.numType];
+        return [types.numType];
       default:
         return null;
     }
@@ -385,7 +378,7 @@
       case 'sublist':
         return [types.uintType, types.uintType.nullable()];
       case 'length':
-         return selector.isSetter ? [types.uintType] : null;
+        return selector.isSetter ? [types.uintType] : null;
       case '[]':
       case '[]=':
         return [types.uintType];
@@ -410,7 +403,7 @@
   }
 
   if (lib.isPlatformLibrary && '${lib.canonicalUri}' == 'dart:math') {
-    switch(target.name) {
+    switch (target.name) {
       case 'sqrt':
       case 'sin':
       case 'cos':
diff --git a/pkg/compiler/lib/src/cps_ir/loop_effects.dart b/pkg/compiler/lib/src/cps_ir/loop_effects.dart
index 4a73e5d..d7c3c6f 100644
--- a/pkg/compiler/lib/src/cps_ir/loop_effects.dart
+++ b/pkg/compiler/lib/src/cps_ir/loop_effects.dart
@@ -85,7 +85,8 @@
         if (inner == null) {
           // The shrinking reductions pass must run before any pass that relies
           // on computing loop side effects.
-          world.compiler.reporter.internalError(null,
+          world.compiler.reporter.internalError(
+              null,
               'Unreachable continuations must be removed before computing '
               'loop side effects.');
         }
diff --git a/pkg/compiler/lib/src/cps_ir/loop_hierarchy.dart b/pkg/compiler/lib/src/cps_ir/loop_hierarchy.dart
index 57d71207..35d9b76 100644
--- a/pkg/compiler/lib/src/cps_ir/loop_hierarchy.dart
+++ b/pkg/compiler/lib/src/cps_ir/loop_hierarchy.dart
@@ -123,8 +123,7 @@
         target = loopTarget[node.continuation];
       }
     } else if (node is Branch) {
-      target = _markInnerLoop(
-          loopTarget[node.trueContinuation],
+      target = _markInnerLoop(loopTarget[node.trueContinuation],
           loopTarget[node.falseContinuation]);
     } else if (node == null) {
       // If the code ends abruptly, use the exit loop provided in [update].
@@ -166,8 +165,7 @@
   /// [catchLoop] is the loop target for the catch clause of the try/catch
   /// surrounding the inserted fragment.
   void update(CpsFragment fragment,
-              {Continuation exitLoop,
-               Continuation catchLoop}) {
+      {Continuation exitLoop, Continuation catchLoop}) {
     if (fragment.isEmpty) return;
     _exitLoop = exitLoop;
     _currentDepth = getDepth(exitLoop);
diff --git a/pkg/compiler/lib/src/cps_ir/loop_invariant_branch.dart b/pkg/compiler/lib/src/cps_ir/loop_invariant_branch.dart
index 98df30a..95ee597 100644
--- a/pkg/compiler/lib/src/cps_ir/loop_invariant_branch.dart
+++ b/pkg/compiler/lib/src/cps_ir/loop_invariant_branch.dart
@@ -121,7 +121,8 @@
       Node use = ref.parent;
       if (use is InvokeContinuation) {
         for (Parameter loopParam in parameters) {
-          use.argumentRefs.add(new Reference<Primitive>(loopParam)..parent = use);
+          use.argumentRefs
+              .add(new Reference<Primitive>(loopParam)..parent = use);
         }
       }
     }
@@ -148,7 +149,7 @@
       hoistedCase = trueCont;
       loopCase = falseCont;
     } else if (loopHierarchy.getLoopHeader(falseCont) != loop &&
-               loopHierarchy.getLoopHeader(trueCont) == loop) {
+        loopHierarchy.getLoopHeader(trueCont) == loop) {
       hoistedCase = falseCont;
       loopCase = trueCont;
     } else {
@@ -211,13 +212,12 @@
     //     branch b newTrue newFalse
     //
     InvokeContinuation loopEntry = loopBinding.body;
-    List<Primitive> loopArgs =
-        loopEntry.arguments.toList();
+    List<Primitive> loopArgs = loopEntry.arguments.toList();
     CpsFragment cps = new CpsFragment();
-    cps.branch(condition,
-          strict: branch.isStrictCheck,
-          negate: hoistedCase == falseCont)
-       .invokeContinuation(hoistedCase, loopArgs);
+    cps
+        .branch(condition,
+            strict: branch.isStrictCheck, negate: hoistedCase == falseCont)
+        .invokeContinuation(hoistedCase, loopArgs);
 
     // The continuations created in the fragment need to have their loop header
     // set so the loop hierarchy remains intact
diff --git a/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart b/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart
index 0c86696..ee44978 100644
--- a/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart
+++ b/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart
@@ -110,8 +110,7 @@
   }
 
   bool isJoinContinuation(Continuation cont) {
-    return !cont.hasExactlyOneUse ||
-           cont.firstRef.parent is InvokeContinuation;
+    return !cont.hasExactlyOneUse || cont.firstRef.parent is InvokeContinuation;
   }
 
   /// If some useful source information is attached to exactly one of the
@@ -131,8 +130,8 @@
   /// will be mutated during the processing.
   ///
   /// Continuations to be processed are put on the stack for later processing.
-  void processBlock(Expression node,
-                    Map<MutableVariable, Primitive> environment) {
+  void processBlock(
+      Expression node, Map<MutableVariable, Primitive> environment) {
     Expression next = node.next;
     for (; node is! TailExpression; node = next, next = node.next) {
       if (node is LetMutable && shouldRewrite(node.variable)) {
@@ -221,12 +220,9 @@
       // Enqueue both branches with the current environment.
       // Clone the environments once so the processing of one branch does not
       // mutate the environment needed to process the other branch.
-      stack.add(new ContinuationItem(
-          node.trueContinuation,
+      stack.add(new ContinuationItem(node.trueContinuation,
           new Map<MutableVariable, Primitive>.from(environment)));
-      stack.add(new ContinuationItem(
-          node.falseContinuation,
-          environment));
+      stack.add(new ContinuationItem(node.falseContinuation, environment));
     } else {
       assert(node is Throw || node is Unreachable);
     }
diff --git a/pkg/compiler/lib/src/cps_ir/octagon.dart b/pkg/compiler/lib/src/cps_ir/octagon.dart
index 691c15d..83feb77 100644
--- a/pkg/compiler/lib/src/cps_ir/octagon.dart
+++ b/pkg/compiler/lib/src/cps_ir/octagon.dart
@@ -72,8 +72,8 @@
     SignedVariable v1 = new SignedVariable._make();
     if (min != null) {
       // v1 >= min   <==>   -v1 - v1 <= -2 * min
-      v1.negated._constraints.add(
-          new Constraint(v1.negated, v1.negated, -2 * min));
+      v1.negated._constraints
+          .add(new Constraint(v1.negated, v1.negated, -2 * min));
     }
     if (max != null) {
       // v1 <= max   <==>   v1 + v1 <= 2 * max
diff --git a/pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart b/pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart
index 9dd05c7b..65500a5 100644
--- a/pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart
+++ b/pkg/compiler/lib/src/cps_ir/optimize_interceptors.dart
@@ -59,10 +59,10 @@
 
   bool hasNoFalsyValues(ClassElement class_) {
     return class_ != helpers.jsInterceptorClass &&
-       class_ != helpers.jsNullClass &&
-       class_ != helpers.jsBoolClass &&
-       class_ != helpers.jsStringClass &&
-       !class_.isSubclassOf(helpers.jsNumberClass);
+        class_ != helpers.jsNullClass &&
+        class_ != helpers.jsBoolClass &&
+        class_ != helpers.jsStringClass &&
+        !class_.isSubclassOf(helpers.jsNumberClass);
   }
 
   Continuation getCurrentOuterLoop({Continuation scope}) {
@@ -79,10 +79,10 @@
   /// The constant will be hoisted out of loops, and shared with other requests
   /// for the same constant as long as it is in scope.
   Primitive makeConstantFor(ConstantValue constant,
-                            {Expression useSite,
-                             TypeMask type,
-                             SourceInformation sourceInformation,
-                             Entity hint}) {
+      {Expression useSite,
+      TypeMask type,
+      SourceInformation sourceInformation,
+      Entity hint}) {
     Constant prim =
         new Constant(constant, sourceInformation: sourceInformation);
     prim.hint = hint;
@@ -107,8 +107,8 @@
         TypeMask type = use.receiver.type;
         bool canOccurAsReceiver(ClassElement elem) {
           return classWorld.isInstantiated(elem) &&
-              !typeSystem.areDisjoint(type,
-                  typeSystem.getInterceptorSubtypes(elem));
+              !typeSystem.areDisjoint(
+                  type, typeSystem.getInterceptorSubtypes(elem));
         }
         Iterable<ClassElement> classes =
             backend.getInterceptedClassesOn(use.selector.name);
@@ -210,7 +210,9 @@
           type: interceptor.type,
           sourceInformation: interceptor.sourceInformation);
       constantPrim.useElementAsHint(interceptor.hint);
-      interceptor..replaceUsesWith(constantPrim)..destroy();
+      interceptor
+        ..replaceUsesWith(constantPrim)
+        ..destroy();
       let.remove();
     } else {
       Primitive constantPrim = makeConstantFor(constant,
@@ -226,15 +228,16 @@
         cps.ifFalsy(input).invokeContinuation(cont, [input]);
       } else {
         // If there are other falsy values compile as "x == null ? x : CONST".
-        Primitive condition = cps.applyBuiltin(
-            BuiltinOperator.LooseEq,
-            [input, cps.makeNull()]);
+        Primitive condition =
+            cps.applyBuiltin(BuiltinOperator.LooseEq, [input, cps.makeNull()]);
         cps.ifTruthy(condition).invokeContinuation(cont, [input]);
       }
       cps.invokeContinuation(cont, [constantPrim]);
       cps.context = cont;
       cps.insertAbove(let);
-      interceptor..replaceUsesWith(param)..destroy();
+      interceptor
+        ..replaceUsesWith(param)
+        ..destroy();
       let.remove();
     }
     return true;
@@ -303,7 +306,9 @@
       Constant existing = sharedConstantFor[prim.value];
       if (existing != null) {
         existing.useElementAsHint(prim.hint);
-        prim..replaceUsesWith(existing)..destroy();
+        prim
+          ..replaceUsesWith(existing)
+          ..destroy();
         node.remove();
         return next;
       }
diff --git a/pkg/compiler/lib/src/cps_ir/optimizers.dart b/pkg/compiler/lib/src/cps_ir/optimizers.dart
index 2b248fe..8af5154 100644
--- a/pkg/compiler/lib/src/cps_ir/optimizers.dart
+++ b/pkg/compiler/lib/src/cps_ir/optimizers.dart
@@ -42,7 +42,7 @@
 /// Returns true if [value] is false, null, 0, -0, NaN, or the empty string.
 bool isFalsyConstant(ConstantValue value) {
   return value.isFalse ||
-      value.isNull  ||
+      value.isNull ||
       value.isZero ||
       value.isMinusZero ||
       value.isNaN ||
@@ -59,6 +59,10 @@
 
 /// Selectors that do not throw when invoked on the null value.
 final List<Selector> selectorsOnNull = <Selector>[
-    Selectors.equals, Selectors.hashCode_, Selectors.runtimeType_,
-    Selectors.toString_, Selectors.toStringGetter,
-    Selectors.noSuchMethodGetter];
+  Selectors.equals,
+  Selectors.hashCode_,
+  Selectors.runtimeType_,
+  Selectors.toString_,
+  Selectors.toStringGetter,
+  Selectors.noSuchMethodGetter
+];
diff --git a/pkg/compiler/lib/src/cps_ir/parent_visitor.dart b/pkg/compiler/lib/src/cps_ir/parent_visitor.dart
index 33896e0..bb98c33 100644
--- a/pkg/compiler/lib/src/cps_ir/parent_visitor.dart
+++ b/pkg/compiler/lib/src/cps_ir/parent_visitor.dart
@@ -40,4 +40,3 @@
     node.parent = _parent;
   }
 }
-
diff --git a/pkg/compiler/lib/src/cps_ir/path_based_optimizer.dart b/pkg/compiler/lib/src/cps_ir/path_based_optimizer.dart
index 965a632..933111e 100644
--- a/pkg/compiler/lib/src/cps_ir/path_based_optimizer.dart
+++ b/pkg/compiler/lib/src/cps_ir/path_based_optimizer.dart
@@ -59,8 +59,7 @@
 // TODO(asgerf): Could be more precise if GVN shared expressions that are not
 // in direct scope of one another, e.g. by using phis pass the shared value.
 //
-class PathBasedOptimizer extends TrampolineRecursiveVisitor
-                         implements Pass {
+class PathBasedOptimizer extends TrampolineRecursiveVisitor implements Pass {
   String get passName => 'Path-based optimizations';
 
   // Classification of all values.
@@ -158,7 +157,7 @@
       // Only self-interceptors can respond to a non-intercepted selector.
       valueOf[node.receiver] = receiverValue & SELF_INTERCEPTOR;
     } else if (receiverValue & ~SELF_INTERCEPTOR == 0 &&
-               node.callingConvention == CallingConvention.Intercepted) {
+        node.callingConvention == CallingConvention.Intercepted) {
       // This is an intercepted call whose receiver is definitely a
       // self-interceptor.
       // TODO(25646): If TypeMasks could represent "any self-interceptor" this
@@ -167,8 +166,8 @@
 
       // Replace the extra receiver argument with a dummy value if the
       // target definitely does not use it.
-      if (typeSystem.targetIgnoresReceiverArgument(node.receiver.type,
-            node.selector)) {
+      if (typeSystem.targetIgnoresReceiverArgument(
+          node.receiver.type, node.selector)) {
         node.makeDummyIntercepted();
       }
     }
diff --git a/pkg/compiler/lib/src/cps_ir/redundant_join.dart b/pkg/compiler/lib/src/cps_ir/redundant_join.dart
index 59cac26..3ba1d61 100644
--- a/pkg/compiler/lib/src/cps_ir/redundant_join.dart
+++ b/pkg/compiler/lib/src/cps_ir/redundant_join.dart
@@ -20,7 +20,7 @@
 /// meaningless during this pass, until repaired by [AlphaRenamer] at
 /// the end.
 class RedundantJoinEliminator extends TrampolineRecursiveVisitor
-      implements Pass {
+    implements Pass {
   String get passName => 'Redundant join elimination';
 
   final Set<Branch> workSet = new Set<Branch>();
@@ -110,7 +110,7 @@
     // replacing a boolean variable with a labeled break.
     // TODO(asgerf): The labeled break might be better? Evaluate.
     if (!(trueHits == 1 && !trueCall.isEscapingTry ||
-          falseHits == 1 && !falseCall.isEscapingTry)) {
+        falseHits == 1 && !falseCall.isEscapingTry)) {
       return;
     }
 
@@ -140,8 +140,8 @@
           Expression use = ref.parent;
           if (use is InvokeContinuation) {
             for (Parameter param in branchCont.parameters) {
-              use.argumentRefs.add(
-                  new Reference<Primitive>(param)..parent = use);
+              use.argumentRefs
+                  .add(new Reference<Primitive>(param)..parent = use);
             }
           } else {
             // The branch will be eliminated, so don't worry about updating it.
diff --git a/pkg/compiler/lib/src/cps_ir/redundant_phi.dart b/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
index b612d13..96e6431 100644
--- a/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
+++ b/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
@@ -15,7 +15,8 @@
 /// (except for feedback). Redundant parameters are removed from the
 /// continuation signature, all invocations, and replaced within the
 /// continuation body.
-class RedundantPhiEliminator extends TrampolineRecursiveVisitor implements Pass {
+class RedundantPhiEliminator extends TrampolineRecursiveVisitor
+    implements Pass {
   String get passName => 'Redundant phi elimination';
 
   final Set<Continuation> workSet = new Set<Continuation>();
@@ -122,8 +123,8 @@
       // Add continuations of about-to-be modified invokes to worklist since
       // we might introduce new optimization opportunities.
       for (Reference ref = oldDefinition.firstRef;
-           ref != null;
-           ref = ref.next) {
+          ref != null;
+          ref = ref.next) {
         Node parent = ref.parent;
         if (parent is InvokeContinuation) {
           Continuation thatCont = parent.continuation;
diff --git a/pkg/compiler/lib/src/cps_ir/redundant_refinement.dart b/pkg/compiler/lib/src/cps_ir/redundant_refinement.dart
index cff47d6..8cd13b3 100644
--- a/pkg/compiler/lib/src/cps_ir/redundant_refinement.dart
+++ b/pkg/compiler/lib/src/cps_ir/redundant_refinement.dart
@@ -28,7 +28,7 @@
 /// Ideally, this pass should go away and GVN should handle refinements
 /// directly.
 class RedundantRefinementEliminator extends TrampolineRecursiveVisitor
-                                    implements Pass {
+    implements Pass {
   String get passName => 'Redundant refinement elimination';
 
   TypeMaskSystem typeSystem;
@@ -45,7 +45,9 @@
       Refinement refinement = node.primitive;
       Primitive value = refinement.value.definition;
       if (typeSystem.isMorePreciseOrEqual(value.type, refinement.refineType)) {
-        refinement..replaceUsesWith(value)..destroy();
+        refinement
+          ..replaceUsesWith(value)
+          ..destroy();
         node.remove();
         return next;
       }
diff --git a/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart b/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
index 5eb8156..a913f08 100644
--- a/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
+++ b/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
@@ -8,8 +8,7 @@
 import 'dart:collection' show Queue;
 
 import '../common.dart';
-import '../compiler.dart' as dart2js show
-    Compiler;
+import '../compiler.dart' as dart2js show Compiler;
 import '../constants/values.dart';
 import '../elements/elements.dart';
 import '../types/types.dart';
@@ -44,7 +43,6 @@
  * can create new candidates, iterate until all scalar replacements are done.
  */
 class ScalarReplacementVisitor extends TrampolineRecursiveVisitor {
-
   final InternalErrorFunction internalError;
   final World classWorld;
   ScalarReplacementRemovalVisitor removalVisitor;
@@ -71,7 +69,6 @@
   }
 
   void tryScalarReplacement(Primitive allocation) {
-
     // We can do scalar replacement of an aggregate if all uses of an allocation
     // are reads or writes.
     for (Reference ref = allocation.firstRef; ref != null; ref = ref.next) {
@@ -101,11 +98,10 @@
     if (allocation is CreateInstance) {
       int i = 0;
       allocation.classElement.forEachInstanceField(
-        (ClassElement enclosingClass, FieldElement field) {
-          Primitive argument = allocation.argument(i++);
-          fieldInitialValues[field] = argument;
-        },
-        includeSuperAndInjectedMembers: true);
+          (ClassElement enclosingClass, FieldElement field) {
+        Primitive argument = allocation.argument(i++);
+        fieldInitialValues[field] = argument;
+      }, includeSuperAndInjectedMembers: true);
     }
 
     // Create [MutableVariable]s for each written field. Initialize the
@@ -113,7 +109,7 @@
     // `null` constant if there is not initial value.
     Map<FieldElement, MutableVariable> cells =
         <FieldElement, MutableVariable>{};
-    InteriorNode insertionPoint = allocation.parent;  // LetPrim
+    InteriorNode insertionPoint = allocation.parent; // LetPrim
     for (FieldElement field in writes) {
       MutableVariable variable = new MutableVariable(field);
       variable.type = new TypeMask.nonNullEmpty();
@@ -214,7 +210,6 @@
   }
 }
 
-
 /// Visit a just-deleted subterm and unlink all [Reference]s in it.  Reconsider
 /// allocations for scalar replacement.
 class ScalarReplacementRemovalVisitor extends TrampolineRecursiveVisitor {
diff --git a/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart b/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
index 1c84ca6..3e3fd94 100644
--- a/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
+++ b/pkg/compiler/lib/src/cps_ir/shrinking_reductions.dart
@@ -39,9 +39,8 @@
   void _debugWorklist(FunctionDefinition root) {
     while (_worklist.isNotEmpty) {
       _ReductionTask task = _worklist.removeLast();
-      String irBefore = root.debugString({
-        task.node: '${task.kind} applied here'
-      });
+      String irBefore =
+          root.debugString({task.node: '${task.kind} applied here'});
       _processTask(task);
       Set seenRedexes = _worklist.where(isValidTask).toSet();
       Set actualRedexes = (new _RedexVisitor([])..visit(root)).worklist.toSet();
@@ -51,9 +50,7 @@
         print('\nBEFORE $task:\n');
         print(irBefore);
         print('\nAFTER $task:\n');
-        root.debugPrint({
-          missedTask.node: 'MISSED ${missedTask.kind}'
-        });
+        root.debugPrint({missedTask.node: 'MISSED ${missedTask.kind}'});
         throw 'Missed $missedTask after processing $task';
       }
     }
@@ -79,7 +76,7 @@
   /// Removes the given node from the CPS graph, replacing it with its body
   /// and marking it as deleted. The node's parent must be a [[InteriorNode]].
   void _removeNode(InteriorNode node) {
-    Node body           = node.body;
+    Node body = node.body;
     InteriorNode parent = node.parent;
     assert(parent.body == node);
 
@@ -291,8 +288,7 @@
       return;
     }
 
-    InvokeContinuation invoke = new InvokeContinuation(
-        target, <Primitive>[]
+    InvokeContinuation invoke = new InvokeContinuation(target, <Primitive>[]
         // TODO(sra): Add sourceInformation.
         /*, sourceInformation: branch.sourceInformation*/);
     branch.parent.body = invoke;
@@ -356,8 +352,8 @@
 
   void _checkUselessBranchTarget(Continuation continuation) {
     if (_isBranchTargetOfUselessIf(continuation)) {
-      _worklist.add(new _ReductionTask(_ReductionKind.BRANCH,
-          continuation.firstRef.parent));
+      _worklist.add(new _ReductionTask(
+          _ReductionKind.BRANCH, continuation.firstRef.parent));
     }
   }
 
@@ -375,8 +371,8 @@
     primitive = primitive.unrefined;
     if (primitive is Parameter) {
       if (_isDeadParameter(primitive)) {
-        _worklist.add(new _ReductionTask(_ReductionKind.DEAD_PARAMETER,
-                                         primitive));
+        _worklist
+            .add(new _ReductionTask(_ReductionKind.DEAD_PARAMETER, primitive));
       }
     } else if (primitive.parent is LetPrim) {
       LetPrim letPrim = primitive.parent;
@@ -400,15 +396,15 @@
 /// preventing it from being eliminated.
 bool _isDeadVal(LetPrim node) {
   return !_isRemoved(node) &&
-         node.primitive.hasNoRefinedUses &&
-         node.primitive.isSafeForElimination;
+      node.primitive.hasNoRefinedUses &&
+      node.primitive.isSafeForElimination;
 }
 
 /// Returns true iff the continuation is unused.
 bool _isDeadCont(Continuation cont) {
   return !_isRemoved(cont) &&
-         !cont.isReturnContinuation &&
-         !cont.hasAtLeastOneUse;
+      !cont.isReturnContinuation &&
+      !cont.hasAtLeastOneUse;
 }
 
 /// Returns true iff the continuation has a body (i.e., it is not the return
@@ -541,8 +537,7 @@
   if (falseBody is! InvokeContinuation) return false;
   InvokeContinuation trueInvoke = trueBody;
   InvokeContinuation falseInvoke = falseBody;
-  if (trueInvoke.continuation !=
-      falseInvoke.continuation) {
+  if (trueInvoke.continuation != falseInvoke.continuation) {
     return false;
   }
   // Matching zero arguments should be adequate, since isomorphic true and false
@@ -607,7 +602,7 @@
     // detect it.
     if (_isDeadCont(node)) {
       worklist.add(new _ReductionTask(_ReductionKind.DEAD_CONT, node));
-    } else if (_isBetaContLin(node)){
+    } else if (_isBetaContLin(node)) {
       worklist.add(new _ReductionTask(_ReductionKind.BETA_CONT_LIN, node));
     } else if (_isEtaCont(node)) {
       worklist.add(new _ReductionTask(_ReductionKind.ETA_CONT, node));
@@ -655,8 +650,8 @@
       if (parent is LetPrim && _isDeadVal(parent)) {
         worklist.add(new _ReductionTask(_ReductionKind.DEAD_VAL, parent));
       } else if (primitive is Parameter && _isDeadParameter(primitive)) {
-        worklist.add(new _ReductionTask(_ReductionKind.DEAD_PARAMETER,
-            primitive));
+        worklist
+            .add(new _ReductionTask(_ReductionKind.DEAD_PARAMETER, primitive));
       }
     } else if (reference.definition is Continuation) {
       Continuation cont = reference.definition;
@@ -703,11 +698,13 @@
   }
 
   _ReductionTask(this.kind, this.node) {
-    assert(node is Continuation || node is LetPrim || node is Parameter ||
-           node is Branch);
+    assert(node is Continuation ||
+        node is LetPrim ||
+        node is Parameter ||
+        node is Branch);
   }
 
-  bool operator==(_ReductionTask that) {
+  bool operator ==(_ReductionTask that) {
     return (that.kind == this.kind && that.node == this.node);
   }
 
diff --git a/pkg/compiler/lib/src/cps_ir/type_mask_system.dart b/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
index b7a070e..c77bd02 100644
--- a/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
+++ b/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
@@ -104,9 +104,8 @@
           new TypeMask.nonNullSubtype(classWorld.stringClass, classWorld);
       TypeMask anyBool =
           new TypeMask.nonNullSubtype(classWorld.boolClass, classWorld);
-      _numStringBoolType =
-          new TypeMask.unionOf(<TypeMask>[anyNum, anyString, anyBool],
-              classWorld);
+      _numStringBoolType = new TypeMask.unionOf(
+          <TypeMask>[anyNum, anyString, anyBool], classWorld);
     }
     return _numStringBoolType;
   }
@@ -114,8 +113,10 @@
   @override
   TypeMask get fixedLengthType {
     if (_fixedLengthType == null) {
-      List<TypeMask> fixedLengthTypes =
-          <TypeMask>[stringType, backend.fixedArrayType];
+      List<TypeMask> fixedLengthTypes = <TypeMask>[
+        stringType,
+        backend.fixedArrayType
+      ];
       if (classWorld.isInstantiated(helpers.typedArrayClass)) {
         fixedLengthTypes.add(nonNullSubclass(helpers.typedArrayClass));
       }
@@ -128,13 +129,14 @@
   TypeMask get interceptorType {
     if (_interceptorType == null) {
       _interceptorType =
-        new TypeMask.nonNullSubtype(helpers.jsInterceptorClass, classWorld);
+          new TypeMask.nonNullSubtype(helpers.jsInterceptorClass, classWorld);
     }
     return _interceptorType;
   }
 
   @override
-  TypeMask get interceptedTypes { // Does not include null.
+  TypeMask get interceptedTypes {
+    // Does not include null.
     if (_interceptedTypes == null) {
       // We redundantly include subtypes of num/string/bool as intercepted
       // types, because the type system does not infer that their
@@ -154,9 +156,8 @@
           new TypeMask.nonNullSubtype(helpers.jsIndexableClass, classWorld);
       TypeMask anyString =
           new TypeMask.nonNullSubtype(classWorld.stringClass, classWorld);
-      __indexableTypeTest = new TypeMask.unionOf(
-          <TypeMask>[indexable, anyString],
-          classWorld);
+      __indexableTypeTest =
+          new TypeMask.unionOf(<TypeMask>[indexable, anyString], classWorld);
     }
     return __indexableTypeTest;
   }
@@ -169,15 +170,14 @@
   TypeMaskSystem(dart2js.Compiler compiler)
       : inferrer = compiler.typesTask,
         classWorld = compiler.world,
-        backend = compiler.backend {
-  }
+        backend = compiler.backend {}
 
   @override
   bool methodIgnoresReceiverArgument(FunctionElement function) {
     assert(backend.isInterceptedMethod(function));
     ClassElement clazz = function.enclosingClass.declaration;
     return !clazz.isSubclassOf(helpers.jsInterceptorClass) &&
-           !classWorld.isUsedAsMixin(clazz);
+        !classWorld.isUsedAsMixin(clazz);
   }
 
   @override
@@ -191,7 +191,7 @@
       if (target is! FunctionElement) return false;
       FunctionElement function = target;
       return selector.isGetter && !function.isGetter ||
-             !methodIgnoresReceiverArgument(function);
+          !methodIgnoresReceiverArgument(function);
     }
     return !classWorld.allFunctions.filter(selector, type).any(needsReceiver);
   }
@@ -271,8 +271,8 @@
     return a.intersection(b, classWorld);
   }
 
-  void associateConstantValueWithElement(ConstantValue constant,
-                                         Element element) {
+  void associateConstantValueWithElement(
+      ConstantValue constant, Element element) {
     // TODO(25093): Replace this code with an approach that works for anonymous
     // constants and non-constant literals.
     if (constant is ListConstantValue || constant is MapConstantValue) {
@@ -289,13 +289,13 @@
   @override
   TypeMask getTypeOf(ConstantValue constant) {
     return _constantMasks[constant] ??
-           computeTypeMask(inferrer.compiler, constant);
+        computeTypeMask(inferrer.compiler, constant);
   }
 
   @override
   ConstantValue getConstantOf(TypeMask mask) {
     if (!mask.isValue) return null;
-    if (mask.isNullable) return null;  // e.g. 'true or null'.
+    if (mask.isNullable) return null; // e.g. 'true or null'.
     ValueTypeMask valueMask = mask;
     if (valueMask.value.isBool) return valueMask.value;
     // TODO(sra): Consider other values. Be careful with large strings.
@@ -420,8 +420,9 @@
   @override
   bool isDefinitelyExtendableArray(TypeMask t, {bool allowNull: false}) {
     if (!allowNull && t.isNullable) return false;
-    return t.nonNullable().satisfies(helpers.jsExtendableArrayClass,
-                                     classWorld);
+    return t
+        .nonNullable()
+        .satisfies(helpers.jsExtendableArrayClass, classWorld);
   }
 
   @override
@@ -433,8 +434,9 @@
   @override
   bool isDefinitelyMutableIndexable(TypeMask t, {bool allowNull: false}) {
     if (!allowNull && t.isNullable) return false;
-    return t.nonNullable().satisfies(helpers.jsMutableIndexableClass,
-        classWorld);
+    return t
+        .nonNullable()
+        .satisfies(helpers.jsMutableIndexableClass, classWorld);
   }
 
   @override
@@ -480,9 +482,8 @@
   }
 
   @override
-  AbstractBool isSubtypeOf(TypeMask value,
-                           types.DartType type,
-                           {bool allowNull}) {
+  AbstractBool isSubtypeOf(TypeMask value, types.DartType type,
+      {bool allowNull}) {
     assert(allowNull != null);
     if (type is types.DynamicType) {
       return AbstractBool.True;
@@ -543,8 +544,7 @@
       if (element == classWorld.stringClass) {
         return stringType;
       }
-      if (element == classWorld.numClass ||
-          element == classWorld.doubleClass) {
+      if (element == classWorld.numClass || element == classWorld.doubleClass) {
         return numType;
       }
       if (element == classWorld.intClass) {
diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
index 3f982d1..50a73e0 100644
--- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
+++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
@@ -5,33 +5,23 @@
 
 import 'optimizers.dart';
 
-import '../closure.dart' show
-    ClosureClassElement;
+import '../closure.dart' show ClosureClassElement;
 import '../common.dart';
-import '../common/names.dart' show
-    Identifiers,
-    Selectors;
-import '../compiler.dart' as dart2js show
-    Compiler;
+import '../common/names.dart' show Identifiers, Selectors;
+import '../compiler.dart' as dart2js show Compiler;
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
 import '../dart_types.dart' as types;
 import '../elements/elements.dart';
-import '../io/source_information.dart' show
-    SourceInformation;
-import '../js_backend/backend_helpers.dart' show
-    BackendHelpers;
-import '../js_backend/js_backend.dart' show
-    JavaScriptBackend;
-import '../js_backend/codegen/task.dart' show
-    CpsFunctionCompiler;
+import '../io/source_information.dart' show SourceInformation;
+import '../js_backend/backend_helpers.dart' show BackendHelpers;
+import '../js_backend/js_backend.dart' show JavaScriptBackend;
+import '../js_backend/codegen/task.dart' show CpsFunctionCompiler;
 import '../resolution/operators.dart';
 import '../tree/tree.dart' as ast;
 import '../types/types.dart';
-import '../types/abstract_value_domain.dart' show
-    AbstractBool;
-import '../universe/selector.dart' show
-    Selector;
+import '../types/abstract_value_domain.dart' show AbstractBool;
+import '../universe/selector.dart' show Selector;
 import '../world.dart' show World;
 import 'cps_fragment.dart';
 import 'cps_ir_nodes.dart';
@@ -49,17 +39,17 @@
   final AbstractConstantValue falseValue;
 
   ConstantPropagationLattice(CpsFunctionCompiler functionCompiler)
-    : typeSystem = functionCompiler.typeSystem,
-      constantSystem = functionCompiler.compiler.backend.constantSystem,
-      dartTypes = functionCompiler.compiler.types,
-      anything = new AbstractConstantValue.nonConstant(
-          functionCompiler.typeSystem.dynamicType),
-      nullValue = new AbstractConstantValue.constantValue(
-          new NullConstantValue(), new TypeMask.empty()),
-      trueValue = new AbstractConstantValue.constantValue(
-          new TrueConstantValue(), functionCompiler.typeSystem.boolType),
-      falseValue = new AbstractConstantValue.constantValue(
-          new FalseConstantValue(), functionCompiler.typeSystem.boolType);
+      : typeSystem = functionCompiler.typeSystem,
+        constantSystem = functionCompiler.compiler.backend.constantSystem,
+        dartTypes = functionCompiler.compiler.types,
+        anything = new AbstractConstantValue.nonConstant(
+            functionCompiler.typeSystem.dynamicType),
+        nullValue = new AbstractConstantValue.constantValue(
+            new NullConstantValue(), new TypeMask.empty()),
+        trueValue = new AbstractConstantValue.constantValue(
+            new TrueConstantValue(), functionCompiler.typeSystem.boolType),
+        falseValue = new AbstractConstantValue.constantValue(
+            new FalseConstantValue(), functionCompiler.typeSystem.boolType);
 
   AbstractConstantValue constant(ConstantValue value, [TypeMask type]) {
     if (type == null) type = typeSystem.getTypeOf(value);
@@ -91,33 +81,33 @@
   /// True if all members of this value are booleans.
   bool isDefinitelyBool(AbstractConstantValue value, {bool allowNull: false}) {
     return value.isNothing ||
-      typeSystem.isDefinitelyBool(value.type, allowNull: allowNull);
+        typeSystem.isDefinitelyBool(value.type, allowNull: allowNull);
   }
 
   /// True if all members of this value are numbers.
   bool isDefinitelyNum(AbstractConstantValue value, {bool allowNull: false}) {
     return value.isNothing ||
-      typeSystem.isDefinitelyNum(value.type, allowNull: allowNull);
+        typeSystem.isDefinitelyNum(value.type, allowNull: allowNull);
   }
 
   /// True if all members of this value are strings.
   bool isDefinitelyString(AbstractConstantValue value,
-                          {bool allowNull: false}) {
+      {bool allowNull: false}) {
     return value.isNothing ||
-      typeSystem.isDefinitelyString(value.type, allowNull: allowNull);
+        typeSystem.isDefinitelyString(value.type, allowNull: allowNull);
   }
 
   /// True if all members of this value are numbers, strings, or booleans.
   bool isDefinitelyNumStringBool(AbstractConstantValue value,
-                                 {bool allowNull: false}) {
+      {bool allowNull: false}) {
     return value.isNothing ||
-      typeSystem.isDefinitelyNumStringBool(value.type, allowNull: allowNull);
+        typeSystem.isDefinitelyNumStringBool(value.type, allowNull: allowNull);
   }
 
   /// True if this value cannot be a string, number, or boolean.
   bool isDefinitelyNotNumStringBool(AbstractConstantValue value) {
     return value.isNothing ||
-      typeSystem.isDefinitelyNotNumStringBool(value.type);
+        typeSystem.isDefinitelyNotNumStringBool(value.type);
   }
 
   /// True if this value cannot be a non-integer double.
@@ -126,63 +116,58 @@
   /// it is a whole number and is not NaN, Infinity, or minus Infinity.
   bool isDefinitelyNotNonIntegerDouble(AbstractConstantValue value) {
     return value.isNothing ||
-      value.isConstant && !value.constant.isDouble ||
-      typeSystem.isDefinitelyNotNonIntegerDouble(value.type);
+        value.isConstant && !value.constant.isDouble ||
+        typeSystem.isDefinitelyNotNonIntegerDouble(value.type);
   }
 
-  bool isDefinitelyInt(AbstractConstantValue value,
-                       {bool allowNull: false}) {
+  bool isDefinitelyInt(AbstractConstantValue value, {bool allowNull: false}) {
     return value.isNothing ||
         typeSystem.isDefinitelyInt(value.type, allowNull: allowNull);
   }
 
   bool isDefinitelyUint31(AbstractConstantValue value,
-                          {bool allowNull: false}) {
+      {bool allowNull: false}) {
     return value.isNothing ||
         typeSystem.isDefinitelyUint31(value.type, allowNull: allowNull);
   }
 
   bool isDefinitelyUint32(AbstractConstantValue value,
-                          {bool allowNull: false}) {
+      {bool allowNull: false}) {
     return value.isNothing ||
         typeSystem.isDefinitelyUint32(value.type, allowNull: allowNull);
   }
 
-  bool isDefinitelyUint(AbstractConstantValue value,
-                       {bool allowNull: false}) {
+  bool isDefinitelyUint(AbstractConstantValue value, {bool allowNull: false}) {
     return value.isNothing ||
         typeSystem.isDefinitelyUint(value.type, allowNull: allowNull);
   }
 
-  bool isDefinitelyArray(AbstractConstantValue value,
-                              {bool allowNull: false}) {
+  bool isDefinitelyArray(AbstractConstantValue value, {bool allowNull: false}) {
     return value.isNothing ||
         typeSystem.isDefinitelyArray(value.type, allowNull: allowNull);
   }
 
   bool isDefinitelyMutableArray(AbstractConstantValue value,
-                                     {bool allowNull: false}) {
+      {bool allowNull: false}) {
     return value.isNothing ||
-         typeSystem.isDefinitelyMutableArray(value.type,
-                                                  allowNull: allowNull);
+        typeSystem.isDefinitelyMutableArray(value.type, allowNull: allowNull);
   }
 
   bool isDefinitelyFixedArray(AbstractConstantValue value,
-                              {bool allowNull: false}) {
+      {bool allowNull: false}) {
     return value.isNothing ||
-        typeSystem.isDefinitelyFixedArray(value.type,
-                                          allowNull: allowNull);
+        typeSystem.isDefinitelyFixedArray(value.type, allowNull: allowNull);
   }
 
   bool isDefinitelyExtendableArray(AbstractConstantValue value,
-                                   {bool allowNull: false}) {
+      {bool allowNull: false}) {
     return value.isNothing ||
         typeSystem.isDefinitelyExtendableArray(value.type,
-                                               allowNull: allowNull);
+            allowNull: allowNull);
   }
 
   bool isDefinitelyIndexable(AbstractConstantValue value,
-                             {bool allowNull: false}) {
+      {bool allowNull: false}) {
     return value.isNothing ||
         typeSystem.isDefinitelyIndexable(value.type, allowNull: allowNull);
   }
@@ -210,9 +195,8 @@
   /// If [allowNull] is true, `null` is considered an instance of anything,
   /// otherwise it is only considered an instance of [Object], [dynamic], and
   /// [Null].
-  AbstractBool isSubtypeOf(AbstractConstantValue value,
-                           types.DartType type,
-                           {bool allowNull}) {
+  AbstractBool isSubtypeOf(AbstractConstantValue value, types.DartType type,
+      {bool allowNull}) {
     assert(allowNull != null);
     if (value.isNothing) {
       return AbstractBool.Nothing;
@@ -232,8 +216,8 @@
       }
       if (type == dartTypes.coreTypes.intType) {
         return constantSystem.isInt(value.constant)
-          ? AbstractBool.True
-          : AbstractBool.False;
+            ? AbstractBool.True
+            : AbstractBool.False;
       }
       types.DartType valueType = value.constant.getType(dartTypes.coreTypes);
       if (constantSystem.isSubtype(dartTypes, valueType, type)) {
@@ -256,8 +240,8 @@
   ///
   /// This method returns `null` if a good result could not be found. In that
   /// case, it is best to fall back on interprocedural type information.
-  AbstractConstantValue unaryOp(UnaryOperator operator,
-                                AbstractConstantValue value) {
+  AbstractConstantValue unaryOp(
+      UnaryOperator operator, AbstractConstantValue value) {
     switch (operator.kind) {
       case UnaryOperatorKind.COMPLEMENT:
         return bitNotSpecial(value);
@@ -289,8 +273,7 @@
   /// This method returns `null` if a good result could not be found. In that
   /// case, it is best to fall back on interprocedural type information.
   AbstractConstantValue binaryOp(BinaryOperator operator,
-                         AbstractConstantValue left,
-                         AbstractConstantValue right) {
+      AbstractConstantValue left, AbstractConstantValue right) {
     switch (operator.kind) {
       case BinaryOperatorKind.ADD:
         return addSpecial(left, right);
@@ -355,8 +338,8 @@
     return null; // The caller will use return type from type inference.
   }
 
-  AbstractConstantValue foldUnary(UnaryOperation operation,
-                                  AbstractConstantValue value) {
+  AbstractConstantValue foldUnary(
+      UnaryOperation operation, AbstractConstantValue value) {
     if (value.isNothing) return nothing;
     if (value.isConstant) {
       ConstantValue result = operation.fold(value.constant);
@@ -378,7 +361,6 @@
     return null;
   }
 
-
   AbstractConstantValue foldBinary(BinaryOperation operation,
       AbstractConstantValue left, AbstractConstantValue right) {
     if (left.isNothing || right.isNothing) return nothing;
@@ -389,8 +371,8 @@
     return null;
   }
 
-  AbstractConstantValue closedOnInt(AbstractConstantValue left,
-                                    AbstractConstantValue right) {
+  AbstractConstantValue closedOnInt(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (isDefinitelyInt(left, allowNull: true) &&
         isDefinitelyInt(right, allowNull: true)) {
       return nonConstant(typeSystem.intType);
@@ -398,8 +380,8 @@
     return null;
   }
 
-  AbstractConstantValue closedOnUint(AbstractConstantValue left,
-                                     AbstractConstantValue right) {
+  AbstractConstantValue closedOnUint(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (isDefinitelyUint(left, allowNull: true) &&
         isDefinitelyUint(right, allowNull: true)) {
       return nonConstant(typeSystem.uintType);
@@ -407,8 +389,8 @@
     return null;
   }
 
-  AbstractConstantValue closedOnUint31(AbstractConstantValue left,
-                                       AbstractConstantValue right) {
+  AbstractConstantValue closedOnUint31(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (isDefinitelyUint31(left, allowNull: true) &&
         isDefinitelyUint31(right, allowNull: true)) {
       return nonConstant(typeSystem.uint31Type);
@@ -416,8 +398,8 @@
     return null;
   }
 
-  AbstractConstantValue addSpecial(AbstractConstantValue left,
-                                   AbstractConstantValue right) {
+  AbstractConstantValue addSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded = foldBinary(constantSystem.add, left, right);
     if (folded != null) return folded;
     if (isDefinitelyNum(left, allowNull: true)) {
@@ -430,22 +412,22 @@
     return null;
   }
 
-  AbstractConstantValue subtractSpecial(AbstractConstantValue left,
-                                        AbstractConstantValue right) {
+  AbstractConstantValue subtractSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded =
         foldBinary(constantSystem.subtract, left, right);
     return folded ?? closedOnInt(left, right);
   }
 
-  AbstractConstantValue multiplySpecial(AbstractConstantValue left,
-                                        AbstractConstantValue right) {
+  AbstractConstantValue multiplySpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded =
         foldBinary(constantSystem.multiply, left, right);
     return folded ?? closedOnUint(left, right) ?? closedOnInt(left, right);
   }
 
-  AbstractConstantValue divideSpecial(AbstractConstantValue left,
-                                      AbstractConstantValue right) {
+  AbstractConstantValue divideSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     return foldBinary(constantSystem.divide, left, right);
   }
 
@@ -476,42 +458,41 @@
     return null;
   }
 
-  AbstractConstantValue moduloSpecial(AbstractConstantValue left,
-                                      AbstractConstantValue right) {
+  AbstractConstantValue moduloSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded =
         foldBinary(constantSystem.modulo, left, right);
     return folded ?? closedOnUint(left, right) ?? closedOnInt(left, right);
   }
 
-  AbstractConstantValue remainderSpecial(AbstractConstantValue left,
-                                         AbstractConstantValue right) {
+  AbstractConstantValue remainderSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (left.isNothing || right.isNothing) return nothing;
-    AbstractConstantValue folded = null;  // Remainder not in constant system.
+    AbstractConstantValue folded = null; // Remainder not in constant system.
     return folded ?? closedOnUint(left, right) ?? closedOnInt(left, right);
   }
 
-  AbstractConstantValue codeUnitAtSpecial(AbstractConstantValue left,
-                                          AbstractConstantValue right) {
+  AbstractConstantValue codeUnitAtSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     return foldBinary(constantSystem.codeUnitAt, left, right);
   }
 
-  AbstractConstantValue equalSpecial(AbstractConstantValue left,
-                                     AbstractConstantValue right) {
+  AbstractConstantValue equalSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded =
         foldBinary(constantSystem.equal, left, right);
     if (folded != null) return folded;
     bool behavesLikeIdentity =
         isDefinitelyNumStringBool(left, allowNull: true) ||
-        right.isNullConstant;
-    if (behavesLikeIdentity &&
-        typeSystem.areDisjoint(left.type, right.type)) {
+            right.isNullConstant;
+    if (behavesLikeIdentity && typeSystem.areDisjoint(left.type, right.type)) {
       return constant(new FalseConstantValue());
     }
     return null;
   }
 
-  AbstractConstantValue andSpecial(AbstractConstantValue left,
-                                   AbstractConstantValue right) {
+  AbstractConstantValue andSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded =
         foldBinary(constantSystem.bitAnd, left, right);
     if (folded != null) return folded;
@@ -525,27 +506,27 @@
     return null;
   }
 
-  AbstractConstantValue orSpecial(AbstractConstantValue left,
-                                  AbstractConstantValue right) {
+  AbstractConstantValue orSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded =
         foldBinary(constantSystem.bitOr, left, right);
     return folded ?? closedOnUint31(left, right);
   }
 
-  AbstractConstantValue xorSpecial(AbstractConstantValue left,
-                                   AbstractConstantValue right) {
+  AbstractConstantValue xorSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded =
         foldBinary(constantSystem.bitXor, left, right);
     return folded ?? closedOnUint31(left, right);
   }
 
-  AbstractConstantValue shiftLeftSpecial(AbstractConstantValue left,
-                                         AbstractConstantValue right) {
+  AbstractConstantValue shiftLeftSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     return foldBinary(constantSystem.shiftLeft, left, right);
   }
 
-  AbstractConstantValue shiftRightSpecial(AbstractConstantValue left,
-                                          AbstractConstantValue right) {
+  AbstractConstantValue shiftRightSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     AbstractConstantValue folded =
         foldBinary(constantSystem.shiftRight, left, right);
     if (folded != null) return folded;
@@ -561,8 +542,8 @@
     return null;
   }
 
-  AbstractConstantValue lessSpecial(AbstractConstantValue left,
-                                    AbstractConstantValue right) {
+  AbstractConstantValue lessSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (isDefinitelyUint(left) && right.isZeroOrNegativeConstant) {
       return falseValue; // "uint < 0" is false.
     } else if (left.isNegativeConstant && isDefinitelyUint(right)) {
@@ -571,8 +552,8 @@
     return foldBinary(constantSystem.less, left, right);
   }
 
-  AbstractConstantValue lessEqualSpecial(AbstractConstantValue left,
-                                         AbstractConstantValue right) {
+  AbstractConstantValue lessEqualSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (isDefinitelyUint(left) && right.isNegativeConstant) {
       return falseValue; // "uint <= -1" is false.
     } else if (left.isZeroOrNegativeConstant && isDefinitelyUint(right)) {
@@ -581,8 +562,8 @@
     return foldBinary(constantSystem.lessEqual, left, right);
   }
 
-  AbstractConstantValue greaterSpecial(AbstractConstantValue left,
-                                       AbstractConstantValue right) {
+  AbstractConstantValue greaterSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (left.isZeroOrNegativeConstant && isDefinitelyUint(right)) {
       return falseValue; // "0 > uint" is false
     } else if (isDefinitelyUint(left) && right.isNegativeConstant) {
@@ -591,8 +572,8 @@
     return foldBinary(constantSystem.greater, left, right);
   }
 
-  AbstractConstantValue greaterEqualSpecial(AbstractConstantValue left,
-                                            AbstractConstantValue right) {
+  AbstractConstantValue greaterEqualSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (left.isNegativeConstant && isDefinitelyUint(right)) {
       return falseValue; // "-1 >= uint" is false
     } else if (isDefinitelyUint(left) && right.isZeroOrNegativeConstant) {
@@ -618,15 +599,15 @@
     if (length != null) {
       return intConstant(length);
     }
-    return null;  // The caller will use return type from type inference.
+    return null; // The caller will use return type from type inference.
   }
 
   AbstractConstantValue stringConstant(String value) {
     return constant(new StringConstantValue(new ast.DartString.literal(value)));
   }
 
-  AbstractConstantValue indexSpecial(AbstractConstantValue left,
-                                     AbstractConstantValue right) {
+  AbstractConstantValue indexSpecial(
+      AbstractConstantValue left, AbstractConstantValue right) {
     if (left.isNothing || right.isNothing) return nothing;
     if (right.isConstant) {
       ConstantValue index = right.constant;
@@ -639,7 +620,7 @@
             if (0 <= indexValue && indexValue < stringValue.length) {
               return stringConstant(stringValue[indexValue]);
             } else {
-              return nothing;  // Will throw.
+              return nothing; // Will throw.
             }
           }
         } else if (receiver is ListConstantValue) {
@@ -648,7 +629,7 @@
             if (0 <= indexValue && indexValue < receiver.length) {
               return constant(receiver.entries[indexValue]);
             } else {
-              return nothing;  // Will throw.
+              return nothing; // Will throw.
             }
           }
         } else if (receiver is MapConstantValue) {
@@ -664,7 +645,7 @@
     }
     // TODO(asgerf): Handle case where 'left' is a List or Map constant but
     //               the index is unknown.
-    return null;  // The caller will use return type from type inference.
+    return null; // The caller will use return type from type inference.
   }
 
   AbstractConstantValue stringify(AbstractConstantValue value) {
@@ -726,8 +707,8 @@
     return nonConstant(value.type.nonNullable());
   }
 
-  AbstractConstantValue intersectWithType(AbstractConstantValue value,
-        TypeMask type) {
+  AbstractConstantValue intersectWithType(
+      AbstractConstantValue value, TypeMask type) {
     if (value.isNothing || typeSystem.areDisjoint(value.type, type)) {
       return nothing;
     } else if (value.isConstant) {
@@ -761,7 +742,7 @@
   String get passName => 'Type propagation';
 
   final CpsFunctionCompiler _functionCompiler;
-  final Map<Variable, ConstantValue> _values= <Variable, ConstantValue>{};
+  final Map<Variable, ConstantValue> _values = <Variable, ConstantValue>{};
   final ConstantPropagationLattice _lattice;
   final bool recomputeAll;
 
@@ -777,10 +758,8 @@
   void rewrite(FunctionDefinition root) {
     // Analyze. In this phase, the entire term is analyzed for reachability
     // and the abstract value of each expression.
-    TypePropagationVisitor analyzer = new TypePropagationVisitor(
-        _lattice,
-        _values,
-        _internalError);
+    TypePropagationVisitor analyzer =
+        new TypePropagationVisitor(_lattice, _values, _internalError);
 
     analyzer.analyze(root, recomputeAll);
 
@@ -788,28 +767,24 @@
     // replace branches with fixed targets and side-effect-free expressions
     // with constant results or existing values that are in scope.
     TransformingVisitor transformer = new TransformingVisitor(
-        _compiler,
-        _functionCompiler,
-        _lattice,
-        analyzer,
-        _internalError);
+        _compiler, _functionCompiler, _lattice, analyzer, _internalError);
     transformer.transform(root);
   }
 }
 
 final Map<String, BuiltinOperator> NumBinaryBuiltins =
-  const <String, BuiltinOperator>{
-    '+':  BuiltinOperator.NumAdd,
-    '-':  BuiltinOperator.NumSubtract,
-    '*':  BuiltinOperator.NumMultiply,
-    '/':  BuiltinOperator.NumDivide,
-    '&':  BuiltinOperator.NumAnd,
-    '|':  BuiltinOperator.NumOr,
-    '^':  BuiltinOperator.NumXor,
-    '<':  BuiltinOperator.NumLt,
-    '<=': BuiltinOperator.NumLe,
-    '>':  BuiltinOperator.NumGt,
-    '>=': BuiltinOperator.NumGe
+    const <String, BuiltinOperator>{
+  '+': BuiltinOperator.NumAdd,
+  '-': BuiltinOperator.NumSubtract,
+  '*': BuiltinOperator.NumMultiply,
+  '/': BuiltinOperator.NumDivide,
+  '&': BuiltinOperator.NumAnd,
+  '|': BuiltinOperator.NumOr,
+  '^': BuiltinOperator.NumXor,
+  '<': BuiltinOperator.NumLt,
+  '<=': BuiltinOperator.NumLe,
+  '>': BuiltinOperator.NumGt,
+  '>=': BuiltinOperator.NumGe
 };
 
 /**
@@ -835,14 +810,10 @@
 
   TypeCheckOperator checkIsNumber;
 
-  TransformingVisitor(this.compiler,
-                      this.functionCompiler,
-                      this.lattice,
-                      this.analyzer,
-                      this.internalError) {
+  TransformingVisitor(this.compiler, this.functionCompiler, this.lattice,
+      this.analyzer, this.internalError) {
     checkIsNumber = new ClassTypeCheckOperator(
-        helpers.jsNumberClass,
-        BuiltinOperator.IsNotNumber);
+        helpers.jsNumberClass, BuiltinOperator.IsNotNumber);
   }
 
   void transform(FunctionDefinition root) {
@@ -854,8 +825,8 @@
       if (getValue(param).isNothing) {
         // Replace with `throw "Unreachable";`
         CpsFragment cps = new CpsFragment(null);
-        Primitive message = cps.makeConstant(
-            new StringConstantValue.fromString("Unreachable"));
+        Primitive message =
+            cps.makeConstant(new StringConstantValue.fromString("Unreachable"));
         cps.put(new Throw(message));
         replaceSubtree(root.body, cps.result);
         return;
@@ -1168,7 +1139,7 @@
     /// Check that the receiver and argument satisfy the given type checks, and
     /// throw a [NoSuchMethodError] or [ArgumentError] if the check fails.
     CpsFragment makeGuard(TypeCheckOperator receiverGuard,
-                          [TypeCheckOperator argumentGuard]) {
+        [TypeCheckOperator argumentGuard]) {
       CpsFragment cps = new CpsFragment(node.sourceInformation);
 
       // Make no guards if trusting primitives.
@@ -1178,8 +1149,7 @@
       ChecksNeeded receiverChecks =
           receiverGuard.getChecksNeeded(node.receiver, classWorld);
       bool needReceiverGuard = receiverChecks != ChecksNeeded.None;
-      bool needArgumentGuard =
-          argumentGuard != null &&
+      bool needArgumentGuard = argumentGuard != null &&
           argumentGuard.needsCheck(node.argument(0), classWorld);
 
       if (!needReceiverGuard && !needArgumentGuard) return cps;
@@ -1193,13 +1163,10 @@
       if (!needArgumentGuard) {
         Primitive condition = receiverGuard.makeCheck(cps, node.receiver);
         cps.letPrim(new ReceiverCheck(
-            node.receiver,
-            node.selector,
-            node.sourceInformation,
+            node.receiver, node.selector, node.sourceInformation,
             condition: condition,
             useSelector: true,
-            isNullCheck: receiverChecks == ChecksNeeded.Null
-        ));
+            isNullCheck: receiverChecks == ChecksNeeded.Null));
         return cps;
       }
 
@@ -1212,9 +1179,10 @@
       //   if (typeof argument !== "number") return H.iae(argument);
       //
       if (!needReceiverGuard) {
-        cps.ifTruthy(argumentGuard.makeCheck(cps, node.argument(0)))
-           .invokeStaticThrower(helpers.throwIllegalArgumentException,
-              [node.argument(0)]);
+        cps
+            .ifTruthy(argumentGuard.makeCheck(cps, node.argument(0)))
+            .invokeStaticThrower(
+                helpers.throwIllegalArgumentException, [node.argument(0)]);
         return cps;
       }
 
@@ -1226,16 +1194,18 @@
       //       return J.$lt(receiver, argument);
       //
       Continuation fail = cps.letCont();
-      cps.ifTruthy(receiverGuard.makeCheck(cps, node.receiver))
-         .invokeContinuation(fail);
-      cps.ifTruthy(argumentGuard.makeCheck(cps, node.argument(0)))
-         .invokeContinuation(fail);
+      cps
+          .ifTruthy(receiverGuard.makeCheck(cps, node.receiver))
+          .invokeContinuation(fail);
+      cps
+          .ifTruthy(argumentGuard.makeCheck(cps, node.argument(0)))
+          .invokeContinuation(fail);
 
       cps.insideContinuation(fail)
-         ..invokeMethod(node.receiver, node.selector, node.mask,
-             [node.argument(0)],
-             callingConvention: CallingConvention.OneShotIntercepted)
-         ..put(new Unreachable());
+        ..invokeMethod(
+            node.receiver, node.selector, node.mask, [node.argument(0)],
+            callingConvention: CallingConvention.OneShotIntercepted)
+        ..put(new Unreachable());
 
       return cps;
     }
@@ -1246,11 +1216,10 @@
     /// If [guard] is given, the receiver and argument are both checked using
     /// that operator.
     CpsFragment makeBinary(BuiltinOperator operator,
-                           {TypeCheckOperator guard: TypeCheckOperator.none}) {
+        {TypeCheckOperator guard: TypeCheckOperator.none}) {
       CpsFragment cps = makeGuard(guard, guard);
       Primitive left = guard.makeRefinement(cps, node.receiver, classWorld);
-      Primitive right =
-          guard.makeRefinement(cps, node.argument(0), classWorld);
+      Primitive right = guard.makeRefinement(cps, node.argument(0), classWorld);
       Primitive result = cps.applyBuiltin(operator, [left, right]);
       result.hint = node.hint;
       node.replaceUsesWith(result);
@@ -1260,10 +1229,9 @@
     /// Like [makeBinary] but for unary operators with the receiver as the
     /// argument.
     CpsFragment makeUnary(BuiltinOperator operator,
-                          {TypeCheckOperator guard: TypeCheckOperator.none}) {
+        {TypeCheckOperator guard: TypeCheckOperator.none}) {
       CpsFragment cps = makeGuard(guard);
-      Primitive argument =
-          guard.makeRefinement(cps, node.receiver, classWorld);
+      Primitive argument = guard.makeRefinement(cps, node.receiver, classWorld);
       Primitive result = cps.applyBuiltin(operator, [argument]);
       result.hint = node.hint;
       node.replaceUsesWith(result);
@@ -1278,10 +1246,8 @@
 
     /// Replaces the call with a call to [name] with the same inputs.
     InvokeMethod makeRenamedInvoke(String name) {
-      return new InvokeMethod(node.receiver,
-          renameToOptimizedSelector(name),
-          node.mask,
-          node.arguments.toList(),
+      return new InvokeMethod(node.receiver, renameToOptimizedSelector(name),
+          node.mask, node.arguments.toList(),
           sourceInformation: node.sourceInformation,
           callingConvention: node.callingConvention,
           interceptor: node.interceptor);
@@ -1348,13 +1314,13 @@
                 lattice.isDefinitelyIntInRange(right, min: 0, max: 31)) {
               return makeBinary(BuiltinOperator.NumShr, guard: checkIsNumber);
             } else if (lattice.isDefinitelyUint(left) &&
-                       lattice.isDefinitelyUint(right)) {
+                lattice.isDefinitelyUint(right)) {
               return makeRenamedInvoke('_shrBothPositive');
             } else if (lattice.isDefinitelyUint(left) &&
-                       lattice.isDefinitelyNum(right)) {
+                lattice.isDefinitelyNum(right)) {
               return makeRenamedInvoke('_shrReceiverPositive');
             } else if (lattice.isDefinitelyNum(left) &&
-                       lattice.isDefinitelyUint(right)) {
+                lattice.isDefinitelyUint(right)) {
               return makeRenamedInvoke('_shrOtherPositive');
             }
           }
@@ -1416,9 +1382,8 @@
               lattice.isDefinitelyInt(getValue(index))) {
             CpsFragment cps = new CpsFragment(node.sourceInformation);
             receiver = makeBoundsCheck(cps, receiver, index);
-            ApplyBuiltinOperator get =
-                cps.applyBuiltin(BuiltinOperator.CharCodeAt,
-                                 <Primitive>[receiver, index]);
+            ApplyBuiltinOperator get = cps.applyBuiltin(
+                BuiltinOperator.CharCodeAt, <Primitive>[receiver, index]);
             node.replaceUsesWith(get);
             get.hint = node.hint;
             return cps;
@@ -1458,9 +1423,7 @@
     } else if (node.selector.isSetter) {
       if (target.isFinal) return null;
       assert(node.hasNoUses);
-      return new SetField(node.receiver,
-                          target,
-                          node.argument(0));
+      return new SetField(node.receiver, target, node.argument(0));
     } else if (node.selector.isCall) {
       CpsFragment cps = new CpsFragment(node.sourceInformation);
       Primitive fieldValue = cps.letPrim(new GetField(node.receiver, target));
@@ -1482,17 +1445,15 @@
   ///
   /// Returns a CPS fragment whose context is the branch where no error
   /// was thrown.
-  Primitive makeBoundsCheck(CpsFragment cps,
-        Primitive list,
-        Primitive index,
-        [int checkKind = BoundsCheck.BOTH_BOUNDS | BoundsCheck.INTEGER]) {
+  Primitive makeBoundsCheck(CpsFragment cps, Primitive list, Primitive index,
+      [int checkKind = BoundsCheck.BOTH_BOUNDS | BoundsCheck.INTEGER]) {
     if (compiler.options.trustPrimitives) {
       return cps.letPrim(new BoundsCheck.noCheck(list, cps.sourceInformation));
     } else {
       GetLength length = cps.letPrim(new GetLength(list));
       list = cps.refine(list, typeSystem.nonNullType);
-      BoundsCheck check = cps.letPrim(new BoundsCheck(list, index, length,
-          checkKind, cps.sourceInformation));
+      BoundsCheck check = cps.letPrim(new BoundsCheck(
+          list, index, length, checkKind, cps.sourceInformation));
       if (check.hasIntegerCheck) {
         if (typeSystem.isDefinitelyInt(index.type)) {
           check.checks &= ~BoundsCheck.INTEGER;
@@ -1509,16 +1470,13 @@
   ///
   /// Returns a CPS fragment whose context is the branch where no error
   /// was thrown.
-  CpsFragment makeConcurrentModificationCheck(Primitive list,
-                                              Primitive originalLength,
-                                              SourceInformation sourceInfo) {
+  CpsFragment makeConcurrentModificationCheck(
+      Primitive list, Primitive originalLength, SourceInformation sourceInfo) {
     CpsFragment cps = new CpsFragment(sourceInfo);
-    Primitive lengthChanged = cps.applyBuiltin(
-        BuiltinOperator.StrictNeq,
+    Primitive lengthChanged = cps.applyBuiltin(BuiltinOperator.StrictNeq,
         <Primitive>[originalLength, cps.letPrim(new GetLength(list))]);
     cps.ifTruthy(lengthChanged).invokeStaticThrower(
-        helpers.throwConcurrentModificationError,
-        <Primitive>[list]);
+        helpers.throwConcurrentModificationError, <Primitive>[list]);
     return cps;
   }
 
@@ -1529,7 +1487,7 @@
     Primitive receiver = node.receiver;
     AbstractConstantValue receiverValue = getValue(receiver);
     if (!typeSystem.isDefinitelyIndexable(receiverValue.type,
-            allowNull: true)) {
+        allowNull: true)) {
       return null;
     }
     switch (node.selector.name) {
@@ -1539,7 +1497,7 @@
         }
         if (node.selector.isSetter) {
           if (!typeSystem.isDefinitelyExtendableArray(receiver.type,
-                allowNull: true)) {
+              allowNull: true)) {
             return null;
           }
           CpsFragment cps = new CpsFragment(node.sourceInformation);
@@ -1554,11 +1512,8 @@
               return null;
             }
           }
-          cps.letPrim(new ApplyBuiltinMethod(
-              BuiltinMethod.SetLength,
-              receiver,
-              [newLength],
-              node.sourceInformation));
+          cps.letPrim(new ApplyBuiltinMethod(BuiltinMethod.SetLength, receiver,
+              [newLength], node.sourceInformation));
           if (!typeSystem.isDefinitelyUint32(newLength.type)) {
             // If the setter succeeded, the length must have been a uint32.
             cps.refine(newLength, typeSystem.uint32Type);
@@ -1579,7 +1534,7 @@
 
       case '[]=':
         if (!typeSystem.isDefinitelyMutableIndexable(receiverValue.type,
-                allowNull: true)) {
+            allowNull: true)) {
           return null;
         }
         Primitive index = node.argument(0);
@@ -1595,8 +1550,8 @@
         CpsFragment cps = new CpsFragment(node.sourceInformation);
         Primitive length = cps.letPrim(new GetLength(receiver));
         Constant zero = cps.makeZero();
-        ApplyBuiltinOperator op = cps.applyBuiltin(BuiltinOperator.StrictEq,
-                                                   [length, zero]);
+        ApplyBuiltinOperator op =
+            cps.applyBuiltin(BuiltinOperator.StrictEq, [length, zero]);
         node.replaceUsesWith(op);
         op.hint = node.hint;
         return cps;
@@ -1606,8 +1561,8 @@
         CpsFragment cps = new CpsFragment(node.sourceInformation);
         Primitive length = cps.letPrim(new GetLength(receiver));
         Constant zero = cps.makeZero();
-        ApplyBuiltinOperator op = cps.applyBuiltin(BuiltinOperator.StrictNeq,
-                                                   [length, zero]);
+        ApplyBuiltinOperator op =
+            cps.applyBuiltin(BuiltinOperator.StrictNeq, [length, zero]);
         node.replaceUsesWith(op);
         op.hint = node.hint;
         return cps;
@@ -1642,33 +1597,28 @@
         if (!isExtendable) return null;
         Primitive addedItem = node.argument(0);
         CpsFragment cps = new CpsFragment(sourceInfo);
-        cps.invokeBuiltin(BuiltinMethod.Push,
-            list,
-            <Primitive>[addedItem]);
+        cps.invokeBuiltin(BuiltinMethod.Push, list, <Primitive>[addedItem]);
         if (node.hasAtLeastOneUse) {
           node.replaceUsesWith(cps.makeNull());
         }
         return cps;
 
       case 'removeLast':
-        if (!node.selector.isCall ||
-            node.selector.argumentCount != 0) {
+        if (!node.selector.isCall || node.selector.argumentCount != 0) {
           return null;
         }
         if (!isExtendable) return null;
         CpsFragment cps = new CpsFragment(sourceInfo);
-        list = makeBoundsCheck(cps, list, cps.makeMinusOne(),
-            BoundsCheck.EMPTINESS);
-        Primitive removedItem = cps.invokeBuiltin(BuiltinMethod.Pop,
-            list,
-            <Primitive>[]);
+        list = makeBoundsCheck(
+            cps, list, cps.makeMinusOne(), BoundsCheck.EMPTINESS);
+        Primitive removedItem =
+            cps.invokeBuiltin(BuiltinMethod.Pop, list, <Primitive>[]);
         removedItem.hint = node.hint;
         node.replaceUsesWith(removedItem);
         return cps;
 
       case 'addAll':
-        if (!node.selector.isCall ||
-            node.selector.argumentCount != 1) {
+        if (!node.selector.isCall || node.selector.argumentCount != 1) {
           return null;
         }
         if (!isExtendable) return null;
@@ -1683,9 +1633,8 @@
         LiteralList addedLiteral = addedList;
         CpsFragment cps = new CpsFragment(sourceInfo);
         for (Reference value in addedLiteral.valueRefs) {
-          cps.invokeBuiltin(BuiltinMethod.Push,
-              list,
-              <Primitive>[value.definition]);
+          cps.invokeBuiltin(
+              BuiltinMethod.Push, list, <Primitive>[value.definition]);
         }
         if (node.hasAtLeastOneUse) {
           node.replaceUsesWith(cps.makeNull());
@@ -1711,19 +1660,16 @@
       case 'forEach':
         Element element =
             compiler.world.locateSingleElement(node.selector, listValue.type);
-        if (element == null ||
-            !element.isFunction ||
-            !node.selector.isCall) return null;
+        if (element == null || !element.isFunction || !node.selector.isCall)
+          return null;
         assert(node.selector.positionalArgumentCount == 1);
         assert(node.selector.namedArgumentCount == 0);
         FunctionDefinition target = functionCompiler.compileToCpsIr(element);
 
         CpsFragment cps = new CpsFragment(node.sourceInformation);
-        Primitive result = cps.inlineFunction(target,
-            node.receiver,
-            node.arguments.toList(),
-            interceptor: node.interceptor,
-            hint: node.hint);
+        Primitive result = cps.inlineFunction(
+            target, node.receiver, node.arguments.toList(),
+            interceptor: node.interceptor, hint: node.hint);
         node.replaceUsesWith(result);
         return cps;
 
@@ -1765,7 +1711,7 @@
             }
             use.replaceWith(new GetMutable(current));
           } else {
-            assert (use.selector == Selectors.moveNext);
+            assert(use.selector == Selectors.moveNext);
             // Rewrite iterator.moveNext() to:
             //
             //   if (index < list.length) {
@@ -1818,8 +1764,8 @@
                 // TODO(asgerf): Do this in a continuation so multiple
                 //               continues can share the same code.
                 for (Reference ref = parent.firstRef;
-                     ref != null;
-                     ref = ref.next) {
+                    ref != null;
+                    ref = ref.next) {
                   Expression invocationCaller = ref.parent;
                   if (getEffectiveParent(invocationCaller) == iteratorBinding) {
                     // No need to check for concurrent modification immediately
@@ -1837,8 +1783,7 @@
             }
 
             // Check if there are more elements.
-            Primitive hasMore = cps.applyBuiltin(
-                BuiltinOperator.NumLt,
+            Primitive hasMore = cps.applyBuiltin(BuiltinOperator.NumLt,
                 [cps.getMutable(index), cps.letPrim(new GetLength(list))]);
 
             // Return false if there are no more.
@@ -1851,9 +1796,10 @@
             current.type = typeSystem.elementTypeOfIndexable(listValue.type);
             cps.setMutable(current,
                 cps.letPrim(new GetIndex(list, cps.getMutable(index))));
-            cps.setMutable(index, cps.applyBuiltin(
-                BuiltinOperator.NumAdd,
-                [cps.getMutable(index), cps.makeOne()]));
+            cps.setMutable(
+                index,
+                cps.applyBuiltin(BuiltinOperator.NumAdd,
+                    [cps.getMutable(index), cps.makeOne()]));
             cps.invokeContinuation(moveNextCont, [cps.makeTrue()]);
 
             reanalyzeFragment(cps);
@@ -1863,7 +1809,9 @@
             cps.context = moveNextCont;
             cps.insertBelow(let);
             let.remove();
-            use..replaceUsesWith(result)..destroy();
+            use
+              ..replaceUsesWith(result)
+              ..destroy();
           }
         }
 
@@ -1927,10 +1875,8 @@
 
       // Replace with InvokeStatic.
       // The tear-off will be cleaned up by shrinking reductions.
-      return new InvokeStatic(target,
-          new Selector.fromElement(target),
-          node.arguments.toList(),
-          node.sourceInformation);
+      return new InvokeStatic(target, new Selector.fromElement(target),
+          node.arguments.toList(), node.sourceInformation);
     }
     if (tearOff is InvokeMethod && tearOff.selector.isGetter) {
       Selector getter = tearOff.selector;
@@ -1972,12 +1918,13 @@
       }
 
       InvokeMethod invoke = new InvokeMethod(
-        object,
-        new Selector.call(getter.memberName, call.callStructure),
-        type,
-        node.arguments.toList(),
-        sourceInformation: node.sourceInformation);
-      node.receiverRef.changeTo(new Parameter(null)); // Remove the tear off use.
+          object,
+          new Selector.call(getter.memberName, call.callStructure),
+          type,
+          node.arguments.toList(),
+          sourceInformation: node.sourceInformation);
+      node.receiverRef
+          .changeTo(new Parameter(null)); // Remove the tear off use.
 
       if (tearOff.hasNoRefinedUses) {
         // Eliminate the getter call if it has no more uses.
@@ -2008,13 +1955,13 @@
     assert(call.argumentCount == node.argumentRefs.length);
 
     Primitive receiver = node.receiver;
-    if (receiver is !CreateInstance) return null;
+    if (receiver is! CreateInstance) return null;
     CreateInstance createInstance = receiver;
     if (!createInstance.hasExactlyOneUse) return null;
 
     // Inline only closures. This avoids inlining the 'call' method of a class
     // that has many allocation sites.
-    if (createInstance.classElement is !ClosureClassElement) return null;
+    if (createInstance.classElement is! ClosureClassElement) return null;
 
     ClosureClassElement closureClassElement = createInstance.classElement;
     Element element = closureClassElement.localLookup(Identifiers.call);
@@ -2041,8 +1988,8 @@
     // inline if there are other uses of 'this' since that could be an escape or
     // a recursive call.
     for (Reference ref = target.receiverParameter.firstRef;
-         ref != null;
-         ref = ref.next) {
+        ref != null;
+        ref = ref.next) {
       Node use = ref.parent;
       if (use is GetField) continue;
       // Closures do not currently have writable fields, but closure conversion
@@ -2052,9 +1999,8 @@
     }
 
     CpsFragment cps = new CpsFragment(node.sourceInformation);
-    Primitive returnValue = cps.inlineFunction(target,
-        node.receiver,
-        node.arguments.toList(),
+    Primitive returnValue = cps.inlineFunction(
+        target, node.receiver, node.arguments.toList(),
         hint: node.hint);
     node.replaceUsesWith(returnValue);
     return cps;
@@ -2084,8 +2030,7 @@
       ConstructorBodyElement constructorBody = target;
       target = constructorBody.constructor;
     }
-    node.effects =
-        Effects.from(compiler.world.getSideEffectsOfElement(target));
+    node.effects = Effects.from(compiler.world.getSideEffectsOfElement(target));
     TypeMask receiverType = node.receiver.type;
     if (node.callingConvention == CallingConvention.Intercepted &&
         typeSystem.areDisjoint(receiverType, typeSystem.interceptorType)) {
@@ -2097,8 +2042,7 @@
   }
 
   visitInvokeMethod(InvokeMethod node) {
-    var specialized =
-        specializeOperatorCall(node) ??
+    var specialized = specializeOperatorCall(node) ??
         specializeFieldAccess(node) ??
         specializeIndexableAccess(node) ??
         specializeArrayAccess(node) ??
@@ -2113,8 +2057,7 @@
         compiler.world.getSideEffectsOfSelector(node.selector, node.mask));
 
     bool canBeNonThrowingCallOnNull =
-        selectorsOnNull.contains(node.selector) &&
-        receiverType.isNullable;
+        selectorsOnNull.contains(node.selector) && receiverType.isNullable;
 
     if (node.callingConvention == CallingConvention.Intercepted &&
         !canBeNonThrowingCallOnNull &&
@@ -2125,8 +2068,8 @@
 
       // Replace the extra receiver argument with a dummy value if the
       // target definitely does not use it.
-      if (typeSystem.targetIgnoresReceiverArgument(receiverType,
-            node.selector)) {
+      if (typeSystem.targetIgnoresReceiverArgument(
+          receiverType, node.selector)) {
         node.makeDummyIntercepted();
       }
     }
@@ -2160,15 +2103,12 @@
         node.replaceUsesWith(argument);
         return new CpsFragment();
       } else if (typeSystem.isDefinitelySelfInterceptor(value.type)) {
-        TypeMask toStringReturn = typeSystem.getInvokeReturnType(
-            Selectors.toString_, value.type);
+        TypeMask toStringReturn =
+            typeSystem.getInvokeReturnType(Selectors.toString_, value.type);
         if (typeSystem.isDefinitelyString(toStringReturn)) {
           CpsFragment cps = new CpsFragment(node.sourceInformation);
           Primitive invoke = cps.invokeMethod(
-              argument,
-              Selectors.toString_,
-              value.type,
-              [],
+              argument, Selectors.toString_, value.type, [],
               callingConvention: CallingConvention.DummyIntercepted);
           node.replaceUsesWith(invoke);
           return cps;
@@ -2177,16 +2117,15 @@
     } else if (node.target == compiler.identicalFunction) {
       if (node.argumentRefs.length == 2) {
         return new ApplyBuiltinOperator(BuiltinOperator.Identical,
-            [node.argument(0), node.argument(1)],
-            node.sourceInformation);
+            [node.argument(0), node.argument(1)], node.sourceInformation);
       }
     }
     return null;
   }
 
   visitInvokeStatic(InvokeStatic node) {
-    node.effects = Effects.from(
-        compiler.world.getSideEffectsOfElement(node.target));
+    node.effects =
+        Effects.from(compiler.world.getSideEffectsOfElement(node.target));
     return specializeInternalMethodCall(node);
   }
 
@@ -2199,7 +2138,6 @@
     return new AbstractConstantValue.nonConstant(node.type);
   }
 
-
   /*************************** PRIMITIVES **************************/
   //
   // The visit method for a primitive may return one of the following:
@@ -2230,9 +2168,8 @@
           AbstractConstantValue secondValue = getValue(node.argument(i++));
           if (!secondValue.isConstant) continue;
 
-          ast.DartString string =
-              new ast.ConsDartString(getString(firstValue),
-                                     getString(secondValue));
+          ast.DartString string = new ast.ConsDartString(
+              getString(firstValue), getString(secondValue));
 
           // We found a sequence of at least two constants.
           // Look for the end of the sequence.
@@ -2280,22 +2217,21 @@
           // This is not safe when we might compare JS null and JS undefined.
           newOperator = BuiltinOperator.StrictEq;
         } else if (lattice.isDefinitelyNum(left, allowNull: true) &&
-                   lattice.isDefinitelyNum(right, allowNull: true)) {
+            lattice.isDefinitelyNum(right, allowNull: true)) {
           // If both operands can be null, but otherwise are of the same type,
           // we can use `==` for comparison.
           // This is not safe e.g. for comparing strings against numbers.
           newOperator = BuiltinOperator.LooseEq;
         } else if (lattice.isDefinitelyString(left, allowNull: true) &&
-                   lattice.isDefinitelyString(right, allowNull: true)) {
+            lattice.isDefinitelyString(right, allowNull: true)) {
           newOperator = BuiltinOperator.LooseEq;
         } else if (lattice.isDefinitelyBool(left, allowNull: true) &&
-                   lattice.isDefinitelyBool(right, allowNull: true)) {
+            lattice.isDefinitelyBool(right, allowNull: true)) {
           newOperator = BuiltinOperator.LooseEq;
         }
         if (newOperator != null) {
-          return new ApplyBuiltinOperator(newOperator,
-              node.arguments.toList(),
-              node.sourceInformation);
+          return new ApplyBuiltinOperator(
+              newOperator, node.arguments.toList(), node.sourceInformation);
         }
         break;
 
@@ -2303,8 +2239,7 @@
       case BuiltinOperator.LooseEq:
       case BuiltinOperator.StrictNeq:
       case BuiltinOperator.LooseNeq:
-        bool negated =
-            node.operator == BuiltinOperator.StrictNeq ||
+        bool negated = node.operator == BuiltinOperator.StrictNeq ||
             node.operator == BuiltinOperator.LooseNeq;
         for (int firstIndex in [0, 1]) {
           int secondIndex = 1 - firstIndex;
@@ -2324,9 +2259,7 @@
             // (x === false) ==> !x
             // (x !== true) ==> !x
             return new ApplyBuiltinOperator(
-                BuiltinOperator.IsFalsy,
-                [firstArg],
-                node.sourceInformation);
+                BuiltinOperator.IsFalsy, [firstArg], node.sourceInformation);
           }
         }
         break;
@@ -2336,8 +2269,7 @@
     return null;
   }
 
-  void visitApplyBuiltinMethod(ApplyBuiltinMethod node) {
-  }
+  void visitApplyBuiltinMethod(ApplyBuiltinMethod node) {}
 
   visitTypeTest(TypeTest node) {
     Primitive prim = node.value;
@@ -2359,27 +2291,21 @@
       // Compile as typeof x === 'number' && Math.floor(x) === x
       if (lattice.isDefinitelyNum(value, allowNull: true)) {
         // If value is null or a number, we can skip the typeof test.
-        return new ApplyBuiltinOperator(
-            BuiltinOperator.IsFloor,
-            <Primitive>[prim, prim],
-            node.sourceInformation);
+        return new ApplyBuiltinOperator(BuiltinOperator.IsFloor,
+            <Primitive>[prim, prim], node.sourceInformation);
       }
       if (lattice.isDefinitelyNotNonIntegerDouble(value)) {
         // If the value cannot be a non-integer double, but might not be a
         // number at all, we can skip the Math.floor test.
         return unaryBuiltinOperator(BuiltinOperator.IsNumber);
       }
-      return new ApplyBuiltinOperator(
-          BuiltinOperator.IsInteger,
-          <Primitive>[prim, prim, prim],
-          node.sourceInformation);
+      return new ApplyBuiltinOperator(BuiltinOperator.IsInteger,
+          <Primitive>[prim, prim, prim], node.sourceInformation);
     }
     if (node.dartType == dartTypes.coreTypes.numType ||
         node.dartType == dartTypes.coreTypes.doubleType) {
       return new ApplyBuiltinOperator(
-          BuiltinOperator.IsNumber,
-          <Primitive>[prim],
-          node.sourceInformation);
+          BuiltinOperator.IsNumber, <Primitive>[prim], node.sourceInformation);
     }
 
     AbstractBool isNullableSubtype =
@@ -2394,10 +2320,8 @@
       // 'typeof' expressions might give the VM some more useful information.
       Primitive nullConst = makeConstantPrimitive(new NullConstantValue());
       new LetPrim(nullConst).insertAbove(node.parent);
-      return new ApplyBuiltinOperator(
-          BuiltinOperator.LooseNeq,
-          <Primitive>[prim, nullConst],
-          node.sourceInformation);
+      return new ApplyBuiltinOperator(BuiltinOperator.LooseNeq,
+          <Primitive>[prim, nullConst], node.sourceInformation);
     }
 
     if (dartType.element == functionCompiler.glue.jsFixedArrayClass) {
@@ -2448,9 +2372,8 @@
     if (node.hasNoChecks) return;
     Primitive indexPrim = node.index;
     int index = lattice.intValue(getValue(indexPrim));
-    int length = node.lengthRef == null
-        ? null
-        : lattice.intValue(getValue(node.length));
+    int length =
+        node.lengthRef == null ? null : lattice.intValue(getValue(node.length));
     if (index != null && length != null && index < length) {
       node.checks &= ~BoundsCheck.UPPER_BOUND;
     }
@@ -2464,7 +2387,9 @@
       node.checks &= ~BoundsCheck.INTEGER;
     }
     if (!node.lengthUsedInCheck && node.lengthRef != null) {
-      node..lengthRef.unlink()..lengthRef = null;
+      node
+        ..lengthRef.unlink()
+        ..lengthRef = null;
     }
     if (node.checks == BoundsCheck.NONE) {
       // We can't remove the bounds check node because it may still be used to
@@ -2475,7 +2400,9 @@
       //     restrict code motion.  However, if we want to run this pass after
       //     [BoundsChecker] that would not be safe any more, so for now we
       //     keep the node for forward compatibilty.
-      node..indexRef.unlink()..indexRef = null;
+      node
+        ..indexRef.unlink()
+        ..indexRef = null;
     }
   }
 
@@ -2483,7 +2410,7 @@
     Primitive input = node.value;
     if (!input.type.isNullable &&
         (node.isNullCheck ||
-         !input.type.needsNoSuchMethodHandling(node.selector, classWorld))) {
+            !input.type.needsNoSuchMethodHandling(node.selector, classWorld))) {
       node.replaceUsesWith(input);
       return new CpsFragment();
     }
@@ -2491,8 +2418,8 @@
   }
 
   visitGetLength(GetLength node) {
-    node.isFinal = typeSystem.isDefinitelyFixedLengthIndexable(
-        node.object.type, allowNull: true);
+    node.isFinal = typeSystem.isDefinitelyFixedLengthIndexable(node.object.type,
+        allowNull: true);
   }
 
   visitReadTypeVariable(ReadTypeVariable node) {
@@ -2539,7 +2466,9 @@
     Primitive typeInformation = node.typeInformation;
     if (typeInformation is TypeExpression &&
         typeInformation.arguments.every(isNullConstant)) {
-      node..typeInformationRef.unlink()..typeInformationRef = null;
+      node
+        ..typeInformationRef.unlink()
+        ..typeInformationRef = null;
     }
   }
 }
@@ -2591,9 +2520,7 @@
   // Access through [getValue] and [setValue].
   final Map<Variable, ConstantValue> values;
 
-  TypePropagationVisitor(this.lattice,
-                         this.values,
-                         this.internalError);
+  TypePropagationVisitor(this.lattice, this.values, this.internalError);
 
   void analyze(FunctionDefinition root, bool recomputeAll) {
     reachableContinuations.clear();
@@ -2630,7 +2557,7 @@
           visit(ref.parent);
         }
       } else {
-        break;  // Both worklists empty.
+        break; // Both worklists empty.
       }
     }
   }
@@ -2684,9 +2611,8 @@
   ///
   /// If [updateValue] is a constant and [canReplace] is true, the primitive
   /// is also marked as safe for elimination, so it can be constant-folded.
-  void setResult(UnsafePrimitive prim,
-                 AbstractConstantValue updateValue,
-                 {bool canReplace: false}) {
+  void setResult(UnsafePrimitive prim, AbstractConstantValue updateValue,
+      {bool canReplace: false}) {
     // TODO(asgerf): Separate constant folding from side effect analysis.
     setValue(prim, updateValue);
     prim.isSafeForElimination = canReplace && updateValue.isConstant;
@@ -2697,7 +2623,9 @@
   }
 
   // -------------------------- Visitor overrides ------------------------------
-  void visit(Node node) { node.accept(this); }
+  void visit(Node node) {
+    node.accept(this);
+  }
 
   void visitFunctionDefinition(FunctionDefinition node) {
     if (node.interceptorParameter != null) {
@@ -2721,7 +2649,8 @@
         if (type.isEmpty) hasParameterWithoutValue = true;
       }
     }
-    if (!hasParameterWithoutValue) { // Don't analyze unreachable code.
+    if (!hasParameterWithoutValue) {
+      // Don't analyze unreachable code.
       push(node.body);
     }
   }
@@ -2848,7 +2777,6 @@
   }
 
   void visitApplyBuiltinOperator(ApplyBuiltinOperator node) {
-
     void unaryOp(
         AbstractConstantValue operation(AbstractConstantValue argument),
         TypeMask defaultType) {
@@ -2857,8 +2785,8 @@
     }
 
     void binaryOp(
-        AbstractConstantValue operation(AbstractConstantValue left,
-                                        AbstractConstantValue right),
+        AbstractConstantValue operation(
+            AbstractConstantValue left, AbstractConstantValue right),
         TypeMask defaultType) {
       AbstractConstantValue left = getValue(node.argument(0));
       AbstractConstantValue right = getValue(node.argument(1));
@@ -2866,20 +2794,20 @@
     }
 
     void binaryNumOp(
-        AbstractConstantValue operation(AbstractConstantValue left,
-                                        AbstractConstantValue right)) {
+        AbstractConstantValue operation(
+            AbstractConstantValue left, AbstractConstantValue right)) {
       binaryOp(operation, typeSystem.numType);
     }
 
     void binaryUint32Op(
-        AbstractConstantValue operation(AbstractConstantValue left,
-                                        AbstractConstantValue right)) {
+        AbstractConstantValue operation(
+            AbstractConstantValue left, AbstractConstantValue right)) {
       binaryOp(operation, typeSystem.uint32Type);
     }
 
     void binaryBoolOp(
-        AbstractConstantValue operation(AbstractConstantValue left,
-                                        AbstractConstantValue right)) {
+        AbstractConstantValue operation(
+            AbstractConstantValue left, AbstractConstantValue right)) {
       binaryOp(operation, typeSystem.boolType);
     }
 
@@ -2892,8 +2820,8 @@
             setValue(node, lattice.nothing);
             return; // And come back later
           } else if (value.isConstant &&
-                     value.constant.isString &&
-                     stringValue != null) {
+              value.constant.isString &&
+              stringValue != null) {
             StringConstantValue constant = value.constant;
             stringValue =
                 new ast.ConsDartString(stringValue, constant.primitiveValue);
@@ -2918,8 +2846,7 @@
       case BuiltinOperator.StrictNeq:
       case BuiltinOperator.LooseEq:
       case BuiltinOperator.LooseNeq:
-        bool negated =
-            node.operator == BuiltinOperator.StrictNeq ||
+        bool negated = node.operator == BuiltinOperator.StrictNeq ||
             node.operator == BuiltinOperator.LooseNeq;
         AbstractConstantValue left = getValue(node.argument(0));
         AbstractConstantValue right = getValue(node.argument(1));
@@ -2928,8 +2855,8 @@
           return;
         }
         if (left.isConstant && right.isConstant) {
-          ConstantValue equal = lattice.constantSystem.identity.fold(
-              left.constant, right.constant);
+          ConstantValue equal = lattice.constantSystem.identity
+              .fold(left.constant, right.constant);
           if (equal != null && equal.isBool) {
             ConstantValue result =
                 new BoolConstantValue(equal.isTrue == !negated);
@@ -3038,8 +2965,8 @@
   void visitApplyBuiltinMethod(ApplyBuiltinMethod node) {
     AbstractConstantValue receiver = getValue(node.receiver);
     if (node.method == BuiltinMethod.Pop) {
-      setValue(node, nonConstant(
-          typeSystem.elementTypeOfIndexable(receiver.type)));
+      setValue(
+          node, nonConstant(typeSystem.elementTypeOfIndexable(receiver.type)));
     } else {
       setValue(node, nonConstant());
     }
@@ -3063,14 +2990,11 @@
     }
   }
 
-  void visitThrow(Throw node) {
-  }
+  void visitThrow(Throw node) {}
 
-  void visitRethrow(Rethrow node) {
-  }
+  void visitRethrow(Rethrow node) {}
 
-  void visitUnreachable(Unreachable node) {
-  }
+  void visitUnreachable(Unreachable node) {}
 
   void visitBranch(Branch node) {
     AbstractConstantValue conditionCell = getValue(node.condition);
@@ -3108,7 +3032,7 @@
   void handleTypeTest(
       Primitive node, AbstractConstantValue input, types.DartType dartType) {
     TypeMask boolType = typeSystem.boolType;
-    switch(lattice.isSubtypeOf(input, dartType, allowNull: false)) {
+    switch (lattice.isSubtypeOf(input, dartType, allowNull: false)) {
       case AbstractBool.Nothing:
         break; // And come back later.
 
@@ -3144,8 +3068,7 @@
       case AbstractBool.Maybe:
         // Narrow type of output to those that survive the cast.
         TypeMask type = input.type.intersection(
-            typeSystem.subtypesOf(node.dartType).nullable(),
-            classWorld);
+            typeSystem.subtypesOf(node.dartType).nullable(), classWorld);
         setValue(node, nonConstant(type));
         break;
     }
@@ -3177,11 +3100,9 @@
     setValue(node, getValue(node.variable));
   }
 
-  void visitMutableVariable(MutableVariable node) {
-  }
+  void visitMutableVariable(MutableVariable node) {}
 
-  void visitParameter(Parameter node) {
-  }
+  void visitParameter(Parameter node) {}
 
   void visitContinuation(Continuation node) {
     node.parameters.forEach(visit);
@@ -3277,7 +3198,8 @@
   void visitForeignCode(ForeignCode node) {
     bool firstArgumentIsNullable = false;
     if (node.argumentRefs.length > 0) {
-      AbstractConstantValue first = getValue(node.argumentRefs.first.definition);
+      AbstractConstantValue first =
+          getValue(node.argumentRefs.first.definition);
       if (first.isNothing) {
         setValue(node, nothing);
         return;
@@ -3287,9 +3209,9 @@
     setValue(node, nonConstant(node.storedType));
     node.isSafeForElimination =
         !node.nativeBehavior.sideEffects.hasSideEffects() &&
-        (!node.nativeBehavior.throwBehavior.canThrow ||
-         (!firstArgumentIsNullable &&
-          node.nativeBehavior.throwBehavior.isOnlyNullNSMGuard));
+            (!node.nativeBehavior.throwBehavior.canThrow ||
+                (!firstArgumentIsNullable &&
+                    node.nativeBehavior.throwBehavior.isOnlyNullNSMGuard));
   }
 
   @override
@@ -3313,7 +3235,8 @@
       setValue(node, nothing);
     } else {
       node.objectIsNotNull = object.isDefinitelyNotNull;
-      setValue(node, nonConstant(typeSystem.elementTypeOfIndexable(object.type)));
+      setValue(
+          node, nonConstant(typeSystem.elementTypeOfIndexable(object.type)));
     }
   }
 
@@ -3332,9 +3255,10 @@
 
   @override
   void visitRefinement(Refinement node) {
-    setValue(node, lattice.intersectWithType(
-        getValue(node.value.definition),
-        node.refineType));
+    setValue(
+        node,
+        lattice.intersectWithType(
+            getValue(node.value.definition), node.refineType));
   }
 
   @override
@@ -3369,7 +3293,7 @@
 ///             and the type of the constant is in the [type] field.
 ///   NONCONST: not a constant, but [type] may hold some information.
 class AbstractConstantValue {
-  static const int NOTHING  = 0;
+  static const int NOTHING = 0;
   static const int CONSTANT = 1;
   static const int NONCONST = 2;
 
@@ -3399,7 +3323,7 @@
     }
   }
 
-  bool get isNothing  => (kind == NOTHING);
+  bool get isNothing => (kind == NOTHING);
   bool get isConstant => (kind == CONSTANT);
   bool get isNonConst => (kind == NONCONST);
   bool get isNullConstant => kind == CONSTANT && constant.isNull;
@@ -3411,6 +3335,7 @@
     PrimitiveConstantValue value = constant;
     return value.primitiveValue <= 0;
   }
+
   bool get isNegativeConstant {
     if (kind != CONSTANT || !constant.isNum) return false;
     PrimitiveConstantValue value = constant;
@@ -3427,16 +3352,20 @@
 
   bool operator ==(AbstractConstantValue that) {
     return that.kind == this.kind &&
-           that.constant == this.constant &&
-           that.type == this.type;
+        that.constant == this.constant &&
+        that.type == this.type;
   }
 
   String toString() {
     switch (kind) {
-      case NOTHING: return "Nothing";
-      case CONSTANT: return "Constant: ${constant.unparse()}: $type";
-      case NONCONST: return "Non-constant: $type";
-      default: assert(false);
+      case NOTHING:
+        return "Nothing";
+      case CONSTANT:
+        return "Constant: ${constant.unparse()}: $type";
+      case NONCONST:
+        return "Non-constant: $type";
+      default:
+        assert(false);
     }
     return null;
   }
diff --git a/pkg/compiler/lib/src/cps_ir/update_refinements.dart b/pkg/compiler/lib/src/cps_ir/update_refinements.dart
index 313f2cb..09f5d7a 100644
--- a/pkg/compiler/lib/src/cps_ir/update_refinements.dart
+++ b/pkg/compiler/lib/src/cps_ir/update_refinements.dart
@@ -44,7 +44,9 @@
         node.type = typeSystem.receiverTypeFor(node.selector, value.type);
       } else {
         // Check is no longer needed.
-        node..replaceUsesWith(value)..destroy();
+        node
+          ..replaceUsesWith(value)
+          ..destroy();
         LetPrim letPrim = node.parent;
         letPrim.remove();
         return;
@@ -62,8 +64,8 @@
   visitRefinement(Refinement node) {
     if (refine(node.value)) {
       // Update the type if the input has changed.
-      node.type = typeSystem.intersection(node.value.definition.type,
-          node.refineType);
+      node.type =
+          typeSystem.intersection(node.value.definition.type, node.refineType);
     }
     Primitive value = node.effectiveDefinition;
     Primitive old = refinementFor[value];
@@ -75,8 +77,7 @@
 
   visitBoundsCheck(BoundsCheck node) {
     super.visitBoundsCheck(node);
-    if (node.hasIntegerCheck &&
-        typeSystem.isDefinitelyInt(node.index.type)) {
+    if (node.hasIntegerCheck && typeSystem.isDefinitelyInt(node.index.type)) {
       node.checks &= ~BoundsCheck.INTEGER;
     }
   }
diff --git a/pkg/compiler/lib/src/cps_ir/use_field_initializers.dart b/pkg/compiler/lib/src/cps_ir/use_field_initializers.dart
index e923a22..1b218af 100644
--- a/pkg/compiler/lib/src/cps_ir/use_field_initializers.dart
+++ b/pkg/compiler/lib/src/cps_ir/use_field_initializers.dart
@@ -74,21 +74,27 @@
   void visitContinuation(Continuation node) {
     endBasicBlock();
   }
+
   void visitLetHandler(LetHandler node) {
     endBasicBlock();
   }
+
   void visitInvokeContinuation(InvokeContinuation node) {
     endBasicBlock();
   }
+
   void visitBranch(Branch node) {
     endBasicBlock();
   }
+
   void visitRethrow(Rethrow node) {
     endBasicBlock();
   }
+
   void visitThrow(Throw node) {
     endBasicBlock();
   }
+
   void visitUnreachable(Unreachable node) {
     endBasicBlock();
   }
@@ -109,7 +115,9 @@
   void sinkLetConts() {
     if (letContSinkTarget != null) {
       for (LetCont letCont in letConts.reversed) {
-        letCont..remove()..insertBelow(letContSinkTarget);
+        letCont
+          ..remove()
+          ..insertBelow(letContSinkTarget);
       }
       letContSinkTarget = null;
     }
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index f46ad8d..f2ee6b2 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -4,12 +4,18 @@
 
 library dart2js.cmdline;
 
-import 'dart:async'
-    show Future, EventSink;
+import 'dart:async' show Future, EventSink;
 import 'dart:convert' show UTF8, LineSplitter;
 import 'dart:io'
-    show exit, File, FileMode, Platform, RandomAccessFile, FileSystemException,
-         stdin, stderr;
+    show
+        exit,
+        File,
+        FileMode,
+        Platform,
+        RandomAccessFile,
+        FileSystemException,
+        stdin,
+        stderr;
 
 import '../compiler.dart' as api;
 import 'commandline_options.dart';
@@ -173,7 +179,10 @@
         out = currentDirectory.resolve('out.dart');
         sourceMapOut = currentDirectory.resolve('out.dart.map');
       }
-      diagnosticHandler(null, null, null,
+      diagnosticHandler(
+          null,
+          null,
+          null,
           "--output-type=dart is deprecated. It will remain available "
           "in Dart 1.11, but will be removed in Dart 1.12.",
           api.Diagnostic.WARNING);
@@ -257,7 +266,7 @@
       for (String category in categories) {
         if (!["Client", "Server"].contains(category)) {
           fail('Unsupported library category "$category", '
-               'supported categories are: Client, Server, all');
+              'supported categories are: Client, Server, all');
         }
       }
     }
@@ -304,8 +313,8 @@
       passThrough(Flags.suppressWarnings);
     }),
     new OptionHandler(Flags.fatalWarnings, passThrough),
-    new OptionHandler(Flags.suppressHints,
-                      (_) => diagnosticHandler.showHints = false),
+    new OptionHandler(
+        Flags.suppressHints, (_) => diagnosticHandler.showHints = false),
     new OptionHandler(
         '--output-type=dart|--output-type=dart-multi|--output-type=js',
         setOutputType),
@@ -318,24 +327,24 @@
     new OptionHandler(Flags.allowMockCompilation, passThrough),
     new OptionHandler(Flags.fastStartup, passThrough),
     new OptionHandler(Flags.conditionalDirectives, passThrough),
+    new OptionHandler(Flags.genericMethodSyntax, passThrough),
     new OptionHandler('${Flags.minify}|-m', implyCompilation),
     new OptionHandler(Flags.preserveUris, passThrough),
     new OptionHandler('--force-strip=.*', setStrip),
     new OptionHandler(Flags.disableDiagnosticColors,
-                      (_) => diagnosticHandler.enableColors = false),
+        (_) => diagnosticHandler.enableColors = false),
     new OptionHandler(Flags.enableDiagnosticColors,
-                      (_) => diagnosticHandler.enableColors = true),
+        (_) => diagnosticHandler.enableColors = true),
     new OptionHandler('--enable[_-]checked[_-]mode|--checked',
-                      (_) => setCheckedMode(Flags.enableCheckedMode)),
+        (_) => setCheckedMode(Flags.enableCheckedMode)),
     new OptionHandler(Flags.trustTypeAnnotations,
-                      (_) => setTrustTypeAnnotations(
-                          Flags.trustTypeAnnotations)),
+        (_) => setTrustTypeAnnotations(Flags.trustTypeAnnotations)),
     new OptionHandler(Flags.trustPrimitives,
-                      (_) => setTrustPrimitives(
-                          Flags.trustPrimitives)),
-    new OptionHandler(Flags.trustJSInteropTypeAnnotations,
-                      (_) => setTrustJSInteropTypeAnnotations(
-                          Flags.trustJSInteropTypeAnnotations)),
+        (_) => setTrustPrimitives(Flags.trustPrimitives)),
+    new OptionHandler(
+        Flags.trustJSInteropTypeAnnotations,
+        (_) => setTrustJSInteropTypeAnnotations(
+            Flags.trustJSInteropTypeAnnotations)),
     new OptionHandler(r'--help|/\?|/h', (_) => wantHelp = true),
     new OptionHandler('--packages=.+', setPackageConfig),
     new OptionHandler('--package-root=.+|-p.+', setPackageRoot),
@@ -349,8 +358,8 @@
     new OptionHandler(Flags.terse, passThrough),
     new OptionHandler('--deferred-map=.+', implyCompilation),
     new OptionHandler(Flags.dumpInfo, setDumpInfo),
-    new OptionHandler('--disallow-unsafe-eval',
-                      (_) => hasDisallowUnsafeEval = true),
+    new OptionHandler(
+        '--disallow-unsafe-eval', (_) => hasDisallowUnsafeEval = true),
     new OptionHandler(Option.showPackageWarnings, passThrough),
     new OptionHandler(Flags.useContentSecurityPolicy, passThrough),
     new OptionHandler(Flags.enableExperimentalMirrors, passThrough),
@@ -361,7 +370,7 @@
           "Async-await is supported by default.",
           api.Diagnostic.HINT);
     }),
-    new OptionHandler('--enable-null-aware-operators',  (_) {
+    new OptionHandler('--enable-null-aware-operators', (_) {
       diagnosticHandler.info(
           "Option '--enable-null-aware-operators' is no longer needed. "
           "Null aware operators are supported by default.",
@@ -393,18 +402,18 @@
   }
 
   if (hasDisallowUnsafeEval) {
-    String precompiledName =
-        relativize(currentDirectory,
-                   RandomAccessFileOutputProvider.computePrecompiledUri(out),
-                   Platform.isWindows);
+    String precompiledName = relativize(
+        currentDirectory,
+        RandomAccessFileOutputProvider.computePrecompiledUri(out),
+        Platform.isWindows);
     helpAndFail("Option '--disallow-unsafe-eval' has been removed."
-                " Instead, the compiler generates a file named"
-                " '$precompiledName'.");
+        " Instead, the compiler generates a file named"
+        " '$precompiledName'.");
   }
 
   if (outputLanguage != OUTPUT_LANGUAGE_DART && stripArgumentSet) {
     helpAndFail("Option '--force-strip' may only be used with "
-                "'--output-type=dart'.");
+        "'--output-type=dart'.");
   }
   if (arguments.isEmpty) {
     helpAndFail('No Dart file specified.');
@@ -416,7 +425,7 @@
 
   if (checkedMode && trustTypeAnnotations) {
     helpAndFail("Option '${Flags.trustTypeAnnotations}' may not be used in "
-                "checked mode.");
+        "checked mode.");
   }
 
   if (packageRoot != null && packageConfig != null) {
@@ -438,33 +447,33 @@
   if (!analyzeOnly) {
     if (allowNativeExtensions) {
       helpAndFail("Option '${Flags.allowNativeExtensions}' is only supported "
-                  "in combination with the '${Flags.analyzeOnly}' option.");
+          "in combination with the '${Flags.analyzeOnly}' option.");
     }
   }
   if (dumpInfo && outputLanguage == OUTPUT_LANGUAGE_DART) {
     helpAndFail("Option '${Flags.dumpInfo}' is not supported in "
-                "combination with the '--output-type=dart' option.");
+        "combination with the '--output-type=dart' option.");
   }
 
   options.add('--out=$out');
   options.add('--source-map=$sourceMapOut');
 
   RandomAccessFileOutputProvider outputProvider =
-      new RandomAccessFileOutputProvider(
-          out, sourceMapOut, onInfo: diagnosticHandler.info, onFailure: fail);
+      new RandomAccessFileOutputProvider(out, sourceMapOut,
+          onInfo: diagnosticHandler.info, onFailure: fail);
 
   api.CompilationResult compilationDone(api.CompilationResult result) {
     if (analyzeOnly) return result;
     if (!result.isSuccess) {
       fail('Compilation failed.');
     }
-    writeString(Uri.parse('$out.deps'),
-                getDepsOutput(inputProvider.sourceFiles));
-    diagnosticHandler.info(
-         'Compiled ${inputProvider.dartCharactersRead} characters Dart '
-         '-> ${outputProvider.totalCharactersWritten} characters '
-         '$outputLanguage in '
-         '${relativize(currentDirectory, out, Platform.isWindows)}');
+    writeString(
+        Uri.parse('$out.deps'), getDepsOutput(inputProvider.sourceFiles));
+    diagnosticHandler
+        .info('Compiled ${inputProvider.dartCharactersRead} characters Dart '
+            '-> ${outputProvider.totalCharactersWritten} characters '
+            '$outputLanguage in '
+            '${relativize(currentDirectory, out, Platform.isWindows)}');
     if (diagnosticHandler.verbose) {
       String input = uriPathToNative(arguments[0]);
       print('Dart file ($input) compiled to $outputLanguage.');
@@ -481,10 +490,18 @@
   }
 
   Uri uri = currentDirectory.resolve(arguments[0]);
-  return compileFunc(uri, libraryRoot, packageRoot, inputProvider,
-                     diagnosticHandler, options, outputProvider, environment,
-                     packageConfig, findPackages)
-            .then(compilationDone);
+  return compileFunc(
+          uri,
+          libraryRoot,
+          packageRoot,
+          inputProvider,
+          diagnosticHandler,
+          options,
+          outputProvider,
+          environment,
+          packageConfig,
+          findPackages)
+      .then(compilationDone);
 }
 
 class AbortLeg {
@@ -504,8 +521,7 @@
 
 void fail(String message) {
   if (diagnosticHandler != null) {
-    diagnosticHandler.report(
-        null, null, -1, -1, message, api.Diagnostic.ERROR);
+    diagnosticHandler.report(null, null, -1, -1, message, api.Diagnostic.ERROR);
   } else {
     print('Error: $message');
   }
@@ -515,7 +531,7 @@
 Future<api.CompilationResult> compilerMain(List<String> arguments) {
   var root = uriPathToNative("/$LIBRARY_ROOT");
   arguments = <String>['--library-root=${Platform.script.toFilePath()}$root']
-      ..addAll(arguments);
+    ..addAll(arguments);
   return compile(arguments);
 }
 
@@ -660,14 +676,13 @@
   --no-frequency-based-minification
     Experimental.  Disabled the new frequency based minifying namer and use the
     old namer instead.
-'''.trim());
+'''
+      .trim());
 }
 
 void helpAndExit(bool wantHelp, bool wantVersion, bool verbose) {
   if (wantVersion) {
-    var version = (BUILD_ID == null)
-        ? '<non-SDK build>'
-        : BUILD_ID;
+    var version = (BUILD_ID == null) ? '<non-SDK build>' : BUILD_ID;
     print('Dart-to-JavaScript compiler (dart2js) version: $version');
   }
   if (wantHelp) {
@@ -762,7 +777,7 @@
     }).whenComplete(() {
       // The testing framework waits for a status line on stdout and
       // stderr before moving to the next test.
-      if (exitCode == 0){
+      if (exitCode == 0) {
         print(">>> TEST OK");
       } else if (exitCode == 253) {
         print(">>> TEST CRASH");
diff --git a/pkg/compiler/lib/src/dart2js_profile_many.dart b/pkg/compiler/lib/src/dart2js_profile_many.dart
index e7ad871..e29ec46 100644
--- a/pkg/compiler/lib/src/dart2js_profile_many.dart
+++ b/pkg/compiler/lib/src/dart2js_profile_many.dart
@@ -7,8 +7,7 @@
 import 'dart2js.dart' as cmdline;
 import 'dart:async';
 
-const String USAGE =
-"""
+const String USAGE = """
 Usage: dart2js_profile_many.dart [OPTIONS] [FILES]
 
 Invokes dart2js separately for each file using the given options.
@@ -20,7 +19,6 @@
 }
 
 void main(List<String> args) {
-
   List options = [];
   List files = [];
 
@@ -45,10 +43,8 @@
     List subargs = [];
     subargs.addAll(options);
     subargs.add(file);
-    return cmdline.compilerMain(subargs).catchError((e) {  });
+    return cmdline.compilerMain(subargs).catchError((e) {});
   }).then((_) {
     print("Done");
   });
-
-
 }
diff --git a/pkg/compiler/lib/src/dart2js_stress.dart b/pkg/compiler/lib/src/dart2js_stress.dart
index 7daedea..453d95c 100644
--- a/pkg/compiler/lib/src/dart2js_stress.dart
+++ b/pkg/compiler/lib/src/dart2js_stress.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 library dart2js.stress;
+
 import "dart2js.dart" as dart2js;
 
 const ITERATIONS_FLAG_PREFIX = "--iterations=";
@@ -16,23 +17,21 @@
   }
   if (maxCount == null) {
     print("Running indefinitely.\n"
-          "Use '$ITERATIONS_FLAG_PREFIX<count>' to set a repetition count"
-          " (as first flag).");
+        "Use '$ITERATIONS_FLAG_PREFIX<count>' to set a repetition count"
+        " (as first flag).");
   }
   args = ["--suppress-warnings", "--suppress-hints"]..addAll(args);
   void iterate() {
     count++;
     sw.reset();
     sw.start();
-    dart2js.internalMain(args)
-      .then((_) {
-        print("$count: ${sw.elapsedMilliseconds}ms");
-      })
-      .then((_) {
-        if (maxCount == null || count < maxCount) {
-          iterate();
-        }
-      });
+    dart2js.internalMain(args).then((_) {
+      print("$count: ${sw.elapsedMilliseconds}ms");
+    }).then((_) {
+      if (maxCount == null || count < maxCount) {
+        iterate();
+      }
+    });
   }
   iterate();
 }
diff --git a/pkg/compiler/lib/src/dart_backend/backend.dart b/pkg/compiler/lib/src/dart_backend/backend.dart
index bb925f9..8d9d0cc 100644
--- a/pkg/compiler/lib/src/dart_backend/backend.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend.dart
@@ -52,11 +52,10 @@
       new Set<ClassElement>();
 
   bool enableCodegenWithErrorsIfSupported(Spannable node) {
-    reporter.reportHintMessage(
-        node,
-        MessageKind.GENERIC,
-        {'text': "Generation of code with compile time errors is not "
-                 "supported for dart2dart."});
+    reporter.reportHintMessage(node, MessageKind.GENERIC, {
+      'text': "Generation of code with compile time errors is not "
+          "supported for dart2dart."
+    });
     return false;
   }
 
@@ -73,14 +72,14 @@
       Map<ClassElement, Iterable<Element>> classMembers) {
     ClassElement typeErrorElement = compiler.coreLibrary.find('TypeError');
     if (classMembers.containsKey(typeErrorElement) ||
-        compiler.resolverWorld.isChecks.any(
-            (DartType type) => type.element == typeErrorElement)) {
+        compiler.resolverWorld.isChecks
+            .any((DartType type) => type.element == typeErrorElement)) {
       return false;
     }
     Set<DartType> processedTypes = new Set<DartType>();
     List<DartType> workQueue = new List<DartType>();
-    workQueue.addAll(
-        classMembers.keys.map((classElement) => classElement.thisType));
+    workQueue
+        .addAll(classMembers.keys.map((classElement) => classElement.thisType));
     workQueue.addAll(compiler.resolverWorld.isChecks);
 
     while (!workQueue.isEmpty) {
@@ -116,7 +115,6 @@
     impactTransformer = new DartImpactTransformer(this);
   }
 
-
   DiagnosticReporter get reporter => compiler.reporter;
 
   Resolution get resolution => compiler.resolution;
@@ -128,7 +126,12 @@
     // Right now resolver doesn't always resolve interfaces needed
     // for literals, so force them. TODO(antonm): fix in the resolver.
     final LITERAL_TYPE_NAMES = const [
-      'Map', 'List', 'num', 'int', 'double', 'bool'
+      'Map',
+      'List',
+      'num',
+      'int',
+      'double',
+      'bool'
     ];
     final coreLibrary = compiler.coreLibrary;
     for (final name in LITERAL_TYPE_NAMES) {
@@ -138,12 +141,10 @@
     // Enqueue the methods that the VM might invoke on user objects because
     // we don't trust the resolution to always get these included.
     world.registerDynamicUse(new DynamicUse(Selectors.toString_, null));
-    world.registerDynamicUse(
-        new DynamicUse(Selectors.hashCode_, null));
+    world.registerDynamicUse(new DynamicUse(Selectors.hashCode_, null));
     world.registerDynamicUse(
         new DynamicUse(new Selector.binaryOperator('=='), null));
-    world.registerDynamicUse(
-        new DynamicUse(Selectors.compareTo, null));
+    world.registerDynamicUse(new DynamicUse(Selectors.compareTo, null));
   }
 
   WorldImpact codegen(CodegenWorkItem work) {
@@ -158,27 +159,25 @@
   bool shouldOutput(Element element) {
     return (!element.library.isPlatformLibrary &&
             !element.isSynthesized &&
-            element is! AbstractFieldElement)
-        || mirrorRenamer.isMirrorHelperLibrary(element.library);
+            element is! AbstractFieldElement) ||
+        mirrorRenamer.isMirrorHelperLibrary(element.library);
   }
 
   int assembleProgram() {
     ElementAst computeElementAst(AstElement element) {
-      return new ElementAst(element.resolvedAst.node,
-                            element.resolvedAst.elements);
+      return new ElementAst(
+          element.resolvedAst.node, element.resolvedAst.elements);
     }
 
     // TODO(johnniwinther): Remove the need for this method.
-    void postProcessElementAst(
-        AstElement element, ElementAst elementAst,
-        newTypedefElementCallback,
-        newClassElementCallback) {
-      ReferencedElementCollector collector =
-          new ReferencedElementCollector(reporter,
-                                         element,
-                                         elementAst,
-                                         newTypedefElementCallback,
-                                         newClassElementCallback);
+    void postProcessElementAst(AstElement element, ElementAst elementAst,
+        newTypedefElementCallback, newClassElementCallback) {
+      ReferencedElementCollector collector = new ReferencedElementCollector(
+          reporter,
+          element,
+          elementAst,
+          newTypedefElementCallback,
+          newClassElementCallback);
       collector.collect();
     }
 
@@ -198,17 +197,14 @@
 
     // Output verbose info about size ratio of resulting bundle to all
     // referenced non-platform sources.
-    logResultBundleSizeInfo(
-        outputter.libraryInfo.userLibraries,
-        outputter.elementInfo.topLevelElements,
-        totalSize);
+    logResultBundleSizeInfo(outputter.libraryInfo.userLibraries,
+        outputter.elementInfo.topLevelElements, totalSize);
 
     return totalSize;
   }
 
   void logResultBundleSizeInfo(Iterable<LibraryElement> userLibraries,
-                               Iterable<Element> topLevelElements,
-                               int totalOutputSize) {
+      Iterable<Element> topLevelElements, int totalOutputSize) {
     // Sum total size of scripts in each referenced library.
     int nonPlatformSize = 0;
     for (LibraryElement lib in userLibraries) {
@@ -239,11 +235,12 @@
     });
     if (useMirrorHelperLibrary &&
         loadedLibraries.containsLibrary(Uris.dart_mirrors)) {
-      return compiler.libraryLoader.loadLibrary(
-          compiler.translateResolvedUri(
+      return compiler.libraryLoader
+          .loadLibrary(compiler.translateResolvedUri(
               loadedLibraries.getLibrary(Uris.dart_mirrors),
-              MirrorRenamerImpl.DART_MIRROR_HELPER, null)).
-          then((LibraryElement library) {
+              MirrorRenamerImpl.DART_MIRROR_HELPER,
+              null))
+          .then((LibraryElement library) {
         mirrorRenamer = new MirrorRenamerImpl(compiler, this, library);
       });
     }
@@ -261,21 +258,18 @@
   }
 
   @override
-  void registerInstantiatedType(InterfaceType type,
-                                Enqueuer enqueuer,
-                                Registry registry,
-                                {bool mirrorUsage: false}) {
+  void registerInstantiatedType(
+      InterfaceType type, Enqueuer enqueuer, Registry registry,
+      {bool mirrorUsage: false}) {
     registerPlatformMembers(type, registerUse: registry.registerDynamicUse);
-    super.registerInstantiatedType(
-        type, enqueuer, registry, mirrorUsage: mirrorUsage);
+    super.registerInstantiatedType(type, enqueuer, registry,
+        mirrorUsage: mirrorUsage);
   }
 
   /// Register dynamic access of members of [type] that implement members
   /// of types defined in the platform libraries.
-  void registerPlatformMembers(
-      InterfaceType type,
+  void registerPlatformMembers(InterfaceType type,
       {void registerUse(DynamicUse dynamicUse)}) {
-
     // Without patching, dart2dart has no way of performing sound tree-shaking
     // in face external functions. Therefore we employ another scheme:
     //
@@ -310,8 +304,8 @@
     ClassElement cls = type.element;
     if (!cls.library.isPlatformLibrary) {
       for (Link<DartType> link = cls.allSupertypes;
-           !link.isEmpty;
-           link = link.tail) {
+          !link.isEmpty;
+          link = link.tail) {
         InterfaceType supertype = link.head;
         ClassElement superclass = supertype.element;
         LibraryElement library = superclass.library;
@@ -326,8 +320,7 @@
               FunctionElement function = element.asFunctionElement();
               element.computeType(resolution);
               Selector selector = new Selector.fromElement(element);
-              registerUse(
-                  new DynamicUse(selector, null));
+              registerUse(new DynamicUse(selector, null));
             });
           }
         }
@@ -402,7 +395,6 @@
   }
 }
 
-
 /**
  * Some elements are not recorded by resolver now,
  * for example, typedefs or classes which are only
@@ -416,11 +408,8 @@
   final newTypedefElementCallback;
   final newClassElementCallback;
 
-  ReferencedElementCollector(this.reporter,
-                             this.element,
-                             this.elementAst,
-                             this.newTypedefElementCallback,
-                             this.newClassElementCallback);
+  ReferencedElementCollector(this.reporter, this.element, this.elementAst,
+      this.newTypedefElementCallback, this.newClassElementCallback);
 
   visitNode(Node node) {
     node.visitChildren(this);
@@ -466,8 +455,8 @@
   final DartConstantCompiler constantCompiler;
 
   DartConstantTask(Compiler compiler)
-    : this.constantCompiler = new DartConstantCompiler(compiler),
-      super(compiler);
+      : this.constantCompiler = new DartConstantCompiler(compiler),
+        super(compiler);
 
   String get name => 'ConstantHandler';
 
@@ -526,9 +515,7 @@
   }
 
   @override
-  ConstantExpression compileNode(
-      Node node,
-      TreeElements elements,
+  ConstantExpression compileNode(Node node, TreeElements elements,
       {bool enforceConst: true}) {
     return measure(() {
       return constantCompiler.compileNodeWithDefinitions(node, elements,
@@ -538,9 +525,7 @@
 
   @override
   ConstantExpression compileMetadata(
-      MetadataAnnotation metadata,
-      Node node,
-      TreeElements elements) {
+      MetadataAnnotation metadata, Node node, TreeElements elements) {
     return measure(() {
       return constantCompiler.compileMetadata(metadata, node, elements);
     });
@@ -550,7 +535,7 @@
   // expressions.
   @override
   void copyConstantValues(DartConstantTask task) {
-    constantCompiler.constantValueMap.addAll(
-        task.constantCompiler.constantValueMap);
+    constantCompiler.constantValueMap
+        .addAll(task.constantCompiler.constantValueMap);
   }
 }
diff --git a/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart b/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
index 10b056d..fd7a45f 100644
--- a/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend_ast_emitter.dart
@@ -9,13 +9,11 @@
 import '../elements/elements.dart';
 
 class TypeGenerator {
-
   /// TODO(johnniwinther): Remove this when issue 21283 has been resolved.
   static int pseudoNameCounter = 0;
 
   static Parameter emitParameter(DartType type,
-                                 {String name,
-                                  Element element}) {
+      {String name, Element element}) {
     if (name == null && element != null) {
       name = element.name;
     }
@@ -26,8 +24,7 @@
     if (type.isFunctionType) {
       FunctionType functionType = type;
       TypeAnnotation returnType = createOptionalType(functionType.returnType);
-      Parameters innerParameters =
-          createParametersFromType(functionType);
+      Parameters innerParameters = createParametersFromType(functionType);
       parameter = new Parameter.function(name, returnType, innerParameters);
     } else {
       TypeAnnotation typeAnnotation = createOptionalType(type);
@@ -40,31 +37,26 @@
   static Parameters createParametersFromType(FunctionType functionType) {
     pseudoNameCounter = 0;
     if (functionType.namedParameters.isEmpty) {
-      return new Parameters(
-          createParameters(functionType.parameterTypes),
-          createParameters(functionType.optionalParameterTypes),
-          false);
+      return new Parameters(createParameters(functionType.parameterTypes),
+          createParameters(functionType.optionalParameterTypes), false);
     } else {
       return new Parameters(
           createParameters(functionType.parameterTypes),
           createParameters(functionType.namedParameterTypes,
-                         names: functionType.namedParameters),
+              names: functionType.namedParameters),
           true);
     }
   }
 
-  static List<Parameter> createParameters(
-      Iterable<DartType> parameterTypes,
+  static List<Parameter> createParameters(Iterable<DartType> parameterTypes,
       {Iterable<String> names: const <String>[],
-       Iterable<Element> elements: const <Element>[]}) {
+      Iterable<Element> elements: const <Element>[]}) {
     Iterator<String> name = names.iterator;
     Iterator<Element> element = elements.iterator;
     return parameterTypes.map((DartType type) {
       name.moveNext();
       element.moveNext();
-      return emitParameter(type,
-                           name: name.current,
-                           element: element.current);
+      return emitParameter(type, name: name.current, element: element.current);
     }).toList();
   }
 
@@ -83,22 +75,17 @@
       if (type.treatAsRaw) {
         return new TypeAnnotation(type.element.name)..dartType = type;
       }
-      return new TypeAnnotation(
-          type.element.name,
-          type.typeArguments.map(createType).toList(growable:false))
-          ..dartType = type;
+      return new TypeAnnotation(type.element.name,
+          type.typeArguments.map(createType).toList(growable: false))
+        ..dartType = type;
     } else if (type is VoidType) {
-      return new TypeAnnotation('void')
-          ..dartType = type;
+      return new TypeAnnotation('void')..dartType = type;
     } else if (type is TypeVariableType) {
-      return new TypeAnnotation(type.name)
-          ..dartType = type;
+      return new TypeAnnotation(type.name)..dartType = type;
     } else if (type is DynamicType) {
-      return new TypeAnnotation("dynamic")
-          ..dartType = type;
+      return new TypeAnnotation("dynamic")..dartType = type;
     } else if (type is MalformedType) {
-      return new TypeAnnotation(type.name)
-          ..dartType = type;
+      return new TypeAnnotation(type.name)..dartType = type;
     } else {
       throw "Unsupported type annotation: $type";
     }
diff --git a/pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart b/pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart
index d4e86e6..81c17c3 100644
--- a/pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend_ast_nodes.dart
@@ -68,7 +68,6 @@
 
 // STATEMENTS
 
-
 class Block extends Statement {
   final List<Statement> statements;
 
@@ -108,9 +107,9 @@
 
   /// Initializer must be [VariableDeclarations] or [Expression] or null.
   For(this.initializer, this.condition, this.updates, this.body) {
-    assert(initializer == null
-        || initializer is VariableDeclarations
-        || initializer is Expression);
+    assert(initializer == null ||
+        initializer is VariableDeclarations ||
+        initializer is Expression);
   }
 }
 
@@ -124,10 +123,10 @@
   /// initializer.
   ForIn(Node leftHandValue, this.expression, this.body)
       : this.leftHandValue = leftHandValue {
-    assert(leftHandValue is Identifier
-        || (leftHandValue is VariableDeclarations
-            && leftHandValue.declarations.length == 1
-            && leftHandValue.declarations[0].initializer == null));
+    assert(leftHandValue is Identifier ||
+        (leftHandValue is VariableDeclarations &&
+            leftHandValue.declarations.length == 1 &&
+            leftHandValue.declarations[0].initializer == null));
   }
 }
 
@@ -160,8 +159,7 @@
   LabeledStatement(this.label, this.statement);
 }
 
-class Rethrow extends Statement {
-}
+class Rethrow extends Statement {}
 
 class Return extends Statement {
   final Expression expression;
@@ -229,9 +227,7 @@
   final List<VariableDeclaration> declarations;
 
   VariableDeclarations(this.declarations,
-                      { this.type,
-                        this.isFinal: false,
-                        this.isConst: false }) {
+      {this.type, this.isFinal: false, this.isConst: false}) {
     // Cannot be both final and const.
     assert(!isFinal || !isConst);
   }
@@ -246,7 +242,6 @@
   VariableDeclaration(this.name, [this.initializer]);
 }
 
-
 class FunctionDeclaration extends Statement {
   final FunctionExpression function;
 
@@ -264,14 +259,13 @@
   final bool hasNamedParameters;
 
   Parameters(this.requiredParameters,
-             [ this.optionalParameters,
-               this.hasNamedParameters = false ]);
+      [this.optionalParameters, this.hasNamedParameters = false]);
 
   Parameters.named(this.requiredParameters, this.optionalParameters)
       : hasNamedParameters = true;
 
   Parameters.positional(this.requiredParameters, this.optionalParameters)
-        : hasNamedParameters = false;
+      : hasNamedParameters = false;
 
   bool get hasOptionalParameters =>
       optionalParameters != null && optionalParameters.length > 0;
@@ -290,13 +284,11 @@
 
   elements.FormalElement element;
 
-  Parameter(this.name, {this.type, this.defaultValue})
-      : parameters = null;
+  Parameter(this.name, {this.type, this.defaultValue}) : parameters = null;
 
-  Parameter.function(this.name,
-                     TypeAnnotation returnType,
-                     this.parameters,
-                     [ this.defaultValue ]) : type = returnType {
+  Parameter.function(this.name, TypeAnnotation returnType, this.parameters,
+      [this.defaultValue])
+      : type = returnType {
     assert(parameters != null);
   }
 
@@ -332,12 +324,11 @@
 
   elements.FunctionElement element;
 
-  FunctionExpression(this.parameters,
-                     this.body,
-                     { this.name,
-                       this.returnType,
-                       this.isGetter: false,
-                       this.isSetter: false }) {
+  FunctionExpression(this.parameters, this.body,
+      {this.name,
+      this.returnType,
+      this.isGetter: false,
+      this.isSetter: false}) {
     // Function must have a name if it has a return type
     assert(returnType == null || name != null);
   }
@@ -348,7 +339,7 @@
   final bool isConst;
 
   ConstructorDefinition(Parameters parameters, Statement body,
-                        this.initializers, String name, this.isConst)
+      this.initializers, String name, this.isConst)
       : super(parameters, body, name: name);
 }
 
@@ -389,7 +380,7 @@
   final TypeAnnotation typeArgument;
   final List<Expression> values;
 
-  LiteralList(this.values, { this.typeArgument, this.isConst: false });
+  LiteralList(this.values, {this.typeArgument, this.isConst: false});
 }
 
 class LiteralMap extends Expression {
@@ -397,10 +388,10 @@
   final List<TypeAnnotation> typeArguments;
   final List<LiteralMapEntry> entries;
 
-  LiteralMap(this.entries, { this.typeArguments, this.isConst: false }) {
-    assert(this.typeArguments == null
-        || this.typeArguments.length == 0
-        || this.typeArguments.length == 2);
+  LiteralMap(this.entries, {this.typeArguments, this.isConst: false}) {
+    assert(this.typeArguments == null ||
+        this.typeArguments.length == 0 ||
+        this.typeArguments.length == 2);
   }
 }
 
@@ -504,10 +495,8 @@
   elements.FunctionElement constructor;
   types.DartType dartType;
 
-  CallNew(this.type,
-          this.arguments,
-         { this.constructorName,
-           this.isConst: false });
+  CallNew(this.type, this.arguments,
+      {this.constructorName, this.isConst: false});
 }
 
 /// Expression of form `T.f(..)`.
@@ -550,9 +539,7 @@
   final TypeAnnotation type;
 
   TypeOperator(this.expression, this.operator, this.type) {
-    assert(operator == 'is'
-        || operator == 'as'
-        || operator == 'is!');
+    assert(operator == 'is' || operator == 'as' || operator == 'is!');
   }
 }
 
@@ -574,9 +561,20 @@
 }
 
 class Assignment extends Expression {
-  static final _operators =
-      new Set.from(['=', '|=', '^=', '&=', '<<=', '>>=',
-                    '+=', '-=', '*=', '/=', '%=', '~/=']);
+  static final _operators = new Set.from([
+    '=',
+    '|=',
+    '^=',
+    '&=',
+    '<<=',
+    '>>=',
+    '+=',
+    '-=',
+    '*=',
+    '/=',
+    '%=',
+    '~/='
+  ]);
 
   final Expression left;
   final String operator;
@@ -606,9 +604,11 @@
 bool isUnaryOperator(String op) {
   return op == '!' || op == '-' || op == '~';
 }
+
 bool isBinaryOperator(String op) {
   return BINARY_PRECEDENCE.containsKey(op);
 }
+
 /// True if the given operator can be converted to a compound assignment.
 bool isCompoundableOperator(String op) {
   switch (BINARY_PRECEDENCE[op]) {
@@ -624,7 +624,6 @@
   }
 }
 
-
 // Precedence levels
 const int EXPRESSION = 1;
 const int CONDITIONAL = 2;
@@ -646,28 +645,22 @@
 /// Precedence level required for the callee in a [FunctionCall].
 const int CALLEE = 21;
 
-const Map<String,int> BINARY_PRECEDENCE = const {
+const Map<String, int> BINARY_PRECEDENCE = const {
   '&&': LOGICAL_AND,
   '||': LOGICAL_OR,
-
   '==': EQUALITY,
   '!=': EQUALITY,
-
   '>': RELATIONAL,
   '>=': RELATIONAL,
   '<': RELATIONAL,
   '<=': RELATIONAL,
-
   '|': BITWISE_OR,
   '^': BITWISE_XOR,
   '&': BITWISE_AND,
-
   '>>': SHIFT,
   '<<': SHIFT,
-
   '+': ADDITIVE,
   '-': ADDITIVE,
-
   '*': MULTIPLICATIVE,
   '%': MULTIPLICATIVE,
   '/': MULTIPLICATIVE,
@@ -687,9 +680,9 @@
     return false;
   }
   return (characters.$0 <= x && x <= characters.$9) ||
-         (characters.$A <= x && x <= characters.$Z) ||
-         (characters.$a <= x && x <= characters.$z) ||
-         (x == characters.$_);
+      (characters.$A <= x && x <= characters.$Z) ||
+      (characters.$a <= x && x <= characters.$z) ||
+      (x == characters.$_);
 }
 
 /// The unparser will apply the following syntactic rewritings:
@@ -727,7 +720,6 @@
 
   Unparser(this.output);
 
-
   void write(String s) {
     output.write(s);
   }
@@ -786,7 +778,7 @@
   /// using parentheses if necessary to raise the precedence level.
   /// Abusing terminology slightly, the function accepts a [Receiver] which
   /// may also be the [SuperReceiver] object.
-  void writeExp(Receiver e, int minPrecedence, {beginStmt:false}) {
+  void writeExp(Receiver e, int minPrecedence, {beginStmt: false}) {
     void withPrecedence(int actual, void action()) {
       if (actual < minPrecedence) {
         write("(");
@@ -842,8 +834,7 @@
     } else if (e is Literal) {
       if (e.value.isString) {
         writeStringLiteral(e);
-      }
-      else if (e.value.isDouble) {
+      } else if (e.value.isDouble) {
         double v = e.value.primitiveValue;
         if (v == double.INFINITY) {
           withPrecedence(MULTIPLICATIVE, () {
@@ -875,8 +866,7 @@
       write('[');
       writeEach(',', e.values, writeExpression);
       write(']');
-    }
-    else if (e is LiteralMap) {
+    } else if (e is LiteralMap) {
       // The curly brace can be mistaken for a block statement if we
       // are at the beginning of a statement.
       bool needParen = beginStmt;
@@ -920,7 +910,8 @@
       Receiver operand = e.operand;
       // !(x == y) ==> x != y.
       if (e.operatorName == '!' &&
-          operand is BinaryOperator && operand.operator == '==') {
+          operand is BinaryOperator &&
+          operand.operator == '==') {
         withPrecedence(EQUALITY, () {
           writeExp(operand.left, RELATIONAL);
           writeOperator('!=');
@@ -929,14 +920,14 @@
       }
       // !(x is T) ==> x is!T
       else if (e.operatorName == '!' &&
-          operand is TypeOperator && operand.operator == 'is') {
+          operand is TypeOperator &&
+          operand.operator == 'is') {
         withPrecedence(RELATIONAL, () {
           writeExp(operand.expression, BITWISE_OR, beginStmt: beginStmt);
           write(' is!');
           writeType(operand.type);
         });
-      }
-      else {
+      } else {
         withPrecedence(UNARY, () {
           writeOperator(e.operatorName);
           writeExp(e.operand, UNARY);
@@ -1100,7 +1091,7 @@
     } else if (stmt is EmptyStatement) {
       write(';');
     } else if (stmt is ExpressionStatement) {
-      writeExp(stmt.expression, EXPRESSION, beginStmt:true);
+      writeExp(stmt.expression, EXPRESSION, beginStmt: true);
       write(';');
     } else if (stmt is For) {
       write('for(');
@@ -1246,8 +1237,7 @@
   void writeVariableDefinitions(VariableDeclarations vds) {
     if (vds.isConst)
       write('const ');
-    else if (vds.isFinal)
-      write('final ');
+    else if (vds.isFinal) write('final ');
     if (vds.type != null) {
       writeType(vds.type);
       write(' ');
@@ -1307,10 +1297,10 @@
   // Ignore multiline quotings for now. Would need to make sure that no
   // newline (potentially prefixed by whitespace) follows the quoting.
   static const _QUOTINGS = const <tree.StringQuoting>[
-      const tree.StringQuoting(characters.$DQ, raw: false, leftQuoteLength: 1),
-      const tree.StringQuoting(characters.$DQ, raw: true, leftQuoteLength: 1),
-      const tree.StringQuoting(characters.$SQ, raw: false, leftQuoteLength: 1),
-      const tree.StringQuoting(characters.$SQ, raw: true, leftQuoteLength: 1),
+    const tree.StringQuoting(characters.$DQ, raw: false, leftQuoteLength: 1),
+    const tree.StringQuoting(characters.$DQ, raw: true, leftQuoteLength: 1),
+    const tree.StringQuoting(characters.$SQ, raw: false, leftQuoteLength: 1),
+    const tree.StringQuoting(characters.$SQ, raw: true, leftQuoteLength: 1),
   ];
 
   static StringLiteralOutput analyzeStringLiteral(Expression node) {
@@ -1371,24 +1361,20 @@
       }
     }
 
-
     /// Applies additional cost to each track in [penalized], and considers
     /// switching from each [penalized] to a [nonPenalized] track.
-    void penalize(List<int> penalized,
-                  List<int> nonPenalized,
-                  int endIndex,
-                  num cost(tree.StringQuoting q)) {
+    void penalize(List<int> penalized, List<int> nonPenalized, int endIndex,
+        num cost(tree.StringQuoting q)) {
       for (int j in penalized) {
         // Check if another track can benefit from switching from this track.
         for (int k in nonPenalized) {
-          num newCost = best[j].cost
-                      + 1             // Whitespace in string juxtaposition
-                      + getQuoteCost(best[k].quoting);
+          num newCost = best[j].cost +
+              1 // Whitespace in string juxtaposition
+              +
+              getQuoteCost(best[k].quoting);
           if (newCost < best[k].cost) {
             best[k] = new OpenStringChunk(
-                best[j].end(endIndex),
-                best[k].quoting,
-                newCost);
+                best[j].end(endIndex), best[k].quoting, newCost);
           }
         }
         best[j].cost += cost(best[j].quoting);
@@ -1433,18 +1419,18 @@
         if (part is Identifier &&
             !part.name.contains(r'$') &&
             i + 1 < parts.length &&
-            isIdentifierPartNoDollar(parts[i+1])) {
+            isIdentifierPartNoDollar(parts[i + 1])) {
           for (int j in nonRaws) {
             for (int k = 0; k < best.length; k++) {
-              num newCost = best[j].cost
-                          + 1             // Whitespace in string juxtaposition
-                          - 2             // Save two curly braces
-                          + getQuoteCost(best[k].quoting);
+              num newCost = best[j].cost +
+                  1 // Whitespace in string juxtaposition
+                  -
+                  2 // Save two curly braces
+                  +
+                  getQuoteCost(best[k].quoting);
               if (newCost < best[k].cost) {
                 best[k] = new OpenStringChunk(
-                    best[j].end(i+1),
-                    best[k].quoting,
-                    newCost);
+                    best[j].end(i + 1), best[k].quoting, newCost);
               }
             }
           }
@@ -1481,15 +1467,15 @@
       write(chunk.quoting.quoteChar);
       bool raw = chunk.quoting.raw;
       int quoteCode = chunk.quoting.quote;
-      for (int i=startIndex; i<chunk.endIndex; i++) {
+      for (int i = startIndex; i < chunk.endIndex; i++) {
         var part = parts[i];
         if (part is int) {
           int char = part;
           write(getEscapedCharacter(char, quoteCode, raw));
         } else if (part is Identifier &&
-                   !part.name.contains(r'$') &&
-                   (i == chunk.endIndex - 1 ||
-                    !isIdentifierPartNoDollar(parts[i+1]))) {
+            !part.name.contains(r'$') &&
+            (i == chunk.endIndex - 1 ||
+                !isIdentifierPartNoDollar(parts[i + 1]))) {
           write(r'$');
           write(part.name);
         } else {
@@ -1531,7 +1517,6 @@
         return new String.fromCharCode(char);
     }
   }
-
 }
 
 /// The contents of a string literal together with a strategy for printing it.
@@ -1544,7 +1529,6 @@
   StringLiteralOutput(this.parts, this.chunk);
 }
 
-
 /// Strategy for printing a prefix of a string literal.
 /// A chunk represents the substring going from [:previous.endIndex:] to
 /// [endIndex] (or from 0 to [endIndex] if [previous] is null).
diff --git a/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart b/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
index 2500c44..1ab7882 100644
--- a/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
@@ -8,8 +8,7 @@
 import '../constants/values.dart' as values;
 import '../dart_types.dart' as types;
 import '../elements/elements.dart' as elements;
-import '../resolution/tree_elements.dart' show
-    TreeElementMapping;
+import '../resolution/tree_elements.dart' show TreeElementMapping;
 import '../tokens/token.dart';
 import '../tokens/token_constants.dart';
 import '../tokens/precedence.dart';
@@ -20,8 +19,7 @@
 import 'backend_ast_emitter.dart' show TypeGenerator;
 
 /// Translates the backend AST to Dart frontend AST.
-tree.Node emit(TreeElementMapping treeElements,
-               RootNode root) {
+tree.Node emit(TreeElementMapping treeElements, RootNode root) {
   return new TreePrinter(treeElements).makeDefinition(root);
 }
 
@@ -52,10 +50,11 @@
       setElement(definition, node.element, node);
       return new tree.VariableDefinitions(
           null, // TODO(sigurdm): Type
-          makeVarModifiers(useVar: true,
-                           isFinal: node.element.isFinal,
-                           isStatic: node.element.isStatic,
-                           isConst: node.element.isConst),
+          makeVarModifiers(
+              useVar: true,
+              isFinal: node.element.isFinal,
+              isStatic: node.element.isStatic,
+              isConst: node.element.isConst),
           makeList(null, [definition], close: semicolon));
     } else if (node is FunctionExpression) {
       return makeExpression(node);
@@ -90,12 +89,12 @@
     return openTok;
   }
 
-  final BeginGroupToken openParen = makeGroup(OPEN_PAREN_INFO,
-                                              CLOSE_PAREN_INFO);
-  final BeginGroupToken openBrace = makeGroup(OPEN_CURLY_BRACKET_INFO,
-                                              CLOSE_CURLY_BRACKET_INFO);
-  final BeginGroupToken openBracket = makeGroup(OPEN_SQUARE_BRACKET_INFO,
-                                                CLOSE_SQUARE_BRACKET_INFO);
+  final BeginGroupToken openParen =
+      makeGroup(OPEN_PAREN_INFO, CLOSE_PAREN_INFO);
+  final BeginGroupToken openBrace =
+      makeGroup(OPEN_CURLY_BRACKET_INFO, CLOSE_CURLY_BRACKET_INFO);
+  final BeginGroupToken openBracket =
+      makeGroup(OPEN_SQUARE_BRACKET_INFO, CLOSE_SQUARE_BRACKET_INFO);
   final BeginGroupToken lt = makeGroup(LT_INFO, GT_INFO);
 
   Token get closeParen => openParen.endGroup;
@@ -116,6 +115,7 @@
   static Token makeIdToken(String text) {
     return new StringToken.fromString(IDENTIFIER_INFO, text, -1);
   }
+
   final Token newToken = makeIdToken('new');
   final Token constToken = makeIdToken('const');
   final Token throwToken = makeIdToken('throw');
@@ -168,27 +168,32 @@
   tree.NodeList blankList() {
     return new tree.NodeList(null, makeLink([]), null, '');
   }
+
   tree.NodeList singleton(tree.Node node) {
     return new tree.NodeList(null, makeLink([node]), null, '');
   }
-  tree.NodeList makeList(String delimiter,
-                         Iterable<tree.Node> nodes,
-                         { Token open,
-                           Token close }) {
+
+  tree.NodeList makeList(String delimiter, Iterable<tree.Node> nodes,
+      {Token open, Token close}) {
     return new tree.NodeList(open, makeLink(nodes), close, delimiter);
   }
+
   tree.NodeList parenList(String delimiter, Iterable<tree.Node> nodes) {
     return makeList(delimiter, nodes, open: openParen, close: closeParen);
   }
+
   tree.NodeList bracketList(String delimiter, Iterable<tree.Node> nodes) {
     return makeList(delimiter, nodes, open: openBracket, close: closeBracket);
   }
+
   tree.NodeList braceList(String delimiter, Iterable<tree.Node> nodes) {
     return makeList(delimiter, nodes, open: openBrace, close: closeBrace);
   }
+
   tree.NodeList argList(Iterable<tree.Node> nodes) {
     return parenList(',', nodes);
   }
+
   tree.NodeList typeArgList(Iterable<tree.Node> nodes) {
     return makeList(',', nodes, open: lt, close: gt);
   }
@@ -198,7 +203,7 @@
     if (name == null) {
       return null;
     }
-    List<String> names = name.split('.').toList(growable:false);
+    List<String> names = name.split('.').toList(growable: false);
     tree.Node node = makeIdentifier(names[0]);
     for (int i = 1; i < names.length; i++) {
       node = new tree.Send(node, makeIdentifier(names[i]));
@@ -208,18 +213,30 @@
 
   static Token assignmentToken(String operatorName) {
     switch (operatorName) {
-      case '=': return new SymbolToken(EQ_INFO, -1);
-      case '+=': return new SymbolToken(PLUS_EQ_INFO, -1);
-      case '-=': return new SymbolToken(MINUS_EQ_INFO, -1);
-      case '*=': return new SymbolToken(STAR_EQ_INFO, -1);
-      case '/=': return new SymbolToken(SLASH_EQ_INFO, -1);
-      case '~/=': return new SymbolToken(TILDE_SLASH_EQ_INFO, -1);
-      case '%=': return new SymbolToken(PERCENT_EQ_INFO, -1);
-      case '&=': return new SymbolToken(AMPERSAND_EQ_INFO, -1);
-      case '^=': return new SymbolToken(CARET_EQ_INFO, -1);
-      case '|=': return new SymbolToken(BAR_EQ_INFO, -1);
-      case '>>=': return new SymbolToken(GT_GT_EQ_INFO, -1);
-      case '<<=': return new SymbolToken(LT_LT_EQ_INFO, -1);
+      case '=':
+        return new SymbolToken(EQ_INFO, -1);
+      case '+=':
+        return new SymbolToken(PLUS_EQ_INFO, -1);
+      case '-=':
+        return new SymbolToken(MINUS_EQ_INFO, -1);
+      case '*=':
+        return new SymbolToken(STAR_EQ_INFO, -1);
+      case '/=':
+        return new SymbolToken(SLASH_EQ_INFO, -1);
+      case '~/=':
+        return new SymbolToken(TILDE_SLASH_EQ_INFO, -1);
+      case '%=':
+        return new SymbolToken(PERCENT_EQ_INFO, -1);
+      case '&=':
+        return new SymbolToken(AMPERSAND_EQ_INFO, -1);
+      case '^=':
+        return new SymbolToken(CARET_EQ_INFO, -1);
+      case '|=':
+        return new SymbolToken(BAR_EQ_INFO, -1);
+      case '>>=':
+        return new SymbolToken(GT_GT_EQ_INFO, -1);
+      case '<<=':
+        return new SymbolToken(LT_LT_EQ_INFO, -1);
       default:
         throw "Unrecognized assignment operator: $operatorName";
     }
@@ -227,25 +244,44 @@
 
   static Token binopToken(String operatorName) {
     switch (operatorName) {
-      case '+': return new SymbolToken(PLUS_INFO, -1);
-      case '-': return new SymbolToken(MINUS_INFO, -1);
-      case '*': return new SymbolToken(STAR_INFO, -1);
-      case '/': return new SymbolToken(SLASH_INFO, -1);
-      case '~/': return new SymbolToken(TILDE_SLASH_INFO, -1);
-      case '%': return new SymbolToken(PERCENT_INFO, -1);
-      case '&': return new SymbolToken(AMPERSAND_INFO, -1);
-      case '^': return new SymbolToken(CARET_INFO, -1);
-      case '|': return new SymbolToken(BAR_INFO, -1);
-      case '>>': return new SymbolToken(GT_GT_INFO, -1);
-      case '<<': return new SymbolToken(LT_LT_INFO, -1);
-      case '==': return new SymbolToken(EQ_EQ_INFO, -1);
-      case '!=': return new SymbolToken(BANG_EQ_INFO, -1);
-      case '>': return new SymbolToken(GT_INFO, -1);
-      case '>=': return new SymbolToken(GT_EQ_INFO, -1);
-      case '<': return new SymbolToken(LT_INFO, -1);
-      case '<=': return new SymbolToken(LT_EQ_INFO, -1);
-      case '&&': return new SymbolToken(AMPERSAND_AMPERSAND_INFO, -1);
-      case '||': return new SymbolToken(BAR_BAR_INFO, -1);
+      case '+':
+        return new SymbolToken(PLUS_INFO, -1);
+      case '-':
+        return new SymbolToken(MINUS_INFO, -1);
+      case '*':
+        return new SymbolToken(STAR_INFO, -1);
+      case '/':
+        return new SymbolToken(SLASH_INFO, -1);
+      case '~/':
+        return new SymbolToken(TILDE_SLASH_INFO, -1);
+      case '%':
+        return new SymbolToken(PERCENT_INFO, -1);
+      case '&':
+        return new SymbolToken(AMPERSAND_INFO, -1);
+      case '^':
+        return new SymbolToken(CARET_INFO, -1);
+      case '|':
+        return new SymbolToken(BAR_INFO, -1);
+      case '>>':
+        return new SymbolToken(GT_GT_INFO, -1);
+      case '<<':
+        return new SymbolToken(LT_LT_INFO, -1);
+      case '==':
+        return new SymbolToken(EQ_EQ_INFO, -1);
+      case '!=':
+        return new SymbolToken(BANG_EQ_INFO, -1);
+      case '>':
+        return new SymbolToken(GT_INFO, -1);
+      case '>=':
+        return new SymbolToken(GT_EQ_INFO, -1);
+      case '<':
+        return new SymbolToken(LT_INFO, -1);
+      case '<=':
+        return new SymbolToken(LT_EQ_INFO, -1);
+      case '&&':
+        return new SymbolToken(AMPERSAND_AMPERSAND_INFO, -1);
+      case '||':
+        return new SymbolToken(BAR_BAR_INFO, -1);
       default:
         throw "Unrecognized binary operator: $operatorName";
     }
@@ -253,17 +289,22 @@
 
   static Token incrementToken(String operatorName) {
     switch (operatorName) {
-      case '++': return new SymbolToken(PLUS_PLUS_INFO, -1);
-      case '--': return new SymbolToken(MINUS_MINUS_INFO, -1);
+      case '++':
+        return new SymbolToken(PLUS_PLUS_INFO, -1);
+      case '--':
+        return new SymbolToken(MINUS_MINUS_INFO, -1);
       default:
         throw "Unrecognized increment operator: $operatorName";
     }
   }
 
   static Token typeOpToken(String operatorName) {
-    switch (operatorName) { // "is!" is not an operator in the frontend AST.
-      case 'is': return new SymbolToken(IS_INFO, -1);
-      case 'as': return new SymbolToken(AS_INFO, -1);
+    switch (operatorName) {
+      // "is!" is not an operator in the frontend AST.
+      case 'is':
+        return new SymbolToken(IS_INFO, -1);
+      case 'as':
+        return new SymbolToken(AS_INFO, -1);
       default:
         throw 'Unrecognized type operator: $operatorName';
     }
@@ -271,9 +312,12 @@
 
   Token unopToken(String operatorName) {
     switch (operatorName) {
-      case '-': return new SymbolToken(MINUS_INFO, -1);
-      case '~': return new SymbolToken(TILDE_INFO, -1);
-      case '!': return bang;
+      case '-':
+        return new SymbolToken(MINUS_INFO, -1);
+      case '~':
+        return new SymbolToken(TILDE_INFO, -1);
+      case '!':
+        return bang;
       default:
         throw "Unrecognized unary operator: $operatorName";
     }
@@ -283,9 +327,7 @@
     if (treeElements == null) return null;
     if (element.isStatic) {
       elements.ClassElement enclosingClass = element.enclosingClass;
-      tree.Send send = new tree.Send(
-          null,
-          makeIdentifier(enclosingClass.name));
+      tree.Send send = new tree.Send(null, makeIdentifier(enclosingClass.name));
       treeElements[send] = enclosingClass;
       return send;
     } else {
@@ -298,9 +340,7 @@
       return makeExpression(arg);
     } else if (arg is NamedArgument) {
       return new tree.NamedArgument(
-          makeIdentifier(arg.name),
-          colon,
-          makeExpression(arg.expression));
+          makeIdentifier(arg.name), colon, makeExpression(arg.expression));
     } else {
       throw "Unrecognized argument type: ${arg}";
     }
@@ -338,8 +378,8 @@
       } else if (left is IndexExpression) {
         receiver = makeExp(left.object, PRIMARY, beginStmt: beginStmt);
         selector = new tree.Operator(indexToken);
-        arguments = bracketList(',',
-            [makeExpression(left.index), makeExpression(exp.right)]);
+        arguments = bracketList(
+            ',', [makeExpression(left.index), makeExpression(exp.right)]);
       } else {
         throw "Unexpected left-hand side of assignment: ${left}";
       }
@@ -358,8 +398,8 @@
       // class B { var x; B() : x = (() {return a;}) {}}
       // Not the invalid:
       // class B { var x; B() : x = () {return a;} {}}
-      result = new tree.SendSet(receiver, selector, op,
-                                singleton(makeExp(exp.body, CALLEE)));
+      result = new tree.SendSet(
+          receiver, selector, op, singleton(makeExp(exp.body, CALLEE)));
       setElement(result, exp.element, exp);
     } else if (exp is SuperInitializer) {
       precedence = EXPRESSION;
@@ -369,9 +409,8 @@
       if (exp.target.name == "") {
         result = new tree.Send(null, receiver, arguments);
       } else {
-        result = new tree.Send(receiver,
-                               makeIdentifier(exp.target.name),
-                               arguments);
+        result =
+            new tree.Send(receiver, makeIdentifier(exp.target.name), arguments);
       }
       setElement(result, exp.target, exp);
     } else if (exp is BinaryOperator) {
@@ -395,9 +434,7 @@
         selector = makeExp(callee, CALLEE, beginStmt: beginStmt);
       }
       result = new tree.Send(
-          receiver,
-          selector,
-          argList(exp.arguments.map(makeArgument)));
+          receiver, selector, argList(exp.arguments.map(makeArgument)));
       if (callee is Identifier) {
         setElement(result, element, exp);
       }
@@ -406,31 +443,23 @@
       // TODO(sra): Elide receiver when This, but only if not in a scope that
       // shadows the method (e.g. constructor body).
       tree.Node receiver = makeExp(exp.object, PRIMARY, beginStmt: beginStmt);
-      result = new tree.Send(
-          receiver,
-          makeIdentifier(exp.methodName),
+      result = new tree.Send(receiver, makeIdentifier(exp.methodName),
           argList(exp.arguments.map(makeArgument)));
     } else if (exp is CallNew) {
       precedence = CALLEE;
       tree.Node selector = makeName(exp.type.name);
       if (exp.type.typeArguments.length > 0) {
         selector = new tree.TypeAnnotation(
-            selector,
-            typeArgList(exp.type.typeArguments.map(makeType)));
+            selector, typeArgList(exp.type.typeArguments.map(makeType)));
         setType(selector, exp.dartType, exp);
       }
       if (exp.constructorName != null) {
-        selector = new tree.Send(
-            selector,
-            makeIdentifier(exp.constructorName));
+        selector = new tree.Send(selector, makeIdentifier(exp.constructorName));
       }
       tree.Send send = new tree.Send(
-          null,
-          selector,
-          argList(exp.arguments.map(makeArgument)));
-      result = new tree.NewExpression(
-          exp.isConst ? constToken : newToken,
-          send);
+          null, selector, argList(exp.arguments.map(makeArgument)));
+      result =
+          new tree.NewExpression(exp.isConst ? constToken : newToken, send);
       setType(result, exp.dartType, exp);
       setElement(send, exp.constructor, exp);
     } else if (exp is CallStatic) {
@@ -459,18 +488,19 @@
       tree.NodeList parameters = makeParameters(exp.parameters);
       tree.NodeList initializers =
           exp.initializers == null || exp.initializers.isEmpty
-          ? null
-          : makeList(",", exp.initializers.map(makeExpression).toList());
+              ? null
+              : makeList(",", exp.initializers.map(makeExpression).toList());
       tree.Node body = exp.isConst || exp.body == null
           ? new tree.EmptyStatement(semicolon)
           : makeFunctionBody(exp.body);
-      result = new tree.FunctionExpression(constructorName(exp),
+      result = new tree.FunctionExpression(
+          constructorName(exp),
           parameters,
           body,
-          null,  // return type
+          null, // return type
           makeFunctionModifiers(exp),
           initializers,
-          null,  // get/set
+          null, // get/set
           null); // async modifier
       setElement(result, exp.element, exp);
     } else if (exp is FunctionExpression) {
@@ -478,33 +508,27 @@
       if (beginStmt && exp.name != null) {
         needParen = true; // Do not mistake for function declaration.
       }
-      Token getOrSet = exp.isGetter
-          ? getToken
-          : exp.isSetter
-              ? setToken
-              : null;
-      tree.NodeList parameters = exp.isGetter
-          ? makeList("", [])
-          : makeParameters(exp.parameters);
+      Token getOrSet = exp.isGetter ? getToken : exp.isSetter ? setToken : null;
+      tree.NodeList parameters =
+          exp.isGetter ? makeList("", []) : makeParameters(exp.parameters);
       tree.Node body = makeFunctionBody(exp.body);
       result = new tree.FunctionExpression(
           functionName(exp),
           parameters,
           body,
           exp.returnType == null || exp.element.isConstructor
-            ? null
-            : makeType(exp.returnType),
+              ? null
+              : makeType(exp.returnType),
           makeFunctionModifiers(exp),
-          null,  // initializers
-          getOrSet,  // get/set
-          null);  // async modifier
+          null, // initializers
+          getOrSet, // get/set
+          null); // async modifier
       elements.Element element = exp.element;
       if (element != null) setElement(result, element, exp);
     } else if (exp is Identifier) {
       precedence = CALLEE;
       result = new tree.Send(
-          makeStaticReceiver(exp.element),
-          makeIdentifier(exp.name));
+          makeStaticReceiver(exp.element), makeIdentifier(exp.name));
       setElement(result, exp.element, exp);
     } else if (exp is Increment) {
       Expression lvalue = exp.expression;
@@ -597,8 +621,7 @@
     } else if (exp is LiteralSymbol) {
       precedence = PRIMARY;
       result = new tree.LiteralSymbol(
-          hash,
-          makeList('.', exp.id.split('.').map(makeIdentifier)));
+          hash, makeList('.', exp.id.split('.').map(makeIdentifier)));
     } else if (exp is LiteralType) {
       precedence = TYPE_LITERAL;
       elements.Element optionalElement = exp.type.element;
@@ -606,14 +629,13 @@
           optionalElement == null ? null : makeStaticReceiver(optionalElement),
           makeIdentifier(exp.name));
       treeElements.setType(result, exp.type);
-      if (optionalElement != null) { // dynamic does not have an element
+      if (optionalElement != null) {
+        // dynamic does not have an element
         setElement(result, optionalElement, exp);
       }
     } else if (exp is ReifyTypeVar) {
       precedence = PRIMARY;
-      result = new tree.Send(
-          null,
-          makeIdentifier(exp.name));
+      result = new tree.Send(null, makeIdentifier(exp.name));
       setElement(result, exp.element, exp);
       setType(result, exp.element.type, exp);
     } else if (exp is StringConcat) {
@@ -624,9 +646,7 @@
       result = makeIdentifier('this');
     } else if (exp is Throw) {
       precedence = EXPRESSION; // ???
-      result = new tree.Throw(
-          makeExpression(exp.expression),
-          throwToken,
+      result = new tree.Throw(makeExpression(exp.expression), throwToken,
           throwToken); // endToken not used by unparser
     } else if (exp is TypeOperator) {
       precedence = RELATIONAL;
@@ -634,10 +654,8 @@
       tree.Node rightOperand = makeType(exp.type);
       if (exp.operator == 'is!') {
         operator = new tree.Operator(typeOpToken('is'));
-        rightOperand = new tree.Send(
-            rightOperand,
-            new tree.Operator(bang),
-            blankList());
+        rightOperand =
+            new tree.Send(rightOperand, new tree.Operator(bang), blankList());
       } else {
         operator = new tree.Operator(typeOpToken(exp.operator));
       }
@@ -647,8 +665,7 @@
           singleton(rightOperand));
     } else if (exp is UnaryOperator) {
       precedence = UNARY;
-      result = new tree.Send.prefix(
-          makeExp(exp.operand, UNARY),
+      result = new tree.Send.prefix(makeExp(exp.operand, UNARY),
           new tree.Operator(unopToken(exp.operatorName)));
     } else {
       throw "Unknown expression type: ${exp}";
@@ -672,9 +689,7 @@
 
   tree.LiteralMapEntry makeLiteralMapEntry(LiteralMapEntry en) {
     return new tree.LiteralMapEntry(
-        makeExpression(en.key),
-        colon,
-        makeExpression(en.value));
+        makeExpression(en.key), colon, makeExpression(en.value));
   }
 
   /// A comment token to be inserted when [INSERT_NEW_BACKEND_COMMENT] is true.
@@ -684,8 +699,8 @@
 
   tree.Node makeFunctionBody(Statement stmt) {
     if (INSERT_NEW_BACKEND_COMMENT) {
-      return new tree.Block(makeList('', [makeBlock(stmt)],
-                                     open: newBackendComment));
+      return new tree.Block(
+          makeList('', [makeBlock(stmt)], open: newBackendComment));
     } else {
       return makeBlock(stmt);
     }
@@ -717,7 +732,7 @@
   /// True if [stmt] is equivalent to an empty statement.
   bool isEmptyStatement(Statement stmt) {
     return stmt is EmptyStatement ||
-          (stmt is Block && stmt.statements.every(isEmptyStatement));
+        (stmt is Block && stmt.statements.every(isEmptyStatement));
   }
 
   tree.Node makeStatement(Statement stmt, {bool shortIf: true}) {
@@ -748,8 +763,7 @@
       return new tree.EmptyStatement(semicolon);
     } else if (stmt is ExpressionStatement) {
       return new tree.ExpressionStatement(
-          makeExp(stmt.expression, EXPRESSION, beginStmt: true),
-          semicolon);
+          makeExp(stmt.expression, EXPRESSION, beginStmt: true), semicolon);
     } else if (stmt is For) {
       tree.Node initializer;
       if (stmt.initializer is VariableDeclarations) {
@@ -762,8 +776,7 @@
       tree.Node condition;
       if (stmt.condition != null) {
         condition = new tree.ExpressionStatement(
-            makeExpression(stmt.condition),
-            semicolon);
+            makeExpression(stmt.condition), semicolon);
       } else {
         condition = new tree.EmptyStatement(semicolon);
       }
@@ -780,12 +793,8 @@
       } else {
         left = makeVariableDeclarations(stmt.leftHandValue);
       }
-      return new tree.SyncForIn(
-          left,
-          makeExpression(stmt.expression),
-          makeStatement(stmt.body, shortIf: shortIf),
-          forToken,
-          inToken);
+      return new tree.SyncForIn(left, makeExpression(stmt.expression),
+          makeStatement(stmt.body, shortIf: shortIf), forToken, inToken);
     } else if (stmt is FunctionDeclaration) {
       tree.FunctionExpression function = new tree.FunctionExpression(
           stmt.name != null ? makeIdentifier(stmt.name) : null,
@@ -793,8 +802,8 @@
           makeFunctionBody(stmt.body),
           stmt.returnType != null ? makeType(stmt.returnType) : null,
           makeEmptyModifiers(),
-          null,  // initializers
-          null,  // get/set
+          null, // initializers
+          null, // get/set
           null); // async modifier
       setElement(function, stmt.function.element, stmt);
       return new tree.FunctionDeclaration(function);
@@ -827,14 +836,11 @@
         inner = lbl.statement;
       }
       return new tree.LabeledStatement(
-          makeList('', labels),
-          makeStatement(inner, shortIf: shortIf));
+          makeList('', labels), makeStatement(inner, shortIf: shortIf));
     } else if (stmt is Rethrow) {
       return new tree.Rethrow(rethrowToken, semicolon);
     } else if (stmt is Return) {
-      return new tree.Return(
-          returnToken,
-          semicolon,
+      return new tree.Return(returnToken, semicolon,
           stmt.expression == null ? null : makeExpression(stmt.expression));
     } else if (stmt is Switch) {
       return new tree.SwitchStatement(
@@ -851,10 +857,8 @@
     } else if (stmt is VariableDeclarations) {
       return makeVariableDeclarations(stmt, useVar: true, endToken: semicolon);
     } else if (stmt is While) {
-      return new tree.While(
-          parenthesize(makeExpression(stmt.condition)),
-          makeStatement(stmt.body, shortIf: shortIf),
-          whileToken);
+      return new tree.While(parenthesize(makeExpression(stmt.condition)),
+          makeStatement(stmt.body, shortIf: shortIf), whileToken);
     } else {
       throw "Unrecognized statement: ${stmt}";
     }
@@ -866,11 +870,8 @@
     if (vd.initializer == null) {
       return id;
     }
-    tree.Node send = new tree.SendSet(
-          null,
-          id,
-          new tree.Operator(eq),
-          singleton(makeExpression(vd.initializer)));
+    tree.Node send = new tree.SendSet(null, id, new tree.Operator(eq),
+        singleton(makeExpression(vd.initializer)));
     setElement(send, vd.element, vd);
     return send;
   }
@@ -879,15 +880,14 @@
   /// if no other modifiers are present.
   /// [endToken] will be used to terminate the declaration list.
   tree.Node makeVariableDeclarations(VariableDeclarations decl,
-                                      { bool useVar: false,
-                                        Token endToken: null }) {
+      {bool useVar: false, Token endToken: null}) {
     return new tree.VariableDefinitions(
         decl.type == null ? null : makeType(decl.type),
-        makeVarModifiers(isConst: decl.isConst,
-                          isFinal: decl.isFinal,
-                          useVar: useVar && decl.type == null),
-        makeList(',',
-            decl.declarations.map(makeVariableDeclaration),
+        makeVarModifiers(
+            isConst: decl.isConst,
+            isFinal: decl.isFinal,
+            useVar: useVar && decl.type == null),
+        makeList(',', decl.declarations.map(makeVariableDeclaration),
             close: endToken));
   }
 
@@ -897,17 +897,13 @@
       tree.Node exceptionName = makeIdentifier(block.exceptionVar.name);
       setElement(exceptionName, block.exceptionVar.element, block.exceptionVar);
       formals.add(new tree.VariableDefinitions(
-          null,
-          makeEmptyModifiers(),
-          singleton(exceptionName)));
+          null, makeEmptyModifiers(), singleton(exceptionName)));
     }
     if (block.stackVar != null) {
       tree.Node stackTraceName = makeIdentifier(block.stackVar.name);
       setElement(stackTraceName, block.stackVar.element, block.stackVar);
       formals.add(new tree.VariableDefinitions(
-          null,
-          makeEmptyModifiers(),
-          singleton(stackTraceName)));
+          null, makeEmptyModifiers(), singleton(stackTraceName)));
     }
     return new tree.CatchBlock(
         block.onType == null ? null : makeType(block.onType),
@@ -958,7 +954,7 @@
       Token open = params.hasNamedParameters ? openBrace : openBracket;
       Token close = params.hasNamedParameters ? closeBrace : closeBracket;
       Iterable<tree.Node> opt =
-          params.optionalParameters.map((p) => makeParameter(p,assign));
+          params.optionalParameters.map((p) => makeParameter(p, assign));
       nodes.add(new tree.NodeList(open, makeLink(opt), close, ','));
     }
     return argList(nodes);
@@ -971,10 +967,10 @@
           makeIdentifier(param.name),
           makeParameters(param.parameters),
           null, // body
-          param.type == null ? null : makeType(param.type),
+              param.type == null ? null : makeType(param.type),
           makeEmptyModifiers(), // TODO: Function parameter modifiers?
-          null,  // initializers
-          null,  // get/set
+          null, // initializers
+          null, // get/set
           null); // async modifier
       if (param.element != null) {
         setElement(definition, param.element, param);
@@ -987,9 +983,7 @@
             singleton(makeExpression(param.defaultValue)));
       }
       return new tree.VariableDefinitions(
-          null,
-          makeEmptyModifiers(),
-          singleton(definition));
+          null, makeEmptyModifiers(), singleton(definition));
     } else {
       tree.Node definition;
       if (param.defaultValue != null) {
@@ -1015,13 +1009,14 @@
     return new tree.Modifiers(blankList());
   }
 
-  tree.Modifiers makeModifiers({bool isExternal: false,
-                                bool isStatic: false,
-                                bool isAbstract: false,
-                                bool isFactory: false,
-                                bool isConst: false,
-                                bool isFinal: false,
-                                bool isVar: false}) {
+  tree.Modifiers makeModifiers(
+      {bool isExternal: false,
+      bool isStatic: false,
+      bool isAbstract: false,
+      bool isFactory: false,
+      bool isConst: false,
+      bool isFinal: false,
+      bool isVar: false}) {
     List<tree.Node> nodes = [];
     if (isExternal) {
       nodes.add(makeIdentifier('external'));
@@ -1047,22 +1042,25 @@
     return new tree.Modifiers(makeList(' ', nodes));
   }
 
-  tree.Modifiers makeVarModifiers({bool isConst: false,
-                                   bool isFinal: false,
-                                   bool useVar: false,
-                                   bool isStatic: false}) {
-    return makeModifiers(isStatic: isStatic,
-                         isConst: isConst,
-                         isFinal: isFinal,
-                         isVar: useVar && !(isConst || isFinal));
+  tree.Modifiers makeVarModifiers(
+      {bool isConst: false,
+      bool isFinal: false,
+      bool useVar: false,
+      bool isStatic: false}) {
+    return makeModifiers(
+        isStatic: isStatic,
+        isConst: isConst,
+        isFinal: isFinal,
+        isVar: useVar && !(isConst || isFinal));
   }
 
   tree.Modifiers makeFunctionModifiers(FunctionExpression exp) {
     if (exp.element == null) return makeEmptyModifiers();
-    return makeModifiers(isExternal: exp.element.isExternal,
-                         isStatic: exp.element.isStatic,
-                         isFactory: exp.element.isFactoryConstructor,
-                         isConst: exp.element.isConst);
+    return makeModifiers(
+        isExternal: exp.element.isExternal,
+        isStatic: exp.element.isStatic,
+        isFactory: exp.element.isFactoryConstructor,
+        isConst: exp.element.isConst);
   }
 
   tree.Node makeNodeForClassElement(elements.ClassElement cls) {
@@ -1089,8 +1087,8 @@
     final Token typedefKeyword = typedefToken;
     final Token endToken = semicolon;
 
-    return new tree.Typedef(returnType, name, typeParameters, formals,
-          typedefKeyword, endToken);
+    return new tree.Typedef(
+        returnType, name, typeParameters, formals, typedefKeyword, endToken);
   }
 
   /// Create a [tree.NodeList] containing the type variable declarations in
@@ -1126,17 +1124,17 @@
   /// differs between [tree.NamedMixinApplication] and [tree.ClassNode].
   // TODO(johnniwinther): Normalize interfaces on[tree.NamedMixinApplication]
   // and [tree.ClassNode].
-  tree.NodeList makeInterfaces(Link<types.DartType> interfaces,
-                               Set<types.DartType> mixinTypes,
-                               {bool forNamedMixinApplication: false}) {
+  tree.NodeList makeInterfaces(
+      Link<types.DartType> interfaces, Set<types.DartType> mixinTypes,
+      {bool forNamedMixinApplication: false}) {
     Link<tree.Node> typeAnnotations = const Link<tree.Node>();
     for (Link<types.DartType> link = interfaces;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       types.DartType interface = link.head;
       if (!mixinTypes.contains(interface)) {
-        typeAnnotations = typeAnnotations.prepend(
-            makeType(TypeGenerator.createType(interface)));
+        typeAnnotations = typeAnnotations
+            .prepend(makeType(TypeGenerator.createType(interface)));
       }
     }
     if (typeAnnotations.isEmpty) {
@@ -1144,7 +1142,9 @@
     } else {
       return new tree.NodeList(
           forNamedMixinApplication ? null : implementsToken,
-          typeAnnotations, null, ',');
+          typeAnnotations,
+          null,
+          ',');
     }
   }
 
@@ -1152,11 +1152,10 @@
   // TODO(johnniwinther): Unify creation of mixin lists between
   // [NamedMixinApplicationElement] and [ClassElement].
   tree.NamedMixinApplication makeNamedMixinApplication(
-       elements.MixinApplicationElement cls) {
-
+      elements.MixinApplicationElement cls) {
     assert(invariant(cls, !cls.isUnnamedMixinApplication,
         message: "Cannot create ClassNode for unnamed mixin application "
-                 "$cls."));
+            "$cls."));
     tree.Modifiers modifiers = makeModifiers(isAbstract: cls.isAbstract);
     tree.Identifier name = makeIdentifier(cls.name);
     tree.NodeList typeParameters = makeTypeParameters(cls.typeVariables);
@@ -1183,12 +1182,11 @@
     tree.Node supernode = new tree.MixinApplication(
         superclass, new tree.NodeList(null, mixins, null, ','));
 
-    tree.NodeList interfaces = makeInterfaces(
-        cls.interfaces, mixinTypes, forNamedMixinApplication: true);
+    tree.NodeList interfaces = makeInterfaces(cls.interfaces, mixinTypes,
+        forNamedMixinApplication: true);
 
-    return new tree.NamedMixinApplication(
-        name, typeParameters, modifiers, supernode,
-        interfaces, classToken, semicolon);
+    return new tree.NamedMixinApplication(name, typeParameters, modifiers,
+        supernode, interfaces, classToken, semicolon);
   }
 
   tree.Enum makeEnum(elements.EnumClassElement cls) {
@@ -1196,14 +1194,14 @@
         enumToken,
         makeIdentifier(cls.name),
         makeList(',', cls.enumValues.map((e) => makeIdentifier(e.name)),
-                 open: openBrace, close: closeBrace));
+            open: openBrace, close: closeBrace));
   }
 
   /// Creates a [tree.ClassNode] node for [cls].
   tree.ClassNode makeClassNode(elements.ClassElement cls) {
     assert(invariant(cls, !cls.isUnnamedMixinApplication,
         message: "Cannot create ClassNode for unnamed mixin application "
-                 "$cls."));
+            "$cls."));
     tree.Modifiers modifiers = makeModifiers(isAbstract: cls.isAbstract);
     tree.Identifier name = makeIdentifier(cls.name);
     tree.NodeList typeParameters = makeTypeParameters(cls.typeVariables);
@@ -1232,13 +1230,17 @@
         supernode = makeType(TypeGenerator.createType(supertype));
       }
     }
-    tree.NodeList interfaces = makeInterfaces(
-        cls.interfaces, mixinTypes);
+    tree.NodeList interfaces = makeInterfaces(cls.interfaces, mixinTypes);
 
     Token extendsKeyword = supernode != null ? extendsToken : null;
     return new tree.ClassNode(
-        modifiers, name, typeParameters, supernode,
-        interfaces, openBrace, extendsKeyword,
+        modifiers,
+        name,
+        typeParameters,
+        supernode,
+        interfaces,
+        openBrace,
+        extendsKeyword,
         null, // No body.
         closeBrace);
   }
@@ -1246,9 +1248,8 @@
   tree.Node constructorName(ConstructorDefinition exp) {
     String name = exp.name;
     tree.Identifier className = makeIdentifier(exp.element.enclosingClass.name);
-    tree.Node result = name == ""
-        ? className
-        : new tree.Send(className, makeIdentifier(name));
+    tree.Node result =
+        name == "" ? className : new tree.Send(className, makeIdentifier(name));
     setElement(result, exp.element, exp);
     return result;
   }
@@ -1296,9 +1297,8 @@
           // Finish the previous string interpolation, if there is one.
           tree.LiteralString lit = makeVerbatimStringLiteral(sb.toString());
           if (currentInterpolation != null) {
-            literalParts.add(new tree.StringInterpolationPart(
-                currentInterpolation,
-                lit));
+            literalParts.add(
+                new tree.StringInterpolationPart(currentInterpolation, lit));
           } else {
             firstLiteral = lit;
           }
@@ -1322,24 +1322,20 @@
       if (firstLiteral == null) {
         node = lit;
       } else {
-        literalParts.add(new tree.StringInterpolationPart(
-            currentInterpolation,
-            lit));
+        literalParts
+            .add(new tree.StringInterpolationPart(currentInterpolation, lit));
         node = new tree.StringInterpolation(
-            firstLiteral,
-            makeList('', literalParts));
+            firstLiteral, makeList('', literalParts));
       }
 
       // Juxtapose with the previous string chunks, if any.
       if (chunk.previous != null) {
         return new tree.StringJuxtaposition(
-            printStringChunk(chunk.previous),
-            node);
+            printStringChunk(chunk.previous), node);
       } else {
         return node;
       }
     }
     return printStringChunk(output.chunk);
   }
-
 }
diff --git a/pkg/compiler/lib/src/dart_backend/dart_backend.dart b/pkg/compiler/lib/src/dart_backend/dart_backend.dart
index ee653f0..729091f 100644
--- a/pkg/compiler/lib/src/dart_backend/dart_backend.dart
+++ b/pkg/compiler/lib/src/dart_backend/dart_backend.dart
@@ -7,53 +7,30 @@
 import 'dart:async' show Future;
 import 'dart:math' show max;
 
-import '../../compiler.dart' show
-    CompilerOutputProvider;
+import '../../compiler.dart' show CompilerOutputProvider;
 import '../common.dart';
-import '../common/backend_api.dart' show
-    Backend,
-    ImpactTransformer;
-import '../common/codegen.dart' show
-    CodegenWorkItem;
-import '../common/names.dart' show
-    Selectors,
-    Uris;
-import '../common/registry.dart' show
-    Registry;
-import '../common/resolution.dart' show
-    Resolution,
-    ResolutionImpact;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
+import '../common/backend_api.dart' show Backend, ImpactTransformer;
+import '../common/codegen.dart' show CodegenWorkItem;
+import '../common/names.dart' show Selectors, Uris;
+import '../common/registry.dart' show Registry;
+import '../common/resolution.dart' show Resolution, ResolutionImpact;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
 import '../compile_time_constants.dart';
 import '../constants/constant_system.dart';
 import '../constants/expressions.dart';
 import '../constants/values.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../enqueue.dart' show
-    Enqueuer,
-    ResolutionEnqueuer;
-import '../library_loader.dart' show
-    LoadedLibraries;
+import '../enqueue.dart' show Enqueuer, ResolutionEnqueuer;
+import '../library_loader.dart' show LoadedLibraries;
 import '../mirror_renamer/mirror_renamer.dart';
-import '../resolution/tree_elements.dart' show
-    TreeElements,
-    TreeElementMapping;
-import '../tokens/keyword.dart' show
-    Keyword;
+import '../resolution/tree_elements.dart' show TreeElements, TreeElementMapping;
+import '../tokens/keyword.dart' show Keyword;
 import '../tree/tree.dart';
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/use.dart' show
-    DynamicUse,
-    TypeUse,
-    TypeUseKind;
-import '../universe/world_impact.dart' show
-    WorldImpact,
-    TransformedWorldImpact;
+import '../universe/selector.dart' show Selector;
+import '../universe/use.dart' show DynamicUse, TypeUse, TypeUseKind;
+import '../universe/world_impact.dart' show WorldImpact, TransformedWorldImpact;
 import '../util/util.dart';
 import 'backend_ast_to_frontend_ast.dart' as backend2frontend;
 
diff --git a/pkg/compiler/lib/src/dart_backend/outputter.dart b/pkg/compiler/lib/src/dart_backend/outputter.dart
index 484bda2..ce9022a 100644
--- a/pkg/compiler/lib/src/dart_backend/outputter.dart
+++ b/pkg/compiler/lib/src/dart_backend/outputter.dart
@@ -8,7 +8,8 @@
     Map<ClassElement, Iterable<Element>> classMembers);
 typedef void ElementCallback<E>(E element);
 typedef void ElementPostProcessFunction(
-    AstElement element, ElementAst elementAst,
+    AstElement element,
+    ElementAst elementAst,
     ElementCallback<TypedefElement> typedefCallback,
     ElementCallback<ClassElement> classCallback);
 typedef ElementAst ComputeElementAstFunction(AstElement element);
@@ -38,9 +39,9 @@
 
   // TODO(johnniwinther): Support recompilation.
   DartOutputter(this.reporter, this.outputProvider,
-                {bool this.forceStripTypes: false,
-                 bool this.enableMinification: false,
-                 bool this.multiFile: false});
+      {bool this.forceStripTypes: false,
+      bool this.enableMinification: false,
+      bool this.multiFile: false});
 
   /// Generate Dart code for the program starting at [mainFunction].
   ///
@@ -57,8 +58,8 @@
   /// [resolvedElements] in the generated output.
   ///
   /// Returns the total size of the generated code.
-  int assembleProgram({
-      MirrorRenamer mirrorRenamer: const MirrorRenamer(),
+  int assembleProgram(
+      {MirrorRenamer mirrorRenamer: const MirrorRenamer(),
       Iterable<LibraryElement> libraries,
       Iterable<Element> instantiatedClasses,
       Iterable<Element> resolvedElements,
@@ -70,7 +71,6 @@
       ElementFilter shouldOutput,
       IsSafeToRemoveTypeDeclarations isSafeToRemoveTypeDeclarations,
       ElementSorter sortElements}) {
-
     assert(invariant(NO_LOCATION_SPANNABLE, libraries != null,
         message: "'libraries' must be non-null."));
     assert(invariant(NO_LOCATION_SPANNABLE, instantiatedClasses != null,
@@ -83,8 +83,8 @@
         message: "'computeElementAst' must be non-null."));
     assert(invariant(NO_LOCATION_SPANNABLE, shouldOutput != null,
         message: "'shouldOutput' must be non-null."));
-    assert(invariant(NO_LOCATION_SPANNABLE,
-        isSafeToRemoveTypeDeclarations != null,
+    assert(invariant(
+        NO_LOCATION_SPANNABLE, isSafeToRemoveTypeDeclarations != null,
         message: "'isSafeToRemoveTypeDeclarations' must be non-null."));
 
     if (sortElements == null) {
@@ -96,29 +96,20 @@
       };
     }
 
-    libraryInfo = LibraryInfo.processLibraries(
-        reporter, libraries, resolvedElements);
+    libraryInfo =
+        LibraryInfo.processLibraries(reporter, libraries, resolvedElements);
 
     elementInfo = ElementInfoProcessor.createElementInfo(
-        instantiatedClasses,
-        resolvedElements,
-        usedTypeLiterals,
+        instantiatedClasses, resolvedElements, usedTypeLiterals,
         postProcessElementAst: postProcessElementAst,
         parseElementAst: computeElementAst,
         shouldOutput: shouldOutput,
         sortElements: sortElements);
 
     PlaceholderCollector collector = collectPlaceholders(
-        reporter,
-        mirrorRenamer,
-        mainFunction,
-        libraryInfo,
-        elementInfo);
+        reporter, mirrorRenamer, mainFunction, libraryInfo, elementInfo);
 
-    renamer = createRenamer(
-        collector,
-        libraryInfo,
-        elementInfo,
+    renamer = createRenamer(collector, libraryInfo, elementInfo,
         enableMinification: enableMinification,
         forceStripTypes: forceStripTypes,
         isSafeToRemoveTypeDeclarations: isSafeToRemoveTypeDeclarations);
@@ -126,20 +117,13 @@
     if (outputAst) {
       String code = astOutput(reporter, elementInfo);
       outputProvider("", "dart")
-                 ..add(code)
-                 ..close();
+        ..add(code)
+        ..close();
       return code.length;
     } else {
       output = new MainOutputGenerator();
-      return output.generateCode(
-          libraryInfo,
-          elementInfo,
-          collector,
-          renamer,
-          mainFunction,
-          outputUri,
-          outputProvider,
-          mirrorRenamer,
+      return output.generateCode(libraryInfo, elementInfo, collector, renamer,
+          mainFunction, outputUri, outputProvider, mirrorRenamer,
           multiFile: multiFile,
           forceStripTypes: forceStripTypes,
           enableMinification: enableMinification);
@@ -171,17 +155,15 @@
     return collector;
   }
 
-  static PlaceholderRenamer createRenamer(
-      PlaceholderCollector collector,
-      LibraryInfo libraryInfo,
-      ElementInfo elementInfo,
+  static PlaceholderRenamer createRenamer(PlaceholderCollector collector,
+      LibraryInfo libraryInfo, ElementInfo elementInfo,
       {bool enableMinification: false,
-       bool forceStripTypes: false,
-       isSafeToRemoveTypeDeclarations}) {
+      bool forceStripTypes: false,
+      isSafeToRemoveTypeDeclarations}) {
     // Create renames.
-    bool shouldCutDeclarationTypes = forceStripTypes
-        || (enableMinification
-            && isSafeToRemoveTypeDeclarations(elementInfo.classMembers));
+    bool shouldCutDeclarationTypes = forceStripTypes ||
+        (enableMinification &&
+            isSafeToRemoveTypeDeclarations(elementInfo.classMembers));
 
     PlaceholderRenamer placeholderRenamer = new PlaceholderRenamer(
         libraryInfo.fixedDynamicNames,
@@ -194,8 +176,8 @@
     return placeholderRenamer;
   }
 
-  static String astOutput(DiagnosticReporter reporter,
-                          ElementInfo elementInfo) {
+  static String astOutput(
+      DiagnosticReporter reporter, ElementInfo elementInfo) {
     // TODO(antonm): Ideally XML should be a separate backend.
     // TODO(antonm): obey renames and minification, at least as an option.
     StringBuffer sb = new StringBuffer();
@@ -223,10 +205,8 @@
   final Map<Element, LibraryElement> reexportingLibraries;
   final List<LibraryElement> userLibraries;
 
-  LibraryInfo(this.fixedStaticNames,
-              this.fixedDynamicNames,
-              this.reexportingLibraries,
-              this.userLibraries);
+  LibraryInfo(this.fixedStaticNames, this.fixedDynamicNames,
+      this.reexportingLibraries, this.userLibraries);
 
   static LibraryInfo processLibraries(
       DiagnosticReporter reporter,
@@ -235,7 +215,7 @@
     Set<String> fixedStaticNames = new Set<String>();
     Set<String> fixedDynamicNames = new Set<String>();
     Map<Element, LibraryElement> reexportingLibraries =
-          <Element, LibraryElement>{};
+        <Element, LibraryElement>{};
     List<LibraryElement> userLibraries = <LibraryElement>[];
     // Conservatively traverse all platform libraries and collect member names.
     // TODO(antonm): ideally we should only collect names of used members,
@@ -268,8 +248,7 @@
       });
 
       library.forEachExport((Element export) {
-        if (!library.isInternalLibrary &&
-            export.library.isInternalLibrary) {
+        if (!library.isInternalLibrary && export.library.isInternalLibrary) {
           // If an element of an internal library is reexported by a platform
           // library, we have to import the reexporting library instead of the
           // internal library, because the internal library is an
@@ -300,17 +279,15 @@
             enumClassMap.putIfAbsent(cls.name, () => cls);
         if (existingEnumClass != cls) {
           reporter.reportError(
-              reporter.createMessage(
-                  cls,
-                  MessageKind.GENERIC,
-                  {'text': "Duplicate enum names are not supported "
-                           "in dart2dart."}),
-          <DiagnosticMessage>[
-              reporter.createMessage(
-                  existingEnumClass,
-                  MessageKind.GENERIC,
-                  {'text': "This is the other declaration of '${cls.name}'."}),
-          ]);
+              reporter.createMessage(cls, MessageKind.GENERIC, {
+                'text': "Duplicate enum names are not supported "
+                    "in dart2dart."
+              }),
+              <DiagnosticMessage>[
+                reporter.createMessage(existingEnumClass, MessageKind.GENERIC, {
+                  'text': "This is the other declaration of '${cls.name}'."
+                }),
+              ]);
         }
       }
     }
@@ -321,8 +298,7 @@
     // that are invoked as functions. Make sure to not rename that.
     fixedDynamicNames.add('call');
 
-    return new LibraryInfo(
-        fixedStaticNames, fixedDynamicNames,
+    return new LibraryInfo(fixedStaticNames, fixedDynamicNames,
         reexportingLibraries, userLibraries);
   }
 }
@@ -333,10 +309,8 @@
   final Map<ClassElement, Iterable<Element>> classMembers;
   final Iterable<ClassElement> emitNoMembersFor;
 
-  ElementInfo(this.elementAsts,
-              this.topLevelElements,
-              this.classMembers,
-              this.emitNoMembersFor);
+  ElementInfo(this.elementAsts, this.topLevelElements, this.classMembers,
+      this.emitNoMembersFor);
 }
 
 class ElementInfoProcessor implements ElementInfo {
@@ -350,18 +324,16 @@
   final ElementFilter shouldOutput;
 
   ElementInfoProcessor(
-      {this.postProcessElementAst,
-       this.parseElementAst,
-       this.shouldOutput});
+      {this.postProcessElementAst, this.parseElementAst, this.shouldOutput});
 
   static ElementInfo createElementInfo(
       Iterable<ClassElement> instantiatedClasses,
       Iterable<AstElement> resolvedElements,
       Iterable<ClassElement> usedTypeLiterals,
       {ElementPostProcessFunction postProcessElementAst,
-       ComputeElementAstFunction parseElementAst,
-       ElementFilter shouldOutput,
-       ElementSorter sortElements}) {
+      ComputeElementAstFunction parseElementAst,
+      ElementFilter shouldOutput,
+      ElementSorter sortElements}) {
     ElementInfoProcessor processor = new ElementInfoProcessor(
         postProcessElementAst: postProcessElementAst,
         parseElementAst: parseElementAst,
@@ -371,10 +343,11 @@
         sortElements: sortElements);
   }
 
-  ElementInfo process(Iterable<ClassElement> instantiatedClasses,
-                      Iterable<AstElement> resolvedElements,
-                      Iterable<ClassElement> usedTypeLiterals,
-                      {ElementSorter sortElements}) {
+  ElementInfo process(
+      Iterable<ClassElement> instantiatedClasses,
+      Iterable<AstElement> resolvedElements,
+      Iterable<ClassElement> usedTypeLiterals,
+      {ElementSorter sortElements}) {
     // Build all top level elements to emit and necessary class members.
     instantiatedClasses.where(shouldOutput).forEach(addClass);
     resolvedElements.where(shouldOutput).forEach(addMember);
@@ -402,9 +375,8 @@
 
   void processElement(Element element, ElementAst elementAst) {
     if (postProcessElementAst != null) {
-      postProcessElementAst(element, elementAst,
-                            newTypedefElementCallback,
-                            newClassElementCallback);
+      postProcessElementAst(element, elementAst, newTypedefElementCallback,
+          newClassElementCallback);
     }
     elementAsts[element] = elementAst;
   }
@@ -459,7 +431,7 @@
 /// [CompilerOutputProvider].
 class MainOutputGenerator {
   final Map<ClassNode, List<Node>> memberNodes =
-       new Map<ClassNode, List<Node>>();
+      new Map<ClassNode, List<Node>>();
   final List<Node> topLevelNodes = <Node>[];
 
   /// Generates the code and returns the total size.
@@ -473,8 +445,8 @@
       CompilerOutputProvider outputProvider,
       MirrorRenamer mirrorRenamer,
       {bool multiFile: false,
-       bool forceStripTypes: false,
-       bool enableMinification: false}) {
+      bool forceStripTypes: false,
+      bool enableMinification: false}) {
     for (Element element in elementInfo.topLevelElements) {
       topLevelNodes.add(elementInfo.elementAsts[element].ast);
       if (element.isClass) {
@@ -490,8 +462,8 @@
       }
     }
 
-    mirrorRenamer.addRenames(placeholderRenamer.renames,
-                             topLevelNodes, collector);
+    mirrorRenamer.addRenames(
+        placeholderRenamer.renames, topLevelNodes, collector);
 
     Map<LibraryElement, String> outputPaths = new Map<LibraryElement, String>();
     Map<LibraryElement, EmitterUnparser> unparsers =
@@ -501,8 +473,7 @@
     EmitterUnparser mainUnparser = multiFile
         ? null
         : new EmitterUnparser(placeholderRenamer.renames,
-            stripTypes: forceStripTypes,
-            minify: enableMinification);
+            stripTypes: forceStripTypes, minify: enableMinification);
 
     if (multiFile) {
       // TODO(sigurdm): Factor handling of library-paths out from emitting.
@@ -528,7 +499,7 @@
       }
 
       /// Rewrites imports/exports to refer to the paths given in [outputPaths].
-      for(LibraryElement outputLibrary in libraryInfo.userLibraries) {
+      for (LibraryElement outputLibrary in libraryInfo.userLibraries) {
         EmitterUnparser unparser = new EmitterUnparser(
             placeholderRenamer.renames,
             stripTypes: forceStripTypes,
@@ -553,8 +524,8 @@
         }
       }
     } else {
-      placeholderRenamer.platformImports.forEach(
-          (LibraryElement library, String prefix) {
+      placeholderRenamer.platformImports
+          .forEach((LibraryElement library, String prefix) {
         assert(library.isPlatformLibrary && !library.isInternalLibrary);
         mainUnparser.unparseImportTag(library.canonicalUri.toString());
         if (prefix != null) {
@@ -562,7 +533,7 @@
           // it to avoid shadowing.
           // TODO(johnniwinther): Avoid prefix-less import if not needed.
           mainUnparser.unparseImportTag(library.canonicalUri.toString(),
-                                        prefix: prefix);
+              prefix: prefix);
         }
       });
     }
@@ -582,20 +553,20 @@
 
     int totalSize = 0;
     if (multiFile) {
-      for(LibraryElement outputLibrary in libraryInfo.userLibraries) {
+      for (LibraryElement outputLibrary in libraryInfo.userLibraries) {
         // TODO(sigurdm): Make the unparser output directly into the buffer
         // instead of caching in `.result`.
         String code = unparsers[outputLibrary].result;
         totalSize += code.length;
         outputProvider(outputPaths[outputLibrary], "dart")
-             ..add(code)
-             ..close();
+          ..add(code)
+          ..close();
       }
     } else {
       String code = mainUnparser.result;
       outputProvider("", "dart")
-           ..add(code)
-           ..close();
+        ..add(code)
+        ..close();
 
       totalSize = code.length;
     }
diff --git a/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart b/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
index 0a2d0e1..e6656a7 100644
--- a/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
+++ b/pkg/compiler/lib/src/dart_backend/placeholder_collector.dart
@@ -9,8 +9,7 @@
   final Set<Node> nodes;
   LocalPlaceholder(this.identifier) : nodes = new Set<Node>();
   int get hashCode => identifier.hashCode;
-  String toString() =>
-      'local_placeholder[id($identifier), nodes($nodes)]';
+  String toString() => 'local_placeholder[id($identifier), nodes($nodes)]';
 }
 
 class FunctionScope {
@@ -18,7 +17,7 @@
   final Set<LocalPlaceholder> localPlaceholders;
   FunctionScope()
       : parameterIdentifiers = new Set<String>(),
-      localPlaceholders = new Set<LocalPlaceholder>();
+        localPlaceholders = new Set<LocalPlaceholder>();
   void registerParameter(Identifier node) {
     parameterIdentifiers.add(node.source);
   }
@@ -133,18 +132,17 @@
 
   visitStaticSend(Send node) {
     Element element = elements[node];
-    collector.mirrorRenamer.registerStaticSend(
-        collector.currentElement, element, node);
+    collector.mirrorRenamer
+        .registerStaticSend(collector.currentElement, element, node);
 
-    if (Elements.isUnresolved(element)
-        || element.isDeferredLoaderGetter) {
+    if (Elements.isUnresolved(element) || element.isDeferredLoaderGetter) {
       return;
     }
     if (element.isConstructor || element.isFactoryConstructor) {
       // Rename named constructor in redirection position:
       // class C { C.named(); C.redirecting() : this.named(); }
-      if (node.receiver is Identifier
-          && node.receiver.asIdentifier().isThis()) {
+      if (node.receiver is Identifier &&
+          node.receiver.asIdentifier().isThis()) {
         assert(node.selector is Identifier);
         collector.tryMakeConstructorPlaceholder(node, element);
       }
@@ -178,16 +176,16 @@
   final Set<Node> prefixNodesToErase = new Set<Node>();
   final Set<Node> unresolvedNodes = new Set<Node>();
   final Map<Element, Set<Node>> elementNodes = new Map<Element, Set<Node>>();
-  final Map<FunctionElement, FunctionScope> functionScopes
-      = new Map<FunctionElement, FunctionScope>();
+  final Map<FunctionElement, FunctionScope> functionScopes =
+      new Map<FunctionElement, FunctionScope>();
   final Map<LibraryElement, Set<Identifier>> privateNodes =
       new Map<LibraryElement, Set<Identifier>>();
-  final List<DeclarationTypePlaceholder> declarationTypePlaceholders
-      = new List<DeclarationTypePlaceholder>();
-  final Map<String, Set<Identifier>> memberPlaceholders
-      = new Map<String, Set<Identifier>>();
-  final List<ConstructorPlaceholder> constructorPlaceholders
-      = new List<ConstructorPlaceholder>();
+  final List<DeclarationTypePlaceholder> declarationTypePlaceholders =
+      new List<DeclarationTypePlaceholder>();
+  final Map<String, Set<Identifier>> memberPlaceholders =
+      new Map<String, Set<Identifier>>();
+  final List<ConstructorPlaceholder> constructorPlaceholders =
+      new List<ConstructorPlaceholder>();
   Map<String, LocalPlaceholder> currentLocalPlaceholders;
   Element currentElement;
   FunctionElement topmostEnclosingFunction;
@@ -196,9 +194,8 @@
   get currentFunctionScope => functionScopes.putIfAbsent(
       topmostEnclosingFunction, () => new FunctionScope());
 
-  PlaceholderCollector(this.reporter, this.mirrorRenamer,
-                       this.fixedMemberNames, this.elementAsts,
-                       this.mainFunction);
+  PlaceholderCollector(this.reporter, this.mirrorRenamer, this.fixedMemberNames,
+      this.elementAsts, this.mainFunction);
 
   void collectFunctionDeclarationPlaceholders(
       FunctionElement element, FunctionExpression node) {
@@ -212,8 +209,7 @@
         FunctionElement redirectTarget = constructor.immediateRedirectionTarget;
         assert(redirectTarget != null && redirectTarget != element);
         tryMakeConstructorPlaceholder(
-            bodyAsRedirectingFactoryBody.constructorReference,
-            redirectTarget);
+            bodyAsRedirectingFactoryBody.constructorReference, redirectTarget);
       }
     } else if (Elements.isStaticOrTopLevel(element)) {
       // Note: this code should only rename private identifiers for class'
@@ -281,7 +277,8 @@
       }
       return false;
     }
-    if (element.isParameter && !isTypedefParameter(element) &&
+    if (element.isParameter &&
+        !isTypedefParameter(element) &&
         isNamedOptionalParameter()) {
       currentFunctionScope.registerParameter(node);
     } else if (Elements.isLocal(element) && !isTypedefParameter(element)) {
@@ -294,8 +291,9 @@
     if (node is Operator) return;
     String identifier = node.source;
     if (fixedMemberNames.contains(identifier)) return;
-    memberPlaceholders.putIfAbsent(
-        identifier, () => new Set<Identifier>()).add(node);
+    memberPlaceholders
+        .putIfAbsent(identifier, () => new Set<Identifier>())
+        .add(node);
   }
 
   void makeTypePlaceholder(Node node, DartType type) {
@@ -324,8 +322,8 @@
 
   void makeOmitDeclarationTypePlaceholder(TypeAnnotation type) {
     if (type == null) return;
-    declarationTypePlaceholders.add(
-        new DeclarationTypePlaceholder(type, false));
+    declarationTypePlaceholders
+        .add(new DeclarationTypePlaceholder(type, false));
   }
 
   void makeVarDeclarationTypePlaceholder(VariableDefinitions node) {
@@ -335,8 +333,8 @@
     // and/or catch syntax changes.
     if (node.type == null) return;
     bool requiresVar = !node.modifiers.isFinalOrConst;
-    declarationTypePlaceholders.add(
-        new DeclarationTypePlaceholder(node.type, requiresVar));
+    declarationTypePlaceholders
+        .add(new DeclarationTypePlaceholder(node.type, requiresVar));
   }
 
   /// Marks [node] to be erased in the output.
@@ -378,8 +376,9 @@
         !Elements.isStaticOrTopLevel(element) &&
         !Elements.isLocal(element) &&
         Name.isPrivateName(node.source)) {
-      privateNodes.putIfAbsent(
-          currentElement.library, () => new Set<Identifier>()).add(node);
+      privateNodes
+          .putIfAbsent(currentElement.library, () => new Set<Identifier>())
+          .add(node);
     }
   }
 
@@ -429,7 +428,7 @@
         Send receiver = node.receiver;
         // prefix.ClassName.constructorName()
         assert(treeElements[receiver.receiver] != null &&
-               treeElements[receiver.receiver].isPrefix);
+            treeElements[receiver.receiver].isPrefix);
         prefix = receiver.receiver;
         className = receiver.selector;
         constructorName = node.selector;
@@ -468,8 +467,8 @@
 
     if (constructorName != null) {
       Element definingConstructor = findDefiningConstructor(element);
-      constructorPlaceholders.add(new ConstructorPlaceholder(constructorName,
-          definingConstructor));
+      constructorPlaceholders.add(
+          new ConstructorPlaceholder(constructorName, definingConstructor));
       tryMakePrivateIdentifier(constructorName, element);
     }
   }
@@ -480,7 +479,9 @@
 
   visit(Node node) => (node == null) ? null : node.accept(this);
 
-  visitNode(Node node) { node.visitChildren(this); }  // We must go deeper.
+  visitNode(Node node) {
+    node.visitChildren(this);
+  } // We must go deeper.
 
   visitNewExpression(NewExpression node) {
     Send send = node.send;
@@ -544,10 +545,13 @@
       if (Elements.isStaticOrTopLevel(element)) {
         // TODO(smok): Worth investigating why sometimes we get getter/setter
         // here and sometimes abstract field.
-        assert(element.isClass || element is VariableElement ||
-               element.isAccessor || element.isAbstractField ||
-               element.isFunction || element.isTypedef ||
-               element is TypeVariableElement);
+        assert(element.isClass ||
+            element is VariableElement ||
+            element.isAccessor ||
+            element.isAbstractField ||
+            element.isFunction ||
+            element.isTypedef ||
+            element is TypeVariableElement);
         makeElementPlaceholder(send.selector, element);
       } else {
         Identifier identifier = send.selector.asIdentifier();
@@ -600,9 +604,7 @@
       Identifier identifier = definition is Identifier
           ? definition
           : definition is Send
-              ? (send.selector is Identifier
-                  ? send.selector
-                  : null)
+              ? (send.selector is Identifier ? send.selector : null)
               : null;
 
       tryMakePrivateIdentifier(identifier, definitionElement);
@@ -619,8 +621,7 @@
         } else {
           assert(send.selector is FunctionExpression);
           if (definitionElement.isInitializingFormal) {
-            tryMakeMemberPlaceholder(
-                send.selector.asFunctionExpression().name);
+            tryMakeMemberPlaceholder(send.selector.asFunctionExpression().name);
           }
         }
       } else if (definition is Identifier) {
diff --git a/pkg/compiler/lib/src/dart_backend/renamer.dart b/pkg/compiler/lib/src/dart_backend/renamer.dart
index 6465af8..29b26d7 100644
--- a/pkg/compiler/lib/src/dart_backend/renamer.dart
+++ b/pkg/compiler/lib/src/dart_backend/renamer.dart
@@ -4,8 +4,7 @@
 
 part of dart_backend;
 
-Comparator get _compareNodes =>
-    compareBy((n) => n.getBeginToken().charOffset);
+Comparator get _compareNodes => compareBy((n) => n.getBeginToken().charOffset);
 
 abstract class Renamable implements Comparable {
   final int RENAMABLE_TYPE_ELEMENT = 1;
@@ -31,8 +30,7 @@
 class GlobalRenamable extends Renamable {
   final Entity entity;
 
-  GlobalRenamable(this.entity, Set<Node> nodes)
-      : super(nodes);
+  GlobalRenamable(this.entity, Set<Node> nodes) : super(nodes);
 
   int compareInternals(GlobalRenamable other) =>
       compareElements(this.entity, other.entity);
@@ -44,8 +42,7 @@
 
 class MemberRenamable extends Renamable {
   final String identifier;
-  MemberRenamable(this.identifier, Set<Node> nodes)
-      : super(nodes);
+  MemberRenamable(this.identifier, Set<Node> nodes) : super(nodes);
   int compareInternals(MemberRenamable other) =>
       this.identifier.compareTo(other.identifier);
   int get kind => RENAMABLE_TYPE_MEMBER;
@@ -55,11 +52,10 @@
 }
 
 class LocalRenamable extends Renamable {
-  LocalRenamable(Set<Node> nodes)
-      : super(nodes);
-  int compareInternals(LocalRenamable other) =>
-      _compareNodes(sorted(this.nodes, _compareNodes)[0],
-          sorted(other.nodes, _compareNodes)[0]);
+  LocalRenamable(Set<Node> nodes) : super(nodes);
+  int compareInternals(LocalRenamable other) => _compareNodes(
+      sorted(this.nodes, _compareNodes)[0],
+      sorted(other.nodes, _compareNodes)[0]);
   int get kind => RENAMABLE_TYPE_LOCAL;
   String createNewName(PlaceholderRenamer placeholderRenamer) {
     return placeholderRenamer._generateUniqueTopLevelName("");
@@ -72,6 +68,7 @@
 class PlaceholderRenamer {
   /// After running [computeRenames] this will contain the computed renames.
   final Map<Node, String> renames = new Map<Node, String>();
+
   /// After running [computeRenames] this will map the used platform
   /// libraries to their respective prefixes.
   final Map<LibraryElement, String> platformImports =
@@ -94,10 +91,9 @@
 
   Generator _generator;
 
-  PlaceholderRenamer(this.fixedDynamicNames,
-                     this.fixedStaticNames,
-                     this.reexportingLibraries,
-                     {this.enableMinification, this.cutDeclarationTypes});
+  PlaceholderRenamer(
+      this.fixedDynamicNames, this.fixedStaticNames, this.reexportingLibraries,
+      {this.enableMinification, this.cutDeclarationTypes});
 
   void _renameNodes(Iterable<Node> nodes, String renamer(Node node)) {
     for (Node node in sorted(nodes, _compareNodes)) {
@@ -108,7 +104,7 @@
   String _generateUniqueTopLevelName(String originalName) {
     String newName = _generator.generate(originalName, (name) {
       return _forbiddenIdentifiers.contains(name) ||
-             _allNamedParameterIdentifiers.contains(name);
+          _allNamedParameterIdentifiers.contains(name);
     });
     _forbiddenIdentifiers.add(newName);
     return newName;
@@ -121,9 +117,10 @@
   /// Looks up [originalName] in the [_privateCache] cache of [library].
   /// If [originalName] was not renamed before, generate a new name.
   String _getPrivateName(LibraryElement library, String originalName) {
-    return _privateCache.putIfAbsent(library, () => new Map<String, String>())
-        .putIfAbsent(originalName,
-                     () => _generateUniqueTopLevelName(originalName));
+    return _privateCache
+        .putIfAbsent(library, () => new Map<String, String>())
+        .putIfAbsent(
+            originalName, () => _generateUniqueTopLevelName(originalName));
   }
 
   String _renameConstructor(ConstructorPlaceholder placeholder) {
@@ -135,9 +132,9 @@
 
   String _renameGlobal(Entity entity) {
     assert(entity is! Element ||
-           Elements.isMalformed(entity) ||
-           Elements.isStaticOrTopLevel(entity) ||
-           entity is TypeVariableElement);
+        Elements.isMalformed(entity) ||
+        Elements.isStaticOrTopLevel(entity) ||
+        entity is TypeVariableElement);
     // TODO(smok): We may want to reuse class static field and method names.
     if (entity is Element) {
       LibraryElement library = entity.library;
@@ -148,14 +145,14 @@
         // TODO(johnniwinther): Handle prefixes for dart:core.
         if (library.canonicalUri == Uris.dart_core) return entity.name;
         if (library.isInternalLibrary) {
-          throw new SpannableAssertionFailure(entity,
+          throw new SpannableAssertionFailure(
+              entity,
               "Internal library $library should never have been imported from "
               "the code compiled by dart2dart.");
         }
 
         String prefix = platformImports.putIfAbsent(library, () => null);
-        if (entity.isTopLevel &&
-            fixedDynamicNames.contains(entity.name)) {
+        if (entity.isTopLevel && fixedDynamicNames.contains(entity.name)) {
           if (prefix == null) {
             prefix = _generateUniqueTopLevelName('');
             platformImports[library] = prefix;
@@ -165,8 +162,8 @@
         return entity.name;
       }
     }
-    String name = _renamedCache.putIfAbsent(entity,
-            () => _generateUniqueTopLevelName(entity.name));
+    String name = _renamedCache.putIfAbsent(
+        entity, () => _generateUniqueTopLevelName(entity.name));
     // Look up in [_renamedCache] for a name for [entity] .
     // If it was not renamed before, generate a new name.
     return name;
@@ -178,22 +175,23 @@
     // Build a list sorted by usage of local nodes that will be renamed to
     // the same identifier. So the top-used local variables in all functions
     // will be renamed first and will all share the same new identifier.
-    int maxLength = placeholderCollector.functionScopes.values.fold(0,
-        (a, b) => max(a, b.localPlaceholders.length));
+    int maxLength = placeholderCollector.functionScopes.values
+        .fold(0, (a, b) => max(a, b.localPlaceholders.length));
 
-    List<Set<Node>> allLocals = new List<Set<Node>>
-        .generate(maxLength, (_) => new Set<Node>());
+    List<Set<Node>> allLocals =
+        new List<Set<Node>>.generate(maxLength, (_) => new Set<Node>());
 
     for (FunctionScope functionScope
         in placeholderCollector.functionScopes.values) {
       // Add current sorted local identifiers to the whole sorted list
       // of all local identifiers for all functions.
-      List<LocalPlaceholder> currentSortedPlaceholders =
-          sorted(functionScope.localPlaceholders,
-              compareBy((LocalPlaceholder ph) => -ph.nodes.length));
+      List<LocalPlaceholder> currentSortedPlaceholders = sorted(
+          functionScope.localPlaceholders,
+          compareBy((LocalPlaceholder ph) => -ph.nodes.length));
 
       List<Set<Node>> currentSortedNodes = currentSortedPlaceholders
-          .map((LocalPlaceholder ph) => ph.nodes).toList();
+          .map((LocalPlaceholder ph) => ph.nodes)
+          .toList();
 
       for (int i = 0; i < currentSortedNodes.length; i++) {
         allLocals[i].addAll(currentSortedNodes[i]);
@@ -204,12 +202,12 @@
     // count, otherwise when we rename elements first there will be no good
     // identifiers left for members even if they are used often.
     List<Renamable> renamables = new List<Renamable>();
-    placeholderCollector.elementNodes.forEach(
-        (Element element, Set<Node> nodes) {
+    placeholderCollector.elementNodes
+        .forEach((Element element, Set<Node> nodes) {
       renamables.add(new GlobalRenamable(element, nodes));
     });
-    placeholderCollector.memberPlaceholders.forEach(
-        (String memberName, Set<Identifier> identifiers) {
+    placeholderCollector.memberPlaceholders
+        .forEach((String memberName, Set<Identifier> identifiers) {
       renamables.add(new MemberRenamable(memberName, identifiers));
     });
     for (Set<Node> localIdentifiers in allLocals) {
@@ -225,30 +223,28 @@
   void _computeNonMinifiedRenames(PlaceholderCollector placeholderCollector) {
     _generator = new ConservativeGenerator();
     // Rename elements.
-    placeholderCollector.elementNodes.forEach(
-        (Element element, Set<Node> nodes) {
+    placeholderCollector.elementNodes
+        .forEach((Element element, Set<Node> nodes) {
       _renameNodes(nodes, (_) => _renameGlobal(element));
     });
 
     // Rename locals.
-    placeholderCollector.functionScopes.forEach(
-        (functionElement, functionScope) {
-
+    placeholderCollector.functionScopes
+        .forEach((functionElement, functionScope) {
       Set<String> memberIdentifiers = new Set<String>();
       Set<LocalPlaceholder> placeholders = functionScope.localPlaceholders;
       if (functionElement != null && functionElement.enclosingClass != null) {
-        functionElement.enclosingClass.forEachMember(
-            (enclosingClass, member) {
-              memberIdentifiers.add(member.name);
-            });
+        functionElement.enclosingClass.forEachMember((enclosingClass, member) {
+          memberIdentifiers.add(member.name);
+        });
       }
       Set<String> usedLocalIdentifiers = new Set<String>();
       for (LocalPlaceholder placeholder in placeholders) {
         String nextId = _generator.generate(placeholder.identifier, (name) {
-          return functionScope.parameterIdentifiers.contains(name)
-              || _forbiddenIdentifiers.contains(name)
-              || usedLocalIdentifiers.contains(name)
-              || memberIdentifiers.contains(name);
+          return functionScope.parameterIdentifiers.contains(name) ||
+              _forbiddenIdentifiers.contains(name) ||
+              usedLocalIdentifiers.contains(name) ||
+              memberIdentifiers.contains(name);
         });
         usedLocalIdentifiers.add(nextId);
         _renameNodes(placeholder.nodes, (_) => nextId);
@@ -268,8 +264,8 @@
   /// Also adds to [platformImports] all the platform-libraries that are used.
   void computeRenames(PlaceholderCollector placeholderCollector) {
     _allNamedParameterIdentifiers = new Set<String>();
-    for (FunctionScope functionScope in
-        placeholderCollector.functionScopes.values) {
+    for (FunctionScope functionScope
+        in placeholderCollector.functionScopes.values) {
       _allNamedParameterIdentifiers.addAll(functionScope.parameterIdentifiers);
     }
 
@@ -285,15 +281,15 @@
     }
 
     // Rename constructors.
-    for (ConstructorPlaceholder placeholder in
-        placeholderCollector.constructorPlaceholders) {
-      renames[placeholder.node] =
-          _renameConstructor(placeholder);
-    };
+    for (ConstructorPlaceholder placeholder
+        in placeholderCollector.constructorPlaceholders) {
+      renames[placeholder.node] = _renameConstructor(placeholder);
+    }
+    ;
 
     // Rename private identifiers uniquely for each library.
-    placeholderCollector.privateNodes.forEach(
-        (LibraryElement library, Set<Identifier> identifiers) {
+    placeholderCollector.privateNodes
+        .forEach((LibraryElement library, Set<Identifier> identifiers) {
       for (Identifier identifier in identifiers) {
         renames[identifier] = _getPrivateName(library, identifier.source);
       }
@@ -310,8 +306,8 @@
     }
 
     if (cutDeclarationTypes) {
-      for (DeclarationTypePlaceholder placeholder in
-           placeholderCollector.declarationTypePlaceholders) {
+      for (DeclarationTypePlaceholder placeholder
+          in placeholderCollector.declarationTypePlaceholders) {
         renames[placeholder.typeNode] = placeholder.requiresVar ? 'var' : '';
       }
     }
@@ -332,7 +328,7 @@
   if (index < firstCharAlphabet.length) return firstCharAlphabet[index];
   StringBuffer resultBuilder = new StringBuffer();
   resultBuilder.writeCharCode(
-     firstCharAlphabet.codeUnitAt(index % firstCharAlphabet.length));
+      firstCharAlphabet.codeUnitAt(index % firstCharAlphabet.length));
   index ~/= firstCharAlphabet.length;
   int length = otherCharsAlphabet.length;
   while (index >= length) {
@@ -352,7 +348,8 @@
   String generate(String originalName, bool isForbidden(String name)) {
     String result = originalName;
     int index = 0;
-    while (isForbidden(result) ){ //|| result == originalName) {
+    while (isForbidden(result)) {
+      //|| result == originalName) {
       result = '${originalName}_${generateMiniId(index++)}';
     }
     return result;
@@ -372,4 +369,4 @@
     } while (isForbidden(result));
     return result;
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/dart_types.dart b/pkg/compiler/lib/src/dart_types.dart
index 5262138..41ce1e5 100644
--- a/pkg/compiler/lib/src/dart_types.dart
+++ b/pkg/compiler/lib/src/dart_types.dart
@@ -7,18 +7,13 @@
 import 'dart:math' show min;
 
 import 'common.dart';
-import 'common/resolution.dart' show
-    Resolution;
+import 'common/resolution.dart' show Resolution;
 import 'core_types.dart';
-import 'elements/modelx.dart' show
-    LibraryElementX,
-    TypeDeclarationElementX,
-    TypedefElementX;
+import 'elements/modelx.dart'
+    show LibraryElementX, TypeDeclarationElementX, TypedefElementX;
 import 'elements/elements.dart';
-import 'ordered_typeset.dart' show
-    OrderedTypeSet;
-import 'util/util.dart' show
-    equalElements;
+import 'ordered_typeset.dart' show OrderedTypeSet;
+import 'util/util.dart' show equalElements;
 
 enum TypeKind {
   FUNCTION,
@@ -79,7 +74,6 @@
   // TODO(johnniwinther): Maybe move this to [TypedefType].
   void computeUnaliased(Resolution resolution) {}
 
-
   /// Returns the unaliased type of this type.
   ///
   /// The unaliased type of a typedef'd type is the unaliased type to which its
@@ -165,8 +159,8 @@
 
   void visitChildren(DartTypeVisitor visitor, var argument) {}
 
-  static void visitList(List<DartType> types,
-                        DartTypeVisitor visitor, var argument) {
+  static void visitList(
+      List<DartType> types, DartTypeVisitor visitor, var argument) {
     for (DartType type in types) {
       type.accept(visitor, argument);
     }
@@ -234,7 +228,7 @@
   int get hashCode => 17 * element.hashCode;
 
   bool operator ==(other) {
-    if (other is !TypeVariableType) return false;
+    if (other is! TypeVariableType) return false;
     return identical(other.element, element);
   }
 
@@ -306,7 +300,7 @@
   static int nextHash = 43765;
 
   MalformedType(this.element, this.userProvidedBadType,
-                [this.typeArguments = null]);
+      [this.typeArguments = null]);
 
   TypeKind get kind => TypeKind.MALFORMED_TYPE;
 
@@ -348,21 +342,21 @@
   final TypeDeclarationElement element;
   final List<DartType> typeArguments;
 
-  GenericType(TypeDeclarationElement element,
-              this.typeArguments,
-              {bool checkTypeArgumentCount: true})
+  GenericType(TypeDeclarationElement element, this.typeArguments,
+      {bool checkTypeArgumentCount: true})
       : this.element = element {
     assert(invariant(CURRENT_ELEMENT_SPANNABLE, element != null,
         message: "Missing element for generic type."));
     assert(invariant(element, () {
-        if (!checkTypeArgumentCount) return true;
-        if (element is TypeDeclarationElementX) {
-          return element.thisTypeCache == null ||
-                 typeArguments.length == element.typeVariables.length;
-        }
-        return true;
-    }, message: () => 'Invalid type argument count on ${element.thisType}. '
-                      'Provided type arguments: $typeArguments.'));
+      if (!checkTypeArgumentCount) return true;
+      if (element is TypeDeclarationElementX) {
+        return element.thisTypeCache == null ||
+            typeArguments.length == element.typeVariables.length;
+      }
+      return true;
+    },
+        message: () => 'Invalid type argument count on ${element.thisType}. '
+            'Provided type arguments: $typeArguments.'));
   }
 
   /// Creates a new instance of this type using the provided type arguments.
@@ -422,10 +416,10 @@
   }
 
   bool operator ==(other) {
-    if (other is !GenericType) return false;
-    return kind == other.kind
-        && element == other.element
-        && equalElements(typeArguments, other.typeArguments);
+    if (other is! GenericType) return false;
+    return kind == other.kind &&
+        element == other.element &&
+        equalElements(typeArguments, other.typeArguments);
   }
 
   /// Returns `true` if the declaration of this type has type variables.
@@ -448,13 +442,12 @@
   int _hashCode;
 
   InterfaceType(ClassElement element,
-                [List<DartType> typeArguments = const <DartType>[]])
+      [List<DartType> typeArguments = const <DartType>[]])
       : super(element, typeArguments) {
     assert(invariant(element, element.isDeclaration));
   }
 
-  InterfaceType.forUserProvidedBadType(
-      ClassElement element,
+  InterfaceType.forUserProvidedBadType(ClassElement element,
       [List<DartType> typeArguments = const <DartType>[]])
       : super(element, typeArguments, checkTypeArgumentCount: false);
 
@@ -481,9 +474,8 @@
     if (element == other) return this;
     InterfaceType supertype = element.asInstanceOf(other);
     if (supertype != null) {
-      List<DartType> arguments = Types.substTypes(supertype.typeArguments,
-                                                  typeArguments,
-                                                  element.typeVariables);
+      List<DartType> arguments = Types.substTypes(
+          supertype.typeArguments, typeArguments, element.typeVariables);
       return new InterfaceType(supertype.element, arguments);
     }
     return null;
@@ -530,8 +522,7 @@
 class BadInterfaceType extends InterfaceType {
   final InterfaceType userProvidedBadType;
 
-  BadInterfaceType(ClassElement element,
-                   InterfaceType this.userProvidedBadType)
+  BadInterfaceType(ClassElement element, InterfaceType this.userProvidedBadType)
       : super(element, element.rawType.typeArguments);
 
   String toString() {
@@ -539,7 +530,6 @@
   }
 }
 
-
 /**
  * Special subclass of [TypedefType] used for generic typedef types created
  * with the wrong number of type arguments.
@@ -549,8 +539,7 @@
 class BadTypedefType extends TypedefType {
   final TypedefType userProvidedBadType;
 
-  BadTypedefType(TypedefElement element,
-                 TypedefType this.userProvidedBadType)
+  BadTypedefType(TypedefElement element, TypedefType this.userProvidedBadType)
       : super(element, element.rawType.typeArguments);
 
   String toString() {
@@ -575,39 +564,36 @@
    */
   final List<DartType> namedParameterTypes;
 
-  factory FunctionType(
-      FunctionTypedElement element,
+  factory FunctionType(FunctionTypedElement element,
       [DartType returnType = const DynamicType(),
-       List<DartType> parameterTypes = const <DartType>[],
-       List<DartType> optionalParameterTypes = const <DartType>[],
-       List<String> namedParameters = const <String>[],
-       List<DartType> namedParameterTypes = const <DartType>[]]) {
+      List<DartType> parameterTypes = const <DartType>[],
+      List<DartType> optionalParameterTypes = const <DartType>[],
+      List<String> namedParameters = const <String>[],
+      List<DartType> namedParameterTypes = const <DartType>[]]) {
     assert(invariant(CURRENT_ELEMENT_SPANNABLE, element != null));
     assert(invariant(element, element.isDeclaration));
-    return new FunctionType.internal(element,
-        returnType, parameterTypes, optionalParameterTypes,
-        namedParameters, namedParameterTypes);
+    return new FunctionType.internal(element, returnType, parameterTypes,
+        optionalParameterTypes, namedParameters, namedParameterTypes);
   }
 
   factory FunctionType.synthesized(
       [DartType returnType = const DynamicType(),
-       List<DartType> parameterTypes = const <DartType>[],
-       List<DartType> optionalParameterTypes = const <DartType>[],
-       List<String> namedParameters = const <String>[],
-       List<DartType> namedParameterTypes = const <DartType>[]]) {
-    return new FunctionType.internal(null,
-        returnType, parameterTypes, optionalParameterTypes,
-        namedParameters, namedParameterTypes);
+      List<DartType> parameterTypes = const <DartType>[],
+      List<DartType> optionalParameterTypes = const <DartType>[],
+      List<String> namedParameters = const <String>[],
+      List<DartType> namedParameterTypes = const <DartType>[]]) {
+    return new FunctionType.internal(null, returnType, parameterTypes,
+        optionalParameterTypes, namedParameters, namedParameterTypes);
   }
 
   FunctionType.internal(FunctionTypedElement this.element,
-                        [DartType this.returnType = const DynamicType(),
-                         this.parameterTypes = const <DartType>[],
-                         this.optionalParameterTypes = const <DartType>[],
-                         this.namedParameters = const <String>[],
-                         this.namedParameterTypes = const <DartType>[]]) {
-    assert(invariant(CURRENT_ELEMENT_SPANNABLE,
-        element == null || element.isDeclaration));
+      [DartType this.returnType = const DynamicType(),
+      this.parameterTypes = const <DartType>[],
+      this.optionalParameterTypes = const <DartType>[],
+      this.namedParameters = const <String>[],
+      this.namedParameterTypes = const <DartType>[]]) {
+    assert(invariant(
+        CURRENT_ELEMENT_SPANNABLE, element == null || element.isDeclaration));
     // Assert that optional and named parameters are not used at the same time.
     assert(optionalParameterTypes.isEmpty || namedParameterTypes.isEmpty);
     assert(namedParameters.length == namedParameterTypes.length);
@@ -640,18 +626,19 @@
         Types.substTypes(namedParameterTypes, arguments, parameters);
     if (!changed &&
         (!identical(parameterTypes, newParameterTypes) ||
-         !identical(optionalParameterTypes, newOptionalParameterTypes) ||
-         !identical(namedParameterTypes, newNamedParameterTypes))) {
+            !identical(optionalParameterTypes, newOptionalParameterTypes) ||
+            !identical(namedParameterTypes, newNamedParameterTypes))) {
       changed = true;
     }
     if (changed) {
       // Create a new type only if necessary.
-      return new FunctionType.internal(element,
-                                       newReturnType,
-                                       newParameterTypes,
-                                       newOptionalParameterTypes,
-                                       namedParameters,
-                                       newNamedParameterTypes);
+      return new FunctionType.internal(
+          element,
+          newReturnType,
+          newParameterTypes,
+          newOptionalParameterTypes,
+          namedParameters,
+          newNamedParameterTypes);
     }
     return this;
   }
@@ -687,10 +674,10 @@
   }
 
   void visitChildren(DartTypeVisitor visitor, var argument) {
-   returnType.accept(visitor, argument);
-   DartType.visitList(parameterTypes, visitor, argument);
-   DartType.visitList(optionalParameterTypes, visitor, argument);
-   DartType.visitList(namedParameterTypes, visitor, argument);
+    returnType.accept(visitor, argument);
+    DartType.visitList(parameterTypes, visitor, argument);
+    DartType.visitList(optionalParameterTypes, visitor, argument);
+    DartType.visitList(namedParameterTypes, visitor, argument);
   }
 
   String toString() {
@@ -719,7 +706,7 @@
         }
         sb.write(namedParameterTypes[i]);
         sb.write(' ');
-          sb.write(namedParameters[i]);
+        sb.write(namedParameters[i]);
         first = false;
       }
       sb.write('}');
@@ -734,23 +721,23 @@
 
   int get hashCode {
     int hash = 3 * returnType.hashCode;
-    for (DartType parameter  in parameterTypes) {
+    for (DartType parameter in parameterTypes) {
       hash = 17 * hash + 5 * parameter.hashCode;
     }
-    for (DartType parameter  in optionalParameterTypes) {
+    for (DartType parameter in optionalParameterTypes) {
       hash = 19 * hash + 7 * parameter.hashCode;
     }
-    for (String name  in namedParameters) {
+    for (String name in namedParameters) {
       hash = 23 * hash + 11 * name.hashCode;
     }
-    for (DartType parameter  in namedParameterTypes) {
+    for (DartType parameter in namedParameterTypes) {
       hash = 29 * hash + 13 * parameter.hashCode;
     }
     return hash;
   }
 
   bool operator ==(other) {
-    if (other is !FunctionType) return false;
+    if (other is! FunctionType) return false;
     return returnType == other.returnType &&
         equalElements(parameterTypes, other.parameterTypes) &&
         equalElements(optionalParameterTypes, other.optionalParameterTypes) &&
@@ -763,12 +750,11 @@
   DartType _unaliased;
 
   TypedefType(TypedefElement element,
-              [List<DartType> typeArguments = const <DartType>[]])
+      [List<DartType> typeArguments = const <DartType>[]])
       : super(element, typeArguments);
 
   TypedefType.forUserProvidedBadType(TypedefElement element,
-                                     [List<DartType> typeArguments =
-                                         const <DartType>[]])
+      [List<DartType> typeArguments = const <DartType>[]])
       : super(element, typeArguments, checkTypeArgumentCount: false);
 
   TypedefElement get element => super.element;
@@ -900,8 +886,7 @@
   R visitType(DartType type, A argument);
 
   @override
-  R visitVoidType(VoidType type, A argument) =>
-      visitType(type, argument);
+  R visitVoidType(VoidType type, A argument) => visitType(type, argument);
 
   @override
   R visitTypeVariableType(TypeVariableType type, A argument) =>
@@ -919,8 +904,7 @@
   R visitStatementType(StatementType type, A argument) =>
       visitType(type, argument);
 
-  R visitGenericType(GenericType type, A argument) =>
-      visitType(type, argument);
+  R visitGenericType(GenericType type, A argument) => visitType(type, argument);
 
   @override
   R visitInterfaceType(InterfaceType type, A argument) =>
@@ -931,8 +915,7 @@
       visitGenericType(type, argument);
 
   @override
-  R visitDynamicType(DynamicType type, A argument) =>
-      visitType(type, argument);
+  R visitDynamicType(DynamicType type, A argument) => visitType(type, argument);
 }
 
 /**
@@ -968,7 +951,6 @@
   bool visitMalformedType(MalformedType t, DartType s) => true;
 
   bool visitInterfaceType(InterfaceType t, DartType s) {
-
     // TODO(johnniwinther): Currently needed since literal types like int,
     // double, bool etc. might not have been resolved yet.
     t.element.ensureResolved(resolution);
@@ -997,7 +979,7 @@
     if (s == coreTypes.functionType) {
       return true;
     }
-    if (s is !FunctionType) return false;
+    if (s is! FunctionType) return false;
     FunctionType tf = t;
     FunctionType sf = s;
     if (invalidFunctionReturnTypes(tf.returnType, sf.returnType)) {
@@ -1036,7 +1018,7 @@
       return false;
     }
     if (!sf.namedParameters.isEmpty) {
-        // We must have [: len(t.p) == len(s.p) :].
+      // We must have [: len(t.p) == len(s.p) :].
       if (sNotEmpty) {
         return false;
       }
@@ -1166,7 +1148,6 @@
  * Type visitor that determines the subtype relation two types.
  */
 class SubtypeVisitor extends MoreSpecificVisitor {
-
   SubtypeVisitor(Resolution resolution) : super(resolution);
 
   bool isSubtype(DartType t, DartType s) {
@@ -1211,10 +1192,8 @@
  * substitute for the bound of [typeVariable]. [bound] holds the bound against
  * which [typeArgument] should be checked.
  */
-typedef void CheckTypeVariableBound(GenericType type,
-                                    DartType typeArgument,
-                                    TypeVariableType typeVariable,
-                                    DartType bound);
+typedef void CheckTypeVariableBound(GenericType type, DartType typeArgument,
+    TypeVariableType typeVariable, DartType bound);
 
 /// Basic interface for the Dart type system.
 abstract class DartTypes {
@@ -1327,8 +1306,8 @@
    * declared on [element]. Calls [checkTypeVariableBound] on each type
    * argument and bound.
    */
-  void checkTypeVariableBounds(GenericType type,
-                               CheckTypeVariableBound checkTypeVariableBound) {
+  void checkTypeVariableBounds(
+      GenericType type, CheckTypeVariableBound checkTypeVariableBound) {
     TypeDeclarationElement element = type.element;
     List<DartType> typeArguments = type.typeArguments;
     List<DartType> typeVariables = element.typeVariables;
@@ -1348,8 +1327,7 @@
    * instead of a newly created list.
    */
   static List<DartType> substTypes(List<DartType> types,
-                                   List<DartType> arguments,
-                                   List<DartType> parameters) {
+      List<DartType> arguments, List<DartType> parameters) {
     bool changed = false;
     List<DartType> result = new List<DartType>.generate(types.length, (index) {
       DartType type = types[index];
@@ -1409,9 +1387,7 @@
       return 1;
     }
     bool isDefinedByDeclaration(DartType type) {
-      return type.isInterfaceType ||
-             type.isTypedef ||
-             type.isTypeVariable;
+      return type.isInterfaceType || type.isTypedef || type.isTypeVariable;
     }
 
     if (isDefinedByDeclaration(a)) {
@@ -1428,7 +1404,7 @@
             return -1;
           } else {
             return compareList((a as GenericType).typeArguments,
-                               (b as GenericType).typeArguments);
+                (b as GenericType).typeArguments);
           }
         }
       } else {
@@ -1449,8 +1425,8 @@
         if (result != 0) return result;
         result = compareList(aFunc.parameterTypes, bFunc.parameterTypes);
         if (result != 0) return result;
-        result = compareList(aFunc.optionalParameterTypes,
-                             bFunc.optionalParameterTypes);
+        result = compareList(
+            aFunc.optionalParameterTypes, bFunc.optionalParameterTypes);
         if (result != 0) return result;
         // TODO(karlklose): reuse [compareList].
         Iterator<String> aNames = aFunc.namedParameters.iterator;
@@ -1466,8 +1442,8 @@
           // [bNames] is longer that [aNames] => a < b.
           return -1;
         }
-        return compareList(aFunc.namedParameterTypes,
-                           bFunc.namedParameterTypes);
+        return compareList(
+            aFunc.namedParameterTypes, bFunc.namedParameterTypes);
       } else {
         // [b] is a malformed or statement type => a < b.
         return -1;
@@ -1487,8 +1463,8 @@
       // [a] is a malformed type => a < b.
       return -1;
     }
-    assert (a.isMalformed);
-    assert (b.isMalformed);
+    assert(a.isMalformed);
+    assert(b.isMalformed);
     // TODO(johnniwinther): Can we do this better?
     return Elements.compareByPosition(a.element, b.element);
   }
@@ -1511,9 +1487,8 @@
   }
 
   /// Computes the least upper bound of two interface types [a] and [b].
-  InterfaceType computeLeastUpperBoundInterfaces(InterfaceType a,
-                                                 InterfaceType b) {
-
+  InterfaceType computeLeastUpperBoundInterfaces(
+      InterfaceType a, InterfaceType b) {
     /// Returns the set of supertypes of [type] at depth [depth].
     Set<DartType> getSupertypesAtDepth(InterfaceType type, int depth) {
       OrderedTypeSet types = type.element.allSupertypesAndSelf;
@@ -1543,8 +1518,8 @@
 
   /// Computes the least upper bound of the types in the longest prefix of [a]
   /// and [b].
-  List<DartType> computeLeastUpperBoundsTypes(List<DartType> a,
-                                              List<DartType> b) {
+  List<DartType> computeLeastUpperBoundsTypes(
+      List<DartType> a, List<DartType> b) {
     if (a.isEmpty || b.isEmpty) return const <DartType>[];
     int prefixLength = min(a.length, b.length);
     List<DartType> types = new List<DartType>(prefixLength);
@@ -1565,17 +1540,15 @@
   /// bound of the longest common prefix of the optional parameters of [a] and
   /// [b], and the named parameters are the least upper bound of those common to
   /// [a] and [b].
-  DartType computeLeastUpperBoundFunctionTypes(FunctionType a,
-                                               FunctionType b) {
+  DartType computeLeastUpperBoundFunctionTypes(FunctionType a, FunctionType b) {
     if (a.parameterTypes.length != b.parameterTypes.length) {
       return coreTypes.functionType;
     }
     DartType returnType = computeLeastUpperBound(a.returnType, b.returnType);
     List<DartType> parameterTypes =
         computeLeastUpperBoundsTypes(a.parameterTypes, b.parameterTypes);
-    List<DartType> optionalParameterTypes =
-        computeLeastUpperBoundsTypes(a.optionalParameterTypes,
-                                     b.optionalParameterTypes);
+    List<DartType> optionalParameterTypes = computeLeastUpperBoundsTypes(
+        a.optionalParameterTypes, b.optionalParameterTypes);
     List<String> namedParameters = <String>[];
     List<String> aNamedParameters = a.namedParameters;
     List<String> bNamedParameters = b.namedParameters;
@@ -1584,8 +1557,8 @@
     List<DartType> bNamedParameterTypes = b.namedParameterTypes;
     int aIndex = 0;
     int bIndex = 0;
-    while (aIndex < aNamedParameters.length &&
-           bIndex < bNamedParameters.length) {
+    while (
+        aIndex < aNamedParameters.length && bIndex < bNamedParameters.length) {
       String aNamedParameter = aNamedParameters[aIndex];
       String bNamedParameter = bNamedParameters[bIndex];
       int result = aNamedParameter.compareTo(bNamedParameter);
@@ -1601,18 +1574,15 @@
         bIndex++;
       }
     }
-    return new FunctionType.synthesized(
-        returnType,
-        parameterTypes, optionalParameterTypes,
-        namedParameters, namedParameterTypes);
+    return new FunctionType.synthesized(returnType, parameterTypes,
+        optionalParameterTypes, namedParameters, namedParameterTypes);
   }
 
   /// Computes the least upper bound of two types of which at least one is a
   /// type variable. The least upper bound of a type variable is defined in
   /// terms of its bound, but to ensure reflexivity we need to check for common
   /// bounds transitively.
-  DartType computeLeastUpperBoundTypeVariableTypes(DartType a,
-                                                   DartType b) {
+  DartType computeLeastUpperBoundTypeVariableTypes(DartType a, DartType b) {
     Set<DartType> typeVariableBounds = new Set<DartType>();
     while (a.isTypeVariable) {
       if (a == b) return a;
@@ -1688,9 +1658,7 @@
   ///     unaliasedBound(U) = unaliasedBound(Baz) = ()->dynamic
   ///     unaliasedBound(X) = unaliasedBound(Y) = `Object`
   ///
-  static DartType computeUnaliasedBound(
-      Resolution resolution,
-      DartType type) {
+  static DartType computeUnaliasedBound(Resolution resolution, DartType type) {
     DartType originalType = type;
     while (type.isTypeVariable) {
       TypeVariableType variable = type;
@@ -1734,8 +1702,7 @@
   /// used to lookup the existence and type of `foo`.
   ///
   static InterfaceType computeInterfaceType(
-      Resolution resolution,
-      DartType type) {
+      Resolution resolution, DartType type) {
     type = computeUnaliasedBound(resolution, type);
     if (type.treatAsDynamic) {
       return null;
@@ -1783,8 +1750,8 @@
   ///
   /// Note that this computation is a heuristic. It does not find a suggestion
   /// in all possible cases.
-  InterfaceType computeMoreSpecific(ClassElement element,
-                                    InterfaceType supertype) {
+  InterfaceType computeMoreSpecific(
+      ClassElement element, InterfaceType supertype) {
     InterfaceType supertypeInstance =
         element.thisType.asInstanceOf(supertype.element);
     if (supertypeInstance == null) return null;
@@ -1815,16 +1782,14 @@
   }
 
   bool visitTypeVariableType(TypeVariableType type, DartType argument) {
-    DartType constraint =
-        types.getMostSpecific(constraintMap[type], argument);
+    DartType constraint = types.getMostSpecific(constraintMap[type], argument);
     constraintMap[type] = constraint;
     return constraint != null;
   }
 
   bool visitFunctionType(FunctionType type, DartType argument) {
     if (argument is FunctionType) {
-      if (type.parameterTypes.length !=
-          argument.parameterTypes.length) {
+      if (type.parameterTypes.length != argument.parameterTypes.length) {
         return false;
       }
       if (type.optionalParameterTypes.length !=
@@ -1839,8 +1804,8 @@
       if (visitTypes(type.parameterTypes, argument.parameterTypes)) {
         return false;
       }
-      if (visitTypes(type.optionalParameterTypes,
-                     argument.optionalParameterTypes)) {
+      if (visitTypes(
+          type.optionalParameterTypes, argument.optionalParameterTypes)) {
         return false;
       }
       return visitTypes(type.namedParameterTypes, argument.namedParameterTypes);
@@ -1964,4 +1929,3 @@
     sb.write(')');
   }
 }
-
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 81ffd69..0d377aa 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -5,63 +5,52 @@
 library deferred_load;
 
 import 'common.dart';
-import 'common/backend_api.dart' show
-    Backend;
-import 'common/tasks.dart' show
-    CompilerTask;
-import 'compiler.dart' show
-    Compiler;
-import 'constants/values.dart' show
-    ConstantValue,
-    ConstructedConstantValue,
-    DeferredConstantValue,
-    StringConstantValue;
+import 'common/backend_api.dart' show Backend;
+import 'common/tasks.dart' show CompilerTask;
+import 'compiler.dart' show Compiler;
+import 'constants/values.dart'
+    show
+        ConstantValue,
+        ConstructedConstantValue,
+        DeferredConstantValue,
+        StringConstantValue;
 import 'dart_types.dart';
-import 'elements/elements.dart' show
-    AccessorElement,
-    AstElement,
-    ClassElement,
-    Element,
-    ElementKind,
-    Elements,
-    ExportElement,
-    FunctionElement,
-    ImportElement,
-    LibraryElement,
-    LocalFunctionElement,
-    MetadataAnnotation,
-    PrefixElement,
-    ScopeContainerElement,
-    TypedefElement;
-import 'js_backend/js_backend.dart' show
-    JavaScriptBackend;
-import 'resolution/resolution.dart' show
-    AnalyzableElementX;
-import 'resolution/tree_elements.dart' show
-    TreeElements;
+import 'elements/elements.dart'
+    show
+        AccessorElement,
+        AstElement,
+        ClassElement,
+        Element,
+        ElementKind,
+        Elements,
+        ExportElement,
+        FunctionElement,
+        ImportElement,
+        LibraryElement,
+        LocalFunctionElement,
+        MetadataAnnotation,
+        PrefixElement,
+        ScopeContainerElement,
+        TypedefElement;
+import 'js_backend/js_backend.dart' show JavaScriptBackend;
+import 'resolution/resolution.dart' show AnalyzableElementX;
+import 'resolution/tree_elements.dart' show TreeElements;
 import 'tree/tree.dart' as ast;
-import 'tree/tree.dart' show
-    Import,
-    LibraryTag,
-    LibraryDependency,
-    LiteralDartString,
-    LiteralString,
-    NewExpression,
-    Node;
-import 'universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    TypeUse,
-    TypeUseKind;
-import 'universe/world_impact.dart' show
-    ImpactUseCase,
-    WorldImpact,
-    WorldImpactVisitorImpl;
-import 'util/setlet.dart' show
-    Setlet;
+import 'tree/tree.dart'
+    show
+        Import,
+        LibraryTag,
+        LibraryDependency,
+        LiteralDartString,
+        LiteralString,
+        NewExpression,
+        Node;
+import 'universe/use.dart' show DynamicUse, StaticUse, TypeUse, TypeUseKind;
+import 'universe/world_impact.dart'
+    show ImpactUseCase, WorldImpact, WorldImpactVisitorImpl;
+import 'util/setlet.dart' show Setlet;
 import 'util/uri_extras.dart' as uri_extras;
-import 'util/util.dart' show
-    Link, makeUnique;
+import 'util/util.dart' show Link, makeUnique;
 
 /// A "hunk" of the program that will be loaded whenever one of its [imports]
 /// are loaded.
@@ -88,7 +77,7 @@
 
   String toString() => "OutputUnit($name)";
 
-  bool operator==(OutputUnit other) {
+  bool operator ==(OutputUnit other) {
     return imports.length == other.imports.length &&
         imports.containsAll(other.imports);
   }
@@ -96,7 +85,7 @@
   int get hashCode {
     int sum = 0;
     for (_DeferredImport import in imports) {
-      sum = (sum + import.hashCode) & 0x3FFFFFFF;  // Stay in 30 bit range.
+      sum = (sum + import.hashCode) & 0x3FFFFFFF; // Stay in 30 bit range.
     }
     return sum;
   }
@@ -229,8 +218,8 @@
     return outputUnitTo.imports.containsAll(outputUnitFrom.imports);
   }
 
-  void registerConstantDeferredUse(DeferredConstantValue constant,
-                                   PrefixElement prefix) {
+  void registerConstantDeferredUse(
+      DeferredConstantValue constant, PrefixElement prefix) {
     OutputUnit outputUnit = new OutputUnit();
     outputUnit.imports.add(new _DeclaredDeferredImport(prefix.deferredImport));
     _constantToOutputUnit[constant] = outputUnit;
@@ -265,12 +254,8 @@
   /// (not the transitive closure.)
   ///
   /// Adds the results to [elements] and [constants].
-  void _collectAllElementsAndConstantsResolvedFrom(
-      Element element,
-      Set<Element> elements,
-      Set<ConstantValue> constants,
-      isMirrorUsage) {
-
+  void _collectAllElementsAndConstantsResolvedFrom(Element element,
+      Set<Element> elements, Set<ConstantValue> constants, isMirrorUsage) {
     if (element.isMalformed) {
       // Malformed elements are ignored.
       return;
@@ -327,32 +312,30 @@
         compiler.impactStrategy.visitImpact(
             analyzableElement,
             worldImpact,
-            new WorldImpactVisitorImpl(
-                visitStaticUse: (StaticUse staticUse) {
-                  elements.add(staticUse.element);
-                },
-                visitTypeUse: (TypeUse typeUse) {
-                  DartType type = typeUse.type;
-                  switch (typeUse.kind) {
-                    case TypeUseKind.TYPE_LITERAL:
-                      if (type.isTypedef || type.isInterfaceType) {
-                        elements.add(type.element);
-                      }
-                      break;
-                    case TypeUseKind.INSTANTIATION:
-                    case TypeUseKind.IS_CHECK:
-                    case TypeUseKind.AS_CAST:
-                    case TypeUseKind.CATCH_TYPE:
-                      collectTypeDependencies(type);
-                      break;
-                    case TypeUseKind.CHECKED_MODE_CHECK:
-                      if (compiler.options.enableTypeAssertions) {
-                        collectTypeDependencies(type);
-                      }
-                      break;
+            new WorldImpactVisitorImpl(visitStaticUse: (StaticUse staticUse) {
+              elements.add(staticUse.element);
+            }, visitTypeUse: (TypeUse typeUse) {
+              DartType type = typeUse.type;
+              switch (typeUse.kind) {
+                case TypeUseKind.TYPE_LITERAL:
+                  if (type.isTypedef || type.isInterfaceType) {
+                    elements.add(type.element);
                   }
-                }),
-             IMPACT_USE);
+                  break;
+                case TypeUseKind.INSTANTIATION:
+                case TypeUseKind.IS_CHECK:
+                case TypeUseKind.AS_CAST:
+                case TypeUseKind.CATCH_TYPE:
+                  collectTypeDependencies(type);
+                  break;
+                case TypeUseKind.CHECKED_MODE_CHECK:
+                  if (compiler.options.enableTypeAssertions) {
+                    collectTypeDependencies(type);
+                  }
+                  break;
+              }
+            }),
+            IMPACT_USE);
 
         TreeElements treeElements = analyzableElement.resolvedAst.elements;
         assert(treeElements != null);
@@ -403,8 +386,7 @@
         elements.add(type.element.implementation);
       }
       elements.add(cls.implementation);
-    } else if (Elements.isStaticOrTopLevel(element) ||
-               element.isConstructor) {
+    } else if (Elements.isStaticOrTopLevel(element) || element.isConstructor) {
       elements.add(element);
       collectDependencies(element);
     }
@@ -412,8 +394,7 @@
       // When instantiating a class, we record a reference to the
       // constructor, not the class itself.  We must add all the
       // instance members of the constructor's class.
-      ClassElement implementation =
-          element.enclosingClass.implementation;
+      ClassElement implementation = element.enclosingClass.implementation;
       _collectAllElementsAndConstantsResolvedFrom(
           implementation, elements, constants, isMirrorUsage);
     }
@@ -457,10 +438,10 @@
   }
 
   /// Add all dependencies of [constant] to the mapping of [import].
-  void _mapConstantDependencies(ConstantValue constant,
-                                _DeferredImport import) {
-    Set<ConstantValue> constants = _constantsDeferredBy.putIfAbsent(import,
-        () => new Set<ConstantValue>());
+  void _mapConstantDependencies(
+      ConstantValue constant, _DeferredImport import) {
+    Set<ConstantValue> constants = _constantsDeferredBy.putIfAbsent(
+        import, () => new Set<ConstantValue>());
     if (constants.contains(constant)) return;
     constants.add(constant);
     if (constant is ConstructedConstantValue) {
@@ -475,13 +456,10 @@
   /// or [constant], mapping deferred imports to each dependency it needs in the
   /// sets [_importedDeferredBy] and [_constantsDeferredBy].
   /// Only one of [element] and [constant] should be given.
-  void _mapDependencies({Element element,
-                         _DeferredImport import,
-                         isMirrorUsage: false}) {
-
-    Set<Element> elements = _importedDeferredBy.putIfAbsent(import,
-        () => new Set<Element>());
-
+  void _mapDependencies(
+      {Element element, _DeferredImport import, isMirrorUsage: false}) {
+    Set<Element> elements =
+        _importedDeferredBy.putIfAbsent(import, () => new Set<Element>());
 
     Set<Element> dependentElements = new Set<Element>();
     Set<ConstantValue> dependentConstants = new Set<ConstantValue>();
@@ -497,7 +475,6 @@
       if (import != _fakeMainImport && _mainElements.contains(element)) return;
       elements.add(element);
 
-
       // This call can modify [dependentElements] and [dependentConstants].
       _collectAllElementsAndConstantsResolvedFrom(
           element, dependentElements, dependentConstants, isMirrorUsage);
@@ -508,7 +485,8 @@
     for (Element dependency in dependentElements) {
       if (_isExplicitlyDeferred(dependency, library)) {
         for (ImportElement deferredImport in _getImports(dependency, library)) {
-          _mapDependencies(element: dependency,
+          _mapDependencies(
+              element: dependency,
               import: new _DeclaredDeferredImport(deferredImport));
         }
       } else {
@@ -530,8 +508,8 @@
   ///
   /// The elements are added with [_mapDependencies].
   void _addMirrorElements() {
-    void mapDependenciesIfResolved(Element element,
-                                   _DeferredImport deferredImport) {
+    void mapDependenciesIfResolved(
+        Element element, _DeferredImport deferredImport) {
       // If an element is the target of a MirrorsUsed annotation but never used
       // It will not be resolved, and we should not call isNeededForReflection.
       // TODO(sigurdm): Unresolved elements should just answer false when
@@ -568,8 +546,8 @@
 
     for (_DeferredImport deferredImport in _allDeferredImports.keys) {
       LibraryElement deferredLibrary = _allDeferredImports[deferredImport];
-      for (LibraryElement library in
-          _nonDeferredReachableLibraries(deferredLibrary)) {
+      for (LibraryElement library
+          in _nonDeferredReachableLibraries(deferredLibrary)) {
         handleLibrary(library, deferredImport);
       }
     }
@@ -642,7 +620,6 @@
     _importedDeferredBy[_fakeMainImport] = _mainElements;
 
     measureElement(mainLibrary, () {
-
       // Starting from main, traverse the program and find all dependencies.
       _mapDependencies(element: compiler.mainFunction, import: _fakeMainImport);
 
@@ -676,7 +653,8 @@
           } else {
             elementToOutputUnitBuilder
                 .putIfAbsent(element, () => new OutputUnit())
-                .imports.add(import);
+                .imports
+                .add(import);
           }
         }
       }
@@ -689,7 +667,8 @@
           } else {
             constantToOutputUnitBuilder
                 .putIfAbsent(constant, () => new OutputUnit())
-                .imports.add(import);
+                .imports
+                .add(import);
           }
         }
       }
@@ -700,8 +679,8 @@
 
       // Find all the output units elements/constants have been mapped to, and
       // canonicalize them.
-      elementToOutputUnitBuilder.forEach(
-          (Element element, OutputUnit outputUnit) {
+      elementToOutputUnitBuilder
+          .forEach((Element element, OutputUnit outputUnit) {
         OutputUnit representative = allOutputUnits.lookup(outputUnit);
         if (representative == null) {
           representative = outputUnit;
@@ -709,8 +688,8 @@
         }
         _elementToOutputUnit[element] = representative;
       });
-      constantToOutputUnitBuilder.forEach(
-          (ConstantValue constant, OutputUnit outputUnit) {
+      constantToOutputUnitBuilder
+          .forEach((ConstantValue constant, OutputUnit outputUnit) {
         OutputUnit representative = allOutputUnits.lookup(outputUnit);
         if (representative == null) {
           representative = outputUnit;
@@ -768,15 +747,13 @@
                   compiler.constants.getConstantValue(metadata.constant);
               Element element = value.getType(compiler.coreTypes).element;
               if (element == deferredLibraryClass) {
-                 reporter.reportErrorMessage(
-                     import, MessageKind.DEFERRED_OLD_SYNTAX);
+                reporter.reportErrorMessage(
+                    import, MessageKind.DEFERRED_OLD_SYNTAX);
               }
             }
           }
 
-          String prefix = (import.prefix != null)
-              ? import.prefix.name
-              : null;
+          String prefix = (import.prefix != null) ? import.prefix.name : null;
           // The last import we saw with the same prefix.
           ImportElement previousDeferredImport = prefixDeferredImport[prefix];
           if (import.isDeferred) {
@@ -786,8 +763,7 @@
 
             if (prefix == null) {
               reporter.reportErrorMessage(
-                  import,
-                  MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX);
+                  import, MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX);
             } else {
               prefixDeferredImport[prefix] = import;
               _deferredImportDescriptions[key] =
@@ -802,8 +778,7 @@
               ImportElement failingImport = (previousDeferredImport != null)
                   ? previousDeferredImport
                   : import;
-              reporter.reportErrorMessage(
-                  failingImport.prefix,
+              reporter.reportErrorMessage(failingImport.prefix,
                   MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX);
             }
             usedPrefixes.add(prefix);
@@ -813,7 +788,7 @@
     }
     if (isProgramSplit) {
       isProgramSplit = compiler.backend.enableDeferredLoadingIfSupported(
-            lastDeferred, compiler.globalDependencies);
+          lastDeferred, compiler.globalDependencies);
     }
   }
 
@@ -893,15 +868,17 @@
     _deferredImportDescriptions.keys.forEach((_DeferredImport import) {
       List<OutputUnit> outputUnits = hunksToLoad[importDeferName[import]];
       ImportDescription description = _deferredImportDescriptions[import];
-      Map<String, dynamic> libraryMap =
-          mapping.putIfAbsent(description.importingUri,
-              () => <String, dynamic>{"name": description.importingLibraryName,
-                                      "imports": <String, List<String>>{}});
+      Map<String, dynamic> libraryMap = mapping.putIfAbsent(
+          description.importingUri,
+          () => <String, dynamic>{
+                "name": description.importingLibraryName,
+                "imports": <String, List<String>>{}
+              });
 
-      libraryMap["imports"][importDeferName[import]] = outputUnits.map(
-            (OutputUnit outputUnit) {
-          return backend.deferredPartFileName(outputUnit.name);
-        }).toList();
+      libraryMap["imports"][importDeferName[import]] =
+          outputUnits.map((OutputUnit outputUnit) {
+        return backend.deferredPartFileName(outputUnit.name);
+      }).toList();
     });
     return mapping;
   }
@@ -909,13 +886,13 @@
   /// Creates a textual representation of the output unit content.
   String dump() {
     Map<OutputUnit, List<String>> elementMap = <OutputUnit, List<String>>{};
-    Map<OutputUnit, List<String>> constantMap =
-        <OutputUnit, List<String>>{};
+    Map<OutputUnit, List<String>> constantMap = <OutputUnit, List<String>>{};
     _elementToOutputUnit.forEach((Element element, OutputUnit output) {
       elementMap.putIfAbsent(output, () => <String>[]).add('$element');
     });
     _constantToOutputUnit.forEach((ConstantValue value, OutputUnit output) {
-      constantMap.putIfAbsent(output, () => <String>[])
+      constantMap
+          .putIfAbsent(output, () => <String>[])
           .add(value.toStructuredString());
     });
 
@@ -939,28 +916,27 @@
     }
     return sb.toString();
   }
-
 }
 
 class ImportDescription {
   /// Relative uri to the importing library.
   final String importingUri;
+
   /// The prefix this import is imported as.
   final String prefix;
   final LibraryElement _importingLibrary;
 
-  ImportDescription(ImportElement import,
-                    LibraryElement importingLibrary,
-                    Compiler compiler)
-      : importingUri = uri_extras.relativize(
-          compiler.mainApp.canonicalUri,
-          importingLibrary.canonicalUri, false),
+  ImportDescription(
+      ImportElement import, LibraryElement importingLibrary, Compiler compiler)
+      : importingUri = uri_extras.relativize(compiler.mainApp.canonicalUri,
+            importingLibrary.canonicalUri, false),
         prefix = import.prefix.name,
         _importingLibrary = importingLibrary;
 
   String get importingLibraryName {
     return _importingLibrary.hasLibraryName
-        ? _importingLibrary.libraryName : "<unnamed>";
+        ? _importingLibrary.libraryName
+        : "<unnamed>";
   }
 }
 
diff --git a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
index bd57506..3cb959f 100644
--- a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
+++ b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
@@ -4,14 +4,10 @@
 
 library dart2js.diagnostic_listener;
 
-import '../options.dart' show
-    DiagnosticOptions;
-import 'source_span.dart' show
-    SourceSpan;
-import 'spannable.dart' show
-    Spannable;
-import '../elements/elements.dart' show
-    Element;
+import '../options.dart' show DiagnosticOptions;
+import 'source_span.dart' show SourceSpan;
+import 'spannable.dart' show Spannable;
+import '../elements/elements.dart' show Element;
 import 'messages.dart';
 
 // TODO(johnniwinther): Rename and cleanup this interface. Add severity enum.
@@ -30,51 +26,39 @@
   /// element.
   SourceSpan spanFromSpannable(Spannable node);
 
-  void reportErrorMessage(
-      Spannable spannable,
-      MessageKind messageKind,
+  void reportErrorMessage(Spannable spannable, MessageKind messageKind,
       [Map arguments = const {}]) {
     reportError(createMessage(spannable, messageKind, arguments));
   }
 
-  void reportError(
-      DiagnosticMessage message,
+  void reportError(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
 
-  void reportWarningMessage(
-      Spannable spannable,
-      MessageKind messageKind,
+  void reportWarningMessage(Spannable spannable, MessageKind messageKind,
       [Map arguments = const {}]) {
     reportWarning(createMessage(spannable, messageKind, arguments));
   }
 
-  void reportWarning(
-      DiagnosticMessage message,
+  void reportWarning(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
 
-  void reportHintMessage(
-      Spannable spannable,
-      MessageKind messageKind,
+  void reportHintMessage(Spannable spannable, MessageKind messageKind,
       [Map arguments = const {}]) {
     reportHint(createMessage(spannable, messageKind, arguments));
   }
 
-  void reportHint(
-      DiagnosticMessage message,
+  void reportHint(DiagnosticMessage message,
       [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
 
-
   @deprecated
   void reportInfo(Spannable node, MessageKind errorCode,
-                  [Map arguments = const {}]);
+      [Map arguments = const {}]);
 
   /// Set current element of this reporter to [element]. This is used for
   /// creating [SourceSpan] in [spanFromSpannable].
   withCurrentElement(Element element, f());
 
-  DiagnosticMessage createMessage(
-      Spannable spannable,
-      MessageKind messageKind,
+  DiagnosticMessage createMessage(Spannable spannable, MessageKind messageKind,
       [Map arguments = const {}]);
 }
 
@@ -84,4 +68,4 @@
   final Message message;
 
   DiagnosticMessage(this.sourceSpan, this.spannable, this.message);
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/diagnostics/invariant.dart b/pkg/compiler/lib/src/diagnostics/invariant.dart
index 349d89b..7ad6f35 100644
--- a/pkg/compiler/lib/src/diagnostics/invariant.dart
+++ b/pkg/compiler/lib/src/diagnostics/invariant.dart
@@ -46,7 +46,7 @@
     throw new SpannableAssertionFailure(CURRENT_ELEMENT_SPANNABLE,
         "Spannable was null for invariant. Use CURRENT_ELEMENT_SPANNABLE.");
   }
-  if (condition is Function){
+  if (condition is Function) {
     condition = condition();
     if (condition is String) {
       message = condition;
diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart
index d18628c..f442dd1 100644
--- a/pkg/compiler/lib/src/diagnostics/messages.dart
+++ b/pkg/compiler/lib/src/diagnostics/messages.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-
 /**
  * The messages in this file should meet the following guide lines:
  *
@@ -63,14 +62,10 @@
 
 library dart2js.messages;
 
-import '../tokens/token.dart' show
-    ErrorToken,
-    Token;
+import '../tokens/token.dart' show ErrorToken, Token;
 
-import 'invariant.dart' show
-    invariant;
-import 'spannable.dart' show
-    CURRENT_ELEMENT_SPANNABLE;
+import 'invariant.dart' show invariant;
+import 'spannable.dart' show CURRENT_ELEMENT_SPANNABLE;
 
 import 'generated/shared_messages.dart' as shared_messages;
 
@@ -498,155 +493,150 @@
   /// Additional options needed for the examples to work.
   final List<String> options;
 
-  const MessageTemplate(
-      this.kind,
-      this.template,
-      {this.howToFix,
-       this.examples,
-       this.options: const <String>[]});
+  const MessageTemplate(this.kind, this.template,
+      {this.howToFix, this.examples, this.options: const <String>[]});
 
   /// All templates used by the compiler.
   ///
   /// The map is complete mapping from [MessageKind] to their corresponding
   /// [MessageTemplate].
   // The key type is a union of MessageKind and SharedMessageKind.
-  static final Map<dynamic, MessageTemplate> TEMPLATES =
-      <dynamic, MessageTemplate>{}
+  static final Map<dynamic, MessageTemplate> TEMPLATES = <dynamic,
+      MessageTemplate>{}
     ..addAll(shared_messages.TEMPLATES)
-    ..addAll(const<MessageKind, MessageTemplate>{
+    ..addAll(const <MessageKind, MessageTemplate>{
       /// Do not use this. It is here for legacy and debugging. It violates item
       /// 4 of the guide lines for error messages in the beginning of the file.
       MessageKind.GENERIC:
-        const MessageTemplate(MessageKind.GENERIC, '#{text}'),
+          const MessageTemplate(MessageKind.GENERIC, '#{text}'),
 
-      MessageKind.VOID_EXPRESSION:
-        const MessageTemplate(MessageKind.VOID_EXPRESSION,
-          "Expression does not yield a value."),
+      MessageKind.VOID_EXPRESSION: const MessageTemplate(
+          MessageKind.VOID_EXPRESSION, "Expression does not yield a value."),
 
-      MessageKind.VOID_VARIABLE:
-        const MessageTemplate(MessageKind.VOID_VARIABLE,
-          "Variable cannot be of type void."),
+      MessageKind.VOID_VARIABLE: const MessageTemplate(
+          MessageKind.VOID_VARIABLE, "Variable cannot be of type void."),
 
-      MessageKind.RETURN_VALUE_IN_VOID:
-        const MessageTemplate(MessageKind.RETURN_VALUE_IN_VOID,
+      MessageKind.RETURN_VALUE_IN_VOID: const MessageTemplate(
+          MessageKind.RETURN_VALUE_IN_VOID,
           "Cannot return value from void function."),
 
-      MessageKind.RETURN_NOTHING:
-        const MessageTemplate(MessageKind.RETURN_NOTHING,
+      MessageKind.RETURN_NOTHING: const MessageTemplate(
+          MessageKind.RETURN_NOTHING,
           "Value of type '#{returnType}' expected."),
 
-      MessageKind.MISSING_ARGUMENT:
-        const MessageTemplate(MessageKind.MISSING_ARGUMENT,
+      MessageKind.MISSING_ARGUMENT: const MessageTemplate(
+          MessageKind.MISSING_ARGUMENT,
           "Missing argument of type '#{argumentType}'."),
 
-      MessageKind.ADDITIONAL_ARGUMENT:
-        const MessageTemplate(MessageKind.ADDITIONAL_ARGUMENT,
-          "Additional argument."),
+      MessageKind.ADDITIONAL_ARGUMENT: const MessageTemplate(
+          MessageKind.ADDITIONAL_ARGUMENT, "Additional argument."),
 
-      MessageKind.NAMED_ARGUMENT_NOT_FOUND:
-        const MessageTemplate(MessageKind.NAMED_ARGUMENT_NOT_FOUND,
+      MessageKind.NAMED_ARGUMENT_NOT_FOUND: const MessageTemplate(
+          MessageKind.NAMED_ARGUMENT_NOT_FOUND,
           "No named argument '#{argumentName}' found on method."),
 
-      MessageKind.AWAIT_MEMBER_NOT_FOUND:
-        const MessageTemplate(MessageKind.AWAIT_MEMBER_NOT_FOUND,
+      MessageKind.AWAIT_MEMBER_NOT_FOUND: const MessageTemplate(
+          MessageKind.AWAIT_MEMBER_NOT_FOUND,
           "No member named 'await' in class '#{className}'.",
           howToFix: "Did you mean to add the 'async' marker "
-                    "to '#{functionName}'?",
-          examples: const ["""
+              "to '#{functionName}'?",
+          examples: const [
+            """
 class A {
   m() => await -3;
 }
 main() => new A().m();
-"""]),
+"""
+          ]),
 
-      MessageKind.AWAIT_MEMBER_NOT_FOUND_IN_CLOSURE:
-        const MessageTemplate(MessageKind.AWAIT_MEMBER_NOT_FOUND_IN_CLOSURE,
+      MessageKind.AWAIT_MEMBER_NOT_FOUND_IN_CLOSURE: const MessageTemplate(
+          MessageKind.AWAIT_MEMBER_NOT_FOUND_IN_CLOSURE,
           "No member named 'await' in class '#{className}'.",
           howToFix: "Did you mean to add the 'async' marker "
-                    "to the enclosing function?",
-          examples: const ["""
+              "to the enclosing function?",
+          examples: const [
+            """
 class A {
   m() => () => await -3;
 }
 main() => new A().m();
-"""]),
+"""
+          ]),
 
-      MessageKind.NOT_CALLABLE:
-        const MessageTemplate(MessageKind.NOT_CALLABLE,
-          "'#{elementName}' is not callable."),
+      MessageKind.NOT_CALLABLE: const MessageTemplate(
+          MessageKind.NOT_CALLABLE, "'#{elementName}' is not callable."),
 
-      MessageKind.MEMBER_NOT_STATIC:
-        const MessageTemplate(MessageKind.MEMBER_NOT_STATIC,
+      MessageKind.MEMBER_NOT_STATIC: const MessageTemplate(
+          MessageKind.MEMBER_NOT_STATIC,
           "'#{className}.#{memberName}' is not static."),
 
-      MessageKind.NO_INSTANCE_AVAILABLE:
-        const MessageTemplate(MessageKind.NO_INSTANCE_AVAILABLE,
+      MessageKind.NO_INSTANCE_AVAILABLE: const MessageTemplate(
+          MessageKind.NO_INSTANCE_AVAILABLE,
           "'#{name}' is only available in instance methods."),
 
-      MessageKind.NO_THIS_AVAILABLE:
-        const MessageTemplate(MessageKind.NO_THIS_AVAILABLE,
+      MessageKind.NO_THIS_AVAILABLE: const MessageTemplate(
+          MessageKind.NO_THIS_AVAILABLE,
           "'this' is only available in instance methods."),
 
-      MessageKind.PRIVATE_ACCESS:
-        const MessageTemplate(MessageKind.PRIVATE_ACCESS,
+      MessageKind.PRIVATE_ACCESS: const MessageTemplate(
+          MessageKind.PRIVATE_ACCESS,
           "'#{name}' is declared private within library "
           "'#{libraryName}'."),
 
-      MessageKind.THIS_IS_THE_DECLARATION:
-        const MessageTemplate(MessageKind.THIS_IS_THE_DECLARATION,
+      MessageKind.THIS_IS_THE_DECLARATION: const MessageTemplate(
+          MessageKind.THIS_IS_THE_DECLARATION,
           "This is the declaration of '#{name}'."),
 
-      MessageKind.THIS_IS_THE_METHOD:
-        const MessageTemplate(MessageKind.THIS_IS_THE_METHOD,
-          "This is the method declaration."),
+      MessageKind.THIS_IS_THE_METHOD: const MessageTemplate(
+          MessageKind.THIS_IS_THE_METHOD, "This is the method declaration."),
 
-      MessageKind.CANNOT_RESOLVE:
-        const MessageTemplate(MessageKind.CANNOT_RESOLVE,
-          "Cannot resolve '#{name}'."),
+      MessageKind.CANNOT_RESOLVE: const MessageTemplate(
+          MessageKind.CANNOT_RESOLVE, "Cannot resolve '#{name}'."),
 
-      MessageKind.CANNOT_RESOLVE_AWAIT:
-        const MessageTemplate(MessageKind.CANNOT_RESOLVE_AWAIT,
-          "Cannot resolve '#{name}'.",
+      MessageKind.CANNOT_RESOLVE_AWAIT: const MessageTemplate(
+          MessageKind.CANNOT_RESOLVE_AWAIT, "Cannot resolve '#{name}'.",
           howToFix: "Did you mean to add the 'async' marker "
-                    "to '#{functionName}'?",
+              "to '#{functionName}'?",
           examples: const [
-              "main() => await -3;",
-              "foo() => await -3; main() => foo();"
+            "main() => await -3;",
+            "foo() => await -3; main() => foo();"
           ]),
 
-      MessageKind.CANNOT_RESOLVE_AWAIT_IN_CLOSURE:
-        const MessageTemplate(MessageKind.CANNOT_RESOLVE_AWAIT_IN_CLOSURE,
+      MessageKind.CANNOT_RESOLVE_AWAIT_IN_CLOSURE: const MessageTemplate(
+          MessageKind.CANNOT_RESOLVE_AWAIT_IN_CLOSURE,
           "Cannot resolve '#{name}'.",
           howToFix: "Did you mean to add the 'async' marker "
-                    "to the enclosing function?",
-          examples: const [
-              "main() { (() => await -3)(); }",
-          ]),
+              "to the enclosing function?",
+          examples: const ["main() { (() => await -3)(); }",]),
 
-      MessageKind.CANNOT_RESOLVE_IN_INITIALIZER:
-        const MessageTemplate(MessageKind.CANNOT_RESOLVE_IN_INITIALIZER,
+      MessageKind.CANNOT_RESOLVE_IN_INITIALIZER: const MessageTemplate(
+          MessageKind.CANNOT_RESOLVE_IN_INITIALIZER,
           "Cannot resolve '#{name}'. It would be implicitly looked up on this "
           "instance, but instances are not available in initializers.",
           howToFix: "Try correcting the unresolved reference or move the "
               "initialization to a constructor body.",
-          examples: const ["""
+          examples: const [
+            """
 class A {
   var test = unresolvedName;
 }
 main() => new A();
-"""]),
+"""
+          ]),
 
-      MessageKind.CANNOT_RESOLVE_CONSTRUCTOR:
-        const MessageTemplate(MessageKind.CANNOT_RESOLVE_CONSTRUCTOR,
+      MessageKind.CANNOT_RESOLVE_CONSTRUCTOR: const MessageTemplate(
+          MessageKind.CANNOT_RESOLVE_CONSTRUCTOR,
           "Cannot resolve constructor '#{constructorName}'."),
 
       MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT:
-        const MessageTemplate(
-          MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT,
-          "cannot resolve constructor '#{constructorName}' "
-          "for implicit super call.",
-          howToFix: "Try explicitly invoking a constructor of the super class",
-          examples: const ["""
+          const MessageTemplate(
+              MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT,
+              "cannot resolve constructor '#{constructorName}' "
+              "for implicit super call.",
+              howToFix:
+                  "Try explicitly invoking a constructor of the super class",
+              examples: const [
+            """
 class A {
   A.foo() {}
 }
@@ -654,25 +644,27 @@
   B();
 }
 main() => new B();
-"""]),
+"""
+          ]),
 
-      MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME:
-        const MessageTemplate(MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME,
+      MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME: const MessageTemplate(
+          MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME,
           "Unnamed constructor name must be '#{name}'."),
 
-      MessageKind.INVALID_CONSTRUCTOR_NAME:
-        const MessageTemplate(MessageKind.INVALID_CONSTRUCTOR_NAME,
+      MessageKind.INVALID_CONSTRUCTOR_NAME: const MessageTemplate(
+          MessageKind.INVALID_CONSTRUCTOR_NAME,
           "Constructor name must start with '#{name}'."),
 
-      MessageKind.CANNOT_RESOLVE_TYPE:
-        const MessageTemplate(MessageKind.CANNOT_RESOLVE_TYPE,
+      MessageKind.CANNOT_RESOLVE_TYPE: const MessageTemplate(
+          MessageKind.CANNOT_RESOLVE_TYPE,
           "Cannot resolve type '#{typeName}'."),
 
-      MessageKind.DUPLICATE_DEFINITION:
-        const MessageTemplate(MessageKind.DUPLICATE_DEFINITION,
+      MessageKind.DUPLICATE_DEFINITION: const MessageTemplate(
+          MessageKind.DUPLICATE_DEFINITION,
           "Duplicate definition of '#{name}'.",
           howToFix: "Try to rename or remove this definition.",
-          examples: const ["""
+          examples: const [
+            """
 class C {
   void f() {}
   int get f => 1;
@@ -682,127 +674,106 @@
   new C();
 }
 
-"""]),
+"""
+          ]),
 
-      MessageKind.EXISTING_DEFINITION:
-        const MessageTemplate(MessageKind.EXISTING_DEFINITION,
-          "Existing definition of '#{name}'."),
+      MessageKind.EXISTING_DEFINITION: const MessageTemplate(
+          MessageKind.EXISTING_DEFINITION, "Existing definition of '#{name}'."),
 
-      MessageKind.DUPLICATE_IMPORT:
-        const MessageTemplate(MessageKind.DUPLICATE_IMPORT,
-          "Duplicate import of '#{name}'."),
+      MessageKind.DUPLICATE_IMPORT: const MessageTemplate(
+          MessageKind.DUPLICATE_IMPORT, "Duplicate import of '#{name}'."),
 
-      MessageKind.HIDDEN_IMPORT:
-        const MessageTemplate(MessageKind.HIDDEN_IMPORT,
+      MessageKind.HIDDEN_IMPORT: const MessageTemplate(
+          MessageKind.HIDDEN_IMPORT,
           "'#{name}' from library '#{hiddenUri}' is hidden by '#{name}' "
           "from library '#{hidingUri}'.",
           howToFix:
-            "Try adding 'hide #{name}' to the import of '#{hiddenUri}'.",
+              "Try adding 'hide #{name}' to the import of '#{hiddenUri}'.",
           examples: const [
-              const {
-'main.dart':
-"""
+            const {
+              'main.dart': """
 import 'dart:async'; // This imports a class Future.
 import 'future.dart';
 
 void main() => new Future();""",
-
-'future.dart':
-"""
+              'future.dart': """
 library future;
 
-class Future {}"""},
-
-          const {
-'main.dart':
-"""
+class Future {}"""
+            },
+            const {
+              'main.dart': """
 import 'future.dart';
 import 'dart:async'; // This imports a class Future.
 
 void main() => new Future();""",
-
-'future.dart':
-"""
+              'future.dart': """
 library future;
 
-class Future {}"""},
-
-          const {
-'main.dart':
-"""
+class Future {}"""
+            },
+            const {
+              'main.dart': """
 import 'export.dart';
 import 'dart:async'; // This imports a class Future.
 
 void main() => new Future();""",
-
-'future.dart':
-"""
+              'future.dart': """
 library future;
 
 class Future {}""",
-
-'export.dart':
-"""
+              'export.dart': """
 library export;
 
-export 'future.dart';"""},
-
-         const {
-'main.dart':
-"""
+export 'future.dart';"""
+            },
+            const {
+              'main.dart': """
 import 'future.dart' as prefix;
 import 'dart:async' as prefix; // This imports a class Future.
 
 void main() => new prefix.Future();""",
-
-'future.dart':
-"""
+              'future.dart': """
 library future;
 
-class Future {}"""}]),
+class Future {}"""
+            }
+          ]),
 
-
-      MessageKind.HIDDEN_IMPLICIT_IMPORT:
-        const MessageTemplate(MessageKind.HIDDEN_IMPLICIT_IMPORT,
+      MessageKind.HIDDEN_IMPLICIT_IMPORT: const MessageTemplate(
+          MessageKind.HIDDEN_IMPLICIT_IMPORT,
           "'#{name}' from library '#{hiddenUri}' is hidden by '#{name}' "
           "from library '#{hidingUri}'.",
           howToFix: "Try adding an explicit "
-                    "'import \"#{hiddenUri}\" hide #{name}'.",
+              "'import \"#{hiddenUri}\" hide #{name}'.",
           examples: const [
-              const {
-'main.dart':
-"""
+            const {
+              'main.dart': """
 // This hides the implicit import of class Type from dart:core.
 import 'type.dart';
 
 void main() => new Type();""",
-
-'type.dart':
-"""
+              'type.dart': """
 library type;
 
-class Type {}"""},
-          const {
-'conflictsWithDart.dart':
-"""
+class Type {}"""
+            },
+            const {
+              'conflictsWithDart.dart': """
 library conflictsWithDart;
 
 class Duration {
   static var x = 100;
 }
 """,
-
-'conflictsWithDartAsWell.dart':
-"""
+              'conflictsWithDartAsWell.dart': """
 library conflictsWithDartAsWell;
 
 class Duration {
   static var x = 100;
 }
 """,
-
-'main.dart':
-r"""
+              'main.dart': r"""
 library testDartConflicts;
 
 import 'conflictsWithDart.dart';
@@ -811,166 +782,169 @@
 main() {
   print("Hail Caesar ${Duration.x}");
 }
-"""}]),
+"""
+            }
+          ]),
 
-      MessageKind.DUPLICATE_EXPORT:
-        const MessageTemplate(MessageKind.DUPLICATE_EXPORT,
-          "Duplicate export of '#{name}'.",
+      MessageKind.DUPLICATE_EXPORT: const MessageTemplate(
+          MessageKind.DUPLICATE_EXPORT, "Duplicate export of '#{name}'.",
           howToFix: "Try adding 'hide #{name}' to one of the exports.",
-          examples: const [const {
-'main.dart': """
+          examples: const [
+            const {
+              'main.dart': """
 export 'decl1.dart';
 export 'decl2.dart';
 
 main() {}""",
-'decl1.dart': "class Class {}",
-'decl2.dart': "class Class {}"}]),
+              'decl1.dart': "class Class {}",
+              'decl2.dart': "class Class {}"
+            }
+          ]),
 
-      MessageKind.DUPLICATE_EXPORT_CONT:
-        const MessageTemplate(MessageKind.DUPLICATE_EXPORT_CONT,
+      MessageKind.DUPLICATE_EXPORT_CONT: const MessageTemplate(
+          MessageKind.DUPLICATE_EXPORT_CONT,
           "This is another export of '#{name}'."),
 
-      MessageKind.DUPLICATE_EXPORT_DECL:
-        const MessageTemplate(MessageKind.DUPLICATE_EXPORT_DECL,
+      MessageKind.DUPLICATE_EXPORT_DECL: const MessageTemplate(
+          MessageKind.DUPLICATE_EXPORT_DECL,
           "The exported '#{name}' from export #{uriString} is defined here."),
 
-      MessageKind.EMPTY_HIDE:
-        const MessageTemplate(MessageKind.EMPTY_HIDE,
-            "Library '#{uri}' doesn't export a '#{name}' declaration.",
-      howToFix: "Try removing '#{name}' the 'hide' clause.",
-      examples: const [
-        const {
-            'main.dart': """
+      MessageKind.EMPTY_HIDE: const MessageTemplate(MessageKind.EMPTY_HIDE,
+          "Library '#{uri}' doesn't export a '#{name}' declaration.",
+          howToFix: "Try removing '#{name}' the 'hide' clause.",
+          examples: const [
+            const {
+              'main.dart': """
 import 'dart:core' hide Foo;
 
-main() {}"""},
-        const {
-'main.dart': """
+main() {}"""
+            },
+            const {
+              'main.dart': """
 export 'dart:core' hide Foo;
 
-main() {}"""},
-]),
+main() {}"""
+            },
+          ]),
 
-      MessageKind.EMPTY_SHOW:
-        const MessageTemplate(MessageKind.EMPTY_SHOW,
-            "Library '#{uri}' doesn't export a '#{name}' declaration.",
-      howToFix: "Try removing '#{name}' from the 'show' clause.",
-      examples: const [
-        const {
-            'main.dart': """
+      MessageKind.EMPTY_SHOW: const MessageTemplate(MessageKind.EMPTY_SHOW,
+          "Library '#{uri}' doesn't export a '#{name}' declaration.",
+          howToFix: "Try removing '#{name}' from the 'show' clause.",
+          examples: const [
+            const {
+              'main.dart': """
 import 'dart:core' show Foo;
 
-main() {}"""},
-        const {
-'main.dart': """
+main() {}"""
+            },
+            const {
+              'main.dart': """
 export 'dart:core' show Foo;
 
-main() {}"""},
-]),
+main() {}"""
+            },
+          ]),
 
-      MessageKind.NOT_A_TYPE:
-        const MessageTemplate(MessageKind.NOT_A_TYPE,
-          "'#{node}' is not a type."),
+      MessageKind.NOT_A_TYPE: const MessageTemplate(
+          MessageKind.NOT_A_TYPE, "'#{node}' is not a type."),
 
-      MessageKind.NOT_A_PREFIX:
-        const MessageTemplate(MessageKind.NOT_A_PREFIX,
-          "'#{node}' is not a prefix."),
+      MessageKind.NOT_A_PREFIX: const MessageTemplate(
+          MessageKind.NOT_A_PREFIX, "'#{node}' is not a prefix."),
 
-      MessageKind.PREFIX_AS_EXPRESSION:
-        const MessageTemplate(MessageKind.PREFIX_AS_EXPRESSION,
+      MessageKind.PREFIX_AS_EXPRESSION: const MessageTemplate(
+          MessageKind.PREFIX_AS_EXPRESSION,
           "Library prefix '#{prefix}' is not a valid expression."),
 
-      MessageKind.CANNOT_FIND_CONSTRUCTOR:
-        const MessageTemplate(MessageKind.CANNOT_FIND_CONSTRUCTOR,
+      MessageKind.CANNOT_FIND_CONSTRUCTOR: const MessageTemplate(
+          MessageKind.CANNOT_FIND_CONSTRUCTOR,
           "Cannot find constructor '#{constructorName}' in class "
           "'#{className}'."),
 
-      MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR:
-        const MessageTemplate(MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR,
+      MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR: const MessageTemplate(
+          MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR,
           "Cannot find unnamed constructor in class "
           "'#{className}'."),
 
-      MessageKind.CYCLIC_CLASS_HIERARCHY:
-        const MessageTemplate(MessageKind.CYCLIC_CLASS_HIERARCHY,
+      MessageKind.CYCLIC_CLASS_HIERARCHY: const MessageTemplate(
+          MessageKind.CYCLIC_CLASS_HIERARCHY,
           "'#{className}' creates a cycle in the class hierarchy."),
 
-      MessageKind.CYCLIC_REDIRECTING_FACTORY:
-        const MessageTemplate(MessageKind.CYCLIC_REDIRECTING_FACTORY,
+      MessageKind.CYCLIC_REDIRECTING_FACTORY: const MessageTemplate(
+          MessageKind.CYCLIC_REDIRECTING_FACTORY,
           'Redirecting factory leads to a cyclic redirection.'),
 
-      MessageKind.INVALID_RECEIVER_IN_INITIALIZER:
-        const MessageTemplate(MessageKind.INVALID_RECEIVER_IN_INITIALIZER,
+      MessageKind.INVALID_RECEIVER_IN_INITIALIZER: const MessageTemplate(
+          MessageKind.INVALID_RECEIVER_IN_INITIALIZER,
           "Field initializer expected."),
 
-      MessageKind.NO_SUPER_IN_STATIC:
-        const MessageTemplate(MessageKind.NO_SUPER_IN_STATIC,
+      MessageKind.NO_SUPER_IN_STATIC: const MessageTemplate(
+          MessageKind.NO_SUPER_IN_STATIC,
           "'super' is only available in instance methods."),
 
-      MessageKind.DUPLICATE_INITIALIZER:
-        const MessageTemplate(MessageKind.DUPLICATE_INITIALIZER,
+      MessageKind.DUPLICATE_INITIALIZER: const MessageTemplate(
+          MessageKind.DUPLICATE_INITIALIZER,
           "Field '#{fieldName}' is initialized more than once."),
 
-      MessageKind.ALREADY_INITIALIZED:
-        const MessageTemplate(MessageKind.ALREADY_INITIALIZED,
+      MessageKind.ALREADY_INITIALIZED: const MessageTemplate(
+          MessageKind.ALREADY_INITIALIZED,
           "'#{fieldName}' was already initialized here."),
 
-      MessageKind.INIT_STATIC_FIELD:
-        const MessageTemplate(MessageKind.INIT_STATIC_FIELD,
+      MessageKind.INIT_STATIC_FIELD: const MessageTemplate(
+          MessageKind.INIT_STATIC_FIELD,
           "Cannot initialize static field '#{fieldName}'."),
 
-      MessageKind.NOT_A_FIELD:
-        const MessageTemplate(MessageKind.NOT_A_FIELD,
-          "'#{fieldName}' is not a field."),
+      MessageKind.NOT_A_FIELD: const MessageTemplate(
+          MessageKind.NOT_A_FIELD, "'#{fieldName}' is not a field."),
 
-      MessageKind.CONSTRUCTOR_CALL_EXPECTED:
-        const MessageTemplate(MessageKind.CONSTRUCTOR_CALL_EXPECTED,
+      MessageKind.CONSTRUCTOR_CALL_EXPECTED: const MessageTemplate(
+          MessageKind.CONSTRUCTOR_CALL_EXPECTED,
           "only call to 'this' or 'super' constructor allowed."),
 
-      MessageKind.INVALID_FOR_IN:
-        const MessageTemplate(MessageKind.INVALID_FOR_IN,
-          "Invalid for-in variable declaration."),
+      MessageKind.INVALID_FOR_IN: const MessageTemplate(
+          MessageKind.INVALID_FOR_IN, "Invalid for-in variable declaration."),
 
-      MessageKind.INVALID_INITIALIZER:
-        const MessageTemplate(MessageKind.INVALID_INITIALIZER,
-          "Invalid initializer."),
+      MessageKind.INVALID_INITIALIZER: const MessageTemplate(
+          MessageKind.INVALID_INITIALIZER, "Invalid initializer."),
 
-      MessageKind.FUNCTION_WITH_INITIALIZER:
-        const MessageTemplate(MessageKind.FUNCTION_WITH_INITIALIZER,
+      MessageKind.FUNCTION_WITH_INITIALIZER: const MessageTemplate(
+          MessageKind.FUNCTION_WITH_INITIALIZER,
           "Only constructors can have initializers."),
 
-      MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE:
-        const MessageTemplate(MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE,
+      MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE: const MessageTemplate(
+          MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE,
           "Cyclic constructor redirection."),
 
-      MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY:
-        const MessageTemplate(MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY,
+      MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY: const MessageTemplate(
+          MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY,
           "Redirecting constructor can't have a body."),
 
       MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER:
-        const MessageTemplate(
-          MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER,
-          "Redirecting constructor cannot have other initializers."),
+          const MessageTemplate(
+              MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER,
+              "Redirecting constructor cannot have other initializers."),
 
-      MessageKind.SUPER_INITIALIZER_IN_OBJECT:
-        const MessageTemplate(MessageKind.SUPER_INITIALIZER_IN_OBJECT,
+      MessageKind.SUPER_INITIALIZER_IN_OBJECT: const MessageTemplate(
+          MessageKind.SUPER_INITIALIZER_IN_OBJECT,
           "'Object' cannot have a super initializer."),
 
-      MessageKind.DUPLICATE_SUPER_INITIALIZER:
-        const MessageTemplate(MessageKind.DUPLICATE_SUPER_INITIALIZER,
+      MessageKind.DUPLICATE_SUPER_INITIALIZER: const MessageTemplate(
+          MessageKind.DUPLICATE_SUPER_INITIALIZER,
           "Cannot have more than one super initializer."),
 
-      MessageKind.SUPER_CALL_TO_FACTORY:
-        const MessageTemplate(MessageKind.SUPER_CALL_TO_FACTORY,
+      MessageKind.SUPER_CALL_TO_FACTORY: const MessageTemplate(
+          MessageKind.SUPER_CALL_TO_FACTORY,
           "The target of the superinitializer must be a generative "
           "constructor.",
           howToFix: "Try calling another constructor on the superclass.",
-          examples: const ["""
+          examples: const [
+            """
 class Super {
   factory Super() => null;
 }
 class Class extends Super {}
 main() => new Class();
-""", """
+""",
+            """
 class Super {
   factory Super() => null;
 }
@@ -978,7 +952,8 @@
   Class();
 }
 main() => new Class();
-""", """
+""",
+            """
 class Super {
   factory Super() => null;
 }
@@ -986,7 +961,8 @@
   Class() : super();
 }
 main() => new Class();
-""", """
+""",
+            """
 class Super {
   factory Super.foo() => null;
 }
@@ -994,52 +970,57 @@
   Class() : super.foo();
 }
 main() => new Class();
-"""]),
+"""
+          ]),
 
-      MessageKind.THIS_CALL_TO_FACTORY:
-        const MessageTemplate(MessageKind.THIS_CALL_TO_FACTORY,
+      MessageKind.THIS_CALL_TO_FACTORY: const MessageTemplate(
+          MessageKind.THIS_CALL_TO_FACTORY,
           "The target of the redirection clause must be a generative "
           "constructor",
-        howToFix: "Try redirecting to another constructor.",
-        examples: const ["""
+          howToFix: "Try redirecting to another constructor.",
+          examples: const [
+            """
 class Class {
   factory Class() => null;
   Class.foo() : this();
 }
 main() => new Class.foo();
-""", """
+""",
+            """
 class Class {
   factory Class.foo() => null;
   Class() : this.foo();
 }
 main() => new Class();
-"""]),
+"""
+          ]),
 
-      MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS:
-        const MessageTemplate(MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS,
+      MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS: const MessageTemplate(
+          MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS,
           "Arguments do not match the expected parameters of constructor "
           "'#{constructorName}'."),
 
-      MessageKind.NO_MATCHING_CONSTRUCTOR:
-        const MessageTemplate(MessageKind.NO_MATCHING_CONSTRUCTOR,
+      MessageKind.NO_MATCHING_CONSTRUCTOR: const MessageTemplate(
+          MessageKind.NO_MATCHING_CONSTRUCTOR,
           "'super' call arguments and constructor parameters do not match."),
 
-      MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT:
-        const MessageTemplate(MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT,
-              "Implicit 'super' call arguments and constructor parameters "
-              "do not match."),
+      MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT: const MessageTemplate(
+          MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT,
+          "Implicit 'super' call arguments and constructor parameters "
+          "do not match."),
 
-      MessageKind.CONST_CALLS_NON_CONST:
-        const MessageTemplate(MessageKind.CONST_CALLS_NON_CONST,
+      MessageKind.CONST_CALLS_NON_CONST: const MessageTemplate(
+          MessageKind.CONST_CALLS_NON_CONST,
           "'const' constructor cannot call a non-const constructor."),
 
-      MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT:
-        const MessageTemplate(MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT,
-              "'const' constructor cannot call a non-const constructor. "
-              "This constructor has an implicit call to a "
-              "super non-const constructor.",
-              howToFix: "Try making the super constructor const.",
-              examples: const ["""
+      MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT: const MessageTemplate(
+          MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT,
+          "'const' constructor cannot call a non-const constructor. "
+          "This constructor has an implicit call to a "
+          "super non-const constructor.",
+          howToFix: "Try making the super constructor const.",
+          examples: const [
+            """
 class C {
   C(); // missing const
 }
@@ -1047,123 +1028,119 @@
   final d;
   const D(this.d);
 }
-main() => new D(0);"""]),
+main() => new D(0);"""
+          ]),
 
-      MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS:
-        const MessageTemplate(
+      MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS: const MessageTemplate(
           MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS,
           "Can't declare constructor 'const' on class #{className} "
           "because the class contains non-final instance fields.",
           howToFix: "Try making all fields final.",
-          examples: const ["""
+          examples: const [
+            """
 class C {
   // 'a' must be declared final to allow for the const constructor.
   var a;
   const C(this.a);
 }
 
-main() => new C(0);"""]),
+main() => new C(0);"""
+          ]),
 
       MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD:
-        const MessageTemplate(
-          MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD,
-          "This non-final field prevents using const constructors."),
+          const MessageTemplate(
+              MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD,
+              "This non-final field prevents using const constructors."),
 
       MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR:
-        const MessageTemplate(
-          MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR,
-          "This const constructor is not allowed due to "
-          "non-final fields."),
+          const MessageTemplate(
+              MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR,
+              "This const constructor is not allowed due to "
+              "non-final fields."),
 
-
-      MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED:
-        const MessageTemplate(MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED,
+      MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED: const MessageTemplate(
+          MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED,
           "Initializing formal parameter only allowed in generative "
           "constructor."),
 
-      MessageKind.INVALID_PARAMETER:
-        const MessageTemplate(MessageKind.INVALID_PARAMETER,
-          "Cannot resolve parameter."),
+      MessageKind.INVALID_PARAMETER: const MessageTemplate(
+          MessageKind.INVALID_PARAMETER, "Cannot resolve parameter."),
 
-      MessageKind.NOT_INSTANCE_FIELD:
-        const MessageTemplate(MessageKind.NOT_INSTANCE_FIELD,
+      MessageKind.NOT_INSTANCE_FIELD: const MessageTemplate(
+          MessageKind.NOT_INSTANCE_FIELD,
           "'#{fieldName}' is not an instance field."),
 
-      MessageKind.THIS_PROPERTY:
-        const MessageTemplate(MessageKind.THIS_PROPERTY,
-          "Expected an identifier."),
+      MessageKind.THIS_PROPERTY: const MessageTemplate(
+          MessageKind.THIS_PROPERTY, "Expected an identifier."),
 
-      MessageKind.NO_CATCH_NOR_FINALLY:
-        const MessageTemplate(MessageKind.NO_CATCH_NOR_FINALLY,
-          "Expected 'catch' or 'finally'."),
+      MessageKind.NO_CATCH_NOR_FINALLY: const MessageTemplate(
+          MessageKind.NO_CATCH_NOR_FINALLY, "Expected 'catch' or 'finally'."),
 
-      MessageKind.EMPTY_CATCH_DECLARATION:
-        const MessageTemplate(MessageKind.EMPTY_CATCH_DECLARATION,
+      MessageKind.EMPTY_CATCH_DECLARATION: const MessageTemplate(
+          MessageKind.EMPTY_CATCH_DECLARATION,
           "Expected an identifier in catch declaration."),
 
-      MessageKind.EXTRA_CATCH_DECLARATION:
-        const MessageTemplate(MessageKind.EXTRA_CATCH_DECLARATION,
+      MessageKind.EXTRA_CATCH_DECLARATION: const MessageTemplate(
+          MessageKind.EXTRA_CATCH_DECLARATION,
           "Extra parameter in catch declaration."),
 
-      MessageKind.PARAMETER_WITH_TYPE_IN_CATCH:
-        const MessageTemplate(MessageKind.PARAMETER_WITH_TYPE_IN_CATCH,
+      MessageKind.PARAMETER_WITH_TYPE_IN_CATCH: const MessageTemplate(
+          MessageKind.PARAMETER_WITH_TYPE_IN_CATCH,
           "Cannot use type annotations in catch."),
 
-      MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH:
-        const MessageTemplate(MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH,
+      MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH: const MessageTemplate(
+          MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH,
           "Cannot use modifiers in catch."),
 
-      MessageKind.OPTIONAL_PARAMETER_IN_CATCH:
-        const MessageTemplate(MessageKind.OPTIONAL_PARAMETER_IN_CATCH,
+      MessageKind.OPTIONAL_PARAMETER_IN_CATCH: const MessageTemplate(
+          MessageKind.OPTIONAL_PARAMETER_IN_CATCH,
           "Cannot use optional parameters in catch."),
 
-      MessageKind.UNBOUND_LABEL:
-        const MessageTemplate(MessageKind.UNBOUND_LABEL,
-          "Cannot resolve label '#{labelName}'."),
+      MessageKind.UNBOUND_LABEL: const MessageTemplate(
+          MessageKind.UNBOUND_LABEL, "Cannot resolve label '#{labelName}'."),
 
-      MessageKind.NO_BREAK_TARGET:
-        const MessageTemplate(MessageKind.NO_BREAK_TARGET,
+      MessageKind.NO_BREAK_TARGET: const MessageTemplate(
+          MessageKind.NO_BREAK_TARGET,
           "'break' statement not inside switch or loop."),
 
-      MessageKind.NO_CONTINUE_TARGET:
-        const MessageTemplate(MessageKind.NO_CONTINUE_TARGET,
+      MessageKind.NO_CONTINUE_TARGET: const MessageTemplate(
+          MessageKind.NO_CONTINUE_TARGET,
           "'continue' statement not inside loop."),
 
-      MessageKind.EXISTING_LABEL:
-        const MessageTemplate(MessageKind.EXISTING_LABEL,
+      MessageKind.EXISTING_LABEL: const MessageTemplate(
+          MessageKind.EXISTING_LABEL,
           "Original declaration of duplicate label '#{labelName}'."),
 
-      MessageKind.DUPLICATE_LABEL:
-        const MessageTemplate(MessageKind.DUPLICATE_LABEL,
+      MessageKind.DUPLICATE_LABEL: const MessageTemplate(
+          MessageKind.DUPLICATE_LABEL,
           "Duplicate declaration of label '#{labelName}'."),
 
-      MessageKind.UNUSED_LABEL:
-        const MessageTemplate(MessageKind.UNUSED_LABEL,
-          "Unused label '#{labelName}'."),
+      MessageKind.UNUSED_LABEL: const MessageTemplate(
+          MessageKind.UNUSED_LABEL, "Unused label '#{labelName}'."),
 
-      MessageKind.INVALID_CONTINUE:
-        const MessageTemplate(MessageKind.INVALID_CONTINUE,
+      MessageKind.INVALID_CONTINUE: const MessageTemplate(
+          MessageKind.INVALID_CONTINUE,
           "Target of continue is not a loop or switch case."),
 
-      MessageKind.INVALID_BREAK:
-        const MessageTemplate(MessageKind.INVALID_BREAK,
-          "Target of break is not a statement."),
+      MessageKind.INVALID_BREAK: const MessageTemplate(
+          MessageKind.INVALID_BREAK, "Target of break is not a statement."),
 
-      MessageKind.DUPLICATE_TYPE_VARIABLE_NAME:
-        const MessageTemplate(MessageKind.DUPLICATE_TYPE_VARIABLE_NAME,
+      MessageKind.DUPLICATE_TYPE_VARIABLE_NAME: const MessageTemplate(
+          MessageKind.DUPLICATE_TYPE_VARIABLE_NAME,
           "Type variable '#{typeVariableName}' already declared."),
 
-      MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER:
-        const MessageTemplate(MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER,
-              "Cannot refer to type variable '#{typeVariableName}' "
-              "within a static member."),
+      MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER: const MessageTemplate(
+          MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER,
+          "Cannot refer to type variable '#{typeVariableName}' "
+          "within a static member."),
 
-      MessageKind.TYPE_VARIABLE_IN_CONSTANT:
-        const MessageTemplate(MessageKind.TYPE_VARIABLE_IN_CONSTANT,
+      MessageKind.TYPE_VARIABLE_IN_CONSTANT: const MessageTemplate(
+          MessageKind.TYPE_VARIABLE_IN_CONSTANT,
           "Constant expressions can't refer to type variables.",
           howToFix: "Try removing the type variable or replacing it with a "
-                    "concrete type.",
-          examples: const ["""
+              "concrete type.",
+          examples: const [
+            """
 class C<T> {
   const C();
 
@@ -1172,194 +1149,209 @@
 
 void main() => new C().m(null);
 """
-]),
+          ]),
 
-      MessageKind.INVALID_TYPE_VARIABLE_BOUND:
-        const MessageTemplate(MessageKind.INVALID_TYPE_VARIABLE_BOUND,
+      MessageKind.INVALID_TYPE_VARIABLE_BOUND: const MessageTemplate(
+          MessageKind.INVALID_TYPE_VARIABLE_BOUND,
           "'#{typeArgument}' is not a subtype of bound '#{bound}' for "
           "type variable '#{typeVariable}' of type '#{thisType}'.",
           howToFix: "Try to change or remove the type argument.",
-          examples: const ["""
+          examples: const [
+            """
 class C<T extends num> {}
 
 // 'String' is not a valid instantiation of T with bound num.'.
 main() => new C<String>();
-"""]),
+"""
+          ]),
 
-      MessageKind.INVALID_USE_OF_SUPER:
-        const MessageTemplate(MessageKind.INVALID_USE_OF_SUPER,
-          "'super' not allowed here."),
+      MessageKind.INVALID_USE_OF_SUPER: const MessageTemplate(
+          MessageKind.INVALID_USE_OF_SUPER, "'super' not allowed here."),
 
-      MessageKind.INVALID_CASE_DEFAULT:
-        const MessageTemplate(MessageKind.INVALID_CASE_DEFAULT,
+      MessageKind.INVALID_CASE_DEFAULT: const MessageTemplate(
+          MessageKind.INVALID_CASE_DEFAULT,
           "'default' only allowed on last case of a switch."),
 
-      MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL:
-        const MessageTemplate(MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL,
+      MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL: const MessageTemplate(
+          MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL,
           "'case' expressions do not all have type '#{type}'."),
 
-      MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE:
-        const MessageTemplate(MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE,
+      MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE: const MessageTemplate(
+          MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE,
           "'case' expression of type '#{type}'."),
 
-      MessageKind.SWITCH_CASE_FORBIDDEN:
-        const MessageTemplate(MessageKind.SWITCH_CASE_FORBIDDEN,
+      MessageKind.SWITCH_CASE_FORBIDDEN: const MessageTemplate(
+          MessageKind.SWITCH_CASE_FORBIDDEN,
           "'case' expression may not be of type '#{type}'."),
 
-      MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS:
-        const MessageTemplate(MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
-              "'case' expression type '#{type}' overrides 'operator =='."),
+      MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS: const MessageTemplate(
+          MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
+          "'case' expression type '#{type}' overrides 'operator =='."),
 
-      MessageKind.INVALID_ARGUMENT_AFTER_NAMED:
-        const MessageTemplate(MessageKind.INVALID_ARGUMENT_AFTER_NAMED,
+      MessageKind.INVALID_ARGUMENT_AFTER_NAMED: const MessageTemplate(
+          MessageKind.INVALID_ARGUMENT_AFTER_NAMED,
           "Unnamed argument after named argument."),
 
-      MessageKind.INVALID_AWAIT_FOR_IN:
-        const MessageTemplate(MessageKind.INVALID_AWAIT_FOR_IN,
+      MessageKind.INVALID_AWAIT_FOR_IN: const MessageTemplate(
+          MessageKind.INVALID_AWAIT_FOR_IN,
           "'await' is only supported in methods with an 'async' or "
-              "'async*' body modifier.",
+          "'async*' body modifier.",
           howToFix: "Try adding 'async' or 'async*' to the method body or "
               "removing the 'await' keyword.",
           examples: const [
             """
 main(o) sync* {
   await for (var e in o) {}
-}"""]),
+}"""
+          ]),
 
-      MessageKind.INVALID_AWAIT:
-        const MessageTemplate(MessageKind.INVALID_AWAIT,
+      MessageKind.INVALID_AWAIT: const MessageTemplate(
+          MessageKind.INVALID_AWAIT,
           "'await' is only supported in methods with an 'async' or "
-              "'async*' body modifier.",
+          "'async*' body modifier.",
           howToFix: "Try adding 'async' or 'async*' to the method body.",
           examples: const [
-          """
+            """
 main(o) sync* {
   await null;
-}"""]),
+}"""
+          ]),
 
-      MessageKind.INVALID_YIELD:
-        const MessageTemplate(MessageKind.INVALID_YIELD,
+      MessageKind.INVALID_YIELD: const MessageTemplate(
+          MessageKind.INVALID_YIELD,
           "'yield' is only supported in methods with a 'sync*' or "
-              "'async*' body modifier.",
+          "'async*' body modifier.",
           howToFix: "Try adding 'sync*' or 'async*' to the method body.",
           examples: const [
             """
 main(o) async {
   yield 0;
-}"""]),
+}"""
+          ]),
 
-      MessageKind.NOT_A_COMPILE_TIME_CONSTANT:
-        const MessageTemplate(MessageKind.NOT_A_COMPILE_TIME_CONSTANT,
+      MessageKind.NOT_A_COMPILE_TIME_CONSTANT: const MessageTemplate(
+          MessageKind.NOT_A_COMPILE_TIME_CONSTANT,
           "Not a compile-time constant."),
 
-      MessageKind.DEFERRED_COMPILE_TIME_CONSTANT:
-        const MessageTemplate(MessageKind.DEFERRED_COMPILE_TIME_CONSTANT,
+      MessageKind.DEFERRED_COMPILE_TIME_CONSTANT: const MessageTemplate(
+          MessageKind.DEFERRED_COMPILE_TIME_CONSTANT,
           "A deferred value cannot be used as a compile-time constant."),
 
       MessageKind.DEFERRED_COMPILE_TIME_CONSTANT_CONSTRUCTION:
-        const MessageTemplate(
-          MessageKind.DEFERRED_COMPILE_TIME_CONSTANT_CONSTRUCTION,
-          "A deferred class cannot be used to create a "
-          "compile-time constant."),
+          const MessageTemplate(
+              MessageKind.DEFERRED_COMPILE_TIME_CONSTANT_CONSTRUCTION,
+              "A deferred class cannot be used to create a "
+              "compile-time constant."),
 
-      MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS:
-        const MessageTemplate(MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS,
+      MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS: const MessageTemplate(
+          MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS,
           "Cycle in the compile-time constant computation."),
 
-      MessageKind.CONSTRUCTOR_IS_NOT_CONST:
-        const MessageTemplate(MessageKind.CONSTRUCTOR_IS_NOT_CONST,
+      MessageKind.CONSTRUCTOR_IS_NOT_CONST: const MessageTemplate(
+          MessageKind.CONSTRUCTOR_IS_NOT_CONST,
           "Constructor is not a 'const' constructor."),
 
-      MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS:
-        const MessageTemplate(MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS,
-              "Const-map key type '#{type}' overrides 'operator =='."),
+      MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS: const MessageTemplate(
+          MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS,
+          "Const-map key type '#{type}' overrides 'operator =='."),
 
-      MessageKind.NO_SUCH_LIBRARY_MEMBER:
-        const MessageTemplate(MessageKind.NO_SUCH_LIBRARY_MEMBER,
+      MessageKind.NO_SUCH_LIBRARY_MEMBER: const MessageTemplate(
+          MessageKind.NO_SUCH_LIBRARY_MEMBER,
           "'#{libraryName}' has no member named '#{memberName}'."),
 
-      MessageKind.CANNOT_INSTANTIATE_TYPEDEF:
-        const MessageTemplate(MessageKind.CANNOT_INSTANTIATE_TYPEDEF,
+      MessageKind.CANNOT_INSTANTIATE_TYPEDEF: const MessageTemplate(
+          MessageKind.CANNOT_INSTANTIATE_TYPEDEF,
           "Cannot instantiate typedef '#{typedefName}'."),
 
-      MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT:
-        const MessageTemplate(MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT,
+      MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT: const MessageTemplate(
+          MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT,
           "Non-optional parameters can't have a default value.",
           howToFix:
-            "Try removing the default value or making the parameter optional.",
-          examples: const ["""
+              "Try removing the default value or making the parameter optional.",
+          examples: const [
+            """
 main() {
   foo(a: 1) => print(a);
   foo(2);
-}""", """
+}""",
+            """
 main() {
   foo(a = 1) => print(a);
   foo(2);
-}"""]),
+}"""
+          ]),
 
-      MessageKind.NAMED_PARAMETER_WITH_EQUALS:
-        const MessageTemplate(MessageKind.NAMED_PARAMETER_WITH_EQUALS,
+      MessageKind.NAMED_PARAMETER_WITH_EQUALS: const MessageTemplate(
+          MessageKind.NAMED_PARAMETER_WITH_EQUALS,
           "Named optional parameters can't use '=' to specify a default "
           "value.",
           howToFix: "Try replacing '=' with ':'.",
-          examples: const ["""
+          examples: const [
+            """
 main() {
   foo({a = 1}) => print(a);
   foo(a: 2);
-}"""]),
+}"""
+          ]),
 
-      MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS:
-        const MessageTemplate(MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS,
+      MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS: const MessageTemplate(
+          MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS,
           "Positional optional parameters can't use ':' to specify a "
           "default value.",
           howToFix: "Try replacing ':' with '='.",
-          examples: const ["""
+          examples: const [
+            """
 main() {
   foo([a: 1]) => print(a);
   foo(2);
-}"""]),
+}"""
+          ]),
 
-      MessageKind.TYPEDEF_FORMAL_WITH_DEFAULT:
-        const MessageTemplate(MessageKind.TYPEDEF_FORMAL_WITH_DEFAULT,
+      MessageKind.TYPEDEF_FORMAL_WITH_DEFAULT: const MessageTemplate(
+          MessageKind.TYPEDEF_FORMAL_WITH_DEFAULT,
           "A parameter of a typedef can't specify a default value.",
-          howToFix:
-            "Try removing the default value.",
-          examples: const ["""
+          howToFix: "Try removing the default value.",
+          examples: const [
+            """
 typedef void F([int arg = 0]);
 
 main() {
   F f;
-}""", """
+}""",
+            """
 typedef void F({int arg: 0});
 
 main() {
   F f;
-}"""]),
+}"""
+          ]),
 
-      MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT:
-        const MessageTemplate(MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT,
+      MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT: const MessageTemplate(
+          MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT,
           "A function type parameter can't specify a default value.",
-          howToFix:
-            "Try removing the default value.",
-          examples: const ["""
+          howToFix: "Try removing the default value.",
+          examples: const [
+            """
 foo(f(int i, [a = 1])) {}
 
 main() {
   foo(1, 2);
-}""", """
+}""",
+            """
 foo(f(int i, {a: 1})) {}
 
 main() {
   foo(1, a: 2);
-}"""]),
+}"""
+          ]),
 
-      MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT:
-        const MessageTemplate(MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT,
+      MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT: const MessageTemplate(
+          MessageKind.REDIRECTING_FACTORY_WITH_DEFAULT,
           "A parameter of a redirecting factory constructor can't specify a "
           "default value.",
-          howToFix:
-            "Try removing the default value.",
-          examples: const ["""
+          howToFix: "Try removing the default value.",
+          examples: const [
+            """
 class A {
   A([a]);
   factory A.foo([a = 1]) = A;
@@ -1367,7 +1359,8 @@
 
 main() {
   new A.foo(1);
-}""", """
+}""",
+            """
 class A {
   A({a});
   factory A.foo({a: 1}) = A;
@@ -1375,841 +1368,879 @@
 
 main() {
   new A.foo(a: 1);
-}"""]),
+}"""
+          ]),
 
-      MessageKind.FORMAL_DECLARED_CONST:
-        const MessageTemplate(MessageKind.FORMAL_DECLARED_CONST,
+      MessageKind.FORMAL_DECLARED_CONST: const MessageTemplate(
+          MessageKind.FORMAL_DECLARED_CONST,
           "A formal parameter can't be declared const.",
           howToFix: "Try removing 'const'.",
-          examples: const ["""
+          examples: const [
+            """
 foo(const x) {}
 main() => foo(42);
-""", """
+""",
+            """
 foo({const x}) {}
 main() => foo(42);
-""", """
+""",
+            """
 foo([const x]) {}
 main() => foo(42);
-"""]),
+"""
+          ]),
 
-      MessageKind.FORMAL_DECLARED_STATIC:
-        const MessageTemplate(MessageKind.FORMAL_DECLARED_STATIC,
+      MessageKind.FORMAL_DECLARED_STATIC: const MessageTemplate(
+          MessageKind.FORMAL_DECLARED_STATIC,
           "A formal parameter can't be declared static.",
           howToFix: "Try removing 'static'.",
-          examples: const ["""
+          examples: const [
+            """
 foo(static x) {}
 main() => foo(42);
-""", """
+""",
+            """
 foo({static x}) {}
 main() => foo(42);
-""", """
+""",
+            """
 foo([static x]) {}
 main() => foo(42);
-"""]),
+"""
+          ]),
 
-      MessageKind.FINAL_FUNCTION_TYPE_PARAMETER:
-        const MessageTemplate(MessageKind.FINAL_FUNCTION_TYPE_PARAMETER,
+      MessageKind.FINAL_FUNCTION_TYPE_PARAMETER: const MessageTemplate(
+          MessageKind.FINAL_FUNCTION_TYPE_PARAMETER,
           "A function type parameter can't be declared final.",
           howToFix: "Try removing 'final'.",
-          examples: const ["""
+          examples: const [
+            """
 foo(final int x(int a)) {}
 main() => foo((y) => 42);
-""", """
+""",
+            """
 foo({final int x(int a)}) {}
 main() => foo((y) => 42);
-""", """
+""",
+            """
 foo([final int x(int a)]) {}
 main() => foo((y) => 42);
-"""]),
+"""
+          ]),
 
-      MessageKind.VAR_FUNCTION_TYPE_PARAMETER:
-        const MessageTemplate(MessageKind.VAR_FUNCTION_TYPE_PARAMETER,
+      MessageKind.VAR_FUNCTION_TYPE_PARAMETER: const MessageTemplate(
+          MessageKind.VAR_FUNCTION_TYPE_PARAMETER,
           "A function type parameter can't be declared with 'var'.",
           howToFix: "Try removing 'var'.",
-          examples: const ["""
+          examples: const [
+            """
 foo(var int x(int a)) {}
 main() => foo((y) => 42);
-""", """
+""",
+            """
 foo({var int x(int a)}) {}
 main() => foo((y) => 42);
-""", """
+""",
+            """
 foo([var int x(int a)]) {}
 main() => foo((y) => 42);
-"""]),
+"""
+          ]),
 
-      MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE:
-        const MessageTemplate(MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE,
+      MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE: const MessageTemplate(
+          MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE,
           "Cannot instantiate type variable '#{typeVariableName}'."),
 
-      MessageKind.CYCLIC_TYPE_VARIABLE:
-        const MessageTemplate(MessageKind.CYCLIC_TYPE_VARIABLE,
+      MessageKind.CYCLIC_TYPE_VARIABLE: const MessageTemplate(
+          MessageKind.CYCLIC_TYPE_VARIABLE,
           "Type variable '#{typeVariableName}' is a supertype of itself."),
 
-      MessageKind.CYCLIC_TYPEDEF:
-        const MessageTemplate(MessageKind.CYCLIC_TYPEDEF,
-          "A typedef can't refer to itself.",
+      MessageKind.CYCLIC_TYPEDEF: const MessageTemplate(
+          MessageKind.CYCLIC_TYPEDEF, "A typedef can't refer to itself.",
           howToFix: "Try removing all references to '#{typedefName}' "
-                    "in the definition of '#{typedefName}'.",
-          examples: const ["""
+              "in the definition of '#{typedefName}'.",
+          examples: const [
+            """
 typedef F F(); // The return type 'F' is a self-reference.
-main() { F f = null; }"""]),
+main() { F f = null; }"""
+          ]),
 
-      MessageKind.CYCLIC_TYPEDEF_ONE:
-        const MessageTemplate(MessageKind.CYCLIC_TYPEDEF_ONE,
+      MessageKind.CYCLIC_TYPEDEF_ONE: const MessageTemplate(
+          MessageKind.CYCLIC_TYPEDEF_ONE,
           "A typedef can't refer to itself through another typedef.",
-          howToFix:
-            "Try removing all references to "
-            "'#{otherTypedefName}' in the definition of '#{typedefName}'.",
-          examples: const ["""
+          howToFix: "Try removing all references to "
+              "'#{otherTypedefName}' in the definition of '#{typedefName}'.",
+          examples: const [
+            """
 typedef G F(); // The return type 'G' is a self-reference through typedef 'G'.
 typedef F G(); // The return type 'F' is a self-reference through typedef 'F'.
 main() { F f = null; }""",
-"""
+            """
 typedef G F(); // The return type 'G' creates a self-reference.
 typedef H G(); // The return type 'H' creates a self-reference.
 typedef H(F f); // The argument type 'F' creates a self-reference.
-main() { F f = null; }"""]),
+main() { F f = null; }"""
+          ]),
 
-      MessageKind.CLASS_NAME_EXPECTED:
-        const MessageTemplate(MessageKind.CLASS_NAME_EXPECTED,
-          "Class name expected."),
+      MessageKind.CLASS_NAME_EXPECTED: const MessageTemplate(
+          MessageKind.CLASS_NAME_EXPECTED, "Class name expected."),
 
-      MessageKind.CANNOT_EXTEND:
-        const MessageTemplate(MessageKind.CANNOT_EXTEND,
-          "'#{type}' cannot be extended."),
+      MessageKind.CANNOT_EXTEND: const MessageTemplate(
+          MessageKind.CANNOT_EXTEND, "'#{type}' cannot be extended."),
 
-      MessageKind.CANNOT_IMPLEMENT:
-        const MessageTemplate(MessageKind.CANNOT_IMPLEMENT,
-          "'#{type}' cannot be implemented."),
+      MessageKind.CANNOT_IMPLEMENT: const MessageTemplate(
+          MessageKind.CANNOT_IMPLEMENT, "'#{type}' cannot be implemented."),
 
       // TODO(johnnwinther): Split messages into reasons for malformedness.
-      MessageKind.CANNOT_EXTEND_MALFORMED:
-        const MessageTemplate(MessageKind.CANNOT_EXTEND_MALFORMED,
+      MessageKind.CANNOT_EXTEND_MALFORMED: const MessageTemplate(
+          MessageKind.CANNOT_EXTEND_MALFORMED,
           "Class '#{className}' can't extend the type '#{malformedType}' "
           "because it is malformed.",
           howToFix:
-            "Try correcting the malformed type annotation or removing the "
-            "'extends' clause.",
-          examples: const ["""
+              "Try correcting the malformed type annotation or removing the "
+              "'extends' clause.",
+          examples: const [
+            """
 class A extends Malformed {}
-main() => new A();"""]),
+main() => new A();"""
+          ]),
 
-      MessageKind.CANNOT_IMPLEMENT_MALFORMED:
-        const MessageTemplate(MessageKind.CANNOT_IMPLEMENT_MALFORMED,
+      MessageKind.CANNOT_IMPLEMENT_MALFORMED: const MessageTemplate(
+          MessageKind.CANNOT_IMPLEMENT_MALFORMED,
           "Class '#{className}' can't implement the type '#{malformedType}' "
           "because it is malformed.",
           howToFix:
-            "Try correcting the malformed type annotation or removing the "
-            "type from the 'implements' clause.",
-          examples: const ["""
+              "Try correcting the malformed type annotation or removing the "
+              "type from the 'implements' clause.",
+          examples: const [
+            """
 class A implements Malformed {}
-main() => new A();"""]),
+main() => new A();"""
+          ]),
 
-      MessageKind.CANNOT_MIXIN_MALFORMED:
-        const MessageTemplate(MessageKind.CANNOT_MIXIN_MALFORMED,
+      MessageKind.CANNOT_MIXIN_MALFORMED: const MessageTemplate(
+          MessageKind.CANNOT_MIXIN_MALFORMED,
           "Class '#{className}' can't mixin the type '#{malformedType}' "
           "because it is malformed.",
           howToFix:
-            "Try correcting the malformed type annotation or removing the "
-            "type from the 'with' clause.",
-          examples: const ["""
+              "Try correcting the malformed type annotation or removing the "
+              "type from the 'with' clause.",
+          examples: const [
+            """
 class A extends Object with Malformed {}
-main() => new A();"""]),
+main() => new A();"""
+          ]),
 
-      MessageKind.CANNOT_MIXIN:
-        const MessageTemplate(MessageKind.CANNOT_MIXIN,
-          "The type '#{type}' can't be mixed in.",
+      MessageKind.CANNOT_MIXIN: const MessageTemplate(
+          MessageKind.CANNOT_MIXIN, "The type '#{type}' can't be mixed in.",
           howToFix: "Try removing '#{type}' from the 'with' clause.",
-          examples: const ["""
+          examples: const [
+            """
 class C extends Object with String {}
 
 main() => new C();
-""", """
+""",
+            """
 typedef C = Object with String;
 
 main() => new C();
-"""]),
+"""
+          ]),
 
-      MessageKind.CANNOT_EXTEND_ENUM:
-        const MessageTemplate(MessageKind.CANNOT_EXTEND_ENUM,
+      MessageKind.CANNOT_EXTEND_ENUM: const MessageTemplate(
+          MessageKind.CANNOT_EXTEND_ENUM,
           "Class '#{className}' can't extend the type '#{enumType}' because "
           "it is declared by an enum.",
           howToFix: "Try making '#{enumType}' a normal class or removing the "
-            "'extends' clause.",
-          examples: const ["""
+              "'extends' clause.",
+          examples: const [
+            """
 enum Enum { A }
 class B extends Enum {}
-main() => new B();"""]),
+main() => new B();"""
+          ]),
 
-      MessageKind.CANNOT_IMPLEMENT_ENUM:
-        const MessageTemplate(MessageKind.CANNOT_IMPLEMENT_ENUM,
+      MessageKind.CANNOT_IMPLEMENT_ENUM: const MessageTemplate(
+          MessageKind.CANNOT_IMPLEMENT_ENUM,
           "Class '#{className}' can't implement the type '#{enumType}' "
           "because it is declared by an enum.",
           howToFix: "Try making '#{enumType}' a normal class or removing the "
-            "type from the 'implements' clause.",
-          examples: const ["""
+              "type from the 'implements' clause.",
+          examples: const [
+            """
 enum Enum { A }
 class B implements Enum {}
-main() => new B();"""]),
+main() => new B();"""
+          ]),
 
-      MessageKind.CANNOT_MIXIN_ENUM:
-        const MessageTemplate(MessageKind.CANNOT_MIXIN_ENUM,
+      MessageKind.CANNOT_MIXIN_ENUM: const MessageTemplate(
+          MessageKind.CANNOT_MIXIN_ENUM,
           "Class '#{className}' can't mixin the type '#{enumType}' because it "
           "is declared by an enum.",
           howToFix: "Try making '#{enumType}' a normal class or removing the "
-            "type from the 'with' clause.",
-          examples: const ["""
+              "type from the 'with' clause.",
+          examples: const [
+            """
 enum Enum { A }
 class B extends Object with Enum {}
-main() => new B();"""]),
+main() => new B();"""
+          ]),
 
-      MessageKind.CANNOT_INSTANTIATE_ENUM:
-        const MessageTemplate(MessageKind.CANNOT_INSTANTIATE_ENUM,
+      MessageKind.CANNOT_INSTANTIATE_ENUM: const MessageTemplate(
+          MessageKind.CANNOT_INSTANTIATE_ENUM,
           "Enum type '#{enumName}' cannot be instantiated.",
           howToFix: "Try making '#{enumType}' a normal class or use an enum "
-                    "constant.",
-          examples: const ["""
+              "constant.",
+          examples: const [
+            """
 enum Enum { A }
-main() => new Enum(0);""", """
+main() => new Enum(0);""",
+            """
 enum Enum { A }
-main() => const Enum(0);"""]),
+main() => const Enum(0);"""
+          ]),
 
-      MessageKind.EMPTY_ENUM_DECLARATION:
-        const MessageTemplate(MessageKind.EMPTY_ENUM_DECLARATION,
+      MessageKind.EMPTY_ENUM_DECLARATION: const MessageTemplate(
+          MessageKind.EMPTY_ENUM_DECLARATION,
           "Enum '#{enumName}' must contain at least one value.",
           howToFix: "Try adding an enum constant or making #{enumName} a "
-                    "normal class.",
-          examples: const ["""
+              "normal class.",
+          examples: const [
+            """
 enum Enum {}
-main() { Enum e; }"""]),
+main() { Enum e; }"""
+          ]),
 
-      MessageKind.MISSING_ENUM_CASES:
-        const MessageTemplate(MessageKind.MISSING_ENUM_CASES,
+      MessageKind.MISSING_ENUM_CASES: const MessageTemplate(
+          MessageKind.MISSING_ENUM_CASES,
           "Missing enum constants in switch statement: #{enumValues}.",
           howToFix: "Try adding the missing constants or a default case.",
-          examples: const ["""
+          examples: const [
+            """
 enum Enum { A, B }
 main() {
   switch (Enum.A) {
   case Enum.B: break;
   }
-}""", """
+}""",
+            """
 enum Enum { A, B, C }
 main() {
   switch (Enum.A) {
   case Enum.B: break;
   }
-}"""]),
+}"""
+          ]),
 
-      MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS:
-        const MessageTemplate(MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS,
+      MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS: const MessageTemplate(
+          MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS,
           "'#{type}' can not be both extended and implemented."),
 
-      MessageKind.DUPLICATE_IMPLEMENTS:
-        const MessageTemplate(MessageKind.DUPLICATE_IMPLEMENTS,
+      MessageKind.DUPLICATE_IMPLEMENTS: const MessageTemplate(
+          MessageKind.DUPLICATE_IMPLEMENTS,
           "'#{type}' must not occur more than once "
           "in the implements clause."),
 
-      MessageKind.MULTI_INHERITANCE:
-        const MessageTemplate(MessageKind.MULTI_INHERITANCE,
+      MessageKind.MULTI_INHERITANCE: const MessageTemplate(
+          MessageKind.MULTI_INHERITANCE,
           "Dart2js does not currently support inheritance of the same class "
           "with different type arguments: Both #{firstType} and #{secondType} "
           "are supertypes of #{thisType}."),
 
-      MessageKind.ILLEGAL_SUPER_SEND:
-        const MessageTemplate(MessageKind.ILLEGAL_SUPER_SEND,
+      MessageKind.ILLEGAL_SUPER_SEND: const MessageTemplate(
+          MessageKind.ILLEGAL_SUPER_SEND,
           "'#{name}' cannot be called on super."),
 
-      MessageKind.ADDITIONAL_TYPE_ARGUMENT:
-        const MessageTemplate(MessageKind.ADDITIONAL_TYPE_ARGUMENT,
-          "Additional type argument."),
+      MessageKind.ADDITIONAL_TYPE_ARGUMENT: const MessageTemplate(
+          MessageKind.ADDITIONAL_TYPE_ARGUMENT, "Additional type argument."),
 
-      MessageKind.MISSING_TYPE_ARGUMENT:
-        const MessageTemplate(MessageKind.MISSING_TYPE_ARGUMENT,
-          "Missing type argument."),
+      MessageKind.MISSING_TYPE_ARGUMENT: const MessageTemplate(
+          MessageKind.MISSING_TYPE_ARGUMENT, "Missing type argument."),
 
       // TODO(johnniwinther): Use ADDITIONAL_TYPE_ARGUMENT or
       // MISSING_TYPE_ARGUMENT instead.
-      MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH:
-        const MessageTemplate(MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH,
+      MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH: const MessageTemplate(
+          MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH,
           "Incorrect number of type arguments on '#{type}'."),
 
-      MessageKind.GETTER_MISMATCH:
-        const MessageTemplate(MessageKind.GETTER_MISMATCH,
-          "Setter disagrees on: '#{modifiers}'."),
+      MessageKind.GETTER_MISMATCH: const MessageTemplate(
+          MessageKind.GETTER_MISMATCH, "Setter disagrees on: '#{modifiers}'."),
 
-      MessageKind.SETTER_MISMATCH:
-        const MessageTemplate(MessageKind.SETTER_MISMATCH,
-          "Getter disagrees on: '#{modifiers}'."),
+      MessageKind.SETTER_MISMATCH: const MessageTemplate(
+          MessageKind.SETTER_MISMATCH, "Getter disagrees on: '#{modifiers}'."),
 
-      MessageKind.ILLEGAL_SETTER_FORMALS:
-        const MessageTemplate(MessageKind.ILLEGAL_SETTER_FORMALS,
+      MessageKind.ILLEGAL_SETTER_FORMALS: const MessageTemplate(
+          MessageKind.ILLEGAL_SETTER_FORMALS,
           "A setter must have exactly one argument."),
 
-      MessageKind.NO_STATIC_OVERRIDE:
-        const MessageTemplate(MessageKind.NO_STATIC_OVERRIDE,
+      MessageKind.NO_STATIC_OVERRIDE: const MessageTemplate(
+          MessageKind.NO_STATIC_OVERRIDE,
           "Static member cannot override instance member '#{memberName}' of "
           "'#{className}'."),
 
-      MessageKind.NO_STATIC_OVERRIDE_CONT:
-        const MessageTemplate(MessageKind.NO_STATIC_OVERRIDE_CONT,
+      MessageKind.NO_STATIC_OVERRIDE_CONT: const MessageTemplate(
+          MessageKind.NO_STATIC_OVERRIDE_CONT,
           "This is the instance member that cannot be overridden "
           "by a static member."),
 
-      MessageKind.INSTANCE_STATIC_SAME_NAME:
-        const MessageTemplate(MessageKind.INSTANCE_STATIC_SAME_NAME,
+      MessageKind.INSTANCE_STATIC_SAME_NAME: const MessageTemplate(
+          MessageKind.INSTANCE_STATIC_SAME_NAME,
           "Instance member '#{memberName}' and static member of "
           "superclass '#{className}' have the same name."),
 
-      MessageKind.INSTANCE_STATIC_SAME_NAME_CONT:
-        const MessageTemplate(MessageKind.INSTANCE_STATIC_SAME_NAME_CONT,
+      MessageKind.INSTANCE_STATIC_SAME_NAME_CONT: const MessageTemplate(
+          MessageKind.INSTANCE_STATIC_SAME_NAME_CONT,
           "This is the static member with the same name."),
 
-      MessageKind.INVALID_OVERRIDE_METHOD:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDE_METHOD,
+      MessageKind.INVALID_OVERRIDE_METHOD: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDE_METHOD,
           "The type '#{declaredType}' of method '#{name}' declared in "
           "'#{class}' is not a subtype of the overridden method type "
           "'#{inheritedType}' inherited from '#{inheritedClass}'."),
 
-      MessageKind.INVALID_OVERRIDDEN_METHOD:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDDEN_METHOD,
+      MessageKind.INVALID_OVERRIDDEN_METHOD: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDDEN_METHOD,
           "This is the overridden method '#{name}' declared in class "
           "'#{class}'."),
 
-      MessageKind.INVALID_OVERRIDE_GETTER:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDE_GETTER,
+      MessageKind.INVALID_OVERRIDE_GETTER: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDE_GETTER,
           "The type '#{declaredType}' of getter '#{name}' declared in "
           "'#{class}' is not assignable to the type '#{inheritedType}' of the "
           "overridden getter inherited from '#{inheritedClass}'."),
 
-      MessageKind.INVALID_OVERRIDDEN_GETTER:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDDEN_GETTER,
+      MessageKind.INVALID_OVERRIDDEN_GETTER: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDDEN_GETTER,
           "This is the overridden getter '#{name}' declared in class "
           "'#{class}'."),
 
-      MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD,
+      MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD,
           "The type '#{declaredType}' of field '#{name}' declared in "
           "'#{class}' is not assignable to the type '#{inheritedType}' of the "
           "overridden getter inherited from '#{inheritedClass}'."),
 
-      MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER,
+      MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER,
           "The type '#{declaredType}' of getter '#{name}' declared in "
           "'#{class}' is not assignable to the type '#{inheritedType}' of the "
           "overridden field inherited from '#{inheritedClass}'."),
 
-      MessageKind.INVALID_OVERRIDE_SETTER:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDE_SETTER,
+      MessageKind.INVALID_OVERRIDE_SETTER: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDE_SETTER,
           "The type '#{declaredType}' of setter '#{name}' declared in "
           "'#{class}' is not assignable to the type '#{inheritedType}' of the "
           "overridden setter inherited from '#{inheritedClass}'."),
 
-      MessageKind.INVALID_OVERRIDDEN_SETTER:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDDEN_SETTER,
+      MessageKind.INVALID_OVERRIDDEN_SETTER: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDDEN_SETTER,
           "This is the overridden setter '#{name}' declared in class "
           "'#{class}'."),
 
-      MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD,
+      MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD,
           "The type '#{declaredType}' of field '#{name}' declared in "
           "'#{class}' is not assignable to the type '#{inheritedType}' of the "
           "overridden setter inherited from '#{inheritedClass}'."),
 
-      MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER,
+      MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER,
           "The type '#{declaredType}' of setter '#{name}' declared in "
           "'#{class}' is not assignable to the type '#{inheritedType}' of the "
           "overridden field inherited from '#{inheritedClass}'."),
 
-      MessageKind.INVALID_OVERRIDE_FIELD:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDE_FIELD,
+      MessageKind.INVALID_OVERRIDE_FIELD: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDE_FIELD,
           "The type '#{declaredType}' of field '#{name}' declared in "
           "'#{class}' is not assignable to the type '#{inheritedType}' of the "
           "overridden field inherited from '#{inheritedClass}'."),
 
-      MessageKind.INVALID_OVERRIDDEN_FIELD:
-        const MessageTemplate(MessageKind.INVALID_OVERRIDDEN_FIELD,
+      MessageKind.INVALID_OVERRIDDEN_FIELD: const MessageTemplate(
+          MessageKind.INVALID_OVERRIDDEN_FIELD,
           "This is the overridden field '#{name}' declared in class "
           "'#{class}'."),
 
-      MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD:
-        const MessageTemplate(MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD,
+      MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD: const MessageTemplate(
+          MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD,
           "Method '#{name}' in '#{class}' can't override field from "
           "'#{inheritedClass}'."),
 
-      MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT:
-        const MessageTemplate(
+      MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT: const MessageTemplate(
           MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT,
           "This is the field that cannot be overridden by a method."),
 
-      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD:
-        const MessageTemplate(
+      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD: const MessageTemplate(
           MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD,
           "Field '#{name}' in '#{class}' can't override method from "
           "'#{inheritedClass}'."),
 
-      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT:
-        const MessageTemplate(
+      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT: const MessageTemplate(
           MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT,
           "This is the method that cannot be overridden by a field."),
 
-      MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD:
-        const MessageTemplate(MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD,
-              "Method '#{name}' in '#{class}' can't override getter from "
-              "'#{inheritedClass}'."),
+      MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD: const MessageTemplate(
+          MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD,
+          "Method '#{name}' in '#{class}' can't override getter from "
+          "'#{inheritedClass}'."),
 
       MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT:
-        const MessageTemplate(
-          MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT,
-          "This is the getter that cannot be overridden by a method."),
+          const MessageTemplate(
+              MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT,
+              "This is the getter that cannot be overridden by a method."),
 
-      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER:
-        const MessageTemplate(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER,
+      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER: const MessageTemplate(
+          MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER,
           "Getter '#{name}' in '#{class}' can't override method from "
           "'#{inheritedClass}'."),
 
       MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT:
-        const MessageTemplate(
-          MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT,
-          "This is the method that cannot be overridden by a getter."),
+          const MessageTemplate(
+              MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT,
+              "This is the method that cannot be overridden by a getter."),
 
-      MessageKind.MISSING_FORMALS:
-        const MessageTemplate(MessageKind.MISSING_FORMALS,
-          "Formal parameters are missing."),
+      MessageKind.MISSING_FORMALS: const MessageTemplate(
+          MessageKind.MISSING_FORMALS, "Formal parameters are missing."),
 
-      MessageKind.EXTRA_FORMALS:
-        const MessageTemplate(MessageKind.EXTRA_FORMALS,
-          "Formal parameters are not allowed here."),
+      MessageKind.EXTRA_FORMALS: const MessageTemplate(
+          MessageKind.EXTRA_FORMALS, "Formal parameters are not allowed here."),
 
-      MessageKind.UNARY_OPERATOR_BAD_ARITY:
-        const MessageTemplate(MessageKind.UNARY_OPERATOR_BAD_ARITY,
+      MessageKind.UNARY_OPERATOR_BAD_ARITY: const MessageTemplate(
+          MessageKind.UNARY_OPERATOR_BAD_ARITY,
           "Operator '#{operatorName}' must have no parameters."),
 
-      MessageKind.MINUS_OPERATOR_BAD_ARITY:
-        const MessageTemplate(MessageKind.MINUS_OPERATOR_BAD_ARITY,
+      MessageKind.MINUS_OPERATOR_BAD_ARITY: const MessageTemplate(
+          MessageKind.MINUS_OPERATOR_BAD_ARITY,
           "Operator '-' must have 0 or 1 parameters."),
 
-      MessageKind.BINARY_OPERATOR_BAD_ARITY:
-        const MessageTemplate(MessageKind.BINARY_OPERATOR_BAD_ARITY,
+      MessageKind.BINARY_OPERATOR_BAD_ARITY: const MessageTemplate(
+          MessageKind.BINARY_OPERATOR_BAD_ARITY,
           "Operator '#{operatorName}' must have exactly 1 parameter."),
 
-      MessageKind.TERNARY_OPERATOR_BAD_ARITY:
-        const MessageTemplate(MessageKind.TERNARY_OPERATOR_BAD_ARITY,
+      MessageKind.TERNARY_OPERATOR_BAD_ARITY: const MessageTemplate(
+          MessageKind.TERNARY_OPERATOR_BAD_ARITY,
           "Operator '#{operatorName}' must have exactly 2 parameters."),
 
-      MessageKind.OPERATOR_OPTIONAL_PARAMETERS:
-        const MessageTemplate(MessageKind.OPERATOR_OPTIONAL_PARAMETERS,
+      MessageKind.OPERATOR_OPTIONAL_PARAMETERS: const MessageTemplate(
+          MessageKind.OPERATOR_OPTIONAL_PARAMETERS,
           "Operator '#{operatorName}' cannot have optional parameters."),
 
-      MessageKind.OPERATOR_NAMED_PARAMETERS:
-        const MessageTemplate(MessageKind.OPERATOR_NAMED_PARAMETERS,
+      MessageKind.OPERATOR_NAMED_PARAMETERS: const MessageTemplate(
+          MessageKind.OPERATOR_NAMED_PARAMETERS,
           "Operator '#{operatorName}' cannot have named parameters."),
 
-      MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER:
-        const MessageTemplate(MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER,
+      MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER: const MessageTemplate(
+          MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER,
           "Cannot have final modifier on method."),
 
-      MessageKind.ILLEGAL_CONST_FIELD_MODIFIER:
-        const MessageTemplate(MessageKind.ILLEGAL_CONST_FIELD_MODIFIER,
+      MessageKind.ILLEGAL_CONST_FIELD_MODIFIER: const MessageTemplate(
+          MessageKind.ILLEGAL_CONST_FIELD_MODIFIER,
           "Cannot have const modifier on non-static field.",
           howToFix:
-            "Try adding a static modifier, or removing the const modifier.",
-          examples: const ["""
+              "Try adding a static modifier, or removing the const modifier.",
+          examples: const [
+            """
 class C {
   const int a = 1;
 }
 
-main() => new C();"""]),
+main() => new C();"""
+          ]),
 
-      MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS:
-        const MessageTemplate(MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS,
+      MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS: const MessageTemplate(
+          MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS,
           "Illegal constructor modifiers: '#{modifiers}'."),
 
-      MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS:
-        const MessageTemplate(MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS,
-              "Illegal mixin application modifiers: '#{modifiers}'."),
+      MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS: const MessageTemplate(
+          MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS,
+          "Illegal mixin application modifiers: '#{modifiers}'."),
 
-      MessageKind.ILLEGAL_MIXIN_SUPERCLASS:
-        const MessageTemplate(MessageKind.ILLEGAL_MIXIN_SUPERCLASS,
+      MessageKind.ILLEGAL_MIXIN_SUPERCLASS: const MessageTemplate(
+          MessageKind.ILLEGAL_MIXIN_SUPERCLASS,
           "Class used as mixin must have Object as superclass."),
 
-      MessageKind.ILLEGAL_MIXIN_OBJECT:
-        const MessageTemplate(MessageKind.ILLEGAL_MIXIN_OBJECT,
-          "Cannot use Object as mixin."),
+      MessageKind.ILLEGAL_MIXIN_OBJECT: const MessageTemplate(
+          MessageKind.ILLEGAL_MIXIN_OBJECT, "Cannot use Object as mixin."),
 
-      MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR:
-        const MessageTemplate(MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR,
+      MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR: const MessageTemplate(
+          MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR,
           "Class used as mixin cannot have non-factory constructor."),
 
-      MessageKind.ILLEGAL_MIXIN_CYCLE:
-        const MessageTemplate(MessageKind.ILLEGAL_MIXIN_CYCLE,
+      MessageKind.ILLEGAL_MIXIN_CYCLE: const MessageTemplate(
+          MessageKind.ILLEGAL_MIXIN_CYCLE,
           "Class used as mixin introduces mixin cycle: "
           "'#{mixinName1}' <-> '#{mixinName2}'."),
 
-      MessageKind.ILLEGAL_MIXIN_WITH_SUPER:
-        const MessageTemplate(MessageKind.ILLEGAL_MIXIN_WITH_SUPER,
+      MessageKind.ILLEGAL_MIXIN_WITH_SUPER: const MessageTemplate(
+          MessageKind.ILLEGAL_MIXIN_WITH_SUPER,
           "Cannot use class '#{className}' as a mixin because it uses "
           "'super'."),
 
-      MessageKind.ILLEGAL_MIXIN_SUPER_USE:
-        const MessageTemplate(MessageKind.ILLEGAL_MIXIN_SUPER_USE,
+      MessageKind.ILLEGAL_MIXIN_SUPER_USE: const MessageTemplate(
+          MessageKind.ILLEGAL_MIXIN_SUPER_USE,
           "Use of 'super' in class used as mixin."),
 
-      MessageKind.PARAMETER_NAME_EXPECTED:
-        const MessageTemplate(MessageKind.PARAMETER_NAME_EXPECTED,
-          "parameter name expected."),
+      MessageKind.PARAMETER_NAME_EXPECTED: const MessageTemplate(
+          MessageKind.PARAMETER_NAME_EXPECTED, "parameter name expected."),
 
-      MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER:
-        const MessageTemplate(MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER,
+      MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER: const MessageTemplate(
+          MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER,
           "Cannot resolve setter."),
 
-      MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER:
-        const MessageTemplate(MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER,
+      MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER: const MessageTemplate(
+          MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER,
           "Cannot assign a value to final field '#{name}' "
           "in superclass '#{superclassName}'."),
 
-      MessageKind.ASSIGNING_METHOD:
-        const MessageTemplate(MessageKind.ASSIGNING_METHOD,
-          "Cannot assign a value to a method."),
+      MessageKind.ASSIGNING_METHOD: const MessageTemplate(
+          MessageKind.ASSIGNING_METHOD, "Cannot assign a value to a method."),
 
-      MessageKind.ASSIGNING_METHOD_IN_SUPER:
-        const MessageTemplate(MessageKind.ASSIGNING_METHOD_IN_SUPER,
+      MessageKind.ASSIGNING_METHOD_IN_SUPER: const MessageTemplate(
+          MessageKind.ASSIGNING_METHOD_IN_SUPER,
           "Cannot assign a value to method '#{name}' "
           "in superclass '#{superclassName}'."),
 
-      MessageKind.ASSIGNING_TYPE:
-        const MessageTemplate(MessageKind.ASSIGNING_TYPE,
-          "Cannot assign a value to a type."),
+      MessageKind.ASSIGNING_TYPE: const MessageTemplate(
+          MessageKind.ASSIGNING_TYPE, "Cannot assign a value to a type."),
 
-      MessageKind.IF_NULL_ASSIGNING_TYPE:
-        const MessageTemplate(MessageKind.IF_NULL_ASSIGNING_TYPE,
+      MessageKind.IF_NULL_ASSIGNING_TYPE: const MessageTemplate(
+          MessageKind.IF_NULL_ASSIGNING_TYPE,
           "Cannot assign a value to a type. Note that types are never null, "
           "so this ??= assignment has no effect.",
           howToFix: "Try removing the '??=' assignment.",
-          examples: const [
-              "class A {} main() { print(A ??= 3);}",
-          ]),
+          examples: const ["class A {} main() { print(A ??= 3);}",]),
 
-      MessageKind.VOID_NOT_ALLOWED:
-        const MessageTemplate(MessageKind.VOID_NOT_ALLOWED,
+      MessageKind.VOID_NOT_ALLOWED: const MessageTemplate(
+          MessageKind.VOID_NOT_ALLOWED,
           "Type 'void' can't be used here because it isn't a return type.",
           howToFix:
-            "Try removing 'void' keyword or replace it with 'var', 'final', "
-            "or a type.",
+              "Try removing 'void' keyword or replace it with 'var', 'final', "
+              "or a type.",
           examples: const [
-              "void x; main() {}",
-              "foo(void x) {} main() { foo(null); }",
+            "void x; main() {}",
+            "foo(void x) {} main() { foo(null); }",
           ]),
 
-      MessageKind.NULL_NOT_ALLOWED:
-        const MessageTemplate(MessageKind.NULL_NOT_ALLOWED,
-          "`null` can't be used here."),
+      MessageKind.NULL_NOT_ALLOWED: const MessageTemplate(
+          MessageKind.NULL_NOT_ALLOWED, "`null` can't be used here."),
 
-      MessageKind.BEFORE_TOP_LEVEL:
-        const MessageTemplate(MessageKind.BEFORE_TOP_LEVEL,
+      MessageKind.BEFORE_TOP_LEVEL: const MessageTemplate(
+          MessageKind.BEFORE_TOP_LEVEL,
           "Part header must come before top-level definitions."),
 
-      MessageKind.IMPORT_PART_OF:
-        const MessageTemplate(MessageKind.IMPORT_PART_OF,
+      MessageKind.IMPORT_PART_OF: const MessageTemplate(
+          MessageKind.IMPORT_PART_OF,
           "The imported library must not have a 'part-of' directive.",
           howToFix: "Try removing the 'part-of' directive or replacing the "
-                    "import of the library with a 'part' directive.",
-          examples: const [const {
-'main.dart': """
+              "import of the library with a 'part' directive.",
+          examples: const [
+            const {
+              'main.dart': """
 library library;
 
 import 'part.dart';
 
 main() {}
 """,
-
-'part.dart': """
+              'part.dart': """
 part of library;
-"""}]),
+"""
+            }
+          ]),
 
-      MessageKind.IMPORT_PART_OF_HERE:
-        const MessageTemplate(MessageKind.IMPORT_PART_OF_HERE,
-          "The library is imported here."),
+      MessageKind.IMPORT_PART_OF_HERE: const MessageTemplate(
+          MessageKind.IMPORT_PART_OF_HERE, "The library is imported here."),
 
-      MessageKind.MAIN_HAS_PART_OF:
-        const MessageTemplate(MessageKind.MAIN_HAS_PART_OF,
+      MessageKind.MAIN_HAS_PART_OF: const MessageTemplate(
+          MessageKind.MAIN_HAS_PART_OF,
           "The main application file must not have a 'part-of' directive.",
-          howToFix:  "Try removing the 'part-of' directive or starting "
+          howToFix: "Try removing the 'part-of' directive or starting "
               "compilation from another file.",
-          examples: const [const {
-'main.dart': """
+          examples: const [
+            const {
+              'main.dart': """
 part of library;
 
 main() {}
-"""}]),
+"""
+            }
+          ]),
 
-      MessageKind.LIBRARY_NAME_MISMATCH:
-        const MessageTemplate(MessageKind.LIBRARY_NAME_MISMATCH,
+      MessageKind.LIBRARY_NAME_MISMATCH: const MessageTemplate(
+          MessageKind.LIBRARY_NAME_MISMATCH,
           "Expected part of library name '#{libraryName}'.",
           howToFix: "Try changing the directive to 'part of #{libraryName};'.",
-          examples: const [const {
-'main.dart': """
+          examples: const [
+            const {
+              'main.dart': """
 library lib.foo;
 
 part 'part.dart';
 
 main() {}
 """,
-
-'part.dart': """
+              'part.dart': """
 part of lib.bar;
-"""}]),
+"""
+            }
+          ]),
 
-      MessageKind.MISSING_LIBRARY_NAME:
-        const MessageTemplate(MessageKind.MISSING_LIBRARY_NAME,
+      MessageKind.MISSING_LIBRARY_NAME: const MessageTemplate(
+          MessageKind.MISSING_LIBRARY_NAME,
           "Library has no name. Part directive expected library name "
           "to be '#{libraryName}'.",
           howToFix: "Try adding 'library #{libraryName};' to the library.",
-          examples: const [const {
-'main.dart': """
+          examples: const [
+            const {
+              'main.dart': """
 part 'part.dart';
 
 main() {}
 """,
-
-'part.dart': """
+              'part.dart': """
 part of lib.foo;
-"""}]),
+"""
+            }
+          ]),
 
-      MessageKind.THIS_IS_THE_PART_OF_TAG:
-        const MessageTemplate(MessageKind.THIS_IS_THE_PART_OF_TAG,
+      MessageKind.THIS_IS_THE_PART_OF_TAG: const MessageTemplate(
+          MessageKind.THIS_IS_THE_PART_OF_TAG,
           "This is the part of directive."),
 
-      MessageKind.MISSING_PART_OF_TAG:
-        const MessageTemplate(MessageKind.MISSING_PART_OF_TAG,
+      MessageKind.MISSING_PART_OF_TAG: const MessageTemplate(
+          MessageKind.MISSING_PART_OF_TAG,
           "This file has no part-of tag, but it is being used as a part."),
 
-      MessageKind.DUPLICATED_PART_OF:
-        const MessageTemplate(MessageKind.DUPLICATED_PART_OF,
-          "Duplicated part-of directive."),
+      MessageKind.DUPLICATED_PART_OF: const MessageTemplate(
+          MessageKind.DUPLICATED_PART_OF, "Duplicated part-of directive."),
 
-      MessageKind.DUPLICATED_LIBRARY_NAME:
-        const MessageTemplate(MessageKind.DUPLICATED_LIBRARY_NAME,
+      MessageKind.DUPLICATED_LIBRARY_NAME: const MessageTemplate(
+          MessageKind.DUPLICATED_LIBRARY_NAME,
           "Duplicated library name '#{libraryName}'."),
 
-      MessageKind.DUPLICATED_RESOURCE:
-        const MessageTemplate(MessageKind.DUPLICATED_RESOURCE,
+      MessageKind.DUPLICATED_RESOURCE: const MessageTemplate(
+          MessageKind.DUPLICATED_RESOURCE,
           "The resource '#{resourceUri}' is loaded through both "
           "'#{canonicalUri1}' and '#{canonicalUri2}'."),
 
-      MessageKind.DUPLICATED_LIBRARY_RESOURCE:
-        const MessageTemplate(MessageKind.DUPLICATED_LIBRARY_RESOURCE,
+      MessageKind.DUPLICATED_LIBRARY_RESOURCE: const MessageTemplate(
+          MessageKind.DUPLICATED_LIBRARY_RESOURCE,
           "The library '#{libraryName}' in '#{resourceUri}' is loaded through "
           "both '#{canonicalUri1}' and '#{canonicalUri2}'."),
 
       // This is used as an exception.
-      MessageKind.INVALID_SOURCE_FILE_LOCATION:
-        const MessageTemplate(MessageKind.INVALID_SOURCE_FILE_LOCATION, '''
+      MessageKind.INVALID_SOURCE_FILE_LOCATION: const MessageTemplate(
+          MessageKind.INVALID_SOURCE_FILE_LOCATION,
+          '''
 Invalid offset (#{offset}) in source map.
 File: #{fileName}
 Length: #{length}'''),
 
-      MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC:
-        const MessageTemplate(MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC,
-              "Top-level variable cannot be declared static."),
+      MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC: const MessageTemplate(
+          MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC,
+          "Top-level variable cannot be declared static."),
 
-      MessageKind.REFERENCE_IN_INITIALIZATION:
-        const MessageTemplate(MessageKind.REFERENCE_IN_INITIALIZATION,
-           "Variable '#{variableName}' is referenced during its "
-           "initialization.",
-           howToFix:
-             "If you are trying to reference a shadowed variable, rename "
-             "one of the variables.",
-           examples: const ["""
+      MessageKind.REFERENCE_IN_INITIALIZATION: const MessageTemplate(
+          MessageKind.REFERENCE_IN_INITIALIZATION,
+          "Variable '#{variableName}' is referenced during its "
+          "initialization.",
+          howToFix:
+              "If you are trying to reference a shadowed variable, rename "
+              "one of the variables.",
+          examples: const [
+            """
 foo(t) {
   var t = t;
   return t;
 }
 
 main() => foo(1);
-"""]),
+"""
+          ]),
 
-      MessageKind.CONST_WITHOUT_INITIALIZER:
-        const MessageTemplate(MessageKind.CONST_WITHOUT_INITIALIZER,
+      MessageKind.CONST_WITHOUT_INITIALIZER: const MessageTemplate(
+          MessageKind.CONST_WITHOUT_INITIALIZER,
           "A constant variable must be initialized.",
           howToFix: "Try adding an initializer or "
-                    "removing the 'const' modifier.",
-          examples: const ["""
+              "removing the 'const' modifier.",
+          examples: const [
+            """
 void main() {
   const c; // This constant variable must be initialized.
-}"""]),
+}"""
+          ]),
 
-      MessageKind.FINAL_WITHOUT_INITIALIZER:
-        const MessageTemplate(MessageKind.FINAL_WITHOUT_INITIALIZER,
+      MessageKind.FINAL_WITHOUT_INITIALIZER: const MessageTemplate(
+          MessageKind.FINAL_WITHOUT_INITIALIZER,
           "A final variable must be initialized.",
           howToFix: "Try adding an initializer or "
-                    "removing the 'final' modifier.",
+              "removing the 'final' modifier.",
           examples: const [
-              "class C { static final field; } main() => C.field;"]),
+            "class C { static final field; } main() => C.field;"
+          ]),
 
-      MessageKind.CONST_LOOP_VARIABLE:
-        const MessageTemplate(MessageKind.CONST_LOOP_VARIABLE,
+      MessageKind.CONST_LOOP_VARIABLE: const MessageTemplate(
+          MessageKind.CONST_LOOP_VARIABLE,
           "A loop variable cannot be constant.",
           howToFix: "Try remove the 'const' modifier or "
-                    "replacing it with a 'final' modifier.",
-          examples: const ["""
+              "replacing it with a 'final' modifier.",
+          examples: const [
+            """
 void main() {
   for (const c in []) {}
-}"""]),
+}"""
+          ]),
 
-      MessageKind.MEMBER_USES_CLASS_NAME:
-        const MessageTemplate(MessageKind.MEMBER_USES_CLASS_NAME,
+      MessageKind.MEMBER_USES_CLASS_NAME: const MessageTemplate(
+          MessageKind.MEMBER_USES_CLASS_NAME,
           "Member variable can't have the same name as the class it is "
           "declared in.",
           howToFix: "Try renaming the variable.",
-          examples: const ["""
+          examples: const [
+            """
 class A { var A; }
 main() {
   var a = new A();
   a.A = 1;
 }
-""", """
+""",
+            """
 class A { static var A; }
 main() => A.A = 1;
-"""]),
+"""
+          ]),
 
-      MessageKind.WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT:
-        const MessageTemplate(
+      MessageKind.WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT: const MessageTemplate(
           MessageKind.WRONG_NUMBER_OF_ARGUMENTS_FOR_ASSERT,
           "Wrong number of arguments to assert. Should be 1, but given "
           "#{argumentCount}."),
 
-      MessageKind.ASSERT_IS_GIVEN_NAMED_ARGUMENTS:
-        const MessageTemplate(MessageKind.ASSERT_IS_GIVEN_NAMED_ARGUMENTS,
+      MessageKind.ASSERT_IS_GIVEN_NAMED_ARGUMENTS: const MessageTemplate(
+          MessageKind.ASSERT_IS_GIVEN_NAMED_ARGUMENTS,
           "'assert' takes no named arguments, but given #{argumentCount}."),
 
-      MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY:
-        const MessageTemplate(MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY,
+      MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY: const MessageTemplate(
+          MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY,
           "Factory redirection only allowed in factories."),
 
-      MessageKind.MISSING_FACTORY_KEYWORD:
-        const MessageTemplate(MessageKind.MISSING_FACTORY_KEYWORD,
+      MessageKind.MISSING_FACTORY_KEYWORD: const MessageTemplate(
+          MessageKind.MISSING_FACTORY_KEYWORD,
           "Did you forget a factory keyword here?"),
 
-      MessageKind.NO_SUCH_METHOD_IN_NATIVE:
-        const MessageTemplate(MessageKind.NO_SUCH_METHOD_IN_NATIVE,
+      MessageKind.NO_SUCH_METHOD_IN_NATIVE: const MessageTemplate(
+          MessageKind.NO_SUCH_METHOD_IN_NATIVE,
           "'NoSuchMethod' is not supported for classes that extend native "
           "classes."),
 
-      MessageKind.DEFERRED_LIBRARY_DART_2_DART:
-        const MessageTemplate(MessageKind.DEFERRED_LIBRARY_DART_2_DART,
+      MessageKind.DEFERRED_LIBRARY_DART_2_DART: const MessageTemplate(
+          MessageKind.DEFERRED_LIBRARY_DART_2_DART,
           "Deferred loading is not supported by the dart backend yet. "
           "The output will not be split."),
 
-      MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX:
-        const MessageTemplate(MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX,
+      MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX: const MessageTemplate(
+          MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX,
           "This import is deferred but there is no prefix keyword.",
           howToFix: "Try adding a prefix to the import."),
 
-      MessageKind.DEFERRED_OLD_SYNTAX:
-        const MessageTemplate(MessageKind.DEFERRED_OLD_SYNTAX,
+      MessageKind.DEFERRED_OLD_SYNTAX: const MessageTemplate(
+          MessageKind.DEFERRED_OLD_SYNTAX,
           "The DeferredLibrary annotation is obsolete.",
           howToFix:
-            "Use the \"import 'lib.dart' deferred as prefix\" syntax instead."),
+              "Use the \"import 'lib.dart' deferred as prefix\" syntax instead."),
 
-      MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX:
-        const MessageTemplate(MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX,
+      MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX: const MessageTemplate(
+          MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX,
           "The prefix of this deferred import is not unique.",
           howToFix: "Try changing the import prefix."),
 
-      MessageKind.DEFERRED_TYPE_ANNOTATION:
-        const MessageTemplate(MessageKind.DEFERRED_TYPE_ANNOTATION,
+      MessageKind.DEFERRED_TYPE_ANNOTATION: const MessageTemplate(
+          MessageKind.DEFERRED_TYPE_ANNOTATION,
           "The type #{node} is deferred. "
           "Deferred types are not valid as type annotations.",
-          howToFix:
-            "Try using a non-deferred abstract class as an interface."),
+          howToFix: "Try using a non-deferred abstract class as an interface."),
 
-      MessageKind.ILLEGAL_STATIC:
-        const MessageTemplate(MessageKind.ILLEGAL_STATIC,
+      MessageKind.ILLEGAL_STATIC: const MessageTemplate(
+          MessageKind.ILLEGAL_STATIC,
           "Modifier static is only allowed on functions declared in "
           "a class."),
 
-      MessageKind.STATIC_FUNCTION_BLOAT:
-        const MessageTemplate(MessageKind.STATIC_FUNCTION_BLOAT,
+      MessageKind.STATIC_FUNCTION_BLOAT: const MessageTemplate(
+          MessageKind.STATIC_FUNCTION_BLOAT,
           "Using '#{class}.#{name}' may lead to unnecessarily large "
           "generated code.",
-          howToFix:
-              "Try adding '@MirrorsUsed(...)' as described at "
+          howToFix: "Try adding '@MirrorsUsed(...)' as described at "
               "https://goo.gl/Akrrog."),
 
-      MessageKind.NON_CONST_BLOAT:
-        const MessageTemplate(MessageKind.NON_CONST_BLOAT,
+      MessageKind.NON_CONST_BLOAT: const MessageTemplate(
+          MessageKind.NON_CONST_BLOAT,
           "Using 'new #{name}' may lead to unnecessarily large generated "
           "code.",
           howToFix:
               "Try using 'const #{name}' or adding '@MirrorsUsed(...)' as "
               "described at https://goo.gl/Akrrog."),
 
-      MessageKind.STRING_EXPECTED:
-        const MessageTemplate(MessageKind.STRING_EXPECTED,
+      MessageKind.STRING_EXPECTED: const MessageTemplate(
+          MessageKind.STRING_EXPECTED,
           "Expected a 'String', but got an instance of '#{type}'."),
 
-      MessageKind.PRIVATE_IDENTIFIER:
-        const MessageTemplate(MessageKind.PRIVATE_IDENTIFIER,
+      MessageKind.PRIVATE_IDENTIFIER: const MessageTemplate(
+          MessageKind.PRIVATE_IDENTIFIER,
           "'#{value}' is not a valid Symbol name because it starts with "
           "'_'."),
 
-      MessageKind.PRIVATE_NAMED_PARAMETER:
-        const MessageTemplate(MessageKind.PRIVATE_NAMED_PARAMETER,
+      MessageKind.PRIVATE_NAMED_PARAMETER: const MessageTemplate(
+          MessageKind.PRIVATE_NAMED_PARAMETER,
           "Named optional parameter can't have a library private name.",
           howToFix:
-            "Try removing the '_' or making the parameter positional or "
-            "required.",
+              "Try removing the '_' or making the parameter positional or "
+              "required.",
           examples: const ["""foo({int _p}) {} main() => foo();"""]),
 
-      MessageKind.UNSUPPORTED_LITERAL_SYMBOL:
-        const MessageTemplate(MessageKind.UNSUPPORTED_LITERAL_SYMBOL,
+      MessageKind.UNSUPPORTED_LITERAL_SYMBOL: const MessageTemplate(
+          MessageKind.UNSUPPORTED_LITERAL_SYMBOL,
           "Symbol literal '##{value}' is currently unsupported by dart2js."),
 
-      MessageKind.INVALID_SYMBOL:
-        const MessageTemplate(MessageKind.INVALID_SYMBOL, '''
+      MessageKind.INVALID_SYMBOL: const MessageTemplate(
+          MessageKind.INVALID_SYMBOL,
+          '''
 '#{value}' is not a valid Symbol name because is not:
  * an empty String,
  * a user defined operator,
  * a qualified non-private identifier optionally followed by '=', or
  * a qualified non-private identifier followed by '.' and a user-defined '''
-"operator."),
+          "operator."),
 
-      MessageKind.AMBIGUOUS_REEXPORT:
-        const MessageTemplate(MessageKind.AMBIGUOUS_REEXPORT,
+      MessageKind.AMBIGUOUS_REEXPORT: const MessageTemplate(
+          MessageKind.AMBIGUOUS_REEXPORT,
           "'#{name}' is (re)exported by multiple libraries."),
 
-      MessageKind.AMBIGUOUS_LOCATION:
-        const MessageTemplate(MessageKind.AMBIGUOUS_LOCATION,
-          "'#{name}' is defined here."),
+      MessageKind.AMBIGUOUS_LOCATION: const MessageTemplate(
+          MessageKind.AMBIGUOUS_LOCATION, "'#{name}' is defined here."),
 
-      MessageKind.IMPORTED_HERE:
-        const MessageTemplate(MessageKind.IMPORTED_HERE,
-          "'#{name}' is imported here."),
+      MessageKind.IMPORTED_HERE: const MessageTemplate(
+          MessageKind.IMPORTED_HERE, "'#{name}' is imported here."),
 
-      MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE:
-        const MessageTemplate(MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE,
+      MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE: const MessageTemplate(
+          MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE,
           "The class '#{class}' overrides 'operator==', "
           "but not 'get hashCode'."),
 
-      MessageKind.INTERNAL_LIBRARY_FROM:
-        const MessageTemplate(MessageKind.INTERNAL_LIBRARY_FROM,
+      MessageKind.INTERNAL_LIBRARY_FROM: const MessageTemplate(
+          MessageKind.INTERNAL_LIBRARY_FROM,
           "Internal library '#{resolvedUri}' is not accessible from "
           "'#{importingUri}'."),
 
-      MessageKind.INTERNAL_LIBRARY:
-        const MessageTemplate(MessageKind.INTERNAL_LIBRARY,
+      MessageKind.INTERNAL_LIBRARY: const MessageTemplate(
+          MessageKind.INTERNAL_LIBRARY,
           "Internal library '#{resolvedUri}' is not accessible."),
 
       MessageKind.JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS:
-        const MessageTemplate(
-          MessageKind.JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS,
-          "Js-interop class '#{cls}' cannot extend from the non js-interop "
-          "class '#{superclass}'.",
-          howToFix: "Annotate the superclass with @JS.",
-          examples: const [
-              """
+          const MessageTemplate(
+              MessageKind.JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS,
+              "Js-interop class '#{cls}' cannot extend from the non js-interop "
+              "class '#{superclass}'.",
+              howToFix: "Annotate the superclass with @JS.",
+              examples: const [
+            """
               import 'package:js/js.dart';
 
               class Foo { }
@@ -2220,15 +2251,15 @@
               main() {
                 new Bar();
               }
-              """]),
+              """
+          ]),
 
-      MessageKind.JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER:
-        const MessageTemplate(
+      MessageKind.JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER: const MessageTemplate(
           MessageKind.JS_INTEROP_CLASS_NON_EXTERNAL_MEMBER,
           "Member '#{member}' in js-interop class '#{cls}' is not external.",
           howToFix: "Mark all interop methods external",
           examples: const [
-              """
+            """
               import 'package:js/js.dart';
 
               @JS()
@@ -2239,18 +2270,18 @@
               main() {
                 new Foo().bar();
               }
-              """]),
+              """
+          ]),
 
-      MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS:
-        const MessageTemplate(
+      MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS: const MessageTemplate(
           MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS,
           "Js-interop method '#{method}' has named arguments but is not "
           "a factory constructor of an @anonymous @JS class.",
           howToFix: "Remove all named arguments from js-interop method or "
-                    "in the case of a factory constructor annotate the class "
-                    "as @anonymous.",
+              "in the case of a factory constructor annotate the class "
+              "as @anonymous.",
           examples: const [
-              """
+            """
               import 'package:js/js.dart';
 
               @JS()
@@ -2261,15 +2292,15 @@
               main() {
                 new Foo().bar(4, baz: 5);
               }
-              """]),
-      MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED:
-        const MessageTemplate(
-           MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED,
-           "Js-interop does not support [] and []= operator methods.",
-           howToFix: "Try replacing [] and []= operator methods with normal "
-                     "methods.",
-           examples: const [
-               """
+              """
+          ]),
+      MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED: const MessageTemplate(
+          MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED,
+          "Js-interop does not support [] and []= operator methods.",
+          howToFix: "Try replacing [] and []= operator methods with normal "
+              "methods.",
+          examples: const [
+            """
         import 'package:js/js.dart';
 
         @JS()
@@ -2280,7 +2311,8 @@
         main() {
           new Foo()[0];
         }
-        """, """
+        """,
+            """
         import 'package:js/js.dart';
 
         @JS()
@@ -2291,18 +2323,20 @@
         main() {
           new Foo()[0] = 1;
         }
-        """]),
+        """
+          ]),
 
       MessageKind.JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS:
-        const MessageTemplate(
-          MessageKind.JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS,
-          "Parameter '#{parameter}' in anonymous js-interop class '#{cls}' "
-          "object literal constructor is positional instead of named."
-          ".",
-          howToFix: "Make all arguments in external factory object literal "
-                    "constructors named.",
-          examples: const [
-              """
+          const MessageTemplate(
+              MessageKind
+                  .JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS,
+              "Parameter '#{parameter}' in anonymous js-interop class '#{cls}' "
+              "object literal constructor is positional instead of named."
+              ".",
+              howToFix: "Make all arguments in external factory object literal "
+                  "constructors named.",
+              examples: const [
+            """
               import 'package:js/js.dart';
 
               @anonymous
@@ -2314,63 +2348,65 @@
               main() {
                 new Foo(5, baz: 5);
               }
-              """]),
+              """
+          ]),
 
-      MessageKind.LIBRARY_NOT_FOUND:
-        const MessageTemplate(MessageKind.LIBRARY_NOT_FOUND,
-          "Library not found '#{resolvedUri}'."),
+      MessageKind.LIBRARY_NOT_FOUND: const MessageTemplate(
+          MessageKind.LIBRARY_NOT_FOUND, "Library not found '#{resolvedUri}'."),
 
-      MessageKind.LIBRARY_NOT_SUPPORTED:
-        const MessageTemplate(MessageKind.LIBRARY_NOT_SUPPORTED,
+      MessageKind.LIBRARY_NOT_SUPPORTED: const MessageTemplate(
+          MessageKind.LIBRARY_NOT_SUPPORTED,
           "Library not supported '#{resolvedUri}'.",
           howToFix: "Try removing the dependency or enabling support using "
-                    "the '--categories' option.",
-          examples: const [/*
+              "the '--categories' option.",
+          examples: const [
+            /*
               """
               import 'dart:io';
               main() {}
               """
-          */]),
-          // TODO(johnniwinther): Enable example when message_kind_test.dart
-          // supports library loader callbacks.
+          */
+          ]),
+      // TODO(johnniwinther): Enable example when message_kind_test.dart
+      // supports library loader callbacks.
 
-      MessageKind.UNSUPPORTED_EQ_EQ_EQ:
-        const MessageTemplate(MessageKind.UNSUPPORTED_EQ_EQ_EQ,
+      MessageKind.UNSUPPORTED_EQ_EQ_EQ: const MessageTemplate(
+          MessageKind.UNSUPPORTED_EQ_EQ_EQ,
           "'===' is not an operator. "
           "Did you mean '#{lhs} == #{rhs}' or 'identical(#{lhs}, #{rhs})'?"),
 
-      MessageKind.UNSUPPORTED_BANG_EQ_EQ:
-        const MessageTemplate(MessageKind.UNSUPPORTED_BANG_EQ_EQ,
+      MessageKind.UNSUPPORTED_BANG_EQ_EQ: const MessageTemplate(
+          MessageKind.UNSUPPORTED_BANG_EQ_EQ,
           "'!==' is not an operator. "
           "Did you mean '#{lhs} != #{rhs}' or '!identical(#{lhs}, #{rhs})'?"),
 
-      MessageKind.UNSUPPORTED_PREFIX_PLUS:
-        const MessageTemplate(MessageKind.UNSUPPORTED_PREFIX_PLUS,
-          "'+' is not a prefix operator. ",
+      MessageKind.UNSUPPORTED_PREFIX_PLUS: const MessageTemplate(
+          MessageKind.UNSUPPORTED_PREFIX_PLUS, "'+' is not a prefix operator. ",
           howToFix: "Try removing '+'.",
           examples: const [
-              "main() => +2;  // No longer a valid way to write '2'"
+            "main() => +2;  // No longer a valid way to write '2'"
           ]),
 
-      MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX:
-        const MessageTemplate(MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX,
+      MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX: const MessageTemplate(
+          MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX,
           "'typedef' not allowed here. ",
           howToFix: "Try replacing 'typedef' with 'class'.",
           examples: const [
-              """
+            """
 class B { }
 class M1 {  }
 typedef C = B with M1;  // Need to replace 'typedef' with 'class'.
 main() { new C(); }
-"""]),
+"""
+          ]),
 
-      MessageKind.MIRRORS_EXPECTED_STRING:
-        const MessageTemplate(MessageKind.MIRRORS_EXPECTED_STRING,
+      MessageKind.MIRRORS_EXPECTED_STRING: const MessageTemplate(
+          MessageKind.MIRRORS_EXPECTED_STRING,
           "Can't use '#{name}' here because it's an instance of '#{type}' "
           "and a 'String' value is expected.",
           howToFix: "Did you forget to add quotes?",
           examples: const [
-              """
+            """
 // 'Foo' is a type literal, not a string.
 @MirrorsUsed(symbols: const [Foo])
 import 'dart:mirrors';
@@ -2378,29 +2414,31 @@
 class Foo {}
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE:
-        const MessageTemplate(MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE,
+      MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE: const MessageTemplate(
+          MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE,
           "Can't use '#{name}' here because it's an instance of '#{type}' "
           "and a 'String' or 'Type' value is expected.",
           howToFix: "Did you forget to add quotes?",
           examples: const [
-              """
+            """
 // 'main' is a method, not a class.
 @MirrorsUsed(targets: const [main])
 import 'dart:mirrors';
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST:
-        const MessageTemplate(MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST,
+      MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST: const MessageTemplate(
+          MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST,
           "Can't use '#{name}' here because it's an instance of '#{type}' "
           "and a 'String' or 'List' value is expected.",
           howToFix: "Did you forget to add quotes?",
           examples: const [
-              """
+            """
 // 'Foo' is not a string.
 @MirrorsUsed(symbols: Foo)
 import 'dart:mirrors';
@@ -2408,68 +2446,71 @@
 class Foo {}
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST:
-        const MessageTemplate(MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST,
+      MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST: const MessageTemplate(
+          MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST,
           "Can't use '#{name}' here because it's an instance of '#{type}' "
           "but a 'String', 'Type', or 'List' value is expected.",
           howToFix: "Did you forget to add quotes?",
           examples: const [
-              """
+            """
 // '1' is not a string.
 @MirrorsUsed(targets: 1)
 import 'dart:mirrors';
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY:
-        const MessageTemplate(
+      MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY: const MessageTemplate(
           MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY,
           "Can't find '#{name}' in the current library.",
           // TODO(ahe): The closest identifiers in edit distance would be nice.
           howToFix: "Did you forget to add an import?",
           examples: const [
-              """
+            """
 // 'window' is not in scope because dart:html isn't imported.
 @MirrorsUsed(targets: 'window')
 import 'dart:mirrors';
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY:
-        const MessageTemplate(MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY,
+      MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY: const MessageTemplate(
+          MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY,
           "Can't find '#{name}' in the library '#{library}'.",
           // TODO(ahe): The closest identifiers in edit distance would be nice.
           howToFix: "Is '#{name}' spelled right?",
           examples: const [
-              """
+            """
 // 'List' is misspelled.
 @MirrorsUsed(targets: 'dart.core.Lsit')
 import 'dart:mirrors';
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT:
-        const MessageTemplate(MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT,
+      MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT: const MessageTemplate(
+          MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT,
           "Can't find '#{name}' in '#{element}'.",
           // TODO(ahe): The closest identifiers in edit distance would be nice.
           howToFix: "Is '#{name}' spelled right?",
           examples: const [
-              """
+            """
 // 'addAll' is misspelled.
 @MirrorsUsed(targets: 'dart.core.List.addAl')
 import 'dart:mirrors';
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.INVALID_URI:
-        const MessageTemplate(MessageKind.INVALID_URI,
-          "'#{uri}' is not a valid URI.",
+      MessageKind.INVALID_URI: const MessageTemplate(
+          MessageKind.INVALID_URI, "'#{uri}' is not a valid URI.",
           howToFix: DONT_KNOW_HOW_TO_FIX,
           examples: const [
             """
@@ -2477,17 +2518,17 @@
 import '../../Udyn[mic ils/expect.dart';
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.INVALID_PACKAGE_CONFIG:
-          const MessageTemplate(MessageKind.INVALID_PACKAGE_CONFIG,
-            """Package config file '#{uri}' is invalid.
+      MessageKind.INVALID_PACKAGE_CONFIG: const MessageTemplate(
+          MessageKind.INVALID_PACKAGE_CONFIG,
+          """Package config file '#{uri}' is invalid.
 #{exception}""",
-            howToFix: DONT_KNOW_HOW_TO_FIX
-      ),
+          howToFix: DONT_KNOW_HOW_TO_FIX),
 
-      MessageKind.INVALID_PACKAGE_URI:
-        const MessageTemplate(MessageKind.INVALID_PACKAGE_URI,
+      MessageKind.INVALID_PACKAGE_URI: const MessageTemplate(
+          MessageKind.INVALID_PACKAGE_URI,
           "'#{uri}' is not a valid package URI (#{exception}).",
           howToFix: DONT_KNOW_HOW_TO_FIX,
           examples: const [
@@ -2496,157 +2537,158 @@
 import 'package:foo.dart';
 
 main() {}
-""", """
+""",
+            """
 // can't have 2 slashes
 import 'package://foo/foo.dart';
 
 main() {}
-""", """
+""",
+            """
 // package name must be valid
 import 'package:not\valid/foo.dart';
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.READ_SCRIPT_ERROR:
-        const MessageTemplate(MessageKind.READ_SCRIPT_ERROR,
-          "Can't read '#{uri}' (#{exception}).",
+      MessageKind.READ_SCRIPT_ERROR: const MessageTemplate(
+          MessageKind.READ_SCRIPT_ERROR, "Can't read '#{uri}' (#{exception}).",
           // Don't know how to fix since the underlying error is unknown.
           howToFix: DONT_KNOW_HOW_TO_FIX,
           examples: const [
-              """
+            """
 // 'foo.dart' does not exist.
 import 'foo.dart';
 
 main() {}
-"""]),
+"""
+          ]),
 
       MessageKind.READ_SELF_ERROR:
-        const MessageTemplate(MessageKind.READ_SELF_ERROR,
-          "#{exception}",
-          // Don't know how to fix since the underlying error is unknown.
-          howToFix: DONT_KNOW_HOW_TO_FIX),
+          const MessageTemplate(MessageKind.READ_SELF_ERROR, "#{exception}",
+              // Don't know how to fix since the underlying error is unknown.
+              howToFix: DONT_KNOW_HOW_TO_FIX),
 
-      MessageKind.ABSTRACT_CLASS_INSTANTIATION:
-        const MessageTemplate(MessageKind.ABSTRACT_CLASS_INSTANTIATION,
+      MessageKind.ABSTRACT_CLASS_INSTANTIATION: const MessageTemplate(
+          MessageKind.ABSTRACT_CLASS_INSTANTIATION,
           "Can't instantiate abstract class.",
           howToFix: DONT_KNOW_HOW_TO_FIX,
           examples: const ["abstract class A {} main() { new A(); }"]),
 
-      MessageKind.BODY_EXPECTED:
-        const MessageTemplate(MessageKind.BODY_EXPECTED,
-          "Expected a function body or '=>'.",
+      MessageKind.BODY_EXPECTED: const MessageTemplate(
+          MessageKind.BODY_EXPECTED, "Expected a function body or '=>'.",
           // TODO(ahe): In some scenarios, we can suggest removing the 'static'
           // keyword.
           howToFix: "Try adding {}.",
-          examples: const [
-              "main();"]),
+          examples: const ["main();"]),
 
-      MessageKind.MIRROR_BLOAT:
-        const MessageTemplate(MessageKind.MIRROR_BLOAT,
+      MessageKind.MIRROR_BLOAT: const MessageTemplate(
+          MessageKind.MIRROR_BLOAT,
           "#{count} methods retained for use by dart:mirrors out of #{total}"
           " total methods (#{percentage}%)."),
 
-      MessageKind.MIRROR_IMPORT:
-        const MessageTemplate(MessageKind.MIRROR_IMPORT,
-          "Import of 'dart:mirrors'."),
+      MessageKind.MIRROR_IMPORT: const MessageTemplate(
+          MessageKind.MIRROR_IMPORT, "Import of 'dart:mirrors'."),
 
-      MessageKind.MIRROR_IMPORT_NO_USAGE:
-        const MessageTemplate(MessageKind.MIRROR_IMPORT_NO_USAGE,
+      MessageKind.MIRROR_IMPORT_NO_USAGE: const MessageTemplate(
+          MessageKind.MIRROR_IMPORT_NO_USAGE,
           "This import is not annotated with @MirrorsUsed, which may lead to "
           "unnecessarily large generated code.",
-          howToFix:
-              "Try adding '@MirrorsUsed(...)' as described at "
+          howToFix: "Try adding '@MirrorsUsed(...)' as described at "
               "https://goo.gl/Akrrog."),
 
-      MessageKind.JS_PLACEHOLDER_CAPTURE:
-        const MessageTemplate(
-            MessageKind.JS_PLACEHOLDER_CAPTURE,
-            "JS code must not use '#' placeholders inside functions.",
-            howToFix:
-            "Use an immediately called JavaScript function to capture the"
-            " the placeholder values as JavaScript function parameters."),
+      MessageKind.JS_PLACEHOLDER_CAPTURE: const MessageTemplate(
+          MessageKind.JS_PLACEHOLDER_CAPTURE,
+          "JS code must not use '#' placeholders inside functions.",
+          howToFix:
+              "Use an immediately called JavaScript function to capture the"
+              " the placeholder values as JavaScript function parameters."),
 
       MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT:
-        const MessageTemplate(
-          MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT,
-          "Argument for 'JS_INTERCEPTOR_CONSTANT' must be a type constant."),
+          const MessageTemplate(
+              MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT,
+              "Argument for 'JS_INTERCEPTOR_CONSTANT' must be a type constant."),
 
-      MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD:
-        const MessageTemplate(MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD,
-              "'#{keyword}' is a reserved word and can't be used here.",
-              howToFix: "Try using a different name.",
-              examples: const ["do() {} main() {}"]),
+      MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD: const MessageTemplate(
+          MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD,
+          "'#{keyword}' is a reserved word and can't be used here.",
+          howToFix: "Try using a different name.",
+          examples: const ["do() {} main() {}"]),
 
-      MessageKind. NAMED_FUNCTION_EXPRESSION:
-        const MessageTemplate(MessageKind.NAMED_FUNCTION_EXPRESSION,
+      MessageKind.NAMED_FUNCTION_EXPRESSION: const MessageTemplate(
+          MessageKind.NAMED_FUNCTION_EXPRESSION,
           "Function expression '#{name}' cannot be named.",
           howToFix: "Try removing the name.",
           examples: const ["main() { var f = func() {}; }"]),
 
-      MessageKind.UNUSED_METHOD:
-        const MessageTemplate(MessageKind.UNUSED_METHOD,
-          "The method '#{name}' is never called.",
+      MessageKind.UNUSED_METHOD: const MessageTemplate(
+          MessageKind.UNUSED_METHOD, "The method '#{name}' is never called.",
           howToFix: "Consider deleting it.",
           examples: const ["deadCode() {} main() {}"]),
 
-      MessageKind.UNUSED_CLASS:
-        const MessageTemplate(MessageKind.UNUSED_CLASS,
-          "The class '#{name}' is never used.",
+      MessageKind.UNUSED_CLASS: const MessageTemplate(
+          MessageKind.UNUSED_CLASS, "The class '#{name}' is never used.",
           howToFix: "Consider deleting it.",
           examples: const ["class DeadCode {} main() {}"]),
 
-      MessageKind.UNUSED_TYPEDEF:
-        const MessageTemplate(MessageKind.UNUSED_TYPEDEF,
-          "The typedef '#{name}' is never used.",
+      MessageKind.UNUSED_TYPEDEF: const MessageTemplate(
+          MessageKind.UNUSED_TYPEDEF, "The typedef '#{name}' is never used.",
           howToFix: "Consider deleting it.",
           examples: const ["typedef DeadCode(); main() {}"]),
 
-      MessageKind.ABSTRACT_METHOD:
-        const MessageTemplate(MessageKind.ABSTRACT_METHOD,
+      MessageKind.ABSTRACT_METHOD: const MessageTemplate(
+          MessageKind.ABSTRACT_METHOD,
           "The method '#{name}' has no implementation in "
           "class '#{class}'.",
           howToFix: "Try adding a body to '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 class Class {
   method();
 }
 main() => new Class().method();
-"""]),
+"""
+          ]),
 
-      MessageKind.ABSTRACT_GETTER:
-        const MessageTemplate(MessageKind.ABSTRACT_GETTER,
+      MessageKind.ABSTRACT_GETTER: const MessageTemplate(
+          MessageKind.ABSTRACT_GETTER,
           "The getter '#{name}' has no implementation in "
           "class '#{class}'.",
           howToFix: "Try adding a body to '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 class Class {
   get getter;
 }
 main() => new Class();
-"""]),
+"""
+          ]),
 
-      MessageKind.ABSTRACT_SETTER:
-        const MessageTemplate(MessageKind.ABSTRACT_SETTER,
+      MessageKind.ABSTRACT_SETTER: const MessageTemplate(
+          MessageKind.ABSTRACT_SETTER,
           "The setter '#{name}' has no implementation in "
           "class '#{class}'.",
           howToFix: "Try adding a body to '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 class Class {
   set setter(_);
 }
 main() => new Class();
-"""]),
+"""
+          ]),
 
-      MessageKind.INHERIT_GETTER_AND_METHOD:
-        const MessageTemplate(MessageKind.INHERIT_GETTER_AND_METHOD,
+      MessageKind.INHERIT_GETTER_AND_METHOD: const MessageTemplate(
+          MessageKind.INHERIT_GETTER_AND_METHOD,
           "The class '#{class}' can't inherit both getters and methods "
           "by the named '#{name}'.",
           howToFix: DONT_KNOW_HOW_TO_FIX,
-          examples: const ["""
+          examples: const [
+            """
 class A {
   get member => null;
 }
@@ -2656,49 +2698,54 @@
 class Class implements A, B {
 }
 main() => new Class();
-"""]),
+"""
+          ]),
 
-      MessageKind.INHERITED_METHOD:
-        const MessageTemplate(MessageKind.INHERITED_METHOD,
+      MessageKind.INHERITED_METHOD: const MessageTemplate(
+          MessageKind.INHERITED_METHOD,
           "The inherited method '#{name}' is declared here in class "
           "'#{class}'."),
 
-      MessageKind.INHERITED_EXPLICIT_GETTER:
-        const MessageTemplate(MessageKind.INHERITED_EXPLICIT_GETTER,
+      MessageKind.INHERITED_EXPLICIT_GETTER: const MessageTemplate(
+          MessageKind.INHERITED_EXPLICIT_GETTER,
           "The inherited getter '#{name}' is declared here in class "
           "'#{class}'."),
 
-      MessageKind.INHERITED_IMPLICIT_GETTER:
-        const MessageTemplate(MessageKind.INHERITED_IMPLICIT_GETTER,
+      MessageKind.INHERITED_IMPLICIT_GETTER: const MessageTemplate(
+          MessageKind.INHERITED_IMPLICIT_GETTER,
           "The inherited getter '#{name}' is implicitly declared by this "
           "field in class '#{class}'."),
 
-      MessageKind.UNIMPLEMENTED_METHOD_ONE:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_METHOD_ONE,
+      MessageKind.UNIMPLEMENTED_METHOD_ONE: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_METHOD_ONE,
           "'#{class}' doesn't implement '#{method}' "
           "declared in '#{declarer}'.",
           howToFix: "Try adding an implementation of '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 abstract class I {
   m();
 }
 class C implements I {}
 main() => new C();
-""", """
+""",
+            """
 abstract class I {
   m();
 }
 class C extends I {}
 main() => new C();
-"""]),
+"""
+          ]),
 
-      MessageKind.UNIMPLEMENTED_METHOD:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_METHOD,
+      MessageKind.UNIMPLEMENTED_METHOD: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_METHOD,
           "'#{class}' doesn't implement '#{method}'.",
           howToFix: "Try adding an implementation of '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 abstract class I {
   m();
 }
@@ -2712,7 +2759,8 @@
 main() {
  new C();
 }
-""", """
+""",
+            """
 abstract class I {
   m();
 }
@@ -2726,19 +2774,21 @@
 main() {
  new C();
 }
-"""]),
+"""
+          ]),
 
-      MessageKind.UNIMPLEMENTED_METHOD_CONT:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_METHOD_CONT,
+      MessageKind.UNIMPLEMENTED_METHOD_CONT: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_METHOD_CONT,
           "The method '#{name}' is declared here in class '#{class}'."),
 
-      MessageKind.UNIMPLEMENTED_SETTER_ONE:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_SETTER_ONE,
+      MessageKind.UNIMPLEMENTED_SETTER_ONE: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_SETTER_ONE,
           "'#{class}' doesn't implement the setter '#{name}' "
           "declared in '#{declarer}'.",
           howToFix: "Try adding an implementation of '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 abstract class I {
   set m(_);
 }
@@ -2750,14 +2800,16 @@
  new D().m = 0;
  new C();
 }
-"""]),
+"""
+          ]),
 
-      MessageKind.UNIMPLEMENTED_SETTER:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_SETTER,
+      MessageKind.UNIMPLEMENTED_SETTER: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_SETTER,
           "'#{class}' doesn't implement the setter '#{name}'.",
           howToFix: "Try adding an implementation of '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 abstract class I {
   set m(_);
 }
@@ -2766,7 +2818,8 @@
 }
 class C implements I, J {}
 main() => new C();
-""", """
+""",
+            """
 abstract class I {
   set m(_);
 }
@@ -2775,43 +2828,48 @@
 }
 class C extends I implements J {}
 main() => new C();
-"""]),
+"""
+          ]),
 
-      MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER,
+      MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER,
           "The setter '#{name}' is declared here in class '#{class}'."),
 
-      MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER,
+      MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER,
           "The setter '#{name}' is implicitly declared by this field "
           "in class '#{class}'."),
 
-      MessageKind.UNIMPLEMENTED_GETTER_ONE:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_GETTER_ONE,
+      MessageKind.UNIMPLEMENTED_GETTER_ONE: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_GETTER_ONE,
           "'#{class}' doesn't implement the getter '#{name}' "
           "declared in '#{declarer}'.",
           howToFix: "Try adding an implementation of '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 abstract class I {
   get m;
 }
 class C implements I {}
 main() => new C();
-""", """
+""",
+            """
 abstract class I {
   get m;
 }
 class C extends I {}
 main() => new C();
-"""]),
+"""
+          ]),
 
-      MessageKind.UNIMPLEMENTED_GETTER:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_GETTER,
+      MessageKind.UNIMPLEMENTED_GETTER: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_GETTER,
           "'#{class}' doesn't implement the getter '#{name}'.",
           howToFix: "Try adding an implementation of '#{name}' or declaring "
-                    "'#{class}' to be 'abstract'.",
-          examples: const ["""
+              "'#{class}' to be 'abstract'.",
+          examples: const [
+            """
 abstract class I {
   get m;
 }
@@ -2820,7 +2878,8 @@
 }
 class C implements I, J {}
 main() => new C();
-""", """
+""",
+            """
 abstract class I {
   get m;
 }
@@ -2829,239 +2888,248 @@
 }
 class C extends I implements J {}
 main() => new C();
-"""]),
+"""
+          ]),
 
-      MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER,
+      MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER,
           "The getter '#{name}' is declared here in class '#{class}'."),
 
-      MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER:
-        const MessageTemplate(MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER,
+      MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER: const MessageTemplate(
+          MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER,
           "The getter '#{name}' is implicitly declared by this field "
           "in class '#{class}'."),
 
-      MessageKind.INVALID_METADATA:
-        const MessageTemplate(MessageKind.INVALID_METADATA,
+      MessageKind.INVALID_METADATA: const MessageTemplate(
+          MessageKind.INVALID_METADATA,
           "A metadata annotation must be either a reference to a compile-time "
           "constant variable or a call to a constant constructor.",
           howToFix:
-            "Try using a different constant value or referencing it through a "
-            "constant variable.",
-          examples: const [
-'@Object main() {}',
-'@print main() {}']),
+              "Try using a different constant value or referencing it through a "
+              "constant variable.",
+          examples: const ['@Object main() {}', '@print main() {}']),
 
-      MessageKind.INVALID_METADATA_GENERIC:
-        const MessageTemplate(MessageKind.INVALID_METADATA_GENERIC,
+      MessageKind.INVALID_METADATA_GENERIC: const MessageTemplate(
+          MessageKind.INVALID_METADATA_GENERIC,
           "A metadata annotation using a constant constructor cannot use type "
           "arguments.",
           howToFix:
-            "Try removing the type arguments or referencing the constant "
-            "through a constant variable.",
-          examples: const ['''
+              "Try removing the type arguments or referencing the constant "
+              "through a constant variable.",
+          examples: const [
+            '''
 class C<T> {
   const C();
 }
 @C<int>() main() {}
-''']),
+'''
+          ]),
 
-      MessageKind.EQUAL_MAP_ENTRY_KEY:
-        const MessageTemplate(MessageKind.EQUAL_MAP_ENTRY_KEY,
+      MessageKind.EQUAL_MAP_ENTRY_KEY: const MessageTemplate(
+          MessageKind.EQUAL_MAP_ENTRY_KEY,
           "An entry with the same key already exists in the map.",
           howToFix:
-            "Try removing the previous entry or changing the key in one "
-            "of the entries.",
-          examples: const ["""
+              "Try removing the previous entry or changing the key in one "
+              "of the entries.",
+          examples: const [
+            """
 main() {
   var m = const {'foo': 1, 'foo': 2};
-}"""]),
+}"""
+          ]),
 
-      MessageKind.BAD_INPUT_CHARACTER:
-        const MessageTemplate(MessageKind.BAD_INPUT_CHARACTER,
+      MessageKind.BAD_INPUT_CHARACTER: const MessageTemplate(
+          MessageKind.BAD_INPUT_CHARACTER,
           "Character U+#{characterHex} isn't allowed here.",
           howToFix: DONT_KNOW_HOW_TO_FIX,
-          examples: const ["""
+          examples: const [
+            """
 main() {
   String x = ç;
 }
-"""]),
+"""
+          ]),
 
-      MessageKind.UNTERMINATED_STRING:
-        const MessageTemplate(MessageKind.UNTERMINATED_STRING,
-          "String must end with #{quote}.",
+      MessageKind.UNTERMINATED_STRING: const MessageTemplate(
+          MessageKind.UNTERMINATED_STRING, "String must end with #{quote}.",
           howToFix: DONT_KNOW_HOW_TO_FIX,
-          examples: const ["""
+          examples: const [
+            """
 main() {
   return '
 ;
 }
 """,
-"""
+            """
 main() {
   return \"
 ;
 }
 """,
-"""
+            """
 main() {
   return r'
 ;
 }
 """,
-"""
+            """
 main() {
   return r\"
 ;
 }
 """,
-"""
+            """
 main() => '''
 """,
-"""
+            """
 main() => \"\"\"
 """,
-"""
+            """
 main() => r'''
 """,
-"""
+            """
 main() => r\"\"\"
-"""]),
+"""
+          ]),
 
-      MessageKind.UNMATCHED_TOKEN:
-        const MessageTemplate(MessageKind.UNMATCHED_TOKEN,
+      MessageKind.UNMATCHED_TOKEN: const MessageTemplate(
+          MessageKind.UNMATCHED_TOKEN,
           "Can't find '#{end}' to match '#{begin}'.",
           howToFix: DONT_KNOW_HOW_TO_FIX,
-          examples: const[
-              "main(",
-              "main(){",
-              "main(){]}",
-            ]),
+          examples: const ["main(", "main(){", "main(){]}",]),
 
-      MessageKind.UNTERMINATED_TOKEN:
-        const MessageTemplate(MessageKind.UNTERMINATED_TOKEN,
+      MessageKind.UNTERMINATED_TOKEN: const MessageTemplate(
+          MessageKind.UNTERMINATED_TOKEN,
           // This is a fall-back message that shouldn't happen.
           "Incomplete token."),
 
-      MessageKind.EXPONENT_MISSING:
-        const MessageTemplate(MessageKind.EXPONENT_MISSING,
+      MessageKind.EXPONENT_MISSING: const MessageTemplate(
+          MessageKind.EXPONENT_MISSING,
           "Numbers in exponential notation should always contain an exponent"
           " (an integer number with an optional sign).",
-          howToFix:
-            "Make sure there is an exponent, and remove any whitespace "
-            "before it.",
-          examples: const ["""
+          howToFix: "Make sure there is an exponent, and remove any whitespace "
+              "before it.",
+          examples: const [
+            """
 main() {
   var i = 1e;
 }
-"""]),
+"""
+          ]),
 
-      MessageKind.HEX_DIGIT_EXPECTED:
-        const MessageTemplate(MessageKind.HEX_DIGIT_EXPECTED,
+      MessageKind.HEX_DIGIT_EXPECTED: const MessageTemplate(
+          MessageKind.HEX_DIGIT_EXPECTED,
           "A hex digit (0-9 or A-F) must follow '0x'.",
           howToFix:
-            DONT_KNOW_HOW_TO_FIX, // Seems obvious from the error message.
-          examples: const ["""
+              DONT_KNOW_HOW_TO_FIX, // Seems obvious from the error message.
+          examples: const [
+            """
 main() {
   var i = 0x;
 }
-"""]),
+"""
+          ]),
 
-      MessageKind.MALFORMED_STRING_LITERAL:
-        const MessageTemplate(MessageKind.MALFORMED_STRING_LITERAL,
+      MessageKind.MALFORMED_STRING_LITERAL: const MessageTemplate(
+          MessageKind.MALFORMED_STRING_LITERAL,
           r"A '$' has special meaning inside a string, and must be followed by "
           "an identifier or an expression in curly braces ({}).",
           howToFix: r"Try adding a backslash (\) to escape the '$'.",
-          examples: const [r"""
+          examples: const [
+            r"""
 main() {
   return '$';
 }
 """,
-r'''
+            r'''
 main() {
   return "$";
 }
 ''',
-r"""
+            r"""
 main() {
   return '''$''';
 }
 """,
-r'''
+            r'''
 main() {
   return """$""";
 }
-''']),
+'''
+          ]),
 
-      MessageKind.UNTERMINATED_COMMENT:
-        const MessageTemplate(MessageKind.UNTERMINATED_COMMENT,
+      MessageKind.UNTERMINATED_COMMENT: const MessageTemplate(
+          MessageKind.UNTERMINATED_COMMENT,
           "Comment starting with '/*' must end with '*/'.",
           howToFix: DONT_KNOW_HOW_TO_FIX,
-          examples: const [r"""
+          examples: const [
+            r"""
 main() {
 }
-/*"""]),
+/*"""
+          ]),
 
-      MessageKind.MISSING_TOKEN_BEFORE_THIS:
-        const MessageTemplate(MessageKind.MISSING_TOKEN_BEFORE_THIS,
+      MessageKind.MISSING_TOKEN_BEFORE_THIS: const MessageTemplate(
+          MessageKind.MISSING_TOKEN_BEFORE_THIS,
           "Expected '#{token}' before this.",
           // Consider the second example below: the parser expects a ')' before
           // 'y', but a ',' would also have worked. We don't have enough
           // information to give a good suggestion.
           howToFix: DONT_KNOW_HOW_TO_FIX,
           examples: const [
-              "main() => true ? 1;",
-              "main() => foo(x: 1 y: 2);",
-            ]),
+            "main() => true ? 1;",
+            "main() => foo(x: 1 y: 2);",
+          ]),
 
-      MessageKind.MISSING_TOKEN_AFTER_THIS:
-        const MessageTemplate(MessageKind.MISSING_TOKEN_AFTER_THIS,
+      MessageKind.MISSING_TOKEN_AFTER_THIS: const MessageTemplate(
+          MessageKind.MISSING_TOKEN_AFTER_THIS,
           "Expected '#{token}' after this.",
           // See [MISSING_TOKEN_BEFORE_THIS], we don't have enough information
           // to give a good suggestion.
           howToFix: DONT_KNOW_HOW_TO_FIX,
           examples: const [
-              "main(x) {x}",
-"""
+            "main(x) {x}",
+            """
 class S1 {}
 class S2 {}
 class S3 {}
 class A = S1 with S2, S3
 main() => new A();
 """
-]),
+          ]),
 
-      MessageKind.CONSIDER_ANALYZE_ALL:
-        const MessageTemplate(MessageKind.CONSIDER_ANALYZE_ALL,
+      MessageKind.CONSIDER_ANALYZE_ALL: const MessageTemplate(
+          MessageKind.CONSIDER_ANALYZE_ALL,
           "Could not find '#{main}'.  Nothing will be analyzed.",
           howToFix: "Try using '--analyze-all' to analyze everything.",
           examples: const ['']),
 
-      MessageKind.MISSING_MAIN:
-        const MessageTemplate(MessageKind.MISSING_MAIN,
-          "Could not find '#{main}'.",
+      MessageKind.MISSING_MAIN: const MessageTemplate(
+          MessageKind.MISSING_MAIN, "Could not find '#{main}'.",
           howToFix: "Try adding a method named '#{main}' to your program."
           /* No example, test uses '--analyze-only' which will produce the above
            * message [CONSIDER_ANALYZE_ALL].  An example for a human operator
-           * would be an empty file.*/),
+           * would be an empty file.*/
+          ),
 
-      MessageKind.MAIN_NOT_A_FUNCTION:
-        const MessageTemplate(MessageKind.MAIN_NOT_A_FUNCTION,
-          "'#{main}' is not a function.",
+      MessageKind.MAIN_NOT_A_FUNCTION: const MessageTemplate(
+          MessageKind.MAIN_NOT_A_FUNCTION, "'#{main}' is not a function.",
           howToFix: DONT_KNOW_HOW_TO_FIX, /* Don't state the obvious. */
           examples: const ['var main;']),
 
-      MessageKind.MAIN_WITH_EXTRA_PARAMETER:
-        const MessageTemplate(MessageKind.MAIN_WITH_EXTRA_PARAMETER,
+      MessageKind.MAIN_WITH_EXTRA_PARAMETER: const MessageTemplate(
+          MessageKind.MAIN_WITH_EXTRA_PARAMETER,
           "'#{main}' cannot have more than two parameters.",
           howToFix: DONT_KNOW_HOW_TO_FIX, /* Don't state the obvious. */
           examples: const ['main(a, b, c) {}']),
 
-      MessageKind.COMPILER_CRASHED:
-        const MessageTemplate(MessageKind.COMPILER_CRASHED,
+      MessageKind.COMPILER_CRASHED: const MessageTemplate(
+          MessageKind.COMPILER_CRASHED,
           "The compiler crashed when compiling this element."),
 
-      MessageKind.PLEASE_REPORT_THE_CRASH:
-        const MessageTemplate(MessageKind.PLEASE_REPORT_THE_CRASH, '''
+      MessageKind.PLEASE_REPORT_THE_CRASH: const MessageTemplate(
+          MessageKind.PLEASE_REPORT_THE_CRASH,
+          '''
 The compiler is broken.
 
 When compiling the above element, the compiler crashed. It is not
@@ -3081,105 +3149,104 @@
   below as well as the source location above).
 '''),
 
-      MessageKind.POTENTIAL_MUTATION:
-        const MessageTemplate(MessageKind.POTENTIAL_MUTATION,
+      MessageKind.POTENTIAL_MUTATION: const MessageTemplate(
+          MessageKind.POTENTIAL_MUTATION,
           "Variable '#{variableName}' is not known to be of type "
           "'#{shownType}' because it is potentially mutated in the scope for "
           "promotion."),
 
-      MessageKind.POTENTIAL_MUTATION_HERE:
-        const MessageTemplate(MessageKind.POTENTIAL_MUTATION_HERE,
+      MessageKind.POTENTIAL_MUTATION_HERE: const MessageTemplate(
+          MessageKind.POTENTIAL_MUTATION_HERE,
           "Variable '#{variableName}' is potentially mutated here."),
 
-      MessageKind.POTENTIAL_MUTATION_IN_CLOSURE:
-        const MessageTemplate(MessageKind.POTENTIAL_MUTATION_IN_CLOSURE,
+      MessageKind.POTENTIAL_MUTATION_IN_CLOSURE: const MessageTemplate(
+          MessageKind.POTENTIAL_MUTATION_IN_CLOSURE,
           "Variable '#{variableName}' is not known to be of type "
           "'#{shownType}' because it is potentially mutated within a closure."),
 
-      MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE:
-        const MessageTemplate(MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE,
-              "Variable '#{variableName}' is potentially mutated in a "
-              "closure here."),
+      MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE: const MessageTemplate(
+          MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE,
+          "Variable '#{variableName}' is potentially mutated in a "
+          "closure here."),
 
-      MessageKind.ACCESSED_IN_CLOSURE:
-        const MessageTemplate(MessageKind.ACCESSED_IN_CLOSURE,
+      MessageKind.ACCESSED_IN_CLOSURE: const MessageTemplate(
+          MessageKind.ACCESSED_IN_CLOSURE,
           "Variable '#{variableName}' is not known to be of type "
           "'#{shownType}' because it is accessed by a closure in the scope for "
           "promotion and potentially mutated in the scope of "
           "'#{variableName}'."),
 
-      MessageKind.ACCESSED_IN_CLOSURE_HERE:
-        const MessageTemplate(MessageKind.ACCESSED_IN_CLOSURE_HERE,
+      MessageKind.ACCESSED_IN_CLOSURE_HERE: const MessageTemplate(
+          MessageKind.ACCESSED_IN_CLOSURE_HERE,
           "Variable '#{variableName}' is accessed in a closure here."),
 
-      MessageKind.NOT_MORE_SPECIFIC:
-        const MessageTemplate(MessageKind.NOT_MORE_SPECIFIC,
+      MessageKind.NOT_MORE_SPECIFIC: const MessageTemplate(
+          MessageKind.NOT_MORE_SPECIFIC,
           "Variable '#{variableName}' is not shown to have type "
           "'#{shownType}' because '#{shownType}' is not more specific than the "
           "known type '#{knownType}' of '#{variableName}'."),
 
-      MessageKind.NOT_MORE_SPECIFIC_SUBTYPE:
-        const MessageTemplate(MessageKind.NOT_MORE_SPECIFIC_SUBTYPE,
+      MessageKind.NOT_MORE_SPECIFIC_SUBTYPE: const MessageTemplate(
+          MessageKind.NOT_MORE_SPECIFIC_SUBTYPE,
           "Variable '#{variableName}' is not shown to have type "
           "'#{shownType}' because '#{shownType}' is not a subtype of the "
           "known type '#{knownType}' of '#{variableName}'."),
 
-      MessageKind.NOT_MORE_SPECIFIC_SUGGESTION:
-        const MessageTemplate(MessageKind.NOT_MORE_SPECIFIC_SUGGESTION,
+      MessageKind.NOT_MORE_SPECIFIC_SUGGESTION: const MessageTemplate(
+          MessageKind.NOT_MORE_SPECIFIC_SUGGESTION,
           "Variable '#{variableName}' is not shown to have type "
           "'#{shownType}' because '#{shownType}' is not more specific than the "
           "known type '#{knownType}' of '#{variableName}'.",
           howToFix:
-            "Try replacing '#{shownType}' with '#{shownTypeSuggestion}'."),
+              "Try replacing '#{shownType}' with '#{shownTypeSuggestion}'."),
 
-      MessageKind.NO_COMMON_SUBTYPES:
-        const MessageTemplate(MessageKind.NO_COMMON_SUBTYPES,
-           "Types '#{left}' and '#{right}' have no common subtypes."),
+      MessageKind.NO_COMMON_SUBTYPES: const MessageTemplate(
+          MessageKind.NO_COMMON_SUBTYPES,
+          "Types '#{left}' and '#{right}' have no common subtypes."),
 
-      MessageKind.HIDDEN_WARNINGS_HINTS:
-        const MessageTemplate(MessageKind.HIDDEN_WARNINGS_HINTS,
+      MessageKind.HIDDEN_WARNINGS_HINTS: const MessageTemplate(
+          MessageKind.HIDDEN_WARNINGS_HINTS,
           "#{warnings} warning(s) and #{hints} hint(s) suppressed in #{uri}."),
 
-      MessageKind.HIDDEN_WARNINGS:
-        const MessageTemplate(MessageKind.HIDDEN_WARNINGS,
+      MessageKind.HIDDEN_WARNINGS: const MessageTemplate(
+          MessageKind.HIDDEN_WARNINGS,
           "#{warnings} warning(s) suppressed in #{uri}."),
 
-      MessageKind.HIDDEN_HINTS:
-        const MessageTemplate(MessageKind.HIDDEN_HINTS,
-          "#{hints} hint(s) suppressed in #{uri}."),
+      MessageKind.HIDDEN_HINTS: const MessageTemplate(
+          MessageKind.HIDDEN_HINTS, "#{hints} hint(s) suppressed in #{uri}."),
 
-      MessageKind.PREAMBLE:
-        const MessageTemplate(MessageKind.PREAMBLE,
-        "When run on the command-line, the compiled output might"
-        " require a preamble file located in:\n"
-        "  <sdk>/lib/_internal/js_runtime/lib/preambles."),
+      MessageKind.PREAMBLE: const MessageTemplate(
+          MessageKind.PREAMBLE,
+          "When run on the command-line, the compiled output might"
+          " require a preamble file located in:\n"
+          "  <sdk>/lib/_internal/js_runtime/lib/preambles."),
 
-      MessageKind.INVALID_SYNC_MODIFIER:
-        const MessageTemplate(MessageKind.INVALID_SYNC_MODIFIER,
-          "Invalid modifier 'sync'.",
+      MessageKind.INVALID_SYNC_MODIFIER: const MessageTemplate(
+          MessageKind.INVALID_SYNC_MODIFIER, "Invalid modifier 'sync'.",
           howToFix: "Try replacing 'sync' with 'sync*'.",
-          examples: const [
-            "main() sync {}"
-          ]),
+          examples: const ["main() sync {}"]),
 
-      MessageKind.INVALID_AWAIT_FOR:
-        const MessageTemplate(MessageKind.INVALID_AWAIT_FOR,
+      MessageKind.INVALID_AWAIT_FOR: const MessageTemplate(
+          MessageKind.INVALID_AWAIT_FOR,
           "'await' is only supported on for-in loops.",
           howToFix: "Try rewriting the loop as a for-in loop or removing the "
-                    "'await' keyword.",
-          examples: const ["""
+              "'await' keyword.",
+          examples: const [
+            """
 main() async* {
   await for (int i = 0; i < 10; i++) {}
 }
-"""]),
+"""
+          ]),
 
-      MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD:
-        const MessageTemplate(MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD,
+      MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD: const MessageTemplate(
+          MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD,
           "The modifier '#{modifier}' is not allowed on an abstract method.",
           options: const ['--enable-async'],
           howToFix: "Try removing the '#{modifier}' modifier or adding a "
-                    "body to the method.",
-          examples: const ["""
+              "body to the method.",
+          examples: const [
+            """
 abstract class A {
   method() async;
 }
@@ -3190,300 +3257,316 @@
   A a = new B();
   a.method();
 }
-"""]),
+"""
+          ]),
 
-      MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR:
-        const MessageTemplate(MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR,
-              "The modifier '#{modifier}' is not allowed on constructors.",
-              options: const ['--enable-async'],
-              howToFix: "Try removing the '#{modifier}' modifier.",
-              examples: const ["""
+      MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR: const MessageTemplate(
+          MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR,
+          "The modifier '#{modifier}' is not allowed on constructors.",
+          options: const ['--enable-async'],
+          howToFix: "Try removing the '#{modifier}' modifier.",
+          examples: const [
+            """
 class A {
   A() async;
 }
 main() => new A();""",
-
-"""
+            """
 class A {
   A();
   factory A.a() async* {}
 }
-main() => new A.a();"""]),
+main() => new A.a();"""
+          ]),
 
-      MessageKind.ASYNC_MODIFIER_ON_SETTER:
-        const MessageTemplate(MessageKind.ASYNC_MODIFIER_ON_SETTER,
-              "The modifier '#{modifier}' is not allowed on setters.",
-              options: const ['--enable-async'],
-              howToFix: "Try removing the '#{modifier}' modifier.",
-              examples: const ["""
+      MessageKind.ASYNC_MODIFIER_ON_SETTER: const MessageTemplate(
+          MessageKind.ASYNC_MODIFIER_ON_SETTER,
+          "The modifier '#{modifier}' is not allowed on setters.",
+          options: const ['--enable-async'],
+          howToFix: "Try removing the '#{modifier}' modifier.",
+          examples: const [
+            """
 class A {
   set foo(v) async {}
 }
-main() => new A().foo = 0;"""]),
+main() => new A().foo = 0;"""
+          ]),
 
-      MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY:
-        const MessageTemplate(MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY,
+      MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY: const MessageTemplate(
+          MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY,
           "The modifier '#{modifier}' is not allowed on methods implemented "
           "using '=>'.",
           options: const ['--enable-async'],
           howToFix: "Try removing the '#{modifier}' modifier or implementing "
-                    "the method body using a block: '{ ... }'.",
+              "the method body using a block: '{ ... }'.",
           examples: const ["main() sync* => null;", "main() async* => null;"]),
 
       // TODO(johnniwinther): Check for 'async' as identifier.
-      MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER:
-        const MessageTemplate(MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER,
+      MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER: const MessageTemplate(
+          MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER,
           "'#{keyword}' cannot be used as an identifier in a function body "
           "marked with '#{modifier}'.",
           options: const ['--enable-async'],
           howToFix: "Try removing the '#{modifier}' modifier or renaming the "
-                    "identifier.",
-          examples: const ["""
+              "identifier.",
+          examples: const [
+            """
 main() async {
  var await;
 }""",
-"""
+            """
 main() async* {
  var yield;
 }""",
-"""
+            """
 main() sync* {
  var yield;
-}"""]),
+}"""
+          ]),
 
-      MessageKind.NATIVE_NOT_SUPPORTED:
-        const MessageTemplate(MessageKind.NATIVE_NOT_SUPPORTED,
+      MessageKind.NATIVE_NOT_SUPPORTED: const MessageTemplate(
+          MessageKind.NATIVE_NOT_SUPPORTED,
           "'native' modifier is not supported.",
           howToFix: "Try removing the 'native' implementation or analyzing the "
-                    "code with the --allow-native-extensions option.",
-          examples: const ["""
+              "code with the --allow-native-extensions option.",
+          examples: const [
+            """
 main() native "Main";
-"""]),
+"""
+          ]),
 
-      MessageKind.DART_EXT_NOT_SUPPORTED:
-        const MessageTemplate(MessageKind.DART_EXT_NOT_SUPPORTED,
+      MessageKind.DART_EXT_NOT_SUPPORTED: const MessageTemplate(
+          MessageKind.DART_EXT_NOT_SUPPORTED,
           "The 'dart-ext' scheme is not supported.",
           howToFix: "Try analyzing the code with the --allow-native-extensions "
-                    "option.",
-          examples: const ["""
+              "option.",
+          examples: const [
+            """
 import 'dart-ext:main';
 
 main() {}
-"""]),
+"""
+          ]),
 
-      MessageKind.LIBRARY_TAG_MUST_BE_FIRST:
-        const MessageTemplate(MessageKind.LIBRARY_TAG_MUST_BE_FIRST,
+      MessageKind.LIBRARY_TAG_MUST_BE_FIRST: const MessageTemplate(
+          MessageKind.LIBRARY_TAG_MUST_BE_FIRST,
           "The library declaration should come before other declarations.",
           howToFix: "Try moving the declaration to the top of the file.",
           examples: const [
-"""
+            """
 import 'dart:core';
 library foo;
 main() {}
 """,
-      ]),
+          ]),
 
-      MessageKind.ONLY_ONE_LIBRARY_TAG:
-        const MessageTemplate(MessageKind.ONLY_ONE_LIBRARY_TAG,
+      MessageKind.ONLY_ONE_LIBRARY_TAG: const MessageTemplate(
+          MessageKind.ONLY_ONE_LIBRARY_TAG,
           "There can only be one library declaration.",
           howToFix: "Try removing all other library declarations.",
           examples: const [
-"""
+            """
 library foo;
 library bar;
 main() {}
 """,
-"""
+            """
 library foo;
 import 'dart:core';
 library bar;
 main() {}
 """,
-      ]),
+          ]),
 
-      MessageKind.IMPORT_BEFORE_PARTS:
-        const MessageTemplate(MessageKind.IMPORT_BEFORE_PARTS,
+      MessageKind.IMPORT_BEFORE_PARTS: const MessageTemplate(
+          MessageKind.IMPORT_BEFORE_PARTS,
           "Import declarations should come before parts.",
           howToFix: "Try moving this import further up in the file.",
           examples: const [
-              const <String, String>{
-                'main.dart': """
+            const <String, String>{
+              'main.dart': """
 library test.main;
 part 'part.dart';
 import 'dart:core';
 main() {}
 """,
-                'part.dart': """
+              'part.dart': """
 part of test.main;
 """,
-          }]),
+            }
+          ]),
 
-      MessageKind.EXPORT_BEFORE_PARTS:
-        const MessageTemplate(MessageKind.EXPORT_BEFORE_PARTS,
+      MessageKind.EXPORT_BEFORE_PARTS: const MessageTemplate(
+          MessageKind.EXPORT_BEFORE_PARTS,
           "Export declarations should come before parts.",
           howToFix: "Try moving this export further up in the file.",
           examples: const [
-              const <String, String>{
-                'main.dart': """
+            const <String, String>{
+              'main.dart': """
 library test.main;
 part 'part.dart';
 export 'dart:core';
 main() {}
 """,
-               'part.dart': """
+              'part.dart': """
 part of test.main;
 """,
-          }]),
+            }
+          ]),
 
-  //////////////////////////////////////////////////////////////////////////////
-  // Patch errors start.
-  //////////////////////////////////////////////////////////////////////////////
+      //////////////////////////////////////////////////////////////////////////////
+      // Patch errors start.
+      //////////////////////////////////////////////////////////////////////////////
 
-      MessageKind.PATCH_RETURN_TYPE_MISMATCH:
-        const MessageTemplate(MessageKind.PATCH_RETURN_TYPE_MISMATCH,
+      MessageKind.PATCH_RETURN_TYPE_MISMATCH: const MessageTemplate(
+          MessageKind.PATCH_RETURN_TYPE_MISMATCH,
           "Patch return type '#{patchReturnType}' does not match "
           "'#{originReturnType}' on origin method '#{methodName}'."),
 
-      MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH:
-        const MessageTemplate(
+      MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH: const MessageTemplate(
           MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH,
           "Required parameter count of patch method "
           "(#{patchParameterCount}) does not match parameter count on origin "
           "method '#{methodName}' (#{originParameterCount})."),
 
-      MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH:
-        const MessageTemplate(
+      MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH: const MessageTemplate(
           MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH,
           "Optional parameter count of patch method "
           "(#{patchParameterCount}) does not match parameter count on origin "
           "method '#{methodName}' (#{originParameterCount})."),
 
       MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH:
-        const MessageTemplate(
-          MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH,
-          "Optional parameters of origin and patch method "
-          "'#{methodName}' must both be either named or positional."),
+          const MessageTemplate(
+              MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH,
+              "Optional parameters of origin and patch method "
+              "'#{methodName}' must both be either named or positional."),
 
-      MessageKind.PATCH_PARAMETER_MISMATCH:
-        const MessageTemplate(MessageKind.PATCH_PARAMETER_MISMATCH,
+      MessageKind.PATCH_PARAMETER_MISMATCH: const MessageTemplate(
+          MessageKind.PATCH_PARAMETER_MISMATCH,
           "Patch method parameter '#{patchParameter}' does not match "
           "'#{originParameter}' on origin method '#{methodName}'."),
 
-      MessageKind.PATCH_PARAMETER_TYPE_MISMATCH:
-        const MessageTemplate(MessageKind.PATCH_PARAMETER_TYPE_MISMATCH,
+      MessageKind.PATCH_PARAMETER_TYPE_MISMATCH: const MessageTemplate(
+          MessageKind.PATCH_PARAMETER_TYPE_MISMATCH,
           "Patch method parameter '#{parameterName}' type "
           "'#{patchParameterType}' does not match '#{originParameterType}' on "
           "origin method '#{methodName}'."),
 
-      MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION:
-        const MessageTemplate(MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION,
+      MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION: const MessageTemplate(
+          MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION,
           "External method without an implementation."),
 
-      MessageKind.PATCH_POINT_TO_FUNCTION:
-        const MessageTemplate(MessageKind.PATCH_POINT_TO_FUNCTION,
+      MessageKind.PATCH_POINT_TO_FUNCTION: const MessageTemplate(
+          MessageKind.PATCH_POINT_TO_FUNCTION,
           "This is the function patch '#{functionName}'."),
 
-      MessageKind.PATCH_POINT_TO_CLASS:
-        const MessageTemplate(MessageKind.PATCH_POINT_TO_CLASS,
+      MessageKind.PATCH_POINT_TO_CLASS: const MessageTemplate(
+          MessageKind.PATCH_POINT_TO_CLASS,
           "This is the class patch '#{className}'."),
 
-      MessageKind.PATCH_POINT_TO_GETTER:
-        const MessageTemplate(MessageKind.PATCH_POINT_TO_GETTER,
+      MessageKind.PATCH_POINT_TO_GETTER: const MessageTemplate(
+          MessageKind.PATCH_POINT_TO_GETTER,
           "This is the getter patch '#{getterName}'."),
 
-      MessageKind.PATCH_POINT_TO_SETTER:
-        const MessageTemplate(MessageKind.PATCH_POINT_TO_SETTER,
+      MessageKind.PATCH_POINT_TO_SETTER: const MessageTemplate(
+          MessageKind.PATCH_POINT_TO_SETTER,
           "This is the setter patch '#{setterName}'."),
 
-      MessageKind.PATCH_POINT_TO_CONSTRUCTOR:
-        const MessageTemplate(MessageKind.PATCH_POINT_TO_CONSTRUCTOR,
+      MessageKind.PATCH_POINT_TO_CONSTRUCTOR: const MessageTemplate(
+          MessageKind.PATCH_POINT_TO_CONSTRUCTOR,
           "This is the constructor patch '#{constructorName}'."),
 
-      MessageKind.PATCH_POINT_TO_PARAMETER:
-        const MessageTemplate(MessageKind.PATCH_POINT_TO_PARAMETER,
+      MessageKind.PATCH_POINT_TO_PARAMETER: const MessageTemplate(
+          MessageKind.PATCH_POINT_TO_PARAMETER,
           "This is the patch parameter '#{parameterName}'."),
 
-      MessageKind.PATCH_NON_EXISTING:
-        const MessageTemplate(MessageKind.PATCH_NON_EXISTING,
+      MessageKind.PATCH_NON_EXISTING: const MessageTemplate(
+          MessageKind.PATCH_NON_EXISTING,
           "Origin does not exist for patch '#{name}'."),
 
       // TODO(ahe): Eventually, this error should be removed as it will be
       // handled by the regular parser.
-      MessageKind.PATCH_NONPATCHABLE:
-        const MessageTemplate(MessageKind.PATCH_NONPATCHABLE,
+      MessageKind.PATCH_NONPATCHABLE: const MessageTemplate(
+          MessageKind.PATCH_NONPATCHABLE,
           "Only classes and functions can be patched."),
 
-      MessageKind.PATCH_NON_EXTERNAL:
-        const MessageTemplate(MessageKind.PATCH_NON_EXTERNAL,
+      MessageKind.PATCH_NON_EXTERNAL: const MessageTemplate(
+          MessageKind.PATCH_NON_EXTERNAL,
           "Only external functions can be patched."),
 
-      MessageKind.PATCH_NON_CLASS:
-        const MessageTemplate(MessageKind.PATCH_NON_CLASS,
+      MessageKind.PATCH_NON_CLASS: const MessageTemplate(
+          MessageKind.PATCH_NON_CLASS,
           "Patching non-class with class patch '#{className}'."),
 
-      MessageKind.PATCH_NON_GETTER:
-        const MessageTemplate(MessageKind.PATCH_NON_GETTER,
+      MessageKind.PATCH_NON_GETTER: const MessageTemplate(
+          MessageKind.PATCH_NON_GETTER,
           "Cannot patch non-getter '#{name}' with getter patch."),
 
-      MessageKind.PATCH_NO_GETTER:
-        const MessageTemplate(MessageKind.PATCH_NO_GETTER,
+      MessageKind.PATCH_NO_GETTER: const MessageTemplate(
+          MessageKind.PATCH_NO_GETTER,
           "No getter found for getter patch '#{getterName}'."),
 
-      MessageKind.PATCH_NON_SETTER:
-        const MessageTemplate(MessageKind.PATCH_NON_SETTER,
+      MessageKind.PATCH_NON_SETTER: const MessageTemplate(
+          MessageKind.PATCH_NON_SETTER,
           "Cannot patch non-setter '#{name}' with setter patch."),
 
-      MessageKind.PATCH_NO_SETTER:
-        const MessageTemplate(MessageKind.PATCH_NO_SETTER,
+      MessageKind.PATCH_NO_SETTER: const MessageTemplate(
+          MessageKind.PATCH_NO_SETTER,
           "No setter found for setter patch '#{setterName}'."),
 
-      MessageKind.PATCH_NON_CONSTRUCTOR:
-        const MessageTemplate(MessageKind.PATCH_NON_CONSTRUCTOR,
+      MessageKind.PATCH_NON_CONSTRUCTOR: const MessageTemplate(
+          MessageKind.PATCH_NON_CONSTRUCTOR,
           "Cannot patch non-constructor with constructor patch "
           "'#{constructorName}'."),
 
-      MessageKind.PATCH_NON_FUNCTION:
-        const MessageTemplate(MessageKind.PATCH_NON_FUNCTION,
+      MessageKind.PATCH_NON_FUNCTION: const MessageTemplate(
+          MessageKind.PATCH_NON_FUNCTION,
           "Cannot patch non-function with function patch "
           "'#{functionName}'."),
 
-      MessageKind.INJECTED_PUBLIC_MEMBER:
-        const MessageTemplate(MessageKind.INJECTED_PUBLIC_MEMBER,
-            "Non-patch members in patch libraries must be private."),
+      MessageKind.INJECTED_PUBLIC_MEMBER: const MessageTemplate(
+          MessageKind.INJECTED_PUBLIC_MEMBER,
+          "Non-patch members in patch libraries must be private."),
 
-      MessageKind.EXTERNAL_WITH_BODY:
-        const MessageTemplate(MessageKind.EXTERNAL_WITH_BODY,
+      MessageKind.EXTERNAL_WITH_BODY: const MessageTemplate(
+          MessageKind.EXTERNAL_WITH_BODY,
           "External function '#{functionName}' cannot have a function body.",
           options: const ["--output-type=dart"],
           howToFix:
-            "Try removing the 'external' modifier or the function body.",
-          examples: const ["""
+              "Try removing the 'external' modifier or the function body.",
+          examples: const [
+            """
 external foo() => 0;
 main() => foo();
-""", """
+""",
+            """
 external foo() {}
 main() => foo();
-"""]),
+"""
+          ]),
 
-  //////////////////////////////////////////////////////////////////////////////
-  // Patch errors end.
-  //////////////////////////////////////////////////////////////////////////////
+      //////////////////////////////////////////////////////////////////////////////
+      // Patch errors end.
+      //////////////////////////////////////////////////////////////////////////////
 
-      MessageKind.EXPERIMENTAL_ASSERT_MESSAGE:
-        const MessageTemplate(MessageKind.EXPERIMENTAL_ASSERT_MESSAGE,
+      MessageKind.EXPERIMENTAL_ASSERT_MESSAGE: const MessageTemplate(
+          MessageKind.EXPERIMENTAL_ASSERT_MESSAGE,
           "Experimental language feature 'assertion with message'"
           " is not supported.",
           howToFix:
-            "Use option '--assert-message' to use assertions with messages.",
-          examples: const [r'''
+              "Use option '--assert-message' to use assertions with messages.",
+          examples: const [
+            r'''
 main() {
   int n = -7;
   assert(n > 0, 'must be positive: $n');
 }
-''']),
+'''
+          ]),
 
-      MessageKind.IMPORT_EXPERIMENTAL_MIRRORS:
-        const MessageTemplate(MessageKind.IMPORT_EXPERIMENTAL_MIRRORS, r'''
+      MessageKind.IMPORT_EXPERIMENTAL_MIRRORS: const MessageTemplate(
+          MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
+          r'''
 
 ****************************************************************
 * WARNING: dart:mirrors support in dart2js is experimental,
@@ -3492,7 +3575,8 @@
 *          and often greatly increases the size of the generated
 *          JavaScript code.
 *
-* Your app imports dart:mirrors via:''''''
+* Your app imports dart:mirrors via:'''
+          '''
 $IMPORT_EXPERIMENTAL_MIRRORS_PADDING#{importChain}
 *
 * You can disable this message by using the --enable-experimental-mirrors
@@ -3503,57 +3587,58 @@
 ****************************************************************
 '''),
 
-      MessageKind.DISALLOWED_LIBRARY_IMPORT:
-        const MessageTemplate(MessageKind.DISALLOWED_LIBRARY_IMPORT, '''
+      MessageKind.DISALLOWED_LIBRARY_IMPORT: const MessageTemplate(
+          MessageKind.DISALLOWED_LIBRARY_IMPORT,
+          '''
 Your app imports the unsupported library '#{uri}' via:
-''''''
+'''
+          '''
 $DISALLOWED_LIBRARY_IMPORT_PADDING#{importChain}
 
 Use the --categories option to support import of '#{uri}'.
 '''),
 
-      MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND:
-        const MessageTemplate(
+      MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND: const MessageTemplate(
           MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND,
           """
 dart:mirrors library is not supported when using this backend.
 
-Your app imports dart:mirrors via:""""""
+Your app imports dart:mirrors via:"""
+          """
 $MIRRORS_NOT_SUPPORTED_BY_BACKEND_PADDING#{importChain}"""),
 
-      MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS:
-        const MessageTemplate(MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS,
+      MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS: const MessageTemplate(
+          MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS,
           "Non-supported 'call' member on a native class, or a "
           "subclass of a native class."),
 
-      MessageKind.DIRECTLY_THROWING_NSM:
-        const MessageTemplate(MessageKind.DIRECTLY_THROWING_NSM,
+      MessageKind.DIRECTLY_THROWING_NSM: const MessageTemplate(
+          MessageKind.DIRECTLY_THROWING_NSM,
           "This 'noSuchMethod' implementation is guaranteed to throw an "
           "exception. The generated code will be smaller if it is "
           "rewritten.",
           howToFix: "Rewrite to "
-                    "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."),
+              "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."),
 
-      MessageKind.COMPLEX_THROWING_NSM:
-        const MessageTemplate(MessageKind.COMPLEX_THROWING_NSM,
+      MessageKind.COMPLEX_THROWING_NSM: const MessageTemplate(
+          MessageKind.COMPLEX_THROWING_NSM,
           "This 'noSuchMethod' implementation is guaranteed to throw an "
           "exception. The generated code will be smaller and the compiler "
           "will be able to perform more optimizations if it is rewritten.",
           howToFix: "Rewrite to "
-                    "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."),
+              "'noSuchMethod(Invocation i) => super.noSuchMethod(i);'."),
 
-      MessageKind.COMPLEX_RETURNING_NSM:
-        const MessageTemplate(MessageKind.COMPLEX_RETURNING_NSM,
+      MessageKind.COMPLEX_RETURNING_NSM: const MessageTemplate(
+          MessageKind.COMPLEX_RETURNING_NSM,
           "Overriding 'noSuchMethod' causes the compiler to generate "
           "more code and prevents the compiler from doing some optimizations.",
           howToFix: "Consider removing this 'noSuchMethod' implementation."),
 
-      MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP:
-        const MessageTemplate(MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP,
+      MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP: const MessageTemplate(
+          MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP,
           "Unsupported version of package:lookup_map.",
           howToFix: DONT_KNOW_HOW_TO_FIX),
-
-  }); // End of TEMPLATES.
+    }); // End of TEMPLATES.
 
   /// Padding used before and between import chains in the message for
   /// [MessageKind.IMPORT_EXPERIMENTAL_MIRRORS].
@@ -3583,7 +3668,10 @@
   String message;
 
   Message(this.template, this.arguments, this.terse) {
-    assert(() { computeMessage(); return true; });
+    assert(() {
+      computeMessage();
+      return true;
+    });
   }
 
   MessageKind get kind => template.kind;
@@ -3597,7 +3685,7 @@
       assert(invariant(
           CURRENT_ELEMENT_SPANNABLE,
           kind == MessageKind.GENERIC ||
-            !message.contains(new RegExp(r'#\{.+\}')),
+              !message.contains(new RegExp(r'#\{.+\}')),
           message: 'Missing arguments in error message: "$message"'));
       if (!terse && template.hasHowToFix) {
         String howToFix = template.howToFix;
@@ -3614,8 +3702,8 @@
     return computeMessage();
   }
 
-  bool operator==(other) {
-    if (other is !Message) return false;
+  bool operator ==(other) {
+    if (other is! Message) return false;
     return (template == other.template) && (toString() == other.toString());
   }
 
diff --git a/pkg/compiler/lib/src/diagnostics/source_span.dart b/pkg/compiler/lib/src/diagnostics/source_span.dart
index 25bdc6c..d53ebae 100644
--- a/pkg/compiler/lib/src/diagnostics/source_span.dart
+++ b/pkg/compiler/lib/src/diagnostics/source_span.dart
@@ -4,12 +4,9 @@
 
 library dart2js.diagnostics.source_span;
 
-import '../tokens/token.dart' show
-    Token;
-import '../tree/tree.dart' show
-    Node;
-import 'spannable.dart' show
-    Spannable;
+import '../tokens/token.dart' show Token;
+import '../tree/tree.dart' show Node;
+import 'spannable.dart' show Spannable;
 
 class SourceSpan implements Spannable {
   final Uri uri;
@@ -34,17 +31,13 @@
   }
 
   int get hashCode {
-    return 13 * uri.hashCode +
-           17 * begin.hashCode +
-           19 * end.hashCode;
+    return 13 * uri.hashCode + 17 * begin.hashCode + 19 * end.hashCode;
   }
 
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! SourceSpan) return false;
-    return uri == other.uri &&
-           begin == other.begin &&
-           end == other.end;
+    return uri == other.uri && begin == other.begin && end == other.end;
   }
 
   String toString() => 'SourceSpan($uri, $begin, $end)';
diff --git a/pkg/compiler/lib/src/diagnostics/spannable.dart b/pkg/compiler/lib/src/diagnostics/spannable.dart
index ea9ae1f..3c8b6d1 100644
--- a/pkg/compiler/lib/src/diagnostics/spannable.dart
+++ b/pkg/compiler/lib/src/diagnostics/spannable.dart
@@ -28,8 +28,7 @@
 /// Sentinel spannable used to mark that there might be no location for the
 /// diagnostic. Use this only when it is not an error not to have a current
 /// element.
-const Spannable NO_LOCATION_SPANNABLE =
-    const _SpannableSentinel("No location");
+const Spannable NO_LOCATION_SPANNABLE = const _SpannableSentinel("No location");
 
 class SpannableAssertionFailure {
   final Spannable node;
@@ -37,5 +36,5 @@
   SpannableAssertionFailure(this.node, this.message);
 
   String toString() => 'Assertion failure'
-                       '${message != null ? ': $message' : ''}';
+      '${message != null ? ': $message' : ''}';
 }
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index 109cd312..726d914 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -4,41 +4,26 @@
 
 library dump_info;
 
-import 'dart:convert' show
-    ChunkedConversionSink,
-    HtmlEscape,
-    JsonEncoder,
-    StringConversionSink;
+import 'dart:convert'
+    show ChunkedConversionSink, HtmlEscape, JsonEncoder, StringConversionSink;
 
 import 'package:dart2js_info/info.dart';
 
 import 'common.dart';
-import 'common/tasks.dart' show
-    CompilerTask;
-import 'constants/values.dart' show
-    ConstantValue,
-    InterceptorConstantValue;
-import 'compiler.dart' show
-    Compiler;
-import 'deferred_load.dart' show
-    OutputUnit;
+import 'common/tasks.dart' show CompilerTask;
+import 'constants/values.dart' show ConstantValue, InterceptorConstantValue;
+import 'compiler.dart' show Compiler;
+import 'deferred_load.dart' show OutputUnit;
 import 'elements/elements.dart';
 import 'elements/visitor.dart';
-import 'info/send_info.dart' show
-    collectSendMeasurements;
-import 'js_backend/js_backend.dart' show
-    JavaScriptBackend;
-import 'js_emitter/full_emitter/emitter.dart' as full show
-    Emitter;
+import 'info/send_info.dart' show collectSendMeasurements;
+import 'js_backend/js_backend.dart' show JavaScriptBackend;
+import 'js_emitter/full_emitter/emitter.dart' as full show Emitter;
 import 'js/js.dart' as jsAst;
-import 'types/types.dart' show
-    TypeMask;
-import 'universe/universe.dart' show
-    ReceiverConstraint;
-import 'universe/world_impact.dart' show
-    ImpactUseCase,
-    WorldImpact,
-    WorldImpactVisitorImpl;
+import 'types/types.dart' show TypeMask;
+import 'universe/universe.dart' show ReceiverConstraint;
+import 'universe/world_impact.dart'
+    show ImpactUseCase, WorldImpact, WorldImpactVisitorImpl;
 
 class ElementInfoCollector extends BaseElementVisitor<Info, dynamic> {
   final Compiler compiler;
@@ -453,16 +438,13 @@
     compiler.impactStrategy.visitImpact(
         element,
         impact,
-        new WorldImpactVisitorImpl(
-            visitDynamicUse: (dynamicUse) {
-              selections.addAll(compiler.world.allFunctions
-                        .filter(dynamicUse.selector, dynamicUse.mask)
-                        .map((e) => new Selection(e, dynamicUse.mask)));
-            },
-            visitStaticUse: (staticUse) {
-              selections.add(new Selection(staticUse.element, null));
-            }
-        ),
+        new WorldImpactVisitorImpl(visitDynamicUse: (dynamicUse) {
+          selections.addAll(compiler.world.allFunctions
+              .filter(dynamicUse.selector, dynamicUse.mask)
+              .map((e) => new Selection(e, dynamicUse.mask)));
+        }, visitStaticUse: (staticUse) {
+          selections.add(new Selection(staticUse.element, null));
+        }),
         IMPACT_USE);
     return selections;
   }
diff --git a/pkg/compiler/lib/src/elements/common.dart b/pkg/compiler/lib/src/elements/common.dart
index 85fd159..bbc682a 100644
--- a/pkg/compiler/lib/src/elements/common.dart
+++ b/pkg/compiler/lib/src/elements/common.dart
@@ -6,17 +6,10 @@
 
 library elements.common;
 
-import '../common/names.dart' show
-    Names,
-    Uris;
-import '../core_types.dart' show
-    CoreClasses;
-import '../dart_types.dart' show
-    DartType,
-    InterfaceType,
-    FunctionType;
-import '../util/util.dart' show
-    Link;
+import '../common/names.dart' show Names, Uris;
+import '../core_types.dart' show CoreClasses;
+import '../dart_types.dart' show DartType, InterfaceType, FunctionType;
+import '../util/util.dart' show Link;
 
 import 'elements.dart';
 
@@ -52,7 +45,7 @@
   bool get isSetter => kind == ElementKind.SETTER;
 
   @override
-  bool get isConstructor => isGenerativeConstructor ||  isFactoryConstructor;
+  bool get isConstructor => isGenerativeConstructor || isFactoryConstructor;
 
   @override
   bool get isGenerativeConstructor =>
@@ -62,8 +55,7 @@
   bool get isGenerativeConstructorBody =>
       kind == ElementKind.GENERATIVE_CONSTRUCTOR_BODY;
 
-  bool get isFactoryConstructor =>
-      kind == ElementKind.FACTORY_CONSTRUCTOR;
+  bool get isFactoryConstructor => kind == ElementKind.FACTORY_CONSTRUCTOR;
 
   @override
   bool get isVariable => kind == ElementKind.VARIABLE;
@@ -178,7 +170,6 @@
 }
 
 abstract class ClassElementCommon implements ClassElement {
-
   @override
   Link<DartType> get allSupertypes => allSupertypesAndSelf.supertypes;
 
@@ -197,7 +188,6 @@
     return result != null && result.isConstructor ? result : null;
   }
 
-
   /**
    * Find the first member in the class chain with the given [memberName].
    *
@@ -221,8 +211,8 @@
     bool isPrivate = memberName.isPrivate;
     LibraryElement library = memberName.library;
     for (ClassElement current = isSuperLookup ? superclass : this;
-         current != null;
-         current = current.superclass) {
+        current != null;
+        current = current.superclass) {
       Element member = current.lookupLocalMember(name);
       if (member == null && current.isPatched) {
         // Doing lookups on selectors is done after resolution, so it
@@ -251,7 +241,7 @@
             return getter;
           }
         }
-      // Abstract members can be defined in a super class.
+        // Abstract members can be defined in a super class.
       } else if (!member.isAbstract) {
         return member;
       }
@@ -295,8 +285,8 @@
    * This will ignore constructors.
    */
   @override
-  Element lookupSuperMemberInLibrary(String memberName,
-                                     LibraryElement library) {
+  Element lookupSuperMemberInLibrary(
+      String memberName, LibraryElement library) {
     bool isPrivate = Name.isPrivateName(memberName);
     for (ClassElement s = superclass; s != null; s = s.superclass) {
       // Private members from a different library are not visible.
@@ -332,8 +322,7 @@
   // TODO(johnniwinther): Clean up lookup to get rid of the include predicates.
   @override
   void forEachMember(void f(ClassElement enclosingClass, Element member),
-                     {includeBackendMembers: false,
-                      includeSuperAndInjectedMembers: false}) {
+      {includeBackendMembers: false, includeSuperAndInjectedMembers: false}) {
     bool includeInjectedMembers = includeSuperAndInjectedMembers || isPatch;
     ClassElement classElement = declaration;
     do {
@@ -352,9 +341,8 @@
           });
         }
       }
-      classElement = includeSuperAndInjectedMembers
-          ? classElement.superclass
-          : null;
+      classElement =
+          includeSuperAndInjectedMembers ? classElement.superclass : null;
     } while (classElement != null);
   }
 
@@ -368,9 +356,9 @@
    * origin and in the patch are included.
    */
   @override
-  void forEachInstanceField(void f(ClassElement enclosingClass,
-                                   FieldElement field),
-                            {bool includeSuperAndInjectedMembers: false}) {
+  void forEachInstanceField(
+      void f(ClassElement enclosingClass, FieldElement field),
+      {bool includeSuperAndInjectedMembers: false}) {
     // Filters so that [f] is only invoked with instance fields.
     void fieldFilter(ClassElement enclosingClass, Element member) {
       if (member.isInstanceMember && member.kind == ElementKind.FIELD) {
@@ -433,8 +421,7 @@
 
   @override
   bool implementsFunction(CoreClasses coreClasses) {
-    return asInstanceOf(coreClasses.functionClass) != null ||
-        callType != null;
+    return asInstanceOf(coreClasses.functionClass) != null || callType != null;
   }
 
   @override
@@ -498,8 +485,8 @@
       if (requiredParameterCount != signature.requiredParameterCount) {
         return false;
       }
-      Set<String> names = optionalParameters.map(
-          (Element element) => element.name).toSet();
+      Set<String> names =
+          optionalParameters.map((Element element) => element.name).toSet();
       for (Element namedParameter in signature.optionalParameters) {
         if (!names.contains(namedParameter.name)) {
           return false;
@@ -512,8 +499,8 @@
       // optional parameters is not a problem, they simply are never provided
       // by call sites of a call to a method with the other signature.
       int otherTotalCount = signature.parameterCount;
-      return requiredParameterCount <= otherTotalCount
-          && parameterCount >= otherTotalCount;
+      return requiredParameterCount <= otherTotalCount &&
+          parameterCount >= otherTotalCount;
     }
     return true;
   }
@@ -526,9 +513,7 @@
   }
 
   FunctionElement _lookupLocalConstructor(String name) {
-    for (Link<Element> link = constructors;
-         !link.isEmpty;
-         link = link.tail) {
+    for (Link<Element> link = constructors; !link.isEmpty; link = link.tail) {
       if (link.head.name == name) return link.head;
     }
     return null;
@@ -547,8 +532,9 @@
   @override
   void forEachLocalMember(void f(Element member)) {
     constructors.forEach(f);
-    if (mixin != null) mixin.forEachLocalMember((Element mixedInElement) {
+    if (mixin != null)
+      mixin.forEachLocalMember((Element mixedInElement) {
       if (mixedInElement.isInstanceMember) f(mixedInElement);
     });
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/elements/elements.dart b/pkg/compiler/lib/src/elements/elements.dart
index 2e70d1f31..86a5f41 100644
--- a/pkg/compiler/lib/src/elements/elements.dart
+++ b/pkg/compiler/lib/src/elements/elements.dart
@@ -5,25 +5,18 @@
 library elements;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Resolution;
-import '../compiler.dart' show
-    Compiler;
+import '../common/resolution.dart' show Resolution;
+import '../compiler.dart' show Compiler;
 import '../constants/constructors.dart';
 import '../constants/expressions.dart';
-import '../core_types.dart' show
-    CoreClasses;
+import '../core_types.dart' show CoreClasses;
 import '../dart_types.dart';
-import '../resolution/scope.dart' show
-    Scope;
-import '../resolution/tree_elements.dart' show
-    TreeElements;
+import '../resolution/scope.dart' show Scope;
+import '../resolution/tree_elements.dart' show TreeElements;
 import '../ordered_typeset.dart' show OrderedTypeSet;
 import '../script.dart';
-import '../tokens/token.dart' show
-    Token,
-    isUserDefinableOperator,
-    isMinusOperator;
+import '../tokens/token.dart'
+    show Token, isUserDefinableOperator, isMinusOperator;
 import '../tree/tree.dart';
 import '../util/characters.dart' show $_;
 import '../util/util.dart';
@@ -430,9 +423,8 @@
   }
 
   /// Unwraps [element] reporting any warnings attached to it, if any.
-  static Element unwrap(Element element,
-                        DiagnosticReporter listener,
-                        Spannable spannable) {
+  static Element unwrap(
+      Element element, DiagnosticReporter listener, Spannable spannable) {
     if (element != null && element.isWarnOnUse) {
       WarnOnUseElement wrappedElement = element;
       element = wrappedElement.unwrap(listener, spannable);
@@ -450,11 +442,11 @@
   }
 
   static bool isInstanceField(Element element) {
-    return !Elements.isUnresolved(element)
-           && element.isInstanceMember
-           && (identical(element.kind, ElementKind.FIELD)
-               || identical(element.kind, ElementKind.GETTER)
-               || identical(element.kind, ElementKind.SETTER));
+    return !Elements.isUnresolved(element) &&
+        element.isInstanceMember &&
+        (identical(element.kind, ElementKind.FIELD) ||
+            identical(element.kind, ElementKind.GETTER) ||
+            identical(element.kind, ElementKind.SETTER));
   }
 
   static bool isStaticOrTopLevel(Element element) {
@@ -464,14 +456,14 @@
     // `element.isTopLevel` is true.
     if (Elements.isUnresolved(element)) return false;
     if (element.isStatic || element.isTopLevel) return true;
-    return !element.isAmbiguous
-           && !element.isInstanceMember
-           && !element.isPrefix
-           && element.enclosingElement != null
-           && (element.enclosingElement.kind == ElementKind.CLASS ||
-               element.enclosingElement.kind == ElementKind.COMPILATION_UNIT ||
-               element.enclosingElement.kind == ElementKind.LIBRARY ||
-               element.enclosingElement.kind == ElementKind.PREFIX);
+    return !element.isAmbiguous &&
+        !element.isInstanceMember &&
+        !element.isPrefix &&
+        element.enclosingElement != null &&
+        (element.enclosingElement.kind == ElementKind.CLASS ||
+            element.enclosingElement.kind == ElementKind.COMPILATION_UNIT ||
+            element.enclosingElement.kind == ElementKind.LIBRARY ||
+            element.enclosingElement.kind == ElementKind.PREFIX);
   }
 
   static bool isInStaticContext(Element element) {
@@ -495,10 +487,10 @@
   }
 
   static bool isStaticOrTopLevelField(Element element) {
-    return isStaticOrTopLevel(element)
-           && (identical(element.kind, ElementKind.FIELD)
-               || identical(element.kind, ElementKind.GETTER)
-               || identical(element.kind, ElementKind.SETTER));
+    return isStaticOrTopLevel(element) &&
+        (identical(element.kind, ElementKind.FIELD) ||
+            identical(element.kind, ElementKind.GETTER) ||
+            identical(element.kind, ElementKind.SETTER));
   }
 
   static bool isStaticOrTopLevelFunction(Element element) {
@@ -506,9 +498,9 @@
   }
 
   static bool isInstanceMethod(Element element) {
-    return !Elements.isUnresolved(element)
-           && element.isInstanceMember
-           && (identical(element.kind, ElementKind.FUNCTION));
+    return !Elements.isUnresolved(element) &&
+        element.isInstanceMember &&
+        (identical(element.kind, ElementKind.FUNCTION));
   }
 
   /// Also returns true for [ConstructorBodyElement]s and getters/setters.
@@ -526,8 +518,8 @@
     Element element = elements[send];
     if (element == null) return !isClosureSend(send, element);
     return isInstanceMethod(element) ||
-           isInstanceField(element) ||
-           (send.isConditional && !element.isStatic);
+        isInstanceField(element) ||
+        (send.isConditional && !element.isStatic);
   }
 
   static bool isClosureSend(Send send, Element element) {
@@ -561,8 +553,8 @@
     }
   }
 
-  static String constructorNameForDiagnostics(String className,
-                                              String constructorName) {
+  static String constructorNameForDiagnostics(
+      String className, String constructorName) {
     String classNameString = className;
     String constructorNameString = constructorName;
     return (constructorName == '')
@@ -644,8 +636,10 @@
 
   static String constructOperatorName(String op, bool isUnary) {
     String operatorName = constructOperatorNameOrNull(op, isUnary);
-    if (operatorName == null) throw 'Unhandled operator: $op';
-    else return operatorName;
+    if (operatorName == null)
+      throw 'Unhandled operator: $op';
+    else
+      return operatorName;
   }
 
   static String mapToUserOperatorOrNull(String op) {
@@ -706,49 +700,46 @@
     return elements.toList()..sort(compareByPosition);
   }
 
-  static bool isFixedListConstructorCall(Element element,
-                                         Send node,
-                                         Compiler compiler) {
-    return element == compiler.unnamedListConstructor
-        && node.isCall
-        && !node.arguments.isEmpty
-        && node.arguments.tail.isEmpty;
+  static bool isFixedListConstructorCall(
+      Element element, Send node, Compiler compiler) {
+    return element == compiler.unnamedListConstructor &&
+        node.isCall &&
+        !node.arguments.isEmpty &&
+        node.arguments.tail.isEmpty;
   }
 
-  static bool isGrowableListConstructorCall(Element element,
-                                            Send node,
-                                            Compiler compiler) {
-    return element == compiler.unnamedListConstructor
-        && node.isCall
-        && node.arguments.isEmpty;
+  static bool isGrowableListConstructorCall(
+      Element element, Send node, Compiler compiler) {
+    return element == compiler.unnamedListConstructor &&
+        node.isCall &&
+        node.arguments.isEmpty;
   }
 
-  static bool isFilledListConstructorCall(Element element,
-                                          Send node,
-                                          Compiler compiler) {
-    return element == compiler.filledListConstructor
-        && node.isCall
-        && !node.arguments.isEmpty
-        && !node.arguments.tail.isEmpty
-        && node.arguments.tail.tail.isEmpty;
+  static bool isFilledListConstructorCall(
+      Element element, Send node, Compiler compiler) {
+    return element == compiler.filledListConstructor &&
+        node.isCall &&
+        !node.arguments.isEmpty &&
+        !node.arguments.tail.isEmpty &&
+        node.arguments.tail.tail.isEmpty;
   }
 
-  static bool isConstructorOfTypedArraySubclass(Element element,
-                                                Compiler compiler) {
+  static bool isConstructorOfTypedArraySubclass(
+      Element element, Compiler compiler) {
     if (compiler.typedDataLibrary == null) return false;
     if (!element.isConstructor) return false;
     ConstructorElement constructor = element.implementation;
     constructor = constructor.effectiveTarget;
     ClassElement cls = constructor.enclosingClass;
-    return cls.library == compiler.typedDataLibrary
-        && compiler.backend.isNative(cls)
-        && compiler.world.isSubtypeOf(cls, compiler.typedDataClass)
-        && compiler.world.isSubtypeOf(cls, compiler.coreClasses.listClass)
-        && constructor.name == '';
+    return cls.library == compiler.typedDataLibrary &&
+        compiler.backend.isNative(cls) &&
+        compiler.world.isSubtypeOf(cls, compiler.typedDataClass) &&
+        compiler.world.isSubtypeOf(cls, compiler.coreClasses.listClass) &&
+        constructor.name == '';
   }
 
-  static bool switchStatementHasContinue(SwitchStatement node,
-                                         TreeElements elements) {
+  static bool switchStatementHasContinue(
+      SwitchStatement node, TreeElements elements) {
     for (SwitchCase switchCase in node.cases) {
       for (Node labelOrCase in switchCase.labelsAndCases) {
         Node label = labelOrCase.asLabel();
@@ -946,7 +937,6 @@
 /// A type alias definition.
 abstract class TypedefElement extends Element
     implements AstElement, TypeDeclarationElement, FunctionTypedElement {
-
   /// The type defined by this typedef with the type variables as its type
   /// arguments.
   ///
@@ -997,8 +987,7 @@
 
 /// A function, variable or parameter defined in an executable context.
 abstract class LocalElement extends Element
-    implements AstElement, TypedElement, Local {
-}
+    implements AstElement, TypedElement, Local {}
 
 /// A top level, static or instance field, a formal parameter or local variable.
 abstract class VariableElement extends ExecutableElement {
@@ -1033,12 +1022,10 @@
 /// The executable context is the [ExecutableElement] in which this variable
 /// is defined.
 abstract class LocalVariableElement extends VariableElement
-    implements LocalElement {
-}
+    implements LocalElement {}
 
 /// A top-level, static or instance field.
-abstract class FieldElement extends VariableElement implements MemberElement {
-}
+abstract class FieldElement extends VariableElement implements MemberElement {}
 
 /// A parameter-like element of a function signature.
 ///
@@ -1086,8 +1073,7 @@
 /// A formal parameter on a function or constructor that introduces a local
 /// variable in the scope of the function or constructor.
 abstract class LocalParameterElement extends ParameterElement
-    implements LocalVariableElement {
-}
+    implements LocalVariableElement {}
 
 /// A formal parameter in a constructor that directly initializes a field.
 ///
@@ -1138,10 +1124,11 @@
 /// A top level, static or instance method, constructor, local function, or
 /// closure (anonymous local function).
 abstract class FunctionElement extends Element
-    implements AstElement,
-               TypedElement,
-               FunctionTypedElement,
-               ExecutableElement {
+    implements
+        AstElement,
+        TypedElement,
+        FunctionTypedElement,
+        ExecutableElement {
   FunctionExpression get node;
 
   FunctionElement get patch;
@@ -1212,14 +1199,11 @@
 }
 
 /// A top level, static or instance function.
-abstract class MethodElement extends FunctionElement
-    implements MemberElement {
-}
+abstract class MethodElement extends FunctionElement implements MemberElement {}
 
 /// A local function or closure (anonymous local function).
 abstract class LocalFunctionElement extends FunctionElement
-    implements LocalElement {
-}
+    implements LocalElement {}
 
 /// A constructor.
 abstract class ConstructorElement extends FunctionElement
@@ -1466,19 +1450,18 @@
   Element lookupBackendMember(String memberName);
   Element lookupSuperMember(String memberName);
 
-  Element lookupSuperMemberInLibrary(String memberName,
-                                     LibraryElement library);
+  Element lookupSuperMemberInLibrary(String memberName, LibraryElement library);
 
   ConstructorElement lookupDefaultConstructor();
   ConstructorElement lookupConstructor(String name);
 
   void forEachMember(void f(ClassElement enclosingClass, Element member),
-                     {bool includeBackendMembers: false,
-                      bool includeSuperAndInjectedMembers: false});
+      {bool includeBackendMembers: false,
+      bool includeSuperAndInjectedMembers: false});
 
-  void forEachInstanceField(void f(ClassElement enclosingClass,
-                                   FieldElement field),
-                            {bool includeSuperAndInjectedMembers: false});
+  void forEachInstanceField(
+      void f(ClassElement enclosingClass, FieldElement field),
+      {bool includeSuperAndInjectedMembers: false});
 
   /// Similar to [forEachInstanceField] but visits static fields.
   void forEachStaticField(void f(ClassElement enclosingClass, Element field));
@@ -1510,7 +1493,16 @@
 /// Enum declaration.
 abstract class EnumClassElement extends ClassElement {
   /// The static fields implied by the enum values.
-  List<FieldElement> get enumValues;
+  List<EnumConstantElement> get enumValues;
+}
+
+/// An enum constant value.
+abstract class EnumConstantElement extends FieldElement {
+  /// The enum that declared this constant.
+  EnumClassElement get enclosingClass;
+
+  /// The index of this constant within the values of the enum.
+  int get index;
 }
 
 /// The label entity defined by a labeled statement.
@@ -1723,4 +1715,3 @@
   /// if any. Otherwise [implementation] points to the member itself.
   Member get implementation;
 }
-
diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart
index bed7cea..fe64aec 100644
--- a/pkg/compiler/lib/src/elements/modelx.dart
+++ b/pkg/compiler/lib/src/elements/modelx.dart
@@ -5,45 +5,29 @@
 library elements.modelx;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Resolution,
-    Parsing;
-import '../compiler.dart' show
-    Compiler;
+import '../common/resolution.dart' show Resolution, Parsing;
+import '../compiler.dart' show Compiler;
 import '../constants/constant_constructors.dart';
 import '../constants/constructors.dart';
 import '../constants/expressions.dart';
 import '../dart_types.dart';
-import '../diagnostics/messages.dart' show
-    MessageTemplate;
-import '../ordered_typeset.dart' show
-    OrderedTypeSet;
-import '../resolution/class_members.dart' show
-    ClassMemberMixin;
-import '../resolution/scope.dart' show
-    ClassScope,
-    LibraryScope,
-    Scope,
-    TypeDeclarationScope;
-import '../resolution/resolution.dart' show
-    AnalyzableElementX;
-import '../resolution/tree_elements.dart' show
-    TreeElements;
-import '../resolution/typedefs.dart' show
-    TypedefCyclicVisitor;
+import '../diagnostics/messages.dart' show MessageTemplate;
+import '../ordered_typeset.dart' show OrderedTypeSet;
+import '../resolution/class_members.dart' show ClassMemberMixin;
+import '../resolution/scope.dart'
+    show ClassScope, LibraryScope, Scope, TypeDeclarationScope;
+import '../resolution/resolution.dart' show AnalyzableElementX;
+import '../resolution/tree_elements.dart' show TreeElements;
+import '../resolution/typedefs.dart' show TypedefCyclicVisitor;
 import '../script.dart';
-import '../tokens/token.dart' show
-    ErrorToken,
-    Token;
-import '../tokens/token_constants.dart' as Tokens show
-    EOF_TOKEN;
+import '../tokens/token.dart' show ErrorToken, Token;
+import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN;
 import '../tree/tree.dart';
 import '../util/util.dart';
 
 import 'common.dart';
 import 'elements.dart';
-import 'visitor.dart' show
-    ElementVisitor;
+import 'visitor.dart' show ElementVisitor;
 
 /// Object that identifies a declaration site.
 ///
@@ -51,8 +35,7 @@
 /// where multi-declarations like `var a, b, c` are allowed, the declaration
 /// site is a separate object.
 // TODO(johnniwinther): Add [beginToken] and [endToken] getters.
-abstract class DeclarationSite {
-}
+abstract class DeclarationSite {}
 
 abstract class ElementX extends Element with ElementCommon {
   static int elementHashCode = 0;
@@ -70,8 +53,7 @@
   Modifiers get modifiers => Modifiers.EMPTY;
 
   Node parseNode(Parsing parsing) {
-    parsing.reporter.internalError(this,
-        'parseNode not implemented on $this.');
+    parsing.reporter.internalError(this, 'parseNode not implemented on $this.');
     return null;
   }
 
@@ -90,12 +72,13 @@
         return metadataInternal;
       } else {
         return <MetadataAnnotation>[]
-            ..addAll(origin.metadata)
-            ..addAll(metadataInternal);
+          ..addAll(origin.metadata)
+          ..addAll(metadataInternal);
       }
     }
     return metadataInternal != null
-        ? metadataInternal : const <MetadataAnnotation>[];
+        ? metadataInternal
+        : const <MetadataAnnotation>[];
   }
 
   bool get isClosure => false;
@@ -103,6 +86,7 @@
     // Check that this element is defined in the scope of a Class.
     return enclosingElement != null && enclosingElement.isClass;
   }
+
   bool get isInstanceMember => false;
   bool get isDeferredLoaderGetter => false;
 
@@ -144,8 +128,8 @@
     return findNameToken(token, isConstructor, name, enclosingElement.name);
   }
 
-  static Token findNameToken(Token token, bool isConstructor, String name,
-                             String enclosingClassName) {
+  static Token findNameToken(
+      Token token, bool isConstructor, String name, String enclosingClassName) {
     // We search for the token that has the name of this element.
     // For constructors, that doesn't work because they may have
     // named formed out of multiple tokens (named constructors) so
@@ -154,7 +138,7 @@
     // The unary '-' operator has a special element name (specified).
     if (needle == 'unary-') needle = '-';
     for (Token t = token; Tokens.EOF_TOKEN != t.kind; t = t.next) {
-      if (t is !ErrorToken && needle == t.value) return t;
+      if (t is! ErrorToken && needle == t.value) return t;
     }
     return token;
   }
@@ -187,7 +171,7 @@
   }
 
   Element get enclosingClassOrCompilationUnit {
-   for (Element e = this; e != null; e = e.enclosingElement) {
+    for (Element e = this; e != null; e = e.enclosingElement) {
       if (e.isClass || e.isCompilationUnit) return e;
     }
     return null;
@@ -250,8 +234,8 @@
   final MessageKind messageKind;
   final Map messageArguments;
 
-  ErroneousElementX(this.messageKind, this.messageArguments,
-                    String name, Element enclosing)
+  ErroneousElementX(
+      this.messageKind, this.messageArguments, String name, Element enclosing)
       : super(name, ElementKind.ERROR, enclosing);
 
   bool get isTopLevel => false;
@@ -306,7 +290,8 @@
 
   String get message {
     return MessageTemplate.TEMPLATES[messageKind]
-        .message(messageArguments).toString();
+        .message(messageArguments)
+        .toString();
   }
 
   String toString() => '<$name: $message>';
@@ -326,19 +311,17 @@
 
 /// A constructor that was synthesized to recover from a compile-time error.
 class ErroneousConstructorElementX extends ErroneousElementX
-    with PatchMixin<FunctionElement>,
-         AnalyzableElementX,
-         ConstantConstructorMixin
+    with
+        PatchMixin<FunctionElement>,
+        AnalyzableElementX,
+        ConstantConstructorMixin
     implements ConstructorElementX {
   // TODO(ahe): Instead of subclassing [ErroneousElementX], this class should
   // be more like [ErroneousFieldElementX]. In particular, its kind should be
   // [ElementKind.GENERATIVE_CONSTRUCTOR], and it shouldn't throw as much.
 
-  ErroneousConstructorElementX(
-      MessageKind messageKind,
-      Map messageArguments,
-      String name,
-      Element enclosing)
+  ErroneousConstructorElementX(MessageKind messageKind, Map messageArguments,
+      String name, Element enclosing)
       : super(messageKind, messageArguments, name, enclosing);
 
   @override
@@ -408,9 +391,8 @@
   }
 
   @override
-  void setEffectiveTarget(ConstructorElement target,
-                            InterfaceType type,
-                            {bool isMalformed: false}) {
+  void setEffectiveTarget(ConstructorElement target, InterfaceType type,
+      {bool isMalformed: false}) {
     throw new UnsupportedError("setEffectiveTarget");
   }
 
@@ -500,7 +482,7 @@
   final Element wrappedElement;
 
   WarnOnUseElementX(WrappedMessage this.warning, WrappedMessage this.info,
-                    Element enclosingElement, Element wrappedElement)
+      Element enclosingElement, Element wrappedElement)
       : this.wrappedElement = wrappedElement,
         super(wrappedElement.name, ElementKind.WARN_ON_USE, enclosingElement);
 
@@ -570,8 +552,8 @@
     return set;
   }
 
-  List<DiagnosticMessage> computeInfos(Element context,
-                                       DiagnosticReporter reporter) {
+  List<DiagnosticMessage> computeInfos(
+      Element context, DiagnosticReporter reporter) {
     return const <DiagnosticMessage>[];
   }
 
@@ -586,20 +568,18 @@
 
 /// Element synthesized to diagnose an ambiguous import.
 class AmbiguousImportX extends AmbiguousElementX {
-  AmbiguousImportX(
-      MessageKind messageKind,
-      Map messageArguments,
+  AmbiguousImportX(MessageKind messageKind, Map messageArguments,
       Element enclosingElement, Element existingElement, Element newElement)
       : super(messageKind, messageArguments, enclosingElement, existingElement,
-              newElement);
+            newElement);
 
   List<DiagnosticMessage> computeInfos(
-      Element context,
-      DiagnosticReporter reporter) {
+      Element context, DiagnosticReporter reporter) {
     List<DiagnosticMessage> infos = <DiagnosticMessage>[];
     Setlet ambiguousElements = flatten();
     MessageKind code = (ambiguousElements.length == 1)
-        ? MessageKind.AMBIGUOUS_REEXPORT : MessageKind.AMBIGUOUS_LOCATION;
+        ? MessageKind.AMBIGUOUS_REEXPORT
+        : MessageKind.AMBIGUOUS_LOCATION;
     LibraryElementX importer = context.library;
     for (Element element in ambiguousElements) {
       Map arguments = {'name': element.name};
@@ -617,12 +597,10 @@
 
 /// Element synthesized to recover from a duplicated member of an element.
 class DuplicatedElementX extends AmbiguousElementX {
-  DuplicatedElementX(
-      MessageKind messageKind,
-      Map messageArguments,
+  DuplicatedElementX(MessageKind messageKind, Map messageArguments,
       Element enclosingElement, Element existingElement, Element newElement)
       : super(messageKind, messageArguments, enclosingElement, existingElement,
-              newElement);
+            newElement);
 
   bool get isMalformed => true;
 }
@@ -646,14 +624,10 @@
       if (!identical(existing, element)) {
         reporter.reportError(
             reporter.createMessage(
-                element,
-                MessageKind.DUPLICATE_DEFINITION,
-                {'name': name}),
+                element, MessageKind.DUPLICATE_DEFINITION, {'name': name}),
             <DiagnosticMessage>[
-                reporter.createMessage(
-                    existing,
-                    MessageKind.EXISTING_DEFINITION,
-                    {'name': name}),
+              reporter.createMessage(
+                  existing, MessageKind.EXISTING_DEFINITION, {'name': name}),
             ]);
       }
     }
@@ -672,25 +646,23 @@
    * element, they are enclosed by the class or compilation unit, as is the
    * abstract field.
    */
-  void addAccessor(AccessorElementX accessor,
-                   Element existing,
-                   DiagnosticReporter reporter) {
+  void addAccessor(AccessorElementX accessor, Element existing,
+      DiagnosticReporter reporter) {
     void reportError(Element other) {
       reporter.reportError(
-          reporter.createMessage(
-              accessor,
-              MessageKind.DUPLICATE_DEFINITION,
+          reporter.createMessage(accessor, MessageKind.DUPLICATE_DEFINITION,
               {'name': accessor.name}),
           <DiagnosticMessage>[
-              reporter.createMessage(
-                  other,
-                  MessageKind.EXISTING_DEFINITION,
-                  {'name': accessor.name}),
+            reporter.createMessage(other, MessageKind.EXISTING_DEFINITION,
+                {'name': accessor.name}),
           ]);
 
       contents[accessor.name] = new DuplicatedElementX(
-          MessageKind.DUPLICATE_DEFINITION, {'name': accessor.name},
-          accessor.memberContext.enclosingElement, other, accessor);
+          MessageKind.DUPLICATE_DEFINITION,
+          {'name': accessor.name},
+          accessor.memberContext.enclosingElement,
+          other,
+          accessor);
     }
 
     if (existing != null) {
@@ -738,10 +710,8 @@
   Link<Element> localMembers = const Link<Element>();
 
   CompilationUnitElementX(Script script, LibraryElementX library)
-    : this.script = script,
-      super(script.name,
-            ElementKind.COMPILATION_UNIT,
-            library) {
+      : this.script = script,
+        super(script.name, ElementKind.COMPILATION_UNIT, library) {
     library.addCompilationUnit(this);
   }
 
@@ -785,8 +755,7 @@
       return;
     }
     if (!localMembers.isEmpty) {
-      reporter.reportErrorMessage(
-          tag, MessageKind.BEFORE_TOP_LEVEL);
+      reporter.reportErrorMessage(tag, MessageKind.BEFORE_TOP_LEVEL);
       return;
     }
     if (partTag != null) {
@@ -799,21 +768,16 @@
     if (libraryTag != null) {
       String expectedName = libraryTag.name.toString();
       if (expectedName != actualName) {
-        reporter.reportWarningMessage(
-            tag.name,
-            MessageKind.LIBRARY_NAME_MISMATCH,
-            {'libraryName': expectedName});
+        reporter.reportWarningMessage(tag.name,
+            MessageKind.LIBRARY_NAME_MISMATCH, {'libraryName': expectedName});
       }
     } else {
       reporter.reportWarning(
-          reporter.createMessage(
-              library,
-              MessageKind.MISSING_LIBRARY_NAME,
+          reporter.createMessage(library, MessageKind.MISSING_LIBRARY_NAME,
               {'libraryName': actualName}),
           <DiagnosticMessage>[
-              reporter.createMessage(
-                  tag.name,
-                  MessageKind.THIS_IS_THE_PART_OF_TAG),
+            reporter.createMessage(
+                tag.name, MessageKind.THIS_IS_THE_PART_OF_TAG),
           ]);
     }
   }
@@ -857,8 +821,7 @@
    * Addition to the map is performed by [addImport]. Lookup is done trough
    * [find].
    */
-  final Map<String, Element> importScope =
-      new Map<String, Element>();
+  final Map<String, Element> importScope = new Map<String, Element>();
 
   /**
    * Adds [element] to the import scope of this library.
@@ -867,10 +830,8 @@
    * [ErroneousElement] will be put in the imported scope, allowing for
    * detection of ambiguous uses of imported names.
    */
-  void addImport(Element enclosingElement,
-                 Element element,
-                 ImportElement import,
-                 DiagnosticReporter reporter) {
+  void addImport(Element enclosingElement, Element element,
+      ImportElement import, DiagnosticReporter reporter) {
     LibraryElementX library = enclosingElement.library;
     Importers importers = library.importers;
 
@@ -884,10 +845,8 @@
     Element existing = importScope.putIfAbsent(name, () => element);
     importers.registerImport(element, import);
 
-    void registerWarnOnUseElement(ImportElement import,
-                                  MessageKind messageKind,
-                                  Element hidingElement,
-                                  Element hiddenElement) {
+    void registerWarnOnUseElement(ImportElement import, MessageKind messageKind,
+        Element hidingElement, Element hiddenElement) {
       Uri hiddenUri = hiddenElement.library.canonicalUri;
       Uri hidingUri = hidingElement.library.canonicalUri;
       Element element = new WarnOnUseElementX(
@@ -895,11 +854,10 @@
               null, // Report on reference to [hidingElement].
               messageKind,
               {'name': name, 'hiddenUri': hiddenUri, 'hidingUri': hidingUri}),
-          new WrappedMessage(
-              reporter.spanFromSpannable(import),
-              MessageKind.IMPORTED_HERE,
-              {'name': name}),
-          enclosingElement, hidingElement);
+          new WrappedMessage(reporter.spanFromSpannable(import),
+              MessageKind.IMPORTED_HERE, {'name': name}),
+          enclosingElement,
+          hidingElement);
       importScope[name] = element;
       importers.registerImport(element, import);
     }
@@ -912,21 +870,23 @@
         registerWarnOnUseElement(
             import, MessageKind.HIDDEN_IMPORT, element, existing);
       } else if (!existing.library.isPlatformLibrary &&
-                 element.library.isPlatformLibrary) {
+          element.library.isPlatformLibrary) {
         // [element] is implicitly hidden.
         if (import.isSynthesized) {
           // [element] is imported implicitly (probably through dart:core).
-          registerWarnOnUseElement(
-              existingImport, MessageKind.HIDDEN_IMPLICIT_IMPORT,
-              existing, element);
+          registerWarnOnUseElement(existingImport,
+              MessageKind.HIDDEN_IMPLICIT_IMPORT, existing, element);
         } else {
           registerWarnOnUseElement(
               import, MessageKind.HIDDEN_IMPORT, existing, element);
         }
       } else {
         Element ambiguousElement = new AmbiguousImportX(
-            MessageKind.DUPLICATE_IMPORT, {'name': name},
-            enclosingElement, existing, element);
+            MessageKind.DUPLICATE_IMPORT,
+            {'name': name},
+            enclosingElement,
+            existing,
+            element);
         importScope[name] = ambiguousElement;
         importers.registerImport(ambiguousElement, import);
         importers.registerImport(ambiguousElement, existingImport);
@@ -945,9 +905,7 @@
   LibraryElement libraryDependency;
 
   LibraryDependencyElementX(CompilationUnitElement enclosingElement,
-                            ElementKind kind,
-                            this.node,
-                            this.uri)
+      ElementKind kind, this.node, this.uri)
       : super('', kind, enclosingElement);
 
   @override
@@ -1009,10 +967,8 @@
   SourceSpan get sourcePosition => library.sourcePosition;
 }
 
-
 class ExportElementX extends LibraryDependencyElementX
     implements ExportElement {
-
   ExportElementX(CompilationUnitElement enclosingElement, Export node, Uri uri)
       : super(enclosingElement, ElementKind.EXPORT, node, uri);
 
@@ -1025,11 +981,8 @@
   accept(ElementVisitor visitor, arg) => visitor.visitExportElement(this, arg);
 }
 
-class LibraryElementX
-    extends ElementX
-    with LibraryElementCommon,
-         AnalyzableElementX,
-         PatchMixin<LibraryElementX>
+class LibraryElementX extends ElementX
+    with LibraryElementCommon, AnalyzableElementX, PatchMixin<LibraryElementX>
     implements LibraryElement {
   final Uri canonicalUri;
 
@@ -1065,12 +1018,11 @@
   final Map<LibraryDependency, LibraryElement> tagMapping =
       new Map<LibraryDependency, LibraryElement>();
 
-  LibraryElementX(Script script,
-                  [Uri canonicalUri, LibraryElementX origin])
-    : this.canonicalUri =
-          ((canonicalUri == null) ? script.readableUri : canonicalUri),
-      this.isSynthesized = script.isSynthesized,
-      super(script.name, ElementKind.LIBRARY, null) {
+  LibraryElementX(Script script, [Uri canonicalUri, LibraryElementX origin])
+      : this.canonicalUri =
+            ((canonicalUri == null) ? script.readableUri : canonicalUri),
+        this.isSynthesized = script.isSynthesized,
+        super(script.name, ElementKind.LIBRARY, null) {
     entryCompilationUnit = new CompilationUnitElementX(script, this);
     if (origin != null) {
       origin.applyPatch(this);
@@ -1099,8 +1051,8 @@
 
   void addTag(LibraryTag tag, DiagnosticReporter reporter) {
     if (tagsCache != null) {
-      reporter.internalError(tag,
-          "Library tags for $this have already been computed.");
+      reporter.internalError(
+          tag, "Library tags for $this have already been computed.");
     }
     tagsBuilder.addLast(tag);
   }
@@ -1132,9 +1084,8 @@
    * [ErroneousElement] will be put in the imported scope, allowing for
    * detection of ambiguous uses of imported names.
    */
-  void addImport(Element element,
-                 ImportElement import,
-                 DiagnosticReporter reporter) {
+  void addImport(
+      Element element, ImportElement import, DiagnosticReporter reporter) {
     importScope.addImport(this, element, import, reporter);
   }
 
@@ -1213,7 +1164,7 @@
 
   Element findExported(String elementName) {
     assert(invariant(this, exportsHandled,
-                     message: 'Exports not handled on $this'));
+        message: 'Exports not handled on $this'));
     for (Link link = slotForExports; !link.isEmpty; link = link.tail) {
       Element element = link.head;
       if (element.name == elementName) return element;
@@ -1223,7 +1174,7 @@
 
   void forEachExport(f(Element element)) {
     assert(invariant(this, exportsHandled,
-                     message: 'Exports not handled on $this'));
+        message: 'Exports not handled on $this'));
     slotForExports.forEach((Element e) => f(e));
   }
 
@@ -1306,10 +1257,8 @@
   // Only needed for deferred imports.
   final ImportElement deferredImport;
 
-  PrefixElementX(String prefix,
-                 Element enclosing,
-                 this.firstPosition,
-                 this.deferredImport)
+  PrefixElementX(
+      String prefix, Element enclosing, this.firstPosition, this.deferredImport)
       : super(prefix, ElementKind.PREFIX, enclosing);
 
   bool get isTopLevel => false;
@@ -1320,9 +1269,8 @@
 
   Token get position => firstPosition;
 
-  void addImport(Element element,
-                 ImportElement import,
-                 DiagnosticReporter reporter) {
+  void addImport(
+      Element element, ImportElement import, DiagnosticReporter reporter) {
     importScope.addImport(this, element, import, reporter);
   }
 
@@ -1334,9 +1282,10 @@
 }
 
 class TypedefElementX extends ElementX
-    with AstElementMixin,
-         AnalyzableElementX,
-         TypeDeclarationElementX<TypedefType>
+    with
+        AstElementMixin,
+        AnalyzableElementX,
+        TypeDeclarationElementX<TypedefType>
     implements TypedefElement {
   Typedef cachedNode;
 
@@ -1434,7 +1383,8 @@
 
   Iterable<MetadataAnnotation> get metadata {
     return metadataInternal != null
-        ? metadataInternal : const <MetadataAnnotation>[];
+        ? metadataInternal
+        : const <MetadataAnnotation>[];
   }
 
   void set metadata(List<MetadataAnnotation> metadata) {
@@ -1477,12 +1427,11 @@
       originVariable.constant = value;
       return;
     }
-    assert(invariant(
-        this, constantCache == null || constantCache == value,
+    assert(invariant(this, constantCache == null || constantCache == value,
         message: "Constant has already been computed for $this. "
-                 "Existing constant: "
-                 "${constantCache != null ? constantCache.getText() : ''}, "
-                 "New constant: ${value != null ? value.getText() : ''}."));
+            "Existing constant: "
+            "${constantCache != null ? constantCache.getText() : ''}, "
+            "New constant: ${value != null ? value.getText() : ''}."));
     constantCache = value;
   }
 }
@@ -1497,13 +1446,10 @@
 
   Modifiers get modifiers => variables.modifiers;
 
-  VariableElementX(String name,
-                   ElementKind kind,
-                   Element enclosingElement,
-                   VariableList variables,
-                   this.token)
-    : this.variables = variables,
-      super(name, kind, enclosingElement);
+  VariableElementX(String name, ElementKind kind, Element enclosingElement,
+      VariableList variables, this.token)
+      : this.variables = variables,
+        super(name, kind, enclosingElement);
 
   // TODO(johnniwinther): Ensure that the [TreeElements] for this variable hold
   // the mappings for all its metadata.
@@ -1548,7 +1494,8 @@
     Expression node;
     int count = 0;
     for (Link<Node> link = definitions.definitions.nodes;
-         !link.isEmpty; link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       Expression initializedIdentifier = link.head;
       Identifier identifier = initializedIdentifier.asIdentifier();
       if (identifier == null) {
@@ -1569,8 +1516,10 @@
     } else {
       // Create a [VariableDefinitions] node for the single definition of
       // [node].
-      definitionsCache = new VariableDefinitions(definitions.type,
-          definitions.modifiers, new NodeList(
+      definitionsCache = new VariableDefinitions(
+          definitions.type,
+          definitions.modifiers,
+          new NodeList(
               definitions.definitions.beginToken,
               const Link<Node>().prepend(node),
               definitions.definitions.endToken));
@@ -1597,19 +1546,13 @@
   // cases, for example, for function typed parameters.
   Token get position => token;
 
-  accept(ElementVisitor visitor, arg) {
-    return visitor.visitVariableElement(this, arg);
-  }
-
   DeclarationSite get declarationSite => variables;
 }
 
 class LocalVariableElementX extends VariableElementX
     implements LocalVariableElement {
-  LocalVariableElementX(String name,
-                        ExecutableElement enclosingElement,
-                        VariableList variables,
-                        Token token)
+  LocalVariableElementX(String name, ExecutableElement enclosingElement,
+      VariableList variables, Token token)
       : super(name, ElementKind.VARIABLE, enclosingElement, variables, token) {
     createDefinitions(variables.definitions);
   }
@@ -1619,17 +1562,21 @@
   MemberElement get memberContext => executableContext.memberContext;
 
   bool get isLocal => true;
+
+  accept(ElementVisitor visitor, arg) {
+    return visitor.visitLocalVariableElement(this, arg);
+  }
 }
 
 class FieldElementX extends VariableElementX
-    with AnalyzableElementX implements FieldElement {
+    with AnalyzableElementX
+    implements FieldElement {
   List<FunctionElement> nestedClosures = new List<FunctionElement>();
 
-  FieldElementX(Identifier name,
-                Element enclosingElement,
-                VariableList variables)
-    : super(name.source, ElementKind.FIELD, enclosingElement,
-            variables, name.token);
+  FieldElementX(
+      Identifier name, Element enclosingElement, VariableList variables)
+      : super(name.source, ElementKind.FIELD, enclosingElement, variables,
+            name.token);
 
   accept(ElementVisitor visitor, arg) {
     return visitor.visitFieldElement(this, arg);
@@ -1650,14 +1597,15 @@
 
 /// A field that was synthesized to recover from a compile-time error.
 class ErroneousFieldElementX extends ElementX
-    with ConstantVariableMixin implements FieldElementX {
+    with ConstantVariableMixin
+    implements FieldElementX {
   final VariableList variables;
 
   ErroneousFieldElementX(Identifier name, Element enclosingElement)
       : variables = new VariableList(Modifiers.EMPTY)
-            ..definitions = new VariableDefinitions(
-                null, Modifiers.EMPTY, new NodeList.singleton(name))
-            ..type = const DynamicType(),
+          ..definitions = new VariableDefinitions(
+              null, Modifiers.EMPTY, new NodeList.singleton(name))
+          ..type = const DynamicType(),
         super(name.source, ElementKind.FIELD, enclosingElement);
 
   VariableDefinitions get definitionsCache => variables.definitions;
@@ -1741,10 +1689,8 @@
    */
   FunctionSignature _functionSignatureCache;
 
-  FormalElementX(ElementKind elementKind,
-                 FunctionTypedElement enclosingElement,
-                 this.definitions,
-                 Identifier identifier)
+  FormalElementX(ElementKind elementKind, FunctionTypedElement enclosingElement,
+      this.definitions, Identifier identifier)
       : this.identifier = identifier,
         super(identifier.source, elementKind, enclosingElement);
 
@@ -1764,8 +1710,8 @@
 
   DartType get type {
     assert(invariant(this, typeCache != null,
-            message: "Parameter type has not been set for $this."));
-        return typeCache;
+        message: "Parameter type has not been set for $this."));
+    return typeCache;
   }
 
   FunctionSignature get functionSignature {
@@ -1802,20 +1748,20 @@
 /// to ensure that default values on parameters are computed once (on the
 /// origin parameter) but can be found through both the origin and the patch.
 abstract class ParameterElementX extends FormalElementX
-    with PatchMixin<ParameterElement>,
-         ConstantVariableMixin
+    with PatchMixin<ParameterElement>, ConstantVariableMixin
     implements ParameterElement {
   final Expression initializer;
   final bool isOptional;
   final bool isNamed;
 
-  ParameterElementX(ElementKind elementKind,
-                    FunctionElement functionDeclaration,
-                    VariableDefinitions definitions,
-                    Identifier identifier,
-                    this.initializer,
-                    {this.isOptional: false,
-                     this.isNamed: false})
+  ParameterElementX(
+      ElementKind elementKind,
+      FunctionElement functionDeclaration,
+      VariableDefinitions definitions,
+      Identifier identifier,
+      this.initializer,
+      {this.isOptional: false,
+      this.isNamed: false})
       : super(elementKind, functionDeclaration, definitions, identifier);
 
   FunctionElement get functionDeclaration => enclosingElement;
@@ -1842,17 +1788,16 @@
 
 class LocalParameterElementX extends ParameterElementX
     implements LocalParameterElement {
-
-
-  LocalParameterElementX(FunctionElement functionDeclaration,
-                         VariableDefinitions definitions,
-                         Identifier identifier,
-                         Expression initializer,
-                         {bool isOptional: false,
-                          bool isNamed: false})
-      : super(ElementKind.PARAMETER, functionDeclaration,
-              definitions, identifier, initializer,
-              isOptional: isOptional, isNamed: isNamed);
+  LocalParameterElementX(
+      FunctionElement functionDeclaration,
+      VariableDefinitions definitions,
+      Identifier identifier,
+      Expression initializer,
+      {bool isOptional: false,
+      bool isNamed: false})
+      : super(ElementKind.PARAMETER, functionDeclaration, definitions,
+            identifier, initializer,
+            isOptional: isOptional, isNamed: isNamed);
 }
 
 /// Parameters in constructors that directly initialize fields. For example:
@@ -1861,16 +1806,17 @@
     implements InitializingFormalElement {
   final FieldElement fieldElement;
 
-  InitializingFormalElementX(ConstructorElement constructorDeclaration,
-                             VariableDefinitions variables,
-                             Identifier identifier,
-                             Expression initializer,
-                             this.fieldElement,
-                             {bool isOptional: false,
-                              bool isNamed: false})
+  InitializingFormalElementX(
+      ConstructorElement constructorDeclaration,
+      VariableDefinitions variables,
+      Identifier identifier,
+      Expression initializer,
+      this.fieldElement,
+      {bool isOptional: false,
+      bool isNamed: false})
       : super(ElementKind.INITIALIZING_FORMAL, constructorDeclaration,
-              variables, identifier, initializer,
-              isOptional: isOptional, isNamed: isNamed);
+            variables, identifier, initializer,
+            isOptional: isOptional, isNamed: isNamed);
 
   accept(ElementVisitor visitor, arg) {
     return visitor.visitFieldParameterElement(this, arg);
@@ -1886,13 +1832,11 @@
   final ErroneousFieldElementX fieldElement;
 
   ErroneousInitializingFormalElementX(
-      Identifier identifier,
-      Element enclosingElement)
+      Identifier identifier, Element enclosingElement)
       : this.fieldElement =
             new ErroneousFieldElementX(identifier, enclosingElement),
-        super(
-            ElementKind.INITIALIZING_FORMAL,
-            enclosingElement, null, identifier, null);
+        super(ElementKind.INITIALIZING_FORMAL, enclosingElement, null,
+            identifier, null);
 
   VariableDefinitions get definitions => fieldElement.node;
 
@@ -1930,8 +1874,7 @@
     //
     // We need to make sure that the position returned is relative to
     // the compilation unit of the abstract element.
-    if (getter != null
-        && identical(getter.compilationUnit, compilationUnit)) {
+    if (getter != null && identical(getter.compilationUnit, compilationUnit)) {
       return getter.position;
     } else {
       return setter.position;
@@ -1941,12 +1884,10 @@
   Modifiers get modifiers {
     // The resolver ensures that the flags match (ignoring abstract).
     if (getter != null) {
-      return new Modifiers.withFlags(
-          getter.modifiers.nodes,
+      return new Modifiers.withFlags(getter.modifiers.nodes,
           getter.modifiers.flags | Modifiers.FLAG_ABSTRACT);
     } else {
-      return new Modifiers.withFlags(
-          setter.modifiers.nodes,
+      return new Modifiers.withFlags(setter.modifiers.nodes,
           setter.modifiers.flags | Modifiers.FLAG_ABSTRACT);
     }
   }
@@ -1960,8 +1901,8 @@
   }
 
   bool get isAbstract {
-    return getter != null && getter.isAbstract
-        || setter != null && setter.isAbstract;
+    return getter != null && getter.isAbstract ||
+        setter != null && setter.isAbstract;
   }
 }
 
@@ -1979,19 +1920,20 @@
   final FunctionType type;
   final bool hasOptionalParameters;
 
-  FunctionSignatureX({this.requiredParameters: const <Element>[],
-                      this.requiredParameterCount: 0,
-                      List<Element> optionalParameters: const <Element>[],
-                      this.optionalParameterCount: 0,
-                      this.optionalParametersAreNamed: false,
-                      this.orderedOptionalParameters: const <Element>[],
-                      this.type})
+  FunctionSignatureX(
+      {this.requiredParameters: const <Element>[],
+      this.requiredParameterCount: 0,
+      List<Element> optionalParameters: const <Element>[],
+      this.optionalParameterCount: 0,
+      this.optionalParametersAreNamed: false,
+      this.orderedOptionalParameters: const <Element>[],
+      this.type})
       : optionalParameters = optionalParameters,
         hasOptionalParameters = !optionalParameters.isEmpty;
 }
 
-abstract class BaseFunctionElementX
-    extends ElementX with PatchMixin<FunctionElement>, AstElementMixin
+abstract class BaseFunctionElementX extends ElementX
+    with PatchMixin<FunctionElement>, AstElementMixin
     implements FunctionElement {
   DartType typeCache;
   final Modifiers modifiers;
@@ -2002,10 +1944,8 @@
 
   AsyncMarker asyncMarker = AsyncMarker.SYNC;
 
-  BaseFunctionElementX(String name,
-                       ElementKind kind,
-                       Modifiers this.modifiers,
-                       Element enclosing)
+  BaseFunctionElementX(String name, ElementKind kind, Modifiers this.modifiers,
+      Element enclosing)
       : super(name, kind, enclosing) {
     assert(modifiers != null);
   }
@@ -2013,9 +1953,7 @@
   bool get isExternal => modifiers.isExternal;
 
   bool get isInstanceMember {
-    return isClassMember
-           && !isConstructor
-           && !isStatic;
+    return isClassMember && !isConstructor && !isStatic;
   }
 
   bool get hasFunctionSignature => _functionSignatureCache != null;
@@ -2081,12 +2019,10 @@
 }
 
 abstract class FunctionElementX extends BaseFunctionElementX
-    with AnalyzableElementX implements MethodElement {
-
-  FunctionElementX(String name,
-                   ElementKind kind,
-                   Modifiers modifiers,
-                   Element enclosing)
+    with AnalyzableElementX
+    implements MethodElement {
+  FunctionElementX(
+      String name, ElementKind kind, Modifiers modifiers, Element enclosing)
       : super(name, kind, modifiers, enclosing);
 
   MemberElement get memberContext => this;
@@ -2114,12 +2050,13 @@
 abstract class MethodElementX extends FunctionElementX {
   final bool hasBody;
 
-  MethodElementX(String name,
-                 ElementKind kind,
-                 Modifiers modifiers,
-                 Element enclosing,
-                 // TODO(15101): Make this a named parameter.
-                 this.hasBody)
+  MethodElementX(
+      String name,
+      ElementKind kind,
+      Modifiers modifiers,
+      Element enclosing,
+      // TODO(15101): Make this a named parameter.
+      this.hasBody)
       : super(name, kind, modifiers, enclosing);
 
   @override
@@ -2136,21 +2073,15 @@
     implements AccessorElement {
   AbstractFieldElement abstractField;
 
-  AccessorElementX(String name,
-                   ElementKind kind,
-                   Modifiers modifiers,
-                   Element enclosing,
-                   bool hasBody)
+  AccessorElementX(String name, ElementKind kind, Modifiers modifiers,
+      Element enclosing, bool hasBody)
       : super(name, kind, modifiers, enclosing, hasBody);
 }
 
 abstract class GetterElementX extends AccessorElementX
     implements GetterElement {
-
-  GetterElementX(String name,
-                 Modifiers modifiers,
-                 Element enclosing,
-                 bool hasBody)
+  GetterElementX(
+      String name, Modifiers modifiers, Element enclosing, bool hasBody)
       : super(name, ElementKind.GETTER, modifiers, enclosing, hasBody);
 
   accept(ElementVisitor visitor, arg) {
@@ -2160,11 +2091,8 @@
 
 abstract class SetterElementX extends AccessorElementX
     implements SetterElement {
-
-  SetterElementX(String name,
-                 Modifiers modifiers,
-                 Element enclosing,
-                 bool hasBody)
+  SetterElementX(
+      String name, Modifiers modifiers, Element enclosing, bool hasBody)
       : super(name, ElementKind.SETTER, modifiers, enclosing, hasBody);
 
   accept(ElementVisitor visitor, arg) {
@@ -2176,11 +2104,8 @@
     implements LocalFunctionElement {
   final FunctionExpression node;
 
-  LocalFunctionElementX(String name,
-                        FunctionExpression this.node,
-                        ElementKind kind,
-                        Modifiers modifiers,
-                        ExecutableElement enclosing)
+  LocalFunctionElementX(String name, FunctionExpression this.node,
+      ElementKind kind, Modifiers modifiers, ExecutableElement enclosing)
       : super(name, kind, modifiers, enclosing);
 
   ExecutableElement get executableContext => enclosingElement;
@@ -2229,36 +2154,35 @@
     } else {
       assert(invariant(this, isConst,
           message: "Constant constructor set on non-constant "
-                   "constructor $this."));
+              "constructor $this."));
       assert(invariant(this, !isFromEnvironmentConstructor,
           message: "Constant constructor set on fromEnvironment "
-                   "constructor: $this."));
-      assert(invariant(this,
-          _constantConstructor == null || _constantConstructor == value,
+              "constructor: $this."));
+      assert(invariant(
+          this, _constantConstructor == null || _constantConstructor == value,
           message: "Constant constructor already computed for $this:"
-                   "Existing: $_constantConstructor, new: $value"));
+              "Existing: $_constantConstructor, new: $value"));
       _constantConstructor = value;
     }
   }
 
   bool get isFromEnvironmentConstructor {
     return name == 'fromEnvironment' &&
-           library.isDartCore &&
-           (enclosingClass.name == 'bool' ||
+        library.isDartCore &&
+        (enclosingClass.name == 'bool' ||
             enclosingClass.name == 'int' ||
             enclosingClass.name == 'String');
   }
 }
 
 abstract class ConstructorElementX extends FunctionElementX
-    with ConstantConstructorMixin implements ConstructorElement {
+    with ConstantConstructorMixin
+    implements ConstructorElement {
   bool isRedirectingGenerative = false;
 
-  ConstructorElementX(String name,
-                      ElementKind kind,
-                      Modifiers modifiers,
-                      Element enclosing)
-        : super(name, kind, modifiers, enclosing);
+  ConstructorElementX(
+      String name, ElementKind kind, Modifiers modifiers, Element enclosing)
+      : super(name, kind, modifiers, enclosing);
 
   FunctionElement immediateRedirectionTarget;
   PrefixElement redirectionDeferredPrefix;
@@ -2274,9 +2198,8 @@
   DartType _effectiveTargetType;
   bool _isEffectiveTargetMalformed;
 
-  void setEffectiveTarget(ConstructorElement target,
-                          DartType type,
-                          {bool isMalformed: false}) {
+  void setEffectiveTarget(ConstructorElement target, DartType type,
+      {bool isMalformed: false}) {
     assert(invariant(this, target != null,
         message: 'No effective target provided for $this.'));
     assert(invariant(this, effectiveTargetInternal == null,
@@ -2314,7 +2237,7 @@
   bool get isEffectiveTargetMalformed {
     if (!isRedirectingFactory) return false;
     assert(invariant(this, _isEffectiveTargetMalformed != null,
-            message: 'Malformedness has not yet been computed for $this.'));
+        message: 'Malformedness has not yet been computed for $this.'));
     return _isEffectiveTargetMalformed == true;
   }
 
@@ -2333,10 +2256,7 @@
 
   DeferredLoaderGetterElementX(PrefixElement prefix)
       : this.prefix = prefix,
-        super("loadLibrary",
-              Modifiers.EMPTY,
-              prefix,
-              false) {
+        super("loadLibrary", Modifiers.EMPTY, prefix, false) {
     functionSignature = new FunctionSignatureX(type: new FunctionType(this));
   }
 
@@ -2367,10 +2287,8 @@
 
   ConstructorBodyElementX(ConstructorElementX constructor)
       : this.constructor = constructor,
-        super(constructor.name,
-              ElementKind.GENERATIVE_CONSTRUCTOR_BODY,
-              Modifiers.EMPTY,
-              constructor.enclosingElement) {
+        super(constructor.name, ElementKind.GENERATIVE_CONSTRUCTOR_BODY,
+            Modifiers.EMPTY, constructor.enclosingElement) {
     functionSignature = constructor.functionSignature;
   }
 
@@ -2412,22 +2330,17 @@
   final ConstructorElement definingConstructor;
   final bool isDefaultConstructor;
 
-  SynthesizedConstructorElementX.notForDefault(String name,
-                                               this.definingConstructor,
-                                               Element enclosing)
+  SynthesizedConstructorElementX.notForDefault(
+      String name, this.definingConstructor, Element enclosing)
       : isDefaultConstructor = false,
-        super(name,
-              ElementKind.GENERATIVE_CONSTRUCTOR,
-              Modifiers.EMPTY,
-              enclosing) ;
+        super(name, ElementKind.GENERATIVE_CONSTRUCTOR, Modifiers.EMPTY,
+            enclosing);
 
-  SynthesizedConstructorElementX.forDefault(this.definingConstructor,
-                                            Element enclosing)
+  SynthesizedConstructorElementX.forDefault(
+      this.definingConstructor, Element enclosing)
       : isDefaultConstructor = true,
-        super('',
-              ElementKind.GENERATIVE_CONSTRUCTOR,
-              Modifiers.EMPTY,
-              enclosing) {
+        super('', ElementKind.GENERATIVE_CONSTRUCTOR, Modifiers.EMPTY,
+            enclosing) {
     functionSignature = new FunctionSignatureX(
         type: new FunctionType.synthesized(enclosingClass.thisType));
   }
@@ -2506,13 +2419,13 @@
 
   T get thisType {
     assert(invariant(this, thisTypeCache != null,
-                     message: 'This type has not been computed for $this'));
+        message: 'This type has not been computed for $this'));
     return thisTypeCache;
   }
 
   T get rawType {
     assert(invariant(this, rawTypeCache != null,
-                     message: 'Raw type has not been computed for $this'));
+        message: 'Raw type has not been computed for $this'));
     return rawTypeCache;
   }
 
@@ -2565,12 +2478,13 @@
 }
 
 abstract class BaseClassElementX extends ElementX
-    with AstElementMixin,
-         AnalyzableElementX,
-         ClassElementCommon,
-         TypeDeclarationElementX<InterfaceType>,
-         PatchMixin<ClassElement>,
-         ClassMemberMixin
+    with
+        AstElementMixin,
+        AnalyzableElementX,
+        ClassElementCommon,
+        TypeDeclarationElementX<InterfaceType>,
+        PatchMixin<ClassElement>,
+        ClassMemberMixin
     implements ClassElement {
   final int id;
 
@@ -2587,10 +2501,7 @@
 
   OrderedTypeSet allSupertypesAndSelf;
 
-  BaseClassElementX(String name,
-                    Element enclosing,
-                    this.id,
-                    int initialState)
+  BaseClassElementX(String name, Element enclosing, this.id, int initialState)
       : supertypeLoadState = initialState,
         resolutionState = initialState,
         super(name, ElementKind.CLASS, enclosing);
@@ -2616,8 +2527,8 @@
     return thisTypeCache;
   }
 
-  void computeThisAndRawType(Resolution resolution,
-                             List<DartType> typeVariables) {
+  void computeThisAndRawType(
+      Resolution resolution, List<DartType> typeVariables) {
     if (thisTypeCache == null) {
       if (origin == null) {
         setThisAndRawTypes(typeVariables);
@@ -2648,8 +2559,8 @@
     }
   }
 
-  void setDefaultConstructor(FunctionElement constructor,
-                             DiagnosticReporter reporter);
+  void setDefaultConstructor(
+      FunctionElement constructor, DiagnosticReporter reporter);
 
   void addBackendMember(Element member) {
     // TODO(ngeoffray): Deprecate this method.
@@ -2734,8 +2645,7 @@
 
   void addToScope(Element element, DiagnosticReporter reporter) {
     if (element.isField && element.name == name) {
-      reporter.reportErrorMessage(
-          element, MessageKind.MEMBER_USES_CLASS_NAME);
+      reporter.reportErrorMessage(element, MessageKind.MEMBER_USES_CLASS_NAME);
     }
     localScope.add(element, reporter);
   }
@@ -2760,8 +2670,8 @@
     return false;
   }
 
-  void setDefaultConstructor(FunctionElement constructor,
-                             DiagnosticReporter reporter) {
+  void setDefaultConstructor(
+      FunctionElement constructor, DiagnosticReporter reporter) {
     // The default constructor, although synthetic, is part of a class' API.
     addMember(constructor, reporter);
   }
@@ -2830,28 +2740,29 @@
 class EnumConstructorElementX extends ConstructorElementX {
   final FunctionExpression node;
 
-  EnumConstructorElementX(EnumClassElementX enumClass,
-                          Modifiers modifiers,
-                          this.node)
-      : super('', // Name.
-              ElementKind.GENERATIVE_CONSTRUCTOR,
-              modifiers,
-              enumClass);
+  EnumConstructorElementX(
+      EnumClassElementX enumClass, Modifiers modifiers, this.node)
+      : super(
+            '', // Name.
+            ElementKind.GENERATIVE_CONSTRUCTOR,
+            modifiers,
+            enumClass);
 
   @override
   bool get hasNode => true;
 
   @override
   FunctionExpression parseNode(Parsing parsing) => node;
+
+  @override
+  SourceSpan get sourcePosition => enclosingClass.sourcePosition;
 }
 
 class EnumMethodElementX extends MethodElementX {
   final FunctionExpression node;
 
-  EnumMethodElementX(String name,
-                     EnumClassElementX enumClass,
-                     Modifiers modifiers,
-                     this.node)
+  EnumMethodElementX(
+      String name, EnumClassElementX enumClass, Modifiers modifiers, this.node)
       : super(name, ElementKind.FUNCTION, modifiers, enumClass, true);
 
   @override
@@ -2859,30 +2770,58 @@
 
   @override
   FunctionExpression parseNode(Parsing parsing) => node;
+
+  @override
+  SourceSpan get sourcePosition => enclosingClass.sourcePosition;
 }
 
 class EnumFormalElementX extends InitializingFormalElementX {
-  EnumFormalElementX(ConstructorElement constructor,
-                     VariableDefinitions variables,
-                     Identifier identifier,
-                     EnumFieldElementX fieldElement)
+  EnumFormalElementX(
+      ConstructorElement constructor,
+      VariableDefinitions variables,
+      Identifier identifier,
+      EnumFieldElementX fieldElement)
       : super(constructor, variables, identifier, null, fieldElement) {
     typeCache = fieldElement.type;
   }
+
+  @override
+  SourceSpan get sourcePosition => enclosingClass.sourcePosition;
 }
 
 class EnumFieldElementX extends FieldElementX {
-
-  EnumFieldElementX(Identifier name,
-                    EnumClassElementX enumClass,
-                    VariableList variableList,
-                    Node definition,
-                    [Expression initializer])
+  EnumFieldElementX(Identifier name, EnumClassElementX enumClass,
+      VariableList variableList, Node definition,
+      [Expression initializer])
       : super(name, enumClass, variableList) {
-    definitionsCache = new VariableDefinitions(null,
-        variableList.modifiers, new NodeList.singleton(definition));
+    definitionsCache = new VariableDefinitions(
+        null, variableList.modifiers, new NodeList.singleton(definition));
     initializerCache = initializer;
   }
+
+  @override
+  SourceSpan get sourcePosition => enclosingClass.sourcePosition;
+}
+
+class EnumConstantElementX extends EnumFieldElementX
+    implements EnumConstantElement {
+  final int index;
+
+  EnumConstantElementX(
+      Identifier name,
+      EnumClassElementX enumClass,
+      VariableList variableList,
+      Node definition,
+      Expression initializer,
+      this.index)
+      : super(name, enumClass, variableList, definition, initializer);
+
+  @override
+  SourceSpan get sourcePosition {
+    return new SourceSpan(
+        enclosingClass.sourcePosition.uri,
+        position.charOffset, position.charEnd);
+  }
 }
 
 abstract class MixinApplicationElementX extends BaseClassElementX
@@ -2923,8 +2862,8 @@
     constructors = constructors.prepend(constructor);
   }
 
-  void setDefaultConstructor(FunctionElement constructor,
-                             DiagnosticReporter reporter) {
+  void setDefaultConstructor(
+      FunctionElement constructor, DiagnosticReporter reporter) {
     assert(!hasConstructor);
     addConstructor(constructor);
   }
@@ -2932,7 +2871,8 @@
   List<DartType> computeTypeParameters(Parsing parsing) {
     NamedMixinApplication named = node.asNamedMixinApplication();
     if (named == null) {
-      throw new SpannableAssertionFailure(node,
+      throw new SpannableAssertionFailure(
+          node,
           "Type variables on unnamed mixin applications must be set on "
           "creation.");
     }
@@ -2949,10 +2889,7 @@
   final NamedMixinApplication node;
 
   NamedMixinApplicationElementX(
-      String name,
-      CompilationUnitElement enclosing,
-      int id,
-      this.node)
+      String name, CompilationUnitElement enclosing, int id, this.node)
       : super(name, enclosing, id);
 
   Modifiers get modifiers => node.modifiers;
@@ -2964,10 +2901,7 @@
   final Node node;
 
   UnnamedMixinApplicationElementX(
-      String name,
-      CompilationUnitElement enclosing,
-      int id,
-      this.node)
+      String name, CompilationUnitElement enclosing, int id, this.node)
       : super(name, enclosing, id);
 
   bool get isAbstract => true;
@@ -3028,18 +2962,17 @@
   String toString() => 'Target:$statement';
 }
 
-class TypeVariableElementX extends ElementX with AstElementMixin
+class TypeVariableElementX extends ElementX
+    with AstElementMixin
     implements TypeVariableElement {
   final int index;
   final Node node;
   TypeVariableType typeCache;
   DartType boundCache;
 
-  TypeVariableElementX(String name,
-                       TypeDeclarationElement enclosing,
-                       this.index,
-                       this.node)
-    : super(name, ElementKind.TYPE_VARIABLE, enclosing);
+  TypeVariableElementX(
+      String name, TypeDeclarationElement enclosing, this.index, this.node)
+      : super(name, ElementKind.TYPE_VARIABLE, enclosing);
 
   TypeDeclarationElement get typeDeclaration => enclosingElement;
 
@@ -3149,8 +3082,8 @@
 /// See [:patch_parser.dart:] for a description of the terminology.
 abstract class PatchMixin<E extends Element> implements Element {
   // TODO(johnniwinther): Use type variables when issue 18630 is fixed.
-  Element/*E*/ patch = null;
-  Element/*E*/ origin = null;
+  Element /*E*/ patch = null;
+  Element /*E*/ origin = null;
 
   bool get isPatch => origin != null;
   bool get isPatched => patch != null;
@@ -3158,19 +3091,19 @@
   bool get isImplementation => !isPatched;
   bool get isDeclaration => !isPatch;
 
-  Element/*E*/ get implementation => isPatched ? patch : this;
-  Element/*E*/ get declaration => isPatch ? origin : this;
+  Element /*E*/ get implementation => isPatched ? patch : this;
+  Element /*E*/ get declaration => isPatch ? origin : this;
 
   /// Applies a patch to this element. This method must be called at most once.
   void applyPatch(PatchMixin<E> patch) {
     assert(invariant(this, this.patch == null,
-                     message: "Element is patched twice."));
+        message: "Element is patched twice."));
     assert(invariant(this, this.origin == null,
-                     message: "Origin element is a patch."));
+        message: "Origin element is a patch."));
     assert(invariant(patch, patch.origin == null,
-                     message: "Element is patched twice."));
+        message: "Element is patched twice."));
     assert(invariant(patch, patch.patch == null,
-                     message: "Patch element is patched."));
+        message: "Patch element is patched."));
     this.patch = patch;
     patch.origin = this;
   }
@@ -3188,11 +3121,12 @@
   /// itself.
   AstElement get definingElement;
 
-  bool get hasResolvedAst => definingElement.hasTreeElements;
-
-  ResolvedAst get resolvedAst {
-    return new ResolvedAst(declaration,
-        definingElement.node, definingElement.treeElements);
+  bool get hasResolvedAst {
+    return definingElement.hasNode && definingElement.hasTreeElements;
   }
 
+  ResolvedAst get resolvedAst {
+    return new ResolvedAst(
+        declaration, definingElement.node, definingElement.treeElements);
+  }
 }
diff --git a/pkg/compiler/lib/src/elements/names.dart b/pkg/compiler/lib/src/elements/names.dart
index 314a94b..e38def0 100644
--- a/pkg/compiler/lib/src/elements/names.dart
+++ b/pkg/compiler/lib/src/elements/names.dart
@@ -49,7 +49,6 @@
 
   LibraryElement get library;
 
-
   /// Returns `true` when [s] is private if used as an identifier.
   static bool isPrivateName(String s) => !s.isEmpty && s.codeUnitAt(0) == $_;
 
@@ -107,7 +106,7 @@
 
   bool operator ==(other) {
     if (other is! PrivateName) return false;
-    return super==(other) && library == other.library;
+    return super == (other) && library == other.library;
   }
 
   String toString() => '${library.libraryName}#${super.toString()}';
diff --git a/pkg/compiler/lib/src/elements/visitor.dart b/pkg/compiler/lib/src/elements/visitor.dart
index b571e56..2a1c917 100644
--- a/pkg/compiler/lib/src/elements/visitor.dart
+++ b/pkg/compiler/lib/src/elements/visitor.dart
@@ -6,9 +6,7 @@
 
 import 'elements.dart';
 import '../closure.dart'
-    show BoxFieldElement,
-         ClosureClassElement,
-         ClosureFieldElement;
+    show BoxFieldElement, ClosureClassElement, ClosureFieldElement;
 
 abstract class ElementVisitor<R, A> {
   const ElementVisitor();
@@ -24,7 +22,7 @@
   R visitExportElement(ExportElement e, A arg) => null;
   R visitPrefixElement(PrefixElement e, A arg) => null;
   R visitTypedefElement(TypedefElement e, A arg) => null;
-  R visitVariableElement(VariableElement e, A arg) => null;
+  R visitLocalVariableElement(LocalVariableElement e, A arg) => null;
   R visitParameterElement(ParameterElement e, A arg) => null;
   R visitFormalElement(FormalElement e, A arg) => null;
   R visitFieldElement(FieldElement e, A arg) => null;
@@ -45,7 +43,6 @@
   R visitClosureFieldElement(ClosureFieldElement e, A arg) => null;
 }
 
-
 abstract class BaseElementVisitor<R, A> extends ElementVisitor<R, A> {
   const BaseElementVisitor();
 
@@ -100,12 +97,16 @@
     return visitElement(e, arg);
   }
 
-  @override
   R visitVariableElement(VariableElement e, A arg) {
     return visitElement(e, arg);
   }
 
   @override
+  R visitLocalVariableElement(LocalVariableElement e, A arg) {
+    return visitVariableElement(e, arg);
+  }
+
+  @override
   R visitParameterElement(ParameterElement e, A arg) {
     return visitVariableElement(e, arg);
   }
@@ -202,4 +203,4 @@
   R visitClosureFieldElement(ClosureFieldElement e, A arg) {
     return visitVariableElement(e, arg);
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index 38c02bf..ff3c21c 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -4,66 +4,44 @@
 
 library dart2js.enqueue;
 
-import 'dart:collection' show
-    Queue;
+import 'dart:collection' show Queue;
 
 import 'common.dart';
-import 'common/names.dart' show
-    Identifiers;
-import 'common/resolution.dart' show
-    Resolution;
-import 'common/work.dart' show
-    ItemCompilationContext,
-    WorkItem;
-import 'common/tasks.dart' show
-    CompilerTask,
-    DeferredAction,
-    DeferredTask;
-import 'common/codegen.dart' show
-    CodegenWorkItem;
-import 'common/resolution.dart' show
-    ResolutionWorkItem;
-import 'compiler.dart' show
-    Compiler;
-import 'dart_types.dart' show
-    DartType,
-    InterfaceType;
-import 'elements/elements.dart' show
-    AnalyzableElement,
-    AstElement,
-    ClassElement,
-    ConstructorElement,
-    Element,
-    Elements,
-    FunctionElement,
-    LibraryElement,
-    LocalFunctionElement,
-    Member,
-    MemberElement,
-    MethodElement,
-    Name,
-    TypedElement,
-    TypedefElement;
+import 'common/names.dart' show Identifiers;
+import 'common/resolution.dart' show Resolution;
+import 'common/work.dart' show ItemCompilationContext, WorkItem;
+import 'common/tasks.dart' show CompilerTask, DeferredAction, DeferredTask;
+import 'common/codegen.dart' show CodegenWorkItem;
+import 'common/resolution.dart' show ResolutionWorkItem;
+import 'compiler.dart' show Compiler;
+import 'dart_types.dart' show DartType, InterfaceType;
+import 'elements/elements.dart'
+    show
+        AnalyzableElement,
+        AstElement,
+        ClassElement,
+        ConstructorElement,
+        Element,
+        Elements,
+        FunctionElement,
+        LibraryElement,
+        LocalFunctionElement,
+        Member,
+        MemberElement,
+        MethodElement,
+        Name,
+        TypedElement,
+        TypedefElement;
 import 'js/js.dart' as js;
 import 'native/native.dart' as native;
-import 'types/types.dart' show
-    TypeMaskStrategy;
-import 'universe/selector.dart' show
-    Selector;
+import 'types/types.dart' show TypeMaskStrategy;
+import 'universe/selector.dart' show Selector;
 import 'universe/universe.dart';
-import 'universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    StaticUseKind,
-    TypeUse,
-    TypeUseKind;
-import 'universe/world_impact.dart' show
-    ImpactUseCase,
-    WorldImpact,
-    WorldImpactVisitor;
-import 'util/util.dart' show
-    Link,
-    Setlet;
+import 'universe/use.dart'
+    show DynamicUse, StaticUse, StaticUseKind, TypeUse, TypeUseKind;
+import 'universe/world_impact.dart'
+    show ImpactUseCase, WorldImpact, WorldImpactVisitor;
+import 'util/util.dart' show Link, Setlet;
 
 typedef ItemCompilationContext ItemCompilationContextCreator();
 
@@ -74,14 +52,17 @@
   String get name => 'Enqueue';
 
   EnqueueTask(Compiler compiler)
-    : resolution = new ResolutionEnqueuer(
-          compiler, compiler.backend.createItemCompilationContext,
-          compiler.options.analyzeOnly && compiler.options.analyzeMain
-              ? const EnqueuerStrategy() : const TreeShakingEnqueuerStrategy()),
-      codegen = new CodegenEnqueuer(
-          compiler, compiler.backend.createItemCompilationContext,
-          const TreeShakingEnqueuerStrategy()),
-      super(compiler) {
+      : resolution = new ResolutionEnqueuer(
+            compiler,
+            compiler.backend.createItemCompilationContext,
+            compiler.options.analyzeOnly && compiler.options.analyzeMain
+                ? const EnqueuerStrategy()
+                : const TreeShakingEnqueuerStrategy()),
+        codegen = new CodegenEnqueuer(
+            compiler,
+            compiler.backend.createItemCompilationContext,
+            const TreeShakingEnqueuerStrategy()),
+        super(compiler) {
     codegen.task = this;
     resolution.task = this;
 
@@ -101,10 +82,10 @@
   final Compiler compiler; // TODO(ahe): Remove this dependency.
   final EnqueuerStrategy strategy;
   final ItemCompilationContextCreator itemCompilationContextCreator;
-  final Map<String, Set<Element>> instanceMembersByName
-      = new Map<String, Set<Element>>();
-  final Map<String, Set<Element>> instanceFunctionsByName
-      = new Map<String, Set<Element>>();
+  final Map<String, Set<Element>> instanceMembersByName =
+      new Map<String, Set<Element>>();
+  final Map<String, Set<Element>> instanceFunctionsByName =
+      new Map<String, Set<Element>>();
   final Set<ClassElement> _processedClasses = new Set<ClassElement>();
   Set<ClassElement> recentClasses = new Setlet<ClassElement>();
   final Universe universe = new Universe(const TypeMaskStrategy());
@@ -114,17 +95,15 @@
 
   bool queueIsClosed = false;
   EnqueueTask task;
-  native.NativeEnqueuer nativeEnqueuer;  // Set by EnqueueTask
+  native.NativeEnqueuer nativeEnqueuer; // Set by EnqueueTask
 
   bool hasEnqueuedReflectiveElements = false;
   bool hasEnqueuedReflectiveStaticFields = false;
 
   WorldImpactVisitor impactVisitor;
 
-  Enqueuer(this.name,
-           this.compiler,
-           this.itemCompilationContextCreator,
-           this.strategy) {
+  Enqueuer(this.name, this.compiler, this.itemCompilationContextCreator,
+      this.strategy) {
     impactVisitor = new _EnqueuerImpactVisitor(this);
   }
 
@@ -160,8 +139,8 @@
     if (internalAddToWorkList(element) && compiler.options.dumpInfo) {
       // TODO(sigmund): add other missing dependencies (internals, selectors
       // enqueued after allocations), also enable only for the codegen enqueuer.
-      compiler.dumpInfoTask.registerDependency(
-          compiler.currentElement, element);
+      compiler.dumpInfoTask
+          .registerDependency(compiler.currentElement, element);
     }
   }
 
@@ -174,23 +153,20 @@
 
   /// Apply the [worldImpact] of processing [element] to this enqueuer.
   void applyImpact(Element element, WorldImpact worldImpact) {
-    compiler.impactStrategy.visitImpact(
-        element, worldImpact, impactVisitor, impactUse);
+    compiler.impactStrategy
+        .visitImpact(element, worldImpact, impactVisitor, impactUse);
   }
 
-  void registerInstantiatedType(InterfaceType type,
-                                {bool mirrorUsage: false}) {
+  void registerInstantiatedType(InterfaceType type, {bool mirrorUsage: false}) {
     task.measure(() {
       ClassElement cls = type.element;
       cls.ensureResolved(resolution);
       bool isNative = compiler.backend.isNative(cls);
-      universe.registerTypeInstantiation(
-          type,
+      universe.registerTypeInstantiation(type,
           isNative: isNative,
-          byMirrors: mirrorUsage,
-          onImplemented: (ClassElement cls) {
-        compiler.backend.registerImplementedClass(
-                    cls, this, compiler.globalDependencies);
+          byMirrors: mirrorUsage, onImplemented: (ClassElement cls) {
+        compiler.backend
+            .registerImplementedClass(cls, this, compiler.globalDependencies);
       });
       // TODO(johnniwinther): Share this reasoning with [Universe].
       if (!cls.isAbstract || isNative || mirrorUsage) {
@@ -260,8 +236,7 @@
       if (function.name == Identifiers.noSuchMethod_) {
         registerNoSuchMethod(function);
       }
-      if (function.name == Identifiers.call &&
-          !cls.typeVariables.isEmpty) {
+      if (function.name == Identifiers.call && !cls.typeVariables.isEmpty) {
         registerCallMethodWithFreeTypeVariables(function);
       }
       // If there is a property access with the same name as a method we
@@ -273,7 +248,8 @@
       }
       // Store the member in [instanceFunctionsByName] to catch
       // getters on the function.
-      instanceFunctionsByName.putIfAbsent(memberName, () => new Set<Element>())
+      instanceFunctionsByName
+          .putIfAbsent(memberName, () => new Set<Element>())
           .add(member);
       if (universe.hasInvocation(function, compiler.world)) {
         addToWorkList(function);
@@ -303,7 +279,8 @@
 
     // The element is not yet used. Add it to the list of instance
     // members to still be processed.
-    instanceMembersByName.putIfAbsent(memberName, () => new Set<Element>())
+    instanceMembersByName
+        .putIfAbsent(memberName, () => new Set<Element>())
         .add(member);
   }
 
@@ -368,7 +345,7 @@
    * The actual implementation depends on the current compiler phase.
    */
   bool shouldIncludeElementDueToMirrors(Element element,
-                                        {bool includedEnclosing});
+      {bool includedEnclosing});
 
   void logEnqueueReflectiveAction(action, [msg = ""]) {
     if (TRACE_MIRROR_ENQUEUING) {
@@ -380,16 +357,14 @@
   ///
   /// [enclosingWasIncluded] provides a hint whether the enclosing element was
   /// needed for reflection.
-  void enqueueReflectiveConstructor(ConstructorElement ctor,
-                                    bool enclosingWasIncluded) {
+  void enqueueReflectiveConstructor(
+      ConstructorElement ctor, bool enclosingWasIncluded) {
     if (shouldIncludeElementDueToMirrors(ctor,
         includedEnclosing: enclosingWasIncluded)) {
       logEnqueueReflectiveAction(ctor);
       ClassElement cls = ctor.declaration.enclosingClass;
       compiler.backend.registerInstantiatedType(
-          cls.rawType,
-          this,
-          compiler.mirrorDependencies,
+          cls.rawType, this, compiler.mirrorDependencies,
           mirrorUsage: true);
       registerStaticUse(new StaticUse.foreignUse(ctor.declaration));
     }
@@ -401,7 +376,7 @@
   /// needed for reflection.
   void enqueueReflectiveMember(Element element, bool enclosingWasIncluded) {
     if (shouldIncludeElementDueToMirrors(element,
-            includedEnclosing: enclosingWasIncluded)) {
+        includedEnclosing: enclosingWasIncluded)) {
       logEnqueueReflectiveAction(element);
       if (element.isTypedef) {
         TypedefElement typedef = element;
@@ -413,13 +388,14 @@
         // We need to enqueue all members matching this one in subclasses, as
         // well.
         // TODO(herhut): Use TypedSelector.subtype for enqueueing
-        DynamicUse dynamicUse = new DynamicUse(
-            new Selector.fromElement(element), null);
+        DynamicUse dynamicUse =
+            new DynamicUse(new Selector.fromElement(element), null);
         registerDynamicUse(dynamicUse);
         if (element.isField) {
           DynamicUse dynamicUse = new DynamicUse(
-              new Selector.setter(new Name(
-                  element.name, element.library, isSetter: true)), null);
+              new Selector.setter(
+                  new Name(element.name, element.library, isSetter: true)),
+              null);
           registerDynamicUse(dynamicUse);
         }
       }
@@ -431,8 +407,7 @@
   /// [enclosingWasIncluded] provides a hint whether the enclosing element was
   /// needed for reflection.
   void enqueueReflectiveElementsInClass(ClassElement cls,
-                                        Iterable<ClassElement> recents,
-                                        bool enclosingWasIncluded) {
+      Iterable<ClassElement> recents, bool enclosingWasIncluded) {
     if (cls.library.isInternalLibrary || cls.isInjected) return;
     bool includeClass = shouldIncludeElementDueToMirrors(cls,
         includedEnclosing: enclosingWasIncluded);
@@ -441,9 +416,7 @@
       ClassElement decl = cls.declaration;
       decl.ensureResolved(resolution);
       compiler.backend.registerInstantiatedType(
-          decl.rawType,
-          this,
-          compiler.mirrorDependencies,
+          decl.rawType, this, compiler.mirrorDependencies,
           mirrorUsage: true);
     }
     // If the class is never instantiated, we know nothing of it can possibly
@@ -475,9 +448,7 @@
         logEnqueueReflectiveAction(cls);
         cls.ensureResolved(resolution);
         compiler.backend.registerInstantiatedType(
-            cls.rawType,
-            this,
-            compiler.mirrorDependencies,
+            cls.rawType, this, compiler.mirrorDependencies,
             mirrorUsage: true);
       }
     }
@@ -485,10 +456,10 @@
 
   /// Enqeue all local members of the library [lib] if they are required for
   /// reflection.
-  void enqueueReflectiveElementsInLibrary(LibraryElement lib,
-                                          Iterable<ClassElement> recents) {
-    bool includeLibrary = shouldIncludeElementDueToMirrors(lib,
-        includedEnclosing: false);
+  void enqueueReflectiveElementsInLibrary(
+      LibraryElement lib, Iterable<ClassElement> recents) {
+    bool includeLibrary =
+        shouldIncludeElementDueToMirrors(lib, includedEnclosing: false);
     lib.forEachLocalMember((Element member) {
       if (member.isClass) {
         enqueueReflectiveElementsInClass(member, recents, includeLibrary);
@@ -522,7 +493,9 @@
       // Keep looking at new classes until fixpoint is reached.
       logEnqueueReflectiveAction("!START enqueueRecents");
       recents.forEach((ClassElement cls) {
-        enqueueReflectiveElementsInClass(cls, recents,
+        enqueueReflectiveElementsInClass(
+            cls,
+            recents,
             shouldIncludeElementDueToMirrors(cls.library,
                 includedEnclosing: false));
       });
@@ -541,9 +514,7 @@
   }
 
   void processSet(
-      Map<String, Set<Element>> map,
-      String memberName,
-      bool f(Element e)) {
+      Map<String, Set<Element>> map, String memberName, bool f(Element e)) {
     Set<Element> members = map[memberName];
     if (members == null) return;
     // [f] might add elements to [: map[memberName] :] during the loop below
@@ -577,7 +548,8 @@
         if (member.isFunction && selector.isGetter) {
           registerClosurizedMember(member);
         }
-        if (member.isField && compiler.backend.isNative(member.enclosingClass)) {
+        if (member.isField &&
+            compiler.backend.isNative(member.enclosingClass)) {
           if (selector.isGetter || selector.isCall) {
             nativeEnqueuer.registerFieldLoad(member);
             // We have to also handle storing to the field because we only get
@@ -677,8 +649,7 @@
     // Even in checked mode, type annotations for return type and argument
     // types do not imply type checks, so there should never be a check
     // against the type variable of a typedef.
-    assert(!type.isTypeVariable ||
-           !type.element.enclosingElement.isTypedef);
+    assert(!type.isTypeVariable || !type.element.enclosingElement.isTypedef);
   }
 
   void registerCallMethodWithFreeTypeVariables(Element element) {
@@ -748,17 +719,17 @@
    */
   final Queue<DeferredTask> deferredTaskQueue;
 
-  static const ImpactUseCase IMPACT_USE = const ImpactUseCase('ResolutionEnqueuer');
+  static const ImpactUseCase IMPACT_USE =
+      const ImpactUseCase('ResolutionEnqueuer');
 
   ImpactUseCase get impactUse => IMPACT_USE;
 
-  ResolutionEnqueuer(Compiler compiler,
-                     ItemCompilationContext itemCompilationContextCreator(),
-                     EnqueuerStrategy strategy)
-      : super('resolution enqueuer',
-              compiler,
-              itemCompilationContextCreator,
-              strategy),
+  ResolutionEnqueuer(
+      Compiler compiler,
+      ItemCompilationContext itemCompilationContextCreator(),
+      EnqueuerStrategy strategy)
+      : super('resolution enqueuer', compiler, itemCompilationContextCreator,
+            strategy),
         processedElements = new Set<AstElement>(),
         queue = new Queue<ResolutionWorkItem>(),
         deferredTaskQueue = new Queue<DeferredTask>();
@@ -786,8 +757,9 @@
    * yet.
    */
   bool shouldIncludeElementDueToMirrors(Element element,
-                                        {bool includedEnclosing}) {
-    return includedEnclosing || compiler.backend.requiredByMirrorSystem(element);
+      {bool includedEnclosing}) {
+    return includedEnclosing ||
+        compiler.backend.requiredByMirrorSystem(element);
   }
 
   bool internalAddToWorkList(Element element) {
@@ -797,22 +769,21 @@
         message: 'Element $element is not analyzable.'));
     if (hasBeenProcessed(element)) return false;
     if (queueIsClosed) {
-      throw new SpannableAssertionFailure(element,
-          "Resolution work list is closed. Trying to add $element.");
+      throw new SpannableAssertionFailure(
+          element, "Resolution work list is closed. Trying to add $element.");
     }
 
     compiler.world.registerUsedElement(element);
 
-    ResolutionWorkItem workItem = compiler.resolution.createWorkItem(
-        element, itemCompilationContextCreator());
+    ResolutionWorkItem workItem = compiler.resolution
+        .createWorkItem(element, itemCompilationContextCreator());
     queue.add(workItem);
 
     // Enable isolate support if we start using something from the isolate
     // library, or timers for the async library.  We exclude constant fields,
     // which are ending here because their initializing expression is compiled.
     LibraryElement library = element.library;
-    if (!compiler.hasIsolateSupport &&
-        (!element.isField || !element.isConst)) {
+    if (!compiler.hasIsolateSupport && (!element.isField || !element.isConst)) {
       String uri = library.canonicalUri.toString();
       if (uri == 'dart:isolate') {
         enableIsolateSupport();
@@ -861,7 +832,8 @@
    */
   void addDeferredAction(Element element, DeferredAction action) {
     if (queueIsClosed) {
-      throw new SpannableAssertionFailure(element,
+      throw new SpannableAssertionFailure(
+          element,
           "Resolution work list is closed. "
           "Trying to add deferred action for $element");
     }
@@ -901,18 +873,20 @@
 
   bool enabledNoSuchMethod = false;
 
-  static const ImpactUseCase IMPACT_USE = const ImpactUseCase('CodegenEnqueuer');
+  static const ImpactUseCase IMPACT_USE =
+      const ImpactUseCase('CodegenEnqueuer');
 
   ImpactUseCase get impactUse => IMPACT_USE;
 
-  CodegenEnqueuer(Compiler compiler,
-                  ItemCompilationContext itemCompilationContextCreator(),
-                  EnqueuerStrategy strategy)
+  CodegenEnqueuer(
+      Compiler compiler,
+      ItemCompilationContext itemCompilationContextCreator(),
+      EnqueuerStrategy strategy)
       : queue = new Queue<CodegenWorkItem>(),
         newlyEnqueuedElements = compiler.cacheStrategy.newSet(),
         newlySeenSelectors = compiler.cacheStrategy.newSet(),
         super('codegen enqueuer', compiler, itemCompilationContextCreator,
-              strategy);
+            strategy);
 
   bool isProcessed(Element member) =>
       member.isAbstract || generatedCode.containsKey(member);
@@ -925,7 +899,7 @@
    * subtyping constraints into account.
    */
   bool shouldIncludeElementDueToMirrors(Element element,
-                                        {bool includedEnclosing}) {
+      {bool includedEnclosing}) {
     return compiler.backend.isAccessibleByReflection(element);
   }
 
@@ -936,8 +910,8 @@
     // Codegen inlines field initializers. It only needs to generate
     // code for checked setters.
     if (element.isField && element.isInstanceMember) {
-      if (!compiler.options.enableTypeAssertions
-          || element.enclosingElement.isClosure) {
+      if (!compiler.options.enableTypeAssertions ||
+          element.enclosingElement.isClosure) {
         return false;
       }
     }
@@ -947,11 +921,11 @@
     }
 
     if (queueIsClosed) {
-      throw new SpannableAssertionFailure(element,
-          "Codegen work list is closed. Trying to add $element");
+      throw new SpannableAssertionFailure(
+          element, "Codegen work list is closed. Trying to add $element");
     }
-    CodegenWorkItem workItem = new CodegenWorkItem(
-        compiler, element, itemCompilationContextCreator());
+    CodegenWorkItem workItem =
+        new CodegenWorkItem(compiler, element, itemCompilationContextCreator());
     queue.add(workItem);
     return true;
   }
@@ -992,11 +966,11 @@
   bool checkNoEnqueuedInvokedInstanceMethods(Enqueuer enqueuer) {
     enqueuer.task.measure(() {
       // Run through the classes and see if we need to compile methods.
-      for (ClassElement classElement in
-               enqueuer.universe.directlyInstantiatedClasses) {
+      for (ClassElement classElement
+          in enqueuer.universe.directlyInstantiatedClasses) {
         for (ClassElement currentClass = classElement;
-             currentClass != null;
-             currentClass = currentClass.superclass) {
+            currentClass != null;
+            currentClass = currentClass.superclass) {
           enqueuer.processInstantiatedClassMembers(currentClass);
         }
       }
diff --git a/pkg/compiler/lib/src/hash/sha1.dart b/pkg/compiler/lib/src/hash/sha1.dart
index 02eae83..8e5eec2 100644
--- a/pkg/compiler/lib/src/hash/sha1.dart
+++ b/pkg/compiler/lib/src/hash/sha1.dart
@@ -54,15 +54,11 @@
    *
    */
   String _bytesToBase64(List<int> bytes,
-                              {bool urlSafe : false,
-                               bool addLineSeparator : false}) {
-    return _CryptoUtils.bytesToBase64(bytes,
-                                      urlSafe,
-                                      addLineSeparator);
+      {bool urlSafe: false, bool addLineSeparator: false}) {
+    return _CryptoUtils.bytesToBase64(bytes, urlSafe, addLineSeparator);
   }
 }
 
-
 // Constants.
 const _MASK_8 = 0xff;
 const _MASK_32 = 0xffffffff;
@@ -73,9 +69,9 @@
 
 // Rotate left limiting to unsigned 32-bit values.
 int _rotl32(int val, int shift) {
-var mod_shift = shift & 31;
-return ((val << mod_shift) & _MASK_32) |
-   ((val & _MASK_32) >> (32 - mod_shift));
+  var mod_shift = shift & 31;
+  return ((val << mod_shift) & _MASK_32) |
+      ((val & _MASK_32) >> (32 - mod_shift));
 }
 
 // Base class encapsulating common behavior for cryptographic hash
@@ -90,9 +86,8 @@
   List<int> _pendingData;
   bool _digestCalled = false;
 
-  _HashBase(int chunkSizeInWords,
-            int digestSizeInWords,
-            bool this._bigEndianWords)
+  _HashBase(
+      int chunkSizeInWords, int digestSizeInWords, bool this._bigEndianWords)
       : _pendingData = [],
         _currentChunk = new List(chunkSizeInWords),
         _h = new List(digestSizeInWords),
@@ -101,13 +96,13 @@
 
   // Update the hasher with more data.
   void add(List<int> data) {
-     if (_digestCalled) {
-       throw new StateError(
-           'Hash update method called after digest was retrieved');
-     }
-     _lengthInBytes += data.length;
-     _pendingData.addAll(data);
-     _iterate();
+    if (_digestCalled) {
+      throw new StateError(
+          'Hash update method called after digest was retrieved');
+    }
+    _lengthInBytes += data.length;
+    _pendingData.addAll(data);
+    _iterate();
   }
 
   // Finish the hash computation and return the digest string.
@@ -124,7 +119,7 @@
 
   // Returns the block size of the hash in bytes.
   int get blockSize {
-   return _chunkSizeInWords * _BYTES_PER_WORD;
+    return _chunkSizeInWords * _BYTES_PER_WORD;
   }
 
   // One round of the hash computation.
@@ -209,7 +204,6 @@
   }
 }
 
-
 /**
  * Interface for cryptographic hash functions.
  *
@@ -252,7 +246,9 @@
   final List<int> _w;
 
   // Construct a SHA1 hasher object.
-  SHA1() : _w = new List(80), super(16, 5, true) {
+  SHA1()
+      : _w = new List(80),
+        super(16, 5, true) {
     _h[0] = 0x67452301;
     _h[1] = 0xEFCDAB89;
     _h[2] = 0x98BADCFE;
@@ -305,10 +301,9 @@
 }
 
 abstract class _CryptoUtils {
-
   static const int PAD = 61; // '='
-  static const int CR = 13;  // '\r'
-  static const int LF = 10;  // '\n'
+  static const int CR = 13; // '\r'
+  static const int LF = 10; // '\n'
   static const int LINE_LENGTH = 76;
 
   static const String _encodeTable =
@@ -318,8 +313,7 @@
       "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
 
   static String bytesToBase64(List<int> bytes,
-                              [bool urlSafe = false,
-                               bool addLineSeparator = false]) {
+      [bool urlSafe = false, bool addLineSeparator = false]) {
     int len = bytes.length;
     if (len == 0) {
       return "";
@@ -340,11 +334,11 @@
     int j = 0, i = 0, c = 0;
     while (i < chunkLength) {
       int x = ((bytes[i++] << 16) & 0xFFFFFF) |
-              ((bytes[i++] << 8) & 0xFFFFFF) |
-                bytes[i++];
+          ((bytes[i++] << 8) & 0xFFFFFF) |
+          bytes[i++];
       out[j++] = lookup.codeUnitAt(x >> 18);
       out[j++] = lookup.codeUnitAt((x >> 12) & 0x3F);
-      out[j++] = lookup.codeUnitAt((x >> 6)  & 0x3F);
+      out[j++] = lookup.codeUnitAt((x >> 6) & 0x3F);
       out[j++] = lookup.codeUnitAt(x & 0x3f);
       // Add optional line separator for each 76 char output.
       if (addLineSeparator && ++c == 19 && j < outputLen - 2) {
diff --git a/pkg/compiler/lib/src/helpers/debug_collection.dart b/pkg/compiler/lib/src/helpers/debug_collection.dart
index 74a3d2e..c0276cf 100644
--- a/pkg/compiler/lib/src/helpers/debug_collection.dart
+++ b/pkg/compiler/lib/src/helpers/debug_collection.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-
 typedef void DebugCallback(String methodName, var arg1, var arg2);
 
 class DebugMap<K, V> implements Map<K, V> {
@@ -84,8 +83,8 @@
 
   E reduce(E combine(E value, E element)) => iterable.reduce(combine);
 
-  dynamic fold(var initialValue,
-               dynamic combine(var previousValue, E element)) {
+  dynamic fold(
+      var initialValue, dynamic combine(var previousValue, E element)) {
     return iterable.fold(initialValue, combine);
   }
 
@@ -95,7 +94,7 @@
 
   bool any(bool test(E element)) => iterable.any(test);
 
-  List<E> toList({ bool growable: true }) {
+  List<E> toList({bool growable: true}) {
     return iterable.toList(growable: growable);
   }
 
@@ -121,7 +120,7 @@
 
   E get single => iterable.single;
 
-  E firstWhere(bool test(E element), { E orElse() }) {
+  E firstWhere(bool test(E element), {E orElse()}) {
     return iterable.firstWhere(test, orElse: orElse);
   }
 
@@ -132,7 +131,6 @@
   E singleWhere(bool test(E element)) => iterable.singleWhere(test);
 
   E elementAt(int index) => iterable.elementAt(index);
-
 }
 
 class DebugList<E> extends DebugIterable<E> implements List<E> {
@@ -268,11 +266,11 @@
 /// at the call site by running test programs and adding to [runtimeTypes] when
 /// new type are found.
 void assertType(String name, List<String> runtimeTypes, var object,
-                {bool showObjects: false}) {
+    {bool showObjects: false}) {
   String runtimeType = '${object.runtimeType}';
   if (runtimeTypes != null && runtimeTypes.contains(runtimeType)) return;
   throw '$name: $runtimeType'
-        '${showObjects ? ' ($object)' : ''}';
+      '${showObjects ? ' ($object)' : ''}';
 }
 
 /// Callback for the [addCallback] of [DebugMap] that throws an exception if
@@ -287,7 +285,7 @@
   final bool showObjects;
 
   const MapTypeAsserter(this.name, this.runtimeTypes,
-                       {bool this.showObjects: false});
+      {bool this.showObjects: false});
 
   void call(String methodName, var key, var value) {
     check(key, value, '$methodName: ');
@@ -299,7 +297,7 @@
     List<String> valuesTypes = runtimeTypes[keyType];
     if (valuesTypes != null && valuesTypes.contains(valueType)) return;
     throw '$name: $text$keyType => $valueType'
-          '${showObjects ? ' ($key => $value)' : ''}';
+        '${showObjects ? ' ($key => $value)' : ''}';
   }
 }
 
@@ -315,7 +313,7 @@
   final bool showObjects;
 
   const CollectionTypeAsserter(this.name, this.runtimeTypes,
-                       {bool this.showObjects: false});
+      {bool this.showObjects: false});
 
   void call(String methodName, var element, _) {
     check(element, '$methodName: ');
@@ -325,6 +323,6 @@
     String elementType = '${element.runtimeType}';
     if (runtimeTypes.contains(elementType)) return;
     throw '$name: $text$elementType'
-          '${showObjects ? ' ($element)' : ''}';
+        '${showObjects ? ' ($element)' : ''}';
   }
 }
diff --git a/pkg/compiler/lib/src/helpers/expensive_map.dart b/pkg/compiler/lib/src/helpers/expensive_map.dart
index 68d106e..8b382d9 100644
--- a/pkg/compiler/lib/src/helpers/expensive_map.dart
+++ b/pkg/compiler/lib/src/helpers/expensive_map.dart
@@ -2,14 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-
 /**
  * The expensive map is a data structure useful for tracking down
  * excessive memory usage due to large maps. It acts as an ordinary
  * hash map, but it uses 10 times more memory (by default).
  */
 class ExpensiveMap<K, V> implements Map<K, V> {
-
   final List _maps;
 
   ExpensiveMap([int copies = 10]) : _maps = new List(copies) {
@@ -29,13 +27,13 @@
   bool containsKey(K key) => _maps[0].containsKey(key);
   bool containsValue(V value) => _maps[0].containsValue(value);
 
-  V operator[](K key) => _maps[0][key];
+  V operator [](K key) => _maps[0][key];
 
   void forEach(void action(K key, V value)) {
     _maps[0].forEach(action);
   }
 
-  void operator[]=(K key, V value) {
+  void operator []=(K key, V value) {
     for (int i = 0; i < _maps.length; i++) {
       _maps[i][key] = value;
     }
diff --git a/pkg/compiler/lib/src/helpers/expensive_set.dart b/pkg/compiler/lib/src/helpers/expensive_set.dart
index c74588b..2b34cfb 100644
--- a/pkg/compiler/lib/src/helpers/expensive_set.dart
+++ b/pkg/compiler/lib/src/helpers/expensive_set.dart
@@ -10,7 +10,6 @@
  * hash set, but it uses 10 times more memory (by default).
  */
 class ExpensiveSet<E> extends IterableBase<E> implements Set<E> {
-
   final List _sets;
 
   ExpensiveSet([int copies = 10]) : _sets = new List(copies) {
diff --git a/pkg/compiler/lib/src/helpers/helpers.dart b/pkg/compiler/lib/src/helpers/helpers.dart
index 4754edd..6c4cc63 100644
--- a/pkg/compiler/lib/src/helpers/helpers.dart
+++ b/pkg/compiler/lib/src/helpers/helpers.dart
@@ -8,8 +8,7 @@
 library dart2js.helpers;
 
 import '../common.dart';
-import '../diagnostics/invariant.dart' show
-    DEBUG_MODE;
+import '../diagnostics/invariant.dart' show DEBUG_MODE;
 import '../util/util.dart';
 
 import 'trace.dart';
@@ -36,6 +35,7 @@
 class _DebugIndentation extends Indentation {
   final String indentationUnit = " ";
 }
+
 _DebugIndentation _indentation = new _DebugIndentation();
 
 /// Function signature of [debugPrint].
@@ -79,9 +79,8 @@
 }
 
 /// Function signature of [reportHere].
-typedef ReportHere(DiagnosticReporter reporter,
-                   Spannable node,
-                   String debugMessage);
+typedef ReportHere(
+    DiagnosticReporter reporter, Spannable node, String debugMessage);
 
 /// Print a message with a source location.
 ReportHere get reportHere {
@@ -91,8 +90,8 @@
 
 /// Implementation of [reportHere]
 _reportHere(DiagnosticReporter reporter, Spannable node, String debugMessage) {
-  reporter.reportInfo(node,
-      MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
+  reporter
+      .reportInfo(node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
 }
 
 /// Set of tracked objects used by [track] and [ifTracked].
diff --git a/pkg/compiler/lib/src/helpers/stats.dart b/pkg/compiler/lib/src/helpers/stats.dart
index 1d5675f..c8f6c0da0 100644
--- a/pkg/compiler/lib/src/helpers/stats.dart
+++ b/pkg/compiler/lib/src/helpers/stats.dart
@@ -2,18 +2,15 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'dart:async' show
-    EventSink;
+import 'dart:async' show EventSink;
 import 'dart:collection';
 import 'dart:convert';
 
 import '../../compiler.dart';
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../util/util.dart';
 
-
 // Helper methods for statistics.
 
 /// Current stats collector. Use [enableStatsOutput] to enable recording of
@@ -37,11 +34,12 @@
 /// If [xml] is `true`, stats output is formatted as XML with a default
 /// extension of 'xml', otherwise the output is indented text with a default
 /// extension of 'log'.
-void enableStatsOutput({CompilerOutputProvider outputProvider,
-                        bool xml: true,
-                        String name: 'stats',
-                        String extension,
-                        int examples: 10}) {
+void enableStatsOutput(
+    {CompilerOutputProvider outputProvider,
+    bool xml: true,
+    String name: 'stats',
+    String extension,
+    int examples: 10}) {
   if (_stats != null) {
     throw new StateError('Stats have already been initialized.');
   }
@@ -197,7 +195,7 @@
   /// elements are looked up in [dataA] or [dataB] using [dataA] as the primary
   /// source.
   void dumpCorrelation(idA, Iterable a, idB, Iterable b,
-                       {Map dataA, Map dataB}) {}
+      {Map dataA, Map dataB}) {}
 }
 
 /// Interface for printing output data.
@@ -250,13 +248,13 @@
 
   /// Start a stat entry for [id] with additional [data].
   void open(String id,
-            [Map<String, dynamic> data = const <String, dynamic>{}]) {}
+      [Map<String, dynamic> data = const <String, dynamic>{}]) {}
 
   /// Create a stat entry for [id] with additional [data] and content created by
   /// [createChildContent].
   void child(String id,
-             [Map<String, dynamic> data = const <String, dynamic>{},
-              void createChildContent()]) {
+      [Map<String, dynamic> data = const <String, dynamic>{},
+      void createChildContent()]) {
     open(id, data);
     if (createChildContent != null) createChildContent();
     close(id);
@@ -277,8 +275,7 @@
   final int examples;
   final StatsOutput output;
 
-  BasePrinter({this.output: const DebugOutput(),
-               this.examples: 10}) {
+  BasePrinter({this.output: const DebugOutput(), this.examples: 10}) {
     indentationUnit = " ";
   }
 }
@@ -287,12 +284,11 @@
 class ConsolePrinter extends BasePrinter {
   int extraLevel = 0;
 
-  ConsolePrinter({StatsOutput output: const DebugOutput(),
-                  int examples: 10})
+  ConsolePrinter({StatsOutput output: const DebugOutput(), int examples: 10})
       : super(output: output, examples: examples);
 
   void open(String id,
-            [Map<String, dynamic> data = const <String, dynamic>{}]) {
+      [Map<String, dynamic> data = const <String, dynamic>{}]) {
     if (extraLevel > 0) return;
 
     StringBuffer sb = new StringBuffer();
@@ -341,8 +337,7 @@
   static const HtmlEscape escape = const HtmlEscape();
   bool opened = false;
 
-  XMLPrinter({output: const DebugOutput(),
-              int examples: 10})
+  XMLPrinter({output: const DebugOutput(), int examples: 10})
       : super(output: output, examples: examples);
 
   void start(String id) {
@@ -358,7 +353,7 @@
   }
 
   void open(String id,
-            [Map<String, dynamic> data = const <String, dynamic>{}]) {
+      [Map<String, dynamic> data = const <String, dynamic>{}]) {
     StringBuffer sb = new StringBuffer();
     sb.write(indentation);
     sb.write('<$id');
@@ -400,9 +395,8 @@
   _StackTraceNode.leaf(StackTraceLines stackTrace)
       : this(stackTrace.lines, 1, const []);
 
-  _StackTraceNode.node(List<StackTraceLine> commonPrefix,
-                       _StackTraceNode first,
-                       _StackTraceNode second)
+  _StackTraceNode.node(List<StackTraceLine> commonPrefix, _StackTraceNode first,
+      _StackTraceNode second)
       : this(commonPrefix, first.count + second.count, [first, second]);
 
   void add(StackTraceLines stackTrace) {
@@ -503,7 +497,8 @@
     printer.open('trace', {
       'id': id,
       'totalCount': totalCount,
-      'sampleFrequency': sampleFrequency});
+      'sampleFrequency': sampleFrequency
+    });
     dumpSubtraces(printer);
     printer.close('trace');
   }
@@ -576,9 +571,9 @@
     if (sampleFrequency == null) {
       sampleFrequency = stackTraceSampleFrequency;
     }
-    traceMap.putIfAbsent(key,
-        () => new _StackTraceTree(key, sampleFrequency)).sample();
-
+    traceMap
+        .putIfAbsent(key, () => new _StackTraceTree(key, sampleFrequency))
+        .sample();
   }
 
   Iterable getList(String key) {
@@ -606,7 +601,6 @@
             limit: printer.examples, dataMap: set);
       });
     });
-
   }
 
   void dumpFrequencies() {
@@ -667,14 +661,11 @@
           (examplesLimit == 0 || !hasData(examples.first))) {
         printer.child('examples', {'count': count, 'example': examples.first});
       } else {
-        printer.child('examples',
-            {'count': count, 'examples': examples.length},
+        printer.child('examples', {'count': count, 'examples': examples.length},
             () {
           examples.forEach((example) {
-            dumpIterable(
-                'examples', '$example', map[example],
-                limit: examplesLimit,
-                includeCount: false);
+            dumpIterable('examples', '$example', map[example],
+                limit: examplesLimit, includeCount: false);
           });
         });
       }
@@ -698,22 +689,22 @@
   }
 
   void dumpCorrelation(keyA, Iterable a, keyB, Iterable b,
-                       {Map dataA, Map dataB}) {
+      {Map dataA, Map dataB}) {
     printer.child('correlations', {'title': '$keyA vs $keyB'}, () {
       List aAndB = a.where((e) => e != null && b.contains(e)).toList();
       List aAndNotB = a.where((e) => e != null && !b.contains(e)).toList();
       List notAandB = b.where((e) => e != null && !a.contains(e)).toList();
-      dumpIterable('correlation', '$keyA && $keyB', aAndB, dataMap: dataA,
-          limit: printer.examples);
-      dumpIterable('correlation', '$keyA && !$keyB', aAndNotB, dataMap: dataA,
-          limit: printer.examples);
-      dumpIterable('correlation', '!$keyA && $keyB', notAandB, dataMap: dataB,
-          limit: printer.examples);
+      dumpIterable('correlation', '$keyA && $keyB', aAndB,
+          dataMap: dataA, limit: printer.examples);
+      dumpIterable('correlation', '$keyA && !$keyB', aAndNotB,
+          dataMap: dataA, limit: printer.examples);
+      dumpIterable('correlation', '!$keyA && $keyB', notAandB,
+          dataMap: dataB, limit: printer.examples);
     });
   }
 
   void dumpIterable(String tag, String title, Iterable iterable,
-                    {int limit, Map dataMap, bool includeCount: true}) {
+      {int limit, Map dataMap, bool includeCount: true}) {
     if (limit == 0) return;
 
     Map childData = {};
@@ -758,9 +749,9 @@
 /// If [isValidKey] is provided, this is used to determine with a value of [map]
 /// is a potential key of the inversion map.
 Map<dynamic, Set> inverseMap(Map map,
-                             {bool equals(key1, key2),
-                              int hashCode(key),
-                              bool isValidKey(potentialKey)}) {
+    {bool equals(key1, key2),
+    int hashCode(key),
+    bool isValidKey(potentialKey)}) {
   Map<dynamic, Set> result = new LinkedHashMap<dynamic, Set>(
       equals: equals, hashCode: hashCode, isValidKey: isValidKey);
   map.forEach((k, v) {
@@ -788,11 +779,10 @@
 
 /// Returns a new map in which the keys of [map] are sorted using [compare].
 /// If [compare] is null, the keys must be [Comparable].
-Map sortMap(Map map, [int compare(a,b)]) {
+Map sortMap(Map map, [int compare(a, b)]) {
   List keys = map.keys.toList();
   keys.sort(compare);
   Map sortedMap = new Map();
   keys.forEach((k) => sortedMap[k] = map[k]);
   return sortedMap;
 }
-
diff --git a/pkg/compiler/lib/src/helpers/trace.dart b/pkg/compiler/lib/src/helpers/trace.dart
index 671d842..021ba97 100644
--- a/pkg/compiler/lib/src/helpers/trace.dart
+++ b/pkg/compiler/lib/src/helpers/trace.dart
@@ -7,9 +7,7 @@
 
 /// Function signature for [trace].
 typedef void Trace(String message,
-                   {bool condition(String stackTrace),
-                    int limit,
-                    bool throwOnPrint});
+    {bool condition(String stackTrace), int limit, bool throwOnPrint});
 
 /**
  * Helper method for printing stack traces for debugging.
@@ -33,15 +31,15 @@
   return _trace;
 }
 
-void _trace(String message, {bool condition(String stackTrace), int limit,
-                             bool throwOnPrint: false}) {
+void _trace(String message,
+    {bool condition(String stackTrace), int limit, bool throwOnPrint: false}) {
   try {
     throw '';
   } catch (e, s) {
     String stackTrace;
     try {
-      stackTrace = prettifyStackTrace(
-          s, rangeStart: 1, rangeEnd: limit, filePrefix: stackTraceFilePrefix);
+      stackTrace = prettifyStackTrace(s,
+          rangeStart: 1, rangeEnd: limit, filePrefix: stackTraceFilePrefix);
     } catch (e) {
       print(e);
       stackTrace = '$s';
@@ -61,12 +59,9 @@
 }
 
 /// Function signature of [traceAndReport].
-typedef void TraceAndReport(DiagnosticReporter reporter,
-                            Spannable node,
-                            String message,
-                            {bool condition(String stackTrace),
-                             int limit,
-                             bool throwOnPrint});
+typedef void TraceAndReport(
+    DiagnosticReporter reporter, Spannable node, String message,
+    {bool condition(String stackTrace), int limit, bool throwOnPrint});
 
 /// Calls [reportHere] and [trace] with the same message.
 TraceAndReport get traceAndReport {
@@ -78,14 +73,11 @@
 TraceAndReport get reportAndTrace => traceAndReport;
 
 /// Implementation of [traceAndReport].
-void _traceAndReport(DiagnosticReporter reporter,
-                     Spannable node,
-                     String message,
-                     {bool condition(String stackTrace), int limit,
-                      bool throwOnPrint: false}) {
-
+void _traceAndReport(
+    DiagnosticReporter reporter, Spannable node, String message,
+    {bool condition(String stackTrace), int limit, bool throwOnPrint: false}) {
   trace(message, limit: limit, throwOnPrint: throwOnPrint,
-        condition: (String stackTrace) {
+      condition: (String stackTrace) {
     bool result = condition != null ? condition(stackTrace) : true;
     if (result) {
       reportHere(reporter, node, message);
@@ -99,15 +91,15 @@
 /// Use [offset] to discard the first [offset] calls of the call stack. Defaults
 /// to `1`, that is, discard the call to [stackTrace] itself. Use [limit] to
 /// limit the length of the stack trace lines.
-StackTraceLines stackTrace({int offset: 1,
-                            int limit: null}) {
+StackTraceLines stackTrace({int offset: 1, int limit: null}) {
   int rangeStart = offset;
   int rangeEnd = limit == null ? null : rangeStart + limit;
   try {
     throw '';
   } catch (_, stackTrace) {
     return new StackTraceLines.fromTrace(stackTrace,
-        rangeStart: offset, rangeEnd: rangeEnd,
+        rangeStart: offset,
+        rangeEnd: rangeEnd,
         filePrefix: stackTraceFilePrefix);
   }
   return null;
@@ -121,10 +113,7 @@
   final int maxColumnNoLength;
 
   factory StackTraceLines.fromTrace(StackTrace s,
-                                    {int rangeStart,
-                                     int rangeEnd,
-                                     String filePrefix,
-                                     String lambda: r'?'}) {
+      {int rangeStart, int rangeEnd, String filePrefix, String lambda: r'?'}) {
     final RegExp indexPattern = new RegExp(r'#\d+\s*');
     int index = -1;
     int maxFileLength = 0;
@@ -153,13 +142,13 @@
         int leftParenPos = line.indexOf('(');
         int rightParenPos = line.indexOf(')', leftParenPos);
         int lastColon = line.lastIndexOf(':', rightParenPos);
-        int nextToLastColon = line.lastIndexOf(':', lastColon-1);
+        int nextToLastColon = line.lastIndexOf(':', lastColon - 1);
 
         String lineNo;
         String columnNo;
         if (nextToLastColon != -1) {
-          lineNo = line.substring(nextToLastColon+1, lastColon);
-          columnNo = line.substring(lastColon+1, rightParenPos);
+          lineNo = line.substring(nextToLastColon + 1, lastColon);
+          columnNo = line.substring(lastColon + 1, rightParenPos);
           try {
             int.parse(columnNo);
             try {
@@ -177,7 +166,7 @@
             nextToLastColon = rightParenPos;
           }
         } else {
-          lineNo = line.substring(lastColon+1, rightParenPos);
+          lineNo = line.substring(lastColon + 1, rightParenPos);
           columnNo = '';
           try {
             int.parse(lineNo);
@@ -197,14 +186,14 @@
           maxColumnNoLength = columnNo.length;
         }
 
-        String file = line.substring(leftParenPos+1, nextToLastColon);
+        String file = line.substring(leftParenPos + 1, nextToLastColon);
         if (filePrefix != null && file.startsWith(filePrefix)) {
           file = file.substring(filePrefix.length);
         }
         if (file.length > maxFileLength) {
           maxFileLength = file.length;
         }
-        String method = line.substring(0, leftParenPos-1);
+        String method = line.substring(0, leftParenPos - 1);
         if (lambda != null) {
           method = method.replaceAll('<anonymous closure>', lambda);
         }
@@ -217,31 +206,25 @@
         lines, maxFileLength, maxLineNoLength, maxColumnNoLength);
   }
 
-  StackTraceLines.fromLines(this.lines,
-                            this.maxFileLength,
-                            this.maxLineNoLength,
-                            this.maxColumnNoLength);
+  StackTraceLines.fromLines(this.lines, this.maxFileLength,
+      this.maxLineNoLength, this.maxColumnNoLength);
 
   StackTraceLines subtrace(int offset) {
-    return new StackTraceLines.fromLines(
-        lines.sublist(offset),
-        maxFileLength,
-        maxLineNoLength,
-        maxColumnNoLength);
+    return new StackTraceLines.fromLines(lines.sublist(offset), maxFileLength,
+        maxLineNoLength, maxColumnNoLength);
   }
 
-  String prettify({bool showColumnNo: false,
-                   bool showDots: true}) {
+  String prettify({bool showColumnNo: false, bool showDots: true}) {
     StringBuffer sb = new StringBuffer();
     bool dots = true;
     for (StackTraceLine line in lines) {
       sb.write('  ');
       line.printOn(sb,
-        fileLength: maxFileLength,
-        padding: showDots && dots ? ' .' : ' ',
-        lineNoLength: maxLineNoLength,
-        showColumnNo: showColumnNo,
-        columnNoLength: maxColumnNoLength);
+          fileLength: maxFileLength,
+          padding: showDots && dots ? ' .' : ' ',
+          lineNoLength: maxLineNoLength,
+          showColumnNo: showColumnNo,
+          columnNoLength: maxColumnNoLength);
 
       dots = !dots;
     }
@@ -261,15 +244,15 @@
   final String columnNo;
   final String method;
 
-  StackTraceLine(this.index, this.file, this.lineNo,
-                  this.columnNo, this.method);
+  StackTraceLine(
+      this.index, this.file, this.lineNo, this.columnNo, this.method);
 
   void printOn(StringBuffer sb,
-               {String padding: ' ',
-                int fileLength,
-                int lineNoLength,
-                int columnNoLength,
-                bool showColumnNo: false}) {
+      {String padding: ' ',
+      int fileLength,
+      int lineNoLength,
+      int columnNoLength,
+      bool showColumnNo: false}) {
     String fileText = '${file} ';
     if (fileLength != null) {
       fileText = pad(fileText, fileLength, dots: padding);
@@ -278,29 +261,29 @@
     if (lineNoLength != null) {
       lineNoText = pad(lineNoText, lineNoLength, padLeft: true);
     }
-    String columnNoText = showColumnNo ? '': columnNo;
+    String columnNoText = showColumnNo ? '' : columnNo;
     if (columnNoLength != null) {
-        columnNoText = ':${pad(columnNoText, columnNoLength)}';
+      columnNoText = ':${pad(columnNoText, columnNoLength)}';
     }
     sb.write('$fileText $lineNoText$columnNoText $method\n');
   }
 
   int get hashCode {
     return 13 * index +
-           17 * file.hashCode +
-           19 * lineNo.hashCode +
-           23 * columnNo.hashCode +
-           29 * method.hashCode;
+        17 * file.hashCode +
+        19 * lineNo.hashCode +
+        23 * columnNo.hashCode +
+        29 * method.hashCode;
   }
 
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! StackTraceLine) return false;
     return index == other.index &&
-           file == other.file &&
-           lineNo == other.lineNo &&
-           columnNo == other.columnNo &&
-           method == other.method;
+        file == other.file &&
+        lineNo == other.lineNo &&
+        columnNo == other.columnNo &&
+        method == other.method;
   }
 
   String toString() => "$method @ $file [$lineNo:$columnNo]";
@@ -324,16 +307,18 @@
  * If [lambda] is non-null, anonymous closures are printed as [lambda].
  */
 String prettifyStackTrace(StackTrace stackTrace,
-                          {int rangeStart,
-                           int rangeEnd,
-                           bool showColumnNo: false,
-                           bool showDots: true,
-                           String filePrefix,
-                           String lambda: r'?'}) {
+    {int rangeStart,
+    int rangeEnd,
+    bool showColumnNo: false,
+    bool showDots: true,
+    String filePrefix,
+    String lambda: r'?'}) {
   return new StackTraceLines.fromTrace(stackTrace,
-      rangeStart: rangeStart, rangeEnd: rangeEnd,
-      filePrefix: filePrefix, lambda: lambda)
-    .prettify(showColumnNo: showColumnNo, showDots: showDots);
+          rangeStart: rangeStart,
+          rangeEnd: rangeEnd,
+          filePrefix: filePrefix,
+          lambda: lambda)
+      .prettify(showColumnNo: showColumnNo, showDots: showDots);
 }
 
 /**
@@ -343,7 +328,7 @@
  * A repetition of the [dots] text is used for padding.
  */
 String pad(String text, int intendedLength,
-           {bool padLeft: false, String dots: ' '}) {
+    {bool padLeft: false, String dots: ' '}) {
   if (text.length == intendedLength) return text;
   if (text.length > intendedLength) return text.substring(0, intendedLength);
   if (dots == null || dots.isEmpty) dots = ' ';
@@ -352,7 +337,7 @@
   if (!padLeft) {
     sb.write(text);
   }
-  for (int index = text.length ; index < intendedLength ; index ++) {
+  for (int index = text.length; index < intendedLength; index++) {
     int dotsIndex = index % dotsLength;
     sb.write(dots.substring(dotsIndex, dotsIndex + 1));
   }
diff --git a/pkg/compiler/lib/src/helpers/track_map.dart b/pkg/compiler/lib/src/helpers/track_map.dart
index b57be3a..8445efe 100644
--- a/pkg/compiler/lib/src/helpers/track_map.dart
+++ b/pkg/compiler/lib/src/helpers/track_map.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-
 /**
  * The track map is a simple wrapper around a map that keeps track
  * of the 'final' size of maps grouped by description. It allows
@@ -22,7 +21,7 @@
   TrackMap._internal(this._counts) : _map = new Map<K, V>();
 
   factory TrackMap(String description) {
-    List counts = _countsMap.putIfAbsent(description, () => [ 0 ]);
+    List counts = _countsMap.putIfAbsent(description, () => [0]);
     Map result = new TrackMap<K, V>._internal(counts);
     counts[0]++;
     return result;
@@ -61,14 +60,14 @@
   bool containsKey(K key) => _map.containsKey(key);
   bool containsValue(V value) => _map.containsValue(value);
 
-  V operator[](K key) => _map[key];
+  V operator [](K key) => _map[key];
   String toString() => _map.toString();
 
   void forEach(void action(K key, V value)) {
     _map.forEach(action);
   }
 
-  void operator[]=(K key, V value) {
+  void operator []=(K key, V value) {
     if (!_map.containsKey(key)) {
       _notifyLengthChanged(1);
       _map[key] = value;
diff --git a/pkg/compiler/lib/src/id_generator.dart b/pkg/compiler/lib/src/id_generator.dart
new file mode 100644
index 0000000..4c92ea9
--- /dev/null
+++ b/pkg/compiler/lib/src/id_generator.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// A generator of globally unique identifiers.
+class IdGenerator {
+  int _nextFreeId = 0;
+
+  /// Returns the next free identifier.
+  ///
+  /// This identifier is guaranteed to be unique.
+  int getNextFreeId() => _nextFreeId++;
+}
\ No newline at end of file
diff --git a/pkg/compiler/lib/src/inferrer/closure_tracer.dart b/pkg/compiler/lib/src/inferrer/closure_tracer.dart
index b7d1ef7..ed2d198 100644
--- a/pkg/compiler/lib/src/inferrer/closure_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/closure_tracer.dart
@@ -12,7 +12,6 @@
 import 'type_graph_nodes.dart';
 import 'debug.dart' as debug;
 
-
 class ClosureTracerVisitor extends TracerVisitor<ApplyableTypeInformation> {
   final Iterable<FunctionElement> tracedElements;
   final List<CallSiteTypeInformation> _callsToAnalyze =
@@ -25,7 +24,7 @@
     analyze();
     if (!continueAnalyzing) return;
     _callsToAnalyze.forEach(_analyzeCall);
-    for(FunctionElement e in tracedElements) {
+    for (FunctionElement e in tracedElements) {
       e.functionSignature.forEachParameter((Element parameter) {
         ElementTypeInformation info =
             inferrer.types.getInferredTypeOf(parameter);
@@ -50,8 +49,9 @@
     TypeMask mask = info.mask;
     tracedElements.forEach((FunctionElement functionElement) {
       if (!selector.signatureApplies(functionElement)) return;
-      inferrer.updateParameterAssignments(info, functionElement, info.arguments,
-          selector, mask, remove: false, addToQueue: false);
+      inferrer.updateParameterAssignments(
+          info, functionElement, info.arguments, selector, mask,
+          remove: false, addToQueue: false);
     });
   }
 
@@ -75,10 +75,10 @@
         bailout('Used in JS ${info.call}');
       }
     }
-    if (called.isGetter
-        && info.selector != null
-        && info.selector.isCall
-        && inferrer.types.getInferredTypeOf(called) == currentUser) {
+    if (called.isGetter &&
+        info.selector != null &&
+        info.selector.isCall &&
+        inferrer.types.getInferredTypeOf(called) == currentUser) {
       // This node can be a closure call as well. For example, `foo()`
       // where `foo` is a getter.
       _registerCallForLaterAnalysis(info);
@@ -125,9 +125,9 @@
   @override
   visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
     super.visitStaticCallSiteTypeInformation(info);
-    if (info.calledElement == tracedElements.first
-        && info.selector != null
-        && info.selector.isGetter) {
+    if (info.calledElement == tracedElements.first &&
+        info.selector != null &&
+        info.selector.isGetter) {
       addNewEscapeInformation(info);
     }
   }
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart b/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
index 85a81bc..5d4623a 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
@@ -4,32 +4,24 @@
 
 library inferrer_visitor;
 
-import 'dart:collection' show
-    IterableMixin;
+import 'dart:collection' show IterableMixin;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../constants/constant_system.dart';
 import '../constants/expressions.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../resolution/operators.dart';
 import '../resolution/semantic_visitor.dart';
-import '../resolution/tree_elements.dart' show
-    TreeElements;
+import '../resolution/tree_elements.dart' show TreeElements;
 import '../tree/tree.dart';
-import '../types/types.dart' show
-    TypeMask;
-import '../types/constants.dart' show
-    computeTypeMask;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
+import '../types/types.dart' show TypeMask;
+import '../types/constants.dart' show computeTypeMask;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
 import '../util/util.dart';
-import '../world.dart' show
-    ClassWorld;
+import '../world.dart' show ClassWorld;
 
 /**
  * The interface [InferrerVisitor] will use when working on types.
@@ -67,13 +59,11 @@
   bool isNull(T type);
   TypeMask newTypedSelector(T receiver, TypeMask mask);
 
-  T allocateList(T type,
-                 Node node,
-                 Element enclosing,
-                 [T elementType, int length]);
+  T allocateList(T type, Node node, Element enclosing,
+      [T elementType, int length]);
 
-  T allocateMap(T type, Node node, Element element, [List<T> keyType,
-                                                     List<T> valueType]);
+  T allocateMap(T type, Node node, Element element,
+      [List<T> keyType, List<T> valueType]);
 
   T allocateClosure(Node node, Element element);
 
@@ -106,7 +96,6 @@
    */
   T allocatePhi(Node node, Local variable, T inputType);
 
-
   /**
    * Returns a new type for holding the potential types of [element].
    * [inputType] is the first incoming type of the phi. [allocateLoopPhi]
@@ -143,10 +132,8 @@
    * conditional send (e.g.  `a?.selector`), in which case the returned type may
    * be null.
    */
-  T refineReceiver(Selector selector,
-                   TypeMask mask,
-                   T receiverType,
-                   bool isConditional);
+  T refineReceiver(
+      Selector selector, TypeMask mask, T receiverType, bool isConditional);
 
   /**
    * Returns the internal inferrer representation for [mask].
@@ -211,9 +198,8 @@
     variables.forEach(f);
   }
 
-  void forEachLocalUntilNode(Node node,
-                             void f(Local variable, T type),
-                             [Setlet<Local> seenLocals]) {
+  void forEachLocalUntilNode(Node node, void f(Local variable, T type),
+      [Setlet<Local> seenLocals]) {
     if (seenLocals == null) seenLocals = new Setlet<Local>();
     if (variables != null) {
       variables.forEach((variable, type) {
@@ -273,7 +259,7 @@
   }
 
   void mergeDiamondFlow(FieldInitializationScope<T> thenScope,
-                        FieldInitializationScope<T> elseScope) {
+      FieldInitializationScope<T> elseScope) {
     // Quick bailout check. If [isThisExposed] is true, we know the
     // code following won't do anything.
     if (isThisExposed) return;
@@ -297,12 +283,14 @@
   final List<T> positional;
   final Map<String, T> named;
   ArgumentsTypes(this.positional, named)
-    : this.named = (named == null || named.isEmpty) ? const {} : named {
+      : this.named = (named == null || named.isEmpty) ? const {} : named {
     assert(this.positional.every((T type) => type != null));
     assert(this.named.values.every((T type) => type != null));
   }
 
-  ArgumentsTypes.empty() : positional = const [], named = const {};
+  ArgumentsTypes.empty()
+      : positional = const [],
+        named = const {};
 
   int get length => positional.length + named.length;
 
@@ -310,7 +298,7 @@
 
   String toString() => "{ positional = $positional, named = $named }";
 
-  bool operator==(other) {
+  bool operator ==(other) {
     if (positional.length != other.positional.length) return false;
     if (named.length != other.named.length) return false;
     for (int i = 0; i < positional.length; i++) {
@@ -366,7 +354,6 @@
   }
 }
 
-
 abstract class MinimalInferrerEngine<T> {
   /**
    * Returns the type of [element].
@@ -408,21 +395,18 @@
   bool get aborts {
     return seenReturnOrThrow || seenBreakOrContinue;
   }
+
   bool get inTryBlock => tryBlock != null;
 
-  LocalsHandler(this.inferrer,
-                this.types,
-                this.compiler,
-                Node block,
-                [this.fieldScope])
+  LocalsHandler(this.inferrer, this.types, this.compiler, Node block,
+      [this.fieldScope])
       : locals = new VariableScope<T>(block),
         captured = new Map<Local, Element>(),
         capturedAndBoxed = new Map<Local, Element>(),
         tryBlock = null;
 
-  LocalsHandler.from(LocalsHandler<T> other,
-                     Node block,
-                     {bool useOtherTryBlock: true})
+  LocalsHandler.from(LocalsHandler<T> other, Node block,
+      {bool useOtherTryBlock: true})
       : locals = new VariableScope<T>(block, other.locals),
         fieldScope = new FieldInitializationScope<T>.from(other.fieldScope),
         captured = other.captured,
@@ -479,8 +463,8 @@
         // narrowed to non-null.
         type = types.addPhiInput(
             local,
-            types.allocatePhi(locals.block, local,
-                              types.narrowNotNull(currentType)),
+            types.allocatePhi(
+                locals.block, local, types.narrowNotNull(currentType)),
             type);
       }
       locals[local] = type;
@@ -489,8 +473,7 @@
       }
     }
     if (capturedAndBoxed.containsKey(local)) {
-      inferrer.recordTypeOfNonFinalField(
-          node, capturedAndBoxed[local], type);
+      inferrer.recordTypeOfNonFinalField(node, capturedAndBoxed[local], type);
     } else if (inTryBlock) {
       // We don't know if an assignment in a try block
       // will be executed, so all assigments in that block are
@@ -519,17 +502,17 @@
     capturedAndBoxed[local] = field;
   }
 
-  void mergeDiamondFlow(LocalsHandler<T> thenBranch,
-                        LocalsHandler<T> elseBranch) {
+  void mergeDiamondFlow(
+      LocalsHandler<T> thenBranch, LocalsHandler<T> elseBranch) {
     if (fieldScope != null && elseBranch != null) {
       fieldScope.mergeDiamondFlow(thenBranch.fieldScope, elseBranch.fieldScope);
     }
-    seenReturnOrThrow = thenBranch.seenReturnOrThrow
-        && elseBranch != null
-        && elseBranch.seenReturnOrThrow;
-    seenBreakOrContinue = thenBranch.seenBreakOrContinue
-        && elseBranch != null
-        && elseBranch.seenBreakOrContinue;
+    seenReturnOrThrow = thenBranch.seenReturnOrThrow &&
+        elseBranch != null &&
+        elseBranch.seenReturnOrThrow;
+    seenBreakOrContinue = thenBranch.seenBreakOrContinue &&
+        elseBranch != null &&
+        elseBranch.seenBreakOrContinue;
     if (aborts) return;
 
     void mergeOneBranch(LocalsHandler<T> other) {
@@ -612,7 +595,7 @@
    * labeled statement that do not break out.
    */
   void mergeAfterBreaks(List<LocalsHandler<T>> handlers,
-                        {bool keepOwnLocals: true}) {
+      {bool keepOwnLocals: true}) {
     Node level = locals.block;
     // Use a separate locals handler to perform the merge in, so that Phi
     // creation does not invalidate previous type knowledge while we might
@@ -631,9 +614,8 @@
       for (Local variable in seenLocals) {
         T originalType = locals[variable];
         if (originalType != null) {
-          merged.locals[variable] = types.addPhiInput(variable,
-                                                      merged.locals[variable],
-                                                      originalType);
+          merged.locals[variable] = types.addPhiInput(
+              variable, merged.locals[variable], originalType);
         }
       }
     }
@@ -642,8 +624,8 @@
     merged.locals.forEachOwnLocal((Local variable, T type) {
       locals[variable] = types.simplifyPhi(level, variable, type);
     });
-    seenReturnOrThrow = allBranchesAbort &&
-                        (!keepOwnLocals || seenReturnOrThrow);
+    seenReturnOrThrow =
+        allBranchesAbort && (!keepOwnLocals || seenReturnOrThrow);
   }
 
   /**
@@ -711,14 +693,15 @@
 
 abstract class InferrerVisitor<T, E extends MinimalInferrerEngine<T>>
     extends Visitor<T>
-    with SemanticSendResolvedMixin<T, dynamic>,
-         CompoundBulkMixin<T, dynamic>,
-         SetIfNullBulkMixin<T, dynamic>,
-         PrefixBulkMixin<T, dynamic>,
-         PostfixBulkMixin<T, dynamic>,
-         ErrorBulkMixin<T, dynamic>,
-         NewBulkMixin<T, dynamic>,
-         SetBulkMixin<T, dynamic>
+    with
+        SemanticSendResolvedMixin<T, dynamic>,
+        CompoundBulkMixin<T, dynamic>,
+        SetIfNullBulkMixin<T, dynamic>,
+        PrefixBulkMixin<T, dynamic>,
+        PostfixBulkMixin<T, dynamic>,
+        ErrorBulkMixin<T, dynamic>,
+        NewBulkMixin<T, dynamic>,
+        SetBulkMixin<T, dynamic>
     implements SemanticSendVisitor<T, dynamic> {
   final Compiler compiler;
   final AstElement analyzedElement;
@@ -743,20 +726,19 @@
         ? locals.fieldScope.isThisExposed
         : true;
   }
+
   void set isThisExposed(value) {
     if (analyzedElement.isGenerativeConstructor) {
       locals.fieldScope.isThisExposed = value;
     }
   }
 
-  InferrerVisitor(AstElement analyzedElement,
-                  this.inferrer,
-                  this.types,
-                  this.compiler,
-                  [LocalsHandler<T> handler])
-    : this.analyzedElement = analyzedElement,
-      this.locals = handler,
-      this.elements = analyzedElement.resolvedAst.elements {
+  InferrerVisitor(
+      AstElement analyzedElement, this.inferrer, this.types, this.compiler,
+      [LocalsHandler<T> handler])
+      : this.analyzedElement = analyzedElement,
+        this.locals = handler,
+        this.elements = analyzedElement.resolvedAst.elements {
     if (handler != null) return;
     Node node = analyzedElement.node;
     FieldInitializationScope<T> fieldScope =
@@ -905,91 +887,55 @@
     return types.dynamicType;
   }
 
-
   @override
   T bulkHandleNode(Node node, String message, _) {
     return internalError(node, message.replaceAll('#', '$node'));
   }
 
   @override
-  T visitConstantGet(
-      Send node,
-      ConstantExpression constant,
-      _) {
+  T visitConstantGet(Send node, ConstantExpression constant, _) {
     return bulkHandleNode(node, "Constant read `#` unhandled.", _);
   }
 
   @override
-  T visitConstantInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitConstantInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, _) {
     return bulkHandleNode(node, "Constant invoke `#` unhandled.", _);
   }
 
-  T visitClassTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      _) {
+  T visitClassTypeLiteralGet(Send node, ConstantExpression constant, _) {
     return handleTypeLiteralGet();
   }
 
-  T visitClassTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitClassTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, _) {
     return handleTypeLiteralInvoke(arguments);
   }
 
-  T visitTypedefTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      _) {
+  T visitTypedefTypeLiteralGet(Send node, ConstantExpression constant, _) {
     return handleTypeLiteralGet();
   }
 
-  T visitTypedefTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitTypedefTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, _) {
     return handleTypeLiteralInvoke(arguments);
   }
 
-  T visitTypeVariableTypeLiteralGet(
-      Send node,
-      TypeVariableElement element,
-      _) {
+  T visitTypeVariableTypeLiteralGet(Send node, TypeVariableElement element, _) {
     return handleTypeLiteralGet();
   }
 
-  T visitTypeVariableTypeLiteralInvoke(
-      Send node,
-      TypeVariableElement element,
-      NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element,
+      NodeList arguments, CallStructure callStructure, _) {
     return handleTypeLiteralInvoke(arguments);
   }
 
-  T visitDynamicTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      _) {
+  T visitDynamicTypeLiteralGet(Send node, ConstantExpression constant, _) {
     return handleTypeLiteralGet();
   }
 
-  T visitDynamicTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitDynamicTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, _) {
     return handleTypeLiteralInvoke(arguments);
   }
 
@@ -1014,8 +960,8 @@
   T _superType;
   T get superType {
     if (_superType != null) return _superType;
-    return _superType = types.nonNullExact(
-        outermostElement.enclosingClass.superclass);
+    return _superType =
+        types.nonNullExact(outermostElement.enclosingClass.superclass);
   }
 
   @override
@@ -1073,8 +1019,8 @@
         Element receiverElement = elements[node.receiver];
         Element argumentElement = elements[node.arguments.first];
         String operator = node.selector.asOperator().source;
-        if ((operator == '==' && usePositive)
-            || (operator == '!=' && !usePositive)) {
+        if ((operator == '==' && usePositive) ||
+            (operator == '!=' && !usePositive)) {
           // Type the elements as null.
           if (Elements.isLocal(receiverElement)) {
             locals.update(receiverElement, types.nullType, node);
@@ -1103,30 +1049,19 @@
 
   @override
   T visitDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      _) {
+      Send node, Node receiver, NodeList arguments, Selector selector, _) {
     return handleDynamicInvoke(node);
   }
 
   @override
   T visitIfNotNullDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      _) {
+      Send node, Node receiver, NodeList arguments, Selector selector, _) {
     return handleDynamicInvoke(node);
   }
 
   @override
   T visitThisPropertyInvoke(
-      Send node,
-      NodeList arguments,
-      Selector selector,
-      _) {
+      Send node, NodeList arguments, Selector selector, _) {
     return handleDynamicInvoke(node);
   }
 
@@ -1159,8 +1094,7 @@
     }
     visit(right);
     if (oldAccumulateIsChecks) {
-
-      bool invalidatedInRightHandSide (Send test) {
+      bool invalidatedInRightHandSide(Send test) {
         Element receiver = elements[test.receiver];
         if (receiver is LocalElement) {
           return narrowed.locals[receiver] != locals.locals[receiver];
@@ -1267,8 +1201,8 @@
 
   T visitVariableDefinitions(VariableDefinitions node) {
     for (Link<Node> link = node.definitions.nodes;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       Node definition = link.head;
       if (definition is Identifier) {
         locals.update(elements[definition], types.nullType, node);
@@ -1353,8 +1287,7 @@
     loopLevel--;
     saved.endLoop(node);
     bool keepOwnLocals = node.asDoWhile() == null;
-    saved.mergeAfterBreaks(
-        getBreaks(target), keepOwnLocals: keepOwnLocals);
+    saved.mergeAfterBreaks(getBreaks(target), keepOwnLocals: keepOwnLocals);
     locals = saved;
     clearBreaksAndContinues(target);
     return null;
@@ -1391,8 +1324,7 @@
 
   T visitTryStatement(TryStatement node) {
     LocalsHandler<T> saved = locals;
-    locals = new LocalsHandler<T>.from(
-        locals, node, useOtherTryBlock: false);
+    locals = new LocalsHandler<T>.from(locals, node, useOtherTryBlock: false);
     visit(node.tryBlock);
     saved.mergeDiamondFlow(locals, null);
     locals = saved;
@@ -1417,9 +1349,7 @@
     Node exception = node.exception;
     if (exception != null) {
       DartType type = elements.getType(node.type);
-      T mask = type == null ||
-               type.treatAsDynamic ||
-               type.isTypeVariable
+      T mask = type == null || type.treatAsDynamic || type.isTypeVariable
           ? types.dynamicType
           : types.nonNullSubtype(type.element);
       locals.update(elements[exception], mask, node);
@@ -1448,9 +1378,9 @@
 
   T visitLabeledStatement(LabeledStatement node) {
     Statement body = node.statement;
-    if (body is Loop
-        || body is SwitchStatement
-        || Elements.isUnusedLabel(node, elements)) {
+    if (body is Loop ||
+        body is SwitchStatement ||
+        Elements.isUnusedLabel(node, elements)) {
       // Loops and switches handle their own labels.
       visit(body);
     } else {
diff --git a/pkg/compiler/lib/src/inferrer/list_tracer.dart b/pkg/compiler/lib/src/inferrer/list_tracer.dart
index a57087f..83f2e8b 100644
--- a/pkg/compiler/lib/src/inferrer/list_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/list_tracer.dart
@@ -16,122 +16,119 @@
  * change the element type of the list, or let the list escape to code
  * that might change the element type.
  */
-Set<String> okListSelectorsSet = new Set<String>.from(
-  const <String>[
-    // From Object.
-    '==',
-    'hashCode',
-    'toString',
-    'noSuchMethod',
-    'runtimeType',
+Set<String> okListSelectorsSet = new Set<String>.from(const <String>[
+  // From Object.
+  '==',
+  'hashCode',
+  'toString',
+  'noSuchMethod',
+  'runtimeType',
 
-    // From Iterable.
-    'iterator',
-    'map',
-    'where',
-    'expand',
-    'contains',
-    'forEach',
-    'reduce',
-    'fold',
-    'every',
-    'join',
-    'any',
-    'toList',
-    'toSet',
-    'length',
-    'isEmpty',
-    'isNotEmpty',
-    'take',
-    'takeWhile',
-    'skip',
-    'skipWhile',
-    'first',
-    'last',
-    'single',
-    'firstWhere',
-    'lastWhere',
-    'singleWhere',
-    'elementAt',
+  // From Iterable.
+  'iterator',
+  'map',
+  'where',
+  'expand',
+  'contains',
+  'forEach',
+  'reduce',
+  'fold',
+  'every',
+  'join',
+  'any',
+  'toList',
+  'toSet',
+  'length',
+  'isEmpty',
+  'isNotEmpty',
+  'take',
+  'takeWhile',
+  'skip',
+  'skipWhile',
+  'first',
+  'last',
+  'single',
+  'firstWhere',
+  'lastWhere',
+  'singleWhere',
+  'elementAt',
 
-    // From List.
-    '[]',
-    'length',
-    'reversed',
-    'sort',
-    'indexOf',
-    'lastIndexOf',
-    'clear',
-    'remove',
-    'removeAt',
-    'removeLast',
-    'removeWhere',
-    'retainWhere',
-    'sublist',
-    'getRange',
-    'removeRange',
-    'asMap',
+  // From List.
+  '[]',
+  'length',
+  'reversed',
+  'sort',
+  'indexOf',
+  'lastIndexOf',
+  'clear',
+  'remove',
+  'removeAt',
+  'removeLast',
+  'removeWhere',
+  'retainWhere',
+  'sublist',
+  'getRange',
+  'removeRange',
+  'asMap',
 
-    // From JSArray.
-    'checkMutable',
-    'checkGrowable',
-  ]);
+  // From JSArray.
+  'checkMutable',
+  'checkGrowable',
+]);
 
-Set<String> doNotChangeLengthSelectorsSet = new Set<String>.from(
-  const <String>[
-    // From Object.
-    '==',
-    'hashCode',
-    'toString',
-    'noSuchMethod',
-    'runtimeType',
+Set<String> doNotChangeLengthSelectorsSet = new Set<String>.from(const <String>[
+  // From Object.
+  '==',
+  'hashCode',
+  'toString',
+  'noSuchMethod',
+  'runtimeType',
 
-    // From Iterable.
-    'iterator',
-    'map',
-    'where',
-    'expand',
-    'contains',
-    'forEach',
-    'reduce',
-    'fold',
-    'every',
-    'join',
-    'any',
-    'toList',
-    'toSet',
-    'length',
-    'isEmpty',
-    'isNotEmpty',
-    'take',
-    'takeWhile',
-    'skip',
-    'skipWhile',
-    'first',
-    'last',
-    'single',
-    'firstWhere',
-    'lastWhere',
-    'singleWhere',
-    'elementAt',
+  // From Iterable.
+  'iterator',
+  'map',
+  'where',
+  'expand',
+  'contains',
+  'forEach',
+  'reduce',
+  'fold',
+  'every',
+  'join',
+  'any',
+  'toList',
+  'toSet',
+  'length',
+  'isEmpty',
+  'isNotEmpty',
+  'take',
+  'takeWhile',
+  'skip',
+  'skipWhile',
+  'first',
+  'last',
+  'single',
+  'firstWhere',
+  'lastWhere',
+  'singleWhere',
+  'elementAt',
 
-    // From List.
-    '[]',
-    '[]=',
-    'length',
-    'reversed',
-    'sort',
-    'indexOf',
-    'lastIndexOf',
-    'sublist',
-    'getRange',
-    'asMap',
+  // From List.
+  '[]',
+  '[]=',
+  'length',
+  'reversed',
+  'sort',
+  'indexOf',
+  'lastIndexOf',
+  'sublist',
+  'getRange',
+  'asMap',
 
-    // From JSArray.
-    'checkMutable',
-    'checkGrowable',
-  ]);
-
+  // From JSArray.
+  'checkMutable',
+  'checkGrowable',
+]);
 
 class ListTracerVisitor extends TracerVisitor<ListTypeInformation> {
   // The [Set] of found assignments to the list.
@@ -208,7 +205,7 @@
         assignments.add(inferrer.types.nullType);
       }
     } else if (selector.isCall &&
-               !info.targets.every((element) => element.isFunction)) {
+        !info.targets.every((element) => element.isFunction)) {
       bailout('Passed to a closure');
       return;
     }
diff --git a/pkg/compiler/lib/src/inferrer/map_tracer.dart b/pkg/compiler/lib/src/inferrer/map_tracer.dart
index 1ab3c24..3bd0e41 100644
--- a/pkg/compiler/lib/src/inferrer/map_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/map_tracer.dart
@@ -10,26 +10,26 @@
 import 'node_tracer.dart';
 import 'type_graph_nodes.dart';
 
-Set<String> okMapSelectorsSet = new Set.from(
-    const <String>[
-      // From Object.
-      "==",
-      "hashCode",
-      "toString",
-      "noSuchMethod",
-      "runtimeType",
-      // From Map
-      "[]",
-      "isEmpty",
-      "isNotEmpty",
-      "keys",
-      "length",
-      "values",
-      "clear",
-      "containsKey",
-      "containsValue",
-      "forEach",
-      "remove"]);
+Set<String> okMapSelectorsSet = new Set.from(const <String>[
+  // From Object.
+  "==",
+  "hashCode",
+  "toString",
+  "noSuchMethod",
+  "runtimeType",
+  // From Map
+  "[]",
+  "isEmpty",
+  "isNotEmpty",
+  "keys",
+  "length",
+  "values",
+  "clear",
+  "containsKey",
+  "containsValue",
+  "forEach",
+  "remove"
+]);
 
 class MapTracerVisitor extends TracerVisitor<MapTypeInformation> {
   // These lists are used to keep track of newly discovered assignments to
@@ -121,7 +121,7 @@
         }
       }
     } else if (selector.isCall &&
-               !info.targets.every((element) => element.isFunction)) {
+        !info.targets.every((element) => element.isFunction)) {
       bailout('Passed to a closure');
       return;
     }
diff --git a/pkg/compiler/lib/src/inferrer/node_tracer.dart b/pkg/compiler/lib/src/inferrer/node_tracer.dart
index 174ae56..c50929d 100644
--- a/pkg/compiler/lib/src/inferrer/node_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/node_tracer.dart
@@ -16,63 +16,61 @@
 
 // A set of selectors we know do not escape the elements inside the
 // list.
-Set<String> doesNotEscapeListSet = new Set<String>.from(
-  const <String>[
-    // From Object.
-    '==',
-    'hashCode',
-    'toString',
-    'noSuchMethod',
-    'runtimeType',
+Set<String> doesNotEscapeListSet = new Set<String>.from(const <String>[
+  // From Object.
+  '==',
+  'hashCode',
+  'toString',
+  'noSuchMethod',
+  'runtimeType',
 
-    // From Iterable.
-    'isEmpty',
-    'isNotEmpty',
-    'length',
-    'contains',
-    'join',
+  // From Iterable.
+  'isEmpty',
+  'isNotEmpty',
+  'length',
+  'contains',
+  'join',
 
-    // From List.
-    'add',
-    'addAll',
-    'clear',
-    'fillRange',
-    'indexOf',
-    'insert',
-    'insertAll',
-    'lastIndexOf',
-    'remove',
-    'removeRange',
-    'replaceRange',
-    'setAll',
-    'setRange',
-    'shuffle',
-    '[]=',
+  // From List.
+  'add',
+  'addAll',
+  'clear',
+  'fillRange',
+  'indexOf',
+  'insert',
+  'insertAll',
+  'lastIndexOf',
+  'remove',
+  'removeRange',
+  'replaceRange',
+  'setAll',
+  'setRange',
+  'shuffle',
+  '[]=',
 
-    // From JSArray.
-    'checkMutable',
-    'checkGrowable',
-  ]);
+  // From JSArray.
+  'checkMutable',
+  'checkGrowable',
+]);
 
-Set<String> doesNotEscapeMapSet = new Set<String>.from(
-  const <String>[
-    // From Object.
-    '==',
-    'hashCode',
-    'toString',
-    'noSuchMethod',
-    'runtimeType',
-    // from Map.
-    'isEmpty',
-    'isNotEmpty',
-    'length',
-    'clear',
-    'containsKey',
-    'containsValue',
-    '[]=',
-    // [keys] only allows key values to escape, which we do not track.
-    'keys'
-  ]);
+Set<String> doesNotEscapeMapSet = new Set<String>.from(const <String>[
+  // From Object.
+  '==',
+  'hashCode',
+  'toString',
+  'noSuchMethod',
+  'runtimeType',
+  // from Map.
+  'isEmpty',
+  'isNotEmpty',
+  'length',
+  'clear',
+  'containsKey',
+  'containsValue',
+  '[]=',
+  // [keys] only allows key values to escape, which we do not track.
+  'keys'
+]);
 
 /// Common logic to trace a value through the type inference graph nodes.
 abstract class TracerVisitor<T extends TypeInformation>
@@ -85,7 +83,8 @@
   final Setlet<Element> analyzedElements = new Setlet<Element>();
 
   TracerVisitor(this.tracedType, TypeGraphInferrerEngine inferrer)
-      : this.inferrer = inferrer, this.compiler = inferrer.compiler;
+      : this.inferrer = inferrer,
+        this.compiler = inferrer.compiler;
 
   // Work list that gets populated with [TypeInformation] that could
   // contain the container.
@@ -94,8 +93,7 @@
   // Work list of lists to analyze after analyzing the users of a
   // [TypeInformation]. We know the [tracedType] has been stored in these
   // lists and we must check how it escapes from these lists.
-  final List<ListTypeInformation> listsToAnalyze =
-      <ListTypeInformation>[];
+  final List<ListTypeInformation> listsToAnalyze = <ListTypeInformation>[];
   // Work list of maps to analyze after analyzing the users of a
   // [TypeInformation]. We know the [tracedType] has been stored in these
   // maps and we must check how it escapes from these maps.
@@ -186,6 +184,7 @@
   void visitMapTypeInformation(MapTypeInformation info) {
     mapsToAnalyze.add(info);
   }
+
   void visitConcreteTypeInformation(ConcreteTypeInformation info) {}
 
   void visitStringLiteralTypeInformation(StringLiteralTypeInformation info) {}
@@ -211,7 +210,7 @@
     } else {
       list.flowsInto.forEach((flow) {
         flow.users.forEach((user) {
-          if (user is !DynamicCallSiteTypeInformation) return;
+          if (user is! DynamicCallSiteTypeInformation) return;
           if (user.receiver != flow) return;
           if (inferrer.returnsListElementTypeSet.contains(user.selector)) {
             addNewEscapeInformation(user);
@@ -230,7 +229,7 @@
     } else {
       map.flowsInto.forEach((flow) {
         flow.users.forEach((user) {
-          if (user is !DynamicCallSiteTypeInformation) return;
+          if (user is! DynamicCallSiteTypeInformation) return;
           if (user.receiver != flow) return;
           if (user.selector.isIndex) {
             addNewEscapeInformation(user);
@@ -253,9 +252,9 @@
     if (!receiverType.isContainer) return false;
     String selectorName = info.selector.name;
     List<TypeInformation> arguments = info.arguments.positional;
-    return (selectorName == '[]=' && currentUser == arguments[1])
-        || (selectorName == 'insert' && currentUser == arguments[1])
-        || (selectorName == 'add' && currentUser == arguments[0]);
+    return (selectorName == '[]=' && currentUser == arguments[1]) ||
+        (selectorName == 'insert' && currentUser == arguments[1]) ||
+        (selectorName == 'add' && currentUser == arguments[0]);
   }
 
   bool isIndexSetOnMap(DynamicCallSiteTypeInformation info) {
@@ -271,8 +270,7 @@
    * [isParameterOfMapAddingMethod].
    */
   bool isValueAddedToMap(DynamicCallSiteTypeInformation info) {
-     return isIndexSetOnMap(info) &&
-         currentUser == info.arguments.positional[1];
+    return isIndexSetOnMap(info) && currentUser == info.arguments.positional[1];
   }
 
   /**
@@ -281,8 +279,7 @@
    * [isParameterOfMapAddingMethod].
    */
   bool isKeyAddedToMap(DynamicCallSiteTypeInformation info) {
-    return isIndexSetOnMap(info) &&
-        currentUser == info.arguments.positional[0];
+    return isIndexSetOnMap(info) && currentUser == info.arguments.positional[0];
   }
 
   void visitDynamicCallSiteTypeInformation(
@@ -341,9 +338,9 @@
       return false;
     }
     Element method = element.enclosingElement;
-    return (method.name == '[]=')
-        || (method.name == 'add')
-        || (method.name == 'insert');
+    return (method.name == '[]=') ||
+        (method.name == 'add') ||
+        (method.name == 'insert');
   }
 
   /**
@@ -362,13 +359,13 @@
 
   bool isClosure(Element element) {
     if (!element.isFunction) return false;
+
     /// Creating an instance of a class that implements [Function] also
     /// closurizes the corresponding [call] member. We do not currently
     /// track these, thus the check for [isClosurized] on such a method will
     /// return false. Instead we catch that case here for now.
     // TODO(herhut): Handle creation of closures from instances of Function.
-    if (element.isInstanceMember &&
-        element.name == Identifiers.call) {
+    if (element.isInstanceMember && element.name == Identifiers.call) {
       return true;
     }
     Element outermost = element.outermostEnclosingMemberOrTopLevel;
diff --git a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
index 468aa72..e3b2327c 100644
--- a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
@@ -4,49 +4,32 @@
 
 library simple_types_inferrer;
 
-import '../closure.dart' show
-    ClosureClassMap,
-    ClosureScope;
+import '../closure.dart' show ClosureClassMap, ClosureScope;
 import '../common.dart';
-import '../common/names.dart' show
-    Selectors;
-import '../compiler.dart' show
-    Compiler;
-import '../constants/values.dart' show
-    ConstantValue,
-    IntConstantValue;
-import '../core_types.dart' show
-    CoreClasses,
-    CoreTypes;
-import '../cps_ir/cps_ir_nodes.dart' as cps_ir show
-    Node;
-import '../dart_types.dart' show
-    DartType,
-    FunctionType,
-    InterfaceType,
-    TypeKind;
+import '../common/names.dart' show Selectors;
+import '../compiler.dart' show Compiler;
+import '../constants/values.dart' show ConstantValue, IntConstantValue;
+import '../core_types.dart' show CoreClasses, CoreTypes;
+import '../cps_ir/cps_ir_nodes.dart' as cps_ir show Node;
+import '../dart_types.dart'
+    show DartType, FunctionType, InterfaceType, TypeKind;
 import '../elements/elements.dart';
 import '../js_backend/js_backend.dart' as js;
 import '../native/native.dart' as native;
-import '../resolution/tree_elements.dart' show
-    TreeElements;
+import '../resolution/tree_elements.dart' show TreeElements;
 import '../resolution/operators.dart' as op;
 import '../tree/tree.dart' as ast;
-import '../types/types.dart' show
-    TypesInferrer,
-    FlatTypeMask,
-    TypeMask,
-    ContainerTypeMask,
-    ValueTypeMask;
-import '../util/util.dart' show
-    Link,
-    Setlet;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/side_effects.dart' show
-    SideEffects;
+import '../types/types.dart'
+    show
+        TypesInferrer,
+        FlatTypeMask,
+        TypeMask,
+        ContainerTypeMask,
+        ValueTypeMask;
+import '../util/util.dart' show Link, Setlet;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../universe/side_effects.dart' show SideEffects;
 import '../world.dart' show ClassWorld;
 
 import 'inferrer_visitor.dart';
@@ -102,10 +85,8 @@
    *
    * [nodeHolder] is the element holder of [node].
    */
-  void recordTypeOfFinalField(ast.Node node,
-                              Element nodeHolder,
-                              Element field,
-                              T type);
+  void recordTypeOfFinalField(
+      ast.Node node, Element nodeHolder, Element field, T type);
 
   /**
    * Records that [node] sets non-final field [element] to be of type
@@ -133,14 +114,15 @@
    *
    * [inLoop] tells whether the call happens in a loop.
    */
-  T registerCalledElement(Spannable node,
-                          Selector selector,
-                          TypeMask mask,
-                          Element caller,
-                          Element callee,
-                          ArgumentsTypes<T> arguments,
-                          SideEffects sideEffects,
-                          bool inLoop);
+  T registerCalledElement(
+      Spannable node,
+      Selector selector,
+      TypeMask mask,
+      Element caller,
+      Element callee,
+      ArgumentsTypes<T> arguments,
+      SideEffects sideEffects,
+      bool inLoop);
 
   /**
    * Registers that [caller] calls [selector] with [receiverType] as
@@ -151,14 +133,15 @@
    *
    * [inLoop] tells whether the call happens in a loop.
    */
-  T registerCalledSelector(ast.Node node,
-                           Selector selector,
-                           TypeMask mask,
-                           T receiverType,
-                           Element caller,
-                           ArgumentsTypes<T> arguments,
-                           SideEffects sideEffects,
-                           bool inLoop);
+  T registerCalledSelector(
+      ast.Node node,
+      Selector selector,
+      TypeMask mask,
+      T receiverType,
+      Element caller,
+      ArgumentsTypes<T> arguments,
+      SideEffects sideEffects,
+      bool inLoop);
 
   /**
    * Registers that [caller] calls [closure] with [arguments].
@@ -168,14 +151,15 @@
    *
    * [inLoop] tells whether the call happens in a loop.
    */
-  T registerCalledClosure(ast.Node node,
-                          Selector selector,
-                          TypeMask mask,
-                          T closure,
-                          Element caller,
-                          ArgumentsTypes<T> arguments,
-                          SideEffects sideEffects,
-                          bool inLoop);
+  T registerCalledClosure(
+      ast.Node node,
+      Selector selector,
+      TypeMask mask,
+      T closure,
+      Element caller,
+      ArgumentsTypes<T> arguments,
+      SideEffects sideEffects,
+      bool inLoop);
 
   /**
    * Registers a call to await with an expression of type [argumentType] as
@@ -196,9 +180,8 @@
    * Applies [f] to all elements in the universe that match
    * [selector] and [mask]. If [f] returns false, aborts the iteration.
    */
-  void forEachElementMatching(Selector selector,
-                              TypeMask mask,
-                              bool f(Element element)) {
+  void forEachElementMatching(
+      Selector selector, TypeMask mask, bool f(Element element)) {
     Iterable<Element> elements =
         compiler.world.allFunctions.filter(selector, mask);
     for (Element e in elements) {
@@ -210,9 +193,8 @@
    * Update [sideEffects] with the side effects of [callee] being
    * called with [selector].
    */
-  void updateSideEffects(SideEffects sideEffects,
-                         Selector selector,
-                         Element callee) {
+  void updateSideEffects(
+      SideEffects sideEffects, Selector selector, Element callee) {
     if (callee.isField) {
       if (callee.isInstanceMember) {
         if (selector.isSetter) {
@@ -258,8 +240,7 @@
         mappedType = types.stringType;
       } else if (type == coreTypes.intType) {
         mappedType = types.intType;
-      } else if (type == coreTypes.numType ||
-                 type == coreTypes.doubleType) {
+      } else if (type == coreTypes.numType || type == coreTypes.doubleType) {
         // Note: the backend double class is specifically for non-integer
         // doubles, and a native behavior returning 'double' does not guarantee
         // a non-integer return type, so we return the number type for those.
@@ -317,9 +298,9 @@
 
   bool isNativeElement(Element element) {
     if (compiler.backend.isNative(element)) return true;
-    return element.isClassMember
-        && compiler.backend.isNative(element.enclosingClass)
-        && element.isField;
+    return element.isClassMember &&
+        compiler.backend.isNative(element.enclosingClass) &&
+        element.isField;
   }
 
   void analyze(Element element, ArgumentsTypes arguments);
@@ -357,23 +338,21 @@
   final InferrerEngine<T, TypeSystem<T>> inferrer;
   final Setlet<Entity> capturedVariables = new Setlet<Entity>();
 
-  SimpleTypeInferrerVisitor.internal(analyzedElement,
-                                     this.outermostElement,
-                                     inferrer,
-                                     compiler,
-                                     locals)
-    : super(analyzedElement, inferrer, inferrer.types, compiler, locals),
-      this.inferrer = inferrer {
+  SimpleTypeInferrerVisitor.internal(
+      analyzedElement, this.outermostElement, inferrer, compiler, locals)
+      : super(analyzedElement, inferrer, inferrer.types, compiler, locals),
+        this.inferrer = inferrer {
     assert(outermostElement != null);
   }
 
-  SimpleTypeInferrerVisitor(Element element,
-                            Compiler compiler,
-                            InferrerEngine<T, TypeSystem<T>> inferrer,
-                            [LocalsHandler<T> handler])
-    : this.internal(element,
-        element.outermostEnclosingMemberOrTopLevel.implementation,
-        inferrer, compiler, handler);
+  SimpleTypeInferrerVisitor(Element element, Compiler compiler,
+      InferrerEngine<T, TypeSystem<T>> inferrer, [LocalsHandler<T> handler])
+      : this.internal(
+            element,
+            element.outermostEnclosingMemberOrTopLevel.implementation,
+            inferrer,
+            compiler,
+            handler);
 
   void analyzeSuperConstructorCall(Element target, ArgumentsTypes arguments) {
     inferrer.analyze(target, arguments);
@@ -396,9 +375,8 @@
     // be handled specially, in that we are computing their LUB at
     // each update, and reading them yields the type that was found in a
     // previous analysis of [outermostElement].
-    ClosureClassMap closureData =
-        compiler.closureToClassMapper.computeClosureToClassMapping(
-            analyzedElement, node, elements);
+    ClosureClassMap closureData = compiler.closureToClassMapper
+        .computeClosureToClassMapping(analyzedElement, node, elements);
     closureData.forEachCapturedVariable((variable, field) {
       locals.setCaptured(variable, field);
     });
@@ -445,17 +423,12 @@
         if (element.isInitializingFormal) {
           InitializingFormalElement initializingFormal = element;
           if (initializingFormal.fieldElement.isFinal) {
-            inferrer.recordTypeOfFinalField(
-                node,
-                analyzedElement,
-                initializingFormal.fieldElement,
-                parameterType);
+            inferrer.recordTypeOfFinalField(node, analyzedElement,
+                initializingFormal.fieldElement, parameterType);
           } else {
             locals.updateField(initializingFormal.fieldElement, parameterType);
-            inferrer.recordTypeOfNonFinalField(
-                initializingFormal.node,
-                initializingFormal.fieldElement,
-                parameterType);
+            inferrer.recordTypeOfNonFinalField(initializingFormal.node,
+                initializingFormal.fieldElement, parameterType);
           }
         }
         locals.update(element, parameterType, node);
@@ -484,20 +457,14 @@
         // a call to the default super constructor (the one that takes
         // no argument). Resolution ensures that such a constructor
         // exists.
-        if (!isConstructorRedirect
-            && !seenSuperConstructorCall
-            && !cls.isObject) {
+        if (!isConstructorRedirect &&
+            !seenSuperConstructorCall &&
+            !cls.isObject) {
           FunctionElement target = cls.superclass.lookupDefaultConstructor();
           ArgumentsTypes arguments = new ArgumentsTypes([], {});
           analyzeSuperConstructorCall(target, arguments);
-          inferrer.registerCalledElement(node,
-                                         null,
-                                         null,
-                                         outermostElement,
-                                         target.implementation,
-                                         arguments,
-                                         sideEffects,
-                                         inLoop);
+          inferrer.registerCalledElement(node, null, null, outermostElement,
+              target.implementation, arguments, sideEffects, inLoop);
         }
         visit(node.body);
         inferrer.recordExposesThis(analyzedElement, isThisExposed);
@@ -519,7 +486,7 @@
           returnType = types.nonNullExact(cls);
         } else if (compiler.world.isIndirectlyInstantiated(cls)) {
           returnType = types.nonNullSubclass(cls);
-        } else  {
+        } else {
           // TODO(johnniwinther): Avoid analyzing [analyzedElement] in this
           // case; it's never called.
           returnType = types.nonNullEmpty();
@@ -537,7 +504,7 @@
           if (returnType == null) {
             // No return in the body.
             returnType = locals.seenReturnOrThrow
-                ? types.nonNullEmpty()  // Body always throws.
+                ? types.nonNullEmpty() // Body always throws.
                 : types.nullType;
           } else if (!locals.seenReturnOrThrow) {
             // We haven't seen returns on all branches. So the method may
@@ -556,12 +523,12 @@
 
         case AsyncMarker.ASYNC:
           returnType = inferrer.addReturnTypeFor(
-                analyzedElement, returnType, types.asyncFutureType);
+              analyzedElement, returnType, types.asyncFutureType);
           break;
 
         case AsyncMarker.ASYNC_STAR:
           returnType = inferrer.addReturnTypeFor(
-                analyzedElement, returnType, types.asyncStarStreamType);
+              analyzedElement, returnType, types.asyncStarStreamType);
           break;
       }
     }
@@ -582,8 +549,8 @@
     // We don't put the closure in the work queue of the
     // inferrer, because it will share information with its enclosing
     // method, like for example the types of local variables.
-    LocalsHandler closureLocals = new LocalsHandler<T>.from(
-        locals, node, useOtherTryBlock: false);
+    LocalsHandler closureLocals =
+        new LocalsHandler<T>.from(locals, node, useOtherTryBlock: false);
     SimpleTypeInferrerVisitor visitor = new SimpleTypeInferrerVisitor<T>(
         element, compiler, inferrer, closureLocals);
     visitor.run();
@@ -612,7 +579,8 @@
   }
 
   T visitFunctionDeclaration(ast.FunctionDeclaration node) {
-    LocalFunctionElement element = elements.getFunctionDefinition(node.function);
+    LocalFunctionElement element =
+        elements.getFunctionDefinition(node.function);
     T type = inferrer.concreteTypes.putIfAbsent(node.function, () {
       return types.allocateClosure(node.function, element);
     });
@@ -650,15 +618,10 @@
       elementType = elementType == null
           ? types.nonNullEmpty()
           : types.simplifyPhi(null, null, elementType);
-      T containerType = node.isConst
-          ? types.constListType
-          : types.growableListType;
+      T containerType =
+          node.isConst ? types.constListType : types.growableListType;
       return types.allocateList(
-          containerType,
-          node,
-          outermostElement,
-          elementType,
-          length);
+          containerType, node, outermostElement, elementType, length);
     });
   }
 
@@ -674,11 +637,8 @@
       }
 
       T type = node.isConst ? types.constMapType : types.mapType;
-      return types.allocateMap(type,
-                               node,
-                               outermostElement,
-                               keyTypes,
-                               valueTypes);
+      return types.allocateMap(
+          type, node, outermostElement, keyTypes, valueTypes);
     });
   }
 
@@ -694,17 +654,16 @@
     if (isThisExposed) return;
     inferrer.forEachElementMatching(selector, mask, (element) {
       if (element.isField) {
-        if (!selector.isSetter
-            && isInClassOrSubclass(element)
-            && !element.modifiers.isFinal
-            && locals.fieldScope.readField(element) == null
-            && element.initializer == null) {
+        if (!selector.isSetter &&
+            isInClassOrSubclass(element) &&
+            !element.modifiers.isFinal &&
+            locals.fieldScope.readField(element) == null &&
+            element.initializer == null) {
           // If the field is being used before this constructor
           // actually had a chance to initialize it, say it can be
           // null.
           inferrer.recordTypeOfNonFinalField(
-              analyzedElement.node, element,
-              types.nullType);
+              analyzedElement.node, element, types.nullType);
         }
         // Accessing a field does not expose [:this:].
         return true;
@@ -717,13 +676,13 @@
   }
 
   bool get inInstanceContext {
-    return (outermostElement.isInstanceMember && !outermostElement.isField)
-        || outermostElement.isGenerativeConstructor;
+    return (outermostElement.isInstanceMember && !outermostElement.isField) ||
+        outermostElement.isGenerativeConstructor;
   }
 
   bool treatAsInstanceMember(Element element) {
-    return (Elements.isUnresolved(element) && inInstanceContext)
-        || (element != null && element.isInstanceMember);
+    return (Elements.isUnresolved(element) && inInstanceContext) ||
+        (element != null && element.isInstanceMember);
   }
 
   @override
@@ -734,12 +693,9 @@
       return types.dynamicType;
     }
 
-    Selector getterSelector =
-        elements.getGetterSelectorInComplexSendSet(node);
-    TypeMask getterMask =
-        elements.getGetterTypeMaskInComplexSendSet(node);
-    TypeMask operatorMask =
-        elements.getOperatorTypeMaskInComplexSendSet(node);
+    Selector getterSelector = elements.getGetterSelectorInComplexSendSet(node);
+    TypeMask getterMask = elements.getGetterTypeMaskInComplexSendSet(node);
+    TypeMask operatorMask = elements.getOperatorTypeMaskInComplexSendSet(node);
     Selector setterSelector = elements.getSelector(node);
     TypeMask setterMask = elements.getTypeMask(node);
 
@@ -785,12 +741,10 @@
       }
       if (!isThisExposed && isCallOnThis) {
         checkIfExposesThis(
-            setterSelector,
-            types.newTypedSelector(receiverType, setterMask));
+            setterSelector, types.newTypedSelector(receiverType, setterMask));
         if (getterSelector != null) {
           checkIfExposesThis(
-              getterSelector,
-              types.newTypedSelector(receiverType, getterMask));
+              getterSelector, types.newTypedSelector(receiverType, getterMask));
         }
       }
     }
@@ -798,9 +752,8 @@
     if (node.isIndex) {
       return internalError(node, "Unexpected index operation");
     } else if (op == '=') {
-      return handlePlainAssignment(
-          node, element, setterSelector, setterMask, receiverType, rhsType,
-          node.arguments.head);
+      return handlePlainAssignment(node, element, setterSelector, setterMask,
+          receiverType, rhsType, node.arguments.head);
     } else {
       // [foo ??= bar], [: foo++ :] or [: foo += 1 :].
       T getterType;
@@ -812,9 +765,9 @@
         Element getterElement = elements[node.selector];
         getterType = handleStaticSend(
             node, getterSelector, getterMask, getterElement, null);
-      } else if (Elements.isUnresolved(element)
-                 || element.isSetter
-                 || element.isField) {
+      } else if (Elements.isUnresolved(element) ||
+          element.isSetter ||
+          element.isField) {
         getterType = handleDynamicSend(
             node, getterSelector, getterMask, receiverType, null);
       } else if (element.isLocal) {
@@ -829,21 +782,19 @@
         newType = types.allocateDiamondPhi(getterType, rhsType);
       } else {
         Selector operatorSelector =
-          elements.getOperatorSelectorInComplexSendSet(node);
-        newType = handleDynamicSend(
-            node, operatorSelector, operatorMask,
+            elements.getOperatorSelectorInComplexSendSet(node);
+        newType = handleDynamicSend(node, operatorSelector, operatorMask,
             getterType, new ArgumentsTypes<T>([rhsType], null));
       }
 
       if (Elements.isStaticOrTopLevelField(element)) {
-        handleStaticSend(
-            node, setterSelector, setterMask, element,
+        handleStaticSend(node, setterSelector, setterMask, element,
             new ArgumentsTypes<T>([newType], null));
-      } else if (Elements.isUnresolved(element)
-                 || element.isSetter
-                 || element.isField) {
+      } else if (Elements.isUnresolved(element) ||
+          element.isSetter ||
+          element.isField) {
         handleDynamicSend(node, setterSelector, setterMask, receiverType,
-                          new ArgumentsTypes<T>([newType], null));
+            new ArgumentsTypes<T>([newType], null));
       } else if (element.isLocal) {
         locals.update(element, newType, node);
       }
@@ -854,44 +805,26 @@
 
   /// Handle compound index set, like `foo[0] += 42` or `foo[0]++`.
   T handleCompoundIndexSet(
-      ast.SendSet node,
-      T receiverType,
-      T indexType,
-      T rhsType) {
-    Selector getterSelector =
-        elements.getGetterSelectorInComplexSendSet(node);
-    TypeMask getterMask =
-        elements.getGetterTypeMaskInComplexSendSet(node);
+      ast.SendSet node, T receiverType, T indexType, T rhsType) {
+    Selector getterSelector = elements.getGetterSelectorInComplexSendSet(node);
+    TypeMask getterMask = elements.getGetterTypeMaskInComplexSendSet(node);
     Selector operatorSelector =
         elements.getOperatorSelectorInComplexSendSet(node);
-    TypeMask operatorMask =
-        elements.getOperatorTypeMaskInComplexSendSet(node);
+    TypeMask operatorMask = elements.getOperatorTypeMaskInComplexSendSet(node);
     Selector setterSelector = elements.getSelector(node);
     TypeMask setterMask = elements.getTypeMask(node);
 
-    T getterType = handleDynamicSend(
-        node,
-        getterSelector,
-        getterMask,
-        receiverType,
-        new ArgumentsTypes<T>([indexType], null));
+    T getterType = handleDynamicSend(node, getterSelector, getterMask,
+        receiverType, new ArgumentsTypes<T>([indexType], null));
 
     T returnType;
     if (node.isIfNullAssignment) {
       returnType = types.allocateDiamondPhi(getterType, rhsType);
     } else {
-      returnType = handleDynamicSend(
-          node,
-          operatorSelector,
-          operatorMask,
-          getterType,
-          new ArgumentsTypes<T>([rhsType], null));
+      returnType = handleDynamicSend(node, operatorSelector, operatorMask,
+          getterType, new ArgumentsTypes<T>([rhsType], null));
     }
-    handleDynamicSend(
-        node,
-        setterSelector,
-        setterMask,
-        receiverType,
+    handleDynamicSend(node, setterSelector, setterMask, receiverType,
         new ArgumentsTypes<T>([indexType, returnType], null));
 
     if (node.isPostfix) {
@@ -902,46 +835,30 @@
   }
 
   /// Handle compound prefix/postfix operations, like `a[0]++`.
-  T handleCompoundPrefixPostfix(
-      ast.Send node,
-      T receiverType,
-      T indexType) {
+  T handleCompoundPrefixPostfix(ast.Send node, T receiverType, T indexType) {
     return handleCompoundIndexSet(
         node, receiverType, indexType, types.uint31Type);
   }
 
   @override
-  T visitIndexPostfix(
-      ast.Send node,
-      ast.Node receiver,
-      ast.Node index,
-      op.IncDecOperator operator,
-      _) {
+  T visitIndexPostfix(ast.Send node, ast.Node receiver, ast.Node index,
+      op.IncDecOperator operator, _) {
     T receiverType = visit(receiver);
     T indexType = visit(index);
     return handleCompoundPrefixPostfix(node, receiverType, indexType);
   }
 
   @override
-  T visitIndexPrefix(
-      ast.Send node,
-      ast.Node receiver,
-      ast.Node index,
-      op.IncDecOperator operator,
-      _) {
+  T visitIndexPrefix(ast.Send node, ast.Node receiver, ast.Node index,
+      op.IncDecOperator operator, _) {
     T receiverType = visit(receiver);
     T indexType = visit(index);
     return handleCompoundPrefixPostfix(node, receiverType, indexType);
   }
 
   @override
-  T visitCompoundIndexSet(
-      ast.SendSet node,
-      ast.Node receiver,
-      ast.Node index,
-      op.AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  T visitCompoundIndexSet(ast.SendSet node, ast.Node receiver, ast.Node index,
+      op.AssignmentOperator operator, ast.Node rhs, _) {
     T receiverType = visit(receiver);
     T indexType = visit(index);
     T rhsType = visit(rhs);
@@ -950,11 +867,7 @@
 
   @override
   T visitIndexSetIfNull(
-      ast.SendSet node,
-      ast.Node receiver,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ast.Node receiver, ast.Node index, ast.Node rhs, _) {
     T receiverType = visit(receiver);
     T indexType = visit(index);
     T rhsType = visit(rhs);
@@ -962,34 +875,22 @@
   }
 
   @override
-  T visitSuperIndexPrefix(
-      ast.Send node,
-      MethodElement getter,
-      MethodElement setter,
-      ast.Node index,
-      op.IncDecOperator operator,
-      _) {
+  T visitSuperIndexPrefix(ast.Send node, MethodElement getter,
+      MethodElement setter, ast.Node index, op.IncDecOperator operator, _) {
     T indexType = visit(index);
     return handleCompoundPrefixPostfix(node, superType, indexType);
   }
 
   @override
-  T visitSuperIndexPostfix(
-      ast.Send node,
-      MethodElement getter,
-      MethodElement setter,
-      ast.Node index,
-      op.IncDecOperator operator,
-      _) {
+  T visitSuperIndexPostfix(ast.Send node, MethodElement getter,
+      MethodElement setter, ast.Node index, op.IncDecOperator operator, _) {
     T indexType = visit(index);
     return handleCompoundPrefixPostfix(node, superType, indexType);
   }
 
   /// Handle compound super index set, like `super[42] =+ 2`.
   T handleSuperCompoundIndexSet(
-      ast.SendSet node,
-      ast.Node index,
-      ast.Node rhs) {
+      ast.SendSet node, ast.Node index, ast.Node rhs) {
     T receiverType = superType;
     T indexType = visit(index);
     T rhsType = visit(rhs);
@@ -1009,34 +910,20 @@
   }
 
   @override
-  T visitSuperIndexSetIfNull(
-      ast.SendSet node,
-      MethodElement getter,
-      MethodElement setter,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+  T visitSuperIndexSetIfNull(ast.SendSet node, MethodElement getter,
+      MethodElement setter, ast.Node index, ast.Node rhs, _) {
     return handleSuperCompoundIndexSet(node, index, rhs);
   }
 
   @override
-  T visitUnresolvedSuperCompoundIndexSet(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      op.AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  T visitUnresolvedSuperCompoundIndexSet(ast.Send node, Element element,
+      ast.Node index, op.AssignmentOperator operator, ast.Node rhs, _) {
     return handleSuperCompoundIndexSet(node, index, rhs);
   }
 
   @override
   T visitUnresolvedSuperIndexSetIfNull(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+      ast.Send node, Element element, ast.Node index, ast.Node rhs, _) {
     return handleSuperCompoundIndexSet(node, index, rhs);
   }
 
@@ -1053,13 +940,8 @@
   }
 
   @override
-  T visitUnresolvedSuperGetterIndexSetIfNull(
-      ast.SendSet node,
-      Element element,
-      MethodElement setter,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+  T visitUnresolvedSuperGetterIndexSetIfNull(ast.SendSet node, Element element,
+      MethodElement setter, ast.Node index, ast.Node rhs, _) {
     return handleSuperCompoundIndexSet(node, index, rhs);
   }
 
@@ -1076,35 +958,21 @@
   }
 
   @override
-  T visitUnresolvedSuperSetterIndexSetIfNull(
-      ast.SendSet node,
-      MethodElement getter,
-      Element element,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+  T visitUnresolvedSuperSetterIndexSetIfNull(ast.SendSet node,
+      MethodElement getter, Element element, ast.Node index, ast.Node rhs, _) {
     return handleSuperCompoundIndexSet(node, index, rhs);
   }
 
   @override
-  T visitUnresolvedSuperIndexPrefix(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      op.IncDecOperator operator,
-      _) {
+  T visitUnresolvedSuperIndexPrefix(ast.Send node, Element element,
+      ast.Node index, op.IncDecOperator operator, _) {
     T indexType = visit(index);
     return handleCompoundPrefixPostfix(node, superType, indexType);
   }
 
   @override
-  T visitUnresolvedSuperGetterIndexPrefix(
-      ast.SendSet node,
-      Element element,
-      MethodElement setter,
-      ast.Node index,
-      op.IncDecOperator operator,
-      _) {
+  T visitUnresolvedSuperGetterIndexPrefix(ast.SendSet node, Element element,
+      MethodElement setter, ast.Node index, op.IncDecOperator operator, _) {
     T indexType = visit(index);
     return handleCompoundPrefixPostfix(node, superType, indexType);
   }
@@ -1122,24 +990,15 @@
   }
 
   @override
-  T visitUnresolvedSuperIndexPostfix(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      op.IncDecOperator operator,
-      _) {
+  T visitUnresolvedSuperIndexPostfix(ast.Send node, Element element,
+      ast.Node index, op.IncDecOperator operator, _) {
     T indexType = visit(index);
     return handleCompoundPrefixPostfix(node, superType, indexType);
   }
 
   @override
-  T visitUnresolvedSuperGetterIndexPostfix(
-      ast.SendSet node,
-      Element element,
-      MethodElement setter,
-      ast.Node index,
-      op.IncDecOperator operator,
-      _) {
+  T visitUnresolvedSuperGetterIndexPostfix(ast.SendSet node, Element element,
+      MethodElement setter, ast.Node index, op.IncDecOperator operator, _) {
     T indexType = visit(index);
     return handleCompoundPrefixPostfix(node, superType, indexType);
   }
@@ -1160,22 +1019,14 @@
   T handleIndexSet(ast.SendSet node, T receiverType, T indexType, T rhsType) {
     Selector setterSelector = elements.getSelector(node);
     TypeMask setterMask = elements.getTypeMask(node);
-    handleDynamicSend(
-        node,
-        setterSelector,
-        setterMask,
-        receiverType,
+    handleDynamicSend(node, setterSelector, setterMask, receiverType,
         new ArgumentsTypes<T>([indexType, rhsType], null));
     return rhsType;
   }
 
   @override
   T visitIndexSet(
-      ast.SendSet node,
-      ast.Node receiver,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ast.Node receiver, ast.Node index, ast.Node rhs, _) {
     T receiverType = visit(receiver);
     T indexType = visit(index);
     T rhsType = visit(rhs);
@@ -1183,10 +1034,7 @@
   }
 
   /// Handle super index set, like `super[42] = true`.
-  T handleSuperIndexSet(
-      ast.SendSet node,
-      ast.Node index,
-      ast.Node rhs) {
+  T handleSuperIndexSet(ast.SendSet node, ast.Node index, ast.Node rhs) {
     T receiverType = superType;
     T indexType = visit(index);
     T rhsType = visit(rhs);
@@ -1194,45 +1042,37 @@
   }
 
   @override
-  T visitSuperIndexSet(
-      ast.SendSet node,
-      FunctionElement function,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+  T visitSuperIndexSet(ast.SendSet node, FunctionElement function,
+      ast.Node index, ast.Node rhs, _) {
     return handleSuperIndexSet(node, index, rhs);
   }
 
   @override
   T visitUnresolvedSuperIndexSet(
-      ast.SendSet node,
-      Element element,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, Element element, ast.Node index, ast.Node rhs, _) {
     return handleSuperIndexSet(node, index, rhs);
   }
 
-  T handlePlainAssignment(ast.Node node,
-                          Element element,
-                          Selector setterSelector,
-                          TypeMask setterMask,
-                          T receiverType,
-                          T rhsType,
-                          ast.Node rhs) {
+  T handlePlainAssignment(
+      ast.Node node,
+      Element element,
+      Selector setterSelector,
+      TypeMask setterMask,
+      T receiverType,
+      T rhsType,
+      ast.Node rhs) {
     ArgumentsTypes arguments = new ArgumentsTypes<T>([rhsType], null);
     if (Elements.isMalformed(element)) {
       // Code will always throw.
     } else if (Elements.isStaticOrTopLevelField(element)) {
       handleStaticSend(node, setterSelector, setterMask, element, arguments);
     } else if (Elements.isUnresolved(element) || element.isSetter) {
-      if (analyzedElement.isGenerativeConstructor
-          && (node.asSendSet() != null)
-          && (node.asSendSet().receiver != null)
-          && node.asSendSet().receiver.isThis()) {
+      if (analyzedElement.isGenerativeConstructor &&
+          (node.asSendSet() != null) &&
+          (node.asSendSet().receiver != null) &&
+          node.asSendSet().receiver.isThis()) {
         Iterable<Element> targets = compiler.world.allFunctions.filter(
-            setterSelector,
-            types.newTypedSelector(thisType, setterMask));
+            setterSelector, types.newTypedSelector(thisType, setterMask));
         // We just recognized a field initialization of the form:
         // `this.foo = 42`. If there is only one target, we can update
         // its type.
@@ -1268,9 +1108,8 @@
 
   /// Handle a super access or invocation that results in a `noSuchMethod` call.
   T handleErroneousSuperSend(ast.Send node) {
-    ArgumentsTypes arguments = node.isPropertyAccess
-        ? null
-        : analyzeArguments(node.arguments);
+    ArgumentsTypes arguments =
+        node.isPropertyAccess ? null : analyzeArguments(node.arguments);
     Selector selector = elements.getSelector(node);
     TypeMask mask = elements.getTypeMask(node);
     // TODO(herhut): We could do better here if we knew what we
@@ -1284,9 +1123,7 @@
   /// Handle a .call invocation on the values retrieved from the super
   /// [element]. For instance `super.foo(bar)` where `foo` is a field or getter.
   T handleSuperClosureCall(
-      ast.Send node,
-      Element element,
-      ast.NodeList arguments) {
+      ast.Send node, Element element, ast.NodeList arguments) {
     ArgumentsTypes argumentTypes = analyzeArguments(arguments.nodes);
     Selector selector = elements.getSelector(node);
     TypeMask mask = elements.getTypeMask(node);
@@ -1294,188 +1131,130 @@
     // are calling does not expose this.
     isThisExposed = true;
     return inferrer.registerCalledClosure(
-        node, selector, mask, inferrer.typeOfElement(element),
-        outermostElement, argumentTypes, sideEffects, inLoop);
+        node,
+        selector,
+        mask,
+        inferrer.typeOfElement(element),
+        outermostElement,
+        argumentTypes,
+        sideEffects,
+        inLoop);
   }
 
   /// Handle an invocation of super [method].
-  T handleSuperMethodInvoke(ast.Send node,
-                            MethodElement method,
-                            ArgumentsTypes arguments) {
+  T handleSuperMethodInvoke(
+      ast.Send node, MethodElement method, ArgumentsTypes arguments) {
     // TODO(herhut): We could do better here if we knew what we
     // are calling does not expose this.
     isThisExposed = true;
     Selector selector = elements.getSelector(node);
     TypeMask mask = elements.getTypeMask(node);
-    return handleStaticSend(
-        node, selector, mask, method, arguments);
+    return handleStaticSend(node, selector, mask, method, arguments);
   }
 
   /// Handle access to a super field or getter [element].
-  T handleSuperGet(ast.Send node,
-                   Element element) {
+  T handleSuperGet(ast.Send node, Element element) {
     // TODO(herhut): We could do better here if we knew what we
     // are calling does not expose this.
     isThisExposed = true;
     Selector selector = elements.getSelector(node);
     TypeMask mask = elements.getTypeMask(node);
-    return handleStaticSend(
-        node, selector, mask, element, null);
+    return handleStaticSend(node, selector, mask, element, null);
   }
 
   @override
   T visitUnresolvedSuperIndex(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      _) {
+      ast.Send node, Element element, ast.Node index, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
   T visitUnresolvedSuperUnary(
-      ast.Send node,
-      op.UnaryOperator operator,
-      Element element,
-      _) {
+      ast.Send node, op.UnaryOperator operator, Element element, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
-  T visitUnresolvedSuperBinary(
-      ast.Send node,
-      Element element,
-      op.BinaryOperator operator,
-      ast.Node argument,
-      _) {
+  T visitUnresolvedSuperBinary(ast.Send node, Element element,
+      op.BinaryOperator operator, ast.Node argument, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
-  T visitUnresolvedSuperGet(
-      ast.Send node,
-      Element element,
-      _) {
+  T visitUnresolvedSuperGet(ast.Send node, Element element, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
-  T visitSuperSetterGet(
-      ast.Send node,
-      MethodElement setter,
-      _) {
+  T visitSuperSetterGet(ast.Send node, MethodElement setter, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
-  T visitSuperGetterSet(
-      ast.Send node,
-      MethodElement getter,
-      ast.Node rhs,
-      _) {
+  T visitSuperGetterSet(ast.Send node, MethodElement getter, ast.Node rhs, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
-  T visitUnresolvedSuperSet(
-      ast.Send node,
-      Element element,
-      ast.Node rhs,
-      _) {
+  T visitUnresolvedSuperSet(ast.Send node, Element element, ast.Node rhs, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
   T visitUnresolvedSuperInvoke(
-      ast.Send node,
-      Element element,
-      ast.Node argument,
-      Selector selector,
-      _) {
+      ast.Send node, Element element, ast.Node argument, Selector selector, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
-  T visitSuperFieldGet(
-      ast.Send node,
-      FieldElement field,
-      _) {
+  T visitSuperFieldGet(ast.Send node, FieldElement field, _) {
     return handleSuperGet(node, field);
   }
 
   @override
-  T visitSuperGetterGet(
-      ast.Send node,
-      MethodElement method,
-      _) {
+  T visitSuperGetterGet(ast.Send node, MethodElement method, _) {
     return handleSuperGet(node, method);
   }
 
   @override
-  T visitSuperMethodGet(
-      ast.Send node,
-      MethodElement method,
-      _) {
+  T visitSuperMethodGet(ast.Send node, MethodElement method, _) {
     return handleSuperGet(node, method);
   }
 
   @override
-  T visitSuperFieldInvoke(
-      ast.Send node,
-      FieldElement field,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitSuperFieldInvoke(ast.Send node, FieldElement field,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleSuperClosureCall(node, field, arguments);
   }
 
   @override
-  T visitSuperGetterInvoke(
-      ast.Send node,
-      MethodElement getter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitSuperGetterInvoke(ast.Send node, MethodElement getter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleSuperClosureCall(node, getter, arguments);
   }
 
   @override
-  T visitSuperMethodInvoke(
-      ast.Send node,
-      MethodElement method,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitSuperMethodInvoke(ast.Send node, MethodElement method,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleSuperMethodInvoke(
         node, method, analyzeArguments(arguments.nodes));
   }
 
   @override
-  T visitSuperSetterInvoke(
-      ast.Send node,
-      FunctionElement setter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitSuperSetterInvoke(ast.Send node, FunctionElement setter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleErroneousSuperSend(node);
   }
 
   @override
-  T visitSuperIndex(
-      ast.Send node,
-      MethodElement method,
-      ast.Node index,
-      _) {
+  T visitSuperIndex(ast.Send node, MethodElement method, ast.Node index, _) {
     return handleSuperMethodInvoke(
         node, method, analyzeArguments(node.arguments));
   }
 
   @override
   T visitSuperEquals(
-      ast.Send node,
-      MethodElement method,
-      ast.Node argument,
-      _) {
+      ast.Send node, MethodElement method, ast.Node argument, _) {
     // TODO(johnniwinther): Special case ==.
     return handleSuperMethodInvoke(
         node, method, analyzeArguments(node.arguments));
@@ -1483,43 +1262,29 @@
 
   @override
   T visitSuperNotEquals(
-      ast.Send node,
-      MethodElement method,
-      ast.Node argument,
-      _) {
+      ast.Send node, MethodElement method, ast.Node argument, _) {
     // TODO(johnniwinther): Special case !=.
     return handleSuperMethodInvoke(
         node, method, analyzeArguments(node.arguments));
   }
 
   @override
-  T visitSuperBinary(
-      ast.Send node,
-      MethodElement method,
-      op.BinaryOperator operator,
-      ast.Node argument,
-      _) {
+  T visitSuperBinary(ast.Send node, MethodElement method,
+      op.BinaryOperator operator, ast.Node argument, _) {
     return handleSuperMethodInvoke(
         node, method, analyzeArguments(node.arguments));
   }
 
   @override
   T visitSuperUnary(
-      ast.Send node,
-      op.UnaryOperator operator,
-      MethodElement method,
-      _) {
+      ast.Send node, op.UnaryOperator operator, MethodElement method, _) {
     return handleSuperMethodInvoke(
         node, method, analyzeArguments(node.arguments));
   }
 
   @override
-  T visitSuperMethodIncompatibleInvoke(
-      ast.Send node,
-      MethodElement method,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitSuperMethodIncompatibleInvoke(ast.Send node, MethodElement method,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleErroneousSuperSend(node);
   }
 
@@ -1530,10 +1295,10 @@
     ast.LiteralInt length = firstArgument.asLiteralInt();
     if (length != null) {
       return length.value;
-    } else if (element != null
-               && element.isField
-               && Elements.isStaticOrTopLevelField(element)
-               && compiler.world.fieldNeverChanges(element)) {
+    } else if (element != null &&
+        element.isField &&
+        Elements.isStaticOrTopLevelField(element) &&
+        compiler.world.fieldNeverChanges(element)) {
       ConstantValue value =
           compiler.backend.constants.getConstantValueForVariable(element);
       if (value != null && value.isInt) {
@@ -1594,12 +1359,12 @@
     T returnType = handleStaticSend(node, selector, mask, target, arguments);
     if (Elements.isGrowableListConstructorCall(constructor, node, compiler)) {
       return inferrer.concreteTypes.putIfAbsent(
-          node, () => types.allocateList(
-              types.growableListType, node, outermostElement,
-              types.nonNullEmpty(), 0));
-    } else if (Elements.isFixedListConstructorCall(constructor, node, compiler)
-        || Elements.isFilledListConstructorCall(constructor, node, compiler)) {
-
+          node,
+          () => types.allocateList(types.growableListType, node,
+              outermostElement, types.nonNullEmpty(), 0));
+    } else if (Elements.isFixedListConstructorCall(
+            constructor, node, compiler) ||
+        Elements.isFilledListConstructorCall(constructor, node, compiler)) {
       int length = findLength(node);
       T elementType =
           Elements.isFixedListConstructorCall(constructor, node, compiler)
@@ -1607,18 +1372,18 @@
               : arguments.positional[1];
 
       return inferrer.concreteTypes.putIfAbsent(
-          node, () => types.allocateList(
-              types.fixedListType, node, outermostElement,
+          node,
+          () => types.allocateList(types.fixedListType, node, outermostElement,
               elementType, length));
-    } else if (
-        Elements.isConstructorOfTypedArraySubclass(constructor, compiler)) {
+    } else if (Elements.isConstructorOfTypedArraySubclass(
+        constructor, compiler)) {
       int length = findLength(node);
-      T elementType = inferrer.returnTypeOfElement(
-          target.enclosingClass.lookupMember('[]'));
+      T elementType = inferrer
+          .returnTypeOfElement(target.enclosingClass.lookupMember('[]'));
       return inferrer.concreteTypes.putIfAbsent(
-        node, () => types.allocateList(
-          types.nonNullExact(target.enclosingClass), node,
-          outermostElement, elementType, length));
+          node,
+          () => types.allocateList(types.nonNullExact(target.enclosingClass),
+              node, outermostElement, elementType, length));
     } else {
       return returnType;
     }
@@ -1631,13 +1396,8 @@
   }
 
   @override
-  T errorNonConstantConstructorInvoke(
-      ast.NewExpression node,
-      Element element,
-      DartType type,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T errorNonConstantConstructorInvoke(ast.NewExpression node, Element element,
+      DartType type, ast.NodeList arguments, CallStructure callStructure, _) {
     return bulkHandleNew(node, _);
   }
 
@@ -1648,8 +1408,14 @@
     TypeMask mask = elements.getTypeMask(node);
     handleStaticSend(node, selector, mask, element, arguments);
     return inferrer.registerCalledClosure(
-              node, selector, mask, inferrer.typeOfElement(element),
-              outermostElement, arguments, sideEffects, inLoop);
+        node,
+        selector,
+        mask,
+        inferrer.typeOfElement(element),
+        outermostElement,
+        arguments,
+        sideEffects,
+        inLoop);
   }
 
   /// Handle invocation of a top level or static [function].
@@ -1671,62 +1437,38 @@
   }
 
   @override
-  T visitStaticFieldInvoke(
-      ast.Send node,
-      FieldElement field,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitStaticFieldInvoke(ast.Send node, FieldElement field,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleStaticFieldOrGetterInvoke(node, field);
   }
 
   @override
-  T visitStaticFunctionInvoke(
-      ast.Send node,
-      MethodElement function,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitStaticFunctionInvoke(ast.Send node, MethodElement function,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleStaticFunctionInvoke(node, function);
   }
 
   @override
-  T visitStaticFunctionIncompatibleInvoke(
-      ast.Send node,
-      MethodElement function,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitStaticFunctionIncompatibleInvoke(ast.Send node, MethodElement function,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleInvalidStaticInvoke(node);
   }
 
   @override
-  T visitStaticGetterInvoke(
-      ast.Send node,
-      FunctionElement getter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitStaticGetterInvoke(ast.Send node, FunctionElement getter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleStaticFieldOrGetterInvoke(node, getter);
   }
 
   @override
-  T visitTopLevelFieldInvoke(
-      ast.Send node,
-      FieldElement field,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitTopLevelFieldInvoke(ast.Send node, FieldElement field,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleStaticFieldOrGetterInvoke(node, field);
   }
 
   @override
-  T visitTopLevelFunctionInvoke(
-      ast.Send node,
-      MethodElement function,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitTopLevelFunctionInvoke(ast.Send node, MethodElement function,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleStaticFunctionInvoke(node, function);
   }
 
@@ -1741,42 +1483,26 @@
   }
 
   @override
-  T visitTopLevelGetterInvoke(
-      ast.Send node,
-      FunctionElement getter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitTopLevelGetterInvoke(ast.Send node, FunctionElement getter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleStaticFieldOrGetterInvoke(node, getter);
   }
 
   @override
-  T visitStaticSetterInvoke(
-      ast.Send node,
-      MethodElement setter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitStaticSetterInvoke(ast.Send node, MethodElement setter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleInvalidStaticInvoke(node);
   }
 
   @override
-  T visitTopLevelSetterInvoke(
-      ast.Send node,
-      MethodElement setter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitTopLevelSetterInvoke(ast.Send node, MethodElement setter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleInvalidStaticInvoke(node);
   }
 
   @override
-  T visitUnresolvedInvoke(
-      ast.Send node,
-      Element element,
-      ast.NodeList arguments,
-      Selector selector,
-      _) {
+  T visitUnresolvedInvoke(ast.Send node, Element element,
+      ast.NodeList arguments, Selector selector, _) {
     return handleInvalidStaticInvoke(node);
   }
 
@@ -1846,124 +1572,78 @@
   }
 
   @override
-  T visitDynamicPropertyGet(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      _) {
+  T visitDynamicPropertyGet(ast.Send node, ast.Node receiver, Name name, _) {
     return handleDynamicGet(node);
   }
 
   @override
   T visitIfNotNullDynamicPropertyGet(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      _) {
+      ast.Send node, ast.Node receiver, Name name, _) {
     return handleDynamicGet(node);
   }
 
   @override
-  T visitLocalVariableGet(
-      ast.Send node,
-      LocalVariableElement variable,
-      _) {
+  T visitLocalVariableGet(ast.Send node, LocalVariableElement variable, _) {
     return handleLocalGet(node, variable);
   }
 
   @override
-  T visitParameterGet(
-      ast.Send node,
-      ParameterElement parameter,
-      _) {
+  T visitParameterGet(ast.Send node, ParameterElement parameter, _) {
     return handleLocalGet(node, parameter);
   }
 
   @override
-  T visitLocalFunctionGet(
-      ast.Send node,
-      LocalFunctionElement function,
-      _) {
+  T visitLocalFunctionGet(ast.Send node, LocalFunctionElement function, _) {
     return handleLocalGet(node, function);
   }
 
   @override
-  T visitStaticFieldGet(
-      ast.Send node,
-      FieldElement field,
-      _) {
+  T visitStaticFieldGet(ast.Send node, FieldElement field, _) {
     return handleStaticFieldGet(node, field);
   }
 
   @override
-  T visitStaticFunctionGet(
-      ast.Send node,
-      MethodElement function,
-      _) {
+  T visitStaticFunctionGet(ast.Send node, MethodElement function, _) {
     return handleStaticFunctionGet(node, function);
   }
 
   @override
-  T visitStaticGetterGet(
-      ast.Send node,
-      FunctionElement getter,
-      _) {
+  T visitStaticGetterGet(ast.Send node, FunctionElement getter, _) {
     return handleStaticGetterGet(node, getter);
   }
 
   @override
-  T visitThisPropertyGet(
-      ast.Send node,
-      Name name,
-      _) {
+  T visitThisPropertyGet(ast.Send node, Name name, _) {
     return handleDynamicGet(node);
   }
 
   @override
-  T visitTopLevelFieldGet(
-      ast.Send node,
-      FieldElement field,
-      _) {
+  T visitTopLevelFieldGet(ast.Send node, FieldElement field, _) {
     return handleStaticFieldGet(node, field);
   }
 
   @override
-  T visitTopLevelFunctionGet(
-      ast.Send node,
-      MethodElement function,
-      _) {
+  T visitTopLevelFunctionGet(ast.Send node, MethodElement function, _) {
     return handleStaticFunctionGet(node, function);
   }
 
   @override
-  T visitTopLevelGetterGet(
-      ast.Send node,
-      FunctionElement getter,
-      _) {
+  T visitTopLevelGetterGet(ast.Send node, FunctionElement getter, _) {
     return handleStaticGetterGet(node, getter);
   }
 
   @override
-  T visitStaticSetterGet(
-      ast.Send node,
-      MethodElement setter,
-      _) {
+  T visitStaticSetterGet(ast.Send node, MethodElement setter, _) {
     return types.dynamicType;
   }
 
   @override
-  T visitTopLevelSetterGet(
-      ast.Send node,
-      MethodElement setter,
-      _) {
+  T visitTopLevelSetterGet(ast.Send node, MethodElement setter, _) {
     return types.dynamicType;
   }
 
   @override
-  T visitUnresolvedGet(
-      ast.Send node,
-      Element element,
-      _) {
+  T visitUnresolvedGet(ast.Send node, Element element, _) {
     return types.dynamicType;
   }
 
@@ -1972,66 +1652,45 @@
     ArgumentsTypes arguments = analyzeArguments(node.arguments);
     Selector selector = elements.getSelector(node);
     TypeMask mask = elements.getTypeMask(node);
-    return inferrer.registerCalledClosure(
-        node, selector, mask, closure, outermostElement, arguments,
-        sideEffects, inLoop);
+    return inferrer.registerCalledClosure(node, selector, mask, closure,
+        outermostElement, arguments, sideEffects, inLoop);
   }
 
   @override
-  T visitExpressionInvoke(
-      ast.Send node,
-      ast.Node expression,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitExpressionInvoke(ast.Send node, ast.Node expression,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleCallInvoke(node, expression.accept(this));
-   }
+  }
 
   @override
   T visitThisInvoke(
-      ast.Send node,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+      ast.Send node, ast.NodeList arguments, CallStructure callStructure, _) {
     return handleCallInvoke(node, thisType);
   }
 
   @override
-  T visitParameterInvoke(
-      ast.Send node,
-      ParameterElement parameter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitParameterInvoke(ast.Send node, ParameterElement parameter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleCallInvoke(node, locals.use(parameter));
   }
 
   @override
-  T visitLocalVariableInvoke(
-      ast.Send node,
-      LocalVariableElement variable,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitLocalVariableInvoke(ast.Send node, LocalVariableElement variable,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     return handleCallInvoke(node, locals.use(variable));
   }
 
   @override
-  T visitLocalFunctionInvoke(
-      ast.Send node,
-      LocalFunctionElement function,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  T visitLocalFunctionInvoke(ast.Send node, LocalFunctionElement function,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     ArgumentsTypes argumentTypes = analyzeArguments(node.arguments);
     Selector selector = elements.getSelector(node);
     TypeMask mask = elements.getTypeMask(node);
     // This only works for function statements. We need a
     // more sophisticated type system with function types to support
     // more.
-    return inferrer.registerCalledElement(
-        node, selector, mask, outermostElement, function, argumentTypes,
-        sideEffects, inLoop);
+    return inferrer.registerCalledElement(node, selector, mask,
+        outermostElement, function, argumentTypes, sideEffects, inLoop);
   }
 
   @override
@@ -2045,28 +1704,21 @@
     return types.dynamicType;
   }
 
-  T handleStaticSend(ast.Node node,
-                     Selector selector,
-                     TypeMask mask,
-                     Element element,
-                     ArgumentsTypes arguments) {
+  T handleStaticSend(ast.Node node, Selector selector, TypeMask mask,
+      Element element, ArgumentsTypes arguments) {
     assert(!element.isFactoryConstructor ||
-           !(element as ConstructorElement).isRedirectingFactory);
+        !(element as ConstructorElement).isRedirectingFactory);
     // Erroneous elements may be unresolved, for example missing getters.
     if (Elements.isUnresolved(element)) return types.dynamicType;
     // TODO(herhut): should we follow redirecting constructors here? We would
     // need to pay attention if the constructor is pointing to an erroneous
     // element.
-    return inferrer.registerCalledElement(
-        node, selector, mask, outermostElement, element, arguments,
-        sideEffects, inLoop);
+    return inferrer.registerCalledElement(node, selector, mask,
+        outermostElement, element, arguments, sideEffects, inLoop);
   }
 
-  T handleDynamicSend(ast.Node node,
-                      Selector selector,
-                      TypeMask mask,
-                      T receiverType,
-                      ArgumentsTypes arguments) {
+  T handleDynamicSend(ast.Node node, Selector selector, TypeMask mask,
+      T receiverType, ArgumentsTypes arguments) {
     assert(receiverType != null);
     if (types.selectorNeedsUpdate(receiverType, mask)) {
       mask = receiverType == types.dynamicType
@@ -2091,9 +1743,8 @@
       }
     }
 
-    return inferrer.registerCalledSelector(
-        node, selector, mask, receiverType, outermostElement, arguments,
-        sideEffects, inLoop);
+    return inferrer.registerCalledSelector(node, selector, mask, receiverType,
+        outermostElement, arguments, sideEffects, inLoop);
   }
 
   T handleDynamicInvoke(ast.Send node) {
@@ -2125,11 +1776,9 @@
       checkIfExposesThis(selector, types.newTypedSelector(receiverType, mask));
     }
 
-    ArgumentsTypes arguments = node.isPropertyAccess
-        ? null
-        : analyzeArguments(node.arguments);
-    if (selector.name == '==' ||
-        selector.name == '!=') {
+    ArgumentsTypes arguments =
+        node.isPropertyAccess ? null : analyzeArguments(node.arguments);
+    if (selector.name == '==' || selector.name == '!=') {
       if (types.isNull(receiverType)) {
         potentiallyAddNullCheck(node, node.arguments.head);
         return types.boolType;
@@ -2173,14 +1822,8 @@
     }
 
     ArgumentsTypes arguments = new ArgumentsTypes<T>(unnamed, named);
-    return inferrer.registerCalledElement(node,
-                                          null,
-                                          null,
-                                          outermostElement,
-                                          element,
-                                          arguments,
-                                          sideEffects,
-                                          inLoop);
+    return inferrer.registerCalledElement(node, null, null, outermostElement,
+        element, arguments, sideEffects, inLoop);
   }
 
   T visitRedirectingFactoryBody(ast.RedirectingFactoryBody node) {
@@ -2201,25 +1844,18 @@
 
   T visitReturn(ast.Return node) {
     ast.Node expression = node.expression;
-    recordReturnType(expression == null
-        ? types.nullType
-        : expression.accept(this));
+    recordReturnType(
+        expression == null ? types.nullType : expression.accept(this));
     locals.seenReturnOrThrow = true;
     return null;
   }
 
-  T handleForInLoop(ast.ForIn node,
-                    T iteratorType,
-                    Selector currentSelector,
-                    TypeMask currentMask,
-                    Selector moveNextSelector,
-                    TypeMask moveNextMask) {
-    handleDynamicSend(
-        node, moveNextSelector, moveNextMask, iteratorType,
+  T handleForInLoop(ast.ForIn node, T iteratorType, Selector currentSelector,
+      TypeMask currentMask, Selector moveNextSelector, TypeMask moveNextMask) {
+    handleDynamicSend(node, moveNextSelector, moveNextMask, iteratorType,
         new ArgumentsTypes<T>.empty());
-    T currentType = handleDynamicSend(
-        node, currentSelector, currentMask, iteratorType,
-        new ArgumentsTypes<T>.empty());
+    T currentType = handleDynamicSend(node, currentSelector, currentMask,
+        iteratorType, new ArgumentsTypes<T>.empty());
 
     if (node.expression.isThis()) {
       // Any reasonable implementation of an iterator would expose
@@ -2239,9 +1875,8 @@
       receiverType = types.dynamicType;
     }
 
-    handlePlainAssignment(identifier, element, selector, mask,
-                          receiverType, currentType,
-                          node.expression);
+    handlePlainAssignment(identifier, element, selector, mask, receiverType,
+        currentType, node.expression);
     return handleLoop(node, () {
       visit(node.body);
     });
@@ -2259,12 +1894,11 @@
     Element ctor = backend.helpers.streamIteratorConstructor;
 
     /// Synthesize a call to the [StreamIterator] constructor.
-    T iteratorType = handleStaticSend(node, null, null, ctor,
-                                      new ArgumentsTypes<T>([expressionType],
-                                                            null));
+    T iteratorType = handleStaticSend(
+        node, null, null, ctor, new ArgumentsTypes<T>([expressionType], null));
 
     return handleForInLoop(node, iteratorType, currentSelector, currentMask,
-                           moveNextSelector, moveNextMask);
+        moveNextSelector, moveNextMask);
   }
 
   T visitSyncForIn(ast.SyncForIn node) {
@@ -2276,11 +1910,10 @@
     Selector moveNextSelector = Selectors.moveNext;
     TypeMask moveNextMask = elements.getMoveNextTypeMask(node);
 
-    T iteratorType = handleDynamicSend(
-        node, iteratorSelector, iteratorMask, expressionType,
-        new ArgumentsTypes<T>.empty());
+    T iteratorType = handleDynamicSend(node, iteratorSelector, iteratorMask,
+        expressionType, new ArgumentsTypes<T>.empty());
 
     return handleForInLoop(node, iteratorType, currentSelector, currentMask,
-                           moveNextSelector, moveNextMask);
+        moveNextSelector, moveNextMask);
   }
 }
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_dump.dart b/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
index a3520a0..a651852 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_dump.dart
@@ -29,10 +29,10 @@
   static const String outputDir = 'typegraph';
 
   final TypeGraphInferrerEngine inferrer;
-  final Map<TypeInformation, Set<TypeInformation>> assignmentsBeforeAnalysis
-      = <TypeInformation, Set<TypeInformation>>{};
-  final Map<TypeInformation, Set<TypeInformation>> assignmentsBeforeTracing
-      = <TypeInformation, Set<TypeInformation>>{};
+  final Map<TypeInformation, Set<TypeInformation>> assignmentsBeforeAnalysis =
+      <TypeInformation, Set<TypeInformation>>{};
+  final Map<TypeInformation, Set<TypeInformation>> assignmentsBeforeTracing =
+      <TypeInformation, Set<TypeInformation>>{};
   final Set<String> usedFilenames = new Set<String>();
 
   TypeGraphDump(this.inferrer);
@@ -65,8 +65,9 @@
         <Element, List<TypeInformation>>{};
     for (TypeInformation node in inferrer.types.allTypes) {
       if (node.contextMember != null) {
-        nodes.putIfAbsent(node.contextMember, () => <TypeInformation>[])
-             .add(node);
+        nodes
+            .putIfAbsent(node.contextMember, () => <TypeInformation>[])
+            .add(node);
       }
     }
     // Print every group separately.
@@ -100,9 +101,8 @@
     List<String> parts = <String>[];
     parts.add(element.library?.libraryName);
     parts.add(element.enclosingClass?.name);
-    Element namedElement = element is LocalElement
-        ? element.executableContext
-        : element;
+    Element namedElement =
+        element is LocalElement ? element.executableContext : element;
     if (namedElement.isGetter) {
       parts.add('get-${namedElement.name}');
     } else if (namedElement.isSetter) {
@@ -114,7 +114,8 @@
         parts.add(namedElement.name);
       }
     } else if (namedElement.isOperator) {
-      parts.add(Elements.operatorNameToIdentifier(namedElement.name)
+      parts.add(Elements
+          .operatorNameToIdentifier(namedElement.name)
           .replaceAll(r'$', '-'));
     } else {
       parts.add(namedElement.name);
@@ -205,10 +206,8 @@
   ///
   /// If [dst] is a record type node, [port] may refer to one of the fields
   /// defined in that record (e.g. `obj`, `arg0`, `arg1`, etc)
-  void addEdge(TypeInformation src,
-               TypeInformation dst,
-               {String port,
-                String color: 'black'}) {
+  void addEdge(TypeInformation src, TypeInformation dst,
+      {String port, String color: 'black'}) {
     if (isExternal(src) && isExternal(dst)) {
       return; // Do not add edges between external nodes.
     }
@@ -270,10 +269,8 @@
   ///
   /// [inputs] specify named inputs to the node. If omitted, edges will be
   /// based on [node.assignments].
-  void addNode(TypeInformation node,
-               String text,
-               {String color: defaultNodeColor,
-                Map<String, TypeInformation> inputs}) {
+  void addNode(TypeInformation node, String text,
+      {String color: defaultNodeColor, Map<String, TypeInformation> inputs}) {
     seen.add(node);
     String style = getStyleForNode(node, color);
     text = appendDetails(node, text);
@@ -297,9 +294,8 @@
       var tracerSet = global.assignmentsBeforeTracing[node] ?? const [];
       var currentSet = node.assignments.toSet();
       for (TypeInformation assignment in currentSet) {
-        String color = originalSet.contains(assignment)
-            ? unchangedEdge
-            : addedEdge;
+        String color =
+            originalSet.contains(assignment) ? unchangedEdge : addedEdge;
         addEdge(assignment, node, color: color);
       }
       for (TypeInformation assignment in originalSet) {
@@ -351,7 +347,7 @@
   }
 
   void visitStringLiteralTypeInformation(StringLiteralTypeInformation info) {
-    String text = shorten(info.value.slowToString()).replaceAll('\n','\\n');
+    String text = shorten(info.value.slowToString()).replaceAll('\n', '\\n');
     addNode(info, 'StringLiteral\n"$text"');
   }
 
@@ -373,7 +369,8 @@
     addNode(info, text, color: callColor, inputs: inputs);
   }
 
-  void visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) {
+  void visitClosureCallSiteTypeInformation(
+      ClosureCallSiteTypeInformation info) {
     handleCall(info, 'ClosureCallSite', {});
   }
 
@@ -381,10 +378,9 @@
     handleCall(info, 'StaticCallSite', {});
   }
 
-  void visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) {
-    handleCall(info, 'DynamicCallSite', {
-      'obj': info.receiver
-    });
+  void visitDynamicCallSiteTypeInformation(
+      DynamicCallSiteTypeInformation info) {
+    handleCall(info, 'DynamicCallSite', {'obj': info.receiver});
   }
 
   void visitMemberTypeInformation(MemberTypeInformation info) {
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
index f12a8b4..e19436f 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
@@ -7,52 +7,26 @@
 import 'dart:collection' show Queue;
 
 import '../common.dart';
-import '../common/names.dart' show
-    Identifiers,
-    Names;
-import '../compiler.dart' show
-    Compiler;
+import '../common/names.dart' show Identifiers, Names;
+import '../compiler.dart' show Compiler;
 import '../constants/values.dart';
-import '../dart_types.dart' show
-    DartType,
-    FunctionType,
-    InterfaceType,
-    TypeKind;
+import '../dart_types.dart'
+    show DartType, FunctionType, InterfaceType, TypeKind;
 import '../elements/elements.dart';
-import '../js_backend/js_backend.dart' show
-    Annotations,
-    JavaScriptBackend;
-import '../resolution/tree_elements.dart' show
-    TreeElementMapping;
-import '../tree/tree.dart' as ast show
-    DartString,
-    Node,
-    LiteralBool,
-    Send,
-    SendSet,
-    TryStatement;
-import '../types/types.dart' show
-    ContainerTypeMask,
-    MapTypeMask,
-    TypeMask,
-    TypesInferrer;
-import '../types/constants.dart' show
-    computeTypeMask;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/side_effects.dart' show
-    SideEffects;
-import '../util/util.dart' show
-    ImmutableEmptySet,
-    Setlet;
-import '../world.dart' show
-    ClassWorld;
+import '../js_backend/js_backend.dart' show Annotations, JavaScriptBackend;
+import '../resolution/tree_elements.dart' show TreeElementMapping;
+import '../tree/tree.dart' as ast
+    show DartString, Node, LiteralBool, Send, SendSet, TryStatement;
+import '../types/types.dart'
+    show ContainerTypeMask, MapTypeMask, TypeMask, TypesInferrer;
+import '../types/constants.dart' show computeTypeMask;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../universe/side_effects.dart' show SideEffects;
+import '../util/util.dart' show ImmutableEmptySet, Setlet;
+import '../world.dart' show ClassWorld;
 
-import 'inferrer_visitor.dart' show
-    ArgumentsTypes,
-    TypeSystem;
+import 'inferrer_visitor.dart' show ArgumentsTypes, TypeSystem;
 import 'simple_types_inferrer.dart';
 
 import 'closure_tracer.dart';
@@ -62,7 +36,6 @@
 import 'type_graph_dump.dart';
 import 'debug.dart' as debug;
 
-
 class TypeInformationSystem extends TypeSystem<TypeInformation> {
   final Compiler compiler;
   final ClassWorld classWorld;
@@ -90,13 +63,14 @@
   /// narrowing, phis, and containers).
   final List<TypeInformation> allocatedTypes = <TypeInformation>[];
 
-  Iterable<TypeInformation> get allTypes =>
-      [typeInformations.values,
-       allocatedLists.values,
-       allocatedMaps.values,
-       allocatedClosures,
-       concreteTypes.values,
-       allocatedTypes].expand((x) => x);
+  Iterable<TypeInformation> get allTypes => [
+        typeInformations.values,
+        allocatedLists.values,
+        allocatedMaps.values,
+        allocatedClosures,
+        concreteTypes.values,
+        allocatedTypes
+      ].expand((x) => x);
 
   TypeInformationSystem(Compiler compiler)
       : this.compiler = compiler,
@@ -264,8 +238,8 @@
     return new BoolLiteralTypeInformation(value, compiler.typesTask.boolType);
   }
 
-  TypeInformation computeLUB(TypeInformation firstType,
-                             TypeInformation secondType) {
+  TypeInformation computeLUB(
+      TypeInformation firstType, TypeInformation secondType) {
     if (firstType == null) return secondType;
     if (firstType == secondType) return firstType;
     if (firstType == nonNullEmptyType) return secondType;
@@ -281,11 +255,8 @@
     return info.type != mask;
   }
 
-  TypeInformation refineReceiver(
-      Selector selector,
-      TypeMask mask,
-      TypeInformation receiver,
-      bool isConditional) {
+  TypeInformation refineReceiver(Selector selector, TypeMask mask,
+      TypeInformation receiver, bool isConditional) {
     if (receiver.type.isExact) return receiver;
     TypeMask otherType =
         compiler.world.allFunctions.receiverType(selector, mask);
@@ -307,9 +278,8 @@
     return newType;
   }
 
-  TypeInformation narrowType(TypeInformation type,
-                             DartType annotation,
-                             {bool isNullable: true}) {
+  TypeInformation narrowType(TypeInformation type, DartType annotation,
+      {bool isNullable: true}) {
     if (annotation.treatAsDynamic) return type;
     if (annotation.isVoid) return nullType;
     if (annotation.element == classWorld.objectClass && isNullable) return type;
@@ -396,24 +366,21 @@
     return type == nullType;
   }
 
-  TypeInformation allocateList(TypeInformation type,
-                               ast.Node node,
-                               Element enclosing,
-                               [TypeInformation elementType, int length]) {
-    bool isTypedArray =
-        compiler.typedDataClass != null &&
+  TypeInformation allocateList(
+      TypeInformation type, ast.Node node, Element enclosing,
+      [TypeInformation elementType, int length]) {
+    bool isTypedArray = compiler.typedDataClass != null &&
         classWorld.isInstantiated(compiler.typedDataClass) &&
         type.type.satisfies(compiler.typedDataClass, classWorld);
     bool isConst = (type.type == compiler.typesTask.constListType);
     bool isFixed = (type.type == compiler.typesTask.fixedListType) ||
-                   isConst ||
-                   isTypedArray;
+        isConst ||
+        isTypedArray;
     bool isElementInferred = isConst || isTypedArray;
 
     int inferredLength = isFixed ? length : null;
-    TypeMask elementTypeMask = isElementInferred
-        ? elementType.type
-        : dynamicType.type;
+    TypeMask elementTypeMask =
+        isElementInferred ? elementType.type : dynamicType.type;
     ContainerTypeMask mask = new ContainerTypeMask(
         type.type, node, enclosing, elementTypeMask, inferredLength);
     ElementInContainerTypeInformation element =
@@ -432,11 +399,9 @@
     return result;
   }
 
-  TypeInformation allocateMap(ConcreteTypeInformation type,
-                              ast.Node node,
-                              Element element,
-                              [List<TypeInformation> keyTypes,
-                               List<TypeInformation> valueTypes]) {
+  TypeInformation allocateMap(
+      ConcreteTypeInformation type, ast.Node node, Element element,
+      [List<TypeInformation> keyTypes, List<TypeInformation> valueTypes]) {
     assert(keyTypes.length == valueTypes.length);
     bool isFixed = (type.type == compiler.typesTask.constMapType);
 
@@ -449,11 +414,8 @@
     } else {
       keyType = valueType = dynamicType.type;
     }
-    MapTypeMask mask = new MapTypeMask(type.type,
-                                       node,
-                                       element,
-                                       keyType,
-                                       valueType);
+    MapTypeMask mask =
+        new MapTypeMask(type.type, node, element, keyType, valueType);
 
     TypeInformation keyTypeInfo =
         new KeyInMapTypeInformation(currentMember, null);
@@ -486,8 +448,8 @@
     return info.isConcrete ? info.type : mask;
   }
 
-  TypeInformation allocateDiamondPhi(TypeInformation firstInput,
-                                     TypeInformation secondInput) {
+  TypeInformation allocateDiamondPhi(
+      TypeInformation firstInput, TypeInformation secondInput) {
     PhiElementTypeInformation result =
         new PhiElementTypeInformation(currentMember, null, false, null);
     result.addAssignment(firstInput);
@@ -496,10 +458,8 @@
     return result;
   }
 
-  PhiElementTypeInformation _addPhi(ast.Node node,
-                                    Local variable,
-                                    inputType,
-                                    bool isLoop) {
+  PhiElementTypeInformation _addPhi(
+      ast.Node node, Local variable, inputType, bool isLoop) {
     PhiElementTypeInformation result =
         new PhiElementTypeInformation(currentMember, node, isLoop, variable);
     allocatedTypes.add(result);
@@ -507,9 +467,8 @@
     return result;
   }
 
-  PhiElementTypeInformation allocatePhi(ast.Node node,
-                                        Local variable,
-                                        inputType) {
+  PhiElementTypeInformation allocatePhi(
+      ast.Node node, Local variable, inputType) {
     // Check if [inputType] is a phi for a local updated in
     // the try/catch block [node]. If it is, no need to allocate a new
     // phi.
@@ -521,23 +480,20 @@
     return _addPhi(node, variable, inputType, false);
   }
 
-  PhiElementTypeInformation allocateLoopPhi(ast.Node node,
-                                            Local variable,
-                                            inputType) {
+  PhiElementTypeInformation allocateLoopPhi(
+      ast.Node node, Local variable, inputType) {
     return _addPhi(node, variable, inputType, true);
   }
 
-  TypeInformation simplifyPhi(ast.Node node,
-                              Local variable,
-                              PhiElementTypeInformation phiType) {
+  TypeInformation simplifyPhi(
+      ast.Node node, Local variable, PhiElementTypeInformation phiType) {
     assert(phiType.branchNode == node);
     if (phiType.assignments.length == 1) return phiType.assignments.first;
     return phiType;
   }
 
   PhiElementTypeInformation addPhiInput(Local variable,
-                                        PhiElementTypeInformation phiType,
-                                        TypeInformation newType) {
+      PhiElementTypeInformation phiType, TypeInformation newType) {
     phiType.addAssignment(newType);
     return phiType;
   }
@@ -628,7 +584,7 @@
   int addedInGraph = 0;
 
   TypeGraphInferrerEngine(Compiler compiler, this.mainElement)
-        : super(compiler, new TypeInformationSystem(compiler));
+      : super(compiler, new TypeInformationSystem(compiler));
 
   JavaScriptBackend get backend => compiler.backend;
   Annotations get annotations => backend.annotations;
@@ -638,28 +594,26 @@
    * A set of selector names that [List] implements, that we know return
    * their element type.
    */
-  final Set<Selector> returnsListElementTypeSet = new Set<Selector>.from(
-    <Selector>[
-      new Selector.getter(const PublicName('first')),
-      new Selector.getter(const PublicName('last')),
-      new Selector.getter(const PublicName('single')),
-      new Selector.call(const PublicName('singleWhere'), CallStructure.ONE_ARG),
-      new Selector.call(const PublicName('elementAt'), CallStructure.ONE_ARG),
-      new Selector.index(),
-      new Selector.call(const PublicName('removeAt'), CallStructure.ONE_ARG),
-      new Selector.call(const PublicName('removeLast'), CallStructure.NO_ARGS)
-    ]);
+  final Set<Selector> returnsListElementTypeSet =
+      new Set<Selector>.from(<Selector>[
+    new Selector.getter(const PublicName('first')),
+    new Selector.getter(const PublicName('last')),
+    new Selector.getter(const PublicName('single')),
+    new Selector.call(const PublicName('singleWhere'), CallStructure.ONE_ARG),
+    new Selector.call(const PublicName('elementAt'), CallStructure.ONE_ARG),
+    new Selector.index(),
+    new Selector.call(const PublicName('removeAt'), CallStructure.ONE_ARG),
+    new Selector.call(const PublicName('removeLast'), CallStructure.NO_ARGS)
+  ]);
 
   bool returnsListElementType(Selector selector, TypeMask mask) {
     return mask != null &&
-           mask.isContainer &&
-           returnsListElementTypeSet.contains(selector);
+        mask.isContainer &&
+        returnsListElementTypeSet.contains(selector);
   }
 
   bool returnsMapValueType(Selector selector, TypeMask mask) {
-    return mask != null &&
-           mask.isMap &&
-           selector.isIndex;
+    return mask != null && mask.isMap && selector.isIndex;
   }
 
   void analyzeListAndEnqueue(ListTypeInformation info) {
@@ -745,18 +699,17 @@
 
     // Trace closures to potentially infer argument types.
     types.allocatedClosures.forEach((info) {
-
-      void trace(Iterable<FunctionElement> elements,
-                 ClosureTracerVisitor tracer) {
+      void trace(
+          Iterable<FunctionElement> elements, ClosureTracerVisitor tracer) {
         tracer.run();
         if (!tracer.continueAnalyzing) {
           elements.forEach((FunctionElement e) {
             compiler.world.registerMightBePassedToApply(e);
             if (debug.VERBOSE) print("traced closure $e as ${true} (bail)");
             e.functionSignature.forEachParameter((parameter) {
-              types.getInferredTypeOf(parameter).giveUp(
-                  this,
-                  clearAssignments: false);
+              types
+                  .getInferredTypeOf(parameter)
+                  .giveUp(this, clearAssignments: false);
             });
           });
           bailedOutOn.addAll(elements);
@@ -772,7 +725,8 @@
           });
           if (tracer.tracedType.mightBePassedToFunctionApply) {
             compiler.world.registerMightBePassedToApply(e);
-          };
+          }
+          ;
           if (debug.VERBOSE) {
             print("traced closure $e as "
                 "${compiler.world.getMightBePassedToApply(e)}");
@@ -799,9 +753,8 @@
           // We only are interested in functions here, as other targets
           // of this closure call are not a root to trace but an intermediate
           // for some other function.
-          Iterable<FunctionElement> elements =
-              new List<FunctionElement>.from(
-                  info.callees.where((e) => e.isFunction));
+          Iterable<FunctionElement> elements = new List<FunctionElement>.from(
+              info.callees.where((e) => e.isFunction));
           trace(elements, new ClosureTracerVisitor(elements, info, this));
         }
       } else {
@@ -832,23 +785,23 @@
     if (debug.PRINT_SUMMARY) {
       types.allocatedLists.values.forEach((ListTypeInformation info) {
         print('${info.type} '
-              'for ${info.originalType.allocationNode} '
-              'at ${info.originalType.allocationElement} '
-              'after ${info.refineCount}');
+            'for ${info.originalType.allocationNode} '
+            'at ${info.originalType.allocationElement} '
+            'after ${info.refineCount}');
       });
       types.allocatedMaps.values.forEach((MapTypeInformation info) {
         print('${info.type} '
-              'for ${info.originalType.allocationNode} '
-              'at ${info.originalType.allocationElement} '
-              'after ${info.refineCount}');
+            'for ${info.originalType.allocationNode} '
+            'at ${info.originalType.allocationElement} '
+            'after ${info.refineCount}');
       });
       types.allocatedClosures.forEach((TypeInformation info) {
         if (info is ElementTypeInformation) {
           print('${types.getInferredSignatureOf(info.element)} for '
-                '${info.element}');
+              '${info.element}');
         } else if (info is ClosureTypeInformation) {
           print('${types.getInferredSignatureOf(info.element)} for '
-                '${info.element}');
+              '${info.element}');
         } else if (info is DynamicCallSiteTypeInformation) {
           for (Element target in info.targets) {
             if (target is FunctionElement) {
@@ -900,8 +853,8 @@
           if (type is! ListTypeInformation && type is! MapTypeInformation) {
             // For non-container types, the constant handler does
             // constant folding that could give more precise results.
-            ConstantValue value = compiler.backend.constants
-                .getConstantValueForVariable(element);
+            ConstantValue value =
+                compiler.backend.constants.getConstantValueForVariable(element);
             if (value != null) {
               if (value.isFunction) {
                 FunctionConstantValue functionConstant = value;
@@ -951,8 +904,7 @@
       if (!info.inLoop) return;
       if (info is StaticCallSiteTypeInformation) {
         compiler.world.addFunctionCalledInLoop(info.calledElement);
-      } else if (info.mask != null &&
-                 !info.mask.containsAll(compiler.world)) {
+      } else if (info.mask != null && !info.mask.containsAll(compiler.world)) {
         // For instance methods, we only register a selector called in a
         // loop if it is a typed selector, to avoid marking too many
         // methods as being called from within a loop. This cuts down
@@ -1005,12 +957,9 @@
    * wheter assignments must be added or removed. If [init] is false,
    * parameters are added to the work queue.
    */
-  void updateParameterAssignments(TypeInformation caller,
-                                  Element callee,
-                                  ArgumentsTypes arguments,
-                                  Selector selector,
-                                  TypeMask mask,
-                                  {bool remove, bool addToQueue: true}) {
+  void updateParameterAssignments(TypeInformation caller, Element callee,
+      ArgumentsTypes arguments, Selector selector, TypeMask mask,
+      {bool remove, bool addToQueue: true}) {
     if (callee.name == Identifiers.noSuchMethod_) return;
     if (callee.isField) {
       if (selector.isSetter) {
@@ -1060,10 +1009,10 @@
         TypeInformation type = visitingRequiredParameter
             ? arguments.positional[parameterIndex]
             : signature.optionalParametersAreNamed
-              ? arguments.named[parameter.name]
-              : parameterIndex < arguments.positional.length
-                  ? arguments.positional[parameterIndex]
-                  : null;
+                ? arguments.named[parameter.name]
+                : parameterIndex < arguments.positional.length
+                    ? arguments.positional[parameterIndex]
+                    : null;
         if (type == null) type = getDefaultTypeOfParameter(parameter);
         TypeInformation info = types.getInferredTypeOf(parameter);
         if (remove) {
@@ -1083,8 +1032,8 @@
    * a [PlaceholderTypeInformation], which will be replaced. All its uses are
    * updated.
    */
-  void setDefaultTypeOfParameter(ParameterElement parameter,
-                                 TypeInformation type) {
+  void setDefaultTypeOfParameter(
+      ParameterElement parameter, TypeInformation type) {
     assert(parameter.functionDeclaration.isImplementation);
     TypeInformation existing = defaultTypeOfParameter[parameter];
     defaultTypeOfParameter[parameter] = type;
@@ -1141,20 +1090,17 @@
   }
 
   TypeInformation returnTypeOfElement(Element element) {
-    if (element is !FunctionElement) return types.dynamicType;
+    if (element is! FunctionElement) return types.dynamicType;
     return types.getInferredTypeOf(element);
   }
 
-  void recordTypeOfFinalField(Spannable node,
-                              Element analyzed,
-                              Element element,
-                              TypeInformation type) {
+  void recordTypeOfFinalField(
+      Spannable node, Element analyzed, Element element, TypeInformation type) {
     types.getInferredTypeOf(element).addAssignment(type);
   }
 
-  void recordTypeOfNonFinalField(Spannable node,
-                                 Element element,
-                                 TypeInformation type) {
+  void recordTypeOfNonFinalField(
+      Spannable node, Element element, TypeInformation type) {
     types.getInferredTypeOf(element).addAssignment(type);
   }
 
@@ -1174,9 +1120,8 @@
     if (info.assignments.isEmpty) info.addAssignment(type);
   }
 
-  TypeInformation addReturnTypeFor(Element element,
-                                   TypeInformation unused,
-                                   TypeInformation newType) {
+  TypeInformation addReturnTypeFor(
+      Element element, TypeInformation unused, TypeInformation newType) {
     TypeInformation type = types.getInferredTypeOf(element);
     // TODO(ngeoffray): Clean up. We do this check because
     // [SimpleTypesInferrer] deals with two different inferrers.
@@ -1185,17 +1130,24 @@
     return type;
   }
 
-  TypeInformation registerCalledElement(Spannable node,
-                                        Selector selector,
-                                        TypeMask mask,
-                                        Element caller,
-                                        Element callee,
-                                        ArgumentsTypes arguments,
-                                        SideEffects sideEffects,
-                                        bool inLoop) {
+  TypeInformation registerCalledElement(
+      Spannable node,
+      Selector selector,
+      TypeMask mask,
+      Element caller,
+      Element callee,
+      ArgumentsTypes arguments,
+      SideEffects sideEffects,
+      bool inLoop) {
     CallSiteTypeInformation info = new StaticCallSiteTypeInformation(
-          types.currentMember, node, caller, callee, selector, mask, arguments,
-          inLoop);
+        types.currentMember,
+        node,
+        caller,
+        callee,
+        selector,
+        mask,
+        arguments,
+        inLoop);
     // If this class has a 'call' method then we have essentially created a
     // closure here. Register it as such so that it is traced.
     if (selector != null && selector.isCall && callee.isConstructor) {
@@ -1210,18 +1162,18 @@
     return info;
   }
 
-  TypeInformation registerCalledSelector(ast.Node node,
-                                         Selector selector,
-                                         TypeMask mask,
-                                         TypeInformation receiverType,
-                                         Element caller,
-                                         ArgumentsTypes arguments,
-                                         SideEffects sideEffects,
-                                         bool inLoop) {
+  TypeInformation registerCalledSelector(
+      ast.Node node,
+      Selector selector,
+      TypeMask mask,
+      TypeInformation receiverType,
+      Element caller,
+      ArgumentsTypes arguments,
+      SideEffects sideEffects,
+      bool inLoop) {
     if (selector.isClosureCall) {
-      return registerCalledClosure(
-          node, selector, mask, receiverType,
-          caller, arguments, sideEffects, inLoop);
+      return registerCalledClosure(node, selector, mask, receiverType, caller,
+          arguments, sideEffects, inLoop);
     }
 
     compiler.world.allFunctions.filter(selector, mask).forEach((callee) {
@@ -1229,8 +1181,14 @@
     });
 
     CallSiteTypeInformation info = new DynamicCallSiteTypeInformation(
-          types.currentMember, node, caller, selector, mask,
-          receiverType, arguments, inLoop);
+        types.currentMember,
+        node,
+        caller,
+        selector,
+        mask,
+        receiverType,
+        arguments,
+        inLoop);
 
     info.addToGraph(this);
     allocatedCalls.add(info);
@@ -1238,26 +1196,33 @@
   }
 
   TypeInformation registerAwait(ast.Node node, TypeInformation argument) {
-    AwaitTypeInformation info = new AwaitTypeInformation(types.currentMember,
-                                                         node);
+    AwaitTypeInformation info =
+        new AwaitTypeInformation(types.currentMember, node);
     info.addAssignment(argument);
     types.allocatedTypes.add(info);
     return info;
   }
 
-  TypeInformation registerCalledClosure(ast.Node node,
-                                        Selector selector,
-                                        TypeMask mask,
-                                        TypeInformation closure,
-                                        Element caller,
-                                        ArgumentsTypes arguments,
-                                        SideEffects sideEffects,
-                                        bool inLoop) {
+  TypeInformation registerCalledClosure(
+      ast.Node node,
+      Selector selector,
+      TypeMask mask,
+      TypeInformation closure,
+      Element caller,
+      ArgumentsTypes arguments,
+      SideEffects sideEffects,
+      bool inLoop) {
     sideEffects.setDependsOnSomething();
     sideEffects.setAllSideEffects();
     CallSiteTypeInformation info = new ClosureCallSiteTypeInformation(
-          types.currentMember, node, caller, selector, mask, closure, arguments,
-          inLoop);
+        types.currentMember,
+        node,
+        caller,
+        selector,
+        mask,
+        closure,
+        arguments,
+        inLoop);
     info.addToGraph(this);
     allocatedCalls.add(info);
     return info;
@@ -1269,28 +1234,30 @@
   Iterable<Element> sortResolvedElements() {
     int max = 0;
     Map<int, Setlet<Element>> methodSizes = new Map<int, Setlet<Element>>();
-    compiler.enqueuer.resolution.processedElements.forEach((AstElement element) {
-        // TODO(ngeoffray): Not sure why the resolver would put a null
-        // mapping.
-        if (!compiler.enqueuer.resolution.hasBeenProcessed(element)) return;
-        TreeElementMapping mapping = element.resolvedAst.elements;
-        element = element.implementation;
-        if (element.impliesType) return;
-        assert(invariant(element,
-            element.isField ||
-            element.isFunction ||
-            element.isConstructor ||
-            element.isGetter ||
-            element.isSetter,
-            message: 'Unexpected element kind: ${element.kind}'));
-        if (element.isAbstract) return;
-        // Put the other operators in buckets by length, later to be added in
-        // length order.
-        int length = mapping.getSelectorCount();
-        max = length > max ? length : max;
-        Setlet<Element> set = methodSizes.putIfAbsent(
-            length, () => new Setlet<Element>());
-        set.add(element);
+    compiler.enqueuer.resolution.processedElements
+        .forEach((AstElement element) {
+      // TODO(ngeoffray): Not sure why the resolver would put a null
+      // mapping.
+      if (!compiler.enqueuer.resolution.hasBeenProcessed(element)) return;
+      TreeElementMapping mapping = element.resolvedAst.elements;
+      element = element.implementation;
+      if (element.impliesType) return;
+      assert(invariant(
+          element,
+          element.isField ||
+              element.isFunction ||
+              element.isConstructor ||
+              element.isGetter ||
+              element.isSetter,
+          message: 'Unexpected element kind: ${element.kind}'));
+      if (element.isAbstract) return;
+      // Put the other operators in buckets by length, later to be added in
+      // length order.
+      int length = mapping.getSelectorCount();
+      max = length > max ? length : max;
+      Setlet<Element> set =
+          methodSizes.putIfAbsent(length, () => new Setlet<Element>());
+      set.add(element);
     });
 
     List<Element> result = <Element>[];
@@ -1338,8 +1305,8 @@
   /**
    * Returns the type of [element] when being called with [selector].
    */
-  TypeInformation typeOfElementWithSelector(Element element,
-                                            Selector selector) {
+  TypeInformation typeOfElementWithSelector(
+      Element element, Selector selector) {
     if (element.name == Identifiers.noSuchMethod_ &&
         selector.name != element.name) {
       // An invocation can resolve to a [noSuchMethod], in which case
@@ -1426,8 +1393,7 @@
     if (inferrer.returnsMapValueType(selector, mask)) {
       MapTypeMask mapTypeMask = mask;
       TypeMask valueType = mapTypeMask.valueType;
-      return valueType == null ? compiler.typesTask.dynamicType
-                               : valueType;
+      return valueType == null ? compiler.typesTask.dynamicType : valueType;
     }
 
     TypeMask result = const TypeMask.nonNullEmpty();
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index 0ed437c..1815539 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -11,34 +11,26 @@
 import '../compiler.dart' show Compiler;
 import '../constants/values.dart';
 import '../cps_ir/cps_ir_nodes.dart' as cps_ir show Node;
-import '../dart_types.dart' show
-    DartType,
-    FunctionType,
-    InterfaceType,
-    TypeKind;
+import '../dart_types.dart'
+    show DartType, FunctionType, InterfaceType, TypeKind;
 import '../elements/elements.dart';
 import '../native/native.dart' as native;
-import '../tree/tree.dart' as ast show
-    DartString,
-    Node,
-    LiteralBool,
-    Send,
-    SendSet,
-    TryStatement;
-import '../types/types.dart' show
-    ContainerTypeMask,
-    DictionaryTypeMask,
-    MapTypeMask,
-    TypeMask,
-    ValueTypeMask;
+import '../tree/tree.dart' as ast
+    show DartString, Node, LiteralBool, Send, SendSet, TryStatement;
+import '../types/types.dart'
+    show
+        ContainerTypeMask,
+        DictionaryTypeMask,
+        MapTypeMask,
+        TypeMask,
+        ValueTypeMask;
 import '../universe/selector.dart' show Selector;
 import '../util/util.dart' show ImmutableEmptySet, Setlet;
 import '../world.dart' show ClassWorld;
 
 import 'inferrer_visitor.dart' show ArgumentsTypes;
-import 'type_graph_inferrer.dart' show
-    TypeGraphInferrerEngine,
-    TypeInformationSystem;
+import 'type_graph_inferrer.dart'
+    show TypeGraphInferrerEngine, TypeInformationSystem;
 import 'debug.dart' as debug;
 
 /**
@@ -105,8 +97,9 @@
 
   bool get isConcrete => false;
 
-  TypeInformation(this.context) : _assignments = <TypeInformation>[],
-                                  users = new Setlet<TypeInformation>();
+  TypeInformation(this.context)
+      : _assignments = <TypeInformation>[],
+        users = new Setlet<TypeInformation>();
 
   TypeInformation.noAssignments(this.context)
       : _assignments = const <TypeInformation>[],
@@ -220,7 +213,9 @@
   }
 
   void removeAndClearReferences(TypeGraphInferrerEngine inferrer) {
-    assignments.forEach((info) { info.removeUser(this); });
+    assignments.forEach((info) {
+      info.removeUser(this);
+    });
   }
 
   void stabilize(TypeGraphInferrerEngine inferrer) {
@@ -279,8 +274,7 @@
  * called.
  */
 class ParameterAssignments extends IterableBase<TypeInformation> {
-  final Map<TypeInformation, int> assignments =
-      new Map<TypeInformation, int>();
+  final Map<TypeInformation, int> assignments = new Map<TypeInformation, int>();
 
   void remove(TypeInformation info) {
     int existing = assignments[info];
@@ -365,8 +359,8 @@
 
   ElementTypeInformation._internal(MemberTypeInformation context, this.element)
       : super(context);
-  ElementTypeInformation._withAssignments(MemberTypeInformation context,
-      this.element, assignments)
+  ElementTypeInformation._withAssignments(
+      MemberTypeInformation context, this.element, assignments)
       : super.withAssignments(context, assignments);
 }
 
@@ -467,7 +461,7 @@
   TypeMask handleSpecialCases(TypeGraphInferrerEngine inferrer) {
     if (element.isField &&
         (!inferrer.backend.canBeUsedForGlobalOptimizations(element) ||
-         inferrer.annotations.assumeDynamic(element))) {
+            inferrer.annotations.assumeDynamic(element))) {
       // Do not infer types for fields that have a corresponding annotation or
       // are assigned by synthesized calls
 
@@ -480,20 +474,24 @@
       // goes in the work queue.
       giveUp(inferrer);
       if (element.isField) {
-        return inferrer.typeOfNativeBehavior(
-            native.NativeBehavior.ofFieldLoad(element, inferrer.compiler)).type;
+        return inferrer
+            .typeOfNativeBehavior(
+                native.NativeBehavior.ofFieldLoad(element, inferrer.compiler))
+            .type;
       } else {
         assert(element.isFunction ||
-               element.isGetter ||
-               element.isSetter ||
-               element.isConstructor);
+            element.isGetter ||
+            element.isSetter ||
+            element.isConstructor);
         TypedElement typedElement = element;
         var elementType = typedElement.type;
         if (elementType.kind != TypeKind.FUNCTION) {
           return safeType(inferrer);
         } else {
-          return inferrer.typeOfNativeBehavior(
-              native.NativeBehavior.ofMethod(element, inferrer.compiler)).type;
+          return inferrer
+              .typeOfNativeBehavior(
+                  native.NativeBehavior.ofMethod(element, inferrer.compiler))
+              .type;
         }
       }
     }
@@ -512,24 +510,22 @@
     return null;
   }
 
-  TypeMask potentiallyNarrowType(TypeMask mask,
-                                 TypeGraphInferrerEngine inferrer) {
+  TypeMask potentiallyNarrowType(
+      TypeMask mask, TypeGraphInferrerEngine inferrer) {
     Compiler compiler = inferrer.compiler;
     if (!compiler.options.trustTypeAnnotations &&
         !compiler.options.enableTypeAssertions &&
         !inferrer.annotations.trustTypeAnnotations(element)) {
       return mask;
     }
-    if (element.isGenerativeConstructor ||
-        element.isSetter) {
+    if (element.isGenerativeConstructor || element.isSetter) {
       return mask;
     }
     if (element.isField) {
       return _narrowType(compiler, mask, element.type);
     }
-    assert(element.isFunction ||
-           element.isGetter ||
-           element.isFactoryConstructor);
+    assert(
+        element.isFunction || element.isGetter || element.isFactoryConstructor);
 
     FunctionType type = element.type;
     return _narrowType(compiler, mask, type.returnType);
@@ -586,19 +582,19 @@
   ParameterElement get element => super.element;
   FunctionElement get declaration => element.functionDeclaration;
 
-  ParameterTypeInformation._internal(ParameterElement element,
-                                     TypeInformationSystem types)
-      : super._internal(types.getInferredTypeOf(element.functionDeclaration),
-                        element) {
+  ParameterTypeInformation._internal(
+      ParameterElement element, TypeInformationSystem types)
+      : super._internal(
+            types.getInferredTypeOf(element.functionDeclaration), element) {
     assert(!element.functionDeclaration.isInstanceMember);
   }
 
-  ParameterTypeInformation._instanceMember(ParameterElement element,
-                                           TypeInformationSystem types)
+  ParameterTypeInformation._instanceMember(
+      ParameterElement element, TypeInformationSystem types)
       : super._withAssignments(
-          types.getInferredTypeOf(element.functionDeclaration),
-          element,
-          new ParameterAssignments()) {
+            types.getInferredTypeOf(element.functionDeclaration),
+            element,
+            new ParameterAssignments()) {
     assert(element.functionDeclaration.isInstanceMember);
   }
 
@@ -637,8 +633,8 @@
     }
     if (declaration.isInstanceMember &&
         (declaration.name == Identifiers.noSuchMethod_ ||
-        (declaration.name == Identifiers.call &&
-         disableInferenceForClosures))) {
+            (declaration.name == Identifiers.call &&
+                disableInferenceForClosures))) {
       // Do not infer types for parameters of [noSuchMethod] and
       // [call] instance methods.
       giveUp(inferrer);
@@ -661,8 +657,8 @@
     return null;
   }
 
-  TypeMask potentiallyNarrowType(TypeMask mask,
-                                 TypeGraphInferrerEngine inferrer) {
+  TypeMask potentiallyNarrowType(
+      TypeMask mask, TypeGraphInferrerEngine inferrer) {
     Compiler compiler = inferrer.compiler;
     if (!compiler.options.trustTypeAnnotations &&
         !inferrer.annotations.trustTypeAnnotations(declaration)) {
@@ -678,8 +674,8 @@
   TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     TypeMask special = handleSpecialCases(inferrer);
     if (special != null) return special;
-    return potentiallyNarrowType(inferrer.types.computeTypeMask(assignments),
-                                 inferrer);
+    return potentiallyNarrowType(
+        inferrer.types.computeTypeMask(assignments), inferrer);
   }
 
   TypeMask safeType(TypeGraphInferrerEngine inferrer) {
@@ -721,14 +717,9 @@
   final ArgumentsTypes arguments;
   final bool inLoop;
 
-  CallSiteTypeInformation(
-      MemberTypeInformation context,
-      this.call,
-      this.caller,
-      this.selector,
-      this.mask,
-      this.arguments,
-      this.inLoop) : super.noAssignments(context);
+  CallSiteTypeInformation(MemberTypeInformation context, this.call, this.caller,
+      this.selector, this.mask, this.arguments, this.inLoop)
+      : super.noAssignments(context);
 
   String toString() => 'Call site $call $type';
 
@@ -762,8 +753,8 @@
       arguments.forEach((info) => info.addUser(this));
     }
     inferrer.updateParameterAssignments(
-        this, calledElement, arguments, selector, mask, remove: false,
-        addToQueue: false);
+        this, calledElement, arguments, selector, mask,
+        remove: false, addToQueue: false);
   }
 
   bool get isSynthesized {
@@ -808,6 +799,7 @@
 
 class DynamicCallSiteTypeInformation extends CallSiteTypeInformation {
   final TypeInformation receiver;
+
   /// Cached targets of this call.
   Iterable<Element> targets;
 
@@ -835,8 +827,8 @@
       callee.addCall(caller, call);
       callee.addUser(this);
       inferrer.updateParameterAssignments(
-          this, element, arguments, selector, typeMask, remove: false,
-          addToQueue: false);
+          this, element, arguments, selector, typeMask,
+          remove: false, addToQueue: false);
     }
   }
 
@@ -847,7 +839,8 @@
 
     if (mask != receiverType) {
       return receiverType == inferrer.compiler.typesTask.dynamicType
-          ? null : receiverType;
+          ? null
+          : receiverType;
     } else {
       return mask;
     }
@@ -856,9 +849,9 @@
   bool targetsIncludeComplexNoSuchMethod(TypeGraphInferrerEngine inferrer) {
     return targets.any((Element e) {
       return e is FunctionElement &&
-             e.isInstanceMember &&
-             e.name == Identifiers.noSuchMethod_ &&
-             inferrer.backend.isComplexNoSuchMethod(e);
+          e.isInstanceMember &&
+          e.name == Identifiers.noSuchMethod_ &&
+          inferrer.backend.isComplexNoSuchMethod(e);
     });
   }
 
@@ -868,9 +861,8 @@
    * example, we know int + int returns an int. The Dart code for
    * [int.operator+] only says it returns a [num].
    */
-  TypeInformation handleIntrisifiedSelector(Selector selector,
-                                            TypeMask mask,
-                                            TypeGraphInferrerEngine inferrer) {
+  TypeInformation handleIntrisifiedSelector(
+      Selector selector, TypeMask mask, TypeGraphInferrerEngine inferrer) {
     ClassWorld classWorld = inferrer.classWorld;
     if (!classWorld.backend.intImplementation.isResolved) return null;
     if (mask == null) return null;
@@ -888,8 +880,8 @@
       return info.type.satisfies(uint31Implementation, classWorld);
     }
     bool isPositiveInt(info) {
-      return info.type.satisfies(
-          classWorld.backend.positiveIntImplementation, classWorld);
+      return info.type
+          .satisfies(classWorld.backend.positiveIntImplementation, classWorld);
     }
 
     String name = selector.name;
@@ -897,12 +889,16 @@
     // Dart code, for example:
     // int + int -> int
     // uint31 | uint31 -> uint31
-    if (name == '*' || name == '+' || name == '%' || name == 'remainder' ||
+    if (name == '*' ||
+        name == '+' ||
+        name == '%' ||
+        name == 'remainder' ||
         name == '~/') {
       if (isPositiveInt(receiver) &&
           arguments.hasOnePositionalArgumentThatMatches(isPositiveInt)) {
         // uint31 + uint31 -> uint32
-        if (name == '+' && isUInt31(receiver) &&
+        if (name == '+' &&
+            isUInt31(receiver) &&
             arguments.hasOnePositionalArgumentThatMatches(isUInt31)) {
           return inferrer.types.uint32Type;
         } else {
@@ -954,8 +950,7 @@
     Compiler compiler = inferrer.compiler;
     TypeMask maskToUse =
         compiler.world.extendMaskIfReachesAll(selector, typeMask);
-    bool canReachAll = compiler.enabledInvokeOn &&
-        (maskToUse != typeMask);
+    bool canReachAll = compiler.enabledInvokeOn && (maskToUse != typeMask);
 
     // If this call could potentially reach all methods that satisfy
     // the untyped selector (through noSuchMethod's `Invocation`
@@ -972,27 +967,27 @@
       targets
           .where((target) => !oldTargets.contains(target))
           .forEach((element) {
-            MemberTypeInformation callee =
-                inferrer.types.getInferredTypeOf(element);
-            callee.addCall(caller, call);
-            callee.addUser(this);
-            inferrer.updateParameterAssignments(
-                this, element, arguments, selector, typeMask, remove: false,
-                addToQueue: true);
-          });
+        MemberTypeInformation callee =
+            inferrer.types.getInferredTypeOf(element);
+        callee.addCall(caller, call);
+        callee.addUser(this);
+        inferrer.updateParameterAssignments(
+            this, element, arguments, selector, typeMask,
+            remove: false, addToQueue: true);
+      });
 
       // Walk over the old targets, and remove calls that cannot happen anymore.
       oldTargets
           .where((target) => !targets.contains(target))
           .forEach((element) {
-            MemberTypeInformation callee =
-                inferrer.types.getInferredTypeOf(element);
-            callee.removeCall(caller, call);
-            callee.removeUser(this);
-            inferrer.updateParameterAssignments(
-                this, element, arguments, selector, typeMask, remove: true,
-            addToQueue: true);
-          });
+        MemberTypeInformation callee =
+            inferrer.types.getInferredTypeOf(element);
+        callee.removeCall(caller, call);
+        callee.removeUser(this);
+        inferrer.updateParameterAssignments(
+            this, element, arguments, selector, typeMask,
+            remove: true, addToQueue: true);
+      });
     }
 
     // Walk over the found targets, and compute the joined union type mask
@@ -1020,7 +1015,7 @@
           if (dictionaryTypeMask.typeMap.containsKey(key)) {
             if (debug.VERBOSE) {
               print("Dictionary lookup for $key yields "
-                    "${dictionaryTypeMask.typeMap[key]}.");
+                  "${dictionaryTypeMask.typeMap[key]}.");
             }
             return dictionaryTypeMask.typeMap[key];
           } else {
@@ -1034,8 +1029,7 @@
         }
         MapTypeMask mapTypeMask = typeMask;
         if (debug.VERBOSE) {
-          print(
-              "Map lookup for $selector yields ${mapTypeMask.valueType}.");
+          print("Map lookup for $selector yields ${mapTypeMask.valueType}.");
         }
         return mapTypeMask.valueType;
       } else {
@@ -1067,8 +1061,8 @@
               inferrer.types.getInferredTypeOf(element);
           callee.addCall(caller, call);
           inferrer.updateParameterAssignments(
-              this, element, arguments, selector, mask, remove: false,
-              addToQueue: true);
+              this, element, arguments, selector, mask,
+              remove: false, addToQueue: true);
         }
       }
     }
@@ -1171,8 +1165,7 @@
     // needs to notify its users.
   }
 
-  void removeUser(TypeInformation user) {
-  }
+  void removeUser(TypeInformation user) {}
 
   void addAssignment(TypeInformation assignment) {
     throw "Not supported";
@@ -1261,8 +1254,8 @@
 
   TypeMask computeType(TypeGraphInferrerEngine inferrer) {
     TypeMask input = assignments.first.type;
-    TypeMask intersection = input.intersection(typeAnnotation,
-        inferrer.classWorld);
+    TypeMask intersection =
+        input.intersection(typeAnnotation, inferrer.classWorld);
     if (debug.ANOMALY_WARN) {
       if (!input.containsMask(intersection, inferrer.classWorld) ||
           !typeAnnotation.containsMask(intersection, inferrer.classWorld)) {
@@ -1292,8 +1285,8 @@
   /** Whether the element type in that container has been inferred. */
   bool inferred = false;
 
-  InferredTypeInformation(MemberTypeInformation context,
-                          TypeInformation parentType)
+  InferredTypeInformation(
+      MemberTypeInformation context, TypeInformation parentType)
       : super(context) {
     if (parentType != null) addAssignment(parentType);
   }
@@ -1312,8 +1305,7 @@
  * A [ListTypeInformation] is a [TypeInformation] created
  * for each `List` instantiations.
  */
-class ListTypeInformation extends TypeInformation
-    with TracedTypeInformation {
+class ListTypeInformation extends TypeInformation with TracedTypeInformation {
   final ElementInContainerTypeInformation elementType;
 
   /** The container type before it is inferred. */
@@ -1331,10 +1323,8 @@
    */
   bool checksGrowable = true;
 
-  ListTypeInformation(MemberTypeInformation context,
-                      this.originalType,
-                      this.elementType,
-                      this.originalLength)
+  ListTypeInformation(MemberTypeInformation context, this.originalType,
+      this.elementType, this.originalLength)
       : super(context) {
     type = originalType;
     inferredLength = originalType.length;
@@ -1356,11 +1346,12 @@
     if (!mask.isContainer ||
         mask.elementType != elementType.type ||
         mask.length != inferredLength) {
-      return new ContainerTypeMask(originalType.forwardTo,
-                                   originalType.allocationNode,
-                                   originalType.allocationElement,
-                                   elementType.type,
-                                   inferredLength);
+      return new ContainerTypeMask(
+          originalType.forwardTo,
+          originalType.allocationNode,
+          originalType.allocationElement,
+          elementType.type,
+          inferredLength);
     }
     return mask;
   }
@@ -1379,8 +1370,7 @@
  * elements in a [ListTypeInformation].
  */
 class ElementInContainerTypeInformation extends InferredTypeInformation {
-  ElementInContainerTypeInformation(MemberTypeInformation context,
-      elementType)
+  ElementInContainerTypeInformation(MemberTypeInformation context, elementType)
       : super(context, elementType);
 
   String toString() => 'Element in container $type';
@@ -1394,8 +1384,7 @@
  * A [MapTypeInformation] is a [TypeInformation] created
  * for maps.
  */
-class MapTypeInformation extends TypeInformation
-    with TracedTypeInformation {
+class MapTypeInformation extends TypeInformation with TracedTypeInformation {
   // When in Dictionary mode, this map tracks the type of the values that
   // have been assigned to a specific [String] key.
   final Map<String, ValueInMapTypeInformation> typeInfoMap = {};
@@ -1409,25 +1398,22 @@
 
   bool get inDictionaryMode => !bailedOut && _allKeysAreStrings;
 
-  MapTypeInformation(MemberTypeInformation context,
-                     this.originalType,
-                     this.keyType,
-                     this.valueType)
+  MapTypeInformation(MemberTypeInformation context, this.originalType,
+      this.keyType, this.valueType)
       : super(context) {
     keyType.addUser(this);
     valueType.addUser(this);
     type = originalType;
   }
 
-  TypeInformation addEntryAssignment(TypeInformation key,
-                                     TypeInformation value,
-                                     [bool nonNull = false]) {
+  TypeInformation addEntryAssignment(TypeInformation key, TypeInformation value,
+      [bool nonNull = false]) {
     TypeInformation newInfo = null;
     if (_allKeysAreStrings && key is StringLiteralTypeInformation) {
       String keyString = key.asString();
       typeInfoMap.putIfAbsent(keyString, () {
-          newInfo = new ValueInMapTypeInformation(context, null, nonNull);
-          return newInfo;
+        newInfo = new ValueInMapTypeInformation(context, null, nonNull);
+        return newInfo;
       });
       typeInfoMap[keyString].addAssignment(value);
     } else {
@@ -1482,18 +1468,20 @@
       for (var key in typeInfoMap.keys) {
         mappings[key] = typeInfoMap[key].type;
       }
-      return new DictionaryTypeMask(originalType.forwardTo,
-                                    originalType.allocationNode,
-                                    originalType.allocationElement,
-                                    keyType.type,
-                                    valueType.type,
-                                    mappings);
+      return new DictionaryTypeMask(
+          originalType.forwardTo,
+          originalType.allocationNode,
+          originalType.allocationElement,
+          keyType.type,
+          valueType.type,
+          mappings);
     } else {
-      return new MapTypeMask(originalType.forwardTo,
-                             originalType.allocationNode,
-                             originalType.allocationElement,
-                             keyType.type,
-                             valueType.type);
+      return new MapTypeMask(
+          originalType.forwardTo,
+          originalType.allocationNode,
+          originalType.allocationElement,
+          keyType.type,
+          valueType.type);
     }
   }
 
@@ -1516,8 +1504,7 @@
       }
     } else if (type.isMap) {
       MapTypeMask mask = type;
-      if (mask.keyType != keyType.type ||
-          mask.valueType != valueType.type) {
+      if (mask.keyType != keyType.type || mask.valueType != valueType.type) {
         return toTypeMask(inferrer);
       }
     } else {
@@ -1531,8 +1518,8 @@
 
   bool hasStableType(TypeGraphInferrerEngine inferrer) {
     return keyType.isStable &&
-           valueType.isStable &&
-           super.hasStableType(inferrer);
+        valueType.isStable &&
+        super.hasStableType(inferrer);
   }
 
   void cleanup() {
@@ -1555,8 +1542,8 @@
  * for the keys in a [MapTypeInformation]
  */
 class KeyInMapTypeInformation extends InferredTypeInformation {
-  KeyInMapTypeInformation(MemberTypeInformation context,
-      TypeInformation keyType)
+  KeyInMapTypeInformation(
+      MemberTypeInformation context, TypeInformation keyType)
       : super(context, keyType);
 
   accept(TypeInformationVisitor visitor) {
@@ -1576,8 +1563,9 @@
   // mode can ever be marked as [nonNull].
   final bool nonNull;
 
-  ValueInMapTypeInformation(MemberTypeInformation context,
-      TypeInformation valueType, [this.nonNull = false])
+  ValueInMapTypeInformation(
+      MemberTypeInformation context, TypeInformation valueType,
+      [this.nonNull = false])
       : super(context, valueType);
 
   accept(TypeInformationVisitor visitor) {
@@ -1585,8 +1573,9 @@
   }
 
   TypeMask computeType(TypeGraphInferrerEngine inferrer) {
-    return nonNull ? super.computeType(inferrer)
-                   : super.computeType(inferrer).nullable();
+    return nonNull
+        ? super.computeType(inferrer)
+        : super.computeType(inferrer).nullable();
   }
 
   String toString() => 'Value in Map $type';
@@ -1602,7 +1591,7 @@
   final Local variable;
 
   PhiElementTypeInformation(MemberTypeInformation context, this.branchNode,
-                            this.isLoopPhi, this.variable)
+      this.isLoopPhi, this.variable)
       : super(context);
 
   TypeMask computeType(TypeGraphInferrerEngine inferrer) {
@@ -1621,8 +1610,7 @@
   final ast.Node node;
   final Element element;
 
-  ClosureTypeInformation(MemberTypeInformation context, this.node,
-                         this.element)
+  ClosureTypeInformation(MemberTypeInformation context, this.node, this.element)
       : super(context);
 
   TypeMask computeType(TypeGraphInferrerEngine inferrer) => safeType(inferrer);
@@ -1648,6 +1636,7 @@
 abstract class TracedTypeInformation implements TypeInformation {
   /// Set to false once analysis has succeeded.
   bool bailedOut = true;
+
   /// Set to true once analysis is completed.
   bool analyzed = false;
 
@@ -1658,8 +1647,9 @@
    * flow in.
    */
   Set<TypeInformation> get flowsInto {
-    return (_flowsInto == null) ? const ImmutableEmptySet<TypeInformation>()
-                                : _flowsInto;
+    return (_flowsInto == null)
+        ? const ImmutableEmptySet<TypeInformation>()
+        : _flowsInto;
   }
 
   /**
diff --git a/pkg/compiler/lib/src/info/naive_analysis_result.dart b/pkg/compiler/lib/src/info/naive_analysis_result.dart
index 0061be4..d18dc91 100644
--- a/pkg/compiler/lib/src/info/naive_analysis_result.dart
+++ b/pkg/compiler/lib/src/info/naive_analysis_result.dart
@@ -17,9 +17,9 @@
   NaiveAnalysisResult();
 
   ReceiverInfo infoForReceiver(Node receiver) =>
-    new NaiveReceiverInfo(receiver);
+      new NaiveReceiverInfo(receiver);
   SelectorInfo infoForSelector(Node receiver, Selector selector) =>
-    new NaiveSelectorInfo(receiver, selector);
+      new NaiveSelectorInfo(receiver, selector);
 }
 
 class NaiveReceiverInfo implements ReceiverInfo {
diff --git a/pkg/compiler/lib/src/info/send_info.dart b/pkg/compiler/lib/src/info/send_info.dart
index 0985360..b0f5f1e 100644
--- a/pkg/compiler/lib/src/info/send_info.dart
+++ b/pkg/compiler/lib/src/info/send_info.dart
@@ -6,28 +6,22 @@
 library compiler.src.info.send_info;
 
 import 'package:dart2js_info/src/measurements.dart';
-import 'package:dart2js_info/src/util.dart' show
-    recursiveDiagnosticString;
+import 'package:dart2js_info/src/util.dart' show recursiveDiagnosticString;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../dart_types.dart';
 import '../closure.dart';
 import '../elements/elements.dart';
-import '../elements/visitor.dart' show
-    ElementVisitor;
+import '../elements/visitor.dart' show ElementVisitor;
 import '../resolution/operators.dart';
 import '../resolution/semantic_visitor.dart';
 import '../resolution/tree_elements.dart';
 import '../constants/expressions.dart';
-import '../parser/partial_elements.dart' show
-    PartialElement;
+import '../parser/partial_elements.dart' show PartialElement;
 import '../tree/tree.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
 
 import 'analysis_result.dart';
 import 'naive_analysis_result.dart';
@@ -35,8 +29,7 @@
 
 /// Collects a set of [Measurements] about send expressions in the function [f].
 // TODO(sigmund): collect information on initializers too.
-Measurements collectSendMeasurements(FunctionElement f,
-                                     Compiler compiler) {
+Measurements collectSendMeasurements(FunctionElement f, Compiler compiler) {
   DiagnosticReporter reporter = compiler.reporter;
   return reporter.withCurrentElement(f, () {
     // TODO(sigmund): enable for platform too.
@@ -44,7 +37,7 @@
     var name = _qualifiedName(f);
     if (!f.hasNode) {
       if (f is PartialElement) return const Measurements.unreachableFunction();
-      assert (f is ConstructorElement && f.isSynthesized);
+      assert(f is ConstructorElement && f.isSynthesized);
       // TODO(sigmund): measure synthethic forwarding sends, measure
       // initializers
       return new Measurements.reachableFunction();
@@ -60,12 +53,11 @@
     }
     var def = resolvedAst.elements.getFunctionDefinition(resolvedAst.node);
     if (def == null) {
-      assert (f is PartialElement);
+      assert(f is PartialElement);
       return const Measurements.unreachableFunction();
     }
 
-    var visitor = new _StatsTraversalVisitor(
-        compiler, resolvedAst.elements,
+    var visitor = new _StatsTraversalVisitor(compiler, resolvedAst.elements,
         reporter.spanFromSpannable(resolvedAst.node).uri);
     resolvedAst.node.accept(visitor);
     return visitor.measurements;
@@ -81,7 +73,6 @@
 class _StatsVisitor<T> extends Visitor
     with SemanticSendResolvedMixin<dynamic, T>
     implements SemanticSendVisitor<dynamic, T> {
-
   // TODO(sigmund): consider passing in several AnalysisResults at once, so we
   // can compute the different metrics together.
   /// Information we know about the program from static analysis.
@@ -108,9 +99,9 @@
     measurements.record(Metric.send, span.begin, span.end);
     if (node is SendSet) {
       if ((node.assignmentOperator != null &&
-                node.assignmentOperator.source != '=') ||
-            node.isPrefix ||
-            node.isPostfix) {
+              node.assignmentOperator.source != '=') ||
+          node.isPrefix ||
+          node.isPostfix) {
         assert(!node.isIfNullAssignment);
         // We count get and set separately in case one of them is defined by the
         // other could be a nSM error.
@@ -224,11 +215,13 @@
     measurements.record(Metric.monomorphicSend, span.begin, span.end);
     measurements.record(Metric.superSend, span.begin, span.end);
   }
+
   handleTypeVariable(Node node) {
     var span = reporter.spanFromSpannable(node);
     measurements.record(Metric.monomorphicSend, span.begin, span.end);
     measurements.record(Metric.typeVariableSend, span.begin, span.end);
   }
+
   handleStatic(Node node) {
     var span = reporter.spanFromSpannable(node);
     measurements.record(Metric.monomorphicSend, span.begin, span.end);
@@ -288,7 +281,7 @@
     Boolish usesInterceptor = selectorInfo.usesInterceptor;
     if (hasSelector == Boolish.yes) {
       if (selectorInfo.isAccurate && selectorInfo.possibleTargets == 1) {
-        assert (usesInterceptor != Boolish.maybe);
+        assert(usesInterceptor != Boolish.maybe);
         if (usesInterceptor == Boolish.yes) {
           handleSingleInterceptor(node);
         } else {
@@ -330,9 +323,13 @@
 
   // Constructors
 
-  void visitAbstractClassConstructorInvoke(NewExpression node,
-      ConstructorElement element, InterfaceType type, NodeList arguments,
-      CallStructure callStructure, T arg) {
+  void visitAbstractClassConstructorInvoke(
+      NewExpression node,
+      ConstructorElement element,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleConstructor(node);
   }
 
@@ -346,9 +343,13 @@
     handleConstructor(node);
   }
 
-  void visitGenerativeConstructorInvoke(NewExpression node,
-      ConstructorElement constructor, InterfaceType type, NodeList arguments,
-      CallStructure callStructure, T arg) {
+  void visitGenerativeConstructorInvoke(
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleConstructor(node);
   }
 
@@ -357,16 +358,25 @@
     handleConstructor(node);
   }
 
-  void visitRedirectingFactoryConstructorInvoke(NewExpression node,
-      ConstructorElement constructor, InterfaceType type,
-      ConstructorElement effectiveTarget, InterfaceType effectiveTargetType,
-      NodeList arguments, CallStructure callStructure, T arg) {
+  void visitRedirectingFactoryConstructorInvoke(
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      ConstructorElement effectiveTarget,
+      InterfaceType effectiveTargetType,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleConstructor(node);
   }
 
-  void visitRedirectingGenerativeConstructorInvoke(NewExpression node,
-      ConstructorElement constructor, InterfaceType type, NodeList arguments,
-      CallStructure callStructure, T arg) {
+  void visitRedirectingGenerativeConstructorInvoke(
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleConstructor(node);
   }
 
@@ -377,7 +387,6 @@
 
   // Dynamic sends
 
-
   // TODO(sigmund): many many things to add:
   // -- support for operators, indexers, etc.
   // -- logic about nullables
@@ -396,16 +405,14 @@
     handleIndex(node); // receiver[index] = t2
   }
 
-  void visitDynamicPropertyCompound(Send node, Node receiver,
-      Name name, AssignmentOperator operator, Node rhs, T arg) {
+  void visitDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, T arg) {
     handleDynamicProperty(node, receiver, new Selector.getter(name));
     handleOperator(node);
     handleDynamicProperty(node, receiver, new Selector.setter(name));
   }
 
-
-  void visitDynamicPropertyGet(
-      Send node, Node receiver, Name name, T arg) {
+  void visitDynamicPropertyGet(Send node, Node receiver, Name name, T arg) {
     handleDynamicProperty(node, receiver, new Selector.getter(name));
   }
 
@@ -414,15 +421,15 @@
     handleDynamicProperty(node, receiver, selector);
   }
 
-  void visitDynamicPropertyPostfix(Send node, Node receiver,
-       Name name, IncDecOperator operator, T arg) {
+  void visitDynamicPropertyPostfix(
+      Send node, Node receiver, Name name, IncDecOperator operator, T arg) {
     handleDynamicProperty(node, receiver, new Selector.getter(name));
     handleOperator(node);
     handleDynamicProperty(node, receiver, new Selector.setter(name));
   }
 
-  void visitDynamicPropertyPrefix(Send node, Node receiver, Name name,
-      IncDecOperator operator, T arg) {
+  void visitDynamicPropertyPrefix(
+      Send node, Node receiver, Name name, IncDecOperator operator, T arg) {
     handleDynamicProperty(node, receiver, new Selector.getter(name));
     handleOperator(node);
     handleDynamicProperty(node, receiver, new Selector.setter(name));
@@ -466,15 +473,15 @@
     handleDynamicProperty(node, receiver, selector);
   }
 
-  void visitIfNotNullDynamicPropertyPostfix(Send node, Node receiver, Name name,
-      IncDecOperator operator, T arg) {
+  void visitIfNotNullDynamicPropertyPostfix(
+      Send node, Node receiver, Name name, IncDecOperator operator, T arg) {
     handleDynamicProperty(node, receiver, new Selector.getter(name));
     handleOperator(node);
     handleDynamicProperty(node, receiver, new Selector.setter(name));
   }
 
-  void visitIfNotNullDynamicPropertyPrefix(Send node, Node receiver, Name name,
-      IncDecOperator operator, T arg) {
+  void visitIfNotNullDynamicPropertyPrefix(
+      Send node, Node receiver, Name name, IncDecOperator operator, T arg) {
     handleDynamicProperty(node, receiver, new Selector.getter(name));
     handleOperator(node);
     handleDynamicProperty(node, receiver, new Selector.setter(name));
@@ -649,9 +656,8 @@
     handleSuper(node);
   }
 
-  void visitSuperFieldFieldSetIfNull(
-      Send node, FieldElement readField, FieldElement writtenField, Node rhs,
-      T arg) {
+  void visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
+      FieldElement writtenField, Node rhs, T arg) {
     handleSuper(node);
     handleNSMSuper(node, readField.enclosingClass);
   }
@@ -696,8 +702,8 @@
     handleSuper(node);
   }
 
-  void visitSuperFieldSetterSetIfNull(Send node, FieldElement field,
-      FunctionElement setter, Node rhs, T arg) {
+  void visitSuperFieldSetterSetIfNull(
+      Send node, FieldElement field, FunctionElement setter, Node rhs, T arg) {
     handleSuper(node);
     handleSuper(node);
   }
@@ -723,8 +729,8 @@
     handleSuper(node);
   }
 
-  void visitSuperGetterFieldSetIfNull(Send node, FunctionElement getter,
-      FieldElement field, Node rhs, T arg) {
+  void visitSuperGetterFieldSetIfNull(
+      Send node, FunctionElement getter, FieldElement field, Node rhs, T arg) {
     handleSuper(node);
     handleSuper(node);
   }
@@ -761,16 +767,24 @@
     handleSuper(node);
   }
 
-  void visitSuperIndexPostfix(Send node, MethodElement indexFunction,
-      MethodElement indexSetFunction, Node index, IncDecOperator operator,
+  void visitSuperIndexPostfix(
+      Send node,
+      MethodElement indexFunction,
+      MethodElement indexSetFunction,
+      Node index,
+      IncDecOperator operator,
       T arg) {
     handleSuper(node);
     handleOperator(node);
     handleSuper(node);
   }
 
-  void visitSuperIndexPrefix(Send node, MethodElement indexFunction,
-      MethodElement indexSetFunction, Node index, IncDecOperator operator,
+  void visitSuperIndexPrefix(
+      Send node,
+      MethodElement indexFunction,
+      MethodElement indexSetFunction,
+      Node index,
+      IncDecOperator operator,
       T arg) {
     handleSuper(node);
     handleOperator(node);
@@ -804,8 +818,8 @@
     handleSuper(node);
   }
 
-  void visitThisPropertyCompound(Send node, Name name,
-      AssignmentOperator operator, Node rhs, T arg) {
+  void visitThisPropertyCompound(
+      Send node, Name name, AssignmentOperator operator, Node rhs, T arg) {
     handleThisProperty(node, new Selector.getter(name));
     handleOperator(node);
     handleThisProperty(node, new Selector.setter(name));
@@ -816,15 +830,15 @@
     handleThisProperty(node, selector);
   }
 
-  void visitThisPropertyPostfix(Send node, Name name, IncDecOperator operator,
-      T arg) {
+  void visitThisPropertyPostfix(
+      Send node, Name name, IncDecOperator operator, T arg) {
     handleThisProperty(node, new Selector.getter(name));
     handleOperator(node);
     handleThisProperty(node, new Selector.setter(name));
   }
 
-  void visitThisPropertyPrefix(Send node, Name name, IncDecOperator operator,
-      T arg) {
+  void visitThisPropertyPrefix(
+      Send node, Name name, IncDecOperator operator, T arg) {
     handleThisProperty(node, new Selector.getter(name));
     handleOperator(node);
     handleThisProperty(node, new Selector.setter(name));
@@ -997,9 +1011,13 @@
 
   // Statically known "no such method" sends
 
-  void visitConstructorIncompatibleInvoke(NewExpression node,
-      ConstructorElement constructor, InterfaceType type, NodeList arguments,
-      CallStructure callStructure, T arg) {
+  void visitConstructorIncompatibleInvoke(
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleNSMError(node);
   }
 
@@ -1099,8 +1117,8 @@
     handleNSMError(node);
   }
 
-  void visitFinalSuperFieldSetIfNull(Send node, FieldElement field,
-      Node rhs, T arg) {
+  void visitFinalSuperFieldSetIfNull(
+      Send node, FieldElement field, Node rhs, T arg) {
     handleSuper(node);
     handleNSMSuper(node, field.enclosingClass);
   }
@@ -1175,15 +1193,18 @@
     handleStatic(node);
   }
 
-  void visitTopLevelMethodSetIfNull(Send node, FunctionElement method,
-      Node rhs, T arg) {
+  void visitTopLevelMethodSetIfNull(
+      Send node, FunctionElement method, Node rhs, T arg) {
     handleStatic(node);
     handleNSMError(node);
   }
 
-  void visitLocalFunctionIncompatibleInvoke(Send node,
-      LocalFunctionElement function, NodeList arguments,
-      CallStructure callStructure, T arg) {
+  void visitLocalFunctionIncompatibleInvoke(
+      Send node,
+      LocalFunctionElement function,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleNSMError(node);
   }
 
@@ -1327,8 +1348,11 @@
     handleNSMSuper(node, setter.enclosingClass);
   }
 
-  void visitTopLevelFunctionIncompatibleInvoke(Send node,
-      MethodElement function, NodeList arguments, CallStructure callStructure,
+  void visitTopLevelFunctionIncompatibleInvoke(
+      Send node,
+      MethodElement function,
+      NodeList arguments,
+      CallStructure callStructure,
       T arg) {
     handleNSMError(node);
   }
@@ -1394,8 +1418,11 @@
     handleNSMError(node);
   }
 
-  void visitTypeVariableTypeLiteralCompound(Send node,
-      TypeVariableElement element, AssignmentOperator operator, Node rhs,
+  void visitTypeVariableTypeLiteralCompound(
+      Send node,
+      TypeVariableElement element,
+      AssignmentOperator operator,
+      Node rhs,
       T arg) {
     handleTypeVariable(node);
     handleNSMError(node); // operator on a method closure yields nSM
@@ -1407,9 +1434,12 @@
     handleTypeVariable(node);
   }
 
-  void visitTypeVariableTypeLiteralInvoke(Send node,
-      TypeVariableElement element, NodeList arguments,
-      CallStructure callStructure, T arg) {
+  void visitTypeVariableTypeLiteralInvoke(
+      Send node,
+      TypeVariableElement element,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleNSMError(node);
   }
 
@@ -1480,8 +1510,12 @@
     handleNSMError(node);
   }
 
-  void visitUnresolvedClassConstructorInvoke(NewExpression node,
-      Element element, DartType type, NodeList arguments, Selector selector,
+  void visitUnresolvedClassConstructorInvoke(
+      NewExpression node,
+      Element element,
+      DartType type,
+      NodeList arguments,
+      Selector selector,
       T arg) {
     handleNSMError(node);
   }
@@ -1521,9 +1555,13 @@
     handleNoSend(node);
   }
 
-  void visitUnresolvedRedirectingFactoryConstructorInvoke(NewExpression node,
-      ConstructorElement constructor, InterfaceType type, NodeList arguments,
-      CallStructure callStructure, T arg) {
+  void visitUnresolvedRedirectingFactoryConstructorInvoke(
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleNSMError(node);
   }
 
@@ -1557,8 +1595,8 @@
     handleNoSend(node);
   }
 
-  void visitUnresolvedStaticGetterSetIfNull(Send node, Element element,
-      MethodElement setter, Node rhs, T arg) {
+  void visitUnresolvedStaticGetterSetIfNull(
+      Send node, Element element, MethodElement setter, Node rhs, T arg) {
     handleNSMError(node);
     handleNoSend(node);
   }
@@ -1584,8 +1622,8 @@
     handleNoSend(node);
   }
 
-  void visitUnresolvedStaticSetterSetIfNull(Send node, MethodElement getter,
-      Element element, Node rhs, T arg) {
+  void visitUnresolvedStaticSetterSetIfNull(
+      Send node, MethodElement getter, Element element, Node rhs, T arg) {
     handleNSMError(node);
     handleNoSend(node);
   }
@@ -1632,8 +1670,13 @@
     handleSuper(node);
   }
 
-  void visitUnresolvedSuperGetterCompoundIndexSet(Send node, Element element,
-      MethodElement setter, Node index, AssignmentOperator operator, Node rhs,
+  void visitUnresolvedSuperGetterCompoundIndexSet(
+      Send node,
+      Element element,
+      MethodElement setter,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
       T arg) {
     handleNSMSuper(node, element.enclosingClass);
     handleOperator(node);
@@ -1668,8 +1711,8 @@
     handleSuper(node);
   }
 
-  void visitUnresolvedSuperGetterSetIfNull(Send node, Element element,
-      MethodElement setter, Node rhs, T arg) {
+  void visitUnresolvedSuperGetterSetIfNull(
+      Send node, Element element, MethodElement setter, Node rhs, T arg) {
     handleNSMSuper(node, element.enclosingClass);
     handleSuper(node);
   }
@@ -1724,25 +1767,38 @@
     handleNSMSuper(node, element.enclosingClass);
   }
 
-  void visitUnresolvedSuperSetterCompoundIndexSet(Send node,
-      MethodElement getter, Element element, Node index,
-      AssignmentOperator operator, Node rhs, T arg) {
+  void visitUnresolvedSuperSetterCompoundIndexSet(
+      Send node,
+      MethodElement getter,
+      Element element,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
+      T arg) {
     handleSuper(node);
     handleOperator(node);
     handleNSMSuper(node, element.enclosingClass);
   }
 
-  void visitUnresolvedSuperSetterIndexPostfix(Send node,
-      MethodElement indexFunction, Element element, Node index,
-      IncDecOperator operator, T arg) {
+  void visitUnresolvedSuperSetterIndexPostfix(
+      Send node,
+      MethodElement indexFunction,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      T arg) {
     handleSuper(node);
     handleOperator(node);
     handleNSMSuper(node, element.enclosingClass);
   }
 
-  void visitUnresolvedSuperSetterIndexPrefix(Send node,
-      MethodElement indexFunction, Element element, Node index,
-      IncDecOperator operator, T arg) {
+  void visitUnresolvedSuperSetterIndexPrefix(
+      Send node,
+      MethodElement indexFunction,
+      Element element,
+      Node index,
+      IncDecOperator operator,
+      T arg) {
     handleSuper(node);
     handleOperator(node);
     handleNSMSuper(node, element.enclosingClass);
@@ -1762,8 +1818,8 @@
     handleNSMSuper(node, element.enclosingClass);
   }
 
-  void visitUnresolvedSuperSetterSetIfNull(Send node, MethodElement getter,
-      Element element, Node rhs, T arg) {
+  void visitUnresolvedSuperSetterSetIfNull(
+      Send node, MethodElement getter, Element element, Node rhs, T arg) {
     handleSuper(node);
     handleNSMSuper(node, element.enclosingClass);
   }
@@ -1794,8 +1850,8 @@
     handleNoSend(node);
   }
 
-  void visitUnresolvedTopLevelGetterSetIfNull(Send node, Element element,
-      MethodElement setter, Node rhs, T arg) {
+  void visitUnresolvedTopLevelGetterSetIfNull(
+      Send node, Element element, MethodElement setter, Node rhs, T arg) {
     handleNSMError(node);
     handleNoSend(node);
   }
@@ -1821,8 +1877,8 @@
     handleNoSend(node);
   }
 
-  void visitUnresolvedTopLevelSetterSetIfNull(Send node, MethodElement getter,
-      Element element, Node rhs, T arg) {
+  void visitUnresolvedTopLevelSetterSetIfNull(
+      Send node, MethodElement getter, Element element, Node rhs, T arg) {
     handleNSMError(node);
     handleNoSend(node);
   }
@@ -1838,9 +1894,13 @@
     handleStatic(node);
   }
 
-  void visitFactoryConstructorInvoke(NewExpression node,
-      ConstructorElement constructor, InterfaceType type, NodeList arguments,
-      CallStructure callStructure, T arg) {
+  void visitFactoryConstructorInvoke(
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      T arg) {
     handleStatic(node);
   }
 
@@ -1881,31 +1941,20 @@
     handleStatic(node);
   }
 
-  void visitStaticGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      T arg) {
+  void visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, T arg) {
     handleStatic(node);
     handleStatic(node);
   }
 
   void visitStaticMethodSetterSetIfNull(
-      Send node,
-      MethodElement method,
-      MethodElement setter,
-      Node rhs,
-      T arg) {
+      Send node, MethodElement method, MethodElement setter, Node rhs, T arg) {
     handleStatic(node);
     handleStatic(node);
   }
 
   void visitStaticMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      T arg) {
+      Send node, FunctionElement method, Node rhs, T arg) {
     handleStatic(node);
     handleNSMError(node);
   }
@@ -1945,8 +1994,13 @@
 
   // Virtual
 
-  void visitSuperCompoundIndexSet(SendSet node, MethodElement getter,
-      MethodElement setter, Node index, AssignmentOperator operator, Node rhs,
+  void visitSuperCompoundIndexSet(
+      SendSet node,
+      MethodElement getter,
+      MethodElement setter,
+      Node index,
+      AssignmentOperator operator,
+      Node rhs,
       T arg) {
     handleSuper(node);
     handleOperator(node);
@@ -1993,27 +2047,16 @@
     handleNoSend(node);
   }
 
-  void errorInvalidGet(
-      Send node,
-      ErroneousElement error,
-      T arg) {
+  void errorInvalidGet(Send node, ErroneousElement error, T arg) {
     handleNoSend(node);
   }
 
-  void errorInvalidInvoke(
-      Send node,
-      ErroneousElement error,
-      NodeList arguments,
-      Selector selector,
-      T arg) {
+  void errorInvalidInvoke(Send node, ErroneousElement error, NodeList arguments,
+      Selector selector, T arg) {
     handleNoSend(node);
   }
 
-  void errorInvalidSet(
-      Send node,
-      ErroneousElement error,
-      Node rhs,
-      T arg) {
+  void errorInvalidSet(Send node, ErroneousElement error, Node rhs, T arg) {
     handleNoSend(node);
   }
 
@@ -2023,120 +2066,70 @@
     handleNoSend(node);
   }
 
-
   void errorInvalidPrefix(
-      Send node,
-      ErroneousElement error,
-      IncDecOperator operator,
-      T arg) {
+      Send node, ErroneousElement error, IncDecOperator operator, T arg) {
     handleNoSend(node);
   }
 
   void errorInvalidPostfix(
-      Send node,
-      ErroneousElement error,
-      IncDecOperator operator,
-      T arg) {
+      Send node, ErroneousElement error, IncDecOperator operator, T arg) {
     handleNoSend(node);
   }
 
-  void errorInvalidCompound(
-      Send node,
-      ErroneousElement error,
-      AssignmentOperator operator,
-      Node rhs,
-      T arg) {
+  void errorInvalidCompound(Send node, ErroneousElement error,
+      AssignmentOperator operator, Node rhs, T arg) {
     handleNoSend(node);
   }
 
   void errorInvalidUnary(
-      Send node,
-      UnaryOperator operator,
-      ErroneousElement error,
-      T arg) {
+      Send node, UnaryOperator operator, ErroneousElement error, T arg) {
     handleNoSend(node);
   }
 
   void errorInvalidEquals(
-      Send node,
-      ErroneousElement error,
-      Node right,
-      T arg) {
+      Send node, ErroneousElement error, Node right, T arg) {
     handleNoSend(node);
   }
 
   void errorInvalidNotEquals(
-      Send node,
-      ErroneousElement error,
-      Node right,
-      T arg) {
+      Send node, ErroneousElement error, Node right, T arg) {
     handleNoSend(node);
   }
 
-  void errorInvalidBinary(
-      Send node,
-      ErroneousElement error,
-      BinaryOperator operator,
-      Node right,
-      T arg) {
+  void errorInvalidBinary(Send node, ErroneousElement error,
+      BinaryOperator operator, Node right, T arg) {
     handleNoSend(node);
   }
 
-  void errorInvalidIndex(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      T arg) {
+  void errorInvalidIndex(Send node, ErroneousElement error, Node index, T arg) {
     handleNoSend(node);
   }
 
   void errorInvalidIndexSet(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      Node rhs,
-      T arg) {
+      Send node, ErroneousElement error, Node index, Node rhs, T arg) {
     handleNoSend(node);
   }
 
-  void errorInvalidCompoundIndexSet(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      T arg) {
+  void errorInvalidCompoundIndexSet(Send node, ErroneousElement error,
+      Node index, AssignmentOperator operator, Node rhs, T arg) {
     handleNoSend(node);
     handleNoSend(node);
     handleNoSend(node);
   }
 
-  void errorInvalidIndexPrefix(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      IncDecOperator operator,
-      T arg) {
+  void errorInvalidIndexPrefix(Send node, ErroneousElement error, Node index,
+      IncDecOperator operator, T arg) {
     handleNoSend(node);
     handleNoSend(node);
   }
 
-  void errorInvalidIndexPostfix(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      IncDecOperator operator,
-      T arg) {
+  void errorInvalidIndexPostfix(Send node, ErroneousElement error, Node index,
+      IncDecOperator operator, T arg) {
     handleNoSend(node);
     handleNoSend(node);
   }
 
-  void previsitDeferredAccess(
-      Send node,
-      PrefixElement prefix,
-      T arg) {
-  }
-
+  void previsitDeferredAccess(Send node, PrefixElement prefix, T arg) {}
 
   void visitAs(Send node, Node expression, DartType type, T arg) {
     handleNoSend(node);
@@ -2226,14 +2219,14 @@
   }
 
   @override
-  errorInvalidIndexSetIfNull(SendSet node, ErroneousElement error, Node index,
-      Node rhs, T arg) {
+  errorInvalidIndexSetIfNull(
+      SendSet node, ErroneousElement error, Node index, Node rhs, T arg) {
     handleNoSend(node);
   }
 
   @override
-  visitIndexSetIfNull(SendSet node, Node receiver, Node index, Node rhs,
-      T arg) {
+  visitIndexSetIfNull(
+      SendSet node, Node receiver, Node index, Node rhs, T arg) {
     handleIndex(node); // t1 = receiver[index]
     handleIndex(node); // receiver[index] = t2
   }
@@ -2253,8 +2246,8 @@
   }
 
   @override
-  visitUnresolvedSuperIndexSetIfNull(Send node, Element element, Node index,
-      Node rhs, T arg) {
+  visitUnresolvedSuperIndexSetIfNull(
+      Send node, Element element, Node index, Node rhs, T arg) {
     handleNSMSuper(node, element.enclosingClass);
     handleNSMSuper(node, element.enclosingClass);
   }
@@ -2296,8 +2289,8 @@
     if (!measurements.checkInvariant(Metric.send) ||
         !measurements.checkInvariant(Metric.monomorphicSend) ||
         !measurements.checkInvariant(Metric.polymorphicSend)) {
-      reporter.reportErrorMessage(node,
-          MessageKind.GENERIC, {'text': 'bad\n-- $msg\nlast:\n-- $last\n'});
+      reporter.reportErrorMessage(node, MessageKind.GENERIC,
+          {'text': 'bad\n-- $msg\nlast:\n-- $last\n'});
       last = msg;
     } else {
       last = msg;
@@ -2314,12 +2307,14 @@
   _StatsTraversalVisitor(
       Compiler compiler, TreeElements elements, Uri sourceUri)
       : reporter = compiler.reporter,
-        statsVisitor = new _StatsVisitor(compiler.reporter, elements,
-            // TODO(sigmund): accept a list of analyses, so we can compare them
-            // together.
-            true
-            ? new TrustTypesAnalysisResult(elements, compiler.world)
-            : new NaiveAnalysisResult(),
+        statsVisitor = new _StatsVisitor(
+            compiler.reporter,
+            elements,
+                // TODO(sigmund): accept a list of analyses, so we can compare them
+                // together.
+                true
+                ? new TrustTypesAnalysisResult(elements, compiler.world)
+                : new NaiveAnalysisResult(),
             sourceUri),
         super(elements);
 
@@ -2327,8 +2322,8 @@
     try {
       node.accept(statsVisitor);
     } catch (e, t) {
-      reporter.reportErrorMessage(
-          node, MessageKind.GENERIC, {'text': '$e\n$t'});
+      reporter
+          .reportErrorMessage(node, MessageKind.GENERIC, {'text': '$e\n$t'});
     }
     super.visitSend(node);
   }
@@ -2337,8 +2332,8 @@
     try {
       node.accept(statsVisitor);
     } catch (e, t) {
-      reporter.reportErrorMessage(
-          node, MessageKind.GENERIC, {'text': '$e\n$t'});
+      reporter
+          .reportErrorMessage(node, MessageKind.GENERIC, {'text': '$e\n$t'});
     }
     super.visitNewExpression(node);
   }
@@ -2347,7 +2342,6 @@
 /// Helper to visit elements recursively
 // TODO(sigmund): maybe generalize and move to elements/visitor.dart?
 abstract class RecursiveElementVisitor<R, A> extends ElementVisitor<R, A> {
-
   @override
   R visitWarnOnUseElement(WarnOnUseElement e, A arg) =>
       e.wrappedElement.accept(this, arg);
diff --git a/pkg/compiler/lib/src/info/trusted_types_analysis_result.dart b/pkg/compiler/lib/src/info/trusted_types_analysis_result.dart
index 8de59ae..5653f2e 100644
--- a/pkg/compiler/lib/src/info/trusted_types_analysis_result.dart
+++ b/pkg/compiler/lib/src/info/trusted_types_analysis_result.dart
@@ -21,11 +21,11 @@
 
   TrustTypesAnalysisResult(this.elements, this.world);
 
-  ReceiverInfo infoForReceiver(Node receiver) =>
-    new TrustTypesReceiverInfo(receiver, elements.typesCache[receiver], world);
+  ReceiverInfo infoForReceiver(Node receiver) => new TrustTypesReceiverInfo(
+      receiver, elements.typesCache[receiver], world);
   SelectorInfo infoForSelector(Node receiver, Selector selector) =>
-    new TrustTypesSelectorInfo(
-        receiver, elements.typesCache[receiver], selector, world);
+      new TrustTypesSelectorInfo(
+          receiver, elements.typesCache[receiver], selector, world);
 }
 
 class _SelectorLookupResult {
@@ -37,7 +37,8 @@
   _SelectorLookupResult(this.exists, this.possibleTargets);
 
   const _SelectorLookupResult.dontKnow()
-    : exists = Boolish.maybe, possibleTargets = -1;
+      : exists = Boolish.maybe,
+        possibleTargets = -1;
 }
 
 _SelectorLookupResult _lookupSelector(
@@ -48,17 +49,19 @@
   var uniqueTargets = new Set();
   for (var cls in world.subtypesOf(type.element)) {
     var member = cls.lookupMember(selectorName);
-    if (member != null && !member.isAbstract
+    if (member != null &&
+        !member.isAbstract
         // Don't match nsm in Object
-        && (!isNsm || !member.enclosingClass.isObject)) {
+        &&
+        (!isNsm || !member.enclosingClass.isObject)) {
       uniqueTargets.add(member);
     } else {
       notFound = true;
     }
   }
   Boolish exists = uniqueTargets.length > 0
-        ? (notFound ? Boolish.maybe : Boolish.yes)
-        : Boolish.no;
+      ? (notFound ? Boolish.maybe : Boolish.yes)
+      : Boolish.no;
   return new _SelectorLookupResult(exists, uniqueTargets.length);
 }
 
@@ -72,12 +75,12 @@
       Node receiver, InterfaceType type, ClassWorld world) {
     // TODO(sigmund): refactor, maybe just store nsm as a SelectorInfo
     var res = _lookupSelector('noSuchMethod', type, world);
-    return new TrustTypesReceiverInfo._(receiver,
-        res.exists, res.possibleTargets);
+    return new TrustTypesReceiverInfo._(
+        receiver, res.exists, res.possibleTargets);
   }
 
-  TrustTypesReceiverInfo._(this.receiver, this.hasNoSuchMethod,
-      this.possibleNsmTargets);
+  TrustTypesReceiverInfo._(
+      this.receiver, this.hasNoSuchMethod, this.possibleNsmTargets);
 }
 
 class TrustTypesSelectorInfo implements SelectorInfo {
@@ -89,16 +92,13 @@
   final int possibleTargets;
   final bool isAccurate;
 
-  factory TrustTypesSelectorInfo(Node receiver, InterfaceType type,
-      Selector selector, ClassWorld world) {
-    var res = _lookupSelector(
-        selector != null ? selector.name : null, type, world);
+  factory TrustTypesSelectorInfo(
+      Node receiver, InterfaceType type, Selector selector, ClassWorld world) {
+    var res =
+        _lookupSelector(selector != null ? selector.name : null, type, world);
     return new TrustTypesSelectorInfo._(receiver, selector, res.exists,
-        res.usesInterceptor, res.possibleTargets,
-        res.exists != Boolish.maybe);
+        res.usesInterceptor, res.possibleTargets, res.exists != Boolish.maybe);
   }
-  TrustTypesSelectorInfo._(
-      this.receiver, this.selector, this.exists, this.usesInterceptor,
-      this.possibleTargets, this.isAccurate);
+  TrustTypesSelectorInfo._(this.receiver, this.selector, this.exists,
+      this.usesInterceptor, this.possibleTargets, this.isAccurate);
 }
-
diff --git a/pkg/compiler/lib/src/io/code_output.dart b/pkg/compiler/lib/src/io/code_output.dart
index 7f5b996..e43cbbb 100644
--- a/pkg/compiler/lib/src/io/code_output.dart
+++ b/pkg/compiler/lib/src/io/code_output.dart
@@ -23,8 +23,8 @@
   void addSourceLocation(int targetOffset, SourceLocation sourcePosition);
 
   /// Applies [f] to every target offset and associated source location.
-  void forEachSourceLocation(void f(int targetOffset,
-                                    SourceLocation sourceLocation));
+  void forEachSourceLocation(
+      void f(int targetOffset, SourceLocation sourceLocation));
 }
 
 abstract class CodeOutput implements SourceLocations {
@@ -66,9 +66,10 @@
   @override
   void addBuffer(CodeBuffer other) {
     if (other.markers.length > 0) {
-      other.markers.forEach(
-          (int targetOffset, List<SourceLocation> sourceLocations) {
-        markers.putIfAbsent(length + targetOffset, () => <SourceLocation>[])
+      other.markers
+          .forEach((int targetOffset, List<SourceLocation> sourceLocations) {
+        markers
+            .putIfAbsent(length + targetOffset, () => <SourceLocation>[])
             .addAll(sourceLocations);
       });
     }
@@ -78,8 +79,7 @@
     _addInternal(other.getText());
   }
 
-  void addSourceLocation(int targetOffset,
-                         SourceLocation sourceLocation) {
+  void addSourceLocation(int targetOffset, SourceLocation sourceLocation) {
     assert(targetOffset <= length);
     List<SourceLocation> sourceLocations =
         markers.putIfAbsent(targetOffset, () => <SourceLocation>[]);
diff --git a/pkg/compiler/lib/src/io/position_information.dart b/pkg/compiler/lib/src/io/position_information.dart
index 79e58c3..83460d5 100644
--- a/pkg/compiler/lib/src/io/position_information.dart
+++ b/pkg/compiler/lib/src/io/position_information.dart
@@ -8,20 +8,13 @@
 library dart2js.source_information.position;
 
 import '../common.dart';
-import '../elements/elements.dart' show
-    AstElement,
-    FieldElement,
-    LocalElement;
+import '../elements/elements.dart' show AstElement, FieldElement, LocalElement;
 import '../js/js.dart' as js;
 import '../js/js_source_mapping.dart';
 import '../js/js_debug.dart';
-import '../tree/tree.dart' show
-    FunctionExpression,
-    Node,
-    Send;
+import '../tree/tree.dart' show FunctionExpression, Node, Send;
 
-import 'code_output.dart' show
-    CodeBuffer;
+import 'code_output.dart' show CodeBuffer;
 import 'source_file.dart';
 import 'source_information.dart';
 
@@ -34,8 +27,7 @@
   @override
   final SourceLocation closingPosition;
 
-  PositionSourceInformation(this.startPosition,
-                            [this.closingPosition]);
+  PositionSourceInformation(this.startPosition, [this.closingPosition]);
 
   @override
   List<SourceLocation> get sourceLocations {
@@ -60,14 +52,14 @@
 
   int get hashCode {
     return 0x7FFFFFFF &
-           (startPosition.hashCode * 17 + closingPosition.hashCode * 19);
+        (startPosition.hashCode * 17 + closingPosition.hashCode * 19);
   }
 
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! PositionSourceInformation) return false;
     return startPosition == other.startPosition &&
-           closingPosition == other.closingPosition;
+        closingPosition == other.closingPosition;
   }
 
   /// Create a textual representation of the source information using [uriText]
@@ -78,11 +70,11 @@
     // Use 1-based line/column info to match usual dart tool output.
     if (startPosition != null) {
       sb.write('[${startPosition.line + 1},'
-                '${startPosition.column + 1}]');
+          '${startPosition.column + 1}]');
     }
     if (closingPosition != null) {
       sb.write('-[${closingPosition.line + 1},'
-                 '${closingPosition.column + 1}]');
+          '${closingPosition.column + 1}]');
     }
     return sb.toString();
   }
@@ -158,9 +150,8 @@
 
   SourceInformation buildDeclaration(AstElement element) {
     if (element.isSynthesized) {
-      return new PositionSourceInformation(
-          new OffsetSourceLocation(
-              sourceFile, element.position.charOffset, name));
+      return new PositionSourceInformation(new OffsetSourceLocation(
+          sourceFile, element.position.charOffset, name));
     } else {
       return new PositionSourceInformation(
           new OffsetSourceLocation(sourceFile,
@@ -188,16 +179,13 @@
   @override
   SourceInformation buildImplicitReturn(AstElement element) {
     if (element.isSynthesized) {
-      return new PositionSourceInformation(
-          new OffsetSourceLocation(
-              sourceFile, element.position.charOffset, name));
+      return new PositionSourceInformation(new OffsetSourceLocation(
+          sourceFile, element.position.charOffset, name));
     } else {
-      return new PositionSourceInformation(
-          new OffsetSourceLocation(sourceFile,
-              element.resolvedAst.node.getEndToken().charOffset, name));
+      return new PositionSourceInformation(new OffsetSourceLocation(
+          sourceFile, element.resolvedAst.node.getEndToken().charOffset, name));
     }
- }
-
+  }
 
   @override
   SourceInformation buildLoop(Node node) => buildBegin(node);
@@ -333,7 +321,7 @@
 
   String toString() {
     return 'CodePosition(start=$startPosition,'
-           'end=$endPosition,closing=$closingPosition)';
+        'end=$endPosition,closing=$closingPosition)';
   }
 }
 
@@ -347,12 +335,10 @@
   Map<js.Node, CodePosition> _codePositionMap =
       new Map<js.Node, CodePosition>.identity();
 
-  void registerPositions(js.Node node,
-                         int startPosition,
-                         int endPosition,
-                         int closingPosition) {
-    registerCodePosition(node,
-        new CodePosition(startPosition, endPosition, closingPosition));
+  void registerPositions(
+      js.Node node, int startPosition, int endPosition, int closingPosition) {
+    registerCodePosition(
+        node, new CodePosition(startPosition, endPosition, closingPosition));
   }
 
   void registerCodePosition(js.Node node, CodePosition codePosition) {
@@ -396,8 +382,7 @@
   INNER,
 }
 
-SourceLocation getSourceLocation(
-    SourceInformation sourceInformation,
+SourceLocation getSourceLocation(SourceInformation sourceInformation,
     [SourcePositionKind sourcePositionKind = SourcePositionKind.START]) {
   if (sourceInformation == null) return null;
   switch (sourcePositionKind) {
@@ -449,12 +434,11 @@
   CodePositionMap codePositionMap;
   List<TraceListener> traceListeners;
 
-  PositionSourceInformationProcessor(
-      SourceMapper sourceMapper,
+  PositionSourceInformationProcessor(SourceMapper sourceMapper,
       [Coverage coverage]) {
     codePositionMap = coverage != null
-              ? new CodePositionCoverage(codePositionRecorder, coverage)
-              : codePositionRecorder;
+        ? new CodePositionCoverage(codePositionRecorder, coverage)
+        : codePositionRecorder;
     traceListeners = [new PositionTraceListener(sourceMapper)];
     if (coverage != null) {
       traceListeners.add(new CoverageListener(coverage));
@@ -466,10 +450,8 @@
   }
 
   @override
-  void onPositions(js.Node node,
-                   int startPosition,
-                   int endPosition,
-                   int closingPosition) {
+  void onPositions(
+      js.Node node, int startPosition, int endPosition, int closingPosition) {
     codePositionRecorder.registerPositions(
         node, startPosition, endPosition, closingPosition);
   }
@@ -524,7 +506,6 @@
     }
     return visit(node.value);
   }
-
 }
 
 /// Mixin that add support for computing [SourceInformation] for a [js.Node].
@@ -535,8 +516,8 @@
 }
 
 /// [TraceListener] that register [SourceLocation]s with a [SourceMapper].
-class PositionTraceListener extends TraceListener with
-    NodeToSourceInformationMixin {
+class PositionTraceListener extends TraceListener
+    with NodeToSourceInformationMixin {
   final SourceMapper sourceMapper;
 
   PositionTraceListener(this.sourceMapper);
@@ -617,47 +598,35 @@
         // a.m()   this.m()  a.b.c.d.m()
         // ^       ^         ^
         return new CallPosition(
-            node,
-            CodePositionKind.START,
-            SourcePositionKind.START);
+            node, CodePositionKind.START, SourcePositionKind.START);
       } else {
         // *.m()  *.a.b.c.d.m()
         //   ^              ^
         return new CallPosition(
-            access.selector,
-            CodePositionKind.START,
-            SourcePositionKind.INNER);
+            access.selector, CodePositionKind.START, SourcePositionKind.INNER);
       }
     } else if (node.target is js.VariableUse) {
       // m()
       // ^
       return new CallPosition(
-          node,
-          CodePositionKind.START,
-          SourcePositionKind.START);
+          node, CodePositionKind.START, SourcePositionKind.START);
     } else if (node.target is js.Fun || node.target is js.New) {
       // function(){}()  new Function("...")()
       //             ^                      ^
       return new CallPosition(
-          node.target,
-          CodePositionKind.END,
-          SourcePositionKind.INNER);
+          node.target, CodePositionKind.END, SourcePositionKind.INNER);
     } else if (node.target is js.Binary || node.target is js.Call) {
       // (0,a)()   m()()
       //      ^       ^
       return new CallPosition(
-          node.target,
-          CodePositionKind.END,
-          SourcePositionKind.INNER);
+          node.target, CodePositionKind.END, SourcePositionKind.INNER);
     } else {
       assert(invariant(NO_LOCATION_SPANNABLE, false,
           message: "Unexpected property access ${nodeToString(node)}:\n"
-                   "${DebugPrinter.prettyPrint(node)}"));
+              "${DebugPrinter.prettyPrint(node)}"));
       // Don't know....
       return new CallPosition(
-          node,
-          CodePositionKind.START,
-          SourcePositionKind.START);
+          node, CodePositionKind.START, SourcePositionKind.START);
     }
   }
 }
@@ -708,7 +677,8 @@
   ///
   final int leftToRightOffset;
 
-  Offset(this.statementOffset, this.leftToRightOffset, this.subexpressionOffset);
+  Offset(
+      this.statementOffset, this.leftToRightOffset, this.subexpressionOffset);
 
   String toString() {
     return 'Offset[statementOffset=$statementOffset,'
@@ -717,13 +687,7 @@
   }
 }
 
-enum BranchKind {
-  CONDITION,
-  LOOP,
-  CATCH,
-  FINALLY,
-  CASE,
-}
+enum BranchKind { CONDITION, LOOP, CATCH, FINALLY, CASE, }
 
 enum StepKind {
   FUN_ENTRY,
@@ -767,7 +731,7 @@
 
 /// Visitor that computes the [js.Node]s the are part of the JavaScript
 /// steppable execution and thus needs source mapping locations.
-class JavaScriptTracer extends js.BaseVisitor  {
+class JavaScriptTracer extends js.BaseVisitor {
   final CodePositionMap codePositions;
   final List<TraceListener> listeners;
 
@@ -785,9 +749,7 @@
 
   bool active;
 
-  JavaScriptTracer(this.codePositions,
-           this.listeners,
-           {this.active: false});
+  JavaScriptTracer(this.codePositions, this.listeners, {this.active: false});
 
   void notifyStart(js.Node node) {
     listeners.forEach((listener) => listener.onStart(node));
@@ -852,15 +814,15 @@
     if (!active) {
       active = node.sourceInformation != null;
     }
-    leftToRightOffset = statementOffset =
-        getSyntaxOffset(node, kind: CodePositionKind.START);
+    leftToRightOffset =
+        statementOffset = getSyntaxOffset(node, kind: CodePositionKind.START);
     Offset entryOffset = getOffsetForNode(node, statementOffset);
     notifyStep(node, entryOffset, StepKind.FUN_ENTRY);
 
     visit(node.body);
 
-    leftToRightOffset = statementOffset =
-        getSyntaxOffset(node, kind: CodePositionKind.CLOSING);
+    leftToRightOffset =
+        statementOffset = getSyntaxOffset(node, kind: CodePositionKind.CLOSING);
     Offset exitOffset = getOffsetForNode(node, statementOffset);
     notifyStep(node, exitOffset, StepKind.FUN_EXIT);
     active = activeBefore;
@@ -874,7 +836,7 @@
   }
 
   int getSyntaxOffset(js.Node node,
-                      {CodePositionKind kind: CodePositionKind.START}) {
+      {CodePositionKind kind: CodePositionKind.START}) {
     CodePosition codePosition = codePositions[node];
     if (codePosition != null) {
       return codePosition.getPosition(kind);
@@ -882,18 +844,14 @@
     return null;
   }
 
-  visitSubexpression(js.Node parent,
-                     js.Expression child,
-                     int codeOffset,
-                     StepKind kind) {
+  visitSubexpression(
+      js.Node parent, js.Expression child, int codeOffset, StepKind kind) {
     var oldSteps = steps;
     steps = [];
     offsetPosition = codeOffset;
     visit(child);
     if (steps.isEmpty) {
-      notifyStep(parent,
-          getOffsetForNode(parent, offsetPosition),
-          kind);
+      notifyStep(parent, getOffsetForNode(parent, offsetPosition), kind);
       // The [offsetPosition] should only be used by the first subexpression.
       offsetPosition = null;
     }
@@ -904,8 +862,7 @@
   visitExpressionStatement(js.ExpressionStatement node) {
     statementOffset = getSyntaxOffset(node);
     visitSubexpression(
-        node, node.expression, statementOffset,
-        StepKind.EXPRESSION_STATEMENT);
+        node, node.expression, statementOffset, StepKind.EXPRESSION_STATEMENT);
     statementOffset = null;
     leftToRightOffset = null;
   }
@@ -920,11 +877,10 @@
     offsetPosition = null;
     visitList(node.arguments);
     offsetPosition = oldPosition;
-    CallPosition callPosition =
-        CallPosition.getSemanticPositionForCall(node);
+    CallPosition callPosition = CallPosition.getSemanticPositionForCall(node);
     js.Node positionNode = callPosition.node;
-    int callOffset = getSyntaxOffset(
-        positionNode, kind: callPosition.codePositionKind);
+    int callOffset =
+        getSyntaxOffset(positionNode, kind: callPosition.codePositionKind);
     if (offsetPosition == null) {
       // Use the call offset if this is not the first subexpression.
       offsetPosition = callOffset;
@@ -943,8 +899,7 @@
       // Use the syntax offset if this is not the first subexpression.
       offsetPosition = getSyntaxOffset(node);
     }
-    notifyStep(
-        node, getOffsetForNode(node, offsetPosition), StepKind.NEW);
+    notifyStep(node, getOffsetForNode(node, offsetPosition), StepKind.NEW);
     steps.add(node);
     offsetPosition = null;
   }
@@ -996,8 +951,8 @@
   @override
   visitIf(js.If node) {
     statementOffset = getSyntaxOffset(node);
-    visitSubexpression(node, node.condition, statementOffset,
-        StepKind.IF_CONDITION);
+    visitSubexpression(
+        node, node.condition, statementOffset, StepKind.IF_CONDITION);
     statementOffset = null;
     visit(node.then, BranchKind.CONDITION, true);
     visit(node.otherwise, BranchKind.CONDITION, false);
@@ -1009,8 +964,8 @@
     statementOffset = offset;
     leftToRightOffset = null;
     if (node.init != null) {
-      visitSubexpression(node, node.init, getSyntaxOffset(node),
-          StepKind.FOR_INITIALIZER);
+      visitSubexpression(
+          node, node.init, getSyntaxOffset(node), StepKind.FOR_INITIALIZER);
     }
 
     if (node.condition != null) {
@@ -1023,8 +978,8 @@
 
     statementOffset = offset;
     if (node.update != null) {
-      visitSubexpression(node, node.update, getSyntaxOffset(node.update),
-          StepKind.FOR_UPDATE);
+      visitSubexpression(
+          node, node.update, getSyntaxOffset(node.update), StepKind.FOR_UPDATE);
     }
 
     notifyPopBranch();
@@ -1150,8 +1105,8 @@
   @override
   visitSwitch(js.Switch node) {
     statementOffset = getSyntaxOffset(node);
-    visitSubexpression(node, node.key, getSyntaxOffset(node),
-        StepKind.SWITCH_EXPRESSION);
+    visitSubexpression(
+        node, node.key, getSyntaxOffset(node), StepKind.SWITCH_EXPRESSION);
     statementOffset = null;
     leftToRightOffset = null;
     for (int i = 0; i < node.cases.length; i++) {
@@ -1202,7 +1157,6 @@
   }
 }
 
-
 class Coverage {
   Set<js.Node> _nodesWithInfo = new Set<js.Node>();
   int _nodesWithInfoCount = 0;
@@ -1237,8 +1191,7 @@
             node.expression.runtimeType, () => 0);
         _nodesWithoutInfoCountByType[node.expression.runtimeType]++;
       } else {
-        _nodesWithoutInfoCountByType.putIfAbsent(
-            node.runtimeType, () => 0);
+        _nodesWithoutInfoCountByType.putIfAbsent(node.runtimeType, () => 0);
         _nodesWithoutInfoCountByType[node.runtimeType]++;
       }
     }
@@ -1274,8 +1227,8 @@
       sb.write(') by runtime type:');
       List<Type> types = _nodesWithoutInfoCountByType.keys.toList();
       types.sort((a, b) {
-        return -_nodesWithoutInfoCountByType[a].compareTo(
-            _nodesWithoutInfoCountByType[b]);
+        return -_nodesWithoutInfoCountByType[a]
+            .compareTo(_nodesWithoutInfoCountByType[b]);
       });
 
       types.forEach((Type type) {
@@ -1331,7 +1284,7 @@
     CodePosition codePosition = codePositions[node];
     if (codePosition == null) {
       coverage.registerNodesWithoutOffset(node);
-   }
+    }
     return codePosition;
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/io/source_file.dart b/pkg/compiler/lib/src/io/source_file.dart
index f2058ad..93e6189 100644
--- a/pkg/compiler/lib/src/io/source_file.dart
+++ b/pkg/compiler/lib/src/io/source_file.dart
@@ -89,7 +89,7 @@
     List<int> starts = lineStarts;
     if (position < 0 || starts.last <= position) {
       throw 'bad position #$position in file $filename with '
-            'length ${length}.';
+          'length ${length}.';
     }
     int first = 0;
     int count = starts.length;
@@ -132,8 +132,7 @@
    * escape codes.
    */
   String getLocationMessage(String message, int start, int end,
-                            {bool includeSourceLine: true,
-                             String colorize(String text)}) {
+      {bool includeSourceLine: true, String colorize(String text)}) {
     if (colorize == null) {
       colorize = (text) => text;
     }
@@ -158,7 +157,7 @@
       if (lineStart == lineEnd) {
         String textLine = getLineText(lineStart);
 
-        int toColumn = min(columnStart + (end-start), textLine.length);
+        int toColumn = min(columnStart + (end - start), textLine.length);
         buf.write(textLine.substring(0, columnStart));
         buf.write(colorize(textLine.substring(columnStart, toColumn)));
         buf.write(textLine.substring(toColumn));
@@ -196,7 +195,7 @@
   String getLineText(int index) {
     // +1 for 0-indexing, +1 again to avoid the last line of the file
     if ((index + 2) < lineStarts.length) {
-      return slowSubstring(lineStarts[index], lineStarts[index+1]);
+      return slowSubstring(lineStarts[index], lineStarts[index + 1]);
     } else if ((index + 1) < lineStarts.length) {
       return '${slowSubstring(lineStarts[index], length)}\n';
     } else {
@@ -226,12 +225,12 @@
    * the constructor clones the content and adds a trailing 0.
    */
   Utf8BytesSourceFile(this.uri, List<int> content)
-    : this.zeroTerminatedContent = _zeroTerminateIfNecessary(content);
+      : this.zeroTerminatedContent = _zeroTerminateIfNecessary(content);
 
   String slowText() {
     // Don't convert the trailing zero byte.
-    return UTF8.decoder.convert(
-        zeroTerminatedContent, 0, zeroTerminatedContent.length - 1);
+    return UTF8.decoder
+        .convert(zeroTerminatedContent, 0, zeroTerminatedContent.length - 1);
   }
 
   List<int> slowUtf8ZeroTerminatedBytes() => zeroTerminatedContent;
@@ -249,6 +248,7 @@
     }
     return lengthCache;
   }
+
   set length(int v) => lengthCache = v;
   int lengthCache = -1;
 }
@@ -282,7 +282,7 @@
       : this(new Uri(path: filename), filename, text);
 
   int get length => text.length;
-  set length(int v) { }
+  set length(int v) {}
 
   String slowText() => text;
 
diff --git a/pkg/compiler/lib/src/io/source_information.dart b/pkg/compiler/lib/src/io/source_information.dart
index 8a24759..ec2b933 100644
--- a/pkg/compiler/lib/src/io/source_information.dart
+++ b/pkg/compiler/lib/src/io/source_information.dart
@@ -5,14 +5,9 @@
 library dart2js.source_information;
 
 import '../common.dart';
-import '../elements/elements.dart' show
-    AstElement,
-    LocalElement;
-import '../tree/tree.dart' show
-    Node,
-    Send;
-import '../js/js.dart' show
-    JavaScriptNodeSourceInformation;
+import '../elements/elements.dart' show AstElement, LocalElement;
+import '../tree/tree.dart' show Node, Send;
+import '../js/js.dart' show JavaScriptNodeSourceInformation;
 import 'source_file.dart';
 
 /// Interface for passing source information, for instance for use in source
@@ -181,16 +176,16 @@
 
   int get hashCode {
     return sourceUri.hashCode * 17 +
-           offset.hashCode * 17 +
-           sourceName.hashCode * 23;
+        offset.hashCode * 17 +
+        sourceName.hashCode * 23;
   }
 
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! SourceLocation) return false;
     return sourceUri == other.sourceUri &&
-           offset == other.offset &&
-           sourceName == other.sourceName;
+        offset == other.offset &&
+        sourceName == other.sourceName;
   }
 
   String get shortText {
diff --git a/pkg/compiler/lib/src/io/source_map_builder.dart b/pkg/compiler/lib/src/io/source_map_builder.dart
index 28b52a5..f6fa478 100644
--- a/pkg/compiler/lib/src/io/source_map_builder.dart
+++ b/pkg/compiler/lib/src/io/source_map_builder.dart
@@ -10,18 +10,17 @@
 import 'source_information.dart' show SourceLocation;
 
 class SourceMapBuilder {
-
   /// The URI of the source map file.
   final Uri sourceMapUri;
+
   /// The URI of the target language file.
   final Uri targetFileUri;
 
   final LineColumnProvider lineColumnProvider;
   final List<SourceMapEntry> entries = new List<SourceMapEntry>();
 
-  SourceMapBuilder(this.sourceMapUri,
-                   this.targetFileUri,
-                   this.lineColumnProvider);
+  SourceMapBuilder(
+      this.sourceMapUri, this.targetFileUri, this.lineColumnProvider);
 
   void addMapping(int targetOffset, SourceLocation sourceLocation) {
     entries.add(new SourceMapEntry(sourceLocation, targetOffset));
@@ -41,7 +40,6 @@
   }
 
   String build() {
-
     LineColumnMap<SourceMapEntry> lineColumnMap =
         new LineColumnMap<SourceMapEntry>();
     Map<Uri, LineColumnMap<SourceMapEntry>> sourceLocationMap =
@@ -55,8 +53,8 @@
       SourceLocation location = sourceMapEntry.sourceLocation;
       if (location != null) {
         LineColumnMap<SourceMapEntry> sourceLineColumnMap =
-            sourceLocationMap.putIfAbsent(location.sourceUri,
-                () => new LineColumnMap<SourceMapEntry>());
+            sourceLocationMap.putIfAbsent(
+                location.sourceUri, () => new LineColumnMap<SourceMapEntry>());
         sourceLineColumnMap.add(location.line, location.column, sourceMapEntry);
       }
     });
@@ -92,8 +90,8 @@
     buffer.write('  "sources": ');
     Iterable<String> relativeSourceUriList = const <String>[];
     if (sourceMapUri != null) {
-      relativeSourceUriList = uriMap.elements
-          .map((u) => relativize(sourceMapUri, u, false));
+      relativeSourceUriList =
+          uriMap.elements.map((u) => relativize(sourceMapUri, u, false));
     }
     printStringListOn(relativeSourceUriList, buffer);
     buffer.write(',\n');
@@ -106,10 +104,8 @@
     return buffer.toString();
   }
 
-  void writeEntries(LineColumnMap<SourceMapEntry> entries,
-                    IndexMap<Uri> uriMap,
-                    IndexMap<String> nameMap,
-                    StringBuffer output) {
+  void writeEntries(LineColumnMap<SourceMapEntry> entries, IndexMap<Uri> uriMap,
+      IndexMap<String> nameMap, StringBuffer output) {
     SourceLocation previousSourceLocation;
     int previousTargetLine = 0;
     DeltaEncoder targetColumnEncoder = new DeltaEncoder();
@@ -119,9 +115,7 @@
     DeltaEncoder sourceColumnEncoder = new DeltaEncoder();
     DeltaEncoder sourceNameIndexEncoder = new DeltaEncoder();
 
-    entries.forEach((int targetLine,
-                     int targetColumn,
-                     SourceMapEntry entry) {
+    entries.forEach((int targetLine, int targetColumn, SourceMapEntry entry) {
       SourceLocation sourceLocation = entry.sourceLocation;
       if (sourceLocation == previousSourceLocation) {
         return;
@@ -184,7 +178,7 @@
   static const int VLQ_CONTINUATION_BIT = 1 << 5;
   static const int VLQ_CONTINUATION_MASK = 1 << 5;
   static const String BASE64_DIGITS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn'
-                                      'opqrstuvwxyz0123456789+/';
+      'opqrstuvwxyz0123456789+/';
 
   /// Writes the VLQ of delta between [value] and [offset] into [output] and
   /// return [value].
diff --git a/pkg/compiler/lib/src/io/start_end_information.dart b/pkg/compiler/lib/src/io/start_end_information.dart
index 8cae566..b08477f 100644
--- a/pkg/compiler/lib/src/io/start_end_information.dart
+++ b/pkg/compiler/lib/src/io/start_end_information.dart
@@ -8,11 +8,8 @@
 library dart2js.source_information.start_end;
 
 import '../common.dart';
-import '../diagnostics/messages.dart' show
-    MessageTemplate;
-import '../elements/elements.dart' show
-    AstElement,
-    LocalElement;
+import '../diagnostics/messages.dart' show MessageTemplate;
+import '../elements/elements.dart' show AstElement, LocalElement;
 import '../js/js.dart' as js;
 import '../js/js_source_mapping.dart';
 import '../tokens/token.dart' show Token;
@@ -51,21 +48,20 @@
 
   int get hashCode {
     return 0x7FFFFFFF &
-           (startPosition.hashCode * 17 + endPosition.hashCode * 19);
+        (startPosition.hashCode * 17 + endPosition.hashCode * 19);
   }
 
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! StartEndSourceInformation) return false;
     return startPosition == other.startPosition &&
-           endPosition == other.endPosition;
+        endPosition == other.endPosition;
   }
 
   // TODO(johnniwinther): Inline this in
   // [StartEndSourceInformationBuilder.buildDeclaration].
   static StartEndSourceInformation _computeSourceInformation(
       AstElement element) {
-
     AstElement implementation = element.implementation;
     SourceFile sourceFile = implementation.compilationUnit.script.file;
     String name = computeElementNameForSourceMaps(element);
@@ -140,10 +136,8 @@
   StartEndSourceInformationProcessor(this.sourceMapper);
 
   @override
-  void onPositions(js.Node node,
-                   int startPosition,
-                   int endPosition,
-                   int closingPosition) {
+  void onPositions(
+      js.Node node, int startPosition, int endPosition, int closingPosition) {
     if (node.sourceInformation != null) {
       StartEndSourceInformation sourceInformation = node.sourceInformation;
       sourceMapper.register(
@@ -183,10 +177,11 @@
       SourceLocation location, SourceFile sourceFile, int offset) {
     if (!location.isValid) {
       throw MessageTemplate.TEMPLATES[MessageKind.INVALID_SOURCE_FILE_LOCATION]
-          .message(
-              {'offset': offset,
-               'fileName': sourceFile.filename,
-               'length': sourceFile.length});
+          .message({
+        'offset': offset,
+        'fileName': sourceFile.filename,
+        'length': sourceFile.length
+      });
     }
   }
 
@@ -224,11 +219,8 @@
   SourceInformation buildIf(Node node) => buildGeneric(node);
 
   @override
-  SourceInformationBuilder forContext(
-      AstElement element, {SourceInformation sourceInformation}) {
+  SourceInformationBuilder forContext(AstElement element,
+      {SourceInformation sourceInformation}) {
     return new StartEndSourceInformationBuilder(element);
   }
 }
-
-
-
diff --git a/pkg/compiler/lib/src/js/js.dart b/pkg/compiler/lib/src/js/js.dart
index 837b9fe..cefac18 100644
--- a/pkg/compiler/lib/src/js/js.dart
+++ b/pkg/compiler/lib/src/js/js.dart
@@ -8,23 +8,16 @@
 export 'package:js_ast/js_ast.dart';
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
-import '../dump_info.dart' show
-    DumpInfoTask;
-import '../io/code_output.dart' show
-    CodeBuffer,
-    CodeOutput;
-import '../js_emitter/js_emitter.dart' show
-    USE_LAZY_EMITTER;
+import '../compiler.dart' show Compiler;
+import '../dump_info.dart' show DumpInfoTask;
+import '../io/code_output.dart' show CodeBuffer, CodeOutput;
+import '../js_emitter/js_emitter.dart' show USE_LAZY_EMITTER;
 
 import 'js_source_mapping.dart';
 
-String prettyPrint(
-    Node node,
-    Compiler compiler,
+String prettyPrint(Node node, Compiler compiler,
     {bool allowVariableMinification: true,
-     Renamer renamerForNames: JavaScriptPrintingOptions.identityRenamer}) {
+    Renamer renamerForNames: JavaScriptPrintingOptions.identityRenamer}) {
   // TODO(johnniwinther): Do we need all the options here?
   JavaScriptPrintingOptions options = new JavaScriptPrintingOptions(
       shouldCompressOutput: compiler.options.enableMinification,
@@ -38,12 +31,10 @@
   return context.getText();
 }
 
-CodeBuffer createCodeBuffer(
-    Node node,
-    Compiler compiler,
+CodeBuffer createCodeBuffer(Node node, Compiler compiler,
     {DumpInfoTask monitor,
-     bool allowVariableMinification: true,
-     Renamer renamerForNames: JavaScriptPrintingOptions.identityRenamer}) {
+    bool allowVariableMinification: true,
+    Renamer renamerForNames: JavaScriptPrintingOptions.identityRenamer}) {
   JavaScriptSourceInformationStrategy sourceInformationFactory =
       compiler.backend.sourceInformationStrategy;
   JavaScriptPrintingOptions options = new JavaScriptPrintingOptions(
@@ -53,8 +44,8 @@
       renamerForNames: renamerForNames);
   CodeBuffer outBuffer = new CodeBuffer();
   SourceInformationProcessor sourceInformationProcessor =
-        sourceInformationFactory.createProcessor(
-            new SourceLocationsMapper(outBuffer));
+      sourceInformationFactory
+          .createProcessor(new SourceLocationsMapper(outBuffer));
   Dart2JSJavaScriptPrintingContext context =
       new Dart2JSJavaScriptPrintingContext(
           compiler.reporter, monitor, outBuffer, sourceInformationProcessor);
@@ -71,10 +62,7 @@
   final CodePositionListener codePositionListener;
 
   Dart2JSJavaScriptPrintingContext(
-      this.reporter,
-      this.monitor,
-      this.outBuffer,
-      this.codePositionListener);
+      this.reporter, this.monitor, this.outBuffer, this.codePositionListener);
 
   @override
   void error(String message) {
@@ -90,10 +78,8 @@
   void enterNode(Node, int startPosition) {}
 
   @override
-  void exitNode(Node node,
-                int startPosition,
-                int endPosition,
-                int closingPosition) {
+  void exitNode(
+      Node node, int startPosition, int endPosition, int closingPosition) {
     if (monitor != null) {
       monitor.recordAstSize(node, endPosition - startPosition);
     }
@@ -142,8 +128,7 @@
 ///
 /// This is used when generated code needs to be represented as a string,
 /// for example by the lazy emitter or when generating code generators.
-class UnparsedNode extends DeferredString
-                   implements AstContainer {
+class UnparsedNode extends DeferredString implements AstContainer {
   @override
   final Node tree;
   final Compiler _compiler;
@@ -167,8 +152,7 @@
         if (tree is LiteralExpression) {
           LiteralExpression literalExpression = tree;
           String template = literalExpression.template;
-          if (template.startsWith("function ") ||
-          template.startsWith("{")) {
+          if (template.startsWith("function ") || template.startsWith("{")) {
             text = '($text)';
           }
         }
diff --git a/pkg/compiler/lib/src/js/js_debug.dart b/pkg/compiler/lib/src/js/js_debug.dart
index c8cbd0de..8851aa6 100644
--- a/pkg/compiler/lib/src/js/js_debug.dart
+++ b/pkg/compiler/lib/src/js/js_debug.dart
@@ -8,19 +8,15 @@
 
 import 'package:js_ast/js_ast.dart';
 
-import '../io/code_output.dart' show
-    BufferedCodeOutput;
-import '../util/util.dart' show
-    Indentation,
-    Tagging;
+import '../io/code_output.dart' show BufferedCodeOutput;
+import '../util/util.dart' show Indentation, Tagging;
 
 /// Unparse the JavaScript [node].
 String nodeToString(Node node) {
   JavaScriptPrintingOptions options = new JavaScriptPrintingOptions(
       shouldCompressOutput: true,
       preferSemicolonToNewlineInMinifiedOutput: true);
-  LenientPrintingContext printingContext =
-      new LenientPrintingContext();
+  LenientPrintingContext printingContext = new LenientPrintingContext();
   new Printer(options, printingContext).visit(node);
   return printingContext.getText();
 }
diff --git a/pkg/compiler/lib/src/js/js_source_mapping.dart b/pkg/compiler/lib/src/js/js_source_mapping.dart
index cd72e35..86b2601 100644
--- a/pkg/compiler/lib/src/js/js_source_mapping.dart
+++ b/pkg/compiler/lib/src/js/js_source_mapping.dart
@@ -5,19 +5,14 @@
 library js.source_mapping;
 
 import 'js.dart';
-import '../io/code_output.dart' show
-    BufferedCodeOutput,
-    CodeBuffer,
-    SourceLocations;
-import '../io/source_information.dart' show
-    SourceLocation,
-    SourceInformation,
-    SourceInformationStrategy;
+import '../io/code_output.dart'
+    show BufferedCodeOutput, CodeBuffer, SourceLocations;
+import '../io/source_information.dart'
+    show SourceLocation, SourceInformation, SourceInformationStrategy;
 
 /// [SourceInformationStrategy] that can associate source information with
 /// JavaScript output.
-class JavaScriptSourceInformationStrategy
-    extends SourceInformationStrategy {
+class JavaScriptSourceInformationStrategy extends SourceInformationStrategy {
   const JavaScriptSourceInformationStrategy();
 
   /// Creates a processor that can associate source information on [Node] with
@@ -34,10 +29,7 @@
   /// Called to associate [node] with the provided start, end and closing
   /// positions.
   void onPositions(
-      Node node,
-      int startPosition,
-      int endPosition,
-      int closingPosition) {}
+      Node node, int startPosition, int endPosition, int closingPosition) {}
 }
 
 /// An interface for mapping code offsets with [SourceLocation]s for JavaScript
diff --git a/pkg/compiler/lib/src/js/placeholder_safety.dart b/pkg/compiler/lib/src/js/placeholder_safety.dart
index b103489..62140ea 100644
--- a/pkg/compiler/lib/src/js/placeholder_safety.dart
+++ b/pkg/compiler/lib/src/js/placeholder_safety.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-
 library js.safety;
 
 import "js.dart" as js;
@@ -29,8 +28,8 @@
   // exceptions. The possible values of expressions are represented by
   // integers. Small non-negative integers 0, 1, 2, ... represent the values of
   // the placeholders. Other values are:
-  static const int NONNULL_VALUE = -1;  // Unknown but not null.
-  static const int UNKNOWN_VALUE = -2;  // Unknown and might be null.
+  static const int NONNULL_VALUE = -1; // Unknown but not null.
+  static const int UNKNOWN_VALUE = -2; // Unknown and might be null.
 
   PlaceholderSafetyAnalysis._(this.isNullableInput);
 
@@ -147,14 +146,14 @@
       safe = false;
       return leftToRight();
     }
-    
+
     // Assignment operators dereference the LHS before evaluating the RHS.
     if (node.op != null) return leftToRight();
 
     // Assignment (1) evaluates the LHS as a Reference `lval`, (2) evaluates the
     // RHS as a value, (3) dereferences the `lval` in PutValue.
     if (left is js.VariableReference) {
-      int value = visit(right); 
+      int value = visit(right);
       // Assignment could change an observed global or cause a ReferenceError.
       safe = false;
       return value;
@@ -213,7 +212,7 @@
       case "|":
         int left = visit(node.left);
         int right = visit(node.right);
-        return NONNULL_VALUE;  // Number, String, Boolean.
+        return NONNULL_VALUE; // Number, String, Boolean.
 
       case ',':
         int left = visit(node.left);
@@ -258,7 +257,7 @@
       // "typeof a" first evaluates to a Reference. If the Reference is to a
       // variable that is not present, "undefined" is returned without
       // dereferencing.
-      if (node.argument is js.VariableUse) return NONNULL_VALUE;  // A string.
+      if (node.argument is js.VariableUse) return NONNULL_VALUE; // A string.
     }
 
     visit(node.argument);
@@ -273,14 +272,14 @@
         return NONNULL_VALUE;
 
       case 'typeof':
-        return NONNULL_VALUE;  // Always a string.
+        return NONNULL_VALUE; // Always a string.
 
       case 'void':
         return UNKNOWN_VALUE;
 
       case '--':
       case '++':
-        return NONNULL_VALUE;  // Always a number.
+        return NONNULL_VALUE; // Always a number.
 
       default:
         safe = false;
@@ -291,7 +290,7 @@
   int visitPostfix(js.Postfix node) {
     assert(node.op == '--' || node.op == '++');
     visit(node.argument);
-    return NONNULL_VALUE;  // Always a number, even for "(a=null, a++)".
+    return NONNULL_VALUE; // Always a number, even for "(a=null, a++)".
   }
 
   int visitVariableUse(js.VariableUse node) {
diff --git a/pkg/compiler/lib/src/js/rewrite_async.dart b/pkg/compiler/lib/src/js/rewrite_async.dart
index 970cc1c..2a9d8bf 100644
--- a/pkg/compiler/lib/src/js/rewrite_async.dart
+++ b/pkg/compiler/lib/src/js/rewrite_async.dart
@@ -7,14 +7,12 @@
 import "dart:math" show max;
 import 'dart:collection';
 
-import 'package:js_runtime/shared/async_await_error_codes.dart'
-    as error_codes;
+import 'package:js_runtime/shared/async_await_error_codes.dart' as error_codes;
 
 import "js.dart" as js;
 
 import '../common.dart';
-import '../util/util.dart' show
-    Pair;
+import '../util/util.dart' show Pair;
 
 /// Rewrites a [js.Fun] with async/sync*/async* functions and await and yield
 /// (with dart-like semantics) to an equivalent function without these.
@@ -28,7 +26,6 @@
 /// Look at [rewriteFunction], [visitDartYield] and [visitAwait] for more
 /// explanation.
 abstract class AsyncRewriterBase extends js.NodeVisitor {
-
   // Local variables are hoisted to the top of the function, so they are
   // collected here.
   List<js.VariableDeclaration> localVariables =
@@ -176,10 +173,8 @@
   bool get isSyncStar => false;
   bool get isAsyncStar => false;
 
-  AsyncRewriterBase(this.reporter,
-                    this._spannable,
-                    this.safeVariableName,
-                    this.bodyName);
+  AsyncRewriterBase(
+      this.reporter, this._spannable, this.safeVariableName, this.bodyName);
 
   /// Initialize names used by the subClass.
   void initializeNames();
@@ -212,8 +207,8 @@
   }
 
   js.Expression get currentErrorHandler {
-    return js.number(handlerLabels[jumpTargets.lastWhere(
-        (node) => handlerLabels[node] != null)]);
+    return js.number(handlerLabels[
+        jumpTargets.lastWhere((node) => handlerLabels[node] != null)]);
   }
 
   int allocateTempVar() {
@@ -349,8 +344,7 @@
   }
 
   void unreachable(js.Node node) {
-    reporter.internalError(
-        spannable, "Internal error, trying to visit $node");
+    reporter.internalError(spannable, "Internal error, trying to visit $node");
   }
 
   visitStatement(js.Statement node) {
@@ -373,7 +367,6 @@
     return node.accept(this);
   }
 
-
   /// Calls [fn] with the value of evaluating [node1] and [node2].
   ///
   /// Both nodes are evaluated in order.
@@ -429,8 +422,8 @@
   /// evaluation order we can write:
   ///     temp = <receiver>;
   ///     temp.m();
-  withCallTargetExpression(js.Expression node,
-                           fn(js.Expression result), {bool store}) {
+  withCallTargetExpression(js.Expression node, fn(js.Expression result),
+      {bool store}) {
     int oldTempVarIndex = currentTempVarIndex;
     js.Expression visited = visitExpression(node);
     js.Expression selector;
@@ -455,7 +448,6 @@
     return result;
   }
 
-
   /// Calls [fn] with the value of evaluating [node1] and [node2].
   ///
   /// If `shouldTransform(node2)` the first expression is stored in a temporary
@@ -525,9 +517,10 @@
   }
 
   /// Returns the rewritten function.
-  js.Fun finishFunction(List<js.Parameter> parameters,
-                          js.Statement rewrittenBody,
-                          js.VariableDeclarationList variableDeclarations);
+  js.Fun finishFunction(
+      List<js.Parameter> parameters,
+      js.Statement rewrittenBody,
+      js.VariableDeclarationList variableDeclarations);
 
   Iterable<js.VariableInitialization> variableInitializations();
 
@@ -684,8 +677,7 @@
     List<js.SwitchClause> clauses = labelledParts.keys.map((label) {
       return new js.Case(js.number(label), new js.Block(labelledParts[label]));
     }).toList();
-    js.Statement rewrittenBody =
-        new js.Switch(goto, clauses);
+    js.Statement rewrittenBody = new js.Switch(goto, clauses);
     if (hasJumpThoughOuterLabel) {
       rewrittenBody = new js.LabeledStatement(outerLabelName, rewrittenBody);
     }
@@ -695,20 +687,18 @@
 
     variables.add(_makeVariableInitializer(goto, js.number(0)));
     variables.addAll(variableInitializations());
-    variables.add(
-        _makeVariableInitializer(handler, js.number(rethrowLabel)));
+    variables.add(_makeVariableInitializer(handler, js.number(rethrowLabel)));
     variables.add(_makeVariableInitializer(currentError, null));
     if (analysis.hasFinally || (isAsyncStar && analysis.hasYield)) {
-      variables.add(_makeVariableInitializer(next,
-          new js.ArrayInitializer(<js.Expression>[])));
+      variables.add(_makeVariableInitializer(
+          next, new js.ArrayInitializer(<js.Expression>[])));
     }
     if (analysis.hasThis && !isSyncStar) {
       // Sync* functions must remember `this` on the level of the outer
       // function.
       variables.add(_makeVariableInitializer(self, js.js('this')));
     }
-    variables.addAll(localVariables.map(
-        (js.VariableDeclaration declaration) {
+    variables.addAll(localVariables.map((js.VariableDeclaration declaration) {
       return new js.VariableInitialization(declaration, null);
     }));
     variables.addAll(new Iterable.generate(tempVarHighWaterMark,
@@ -725,8 +715,8 @@
       // The translation does not handle nested functions that are generators
       // or asynchronous.  These functions should only be ones that are
       // introduced by JS foreign code from our own libraries.
-      reporter.internalError(spannable,
-          'Nested function is a generator or asynchronous.');
+      reporter.internalError(
+          spannable, 'Nested function is a generator or asynchronous.');
     }
     return node;
   }
@@ -761,18 +751,16 @@
         // A non-compound [js.Assignment] has `op==null`. So it works out to
         // use [js.Assignment.compound] for all cases.
         // Visit the [js.VariableUse] to ensure renaming is done correctly.
-        return new js.Assignment.compound(visitExpression(leftHandSide),
-                                          node.op,
-                                          value);
+        return new js.Assignment.compound(
+            visitExpression(leftHandSide), node.op, value);
       }, store: false);
     } else if (leftHandSide is js.PropertyAccess) {
-      return withExpressions([
-        leftHandSide.receiver,
-        leftHandSide.selector,
-        node.value
-      ], (evaluated) {
+      return withExpressions(
+          [leftHandSide.receiver, leftHandSide.selector, node.value],
+          (evaluated) {
         return new js.Assignment.compound(
-            new js.PropertyAccess(evaluated[0], evaluated[1]), node.op,
+            new js.PropertyAccess(evaluated[0], evaluated[1]),
+            node.op,
             evaluated[2]);
       });
     } else {
@@ -887,9 +875,11 @@
   @override
   js.Expression visitConditional(js.Conditional node) {
     if (!shouldTransform(node.then) && !shouldTransform(node.otherwise)) {
-      return js.js('# ? # : #', [visitExpression(node.condition),
-                                 visitExpression(node.then),
-                                 visitExpression(node.otherwise)]);
+      return js.js('# ? # : #', [
+        visitExpression(node.condition),
+        visitExpression(node.then),
+        visitExpression(node.otherwise)
+      ]);
     }
     int thenLabel = newLabel("then");
     int joinLabel = newLabel("join");
@@ -977,8 +967,7 @@
       bool oldInsideUntranslatedBreakable = insideUntranslatedBreakable;
       insideUntranslatedBreakable = true;
       addStatement(js.js.statement('do {#} while (#)',
-                                   [translateInBlock(node.body),
-                                    visitExpression(node.condition)]));
+          [translateInBlock(node.body), visitExpression(node.condition)]));
       insideUntranslatedBreakable = oldInsideUntranslatedBreakable;
       return;
     }
@@ -998,8 +987,8 @@
 
     beginLabel(continueLabel);
     withExpression(node.condition, (js.Expression condition) {
-      addStatement(js.js.statement('if (#) #',
-          [condition, gotoAndBreak(startLabel)]));
+      addStatement(
+          js.js.statement('if (#) #', [condition, gotoAndBreak(startLabel)]));
     }, store: false);
     beginLabel(afterLabel);
   }
@@ -1009,7 +998,6 @@
     addStatement(node);
   }
 
-
   @override
   void visitExpressionStatement(js.ExpressionStatement node) {
     visitExpressionIgnoreResult(node.expression);
@@ -1022,13 +1010,10 @@
       insideUntranslatedBreakable = true;
       // Note that node.init, node.condition, node.update all can be null, but
       // withExpressions handles that.
-      withExpressions([
-        node.init,
-        node.condition,
-        node.update
-      ], (List<js.Expression> transformed) {
+      withExpressions([node.init, node.condition, node.update],
+          (List<js.Expression> transformed) {
         addStatement(new js.For(transformed[0], transformed[1], transformed[2],
-             translateInBlock(node.body)));
+            translateInBlock(node.body)));
       });
       insideUntranslatedBreakable = oldInsideUntranslated;
       return;
@@ -1100,18 +1085,14 @@
     }
     int thenLabel = newLabel("then");
     int joinLabel = newLabel("join");
-    int elseLabel = (node.otherwise is js.EmptyStatement)
-        ? joinLabel
-        : newLabel("else");
+    int elseLabel =
+        (node.otherwise is js.EmptyStatement) ? joinLabel : newLabel("else");
 
     withExpression(node.condition, (js.Expression condition) {
-      addExpressionStatement(
-          new js.Assignment(
-              goto,
-              new js.Conditional(
-                  condition,
-                  js.number(thenLabel),
-                  js.number(elseLabel))));
+      addExpressionStatement(new js.Assignment(
+          goto,
+          new js.Conditional(
+              condition, js.number(thenLabel), js.number(elseLabel))));
     }, store: false);
     addBreak();
     beginLabel(thenLabel);
@@ -1295,7 +1276,7 @@
   void visitReturn(js.Return node) {
     js.Node target = analysis.targets[node];
     if (node.value != null) {
-      if(isSyncStar || isAsyncStar) {
+      if (isSyncStar || isAsyncStar) {
         // Even though `return expr;` is not allowed in the dart sync* and
         // async*  code, the backend sometimes generates code like this, but
         // only when it is known that the 'expr' throws, and the return is just
@@ -1377,15 +1358,14 @@
       for (js.SwitchClause clause in node.cases) {
         if (clause is js.Case) {
           labels[i] = newLabel("case");
-          clauses.add(new js.Case(visitExpression(clause.expression),
-                                  gotoAndBreak(labels[i])));
+          clauses.add(new js.Case(
+              visitExpression(clause.expression), gotoAndBreak(labels[i])));
         } else if (clause is js.Default) {
           labels[i] = newLabel("default");
           clauses.add(new js.Default(gotoAndBreak(labels[i])));
           hasDefault = true;
         } else {
-          reporter.internalError(
-              spannable, "Unknown clause type $clause");
+          reporter.internalError(spannable, "Unknown clause type $clause");
         }
         i++;
       }
@@ -1421,10 +1401,9 @@
   }
 
   setErrorHandler([int errorHandler]) {
-    js.Expression label = (errorHandler == null)
-        ? currentErrorHandler
-        : js.number(errorHandler);
-    addStatement(js.js.statement('# = #;',[handler, label]));
+    js.Expression label =
+        (errorHandler == null) ? currentErrorHandler : js.number(errorHandler);
+    addStatement(js.js.statement('# = #;', [handler, label]));
   }
 
   List<int> _finalliesUpToAndEnclosingHandler() {
@@ -1461,9 +1440,8 @@
 
     hasTryBlocks = true;
     int uncaughtLabel = newLabel("uncaught");
-    int handlerLabel = (node.catchPart == null)
-        ? uncaughtLabel
-        : newLabel("catch");
+    int handlerLabel =
+        (node.catchPart == null) ? uncaughtLabel : newLabel("catch");
 
     int finallyLabel = newLabel("finally");
     int afterFinallyLabel = newLabel("after finally");
@@ -1514,9 +1492,8 @@
       if (node.finallyPart != null) {
         // The error has been caught, so after the finally, continue after the
         // try.
-        addStatement(
-            js.js.statement("#.push(#);",
-                            [next, js.number(afterFinallyLabel)]));
+        addStatement(js.js
+            .statement("#.push(#);", [next, js.number(afterFinallyLabel)]));
         addGoto(finallyLabel);
       } else {
         addGoto(afterFinallyLabel);
@@ -1535,9 +1512,10 @@
     if (enclosingFinallies.isNotEmpty) {
       // [enclosingFinallies] can be empty if there is no surrounding finally
       // blocks. Then [nextLabel] will be [rethrowLabel].
-      addStatement(
-          js.js.statement("# = #;", [next, new js.ArrayInitializer(
-              enclosingFinallies.map(js.number).toList())]));
+      addStatement(js.js.statement("# = #;", [
+        next,
+        new js.ArrayInitializer(enclosingFinallies.map(js.number).toList())
+      ]));
     }
     if (node.finallyPart == null) {
       // The finally-block belonging to [node] will be visited because of
@@ -1586,7 +1564,8 @@
   @override
   js.Expression visitVariableUse(js.VariableUse node) {
     Pair<String, String> renaming = variableRenamings.lastWhere(
-        (Pair renaming) => renaming.a == node.name, orElse: () => null);
+        (Pair renaming) => renaming.a == node.name,
+        orElse: () => null);
     if (renaming == null) return node;
     return new js.VariableUse(renaming.b);
   }
@@ -1639,8 +1618,8 @@
   }
 }
 
-js.VariableInitialization
-    _makeVariableInitializer(dynamic variable, js.Expression initValue) {
+js.VariableInitialization _makeVariableInitializer(
+    dynamic variable, js.Expression initValue) {
   js.VariableDeclaration declaration;
   if (variable is js.VariableUse) {
     declaration = new js.VariableDeclaration(variable.name);
@@ -1654,7 +1633,6 @@
 }
 
 class AsyncRewriter extends AsyncRewriterBase {
-
   bool get isAsync => true;
 
   /// The Completer that will finish an async function.
@@ -1691,32 +1669,28 @@
 
   final js.Expression wrapBody;
 
-  AsyncRewriter(DiagnosticReporter reporter,
-                Spannable spannable,
-                {this.asyncHelper,
-                 this.newCompleter,
-                 this.wrapBody,
-                 String safeVariableName(String proposedName),
-                 js.Name bodyName})
-        : super(reporter,
-                spannable,
-                safeVariableName,
-                bodyName);
+  AsyncRewriter(DiagnosticReporter reporter, Spannable spannable,
+      {this.asyncHelper,
+      this.newCompleter,
+      this.wrapBody,
+      String safeVariableName(String proposedName),
+      js.Name bodyName})
+      : super(reporter, spannable, safeVariableName, bodyName);
 
   @override
   void addYield(js.DartYield node, js.Expression expression) {
-    reporter.internalError(spannable,
-        "Yield in non-generating async function");
+    reporter.internalError(spannable, "Yield in non-generating async function");
   }
 
   void addErrorExit() {
     beginLabel(rethrowLabel);
     addStatement(js.js.statement(
         "return #thenHelper(#currentError, #errorCode, #completer);", {
-          "thenHelper": asyncHelper,
-          "errorCode": js.number(error_codes.ERROR),
-          "currentError": currentError,
-          "completer": completer}));
+      "thenHelper": asyncHelper,
+      "errorCode": js.number(error_codes.ERROR),
+      "currentError": currentError,
+      "completer": completer
+    }));
   }
 
   /// Returning from an async method calls [asyncStarHelper] with the result.
@@ -1730,21 +1704,22 @@
     }
     addStatement(js.js.statement(
         "return #runtimeHelper(#returnValue, #successCode, "
-            "#completer, null);", {
-         "runtimeHelper": asyncHelper,
-         "successCode": js.number(error_codes.SUCCESS),
-         "returnValue": analysis.hasExplicitReturns
-             ? returnValue
-             : new js.LiteralNull(),
-         "completer": completer}));
+        "#completer, null);",
+        {
+          "runtimeHelper": asyncHelper,
+          "successCode": js.number(error_codes.SUCCESS),
+          "returnValue":
+              analysis.hasExplicitReturns ? returnValue : new js.LiteralNull(),
+          "completer": completer
+        }));
   }
 
   @override
   Iterable<js.VariableInitialization> variableInitializations() {
     List<js.VariableInitialization> variables =
         new List<js.VariableInitialization>();
-    variables.add(_makeVariableInitializer(completer,
-                                        new js.New(newCompleter, [])));
+    variables
+        .add(_makeVariableInitializer(completer, new js.New(newCompleter, [])));
     if (analysis.hasExplicitReturns) {
       variables.add(_makeVariableInitializer(returnValue, null));
     }
@@ -1758,22 +1733,27 @@
 
   @override
   js.Statement awaitStatement(js.Expression value) {
-    return js.js.statement("""
+    return js.js.statement(
+        """
           return #asyncHelper(#value,
                               #bodyName,
                               #completer);
-          """, {
-            "asyncHelper": asyncHelper,
-            "value": value,
-            "bodyName": bodyName,
-            "completer": completer});
+          """,
+        {
+          "asyncHelper": asyncHelper,
+          "value": value,
+          "bodyName": bodyName,
+          "completer": completer
+        });
   }
 
   @override
-  js.Fun finishFunction(List<js.Parameter> parameters,
-                        js.Statement rewrittenBody,
-                        js.VariableDeclarationList variableDeclarations) {
-    return js.js("""
+  js.Fun finishFunction(
+      List<js.Parameter> parameters,
+      js.Statement rewrittenBody,
+      js.VariableDeclarationList variableDeclarations) {
+    return js.js(
+        """
         function (#parameters) {
           #variableDeclarations;
           var #bodyName = #wrapBody(function (#errorCode, #result) {
@@ -1784,7 +1764,8 @@
             #rewrittenBody;
           });
           return #asyncHelper(null, #bodyName, #completer, null);
-        }""", {
+        }""",
+        {
           "parameters": parameters,
           "variableDeclarations": variableDeclarations,
           "ERROR": js.number(error_codes.ERROR),
@@ -1803,7 +1784,6 @@
 }
 
 class SyncStarRewriter extends AsyncRewriterBase {
-
   bool get isSyncStar => true;
 
   /// Contructor creating the Iterable for a sync* method. Called with
@@ -1823,18 +1803,14 @@
   /// Used by sync* functions to throw exeptions.
   final js.Expression uncaughtErrorExpression;
 
-  SyncStarRewriter(DiagnosticReporter diagnosticListener,
-                spannable,
-                {this.endOfIteration,
-                 this.newIterable,
-                 this.yieldStarExpression,
-                 this.uncaughtErrorExpression,
-                 String safeVariableName(String proposedName),
-                 js.Name bodyName})
-        : super(diagnosticListener,
-                spannable,
-                safeVariableName,
-                bodyName);
+  SyncStarRewriter(DiagnosticReporter diagnosticListener, spannable,
+      {this.endOfIteration,
+      this.newIterable,
+      this.yieldStarExpression,
+      this.uncaughtErrorExpression,
+      String safeVariableName(String proposedName),
+      js.Name bodyName})
+      : super(diagnosticListener, spannable, safeVariableName, bodyName);
 
   /// Translates a yield/yield* in an sync*.
   ///
@@ -1851,9 +1827,10 @@
   }
 
   @override
-  js.Fun finishFunction(List<js.Parameter> parameters,
-                        js.Statement rewrittenBody,
-                        js.VariableDeclarationList variableDeclarations) {
+  js.Fun finishFunction(
+      List<js.Parameter> parameters,
+      js.Statement rewrittenBody,
+      js.VariableDeclarationList variableDeclarations) {
     // Each iterator invocation on the iterable should work on its own copy of
     // the parameters.
     // TODO(sigurdm): We only need to do this copying for parameters that are
@@ -1865,13 +1842,13 @@
       String name = parameter.name;
       String renamedName = freshName(name);
       renamedParameters.add(new js.Parameter(renamedName));
-      declarations.add(
-          new js.VariableInitialization(new js.VariableDeclaration(name),
-                                        new js.VariableUse(renamedName)));
+      declarations.add(new js.VariableInitialization(
+          new js.VariableDeclaration(name), new js.VariableUse(renamedName)));
     }
     js.VariableDeclarationList copyParameters =
         new js.VariableDeclarationList(declarations);
-    return js.js("""
+    return js.js(
+        """
           function (#renamedParameters) {
             if (#needsThis)
               var #self = this;
@@ -1889,29 +1866,30 @@
               };
             });
           }
-          """, {
-            "renamedParameters": renamedParameters,
-            "needsThis": analysis.hasThis,
-            "helperBody": rewrittenBody,
-            "hasParameters": parameters.isNotEmpty,
-            "copyParameters": copyParameters,
-            "varDecl": variableDeclarations,
-            "errorCode": errorCodeName,
-            "newIterable": newIterable,
-            "body": bodyName,
-            "self": selfName,
-            "result": resultName,
-            "goto": goto,
-            "handler": handler,
-            "currentError": currentErrorName,
-            "ERROR": js.number(error_codes.ERROR),
-          });
+          """,
+        {
+          "renamedParameters": renamedParameters,
+          "needsThis": analysis.hasThis,
+          "helperBody": rewrittenBody,
+          "hasParameters": parameters.isNotEmpty,
+          "copyParameters": copyParameters,
+          "varDecl": variableDeclarations,
+          "errorCode": errorCodeName,
+          "newIterable": newIterable,
+          "body": bodyName,
+          "self": selfName,
+          "result": resultName,
+          "goto": goto,
+          "handler": handler,
+          "currentError": currentErrorName,
+          "ERROR": js.number(error_codes.ERROR),
+        });
   }
 
   void addErrorExit() {
     beginLabel(rethrowLabel);
-    addStatement(js.js.statement('return #(#);',
-                 [uncaughtErrorExpression, currentError]));
+    addStatement(js.js
+        .statement('return #(#);', [uncaughtErrorExpression, currentError]));
   }
 
   /// Returning from a sync* function returns an [endOfIteration] marker.
@@ -1933,8 +1911,8 @@
 
   @override
   js.Statement awaitStatement(js.Expression value) {
-    throw reporter.internalError(spannable,
-        "Sync* functions cannot contain await statements.");
+    throw reporter.internalError(
+        spannable, "Sync* functions cannot contain await statements.");
   }
 
   @override
@@ -1942,7 +1920,6 @@
 }
 
 class AsyncStarRewriter extends AsyncRewriterBase {
-
   bool get isAsyncStar => true;
 
   /// The stack of labels of finally blocks to assign to [next] if the
@@ -1950,6 +1927,7 @@
   js.VariableUse get nextWhenCanceled {
     return new js.VariableUse(nextWhenCanceledName);
   }
+
   String nextWhenCanceledName;
 
   /// The StreamController that controls an async* function.
@@ -1994,21 +1972,16 @@
 
   final js.Expression wrapBody;
 
-  AsyncStarRewriter(DiagnosticReporter reporter,
-                    Spannable spannable,
-                    {this.asyncStarHelper,
-                     this.streamOfController,
-                     this.newController,
-                     this.yieldExpression,
-                     this.yieldStarExpression,
-                     this.wrapBody,
-                     String safeVariableName(String proposedName),
-                     js.Name bodyName})
-        : super(reporter,
-                spannable,
-                safeVariableName,
-                bodyName);
-
+  AsyncStarRewriter(DiagnosticReporter reporter, Spannable spannable,
+      {this.asyncStarHelper,
+      this.streamOfController,
+      this.newController,
+      this.yieldExpression,
+      this.yieldStarExpression,
+      this.wrapBody,
+      String safeVariableName(String proposedName),
+      js.Name bodyName})
+      : super(reporter, spannable, safeVariableName, bodyName);
 
   /// Translates a yield/yield* in an async* function.
   ///
@@ -2027,25 +2000,31 @@
     enclosingFinallyLabels.addAll(jumpTargets
         .where((js.Node node) => finallyLabels[node] != null)
         .map((js.Block node) => finallyLabels[node]));
-    addStatement(js.js.statement("# = #;",
-        [nextWhenCanceled, new js.ArrayInitializer(
-            enclosingFinallyLabels.map(js.number).toList())]));
-    addStatement(js.js.statement("""
+    addStatement(js.js.statement("# = #;", [
+      nextWhenCanceled,
+      new js.ArrayInitializer(enclosingFinallyLabels.map(js.number).toList())
+    ]));
+    addStatement(js.js.statement(
+        """
         return #asyncStarHelper(#yieldExpression(#expression), #bodyName,
-            #controller);""", {
-      "asyncStarHelper": asyncStarHelper,
-      "yieldExpression": node.hasStar ? yieldStarExpression : yieldExpression,
-      "expression": expression,
-      "bodyName": bodyName,
-      "controller": controllerName,
-    }));
+            #controller);""",
+        {
+          "asyncStarHelper": asyncStarHelper,
+          "yieldExpression":
+              node.hasStar ? yieldStarExpression : yieldExpression,
+          "expression": expression,
+          "bodyName": bodyName,
+          "controller": controllerName,
+        }));
   }
 
   @override
-  js.Fun finishFunction(List<js.Parameter> parameters,
-                        js.Statement rewrittenBody,
-                        js.VariableDeclarationList variableDeclarations) {
-    return js.js("""
+  js.Fun finishFunction(
+      List<js.Parameter> parameters,
+      js.Statement rewrittenBody,
+      js.VariableDeclarationList variableDeclarations) {
+    return js.js(
+        """
         function (#parameters) {
           var #bodyName = #wrapBody(function (#errorCode, #result) {
             if (#hasYield) {
@@ -2068,7 +2047,8 @@
           });
           #variableDeclarations;
           return #streamOfController(#controller);
-        }""", {
+        }""",
+        {
           "parameters": parameters,
           "variableDeclarations": variableDeclarations,
           "STREAM_WAS_CANCELED": js.number(error_codes.STREAM_WAS_CANCELED),
@@ -2094,10 +2074,11 @@
     beginLabel(rethrowLabel);
     addStatement(js.js.statement(
         "return #asyncHelper(#currentError, #errorCode, #controller);", {
-          "asyncHelper": asyncStarHelper,
-          "errorCode": js.number(error_codes.ERROR),
-          "currentError": currentError,
-          "controller": controllerName}));
+      "asyncHelper": asyncStarHelper,
+      "errorCode": js.number(error_codes.ERROR),
+      "currentError": currentError,
+      "controller": controllerName
+    }));
   }
 
   /// Returning from an async* function calls the [streamHelper] with an
@@ -2106,20 +2087,20 @@
   void addSuccesExit() {
     beginLabel(exitLabel);
 
-    addStatement(js.js.statement(
-      "return #streamHelper(null, #successCode, #controller);", {
+    addStatement(js.js
+        .statement("return #streamHelper(null, #successCode, #controller);", {
       "streamHelper": asyncStarHelper,
       "successCode": js.number(error_codes.SUCCESS),
-      "controller": controllerName}));
+      "controller": controllerName
+    }));
   }
 
   @override
   Iterable<js.VariableInitialization> variableInitializations() {
     List<js.VariableInitialization> variables =
         new List<js.VariableInitialization>();
-    variables.add(_makeVariableInitializer(controller,
-                         js.js('#(#)',
-                               [newController, bodyName])));
+    variables.add(_makeVariableInitializer(
+        controller, js.js('#(#)', [newController, bodyName])));
     if (analysis.hasYield) {
       variables.add(_makeVariableInitializer(nextWhenCanceled, null));
     }
@@ -2134,15 +2115,18 @@
 
   @override
   js.Statement awaitStatement(js.Expression value) {
-    return js.js.statement("""
+    return js.js.statement(
+        """
           return #asyncHelper(#value,
                               #bodyName,
                               #controller);
-          """, {
-            "asyncHelper": asyncStarHelper,
-            "value": value,
-            "bodyName": bodyName,
-            "controller": controllerName});
+          """,
+        {
+          "asyncHelper": asyncStarHelper,
+          "value": value,
+          "bodyName": bodyName,
+          "controller": controllerName
+        });
   }
 }
 
@@ -2244,8 +2228,8 @@
   @override
   bool visitBreak(js.Break node) {
     if (node.targetLabel != null) {
-      targets[node] = labelledStatements.lastWhere(
-          (js.LabeledStatement statement) {
+      targets[node] =
+          labelledStatements.lastWhere((js.LabeledStatement statement) {
         return statement.label == node.targetLabel;
       });
     } else {
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index f8afee0..7f751db 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -107,7 +107,8 @@
     if (insideLoop) {
       switch (oldDecision) {
         case _mustNotInline:
-          throw new SpannableAssertionFailure(element,
+          throw new SpannableAssertionFailure(
+              element,
               "Can't mark a function as non-inlinable and inlinable at the "
               "same time.");
 
@@ -133,7 +134,8 @@
         case _mustNotInline:
         case _mayInlineInLoopMustNotOutside:
         case _canInlineInLoopMustNotOutside:
-          throw new SpannableAssertionFailure(element,
+          throw new SpannableAssertionFailure(
+              element,
               "Can't mark a function as non-inlinable and inlinable at the "
               "same time.");
 
@@ -146,7 +148,6 @@
         case _mustInline:
           // Do nothing.
           break;
-
       }
     }
   }
@@ -164,7 +165,8 @@
         case _canInlineInLoopMayInlineOutside:
         case _canInline:
         case _mustInline:
-          throw new SpannableAssertionFailure(element,
+          throw new SpannableAssertionFailure(
+              element,
               "Can't mark a function as non-inlinable and inlinable at the "
               "same time.");
 
@@ -181,7 +183,8 @@
       switch (oldDecision) {
         case _canInline:
         case _mustInline:
-          throw new SpannableAssertionFailure(element,
+          throw new SpannableAssertionFailure(
+              element,
               "Can't mark a function as non-inlinable and inlinable at the "
               "same time.");
 
@@ -215,7 +218,7 @@
 enum SyntheticConstantKind {
   DUMMY_INTERCEPTOR,
   EMPTY_VALUE,
-  TYPEVARIABLE_REFERENCE,  // Reference to a type in reflection data.
+  TYPEVARIABLE_REFERENCE, // Reference to a type in reflection data.
   NAME
 }
 
@@ -226,7 +229,6 @@
 
   final Annotations annotations;
 
-
   /// Set of classes that need to be considered for reflection although not
   /// otherwise visible during resolution.
   Iterable<ClassElement> get classesRequiredForReflection {
@@ -253,7 +255,7 @@
   /// information will be sent to a server via a POST request.
   static const String TRACE_METHOD = const String.fromEnvironment('traceCalls');
   static const bool TRACE_CALLS =
-    TRACE_METHOD == 'post' || TRACE_METHOD == 'console';
+      TRACE_METHOD == 'post' || TRACE_METHOD == 'console';
   Element traceHelper;
 
   TypeMask get stringType => compiler.typesTask.stringType;
@@ -271,8 +273,8 @@
   TypeMask _indexablePrimitiveTypeCache;
   TypeMask get indexablePrimitiveType {
     if (_indexablePrimitiveTypeCache == null) {
-      _indexablePrimitiveTypeCache = new TypeMask.nonNullSubtype(
-          helpers.jsIndexableClass, compiler.world);
+      _indexablePrimitiveTypeCache =
+          new TypeMask.nonNullSubtype(helpers.jsIndexableClass, compiler.world);
     }
     return _indexablePrimitiveTypeCache;
   }
@@ -280,8 +282,8 @@
   TypeMask _readableArrayTypeCache;
   TypeMask get readableArrayType {
     if (_readableArrayTypeCache == null) {
-      _readableArrayTypeCache = new TypeMask.nonNullSubclass(
-          helpers.jsArrayClass, compiler.world);
+      _readableArrayTypeCache =
+          new TypeMask.nonNullSubclass(helpers.jsArrayClass, compiler.world);
     }
     return _readableArrayTypeCache;
   }
@@ -298,8 +300,8 @@
   TypeMask _fixedArrayTypeCache;
   TypeMask get fixedArrayType {
     if (_fixedArrayTypeCache == null) {
-      _fixedArrayTypeCache = new TypeMask.nonNullExact(
-          helpers.jsFixedArrayClass, compiler.world);
+      _fixedArrayTypeCache =
+          new TypeMask.nonNullExact(helpers.jsFixedArrayClass, compiler.world);
     }
     return _fixedArrayTypeCache;
   }
@@ -325,8 +327,7 @@
   TypeMask _nonNullTypeCache;
   TypeMask get nonNullType {
     if (_nonNullTypeCache == null) {
-      _nonNullTypeCache =
-          compiler.typesTask.dynamicType.nonNullable();
+      _nonNullTypeCache = compiler.typesTask.dynamicType.nonNullable();
     }
     return _nonNullTypeCache;
   }
@@ -472,8 +473,7 @@
 
   // Checked mode helpers indexed by name.
   Map<String, CheckedModeHelper> checkedModeHelperByName =
-      new Map<String, CheckedModeHelper>.fromIterable(
-          checkedModeHelpers,
+      new Map<String, CheckedModeHelper>.fromIterable(checkedModeHelpers,
           key: (helper) => helper.name);
 
   TypeVariableHandler typeVariableHandler;
@@ -512,9 +512,9 @@
   final BackendImpacts impacts;
 
   JavaScriptBackend(Compiler compiler,
-                    {bool generateSourceMap: true,
-                     bool useStartupEmitter: false,
-                     bool useNewSourceInfo: false})
+      {bool generateSourceMap: true,
+      bool useStartupEmitter: false,
+      bool useNewSourceInfo: false})
       : namer = determineNamer(compiler),
         oneShotInterceptors = new Map<jsAst.Name, Selector>(),
         interceptedElements = new Map<String, Set<Element>>(),
@@ -522,12 +522,11 @@
         rtiEncoder = new _RuntimeTypesEncoder(compiler),
         specializedGetInterceptors = new Map<jsAst.Name, Set<ClassElement>>(),
         annotations = new Annotations(compiler),
-        this.sourceInformationStrategy =
-            generateSourceMap
-                ? (useNewSourceInfo
-                     ? new PositionSourceInformationStrategy()
-                     : const StartEndSourceInformationStrategy())
-                : const JavaScriptSourceInformationStrategy(),
+        this.sourceInformationStrategy = generateSourceMap
+            ? (useNewSourceInfo
+                ? new PositionSourceInformationStrategy()
+                : const StartEndSourceInformationStrategy())
+            : const JavaScriptSourceInformationStrategy(),
         helpers = new BackendHelpers(compiler),
         impacts = new BackendImpacts(compiler),
         super(compiler) {
@@ -543,9 +542,8 @@
     impactTransformer = new JavaScriptImpactTransformer(this);
     patchResolverTask = new PatchResolverTask(compiler);
     functionCompiler = compiler.options.useCpsIr
-         ? new CpsFunctionCompiler(
-             compiler, this, sourceInformationStrategy)
-         : new SsaFunctionCompiler(this, sourceInformationStrategy);
+        ? new CpsFunctionCompiler(compiler, this, sourceInformationStrategy)
+        : new SsaFunctionCompiler(this, sourceInformationStrategy);
     serialization = new JavaScriptBackendSerialization(this);
   }
 
@@ -569,11 +567,11 @@
     if (isForeign(element)) {
       return element;
     }
-    if (isJsInterop(element))  {
+    if (isJsInterop(element)) {
       if (element.memberName == const PublicName('[]') ||
           element.memberName == const PublicName('[]=')) {
-        reporter.reportErrorMessage(element,
-            MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED);
+        reporter.reportErrorMessage(
+            element, MessageKind.JS_INTEROP_INDEX_NOT_SUPPORTED);
       }
       return element;
     }
@@ -586,15 +584,15 @@
 
   bool isBackendLibrary(LibraryElement library) {
     return library == helpers.interceptorsLibrary ||
-           library == helpers.jsHelperLibrary;
+        library == helpers.jsHelperLibrary;
   }
 
   static Namer determineNamer(Compiler compiler) {
-    return compiler.options.enableMinification ?
-        compiler.options.useFrequencyNamer ?
-            new FrequencyBasedNamer(compiler) :
-            new MinifyNamer(compiler) :
-        new Namer(compiler);
+    return compiler.options.enableMinification
+        ? compiler.options.useFrequencyNamer
+            ? new FrequencyBasedNamer(compiler)
+            : new MinifyNamer(compiler)
+        : new Namer(compiler);
   }
 
   /// The backend must *always* call this method when enqueuing an
@@ -618,8 +616,7 @@
   }
 
   bool _isValidBackendUse(Element element) {
-    assert(invariant(element, element.isDeclaration,
-        message: ""));
+    assert(invariant(element, element.isDeclaration, message: ""));
     if (element == helpers.streamIteratorConstructor ||
         element == helpers.compiler.symbolConstructor ||
         element == helpers.compiler.symbolValidatedConstructor ||
@@ -629,20 +626,20 @@
       // TODO(johnniwinther): These are valid but we could be more precise.
       return true;
     } else if (element.implementationLibrary.isPatch ||
-               // Needed to detect deserialized injected elements, that is
-               // element declared in patch files.
-               (element.library.isPlatformLibrary &&
-                element.sourcePosition.uri.path.contains(
-                    '_internal/js_runtime/lib/')) ||
-               element.library == helpers.jsHelperLibrary ||
-               element.library == helpers.interceptorsLibrary ||
-               element.library == helpers.isolateHelperLibrary) {
+        // Needed to detect deserialized injected elements, that is
+        // element declared in patch files.
+        (element.library.isPlatformLibrary &&
+            element.sourcePosition.uri.path
+                .contains('_internal/js_runtime/lib/')) ||
+        element.library == helpers.jsHelperLibrary ||
+        element.library == helpers.interceptorsLibrary ||
+        element.library == helpers.isolateHelperLibrary) {
       // TODO(johnniwinther): We should be more precise about these.
       return true;
     } else if (element == coreClasses.listClass ||
-               element == helpers.mapLiteralClass ||
-               element == coreClasses.functionClass ||
-               element == coreClasses.stringClass) {
+        element == helpers.mapLiteralClass ||
+        element == coreClasses.functionClass ||
+        element == coreClasses.stringClass) {
       // TODO(johnniwinther): Avoid these.
       return true;
     }
@@ -650,9 +647,9 @@
   }
 
   bool usedByBackend(Element element) {
-    if (element.isParameter
-        || element.isInitializingFormal
-        || element.isField) {
+    if (element.isParameter ||
+        element.isInitializingFormal ||
+        element.isField) {
       if (usedByBackend(element.enclosingElement)) return true;
     }
     return helpersUsed.contains(element.declaration);
@@ -665,8 +662,8 @@
     }
 
     if (element.isField) {
-      if (Elements.isStaticOrTopLevel(element)
-          && (element.isFinal || element.isConst)) {
+      if (Elements.isStaticOrTopLevel(element) &&
+          (element.isFinal || element.isConst)) {
         return false;
       }
     }
@@ -775,23 +772,21 @@
    * explicit receiver' optimization.
    */
   bool isInterceptedMixinSelector(Selector selector, TypeMask mask) {
-    Set<Element> elements = interceptedMixinElements.putIfAbsent(
-        selector.name,
-        () {
-          Set<Element> elements = interceptedElements[selector.name];
-          if (elements == null) return null;
-          return elements
-              .where((element) =>
-                  classesMixedIntoInterceptedClasses.contains(
-                      element.enclosingClass))
-              .toSet();
-        });
+    Set<Element> elements =
+        interceptedMixinElements.putIfAbsent(selector.name, () {
+      Set<Element> elements = interceptedElements[selector.name];
+      if (elements == null) return null;
+      return elements
+          .where((element) => classesMixedIntoInterceptedClasses
+              .contains(element.enclosingClass))
+          .toSet();
+    });
 
     if (elements == null) return false;
     if (elements.isEmpty) return false;
     return elements.any((element) {
       return selector.applies(element, compiler.world) &&
-             (mask == null || mask.canHit(element, selector, compiler.world));
+          (mask == null || mask.canHit(element, selector, compiler.world));
     });
   }
 
@@ -799,12 +794,12 @@
   /// and never exists at runtime.
   bool isCompileTimeOnlyClass(ClassElement class_) {
     return class_ == helpers.jsPositiveIntClass ||
-           class_ == helpers.jsUInt32Class ||
-           class_ == helpers.jsUInt31Class ||
-           class_ == helpers.jsFixedArrayClass ||
-           class_ == helpers.jsUnmodifiableArrayClass ||
-           class_ == helpers.jsMutableArrayClass ||
-           class_ == helpers.jsExtendableArrayClass;
+        class_ == helpers.jsUInt32Class ||
+        class_ == helpers.jsUInt31Class ||
+        class_ == helpers.jsFixedArrayClass ||
+        class_ == helpers.jsUnmodifiableArrayClass ||
+        class_ == helpers.jsMutableArrayClass ||
+        class_ == helpers.jsExtendableArrayClass;
   }
 
   /// Maps compile-time classes to their runtime class.  The runtime class is
@@ -832,8 +827,8 @@
       for (Element element in intercepted) {
         ClassElement classElement = element.enclosingClass;
         if (isCompileTimeOnlyClass(classElement)) continue;
-        if (isNativeOrExtendsNative(classElement)
-            || interceptedClasses.contains(classElement)) {
+        if (isNativeOrExtendsNative(classElement) ||
+            interceptedClasses.contains(classElement)) {
           result.add(classElement);
         }
         if (classesMixedIntoInterceptedClasses.contains(classElement)) {
@@ -862,8 +857,7 @@
   }
 
   bool operatorEqHandlesNullArgument(FunctionElement operatorEqfunction) {
-    return specialOperatorEqClasses.contains(
-        operatorEqfunction.enclosingClass);
+    return specialOperatorEqClasses.contains(operatorEqfunction.enclosingClass);
   }
 
   void validateInterceptorImplementsAllObjectMethods(
@@ -875,13 +869,12 @@
       Element interceptorMember = interceptorClass.lookupMember(member.name);
       // Interceptors must override all Object methods due to calling convention
       // differences.
-      assert(invariant(
-          interceptorMember,
+      assert(invariant(interceptorMember,
           interceptorMember.enclosingClass == interceptorClass,
           message:
-            "Member ${member.name} not overridden in ${interceptorClass}. "
-            "Found $interceptorMember from "
-            "${interceptorMember.enclosingClass}."));
+              "Member ${member.name} not overridden in ${interceptorClass}. "
+              "Found $interceptorMember from "
+              "${interceptorMember.enclosingClass}."));
     });
   }
 
@@ -892,8 +885,7 @@
       cls.forEachMember((ClassElement classElement, Element member) {
         if (member.name == Identifiers.call) {
           reporter.reportErrorMessage(
-              member,
-              MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS);
+              member, MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS);
           return;
         }
         if (member.isSynthesized) return;
@@ -902,8 +894,7 @@
         Set<Element> set = interceptedElements.putIfAbsent(
             member.name, () => new Set<Element>());
         set.add(member);
-      },
-      includeSuperAndInjectedMembers: true);
+      }, includeSuperAndInjectedMembers: true);
 
       // Walk superclass chain to find mixins.
       for (; cls != null; cls = cls.superclass) {
@@ -915,21 +906,18 @@
     }
   }
 
-  void addInterceptors(ClassElement cls,
-                       Enqueuer enqueuer,
-                       Registry registry) {
+  void addInterceptors(ClassElement cls, Enqueuer enqueuer, Registry registry) {
     if (enqueuer.isResolutionQueue) {
       _interceptedClasses.add(helpers.jsInterceptorClass);
       _interceptedClasses.add(cls);
       cls.ensureResolved(resolution);
       cls.forEachMember((ClassElement classElement, Element member) {
-          // All methods on [Object] are shadowed by [Interceptor].
-          if (classElement == coreClasses.objectClass) return;
-          Set<Element> set = interceptedElements.putIfAbsent(
-              member.name, () => new Set<Element>());
-          set.add(member);
-        },
-        includeSuperAndInjectedMembers: true);
+        // All methods on [Object] are shadowed by [Interceptor].
+        if (classElement == coreClasses.objectClass) return;
+        Set<Element> set = interceptedElements.putIfAbsent(
+            member.name, () => new Set<Element>());
+        set.add(member);
+      }, includeSuperAndInjectedMembers: true);
     }
     enqueueClass(enqueuer, cls, registry);
   }
@@ -953,8 +941,7 @@
   void registerCompileTimeConstant(ConstantValue constant, Registry registry) {
     registerCompileTimeConstantInternal(constant, registry);
 
-    if (!registry.isForResolution &&
-        lookupMapAnalysis.isLookupMap(constant)) {
+    if (!registry.isForResolution && lookupMapAnalysis.isLookupMap(constant)) {
       // Note: internally, this registration will temporarily remove the
       // constant dependencies and add them later on-demand.
       lookupMapAnalysis.registerLookupMapReference(constant);
@@ -969,8 +956,8 @@
     constants.addCompileTimeConstantForEmission(constant);
   }
 
-  void registerCompileTimeConstantInternal(ConstantValue constant,
-                                           Registry registry) {
+  void registerCompileTimeConstantInternal(
+      ConstantValue constant, Registry registry) {
     DartType type = constant.getType(compiler.coreTypes);
     registerInstantiatedConstantType(type, registry);
 
@@ -994,51 +981,46 @@
     if (type is InterfaceType) {
       registry.registerInstantiation(instantiatedType);
       if (!type.treatAsRaw && classNeedsRti(type.element)) {
-        registry.registerStaticUse(
-            new StaticUse.staticInvoke(
-                // TODO(johnniwinther): Find the right [CallStructure].
-                helpers.setRuntimeTypeInfo, null));
+        registry.registerStaticUse(new StaticUse.staticInvoke(
+            // TODO(johnniwinther): Find the right [CallStructure].
+            helpers.setRuntimeTypeInfo,
+            null));
       }
       if (type.element == typeImplementation) {
         // If we use a type literal in a constant, the compile time
         // constant emitter will generate a call to the createRuntimeType
         // helper so we register a use of that.
-        registry.registerStaticUse(
-            new StaticUse.staticInvoke(
-                // TODO(johnniwinther): Find the right [CallStructure].
+        registry.registerStaticUse(new StaticUse.staticInvoke(
+            // TODO(johnniwinther): Find the right [CallStructure].
 
-                helpers.createRuntimeType, null));
+            helpers.createRuntimeType,
+            null));
       }
     }
   }
 
   void registerMetadataConstant(MetadataAnnotation metadata,
-                                Element annotatedElement,
-                                Registry registry) {
+      Element annotatedElement, Registry registry) {
     assert(registry.isForResolution);
     ConstantValue constant = constants.getConstantValueForMetadata(metadata);
     registerCompileTimeConstant(constant, registry);
     metadataConstants.add(new Dependency(constant, annotatedElement));
   }
 
-  void registerInstantiatedClass(ClassElement cls,
-                                 Enqueuer enqueuer,
-                                 Registry registry) {
+  void registerInstantiatedClass(
+      ClassElement cls, Enqueuer enqueuer, Registry registry) {
     _processClass(cls, enqueuer, registry);
   }
 
-  void registerImplementedClass(ClassElement cls,
-                                Enqueuer enqueuer,
-                                Registry registry) {
+  void registerImplementedClass(
+      ClassElement cls, Enqueuer enqueuer, Registry registry) {
     _processClass(cls, enqueuer, registry);
   }
 
-  void _processClass(ClassElement cls,
-                     Enqueuer enqueuer,
-                     Registry registry) {
+  void _processClass(ClassElement cls, Enqueuer enqueuer, Registry registry) {
     if (!cls.typeVariables.isEmpty) {
-      typeVariableHandler.registerClassWithTypeVariables(cls, enqueuer,
-                                                         registry);
+      typeVariableHandler.registerClassWithTypeVariables(
+          cls, enqueuer, registry);
     }
 
     // Register any helper that will be needed by the backend.
@@ -1050,7 +1032,7 @@
         // `iae` helper directly.
         enqueue(enqueuer, helpers.throwIllegalArgumentException, registry);
       } else if (cls == coreClasses.listClass ||
-                 cls == coreClasses.stringClass) {
+          cls == coreClasses.stringClass) {
         // The backend will try to optimize array and string access and use the
         // `ioore` and `iae` helpers directly.
         enqueue(enqueuer, helpers.throwIndexOutOfRangeException, registry);
@@ -1070,8 +1052,8 @@
         enqueueClass(enqueuer, helpers.boundClosureClass, registry);
       } else if (isNativeOrExtendsNative(cls)) {
         enqueue(enqueuer, helpers.getNativeInterceptorMethod, registry);
-        enqueueClass(enqueuer, helpers.jsInterceptorClass,
-            compiler.globalDependencies);
+        enqueueClass(
+            enqueuer, helpers.jsInterceptorClass, compiler.globalDependencies);
         enqueueClass(enqueuer, helpers.jsJavaScriptObjectClass, registry);
         enqueueClass(enqueuer, helpers.jsPlainJavaScriptObjectClass, registry);
         enqueueClass(enqueuer, helpers.jsJavaScriptFunctionClass, registry);
@@ -1085,7 +1067,7 @@
           ConstructorElement ctor = implementation.lookupConstructor(name);
           if (ctor == null ||
               (Name.isPrivateName(name) &&
-               ctor.library != helpers.mapLiteralClass.library)) {
+                  ctor.library != helpers.mapLiteralClass.library)) {
             reporter.internalError(
                 helpers.mapLiteralClass,
                 "Map literal class ${helpers.mapLiteralClass} missing "
@@ -1100,7 +1082,8 @@
           ClassElement implementation = cls.implementation;
           Element element = implementation.lookupLocalMember(name);
           if (element == null || !element.isFunction || !element.isStatic) {
-            reporter.internalError(helpers.mapLiteralClass,
+            reporter.internalError(
+                helpers.mapLiteralClass,
                 "Map literal class ${helpers.mapLiteralClass} missing "
                 "'$name' static member function");
           }
@@ -1120,14 +1103,13 @@
     if (cls == helpers.closureClass) {
       enqueue(enqueuer, helpers.closureFromTearOff, registry);
     }
-    if (cls == coreClasses.stringClass ||
-        cls == helpers.jsStringClass) {
+    if (cls == coreClasses.stringClass || cls == helpers.jsStringClass) {
       addInterceptors(helpers.jsStringClass, enqueuer, registry);
     } else if (cls == coreClasses.listClass ||
-               cls == helpers.jsArrayClass ||
-               cls == helpers.jsFixedArrayClass ||
-               cls == helpers.jsExtendableArrayClass ||
-               cls == helpers.jsUnmodifiableArrayClass) {
+        cls == helpers.jsArrayClass ||
+        cls == helpers.jsFixedArrayClass ||
+        cls == helpers.jsExtendableArrayClass ||
+        cls == helpers.jsUnmodifiableArrayClass) {
       addInterceptors(helpers.jsArrayClass, enqueuer, registry);
       addInterceptors(helpers.jsMutableArrayClass, enqueuer, registry);
       addInterceptors(helpers.jsFixedArrayClass, enqueuer, registry);
@@ -1137,25 +1119,20 @@
       enqueueInResolution(helpers.jsArrayTypedConstructor, registry);
       enqueueInResolution(helpers.setRuntimeTypeInfo, registry);
       enqueueInResolution(helpers.getTypeArgumentByIndex, registry);
-    } else if (cls == coreClasses.intClass ||
-               cls == helpers.jsIntClass) {
+    } else if (cls == coreClasses.intClass || cls == helpers.jsIntClass) {
       addInterceptors(helpers.jsIntClass, enqueuer, registry);
       addInterceptors(helpers.jsPositiveIntClass, enqueuer, registry);
       addInterceptors(helpers.jsUInt32Class, enqueuer, registry);
       addInterceptors(helpers.jsUInt31Class, enqueuer, registry);
       addInterceptors(helpers.jsNumberClass, enqueuer, registry);
-    } else if (cls == coreClasses.doubleClass ||
-               cls == helpers.jsDoubleClass) {
+    } else if (cls == coreClasses.doubleClass || cls == helpers.jsDoubleClass) {
       addInterceptors(helpers.jsDoubleClass, enqueuer, registry);
       addInterceptors(helpers.jsNumberClass, enqueuer, registry);
-    } else if (cls == coreClasses.boolClass ||
-               cls == helpers.jsBoolClass) {
+    } else if (cls == coreClasses.boolClass || cls == helpers.jsBoolClass) {
       addInterceptors(helpers.jsBoolClass, enqueuer, registry);
-    } else if (cls == coreClasses.nullClass ||
-               cls == helpers.jsNullClass) {
+    } else if (cls == coreClasses.nullClass || cls == helpers.jsNullClass) {
       addInterceptors(helpers.jsNullClass, enqueuer, registry);
-    } else if (cls == coreClasses.numClass ||
-               cls == helpers.jsNumberClass) {
+    } else if (cls == coreClasses.numClass || cls == helpers.jsNumberClass) {
       addInterceptors(helpers.jsIntClass, enqueuer, registry);
       addInterceptors(helpers.jsPositiveIntClass, enqueuer, registry);
       addInterceptors(helpers.jsUInt32Class, enqueuer, registry);
@@ -1167,7 +1144,8 @@
     } else if (cls == helpers.jsPlainJavaScriptObjectClass) {
       addInterceptors(helpers.jsPlainJavaScriptObjectClass, enqueuer, registry);
     } else if (cls == helpers.jsUnknownJavaScriptObjectClass) {
-      addInterceptors(helpers.jsUnknownJavaScriptObjectClass, enqueuer, registry);
+      addInterceptors(
+          helpers.jsUnknownJavaScriptObjectClass, enqueuer, registry);
     } else if (cls == helpers.jsJavaScriptFunctionClass) {
       addInterceptors(helpers.jsJavaScriptFunctionClass, enqueuer, registry);
     } else if (isNativeOrExtendsNative(cls)) {
@@ -1185,13 +1163,12 @@
     }
   }
 
-  void registerInstantiatedType(InterfaceType type,
-                                Enqueuer enqueuer,
-                                Registry registry,
-                                {bool mirrorUsage: false}) {
+  void registerInstantiatedType(
+      InterfaceType type, Enqueuer enqueuer, Registry registry,
+      {bool mirrorUsage: false}) {
     lookupMapAnalysis.registerInstantiatedType(type, registry);
-    super.registerInstantiatedType(
-        type, enqueuer, registry, mirrorUsage: mirrorUsage);
+    super.registerInstantiatedType(type, enqueuer, registry,
+        mirrorUsage: mirrorUsage);
   }
 
   void registerUseInterceptor(Enqueuer enqueuer) {
@@ -1227,7 +1204,8 @@
 
     if (TRACE_CALLS) {
       traceHelper = TRACE_METHOD == 'console'
-          ? helpers.consoleTraceHelper : helpers.postTraceHelper;
+          ? helpers.consoleTraceHelper
+          : helpers.postTraceHelper;
       assert(traceHelper != null);
       enqueueInResolution(traceHelper, registry);
     }
@@ -1248,24 +1226,18 @@
 
   void registerGetRuntimeTypeArgument(Registry registry) {
     enqueueImpact(
-        compiler.enqueuer.resolution,
-        impacts.getRuntimeTypeArgument,
-        registry);
+        compiler.enqueuer.resolution, impacts.getRuntimeTypeArgument, registry);
   }
 
   void registerCallMethodWithFreeTypeVariables(
-      Element callMethod,
-      Enqueuer enqueuer,
-      Registry registry) {
+      Element callMethod, Enqueuer enqueuer, Registry registry) {
     if (enqueuer.isResolutionQueue || methodNeedsRti(callMethod)) {
       registerComputeSignature(enqueuer, registry);
     }
   }
 
   void registerClosureWithFreeTypeVariables(
-      Element closure,
-      Enqueuer enqueuer,
-      Registry registry) {
+      Element closure, Enqueuer enqueuer, Registry registry) {
     if (enqueuer.isResolutionQueue || methodNeedsRti(closure)) {
       registerComputeSignature(enqueuer, registry);
     }
@@ -1284,9 +1256,7 @@
   void registerGetOfStaticFunction(Enqueuer enqueuer) {
     helpers.closureClass.ensureResolved(resolution);
     registerInstantiatedType(
-        helpers.closureClass.rawType,
-        enqueuer,
-        compiler.globalDependencies);
+        helpers.closureClass.rawType, enqueuer, compiler.globalDependencies);
   }
 
   void registerComputeSignature(Enqueuer enqueuer, Registry registry) {
@@ -1304,8 +1274,8 @@
     enqueueClass(enqueuer, coreClasses.listClass, registry);
   }
 
-  void registerTypeVariableBoundsSubtypeCheck(DartType typeArgument,
-                                              DartType bound) {
+  void registerTypeVariableBoundsSubtypeCheck(
+      DartType typeArgument, DartType bound) {
     rti.registerTypeVariableBoundsSubtypeCheck(typeArgument, bound);
   }
 
@@ -1321,10 +1291,8 @@
   }
 
   /// Called when resolving a call to a foreign function.
-  void registerForeignCall(Send node,
-                           Element element,
-                           CallStructure callStructure,
-                           ForeignResolver resolver) {
+  void registerForeignCall(Send node, Element element,
+      CallStructure callStructure, ForeignResolver resolver) {
     native.NativeResolutionEnqueuer nativeEnqueuer =
         compiler.enqueuer.resolution.nativeEnqueuer;
     if (element.name == 'JS') {
@@ -1349,15 +1317,13 @@
         }
       }
       reporter.reportErrorMessage(
-          node,
-          MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
+          node, MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
     }
   }
 
   void enableNoSuchMethod(Enqueuer world) {
     enqueue(world, helpers.createInvocationMirror, compiler.globalDependencies);
-    world.registerDynamicUse(
-        new DynamicUse(Selectors.noSuchMethod_, null));
+    world.registerDynamicUse(new DynamicUse(Selectors.noSuchMethod_, null));
   }
 
   void enableIsolateSupport(Enqueuer enqueuer) {
@@ -1375,7 +1341,6 @@
           new StaticUse.staticTearOff(compiler.mainFunction));
     }
     if (enqueuer.isResolutionQueue) {
-
       void enqueue(Element element) {
         enqueuer.addToWorkList(element);
         compiler.globalDependencies.registerDependency(element);
@@ -1396,19 +1361,19 @@
   }
 
   bool isComplexNoSuchMethod(FunctionElement element) =>
-    noSuchMethodRegistry.isComplex(element);
+      noSuchMethodRegistry.isComplex(element);
 
   bool isDefaultEqualityImplementation(Element element) {
     assert(element.name == '==');
     ClassElement classElement = element.enclosingClass;
-    return classElement == coreClasses.objectClass
-        || classElement == helpers.jsInterceptorClass
-        || classElement == helpers.jsNullClass;
+    return classElement == coreClasses.objectClass ||
+        classElement == helpers.jsInterceptorClass ||
+        classElement == helpers.jsNullClass;
   }
 
   bool methodNeedsRti(FunctionElement function) {
     return rti.methodsNeedingRti.contains(function) ||
-           compiler.enabledRuntimeType;
+        compiler.enabledRuntimeType;
   }
 
   /// Enqueue [e] in [enqueuer].
@@ -1459,9 +1424,8 @@
     registerInstantiatedType(type, enqueuer, registry);
   }
 
-  void enqueueImpact(Enqueuer enqueuer,
-                     BackendImpact impact,
-                     Registry registry) {
+  void enqueueImpact(
+      Enqueuer enqueuer, BackendImpact impact, Registry registry) {
     for (Element staticUse in impact.staticUses) {
       enqueue(enqueuer, staticUse, registry);
     }
@@ -1502,17 +1466,16 @@
         // variables. For instance variables, we may need to generate
         // the checked setter.
         if (Elements.isStaticOrTopLevel(element)) {
-          return impactTransformer.transformCodegenImpact(
-              work.registry.worldImpact);
+          return impactTransformer
+              .transformCodegenImpact(work.registry.worldImpact);
         }
       } else {
         // If the constant-handler was not able to produce a result we have to
         // go through the builder (below) to generate the lazy initializer for
         // the static variable.
         // We also need to register the use of the cyclic-error helper.
-        compiler.enqueuer.codegen.registerStaticUse(
-            new StaticUse.staticInvoke(
-                helpers.cyclicThrowHelper, CallStructure.ONE_ARG));
+        compiler.enqueuer.codegen.registerStaticUse(new StaticUse.staticInvoke(
+            helpers.cyclicThrowHelper, CallStructure.ONE_ARG));
       }
     }
 
@@ -1542,7 +1505,8 @@
     }
     // Native classes inherit from Interceptor.
     return isNative(element)
-        ? helpers.jsInterceptorClass : coreClasses.objectClass;
+        ? helpers.jsInterceptorClass
+        : coreClasses.objectClass;
   }
 
   /**
@@ -1562,11 +1526,12 @@
     if (totalMethodCount != preMirrorsMethodCount) {
       int mirrorCount = totalMethodCount - preMirrorsMethodCount;
       double percentage = (mirrorCount / totalMethodCount) * 100;
-      DiagnosticMessage hint = reporter.createMessage(
-          compiler.mainApp, MessageKind.MIRROR_BLOAT,
-          {'count': mirrorCount,
-           'total': totalMethodCount,
-           'percentage': percentage.round()});
+      DiagnosticMessage hint =
+          reporter.createMessage(compiler.mainApp, MessageKind.MIRROR_BLOAT, {
+        'count': mirrorCount,
+        'total': totalMethodCount,
+        'percentage': percentage.round()
+      });
 
       List<DiagnosticMessage> infos = <DiagnosticMessage>[];
       for (LibraryElement library in compiler.libraryLoader.libraries) {
@@ -1576,8 +1541,8 @@
           if (importedLibrary != compiler.mirrorsLibrary) continue;
           MessageKind kind =
               compiler.mirrorUsageAnalyzerTask.hasMirrorUsage(library)
-              ? MessageKind.MIRROR_IMPORT
-              : MessageKind.MIRROR_IMPORT_NO_USAGE;
+                  ? MessageKind.MIRROR_IMPORT
+                  : MessageKind.MIRROR_IMPORT_NO_USAGE;
           reporter.withCurrentElement(library, () {
             infos.add(reporter.createMessage(import, kind));
           });
@@ -1604,8 +1569,8 @@
    * backend with implementation types (JSInt, JSString, ...).
    */
   CheckedModeHelper getCheckedModeHelper(DartType type, {bool typeCast}) {
-    return getCheckedModeHelperInternal(
-        type, typeCast: typeCast, nativeCheckOnly: false);
+    return getCheckedModeHelperInternal(type,
+        typeCast: typeCast, nativeCheckOnly: false);
   }
 
   /**
@@ -1614,8 +1579,8 @@
    * [type], [:null:] is returned.
    */
   CheckedModeHelper getNativeCheckedModeHelper(DartType type, {bool typeCast}) {
-    return getCheckedModeHelperInternal(
-        type, typeCast: typeCast, nativeCheckOnly: true);
+    return getCheckedModeHelperInternal(type,
+        typeCast: typeCast, nativeCheckOnly: true);
   }
 
   /**
@@ -1623,8 +1588,7 @@
    * [nativeCheckOnly] is [:true:], only names for native helpers are returned.
    */
   CheckedModeHelper getCheckedModeHelperInternal(DartType type,
-                                                 {bool typeCast,
-                                                  bool nativeCheckOnly}) {
+      {bool typeCast, bool nativeCheckOnly}) {
     String name = getCheckedModeHelperNameInternal(type,
         typeCast: typeCast, nativeCheckOnly: nativeCheckOnly);
     if (name == null) return null;
@@ -1634,8 +1598,7 @@
   }
 
   String getCheckedModeHelperNameInternal(DartType type,
-                                          {bool typeCast,
-                                           bool nativeCheckOnly}) {
+      {bool typeCast, bool nativeCheckOnly}) {
     assert(type.kind != TypeKind.TYPEDEF);
     if (type.isMalformed) {
       // The same error is thrown for type test and type cast of a malformed
@@ -1643,8 +1606,8 @@
       return 'checkMalformedType';
     }
     Element element = type.element;
-    bool nativeCheck = nativeCheckOnly ||
-        emitter.nativeEmitter.requiresNativeIsCheck(element);
+    bool nativeCheck =
+        nativeCheckOnly || emitter.nativeEmitter.requiresNativeIsCheck(element);
 
     // TODO(13955), TODO(9731).  The test for non-primitive types should use an
     // interceptor.  The interceptor should be an argument to HTypeConversion so
@@ -1656,38 +1619,28 @@
       if (nativeCheckOnly) return null;
       return 'voidTypeCheck';
     } else if (element == helpers.jsStringClass ||
-               element == coreClasses.stringClass) {
+        element == coreClasses.stringClass) {
       if (nativeCheckOnly) return null;
-      return typeCast
-          ? 'stringTypeCast'
-          : 'stringTypeCheck';
+      return typeCast ? 'stringTypeCast' : 'stringTypeCheck';
     } else if (element == helpers.jsDoubleClass ||
-               element == coreClasses.doubleClass) {
+        element == coreClasses.doubleClass) {
       if (nativeCheckOnly) return null;
-      return typeCast
-          ? 'doubleTypeCast'
-          : 'doubleTypeCheck';
+      return typeCast ? 'doubleTypeCast' : 'doubleTypeCheck';
     } else if (element == helpers.jsNumberClass ||
-               element == coreClasses.numClass) {
+        element == coreClasses.numClass) {
       if (nativeCheckOnly) return null;
-      return typeCast
-          ? 'numTypeCast'
-          : 'numTypeCheck';
+      return typeCast ? 'numTypeCast' : 'numTypeCheck';
     } else if (element == helpers.jsBoolClass ||
-               element == coreClasses.boolClass) {
+        element == coreClasses.boolClass) {
       if (nativeCheckOnly) return null;
-      return typeCast
-          ? 'boolTypeCast'
-          : 'boolTypeCheck';
+      return typeCast ? 'boolTypeCast' : 'boolTypeCheck';
     } else if (element == helpers.jsIntClass ||
-               element == coreClasses.intClass ||
-               element == helpers.jsUInt32Class ||
-               element == helpers.jsUInt31Class ||
-               element == helpers.jsPositiveIntClass) {
+        element == coreClasses.intClass ||
+        element == helpers.jsUInt32Class ||
+        element == helpers.jsUInt31Class ||
+        element == helpers.jsPositiveIntClass) {
       if (nativeCheckOnly) return null;
-      return typeCast
-          ? 'intTypeCast'
-          : 'intTypeCheck';
+      return typeCast ? 'intTypeCast' : 'intTypeCheck';
     } else if (Elements.isNumberOrStringSupertype(element, compiler)) {
       if (nativeCheck) {
         return typeCast
@@ -1695,8 +1648,8 @@
             : 'numberOrStringSuperNativeTypeCheck';
       } else {
         return typeCast
-          ? 'numberOrStringSuperTypeCast'
-          : 'numberOrStringSuperTypeCheck';
+            ? 'numberOrStringSuperTypeCast'
+            : 'numberOrStringSuperTypeCheck';
       }
     } else if (Elements.isStringOnlySupertype(element, compiler)) {
       if (nativeCheck) {
@@ -1704,17 +1657,13 @@
             ? 'stringSuperNativeTypeCast'
             : 'stringSuperNativeTypeCheck';
       } else {
-        return typeCast
-            ? 'stringSuperTypeCast'
-            : 'stringSuperTypeCheck';
+        return typeCast ? 'stringSuperTypeCast' : 'stringSuperTypeCheck';
       }
     } else if ((element == coreClasses.listClass ||
-                element == helpers.jsArrayClass) &&
-               type.treatAsRaw) {
+            element == helpers.jsArrayClass) &&
+        type.treatAsRaw) {
       if (nativeCheckOnly) return null;
-      return typeCast
-          ? 'listTypeCast'
-          : 'listTypeCheck';
+      return typeCast ? 'listTypeCast' : 'listTypeCheck';
     } else {
       if (Elements.isListSupertype(element, compiler)) {
         if (nativeCheck) {
@@ -1722,15 +1671,11 @@
               ? 'listSuperNativeTypeCast'
               : 'listSuperNativeTypeCheck';
         } else {
-          return typeCast
-              ? 'listSuperTypeCast'
-              : 'listSuperTypeCheck';
+          return typeCast ? 'listSuperTypeCast' : 'listSuperTypeCheck';
         }
       } else {
         if (type.isInterfaceType && !type.treatAsRaw) {
-          return typeCast
-              ? 'subtypeCast'
-              : 'assertSubtype';
+          return typeCast ? 'subtypeCast' : 'assertSubtype';
         } else if (type.isTypeVariable) {
           return typeCast
               ? 'subtypeOfRuntimeTypeCast'
@@ -1741,13 +1686,9 @@
           if (nativeCheck) {
             // TODO(karlklose): can we get rid of this branch when we use
             // interceptors?
-            return typeCast
-                ? 'interceptedTypeCast'
-                : 'interceptedTypeCheck';
+            return typeCast ? 'interceptedTypeCast' : 'interceptedTypeCheck';
           } else {
-            return typeCast
-                ? 'propertyTypeCast'
-                : 'propertyTypeCheck';
+            return typeCast ? 'propertyTypeCast' : 'propertyTypeCheck';
           }
         }
       }
@@ -1831,8 +1772,8 @@
       // TODO(sigurdm): Create a function registerLoadLibraryAccess.
       if (compiler.loadLibraryFunction == null) {
         compiler.loadLibraryFunction = helpers.loadLibraryWrapper;
-        enqueueInResolution(compiler.loadLibraryFunction,
-                            compiler.globalDependencies);
+        enqueueInResolution(
+            compiler.loadLibraryFunction, compiler.globalDependencies);
       }
     } else if (element == helpers.requiresPreambleMarker) {
       requiresPreamble = true;
@@ -1849,8 +1790,7 @@
   }
 
   /// Called when [:new Symbol(...):] is seen.
-  void registerNewSymbol(Registry registry) {
-  }
+  void registerNewSymbol(Registry registry) {}
 
   /// Should [element] (a getter) that would normally not be generated due to
   /// treeshaking be retained for reflection?
@@ -1930,13 +1870,13 @@
     implementationClasses[coreClasses.nullClass] = helpers.jsNullClass;
 
     // These methods are overwritten with generated versions.
-    inlineCache.markAsNonInlinable(
-        helpers.getInterceptorMethod, insideLoop: true);
+    inlineCache.markAsNonInlinable(helpers.getInterceptorMethod,
+        insideLoop: true);
 
     specialOperatorEqClasses
-        ..add(coreClasses.objectClass)
-        ..add(helpers.jsInterceptorClass)
-        ..add(helpers.jsNullClass);
+      ..add(coreClasses.objectClass)
+      ..add(helpers.jsInterceptorClass)
+      ..add(helpers.jsNullClass);
 
     validateInterceptorImplementsAllObjectMethods(helpers.jsInterceptorClass);
     // The null-interceptor must also implement *all* methods.
@@ -1945,9 +1885,8 @@
     return new Future.value();
   }
 
-  void registerMirrorUsage(Set<String> symbols,
-                           Set<Element> targets,
-                           Set<Element> metaTargets) {
+  void registerMirrorUsage(
+      Set<String> symbols, Set<Element> targets, Set<Element> metaTargets) {
     if (symbols == null && targets == null && metaTargets == null) {
       // The user didn't specify anything, or there are imports of
       // 'dart:mirrors' without @MirrorsUsed.
@@ -1992,8 +1931,8 @@
    */
   bool requiredByMirrorSystem(Element element) {
     return hasInsufficientMirrorsUsed && isTreeShakingDisabled ||
-           matchesMirrorsMetaTarget(element) ||
-           targetsUsed.contains(element);
+        matchesMirrorsMetaTarget(element) ||
+        targetsUsed.contains(element);
   }
 
   /**
@@ -2005,9 +1944,9 @@
     Element enclosing = recursive ? element.enclosingElement : null;
 
     return hasInsufficientMirrorsUsed ||
-           matchesMirrorsMetaTarget(element) ||
-           targetsUsed.contains(element) ||
-           (enclosing != null && referencedFromMirrorSystem(enclosing));
+        matchesMirrorsMetaTarget(element) ||
+        targetsUsed.contains(element) ||
+        (enclosing != null && referencedFromMirrorSystem(enclosing));
   }
 
   /**
@@ -2180,8 +2119,8 @@
     _membersNeededForReflection.add(globalizedElement);
   }
 
-  jsAst.Call generateIsJsIndexableCall(jsAst.Expression use1,
-                                       jsAst.Expression use2) {
+  jsAst.Call generateIsJsIndexableCall(
+      jsAst.Expression use1, jsAst.Expression use2) {
     String dispatchPropertyName = embeddedNames.DISPATCH_PROPERTY_NAME;
     jsAst.Expression dispatchProperty =
         emitter.generateEmbeddedGlobalAccess(dispatchPropertyName);
@@ -2202,8 +2141,7 @@
     // Just checking for [:TypedData:] is not sufficient, as it is an
     // abstract class any user-defined class can implement. So we also
     // check for the interface [JavaScriptIndexingBehavior].
-    return
-        compiler.typedDataClass != null &&
+    return compiler.typedDataClass != null &&
         compiler.world.isInstantiated(compiler.typedDataClass) &&
         mask.satisfies(compiler.typedDataClass, compiler.world) &&
         mask.satisfies(helpers.jsIndexingBehaviorInterface, compiler.world);
@@ -2214,13 +2152,14 @@
         !type1.intersection(type2, compiler.world).isEmpty;
     // TODO(herhut): Maybe cache the TypeMask for typedDataClass and
     //               jsIndexingBehaviourInterface.
-    return
-        compiler.typedDataClass != null &&
+    return compiler.typedDataClass != null &&
         compiler.world.isInstantiated(compiler.typedDataClass) &&
         intersects(mask,
             new TypeMask.subtype(compiler.typedDataClass, compiler.world)) &&
-        intersects(mask,
-            new TypeMask.subtype(helpers.jsIndexingBehaviorInterface, compiler.world));
+        intersects(
+            mask,
+            new TypeMask.subtype(
+                helpers.jsIndexingBehaviorInterface, compiler.world));
   }
 
   /// Returns all static fields that are referenced through [targetsUsed].
@@ -2260,7 +2199,7 @@
     noSuchMethodRegistry.onQueueEmpty();
     if (!enabledNoSuchMethod &&
         (noSuchMethodRegistry.hasThrowingNoSuchMethod ||
-         noSuchMethodRegistry.hasComplexNoSuchMethod)) {
+            noSuchMethodRegistry.hasComplexNoSuchMethod)) {
       enableNoSuchMethod(enqueuer);
       enabledNoSuchMethod = true;
     }
@@ -2294,8 +2233,7 @@
 
       compiler.libraryLoader.libraries.forEach(retainMetadataOf);
       for (Dependency dependency in metadataConstants) {
-        registerCompileTimeConstant(
-            dependency.constant,
+        registerCompileTimeConstant(dependency.constant,
             new EagerRegistry('EagerRegistry for ${dependency}', enqueuer));
       }
       if (!enqueuer.isResolutionQueue) {
@@ -2343,53 +2281,46 @@
         hasForceInline = true;
         if (VERBOSE_OPTIMIZER_HINTS) {
           reporter.reportHintMessage(
-              element,
-              MessageKind.GENERIC,
-              {'text': "Must inline"});
+              element, MessageKind.GENERIC, {'text': "Must inline"});
         }
         inlineCache.markAsMustInline(element);
       } else if (cls == helpers.noInlineClass) {
         hasNoInline = true;
         if (VERBOSE_OPTIMIZER_HINTS) {
           reporter.reportHintMessage(
-              element,
-              MessageKind.GENERIC,
-              {'text': "Cannot inline"});
+              element, MessageKind.GENERIC, {'text': "Cannot inline"});
         }
         inlineCache.markAsNonInlinable(element);
       } else if (cls == helpers.noThrowsClass) {
         hasNoThrows = true;
         if (!Elements.isStaticOrTopLevelFunction(element) &&
             !element.isFactoryConstructor) {
-          reporter.internalError(element,
+          reporter.internalError(
+              element,
               "@NoThrows() is currently limited to top-level"
               " or static functions and factory constructors.");
         }
         if (VERBOSE_OPTIMIZER_HINTS) {
           reporter.reportHintMessage(
-              element,
-              MessageKind.GENERIC,
-              {'text': "Cannot throw"});
+              element, MessageKind.GENERIC, {'text': "Cannot throw"});
         }
         compiler.world.registerCannotThrow(element);
       } else if (cls == helpers.noSideEffectsClass) {
         hasNoSideEffects = true;
         if (VERBOSE_OPTIMIZER_HINTS) {
           reporter.reportHintMessage(
-              element,
-              MessageKind.GENERIC,
-              {'text': "Has no side effects"});
+              element, MessageKind.GENERIC, {'text': "Has no side effects"});
         }
         compiler.world.registerSideEffectsFree(element);
       }
     }
     if (hasForceInline && hasNoInline) {
-      reporter.internalError(element,
-          "@ForceInline() must not be used with @NoInline.");
+      reporter.internalError(
+          element, "@ForceInline() must not be used with @NoInline.");
     }
     if (hasNoThrows && !hasNoInline) {
-      reporter.internalError(element,
-          "@NoThrows() should always be combined with @NoInline.");
+      reporter.internalError(
+          element, "@NoThrows() should always be combined with @NoInline.");
     }
     if (hasNoSideEffects && !hasNoInline) {
       reporter.internalError(element,
@@ -2399,6 +2330,7 @@
       compiler.enabledInvokeOn = true;
     }
   }
+
 /*
   CodeBuffer codeOf(Element element) {
     return generatedCode.containsKey(element)
@@ -2450,66 +2382,55 @@
   bool enableCodegenWithErrorsIfSupported(Spannable node) {
     if (compiler.options.useCpsIr) {
       // TODO(25747): Support code generation with compile-time errors.
-      reporter.reportHintMessage(
-          node,
-          MessageKind.GENERIC,
-          {'text': "Generation of code with compile time errors is currently "
-                   "not supported with the CPS IR."});
+      reporter.reportHintMessage(node, MessageKind.GENERIC, {
+        'text': "Generation of code with compile time errors is currently "
+            "not supported with the CPS IR."
+      });
       return false;
     }
     return true;
   }
 
-  jsAst.Expression rewriteAsync(FunctionElement element,
-                                jsAst.Expression code) {
+  jsAst.Expression rewriteAsync(
+      FunctionElement element, jsAst.Expression code) {
     AsyncRewriterBase rewriter = null;
     jsAst.Name name = namer.methodPropertyName(element);
     switch (element.asyncMarker) {
       case AsyncMarker.ASYNC:
-        rewriter = new AsyncRewriter(
-            reporter,
-            element,
-            asyncHelper:
-                emitter.staticFunctionAccess(helpers.asyncHelper),
-            wrapBody:
-                emitter.staticFunctionAccess(helpers.wrapBody),
-            newCompleter: emitter.staticFunctionAccess(
-                helpers.syncCompleterConstructor),
+        rewriter = new AsyncRewriter(reporter, element,
+            asyncHelper: emitter.staticFunctionAccess(helpers.asyncHelper),
+            wrapBody: emitter.staticFunctionAccess(helpers.wrapBody),
+            newCompleter:
+                emitter.staticFunctionAccess(helpers.syncCompleterConstructor),
             safeVariableName: namer.safeVariablePrefixForAsyncRewrite,
             bodyName: namer.deriveAsyncBodyName(name));
         break;
       case AsyncMarker.SYNC_STAR:
-        rewriter = new SyncStarRewriter(
-            reporter,
-            element,
-            endOfIteration: emitter.staticFunctionAccess(
-                helpers.endOfIteration),
-            newIterable: emitter.staticFunctionAccess(
-                helpers.syncStarIterableConstructor),
-            yieldStarExpression: emitter.staticFunctionAccess(
-                helpers.yieldStar),
-            uncaughtErrorExpression: emitter.staticFunctionAccess(
-                helpers.syncStarUncaughtError),
+        rewriter = new SyncStarRewriter(reporter, element,
+            endOfIteration:
+                emitter.staticFunctionAccess(helpers.endOfIteration),
+            newIterable: emitter
+                .staticFunctionAccess(helpers.syncStarIterableConstructor),
+            yieldStarExpression:
+                emitter.staticFunctionAccess(helpers.yieldStar),
+            uncaughtErrorExpression:
+                emitter.staticFunctionAccess(helpers.syncStarUncaughtError),
             safeVariableName: namer.safeVariablePrefixForAsyncRewrite,
             bodyName: namer.deriveAsyncBodyName(name));
-         break;
+        break;
       case AsyncMarker.ASYNC_STAR:
-        rewriter = new AsyncStarRewriter(
-            reporter,
-            element,
-            asyncStarHelper: emitter.staticFunctionAccess(
-                helpers.asyncStarHelper),
-            streamOfController: emitter.staticFunctionAccess(
-                helpers.streamOfController),
-            wrapBody:
-                emitter.staticFunctionAccess(helpers.wrapBody),
-            newController: emitter.staticFunctionAccess(
-                helpers.asyncStarControllerConstructor),
+        rewriter = new AsyncStarRewriter(reporter, element,
+            asyncStarHelper:
+                emitter.staticFunctionAccess(helpers.asyncStarHelper),
+            streamOfController:
+                emitter.staticFunctionAccess(helpers.streamOfController),
+            wrapBody: emitter.staticFunctionAccess(helpers.wrapBody),
+            newController: emitter
+                .staticFunctionAccess(helpers.asyncStarControllerConstructor),
             safeVariableName: namer.safeVariablePrefixForAsyncRewrite,
-            yieldExpression: emitter.staticFunctionAccess(
-                helpers.yieldSingle),
-            yieldStarExpression: emitter.staticFunctionAccess(
-                helpers.yieldStar),
+            yieldExpression: emitter.staticFunctionAccess(helpers.yieldSingle),
+            yieldStarExpression:
+                emitter.staticFunctionAccess(helpers.yieldStar),
             bodyName: namer.deriveAsyncBodyName(name));
         break;
       default:
@@ -2522,7 +2443,7 @@
   /// The locations of js patch-files relative to the sdk-descriptors.
   static const _patchLocations = const <String, String>{
     "async": "_internal/js_runtime/lib/async_patch.dart",
-    "collection":  "_internal/js_runtime/lib/collection_patch.dart",
+    "collection": "_internal/js_runtime/lib/collection_patch.dart",
     "convert": "_internal/js_runtime/lib/convert_patch.dart",
     "core": "_internal/js_runtime/lib/core_patch.dart",
     "developer": "_internal/js_runtime/lib/developer_patch.dart",
@@ -2544,11 +2465,9 @@
   @override
   ImpactStrategy createImpactStrategy(
       {bool supportDeferredLoad: true,
-       bool supportDumpInfo: true,
-       bool supportSerialization: true}) {
-    return new JavaScriptImpactStrategy(
-        resolution,
-        compiler.dumpInfoTask,
+      bool supportDumpInfo: true,
+      bool supportSerialization: true}) {
+    return new JavaScriptImpactStrategy(resolution, compiler.dumpInfoTask,
         supportDeferredLoad: supportDeferredLoad,
         supportDumpInfo: supportDumpInfo,
         supportSerialization: supportSerialization);
@@ -2758,8 +2677,8 @@
     }
 
     if (hasTypeLiteral) {
-      transformed.registerTypeUse(new TypeUse.instantiation(
-          backend.compiler.coreTypes.typeType));
+      transformed.registerTypeUse(
+          new TypeUse.instantiation(backend.compiler.coreTypes.typeType));
       registerBackendImpact(transformed, impacts.typeLiteral);
     }
 
@@ -2769,8 +2688,8 @@
       if (mapLiteralUse.isConstant) {
         registerBackendImpact(transformed, impacts.constantMapLiteral);
       } else {
-        transformed.registerTypeUse(
-            new TypeUse.instantiation(mapLiteralUse.type));
+        transformed
+            .registerTypeUse(new TypeUse.instantiation(mapLiteralUse.type));
       }
       registerRequiredType(mapLiteralUse.type);
     }
@@ -2778,8 +2697,8 @@
     for (ListLiteralUse listLiteralUse in worldImpact.listLiterals) {
       // TODO(johnniwinther): Use the [isConstant] and [isEmpty] property when
       // factory constructors are registered directly.
-      transformed.registerTypeUse(
-          new TypeUse.instantiation(listLiteralUse.type));
+      transformed
+          .registerTypeUse(new TypeUse.instantiation(listLiteralUse.type));
       registerRequiredType(listLiteralUse.type);
     }
 
@@ -2796,7 +2715,8 @@
         LocalFunctionElement closure = staticUse.element;
         if (closure.type.containsTypeVariables) {
           backend.compiler.enqueuer.resolution.universe
-              .closuresWithFreeTypeVariables.add(closure);
+              .closuresWithFreeTypeVariables
+              .add(closure);
           registerBackendImpact(transformed, impacts.computeSignature);
         }
       }
@@ -2828,8 +2748,8 @@
     return transformed;
   }
 
-  void registerBackendImpact(TransformedWorldImpact worldImpact,
-                             BackendImpact backendImpact) {
+  void registerBackendImpact(
+      TransformedWorldImpact worldImpact, BackendImpact backendImpact) {
     for (Element staticUse in backendImpact.staticUses) {
       assert(staticUse != null);
       backend.registerBackendUse(staticUse);
@@ -2839,14 +2759,12 @@
     }
     for (InterfaceType instantiatedType in backendImpact.instantiatedTypes) {
       backend.registerBackendUse(instantiatedType.element);
-      worldImpact.registerTypeUse(
-          new TypeUse.instantiation(instantiatedType));
+      worldImpact.registerTypeUse(new TypeUse.instantiation(instantiatedType));
     }
     for (ClassElement cls in backendImpact.instantiatedClasses) {
       cls.ensureResolved(backend.resolution);
       backend.registerBackendUse(cls);
-      worldImpact.registerTypeUse(
-          new TypeUse.instantiation(cls.rawType));
+      worldImpact.registerTypeUse(new TypeUse.instantiation(cls.rawType));
     }
     for (BackendImpact otherImpact in backendImpact.otherImpacts) {
       registerBackendImpact(worldImpact, otherImpact);
@@ -2888,8 +2806,8 @@
       if (type.isTypeVariable) {
         registerBackendImpact(transformed, impacts.typeVariableTypeCheck);
         if (inCheckedMode) {
-          registerBackendImpact(transformed,
-              impacts.typeVariableCheckedModeTypeCheck);
+          registerBackendImpact(
+              transformed, impacts.typeVariableCheckedModeTypeCheck);
         }
       }
     }
@@ -2963,18 +2881,17 @@
       backend.addCompileTimeConstantForEmission(constant);
     }
 
-    for (Pair<DartType, DartType> check in
-            impact.typeVariableBoundsSubtypeChecks) {
+    for (Pair<DartType, DartType> check
+        in impact.typeVariableBoundsSubtypeChecks) {
       backend.registerTypeVariableBoundsSubtypeCheck(check.a, check.b);
     }
 
-
     for (StaticUse staticUse in impact.staticUses) {
       if (staticUse.kind == StaticUseKind.CLOSURE) {
         LocalFunctionElement closure = staticUse.element;
         if (backend.methodNeedsRti(closure)) {
-           registerBackendImpact(transformed, impacts.computeSignature);
-         }
+          registerBackendImpact(transformed, impacts.computeSignature);
+        }
       }
     }
 
@@ -3029,17 +2946,14 @@
   final bool supportDumpInfo;
   final bool supportSerialization;
 
-  JavaScriptImpactStrategy(this.resolution,
-                           this.dumpInfoTask,
-                           {this.supportDeferredLoad,
-                            this.supportDumpInfo,
-                            this.supportSerialization});
+  JavaScriptImpactStrategy(this.resolution, this.dumpInfoTask,
+      {this.supportDeferredLoad,
+      this.supportDumpInfo,
+      this.supportSerialization});
 
   @override
-  void visitImpact(Element element,
-                   WorldImpact impact,
-                   WorldImpactVisitor visitor,
-                   ImpactUseCase impactUse) {
+  void visitImpact(Element element, WorldImpact impact,
+      WorldImpactVisitor visitor, ImpactUseCase impactUse) {
     // TODO(johnniwinther): Compute the application strategy once for each use.
     if (impactUse == ResolutionEnqueuer.IMPACT_USE) {
       if (supportDeferredLoad || supportSerialization) {
@@ -3061,8 +2975,7 @@
 
   @override
   void onImpactUsed(ImpactUseCase impactUse) {
-    if (impactUse == DeferredLoadTask.IMPACT_USE &&
-        !supportSerialization) {
+    if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) {
       // TODO(johnniwinther): Allow emptying when serialization has been
       // performed.
       resolution.emptyCache();
diff --git a/pkg/compiler/lib/src/js_backend/backend_helpers.dart b/pkg/compiler/lib/src/js_backend/backend_helpers.dart
index 804594c..aac308d 100644
--- a/pkg/compiler/lib/src/js_backend/backend_helpers.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_helpers.dart
@@ -5,26 +5,21 @@
 library dart2js.js_backend.helpers;
 
 import '../common.dart';
-import '../common/names.dart' show
-    Identifiers,
-    Uris;
-import '../common/resolution.dart' show
-    Resolution;
-import '../compiler.dart' show
-    Compiler;
-import '../core_types.dart' show
-    CoreClasses;
-import '../elements/elements.dart' show
-    AbstractFieldElement,
-    ClassElement,
-    ConstructorElement,
-    Element,
-    EnumClassElement,
-    FunctionElement,
-    LibraryElement,
-    MethodElement;
-import '../library_loader.dart' show
-    LoadedLibraries;
+import '../common/names.dart' show Identifiers, Uris;
+import '../common/resolution.dart' show Resolution;
+import '../compiler.dart' show Compiler;
+import '../core_types.dart' show CoreClasses;
+import '../elements/elements.dart'
+    show
+        AbstractFieldElement,
+        ClassElement,
+        ConstructorElement,
+        Element,
+        EnumClassElement,
+        FunctionElement,
+        LibraryElement,
+        MethodElement;
+import '../library_loader.dart' show LoadedLibraries;
 
 import 'js_backend.dart';
 
@@ -37,14 +32,12 @@
       new Uri(scheme: 'dart', path: '_foreign_helper');
   static final Uri DART_JS_MIRRORS =
       new Uri(scheme: 'dart', path: '_js_mirrors');
-  static final Uri DART_JS_NAMES =
-      new Uri(scheme: 'dart', path: '_js_names');
+  static final Uri DART_JS_NAMES = new Uri(scheme: 'dart', path: '_js_names');
   static final Uri DART_EMBEDDED_NAMES =
       new Uri(scheme: 'dart', path: '_js_embedded_names');
   static final Uri DART_ISOLATE_HELPER =
       new Uri(scheme: 'dart', path: '_isolate_helper');
-  static final Uri PACKAGE_JS =
-         new Uri(scheme: 'package', path: 'js/js.dart');
+  static final Uri PACKAGE_JS = new Uri(scheme: 'package', path: 'js/js.dart');
 
   static const String INVOKE_ON = '_getCachedInvocation';
   static const String START_ROOT_ISOLATE = 'startRootIsolate';
@@ -67,7 +60,6 @@
   MethodElement assertThrow;
   MethodElement assertHelper;
 
-
   LibraryElement jsHelperLibrary;
   LibraryElement asyncLibrary;
   LibraryElement interceptorsLibrary;
@@ -203,9 +195,9 @@
       asyncLibrary = library;
     } else if (uri == Uris.dart__internal) {
       internalLibrary = library;
-    } else if (uri ==  DART_INTERCEPTORS) {
+    } else if (uri == DART_INTERCEPTORS) {
       interceptorsLibrary = library;
-    } else if (uri ==  DART_FOREIGN_HELPER) {
+    } else if (uri == DART_FOREIGN_HELPER) {
       foreignLibrary = library;
     } else if (uri == DART_ISOLATE_HELPER) {
       isolateHelperLibrary = library;
@@ -225,7 +217,8 @@
     boundClosureClass = lookupHelperClass('BoundClosure');
     closureClass = lookupHelperClass('Closure');
     if (!missingHelperClasses.isEmpty) {
-      reporter.internalError(jsHelperLibrary,
+      reporter.internalError(
+          jsHelperLibrary,
           'dart:_js_helper library does not contain required classes: '
           '$missingHelperClasses');
     }
@@ -309,7 +302,6 @@
     }
   }
 
-
   void onLibrariesLoaded(LoadedLibraries loadedLibraries) {
     assert(loadedLibraries.containsLibrary(Uris.dart_core));
     assert(loadedLibraries.containsLibrary(DART_INTERCEPTORS));
@@ -340,8 +332,7 @@
     }
 
     jsIndexableClass.ensureResolved(resolution);
-    jsIndexableLength = compiler.lookupElementIn(
-        jsIndexableClass, 'length');
+    jsIndexableLength = compiler.lookupElementIn(jsIndexableClass, 'length');
     if (jsIndexableLength != null && jsIndexableLength.isAbstractField) {
       AbstractFieldElement element = jsIndexableLength;
       jsIndexableLength = element.getter;
@@ -396,7 +387,6 @@
     return findHelper('isJsIndexable');
   }
 
-
   Element get throwIllegalArgumentException {
     return findHelper('iae');
   }
@@ -608,8 +598,7 @@
   }
 
   Element get asyncStarController {
-    ClassElement classElement =
-        findAsyncHelper("_AsyncStarStreamController");
+    ClassElement classElement = findAsyncHelper("_AsyncStarStreamController");
     classElement.ensureResolved(resolution);
     return classElement;
   }
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index aae737b..3edac4f 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -4,15 +4,10 @@
 
 library dart2js.js_helpers.impact;
 
-import '../compiler.dart' show
-    Compiler;
-import '../core_types.dart' show
-    CoreClasses;
-import '../dart_types.dart' show
-    InterfaceType;
-import '../elements/elements.dart' show
-    ClassElement,
-    Element;
+import '../compiler.dart' show Compiler;
+import '../core_types.dart' show CoreClasses;
+import '../dart_types.dart' show InterfaceType;
+import '../elements/elements.dart' show ClassElement, Element;
 
 import 'backend_helpers.dart';
 import 'constant_system_javascript.dart';
@@ -25,10 +20,11 @@
   final List<ClassElement> instantiatedClasses;
   final List<BackendImpact> otherImpacts;
 
-  BackendImpact({this.staticUses: const <Element>[],
-                 this.instantiatedTypes: const <InterfaceType>[],
-                 this.instantiatedClasses: const <ClassElement>[],
-                 this.otherImpacts: const <BackendImpact>[]});
+  BackendImpact(
+      {this.staticUses: const <Element>[],
+      this.instantiatedTypes: const <InterfaceType>[],
+      this.instantiatedClasses: const <ClassElement>[],
+      this.otherImpacts: const <BackendImpact>[]});
 }
 
 /// The JavaScript backend dependencies for various features.
@@ -47,11 +43,11 @@
 
   BackendImpact get getRuntimeTypeArgument {
     if (_getRuntimeTypeArgument == null) {
-      _getRuntimeTypeArgument = new BackendImpact(
-          staticUses: [
-            helpers.getRuntimeTypeArgument,
-            helpers.getTypeArgumentByIndex,
-            helpers.copyTypeArguments]);
+      _getRuntimeTypeArgument = new BackendImpact(staticUses: [
+        helpers.getRuntimeTypeArgument,
+        helpers.getTypeArgumentByIndex,
+        helpers.copyTypeArguments
+      ]);
     }
     return _getRuntimeTypeArgument;
   }
@@ -60,14 +56,14 @@
 
   BackendImpact get computeSignature {
     if (_computeSignature == null) {
-      _computeSignature = new BackendImpact(
-          staticUses: [
-            helpers.setRuntimeTypeInfo,
-            helpers.getRuntimeTypeInfo,
-            helpers.computeSignature,
-            helpers.getRuntimeTypeArguments],
-          otherImpacts: [
-            listValues]);
+      _computeSignature = new BackendImpact(staticUses: [
+        helpers.setRuntimeTypeInfo,
+        helpers.getRuntimeTypeInfo,
+        helpers.computeSignature,
+        helpers.getRuntimeTypeArguments
+      ], otherImpacts: [
+        listValues
+      ]);
     }
     return _computeSignature;
   }
@@ -76,12 +72,12 @@
 
   BackendImpact get asyncBody {
     if (_asyncBody == null) {
-      _asyncBody = new BackendImpact(
-          staticUses: [
-            helpers.asyncHelper,
-            helpers.syncCompleterConstructor,
-            helpers.streamIteratorConstructor,
-            helpers.wrapBody]);
+      _asyncBody = new BackendImpact(staticUses: [
+        helpers.asyncHelper,
+        helpers.syncCompleterConstructor,
+        helpers.streamIteratorConstructor,
+        helpers.wrapBody
+      ]);
     }
     return _asyncBody;
   }
@@ -90,14 +86,14 @@
 
   BackendImpact get syncStarBody {
     if (_syncStarBody == null) {
-      _syncStarBody = new BackendImpact(
-          staticUses: [
-            helpers.syncStarIterableConstructor,
-            helpers.endOfIteration,
-            helpers.yieldStar,
-            helpers.syncStarUncaughtError],
-          instantiatedClasses: [
-            helpers.syncStarIterable]);
+      _syncStarBody = new BackendImpact(staticUses: [
+        helpers.syncStarIterableConstructor,
+        helpers.endOfIteration,
+        helpers.yieldStar,
+        helpers.syncStarUncaughtError
+      ], instantiatedClasses: [
+        helpers.syncStarIterable
+      ]);
     }
     return _syncStarBody;
   }
@@ -106,17 +102,17 @@
 
   BackendImpact get asyncStarBody {
     if (_asyncStarBody == null) {
-      _asyncStarBody = new BackendImpact(
-          staticUses: [
-            helpers.asyncStarHelper,
-            helpers.streamOfController,
-            helpers.yieldSingle,
-            helpers.yieldStar,
-            helpers.asyncStarControllerConstructor,
-            helpers.streamIteratorConstructor,
-            helpers.wrapBody],
-          instantiatedClasses: [
-            helpers.asyncStarController]);
+      _asyncStarBody = new BackendImpact(staticUses: [
+        helpers.asyncStarHelper,
+        helpers.streamOfController,
+        helpers.yieldSingle,
+        helpers.yieldStar,
+        helpers.asyncStarControllerConstructor,
+        helpers.streamIteratorConstructor,
+        helpers.wrapBody
+      ], instantiatedClasses: [
+        helpers.asyncStarController
+      ]);
     }
     return _asyncStarBody;
   }
@@ -126,9 +122,7 @@
   BackendImpact get typeVariableBoundCheck {
     if (_typeVariableBoundCheck == null) {
       _typeVariableBoundCheck = new BackendImpact(
-          staticUses: [
-            helpers.throwTypeError,
-            helpers.assertIsSubtype]);
+          staticUses: [helpers.throwTypeError, helpers.assertIsSubtype]);
     }
     return _typeVariableBoundCheck;
   }
@@ -138,10 +132,8 @@
   BackendImpact get abstractClassInstantiation {
     if (_abstractClassInstantiation == null) {
       _abstractClassInstantiation = new BackendImpact(
-          staticUses: [
-            helpers.throwAbstractClassInstantiationError],
-          otherImpacts: [
-            _needsString('Needed to encode the message.')]);
+          staticUses: [helpers.throwAbstractClassInstantiationError],
+          otherImpacts: [_needsString('Needed to encode the message.')]);
     }
     return _abstractClassInstantiation;
   }
@@ -150,9 +142,8 @@
 
   BackendImpact get fallThroughError {
     if (_fallThroughError == null) {
-      _fallThroughError = new BackendImpact(
-          staticUses: [
-            helpers.fallThroughError]);
+      _fallThroughError =
+          new BackendImpact(staticUses: [helpers.fallThroughError]);
     }
     return _fallThroughError;
   }
@@ -161,9 +152,7 @@
 
   BackendImpact get asCheck {
     if (_asCheck == null) {
-      _asCheck = new BackendImpact(
-          staticUses: [
-            helpers.throwRuntimeError]);
+      _asCheck = new BackendImpact(staticUses: [helpers.throwRuntimeError]);
     }
     return _asCheck;
   }
@@ -172,15 +161,14 @@
 
   BackendImpact get throwNoSuchMethod {
     if (_throwNoSuchMethod == null) {
-      _throwNoSuchMethod = new BackendImpact(
-          staticUses: [
-            helpers.throwNoSuchMethod],
-          otherImpacts: [
-            // Also register the types of the arguments passed to this method.
-            _needsList(
-                'Needed to encode the arguments for throw NoSuchMethodError.'),
-            _needsString(
-                'Needed to encode the name for throw NoSuchMethodError.')]);
+      _throwNoSuchMethod = new BackendImpact(staticUses: [
+        helpers.throwNoSuchMethod
+      ], otherImpacts: [
+        // Also register the types of the arguments passed to this method.
+        _needsList(
+            'Needed to encode the arguments for throw NoSuchMethodError.'),
+        _needsString('Needed to encode the name for throw NoSuchMethodError.')
+      ]);
     }
     return _throwNoSuchMethod;
   }
@@ -189,9 +177,8 @@
 
   BackendImpact get stringValues {
     if (_stringValues == null) {
-      _stringValues = new BackendImpact(
-          instantiatedClasses: [
-            helpers.jsStringClass]);
+      _stringValues =
+          new BackendImpact(instantiatedClasses: [helpers.jsStringClass]);
     }
     return _stringValues;
   }
@@ -200,14 +187,14 @@
 
   BackendImpact get numValues {
     if (_numValues == null) {
-      _numValues = new BackendImpact(
-          instantiatedClasses: [
-            helpers.jsIntClass,
-            helpers.jsPositiveIntClass,
-            helpers.jsUInt32Class,
-            helpers.jsUInt31Class,
-            helpers.jsNumberClass,
-            helpers.jsDoubleClass]);
+      _numValues = new BackendImpact(instantiatedClasses: [
+        helpers.jsIntClass,
+        helpers.jsPositiveIntClass,
+        helpers.jsUInt32Class,
+        helpers.jsUInt31Class,
+        helpers.jsNumberClass,
+        helpers.jsDoubleClass
+      ]);
     }
     return _numValues;
   }
@@ -220,9 +207,8 @@
 
   BackendImpact get boolValues {
     if (_boolValues == null) {
-      _boolValues = new BackendImpact(
-          instantiatedClasses: [
-            helpers.jsBoolClass]);
+      _boolValues =
+          new BackendImpact(instantiatedClasses: [helpers.jsBoolClass]);
     }
     return _boolValues;
   }
@@ -231,9 +217,8 @@
 
   BackendImpact get nullValue {
     if (_nullValue == null) {
-      _nullValue = new BackendImpact(
-          instantiatedClasses: [
-            helpers.jsNullClass]);
+      _nullValue =
+          new BackendImpact(instantiatedClasses: [helpers.jsNullClass]);
     }
     return _nullValue;
   }
@@ -242,13 +227,13 @@
 
   BackendImpact get listValues {
     if (_listValues == null) {
-      _listValues = new BackendImpact(
-          instantiatedClasses: [
-            helpers.jsArrayClass,
-            helpers.jsMutableArrayClass,
-            helpers.jsFixedArrayClass,
-            helpers.jsExtendableArrayClass,
-            helpers.jsUnmodifiableArrayClass]);
+      _listValues = new BackendImpact(instantiatedClasses: [
+        helpers.jsArrayClass,
+        helpers.jsMutableArrayClass,
+        helpers.jsFixedArrayClass,
+        helpers.jsExtendableArrayClass,
+        helpers.jsUnmodifiableArrayClass
+      ]);
     }
     return _listValues;
   }
@@ -257,12 +242,12 @@
 
   BackendImpact get throwRuntimeError {
     if (_throwRuntimeError == null) {
-      _throwRuntimeError = new BackendImpact(
-          staticUses: [
-            helpers.throwRuntimeError],
-          otherImpacts: [
-            // Also register the types of the arguments passed to this method.
-            stringValues]);
+      _throwRuntimeError = new BackendImpact(staticUses: [
+        helpers.throwRuntimeError
+      ], otherImpacts: [
+        // Also register the types of the arguments passed to this method.
+        stringValues
+      ]);
     }
     return _throwRuntimeError;
   }
@@ -271,17 +256,15 @@
 
   BackendImpact get superNoSuchMethod {
     if (_superNoSuchMethod == null) {
-      _superNoSuchMethod = new BackendImpact(
-          staticUses: [
-            helpers.createInvocationMirror,
-            helpers.objectNoSuchMethod],
-          otherImpacts: [
-            _needsInt(
-                'Needed to encode the invocation kind of super.noSuchMethod.'),
-            _needsList(
-                'Needed to encode the arguments of super.noSuchMethod.'),
-            _needsString(
-                'Needed to encode the name of super.noSuchMethod.')]);
+      _superNoSuchMethod = new BackendImpact(staticUses: [
+        helpers.createInvocationMirror,
+        helpers.objectNoSuchMethod
+      ], otherImpacts: [
+        _needsInt(
+            'Needed to encode the invocation kind of super.noSuchMethod.'),
+        _needsList('Needed to encode the arguments of super.noSuchMethod.'),
+        _needsString('Needed to encode the name of super.noSuchMethod.')
+      ]);
     }
     return _superNoSuchMethod;
   }
@@ -290,17 +273,16 @@
 
   BackendImpact get constantMapLiteral {
     if (_constantMapLiteral == null) {
-
       ClassElement find(String name) {
         return helpers.find(helpers.jsHelperLibrary, name);
       }
 
-      _constantMapLiteral = new BackendImpact(
-          instantiatedClasses: [
-            find(JavaScriptMapConstant.DART_CLASS),
-            find(JavaScriptMapConstant.DART_PROTO_CLASS),
-            find(JavaScriptMapConstant.DART_STRING_CLASS),
-            find(JavaScriptMapConstant.DART_GENERAL_CLASS)]);
+      _constantMapLiteral = new BackendImpact(instantiatedClasses: [
+        find(JavaScriptMapConstant.DART_CLASS),
+        find(JavaScriptMapConstant.DART_PROTO_CLASS),
+        find(JavaScriptMapConstant.DART_STRING_CLASS),
+        find(JavaScriptMapConstant.DART_GENERAL_CLASS)
+      ]);
     }
     return _constantMapLiteral;
   }
@@ -310,8 +292,7 @@
   BackendImpact get symbolConstructor {
     if (_symbolConstructor == null) {
       _symbolConstructor = new BackendImpact(
-        staticUses: [
-          helpers.compiler.symbolValidatedConstructor]);
+          staticUses: [helpers.compiler.symbolValidatedConstructor]);
     }
     return _symbolConstructor;
   }
@@ -321,10 +302,8 @@
   BackendImpact get constSymbol {
     if (_constSymbol == null) {
       _constSymbol = new BackendImpact(
-        instantiatedClasses: [
-          coreClasses.symbolClass],
-        staticUses: [
-          compiler.symbolConstructor.declaration]);
+          instantiatedClasses: [coreClasses.symbolClass],
+          staticUses: [compiler.symbolConstructor.declaration]);
     }
     return _constSymbol;
   }
@@ -361,9 +340,8 @@
 
   BackendImpact get assertWithoutMessage {
     if (_assertWithoutMessage == null) {
-      _assertWithoutMessage = new BackendImpact(
-          staticUses: [
-            helpers.assertHelper]);
+      _assertWithoutMessage =
+          new BackendImpact(staticUses: [helpers.assertHelper]);
     }
     return _assertWithoutMessage;
   }
@@ -373,9 +351,7 @@
   BackendImpact get assertWithMessage {
     if (_assertWithMessage == null) {
       _assertWithMessage = new BackendImpact(
-          staticUses: [
-            helpers.assertTest,
-            helpers.assertThrow]);
+          staticUses: [helpers.assertTest, helpers.assertThrow]);
     }
     return _assertWithMessage;
   }
@@ -384,9 +360,8 @@
 
   BackendImpact get asyncForIn {
     if (_asyncForIn == null) {
-      _asyncForIn = new BackendImpact(
-          staticUses: [
-            helpers.streamIteratorConstructor]);
+      _asyncForIn =
+          new BackendImpact(staticUses: [helpers.streamIteratorConstructor]);
     }
     return _asyncForIn;
   }
@@ -396,10 +371,8 @@
   BackendImpact get stringInterpolation {
     if (_stringInterpolation == null) {
       _stringInterpolation = new BackendImpact(
-          staticUses: [
-            helpers.stringInterpolationHelper],
-          otherImpacts: [
-            _needsString('Strings are created.')]);
+          staticUses: [helpers.stringInterpolationHelper],
+          otherImpacts: [_needsString('Strings are created.')]);
     }
     return _stringInterpolation;
   }
@@ -427,12 +400,12 @@
 
   BackendImpact get catchStatement {
     if (_catchStatement == null) {
-      _catchStatement = new BackendImpact(
-          staticUses: [
-            helpers.exceptionUnwrapper],
-          instantiatedClasses: [
-            helpers.jsPlainJavaScriptObjectClass,
-            helpers.jsUnknownJavaScriptObjectClass]);
+      _catchStatement = new BackendImpact(staticUses: [
+        helpers.exceptionUnwrapper
+      ], instantiatedClasses: [
+        helpers.jsPlainJavaScriptObjectClass,
+        helpers.jsUnknownJavaScriptObjectClass
+      ]);
     }
     return _catchStatement;
   }
@@ -447,7 +420,8 @@
           // here, even though we may not need the throwExpression helper.
           staticUses: [
             helpers.wrapExceptionHelper,
-            helpers.throwExpressionHelper]);
+            helpers.throwExpressionHelper
+          ]);
     }
     return _throwExpression;
   }
@@ -456,9 +430,7 @@
 
   BackendImpact get lazyField {
     if (_lazyField == null) {
-      _lazyField = new BackendImpact(
-          staticUses: [
-            helpers.cyclicThrowHelper]);
+      _lazyField = new BackendImpact(staticUses: [helpers.cyclicThrowHelper]);
     }
     return _lazyField;
   }
@@ -468,10 +440,8 @@
   BackendImpact get typeLiteral {
     if (_typeLiteral == null) {
       _typeLiteral = new BackendImpact(
-          instantiatedClasses: [
-            backend.typeImplementation],
-          staticUses: [
-            helpers.createRuntimeType]);
+          instantiatedClasses: [backend.typeImplementation],
+          staticUses: [helpers.createRuntimeType]);
     }
     return _typeLiteral;
   }
@@ -481,10 +451,8 @@
   BackendImpact get stackTraceInCatch {
     if (_stackTraceInCatch == null) {
       _stackTraceInCatch = new BackendImpact(
-          instantiatedClasses: [
-            helpers.stackTraceClass],
-          staticUses: [
-            helpers.traceFromException]);
+          instantiatedClasses: [helpers.stackTraceClass],
+          staticUses: [helpers.traceFromException]);
     }
     return _stackTraceInCatch;
   }
@@ -496,8 +464,7 @@
       _syncForIn = new BackendImpact(
           // The SSA builder recognizes certain for-in loops and can generate
           // calls to throwConcurrentModificationError.
-          staticUses: [
-            helpers.checkConcurrentModificationError]);
+          staticUses: [helpers.checkConcurrentModificationError]);
     }
     return _syncForIn;
   }
@@ -506,17 +473,16 @@
 
   BackendImpact get typeVariableExpression {
     if (_typeVariableExpression == null) {
-      _typeVariableExpression = new BackendImpact(
-          staticUses: [
-            helpers.setRuntimeTypeInfo,
-            helpers.getRuntimeTypeInfo,
-            helpers.runtimeTypeToString,
-            helpers.createRuntimeType],
-          otherImpacts: [
-            listValues,
-            getRuntimeTypeArgument,
-            _needsInt('Needed for accessing a type variable literal on this.')
-          ]);
+      _typeVariableExpression = new BackendImpact(staticUses: [
+        helpers.setRuntimeTypeInfo,
+        helpers.getRuntimeTypeInfo,
+        helpers.runtimeTypeToString,
+        helpers.createRuntimeType
+      ], otherImpacts: [
+        listValues,
+        getRuntimeTypeArgument,
+        _needsInt('Needed for accessing a type variable literal on this.')
+      ]);
     }
     return _typeVariableExpression;
   }
@@ -525,9 +491,7 @@
 
   BackendImpact get typeCheck {
     if (_typeCheck == null) {
-      _typeCheck = new BackendImpact(
-          otherImpacts: [
-            boolValues]);
+      _typeCheck = new BackendImpact(otherImpacts: [boolValues]);
     }
     return _typeCheck;
   }
@@ -536,9 +500,8 @@
 
   BackendImpact get checkedModeTypeCheck {
     if (_checkedModeTypeCheck == null) {
-      _checkedModeTypeCheck = new BackendImpact(
-          staticUses: [
-            helpers.throwRuntimeError]);
+      _checkedModeTypeCheck =
+          new BackendImpact(staticUses: [helpers.throwRuntimeError]);
     }
     return _checkedModeTypeCheck;
   }
@@ -547,9 +510,8 @@
 
   BackendImpact get malformedTypeCheck {
     if (_malformedTypeCheck == null) {
-      _malformedTypeCheck = new BackendImpact(
-          staticUses: [
-            helpers.throwTypeError]);
+      _malformedTypeCheck =
+          new BackendImpact(staticUses: [helpers.throwTypeError]);
     }
     return _malformedTypeCheck;
   }
@@ -558,15 +520,15 @@
 
   BackendImpact get genericTypeCheck {
     if (_genericTypeCheck == null) {
-      _genericTypeCheck = new BackendImpact(
-          staticUses: [
-            helpers.checkSubtype,
-            // TODO(johnniwinther): Investigate why this is needed.
-            helpers.setRuntimeTypeInfo,
-            helpers.getRuntimeTypeInfo],
-          otherImpacts: [
-            listValues,
-            getRuntimeTypeArgument]);
+      _genericTypeCheck = new BackendImpact(staticUses: [
+        helpers.checkSubtype,
+        // TODO(johnniwinther): Investigate why this is needed.
+        helpers.setRuntimeTypeInfo,
+        helpers.getRuntimeTypeInfo
+      ], otherImpacts: [
+        listValues,
+        getRuntimeTypeArgument
+      ]);
     }
     return _genericTypeCheck;
   }
@@ -575,9 +537,7 @@
 
   BackendImpact get genericIsCheck {
     if (_genericIsCheck == null) {
-      _genericIsCheck = new BackendImpact(
-          otherImpacts: [
-            intValues]);
+      _genericIsCheck = new BackendImpact(otherImpacts: [intValues]);
     }
     return _genericIsCheck;
   }
@@ -586,9 +546,8 @@
 
   BackendImpact get genericCheckedModeTypeCheck {
     if (_genericCheckedModeTypeCheck == null) {
-      _genericCheckedModeTypeCheck = new BackendImpact(
-          staticUses: [
-            helpers.assertSubtype]);
+      _genericCheckedModeTypeCheck =
+          new BackendImpact(staticUses: [helpers.assertSubtype]);
     }
     return _genericCheckedModeTypeCheck;
   }
@@ -597,9 +556,8 @@
 
   BackendImpact get typeVariableTypeCheck {
     if (_typeVariableTypeCheck == null) {
-      _typeVariableTypeCheck = new BackendImpact(
-          staticUses: [
-            helpers.checkSubtypeOfRuntimeType]);
+      _typeVariableTypeCheck =
+          new BackendImpact(staticUses: [helpers.checkSubtypeOfRuntimeType]);
     }
     return _typeVariableTypeCheck;
   }
@@ -608,9 +566,8 @@
 
   BackendImpact get typeVariableCheckedModeTypeCheck {
     if (_typeVariableCheckedModeTypeCheck == null) {
-      _typeVariableCheckedModeTypeCheck = new BackendImpact(
-        staticUses: [
-          helpers.assertSubtypeOfRuntimeType]);
+      _typeVariableCheckedModeTypeCheck =
+          new BackendImpact(staticUses: [helpers.assertSubtypeOfRuntimeType]);
     }
     return _typeVariableCheckedModeTypeCheck;
   }
@@ -619,9 +576,8 @@
 
   BackendImpact get functionTypeCheck {
     if (_functionTypeCheck == null) {
-      _functionTypeCheck = new BackendImpact(
-          staticUses: [
-            helpers.functionTypeTestMetaHelper]);
+      _functionTypeCheck =
+          new BackendImpact(staticUses: [helpers.functionTypeTestMetaHelper]);
     }
     return _functionTypeCheck;
   }
@@ -630,12 +586,12 @@
 
   BackendImpact get nativeTypeCheck {
     if (_nativeTypeCheck == null) {
-      _nativeTypeCheck = new BackendImpact(
-          staticUses: [
-            // We will neeed to add the "$is" and "$as" properties on the
-            // JavaScript object prototype, so we make sure
-            // [:defineProperty:] is compiled.
-            helpers.defineProperty]);
+      _nativeTypeCheck = new BackendImpact(staticUses: [
+        // We will neeed to add the "$is" and "$as" properties on the
+        // JavaScript object prototype, so we make sure
+        // [:defineProperty:] is compiled.
+        helpers.defineProperty
+      ]);
     }
     return _nativeTypeCheck;
   }
@@ -644,9 +600,8 @@
 
   BackendImpact get closure {
     if (_closure == null) {
-      _closure = new BackendImpact(
-          instantiatedClasses: [
-            coreClasses.functionClass]);
+      _closure =
+          new BackendImpact(instantiatedClasses: [coreClasses.functionClass]);
     }
     return _closure;
   }
diff --git a/pkg/compiler/lib/src/js_backend/backend_serialization.dart b/pkg/compiler/lib/src/js_backend/backend_serialization.dart
index 8a4923f..c7c2039 100644
--- a/pkg/compiler/lib/src/js_backend/backend_serialization.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_serialization.dart
@@ -4,14 +4,10 @@
 
 library js_backend.serialization;
 
-import '../common/backend_api.dart' show
-    BackendSerialization;
+import '../common/backend_api.dart' show BackendSerialization;
 import '../elements/elements.dart';
-import '../serialization/serialization.dart' show
-    DeserializerPlugin,
-    ObjectDecoder,
-    ObjectEncoder,
-    SerializerPlugin;
+import '../serialization/serialization.dart'
+    show DeserializerPlugin, ObjectDecoder, ObjectEncoder, SerializerPlugin;
 import '../serialization/keys.dart';
 import 'js_backend.dart';
 
@@ -57,4 +53,3 @@
     }
   }
 }
-
diff --git a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
index a40caad..409c44d 100644
--- a/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
+++ b/pkg/compiler/lib/src/js_backend/checked_mode_helpers.dart
@@ -17,8 +17,8 @@
 
   CallStructure get callStructure => CallStructure.ONE_ARG;
 
-  jsAst.Expression generateCall(SsaCodeGenerator codegen,
-                                HTypeConversion node) {
+  jsAst.Expression generateCall(
+      SsaCodeGenerator codegen, HTypeConversion node) {
     StaticUse staticUse = getStaticUse(codegen.compiler);
     codegen.registry.registerStaticUse(staticUse);
     List<jsAst.Expression> arguments = <jsAst.Expression>[];
@@ -31,46 +31,46 @@
   }
 
   void generateAdditionalArguments(SsaCodeGenerator codegen,
-                                   HTypeConversion node,
-                                   List<jsAst.Expression> arguments) {
+      HTypeConversion node, List<jsAst.Expression> arguments) {
     // No additional arguments needed.
   }
 
-  static const List<CheckedModeHelper> helpers = const <CheckedModeHelper> [
-      const MalformedCheckedModeHelper('checkMalformedType'),
-      const CheckedModeHelper('voidTypeCheck'),
-      const CheckedModeHelper('stringTypeCast'),
-      const CheckedModeHelper('stringTypeCheck'),
-      const CheckedModeHelper('doubleTypeCast'),
-      const CheckedModeHelper('doubleTypeCheck'),
-      const CheckedModeHelper('numTypeCast'),
-      const CheckedModeHelper('numTypeCheck'),
-      const CheckedModeHelper('boolTypeCast'),
-      const CheckedModeHelper('boolTypeCheck'),
-      const CheckedModeHelper('intTypeCast'),
-      const CheckedModeHelper('intTypeCheck'),
-      const PropertyCheckedModeHelper('numberOrStringSuperNativeTypeCast'),
-      const PropertyCheckedModeHelper('numberOrStringSuperNativeTypeCheck'),
-      const PropertyCheckedModeHelper('numberOrStringSuperTypeCast'),
-      const PropertyCheckedModeHelper('numberOrStringSuperTypeCheck'),
-      const PropertyCheckedModeHelper('stringSuperNativeTypeCast'),
-      const PropertyCheckedModeHelper('stringSuperNativeTypeCheck'),
-      const PropertyCheckedModeHelper('stringSuperTypeCast'),
-      const PropertyCheckedModeHelper('stringSuperTypeCheck'),
-      const CheckedModeHelper('listTypeCast'),
-      const CheckedModeHelper('listTypeCheck'),
-      const PropertyCheckedModeHelper('listSuperNativeTypeCast'),
-      const PropertyCheckedModeHelper('listSuperNativeTypeCheck'),
-      const PropertyCheckedModeHelper('listSuperTypeCast'),
-      const PropertyCheckedModeHelper('listSuperTypeCheck'),
-      const PropertyCheckedModeHelper('interceptedTypeCast'),
-      const PropertyCheckedModeHelper('interceptedTypeCheck'),
-      const SubtypeCheckedModeHelper('subtypeCast'),
-      const SubtypeCheckedModeHelper('assertSubtype'),
-      const TypeVariableCheckedModeHelper('subtypeOfRuntimeTypeCast'),
-      const TypeVariableCheckedModeHelper('assertSubtypeOfRuntimeType'),
-      const PropertyCheckedModeHelper('propertyTypeCast'),
-      const PropertyCheckedModeHelper('propertyTypeCheck')];
+  static const List<CheckedModeHelper> helpers = const <CheckedModeHelper>[
+    const MalformedCheckedModeHelper('checkMalformedType'),
+    const CheckedModeHelper('voidTypeCheck'),
+    const CheckedModeHelper('stringTypeCast'),
+    const CheckedModeHelper('stringTypeCheck'),
+    const CheckedModeHelper('doubleTypeCast'),
+    const CheckedModeHelper('doubleTypeCheck'),
+    const CheckedModeHelper('numTypeCast'),
+    const CheckedModeHelper('numTypeCheck'),
+    const CheckedModeHelper('boolTypeCast'),
+    const CheckedModeHelper('boolTypeCheck'),
+    const CheckedModeHelper('intTypeCast'),
+    const CheckedModeHelper('intTypeCheck'),
+    const PropertyCheckedModeHelper('numberOrStringSuperNativeTypeCast'),
+    const PropertyCheckedModeHelper('numberOrStringSuperNativeTypeCheck'),
+    const PropertyCheckedModeHelper('numberOrStringSuperTypeCast'),
+    const PropertyCheckedModeHelper('numberOrStringSuperTypeCheck'),
+    const PropertyCheckedModeHelper('stringSuperNativeTypeCast'),
+    const PropertyCheckedModeHelper('stringSuperNativeTypeCheck'),
+    const PropertyCheckedModeHelper('stringSuperTypeCast'),
+    const PropertyCheckedModeHelper('stringSuperTypeCheck'),
+    const CheckedModeHelper('listTypeCast'),
+    const CheckedModeHelper('listTypeCheck'),
+    const PropertyCheckedModeHelper('listSuperNativeTypeCast'),
+    const PropertyCheckedModeHelper('listSuperNativeTypeCheck'),
+    const PropertyCheckedModeHelper('listSuperTypeCast'),
+    const PropertyCheckedModeHelper('listSuperTypeCheck'),
+    const PropertyCheckedModeHelper('interceptedTypeCast'),
+    const PropertyCheckedModeHelper('interceptedTypeCheck'),
+    const SubtypeCheckedModeHelper('subtypeCast'),
+    const SubtypeCheckedModeHelper('assertSubtype'),
+    const TypeVariableCheckedModeHelper('subtypeOfRuntimeTypeCast'),
+    const TypeVariableCheckedModeHelper('assertSubtypeOfRuntimeType'),
+    const PropertyCheckedModeHelper('propertyTypeCast'),
+    const PropertyCheckedModeHelper('propertyTypeCheck')
+  ];
 }
 
 class MalformedCheckedModeHelper extends CheckedModeHelper {
@@ -79,8 +79,7 @@
   CallStructure get callStructure => CallStructure.TWO_ARGS;
 
   void generateAdditionalArguments(SsaCodeGenerator codegen,
-                                   HTypeConversion node,
-                                   List<jsAst.Expression> arguments) {
+      HTypeConversion node, List<jsAst.Expression> arguments) {
     ErroneousElement element = node.typeExpression.element;
     arguments.add(js.escapedString(element.message));
   }
@@ -92,8 +91,7 @@
   CallStructure get callStructure => CallStructure.TWO_ARGS;
 
   void generateAdditionalArguments(SsaCodeGenerator codegen,
-                                   HTypeConversion node,
-                                   List<jsAst.Expression> arguments) {
+      HTypeConversion node, List<jsAst.Expression> arguments) {
     DartType type = node.typeExpression;
     jsAst.Name additionalArgument = codegen.backend.namer.operatorIsType(type);
     arguments.add(js.quoteName(additionalArgument));
@@ -106,8 +104,7 @@
   CallStructure get callStructure => CallStructure.TWO_ARGS;
 
   void generateAdditionalArguments(SsaCodeGenerator codegen,
-                                   HTypeConversion node,
-                                   List<jsAst.Expression> arguments) {
+      HTypeConversion node, List<jsAst.Expression> arguments) {
     assert(node.typeExpression.isTypeVariable);
     codegen.use(node.typeRepresentation);
     arguments.add(codegen.pop());
@@ -120,8 +117,7 @@
   CallStructure get callStructure => const CallStructure.unnamed(4);
 
   void generateAdditionalArguments(SsaCodeGenerator codegen,
-                                   HTypeConversion node,
-                                   List<jsAst.Expression> arguments) {
+      HTypeConversion node, List<jsAst.Expression> arguments) {
     DartType type = node.typeExpression;
     Element element = type.element;
     jsAst.Name isField = codegen.backend.namer.operatorIs(element);
diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
index 4040656..d2c539d 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
@@ -6,31 +6,20 @@
 
 import 'glue.dart';
 
-import '../../closure.dart' show
-    ClosureClassElement;
-import '../../common/codegen.dart' show
-    CodegenRegistry;
+import '../../closure.dart' show ClosureClassElement;
+import '../../common/codegen.dart' show CodegenRegistry;
 import '../../constants/values.dart';
 import '../../dart_types.dart';
 import '../../elements/elements.dart';
-import '../../io/source_information.dart' show
-    SourceInformation;
+import '../../io/source_information.dart' show SourceInformation;
 import '../../js/js.dart' as js;
 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir;
-import '../../tree_ir/tree_ir_nodes.dart' show
-    BuiltinMethod,
-    BuiltinOperator,
-    isCompoundableOperator;
-import '../../types/types.dart' show
-    TypeMask;
-import '../../universe/call_structure.dart' show
-    CallStructure;
-import '../../universe/selector.dart' show
-    Selector;
-import '../../universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    TypeUse;
+import '../../tree_ir/tree_ir_nodes.dart'
+    show BuiltinMethod, BuiltinOperator, isCompoundableOperator;
+import '../../types/types.dart' show TypeMask;
+import '../../universe/call_structure.dart' show CallStructure;
+import '../../universe/selector.dart' show Selector;
+import '../../universe/use.dart' show DynamicUse, StaticUse, TypeUse;
 import '../../util/maplet.dart';
 
 class CodegenBailout {
@@ -43,7 +32,7 @@
 }
 
 class CodeGenerator extends tree_ir.StatementVisitor
-                    with tree_ir.ExpressionVisitor<js.Expression> {
+    with tree_ir.ExpressionVisitor<js.Expression> {
   final CodegenRegistry registry;
 
   final Glue glue;
@@ -65,8 +54,7 @@
   /// Stacks whose top element is the current target of an unlabeled break
   /// or continue. For continues, this is the loop node itself.
   final tree_ir.FallthroughStack shortBreak = new tree_ir.FallthroughStack();
-  final tree_ir.FallthroughStack shortContinue =
-      new tree_ir.FallthroughStack();
+  final tree_ir.FallthroughStack shortContinue = new tree_ir.FallthroughStack();
 
   /// When the top element is true, [Unreachable] statements will be emitted
   /// as [Return]s, otherwise they are emitted as empty because they are
@@ -130,8 +118,7 @@
       if (!declaredVariables.add(use.name)) break;
 
       js.VariableInitialization jsVariable = new js.VariableInitialization(
-        new js.VariableDeclaration(use.name),
-        assign.value);
+          new js.VariableDeclaration(use.name), assign.value);
       jsVariables.add(jsVariable);
 
       ++accumulatorIndex;
@@ -139,8 +126,7 @@
 
     // If the last statement is a for loop with an initializer expression, try
     // to pull that expression into an initializer as well.
-    pullFromForLoop:
-    if (accumulatorIndex < accumulator.length &&
+    pullFromForLoop: if (accumulatorIndex < accumulator.length &&
         accumulator[accumulatorIndex] is js.For) {
       js.For forLoop = accumulator[accumulatorIndex];
       if (forLoop.init is! js.Assignment) break pullFromForLoop;
@@ -156,8 +142,7 @@
       if (!declaredVariables.add(use.name)) break pullFromForLoop;
 
       js.VariableInitialization jsVariable = new js.VariableInitialization(
-        new js.VariableDeclaration(use.name),
-        assign.value);
+          new js.VariableDeclaration(use.name), assign.value);
       jsVariables.add(jsVariable);
 
       // Remove the initializer from the for loop.
@@ -174,16 +159,16 @@
     for (tree_ir.Variable variable in variableNames.keys) {
       String name = getVariableName(variable);
       if (declaredVariables.contains(name)) continue;
-      js.VariableInitialization jsVariable = new js.VariableInitialization(
-        new js.VariableDeclaration(name),
-        null);
+      js.VariableInitialization jsVariable =
+          new js.VariableInitialization(new js.VariableDeclaration(name), null);
       jsVariables.add(jsVariable);
     }
 
     if (jsVariables.length > 0) {
       // Would be nice to avoid inserting at the beginning of list.
-      accumulator.insert(0, new js.ExpressionStatement(
-          new js.VariableDeclarationList(jsVariables)
+      accumulator.insert(
+          0,
+          new js.ExpressionStatement(new js.VariableDeclarationList(jsVariables)
               .withSourceInformation(function.sourceInformation)));
     }
     return new js.Fun(parameters, new js.Block(accumulator));
@@ -213,9 +198,8 @@
     // Synthesize a variable name that isn't used elsewhere.
     String prefix = variable.element == null ? 'v' : variable.element.name;
     int counter = 0;
-    name = glue.safeVariableName(variable.element == null
-        ? '$prefix$counter'
-        : variable.element.name);
+    name = glue.safeVariableName(
+        variable.element == null ? '$prefix$counter' : variable.element.name);
     while (!usedVariableNames.add(name)) {
       ++counter;
       name = '$prefix$counter';
@@ -235,7 +219,7 @@
   }
 
   giveup(tree_ir.Node node,
-         [String reason = 'unimplemented in CodeGenerator']) {
+      [String reason = 'unimplemented in CodeGenerator']) {
     throw new CodegenBailout(node, reason);
   }
 
@@ -248,32 +232,28 @@
   }
 
   js.Expression buildConstant(ConstantValue constant,
-                              {SourceInformation sourceInformation}) {
+      {SourceInformation sourceInformation}) {
     registry.registerCompileTimeConstant(constant);
-    return glue.constantReference(constant)
+    return glue
+        .constantReference(constant)
         .withSourceInformation(sourceInformation);
   }
 
   @override
   js.Expression visitConstant(tree_ir.Constant node) {
-    return buildConstant(
-        node.value,
-        sourceInformation: node.sourceInformation);
+    return buildConstant(node.value, sourceInformation: node.sourceInformation);
   }
 
-  js.Expression buildStaticInvoke(Element target,
-                                  List<js.Expression> arguments,
-                                  {SourceInformation sourceInformation}) {
+  js.Expression buildStaticInvoke(Element target, List<js.Expression> arguments,
+      {SourceInformation sourceInformation}) {
     if (target.isConstructor) {
       // TODO(johnniwinther): Avoid dependency on [isGenerativeConstructor] by
       // using backend-specific [StatisUse] classes.
-      registry.registerStaticUse(
-          new StaticUse.constructorInvoke(target.declaration,
-              new CallStructure.unnamed(arguments.length)));
+      registry.registerStaticUse(new StaticUse.constructorInvoke(
+          target.declaration, new CallStructure.unnamed(arguments.length)));
     } else {
-      registry.registerStaticUse(
-          new StaticUse.staticInvoke(target.declaration,
-              new CallStructure.unnamed(arguments.length)));
+      registry.registerStaticUse(new StaticUse.staticInvoke(
+          target.declaration, new CallStructure.unnamed(arguments.length)));
     }
     js.Expression elementAccess = glue.staticFunctionAccess(target);
     return new js.Call(elementAccess, arguments,
@@ -287,9 +267,7 @@
     registry.registerInstantiation(node.type);
     FunctionElement target = node.target;
     List<js.Expression> arguments = visitExpressionList(node.arguments);
-    return buildStaticInvoke(
-        target,
-        arguments,
+    return buildStaticInvoke(target, arguments,
         sourceInformation: node.sourceInformation);
   }
 
@@ -306,9 +284,11 @@
   js.Expression visitInvokeMethod(tree_ir.InvokeMethod node) {
     TypeMask mask = glue.extendMaskIfReachesAll(node.selector, node.mask);
     registerMethodInvoke(node.selector, mask);
-    return js.propertyCall(visitExpression(node.receiver),
-                           glue.invocationName(node.selector),
-                           visitExpressionList(node.arguments))
+    return js
+        .propertyCall(
+            visitExpression(node.receiver),
+            glue.invocationName(node.selector),
+            visitExpressionList(node.arguments))
         .withSourceInformation(node.sourceInformation);
   }
 
@@ -317,7 +297,7 @@
     FunctionElement target = node.target;
     List<js.Expression> arguments = visitExpressionList(node.arguments);
     return buildStaticInvoke(target, arguments,
-          sourceInformation: node.sourceInformation);
+        sourceInformation: node.sourceInformation);
   }
 
   @override
@@ -327,44 +307,43 @@
       // will be created, and that this tear-off must bypass ordinary
       // dispatch to ensure the super method is invoked.
       registry.registerStaticUse(new StaticUse.staticInvoke(
-          glue.closureFromTearOff, new CallStructure.unnamed(
-            glue.closureFromTearOff.parameters.length)));
+          glue.closureFromTearOff,
+          new CallStructure.unnamed(
+              glue.closureFromTearOff.parameters.length)));
       registry.registerStaticUse(new StaticUse.superTearOff(node.target));
     }
     if (node.target is ConstructorBodyElement) {
-      registry.registerStaticUse(
-          new StaticUse.constructorBodyInvoke(
-              node.target.declaration,
-              new CallStructure.unnamed(node.arguments.length)));
+      registry.registerStaticUse(new StaticUse.constructorBodyInvoke(
+          node.target.declaration,
+          new CallStructure.unnamed(node.arguments.length)));
       // A constructor body cannot be overriden or intercepted, so we can
       // use the short form for this invocation.
-      return js.js('#.#(#)',
-          [visitExpression(node.receiver),
-           glue.instanceMethodName(node.target),
-           visitExpressionList(node.arguments)])
-          .withSourceInformation(node.sourceInformation);
+      return js.js('#.#(#)', [
+        visitExpression(node.receiver),
+        glue.instanceMethodName(node.target),
+        visitExpressionList(node.arguments)
+      ]).withSourceInformation(node.sourceInformation);
     }
-    registry.registerStaticUse(
-        new StaticUse.superInvoke(
-            node.target.declaration,
-            new CallStructure.unnamed(node.arguments.length)));
-    return js.js('#.#.call(#, #)',
-        [glue.prototypeAccess(node.target.enclosingClass),
-         glue.invocationName(node.selector),
-         visitExpression(node.receiver),
-         visitExpressionList(node.arguments)])
-        .withSourceInformation(node.sourceInformation);
+    registry.registerStaticUse(new StaticUse.superInvoke(
+        node.target.declaration,
+        new CallStructure.unnamed(node.arguments.length)));
+    return js.js('#.#.call(#, #)', [
+      glue.prototypeAccess(node.target.enclosingClass),
+      glue.invocationName(node.selector),
+      visitExpression(node.receiver),
+      visitExpressionList(node.arguments)
+    ]).withSourceInformation(node.sourceInformation);
   }
 
   @override
   js.Expression visitOneShotInterceptor(tree_ir.OneShotInterceptor node) {
     registerMethodInvoke(node.selector, node.mask);
     registry.registerUseInterceptor();
-    return js.js('#.#(#)',
-        [glue.getInterceptorLibrary(),
-         glue.registerOneShotInterceptor(node.selector),
-         visitExpressionList(node.arguments)])
-        .withSourceInformation(node.sourceInformation);
+    return js.js('#.#(#)', [
+      glue.getInterceptorLibrary(),
+      glue.registerOneShotInterceptor(node.selector),
+      visitExpressionList(node.arguments)
+    ]).withSourceInformation(node.sourceInformation);
   }
 
   @override
@@ -377,9 +356,7 @@
   @override
   js.Expression visitLogicalOperator(tree_ir.LogicalOperator node) {
     return new js.Binary(
-        node.operator,
-        visitExpression(node.left),
-        visitExpression(node.right));
+        node.operator, visitExpression(node.left), visitExpression(node.right));
   }
 
   @override
@@ -431,9 +408,9 @@
         }
         // TODO(sra): Implement fast cast via calling 'boolTypeCast'.
       } else if (node.isTypeTest &&
-                 node.typeArguments.isEmpty &&
-                 glue.mayGenerateInstanceofCheck(type) &&
-                 tryRegisterInstanceofCheck(clazz)) {
+          node.typeArguments.isEmpty &&
+          glue.mayGenerateInstanceofCheck(type) &&
+          tryRegisterInstanceofCheck(clazz)) {
         return js.js('# instanceof #', [value, glue.constructorAccess(clazz)]);
       }
 
@@ -449,9 +426,8 @@
       //
       // Any of the last two arguments may be null if there are no type
       // arguments, and/or if no substitution is required.
-      Element function = node.isTypeTest
-          ? glue.getCheckSubtype()
-          : glue.getSubtypeCast();
+      Element function =
+          node.isTypeTest ? glue.getCheckSubtype() : glue.getSubtypeCast();
 
       js.Expression isT = js.quoteName(glue.getTypeTestTag(type));
 
@@ -464,8 +440,7 @@
           : new js.LiteralNull();
 
       return buildStaticHelperInvocation(
-          function,
-          <js.Expression>[value, isT, typeArgumentArray, asT]);
+          function, <js.Expression>[value, isT, typeArgumentArray, asT]);
     } else if (type is TypeVariableType || type is FunctionType) {
       registry.registerTypeUse(new TypeUse.isCheck(type));
 
@@ -477,8 +452,7 @@
       js.Expression typeValue = typeArguments.single;
 
       return buildStaticHelperInvocation(
-          function,
-          <js.Expression>[value, typeValue]);
+          function, <js.Expression>[value, typeValue]);
     }
     return giveup(node, 'type check unimplemented for $type.');
   }
@@ -526,19 +500,16 @@
 
   bool isCompoundableBuiltin(tree_ir.Expression exp) {
     return exp is tree_ir.ApplyBuiltinOperator &&
-           exp.arguments.length == 2 &&
-           isCompoundableOperator(exp.operator);
+        exp.arguments.length == 2 &&
+        isCompoundableOperator(exp.operator);
   }
 
   bool isOneConstant(tree_ir.Expression exp) {
     return exp is tree_ir.Constant && exp.value.isOne;
   }
 
-  js.Expression makeAssignment(
-      js.Expression leftHand,
-      tree_ir.Expression value,
-      {SourceInformation sourceInformation,
-       BuiltinOperator compound}) {
+  js.Expression makeAssignment(js.Expression leftHand, tree_ir.Expression value,
+      {SourceInformation sourceInformation, BuiltinOperator compound}) {
     if (isOneConstant(value)) {
       if (compound == BuiltinOperator.NumAdd) {
         return new js.Prefix('++', leftHand)
@@ -550,8 +521,8 @@
       }
     }
     if (compound != null) {
-      return new js.Assignment.compound(leftHand,
-          getAsCompoundOperator(compound), visitExpression(value))
+      return new js.Assignment.compound(
+              leftHand, getAsCompoundOperator(compound), visitExpression(value))
           .withSourceInformation(sourceInformation);
     }
     return new js.Assignment(leftHand, visitExpression(value))
@@ -566,12 +537,12 @@
       tree_ir.Expression left = rhs.arguments[0];
       tree_ir.Expression right = rhs.arguments[1];
       if (left is tree_ir.VariableUse && left.variable == node.variable) {
-        return makeAssignment(variable, right, compound: rhs.operator,
-            sourceInformation: node.sourceInformation);
+        return makeAssignment(variable, right,
+            compound: rhs.operator, sourceInformation: node.sourceInformation);
       }
     }
-    return makeAssignment(
-        variable, node.value, sourceInformation: node.sourceInformation);
+    return makeAssignment(variable, node.value,
+        sourceInformation: node.sourceInformation);
   }
 
   @override
@@ -594,14 +565,14 @@
   /// target. This means jumping to [other] is equivalent to executing [node].
   bool isEffectiveBreakTarget(tree_ir.Break node, tree_ir.Statement other) {
     return node.target.binding.next == other ||
-           other is tree_ir.Break && node.target == other.target;
+        other is tree_ir.Break && node.target == other.target;
   }
 
   /// True if the given break is equivalent to an unlabeled continue.
   bool isShortContinue(tree_ir.Break node) {
     tree_ir.Statement next = node.target.binding.next;
     return next is tree_ir.Continue &&
-           next.target.binding == shortContinue.target;
+        next.target.binding == shortContinue.target;
   }
 
   @override
@@ -628,8 +599,8 @@
     if (node.next is tree_ir.Unreachable && emitUnreachableAsReturn.last) {
       // Emit as 'return exp' to assist local analysis in the VM.
       SourceInformation sourceInformation = node.expression.sourceInformation;
-      accumulator.add(
-          new js.Return(exp).withSourceInformation(sourceInformation));
+      accumulator
+          .add(new js.Return(exp).withSourceInformation(sourceInformation));
       return null;
     } else {
       accumulator.add(new js.ExpressionStatement(exp));
@@ -643,7 +614,7 @@
 
   bool isEndOfMethod(tree_ir.Statement node) {
     return isNullReturn(node) ||
-           node is tree_ir.Break && isNullReturn(node.target.binding.next);
+        node is tree_ir.Break && isNullReturn(node.target.binding.next);
   }
 
   @override
@@ -728,7 +699,7 @@
   }
 
   js.Expression makeSequence(List<tree_ir.Expression> list) {
-    return list.map(visitExpression).reduce((x,y) => new js.Binary(',', x, y));
+    return list.map(visitExpression).reduce((x, y) => new js.Binary(',', x, y));
   }
 
   @override
@@ -746,7 +717,8 @@
     js.Statement loopNode;
     if (node.updates.isEmpty) {
       loopNode = new js.While(condition, body);
-    } else { // Compile as a for loop.
+    } else {
+      // Compile as a for loop.
       js.Expression init;
       if (accumulator.isNotEmpty &&
           accumulator.last is js.ExpressionStatement) {
@@ -778,8 +750,8 @@
       fallthrough.use();
     }
     shortBreak.pop();
-    accumulator.add(
-        insertLabel(node.label, new js.For(null, null, null, jsBody)));
+    accumulator
+        .add(insertLabel(node.label, new js.For(null, null, null, jsBody)));
   }
 
   bool isNull(tree_ir.Expression node) {
@@ -794,7 +766,7 @@
       fallthrough.use();
     } else {
       accumulator.add(new js.Return(visitExpression(node.value))
-            .withSourceInformation(node.sourceInformation));
+          .withSourceInformation(node.sourceInformation));
     }
   }
 
@@ -838,8 +810,7 @@
     if (classElement is ClosureClassElement) {
       registry.registerInstantiatedClosure(classElement.methodElement);
     }
-    js.Expression instance = new js.New(
-            glue.constructorAccess(classElement),
+    js.Expression instance = new js.New(glue.constructorAccess(classElement),
             visitExpressionList(node.arguments))
         .withSourceInformation(node.sourceInformation);
 
@@ -847,8 +818,8 @@
     if (typeInformation != null) {
       FunctionElement helper = glue.getAddRuntimeTypeInformation();
       js.Expression typeArguments = visitExpression(typeInformation);
-      return buildStaticHelperInvocation(helper,
-          <js.Expression>[instance, typeArguments],
+      return buildStaticHelperInvocation(
+          helper, <js.Expression>[instance, typeArguments],
           sourceInformation: node.sourceInformation);
     } else {
       return instance;
@@ -862,8 +833,8 @@
     js.Expression internalName =
         js.quoteName(glue.invocationName(node.selector));
     js.Expression kind = js.number(node.selector.invocationMirrorKind);
-    js.Expression arguments = new js.ArrayInitializer(
-        visitExpressionList(node.arguments));
+    js.Expression arguments =
+        new js.ArrayInitializer(visitExpressionList(node.arguments));
     js.Expression argumentNames = new js.ArrayInitializer(
         node.selector.namedArguments.map(js.string).toList(growable: false));
     return buildStaticHelperInvocation(glue.createInvocationMirrorMethod,
@@ -881,29 +852,29 @@
     registry.registerSpecializedGetInterceptor(interceptedClasses);
     js.Name helperName = glue.getInterceptorName(interceptedClasses);
     js.Expression globalHolder = glue.getInterceptorLibrary();
-    return js.js('#.#(#)',
-        [globalHolder, helperName, visitExpression(node.input)])
-            .withSourceInformation(node.sourceInformation);
+    return js.js('#.#(#)', [
+      globalHolder,
+      helperName,
+      visitExpression(node.input)
+    ]).withSourceInformation(node.sourceInformation);
   }
 
   @override
   js.Expression visitGetField(tree_ir.GetField node) {
     registry.registerStaticUse(new StaticUse.fieldGet(node.field));
-    return new js.PropertyAccess(
-        visitExpression(node.object),
-        glue.instanceFieldPropertyName(node.field))
+    return new js.PropertyAccess(visitExpression(node.object),
+            glue.instanceFieldPropertyName(node.field))
         .withSourceInformation(node.sourceInformation);
   }
 
   @override
   js.Expression visitSetField(tree_ir.SetField node) {
     registry.registerStaticUse(new StaticUse.fieldSet(node.field));
-    js.PropertyAccess field =
-        new js.PropertyAccess(
-            visitExpression(node.object),
-            glue.instanceFieldPropertyName(node.field));
-    return makeAssignment(field, node.value, compound: node.compound,
-        sourceInformation: node.sourceInformation);
+    js.PropertyAccess field = new js.PropertyAccess(
+        visitExpression(node.object),
+        glue.instanceFieldPropertyName(node.field));
+    return makeAssignment(field, node.value,
+        compound: node.compound, sourceInformation: node.sourceInformation);
   }
 
   @override
@@ -913,8 +884,9 @@
       // Tear off a method.
       registry.registerStaticUse(
           new StaticUse.staticTearOff(node.element.declaration));
-      return glue.isolateStaticClosureAccess(node.element)
-        .withSourceInformation(node.sourceInformation);
+      return glue
+          .isolateStaticClosureAccess(node.element)
+          .withSourceInformation(node.sourceInformation);
     }
     if (node.useLazyGetter) {
       // Read a lazily initialized field.
@@ -925,20 +897,21 @@
           sourceInformation: node.sourceInformation);
     }
     // Read an eagerly initialized field.
-    registry.registerStaticUse(
-        new StaticUse.staticGet(node.element.declaration));
-    return glue.staticFieldAccess(node.element)
+    registry
+        .registerStaticUse(new StaticUse.staticGet(node.element.declaration));
+    return glue
+        .staticFieldAccess(node.element)
         .withSourceInformation(node.sourceInformation);
   }
 
   @override
   js.Expression visitSetStatic(tree_ir.SetStatic node) {
     assert(node.element is FieldElement);
-    registry.registerStaticUse(
-        new StaticUse.staticSet(node.element.declaration));
+    registry
+        .registerStaticUse(new StaticUse.staticSet(node.element.declaration));
     js.Expression field = glue.staticFieldAccess(node.element);
-    return makeAssignment(field, node.value, compound: node.compound,
-        sourceInformation: node.sourceInformation);
+    return makeAssignment(field, node.value,
+        compound: node.compound, sourceInformation: node.sourceInformation);
   }
 
   @override
@@ -949,8 +922,7 @@
   @override
   js.Expression visitGetIndex(tree_ir.GetIndex node) {
     return new js.PropertyAccess(
-        visitExpression(node.object),
-        visitExpression(node.index));
+        visitExpression(node.object), visitExpression(node.index));
   }
 
   @override
@@ -961,24 +933,21 @@
   }
 
   js.Expression buildStaticHelperInvocation(
-      FunctionElement helper,
-      List<js.Expression> arguments,
+      FunctionElement helper, List<js.Expression> arguments,
       {SourceInformation sourceInformation}) {
     registry.registerStaticUse(new StaticUse.staticInvoke(
         helper, new CallStructure.unnamed(arguments.length)));
-    return buildStaticInvoke(
-        helper, arguments, sourceInformation: sourceInformation);
+    return buildStaticInvoke(helper, arguments,
+        sourceInformation: sourceInformation);
   }
 
   @override
   js.Expression visitReifyRuntimeType(tree_ir.ReifyRuntimeType node) {
     js.Expression typeToString = buildStaticHelperInvocation(
-        glue.getRuntimeTypeToString(),
-        [visitExpression(node.value)],
+        glue.getRuntimeTypeToString(), [visitExpression(node.value)],
         sourceInformation: node.sourceInformation);
     return buildStaticHelperInvocation(
-        glue.getCreateRuntimeType(),
-        [typeToString],
+        glue.getCreateRuntimeType(), [typeToString],
         sourceInformation: node.sourceInformation);
   }
 
@@ -988,14 +957,12 @@
     js.Expression index = js.number(glue.getTypeVariableIndex(node.variable));
     if (glue.needsSubstitutionForTypeVariableAccess(context)) {
       js.Expression typeName = glue.getRuntimeTypeName(context);
-      return buildStaticHelperInvocation(
-          glue.getRuntimeTypeArgument(),
+      return buildStaticHelperInvocation(glue.getRuntimeTypeArgument(),
           [visitExpression(node.target), typeName, index],
           sourceInformation: node.sourceInformation);
     } else {
       return buildStaticHelperInvocation(
-          glue.getTypeArgumentByIndex(),
-          [visitExpression(node.target), index],
+          glue.getTypeArgumentByIndex(), [visitExpression(node.target), index],
           sourceInformation: node.sourceInformation);
     }
   }
@@ -1009,8 +976,8 @@
             node.dartType, arguments, registry);
       case tree_ir.TypeExpressionKind.INSTANCE:
         // We expect only flat types for the INSTANCE representation.
-        assert(node.dartType ==
-               (node.dartType.element as ClassElement).thisType);
+        assert(
+            node.dartType == (node.dartType.element as ClassElement).thisType);
         registry.registerInstantiatedClass(glue.listClass);
         return new js.ArrayInitializer(arguments);
     }
@@ -1020,14 +987,13 @@
     if (node.dependency != null) {
       // Dependency is only used if [node] calls a Dart function. Currently only
       // through foreign function `RAW_DART_FUNCTION_REF`.
-      registry.registerStaticUse(
-          new StaticUse.staticInvoke(
-              node.dependency,
-              new CallStructure.unnamed(node.arguments.length)));
+      registry.registerStaticUse(new StaticUse.staticInvoke(
+          node.dependency, new CallStructure.unnamed(node.arguments.length)));
     }
     // TODO(sra,johnniwinther): Should this be in CodegenRegistry?
     glue.registerNativeBehavior(node.nativeBehavior, node);
-    return node.codeTemplate.instantiate(visitExpressionList(node.arguments))
+    return node.codeTemplate
+        .instantiate(visitExpressionList(node.arguments))
         .withSourceInformation(node.sourceInformation);
   }
 
@@ -1120,7 +1086,7 @@
           return js.js('-#', args);
         case BuiltinOperator.StringConcatenate:
           if (args.isEmpty) return js.string('');
-          return args.reduce((e1,e2) => new js.Binary('+', e1, e2));
+          return args.reduce((e1, e2) => new js.Binary('+', e1, e2));
         case BuiltinOperator.CharCodeAt:
           return js.js('#.charCodeAt(#)', args);
         case BuiltinOperator.Identical:
@@ -1169,8 +1135,8 @@
 
   /// Add a uint32 normalization `op >>> 0` to [op] if it is not in 31-bit
   /// range.
-  js.Expression normalizeBitOp(js.Expression op,
-                               tree_ir.ApplyBuiltinOperator node) {
+  js.Expression normalizeBitOp(
+      js.Expression op, tree_ir.ApplyBuiltinOperator node) {
     const MAX_UINT31 = 0x7fffffff;
     const MAX_UINT32 = 0xffffffff;
 
diff --git a/pkg/compiler/lib/src/js_backend/codegen/glue.dart b/pkg/compiler/lib/src/js_backend/codegen/glue.dart
index 5b3f572..eafef0e 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/glue.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/glue.dart
@@ -4,30 +4,21 @@
 
 library code_generator_dependencies;
 
-import '../backend_helpers.dart' show
-    BackendHelpers;
+import '../backend_helpers.dart' show BackendHelpers;
 import '../js_backend.dart';
 
 import '../../common.dart';
-import '../../common/codegen.dart' show
-    CodegenRegistry;
-import '../../compiler.dart' show
-    Compiler;
+import '../../common/codegen.dart' show CodegenRegistry;
+import '../../compiler.dart' show Compiler;
 import '../../constants/values.dart';
-import '../../dart_types.dart' show
-    DartType,
-    TypeVariableType,
-    InterfaceType;
-import '../../enqueue.dart' show
-    CodegenEnqueuer;
+import '../../dart_types.dart' show DartType, TypeVariableType, InterfaceType;
+import '../../enqueue.dart' show CodegenEnqueuer;
 import '../../elements/elements.dart';
 import '../../js_emitter/js_emitter.dart';
 import '../../js/js.dart' as js;
 import '../../native/native.dart' show NativeBehavior;
-import '../../universe/selector.dart' show
-    Selector;
-import '../../world.dart' show
-    ClassWorld;
+import '../../universe/selector.dart' show Selector;
+import '../../world.dart' show ClassWorld;
 import '../../types/types.dart';
 
 /// Encapsulates the dependencies of the function-compiler to the compiler,
@@ -148,7 +139,7 @@
   }
 
   js.Expression prototypeAccess(ClassElement e,
-                                {bool hasBeenInstantiated: false}) {
+      {bool hasBeenInstantiated: false}) {
     return _emitter.prototypeAccess(e,
         hasBeenInstantiated: hasBeenInstantiated);
   }
@@ -232,12 +223,10 @@
   }
 
   js.Expression generateTypeRepresentation(DartType dartType,
-                                           List<js.Expression> arguments,
-                                           CodegenRegistry registry) {
+      List<js.Expression> arguments, CodegenRegistry registry) {
     int variableIndex = 0;
-    js.Expression representation = _backend.rtiEncoder.getTypeRepresentation(
-        dartType,
-        (_) => arguments[variableIndex++]);
+    js.Expression representation = _backend.rtiEncoder
+        .getTypeRepresentation(dartType, (_) => arguments[variableIndex++]);
     assert(variableIndex == arguments.length);
     // Representation contains JavaScript Arrays.
     registry.registerInstantiatedClass(_helpers.jsArrayClass);
diff --git a/pkg/compiler/lib/src/js_backend/codegen/task.dart b/pkg/compiler/lib/src/js_backend/codegen/task.dart
index 853554f..061e44a 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/task.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/task.dart
@@ -12,13 +12,9 @@
 import '../js_backend.dart';
 
 import '../../common.dart';
-import '../../common/codegen.dart' show
-    CodegenWorkItem;
-import '../../common/tasks.dart' show
-    CompilerTask,
-    GenericTask;
-import '../../compiler.dart' show
-    Compiler;
+import '../../common/codegen.dart' show CodegenWorkItem;
+import '../../common/tasks.dart' show CompilerTask, GenericTask;
+import '../../compiler.dart' show Compiler;
 import '../../constants/constant_system.dart';
 import '../../cps_ir/cps_ir_builder_task.dart';
 import '../../cps_ir/cps_ir_nodes.dart' as cps;
@@ -28,13 +24,11 @@
 import '../../cps_ir/optimizers.dart' as cps_opt;
 import '../../cps_ir/type_mask_system.dart';
 import '../../cps_ir/finalize.dart' show Finalize;
-import '../../diagnostics/invariant.dart' show
-    DEBUG_MODE;
+import '../../diagnostics/invariant.dart' show DEBUG_MODE;
 import '../../elements/elements.dart';
 import '../../js/js.dart' as js;
 import '../../js_backend/codegen/codegen.dart';
-import '../../io/source_information.dart' show
-    SourceInformationStrategy;
+import '../../io/source_information.dart' show SourceInformationStrategy;
 import '../../tree_ir/tree_ir_builder.dart' as tree_builder;
 import '../../tracer.dart';
 import '../../ssa/ssa.dart' as ssa;
@@ -42,11 +36,8 @@
 import '../../tree_ir/optimization/optimization.dart' as tree_opt;
 import '../../tree_ir/tree_ir_integrity.dart';
 import '../../tree_ir/tree_ir_nodes.dart' as tree_ir;
-import '../../types/types.dart' show
-    FlatTypeMask,
-    ForwardingTypeMask,
-    TypeMask,
-    UnionTypeMask;
+import '../../types/types.dart'
+    show FlatTypeMask, ForwardingTypeMask, TypeMask, UnionTypeMask;
 
 class CpsFunctionCompiler implements FunctionCompiler {
   final ConstantSystem constantSystem;
@@ -69,7 +60,7 @@
   Inliner inliner;
 
   CpsFunctionCompiler(Compiler compiler, JavaScriptBackend backend,
-                      SourceInformationStrategy sourceInformationFactory)
+      SourceInformationStrategy sourceInformationFactory)
       : fallbackCompiler =
             new ssa.SsaFunctionCompiler(backend, sourceInformationFactory),
         cpsBuilderTask = new IrBuilderTask(compiler, sourceInformationFactory),
@@ -79,7 +70,7 @@
         glue = new Glue(compiler),
         cpsOptimizationTask = new GenericTask('CPS optimization', compiler),
         treeBuilderTask = new GenericTask('Tree builder', compiler),
-      treeOptimizationTask = new GenericTask('Tree optimization', compiler) {
+        treeOptimizationTask = new GenericTask('Tree optimization', compiler) {
     inliner = new Inliner(this);
   }
 
@@ -144,9 +135,8 @@
   ///
   /// If [targetName] is given, functions whose name contains that substring
   /// will be dumped out if the idempotency test fails.
-  void debugCpsPass(cps_opt.Pass makePass(),
-                    cps.FunctionDefinition cpsFunction,
-                    [String targetName]) {
+  void debugCpsPass(cps_opt.Pass makePass(), cps.FunctionDefinition cpsFunction,
+      [String targetName]) {
     String original = stringify(cpsFunction);
     cps_opt.Pass pass = makePass();
     pass.rewrite(cpsFunction);
@@ -165,9 +155,15 @@
         print(before);
         print('\n-->\n');
         print(after);
-        compiler.outputProvider('original', 'dump')..add(original)..close();
-        compiler.outputProvider('before', 'dump')..add(before)..close();
-        compiler.outputProvider('after', 'dump')..add(after)..close();
+        compiler.outputProvider('original', 'dump')
+          ..add(original)
+          ..close();
+        compiler.outputProvider('before', 'dump')
+          ..add(before)
+          ..close();
+        compiler.outputProvider('after', 'dump')
+          ..add(after)
+          ..close();
       }
     }
     traceGraph(pass.passName, cpsFunction);
@@ -230,9 +226,8 @@
     if (PRINT_TYPED_IR_FILTER != null &&
         PRINT_TYPED_IR_FILTER.matchAsPrefix(cpsFunction.element.name) != null) {
       String printType(nodeOrRef, String s) {
-        cps.Node node = nodeOrRef is cps.Reference
-            ? nodeOrRef.definition
-            : nodeOrRef;
+        cps.Node node =
+            nodeOrRef is cps.Reference ? nodeOrRef.definition : nodeOrRef;
         return node is cps.Variable && node.type != null
             ? '$s:${formatTypeMask(node.type)}'
             : s;
@@ -294,8 +289,8 @@
 
   tree_ir.FunctionDefinition compileToTreeIr(cps.FunctionDefinition cpsNode) {
     applyCpsPass(new Finalize(backend), cpsNode);
-    tree_builder.Builder builder = new tree_builder.Builder(
-        reporter.internalError, glue);
+    tree_builder.Builder builder =
+        new tree_builder.Builder(reporter.internalError, glue);
     tree_ir.FunctionDefinition treeNode =
         treeBuilderTask.measure(() => builder.buildFunction(cpsNode));
     assert(treeNode != null);
@@ -322,8 +317,8 @@
 
     treeOptimizationTask.measure(() {
       applyTreePass(new StatementRewriter());
-      applyTreePass(new VariableMerger(minifying:
-          compiler.options.enableMinification));
+      applyTreePass(
+          new VariableMerger(minifying: compiler.options.enableMinification));
       applyTreePass(new LoopRewriter());
       applyTreePass(new LogicalRewriter());
       applyTreePass(new PullIntoInitializers());
@@ -332,8 +327,8 @@
     return node;
   }
 
-  js.Fun compileToJavaScript(CodegenWorkItem work,
-                             tree_ir.FunctionDefinition definition) {
+  js.Fun compileToJavaScript(
+      CodegenWorkItem work, tree_ir.FunctionDefinition definition) {
     CodeGenerator codeGen = new CodeGenerator(glue, work.registry);
     Element element = work.element;
     js.Fun code = codeGen.buildFunction(definition);
@@ -346,16 +341,16 @@
 
   Iterable<CompilerTask> get tasks {
     return <CompilerTask>[
-        cpsBuilderTask,
-        cpsOptimizationTask,
-        treeBuilderTask,
-        treeOptimizationTask]
-      ..addAll(fallbackCompiler.tasks);
+      cpsBuilderTask,
+      cpsOptimizationTask,
+      treeBuilderTask,
+      treeOptimizationTask
+    ]..addAll(fallbackCompiler.tasks);
   }
 
   js.Node attachPosition(js.Node node, AstElement element) {
-    return node.withSourceInformation(
-        sourceInformationFactory.createBuilderForContext(element)
-            .buildDeclaration(element));
+    return node.withSourceInformation(sourceInformationFactory
+        .createBuilderForContext(element)
+        .buildDeclaration(element));
   }
 }
diff --git a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
index f7ff67f..3c0f485 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/unsugar.dart
@@ -107,18 +107,17 @@
     //       body;
     //
     CpsFragment cps = new CpsFragment();
-    Primitive isNull = cps.applyBuiltin(
-        BuiltinOperator.Identical,
+    Primitive isNull = cps.applyBuiltin(BuiltinOperator.Identical,
         <Primitive>[function.parameters.single, cps.makeNull()]);
     CpsFragment trueBranch = cps.ifTruthy(isNull);
-    trueBranch.invokeContinuation(function.returnContinuation,
-        <Primitive>[trueBranch.makeFalse()]);
+    trueBranch.invokeContinuation(
+        function.returnContinuation, <Primitive>[trueBranch.makeFalse()]);
     cps.insertAbove(function.body);
   }
 
   /// Insert a static call to [function] immediately above [node].
-  Primitive insertStaticCallAbove(FunctionElement function,
-      List<Primitive> arguments, Expression node) {
+  Primitive insertStaticCallAbove(
+      FunctionElement function, List<Primitive> arguments, Expression node) {
     // TODO(johnniwinther): Come up with an implementation of SourceInformation
     // for calls such as this one that don't appear in the original source.
     InvokeStatic invoke = new InvokeStatic(
@@ -152,9 +151,7 @@
 
       if (stackTraceParameter.hasAtLeastOneUse) {
         InvokeStatic stackTraceValue = insertStaticCallAbove(
-            _glue.getTraceFromException(),
-            [_exceptionParameter],
-            body);
+            _glue.getTraceFromException(), [_exceptionParameter], body);
         stackTraceParameter.replaceUsesWith(stackTraceValue);
       }
     }
@@ -171,9 +168,7 @@
   processThrow(Throw node) {
     // The subexpression of throw is wrapped in the JavaScript output.
     Primitive wrappedException = insertStaticCallAbove(
-        _glue.getWrapExceptionHelper(),
-        [node.value],
-        node);
+        _glue.getWrapExceptionHelper(), [node.value], node);
     node.valueRef.changeTo(wrappedException);
   }
 
@@ -201,10 +196,8 @@
     if (node.selector == Selectors.equals &&
         node.argumentRefs.length == 1 &&
         isNullConstant(node.argument(0))) {
-      node.replaceWith(new ApplyBuiltinOperator(
-          BuiltinOperator.Identical,
-          [node.receiver, node.argument(0)],
-          node.sourceInformation));
+      node.replaceWith(new ApplyBuiltinOperator(BuiltinOperator.Identical,
+          [node.receiver, node.argument(0)], node.sourceInformation));
       return;
     }
 
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 9bb1417..fc53cb4 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -15,13 +15,11 @@
  * (if there are some). It is hence up to that function to decide which
  * constants should be inlined or not.
  */
-class ConstantEmitter
-    implements ConstantValueVisitor<jsAst.Expression, Null> {
-
+class ConstantEmitter implements ConstantValueVisitor<jsAst.Expression, Null> {
   // Matches blank lines, comment lines and trailing comments that can't be part
   // of a string.
   static final RegExp COMMENT_RE =
-      new RegExp(r'''^ *(//.*)?\n|  *//[^''"\n]*$''' , multiLine: true);
+      new RegExp(r'''^ *(//.*)?\n|  *//[^''"\n]*$''', multiLine: true);
 
   final Compiler compiler;
   final Namer namer;
@@ -66,12 +64,11 @@
     return new jsAst.LiteralNull();
   }
 
-  static final _exponentialRE = new RegExp(
-      '^'
-      '\([-+]?\)'         // 1: sign
-      '\([0-9]+\)'        // 2: leading digit(s)
+  static final _exponentialRE = new RegExp('^'
+      '\([-+]?\)' // 1: sign
+      '\([0-9]+\)' // 2: leading digit(s)
       '\(\.\([0-9]*\)\)?' // 4: fraction digits
-      'e\([-+]?[0-9]+\)'  // 5: exponent with sign
+      'e\([-+]?[0-9]+\)' // 5: exponent with sign
       r'$');
 
   /// Reduces the size of exponential representations when minification is
@@ -154,7 +151,7 @@
   @override
   jsAst.Expression visitString(StringConstantValue constant, [_]) {
     return js.escapedString(constant.primitiveValue.slowToString(),
-                            ascii: true);
+        ascii: true);
   }
 
   @override
@@ -189,7 +186,8 @@
     jsAst.Expression jsGeneralMap() {
       List<jsAst.Expression> data = <jsAst.Expression>[];
       for (int i = 0; i < constant.keys.length; i++) {
-        jsAst.Expression keyExpression = constantReferenceGenerator(constant.keys[i]);
+        jsAst.Expression keyExpression =
+            constantReferenceGenerator(constant.keys[i]);
         jsAst.Expression valueExpression =
             constantReferenceGenerator(constant.values[i]);
         data.add(keyExpression);
@@ -208,32 +206,32 @@
     int emittedArgumentCount = 0;
     classElement.implementation.forEachInstanceField(
         (ClassElement enclosing, Element field) {
-          if (field.name == JavaScriptMapConstant.LENGTH_NAME) {
-            arguments.add(
-                new jsAst.LiteralNumber('${constant.keyList.entries.length}'));
-          } else if (field.name == JavaScriptMapConstant.JS_OBJECT_NAME) {
-            arguments.add(jsMap());
-          } else if (field.name == JavaScriptMapConstant.KEYS_NAME) {
-            arguments.add(constantReferenceGenerator(constant.keyList));
-          } else if (field.name == JavaScriptMapConstant.PROTO_VALUE) {
-            assert(constant.protoValue != null);
-            arguments.add(constantReferenceGenerator(constant.protoValue));
-          } else if (field.name == JavaScriptMapConstant.JS_DATA_NAME) {
-            arguments.add(jsGeneralMap());
-          } else {
-            reporter.internalError(field,
-                "Compiler has unexpected field ${field.name} for "
-                "${className}.");
-          }
-          emittedArgumentCount++;
-        },
-        includeSuperAndInjectedMembers: true);
+      if (field.name == JavaScriptMapConstant.LENGTH_NAME) {
+        arguments
+            .add(new jsAst.LiteralNumber('${constant.keyList.entries.length}'));
+      } else if (field.name == JavaScriptMapConstant.JS_OBJECT_NAME) {
+        arguments.add(jsMap());
+      } else if (field.name == JavaScriptMapConstant.KEYS_NAME) {
+        arguments.add(constantReferenceGenerator(constant.keyList));
+      } else if (field.name == JavaScriptMapConstant.PROTO_VALUE) {
+        assert(constant.protoValue != null);
+        arguments.add(constantReferenceGenerator(constant.protoValue));
+      } else if (field.name == JavaScriptMapConstant.JS_DATA_NAME) {
+        arguments.add(jsGeneralMap());
+      } else {
+        reporter.internalError(
+            field,
+            "Compiler has unexpected field ${field.name} for "
+            "${className}.");
+      }
+      emittedArgumentCount++;
+    }, includeSuperAndInjectedMembers: true);
     if ((className == JavaScriptMapConstant.DART_STRING_CLASS &&
-         emittedArgumentCount != 3) ||
+            emittedArgumentCount != 3) ||
         (className == JavaScriptMapConstant.DART_PROTO_CLASS &&
-         emittedArgumentCount != 4) ||
+            emittedArgumentCount != 4) ||
         (className == JavaScriptMapConstant.DART_GENERAL_CLASS &&
-         emittedArgumentCount != 1)) {
+            emittedArgumentCount != 1)) {
       reporter.internalError(classElement,
           "Compiler and ${className} disagree on number of fields.");
     }
@@ -255,7 +253,7 @@
     DartType type = constant.representedType;
     jsAst.Name typeName = namer.runtimeTypeName(type.element);
     return new jsAst.Call(getHelperProperty(backend.helpers.createRuntimeType),
-                          [js.quoteName(typeName)]);
+        [js.quoteName(typeName)]);
   }
 
   @override
@@ -275,7 +273,7 @@
         return constant.payload;
       default:
         reporter.internalError(NO_LOCATION_SPANNABLE,
-                               "Unexpected DummyConstantKind ${constant.kind}");
+            "Unexpected DummyConstantKind ${constant.kind}");
         return null;
     }
   }
@@ -283,16 +281,15 @@
   @override
   jsAst.Expression visitConstructed(ConstructedConstantValue constant, [_]) {
     Element element = constant.type.element;
-    if (backend.isForeign(element)
-        && element.name == 'JS_CONST') {
+    if (backend.isForeign(element) && element.name == 'JS_CONST') {
       StringConstantValue str = constant.fields.values.single;
       String value = str.primitiveValue.slowToString();
       return new jsAst.LiteralExpression(stripComments(value));
     }
     jsAst.Expression constructor =
         backend.emitter.constructorAccess(constant.type.element);
-    List<jsAst.Expression> fields =
-        constant.fields.values.map(constantReferenceGenerator)
+    List<jsAst.Expression> fields = constant.fields.values
+        .map(constantReferenceGenerator)
         .toList(growable: false);
     jsAst.New instantiation = new jsAst.New(constructor, fields);
     return maybeAddTypeArguments(constant.type, instantiation);
@@ -302,16 +299,16 @@
     return rawJavaScript.replaceAll(COMMENT_RE, '');
   }
 
-  jsAst.Expression maybeAddTypeArguments(InterfaceType type,
-                                         jsAst.Expression value) {
+  jsAst.Expression maybeAddTypeArguments(
+      InterfaceType type, jsAst.Expression value) {
     if (type is InterfaceType &&
         !type.treatAsRaw &&
         backend.classNeedsRti(type.element)) {
       InterfaceType interface = type;
       RuntimeTypesEncoder rtiEncoder = backend.rtiEncoder;
-      Iterable<jsAst.Expression> arguments = interface.typeArguments
-          .map((DartType type) =>
-              rtiEncoder.getTypeRepresentationWithPlaceholders(type, (_){}));
+      Iterable<jsAst.Expression> arguments = interface.typeArguments.map(
+          (DartType type) =>
+              rtiEncoder.getTypeRepresentationWithPlaceholders(type, (_) {}));
       jsAst.Expression argumentList =
           new jsAst.ArrayInitializer(arguments.toList());
       return new jsAst.Call(
diff --git a/pkg/compiler/lib/src/js_backend/constant_handler_javascript.dart b/pkg/compiler/lib/src/js_backend/constant_handler_javascript.dart
index dcb5661..f300312 100644
--- a/pkg/compiler/lib/src/js_backend/constant_handler_javascript.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_handler_javascript.dart
@@ -17,8 +17,7 @@
 
   JavaScriptConstantTask(Compiler compiler)
       : this.dartConstantCompiler = new DartConstantCompiler(compiler),
-        this.jsConstantCompiler =
-            new JavaScriptConstantCompiler(compiler),
+        this.jsConstantCompiler = new JavaScriptConstantCompiler(compiler),
         super(compiler);
 
   String get name => 'ConstantHandler';
@@ -66,20 +65,18 @@
   }
 
   ConstantExpression compileNode(Node node, TreeElements elements,
-                                 {bool enforceConst: true}) {
+      {bool enforceConst: true}) {
     return measure(() {
-      ConstantExpression result =
-          dartConstantCompiler.compileNode(node, elements,
-                                           enforceConst: enforceConst);
+      ConstantExpression result = dartConstantCompiler
+          .compileNode(node, elements, enforceConst: enforceConst);
       jsConstantCompiler.compileNode(node, elements,
           enforceConst: enforceConst);
       return result;
     });
   }
 
-  ConstantExpression compileMetadata(MetadataAnnotation metadata,
-                           Node node,
-                           TreeElements elements) {
+  ConstantExpression compileMetadata(
+      MetadataAnnotation metadata, Node node, TreeElements elements) {
     return measure(() {
       ConstantExpression constant =
           dartConstantCompiler.compileMetadata(metadata, node, elements);
@@ -92,10 +89,10 @@
   // expressions.
   @override
   void copyConstantValues(JavaScriptConstantTask task) {
-    jsConstantCompiler.constantValueMap.addAll(
-        task.jsConstantCompiler.constantValueMap);
-    dartConstantCompiler.constantValueMap.addAll(
-        task.dartConstantCompiler.constantValueMap);
+    jsConstantCompiler.constantValueMap
+        .addAll(task.jsConstantCompiler.constantValueMap);
+    dartConstantCompiler.constantValueMap
+        .addAll(task.dartConstantCompiler.constantValueMap);
   }
 }
 
@@ -106,7 +103,6 @@
  */
 class JavaScriptConstantCompiler extends ConstantCompilerBase
     implements BackendConstantEnvironment {
-
   /** Set of all registered compiled constants. */
   final Set<ConstantValue> compiledConstants = new Set<ConstantValue>();
 
@@ -125,15 +121,15 @@
   JavaScriptConstantCompiler(Compiler compiler)
       : super(compiler, JAVA_SCRIPT_CONSTANT_SYSTEM);
 
-  ConstantExpression compileVariableWithDefinitions(VariableElement element,
-                                          TreeElements definitions,
-                                          {bool isConst: false,
-                                           bool checkType: true}) {
+  ConstantExpression compileVariableWithDefinitions(
+      VariableElement element, TreeElements definitions,
+      {bool isConst: false, bool checkType: true}) {
     if (!isConst && lazyStatics.contains(element)) {
       return null;
     }
     ConstantExpression value = super.compileVariableWithDefinitions(
-        element, definitions, isConst: isConst, checkType: checkType);
+        element, definitions,
+        isConst: isConst, checkType: checkType);
     if (!isConst && value == null) {
       lazyStatics.add(element);
     }
@@ -152,10 +148,10 @@
   Iterable<VariableElement> getStaticNonFinalFieldsForEmission() {
     return initialVariableValues.keys.where((element) {
       return element.kind == ElementKind.FIELD &&
-             !element.isInstanceMember &&
-             !element.modifiers.isFinal &&
-             // The const fields are all either emitted elsewhere or inlined.
-             !element.modifiers.isConst;
+          !element.isInstanceMember &&
+          !element.modifiers.isFinal &&
+          // The const fields are all either emitted elsewhere or inlined.
+          !element.modifiers.isConst;
     });
   }
 
@@ -202,13 +198,13 @@
   }
 
   ConstantExpression compileNode(Node node, TreeElements elements,
-                                 {bool enforceConst: true}) {
+      {bool enforceConst: true}) {
     return compileNodeWithDefinitions(node, elements, isConst: enforceConst);
   }
 
-  ConstantExpression compileNodeWithDefinitions(Node node,
-                                      TreeElements definitions,
-                                      {bool isConst: true}) {
+  ConstantExpression compileNodeWithDefinitions(
+      Node node, TreeElements definitions,
+      {bool isConst: true}) {
     ConstantExpression constant = nodeConstantMap[node];
     if (constant != null && getConstantValue(constant) != null) {
       return constant;
@@ -238,9 +234,7 @@
   }
 
   ConstantExpression compileMetadata(
-      MetadataAnnotation metadata,
-      Node node,
-      TreeElements elements) {
+      MetadataAnnotation metadata, Node node, TreeElements elements) {
     ConstantExpression constant =
         super.compileMetadata(metadata, node, elements);
     metadataConstantMap[metadata] = constant;
@@ -269,8 +263,8 @@
     }
   }
 
-  void visitFunctionElement(FunctionElement e,
-                            JavaScriptConstantCompiler constants) {
+  void visitFunctionElement(
+      FunctionElement e, JavaScriptConstantCompiler constants) {
     super.visitFunctionElement(e, constants);
     if (e.hasFunctionSignature) {
       e.functionSignature.forEachParameter((p) => visit(p, constants));
@@ -288,12 +282,12 @@
     constants.nodeConstantMap.remove(node);
 
     // TODO(ahe): This doesn't belong here. Rename this class and generalize.
-    var closureClassMap =
-        constants.compiler.closureToClassMapper.closureMappingCache
+    var closureClassMap = constants
+        .compiler.closureToClassMapper.closureMappingCache
         .remove(node);
     if (closureClassMap != null) {
-      closureClassMap.removeMyselfFrom(
-          constants.compiler.enqueuer.codegen.universe);
+      closureClassMap
+          .removeMyselfFrom(constants.compiler.enqueuer.codegen.universe);
     }
   }
 }
diff --git a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
index f6ebd07..add7563 100644
--- a/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_system_javascript.dart
@@ -4,19 +4,14 @@
 
 library dart2js.constant_system.js;
 
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
 import '../constant_system_dart.dart';
-import '../core_types.dart' show
-    CoreTypes;
+import '../core_types.dart' show CoreTypes;
 import '../dart_types.dart';
-import '../elements/elements.dart' show
-    ClassElement;
-import '../tree/tree.dart' show
-    DartString,
-    LiteralDartString;
+import '../elements/elements.dart' show ClassElement;
+import '../tree/tree.dart' show DartString, LiteralDartString;
 import 'js_backend.dart';
 
 const JAVA_SCRIPT_CONSTANT_SYSTEM = const JavaScriptConstantSystem();
@@ -30,8 +25,8 @@
       if (constant.isMinusZero) constant = DART_CONSTANT_SYSTEM.createInt(0);
       IntConstantValue intConstant = constant;
       // We convert the result of bit-operations to 32 bit unsigned integers.
-      return
-          JAVA_SCRIPT_CONSTANT_SYSTEM.createInt32(~intConstant.primitiveValue);
+      return JAVA_SCRIPT_CONSTANT_SYSTEM
+          .createInt32(~intConstant.primitiveValue);
     }
     return null;
   }
@@ -236,7 +231,8 @@
     } else if (constant.isDouble) {
       DoubleConstantValue doubleResult = constant;
       double doubleValue = doubleResult.primitiveValue;
-      if (!doubleValue.isInfinite && !doubleValue.isNaN &&
+      if (!doubleValue.isInfinite &&
+          !doubleValue.isNaN &&
           !constant.isMinusZero) {
         int intValue = doubleValue.truncate();
         if (intValue == doubleValue) {
@@ -253,24 +249,23 @@
   }
 
   NumConstantValue createInt32(int i) => new IntConstantValue(i & BITS32);
-  NumConstantValue createDouble(double d)
-      => convertToJavaScriptConstant(new DoubleConstantValue(d));
+  NumConstantValue createDouble(double d) =>
+      convertToJavaScriptConstant(new DoubleConstantValue(d));
   StringConstantValue createString(DartString string) {
     return new StringConstantValue(string);
   }
+
   BoolConstantValue createBool(bool value) => new BoolConstantValue(value);
   NullConstantValue createNull() => new NullConstantValue();
 
   @override
-  ListConstantValue createList(InterfaceType type,
-                               List<ConstantValue> values) {
+  ListConstantValue createList(InterfaceType type, List<ConstantValue> values) {
     return new ListConstantValue(type, values);
   }
 
   @override
   ConstantValue createType(Compiler compiler, DartType type) {
-    return new TypeConstantValue(
-        type,
+    return new TypeConstantValue(type,
         compiler.backend.typeImplementation.computeType(compiler.resolution));
   }
 
@@ -281,12 +276,14 @@
   //
   // We consistently match that runtime semantics at compile time as well.
   bool isInt(ConstantValue constant) {
-    return constant.isInt || constant.isMinusZero ||
+    return constant.isInt ||
+        constant.isMinusZero ||
         constant.isPositiveInfinity ||
         constant.isNegativeInfinity;
   }
-  bool isDouble(ConstantValue constant)
-      => constant.isDouble && !constant.isMinusZero;
+
+  bool isDouble(ConstantValue constant) =>
+      constant.isDouble && !constant.isMinusZero;
   bool isString(ConstantValue constant) => constant.isString;
   bool isBool(ConstantValue constant) => constant.isBool;
   bool isNull(ConstantValue constant) => constant.isNull;
@@ -302,16 +299,14 @@
     return types.isSubtype(s, t);
   }
 
-  MapConstantValue createMap(Compiler compiler,
-                             InterfaceType sourceType,
-                             List<ConstantValue> keys,
-                             List<ConstantValue> values) {
+  MapConstantValue createMap(Compiler compiler, InterfaceType sourceType,
+      List<ConstantValue> keys, List<ConstantValue> values) {
     JavaScriptBackend backend = compiler.backend;
     CoreTypes coreTypes = compiler.coreTypes;
 
     bool onlyStringKeys = true;
     ConstantValue protoValue = null;
-    for (int i = 0; i < keys.length ; i++) {
+    for (int i = 0; i < keys.length; i++) {
       var key = keys[i];
       if (key.isString) {
         if (key.primitiveValue == JavaScriptMapConstant.PROTO_PROPERTY) {
@@ -334,8 +329,9 @@
     }
     ListConstantValue keysList = new ListConstantValue(keysType, keys);
     String className = onlyStringKeys
-        ? (hasProtoKey ? JavaScriptMapConstant.DART_PROTO_CLASS
-                       : JavaScriptMapConstant.DART_STRING_CLASS)
+        ? (hasProtoKey
+            ? JavaScriptMapConstant.DART_PROTO_CLASS
+            : JavaScriptMapConstant.DART_STRING_CLASS)
         : JavaScriptMapConstant.DART_GENERAL_CLASS;
     ClassElement classElement = backend.helpers.jsHelperLibrary.find(className);
     classElement.ensureResolved(compiler.resolution);
@@ -348,7 +344,6 @@
     }
     return new JavaScriptMapConstant(
         type, keysList, values, protoValue, onlyStringKeys);
-
   }
 }
 
@@ -375,11 +370,8 @@
   final ConstantValue protoValue;
   final bool onlyStringKeys;
 
-  JavaScriptMapConstant(InterfaceType type,
-                        ListConstantValue keyList,
-                        List<ConstantValue> values,
-                        this.protoValue,
-                        this.onlyStringKeys)
+  JavaScriptMapConstant(InterfaceType type, ListConstantValue keyList,
+      List<ConstantValue> values, this.protoValue, this.onlyStringKeys)
       : this.keyList = keyList,
         super(type, keyList.entries, values);
   bool get isMap => true;
diff --git a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
index 1a5e287..450b826 100644
--- a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart
@@ -120,7 +120,6 @@
       codegenJoin.computeEscapingConstructors(classElement);
 }
 
-
 class CustomElementsAnalysisJoin {
   final JavaScriptBackend backend;
   Compiler get compiler => backend.compiler;
@@ -200,8 +199,7 @@
       }
     }
     classElement.forEachMember(selectGenerativeConstructors,
-        includeBackendMembers: false,
-        includeSuperAndInjectedMembers: false);
+        includeBackendMembers: false, includeSuperAndInjectedMembers: false);
     return result;
   }
 }
diff --git a/pkg/compiler/lib/src/js_backend/field_naming_mixin.dart b/pkg/compiler/lib/src/js_backend/field_naming_mixin.dart
index c821aea..cfc0136 100644
--- a/pkg/compiler/lib/src/js_backend/field_naming_mixin.dart
+++ b/pkg/compiler/lib/src/js_backend/field_naming_mixin.dart
@@ -146,8 +146,8 @@
   }
 
   factory _FieldNamingScope.forBox(Local box, _FieldNamingRegistry registry) {
-    return registry.scopes.putIfAbsent(
-        box, () => new _BoxFieldNamingScope(box, registry));
+    return registry.scopes
+        .putIfAbsent(box, () => new _BoxFieldNamingScope(box, registry));
   }
 
   _FieldNamingScope.rootScope(this.container, this.registry)
diff --git a/pkg/compiler/lib/src/js_backend/frequency_namer.dart b/pkg/compiler/lib/src/js_backend/frequency_namer.dart
index fa3b79b..7698c3d 100644
--- a/pkg/compiler/lib/src/js_backend/frequency_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/frequency_namer.dart
@@ -4,8 +4,9 @@
 
 part of js_backend;
 
-class FrequencyBasedNamer extends Namer with _MinifiedFieldNamer,
-    _MinifiedOneShotInterceptorNamer implements jsAst.TokenFinalizer {
+class FrequencyBasedNamer extends Namer
+    with _MinifiedFieldNamer, _MinifiedOneShotInterceptorNamer
+    implements jsAst.TokenFinalizer {
   _FieldNamingRegistry fieldRegistry;
   List<TokenName> tokens = new List<TokenName>();
 
@@ -45,19 +46,15 @@
 
   @override
   jsAst.Name getFreshName(NamingScope scope, String proposedName,
-                          {bool sanitizeForNatives: false,
-                           bool sanitizeForAnnotations: false}) {
+      {bool sanitizeForNatives: false, bool sanitizeForAnnotations: false}) {
     // Grab the scope for this token
-    TokenScope tokenScope = _tokenScopes.putIfAbsent(scope,
-                                                     () => newScopeFor(scope));
+    TokenScope tokenScope =
+        _tokenScopes.putIfAbsent(scope, () => newScopeFor(scope));
 
     // Get the name the normal namer would use as a key.
-    String proposed = _generateFreshStringForName(proposedName,
-                                                  scope,
-                                                  sanitizeForNatives:
-                                                  sanitizeForNatives,
-                                                  sanitizeForAnnotations:
-                                                  sanitizeForAnnotations);
+    String proposed = _generateFreshStringForName(proposedName, scope,
+        sanitizeForNatives: sanitizeForNatives,
+        sanitizeForAnnotations: sanitizeForAnnotations);
 
     TokenName name = new TokenName(tokenScope, proposed);
     tokens.add(name);
@@ -136,9 +133,8 @@
       proposal = new String.fromCharCodes(_nextName);
       _incrementName();
     } while (MinifyNamer._hasBannedPrefix(proposal) ||
-             illegalNames.contains(proposal));
+        illegalNames.contains(proposal));
 
     return proposal;
   }
 }
-
diff --git a/pkg/compiler/lib/src/js_backend/js_backend.dart b/pkg/compiler/lib/src/js_backend/js_backend.dart
index 2704c0a..ca13518 100644
--- a/pkg/compiler/lib/src/js_backend/js_backend.dart
+++ b/pkg/compiler/lib/src/js_backend/js_backend.dart
@@ -12,117 +12,75 @@
 
 import '../closure.dart';
 import '../common.dart';
-import '../common/backend_api.dart' show
-    Backend,
-    BackendSerialization,
-    ImpactTransformer,
-    ForeignResolver;
-import '../common/codegen.dart' show
-    CodegenImpact,
-    CodegenRegistry,
-    CodegenWorkItem;
-import '../common/names.dart' show
-    Identifiers,
-    Names,
-    Selectors,
-    Uris;
-import '../common/registry.dart' show
-    EagerRegistry,
-    Registry;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../common/resolution.dart' show
-    Feature,
-    ListLiteralUse,
-    MapLiteralUse,
-    Resolution,
-    ResolutionImpact;
-import '../common/work.dart' show
-    ItemCompilationContext;
-import '../compiler.dart' show
-    Compiler;
+import '../common/backend_api.dart'
+    show Backend, BackendSerialization, ImpactTransformer, ForeignResolver;
+import '../common/codegen.dart'
+    show CodegenImpact, CodegenRegistry, CodegenWorkItem;
+import '../common/names.dart' show Identifiers, Names, Selectors, Uris;
+import '../common/registry.dart' show EagerRegistry, Registry;
+import '../common/tasks.dart' show CompilerTask;
+import '../common/resolution.dart'
+    show Feature, ListLiteralUse, MapLiteralUse, Resolution, ResolutionImpact;
+import '../common/work.dart' show ItemCompilationContext;
+import '../compiler.dart' show Compiler;
 import '../compile_time_constants.dart';
 import '../constants/constant_system.dart';
 import '../constants/expressions.dart';
 import '../constants/values.dart';
-import '../core_types.dart' show
-    CoreClasses,
-    CoreTypes;
+import '../core_types.dart' show CoreClasses, CoreTypes;
 import '../dart_types.dart';
-import '../deferred_load.dart' show
-    DeferredLoadTask;
-import '../diagnostics/invariant.dart' show
-    DEBUG_MODE;
-import '../dump_info.dart' show
-    DumpInfoTask;
+import '../deferred_load.dart' show DeferredLoadTask;
+import '../diagnostics/invariant.dart' show DEBUG_MODE;
+import '../dump_info.dart' show DumpInfoTask;
 import '../elements/elements.dart';
-import '../elements/visitor.dart' show
-    BaseElementVisitor;
-import '../enqueue.dart' show
-    Enqueuer,
-    ResolutionEnqueuer;
+import '../elements/visitor.dart' show BaseElementVisitor;
+import '../enqueue.dart' show Enqueuer, ResolutionEnqueuer;
 import '../io/code_output.dart';
-import '../io/source_information.dart' show
-    SourceInformationStrategy;
-import '../io/position_information.dart' show
-    PositionSourceInformationStrategy;
-import '../io/start_end_information.dart' show
-    StartEndSourceInformationStrategy;
+import '../io/source_information.dart' show SourceInformationStrategy;
+import '../io/position_information.dart' show PositionSourceInformationStrategy;
+import '../io/start_end_information.dart'
+    show StartEndSourceInformationStrategy;
 import '../js/js.dart' as jsAst;
 import '../js/js.dart' show js;
-import '../js/js_source_mapping.dart' show
-    JavaScriptSourceInformationStrategy;
+import '../js/js_source_mapping.dart' show JavaScriptSourceInformationStrategy;
 import '../js/rewrite_async.dart';
-import '../js_emitter/js_emitter.dart' show
-    CodeEmitterTask,
-    Emitter,
-    MetadataCollector,
-    Placeholder,
-    USE_LAZY_EMITTER;
+import '../js_emitter/js_emitter.dart'
+    show
+        CodeEmitterTask,
+        Emitter,
+        MetadataCollector,
+        Placeholder,
+        USE_LAZY_EMITTER;
 import '../library_loader.dart' show LibraryLoader, LoadedLibraries;
 import '../native/native.dart' as native;
-import '../resolution/tree_elements.dart' show
-    TreeElements;
-import '../ssa/builder.dart' show
-    SsaFunctionCompiler;
-import '../ssa/nodes.dart' show
-    HTypeConversion,
-    HInstruction;
-import '../ssa/codegen.dart' show
-    SsaCodeGenerator;
+import '../resolution/tree_elements.dart' show TreeElements;
+import '../ssa/builder.dart' show SsaFunctionCompiler;
+import '../ssa/nodes.dart' show HTypeConversion, HInstruction;
+import '../ssa/codegen.dart' show SsaCodeGenerator;
 import '../tree/tree.dart';
 import '../types/types.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector,
-    SelectorKind;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector, SelectorKind;
 import '../universe/universe.dart';
-import '../universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    StaticUseKind,
-    TypeUse,
-    TypeUseKind;
-import '../universe/world_impact.dart' show
-    ImpactStrategy,
-    ImpactUseCase,
-    TransformedWorldImpact,
-    WorldImpact,
-    WorldImpactVisitor;
+import '../universe/use.dart'
+    show DynamicUse, StaticUse, StaticUseKind, TypeUse, TypeUseKind;
+import '../universe/world_impact.dart'
+    show
+        ImpactStrategy,
+        ImpactUseCase,
+        TransformedWorldImpact,
+        WorldImpact,
+        WorldImpactVisitor;
 import '../util/characters.dart';
 import '../util/util.dart';
-import '../world.dart' show
-    ClassWorld;
+import '../world.dart' show ClassWorld;
 
 import 'backend_helpers.dart';
 import 'backend_impact.dart';
-import 'backend_serialization.dart' show
-    JavaScriptBackendSerialization;
+import 'backend_serialization.dart' show JavaScriptBackendSerialization;
 import 'codegen/task.dart';
 import 'constant_system_javascript.dart';
-import 'native_data.dart' show
-    NativeData;
+import 'native_data.dart' show NativeData;
 import 'js_interop_analysis.dart' show JsInteropAnalysis;
 import 'lookup_map_analysis.dart' show LookupMapAnalysis;
 import 'patch_resolver.dart';
diff --git a/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart b/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
index 1ba5398..2798ac3 100644
--- a/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/js_interop_analysis.dart
@@ -62,16 +62,16 @@
 
   void processJsInteropAnnotation(Element e) {
     for (MetadataAnnotation annotation in e.implementation.metadata) {
-      ConstantValue constant = backend.compiler.constants.getConstantValue(
-          annotation.constant);
+      ConstantValue constant =
+          backend.compiler.constants.getConstantValue(annotation.constant);
       if (constant == null || constant is! ConstructedConstantValue) continue;
       ConstructedConstantValue constructedConstant = constant;
       if (constructedConstant.type.element == helpers.jsAnnotationClass) {
         ConstantValue value = constructedConstant.fields[nameField];
         if (value.isString) {
           StringConstantValue stringValue = value;
-          backend.nativeData.setJsInteropName(
-              e, stringValue.primitiveValue.slowToString());
+          backend.nativeData
+              .setJsInteropName(e, stringValue.primitiveValue.slowToString());
         } else {
           // TODO(jacobr): report a warning if the value is not a String.
           backend.nativeData.setJsInteropName(e, '');
@@ -85,10 +85,10 @@
   bool hasAnonymousAnnotation(Element element) {
     if (backend.helpers.jsAnonymousClass == null) return false;
     return element.metadata.any((MetadataAnnotation annotation) {
-      ConstantValue constant = backend.compiler.constants.getConstantValue(
-          annotation.constant);
-      if (constant == null ||
-          constant is! ConstructedConstantValue) return false;
+      ConstantValue constant =
+          backend.compiler.constants.getConstantValue(annotation.constant);
+      if (constant == null || constant is! ConstructedConstantValue)
+        return false;
       ConstructedConstantValue constructedConstant = constant;
       return constructedConstant.type.element ==
           backend.helpers.jsAnonymousClass;
@@ -98,10 +98,10 @@
   void _checkFunctionParameters(FunctionElement fn) {
     if (fn.hasFunctionSignature &&
         fn.functionSignature.optionalParametersAreNamed) {
-      backend.reporter.reportErrorMessage(fn,
-          MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS, {
-            'method': fn.name
-          });
+      backend.reporter.reportErrorMessage(
+          fn,
+          MessageKind.JS_INTEROP_METHOD_WITH_NAMED_ARGUMENTS,
+          {'method': fn.name});
     }
   }
 
@@ -122,8 +122,7 @@
       // when all of jsinterop types are unreachable from main.
       if (!backend.compiler.world.isImplemented(classElement)) return;
 
-      if (!classElement
-          .implementsInterface(helpers.jsJavaScriptObjectClass)) {
+      if (!classElement.implementsInterface(helpers.jsJavaScriptObjectClass)) {
         backend.reporter.reportErrorMessage(classElement,
             MessageKind.JS_INTEROP_CLASS_CANNOT_EXTEND_DART_CLASS, {
           'cls': classElement.name,
@@ -131,15 +130,16 @@
         });
       }
 
-      classElement.forEachMember(
-          (ClassElement classElement, Element member) {
+      classElement.forEachMember((ClassElement classElement, Element member) {
         processJsInteropAnnotation(member);
 
         if (!member.isSynthesized &&
             backend.isJsInterop(classElement) &&
             member is FunctionElement) {
           FunctionElement fn = member;
-          if (!fn.isExternal && !fn.isAbstract && !fn.isConstructor &&
+          if (!fn.isExternal &&
+              !fn.isAbstract &&
+              !fn.isConstructor &&
               !fn.isStatic) {
             backend.reporter.reportErrorMessage(
                 fn,
@@ -148,16 +148,14 @@
           }
 
           if (fn.isFactoryConstructor && hasAnonymousAnnotation(classElement)) {
-              fn.functionSignature.orderedForEachParameter(
-                  (ParameterElement parameter) {
-                if (!parameter.isNamed) {
-                  backend.reporter.reportErrorMessage(parameter,
+            fn.functionSignature
+                .orderedForEachParameter((ParameterElement parameter) {
+              if (!parameter.isNamed) {
+                backend.reporter.reportErrorMessage(
+                    parameter,
                     MessageKind
                         .JS_OBJECT_LITERAL_CONSTRUCTOR_WITH_POSITIONAL_ARGUMENTS,
-                    {
-                      'parameter': parameter.name,
-                      'cls': classElement.name
-                    });
+                    {'parameter': parameter.name, 'cls': classElement.name});
               }
             });
           } else {
diff --git a/pkg/compiler/lib/src/js_backend/lookup_map_analysis.dart b/pkg/compiler/lib/src/js_backend/lookup_map_analysis.dart
index ca97a3a..a1543bd 100644
--- a/pkg/compiler/lib/src/js_backend/lookup_map_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/lookup_map_analysis.dart
@@ -8,23 +8,25 @@
 import '../common.dart';
 import '../common/registry.dart' show Registry;
 import '../compiler.dart' show Compiler;
-import '../constants/values.dart' show
-    ConstantValue,
-    ConstructedConstantValue,
-    ListConstantValue,
-    NullConstantValue,
-    StringConstantValue,
-    TypeConstantValue;
+import '../constants/values.dart'
+    show
+        ConstantValue,
+        ConstructedConstantValue,
+        ListConstantValue,
+        NullConstantValue,
+        StringConstantValue,
+        TypeConstantValue;
 import '../dart_types.dart' show DartType;
-import '../elements/elements.dart' show
-    ClassElement,
-    Element,
-    Elements,
-    FieldElement,
-    FunctionElement,
-    FunctionSignature,
-    LibraryElement,
-    VariableElement;
+import '../elements/elements.dart'
+    show
+        ClassElement,
+        Element,
+        Elements,
+        FieldElement,
+        FunctionElement,
+        FunctionSignature,
+        LibraryElement,
+        VariableElement;
 import 'js_backend.dart' show JavaScriptBackend;
 import '../dart_types.dart' show DynamicType, InterfaceType;
 import 'package:pub_semver/pub_semver.dart';
@@ -143,11 +145,11 @@
     // the lookup_map package. We otherwise produce a warning.
     lookupMapVersionVariable = library.implementation.findLocal('_version');
     if (lookupMapVersionVariable == null) {
-      reporter.reportInfo(library,
-          MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP);
+      reporter.reportInfo(
+          library, MessageKind.UNRECOGNIZED_VERSION_OF_LOOKUP_MAP);
     } else {
-      backend.compiler.enqueuer.resolution.addToWorkList(
-          lookupMapVersionVariable);
+      backend.compiler.enqueuer.resolution
+          .addToWorkList(lookupMapVersionVariable);
     }
   }
 
@@ -199,16 +201,16 @@
   void registerLookupMapReference(ConstantValue lookupMap) {
     if (!_isEnabled || !_inCodegen) return;
     assert(isLookupMap(lookupMap));
-    _lookupMaps.putIfAbsent(lookupMap,
-        () => new _LookupMapInfo(lookupMap, this).._updateUsed());
+    _lookupMaps.putIfAbsent(
+        lookupMap, () => new _LookupMapInfo(lookupMap, this).._updateUsed());
   }
 
   /// Whether [key] is a constant value whose type overrides equals.
   bool _overridesEquals(ConstantValue key) {
     if (key is ConstructedConstantValue) {
       ClassElement element = key.type.element;
-      return _typesWithEquals.putIfAbsent(element, () =>
-          !element.lookupMember('==').enclosingClass.isObject);
+      return _typesWithEquals.putIfAbsent(
+          element, () => !element.lookupMember('==').enclosingClass.isObject);
     }
     return false;
   }
@@ -299,7 +301,7 @@
     if (!_isEnabled || !_inCodegen) return;
 
     _lookupMaps.values.forEach((info) {
-      assert (!info.emitted);
+      assert(!info.emitted);
       info.emitted = true;
       info._prepareForEmission();
     });
@@ -356,11 +358,11 @@
   /// Entries in the lookup map whose keys have not been seen in the rest of the
   /// program.
   Map<ConstantValue, ConstantValue> unusedEntries =
-      <ConstantValue, ConstantValue> {};
+      <ConstantValue, ConstantValue>{};
 
   /// Entries that have been used, and thus will be part of the generated code.
   Map<ConstantValue, ConstantValue> usedEntries =
-      <ConstantValue, ConstantValue> {};
+      <ConstantValue, ConstantValue>{};
 
   /// Creates and initializes the information containing all keys of the
   /// original map marked as unused.
@@ -412,8 +414,8 @@
     assert(!usedEntries.containsKey(key));
     ConstantValue constant = unusedEntries.remove(key);
     usedEntries[key] = constant;
-    analysis.backend.registerCompileTimeConstant(constant,
-        analysis.backend.compiler.globalDependencies);
+    analysis.backend.registerCompileTimeConstant(
+        constant, analysis.backend.compiler.globalDependencies);
   }
 
   /// Restores [original] to contain all of the entries marked as possibly used.
@@ -428,7 +430,7 @@
 
     // Note: we are restoring the entries here, see comment in [original].
     if (singlePair) {
-      assert (keyValuePairs.length == 0 || keyValuePairs.length == 2);
+      assert(keyValuePairs.length == 0 || keyValuePairs.length == 2);
       if (keyValuePairs.length == 2) {
         original.fields[analysis.keyField] = keyValuePairs[0];
         original.fields[analysis.valueField] = keyValuePairs[1];
@@ -440,5 +442,4 @@
   }
 }
 
-final _validLookupMapVersionConstraint =
-    new VersionConstraint.parse('^0.0.1');
+final _validLookupMapVersionConstraint = new VersionConstraint.parse('^0.0.1');
diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart
index 0ba2e4e..ff76d87 100644
--- a/pkg/compiler/lib/src/js_backend/minify_namer.dart
+++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart
@@ -7,8 +7,11 @@
 /**
  * Assigns JavaScript identifiers to Dart variables, class-names and members.
  */
-class MinifyNamer extends Namer with _MinifiedFieldNamer,
-    _MinifyConstructorBodyNamer, _MinifiedOneShotInterceptorNamer {
+class MinifyNamer extends Namer
+    with
+        _MinifiedFieldNamer,
+        _MinifyConstructorBodyNamer,
+        _MinifiedOneShotInterceptorNamer {
   MinifyNamer(Compiler compiler) : super(compiler) {
     reserveBackendNames();
     fieldRegistry = new _FieldNamingRegistry(this);
@@ -24,8 +27,8 @@
   final String setterPrefix = 's';
   final String callPrefix = ''; // this will create function names $<n>
 
-  final ALPHABET_CHARACTERS = 52;  // a-zA-Z.
-  final ALPHANUMERIC_CHARACTERS = 62;  // a-zA-Z0-9.
+  final ALPHABET_CHARACTERS = 52; // a-zA-Z.
+  final ALPHANUMERIC_CHARACTERS = 62; // a-zA-Z0-9.
 
   /// You can pass an invalid identifier to this and unlike its non-minifying
   /// counterpart it will never return the proposedName as the new fresh name.
@@ -33,10 +36,8 @@
   /// [sanitizeForNatives] and [sanitizeForAnnotations] are ignored because the
   /// minified names will always avoid clashing with annotated names or natives.
   @override
-  String _generateFreshStringForName(String proposedName,
-      NamingScope scope,
-      {bool sanitizeForNatives: false,
-       bool sanitizeForAnnotations: false}) {
+  String _generateFreshStringForName(String proposedName, NamingScope scope,
+      {bool sanitizeForNatives: false, bool sanitizeForAnnotations: false}) {
     String freshName;
     String suggestion = scope.suggestName(proposedName);
     if (suggestion != null && scope.isUnused(suggestion)) {
@@ -53,28 +54,29 @@
   // OK to use them as fields, as we only access fields directly if we know
   // the receiver type.
   static const List<String> _reservedNativeProperties = const <String>[
-      'a', 'b', 'c', 'd', 'e', 'f', 'r', 'x', 'y', 'z', 'Q',
-      // 2-letter:
-      'ch', 'cx', 'cy', 'db', 'dx', 'dy', 'fr', 'fx', 'fy', 'go', 'id', 'k1',
-      'k2', 'k3', 'k4', 'r1', 'r2', 'rx', 'ry', 'x1', 'x2', 'y1', 'y2',
-      // 3-letter:
-      'add', 'all', 'alt', 'arc', 'CCW', 'cmp', 'dir', 'end', 'get', 'in1',
-      'in2', 'INT', 'key', 'log', 'low', 'm11', 'm12', 'm13', 'm14', 'm21',
-      'm22', 'm23', 'm24', 'm31', 'm32', 'm33', 'm34', 'm41', 'm42', 'm43',
-      'm44', 'max', 'min', 'now', 'ONE', 'put', 'red', 'rel', 'rev', 'RGB',
-      'sdp', 'set', 'src', 'tag', 'top', 'uid', 'uri', 'url', 'URL',
-      // 4-letter:
-      'abbr', 'atob', 'Attr', 'axes', 'axis', 'back', 'BACK', 'beta', 'bias',
-      'Blob', 'blue', 'blur', 'BLUR', 'body', 'BOOL', 'BOTH', 'btoa', 'BYTE',
-      'cite', 'clip', 'code', 'cols', 'cues', 'data', 'DECR', 'DONE', 'face',
-      'file', 'File', 'fill', 'find', 'font', 'form', 'gain', 'hash', 'head',
-      'high', 'hint', 'host', 'href', 'HRTF', 'IDLE', 'INCR', 'info', 'INIT',
-      'isId', 'item', 'KEEP', 'kind', 'knee', 'lang', 'left', 'LESS', 'line',
-      'link', 'list', 'load', 'loop', 'mode', 'name', 'Node', 'None', 'NONE',
-      'only', 'open', 'OPEN', 'ping', 'play', 'port', 'rect', 'Rect', 'refX',
-      'refY', 'RGBA', 'root', 'rows', 'save', 'seed', 'seek', 'self', 'send',
-      'show', 'SINE', 'size', 'span', 'stat', 'step', 'stop', 'tags', 'text',
-      'Text', 'time', 'type', 'view', 'warn', 'wrap', 'ZERO'];
+    'a', 'b', 'c', 'd', 'e', 'f', 'r', 'x', 'y', 'z', 'Q',
+    // 2-letter:
+    'ch', 'cx', 'cy', 'db', 'dx', 'dy', 'fr', 'fx', 'fy', 'go', 'id', 'k1',
+    'k2', 'k3', 'k4', 'r1', 'r2', 'rx', 'ry', 'x1', 'x2', 'y1', 'y2',
+    // 3-letter:
+    'add', 'all', 'alt', 'arc', 'CCW', 'cmp', 'dir', 'end', 'get', 'in1',
+    'in2', 'INT', 'key', 'log', 'low', 'm11', 'm12', 'm13', 'm14', 'm21',
+    'm22', 'm23', 'm24', 'm31', 'm32', 'm33', 'm34', 'm41', 'm42', 'm43',
+    'm44', 'max', 'min', 'now', 'ONE', 'put', 'red', 'rel', 'rev', 'RGB',
+    'sdp', 'set', 'src', 'tag', 'top', 'uid', 'uri', 'url', 'URL',
+    // 4-letter:
+    'abbr', 'atob', 'Attr', 'axes', 'axis', 'back', 'BACK', 'beta', 'bias',
+    'Blob', 'blue', 'blur', 'BLUR', 'body', 'BOOL', 'BOTH', 'btoa', 'BYTE',
+    'cite', 'clip', 'code', 'cols', 'cues', 'data', 'DECR', 'DONE', 'face',
+    'file', 'File', 'fill', 'find', 'font', 'form', 'gain', 'hash', 'head',
+    'high', 'hint', 'host', 'href', 'HRTF', 'IDLE', 'INCR', 'info', 'INIT',
+    'isId', 'item', 'KEEP', 'kind', 'knee', 'lang', 'left', 'LESS', 'line',
+    'link', 'list', 'load', 'loop', 'mode', 'name', 'Node', 'None', 'NONE',
+    'only', 'open', 'OPEN', 'ping', 'play', 'port', 'rect', 'Rect', 'refX',
+    'refY', 'RGBA', 'root', 'rows', 'save', 'seed', 'seek', 'self', 'send',
+    'show', 'SINE', 'size', 'span', 'stat', 'step', 'stop', 'tags', 'text',
+    'Text', 'time', 'type', 'view', 'warn', 'wrap', 'ZERO'
+  ];
 
   void reserveBackendNames() {
     for (String name in _reservedNativeProperties) {
@@ -98,43 +100,89 @@
     // individually per program, but that would mean that the output of the
     // minifier was less stable from version to version of the program being
     // minified.
-    _populateSuggestedNames(
-        instanceScope,
-        const <String>[
-            r'$add', r'add$1', r'$and',
-            r'$or',
-            r'current', r'$shr', r'$eq', r'$ne',
-            r'$index', r'$indexSet',
-            r'$xor', r'clone$0',
-            r'iterator', r'length',
-            r'$lt', r'$gt', r'$le', r'$ge',
-            r'moveNext$0', r'node', r'on', r'$negate', r'push', r'self',
-            r'start', r'target', r'$shl', r'value', r'width', r'style',
-            r'noSuchMethod$1', r'$mul', r'$div', r'$sub', r'$not', r'$mod',
-            r'$tdiv', r'toString$0']);
+    _populateSuggestedNames(instanceScope, const <String>[
+      r'$add',
+      r'add$1',
+      r'$and',
+      r'$or',
+      r'current',
+      r'$shr',
+      r'$eq',
+      r'$ne',
+      r'$index',
+      r'$indexSet',
+      r'$xor',
+      r'clone$0',
+      r'iterator',
+      r'length',
+      r'$lt',
+      r'$gt',
+      r'$le',
+      r'$ge',
+      r'moveNext$0',
+      r'node',
+      r'on',
+      r'$negate',
+      r'push',
+      r'self',
+      r'start',
+      r'target',
+      r'$shl',
+      r'value',
+      r'width',
+      r'style',
+      r'noSuchMethod$1',
+      r'$mul',
+      r'$div',
+      r'$sub',
+      r'$not',
+      r'$mod',
+      r'$tdiv',
+      r'toString$0'
+    ]);
 
-    _populateSuggestedNames(
-        globalScope,
-        const <String>[
-            r'Object', 'wrapException', r'$eq', r'S', r'ioore',
-            r'UnsupportedError$', r'length', r'$sub',
-            r'$add', r'$gt', r'$ge', r'$lt', r'$le', r'add',
-            r'iae',
-            r'ArgumentError$', r'BoundClosure', r'Closure', r'StateError$',
-            r'getInterceptor', r'max', r'$mul',
-            r'Map', r'Key_Key', r'$div',
-            r'List_List$from',
-            r'LinkedHashMap_LinkedHashMap$_empty',
-            r'LinkedHashMap_LinkedHashMap$_literal',
-            r'min',
-            r'RangeError$value', r'JSString', r'JSNumber',
-            r'JSArray', r'createInvocationMirror', r'String',
-            r'setRuntimeTypeInfo', r'createRuntimeType'
-            ]);
+    _populateSuggestedNames(globalScope, const <String>[
+      r'Object',
+      'wrapException',
+      r'$eq',
+      r'S',
+      r'ioore',
+      r'UnsupportedError$',
+      r'length',
+      r'$sub',
+      r'$add',
+      r'$gt',
+      r'$ge',
+      r'$lt',
+      r'$le',
+      r'add',
+      r'iae',
+      r'ArgumentError$',
+      r'BoundClosure',
+      r'Closure',
+      r'StateError$',
+      r'getInterceptor',
+      r'max',
+      r'$mul',
+      r'Map',
+      r'Key_Key',
+      r'$div',
+      r'List_List$from',
+      r'LinkedHashMap_LinkedHashMap$_empty',
+      r'LinkedHashMap_LinkedHashMap$_literal',
+      r'min',
+      r'RangeError$value',
+      r'JSString',
+      r'JSNumber',
+      r'JSArray',
+      r'createInvocationMirror',
+      r'String',
+      r'setRuntimeTypeInfo',
+      r'createRuntimeType'
+    ]);
   }
 
-  void _populateSuggestedNames(NamingScope scope,
-                               List<String> suggestions) {
+  void _populateSuggestedNames(NamingScope scope, List<String> suggestions) {
     int c = $a - 1;
     String letter;
     for (String name in suggestions) {
@@ -148,7 +196,6 @@
     }
   }
 
-
   // This gets a minified name based on a hash of the proposed name.  This
   // is slightly less efficient than just getting the next name in a series,
   // but it means that small changes in the input program will give smallish
@@ -156,7 +203,7 @@
   String _getUnusedName(String proposedName, NamingScope scope) {
     int hash = _calculateHash(proposedName);
     // Avoid very small hashes that won't try many names.
-    hash = hash < 1000 ? hash * 314159 : hash;  // Yes, it's prime.
+    hash = hash < 1000 ? hash * 314159 : hash; // Yes, it's prime.
 
     // Try other n-character names based on the hash.  We try one to three
     // character identifiers.  For each length we try around 10 different names
@@ -275,16 +322,16 @@
         _startIndex = 0,
         _constructors = cls.constructors.toList(growable: false);
 
-  _ConstructorBodyNamingScope.forClass(ClassElement cls,
-                                       _ConstructorBodyNamingScope superScope)
+  _ConstructorBodyNamingScope.forClass(
+      ClassElement cls, _ConstructorBodyNamingScope superScope)
       : _superScope = superScope,
         _startIndex = superScope._startIndex + superScope.numberOfConstructors,
         _constructors = cls.constructors.toList(growable: false);
 
   // Mixin Applications have constructors but we never generate code for them,
   // so they do not count in the inheritance chain.
-  _ConstructorBodyNamingScope.forMixinApplication(ClassElement cls,
-      _ConstructorBodyNamingScope superScope)
+  _ConstructorBodyNamingScope.forMixinApplication(
+      ClassElement cls, _ConstructorBodyNamingScope superScope)
       : _superScope = superScope,
         _startIndex = superScope._startIndex + superScope.numberOfConstructors,
         _constructors = const [];
@@ -295,11 +342,11 @@
       if (cls.superclass == null) {
         return new _ConstructorBodyNamingScope.rootScope(cls);
       } else if (cls.isMixinApplication) {
-        return new _ConstructorBodyNamingScope.forMixinApplication(cls,
-            new _ConstructorBodyNamingScope(cls.superclass, registry));
+        return new _ConstructorBodyNamingScope.forMixinApplication(
+            cls, new _ConstructorBodyNamingScope(cls.superclass, registry));
       } else {
-        return new _ConstructorBodyNamingScope.forClass(cls,
-            new _ConstructorBodyNamingScope(cls.superclass, registry));
+        return new _ConstructorBodyNamingScope.forClass(
+            cls, new _ConstructorBodyNamingScope(cls.superclass, registry));
       }
     });
   }
@@ -317,12 +364,11 @@
 
   @override
   jsAst.Name constructorBodyName(FunctionElement method) {
-    _ConstructorBodyNamingScope scope =
-        new _ConstructorBodyNamingScope(method.enclosingClass,
-                                        _constructorBodyScopes);
+    _ConstructorBodyNamingScope scope = new _ConstructorBodyNamingScope(
+        method.enclosingClass, _constructorBodyScopes);
     String key = scope.constructorBodyKeyFor(method);
-    return _disambiguateMemberByKey(key,
-        () => _proposeNameForConstructorBody(method));
+    return _disambiguateMemberByKey(
+        key, () => _proposeNameForConstructorBody(method));
   }
 }
 
@@ -330,20 +376,18 @@
   /// Property name used for the one-shot interceptor method for the given
   /// [selector] and return-type specialization.
   @override
-  jsAst.Name nameForGetOneShotInterceptor(Selector selector,
-      Iterable<ClassElement> classes) {
+  jsAst.Name nameForGetOneShotInterceptor(
+      Selector selector, Iterable<ClassElement> classes) {
     String root = selector.isOperator
         ? operatorNameToIdentifier(selector.name)
         : privateName(selector.memberName);
-    String prefix = selector.isGetter
-        ? r"$get"
-        : selector.isSetter ? r"$set" : "";
-    String callSuffix =
-        selector.isCall ? callSuffixForStructure(selector.callStructure).join()
-                        : "";
+    String prefix =
+        selector.isGetter ? r"$get" : selector.isSetter ? r"$set" : "";
+    String callSuffix = selector.isCall
+        ? callSuffixForStructure(selector.callStructure).join()
+        : "";
     String suffix = suffixForGetInterceptor(classes);
     String fullName = "\$intercepted$prefix\$$root$callSuffix\$$suffix";
     return _disambiguateInternalGlobal(fullName);
   }
 }
-
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 7ffe502..70d7eb7 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -102,7 +102,6 @@
  * must be disambiguated elsewhere.
  */
 class Namer {
-
   static const List<String> javaScriptKeywords = const <String>[
     // These are current keywords.
     "break", "delete", "function", "return", "typeof", "case", "do", "if",
@@ -118,13 +117,13 @@
     "long", "short", "volatile"
   ];
 
-  static const List<String> reservedPropertySymbols =
-      const <String>[
-        "__proto__", "prototype", "constructor", "call",
-        // "use strict" disallows the use of "arguments" and "eval" as
-        // variable names or property names. See ECMA-262, Edition 5.1,
-        // section 11.1.5 (for the property names).
-        "eval", "arguments"];
+  static const List<String> reservedPropertySymbols = const <String>[
+    "__proto__", "prototype", "constructor", "call",
+    // "use strict" disallows the use of "arguments" and "eval" as
+    // variable names or property names. See ECMA-262, Edition 5.1,
+    // section 11.1.5 (for the property names).
+    "eval", "arguments"
+  ];
 
   // Symbols that we might be using in our JS snippets.
   static const List<String> reservedGlobalSymbols = const <String>[
@@ -251,48 +250,49 @@
   ];
 
   static const List<String> reservedGlobalObjectNames = const <String>[
-      "A",
-      "B",
-      "C", // Global object for *C*onstants.
-      "D",
-      "E",
-      "F",
-      "G",
-      "H", // Global object for internal (*H*elper) libraries.
-      // I is used for used for the Isolate function.
-      "J", // Global object for the interceptor library.
-      "K",
-      "L",
-      "M",
-      "N",
-      "O",
-      "P", // Global object for other *P*latform libraries.
-      "Q",
-      "R",
-      "S",
-      "T",
-      "U",
-      "V",
-      "W", // Global object for *W*eb libraries (dart:html).
-      "X",
-      "Y",
-      "Z",
+    "A",
+    "B",
+    "C", // Global object for *C*onstants.
+    "D",
+    "E",
+    "F",
+    "G",
+    "H", // Global object for internal (*H*elper) libraries.
+    // I is used for used for the Isolate function.
+    "J", // Global object for the interceptor library.
+    "K",
+    "L",
+    "M",
+    "N",
+    "O",
+    "P", // Global object for other *P*latform libraries.
+    "Q",
+    "R",
+    "S",
+    "T",
+    "U",
+    "V",
+    "W", // Global object for *W*eb libraries (dart:html).
+    "X",
+    "Y",
+    "Z",
   ];
 
   static const List<String> reservedGlobalHelperFunctions = const <String>[
-      "init",
-      "Isolate",
+    "init",
+    "Isolate",
   ];
 
   static final List<String> userGlobalObjects =
       new List.from(reservedGlobalObjectNames)
-      ..remove('C')
-      ..remove('H')
-      ..remove('J')
-      ..remove('P')
-      ..remove('W');
+        ..remove('C')
+        ..remove('H')
+        ..remove('J')
+        ..remove('P')
+        ..remove('W');
 
   Set<String> _jsReserved = null;
+
   /// Names that cannot be used by members, top level and static
   /// methods.
   Set<String> get jsReserved {
@@ -305,6 +305,7 @@
   }
 
   Set<String> _jsVariableReserved = null;
+
   /// Names that cannot be used by local variables and parameters.
   Set<String> get jsVariableReserved {
     if (_jsVariableReserved == null) {
@@ -456,33 +457,48 @@
   bool get shouldMinify => false;
 
   NamingScope _getPrivateScopeFor(PrivatelyNamedJSEntity entity) {
-    return _privateNamingScopes.putIfAbsent(entity.rootOfScope,
-                                            () => new NamingScope());
+    return _privateNamingScopes.putIfAbsent(
+        entity.rootOfScope, () => new NamingScope());
   }
 
   /// Returns the string that is to be used as the result of a call to
   /// [JS_GET_NAME] at [node] with argument [name].
   jsAst.Name getNameForJsGetName(Node node, JsGetName name) {
     switch (name) {
-      case JsGetName.GETTER_PREFIX: return asName(getterPrefix);
-      case JsGetName.SETTER_PREFIX: return asName(setterPrefix);
-      case JsGetName.CALL_PREFIX: return asName(callPrefix);
-      case JsGetName.CALL_PREFIX0: return asName('${callPrefix}\$0');
-      case JsGetName.CALL_PREFIX1: return asName('${callPrefix}\$1');
-      case JsGetName.CALL_PREFIX2: return asName('${callPrefix}\$2');
-      case JsGetName.CALL_PREFIX3: return asName('${callPrefix}\$3');
-      case JsGetName.CALL_CATCH_ALL: return asName(callCatchAllName);
-      case JsGetName.REFLECTABLE: return asName(reflectableField);
+      case JsGetName.GETTER_PREFIX:
+        return asName(getterPrefix);
+      case JsGetName.SETTER_PREFIX:
+        return asName(setterPrefix);
+      case JsGetName.CALL_PREFIX:
+        return asName(callPrefix);
+      case JsGetName.CALL_PREFIX0:
+        return asName('${callPrefix}\$0');
+      case JsGetName.CALL_PREFIX1:
+        return asName('${callPrefix}\$1');
+      case JsGetName.CALL_PREFIX2:
+        return asName('${callPrefix}\$2');
+      case JsGetName.CALL_PREFIX3:
+        return asName('${callPrefix}\$3');
+      case JsGetName.CALL_CATCH_ALL:
+        return asName(callCatchAllName);
+      case JsGetName.REFLECTABLE:
+        return asName(reflectableField);
       case JsGetName.CLASS_DESCRIPTOR_PROPERTY:
         return asName(classDescriptorProperty);
       case JsGetName.REQUIRED_PARAMETER_PROPERTY:
         return asName(requiredParameterField);
-      case JsGetName.DEFAULT_VALUES_PROPERTY: return asName(defaultValuesField);
-      case JsGetName.CALL_NAME_PROPERTY: return asName(callNameField);
-      case JsGetName.DEFERRED_ACTION_PROPERTY: return asName(deferredAction);
-      case JsGetName.OPERATOR_AS_PREFIX: return asName(operatorAsPrefix);
-      case JsGetName.SIGNATURE_NAME: return asName(operatorSignature);
-      case JsGetName.TYPEDEF_TAG: return asName(typedefTag);
+      case JsGetName.DEFAULT_VALUES_PROPERTY:
+        return asName(defaultValuesField);
+      case JsGetName.CALL_NAME_PROPERTY:
+        return asName(callNameField);
+      case JsGetName.DEFERRED_ACTION_PROPERTY:
+        return asName(deferredAction);
+      case JsGetName.OPERATOR_AS_PREFIX:
+        return asName(operatorAsPrefix);
+      case JsGetName.SIGNATURE_NAME:
+        return asName(operatorSignature);
+      case JsGetName.TYPEDEF_TAG:
+        return asName(typedefTag);
       case JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG:
         return asName(functionTypeVoidReturnTag);
       case JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG:
@@ -502,10 +518,8 @@
       case JsGetName.FUNCTION_CLASS_TYPE_NAME:
         return runtimeTypeName(coreClasses.functionClass);
       default:
-        reporter.reportErrorMessage(
-          node,
-          MessageKind.GENERIC,
-          {'text': 'Error: Namer has no name for "$name".'});
+        reporter.reportErrorMessage(node, MessageKind.GENERIC,
+            {'text': 'Error: Namer has no name for "$name".'});
         return asName('BROKEN');
     }
   }
@@ -539,8 +553,8 @@
   String constantLongName(ConstantValue constant) {
     String longName = constantLongNames[constant];
     if (longName == null) {
-      longName = new ConstantNamingVisitor(compiler, constantHasher)
-          .getName(constant);
+      longName =
+          new ConstantNamingVisitor(compiler, constantHasher).getName(constant);
       constantLongNames[constant] = longName;
     }
     return longName;
@@ -611,8 +625,8 @@
 
   /// Name for a constructor body.
   jsAst.Name constructorBodyName(FunctionElement ctor) {
-    return _disambiguateInternalMember(ctor,
-        () => _proposeNameForConstructorBody(ctor));
+    return _disambiguateInternalMember(
+        ctor, () => _proposeNameForConstructorBody(ctor));
   }
 
   /// Annotated name for [method] encoding arity and named parameters.
@@ -625,8 +639,7 @@
 
   String _jsNameHelper(Element e) {
     String jsInteropName = backend.nativeData.getJsInteropName(e);
-    if (jsInteropName != null && jsInteropName.isNotEmpty)
-      return jsInteropName;
+    if (jsInteropName != null && jsInteropName.isNotEmpty) return jsInteropName;
     return e.isLibrary ? 'self' : e.name;
   }
 
@@ -694,13 +707,11 @@
   jsAst.Name invocationName(Selector selector) {
     switch (selector.kind) {
       case SelectorKind.GETTER:
-        jsAst.Name disambiguatedName =
-            _disambiguateMember(selector.memberName);
+        jsAst.Name disambiguatedName = _disambiguateMember(selector.memberName);
         return deriveGetterName(disambiguatedName);
 
       case SelectorKind.SETTER:
-        jsAst.Name disambiguatedName =
-            _disambiguateMember(selector.memberName);
+        jsAst.Name disambiguatedName = _disambiguateMember(selector.memberName);
         return deriveSetterName(disambiguatedName);
 
       case SelectorKind.OPERATOR:
@@ -721,8 +732,7 @@
         return disambiguatedName; // Methods other than call are not annotated.
 
       default:
-        reporter.internalError(
-            CURRENT_ELEMENT_SPANNABLE,
+        reporter.internalError(CURRENT_ELEMENT_SPANNABLE,
             'Unexpected selector kind: ${selector.kind}');
         return null;
     }
@@ -731,8 +741,8 @@
   /**
    * Returns the internal name used for an invocation mirror of this selector.
    */
-  jsAst.Name invocationMirrorInternalName(Selector selector)
-      => invocationName(selector);
+  jsAst.Name invocationMirrorInternalName(Selector selector) =>
+      invocationName(selector);
 
   /**
    * Returns the disambiguated name for the given field, used for constructing
@@ -793,8 +803,8 @@
     // apply. So we can directly grab a name.
     Entity asEntity = element;
     if (asEntity is JSEntity) {
-      return _disambiguateInternalMember(element,
-                                         () => asEntity.declaredEntity.name);
+      return _disambiguateInternalMember(
+          element, () => asEntity.declaredEntity.name);
     }
 
     // If the name of the field might clash with another field,
@@ -825,7 +835,7 @@
   /// True if [class_] is a non-native class that inherits from a native class.
   bool _isUserClassExtendingNative(ClassElement class_) {
     return !backend.isNative(class_) &&
-           backend.isNativeOrExtendsNative(class_.superclass);
+        backend.isNativeOrExtendsNative(class_.superclass);
   }
 
   /// Annotated name for the setter of [element].
@@ -901,7 +911,7 @@
       int counter = 0;
       String key = keyBase;
       while (_libraryKeys.values.contains(key)) {
-        key ="$keyBase${counter++}";
+        key = "$keyBase${counter++}";
       }
       return key;
     });
@@ -940,11 +950,10 @@
   /// to the ([originalName], [suffixes]) pair within the instance-member
   /// namespace.
   jsAst.Name _disambiguateMember(Name originalName,
-                                 [List<String> suffixes = const []]) {
+      [List<String> suffixes = const []]) {
     // Build a string encoding the library name, if the name is private.
-    String libraryKey = originalName.isPrivate
-            ? _generateLibraryKey(originalName.library)
-            : '';
+    String libraryKey =
+        originalName.isPrivate ? _generateLibraryKey(originalName.library) : '';
 
     // In the unique key, separate the name parts by '@'.
     // This avoids clashes since the original names cannot contain that symbol.
@@ -958,7 +967,7 @@
         proposedName += r'$' + suffixes.join(r'$');
       }
       newName = getFreshName(instanceScope, proposedName,
-                             sanitizeForAnnotations: true);
+          sanitizeForAnnotations: true);
       userInstanceMembers[key] = newName;
     }
     return _newReference(newName);
@@ -980,8 +989,7 @@
     jsAst.Name newName = userInstanceMembers[key];
     if (newName == null) {
       String name = proposeName();
-      newName = getFreshName(instanceScope, name,
-                             sanitizeForAnnotations: true);
+      newName = getFreshName(instanceScope, name, sanitizeForAnnotations: true);
       userInstanceMembers[key] = newName;
     }
     return _newReference(newName);
@@ -995,8 +1003,7 @@
   ///
   /// Using [_disambiguateMember] with the given [originalName] and no suffixes
   /// will subsequently return [disambiguatedName].
-  void reservePublicMemberName(String originalName,
-                               String disambiguatedName) {
+  void reservePublicMemberName(String originalName, String disambiguatedName) {
     // Build a key that corresponds to the one built in disambiguateMember.
     String libraryPrefix = ''; // Public names have an empty library prefix.
     String suffix = ''; // We don't need any suffixes.
@@ -1013,8 +1020,8 @@
   /// constructor bodies, and super-accessors.
   ///
   /// The resulting name is unique within the instance-member namespace.
-  jsAst.Name _disambiguateInternalMember(Element element,
-                                         String proposeName()) {
+  jsAst.Name _disambiguateInternalMember(
+      Element element, String proposeName()) {
     jsAst.Name newName = internalInstanceMembers[element];
     if (newName == null) {
       String name = proposeName();
@@ -1023,15 +1030,13 @@
       if (asEntity is PrivatelyNamedJSEntity) {
         NamingScope scope = _getPrivateScopeFor(asEntity);
         newName = getFreshName(scope, name,
-                               sanitizeForAnnotations: true,
-                               sanitizeForNatives: false);
+            sanitizeForAnnotations: true, sanitizeForNatives: false);
         internalInstanceMembers[element] = newName;
       } else {
         bool mayClashNative =
             _isUserClassExtendingNative(element.enclosingClass);
         newName = getFreshName(instanceScope, name,
-                               sanitizeForAnnotations: true,
-                               sanitizeForNatives: mayClashNative);
+            sanitizeForAnnotations: true, sanitizeForNatives: mayClashNative);
         internalInstanceMembers[element] = newName;
       }
     }
@@ -1053,10 +1058,8 @@
     return _newReference(newName);
   }
 
-  String _generateFreshStringForName(String proposedName,
-      NamingScope scope,
-      {bool sanitizeForAnnotations: false,
-       bool sanitizeForNatives: false}) {
+  String _generateFreshStringForName(String proposedName, NamingScope scope,
+      {bool sanitizeForAnnotations: false, bool sanitizeForNatives: false}) {
     if (sanitizeForAnnotations) {
       proposedName = _sanitizeForAnnotations(proposedName);
     }
@@ -1092,16 +1095,11 @@
   ///
   /// Note that [MinifyNamer] overrides this method with one that produces
   /// minified names.
-  jsAst.Name getFreshName(NamingScope scope,
-                          String proposedName,
-                          {bool sanitizeForAnnotations: false,
-                           bool sanitizeForNatives: false}) {
-    String candidate =
-        _generateFreshStringForName(proposedName,
-                                    scope,
-                                    sanitizeForAnnotations:
-                                        sanitizeForAnnotations,
-                                    sanitizeForNatives: sanitizeForNatives);
+  jsAst.Name getFreshName(NamingScope scope, String proposedName,
+      {bool sanitizeForAnnotations: false, bool sanitizeForNatives: false}) {
+    String candidate = _generateFreshStringForName(proposedName, scope,
+        sanitizeForAnnotations: sanitizeForAnnotations,
+        sanitizeForNatives: sanitizeForNatives);
     return new StringBackedName(candidate);
   }
 
@@ -1152,7 +1150,7 @@
     String name;
     if (element.isGenerativeConstructor) {
       name = "${element.enclosingClass.name}\$"
-             "${element.name}";
+          "${element.name}";
     } else if (element.isFactoryConstructor) {
       // TODO(johnniwinther): Change factory name encoding as to not include
       // the class-name twice.
@@ -1162,7 +1160,7 @@
       if (element.isClassMember) {
         ClassElement enclosingClass = element.enclosingClass;
         name = "${enclosingClass.name}_"
-               "${element.name}";
+            "${element.name}";
       } else {
         name = element.name.replaceAll('+', '_');
       }
@@ -1184,14 +1182,15 @@
       if (!IDENTIFIER.hasMatch(name)) {
         name = name.replaceAllMapped(NON_IDENTIFIER_CHAR,
             (match) => match[0].codeUnitAt(0).toRadixString(16));
-        if (!IDENTIFIER.hasMatch(name)) {  // e.g. starts with digit.
+        if (!IDENTIFIER.hasMatch(name)) {
+          // e.g. starts with digit.
           name = 'lib_$name';
         }
       }
       // Names constructed based on a libary name will be further disambiguated.
       // However, as names from the same libary should have the same libary
       // name part, we disambiguate the library name here.
-      String disambiguated  = name;
+      String disambiguated = name;
       for (int c = 0; libraryLongNames.containsValue(disambiguated); c++) {
         disambiguated = "$name$c";
       }
@@ -1248,8 +1247,8 @@
 
   /// Property name used for the one-shot interceptor method for the given
   /// [selector] and return-type specialization.
-  jsAst.Name nameForGetOneShotInterceptor(Selector selector,
-                                          Iterable<ClassElement> classes) {
+  jsAst.Name nameForGetOneShotInterceptor(
+      Selector selector, Iterable<ClassElement> classes) {
     // The one-shot name is a global name derived from the invocation name.  To
     // avoid instability we would like the names to be unique and not clash with
     // other global names.
@@ -1264,8 +1263,8 @@
       return new CompoundName([root, _literalDollar]);
     } else {
       String suffix = suffixForGetInterceptor(classes);
-      return new CompoundName([root, _literalDollar,
-                               new StringBackedName(suffix)]);
+      return new CompoundName(
+          [root, _literalDollar, new StringBackedName(suffix)]);
     }
   }
 
@@ -1354,11 +1353,11 @@
         // other elements, such as bound closures also live in
         // [staticStateHolder].
         !element.isAccessor &&
-        !element.isClass &&
-        !element.isTypedef &&
-        !element.isConstructor &&
-        !element.isFunction &&
-        !element.isLibrary;
+            !element.isClass &&
+            !element.isTypedef &&
+            !element.isConstructor &&
+            !element.isFunction &&
+            !element.isLibrary;
   }
 
   /// Returns [staticStateHolder] or one of [reservedGlobalObjectNames].
@@ -1389,8 +1388,8 @@
 
   jsAst.Name staticClosureName(Element element) {
     assert(Elements.isStaticOrTopLevelFunction(element));
-    String enclosing = element.enclosingClass == null
-        ? "" : element.enclosingClass.name;
+    String enclosing =
+        element.enclosingClass == null ? "" : element.enclosingClass.name;
     String library = _proposeNameForGlobal(element.library);
     return _disambiguateInternalGlobal(
         "${library}_${enclosing}_${element.name}\$closure");
@@ -1440,17 +1439,19 @@
   jsAst.Name operatorIsType(DartType type) {
     if (type.isFunctionType) {
       // TODO(erikcorry): Reduce from $isx to ix when we are minifying.
-      return new CompoundName([new StringBackedName(operatorIsPrefix),
-                               _literalUnderscore,
-                               getFunctionTypeName(type)]);
+      return new CompoundName([
+        new StringBackedName(operatorIsPrefix),
+        _literalUnderscore,
+        getFunctionTypeName(type)
+      ]);
     }
     return operatorIs(type.element);
   }
 
   jsAst.Name operatorIs(ClassElement element) {
     // TODO(erikcorry): Reduce from $isx to ix when we are minifying.
-    return new CompoundName([new StringBackedName(operatorIsPrefix),
-                             runtimeTypeName(element)]);
+    return new CompoundName(
+        [new StringBackedName(operatorIsPrefix), runtimeTypeName(element)]);
   }
 
   /// Returns a name that does not clash with reserved JS keywords.
@@ -1463,8 +1464,8 @@
   }
 
   jsAst.Name substitutionName(Element element) {
-    return new CompoundName([new StringBackedName(operatorAsPrefix),
-                             runtimeTypeName(element)]);
+    return new CompoundName(
+        [new StringBackedName(operatorAsPrefix), runtimeTypeName(element)]);
   }
 
   /// Translates a [String] into the corresponding [Name] data structure as
@@ -1475,13 +1476,11 @@
   jsAst.Name asName(String name) {
     if (name.startsWith(getterPrefix) && name.length > getterPrefix.length) {
       return new GetterName(_literalGetterPrefix,
-                           new StringBackedName(
-                               name.substring(getterPrefix.length)));
+          new StringBackedName(name.substring(getterPrefix.length)));
     }
     if (name.startsWith(setterPrefix) && name.length > setterPrefix.length) {
       return new GetterName(_literalSetterPrefix,
-                            new StringBackedName(
-                                name.substring(setterPrefix.length)));
+          new StringBackedName(name.substring(setterPrefix.length)));
     }
 
     return new StringBackedName(name);
@@ -1589,7 +1588,6 @@
  *
  */
 class ConstantNamingVisitor implements ConstantValueVisitor {
-
   static final RegExp IDENTIFIER = new RegExp(r'^[A-Za-z_$][A-Za-z0-9_$]*$');
   static const MAX_FRAGMENTS = 5;
   static const MAX_EXTRA_LENGTH = 30;
@@ -1598,8 +1596,8 @@
   final Compiler compiler;
   final ConstantCanonicalHasher hasher;
 
-  String root = null;     // First word, usually a type name.
-  bool failed = false;    // Failed to generate something pretty.
+  String root = null; // First word, usually a type name.
+  bool failed = false; // Failed to generate something pretty.
   List<String> fragments = <String>[];
   int length = 0;
 
@@ -1623,8 +1621,8 @@
     StringBuffer sb = new StringBuffer();
     for (int i = 0; i < length; i++) {
       int digit = hash % 62;
-      sb.write('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
-          [digit]);
+      sb.write('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'[
+          digit]);
       hash ~/= 62;
       if (hash == 0) break;
     }
@@ -1742,7 +1740,8 @@
     addRoot('Type');
     DartType type = constant.representedType;
     String name = type.element?.name;
-    if (name == null) {  // e.g. DartType 'dynamic' has no element.
+    if (name == null) {
+      // e.g. DartType 'dynamic' has no element.
       JavaScriptBackend backend = compiler.backend;
       name = backend.rtiEncoder.getTypeRepresentationForTypeConstant(type);
     }
@@ -1769,8 +1768,8 @@
         add('name');
         break;
       default:
-        reporter.internalError(CURRENT_ELEMENT_SPANNABLE,
-                               "Unexpected SyntheticConstantValue");
+        reporter.internalError(
+            CURRENT_ELEMENT_SPANNABLE, "Unexpected SyntheticConstantValue");
     }
   }
 
@@ -1789,11 +1788,9 @@
  * their hashCodes.
  */
 class ConstantCanonicalHasher implements ConstantValueVisitor<int, Null> {
-
   static const _MASK = 0x1fffffff;
   static const _UINT32_LIMIT = 4 * 1024 * 1024 * 1024;
 
-
   final Compiler compiler;
   final Map<ConstantValue, int> hashes = new Map<ConstantValue, int>();
 
@@ -1926,7 +1923,8 @@
   static int _hashDouble(double value) {
     double magnitude = value.abs();
     int sign = value < 0 ? 1 : 0;
-    if (magnitude < _UINT32_LIMIT) {  // 2^32
+    if (magnitude < _UINT32_LIMIT) {
+      // 2^32
       int intValue = value.toInt();
       // Integer valued doubles in 32-bit range hash to the same values as ints.
       int hash = _hashInt(intValue);
@@ -1964,7 +1962,7 @@
   }
 
   static int _finish(int hash) {
-    hash = _MASK & (hash + (((_MASK >> 3) & hash) <<  3));
+    hash = _MASK & (hash + (((_MASK >> 3) & hash) << 3));
     hash = hash & (hash >> 11);
     return _MASK & (hash + (((_MASK >> 15) & hash) << 15));
   }
@@ -2004,7 +2002,7 @@
       visit(parameter);
     }
     bool first = false;
-    for (DartType parameter in  type.optionalParameterTypes) {
+    for (DartType parameter in type.optionalParameterTypes) {
       if (!first) {
         sb.write('_');
       }
@@ -2026,7 +2024,6 @@
   }
 }
 
-
 class NamingScope {
   /// Maps proposed names to *suggested* disambiguated names.
   ///
@@ -2047,6 +2044,7 @@
     assert(!_suggestedNames.containsKey(original));
     _suggestedNames[original] = suggestion;
   }
+
   bool hasSuggestion(String original) => _suggestedNames.containsKey(original);
   bool isSuggestion(String candidate) {
     return _suggestedNames.containsValue(candidate);
diff --git a/pkg/compiler/lib/src/js_backend/namer_names.dart b/pkg/compiler/lib/src/js_backend/namer_names.dart
index 31a1747..4baffb5 100644
--- a/pkg/compiler/lib/src/js_backend/namer_names.dart
+++ b/pkg/compiler/lib/src/js_backend/namer_names.dart
@@ -16,14 +16,7 @@
   }
 }
 
-enum _NamerNameKinds {
-  StringBacked,
-  Getter,
-  Setter,
-  Async,
-  Compound,
-  Token
-}
+enum _NamerNameKinds { StringBacked, Getter, Setter, Async, Compound, Token }
 
 class StringBackedName extends _NamerName {
   final String name;
@@ -33,7 +26,7 @@
 
   String get key => name;
 
-  operator==(other) {
+  operator ==(other) {
     if (other is _NameReference) other = other._target;
     if (identical(this, other)) return true;
     return (other is StringBackedName) && other.name == name;
@@ -61,7 +54,7 @@
 
   String get key => prefix.key + base.key;
 
-  bool operator==(other) {
+  bool operator ==(other) {
     if (other is _NameReference) other = other._target;
     if (identical(this, other)) return true;
     if (other is! _PrefixedName) return false;
@@ -125,7 +118,7 @@
 
   String get key => _parts.map((_NamerName name) => name.key).join();
 
-  bool operator==(other) {
+  bool operator ==(other) {
     if (other is _NameReference) other = other._target;
     if (identical(this, other)) return true;
     if (other is! CompoundName) return false;
@@ -188,7 +181,7 @@
   markSeen(jsAst.TokenCounter counter) => _rc++;
 
   @override
-  bool operator==(other) {
+  bool operator ==(other) {
     if (other is _NameReference) other = other._target;
     if (identical(this, other)) return true;
     return false;
@@ -220,8 +213,8 @@
   int compareTo(_NamerName other) => _target.compareTo(other);
 
   @override
-  bool operator==(other) => _target == other;
+  bool operator ==(other) => _target == other;
 
   @override
   int get hashCode => _target.hashCode;
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/js_backend/native_data.dart b/pkg/compiler/lib/src/js_backend/native_data.dart
index 1929548..49a207d 100644
--- a/pkg/compiler/lib/src/js_backend/native_data.dart
+++ b/pkg/compiler/lib/src/js_backend/native_data.dart
@@ -5,11 +5,8 @@
 library js_backend.native_data;
 
 import '../common.dart';
-import '../elements/elements.dart' show
-    ClassElement,
-    Element,
-    FunctionElement,
-    MemberElement;
+import '../elements/elements.dart'
+    show ClassElement, Element, FunctionElement, MemberElement;
 
 /// Additional element information for native classes and methods and js-interop
 /// methods.
@@ -38,10 +35,9 @@
 
   /// Sets the explicit js interop [name] for [element].
   void setJsInteropName(Element element, String name) {
-    assert(invariant(element,
-        isJsInterop(element),
+    assert(invariant(element, isJsInterop(element),
         message:
-          'Element $element is not js interop but given a js interop name.'));
+            'Element $element is not js interop but given a js interop name.'));
     jsInteropNames[element.declaration] = name;
   }
 
@@ -77,8 +73,7 @@
 
   String _jsNameHelper(Element element) {
     String jsInteropName = jsInteropNames[element.declaration];
-    assert(invariant(element,
-        !(_isJsInterop(element) && jsInteropName == null),
+    assert(invariant(element, !(_isJsInterop(element) && jsInteropName == null),
         message:
             'Element $element is js interop but js interop name has not yet '
             'been computed.'));
@@ -121,13 +116,13 @@
     // TODO(johnniwinther): Avoid setting this more than once. The enqueuer
     // might enqueue [element] several times (before processing it) and computes
     // name on each call to `internalAddToWorkList`.
-    assert(invariant(element,
+    assert(invariant(
+        element,
         nativeMemberName[element.declaration] == null ||
-        nativeMemberName[element.declaration] == name,
-        message:
-          "Native member name set inconsistently on $element: "
-          "Existing name '${nativeMemberName[element.declaration]}', "
-          "new name '$name'."));
+            nativeMemberName[element.declaration] == name,
+        message: "Native member name set inconsistently on $element: "
+            "Existing name '${nativeMemberName[element.declaration]}', "
+            "new name '$name'."));
     nativeMemberName[element.declaration] = name;
   }
 
@@ -141,13 +136,13 @@
     // compiler copies pre-processed elements into a new compiler through
     // [Compiler.onLibraryScanned] and thereby causes multiple calls to this
     // method.
-    assert(invariant(cls,
+    assert(invariant(
+        cls,
         nativeClassTagInfo[cls.declaration] == null ||
-        nativeClassTagInfo[cls.declaration] == tagInfo,
-        message:
-          "Native tag info set inconsistently on $cls: "
-          "Existing tag info '${nativeClassTagInfo[cls.declaration]}', "
-          "new tag info '$tagInfo'."));
+            nativeClassTagInfo[cls.declaration] == tagInfo,
+        message: "Native tag info set inconsistently on $cls: "
+            "Existing tag info '${nativeClassTagInfo[cls.declaration]}', "
+            "new tag info '$tagInfo'."));
     nativeClassTagInfo[cls.declaration] = tagInfo;
   }
 
@@ -159,12 +154,13 @@
 
   /// Returns the list of non-directive native tag words for [cls].
   List<String> getNativeTagsOfClass(ClassElement cls) {
-    return getNativeTagsOfClassRaw(cls).where(
-        (s) => !s.startsWith('!')).toList();
+    return getNativeTagsOfClassRaw(cls)
+        .where((s) => !s.startsWith('!'))
+        .toList();
   }
 
   /// Returns `true` if [cls] has a `!nonleaf` tag word.
   bool hasNativeTagsForcedNonLeaf(ClassElement cls) {
     return getNativeTagsOfClassRaw(cls).contains('!nonleaf');
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
index 4db2387..4bc5384 100644
--- a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
+++ b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
@@ -44,15 +44,19 @@
 class NoSuchMethodRegistry {
   /// The implementations that fall into category A, described above.
   final Set<FunctionElement> defaultImpls = new Set<FunctionElement>();
+
   /// The implementations that fall into category B, described above.
   final Set<FunctionElement> throwingImpls = new Set<FunctionElement>();
+
   /// The implementations that fall into category C, described above.
   final Set<FunctionElement> notApplicableImpls = new Set<FunctionElement>();
+
   /// The implementations that fall into category D, described above.
   final Set<FunctionElement> otherImpls = new Set<FunctionElement>();
 
   /// The implementations that fall into category D1
   final Set<FunctionElement> complexNoReturnImpls = new Set<FunctionElement>();
+
   /// The implementations that fall into category D2
   final Set<FunctionElement> complexReturningImpls = new Set<FunctionElement>();
 
@@ -90,23 +94,20 @@
   /// Emits a diagnostic
   void emitDiagnostic() {
     throwingImpls.forEach((e) {
-        if (!_hasForwardingSyntax(e)) {
-          reporter.reportHintMessage(
-              e, MessageKind.DIRECTLY_THROWING_NSM);
-        }
-      });
+      if (!_hasForwardingSyntax(e)) {
+        reporter.reportHintMessage(e, MessageKind.DIRECTLY_THROWING_NSM);
+      }
+    });
     complexNoReturnImpls.forEach((e) {
-        if (!_hasForwardingSyntax(e)) {
-          reporter.reportHintMessage(
-              e, MessageKind.COMPLEX_THROWING_NSM);
-        }
-      });
+      if (!_hasForwardingSyntax(e)) {
+        reporter.reportHintMessage(e, MessageKind.COMPLEX_THROWING_NSM);
+      }
+    });
     complexReturningImpls.forEach((e) {
-        if (!_hasForwardingSyntax(e)) {
-          reporter.reportHintMessage(
-              e, MessageKind.COMPLEX_RETURNING_NSM);
-        }
-      });
+      if (!_hasForwardingSyntax(e)) {
+        reporter.reportHintMessage(e, MessageKind.COMPLEX_RETURNING_NSM);
+      }
+    });
   }
 
   /// Returns [true] if the given element is a complex [noSuchMethod]
@@ -154,7 +155,7 @@
       Element superCall =
           element.enclosingClass.lookupSuperByName(Names.noSuchMethod_);
       NsmCategory category = _categorizeImpl(superCall);
-      switch(category) {
+      switch (category) {
         case NsmCategory.DEFAULT:
           defaultImpls.add(element);
           break;
@@ -183,9 +184,9 @@
 
   bool _isDefaultNoSuchMethodImplementation(FunctionElement element) {
     ClassElement classElement = element.enclosingClass;
-    return classElement == _compiler.coreClasses.objectClass
-        || classElement == _backend.helpers.jsInterceptorClass
-        || classElement == _backend.helpers.jsNullClass;
+    return classElement == _compiler.coreClasses.objectClass ||
+        classElement == _backend.helpers.jsInterceptorClass ||
+        classElement == _backend.helpers.jsNullClass;
   }
 
   bool _hasForwardingSyntax(FunctionElement element) {
@@ -240,9 +241,4 @@
   }
 }
 
-enum NsmCategory {
-  DEFAULT,
-  THROWING,
-  NOT_APPLICABLE,
-  OTHER,
-}
+enum NsmCategory { DEFAULT, THROWING, NOT_APPLICABLE, OTHER, }
diff --git a/pkg/compiler/lib/src/js_backend/patch_resolver.dart b/pkg/compiler/lib/src/js_backend/patch_resolver.dart
index 60573ed..521dd2d 100644
--- a/pkg/compiler/lib/src/js_backend/patch_resolver.dart
+++ b/pkg/compiler/lib/src/js_backend/patch_resolver.dart
@@ -5,12 +5,9 @@
 library dart2js.js_backend.patch_resolver;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Resolution;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
+import '../common/resolution.dart' show Resolution;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../elements/modelx.dart';
@@ -33,15 +30,13 @@
       element = patch;
     } else if (!compiler.backend.isJsInterop(element)) {
       reporter.reportErrorMessage(
-         element, MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION);
+          element, MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION);
     }
     return element;
   }
 
   void checkMatchingPatchParameters(FunctionElement origin,
-                                    List<Element> originParameters,
-                                    List<Element> patchParameters) {
-
+      List<Element> originParameters, List<Element> patchParameters) {
     assert(originParameters.length == patchParameters.length);
     for (int index = 0; index < originParameters.length; index++) {
       ParameterElementX originParameter = originParameters[index];
@@ -52,19 +47,19 @@
         originParameter.applyPatch(patchParameter);
       } else {
         assert(invariant(origin, originParameter.patch == patchParameter,
-               message: "Inconsistent repatch of $originParameter."));
+            message: "Inconsistent repatch of $originParameter."));
       }
       DartType originParameterType = originParameter.computeType(resolution);
       DartType patchParameterType = patchParameter.computeType(resolution);
       if (originParameterType != patchParameterType) {
         reporter.reportError(
             reporter.createMessage(
-                originParameter,
-                MessageKind.PATCH_PARAMETER_TYPE_MISMATCH,
-                {'methodName': origin.name,
-                 'parameterName': originParameter.name,
-                 'originParameterType': originParameterType,
-                 'patchParameterType': patchParameterType}),
+                originParameter, MessageKind.PATCH_PARAMETER_TYPE_MISMATCH, {
+              'methodName': origin.name,
+              'parameterName': originParameter.name,
+              'originParameterType': originParameterType,
+              'patchParameterType': patchParameterType
+            }),
             <DiagnosticMessage>[
               reporter.createMessage(
                   patchParameter,
@@ -83,28 +78,28 @@
         if (originParameterText != patchParameterText
             // We special case the list constructor because of the
             // optional parameter.
-            && origin != compiler.unnamedListConstructor) {
+            &&
+            origin != compiler.unnamedListConstructor) {
           reporter.reportError(
               reporter.createMessage(
-                  originParameter,
-                  MessageKind.PATCH_PARAMETER_MISMATCH,
-                  {'methodName': origin.name,
-                   'originParameter': originParameterText,
-                   'patchParameter': patchParameterText}),
+                  originParameter, MessageKind.PATCH_PARAMETER_MISMATCH, {
+                'methodName': origin.name,
+                'originParameter': originParameterText,
+                'patchParameter': patchParameterText
+              }),
               <DiagnosticMessage>[
-                  reporter.createMessage(
-                      patchParameter,
-                      MessageKind.PATCH_POINT_TO_PARAMETER,
-                      {'parameterName': patchParameter.name}),
+                reporter.createMessage(
+                    patchParameter,
+                    MessageKind.PATCH_POINT_TO_PARAMETER,
+                    {'parameterName': patchParameter.name}),
               ]);
-
         }
       }
     }
   }
 
-  void checkMatchingPatchSignatures(FunctionElement origin,
-                                    FunctionElement patch) {
+  void checkMatchingPatchSignatures(
+      FunctionElement origin, FunctionElement patch) {
     // TODO(johnniwinther): Show both origin and patch locations on errors.
     FunctionSignature originSignature = origin.functionSignature;
     FunctionExpression patchTree = patch.node;
@@ -115,26 +110,26 @@
         Node errorNode =
             patchTree.returnType != null ? patchTree.returnType : patchTree;
         reporter.reportErrorMessage(
-            errorNode, MessageKind.PATCH_RETURN_TYPE_MISMATCH,
-            {'methodName': origin.name,
-             'originReturnType': originSignature.type.returnType,
-             'patchReturnType': patchSignature.type.returnType});
+            errorNode, MessageKind.PATCH_RETURN_TYPE_MISMATCH, {
+          'methodName': origin.name,
+          'originReturnType': originSignature.type.returnType,
+          'patchReturnType': patchSignature.type.returnType
+        });
       });
     }
     if (originSignature.requiredParameterCount !=
         patchSignature.requiredParameterCount) {
       reporter.withCurrentElement(patch, () {
         reporter.reportErrorMessage(
-            patchTree,
-            MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH,
-            {'methodName': origin.name,
-             'originParameterCount': originSignature.requiredParameterCount,
-             'patchParameterCount': patchSignature.requiredParameterCount});
+            patchTree, MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH, {
+          'methodName': origin.name,
+          'originParameterCount': originSignature.requiredParameterCount,
+          'patchParameterCount': patchSignature.requiredParameterCount
+        });
       });
     } else {
-      checkMatchingPatchParameters(origin,
-                                   originSignature.requiredParameters,
-                                   patchSignature.requiredParameters);
+      checkMatchingPatchParameters(origin, originSignature.requiredParameters,
+          patchSignature.requiredParameters);
     }
     if (originSignature.optionalParameterCount != 0 &&
         patchSignature.optionalParameterCount != 0) {
@@ -152,17 +147,15 @@
         patchSignature.optionalParameterCount) {
       reporter.withCurrentElement(patch, () {
         reporter.reportErrorMessage(
-            patchTree,
-            MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH,
-            {'methodName': origin.name,
-             'originParameterCount': originSignature.optionalParameterCount,
-             'patchParameterCount': patchSignature.optionalParameterCount});
+            patchTree, MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH, {
+          'methodName': origin.name,
+          'originParameterCount': originSignature.optionalParameterCount,
+          'patchParameterCount': patchSignature.optionalParameterCount
+        });
       });
     } else {
-      checkMatchingPatchParameters(origin,
-                                   originSignature.optionalParameters,
-                                   patchSignature.optionalParameters);
+      checkMatchingPatchParameters(origin, originSignature.optionalParameters,
+          patchSignature.optionalParameters);
     }
   }
-
 }
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index 29aade6..036e52a 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -7,7 +7,8 @@
 /// For each class, stores the possible class subtype tests that could succeed.
 abstract class TypeChecks {
   /// Get the set of checks required for class [element].
-  Iterable<TypeCheck> operator[](ClassElement element);
+  Iterable<TypeCheck> operator [](ClassElement element);
+
   /// Get the iterable for all classes that need type checks.
   Iterable<ClassElement> get classes;
 }
@@ -28,24 +29,24 @@
 
   void registerClassUsingTypeVariableExpression(ClassElement cls);
   void registerRtiDependency(Element element, Element dependency);
-  void registerTypeVariableBoundsSubtypeCheck(DartType typeArgument,
-                                              DartType bound);
+  void registerTypeVariableBoundsSubtypeCheck(
+      DartType typeArgument, DartType bound);
 
-  Set<ClassElement> getClassesUsedInSubstitutions(JavaScriptBackend backend,
-                                                  TypeChecks checks);
+  Set<ClassElement> getClassesUsedInSubstitutions(
+      JavaScriptBackend backend, TypeChecks checks);
   void computeClassesNeedingRti();
 
   /// Compute the required type checkes and substitutions for the given
   /// instantitated and checked classes.
-  TypeChecks computeChecks(Set<ClassElement> instantiated,
-                           Set<ClassElement> checked);
+  TypeChecks computeChecks(
+      Set<ClassElement> instantiated, Set<ClassElement> checked);
 
   /// Compute type arguments of classes that use one of their type variables in
   /// is-checks and add the is-checks that they imply.
   ///
   /// This function must be called after all is-checks have been registered.
-  void addImplicitChecks(Universe universe,
-                         Iterable<ClassElement> classesUsingChecks);
+  void addImplicitChecks(
+      Universe universe, Iterable<ClassElement> classesUsingChecks);
 
   /// Return all classes that are referenced in the type of the function, i.e.,
   /// in the return type or the argument types.
@@ -73,8 +74,7 @@
   jsAst.Expression getSignatureEncoding(DartType type, jsAst.Expression this_);
 
   jsAst.Expression getSubstitutionRepresentation(
-        List<DartType> types,
-        OnVariableCallback onVariable);
+      List<DartType> types, OnVariableCallback onVariable);
   jsAst.Expression getSubstitutionCode(Substitution substitution);
   jsAst.Expression getSubstitutionCodeForVariable(
       Substitution substitution, int index);
@@ -89,9 +89,8 @@
   jsAst.Name get getFunctionThatReturnsNullName;
 
   jsAst.Expression getTypeRepresentation(
-        DartType type,
-        OnVariableCallback onVariable,
-        [ShouldEncodeTypedefCallback shouldEncodeTypedef]);
+      DartType type, OnVariableCallback onVariable,
+      [ShouldEncodeTypedefCallback shouldEncodeTypedef]);
   /**
    * Returns a [jsAst.Expression] representing the given [type]. Type
    * variables are replaced by placeholders in the ast.
@@ -100,8 +99,9 @@
    * This is useful if the returned [jsAst.Expression] is only part of a
    * larger template. By default, indexing starts with 0.
    */
-  jsAst.Expression getTypeRepresentationWithPlaceholders(DartType type,
-        OnVariableCallback onVariable, {int firstPlaceholderIndex : 0});
+  jsAst.Expression getTypeRepresentationWithPlaceholders(
+      DartType type, OnVariableCallback onVariable,
+      {int firstPlaceholderIndex: 0});
 
   String getTypeRepresentationForTypeConstant(DartType type);
 }
@@ -157,8 +157,8 @@
   }
 
   @override
-  void registerTypeVariableBoundsSubtypeCheck(DartType typeArgument,
-                                              DartType bound) {
+  void registerTypeVariableBoundsSubtypeCheck(
+      DartType typeArgument, DartType bound) {
     checkedTypeArguments.add(typeArgument);
     checkedBounds.add(bound);
   }
@@ -178,8 +178,8 @@
    * immutable datastructure.
    */
   @override
-  void addImplicitChecks(Universe universe,
-                         Iterable<ClassElement> classesUsingChecks) {
+  void addImplicitChecks(
+      Universe universe, Iterable<ClassElement> classesUsingChecks) {
     // If there are no classes that use their variables in checks, there is
     // nothing to do.
     if (classesUsingChecks.isEmpty) return;
@@ -293,10 +293,10 @@
               methodsNeedingRti.add(method);
             }
           }
-          compiler.resolverWorld.closuresWithFreeTypeVariables.forEach(
-              analyzeMethod);
-          compiler.resolverWorld.callMethodsWithFreeTypeVariables.forEach(
-              analyzeMethod);
+          compiler.resolverWorld.closuresWithFreeTypeVariables
+              .forEach(analyzeMethod);
+          compiler.resolverWorld.callMethodsWithFreeTypeVariables
+              .forEach(analyzeMethod);
         }
       }
     });
@@ -309,10 +309,10 @@
           methodsNeedingRti.add(method);
         }
       }
-      compiler.resolverWorld.closuresWithFreeTypeVariables.forEach(
-          analyzeMethod);
-      compiler.resolverWorld.callMethodsWithFreeTypeVariables.forEach(
-          analyzeMethod);
+      compiler.resolverWorld.closuresWithFreeTypeVariables
+          .forEach(analyzeMethod);
+      compiler.resolverWorld.callMethodsWithFreeTypeVariables
+          .forEach(analyzeMethod);
     }
     // Add the classes that need RTI because they use a type variable as
     // expression.
@@ -329,8 +329,8 @@
   }
 
   @override
-  TypeChecks computeChecks(Set<ClassElement> instantiated,
-                           Set<ClassElement> checked) {
+  TypeChecks computeChecks(
+      Set<ClassElement> instantiated, Set<ClassElement> checked) {
     // Run through the combination of instantiated and checked
     // arguments and record all combination where the element of a checked
     // argument is a superclass of the element of an instantiated type.
@@ -342,7 +342,7 @@
       // Find all supertypes of [element] in [checkedArguments] and add checks
       // and precompute the substitutions for them.
       assert(invariant(element, element.allSupertypes != null,
-             message: 'Supertypes have not been computed for $element.'));
+          message: 'Supertypes have not been computed for $element.'));
       for (DartType supertype in element.allSupertypes) {
         ClassElement superelement = supertype.element;
         if (checked.contains(superelement)) {
@@ -398,8 +398,8 @@
    * have a type check against this supertype that includes a check against
    * the type arguments.
    */
-  void computeInstantiatedArguments(Set<DartType> instantiatedTypes,
-                                    Set<DartType> isChecks) {
+  void computeInstantiatedArguments(
+      Set<DartType> instantiatedTypes, Set<DartType> isChecks) {
     ArgumentCollector superCollector = new ArgumentCollector(backend);
     ArgumentCollector directCollector = new ArgumentCollector(backend);
     FunctionArgumentCollector functionArgumentCollector =
@@ -416,7 +416,7 @@
     collectFunctionTypeArguments(checkedBounds);
 
     void collectTypeArguments(Iterable<DartType> types,
-                              {bool isTypeArgument: false}) {
+        {bool isTypeArgument: false}) {
       for (DartType type in types) {
         directCollector.collect(type, isTypeArgument: isTypeArgument);
         if (type.isInterfaceType) {
@@ -436,15 +436,15 @@
       }
     }
 
-    directlyInstantiatedArguments =
-        directCollector.classes..addAll(functionArgumentCollector.classes);
-    allInstantiatedArguments =
-        superCollector.classes..addAll(directlyInstantiatedArguments);
+    directlyInstantiatedArguments = directCollector.classes
+      ..addAll(functionArgumentCollector.classes);
+    allInstantiatedArguments = superCollector.classes
+      ..addAll(directlyInstantiatedArguments);
   }
 
   /// Collects all type arguments used in is-checks.
-  void computeCheckedArguments(Set<DartType> instantiatedTypes,
-                               Set<DartType> isChecks) {
+  void computeCheckedArguments(
+      Set<DartType> instantiatedTypes, Set<DartType> isChecks) {
     ArgumentCollector collector = new ArgumentCollector(backend);
     FunctionArgumentCollector functionArgumentCollector =
         new FunctionArgumentCollector(backend);
@@ -461,7 +461,7 @@
     collectFunctionTypeArguments(checkedTypeArguments);
 
     void collectTypeArguments(Iterable<DartType> types,
-                              {bool isTypeArgument: false}) {
+        {bool isTypeArgument: false}) {
       for (DartType type in types) {
         collector.collect(type, isTypeArgument: isTypeArgument);
       }
@@ -469,13 +469,13 @@
     collectTypeArguments(isChecks);
     collectTypeArguments(checkedBounds, isTypeArgument: true);
 
-    checkedArguments =
-        collector.classes..addAll(functionArgumentCollector.classes);
+    checkedArguments = collector.classes
+      ..addAll(functionArgumentCollector.classes);
   }
 
   @override
-  Set<ClassElement> getClassesUsedInSubstitutions(JavaScriptBackend backend,
-                                                  TypeChecks checks) {
+  Set<ClassElement> getClassesUsedInSubstitutions(
+      JavaScriptBackend backend, TypeChecks checks) {
     Set<ClassElement> instantiated = new Set<ClassElement>();
     ArgumentCollector collector = new ArgumentCollector(backend);
     for (ClassElement target in checks.classes) {
@@ -492,12 +492,11 @@
 
   @override
   Set<ClassElement> getRequiredArgumentClasses(JavaScriptBackend backend) {
-    Set<ClassElement> requiredArgumentClasses =
-        new Set<ClassElement>.from(
-            getClassesUsedInSubstitutions(backend, requiredChecks));
+    Set<ClassElement> requiredArgumentClasses = new Set<ClassElement>.from(
+        getClassesUsedInSubstitutions(backend, requiredChecks));
     return requiredArgumentClasses
-        ..addAll(directlyInstantiatedArguments)
-        ..addAll(checkedArguments);
+      ..addAll(directlyInstantiatedArguments)
+      ..addAll(checkedArguments);
   }
 
   @override
@@ -558,7 +557,7 @@
   }
 
   Substitution computeSubstitution(ClassElement cls, ClassElement check,
-                                   { bool alwaysGenerateFunction: false }) {
+      {bool alwaysGenerateFunction: false}) {
     if (isTrivialSubstitution(cls, check)) return null;
 
     // Unnamed mixin application classes do not need substitutions, because they
@@ -602,16 +601,16 @@
 
   @override
   jsAst.Expression getTypeRepresentation(
-      DartType type,
-      OnVariableCallback onVariable,
+      DartType type, OnVariableCallback onVariable,
       [ShouldEncodeTypedefCallback shouldEncodeTypedef]) {
     return representationGenerator.getTypeRepresentation(
         type, onVariable, shouldEncodeTypedef);
   }
 
   @override
-  jsAst.Expression getTypeRepresentationWithPlaceholders(DartType type,
-      OnVariableCallback onVariable, {int firstPlaceholderIndex : 0}) {
+  jsAst.Expression getTypeRepresentationWithPlaceholders(
+      DartType type, OnVariableCallback onVariable,
+      {int firstPlaceholderIndex: 0}) {
     // Create a type representation.  For type variables call the original
     // callback for side effects and return a template placeholder.
     int positions = firstPlaceholderIndex;
@@ -624,8 +623,7 @@
 
   @override
   jsAst.Expression getSubstitutionRepresentation(
-      List<DartType> types,
-      OnVariableCallback onVariable) {
+      List<DartType> types, OnVariableCallback onVariable) {
     List<jsAst.Expression> elements = types
         .map((DartType type) => getTypeRepresentation(type, onVariable))
         .toList(growable: false);
@@ -633,11 +631,12 @@
   }
 
   jsAst.Expression getTypeEncoding(DartType type,
-                                   {bool alwaysGenerateFunction: false}) {
+      {bool alwaysGenerateFunction: false}) {
     ClassElement contextClass = Types.getClassContext(type);
     jsAst.Expression onVariable(TypeVariableType v) {
       return new jsAst.VariableUse(v.name);
-    };
+    }
+    ;
     jsAst.Expression encoding = getTypeRepresentation(type, onVariable);
     if (contextClass == null && !alwaysGenerateFunction) {
       return encoding;
@@ -645,7 +644,7 @@
       List<String> parameters = const <String>[];
       if (contextClass != null) {
         parameters = contextClass.typeVariables.map((type) {
-            return type.toString();
+          return type.toString();
         }).toList();
       }
       return js('function(#) { return # }', [parameters, encoding]);
@@ -660,10 +659,12 @@
     if (contextClass != null) {
       JavaScriptBackend backend = compiler.backend;
       jsAst.Name contextName = backend.namer.className(contextClass);
-      return js('function () { return #(#, #, #); }',
-          [ backend.emitter.staticFunctionAccess(
-                backend.helpers.computeSignature),
-              encoding, this_, js.quoteName(contextName) ]);
+      return js('function () { return #(#, #, #); }', [
+        backend.emitter.staticFunctionAccess(backend.helpers.computeSignature),
+        encoding,
+        this_,
+        js.quoteName(contextName)
+      ]);
     } else {
       return encoding;
     }
@@ -709,8 +710,8 @@
   }
 
   @override
-  jsAst.Expression getSubstitutionCodeForVariable(Substitution substitution,
-                                                  int index) {
+  jsAst.Expression getSubstitutionCodeForVariable(
+      Substitution substitution, int index) {
     jsAst.Expression declaration(TypeVariableType variable) {
       return new jsAst.Parameter(getVariableName(variable.name));
     }
@@ -735,8 +736,8 @@
   }
 
   @override
-  jsAst.Name get getFunctionThatReturnsNullName
-      => backend.namer.internalGlobal('functionThatReturnsNull');
+  jsAst.Name get getFunctionThatReturnsNullName =>
+      backend.namer.internalGlobal('functionThatReturnsNull');
 
   @override
   String getTypeRepresentationForTypeConstant(DartType type) {
@@ -753,8 +754,7 @@
     // names, it would result in more readable names if the final string was a
     // legal JavaScript identifer.
     if (variables.isEmpty) return name;
-    String arguments =
-        new List.filled(variables.length, 'dynamic').join(', ');
+    String arguments = new List.filled(variables.length, 'dynamic').join(', ');
     return '$name<$arguments>';
   }
 
@@ -763,7 +763,7 @@
     if (!type.returnType.isDynamic) return false;
     if (!type.optionalParameterTypes.isEmpty) return false;
     if (!type.namedParameterTypes.isEmpty) return false;
-    for (DartType parameter in type.parameterTypes ) {
+    for (DartType parameter in type.parameterTypes) {
       if (!parameter.isDynamic) return false;
     }
     return true;
@@ -845,8 +845,8 @@
   jsAst.Template get templateForCreateFunctionType {
     // The value of the functionTypeTag can be anything. We use "dynaFunc" for
     // easier debugging.
-    return jsAst.js.expressionTemplateFor(
-        '{ ${namer.functionTypeTag}: "dynafunc" }');
+    return jsAst.js
+        .expressionTemplateFor('{ ${namer.functionTypeTag}: "dynafunc" }');
   }
 
   visitFunctionType(FunctionType type, _) {
@@ -866,11 +866,11 @@
     }
     if (!type.parameterTypes.isEmpty) {
       addProperty(namer.functionTypeRequiredParametersTag,
-                  visitList(type.parameterTypes));
+          visitList(type.parameterTypes));
     }
     if (!type.optionalParameterTypes.isEmpty) {
       addProperty(namer.functionTypeOptionalParametersTag,
-                  visitList(type.optionalParameterTypes));
+          visitList(type.optionalParameterTypes));
     }
     if (!type.namedParameterTypes.isEmpty) {
       List<jsAst.Property> namedArguments = <jsAst.Property>[];
@@ -882,7 +882,7 @@
         namedArguments.add(new jsAst.Property(name, visit(types[index])));
       }
       addProperty(namer.functionTypeNamedParametersTag,
-                  new jsAst.ObjectInitializer(namedArguments));
+          new jsAst.ObjectInitializer(namedArguments));
     }
     return new jsAst.ObjectInitializer(properties);
   }
@@ -917,17 +917,16 @@
   }
 
   visitStatementType(StatementType type, _) {
-    reporter.internalError(NO_LOCATION_SPANNABLE,
-        'Unexpected type: $type (${type.kind}).');
+    reporter.internalError(
+        NO_LOCATION_SPANNABLE, 'Unexpected type: $type (${type.kind}).');
   }
 }
 
-
 class TypeCheckMapping implements TypeChecks {
   final Map<ClassElement, Set<TypeCheck>> map =
       new Map<ClassElement, Set<TypeCheck>>();
 
-  Iterable<TypeCheck> operator[](ClassElement element) {
+  Iterable<TypeCheck> operator [](ClassElement element) {
     Set<TypeCheck> result = map[element];
     return result != null ? result : const <TypeCheck>[];
   }
@@ -1035,8 +1034,7 @@
       : isFunction = false,
         parameters = const <DartType>[];
 
-  Substitution.function(this.arguments, this.parameters)
-      : isFunction = true;
+  Substitution.function(this.arguments, this.parameters) : isFunction = true;
 }
 
 /**
diff --git a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
index 3fb220a..b3b4354 100644
--- a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
+++ b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
@@ -38,8 +38,8 @@
   JavaScriptBackend get _backend => _compiler.backend;
   DiagnosticReporter get reporter => _compiler.reporter;
 
-  void registerClassWithTypeVariables(ClassElement cls, Enqueuer enqueuer,
-                                      Registry registry) {
+  void registerClassWithTypeVariables(
+      ClassElement cls, Enqueuer enqueuer, Registry registry) {
     if (enqueuer.isResolutionQueue) {
       // On first encounter, we have to ensure that the support classes get
       // resolved.
@@ -55,10 +55,9 @@
         _backend.enqueueInResolution(_typeVariableConstructor, registry);
         _backend.registerInstantiatedType(
             _typeVariableClass.rawType, enqueuer, registry);
-        enqueuer.registerStaticUse(
-            new StaticUse.staticInvoke(
-                _backend.registerBackendUse(_backend.helpers.createRuntimeType),
-                CallStructure.ONE_ARG));
+        enqueuer.registerStaticUse(new StaticUse.staticInvoke(
+            _backend.registerBackendUse(_backend.helpers.createRuntimeType),
+            CallStructure.ONE_ARG));
         _seenClassesWithTypeVariables = true;
       }
     } else {
@@ -82,21 +81,16 @@
           typeVariableElement,
           typeVariableElement.node,
           new StringConstantExpression(currentTypeVariable.name),
-          _backend.constantSystem.createString(
-              new DartString.literal(currentTypeVariable.name)));
+          _backend.constantSystem
+              .createString(new DartString.literal(currentTypeVariable.name)));
       jsAst.Expression boundIndex =
           _metadataCollector.reifyType(typeVariableElement.bound);
-      ConstantValue boundValue =
-          new SyntheticConstantValue(
-              SyntheticConstantKind.TYPEVARIABLE_REFERENCE,
-              boundIndex);
+      ConstantValue boundValue = new SyntheticConstantValue(
+          SyntheticConstantKind.TYPEVARIABLE_REFERENCE, boundIndex);
       ConstantExpression boundExpression =
           new SyntheticConstantExpression(boundValue);
-      AstConstant bound = new AstConstant(
-          typeVariableElement,
-          typeVariableElement.node,
-          boundExpression,
-          boundValue);
+      AstConstant bound = new AstConstant(typeVariableElement,
+          typeVariableElement.node, boundExpression, boundValue);
       AstConstant type = new AstConstant(
           typeVariableElement,
           typeVariableElement.node,
@@ -123,8 +117,8 @@
       _backend.registerCompileTimeConstant(value, _compiler.globalDependencies);
       _backend.addCompileTimeConstantForEmission(value);
       _backend.constants.addCompileTimeConstantForEmission(value);
-      constants.add(
-          _reifyTypeVariableConstant(value, currentTypeVariable.element));
+      constants
+          .add(_reifyTypeVariableConstant(value, currentTypeVariable.element));
     }
     _typeVariables[cls] = constants;
   }
@@ -137,8 +131,8 @@
    * entry in the list has already been reserved and the constant is added
    * there, otherwise a new entry for [c] is created.
    */
-  jsAst.Expression _reifyTypeVariableConstant(ConstantValue c,
-                                              TypeVariableElement variable) {
+  jsAst.Expression _reifyTypeVariableConstant(
+      ConstantValue c, TypeVariableElement variable) {
     jsAst.Expression name = _task.constantReference(c);
     jsAst.Expression result = _metadataCollector.reifyExpression(name);
     if (_typeVariableConstants.containsKey(variable)) {
diff --git a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
index c727d56..447710d 100644
--- a/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/class_stub_generator.dart
@@ -11,8 +11,8 @@
 
   ClassStubGenerator(this.compiler, this.namer, this.backend);
 
-  jsAst.Expression generateClassConstructor(ClassElement classElement,
-                                            Iterable<jsAst.Name> fields) {
+  jsAst.Expression generateClassConstructor(
+      ClassElement classElement, Iterable<jsAst.Name> fields) {
     // TODO(sra): Implement placeholders in VariableDeclaration position:
     //
     //     String constructorName = namer.getNameOfClass(classElement);
@@ -20,10 +20,11 @@
     //        [ constructorName, fields,
     //            fields.map(
     //                (name) => js('this.# = #', [name, name]))]));
-    return js('function(#) { #; this.#();}',
-        [fields,
-         fields.map((name) => js('this.# = #', [name, name])),
-         namer.deferredAction]);
+    return js('function(#) { #; this.#();}', [
+      fields,
+      fields.map((name) => js('this.# = #', [name, name])),
+      namer.deferredAction
+    ]);
   }
 
   jsAst.Expression generateGetter(Element member, jsAst.Name fieldName) {
@@ -38,8 +39,8 @@
     String receiver = backend.isInterceptorClass(cls) ? 'receiver' : 'this';
     List<String> args = backend.isInterceptedMethod(member) ? ['receiver'] : [];
     // TODO(floitsch): remove 'return'?
-    return js('function(#, v) { return #.# = v; }',
-        [args, receiver, fieldName]);
+    return js(
+        'function(#, v) { return #.# = v; }', [args, receiver, fieldName]);
   }
 
   /**
@@ -54,8 +55,7 @@
     // If the method is intercepted, the stub gets the
     // receiver explicitely and we need to pass it to the getter call.
     bool isInterceptedMethod = backend.isInterceptedMethod(member);
-    bool isInterceptorClass =
-        backend.isInterceptorClass(member.enclosingClass);
+    bool isInterceptorClass = backend.isInterceptorClass(member.enclosingClass);
 
     const String receiverArgumentName = r'$receiver';
 
@@ -75,7 +75,7 @@
     }
 
     Map<jsAst.Name, jsAst.Expression> generatedStubs =
-      <jsAst.Name, jsAst.Expression>{};
+        <jsAst.Name, jsAst.Expression>{};
 
     // Two selectors may match but differ only in type.  To avoid generating
     // identical stubs for each we track untyped selectors which already have
@@ -103,9 +103,8 @@
           arguments.add(js('#', name));
         }
 
-        jsAst.Fun function = js(
-            'function(#) { return #.#(#); }',
-            [ parameters, buildGetter(), closureCallName, arguments]);
+        jsAst.Fun function = js('function(#) { return #.#(#); }',
+            [parameters, buildGetter(), closureCallName, arguments]);
 
         generatedStubs[invocationName] = function;
       }
@@ -115,7 +114,6 @@
   }
 
   Map<jsAst.Name, Selector> computeSelectorsForNsmHandlers() {
-
     Map<jsAst.Name, Selector> jsNames = <jsAst.Name, Selector>{};
 
     // Do not generate no such method handlers if there is no class.
@@ -123,8 +121,8 @@
       return jsNames;
     }
 
-    void addNoSuchMethodHandlers(String ignore,
-                                 Map<Selector, SelectorConstraints> selectors) {
+    void addNoSuchMethodHandlers(
+        String ignore, Map<Selector, SelectorConstraints> selectors) {
       for (Selector selector in selectors.keys) {
         SelectorConstraints maskSet = selectors[selector];
         if (maskSet.needsNoSuchMethodHandling(selector, compiler.world)) {
@@ -140,47 +138,47 @@
     return jsNames;
   }
 
-  StubMethod generateStubForNoSuchMethod(jsAst.Name name,
-                                         Selector selector) {
+  StubMethod generateStubForNoSuchMethod(jsAst.Name name, Selector selector) {
     // Values match JSInvocationMirror in js-helper library.
     int type = selector.invocationMirrorKind;
     List<String> parameterNames =
         new List.generate(selector.argumentCount, (i) => '\$$i');
 
-    List<jsAst.Expression> argNames =
-        selector.callStructure.getOrderedNamedArguments().map((String name) =>
-            js.string(name)).toList();
+    List<jsAst.Expression> argNames = selector.callStructure
+        .getOrderedNamedArguments()
+        .map((String name) => js.string(name))
+        .toList();
 
     jsAst.Name methodName = namer.asName(selector.invocationMirrorMemberName);
     jsAst.Name internalName = namer.invocationMirrorInternalName(selector);
 
     assert(backend.isInterceptedName(Identifiers.noSuchMethod_));
     bool isIntercepted = backend.isInterceptedName(selector.name);
-    jsAst.Expression expression =
-        js('''this.#noSuchMethodName(#receiver,
+    jsAst.Expression expression = js(
+        '''this.#noSuchMethodName(#receiver,
                     #createInvocationMirror(#methodName,
                                             #internalName,
                                             #type,
                                             #arguments,
                                             #namedArguments))''',
-           {'receiver': isIntercepted ? r'$receiver' : 'this',
-            'noSuchMethodName': namer.noSuchMethodName,
-            'createInvocationMirror':
-                backend.emitter.staticFunctionAccess(
-                    backend.helpers.createInvocationMirror),
-            'methodName':
-                js.quoteName(compiler.options.enableMinification
-                    ? internalName : methodName),
-            'internalName': js.quoteName(internalName),
-            'type': js.number(type),
-            'arguments':
-                new jsAst.ArrayInitializer(parameterNames.map(js).toList()),
-            'namedArguments': new jsAst.ArrayInitializer(argNames)});
+        {
+          'receiver': isIntercepted ? r'$receiver' : 'this',
+          'noSuchMethodName': namer.noSuchMethodName,
+          'createInvocationMirror': backend.emitter
+              .staticFunctionAccess(backend.helpers.createInvocationMirror),
+          'methodName': js.quoteName(
+              compiler.options.enableMinification ? internalName : methodName),
+          'internalName': js.quoteName(internalName),
+          'type': js.number(type),
+          'arguments':
+              new jsAst.ArrayInitializer(parameterNames.map(js).toList()),
+          'namedArguments': new jsAst.ArrayInitializer(argNames)
+        });
 
     jsAst.Expression function;
     if (isIntercepted) {
-      function = js(r'function($receiver, #) { return # }',
-                              [parameterNames, expression]);
+      function = js(
+          r'function($receiver, #) { return # }', [parameterNames, expression]);
     } else {
       function = js(r'function(#) { return # }', [parameterNames, expression]);
     }
@@ -219,8 +217,8 @@
         js.string(namer.globalObjectFor(closureFromTearOff));
   } else {
     // Default values for mocked-up test libraries.
-    tearOffAccessExpression = js(
-        r'''function() { throw "Helper 'closureFromTearOff' missing." }''');
+    tearOffAccessExpression =
+        js(r'''function() { throw "Helper 'closureFromTearOff' missing." }''');
     tearOffGlobalObjectString = js.string('MissingHelperFunction');
     tearOffGlobalObject = js(
         r'''(function() { throw "Helper 'closureFromTearOff' missing." })()''');
@@ -230,7 +228,8 @@
   if (!compiler.options.useContentSecurityPolicy) {
     jsAst.Expression tearOffAccessText =
         new jsAst.UnparsedNode(tearOffAccessExpression, compiler, false);
-    tearOffGetter = js.statement('''
+    tearOffGetter = js.statement(
+        '''
 function tearOffGetter(funcs, reflectionInfo, name, isIntercepted) {
   return isIntercepted
       ? new Function("funcs", "reflectionInfo", "name",
@@ -247,11 +246,15 @@
                 "this, funcs, reflectionInfo, false, [], name);" +
                 "return new c(this, funcs[0], null, name);" +
                 "}")(funcs, reflectionInfo, name, #tearOffGlobalObject, null);
-}''', {'tearOffAccessText': tearOffAccessText,
-       'tearOffGlobalObject': tearOffGlobalObject,
-       'tearOffGlobalObjectString': tearOffGlobalObjectString});
+}''',
+        {
+          'tearOffAccessText': tearOffAccessText,
+          'tearOffGlobalObject': tearOffGlobalObject,
+          'tearOffGlobalObjectString': tearOffGlobalObjectString
+        });
   } else {
-    tearOffGetter = js.statement('''
+    tearOffGetter = js.statement(
+        '''
       function tearOffGetter(funcs, reflectionInfo, name, isIntercepted) {
         var cache = null;
         return isIntercepted
@@ -265,10 +268,12 @@
                     this, funcs, reflectionInfo, false, [], name);
                 return new cache(this, funcs[0], null, name);
               };
-      }''', [tearOffAccessExpression, tearOffAccessExpression]);
+      }''',
+        [tearOffAccessExpression, tearOffAccessExpression]);
   }
 
-  jsAst.Statement tearOff = js.statement('''
+  jsAst.Statement tearOff = js.statement(
+      '''
     function tearOff(funcs, reflectionInfo, isStatic, name, isIntercepted) {
       var cache;
       return isStatic
@@ -278,7 +283,8 @@
               return cache;
             }
           : tearOffGetter(funcs, reflectionInfo, name, isIntercepted);
-    }''',  {'tearOff': tearOffAccessExpression});
+    }''',
+      {'tearOff': tearOffAccessExpression});
 
   return <jsAst.Statement>[tearOffGetter, tearOff];
 }
diff --git a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
index bea4320..28583fc 100644
--- a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
+++ b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
@@ -34,7 +34,7 @@
   Set<ClassElement> neededClasses;
 
   CodeEmitterTask(Compiler compiler, Namer namer, bool generateSourceMap,
-                  bool useStartupEmitter)
+      bool useStartupEmitter)
       : super(compiler),
         this.namer = namer,
         this.typeTestRegistry = new TypeTestRegistry(compiler) {
@@ -98,7 +98,7 @@
 
   /// Returns the JS prototype of the given class [e].
   jsAst.Expression prototypeAccess(ClassElement e,
-                                   {bool hasBeenInstantiated: false}) {
+      {bool hasBeenInstantiated: false}) {
     return emitter.prototypeAccess(e, hasBeenInstantiated);
   }
 
@@ -141,8 +141,8 @@
       emitter.invalidateCaches();
 
       Set<ClassElement> rtiNeededClasses = _finalizeRti();
-      ProgramBuilder programBuilder = new ProgramBuilder(
-          compiler, namer, this, emitter, rtiNeededClasses);
+      ProgramBuilder programBuilder =
+          new ProgramBuilder(compiler, namer, this, emitter, rtiNeededClasses);
       int size = emitter.emitProgram(programBuilder);
       // TODO(floitsch): we shouldn't need the `neededClasses` anymore.
       neededClasses = programBuilder.collector.neededClasses;
diff --git a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
index 462d0e4..a2a0d7d 100644
--- a/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
+++ b/pkg/compiler/lib/src/js_emitter/constant_ordering.dart
@@ -7,10 +7,7 @@
 import '../constants/values.dart';
 
 import '../dart_types.dart';
-import '../elements/elements.dart'
-    show Element,
-         Elements,
-         FieldElement;
+import '../elements/elements.dart' show Element, Elements, FieldElement;
 import '../tree/tree.dart' show DartString;
 import '../js_backend/js_backend.dart' show SyntheticConstantKind;
 
@@ -64,8 +61,8 @@
     if (a is GenericType) {
       GenericType aGeneric = a;
       GenericType bGeneric = b;
-      r = compareLists(compareDartTypes,
-                       aGeneric.typeArguments, bGeneric.typeArguments);
+      r = compareLists(
+          compareDartTypes, aGeneric.typeArguments, bGeneric.typeArguments);
       if (r != 0) return r;
     }
     throw 'unexpected compareDartTypes  $a  $b';
@@ -125,7 +122,8 @@
     r = compareLists(compareElements, aFields, bFields);
     if (r != 0) return r;
 
-    return compareLists(compareValues,
+    return compareLists(
+        compareValues,
         aFields.map((field) => a.fields[field]).toList(),
         aFields.map((field) => b.fields[field]).toList());
   }
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/class_builder.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/class_builder.dart
index 6220c4e..2e0cb0e 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/class_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/class_builder.dart
@@ -79,9 +79,8 @@
     List<jsAst.Property> fieldsAndProperties;
     if (emitClassDescriptor) {
       fieldsAndProperties = <jsAst.Property>[];
-      fieldsAndProperties.add(
-          new jsAst.Property(
-              js.string(namer.classDescriptorProperty), classData));
+      fieldsAndProperties.add(new jsAst.Property(
+          js.string(namer.classDescriptorProperty), classData));
       fieldsAndProperties.addAll(properties);
     } else {
       fieldsAndProperties = properties;
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart
index 77f606a..0538a2d 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/class_emitter.dart
@@ -5,7 +5,6 @@
 part of dart2js.js_emitter.full_emitter;
 
 class ClassEmitter extends CodeEmitterHelper {
-
   ClassStubGenerator get _stubGenerator =>
       new ClassStubGenerator(compiler, namer, backend);
 
@@ -28,8 +27,7 @@
     if (cls.isMixinApplication) {
       MixinApplication mixinApplication = cls;
       jsAst.Name mixinName = mixinApplication.mixinClass.name;
-      superName =
-          new CompoundName([superName, Namer.literalPlus, mixinName]);
+      superName = new CompoundName([superName, Namer.literalPlus, mixinName]);
       emitter.needsMixinSupport = true;
     }
 
@@ -53,9 +51,10 @@
       builder.addProperty(name, function);
     }
 
-    emitClassBuilderWithReflectionData(cls, builder, enclosingBuilder,
-        fragment);
+    emitClassBuilderWithReflectionData(
+        cls, builder, enclosingBuilder, fragment);
   }
+
   /**
   * Emits the precompiled constructor when in CSP mode.
   */
@@ -81,10 +80,8 @@
   }
 
   /// Returns `true` if fields added.
-  bool emitFields(FieldContainer container,
-                  ClassBuilder builder,
-                  { bool classIsNative: false,
-                    bool emitStatics: false }) {
+  bool emitFields(FieldContainer container, ClassBuilder builder,
+      {bool classIsNative: false, bool emitStatics: false}) {
     Iterable<Field> fields;
     if (container is Class) {
       if (emitStatics) {
@@ -111,7 +108,7 @@
       bool needsGetter = field.needsGetter;
       bool needsSetter = field.needsUncheckedSetter;
 
-        // Ignore needsCheckedSetter - that is handled below.
+      // Ignore needsCheckedSetter - that is handled below.
       bool needsAccessor = (needsGetter || needsSetter);
       // We need to output the fields for non-native classes so we can auto-
       // generate the constructor.  For native classes there are no
@@ -143,21 +140,21 @@
           }
           fieldNameParts.add(name);
           if (field.needsInterceptedGetter) {
-            emitter.interceptorEmitter.interceptorInvocationNames.add(
-                namer.getterForElement(fieldElement));
+            emitter.interceptorEmitter.interceptorInvocationNames
+                .add(namer.getterForElement(fieldElement));
           }
           // TODO(16168): The setter creator only looks at the getter-name.
           // Even though the setter could avoid the interceptor convention we
           // currently still need to add the additional argument.
           if (field.needsInterceptedGetter || field.needsInterceptedSetter) {
-            emitter.interceptorEmitter.interceptorInvocationNames.add(
-                namer.setterForElement(fieldElement));
+            emitter.interceptorEmitter.interceptorInvocationNames
+                .add(namer.setterForElement(fieldElement));
           }
 
           int code = field.getterFlags + (field.setterFlags << 2);
           if (code == 0) {
-            reporter.internalError(fieldElement,
-                'Field code is 0 ($fieldElement).');
+            reporter.internalError(
+                fieldElement, 'Field code is 0 ($fieldElement).');
           }
           fieldNameParts.add(
               js.stringPart(FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE]));
@@ -198,16 +195,15 @@
       assert(member != null);
       jsAst.Expression code = method.code;
       jsAst.Name setterName = method.name;
-      compiler.dumpInfoTask.registerElementAst(member,
-          builder.addProperty(setterName, code));
-      generateReflectionDataForFieldGetterOrSetter(
-          member, setterName, builder, isGetter: false);
+      compiler.dumpInfoTask
+          .registerElementAst(member, builder.addProperty(setterName, code));
+      generateReflectionDataForFieldGetterOrSetter(member, setterName, builder,
+          isGetter: false);
     }
   }
 
   /// Emits getters/setters for fields if compiling in CSP mode.
   void emitClassGettersSettersForCSP(Class cls, ClassBuilder builder) {
-
     if (!compiler.options.useContentSecurityPolicy || cls.onlyForRti) return;
 
     for (Field field in cls.fields) {
@@ -235,8 +231,7 @@
    *
    * Invariant: [classElement] must be a declaration element.
    */
-  void emitInstanceMembers(Class cls,
-                           ClassBuilder builder) {
+  void emitInstanceMembers(Class cls, ClassBuilder builder) {
     ClassElement classElement = cls.element;
     assert(invariant(classElement, classElement.isDeclaration));
 
@@ -281,10 +276,8 @@
     }
   }
 
-  void emitClassBuilderWithReflectionData(Class cls,
-                                          ClassBuilder classBuilder,
-                                          ClassBuilder enclosingBuilder,
-                                          Fragment fragment) {
+  void emitClassBuilderWithReflectionData(Class cls, ClassBuilder classBuilder,
+      ClassBuilder enclosingBuilder, Fragment fragment) {
     ClassElement classElement = cls.element;
     jsAst.Name className = cls.name;
 
@@ -295,15 +288,15 @@
 
     if (backend.isAccessibleByReflection(classElement)) {
       List<DartType> typeVars = classElement.typeVariables;
-      Iterable typeVariableProperties = emitter.typeVariableHandler
-          .typeVariablesOf(classElement);
+      Iterable typeVariableProperties =
+          emitter.typeVariableHandler.typeVariablesOf(classElement);
 
       ClassElement superclass = classElement.superclass;
       bool hasSuper = superclass != null;
       if ((!typeVariableProperties.isEmpty && !hasSuper) ||
           (hasSuper && !equalElements(superclass.typeVariables, typeVars))) {
-        classBuilder.addPropertyByName('<>',
-            new jsAst.ArrayInitializer(typeVariableProperties.toList()));
+        classBuilder.addPropertyByName(
+            '<>', new jsAst.ArrayInitializer(typeVariableProperties.toList()));
       }
     }
 
@@ -312,9 +305,8 @@
         new ClassBuilder.forStatics(classElement, namer);
     if (emitFields(cls, staticsBuilder, emitStatics: true)) {
       jsAst.ObjectInitializer initializer =
-        staticsBuilder.toObjectInitializer();
-      compiler.dumpInfoTask.registerElementAst(classElement,
-        initializer);
+          staticsBuilder.toObjectInitializer();
+      compiler.dumpInfoTask.registerElementAst(classElement, initializer);
       jsAst.Node property = initializer.properties.single;
       compiler.dumpInfoTask.registerElementAst(classElement, property);
       statics.add(property);
@@ -334,9 +326,9 @@
     }
 
     // TODO(ahe): This method (generateClass) should return a jsAst.Expression.
-    jsAst.ObjectInitializer propertyValue =
-        classBuilder.toObjectInitializer();
-    compiler.dumpInfoTask.registerElementAst(classBuilder.element, propertyValue);
+    jsAst.ObjectInitializer propertyValue = classBuilder.toObjectInitializer();
+    compiler.dumpInfoTask
+        .registerElementAst(classBuilder.element, propertyValue);
     enclosingBuilder.addProperty(className, propertyValue);
 
     String reflectionName = emitter.getReflectionName(classElement, className);
@@ -353,33 +345,29 @@
           types.add(task.metadataCollector.reifyType(interface));
         }
         // TODO(herhut): Fix use of reflection name here.
-        enclosingBuilder.addPropertyByName("+$reflectionName",
-            new jsAst.ArrayInitializer(types));
+        enclosingBuilder.addPropertyByName(
+            "+$reflectionName", new jsAst.ArrayInitializer(types));
       }
     }
   }
 
-  void recordMangledField(Element member,
-                          jsAst.Name accessorName,
-                          String memberName) {
+  void recordMangledField(
+      Element member, jsAst.Name accessorName, String memberName) {
     if (!backend.shouldRetainGetter(member)) return;
     String previousName;
     if (member.isInstanceMember) {
-      previousName = emitter.mangledFieldNames.putIfAbsent(
-          namer.deriveGetterName(accessorName),
-          () => memberName);
+      previousName = emitter.mangledFieldNames
+          .putIfAbsent(namer.deriveGetterName(accessorName), () => memberName);
     } else {
-      previousName = emitter.mangledGlobalFieldNames.putIfAbsent(
-          accessorName,
-          () => memberName);
+      previousName = emitter.mangledGlobalFieldNames
+          .putIfAbsent(accessorName, () => memberName);
     }
     assert(invariant(member, previousName == memberName,
-                     message: '$previousName != ${memberName}'));
+        message: '$previousName != ${memberName}'));
   }
 
   void emitGetterForCSP(Element member, jsAst.Name fieldName,
-                        jsAst.Name accessorName,
-                        ClassBuilder builder) {
+      jsAst.Name accessorName, ClassBuilder builder) {
     jsAst.Expression function =
         _stubGenerator.generateGetter(member, fieldName);
 
@@ -388,18 +376,18 @@
     jsAst.Name className = namer.className(cls);
     OutputUnit outputUnit =
         compiler.deferredLoadTask.outputUnitForElement(member);
-    emitter.cspPrecompiledFunctionFor(outputUnit).add(
-        js('#.prototype.# = #', [className, getterName, function]));
+    emitter
+        .cspPrecompiledFunctionFor(outputUnit)
+        .add(js('#.prototype.# = #', [className, getterName, function]));
     if (backend.isAccessibleByReflection(member)) {
-      emitter.cspPrecompiledFunctionFor(outputUnit).add(
-          js('#.prototype.#.${namer.reflectableField} = 1',
-              [className, getterName]));
+      emitter.cspPrecompiledFunctionFor(outputUnit).add(js(
+          '#.prototype.#.${namer.reflectableField} = 1',
+          [className, getterName]));
     }
   }
 
   void emitSetterForCSP(Element member, jsAst.Name fieldName,
-                        jsAst.Name accessorName,
-                        ClassBuilder builder) {
+      jsAst.Name accessorName, ClassBuilder builder) {
     jsAst.Expression function =
         _stubGenerator.generateSetter(member, fieldName);
 
@@ -408,22 +396,21 @@
     jsAst.Name className = namer.className(cls);
     OutputUnit outputUnit =
         compiler.deferredLoadTask.outputUnitForElement(member);
-    emitter.cspPrecompiledFunctionFor(outputUnit).add(
-        js('#.prototype.# = #', [className, setterName, function]));
+    emitter
+        .cspPrecompiledFunctionFor(outputUnit)
+        .add(js('#.prototype.# = #', [className, setterName, function]));
     if (backend.isAccessibleByReflection(member)) {
-      emitter.cspPrecompiledFunctionFor(outputUnit).add(
-          js('#.prototype.#.${namer.reflectableField} = 1',
-              [className, setterName]));
+      emitter.cspPrecompiledFunctionFor(outputUnit).add(js(
+          '#.prototype.#.${namer.reflectableField} = 1',
+          [className, setterName]));
     }
   }
 
-  void generateReflectionDataForFieldGetterOrSetter(Element member,
-                                                    jsAst.Name name,
-                                                    ClassBuilder builder,
-                                                    {bool isGetter}) {
+  void generateReflectionDataForFieldGetterOrSetter(
+      Element member, jsAst.Name name, ClassBuilder builder,
+      {bool isGetter}) {
     Selector selector = isGetter
-        ? new Selector.getter(
-            new Name(member.name, member.library))
+        ? new Selector.getter(new Name(member.name, member.library))
         : new Selector.setter(
             new Name(member.name, member.library, isSetter: true));
     String reflectionName = emitter.getReflectionName(selector, name);
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart
index ebd7d1a..d0c0d93 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart
@@ -9,7 +9,6 @@
 /// Initially, it is just a placeholder for code that is moved from
 /// [CodeEmitterTask].
 class ContainerBuilder extends CodeEmitterHelper {
-
   void addMemberMethod(DartMethod method, ClassBuilder builder) {
     MethodElement member = method.element;
     jsAst.Name name = method.name;
@@ -31,8 +30,8 @@
     emitter.interceptorEmitter.recordMangledNameOfMemberMethod(member, name);
 
     if (!needStructuredInfo) {
-      compiler.dumpInfoTask.registerElementAst(member,
-          builder.addProperty(name, code));
+      compiler.dumpInfoTask
+          .registerElementAst(member, builder.addProperty(name, code));
 
       for (ParameterStubMethod stub in method.parameterStubs) {
         assert(stub.callName == null);
@@ -87,9 +86,9 @@
 
     if (onlyNeedsSuperAlias) {
       jsAst.ArrayInitializer arrayInit =
-            new jsAst.ArrayInitializer(expressions);
-          compiler.dumpInfoTask.registerElementAst(member,
-              builder.addProperty(name, arrayInit));
+          new jsAst.ArrayInitializer(expressions);
+      compiler.dumpInfoTask
+          .registerElementAst(member, builder.addProperty(name, arrayInit));
       return;
     }
 
@@ -126,13 +125,14 @@
     }
 
     expressions
-        ..addAll(tearOffInfo)
-        ..add((tearOffName == null || member.isAccessor)
-              ? js("null") : js.quoteName(tearOffName))
-        ..add(js.number(requiredParameterCount))
-        ..add(js.number(optionalParameterCount))
-        ..add(memberTypeExpression == null ? js("null") : memberTypeExpression)
-        ..addAll(task.metadataCollector.reifyDefaultArguments(member));
+      ..addAll(tearOffInfo)
+      ..add((tearOffName == null || member.isAccessor)
+          ? js("null")
+          : js.quoteName(tearOffName))
+      ..add(js.number(requiredParameterCount))
+      ..add(js.number(optionalParameterCount))
+      ..add(memberTypeExpression == null ? js("null") : memberTypeExpression)
+      ..addAll(task.metadataCollector.reifyDefaultArguments(member));
 
     if (canBeReflected || canBeApplied) {
       parameters.forEachParameter((Element parameter) {
@@ -155,24 +155,22 @@
         // TODO(herhut): This registers name as a mangled name. Do we need this
         //               given that we use a different name below?
         emitter.getReflectionName(member, name);
-        reflectionName =
-            new jsAst.LiteralString(
-                '"new ${Elements.reconstructConstructorName(member)}"');
+        reflectionName = new jsAst.LiteralString(
+            '"new ${Elements.reconstructConstructorName(member)}"');
       } else {
-        reflectionName =
-            js.string(namer.privateName(member.memberName));
+        reflectionName = js.string(namer.privateName(member.memberName));
       }
       expressions
-          ..add(reflectionName)
-          ..addAll(task.metadataCollector.computeMetadata(member));
+        ..add(reflectionName)
+        ..addAll(task.metadataCollector.computeMetadata(member));
     } else if (isClosure && canBeApplied) {
       expressions.add(js.string(namer.privateName(member.memberName)));
     }
 
     jsAst.ArrayInitializer arrayInit =
-      new jsAst.ArrayInitializer(expressions.toList());
-    compiler.dumpInfoTask.registerElementAst(member,
-        builder.addProperty(name, arrayInit));
+        new jsAst.ArrayInitializer(expressions.toList());
+    compiler.dumpInfoTask
+        .registerElementAst(member, builder.addProperty(name, arrayInit));
   }
 
   void addMemberField(Field field, ClassBuilder builder) {
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/declarations.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/declarations.dart
index 0bc38d3..ac14c66 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/declarations.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/declarations.dart
@@ -10,8 +10,8 @@
 /**
  * Call-back for adding property with [name] and [value].
  */
-typedef jsAst.Property AddPropertyFunction(jsAst.Name name,
-                                           jsAst.Expression value);
+typedef jsAst.Property AddPropertyFunction(
+    jsAst.Name name, jsAst.Expression value);
 
 // Compact field specifications.  The format of the field specification is
 // <accessorName>:<fieldName><suffix> where the suffix and accessor name
@@ -29,9 +29,9 @@
 const FIELD_CODE_CHARACTERS = r"<=>?@{|}~%&'()*";
 const NO_FIELD_CODE = 0;
 const FIRST_FIELD_CODE = 1;
-const RANGE1_FIRST = 0x3c;   //  <=>?@    encodes 1..5
+const RANGE1_FIRST = 0x3c; //  <=>?@    encodes 1..5
 const RANGE1_LAST = 0x40;
-const RANGE2_FIRST = 0x7b;   //  {|}~     encodes 6..9
+const RANGE2_FIRST = 0x7b; //  {|}~     encodes 6..9
 const RANGE2_LAST = 0x7e;
-const RANGE3_FIRST = 0x25;   //  %&'()*+  encodes 10..16
+const RANGE3_FIRST = 0x25; //  %&'()*+  encodes 10..16
 const RANGE3_LAST = 0x2b;
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index 7c9b6d8..cb4dc4f 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -8,9 +8,8 @@
 import 'dart:collection' show HashMap;
 
 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
-import 'package:js_runtime/shared/embedded_names.dart' show
-    JsBuiltin,
-    JsGetName;
+import 'package:js_runtime/shared/embedded_names.dart'
+    show JsBuiltin, JsGetName;
 
 import '../headers.dart';
 import '../js_emitter.dart' hide Emitter;
@@ -20,76 +19,60 @@
 import '../constant_ordering.dart' show deepCompareConstants;
 
 import '../../common.dart';
-import '../../common/names.dart' show
-    Names;
-import '../../compiler.dart' show
-    Compiler;
+import '../../common/names.dart' show Names;
+import '../../compiler.dart' show Compiler;
 import '../../constants/values.dart';
-import '../../core_types.dart' show
-    CoreClasses;
-import '../../dart_types.dart' show
-    DartType;
+import '../../core_types.dart' show CoreClasses;
+import '../../dart_types.dart' show DartType;
 import '../../deferred_load.dart' show OutputUnit;
-import '../../elements/elements.dart' show
-    ClassElement,
-    ConstructorBodyElement,
-    Element,
-    Elements,
-    ElementKind,
-    FieldElement,
-    FunctionElement,
-    FunctionSignature,
-    LibraryElement,
-    MetadataAnnotation,
-    MethodElement,
-    MemberElement,
-    Name,
-    ParameterElement,
-    TypedefElement,
-    TypeVariableElement,
-    VariableElement;
+import '../../elements/elements.dart'
+    show
+        ClassElement,
+        ConstructorBodyElement,
+        Element,
+        Elements,
+        ElementKind,
+        FieldElement,
+        FunctionElement,
+        FunctionSignature,
+        LibraryElement,
+        MetadataAnnotation,
+        MethodElement,
+        MemberElement,
+        Name,
+        ParameterElement,
+        TypedefElement,
+        TypeVariableElement,
+        VariableElement;
 import '../../hash/sha1.dart' show Hasher;
 import '../../io/code_output.dart';
-import '../../io/line_column_provider.dart' show
-    LineColumnCollector,
-    LineColumnProvider;
-import '../../io/source_map_builder.dart' show
-    SourceMapBuilder;
+import '../../io/line_column_provider.dart'
+    show LineColumnCollector, LineColumnProvider;
+import '../../io/source_map_builder.dart' show SourceMapBuilder;
 import '../../js/js.dart' as jsAst;
 import '../../js/js.dart' show js;
-import '../../js_backend/backend_helpers.dart' show
-    BackendHelpers;
-import '../../js_backend/js_backend.dart' show
-    CheckedModeHelper,
-    CompoundName,
-    ConstantEmitter,
-    CustomElementsAnalysis,
-    GetterName,
-    JavaScriptBackend,
-    JavaScriptConstantCompiler,
-    Namer,
-    RuntimeTypes,
-    SetterName,
-    Substitution,
-    TypeCheck,
-    TypeChecks,
-    TypeVariableHandler;
-import '../../universe/call_structure.dart' show
-    CallStructure;
-import '../../universe/selector.dart' show
-    Selector;
-import '../../util/characters.dart' show
-    $$,
-    $A,
-    $HASH,
-    $PERIOD,
-    $Z,
-    $a,
-    $z;
-import '../../util/uri_extras.dart' show
-    relativize;
-import '../../util/util.dart' show
-    equalElements;
+import '../../js_backend/backend_helpers.dart' show BackendHelpers;
+import '../../js_backend/js_backend.dart'
+    show
+        CheckedModeHelper,
+        CompoundName,
+        ConstantEmitter,
+        CustomElementsAnalysis,
+        GetterName,
+        JavaScriptBackend,
+        JavaScriptConstantCompiler,
+        Namer,
+        RuntimeTypes,
+        SetterName,
+        Substitution,
+        TypeCheck,
+        TypeChecks,
+        TypeVariableHandler;
+import '../../universe/call_structure.dart' show CallStructure;
+import '../../universe/selector.dart' show Selector;
+import '../../util/characters.dart' show $$, $A, $HASH, $PERIOD, $Z, $a, $z;
+import '../../util/uri_extras.dart' show relativize;
+import '../../util/util.dart' show equalElements;
 
 part 'class_builder.dart';
 part 'class_emitter.dart';
@@ -101,7 +84,6 @@
 part 'nsm_emitter.dart';
 part 'setup_program_builder.dart';
 
-
 class Emitter implements js_emitter.Emitter {
   final Compiler compiler;
   final CodeEmitterTask task;
@@ -202,15 +184,13 @@
 
   List<jsAst.Node> cspPrecompiledFunctionFor(OutputUnit outputUnit) {
     return _cspPrecompiledFunctions.putIfAbsent(
-        outputUnit,
-        () => new List<jsAst.Node>());
+        outputUnit, () => new List<jsAst.Node>());
   }
 
   List<jsAst.Expression> cspPrecompiledConstructorNamesFor(
       OutputUnit outputUnit) {
     return _cspPrecompiledConstructorNames.putIfAbsent(
-        outputUnit,
-        () => new List<jsAst.Expression>());
+        outputUnit, () => new List<jsAst.Expression>());
   }
 
   /// Erases the precompiled information for csp mode for all output units.
@@ -225,9 +205,9 @@
 
   @override
   bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
-    if (constant.isFunction) return true;    // Already emitted.
-    if (constant.isPrimitive) return true;   // Inlined.
-    if (constant.isDummy) return true;       // Inlined.
+    if (constant.isFunction) return true; // Already emitted.
+    if (constant.isPrimitive) return true; // Inlined.
+    if (constant.isDummy) return true; // Inlined.
     // The name is null when the constant is already a JS constant.
     // TODO(floitsch): every constant should be registered, so that we can
     // share the ones that take up too much space (like some strings).
@@ -270,8 +250,8 @@
     if (isConstantInlinedOrAlreadyEmitted(value)) {
       return constantEmitter.generate(value);
     }
-    return js('#.#', [namer.globalObjectForConstant(value),
-                      namer.constantName(value)]);
+    return js('#.#',
+        [namer.globalObjectForConstant(value), namer.constantName(value)]);
   }
 
   jsAst.Expression constantInitializerExpression(ConstantValue value) {
@@ -280,18 +260,17 @@
 
   String get name => 'CodeEmitter';
 
-  String get finishIsolateConstructorName
-      => '${namer.isolateName}.\$finishIsolateConstructor';
-  String get isolatePropertiesName
-      => '${namer.isolateName}.${namer.isolatePropertiesName}';
-  String get lazyInitializerProperty
-      => r'$lazy';
-  String get lazyInitializerName
-      => '${namer.isolateName}.${lazyInitializerProperty}';
+  String get finishIsolateConstructorName =>
+      '${namer.isolateName}.\$finishIsolateConstructor';
+  String get isolatePropertiesName =>
+      '${namer.isolateName}.${namer.isolatePropertiesName}';
+  String get lazyInitializerProperty => r'$lazy';
+  String get lazyInitializerName =>
+      '${namer.isolateName}.${lazyInitializerProperty}';
   String get initName => 'init';
 
-  jsAst.Name get makeConstListProperty
-      => namer.internalGlobal('makeConstantList');
+  jsAst.Name get makeConstListProperty =>
+      namer.internalGlobal('makeConstantList');
 
   /// The name of the property that contains all field names.
   ///
@@ -321,22 +300,21 @@
   jsAst.PropertyAccess globalPropertyAccess(Element element) {
     jsAst.Name name = namer.globalPropertyName(element);
     jsAst.PropertyAccess pa = new jsAst.PropertyAccess(
-        new jsAst.VariableUse(namer.globalObjectFor(element)),
-        name);
+        new jsAst.VariableUse(namer.globalObjectFor(element)), name);
     return pa;
   }
 
   @override
   jsAst.Expression isolateLazyInitializerAccess(FieldElement element) {
-     return jsAst.js('#.#', [namer.globalObjectFor(element),
-                             namer.lazyInitializerName(element)]);
-   }
+    return jsAst.js('#.#',
+        [namer.globalObjectFor(element), namer.lazyInitializerName(element)]);
+  }
 
   @override
   jsAst.Expression isolateStaticClosureAccess(FunctionElement element) {
-     return jsAst.js('#.#()',
-         [namer.globalObjectFor(element), namer.staticClosureName(element)]);
-   }
+    return jsAst.js('#.#()',
+        [namer.globalObjectFor(element), namer.staticClosureName(element)]);
+  }
 
   @override
   jsAst.PropertyAccess staticFieldAccess(FieldElement element) {
@@ -354,8 +332,8 @@
   }
 
   @override
-  jsAst.PropertyAccess prototypeAccess(ClassElement element,
-                                       bool hasBeenInstantiated) {
+  jsAst.PropertyAccess prototypeAccess(
+      ClassElement element, bool hasBeenInstantiated) {
     return jsAst.js('#.prototype', constructorAccess(element));
   }
 
@@ -373,8 +351,8 @@
   jsAst.Template templateForBuiltin(JsBuiltin builtin) {
     switch (builtin) {
       case JsBuiltin.dartObjectConstructor:
-        return jsAst.js.expressionTemplateYielding(
-            typeAccess(coreClasses.objectClass));
+        return jsAst.js
+            .expressionTemplateYielding(typeAccess(coreClasses.objectClass));
 
       case JsBuiltin.isCheckPropertyToJsConstructorName:
         int isPrefixLength = namer.operatorIsPrefix.length;
@@ -396,8 +374,8 @@
         // TODO(floitsch): move this closer to where is-check properties are
         // built.
         String isPrefix = namer.operatorIsPrefix;
-        return jsAst.js.expressionTemplateFor(
-            "('$isPrefix' + #) in #.prototype");
+        return jsAst.js
+            .expressionTemplateFor("('$isPrefix' + #) in #.prototype");
 
       case JsBuiltin.isGivenTypeRti:
         return jsAst.js.expressionTemplateFor('#.$typeNameProperty === #');
@@ -420,13 +398,13 @@
         return jsAst.js.expressionTemplateFor("$functionGettersMap[#]()");
 
       default:
-        reporter.internalError(NO_LOCATION_SPANNABLE,
-            "Unhandled Builtin: $builtin");
+        reporter.internalError(
+            NO_LOCATION_SPANNABLE, "Unhandled Builtin: $builtin");
         return null;
     }
   }
 
-  List<jsAst.Statement> buildTrivialNsmHandlers(){
+  List<jsAst.Statement> buildTrivialNsmHandlers() {
     return nsmEmitter.buildTrivialNsmHandlers();
   }
 
@@ -437,9 +415,7 @@
       jsAst.Expression interceptorsByTagAccess,
       jsAst.Expression leafTagsAccess) {
     return NativeGenerator.buildNativeInfoHandler(infoAccess, constructorAccess,
-                                                  subclassReadGenerator,
-                                                  interceptorsByTagAccess,
-                                                  leafTagsAccess);
+        subclassReadGenerator, interceptorsByTagAccess, leafTagsAccess);
   }
 
   jsAst.ObjectInitializer generateInterceptedNamesSet() {
@@ -450,12 +426,12 @@
   bool _isNativeTypeNeedingReflectionName(Element element) {
     if (!element.isClass) return false;
     return (element == coreClasses.intClass ||
-            element == coreClasses.doubleClass ||
-            element == coreClasses.numClass ||
-            element == coreClasses.stringClass ||
-            element == coreClasses.boolClass ||
-            element == coreClasses.nullClass ||
-            element == coreClasses.listClass);
+        element == coreClasses.doubleClass ||
+        element == coreClasses.numClass ||
+        element == coreClasses.stringClass ||
+        element == coreClasses.boolClass ||
+        element == coreClasses.nullClass ||
+        element == coreClasses.listClass);
   }
 
   /// Returns the "reflection name" of an [Element] or [Selector].
@@ -473,12 +449,11 @@
     String name = elementOrSelector.name;
     if (backend.shouldRetainName(name) ||
         elementOrSelector is Element &&
-        // Make sure to retain names of unnamed constructors, and
-        // for common native types.
-        ((name == '' &&
-          backend.isAccessibleByReflection(elementOrSelector)) ||
-         _isNativeTypeNeedingReflectionName(elementOrSelector))) {
-
+            // Make sure to retain names of unnamed constructors, and
+            // for common native types.
+            ((name == '' &&
+                    backend.isAccessibleByReflection(elementOrSelector)) ||
+                _isNativeTypeNeedingReflectionName(elementOrSelector))) {
       // TODO(ahe): Enable the next line when I can tell the difference between
       // an instance method and a global.  They may have the same mangled name.
       // if (recordedMangledNames.contains(mangledName)) return null;
@@ -488,8 +463,7 @@
     return null;
   }
 
-  String getReflectionNameInternal(elementOrSelector,
-                                   jsAst.Name mangledName) {
+  String getReflectionNameInternal(elementOrSelector, jsAst.Name mangledName) {
     String name = namer.privateName(elementOrSelector.memberName);
     if (elementOrSelector.isGetter) return name;
     if (elementOrSelector.isSetter) {
@@ -511,9 +485,9 @@
       // with each other.
       return " $name";
     }
-    if (elementOrSelector is Selector
-        || elementOrSelector.isFunction
-        || elementOrSelector.isConstructor) {
+    if (elementOrSelector is Selector ||
+        elementOrSelector.isFunction ||
+        elementOrSelector.isConstructor) {
       int positionalParameterCount;
       String namedArguments = '';
       bool isConstructor = false;
@@ -559,8 +533,8 @@
     } else if (element.isTypedef) {
       return element.name;
     }
-    throw reporter.internalError(element,
-        'Do not know how to reflect on this $element.');
+    throw reporter.internalError(
+        element, 'Do not know how to reflect on this $element.');
   }
 
   String namedParametersAsReflectionNames(CallStructure structure) {
@@ -569,43 +543,45 @@
     return ':$names';
   }
 
-  jsAst.Statement buildCspPrecompiledFunctionFor(
-      OutputUnit outputUnit) {
+  jsAst.Statement buildCspPrecompiledFunctionFor(OutputUnit outputUnit) {
     if (compiler.options.useContentSecurityPolicy) {
       // TODO(ahe): Compute a hash code.
       // TODO(sigurdm): Avoid this precompiled function. Generated
       // constructor-functions and getter/setter functions can be stored in the
       // library-description table. Setting properties on these can be moved to
       // finishClasses.
-      return js.statement(r"""
+      return js.statement(
+          r"""
         #precompiled = function ($collectedClasses$) {
           #norename;
           var $desc;
           #functions;
           return #result;
         };""",
-        {'norename': new jsAst.Comment("// ::norenaming:: "),
-         'precompiled': generateEmbeddedGlobalAccess(embeddedNames.PRECOMPILED),
-         'functions': cspPrecompiledFunctionFor(outputUnit),
-         'result': new jsAst.ArrayInitializer(
-               cspPrecompiledConstructorNamesFor(outputUnit))});
+          {
+            'norename': new jsAst.Comment("// ::norenaming:: "),
+            'precompiled':
+                generateEmbeddedGlobalAccess(embeddedNames.PRECOMPILED),
+            'functions': cspPrecompiledFunctionFor(outputUnit),
+            'result': new jsAst.ArrayInitializer(
+                cspPrecompiledConstructorNamesFor(outputUnit))
+          });
     } else {
       return js.comment("Constructors are generated at runtime.");
     }
   }
 
-  void assembleClass(Class cls, ClassBuilder enclosingBuilder,
-                     Fragment fragment) {
+  void assembleClass(
+      Class cls, ClassBuilder enclosingBuilder, Fragment fragment) {
     ClassElement classElement = cls.element;
     reporter.withCurrentElement(classElement, () {
       if (compiler.options.hasIncrementalSupport) {
         ClassBuilder cachedBuilder =
             cachedClassBuilders.putIfAbsent(classElement, () {
-              ClassBuilder builder =
-                  new ClassBuilder.forClass(classElement, namer);
-              classEmitter.emitClass(cls, builder, fragment);
-              return builder;
-            });
+          ClassBuilder builder = new ClassBuilder.forClass(classElement, namer);
+          classEmitter.emitClass(cls, builder, fragment);
+          return builder;
+        });
         invariant(classElement, cachedBuilder.fields.isEmpty);
         invariant(classElement, cachedBuilder.superName == null);
         invariant(classElement, cachedBuilder.functionType == null);
@@ -617,8 +593,8 @@
     });
   }
 
-  void assembleStaticFunctions(Iterable<Method> staticFunctions,
-                               Fragment fragment) {
+  void assembleStaticFunctions(
+      Iterable<Method> staticFunctions, Fragment fragment) {
     if (staticFunctions == null) return;
 
     for (Method method in staticFunctions) {
@@ -628,17 +604,18 @@
       if (element == null) continue;
       ClassBuilder builder = new ClassBuilder.forStatics(element, namer);
       containerBuilder.addMemberMethod(method, builder);
-      getElementDescriptor(element, fragment).properties
+      getElementDescriptor(element, fragment)
+          .properties
           .addAll(builder.properties);
     }
   }
 
   jsAst.Statement buildStaticNonFinalFieldInitializations(
       OutputUnit outputUnit) {
-    jsAst.Statement buildInitialization(Element element,
-                                       jsAst.Expression initialValue) {
+    jsAst.Statement buildInitialization(
+        Element element, jsAst.Expression initialValue) {
       return js.statement('${namer.staticStateHolder}.# = #',
-                          [namer.globalPropertyName(element), initialValue]);
+          [namer.globalPropertyName(element), initialValue]);
     }
 
     bool inMainUnit = (outputUnit == compiler.deferredLoadTask.mainOutputUnit);
@@ -662,7 +639,7 @@
       // variables, so that `isolateProperties` stays a fast object.
       outputStaticNonFinalFieldLists.forEach(
           (OutputUnit fieldsOutputUnit, Iterable<VariableElement> fields) {
-        if (fieldsOutputUnit == outputUnit) return;  // Skip the main unit.
+        if (fieldsOutputUnit == outputUnit) return; // Skip the main unit.
         for (Element element in fields) {
           reporter.withCurrentElement(element, () {
             parts.add(buildInitialization(element, jsAst.number(0)));
@@ -675,12 +652,14 @@
   }
 
   jsAst.Statement buildLazilyInitializedStaticFields(
-      Iterable<StaticField> lazyFields, {bool isMainFragment: true}) {
+      Iterable<StaticField> lazyFields,
+      {bool isMainFragment: true}) {
     if (lazyFields.isNotEmpty) {
       needsLazyInitializer = true;
       List<jsAst.Expression> laziesInfo =
           buildLaziesInfo(lazyFields, isMainFragment);
-      return js.statement('''
+      return js.statement(
+          '''
       (function(lazies) {
         for (var i = 0; i < lazies.length; ) {
           var fieldName = lazies[i++];
@@ -711,11 +690,14 @@
           }
         }
       })(#laziesInfo)
-      ''', {'notMinified': !compiler.options.enableMinification,
+      ''',
+          {
+            'notMinified': !compiler.options.enableMinification,
             'laziesInfo': new jsAst.ArrayInitializer(laziesInfo),
             'lazy': js(lazyInitializerName),
             'isMainFragment': isMainFragment,
-            'isDeferredFragment': !isMainFragment});
+            'isDeferredFragment': !isMainFragment
+          });
     } else {
       return js.comment("No lazy statics.");
     }
@@ -739,8 +721,8 @@
   }
 
   // TODO(sra): Remove this unused function.
-  jsAst.Expression buildLazilyInitializedStaticField(
-      VariableElement element, {String isolateProperties}) {
+  jsAst.Expression buildLazilyInitializedStaticField(VariableElement element,
+      {String isolateProperties}) {
     jsAst.Expression code = backend.generatedCode[element];
     // The code is null if we ended up not needing the lazily
     // initialized field after all because of constant folding
@@ -754,28 +736,31 @@
     if (isolateProperties != null) {
       // This is currently only used in incremental compilation to patch
       // in new lazy values.
-      return js('#(#,#,#,#,#)',
-          [js(lazyInitializerName),
-           js.quoteName(namer.globalPropertyName(element)),
-           js.quoteName(namer.lazyInitializerName(element)),
-           code,
-           js.string(element.name),
-           isolateProperties]);
+      return js('#(#,#,#,#,#)', [
+        js(lazyInitializerName),
+        js.quoteName(namer.globalPropertyName(element)),
+        js.quoteName(namer.lazyInitializerName(element)),
+        code,
+        js.string(element.name),
+        isolateProperties
+      ]);
     }
 
     if (compiler.options.enableMinification) {
-      return js('#(#,#,#)',
-          [js(lazyInitializerName),
-           js.quoteName(namer.globalPropertyName(element)),
-           js.quoteName(namer.lazyInitializerName(element)),
-           code]);
+      return js('#(#,#,#)', [
+        js(lazyInitializerName),
+        js.quoteName(namer.globalPropertyName(element)),
+        js.quoteName(namer.lazyInitializerName(element)),
+        code
+      ]);
     } else {
-      return js('#(#,#,#,#)',
-          [js(lazyInitializerName),
-           js.quoteName(namer.globalPropertyName(element)),
-           js.quoteName(namer.lazyInitializerName(element)),
-           code,
-           js.string(element.name)]);
+      return js('#(#,#,#,#)', [
+        js(lazyInitializerName),
+        js.quoteName(namer.globalPropertyName(element)),
+        js.quoteName(namer.lazyInitializerName(element)),
+        code,
+        js.string(element.name)
+      ]);
     }
   }
 
@@ -790,17 +775,17 @@
       jsAst.Expression typesAccess =
           generateEmbeddedGlobalAccess(embeddedNames.TYPES);
 
-      parts..add(js.statement('# = #;', [metadataAccess, program.metadata]))
-           ..add(js.statement('# = #;', [typesAccess, types]));
+      parts
+        ..add(js.statement('# = #;', [metadataAccess, program.metadata]))
+        ..add(js.statement('# = #;', [typesAccess, types]));
     } else if (types != null) {
-      parts.add(js.statement('var ${namer.deferredTypesName} = #;',
-                             types));
+      parts.add(js.statement('var ${namer.deferredTypesName} = #;', types));
     }
     return new jsAst.Block(parts);
   }
 
   jsAst.Statement buildCompileTimeConstants(List<Constant> constants,
-                                           {bool isMainFragment}) {
+      {bool isMainFragment}) {
     assert(isMainFragment != null);
 
     if (constants.isEmpty) return js.comment("No constants in program.");
@@ -822,9 +807,11 @@
 
   jsAst.Statement buildConstantInitializer(ConstantValue constant) {
     jsAst.Name name = namer.constantName(constant);
-    jsAst.Statement initializer = js.statement('#.# = #',
-                        [namer.globalObjectForConstant(constant), name,
-                         constantInitializerExpression(constant)]);
+    jsAst.Statement initializer = js.statement('#.# = #', [
+      namer.globalObjectForConstant(constant),
+      name,
+      constantInitializerExpression(constant)
+    ]);
     compiler.dumpInfoTask.registerConstantAst(constant, initializer);
     return initializer;
   }
@@ -836,7 +823,8 @@
 
   jsAst.Statement buildMakeConstantList(bool outputContainsConstantList) {
     if (outputContainsConstantList) {
-      return js.statement(r'''
+      return js.statement(
+          r'''
           // Functions are stored in the hidden class and not as properties in
           // the object. We never actually look at the value, but only want
           // to know if the property exists.
@@ -853,13 +841,12 @@
 
   jsAst.Statement buildFunctionThatReturnsNull() {
     return js.statement('#.# = function() {}',
-                        [namer.isolateName,
-                         backend.rtiEncoder.getFunctionThatReturnsNullName]);
+        [namer.isolateName, backend.rtiEncoder.getFunctionThatReturnsNullName]);
   }
 
   jsAst.Expression generateFunctionThatReturnsNull() {
-    return js("#.#", [namer.isolateName,
-                      backend.rtiEncoder.getFunctionThatReturnsNullName]);
+    return js("#.#",
+        [namer.isolateName, backend.rtiEncoder.getFunctionThatReturnsNullName]);
   }
 
   buildMain(jsAst.Statement invokeMain) {
@@ -868,23 +855,25 @@
     List<jsAst.Statement> parts = <jsAst.Statement>[];
 
     if (NativeGenerator.needsIsolateAffinityTagInitialization(backend)) {
-      parts.add(
-          NativeGenerator.generateIsolateAffinityTagInitialization(
-              backend,
-              generateEmbeddedGlobalAccess,
-              js("""
+      parts.add(NativeGenerator.generateIsolateAffinityTagInitialization(
+          backend,
+          generateEmbeddedGlobalAccess,
+          js(
+              """
         // On V8, the 'intern' function converts a string to a symbol, which
         // makes property access much faster.
         function (s) {
           var o = {};
           o[s] = 1;
           return Object.keys(convertToFastObject(o))[0];
-        }""", [])));
+        }""",
+              [])));
     }
 
-    parts..add(js.comment('BEGIN invoke [main].'))
-         ..add(invokeMain)
-         ..add(js.comment('END invoke [main].'));
+    parts
+      ..add(js.comment('BEGIN invoke [main].'))
+      ..add(invokeMain)
+      ..add(js.comment('END invoke [main].'));
 
     return new jsAst.Block(parts);
   }
@@ -905,7 +894,8 @@
     jsAst.Expression laziesAccess =
         generateEmbeddedGlobalAccess(embeddedNames.LAZIES);
 
-    return js.statement('''
+    return js.statement(
+        '''
       function init() {
         $isolatePropertiesName = Object.create(null);
         #allClasses = map();
@@ -1015,20 +1005,24 @@
           return Isolate;
       }
 
-      }''', {'allClasses': allClassesAccess,
-            'getTypeFromName': getTypeFromNameAccess,
-            'interceptorsByTag': interceptorsByTagAccess,
-            'leafTags': leafTagsAccess,
-            'finishedClasses': finishedClassesAccess,
-            'needsLazyInitializer': needsLazyInitializer,
-            'lazies': laziesAccess, 'cyclicThrow': cyclicThrow,
-            'isolatePropertiesName': namer.isolatePropertiesName,
-            'outputContainsConstantList': outputContainsConstantList,
-            'makeConstListProperty': makeConstListProperty,
-            'functionThatReturnsNullProperty':
-                backend.rtiEncoder.getFunctionThatReturnsNullName,
-            'hasIncrementalSupport': compiler.options.hasIncrementalSupport,
-            'lazyInitializerProperty': lazyInitializerProperty,});
+      }''',
+        {
+          'allClasses': allClassesAccess,
+          'getTypeFromName': getTypeFromNameAccess,
+          'interceptorsByTag': interceptorsByTagAccess,
+          'leafTags': leafTagsAccess,
+          'finishedClasses': finishedClassesAccess,
+          'needsLazyInitializer': needsLazyInitializer,
+          'lazies': laziesAccess,
+          'cyclicThrow': cyclicThrow,
+          'isolatePropertiesName': namer.isolatePropertiesName,
+          'outputContainsConstantList': outputContainsConstantList,
+          'makeConstListProperty': makeConstListProperty,
+          'functionThatReturnsNullProperty':
+              backend.rtiEncoder.getFunctionThatReturnsNullName,
+          'hasIncrementalSupport': compiler.options.hasIncrementalSupport,
+          'lazyInitializerProperty': lazyInitializerProperty,
+        });
   }
 
   jsAst.Statement buildConvertToFastObjectFunction() {
@@ -1047,7 +1041,8 @@
         }'''));
     }
 
-    return js.statement(r'''
+    return js.statement(
+        r'''
       function convertToFastObject(properties) {
         // Create an instance that uses 'properties' as prototype. This should
         // make 'properties' a fast object.
@@ -1056,7 +1051,8 @@
         new MyClass();
         #;
         return properties;
-      }''', [debugCode]);
+      }''',
+        [debugCode]);
   }
 
   jsAst.Statement buildConvertToSlowObjectFunction() {
@@ -1092,14 +1088,14 @@
     return supportsDirectProtoAccess;
   }
 
-  jsAst.Expression generateLibraryDescriptor(LibraryElement library,
-                                             Fragment fragment) {
+  jsAst.Expression generateLibraryDescriptor(
+      LibraryElement library, Fragment fragment) {
     var uri = "";
     if (!compiler.options.enableMinification || backend.mustPreserveUris) {
       uri = library.canonicalUri;
       if (uri.scheme == 'file' && compiler.options.outputUri != null) {
-        uri = relativize(
-        compiler.options.outputUri, library.canonicalUri, false);
+        uri =
+            relativize(compiler.options.outputUri, library.canonicalUri, false);
       }
     }
 
@@ -1125,11 +1121,12 @@
     compiler.dumpInfoTask.registerElementAst(library, initializer);
 
     List<jsAst.Expression> parts = <jsAst.Expression>[];
-    parts..add(js.string(libraryName))
-         ..add(js.string(uri.toString()))
-         ..add(metadata == null ? new jsAst.ArrayHole() : metadata)
-         ..add(js('#', namer.globalObjectFor(library)))
-         ..add(initializer);
+    parts
+      ..add(js.string(libraryName))
+      ..add(js.string(uri.toString()))
+      ..add(metadata == null ? new jsAst.ArrayHole() : metadata)
+      ..add(js('#', namer.globalObjectFor(library)))
+      ..add(initializer);
     if (library == compiler.mainApp) {
       parts.add(js.number(1));
     }
@@ -1137,12 +1134,13 @@
     return new jsAst.ArrayInitializer(parts);
   }
 
-  void assemblePrecompiledConstructor(OutputUnit outputUnit,
-                                      jsAst.Name constructorName,
-                                      jsAst.Expression constructorAst,
-                                      List<jsAst.Name> fields) {
-    cspPrecompiledFunctionFor(outputUnit).add(
-        new jsAst.FunctionDeclaration(constructorName, constructorAst));
+  void assemblePrecompiledConstructor(
+      OutputUnit outputUnit,
+      jsAst.Name constructorName,
+      jsAst.Expression constructorAst,
+      List<jsAst.Name> fields) {
+    cspPrecompiledFunctionFor(outputUnit)
+        .add(new jsAst.FunctionDeclaration(constructorName, constructorAst));
 
     String fieldNamesProperty = FIELD_NAMES_PROPERTY_NAME;
     bool hasIsolateSupport = compiler.hasIsolateSupport;
@@ -1154,7 +1152,8 @@
       fieldNamesArray = new jsAst.LiteralNull();
     }
 
-    cspPrecompiledFunctionFor(outputUnit).add(js.statement(r'''
+    cspPrecompiledFunctionFor(outputUnit).add(js.statement(
+        r'''
         {
           #constructorName.#typeNameProperty = #constructorNameString;
           // IE does not have a name property.
@@ -1167,11 +1166,13 @@
             #constructorName.$fieldNamesProperty = #fieldNamesArray;
           }
         }''',
-        {"constructorName": constructorName,
-         "typeNameProperty": typeNameProperty,
-         "constructorNameString": js.quoteName(constructorName),
-         "hasIsolateSupport": hasIsolateSupport,
-         "fieldNamesArray": fieldNamesArray}));
+        {
+          "constructorName": constructorName,
+          "typeNameProperty": typeNameProperty,
+          "constructorNameString": js.quoteName(constructorName),
+          "hasIsolateSupport": hasIsolateSupport,
+          "fieldNamesArray": fieldNamesArray
+        }));
 
     cspPrecompiledConstructorNamesFor(outputUnit).add(js('#', constructorName));
   }
@@ -1192,10 +1193,10 @@
       jsAst.Expression typeIndex =
           task.metadataCollector.reifyType(type, ignoreTypeVariables: true);
       ClassBuilder builder = new ClassBuilder.forStatics(typedef, namer);
-      builder.addPropertyByName(embeddedNames.TYPEDEF_TYPE_PROPERTY_NAME,
-                                typeIndex);
-      builder.addPropertyByName(embeddedNames.TYPEDEF_PREDICATE_PROPERTY_NAME,
-                                js.boolean(true));
+      builder.addPropertyByName(
+          embeddedNames.TYPEDEF_TYPE_PROPERTY_NAME, typeIndex);
+      builder.addPropertyByName(
+          embeddedNames.TYPEDEF_PREDICATE_PROPERTY_NAME, js.boolean(true));
 
       // We can be pretty sure that the objectClass is initialized, since
       // typedefs are only emitted with reflection, which requires lots of
@@ -1206,16 +1207,14 @@
       jsAst.Name mangledName = namer.globalPropertyName(typedef);
       String reflectionName = getReflectionName(typedef, mangledName);
       getElementDescriptor(library, mainFragment)
-          ..addProperty(mangledName, declaration)
-          ..addPropertyByName("+$reflectionName", js.string(''));
+        ..addProperty(mangledName, declaration)
+        ..addPropertyByName("+$reflectionName", js.string(''));
       // Also emit a trivial constructor for CSP mode.
       jsAst.Name constructorName = mangledName;
       jsAst.Expression constructorAst = js('function() {}');
       List<jsAst.Name> fieldNames = [];
-      assemblePrecompiledConstructor(mainOutputUnit,
-                                     constructorName,
-                                     constructorAst,
-                                     fieldNames);
+      assemblePrecompiledConstructor(
+          mainOutputUnit, constructorName, constructorAst, fieldNames);
     }
   }
 
@@ -1234,13 +1233,12 @@
       if (isProgramSplit) {
         String template =
             "var #globalObject = #globalsHolder.#globalObject = map();";
-        parts.add(js.statement(template, {"globalObject": globalObject,
-                                          "globalsHolder": globalsHolder}));
+        parts.add(js.statement(template,
+            {"globalObject": globalObject, "globalsHolder": globalsHolder}));
       } else {
-        parts.add(js.statement("var #globalObject = map();",
-                               {"globalObject": globalObject}));
+        parts.add(js.statement(
+            "var #globalObject = map();", {"globalObject": globalObject}));
       }
-
     }
 
     return new jsAst.Block(parts);
@@ -1292,13 +1290,15 @@
        '''));
 
       for (String object in Namer.userGlobalObjects) {
-        parts.add(js.statement('''
+        parts.add(js.statement(
+            '''
           if (typeof print === "function") {
             print("Size of " + #objectString + ": "
                   + String(Object.getOwnPropertyNames(#object).length)
                   + ", fast properties " + HasFastProperties(#object));
           }
-        ''', {"object": object, "objectString": js.string(object)}));
+        ''',
+            {"object": object, "objectString": js.string(object)}));
       }
     }
 
@@ -1323,8 +1323,7 @@
     }
 
     if (!mangledGlobalFieldNames.isEmpty) {
-      List<jsAst.Name> keys = mangledGlobalFieldNames.keys.toList()
-          ..sort();
+      List<jsAst.Name> keys = mangledGlobalFieldNames.keys.toList()..sort();
       List<jsAst.Property> properties = <jsAst.Property>[];
       for (jsAst.Name key in keys) {
         jsAst.Literal value = js.string(mangledGlobalFieldNames[key]);
@@ -1345,14 +1344,13 @@
       pendingStatics =
           Elements.sortedByPosition(elements.where((e) => !e.isLibrary));
 
-      pendingStatics.forEach((element) =>
-          reporter.reportInfo(
-              element, MessageKind.GENERIC, {'text': 'Pending statics.'}));
+      pendingStatics.forEach((element) => reporter.reportInfo(
+          element, MessageKind.GENERIC, {'text': 'Pending statics.'}));
     }
 
     if (pendingStatics != null && !pendingStatics.isEmpty) {
-      reporter.internalError(pendingStatics.first,
-          'Pending statics (see above).');
+      reporter.internalError(
+          pendingStatics.first, 'Pending statics (see above).');
     }
   }
 
@@ -1384,9 +1382,10 @@
     /// variable. The deferred hunks will add their initialization to this.
     /// The semicolon is important in minified mode, without it the
     /// following parenthesis looks like a call to the object literal.
-    return js.statement('self.#deferredInitializers = '
-                        'self.#deferredInitializers || Object.create(null);',
-                        {'deferredInitializers': deferredInitializers});
+    return js.statement(
+        'self.#deferredInitializers = '
+        'self.#deferredInitializers || Object.create(null);',
+        {'deferredInitializers': deferredInitializers});
   }
 
   jsAst.Program buildOutputAstForMain(Program program,
@@ -1397,8 +1396,7 @@
 
     List<jsAst.Statement> statements = <jsAst.Statement>[];
 
-    statements..add(buildGeneratedBy())
-              ..add(js.comment(HOOKS_API_USAGE));
+    statements..add(buildGeneratedBy())..add(js.comment(HOOKS_API_USAGE));
 
     if (isProgramSplit) {
       statements.add(buildDeferredHeader());
@@ -1420,9 +1418,8 @@
     }
 
     if (descriptors.isNotEmpty) {
-      List<Element> remainingLibraries = descriptors.keys
-      .where((Element e) => e is LibraryElement)
-      .toList();
+      List<Element> remainingLibraries =
+          descriptors.keys.where((Element e) => e is LibraryElement).toList();
 
       // The remaining descriptors are only accessible through reflection.
       // The program builder does not collect libraries that only
@@ -1440,7 +1437,8 @@
 
     // Using a named function here produces easier to read stack traces in
     // Chrome/V8.
-    statements.add(js.statement("""
+    statements.add(js.statement(
+        """
     (function() {
        // No renaming in the top-level function to save the locals for the
        // nested context where they will be used more. We have to put the
@@ -1550,47 +1548,52 @@
 
        #main;
     })();
-    """, {
-      "disableVariableRenaming": js.comment("/* ::norenaming:: */"),
-      "hasIncrementalSupport": compiler.options.hasIncrementalSupport,
-      "helper": js('this.#', [namer.incrementalHelperName]),
-      "schemaChange": buildSchemaChangeFunction(),
-      "addMethod": buildIncrementalAddMethod(),
-      "isProgramSplit": isProgramSplit,
-      "supportsDirectProtoAccess": buildSupportsDirectProtoAccess(),
-      "globalsHolder": globalsHolder,
-      "globalObjectSetup": buildGlobalObjectSetup(isProgramSplit),
-      "isolateName": namer.isolateName,
-      "isolatePropertiesName": js(isolatePropertiesName),
-      "initName": initName,
-      "functionThatReturnsNull": buildFunctionThatReturnsNull(),
-      "mangledNames": buildMangledNames(),
-      "setupProgram": buildSetupProgram(program, compiler, backend, namer, this),
-      "setupProgramName": setupProgramName,
-      "descriptors": descriptorsAst,
-      "cspPrecompiledFunctions": buildCspPrecompiledFunctionFor(mainOutputUnit),
-      "getInterceptorMethods": interceptorEmitter.buildGetInterceptorMethods(),
-      "oneShotInterceptors": interceptorEmitter.buildOneShotInterceptors(),
-      "makeConstantList":
-          buildMakeConstantList(program.outputContainsConstantList),
-      "compileTimeConstants":  buildCompileTimeConstants(mainFragment.constants,
-                                                         isMainFragment: true),
-      "deferredBoilerPlate": buildDeferredBoilerPlate(deferredLoadHashes),
-      "staticNonFinalInitializers": buildStaticNonFinalFieldInitializations(
-          mainOutputUnit),
-      "typeToInterceptorMap":
-          interceptorEmitter.buildTypeToInterceptorMap(program),
-      "lazyStaticFields": buildLazilyInitializedStaticFields(
-          mainFragment.staticLazilyInitializedFields),
-      "metadata": buildMetadata(program, mainOutputUnit),
-      "convertToFastObject": buildConvertToFastObjectFunction(),
-      "convertToSlowObject": buildConvertToSlowObjectFunction(),
-      "convertGlobalObjectsToFastObjects":
-          buildConvertGlobalObjectToFastObjects(),
-      "debugFastObjects": buildDebugFastObjectCode(),
-      "init": buildInitFunction(program.outputContainsConstantList),
-      "main": buildMain(mainFragment.invokeMain)
-    }));
+    """,
+        {
+          "disableVariableRenaming": js.comment("/* ::norenaming:: */"),
+          "hasIncrementalSupport": compiler.options.hasIncrementalSupport,
+          "helper": js('this.#', [namer.incrementalHelperName]),
+          "schemaChange": buildSchemaChangeFunction(),
+          "addMethod": buildIncrementalAddMethod(),
+          "isProgramSplit": isProgramSplit,
+          "supportsDirectProtoAccess": buildSupportsDirectProtoAccess(),
+          "globalsHolder": globalsHolder,
+          "globalObjectSetup": buildGlobalObjectSetup(isProgramSplit),
+          "isolateName": namer.isolateName,
+          "isolatePropertiesName": js(isolatePropertiesName),
+          "initName": initName,
+          "functionThatReturnsNull": buildFunctionThatReturnsNull(),
+          "mangledNames": buildMangledNames(),
+          "setupProgram":
+              buildSetupProgram(program, compiler, backend, namer, this),
+          "setupProgramName": setupProgramName,
+          "descriptors": descriptorsAst,
+          "cspPrecompiledFunctions":
+              buildCspPrecompiledFunctionFor(mainOutputUnit),
+          "getInterceptorMethods":
+              interceptorEmitter.buildGetInterceptorMethods(),
+          "oneShotInterceptors": interceptorEmitter.buildOneShotInterceptors(),
+          "makeConstantList":
+              buildMakeConstantList(program.outputContainsConstantList),
+          "compileTimeConstants": buildCompileTimeConstants(
+              mainFragment.constants,
+              isMainFragment: true),
+          "deferredBoilerPlate": buildDeferredBoilerPlate(deferredLoadHashes),
+          "staticNonFinalInitializers":
+              buildStaticNonFinalFieldInitializations(mainOutputUnit),
+          "typeToInterceptorMap":
+              interceptorEmitter.buildTypeToInterceptorMap(program),
+          "lazyStaticFields": buildLazilyInitializedStaticFields(
+              mainFragment.staticLazilyInitializedFields),
+          "metadata": buildMetadata(program, mainOutputUnit),
+          "convertToFastObject": buildConvertToFastObjectFunction(),
+          "convertToSlowObject": buildConvertToSlowObjectFunction(),
+          "convertGlobalObjectsToFastObjects":
+              buildConvertGlobalObjectToFastObjects(),
+          "debugFastObjects": buildDebugFastObjectCode(),
+          "init": buildInitFunction(program.outputContainsConstantList),
+          "main": buildMain(mainFragment.invokeMain)
+        }));
 
     return new jsAst.Program(statements);
   }
@@ -1603,14 +1606,12 @@
       codeOutputListeners = <CodeOutputListener>[lineColumnCollector];
     }
 
-    CodeOutput mainOutput =
-        new StreamCodeOutput(compiler.outputProvider('', 'js'),
-                             codeOutputListeners);
+    CodeOutput mainOutput = new StreamCodeOutput(
+        compiler.outputProvider('', 'js'), codeOutputListeners);
     outputBuffers[mainOutputUnit] = mainOutput;
 
-
-    mainOutput.addBuffer(jsAst.createCodeBuffer(
-        program, compiler, monitor: compiler.dumpInfoTask));
+    mainOutput.addBuffer(jsAst.createCodeBuffer(program, compiler,
+        monitor: compiler.dumpInfoTask));
 
     if (compiler.options.deferredMapUri != null) {
       outputDeferredMap();
@@ -1774,8 +1775,8 @@
     return outputs;
   }
 
-  void finalizeTokensInAst(jsAst.Program main,
-                           Iterable<jsAst.Program> deferredParts) {
+  void finalizeTokensInAst(
+      jsAst.Program main, Iterable<jsAst.Program> deferredParts) {
     jsAst.TokenCounter counter = new jsAst.TokenCounter();
     counter.countTokens(main);
     deferredParts.forEach(counter.countTokens);
@@ -1794,7 +1795,7 @@
         programBuilder.collector.outputStaticNonFinalFieldLists;
     outputLibraryLists = programBuilder.collector.outputLibraryLists;
     typedefsNeededForReflection =
-       programBuilder.collector.typedefsNeededForReflection;
+        programBuilder.collector.typedefsNeededForReflection;
 
     assembleProgram(program);
 
@@ -1804,11 +1805,9 @@
 
     Map<OutputUnit, _DeferredOutputUnitHash> deferredHashTokens =
         new Map<OutputUnit, _DeferredOutputUnitHash>.fromIterables(
-          deferredParts.keys,
-          deferredParts.keys.map((OutputUnit unit) {
-            return new _DeferredOutputUnitHash(unit);
-          })
-        );
+            deferredParts.keys, deferredParts.keys.map((OutputUnit unit) {
+      return new _DeferredOutputUnitHash(unit);
+    }));
 
     jsAst.Program mainOutput =
         buildOutputAstForMain(program, deferredHashTokens);
@@ -1828,10 +1827,8 @@
     });
     emitMainOutputUnit(program.mainFragment.outputUnit, mainOutput);
 
-    if (backend.requiresPreamble &&
-        !backend.htmlLibraryIsLoaded) {
-      reporter.reportHintMessage(
-          NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
+    if (backend.requiresPreamble && !backend.htmlLibraryIsLoaded) {
+      reporter.reportHintMessage(NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
     }
     // Return the total program size.
     return outputBuffers.values.fold(0, (a, b) => a + b.length);
@@ -1856,8 +1853,7 @@
       // For static (not top level) elements, record their code in a buffer
       // specific to the class. For now, not supported for native classes and
       // native elements.
-      ClassElement cls =
-          element.enclosingClassOrCompilationUnit.declaration;
+      ClassElement cls = element.enclosingClassOrCompilationUnit.declaration;
       if (compiler.codegenWorld.directlyInstantiatedClasses.contains(cls) &&
           !backend.isNative(cls) &&
           compiler.deferredLoadTask.outputUnitForElement(element) ==
@@ -1871,8 +1867,8 @@
     return elementDescriptors
         .putIfAbsent(fragment, () => new Map<Element, ClassBuilder>())
         .putIfAbsent(owner, () {
-          return new ClassBuilder(owner, namer, owner.isClass);
-        });
+      return new ClassBuilder(owner, namer, owner.isClass);
+    });
   }
 
   /// Emits support-code for deferred loading into [output].
@@ -1880,7 +1876,8 @@
       Map<OutputUnit, _DeferredOutputUnitHash> deferredLoadHashes) {
     List<jsAst.Statement> parts = <jsAst.Statement>[];
 
-    parts.add(js.statement('''
+    parts.add(js.statement(
+        '''
         {
           // Function for checking if a hunk is loaded given its hash.
           #isHunkLoaded = function(hunkHash) {
@@ -1898,15 +1895,18 @@
             #deferredInitialized[hunkHash] = true;
           };
         }
-        ''', {"globalsHolder": globalsHolder,
-              "isHunkLoaded": generateEmbeddedGlobalAccess(
-                  embeddedNames.IS_HUNK_LOADED),
-              "isHunkInitialized": generateEmbeddedGlobalAccess(
-                  embeddedNames.IS_HUNK_INITIALIZED),
-              "initializeLoadedHunk": generateEmbeddedGlobalAccess(
-                  embeddedNames.INITIALIZE_LOADED_HUNK),
-              "deferredInitialized": generateEmbeddedGlobalAccess(
-                  embeddedNames.DEFERRED_INITIALIZED)}));
+        ''',
+        {
+          "globalsHolder": globalsHolder,
+          "isHunkLoaded":
+              generateEmbeddedGlobalAccess(embeddedNames.IS_HUNK_LOADED),
+          "isHunkInitialized":
+              generateEmbeddedGlobalAccess(embeddedNames.IS_HUNK_INITIALIZED),
+          "initializeLoadedHunk": generateEmbeddedGlobalAccess(
+              embeddedNames.INITIALIZE_LOADED_HUNK),
+          "deferredInitialized":
+              generateEmbeddedGlobalAccess(embeddedNames.DEFERRED_INITIALIZED)
+        }));
 
     // Write a javascript mapping from Deferred import load ids (derrived
     // from the import prefix.) to a list of lists of uris of hunks to load,
@@ -1916,15 +1916,15 @@
         new Map<String, List<jsAst.LiteralString>>();
     Map<String, List<_DeferredOutputUnitHash>> deferredLibraryHashes =
         new Map<String, List<_DeferredOutputUnitHash>>();
-    compiler.deferredLoadTask.hunksToLoad.forEach(
-                  (String loadId, List<OutputUnit>outputUnits) {
+    compiler.deferredLoadTask.hunksToLoad
+        .forEach((String loadId, List<OutputUnit> outputUnits) {
       List<jsAst.LiteralString> uris = new List<jsAst.LiteralString>();
       List<_DeferredOutputUnitHash> hashes =
           new List<_DeferredOutputUnitHash>();
       deferredLibraryHashes[loadId] = new List<_DeferredOutputUnitHash>();
       for (OutputUnit outputUnit in outputUnits) {
-        uris.add(js.escapedString(
-            backend.deferredPartFileName(outputUnit.name)));
+        uris.add(
+            js.escapedString(backend.deferredPartFileName(outputUnit.name)));
         hashes.add(deferredLoadHashes[outputUnit]);
       }
 
@@ -1935,8 +1935,8 @@
     void emitMapping(String name, Map<String, List<jsAst.Expression>> mapping) {
       List<jsAst.Property> properties = new List<jsAst.Property>();
       mapping.forEach((String key, List<jsAst.Expression> values) {
-        properties.add(new jsAst.Property(js.escapedString(key),
-            new jsAst.ArrayInitializer(values)));
+        properties.add(new jsAst.Property(
+            js.escapedString(key), new jsAst.ArrayInitializer(values)));
       });
       jsAst.Node initializer =
           new jsAst.ObjectInitializer(properties, isOneLiner: true);
@@ -1946,13 +1946,12 @@
     }
 
     emitMapping(embeddedNames.DEFERRED_LIBRARY_URIS, deferredLibraryUris);
-    emitMapping(embeddedNames.DEFERRED_LIBRARY_HASHES,
-                deferredLibraryHashes);
+    emitMapping(embeddedNames.DEFERRED_LIBRARY_HASHES, deferredLibraryHashes);
 
     return new jsAst.Block(parts);
   }
 
-  Map <OutputUnit, jsAst.Program> buildOutputAstForDeferredCode(
+  Map<OutputUnit, jsAst.Program> buildOutputAstForDeferredCode(
       Program program) {
     if (!program.isSplit) return const <OutputUnit, jsAst.Program>{};
 
@@ -1973,17 +1972,19 @@
 
       for (String globalObject in Namer.reservedGlobalObjectNames) {
         body.add(js.statement('var #object = #globalsHolder.#object;',
-                              {'globalsHolder': globalsHolder,
-                               'object': globalObject}));
+            {'globalsHolder': globalsHolder, 'object': globalObject}));
       }
-      body..add(js.statement('var init = #globalsHolder.init;',
-                             {'globalsHolder': globalsHolder}))
-          ..add(js.statement('var $setupProgramName = '
-                             '#globalsHolder.$setupProgramName;',
-                             {'globalsHolder': globalsHolder}))
-          ..add(js.statement('var ${namer.isolateName} = '
-                             '#globalsHolder.${namer.isolateName};',
-                             {'globalsHolder': globalsHolder}));
+      body
+        ..add(js.statement('var init = #globalsHolder.init;',
+            {'globalsHolder': globalsHolder}))
+        ..add(js.statement(
+            'var $setupProgramName = '
+            '#globalsHolder.$setupProgramName;',
+            {'globalsHolder': globalsHolder}))
+        ..add(js.statement(
+            'var ${namer.isolateName} = '
+            '#globalsHolder.${namer.isolateName};',
+            {'globalsHolder': globalsHolder}));
       String typesAccess =
           generateEmbeddedGlobalAccessString(embeddedNames.TYPES);
       if (libraryDescriptor != null) {
@@ -1999,26 +2000,30 @@
             js.statement('$setupProgramName(dart, ${typesAccess}.length);'));
       }
 
-      body..add(buildMetadata(program, outputUnit))
-          ..add(js.statement('${typesAccess}.push.apply(${typesAccess}, '
-                             '${namer.deferredTypesName});'));
+      body
+        ..add(buildMetadata(program, outputUnit))
+        ..add(js.statement('${typesAccess}.push.apply(${typesAccess}, '
+            '${namer.deferredTypesName});'));
 
-      body.add(buildCompileTimeConstants(fragment.constants,
-                                         isMainFragment: false));
+      body.add(
+          buildCompileTimeConstants(fragment.constants, isMainFragment: false));
       body.add(buildStaticNonFinalFieldInitializations(outputUnit));
       body.add(buildLazilyInitializedStaticFields(
-          fragment.staticLazilyInitializedFields, isMainFragment: false));
+          fragment.staticLazilyInitializedFields,
+          isMainFragment: false));
 
       List<jsAst.Statement> statements = <jsAst.Statement>[];
 
       statements
-          ..add(buildGeneratedBy())
-          ..add(buildDeferredHeader())
-          ..add(js.statement('${deferredInitializers}.current = '
-                             """function (#, ${namer.staticStateHolder}) {
+        ..add(buildGeneratedBy())
+        ..add(buildDeferredHeader())
+        ..add(js.statement(
+            '${deferredInitializers}.current = '
+            """function (#, ${namer.staticStateHolder}) {
                                   #
                                 }
-                             """, [globalsHolder, body]));
+                             """,
+            [globalsHolder, body]));
 
       result[outputUnit] = new jsAst.Program(statements);
     }
@@ -2032,7 +2037,6 @@
   /// itself.
   Map<OutputUnit, String> emitDeferredOutputUnits(
       Map<OutputUnit, jsAst.Program> outputAsts) {
-
     Map<OutputUnit, String> hunkHashes = new Map<OutputUnit, String>();
 
     for (OutputUnit outputUnit in outputAsts.keys) {
@@ -2049,13 +2053,12 @@
       String partPrefix =
           backend.deferredPartFileName(outputUnit.name, addExtension: false);
       CodeOutput output = new StreamCodeOutput(
-          compiler.outputProvider(partPrefix, 'part.js'),
-          outputListeners);
+          compiler.outputProvider(partPrefix, 'part.js'), outputListeners);
 
       outputBuffers[outputUnit] = output;
 
-      output.addBuffer(jsAst.createCodeBuffer(
-          outputAsts[outputUnit], compiler, monitor: compiler.dumpInfoTask));
+      output.addBuffer(jsAst.createCodeBuffer(outputAsts[outputUnit], compiler,
+          monitor: compiler.dumpInfoTask));
 
       // Make a unique hash of the code (before the sourcemaps are added)
       // This will be used to retrieve the initializing function from the global
@@ -2063,7 +2066,7 @@
       String hash = hasher.getHash();
 
       output.add('$N${deferredInitializers}["$hash"]$_=$_'
-                       '${deferredInitializers}.current$N');
+          '${deferredInitializers}.current$N');
 
       if (generateSourceMap) {
         Uri mapUri, partUri;
@@ -2076,22 +2079,21 @@
           String mapFileName = partName + ".js.map";
           List<String> mapSegments = sourceMapUri.pathSegments.toList();
           mapSegments[mapSegments.length - 1] = mapFileName;
-          mapUri = compiler.options.sourceMapUri
-              .replace(pathSegments: mapSegments);
+          mapUri =
+              compiler.options.sourceMapUri.replace(pathSegments: mapSegments);
         }
 
         if (outputUri != null) {
           String partFileName = partName + ".js";
           List<String> partSegments = outputUri.pathSegments.toList();
           partSegments[partSegments.length - 1] = partFileName;
-          partUri = compiler.options.outputUri.replace(
-              pathSegments: partSegments);
+          partUri =
+              compiler.options.outputUri.replace(pathSegments: partSegments);
         }
 
         output.add(generateSourceMapTag(mapUri, partUri));
         output.close();
-        outputSourceMap(output, lineColumnCollector, partName,
-                        mapUri, partUri);
+        outputSourceMap(output, lineColumnCollector, partName, mapUri, partUri);
       } else {
         output.close();
       }
@@ -2108,21 +2110,19 @@
     return new jsAst.Comment(generatedBy(compiler, flavor: options.join(", ")));
   }
 
-  void outputSourceMap(CodeOutput output,
-                       LineColumnProvider lineColumnProvider,
-                       String name,
-                       [Uri sourceMapUri,
-                        Uri fileUri]) {
+  void outputSourceMap(
+      CodeOutput output, LineColumnProvider lineColumnProvider, String name,
+      [Uri sourceMapUri, Uri fileUri]) {
     if (!generateSourceMap) return;
     // Create a source file for the compilation output. This allows using
     // [:getLine:] to transform offsets to line numbers in [SourceMapBuilder].
     SourceMapBuilder sourceMapBuilder =
-            new SourceMapBuilder(sourceMapUri, fileUri, lineColumnProvider);
+        new SourceMapBuilder(sourceMapUri, fileUri, lineColumnProvider);
     output.forEachSourceLocation(sourceMapBuilder.addMapping);
     String sourceMap = sourceMapBuilder.build();
     compiler.outputProvider(name, 'js.map')
-        ..add(sourceMap)
-        ..close();
+      ..add(sourceMap)
+      ..close();
   }
 
   void outputDeferredMap() {
@@ -2133,9 +2133,9 @@
         "needed for a given deferred library import.";
     mapping.addAll(compiler.deferredLoadTask.computeDeferredMap());
     compiler.outputProvider(
-            compiler.options.deferredMapUri.path, 'deferred_map')
-        ..add(const JsonEncoder.withIndent("  ").convert(mapping))
-        ..close();
+        compiler.options.deferredMapUri.path, 'deferred_map')
+      ..add(const JsonEncoder.withIndent("  ").convert(mapping))
+      ..close();
   }
 
   void invalidateCaches() {
@@ -2146,7 +2146,6 @@
         cachedClassBuilders.remove(element.enclosingClass);
 
         nativeEmitter.cachedBuilders.remove(element.enclosingClass);
-
       }
     }
   }
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/interceptor_emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/interceptor_emitter.dart
index 573dc34..51f06f8 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/interceptor_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/interceptor_emitter.dart
@@ -5,18 +5,17 @@
 part of dart2js.js_emitter.full_emitter;
 
 class InterceptorEmitter extends CodeEmitterHelper {
-  final Set<jsAst.Name> interceptorInvocationNames =
-      new Set<jsAst.Name>();
+  final Set<jsAst.Name> interceptorInvocationNames = new Set<jsAst.Name>();
 
-  void recordMangledNameOfMemberMethod(FunctionElement member,
-                                       jsAst.Name name) {
+  void recordMangledNameOfMemberMethod(
+      FunctionElement member, jsAst.Name name) {
     if (backend.isInterceptedMethod(member)) {
       interceptorInvocationNames.add(name);
     }
   }
 
-  jsAst.Expression buildGetInterceptorMethod(jsAst.Name key,
-                                             Set<ClassElement> classes) {
+  jsAst.Expression buildGetInterceptorMethod(
+      jsAst.Name key, Set<ClassElement> classes) {
     InterceptorStubGenerator stubGenerator =
         new InterceptorStubGenerator(compiler, namer, backend);
     jsAst.Expression function =
@@ -35,15 +34,14 @@
 
     Map<jsAst.Name, Set<ClassElement>> specializedGetInterceptors =
         backend.specializedGetInterceptors;
-    List<jsAst.Name> names = specializedGetInterceptors.keys.toList()
-        ..sort();
+    List<jsAst.Name> names = specializedGetInterceptors.keys.toList()..sort();
     for (jsAst.Name name in names) {
       Set<ClassElement> classes = specializedGetInterceptors[name];
-      parts.add(
-          js.statement('#.# = #',
-              [namer.globalObjectFor(backend.helpers.interceptorsLibrary),
-               name,
-               buildGetInterceptorMethod(name, classes)]));
+      parts.add(js.statement('#.# = #', [
+        namer.globalObjectFor(backend.helpers.interceptorsLibrary),
+        name,
+        buildGetInterceptorMethod(name, classes)
+      ]));
     }
 
     return new jsAst.Block(parts);
@@ -52,7 +50,7 @@
   jsAst.Statement buildOneShotInterceptors() {
     List<jsAst.Statement> parts = <jsAst.Statement>[];
     Iterable<jsAst.Name> names = backend.oneShotInterceptors.keys.toList()
-        ..sort();
+      ..sort();
 
     InterceptorStubGenerator stubGenerator =
         new InterceptorStubGenerator(compiler, namer, backend);
@@ -81,7 +79,8 @@
     if (!compiler.enabledInvokeOn) return null;
 
     Iterable<jsAst.Name> invocationNames = interceptorInvocationNames.toList()
-        ..sort();;
+      ..sort();
+    ;
     List<jsAst.Property> properties = invocationNames.map((jsAst.Name name) {
       return new jsAst.Property(js.quoteName(name), js.number(1));
     }).toList();
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart
index d342642..906eb73 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart
@@ -19,22 +19,20 @@
   static const MAX_MINIFIED_LENGTH_FOR_DIFF_ENCODING = 4;
 
   void emitNoSuchMethodHandlers(AddPropertyFunction addProperty) {
-
     ClassStubGenerator generator =
         new ClassStubGenerator(compiler, namer, backend);
 
     // Keep track of the JavaScript names we've already added so we
     // do not introduce duplicates (bad for code size).
-    Map<jsAst.Name, Selector> addedJsNames
-        = generator.computeSelectorsForNsmHandlers();
+    Map<jsAst.Name, Selector> addedJsNames =
+        generator.computeSelectorsForNsmHandlers();
 
     // Set flag used by generateMethod helper below.  If we have very few
     // handlers we use addProperty for them all, rather than try to generate
     // them at runtime.
     bool haveVeryFewNoSuchMemberHandlers =
         (addedJsNames.length < VERY_FEW_NO_SUCH_METHOD_HANDLERS);
-    List<jsAst.Name> names = addedJsNames.keys.toList()
-        ..sort();
+    List<jsAst.Name> names = addedJsNames.keys.toList()..sort();
     for (jsAst.Name jsName in names) {
       Selector selector = addedJsNames[jsName];
       String reflectionName = emitter.getReflectionName(selector, jsName);
@@ -43,9 +41,10 @@
         emitter.mangledFieldNames[jsName] = reflectionName;
       }
 
-      List<jsAst.Expression> argNames =
-          selector.callStructure.getOrderedNamedArguments().map((String name) =>
-              js.string(name)).toList();
+      List<jsAst.Expression> argNames = selector.callStructure
+          .getOrderedNamedArguments()
+          .map((String name) => js.string(name))
+          .toList();
       int type = selector.invocationMirrorKind;
       if (!haveVeryFewNoSuchMemberHandlers &&
           isTrivialNsmHandler(type, argNames, selector, jsName) &&
@@ -56,11 +55,11 @@
             generator.generateStubForNoSuchMethod(jsName, selector);
         addProperty(method.name, method.code);
         if (reflectionName != null) {
-          bool accessible =
-              compiler.world.allFunctions.filter(selector, null).any(
-              (Element e) => backend.isAccessibleByReflection(e));
-          addProperty(namer.asName('+$reflectionName'),
-                      js(accessible ? '2' : '0'));
+          bool accessible = compiler.world.allFunctions
+              .filter(selector, null)
+              .any((Element e) => backend.isAccessibleByReflection(e));
+          addProperty(
+              namer.asName('+$reflectionName'), js(accessible ? '2' : '0'));
         }
       }
     }
@@ -127,10 +126,10 @@
 
     // Find out how many selectors there are with the special calling
     // convention.
-    Iterable<Selector> interceptedSelectors = trivialNsmHandlers.where(
-            (Selector s) => backend.isInterceptedName(s.name));
-    Iterable<Selector> ordinarySelectors = trivialNsmHandlers.where(
-            (Selector s) => !backend.isInterceptedName(s.name));
+    Iterable<Selector> interceptedSelectors = trivialNsmHandlers
+        .where((Selector s) => backend.isInterceptedName(s.name));
+    Iterable<Selector> ordinarySelectors = trivialNsmHandlers
+        .where((Selector s) => !backend.isInterceptedName(s.name));
 
     // Get the short names (JS names, perhaps minified).
     Iterable<jsAst.Name> interceptedShorts =
@@ -142,20 +141,19 @@
     Iterable<String> sortedLongs;
     if (useDiffEncoding) {
       assert(minify);
-      sortedShorts = new _DiffEncodedListOfNames(
-          [interceptedShorts, ordinaryShorts]);
+      sortedShorts =
+          new _DiffEncodedListOfNames([interceptedShorts, ordinaryShorts]);
     } else {
       Iterable<Selector> sorted =
           [interceptedSelectors, ordinarySelectors].expand((e) => (e));
       sortedShorts = js.concatenateStrings(
-          js.joinLiterals(
-              sorted.map(namer.invocationMirrorInternalName),
+          js.joinLiterals(sorted.map(namer.invocationMirrorInternalName),
               js.stringPart(",")),
           addQuotes: true);
 
       if (!minify) {
-        sortedLongs = sorted.map((selector) =>
-            selector.invocationMirrorMemberName);
+        sortedLongs =
+            sorted.map((selector) => selector.invocationMirrorMemberName);
       }
     }
     // Startup code that loops over the method names and puts handlers on the
@@ -164,7 +162,8 @@
     jsAst.Expression createInvocationMirror = backend.emitter
         .staticFunctionAccess(backend.helpers.createInvocationMirror);
     if (useDiffEncoding) {
-      statements.add(js.statement('''{
+      statements.add(js.statement(
+          '''{
           var objectClassObject = processedClasses.collected[#objectClass],
               nameSequences = #diffEncoding.split("."),
               shortNames = [];
@@ -204,32 +203,37 @@
               Array.prototype.push.apply(shortNames, sequence.shift());
             }
           }
-        }''', {'objectClass': js.quoteName(namer.className(objectClass)),
-               'diffEncoding': sortedShorts}));
+        }''',
+          {
+            'objectClass': js.quoteName(namer.className(objectClass)),
+            'diffEncoding': sortedShorts
+          }));
     } else {
       // No useDiffEncoding version.
       statements.add(js.statement(
           'var objectClassObject = processedClasses.collected[#objectClass],'
           '    shortNames = #diffEncoding.split(",")',
-          {'objectClass': js.quoteName(namer.className(objectClass)),
-           'diffEncoding': sortedShorts}));
+          {
+            'objectClass': js.quoteName(namer.className(objectClass)),
+            'diffEncoding': sortedShorts
+          }));
       if (!minify) {
         statements.add(js.statement('var longNames = #longs.split(",")',
-                {'longs': js.string(sortedLongs.join(','))}));
+            {'longs': js.string(sortedLongs.join(','))}));
       }
-      statements.add(js.statement(
-          'if (objectClassObject instanceof Array)'
+      statements.add(js.statement('if (objectClassObject instanceof Array)'
           '  objectClassObject = objectClassObject[1];'));
     }
 
-    dynamic isIntercepted =  // jsAst.Expression or bool.
+    dynamic isIntercepted = // jsAst.Expression or bool.
         interceptedSelectors.isEmpty
         ? false
         : ordinarySelectors.isEmpty
             ? true
             : js('j < #', js.number(interceptedSelectors.length));
 
-    statements.add(js.statement('''
+    statements.add(js.statement(
+        '''
       // If we are loading a deferred library the object class will not be in
       // the collectedClasses so objectClassObject is undefined, and we skip
       // setting up the names.
@@ -276,11 +280,13 @@
                  })(#names[j], shortName, type);
           }
         }
-      }''', {
+      }''',
+        {
           'noSuchMethodName': namer.noSuchMethodName,
           'createInvocationMirror': createInvocationMirror,
           'names': minify ? 'shortNames' : 'longNames',
-          'isIntercepted': isIntercepted}));
+          'isIntercepted': isIntercepted
+        }));
 
     return statements;
   }
@@ -291,7 +297,7 @@
 ///
 /// See [buildTrivialNsmHandlers].
 class _DiffEncodedListOfNames extends jsAst.DeferredString
-                              implements jsAst.AstContainer {
+    implements jsAst.AstContainer {
   String _cachedValue;
   List<jsAst.ArrayInitializer> ast;
 
@@ -300,12 +306,13 @@
   _DiffEncodedListOfNames(Iterable<Iterable<jsAst.Name>> names) {
     // Store the names in ArrayInitializer nodes to make them discoverable
     // by traversals of the ast.
-    ast = names.map((Iterable i) => new jsAst.ArrayInitializer(i.toList()))
-               .toList();
+    ast = names
+        .map((Iterable i) => new jsAst.ArrayInitializer(i.toList()))
+        .toList();
   }
 
-  void _computeDiffEncodingForList(Iterable<jsAst.Name> names,
-                                   StringBuffer diffEncoding) {
+  void _computeDiffEncodingForList(
+      Iterable<jsAst.Name> names, StringBuffer diffEncoding) {
     // Treat string as a number in base 88 with digits in ASCII order from # to
     // z.  The short name sorting is based on length, and uses ASCII order for
     // equal length strings so this means that names are ascending.  The hash
@@ -344,10 +351,8 @@
       return a.compareTo(b);
     }
 
-    List<String> shorts =
-        names.map((jsAst.Name name) => name.name)
-        .toList()
-        ..sort(compare);
+    List<String> shorts = names.map((jsAst.Name name) => name.name).toList()
+      ..sort(compare);
 
     int previous = 0;
     for (String short in shorts) {
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
index 2481d12..3eb4c8c 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/setup_program_builder.dart
@@ -16,21 +16,18 @@
 
 const RANGE1_SIZE = RANGE1_LAST - RANGE1_FIRST + 1;
 const RANGE2_SIZE = RANGE2_LAST - RANGE2_FIRST + 1;
-const RANGE1_ADJUST = - (FIRST_FIELD_CODE - RANGE1_FIRST);
-const RANGE2_ADJUST = - (FIRST_FIELD_CODE + RANGE1_SIZE - RANGE2_FIRST);
+const RANGE1_ADJUST = -(FIRST_FIELD_CODE - RANGE1_FIRST);
+const RANGE2_ADJUST = -(FIRST_FIELD_CODE + RANGE1_SIZE - RANGE2_FIRST);
 const RANGE3_ADJUST =
-    - (FIRST_FIELD_CODE + RANGE1_SIZE + RANGE2_SIZE - RANGE3_FIRST);
+    -(FIRST_FIELD_CODE + RANGE1_SIZE + RANGE2_SIZE - RANGE3_FIRST);
 
-const String setupProgramName ='setupProgram';
+const String setupProgramName = 'setupProgram';
 // TODO(floitsch): make sure this property can't clash with anything. It's
 //   unlikely since it lives on types, but still.
 const String typeNameProperty = r'builtin$cls';
 
 jsAst.Statement buildSetupProgram(Program program, Compiler compiler,
-                                JavaScriptBackend backend,
-                                Namer namer,
-                                Emitter emitter) {
-
+    JavaScriptBackend backend, Namer namer, Emitter emitter) {
   jsAst.Expression typeInformationAccess =
       emitter.generateEmbeddedGlobalAccess(embeddedNames.TYPE_INFORMATION);
   jsAst.Expression globalFunctionsAccess =
@@ -61,15 +58,12 @@
       emitter.generateEmbeddedGlobalAccess(embeddedNames.INTERCEPTORS_BY_TAG);
   jsAst.Expression leafTagsAccess =
       emitter.generateEmbeddedGlobalAccess(embeddedNames.LEAF_TAGS);
-  jsAst.Expression initializeEmptyInstanceAccess =
-      emitter.generateEmbeddedGlobalAccess(
-            embeddedNames.INITIALIZE_EMPTY_INSTANCE);
-  jsAst.Expression classFieldsExtractorAccess =
-      emitter.generateEmbeddedGlobalAccess(
-          embeddedNames.CLASS_FIELDS_EXTRACTOR);
-  jsAst.Expression instanceFromClassIdAccess =
-      emitter.generateEmbeddedGlobalAccess(
-          embeddedNames.INSTANCE_FROM_CLASS_ID);
+  jsAst.Expression initializeEmptyInstanceAccess = emitter
+      .generateEmbeddedGlobalAccess(embeddedNames.INITIALIZE_EMPTY_INSTANCE);
+  jsAst.Expression classFieldsExtractorAccess = emitter
+      .generateEmbeddedGlobalAccess(embeddedNames.CLASS_FIELDS_EXTRACTOR);
+  jsAst.Expression instanceFromClassIdAccess = emitter
+      .generateEmbeddedGlobalAccess(embeddedNames.INSTANCE_FROM_CLASS_ID);
 
   String reflectableField = namer.reflectableField;
   String reflectionInfoField = namer.reflectionInfoField;
@@ -81,73 +75,76 @@
   String unmangledNameIndex = backend.mustRetainMetadata
       ? ' 3 * optionalParameterCount + 2 * requiredParameterCount + 3'
       : ' 2 * optionalParameterCount + requiredParameterCount + 3';
-  String receiverParamName = compiler.options.enableMinification
-      ? "r" : "receiver";
+  String receiverParamName =
+      compiler.options.enableMinification ? "r" : "receiver";
   String valueParamName = compiler.options.enableMinification ? "v" : "value";
   String space = compiler.options.enableMinification ? "" : " ";
   String _ = space;
 
-  String specProperty = '"${namer.nativeSpecProperty}"';  // "%"
+  String specProperty = '"${namer.nativeSpecProperty}"'; // "%"
   jsAst.Expression nativeInfoAccess = js('prototype[$specProperty]', []);
   jsAst.Expression constructorAccess = js('constructor', []);
   Function subclassReadGenerator =
       (jsAst.Expression subclass) => js('allClasses[#]', subclass);
-  jsAst.Statement nativeInfoHandler = emitter.
-      buildNativeInfoHandler(nativeInfoAccess, constructorAccess,
-                             subclassReadGenerator, interceptorsByTagAccess,
-                             leafTagsAccess);
+  jsAst.Statement nativeInfoHandler = emitter.buildNativeInfoHandler(
+      nativeInfoAccess,
+      constructorAccess,
+      subclassReadGenerator,
+      interceptorsByTagAccess,
+      leafTagsAccess);
 
-  Map<String, dynamic> holes =
-    {'needsClassSupport': emitter.needsClassSupport,
-     'libraries': librariesAccess,
-     'mangledNames': mangledNamesAccess,
-     'mangledGlobalNames': mangledGlobalNamesAccess,
-     'statics': staticsAccess,
-     'staticsPropertyName': namer.staticsPropertyName,
-     'staticsPropertyNameString': js.quoteName(namer.staticsPropertyName),
-     'typeInformation': typeInformationAccess,
-     'globalFunctions': globalFunctionsAccess,
-     'enabledInvokeOn': compiler.enabledInvokeOn,
-     'interceptedNames': interceptedNamesAccess,
-     'interceptedNamesSet': emitter.generateInterceptedNamesSet(),
-     'notInCspMode': !compiler.options.useContentSecurityPolicy,
-     'inCspMode': compiler.options.useContentSecurityPolicy,
-     'deferredAction': namer.deferredAction,
-     'hasIsolateSupport': program.hasIsolateSupport,
-     'fieldNamesProperty': js.string(Emitter.FIELD_NAMES_PROPERTY_NAME),
-     'hasIncrementalSupport': compiler.options.hasIncrementalSupport,
-     'incrementalHelper': namer.accessIncrementalHelper,
-     'createNewIsolateFunction': createNewIsolateFunctionAccess,
-     'isolateName': namer.isolateName,
-     'classIdExtractor': classIdExtractorAccess,
-     'classFieldsExtractor': classFieldsExtractorAccess,
-     'instanceFromClassId': instanceFromClassIdAccess,
-     'initializeEmptyInstance': initializeEmptyInstanceAccess,
-     'allClasses': allClassesAccess,
-     'debugFastObjects': DEBUG_FAST_OBJECTS,
-     'isTreeShakingDisabled': backend.isTreeShakingDisabled,
-     'precompiled': precompiledAccess,
-     'finishedClassesAccess': finishedClassesAccess,
-     'needsMixinSupport': emitter.needsMixinSupport,
-     'needsNativeSupport': program.needsNativeSupport,
-     'enabledJsInterop': backend.jsInteropAnalysis.enabledJsInterop,
-     'jsInteropBoostrap':backend.jsInteropAnalysis.buildJsInteropBootstrap(),
-     'isInterceptorClass': namer.operatorIs(backend.helpers.jsInterceptorClass),
-     'isObject' : namer.operatorIs(compiler.coreClasses.objectClass),
-     'specProperty': js.string(namer.nativeSpecProperty),
-     'trivialNsmHandlers': emitter.buildTrivialNsmHandlers(),
-     'hasRetainedMetadata': backend.hasRetainedMetadata,
-     'types': typesAccess,
-     'objectClassName': js.quoteName(
-         namer.runtimeTypeName(compiler.coreClasses.objectClass)),
-     'needsStructuredMemberInfo': emitter.needsStructuredMemberInfo,
-     'usesMangledNames':
-          compiler.mirrorsLibrary != null || compiler.enabledFunctionApply,
-     'tearOffCode': buildTearOffCode(backend),
-     'nativeInfoHandler': nativeInfoHandler,
-     'operatorIsPrefix' : js.string(namer.operatorIsPrefix),
-     'deferredActionString': js.string(namer.deferredAction)};
-   String skeleton = '''
+  Map<String, dynamic> holes = {
+    'needsClassSupport': emitter.needsClassSupport,
+    'libraries': librariesAccess,
+    'mangledNames': mangledNamesAccess,
+    'mangledGlobalNames': mangledGlobalNamesAccess,
+    'statics': staticsAccess,
+    'staticsPropertyName': namer.staticsPropertyName,
+    'staticsPropertyNameString': js.quoteName(namer.staticsPropertyName),
+    'typeInformation': typeInformationAccess,
+    'globalFunctions': globalFunctionsAccess,
+    'enabledInvokeOn': compiler.enabledInvokeOn,
+    'interceptedNames': interceptedNamesAccess,
+    'interceptedNamesSet': emitter.generateInterceptedNamesSet(),
+    'notInCspMode': !compiler.options.useContentSecurityPolicy,
+    'inCspMode': compiler.options.useContentSecurityPolicy,
+    'deferredAction': namer.deferredAction,
+    'hasIsolateSupport': program.hasIsolateSupport,
+    'fieldNamesProperty': js.string(Emitter.FIELD_NAMES_PROPERTY_NAME),
+    'hasIncrementalSupport': compiler.options.hasIncrementalSupport,
+    'incrementalHelper': namer.accessIncrementalHelper,
+    'createNewIsolateFunction': createNewIsolateFunctionAccess,
+    'isolateName': namer.isolateName,
+    'classIdExtractor': classIdExtractorAccess,
+    'classFieldsExtractor': classFieldsExtractorAccess,
+    'instanceFromClassId': instanceFromClassIdAccess,
+    'initializeEmptyInstance': initializeEmptyInstanceAccess,
+    'allClasses': allClassesAccess,
+    'debugFastObjects': DEBUG_FAST_OBJECTS,
+    'isTreeShakingDisabled': backend.isTreeShakingDisabled,
+    'precompiled': precompiledAccess,
+    'finishedClassesAccess': finishedClassesAccess,
+    'needsMixinSupport': emitter.needsMixinSupport,
+    'needsNativeSupport': program.needsNativeSupport,
+    'enabledJsInterop': backend.jsInteropAnalysis.enabledJsInterop,
+    'jsInteropBoostrap': backend.jsInteropAnalysis.buildJsInteropBootstrap(),
+    'isInterceptorClass': namer.operatorIs(backend.helpers.jsInterceptorClass),
+    'isObject': namer.operatorIs(compiler.coreClasses.objectClass),
+    'specProperty': js.string(namer.nativeSpecProperty),
+    'trivialNsmHandlers': emitter.buildTrivialNsmHandlers(),
+    'hasRetainedMetadata': backend.hasRetainedMetadata,
+    'types': typesAccess,
+    'objectClassName':
+        js.quoteName(namer.runtimeTypeName(compiler.coreClasses.objectClass)),
+    'needsStructuredMemberInfo': emitter.needsStructuredMemberInfo,
+    'usesMangledNames':
+        compiler.mirrorsLibrary != null || compiler.enabledFunctionApply,
+    'tearOffCode': buildTearOffCode(backend),
+    'nativeInfoHandler': nativeInfoHandler,
+    'operatorIsPrefix': js.string(namer.operatorIsPrefix),
+    'deferredActionString': js.string(namer.deferredAction)
+  };
+  String skeleton = '''
 function $setupProgramName(programData, typesOffset) {
   "use strict";
   if (#needsClassSupport) {
@@ -835,14 +832,16 @@
 
 String readInt(String array, String index) {
   return readChecked(
-      array, index,
+      array,
+      index,
       'result != null && (typeof result != "number" || (result|0) !== result)',
       'int');
 }
 
 String readFunctionType(String array, String index) {
   return readChecked(
-      array, index,
+      array,
+      index,
       'result != null && '
       '(typeof result != "number" || (result|0) !== result) && '
       'typeof result != "function"',
diff --git a/pkg/compiler/lib/src/js_emitter/headers.dart b/pkg/compiler/lib/src/js_emitter/headers.dart
index 2d15d11..2bdb761 100644
--- a/pkg/compiler/lib/src/js_emitter/headers.dart
+++ b/pkg/compiler/lib/src/js_emitter/headers.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 library dart2js.js_emitter.headers;
+
 import '../compiler.dart' show Compiler;
 
 String generatedBy(Compiler compiler, {String flavor: ""}) {
diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
index 73eeeb74..1ccb101 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -30,13 +30,13 @@
       if (cls == helpers.jsBoolClass) {
         condition = js('(typeof receiver) == "boolean"');
       } else if (cls == helpers.jsIntClass ||
-                 cls == helpers.jsDoubleClass ||
-                 cls == helpers.jsNumberClass) {
+          cls == helpers.jsDoubleClass ||
+          cls == helpers.jsNumberClass) {
         throw 'internal error';
       } else if (cls == helpers.jsArrayClass ||
-                 cls == helpers.jsMutableArrayClass ||
-                 cls == helpers.jsFixedArrayClass ||
-                 cls == helpers.jsExtendableArrayClass) {
+          cls == helpers.jsMutableArrayClass ||
+          cls == helpers.jsFixedArrayClass ||
+          cls == helpers.jsExtendableArrayClass) {
         condition = js('receiver.constructor == Array');
       } else if (cls == helpers.jsStringClass) {
         condition = js('(typeof receiver) == "string"');
@@ -56,20 +56,27 @@
     bool hasNumber = false;
     bool hasString = false;
     bool hasNative = false;
-    bool anyNativeClasses = compiler.enqueuer.codegen.nativeEnqueuer
-          .hasInstantiatedNativeClasses();
+    bool anyNativeClasses =
+        compiler.enqueuer.codegen.nativeEnqueuer.hasInstantiatedNativeClasses();
 
     for (ClassElement cls in classes) {
       if (cls == helpers.jsArrayClass ||
           cls == helpers.jsMutableArrayClass ||
           cls == helpers.jsFixedArrayClass ||
-          cls == helpers.jsExtendableArrayClass) hasArray = true;
-      else if (cls == helpers.jsBoolClass) hasBool = true;
-      else if (cls == helpers.jsDoubleClass) hasDouble = true;
-      else if (cls == helpers.jsIntClass) hasInt = true;
-      else if (cls == helpers.jsNullClass) hasNull = true;
-      else if (cls == helpers.jsNumberClass) hasNumber = true;
-      else if (cls == helpers.jsStringClass) hasString = true;
+          cls == helpers.jsExtendableArrayClass)
+        hasArray = true;
+      else if (cls == helpers.jsBoolClass)
+        hasBool = true;
+      else if (cls == helpers.jsDoubleClass)
+        hasDouble = true;
+      else if (cls == helpers.jsIntClass)
+        hasInt = true;
+      else if (cls == helpers.jsNullClass)
+        hasNull = true;
+      else if (cls == helpers.jsNumberClass)
+        hasNumber = true;
+      else if (cls == helpers.jsStringClass)
+        hasString = true;
       else {
         // The set of classes includes classes mixed-in to interceptor classes
         // and user extensions of native classes.
@@ -108,15 +115,17 @@
           hasDouble ? helpers.jsDoubleClass : helpers.jsNumberClass);
 
       if (hasInt) {
-        whenNumber = js.statement('''{
+        whenNumber = js.statement(
+            '''{
             if (Math.floor(receiver) == receiver) return #;
             return #;
-        }''', [interceptorFor(helpers.jsIntClass), interceptorForNumber]);
+        }''',
+            [interceptorFor(helpers.jsIntClass), interceptorForNumber]);
       } else {
         whenNumber = js.statement('return #', interceptorForNumber);
       }
-      statements.add(
-          js.statement('if (typeof receiver == "number") #;', whenNumber));
+      statements
+          .add(js.statement('if (typeof receiver == "number") #;', whenNumber));
     }
 
     if (hasString) {
@@ -128,8 +137,7 @@
       // Returning "undefined" or "null" here will provoke a JavaScript
       // TypeError which is later identified as a null-error by
       // [unwrapException] in js_helper.dart.
-      statements.add(
-          js.statement('if (receiver == null) return receiver'));
+      statements.add(js.statement('if (receiver == null) return receiver'));
     }
     if (hasBool) {
       statements.add(buildInterceptorCheck(helpers.jsBoolClass));
@@ -141,28 +149,29 @@
     }
 
     if (hasNative) {
-      statements.add(js.statement(r'''{
+      statements.add(js.statement(
+          r'''{
           if (typeof receiver != "object") {
               if (typeof receiver == "function" ) return #;
               return receiver;
           }
           if (receiver instanceof #) return receiver;
           return #(receiver);
-      }''', [
-          interceptorFor(helpers.jsJavaScriptFunctionClass),
-          backend.emitter.constructorAccess(compiler.coreClasses.objectClass),
-          backend.emitter
-              .staticFunctionAccess(helpers.getNativeInterceptorMethod)]));
-
+      }''',
+          [
+            interceptorFor(helpers.jsJavaScriptFunctionClass),
+            backend.emitter.constructorAccess(compiler.coreClasses.objectClass),
+            backend.emitter
+                .staticFunctionAccess(helpers.getNativeInterceptorMethod)
+          ]));
     } else {
       ClassElement jsUnknown = helpers.jsUnknownJavaScriptObjectClass;
-      if (compiler.codegenWorld
-              .directlyInstantiatedClasses.contains(jsUnknown)) {
-        statements.add(
-            js.statement('if (!(receiver instanceof #)) return #;',
-                [backend.emitter.constructorAccess(
-                     compiler.coreClasses.objectClass),
-                 interceptorFor(jsUnknown)]));
+      if (compiler.codegenWorld.directlyInstantiatedClasses
+          .contains(jsUnknown)) {
+        statements.add(js.statement('if (!(receiver instanceof #)) return #;', [
+          backend.emitter.constructorAccess(compiler.coreClasses.objectClass),
+          interceptorFor(jsUnknown)
+        ]));
       }
 
       statements.add(js.statement('return receiver'));
@@ -174,9 +183,8 @@
   // Returns a statement that takes care of performance critical
   // common case for a one-shot interceptor, or null if there is no
   // fast path.
-  jsAst.Statement _fastPathForOneShotInterceptor(Selector selector,
-                                                 Set<ClassElement> classes) {
-
+  jsAst.Statement _fastPathForOneShotInterceptor(
+      Selector selector, Set<ClassElement> classes) {
     if (selector.isOperator) {
       String name = selector.name;
       if (name == '==') {
@@ -186,9 +194,9 @@
             return a0 != null && receiver === a0;
         }''');
       }
-      if (!classes.contains(helpers.jsIntClass)
-          && !classes.contains(helpers.jsNumberClass)
-          && !classes.contains(helpers.jsDoubleClass)) {
+      if (!classes.contains(helpers.jsIntClass) &&
+          !classes.contains(helpers.jsNumberClass) &&
+          !classes.contains(helpers.jsDoubleClass)) {
         return null;
       }
       if (selector.argumentCount == 1) {
@@ -205,8 +213,8 @@
             '  return #;',
             result);
       } else if (name == 'unary-') {
-        return js.statement(
-            'if (typeof receiver == "number") return -receiver');
+        return js
+            .statement('if (typeof receiver == "number") return -receiver');
       } else {
         assert(name == '~');
         return js.statement('''
@@ -238,15 +246,16 @@
       bool containsArray = classes.contains(helpers.jsArrayClass);
       bool containsString = classes.contains(helpers.jsStringClass);
       bool containsJsIndexable =
-          helpers.jsIndexingBehaviorInterface.isResolved && classes.any((cls) {
-        return compiler.world.isSubtypeOf(cls,
-            helpers.jsIndexingBehaviorInterface);
-      });
+          helpers.jsIndexingBehaviorInterface.isResolved &&
+              classes.any((cls) {
+                return compiler.world
+                    .isSubtypeOf(cls, helpers.jsIndexingBehaviorInterface);
+              });
       // The index set operator requires a check on its set value in
       // checked mode, so we don't optimize the interceptor if the
       // compiler has type assertions enabled.
-      if (selector.isIndexSet
-          && (compiler.options.enableTypeAssertions || !containsArray)) {
+      if (selector.isIndexSet &&
+          (compiler.options.enableTypeAssertions || !containsArray)) {
         return null;
       }
       if (!containsArray && !containsString) {
@@ -274,12 +283,14 @@
           typeCheck = orExp(typeCheck, indexableCheck);
         }
 
-        return js.statement('''
+        return js.statement(
+            '''
           if (typeof a0 === "number")
             if (#)
               if ((a0 >>> 0) === a0 && a0 < receiver.length)
                 return receiver[a0];
-          ''', typeCheck);
+          ''',
+            typeCheck);
       } else {
         jsAst.Expression typeCheck;
         if (containsArray) {
@@ -290,12 +301,14 @@
           typeCheck = orExp(typeCheck, indexableCheck);
         }
 
-        return js.statement(r'''
+        return js.statement(
+            r'''
           if (typeof a0 === "number")
             if (# && !receiver.immutable$list &&
                 (a0 >>> 0) === a0 && a0 < receiver.length)
               return receiver[a0] = a1;
-          ''', typeCheck);
+          ''',
+            typeCheck);
       }
     }
     return null;
@@ -303,8 +316,7 @@
 
   jsAst.Expression generateOneShotInterceptor(jsAst.Name name) {
     Selector selector = backend.oneShotInterceptors[name];
-    Set<ClassElement> classes =
-        backend.getInterceptedClassesOn(selector.name);
+    Set<ClassElement> classes = backend.getInterceptedClassesOn(selector.name);
     jsAst.Name getInterceptorName = namer.nameForGetInterceptor(classes);
 
     List<String> parameterNames = <String>[];
@@ -325,11 +337,14 @@
         _fastPathForOneShotInterceptor(selector, classes);
     if (optimizedPath == null) optimizedPath = js.statement(';');
 
-    return js(
-        'function(#) { #; return #.#(receiver).#(#) }',
-        [parameterNames,
-         optimizedPath,
-         globalObject, getInterceptorName, invocationName, parameterNames]);
+    return js('function(#) { #; return #.#(receiver).#(#) }', [
+      parameterNames,
+      optimizedPath,
+      globalObject,
+      getInterceptorName,
+      invocationName,
+      parameterNames
+    ]);
   }
 
   jsAst.ArrayInitializer generateTypeToInterceptorMap() {
@@ -369,10 +384,8 @@
           // We expect most of the time the map will be a singleton.
           var properties = [];
           for (Element member in analysis.constructors(classElement)) {
-            properties.add(
-                new jsAst.Property(
-                    js.string(member.name),
-                    backend.emitter.staticFunctionAccess(member)));
+            properties.add(new jsAst.Property(js.string(member.name),
+                backend.emitter.staticFunctionAccess(member)));
           }
 
           var map = new jsAst.ObjectInitializer(properties);
diff --git a/pkg/compiler/lib/src/js_emitter/js_emitter.dart b/pkg/compiler/lib/src/js_emitter/js_emitter.dart
index be7be0c..0a305ed 100644
--- a/pkg/compiler/lib/src/js_emitter/js_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/js_emitter.dart
@@ -8,76 +8,68 @@
 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
 import 'package:js_runtime/shared/embedded_names.dart' show JsBuiltin;
 
-
 import '../common.dart';
-import '../common/names.dart' show
-    Identifiers;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
+import '../common/names.dart' show Identifiers;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
 import '../constants/values.dart';
-import '../closure.dart' show
-    ClosureClassElement,
-    ClosureClassMap,
-    ClosureFieldElement,
-    CapturedVariable;
-import '../core_types.dart' show
-    CoreClasses;
-import '../dart_types.dart' show
-    DartType,
-    FunctionType,
-    InterfaceType,
-    TypedefType,
-    Types,
-    TypeVariableType;
-import '../deferred_load.dart' show
-    OutputUnit;
-import '../elements/elements.dart' show
-    ClassElement,
-    ConstructorBodyElement,
-    ConstructorElement,
-    Element,
-    Elements,
-    ElementKind,
-    FieldElement,
-    FunctionElement,
-    FunctionSignature,
-    MetadataAnnotation,
-    MethodElement,
-    MemberElement,
-    MixinApplicationElement,
-    ParameterElement,
-    TypeVariableElement;
+import '../closure.dart'
+    show
+        ClosureClassElement,
+        ClosureClassMap,
+        ClosureFieldElement,
+        CapturedVariable;
+import '../core_types.dart' show CoreClasses;
+import '../dart_types.dart'
+    show
+        DartType,
+        FunctionType,
+        InterfaceType,
+        TypedefType,
+        Types,
+        TypeVariableType;
+import '../deferred_load.dart' show OutputUnit;
+import '../elements/elements.dart'
+    show
+        ClassElement,
+        ConstructorBodyElement,
+        ConstructorElement,
+        Element,
+        Elements,
+        ElementKind,
+        FieldElement,
+        FunctionElement,
+        FunctionSignature,
+        MetadataAnnotation,
+        MethodElement,
+        MemberElement,
+        MixinApplicationElement,
+        ParameterElement,
+        TypeVariableElement;
 import '../js/js.dart' as jsAst;
 import '../js/js.dart' show js;
-import '../js_backend/backend_helpers.dart' show
-    BackendHelpers;
-import '../js_backend/js_backend.dart' show
-    CheckedModeHelper,
-    CompoundName,
-    ConstantEmitter,
-    CustomElementsAnalysis,
-    GetterName,
-    JavaScriptBackend,
-    JavaScriptConstantCompiler,
-    Namer,
-    RuntimeTypes,
-    RuntimeTypesEncoder,
-    SetterName,
-    Substitution,
-    TypeCheck,
-    TypeChecks,
-    TypeVariableHandler;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/universe.dart' show
-    SelectorConstraints;
-import '../util/util.dart' show
-    Setlet;
-
+import '../js_backend/backend_helpers.dart' show BackendHelpers;
+import '../js_backend/js_backend.dart'
+    show
+        CheckedModeHelper,
+        CompoundName,
+        ConstantEmitter,
+        CustomElementsAnalysis,
+        GetterName,
+        JavaScriptBackend,
+        JavaScriptConstantCompiler,
+        Namer,
+        RuntimeTypes,
+        RuntimeTypesEncoder,
+        SetterName,
+        Substitution,
+        TypeCheck,
+        TypeChecks,
+        TypeVariableHandler;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../universe/universe.dart' show SelectorConstraints;
+import '../util/util.dart' show Setlet;
 
 import 'full_emitter/emitter.dart' as full_js_emitter;
 import 'lazy_emitter/emitter.dart' as lazy_js_emitter;
diff --git a/pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart
index b2db5ab..e3f287b 100644
--- a/pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/lazy_emitter/emitter.dart
@@ -4,33 +4,21 @@
 
 library dart2js.js_emitter.lazy_emitter;
 
-import 'package:js_runtime/shared/embedded_names.dart' show
-    JsBuiltin,
-    METADATA,
-    TYPES;
+import 'package:js_runtime/shared/embedded_names.dart'
+    show JsBuiltin, METADATA, TYPES;
 
 import '../../common.dart';
-import '../../compiler.dart' show
-    Compiler;
-import '../../constants/values.dart' show
-    ConstantValue;
-import '../../elements/elements.dart' show
-    ClassElement,
-    Element,
-    FieldElement,
-    FunctionElement;
+import '../../compiler.dart' show Compiler;
+import '../../constants/values.dart' show ConstantValue;
+import '../../elements/elements.dart'
+    show ClassElement, Element, FieldElement, FunctionElement;
 import '../../js/js.dart' as js;
-import '../../js_backend/js_backend.dart' show
-    JavaScriptBackend,
-    Namer;
+import '../../js_backend/js_backend.dart' show JavaScriptBackend, Namer;
 
-import '../js_emitter.dart' show
-    NativeEmitter;
-import '../js_emitter.dart' as emitterTask show
-    Emitter;
+import '../js_emitter.dart' show NativeEmitter;
+import '../js_emitter.dart' as emitterTask show Emitter;
 import '../model.dart';
-import '../program_builder/program_builder.dart' show
-    ProgramBuilder;
+import '../program_builder/program_builder.dart' show ProgramBuilder;
 
 import 'model_emitter.dart';
 
@@ -97,8 +85,8 @@
 
   @override
   js.Expression isolateLazyInitializerAccess(FieldElement element) {
-    return js.js('#.#', [namer.globalObjectFor(element),
-                         namer.lazyInitializerName(element)]);
+    return js.js('#.#',
+        [namer.globalObjectFor(element), namer.lazyInitializerName(element)]);
   }
 
   @override
@@ -122,8 +110,8 @@
   }
 
   @override
-  js.PropertyAccess prototypeAccess(ClassElement element,
-                                    bool hasBeenInstantiated) {
+  js.PropertyAccess prototypeAccess(
+      ClassElement element, bool hasBeenInstantiated) {
     js.Expression constructor =
         hasBeenInstantiated ? constructorAccess(element) : typeAccess(element);
     return js.js('#.prototype', constructor);
@@ -187,13 +175,12 @@
         throw new UnsupportedError('createDartClosureFromNameOfStaticFunction');
 
       default:
-        reporter.internalError(NO_LOCATION_SPANNABLE,
-                                "Unhandled Builtin: $builtin");
+        reporter.internalError(
+            NO_LOCATION_SPANNABLE, "Unhandled Builtin: $builtin");
         return null;
     }
   }
 
   @override
-  void invalidateCaches() {
-  }
+  void invalidateCaches() {}
 }
diff --git a/pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart
index d2dd9fd..138062e 100644
--- a/pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/lazy_emitter/model_emitter.dart
@@ -4,39 +4,32 @@
 
 library dart2js.js_emitter.lazy_emitter.model_emitter;
 
-import '../../compiler.dart' show
-    Compiler;
-import '../../constants/values.dart' show
-    ConstantValue,
-    FunctionConstantValue;
-import '../../core_types.dart' show
-    CoreClasses;
-import '../../elements/elements.dart' show
-    ClassElement,
-    FunctionElement;
+import '../../compiler.dart' show Compiler;
+import '../../constants/values.dart' show ConstantValue, FunctionConstantValue;
+import '../../core_types.dart' show CoreClasses;
+import '../../elements/elements.dart' show ClassElement, FunctionElement;
 import '../../js/js.dart' as js;
-import '../../js_backend/js_backend.dart' show
-    JavaScriptBackend,
-    Namer,
-    ConstantEmitter;
+import '../../js_backend/js_backend.dart'
+    show JavaScriptBackend, Namer, ConstantEmitter;
 
 import '../js_emitter.dart' show NativeEmitter;
 import '../constant_ordering.dart' show deepCompareConstants;
 
-import 'package:js_runtime/shared/embedded_names.dart' show
-    CREATE_NEW_ISOLATE,
-    DEFERRED_LIBRARY_URIS,
-    DEFERRED_LIBRARY_HASHES,
-    GET_TYPE_FROM_NAME,
-    INITIALIZE_LOADED_HUNK,
-    INTERCEPTORS_BY_TAG,
-    IS_HUNK_INITIALIZED,
-    IS_HUNK_LOADED,
-    LEAF_TAGS,
-    MANGLED_GLOBAL_NAMES,
-    METADATA,
-    TYPE_TO_INTERCEPTOR_MAP,
-    TYPES;
+import 'package:js_runtime/shared/embedded_names.dart'
+    show
+        CREATE_NEW_ISOLATE,
+        DEFERRED_LIBRARY_URIS,
+        DEFERRED_LIBRARY_HASHES,
+        GET_TYPE_FROM_NAME,
+        INITIALIZE_LOADED_HUNK,
+        INTERCEPTORS_BY_TAG,
+        IS_HUNK_INITIALIZED,
+        IS_HUNK_LOADED,
+        LEAF_TAGS,
+        MANGLED_GLOBAL_NAMES,
+        METADATA,
+        TYPE_TO_INTERCEPTOR_MAP,
+        TYPES;
 
 import '../js_emitter.dart' show NativeGenerator, buildTearOffCode;
 import '../model.dart';
@@ -60,10 +53,8 @@
   ModelEmitter(Compiler compiler, Namer namer, this.nativeEmitter)
       : this.compiler = compiler,
         this.namer = namer {
-
     this.constantEmitter = new ConstantEmitter(
-        compiler, namer, this.generateConstantReference,
-        constantListGenerator);
+        compiler, namer, this.generateConstantReference, constantListGenerator);
   }
 
   js.Expression constantListGenerator(js.Expression array) {
@@ -81,9 +72,9 @@
   }
 
   bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
-    if (constant.isFunction) return true;    // Already emitted.
-    if (constant.isPrimitive) return true;   // Inlined.
-    if (constant.isDummy) return true;       // Inlined.
+    if (constant.isFunction) return true; // Already emitted.
+    if (constant.isPrimitive) return true; // Inlined.
+    if (constant.isDummy) return true; // Inlined.
     // The name is null when the constant is already a JS constant.
     // TODO(floitsch): every constant should be registered, so that we can
     // share the ones that take up too much space (like some strings).
@@ -130,8 +121,8 @@
     if (isConstantInlinedOrAlreadyEmitted(value)) {
       return constantEmitter.generate(value);
     }
-    return js.js('#.#()', [namer.globalObjectForConstant(value),
-                           namer.constantName(value)]);
+    return js.js('#.#()',
+        [namer.globalObjectForConstant(value), namer.constantName(value)]);
   }
 
   int emitProgram(Program program) {
@@ -144,8 +135,8 @@
     // We have to emit the deferred fragments first, since we need their
     // deferred hash (which depends on the output) when emitting the main
     // fragment.
-    List<js.Expression> fragmentsCode = deferredFragments.map(
-            (DeferredFragment deferredUnit) {
+    List<js.Expression> fragmentsCode =
+        deferredFragments.map((DeferredFragment deferredUnit) {
       js.Expression types =
           program.metadataTypesForOutputUnit(deferredUnit.outputUnit);
       return emitDeferredFragment(types, deferredUnit, program.holders);
@@ -163,16 +154,17 @@
     for (int i = 0; i < fragmentsCode.length; ++i) {
       String code = js.createCodeBuffer(fragmentsCode[i], compiler).getText();
       totalSize += code.length;
-      compiler.outputProvider(fragments[i+1].outputFileName, deferredExtension)
+      compiler.outputProvider(
+          fragments[i + 1].outputFileName, deferredExtension)
         ..add(code)
         ..close();
     }
 
     String mainCode = js.createCodeBuffer(mainAst, compiler).getText();
     compiler.outputProvider(mainFragment.outputFileName, 'js')
-        ..add(buildGeneratedBy(compiler))
-        ..add(mainCode)
-        ..close();
+      ..add(buildGeneratedBy(compiler))
+      ..add(mainCode)
+      ..close();
     totalSize += mainCode.length;
 
     return totalSize;
@@ -187,7 +179,7 @@
   ///
   /// See [_UnparsedNode] for details.
   js.Literal unparse(Compiler compiler, js.Node value,
-                     {bool protectForEval: true}) {
+      {bool protectForEval: true}) {
     return new js.UnparsedNode(value, compiler, protectForEval);
   }
 
@@ -208,31 +200,31 @@
 
     js.Expression code = new js.ArrayInitializer(elements);
 
-    Map<String, dynamic> holes =
-      {'deferredInitializer': emitDeferredInitializerGlobal(program.loadMap),
-       'holders': emitHolders(program.holders),
-       'tearOff': buildTearOffCode(backend),
-       'parseFunctionDescriptor':
-           js.js.statement(parseFunctionDescriptorBoilerplate,
-               {'argumentCount': js.string(namer.requiredParameterField),
-                'defaultArgumentValues': js.string(namer.defaultValuesField),
-                'callName': js.string(namer.callNameField)}),
-
-       'cyclicThrow':
-           backend.emitter.staticFunctionAccess(
-               backend.helpers.cyclicThrowHelper),
-       'outputContainsConstantList': program.outputContainsConstantList,
-       'embeddedGlobals': emitEmbeddedGlobals(program),
-       'readMetadataTypeFunction': readMetadataTypeFunction,
-       'staticNonFinals':
-            emitStaticNonFinalFields(fragment.staticNonFinalFields),
-       'operatorIsPrefix': js.string(namer.operatorIsPrefix),
-       'callName': js.string(namer.callNameField),
-       'argumentCount': js.string(namer.requiredParameterField),
-       'defaultArgumentValues': js.string(namer.defaultValuesField),
-       'eagerClasses': emitEagerClassInitializations(fragment.libraries),
-       'invokeMain': fragment.invokeMain,
-       'code': code};
+    Map<String, dynamic> holes = {
+      'deferredInitializer': emitDeferredInitializerGlobal(program.loadMap),
+      'holders': emitHolders(program.holders),
+      'tearOff': buildTearOffCode(backend),
+      'parseFunctionDescriptor':
+          js.js.statement(parseFunctionDescriptorBoilerplate, {
+        'argumentCount': js.string(namer.requiredParameterField),
+        'defaultArgumentValues': js.string(namer.defaultValuesField),
+        'callName': js.string(namer.callNameField)
+      }),
+      'cyclicThrow': backend.emitter
+          .staticFunctionAccess(backend.helpers.cyclicThrowHelper),
+      'outputContainsConstantList': program.outputContainsConstantList,
+      'embeddedGlobals': emitEmbeddedGlobals(program),
+      'readMetadataTypeFunction': readMetadataTypeFunction,
+      'staticNonFinals':
+          emitStaticNonFinalFields(fragment.staticNonFinalFields),
+      'operatorIsPrefix': js.string(namer.operatorIsPrefix),
+      'callName': js.string(namer.callNameField),
+      'argumentCount': js.string(namer.requiredParameterField),
+      'defaultArgumentValues': js.string(namer.defaultValuesField),
+      'eagerClasses': emitEagerClassInitializations(fragment.libraries),
+      'invokeMain': fragment.invokeMain,
+      'code': code
+    };
 
     holes.addAll(nativeHoles(program));
 
@@ -256,7 +248,6 @@
     nativeHoles['nativeIsolateAffinityTagInitialization'] =
         nativeIsolateAffinityTagInitialization;
 
-
     js.Expression nativeInfoAccess = js.js('nativeInfo', []);
     js.Expression constructorAccess = js.js('constructor', []);
     Function subclassReadGenerator = (js.Expression subclass) {
@@ -264,8 +255,7 @@
     };
     js.Expression interceptorsByTagAccess =
         generateEmbeddedGlobalAccess(INTERCEPTORS_BY_TAG);
-    js.Expression leafTagsAccess =
-        generateEmbeddedGlobalAccess(LEAF_TAGS);
+    js.Expression leafTagsAccess = generateEmbeddedGlobalAccess(LEAF_TAGS);
     js.Statement nativeInfoHandler = NativeGenerator.buildNativeInfoHandler(
         nativeInfoAccess,
         constructorAccess,
@@ -292,15 +282,17 @@
     // that covers the entire program.
 
     List<js.Statement> statements = [
-        new js.ExpressionStatement(
-            new js.VariableDeclarationList(holders.map((e) =>
-                new js.VariableInitialization(
-                    new js.VariableDeclaration(e.name, allowRename: false),
-                    new js.ObjectInitializer(const []))).toList())),
-        js.js.statement('var holders = #', new js.ArrayInitializer(
-            holders.map((e) => new js.VariableUse(e.name))
-                   .toList(growable: false))),
-        js.js.statement('var holdersMap = Object.create(null)')
+      new js.ExpressionStatement(new js.VariableDeclarationList(holders
+          .map((e) => new js.VariableInitialization(
+              new js.VariableDeclaration(e.name, allowRename: false),
+              new js.ObjectInitializer(const [])))
+          .toList())),
+      js.js.statement(
+          'var holders = #',
+          new js.ArrayInitializer(holders
+              .map((e) => new js.VariableUse(e.name))
+              .toList(growable: false))),
+      js.js.statement('var holdersMap = Object.create(null)')
     ];
     return new js.Block(statements);
   }
@@ -313,15 +305,14 @@
     }
 
     if (program.typeToInterceptorMap != null) {
-      globals.add(new js.Property(js.string(TYPE_TO_INTERCEPTOR_MAP),
-                                  program.typeToInterceptorMap));
+      globals.add(new js.Property(
+          js.string(TYPE_TO_INTERCEPTOR_MAP), program.typeToInterceptorMap));
     }
 
     if (program.hasIsolateSupport) {
       String isolateName = namer.staticStateHolder;
-      globals.add(
-          new js.Property(js.string(CREATE_NEW_ISOLATE),
-                          js.js('function () { return $isolateName; }')));
+      globals.add(new js.Property(js.string(CREATE_NEW_ISOLATE),
+          js.js('function () { return $isolateName; }')));
       // TODO(floitsch): add remaining isolate functions.
     }
 
@@ -332,20 +323,21 @@
     globals.addAll(emitMetadata(program));
 
     if (program.needsNativeSupport) {
-      globals.add(new js.Property(js.string(INTERCEPTORS_BY_TAG),
-                                  js.js('Object.create(null)', [])));
-      globals.add(new js.Property(js.string(LEAF_TAGS),
-                                  js.js('Object.create(null)', [])));
+      globals.add(new js.Property(
+          js.string(INTERCEPTORS_BY_TAG), js.js('Object.create(null)', [])));
+      globals.add(new js.Property(
+          js.string(LEAF_TAGS), js.js('Object.create(null)', [])));
     }
 
     js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals);
 
-    List<js.Statement> statements =
-        [new js.ExpressionStatement(
-            new js.VariableDeclarationList(
-                [new js.VariableInitialization(
-                    new js.VariableDeclaration("init", allowRename: false),
-                    globalsObject)]))];
+    List<js.Statement> statements = [
+      new js.ExpressionStatement(new js.VariableDeclarationList([
+        new js.VariableInitialization(
+            new js.VariableDeclaration("init", allowRename: false),
+            globalsObject)
+      ]))
+    ];
     return new js.Block(statements);
   }
 
@@ -355,17 +347,22 @@
     CoreClasses coreClasses = compiler.coreClasses;
     // We want to keep the original names for the most common core classes when
     // calling toString on them.
-    List<ClassElement> nativeClassesNeedingUnmangledName =
-        [coreClasses.intClass, coreClasses.doubleClass, coreClasses.numClass,
-         coreClasses.stringClass, coreClasses.boolClass, coreClasses.nullClass,
-         coreClasses.listClass];
+    List<ClassElement> nativeClassesNeedingUnmangledName = [
+      coreClasses.intClass,
+      coreClasses.doubleClass,
+      coreClasses.numClass,
+      coreClasses.stringClass,
+      coreClasses.boolClass,
+      coreClasses.nullClass,
+      coreClasses.listClass
+    ];
     nativeClassesNeedingUnmangledName.forEach((element) {
-        names.add(new js.Property(js.quoteName(namer.className(element)),
-                                  js.string(element.name)));
+      names.add(new js.Property(
+          js.quoteName(namer.className(element)), js.string(element.name)));
     });
 
-    return new js.Property(js.string(MANGLED_GLOBAL_NAMES),
-                           new js.ObjectInitializer(names));
+    return new js.Property(
+        js.string(MANGLED_GLOBAL_NAMES), new js.ObjectInitializer(names));
   }
 
   js.Statement emitDeferredInitializerGlobal(Map loadMap) {
@@ -378,7 +375,6 @@
 
   Iterable<js.Property> emitEmbeddedGlobalsForDeferredLoading(
       Map<String, List<Fragment>> loadMap) {
-
     List<js.Property> globals = <js.Property>[];
 
     js.ArrayInitializer fragmentUris(List<Fragment> fragments) {
@@ -402,44 +398,44 @@
       count++;
     });
 
-    globals.add(new js.Property(js.string(DEFERRED_LIBRARY_URIS),
-                                new js.ObjectInitializer(uris)));
-    globals.add(new js.Property(js.string(DEFERRED_LIBRARY_HASHES),
-                                new js.ObjectInitializer(hashes)));
+    globals.add(new js.Property(
+        js.string(DEFERRED_LIBRARY_URIS), new js.ObjectInitializer(uris)));
+    globals.add(new js.Property(
+        js.string(DEFERRED_LIBRARY_HASHES), new js.ObjectInitializer(hashes)));
 
     js.Expression isHunkLoadedFunction =
         js.js("function(hash) { return !!$deferredInitializersGlobal[hash]; }");
-    globals.add(new js.Property(js.string(IS_HUNK_LOADED),
-                                isHunkLoadedFunction));
+    globals
+        .add(new js.Property(js.string(IS_HUNK_LOADED), isHunkLoadedFunction));
 
     js.Expression isHunkInitializedFunction =
         js.js("function(hash) { return false; }");
-    globals.add(new js.Property(js.string(IS_HUNK_INITIALIZED),
-                                isHunkInitializedFunction));
+    globals.add(new js.Property(
+        js.string(IS_HUNK_INITIALIZED), isHunkInitializedFunction));
 
     js.Expression typesAccess = generateEmbeddedGlobalAccess(TYPES);
 
     /// See [emitEmbeddedGlobalsForDeferredLoading] for the format of the
     /// deferred hunk.
-    js.Expression initializeLoadedHunkFunction =
-        js.js("""
+    js.Expression initializeLoadedHunkFunction = js.js(
+        """
           function(hash) {
             var hunk = $deferredInitializersGlobal[hash];
             $setupProgramName(hunk[0], #typesAccess.length);
             eval(hunk[1]);
             var deferredTypes = eval(hunk[2]);
             #typesAccess.push.apply(#typesAccess, deferredTypes);
-          }""", {'typesAccess': typesAccess});
+          }""",
+        {'typesAccess': typesAccess});
 
-    globals.add(new js.Property(js.string(INITIALIZE_LOADED_HUNK),
-                                initializeLoadedHunkFunction));
+    globals.add(new js.Property(
+        js.string(INITIALIZE_LOADED_HUNK), initializeLoadedHunkFunction));
 
     return globals;
   }
 
   js.Property emitGetTypeFromName() {
-    js.Expression function =
-        js.js( """function(name) {
+    js.Expression function = js.js("""function(name) {
                     return holdersMap[name][name].ensureResolved();
                   }""");
     return new js.Property(js.string(GET_TYPE_FROM_NAME), function);
@@ -451,14 +447,16 @@
     // Types are non-evaluated and must be compiled at first use.
     // Compiled strings are guaranteed not to be strings, and it's thus safe
     // to use a type-test to determine if a type has already been compiled.
-    return js.js.statement('''function $readMetadataTypeName(index) {
+    return js.js.statement(
+        '''function $readMetadataTypeName(index) {
       var type = #typesAccess[index];
       if (typeof type == 'string') {
         type = expressionCompile(type);
         #typesAccess[index] = type;
       }
       return type;
-    }''', {"typesAccess": generateEmbeddedGlobalAccess(TYPES)});
+    }''',
+        {"typesAccess": generateEmbeddedGlobalAccess(TYPES)});
   }
 
   js.Template get templateForReadType {
@@ -474,17 +472,19 @@
     // Types are non-evaluated and must be compiled at first use.
     // Compiled strings are guaranteed not to be strings, and it's thus safe
     // to use a type-test to determine if a type has already been compiled.
-    return js.js.statement('''function $readMetadataName(index) {
+    return js.js.statement(
+        '''function $readMetadataName(index) {
       var lazyMetadata = #lazyMetadataAccess[index];
       if (typeof lazyMetadata == 'string') {
         #metadataAccess[index] = expressionCompile(lazyMetadata);
         #lazyMetadataAccess[index] = null;
       }
       return #metadataAccess[index];
-    }''', {
-      "lazyMetadataAccess": generateEmbeddedGlobalAccess(lazyMetadataName),
-      "metadataAccess": generateEmbeddedGlobalAccess(METADATA)
-    });
+    }''',
+        {
+          "lazyMetadataAccess": generateEmbeddedGlobalAccess(lazyMetadataName),
+          "metadataAccess": generateEmbeddedGlobalAccess(METADATA)
+        });
   }
 
   js.Template get templateForReadMetadata {
@@ -509,8 +509,7 @@
   }
 
   js.Expression emitDeferredFragment(js.Expression deferredTypes,
-                                     DeferredFragment fragment,
-                                     List<Holder> holders) {
+      DeferredFragment fragment, List<Holder> holders) {
     // TODO(floitsch): initialize eager classes.
     // TODO(floitsch): the hash must depend on the output.
     int hash = fragment.hashCode;
@@ -527,15 +526,14 @@
     // This is the code that must be evaluated after all deferred classes have
     // been setup.
     js.Statement immediateCode = new js.Block([
-        emitStaticNonFinalFields(fragment.staticNonFinalFields),
-        emitEagerClassInitializations(fragment.libraries)]);
-
+      emitStaticNonFinalFields(fragment.staticNonFinalFields),
+      emitEagerClassInitializations(fragment.libraries)
+    ]);
 
     js.Literal immediateString = unparse(compiler, immediateCode);
 
-    js.ArrayInitializer hunk =
-        new js.ArrayInitializer([deferredArray, immediateString,
-                                 deferredTypes]);
+    js.ArrayInitializer hunk = new js.ArrayInitializer(
+        [deferredArray, immediateString, deferredTypes]);
 
     return js.js("$deferredInitializersGlobal[$hash] = #", hunk);
   }
@@ -563,18 +561,19 @@
 
   js.Block emitStaticNonFinalFields(List<StaticField> fields) {
     Iterable<js.Statement> statements = fields.map((StaticField field) {
-      return js.js.statement("#.# = #;",
-                             [field.holder.name, field.name, field.code]);
+      return js.js
+          .statement("#.# = #;", [field.holder.name, field.name, field.code]);
     });
     return new js.Block(statements.toList());
   }
 
   js.Expression emitLazilyInitializedStatics(List<StaticField> fields) {
-    Iterable fieldDescriptors = fields.expand((field) =>
-        [ js.quoteName(field.name),
+    Iterable fieldDescriptors = fields.expand((field) => [
+          js.quoteName(field.name),
           js.quoteName(namer.deriveLazyInitializerName(field.name)),
           js.number(field.holder.index),
-          emitLazyInitializer(field) ]);
+          emitLazyInitializer(field)
+        ]);
     return new js.ArrayInitializer(fieldDescriptors.toList(growable: false));
   }
 
@@ -583,18 +582,17 @@
       return js.js.statement('new #.#()', [cls.holder.name, cls.name]);
     }
 
-    List<js.Statement> instantiations =
-        libraries.expand((Library library) => library.classes)
-                 .where((Class cls) => cls.isEager)
-                 .map(createInstantiation)
-                 .toList(growable: false);
+    List<js.Statement> instantiations = libraries
+        .expand((Library library) => library.classes)
+        .where((Class cls) => cls.isEager)
+        .map(createInstantiation)
+        .toList(growable: false);
     return new js.Block(instantiations);
   }
 
   // This string should be referenced wherever JavaScript code makes assumptions
   // on the mixin format.
-  static final String nativeInfoDescription =
-      "A class is encoded as follows:"
+  static final String nativeInfoDescription = "A class is encoded as follows:"
       "   [name, class-code, holder-index], or "
       "   [name, class-code, native-info, holder-index].";
 
@@ -632,8 +630,8 @@
     js.Name name = cls.name;
 
     Iterable<js.Name> assignments = fieldNames.map((js.Name field) {
-        return js.js("this.#field = #field", {"field": field});
-      });
+      return js.js("this.#field = #field", {"field": field});
+    });
 
     return js.js('function #(#) { # }', [name, fieldNames, assignments]);
   }
@@ -641,9 +639,12 @@
   Method _generateGetter(Field field) {
     String getterTemplateFor(int flags) {
       switch (flags) {
-        case 1: return "function() { return this[#]; }";
-        case 2: return "function(receiver) { return receiver[#]; }";
-        case 3: return "function(receiver) { return this[#]; }";
+        case 1:
+          return "function() { return this[#]; }";
+        case 2:
+          return "function(receiver) { return receiver[#]; }";
+        case 3:
+          return "function(receiver) { return this[#]; }";
       }
       return null;
     }
@@ -657,9 +658,12 @@
   Method _generateSetter(Field field) {
     String setterTemplateFor(int flags) {
       switch (flags) {
-        case 1: return "function(val) { return this[#] = val; }";
-        case 2: return "function(receiver, val) { return receiver[#] = val; }";
-        case 3: return "function(receiver, val) { return this[#] = val; }";
+        case 1:
+          return "function(val) { return this[#] = val; }";
+        case 2:
+          return "function(receiver, val) { return receiver[#] = val; }";
+        case 3:
+          return "function(receiver, val) { return this[#] = val; }";
       }
       return null;
     }
@@ -689,8 +693,10 @@
       "reference.";
 
   js.Expression emitClass(Class cls) {
-    List elements = [js.quoteName(cls.superclassName, allowNull: true),
-                     js.number(cls.superclassHolderIndex)];
+    List elements = [
+      js.quoteName(cls.superclassName, allowNull: true),
+      js.number(cls.superclassHolderIndex)
+    ];
 
     if (cls.isMixinApplication) {
       MixinApplication mixin = cls;
@@ -708,9 +714,14 @@
     Iterable<Method> typeVariableReaderStubs = cls.typeVariableReaderStubs;
     Iterable<Method> noSuchMethodStubs = cls.noSuchMethodStubs;
     Iterable<Method> gettersSetters = _generateGettersSetters(cls);
-    Iterable<Method> allMethods =
-        [methods, isChecks, callStubs, typeVariableReaderStubs,
-         noSuchMethodStubs, gettersSetters].expand((x) => x);
+    Iterable<Method> allMethods = [
+      methods,
+      isChecks,
+      callStubs,
+      typeVariableReaderStubs,
+      noSuchMethodStubs,
+      gettersSetters
+    ].expand((x) => x);
     elements.addAll(allMethods.expand(emitInstanceMethod));
 
     return unparse(compiler, new js.ArrayInitializer(elements));
@@ -813,15 +824,14 @@
           method.optionalParameterDefaultValues;
       List<js.Property> properties = <js.Property>[];
       defaultValues.forEach((String name, ConstantValue value) {
-        properties.add(new js.Property(js.string(name),
-            generateConstantReference(value)));
+        properties.add(
+            new js.Property(js.string(name), generateConstantReference(value)));
       });
       return new js.ObjectInitializer(properties);
     }
   }
 
   Iterable<js.Expression> emitInstanceMethod(Method method) {
-
     List<js.Expression> makeNameCodePair(Method method) {
       return [js.quoteName(method.name), method.code];
     }
@@ -905,8 +915,11 @@
           data.add(js.number(method.requiredParameterCount));
           data.add(_encodeOptionalParameterDefaultValues(method));
         }
-        return [js.quoteName(method.name), holderIndex,
-                new js.ArrayInitializer(data)];
+        return [
+          js.quoteName(method.name),
+          holderIndex,
+          new js.ArrayInitializer(data)
+        ];
       } else {
         method.parameterStubs.forEach(_addMethod);
       }
@@ -1257,5 +1270,4 @@
 
 })(Date.now(), #code)
 }""";
-
 }
diff --git a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
index 2efc6e4..b38e403 100644
--- a/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/main_call_stub_generator.dart
@@ -15,8 +15,8 @@
 
   /// Returns the code equivalent to:
   ///   `function(args) { $.startRootIsolate(X.main$closure(), args); }`
-  jsAst.Expression _buildIsolateSetupClosure(Element appMain,
-                                             Element isolateMain) {
+  jsAst.Expression _buildIsolateSetupClosure(
+      Element appMain, Element isolateMain) {
     jsAst.Expression mainAccess =
         emitterTask.isolateStaticClosureAccess(appMain);
     // Since we pass the closurized version of the main method to
@@ -30,12 +30,11 @@
     jsAst.Expression mainCallClosure = null;
     if (compiler.hasIsolateSupport) {
       Element isolateMain =
-        helpers.isolateHelperLibrary.find(BackendHelpers.START_ROOT_ISOLATE);
+          helpers.isolateHelperLibrary.find(BackendHelpers.START_ROOT_ISOLATE);
       mainCallClosure = _buildIsolateSetupClosure(main, isolateMain);
     } else if (compiler.options.hasIncrementalSupport) {
       mainCallClosure = js(
-          'function() { return #(); }',
-          emitterTask.staticFunctionAccess(main));
+          'function() { return #(); }', emitterTask.staticFunctionAccess(main));
     } else {
       mainCallClosure = emitterTask.staticFunctionAccess(main);
     }
@@ -47,7 +46,8 @@
     // onload event of all script tags and getting the first script which
     // finishes. Since onload is called immediately after execution this should
     // not substantially change execution order.
-    return js.statement('''
+    return js.statement(
+        '''
       (function (callback) {
         if (typeof document === "undefined") {
           callback(null);
@@ -79,7 +79,9 @@
           #mainCallClosure([]);
         }
       })''',
-      {'currentScript': currentScriptAccess,
-       'mainCallClosure': mainCallClosure});
+        {
+          'currentScript': currentScriptAccess,
+          'mainCallClosure': mainCallClosure
+        });
   }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
index b51c470..0fc56db 100644
--- a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart
@@ -63,9 +63,9 @@
   _ForwardingMetadataEntry([this.debug]);
 
   _MetadataEntry get forwardTo {
-     assert(isBound);
-     return _forwardTo;
-   }
+    assert(isBound);
+    return _forwardTo;
+  }
 
   jsAst.Expression get entry {
     assert(isBound);
@@ -172,8 +172,8 @@
         }
       }
       if (metadata.isEmpty) return null;
-      return js('function() { return # }',
-          new jsAst.ArrayInitializer(metadata));
+      return js(
+          'function() { return # }', new jsAst.ArrayInitializer(metadata));
     });
   }
 
@@ -193,7 +193,7 @@
 
       ConstructorElement constructor = function;
       while (constructor.isRedirectingFactory &&
-             !constructor.isCyclicRedirection) {
+          !constructor.isCyclicRedirection) {
         // TODO(sra): Remove the loop once effectiveTarget forwards to patches.
         constructor = constructor.effectiveTarget.implementation;
       }
@@ -222,8 +222,7 @@
     return defaultValues;
   }
 
-  Map<ParameterElement, ParameterElement>
-  mapRedirectingFactoryConstructorOptionalParameters(
+  Map<ParameterElement, ParameterElement> mapRedirectingFactoryConstructorOptionalParameters(
       FunctionSignature source, FunctionSignature target) {
     var map = <ParameterElement, ParameterElement>{};
 
@@ -247,8 +246,8 @@
       int i = source.requiredParameterCount;
       for (ParameterElement element in source.orderedOptionalParameters) {
         if (i >= target.requiredParameterCount && i < target.parameterCount) {
-          map[element] =
-              target.orderedOptionalParameters[i - target.requiredParameterCount];
+          map[element] = target.orderedOptionalParameters[
+              i - target.requiredParameterCount];
         }
         ++i;
       }
@@ -267,16 +266,15 @@
   }
 
   jsAst.Expression reifyType(DartType type, {ignoreTypeVariables: false}) {
-    return reifyTypeForOutputUnit(type,
-                                  _compiler.deferredLoadTask.mainOutputUnit,
-                                  ignoreTypeVariables: ignoreTypeVariables);
+    return reifyTypeForOutputUnit(
+        type, _compiler.deferredLoadTask.mainOutputUnit,
+        ignoreTypeVariables: ignoreTypeVariables);
   }
 
-  jsAst.Expression reifyTypeForOutputUnit(DartType type,
-                                          OutputUnit outputUnit,
-                                          {ignoreTypeVariables: false}) {
+  jsAst.Expression reifyTypeForOutputUnit(DartType type, OutputUnit outputUnit,
+      {ignoreTypeVariables: false}) {
     return addTypeInOutputUnit(type, outputUnit,
-                               ignoreTypeVariables: ignoreTypeVariables);
+        ignoreTypeVariables: ignoreTypeVariables);
   }
 
   jsAst.Expression reifyName(String name) {
@@ -293,8 +291,8 @@
 
   _MetadataEntry _addGlobalMetadata(jsAst.Node node) {
     String nameToKey(jsAst.Name name) => "${name.key}";
-    String printed = jsAst.prettyPrint(
-        node, _compiler, renamerForNames: nameToKey);
+    String printed =
+        jsAst.prettyPrint(node, _compiler, renamerForNames: nameToKey);
     return _globalMetadataMap.putIfAbsent(printed, () {
       _BoundMetadataEntry result = new _BoundMetadataEntry(node);
       if (_compiler.options.hasIncrementalSupport) {
@@ -305,16 +303,14 @@
   }
 
   jsAst.Expression _computeTypeRepresentation(DartType type,
-                                              {ignoreTypeVariables: false}) {
-    jsAst.Expression representation = _backend.rtiEncoder.getTypeRepresentation(
-        type,
-        (variable) {
-          if (ignoreTypeVariables) return new jsAst.LiteralNull();
-          return _typeVariableHandler.reifyTypeVariable(variable.element);
-        },
-        (TypedefType typedef) {
-          return _backend.isAccessibleByReflection(typedef.element);
-        });
+      {ignoreTypeVariables: false}) {
+    jsAst.Expression representation =
+        _backend.rtiEncoder.getTypeRepresentation(type, (variable) {
+      if (ignoreTypeVariables) return new jsAst.LiteralNull();
+      return _typeVariableHandler.reifyTypeVariable(variable.element);
+    }, (TypedefType typedef) {
+      return _backend.isAccessibleByReflection(typedef.element);
+    });
 
     if (representation is jsAst.LiteralString) {
       // We don't want the representation to be a string, since we use
@@ -324,19 +320,17 @@
     }
 
     return representation;
-
   }
 
-  jsAst.Expression addTypeInOutputUnit(DartType type,
-                                       OutputUnit outputUnit,
-                                       {ignoreTypeVariables: false}) {
+  jsAst.Expression addTypeInOutputUnit(DartType type, OutputUnit outputUnit,
+      {ignoreTypeVariables: false}) {
     if (_typesMap[outputUnit] == null) {
       _typesMap[outputUnit] = new Map<DartType, _BoundMetadataEntry>();
     }
     return _typesMap[outputUnit].putIfAbsent(type, () {
       _BoundMetadataEntry result = new _BoundMetadataEntry(
           _computeTypeRepresentation(type,
-                                     ignoreTypeVariables: ignoreTypeVariables));
+              ignoreTypeVariables: ignoreTypeVariables));
       if (_compiler.options.hasIncrementalSupport) {
         result.finalize(_globalTypesCounter++);
       }
@@ -369,9 +363,10 @@
     }
     void countTokensInTypes(Iterable<_BoundMetadataEntry> entries) {
       jsAst.TokenCounter counter = new jsAst.TokenCounter();
-      entries.where((_BoundMetadataEntry e) => e._rc > 0)
-             .map((_BoundMetadataEntry e) => e.entry)
-             .forEach(counter.countTokens);
+      entries
+          .where((_BoundMetadataEntry e) => e._rc > 0)
+          .map((_BoundMetadataEntry e) => e.entry)
+          .forEach(counter.countTokens);
     }
 
     jsAst.ArrayInitializer finalizeMap(Map<dynamic, _BoundMetadataEntry> map) {
@@ -394,7 +389,7 @@
       List<jsAst.Node> values =
           entries.map((_BoundMetadataEntry e) => e.entry).toList();
 
-       return new jsAst.ArrayInitializer(values);
+      return new jsAst.ArrayInitializer(values);
     }
 
     _globalMetadata.setExpression(finalizeMap(_globalMetadataMap));
diff --git a/pkg/compiler/lib/src/js_emitter/model.dart b/pkg/compiler/lib/src/js_emitter/model.dart
index 7141627..c7adf76 100644
--- a/pkg/compiler/lib/src/js_emitter/model.dart
+++ b/pkg/compiler/lib/src/js_emitter/model.dart
@@ -4,18 +4,11 @@
 
 library dart2js.new_js_emitter.model;
 
-import '../constants/values.dart' show
-    ConstantValue;
-import '../deferred_load.dart' show
-    OutputUnit;
-import '../elements/elements.dart' show
-    Element;
-import '../js/js.dart' as js show
-    Expression,
-    Literal,
-    Name,
-    Statement,
-    TokenFinalizer;
+import '../constants/values.dart' show ConstantValue;
+import '../deferred_load.dart' show OutputUnit;
+import '../elements/elements.dart' show Element;
+import '../js/js.dart' as js
+    show Expression, Literal, Name, Statement, TokenFinalizer;
 
 import 'js_emitter.dart' show MetadataCollector;
 
@@ -25,8 +18,10 @@
   final bool outputContainsConstantList;
   final bool needsNativeSupport;
   final bool hasIsolateSupport;
+
   /// A map from load id to the list of fragments that need to be loaded.
   final Map<String, List<Fragment>> loadMap;
+
   /// A map from names to strings.
   ///
   /// This map is needed to support `const Symbol` expressions;
@@ -41,16 +36,11 @@
   final MetadataCollector _metadataCollector;
   final Iterable<js.TokenFinalizer> finalizers;
 
-  Program(this.fragments,
-          this.holders,
-          this.loadMap,
-          this.symbolsMap,
-          this.typeToInterceptorMap,
-          this._metadataCollector,
-          this.finalizers,
-          {this.needsNativeSupport,
-           this.outputContainsConstantList,
-           this.hasIsolateSupport}) {
+  Program(this.fragments, this.holders, this.loadMap, this.symbolsMap,
+      this.typeToInterceptorMap, this._metadataCollector, this.finalizers,
+      {this.needsNativeSupport,
+      this.outputContainsConstantList,
+      this.hasIsolateSupport}) {
     assert(needsNativeSupport != null);
     assert(outputContainsConstantList != null);
     assert(hasIsolateSupport != null);
@@ -121,12 +111,13 @@
   /// Output file name without extension.
   final String outputFileName;
 
-  Fragment(this.outputUnit,
-           this.outputFileName,
-           this.libraries,
-           this.staticNonFinalFields,
-           this.staticLazilyInitializedFields,
-           this.constants);
+  Fragment(
+      this.outputUnit,
+      this.outputFileName,
+      this.libraries,
+      this.staticNonFinalFields,
+      this.staticLazilyInitializedFields,
+      this.constants);
 
   bool get isMainFragment;
 }
@@ -140,19 +131,16 @@
 class MainFragment extends Fragment {
   final js.Statement invokeMain;
 
-  MainFragment(OutputUnit outputUnit,
-               String outputFileName,
-               this.invokeMain,
-               List<Library> libraries,
-               List<StaticField> staticNonFinalFields,
-               List<StaticField> staticLazilyInitializedFields,
-               List<Constant> constants)
-      : super(outputUnit,
-              outputFileName,
-              libraries,
-              staticNonFinalFields,
-              staticLazilyInitializedFields,
-              constants);
+  MainFragment(
+      OutputUnit outputUnit,
+      String outputFileName,
+      this.invokeMain,
+      List<Library> libraries,
+      List<StaticField> staticNonFinalFields,
+      List<StaticField> staticLazilyInitializedFields,
+      List<Constant> constants)
+      : super(outputUnit, outputFileName, libraries, staticNonFinalFields,
+            staticLazilyInitializedFields, constants);
 
   bool get isMainFragment => true;
 }
@@ -163,19 +151,16 @@
 class DeferredFragment extends Fragment {
   final String name;
 
-  DeferredFragment(OutputUnit outputUnit,
-                   String outputFileName,
-                   this.name,
-                   List<Library> libraries,
-                   List<StaticField> staticNonFinalFields,
-                   List<StaticField> staticLazilyInitializedFields,
-                   List<Constant> constants)
-      : super(outputUnit,
-              outputFileName,
-              libraries,
-              staticNonFinalFields,
-              staticLazilyInitializedFields,
-              constants);
+  DeferredFragment(
+      OutputUnit outputUnit,
+      String outputFileName,
+      this.name,
+      List<Library> libraries,
+      List<StaticField> staticNonFinalFields,
+      List<StaticField> staticLazilyInitializedFields,
+      List<Constant> constants)
+      : super(outputUnit, outputFileName, libraries, staticNonFinalFields,
+            staticLazilyInitializedFields, constants);
 
   bool get isMainFragment => false;
 }
@@ -204,7 +189,7 @@
   final List<Field> staticFieldsForReflection;
 
   Library(this.element, this.uri, this.statics, this.classes,
-          this.staticFieldsForReflection);
+      this.staticFieldsForReflection);
 }
 
 class StaticField {
@@ -220,9 +205,8 @@
   final bool isFinal;
   final bool isLazy;
 
-  StaticField(this.element,
-              this.name, this.holder, this.code,
-              this.isFinal, this.isLazy);
+  StaticField(this.element, this.name, this.holder, this.code, this.isFinal,
+      this.isLazy);
 }
 
 class Class implements FieldContainer {
@@ -267,19 +251,22 @@
   /// Native extensions. See [NativeEmitter.prepareNativeClasses].
   List<Class> nativeExtensions;
 
-  Class(this.element, this.name, this.holder,
-        this.methods,
-        this.fields,
-        this.staticFieldsForReflection,
-        this.callStubs,
-        this.typeVariableReaderStubs,
-        this.noSuchMethodStubs,
-        this.checkedSetters,
-        this.isChecks,
-        this.functionTypeIndex,
-        {this.onlyForRti,
-         this.isDirectlyInstantiated,
-         this.isNative}) {
+  Class(
+      this.element,
+      this.name,
+      this.holder,
+      this.methods,
+      this.fields,
+      this.staticFieldsForReflection,
+      this.callStubs,
+      this.typeVariableReaderStubs,
+      this.noSuchMethodStubs,
+      this.checkedSetters,
+      this.isChecks,
+      this.functionTypeIndex,
+      {this.onlyForRti,
+      this.isDirectlyInstantiated,
+      this.isNative}) {
     assert(onlyForRti != null);
     assert(isDirectlyInstantiated != null);
     assert(isNative != null);
@@ -292,40 +279,44 @@
     _superclass = superclass;
   }
 
-  js.Name get superclassName
-      => superclass == null ? null : superclass.name;
+  js.Name get superclassName => superclass == null ? null : superclass.name;
 
-  int get superclassHolderIndex
-      => (superclass == null) ? 0 : superclass.holder.index;
+  int get superclassHolderIndex =>
+      (superclass == null) ? 0 : superclass.holder.index;
 }
 
 class MixinApplication extends Class {
   Class _mixinClass;
 
-  MixinApplication(Element element, js.Name name, Holder holder,
-                   List<Field> instanceFields,
-                   List<Field> staticFieldsForReflection,
-                   List<StubMethod> callStubs,
-                   List<StubMethod> typeVariableReaderStubs,
-                   List<StubMethod> checkedSetters,
-                   List<StubMethod> isChecks,
-                   js.Expression functionTypeIndex,
-                   {bool onlyForRti,
-                    bool isDirectlyInstantiated})
-      : super(element,
-              name, holder,
-              const <Method>[],
-              instanceFields,
-              staticFieldsForReflection,
-              callStubs,
-              typeVariableReaderStubs,
-              const <StubMethod>[],
-              checkedSetters,
-              isChecks,
-              functionTypeIndex,
-              onlyForRti: onlyForRti,
-              isDirectlyInstantiated: isDirectlyInstantiated,
-              isNative: false);
+  MixinApplication(
+      Element element,
+      js.Name name,
+      Holder holder,
+      List<Field> instanceFields,
+      List<Field> staticFieldsForReflection,
+      List<StubMethod> callStubs,
+      List<StubMethod> typeVariableReaderStubs,
+      List<StubMethod> checkedSetters,
+      List<StubMethod> isChecks,
+      js.Expression functionTypeIndex,
+      {bool onlyForRti,
+      bool isDirectlyInstantiated})
+      : super(
+            element,
+            name,
+            holder,
+            const <Method>[],
+            instanceFields,
+            staticFieldsForReflection,
+            callStubs,
+            typeVariableReaderStubs,
+            const <StubMethod>[],
+            checkedSetters,
+            isChecks,
+            functionTypeIndex,
+            onlyForRti: onlyForRti,
+            isDirectlyInstantiated: isDirectlyInstantiated,
+            isNative: false);
 
   bool get isMixinApplication => true;
   Class get mixinClass => _mixinClass;
@@ -362,9 +353,8 @@
   final bool needsCheckedSetter;
 
   // TODO(floitsch): support renamed fields.
-  Field(this.element, this.name, this.accessorName,
-        this.getterFlags, this.setterFlags,
-        this.needsCheckedSetter);
+  Field(this.element, this.name, this.accessorName, this.getterFlags,
+      this.setterFlags, this.needsCheckedSetter);
 
   bool get needsGetter => getterFlags != 0;
   bool get needsUncheckedSetter => setterFlags != 0;
@@ -383,6 +373,7 @@
   /// The element should only be used during the transition to the new model.
   /// Uses indicate missing information in the model.
   final Element element;
+
   /// The name of the method. If the method is a [ParameterStubMethod] for a
   /// static function, then the name can be `null`. In that case, only the
   /// [ParameterStubMethod.callName] should be used.
@@ -418,17 +409,21 @@
   final js.Name callName;
 
   DartMethod(Element element, js.Name name, js.Expression code,
-             this.parameterStubs, this.callName,
-             {this.needsTearOff, this.tearOffName, this.canBeApplied,
-              this.canBeReflected, this.requiredParameterCount,
-              this.optionalParameterDefaultValues, this.functionType})
+      this.parameterStubs, this.callName,
+      {this.needsTearOff,
+      this.tearOffName,
+      this.canBeApplied,
+      this.canBeReflected,
+      this.requiredParameterCount,
+      this.optionalParameterDefaultValues,
+      this.functionType})
       : super(element, name, code) {
     assert(needsTearOff != null);
     assert(!needsTearOff || tearOffName != null);
     assert(canBeApplied != null);
     assert(canBeReflected != null);
     assert((!canBeReflected && !canBeApplied) ||
-           (requiredParameterCount != null &&
+        (requiredParameterCount != null &&
             optionalParameterDefaultValues != null));
   }
 
@@ -447,27 +442,25 @@
   /// functions that can be torn off.
   final bool isClosureCallMethod;
 
-
   InstanceMethod(Element element, js.Name name, js.Expression code,
-                 List<ParameterStubMethod> parameterStubs,
-                 js.Name callName,
-                 {bool needsTearOff,
-                  js.Name tearOffName,
-                  this.aliasName,
-                  bool canBeApplied,
-                  bool canBeReflected,
-                  int requiredParameterCount,
-                  /* List | Map */ optionalParameterDefaultValues,
-                  this.isClosureCallMethod,
-                  js.Expression functionType})
+      List<ParameterStubMethod> parameterStubs, js.Name callName,
+      {bool needsTearOff,
+      js.Name tearOffName,
+      this.aliasName,
+      bool canBeApplied,
+      bool canBeReflected,
+      int requiredParameterCount,
+      /* List | Map */ optionalParameterDefaultValues,
+      this.isClosureCallMethod,
+      js.Expression functionType})
       : super(element, name, code, parameterStubs, callName,
-              needsTearOff: needsTearOff,
-              tearOffName: tearOffName,
-              canBeApplied: canBeApplied,
-              canBeReflected: canBeReflected,
-              requiredParameterCount: requiredParameterCount,
-              optionalParameterDefaultValues: optionalParameterDefaultValues,
-              functionType: functionType) {
+            needsTearOff: needsTearOff,
+            tearOffName: tearOffName,
+            canBeApplied: canBeApplied,
+            canBeReflected: canBeReflected,
+            requiredParameterCount: requiredParameterCount,
+            optionalParameterDefaultValues: optionalParameterDefaultValues,
+            functionType: functionType) {
     assert(isClosureCallMethod != null);
   }
 
@@ -478,8 +471,7 @@
 /// to a method in the original Dart program. Examples are getter and setter
 /// stubs and stubs to dispatch calls to methods with optional parameters.
 class StubMethod extends Method {
-  StubMethod(js.Name name, js.Expression code,
-             {Element element})
+  StubMethod(js.Name name, js.Expression code, {Element element})
       : super(element, name, code);
 }
 
@@ -511,22 +503,28 @@
 class StaticDartMethod extends DartMethod implements StaticMethod {
   final Holder holder;
 
-  StaticDartMethod(Element element, js.Name name, this.holder,
-                   js.Expression code, List<ParameterStubMethod> parameterStubs,
-                   js.Name callName,
-                   {bool needsTearOff, js.Name tearOffName,
-                    bool canBeApplied, bool canBeReflected,
-                    int requiredParameterCount,
-                    /* List | Map */ optionalParameterDefaultValues,
-                    js.Expression functionType})
+  StaticDartMethod(
+      Element element,
+      js.Name name,
+      this.holder,
+      js.Expression code,
+      List<ParameterStubMethod> parameterStubs,
+      js.Name callName,
+      {bool needsTearOff,
+      js.Name tearOffName,
+      bool canBeApplied,
+      bool canBeReflected,
+      int requiredParameterCount,
+      /* List | Map */ optionalParameterDefaultValues,
+      js.Expression functionType})
       : super(element, name, code, parameterStubs, callName,
-              needsTearOff: needsTearOff,
-              tearOffName : tearOffName,
-              canBeApplied : canBeApplied,
-              canBeReflected : canBeReflected,
-              requiredParameterCount: requiredParameterCount,
-              optionalParameterDefaultValues: optionalParameterDefaultValues,
-              functionType: functionType);
+            needsTearOff: needsTearOff,
+            tearOffName: tearOffName,
+            canBeApplied: canBeApplied,
+            canBeReflected: canBeReflected,
+            requiredParameterCount: requiredParameterCount,
+            optionalParameterDefaultValues: optionalParameterDefaultValues,
+            functionType: functionType);
 
   bool get isStatic => true;
 }
diff --git a/pkg/compiler/lib/src/js_emitter/native_emitter.dart b/pkg/compiler/lib/src/js_emitter/native_emitter.dart
index dab8fe0..6377d27 100644
--- a/pkg/compiler/lib/src/js_emitter/native_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/native_emitter.dart
@@ -5,7 +5,6 @@
 part of dart2js.js_emitter;
 
 class NativeEmitter {
-
   // TODO(floitsch): the native-emitter should not know about ClassBuilders.
   final Map<Element, full_js_emitter.ClassBuilder> cachedBuilders;
 
@@ -71,7 +70,8 @@
    * [classesModifiedByEmitRTISupport] contains the list of classes that must
    * exist, because runtime-type support adds information to the class.
    */
-  Set<Class> prepareNativeClasses(List<Class> classes,
+  Set<Class> prepareNativeClasses(
+      List<Class> classes,
       Set<ClassElement> interceptorClassesNeededByConstants,
       Set<ClassElement> classesModifiedByEmitRTISupport) {
     assert(classes.every((Class cls) => cls != null));
@@ -137,9 +137,9 @@
         needed = true;
       }
       if (backend.isJsInterop(classElement)) {
-        needed = true;  // TODO(jacobr): we don't need all interop classes.
+        needed = true; // TODO(jacobr): we don't need all interop classes.
       } else if (cls.isNative &&
-                 backend.nativeData.hasNativeTagsForcedNonLeaf(classElement)) {
+          backend.nativeData.hasNativeTagsForcedNonLeaf(classElement)) {
         needed = true;
         nonLeafClasses.add(cls);
       }
@@ -162,8 +162,7 @@
       List<String> nativeTags =
           backend.nativeData.getNativeTagsOfClass(cls.element);
 
-      if (nonLeafClasses.contains(cls) ||
-          extensionPoints.containsKey(cls)) {
+      if (nonLeafClasses.contains(cls) || extensionPoints.containsKey(cls)) {
         nonleafTags
             .putIfAbsent(cls, () => new Set<String>())
             .addAll(nativeTags);
@@ -237,9 +236,7 @@
       if (cls.isNative) continue;
       Class nativeAncestor = nativeAncestorOf(cls);
       if (nativeAncestor != null) {
-        map
-          .putIfAbsent(nativeAncestor, () => <Class>[])
-          .add(cls);
+        map.putIfAbsent(nativeAncestor, () => <Class>[]).add(cls);
       }
     }
     return map;
@@ -252,18 +249,15 @@
           field.needsCheckedSetter;
     }
 
-    return
-        cls.methods.isEmpty &&
+    return cls.methods.isEmpty &&
         cls.isChecks.isEmpty &&
         cls.callStubs.isEmpty &&
         !cls.superclass.isMixinApplication &&
         !cls.fields.any(needsAccessor);
   }
 
-  void potentiallyConvertDartClosuresToJs(
-      List<jsAst.Statement> statements,
-      FunctionElement member,
-      List<jsAst.Parameter> stubParameters) {
+  void potentiallyConvertDartClosuresToJs(List<jsAst.Statement> statements,
+      FunctionElement member, List<jsAst.Parameter> stubParameters) {
     FunctionSignature parameters = member.functionSignature;
     Element converter = helpers.closureConverter;
     jsAst.Expression closureConverter =
@@ -280,9 +274,8 @@
             // typedef(s).
             FunctionType functionType = type;
             int arity = functionType.computeArity();
-            statements.add(
-                js.statement('# = #(#, $arity)',
-                    [name, closureConverter, name]));
+            statements.add(js
+                .statement('# = #(#, $arity)', [name, closureConverter, name]));
             break;
           }
         }
@@ -320,13 +313,13 @@
 
     if (isInterceptedMethod) {
       receiver = argumentsBuffer[0];
-      arguments = argumentsBuffer.sublist(1,
-          indexOfLastOptionalArgumentInParameters + 1);
+      arguments = argumentsBuffer.sublist(
+          1, indexOfLastOptionalArgumentInParameters + 1);
     } else {
       // Native methods that are not intercepted must be static.
       assert(invariant(member, member.isStatic));
-      arguments = argumentsBuffer.sublist(0,
-          indexOfLastOptionalArgumentInParameters + 1);
+      arguments = argumentsBuffer.sublist(
+          0, indexOfLastOptionalArgumentInParameters + 1);
       if (backend.isJsInterop(member)) {
         // fixedBackendPath is allowed to have the form foo.bar.baz for
         // interop. This template is uncached to avoid possibly running out of
@@ -334,14 +327,15 @@
         // caching these templates causing an issue  is very low as each class
         // and library that uses typed JavaScript interop will create only 1
         // unique template.
-        receiver = js.uncachedExpressionTemplate(
-            backend.namer.fixedBackendPath(member)).instantiate([]);
+        receiver = js
+            .uncachedExpressionTemplate(backend.namer.fixedBackendPath(member))
+            .instantiate([]);
       } else {
         receiver = js('this');
       }
     }
-    statements.add(
-        js.statement('return #.#(#)', [receiver, target, arguments]));
+    statements
+        .add(js.statement('return #.#(#)', [receiver, target, arguments]));
 
     return statements;
   }
@@ -366,4 +360,4 @@
     if (backend.isNativeOrExtendsNative(cls)) return true;
     return isSupertypeOfNativeClass(element);
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/js_emitter/native_generator.dart b/pkg/compiler/lib/src/js_emitter/native_generator.dart
index fd15d8a..4dfa36c 100644
--- a/pkg/compiler/lib/src/js_emitter/native_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/native_generator.dart
@@ -5,7 +5,6 @@
 part of dart2js.js_emitter;
 
 class NativeGenerator {
-
   static bool needsIsolateAffinityTagInitialization(JavaScriptBackend backend) {
     return backend.needToInitializeIsolateAffinityTag;
   }
@@ -27,7 +26,8 @@
     jsAst.Expression dispatchPropertyNameAccess =
         generateEmbeddedGlobalAccess(embeddedNames.DISPATCH_PROPERTY_NAME);
 
-    return js.statement('''
+    return js.statement(
+        '''
       !function() {
         var intern = #internStringFunction;
 
@@ -56,11 +56,14 @@
         }
       }();
     ''',
-    {'initializeDispatchProperty': backend.needToInitializeDispatchProperty,
-     'internStringFunction': internStringFunction,
-     'getIsolateTag': getIsolateTagAccess,
-     'isolateTag': isolateTagAccess,
-     'dispatchPropertyName': dispatchPropertyNameAccess});
+        {
+          'initializeDispatchProperty':
+              backend.needToInitializeDispatchProperty,
+          'internStringFunction': internStringFunction,
+          'getIsolateTag': getIsolateTagAccess,
+          'isolateTag': isolateTagAccess,
+          'dispatchPropertyName': dispatchPropertyNameAccess
+        });
   }
 
   static String generateIsolateTagRoot() {
@@ -83,8 +86,7 @@
 
     String formatTags(Iterable<String> tags) {
       if (tags == null) return '';
-      return (tags.toList()
-        ..sort()).join('|');
+      return (tags.toList()..sort()).join('|');
     }
 
     String leafStr = formatTags(leafTags);
@@ -92,9 +94,7 @@
 
     StringBuffer sb = new StringBuffer(leafStr);
     if (nonLeafStr != '') {
-      sb
-        ..write(';')
-        ..write(nonLeafStr);
+      sb..write(';')..write(nonLeafStr);
     }
 
     String encoding = sb.toString();
@@ -104,9 +104,8 @@
       if (extensions != null) {
         parts
           ..add(js.stringPart(';'))
-          ..addAll(
-            js.joinLiterals(extensions.map((Class cls) => cls.name),
-            js.stringPart('|')));
+          ..addAll(js.joinLiterals(
+              extensions.map((Class cls) => cls.name), js.stringPart('|')));
       }
       return jsAst.concatenateStrings(parts, addQuotes: true);
     }
@@ -148,7 +147,8 @@
       jsAst.Expression leafTagsAccess) {
     jsAst.Expression subclassRead =
         subclassReadGenerator(js('subclasses[i]', []));
-    return js.statement('''
+    return js.statement(
+        '''
           // The native info looks like this:
           //
           // HtmlElement: {
@@ -196,12 +196,15 @@
               }
             }
           }
-    ''', {'info': infoAccess,
+    ''',
+        {
+          'info': infoAccess,
           'constructor': constructorAccess,
           'subclassRead': subclassRead,
           'interceptorsByTagAccess': interceptorsByTagAccess,
           'leafTagsAccess': leafTagsAccess,
           'nativeSuperclassTagName': embeddedNames.NATIVE_SUPERCLASS_TAG_NAME,
-          'allowNativesSubclassing': true});
+          'allowNativesSubclassing': true
+        });
   }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
index 8325fe1..bc1de29 100644
--- a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
@@ -18,7 +18,7 @@
   DiagnosticReporter get reporter => compiler.reporter;
 
   bool needsSuperGetter(FunctionElement element) =>
-    compiler.codegenWorld.methodsNeedingSuperGetter.contains(element);
+      compiler.codegenWorld.methodsNeedingSuperGetter.contains(element);
 
   /**
    * Generates stubs to handle invocation of methods with optional
@@ -36,9 +36,8 @@
    * name [ParameterStubMethod.name] and [ParameterStubMethod.callName] set if
    * the input selector is non-null (and the member needs a stub).
    */
-  ParameterStubMethod generateParameterStub(FunctionElement member,
-                                            Selector selector,
-                                            Selector callSelector) {
+  ParameterStubMethod generateParameterStub(
+      FunctionElement member, Selector selector, Selector callSelector) {
     CallStructure callStructure = selector.callStructure;
     FunctionSignature parameters = member.functionSignature;
     int positionalArgumentCount = callStructure.positionalArgumentCount;
@@ -69,9 +68,8 @@
     List<jsAst.Parameter> parametersBuffer =
         new List<jsAst.Parameter>(selector.argumentCount + extraArgumentCount);
     // The arguments that will be passed to the real method.
-    List<jsAst.Expression> argumentsBuffer =
-        new List<jsAst.Expression>(
-            parameters.parameterCount + extraArgumentCount);
+    List<jsAst.Expression> argumentsBuffer = new List<jsAst.Expression>(
+        parameters.parameterCount + extraArgumentCount);
 
     int count = 0;
     if (isInterceptedMethod) {
@@ -117,11 +115,14 @@
       count++;
     });
 
-    var body;  // List or jsAst.Statement.
+    var body; // List or jsAst.Statement.
     if (backend.nativeData.hasFixedBackendName(member)) {
       body = emitterTask.nativeEmitter.generateParameterStubStatements(
-          member, isInterceptedMethod, namer.invocationName(selector),
-          parametersBuffer, argumentsBuffer,
+          member,
+          isInterceptedMethod,
+          namer.invocationName(selector),
+          parametersBuffer,
+          argumentsBuffer,
           indexOfLastOptionalArgumentInParameters);
     } else if (member.isInstanceMember) {
       if (needsSuperGetter(member)) {
@@ -131,15 +132,14 @@
         // We thus can't just invoke `this.foo$1.call(filledInArguments)`.
         // Instead we need to call the statically resolved target.
         //   `<class>.prototype.bar$1.call(this, argument0, ...)`.
-        body = js.statement(
-            'return #.#.call(this, #);',
-            [backend.emitter.prototypeAccess(superClass,
-                                             hasBeenInstantiated: true),
-             methodName,
-             argumentsBuffer]);
+        body = js.statement('return #.#.call(this, #);', [
+          backend.emitter
+              .prototypeAccess(superClass, hasBeenInstantiated: true),
+          methodName,
+          argumentsBuffer
+        ]);
       } else {
-        body = js.statement(
-            'return this.#(#);',
+        body = js.statement('return this.#(#);',
             [namer.instanceMethodName(member), argumentsBuffer]);
       }
     } else {
@@ -187,7 +187,7 @@
   // (2) foo$3$c(a, b, c) => MyClass.foo$4$c$d(this, a, b, c, null);
   // (3) foo$3$d(a, b, d) => MyClass.foo$4$c$d(this, a, b, null, d);
   List<ParameterStubMethod> generateParameterStubs(MethodElement member,
-                                                   {bool canTearOff: true}) {
+      {bool canTearOff: true}) {
     if (member.enclosingElement.isClosure) {
       ClosureClassElement cls = member.enclosingElement;
       if (cls.supertype.element == backend.helpers.boundClosureClass) {
@@ -212,7 +212,7 @@
 
     // Only instance members (not static methods) need stubs.
     if (member.isInstanceMember) {
-        selectors = compiler.codegenWorld.invocationsByName(member.name);
+      selectors = compiler.codegenWorld.invocationsByName(member.name);
     }
 
     if (canTearOff) {
@@ -222,8 +222,8 @@
 
     assert(emptySelectorSet.isEmpty);
     if (selectors == null) selectors = const <Selector, SelectorConstraints>{};
-    if (callSelectors == null) callSelectors =
-        const <Selector, SelectorConstraints>{};
+    if (callSelectors == null)
+      callSelectors = const <Selector, SelectorConstraints>{};
 
     List<ParameterStubMethod> stubs = <ParameterStubMethod>[];
 
@@ -244,9 +244,8 @@
     // Start with the callSelectors since they imply the generation of the
     // non-call version.
     for (Selector selector in callSelectors.keys) {
-      Selector renamedSelector = new Selector.call(
-          member.memberName,
-          selector.callStructure);
+      Selector renamedSelector =
+          new Selector.call(member.memberName, selector.callStructure);
       renamedCallSelectors.add(renamedSelector);
 
       if (!renamedSelector.appliesUnnamed(member, compiler.world)) continue;
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
index 2f5d257..6c76418 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
@@ -76,19 +76,18 @@
     // Go over specialized interceptors and then constants to know which
     // interceptors are needed.
     Set<ClassElement> needed = new Set<ClassElement>();
-    backend.specializedGetInterceptors.forEach(
-        (_, Iterable<ClassElement> elements) {
-          needed.addAll(elements);
-        }
-    );
+    backend.specializedGetInterceptors
+        .forEach((_, Iterable<ClassElement> elements) {
+      needed.addAll(elements);
+    });
 
     // Add interceptors referenced by constants.
     needed.addAll(computeInterceptorsReferencedFromConstants());
 
     // Add unneeded interceptors to the [unneededClasses] set.
     for (ClassElement interceptor in backend.interceptedClasses) {
-      if (!needed.contains(interceptor)
-          && interceptor != coreClasses.objectClass) {
+      if (!needed.contains(interceptor) &&
+          interceptor != coreClasses.objectClass) {
         unneededClasses.add(interceptor);
       }
     }
@@ -117,11 +116,12 @@
         if (backend.isAccessibleByReflection(element)) {
           bool shouldRetainMetadata = backend.retainMetadataOf(element);
           if (shouldRetainMetadata &&
-              (element.isFunction || element.isConstructor ||
-               element.isSetter)) {
+              (element.isFunction ||
+                  element.isConstructor ||
+                  element.isSetter)) {
             FunctionElement function = element;
-            function.functionSignature.forEachParameter(
-                backend.retainMetadataOf);
+            function.functionSignature
+                .forEachParameter(backend.retainMetadataOf);
           }
         }
       }
@@ -130,12 +130,8 @@
         if (!onlyForRti) {
           backend.retainMetadataOf(cls);
           new FieldVisitor(compiler, namer).visitFields(cls, false,
-              (Element member,
-               js.Name name,
-               js.Name accessorName,
-               bool needsGetter,
-               bool needsSetter,
-               bool needsCheckedSetter) {
+              (Element member, js.Name name, js.Name accessorName,
+                  bool needsGetter, bool needsSetter, bool needsCheckedSetter) {
             bool needsAccessor = needsGetter || needsSetter;
             if (needsAccessor && backend.isAccessibleByReflection(member)) {
               backend.retainMetadataOf(member);
@@ -147,9 +143,8 @@
     }
 
     JavaScriptConstantCompiler handler = backend.constants;
-    List<ConstantValue> constants = handler.getConstantsForEmission(
-        compiler.options.hasIncrementalSupport ? null
-            : emitter.compareConstants);
+    List<ConstantValue> constants = handler.getConstantsForEmission(compiler
+        .options.hasIncrementalSupport ? null : emitter.compareConstants);
     for (ConstantValue constant in constants) {
       if (emitter.isConstantInlinedOrAlreadyEmitted(constant)) continue;
 
@@ -163,23 +158,25 @@
         // TODO(sigurdm): We should track those constants.
         constantUnit = compiler.deferredLoadTask.mainOutputUnit;
       }
-      outputConstantLists.putIfAbsent(
-          constantUnit, () => new List<ConstantValue>()).add(constant);
+      outputConstantLists
+          .putIfAbsent(constantUnit, () => new List<ConstantValue>())
+          .add(constant);
     }
   }
 
   /// Compute all the classes and typedefs that must be emitted.
   void computeNeededDeclarations() {
     // Compute needed typedefs.
-    typedefsNeededForReflection = Elements.sortedByPosition(
-        compiler.world.allTypedefs
-            .where(backend.isAccessibleByReflection)
-            .toList());
+    typedefsNeededForReflection = Elements.sortedByPosition(compiler
+        .world.allTypedefs
+        .where(backend.isAccessibleByReflection)
+        .toList());
 
     // Compute needed classes.
-    Set<ClassElement> instantiatedClasses =
-        compiler.codegenWorld.directlyInstantiatedClasses
-            .where(computeClassFilter()).toSet();
+    Set<ClassElement> instantiatedClasses = compiler
+        .codegenWorld.directlyInstantiatedClasses
+        .where(computeClassFilter())
+        .toSet();
 
     void addClassWithSuperclasses(ClassElement cls) {
       neededClasses.add(cls);
@@ -245,14 +242,17 @@
           !classesOnlyNeededForRti.contains(element)) {
         // For now, native classes and related classes cannot be deferred.
         nativeClassesAndSubclasses.add(element);
-        assert(invariant(element,
-                         !compiler.deferredLoadTask.isDeferred(element)));
-        outputClassLists.putIfAbsent(compiler.deferredLoadTask.mainOutputUnit,
-            () => new List<ClassElement>()).add(element);
+        assert(
+            invariant(element, !compiler.deferredLoadTask.isDeferred(element)));
+        outputClassLists
+            .putIfAbsent(compiler.deferredLoadTask.mainOutputUnit,
+                () => new List<ClassElement>())
+            .add(element);
       } else {
-        outputClassLists.putIfAbsent(
-            compiler.deferredLoadTask.outputUnitForElement(element),
-            () => new List<ClassElement>())
+        outputClassLists
+            .putIfAbsent(
+                compiler.deferredLoadTask.outputUnitForElement(element),
+                () => new List<ClassElement>())
             .add(element);
       }
     }
@@ -278,7 +278,7 @@
     addToOutputUnit(Element element) {
       List<VariableElement> list = outputStaticNonFinalFieldLists.putIfAbsent(
           compiler.deferredLoadTask.outputUnitForElement(element),
-              () => new List<VariableElement>());
+          () => new List<VariableElement>());
       list.add(element);
     }
 
@@ -300,7 +300,8 @@
     void addSurroundingLibraryToSet(Element element) {
       OutputUnit unit = compiler.deferredLoadTask.outputUnitForElement(element);
       LibraryElement library = element.library;
-      outputLibraryLists.putIfAbsent(unit, () => new Set<LibraryElement>())
+      outputLibraryLists
+          .putIfAbsent(unit, () => new Set<LibraryElement>())
           .add(library);
     }
 
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
index 09eabaf..935fa5f 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/field_visitor.dart
@@ -22,13 +22,13 @@
  * case, [needsSetter] is always false. [needsCheckedSetter] is only true when
  * type assertions are enabled (checked mode).
  */
-typedef void AcceptField(VariableElement member,
-                         js.Name name,
-                         js.Name accessorName,
-                         bool needsGetter,
-                         bool needsSetter,
-                         bool needsCheckedSetter);
-
+typedef void AcceptField(
+    VariableElement member,
+    js.Name name,
+    js.Name accessorName,
+    bool needsGetter,
+    bool needsSetter,
+    bool needsCheckedSetter);
 
 class FieldVisitor {
   final Compiler compiler;
@@ -93,15 +93,15 @@
         needsSetter = fieldNeedsSetter(field);
       }
 
-      if ((isInstantiated && !backend.isNative(holder))
-          || needsGetter
-          || needsSetter) {
+      if ((isInstantiated && !backend.isNative(holder)) ||
+          needsGetter ||
+          needsSetter) {
         js.Name accessorName = namer.fieldAccessorName(field);
         js.Name fieldName = namer.fieldPropertyName(field);
         bool needsCheckedSetter = false;
-        if (compiler.options.enableTypeAssertions
-            && needsSetter
-            && !canAvoidGeneratedCheckedSetter(field)) {
+        if (compiler.options.enableTypeAssertions &&
+            needsSetter &&
+            !canAvoidGeneratedCheckedSetter(field)) {
           needsCheckedSetter = true;
           needsSetter = false;
         }
@@ -130,8 +130,8 @@
       // generate the field getter/setter dynamically. Since this is only
       // allowed on fields that are in [element] we don't need to visit
       // superclasses for non-instantiated classes.
-      cls.implementation.forEachInstanceField(
-          visitField, includeSuperAndInjectedMembers: isInstantiated);
+      cls.implementation.forEachInstanceField(visitField,
+          includeSuperAndInjectedMembers: isInstantiated);
     }
   }
 
@@ -140,7 +140,7 @@
     if (fieldAccessNeverThrows(field)) return false;
     if (backend.shouldRetainGetter(field)) return true;
     return field.isClassMember &&
-    compiler.codegenWorld.hasInvokedGetter(field, compiler.world);
+        compiler.codegenWorld.hasInvokedGetter(field, compiler.world);
   }
 
   bool fieldNeedsSetter(VariableElement field) {
@@ -154,11 +154,11 @@
 
   static bool fieldAccessNeverThrows(VariableElement field) {
     return
-      // We never access a field in a closure (a captured variable) without
-      // knowing that it is there.  Therefore we don't need to use a getter
-      // (that will throw if the getter method is missing), but can always
-      // access the field directly.
-      field is ClosureFieldElement;
+        // We never access a field in a closure (a captured variable) without
+        // knowing that it is there.  Therefore we don't need to use a getter
+        // (that will throw if the getter method is missing), but can always
+        // access the field directly.
+        field is ClosureFieldElement;
   }
 
   bool canAvoidGeneratedCheckedSetter(VariableElement member) {
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
index 7aef3a3..5d5afe6 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
@@ -4,65 +4,49 @@
 
 library dart2js.js_emitter.program_builder;
 
-import '../js_emitter.dart' show
-    ClassStubGenerator,
-    CodeEmitterTask,
-    computeMixinClass,
-    Emitter,
-    InterceptorStubGenerator,
-    MainCallStubGenerator,
-    ParameterStubGenerator,
-    RuntimeTypeGenerator,
-    TypeTestProperties;
+import '../js_emitter.dart'
+    show
+        ClassStubGenerator,
+        CodeEmitterTask,
+        computeMixinClass,
+        Emitter,
+        InterceptorStubGenerator,
+        MainCallStubGenerator,
+        ParameterStubGenerator,
+        RuntimeTypeGenerator,
+        TypeTestProperties;
 import '../model.dart';
 
-import '../../closure.dart' show
-    ClosureFieldElement;
+import '../../closure.dart' show ClosureFieldElement;
 import '../../common.dart';
-import '../../common/names.dart' show
-    Names,
-    Selectors;
-import '../../compiler.dart' show
-    Compiler;
-import '../../constants/values.dart' show
-    ConstantValue,
-    InterceptorConstantValue;
-import '../../core_types.dart' show
-    CoreClasses;
-import '../../dart_types.dart' show
-    DartType,
-    FunctionType,
-    TypedefType;
-import '../../elements/elements.dart' show
-    ClassElement,
-    Element,
-    Elements,
-    FieldElement,
-    FunctionElement,
-    FunctionSignature,
-    GetterElement,
-    LibraryElement,
-    MethodElement,
-    Name,
-    ParameterElement,
-    TypedefElement,
-    VariableElement;
+import '../../common/names.dart' show Names, Selectors;
+import '../../compiler.dart' show Compiler;
+import '../../constants/values.dart'
+    show ConstantValue, InterceptorConstantValue;
+import '../../core_types.dart' show CoreClasses;
+import '../../dart_types.dart' show DartType, FunctionType, TypedefType;
+import '../../elements/elements.dart'
+    show
+        ClassElement,
+        Element,
+        Elements,
+        FieldElement,
+        FunctionElement,
+        FunctionSignature,
+        GetterElement,
+        LibraryElement,
+        MethodElement,
+        Name,
+        ParameterElement,
+        TypedefElement,
+        VariableElement;
 import '../../js/js.dart' as js;
-import '../../js_backend/backend_helpers.dart' show
-    BackendHelpers;
-import '../../js_backend/js_backend.dart' show
-    Namer,
-    JavaScriptBackend,
-    JavaScriptConstantCompiler,
-    StringBackedName;
-import '../../universe/selector.dart' show
-    Selector;
-import '../../universe/universe.dart' show
-    Universe,
-    SelectorConstraints;
-import '../../deferred_load.dart' show
-    DeferredLoadTask,
-    OutputUnit;
+import '../../js_backend/backend_helpers.dart' show BackendHelpers;
+import '../../js_backend/js_backend.dart'
+    show Namer, JavaScriptBackend, JavaScriptConstantCompiler, StringBackedName;
+import '../../universe/selector.dart' show Selector;
+import '../../universe/universe.dart' show Universe, SelectorConstraints;
+import '../../deferred_load.dart' show DeferredLoadTask, OutputUnit;
 
 part 'collector.dart';
 part 'registry.dart';
@@ -87,11 +71,8 @@
   /// True if the program should store function types in the metadata.
   bool _storeFunctionTypesInMetadata = false;
 
-  ProgramBuilder(Compiler compiler,
-                 Namer namer,
-                 this._task,
-                 Emitter emitter,
-                 Set<ClassElement> rtiNeededClasses)
+  ProgramBuilder(Compiler compiler, Namer namer, this._task, Emitter emitter,
+      Set<ClassElement> rtiNeededClasses)
       : this._compiler = compiler,
         this.namer = namer,
         this.collector =
@@ -130,13 +111,13 @@
     // Note: In rare cases (mostly tests) output units can be empty. This
     // happens when the deferred code is dead-code eliminated but we still need
     // to check that the library has been loaded.
-    _compiler.deferredLoadTask.allOutputUnits.forEach(
-        _registry.registerOutputUnit);
+    _compiler.deferredLoadTask.allOutputUnits
+        .forEach(_registry.registerOutputUnit);
     collector.outputClassLists.forEach(_registry.registerElements);
     collector.outputStaticLists.forEach(_registry.registerElements);
     collector.outputConstantLists.forEach(_registerConstants);
-    collector.outputStaticNonFinalFieldLists.forEach(
-        _registry.registerElements);
+    collector.outputStaticNonFinalFieldLists
+        .forEach(_registry.registerElements);
 
     // We always add the current isolate holder.
     _registerStaticStateHolder();
@@ -144,7 +125,8 @@
     // We need to run the native-preparation before we build the output. The
     // preparation code, in turn needs the classes to be set up.
     // We thus build the classes before building their containers.
-    collector.outputClassLists.forEach((OutputUnit _, List<ClassElement> classes) {
+    collector.outputClassLists
+        .forEach((OutputUnit _, List<ClassElement> classes) {
       classes.forEach(_buildClass);
     });
 
@@ -169,9 +151,9 @@
     Set<ClassElement> classesModifiedByEmitRTISupport =
         _task.typeTestRegistry.computeClassesModifiedByEmitRuntimeTypeSupport();
 
-
     _unneededNativeClasses = _task.nativeEmitter.prepareNativeClasses(
-        nativeClasses, interceptorClassesNeededByConstants,
+        nativeClasses,
+        interceptorClassesNeededByConstants,
         classesModifiedByEmitRTISupport);
 
     _addJsInteropStubs(_registry.mainLibrariesMap);
@@ -199,14 +181,8 @@
       finalizers.add(namingFinalizer);
     }
 
-    return new Program(
-        fragments,
-        holders,
-        _buildLoadMap(),
-        _symbolsMap,
-        _buildTypeToInterceptorMap(),
-        _task.metadataCollector,
-        finalizers,
+    return new Program(fragments, holders, _buildLoadMap(), _symbolsMap,
+        _buildTypeToInterceptorMap(), _task.metadataCollector, finalizers,
         needsNativeSupport: needsNativeSupport,
         outputContainsConstantList: collector.outputContainsConstantList,
         hasIsolateSupport: _compiler.hasIsolateSupport);
@@ -238,7 +214,7 @@
     // Construct the main output from the libraries and the registered holders.
     MainFragment result = new MainFragment(
         librariesMap.outputUnit,
-        "",  // The empty string is the name for the main output file.
+        "", // The empty string is the name for the main output file.
         _buildInvokeMain(),
         _buildLibraries(librariesMap),
         _buildStaticNonFinalFields(librariesMap),
@@ -260,7 +236,7 @@
     DeferredFragment result = new DeferredFragment(
         librariesMap.outputUnit,
         backend.deferredPartFileName(librariesMap.name, addExtension: false),
-                                     librariesMap.name,
+        librariesMap.name,
         _buildLibraries(librariesMap),
         _buildStaticNonFinalFields(librariesMap),
         _buildStaticLazilyInitializedFields(librariesMap),
@@ -273,18 +249,17 @@
     List<ConstantValue> constantValues =
         collector.outputConstantLists[librariesMap.outputUnit];
     if (constantValues == null) return const <Constant>[];
-    return constantValues.map((ConstantValue value) => _constants[value])
+    return constantValues
+        .map((ConstantValue value) => _constants[value])
         .toList(growable: false);
   }
 
   List<StaticField> _buildStaticNonFinalFields(LibrariesMap librariesMap) {
     List<VariableElement> staticNonFinalFields =
-         collector.outputStaticNonFinalFieldLists[librariesMap.outputUnit];
+        collector.outputStaticNonFinalFieldLists[librariesMap.outputUnit];
     if (staticNonFinalFields == null) return const <StaticField>[];
 
-    return staticNonFinalFields
-        .map(_buildStaticField)
-        .toList(growable: false);
+    return staticNonFinalFields.map(_buildStaticField).toList(growable: false);
   }
 
   StaticField _buildStaticField(Element element) {
@@ -292,8 +267,8 @@
     ConstantValue initialValue = handler.getInitialValueFor(element);
     // TODO(zarah): The holder should not be registered during building of
     // a static field.
-    _registry.registerHolder(
-        namer.globalObjectForConstant(initialValue), isConstantsHolder: true);
+    _registry.registerHolder(namer.globalObjectForConstant(initialValue),
+        isConstantsHolder: true);
     js.Expression code = _task.emitter.constantReference(initialValue);
     js.Name name = namer.globalPropertyName(element);
     bool isFinal = false;
@@ -303,9 +278,8 @@
     // building a static field. (Note that the static-state holder was
     // already registered earlier, and that we just call the register to get
     // the holder-instance.
-    return new StaticField(element,
-                           name, _registerStaticStateHolder(), code,
-                           isFinal, isLazy);
+    return new StaticField(
+        element, name, _registerStaticStateHolder(), code, isFinal, isLazy);
   }
 
   List<StaticField> _buildStaticLazilyInitializedFields(
@@ -316,9 +290,10 @@
         .getLazilyInitializedFieldsForEmission()
         .where((element) =>
             loadTask.outputUnitForElement(element) == librariesMap.outputUnit);
-    return Elements.sortedByPosition(lazyFields)
+    return Elements
+        .sortedByPosition(lazyFields)
         .map(_buildLazyField)
-        .where((field) => field != null)  // Happens when the field was unused.
+        .where((field) => field != null) // Happens when the field was unused.
         .toList(growable: false);
   }
 
@@ -336,9 +311,8 @@
     // building a static field. (Note that the static-state holder was
     // already registered earlier, and that we just call the register to get
     // the holder-instance.
-    return new StaticField(element,
-                           name, _registerStaticStateHolder(), code,
-                           isFinal, isLazy);
+    return new StaticField(
+        element, name, _registerStaticStateHolder(), code, isFinal, isLazy);
   }
 
   List<Library> _buildLibraries(LibrariesMap librariesMap) {
@@ -356,8 +330,7 @@
       // TODO(jacobr): register toString as used so that it is always accessible
       // from JavaScript.
       _classes[_compiler.coreClasses.objectClass].callStubs.add(
-          _buildStubMethod(
-              new StringBackedName("toString"),
+          _buildStubMethod(new StringBackedName("toString"),
               js.js('function() { return this.#(this) }', toStringInvocation)));
     }
 
@@ -382,10 +355,8 @@
                 for (var selector in selectors.keys) {
                   var stubName = namer.invocationName(selector);
                   if (stubNames.add(stubName.key)) {
-                    interceptorClass.callStubs.add(_buildStubMethod(
-                        stubName,
-                        js.js(
-                            'function(obj) { return obj.# }', [member.name]),
+                    interceptorClass.callStubs.add(_buildStubMethod(stubName,
+                        js.js('function(obj) { return obj.# }', [member.name]),
                         element: member));
                   }
                 }
@@ -422,8 +393,8 @@
                 if (returnType.isFunctionType) {
                   functionType = returnType;
                 } else if (returnType.treatAsDynamic ||
-                    _compiler.types.isSubtype(returnType,
-                        backend.coreTypes.functionType)) {
+                    _compiler.types.isSubtype(
+                        returnType, backend.coreTypes.functionType)) {
                   if (returnType.isTypedef) {
                     TypedefType typedef = returnType;
                     // TODO(jacobr): can we just use typdef.unaliased instead?
@@ -464,8 +435,8 @@
                   if (argumentCount > maxArgs) break;
                   var stubName = namer.invocationName(selector);
                   if (!stubNames.add(stubName.key)) break;
-                  var parameters = new List<String>.generate(argumentCount,
-                      (i) => 'p$i');
+                  var parameters =
+                      new List<String>.generate(argumentCount, (i) => 'p$i');
 
                   // We intentionally generate the same stub method for direct
                   // calls and call-throughs of getters so that calling a
@@ -514,8 +485,8 @@
     bool visitStatics = true;
     List<Field> staticFieldsForReflection = _buildFields(library, visitStatics);
 
-    return new Library(library, uri, statics, classes,
-                       staticFieldsForReflection);
+    return new Library(
+        library, uri, statics, classes, staticFieldsForReflection);
   }
 
   /// HACK for Incremental Compilation.
@@ -563,7 +534,6 @@
         Map<Selector, SelectorConstraints> selectors =
             _compiler.codegenWorld.invocationsByName(member.name);
         if (selectors != null && !selectors.isEmpty) {
-
           Map<js.Name, js.Expression> callStubsForMember =
               classStubGenerator.generateCallStubsForGetter(member, selectors);
           callStubsForMember.forEach((js.Name name, js.Expression code) {
@@ -588,9 +558,8 @@
         if (backend.symbolsUsed.contains(selectorName)) {
           _symbolsMap[name] = selectorName;
         }
-        noSuchMethodStubs
-            .add(classStubGenerator.generateStubForNoSuchMethod(name,
-                                                                selector));
+        noSuchMethodStubs.add(
+            classStubGenerator.generateStubForNoSuchMethod(name, selector));
       });
     }
 
@@ -615,17 +584,16 @@
     List<Field> staticFieldsForReflection =
         onlyForRti ? const <Field>[] : _buildFields(element, true);
 
-    TypeTestProperties typeTests =
-        runtimeTypeGenerator.generateIsTests(
-            element,
-            storeFunctionTypeInMetadata: _storeFunctionTypesInMetadata);
+    TypeTestProperties typeTests = runtimeTypeGenerator.generateIsTests(element,
+        storeFunctionTypeInMetadata: _storeFunctionTypesInMetadata);
 
     List<StubMethod> checkedSetters = <StubMethod>[];
     List<StubMethod> isChecks = <StubMethod>[];
     if (backend.isJsInterop(element)) {
       typeTests.properties.forEach((js.Name name, js.Node code) {
-        _classes[helpers.jsInterceptorClass].isChecks.add(
-            _buildStubMethod(name, code));
+        _classes[helpers.jsInterceptorClass]
+            .isChecks
+            .add(_buildStubMethod(name, code));
       });
     } else {
       for (Field field in instanceFields) {
@@ -657,30 +625,36 @@
       assert(!backend.isNative(element));
       assert(methods.isEmpty);
 
-      result = new MixinApplication(element,
-                                    name, holder,
-                                    instanceFields,
-                                    staticFieldsForReflection,
-                                    callStubs,
-                                    typeVariableReaderStubs,
-                                    checkedSetters,
-                                    isChecks,
-                                    typeTests.functionTypeIndex,
-                                    isDirectlyInstantiated: isInstantiated,
-                                    onlyForRti: onlyForRti);
+      result = new MixinApplication(
+          element,
+          name,
+          holder,
+          instanceFields,
+          staticFieldsForReflection,
+          callStubs,
+          typeVariableReaderStubs,
+          checkedSetters,
+          isChecks,
+          typeTests.functionTypeIndex,
+          isDirectlyInstantiated: isInstantiated,
+          onlyForRti: onlyForRti);
     } else {
-      result = new Class(element,
-                         name, holder, methods, instanceFields,
-                         staticFieldsForReflection,
-                         callStubs,
-                         typeVariableReaderStubs,
-                         noSuchMethodStubs,
-                         checkedSetters,
-                         isChecks,
-                         typeTests.functionTypeIndex,
-                         isDirectlyInstantiated: isInstantiated,
-                         onlyForRti: onlyForRti,
-                         isNative: backend.isNative(element));
+      result = new Class(
+          element,
+          name,
+          holder,
+          methods,
+          instanceFields,
+          staticFieldsForReflection,
+          callStubs,
+          typeVariableReaderStubs,
+          noSuchMethodStubs,
+          checkedSetters,
+          isChecks,
+          typeTests.functionTypeIndex,
+          isDirectlyInstantiated: isInstantiated,
+          onlyForRti: onlyForRti,
+          isNative: backend.isNative(element));
     }
     _classes[element] = result;
     return result;
@@ -762,7 +736,7 @@
         canTearOff = universe.hasInvokedGetter(element, _compiler.world) ||
             (canBeReflected && !element.isOperator);
         assert(canTearOff ||
-               !universe.methodsNeedingSuperGetter.contains(element));
+            !universe.methodsNeedingSuperGetter.contains(element));
         tearOffName = namer.getterForElement(element);
       }
     }
@@ -809,9 +783,12 @@
 
     return new InstanceMethod(element, name, code,
         _generateParameterStubs(element, canTearOff), callName,
-        needsTearOff: canTearOff, tearOffName: tearOffName,
-        isClosureCallMethod: isClosureCallMethod, aliasName: aliasName,
-        canBeApplied: canBeApplied, canBeReflected: canBeReflected,
+        needsTearOff: canTearOff,
+        tearOffName: tearOffName,
+        isClosureCallMethod: isClosureCallMethod,
+        aliasName: aliasName,
+        canBeApplied: canBeApplied,
+        canBeReflected: canBeReflected,
         requiredParameterCount: requiredParameterCount,
         optionalParameterDefaultValues: optionalParameterDefaultValues,
         functionType: functionType);
@@ -827,9 +804,8 @@
     }
   }
 
-  List<ParameterStubMethod> _generateParameterStubs(MethodElement element,
-                                                    bool canTearOff) {
-
+  List<ParameterStubMethod> _generateParameterStubs(
+      MethodElement element, bool canTearOff) {
     if (!_methodNeedsStubs(element)) return const <ParameterStubMethod>[];
 
     ParameterStubGenerator generator =
@@ -841,8 +817,7 @@
   ///
   /// Stub methods may have an element that can be used for code-size
   /// attribution.
-  Method _buildStubMethod(js.Name name, js.Expression code,
-                          {Element element}) {
+  Method _buildStubMethod(js.Name name, js.Expression code, {Element element}) {
     return new StubMethod(name, code, element: element);
   }
 
@@ -881,13 +856,9 @@
 
   List<Field> _buildFields(Element holder, bool visitStatics) {
     List<Field> fields = <Field>[];
-    new FieldVisitor(_compiler, namer).visitFields(
-        holder, visitStatics, (VariableElement field,
-                               js.Name name,
-                               js.Name accessorName,
-                               bool needsGetter,
-                               bool needsSetter,
-                               bool needsCheckedSetter) {
+    new FieldVisitor(_compiler, namer).visitFields(holder, visitStatics,
+        (VariableElement field, js.Name name, js.Name accessorName,
+            bool needsGetter, bool needsSetter, bool needsCheckedSetter) {
       assert(invariant(field, field.isDeclaration));
 
       int getterFlags = 0;
@@ -917,9 +888,8 @@
         }
       }
 
-      fields.add(new Field(field, name, accessorName,
-                           getterFlags, setterFlags,
-                           needsCheckedSetter));
+      fields.add(new Field(field, name, accessorName, getterFlags, setterFlags,
+          needsCheckedSetter));
     });
 
     return fields;
@@ -957,7 +927,6 @@
     js.Name tearOffName =
         needsTearOff ? namer.staticClosureName(element) : null;
 
-
     js.Name callName = null;
     if (needsTearOff) {
       Selector callSelector =
@@ -983,22 +952,19 @@
 
     // TODO(floitsch): we shouldn't update the registry in the middle of
     // building a static method.
-    return new StaticDartMethod(element,
-                                name, _registry.registerHolder(holder), code,
-                                _generateParameterStubs(element, needsTearOff),
-                                callName,
-                                needsTearOff: needsTearOff,
-                                tearOffName: tearOffName,
-                                canBeApplied: canBeApplied,
-                                canBeReflected: canBeReflected,
-                                requiredParameterCount: requiredParameterCount,
-                                optionalParameterDefaultValues:
-                                  optionalParameterDefaultValues,
-                                functionType: functionType);
+    return new StaticDartMethod(element, name, _registry.registerHolder(holder),
+        code, _generateParameterStubs(element, needsTearOff), callName,
+        needsTearOff: needsTearOff,
+        tearOffName: tearOffName,
+        canBeApplied: canBeApplied,
+        canBeReflected: canBeReflected,
+        requiredParameterCount: requiredParameterCount,
+        optionalParameterDefaultValues: optionalParameterDefaultValues,
+        functionType: functionType);
   }
 
-  void _registerConstants(OutputUnit outputUnit,
-                          Iterable<ConstantValue> constantValues) {
+  void _registerConstants(
+      OutputUnit outputUnit, Iterable<ConstantValue> constantValues) {
     // `constantValues` is null if an outputUnit doesn't contain any constants.
     if (constantValues == null) return;
     for (ConstantValue constantValue in constantValues) {
@@ -1014,7 +980,7 @@
   }
 
   Holder _registerStaticStateHolder() {
-    return _registry.registerHolder(
-        namer.staticStateHolder, isStaticStateHolder: true);
+    return _registry.registerHolder(namer.staticStateHolder,
+        isStaticStateHolder: true);
   }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart b/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
index 5614bf9..192f158 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/registry.dart
@@ -113,12 +113,11 @@
     // Ignore for now.
   }
 
-  Holder registerHolder(
-      String name,
+  Holder registerHolder(String name,
       {bool isStaticStateHolder: false, bool isConstantsHolder: false}) {
     assert(_holdersMap[name] == null ||
         (_holdersMap[name].isStaticStateHolder == isStaticStateHolder &&
-         _holdersMap[name].isConstantsHolder == isConstantsHolder));
+            _holdersMap[name].isConstantsHolder == isConstantsHolder));
 
     return _holdersMap.putIfAbsent(name, () {
       return new Holder(name, _holdersMap.length,
diff --git a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
index 9c48f4d..f2997aa 100644
--- a/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart
@@ -5,8 +5,8 @@
 part of dart2js.js_emitter;
 
 // Function signatures used in the generation of runtime type information.
-typedef void FunctionTypeSignatureEmitter(Element method,
-                                          FunctionType methodType);
+typedef void FunctionTypeSignatureEmitter(
+    Element method, FunctionType methodType);
 
 typedef void SubstitutionEmitter(Element element, {bool emitNull});
 
@@ -37,8 +37,7 @@
   TypeTestRegistry get typeTestRegistry => emitterTask.typeTestRegistry;
   CoreClasses get coreClasses => compiler.coreClasses;
 
-  Set<ClassElement> get checkedClasses =>
-      typeTestRegistry.checkedClasses;
+  Set<ClassElement> get checkedClasses => typeTestRegistry.checkedClasses;
 
   Iterable<ClassElement> get classesUsingTypeVariableTests =>
       typeTestRegistry.classesUsingTypeVariableTests;
@@ -56,9 +55,8 @@
   /// type (if class has one) in the metadata object and stores its index in
   /// the result. This is only possible for function types that do not contain
   /// type variables.
-  TypeTestProperties generateIsTests(
-      ClassElement classElement,
-      { bool storeFunctionTypeInMetadata: true}) {
+  TypeTestProperties generateIsTests(ClassElement classElement,
+      {bool storeFunctionTypeInMetadata: true}) {
     assert(invariant(classElement, classElement.isDeclaration));
 
     TypeTestProperties result = new TypeTestProperties();
@@ -69,14 +67,13 @@
     /// native classes.
     /// TODO(herhut): Generate tests for native classes dynamically, as well.
     void generateIsTest(Element other) {
-      if (backend.isNative(classElement) ||
-          !classElement.isSubclassOf(other)) {
+      if (backend.isNative(classElement) || !classElement.isSubclassOf(other)) {
         result.properties[namer.operatorIs(other)] = js('1');
       }
     }
 
-    void generateFunctionTypeSignature(FunctionElement method,
-                                       FunctionType type) {
+    void generateFunctionTypeSignature(
+        FunctionElement method, FunctionType type) {
       assert(method.isImplementation);
       jsAst.Expression thisAccess = new jsAst.This();
       ClosureClassMap closureData =
@@ -97,8 +94,7 @@
         RuntimeTypesEncoder rtiEncoder = backend.rtiEncoder;
         jsAst.Expression encoding =
             rtiEncoder.getSignatureEncoding(type, thisAccess);
-        jsAst.Name operatorSignature =
-            namer.asName(namer.operatorSignature);
+        jsAst.Name operatorSignature = namer.asName(namer.operatorSignature);
         result.properties[operatorSignature] = encoding;
       }
     }
@@ -134,9 +130,7 @@
     }
 
     _generateIsTestsOn(classElement, generateIsTest,
-        generateFunctionTypeSignature,
-        generateSubstitution,
-        generateTypeCheck);
+        generateFunctionTypeSignature, generateSubstitution, generateTypeCheck);
 
     return result;
   }
@@ -211,7 +205,8 @@
         }
       }
 
-      void emitNothing(_, {emitNull}) {};
+      void emitNothing(_, {emitNull}) {}
+      ;
 
       generateSubstitution = emitNothing;
     }
@@ -230,10 +225,8 @@
         // A superclass might already implement the Function interface. In such
         // a case, we can avoid emiting the is test here.
         if (!cls.superclass.implementsFunction(coreClasses)) {
-          _generateInterfacesIsTests(coreClasses.functionClass,
-                                    generateIsTest,
-                                    generateSubstitution,
-                                    generated);
+          _generateInterfacesIsTests(coreClasses.functionClass, generateIsTest,
+              generateSubstitution, generated);
         }
         FunctionType callType = callFunction.computeType(compiler.resolution);
         generateFunctionTypeSignature(callFunction, callType);
@@ -242,40 +235,42 @@
 
     for (DartType interfaceType in cls.interfaces) {
       _generateInterfacesIsTests(interfaceType.element, generateIsTest,
-                                 generateSubstitution, generated);
+          generateSubstitution, generated);
     }
   }
 
   /**
    * Generate "is tests" where [cls] is being implemented.
    */
-  void _generateInterfacesIsTests(ClassElement cls,
-                                  void generateIsTest(ClassElement element),
-                                  SubstitutionEmitter generateSubstitution,
-                                  Set<Element> alreadyGenerated) {
+  void _generateInterfacesIsTests(
+      ClassElement cls,
+      void generateIsTest(ClassElement element),
+      SubstitutionEmitter generateSubstitution,
+      Set<Element> alreadyGenerated) {
     void tryEmitTest(ClassElement check) {
       if (!alreadyGenerated.contains(check) && checkedClasses.contains(check)) {
         alreadyGenerated.add(check);
         generateIsTest(check);
         generateSubstitution(check);
       }
-    };
+    }
+    ;
 
     tryEmitTest(cls);
 
     for (DartType interfaceType in cls.interfaces) {
       Element element = interfaceType.element;
       tryEmitTest(element);
-      _generateInterfacesIsTests(element, generateIsTest, generateSubstitution,
-                                 alreadyGenerated);
+      _generateInterfacesIsTests(
+          element, generateIsTest, generateSubstitution, alreadyGenerated);
     }
 
     // We need to also emit "is checks" for the superclass and its supertypes.
     ClassElement superclass = cls.superclass;
     if (superclass != null) {
       tryEmitTest(superclass);
-      _generateInterfacesIsTests(superclass, generateIsTest,
-                                 generateSubstitution, alreadyGenerated);
+      _generateInterfacesIsTests(
+          superclass, generateIsTest, generateSubstitution, alreadyGenerated);
     }
   }
 
@@ -283,20 +278,20 @@
     List<StubMethod> stubs = <StubMethod>[];
     ClassElement superclass = classElement;
     while (superclass != null) {
-        for (TypeVariableType parameter in superclass.typeVariables) {
-          if (backend.emitter.readTypeVariables.contains(parameter.element)) {
-            stubs.add(
-                _generateTypeVariableReader(classElement, parameter.element));
-          }
+      for (TypeVariableType parameter in superclass.typeVariables) {
+        if (backend.emitter.readTypeVariables.contains(parameter.element)) {
+          stubs.add(
+              _generateTypeVariableReader(classElement, parameter.element));
         }
-        superclass = superclass.superclass;
       }
+      superclass = superclass.superclass;
+    }
 
     return stubs;
   }
 
-  StubMethod _generateTypeVariableReader(ClassElement cls,
-                                         TypeVariableElement element) {
+  StubMethod _generateTypeVariableReader(
+      ClassElement cls, TypeVariableElement element) {
     jsAst.Name name = namer.nameForReadTypeVariable(element);
     int index = element.index;
     jsAst.Expression computeTypeVariable;
@@ -304,21 +299,22 @@
     Substitution substitution =
         backend.rti.getSubstitution(cls, element.typeDeclaration);
     if (substitution != null) {
-      computeTypeVariable =
-          js(r'#.apply(null, this.$builtinTypeInfo)',
-                 backend.rtiEncoder.getSubstitutionCodeForVariable(
-                     substitution, index));
+      computeTypeVariable = js(
+          r'#.apply(null, this.$builtinTypeInfo)',
+          backend.rtiEncoder
+              .getSubstitutionCodeForVariable(substitution, index));
     } else {
       // TODO(ahe): These can be generated dynamically.
-      computeTypeVariable =
-          js(r'this.$builtinTypeInfo && this.$builtinTypeInfo[#]',
-              js.number(index));
+      computeTypeVariable = js(
+          r'this.$builtinTypeInfo && this.$builtinTypeInfo[#]',
+          js.number(index));
     }
     jsAst.Expression convertRtiToRuntimeType = backend.emitter
-         .staticFunctionAccess(backend.helpers.convertRtiToRuntimeType);
+        .staticFunctionAccess(backend.helpers.convertRtiToRuntimeType);
 
-    return new StubMethod(name,
-                          js('function () { return #(#) }',
-                             [convertRtiToRuntimeType, computeTypeVariable]));
+    return new StubMethod(
+        name,
+        js('function () { return #(#) }',
+            [convertRtiToRuntimeType, computeTypeVariable]));
   }
 }
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
index 40fd877..072e8cb 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
@@ -4,31 +4,19 @@
 
 library dart2js.js_emitter.startup_emitter;
 
-import 'package:js_runtime/shared/embedded_names.dart' show
-    JsBuiltin,
-    METADATA,
-    STATIC_FUNCTION_NAME_TO_CLOSURE,
-    TYPES;
+import 'package:js_runtime/shared/embedded_names.dart'
+    show JsBuiltin, METADATA, STATIC_FUNCTION_NAME_TO_CLOSURE, TYPES;
 
 import '../../common.dart';
-import '../../compiler.dart' show
-    Compiler;
-import '../../constants/values.dart' show
-    ConstantValue;
-import '../../elements/elements.dart' show
-    ClassElement,
-    Element,
-    FieldElement,
-    FunctionElement;
+import '../../compiler.dart' show Compiler;
+import '../../constants/values.dart' show ConstantValue;
+import '../../elements/elements.dart'
+    show ClassElement, Element, FieldElement, FunctionElement;
 import '../../js/js.dart' as js;
-import '../../js_backend/js_backend.dart' show
-    JavaScriptBackend,
-    Namer;
+import '../../js_backend/js_backend.dart' show JavaScriptBackend, Namer;
 
-import '../js_emitter.dart' show
-    NativeEmitter;
-import '../js_emitter.dart' as emitterTask show
-    Emitter;
+import '../js_emitter.dart' show NativeEmitter;
+import '../js_emitter.dart' as emitterTask show Emitter;
 import '../program_builder/program_builder.dart' show ProgramBuilder;
 import '../model.dart';
 
@@ -97,8 +85,8 @@
 
   @override
   js.Expression isolateLazyInitializerAccess(FieldElement element) {
-    return js.js('#.#', [namer.globalObjectFor(element),
-    namer.lazyInitializerName(element)]);
+    return js.js('#.#',
+        [namer.globalObjectFor(element), namer.lazyInitializerName(element)]);
   }
 
   @override
@@ -122,8 +110,8 @@
   }
 
   @override
-  js.PropertyAccess prototypeAccess(ClassElement element,
-                                    bool hasBeenInstantiated) {
+  js.PropertyAccess prototypeAccess(
+      ClassElement element, bool hasBeenInstantiated) {
     js.Expression constructor =
         hasBeenInstantiated ? constructorAccess(element) : typeAccess(element);
     return js.js('#.prototype', constructor);
@@ -165,8 +153,8 @@
         return _backend.rtiEncoder.templateForCreateFunctionType;
 
       case JsBuiltin.isSubtype:
-      // TODO(floitsch): move this closer to where is-check properties are
-      // built.
+        // TODO(floitsch): move this closer to where is-check properties are
+        // built.
         String isPrefix = namer.operatorIsPrefix;
         return js.js.expressionTemplateFor("('$isPrefix' + #) in #.prototype");
 
@@ -179,8 +167,7 @@
         return js.js.expressionTemplateFor("$metadataAccess[#]");
 
       case JsBuiltin.getType:
-        String typesAccess =
-            _emitter.generateEmbeddedGlobalAccessString(TYPES);
+        String typesAccess = _emitter.generateEmbeddedGlobalAccessString(TYPES);
         return js.js.expressionTemplateFor("$typesAccess[#]");
 
       case JsBuiltin.createDartClosureFromNameOfStaticFunction:
@@ -189,13 +176,12 @@
         return js.js.expressionTemplateFor("$functionAccess(#)");
 
       default:
-        reporter.internalError(NO_LOCATION_SPANNABLE,
-            "Unhandled Builtin: $builtin");
+        reporter.internalError(
+            NO_LOCATION_SPANNABLE, "Unhandled Builtin: $builtin");
         return null;
     }
   }
 
   @override
-  void invalidateCaches() {
-  }
+  void invalidateCaches() {}
 }
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index 14dea34..48ccd6d 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -427,54 +427,53 @@
     return js.js('#.#', [cls.holder.name, cls.name]);
   }
 
-  js.Statement emitMainFragment(
-      Program program,
+  js.Statement emitMainFragment(Program program,
       Map<DeferredFragment, _DeferredFragmentHash> deferredLoadHashes) {
     MainFragment fragment = program.fragments.first;
 
-    Iterable<Holder> nonStaticStateHolders = program.holders
-        .where((Holder holder) => !holder.isStaticStateHolder);
+    Iterable<Holder> nonStaticStateHolders =
+        program.holders.where((Holder holder) => !holder.isStaticStateHolder);
 
-    return js.js.statement(mainBoilerplate,
-        {'typeNameProperty': js.string(ModelEmitter.typeNameProperty),
-         'cyclicThrow': backend.emitter.staticFunctionAccess(
-                 backend.helpers.cyclicThrowHelper),
-         'operatorIsPrefix': js.string(namer.operatorIsPrefix),
-         'tearOffCode': new js.Block(buildTearOffCode(backend)),
-         'embeddedTypes': generateEmbeddedGlobalAccess(TYPES),
-         'embeddedInterceptorTags':
-             generateEmbeddedGlobalAccess(INTERCEPTORS_BY_TAG),
-         'embeddedLeafTags': generateEmbeddedGlobalAccess(LEAF_TAGS),
-         'embeddedGlobalsObject': js.js("init"),
-         'holdersList': new js.ArrayInitializer(nonStaticStateHolders
-             .map((holder) => js.js("#", holder.name))
-             .toList(growable: false)),
-         'staticStateDeclaration': new js.VariableDeclaration(
-             namer.staticStateHolder, allowRename: false),
-         'staticState': js.js('#', namer.staticStateHolder),
-         'constantHolderReference': buildConstantHolderReference(program),
-         'holders': emitHolders(program.holders, fragment),
-         'callName': js.string(namer.callNameField),
-         'argumentCount': js.string(namer.requiredParameterField),
-         'defaultArgumentValues': js.string(namer.defaultValuesField),
-         'prototypes': emitPrototypes(fragment),
-         'inheritance': emitInheritance(fragment),
-         'aliases': emitInstanceMethodAliases(fragment),
-         'tearOffs': emitInstallTearOffs(fragment),
-         'constants': emitConstants(fragment),
-         'staticNonFinalFields': emitStaticNonFinalFields(fragment),
-         'lazyStatics': emitLazilyInitializedStatics(fragment),
-         'embeddedGlobals': emitEmbeddedGlobals(program, deferredLoadHashes),
-         'nativeSupport': program.needsNativeSupport
-              ? emitNativeSupport(fragment)
-              : new js.EmptyStatement(),
-         'invokeMain': fragment.invokeMain,
-         });
+    return js.js.statement(mainBoilerplate, {
+      'typeNameProperty': js.string(ModelEmitter.typeNameProperty),
+      'cyclicThrow': backend.emitter
+          .staticFunctionAccess(backend.helpers.cyclicThrowHelper),
+      'operatorIsPrefix': js.string(namer.operatorIsPrefix),
+      'tearOffCode': new js.Block(buildTearOffCode(backend)),
+      'embeddedTypes': generateEmbeddedGlobalAccess(TYPES),
+      'embeddedInterceptorTags':
+          generateEmbeddedGlobalAccess(INTERCEPTORS_BY_TAG),
+      'embeddedLeafTags': generateEmbeddedGlobalAccess(LEAF_TAGS),
+      'embeddedGlobalsObject': js.js("init"),
+      'holdersList': new js.ArrayInitializer(nonStaticStateHolders
+          .map((holder) => js.js("#", holder.name))
+          .toList(growable: false)),
+      'staticStateDeclaration': new js.VariableDeclaration(
+          namer.staticStateHolder,
+          allowRename: false),
+      'staticState': js.js('#', namer.staticStateHolder),
+      'constantHolderReference': buildConstantHolderReference(program),
+      'holders': emitHolders(program.holders, fragment),
+      'callName': js.string(namer.callNameField),
+      'argumentCount': js.string(namer.requiredParameterField),
+      'defaultArgumentValues': js.string(namer.defaultValuesField),
+      'prototypes': emitPrototypes(fragment),
+      'inheritance': emitInheritance(fragment),
+      'aliases': emitInstanceMethodAliases(fragment),
+      'tearOffs': emitInstallTearOffs(fragment),
+      'constants': emitConstants(fragment),
+      'staticNonFinalFields': emitStaticNonFinalFields(fragment),
+      'lazyStatics': emitLazilyInitializedStatics(fragment),
+      'embeddedGlobals': emitEmbeddedGlobals(program, deferredLoadHashes),
+      'nativeSupport': program.needsNativeSupport
+          ? emitNativeSupport(fragment)
+          : new js.EmptyStatement(),
+      'invokeMain': fragment.invokeMain,
+    });
   }
 
   js.Expression emitDeferredFragment(DeferredFragment fragment,
-                                     js.Expression deferredTypes,
-                                     List<Holder> holders) {
+      js.Expression deferredTypes, List<Holder> holders) {
     List<Holder> nonStaticStateHolders = holders
         .where((Holder holder) => !holder.isStaticStateHolder)
         .toList(growable: false);
@@ -484,29 +483,28 @@
       Holder holder = nonStaticStateHolders[i];
       updateHolderAssignments.add(js.js.statement(
           '#holder = updateHolder(holdersList[#index], #holder)',
-          {'index': js.number(i),
-           'holder': new js.VariableUse(holder.name)}));
+          {'index': js.number(i), 'holder': new js.VariableUse(holder.name)}));
     }
 
     // TODO(floitsch): don't just reference 'init'.
-    return js.js(deferredBoilerplate,
-    {'embeddedGlobalsObject': new js.Parameter('init'),
-     'staticState': new js.Parameter(namer.staticStateHolder),
-     'holders': emitHolders(holders, fragment),
-     'deferredHoldersList': new js.ArrayInitializer(nonStaticStateHolders
-         .map((holder) => js.js("#", holder.name))
-         .toList(growable: false)),
-     'updateHolders': new js.Block(updateHolderAssignments),
-     'prototypes': emitPrototypes(fragment),
-     'inheritance': emitInheritance(fragment),
-     'aliases': emitInstanceMethodAliases(fragment),
-     'tearOffs': emitInstallTearOffs(fragment),
-     'constants': emitConstants(fragment),
-     'staticNonFinalFields': emitStaticNonFinalFields(fragment),
-     'lazyStatics': emitLazilyInitializedStatics(fragment),
-     'types': deferredTypes,
-     // TODO(floitsch): only call emitNativeSupport if we need native.
-     'nativeSupport': emitNativeSupport(fragment),
+    return js.js(deferredBoilerplate, {
+      'embeddedGlobalsObject': new js.Parameter('init'),
+      'staticState': new js.Parameter(namer.staticStateHolder),
+      'holders': emitHolders(holders, fragment),
+      'deferredHoldersList': new js.ArrayInitializer(nonStaticStateHolders
+          .map((holder) => js.js("#", holder.name))
+          .toList(growable: false)),
+      'updateHolders': new js.Block(updateHolderAssignments),
+      'prototypes': emitPrototypes(fragment),
+      'inheritance': emitInheritance(fragment),
+      'aliases': emitInstanceMethodAliases(fragment),
+      'tearOffs': emitInstallTearOffs(fragment),
+      'constants': emitConstants(fragment),
+      'staticNonFinalFields': emitStaticNonFinalFields(fragment),
+      'lazyStatics': emitLazilyInitializedStatics(fragment),
+      'types': deferredTypes,
+      // TODO(floitsch): only call emitNativeSupport if we need native.
+      'nativeSupport': emitNativeSupport(fragment),
     });
   }
 
@@ -557,22 +555,22 @@
     //    }
 
     List<js.Statement> statements = [
-      new js.ExpressionStatement(
-          new js.VariableDeclarationList(holders
-              .map(emitHolderInitialization)
-              .toList())),
-      js.js.statement('var holders = #', new js.ArrayInitializer(
-          holders
+      new js.ExpressionStatement(new js.VariableDeclarationList(
+          holders.map(emitHolderInitialization).toList())),
+      js.js.statement(
+          'var holders = #',
+          new js.ArrayInitializer(holders
               .map((holder) => new js.VariableUse(holder.name))
-              .toList(growable: false)))];
+              .toList(growable: false)))
+    ];
     return new js.Block(statements);
   }
 
   /// Returns a reference to the constant holder, or the JS-literal `null`.
   js.Expression buildConstantHolderReference(Program program) {
-    Holder constantHolder = program.holders
-        .firstWhere((Holder holder) => holder.isConstantsHolder,
-                    orElse: () => null);
+    Holder constantHolder = program.holders.firstWhere(
+        (Holder holder) => holder.isConstantsHolder,
+        orElse: () => null);
     if (constantHolder == null) return new js.LiteralNull();
     return new js.VariableUse(constantHolder.name);
   }
@@ -626,8 +624,7 @@
     List<js.Statement> assignments = fragment.libraries
         .expand((Library library) => library.classes)
         .map((Class cls) => js.js.statement(
-            '#.prototype = #;',
-            [classReference(cls), emitPrototype(cls)]))
+            '#.prototype = #;', [classReference(cls), emitPrototype(cls)]))
         .toList(growable: false);
 
     return new js.Block(assignments);
@@ -648,17 +645,23 @@
     Iterable<Method> typeVariableReaderStubs = cls.typeVariableReaderStubs;
     Iterable<Method> noSuchMethodStubs = cls.noSuchMethodStubs;
     Iterable<Method> gettersSetters = generateGettersSetters(cls);
-    Iterable<Method> allMethods =
-        [methods, checkedSetters, isChecks, callStubs, typeVariableReaderStubs,
-         noSuchMethodStubs, gettersSetters].expand((x) => x);
+    Iterable<Method> allMethods = [
+      methods,
+      checkedSetters,
+      isChecks,
+      callStubs,
+      typeVariableReaderStubs,
+      noSuchMethodStubs,
+      gettersSetters
+    ].expand((x) => x);
 
     List<js.Property> properties = <js.Property>[];
 
     if (cls.superclass == null) {
-      properties.add(new js.Property(js.string("constructor"),
-      classReference(cls)));
-      properties.add(new js.Property(namer.operatorIs(cls.element),
-      js.number(1)));
+      properties
+          .add(new js.Property(js.string("constructor"), classReference(cls)));
+      properties
+          .add(new js.Property(namer.operatorIs(cls.element), js.number(1)));
     }
 
     allMethods.forEach((Method method) {
@@ -747,7 +750,7 @@
         properties[js.string(namer.requiredParameterField)] =
             js.number(method.requiredParameterCount);
         properties[js.string(namer.defaultValuesField)] =
-             _encodeOptionalParameterDefaultValues(method);
+            _encodeOptionalParameterDefaultValues(method);
       }
     }
 
@@ -774,8 +777,8 @@
           ? new js.LiteralNull()
           : classReference(superclass);
 
-      inheritCalls.add(js.js('inherit(#, #)',
-          [classReference(cls), superclassReference]));
+      inheritCalls.add(
+          js.js('inherit(#, #)', [classReference(cls), superclassReference]));
 
       emittedClasses.add(cls);
     }
@@ -809,11 +812,12 @@
       for (Class cls in library.classes) {
         for (InstanceMethod method in cls.methods) {
           if (method.aliasName != null) {
-            assignments.add(js.js.statement(
-                '#.prototype.# = #.prototype.#',
-                [classReference(cls), js.quoteName(method.aliasName),
-                 classReference(cls), js.quoteName(method.name)]));
-
+            assignments.add(js.js.statement('#.prototype.# = #.prototype.#', [
+              classReference(cls),
+              js.quoteName(method.aliasName),
+              classReference(cls),
+              js.quoteName(method.name)
+            ]));
           }
         }
       }
@@ -842,11 +846,11 @@
 
       for (String name in names) {
         ConstantValue value = defaultValues[name];
-        properties.add(new js.Property(js.string(name),
-        generateConstantReference(value)));
+        properties.add(
+            new js.Property(js.string(name), generateConstantReference(value)));
       }
-      return js.js('function() { return #; }',
-          new js.ObjectInitializer(properties));
+      return js.js(
+          'function() { return #; }', new js.ObjectInitializer(properties));
     }
   }
 
@@ -899,7 +903,8 @@
           _encodeOptionalParameterDefaultValues(method);
     }
 
-    return js.js.statement('''
+    return js.js.statement(
+        '''
         installTearOff(#container, #getterName, #isStatic, #isIntercepted,
                        #requiredParameterCount, #optionalParameterDefaultValues,
                        #callNames, #funsOrNames, #funType)''',
@@ -951,15 +956,15 @@
       // find the constants that don't have any dependency on other constants
       // and create an object-literal with them (and assign it to the
       // constant-holder variable).
-      assignments.add(js.js.statement('#.# = #',
-          [constant.holder.name,
-           constant.name,
-           constantEmitter.generate(constant.value)]));
+      assignments.add(js.js.statement('#.# = #', [
+        constant.holder.name,
+        constant.name,
+        constantEmitter.generate(constant.value)
+      ]));
     }
     return new js.Block(assignments);
   }
 
-
   /// Emits the static non-final fields section.
   ///
   /// This section initializes all static non-final fields that don't require
@@ -973,8 +978,8 @@
     //    `$.x = $.y = $.z = null;`.
     Iterable<js.Statement> statements = fields.map((StaticField field) {
       assert(field.holder.isStaticStateHolder);
-      return js.js.statement("#.# = #;",
-          [field.holder.name, field.name, field.code]);
+      return js.js
+          .statement("#.# = #;", [field.holder.name, field.name, field.code]);
     });
     return new js.Block(statements.toList());
   }
@@ -987,11 +992,12 @@
     List<StaticField> fields = fragment.staticLazilyInitializedFields;
     Iterable<js.Statement> statements = fields.map((StaticField field) {
       assert(field.holder.isStaticStateHolder);
-      return js.js.statement("lazy(#, #, #, #);",
-          [field.holder.name,
-           js.quoteName(field.name),
-           js.quoteName(namer.deriveLazyInitializerName(field.name)),
-           field.code]);
+      return js.js.statement("lazy(#, #, #, #);", [
+        field.holder.name,
+        js.quoteName(field.name),
+        js.quoteName(namer.deriveLazyInitializerName(field.name)),
+        field.code
+      ]);
     });
 
     return new js.Block(statements.toList());
@@ -1016,10 +1022,9 @@
           "${fragment.outputFileName}.${ModelEmitter.deferredExtension}"));
     }
     js.ArrayInitializer fragmentHashes(List<Fragment> fragments) {
-      return new js.ArrayInitializer(
-          fragments
-              .map((fragment) => deferredLoadHashes[fragment])
-              .toList(growable: false));
+      return new js.ArrayInitializer(fragments
+          .map((fragment) => deferredLoadHashes[fragment])
+          .toList(growable: false));
     }
 
     List<js.Property> uris = new List<js.Property>(loadMap.length);
@@ -1033,38 +1038,41 @@
       count++;
     });
 
-    globals.add(new js.Property(js.string(DEFERRED_LIBRARY_URIS),
-        new js.ObjectInitializer(uris)));
-    globals.add(new js.Property(js.string(DEFERRED_LIBRARY_HASHES),
-        new js.ObjectInitializer(hashes)));
-    globals.add(new js.Property(js.string(DEFERRED_INITIALIZED),
-        js.js("Object.create(null)")));
+    globals.add(new js.Property(
+        js.string(DEFERRED_LIBRARY_URIS), new js.ObjectInitializer(uris)));
+    globals.add(new js.Property(
+        js.string(DEFERRED_LIBRARY_HASHES), new js.ObjectInitializer(hashes)));
+    globals.add(new js.Property(
+        js.string(DEFERRED_INITIALIZED), js.js("Object.create(null)")));
 
     String deferredGlobal = ModelEmitter.deferredInitializersGlobal;
     js.Expression isHunkLoadedFunction =
         js.js("function(hash) { return !!$deferredGlobal[hash]; }");
-    globals.add(new js.Property(js.string(IS_HUNK_LOADED),
-        isHunkLoadedFunction));
+    globals
+        .add(new js.Property(js.string(IS_HUNK_LOADED), isHunkLoadedFunction));
 
-    js.Expression isHunkInitializedFunction =
-        js.js("function(hash) { return !!#deferredInitialized[hash]; }",
-            {'deferredInitialized':
-                generateEmbeddedGlobalAccess(DEFERRED_INITIALIZED)});
-    globals.add(new js.Property(js.string(IS_HUNK_INITIALIZED),
-        isHunkInitializedFunction));
+    js.Expression isHunkInitializedFunction = js.js(
+        "function(hash) { return !!#deferredInitialized[hash]; }", {
+      'deferredInitialized': generateEmbeddedGlobalAccess(DEFERRED_INITIALIZED)
+    });
+    globals.add(new js.Property(
+        js.string(IS_HUNK_INITIALIZED), isHunkInitializedFunction));
 
     /// See [emitEmbeddedGlobalsForDeferredLoading] for the format of the
     /// deferred hunk.
-    js.Expression initializeLoadedHunkFunction =
-    js.js("""
+    js.Expression initializeLoadedHunkFunction = js.js(
+        """
             function(hash) {
               initializeDeferredHunk($deferredGlobal[hash]);
               #deferredInitialized[hash] = true;
-            }""", {'deferredInitialized':
-                    generateEmbeddedGlobalAccess(DEFERRED_INITIALIZED)});
+            }""",
+        {
+          'deferredInitialized':
+              generateEmbeddedGlobalAccess(DEFERRED_INITIALIZED)
+        });
 
-    globals.add(new js.Property(js.string(INITIALIZE_LOADED_HUNK),
-                                initializeLoadedHunkFunction));
+    globals.add(new js.Property(
+        js.string(INITIALIZE_LOADED_HUNK), initializeLoadedHunkFunction));
 
     return globals;
   }
@@ -1079,18 +1087,23 @@
     CoreClasses coreClasses = compiler.coreClasses;
     // We want to keep the original names for the most common core classes when
     // calling toString on them.
-    List<ClassElement> nativeClassesNeedingUnmangledName =
-        [coreClasses.intClass, coreClasses.doubleClass, coreClasses.numClass,
-          coreClasses.stringClass, coreClasses.boolClass, coreClasses.nullClass,
-          coreClasses.listClass];
+    List<ClassElement> nativeClassesNeedingUnmangledName = [
+      coreClasses.intClass,
+      coreClasses.doubleClass,
+      coreClasses.numClass,
+      coreClasses.stringClass,
+      coreClasses.boolClass,
+      coreClasses.nullClass,
+      coreClasses.listClass
+    ];
     // TODO(floitsch): this should probably be on a per-fragment basis.
     nativeClassesNeedingUnmangledName.forEach((element) {
-      names.add(new js.Property(js.quoteName(namer.className(element)),
-                                js.string(element.name)));
+      names.add(new js.Property(
+          js.quoteName(namer.className(element)), js.string(element.name)));
     });
 
-    return new js.Property(js.string(MANGLED_GLOBAL_NAMES),
-                           new js.ObjectInitializer(names));
+    return new js.Property(
+        js.string(MANGLED_GLOBAL_NAMES), new js.ObjectInitializer(names));
   }
 
   /// Emits the [GET_TYPE_FROM_NAME] embedded global.
@@ -1122,8 +1135,7 @@
   }
 
   /// Emits all embedded globals.
-  js.Statement emitEmbeddedGlobals(
-      Program program,
+  js.Statement emitEmbeddedGlobals(Program program,
       Map<DeferredFragment, _DeferredFragmentHash> deferredLoadHashes) {
     List<js.Property> globals = <js.Property>[];
 
@@ -1133,8 +1145,8 @@
     }
 
     if (program.typeToInterceptorMap != null) {
-      globals.add(new js.Property(js.string(TYPE_TO_INTERCEPTOR_MAP),
-      program.typeToInterceptorMap));
+      globals.add(new js.Property(
+          js.string(TYPE_TO_INTERCEPTOR_MAP), program.typeToInterceptorMap));
     }
 
     if (program.hasIsolateSupport) {
@@ -1143,9 +1155,8 @@
       // the current static state. Since we don't run multiple isolates in the
       // same JavaScript context (except for testing) this shouldn't have any
       // impact on real-world programs, though.
-      globals.add(
-          new js.Property(js.string(CREATE_NEW_ISOLATE),
-                          js.js('function () { return $staticStateName; }')));
+      globals.add(new js.Property(js.string(CREATE_NEW_ISOLATE),
+          js.js('function () { return $staticStateName; }')));
 
       js.Expression nameToClosureFunction = js.js('''
         // First fetch the static function. From there we can execute its
@@ -1155,12 +1166,11 @@
            var getterFunction = staticFunction.$tearOffPropertyName;
            return getterFunction();
          }''');
-      globals.add(new js.Property(js.string(STATIC_FUNCTION_NAME_TO_CLOSURE),
-                                  nameToClosureFunction));
+      globals.add(new js.Property(
+          js.string(STATIC_FUNCTION_NAME_TO_CLOSURE), nameToClosureFunction));
 
-      globals.add(
-          new js.Property(js.string(CLASS_ID_EXTRACTOR),
-                          js.js('function(o) { return o.constructor.name; }')));
+      globals.add(new js.Property(js.string(CLASS_ID_EXTRACTOR),
+          js.js('function(o) { return o.constructor.name; }')));
 
       js.Expression extractFieldsFunction = js.js('''
       function(o) {
@@ -1178,8 +1188,8 @@
         }
         return result;
       }''');
-      globals.add(new js.Property(js.string(CLASS_FIELDS_EXTRACTOR),
-                                  extractFieldsFunction));
+      globals.add(new js.Property(
+          js.string(CLASS_FIELDS_EXTRACTOR), extractFieldsFunction));
 
       js.Expression createInstanceFromClassIdFunction = js.js('''
         function(name) {
@@ -1188,7 +1198,7 @@
         }
       ''');
       globals.add(new js.Property(js.string(INSTANCE_FROM_CLASS_ID),
-                                  createInstanceFromClassIdFunction));
+          createInstanceFromClassIdFunction));
 
       js.Expression initializeEmptyInstanceFunction = js.js('''
       function(name, o, fields) {
@@ -1205,7 +1215,7 @@
         return o;
       }''');
       globals.add(new js.Property(js.string(INITIALIZE_EMPTY_INSTANCE),
-                                  initializeEmptyInstanceFunction));
+          initializeEmptyInstanceFunction));
     }
 
     globals.add(emitMangledGlobalNames());
@@ -1215,11 +1225,10 @@
     // therefore unused in this emitter.
     List<js.Property> mangledNamesProperties = <js.Property>[];
     program.symbolsMap.forEach((js.Name mangledName, String unmangledName) {
-      mangledNamesProperties.add(
-          new js.Property(mangledName, js.string(unmangledName)));
+      mangledNamesProperties
+          .add(new js.Property(mangledName, js.string(unmangledName)));
     });
-    globals.add(new js.Property(
-        js.string(MANGLED_NAMES),
+    globals.add(new js.Property(js.string(MANGLED_NAMES),
         new js.ObjectInitializer(mangledNamesProperties)));
 
     globals.add(emitGetTypeFromName());
@@ -1227,10 +1236,9 @@
     globals.addAll(emitMetadata(program));
 
     if (program.needsNativeSupport) {
-      globals.add(new js.Property(js.string(INTERCEPTORS_BY_TAG),
-          new js.LiteralNull()));
-      globals.add(new js.Property(js.string(LEAF_TAGS),
-          new js.LiteralNull()));
+      globals.add(new js.Property(
+          js.string(INTERCEPTORS_BY_TAG), new js.LiteralNull()));
+      globals.add(new js.Property(js.string(LEAF_TAGS), new js.LiteralNull()));
     }
 
     js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals);
@@ -1253,16 +1261,18 @@
     if (fragment.isMainFragment &&
         NativeGenerator.needsIsolateAffinityTagInitialization(backend)) {
       statements.add(NativeGenerator.generateIsolateAffinityTagInitialization(
-              backend,
-              generateEmbeddedGlobalAccess,
-              js.js("""
+          backend,
+          generateEmbeddedGlobalAccess,
+          js.js(
+              """
         // On V8, the 'intern' function converts a string to a symbol, which
         // makes property access much faster.
         function (s) {
           var o = {};
           o[s] = 1;
           return Object.keys(convertToFastObject(o))[0];
-        }""", [])));
+        }""",
+              [])));
     }
 
     Map<String, js.Expression> interceptorsByTag = <String, js.Expression>{};
@@ -1286,10 +1296,11 @@
             List<Class> subclasses = cls.nativeExtensions;
             js.Expression value = js.string(cls.nativeNonLeafTags[0]);
             for (Class subclass in subclasses) {
-              value = js.js('#.# = #',
-                  [classReference(subclass),
-                   NATIVE_SUPERCLASS_TAG_NAME,
-                   js.string(cls.nativeNonLeafTags[0])]);
+              value = js.js('#.# = #', [
+                classReference(subclass),
+                NATIVE_SUPERCLASS_TAG_NAME,
+                js.string(cls.nativeNonLeafTags[0])
+              ]);
             }
             subclassAssignment = new js.ExpressionStatement(value);
           }
@@ -1298,8 +1309,8 @@
     }
     statements.add(js.js.statement("setOrUpdateInterceptorsByTag(#);",
         js.objectLiteral(interceptorsByTag)));
-    statements.add(js.js.statement("setOrUpdateLeafTags(#);",
-        js.objectLiteral(leafTags)));
+    statements.add(
+        js.js.statement("setOrUpdateLeafTags(#);", js.objectLiteral(leafTags)));
     statements.add(subclassAssignment);
 
     return new js.Block(statements);
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
index 056345b..b3be363 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -6,64 +6,50 @@
 
 import 'dart:convert' show JsonEncoder;
 
-import 'package:js_runtime/shared/embedded_names.dart' show
-    CLASS_FIELDS_EXTRACTOR,
-    CLASS_ID_EXTRACTOR,
-    CREATE_NEW_ISOLATE,
-    DEFERRED_INITIALIZED,
-    DEFERRED_LIBRARY_URIS,
-    DEFERRED_LIBRARY_HASHES,
-    GET_TYPE_FROM_NAME,
-    INITIALIZE_EMPTY_INSTANCE,
-    INITIALIZE_LOADED_HUNK,
-    INSTANCE_FROM_CLASS_ID,
-    INTERCEPTORS_BY_TAG,
-    IS_HUNK_INITIALIZED,
-    IS_HUNK_LOADED,
-    LEAF_TAGS,
-    MANGLED_GLOBAL_NAMES,
-    MANGLED_NAMES,
-    METADATA,
-    NATIVE_SUPERCLASS_TAG_NAME,
-    STATIC_FUNCTION_NAME_TO_CLOSURE,
-    TYPE_TO_INTERCEPTOR_MAP,
-    TYPES;
+import 'package:js_runtime/shared/embedded_names.dart'
+    show
+        CLASS_FIELDS_EXTRACTOR,
+        CLASS_ID_EXTRACTOR,
+        CREATE_NEW_ISOLATE,
+        DEFERRED_INITIALIZED,
+        DEFERRED_LIBRARY_URIS,
+        DEFERRED_LIBRARY_HASHES,
+        GET_TYPE_FROM_NAME,
+        INITIALIZE_EMPTY_INSTANCE,
+        INITIALIZE_LOADED_HUNK,
+        INSTANCE_FROM_CLASS_ID,
+        INTERCEPTORS_BY_TAG,
+        IS_HUNK_INITIALIZED,
+        IS_HUNK_LOADED,
+        LEAF_TAGS,
+        MANGLED_GLOBAL_NAMES,
+        MANGLED_NAMES,
+        METADATA,
+        NATIVE_SUPERCLASS_TAG_NAME,
+        STATIC_FUNCTION_NAME_TO_CLOSURE,
+        TYPE_TO_INTERCEPTOR_MAP,
+        TYPES;
 
 import '../../common.dart';
-import '../../constants/values.dart' show
-    ConstantValue,
-    FunctionConstantValue;
-import '../../compiler.dart' show
-    Compiler;
-import '../../core_types.dart' show
-    CoreClasses;
-import '../../elements/elements.dart' show
-    ClassElement,
-    FunctionElement;
-import '../../hash/sha1.dart' show
-    Hasher;
+import '../../constants/values.dart' show ConstantValue, FunctionConstantValue;
+import '../../compiler.dart' show Compiler;
+import '../../core_types.dart' show CoreClasses;
+import '../../elements/elements.dart' show ClassElement, FunctionElement;
+import '../../hash/sha1.dart' show Hasher;
 import '../../io/code_output.dart';
-import '../../io/line_column_provider.dart' show
-    LineColumnCollector,
-    LineColumnProvider;
-import '../../io/source_map_builder.dart' show
-    SourceMapBuilder;
+import '../../io/line_column_provider.dart'
+    show LineColumnCollector, LineColumnProvider;
+import '../../io/source_map_builder.dart' show SourceMapBuilder;
 import '../../js/js.dart' as js;
-import '../../js_backend/js_backend.dart' show
-    JavaScriptBackend,
-    Namer,
-    ConstantEmitter;
-import '../../util/uri_extras.dart' show
-    relativize;
+import '../../js_backend/js_backend.dart'
+    show JavaScriptBackend, Namer, ConstantEmitter;
+import '../../util/uri_extras.dart' show relativize;
 
 import '../constant_ordering.dart' show deepCompareConstants;
 import '../headers.dart';
-import '../js_emitter.dart' show
-    NativeEmitter;
+import '../js_emitter.dart' show NativeEmitter;
 
-import '../js_emitter.dart' show
-    buildTearOffCode,
-    NativeGenerator;
+import '../js_emitter.dart' show buildTearOffCode, NativeGenerator;
 import '../model.dart';
 
 part 'deferred_fragment_hash.dart';
@@ -79,7 +65,6 @@
   // The full code that is written to each hunk part-file.
   final Map<Fragment, CodeOutput> outputBuffers = <Fragment, CodeOutput>{};
 
-
   JavaScriptBackend get backend => compiler.backend;
 
   /// For deferred loading we communicate the initializers via this global var.
@@ -92,12 +77,11 @@
   static const String typeNameProperty = r"builtin$cls";
 
   ModelEmitter(Compiler compiler, Namer namer, this.nativeEmitter,
-               this.shouldGenerateSourceMap)
+      this.shouldGenerateSourceMap)
       : this.compiler = compiler,
         this.namer = namer {
     this.constantEmitter = new ConstantEmitter(
-        compiler, namer, this.generateConstantReference,
-        constantListGenerator);
+        compiler, namer, this.generateConstantReference, constantListGenerator);
   }
 
   DiagnosticReporter get reporter => compiler.reporter;
@@ -117,9 +101,9 @@
   }
 
   bool isConstantInlinedOrAlreadyEmitted(ConstantValue constant) {
-    if (constant.isFunction) return true;    // Already emitted.
-    if (constant.isPrimitive) return true;   // Inlined.
-    if (constant.isDummy) return true;       // Inlined.
+    if (constant.isFunction) return true; // Already emitted.
+    if (constant.isPrimitive) return true; // Inlined.
+    if (constant.isDummy) return true; // Inlined.
     return false;
   }
 
@@ -162,8 +146,8 @@
     if (isConstantInlinedOrAlreadyEmitted(value)) {
       return constantEmitter.generate(value);
     }
-    return js.js('#.#', [namer.globalObjectForConstant(value),
-    namer.constantName(value)]);
+    return js.js('#.#',
+        [namer.globalObjectForConstant(value), namer.constantName(value)]);
   }
 
   int emitProgram(Program program) {
@@ -175,7 +159,7 @@
         new FragmentEmitter(compiler, namer, backend, constantEmitter, this);
 
     Map<DeferredFragment, _DeferredFragmentHash> deferredHashTokens =
-      new Map<DeferredFragment, _DeferredFragmentHash>();
+        new Map<DeferredFragment, _DeferredFragmentHash>();
     for (DeferredFragment fragment in deferredFragments) {
       deferredHashTokens[fragment] = new _DeferredFragmentHash(fragment);
     }
@@ -190,7 +174,7 @@
       js.Expression types =
           program.metadataTypesForOutputUnit(fragment.outputUnit);
       deferredFragmentsCode[fragment] = fragmentEmitter.emitDeferredFragment(
-                fragment, types, program.holders);
+          fragment, types, program.holders);
     }
 
     js.TokenCounter counter = new js.TokenCounter();
@@ -204,18 +188,16 @@
 
     // Now that we have written the deferred hunks, we can update the hash
     // tokens in the main-fragment.
-    deferredHashTokens.forEach((DeferredFragment key,
-                                _DeferredFragmentHash token) {
+    deferredHashTokens
+        .forEach((DeferredFragment key, _DeferredFragmentHash token) {
       token.setHash(hunkHashes[key]);
     });
 
     writeMainFragment(mainFragment, mainCode,
-      isSplit: program.deferredFragments.isNotEmpty);
+        isSplit: program.deferredFragments.isNotEmpty);
 
-    if (backend.requiresPreamble &&
-        !backend.htmlLibraryIsLoaded) {
-      reporter.reportHintMessage(
-          NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
+    if (backend.requiresPreamble && !backend.htmlLibraryIsLoaded) {
+      reporter.reportHintMessage(NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
     }
 
     if (compiler.options.deferredMapUri != null) {
@@ -252,7 +234,8 @@
   }
 
   js.Statement buildDeferredInitializerGlobal() {
-    return js.js.statement('self.#deferredInitializers = '
+    return js.js.statement(
+        'self.#deferredInitializers = '
         'self.#deferredInitializers || Object.create(null);',
         {'deferredInitializers': deferredInitializersGlobal});
   }
@@ -270,18 +253,18 @@
     }
 
     CodeOutput mainOutput = new StreamCodeOutput(
-            compiler.outputProvider('', 'js'),
-            codeOutputListeners);
+        compiler.outputProvider('', 'js'), codeOutputListeners);
     outputBuffers[fragment] = mainOutput;
 
     js.Program program = new js.Program([
-        buildGeneratedBy(),
-        new js.Comment(HOOKS_API_USAGE),
-        isSplit ? buildDeferredInitializerGlobal() : new js.Block.empty(),
-        code]);
+      buildGeneratedBy(),
+      new js.Comment(HOOKS_API_USAGE),
+      isSplit ? buildDeferredInitializerGlobal() : new js.Block.empty(),
+      code
+    ]);
 
-    mainOutput.addBuffer(js.createCodeBuffer(program, compiler,
-        monitor: compiler.dumpInfoTask));
+    mainOutput.addBuffer(
+        js.createCodeBuffer(program, compiler, monitor: compiler.dumpInfoTask));
 
     if (shouldGenerateSourceMap) {
       mainOutput.add(generateSourceMapTag(
@@ -330,12 +313,13 @@
     //   deferredInitializer[<hash>] = deferredInitializer.current;
 
     js.Program program = new js.Program([
-        buildGeneratedBy(),
-        buildDeferredInitializerGlobal(),
-        js.js.statement('$deferredInitializersGlobal.current = #', code)]);
+      buildGeneratedBy(),
+      buildDeferredInitializerGlobal(),
+      js.js.statement('$deferredInitializersGlobal.current = #', code)
+    ]);
 
-    output.addBuffer(js.createCodeBuffer(program, compiler,
-        monitor: compiler.dumpInfoTask));
+    output.addBuffer(
+        js.createCodeBuffer(program, compiler, monitor: compiler.dumpInfoTask));
 
     // Make a unique hash of the code (before the sourcemaps are added)
     // This will be used to retrieve the initializing function from the global
@@ -357,15 +341,15 @@
         String mapFileName = hunkFileName + ".map";
         List<String> mapSegments = sourceMapUri.pathSegments.toList();
         mapSegments[mapSegments.length - 1] = mapFileName;
-        mapUri = compiler.options.sourceMapUri
-            .replace(pathSegments: mapSegments);
+        mapUri =
+            compiler.options.sourceMapUri.replace(pathSegments: mapSegments);
       }
 
       if (outputUri != null) {
         List<String> partSegments = outputUri.pathSegments.toList();
         partSegments[partSegments.length - 1] = hunkFileName;
-        partUri = compiler.options.outputUri
-            .replace(pathSegments: partSegments);
+        partUri =
+            compiler.options.outputUri.replace(pathSegments: partSegments);
       }
 
       output.add(generateSourceMapTag(mapUri, partUri));
@@ -389,17 +373,14 @@
     return '';
   }
 
-
-  void outputSourceMap(CodeOutput output,
-                       LineColumnProvider lineColumnProvider,
-                       String name,
-                       [Uri sourceMapUri,
-                       Uri fileUri]) {
+  void outputSourceMap(
+      CodeOutput output, LineColumnProvider lineColumnProvider, String name,
+      [Uri sourceMapUri, Uri fileUri]) {
     if (!shouldGenerateSourceMap) return;
     // Create a source file for the compilation output. This allows using
     // [:getLine:] to transform offsets to line numbers in [SourceMapBuilder].
     SourceMapBuilder sourceMapBuilder =
-    new SourceMapBuilder(sourceMapUri, fileUri, lineColumnProvider);
+        new SourceMapBuilder(sourceMapUri, fileUri, lineColumnProvider);
     output.forEachSourceLocation(sourceMapBuilder.addMapping);
     String sourceMap = sourceMapBuilder.build();
     compiler.outputProvider(name, 'js.map')
@@ -419,7 +400,7 @@
         "needed for a given deferred library import.";
     mapping.addAll(compiler.deferredLoadTask.computeDeferredMap());
     compiler.outputProvider(
-          compiler.options.deferredMapUri.path, 'deferred_map')
+        compiler.options.deferredMapUri.path, 'deferred_map')
       ..add(const JsonEncoder.withIndent("  ").convert(mapping))
       ..close();
   }
diff --git a/pkg/compiler/lib/src/js_emitter/type_test_registry.dart b/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
index 6f64a81..0a6e271 100644
--- a/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
+++ b/pkg/compiler/lib/src/js_emitter/type_test_registry.dart
@@ -79,8 +79,7 @@
     // TODO(karlklose): merge this case with 2 when unifying argument and
     // object checks.
     RuntimeTypes rti = backend.rti;
-    rti.getRequiredArgumentClasses(backend)
-       .forEach(addClassWithSuperclasses);
+    rti.getRequiredArgumentClasses(backend).forEach(addClassWithSuperclasses);
 
     // 2.  Add classes that are referenced by substitutions in object checks and
     //     their superclasses.
@@ -106,8 +105,8 @@
         return false;
       } else if (function.isInstanceMember) {
         if (!function.enclosingClass.isClosure) {
-          return compiler.codegenWorld.hasInvokedGetter(
-              function, compiler.world);
+          return compiler.codegenWorld
+              .hasInvokedGetter(function, compiler.world);
         }
       }
       return false;
@@ -144,8 +143,8 @@
   void computeRequiredTypeChecks() {
     assert(checkedClasses == null && checkedFunctionTypes == null);
 
-    backend.rti.addImplicitChecks(compiler.codegenWorld,
-                                  classesUsingTypeVariableTests);
+    backend.rti.addImplicitChecks(
+        compiler.codegenWorld, classesUsingTypeVariableTests);
 
     checkedClasses = new Set<ClassElement>();
     checkedFunctionTypes = new Set<FunctionType>();
diff --git a/pkg/compiler/lib/src/library_loader.dart b/pkg/compiler/lib/src/library_loader.dart
index e6eaf88..b666bfa 100644
--- a/pkg/compiler/lib/src/library_loader.dart
+++ b/pkg/compiler/lib/src/library_loader.dart
@@ -7,36 +7,33 @@
 import 'dart:async';
 
 import 'common.dart';
-import 'common/names.dart' show
-    Uris;
-import 'common/tasks.dart' show
-    CompilerTask;
-import 'compiler.dart' show
-    Compiler;
-import 'elements/elements.dart' show
-    CompilationUnitElement,
-    Element,
-    ImportElement,
-    ExportElement,
-    LibraryElement,
-    PrefixElement;
-import 'elements/modelx.dart' show
-    CompilationUnitElementX,
-    DeferredLoaderGetterElementX,
-    ErroneousElementX,
-    ExportElementX,
-    ImportElementX,
-    LibraryElementX,
-    LibraryDependencyElementX,
-    PrefixElementX,
-    SyntheticImportElement;
+import 'common/names.dart' show Uris;
+import 'common/tasks.dart' show CompilerTask;
+import 'compiler.dart' show Compiler;
+import 'elements/elements.dart'
+    show
+        CompilationUnitElement,
+        Element,
+        ImportElement,
+        ExportElement,
+        LibraryElement,
+        PrefixElement;
+import 'elements/modelx.dart'
+    show
+        CompilationUnitElementX,
+        DeferredLoaderGetterElementX,
+        ErroneousElementX,
+        ExportElementX,
+        ImportElementX,
+        LibraryElementX,
+        LibraryDependencyElementX,
+        PrefixElementX,
+        SyntheticImportElement;
 import 'environment.dart';
 import 'script.dart';
 import 'serialization/serialization.dart' show LibraryDeserializer;
 import 'tree/tree.dart';
-import 'util/util.dart' show
-    Link,
-    LinkBuilder;
+import 'util/util.dart' show Link, LinkBuilder;
 
 /**
  * [CompilerTask] for loading libraries and setting up the import/export scopes.
@@ -133,7 +130,8 @@
  *
  */
 abstract class LibraryLoaderTask implements CompilerTask {
-  factory LibraryLoaderTask(Compiler compiler,
+  factory LibraryLoaderTask(
+      Compiler compiler,
       ResolvedUriTranslator uriTranslator,
       ScriptLoader scriptLoader,
       ElementScanner scriptScanner,
@@ -158,8 +156,7 @@
   /// If [skipFileWithPartOfTag] is `true`, `null` is returned if the
   /// compilation unit for [resolvedUri] contains a `part of` tag. This is only
   /// used for analysis through [Compiler.analyzeUri].
-  Future<LibraryElement> loadLibrary(
-      Uri resolvedUri,
+  Future<LibraryElement> loadLibrary(Uri resolvedUri,
       {bool skipFileWithPartOfTag: false});
 
   /// Reset the library loader task to prepare for compilation. If provided,
@@ -293,8 +290,7 @@
   /// conditional imports.
   final Environment environment;
 
-  _LibraryLoaderTask(
-      Compiler compiler, this.uriTranslator, this.scriptLoader,
+  _LibraryLoaderTask(Compiler compiler, this.uriTranslator, this.scriptLoader,
       this.scanner, this.deserializer, this.listener, this.environment)
       // TODO(sigmund): make measurements separate from compiler
       : super(compiler);
@@ -355,10 +351,11 @@
           compiler.reuseLibraryTask.measure(
               () => libraryCanonicalUriMap.values.map(wrapper).toList());
 
-      return Future.wait(reusedLibrariesFuture).then(
-          (List<LibraryElement> reusedLibraries) {
-            resetImplementation(reusedLibraries.where((e) => e != null));
-          });
+      return Future
+          .wait(reusedLibrariesFuture)
+          .then((List<LibraryElement> reusedLibraries) {
+        resetImplementation(reusedLibraries.where((e) => e != null));
+      });
     });
   }
 
@@ -383,7 +380,7 @@
       // loading of a library cluster.
       currentHandler = new LibraryDependencyHandler(this);
       return createLibrary(currentHandler, null, resolvedUri,
-          skipFileWithPartOfTag: skipFileWithPartOfTag)
+              skipFileWithPartOfTag: skipFileWithPartOfTag)
           .then((LibraryElement library) {
         if (library == null) {
           currentHandler = null;
@@ -392,13 +389,11 @@
         return reporter.withCurrentElement(library, () {
           return measure(() {
             currentHandler.computeExports();
-            LoadedLibraries loadedLibraries = new _LoadedLibraries(
-                library,
-                currentHandler.newLibraries,
-                currentHandler.nodeMap,
-                this);
+            LoadedLibraries loadedLibraries = new _LoadedLibraries(library,
+                currentHandler.newLibraries, currentHandler.nodeMap, this);
             currentHandler = null;
-            return listener.onLibrariesLoaded(loadedLibraries)
+            return listener
+                .onLibrariesLoaded(loadedLibraries)
                 .then((_) => library);
           });
         });
@@ -412,8 +407,8 @@
    * The imported/exported libraries are loaded and processed recursively but
    * the import/export scopes are not set up.
    */
-  Future processLibraryTags(LibraryDependencyHandler handler,
-                            LibraryElementX library) {
+  Future processLibraryTags(
+      LibraryDependencyHandler handler, LibraryElementX library) {
     TagState tagState = new TagState();
 
     bool importsDartCore = false;
@@ -423,7 +418,6 @@
 
     return Future.forEach(library.tags, (LibraryTag tag) {
       return reporter.withCurrentElement(library, () {
-
         Uri computeUri(LibraryDependency node) {
           StringNode uriNode = node.uri;
           if (node.conditionalUris != null) {
@@ -444,8 +438,7 @@
             return Uri.parse(tagUriString);
           } on FormatException {
             reporter.reportErrorMessage(
-                node.uri,
-                MessageKind.INVALID_URI, {'uri': tagUriString});
+                node.uri, MessageKind.INVALID_URI, {'uri': tagUriString});
             return null;
           }
         }
@@ -504,7 +497,8 @@
         if (!importsDartCore && library.canonicalUri != Uris.dart_core) {
           return createLibrary(handler, null, Uris.dart_core)
               .then((LibraryElement coreLibrary) {
-            handler.registerDependency(library,
+            handler.registerDependency(
+                library,
                 new SyntheticImportElement(
                     library.entryCompilationUnit, Uris.dart_core),
                 coreLibrary);
@@ -531,36 +525,31 @@
       if (library.hasLibraryName) {
         reporter.withCurrentElement(library, () {
           reporter.reportWarningMessage(
-              library,
-              MessageKind.DUPLICATED_LIBRARY_RESOURCE,
-              {'libraryName': library.libraryName,
-               'resourceUri': resourceUri,
-               'canonicalUri1': library.canonicalUri,
-               'canonicalUri2': existing.canonicalUri});
+              library, MessageKind.DUPLICATED_LIBRARY_RESOURCE, {
+            'libraryName': library.libraryName,
+            'resourceUri': resourceUri,
+            'canonicalUri1': library.canonicalUri,
+            'canonicalUri2': existing.canonicalUri
+          });
         });
       } else {
-        reporter.reportHintMessage(
-            library,
-            MessageKind.DUPLICATED_RESOURCE,
-            {'resourceUri': resourceUri,
-             'canonicalUri1': library.canonicalUri,
-             'canonicalUri2': existing.canonicalUri});
+        reporter.reportHintMessage(library, MessageKind.DUPLICATED_RESOURCE, {
+          'resourceUri': resourceUri,
+          'canonicalUri1': library.canonicalUri,
+          'canonicalUri2': existing.canonicalUri
+        });
       }
     } else if (library.hasLibraryName) {
       String name = library.libraryName;
       existing = libraryNames.putIfAbsent(name, () => library);
       if (!identical(existing, library)) {
         reporter.withCurrentElement(library, () {
-          reporter.reportWarningMessage(
-              library,
-              MessageKind.DUPLICATED_LIBRARY_NAME,
-              {'libraryName': name});
+          reporter.reportWarningMessage(library,
+              MessageKind.DUPLICATED_LIBRARY_NAME, {'libraryName': name});
         });
         reporter.withCurrentElement(existing, () {
-          reporter.reportWarningMessage(
-              existing,
-              MessageKind.DUPLICATED_LIBRARY_NAME,
-              {'libraryName': name});
+          reporter.reportWarningMessage(existing,
+              MessageKind.DUPLICATED_LIBRARY_NAME, {'libraryName': name});
         });
       }
     }
@@ -588,21 +577,18 @@
    * export scope. If the tag does not contain a valid URI, then its dependency
    * is not registered in [handler].
    */
-  Future<Null> registerLibraryFromImportExport(
-      LibraryDependencyHandler handler,
-      LibraryElement library,
-      LibraryDependencyElementX libraryDependency) {
+  Future<Null> registerLibraryFromImportExport(LibraryDependencyHandler handler,
+      LibraryElement library, LibraryDependencyElementX libraryDependency) {
     Uri base = library.canonicalUri;
     Uri resolvedUri = base.resolveUri(libraryDependency.uri);
     return createLibrary(handler, library, resolvedUri, node: libraryDependency)
         .then((LibraryElement loadedLibrary) {
-          if (loadedLibrary == null) return;
-          reporter.withCurrentElement(library, () {
-            libraryDependency.libraryDependency = loadedLibrary;
-            handler.registerDependency(
-                library, libraryDependency, loadedLibrary);
-          });
-        });
+      if (loadedLibrary == null) return;
+      reporter.withCurrentElement(library, () {
+        libraryDependency.libraryDependency = loadedLibrary;
+        handler.registerDependency(library, libraryDependency, loadedLibrary);
+      });
+    });
   }
 
   /// Loads the deserialized [library] with the [handler].
@@ -610,8 +596,7 @@
   /// All libraries imported or exported transitively from [library] will be
   /// loaded as well.
   Future<LibraryElement> loadDeserializedLibrary(
-      LibraryDependencyHandler handler,
-      LibraryElement library) {
+      LibraryDependencyHandler handler, LibraryElement library) {
     libraryCanonicalUriMap[library.canonicalUri] = library;
     handler.registerNewLibrary(library);
     return listener.onLibraryScanned(library, handler).then((_) {
@@ -625,8 +610,8 @@
     });
   }
 
-  Future<Script> _readScript(Spannable spannable,
-      Uri readableUri, Uri resolvedUri) {
+  Future<Script> _readScript(
+      Spannable spannable, Uri readableUri, Uri resolvedUri) {
     if (readableUri == null) {
       return new Future.value(new Script.synthetic(resolvedUri));
     } else {
@@ -640,66 +625,65 @@
    *
    * If a new library is created, the [handler] is notified.
    */
-  Future<LibraryElement> createLibrary(
-      LibraryDependencyHandler handler,
-      LibraryElement importingLibrary,
-      Uri resolvedUri,
-      {Spannable node,
-       bool skipFileWithPartOfTag: false}) {
+  Future<LibraryElement> createLibrary(LibraryDependencyHandler handler,
+      LibraryElement importingLibrary, Uri resolvedUri,
+      {Spannable node, bool skipFileWithPartOfTag: false}) {
     Uri readableUri =
         uriTranslator.translate(importingLibrary, resolvedUri, node);
     LibraryElement library = libraryCanonicalUriMap[resolvedUri];
     if (library != null) {
       return new Future.value(library);
     }
-    library = deserializer.readLibrary(resolvedUri);
-    if (library != null) {
-      return loadDeserializedLibrary(handler, library);
-    }
-    return reporter.withCurrentElement(importingLibrary, () {
-      return _readScript(node, readableUri, resolvedUri).then((Script script) {
-        if (script == null) return null;
-        LibraryElement element =
-            createLibrarySync(handler, script, resolvedUri);
-        CompilationUnitElementX compilationUnit = element.entryCompilationUnit;
-        if (compilationUnit.partTag != null) {
-          if (skipFileWithPartOfTag) {
-            // TODO(johnniwinther): Avoid calling [listener.onLibraryCreated]
-            // for this library.
-            libraryCanonicalUriMap.remove(resolvedUri);
-            return null;
+    return deserializer.readLibrary(resolvedUri).then((LibraryElement library) {
+      if (library != null) {
+        return loadDeserializedLibrary(handler, library);
+      }
+      return reporter.withCurrentElement(importingLibrary, () {
+        return _readScript(node, readableUri, resolvedUri)
+            .then((Script script) {
+          if (script == null) return null;
+          LibraryElement element =
+              createLibrarySync(handler, script, resolvedUri);
+          CompilationUnitElementX compilationUnit =
+              element.entryCompilationUnit;
+          if (compilationUnit.partTag != null) {
+            if (skipFileWithPartOfTag) {
+              // TODO(johnniwinther): Avoid calling [listener.onLibraryCreated]
+              // for this library.
+              libraryCanonicalUriMap.remove(resolvedUri);
+              return null;
+            }
+            if (importingLibrary == null) {
+              DiagnosticMessage error = reporter.withCurrentElement(
+                  compilationUnit,
+                  () => reporter.createMessage(
+                      compilationUnit.partTag, MessageKind.MAIN_HAS_PART_OF));
+              reporter.reportError(error);
+            } else {
+              DiagnosticMessage error = reporter.withCurrentElement(
+                  compilationUnit,
+                  () => reporter.createMessage(
+                      compilationUnit.partTag, MessageKind.IMPORT_PART_OF));
+              DiagnosticMessage info = reporter.withCurrentElement(
+                  importingLibrary,
+                  () => reporter.createMessage(
+                      node, MessageKind.IMPORT_PART_OF_HERE));
+              reporter.reportError(error, [info]);
+            }
           }
-          if (importingLibrary == null) {
-            DiagnosticMessage error = reporter.withCurrentElement(
-                compilationUnit,
-                () => reporter.createMessage(
-                    compilationUnit.partTag, MessageKind.MAIN_HAS_PART_OF));
-            reporter.reportError(error);
-          } else {
-            DiagnosticMessage error = reporter.withCurrentElement(
-                compilationUnit,
-                () => reporter.createMessage(
-                    compilationUnit.partTag, MessageKind.IMPORT_PART_OF));
-            DiagnosticMessage info = reporter.withCurrentElement(
-                importingLibrary,
-                () => reporter.createMessage(
-                    node,
-                    MessageKind.IMPORT_PART_OF_HERE));
-            reporter.reportError(error, [info]);
-          }
-        }
-        return processLibraryTags(handler, element).then((_) {
-          reporter.withCurrentElement(element, () {
-            handler.registerLibraryExports(element);
+          return processLibraryTags(handler, element).then((_) {
+            reporter.withCurrentElement(element, () {
+              handler.registerLibraryExports(element);
+            });
+            return element;
           });
-          return element;
         });
       });
     });
   }
 
-  LibraryElement createLibrarySync(LibraryDependencyHandler handler,
-      Script script, Uri resolvedUri) {
+  LibraryElement createLibrarySync(
+      LibraryDependencyHandler handler, Script script, Uri resolvedUri) {
     LibraryElement element = new LibraryElementX(script, resolvedUri);
     return reporter.withCurrentElement(element, () {
       if (handler != null) {
@@ -723,7 +707,6 @@
   }
 }
 
-
 /// A state machine for checking script tags come in the correct order.
 class TagState {
   /// Initial state.
@@ -745,11 +728,11 @@
 
   /// Encodes transition function for state machine.
   static const List<int> NEXT = const <int>[
-      NO_TAG_SEEN,
-      AFTER_LIBRARY_DECLARATION, // Only one library tag is allowed.
-      IMPORT_OR_EXPORT,
-      IMPORT_OR_EXPORT,
-      PART,
+    NO_TAG_SEEN,
+    AFTER_LIBRARY_DECLARATION, // Only one library tag is allowed.
+    IMPORT_OR_EXPORT,
+    IMPORT_OR_EXPORT,
+    PART,
   ];
 
   int tagState = TagState.NO_TAG_SEEN;
@@ -804,14 +787,12 @@
   /**
    * Imports the library into the [importingLibrary].
    */
-  void importLibrary(DiagnosticReporter reporter,
-                     LibraryElementX importingLibrary) {
-    assert(invariant(importingLibrary,
-                     importedLibrary.exportsHandled,
-                     message: 'Exports not handled on $importedLibrary'));
+  void importLibrary(
+      DiagnosticReporter reporter, LibraryElementX importingLibrary) {
+    assert(invariant(importingLibrary, importedLibrary.exportsHandled,
+        message: 'Exports not handled on $importedLibrary'));
     Import tag = import.node;
-    CombinatorFilter combinatorFilter =
-        new CombinatorFilter.fromTag(tag);
+    CombinatorFilter combinatorFilter = new CombinatorFilter.fromTag(tag);
     if (tag != null && tag.prefix != null) {
       String prefix = tag.prefix.source;
       Element existingElement = importingLibrary.find(prefix);
@@ -833,8 +814,7 @@
       import.prefix = prefixElement;
       if (prefixElement.isDeferred) {
         prefixElement.addImport(
-            new DeferredLoaderGetterElementX(prefixElement),
-            import, reporter);
+            new DeferredLoaderGetterElementX(prefixElement), import, reporter);
       }
     } else {
       importedLibrary.forEachExport((Element element) {
@@ -887,7 +867,6 @@
   final int hashCode = ++hashCodeCounter;
   static int hashCodeCounter = 0;
 
-
   /**
    * A linked list of the import tags that import [library] mapped to the
    * corresponding libraries. This is used to propagate exports into imports
@@ -929,8 +908,8 @@
    * Registers that the library of this node imports [importLibrary] through the
    * [import] tag.
    */
-  void registerImportDependency(ImportElementX import,
-                                LibraryElement importedLibrary) {
+  void registerImportDependency(
+      ImportElementX import, LibraryElement importedLibrary) {
     imports = imports.prepend(new ImportLink(import, importedLibrary));
   }
 
@@ -938,8 +917,8 @@
    * Registers that the library of this node is exported by
    * [exportingLibraryNode] through the [export] tag.
    */
-  void registerExportDependency(ExportElementX export,
-                                LibraryDependencyNode exportingLibraryNode) {
+  void registerExportDependency(
+      ExportElementX export, LibraryDependencyNode exportingLibraryNode) {
     // Register the exported library in the exporting library node.
     exportingLibraryNode.exports =
         exportingLibraryNode.exports.prepend(library);
@@ -965,16 +944,16 @@
   ///
   /// Additionally, check that all names in the show/hide combinators are in the
   /// export scope of [exportedLibraryElement].
-  void registerHandledExports(DiagnosticReporter reporter,
-                              LibraryElement exportedLibraryElement,
-                              ExportElementX export,
-                              CombinatorFilter filter) {
+  void registerHandledExports(
+      DiagnosticReporter reporter,
+      LibraryElement exportedLibraryElement,
+      ExportElementX export,
+      CombinatorFilter filter) {
     assert(invariant(library, exportedLibraryElement.exportsHandled));
     exportedLibraryElement.forEachExport((Element exportedElement) {
       if (!filter.exclude(exportedElement)) {
-        Link<ExportElement> exports =
-            pendingExportMap.putIfAbsent(exportedElement,
-                                         () => const Link<ExportElement>());
+        Link<ExportElement> exports = pendingExportMap.putIfAbsent(
+            exportedElement, () => const Link<ExportElement>());
         pendingExportMap[exportedElement] = exports.prepend(export);
       }
     });
@@ -1015,46 +994,38 @@
    * Adds [element] to the export scope for this node. If the [element] name
    * is a duplicate, an error element is inserted into the export scope.
    */
-  Element addElementToExportScope(
-      DiagnosticReporter reporter,
-      Element element,
+  Element addElementToExportScope(DiagnosticReporter reporter, Element element,
       Link<ExportElement> exports) {
     String name = element.name;
     DiagnosticMessage error;
     List<DiagnosticMessage> infos = <DiagnosticMessage>[];
 
     void createDuplicateExportMessage(
-        Element duplicate,
-        Link<ExportElement> duplicateExports) {
+        Element duplicate, Link<ExportElement> duplicateExports) {
       assert(invariant(library, !duplicateExports.isEmpty,
           message: "No export for $duplicate from ${duplicate.library} "
-                   "in $library."));
+              "in $library."));
       reporter.withCurrentElement(library, () {
         for (ExportElement export in duplicateExports) {
           if (error == null) {
             error = reporter.createMessage(
-                export,
-                MessageKind.DUPLICATE_EXPORT,
-                {'name': name});
+                export, MessageKind.DUPLICATE_EXPORT, {'name': name});
           } else {
             infos.add(reporter.createMessage(
-                export,
-                MessageKind.DUPLICATE_EXPORT_CONT,
-                {'name': name}));
+                export, MessageKind.DUPLICATE_EXPORT_CONT, {'name': name}));
           }
         }
       });
     }
 
     void createDuplicateExportDeclMessage(
-        Element duplicate,
-        Link<ExportElement> duplicateExports) {
+        Element duplicate, Link<ExportElement> duplicateExports) {
       assert(invariant(library, !duplicateExports.isEmpty,
           message: "No export for $duplicate from ${duplicate.library} "
-                   "in $library."));
+              "in $library."));
       infos.add(reporter.createMessage(
           duplicate,
-              MessageKind.DUPLICATE_EXPORT_DECL,
+          MessageKind.DUPLICATE_EXPORT_DECL,
           {'name': name, 'uriString': duplicateExports.head.uri}));
     }
 
@@ -1140,10 +1111,8 @@
 
   /// Check that all names in the show/hide combinators of [tag] are in the
   /// export scope of [library].
-  void checkLibraryDependency(
-      DiagnosticReporter reporter,
-      LibraryDependency tag,
-      LibraryElement library) {
+  void checkLibraryDependency(DiagnosticReporter reporter,
+      LibraryDependency tag, LibraryElement library) {
     if (tag == null || tag.combinators == null) return;
     for (Combinator combinator in tag.combinators) {
       for (Identifier identifier in combinator.identifiers) {
@@ -1158,23 +1127,16 @@
               // which case you shouldn't remove the combinator.
               continue;
             }
-            reporter.reportHintMessage(
-                identifier,
-                MessageKind.EMPTY_HIDE,
-                {'uri': library.canonicalUri,
-                 'name': name});
+            reporter.reportHintMessage(identifier, MessageKind.EMPTY_HIDE,
+                {'uri': library.canonicalUri, 'name': name});
           } else {
-            reporter.reportHintMessage(
-                identifier,
-                MessageKind.EMPTY_SHOW,
-                {'uri': library.canonicalUri,
-                 'name': name});
+            reporter.reportHintMessage(identifier, MessageKind.EMPTY_SHOW,
+                {'uri': library.canonicalUri, 'name': name});
           }
         }
       }
     }
   }
-
 }
 
 /**
@@ -1228,7 +1190,7 @@
         tasks[node] = pendingExports;
       });
       tasks.forEach((LibraryDependencyNode node,
-                     Map<Element, Link<ExportElement>> pendingExports) {
+          Map<Element, Link<ExportElement>> pendingExports) {
         pendingExports.forEach((Element element, Link<ExportElement> exports) {
           element = node.addElementToExportScope(reporter, element, exports);
           if (node.propagateElement(element)) {
@@ -1259,9 +1221,10 @@
 
   /// Registers that [library] depends on [loadedLibrary] through
   /// [libraryDependency].
-  void registerDependency(LibraryElementX library,
-                          LibraryDependencyElementX libraryDependency,
-                          LibraryElement loadedLibrary) {
+  void registerDependency(
+      LibraryElementX library,
+      LibraryDependencyElementX libraryDependency,
+      LibraryElement loadedLibrary) {
     if (libraryDependency.isExport) {
       // [loadedLibrary] is exported by [library].
       LibraryDependencyNode exportingNode = nodeMap[library];
@@ -1336,7 +1299,7 @@
   /// [callback] is called once for each chain of imports leading to [uri] until
   /// [callback] returns `false`.
   void forEachImportChain(Uri uri,
-                          {bool callback(Link<Uri> importChainReversed)});
+      {bool callback(Link<Uri> importChainReversed)});
 }
 
 class _LoadedLibraries implements LoadedLibraries {
@@ -1345,11 +1308,8 @@
   final Map<Uri, LibraryElement> loadedLibraries = <Uri, LibraryElement>{};
   final Map<LibraryElement, LibraryDependencyNode> nodeMap;
 
-  _LoadedLibraries(
-      this.rootLibrary,
-      Iterable<LibraryElement> libraries,
-      this.nodeMap,
-      this.task) {
+  _LoadedLibraries(this.rootLibrary, Iterable<LibraryElement> libraries,
+      this.nodeMap, this.task) {
     libraries.forEach((LibraryElement loadedLibrary) {
       loadedLibraries[loadedLibrary.canonicalUri] = loadedLibrary;
     });
@@ -1364,7 +1324,7 @@
   void forEachLibrary(f(LibraryElement library)) => nodeMap.keys.forEach(f);
 
   void forEachImportChain(Uri targetUri,
-                          {bool callback(Link<Uri> importChainReversed)}) {
+      {bool callback(Link<Uri> importChainReversed)}) {
     bool aborted = false;
 
     /// Map from libraries to the set of (unreversed) paths to [uri].
@@ -1378,8 +1338,7 @@
     ///
     /// For every found suffix it prepends the given [prefix] and the canonical
     /// uri of [library] and invokes the [callback] with the concatenated chain.
-    void computeSuffixes(LibraryElement library,
-                         Link<Uri> prefix) {
+    void computeSuffixes(LibraryElement library, Link<Uri> prefix) {
       if (aborted) return;
 
       Uri canonicalUri = library.canonicalUri;
@@ -1428,7 +1387,8 @@
           processLibrary(exportedLibrary);
           if (aborted) return;
         }
-      } else { // Here `targetUri == canonicalUri`.
+      } else {
+        // Here `targetUri == canonicalUri`.
         if (!callback(prefix)) {
           aborted = true;
           return;
@@ -1452,11 +1412,10 @@
   /// Translate the resolved [uri] in the context of [importingLibrary].
   ///
   /// Use [spannable] for error reporting.
-  Uri translate(
-      LibraryElement importingLibrary, Uri uri, [Spannable spannable]);
+  Uri translate(LibraryElement importingLibrary, Uri uri,
+      [Spannable spannable]);
 }
 
-
 // TODO(sigmund): remove ScriptLoader & ElementScanner. Such abstraction seems
 // rather low-level. It might be more practical to split the library-loading
 // task itself.  The task would continue to do the work of recursively loading
@@ -1509,7 +1468,6 @@
   void scanUnit(CompilationUnitElement unit);
 }
 
-
 /// TODO(sigmund): remove this abstraction. Ideally the loader can produce the
 /// LoadedLibraries results once, and the compiler and choose what to do with
 /// it instead.
diff --git a/pkg/compiler/lib/src/mirror_renamer/mirror_renamer.dart b/pkg/compiler/lib/src/mirror_renamer/mirror_renamer.dart
index d157b74..e838f8e 100644
--- a/pkg/compiler/lib/src/mirror_renamer/mirror_renamer.dart
+++ b/pkg/compiler/lib/src/mirror_renamer/mirror_renamer.dart
@@ -4,14 +4,11 @@
 
 library mirror_renamer;
 
-import '../compiler.dart' show
-    Compiler;
-import '../dart_backend/dart_backend.dart' show
-    DartBackend,
-    PlaceholderCollector;
+import '../compiler.dart' show Compiler;
+import '../dart_backend/dart_backend.dart'
+    show DartBackend, PlaceholderCollector;
 import '../elements/elements.dart';
-import '../tokens/token.dart' show
-    Token;
+import '../tokens/token.dart' show Token;
 import '../tree/tree.dart';
 
 part 'renamer.dart';
@@ -28,5 +25,5 @@
   void registerStaticSend(Element currentElement, Element target, Node node) {}
 
   void addRenames(Map<Node, String> renames, List<Node> topLevelNodes,
-                  PlaceholderCollector placeholderCollector) {}
+      PlaceholderCollector placeholderCollector) {}
 }
diff --git a/pkg/compiler/lib/src/mirror_renamer/renamer.dart b/pkg/compiler/lib/src/mirror_renamer/renamer.dart
index 4f206c1..5b2daa1 100644
--- a/pkg/compiler/lib/src/mirror_renamer/renamer.dart
+++ b/pkg/compiler/lib/src/mirror_renamer/renamer.dart
@@ -40,10 +40,10 @@
 
   MirrorRenamerImpl(this.compiler, this.backend, LibraryElement library)
       : this.helperLibrary = library,
-        getNameFunction = library.find(
-            MirrorRenamerImpl.MIRROR_HELPER_GET_NAME_FUNCTION),
-        symbolsMapVariable = library.find(
-            MirrorRenamerImpl.MIRROR_HELPER_SYMBOLS_MAP_NAME);
+        getNameFunction =
+            library.find(MirrorRenamerImpl.MIRROR_HELPER_GET_NAME_FUNCTION),
+        symbolsMapVariable =
+            library.find(MirrorRenamerImpl.MIRROR_HELPER_SYMBOLS_MAP_NAME);
 
   bool isMirrorHelperLibrary(LibraryElement element) {
     return element == helperLibrary;
@@ -67,7 +67,7 @@
    * contain all the toplevel ast nodes that will be emitted in the output.
    */
   void addRenames(Map<Node, String> renames, List<Node> topLevelNodes,
-                  PlaceholderCollector placeholderCollector) {
+      PlaceholderCollector placeholderCollector) {
     // Right now we only support instances of MirrorSystem.getName,
     // hence if there are no occurence of these we don't do anything.
     if (mirrorSystemGetNameNodes.isEmpty) {
diff --git a/pkg/compiler/lib/src/mirrors/analyze.dart b/pkg/compiler/lib/src/mirrors/analyze.dart
index 4f7f09f..d6ab956 100644
--- a/pkg/compiler/lib/src/mirrors/analyze.dart
+++ b/pkg/compiler/lib/src/mirrors/analyze.dart
@@ -23,14 +23,15 @@
  * static inspection of the source code.
  */
 // TODO(johnniwinther): Move this to [compiler/compiler.dart].
-Future<MirrorSystem> analyze(List<Uri> libraries,
-                             Uri libraryRoot,
-                             Uri packageRoot,
-                             api.CompilerInputProvider inputProvider,
-                             api.DiagnosticHandler diagnosticHandler,
-                             [List<String> options = const <String>[],
-                              Uri packageConfig,
-                              api.PackagesDiscoveryProvider findPackages]) {
+Future<MirrorSystem> analyze(
+    List<Uri> libraries,
+    Uri libraryRoot,
+    Uri packageRoot,
+    api.CompilerInputProvider inputProvider,
+    api.DiagnosticHandler diagnosticHandler,
+    [List<String> options = const <String>[],
+    Uri packageConfig,
+    api.PackagesDiscoveryProvider findPackages]) {
   if (!libraryRoot.path.endsWith("/")) {
     throw new ArgumentError("libraryRoot must end with a /");
   }
@@ -46,10 +47,9 @@
   options.add('--allow-native-extensions');
 
   bool compilationFailed = false;
-  void internalDiagnosticHandler(Uri uri, int begin, int end,
-                                 String message, api.Diagnostic kind) {
-    if (kind == api.Diagnostic.ERROR ||
-        kind == api.Diagnostic.CRASH) {
+  void internalDiagnosticHandler(
+      Uri uri, int begin, int end, String message, api.Diagnostic kind) {
+    if (kind == api.Diagnostic.ERROR || kind == api.Diagnostic.CRASH) {
       compilationFailed = true;
     }
     diagnosticHandler(uri, begin, end, message, kind);
diff --git a/pkg/compiler/lib/src/mirrors/dart2js_instance_mirrors.dart b/pkg/compiler/lib/src/mirrors/dart2js_instance_mirrors.dart
index 55d8789..039f5af 100644
--- a/pkg/compiler/lib/src/mirrors/dart2js_instance_mirrors.dart
+++ b/pkg/compiler/lib/src/mirrors/dart2js_instance_mirrors.dart
@@ -13,9 +13,8 @@
     throw new UnsupportedError('ObjectMirror.setField unsupported.');
   }
 
-  InstanceMirror invoke(Symbol memberName,
-                        List positionalArguments,
-                        [Map<Symbol, dynamic> namedArguments]) {
+  InstanceMirror invoke(Symbol memberName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
     throw new UnsupportedError('ObjectMirror.invoke unsupported.');
   }
 
@@ -36,7 +35,6 @@
     Dart2JsMirrorSystem mirrorSystem,
     ConstantExpression constant,
     ConstantValue value) {
-
   if (value.isBool) {
     return new Dart2JsBoolConstantMirror(mirrorSystem, constant, value);
   } else if (value.isNum) {
@@ -56,12 +54,11 @@
   } else if (value.isConstructedObject) {
     return new Dart2JsConstructedConstantMirror(mirrorSystem, constant, value);
   }
-  mirrorSystem.compiler.reporter.internalError(NO_LOCATION_SPANNABLE,
-      "Unexpected constant value $value");
+  mirrorSystem.compiler.reporter
+      .internalError(NO_LOCATION_SPANNABLE, "Unexpected constant value $value");
   return null;
 }
 
-
 ////////////////////////////////////////////////////////////////////////////////
 // Mirrors on constant values used for metadata.
 ////////////////////////////////////////////////////////////////////////////////
@@ -97,8 +94,7 @@
 
 class Dart2JsNullConstantMirror extends Dart2JsConstantMirror {
   Dart2JsNullConstantMirror(Dart2JsMirrorSystem mirrorSystem,
-                            ConstantExpression constant,
-                            NullConstantValue value)
+      ConstantExpression constant, NullConstantValue value)
       : super(mirrorSystem, constant, value);
 
   NullConstantValue get _value => super._value;
@@ -110,14 +106,13 @@
 
 class Dart2JsBoolConstantMirror extends Dart2JsConstantMirror {
   Dart2JsBoolConstantMirror(Dart2JsMirrorSystem mirrorSystem,
-                            ConstantExpression constant,
-                            BoolConstantValue value)
+      ConstantExpression constant, BoolConstantValue value)
       : super(mirrorSystem, constant, value);
 
-  Dart2JsBoolConstantMirror.fromBool(Dart2JsMirrorSystem mirrorSystem,
-                                     bool value)
+  Dart2JsBoolConstantMirror.fromBool(
+      Dart2JsMirrorSystem mirrorSystem, bool value)
       : super(mirrorSystem, null,
-              value ? new TrueConstantValue() : new FalseConstantValue());
+            value ? new TrueConstantValue() : new FalseConstantValue());
 
   BoolConstantValue get _value => super._value;
 
@@ -128,14 +123,13 @@
 
 class Dart2JsStringConstantMirror extends Dart2JsConstantMirror {
   Dart2JsStringConstantMirror(Dart2JsMirrorSystem mirrorSystem,
-                              ConstantExpression constant,
-                              StringConstantValue value)
+      ConstantExpression constant, StringConstantValue value)
       : super(mirrorSystem, constant, value);
 
-  Dart2JsStringConstantMirror.fromString(Dart2JsMirrorSystem mirrorSystem,
-                                         String text)
+  Dart2JsStringConstantMirror.fromString(
+      Dart2JsMirrorSystem mirrorSystem, String text)
       : super(mirrorSystem, null,
-              new StringConstantValue(new DartString.literal(text)));
+            new StringConstantValue(new DartString.literal(text)));
 
   StringConstantValue get _value => super._value;
 
@@ -146,8 +140,7 @@
 
 class Dart2JsNumConstantMirror extends Dart2JsConstantMirror {
   Dart2JsNumConstantMirror(Dart2JsMirrorSystem mirrorSystem,
-                           ConstantExpression constant,
-                           NumConstantValue value)
+      ConstantExpression constant, NumConstantValue value)
       : super(mirrorSystem, constant, value);
 
   NumConstantValue get _value => super._value;
@@ -160,8 +153,7 @@
 class Dart2JsListConstantMirror extends Dart2JsConstantMirror
     implements ListInstanceMirror {
   Dart2JsListConstantMirror(Dart2JsMirrorSystem mirrorSystem,
-                            ConstantExpression constant,
-                            ListConstantValue value)
+      ConstantExpression constant, ListConstantValue value)
       : super(mirrorSystem, constant, value);
 
   ListConstantValue get _value => super._value;
@@ -181,8 +173,7 @@
   List<String> _listCache;
 
   Dart2JsMapConstantMirror(Dart2JsMirrorSystem mirrorSystem,
-                           ConstantExpression constant,
-                           MapConstantValue value)
+      ConstantExpression constant, MapConstantValue value)
       : super(mirrorSystem, constant, value);
 
   MapConstantValue get _value => super._value;
@@ -216,10 +207,8 @@
 
 class Dart2JsTypeConstantMirror extends Dart2JsConstantMirror
     implements TypeInstanceMirror {
-
   Dart2JsTypeConstantMirror(Dart2JsMirrorSystem mirrorSystem,
-                            ConstantExpression constant,
-                            TypeConstantValue value)
+      ConstantExpression constant, TypeConstantValue value)
       : super(mirrorSystem, constant, value);
 
   TypeConstantValue get _value => super._value;
@@ -232,8 +221,7 @@
   Map<String, ConstantValue> _fieldMapCache;
 
   Dart2JsConstructedConstantMirror(Dart2JsMirrorSystem mirrorSystem,
-                                   ConstantExpression constant,
-                                   ConstructedConstantValue value)
+      ConstantExpression constant, ConstructedConstantValue value)
       : super(mirrorSystem, constant, value);
 
   ConstructedConstantValue get _value => super._value;
@@ -262,8 +250,8 @@
 }
 
 class Dart2JsCommentInstanceMirror extends Object
-  with ObjectMirrorMixin, InstanceMirrorMixin
-  implements CommentInstanceMirror {
+    with ObjectMirrorMixin, InstanceMirrorMixin
+    implements CommentInstanceMirror {
   final Dart2JsMirrorSystem mirrorSystem;
   final String text;
   String _trimmedText;
@@ -271,8 +259,8 @@
   Dart2JsCommentInstanceMirror(this.mirrorSystem, this.text);
 
   ClassMirror get type {
-    return mirrorSystem._getTypeDeclarationMirror(
-        mirrorSystem.compiler.documentClass);
+    return mirrorSystem
+        ._getTypeDeclarationMirror(mirrorSystem.compiler.documentClass);
   }
 
   bool get isDocComment => text.startsWith('/**') || text.startsWith('///');
@@ -290,8 +278,8 @@
     } else if (fieldName == #text) {
       return new Dart2JsStringConstantMirror.fromString(mirrorSystem, text);
     } else if (fieldName == #trimmedText) {
-      return new Dart2JsStringConstantMirror.fromString(mirrorSystem,
-                                                        trimmedText);
+      return new Dart2JsStringConstantMirror.fromString(
+          mirrorSystem, trimmedText);
     }
     return super.getField(fieldName);
   }
diff --git a/pkg/compiler/lib/src/mirrors/dart2js_library_mirror.dart b/pkg/compiler/lib/src/mirrors/dart2js_library_mirror.dart
index feaf549..39468d3 100644
--- a/pkg/compiler/lib/src/mirrors/dart2js_library_mirror.dart
+++ b/pkg/compiler/lib/src/mirrors/dart2js_library_mirror.dart
@@ -4,8 +4,7 @@
 
 part of dart2js.mirrors;
 
-class Dart2JsLibraryMirror
-    extends Dart2JsElementMirror
+class Dart2JsLibraryMirror extends Dart2JsElementMirror
     with ObjectMirrorMixin, ContainerMixin
     implements LibrarySourceMirror {
   List<LibraryDependencySourceMirror> _libraryDependencies;
@@ -80,7 +79,7 @@
           <LibraryDependency, Dart2JsLibraryDependencyMirror>{};
 
       void addLibraryDependency(LibraryDependency libraryDependency,
-                                LibraryElement targetLibraryElement) {
+          LibraryElement targetLibraryElement) {
         assert(targetLibraryElement != null);
         LibraryMirror targetLibrary =
             mirrorSystem._getLibrary(targetLibraryElement);
@@ -119,14 +118,13 @@
   final Dart2JsLibraryMirror _targetLibrary;
   List<CombinatorMirror> _combinators;
 
-  Dart2JsLibraryDependencyMirror(this._node,
-                                 this._sourceLibrary,
-                                 this._targetLibrary);
+  Dart2JsLibraryDependencyMirror(
+      this._node, this._sourceLibrary, this._targetLibrary);
 
   SourceLocation get location {
     return new Dart2JsSourceLocation(
-      _sourceLibrary._element.entryCompilationUnit.script,
-      _sourceLibrary.mirrorSystem.compiler.reporter.spanFromSpannable(_node));
+        _sourceLibrary._element.entryCompilationUnit.script,
+        _sourceLibrary.mirrorSystem.compiler.reporter.spanFromSpannable(_node));
   }
 
   List<CombinatorMirror> get combinators {
@@ -138,8 +136,8 @@
           for (Identifier identifier in combinator.identifiers.nodes) {
             identifiers.add(identifier.source);
           }
-          _combinators.add(new Dart2JsCombinatorMirror(
-              identifiers, isShow: combinator.isShow));
+          _combinators.add(new Dart2JsCombinatorMirror(identifiers,
+              isShow: combinator.isShow));
         }
       }
     }
diff --git a/pkg/compiler/lib/src/mirrors/dart2js_member_mirrors.dart b/pkg/compiler/lib/src/mirrors/dart2js_member_mirrors.dart
index bd510c2..88ffbf9 100644
--- a/pkg/compiler/lib/src/mirrors/dart2js_member_mirrors.dart
+++ b/pkg/compiler/lib/src/mirrors/dart2js_member_mirrors.dart
@@ -9,14 +9,12 @@
 //------------------------------------------------------------------------------
 
 abstract class Dart2JsMemberMirror extends Dart2JsElementMirror {
-
   Dart2JsMemberMirror(Dart2JsMirrorSystem system, AstElement element)
       : super(system, element);
 
   bool get isStatic => false;
 }
 
-
 class Dart2JsMethodKind {
   static const Dart2JsMethodKind REGULAR = const Dart2JsMethodKind("regular");
   static const Dart2JsMethodKind GENERATIVE =
@@ -36,21 +34,21 @@
   String toString() => text;
 }
 
-class Dart2JsMethodMirror extends Dart2JsMemberMirror
-    implements MethodMirror {
+class Dart2JsMethodMirror extends Dart2JsMemberMirror implements MethodMirror {
   final Dart2JsDeclarationMirror owner;
   final String _simpleNameString;
   final Dart2JsMethodKind _kind;
 
-  Dart2JsMethodMirror._internal(Dart2JsDeclarationMirror owner,
+  Dart2JsMethodMirror._internal(
+      Dart2JsDeclarationMirror owner,
       FunctionElement function,
       String this._simpleNameString,
       Dart2JsMethodKind this._kind)
       : this.owner = owner,
         super(owner.mirrorSystem, function);
 
-  factory Dart2JsMethodMirror(Dart2JsDeclarationMirror owner,
-                              FunctionElement function) {
+  factory Dart2JsMethodMirror(
+      Dart2JsDeclarationMirror owner, FunctionElement function) {
     String simpleName = function.name;
     // TODO(ahe): This method should not be calling
     // Elements.operatorNameToIdentifier.
@@ -75,8 +73,7 @@
     } else {
       kind = Dart2JsMethodKind.REGULAR;
     }
-    return new Dart2JsMethodMirror._internal(owner, function,
-        simpleName, kind);
+    return new Dart2JsMethodMirror._internal(owner, function, simpleName, kind);
   }
 
   FunctionElement get _function => _element;
@@ -86,21 +83,22 @@
   // TODO(johnniwinther): This seems stale and broken.
   Symbol get constructorName => isConstructor ? simpleName : const Symbol('');
 
-  bool get isConstructor
-      => isGenerativeConstructor || isConstConstructor ||
-         isFactoryConstructor || isRedirectingConstructor;
+  bool get isConstructor =>
+      isGenerativeConstructor ||
+      isConstConstructor ||
+      isFactoryConstructor ||
+      isRedirectingConstructor;
 
   bool get isSynthetic => false;
 
   bool get isStatic => _function.isStatic;
 
   List<ParameterMirror> get parameters {
-    return _parametersFromFunctionSignature(this,
-        _function.functionSignature);
+    return _parametersFromFunctionSignature(this, _function.functionSignature);
   }
 
-  TypeMirror get returnType => owner._getTypeMirror(
-      _function.functionSignature.type.returnType);
+  TypeMirror get returnType =>
+      owner._getTypeMirror(_function.functionSignature.type.returnType);
 
   bool get isAbstract => _function.isAbstract;
 
@@ -140,8 +138,7 @@
   final Dart2JsDeclarationMirror owner;
   VariableElement _variable;
 
-  Dart2JsFieldMirror(Dart2JsDeclarationMirror owner,
-                     VariableElement variable)
+  Dart2JsFieldMirror(Dart2JsDeclarationMirror owner, VariableElement variable)
       : this.owner = owner,
         this._variable = variable,
         super(owner.mirrorSystem, variable);
@@ -155,8 +152,6 @@
   bool get isConst => _variable.isConst;
 
   TypeMirror get type => owner._getTypeMirror(_variable.type);
-
-
 }
 
 class Dart2JsParameterMirror extends Dart2JsMemberMirror
@@ -165,10 +160,9 @@
   final bool isOptional;
   final bool isNamed;
 
-  factory Dart2JsParameterMirror(Dart2JsDeclarationMirror owner,
-                                 FormalElement element,
-                                 {bool isOptional: false,
-                                  bool isNamed: false}) {
+  factory Dart2JsParameterMirror(
+      Dart2JsDeclarationMirror owner, FormalElement element,
+      {bool isOptional: false, bool isNamed: false}) {
     if (element is InitializingFormalElement) {
       return new Dart2JsFieldParameterMirror(
           owner, element, isOptional, isNamed);
@@ -179,11 +173,9 @@
   }
 
   Dart2JsParameterMirror._normal(Dart2JsDeclarationMirror owner,
-                                 FormalElement element,
-                                 this.isOptional,
-                                 this.isNamed)
-    : this.owner = owner,
-      super(owner.mirrorSystem, element);
+      FormalElement element, this.isOptional, this.isNamed)
+      : this.owner = owner,
+        super(owner.mirrorSystem, element);
 
   FormalElement get _element => super._element;
 
@@ -198,13 +190,13 @@
       // TODO(johnniwinther): Get the constant from the [TreeElements]
       // associated with the enclosing method.
       ParameterElement parameter = _element;
-      ConstantExpression constant = mirrorSystem.compiler.constants
-          .getConstantForVariable(parameter);
+      ConstantExpression constant =
+          mirrorSystem.compiler.constants.getConstantForVariable(parameter);
       assert(invariant(parameter, constant != null,
           message: "Missing constant for parameter "
-                   "$parameter with default value."));
-      return _convertConstantToInstanceMirror(mirrorSystem,
-          constant, mirrorSystem.compiler.constants.getConstantValue(constant));
+              "$parameter with default value."));
+      return _convertConstantToInstanceMirror(mirrorSystem, constant,
+          mirrorSystem.compiler.constants.getConstantValue(constant));
     }
     return null;
   }
@@ -223,17 +215,14 @@
 }
 
 class Dart2JsFieldParameterMirror extends Dart2JsParameterMirror {
-
   Dart2JsFieldParameterMirror(Dart2JsDeclarationMirror method,
-                              InitializingFormalElement element,
-                              bool isOptional,
-                              bool isNamed)
+      InitializingFormalElement element, bool isOptional, bool isNamed)
       : super._normal(method, element, isOptional, isNamed);
 
   InitializingFormalElement get _fieldParameterElement => _element;
 
   bool get isInitializingFormal => true;
 
-  VariableMirror get initializedField => new Dart2JsFieldMirror(
-      owner.owner, _fieldParameterElement.fieldElement);
+  VariableMirror get initializedField =>
+      new Dart2JsFieldMirror(owner.owner, _fieldParameterElement.fieldElement);
 }
diff --git a/pkg/compiler/lib/src/mirrors/dart2js_mirrors.dart b/pkg/compiler/lib/src/mirrors/dart2js_mirrors.dart
index 0e64cc3..745712a 100644
--- a/pkg/compiler/lib/src/mirrors/dart2js_mirrors.dart
+++ b/pkg/compiler/lib/src/mirrors/dart2js_mirrors.dart
@@ -7,23 +7,18 @@
 import 'dart:collection' show UnmodifiableListView, UnmodifiableMapView;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../constants/expressions.dart';
 import '../constants/values.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    LibraryElementX;
-import '../resolution/scope.dart' show
-    Scope;
+import '../elements/modelx.dart' show LibraryElementX;
+import '../resolution/scope.dart' show Scope;
 import '../script.dart';
 import '../tokens/token.dart';
 import '../tokens/token_constants.dart' as Tokens;
 import '../tree/tree.dart';
-import '../util/util.dart'
-    show Link,
-         LinkBuilder;
+import '../util/util.dart' show Link, LinkBuilder;
 import '../util/characters.dart' show $CR, $LF;
 
 import 'source_mirrors.dart';
@@ -48,17 +43,16 @@
 }
 
 List<ParameterMirror> _parametersFromFunctionSignature(
-    Dart2JsDeclarationMirror owner,
-    FunctionSignature signature) {
+    Dart2JsDeclarationMirror owner, FunctionSignature signature) {
   var parameters = <ParameterMirror>[];
   signature.requiredParameters.forEach((FormalElement parameter) {
-    parameters.add(new Dart2JsParameterMirror(
-        owner, parameter, isOptional: false, isNamed: false));
+    parameters.add(new Dart2JsParameterMirror(owner, parameter,
+        isOptional: false, isNamed: false));
   });
   bool isNamed = signature.optionalParametersAreNamed;
   signature.optionalParameters.forEach((FormalElement parameter) {
-    parameters.add(new Dart2JsParameterMirror(
-        owner, parameter, isOptional: true, isNamed: isNamed));
+    parameters.add(new Dart2JsParameterMirror(owner, parameter,
+        isOptional: true, isNamed: isNamed));
   });
   return parameters;
 }
@@ -82,7 +76,6 @@
 
 abstract class Dart2JsDeclarationMirror extends Dart2JsMirror
     implements DeclarationSourceMirror {
-
   bool get isTopLevel => owner != null && owner is LibraryMirror;
 
   bool get isPrivate => _isPrivate(_simpleNameString);
@@ -130,8 +123,8 @@
       }
       return members;
     }
-    mirrorSystem.compiler.reporter.internalError(element,
-        "Unexpected member type $element ${element.kind}.");
+    mirrorSystem.compiler.reporter.internalError(
+        element, "Unexpected member type $element ${element.kind}.");
     return null;
   }
 }
@@ -142,8 +135,8 @@
   List<InstanceMirror> _metadata;
 
   Dart2JsElementMirror(this.mirrorSystem, this._element) {
-    assert (mirrorSystem != null);
-    assert (_element != null);
+    assert(mirrorSystem != null);
+    assert(_element != null);
   }
 
   String get _simpleNameString => _element.name;
@@ -203,8 +196,8 @@
       span = new SourceSpan(script.resourceUri, 0, 0);
     } else {
       Token endToken = getEndToken();
-      span = new SourceSpan.fromTokens(
-          script.resourceUri, beginToken, endToken);
+      span =
+          new SourceSpan.fromTokens(script.resourceUri, beginToken, endToken);
     }
     return new Dart2JsSourceLocation(script, span);
   }
@@ -213,8 +206,8 @@
 
   void _appendCommentTokens(Token commentToken) {
     while (commentToken != null && commentToken.kind == Tokens.COMMENT_TOKEN) {
-      _metadata.add(new Dart2JsCommentInstanceMirror(
-          mirrorSystem, commentToken.value));
+      _metadata.add(
+          new Dart2JsCommentInstanceMirror(mirrorSystem, commentToken.value));
       commentToken = commentToken.next;
     }
   }
@@ -227,9 +220,10 @@
             mirrorSystem.compiler.commentMap[metadata.beginToken]);
         metadata.ensureResolved(mirrorSystem.compiler.resolution);
         _metadata.add(_convertConstantToInstanceMirror(
-            mirrorSystem, metadata.constant,
-            mirrorSystem.compiler.constants.getConstantValue(
-                metadata.constant)));
+            mirrorSystem,
+            metadata.constant,
+            mirrorSystem.compiler.constants
+                .getConstantValue(metadata.constant)));
       }
       _appendCommentTokens(mirrorSystem.compiler.commentMap[getBeginToken()]);
     }
@@ -245,7 +239,7 @@
     if (index != -1) {
       // Lookup [: prefix.id :].
       String prefix = name.substring(0, index);
-      String id = name.substring(index+1);
+      String id = name.substring(index + 1);
       result = scope.lookup(prefix);
       if (result != null && result.isPrefix) {
         PrefixElement prefix = result;
@@ -265,8 +259,7 @@
     if (identical(this, other)) return true;
     if (other == null) return false;
     if (other is! Dart2JsElementMirror) return false;
-    return _element == other._element &&
-           owner == other.owner;
+    return _element == other._element && owner == other.owner;
   }
 
   int get hashCode {
@@ -314,11 +307,9 @@
 
   Dart2JsMirrorSystem get mirrorSystem => this;
 
-  TypeMirror get dynamicType =>
-      _convertTypeToTypeMirror(const DynamicType());
+  TypeMirror get dynamicType => _convertTypeToTypeMirror(const DynamicType());
 
-  TypeMirror get voidType =>
-      _convertTypeToTypeMirror(const VoidType());
+  TypeMirror get voidType => _convertTypeToTypeMirror(const VoidType());
 
   TypeMirror _convertTypeToTypeMirror(DartType type) {
     assert(type != null);
@@ -343,8 +334,8 @@
         return new Dart2JsTypedefMirror(this, type);
       }
     }
-    compiler.reporter.internalError(type.element,
-        "Unexpected type $type of kind ${type.kind}.");
+    compiler.reporter.internalError(
+        type.element, "Unexpected type $type of kind ${type.kind}.");
     return null;
   }
 
@@ -367,10 +358,10 @@
       var declarations = <Symbol, DeclarationMirror>{};
       _forEachElement((Element element) {
         for (DeclarationMirror mirror in _getDeclarationMirrors(element)) {
-          assert(invariant(_element,
-              !declarations.containsKey(mirror.simpleName),
-              message: "Declaration name '${nameOf(mirror)}' "
-                       "is not unique in $_element."));
+          assert(
+              invariant(_element, !declarations.containsKey(mirror.simpleName),
+                  message: "Declaration name '${nameOf(mirror)}' "
+                      "is not unique in $_element."));
           declarations[mirror.simpleName] = mirror;
         }
       });
@@ -397,8 +388,8 @@
  * If [element] is an [AbstractFieldElement] the mirror for its getter is
  * returned or, if not present, the mirror for its setter.
  */
-DeclarationMirror _convertElementToDeclarationMirror(Dart2JsMirrorSystem system,
-                                                     Element element) {
+DeclarationMirror _convertElementToDeclarationMirror(
+    Dart2JsMirrorSystem system, Element element) {
   if (element.isTypeVariable) {
     TypeVariableElement typeVariable = element;
     return new Dart2JsTypeVariableMirror(system, typeVariable.type);
@@ -421,8 +412,8 @@
     Dart2JsMethodMirror method = _convertElementMethodToMethodMirror(
         container, element.outermostEnclosingMemberOrTopLevel);
     // TODO(johnniwinther): Find the right info for [isOptional] and [isNamed].
-    return new Dart2JsParameterMirror(
-        method, element, isOptional: false, isNamed: false);
+    return new Dart2JsParameterMirror(method, element,
+        isOptional: false, isNamed: false);
   }
   Iterable<DeclarationMirror> members =
       container._getDeclarationMirrors(element);
@@ -462,8 +453,8 @@
 class BackDoor {
   /// Return the compilation units comprising [library].
   static List<Mirror> compilationUnitsOf(Dart2JsLibraryMirror library) {
-    return library._element.compilationUnits.mapToList(
-        (cu) => new Dart2JsCompilationUnitMirror(cu, library));
+    return library._element.compilationUnits
+        .mapToList((cu) => new Dart2JsCompilationUnitMirror(cu, library));
   }
 
   static Iterable<ConstantExpression> metadataSyntaxOf(
@@ -477,7 +468,7 @@
   }
 
   static ConstantExpression defaultValueSyntaxOf(
-        Dart2JsParameterMirror parameter) {
+      Dart2JsParameterMirror parameter) {
     if (!parameter.hasDefaultValue) return null;
     ParameterElement parameterElement = parameter._element;
     Compiler compiler = parameter.mirrorSystem.compiler;
diff --git a/pkg/compiler/lib/src/mirrors/dart2js_type_mirrors.dart b/pkg/compiler/lib/src/mirrors/dart2js_type_mirrors.dart
index b2a2ea5..6bf227c 100644
--- a/pkg/compiler/lib/src/mirrors/dart2js_type_mirrors.dart
+++ b/pkg/compiler/lib/src/mirrors/dart2js_type_mirrors.dart
@@ -9,9 +9,9 @@
   Type get reflectedType {
     throw new UnsupportedError("ClassMirror.reflectedType is not supported.");
   }
-  InstanceMirror newInstance(Symbol constructorName,
-                             List positionalArguments,
-                             [Map<Symbol, dynamic> namedArguments]) {
+
+  InstanceMirror newInstance(Symbol constructorName, List positionalArguments,
+      [Map<Symbol, dynamic> namedArguments]) {
     throw new UnsupportedError("ClassMirror.newInstance is not supported.");
   }
 }
@@ -64,19 +64,17 @@
   }
 
   String toString() => _type.toString();
-
 }
 
 /// Base implementations for mirrors on element based types.
-abstract class Dart2JsTypeElementMirror
-    extends Dart2JsElementMirror
+abstract class Dart2JsTypeElementMirror extends Dart2JsElementMirror
     with Dart2JsTypeMirror
     implements TypeSourceMirror {
   final DartType _type;
 
   Dart2JsTypeElementMirror(Dart2JsMirrorSystem system, DartType type)
-    : super(system, type.element),
-      this._type = type;
+      : super(system, type.element),
+        this._type = type;
 
   Dart2JsLibraryMirror get library {
     return mirrorSystem._getLibrary(_type.element.library);
@@ -84,7 +82,6 @@
 }
 
 abstract class DeclarationMixin implements TypeMirror {
-
   bool get isOriginalDeclaration => true;
 
   TypeMirror get originalDeclaration => this;
@@ -124,8 +121,8 @@
     if (_typeVariables == null) {
       _typeVariables = <TypeVariableMirror>[];
       for (TypeVariableType typeVariable in _element.typeVariables) {
-        _typeVariables.add(
-            new Dart2JsTypeVariableMirror(mirrorSystem, typeVariable));
+        _typeVariables
+            .add(new Dart2JsTypeVariableMirror(mirrorSystem, typeVariable));
       }
     }
     return _typeVariables;
@@ -152,8 +149,8 @@
     if (newTypeArguments.isEmpty) return owner._getTypeMirror(_type.asRaw());
     if (newTypeArguments.length != typeVariables.length) {
       throw new ArgumentError('Cannot create generic instantiation of $_type '
-                              'with ${newTypeArguments.length} arguments, '
-                              'expect ${typeVariables.length} arguments.');
+          'with ${newTypeArguments.length} arguments, '
+          'expect ${typeVariables.length} arguments.');
     }
     List<DartType> builder = <DartType>[];
     for (TypeSourceMirror newTypeArgument in newTypeArguments) {
@@ -163,8 +160,7 @@
       if (newTypeArgument is Dart2JsTypeMirror) {
         builder.add(newTypeArgument._type);
       } else {
-        throw new UnsupportedError(
-            'Cannot create instantiation using a type '
+        throw new UnsupportedError('Cannot create instantiation using a type '
             'mirror from a different mirrorSystem implementation.');
       }
     }
@@ -172,19 +168,18 @@
   }
 }
 
-class Dart2JsInterfaceTypeMirror
-    extends Dart2JsGenericTypeMirror
+class Dart2JsInterfaceTypeMirror extends Dart2JsGenericTypeMirror
     with ObjectMirrorMixin, ClassMirrorMixin, ContainerMixin
     implements ClassMirror {
-  Dart2JsInterfaceTypeMirror(Dart2JsMirrorSystem system,
-                             InterfaceType interfaceType)
+  Dart2JsInterfaceTypeMirror(
+      Dart2JsMirrorSystem system, InterfaceType interfaceType)
       : super(system, interfaceType);
 
   ClassElement get _element => super._element;
 
   InterfaceType get _type => super._type;
 
-  bool get isNameSynthetic  {
+  bool get isNameSynthetic {
     if (_element.isMixinApplication) {
       MixinApplicationElement mixinApplication = _element;
       return mixinApplication.isUnnamedMixinApplication;
@@ -206,7 +201,7 @@
   bool isSubclassOf(Mirror other) {
     if (other is Dart2JsTypeMirror) {
       return other._type.element != null &&
-             _element.isSubclassOf(other._type.element);
+          _element.isSubclassOf(other._type.element);
     } else {
       throw new ArgumentError(other);
     }
@@ -251,12 +246,9 @@
   String toString() => 'Mirror on interface type $_type';
 }
 
-class Dart2JsClassDeclarationMirror
-    extends Dart2JsInterfaceTypeMirror
+class Dart2JsClassDeclarationMirror extends Dart2JsInterfaceTypeMirror
     with DeclarationMixin {
-
-  Dart2JsClassDeclarationMirror(Dart2JsMirrorSystem system,
-                                InterfaceType type)
+  Dart2JsClassDeclarationMirror(Dart2JsMirrorSystem system, InterfaceType type)
       : super(system, type);
 
   bool isSubclassOf(ClassMirror other) {
@@ -273,8 +265,7 @@
   String toString() => 'Mirror on class ${_type.name}';
 }
 
-class Dart2JsTypedefMirror
-    extends Dart2JsGenericTypeMirror
+class Dart2JsTypedefMirror extends Dart2JsGenericTypeMirror
     implements TypedefMirror {
   final Dart2JsLibraryMirror _library;
   List<TypeVariableMirror> _typeVariables;
@@ -284,8 +275,8 @@
       : this._library = system._getLibrary(_typedef.element.library),
         super(system, _typedef);
 
-  Dart2JsTypedefMirror.fromLibrary(Dart2JsLibraryMirror library,
-                                   TypedefType _typedef)
+  Dart2JsTypedefMirror.fromLibrary(
+      Dart2JsLibraryMirror library, TypedefType _typedef)
       : this._library = library,
         super(library.mirrorSystem, _typedef);
 
@@ -311,11 +302,9 @@
   String toString() => 'Mirror on typedef $_type';
 }
 
-class Dart2JsTypedefDeclarationMirror
-    extends Dart2JsTypedefMirror
+class Dart2JsTypedefDeclarationMirror extends Dart2JsTypedefMirror
     with DeclarationMixin {
-  Dart2JsTypedefDeclarationMirror(Dart2JsMirrorSystem system,
-                                  TypedefType type)
+  Dart2JsTypedefDeclarationMirror(Dart2JsMirrorSystem system, TypedefType type)
       : super(system, type);
 
   String toString() => 'Mirror on typedef ${_type.name}';
@@ -325,16 +314,16 @@
     implements TypeVariableMirror {
   Dart2JsDeclarationMirror _owner;
 
-  Dart2JsTypeVariableMirror(Dart2JsMirrorSystem system,
-                            TypeVariableType typeVariableType)
-    : super(system, typeVariableType);
+  Dart2JsTypeVariableMirror(
+      Dart2JsMirrorSystem system, TypeVariableType typeVariableType)
+      : super(system, typeVariableType);
 
   TypeVariableType get _type => super._type;
 
   Dart2JsDeclarationMirror get owner {
     if (_owner == null) {
-      _owner = mirrorSystem._getTypeDeclarationMirror(
-          _type.element.typeDeclaration);
+      _owner =
+          mirrorSystem._getTypeDeclarationMirror(_type.element.typeDeclaration);
     }
     return _owner;
   }
@@ -364,10 +353,10 @@
     implements FunctionTypeMirror {
   List<ParameterMirror> _parameters;
 
-  Dart2JsFunctionTypeMirror(Dart2JsMirrorSystem system,
-                            FunctionType functionType)
+  Dart2JsFunctionTypeMirror(
+      Dart2JsMirrorSystem system, FunctionType functionType)
       : super(system, functionType) {
-    assert (functionType.element != null);
+    assert(functionType.element != null);
   }
 
   FunctionType get _type => super._type;
@@ -392,12 +381,10 @@
   bool get isFunction => true;
 
   MethodMirror get callMethod => _convertElementMethodToMethodMirror(
-      mirrorSystem._getLibrary(_type.element.library),
-      _type.element);
+      mirrorSystem._getLibrary(_type.element.library), _type.element);
 
-  ClassMirror get originalDeclaration =>
-      mirrorSystem._getTypeDeclarationMirror(
-          mirrorSystem.compiler.coreClasses.functionClass);
+  ClassMirror get originalDeclaration => mirrorSystem._getTypeDeclarationMirror(
+      mirrorSystem.compiler.coreClasses.functionClass);
 
   // TODO(johnniwinther): Substitute type arguments for type variables.
   ClassMirror get superclass => originalDeclaration.superclass;
@@ -441,8 +428,8 @@
   final Dart2JsMirrorSystem mirrorSystem;
   final DartType _type;
 
-  Dart2JsBuiltinTypeMirror(Dart2JsMirrorSystem this.mirrorSystem,
-                           DartType this._type);
+  Dart2JsBuiltinTypeMirror(
+      Dart2JsMirrorSystem this.mirrorSystem, DartType this._type);
 
   Symbol get qualifiedName => simpleName;
 
diff --git a/pkg/compiler/lib/src/mirrors/mirrors_util.dart b/pkg/compiler/lib/src/mirrors/mirrors_util.dart
index d1d4f5f2..52eb0a9 100644
--- a/pkg/compiler/lib/src/mirrors/mirrors_util.dart
+++ b/pkg/compiler/lib/src/mirrors/mirrors_util.dart
@@ -42,7 +42,7 @@
     String simpleName = nameOf(mirror);
     if (mirror.isSetter) {
       // Remove trailing '='.
-      return simpleName.substring(0, simpleName.length-1);
+      return simpleName.substring(0, simpleName.length - 1);
     } else if (mirror.isOperator) {
       return 'operator ${operatorName(mirror)}';
     } else if (mirror.isConstructor) {
@@ -77,8 +77,8 @@
  * Returns an iterable over the type declarations directly inheriting from
  * the declaration of [type] within [mirrors].
  */
-Iterable<ClassMirror> computeSubdeclarations(MirrorSystem mirrors,
-                                             ClassMirror type) {
+Iterable<ClassMirror> computeSubdeclarations(
+    MirrorSystem mirrors, ClassMirror type) {
   type = type.originalDeclaration;
   var subtypes = <ClassMirror>[];
   mirrors.libraries.forEach((_, library) {
@@ -174,22 +174,19 @@
 
 Iterable<DeclarationMirror> membersOf(
     Map<Symbol, DeclarationMirror> declarations) {
-  return declarations.values.where(
-      (mirror) => mirror is MethodMirror || mirror is VariableMirror);
+  return declarations.values
+      .where((mirror) => mirror is MethodMirror || mirror is VariableMirror);
 }
 
-Iterable<TypeMirror> classesOf(
-    Map<Symbol, DeclarationMirror> declarations) {
+Iterable<TypeMirror> classesOf(Map<Symbol, DeclarationMirror> declarations) {
   return new _TypeOfIterable<ClassMirror>(declarations.values);
 }
 
-Iterable<TypeMirror> typesOf(
-    Map<Symbol, DeclarationMirror> declarations) {
+Iterable<TypeMirror> typesOf(Map<Symbol, DeclarationMirror> declarations) {
   return new _TypeOfIterable<TypeMirror>(declarations.values);
 }
 
-Iterable<MethodMirror> methodsOf(
-    Map<Symbol, DeclarationMirror> declarations) {
+Iterable<MethodMirror> methodsOf(Map<Symbol, DeclarationMirror> declarations) {
   return anyMethodOf(declarations).where((mirror) => mirror.isRegularMethod);
 }
 
@@ -198,13 +195,11 @@
   return anyMethodOf(declarations).where((mirror) => mirror.isConstructor);
 }
 
-Iterable<MethodMirror> settersOf(
-    Map<Symbol, DeclarationMirror> declarations) {
+Iterable<MethodMirror> settersOf(Map<Symbol, DeclarationMirror> declarations) {
   return anyMethodOf(declarations).where((mirror) => mirror.isSetter);
 }
 
-Iterable<MethodMirror> gettersOf(
-    Map<Symbol, DeclarationMirror> declarations) {
+Iterable<MethodMirror> gettersOf(Map<Symbol, DeclarationMirror> declarations) {
   return anyMethodOf(declarations).where((mirror) => mirror.isGetter);
 }
 
@@ -234,7 +229,7 @@
   _TypeOfIterator(this._source);
 
   bool moveNext() {
-    while(_source.moveNext()) {
+    while (_source.moveNext()) {
       if (_source.current is T) {
         return true;
       }
@@ -350,7 +345,7 @@
     comment = match[1];
     var sb = new StringBuffer();
     List<String> lines = comment.split('\n');
-    for (int index = 0 ; index < lines.length ; index++) {
+    for (int index = 0; index < lines.length; index++) {
       String line = lines[index];
       if (index == 0) {
         sb.write(line); // Add the first line unprocessed.
@@ -360,7 +355,7 @@
       match = _multiLineCommentLineStart.firstMatch(line);
       if (match != null) {
         sb.write(match[1]);
-      } else if (index < lines.length-1 || !line.trim().isEmpty) {
+      } else if (index < lines.length - 1 || !line.trim().isEmpty) {
         // Do not add the last line if it only contains white space.
         // This interprets cases like
         //     /*
@@ -388,8 +383,8 @@
  * variable of [:Iterable:] and 'col.Iterable.contains.element' finds the
  * [:element:] parameter of the [:contains:] method on [:Iterable:].
  */
-DeclarationMirror lookupQualifiedInScope(DeclarationSourceMirror declaration,
-                                         String name) {
+DeclarationMirror lookupQualifiedInScope(
+    DeclarationSourceMirror declaration, String name) {
   // TODO(11653): Support lookup of constructors using the [:new Foo:]
   // syntax.
   int offset = 1;
@@ -419,11 +414,12 @@
     if (result != null) return result;
     // Try type variables.
     result = mirror.typeVariables.firstWhere(
-        (TypeVariableMirror v) => v.simpleName == id, orElse: () => null);
+        (TypeVariableMirror v) => v.simpleName == id,
+        orElse: () => null);
   } else if (mirror is MethodMirror) {
     result = mirror.parameters.firstWhere(
-        (ParameterMirror p) => p.simpleName == id, orElse: () => null);
+        (ParameterMirror p) => p.simpleName == id,
+        orElse: () => null);
   }
   return result;
-
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/mirrors/source_mirrors.dart b/pkg/compiler/lib/src/mirrors/source_mirrors.dart
index 14e6c13..6bf555c 100644
--- a/pkg/compiler/lib/src/mirrors/source_mirrors.dart
+++ b/pkg/compiler/lib/src/mirrors/source_mirrors.dart
@@ -118,8 +118,8 @@
 }
 
 /// A mirror on an import or export declaration.
-abstract class LibraryDependencySourceMirror
-    extends Mirror implements LibraryDependencyMirror {
+abstract class LibraryDependencySourceMirror extends Mirror
+    implements LibraryDependencyMirror {
   /// Is `true` if this dependency is an import.
   bool get isImport;
 
@@ -149,8 +149,8 @@
 }
 
 /// A mirror on a show/hide combinator declared on a library dependency.
-abstract class CombinatorSourceMirror
-    extends Mirror implements CombinatorMirror {
+abstract class CombinatorSourceMirror extends Mirror
+    implements CombinatorMirror {
   /// The list of identifiers on the combinator.
   List/*<String>*/ get identifiers;
 
diff --git a/pkg/compiler/lib/src/mirrors_used.dart b/pkg/compiler/lib/src/mirrors_used.dart
index 1928d10..15f7c6d 100644
--- a/pkg/compiler/lib/src/mirrors_used.dart
+++ b/pkg/compiler/lib/src/mirrors_used.dart
@@ -5,39 +5,30 @@
 library dart2js.mirrors_used;
 
 import 'common.dart';
-import 'common/tasks.dart' show
-    CompilerTask;
-import 'compile_time_constants.dart' show
-    ConstantCompiler;
-import 'compiler.dart' show
-    Compiler;
+import 'common/tasks.dart' show CompilerTask;
+import 'compile_time_constants.dart' show ConstantCompiler;
+import 'compiler.dart' show Compiler;
 import 'constants/expressions.dart';
-import 'constants/values.dart' show
-    ConstantValue,
-    ConstructedConstantValue,
-    ListConstantValue,
-    StringConstantValue,
-    TypeConstantValue;
-import 'dart_types.dart' show
-    DartType,
-    InterfaceType,
-    TypeKind;
-import 'elements/elements.dart' show
-    ClassElement,
-    Element,
-    ImportElement,
-    LibraryElement,
-    MetadataAnnotation,
-    ScopeContainerElement,
-    VariableElement;
-import 'resolution/tree_elements.dart' show
-    TreeElements;
-import 'tree/tree.dart' show
-    Import,
-    LibraryTag,
-    NamedArgument,
-    NewExpression,
-    Node;
+import 'constants/values.dart'
+    show
+        ConstantValue,
+        ConstructedConstantValue,
+        ListConstantValue,
+        StringConstantValue,
+        TypeConstantValue;
+import 'dart_types.dart' show DartType, InterfaceType, TypeKind;
+import 'elements/elements.dart'
+    show
+        ClassElement,
+        Element,
+        ImportElement,
+        LibraryElement,
+        MetadataAnnotation,
+        ScopeContainerElement,
+        VariableElement;
+import 'resolution/tree_elements.dart' show TreeElements;
+import 'tree/tree.dart'
+    show Import, LibraryTag, NamedArgument, NewExpression, Node;
 
 /**
  * Compiler task that analyzes MirrorsUsed annotations.
@@ -91,8 +82,7 @@
   Set<LibraryElement> librariesWithUsage;
   MirrorUsageAnalyzer analyzer;
 
-  MirrorUsageAnalyzerTask(Compiler compiler)
-      : super(compiler) {
+  MirrorUsageAnalyzerTask(Compiler compiler) : super(compiler) {
     analyzer = new MirrorUsageAnalyzer(compiler, this);
   }
 
@@ -117,9 +107,8 @@
   bool hasMirrorUsage(Element element) {
     LibraryElement library = element.library;
     // Internal libraries always have implicit mirror usage.
-    return library.isInternalLibrary
-        || (librariesWithUsage != null
-            && librariesWithUsage.contains(library));
+    return library.isInternalLibrary ||
+        (librariesWithUsage != null && librariesWithUsage.contains(library));
   }
 
   /// Call-back from the resolver to analyze MirorsUsed annotations. The result
@@ -130,14 +119,11 @@
       NamedArgument named = argument.asNamedArgument();
       if (named == null) continue;
       ConstantCompiler constantCompiler = compiler.resolver.constantCompiler;
-      ConstantValue value =
-          constantCompiler.getConstantValue(
-              constantCompiler.compileNode(named.expression, mapping));
+      ConstantValue value = constantCompiler.getConstantValue(
+          constantCompiler.compileNode(named.expression, mapping));
 
-      MirrorUsageBuilder builder =
-          new MirrorUsageBuilder(
-              analyzer, mapping.analyzedElement.library, named.expression,
-              value, mapping);
+      MirrorUsageBuilder builder = new MirrorUsageBuilder(analyzer,
+          mapping.analyzedElement.library, named.expression, value, mapping);
 
       if (named.name.source == 'symbols') {
         analyzer.cachedStrings[value] =
@@ -201,8 +187,7 @@
       if (library.isInternalLibrary) continue;
       for (ImportElement import in library.imports) {
         reporter.withCurrentElement(library, () {
-          List<MirrorUsage> usages =
-              mirrorsUsedOnLibraryTag(library, import);
+          List<MirrorUsage> usages = mirrorsUsedOnLibraryTag(library, import);
           if (usages != null) {
             List<MirrorUsage> existing = result[library];
             if (existing != null) {
@@ -242,8 +227,8 @@
         }
       }
     });
-    propagatedOverrides.forEach((LibraryElement overridden,
-                                 List<MirrorUsage> overriddenUsages) {
+    propagatedOverrides.forEach(
+        (LibraryElement overridden, List<MirrorUsage> overriddenUsages) {
       List<MirrorUsage> usages =
           usageMap.putIfAbsent(overridden, () => <MirrorUsage>[]);
       usages.addAll(overriddenUsages);
@@ -252,8 +237,8 @@
 
   /// Find @MirrorsUsed annotations on the given import [tag] in [library]. The
   /// annotations are represented as [MirrorUsage].
-  List<MirrorUsage> mirrorsUsedOnLibraryTag(LibraryElement library,
-                                            ImportElement import) {
+  List<MirrorUsage> mirrorsUsedOnLibraryTag(
+      LibraryElement library, ImportElement import) {
     LibraryElement importedLibrary = import.importedLibrary;
     if (importedLibrary != compiler.mirrorsLibrary) {
       return null;
@@ -296,8 +281,9 @@
     // TOOO(ahe): Should be an instance method on MirrorUsage.
     if (a.symbols == null && a.targets == null && a.metaTargets == null) {
       return b;
-    } else if (
-        b.symbols == null && b.targets == null && b.metaTargets == null) {
+    } else if (b.symbols == null &&
+        b.targets == null &&
+        b.metaTargets == null) {
       return a;
     }
     // TODO(ahe): Test the following cases.
@@ -326,15 +312,14 @@
   /// that was resolved during [MirrorUsageAnalyzerTask.validate].
   MirrorUsage buildUsage(ConstructedConstantValue constant) {
     Map<Element, ConstantValue> fields = constant.fields;
-    VariableElement symbolsField = compiler.mirrorsUsedClass.lookupLocalMember(
-        'symbols');
-    VariableElement targetsField = compiler.mirrorsUsedClass.lookupLocalMember(
-        'targets');
+    VariableElement symbolsField =
+        compiler.mirrorsUsedClass.lookupLocalMember('symbols');
+    VariableElement targetsField =
+        compiler.mirrorsUsedClass.lookupLocalMember('targets');
     VariableElement metaTargetsField =
-        compiler.mirrorsUsedClass.lookupLocalMember(
-            'metaTargets');
-    VariableElement overrideField = compiler.mirrorsUsedClass.lookupLocalMember(
-        'override');
+        compiler.mirrorsUsedClass.lookupLocalMember('metaTargets');
+    VariableElement overrideField =
+        compiler.mirrorsUsedClass.lookupLocalMember('override');
 
     return new MirrorUsage(
         cachedStrings[fields[symbolsField]],
@@ -354,14 +339,12 @@
   MirrorUsage(this.symbols, this.targets, this.metaTargets, this.override);
 
   String toString() {
-    return
-        'MirrorUsage('
+    return 'MirrorUsage('
         'symbols = $symbols, '
         'targets = $targets, '
         'metaTargets = $metaTargets, '
         'override = $override'
         ')';
-
   }
 }
 
@@ -372,12 +355,8 @@
   final ConstantValue constant;
   final TreeElements elements;
 
-  MirrorUsageBuilder(
-      this.analyzer,
-      this.enclosingLibrary,
-      this.spannable,
-      this.constant,
-      this.elements);
+  MirrorUsageBuilder(this.analyzer, this.enclosingLibrary, this.spannable,
+      this.constant, this.elements);
 
   Compiler get compiler => analyzer.compiler;
 
@@ -391,13 +370,13 @@
   /// [onlyStrings] is true, the returned list is a [:List<String>:] and any
   /// [Type] values are treated as an error (meaning that the value is ignored
   /// and a hint is emitted).
-  List convertConstantToUsageList(
-      ConstantValue constant, { bool onlyStrings: false }) {
+  List convertConstantToUsageList(ConstantValue constant,
+      {bool onlyStrings: false}) {
     if (constant.isNull) {
       return null;
     } else if (constant.isList) {
       ListConstantValue list = constant;
-      List result = onlyStrings ? <String> [] : [];
+      List result = onlyStrings ? <String>[] : [];
       for (ConstantValue entry in list.entries) {
         if (entry.isString) {
           StringConstantValue string = entry;
@@ -443,8 +422,8 @@
       ClassElement cls = type.element;
       cls.ensureResolved(compiler.resolution);
       for (DartType supertype in cls.allSupertypes) {
-        if (supertype.isInterfaceType
-            && !supertype.element.library.isInternalLibrary) {
+        if (supertype.isInterfaceType &&
+            !supertype.element.library.isInternalLibrary) {
           return interface.asInstanceOf(supertype.element);
         }
       }
@@ -482,8 +461,8 @@
               libraryNameCandiate = libraryName;
               break;
             } else if (string.startsWith('$libraryName.')) {
-              if (libraryNameCandiate == null
-                  || libraryNameCandiate.length < libraryName.length) {
+              if (libraryNameCandiate == null ||
+                  libraryNameCandiate.length < libraryName.length) {
                 // Found a better candiate
                 libraryCandiate = l;
                 libraryNameCandiate = libraryName;
@@ -495,8 +474,7 @@
         if (libraryNameCandiate == string) {
           e = libraryCandiate;
         } else if (libraryNameCandiate != null) {
-          e = resolveLocalExpression(
-              libraryCandiate,
+          e = resolveLocalExpression(libraryCandiate,
               string.substring(libraryNameCandiate.length + 1).split('.'));
         } else {
           e = resolveExpression(string);
@@ -532,12 +510,13 @@
         if (current.isLibrary) {
           LibraryElement library = current;
           reporter.reportHintMessage(
-              spannable, MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY,
-              {'name': identifiers[0],
-               'library': library.libraryOrScriptName});
+              spannable,
+              MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY,
+              {'name': identifiers[0], 'library': library.libraryOrScriptName});
         } else {
           reporter.reportHintMessage(
-              spannable, MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT,
+              spannable,
+              MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT,
               {'name': identifier, 'element': current.name});
         }
         return current;
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index d0fd80f..edca67c 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -3,23 +3,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../common/backend_api.dart' show
-    ForeignResolver;
-import '../common/resolution.dart' show
-    Parsing,
-    Resolution;
-import '../compiler.dart' show
-    Compiler;
+import '../common/backend_api.dart' show ForeignResolver;
+import '../common/resolution.dart' show Parsing, Resolution;
+import '../compiler.dart' show Compiler;
 import '../constants/values.dart';
-import '../core_types.dart' show
-    CoreTypes;
+import '../core_types.dart' show CoreTypes;
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../js/js.dart' as js;
 import '../js_backend/js_backend.dart';
 import '../tree/tree.dart';
-import '../universe/side_effects.dart' show
-    SideEffects;
+import '../universe/side_effects.dart' show SideEffects;
 import '../util/util.dart';
 
 import 'enqueue.dart';
@@ -109,7 +103,6 @@
  * `null` may be returned.
  */
 class NativeBehavior {
-
   /// [DartType]s or [SpecialType]s returned or yielded by the native element.
   final List typesReturned = [];
 
@@ -135,7 +128,6 @@
   static NativeBehavior get CHANGES_OTHER => NativeBehavior._makeChangesOther();
   static NativeBehavior get DEPENDS_OTHER => NativeBehavior._makeDependsOther();
 
-
   String toString() {
     return 'NativeBehavior('
         'returns: ${typesReturned}'
@@ -238,20 +230,17 @@
   /// latter is used for the type strings of the form '' and 'var'.
   /// [validTags] can be used to restrict which tags are accepted.
   static void processSpecString(
-      DiagnosticReporter reporter,
-      Spannable spannable,
-      String specString,
+      DiagnosticReporter reporter, Spannable spannable, String specString,
       {Iterable<String> validTags,
-       void setSideEffects(SideEffects newEffects),
-       void setThrows(NativeThrowBehavior throwKind),
-       void setIsAllocation(bool isAllocation),
-       void setUseGvn(bool useGvn),
-       dynamic resolveType(String typeString),
-       List typesReturned,
-       List typesInstantiated,
-       objectType, nullType}) {
-
-
+      void setSideEffects(SideEffects newEffects),
+      void setThrows(NativeThrowBehavior throwKind),
+      void setIsAllocation(bool isAllocation),
+      void setUseGvn(bool useGvn),
+      dynamic resolveType(String typeString),
+      List typesReturned,
+      List typesInstantiated,
+      objectType,
+      nullType}) {
     bool seenError = false;
 
     void reportError(String message) {
@@ -261,15 +250,21 @@
     }
 
     const List<String> knownTags = const [
-          'creates', 'returns', 'depends', 'effects',
-          'throws', 'gvn', 'new'];
+      'creates',
+      'returns',
+      'depends',
+      'effects',
+      'throws',
+      'gvn',
+      'new'
+    ];
 
     /// Resolve a type string of one of the three forms:
     /// *  'void' - in which case [onVoid] is called,
     /// *  '' or 'var' - in which case [onVar] is called,
     /// *  'T1|...|Tn' - in which case [onType] is called for each resolved Ti.
     void resolveTypesString(String typesString,
-                            {onVoid(), onVar(), onType(type)}) {
+        {onVoid(), onVar(), onType(type)}) {
       // Various things that are not in fact types.
       if (typesString == 'void') {
         if (onVoid != null) {
@@ -300,13 +295,11 @@
       return;
     }
 
-    List<String> specs = specString.split(';')
-        .map((s) => s.trim())
-        .toList();
-    if (specs.last == "") specs.removeLast();  // Allow separator to terminate.
+    List<String> specs = specString.split(';').map((s) => s.trim()).toList();
+    if (specs.last == "") specs.removeLast(); // Allow separator to terminate.
 
-    assert(validTags == null ||
-           (validTags.toSet()..removeAll(validTags)).isEmpty);
+    assert(
+        validTags == null || (validTags.toSet()..removeAll(validTags)).isEmpty);
     if (validTags == null) validTags = knownTags;
 
     Map<String, String> values = <String, String>{};
@@ -351,42 +344,38 @@
 
     String returns = values['returns'];
     if (returns != null) {
-      resolveTypesString(returns,
-        onVar: () {
-          typesReturned.add(objectType);
-          typesReturned.add(nullType);
-        },
-        onType: (type) {
-          typesReturned.add(type);
-        });
+      resolveTypesString(returns, onVar: () {
+        typesReturned.add(objectType);
+        typesReturned.add(nullType);
+      }, onType: (type) {
+        typesReturned.add(type);
+      });
     }
 
     String creates = values['creates'];
     if (creates != null) {
-      resolveTypesString(creates,
-        onVoid: () {
-          reportError("Invalid type string 'creates:$creates'");
-        },
-        onType: (type) {
-          typesInstantiated.add(type);
-        });
+      resolveTypesString(creates, onVoid: () {
+        reportError("Invalid type string 'creates:$creates'");
+      }, onType: (type) {
+        typesInstantiated.add(type);
+      });
     } else if (returns != null) {
-      resolveTypesString(returns,
-        onType: (type) {
-          typesInstantiated.add(type);
-        });
+      resolveTypesString(returns, onType: (type) {
+        typesInstantiated.add(type);
+      });
     }
 
     const throwsOption = const <String, NativeThrowBehavior>{
       'never': NativeThrowBehavior.NEVER,
       'null(1)': NativeThrowBehavior.MAY_THROW_ONLY_ON_FIRST_ARGUMENT_ACCESS,
       'may': NativeThrowBehavior.MAY,
-      'must': NativeThrowBehavior.MUST };
+      'must': NativeThrowBehavior.MUST
+    };
 
-    const boolOptions = const<String, bool>{'true': true, 'false': false};
+    const boolOptions = const <String, bool>{'true': true, 'false': false};
 
-    SideEffects sideEffects = processEffects(reportError,
-        values['effects'], values['depends']);
+    SideEffects sideEffects =
+        processEffects(reportError, values['effects'], values['depends']);
     NativeThrowBehavior throwsKind = tagValueLookup('throws', throwsOption);
     bool isAllocation = tagValueLookup('new', boolOptions);
     bool useGvn = tagValueLookup('gvn', boolOptions);
@@ -395,7 +384,7 @@
       reportError("'new' and 'gvn' are incompatible");
     }
 
-    if (seenError) return;  // Avoid callbacks.
+    if (seenError) return; // Avoid callbacks.
 
     // TODO(sra): Simplify [throwBehavior] using [sideEffects].
 
@@ -406,10 +395,7 @@
   }
 
   static SideEffects processEffects(
-      void reportError(String message),
-      String effects,
-      String depends) {
-
+      void reportError(String message), String effects, String depends) {
     if (effects == null && depends == null) return null;
 
     if (effects == null || depends == null) {
@@ -473,12 +459,8 @@
     return sideEffects;
   }
 
-  static NativeBehavior ofJsCall(
-      Send jsCall,
-      DiagnosticReporter reporter,
-      Parsing parsing,
-      CoreTypes coreTypes,
-      ForeignResolver resolver) {
+  static NativeBehavior ofJsCall(Send jsCall, DiagnosticReporter reporter,
+      Parsing parsing, CoreTypes coreTypes, ForeignResolver resolver) {
     // The first argument of a JS-call is a string encoding various attributes
     // of the code.
     //
@@ -489,25 +471,21 @@
 
     var argNodes = jsCall.arguments;
     if (argNodes.isEmpty || argNodes.tail.isEmpty) {
-      reporter.reportErrorMessage(
-          jsCall,
-          MessageKind.GENERIC,
+      reporter.reportErrorMessage(jsCall, MessageKind.GENERIC,
           {'text': "JS expression takes two or more arguments."});
       return behavior;
     }
 
     var specArgument = argNodes.head;
-    if (specArgument is !StringNode || specArgument.isInterpolation) {
-      reporter.reportErrorMessage(
-          specArgument, MessageKind.GENERIC,
+    if (specArgument is! StringNode || specArgument.isInterpolation) {
+      reporter.reportErrorMessage(specArgument, MessageKind.GENERIC,
           {'text': "JS first argument must be a string literal."});
       return behavior;
     }
 
     var codeArgument = argNodes.tail.head;
-    if (codeArgument is !StringNode || codeArgument.isInterpolation) {
-      reporter.reportErrorMessage(
-          codeArgument, MessageKind.GENERIC,
+    if (codeArgument is! StringNode || codeArgument.isInterpolation) {
+      reporter.reportErrorMessage(codeArgument, MessageKind.GENERIC,
           {'text': "JS second argument must be a string literal."});
       return behavior;
     }
@@ -546,10 +524,7 @@
       behavior.useGvn = useGvn;
     }
 
-    processSpecString(
-        reporter,
-        specArgument,
-        specString,
+    processSpecString(reporter, specArgument, specString,
         setSideEffects: setSideEffects,
         setThrows: setThrows,
         setIsAllocation: setIsAllocation,
@@ -580,7 +555,7 @@
       CoreTypes coreTypes,
       ForeignResolver resolver,
       {bool isBuiltin,
-       List<String> validTags}) {
+      List<String> validTags}) {
     // The first argument of a JS-embedded global call is a string encoding
     // the type of the code.
     //
@@ -631,10 +606,7 @@
       behavior.sideEffects.setTo(newEffects);
     }
 
-    processSpecString(
-        reporter,
-        jsBuiltinOrEmbeddedGlobalCall,
-        specString,
+    processSpecString(reporter, jsBuiltinOrEmbeddedGlobalCall, specString,
         validTags: validTags,
         resolveType: resolveType,
         setSideEffects: setSideEffects,
@@ -654,12 +626,7 @@
     behavior.sideEffects.setTo(new SideEffects());
 
     _fillNativeBehaviorOfBuiltinOrEmbeddedGlobal(
-        behavior,
-        jsBuiltinCall,
-        reporter,
-        parsing,
-        coreTypes,
-        resolver,
+        behavior, jsBuiltinCall, reporter, parsing, coreTypes, resolver,
         isBuiltin: true);
 
     return behavior;
@@ -679,19 +646,13 @@
     behavior.throwBehavior = NativeThrowBehavior.NEVER;
 
     _fillNativeBehaviorOfBuiltinOrEmbeddedGlobal(
-        behavior,
-        jsEmbeddedGlobalCall,
-        reporter,
-        parsing,
-        coreTypes,
-        resolver,
-        isBuiltin: false,
-        validTags: const ['returns', 'creates']);
+        behavior, jsEmbeddedGlobalCall, reporter, parsing, coreTypes, resolver,
+        isBuiltin: false, validTags: const ['returns', 'creates']);
 
     return behavior;
   }
 
-  static NativeBehavior ofMethod(FunctionElement method,  Compiler compiler) {
+  static NativeBehavior ofMethod(FunctionElement method, Compiler compiler) {
     FunctionType type = method.computeType(compiler.resolution);
     var behavior = new NativeBehavior();
     var returnType = type.returnType;
@@ -707,7 +668,8 @@
     // TODO(sigmund,sra): consider doing something better for numeric types.
     behavior.typesReturned.add(
         !isInterop || compiler.options.trustJSInteropTypeAnnotations
-            ? returnType : const DynamicType());
+            ? returnType
+            : const DynamicType());
     if (!type.returnType.isVoid) {
       // Declared types are nullable.
       behavior.typesReturned.add(compiler.coreTypes.nullType);
@@ -718,10 +680,10 @@
     // TODO(sra): Optional arguments are currently missing from the
     // DartType. This should be fixed so the following work-around can be
     // removed.
-    method.functionSignature.forEachOptionalParameter(
-        (ParameterElement parameter) {
-          behavior._escape(parameter.type, compiler.resolution);
-        });
+    method.functionSignature
+        .forEachOptionalParameter((ParameterElement parameter) {
+      behavior._escape(parameter.type, compiler.resolution);
+    });
 
     behavior._overrideWithAnnotations(method, compiler);
     return behavior;
@@ -735,7 +697,8 @@
     // TODO(sigmund,sra): consider doing something better for numeric types.
     behavior.typesReturned.add(
         !isInterop || compiler.options.trustJSInteropTypeAnnotations
-            ? type : const DynamicType());
+            ? type
+            : const DynamicType());
     // Declared types are nullable.
     behavior.typesReturned.add(resolution.coreTypes.nullType);
     behavior._capture(type, resolution,
@@ -767,16 +730,20 @@
     }
 
     NativeEnqueuer enqueuer = compiler.enqueuer.resolution.nativeEnqueuer;
-    var creates = _collect(element, compiler, enqueuer.annotationCreatesClass,
-                           lookup);
-    var returns = _collect(element, compiler, enqueuer.annotationReturnsClass,
-                           lookup);
+    var creates =
+        _collect(element, compiler, enqueuer.annotationCreatesClass, lookup);
+    var returns =
+        _collect(element, compiler, enqueuer.annotationReturnsClass, lookup);
 
     if (creates != null) {
-      typesInstantiated..clear()..addAll(creates);
+      typesInstantiated
+        ..clear()
+        ..addAll(creates);
     }
     if (returns != null) {
-      typesReturned..clear()..addAll(returns);
+      typesReturned
+        ..clear()
+        ..addAll(returns);
     }
   }
 
@@ -786,7 +753,7 @@
    * Returns `null` if no constraints.
    */
   static _collect(Element element, Compiler compiler, Element annotationClass,
-                  lookup(str)) {
+      lookup(str)) {
     DiagnosticReporter reporter = compiler.reporter;
     var types = null;
     for (MetadataAnnotation annotation in element.implementation.metadata) {
@@ -800,8 +767,8 @@
       Iterable<ConstantValue> fields = constructedObject.fields.values;
       // TODO(sra): Better validation of the constant.
       if (fields.length != 1 || !fields.single.isString) {
-        reporter.internalError(annotation,
-            'Annotations needs one string: ${annotation.node}');
+        reporter.internalError(
+            annotation, 'Annotations needs one string: ${annotation.node}');
       }
       StringConstantValue specStringConstant = fields.single;
       String specString = specStringConstant.toDartString().slowToString();
@@ -860,7 +827,8 @@
         }
 
         if (!compiler.options.trustJSInteropTypeAnnotations ||
-          type.isDynamic || type.isObject) {
+            type.isDynamic ||
+            type.isObject) {
           // By saying that only JS-interop types can be created, we prevent
           // pulling in every other native type (e.g. all of dart:html) when a
           // JS interop API returns dynamic or when we don't trust the type
@@ -881,10 +849,7 @@
   }
 
   static dynamic _parseType(
-      String typeString,
-      Parsing parsing,
-      lookup(name),
-      locationNodeOrElement) {
+      String typeString, Parsing parsing, lookup(name), locationNodeOrElement) {
     DiagnosticReporter reporter = parsing.reporter;
     if (typeString == '=Object') return SpecialType.JsObject;
     if (typeString == 'dynamic') {
@@ -895,21 +860,17 @@
 
     int index = typeString.indexOf('<');
     if (index < 1) {
-      reporter.reportErrorMessage(
-          _errorNode(locationNodeOrElement, parsing),
-          MessageKind.GENERIC,
-          {'text': "Type '$typeString' not found."});
+      reporter.reportErrorMessage(_errorNode(locationNodeOrElement, parsing),
+          MessageKind.GENERIC, {'text': "Type '$typeString' not found."});
       return const DynamicType();
     }
     type = lookup(typeString.substring(0, index));
-    if (type != null)  {
+    if (type != null) {
       // TODO(sra): Parse type parameters.
       return type;
     }
-    reporter.reportErrorMessage(
-        _errorNode(locationNodeOrElement, parsing),
-        MessageKind.GENERIC,
-        {'text': "Type '$typeString' not found."});
+    reporter.reportErrorMessage(_errorNode(locationNodeOrElement, parsing),
+        MessageKind.GENERIC, {'text': "Type '$typeString' not found."});
     return const DynamicType();
   }
 
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
index 0f5b985..03f3fc2 100644
--- a/pkg/compiler/lib/src/native/enqueue.dart
+++ b/pkg/compiler/lib/src/native/enqueue.dart
@@ -5,40 +5,22 @@
 import 'dart:collection' show Queue;
 
 import '../common.dart';
-import '../common/backend_api.dart' show
-    ForeignResolver;
-import '../common/registry.dart' show
-    Registry;
-import '../common/resolution.dart' show
-    Parsing,
-    Resolution;
-import '../compiler.dart' show
-    Compiler;
+import '../common/backend_api.dart' show ForeignResolver;
+import '../common/registry.dart' show Registry;
+import '../common/resolution.dart' show Parsing, Resolution;
+import '../compiler.dart' show Compiler;
 import '../constants/values.dart';
-import '../core_types.dart' show
-    CoreTypes;
+import '../core_types.dart' show CoreTypes;
 import '../dart_types.dart';
-import '../enqueue.dart' show
-    Enqueuer,
-    ResolutionEnqueuer;
+import '../enqueue.dart' show Enqueuer, ResolutionEnqueuer;
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    BaseClassElementX,
-    ElementX,
-    FunctionElementX,
-    LibraryElementX;
-import '../js_backend/backend_helpers.dart' show
-    BackendHelpers;
+import '../elements/modelx.dart'
+    show BaseClassElementX, ElementX, FunctionElementX, LibraryElementX;
+import '../js_backend/backend_helpers.dart' show BackendHelpers;
 import '../js_backend/js_backend.dart';
-import '../js_emitter/js_emitter.dart' show
-    CodeEmitterTask,
-    NativeEmitter;
-import '../tokens/token.dart' show
-    BeginGroupToken,
-    Token;
-import '../tokens/token_constants.dart' as Tokens show
-    EOF_TOKEN,
-    STRING_TOKEN;
+import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter;
+import '../tokens/token.dart' show BeginGroupToken, Token;
+import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN, STRING_TOKEN;
 import '../tree/tree.dart';
 
 import 'behavior.dart';
@@ -82,7 +64,6 @@
   ClassElement get annotationJsNameClass => null;
 }
 
-
 abstract class NativeEnqueuerBase implements NativeEnqueuer {
   static final RegExp _identifier = new RegExp(r'^[a-zA-Z_$][a-zA-Z0-9_$]*$');
 
@@ -188,10 +169,8 @@
         if (element.isClass) {
           String extendsName = findExtendsNameOfClass(element);
           if (extendsName != null) {
-            Set<ClassElement> potentialSubclasses =
-                potentialExtends.putIfAbsent(
-                    extendsName,
-                    () => new Set<ClassElement>());
+            Set<ClassElement> potentialSubclasses = potentialExtends
+                .putIfAbsent(extendsName, () => new Set<ClassElement>());
             potentialSubclasses.add(element);
           }
         }
@@ -215,9 +194,9 @@
       if (nativeSuperclass != null) {
         nativeClassesAndSubclasses.add(element);
         if (!backend.isNative(element)) {
-          nonNativeSubclasses.putIfAbsent(nativeSuperclass,
-              () => new Set<ClassElement>())
-            .add(element);
+          nonNativeSubclasses
+              .putIfAbsent(nativeSuperclass, () => new Set<ClassElement>())
+              .add(element);
         }
         Set<ClassElement> potentialSubclasses = potentialExtends[element.name];
         if (potentialSubclasses != null) {
@@ -348,16 +327,16 @@
       Iterable<ConstantValue> fields = constructedObject.fields.values;
       // TODO(sra): Better validation of the constant.
       if (fields.length != 1 || fields.single is! StringConstantValue) {
-        reporter.internalError(annotation,
-            'Annotations needs one string: ${annotation.node}');
+        reporter.internalError(
+            annotation, 'Annotations needs one string: ${annotation.node}');
       }
       StringConstantValue specStringConstant = fields.single;
       String specString = specStringConstant.toDartString().slowToString();
       if (name == null) {
         name = specString;
       } else {
-        reporter.internalError(annotation,
-            'Too many JSName annotations: ${annotation.node}');
+        reporter.internalError(
+            annotation, 'Too many JSName annotations: ${annotation.node}');
       }
     }
     return name;
@@ -367,7 +346,9 @@
     assert(unusedClasses.contains(classElement));
     unusedClasses.remove(classElement);
     pendingClasses.add(classElement);
-    queue.add(() { processClass(classElement, cause); });
+    queue.add(() {
+      processClass(classElement, cause);
+    });
   }
 
   void flushQueue() {
@@ -382,7 +363,7 @@
   processClass(ClassElement classElement, cause) {
     // TODO(ahe): Fix this assertion to work in incremental compilation.
     assert(compiler.options.hasIncrementalSupport ||
-           !registeredClasses.contains(classElement));
+        !registeredClasses.contains(classElement));
 
     bool firstTime = registeredClasses.isEmpty;
     pendingClasses.remove(classElement);
@@ -469,12 +450,13 @@
       List<String> nativeNames =
           backend.nativeData.getNativeTagsOfClassRaw(element.enclosingClass);
       if (nativeNames.length != 1) {
-        reporter.internalError(element,
+        reporter.internalError(
+            element,
             'Unable to determine a native name for the enclosing class, '
             'options: $nativeNames');
       }
-      backend.nativeData.setNativeMemberName(
-          element, '${nativeNames[0]}.$name');
+      backend.nativeData
+          .setNativeMemberName(element, '${nativeNames[0]}.$name');
     } else {
       backend.nativeData.setNativeMemberName(element, name);
     }
@@ -537,16 +519,15 @@
         } else if (type == coreTypes.numType) {
           backend.registerInstantiatedType(
               coreTypes.doubleType, world, registry);
-          backend.registerInstantiatedType(
-              coreTypes.intType, world, registry);
+          backend.registerInstantiatedType(coreTypes.intType, world, registry);
         } else if (type == coreTypes.stringType) {
           backend.registerInstantiatedType(type, world, registry);
         } else if (type == coreTypes.nullType) {
           backend.registerInstantiatedType(type, world, registry);
         } else if (type == coreTypes.boolType) {
           backend.registerInstantiatedType(type, world, registry);
-        } else if (compiler.types.isSubtype(
-                      type, backend.listImplementation.rawType)) {
+        } else if (compiler.types
+            .isSubtype(type, backend.listImplementation.rawType)) {
           backend.registerInstantiatedType(type, world, registry);
         }
       }
@@ -564,9 +545,8 @@
     }
   }
 
-  enqueueUnusedClassesMatching(bool predicate(classElement),
-                               cause,
-                               [String reason]) {
+  enqueueUnusedClassesMatching(bool predicate(classElement), cause,
+      [String reason]) {
     Iterable matches = unusedClasses.where(predicate);
     matches.toList().forEach((c) => enqueueClass(c, cause));
   }
@@ -586,23 +566,20 @@
 
   addNativeExceptions() {
     enqueueUnusedClassesMatching((classElement) {
-        // TODO(sra): Annotate exception classes in dart:html.
-        String name = classElement.name;
-        if (name.contains('Exception')) return true;
-        if (name.contains('Error')) return true;
-        return false;
-      },
-      'native exception');
+      // TODO(sra): Annotate exception classes in dart:html.
+      String name = classElement.name;
+      if (name.contains('Exception')) return true;
+      if (name.contains('Error')) return true;
+      return false;
+    }, 'native exception');
   }
 }
 
-
 class NativeResolutionEnqueuer extends NativeEnqueuerBase {
-
   Map<String, ClassElement> tagOwner = new Map<String, ClassElement>();
 
   NativeResolutionEnqueuer(Enqueuer world, Compiler compiler)
-    : super(world, compiler, compiler.options.enableNativeLiveTypeAnalysis);
+      : super(world, compiler, compiler.options.enableNativeLiveTypeAnalysis);
 
   void processNativeClass(ClassElement classElement) {
     super.processNativeClass(classElement);
@@ -645,7 +622,6 @@
     nativeBehaviors[node] = behavior;
   }
 
-
   /**
    * Handles JS-embedded global calls, which can be an instantiation point for
    * types.
@@ -662,7 +638,6 @@
     nativeBehaviors[node] = behavior;
   }
 
-
   /**
    * Handles JS-compiler builtin calls, which can be an instantiation point for
    * types.
@@ -680,15 +655,13 @@
   }
 }
 
-
 class NativeCodegenEnqueuer extends NativeEnqueuerBase {
-
   final CodeEmitterTask emitter;
 
   final Set<ClassElement> doneAddSubtypes = new Set<ClassElement>();
 
   NativeCodegenEnqueuer(Enqueuer world, Compiler compiler, this.emitter)
-    : super(world, compiler, compiler.options.enableNativeLiveTypeAnalysis);
+      : super(world, compiler, compiler.options.enableNativeLiveTypeAnalysis);
 
   void processNativeClasses(Iterable<LibraryElement> libraries) {
     super.processNativeClasses(libraries);
@@ -720,9 +693,8 @@
     addSubtypes(cls.superclass, emitter);
 
     for (DartType type in cls.allSupertypes) {
-      List<Element> subtypes = emitter.subtypes.putIfAbsent(
-          type.element,
-          () => <ClassElement>[]);
+      List<Element> subtypes =
+          emitter.subtypes.putIfAbsent(type.element, () => <ClassElement>[]);
       subtypes.add(cls);
     }
 
@@ -735,9 +707,8 @@
       superclass = superclass.superclass;
     }
 
-    List<Element> directSubtypes = emitter.directSubtypes.putIfAbsent(
-        superclass,
-        () => <ClassElement>[]);
+    List<Element> directSubtypes =
+        emitter.directSubtypes.putIfAbsent(superclass, () => <ClassElement>[]);
     directSubtypes.add(cls);
   }
 
diff --git a/pkg/compiler/lib/src/native/js.dart b/pkg/compiler/lib/src/native/js.dart
index 9108b90..1251fe5 100644
--- a/pkg/compiler/lib/src/native/js.dart
+++ b/pkg/compiler/lib/src/native/js.dart
@@ -8,7 +8,6 @@
 import 'behavior.dart';
 
 class HasCapturedPlaceholders extends js.BaseVisitor {
-
   HasCapturedPlaceholders._();
 
   static bool check(js.Node node) {
@@ -113,7 +112,6 @@
   }
 }
 
-
 /// ThrowBehaviorVisitor generates a NativeThrowBehavior describing the
 /// exception behavior of a JavaScript expression.
 ///
@@ -128,7 +126,6 @@
 /// in the calling context.
 ///
 class ThrowBehaviorVisitor extends js.BaseVisitor<NativeThrowBehavior> {
-
   ThrowBehaviorVisitor();
 
   NativeThrowBehavior analyze(js.Node node) {
@@ -138,8 +135,8 @@
   // TODO(sra): Add [sequence] functionality to NativeThrowBehavior.
   /// Returns the combined behavior of sequential execution of code having
   /// behavior [first] followed by code having behavior [second].
-  static NativeThrowBehavior sequence(NativeThrowBehavior first,
-      NativeThrowBehavior second) {
+  static NativeThrowBehavior sequence(
+      NativeThrowBehavior first, NativeThrowBehavior second) {
     if (first == NativeThrowBehavior.MUST) return first;
     if (second == NativeThrowBehavior.MUST) return second;
     if (second == NativeThrowBehavior.NEVER) return first;
@@ -151,9 +148,9 @@
   // TODO(sra): Add [choice] functionality to NativeThrowBehavior.
   /// Returns the combined behavior of a choice between two paths with behaviors
   /// [first] and [second].
-  static NativeThrowBehavior choice(NativeThrowBehavior first,
-      NativeThrowBehavior second) {
-    if (first == second) return first;  // Both paths have same behaviour.
+  static NativeThrowBehavior choice(
+      NativeThrowBehavior first, NativeThrowBehavior second) {
+    if (first == second) return first; // Both paths have same behaviour.
     return NativeThrowBehavior.MAY;
   }
 
diff --git a/pkg/compiler/lib/src/native/native.dart b/pkg/compiler/lib/src/native/native.dart
index 5a1af7c..805196a 100644
--- a/pkg/compiler/lib/src/native/native.dart
+++ b/pkg/compiler/lib/src/native/native.dart
@@ -13,24 +13,23 @@
 export 'scanner.dart';
 export 'ssa.dart';
 
-bool maybeEnableNative(Compiler compiler,
-                       LibraryElement library) {
+bool maybeEnableNative(Compiler compiler, LibraryElement library) {
   String libraryName = library.canonicalUri.toString();
-  if (library.entryCompilationUnit.script.name.contains(
-          'sdk/tests/compiler/dart2js_native')
-      || library.entryCompilationUnit.script.name.contains(
-          'sdk/tests/compiler/dart2js_extra')
-      || libraryName == 'dart:async'
-      || libraryName == 'dart:html'
-      || libraryName == 'dart:html_common'
-      || libraryName == 'dart:indexed_db'
-      || libraryName == 'dart:js'
-      || libraryName == 'dart:svg'
-      || libraryName == 'dart:_native_typed_data'
-      || libraryName == 'dart:web_audio'
-      || libraryName == 'dart:web_gl'
-      || libraryName == 'dart:web_sql'
-      || compiler.options.allowNativeExtensions) {
+  if (library.entryCompilationUnit.script.name
+          .contains('sdk/tests/compiler/dart2js_native') ||
+      library.entryCompilationUnit.script.name
+          .contains('sdk/tests/compiler/dart2js_extra') ||
+      libraryName == 'dart:async' ||
+      libraryName == 'dart:html' ||
+      libraryName == 'dart:html_common' ||
+      libraryName == 'dart:indexed_db' ||
+      libraryName == 'dart:js' ||
+      libraryName == 'dart:svg' ||
+      libraryName == 'dart:_native_typed_data' ||
+      libraryName == 'dart:web_audio' ||
+      libraryName == 'dart:web_gl' ||
+      libraryName == 'dart:web_sql' ||
+      compiler.options.allowNativeExtensions) {
     return true;
   }
   return false;
diff --git a/pkg/compiler/lib/src/native/scanner.dart b/pkg/compiler/lib/src/native/scanner.dart
index c54b937..f402431 100644
--- a/pkg/compiler/lib/src/native/scanner.dart
+++ b/pkg/compiler/lib/src/native/scanner.dart
@@ -3,16 +3,10 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../parser/listener.dart' show
-    Listener;
-import '../parser/element_listener.dart' show
-    ElementListener;
-import '../tokens/token.dart' show
-    BeginGroupToken,
-    Token;
-import '../tokens/token_constants.dart' as Tokens show
-    EOF_TOKEN,
-    STRING_TOKEN;
+import '../parser/listener.dart' show Listener;
+import '../parser/element_listener.dart' show ElementListener;
+import '../tokens/token.dart' show BeginGroupToken, Token;
+import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN, STRING_TOKEN;
 
 void checkAllowedLibrary(ElementListener listener, Token token) {
   if (listener.scannerOptions.canUseNative) return;
diff --git a/pkg/compiler/lib/src/native/ssa.dart b/pkg/compiler/lib/src/native/ssa.dart
index a14f7ad..7ab20c5 100644
--- a/pkg/compiler/lib/src/native/ssa.dart
+++ b/pkg/compiler/lib/src/native/ssa.dart
@@ -3,24 +3,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../constants/values.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../js/js.dart' as js;
 import '../js_backend/js_backend.dart';
-import '../js_emitter/js_emitter.dart' show
-    CodeEmitterTask,
-    NativeEmitter;
+import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter;
 import '../ssa/builder.dart' show SsaBuilder;
-import '../ssa/nodes.dart' show
-    HInstruction,
-    HForeignCode,
-    HReturn;
+import '../ssa/nodes.dart' show HInstruction, HForeignCode, HReturn;
 import '../tree/tree.dart';
-import '../universe/side_effects.dart' show
-    SideEffects;
+import '../universe/side_effects.dart' show SideEffects;
 
 final RegExp nativeRedirectionRegExp = new RegExp(r'^[a-zA-Z][a-zA-Z_$0-9]*$');
 
@@ -31,8 +24,8 @@
   JavaScriptBackend backend = builder.backend;
   DiagnosticReporter reporter = compiler.reporter;
 
-  HInstruction convertDartClosure(ParameterElement  parameter,
-                                  FunctionType type) {
+  HInstruction convertDartClosure(
+      ParameterElement parameter, FunctionType type) {
     HInstruction local = builder.localsHandler.readLocal(parameter);
     ConstantValue arityConstant =
         builder.constantSystem.createInt(type.computeArity());
@@ -99,25 +92,26 @@
     } else if (element.kind == ElementKind.SETTER) {
       nativeMethodCall = '$receiver$nativeMethodName = $foreignParameters';
     } else {
-      builder.reporter.internalError(element,
-                                     'Unexpected kind: "${element.kind}".');
+      builder.reporter
+          .internalError(element, 'Unexpected kind: "${element.kind}".');
     }
 
-    builder.push(
-        new HForeignCode(
-            // TODO(sra): This could be cached.  The number of templates should
-            // be proportional to the number of native methods, which is bounded
-            // by the dart: libraries.
-            js.js.uncachedExpressionTemplate(nativeMethodCall),
-            backend.dynamicType,
-            inputs, effects: new SideEffects()));
+    builder.push(new HForeignCode(
+        // TODO(sra): This could be cached.  The number of templates should
+        // be proportional to the number of native methods, which is bounded
+        // by the dart: libraries.
+        js.js.uncachedExpressionTemplate(nativeMethodCall),
+        backend.dynamicType,
+        inputs,
+        effects: new SideEffects()));
     // TODO(johnniwinther): Provide source information.
     builder
         .close(new HReturn(builder.pop(), null))
         .addSuccessor(builder.graph.exit);
   } else {
     if (parameters.parameterCount != 0) {
-      reporter.internalError(nativeBody,
+      reporter.internalError(
+          nativeBody,
           'native "..." syntax is restricted to '
           'functions with zero parameters.');
     }
diff --git a/pkg/compiler/lib/src/old_to_new_api.dart b/pkg/compiler/lib/src/old_to_new_api.dart
index 59bbc19..7954091 100644
--- a/pkg/compiler/lib/src/old_to_new_api.dart
+++ b/pkg/compiler/lib/src/old_to_new_api.dart
@@ -31,8 +31,8 @@
   LegacyCompilerDiagnostics(this._handler);
 
   @override
-  void report(var code, Uri uri, int begin, int end,
-              String message, Diagnostic kind) {
+  void report(
+      var code, Uri uri, int begin, int end, String message, Diagnostic kind) {
     _handler(uri, begin, end, message, kind);
   }
 }
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index e6d915b..cede0d1 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -16,6 +16,10 @@
 
   /// Support conditional directives, e.g., configurable imports.
   bool get enableConditionalDirectives;
+
+  /// Support parsing of generic method declarations, and invocations of
+  /// methods where type arguments are passed.
+  bool get enableGenericMethodSyntax;
 }
 
 /// Options used for controlling diagnostic messages.
@@ -147,6 +151,10 @@
   /// Whether to enable the experimental conditional directives feature.
   final bool enableConditionalDirectives;
 
+  /// Support parsing of generic method declarations, and invocations of
+  /// methods where type arguments are passed.
+  final bool enableGenericMethodSyntax;
+
   /// Whether the user specified a flag to allow the use of dart:mirrors. This
   /// silences a warning produced by the compiler.
   final bool enableExperimentalMirrors;
@@ -279,6 +287,8 @@
         enableAssertMessage: _hasOption(options, Flags.enableAssertMessage),
         enableConditionalDirectives:
             _hasOption(options, Flags.conditionalDirectives),
+        enableGenericMethodSyntax:
+            _hasOption(options, Flags.genericMethodSyntax),
         enableExperimentalMirrors:
             _hasOption(options, Flags.enableExperimentalMirrors),
         enableMinification: _hasOption(options, Flags.minify),
@@ -345,6 +355,7 @@
       bool emitJavaScript: true,
       bool enableAssertMessage: false,
       bool enableConditionalDirectives: false,
+      bool enableGenericMethodSyntax: false,
       bool enableExperimentalMirrors: false,
       bool enableMinification: false,
       bool enableNativeLiveTypeAnalysis: true,
@@ -414,6 +425,7 @@
         emitJavaScript: emitJavaScript,
         enableAssertMessage: enableAssertMessage,
         enableConditionalDirectives: enableConditionalDirectives,
+        enableGenericMethodSyntax: enableGenericMethodSyntax,
         enableExperimentalMirrors: enableExperimentalMirrors,
         enableMinification: enableMinification,
         enableNativeLiveTypeAnalysis: enableNativeLiveTypeAnalysis,
@@ -464,6 +476,7 @@
       this.emitJavaScript: true,
       this.enableAssertMessage: false,
       this.enableConditionalDirectives: false,
+      this.enableGenericMethodSyntax: false,
       this.enableExperimentalMirrors: false,
       this.enableMinification: false,
       this.enableNativeLiveTypeAnalysis: false,
diff --git a/pkg/compiler/lib/src/ordered_typeset.dart b/pkg/compiler/lib/src/ordered_typeset.dart
index 1afc0e0..e3cffb5 100644
--- a/pkg/compiler/lib/src/ordered_typeset.dart
+++ b/pkg/compiler/lib/src/ordered_typeset.dart
@@ -6,15 +6,10 @@
 
 import 'common.dart';
 import 'dart_types.dart';
-import 'diagnostics/diagnostic_listener.dart' show
-    DiagnosticReporter;
-import 'elements/elements.dart' show
-    ClassElement;
-import 'util/util.dart' show
-    Link,
-    LinkBuilder;
-import 'util/util_implementation.dart' show
-    LinkEntry;
+import 'diagnostics/diagnostic_listener.dart' show DiagnosticReporter;
+import 'elements/elements.dart' show ClassElement;
+import 'util/util.dart' show Link, LinkBuilder;
+import 'util/util_implementation.dart' show LinkEntry;
 
 /**
  * An ordered set of the supertypes of a class. The supertypes of a class are
@@ -39,8 +34,7 @@
   final Link<DartType> _supertypes;
 
   OrderedTypeSet.internal(List<Link<DartType>> this._levels,
-                           Link<DartType> this.types,
-                           Link<DartType> this._supertypes);
+      Link<DartType> this.types, Link<DartType> this._supertypes);
 
   factory OrderedTypeSet.singleton(DartType type) {
     Link<DartType> types =
@@ -56,9 +50,8 @@
   OrderedTypeSet extendClass(InterfaceType type) {
     assert(invariant(type.element, types.head.treatAsRaw,
         message: 'Cannot extend generic class ${types.head} using '
-                 'OrderedTypeSet.extendClass'));
-    Link<DartType> extendedTypes =
-        new LinkEntry<DartType>(type, types);
+            'OrderedTypeSet.extendClass'));
+    Link<DartType> extendedTypes = new LinkEntry<DartType>(type, types);
     List<Link<DartType>> list = new List<Link<DartType>>(levels + 1);
     for (int i = 0; i < levels; i++) {
       list[i] = _levels[i];
@@ -161,9 +154,7 @@
       : this._objectType = objectType;
 
   OrderedTypeSet createOrderedTypeSet(
-      InterfaceType supertype,
-      Link<DartType> interfaces) {
-
+      InterfaceType supertype, Link<DartType> interfaces) {
     if (_objectType == null) {
       // Find `Object` through in hierarchy. This is used for serialization
       // where it is assumed that the hierarchy is valid.
@@ -197,7 +188,7 @@
     Link<DartType> supertypes = classElement.allSupertypes;
     assert(invariant(cls, supertypes != null,
         message: "Supertypes not computed on $classElement "
-                 "during resolution of $cls"));
+            "during resolution of $cls"));
     while (!supertypes.isEmpty) {
       DartType supertype = supertypes.head;
       add(supertype.substByContext(type));
@@ -227,12 +218,11 @@
       if (existingType == type) return;
       if (existingType.element == type.element) {
         if (reporter != null) {
-          reporter.reportErrorMessage(
-              cls,
-              MessageKind.MULTI_INHERITANCE,
-              {'thisType': cls.thisType,
-               'firstType': existingType,
-               'secondType': type});
+          reporter.reportErrorMessage(cls, MessageKind.MULTI_INHERITANCE, {
+            'thisType': cls.thisType,
+            'firstType': existingType,
+            'secondType': type
+          });
         } else {
           assert(invariant(cls, false,
               message: 'Invalid ordered typeset for $cls'));
diff --git a/pkg/compiler/lib/src/parser/class_element_parser.dart b/pkg/compiler/lib/src/parser/class_element_parser.dart
index ab3516e..b85114d 100644
--- a/pkg/compiler/lib/src/parser/class_element_parser.dart
+++ b/pkg/compiler/lib/src/parser/class_element_parser.dart
@@ -4,15 +4,11 @@
 
 library dart2js.parser.classes;
 
-import '../tokens/token.dart' show
-    Token;
+import '../tokens/token.dart' show Token;
 
-import 'listener.dart' show
-    Listener;
-import '../options.dart' show
-    ParserOptions;
-import 'partial_parser.dart' show
-    PartialParser;
+import 'listener.dart' show Listener;
+import '../options.dart' show ParserOptions;
+import 'partial_parser.dart' show PartialParser;
 
 class ClassElementParser extends PartialParser {
   ClassElementParser(Listener listener, ParserOptions options)
diff --git a/pkg/compiler/lib/src/parser/diet_parser_task.dart b/pkg/compiler/lib/src/parser/diet_parser_task.dart
index d2db818..6d9302e 100644
--- a/pkg/compiler/lib/src/parser/diet_parser_task.dart
+++ b/pkg/compiler/lib/src/parser/diet_parser_task.dart
@@ -5,43 +5,36 @@
 library dart2js.parser.diet.task;
 
 import '../common.dart';
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
-import '../elements/elements.dart' show
-    CompilationUnitElement;
-import '../tokens/token.dart' show
-    Token;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
+import '../elements/elements.dart' show CompilationUnitElement;
+import '../id_generator.dart';
+import '../tokens/token.dart' show Token;
 
-import 'listener.dart' show
-    ParserError;
-import 'element_listener.dart' show
-    ElementListener,
-    ScannerOptions;
-import '../options.dart' show
-    ParserOptions;
-import 'partial_parser.dart' show
-    PartialParser;
+import 'listener.dart' show ParserError;
+import 'element_listener.dart' show ElementListener, ScannerOptions;
+import '../options.dart' show ParserOptions;
+import 'partial_parser.dart' show PartialParser;
 
 class DietParserTask extends CompilerTask {
   final ParserOptions _parserOptions;
+  final IdGenerator _idGenerator;
 
-  DietParserTask(Compiler compiler, this._parserOptions) : super(compiler);
+  DietParserTask(Compiler compiler, this._parserOptions, this._idGenerator)
+      : super(compiler);
 
   final String name = 'Diet Parser';
 
   dietParse(CompilationUnitElement compilationUnit, Token tokens) {
     measure(() {
-      Function idGenerator = compiler.getNextFreeClassId;
       ScannerOptions scannerOptions =
           new ScannerOptions.from(compiler, compilationUnit.library);
       ElementListener listener = new ElementListener(
-          scannerOptions, compiler.reporter, compilationUnit, idGenerator);
+          scannerOptions, compiler.reporter, compilationUnit, _idGenerator);
       PartialParser parser = new PartialParser(listener, _parserOptions);
       try {
         parser.parseUnit(tokens);
-      } on ParserError catch(_) {
+      } on ParserError catch (_) {
         assert(invariant(compilationUnit, compiler.compilationFailed));
       }
     });
diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart
index fa524cc..b089ae5 100644
--- a/pkg/compiler/lib/src/parser/element_listener.dart
+++ b/pkg/compiler/lib/src/parser/element_listener.dart
@@ -4,57 +4,41 @@
 
 library dart2js.parser.element_listener;
 
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../common.dart';
-import '../diagnostics/messages.dart' show
-    MessageTemplate;
-import '../elements/elements.dart' show
-    Element,
-    LibraryElement,
-    MetadataAnnotation;
-import '../elements/modelx.dart' show
-    CompilationUnitElementX,
-    DeclarationSite,
-    ElementX,
-    EnumClassElementX,
-    FieldElementX,
-    LibraryElementX,
-    NamedMixinApplicationElementX,
-    VariableList;
+import '../diagnostics/messages.dart' show MessageTemplate;
+import '../elements/elements.dart'
+    show Element, LibraryElement, MetadataAnnotation;
+import '../elements/modelx.dart'
+    show
+        CompilationUnitElementX,
+        DeclarationSite,
+        ElementX,
+        EnumClassElementX,
+        FieldElementX,
+        LibraryElementX,
+        NamedMixinApplicationElementX,
+        VariableList;
+import '../id_generator.dart';
 import '../native/native.dart' as native;
-import '../string_validator.dart' show
-    StringValidator;
-import '../tokens/keyword.dart' show
-    Keyword;
-import '../tokens/precedence_constants.dart' as Precedence show
-    BAD_INPUT_INFO;
-import '../tokens/token.dart' show
-    BeginGroupToken,
-    ErrorToken,
-    KeywordToken,
-    Token;
-import '../tokens/token_constants.dart' as Tokens show
-    EOF_TOKEN;
+import '../string_validator.dart' show StringValidator;
+import '../tokens/keyword.dart' show Keyword;
+import '../tokens/precedence_constants.dart' as Precedence show BAD_INPUT_INFO;
+import '../tokens/token.dart'
+    show BeginGroupToken, ErrorToken, KeywordToken, Token;
+import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN;
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Link,
-    LinkBuilder;
+import '../util/util.dart' show Link, LinkBuilder;
 
-import 'partial_elements.dart' show
-    PartialClassElement,
-    PartialElement,
-    PartialFieldList,
-    PartialFunctionElement,
-    PartialMetadataAnnotation,
-    PartialTypedefElement;
-import 'listener.dart' show
-    closeBraceFor,
-    Listener,
-    ParserError,
-    VERBOSE;
-
-typedef int IdGenerator();
+import 'partial_elements.dart'
+    show
+        PartialClassElement,
+        PartialElement,
+        PartialFieldList,
+        PartialFunctionElement,
+        PartialMetadataAnnotation,
+        PartialTypedefElement;
+import 'listener.dart' show closeBraceFor, Listener, ParserError, VERBOSE;
 
 /// Options used for scanning.
 ///
@@ -68,8 +52,8 @@
 
   const ScannerOptions({this.canUseNative: false});
 
-  ScannerOptions.from(Compiler compiler, LibraryElement libraryElement) :
-      canUseNative = compiler.backend.canLibraryUseNative(libraryElement);
+  ScannerOptions.from(Compiler compiler, LibraryElement libraryElement)
+      : canUseNative = compiler.backend.canLibraryUseNative(libraryElement);
 }
 
 /**
@@ -102,11 +86,8 @@
 
   bool suppressParseErrors = false;
 
-  ElementListener(
-      this.scannerOptions,
-      DiagnosticReporter reporter,
-      this.compilationUnitElement,
-      this.idGenerator)
+  ElementListener(this.scannerOptions, DiagnosticReporter reporter,
+      this.compilationUnitElement, this.idGenerator)
       : this.reporter = reporter,
         stringValidator = new StringValidator(reporter),
         interpolationScope = const Link<StringQuoting>();
@@ -129,8 +110,8 @@
     StringNode node = popNode();
     // TODO(lrn): Handle interpolations in script tags.
     if (node.isInterpolation) {
-      reporter.internalError(node,
-          "String interpolation not supported in library tags.");
+      reporter.internalError(
+          node, "String interpolation not supported in library tags.");
       return null;
     }
     return node;
@@ -141,17 +122,17 @@
     // in sourced files.
     LibraryElement library = compilationUnitElement.implementationLibrary;
     return !compilationUnitElement.hasMembers &&
-           library.entryCompilationUnit == compilationUnitElement;
+        library.entryCompilationUnit == compilationUnitElement;
   }
 
   void endLibraryName(Token libraryKeyword, Token semicolon) {
     Expression name = popNode();
-    addLibraryTag(new LibraryName(libraryKeyword, name,
-                                  popMetadata(compilationUnitElement)));
+    addLibraryTag(new LibraryName(
+        libraryKeyword, name, popMetadata(compilationUnitElement)));
   }
 
   void endImport(Token importKeyword, Token deferredKeyword, Token asKeyword,
-                 Token semicolon) {
+      Token semicolon) {
     NodeList combinators = popNode();
     bool isDeferred = deferredKeyword != null;
     Identifier prefix;
@@ -160,10 +141,9 @@
     }
     NodeList conditionalUris = popNode();
     StringNode uri = popLiteralString();
-    addLibraryTag(new Import(importKeyword, uri, conditionalUris,
-                             prefix, combinators,
-                             popMetadata(compilationUnitElement),
-                             isDeferred: isDeferred));
+    addLibraryTag(new Import(importKeyword, uri, conditionalUris, prefix,
+        combinators, popMetadata(compilationUnitElement),
+        isDeferred: isDeferred));
   }
 
   void endDottedName(int count, Token token) {
@@ -190,10 +170,10 @@
     NodeList names = makeNodeList(count, enumKeyword.next.next, endBrace, ",");
     Identifier name = popNode();
 
-    int id = idGenerator();
+    int id = idGenerator.getNextFreeId();
     Element enclosing = compilationUnitElement;
-    pushElement(new EnumClassElementX(name.source, enclosing, id,
-        new Enum(enumKeyword, name, names)));
+    pushElement(new EnumClassElementX(
+        name.source, enclosing, id, new Enum(enumKeyword, name, names)));
     rejectBuiltInIdentifier(name);
   }
 
@@ -202,7 +182,7 @@
     NodeList conditionalUris = popNode();
     StringNode uri = popNode();
     addLibraryTag(new Export(exportKeyword, uri, conditionalUris, combinators,
-                             popMetadata(compilationUnitElement)));
+        popMetadata(compilationUnitElement)));
   }
 
   void endCombinators(int count) {
@@ -232,14 +212,14 @@
 
   void endPart(Token partKeyword, Token semicolon) {
     StringNode uri = popLiteralString();
-    addLibraryTag(new Part(partKeyword, uri,
-                           popMetadata(compilationUnitElement)));
+    addLibraryTag(
+        new Part(partKeyword, uri, popMetadata(compilationUnitElement)));
   }
 
   void endPartOf(Token partKeyword, Token semicolon) {
     Expression name = popNode();
-    addPartOfTag(new PartOf(partKeyword, name,
-                            popMetadata(compilationUnitElement)));
+    addPartOfTag(
+        new PartOf(partKeyword, name, popMetadata(compilationUnitElement)));
   }
 
   void addPartOfTag(PartOf tag) {
@@ -256,20 +236,19 @@
 
   void endTopLevelDeclaration(Token token) {
     if (!metadata.isEmpty) {
-      recoverableError(metadata.first.beginToken,
-                       'Metadata not supported here.');
+      recoverableError(
+          metadata.first.beginToken, 'Metadata not supported here.');
       metadata.clear();
     }
   }
 
   void endClassDeclaration(int interfacesCount, Token beginToken,
-                           Token extendsKeyword, Token implementsKeyword,
-                           Token endToken) {
+      Token extendsKeyword, Token implementsKeyword, Token endToken) {
     makeNodeList(interfacesCount, implementsKeyword, null, ","); // interfaces
     popNode(); // superType
     popNode(); // typeParameters
     Identifier name = popNode();
-    int id = idGenerator();
+    int id = idGenerator.getNextFreeId();
     PartialClassElement element = new PartialClassElement(
         name.source, beginToken, endToken, compilationUnitElement, id);
     pushElement(element);
@@ -289,25 +268,28 @@
     popNode(); // TODO(karlklose): do not throw away typeVariables.
     Identifier name = popNode();
     popNode(); // returnType
-    pushElement(
-        new PartialTypedefElement(
-            name.source, compilationUnitElement, typedefKeyword, endToken));
+    pushElement(new PartialTypedefElement(
+        name.source, compilationUnitElement, typedefKeyword, endToken));
     rejectBuiltInIdentifier(name);
   }
 
-  void endNamedMixinApplication(Token classKeyword,
-                                Token implementsKeyword,
-                                Token endToken) {
+  void endNamedMixinApplication(
+      Token classKeyword, Token implementsKeyword, Token endToken) {
     NodeList interfaces = (implementsKeyword != null) ? popNode() : null;
     MixinApplication mixinApplication = popNode();
     Modifiers modifiers = popNode();
     NodeList typeParameters = popNode();
     Identifier name = popNode();
     NamedMixinApplication namedMixinApplication = new NamedMixinApplication(
-        name, typeParameters, modifiers, mixinApplication, interfaces,
-        classKeyword, endToken);
+        name,
+        typeParameters,
+        modifiers,
+        mixinApplication,
+        interfaces,
+        classKeyword,
+        endToken);
 
-    int id = idGenerator();
+    int id = idGenerator.getNextFreeId();
     Element enclosing = compilationUnitElement;
     pushElement(new NamedMixinApplicationElementX(
         name.source, enclosing, id, namedMixinApplication));
@@ -327,12 +309,12 @@
   void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
     bool hasParseError = currentMemberHasParseError;
     memberErrors = memberErrors.tail;
+    popNode(); // typeVariables
     Identifier name = popNode();
     popNode(); // type
     Modifiers modifiers = popNode();
-    PartialFunctionElement element = new PartialFunctionElement(
-        name.source, beginToken, getOrSet, endToken,
-        modifiers, compilationUnitElement);
+    PartialFunctionElement element = new PartialFunctionElement(name.source,
+        beginToken, getOrSet, endToken, modifiers, compilationUnitElement);
     element.hasParseError = hasParseError;
     pushElement(element);
   }
@@ -341,29 +323,28 @@
     bool hasParseError = currentMemberHasParseError;
     memberErrors = memberErrors.tail;
     void buildFieldElement(Identifier name, VariableList fields) {
-      pushElement(
-          new FieldElementX(name, compilationUnitElement, fields));
+      pushElement(new FieldElementX(name, compilationUnitElement, fields));
     }
     NodeList variables = makeNodeList(count, null, null, ",");
     popNode(); // type
     Modifiers modifiers = popNode();
     buildFieldElements(modifiers, variables, compilationUnitElement,
-                       buildFieldElement,
-                       beginToken, endToken, hasParseError);
+        buildFieldElement, beginToken, endToken, hasParseError);
   }
 
-  void buildFieldElements(Modifiers modifiers,
-                          NodeList variables,
-                          Element enclosingElement,
-                          void buildFieldElement(Identifier name,
-                                                 VariableList fields),
-                          Token beginToken, Token endToken,
-                          bool hasParseError) {
+  void buildFieldElements(
+      Modifiers modifiers,
+      NodeList variables,
+      Element enclosingElement,
+      void buildFieldElement(Identifier name, VariableList fields),
+      Token beginToken,
+      Token endToken,
+      bool hasParseError) {
     VariableList fields =
         new PartialFieldList(beginToken, endToken, modifiers, hasParseError);
     for (Link<Node> variableNodes = variables.nodes;
-         !variableNodes.isEmpty;
-         variableNodes = variableNodes.tail) {
+        !variableNodes.isEmpty;
+        variableNodes = variableNodes.tail) {
       Expression initializedIdentifier = variableNodes.head;
       Identifier identifier = initializedIdentifier.asIdentifier();
       if (identifier == null) {
@@ -398,7 +379,7 @@
     pushNode(makeNodeList(count, beginToken, endToken, ','));
   }
 
-  void handleNoTypeVariables(token) {
+  void handleNoTypeVariables(Token token) {
     pushNode(null);
   }
 
@@ -518,15 +499,13 @@
 
   Token expectedIdentifier(Token token) {
     if (token is KeywordToken) {
-      reportError(
-          token, MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD,
+      reportError(token, MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD,
           {'keyword': token.value});
     } else if (token is ErrorToken) {
       reportErrorToken(token);
       return synthesizeIdentifier(token);
     } else {
-      reportFatalError(token,
-          "Expected identifier, but got '${token.value}'.");
+      reportFatalError(token, "Expected identifier, but got '${token.value}'.");
     }
     return token;
   }
@@ -537,8 +516,7 @@
       reportErrorToken(token);
       return synthesizeIdentifier(token);
     } else {
-      reportFatalError(
-          token, "Expected a type, but got '${token.value}'.");
+      reportFatalError(token, "Expected a type, but got '${token.value}'.");
       return skipToEof(token);
     }
   }
@@ -549,8 +527,8 @@
       pushNode(new ErrorExpression(token));
       return token.next;
     } else {
-      reportFatalError(token,
-                       "Expected an expression, but got '${token.value}'.");
+      reportFatalError(
+          token, "Expected an expression, but got '${token.value}'.");
       pushNode(null);
       return skipToEof(token);
     }
@@ -582,8 +560,8 @@
       reportErrorToken(token);
     } else {
       String printString = token.value;
-      reportFatalError(token,
-                       "Expected a function body, but got '$printString'.");
+      reportFatalError(
+          token, "Expected a function body, but got '$printString'.");
     }
     return skipToEof(token);
   }
@@ -592,8 +570,8 @@
     if (token is ErrorToken) {
       reportErrorToken(token);
     } else {
-      reportFatalError(token,
-                       "Expected a class body, but got '${token.value}'.");
+      reportFatalError(
+          token, "Expected a class body, but got '${token.value}'.");
     }
     return skipToEof(token);
   }
@@ -606,8 +584,8 @@
     if (token is ErrorToken) {
       reportErrorToken(token);
     } else {
-      reportFatalError(token,
-                       "Expected a declaration, but got '${token.value}'.");
+      reportFatalError(
+          token, "Expected a declaration, but got '${token.value}'.");
     }
     return skipToEof(token);
   }
@@ -677,8 +655,8 @@
     print(message);
   }
 
-  NodeList makeNodeList(int count, Token beginToken, Token endToken,
-                        String delimiter) {
+  NodeList makeNodeList(
+      int count, Token beginToken, Token endToken, String delimiter) {
     Link<Node> poppedNodes = const Link<Node>();
     for (; count > 0; --count) {
       // This effectively reverses the order of nodes so they end up
@@ -706,17 +684,15 @@
   void endLiteralString(int count) {
     StringQuoting quoting = popQuoting();
 
-    Link<StringInterpolationPart> parts =
-        const Link<StringInterpolationPart>();
+    Link<StringInterpolationPart> parts = const Link<StringInterpolationPart>();
     // Parts of the string interpolation are popped in reverse order,
     // starting with the last literal string part.
     bool isLast = true;
     for (int i = 0; i < count; i++) {
       LiteralString string = popNode();
-      DartString validation =
-          stringValidator.validateInterpolationPart(string.token, quoting,
-                                                    isFirst: false,
-                                                    isLast: isLast);
+      DartString validation = stringValidator.validateInterpolationPart(
+          string.token, quoting,
+          isFirst: false, isLast: isLast);
       // Replace the unvalidated LiteralString with a new LiteralString
       // object that has the validation result included.
       string = new LiteralString(string.token, validation);
@@ -726,10 +702,9 @@
     }
 
     LiteralString string = popNode();
-    DartString validation =
-        stringValidator.validateInterpolationPart(string.token, quoting,
-                                                  isFirst: true,
-                                                  isLast: isLast);
+    DartString validation = stringValidator.validateInterpolationPart(
+        string.token, quoting,
+        isFirst: true, isLast: isLast);
     string = new LiteralString(string.token, validation);
     if (isLast) {
       pushNode(string);
@@ -783,9 +758,8 @@
     throw new ParserError(message);
   }
 
-  void reportError(Spannable spannable,
-                   MessageKind errorCode,
-                   [Map arguments = const {}]) {
+  void reportError(Spannable spannable, MessageKind errorCode,
+      [Map arguments = const {}]) {
     if (currentMemberHasParseError) return; // Error already reported.
     if (suppressParseErrors) return;
     if (!memberErrors.isEmpty) {
diff --git a/pkg/compiler/lib/src/parser/listener.dart b/pkg/compiler/lib/src/parser/listener.dart
index 618b86a..e1e4c3c 100644
--- a/pkg/compiler/lib/src/parser/listener.dart
+++ b/pkg/compiler/lib/src/parser/listener.dart
@@ -5,19 +5,18 @@
 library dart2js.parser.listener;
 
 import '../common.dart';
-import '../diagnostics/messages.dart' show
-    MessageTemplate;
-import '../tokens/precedence_constants.dart' as Precedence show
-    EOF_INFO,
-    IDENTIFIER_INFO;
-import '../tokens/token.dart' show
-    BadInputToken,
-    BeginGroupToken,
-    ErrorToken,
-    StringToken,
-    Token,
-    UnmatchedToken,
-    UnterminatedToken;
+import '../diagnostics/messages.dart' show MessageTemplate;
+import '../tokens/precedence_constants.dart' as Precedence
+    show EOF_INFO, IDENTIFIER_INFO;
+import '../tokens/token.dart'
+    show
+        BadInputToken,
+        BeginGroupToken,
+        ErrorToken,
+        StringToken,
+        Token,
+        UnmatchedToken,
+        UnterminatedToken;
 import '../tree/tree.dart';
 
 const bool VERBOSE = false;
@@ -27,582 +26,404 @@
  * on parser errors.
  */
 class Listener {
-  set suppressParseErrors(bool value) {
-  }
+  set suppressParseErrors(bool value) {}
 
-  void beginArguments(Token token) {
-  }
+  void beginArguments(Token token) {}
 
-  void endArguments(int count, Token beginToken, Token endToken) {
-  }
+  void endArguments(int count, Token beginToken, Token endToken) {}
 
   /// Handle async modifiers `async`, `async*`, `sync`.
-  void handleAsyncModifier(Token asyncToken, Token startToken) {
-  }
+  void handleAsyncModifier(Token asyncToken, Token startToken) {}
 
-  void beginAwaitExpression(Token token) {
-  }
+  void beginAwaitExpression(Token token) {}
 
-  void endAwaitExpression(Token beginToken, Token endToken) {
-  }
+  void endAwaitExpression(Token beginToken, Token endToken) {}
 
-  void beginBlock(Token token) {
-  }
+  void beginBlock(Token token) {}
 
-  void endBlock(int count, Token beginToken, Token endToken) {
-  }
+  void endBlock(int count, Token beginToken, Token endToken) {}
 
-  void beginCascade(Token token) {
-  }
+  void beginCascade(Token token) {}
 
-  void endCascade() {
-  }
+  void endCascade() {}
 
-  void beginClassBody(Token token) {
-  }
+  void beginClassBody(Token token) {}
 
-  void endClassBody(int memberCount, Token beginToken, Token endToken) {
-  }
+  void endClassBody(int memberCount, Token beginToken, Token endToken) {}
 
-  void beginClassDeclaration(Token token) {
-  }
+  void beginClassDeclaration(Token token) {}
 
   void endClassDeclaration(int interfacesCount, Token beginToken,
-                           Token extendsKeyword, Token implementsKeyword,
-                           Token endToken) {
-  }
+      Token extendsKeyword, Token implementsKeyword, Token endToken) {}
 
-  void beginCombinators(Token token) {
-  }
+  void beginCombinators(Token token) {}
 
-  void endCombinators(int count) {
-  }
+  void endCombinators(int count) {}
 
-  void beginCompilationUnit(Token token) {
-  }
+  void beginCompilationUnit(Token token) {}
 
-  void endCompilationUnit(int count, Token token) {
-  }
+  void endCompilationUnit(int count, Token token) {}
 
-  void beginConstructorReference(Token start) {
-  }
+  void beginConstructorReference(Token start) {}
 
-  void endConstructorReference(Token start, Token periodBeforeName,
-                               Token endToken) {
-  }
+  void endConstructorReference(
+      Token start, Token periodBeforeName, Token endToken) {}
 
-  void beginDoWhileStatement(Token token) {
-  }
+  void beginDoWhileStatement(Token token) {}
 
-  void endDoWhileStatement(Token doKeyword, Token whileKeyword,
-                           Token endToken) {
-  }
+  void endDoWhileStatement(
+      Token doKeyword, Token whileKeyword, Token endToken) {}
 
-  void beginEnum(Token enumKeyword) {
-  }
+  void beginEnum(Token enumKeyword) {}
 
-  void endEnum(Token enumKeyword, Token endBrace, int count) {
-  }
+  void endEnum(Token enumKeyword, Token endBrace, int count) {}
 
-  void beginExport(Token token) {
-  }
+  void beginExport(Token token) {}
 
-  void endExport(Token exportKeyword, Token semicolon) {
-  }
+  void endExport(Token exportKeyword, Token semicolon) {}
 
-  void beginExpressionStatement(Token token) {
-  }
+  void beginExpressionStatement(Token token) {}
 
-  void endExpressionStatement(Token token) {
-  }
+  void endExpressionStatement(Token token) {}
 
-  void beginFactoryMethod(Token token) {
-  }
+  void beginFactoryMethod(Token token) {}
 
-  void endFactoryMethod(Token beginToken, Token endToken) {
-  }
+  void endFactoryMethod(Token beginToken, Token endToken) {}
 
-  void beginFormalParameter(Token token) {
-  }
+  void beginFormalParameter(Token token) {}
 
-  void endFormalParameter(Token thisKeyword) {
-  }
+  void endFormalParameter(Token thisKeyword) {}
 
-  void handleNoFormalParameters(Token token) {
-  }
+  void handleNoFormalParameters(Token token) {}
 
-  void beginFormalParameters(Token token) {
-  }
+  void beginFormalParameters(Token token) {}
 
-  void endFormalParameters(int count, Token beginToken, Token endToken) {
-  }
+  void endFormalParameters(int count, Token beginToken, Token endToken) {}
 
-  void endFields(int count, Token beginToken, Token endToken) {
-  }
+  void endFields(int count, Token beginToken, Token endToken) {}
 
-  void beginForStatement(Token token) {
-  }
+  void beginForStatement(Token token) {}
 
-  void endForStatement(int updateExpressionCount,
-                       Token beginToken, Token endToken) {
-  }
+  void endForStatement(
+      int updateExpressionCount, Token beginToken, Token endToken) {}
 
-  void endForIn(Token awaitToken, Token forToken,
-                Token inKeyword, Token endToken) {
-  }
+  void endForIn(
+      Token awaitToken, Token forToken, Token inKeyword, Token endToken) {}
 
-  void beginFunction(Token token) {
-  }
+  void beginFunction(Token token) {}
 
-  void endFunction(Token getOrSet, Token endToken) {
-  }
+  void endFunction(Token getOrSet, Token endToken) {}
 
-  void beginFunctionDeclaration(Token token) {
-  }
+  void beginFunctionDeclaration(Token token) {}
 
-  void endFunctionDeclaration(Token token) {
-  }
+  void endFunctionDeclaration(Token token) {}
 
-  void beginFunctionBody(Token token) {
-  }
+  void beginFunctionBody(Token token) {}
 
-  void endFunctionBody(int count, Token beginToken, Token endToken) {
-  }
+  void endFunctionBody(int count, Token beginToken, Token endToken) {}
 
-  void handleNoFunctionBody(Token token) {
-  }
+  void handleNoFunctionBody(Token token) {}
 
-  void skippedFunctionBody(Token token) {
-  }
+  void skippedFunctionBody(Token token) {}
 
-  void beginFunctionName(Token token) {
-  }
+  void beginFunctionName(Token token) {}
 
-  void endFunctionName(Token token) {
-  }
+  void endFunctionName(Token token) {}
 
-  void beginFunctionTypeAlias(Token token) {
-  }
+  void beginFunctionTypeAlias(Token token) {}
 
-  void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {
-  }
+  void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {}
 
-  void beginMixinApplication(Token token) {
-  }
+  void beginMixinApplication(Token token) {}
 
-  void endMixinApplication() {
-  }
+  void endMixinApplication() {}
 
-  void beginNamedMixinApplication(Token token) {
-  }
+  void beginNamedMixinApplication(Token token) {}
 
-  void endNamedMixinApplication(Token classKeyword,
-                                Token implementsKeyword,
-                                Token endToken) {
-  }
+  void endNamedMixinApplication(
+      Token classKeyword, Token implementsKeyword, Token endToken) {}
 
-  void beginHide(Token hideKeyword) {
-  }
+  void beginHide(Token hideKeyword) {}
 
-  void endHide(Token hideKeyword) {
-  }
+  void endHide(Token hideKeyword) {}
 
-  void beginIdentifierList(Token token) {
-  }
+  void beginIdentifierList(Token token) {}
 
-  void endIdentifierList(int count) {
-  }
+  void endIdentifierList(int count) {}
 
-  void beginTypeList(Token token) {
-  }
+  void beginTypeList(Token token) {}
 
-  void endTypeList(int count) {
-  }
+  void endTypeList(int count) {}
 
-  void beginIfStatement(Token token) {
-  }
+  void beginIfStatement(Token token) {}
 
-  void endIfStatement(Token ifToken, Token elseToken) {
-  }
+  void endIfStatement(Token ifToken, Token elseToken) {}
 
-  void beginImport(Token importKeyword) {
-  }
+  void beginImport(Token importKeyword) {}
 
-  void endImport(Token importKeyword, Token DeferredKeyword,
-                 Token asKeyword, Token semicolon) {
-  }
+  void endImport(Token importKeyword, Token DeferredKeyword, Token asKeyword,
+      Token semicolon) {}
 
-  void beginConditionalUris(Token token) {
-  }
+  void beginConditionalUris(Token token) {}
 
-  void endConditionalUris(int count) {
-  }
+  void endConditionalUris(int count) {}
 
-  void beginConditionalUri(Token ifKeyword) {
-  }
+  void beginConditionalUri(Token ifKeyword) {}
 
-  void endConditionalUri(Token ifKeyword, Token equalitySign) {
-  }
+  void endConditionalUri(Token ifKeyword, Token equalitySign) {}
 
-  void beginDottedName(Token token) {
-  }
+  void beginDottedName(Token token) {}
 
-  void endDottedName(int count, Token firstIdentifier) {
-  }
+  void endDottedName(int count, Token firstIdentifier) {}
 
-  void beginInitializedIdentifier(Token token) {
-  }
+  void beginInitializedIdentifier(Token token) {}
 
-  void endInitializedIdentifier() {
-  }
+  void endInitializedIdentifier() {}
 
-  void beginInitializer(Token token) {
-  }
+  void beginInitializer(Token token) {}
 
-  void endInitializer(Token assignmentOperator) {
-  }
+  void endInitializer(Token assignmentOperator) {}
 
-  void beginInitializers(Token token) {
-  }
+  void beginInitializers(Token token) {}
 
-  void endInitializers(int count, Token beginToken, Token endToken) {
-  }
+  void endInitializers(int count, Token beginToken, Token endToken) {}
 
-  void handleNoInitializers() {
-  }
+  void handleNoInitializers() {}
 
-  void handleLabel(Token token) {
-  }
+  void handleLabel(Token token) {}
 
-  void beginLabeledStatement(Token token, int labelCount) {
-  }
+  void beginLabeledStatement(Token token, int labelCount) {}
 
-  void endLabeledStatement(int labelCount) {
-  }
+  void endLabeledStatement(int labelCount) {}
 
-  void beginLibraryName(Token token) {
-  }
+  void beginLibraryName(Token token) {}
 
-  void endLibraryName(Token libraryKeyword, Token semicolon) {
-  }
+  void endLibraryName(Token libraryKeyword, Token semicolon) {}
 
-  void beginLiteralMapEntry(Token token) {
-  }
+  void beginLiteralMapEntry(Token token) {}
 
-  void endLiteralMapEntry(Token colon, Token endToken) {
-  }
+  void endLiteralMapEntry(Token colon, Token endToken) {}
 
-  void beginLiteralString(Token token) {
-  }
+  void beginLiteralString(Token token) {}
 
-  void endLiteralString(int interpolationCount) {
-  }
+  void endLiteralString(int interpolationCount) {}
 
-  void handleStringJuxtaposition(int literalCount) {
-  }
+  void handleStringJuxtaposition(int literalCount) {}
 
-  void beginMember(Token token) {
-  }
+  void beginMember(Token token) {}
 
-  void endMethod(Token getOrSet, Token beginToken, Token endToken) {
-  }
+  void endMethod(Token getOrSet, Token beginToken, Token endToken) {}
 
-  void beginMetadataStar(Token token) {
-  }
+  void beginMetadataStar(Token token) {}
 
-  void endMetadataStar(int count, bool forParameter) {
-  }
+  void endMetadataStar(int count, bool forParameter) {}
 
-  void beginMetadata(Token token) {
-  }
+  void beginMetadata(Token token) {}
 
-  void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {
-  }
+  void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {}
 
-  void beginOptionalFormalParameters(Token token) {
-  }
+  void beginOptionalFormalParameters(Token token) {}
 
-  void endOptionalFormalParameters(int count,
-                                   Token beginToken, Token endToken) {
-  }
+  void endOptionalFormalParameters(
+      int count, Token beginToken, Token endToken) {}
 
-  void beginPart(Token token) {
-  }
+  void beginPart(Token token) {}
 
-  void endPart(Token partKeyword, Token semicolon) {
-  }
+  void endPart(Token partKeyword, Token semicolon) {}
 
-  void beginPartOf(Token token) {
-  }
+  void beginPartOf(Token token) {}
 
-  void endPartOf(Token partKeyword, Token semicolon) {
-  }
+  void endPartOf(Token partKeyword, Token semicolon) {}
 
-  void beginRedirectingFactoryBody(Token token) {
-  }
+  void beginRedirectingFactoryBody(Token token) {}
 
-  void endRedirectingFactoryBody(Token beginToken, Token endToken) {
-  }
+  void endRedirectingFactoryBody(Token beginToken, Token endToken) {}
 
-  void beginReturnStatement(Token token) {
-  }
+  void beginReturnStatement(Token token) {}
 
-  void endReturnStatement(bool hasExpression,
-                          Token beginToken, Token endToken) {
-  }
+  void endReturnStatement(
+      bool hasExpression, Token beginToken, Token endToken) {}
 
-  void beginSend(Token token) {
-  }
+  void beginSend(Token token) {}
 
-  void endSend(Token token) {
-  }
+  void endSend(Token token) {}
 
-  void beginShow(Token showKeyword) {
-  }
+  void beginShow(Token showKeyword) {}
 
-  void endShow(Token showKeyword) {
-  }
+  void endShow(Token showKeyword) {}
 
-  void beginSwitchStatement(Token token) {
-  }
+  void beginSwitchStatement(Token token) {}
 
-  void endSwitchStatement(Token switchKeyword, Token endToken) {
-  }
+  void endSwitchStatement(Token switchKeyword, Token endToken) {}
 
-  void beginSwitchBlock(Token token) {
-  }
+  void beginSwitchBlock(Token token) {}
 
-  void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {
-  }
+  void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {}
 
-  void beginLiteralSymbol(Token token) {
-  }
+  void beginLiteralSymbol(Token token) {}
 
-  void endLiteralSymbol(Token hashToken, int identifierCount) {
-  }
+  void endLiteralSymbol(Token hashToken, int identifierCount) {}
 
-  void beginThrowExpression(Token token) {
-  }
+  void beginThrowExpression(Token token) {}
 
-  void endThrowExpression(Token throwToken, Token endToken) {
-  }
+  void endThrowExpression(Token throwToken, Token endToken) {}
 
-  void beginRethrowStatement(Token token) {
-  }
+  void beginRethrowStatement(Token token) {}
 
-  void endRethrowStatement(Token throwToken, Token endToken) {
-  }
+  void endRethrowStatement(Token throwToken, Token endToken) {}
 
-  void endTopLevelDeclaration(Token token) {
-  }
+  void endTopLevelDeclaration(Token token) {}
 
-  void beginTopLevelMember(Token token) {
-  }
+  void beginTopLevelMember(Token token) {}
 
-  void endTopLevelFields(int count, Token beginToken, Token endToken) {
-  }
+  void endTopLevelFields(int count, Token beginToken, Token endToken) {}
 
-  void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
-  }
+  void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {}
 
-  void beginTryStatement(Token token) {
-  }
+  void beginTryStatement(Token token) {}
 
-  void handleCaseMatch(Token caseKeyword, Token colon) {
-  }
+  void handleCaseMatch(Token caseKeyword, Token colon) {}
 
-  void handleCatchBlock(Token onKeyword, Token catchKeyword) {
-  }
+  void handleCatchBlock(Token onKeyword, Token catchKeyword) {}
 
-  void handleFinallyBlock(Token finallyKeyword) {
-  }
+  void handleFinallyBlock(Token finallyKeyword) {}
 
-  void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) {
-  }
+  void endTryStatement(
+      int catchCount, Token tryKeyword, Token finallyKeyword) {}
 
-  void endType(Token beginToken, Token endToken) {
-  }
+  void endType(Token beginToken, Token endToken) {}
 
-  void beginTypeArguments(Token token) {
-  }
+  void beginTypeArguments(Token token) {}
 
-  void endTypeArguments(int count, Token beginToken, Token endToken) {
-  }
+  void endTypeArguments(int count, Token beginToken, Token endToken) {}
 
-  void handleNoTypeArguments(Token token) {
-  }
+  void handleNoTypeArguments(Token token) {}
 
-  void beginTypeVariable(Token token) {
-  }
+  void beginTypeVariable(Token token) {}
 
-  void endTypeVariable(Token token) {
-  }
+  void endTypeVariable(Token token) {}
 
-  void beginTypeVariables(Token token) {
-  }
+  void beginTypeVariables(Token token) {}
 
-  void endTypeVariables(int count, Token beginToken, Token endToken) {
-  }
+  void endTypeVariables(int count, Token beginToken, Token endToken) {}
 
-  void beginUnnamedFunction(Token token) {
-  }
+  void beginUnnamedFunction(Token token) {}
 
-  void endUnnamedFunction(Token token) {
-  }
+  void endUnnamedFunction(Token token) {}
 
-  void beginVariablesDeclaration(Token token) {
-  }
+  void beginVariablesDeclaration(Token token) {}
 
-  void endVariablesDeclaration(int count, Token endToken) {
-  }
+  void endVariablesDeclaration(int count, Token endToken) {}
 
-  void beginWhileStatement(Token token) {
-  }
+  void beginWhileStatement(Token token) {}
 
-  void endWhileStatement(Token whileKeyword, Token endToken) {
-  }
+  void endWhileStatement(Token whileKeyword, Token endToken) {}
 
   void handleAsOperator(Token operathor, Token endToken) {
     // TODO(ahe): Rename [operathor] to "operator" when VM bug is fixed.
   }
 
-  void handleAssignmentExpression(Token token) {
-  }
+  void handleAssignmentExpression(Token token) {}
 
-  void handleBinaryExpression(Token token) {
-  }
+  void handleBinaryExpression(Token token) {}
 
-  void handleConditionalExpression(Token question, Token colon) {
-  }
+  void handleConditionalExpression(Token question, Token colon) {}
 
-  void handleConstExpression(Token token) {
-  }
+  void handleConstExpression(Token token) {}
 
-  void handleFunctionTypedFormalParameter(Token token) {
-  }
+  void handleFunctionTypedFormalParameter(Token token) {}
 
-  void handleIdentifier(Token token) {
-  }
+  void handleIdentifier(Token token) {}
 
-  void handleIndexedExpression(Token openCurlyBracket,
-                               Token closeCurlyBracket) {
-  }
+  void handleIndexedExpression(
+      Token openCurlyBracket, Token closeCurlyBracket) {}
 
   void handleIsOperator(Token operathor, Token not, Token endToken) {
     // TODO(ahe): Rename [operathor] to "operator" when VM bug is fixed.
   }
 
-  void handleLiteralBool(Token token) {
-  }
+  void handleLiteralBool(Token token) {}
 
-  void handleBreakStatement(bool hasTarget,
-                            Token breakKeyword, Token endToken) {
-  }
+  void handleBreakStatement(
+      bool hasTarget, Token breakKeyword, Token endToken) {}
 
-  void handleContinueStatement(bool hasTarget,
-                               Token continueKeyword, Token endToken) {
-  }
+  void handleContinueStatement(
+      bool hasTarget, Token continueKeyword, Token endToken) {}
 
-  void handleEmptyStatement(Token token) {
-  }
+  void handleEmptyStatement(Token token) {}
 
-  void handleAssertStatement(Token assertKeyword,
-                             Token commaToken, Token semicolonToken) {
-  }
+  void handleAssertStatement(
+      Token assertKeyword, Token commaToken, Token semicolonToken) {}
 
   /** Called with either the token containing a double literal, or
     * an immediately preceding "unary plus" token.
     */
-  void handleLiteralDouble(Token token) {
-  }
+  void handleLiteralDouble(Token token) {}
 
   /** Called with either the token containing an integer literal,
     * or an immediately preceding "unary plus" token.
     */
-  void handleLiteralInt(Token token) {
-  }
+  void handleLiteralInt(Token token) {}
 
-  void handleLiteralList(int count, Token beginToken, Token constKeyword,
-                         Token endToken) {
-  }
+  void handleLiteralList(
+      int count, Token beginToken, Token constKeyword, Token endToken) {}
 
-  void handleLiteralMap(int count, Token beginToken, Token constKeyword,
-                        Token endToken) {
-  }
+  void handleLiteralMap(
+      int count, Token beginToken, Token constKeyword, Token endToken) {}
 
-  void handleLiteralNull(Token token) {
-  }
+  void handleLiteralNull(Token token) {}
 
-  void handleModifier(Token token) {
-  }
+  void handleModifier(Token token) {}
 
-  void handleModifiers(int count) {
-  }
+  void handleModifiers(int count) {}
 
-  void handleNamedArgument(Token colon) {
-  }
+  void handleNamedArgument(Token colon) {}
 
-  void handleNewExpression(Token token) {
-  }
+  void handleNewExpression(Token token) {}
 
-  void handleNoArguments(Token token) {
-  }
+  void handleNoArguments(Token token) {}
 
-  void handleNoExpression(Token token) {
-  }
+  void handleNoExpression(Token token) {}
 
-  void handleNoType(Token token) {
-  }
+  void handleNoType(Token token) {}
 
-  void handleNoTypeVariables(Token token) {
-  }
+  void handleNoTypeVariables(Token token) {}
 
-  void handleOperator(Token token) {
-  }
+  void handleOperator(Token token) {}
 
-  void handleOperatorName(Token operatorKeyword, Token token) {
-  }
+  void handleOperatorName(Token operatorKeyword, Token token) {}
 
-  void handleParenthesizedExpression(BeginGroupToken token) {
-  }
+  void handleParenthesizedExpression(BeginGroupToken token) {}
 
-  void handleQualified(Token period) {
-  }
+  void handleQualified(Token period) {}
 
-  void handleStringPart(Token token) {
-  }
+  void handleStringPart(Token token) {}
 
-  void handleSuperExpression(Token token) {
-  }
+  void handleSuperExpression(Token token) {}
 
-  void handleSwitchCase(int labelCount, int expressionCount,
-                        Token defaultKeyword, int statementCount,
-                        Token firstToken, Token endToken) {
-  }
+  void handleSwitchCase(
+      int labelCount,
+      int expressionCount,
+      Token defaultKeyword,
+      int statementCount,
+      Token firstToken,
+      Token endToken) {}
 
-  void handleThisExpression(Token token) {
-  }
+  void handleThisExpression(Token token) {}
 
-  void handleUnaryPostfixAssignmentExpression(Token token) {
-  }
+  void handleUnaryPostfixAssignmentExpression(Token token) {}
 
-  void handleUnaryPrefixExpression(Token token) {
-  }
+  void handleUnaryPrefixExpression(Token token) {}
 
-  void handleUnaryPrefixAssignmentExpression(Token token) {
-  }
+  void handleUnaryPrefixAssignmentExpression(Token token) {}
 
-  void handleValuedFormalParameter(Token equals, Token token) {
-  }
+  void handleValuedFormalParameter(Token equals, Token token) {}
 
-  void handleVoidKeyword(Token token) {
-  }
+  void handleVoidKeyword(Token token) {}
 
-  void beginYieldStatement(Token token) {
-  }
+  void beginYieldStatement(Token token) {}
 
-  void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {
-  }
+  void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {}
 
   Token expected(String string, Token token) {
     if (token is ErrorToken) {
@@ -614,9 +435,8 @@
   }
 
   Token synthesizeIdentifier(Token token) {
-    Token synthesizedToken =
-        new StringToken.fromString(
-            Precedence.IDENTIFIER_INFO, '?', token.charOffset);
+    Token synthesizedToken = new StringToken.fromString(
+        Precedence.IDENTIFIER_INFO, '?', token.charOffset);
     synthesizedToken.next = token.next;
     return synthesizedToken;
   }
@@ -726,9 +546,8 @@
     throw new ParserError("$message @ ${token.charOffset}");
   }
 
-  void reportError(Spannable spannable,
-                   MessageKind messageKind,
-                   [Map arguments = const {}]) {
+  void reportError(Spannable spannable, MessageKind messageKind,
+      [Map arguments = const {}]) {
     MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
     String message = template.message(arguments, true).toString();
     Token token;
@@ -795,13 +614,7 @@
 }
 
 String closeBraceFor(String openBrace) {
-  return const {
-    '(': ')',
-    '[': ']',
-    '{': '}',
-    '<': '>',
-    r'${': '}',
-  }[openBrace];
+  return const {'(': ')', '[': ']', '{': '}', '<': '>', r'${': '}',}[openBrace];
 }
 
 class ParserError {
diff --git a/pkg/compiler/lib/src/parser/member_listener.dart b/pkg/compiler/lib/src/parser/member_listener.dart
index 36ebc34..a13024c 100644
--- a/pkg/compiler/lib/src/parser/member_listener.dart
+++ b/pkg/compiler/lib/src/parser/member_listener.dart
@@ -5,41 +5,31 @@
 library dart2js.parser.member_listener;
 
 import '../common.dart';
-import '../elements/elements.dart' show
-    Element,
-    ElementKind,
-    Elements,
-    MetadataAnnotation;
-import '../elements/modelx.dart' show
-    ClassElementX,
-    ElementX,
-    FieldElementX,
-    VariableList;
-import '../tokens/token.dart' show
-    Token;
+import '../elements/elements.dart'
+    show Element, ElementKind, Elements, MetadataAnnotation;
+import '../elements/modelx.dart'
+    show ClassElementX, ElementX, FieldElementX, VariableList;
+import '../tokens/token.dart' show Token;
 import '../tree/tree.dart';
 
-import 'element_listener.dart' show
-    ScannerOptions;
-import 'node_listener.dart' show
-    NodeListener;
-import 'partial_elements.dart' show
-    PartialConstructorElement,
-    PartialFunctionElement,
-    PartialMetadataAnnotation;
+import 'element_listener.dart' show ScannerOptions;
+import 'node_listener.dart' show NodeListener;
+import 'partial_elements.dart'
+    show
+        PartialConstructorElement,
+        PartialFunctionElement,
+        PartialMetadataAnnotation;
 
 class MemberListener extends NodeListener {
   final ClassElementX enclosingClass;
 
-  MemberListener(ScannerOptions scannerOptions,
-                 DiagnosticReporter listener,
-                 ClassElementX enclosingElement)
+  MemberListener(ScannerOptions scannerOptions, DiagnosticReporter listener,
+      ClassElementX enclosingElement)
       : this.enclosingClass = enclosingElement,
         super(scannerOptions, listener, enclosingElement.compilationUnit);
 
   bool isConstructorName(Node nameNode) {
-    if (enclosingClass == null ||
-        enclosingClass.kind != ElementKind.CLASS) {
+    if (enclosingClass == null || enclosingClass.kind != ElementKind.CLASS) {
       return false;
     }
     String name;
@@ -90,15 +80,12 @@
       if (getOrSet != null) {
         recoverableError(getOrSet, 'illegal modifier');
       }
-      memberElement = new PartialConstructorElement(
-          name, beginToken, endToken,
-          ElementKind.GENERATIVE_CONSTRUCTOR,
-          method.modifiers,
-          enclosingClass);
+      memberElement = new PartialConstructorElement(name, beginToken, endToken,
+          ElementKind.GENERATIVE_CONSTRUCTOR, method.modifiers, enclosingClass);
     } else {
-      memberElement = new PartialFunctionElement(
-          name, beginToken, getOrSet, endToken,
-          method.modifiers, enclosingClass, hasBody: method.hasBody);
+      memberElement = new PartialFunctionElement(name, beginToken, getOrSet,
+          endToken, method.modifiers, enclosingClass,
+          hasBody: method.hasBody);
     }
     addMember(memberElement);
   }
@@ -118,7 +105,9 @@
       }
     }
     Element memberElement = new PartialConstructorElement(
-        name, beginToken, endToken,
+        name,
+        beginToken,
+        endToken,
         ElementKind.FACTORY_CONSTRUCTOR,
         method.modifiers,
         enclosingClass);
@@ -132,19 +121,16 @@
     Modifiers modifiers = variableDefinitions.modifiers;
     pushNode(null);
     void buildFieldElement(Identifier name, VariableList fields) {
-      Element element =
-          new FieldElementX(name, enclosingClass, fields);
+      Element element = new FieldElementX(name, enclosingClass, fields);
       addMember(element);
     }
     buildFieldElements(modifiers, variableDefinitions.definitions,
-                       enclosingClass,
-                       buildFieldElement, beginToken, endToken,
-                       hasParseError);
+        enclosingClass, buildFieldElement, beginToken, endToken, hasParseError);
   }
 
   void endInitializer(Token assignmentOperator) {
     pushNode(null); // Super expects an expression, but
-                    // ClassElementParser just skips expressions.
+    // ClassElementParser just skips expressions.
     super.endInitializer(assignmentOperator);
   }
 
diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart
index b5f1db2..df288b6 100644
--- a/pkg/compiler/lib/src/parser/node_listener.dart
+++ b/pkg/compiler/lib/src/parser/node_listener.dart
@@ -5,33 +5,21 @@
 library dart2js.parser.node_listener;
 
 import '../common.dart';
-import '../elements/elements.dart' show
-    CompilationUnitElement;
+import '../elements/elements.dart' show CompilationUnitElement;
 import '../native/native.dart' as native;
-import '../tokens/precedence_constants.dart' as Precedence show
-    BAD_INPUT_INFO,
-    EOF_INFO,
-    INDEX_INFO;
-import '../tokens/token.dart' show
-    ErrorToken,
-    StringToken,
-    Token;
+import '../tokens/precedence_constants.dart' as Precedence
+    show BAD_INPUT_INFO, EOF_INFO, INDEX_INFO;
+import '../tokens/token.dart' show ErrorToken, StringToken, Token;
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Link;
+import '../util/util.dart' show Link;
 
-import 'element_listener.dart' show
-    ElementListener,
-    ScannerOptions;
-import 'partial_elements.dart' show
-    PartialFunctionElement;
+import 'element_listener.dart' show ElementListener, ScannerOptions;
+import 'partial_elements.dart' show PartialFunctionElement;
 
 class NodeListener extends ElementListener {
-  NodeListener(
-      ScannerOptions scannerOptions,
-      DiagnosticReporter reporter,
+  NodeListener(ScannerOptions scannerOptions, DiagnosticReporter reporter,
       CompilationUnitElement element)
-    : super(scannerOptions, reporter, element, null);
+      : super(scannerOptions, reporter, element, null);
 
   void addLibraryTag(LibraryTag tag) {
     pushNode(tag);
@@ -42,8 +30,7 @@
   }
 
   void endClassDeclaration(int interfacesCount, Token beginToken,
-                           Token extendsKeyword, Token implementsKeyword,
-                           Token endToken) {
+      Token extendsKeyword, Token implementsKeyword, Token endToken) {
     NodeList body = popNode();
     NodeList interfaces =
         makeNodeList(interfacesCount, implementsKeyword, null, ",");
@@ -52,8 +39,7 @@
     Identifier name = popNode();
     Modifiers modifiers = popNode();
     pushNode(new ClassNode(modifiers, name, typeParameters, supertype,
-                           interfaces, beginToken, extendsKeyword, body,
-                           endToken));
+        interfaces, beginToken, extendsKeyword, body, endToken));
   }
 
   void endCompilationUnit(int count, Token token) {
@@ -65,22 +51,19 @@
     NodeList typeParameters = popNode();
     Identifier name = popNode();
     TypeAnnotation returnType = popNode();
-    pushNode(new Typedef(returnType, name, typeParameters, formals,
-                         typedefKeyword, endToken));
+    pushNode(new Typedef(
+        returnType, name, typeParameters, formals, typedefKeyword, endToken));
   }
 
-  void endNamedMixinApplication(Token classKeyword,
-                                Token implementsKeyword,
-                                Token endToken) {
+  void endNamedMixinApplication(
+      Token classKeyword, Token implementsKeyword, Token endToken) {
     NodeList interfaces = (implementsKeyword != null) ? popNode() : null;
     Node mixinApplication = popNode();
     Modifiers modifiers = popNode();
     NodeList typeParameters = popNode();
     Identifier name = popNode();
-    pushNode(new NamedMixinApplication(name, typeParameters,
-                                       modifiers, mixinApplication,
-                                       interfaces,
-                                       classKeyword, endToken));
+    pushNode(new NamedMixinApplication(name, typeParameters, modifiers,
+        mixinApplication, interfaces, classKeyword, endToken));
   }
 
   void endEnum(Token enumKeyword, Token endBrace, int count) {
@@ -103,12 +86,12 @@
   void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
     popNode(); // body
     popNode(); // formalParameters
+    popNode(); // typeVariables
     Identifier name = popNode();
     popNode(); // type
     Modifiers modifiers = popNode();
-    PartialFunctionElement element = new PartialFunctionElement(
-        name.source, beginToken, getOrSet, endToken,
-        modifiers, compilationUnitElement);
+    PartialFunctionElement element = new PartialFunctionElement(name.source,
+        beginToken, getOrSet, endToken, modifiers, compilationUnitElement);
     pushElement(element);
   }
 
@@ -145,8 +128,8 @@
     pushNode(null);
   }
 
-  void endConstructorReference(Token start, Token periodBeforeName,
-                               Token endToken) {
+  void endConstructorReference(
+      Token start, Token periodBeforeName, Token endToken) {
     Identifier name = null;
     if (periodBeforeName != null) {
       name = popNode();
@@ -176,13 +159,12 @@
     pushNode(constructor);
   }
 
-  void endRedirectingFactoryBody(Token beginToken,
-                                 Token endToken) {
+  void endRedirectingFactoryBody(Token beginToken, Token endToken) {
     pushNode(new RedirectingFactoryBody(beginToken, endToken, popNode()));
   }
 
-  void endReturnStatement(bool hasExpression,
-                          Token beginToken, Token endToken) {
+  void endReturnStatement(
+      bool hasExpression, Token beginToken, Token endToken) {
     Expression expression = hasExpression ? popNode() : null;
     pushNode(new Return(beginToken, endToken, expression));
   }
@@ -207,8 +189,8 @@
       pushNode(null);
       reportErrorToken(token);
     } else {
-      reportFatalError(token,
-                       "Expected a function body, but got '${token.value}'.");
+      reportFatalError(
+          token, "Expected a function body, but got '${token.value}'.");
     }
     return skipToEof(token);
   }
@@ -218,8 +200,8 @@
       reportErrorToken(token);
       return skipToEof(token);
     } else {
-      reportFatalError(token,
-                       "Expected a class body, but got '${token.value}'.");
+      reportFatalError(
+          token, "Expected a class body, but got '${token.value}'.");
       return skipToEof(token);
     }
   }
@@ -256,27 +238,23 @@
       if (argumentSend == null) {
         // TODO(ahe): The parser should diagnose this problem, not
         // this listener.
-        reportFatalError(argument,
-                         'Expected an identifier.');
+        reportFatalError(argument, 'Expected an identifier.');
       }
       if (argumentSend.receiver != null) internalError(node: argument);
       if (argument is SendSet) internalError(node: argument);
-      pushNode(argument.asSend().copyWithReceiver(receiver,
-            identical(tokenString, '?.')));
+      pushNode(argument
+          .asSend()
+          .copyWithReceiver(receiver, identical(tokenString, '?.')));
     } else {
       NodeList arguments = new NodeList.singleton(argument);
       pushNode(new Send(receiver, new Operator(token), arguments));
     }
     if (identical(tokenString, '===')) {
-      reporter.reportErrorMessage(
-          token,
-          MessageKind.UNSUPPORTED_EQ_EQ_EQ,
+      reporter.reportErrorMessage(token, MessageKind.UNSUPPORTED_EQ_EQ_EQ,
           {'lhs': receiver, 'rhs': argument});
     }
     if (identical(tokenString, '!==')) {
-      reporter.reportErrorMessage(
-          token,
-          MessageKind.UNSUPPORTED_BANG_EQ_EQ,
+      reporter.reportErrorMessage(token, MessageKind.UNSUPPORTED_BANG_EQ_EQ,
           {'lhs': receiver, 'rhs': argument});
     }
   }
@@ -313,15 +291,14 @@
       arguments = new NodeList.singleton(arg);
     }
     Operator op = new Operator(token);
-    pushNode(new SendSet(send.receiver, send.selector, op, arguments,
-        send.isConditional));
+    pushNode(new SendSet(
+        send.receiver, send.selector, op, arguments, send.isConditional));
   }
 
   void reportNotAssignable(Node node) {
     // TODO(ahe): The parser should diagnose this problem, not this
     // listener.
-    reportFatalError(node,
-                     'Not assignable.');
+    reportFatalError(node, 'Not assignable.');
   }
 
   void handleConditionalExpression(Token question, Token colon) {
@@ -334,6 +311,7 @@
 
   void endSend(Token token) {
     NodeList arguments = popNode();
+    popNode(); // typeArguments
     Node selector = popNode();
     // TODO(ahe): Handle receiver.
     pushNode(new Send(null, selector, arguments));
@@ -368,13 +346,13 @@
     AsyncModifier asyncModifier = popNode();
     NodeList initializers = popNode();
     NodeList formals = popNode();
+    popNode(); // typeVariables
     // The name can be an identifier or a send in case of named constructors.
     Expression name = popNode();
     TypeAnnotation type = popNode();
     Modifiers modifiers = popNode();
-    pushNode(new FunctionExpression(name, formals, body, type,
-                                    modifiers, initializers, getOrSet,
-                                    asyncModifier));
+    pushNode(new FunctionExpression(name, formals, body, type, modifiers,
+        initializers, getOrSet, asyncModifier));
   }
 
   void endFunctionDeclaration(Token endToken) {
@@ -406,8 +384,8 @@
     pushNode(new If(condition, thenPart, elsePart, ifToken, elseToken));
   }
 
-  void endForStatement(int updateExpressionCount,
-                       Token beginToken, Token endToken) {
+  void endForStatement(
+      int updateExpressionCount, Token beginToken, Token endToken) {
     Statement body = popNode();
     NodeList updates = makeNodeList(updateExpressionCount, null, null, ',');
     Statement condition = popNode();
@@ -419,8 +397,8 @@
     pushNode(null);
   }
 
-  void endDoWhileStatement(Token doKeyword, Token whileKeyword,
-                           Token endToken) {
+  void endDoWhileStatement(
+      Token doKeyword, Token whileKeyword, Token endToken) {
     Expression condition = popNode();
     Statement body = popNode();
     pushNode(new DoWhile(body, condition, doKeyword, whileKeyword, endToken));
@@ -481,11 +459,11 @@
     Operator op = new Operator(token);
 
     if (isPrefix) {
-      pushNode(new SendSet.prefix(send.receiver, send.selector, op, argument,
-          send.isConditional));
+      pushNode(new SendSet.prefix(
+          send.receiver, send.selector, op, argument, send.isConditional));
     } else {
-      pushNode(new SendSet.postfix(send.receiver, send.selector, op, argument,
-          send.isConditional));
+      pushNode(new SendSet.postfix(
+          send.receiver, send.selector, op, argument, send.isConditional));
     }
   }
 
@@ -517,16 +495,16 @@
     AsyncModifier asyncModifier = popNode();
     NodeList initializers = popNode();
     NodeList formalParameters = popNode();
+    popNode(); // typeVariables
     Expression name = popNode();
     TypeAnnotation returnType = popNode();
     Modifiers modifiers = popNode();
     pushNode(new FunctionExpression(name, formalParameters, body, returnType,
-                                    modifiers, initializers, getOrSet,
-                                    asyncModifier));
+        modifiers, initializers, getOrSet, asyncModifier));
   }
 
-  void handleLiteralMap(int count, Token beginToken, Token constKeyword,
-                        Token endToken) {
+  void handleLiteralMap(
+      int count, Token beginToken, Token constKeyword, Token endToken) {
     NodeList entries = makeNodeList(count, beginToken, endToken, ',');
     NodeList typeArguments = popNode();
     pushNode(new LiteralMap(typeArguments, entries, constKeyword));
@@ -538,19 +516,19 @@
     pushNode(new LiteralMapEntry(key, colon, value));
   }
 
-  void handleLiteralList(int count, Token beginToken, Token constKeyword,
-                         Token endToken) {
+  void handleLiteralList(
+      int count, Token beginToken, Token constKeyword, Token endToken) {
     NodeList elements = makeNodeList(count, beginToken, endToken, ',');
     pushNode(new LiteralList(popNode(), elements, constKeyword));
   }
 
-  void handleIndexedExpression(Token openSquareBracket,
-                               Token closeSquareBracket) {
+  void handleIndexedExpression(
+      Token openSquareBracket, Token closeSquareBracket) {
     NodeList arguments =
         makeNodeList(1, openSquareBracket, closeSquareBracket, null);
     Node receiver = popNode();
-    Token token = new StringToken.fromString(Precedence.INDEX_INFO, '[]',
-                                  openSquareBracket.charOffset);
+    Token token = new StringToken.fromString(
+        Precedence.INDEX_INFO, '[]', openSquareBracket.charOffset);
     Node selector = new Operator(token);
     pushNode(new Send(receiver, selector, arguments));
   }
@@ -581,8 +559,8 @@
     pushNode(new NamedArgument(name, colon, expression));
   }
 
-  void endOptionalFormalParameters(int count,
-                                   Token beginToken, Token endToken) {
+  void endOptionalFormalParameters(
+      int count, Token beginToken, Token endToken) {
     pushNode(makeNodeList(count, beginToken, endToken, ','));
   }
 
@@ -591,15 +569,15 @@
     Identifier name = popNode();
     TypeAnnotation returnType = popNode();
     pushNode(null); // Signal "no type" to endFormalParameter.
-    pushNode(new FunctionExpression(name, formals, null, returnType,
-                                    Modifiers.EMPTY, null, null, null));
+    pushNode(new FunctionExpression(
+        name, formals, null, returnType, Modifiers.EMPTY, null, null, null));
   }
 
   void handleValuedFormalParameter(Token equals, Token token) {
     Expression defaultValue = popNode();
     Expression parameterName = popNode();
     pushNode(new SendSet(null, parameterName, new Operator(equals),
-                         new NodeList.singleton(defaultValue)));
+        new NodeList.singleton(defaultValue)));
   }
 
   void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) {
@@ -609,8 +587,8 @@
     }
     NodeList catchBlocks = makeNodeList(catchCount, null, null, null);
     Block tryBlock = popNode();
-    pushNode(new TryStatement(tryBlock, catchBlocks, finallyBlock,
-                              tryKeyword, finallyKeyword));
+    pushNode(new TryStatement(
+        tryBlock, catchBlocks, finallyBlock, tryKeyword, finallyKeyword));
   }
 
   void handleCaseMatch(Token caseKeyword, Token colon) {
@@ -619,7 +597,7 @@
 
   void handleCatchBlock(Token onKeyword, Token catchKeyword) {
     Block block = popNode();
-    NodeList formals = catchKeyword != null? popNode(): null;
+    NodeList formals = catchKeyword != null ? popNode() : null;
     TypeAnnotation type = onKeyword != null ? popNode() : null;
     pushNode(new CatchBlock(type, formals, block, onKeyword, catchKeyword));
   }
@@ -640,18 +618,17 @@
     pushNode(new NodeList(beginToken, caseNodes, endToken, null));
   }
 
-  void handleSwitchCase(int labelCount, int caseCount,
-                        Token defaultKeyword, int statementCount,
-                        Token firstToken, Token endToken) {
+  void handleSwitchCase(int labelCount, int caseCount, Token defaultKeyword,
+      int statementCount, Token firstToken, Token endToken) {
     NodeList statements = makeNodeList(statementCount, null, null, null);
     NodeList labelsAndCases =
         makeNodeList(labelCount + caseCount, null, null, null);
-    pushNode(new SwitchCase(labelsAndCases, defaultKeyword, statements,
-                            firstToken));
+    pushNode(
+        new SwitchCase(labelsAndCases, defaultKeyword, statements, firstToken));
   }
 
-  void handleBreakStatement(bool hasTarget,
-                            Token breakKeyword, Token endToken) {
+  void handleBreakStatement(
+      bool hasTarget, Token breakKeyword, Token endToken) {
     Identifier target = null;
     if (hasTarget) {
       target = popNode();
@@ -659,8 +636,8 @@
     pushNode(new BreakStatement(target, breakKeyword, endToken));
   }
 
-  void handleContinueStatement(bool hasTarget,
-                               Token continueKeyword, Token endToken) {
+  void handleContinueStatement(
+      bool hasTarget, Token continueKeyword, Token endToken) {
     Identifier target = null;
     if (hasTarget) {
       target = popNode();
@@ -698,21 +675,21 @@
     handleModifiers(modifierCount);
     Modifiers modifiers = popNode();
 
-    pushNode(new FunctionExpression(name, formals, body, null,
-                                    modifiers, null, null, asyncModifier));
+    pushNode(new FunctionExpression(
+        name, formals, body, null, modifiers, null, null, asyncModifier));
   }
 
-  void endForIn(Token awaitToken, Token forToken,
-                Token inKeyword, Token endToken) {
+  void endForIn(
+      Token awaitToken, Token forToken, Token inKeyword, Token endToken) {
     Statement body = popNode();
     Expression expression = popNode();
     Node declaredIdentifier = popNode();
     if (awaitToken == null) {
-      pushNode(new SyncForIn(declaredIdentifier, expression, body,
-                             forToken, inKeyword));
+      pushNode(new SyncForIn(
+          declaredIdentifier, expression, body, forToken, inKeyword));
     } else {
       pushNode(new AsyncForIn(declaredIdentifier, expression, body, awaitToken,
-                              forToken, inKeyword));
+          forToken, inKeyword));
     }
   }
 
@@ -739,8 +716,7 @@
       Node receiver = popNode();
       if (typeArguments != null) {
         receiver = new TypeAnnotation(receiver, typeArguments);
-        recoverableError(typeArguments,
-                         'Type arguments are not allowed here.');
+        recoverableError(typeArguments, 'Type arguments are not allowed here.');
       } else {
         Identifier identifier = receiver.asIdentifier();
         Send send = receiver.asSend();
@@ -760,30 +736,27 @@
       endConstructorReference(beginToken, periodBeforeName, endToken);
       Node constructor = popNode();
       pushNode(new Metadata(beginToken,
-          new NewExpression(null,
-              new Send(null, constructor, arguments))));
+          new NewExpression(null, new Send(null, constructor, arguments))));
     }
   }
 
-  void handleAssertStatement(Token assertKeyword,
-                             Token commaToken, Token semicolonToken) {
+  void handleAssertStatement(
+      Token assertKeyword, Token commaToken, Token semicolonToken) {
     Node message;
     Node condition;
     if (commaToken != null) {
       message = popNode();
     }
     condition = popNode();
-    pushNode(new Assert(assertKeyword, condition,
-                        message, semicolonToken));
+    pushNode(new Assert(assertKeyword, condition, message, semicolonToken));
   }
 
   void endUnnamedFunction(Token token) {
     Statement body = popNode();
     AsyncModifier asyncModifier = popNode();
     NodeList formals = popNode();
-    pushNode(new FunctionExpression(null, formals, body, null,
-                                    Modifiers.EMPTY, null, null,
-                                    asyncModifier));
+    pushNode(new FunctionExpression(
+        null, formals, body, null, Modifiers.EMPTY, null, null, asyncModifier));
   }
 
   void handleIsOperator(Token operathor, Token not, Token endToken) {
diff --git a/pkg/compiler/lib/src/parser/parser.dart b/pkg/compiler/lib/src/parser/parser.dart
index 80e6de2..0a8d68d 100644
--- a/pkg/compiler/lib/src/parser/parser.dart
+++ b/pkg/compiler/lib/src/parser/parser.dart
@@ -4,64 +4,63 @@
 
 library dart2js.parser;
 
-import '../options.dart' show
-    ParserOptions;
+import '../options.dart' show ParserOptions;
 import '../common.dart';
-import '../tokens/keyword.dart' show
-    Keyword;
-import '../tokens/precedence.dart' show
-    PrecedenceInfo;
-import '../tokens/precedence_constants.dart' show
-    AS_INFO,
-    ASSIGNMENT_PRECEDENCE,
-    CASCADE_PRECEDENCE,
-    EQUALITY_PRECEDENCE,
-    GT_INFO,
-    GT_GT_INFO,
-    IS_INFO,
-    MINUS_MINUS_INFO,
-    OPEN_PAREN_INFO,
-    OPEN_SQUARE_BRACKET_INFO,
-    PERIOD_INFO,
-    PLUS_PLUS_INFO,
-    POSTFIX_PRECEDENCE,
-    QUESTION_INFO,
-    QUESTION_PERIOD_INFO,
-    RELATIONAL_PRECEDENCE;
-import '../tokens/token.dart' show
-    BeginGroupToken,
-    isUserDefinableOperator,
-    KeywordToken,
-    SymbolToken,
-    Token;
-import '../tokens/token_constants.dart' show
-    BAD_INPUT_TOKEN,
-    COMMA_TOKEN,
-    DOUBLE_TOKEN,
-    EOF_TOKEN,
-    EQ_TOKEN,
-    FUNCTION_TOKEN,
-    HASH_TOKEN,
-    HEXADECIMAL_TOKEN,
-    IDENTIFIER_TOKEN,
-    INT_TOKEN,
-    KEYWORD_TOKEN,
-    LT_TOKEN,
-    OPEN_CURLY_BRACKET_TOKEN,
-    OPEN_PAREN_TOKEN,
-    OPEN_SQUARE_BRACKET_TOKEN,
-    PERIOD_TOKEN,
-    SEMICOLON_TOKEN,
-    STRING_INTERPOLATION_IDENTIFIER_TOKEN,
-    STRING_INTERPOLATION_TOKEN,
-    STRING_TOKEN;
-import '../util/characters.dart' as Characters show
-    $CLOSE_CURLY_BRACKET;
-import '../util/util.dart' show
-    Link;
+import '../tokens/keyword.dart' show Keyword;
+import '../tokens/precedence.dart' show PrecedenceInfo;
+import '../tokens/precedence_constants.dart'
+    show
+        AS_INFO,
+        ASSIGNMENT_PRECEDENCE,
+        CASCADE_PRECEDENCE,
+        EQUALITY_PRECEDENCE,
+        GT_INFO,
+        GT_GT_INFO,
+        IS_INFO,
+        MINUS_MINUS_INFO,
+        OPEN_PAREN_INFO,
+        OPEN_SQUARE_BRACKET_INFO,
+        PERIOD_INFO,
+        PLUS_PLUS_INFO,
+        POSTFIX_PRECEDENCE,
+        QUESTION_INFO,
+        QUESTION_PERIOD_INFO,
+        RELATIONAL_PRECEDENCE;
+import '../tokens/token.dart'
+    show
+        BeginGroupToken,
+        isUserDefinableOperator,
+        KeywordToken,
+        SymbolToken,
+        Token;
+import '../tokens/token_constants.dart'
+    show
+        BAD_INPUT_TOKEN,
+        COMMA_TOKEN,
+        DOUBLE_TOKEN,
+        EOF_TOKEN,
+        EQ_TOKEN,
+        FUNCTION_TOKEN,
+        GT_TOKEN,
+        GT_GT_TOKEN,
+        HASH_TOKEN,
+        HEXADECIMAL_TOKEN,
+        IDENTIFIER_TOKEN,
+        INT_TOKEN,
+        KEYWORD_TOKEN,
+        LT_TOKEN,
+        OPEN_CURLY_BRACKET_TOKEN,
+        OPEN_PAREN_TOKEN,
+        OPEN_SQUARE_BRACKET_TOKEN,
+        PERIOD_TOKEN,
+        SEMICOLON_TOKEN,
+        STRING_INTERPOLATION_IDENTIFIER_TOKEN,
+        STRING_INTERPOLATION_TOKEN,
+        STRING_TOKEN;
+import '../util/characters.dart' as Characters show $CLOSE_CURLY_BRACKET;
+import '../util/util.dart' show Link;
 
-import 'listener.dart' show
-    Listener;
+import 'listener.dart' show Listener;
 
 class FormalParameterType {
   final String type;
@@ -103,8 +102,12 @@
   bool mayParseFunctionExpressions = true;
   bool asyncAwaitKeywordsEnabled;
 
-  Parser(this.listener, this.parserOptions,
-      {this.asyncAwaitKeywordsEnabled: false});
+  final bool enableGenericMethodSyntax;
+
+  Parser(this.listener, ParserOptions parserOptions,
+      {this.asyncAwaitKeywordsEnabled: false}) :
+          parserOptions = parserOptions,
+          enableGenericMethodSyntax = parserOptions.enableGenericMethodSyntax;
 
   Token parseUnit(Token token) {
     listener.beginCompilationUnit(token);
@@ -121,8 +124,8 @@
   Token parseTopLevelDeclaration(Token token) {
     token = parseMetadataStar(token);
     final String value = token.stringValue;
-    if ((identical(value, 'abstract') && optional('class', token.next))
-        || identical(value, 'class')) {
+    if ((identical(value, 'abstract') && optional('class', token.next)) ||
+        identical(value, 'class')) {
       return parseClassOrNamedMixinApplication(token);
     } else if (identical(value, 'enum')) {
       return parseEnum(token);
@@ -470,13 +473,13 @@
       token = parseExpression(token.next);
       listener.handleValuedFormalParameter(equal, token);
       if (type.isRequired) {
-        listener.reportError(equal,
-            MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT);
+        listener.reportError(
+            equal, MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT);
       } else if (type.isNamed && identical('=', value)) {
         listener.reportError(equal, MessageKind.NAMED_PARAMETER_WITH_EQUALS);
       } else if (type.isPositional && identical(':', value)) {
-        listener.reportError(equal,
-            MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS);
+        listener.reportError(
+            equal, MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS);
       }
     }
     listener.endFormalParameter(thisKeyword);
@@ -490,8 +493,8 @@
     int parameterCount = 0;
     do {
       token = token.next;
-      var type = isNamed ? FormalParameterType.NAMED
-                         : FormalParameterType.POSITIONAL;
+      var type =
+          isNamed ? FormalParameterType.NAMED : FormalParameterType.POSITIONAL;
       token = parseFormalParameter(token, type);
       ++parameterCount;
     } while (optional(',', token));
@@ -518,13 +521,88 @@
     if (identical(kind, KEYWORD_TOKEN)) {
       Keyword keyword = (token as KeywordToken).keyword;
       String value = keyword.syntax;
-      return keyword.isPseudo
-          || (identical(value, 'dynamic'))
-          || (identical(value, 'void'));
+      return keyword.isPseudo ||
+          (identical(value, 'dynamic')) ||
+          (identical(value, 'void'));
     }
     return false;
   }
 
+  /// Returns true if [token] matches '<' type (',' type)* '>' '(', and
+  /// otherwise returns false. The final '(' is not part of the grammar
+  /// construct `typeArguments`, but it is required here such that type
+  /// arguments in generic method invocations can be recognized, and as few as
+  /// possible other constructs will pass (e.g., 'a < C, D > 3').
+  bool isValidMethodTypeArguments(Token token) {
+    return tryParseMethodTypeArguments(token) != null;
+  }
+
+  /// Returns token after match if [token] matches '<' type (',' type)* '>' '(',
+  /// and otherwise returns null. Does not produce listener events. With respect
+  /// to the final '(', please see the description of
+  /// [isValidMethodTypeArguments].
+  Token tryParseMethodTypeArguments(Token token) {
+    if (!identical(token.kind, LT_TOKEN)) return null;
+    BeginGroupToken beginToken = token;
+    Token endToken = beginToken.endGroup;
+    if (endToken == null || !identical(endToken.next.kind, OPEN_PAREN_TOKEN)) {
+      return null;
+    }
+    token = tryParseType(token.next);
+    while (token != null && identical(token.kind, COMMA_TOKEN)) {
+      token = tryParseType(token.next);
+    }
+    if (token == null || !identical(token.kind, GT_TOKEN)) return null;
+    return token.next;
+  }
+
+  /// Returns token after match if [token] matches typeName typeArguments?, and
+  /// otherwise returns null. Does not produce listener events.
+  Token tryParseType(Token token) {
+    token = tryParseQualified(token);
+    if (token == null) return null;
+    Token tokenAfterQualified = token;
+    token = tryParseNestedTypeArguments(token);
+    return token == null ? tokenAfterQualified : token;
+  }
+
+  /// Returns token after match if [token] matches identifier ('.' identifier)?,
+  /// and otherwise returns null. Does not produce listener events.
+  Token tryParseQualified(Token token) {
+    if (!identical(token.kind, IDENTIFIER_TOKEN)) return null;
+    token = token.next;
+    if (!identical(token.kind, PERIOD_TOKEN)) return token;
+    token = token.next;
+    if (!identical(token.kind, IDENTIFIER_TOKEN)) return null;
+    return token.next;
+  }
+
+  /// Returns token after match if [token] matches '<' type (',' type)* '>',
+  /// and otherwise returns null. Does not produce listener events. The final
+  /// '>' may be the first character in a '>>' token, in which case a synthetic
+  /// '>' token is created and returned, representing the second '>' in the
+  /// '>>' token.
+  Token tryParseNestedTypeArguments(Token token) {
+    if (!identical(token.kind, LT_TOKEN)) return null;
+    // If the initial '<' matches the first '>' in a '>>' token, we will have
+    // `token.endGroup == null`, so we cannot rely on `token.endGroup == null`
+    // to imply that the match must fail. Hence no `token.endGroup == null`
+    // test here.
+    token = tryParseType(token.next);
+    while (token != null && identical(token.kind, COMMA_TOKEN)) {
+      token = tryParseType(token.next);
+    }
+    if (token == null) return null;
+    if (identical(token.kind, GT_TOKEN)) return token.next;
+    if (!identical(token.kind, GT_GT_TOKEN)) return null;
+    // [token] is '>>' of which the final '>' that we are parsing is the first
+    // character. In order to keep the parsing process on track we must return
+    // a synthetic '>' corresponding to the second character of that '>>'.
+    Token syntheticToken = new SymbolToken(GT_INFO, token.charOffset + 1);
+    syntheticToken.next = token.next;
+    return syntheticToken;
+  }
+
   Token parseQualified(Token token) {
     token = parseIdentifier(token);
     while (optional('.', token)) {
@@ -628,8 +706,7 @@
       implementsKeyword = token;
       token = parseTypeList(token.next);
     }
-    listener.endNamedMixinApplication(
-        classKeyword, implementsKeyword, token);
+    listener.endNamedMixinApplication(classKeyword, implementsKeyword, token);
     return expect(';', token);
   }
 
@@ -658,8 +735,8 @@
       } while (optional(',', token));
     }
     token = parseClassBody(token);
-    listener.endClassDeclaration(interfacesCount, begin, extendsKeyword,
-                                 implementsKeyword, token);
+    listener.endClassDeclaration(
+        interfacesCount, begin, extendsKeyword, implementsKeyword, token);
     return token.next;
   }
 
@@ -712,8 +789,7 @@
    */
   bool isOneOf3(Token token, String value1, String value2, String value3) {
     String stringValue = token.stringValue;
-    return
-        value1 == stringValue ||
+    return value1 == stringValue ||
         value2 == stringValue ||
         value3 == stringValue;
   }
@@ -722,18 +798,18 @@
    * Returns true if the stringValue of the [token] is either [value1],
    * [value2], [value3], or [value4].
    */
-  bool isOneOf4(Token token,
-                String value1, String value2, String value3, String value4) {
+  bool isOneOf4(
+      Token token, String value1, String value2, String value3, String value4) {
     String stringValue = token.stringValue;
     return value1 == stringValue ||
-           value2 == stringValue ||
-           value3 == stringValue ||
-           value4 == stringValue;
+        value2 == stringValue ||
+        value3 == stringValue ||
+        value4 == stringValue;
   }
 
   bool notEofOrValue(String value, Token token) {
     return !identical(token.kind, EOF_TOKEN) &&
-           !identical(value, token.stringValue);
+        !identical(value, token.stringValue);
   }
 
   Token parseType(Token token) {
@@ -750,24 +826,26 @@
   }
 
   Token parseTypeArgumentsOpt(Token token) {
-    return parseStuff(token,
-                      (t) => listener.beginTypeArguments(t),
-                      (t) => parseType(t),
-                      (c, bt, et) => listener.endTypeArguments(c, bt, et),
-                      (t) => listener.handleNoTypeArguments(t));
+    return parseStuff(
+        token,
+        (t) => listener.beginTypeArguments(t),
+        (t) => parseType(t),
+        (c, bt, et) => listener.endTypeArguments(c, bt, et),
+        (t) => listener.handleNoTypeArguments(t));
   }
 
   Token parseTypeVariablesOpt(Token token) {
-    return parseStuff(token,
-                      (t) => listener.beginTypeVariables(t),
-                      (t) => parseTypeVariable(t),
-                      (c, bt, et) => listener.endTypeVariables(c, bt, et),
-                      (t) => listener.handleNoTypeVariables(t));
+    return parseStuff(
+        token,
+        (t) => listener.beginTypeVariables(t),
+        (t) => parseTypeVariable(t),
+        (c, bt, et) => listener.endTypeVariables(c, bt, et),
+        (t) => listener.handleNoTypeVariables(t));
   }
 
   // TODO(ahe): Clean this up.
   Token parseStuff(Token token, Function beginStuff, Function stuffParser,
-                   Function endStuff, Function handleNoStuff) {
+      Function endStuff, Function handleNoStuff) {
     if (optional('<', token)) {
       Token begin = token;
       beginStuff(begin);
@@ -827,8 +905,9 @@
       // Loop to allow the listener to rewrite the token stream for
       // error handling.
       final String value = token.stringValue;
-      if ((identical(value, '(')) || (identical(value, '{'))
-          || (identical(value, '=>'))) {
+      if ((identical(value, '(')) ||
+          (identical(value, '{')) ||
+          (identical(value, '=>'))) {
         isField = false;
         break;
       } else if ((identical(value, '=')) || (identical(value, ','))) {
@@ -857,18 +936,18 @@
 
   bool isVarFinalOrConst(Token token) {
     String value = token.stringValue;
-    return identical('var', value)
-        || identical('final', value)
-        || identical('const', value);
+    return identical('var', value) ||
+        identical('final', value) ||
+        identical('const', value);
   }
 
-  Token expectVarFinalOrConst(Link<Token> modifiers,
-                              bool hasType,
-                              bool allowStatic) {
+  Token expectVarFinalOrConst(
+      Link<Token> modifiers, bool hasType, bool allowStatic) {
     int modifierCount = 0;
     Token staticModifier;
-    if (allowStatic && !modifiers.isEmpty
-        && optional('static', modifiers.head)) {
+    if (allowStatic &&
+        !modifiers.isEmpty &&
+        optional('static', modifiers.head)) {
       staticModifier = modifiers.head;
       modifierCount++;
       parseModifier(staticModifier);
@@ -895,9 +974,9 @@
     Token varFinalOrConst =
         modifierList.firstWhere(isVarFinalOrConst, orElse: () => null);
     if (allowStatic && staticModifier == null) {
-      staticModifier =
-          modifierList.firstWhere(
-              (modifier) => optional('static', modifier), orElse: () => null);
+      staticModifier = modifierList.firstWhere(
+          (modifier) => optional('static', modifier),
+          orElse: () => null);
       if (staticModifier != null) {
         modifierCount++;
         parseModifier(staticModifier);
@@ -921,12 +1000,8 @@
     return null;
   }
 
-  Token parseFields(Token start,
-                    Link<Token> modifiers,
-                    Token type,
-                    Token getOrSet,
-                    Token name,
-                    bool isTopLevel) {
+  Token parseFields(Token start, Link<Token> modifiers, Token type,
+      Token getOrSet, Token name, bool isTopLevel) {
     bool hasType = type != null;
     Token varFinalOrConst =
         expectVarFinalOrConst(modifiers, hasType, !isTopLevel);
@@ -955,8 +1030,7 @@
     } else {
       parseType(type);
       if (isVar) {
-        listener.reportError(
-            modifiers.head, MessageKind.EXTRANEOUS_MODIFIER,
+        listener.reportError(modifiers.head, MessageKind.EXTRANEOUS_MODIFIER,
             {'modifier': modifiers.head});
       }
     }
@@ -980,12 +1054,8 @@
     return token;
   }
 
-  Token parseTopLevelMethod(Token start,
-                            Link<Token> modifiers,
-                            Token type,
-                            Token getOrSet,
-                            Token name) {
-
+  Token parseTopLevelMethod(Token start, Link<Token> modifiers, Token type,
+      Token getOrSet, Token name) {
     Token externalModifier;
     // TODO(johnniwinther): Move error reporting to resolution to give more
     // specific error messages.
@@ -1011,6 +1081,11 @@
     }
     Token token = parseIdentifier(name);
 
+    if (enableGenericMethodSyntax && getOrSet == null) {
+      token = parseTypeVariablesOpt(token);
+    } else {
+      listener.handleNoTypeVariables(token);
+    }
     token = parseFormalParametersOpt(token);
     bool previousAsyncAwaitKeywordsEnabled = asyncAwaitKeywordsEnabled;
     token = parseAsyncModifier(token);
@@ -1062,8 +1137,7 @@
       String value = token.stringValue;
       if (value == 'get') {
         isGetter = true;
-      } else if (hasName &&
-                 (value == 'sync' || value == 'async')) {
+      } else if (hasName && (value == 'sync' || value == 'async')) {
         // Skip.
         token = token.next;
         value = token.stringValue;
@@ -1072,15 +1146,11 @@
           token = token.next;
         }
         continue;
-      } else if (value == '(' ||
-                 value == '{' ||
-                 value == '=>') {
+      } else if (value == '(' || value == '{' || value == '=>') {
         // A method.
         identifiers = identifiers.prepend(token);
         return identifiers;
-      } else if (value == '=' ||
-                 value == ';' ||
-                 value == ',') {
+      } else if (value == '=' || value == ';' || value == ',') {
         // A field or abstract getter.
         identifiers = identifiers.prepend(token);
         return identifiers;
@@ -1163,11 +1233,11 @@
   bool isModifier(Token token) {
     final String value = token.stringValue;
     return (identical('final', value)) ||
-           (identical('var', value)) ||
-           (identical('const', value)) ||
-           (identical('abstract', value)) ||
-           (identical('static', value)) ||
-           (identical('external', value));
+        (identical('var', value)) ||
+        (identical('const', value)) ||
+        (identical('abstract', value)) ||
+        (identical('static', value)) ||
+        (identical('external', value));
   }
 
   Token parseModifier(Token token) {
@@ -1195,8 +1265,7 @@
   Token parseModifiers(Token token) {
     int count = 0;
     while (identical(token.kind, KEYWORD_TOKEN)) {
-      if (!isModifier(token))
-        break;
+      if (!isModifier(token)) break;
       token = parseModifier(token);
       count++;
     }
@@ -1318,8 +1387,11 @@
       // Loop to allow the listener to rewrite the token stream for
       // error handling.
       final String value = token.stringValue;
-      if ((identical(value, '(')) || (identical(value, '.'))
-          || (identical(value, '{')) || (identical(value, '=>'))) {
+      if ((identical(value, '(')) ||
+          (identical(value, '.')) ||
+          (identical(value, '{')) ||
+          (identical(value, '=>')) ||
+          (enableGenericMethodSyntax && identical(value, '<'))) {
         isField = false;
         break;
       } else if (identical(value, ';')) {
@@ -1349,14 +1421,10 @@
     return isField
         ? parseFields(start, modifiers, type, getOrSet, name, false)
         : parseMethod(start, modifiers, type, getOrSet, name);
-
   }
 
-  Token parseMethod(Token start,
-                    Link<Token> modifiers,
-                    Token type,
-                    Token getOrSet,
-                    Token name) {
+  Token parseMethod(Token start, Link<Token> modifiers, Token type,
+      Token getOrSet, Token name) {
     Token externalModifier;
     Token staticModifier;
     Token constModifier;
@@ -1369,35 +1437,31 @@
         modifierCount++;
         externalModifier = modifier;
         if (modifierCount != allowedModifierCount) {
-          listener.reportError(
-              modifier,
-              MessageKind.EXTRANEOUS_MODIFIER, {'modifier': modifier});
+          listener.reportError(modifier, MessageKind.EXTRANEOUS_MODIFIER,
+              {'modifier': modifier});
         }
         allowedModifierCount++;
       } else if (staticModifier == null && optional('static', modifier)) {
         modifierCount++;
         staticModifier = modifier;
         if (modifierCount != allowedModifierCount) {
-          listener.reportError(
-              modifier,
-              MessageKind.EXTRANEOUS_MODIFIER, {'modifier': modifier});
+          listener.reportError(modifier, MessageKind.EXTRANEOUS_MODIFIER,
+              {'modifier': modifier});
         }
       } else if (constModifier == null && optional('const', modifier)) {
         modifierCount++;
         constModifier = modifier;
         if (modifierCount != allowedModifierCount) {
-          listener.reportError(
-              modifier,
-              MessageKind.EXTRANEOUS_MODIFIER, {'modifier': modifier});
+          listener.reportError(modifier, MessageKind.EXTRANEOUS_MODIFIER,
+              {'modifier': modifier});
         }
       } else {
         listener.reportError(
             modifier, MessageKind.EXTRANEOUS_MODIFIER, {'modifier': modifier});
       }
     }
-    if (getOrSet != null &&  constModifier != null) {
-      listener.reportError(
-          constModifier, MessageKind.EXTRANEOUS_MODIFIER,
+    if (getOrSet != null && constModifier != null) {
+      listener.reportError(constModifier, MessageKind.EXTRANEOUS_MODIFIER,
           {'modifier': constModifier});
     }
     parseModifierList(modifiers);
@@ -1411,8 +1475,7 @@
     if (optional('operator', name)) {
       token = parseOperatorName(name);
       if (staticModifier != null) {
-        listener.reportError(
-            staticModifier, MessageKind.EXTRANEOUS_MODIFIER,
+        listener.reportError(staticModifier, MessageKind.EXTRANEOUS_MODIFIER,
             {'modifier': staticModifier});
       }
     } else {
@@ -1420,6 +1483,11 @@
     }
 
     token = parseQualifiedRestOpt(token);
+    if (enableGenericMethodSyntax && getOrSet == null) {
+      token = parseTypeVariablesOpt(token);
+    } else {
+      listener.handleNoTypeVariables(token);
+    }
     token = parseFormalParametersOpt(token);
     token = parseInitializersOpt(token);
     bool previousAsyncAwaitKeywordsEnabled = asyncAwaitKeywordsEnabled;
@@ -1506,6 +1574,11 @@
     }
     token = parseQualifiedRestOpt(token);
     listener.endFunctionName(token);
+    if (enableGenericMethodSyntax && getOrSet == null) {
+      token = parseTypeVariablesOpt(token);
+    } else {
+      listener.handleNoTypeVariables(token);
+    }
     token = parseFormalParametersOpt(token);
     token = parseInitializersOpt(token);
     bool previousAsyncAwaitKeywordsEnabled = asyncAwaitKeywordsEnabled;
@@ -1546,6 +1619,11 @@
     listener.beginFunctionName(token);
     token = parseIdentifier(token);
     listener.endFunctionName(token);
+    if (enableGenericMethodSyntax) {
+      token = parseTypeVariablesOpt(token);
+    } else {
+      listener.handleNoTypeVariables(token);
+    }
     token = parseFormalParameters(token);
     listener.handleNoInitializers();
     bool previousAsyncAwaitKeywordsEnabled = asyncAwaitKeywordsEnabled;
@@ -1638,8 +1716,7 @@
         star = token;
         token = token.next;
       } else {
-        listener.reportError(async,
-            MessageKind.INVALID_SYNC_MODIFIER);
+        listener.reportError(async, MessageKind.INVALID_SYNC_MODIFIER);
       }
     }
     listener.handleAsyncModifier(async, star);
@@ -1715,7 +1792,6 @@
     return expectSemicolon(token);
   }
 
-
   Token parseReturnStatement(Token token) {
     Token begin = token;
     listener.beginReturnStatement(begin);
@@ -1870,8 +1946,8 @@
     return token;
   }
 
-  Token parsePrecedenceExpression(Token token, int precedence,
-                                  bool allowCascades) {
+  Token parsePrecedenceExpression(
+      Token token, int precedence, bool allowCascades) {
     assert(precedence >= 1);
     assert(precedence <= POSTFIX_PRECEDENCE);
     token = parseUnaryExpression(token, allowCascades);
@@ -1900,10 +1976,10 @@
             token = parseUnaryExpression(token.next, allowCascades);
             listener.handleBinaryExpression(operator);
           } else if ((identical(info, OPEN_PAREN_INFO)) ||
-                     (identical(info, OPEN_SQUARE_BRACKET_INFO))) {
+              (identical(info, OPEN_SQUARE_BRACKET_INFO))) {
             token = parseArgumentOrIndexStar(token);
           } else if ((identical(info, PLUS_PLUS_INFO)) ||
-                     (identical(info, MINUS_MINUS_INFO))) {
+              (identical(info, MINUS_MINUS_INFO))) {
             listener.handleUnaryPostfixAssignmentExpression(token);
             token = token.next;
           } else {
@@ -1918,8 +1994,8 @@
         } else {
           // Left associative, so we recurse at the next higher
           // precedence level.
-          token = parsePrecedenceExpression(token.next, level + 1,
-                                            allowCascades);
+          token =
+              parsePrecedenceExpression(token.next, level + 1, allowCascades);
           listener.handleBinaryExpression(operator);
         }
         info = token.info;
@@ -1978,21 +2054,21 @@
       listener.reportError(token, MessageKind.UNSUPPORTED_PREFIX_PLUS);
       return parseUnaryExpression(token.next, allowCascades);
     } else if ((identical(value, '!')) ||
-               (identical(value, '-')) ||
-               (identical(value, '~'))) {
+        (identical(value, '-')) ||
+        (identical(value, '~'))) {
       Token operator = token;
       // Right associative, so we recurse at the same precedence
       // level.
-      token = parsePrecedenceExpression(token.next, POSTFIX_PRECEDENCE,
-                                        allowCascades);
+      token = parsePrecedenceExpression(
+          token.next, POSTFIX_PRECEDENCE, allowCascades);
       listener.handleUnaryPrefixExpression(operator);
     } else if ((identical(value, '++')) || identical(value, '--')) {
       // TODO(ahe): Validate this is used correctly.
       Token operator = token;
       // Right associative, so we recurse at the same precedence
       // level.
-      token = parsePrecedenceExpression(token.next, POSTFIX_PRECEDENCE,
-                                        allowCascades);
+      token = parsePrecedenceExpression(
+          token.next, POSTFIX_PRECEDENCE, allowCascades);
       listener.handleUnaryPrefixAssignmentExpression(operator);
     } else {
       token = parsePrimary(token);
@@ -2011,6 +2087,7 @@
         listener.handleIndexedExpression(openSquareBracket, token);
         token = expect(']', token);
       } else if (optional('(', token)) {
+        listener.handleNoTypeArguments(token);
         token = parseArguments(token);
         listener.endSend(token);
       } else {
@@ -2024,8 +2101,7 @@
     final kind = token.kind;
     if (kind == IDENTIFIER_TOKEN) {
       return parseSendOrFunctionLiteral(token);
-    } else if (kind == INT_TOKEN
-        || kind == HEXADECIMAL_TOKEN) {
+    } else if (kind == INT_TOKEN || kind == HEXADECIMAL_TOKEN) {
       return parseLiteralInt(token);
     } else if (kind == DOUBLE_TOKEN) {
       return parseLiteralDouble(token);
@@ -2050,7 +2126,7 @@
       } else if (value == 'void') {
         return parseFunctionExpression(token);
       } else if (asyncAwaitKeywordsEnabled &&
-                 (value == 'yield' || value == 'async')) {
+          (value == 'yield' || value == 'async')) {
         return listener.expectedExpression(token);
       } else if (token.isIdentifier()) {
         return parseSendOrFunctionLiteral(token);
@@ -2060,9 +2136,9 @@
     } else if (kind == OPEN_PAREN_TOKEN) {
       return parseParenthesizedExpressionOrFunctionLiteral(token);
     } else if ((kind == LT_TOKEN) ||
-               (kind == OPEN_SQUARE_BRACKET_TOKEN) ||
-               (kind == OPEN_CURLY_BRACKET_TOKEN) ||
-               token.stringValue == '[]') {
+        (kind == OPEN_SQUARE_BRACKET_TOKEN) ||
+        (kind == OPEN_CURLY_BRACKET_TOKEN) ||
+        token.stringValue == '[]') {
       return parseLiteralListOrMap(token);
     } else {
       return listener.expectedExpression(token);
@@ -2075,9 +2151,9 @@
     int kind = nextToken.kind;
     if (mayParseFunctionExpressions &&
         (identical(kind, FUNCTION_TOKEN) ||
-         identical(kind, OPEN_CURLY_BRACKET_TOKEN) ||
-         (identical(kind, KEYWORD_TOKEN) &&
-             (nextToken.value == 'async' || nextToken.value == 'sync')))) {
+            identical(kind, OPEN_CURLY_BRACKET_TOKEN) ||
+            (identical(kind, KEYWORD_TOKEN) &&
+                (nextToken.value == 'async' || nextToken.value == 'sync')))) {
       return parseUnnamedFunction(token);
     } else {
       bool old = mayParseFunctionExpressions;
@@ -2108,6 +2184,7 @@
     token = token.next;
     if (optional('(', token)) {
       // Constructor forwarding.
+      listener.handleNoTypeArguments(token);
       token = parseArguments(token);
       listener.endSend(token);
     }
@@ -2119,6 +2196,7 @@
     token = token.next;
     if (optional('(', token)) {
       // Super constructor.
+      listener.handleNoTypeArguments(token);
       token = parseArguments(token);
       listener.endSend(token);
     }
@@ -2335,6 +2413,11 @@
   Token parseSend(Token token) {
     listener.beginSend(token);
     token = parseIdentifier(token);
+    if (enableGenericMethodSyntax && isValidMethodTypeArguments(token)) {
+      token = parseTypeArgumentsOpt(token);
+    } else {
+      listener.handleNoTypeArguments(token);
+    }
     token = parseArgumentsOpt(token);
     listener.endSend(token);
     return token;
@@ -2416,8 +2499,8 @@
     return parseVariablesDeclarationMaybeSemicolon(token, false);
   }
 
-  Token parseVariablesDeclarationMaybeSemicolon(Token token,
-                                                bool endWithSemicolon) {
+  Token parseVariablesDeclarationMaybeSemicolon(
+      Token token, bool endWithSemicolon) {
     int count = 1;
     listener.beginVariablesDeclaration(token);
     token = parseModifiers(token);
@@ -2568,8 +2651,7 @@
     Token awaitToken = token;
     listener.beginAwaitExpression(awaitToken);
     token = expect('await', token);
-    token = parsePrecedenceExpression(token, POSTFIX_PRECEDENCE,
-                                      allowCascades);
+    token = parsePrecedenceExpression(token, POSTFIX_PRECEDENCE, allowCascades);
     listener.endAwaitExpression(awaitToken, token);
     return token;
   }
@@ -2732,7 +2814,7 @@
       peek = peekPastLabels(token);
     }
     listener.handleSwitchCase(labelCount, expressionCount, defaultKeyword,
-                              statementCount, begin, token);
+        statementCount, begin, token);
     return token;
   }
 
diff --git a/pkg/compiler/lib/src/parser/parser_task.dart b/pkg/compiler/lib/src/parser/parser_task.dart
index a79875f..471ebf6 100644
--- a/pkg/compiler/lib/src/parser/parser_task.dart
+++ b/pkg/compiler/lib/src/parser/parser_task.dart
@@ -5,27 +5,17 @@
 library dart2js.parser.task;
 
 import '../common.dart';
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
-import '../elements/modelx.dart' show
-    ElementX;
-import '../options.dart' show
-    ParserOptions;
-import '../tokens/token.dart' show
-    Token;
-import '../tree/tree.dart' show
-    Node;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
+import '../elements/modelx.dart' show ElementX;
+import '../options.dart' show ParserOptions;
+import '../tokens/token.dart' show Token;
+import '../tree/tree.dart' show Node;
 
-import 'element_listener.dart' show
-    ScannerOptions;
-import 'listener.dart' show
-    ParserError;
-import 'node_listener.dart' show
-    NodeListener;
-import 'parser.dart' show
-    Parser;
+import 'element_listener.dart' show ScannerOptions;
+import 'listener.dart' show ParserError;
+import 'node_listener.dart' show NodeListener;
+import 'parser.dart' show Parser;
 
 class ParserTask extends CompilerTask {
   final ParserOptions parserOptions;
@@ -40,12 +30,12 @@
 
   Node parseCompilationUnit(Token token) {
     return measure(() {
-      NodeListener listener = new NodeListener(
-          const ScannerOptions(), reporter, null);
+      NodeListener listener =
+          new NodeListener(const ScannerOptions(), reporter, null);
       Parser parser = new Parser(listener, parserOptions);
       try {
         parser.parseUnit(token);
-      } on ParserError catch(_) {
+      } on ParserError catch (_) {
         assert(invariant(token, compiler.compilationFailed));
         return listener.makeNodeList(0, null, null, '\n');
       }
diff --git a/pkg/compiler/lib/src/parser/partial_elements.dart b/pkg/compiler/lib/src/parser/partial_elements.dart
index b37fe70..a99ba64 100644
--- a/pkg/compiler/lib/src/parser/partial_elements.dart
+++ b/pkg/compiler/lib/src/parser/partial_elements.dart
@@ -5,60 +5,54 @@
 library dart2js.parser.partial_elements;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Parsing,
-    Resolution;
+import '../common/resolution.dart' show Parsing, Resolution;
 import '../dart_types.dart' show DynamicType;
-import '../elements/elements.dart' show
-    CompilationUnitElement,
-    ConstructorElement,
-    Element,
-    ElementKind,
-    GetterElement,
-    LibraryElement,
-    MetadataAnnotation,
-    MethodElement,
-    SetterElement,
-    STATE_NOT_STARTED,
-    STATE_DONE;
-import '../elements/modelx.dart' show
-    BaseFunctionElementX,
-    ClassElementX,
-    ConstructorElementX,
-    DeclarationSite,
-    ElementX,
-    FieldElementX,
-    GetterElementX,
-    MetadataAnnotationX,
-    MethodElementX,
-    SetterElementX,
-    TypedefElementX,
-    VariableList;
-import '../elements/visitor.dart' show
-    ElementVisitor;
-import '../tokens/token.dart' show
-    BadInputToken,
-    BeginGroupToken,
-    ErrorToken,
-    KeywordToken,
-    StringToken,
-    Token,
-    UnmatchedToken,
-    UnterminatedToken;
-import '../tokens/token_constants.dart' as Tokens show
-    EOF_TOKEN;
+import '../elements/elements.dart'
+    show
+        CompilationUnitElement,
+        ConstructorElement,
+        Element,
+        ElementKind,
+        GetterElement,
+        LibraryElement,
+        MetadataAnnotation,
+        MethodElement,
+        SetterElement,
+        STATE_NOT_STARTED,
+        STATE_DONE;
+import '../elements/modelx.dart'
+    show
+        BaseFunctionElementX,
+        ClassElementX,
+        ConstructorElementX,
+        DeclarationSite,
+        ElementX,
+        FieldElementX,
+        GetterElementX,
+        MetadataAnnotationX,
+        MethodElementX,
+        SetterElementX,
+        TypedefElementX,
+        VariableList;
+import '../elements/visitor.dart' show ElementVisitor;
+import '../tokens/token.dart'
+    show
+        BadInputToken,
+        BeginGroupToken,
+        ErrorToken,
+        KeywordToken,
+        StringToken,
+        Token,
+        UnmatchedToken,
+        UnterminatedToken;
+import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN;
 import '../tree/tree.dart';
 
-import 'class_element_parser.dart' show
-    ClassElementParser;
-import 'parser.dart' show
-    Parser;
-import 'listener.dart' show
-    ParserError;
-import 'member_listener.dart' show
-    MemberListener;
-import 'node_listener.dart' show
-    NodeListener;
+import 'class_element_parser.dart' show ClassElementParser;
+import 'parser.dart' show Parser;
+import 'listener.dart' show ParserError;
+import 'member_listener.dart' show MemberListener;
+import 'node_listener.dart' show NodeListener;
 
 abstract class PartialElement implements DeclarationSite {
   Token beginToken;
@@ -91,7 +85,8 @@
     _position = ElementX.findNameToken(
         beginToken,
         modifiers.isFactory || isGenerativeConstructor,
-        name, enclosingElement.name);
+        name,
+        enclosingElement.name);
   }
 
   bool get hasNode => cachedNode != null;
@@ -126,44 +121,34 @@
 
 abstract class PartialFunctionElement
     implements PartialElement, PartialFunctionMixin {
-
-  factory PartialFunctionElement(
-      String name,
-      Token beginToken,
-      Token getOrSet,
-      Token endToken,
-      Modifiers modifiers,
-      Element enclosingElement,
+  factory PartialFunctionElement(String name, Token beginToken, Token getOrSet,
+      Token endToken, Modifiers modifiers, Element enclosingElement,
       {bool hasBody: true}) {
     if (getOrSet == null) {
       return new PartialMethodElement(
-          name, beginToken, endToken, modifiers,
-          enclosingElement, hasBody: hasBody);
+          name, beginToken, endToken, modifiers, enclosingElement,
+          hasBody: hasBody);
     } else if (identical(getOrSet.stringValue, 'get')) {
       return new PartialGetterElement(
-          name, beginToken, getOrSet, endToken, modifiers,
-          enclosingElement, hasBody: hasBody);
+          name, beginToken, getOrSet, endToken, modifiers, enclosingElement,
+          hasBody: hasBody);
     } else {
       assert(identical(getOrSet.stringValue, 'set'));
       return new PartialSetterElement(
-          name, beginToken, getOrSet, endToken, modifiers,
-          enclosingElement, hasBody: hasBody);
+          name, beginToken, getOrSet, endToken, modifiers, enclosingElement,
+          hasBody: hasBody);
     }
   }
 
   PartialFunctionElement copyWithEnclosing(Element enclosing);
 }
 
-
 class PartialMethodElement extends MethodElementX
     with PartialElement, PartialFunctionMixin
     implements PartialFunctionElement {
-  PartialMethodElement(String name,
-                       Token beginToken,
-                       Token endToken,
-                       Modifiers modifiers,
-                       Element enclosing,
-                       {bool hasBody: true})
+  PartialMethodElement(String name, Token beginToken, Token endToken,
+      Modifiers modifiers, Element enclosing,
+      {bool hasBody: true})
       : super(name, ElementKind.FUNCTION, modifiers, enclosing, hasBody) {
     init(beginToken, null, endToken);
   }
@@ -175,20 +160,17 @@
 
   PartialMethodElement copyWithEnclosing(Element enclosing) {
     return new PartialMethodElement(
-        name, beginToken, endToken, modifiers, enclosing, hasBody: hasBody);
+        name, beginToken, endToken, modifiers, enclosing,
+        hasBody: hasBody);
   }
 }
 
 class PartialGetterElement extends GetterElementX
     with PartialElement, PartialFunctionMixin
-    implements GetterElement, PartialFunctionElement  {
-  PartialGetterElement(String name,
-                       Token beginToken,
-                       Token getToken,
-                       Token endToken,
-                       Modifiers modifiers,
-                       Element enclosing,
-                       {bool hasBody: true})
+    implements GetterElement, PartialFunctionElement {
+  PartialGetterElement(String name, Token beginToken, Token getToken,
+      Token endToken, Modifiers modifiers, Element enclosing,
+      {bool hasBody: true})
       : super(name, modifiers, enclosing, hasBody) {
     init(beginToken, getToken, endToken);
   }
@@ -211,13 +193,9 @@
 class PartialSetterElement extends SetterElementX
     with PartialElement, PartialFunctionMixin
     implements SetterElement, PartialFunctionElement {
-  PartialSetterElement(String name,
-                       Token beginToken,
-                       Token setToken,
-                       Token endToken,
-                       Modifiers modifiers,
-                       Element enclosing,
-                       {bool hasBody: true})
+  PartialSetterElement(String name, Token beginToken, Token setToken,
+      Token endToken, Modifiers modifiers, Element enclosing,
+      {bool hasBody: true})
       : super(name, modifiers, enclosing, hasBody) {
     init(beginToken, setToken, endToken);
   }
@@ -241,12 +219,8 @@
 // [PartialFactoryConstructor] subclasses and make this abstract.
 class PartialConstructorElement extends ConstructorElementX
     with PartialElement, PartialFunctionMixin {
-  PartialConstructorElement(String name,
-                            Token beginToken,
-                            Token endToken,
-                            ElementKind kind,
-                            Modifiers modifiers,
-                            Element enclosing)
+  PartialConstructorElement(String name, Token beginToken, Token endToken,
+      ElementKind kind, Modifiers modifiers, Element enclosing)
       : super(name, kind, modifiers, enclosing) {
     init(beginToken, null, endToken);
   }
@@ -258,10 +232,8 @@
 }
 
 class PartialFieldList extends VariableList with PartialElement {
-  PartialFieldList(Token beginToken,
-                   Token endToken,
-                   Modifiers modifiers,
-                   bool hasParseError)
+  PartialFieldList(
+      Token beginToken, Token endToken, Modifiers modifiers, bool hasParseError)
       : super(modifiers) {
     super.beginToken = beginToken;
     super.endToken = endToken;
@@ -272,8 +244,7 @@
     if (definitions != null) return definitions;
     DiagnosticReporter reporter = parsing.reporter;
     reporter.withCurrentElement(element, () {
-      definitions = parse(
-          parsing, element, declarationSite,
+      definitions = parse(parsing, element, declarationSite,
           (Parser parser) => parser.parseMember(beginToken));
 
       if (!hasParseError &&
@@ -282,11 +253,10 @@
           !definitions.modifiers.isConst &&
           definitions.type == null &&
           !definitions.isErroneous) {
-        reporter.reportErrorMessage(
-            definitions,
-            MessageKind.GENERIC,
-            { 'text': 'A field declaration must start with var, final, '
-                      'const, or a type annotation.' });
+        reporter.reportErrorMessage(definitions, MessageKind.GENERIC, {
+          'text': 'A field declaration must start with var, final, '
+              'const, or a type annotation.'
+        });
       }
     });
     return definitions;
@@ -309,12 +279,8 @@
 }
 
 class PartialTypedefElement extends TypedefElementX with PartialElement {
-
   PartialTypedefElement(
-      String name,
-      Element enclosing,
-      Token beginToken,
-      Token endToken)
+      String name, Element enclosing, Token beginToken, Token endToken)
       : super(name, enclosing) {
     this.beginToken = beginToken;
     this.endToken = endToken;
@@ -324,8 +290,7 @@
 
   Node parseNode(Parsing parsing) {
     if (cachedNode != null) return cachedNode;
-    cachedNode = parse(
-        parsing, this, declarationSite,
+    cachedNode = parse(parsing, this, declarationSite,
         (p) => p.parseTopLevelDeclaration(token));
     return cachedNode;
   }
@@ -366,15 +331,13 @@
 
   Node parseNode(Parsing parsing) {
     if (cachedNode != null) return cachedNode;
-    var metadata = parse(parsing,
-                         annotatedElement,
-                         declarationSite,
-                         (p) => p.parseMetadata(beginToken));
+    var metadata = parse(parsing, annotatedElement, declarationSite,
+        (p) => p.parseMetadata(beginToken));
     if (metadata is Metadata) {
       cachedNode = metadata.expression;
       return cachedNode;
     } else {
-      assert (metadata is ErrorNode);
+      assert(metadata is ErrorNode);
       return metadata;
     }
   }
@@ -390,11 +353,8 @@
 class PartialClassElement extends ClassElementX with PartialElement {
   ClassNode cachedNode;
 
-  PartialClassElement(String name,
-                      Token beginToken,
-                      Token endToken,
-                      Element enclosing,
-                      int id)
+  PartialClassElement(
+      String name, Token beginToken, Token endToken, Element enclosing, int id)
       : super(name, enclosing, id, STATE_NOT_STARTED) {
     this.beginToken = beginToken;
     this.endToken = endToken;
@@ -432,10 +392,8 @@
           Token token = parser.parseTopLevelDeclaration(beginToken);
           assert(identical(token, endToken.next));
           cachedNode = listener.popNode();
-          assert(
-              invariant(
-                  beginToken, listener.nodes.isEmpty,
-                  message: "Non-empty listener stack: ${listener.nodes}"));
+          assert(invariant(beginToken, listener.nodes.isEmpty,
+              message: "Non-empty listener stack: ${listener.nodes}"));
         } on ParserError {
           // TODO(ahe): Often, a ParserError is thrown while parsing the class
           // body. This means that the stack actually contains most of the
@@ -448,8 +406,15 @@
           Token extendsKeyword = null;
           NodeList body = listener.makeNodeList(0, beginToken, endToken, null);
           cachedNode = new ClassNode(
-              Modifiers.EMPTY, name, typeParameters, supertype, interfaces,
-              beginToken, extendsKeyword, body, endToken);
+              Modifiers.EMPTY,
+              name,
+              typeParameters,
+              supertype,
+              interfaces,
+              beginToken,
+              extendsKeyword,
+              body,
+              endToken);
           hasParseError = true;
         }
       });
@@ -475,10 +440,7 @@
   }
 }
 
-Node parse(
-    Parsing parsing,
-    ElementX element,
-    PartialElement partial,
+Node parse(Parsing parsing, ElementX element, PartialElement partial,
     doParse(Parser parser)) {
   DiagnosticReporter reporter = parsing.reporter;
   return parsing.measure(() {
diff --git a/pkg/compiler/lib/src/parser/partial_parser.dart b/pkg/compiler/lib/src/parser/partial_parser.dart
index 355ddd8..67f320d 100644
--- a/pkg/compiler/lib/src/parser/partial_parser.dart
+++ b/pkg/compiler/lib/src/parser/partial_parser.dart
@@ -5,21 +5,13 @@
 library dart2js.parser.partial;
 
 import '../common.dart';
-import '../options.dart' show
-    ParserOptions;
-import '../util/characters.dart' as Characters show
-    $CLOSE_CURLY_BRACKET;
-import '../tokens/token.dart' show
-    BeginGroupToken,
-    ErrorToken,
-    Token;
-import '../tokens/token_constants.dart' as Tokens show
-    EOF_TOKEN;
+import '../options.dart' show ParserOptions;
+import '../util/characters.dart' as Characters show $CLOSE_CURLY_BRACKET;
+import '../tokens/token.dart' show BeginGroupToken, ErrorToken, Token;
+import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN;
 
-import 'listener.dart' show
-    Listener;
-import 'parser.dart' show
-    Parser;
+import 'listener.dart' show Listener;
+import 'parser.dart' show Parser;
 
 class PartialParser extends Parser {
   PartialParser(Listener listener, ParserOptions options)
diff --git a/pkg/compiler/lib/src/patch_parser.dart b/pkg/compiler/lib/src/patch_parser.dart
index 977d8a9..0e9943d 100644
--- a/pkg/compiler/lib/src/patch_parser.dart
+++ b/pkg/compiler/lib/src/patch_parser.dart
@@ -116,48 +116,33 @@
 
 import 'dart:async';
 
-import 'constants/values.dart' show
-    ConstantValue;
+import 'constants/values.dart' show ConstantValue;
 import 'common.dart';
-import 'compiler.dart' show
-    Compiler;
-import 'common/tasks.dart' show
-    CompilerTask;
-import 'dart_types.dart' show
-    DartType;
+import 'compiler.dart' show Compiler;
+import 'common/tasks.dart' show CompilerTask;
+import 'dart_types.dart' show DartType;
 import 'elements/elements.dart';
-import 'elements/modelx.dart' show
-    BaseFunctionElementX,
-    ClassElementX,
-    GetterElementX,
-    LibraryElementX,
-    MetadataAnnotationX,
-    SetterElementX;
-import 'js_backend/js_backend.dart' show
-    JavaScriptBackend;
-import 'library_loader.dart' show
-    LibraryLoader;
-import 'options.dart' show
-    ParserOptions;
-import 'parser/listener.dart' show
-    Listener,
-    ParserError;
-import 'parser/element_listener.dart' show
-    ElementListener;
-import 'parser/member_listener.dart' show
-    MemberListener;
-import 'parser/partial_elements.dart' show
-  PartialClassElement;
-import 'parser/partial_parser.dart' show
-    PartialParser;
-import 'parser/parser.dart' show
-    Parser;
-import 'scanner/scanner.dart' show
-    Scanner;
+import 'elements/modelx.dart'
+    show
+        BaseFunctionElementX,
+        ClassElementX,
+        GetterElementX,
+        LibraryElementX,
+        MetadataAnnotationX,
+        SetterElementX;
+import 'id_generator.dart';
+import 'js_backend/js_backend.dart' show JavaScriptBackend;
+import 'library_loader.dart' show LibraryLoader;
+import 'options.dart' show ParserOptions;
+import 'parser/listener.dart' show Listener, ParserError;
+import 'parser/element_listener.dart' show ElementListener;
+import 'parser/member_listener.dart' show MemberListener;
+import 'parser/partial_elements.dart' show PartialClassElement;
+import 'parser/partial_parser.dart' show PartialParser;
+import 'parser/parser.dart' show Parser;
+import 'scanner/scanner.dart' show Scanner;
 import 'script.dart';
-import 'tokens/token.dart' show
-    StringToken,
-    Token;
+import 'tokens/token.dart' show StringToken, Token;
 
 class PatchParserTask extends CompilerTask {
   final String name = "Patching Parser";
@@ -170,10 +155,9 @@
    * injections to the library, and returns a list of class
    * patches.
    */
-  Future patchLibrary(LibraryLoader loader,
-                      Uri patchUri, LibraryElement originLibrary) {
-    return compiler.readScript(patchUri, originLibrary)
-        .then((Script script) {
+  Future patchLibrary(
+      LibraryLoader loader, Uri patchUri, LibraryElement originLibrary) {
+    return compiler.readScript(patchUri, originLibrary).then((Script script) {
       var patchLibrary = new LibraryElementX(script, null, originLibrary);
       return reporter.withCurrentElement(patchLibrary, () {
         loader.registerNewLibrary(patchLibrary);
@@ -193,10 +177,8 @@
       // TODO(johnniwinther): Test that parts and exports are handled correctly.
       Script script = compilationUnit.script;
       Token tokens = new Scanner(script.file).tokenize();
-      Function idGenerator = compiler.getNextFreeClassId;
-      Listener patchListener = new PatchElementListener(compiler,
-                                                        compilationUnit,
-                                                        idGenerator);
+      Listener patchListener =
+          new PatchElementListener(compiler, compilationUnit, compiler);
       try {
         new PartialParser(patchListener, parserOptions).parseUnit(tokens);
       } on ParserError catch (e) {
@@ -214,20 +196,19 @@
     if (cls.cachedNode != null) return;
 
     measure(() => reporter.withCurrentElement(cls, () {
-      MemberListener listener = new PatchMemberListener(compiler, cls);
-      Parser parser = new PatchClassElementParser(listener, parserOptions);
-      try {
-        Token token = parser.parseTopLevelDeclaration(cls.beginToken);
-        assert(identical(token, cls.endToken.next));
-      } on ParserError catch (e) {
-        // No need to recover from a parser error in platform libraries, user
-        // will never see this if the libraries are tested correctly.
-        reporter.internalError(
-            cls, "Parser error in patch file: $e");
-      }
-      cls.cachedNode = listener.popNode();
-      assert(listener.nodes.isEmpty);
-    }));
+          MemberListener listener = new PatchMemberListener(compiler, cls);
+          Parser parser = new PatchClassElementParser(listener, parserOptions);
+          try {
+            Token token = parser.parseTopLevelDeclaration(cls.beginToken);
+            assert(identical(token, cls.endToken.next));
+          } on ParserError catch (e) {
+            // No need to recover from a parser error in platform libraries, user
+            // will never see this if the libraries are tested correctly.
+            reporter.internalError(cls, "Parser error in patch file: $e");
+          }
+          cls.cachedNode = listener.popNode();
+          assert(listener.nodes.isEmpty);
+        }));
   }
 }
 
@@ -237,8 +218,7 @@
   PatchMemberListener(Compiler compiler, ClassElement enclosingClass)
       : this.compiler = compiler,
         super(compiler.parsing.getScannerOptionsFor(enclosingClass),
-              compiler.reporter,
-              enclosingClass);
+            compiler.reporter, enclosingClass);
 
   @override
   void addMember(Element patch) {
@@ -279,11 +259,10 @@
 class PatchElementListener extends ElementListener implements Listener {
   final Compiler compiler;
 
-  PatchElementListener(Compiler compiler,
-                       CompilationUnitElement patchElement,
-                       int idGenerator())
-    : this.compiler = compiler,
-      super(compiler.parsing.getScannerOptionsFor(patchElement),
+  PatchElementListener(Compiler compiler, CompilationUnitElement patchElement,
+      IdGenerator idGenerator)
+      : this.compiler = compiler,
+        super(compiler.parsing.getScannerOptionsFor(patchElement),
             compiler.reporter, patchElement, idGenerator);
 
   @override
@@ -310,10 +289,8 @@
   }
 }
 
-void patchElement(Compiler compiler,
-                  DiagnosticReporter reporter,
-                  Element origin,
-                  Element patch) {
+void patchElement(Compiler compiler, DiagnosticReporter reporter,
+    Element origin, Element patch) {
   if (origin == null) {
     reporter.reportErrorMessage(
         patch, MessageKind.PATCH_NON_EXISTING, {'name': patch.name});
@@ -321,9 +298,9 @@
   }
 
   if (!(origin.isClass ||
-        origin.isConstructor ||
-        origin.isFunction ||
-        origin.isAbstractField)) {
+      origin.isConstructor ||
+      origin.isFunction ||
+      origin.isAbstractField)) {
     // TODO(ahe): Remove this error when the parser rejects all bad modifiers.
     reporter.reportErrorMessage(origin, MessageKind.PATCH_NONPATCHABLE);
     return;
@@ -336,7 +313,7 @@
     tryPatchSetter(reporter, origin, patch);
   } else if (patch.isConstructor) {
     tryPatchConstructor(reporter, origin, patch);
-  } else if(patch.isFunction) {
+  } else if (patch.isFunction) {
     tryPatchFunction(reporter, origin, patch);
   } else {
     // TODO(ahe): Remove this error when the parser rejects all bad modifiers.
@@ -344,34 +321,25 @@
   }
 }
 
-void tryPatchClass(Compiler compiler,
-                   DiagnosticReporter reporter,
-                   Element origin,
-                   ClassElement patch) {
+void tryPatchClass(Compiler compiler, DiagnosticReporter reporter,
+    Element origin, ClassElement patch) {
   if (!origin.isClass) {
     reporter.reportError(
         reporter.createMessage(
-            origin,
-            MessageKind.PATCH_NON_CLASS,
-            {'className': patch.name}),
+            origin, MessageKind.PATCH_NON_CLASS, {'className': patch.name}),
         <DiagnosticMessage>[
-            reporter.createMessage(
-                patch,
-                MessageKind.PATCH_POINT_TO_CLASS,
-                {'className': patch.name}),
+          reporter.createMessage(patch, MessageKind.PATCH_POINT_TO_CLASS,
+              {'className': patch.name}),
         ]);
     return;
   }
   patchClass(compiler, reporter, origin, patch);
 }
 
-void patchClass(Compiler compiler,
-                DiagnosticReporter reporter,
-                ClassElementX origin,
-                ClassElementX patch) {
+void patchClass(Compiler compiler, DiagnosticReporter reporter,
+    ClassElementX origin, ClassElementX patch) {
   if (origin.isPatched) {
-    reporter.internalError(origin,
-        "Patching the same class more than once.");
+    reporter.internalError(origin, "Patching the same class more than once.");
   }
   origin.applyPatch(patch);
   checkNativeAnnotation(compiler, patch);
@@ -380,16 +348,15 @@
 /// Check whether [cls] has a `@Native(...)` annotation, and if so, set its
 /// native name from the annotation.
 checkNativeAnnotation(Compiler compiler, ClassElement cls) {
-  EagerAnnotationHandler.checkAnnotation(compiler, cls,
-      const NativeAnnotationHandler());
+  EagerAnnotationHandler.checkAnnotation(
+      compiler, cls, const NativeAnnotationHandler());
 }
 
 checkJsInteropAnnotation(Compiler compiler, element) {
-  EagerAnnotationHandler.checkAnnotation(compiler, element,
-      const JsInteropAnnotationHandler());
+  EagerAnnotationHandler.checkAnnotation(
+      compiler, element, const JsInteropAnnotationHandler());
 }
 
-
 /// Abstract interface for pre-resolution detection of metadata.
 ///
 /// The detection is handled in two steps:
@@ -401,22 +368,16 @@
   /// Checks that [annotation] looks like a matching annotation and optionally
   /// applies actions on [element]. Returns a non-null annotation marker if the
   /// annotation matched and should be validated.
-  T apply(Compiler compiler,
-          Element element,
-          MetadataAnnotation annotation);
+  T apply(Compiler compiler, Element element, MetadataAnnotation annotation);
 
   /// Checks that the annotation value is valid.
-  void validate(Compiler compiler,
-                Element element,
-                MetadataAnnotation annotation,
-                ConstantValue constant);
-
+  void validate(Compiler compiler, Element element,
+      MetadataAnnotation annotation, ConstantValue constant);
 
   /// Checks [element] for metadata matching the [handler]. Return a non-null
   /// annotation marker matching metadata was found.
-  static checkAnnotation(Compiler compiler,
-                         Element element,
-                         EagerAnnotationHandler handler) {
+  static checkAnnotation(
+      Compiler compiler, Element element, EagerAnnotationHandler handler) {
     for (MetadataAnnotation annotation in element.implementation.metadata) {
       var result = handler.apply(compiler, element, annotation);
       if (result != null) {
@@ -424,8 +385,7 @@
         // [Compiler.onLibrariesLoaded].
         compiler.enqueuer.resolution.addDeferredAction(element, () {
           annotation.ensureResolved(compiler.resolution);
-          handler.validate(
-              compiler, element, annotation,
+          handler.validate(compiler, element, annotation,
               compiler.constants.getConstantValue(annotation.constant));
         });
         return result;
@@ -452,9 +412,8 @@
     return null;
   }
 
-  String apply(Compiler compiler,
-             Element element,
-             MetadataAnnotation annotation) {
+  String apply(
+      Compiler compiler, Element element, MetadataAnnotation annotation) {
     if (element.isClass) {
       String native = getNativeAnnotation(annotation);
       if (native != null) {
@@ -466,10 +425,8 @@
     return null;
   }
 
-  void validate(Compiler compiler,
-                Element element,
-                MetadataAnnotation annotation,
-                ConstantValue constant) {
+  void validate(Compiler compiler, Element element,
+      MetadataAnnotation annotation, ConstantValue constant) {
     DartType annotationType = constant.getType(compiler.coreTypes);
     if (annotationType.element != compiler.nativeAnnotationClass) {
       DiagnosticReporter reporter = compiler.reporter;
@@ -486,9 +443,8 @@
   bool hasJsNameAnnotation(MetadataAnnotation annotation) =>
       annotation.beginToken != null && annotation.beginToken.next.value == 'JS';
 
-  bool apply(Compiler compiler,
-             Element element,
-             MetadataAnnotation annotation) {
+  bool apply(
+      Compiler compiler, Element element, MetadataAnnotation annotation) {
     bool hasJsInterop = hasJsNameAnnotation(annotation);
     if (hasJsInterop) {
       JavaScriptBackend backend = compiler.backend;
@@ -500,14 +456,13 @@
   }
 
   @override
-  void validate(Compiler compiler,
-                Element element,
-                MetadataAnnotation annotation,
-                ConstantValue constant) {
+  void validate(Compiler compiler, Element element,
+      MetadataAnnotation annotation, ConstantValue constant) {
     JavaScriptBackend backend = compiler.backend;
     if (constant.getType(compiler.coreTypes).element !=
         backend.helpers.jsAnnotationClass) {
-      compiler.reporter.internalError(annotation, 'Invalid @JS(...) annotation.');
+      compiler.reporter
+          .internalError(annotation, 'Invalid @JS(...) annotation.');
     }
   }
 }
@@ -532,17 +487,14 @@
   }
 
   @override
-  PatchVersion apply(Compiler compiler,
-                     Element element,
-                     MetadataAnnotation annotation) {
+  PatchVersion apply(
+      Compiler compiler, Element element, MetadataAnnotation annotation) {
     return getPatchVersion(annotation);
   }
 
   @override
-  void validate(Compiler compiler,
-                Element element,
-                MetadataAnnotation annotation,
-                ConstantValue constant) {
+  void validate(Compiler compiler, Element element,
+      MetadataAnnotation annotation, ConstantValue constant) {
     DartType annotationType = constant.getType(compiler.coreTypes);
     if (annotationType.element != compiler.patchAnnotationClass) {
       DiagnosticReporter reporter = compiler.reporter;
@@ -551,21 +503,15 @@
   }
 }
 
-
-void tryPatchGetter(DiagnosticReporter reporter,
-                    Element origin,
-                    FunctionElement patch) {
+void tryPatchGetter(
+    DiagnosticReporter reporter, Element origin, FunctionElement patch) {
   if (!origin.isAbstractField) {
     reporter.reportError(
         reporter.createMessage(
-            origin,
-            MessageKind.PATCH_NON_GETTER,
-            {'name': origin.name}),
+            origin, MessageKind.PATCH_NON_GETTER, {'name': origin.name}),
         <DiagnosticMessage>[
-            reporter.createMessage(
-                patch,
-                MessageKind.PATCH_POINT_TO_GETTER,
-                {'getterName': patch.name}),
+          reporter.createMessage(patch, MessageKind.PATCH_POINT_TO_GETTER,
+              {'getterName': patch.name}),
         ]);
     return;
   }
@@ -573,14 +519,10 @@
   if (originField.getter == null) {
     reporter.reportError(
         reporter.createMessage(
-            origin,
-            MessageKind.PATCH_NO_GETTER,
-            {'getterName': patch.name}),
+            origin, MessageKind.PATCH_NO_GETTER, {'getterName': patch.name}),
         <DiagnosticMessage>[
-            reporter.createMessage(
-                patch,
-                MessageKind.PATCH_POINT_TO_GETTER,
-                {'getterName': patch.name}),
+          reporter.createMessage(patch, MessageKind.PATCH_POINT_TO_GETTER,
+              {'getterName': patch.name}),
         ]);
     return;
   }
@@ -588,20 +530,15 @@
   patchFunction(reporter, getter, patch);
 }
 
-void tryPatchSetter(DiagnosticReporter reporter,
-                    Element origin,
-                    FunctionElement patch) {
+void tryPatchSetter(
+    DiagnosticReporter reporter, Element origin, FunctionElement patch) {
   if (!origin.isAbstractField) {
     reporter.reportError(
         reporter.createMessage(
-            origin,
-            MessageKind.PATCH_NON_SETTER,
-            {'name': origin.name}),
+            origin, MessageKind.PATCH_NON_SETTER, {'name': origin.name}),
         <DiagnosticMessage>[
-            reporter.createMessage(
-                patch,
-                MessageKind.PATCH_POINT_TO_SETTER,
-                {'setterName': patch.name}),
+          reporter.createMessage(patch, MessageKind.PATCH_POINT_TO_SETTER,
+              {'setterName': patch.name}),
         ]);
     return;
   }
@@ -609,14 +546,10 @@
   if (originField.setter == null) {
     reporter.reportError(
         reporter.createMessage(
-            origin,
-            MessageKind.PATCH_NO_SETTER,
-            {'setterName': patch.name}),
+            origin, MessageKind.PATCH_NO_SETTER, {'setterName': patch.name}),
         <DiagnosticMessage>[
-              reporter.createMessage(
-                  patch,
-                  MessageKind.PATCH_POINT_TO_SETTER,
-                  {'setterName': patch.name}),
+          reporter.createMessage(patch, MessageKind.PATCH_POINT_TO_SETTER,
+              {'setterName': patch.name}),
         ]);
     return;
   }
@@ -624,70 +557,57 @@
   patchFunction(reporter, setter, patch);
 }
 
-void tryPatchConstructor(DiagnosticReporter reporter,
-                         Element origin,
-                         FunctionElement patch) {
+void tryPatchConstructor(
+    DiagnosticReporter reporter, Element origin, FunctionElement patch) {
   if (!origin.isConstructor) {
     reporter.reportError(
-        reporter.createMessage(
-            origin,
-            MessageKind.PATCH_NON_CONSTRUCTOR,
+        reporter.createMessage(origin, MessageKind.PATCH_NON_CONSTRUCTOR,
             {'constructorName': patch.name}),
         <DiagnosticMessage>[
-            reporter.createMessage(
-                patch,
-                MessageKind.PATCH_POINT_TO_CONSTRUCTOR,
-                {'constructorName': patch.name}),
+          reporter.createMessage(patch, MessageKind.PATCH_POINT_TO_CONSTRUCTOR,
+              {'constructorName': patch.name}),
         ]);
     return;
   }
   patchFunction(reporter, origin, patch);
 }
 
-void tryPatchFunction(DiagnosticReporter reporter,
-                      Element origin,
-                      FunctionElement patch) {
+void tryPatchFunction(
+    DiagnosticReporter reporter, Element origin, FunctionElement patch) {
   if (!origin.isFunction) {
     reporter.reportError(
-        reporter.createMessage(
-            origin,
-            MessageKind.PATCH_NON_FUNCTION,
+        reporter.createMessage(origin, MessageKind.PATCH_NON_FUNCTION,
             {'functionName': patch.name}),
         <DiagnosticMessage>[
-            reporter.createMessage(
-                patch,
-                MessageKind.PATCH_POINT_TO_FUNCTION,
-                {'functionName': patch.name}),
+          reporter.createMessage(patch, MessageKind.PATCH_POINT_TO_FUNCTION,
+              {'functionName': patch.name}),
         ]);
     return;
   }
   patchFunction(reporter, origin, patch);
 }
 
-void patchFunction(DiagnosticReporter reporter,
-                   BaseFunctionElementX origin,
-                   BaseFunctionElementX patch) {
+void patchFunction(DiagnosticReporter reporter, BaseFunctionElementX origin,
+    BaseFunctionElementX patch) {
   if (!origin.modifiers.isExternal) {
     reporter.reportError(
         reporter.createMessage(origin, MessageKind.PATCH_NON_EXTERNAL),
         <DiagnosticMessage>[
-              reporter.createMessage(
-                  patch,
-                  MessageKind.PATCH_POINT_TO_FUNCTION,
-                  {'functionName': patch.name}),
+          reporter.createMessage(patch, MessageKind.PATCH_POINT_TO_FUNCTION,
+              {'functionName': patch.name}),
         ]);
     return;
   }
   if (origin.isPatched) {
-    reporter.internalError(origin,
-        "Trying to patch a function more than once.");
+    reporter.internalError(
+        origin, "Trying to patch a function more than once.");
   }
   origin.applyPatch(patch);
 }
 
 PatchVersion getPatchVersion(Compiler compiler, Element element) {
-  return EagerAnnotationHandler.checkAnnotation(compiler, element,
-      const PatchAnnotationHandler());
+  return EagerAnnotationHandler.checkAnnotation(
+      compiler, element, const PatchAnnotationHandler());
 }
 
 class PatchVersion {
diff --git a/pkg/compiler/lib/src/platform_configuration.dart b/pkg/compiler/lib/src/platform_configuration.dart
index 41da852..56a48df 100644
--- a/pkg/compiler/lib/src/platform_configuration.dart
+++ b/pkg/compiler/lib/src/platform_configuration.dart
@@ -75,8 +75,9 @@
           error("Section heading lines must end with ']'", endOfHeader + 1);
         }
         int startOfSectionName = startOfLine + 1;
-        String sectionName = new String.fromCharCodes(
-            source, startOfSectionName, endOfHeader).trim();
+        String sectionName =
+            new String.fromCharCodes(source, startOfSectionName, endOfHeader)
+                .trim();
         currentSection = new Map<String, String>();
         if (result.containsKey(sectionName)) {
           error("Duplicate section name '$sectionName'", startOfSectionName);
diff --git a/pkg/compiler/lib/src/resolution/access_semantics.dart b/pkg/compiler/lib/src/resolution/access_semantics.dart
index baead69..fdd8410 100644
--- a/pkg/compiler/lib/src/resolution/access_semantics.dart
+++ b/pkg/compiler/lib/src/resolution/access_semantics.dart
@@ -149,33 +149,41 @@
 enum CompoundAccessKind {
   /// Read from a static getter and write to a static setter.
   STATIC_GETTER_SETTER,
+
   /// Read from a static method (closurize) and write to a static setter.
   STATIC_METHOD_SETTER,
 
   /// Read from an unresolved static getter and write to a static setter.
   UNRESOLVED_STATIC_GETTER,
+
   /// Read from a static getter and write to an unresolved static setter.
   UNRESOLVED_STATIC_SETTER,
 
   /// Read from a top level getter and write to a top level setter.
   TOPLEVEL_GETTER_SETTER,
+
   /// Read from a top level method (closurize) and write to top level setter.
   TOPLEVEL_METHOD_SETTER,
 
   /// Read from an unresolved top level getter and write to a top level setter.
   UNRESOLVED_TOPLEVEL_GETTER,
+
   /// Read from a top level getter and write to an unresolved top level setter.
   UNRESOLVED_TOPLEVEL_SETTER,
 
   /// Read from one superclass field and write to another.
   SUPER_FIELD_FIELD,
+
   /// Read from a superclass field and write to a superclass setter.
   SUPER_FIELD_SETTER,
+
   /// Read from a superclass getter and write to a superclass setter.
   SUPER_GETTER_SETTER,
+
   /// Read from a superclass method (closurize) and write to a superclass
   /// setter.
   SUPER_METHOD_SETTER,
+
   /// Read from a superclass getter and write to a superclass field.
   SUPER_GETTER_FIELD,
 
@@ -183,6 +191,7 @@
   // TODO(johnniwinther): Use [AccessKind.SUPER_GETTER] when the erroneous
   // element is no longer needed.
   UNRESOLVED_SUPER_GETTER,
+
   /// Read from a superclass getter and write to an unresolved setter.
   // TODO(johnniwinther): Use [AccessKind.SUPER_SETTER] when the erroneous
   // element is no longer needed.
@@ -243,7 +252,6 @@
   }
 }
 
-
 class DynamicAccess extends AccessSemantics {
   final Name name;
 
@@ -268,8 +276,7 @@
 class ConstantAccess extends AccessSemantics {
   final ConstantExpression constant;
 
-  ConstantAccess(AccessKind kind, this.constant)
-      : super._(kind);
+  ConstantAccess(AccessKind kind, this.constant) : super._(kind);
 
   ConstantAccess.classTypeLiteral(this.constant)
       : super._(AccessKind.CLASS_TYPE_LITERAL);
@@ -284,8 +291,7 @@
 class StaticAccess extends AccessSemantics {
   final Element element;
 
-  StaticAccess._(AccessKind kind, this.element)
-      : super._(kind);
+  StaticAccess.internal(AccessKind kind, this.element) : super._(kind);
 
   StaticAccess.superSetter(MethodElement this.element)
       : super._(AccessKind.SUPER_SETTER);
@@ -350,14 +356,12 @@
   StaticAccess.topLevelSetter(MethodElement this.element)
       : super._(AccessKind.TOPLEVEL_SETTER);
 
-  StaticAccess.unresolved(this.element)
-      : super._(AccessKind.UNRESOLVED);
+  StaticAccess.unresolved(this.element) : super._(AccessKind.UNRESOLVED);
 
   StaticAccess.unresolvedSuper(this.element)
       : super._(AccessKind.UNRESOLVED_SUPER);
 
-  StaticAccess.invalid(this.element)
-      : super._(AccessKind.INVALID);
+  StaticAccess.invalid(this.element) : super._(AccessKind.INVALID);
 }
 
 class CompoundAccessSemantics extends AccessSemantics {
@@ -365,9 +369,7 @@
   final Element getter;
   final Element setter;
 
-  CompoundAccessSemantics(this.compoundAccessKind,
-                          this.getter,
-                          this.setter)
+  CompoundAccessSemantics(this.compoundAccessKind, this.getter, this.setter)
       : super._(AccessKind.COMPOUND);
 
   Element get element => setter;
diff --git a/pkg/compiler/lib/src/resolution/class_hierarchy.dart b/pkg/compiler/lib/src/resolution/class_hierarchy.dart
index 78e2341..25893e2 100644
--- a/pkg/compiler/lib/src/resolution/class_hierarchy.dart
+++ b/pkg/compiler/lib/src/resolution/class_hierarchy.dart
@@ -5,52 +5,37 @@
 library dart2js.resolution.class_hierarchy;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Feature;
-import '../compiler.dart' show
-    Compiler;
-import '../core_types.dart' show
-    CoreClasses,
-    CoreTypes;
+import '../common/resolution.dart' show Feature;
+import '../compiler.dart' show Compiler;
+import '../core_types.dart' show CoreClasses, CoreTypes;
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    BaseClassElementX,
-    ErroneousElementX,
-    MixinApplicationElementX,
-    SynthesizedConstructorElementX,
-    TypeVariableElementX,
-    UnnamedMixinApplicationElementX;
-import '../ordered_typeset.dart' show
-    OrderedTypeSet,
-    OrderedTypeSetBuilder;
+import '../elements/modelx.dart'
+    show
+        BaseClassElementX,
+        ErroneousElementX,
+        MixinApplicationElementX,
+        SynthesizedConstructorElementX,
+        TypeVariableElementX,
+        UnnamedMixinApplicationElementX;
+import '../ordered_typeset.dart' show OrderedTypeSet, OrderedTypeSetBuilder;
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Link,
-    Setlet;
-import '../universe/call_structure.dart' show
-    CallStructure;
+import '../util/util.dart' show Link, Setlet;
+import '../universe/call_structure.dart' show CallStructure;
 
 import 'enum_creator.dart';
-import 'members.dart' show
-    lookupInScope;
-import 'registry.dart' show
-    ResolutionRegistry;
-import 'resolution_common.dart' show
-    CommonResolverVisitor,
-    MappingVisitor;
-import 'scope.dart' show
-    Scope,
-    TypeDeclarationScope;
+import 'members.dart' show lookupInScope;
+import 'registry.dart' show ResolutionRegistry;
+import 'resolution_common.dart' show CommonResolverVisitor, MappingVisitor;
+import 'scope.dart' show Scope, TypeDeclarationScope;
 
 class TypeDefinitionVisitor extends MappingVisitor<DartType> {
   Scope scope;
   final TypeDeclarationElement enclosingElement;
   TypeDeclarationElement get element => enclosingElement;
 
-  TypeDefinitionVisitor(Compiler compiler,
-                        TypeDeclarationElement element,
-                        ResolutionRegistry registry)
+  TypeDefinitionVisitor(Compiler compiler, TypeDeclarationElement element,
+      ResolutionRegistry registry)
       : this.enclosingElement = element,
         scope = Scope.buildEnclosingScope(element),
         super(compiler, registry);
@@ -59,7 +44,6 @@
 
   DartType get objectType => coreTypes.objectType;
 
-
   void resolveTypeVariableBounds(NodeList node) {
     if (node == null) return;
 
@@ -83,8 +67,8 @@
 
       TypeVariableElementX variableElement = typeVariable.element;
       if (typeNode.bound != null) {
-        DartType boundType = typeResolver.resolveTypeAnnotation(
-            this, typeNode.bound);
+        DartType boundType =
+            typeResolver.resolveTypeAnnotation(this, typeNode.bound);
         variableElement.boundCache = boundType;
 
         void checkTypeVariableBound() {
@@ -134,18 +118,17 @@
 class ClassResolverVisitor extends TypeDefinitionVisitor {
   BaseClassElementX get element => enclosingElement;
 
-  ClassResolverVisitor(Compiler compiler,
-                       ClassElement classElement,
-                       ResolutionRegistry registry)
-    : super(compiler, classElement, registry);
+  ClassResolverVisitor(
+      Compiler compiler, ClassElement classElement, ResolutionRegistry registry)
+      : super(compiler, classElement, registry);
 
   DartType visitClassNode(ClassNode node) {
     if (element == null) {
       throw reporter.internalError(node, 'element is null');
     }
     if (element.resolutionState != STATE_STARTED) {
-      throw reporter.internalError(element,
-          'cyclic resolution of class $element');
+      throw reporter.internalError(
+          element, 'cyclic resolution of class $element');
     }
 
     element.computeType(resolution);
@@ -163,8 +146,8 @@
         DartType supertype = resolveSupertype(element, superMixin.superclass);
         Link<Node> link = superMixin.mixins.nodes;
         while (!link.isEmpty) {
-          supertype = applyMixin(supertype,
-                                 checkMixinType(link.head), link.head);
+          supertype =
+              applyMixin(supertype, checkMixinType(link.head), link.head);
           link = link.tail;
         }
         element.supertype = supertype;
@@ -181,8 +164,8 @@
       // Avoid making the superclass (usually Object) extend itself.
       if (element != superElement) {
         if (superElement == null) {
-          reporter.internalError(node,
-              "Cannot resolve default superclass for $element.");
+          reporter.internalError(
+              node, "Cannot resolve default superclass for $element.");
         } else {
           superElement.ensureResolved(resolution);
         }
@@ -205,23 +188,21 @@
         // TODO(ahe): Why is this a compile-time error? Or if it is an error,
         // why do we bother to registerThrowNoSuchMethod below?
         reporter.reportErrorMessage(node, kind, arguments);
-        superMember = new ErroneousElementX(
-            kind, arguments, '', element);
+        superMember = new ErroneousElementX(kind, arguments, '', element);
         registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
       } else if (!superMember.isGenerativeConstructor) {
-          MessageKind kind = MessageKind.SUPER_CALL_TO_FACTORY;
-          Map arguments = {'className': element.superclass.name};
-          // TODO(ahe): Why is this a compile-time error? Or if it is an error,
-          // why do we bother to registerThrowNoSuchMethod below?
-          reporter.reportErrorMessage(node, kind, arguments);
-          superMember = new ErroneousElementX(
-              kind, arguments, '', element);
-          registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
+        MessageKind kind = MessageKind.SUPER_CALL_TO_FACTORY;
+        Map arguments = {'className': element.superclass.name};
+        // TODO(ahe): Why is this a compile-time error? Or if it is an error,
+        // why do we bother to registerThrowNoSuchMethod below?
+        reporter.reportErrorMessage(node, kind, arguments);
+        superMember = new ErroneousElementX(kind, arguments, '', element);
+        registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
       } else {
         ConstructorElement superConstructor = superMember;
         superConstructor.computeType(resolution);
-        if (!CallStructure.NO_ARGS.signatureApplies(
-                superConstructor.functionSignature)) {
+        if (!CallStructure.NO_ARGS
+            .signatureApplies(superConstructor.functionSignature)) {
           MessageKind kind = MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT;
           reporter.reportErrorMessage(node, kind);
           superMember = new ErroneousElementX(kind, {}, '', element);
@@ -243,8 +224,8 @@
       throw reporter.internalError(node, 'element is null');
     }
     if (element.resolutionState != STATE_STARTED) {
-      throw reporter.internalError(element,
-          'cyclic resolution of class $element');
+      throw reporter.internalError(
+          element, 'cyclic resolution of class $element');
     }
 
     InterfaceType enumType = element.computeType(resolution);
@@ -254,9 +235,7 @@
 
     if (node.names.nodes.isEmpty) {
       reporter.reportErrorMessage(
-          node,
-          MessageKind.EMPTY_ENUM_DECLARATION,
-          {'enumName': element.name});
+          node, MessageKind.EMPTY_ENUM_DECLARATION, {'enumName': element.name});
     }
 
     EnumCreator creator =
@@ -271,22 +250,14 @@
     DartType mixinType = resolveType(mixinNode);
     if (isBlackListed(mixinType)) {
       reporter.reportErrorMessage(
-          mixinNode,
-          MessageKind.CANNOT_MIXIN,
-          {'type': mixinType});
+          mixinNode, MessageKind.CANNOT_MIXIN, {'type': mixinType});
     } else if (mixinType.isTypeVariable) {
-      reporter.reportErrorMessage(
-          mixinNode,
-          MessageKind.CLASS_NAME_EXPECTED);
+      reporter.reportErrorMessage(mixinNode, MessageKind.CLASS_NAME_EXPECTED);
     } else if (mixinType.isMalformed) {
-      reporter.reportErrorMessage(
-          mixinNode,
-          MessageKind.CANNOT_MIXIN_MALFORMED,
+      reporter.reportErrorMessage(mixinNode, MessageKind.CANNOT_MIXIN_MALFORMED,
           {'className': element.name, 'malformedType': mixinType});
     } else if (mixinType.isEnumType) {
-      reporter.reportErrorMessage(
-          mixinNode,
-          MessageKind.CANNOT_MIXIN_ENUM,
+      reporter.reportErrorMessage(mixinNode, MessageKind.CANNOT_MIXIN_ENUM,
           {'className': element.name, 'enumType': mixinType});
     }
     return mixinType;
@@ -297,16 +268,15 @@
       throw reporter.internalError(node, 'element is null');
     }
     if (element.resolutionState != STATE_STARTED) {
-      throw reporter.internalError(element,
-          'cyclic resolution of class $element');
+      throw reporter.internalError(
+          element, 'cyclic resolution of class $element');
     }
 
     if (identical(node.classKeyword.stringValue, 'typedef')) {
       // TODO(aprelev@gmail.com): Remove this deprecation diagnostic
       // together with corresponding TODO in parser.dart.
       reporter.reportWarningMessage(
-          node.classKeyword,
-          MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX);
+          node.classKeyword, MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX);
     }
 
     element.computeType(resolution);
@@ -329,11 +299,8 @@
     String superName = supertype.name;
     String mixinName = mixinType.name;
     MixinApplicationElementX mixinApplication =
-        new UnnamedMixinApplicationElementX(
-          "${superName}+${mixinName}",
-          element.compilationUnit,
-          compiler.getNextFreeClassId(),
-          node);
+        new UnnamedMixinApplicationElementX("${superName}+${mixinName}",
+            element.compilationUnit, compiler.getNextFreeId(), node);
     // Create synthetic type variables for the mixin application.
     List<DartType> typeVariables = <DartType>[];
     int index = 0;
@@ -364,8 +331,8 @@
     // Replace the synthetic type variables by the original type variables in
     // the returned type (which should be the type actually extended).
     InterfaceType mixinThisType = mixinApplication.thisType;
-    return mixinThisType.subst(element.typeVariables,
-                               mixinThisType.typeArguments);
+    return mixinThisType.subst(
+        element.typeVariables, mixinThisType.typeArguments);
   }
 
   bool isDefaultConstructor(FunctionElement constructor) {
@@ -374,8 +341,8 @@
     return constructor.functionSignature.parameterCount == 0;
   }
 
-  FunctionElement createForwardingConstructor(ConstructorElement target,
-                                              ClassElement enclosing) {
+  FunctionElement createForwardingConstructor(
+      ConstructorElement target, ClassElement enclosing) {
     FunctionElement constructor =
         new SynthesizedConstructorElementX.notForDefault(
             target.name, target, enclosing);
@@ -383,10 +350,8 @@
     return constructor;
   }
 
-  void doApplyMixinTo(
-      MixinApplicationElementX mixinApplication,
-      DartType supertype,
-      DartType mixinType) {
+  void doApplyMixinTo(MixinApplicationElementX mixinApplication,
+      DartType supertype, DartType mixinType) {
     Node node = mixinApplication.parseNode(resolution.parsing);
 
     if (mixinApplication.supertype != null) {
@@ -402,8 +367,8 @@
     NamedMixinApplication namedMixinApplication =
         node.asNamedMixinApplication();
     Link<DartType> interfaces = (namedMixinApplication != null)
-        ? resolveInterfaces(namedMixinApplication.interfaces,
-                            namedMixinApplication.superclass)
+        ? resolveInterfaces(
+            namedMixinApplication.interfaces, namedMixinApplication.superclass)
         : const Link<DartType>();
 
     // The class that is the result of a mixin application implements
@@ -416,8 +381,8 @@
       }
       mixinApplication.interfaces = interfaces;
     } else {
-      assert(invariant(mixinApplication,
-          mixinApplication.hasIncompleteHierarchy));
+      assert(
+          invariant(mixinApplication, mixinApplication.hasIncompleteHierarchy));
     }
 
     ClassElement superclass = supertype.element;
@@ -449,13 +414,13 @@
     calculateAllSupertypes(mixinApplication);
   }
 
-  InterfaceType resolveMixinFor(MixinApplicationElement mixinApplication,
-                                DartType mixinType) {
+  InterfaceType resolveMixinFor(
+      MixinApplicationElement mixinApplication, DartType mixinType) {
     ClassElement mixin = mixinType.element;
     mixin.ensureResolved(resolution);
 
     // Check for cycles in the mixin chain.
-    ClassElement previous = mixinApplication;  // For better error messages.
+    ClassElement previous = mixinApplication; // For better error messages.
     ClassElement current = mixin;
     while (current != null && current.isMixinApplication) {
       MixinApplicationElement currentMixinApplication = current;
@@ -490,21 +455,16 @@
             {'className': element.name, 'malformedType': supertype});
         return objectType;
       } else if (supertype.isEnumType) {
-        reporter.reportErrorMessage(
-            superclass,
-            MessageKind.CANNOT_EXTEND_ENUM,
+        reporter.reportErrorMessage(superclass, MessageKind.CANNOT_EXTEND_ENUM,
             {'className': element.name, 'enumType': supertype});
         return objectType;
       } else if (!supertype.isInterfaceType) {
         reporter.reportErrorMessage(
-            superclass.typeName,
-            MessageKind.CLASS_NAME_EXPECTED);
+            superclass.typeName, MessageKind.CLASS_NAME_EXPECTED);
         return objectType;
       } else if (isBlackListed(supertype)) {
         reporter.reportErrorMessage(
-            superclass,
-            MessageKind.CANNOT_EXTEND,
-            {'type': supertype});
+            superclass, MessageKind.CANNOT_EXTEND, {'type': supertype});
         return objectType;
       }
     }
@@ -544,16 +504,12 @@
                 {'type': interfaceType});
           }
           if (result.contains(interfaceType)) {
-            reporter.reportErrorMessage(
-                link.head,
-                MessageKind.DUPLICATE_IMPLEMENTS,
-                {'type': interfaceType});
+            reporter.reportErrorMessage(link.head,
+                MessageKind.DUPLICATE_IMPLEMENTS, {'type': interfaceType});
           }
           result = result.prepend(interfaceType);
           if (isBlackListed(interfaceType)) {
-            reporter.reportErrorMessage(
-                link.head,
-                MessageKind.CANNOT_IMPLEMENT,
+            reporter.reportErrorMessage(link.head, MessageKind.CANNOT_IMPLEMENT,
                 {'type': interfaceType});
           }
         }
@@ -582,10 +538,9 @@
     if (cls.allSupertypesAndSelf != null) return;
     final DartType supertype = cls.supertype;
     if (supertype != null) {
-      cls.allSupertypesAndSelf =
-          new OrderedTypeSetBuilder(
-              cls, reporter: reporter, objectType: coreTypes.objectType)
-              .createOrderedTypeSet(supertype, cls.interfaces);
+      cls.allSupertypesAndSelf = new OrderedTypeSetBuilder(cls,
+              reporter: reporter, objectType: coreTypes.objectType)
+          .createOrderedTypeSet(supertype, cls.interfaces);
     } else {
       assert(cls == compiler.coreClasses.objectClass);
       cls.allSupertypesAndSelf =
@@ -595,16 +550,15 @@
 
   isBlackListed(DartType type) {
     LibraryElement lib = element.library;
-    return
-      !identical(lib, compiler.coreLibrary) &&
-      !compiler.backend.isBackendLibrary(lib) &&
-      (type.isDynamic ||
-       type == coreTypes.boolType ||
-       type == coreTypes.numType ||
-       type == coreTypes.intType ||
-       type == coreTypes.doubleType ||
-       type == coreTypes.stringType ||
-       type == coreTypes.nullType);
+    return !identical(lib, compiler.coreLibrary) &&
+        !compiler.backend.isBackendLibrary(lib) &&
+        (type.isDynamic ||
+            type == coreTypes.boolType ||
+            type == coreTypes.numType ||
+            type == coreTypes.intType ||
+            type == coreTypes.doubleType ||
+            type == coreTypes.stringType ||
+            type == coreTypes.nullType);
   }
 }
 
@@ -613,9 +567,9 @@
   ClassElement classElement;
 
   ClassSupertypeResolver(Compiler compiler, ClassElement cls)
-    : context = Scope.buildEnclosingScope(cls),
-      this.classElement = cls,
-      super(compiler);
+      : context = Scope.buildEnclosingScope(cls),
+        this.classElement = cls,
+        super(compiler);
 
   CoreClasses get coreClasses => compiler.coreClasses;
 
@@ -688,10 +642,8 @@
     Identifier selector = node.selector.asIdentifier();
     var e = prefixElement.lookupLocalMember(selector.source);
     if (e == null || !e.impliesType) {
-      reporter.reportErrorMessage(
-          node.selector,
-          MessageKind.CANNOT_RESOLVE_TYPE,
-          {'typeName': node.selector});
+      reporter.reportErrorMessage(node.selector,
+          MessageKind.CANNOT_RESOLVE_TYPE, {'typeName': node.selector});
       return;
     }
     loadSupertype(e, node);
diff --git a/pkg/compiler/lib/src/resolution/class_members.dart b/pkg/compiler/lib/src/resolution/class_members.dart
index 36feaa4..eb993bd 100644
--- a/pkg/compiler/lib/src/resolution/class_members.dart
+++ b/pkg/compiler/lib/src/resolution/class_members.dart
@@ -5,24 +5,21 @@
 library dart2js.resolution.compute_members;
 
 import '../common.dart';
-import '../common/names.dart' show
-    Identifiers,
-    Names;
-import '../common/resolution.dart' show
-    Resolution;
-import '../compiler.dart' show
-    Compiler;
+import '../common/names.dart' show Identifiers, Names;
+import '../common/resolution.dart' show Resolution;
+import '../compiler.dart' show Compiler;
 import '../dart_types.dart';
-import '../elements/elements.dart' show
-    ClassElement,
-    Element,
-    LibraryElement,
-    Member,
-    MemberElement,
-    MemberSignature,
-    MixinApplicationElement,
-    Name,
-    PublicName;
+import '../elements/elements.dart'
+    show
+        ClassElement,
+        Element,
+        LibraryElement,
+        Member,
+        MemberElement,
+        MemberSignature,
+        MixinApplicationElement,
+        Name,
+        PublicName;
 import '../util/util.dart';
 
 part 'member_impl.dart';
@@ -34,13 +31,14 @@
   final Iterable<String> computedMemberNames;
   final Map<Name, Member> classMembers;
 
-  Map<dynamic/* Member | Element */, Set<MessageKind>> reportedMessages =
+  Map<dynamic /* Member | Element */, Set<MessageKind>> reportedMessages =
       new Map<dynamic, Set<MessageKind>>();
 
-  MembersCreator(Compiler this.compiler,
-                 ClassElement this.cls,
-                 Iterable<String> this.computedMemberNames,
-                 Map<Name, Member> this.classMembers) {
+  MembersCreator(
+      Compiler this.compiler,
+      ClassElement this.cls,
+      Iterable<String> this.computedMemberNames,
+      Map<Name, Member> this.classMembers) {
     assert(invariant(cls, cls.isDeclaration,
         message: "Members may only be computed on declarations."));
   }
@@ -51,8 +49,7 @@
 
   void reportMessage(var marker, MessageKind kind, report()) {
     Set<MessageKind> messages =
-        reportedMessages.putIfAbsent(marker,
-            () => new Set<MessageKind>());
+        reportedMessages.putIfAbsent(marker, () => new Set<MessageKind>());
     if (messages.add(kind)) {
       report();
     }
@@ -60,13 +57,12 @@
 
   bool shouldSkipMember(MemberSignature member) {
     return member == null || shouldSkipName(member.name.text);
-
   }
 
   bool shouldSkipName(String name) {
     return computedMemberNames != null &&
-           // 'call' is implicitly contained in [computedMemberNames].
-           (name == Identifiers.call || computedMemberNames.contains(name));
+        // 'call' is implicitly contained in [computedMemberNames].
+        (name == Identifiers.call || computedMemberNames.contains(name));
   }
 
   /// Compute all members of [cls] with the given names.
@@ -159,8 +155,8 @@
         }
 
         if (names != null) {
-          _computeClassMember(compiler, mixinApplication.mixin,
-                              nameText, names);
+          _computeClassMember(
+              compiler, mixinApplication.mixin, nameText, names);
           for (Name memberName in names) {
             inheritMixinMember(
                 mixinApplication.mixin.lookupClassMember(memberName));
@@ -180,14 +176,13 @@
         if (shouldSkipName(elementName)) return;
         if (nameText != null && elementName != nameText) return;
 
-        void addDeclaredMember(Name name,
-                               DartType type, FunctionType functionType) {
+        void addDeclaredMember(
+            Name name, DartType type, FunctionType functionType) {
           DeclaredMember inherited = classMembers[name];
           DeclaredMember declared;
           if (element.isAbstract) {
             declared = new DeclaredAbstractMember(
-                name, element, thisType, type, functionType,
-                inherited);
+                name, element, thisType, type, functionType, inherited);
           } else {
             declared =
                 new DeclaredMember(name, element, thisType, type, functionType);
@@ -202,10 +197,11 @@
           DartType type = element.computeType(resolution);
           addDeclaredMember(name, type, new FunctionType.synthesized(type));
           if (!element.isConst && !element.isFinal) {
-            addDeclaredMember(name.setter, type,
+            addDeclaredMember(
+                name.setter,
+                type,
                 new FunctionType.synthesized(
-                                 const VoidType(),
-                                 <DartType>[type]));
+                    const VoidType(), <DartType>[type]));
           }
         } else if (element.isGetter) {
           FunctionType functionType = element.computeType(resolution);
@@ -242,9 +238,8 @@
   }
 
   /// Checks that [classMember] is a valid implementation for [interfaceMember].
-  void checkInterfaceMember(Name name,
-                            MemberSignature interfaceMember,
-                            Member classMember) {
+  void checkInterfaceMember(
+      Name name, MemberSignature interfaceMember, Member classMember) {
     if (classMember != null) {
       // TODO(johnniwinther): Check that the class member is a valid override
       // of the interface member.
@@ -259,54 +254,56 @@
       } else if (interfaceMember.isGetter) {
         kind = MessageKind.ABSTRACT_GETTER;
       }
-      reportMessage(
-          interfaceMember.element, MessageKind.ABSTRACT_METHOD, () {
-        reporter.reportWarningMessage(
-            interfaceMember.element, kind,
+      reportMessage(interfaceMember.element, MessageKind.ABSTRACT_METHOD, () {
+        reporter.reportWarningMessage(interfaceMember.element, kind,
             {'class': cls.name, 'name': name.text});
       });
     } else {
-       reportWarning(MessageKind singleKind,
-                     MessageKind multipleKind,
-                     MessageKind explicitlyDeclaredKind,
-                     [MessageKind implicitlyDeclaredKind]) {
+      reportWarning(MessageKind singleKind, MessageKind multipleKind,
+          MessageKind explicitlyDeclaredKind,
+          [MessageKind implicitlyDeclaredKind]) {
         Member inherited = interfaceMember.declarations.first;
-        reportMessage(
-            interfaceMember, MessageKind.UNIMPLEMENTED_METHOD, () {
+        reportMessage(interfaceMember, MessageKind.UNIMPLEMENTED_METHOD, () {
           DiagnosticMessage warning = reporter.createMessage(
               cls,
               interfaceMember.declarations.length == 1
-                  ? singleKind : multipleKind,
-              {'class': cls.name,
-               'name': name.text,
-               'method': interfaceMember,
-               'declarer': inherited.declarer});
+                  ? singleKind
+                  : multipleKind,
+              {
+                'class': cls.name,
+                'name': name.text,
+                'method': interfaceMember,
+                'declarer': inherited.declarer
+              });
           List<DiagnosticMessage> infos = <DiagnosticMessage>[];
           for (Member inherited in interfaceMember.declarations) {
             infos.add(reporter.createMessage(
                 inherited.element,
-                inherited.isDeclaredByField ?
-                    implicitlyDeclaredKind : explicitlyDeclaredKind,
-                {'class': inherited.declarer.name,
-                 'name': name.text}));
+                inherited.isDeclaredByField
+                    ? implicitlyDeclaredKind
+                    : explicitlyDeclaredKind,
+                {'class': inherited.declarer.name, 'name': name.text}));
           }
           reporter.reportWarning(warning, infos);
         });
       }
       if (interfaceMember.isSetter) {
-        reportWarning(MessageKind.UNIMPLEMENTED_SETTER_ONE,
-                      MessageKind.UNIMPLEMENTED_SETTER,
-                      MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER,
-                      MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER);
+        reportWarning(
+            MessageKind.UNIMPLEMENTED_SETTER_ONE,
+            MessageKind.UNIMPLEMENTED_SETTER,
+            MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER,
+            MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER);
       } else if (interfaceMember.isGetter) {
-        reportWarning(MessageKind.UNIMPLEMENTED_GETTER_ONE,
-                      MessageKind.UNIMPLEMENTED_GETTER,
-                      MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER,
-                      MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER);
+        reportWarning(
+            MessageKind.UNIMPLEMENTED_GETTER_ONE,
+            MessageKind.UNIMPLEMENTED_GETTER,
+            MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER,
+            MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER);
       } else if (interfaceMember.isMethod) {
-        reportWarning(MessageKind.UNIMPLEMENTED_METHOD_ONE,
-                      MessageKind.UNIMPLEMENTED_METHOD,
-                      MessageKind.UNIMPLEMENTED_METHOD_CONT);
+        reportWarning(
+            MessageKind.UNIMPLEMENTED_METHOD_ONE,
+            MessageKind.UNIMPLEMENTED_METHOD,
+            MessageKind.UNIMPLEMENTED_METHOD_CONT);
       }
     }
     // TODO(johnniwinther): If [cls] is not abstract, check that for all
@@ -326,13 +323,12 @@
     if (compiler.backend.isBackendLibrary(cls.library)) return;
 
     reportMessage(functionClass, MessageKind.UNIMPLEMENTED_METHOD, () {
-      reporter.reportWarningMessage(
-          cls,
-          MessageKind.UNIMPLEMENTED_METHOD_ONE,
-          {'class': cls.name,
-           'name': Identifiers.call,
-           'method': Identifiers.call,
-           'declarer': functionClass.name});
+      reporter.reportWarningMessage(cls, MessageKind.UNIMPLEMENTED_METHOD_ONE, {
+        'class': cls.name,
+        'name': Identifiers.call,
+        'method': Identifiers.call,
+        'declarer': functionClass.name
+      });
     });
   }
 
@@ -346,23 +342,20 @@
       if (!declared.isStatic) {
         ClassElement superclass = cls.superclass;
         while (superclass != null) {
-          Member superMember =
-              superclass.lookupClassMember(declared.name);
+          Member superMember = superclass.lookupClassMember(declared.name);
           if (superMember != null && superMember.isStatic) {
             reportMessage(superMember, MessageKind.INSTANCE_STATIC_SAME_NAME,
                 () {
               reporter.reportWarning(
                   reporter.createMessage(
-                      declared.element,
-                      MessageKind.INSTANCE_STATIC_SAME_NAME,
-                      {'memberName': declared.name,
-                       'className': superclass.name}),
+                      declared.element, MessageKind.INSTANCE_STATIC_SAME_NAME, {
+                    'memberName': declared.name,
+                    'className': superclass.name
+                  }),
                   <DiagnosticMessage>[
-                      reporter.createMessage(
-                          superMember.element,
-                          MessageKind.INSTANCE_STATIC_SAME_NAME_CONT),
+                    reporter.createMessage(superMember.element,
+                        MessageKind.INSTANCE_STATIC_SAME_NAME_CONT),
                   ]);
-
             });
             break;
           }
@@ -380,11 +373,12 @@
             continue;
           }
 
-          reportMessage(
-              inherited.element, MessageKind.NO_STATIC_OVERRIDE, () {
+          reportMessage(inherited.element, MessageKind.NO_STATIC_OVERRIDE, () {
             reportErrorWithContext(
-                declared.element, MessageKind.NO_STATIC_OVERRIDE,
-                inherited.element, MessageKind.NO_STATIC_OVERRIDE_CONT);
+                declared.element,
+                MessageKind.NO_STATIC_OVERRIDE,
+                inherited.element,
+                MessageKind.NO_STATIC_OVERRIDE_CONT);
           });
         }
       }
@@ -398,105 +392,102 @@
           // An error should already have been reported.
           assert(invariant(declared.element, compiler.compilationFailed,
               message: "Member $inherited inherited from its "
-                       "declaring class: ${cls}."));
+                  "declaring class: ${cls}."));
           continue;
         }
 
         void reportError(MessageKind errorKind, MessageKind infoKind) {
-          reportMessage(
-              inherited.element, MessageKind.INVALID_OVERRIDE_METHOD, () {
+          reportMessage(inherited.element, MessageKind.INVALID_OVERRIDE_METHOD,
+              () {
             reporter.reportError(
-                reporter.createMessage(
-                    declared.element,
-                    errorKind,
-                    {'name': declared.name.text,
-                     'class': cls.thisType,
-                     'inheritedClass': inherited.declarer}),
+                reporter.createMessage(declared.element, errorKind, {
+                  'name': declared.name.text,
+                  'class': cls.thisType,
+                  'inheritedClass': inherited.declarer
+                }),
                 <DiagnosticMessage>[
-                    reporter.createMessage(
-                        inherited.element,
-                        infoKind,
-                        {'name': declared.name.text,
-                         'class': inherited.declarer}),
+                  reporter.createMessage(inherited.element, infoKind, {
+                    'name': declared.name.text,
+                    'class': inherited.declarer
+                  }),
                 ]);
           });
         }
 
         if (declared.isDeclaredByField && inherited.isMethod) {
           reportError(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD,
-                      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT);
+              MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT);
         } else if (declared.isMethod && inherited.isDeclaredByField) {
           reportError(MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD,
-                      MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT);
+              MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT);
         } else if (declared.isGetter && inherited.isMethod) {
           reportError(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER,
-                      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT);
+              MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT);
         } else if (declared.isMethod && inherited.isGetter) {
           reportError(MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD,
-                      MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT);
+              MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT);
         } else {
           DartType inheritedType = inherited.functionType;
           if (!compiler.types.isSubtype(declaredType, inheritedType)) {
-            void reportWarning(var marker,
-                               MessageKind warningKind,
-                               MessageKind infoKind) {
+            void reportWarning(
+                var marker, MessageKind warningKind, MessageKind infoKind) {
               reportMessage(marker, MessageKind.INVALID_OVERRIDE_METHOD, () {
                 reporter.reportWarning(
-                    reporter.createMessage(
-                        declared.element,
-                        warningKind,
-                        {'declaredType': declared.type,
-                         'name': declared.name.text,
-                         'class': cls.thisType,
-                         'inheritedType': inherited.type,
-                         'inheritedClass': inherited.declarer}),
+                    reporter.createMessage(declared.element, warningKind, {
+                      'declaredType': declared.type,
+                      'name': declared.name.text,
+                      'class': cls.thisType,
+                      'inheritedType': inherited.type,
+                      'inheritedClass': inherited.declarer
+                    }),
                     <DiagnosticMessage>[
-                        reporter.createMessage(
-                            inherited.element,
-                            infoKind,
-                            {'name': declared.name.text,
-                             'class': inherited.declarer}),
+                      reporter.createMessage(inherited.element, infoKind, {
+                        'name': declared.name.text,
+                        'class': inherited.declarer
+                      }),
                     ]);
               });
             }
             if (declared.isDeclaredByField) {
               if (inherited.isDeclaredByField) {
-                reportWarning(inherited.element,
-                              MessageKind.INVALID_OVERRIDE_FIELD,
-                              MessageKind.INVALID_OVERRIDDEN_FIELD);
+                reportWarning(
+                    inherited.element,
+                    MessageKind.INVALID_OVERRIDE_FIELD,
+                    MessageKind.INVALID_OVERRIDDEN_FIELD);
               } else if (inherited.isGetter) {
-                reportWarning(inherited,
-                              MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD,
-                              MessageKind.INVALID_OVERRIDDEN_GETTER);
+                reportWarning(
+                    inherited,
+                    MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD,
+                    MessageKind.INVALID_OVERRIDDEN_GETTER);
               } else if (inherited.isSetter) {
-                reportWarning(inherited,
-                              MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD,
-                              MessageKind.INVALID_OVERRIDDEN_SETTER);
+                reportWarning(
+                    inherited,
+                    MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD,
+                    MessageKind.INVALID_OVERRIDDEN_SETTER);
               }
             } else if (declared.isGetter) {
               if (inherited.isDeclaredByField) {
-                reportWarning(inherited,
-                              MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER,
-                              MessageKind.INVALID_OVERRIDDEN_FIELD);
+                reportWarning(
+                    inherited,
+                    MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER,
+                    MessageKind.INVALID_OVERRIDDEN_FIELD);
               } else {
-                reportWarning(inherited,
-                              MessageKind.INVALID_OVERRIDE_GETTER,
-                              MessageKind.INVALID_OVERRIDDEN_GETTER);
+                reportWarning(inherited, MessageKind.INVALID_OVERRIDE_GETTER,
+                    MessageKind.INVALID_OVERRIDDEN_GETTER);
               }
             } else if (declared.isSetter) {
               if (inherited.isDeclaredByField) {
-                reportWarning(inherited,
-                              MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER,
-                              MessageKind.INVALID_OVERRIDDEN_FIELD);
+                reportWarning(
+                    inherited,
+                    MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER,
+                    MessageKind.INVALID_OVERRIDDEN_FIELD);
               } else {
-                reportWarning(inherited,
-                              MessageKind.INVALID_OVERRIDE_SETTER,
-                              MessageKind.INVALID_OVERRIDDEN_SETTER);
+                reportWarning(inherited, MessageKind.INVALID_OVERRIDE_SETTER,
+                    MessageKind.INVALID_OVERRIDDEN_SETTER);
               }
             } else {
-              reportWarning(inherited,
-                            MessageKind.INVALID_OVERRIDE_METHOD,
-                            MessageKind.INVALID_OVERRIDDEN_METHOD);
+              reportWarning(inherited, MessageKind.INVALID_OVERRIDE_METHOD,
+                  MessageKind.INVALID_OVERRIDDEN_METHOD);
             }
           }
         }
@@ -504,36 +495,37 @@
     }
   }
 
-  void reportErrorWithContext(Element errorneousElement,
-                              MessageKind errorMessage,
-                              Element contextElement,
-                              MessageKind contextMessage) {
+  void reportErrorWithContext(
+      Element errorneousElement,
+      MessageKind errorMessage,
+      Element contextElement,
+      MessageKind contextMessage) {
     reporter.reportError(
-        reporter.createMessage(
-            errorneousElement,
-            errorMessage,
-            {'memberName': contextElement.name,
-             'className': contextElement.enclosingClass.name}),
+        reporter.createMessage(errorneousElement, errorMessage, {
+          'memberName': contextElement.name,
+          'className': contextElement.enclosingClass.name
+        }),
         <DiagnosticMessage>[
-            reporter.createMessage(contextElement, contextMessage),
+          reporter.createMessage(contextElement, contextMessage),
         ]);
   }
 
   /// Compute all class and interface names by the [name] in [cls].
-  static void computeClassMembersByName(Compiler compiler,
-                                        ClassMemberMixin cls,
-                                        String name) {
+  static void computeClassMembersByName(
+      Compiler compiler, ClassMemberMixin cls, String name) {
     if (cls.isMemberComputed(name)) return;
     LibraryElement library = cls.library;
-    _computeClassMember(compiler, cls, name,
-        new Setlet<Name>()..add(new Name(name, library))
-                          ..add(new Name(name, library, isSetter: true)));
+    _computeClassMember(
+        compiler,
+        cls,
+        name,
+        new Setlet<Name>()
+          ..add(new Name(name, library))
+          ..add(new Name(name, library, isSetter: true)));
   }
 
-  static void _computeClassMember(Compiler compiler,
-                                  ClassMemberMixin cls,
-                                  String name,
-                                  Setlet<Name> names) {
+  static void _computeClassMember(Compiler compiler, ClassMemberMixin cls,
+      String name, Setlet<Name> names) {
     cls.computeClassMember(compiler, name, names);
   }
 
@@ -546,10 +538,8 @@
 /// Class member creator for classes where the interface members are known to
 /// be a subset of the class members.
 class ClassMembersCreator extends MembersCreator {
-  ClassMembersCreator(Compiler compiler,
-                      ClassElement cls,
-                      Iterable<String> computedMemberNames,
-                      Map<Name, Member> classMembers)
+  ClassMembersCreator(Compiler compiler, ClassElement cls,
+      Iterable<String> computedMemberNames, Map<Name, Member> classMembers)
       : super(compiler, cls, computedMemberNames, classMembers);
 
   Map<Name, Member> computeMembers(String name, Setlet<Name> names) {
@@ -565,7 +555,7 @@
     LibraryElement library = cls.library;
     classMembers.forEach((Name name, Member classMember) {
       if (!name.isAccessibleFrom(library)) return;
-     checkInterfaceMember(name, classMember, classMember.implementation);
+      checkInterfaceMember(name, classMember, classMember.implementation);
     });
   }
 }
@@ -575,11 +565,12 @@
 class InterfaceMembersCreator extends MembersCreator {
   final Map<Name, MemberSignature> interfaceMembers;
 
-  InterfaceMembersCreator(Compiler compiler,
-                          ClassElement cls,
-                          Iterable<String> computedMemberNames,
-                          Map<Name, Member> classMembers,
-                          Map<Name, MemberSignature> this.interfaceMembers)
+  InterfaceMembersCreator(
+      Compiler compiler,
+      ClassElement cls,
+      Iterable<String> computedMemberNames,
+      Map<Name, Member> classMembers,
+      Map<Name, MemberSignature> this.interfaceMembers)
       : super(compiler, cls, computedMemberNames, classMembers);
 
   Map<Name, Member> computeMembers(String name, Setlet<Name> names) {
@@ -596,16 +587,14 @@
   ///
   /// If [name] and [names] are not null, the computation is restricted to
   /// members with these names.
-  Map<Name, Setlet<Member>> computeSuperMembers(String name,
-                                                Setlet<Name> names) {
+  Map<Name, Setlet<Member>> computeSuperMembers(
+      String name, Setlet<Name> names) {
     computeSuperClassMembers(name, names);
     return computeSuperInterfaceMembers(name, names);
   }
 
-  Map<Name, Setlet<Member>> computeSuperInterfaceMembers(String name,
-                                                         Setlet<Name> names) {
-
-
+  Map<Name, Setlet<Member>> computeSuperInterfaceMembers(
+      String name, Setlet<Name> names) {
     InterfaceType supertype = cls.supertype;
     assert(invariant(cls, supertype != null,
         message: "Interface members computed for $cls."));
@@ -614,12 +603,11 @@
     Map<Name, Setlet<Member>> inheritedInterfaceMembers =
         new Map<Name, Setlet<Member>>();
 
-    void inheritInterfaceMember(InterfaceType supertype,
-                                MemberSignature member) {
+    void inheritInterfaceMember(
+        InterfaceType supertype, MemberSignature member) {
       if (shouldSkipMember(member)) return;
-      Setlet<Member> members =
-          inheritedInterfaceMembers.putIfAbsent(
-              member.name, () => new Setlet<Member>());
+      Setlet<Member> members = inheritedInterfaceMembers.putIfAbsent(
+          member.name, () => new Setlet<Member>());
       for (DeclaredMember declaredMember in member.declarations) {
         members.add(declaredMember.inheritFrom(supertype));
       }
@@ -633,8 +621,8 @@
 
     if (names != null) {
       for (Name memberName in names) {
-        inheritInterfaceMember(supertype,
-            superclass.lookupInterfaceMember(memberName));
+        inheritInterfaceMember(
+            supertype, superclass.lookupInterfaceMember(memberName));
       }
     } else {
       inheritInterfaceMembers(supertype);
@@ -642,8 +630,8 @@
 
     // Inherit interface members from superinterfaces.
     for (Link<DartType> link = cls.interfaces;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       InterfaceType superinterface = link.head;
       if (names != null) {
         MembersCreator._computeClassMember(
@@ -677,14 +665,14 @@
   /// interface members [inheritedInterfaceMembers] and declared members
   /// [declaredMembers]. The computed members are stored in [interfaceMembers].
   void computeInterfaceMembers(
-        Map<Name, Setlet<Member>> inheritedInterfaceMembers,
-        Map<Name, Member> declaredMembers) {
+      Map<Name, Setlet<Member>> inheritedInterfaceMembers,
+      Map<Name, Member> declaredMembers) {
     InterfaceType thisType = cls.thisType;
     // Compute the interface members by overriding the inherited members with
     // a declared member or by computing a single, possibly synthesized,
     // inherited member.
-    inheritedInterfaceMembers.forEach(
-        (Name name, Setlet<Member> inheritedMembers) {
+    inheritedInterfaceMembers
+        .forEach((Name name, Setlet<Member> inheritedMembers) {
       Member declared = declaredMembers[name];
       if (declared != null) {
         // Check that [declaredMember] is a valid override
@@ -710,19 +698,20 @@
             if (someAreGetters) break outer;
           }
           for (MemberSignature other in inheritedMembers) {
-            if (!compiler.types.isSubtype(inherited.functionType,
-                                          other.functionType)) {
+            if (!compiler.types
+                .isSubtype(inherited.functionType, other.functionType)) {
               continue outer;
             }
           }
-          subtypesOfAllInherited.putIfAbsent(inherited.functionType,
-              () => new Setlet<Member>()).add(inherited);
+          subtypesOfAllInherited
+              .putIfAbsent(inherited.functionType, () => new Setlet<Member>())
+              .add(inherited);
         }
         if (someAreGetters && !allAreGetters) {
           DiagnosticMessage warning = reporter.createMessage(
               cls,
               MessageKind.INHERIT_GETTER_AND_METHOD,
-              {'class': thisType, 'name': name.text });
+              {'class': thisType, 'name': name.text});
           List<DiagnosticMessage> infos = <DiagnosticMessage>[];
           for (Member inherited in inheritedMembers) {
             MessageKind kind;
@@ -731,16 +720,14 @@
             } else {
               assert(invariant(cls, inherited.isGetter,
                   message: 'Conflicting member is neither a method nor a '
-                           'getter.'));
+                      'getter.'));
               if (inherited.isDeclaredByField) {
                 kind = MessageKind.INHERITED_IMPLICIT_GETTER;
               } else {
                 kind = MessageKind.INHERITED_EXPLICIT_GETTER;
               }
             }
-            infos.add(reporter.createMessage(
-                inherited.element,
-                kind,
+            infos.add(reporter.createMessage(inherited.element, kind,
                 {'class': inherited.declarer, 'name': name.text}));
           }
           reporter.reportWarning(warning, infos);
@@ -771,8 +758,7 @@
   }
 
   /// Create and inherit a synthesized member for [inheritedMembers].
-  void _inheritedSynthesizedMember(Name name,
-                                   Setlet<Member> inheritedMembers) {
+  void _inheritedSynthesizedMember(Name name, Setlet<Member> inheritedMembers) {
     // Multiple signatures with different types => create the synthesized
     // version.
     int minRequiredParameters;
@@ -786,8 +772,7 @@
       }
       if (member.type.isFunctionType) {
         FunctionType type = member.type;
-        type.namedParameters.forEach(
-            (String name) => names.add(name));
+        type.namedParameters.forEach((String name) => names.add(name));
         requiredParameters = type.parameterTypes.length;
         optionalParameters = type.optionalParameterTypes.length;
       }
@@ -801,8 +786,7 @@
         maxPositionalParameters = positionalParameters;
       }
     }
-    int optionalParameters =
-        maxPositionalParameters - minRequiredParameters;
+    int optionalParameters = maxPositionalParameters - minRequiredParameters;
     // TODO(johnniwinther): Support function types with both optional
     // and named parameters?
     if (optionalParameters == 0 || names.isEmpty) {
@@ -811,18 +795,18 @@
           new List.filled(minRequiredParameters, dynamic);
       List<DartType> optionalParameterTypes =
           new List.filled(optionalParameters, dynamic);
-      List<String> namedParameters =
-          names.toList()..sort((a, b) => a.compareTo(b));
+      List<String> namedParameters = names.toList()
+        ..sort((a, b) => a.compareTo(b));
       List<DartType> namedParameterTypes =
           new List.filled(namedParameters.length, dynamic);
       FunctionType memberType = new FunctionType.synthesized(
           const DynamicType(),
           requiredParameterTypes,
           optionalParameterTypes,
-          namedParameters, namedParameterTypes);
+          namedParameters,
+          namedParameterTypes);
       DartType type = memberType;
-      if (inheritedMembers.first.isGetter ||
-          inheritedMembers.first.isSetter) {
+      if (inheritedMembers.first.isGetter || inheritedMembers.first.isSetter) {
         type = const DynamicType();
       }
       interfaceMembers[name] =
@@ -858,9 +842,9 @@
       if (interfaceMembersAreClassMembers) {
         ClassMemberMixin superclass = this.superclass;
         if ((superclass != null &&
-             (!superclass.interfaceMembersAreClassMembers ||
-              superclass.isMixinApplication)) ||
-             !interfaces.isEmpty) {
+                (!superclass.interfaceMembersAreClassMembers ||
+                    superclass.isMixinApplication)) ||
+            !interfaces.isEmpty) {
           interfaceMembersAreClassMembers = false;
         }
       }
@@ -869,10 +853,10 @@
       }
     }
     return interfaceMembersAreClassMembers
-        ? new ClassMembersCreator(compiler, this,
-            computedMemberNames, classMembers)
-        : new InterfaceMembersCreator(compiler, this,
-            computedMemberNames, classMembers, interfaceMembers);
+        ? new ClassMembersCreator(
+            compiler, this, computedMemberNames, classMembers)
+        : new InterfaceMembersCreator(compiler, this, computedMemberNames,
+            classMembers, interfaceMembers);
   }
 
   static Iterable<String> _EMPTY_MEMBERS_NAMES = const <String>[];
@@ -883,8 +867,9 @@
   void computeClassMember(Compiler compiler, String name, Setlet<Name> names) {
     if (isMemberComputed(name)) return;
     if (Name.isPrivateName(name)) {
-      names..add(new Name(name, library))
-           ..add(new Name(name, library, isSetter: true));
+      names
+        ..add(new Name(name, library))
+        ..add(new Name(name, library, isSetter: true));
     }
     MembersCreator creator = _prepareCreator(compiler);
     creator.computeMembersByName(name, names);
@@ -918,14 +903,12 @@
     if (computedMemberNames == null) {
       return classMembers != null;
     } else {
-      return name == Identifiers.call ||
-             computedMemberNames.contains(name);
+      return name == Identifiers.call || computedMemberNames.contains(name);
     }
   }
 
   Member lookupClassMember(Name name) {
-    assert(invariant(this,
-        isMemberComputed(name.text),
+    assert(invariant(this, isMemberComputed(name.text),
         message: "Member ${name} has not been computed for $this."));
     return classMembers[name];
   }
diff --git a/pkg/compiler/lib/src/resolution/constructors.dart b/pkg/compiler/lib/src/resolution/constructors.dart
index 664ac0d..9e40cff 100644
--- a/pkg/compiler/lib/src/resolution/constructors.dart
+++ b/pkg/compiler/lib/src/resolution/constructors.dart
@@ -5,39 +5,32 @@
 library dart2js.resolution.constructors;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Feature;
-import '../compiler.dart' show
-    Compiler;
-import '../constants/constructors.dart' show
-    GenerativeConstantConstructor,
-    RedirectingGenerativeConstantConstructor;
+import '../common/resolution.dart' show Feature;
+import '../compiler.dart' show Compiler;
+import '../constants/constructors.dart'
+    show
+        GenerativeConstantConstructor,
+        RedirectingGenerativeConstantConstructor;
 import '../constants/expressions.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    ConstructorElementX,
-    ErroneousConstructorElementX,
-    ErroneousElementX,
-    ErroneousFieldElementX,
-    FieldElementX,
-    InitializingFormalElementX,
-    ParameterElementX;
+import '../elements/modelx.dart'
+    show
+        ConstructorElementX,
+        ErroneousConstructorElementX,
+        ErroneousElementX,
+        ErroneousFieldElementX,
+        FieldElementX,
+        InitializingFormalElementX,
+        ParameterElementX;
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Link;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/use.dart' show
-    StaticUse;
+import '../util/util.dart' show Link;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/use.dart' show StaticUse;
 
-import 'members.dart' show
-    lookupInScope,
-    ResolverVisitor;
-import 'registry.dart' show
-    ResolutionRegistry;
-import 'resolution_common.dart' show
-    CommonResolverVisitor;
+import 'members.dart' show lookupInScope, ResolverVisitor;
+import 'registry.dart' show ResolutionRegistry;
+import 'resolution_common.dart' show CommonResolverVisitor;
 import 'resolution_result.dart';
 
 class InitializerResolver {
@@ -66,19 +59,14 @@
     return node.receiver.asIdentifier().isThis();
   }
 
-  reportDuplicateInitializerError(Element field,
-                                  Node init,
-                                  Spannable existing) {
+  reportDuplicateInitializerError(
+      Element field, Node init, Spannable existing) {
     reporter.reportError(
         reporter.createMessage(
-            init,
-            MessageKind.DUPLICATE_INITIALIZER,
-            {'fieldName': field.name}),
+            init, MessageKind.DUPLICATE_INITIALIZER, {'fieldName': field.name}),
         <DiagnosticMessage>[
-            reporter.createMessage(
-                existing,
-                MessageKind.ALREADY_INITIALIZED,
-                {'fieldName': field.name}),
+          reporter.createMessage(existing, MessageKind.ALREADY_INITIALIZED,
+              {'fieldName': field.name}),
         ]);
     isValidAsConstant = false;
   }
@@ -92,9 +80,11 @@
       field.parseNode(visitor.resolution.parsing);
       Expression initializer = field.initializer;
       if (initializer != null) {
-        reportDuplicateInitializerError(field, init,
-            reporter.withCurrentElement(field,
-                () => reporter.spanFromSpannable(initializer)));
+        reportDuplicateInitializerError(
+            field,
+            init,
+            reporter.withCurrentElement(
+                field, () => reporter.spanFromSpannable(initializer)));
       }
     }
     initialized[field] = init;
@@ -137,8 +127,7 @@
       registry.registerStaticUse(new StaticUse.fieldInit(field));
     }
     // Resolve initializing value.
-    ResolutionResult result = visitor.visitInStaticContext(
-        init.arguments.head,
+    ResolutionResult result = visitor.visitInStaticContext(init.arguments.head,
         inConstantInitializer: isConst);
     if (isConst) {
       if (result.isConstant && field != null) {
@@ -151,7 +140,7 @@
   }
 
   InterfaceType getSuperOrThisLookupTarget(Node diagnosticNode,
-                                           {bool isSuperCall}) {
+      {bool isSuperCall}) {
     if (isSuperCall) {
       // Calculate correct lookup target and constructor name.
       if (constructor.enclosingClass.isObject) {
@@ -179,17 +168,14 @@
     ClassElement lookupTarget = targetType.element;
     String constructorName =
         visitor.getRedirectingThisOrSuperConstructorName(node).text;
-    ConstructorElement foundConstructor = findConstructor(
-        constructor.library, lookupTarget, constructorName);
+    ConstructorElement foundConstructor =
+        findConstructor(constructor.library, lookupTarget, constructorName);
 
     final bool isImplicitSuperCall = false;
     final String className = lookupTarget.name;
     CallStructure callStructure = argumentsResult.callStructure;
     ConstructorElement calledConstructor = verifyThatConstructorMatchesCall(
-        node,
-        foundConstructor,
-        callStructure,
-        className,
+        node, foundConstructor, callStructure, className,
         constructorName: constructorName,
         isThisCall: !isSuperCall,
         isImplicitSuperCall: false);
@@ -197,9 +183,8 @@
     // [InitializerStructure].
     registry.useElement(node, calledConstructor);
     if (!calledConstructor.isError) {
-      registry.registerStaticUse(
-          new StaticUse.superConstructorInvoke(
-              calledConstructor, callStructure));
+      registry.registerStaticUse(new StaticUse.superConstructorInvoke(
+          calledConstructor, callStructure));
     }
     if (isConst) {
       if (isValidAsConstant &&
@@ -209,10 +194,7 @@
         return new ConstantResult(
             node,
             new ConstructedConstantExpression(
-                targetType,
-                calledConstructor,
-                callStructure,
-                arguments),
+                targetType, calledConstructor, callStructure, arguments),
             element: calledConstructor);
       } else {
         isValidAsConstant = false;
@@ -238,10 +220,7 @@
       final String className = lookupTarget.name;
       CallStructure callStructure = CallStructure.NO_ARGS;
       ConstructorElement result = verifyThatConstructorMatchesCall(
-          functionNode,
-          calledConstructor,
-          callStructure,
-          className,
+          functionNode, calledConstructor, callStructure, className,
           isImplicitSuperCall: true);
       if (!result.isError) {
         registry.registerStaticUse(
@@ -249,24 +228,17 @@
       }
 
       if (isConst && isValidAsConstant) {
-        return new ConstructedConstantExpression(
-            targetType,
-            result,
-            CallStructure.NO_ARGS,
-            const <ConstantExpression>[]);
+        return new ConstructedConstantExpression(targetType, result,
+            CallStructure.NO_ARGS, const <ConstantExpression>[]);
       }
     }
     return null;
   }
 
   ConstructorElement reportAndCreateErroneousConstructor(
-      Spannable diagnosticNode,
-      String name,
-      MessageKind kind,
-      Map arguments) {
+      Spannable diagnosticNode, String name, MessageKind kind, Map arguments) {
     isValidAsConstant = false;
-    reporter.reportErrorMessage(
-        diagnosticNode, kind, arguments);
+    reporter.reportErrorMessage(diagnosticNode, kind, arguments);
     return new ErroneousConstructorElementX(
         kind, arguments, name, visitor.currentClass);
   }
@@ -282,8 +254,8 @@
       CallStructure callStructure,
       String className,
       {String constructorName: '',
-       bool isImplicitSuperCall: false,
-       bool isThisCall: false}) {
+      bool isImplicitSuperCall: false,
+      bool isThisCall: false}) {
     Element result = lookedupConstructor;
     if (lookedupConstructor == null) {
       String fullConstructorName =
@@ -291,19 +263,18 @@
       MessageKind kind = isImplicitSuperCall
           ? MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT
           : MessageKind.CANNOT_RESOLVE_CONSTRUCTOR;
-      result = reportAndCreateErroneousConstructor(
-          node, constructorName,
-          kind, {'constructorName': fullConstructorName});
+      result = reportAndCreateErroneousConstructor(node, constructorName, kind,
+          {'constructorName': fullConstructorName});
     } else if (!lookedupConstructor.isGenerativeConstructor) {
       MessageKind kind = isThisCall
           ? MessageKind.THIS_CALL_TO_FACTORY
           : MessageKind.SUPER_CALL_TO_FACTORY;
-      result = reportAndCreateErroneousConstructor(
-          node, constructorName, kind, {});
+      result =
+          reportAndCreateErroneousConstructor(node, constructorName, kind, {});
     } else {
       lookedupConstructor.computeType(visitor.resolution);
-      if (!callStructure.signatureApplies(
-               lookedupConstructor.functionSignature)) {
+      if (!callStructure
+          .signatureApplies(lookedupConstructor.functionSignature)) {
         MessageKind kind = isImplicitSuperCall
             ? MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT
             : MessageKind.NO_MATCHING_CONSTRUCTOR;
@@ -325,8 +296,8 @@
    * constructor, the resolved constructor's function element is returned.
    */
   ConstructorElement resolveInitializers() {
-    Map<dynamic/*String|int*/, ConstantExpression> defaultValues =
-        <dynamic/*String|int*/, ConstantExpression>{};
+    Map<dynamic /*String|int*/, ConstantExpression> defaultValues =
+        <dynamic /*String|int*/, ConstantExpression>{};
     ConstructedConstantExpression constructorInvocation;
     // Keep track of all "this.param" parameters specified for constructor so
     // that we can ensure that fields are initialized only once.
@@ -437,8 +408,7 @@
             if (isConst && isValidAsConstant) {
               constructor.constantConstructor =
                   new RedirectingGenerativeConstantConstructor(
-                      defaultValues,
-                      constructorInvocation);
+                      defaultValues, constructorInvocation);
             }
           }
           return result.element;
@@ -448,8 +418,7 @@
           return null;
         }
       } else {
-        reporter.reportErrorMessage(
-            link.head, MessageKind.INVALID_INITIALIZER);
+        reporter.reportErrorMessage(link.head, MessageKind.INVALID_INITIALIZER);
       }
     }
     if (!resolvedSuper) {
@@ -462,7 +431,7 @@
           fieldInitializers,
           constructorInvocation);
     }
-    return null;  // If there was no redirection always return null.
+    return null; // If there was no redirection always return null.
   }
 }
 
@@ -471,7 +440,7 @@
   final bool inConstContext;
 
   ConstructorResolver(Compiler compiler, this.resolver,
-                      {bool this.inConstContext: false})
+      {bool this.inConstContext: false})
       : super(compiler);
 
   ResolutionRegistry get registry => resolver.registry;
@@ -489,8 +458,8 @@
       MessageKind kind,
       Map arguments,
       {bool isError: false,
-       bool missingConstructor: false,
-       List<DiagnosticMessage> infos: const <DiagnosticMessage>[]}) {
+      bool missingConstructor: false,
+      List<DiagnosticMessage> infos: const <DiagnosticMessage>[]}) {
     if (missingConstructor) {
       registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
     } else {
@@ -503,19 +472,16 @@
     } else {
       reporter.reportWarning(message, infos);
     }
-    ErroneousElement error = new ErroneousConstructorElementX(
-        kind, arguments, name, enclosing);
+    ErroneousElement error =
+        new ErroneousConstructorElementX(kind, arguments, name, enclosing);
     if (type == null) {
       type = new MalformedType(error, null);
     }
     return new ConstructorResult.forError(resultKind, error, type);
   }
 
-  ConstructorResult resolveConstructor(
-      PrefixElement prefix,
-      InterfaceType type,
-      Node diagnosticNode,
-      String constructorName) {
+  ConstructorResult resolveConstructor(PrefixElement prefix, InterfaceType type,
+      Node diagnosticNode, String constructorName) {
     ClassElement cls = type.element;
     cls.ensureResolved(resolution);
     ConstructorElement constructor = findConstructor(
@@ -526,8 +492,11 @@
           : MessageKind.CANNOT_FIND_CONSTRUCTOR;
       return reportAndCreateErroneousConstructorElement(
           diagnosticNode,
-          ConstructorResultKind.UNRESOLVED_CONSTRUCTOR, type,
-          cls, constructorName, kind,
+          ConstructorResultKind.UNRESOLVED_CONSTRUCTOR,
+          type,
+          cls,
+          constructorName,
+          kind,
           {'className': cls.name, 'constructorName': constructorName},
           missingConstructor: true);
     } else if (inConstContext && !constructor.isConst) {
@@ -539,8 +508,10 @@
       if (cls.isEnumClass && resolver.currentClass != cls) {
         return reportAndCreateErroneousConstructorElement(
             diagnosticNode,
-            ConstructorResultKind.INVALID_TYPE, type,
-            cls, constructorName,
+            ConstructorResultKind.INVALID_TYPE,
+            type,
+            cls,
+            constructorName,
             MessageKind.CANNOT_INSTANTIATE_ENUM,
             {'enumName': cls.name},
             isError: true);
@@ -576,9 +547,7 @@
   /// Finishes resolution of a constructor reference and records the
   /// type of the constructed instance on [expression].
   ConstructorResult finishConstructorReference(
-      ConstructorResult result,
-      Node diagnosticNode,
-      Node expression) {
+      ConstructorResult result, Node diagnosticNode, Node expression) {
     assert(invariant(diagnosticNode, result != null,
         message: 'No result returned for $diagnosticNode.'));
 
@@ -591,8 +560,8 @@
     // class.
     if (result.type != null) {
       // The unnamed constructor may not exist, so [e] may become unresolved.
-      result = resolveConstructor(
-          result.prefix, result.type, diagnosticNode, '');
+      result =
+          resolveConstructor(result.prefix, result.type, diagnosticNode, '');
     } else {
       Element element = result.element;
       if (element.isMalformed) {
@@ -600,9 +569,12 @@
       } else {
         result = reportAndCreateErroneousConstructorElement(
             diagnosticNode,
-            ConstructorResultKind.INVALID_TYPE, null,
-            element, element.name,
-            MessageKind.NOT_A_TYPE, {'node': diagnosticNode});
+            ConstructorResultKind.INVALID_TYPE,
+            null,
+            element,
+            element.name,
+            MessageKind.NOT_A_TYPE,
+            {'node': diagnosticNode});
       }
     }
     resolver.registry.setType(expression, result.type);
@@ -612,10 +584,8 @@
   ConstructorResult visitTypeAnnotation(TypeAnnotation node) {
     // This is not really resolving a type-annotation, but the name of the
     // constructor. Therefore we allow deferred types.
-    DartType type = resolver.resolveTypeAnnotation(
-        node,
-        malformedIsError: inConstContext,
-        deferredIsMalformed: false);
+    DartType type = resolver.resolveTypeAnnotation(node,
+        malformedIsError: inConstContext, deferredIsMalformed: false);
     Send send = node.typeName.asSend();
     PrefixElement prefix;
     if (send != null) {
@@ -653,15 +623,18 @@
         // TODO(johnniwinther): Update the message for the different types.
         return reportAndCreateErroneousConstructorElement(
             name,
-            ConstructorResultKind.INVALID_TYPE, null,
-            resolver.enclosingElement, name.source,
-            MessageKind.NOT_A_TYPE, {'node': name});
+            ConstructorResultKind.INVALID_TYPE,
+            null,
+            resolver.enclosingElement,
+            name.source,
+            MessageKind.NOT_A_TYPE,
+            {'node': name});
       }
     } else if (receiver.element.isPrefix) {
       PrefixElement prefix = receiver.element;
       Element member = prefix.lookupLocalMember(name.source);
-      return constructorResultForElement(
-          node, name.source, member, prefix: prefix);
+      return constructorResultForElement(node, name.source, member,
+          prefix: prefix);
     } else {
       return reporter.internalError(
           node.receiver, 'unexpected receiver $receiver');
@@ -678,8 +651,8 @@
   /// Assumed to be called by [resolveRedirectingFactory].
   ConstructorResult visitRedirectingFactoryBody(RedirectingFactoryBody node) {
     Node constructorReference = node.constructorReference;
-    return finishConstructorReference(visit(constructorReference),
-        constructorReference, node);
+    return finishConstructorReference(
+        visit(constructorReference), constructorReference, node);
   }
 
   ConstructorResult constructorResultForElement(
@@ -689,16 +662,20 @@
     if (element == null) {
       return reportAndCreateErroneousConstructorElement(
           node,
-          ConstructorResultKind.INVALID_TYPE, null,
-          resolver.enclosingElement, name,
+          ConstructorResultKind.INVALID_TYPE,
+          null,
+          resolver.enclosingElement,
+          name,
           MessageKind.CANNOT_RESOLVE,
           {'name': name});
     } else if (element.isAmbiguous) {
       AmbiguousElement ambiguous = element;
       return reportAndCreateErroneousConstructorElement(
           node,
-          ConstructorResultKind.INVALID_TYPE, null,
-          resolver.enclosingElement, name,
+          ConstructorResultKind.INVALID_TYPE,
+          null,
+          resolver.enclosingElement,
+          name,
           ambiguous.messageKind,
           ambiguous.messageArguments,
           infos: ambiguous.computeInfos(resolver.enclosingElement, reporter));
@@ -720,30 +697,27 @@
     } else {
       return reportAndCreateErroneousConstructorElement(
           node,
-          ConstructorResultKind.INVALID_TYPE, null,
-          resolver.enclosingElement, name,
-          MessageKind.NOT_A_TYPE, {'node': name});
+          ConstructorResultKind.INVALID_TYPE,
+          null,
+          resolver.enclosingElement,
+          name,
+          MessageKind.NOT_A_TYPE,
+          {'node': name});
     }
   }
 
-  ConstructorResult constructorResultForErroneous(
-      Node node, Element error) {
+  ConstructorResult constructorResultForErroneous(Node node, Element error) {
     if (error is! ErroneousElementX) {
       // Parser error. The error has already been reported.
       error = new ErroneousConstructorElementX(
-          MessageKind.NOT_A_TYPE, {'node': node},
-          error.name, error);
+          MessageKind.NOT_A_TYPE, {'node': node}, error.name, error);
       registry.registerFeature(Feature.THROW_RUNTIME_ERROR);
     }
-    return new ConstructorResult.forError(
-        ConstructorResultKind.INVALID_TYPE,
-        error,
-        new MalformedType(error, null));
+    return new ConstructorResult.forError(ConstructorResultKind.INVALID_TYPE,
+        error, new MalformedType(error, null));
   }
 
-  ConstructorResult constructorResultForType(
-      Node node,
-      DartType type,
+  ConstructorResult constructorResultForType(Node node, DartType type,
       {PrefixElement prefix}) {
     String name = type.name;
     if (type.isMalformed) {
@@ -754,35 +728,44 @@
     } else if (type.isTypedef) {
       return reportAndCreateErroneousConstructorElement(
           node,
-          ConstructorResultKind.INVALID_TYPE, type,
-          resolver.enclosingElement, name,
-          MessageKind.CANNOT_INSTANTIATE_TYPEDEF, {'typedefName': name});
+          ConstructorResultKind.INVALID_TYPE,
+          type,
+          resolver.enclosingElement,
+          name,
+          MessageKind.CANNOT_INSTANTIATE_TYPEDEF,
+          {'typedefName': name});
     } else if (type.isTypeVariable) {
       return reportAndCreateErroneousConstructorElement(
           node,
-          ConstructorResultKind.INVALID_TYPE, type,
-          resolver.enclosingElement, name,
+          ConstructorResultKind.INVALID_TYPE,
+          type,
+          resolver.enclosingElement,
+          name,
           MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE,
           {'typeVariableName': name});
     }
     return reporter.internalError(node, "Unexpected constructor type $type");
   }
-
 }
 
 /// The kind of constructor found by the [ConstructorResolver].
 enum ConstructorResultKind {
   /// A generative or redirecting generative constructor.
   GENERATIVE,
+
   /// A factory or redirecting factory constructor.
   FACTORY,
+
   /// A generative or redirecting generative constructor on an abstract class.
   ABSTRACT,
+
   /// No constructor was found because the type was invalid, for instance
   /// unresolved, an enum class, a type variable, a typedef or a non-type.
   INVALID_TYPE,
+
   /// No constructor of the sought name was found on the class.
   UNRESOLVED_CONSTRUCTOR,
+
   /// A non-constant constructor was found for a const constructor invocation.
   NON_CONSTANT,
 }
@@ -808,10 +791,8 @@
 
   /// Creates a fully resolved constructor access where [element] is resolved
   /// to a constructor and [type] to an interface type.
-  ConstructorResult(this.kind,
-                    this.prefix,
-                    ConstructorElement this.element,
-                    InterfaceType this.type);
+  ConstructorResult(this.kind, this.prefix, ConstructorElement this.element,
+      InterfaceType this.type);
 
   /// Creates a fully resolved constructor access where [element] is an
   /// [ErroneousElement].
@@ -862,9 +843,7 @@
 /// Lookup the [constructorName] constructor in [cls] and normalize the result
 /// with respect to privacy and patching.
 ConstructorElement findConstructor(
-    LibraryElement currentLibrary,
-    ClassElement cls,
-    String constructorName) {
+    LibraryElement currentLibrary, ClassElement cls, String constructorName) {
   if (Name.isPrivateName(constructorName) &&
       currentLibrary.library != cls.library) {
     // TODO(johnniwinther): Report a special error on unaccessible private
diff --git a/pkg/compiler/lib/src/resolution/enum_creator.dart b/pkg/compiler/lib/src/resolution/enum_creator.dart
index 953225b..93fb9ec 100644
--- a/pkg/compiler/lib/src/resolution/enum_creator.dart
+++ b/pkg/compiler/lib/src/resolution/enum_creator.dart
@@ -5,13 +5,11 @@
 library dart2js.resolution.enum_creator;
 
 import '../common.dart';
-import '../core_types.dart' show
-    CoreTypes;
+import '../core_types.dart' show CoreTypes;
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../elements/modelx.dart';
-import '../tokens/keyword.dart' show
-    Keyword;
+import '../tokens/keyword.dart' show Keyword;
 import '../tokens/precedence.dart';
 import '../tokens/precedence_constants.dart' as Precedence;
 import '../tokens/token.dart';
@@ -24,9 +22,8 @@
 
   AstBuilder(this.charOffset);
 
-  Modifiers modifiers({bool isConst: false,
-                       bool isFinal: false,
-                       bool isStatic: false}) {
+  Modifiers modifiers(
+      {bool isConst: false, bool isFinal: false, bool isStatic: false}) {
     List identifiers = [];
     int flags = 0;
     if (isConst) {
@@ -42,8 +39,7 @@
       flags |= Modifiers.FLAG_STATIC;
     }
     return new Modifiers.withFlags(
-        new NodeList(null, linkedList(identifiers), null, ''),
-        flags);
+        new NodeList(null, linkedList(identifiers), null, ''), flags);
   }
 
   Token keywordToken(String text) {
@@ -78,23 +74,17 @@
 
   NodeList argumentList(List<Node> nodes) {
     return new NodeList(symbolToken(Precedence.OPEN_PAREN_INFO),
-                        linkedList(nodes),
-                        symbolToken(Precedence.CLOSE_PAREN_INFO),
-                        ',');
+        linkedList(nodes), symbolToken(Precedence.CLOSE_PAREN_INFO), ',');
   }
 
   Return returnStatement(Expression expression) {
-    return new Return(
-        keywordToken('return'),
-        symbolToken(Precedence.SEMICOLON_INFO),
-        expression);
+    return new Return(keywordToken('return'),
+        symbolToken(Precedence.SEMICOLON_INFO), expression);
   }
 
-  FunctionExpression functionExpression(Modifiers modifiers,
-                                        String name,
-                                        NodeList argumentList,
-                                        Statement body,
-                                        [TypeAnnotation returnType]) {
+  FunctionExpression functionExpression(
+      Modifiers modifiers, String name, NodeList argumentList, Statement body,
+      [TypeAnnotation returnType]) {
     return new FunctionExpression(
         identifier(name),
         argumentList,
@@ -103,7 +93,7 @@
         modifiers,
         null, // Initializer.
         null, // get/set.
-        null  // Async modifier.
+        null // Async modifier.
         );
   }
 
@@ -116,27 +106,29 @@
   }
 
   LiteralString literalString(String text,
-                              {String prefix: '"',
-                                String suffix: '"'}) {
-    return new LiteralString(stringToken('$prefix$text$suffix'),
-                             new DartString.literal(text));
+      {String prefix: '"', String suffix: '"'}) {
+    return new LiteralString(
+        stringToken('$prefix$text$suffix'), new DartString.literal(text));
   }
 
   LiteralList listLiteral(List<Node> elements, {bool isConst: false}) {
     return new LiteralList(
         null,
-        new NodeList(symbolToken(Precedence.OPEN_SQUARE_BRACKET_INFO),
-                     linkedList(elements),
-                     symbolToken(Precedence.CLOSE_SQUARE_BRACKET_INFO),
-                     ','),
+        new NodeList(
+            symbolToken(Precedence.OPEN_SQUARE_BRACKET_INFO),
+            linkedList(elements),
+            symbolToken(Precedence.CLOSE_SQUARE_BRACKET_INFO),
+            ','),
         isConst ? keywordToken('const') : null);
   }
 
   Node createDefinition(Identifier name, Expression initializer) {
     if (initializer == null) return name;
-    return new SendSet(null, name,
+    return new SendSet(
+        null,
+        name,
         new Operator(symbolToken(Precedence.EQ_INFO)),
-            new NodeList.singleton(initializer));
+        new NodeList.singleton(initializer));
   }
 
   VariableDefinitions initializingFormal(String fieldName) {
@@ -148,9 +140,8 @@
             new Send(identifier('this'), identifier(fieldName))));
   }
 
-  NewExpression newExpression(String typeName,
-                              NodeList arguments,
-                              {bool isConst: false}) {
+  NewExpression newExpression(String typeName, NodeList arguments,
+      {bool isConst: false}) {
     return new NewExpression(keywordToken(isConst ? 'const' : 'new'),
         new Send(null, identifier(typeName), arguments));
   }
@@ -160,9 +151,8 @@
   }
 
   Send indexGet(Expression receiver, Expression index) {
-    return new Send(receiver,
-                    new Operator(symbolToken(Precedence.INDEX_INFO)),
-                    new NodeList.singleton(index));
+    return new Send(receiver, new Operator(symbolToken(Precedence.INDEX_INFO)),
+        new NodeList.singleton(index));
   }
 
   LiteralMapEntry mapLiteralEntry(Expression key, Expression value) {
@@ -172,10 +162,11 @@
   LiteralMap mapLiteral(List<LiteralMapEntry> entries, {bool isConst: false}) {
     return new LiteralMap(
         null, // Type arguments.
-        new NodeList(symbolToken(Precedence.OPEN_CURLY_BRACKET_INFO),
-                     linkedList(entries),
-                     symbolToken(Precedence.CLOSE_CURLY_BRACKET_INFO),
-                     ','),
+        new NodeList(
+            symbolToken(Precedence.OPEN_CURLY_BRACKET_INFO),
+            linkedList(entries),
+            symbolToken(Precedence.CLOSE_CURLY_BRACKET_INFO),
+            ','),
         isConst ? keywordToken('const') : null);
   }
 }
@@ -219,34 +210,27 @@
         builder.emptyStatement());
 
     EnumConstructorElementX constructor = new EnumConstructorElementX(
-        enumClass,
-        builder.modifiers(isConst: true),
-        constructorNode);
+        enumClass, builder.modifiers(isConst: true), constructorNode);
 
-    EnumFormalElementX indexFormal = new EnumFormalElementX(
-        constructor,
-        indexDefinition,
-        builder.identifier('index'),
-        indexVariable);
+    EnumFormalElementX indexFormal = new EnumFormalElementX(constructor,
+        indexDefinition, builder.identifier('index'), indexVariable);
 
     FunctionSignatureX constructorSignature = new FunctionSignatureX(
         requiredParameters: [indexFormal],
         requiredParameterCount: 1,
-        type: new FunctionType(constructor, const VoidType(),
-            <DartType>[intType]));
+        type: new FunctionType(
+            constructor, const VoidType(), <DartType>[intType]));
     constructor.functionSignature = constructorSignature;
     enumClass.addMember(constructor, reporter);
 
-    List<FieldElement> enumValues = <FieldElement>[];
+    List<EnumConstantElement> enumValues = <EnumConstantElement>[];
     VariableList variableList =
         new VariableList(builder.modifiers(isStatic: true, isConst: true));
     variableList.type = enumType;
     int index = 0;
     List<Node> valueReferences = <Node>[];
     List<LiteralMapEntry> mapEntries = <LiteralMapEntry>[];
-    for (Link<Node> link = node.names.nodes;
-         !link.isEmpty;
-         link = link.tail) {
+    for (Link<Node> link = node.names.nodes; !link.isEmpty; link = link.tail) {
       Identifier name = link.head;
       AstBuilder valueBuilder = new AstBuilder(name.token.charOffset);
 
@@ -255,17 +239,16 @@
 
       // Add map entry for `toString` implementation.
       mapEntries.add(valueBuilder.mapLiteralEntry(
-            valueBuilder.literalInt(index),
-            valueBuilder.literalString('${enumClass.name}.${name.source}')));
+          valueBuilder.literalInt(index),
+          valueBuilder.literalString('${enumClass.name}.${name.source}')));
 
-      Expression initializer = valueBuilder.newExpression(
-          enumClass.name,
+      Expression initializer = valueBuilder.newExpression(enumClass.name,
           valueBuilder.argumentList([valueBuilder.literalInt(index)]),
           isConst: true);
       SendSet definition = valueBuilder.createDefinition(name, initializer);
 
-      EnumFieldElementX field = new EnumFieldElementX(
-          name, enumClass, variableList, definition, initializer);
+      EnumConstantElementX field = new EnumConstantElementX(
+          name, enumClass, variableList, definition, initializer, index);
       enumValues.add(field);
       enumClass.addMember(field, reporter);
       index++;
@@ -277,14 +260,13 @@
 
     Identifier valuesIdentifier = builder.identifier('values');
     // TODO(johnniwinther): Add type argument.
-    Expression initializer = builder.listLiteral(
-        valueReferences, isConst: true);
+    Expression initializer =
+        builder.listLiteral(valueReferences, isConst: true);
 
     Node definition = builder.createDefinition(valuesIdentifier, initializer);
 
-    EnumFieldElementX valuesVariable = new EnumFieldElementX(
-        valuesIdentifier, enumClass, valuesVariableList,
-        definition, initializer);
+    EnumFieldElementX valuesVariable = new EnumFieldElementX(valuesIdentifier,
+        enumClass, valuesVariableList, definition, initializer);
 
     enumClass.addMember(valuesVariable, reporter);
 
@@ -294,20 +276,17 @@
         Modifiers.EMPTY,
         'toString',
         builder.argumentList([]),
-        builder.returnStatement(
-              builder.indexGet(
-                  builder.mapLiteral(mapEntries, isConst: true),
-                  builder.reference(builder.identifier('index')))
-            )
-        );
+        builder.returnStatement(builder.indexGet(
+            builder.mapLiteral(mapEntries, isConst: true),
+            builder.reference(builder.identifier('index')))));
 
-    EnumMethodElementX toString = new EnumMethodElementX('toString',
-        enumClass, Modifiers.EMPTY, toStringNode);
-    FunctionSignatureX toStringSignature = new FunctionSignatureX(
-        type: new FunctionType(toString, stringType));
+    EnumMethodElementX toString = new EnumMethodElementX(
+        'toString', enumClass, Modifiers.EMPTY, toStringNode);
+    FunctionSignatureX toStringSignature =
+        new FunctionSignatureX(type: new FunctionType(toString, stringType));
     toString.functionSignature = toStringSignature;
     enumClass.addMember(toString, reporter);
 
     enumClass.enumValues = enumValues;
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/resolution/label_scope.dart b/pkg/compiler/lib/src/resolution/label_scope.dart
index 21aed76..5742481 100644
--- a/pkg/compiler/lib/src/resolution/label_scope.dart
+++ b/pkg/compiler/lib/src/resolution/label_scope.dart
@@ -4,11 +4,8 @@
 
 library dart2js.resolution.label_scope;
 
-import '../elements/elements.dart' show
-    JumpTarget,
-    LabelDefinition;
-import '../util/util.dart' show
-    Link;
+import '../elements/elements.dart' show JumpTarget, LabelDefinition;
+import '../util/util.dart' show Link;
 
 abstract class LabelScope {
   LabelScope get outer;
@@ -65,10 +62,10 @@
   }
 
   JumpTarget currentBreakTarget() =>
-    breakTargetStack.isEmpty ? null : breakTargetStack.head;
+      breakTargetStack.isEmpty ? null : breakTargetStack.head;
 
   JumpTarget currentContinueTarget() =>
-    continueTargetStack.isEmpty ? null : continueTargetStack.head;
+      continueTargetStack.isEmpty ? null : continueTargetStack.head;
 
   void enterLabelScope(Map<String, LabelDefinition> elements) {
     labels = new LabeledStatementLabelScope(labels, elements);
@@ -92,8 +89,8 @@
     continueTargetStack = continueTargetStack.tail;
   }
 
-  void enterSwitch(JumpTarget breakElement,
-                   Map<String, LabelDefinition> continueElements) {
+  void enterSwitch(
+      JumpTarget breakElement, Map<String, LabelDefinition> continueElements) {
     breakTargetStack = breakTargetStack.prepend(breakElement);
     labels = new SwitchLabelScope(labels, continueElements);
     nestingLevel++;
diff --git a/pkg/compiler/lib/src/resolution/member_impl.dart b/pkg/compiler/lib/src/resolution/member_impl.dart
index 9a2d7b0..7597d36 100644
--- a/pkg/compiler/lib/src/resolution/member_impl.dart
+++ b/pkg/compiler/lib/src/resolution/member_impl.dart
@@ -11,9 +11,8 @@
   final DartType type;
   final FunctionType functionType;
 
-  DeclaredMember(this.name, this.element,
-                 this.declarer,
-                 this.type, this.functionType);
+  DeclaredMember(
+      this.name, this.element, this.declarer, this.type, this.functionType);
 
   bool get isStatic => !element.isInstanceMember;
 
@@ -55,8 +54,7 @@
 
   bool operator ==(other) {
     if (other is! Member) return false;
-    return element == other.element &&
-           isSetter == other.isSetter;
+    return element == other.element && isSetter == other.isSetter;
   }
 
   String toString() {
@@ -91,10 +89,8 @@
 class DeclaredAbstractMember extends DeclaredMember {
   final DeclaredMember implementation;
 
-  DeclaredAbstractMember(Name name, Element element,
-                         InterfaceType declarer,
-                         DartType type, FunctionType functionType,
-                         this.implementation)
+  DeclaredAbstractMember(Name name, Element element, InterfaceType declarer,
+      DartType type, FunctionType functionType, this.implementation)
       : super(name, element, declarer, type, functionType);
 
   bool get isAbstract => true;
@@ -109,8 +105,8 @@
   final DeclaredMember declaration;
   final InterfaceType instance;
 
-  InheritedMember(DeclaredMember this.declaration,
-                  InterfaceType this.instance) {
+  InheritedMember(
+      DeclaredMember this.declaration, InterfaceType this.instance) {
     assert(instance.isGeneric);
     assert(!declaration.isStatic);
   }
@@ -153,8 +149,8 @@
   }
 
   InheritedMember _newInheritedMember(InterfaceType newInstance) {
-    return new InheritedMember(declaration,
-                               instance.substByContext(newInstance));
+    return new InheritedMember(
+        declaration, instance.substByContext(newInstance));
   }
 
   Iterable<Member> get declarations => <Member>[this];
@@ -163,8 +159,7 @@
 
   bool operator ==(other) {
     if (other is! InheritedMember) return false;
-    return declaration == other.declaration &&
-           instance == other.instance;
+    return declaration == other.declaration && instance == other.instance;
   }
 
   void printOn(StringBuffer sb, DartType type) {
@@ -182,9 +177,8 @@
 class InheritedAbstractMember extends InheritedMember {
   final DeclaredMember implementation;
 
-  InheritedAbstractMember(DeclaredMember declaration,
-                          InterfaceType instance,
-                          this.implementation)
+  InheritedAbstractMember(
+      DeclaredMember declaration, InterfaceType instance, this.implementation)
       : super(declaration, instance);
 
   bool get isAbstract => true;
@@ -194,11 +188,11 @@
         declaration,
         instance.substByContext(newInstance),
         implementation != null
-            ? implementation.inheritFrom(newInstance) : null);
+            ? implementation.inheritFrom(newInstance)
+            : null);
   }
 }
 
-
 abstract class AbstractSyntheticMember implements MemberSignature {
   final Setlet<Member> inheritedMembers;
 
@@ -211,14 +205,11 @@
   Name get name => member.name;
 }
 
-
 class SyntheticMember extends AbstractSyntheticMember {
   final DartType type;
   final FunctionType functionType;
 
-  SyntheticMember(Setlet<Member> inheritedMembers,
-                  this.type,
-                  this.functionType)
+  SyntheticMember(Setlet<Member> inheritedMembers, this.type, this.functionType)
       : super(inheritedMembers);
 
   bool get isSetter => member.isSetter;
@@ -230,7 +221,7 @@
   bool get isMalformed => false;
 
   String toString() => '${type.getStringAsDeclared('$name')} synthesized '
-                       'from ${inheritedMembers}';
+      'from ${inheritedMembers}';
 }
 
 class ErroneousMember extends AbstractSyntheticMember {
@@ -251,6 +242,5 @@
   bool get isMalformed => true;
 
   String toString() => "erroneous member '$name' synthesized "
-                       "from ${inheritedMembers}";
+      "from ${inheritedMembers}";
 }
-
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index b72dba8..bcd4495 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -5,71 +5,51 @@
 library dart2js.resolution.members;
 
 import '../common.dart';
-import '../common/names.dart' show
-    Selectors;
-import '../common/resolution.dart' show
-    Feature;
-import '../compiler.dart' show
-    Compiler;
-import '../constants/constructors.dart' show
-    RedirectingFactoryConstantConstructor;
+import '../common/names.dart' show Selectors;
+import '../common/resolution.dart' show Feature;
+import '../compiler.dart' show Compiler;
+import '../constants/constructors.dart'
+    show RedirectingFactoryConstantConstructor;
 import '../constants/expressions.dart';
 import '../constants/values.dart';
 import '../core_types.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    ConstructorElementX,
-    ErroneousElementX,
-    FunctionElementX,
-    JumpTargetX,
-    LocalFunctionElementX,
-    LocalParameterElementX,
-    LocalVariableElementX,
-    MethodElementX,
-    ParameterElementX,
-    VariableElementX,
-    VariableList;
-import '../tokens/token.dart' show
-    isUserDefinableOperator;
+import '../elements/modelx.dart'
+    show
+        ConstructorElementX,
+        ErroneousElementX,
+        FunctionElementX,
+        JumpTargetX,
+        LocalFunctionElementX,
+        LocalParameterElementX,
+        LocalVariableElementX,
+        MethodElementX,
+        ParameterElementX,
+        VariableElementX,
+        VariableList;
+import '../tokens/token.dart' show isUserDefinableOperator;
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Link;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    TypeUse;
+import '../util/util.dart' show Link;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../universe/use.dart' show DynamicUse, StaticUse, TypeUse;
 
 import 'access_semantics.dart';
 import 'class_members.dart' show MembersCreator;
 import 'operators.dart';
 import 'send_structure.dart';
 
-import 'constructors.dart' show
-    ConstructorResolver,
-    ConstructorResult,
-    ConstructorResultKind;
-import 'label_scope.dart' show
-    StatementScope;
-import 'registry.dart' show
-    ResolutionRegistry;
-import 'resolution.dart' show
-    ResolverTask;
-import 'resolution_common.dart' show
-    MappingVisitor;
+import 'constructors.dart'
+    show ConstructorResolver, ConstructorResult, ConstructorResultKind;
+import 'label_scope.dart' show StatementScope;
+import 'registry.dart' show ResolutionRegistry;
+import 'resolution.dart' show ResolverTask;
+import 'resolution_common.dart' show MappingVisitor;
 import 'resolution_result.dart';
-import 'scope.dart' show
-    BlockScope,
-    MethodScope,
-    Scope;
-import 'signatures.dart' show
-    SignatureResolver;
-import 'variables.dart' show
-    VariableDefinitionsVisitor;
+import 'scope.dart' show BlockScope, MethodScope, Scope;
+import 'signatures.dart' show SignatureResolver;
+import 'variables.dart' show VariableDefinitionsVisitor;
 
 /// The state of constants in resolutions.
 enum ConstantState {
@@ -120,8 +100,9 @@
   bool sendIsMemberAccess = false;
 
   StatementScope statementScope;
-  int allowedCategory = ElementCategory.VARIABLE | ElementCategory.FUNCTION
-      | ElementCategory.IMPLIES_TYPE;
+  int allowedCategory = ElementCategory.VARIABLE |
+      ElementCategory.FUNCTION |
+      ElementCategory.IMPLIES_TYPE;
 
   /// When visiting the type declaration of the variable in a [ForIn] loop,
   /// the initializer of the variable is implicit and we should not emit an
@@ -135,59 +116,60 @@
   bool isPotentiallyMutableTarget(Element target) {
     if (target == null) return false;
     return (target.isVariable || target.isParameter) &&
-      !(target.isFinal || target.isConst);
+        !(target.isFinal || target.isConst);
   }
 
   // TODO(ahe): Find a way to share this with runtime implementation.
   static final RegExp symbolValidationPattern =
       new RegExp(r'^(?:[a-zA-Z$][a-zA-Z$0-9_]*\.)*(?:[a-zA-Z$][a-zA-Z$0-9_]*=?|'
-                 r'-|'
-                 r'unary-|'
-                 r'\[\]=|'
-                 r'~|'
-                 r'==|'
-                 r'\[\]|'
-                 r'\*|'
-                 r'/|'
-                 r'%|'
-                 r'~/|'
-                 r'\+|'
-                 r'<<|'
-                 r'>>|'
-                 r'>=|'
-                 r'>|'
-                 r'<=|'
-                 r'<|'
-                 r'&|'
-                 r'\^|'
-                 r'\|'
-                 r')$');
+          r'-|'
+          r'unary-|'
+          r'\[\]=|'
+          r'~|'
+          r'==|'
+          r'\[\]|'
+          r'\*|'
+          r'/|'
+          r'%|'
+          r'~/|'
+          r'\+|'
+          r'<<|'
+          r'>>|'
+          r'>=|'
+          r'>|'
+          r'<=|'
+          r'<|'
+          r'&|'
+          r'\^|'
+          r'\|'
+          r')$');
 
-  ResolverVisitor(Compiler compiler,
-                  Element element,
-                  ResolutionRegistry registry,
-                  {bool useEnclosingScope: false})
-    : this.enclosingElement = element,
-      // When the element is a field, we are actually resolving its
-      // initial value, which should not have access to instance
-      // fields.
-      inInstanceContext = (element.isInstanceMember && !element.isField)
-          || element.isGenerativeConstructor,
-      this.currentClass = element.isClassMember ? element.enclosingClass
-                                             : null,
-      this.statementScope = new StatementScope(),
-      scope = useEnclosingScope
-          ? Scope.buildEnclosingScope(element) : element.buildScope(),
-      // The type annotations on a typedef do not imply type checks.
-      // TODO(karlklose): clean this up (dartbug.com/8870).
-      inCheckContext = compiler.options.enableTypeAssertions &&
-          !element.isLibrary &&
-          !element.isTypedef &&
-          !element.enclosingElement.isTypedef,
-      inCatchBlock = false,
-      constantState = element.isConst
-          ? ConstantState.CONSTANT : ConstantState.NON_CONSTANT,
-      super(compiler, registry);
+  ResolverVisitor(
+      Compiler compiler, Element element, ResolutionRegistry registry,
+      {bool useEnclosingScope: false})
+      : this.enclosingElement = element,
+        // When the element is a field, we are actually resolving its
+        // initial value, which should not have access to instance
+        // fields.
+        inInstanceContext = (element.isInstanceMember && !element.isField) ||
+            element.isGenerativeConstructor,
+        this.currentClass =
+            element.isClassMember ? element.enclosingClass : null,
+        this.statementScope = new StatementScope(),
+        scope = useEnclosingScope
+            ? Scope.buildEnclosingScope(element)
+            : element.buildScope(),
+        // The type annotations on a typedef do not imply type checks.
+        // TODO(karlklose): clean this up (dartbug.com/8870).
+        inCheckContext = compiler.options.enableTypeAssertions &&
+            !element.isLibrary &&
+            !element.isTypedef &&
+            !element.enclosingElement.isTypedef,
+        inCatchBlock = false,
+        constantState = element.isConst
+            ? ConstantState.CONSTANT
+            : ConstantState.NON_CONSTANT,
+        super(compiler, registry);
 
   CoreClasses get coreClasses => compiler.coreClasses;
 
@@ -207,17 +189,13 @@
         reporter.reportErrorMessage(
             node, MessageKind.NO_INSTANCE_AVAILABLE, {'name': name});
         return new ErroneousElementX(MessageKind.NO_INSTANCE_AVAILABLE,
-                                     {'name': name},
-                                     name, enclosingElement);
+            {'name': name}, name, enclosingElement);
       } else if (result.isAmbiguous) {
         AmbiguousElement ambiguous = result;
         return reportAndCreateErroneousElement(
-              node,
-              name,
-              ambiguous.messageKind,
-              ambiguous.messageArguments,
-              infos: ambiguous.computeInfos(enclosingElement, reporter),
-              isError: true);
+            node, name, ambiguous.messageKind, ambiguous.messageArguments,
+            infos: ambiguous.computeInfos(enclosingElement, reporter),
+            isError: true);
       }
     }
     return result;
@@ -227,9 +205,8 @@
   JumpTarget getOrDefineTarget(Node statement) {
     JumpTarget element = registry.getTargetDefinition(statement);
     if (element == null) {
-      element = new JumpTargetX(statement,
-                                   statementScope.nestingLevel,
-                                   enclosingElement);
+      element = new JumpTargetX(
+          statement, statementScope.nestingLevel, enclosingElement);
       registry.defineTarget(statement, element);
     }
     return element;
@@ -242,8 +219,7 @@
     return result;
   }
 
-  inStaticContext(action(),
-                  {bool inConstantInitializer: false}) {
+  inStaticContext(action(), {bool inConstantInitializer: false}) {
     bool wasInstanceContext = inInstanceContext;
     ConstantState oldConstantState = constantState;
     constantState = inConstantInitializer
@@ -257,9 +233,8 @@
   }
 
   ResolutionResult visitInStaticContext(Node node,
-                                        {bool inConstantInitializer: false}) {
-    return inStaticContext(
-        () => visit(node),
+      {bool inConstantInitializer: false}) {
+    return inStaticContext(() => visit(node),
         inConstantInitializer: inConstantInitializer);
   }
 
@@ -286,12 +261,9 @@
   }
 
   ErroneousElement reportAndCreateErroneousElement(
-      Node node,
-      String name,
-      MessageKind kind,
-      Map arguments,
+      Node node, String name, MessageKind kind, Map arguments,
       {List<DiagnosticMessage> infos: const <DiagnosticMessage>[],
-       bool isError: false}) {
+      bool isError: false}) {
     if (isError) {
       reporter.reportError(
           reporter.createMessage(node, kind, arguments), infos);
@@ -311,7 +283,7 @@
   ErroneousElement reportCannotResolve(Node node, String name) {
     assert(invariant(node, !inInstanceContext,
         message: "ResolverVisitor.reportCannotResolve must not be called in "
-                 "instance context."));
+            "instance context."));
 
     // We report an error within initializers because `this` is implicitly
     // accessed when unqualified identifiers are not resolved.  For
@@ -320,8 +292,7 @@
     //   ...
     //   If `i` does not occur inside a top level or static function, `i`
     //   is equivalent to `this.id(a1 , ...)`.
-    bool inInitializer =
-        enclosingElement.isGenerativeConstructor ||
+    bool inInitializer = enclosingElement.isGenerativeConstructor ||
         (enclosingElement.isInstanceMember && enclosingElement.isField);
     MessageKind kind;
     Map arguments = {'name': name};
@@ -339,8 +310,8 @@
       kind = MessageKind.CANNOT_RESOLVE;
     }
     registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-    return reportAndCreateErroneousElement(
-        node, name, kind, arguments, isError: inInitializer);
+    return reportAndCreateErroneousElement(node, name, kind, arguments,
+        isError: inInitializer);
   }
 
   ResolutionResult visitIdentifier(Identifier node) {
@@ -352,12 +323,10 @@
       return const NoneResult();
     } else if (node.isSuper()) {
       if (!inInstanceContext) {
-        reporter.reportErrorMessage(
-            node, MessageKind.NO_SUPER_IN_STATIC);
+        reporter.reportErrorMessage(node, MessageKind.NO_SUPER_IN_STATIC);
       }
       if ((ElementCategory.SUPER & allowedCategory) == 0) {
-        reporter.reportErrorMessage(
-            node, MessageKind.INVALID_USE_OF_SUPER);
+        reporter.reportErrorMessage(node, MessageKind.INVALID_USE_OF_SUPER);
       }
       return const NoneResult();
     } else {
@@ -379,10 +348,10 @@
         // Use the malformed element.
       } else {
         if ((element.kind.category & allowedCategory) == 0) {
-          element = reportAndCreateErroneousElement(
-              node, name, MessageKind.GENERIC,
-              // TODO(ahe): Improve error message. Need UX input.
-              {'text': "is not an expression $element"});
+          element =
+              reportAndCreateErroneousElement(node, name, MessageKind.GENERIC,
+                  // TODO(ahe): Improve error message. Need UX input.
+                  {'text': "is not an expression $element"});
         }
       }
       if (!Elements.isUnresolved(element) && element.isClass) {
@@ -430,8 +399,7 @@
     Link<Node> initializers = node.initializers.nodes;
     if (!initializers.isEmpty &&
         Initializers.isConstructorRedirect(initializers.head)) {
-      Name name =
-          getRedirectingThisOrSuperConstructorName(initializers.head);
+      Name name = getRedirectingThisOrSuperConstructorName(initializers.head);
       final ClassElement classElement = constructor.enclosingClass;
       return classElement.lookupConstructor(name.text);
     }
@@ -440,16 +408,15 @@
 
   void setupFunction(FunctionExpression node, FunctionElement function) {
     Element enclosingElement = function.enclosingElement;
-    if (node.modifiers.isStatic &&
-        enclosingElement.kind != ElementKind.CLASS) {
+    if (node.modifiers.isStatic && enclosingElement.kind != ElementKind.CLASS) {
       reporter.reportErrorMessage(node, MessageKind.ILLEGAL_STATIC);
     }
 
     scope = new MethodScope(scope, function);
     // Put the parameters in scope.
     FunctionSignature functionParameters = function.functionSignature;
-    Link<Node> parameterNodes = (node.parameters == null)
-        ? const Link<Node>() : node.parameters.nodes;
+    Link<Node> parameterNodes =
+        (node.parameters == null) ? const Link<Node>() : node.parameters.nodes;
     functionParameters.forEachParameter((ParameterElementX element) {
       // TODO(karlklose): should be a list of [FormalElement]s, but the actual
       // implementation uses [Element].
@@ -482,8 +449,8 @@
       parameterNodes = parameterNodes.tail;
     });
     addDeferredAction(enclosingElement, () {
-      functionParameters.forEachOptionalParameter(
-          (ParameterElementX parameter) {
+      functionParameters
+          .forEachOptionalParameter((ParameterElementX parameter) {
         parameter.constant =
             compiler.resolver.constantCompiler.compileConstant(parameter);
       });
@@ -581,7 +548,6 @@
     return const NoneResult();
   }
 
-
   /// Process a local function declaration or an anonymous function expression.
   ///
   /// [inFunctionDeclaration] is `true` when the current node is the immediate
@@ -589,15 +555,12 @@
   ///
   /// This is used to distinguish local function declarations from anonymous
   /// function expressions.
-  ResolutionResult visitFunctionExpression(
-      FunctionExpression node,
+  ResolutionResult visitFunctionExpression(FunctionExpression node,
       {bool inFunctionDeclaration: false}) {
     bool doAddToScope = inFunctionDeclaration;
     if (!inFunctionDeclaration && node.name != null) {
-      reporter.reportErrorMessage(
-          node.name,
-          MessageKind.NAMED_FUNCTION_EXPRESSION,
-          {'name': node.name});
+      reporter.reportErrorMessage(node.name,
+          MessageKind.NAMED_FUNCTION_EXPRESSION, {'name': node.name});
     }
     visit(node.returnType);
     String name;
@@ -607,15 +570,10 @@
       name = node.name.asIdentifier().source;
     }
     LocalFunctionElementX function = new LocalFunctionElementX(
-        name, node, ElementKind.FUNCTION, Modifiers.EMPTY,
-        enclosingElement);
+        name, node, ElementKind.FUNCTION, Modifiers.EMPTY, enclosingElement);
     ResolverTask.processAsyncMarker(compiler, function, registry);
     function.functionSignature = SignatureResolver.analyze(
-        compiler,
-        node.parameters,
-        node.returnType,
-        function,
-        registry,
+        compiler, node.parameters, node.returnType, function, registry,
         createRealParameters: true,
         isFunctionExpression: !inFunctionDeclaration);
     checkLocalDefinitionName(node, function);
@@ -643,15 +601,14 @@
 
   ResolutionResult visitIf(If node) {
     doInPromotionScope(node.condition.expression, () => visit(node.condition));
-    doInPromotionScope(node.thenPart,
-        () => visitIn(node.thenPart, new BlockScope(scope)));
+    doInPromotionScope(
+        node.thenPart, () => visitIn(node.thenPart, new BlockScope(scope)));
     visitIn(node.elsePart, new BlockScope(scope));
     return const NoneResult();
   }
 
-  static Selector computeSendSelector(Send node,
-                                      LibraryElement library,
-                                      Element element) {
+  static Selector computeSendSelector(
+      Send node, LibraryElement library, Element element) {
     // First determine if this is part of an assignment.
     bool isSet = node.asSendSet() != null;
 
@@ -663,9 +620,12 @@
       String source = node.selector.asOperator().source;
       String string = source;
       if (identical(string, '!') ||
-          identical(string, '&&') || identical(string, '||') ||
-          identical(string, 'is') || identical(string, 'as') ||
-          identical(string, '?') || identical(string, '??')) {
+          identical(string, '&&') ||
+          identical(string, '||') ||
+          identical(string, 'is') ||
+          identical(string, 'as') ||
+          identical(string, '?') ||
+          identical(string, '??')) {
         return null;
       }
       String op = source;
@@ -674,8 +634,7 @@
       }
       if (op == null) {
         // Unsupported operator. An error has been reported during parsing.
-        return new Selector.call(
-            new Name(source, library),
+        return new Selector.call(new Name(source, library),
             new CallStructure.unnamed(node.argumentsNode.slowLength()));
       }
       return node.arguments.isEmpty
@@ -686,8 +645,7 @@
     Identifier identifier = node.selector.asIdentifier();
     if (node.isPropertyAccess) {
       assert(!isSet);
-      return new Selector.getter(
-          new Name(identifier.source, library));
+      return new Selector.getter(new Name(identifier.source, library));
     } else if (isSet) {
       return new Selector.setter(
           new Name(identifier.source, library, isSetter: true));
@@ -716,7 +674,7 @@
     return (identifier == null)
         ? new Selector.callClosure(arity, named)
         : new Selector.call(new Name(identifier.source, library),
-                            new CallStructure(arity, named));
+            new CallStructure(arity, named));
   }
 
   Selector resolveSelector(Send node, Element element) {
@@ -749,9 +707,7 @@
         namedArguments.add(source);
         if (seenNamedArguments.containsKey(source)) {
           reportDuplicateDefinition(
-              source,
-              argument,
-              seenNamedArguments[source]);
+              source, argument, seenNamedArguments[source]);
           isValidAsConstant = false;
         } else {
           seenNamedArguments[source] = namedArgument;
@@ -765,8 +721,7 @@
     }
     sendIsMemberAccess = oldSendIsMemberAccess;
     return new ArgumentsResult(
-        new CallStructure(argumentCount, namedArguments),
-        argumentResults,
+        new CallStructure(argumentCount, namedArguments), argumentResults,
         isValidAsConstant: isValidAsConstant);
   }
 
@@ -775,8 +730,7 @@
   AccessSemantics checkSuperAccess(Send node) {
     if (!inInstanceContext) {
       ErroneousElement error = reportAndCreateErroneousElement(
-          node, 'super',
-          MessageKind.NO_SUPER_IN_STATIC, {},
+          node, 'super', MessageKind.NO_SUPER_IN_STATIC, {},
           isError: true);
       registry.registerFeature(Feature.COMPILE_TIME_ERROR);
       return new StaticAccess.invalid(error);
@@ -784,8 +738,7 @@
     if (node.isConditional) {
       // `super?.foo` is not allowed.
       ErroneousElement error = reportAndCreateErroneousElement(
-          node, 'super',
-          MessageKind.INVALID_USE_OF_SUPER, {},
+          node, 'super', MessageKind.INVALID_USE_OF_SUPER, {},
           isError: true);
       registry.registerFeature(Feature.COMPILE_TIME_ERROR);
       return new StaticAccess.invalid(error);
@@ -793,10 +746,8 @@
     if (currentClass.supertype == null) {
       // This is just to guard against internal errors, so no need
       // for a real error message.
-      ErroneousElement error = reportAndCreateErroneousElement(
-          node, 'super',
-          MessageKind.GENERIC,
-          {'text': "Object has no superclass"},
+      ErroneousElement error = reportAndCreateErroneousElement(node, 'super',
+          MessageKind.GENERIC, {'text': "Object has no superclass"},
           isError: true);
       registry.registerFeature(Feature.COMPILE_TIME_ERROR);
       return new StaticAccess.invalid(error);
@@ -810,8 +761,7 @@
   AccessSemantics checkThisAccess(Send node) {
     if (!inInstanceContext) {
       ErroneousElement error = reportAndCreateErroneousElement(
-          node, 'this',
-          MessageKind.NO_THIS_AVAILABLE, const {},
+          node, 'this', MessageKind.NO_THIS_AVAILABLE, const {},
           isError: true);
       registry.registerFeature(Feature.COMPILE_TIME_ERROR);
       return new StaticAccess.invalid(error);
@@ -843,9 +793,7 @@
   /// Compute the [AccessSemantics] corresponding to a compound super access
   /// reading from [getter] and writing to [setter].
   AccessSemantics computeCompoundSuperAccessSemantics(
-      Spannable node,
-      Element getter,
-      Element setter,
+      Spannable node, Element getter, Element setter,
       {bool isIndex: false}) {
     if (getter.isMalformed) {
       if (setter.isMalformed) {
@@ -854,7 +802,7 @@
         assert(invariant(node, setter.name == '[]=',
             message: "Unexpected super setter '$setter'."));
         return new CompoundAccessSemantics(
-                    CompoundAccessKind.UNRESOLVED_SUPER_GETTER, getter, setter);
+            CompoundAccessKind.UNRESOLVED_SUPER_GETTER, getter, setter);
       } else {
         assert(invariant(node, setter.isSetter,
             message: "Unexpected super setter '$setter'."));
@@ -911,7 +859,7 @@
         assert(invariant(node, getter.name == '[]',
             message: "Unexpected super getter '$getter'."));
         return new CompoundAccessSemantics(
-                    CompoundAccessKind.SUPER_GETTER_SETTER, getter, setter);
+            CompoundAccessKind.SUPER_GETTER_SETTER, getter, setter);
       } else {
         assert(invariant(node, setter.isSetter,
             message: "Unexpected super setter '$setter'."));
@@ -922,8 +870,8 @@
   }
 
   /// Compute the [AccessSemantics] corresponding to a local access of [target].
-  AccessSemantics computeLocalAccessSemantics(Spannable node,
-                                              LocalElement target) {
+  AccessSemantics computeLocalAccessSemantics(
+      Spannable node, LocalElement target) {
     if (target.isParameter) {
       if (target.isFinal || target.isConst) {
         return new StaticAccess.finalParameter(target);
@@ -946,9 +894,7 @@
   /// Compute the [AccessSemantics] corresponding to a static or toplevel access
   /// of [target].
   AccessSemantics computeStaticOrTopLevelAccessSemantics(
-      Spannable node,
-      Element target) {
-
+      Spannable node, Element target) {
     target = target.declaration;
     if (target.isMalformed) {
       // This handles elements with parser errors.
@@ -970,25 +916,25 @@
             message: "Unexpected static target '$target'."));
         return new StaticAccess.staticMethod(target);
       }
-     } else {
-       assert(invariant(node, target.isTopLevel,
-           message: "Unexpected statically resolved target '$target'."));
-       if (target.isGetter) {
-         return new StaticAccess.topLevelGetter(target);
-       } else if (target.isSetter) {
-         return new StaticAccess.topLevelSetter(target);
-       } else if (target.isField) {
-         if (target.isFinal) {
-           return new StaticAccess.finalTopLevelField(target);
-         } else {
-           return new StaticAccess.topLevelField(target);
-         }
-       } else {
-         assert(invariant(node, target.isFunction,
-             message: "Unexpected top level target '$target'."));
-         return new StaticAccess.topLevelMethod(target);
-       }
-     }
+    } else {
+      assert(invariant(node, target.isTopLevel,
+          message: "Unexpected statically resolved target '$target'."));
+      if (target.isGetter) {
+        return new StaticAccess.topLevelGetter(target);
+      } else if (target.isSetter) {
+        return new StaticAccess.topLevelSetter(target);
+      } else if (target.isField) {
+        if (target.isFinal) {
+          return new StaticAccess.finalTopLevelField(target);
+        } else {
+          return new StaticAccess.topLevelField(target);
+        }
+      } else {
+        assert(invariant(node, target.isFunction,
+            message: "Unexpected top level target '$target'."));
+        return new StaticAccess.topLevelMethod(target);
+      }
+    }
   }
 
   /// Compute the [AccessSemantics] for accessing the name of [selector] on the
@@ -1008,10 +954,8 @@
   ///     }
   ///
   AccessSemantics computeSuperAccessSemanticsForSelector(
-      Spannable node,
-      Selector selector,
+      Spannable node, Selector selector,
       {Name alternateName}) {
-
     Name name = selector.memberName;
     // TODO(johnniwinther): Ensure correct behavior if currentClass is a
     // patch.
@@ -1024,12 +968,16 @@
       Element error;
       if (selector.isSetter) {
         error = reportAndCreateErroneousElement(
-          node, name.text, MessageKind.UNDEFINED_SUPER_SETTER,
-          {'className': currentClass.name, 'memberName': name});
+            node,
+            name.text,
+            MessageKind.UNDEFINED_SUPER_SETTER,
+            {'className': currentClass.name, 'memberName': name});
       } else {
         error = reportAndCreateErroneousElement(
-          node, name.text, MessageKind.NO_SUCH_SUPER_MEMBER,
-          {'className': currentClass.name, 'memberName': name});
+            node,
+            name.text,
+            MessageKind.NO_SUCH_SUPER_MEMBER,
+            {'className': currentClass.name, 'memberName': name});
       }
       if (target == null) {
         // If a setter wasn't resolved, use the [ErroneousElement].
@@ -1060,9 +1008,7 @@
   ///     }
   ///
   AccessSemantics computeSuperAccessSemanticsForSelectors(
-      Spannable node,
-      Selector getterSelector,
-      Selector setterSelector,
+      Spannable node, Selector getterSelector, Selector setterSelector,
       {bool isIndex: false}) {
     bool getterError = false;
     bool setterError = false;
@@ -1073,7 +1019,9 @@
     // [target] may be null which means invoking noSuchMethod on super.
     if (getter == null) {
       getter = reportAndCreateErroneousElement(
-          node, getterSelector.name, MessageKind.NO_SUCH_SUPER_MEMBER,
+          node,
+          getterSelector.name,
+          MessageKind.NO_SUCH_SUPER_MEMBER,
           {'className': currentClass.name, 'memberName': getterSelector.name});
       getterError = true;
     }
@@ -1081,43 +1029,43 @@
     // [target] may be null which means invoking noSuchMethod on super.
     if (setter == null) {
       setter = reportAndCreateErroneousElement(
-          node, setterSelector.name, MessageKind.NO_SUCH_SUPER_MEMBER,
+          node,
+          setterSelector.name,
+          MessageKind.NO_SUCH_SUPER_MEMBER,
           {'className': currentClass.name, 'memberName': setterSelector.name});
       setterError = true;
     } else if (getter == setter) {
       if (setter.isFunction) {
         setter = reportAndCreateErroneousElement(
-            node, setterSelector.name,
-            MessageKind.ASSIGNING_METHOD_IN_SUPER,
-            {'superclassName': setter.enclosingClass.name,
-             'name': setterSelector.name});
+            node, setterSelector.name, MessageKind.ASSIGNING_METHOD_IN_SUPER, {
+          'superclassName': setter.enclosingClass.name,
+          'name': setterSelector.name
+        });
         setterError = true;
       } else if (setter.isField && setter.isFinal) {
-        setter = reportAndCreateErroneousElement(
-            node, setterSelector.name,
-            MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER,
-            {'superclassName': setter.enclosingClass.name,
-             'name': setterSelector.name});
+        setter = reportAndCreateErroneousElement(node, setterSelector.name,
+            MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER, {
+          'superclassName': setter.enclosingClass.name,
+          'name': setterSelector.name
+        });
         setterError = true;
       }
     }
     if (getterError) {
       // We still need to register the invocation, because we might
       // call [:super.noSuchMethod:] which calls [JSInvocationMirror._invokeOn].
-      registry.registerDynamicUse(
-          new DynamicUse(getterSelector, null));
+      registry.registerDynamicUse(new DynamicUse(getterSelector, null));
     }
     if (setterError) {
       // We still need to register the invocation, because we might
       // call [:super.noSuchMethod:] which calls [JSInvocationMirror._invokeOn].
-      registry.registerDynamicUse(
-          new DynamicUse(setterSelector, null));
+      registry.registerDynamicUse(new DynamicUse(setterSelector, null));
     }
     if (getterError || setterError) {
       registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
     }
-    return computeCompoundSuperAccessSemantics(
-        node, getter, setter, isIndex: isIndex);
+    return computeCompoundSuperAccessSemantics(node, getter, setter,
+        isIndex: isIndex);
   }
 
   /// Resolve [node] as a subexpression that is _not_ the prefix of a member
@@ -1214,10 +1162,8 @@
         // TODO(johnniwinther): Add information to [AccessSemantics] about
         // whether it is erroneous.
         if (semantics.kind == AccessKind.SUPER_METHOD) {
-          registry.registerStaticUse(
-              new StaticUse.superInvoke(
-                  semantics.element.declaration,
-                  selector.callStructure));
+          registry.registerStaticUse(new StaticUse.superInvoke(
+              semantics.element.declaration, selector.callStructure));
         }
         // TODO(23998): Remove this when all information goes through
         // the [SendStructure].
@@ -1235,17 +1181,15 @@
             expressionConstant.getKnownType(coreTypes);
         switch (operator.kind) {
           case UnaryOperatorKind.COMPLEMENT:
-            isValidConstant =
-                knownExpressionType == coreTypes.intType;
+            isValidConstant = knownExpressionType == coreTypes.intType;
             break;
           case UnaryOperatorKind.NEGATE:
-            isValidConstant =
-                knownExpressionType == coreTypes.intType ||
+            isValidConstant = knownExpressionType == coreTypes.intType ||
                 knownExpressionType == coreTypes.doubleType;
             break;
           case UnaryOperatorKind.NOT:
-            reporter.internalError(node,
-                "Unexpected user definable unary operator: $operator");
+            reporter.internalError(
+                node, "Unexpected user definable unary operator: $operator");
         }
         if (isValidConstant) {
           // TODO(johnniwinther): Handle potentially invalid constant
@@ -1258,8 +1202,8 @@
       }
     }
     if (semantics != null) {
-      registry.registerSendStructure(node,
-          new UnaryStructure(semantics, operator));
+      registry.registerSendStructure(
+          node, new UnaryStructure(semantics, operator));
     }
     return result;
   }
@@ -1303,9 +1247,7 @@
           rightConstant.getKnownType(coreTypes) == coreTypes.boolType) {
         // TODO(johnniwinther): Handle potentially invalid constant expressions.
         ConstantExpression constant = new BinaryConstantExpression(
-            leftConstant,
-            BinaryOperator.LOGICAL_AND,
-            rightConstant);
+            leftConstant, BinaryOperator.LOGICAL_AND, rightConstant);
         registry.setConstant(node, constant);
         return new ConstantResult(node, constant);
       }
@@ -1329,9 +1271,7 @@
           rightConstant.getKnownType(coreTypes) == coreTypes.boolType) {
         // TODO(johnniwinther): Handle potentially invalid constant expressions.
         ConstantExpression constant = new BinaryConstantExpression(
-            leftConstant,
-            BinaryOperator.LOGICAL_OR,
-            rightConstant);
+            leftConstant, BinaryOperator.LOGICAL_OR, rightConstant);
         registry.setConstant(node, constant);
         return new ConstantResult(node, constant);
       }
@@ -1366,8 +1306,8 @@
 
   /// Handle the binary expression of a user definable binary [operator], like
   /// `a + b`, `super + b`, `a == b` and `a != b`.
-  ResolutionResult handleUserDefinableBinary(Send node,
-                                             BinaryOperator operator) {
+  ResolutionResult handleUserDefinableBinary(
+      Send node, BinaryOperator operator) {
     ResolutionResult result = const NoneResult();
     Node left = node.receiver;
     Node right = node.arguments.head;
@@ -1389,10 +1329,8 @@
         // TODO(johnniwinther): Add information to [AccessSemantics] about
         // whether it is erroneous.
         if (semantics.kind == AccessKind.SUPER_METHOD) {
-          registry.registerStaticUse(
-              new StaticUse.superInvoke(
-                  semantics.element.declaration,
-                  selector.callStructure));
+          registry.registerStaticUse(new StaticUse.superInvoke(
+              semantics.element.declaration, selector.callStructure));
         }
         // TODO(23998): Remove this when all information goes through
         // the [SendStructure].
@@ -1414,26 +1352,24 @@
         switch (operator.kind) {
           case BinaryOperatorKind.EQ:
           case BinaryOperatorKind.NOT_EQ:
-            isValidConstant =
-                (knownLeftType == coreTypes.intType ||
-                 knownLeftType == coreTypes.doubleType ||
-                 knownLeftType == coreTypes.stringType ||
-                 knownLeftType == coreTypes.boolType ||
-                 knownLeftType == coreTypes.nullType) &&
+            isValidConstant = (knownLeftType == coreTypes.intType ||
+                    knownLeftType == coreTypes.doubleType ||
+                    knownLeftType == coreTypes.stringType ||
+                    knownLeftType == coreTypes.boolType ||
+                    knownLeftType == coreTypes.nullType) &&
                 (knownRightType == coreTypes.intType ||
-                 knownRightType == coreTypes.doubleType ||
-                 knownRightType == coreTypes.stringType ||
-                 knownRightType == coreTypes.boolType ||
-                 knownRightType == coreTypes.nullType);
+                    knownRightType == coreTypes.doubleType ||
+                    knownRightType == coreTypes.stringType ||
+                    knownRightType == coreTypes.boolType ||
+                    knownRightType == coreTypes.nullType);
             break;
           case BinaryOperatorKind.ADD:
-            isValidConstant =
-                (knownLeftType == coreTypes.intType ||
-                 knownLeftType == coreTypes.doubleType ||
-                 knownLeftType == coreTypes.stringType) &&
+            isValidConstant = (knownLeftType == coreTypes.intType ||
+                    knownLeftType == coreTypes.doubleType ||
+                    knownLeftType == coreTypes.stringType) &&
                 (knownRightType == coreTypes.intType ||
-                 knownRightType == coreTypes.doubleType ||
-                 knownRightType == coreTypes.stringType);
+                    knownRightType == coreTypes.doubleType ||
+                    knownRightType == coreTypes.stringType);
             break;
           case BinaryOperatorKind.SUB:
           case BinaryOperatorKind.MUL:
@@ -1444,19 +1380,17 @@
           case BinaryOperatorKind.GT:
           case BinaryOperatorKind.LTEQ:
           case BinaryOperatorKind.LT:
-            isValidConstant =
-                (knownLeftType == coreTypes.intType ||
-                 knownLeftType == coreTypes.doubleType) &&
+            isValidConstant = (knownLeftType == coreTypes.intType ||
+                    knownLeftType == coreTypes.doubleType) &&
                 (knownRightType == coreTypes.intType ||
-                 knownRightType == coreTypes.doubleType);
+                    knownRightType == coreTypes.doubleType);
             break;
           case BinaryOperatorKind.SHL:
           case BinaryOperatorKind.SHR:
           case BinaryOperatorKind.AND:
           case BinaryOperatorKind.OR:
           case BinaryOperatorKind.XOR:
-            isValidConstant =
-                knownLeftType == coreTypes.intType &&
+            isValidConstant = knownLeftType == coreTypes.intType &&
                 knownRightType == coreTypes.intType;
             break;
           case BinaryOperatorKind.INDEX:
@@ -1473,9 +1407,7 @@
           // TODO(johnniwinther): Handle potentially invalid constant
           // expressions.
           ConstantExpression constant = new BinaryConstantExpression(
-              leftResult.constant,
-              operator,
-              rightResult.constant);
+              leftResult.constant, operator, rightResult.constant);
           registry.setConstant(node, constant);
           result = new ConstantResult(node, constant);
         }
@@ -1527,8 +1459,8 @@
 
   /// Handle an invocation of an expression, like `(){}()` or `(foo)()`.
   ResolutionResult handleExpressionInvoke(Send node) {
-    assert(invariant(node, node.isCall,
-        message: "Unexpected expression: $node"));
+    assert(
+        invariant(node, node.isCall, message: "Unexpected expression: $node"));
     Node expression = node.selector;
     visitExpression(expression);
     CallStructure callStructure =
@@ -1538,8 +1470,8 @@
     // [SendStructure].
     registry.setSelector(node, selector);
     registry.registerDynamicUse(new DynamicUse(selector, null));
-    registry.registerSendStructure(node,
-        new InvokeStructure(const DynamicAccess.expression(), selector));
+    registry.registerSendStructure(
+        node, new InvokeStructure(const DynamicAccess.expression(), selector));
     return const NoneResult();
   }
 
@@ -1570,19 +1502,17 @@
       AccessSemantics accessSemantics = checkThisAccess(node);
       if (accessSemantics == null) {
         accessSemantics = const DynamicAccess.thisAccess();
-        registry.registerDynamicUse(
-            new DynamicUse(selector, null));
+        registry.registerDynamicUse(new DynamicUse(selector, null));
       }
-      registry.registerSendStructure(node,
-          new InvokeStructure(accessSemantics, selector));
+      registry.registerSendStructure(
+          node, new InvokeStructure(accessSemantics, selector));
       // TODO(23998): Remove this when all information goes through
       // the [SendStructure].
       registry.setSelector(node, selector);
       return const NoneResult();
     } else {
       // TODO(johnniwinther): Handle get of `this` when it is a [Send] node.
-      reporter.internalError(
-          node, "Unexpected node '$node'.");
+      reporter.internalError(node, "Unexpected node '$node'.");
     }
     return const NoneResult();
   }
@@ -1600,8 +1530,8 @@
     }
     AccessSemantics semantics = checkSuperAccess(node);
     if (semantics == null) {
-      semantics = computeSuperAccessSemanticsForSelector(
-          node, selector, alternateName: name.setter);
+      semantics = computeSuperAccessSemanticsForSelector(node, selector,
+          alternateName: name.setter);
     }
     if (node.isCall) {
       bool isIncompatibleInvoke = false;
@@ -1609,11 +1539,9 @@
         case AccessKind.SUPER_METHOD:
           MethodElementX superMethod = semantics.element;
           superMethod.computeType(resolution);
-          if (!callStructure.signatureApplies(
-                  superMethod.functionSignature)) {
+          if (!callStructure.signatureApplies(superMethod.functionSignature)) {
             registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-            registry.registerDynamicUse(
-                new DynamicUse(selector, null));
+            registry.registerDynamicUse(new DynamicUse(selector, null));
             registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
             isIncompatibleInvoke = true;
           } else {
@@ -1624,11 +1552,9 @@
         case AccessKind.SUPER_FIELD:
         case AccessKind.SUPER_FINAL_FIELD:
         case AccessKind.SUPER_GETTER:
-          registry.registerStaticUse(
-              new StaticUse.superGet(semantics.element));
+          registry.registerStaticUse(new StaticUse.superGet(semantics.element));
           selector = callStructure.callSelector;
-          registry.registerDynamicUse(
-              new DynamicUse(selector, null));
+          registry.registerDynamicUse(new DynamicUse(selector, null));
           break;
         case AccessKind.SUPER_SETTER:
         case AccessKind.UNRESOLVED_SUPER:
@@ -1642,7 +1568,8 @@
               node, "Unexpected super property access $semantics.");
           break;
       }
-      registry.registerSendStructure(node,
+      registry.registerSendStructure(
+          node,
           isIncompatibleInvoke
               ? new IncompatibleInvokeStructure(semantics, selector)
               : new InvokeStructure(semantics, selector));
@@ -1651,14 +1578,13 @@
         case AccessKind.SUPER_METHOD:
           // TODO(johnniwinther): Method this should be registered as a
           // closurization.
-          registry.registerStaticUse(
-              new StaticUse.superTearOff(semantics.element));
+          registry
+              .registerStaticUse(new StaticUse.superTearOff(semantics.element));
           break;
         case AccessKind.SUPER_FIELD:
         case AccessKind.SUPER_FINAL_FIELD:
         case AccessKind.SUPER_GETTER:
-          registry.registerStaticUse(
-              new StaticUse.superGet(semantics.element));
+          registry.registerStaticUse(new StaticUse.superGet(semantics.element));
           break;
         case AccessKind.SUPER_SETTER:
         case AccessKind.UNRESOLVED_SUPER:
@@ -1689,7 +1615,7 @@
     String operatorText = node.selector.asOperator().source;
     if (operatorText == 'is') {
       return handleIs(node);
-    } else if (operatorText  == 'as') {
+    } else if (operatorText == 'as') {
       return handleAs(node);
     } else if (node.arguments.isEmpty) {
       UnaryOperator operator = UnaryOperator.parse(operatorText);
@@ -1760,7 +1686,9 @@
     // [resolveSend] to select better warning messages for getters and
     // setters.
     ErroneousElement error = reportAndCreateErroneousElement(
-        node, name.text, MessageKind.UNDEFINED_GETTER,
+        node,
+        name.text,
+        MessageKind.UNDEFINED_GETTER,
         {'className': receiverClass.name, 'memberName': name.text});
     // TODO(johnniwinther): Add an [AccessSemantics] for unresolved static
     // member access.
@@ -1784,7 +1712,9 @@
 
     // TODO(johnniwinther): Produce a different error for complex update.
     ErroneousElement error = reportAndCreateErroneousElement(
-        node, name.text, MessageKind.UNDEFINED_GETTER,
+        node,
+        name.text,
+        MessageKind.UNDEFINED_GETTER,
         {'className': receiverClass.name, 'memberName': name.text});
     // TODO(johnniwinther): Add an [AccessSemantics] for unresolved static
     // member access.
@@ -1795,7 +1725,6 @@
   /// `a` is a class and `b` is a non-static member.
   ResolutionResult handleStaticInstanceMemberAccess(
       Send node, Name name, ClassElement receiverClass, Element member) {
-
     registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
     // TODO(johnniwinther): With the simplified [TreeElements] invariant,
     // try to resolve injected elements if [currentClass] is in the patch
@@ -1805,7 +1734,9 @@
     // [resolveSend] to select better warning messages for getters and
     // setters.
     ErroneousElement error = reportAndCreateErroneousElement(
-        node, name.text, MessageKind.MEMBER_NOT_STATIC,
+        node,
+        name.text,
+        MessageKind.MEMBER_NOT_STATIC,
         {'className': receiverClass.name, 'memberName': name});
 
     // TODO(johnniwinther): Add an [AccessSemantics] for statically accessed
@@ -1818,7 +1749,6 @@
   /// where `a` is a class and `b` is a non-static member.
   ResolutionResult handleStaticInstanceMemberUpdate(
       SendSet node, Name name, ClassElement receiverClass, Element member) {
-
     registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
     // TODO(johnniwinther): With the simplified [TreeElements] invariant,
     // try to resolve injected elements if [currentClass] is in the patch
@@ -1826,7 +1756,9 @@
 
     // TODO(johnniwinther): Produce a different error for complex update.
     ErroneousElement error = reportAndCreateErroneousElement(
-        node, name.text, MessageKind.MEMBER_NOT_STATIC,
+        node,
+        name.text,
+        MessageKind.MEMBER_NOT_STATIC,
         {'className': receiverClass.name, 'memberName': name});
 
     // TODO(johnniwinther): Add an [AccessSemantics] for statically accessed
@@ -1841,9 +1773,10 @@
       Send node, Name name, ClassElement receiverClass, Element member) {
     registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
     ErroneousElement error = reportAndCreateErroneousElement(
-        node, name.text, MessageKind.PRIVATE_ACCESS,
-        {'libraryName': member.library.libraryOrScriptName,
-         'name': name});
+        node,
+        name.text,
+        MessageKind.PRIVATE_ACCESS,
+        {'libraryName': member.library.libraryOrScriptName, 'name': name});
     // TODO(johnniwinther): Add an [AccessSemantics] for unresolved static
     // member access.
     return handleErroneousAccess(
@@ -1857,9 +1790,10 @@
       SendSet node, Name name, ClassElement receiverClass, Element member) {
     registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
     ErroneousElement error = reportAndCreateErroneousElement(
-        node, name.text, MessageKind.PRIVATE_ACCESS,
-        {'libraryName': member.library.libraryOrScriptName,
-         'name': name});
+        node,
+        name.text,
+        MessageKind.PRIVATE_ACCESS,
+        {'libraryName': member.library.libraryOrScriptName, 'name': name});
     // TODO(johnniwinther): Add an [AccessSemantics] for unresolved static
     // member access.
     return handleUpdate(node, name, new StaticAccess.unresolved(error));
@@ -1931,14 +1865,13 @@
   // TODO(johnniwinther): Remove [element] when it is no longer needed for
   // evaluating constants.
   ResolutionResult handleTypeVariableTypeLiteralAccess(
-      Send node,
-      Name name,
-      TypeVariableElement element) {
+      Send node, Name name, TypeVariableElement element) {
     AccessSemantics semantics;
     if (!Elements.hasAccessToTypeVariables(enclosingElement)) {
       // TODO(johnniwinther): Add another access semantics for this.
       ErroneousElement error = reportAndCreateErroneousElement(
-          node, name.text,
+          node,
+          name.text,
           MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER,
           {'typeVariableName': name},
           isError: true);
@@ -1961,8 +1894,8 @@
       // the [SendStructure].
       registry.setSelector(node, selector);
 
-      registry.registerSendStructure(node,
-          new InvokeStructure(semantics, selector));
+      registry.registerSendStructure(
+          node, new InvokeStructure(semantics, selector));
     } else {
       // TODO(johnniwinther): Avoid the need for a [Selector] here.
       registry.registerSendStructure(node, new GetStructure(semantics));
@@ -1973,14 +1906,13 @@
   /// Handle access to a type literal of type variable [element]. Like `T = b`,
   /// `T++` or `T += b` where 'T' is type variable.
   ResolutionResult handleTypeVariableTypeLiteralUpdate(
-      SendSet node,
-      Name name,
-      TypeVariableElement element) {
+      SendSet node, Name name, TypeVariableElement element) {
     AccessSemantics semantics;
     if (!Elements.hasAccessToTypeVariables(enclosingElement)) {
       // TODO(johnniwinther): Add another access semantics for this.
       ErroneousElement error = reportAndCreateErroneousElement(
-          node, name.text,
+          node,
+          name.text,
           MessageKind.TYPE_VARIABLE_WITHIN_STATIC_MEMBER,
           {'typeVariableName': name},
           isError: true);
@@ -1989,16 +1921,14 @@
     } else {
       ErroneousElement error;
       if (node.isIfNullAssignment) {
-        error = reportAndCreateErroneousElement(
-            node.selector, name.text,
+        error = reportAndCreateErroneousElement(node.selector, name.text,
             MessageKind.IF_NULL_ASSIGNING_TYPE, const {});
         // TODO(23998): Remove these when all information goes through
         // the [SendStructure].
         registry.useElement(node.selector, element);
       } else {
         error = reportAndCreateErroneousElement(
-            node.selector, name.text,
-            MessageKind.ASSIGNING_TYPE, const {});
+            node.selector, name.text, MessageKind.ASSIGNING_TYPE, const {});
       }
 
       // TODO(23998): Remove this when all information goes through
@@ -2017,12 +1947,8 @@
   // the [GetStructure].
   // TODO(johnniwinther): Remove [element] when it is no longer needed for
   // evaluating constants.
-  ResolutionResult handleConstantTypeLiteralAccess(
-      Send node,
-      Name name,
-      TypeDeclarationElement element,
-      DartType type,
-      ConstantAccess semantics) {
+  ResolutionResult handleConstantTypeLiteralAccess(Send node, Name name,
+      TypeDeclarationElement element, DartType type, ConstantAccess semantics) {
     registry.useElement(node, element);
     registry.registerTypeLiteral(node, type);
 
@@ -2039,8 +1965,8 @@
       registry.useElement(node.selector, element);
       analyzeConstantDeferred(node.selector, enforceConst: false);
 
-      registry.registerSendStructure(node,
-          new InvokeStructure(semantics, selector));
+      registry.registerSendStructure(
+          node, new InvokeStructure(semantics, selector));
       return const NoneResult();
     } else {
       analyzeConstantDeferred(node, enforceConst: false);
@@ -2056,20 +1982,14 @@
   // the [GetStructure].
   // TODO(johnniwinther): Remove [element] when it is no longer needed for
   // evaluating constants.
-  ResolutionResult handleConstantTypeLiteralUpdate(
-      SendSet node,
-      Name name,
-      TypeDeclarationElement element,
-      DartType type,
-      ConstantAccess semantics) {
-
+  ResolutionResult handleConstantTypeLiteralUpdate(SendSet node, Name name,
+      TypeDeclarationElement element, DartType type, ConstantAccess semantics) {
     // TODO(johnniwinther): Remove this when all constants are evaluated.
     compiler.resolver.constantCompiler.evaluate(semantics.constant);
 
     ErroneousElement error;
     if (node.isIfNullAssignment) {
-      error = reportAndCreateErroneousElement(
-          node.selector, name.text,
+      error = reportAndCreateErroneousElement(node.selector, name.text,
           MessageKind.IF_NULL_ASSIGNING_TYPE, const {});
       // TODO(23998): Remove these when all information goes through
       // the [SendStructure].
@@ -2077,8 +1997,7 @@
       registry.useElement(node.selector, element);
     } else {
       error = reportAndCreateErroneousElement(
-          node.selector, name.text,
-          MessageKind.ASSIGNING_TYPE, const {});
+          node.selector, name.text, MessageKind.ASSIGNING_TYPE, const {});
     }
 
     // TODO(23998): Remove this when all information goes through
@@ -2093,9 +2012,7 @@
   /// Handle access to a type literal of a typedef. Like `F` or
   /// `F()` where 'F' is typedef.
   ResolutionResult handleTypedefTypeLiteralAccess(
-      Send node,
-      Name name,
-      TypedefElement typdef) {
+      Send node, Name name, TypedefElement typdef) {
     typdef.ensureResolved(resolution);
     DartType type = typdef.rawType;
     ConstantExpression constant = new TypeConstantExpression(type);
@@ -2106,9 +2023,7 @@
   /// Handle access to a type literal of a typedef. Like `F = b`, `F++` or
   /// `F += b` where 'F' is typedef.
   ResolutionResult handleTypedefTypeLiteralUpdate(
-      SendSet node,
-      Name name,
-      TypedefElement typdef) {
+      SendSet node, Name name, TypedefElement typdef) {
     typdef.ensureResolved(resolution);
     DartType type = typdef.rawType;
     ConstantExpression constant = new TypeConstantExpression(type);
@@ -2125,8 +2040,7 @@
         // directly on the constant expressions.
         node.isCall ? coreTypes.typeType : type);
     AccessSemantics semantics = new ConstantAccess.dynamicTypeLiteral(constant);
-    return handleConstantTypeLiteralAccess(
-        node, const PublicName('dynamic'),
+    return handleConstantTypeLiteralAccess(node, const PublicName('dynamic'),
         coreClasses.typeClass, type, semantics);
   }
 
@@ -2137,17 +2051,14 @@
     ConstantExpression constant =
         new TypeConstantExpression(const DynamicType());
     AccessSemantics semantics = new ConstantAccess.dynamicTypeLiteral(constant);
-    return handleConstantTypeLiteralUpdate(
-        node, const PublicName('dynamic'),
+    return handleConstantTypeLiteralUpdate(node, const PublicName('dynamic'),
         coreClasses.typeClass, type, semantics);
   }
 
   /// Handle access to a type literal of a class. Like `C` or
   /// `C()` where 'C' is class.
   ResolutionResult handleClassTypeLiteralAccess(
-      Send node,
-      Name name,
-      ClassElement cls) {
+      Send node, Name name, ClassElement cls) {
     cls.ensureResolved(resolution);
     DartType type = cls.rawType;
     ConstantExpression constant = new TypeConstantExpression(type);
@@ -2158,9 +2069,7 @@
   /// Handle access to a type literal of a class. Like `C = b`, `C++` or
   /// `C += b` where 'C' is class.
   ResolutionResult handleClassTypeLiteralUpdate(
-      SendSet node,
-      Name name,
-      ClassElement cls) {
+      SendSet node, Name name, ClassElement cls) {
     cls.ensureResolved(resolution);
     DartType type = cls.rawType;
     ConstantExpression constant = new TypeConstantExpression(type);
@@ -2171,10 +2080,7 @@
   /// Handle a [Send] that resolves to a [prefix]. Like `prefix` in
   /// `prefix.Class` or `prefix` in `prefix()`, the latter being a compile time
   /// error.
-  ResolutionResult handleClassSend(
-      Send node,
-      Name name,
-      ClassElement cls) {
+  ResolutionResult handleClassSend(Send node, Name name, ClassElement cls) {
     cls.ensureResolved(resolution);
     if (sendIsMemberAccess) {
       registry.useElement(node, cls);
@@ -2187,16 +2093,14 @@
 
   /// Compute a [DeferredPrefixStructure] for [node].
   ResolutionResult handleDeferredAccess(
-      Send node,
-      PrefixElement prefix,
-      ResolutionResult result) {
+      Send node, PrefixElement prefix, ResolutionResult result) {
     assert(invariant(node, prefix.isDeferred,
         message: "Prefix $prefix is not deferred."));
     SendStructure sendStructure = registry.getSendStructure(node);
-    assert(invariant(node, sendStructure !=  null,
+    assert(invariant(node, sendStructure != null,
         message: "No SendStructure for $node."));
-    registry.registerSendStructure(node,
-        new DeferredPrefixStructure(prefix, sendStructure));
+    registry.registerSendStructure(
+        node, new DeferredPrefixStructure(prefix, sendStructure));
     if (result.isConstant) {
       ConstantExpression constant =
           new DeferredConstantExpression(result.constant, prefix);
@@ -2216,7 +2120,9 @@
     if (member == null) {
       registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
       Element error = reportAndCreateErroneousElement(
-          node, name.text, MessageKind.NO_SUCH_LIBRARY_MEMBER,
+          node,
+          name.text,
+          MessageKind.NO_SUCH_LIBRARY_MEMBER,
           {'libraryName': prefix.name, 'memberName': name});
       result = handleUnresolvedAccess(node, name, error);
     } else {
@@ -2228,7 +2134,7 @@
       // called on the parent `prefix.Class.foo` node.
       result = new PrefixResult(prefix, result.element);
     } else if (prefix.isDeferred &&
-               (member == null || !member.isDeferredLoaderGetter)) {
+        (member == null || !member.isDeferredLoaderGetter)) {
       result = handleDeferredAccess(node, prefix, result);
     }
     return result;
@@ -2244,7 +2150,9 @@
     if (member == null) {
       registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
       Element error = reportAndCreateErroneousElement(
-          node, name.text, MessageKind.NO_SUCH_LIBRARY_MEMBER,
+          node,
+          name.text,
+          MessageKind.NO_SUCH_LIBRARY_MEMBER,
           {'libraryName': prefix.name, 'memberName': name});
       return handleUpdate(node, name, new StaticAccess.unresolved(error));
     } else {
@@ -2256,7 +2164,7 @@
       // called on the parent `prefix.Class.foo` node.
       result = new PrefixResult(prefix, result.element);
     } else if (prefix.isDeferred &&
-               (member == null || !member.isDeferredLoaderGetter)) {
+        (member == null || !member.isDeferredLoaderGetter)) {
       result = handleDeferredAccess(node, prefix, result);
     }
     return result;
@@ -2266,19 +2174,13 @@
   /// `prefix.Class` or `prefix` in `prefix()`, the latter being a compile time
   /// error.
   ResolutionResult handleLibraryPrefix(
-      Send node,
-      Name name,
-      PrefixElement prefix) {
+      Send node, Name name, PrefixElement prefix) {
     if ((ElementCategory.PREFIX & allowedCategory) == 0) {
       ErroneousElement error = reportAndCreateErroneousElement(
-          node,
-          name.text,
-          MessageKind.PREFIX_AS_EXPRESSION,
-          {'prefix': name},
+          node, name.text, MessageKind.PREFIX_AS_EXPRESSION, {'prefix': name},
           isError: true);
       registry.registerFeature(Feature.COMPILE_TIME_ERROR);
-      return handleErroneousAccess(
-          node, name, new StaticAccess.invalid(error));
+      return handleErroneousAccess(node, name, new StaticAccess.invalid(error));
     }
     if (prefix.isDeferred) {
       // TODO(23998): Remove this when deferred access is detected
@@ -2340,14 +2242,12 @@
       CallStructure callStructure =
           resolveArguments(node.argumentsNode).callStructure;
       selector = new Selector.call(name, callStructure);
-      registry.registerDynamicUse(
-          new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector, null));
       sendStructure = new InvokeStructure(semantics, selector);
     } else {
       assert(invariant(node, node.isPropertyAccess));
       selector = new Selector.getter(name);
-      registry.registerDynamicUse(
-          new DynamicUse(selector, null));
+      registry.registerDynamicUse(new DynamicUse(selector, null));
       sendStructure = new GetStructure(semantics);
     }
     registry.registerSendStructure(node, sendStructure);
@@ -2362,11 +2262,9 @@
       SendSet node, Name name, Element element, AccessSemantics semantics) {
     Selector getterSelector = new Selector.getter(name);
     Selector setterSelector = new Selector.setter(name.setter);
-    registry.registerDynamicUse(
-        new DynamicUse(setterSelector, null));
+    registry.registerDynamicUse(new DynamicUse(setterSelector, null));
     if (node.isComplex) {
-      registry.registerDynamicUse(
-          new DynamicUse(getterSelector, null));
+      registry.registerDynamicUse(new DynamicUse(getterSelector, null));
     }
 
     // TODO(23998): Remove these when elements are only accessed through the
@@ -2391,9 +2289,7 @@
   /// Handle `this` as a qualified property, like `a.this`.
   ResolutionResult handleQualifiedThisAccess(Send node, Name name) {
     ErroneousElement error = reportAndCreateErroneousElement(
-        node.selector,
-        name.text,
-        MessageKind.THIS_PROPERTY, {},
+        node.selector, name.text, MessageKind.THIS_PROPERTY, {},
         isError: true);
     registry.registerFeature(Feature.COMPILE_TIME_ERROR);
     AccessSemantics accessSemantics = new StaticAccess.invalid(error);
@@ -2470,7 +2366,7 @@
 
   /// Handle access unresolved access to [name] in a non-instance context.
   ResolutionResult handleUnresolvedAccess(
-        Send node, Name name, Element element) {
+      Send node, Name name, Element element) {
     // TODO(johnniwinther): Support unresolved top level access as an
     // [AccessSemantics].
     AccessSemantics semantics = new StaticAccess.unresolved(element);
@@ -2504,15 +2400,9 @@
 
   /// Handle access to an ambiguous element, that is, a name imported twice.
   ResolutionResult handleAmbiguousSend(
-      Send node,
-      Name name,
-      AmbiguousElement element) {
-
+      Send node, Name name, AmbiguousElement element) {
     ErroneousElement error = reportAndCreateErroneousElement(
-        node,
-        name.text,
-        element.messageKind,
-        element.messageArguments,
+        node, name.text, element.messageKind, element.messageArguments,
         infos: element.computeInfos(enclosingElement, reporter));
     registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
 
@@ -2523,15 +2413,9 @@
 
   /// Handle update to an ambiguous element, that is, a name imported twice.
   ResolutionResult handleAmbiguousUpdate(
-      SendSet node,
-      Name name,
-      AmbiguousElement element) {
-
+      SendSet node, Name name, AmbiguousElement element) {
     ErroneousElement error = reportAndCreateErroneousElement(
-        node,
-        name.text,
-        element.messageKind,
-        element.messageArguments,
+        node, name.text, element.messageKind, element.messageArguments,
         infos: element.computeInfos(enclosingElement, reporter));
     registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
 
@@ -2543,8 +2427,7 @@
   /// Report access of an instance [member] from a non-instance context.
   AccessSemantics reportStaticInstanceAccess(Send node, Name name) {
     ErroneousElement error = reportAndCreateErroneousElement(
-        node, name.text,
-        MessageKind.NO_INSTANCE_AVAILABLE, {'name': name},
+        node, name.text, MessageKind.NO_INSTANCE_AVAILABLE, {'name': name},
         isError: true);
     // TODO(johnniwinther): Support static instance access as an
     // [AccessSemantics].
@@ -2568,8 +2451,7 @@
           function.computeType(resolution);
           if (!callStructure.signatureApplies(function.functionSignature)) {
             registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-            registry.registerDynamicUse(
-                new DynamicUse(selector, null));
+            registry.registerDynamicUse(new DynamicUse(selector, null));
             isIncompatibleInvoke = true;
           }
           break;
@@ -2578,15 +2460,14 @@
         case AccessKind.LOCAL_VARIABLE:
         case AccessKind.FINAL_LOCAL_VARIABLE:
           selector = callStructure.callSelector;
-          registry.registerDynamicUse(
-              new DynamicUse(selector, null));
+          registry.registerDynamicUse(new DynamicUse(selector, null));
           break;
         default:
-          reporter.internalError(node,
-              "Unexpected local access $semantics.");
+          reporter.internalError(node, "Unexpected local access $semantics.");
           break;
       }
-      registry.registerSendStructure(node,
+      registry.registerSendStructure(
+          node,
           isIncompatibleInvoke
               ? new IncompatibleInvokeStructure(semantics, selector)
               : new InvokeStructure(semantics, selector));
@@ -2602,15 +2483,14 @@
             ParameterElement parameter = element;
             if (parameter.isNamed) {
               result = new ConstantResult(
-                  node,
-                  new NamedArgumentReference(parameter.name),
+                  node, new NamedArgumentReference(parameter.name),
                   element: element);
             } else {
               result = new ConstantResult(
                   node,
-                  new PositionalArgumentReference(
-                      parameter.functionDeclaration.parameters.indexOf(
-                          parameter)),
+                  new PositionalArgumentReference(parameter
+                      .functionDeclaration.parameters
+                      .indexOf(parameter)),
                   element: element);
             }
           } else {
@@ -2620,16 +2500,14 @@
         case AccessKind.FINAL_LOCAL_VARIABLE:
           if (element.isConst) {
             result = new ConstantResult(
-                node,
-                new VariableConstantExpression(element),
+                node, new VariableConstantExpression(element),
                 element: element);
           } else {
             result = new ElementResult(element);
           }
           break;
         default:
-          reporter.internalError(node,
-              "Unexpected local access $semantics.");
+          reporter.internalError(node, "Unexpected local access $semantics.");
           break;
       }
       selector = new Selector.getter(name);
@@ -2652,20 +2530,16 @@
     ErroneousElement error;
     if (element.isParameter) {
       if (element.isFinal) {
-        error = reportAndCreateErroneousElement(
-            node.selector, name.text,
-            MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER,
-            {'name': name});
+        error = reportAndCreateErroneousElement(node.selector, name.text,
+            MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER, {'name': name});
         semantics = new StaticAccess.finalParameter(element);
       } else {
         semantics = new StaticAccess.parameter(element);
       }
     } else if (element.isVariable) {
       if (element.isFinal || element.isConst) {
-        error = reportAndCreateErroneousElement(
-            node.selector, name.text,
-            MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER,
-            {'name': name});
+        error = reportAndCreateErroneousElement(node.selector, name.text,
+            MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER, {'name': name});
         semantics = new StaticAccess.finalLocalVariable(element);
       } else {
         semantics = new StaticAccess.localVariable(element);
@@ -2674,8 +2548,7 @@
       assert(invariant(node, element.isFunction,
           message: "Unexpected local $element."));
       error = reportAndCreateErroneousElement(
-          node.selector, name.text,
-          MessageKind.ASSIGNING_METHOD, const {});
+          node.selector, name.text, MessageKind.ASSIGNING_METHOD, const {});
       semantics = new StaticAccess.localFunction(element);
     }
     if (isPotentiallyMutableTarget(element)) {
@@ -2700,7 +2573,7 @@
 
   /// Handle access of a static or top level [element].
   ResolutionResult handleStaticOrTopLevelAccess(
-        Send node, Name name, Element element) {
+      Send node, Name name, Element element) {
     ResolutionResult result = const NoneResult();
     MemberElement member;
     if (element.isAbstractField) {
@@ -2717,21 +2590,20 @@
     // of parse errors to make [element] erroneous. Fix this!
     member.computeType(resolution);
 
-
     if (member == compiler.mirrorSystemGetNameFunction &&
         !compiler.mirrorUsageAnalyzerTask.hasMirrorUsage(enclosingElement)) {
-      reporter.reportHintMessage(
-          node.selector, MessageKind.STATIC_FUNCTION_BLOAT,
-          {'class': compiler.mirrorSystemClass.name,
-           'name': compiler.mirrorSystemGetNameFunction.name});
+      reporter
+          .reportHintMessage(node.selector, MessageKind.STATIC_FUNCTION_BLOAT, {
+        'class': compiler.mirrorSystemClass.name,
+        'name': compiler.mirrorSystemGetNameFunction.name
+      });
     }
 
     Selector selector;
     AccessSemantics semantics =
         computeStaticOrTopLevelAccessSemantics(node, member);
     if (node.isCall) {
-      ArgumentsResult argumentsResult =
-          resolveArguments(node.argumentsNode);
+      ArgumentsResult argumentsResult = resolveArguments(node.argumentsNode);
       CallStructure callStructure = argumentsResult.callStructure;
       selector = new Selector.call(name, callStructure);
 
@@ -2743,8 +2615,7 @@
           method.computeType(resolution);
           if (!callStructure.signatureApplies(method.functionSignature)) {
             registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-            registry.registerDynamicUse(
-                new DynamicUse(selector, null));
+            registry.registerDynamicUse(new DynamicUse(selector, null));
             isIncompatibleInvoke = true;
           } else {
             registry.registerStaticUse(
@@ -2752,7 +2623,8 @@
             handleForeignCall(node, semantics.element, callStructure);
             if (method == compiler.identicalFunction &&
                 argumentsResult.isValidAsConstant) {
-              result = new ConstantResult(node,
+              result = new ConstantResult(
+                  node,
                   new IdenticalConstantExpression(
                       argumentsResult.argumentResults[0].constant,
                       argumentsResult.argumentResults[1].constant));
@@ -2765,27 +2637,25 @@
         case AccessKind.TOPLEVEL_FIELD:
         case AccessKind.FINAL_TOPLEVEL_FIELD:
         case AccessKind.TOPLEVEL_GETTER:
-          registry.registerStaticUse(
-              new StaticUse.staticGet(semantics.element));
+          registry
+              .registerStaticUse(new StaticUse.staticGet(semantics.element));
           selector = callStructure.callSelector;
-          registry.registerDynamicUse(
-              new DynamicUse(selector, null));
+          registry.registerDynamicUse(new DynamicUse(selector, null));
           break;
         case AccessKind.STATIC_SETTER:
         case AccessKind.TOPLEVEL_SETTER:
         case AccessKind.UNRESOLVED:
           registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-          member = reportAndCreateErroneousElement(
-              node.selector, name.text,
-              MessageKind.UNDEFINED_STATIC_GETTER_BUT_SETTER,
-              {'name': name});
+          member = reportAndCreateErroneousElement(node.selector, name.text,
+              MessageKind.UNDEFINED_STATIC_GETTER_BUT_SETTER, {'name': name});
           break;
         default:
-          reporter.internalError(node,
-              "Unexpected statically resolved access $semantics.");
+          reporter.internalError(
+              node, "Unexpected statically resolved access $semantics.");
           break;
       }
-      registry.registerSendStructure(node,
+      registry.registerSendStructure(
+          node,
           isIncompatibleInvoke
               ? new IncompatibleInvokeStructure(semantics, selector)
               : new InvokeStructure(semantics, selector));
@@ -2803,28 +2673,26 @@
         case AccessKind.TOPLEVEL_FIELD:
         case AccessKind.FINAL_TOPLEVEL_FIELD:
         case AccessKind.TOPLEVEL_GETTER:
-          registry.registerStaticUse(
-              new StaticUse.staticGet(semantics.element));
+          registry
+              .registerStaticUse(new StaticUse.staticGet(semantics.element));
           break;
         case AccessKind.STATIC_SETTER:
         case AccessKind.TOPLEVEL_SETTER:
         case AccessKind.UNRESOLVED:
           registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
-          member = reportAndCreateErroneousElement(
-              node.selector, name.text,
-              MessageKind.UNDEFINED_STATIC_GETTER_BUT_SETTER,
-              {'name': name});
+          member = reportAndCreateErroneousElement(node.selector, name.text,
+              MessageKind.UNDEFINED_STATIC_GETTER_BUT_SETTER, {'name': name});
           break;
         default:
-          reporter.internalError(node,
-              "Unexpected statically resolved access $semantics.");
+          reporter.internalError(
+              node, "Unexpected statically resolved access $semantics.");
           break;
       }
       registry.registerSendStructure(node, new GetStructure(semantics));
       if (member.isConst) {
         FieldElement field = member;
-        result = new ConstantResult(
-            node, new VariableConstantExpression(field), element: field);
+        result = new ConstantResult(node, new VariableConstantExpression(field),
+            element: field);
       } else {
         result = new ElementResult(member);
       }
@@ -2840,13 +2708,14 @@
 
   /// Handle update of a static or top level [element].
   ResolutionResult handleStaticOrTopLevelUpdate(
-        SendSet node, Name name, Element element) {
+      SendSet node, Name name, Element element) {
     AccessSemantics semantics;
     if (element.isAbstractField) {
       AbstractFieldElement abstractField = element;
       if (abstractField.setter == null) {
         ErroneousElement error = reportAndCreateErroneousElement(
-            node.selector, name.text,
+            node.selector,
+            name.text,
             MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER,
             {'name': name});
         registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
@@ -2865,12 +2734,13 @@
               ? new StaticAccess.topLevelGetter(abstractField.getter)
               : new StaticAccess.staticGetter(abstractField.getter);
         }
-        registry.registerStaticUse(
-            new StaticUse.staticGet(abstractField.getter));
+        registry
+            .registerStaticUse(new StaticUse.staticGet(abstractField.getter));
       } else if (node.isComplex) {
         if (abstractField.getter == null) {
           ErroneousElement error = reportAndCreateErroneousElement(
-              node.selector, name.text,
+              node.selector,
+              name.text,
               MessageKind.UNDEFINED_STATIC_GETTER_BUT_SETTER,
               {'name': name});
           registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
@@ -2881,8 +2751,8 @@
                   : CompoundAccessKind.UNRESOLVED_STATIC_GETTER,
               error,
               abstractField.setter);
-          registry.registerStaticUse(
-              new StaticUse.staticSet(abstractField.setter));
+          registry
+              .registerStaticUse(new StaticUse.staticSet(abstractField.setter));
         } else {
           // `a++` or `a += b` where `a` has both a getter and a setter.
           semantics = new CompoundAccessSemantics(
@@ -2891,18 +2761,18 @@
                   : CompoundAccessKind.STATIC_GETTER_SETTER,
               abstractField.getter,
               abstractField.setter);
-          registry.registerStaticUse(
-              new StaticUse.staticGet(abstractField.getter));
-          registry.registerStaticUse(
-              new StaticUse.staticSet(abstractField.setter));
+          registry
+              .registerStaticUse(new StaticUse.staticGet(abstractField.getter));
+          registry
+              .registerStaticUse(new StaticUse.staticSet(abstractField.setter));
         }
       } else {
         // `a = b` where `a` has a setter.
         semantics = element.isTopLevel
             ? new StaticAccess.topLevelSetter(abstractField.setter)
             : new StaticAccess.staticSetter(abstractField.setter);
-        registry.registerStaticUse(
-            new StaticUse.staticSet(abstractField.setter));
+        registry
+            .registerStaticUse(new StaticUse.staticSet(abstractField.setter));
       }
     } else {
       MemberElement member = element;
@@ -2915,13 +2785,11 @@
       } else if (member.isFunction) {
         // `a = b`, `a++` or `a += b` where `a` is a function.
         ErroneousElement error = reportAndCreateErroneousElement(
-            node.selector, name.text,
-            MessageKind.ASSIGNING_METHOD, const {});
+            node.selector, name.text, MessageKind.ASSIGNING_METHOD, const {});
         registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
         if (node.isComplex) {
           // `a++` or `a += b` where `a` is a function.
-          registry.registerStaticUse(
-              new StaticUse.staticTearOff(element));
+          registry.registerStaticUse(new StaticUse.staticTearOff(element));
         }
         semantics = member.isTopLevel
             ? new StaticAccess.topLevelMethod(member)
@@ -2936,9 +2804,10 @@
         }
         if (member.isFinal || member.isConst) {
           ErroneousElement error = reportAndCreateErroneousElement(
-               node.selector, name.text,
-               MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER,
-               {'name': name});
+              node.selector,
+              name.text,
+              MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER,
+              {'name': name});
           registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
           semantics = member.isTopLevel
               ? new StaticAccess.finalTopLevelField(member)
@@ -2963,8 +2832,8 @@
       // This handles elements with parser errors.
       assert(invariant(node, element is! ErroneousElement,
           message: "Unexpected erroneous element $element."));
-      return handleErroneousAccess(node, name,
-          new StaticAccess.unresolved(element));
+      return handleErroneousAccess(
+          node, name, new StaticAccess.unresolved(element));
     }
     if (element.isInstanceMember) {
       if (inInstanceContext) {
@@ -3003,7 +2872,7 @@
       // This handles elements with parser errors..
       assert(invariant(node, element is! ErroneousElement,
           message: "Unexpected erroneous element $element."));
-      return handleUpdate(node, name,new StaticAccess.unresolved(element));
+      return handleUpdate(node, name, new StaticAccess.unresolved(element));
     }
     if (element.isInstanceMember) {
       if (inInstanceContext) {
@@ -3024,14 +2893,10 @@
     } else if (element.isPrefix) {
       // `p = b` where `p` is a prefix.
       ErroneousElement error = reportAndCreateErroneousElement(
-           node,
-           name.text,
-           MessageKind.PREFIX_AS_EXPRESSION,
-           {'prefix': name},
-           isError: true);
+          node, name.text, MessageKind.PREFIX_AS_EXPRESSION, {'prefix': name},
+          isError: true);
       registry.registerFeature(Feature.COMPILE_TIME_ERROR);
-      return handleUpdate(
-          node, name, new StaticAccess.invalid(error));
+      return handleUpdate(node, name, new StaticAccess.invalid(error));
     } else if (element.isLocal) {
       return handleLocalUpdate(node, name, element);
     } else if (element.isStatic || element.isTopLevel) {
@@ -3124,9 +2989,8 @@
   }
 
   // TODO(johnniwinther): Move this to the backend resolution callbacks.
-  void handleForeignCall(Send node,
-                         Element target,
-                         CallStructure callStructure) {
+  void handleForeignCall(
+      Send node, Element target, CallStructure callStructure) {
     if (target != null && compiler.backend.isForeign(target)) {
       registry.registerForeignCall(node, target, callStructure, this);
     }
@@ -3164,12 +3028,9 @@
       registry.setSelector(node, setterSelector);
       registry.setOperatorSelectorInComplexSendSet(node, operatorSelector);
 
-      registry.registerDynamicUse(
-          new DynamicUse(getterSelector, null));
-      registry.registerDynamicUse(
-          new DynamicUse(setterSelector, null));
-      registry.registerDynamicUse(
-          new DynamicUse(operatorSelector, null));
+      registry.registerDynamicUse(new DynamicUse(getterSelector, null));
+      registry.registerDynamicUse(new DynamicUse(setterSelector, null));
+      registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
 
       SendStructure sendStructure = node.isPrefix
           ? new IndexPrefixStructure(semantics, operator)
@@ -3188,8 +3049,7 @@
         // TODO(23998): Remove this when selectors are only accessed
         // through the send structure.
         registry.setSelector(node, setterSelector);
-        registry.registerDynamicUse(
-            new DynamicUse(setterSelector, null));
+        registry.registerDynamicUse(new DynamicUse(setterSelector, null));
 
         SendStructure sendStructure = new IndexSetStructure(semantics);
         registry.registerSendStructure(node, sendStructure);
@@ -3207,12 +3067,9 @@
         registry.setSelector(node, setterSelector);
         registry.setOperatorSelectorInComplexSendSet(node, operatorSelector);
 
-        registry.registerDynamicUse(
-            new DynamicUse(getterSelector, null));
-        registry.registerDynamicUse(
-            new DynamicUse(setterSelector, null));
-        registry.registerDynamicUse(
-            new DynamicUse(operatorSelector, null));
+        registry.registerDynamicUse(new DynamicUse(getterSelector, null));
+        registry.registerDynamicUse(new DynamicUse(setterSelector, null));
+        registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
 
         SendStructure sendStructure;
         if (operator.kind == AssignmentOperatorKind.IF_NULL) {
@@ -3251,17 +3108,16 @@
 
       if (semantics == null) {
         semantics = computeSuperAccessSemanticsForSelectors(
-            node, getterSelector, setterSelector, isIndex: true);
+            node, getterSelector, setterSelector,
+            isIndex: true);
 
         if (!semantics.getter.isError) {
-          registry.registerStaticUse(
-              new StaticUse.superInvoke(
-                  semantics.getter, getterSelector.callStructure));
+          registry.registerStaticUse(new StaticUse.superInvoke(
+              semantics.getter, getterSelector.callStructure));
         }
         if (!semantics.setter.isError) {
-          registry.registerStaticUse(
-              new StaticUse.superInvoke(
-                  semantics.setter, setterSelector.callStructure));
+          registry.registerStaticUse(new StaticUse.superInvoke(
+              semantics.setter, setterSelector.callStructure));
         }
 
         // TODO(23998): Remove these when elements are only accessed
@@ -3269,8 +3125,7 @@
         registry.useElement(node, semantics.setter);
         registry.useElement(node.selector, semantics.getter);
       }
-      registry.registerDynamicUse(
-          new DynamicUse(operatorSelector, null));
+      registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
 
       SendStructure sendStructure = node.isPrefix
           ? new IndexPrefixStructure(semantics, operator)
@@ -3298,9 +3153,8 @@
         // through the send structure.
         registry.setSelector(node, setterSelector);
         if (!semantics.setter.isError) {
-          registry.registerStaticUse(
-              new StaticUse.superInvoke(
-                  semantics.setter, setterSelector.callStructure));
+          registry.registerStaticUse(new StaticUse.superInvoke(
+              semantics.setter, setterSelector.callStructure));
         }
 
         SendStructure sendStructure = new IndexSetStructure(semantics);
@@ -3314,17 +3168,16 @@
             new Selector.binaryOperator(operator.selectorName);
         if (semantics == null) {
           semantics = computeSuperAccessSemanticsForSelectors(
-              node, getterSelector, setterSelector, isIndex: true);
+              node, getterSelector, setterSelector,
+              isIndex: true);
 
           if (!semantics.getter.isError) {
-            registry.registerStaticUse(
-                new StaticUse.superInvoke(
-                    semantics.getter, getterSelector.callStructure));
+            registry.registerStaticUse(new StaticUse.superInvoke(
+                semantics.getter, getterSelector.callStructure));
           }
           if (!semantics.setter.isError) {
-            registry.registerStaticUse(
-                new StaticUse.superInvoke(
-                    semantics.setter, setterSelector.callStructure));
+            registry.registerStaticUse(new StaticUse.superInvoke(
+                semantics.setter, setterSelector.callStructure));
           }
 
           // TODO(23998): Remove these when elements are only accessed
@@ -3339,8 +3192,7 @@
         registry.setSelector(node, setterSelector);
         registry.setOperatorSelectorInComplexSendSet(node, operatorSelector);
 
-        registry.registerDynamicUse(
-            new DynamicUse(operatorSelector, null));
+        registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
 
         SendStructure sendStructure;
         if (operator.kind == AssignmentOperatorKind.IF_NULL) {
@@ -3368,8 +3220,8 @@
     void registerStaticUses(AccessSemantics semantics) {
       switch (semantics.kind) {
         case AccessKind.SUPER_METHOD:
-          registry.registerStaticUse(
-              new StaticUse.superTearOff(semantics.element));
+          registry
+              .registerStaticUse(new StaticUse.superTearOff(semantics.element));
           break;
         case AccessKind.SUPER_GETTER:
           registry.registerStaticUse(new StaticUse.superGet(semantics.getter));
@@ -3379,29 +3231,27 @@
               new StaticUse.superSetterSet(semantics.setter));
           break;
         case AccessKind.SUPER_FIELD:
-          registry.registerStaticUse(
-              new StaticUse.superGet(semantics.element));
+          registry.registerStaticUse(new StaticUse.superGet(semantics.element));
           registry.registerStaticUse(
               new StaticUse.superFieldSet(semantics.element));
           break;
         case AccessKind.SUPER_FINAL_FIELD:
-          registry.registerStaticUse(
-              new StaticUse.superGet(semantics.element));
+          registry.registerStaticUse(new StaticUse.superGet(semantics.element));
           break;
         case AccessKind.COMPOUND:
           CompoundAccessSemantics compoundSemantics = semantics;
           switch (compoundSemantics.compoundAccessKind) {
             case CompoundAccessKind.SUPER_GETTER_FIELD:
             case CompoundAccessKind.SUPER_FIELD_FIELD:
-              registry.registerStaticUse(
-                  new StaticUse.superGet(semantics.getter));
+              registry
+                  .registerStaticUse(new StaticUse.superGet(semantics.getter));
               registry.registerStaticUse(
                   new StaticUse.superFieldSet(semantics.setter));
               break;
             case CompoundAccessKind.SUPER_FIELD_SETTER:
             case CompoundAccessKind.SUPER_GETTER_SETTER:
-              registry.registerStaticUse(
-                  new StaticUse.superGet(semantics.getter));
+              registry
+                  .registerStaticUse(new StaticUse.superGet(semantics.getter));
               registry.registerStaticUse(
                   new StaticUse.superSetterSet(semantics.setter));
               break;
@@ -3414,8 +3264,8 @@
                   new StaticUse.superSetterSet(semantics.setter));
               break;
             case CompoundAccessKind.UNRESOLVED_SUPER_SETTER:
-              registry.registerStaticUse(
-                  new StaticUse.superGet(semantics.getter));
+              registry
+                  .registerStaticUse(new StaticUse.superGet(semantics.getter));
               break;
             default:
               break;
@@ -3440,29 +3290,28 @@
       if (operator.kind == AssignmentOperatorKind.ASSIGN) {
         // `super.a = b`.
         if (semantics == null) {
-          semantics =
-              computeSuperAccessSemanticsForSelector(
-                  node, setterSelector, alternateName: name);
+          semantics = computeSuperAccessSemanticsForSelector(
+              node, setterSelector,
+              alternateName: name);
           switch (semantics.kind) {
             case AccessKind.SUPER_FINAL_FIELD:
               reporter.reportWarningMessage(
-                  node,
-                  MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER,
-                  {'name': name,
-                   'superclassName': semantics.setter.enclosingClass.name});
+                  node, MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER, {
+                'name': name,
+                'superclassName': semantics.setter.enclosingClass.name
+              });
               // TODO(johnniwinther): This shouldn't be needed.
-              registry.registerDynamicUse(
-                  new DynamicUse(setterSelector, null));
+              registry.registerDynamicUse(new DynamicUse(setterSelector, null));
               registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
               break;
             case AccessKind.SUPER_METHOD:
               reporter.reportWarningMessage(
-                  node, MessageKind.ASSIGNING_METHOD_IN_SUPER,
-                  {'name': name,
-                   'superclassName': semantics.setter.enclosingClass.name});
+                  node, MessageKind.ASSIGNING_METHOD_IN_SUPER, {
+                'name': name,
+                'superclassName': semantics.setter.enclosingClass.name
+              });
               // TODO(johnniwinther): This shouldn't be needed.
-              registry.registerDynamicUse(
-                  new DynamicUse(setterSelector, null));
+              registry.registerDynamicUse(new DynamicUse(setterSelector, null));
               registry.registerFeature(Feature.SUPER_NO_SUCH_METHOD);
               break;
             case AccessKind.SUPER_FIELD:
@@ -3493,9 +3342,7 @@
   /// Handle update of an entity defined by [semantics]. For instance `a = b`,
   /// `a++` or `a += b` where [semantics] describe `a`.
   ResolutionResult handleUpdate(
-      SendSet node,
-      Name name,
-      AccessSemantics semantics) {
+      SendSet node, Name name, AccessSemantics semantics) {
     SendStructure sendStructure;
     String operatorText = node.assignmentOperator.source;
     Selector getterSelector = new Selector.getter(name);
@@ -3517,8 +3364,7 @@
       registry.useElement(node, semantics.setter);
       registry.useElement(node.selector, semantics.getter);
 
-      registry.registerDynamicUse(
-          new DynamicUse(operatorSelector, null));
+      registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
 
       SendStructure sendStructure = node.isPrefix
           ? new PrefixStructure(semantics, operator)
@@ -3559,8 +3405,7 @@
         registry.setSelector(node, setterSelector);
         registry.setOperatorSelectorInComplexSendSet(node, operatorSelector);
 
-        registry.registerDynamicUse(
-            new DynamicUse(operatorSelector, null));
+        registry.registerDynamicUse(new DynamicUse(operatorSelector, null));
 
         SendStructure sendStructure;
         if (operator.kind == AssignmentOperatorKind.IF_NULL) {
@@ -3641,9 +3486,7 @@
     registry.registerConstSymbol(name);
     if (!validateSymbol(node, name, reportError: false)) {
       reporter.reportErrorMessage(
-          node,
-          MessageKind.UNSUPPORTED_LITERAL_SYMBOL,
-          {'value': name});
+          node, MessageKind.UNSUPPORTED_LITERAL_SYMBOL, {'value': name});
     }
     analyzeConstantDeferred(node);
     ConstantExpression constant = new SymbolConstantExpression(name);
@@ -3673,8 +3516,7 @@
 
   ResolutionResult visitRethrow(Rethrow node) {
     if (!inCatchBlock && node.throwToken.stringValue == 'rethrow') {
-      reporter.reportErrorMessage(
-          node, MessageKind.RETHROW_OUTSIDE_CATCH);
+      reporter.reportErrorMessage(node, MessageKind.RETHROW_OUTSIDE_CATCH);
     }
     return const NoneResult();
   }
@@ -3687,12 +3529,9 @@
         // `return e;` appears in a generative constructor.  (Dart Language
         // Specification 13.12.)
         reporter.reportErrorMessage(
-            expression,
-            MessageKind.RETURN_IN_GENERATIVE_CONSTRUCTOR);
+            expression, MessageKind.RETURN_IN_GENERATIVE_CONSTRUCTOR);
       } else if (!node.isArrowBody && currentAsyncMarker.isYielding) {
-        reporter.reportErrorMessage(
-            node,
-            MessageKind.RETURN_IN_GENERATOR,
+        reporter.reportErrorMessage(node, MessageKind.RETURN_IN_GENERATOR,
             {'modifier': currentAsyncMarker});
       }
     }
@@ -3724,8 +3563,8 @@
     ConstructorElementX constructor = enclosingElement;
     bool isConstConstructor = constructor.isConst;
     bool isValidAsConstant = isConstConstructor;
-    ConstructorResult result = resolveRedirectingFactory(
-        node, inConstContext: isConstConstructor);
+    ConstructorResult result =
+        resolveRedirectingFactory(node, inConstContext: isConstConstructor);
     ConstructorElement redirectionTarget = result.element;
     constructor.immediateRedirectionTarget = redirectionTarget;
 
@@ -3749,18 +3588,16 @@
       case ConstructorResultKind.UNRESOLVED_CONSTRUCTOR:
       case ConstructorResultKind.NON_CONSTANT:
         isValidAsConstant = false;
-        constructor.setEffectiveTarget(
-            result.element, result.type, isMalformed: true);
+        constructor.setEffectiveTarget(result.element, result.type,
+            isMalformed: true);
         break;
     }
     if (Elements.isUnresolved(redirectionTarget)) {
       registry.registerFeature(Feature.THROW_NO_SUCH_METHOD);
       return const NoneResult();
     } else {
-      if (isConstConstructor &&
-          !redirectionTarget.isConst) {
-        reporter.reportErrorMessage(
-            node, MessageKind.CONSTRUCTOR_IS_NOT_CONST);
+      if (isConstConstructor && !redirectionTarget.isConst) {
+        reporter.reportErrorMessage(node, MessageKind.CONSTRUCTOR_IS_NOT_CONST);
         isValidAsConstant = false;
       }
       if (redirectionTarget == constructor) {
@@ -3776,16 +3613,14 @@
     // redirecting constructor.
     ClassElement targetClass = redirectionTarget.enclosingClass;
     InterfaceType type = registry.getType(node);
-    FunctionType targetConstructorType =
-        redirectionTarget.computeType(resolution)
-            .subst(type.typeArguments, targetClass.typeVariables);
+    FunctionType targetConstructorType = redirectionTarget
+        .computeType(resolution)
+        .subst(type.typeArguments, targetClass.typeVariables);
     FunctionType constructorType = constructor.computeType(resolution);
-    bool isSubtype = compiler.types.isSubtype(
-        targetConstructorType, constructorType);
+    bool isSubtype =
+        compiler.types.isSubtype(targetConstructorType, constructorType);
     if (!isSubtype) {
-      reporter.reportWarningMessage(
-          node,
-          MessageKind.NOT_ASSIGNABLE,
+      reporter.reportWarningMessage(node, MessageKind.NOT_ASSIGNABLE,
           {'fromType': targetConstructorType, 'toType': constructorType});
       // TODO(johnniwinther): Handle this (potentially) erroneous case.
       isValidAsConstant = false;
@@ -3805,9 +3640,9 @@
         new StaticUse.constructorRedirect(redirectionTarget));
     // TODO(johnniwinther): Register the effective target type as part of the
     // static use instead.
-    registry.registerTypeUse(new TypeUse.instantiation(
-        redirectionTarget.enclosingClass.thisType
-            .subst(type.typeArguments, targetClass.typeVariables)));
+    registry.registerTypeUse(new TypeUse.instantiation(redirectionTarget
+        .enclosingClass.thisType
+        .subst(type.typeArguments, targetClass.typeVariables)));
     if (enclosingElement == compiler.symbolConstructor) {
       registry.registerFeature(Feature.SYMBOL_CONSTRUCTOR);
     }
@@ -3830,10 +3665,7 @@
       constructor.constantConstructor =
           new RedirectingFactoryConstantConstructor(
               new ConstructedConstantExpression(
-                  type,
-                  redirectionTarget,
-                  callStructure,
-                  arguments));
+                  type, redirectionTarget, callStructure, arguments));
     }
     return const NoneResult();
   }
@@ -3868,16 +3700,15 @@
     void reportExtraModifier(String modifier) {
       Node modifierNode;
       for (Link<Node> nodes = modifiers.nodes.nodes;
-           !nodes.isEmpty;
-           nodes = nodes.tail) {
+          !nodes.isEmpty;
+          nodes = nodes.tail) {
         if (modifier == nodes.head.asIdentifier().source) {
           modifierNode = nodes.head;
           break;
         }
       }
       assert(modifierNode != null);
-      reporter.reportErrorMessage(
-          modifierNode, MessageKind.EXTRANEOUS_MODIFIER,
+      reporter.reportErrorMessage(modifierNode, MessageKind.EXTRANEOUS_MODIFIER,
           {'modifier': modifier});
     }
     if (modifiers.isFinal && (modifiers.isConst || modifiers.isVar)) {
@@ -3912,8 +3743,7 @@
     bool oldSendIsMemberAccess = sendIsMemberAccess;
     sendIsMemberAccess = false;
     var oldCategory = allowedCategory;
-    allowedCategory =
-        ElementCategory.VARIABLE |
+    allowedCategory = ElementCategory.VARIABLE |
         ElementCategory.FUNCTION |
         ElementCategory.IMPLIES_TYPE;
     ResolutionResult result = visit(node.expression);
@@ -3983,7 +3813,8 @@
         break;
       case ConstructorResultKind.UNRESOLVED_CONSTRUCTOR:
         // TODO(johnniwinther): Unify codepaths to only have one return.
-        registry.registerNewStructure(node,
+        registry.registerNewStructure(
+            node,
             new NewInvokeStructure(
                 new ConstructorAccessSemantics(
                     ConstructorAccessKind.UNRESOLVED_CONSTRUCTOR,
@@ -3992,7 +3823,8 @@
                 selector));
         return new ResolutionResult.forElement(constructor);
       case ConstructorResultKind.NON_CONSTANT:
-        registry.registerNewStructure(node,
+        registry.registerNewStructure(
+            node,
             new NewInvokeStructure(
                 new ConstructorAccessSemantics(
                     ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR,
@@ -4005,29 +3837,26 @@
     if (!isInvalid) {
       // [constructor] might be the implementation element
       // and only declaration elements may be registered.
-      registry.registerStaticUse(
-          new StaticUse.constructorInvoke(
-              constructor.declaration, callStructure));
+      registry.registerStaticUse(new StaticUse.constructorInvoke(
+          constructor.declaration, callStructure));
       // TODO(johniwinther): Avoid registration of `type` in face of redirecting
       // factory constructors.
       registry.registerTypeUse(new TypeUse.instantiation(type));
     }
 
+    ResolutionResult resolutionResult = const NoneResult();
     if (node.isConst) {
       bool isValidAsConstant = !isInvalid && constructor.isConst;
 
       if (constructor == compiler.symbolConstructor) {
         Node argumentNode = node.send.arguments.head;
-        ConstantExpression constant =
-            compiler.resolver.constantCompiler.compileNode(
-                argumentNode, registry.mapping);
+        ConstantExpression constant = compiler.resolver.constantCompiler
+            .compileNode(argumentNode, registry.mapping);
         ConstantValue name = compiler.constants.getConstantValue(constant);
         if (!name.isString) {
           DartType type = name.getType(coreTypes);
           reporter.reportErrorMessage(
-              argumentNode,
-              MessageKind.STRING_EXPECTED,
-              {'type': type});
+              argumentNode, MessageKind.STRING_EXPECTED, {'type': type});
         } else {
           StringConstantValue stringConstant = name;
           String nameString = stringConstant.toDartString().slowToString();
@@ -4043,8 +3872,7 @@
 
       if (type.containsTypeVariables) {
         reporter.reportErrorMessage(
-            node.send.selector,
-            MessageKind.TYPE_VARIABLE_IN_CONSTANT);
+            node.send.selector, MessageKind.TYPE_VARIABLE_IN_CONSTANT);
         isValidAsConstant = false;
         isInvalid = true;
       }
@@ -4053,6 +3881,11 @@
         isValidAsConstant = false;
       }
 
+      // Callback hook for when the compile-time constant evaluator has
+      // analyzed the constant.
+      // TODO(johnniwinther): Remove this when all constants are computed
+      // in resolution.
+      Function onAnalyzed;
       if (isValidAsConstant &&
           argumentsResult.isValidAsConstant &&
           // TODO(johnniwinther): Remove this when all constants are computed
@@ -4063,46 +3896,51 @@
 
         ConstructedConstantExpression constant =
             new ConstructedConstantExpression(
-                type,
-                constructor,
-                callStructure,
-                arguments);
+                type, constructor, callStructure, arguments);
         registry.registerNewStructure(node,
             new ConstInvokeStructure(ConstantInvokeKind.CONSTRUCTED, constant));
-        return new ConstantResult(node, constant);
+        resolutionResult = new ConstantResult(node, constant);
       } else if (isInvalid) {
         // Known to be non-constant.
         kind == ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR;
-        registry.registerNewStructure(node,
+        registry.registerNewStructure(
+            node,
             new NewInvokeStructure(
                 new ConstructorAccessSemantics(kind, constructor, type),
                 selector));
       } else {
         // Might be valid but we don't know for sure. The compile-time constant
         // evaluator will compute the actual constant as a deferred action.
-        registry.registerNewStructure(node,
-            new LateConstInvokeStructure(registry.mapping));
+        LateConstInvokeStructure structure =
+            new LateConstInvokeStructure(registry.mapping);
+        // TODO(johnniwinther): Avoid registering the
+        // [LateConstInvokeStructure]; it might not be necessary.
+        registry.registerNewStructure(node, structure);
+        onAnalyzed = () {
+          registry.registerNewStructure(node, structure.resolve(node));
+        };
       }
 
+      analyzeConstantDeferred(node, onAnalyzed: onAnalyzed);
     } else {
       // Not constant.
       if (constructor == compiler.symbolConstructor &&
           !compiler.mirrorUsageAnalyzerTask.hasMirrorUsage(enclosingElement)) {
-          reporter.reportHintMessage(
-              node.newToken, MessageKind.NON_CONST_BLOAT,
-              {'name': coreClasses.symbolClass.name});
+        reporter.reportHintMessage(node.newToken, MessageKind.NON_CONST_BLOAT,
+            {'name': coreClasses.symbolClass.name});
       }
-      registry.registerNewStructure(node,
+      registry.registerNewStructure(
+          node,
           new NewInvokeStructure(
               new ConstructorAccessSemantics(kind, constructor, type),
               selector));
     }
 
-    return const NoneResult();
+    return resolutionResult;
   }
 
-  void checkConstMapKeysDontOverrideEquals(Spannable spannable,
-                                           MapConstantValue map) {
+  void checkConstMapKeysDontOverrideEquals(
+      Spannable spannable, MapConstantValue map) {
     for (ConstantValue key in map.keys) {
       if (!key.isObject) continue;
       ObjectConstantValue objectConstant = key;
@@ -4111,18 +3949,15 @@
       if (cls == coreClasses.stringClass) continue;
       Element equals = cls.lookupMember('==');
       if (equals.enclosingClass != coreClasses.objectClass) {
-        reporter.reportErrorMessage(
-            spannable,
-            MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS,
-            {'type': keyType});
+        reporter.reportErrorMessage(spannable,
+            MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS, {'type': keyType});
       }
     }
   }
 
   void analyzeConstant(Node node, {enforceConst: true}) {
-    ConstantExpression constant =
-        compiler.resolver.constantCompiler.compileNode(
-            node, registry.mapping, enforceConst: enforceConst);
+    ConstantExpression constant = compiler.resolver.constantCompiler
+        .compileNode(node, registry.mapping, enforceConst: enforceConst);
 
     if (constant == null) {
       assert(invariant(node, compiler.compilationFailed));
@@ -4135,9 +3970,13 @@
     }
   }
 
-  void analyzeConstantDeferred(Node node, {bool enforceConst: true}) {
+  void analyzeConstantDeferred(Node node,
+      {bool enforceConst: true, void onAnalyzed()}) {
     addDeferredAction(enclosingElement, () {
       analyzeConstant(node, enforceConst: enforceConst);
+      if (onAnalyzed != null) {
+        onAnalyzed();
+      }
     });
   }
 
@@ -4166,21 +4005,20 @@
    * [:null:], if there is no corresponding constructor, class or library.
    */
   ConstructorResult resolveConstructor(NewExpression node) {
-    return node.accept(new ConstructorResolver(
-        compiler, this, inConstContext: node.isConst));
+    return node.accept(
+        new ConstructorResolver(compiler, this, inConstContext: node.isConst));
   }
 
   ConstructorResult resolveRedirectingFactory(RedirectingFactoryBody node,
-                                               {bool inConstContext: false}) {
-    return node.accept(new ConstructorResolver(
-        compiler, this, inConstContext: inConstContext));
+      {bool inConstContext: false}) {
+    return node.accept(new ConstructorResolver(compiler, this,
+        inConstContext: inConstContext));
   }
 
   DartType resolveTypeAnnotation(TypeAnnotation node,
-                                 {bool malformedIsError: false,
-                                  bool deferredIsMalformed: true}) {
-    DartType type = typeResolver.resolveTypeAnnotation(
-        this, node, malformedIsError: malformedIsError,
+      {bool malformedIsError: false, bool deferredIsMalformed: true}) {
+    DartType type = typeResolver.resolveTypeAnnotation(this, node,
+        malformedIsError: malformedIsError,
         deferredIsMalformed: deferredIsMalformed);
     if (inCheckContext) {
       registry.registerTypeUse(new TypeUse.checkedModeCheck(type));
@@ -4214,19 +4052,15 @@
     if (typeArgument != null) {
       if (node.isConst && typeArgument.containsTypeVariables) {
         reporter.reportErrorMessage(
-            arguments.nodes.head,
-            MessageKind.TYPE_VARIABLE_IN_CONSTANT);
+            arguments.nodes.head, MessageKind.TYPE_VARIABLE_IN_CONSTANT);
         isValidAsConstant = false;
       }
       listType = coreTypes.listType(typeArgument);
     } else {
       listType = coreTypes.listType();
     }
-    registry.registerLiteralList(
-        node,
-        listType,
-        isConstant: node.isConst,
-        isEmpty: node.elements.isEmpty);
+    registry.registerLiteralList(node, listType,
+        isConstant: node.isConst, isEmpty: node.elements.isEmpty);
     if (node.isConst) {
       List<ConstantExpression> constantExpressions = <ConstantExpression>[];
       inConstantContext(() {
@@ -4252,22 +4086,19 @@
       sendIsMemberAccess = false;
     }
     return const NoneResult();
-
   }
 
   ResolutionResult visitConditional(Conditional node) {
     ResolutionResult conditionResult =
         doInPromotionScope(node.condition, () => visit(node.condition));
-    ResolutionResult thenResult =
-        doInPromotionScope(node.thenExpression, () => visit(node.thenExpression));
+    ResolutionResult thenResult = doInPromotionScope(
+        node.thenExpression, () => visit(node.thenExpression));
     ResolutionResult elseResult = visit(node.elseExpression);
     if (conditionResult.isConstant &&
         thenResult.isConstant &&
         elseResult.isConstant) {
       ConstantExpression constant = new ConditionalConstantExpression(
-          conditionResult.constant,
-          thenResult.constant,
-          elseResult.constant);
+          conditionResult.constant, thenResult.constant, elseResult.constant);
       registry.setConstant(node, constant);
       return new ConstantResult(node, constant);
     }
@@ -4312,8 +4143,7 @@
     if (node.target == null) {
       target = statementScope.currentBreakTarget();
       if (target == null) {
-        reporter.reportErrorMessage(
-            node, MessageKind.NO_BREAK_TARGET);
+        reporter.reportErrorMessage(node, MessageKind.NO_BREAK_TARGET);
         return const NoneResult();
       }
       target.isBreakTarget = true;
@@ -4327,8 +4157,7 @@
       }
       target = label.target;
       if (!target.statement.isValidBreakTarget()) {
-        reporter.reportErrorMessage(
-            node.target, MessageKind.INVALID_BREAK);
+        reporter.reportErrorMessage(node.target, MessageKind.INVALID_BREAK);
         return const NoneResult();
       }
       label.setBreakTarget();
@@ -4343,8 +4172,7 @@
     if (node.target == null) {
       target = statementScope.currentContinueTarget();
       if (target == null) {
-        reporter.reportErrorMessage(
-            node, MessageKind.NO_CONTINUE_TARGET);
+        reporter.reportErrorMessage(node, MessageKind.NO_CONTINUE_TARGET);
         return const NoneResult();
       }
       target.isContinueTarget = true;
@@ -4358,8 +4186,7 @@
       }
       target = label.target;
       if (!target.statement.isValidContinueTarget()) {
-        reporter.reportErrorMessage(
-            node.target, MessageKind.INVALID_CONTINUE);
+        reporter.reportErrorMessage(node.target, MessageKind.INVALID_CONTINUE);
       }
       label.setContinueTarget();
       registry.useLabel(node, label);
@@ -4378,10 +4205,8 @@
           node.awaitToken, MessageKind.INVALID_AWAIT_FOR_IN);
     }
     registry.registerFeature(Feature.ASYNC_FOR_IN);
-    registry.registerDynamicUse(
-        new DynamicUse(Selectors.current, null));
-    registry.registerDynamicUse(
-        new DynamicUse(Selectors.moveNext, null));
+    registry.registerDynamicUse(new DynamicUse(Selectors.current, null));
+    registry.registerDynamicUse(new DynamicUse(Selectors.moveNext, null));
 
     visit(node.expression);
 
@@ -4393,12 +4218,9 @@
 
   ResolutionResult visitSyncForIn(SyncForIn node) {
     registry.registerFeature(Feature.SYNC_FOR_IN);
-    registry.registerDynamicUse(
-        new DynamicUse(Selectors.iterator, null));
-    registry.registerDynamicUse(
-        new DynamicUse(Selectors.current, null));
-    registry.registerDynamicUse(
-        new DynamicUse(Selectors.moveNext, null));
+    registry.registerDynamicUse(new DynamicUse(Selectors.iterator, null));
+    registry.registerDynamicUse(new DynamicUse(Selectors.current, null));
+    registry.registerDynamicUse(new DynamicUse(Selectors.moveNext, null));
 
     visit(node.expression);
 
@@ -4409,9 +4231,7 @@
   }
 
   void visitForInDeclaredIdentifierIn(
-      Node declaration,
-      ForIn node,
-      Scope blockScope) {
+      Node declaration, ForIn node, Scope blockScope) {
     LibraryElement library = enclosingElement.library;
 
     bool oldAllowFinalWithoutInitializer = inLoopVariable;
@@ -4428,15 +4248,13 @@
       loopVariable = registry.getDefinition(send);
       Identifier identifier = send.selector.asIdentifier();
       if (identifier == null) {
-        reporter.reportErrorMessage(
-            send.selector, MessageKind.INVALID_FOR_IN);
+        reporter.reportErrorMessage(send.selector, MessageKind.INVALID_FOR_IN);
       } else {
-        loopVariableSelector = new Selector.setter(
-            new Name(identifier.source, library));
+        loopVariableSelector =
+            new Selector.setter(new Name(identifier.source, library));
       }
       if (send.receiver != null) {
-        reporter.reportErrorMessage(
-            send.receiver, MessageKind.INVALID_FOR_IN);
+        reporter.reportErrorMessage(send.receiver, MessageKind.INVALID_FOR_IN);
       }
     } else if (variableDefinitions != null) {
       Link<Node> nodes = variableDefinitions.definitions.nodes;
@@ -4447,22 +4265,19 @@
       Node first = nodes.head;
       Identifier identifier = first.asIdentifier();
       if (identifier == null) {
-        reporter.reportErrorMessage(
-            first, MessageKind.INVALID_FOR_IN);
+        reporter.reportErrorMessage(first, MessageKind.INVALID_FOR_IN);
       } else {
-        loopVariableSelector = new Selector.setter(
-            new Name(identifier.source, library));
+        loopVariableSelector =
+            new Selector.setter(new Name(identifier.source, library));
         loopVariable = registry.getDefinition(identifier);
       }
     } else {
-      reporter.reportErrorMessage(
-          declaration, MessageKind.INVALID_FOR_IN);
+      reporter.reportErrorMessage(declaration, MessageKind.INVALID_FOR_IN);
     }
     if (loopVariableSelector != null) {
       registry.setSelector(declaration, loopVariableSelector);
       if (loopVariable == null || loopVariable.isInstanceMember) {
-        registry.registerDynamicUse(
-            new DynamicUse(loopVariableSelector, null));
+        registry.registerDynamicUse(new DynamicUse(loopVariableSelector, null));
       } else if (loopVariable.isStatic || loopVariable.isTopLevel) {
         registry.registerStaticUse(
             new StaticUse.staticSet(loopVariable.declaration));
@@ -4499,9 +4314,7 @@
         registry.defineLabel(element.label, element);
       } else {
         reporter.reportWarningMessage(
-            element.label,
-            MessageKind.UNUSED_LABEL,
-            {'labelName': labelName});
+            element.label, MessageKind.UNUSED_LABEL, {'labelName': labelName});
       }
     });
     if (!targetElement.isTarget) {
@@ -4548,15 +4361,11 @@
     }
     if (node.isConst && mapType.containsTypeVariables) {
       reporter.reportErrorMessage(
-          arguments,
-          MessageKind.TYPE_VARIABLE_IN_CONSTANT);
+          arguments, MessageKind.TYPE_VARIABLE_IN_CONSTANT);
       isValidAsConstant = false;
     }
-    registry.registerMapLiteral(
-        node,
-        mapType,
-        isConstant: node.isConst,
-        isEmpty: node.entries.isEmpty);
+    registry.registerMapLiteral(node, mapType,
+        isConstant: node.isConst, isEmpty: node.entries.isEmpty);
 
     if (node.isConst) {
       List<ConstantExpression> keyExpressions = <ConstantExpression>[];
@@ -4624,8 +4433,8 @@
     List<DiagnosticMessage> infos = <DiagnosticMessage>[];
 
     for (Link<Node> cases = node.cases.nodes;
-         !cases.isEmpty;
-         cases = cases.tail) {
+        !cases.isEmpty;
+        cases = cases.tail) {
       SwitchCase switchCase = cases.head;
 
       for (Node labelOrCase in switchCase.labelsAndCases) {
@@ -4639,7 +4448,7 @@
             message: 'No constant computed for $node'));
 
         ConstantValue value = compiler.constants.getConstantValue(constant);
-        DartType caseType = value.getType(coreTypes);//typeOfConstant(value);
+        DartType caseType = value.getType(coreTypes); //typeOfConstant(value);
 
         if (firstCaseType == null) {
           firstCase = caseMatch;
@@ -4654,8 +4463,7 @@
                 {'type': "double"});
           } else if (caseType == coreTypes.functionType) {
             reporter.reportErrorMessage(
-                node, MessageKind.SWITCH_CASE_FORBIDDEN,
-                {'type': "Function"});
+                node, MessageKind.SWITCH_CASE_FORBIDDEN, {'type': "Function"});
           } else if (value.isObject && overridesEquals(caseType)) {
             reporter.reportErrorMessage(
                 firstCase.expression,
@@ -4709,29 +4517,21 @@
           // It's an error if the same label occurs twice in the same switch.
           reporter.reportError(
               reporter.createMessage(
-                  label,
-                  MessageKind.DUPLICATE_LABEL,
-                  {'labelName': labelName}),
+                  label, MessageKind.DUPLICATE_LABEL, {'labelName': labelName}),
               <DiagnosticMessage>[
-                  reporter.createMessage(
-                    existingElement.label,
-                    MessageKind.EXISTING_LABEL,
-                    {'labelName': labelName}),
+                reporter.createMessage(existingElement.label,
+                    MessageKind.EXISTING_LABEL, {'labelName': labelName}),
               ]);
         } else {
           // It's only a warning if it shadows another label.
           existingElement = statementScope.lookupLabel(labelName);
           if (existingElement != null) {
             reporter.reportWarning(
-                reporter.createMessage(
-                    label,
-                    MessageKind.DUPLICATE_LABEL,
+                reporter.createMessage(label, MessageKind.DUPLICATE_LABEL,
                     {'labelName': labelName}),
                 <DiagnosticMessage>[
-                    reporter.createMessage(
-                        existingElement.label,
-                        MessageKind.EXISTING_LABEL,
-                        {'labelName': labelName}),
+                  reporter.createMessage(existingElement.label,
+                      MessageKind.EXISTING_LABEL, {'labelName': labelName}),
                 ]);
           }
         }
@@ -4807,8 +4607,7 @@
     if (node.formals != null) {
       Link<Node> formalsToProcess = node.formals.nodes;
       if (formalsToProcess.isEmpty) {
-        reporter.reportErrorMessage(
-            node, MessageKind.EMPTY_CATCH_DECLARATION);
+        reporter.reportErrorMessage(node, MessageKind.EMPTY_CATCH_DECLARATION);
       } else {
         exceptionDefinition = formalsToProcess.head.asVariableDefinitions();
         formalsToProcess = formalsToProcess.tail;
@@ -4828,8 +4627,8 @@
       // Check that the formals aren't optional and that they have no
       // modifiers or type.
       for (Link<Node> link = node.formals.nodes;
-           !link.isEmpty;
-           link = link.tail) {
+          !link.isEmpty;
+          link = link.tail) {
         // If the formal parameter is a node list, it means that it is a
         // sequence of optional parameters.
         NodeList nodeList = link.head.asNodeList();
@@ -4881,7 +4680,7 @@
 }
 
 /// Looks up [name] in [scope] and unwraps the result.
-Element lookupInScope(DiagnosticReporter reporter, Node node,
-                      Scope scope, String name) {
+Element lookupInScope(
+    DiagnosticReporter reporter, Node node, Scope scope, String name) {
   return Elements.unwrap(scope.lookup(name), reporter, node);
 }
diff --git a/pkg/compiler/lib/src/resolution/operators.dart b/pkg/compiler/lib/src/resolution/operators.dart
index 6486262..06fd468 100644
--- a/pkg/compiler/lib/src/resolution/operators.dart
+++ b/pkg/compiler/lib/src/resolution/operators.dart
@@ -5,17 +5,10 @@
 library dart2js.operators;
 
 import '../elements/elements.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector,
-    SelectorKind;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector, SelectorKind;
 
-enum UnaryOperatorKind {
-  NOT,
-  NEGATE,
-  COMPLEMENT,
-}
+enum UnaryOperatorKind { NOT, NEGATE, COMPLEMENT, }
 
 class UnaryOperator {
   final UnaryOperatorKind kind;
@@ -26,10 +19,8 @@
 
   bool get isUserDefinable => selectorName != null;
 
-  Selector get selector => new Selector(
-      SelectorKind.OPERATOR,
-      new PublicName(selectorName),
-      CallStructure.NO_ARGS);
+  Selector get selector => new Selector(SelectorKind.OPERATOR,
+      new PublicName(selectorName), CallStructure.NO_ARGS);
 
   String toString() => name;
 
@@ -47,18 +38,25 @@
 
   static UnaryOperator parse(String value) {
     switch (value) {
-      case '!': return NOT;
-      case '-': return NEGATE;
-      case '~': return COMPLEMENT;
-      default: return null;
+      case '!':
+        return NOT;
+      case '-':
+        return NEGATE;
+      case '~':
+        return COMPLEMENT;
+      default:
+        return null;
     }
   }
 
   static UnaryOperator fromKind(UnaryOperatorKind kind) {
     switch (kind) {
-      case UnaryOperatorKind.NOT: return NOT;
-      case UnaryOperatorKind.NEGATE: return NEGATE;
-      case UnaryOperatorKind.COMPLEMENT: return COMPLEMENT;
+      case UnaryOperatorKind.NOT:
+        return NOT;
+      case UnaryOperatorKind.NEGATE:
+        return NEGATE;
+      case UnaryOperatorKind.COMPLEMENT:
+        return COMPLEMENT;
     }
   }
 }
@@ -186,54 +184,97 @@
 
   static BinaryOperator parse(String value) {
     switch (value) {
-      case '==': return EQ;
-      case '!=': return NOT_EQ;
-      case '[]': return INDEX;
-      case '*': return MUL;
-      case '/': return DIV;
-      case '%': return MOD;
-      case '~/': return IDIV;
-      case '+': return ADD;
-      case '-': return SUB;
-      case '<<': return SHL;
-      case '>>': return SHR;
-      case '>=': return GTEQ;
-      case '>': return GT;
-      case '<=': return LTEQ;
-      case '<': return LT;
-      case '&': return AND;
-      case '^': return XOR;
-      case '|': return OR;
-      case '&&': return LOGICAL_AND;
-      case '||': return LOGICAL_OR;
-      case '??': return IF_NULL;
-      default: return null;
+      case '==':
+        return EQ;
+      case '!=':
+        return NOT_EQ;
+      case '[]':
+        return INDEX;
+      case '*':
+        return MUL;
+      case '/':
+        return DIV;
+      case '%':
+        return MOD;
+      case '~/':
+        return IDIV;
+      case '+':
+        return ADD;
+      case '-':
+        return SUB;
+      case '<<':
+        return SHL;
+      case '>>':
+        return SHR;
+      case '>=':
+        return GTEQ;
+      case '>':
+        return GT;
+      case '<=':
+        return LTEQ;
+      case '<':
+        return LT;
+      case '&':
+        return AND;
+      case '^':
+        return XOR;
+      case '|':
+        return OR;
+      case '&&':
+        return LOGICAL_AND;
+      case '||':
+        return LOGICAL_OR;
+      case '??':
+        return IF_NULL;
+      default:
+        return null;
     }
   }
 
   static BinaryOperator fromKind(BinaryOperatorKind kind) {
     switch (kind) {
-      case BinaryOperatorKind.EQ: return EQ;
-      case BinaryOperatorKind.NOT_EQ: return NOT_EQ;
-      case BinaryOperatorKind.INDEX: return INDEX;
-      case BinaryOperatorKind.MUL: return MUL;
-      case BinaryOperatorKind.DIV: return DIV;
-      case BinaryOperatorKind.MOD: return MOD;
-      case BinaryOperatorKind.IDIV: return IDIV;
-      case BinaryOperatorKind.ADD: return ADD;
-      case BinaryOperatorKind.SUB: return SUB;
-      case BinaryOperatorKind.SHL: return SHL;
-      case BinaryOperatorKind.SHR: return SHR;
-      case BinaryOperatorKind.GTEQ: return GTEQ;
-      case BinaryOperatorKind.GT: return GT;
-      case BinaryOperatorKind.LTEQ: return LTEQ;
-      case BinaryOperatorKind.LT: return LT;
-      case BinaryOperatorKind.AND: return AND;
-      case BinaryOperatorKind.XOR: return XOR;
-      case BinaryOperatorKind.OR: return OR;
-      case BinaryOperatorKind.LOGICAL_AND: return LOGICAL_AND;
-      case BinaryOperatorKind.LOGICAL_OR: return LOGICAL_OR;
-      case BinaryOperatorKind.IF_NULL: return IF_NULL;
+      case BinaryOperatorKind.EQ:
+        return EQ;
+      case BinaryOperatorKind.NOT_EQ:
+        return NOT_EQ;
+      case BinaryOperatorKind.INDEX:
+        return INDEX;
+      case BinaryOperatorKind.MUL:
+        return MUL;
+      case BinaryOperatorKind.DIV:
+        return DIV;
+      case BinaryOperatorKind.MOD:
+        return MOD;
+      case BinaryOperatorKind.IDIV:
+        return IDIV;
+      case BinaryOperatorKind.ADD:
+        return ADD;
+      case BinaryOperatorKind.SUB:
+        return SUB;
+      case BinaryOperatorKind.SHL:
+        return SHL;
+      case BinaryOperatorKind.SHR:
+        return SHR;
+      case BinaryOperatorKind.GTEQ:
+        return GTEQ;
+      case BinaryOperatorKind.GT:
+        return GT;
+      case BinaryOperatorKind.LTEQ:
+        return LTEQ;
+      case BinaryOperatorKind.LT:
+        return LT;
+      case BinaryOperatorKind.AND:
+        return AND;
+      case BinaryOperatorKind.XOR:
+        return XOR;
+      case BinaryOperatorKind.OR:
+        return OR;
+      case BinaryOperatorKind.LOGICAL_AND:
+        return LOGICAL_AND;
+      case BinaryOperatorKind.LOGICAL_OR:
+        return LOGICAL_OR;
+      case BinaryOperatorKind.IF_NULL:
+        return IF_NULL;
     }
   }
 }
@@ -292,104 +333,121 @@
   final bool isUserDefinable;
 
   const AssignmentOperator._(this.kind, this.name, this.binaryOperator,
-                             {this.isUserDefinable: true});
+      {this.isUserDefinable: true});
 
   String get selectorName {
-    return binaryOperator != null ? binaryOperator.selectorName: null;
+    return binaryOperator != null ? binaryOperator.selectorName : null;
   }
 
   String toString() => name;
 
   /// The = operator.
-  static const AssignmentOperator ASSIGN =
-      const AssignmentOperator._(AssignmentOperatorKind.ASSIGN, '=',
-                                 null, isUserDefinable: false);
+  static const AssignmentOperator ASSIGN = const AssignmentOperator._(
+      AssignmentOperatorKind.ASSIGN, '=', null,
+      isUserDefinable: false);
 
   /// The ??= operator.
-  static const AssignmentOperator IF_NULL =
-      const AssignmentOperator._(AssignmentOperatorKind.IF_NULL, '??=',
-                                 BinaryOperator.IF_NULL,
-                                 isUserDefinable: false);
+  static const AssignmentOperator IF_NULL = const AssignmentOperator._(
+      AssignmentOperatorKind.IF_NULL, '??=', BinaryOperator.IF_NULL,
+      isUserDefinable: false);
 
   /// The += assignment operator.
-  static const AssignmentOperator ADD =
-      const AssignmentOperator._(AssignmentOperatorKind.ADD, '+=',
-                                 BinaryOperator.ADD);
+  static const AssignmentOperator ADD = const AssignmentOperator._(
+      AssignmentOperatorKind.ADD, '+=', BinaryOperator.ADD);
 
   /// The -= assignment operator.
-  static const AssignmentOperator SUB =
-      const AssignmentOperator._(AssignmentOperatorKind.SUB, '-=',
-                                 BinaryOperator.SUB);
+  static const AssignmentOperator SUB = const AssignmentOperator._(
+      AssignmentOperatorKind.SUB, '-=', BinaryOperator.SUB);
 
   /// The *= assignment operator.
-  static const AssignmentOperator MUL =
-      const AssignmentOperator._(AssignmentOperatorKind.MUL, '*=',
-                                 BinaryOperator.MUL);
+  static const AssignmentOperator MUL = const AssignmentOperator._(
+      AssignmentOperatorKind.MUL, '*=', BinaryOperator.MUL);
 
   /// The /= assignment operator.
-  static const AssignmentOperator DIV =
-      const AssignmentOperator._(AssignmentOperatorKind.DIV, '/=',
-                                 BinaryOperator.DIV);
+  static const AssignmentOperator DIV = const AssignmentOperator._(
+      AssignmentOperatorKind.DIV, '/=', BinaryOperator.DIV);
 
   /// The ~/= assignment operator.
-  static const AssignmentOperator IDIV =
-      const AssignmentOperator._(AssignmentOperatorKind.IDIV, '~/=',
-                                 BinaryOperator.IDIV);
+  static const AssignmentOperator IDIV = const AssignmentOperator._(
+      AssignmentOperatorKind.IDIV, '~/=', BinaryOperator.IDIV);
 
   /// The %= assignment operator.
-  static const AssignmentOperator MOD =
-      const AssignmentOperator._(AssignmentOperatorKind.MOD, '%=',
-                                 BinaryOperator.MOD);
+  static const AssignmentOperator MOD = const AssignmentOperator._(
+      AssignmentOperatorKind.MOD, '%=', BinaryOperator.MOD);
 
   /// The <<= assignment operator.
-  static const AssignmentOperator SHL =
-      const AssignmentOperator._(AssignmentOperatorKind.SHL, '<<=',
-                                 BinaryOperator.SHL);
+  static const AssignmentOperator SHL = const AssignmentOperator._(
+      AssignmentOperatorKind.SHL, '<<=', BinaryOperator.SHL);
 
   /// The >>= assignment operator.
-  static const AssignmentOperator SHR =
-      const AssignmentOperator._(AssignmentOperatorKind.SHR, '>>=',
-                                 BinaryOperator.SHR);
+  static const AssignmentOperator SHR = const AssignmentOperator._(
+      AssignmentOperatorKind.SHR, '>>=', BinaryOperator.SHR);
 
   /// The &= assignment operator.
-  static const AssignmentOperator AND =
-      const AssignmentOperator._(AssignmentOperatorKind.AND, '&=',
-                                 BinaryOperator.AND);
+  static const AssignmentOperator AND = const AssignmentOperator._(
+      AssignmentOperatorKind.AND, '&=', BinaryOperator.AND);
 
   /// The |= assignment operator.
-  static const AssignmentOperator OR =
-      const AssignmentOperator._(AssignmentOperatorKind.OR, '|=',
-                                 BinaryOperator.OR);
+  static const AssignmentOperator OR = const AssignmentOperator._(
+      AssignmentOperatorKind.OR, '|=', BinaryOperator.OR);
 
   /// The ^= assignment operator.
-  static const AssignmentOperator XOR =
-      const AssignmentOperator._(AssignmentOperatorKind.XOR, '^=',
-                                 BinaryOperator.XOR);
+  static const AssignmentOperator XOR = const AssignmentOperator._(
+      AssignmentOperatorKind.XOR, '^=', BinaryOperator.XOR);
 
   static AssignmentOperator parse(String value) {
     switch (value) {
-      case '=': return ASSIGN;
-      case '??=': return IF_NULL;
-      case '*=': return MUL;
-      case '/=': return DIV;
-      case '%=': return MOD;
-      case '~/=': return IDIV;
-      case '+=': return ADD;
-      case '-=': return SUB;
-      case '<<=': return SHL;
-      case '>>=': return SHR;
-      case '&=': return AND;
-      case '^=': return XOR;
-      case '|=': return OR;
-      default: return null;
+      case '=':
+        return ASSIGN;
+      case '??=':
+        return IF_NULL;
+      case '*=':
+        return MUL;
+      case '/=':
+        return DIV;
+      case '%=':
+        return MOD;
+      case '~/=':
+        return IDIV;
+      case '+=':
+        return ADD;
+      case '-=':
+        return SUB;
+      case '<<=':
+        return SHL;
+      case '>>=':
+        return SHR;
+      case '&=':
+        return AND;
+      case '^=':
+        return XOR;
+      case '|=':
+        return OR;
+      default:
+        return null;
+    }
+  }
+
+  static AssignmentOperator fromKind(AssignmentOperatorKind kind) {
+    switch (kind) {
+      case AssignmentOperatorKind.ASSIGN: return ASSIGN;
+      case AssignmentOperatorKind.IF_NULL: return IF_NULL;
+      case AssignmentOperatorKind.ADD: return ADD;
+      case AssignmentOperatorKind.SUB: return SUB;
+      case AssignmentOperatorKind.MUL: return MUL;
+      case AssignmentOperatorKind.DIV: return DIV;
+      case AssignmentOperatorKind.IDIV: return IDIV;
+      case AssignmentOperatorKind.MOD: return MOD;
+      case AssignmentOperatorKind.SHL: return SHL;
+      case AssignmentOperatorKind.SHR: return SHR;
+      case AssignmentOperatorKind.AND: return AND;
+      case AssignmentOperatorKind.OR: return OR;
+      case AssignmentOperatorKind.XOR: return XOR;
     }
   }
 }
 
-
-enum IncDecOperatorKind {
-  INC, DEC
-}
+enum IncDecOperatorKind { INC, DEC }
 
 class IncDecOperator {
   final IncDecOperatorKind kind;
@@ -412,9 +470,19 @@
 
   static IncDecOperator parse(String value) {
     switch (value) {
-      case '++': return INC;
-      case '--': return DEC;
-      default: return null;
+      case '++':
+        return INC;
+      case '--':
+        return DEC;
+      default:
+        return null;
+    }
+  }
+
+  static IncDecOperator fromKind(IncDecOperatorKind kind) {
+    switch (kind) {
+      case IncDecOperatorKind.INC: return INC;
+      case IncDecOperatorKind.DEC: return DEC;
     }
   }
 }
diff --git a/pkg/compiler/lib/src/resolution/registry.dart b/pkg/compiler/lib/src/resolution/registry.dart
index b3c7686..ed6db6c 100644
--- a/pkg/compiler/lib/src/resolution/registry.dart
+++ b/pkg/compiler/lib/src/resolution/registry.dart
@@ -5,48 +5,29 @@
 library dart2js.resolution.registry;
 
 import '../common.dart';
-import '../common/backend_api.dart' show
-    Backend,
-    ForeignResolver;
-import '../common/resolution.dart' show
-    Feature,
-    ListLiteralUse,
-    MapLiteralUse,
-    ResolutionImpact;
-import '../common/registry.dart' show
-    Registry;
-import '../compiler.dart' show
-    Compiler;
+import '../common/backend_api.dart' show Backend, ForeignResolver;
+import '../common/resolution.dart'
+    show Feature, ListLiteralUse, MapLiteralUse, ResolutionImpact;
+import '../common/registry.dart' show Registry;
+import '../compiler.dart' show Compiler;
 import '../constants/expressions.dart';
 import '../dart_types.dart';
 import '../diagnostics/source_span.dart';
-import '../enqueue.dart' show
-    ResolutionEnqueuer;
+import '../enqueue.dart' show ResolutionEnqueuer;
 import '../elements/elements.dart';
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Setlet;
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    TypeUse;
-import '../universe/world_impact.dart' show
-    WorldImpactBuilder;
-import '../util/enumset.dart' show
-    EnumSet;
-import '../world.dart' show
-    World;
+import '../util/util.dart' show Setlet;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../universe/use.dart' show DynamicUse, StaticUse, TypeUse;
+import '../universe/world_impact.dart' show WorldImpactBuilder;
+import '../util/enumset.dart' show EnumSet;
+import '../world.dart' show World;
 
 import 'send_structure.dart';
 
-import 'members.dart' show
-    ResolverVisitor;
-import 'tree_elements.dart' show
-    TreeElementMapping;
+import 'members.dart' show ResolverVisitor;
+import 'tree_elements.dart' show TreeElementMapping;
 
 class _ResolutionWorldImpact extends ResolutionImpact with WorldImpactBuilder {
   final String name;
@@ -68,8 +49,7 @@
 
   @override
   Iterable<MapLiteralUse> get mapLiterals {
-    return _mapLiterals != null
-        ? _mapLiterals : const <MapLiteralUse>[];
+    return _mapLiterals != null ? _mapLiterals : const <MapLiteralUse>[];
   }
 
   void registerListLiteral(ListLiteralUse listLiteralUse) {
@@ -82,8 +62,7 @@
 
   @override
   Iterable<ListLiteralUse> get listLiterals {
-    return _listLiterals != null
-        ? _listLiterals : const <ListLiteralUse>[];
+    return _listLiterals != null ? _listLiterals : const <ListLiteralUse>[];
   }
 
   void registerConstSymbolName(String name) {
@@ -95,8 +74,7 @@
 
   @override
   Iterable<String> get constSymbolNames {
-    return _constSymbolNames != null
-        ? _constSymbolNames : const <String>[];
+    return _constSymbolNames != null ? _constSymbolNames : const <String>[];
   }
 
   void registerFeature(Feature feature) {
@@ -109,7 +87,8 @@
   @override
   Iterable<Feature> get features {
     return _features != null
-        ? _features.iterable(Feature.values) : const <Feature>[];
+        ? _features.iterable(Feature.values)
+        : const <Feature>[];
   }
 
   void registerConstantLiteral(ConstantExpression constant) {
@@ -121,7 +100,8 @@
 
   Iterable<ConstantExpression> get constantLiterals {
     return _constantLiterals != null
-        ? _constantLiterals : const <ConstantExpression>[];
+        ? _constantLiterals
+        : const <ConstantExpression>[];
   }
 
   String toString() => '_ResolutionWorldImpact($name)';
@@ -139,8 +119,8 @@
   ResolutionRegistry(Compiler compiler, TreeElementMapping mapping)
       : this.compiler = compiler,
         this.mapping = mapping,
-        this.worldImpact = new _ResolutionWorldImpact(
-            mapping.analyzedElement.toString());
+        this.worldImpact =
+            new _ResolutionWorldImpact(mapping.analyzedElement.toString());
 
   bool get isForResolution => true;
 
@@ -187,8 +167,8 @@
   }
 
   /// Sets the target constructor [node] to be [element].
-  void setRedirectingTargetConstructor(RedirectingFactoryBody node,
-                                       ConstructorElement element) {
+  void setRedirectingTargetConstructor(
+      RedirectingFactoryBody node, ConstructorElement element) {
     useElement(node, element);
   }
 
@@ -283,8 +263,8 @@
   //  Potential access registration.
   //////////////////////////////////////////////////////////////////////////////
 
-  void setAccessedByClosureIn(Node contextNode, VariableElement element,
-                              Node accessNode) {
+  void setAccessedByClosureIn(
+      Node contextNode, VariableElement element, Node accessNode) {
     mapping.setAccessedByClosureIn(contextNode, element, accessNode);
   }
 
@@ -292,13 +272,13 @@
     mapping.registerPotentialMutation(element, mutationNode);
   }
 
-  void registerPotentialMutationInClosure(VariableElement element,
-                                           Node mutationNode) {
+  void registerPotentialMutationInClosure(
+      VariableElement element, Node mutationNode) {
     mapping.registerPotentialMutationInClosure(element, mutationNode);
   }
 
-  void registerPotentialMutationIn(Node contextNode, VariableElement element,
-                                    Node mutationNode) {
+  void registerPotentialMutationIn(
+      Node contextNode, VariableElement element, Node mutationNode) {
     mapping.registerPotentialMutationIn(contextNode, element, mutationNode);
   }
 
@@ -328,30 +308,23 @@
     worldImpact.registerTypeUse(new TypeUse.typeLiteral(type));
   }
 
-  void registerLiteralList(Node node,
-                           InterfaceType type,
-                           {bool isConstant,
-                            bool isEmpty}) {
+  void registerLiteralList(Node node, InterfaceType type,
+      {bool isConstant, bool isEmpty}) {
     setType(node, type);
     worldImpact.registerListLiteral(
         new ListLiteralUse(type, isConstant: isConstant, isEmpty: isEmpty));
   }
 
-  void registerMapLiteral(Node node,
-                          InterfaceType type,
-                          {bool isConstant,
-                           bool isEmpty}) {
+  void registerMapLiteral(Node node, InterfaceType type,
+      {bool isConstant, bool isEmpty}) {
     setType(node, type);
     worldImpact.registerMapLiteral(
         new MapLiteralUse(type, isConstant: isConstant, isEmpty: isEmpty));
   }
 
-  void registerForeignCall(Node node,
-                           Element element,
-                           CallStructure callStructure,
-                           ResolverVisitor visitor) {
-    backend.registerForeignCall(
-        node, element, callStructure,
+  void registerForeignCall(Node node, Element element,
+      CallStructure callStructure, ResolverVisitor visitor) {
+    backend.registerForeignCall(node, element, callStructure,
         new ForeignResolutionResolver(visitor, this));
   }
 
@@ -375,8 +348,8 @@
     return backend.defaultSuperclass(element);
   }
 
-  void registerMixinUse(MixinApplicationElement mixinApplication,
-                        ClassElement mixin) {
+  void registerMixinUse(
+      MixinApplicationElement mixinApplication, ClassElement mixin) {
     universe.registerMixinUse(mixinApplication, mixin);
   }
 
diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart
index f628e83..7caced4 100644
--- a/pkg/compiler/lib/src/resolution/resolution.dart
+++ b/pkg/compiler/lib/src/resolution/resolution.dart
@@ -7,62 +7,47 @@
 import 'dart:collection' show Queue;
 
 import '../common.dart';
-import '../common/names.dart' show
-    Identifiers;
-import '../common/resolution.dart' show
-    Feature,
-    Parsing,
-    Resolution,
-    ResolutionImpact;
-import '../common/tasks.dart' show
-    CompilerTask,
-    DeferredAction;
-import '../compiler.dart' show
-    Compiler;
-import '../compile_time_constants.dart' show
-    ConstantCompiler;
-import '../constants/expressions.dart' show
-    ConstantExpression,
-    ConstantExpressionKind,
-    ConstructedConstantExpression,
-    ErroneousConstantExpression;
-import '../constants/values.dart' show
-    ConstantValue;
-import '../core_types.dart' show
-    CoreClasses,
-    CoreTypes;
+import '../common/names.dart' show Identifiers;
+import '../common/resolution.dart'
+    show Feature, Parsing, Resolution, ResolutionImpact;
+import '../common/tasks.dart' show CompilerTask, DeferredAction;
+import '../compiler.dart' show Compiler;
+import '../compile_time_constants.dart' show ConstantCompiler;
+import '../constants/expressions.dart'
+    show
+        ConstantExpression,
+        ConstantExpressionKind,
+        ConstructedConstantExpression,
+        ErroneousConstantExpression;
+import '../constants/values.dart' show ConstantValue;
+import '../core_types.dart' show CoreClasses, CoreTypes;
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    BaseClassElementX,
-    BaseFunctionElementX,
-    ConstructorElementX,
-    FieldElementX,
-    FunctionElementX,
-    GetterElementX,
-    MetadataAnnotationX,
-    MixinApplicationElementX,
-    ParameterMetadataAnnotation,
-    SetterElementX,
-    TypedefElementX;
-import '../tokens/token.dart' show
-    isBinaryOperator,
-    isMinusOperator,
-    isTernaryOperator,
-    isUnaryOperator,
-    isUserDefinableOperator;
+import '../elements/modelx.dart'
+    show
+        BaseClassElementX,
+        BaseFunctionElementX,
+        ConstructorElementX,
+        FieldElementX,
+        FunctionElementX,
+        GetterElementX,
+        MetadataAnnotationX,
+        MixinApplicationElementX,
+        ParameterMetadataAnnotation,
+        SetterElementX,
+        TypedefElementX;
+import '../tokens/token.dart'
+    show
+        isBinaryOperator,
+        isMinusOperator,
+        isTernaryOperator,
+        isUnaryOperator,
+        isUserDefinableOperator;
 import '../tree/tree.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/use.dart' show
-    StaticUse,
-    TypeUse;
-import '../universe/world_impact.dart' show
-    WorldImpact;
-import '../util/util.dart' show
-    Link,
-    LinkBuilder,
-    Setlet;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/use.dart' show StaticUse, TypeUse;
+import '../universe/world_impact.dart' show WorldImpact;
+import '../util/util.dart' show Link, LinkBuilder, Setlet;
 
 import 'class_hierarchy.dart';
 import 'class_members.dart' show MembersCreator;
@@ -128,13 +113,11 @@
     });
   }
 
-  void resolveRedirectingConstructor(InitializerResolver resolver,
-                                     Node node,
-                                     FunctionElement constructor,
-                                     FunctionElement redirection) {
+  void resolveRedirectingConstructor(InitializerResolver resolver, Node node,
+      FunctionElement constructor, FunctionElement redirection) {
     assert(invariant(node, constructor.isImplementation,
         message: 'Redirecting constructors must be resolved on implementation '
-                 'elements.'));
+            'elements.'));
     Setlet<FunctionElement> seen = new Setlet<FunctionElement>();
     seen.add(constructor);
     while (redirection != null) {
@@ -154,18 +137,17 @@
   }
 
   static void processAsyncMarker(Compiler compiler,
-                                 BaseFunctionElementX element,
-                                 ResolutionRegistry registry) {
+      BaseFunctionElementX element, ResolutionRegistry registry) {
     DiagnosticReporter reporter = compiler.reporter;
     Resolution resolution = compiler.resolution;
     CoreClasses coreClasses = compiler.coreClasses;
     FunctionExpression functionExpression = element.node;
     AsyncModifier asyncModifier = functionExpression.asyncModifier;
     if (asyncModifier != null) {
-
       if (asyncModifier.isAsynchronous) {
         element.asyncMarker = asyncModifier.isYielding
-            ? AsyncMarker.ASYNC_STAR : AsyncMarker.ASYNC;
+            ? AsyncMarker.ASYNC_STAR
+            : AsyncMarker.ASYNC;
       } else {
         element.asyncMarker = AsyncMarker.SYNC_STAR;
       }
@@ -185,7 +167,6 @@
               asyncModifier,
               MessageKind.ASYNC_MODIFIER_ON_SETTER,
               {'modifier': element.asyncMarker});
-
         }
         if (functionExpression.body.asReturn() != null &&
             element.asyncMarker.isYielding) {
@@ -196,18 +177,18 @@
         }
       }
       switch (element.asyncMarker) {
-      case AsyncMarker.ASYNC:
-        registry.registerFeature(Feature.ASYNC);
-        coreClasses.futureClass.ensureResolved(resolution);
-        break;
-      case AsyncMarker.ASYNC_STAR:
-        registry.registerFeature(Feature.ASYNC_STAR);
-        coreClasses.streamClass.ensureResolved(resolution);
-        break;
-      case AsyncMarker.SYNC_STAR:
-        registry.registerFeature(Feature.SYNC_STAR);
-        coreClasses.iterableClass.ensureResolved(resolution);
-        break;
+        case AsyncMarker.ASYNC:
+          registry.registerFeature(Feature.ASYNC);
+          coreClasses.futureClass.ensureResolved(resolution);
+          break;
+        case AsyncMarker.ASYNC_STAR:
+          registry.registerFeature(Feature.ASYNC_STAR);
+          coreClasses.streamClass.ensureResolved(resolution);
+          break;
+        case AsyncMarker.SYNC_STAR:
+          registry.registerFeature(Feature.SYNC_STAR);
+          coreClasses.iterableClass.ensureResolved(resolution);
+          break;
       }
     }
   }
@@ -225,9 +206,7 @@
       FunctionElement element, FunctionExpression tree) {
     return reporter.withCurrentElement(element, () {
       if (element.isExternal && tree.hasBody) {
-        reporter.reportErrorMessage(
-            element,
-            MessageKind.EXTERNAL_WITH_BODY,
+        reporter.reportErrorMessage(element, MessageKind.EXTERNAL_WITH_BODY,
             {'functionName': element.name});
       }
       if (element.isConstructor) {
@@ -240,8 +219,7 @@
             reporter.reportErrorMessage(
                 tree, MessageKind.CONST_CONSTRUCTOR_WITH_BODY);
           } else if (!tree.isRedirectingFactory) {
-            reporter.reportErrorMessage(
-                tree, MessageKind.CONST_FACTORY);
+            reporter.reportErrorMessage(tree, MessageKind.CONST_FACTORY);
           }
         }
       }
@@ -295,13 +273,11 @@
           element.isInstanceMember &&
           element.name == Identifiers.noSuchMethod_ &&
           _isNativeClassOrExtendsNativeClass(enclosingClass)) {
-        reporter.reportErrorMessage(
-            tree, MessageKind.NO_SUCH_METHOD_IN_NATIVE);
+        reporter.reportErrorMessage(tree, MessageKind.NO_SUCH_METHOD_IN_NATIVE);
       }
 
       return registry.worldImpact;
     });
-
   }
 
   WorldImpact resolveMethodElement(FunctionElementX element) {
@@ -312,7 +288,7 @@
         // should never be non-null, not even for constructors.
         assert(invariant(element, element.isConstructor,
             message: 'Non-constructor element $element '
-                     'has already been analyzed.'));
+                'has already been analyzed.'));
         return const ResolutionImpact();
       }
       if (element.isSynthesized) {
@@ -326,9 +302,8 @@
           // seeing this element.
           element.computeType(resolution);
           if (!target.isMalformed) {
-            registry.registerStaticUse(
-                new StaticUse.superConstructorInvoke(
-                    target, CallStructure.NO_ARGS));
+            registry.registerStaticUse(new StaticUse.superConstructorInvoke(
+                target, CallStructure.NO_ARGS));
           }
           return registry.worldImpact;
         } else {
@@ -363,9 +338,8 @@
 
   WorldImpact resolveField(FieldElementX element) {
     VariableDefinitions tree = element.parseNode(parsing);
-    if(element.modifiers.isStatic && element.isTopLevel) {
-      reporter.reportErrorMessage(
-          element.modifiers.getStatic(),
+    if (element.modifiers.isStatic && element.isTopLevel) {
+      reporter.reportErrorMessage(element.modifiers.getStatic(),
           MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC);
     }
     ResolverVisitor visitor = visitorFor(element);
@@ -424,8 +398,7 @@
   DartType resolveTypeAnnotation(Element element, TypeAnnotation annotation) {
     DartType type = resolveReturnType(element, annotation);
     if (type.isVoid) {
-      reporter.reportErrorMessage(
-          annotation, MessageKind.VOID_NOT_ALLOWED);
+      reporter.reportErrorMessage(annotation, MessageKind.VOID_NOT_ALLOWED);
     }
     return type;
   }
@@ -440,8 +413,8 @@
     return result;
   }
 
-  void resolveRedirectionChain(ConstructorElementX constructor,
-                               Spannable node) {
+  void resolveRedirectionChain(
+      ConstructorElementX constructor, Spannable node) {
     ConstructorElementX target = constructor;
     InterfaceType targetType;
     List<Element> seen = new List<Element>();
@@ -453,7 +426,7 @@
         targetType = target.effectiveTargetType;
         assert(invariant(target, targetType != null,
             message: 'Redirection target type has not been computed for '
-                     '$target'));
+                '$target'));
         target = target.effectiveTargetInternal;
         break;
       }
@@ -521,14 +494,11 @@
       if (cls.supertypeLoadState == STATE_DONE) return;
       if (cls.supertypeLoadState == STATE_STARTED) {
         reporter.reportErrorMessage(
-            from,
-            MessageKind.CYCLIC_CLASS_HIERARCHY,
-            {'className': cls.name});
+            from, MessageKind.CYCLIC_CLASS_HIERARCHY, {'className': cls.name});
         cls.supertypeLoadState = STATE_DONE;
         cls.hasIncompleteHierarchy = true;
-        cls.allSupertypesAndSelf =
-            coreClasses.objectClass.allSupertypesAndSelf.extendClass(
-                cls.computeType(resolution));
+        cls.allSupertypesAndSelf = coreClasses.objectClass.allSupertypesAndSelf
+            .extendClass(cls.computeType(resolution));
         cls.supertype = cls.allSupertypes.head;
         assert(invariant(from, cls.supertype != null,
             message: 'Missing supertype on cyclic class $cls.'));
@@ -538,8 +508,9 @@
       cls.supertypeLoadState = STATE_STARTED;
       reporter.withCurrentElement(cls, () {
         // TODO(ahe): Cache the node in cls.
-        cls.parseNode(parsing).accept(
-            new ClassSupertypeResolver(compiler, cls));
+        cls
+            .parseNode(parsing)
+            .accept(new ClassSupertypeResolver(compiler, cls));
         if (cls.supertypeLoadState != STATE_DONE) {
           cls.supertypeLoadState = STATE_DONE;
         }
@@ -561,8 +532,8 @@
   /// [element] has been resolved.
   // TODO(johnniwinther): Encapsulate this functionality in a
   // 'TypeDeclarationResolver'.
-  _resolveTypeDeclaration(TypeDeclarationElement element,
-                          resolveTypeDeclaration()) {
+  _resolveTypeDeclaration(
+      TypeDeclarationElement element, resolveTypeDeclaration()) {
     return reporter.withCurrentElement(element, () {
       return measure(() {
         TypeDeclarationElement previousResolvedTypeDeclaration =
@@ -572,7 +543,8 @@
         if (previousResolvedTypeDeclaration == null) {
           do {
             while (!pendingClassesToBeResolved.isEmpty) {
-              pendingClassesToBeResolved.removeFirst()
+              pendingClassesToBeResolved
+                  .removeFirst()
                   .ensureResolved(resolution);
             }
             while (!pendingClassesToBePostProcessed.isEmpty) {
@@ -618,27 +590,30 @@
     }
   }
 
-  void resolveClassInternal(BaseClassElementX element,
-                            ResolutionRegistry registry) {
+  void resolveClassInternal(
+      BaseClassElementX element, ResolutionRegistry registry) {
     if (!element.isPatch) {
-      reporter.withCurrentElement(element, () => measure(() {
-        assert(element.resolutionState == STATE_NOT_STARTED);
-        element.resolutionState = STATE_STARTED;
-        Node tree = element.parseNode(parsing);
-        loadSupertypes(element, tree);
+      reporter.withCurrentElement(
+          element,
+          () => measure(() {
+                assert(element.resolutionState == STATE_NOT_STARTED);
+                element.resolutionState = STATE_STARTED;
+                Node tree = element.parseNode(parsing);
+                loadSupertypes(element, tree);
 
-        ClassResolverVisitor visitor =
-            new ClassResolverVisitor(compiler, element, registry);
-        visitor.visit(tree);
-        element.resolutionState = STATE_DONE;
-        compiler.onClassResolved(element);
-        pendingClassesToBePostProcessed.add(element);
-      }));
+                ClassResolverVisitor visitor =
+                    new ClassResolverVisitor(compiler, element, registry);
+                visitor.visit(tree);
+                element.resolutionState = STATE_DONE;
+                compiler.onClassResolved(element);
+                pendingClassesToBePostProcessed.add(element);
+              }));
       if (element.isPatched) {
         // Ensure handling patch after origin.
         element.patch.ensureResolved(resolution);
       }
-    } else { // Handle patch classes:
+    } else {
+      // Handle patch classes:
       element.resolutionState = STATE_STARTED;
       // Ensure handling origin before patch.
       element.origin.ensureResolved(resolution);
@@ -722,8 +697,7 @@
     // Check that we're not trying to use Object as a mixin.
     if (mixin.superclass == null) {
       reporter.reportErrorMessage(
-          mixinApplication,
-          MessageKind.ILLEGAL_MIXIN_OBJECT);
+          mixinApplication, MessageKind.ILLEGAL_MIXIN_OBJECT);
       // Avoid reporting additional errors for the Object class.
       return;
     }
@@ -735,8 +709,7 @@
 
     // Check that the mixed in class has Object as its superclass.
     if (!mixin.superclass.isObject) {
-      reporter.reportErrorMessage(
-          mixin, MessageKind.ILLEGAL_MIXIN_SUPERCLASS);
+      reporter.reportErrorMessage(mixin, MessageKind.ILLEGAL_MIXIN_SUPERCLASS);
     }
 
     // Check that the mixed in class doesn't have any constructors and
@@ -754,31 +727,25 @@
         // differently.
         if (compiler.enqueuer.resolution.hasBeenProcessed(member)) {
           checkMixinSuperUses(
-              member.resolvedAst.elements,
-              mixinApplication,
-              mixin);
+              member.resolvedAst.elements, mixinApplication, mixin);
         }
       }
     });
   }
 
   void checkMixinSuperUses(TreeElements resolutionTree,
-                           MixinApplicationElement mixinApplication,
-                           ClassElement mixin) {
+      MixinApplicationElement mixinApplication, ClassElement mixin) {
     // TODO(johnniwinther): Avoid the use of [TreeElements] here.
     if (resolutionTree == null) return;
     Iterable<SourceSpan> superUses = resolutionTree.superUses;
     if (superUses.isEmpty) return;
-    DiagnosticMessage error = reporter.createMessage(
-        mixinApplication,
-        MessageKind.ILLEGAL_MIXIN_WITH_SUPER,
-        {'className': mixin.name});
+    DiagnosticMessage error = reporter.createMessage(mixinApplication,
+        MessageKind.ILLEGAL_MIXIN_WITH_SUPER, {'className': mixin.name});
     // Show the user the problematic uses of 'super' in the mixin.
     List<DiagnosticMessage> infos = <DiagnosticMessage>[];
     for (SourceSpan use in superUses) {
-      infos.add(reporter.createMessage(
-          use,
-          MessageKind.ILLEGAL_MIXIN_SUPER_USE));
+      infos.add(
+          reporter.createMessage(use, MessageKind.ILLEGAL_MIXIN_SUPER_USE));
     }
     reporter.reportError(error, infos);
   }
@@ -801,8 +768,7 @@
               member, MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER);
         }
         if (member.isConstructor) {
-          final mismatchedFlagsBits =
-              member.modifiers.flags &
+          final mismatchedFlagsBits = member.modifiers.flags &
               (Modifiers.FLAG_STATIC | Modifiers.FLAG_ABSTRACT);
           if (mismatchedFlagsBits != 0) {
             final mismatchedFlags =
@@ -830,8 +796,8 @@
       });
     });
     if (!constConstructors.isEmpty && !nonFinalInstanceFields.isEmpty) {
-      Spannable span = constConstructors.length > 1
-          ? cls : constConstructors[0];
+      Spannable span =
+          constConstructors.length > 1 ? cls : constConstructors[0];
       DiagnosticMessage error = reporter.createMessage(
           span,
           MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS,
@@ -839,15 +805,13 @@
       List<DiagnosticMessage> infos = <DiagnosticMessage>[];
       if (constConstructors.length > 1) {
         for (Element constructor in constConstructors) {
-          infos.add(reporter.createMessage(
-              constructor,
+          infos.add(reporter.createMessage(constructor,
               MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR));
         }
       }
       for (Element field in nonFinalInstanceFields) {
         infos.add(reporter.createMessage(
-            field,
-            MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD));
+            field, MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD));
       }
       reporter.reportError(error, infos);
     }
@@ -863,12 +827,11 @@
     ClassElement classElement = member.enclosingClass;
     Element lookupElement = classElement.lookupLocalMember(member.name);
     if (lookupElement == null) {
-      reporter.internalError(member,
-          "No abstract field for accessor");
+      reporter.internalError(member, "No abstract field for accessor");
     } else if (!lookupElement.isAbstractField) {
       if (lookupElement.isMalformed || lookupElement.isAmbiguous) return;
-      reporter.internalError(member,
-          "Inaccessible abstract field for accessor");
+      reporter.internalError(
+          member, "Inaccessible abstract field for accessor");
     }
     AbstractFieldElement field = lookupElement;
 
@@ -880,14 +843,10 @@
     int setterFlags = setter.modifiers.flags | Modifiers.FLAG_ABSTRACT;
     if (getterFlags != setterFlags) {
       final mismatchedFlags =
-        new Modifiers.withFlags(null, getterFlags ^ setterFlags);
-      reporter.reportWarningMessage(
-          field.getter,
-          MessageKind.GETTER_MISMATCH,
+          new Modifiers.withFlags(null, getterFlags ^ setterFlags);
+      reporter.reportWarningMessage(field.getter, MessageKind.GETTER_MISMATCH,
           {'modifiers': mismatchedFlags});
-      reporter.reportWarningMessage(
-          field.setter,
-          MessageKind.SETTER_MISMATCH,
+      reporter.reportWarningMessage(field.setter, MessageKind.SETTER_MISMATCH,
           {'modifiers': mismatchedFlags});
     }
   }
@@ -921,8 +880,8 @@
       messageKind = MessageKind.TERNARY_OPERATOR_BAD_ARITY;
       requiredParameterCount = 2;
     } else {
-      reporter.internalError(function,
-          'Unexpected user defined operator $value');
+      reporter.internalError(
+          function, 'Unexpected user defined operator $value');
     }
     checkArity(function, requiredParameterCount, messageKind, isMinus);
   }
@@ -930,17 +889,14 @@
   void checkOverrideHashCode(FunctionElement operatorEquals) {
     if (operatorEquals.isAbstract) return;
     ClassElement cls = operatorEquals.enclosingClass;
-    Element hashCodeImplementation =
-        cls.lookupLocalMember('hashCode');
+    Element hashCodeImplementation = cls.lookupLocalMember('hashCode');
     if (hashCodeImplementation != null) return;
-    reporter.reportHintMessage(
-        operatorEquals, MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE,
-        {'class': cls.name});
+    reporter.reportHintMessage(operatorEquals,
+        MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE, {'class': cls.name});
   }
 
-  void checkArity(FunctionElement function,
-                  int requiredParameterCount, MessageKind messageKind,
-                  bool isMinus) {
+  void checkArity(FunctionElement function, int requiredParameterCount,
+      MessageKind messageKind, bool isMinus) {
     FunctionExpression node = function.node;
     FunctionSignature signature = function.functionSignature;
     if (signature.requiredParameterCount != requiredParameterCount) {
@@ -994,22 +950,18 @@
     }
   }
 
-  reportErrorWithContext(Element errorneousElement,
-                         MessageKind errorMessage,
-                         Element contextElement,
-                         MessageKind contextMessage) {
+  reportErrorWithContext(Element errorneousElement, MessageKind errorMessage,
+      Element contextElement, MessageKind contextMessage) {
     reporter.reportError(
-        reporter.createMessage(
-            errorneousElement,
-            errorMessage,
-            {'memberName': contextElement.name,
-             'className': contextElement.enclosingClass.name}),
+        reporter.createMessage(errorneousElement, errorMessage, {
+          'memberName': contextElement.name,
+          'className': contextElement.enclosingClass.name
+        }),
         <DiagnosticMessage>[
-            reporter.createMessage(contextElement, contextMessage),
+          reporter.createMessage(contextElement, contextMessage),
         ]);
   }
 
-
   FunctionSignature resolveSignature(FunctionElementX element) {
     MessageKind defaultValuesError = null;
     if (element.isFactoryConstructor) {
@@ -1021,7 +973,10 @@
     return reporter.withCurrentElement(element, () {
       FunctionExpression node = element.parseNode(parsing);
       return measure(() => SignatureResolver.analyze(
-          compiler, node.parameters, node.returnType, element,
+          compiler,
+          node.parameters,
+          node.returnType,
+          element,
           new ResolutionRegistry(compiler, _ensureTreeElements(element)),
           defaultValuesError: defaultValuesError,
           createRealParameters: true));
@@ -1032,15 +987,15 @@
     if (element.isResolved) return const ResolutionImpact();
     compiler.world.allTypedefs.add(element);
     return _resolveTypeDeclaration(element, () {
-      ResolutionRegistry registry = new ResolutionRegistry(
-          compiler, _ensureTreeElements(element));
+      ResolutionRegistry registry =
+          new ResolutionRegistry(compiler, _ensureTreeElements(element));
       return reporter.withCurrentElement(element, () {
         return measure(() {
           assert(element.resolutionState == STATE_NOT_STARTED);
           element.resolutionState = STATE_STARTED;
           Typedef node = element.parseNode(parsing);
           TypedefResolverVisitor visitor =
-            new TypedefResolverVisitor(compiler, element, registry);
+              new TypedefResolverVisitor(compiler, element, registry);
           visitor.visit(node);
           element.resolutionState = STATE_DONE;
           return registry.worldImpact;
@@ -1050,61 +1005,65 @@
   }
 
   void resolveMetadataAnnotation(MetadataAnnotationX annotation) {
-    reporter.withCurrentElement(annotation.annotatedElement, () => measure(() {
-      assert(annotation.resolutionState == STATE_NOT_STARTED);
-      annotation.resolutionState = STATE_STARTED;
+    reporter.withCurrentElement(
+        annotation.annotatedElement,
+        () => measure(() {
+              assert(annotation.resolutionState == STATE_NOT_STARTED);
+              annotation.resolutionState = STATE_STARTED;
 
-      Node node = annotation.parseNode(parsing);
-      Element annotatedElement = annotation.annotatedElement;
-      AnalyzableElement context = annotatedElement.analyzableElement;
-      ClassElement classElement = annotatedElement.enclosingClass;
-      if (classElement != null) {
-        // The annotation is resolved in the scope of [classElement].
-        classElement.ensureResolved(resolution);
-      }
-      assert(invariant(node, context != null,
-          message: "No context found for metadata annotation "
-                   "on $annotatedElement."));
-      ResolverVisitor visitor = visitorFor(context, useEnclosingScope: true);
-      ResolutionRegistry registry = visitor.registry;
-      node.accept(visitor);
-      // TODO(johnniwinther): Avoid passing the [TreeElements] to
-      // [compileMetadata].
-      ConstantExpression constant = constantCompiler.compileMetadata(
-          annotation, node, registry.mapping);
-      switch (constant.kind) {
-        case ConstantExpressionKind.CONSTRUCTED:
-          ConstructedConstantExpression constructedConstant = constant;
-          if (constructedConstant.type.isGeneric) {
-            // Const constructor calls cannot have type arguments.
-            // TODO(24312): Remove this.
-            reporter.reportErrorMessage(
-                node, MessageKind.INVALID_METADATA_GENERIC);
-            constant = new ErroneousConstantExpression();
-          }
-          break;
-        case ConstantExpressionKind.VARIABLE:
-        case ConstantExpressionKind.ERRONEOUS:
-          break;
-        default:
-          reporter.reportErrorMessage(node, MessageKind.INVALID_METADATA);
-          constant = new ErroneousConstantExpression();
-          break;
-      }
-      annotation.constant = constant;
+              Node node = annotation.parseNode(parsing);
+              Element annotatedElement = annotation.annotatedElement;
+              AnalyzableElement context = annotatedElement.analyzableElement;
+              ClassElement classElement = annotatedElement.enclosingClass;
+              if (classElement != null) {
+                // The annotation is resolved in the scope of [classElement].
+                classElement.ensureResolved(resolution);
+              }
+              assert(invariant(node, context != null,
+                  message: "No context found for metadata annotation "
+                      "on $annotatedElement."));
+              ResolverVisitor visitor =
+                  visitorFor(context, useEnclosingScope: true);
+              ResolutionRegistry registry = visitor.registry;
+              node.accept(visitor);
+              // TODO(johnniwinther): Avoid passing the [TreeElements] to
+              // [compileMetadata].
+              ConstantExpression constant = constantCompiler.compileMetadata(
+                  annotation, node, registry.mapping);
+              switch (constant.kind) {
+                case ConstantExpressionKind.CONSTRUCTED:
+                  ConstructedConstantExpression constructedConstant = constant;
+                  if (constructedConstant.type.isGeneric) {
+                    // Const constructor calls cannot have type arguments.
+                    // TODO(24312): Remove this.
+                    reporter.reportErrorMessage(
+                        node, MessageKind.INVALID_METADATA_GENERIC);
+                    constant = new ErroneousConstantExpression();
+                  }
+                  break;
+                case ConstantExpressionKind.VARIABLE:
+                case ConstantExpressionKind.ERRONEOUS:
+                  break;
+                default:
+                  reporter.reportErrorMessage(
+                      node, MessageKind.INVALID_METADATA);
+                  constant = new ErroneousConstantExpression();
+                  break;
+              }
+              annotation.constant = constant;
 
-      constantCompiler.evaluate(annotation.constant);
-      // TODO(johnniwinther): Register the relation between the annotation
-      // and the annotated element instead. This will allow the backend to
-      // retrieve the backend constant and only register metadata on the
-      // elements for which it is needed. (Issue 17732).
-      registry.registerMetadataConstant(annotation);
-      annotation.resolutionState = STATE_DONE;
-    }));
+              constantCompiler.evaluate(annotation.constant);
+              // TODO(johnniwinther): Register the relation between the annotation
+              // and the annotated element instead. This will allow the backend to
+              // retrieve the backend constant and only register metadata on the
+              // elements for which it is needed. (Issue 17732).
+              registry.registerMetadataConstant(annotation);
+              annotation.resolutionState = STATE_DONE;
+            }));
   }
 
-  List<MetadataAnnotation> resolveMetadata(Element element,
-                                           VariableDefinitions node) {
+  List<MetadataAnnotation> resolveMetadata(
+      Element element, VariableDefinitions node) {
     List<MetadataAnnotation> metadata = <MetadataAnnotation>[];
     for (Metadata annotation in node.metadata.nodes) {
       ParameterMetadataAnnotation metadataAnnotation =
@@ -1129,7 +1088,7 @@
   bool get hasTreeElements => _treeElements != null;
 
   TreeElements get treeElements {
-    assert(invariant(this, _treeElements !=null,
+    assert(invariant(this, _treeElements != null,
         message: "TreeElements have not been computed for $this."));
     return _treeElements;
   }
diff --git a/pkg/compiler/lib/src/resolution/resolution_common.dart b/pkg/compiler/lib/src/resolution/resolution_common.dart
index e1e0d28..3cf5dcb 100644
--- a/pkg/compiler/lib/src/resolution/resolution_common.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_common.dart
@@ -5,21 +5,15 @@
 library dart2js.resolution.common;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Resolution;
-import '../common/tasks.dart' show
-    DeferredAction;
-import '../compiler.dart' show
-    Compiler;
+import '../common/resolution.dart' show Resolution;
+import '../common/tasks.dart' show DeferredAction;
+import '../compiler.dart' show Compiler;
 import '../elements/elements.dart';
 import '../tree/tree.dart';
 
-import 'registry.dart' show
-    ResolutionRegistry;
-import 'scope.dart' show
-    Scope;
-import 'type_resolver.dart' show
-    TypeResolver;
+import 'registry.dart' show ResolutionRegistry;
+import 'scope.dart' show Scope;
+import 'type_resolver.dart' show TypeResolver;
 
 class CommonResolverVisitor<R> extends Visitor<R> {
   final Compiler compiler;
@@ -31,8 +25,8 @@
   Resolution get resolution => compiler.resolution;
 
   R visitNode(Node node) {
-    return reporter.internalError(node,
-        'internal error: Unhandled node: ${node.getObjectDescription()}');
+    return reporter.internalError(
+        node, 'internal error: Unhandled node: ${node.getObjectDescription()}');
   }
 
   R visitEmptyStatement(Node node) => null;
@@ -52,8 +46,10 @@
 abstract class MappingVisitor<T> extends CommonResolverVisitor<T> {
   final ResolutionRegistry registry;
   final TypeResolver typeResolver;
+
   /// The current enclosing element for the visited AST nodes.
   Element get enclosingElement;
+
   /// The current scope of the visitor.
   Scope get scope;
 
@@ -77,9 +73,9 @@
           element.name == 'async' ||
           element.name == 'await') {
         reporter.reportErrorMessage(
-            node, MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER,
-            {'keyword': element.name,
-             'modifier': currentAsyncMarker});
+            node,
+            MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER,
+            {'keyword': element.name, 'modifier': currentAsyncMarker});
       }
     }
   }
@@ -93,19 +89,14 @@
     registry.defineElement(node, element);
   }
 
-  void reportDuplicateDefinition(String name,
-                                 Spannable definition,
-                                 Spannable existing) {
+  void reportDuplicateDefinition(
+      String name, Spannable definition, Spannable existing) {
     reporter.reportError(
         reporter.createMessage(
-            definition,
-            MessageKind.DUPLICATE_DEFINITION,
-            {'name': name}),
+            definition, MessageKind.DUPLICATE_DEFINITION, {'name': name}),
         <DiagnosticMessage>[
-            reporter.createMessage(
-                existing,
-                MessageKind.EXISTING_DEFINITION,
-                {'name': name}),
+          reporter.createMessage(
+              existing, MessageKind.EXISTING_DEFINITION, {'name': name}),
         ]);
   }
 }
diff --git a/pkg/compiler/lib/src/resolution/resolution_result.dart b/pkg/compiler/lib/src/resolution/resolution_result.dart
index 6168025..3e36fa7 100644
--- a/pkg/compiler/lib/src/resolution/resolution_result.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_result.dart
@@ -8,17 +8,9 @@
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../tree/tree.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
+import '../universe/call_structure.dart' show CallStructure;
 
-enum ResultKind {
-  NONE,
-  ELEMENT,
-  TYPE,
-  ASSERT,
-  CONSTANT,
-  PREFIX,
-}
+enum ResultKind { NONE, ELEMENT, TYPE, ASSERT, CONSTANT, PREFIX, }
 
 /// The result of resolving a node.
 abstract class ResolutionResult {
@@ -121,9 +113,7 @@
   /// expression.
   final bool isValidAsConstant;
 
-  ArgumentsResult(
-      this.callStructure,
-      this.argumentResults,
+  ArgumentsResult(this.callStructure, this.argumentResults,
       {this.isValidAsConstant});
 
   /// Returns the list of [ConstantExpression]s for each of the arguments. If
diff --git a/pkg/compiler/lib/src/resolution/scope.dart b/pkg/compiler/lib/src/resolution/scope.dart
index c3785f9..41df803 100644
--- a/pkg/compiler/lib/src/resolution/scope.dart
+++ b/pkg/compiler/lib/src/resolution/scope.dart
@@ -21,7 +21,8 @@
 
   static Scope buildEnclosingScope(Element element) {
     return element.enclosingElement != null
-        ? element.enclosingElement.buildScope() : element.buildScope();
+        ? element.enclosingElement.buildScope()
+        : element.buildScope();
   }
 }
 
@@ -67,8 +68,7 @@
 class TypeDeclarationScope extends NestedScope {
   final TypeDeclarationElement element;
 
-  TypeDeclarationScope(parent, this.element)
-      : super(parent) {
+  TypeDeclarationScope(parent, this.element) : super(parent) {
     assert(parent != null);
   }
 
@@ -88,8 +88,7 @@
 
   Element localLookup(String name) => lookupTypeVariable(name);
 
-  String toString() =>
-      'TypeDeclarationScope($element)';
+  String toString() => 'TypeDeclarationScope($element)';
 }
 
 abstract class MutableScope extends NestedScope {
@@ -115,8 +114,7 @@
 class MethodScope extends MutableScope {
   final Element element;
 
-  MethodScope(Scope parent, this.element)
-      : super(parent);
+  MethodScope(Scope parent, this.element) : super(parent);
 
   String toString() => 'MethodScope($element${elements.keys.toList()})';
 }
@@ -136,7 +134,7 @@
   ClassElement get element => super.element;
 
   ClassScope(Scope parentScope, ClassElement element)
-      : super(parentScope, element)  {
+      : super(parentScope, element) {
     assert(parent != null);
   }
 
diff --git a/pkg/compiler/lib/src/resolution/secret_tree_element.dart b/pkg/compiler/lib/src/resolution/secret_tree_element.dart
index c4d2029..635ffe7 100644
--- a/pkg/compiler/lib/src/resolution/secret_tree_element.dart
+++ b/pkg/compiler/lib/src/resolution/secret_tree_element.dart
@@ -31,7 +31,6 @@
 ///
 /// This class is the superclass of all AST nodes.
 abstract class NullTreeElementMixin implements TreeElementMixin, Spannable {
-
   // Deliberately using [Object] here to thwart code completion.
   // You're not really supposed to access this field anyways.
   Object get _element => null;
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor.dart b/pkg/compiler/lib/src/resolution/semantic_visitor.dart
index 4aaba70..6f0005e 100644
--- a/pkg/compiler/lib/src/resolution/semantic_visitor.dart
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor.dart
@@ -9,10 +9,8 @@
 import '../dart_types.dart';
 import '../tree/tree.dart';
 import '../elements/elements.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
 
 import 'operators.dart';
 import 'send_resolver.dart';
@@ -78,7 +76,6 @@
 /// [SemanticDeclarationVisitor] in a [Visitor].
 abstract class SemanticDeclarationResolvedMixin<R, A>
     implements Visitor<R>, DeclarationResolverMixin {
-
   SemanticDeclarationVisitor<R, A> get declVisitor;
 
   @override
@@ -114,8 +111,7 @@
     // TODO(johnniwinther): Support argument.
     A arg = null;
 
-    computeVariableStructures(
-        definitions,
+    computeVariableStructures(definitions,
         (Node node, VariableStructure structure) {
       if (structure == null) {
         return internalError(node, 'No structure for $node');
@@ -128,9 +124,10 @@
 }
 
 abstract class SemanticVisitor<R, A> extends Visitor<R>
-    with SemanticSendResolvedMixin<R, A>,
-         SemanticDeclarationResolvedMixin<R, A>,
-         DeclarationResolverMixin {
+    with
+        SemanticSendResolvedMixin<R, A>,
+        SemanticDeclarationResolvedMixin<R, A>,
+        DeclarationResolverMixin {
   TreeElements elements;
 
   SemanticVisitor(this.elements);
@@ -147,10 +144,7 @@
   ///
   ///     m(parameter) => parameter;
   ///
-  R visitParameterGet(
-      Send node,
-      ParameterElement parameter,
-      A arg);
+  R visitParameterGet(Send node, ParameterElement parameter, A arg);
 
   /// Assignment of [rhs] to the [parameter].
   ///
@@ -161,10 +155,7 @@
   ///     }
   ///
   R visitParameterSet(
-      SendSet node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg);
+      SendSet node, ParameterElement parameter, Node rhs, A arg);
 
   /// Assignment of [rhs] to the final [parameter].
   ///
@@ -175,10 +166,7 @@
   ///     }
   ///
   R visitFinalParameterSet(
-      SendSet node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg);
+      SendSet node, ParameterElement parameter, Node rhs, A arg);
 
   /// Invocation of the [parameter] with [arguments].
   ///
@@ -188,12 +176,8 @@
   ///       parameter(null, 42);
   ///     }
   ///
-  R visitParameterInvoke(
-      Send node,
-      ParameterElement parameter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitParameterInvoke(Send node, ParameterElement parameter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Read of the local [variable].
   ///
@@ -204,10 +188,7 @@
   ///       return variable;
   ///     }
   ///
-  R visitLocalVariableGet(
-      Send node,
-      LocalVariableElement variable,
-      A arg);
+  R visitLocalVariableGet(Send node, LocalVariableElement variable, A arg);
 
   /// Assignment of [rhs] to the local [variable].
   ///
@@ -219,10 +200,7 @@
   ///     }
   ///
   R visitLocalVariableSet(
-      SendSet node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg);
+      SendSet node, LocalVariableElement variable, Node rhs, A arg);
 
   /// Assignment of [rhs] to the final local [variable].
   ///
@@ -234,10 +212,7 @@
   ///     }
   ///
   R visitFinalLocalVariableSet(
-      SendSet node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg);
+      SendSet node, LocalVariableElement variable, Node rhs, A arg);
 
   /// Invocation of the local variable [variable] with [arguments].
   ///
@@ -248,12 +223,8 @@
   ///       variable(null, 42);
   ///     }
   ///
-  R visitLocalVariableInvoke(
-      Send node,
-      LocalVariableElement variable,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitLocalVariableInvoke(Send node, LocalVariableElement variable,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Closurization of the local [function].
   ///
@@ -264,10 +235,7 @@
   ///       return o;
   ///     }
   ///
-  R visitLocalFunctionGet(
-      Send node,
-      LocalFunctionElement function,
-      A arg);
+  R visitLocalFunctionGet(Send node, LocalFunctionElement function, A arg);
 
   /// Assignment of [rhs] to the local [function].
   ///
@@ -279,10 +247,7 @@
   ///     }
   ///
   R visitLocalFunctionSet(
-      SendSet node,
-      LocalFunctionElement function,
-      Node rhs,
-      A arg);
+      SendSet node, LocalFunctionElement function, Node rhs, A arg);
 
   /// Invocation of the local [function] with [arguments].
   ///
@@ -293,12 +258,8 @@
   ///       return o(null, 42);
   ///     }
   ///
-  R visitLocalFunctionInvoke(
-      Send node,
-      LocalFunctionElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitLocalFunctionInvoke(Send node, LocalFunctionElement function,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Invocation of the local [function] with incompatible [arguments].
   ///
@@ -322,11 +283,7 @@
   ///
   ///     m(receiver) => receiver.foo;
   ///
-  R visitDynamicPropertyGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg);
+  R visitDynamicPropertyGet(Send node, Node receiver, Name name, A arg);
 
   /// Conditional (if not null) getter call on [receiver] of the property
   /// defined by [selector].
@@ -336,10 +293,7 @@
   ///     m(receiver) => receiver?.foo;
   ///
   R visitIfNotNullDynamicPropertyGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg);
+      Send node, Node receiver, Name name, A arg);
 
   /// Setter call on [receiver] with argument [rhs] of the property defined by
   /// [selector].
@@ -351,11 +305,7 @@
   ///     }
   ///
   R visitDynamicPropertySet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg);
+      SendSet node, Node receiver, Name name, Node rhs, A arg);
 
   /// Conditional (if not null) setter call on [receiver] with argument [rhs] of
   /// the property defined by [selector].
@@ -367,11 +317,7 @@
   ///     }
   ///
   R visitIfNotNullDynamicPropertySet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg);
+      SendSet node, Node receiver, Name name, Node rhs, A arg);
 
   /// Invocation of the property defined by [selector] on [receiver] with
   /// [arguments].
@@ -383,11 +329,7 @@
   ///     }
   ///
   R visitDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg);
 
   /// Conditinal invocation of the property defined by [selector] on [receiver]
   /// with [arguments], if [receiver] is not null.
@@ -399,11 +341,7 @@
   ///     }
   ///
   R visitIfNotNullDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg);
 
   /// Getter call on `this` of the property defined by [selector].
   ///
@@ -419,10 +357,7 @@
   ///       m() => foo;
   ///     }
   ///
-  R visitThisPropertyGet(
-      Send node,
-      Name name,
-      A arg);
+  R visitThisPropertyGet(Send node, Name name, A arg);
 
   /// Setter call on `this` with argument [rhs] of the property defined by
   /// [selector].
@@ -439,11 +374,7 @@
   ///       m() { foo = rhs; }
   ///     }
   ///
-  R visitThisPropertySet(
-      SendSet node,
-      Name name,
-      Node rhs,
-      A arg);
+  R visitThisPropertySet(SendSet node, Name name, Node rhs, A arg);
 
   /// Invocation of the property defined by [selector] on `this` with
   /// [arguments].
@@ -462,10 +393,7 @@
   ///
   ///
   R visitThisPropertyInvoke(
-      Send node,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+      Send node, NodeList arguments, Selector selector, A arg);
 
   /// Read of `this`.
   ///
@@ -475,9 +403,7 @@
   ///       m() => this;
   ///     }
   ///
-  R visitThisGet(
-      Identifier node,
-      A arg);
+  R visitThisGet(Identifier node, A arg);
 
   /// Invocation of `this` with [arguments].
   ///
@@ -488,11 +414,7 @@
   ///     }
   ///
   R visitThisInvoke(
-      Send node,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
-
+      Send node, NodeList arguments, CallStructure callStructure, A arg);
 
   /// Read of the super [field].
   ///
@@ -505,10 +427,7 @@
   ///        m() => super.foo;
   ///     }
   ///
-  R visitSuperFieldGet(
-      Send node,
-      FieldElement field,
-      A arg);
+  R visitSuperFieldGet(Send node, FieldElement field, A arg);
 
   /// Assignment of [rhs] to the super [field].
   ///
@@ -521,11 +440,7 @@
   ///        m() { super.foo = rhs; }
   ///     }
   ///
-  R visitSuperFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg);
 
   /// Assignment of [rhs] to the final static [field].
   ///
@@ -538,11 +453,7 @@
   ///        m() { super.foo = rhs; }
   ///     }
   ///
-  R visitFinalSuperFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R visitFinalSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg);
 
   /// Invocation of the super [field] with [arguments].
   ///
@@ -555,12 +466,8 @@
   ///        m() { super.foo(null, 42); }
   ///     }
   ///
-  R visitSuperFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg);
 
   /// Closurization of the super [method].
   ///
@@ -573,10 +480,7 @@
   ///        m() => super.foo;
   ///     }
   ///
-  R visitSuperMethodGet(
-      Send node,
-      MethodElement method,
-      A arg);
+  R visitSuperMethodGet(Send node, MethodElement method, A arg);
 
   /// Invocation of the super [method] with [arguments].
   ///
@@ -589,12 +493,8 @@
   ///        m() { super.foo(null, 42); }
   ///     }
   ///
-  R visitSuperMethodInvoke(
-      Send node,
-      MethodElement method,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments,
+      CallStructure callStructure, A arg);
 
   /// Invocation of the super [method] with incompatible [arguments].
   ///
@@ -607,12 +507,8 @@
   ///        m() { super.foo(null); } // One argument missing.
   ///     }
   ///
-  R visitSuperMethodIncompatibleInvoke(
-      Send node,
-      MethodElement method,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitSuperMethodIncompatibleInvoke(Send node, MethodElement method,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Assignment of [rhs] to the super [method].
   ///
@@ -625,11 +521,7 @@
   ///        m() { super.foo = rhs; }
   ///     }
   ///
-  R visitSuperMethodSet(
-      Send node,
-      MethodElement method,
-      Node rhs,
-      A arg);
+  R visitSuperMethodSet(Send node, MethodElement method, Node rhs, A arg);
 
   /// Getter call to the super [getter].
   ///
@@ -642,10 +534,7 @@
   ///        m() => super.foo;
   ///     }
   ///
-  R visitSuperGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg);
+  R visitSuperGetterGet(Send node, FunctionElement getter, A arg);
 
   /// Getter call the super [setter].
   ///
@@ -658,10 +547,7 @@
   ///        m() => super.foo;
   ///     }
   ///
-  R visitSuperSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg);
+  R visitSuperSetterGet(Send node, FunctionElement setter, A arg);
 
   /// Setter call to the super [setter].
   ///
@@ -674,11 +560,7 @@
   ///        m() { super.foo = rhs; }
   ///     }
   ///
-  R visitSuperSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+  R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg);
 
   /// Assignment of [rhs] to the super [getter].
   ///
@@ -691,11 +573,7 @@
   ///        m() { super.foo = rhs; }
   ///     }
   ///
-  R visitSuperGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg);
+  R visitSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg);
 
   /// Invocation of the super [getter] with [arguments].
   ///
@@ -708,12 +586,8 @@
   ///        m() { super.foo(null, 42; }
   ///     }
   ///
-  R visitSuperGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitSuperGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Invocation of the super [setter] with [arguments].
   ///
@@ -726,12 +600,8 @@
   ///        m() { super.foo(null, 42; }
   ///     }
   ///
-  R visitSuperSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitSuperSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Invocation of a [expression] with [arguments].
   ///
@@ -739,12 +609,8 @@
   ///
   ///     m() => (a, b){}(null, 42);
   ///
-  R visitExpressionInvoke(
-      Send node,
-      Node expression,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitExpressionInvoke(Send node, Node expression, NodeList arguments,
+      CallStructure callStructure, A arg);
 
   /// Read of the static [field].
   ///
@@ -755,10 +621,7 @@
   ///     }
   ///     m() => C.foo;
   ///
-  R visitStaticFieldGet(
-      Send node,
-      FieldElement field,
-      A arg);
+  R visitStaticFieldGet(Send node, FieldElement field, A arg);
 
   /// Assignment of [rhs] to the static [field].
   ///
@@ -769,11 +632,7 @@
   ///     }
   ///     m() { C.foo = rhs; }
   ///
-  R visitStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg);
 
   /// Assignment of [rhs] to the final static [field].
   ///
@@ -784,11 +643,7 @@
   ///     }
   ///     m() { C.foo = rhs; }
   ///
-  R visitFinalStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R visitFinalStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg);
 
   /// Invocation of the static [field] with [arguments].
   ///
@@ -799,12 +654,8 @@
   ///     }
   ///     m() { C.foo(null, 42); }
   ///
-  R visitStaticFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg);
 
   /// Closurization of the static [function].
   ///
@@ -815,10 +666,7 @@
   ///     }
   ///     m() => C.foo;
   ///
-  R visitStaticFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg);
+  R visitStaticFunctionGet(Send node, MethodElement function, A arg);
 
   /// Invocation of the static [function] with [arguments].
   ///
@@ -829,12 +677,8 @@
   ///     }
   ///     m() { C.foo(null, 42); }
   ///
-  R visitStaticFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitStaticFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Invocation of the static [function] with incompatible [arguments].
   ///
@@ -845,12 +689,8 @@
   ///     }
   ///     m() { C.foo(null); }
   ///
-  R visitStaticFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Assignment of [rhs] to the static [function].
   ///
@@ -861,11 +701,7 @@
   ///     }
   ///     m() { C.foo = rhs; }
   ///
-  R visitStaticFunctionSet(
-      Send node,
-      MethodElement function,
-      Node rhs,
-      A arg);
+  R visitStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg);
 
   /// Getter call to the static [getter].
   ///
@@ -876,10 +712,7 @@
   ///     }
   ///     m() => C.foo;
   ///
-  R visitStaticGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg);
+  R visitStaticGetterGet(Send node, FunctionElement getter, A arg);
 
   /// Getter call the static [setter].
   ///
@@ -890,10 +723,7 @@
   ///     }
   ///     m() => C.foo;
   ///
-  R visitStaticSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg);
+  R visitStaticSetterGet(Send node, FunctionElement setter, A arg);
 
   /// Setter call to the static [setter].
   ///
@@ -904,11 +734,7 @@
   ///     }
   ///     m() { C.foo = rhs; }
   ///
-  R visitStaticSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+  R visitStaticSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg);
 
   /// Assignment of [rhs] to the static [getter].
   ///
@@ -919,11 +745,7 @@
   ///     }
   ///     m() { C.foo = rhs; }
   ///
-  R visitStaticGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg);
+  R visitStaticGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg);
 
   /// Invocation of the static [getter] with [arguments].
   ///
@@ -934,12 +756,8 @@
   ///     }
   ///     m() { C.foo(null, 42; }
   ///
-  R visitStaticGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitStaticGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Invocation of the static [setter] with [arguments].
   ///
@@ -950,12 +768,8 @@
   ///     }
   ///     m() { C.foo(null, 42; }
   ///
-  R visitStaticSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitStaticSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Read of the top level [field].
   ///
@@ -964,10 +778,7 @@
   ///     var foo;
   ///     m() => foo;
   ///
-  R visitTopLevelFieldGet(
-      Send node,
-      FieldElement field,
-      A arg);
+  R visitTopLevelFieldGet(Send node, FieldElement field, A arg);
 
   /// Assignment of [rhs] to the top level [field].
   ///
@@ -976,11 +787,7 @@
   ///     var foo;
   ///     m() { foo = rhs; }
   ///
-  R visitTopLevelFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg);
 
   /// Assignment of [rhs] to the final top level [field].
   ///
@@ -990,10 +797,7 @@
   ///     m() { foo = rhs; }
   ///
   R visitFinalTopLevelFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+      SendSet node, FieldElement field, Node rhs, A arg);
 
   /// Invocation of the top level [field] with [arguments].
   ///
@@ -1002,12 +806,8 @@
   ///     var foo;
   ///     m() { foo(null, 42); }
   ///
-  R visitTopLevelFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg);
 
   /// Closurization of the top level [function].
   ///
@@ -1016,10 +816,7 @@
   ///     foo(a, b) {};
   ///     m() => foo;
   ///
-  R visitTopLevelFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg);
+  R visitTopLevelFunctionGet(Send node, MethodElement function, A arg);
 
   /// Invocation of the top level [function] with [arguments].
   ///
@@ -1028,12 +825,8 @@
   ///     foo(a, b) {};
   ///     m() { foo(null, 42); }
   ///
-  R visitTopLevelFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitTopLevelFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Invocation of the top level [function] with incompatible [arguments].
   ///
@@ -1044,12 +837,8 @@
   ///     }
   ///     m() { C.foo(null); }
   ///
-  R visitTopLevelFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitTopLevelFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Assignment of [rhs] to the top level [function].
   ///
@@ -1059,10 +848,7 @@
   ///     m() { foo = rhs; }
   ///
   R visitTopLevelFunctionSet(
-      Send node,
-      MethodElement function,
-      Node rhs,
-      A arg);
+      Send node, MethodElement function, Node rhs, A arg);
 
   /// Getter call to the top level [getter].
   ///
@@ -1071,10 +857,7 @@
   ///     get foo => null;
   ///     m() => foo;
   ///
-  R visitTopLevelGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg);
+  R visitTopLevelGetterGet(Send node, FunctionElement getter, A arg);
 
   /// Getter call the top level [setter].
   ///
@@ -1083,10 +866,7 @@
   ///     set foo(_) {}
   ///     m() => foo;
   ///
-  R visitTopLevelSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg);
+  R visitTopLevelSetterGet(Send node, FunctionElement setter, A arg);
 
   /// Setter call to the top level [setter].
   ///
@@ -1096,10 +876,7 @@
   ///     m() { foo = rhs; }
   ///
   R visitTopLevelSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+      SendSet node, FunctionElement setter, Node rhs, A arg);
 
   /// Assignment of [rhs] to the top level [getter].
   ///
@@ -1109,10 +886,7 @@
   ///     m() { foo = rhs; }
   ///
   R visitTopLevelGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg);
+      SendSet node, FunctionElement getter, Node rhs, A arg);
 
   /// Invocation of the top level [getter] with [arguments].
   ///
@@ -1121,12 +895,8 @@
   ///     get foo => null;
   ///     m() { foo(null, 42); }
   ///
-  R visitTopLevelGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitTopLevelGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Invocation of the top level [setter] with [arguments].
   ///
@@ -1135,12 +905,8 @@
   ///     set foo(_) {};
   ///     m() { foo(null, 42); }
   ///
-  R visitTopLevelSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitTopLevelSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Read of the type literal for class [element].
   ///
@@ -1149,10 +915,7 @@
   ///     class C {}
   ///     m() => C;
   ///
-  R visitClassTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg);
+  R visitClassTypeLiteralGet(Send node, ConstantExpression constant, A arg);
 
   /// Invocation of the type literal for class [element] with [arguments].
   ///
@@ -1161,12 +924,8 @@
   ///     class C {}
   ///     m() => C(null, 42);
   ///
-  R visitClassTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitClassTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Assignment of [rhs] to the type literal for class [element].
   ///
@@ -1176,10 +935,7 @@
   ///     m() { C = rhs; }
   ///
   R visitClassTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg);
+      SendSet node, ConstantExpression constant, Node rhs, A arg);
 
   /// Read of the type literal for typedef [element].
   ///
@@ -1188,10 +944,7 @@
   ///     typedef F();
   ///     m() => F;
   ///
-  R visitTypedefTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg);
+  R visitTypedefTypeLiteralGet(Send node, ConstantExpression constant, A arg);
 
   /// Invocation of the type literal for typedef [element] with [arguments].
   ///
@@ -1200,12 +953,8 @@
   ///     typedef F();
   ///     m() => F(null, 42);
   ///
-  R visitTypedefTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitTypedefTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Assignment of [rhs] to the type literal for typedef [element].
   ///
@@ -1215,10 +964,7 @@
   ///     m() { F = rhs; }
   ///
   R visitTypedefTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg);
+      SendSet node, ConstantExpression constant, Node rhs, A arg);
 
   /// Read of the type literal for type variable [element].
   ///
@@ -1229,9 +975,7 @@
   ///     }
   ///
   R visitTypeVariableTypeLiteralGet(
-      Send node,
-      TypeVariableElement element,
-      A arg);
+      Send node, TypeVariableElement element, A arg);
 
   /// Invocation of the type literal for type variable [element] with
   /// [arguments].
@@ -1242,12 +986,8 @@
   ///       m() { T(null, 42); }
   ///     }
   ///
-  R visitTypeVariableTypeLiteralInvoke(
-      Send node,
-      TypeVariableElement element,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Assignment of [rhs] to the type literal for type variable [element].
   ///
@@ -1258,10 +998,7 @@
   ///     }
   ///
   R visitTypeVariableTypeLiteralSet(
-      SendSet node,
-      TypeVariableElement element,
-      Node rhs,
-      A arg);
+      SendSet node, TypeVariableElement element, Node rhs, A arg);
 
   /// Read of the type literal for `dynamic`.
   ///
@@ -1269,10 +1006,7 @@
   ///
   ///     m() => dynamic;
   ///
-  R visitDynamicTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg);
+  R visitDynamicTypeLiteralGet(Send node, ConstantExpression constant, A arg);
 
   /// Invocation of the type literal for `dynamic` with [arguments].
   ///
@@ -1280,12 +1014,8 @@
   ///
   ///     m() { dynamic(null, 42); }
   ///
-  R visitDynamicTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitDynamicTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Assignment of [rhs] to the type literal for `dynamic`.
   ///
@@ -1294,10 +1024,7 @@
   ///     m() { dynamic = rhs; }
   ///
   R visitDynamicTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg);
+      SendSet node, ConstantExpression constant, Node rhs, A arg);
 
   /// Binary expression `left operator right` where [operator] is a user
   /// definable operator. Binary expressions using operator `==` are handled
@@ -1310,11 +1037,7 @@
   ///     mul(a, b) => a * b;
   ///
   R visitBinary(
-      Send node,
-      Node left,
-      BinaryOperator operator,
-      Node right,
-      A arg);
+      Send node, Node left, BinaryOperator operator, Node right, A arg);
 
   /// Binary expression `super operator argument` where [operator] is a user
   /// definable operator implemented on a superclass by [function]. Binary
@@ -1329,12 +1052,8 @@
   ///       m(a) => super + a;
   ///     }
   ///
-  R visitSuperBinary(
-      Send node,
-      FunctionElement function,
-      BinaryOperator operator,
-      Node argument,
-      A arg);
+  R visitSuperBinary(Send node, FunctionElement function,
+      BinaryOperator operator, Node argument, A arg);
 
   /// Binary operation on the unresolved super [element].
   ///
@@ -1346,12 +1065,8 @@
   ///       m() => super + 42;
   ///     }
   ///
-  R visitUnresolvedSuperBinary(
-      Send node,
-      Element element,
-      BinaryOperator operator,
-      Node argument,
-      A arg);
+  R visitUnresolvedSuperBinary(Send node, Element element,
+      BinaryOperator operator, Node argument, A arg);
 
   /// Index expression `receiver[index]`.
   ///
@@ -1359,11 +1074,7 @@
   ///
   ///     lookup(a, b) => a[b];
   ///
-  R visitIndex(
-      Send node,
-      Node receiver,
-      Node index,
-      A arg);
+  R visitIndex(Send node, Node receiver, Node index, A arg);
 
   /// Prefix operation on an index expression `operator receiver[index]` where
   /// the operation is defined by [operator].
@@ -1373,11 +1084,7 @@
   ///     lookup(a, b) => --a[b];
   ///
   R visitIndexPrefix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg);
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg);
 
   /// Postfix operation on an index expression `receiver[index] operator` where
   /// the operation is defined by [operator].
@@ -1387,11 +1094,7 @@
   ///     lookup(a, b) => a[b]++;
   ///
   R visitIndexPostfix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg);
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg);
 
   /// Index expression `super[index]` where 'operator []' is implemented on a
   /// superclass by [function].
@@ -1405,11 +1108,7 @@
   ///       m(a) => super[a];
   ///     }
   ///
-  R visitSuperIndex(
-      Send node,
-      FunctionElement function,
-      Node index,
-      A arg);
+  R visitSuperIndex(Send node, FunctionElement function, Node index, A arg);
 
   /// Index expression `super[index]` where 'operator []' is unresolved.
   ///
@@ -1420,11 +1119,7 @@
   ///       m(a) => super[a];
   ///     }
   ///
-  R visitUnresolvedSuperIndex(
-      Send node,
-      Element element,
-      Node index,
-      A arg);
+  R visitUnresolvedSuperIndex(Send node, Element element, Node index, A arg);
 
   /// Prefix operation on an index expression `operator super[index]` where
   /// 'operator []' is implemented on a superclass by [indexFunction] and
@@ -1485,13 +1180,8 @@
   ///       m(a) => --super[a];
   ///     }
   ///
-  R visitUnresolvedSuperGetterIndexPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedSuperGetterIndexPrefix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg);
 
   /// Postfix operation on an index expression `super[index] operator` where
   /// 'operator []' is unresolved, 'operator []=' is defined by [setter], and
@@ -1506,13 +1196,8 @@
   ///       m(a) => super[a]++;
   ///     }
   ///
-  R visitUnresolvedSuperGetterIndexPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedSuperGetterIndexPostfix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg);
 
   /// Prefix operation on an index expression `operator super[index]` where
   /// 'operator []' is implemented on a superclass by [indexFunction] and
@@ -1570,11 +1255,7 @@
   ///     }
   ///
   R visitUnresolvedSuperIndexPrefix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg);
+      Send node, Element element, Node index, IncDecOperator operator, A arg);
 
   /// Postfix operation on an index expression `super[index] operator` where
   /// both 'operator []' and 'operator []=' are unresolved and the operation is
@@ -1590,11 +1271,7 @@
   ///     }
   ///
   R visitUnresolvedSuperIndexPostfix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg);
+      Send node, Element element, Node index, IncDecOperator operator, A arg);
 
   /// Binary expression `left == right`.
   ///
@@ -1602,11 +1279,7 @@
   ///
   ///     neq(a, b) => a != b;
   ///
-  R visitNotEquals(
-      Send node,
-      Node left,
-      Node right,
-      A arg);
+  R visitNotEquals(Send node, Node left, Node right, A arg);
 
   /// Binary expression `super != argument` where `==` is implemented on a
   /// superclass by [function].
@@ -1621,10 +1294,7 @@
   ///     }
   ///
   R visitSuperNotEquals(
-      Send node,
-      FunctionElement function,
-      Node argument,
-      A arg);
+      Send node, FunctionElement function, Node argument, A arg);
 
   /// Binary expression `left == right`.
   ///
@@ -1632,11 +1302,7 @@
   ///
   ///     eq(a, b) => a == b;
   ///
-  R visitEquals(
-      Send node,
-      Node left,
-      Node right,
-      A arg);
+  R visitEquals(Send node, Node left, Node right, A arg);
 
   /// Binary expression `super == argument` where `==` is implemented on a
   /// superclass by [function].
@@ -1650,11 +1316,7 @@
   ///       m(a) => super == a;
   ///     }
   ///
-  R visitSuperEquals(
-      Send node,
-      FunctionElement function,
-      Node argument,
-      A arg);
+  R visitSuperEquals(Send node, FunctionElement function, Node argument, A arg);
 
   /// Unary expression `operator expression` where [operator] is a user
   /// definable operator.
@@ -1664,11 +1326,7 @@
   ///     neg(a, b) => -a;
   ///     comp(a, b) => ~a;
   ///
-  R visitUnary(
-      Send node,
-      UnaryOperator operator,
-      Node expression,
-      A arg);
+  R visitUnary(Send node, UnaryOperator operator, Node expression, A arg);
 
   /// Unary expression `operator super` where [operator] is a user definable
   /// operator implemented on a superclass by [function].
@@ -1683,10 +1341,7 @@
   ///     }
   ///
   R visitSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      FunctionElement function,
-      A arg);
+      Send node, UnaryOperator operator, FunctionElement function, A arg);
 
   /// Unary operation on the unresolved super [element].
   ///
@@ -1699,10 +1354,7 @@
   ///     }
   ///
   R visitUnresolvedSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      Element element,
-      A arg);
+      Send node, UnaryOperator operator, Element element, A arg);
 
   /// Unary expression `!expression`.
   ///
@@ -1710,10 +1362,7 @@
   ///
   ///     not(a) => !a;
   ///
-  R visitNot(
-      Send node,
-      Node expression,
-      A arg);
+  R visitNot(Send node, Node expression, A arg);
 
   /// Index set expression `receiver[index] = rhs`.
   ///
@@ -1721,12 +1370,7 @@
   ///
   ///     m(receiver, index, rhs) => receiver[index] = rhs;
   ///
-  R visitIndexSet(
-      SendSet node,
-      Node receiver,
-      Node index,
-      Node rhs,
-      A arg);
+  R visitIndexSet(SendSet node, Node receiver, Node index, Node rhs, A arg);
 
   /// Index set expression `super[index] = rhs` where `operator []=` is defined
   /// on a superclass by [function].
@@ -1741,11 +1385,7 @@
   ///     }
   ///
   R visitSuperIndexSet(
-      SendSet node,
-      FunctionElement function,
-      Node index,
-      Node rhs,
-      A arg);
+      SendSet node, FunctionElement function, Node index, Node rhs, A arg);
 
   /// Index set expression `super[index] = rhs` where `operator []=` is
   /// undefined.
@@ -1759,11 +1399,7 @@
   ///     }
   ///
   R visitUnresolvedSuperIndexSet(
-      Send node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg);
+      Send node, Element element, Node index, Node rhs, A arg);
 
   /// If-null, ??, expression with operands [left] and [right].
   ///
@@ -1771,11 +1407,7 @@
   ///
   ///     m() => left ?? right;
   ///
-  R visitIfNull(
-      Send node,
-      Node left,
-      Node right,
-      A arg);
+  R visitIfNull(Send node, Node left, Node right, A arg);
 
   /// Logical and, &&, expression with operands [left] and [right].
   ///
@@ -1783,11 +1415,7 @@
   ///
   ///     m() => left && right;
   ///
-  R visitLogicalAnd(
-      Send node,
-      Node left,
-      Node right,
-      A arg);
+  R visitLogicalAnd(Send node, Node left, Node right, A arg);
 
   /// Logical or, ||, expression with operands [left] and [right].
   ///
@@ -1795,11 +1423,7 @@
   ///
   ///     m() => left || right;
   ///
-  R visitLogicalOr(
-      Send node,
-      Node left,
-      Node right,
-      A arg);
+  R visitLogicalOr(Send node, Node left, Node right, A arg);
 
   /// Is test of [expression] against [type].
   ///
@@ -1808,11 +1432,7 @@
   ///     class C {}
   ///     m() => expression is C;
   ///
-  R visitIs(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg);
+  R visitIs(Send node, Node expression, DartType type, A arg);
 
   /// Is not test of [expression] against [type].
   ///
@@ -1821,11 +1441,7 @@
   ///     class C {}
   ///     m() => expression is! C;
   ///
-  R visitIsNot(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg);
+  R visitIsNot(Send node, Node expression, DartType type, A arg);
 
   /// As cast of [expression] to [type].
   ///
@@ -1834,11 +1450,7 @@
   ///     class C {}
   ///     m() => expression as C;
   ///
-  R visitAs(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg);
+  R visitAs(Send node, Node expression, DartType type, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] of the property on
   /// [receiver] whose getter and setter are defined by [getterSelector] and
@@ -1848,13 +1460,8 @@
   ///
   ///     m(receiver, rhs) => receiver.foo += rhs;
   ///
-  R visitDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] of the property on
   /// a possibly null [receiver] whose getter and setter are defined by
@@ -1864,13 +1471,8 @@
   ///
   ///     m(receiver, rhs) => receiver?.foo += rhs;
   ///
-  R visitIfNotNullDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] of the property on
   /// `this` whose getter and setter are defined by [getterSelector] and
@@ -1889,11 +1491,7 @@
   ///     }
   ///
   R visitThisPropertyCompound(
-      Send node,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+      Send node, Name name, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a [parameter].
   ///
@@ -1901,12 +1499,8 @@
   ///
   ///     m(parameter, rhs) => parameter += rhs;
   ///
-  R visitParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a final
   /// [parameter].
@@ -1915,12 +1509,8 @@
   ///
   ///     m(final parameter, rhs) => parameter += rhs;
   ///
-  R visitFinalParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitFinalParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a local
   /// [variable].
@@ -1932,12 +1522,8 @@
   ///       variable += rhs;
   ///     }
   ///
-  R visitLocalVariableCompound(
-      Send node,
-      LocalVariableElement variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a final local
   /// [variable].
@@ -1949,12 +1535,8 @@
   ///       variable += rhs;
   ///     }
   ///
-  R visitFinalLocalVariableCompound(
-      Send node,
-      LocalVariableElement variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitFinalLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a local
   /// [function].
@@ -1966,12 +1548,8 @@
   ///       function += rhs;
   ///     }
   ///
-  R visitLocalFunctionCompound(
-      Send node,
-      LocalFunctionElement function,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitLocalFunctionCompound(Send node, LocalFunctionElement function,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a static
   /// [field].
@@ -1983,12 +1561,8 @@
   ///       m(rhs) => field += rhs;
   ///     }
   ///
-  R visitStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a final static
   /// [field].
@@ -2000,12 +1574,8 @@
   ///       m(rhs) => field += rhs;
   ///     }
   ///
-  R visitFinalStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitFinalStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// static [getter] and writing to a static [setter].
@@ -2018,13 +1588,8 @@
   ///       m(rhs) => o += rhs;
   ///     }
   ///
-  R visitStaticGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitStaticGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// static [method], that is, closurizing [method], and writing to a static
@@ -2038,13 +1603,8 @@
   ///       m(rhs) => o += rhs;
   ///     }
   ///
-  R visitStaticMethodSetterCompound(
-      Send node,
-      MethodElement method,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitStaticMethodSetterCompound(Send node, MethodElement method,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a top level
   /// [field].
@@ -2054,12 +1614,8 @@
   ///     var field;
   ///     m(rhs) => field += rhs;
   ///
-  R visitTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a final top
   /// level [field].
@@ -2069,12 +1625,8 @@
   ///     final field = 0;
   ///     m(rhs) => field += rhs;
   ///
-  R visitFinalTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitFinalTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// top level [getter] and writing to a top level [setter].
@@ -2085,13 +1637,8 @@
   ///     set o(_) {}
   ///     m(rhs) => o += rhs;
   ///
-  R visitTopLevelGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// top level [method], that is, closurizing [method], and writing to a top
@@ -2103,13 +1650,8 @@
   ///     set o(_) {}
   ///     m(rhs) => o += rhs;
   ///
-  R visitTopLevelMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitTopLevelMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// top level [method], that is, closurizing [method], and writing to an
@@ -2120,12 +1662,8 @@
   ///     o() {}
   ///     m(rhs) => o += rhs;
   ///
-  R visitTopLevelMethodCompound(
-      Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitTopLevelMethodCompound(Send node, FunctionElement method,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a super
   /// [field].
@@ -2139,12 +1677,8 @@
   ///       m(rhs) => super.field += rhs;
   ///     }
   ///
-  R visitSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a final super
   /// [field].
@@ -2158,12 +1692,8 @@
   ///       m(rhs) => super.field += rhs;
   ///     }
   ///
-  R visitFinalSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitFinalSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the [name] property on
   /// [receiver]. That is, [rhs] is only evaluated and assigned, if the value
@@ -2174,11 +1704,7 @@
   ///     m(receiver, rhs) => receiver.foo ??= rhs;
   ///
   R visitDynamicPropertySetIfNull(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg);
+      Send node, Node receiver, Name name, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the [name] property on
   /// [receiver] if not null. That is, [rhs] is only evaluated and assigned,
@@ -2190,11 +1716,7 @@
   ///     m(receiver, rhs) => receiver?.foo ??= rhs;
   ///
   R visitIfNotNullDynamicPropertySetIfNull(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg);
+      Send node, Node receiver, Name name, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the [name] property on `this`.
   /// That is, [rhs] is only evaluated and assigned, if the value of [name] on
@@ -2212,11 +1734,7 @@
   ///       m(rhs) => foo ??= rhs;
   ///     }
   ///
-  R visitThisPropertySetIfNull(
-      Send node,
-      Name name,
-      Node rhs,
-      A arg);
+  R visitThisPropertySetIfNull(Send node, Name name, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to [parameter]. That is, [rhs] is
   /// only evaluated and assigned, if the value of the [parameter] is `null`.
@@ -2226,10 +1744,7 @@
   ///     m(parameter, rhs) => parameter ??= rhs;
   ///
   R visitParameterSetIfNull(
-      Send node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg);
+      Send node, ParameterElement parameter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the final [parameter]. That is,
   /// [rhs] is only evaluated and assigned, if the value of the [parameter] is
@@ -2240,10 +1755,7 @@
   ///     m(final parameter, rhs) => parameter ??= rhs;
   ///
   R visitFinalParameterSetIfNull(
-      Send node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg);
+      Send node, ParameterElement parameter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the local [variable]. That is,
   /// [rhs] is only evaluated and assigned, if the value of the [variable] is
@@ -2257,10 +1769,7 @@
   ///     }
   ///
   R visitLocalVariableSetIfNull(
-      Send node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg);
+      Send node, LocalVariableElement variable, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the final local [variable]. That
   /// is, [rhs] is only evaluated and assigned, if the value of the [variable]
@@ -2274,10 +1783,7 @@
   ///     }
   ///
   R visitFinalLocalVariableSetIfNull(
-      Send node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg);
+      Send node, LocalVariableElement variable, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the local [function]. That is,
   /// [rhs] is only evaluated and assigned, if the value of the [function] is
@@ -2291,10 +1797,7 @@
   ///     }
   ///
   R visitLocalFunctionSetIfNull(
-      Send node,
-      LocalFunctionElement function,
-      Node rhs,
-      A arg);
+      Send node, LocalFunctionElement function, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the static [field]. That is,
   /// [rhs] is only evaluated and assigned, if the value of the [field] is
@@ -2307,11 +1810,7 @@
   ///       m(rhs) => field ??= rhs;
   ///     }
   ///
-  R visitStaticFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R visitStaticFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the final static [field]. That
   /// is, [rhs] is only evaluated and assigned, if the value of the [field] is
@@ -2325,10 +1824,7 @@
   ///     }
   ///
   R visitFinalStaticFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+      Send node, FieldElement field, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the static property defined by
   /// [getter] and [setter]. That is, [rhs] is only evaluated and assigned to
@@ -2342,12 +1838,8 @@
   ///       m(rhs) => o ??= rhs;
   ///     }
   ///
-  R visitStaticGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+  R visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the static property defined by
   /// [method] and [setter]. That is, [rhs] is only evaluated and assigned to
@@ -2363,11 +1855,7 @@
   ///     }
   ///
   R visitStaticMethodSetterSetIfNull(
-      Send node,
-      MethodElement method,
-      MethodElement setter,
-      Node rhs,
-      A arg);
+      Send node, MethodElement method, MethodElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the static [method]. That is,
   /// [rhs] is only evaluated and assigned, if the value of the [method] is
@@ -2379,10 +1867,7 @@
   ///     m(rhs) => o ??= rhs;
   ///
   R visitStaticMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg);
+      Send node, FunctionElement method, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the top level [field]. That is,
   /// [rhs] is only evaluated and assigned, if the value of the [field] is
@@ -2393,11 +1878,7 @@
   ///     var field;
   ///     m(rhs) => field ??= rhs;
   ///
-  R visitTopLevelFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R visitTopLevelFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the final top level [field].
   /// That is, [rhs] is only evaluated and assigned, if the value of the [field]
@@ -2409,10 +1890,7 @@
   ///     m(rhs) => field ??= rhs;
   ///
   R visitFinalTopLevelFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+      Send node, FieldElement field, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the top level property defined
   /// by [getter] and [setter]. That is, [rhs] is only evaluated and assigned to
@@ -2424,12 +1902,8 @@
   ///     set o(_) {}
   ///     m(rhs) => o ??= rhs;
   ///
-  R visitTopLevelGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+  R visitTopLevelGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the top level property defined
   /// by [method] and [setter]. That is, [rhs] is only evaluated and assigned to
@@ -2442,12 +1916,8 @@
   ///     set o(_) {}
   ///     m(rhs) => o ??= rhs;
   ///
-  R visitTopLevelMethodSetterSetIfNull(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+  R visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method,
+      FunctionElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the top level [method]. That is,
   /// [rhs] is only evaluated and assigned, if the value of the [method] is
@@ -2459,10 +1929,7 @@
   ///     m(rhs) => o ??= rhs;
   ///
   R visitTopLevelMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg);
+      Send node, FunctionElement method, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the super [field]. That is,
   /// [rhs] is only evaluated and assigned, if the value of the [field] is
@@ -2477,11 +1944,7 @@
   ///       m(rhs) => super.field ??= rhs;
   ///     }
   ///
-  R visitSuperFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R visitSuperFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the final super [field]. That
   /// is, [rhs] is only evaluated and assigned, if the value of the [field] is
@@ -2497,10 +1960,7 @@
   ///     }
   ///
   R visitFinalSuperFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+      Send node, FieldElement field, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the super property defined
   /// by [readField] and [writtenField]. That is, [rhs] is only evaluated and
@@ -2518,12 +1978,8 @@
   ///       m() => super.field ??= rhs;
   ///     }
   ///
-  R visitSuperFieldFieldSetIfNull(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      Node rhs,
-      A arg);
+  R visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
+      FieldElement writtenField, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the super property defined
   /// by [getter] and [setter]. That is, [rhs] is only evaluated and assigned to
@@ -2539,12 +1995,8 @@
   ///       m(rhs) => super.o ??= rhs;
   ///     }
   ///
-  R visitSuperGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+  R visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the super property defined
   /// by [method] and [setter]. That is, [rhs] is only evaluated and assigned to
@@ -2561,12 +2013,8 @@
   ///       m(rhs) => super.o ??= rhs;
   ///     }
   ///
-  R visitSuperMethodSetterSetIfNull(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+  R visitSuperMethodSetterSetIfNull(Send node, FunctionElement method,
+      FunctionElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the super [method].
   /// That is, [rhs] is only evaluated and assigned, if the value of
@@ -2583,10 +2031,7 @@
   ///     }
   ///
   R visitSuperMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg);
+      Send node, FunctionElement method, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the super property defined
   /// by [setter] with no corresponding getter. That is, [rhs] is only evaluated
@@ -2603,11 +2048,7 @@
   ///     }
   ///
   R visitUnresolvedSuperGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg);
+      Send node, Element element, MethodElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the super property defined
   /// by [getter] with no corresponding setter. That is, [rhs] is only evaluated
@@ -2624,11 +2065,7 @@
   ///     }
   ///
   R visitUnresolvedSuperSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg);
+      Send node, MethodElement getter, Element element, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the top level property defined
   /// by [field] and [setter]. That is, [rhs] is only evaluated and assigned to
@@ -2647,11 +2084,7 @@
   ///     }
   ///
   R visitSuperFieldSetterSetIfNull(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+      Send node, FieldElement field, FunctionElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the top level property defined
   /// by [getter] and [field]. That is, [rhs] is only evaluated and assigned to
@@ -2670,11 +2103,7 @@
   ///     }
   ///
   R visitSuperGetterFieldSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      Node rhs,
-      A arg);
+      Send node, FunctionElement getter, FieldElement field, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to an unresolved super property.
   /// That is, [rhs] is only evaluated and assigned, if the value of the
@@ -2689,11 +2118,7 @@
   ///       m(rhs) => super.unresolved ??= rhs;
   ///     }
   ///
-  R visitUnresolvedSuperSetIfNull(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSuperSetIfNull(Send node, Element element, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the static property defined
   /// by [setter] with no corresponding getter. That is, [rhs] is only evaluated
@@ -2709,11 +2134,7 @@
   ///     m1() => C.foo ??= 42;
   ///
   R visitUnresolvedStaticGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg);
+      Send node, Element element, MethodElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the top level property defined
   /// by [setter] with no corresponding getter. That is, [rhs] is only evaluated
@@ -2726,11 +2147,7 @@
   ///     m1() => foo ??= 42;
   ///
   R visitUnresolvedTopLevelGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg);
+      Send node, Element element, MethodElement setter, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the static property defined
   /// by [getter] with no corresponding setter. That is, [rhs] is only evaluated
@@ -2745,11 +2162,7 @@
   ///     m1() => C.foo ??= 42;
   ///
   R visitUnresolvedStaticSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg);
+      Send node, MethodElement getter, Element element, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the top level property defined
   /// by [getter] with no corresponding setter. That is, [rhs] is only evaluated
@@ -2762,11 +2175,7 @@
   ///     m1() => foo ??= 42;
   ///
   R visitUnresolvedTopLevelSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg);
+      Send node, MethodElement getter, Element element, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to an unresolved property.
   /// That is, [rhs] is only evaluated and assigned, if the value of the
@@ -2780,11 +2189,7 @@
   ///     m2() => C.unresolved ??= 42;
   ///
   // TODO(johnniwinther): Split the cases in which a prefix is resolved.
-  R visitUnresolvedSetIfNull(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSetIfNull(Send node, Element element, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to an invalid expression.
   ///
@@ -2794,11 +2199,7 @@
   ///
   ///     m() => p ??= 42;
   ///
-  R errorInvalidSetIfNull(
-      Send node,
-      ErroneousElement error,
-      Node rhs,
-      A arg);
+  R errorInvalidSetIfNull(Send node, ErroneousElement error, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the class type literal
   /// [contant]. That is, [rhs] is only evaluated and assigned, if the value
@@ -2811,10 +2212,7 @@
   ///     m(rhs) => C ??= rhs;
   ///
   R visitClassTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg);
+      Send node, ConstantExpression constant, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the typedef type literal
   /// [constant]. That is, [rhs] is only evaluated and assigned, if the value
@@ -2827,10 +2225,7 @@
   ///     m(rhs) => F ??= rhs;
   ///
   R visitTypedefTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg);
+      Send node, ConstantExpression constant, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the type literal for the type
   /// variable [element]. That is, [rhs] is only evaluated and assigned, if
@@ -2844,10 +2239,7 @@
   ///     }
   ///
   R visitTypeVariableTypeLiteralSetIfNull(
-      Send node,
-      TypeVariableElement element,
-      Node rhs,
-      A arg);
+      Send node, TypeVariableElement element, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to the dynamic type literal
   /// [constant]. That is, [rhs] is only evaluated and assigned, if the value
@@ -2859,10 +2251,7 @@
   ///     m(rhs) => dynamic ??= rhs;
   ///
   R visitDynamicTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg);
+      Send node, ConstantExpression constant, Node rhs, A arg);
 
   /// Prefix expression with [operator] on a final super [field].
   ///
@@ -2876,10 +2265,7 @@
   ///     }
   ///
   R visitFinalSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on an unresolved super property.
   ///
@@ -2892,10 +2278,7 @@
   ///     }
   ///
   R visitUnresolvedSuperPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+      Send node, Element element, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on an unresolved super property.
   ///
@@ -2908,10 +2291,7 @@
   ///     }
   ///
   R visitUnresolvedSuperPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+      Send node, Element element, IncDecOperator operator, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on an unresolved
   /// super property.
@@ -2925,11 +2305,7 @@
   ///     }
   ///
   R visitUnresolvedSuperCompound(
-      Send node,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+      Send node, Element element, AssignmentOperator operator, Node rhs, A arg);
 
   /// Postfix expression with [operator] on a final super [field].
   ///
@@ -2943,10 +2319,7 @@
   ///     }
   ///
   R visitFinalSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from the
   /// super field [readField] and writing to the different super field
@@ -2964,13 +2337,8 @@
   ///       m() => super.field += rhs;
   ///     }
   ///
-  R visitSuperFieldFieldCompound(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitSuperFieldFieldCompound(Send node, FieldElement readField,
+      FieldElement writtenField, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// super [getter] and writing to a super [setter].
@@ -2985,13 +2353,8 @@
   ///       m(rhs) => super.o += rhs;
   ///     }
   ///
-  R visitSuperGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitSuperGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// super [method], that is, closurizing [method], and writing to a super
@@ -3007,13 +2370,8 @@
   ///       m(rhs) => super.o += rhs;
   ///     }
   ///
-  R visitSuperMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitSuperMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading the
   /// closurized super [method] and trying to invoke the non-existing setter.
@@ -3027,12 +2385,8 @@
   ///       m(rhs) => super.o += rhs;
   ///     }
   ///
-  R visitSuperMethodCompound(
-      Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitSuperMethodCompound(Send node, FunctionElement method,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from the
   /// non-existing super getter and writing to a super [setter].
@@ -3046,13 +2400,8 @@
   ///       m(rhs) => super.o += rhs;
   ///     }
   ///
-  R visitUnresolvedSuperGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSuperGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// super [getter] and writing to the non-existing super setter.
@@ -3066,13 +2415,8 @@
   ///       m(rhs) => super.o += rhs;
   ///     }
   ///
-  R visitUnresolvedSuperSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSuperSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// super [field] and writing to a super [setter].
@@ -3089,13 +2433,8 @@
   ///       m(rhs) => super.o += rhs;
   ///     }
   ///
-  R visitSuperFieldSetterCompound(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitSuperFieldSetterCompound(Send node, FieldElement field,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] reading from a
   /// super [getter] and writing to a super [field].
@@ -3112,13 +2451,8 @@
   ///       m(rhs) => super.o += rhs;
   ///     }
   ///
-  R visitSuperGetterFieldCompound(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitSuperGetterFieldCompound(Send node, FunctionElement getter,
+      FieldElement field, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a type literal
   /// for class [element].
@@ -3128,12 +2462,8 @@
   ///     class C {}
   ///     m(rhs) => C += rhs;
   ///
-  R visitClassTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitClassTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a type literal
   /// for typedef [element].
@@ -3143,12 +2473,8 @@
   ///     typedef F();
   ///     m(rhs) => F += rhs;
   ///
-  R visitTypedefTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitTypedefTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on a type literal
   /// for type variable [element].
@@ -3159,12 +2485,8 @@
   ///       m(rhs) => T += rhs;
   ///     }
   ///
-  R visitTypeVariableTypeLiteralCompound(
-      Send node,
-      TypeVariableElement element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment expression of [rhs] with [operator] on the type
   /// literal for `dynamic`.
@@ -3173,12 +2495,8 @@
   ///
   ///     m(rhs) => dynamic += rhs;
   ///
-  R visitDynamicTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitDynamicTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound index assignment of [rhs] with [operator] to [index] on the
   /// index operators of [receiver].
@@ -3187,13 +2505,8 @@
   ///
   ///     m(receiver, index, rhs) => receiver[index] += rhs;
   ///
-  R visitCompoundIndexSet(
-      SendSet node,
-      Node receiver,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitCompoundIndexSet(SendSet node, Node receiver, Node index,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound index assignment of [rhs] with [operator] to [index] on the index
   /// operators of a super class defined by [getter] and [setter].
@@ -3271,13 +2584,8 @@
   ///       m() => super[1] += 42;
   ///     }
   ///
-  R visitUnresolvedSuperCompoundIndexSet(
-      Send node,
-      Element element,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSuperCompoundIndexSet(Send node, Element element, Node index,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to [index] on the index operators
   /// of [receiver].
@@ -3287,11 +2595,7 @@
   ///     m(receiver, index, rhs) => receiver[index] ??= rhs;
   ///
   R visitIndexSetIfNull(
-      SendSet node,
-      Node receiver,
-      Node index,
-      Node rhs,
-      A arg);
+      SendSet node, Node receiver, Node index, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to [index] on the index operators
   /// of a super class defined by [getter] and [setter].
@@ -3306,13 +2610,8 @@
   ///       m(index, rhs) => super[index] ??= rhs;
   ///     }
   ///
-  R visitSuperIndexSetIfNull(
-      SendSet node,
-      MethodElement getter,
-      MethodElement setter,
-      Node index,
-      Node rhs,
-      A arg);
+  R visitSuperIndexSetIfNull(SendSet node, MethodElement getter,
+      MethodElement setter, Node index, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to [index] on a super class where
   /// the index getter is undefined and the index setter is defined by [setter].
@@ -3326,13 +2625,8 @@
   ///       m() => super[1] ??= 42;
   ///     }
   ///
-  R visitUnresolvedSuperGetterIndexSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element element,
+      MethodElement setter, Node index, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to [index] on a super class where
   /// the index getter is defined by [getter] but the index setter is undefined.
@@ -3346,13 +2640,8 @@
   ///       m() => super[1] ??= 42;
   ///     }
   ///
-  R visitUnresolvedSuperSetterIndexSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSuperSetterIndexSetIfNull(Send node, MethodElement getter,
+      Element element, Node index, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to [index] on a super class where
   /// the index getter and setter are undefined.
@@ -3366,11 +2655,7 @@
   ///     }
   ///
   R visitUnresolvedSuperIndexSetIfNull(
-      Send node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg);
+      Send node, Element element, Node index, Node rhs, A arg);
 
   /// Prefix expression with [operator] of the property on [receiver] whose
   /// getter and setter are defined by [getterSelector] and [setterSelector],
@@ -3381,11 +2666,7 @@
   ///     m(receiver) => ++receiver.foo;
   ///
   R visitDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] of the property on a possibly null
   /// [receiver] whose getter and setter are defined by [getterSelector] and
@@ -3396,11 +2677,7 @@
   ///     m(receiver) => ++receiver?.foo;
   ///
   R visitIfNotNullDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a [parameter].
   ///
@@ -3409,10 +2686,7 @@
   ///     m(parameter) => ++parameter;
   ///
   R visitParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg);
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a final [parameter].
   ///
@@ -3421,10 +2695,7 @@
   ///     m(final parameter) => ++parameter;
   ///
   R visitFinalParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg);
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a local [variable].
   ///
@@ -3436,10 +2707,7 @@
   ///     }
   ///
   R visitLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg);
+      Send node, LocalVariableElement variable, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a final local [variable].
   ///
@@ -3451,10 +2719,7 @@
   ///     }
   ///
   R visitFinalLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg);
+      Send node, LocalVariableElement variable, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a local [function].
   ///
@@ -3466,11 +2731,7 @@
   ///     }
   ///
   R visitLocalFunctionPrefix(
-      Send node,
-      LocalFunctionElement function,
-      IncDecOperator operator,
-      A arg);
-
+      Send node, LocalFunctionElement function, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] of the property on `this` whose getter
   /// and setter are defined by [getterSelector] and [setterSelector],
@@ -3489,10 +2750,7 @@
   ///     }
   ///
   R visitThisPropertyPrefix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg);
+      Send node, Name name, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a static [field].
   ///
@@ -3504,10 +2762,7 @@
   ///     }
   ///
   R visitStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a final static [field].
   ///
@@ -3519,10 +2774,7 @@
   ///     }
   ///
   R visitFinalStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a static [getter] and
   /// writing to a static [setter].
@@ -3535,13 +2787,8 @@
   ///       m() => ++o;
   ///     }
   ///
-  R visitStaticGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
-
+  R visitStaticGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a static [method], that is,
   /// closurizing [method], and writing to a static [setter].
@@ -3554,12 +2801,8 @@
   ///       m() => ++o;
   ///     }
   ///
-  R visitStaticMethodSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitStaticMethodSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a top level [field].
   ///
@@ -3569,10 +2812,7 @@
   ///     m() => ++field;
   ///
   R visitTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a final top level [field].
   ///
@@ -3582,10 +2822,7 @@
   ///     m() => ++field;
   ///
   R visitFinalTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a top level [getter] and
   /// writing to a top level [setter].
@@ -3596,12 +2833,8 @@
   ///     set o(_) {}
   ///     m() => ++o;
   ///
-  R visitTopLevelGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a top level [method], that
   /// is, closurizing [method], and writing to a top level [setter].
@@ -3612,12 +2845,8 @@
   ///     set o(_) {}
   ///     m() => ++o;
   ///
-  R visitTopLevelMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a super [field].
   ///
@@ -3631,10 +2860,7 @@
   ///     }
   ///
   R visitSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from the super field [readField]
   /// and writing to the different super field [writtenField].
@@ -3651,12 +2877,8 @@
   ///       m() => ++super.field;
   ///     }
   ///
-  R visitSuperFieldFieldPrefix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg);
+  R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a super [field] and writing
   /// to a super [setter].
@@ -3673,13 +2895,8 @@
   ///       m() => ++super.field;
   ///     }
   ///
-  R visitSuperFieldSetterPrefix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
-
+  R visitSuperFieldSetterPrefix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a super [getter] and
   /// writing to a super [setter].
@@ -3694,12 +2911,8 @@
   ///       m() => ++super.field;
   ///     }
   ///
-  R visitSuperGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a super [getter] and
   /// writing to a super [field].
@@ -3716,12 +2929,8 @@
   ///       m() => ++super.field;
   ///     }
   ///
-  R visitSuperGetterFieldPrefix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+  R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a super [method], that is,
   /// closurizing [method], and writing to a super [setter].
@@ -3736,12 +2945,8 @@
   ///       m() => ++super.o;
   ///     }
   ///
-  R visitSuperMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a super [method], that is,
   /// closurizing [method], and writing to an unresolved super setter.
@@ -3757,10 +2962,7 @@
   ///     }
   ///
   R visitSuperMethodPrefix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg);
+      Send node, FunctionElement method, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from an unresolved super getter
   /// and writing to a super [setter].
@@ -3775,12 +2977,8 @@
   ///     }
   ///
   ///
-  R visitUnresolvedSuperGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedSuperGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a super [getter] and
   /// writing to an unresolved super setter.
@@ -3795,12 +2993,8 @@
   ///     }
   ///
   ///
-  R visitUnresolvedSuperSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a type literal for a class [element].
   ///
@@ -3810,10 +3004,7 @@
   ///     m() => ++C;
   ///
   R visitClassTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a type literal for a typedef
   /// [element].
@@ -3824,10 +3015,7 @@
   ///     m() => ++F;
   ///
   R visitTypedefTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on a type literal for a type variable
   /// [element].
@@ -3839,10 +3027,7 @@
   ///     }
   ///
   R visitTypeVariableTypeLiteralPrefix(
-      Send node,
-      TypeVariableElement element,
-      IncDecOperator operator,
-      A arg);
+      Send node, TypeVariableElement element, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] on the type literal for `dynamic`.
   ///
@@ -3851,10 +3036,7 @@
   ///     m() => ++dynamic;
   ///
   R visitDynamicTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] of the property on [receiver] whose
   /// getter and setter are defined by [getterSelector] and [setterSelector],
@@ -3865,11 +3047,7 @@
   ///     m(receiver) => receiver.foo++;
   ///
   R visitDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] of the property on a possibly null
   /// [receiver] whose getter and setter are defined by [getterSelector] and
@@ -3880,11 +3058,7 @@
   ///     m(receiver) => receiver?.foo++;
   ///
   R visitIfNotNullDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a [parameter].
   ///
@@ -3893,10 +3067,7 @@
   ///     m(parameter) => parameter++;
   ///
   R visitParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg);
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a final [parameter].
   ///
@@ -3905,10 +3076,7 @@
   ///     m(final parameter) => parameter++;
   ///
   R visitFinalParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg);
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a local [variable].
   ///
@@ -3920,10 +3088,7 @@
   ///     }
   ///
   R visitLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg);
+      Send node, LocalVariableElement variable, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a final local [variable].
   ///
@@ -3935,10 +3100,7 @@
   ///     }
   ///
   R visitFinalLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg);
+      Send node, LocalVariableElement variable, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a local [function].
   ///
@@ -3950,11 +3112,7 @@
   ///     }
   ///
   R visitLocalFunctionPostfix(
-      Send node,
-      LocalFunctionElement function,
-      IncDecOperator operator,
-      A arg);
-
+      Send node, LocalFunctionElement function, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] of the property on `this` whose getter
   /// and setter are defined by [getterSelector] and [setterSelector],
@@ -3973,10 +3131,7 @@
   ///     }
   ///
   R visitThisPropertyPostfix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg);
+      Send node, Name name, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a static [field].
   ///
@@ -3988,10 +3143,7 @@
   ///     }
   ///
   R visitStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a final static [field].
   ///
@@ -4003,10 +3155,7 @@
   ///     }
   ///
   R visitFinalStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a static [getter] and
   /// writing to a static [setter].
@@ -4019,13 +3168,8 @@
   ///       m() => o++;
   ///     }
   ///
-  R visitStaticGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
-
+  R visitStaticGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a static [method], that
   /// is, closurizing [method], and writing to a static [setter].
@@ -4038,12 +3182,8 @@
   ///       m() => o++;
   ///     }
   ///
-  R visitStaticMethodSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitStaticMethodSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a top level [field].
   ///
@@ -4053,10 +3193,7 @@
   ///     m() => field++;
   ///
   R visitTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a final top level [field].
   ///
@@ -4066,10 +3203,7 @@
   ///     m() => field++;
   ///
   R visitFinalTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a top level [getter] and
   /// writing to a top level [setter].
@@ -4080,12 +3214,8 @@
   ///     set o(_) {}
   ///     m() => o++;
   ///
-  R visitTopLevelGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a top level [method], that
   /// is, closurizing [method], and writing to a top level [setter].
@@ -4096,12 +3226,8 @@
   ///     set o(_) {}
   ///     m() => o++;
   ///
-  R visitTopLevelMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a super [field].
   ///
@@ -4115,10 +3241,7 @@
   ///     }
   ///
   R visitSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+      Send node, FieldElement field, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from the super field
   /// [readField] and writing to the different super field [writtenField].
@@ -4135,12 +3258,8 @@
   ///       m() => super.field++;
   ///     }
   ///
-  R visitSuperFieldFieldPostfix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg);
+  R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a super [field] and
   /// writing to a super [setter].
@@ -4157,13 +3276,8 @@
   ///       m() => super.field++;
   ///     }
   ///
-  R visitSuperFieldSetterPostfix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
-
+  R visitSuperFieldSetterPostfix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a super [getter] and
   /// writing to a super [setter].
@@ -4178,12 +3292,8 @@
   ///       m() => super.field++;
   ///     }
   ///
-  R visitSuperGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a super [getter] and
   /// writing to a super [field].
@@ -4200,12 +3310,8 @@
   ///       m() => super.field++;
   ///     }
   ///
-  R visitSuperGetterFieldPostfix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg);
+  R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a super [method], that is,
   /// closurizing [method], and writing to a super [setter].
@@ -4220,12 +3326,8 @@
   ///       m() => super.o++;
   ///     }
   ///
-  R visitSuperMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] reading from a super [method], that is,
   /// closurizing [method], and writing to an unresolved super.
@@ -4241,10 +3343,7 @@
   ///     }
   ///
   R visitSuperMethodPostfix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg);
+      Send node, FunctionElement method, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from an unresolved super getter
   /// and writing to a super [setter].
@@ -4259,12 +3358,8 @@
   ///     }
   ///
   ///
-  R visitUnresolvedSuperGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedSuperGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg);
 
   /// Prefix expression with [operator] reading from a super [getter] and
   /// writing to an unresolved super setter.
@@ -4279,12 +3374,8 @@
   ///     }
   ///
   ///
-  R visitUnresolvedSuperSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a type literal for a class
   /// [element].
@@ -4295,10 +3386,7 @@
   ///     m() => C++;
   ///
   R visitClassTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a type literal for a typedef
   /// [element].
@@ -4309,10 +3397,7 @@
   ///     m() => F++;
   ///
   R visitTypedefTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on a type literal for a type variable
   /// [element].
@@ -4324,10 +3409,7 @@
   ///     }
   ///
   R visitTypeVariableTypeLiteralPostfix(
-      Send node,
-      TypeVariableElement element,
-      IncDecOperator operator,
-      A arg);
+      Send node, TypeVariableElement element, IncDecOperator operator, A arg);
 
   /// Postfix expression with [operator] on the type literal for `dynamic`.
   ///
@@ -4336,10 +3418,7 @@
   ///     m() => dynamic++;
   ///
   R visitDynamicTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg);
 
   /// Read of the [constant].
   ///
@@ -4348,10 +3427,7 @@
   ///     const c = c;
   ///     m() => c;
   ///
-  R visitConstantGet(
-      Send node,
-      ConstantExpression constant,
-      A arg);
+  R visitConstantGet(Send node, ConstantExpression constant, A arg);
 
   /// Invocation of the [constant] with [arguments].
   ///
@@ -4360,12 +3436,8 @@
   ///     const c = null;
   ///     m() => c(null, 42);
   ///
-  R visitConstantInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitConstantInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// Read of the unresolved [element].
   ///
@@ -4385,10 +3457,7 @@
   ///     m11() => unresolved?.Foo?.bar;
   ///
   // TODO(johnniwinther): Split the cases in which a prefix is resolved.
-  R visitUnresolvedGet(
-      Send node,
-      Element element,
-      A arg);
+  R visitUnresolvedGet(Send node, Element element, A arg);
 
   /// Read of the unresolved super [element].
   ///
@@ -4399,10 +3468,7 @@
   ///       m() => super.foo;
   ///     }
   ///
-  R visitUnresolvedSuperGet(
-      Send node,
-      Element element,
-      A arg);
+  R visitUnresolvedSuperGet(Send node, Element element, A arg);
 
   /// Assignment of [rhs] to the unresolved [element].
   ///
@@ -4422,11 +3488,7 @@
   ///     m11() => unresolved?.Foo?.bar = 42;
   ///
   // TODO(johnniwinther): Split the cases in which a prefix is resolved.
-  R visitUnresolvedSet(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSet(Send node, Element element, Node rhs, A arg);
 
   ///  Assignment of [rhs] to the unresolved super [element].
   ///
@@ -4437,11 +3499,7 @@
   ///       m() => super.foo = 42;
   ///     }
   ///
-  R visitUnresolvedSuperSet(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg);
+  R visitUnresolvedSuperSet(Send node, Element element, Node rhs, A arg);
 
   /// Invocation of the unresolved [element] with [arguments].
   ///
@@ -4462,11 +3520,7 @@
   ///
   // TODO(johnniwinther): Split the cases in which a prefix is resolved.
   R visitUnresolvedInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+      Send node, Element element, NodeList arguments, Selector selector, A arg);
 
   /// Invocation of the unresolved super [element] with [arguments].
   ///
@@ -4478,11 +3532,7 @@
   ///     }
   ///
   R visitUnresolvedSuperInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+      Send node, Element element, NodeList arguments, Selector selector, A arg);
 
   /// Compound assignment of [rhs] with [operator] reading from the
   /// non-existing static getter and writing to the static [setter].
@@ -4494,13 +3544,8 @@
   ///     }
   ///     m1() => C.foo += 42;
   ///
-  R visitUnresolvedStaticGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitUnresolvedStaticGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment of [rhs] with [operator] reading from the
   /// non-existing top level getter and writing to the top level [setter].
@@ -4510,13 +3555,8 @@
   ///     set foo(_) {}
   ///     m1() => foo += 42;
   ///
-  R visitUnresolvedTopLevelGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitUnresolvedTopLevelGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment of [rhs] with [operator] reading from the static
   /// [getter] and writing to the non-existing static setter.
@@ -4528,13 +3568,8 @@
   ///     }
   ///     m1() => C.foo += 42;
   ///
-  R visitUnresolvedStaticSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitUnresolvedStaticSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment of [rhs] with [operator] reading from the top level
   /// [getter] and writing to the non-existing top level setter.
@@ -4544,13 +3579,8 @@
   ///     get foo => 42;
   ///     m1() => foo += 42;
   ///
-  R visitUnresolvedTopLevelSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment of [rhs] with [operator] reading the closurized static
   /// [method] and trying to invoke the non-existing setter.
@@ -4562,12 +3592,8 @@
   ///     }
   ///     m1() => C.foo += 42;
   ///
-  R visitStaticMethodCompound(
-      Send node,
-      MethodElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R visitStaticMethodCompound(Send node, MethodElement method,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Compound assignment of [rhs] where both getter and setter are unresolved.
   ///
@@ -4588,11 +3614,7 @@
   ///
   // TODO(johnniwinther): Split the cases in which a prefix is resolved.
   R visitUnresolvedCompound(
-      Send node,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+      Send node, Element element, AssignmentOperator operator, Node rhs, A arg);
 
   /// Prefix operation of [operator] reading from the non-existing static getter
   /// and writing to the static [setter].
@@ -4604,12 +3626,8 @@
   ///     }
   ///     m1() => ++C.foo;
   ///
-  R visitUnresolvedStaticGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedStaticGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg);
 
   /// Prefix operation of [operator] reading from the non-existing top level
   /// getter and writing to the top level [setter].
@@ -4619,12 +3637,8 @@
   ///     set foo(_) {}
   ///     m1() => ++foo;
   ///
-  R visitUnresolvedTopLevelGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedTopLevelGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg);
 
   /// Prefix operation of [operator] reading from the static [getter] and
   /// writing to the non-existing static setter.
@@ -4636,12 +3650,8 @@
   ///     }
   ///     m1() => ++C.foo;
   ///
-  R visitUnresolvedStaticSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg);
 
   /// Postfix operation of [operator] reading from the top level [getter] and
   /// writing to the non-existing top level setter.
@@ -4651,12 +3661,8 @@
   ///     get foo => 42;
   ///     m1() => ++foo;
   ///
-  R visitUnresolvedTopLevelSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg);
 
   /// Prefix operation of [operator] reading the closurized static [method] and
   /// trying to invoke the non-existing setter.
@@ -4669,10 +3675,7 @@
   ///     m1() => ++C.foo;
   ///
   R visitStaticMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg);
+      Send node, MethodElement method, IncDecOperator operator, A arg);
 
   /// Prefix operation of [operator] reading the closurized top level [method]
   /// and trying to invoke the non-existing setter.
@@ -4685,10 +3688,7 @@
   ///     m1() => ++C.foo;
   ///
   R visitTopLevelMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg);
+      Send node, MethodElement method, IncDecOperator operator, A arg);
 
   /// Prefix operation where both getter and setter are unresolved.
   ///
@@ -4709,10 +3709,7 @@
   ///
   // TODO(johnniwinther): Split the cases in which a prefix is resolved.
   R visitUnresolvedPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+      Send node, Element element, IncDecOperator operator, A arg);
 
   /// Postfix operation of [operator] reading from the non-existing static
   /// getter and writing to the static [setter].
@@ -4724,12 +3721,8 @@
   ///     }
   ///     m1() => C.foo++;
   ///
-  R visitUnresolvedStaticGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedStaticGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg);
 
   /// Postfix operation of [operator] reading from the non-existing top level
   /// getter and writing to the top level [setter].
@@ -4739,12 +3732,8 @@
   ///     set foo(_) {}
   ///     m1() => foo++;
   ///
-  R visitUnresolvedTopLevelGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedTopLevelGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg);
 
   /// Postfix operation of [operator] reading from the static [getter] and
   /// writing to the non-existing static setter.
@@ -4756,12 +3745,8 @@
   ///     }
   ///     m1() => C.foo++;
   ///
-  R visitUnresolvedStaticSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg);
 
   /// Postfix operation of [operator] reading from the top level [getter] and
   /// writing to the non-existing top level setter.
@@ -4771,12 +3756,8 @@
   ///     get foo => 42;
   ///     m1() => foo++;
   ///
-  R visitUnresolvedTopLevelSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+  R visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg);
 
   /// Postfix operation of [operator] reading the closurized static [method] and
   /// trying to invoke the non-existing setter.
@@ -4789,10 +3770,7 @@
   ///     m1() => C.foo++;
   ///
   R visitStaticMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg);
+      Send node, MethodElement method, IncDecOperator operator, A arg);
 
   /// Postfix operation of [operator] reading the closurized top level [method]
   /// and trying to invoke the non-existing setter.
@@ -4805,10 +3783,7 @@
   ///     m1() => C.foo++;
   ///
   R visitTopLevelMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg);
+      Send node, MethodElement method, IncDecOperator operator, A arg);
 
   /// Postfix operation where both getter and setter are unresolved.
   ///
@@ -4829,26 +3804,16 @@
   ///
   // TODO(johnniwinther): Split the cases in which a prefix is resolved.
   R visitUnresolvedPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg);
+      Send node, Element element, IncDecOperator operator, A arg);
 
   /// Invocation of an undefined unary [operator] on [expression].
   R errorUndefinedUnaryExpression(
-      Send node,
-      Operator operator,
-      Node expression,
-      A arg);
+      Send node, Operator operator, Node expression, A arg);
 
   /// Invocation of an undefined unary [operator] with operands
   /// [left] and [right].
   R errorUndefinedBinaryExpression(
-      Send node,
-      Node left,
-      Operator operator,
-      Node right,
-      A arg);
+      Send node, Node left, Operator operator, Node right, A arg);
 
   /// Const invocation of a [constant] constructor.
   ///
@@ -4860,9 +3825,7 @@
   ///     m() => const C<int>(true, 42);
   ///
   R visitConstConstructorInvoke(
-      NewExpression node,
-      ConstructedConstantExpression constant,
-      A arg);
+      NewExpression node, ConstructedConstantExpression constant, A arg);
 
   /// Const invocation of the `bool.fromEnvironment` constructor.
   ///
@@ -4870,10 +3833,8 @@
   ///
   ///     m() => const bool.fromEnvironment('foo', defaultValue: false);
   ///
-  R visitBoolFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      BoolFromEnvironmentConstantExpression constant,
-      A arg);
+  R visitBoolFromEnvironmentConstructorInvoke(NewExpression node,
+      BoolFromEnvironmentConstantExpression constant, A arg);
 
   /// Const invocation of the `int.fromEnvironment` constructor.
   ///
@@ -4882,9 +3843,7 @@
   ///     m() => const int.fromEnvironment('foo', defaultValue: 42);
   ///
   R visitIntFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      IntFromEnvironmentConstantExpression constant,
-      A arg);
+      NewExpression node, IntFromEnvironmentConstantExpression constant, A arg);
 
   /// Const invocation of the `String.fromEnvironment` constructor.
   ///
@@ -4892,10 +3851,8 @@
   ///
   ///     m() => const String.fromEnvironment('foo', defaultValue: 'bar');
   ///
-  R visitStringFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      StringFromEnvironmentConstantExpression constant,
-      A arg);
+  R visitStringFromEnvironmentConstructorInvoke(NewExpression node,
+      StringFromEnvironmentConstantExpression constant, A arg);
 
   /// Invocation of a generative [constructor] on [type] with [arguments].
   ///
@@ -4996,13 +3953,8 @@
   ///
   // TODO(johnniwinther): Change [type] to [InterfaceType] when is it not
   // `dynamic`.
-  R visitUnresolvedConstructorInvoke(
-      NewExpression node,
-      Element constructor,
-      DartType type,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+  R visitUnresolvedConstructorInvoke(NewExpression node, Element constructor,
+      DartType type, NodeList arguments, Selector selector, A arg);
 
   /// Invocation of a constructor on an unresolved [type] with [arguments].
   ///
@@ -5014,13 +3966,8 @@
   ///
   // TODO(johnniwinther): Change [type] to [MalformedType] when is it not
   // `dynamic`.
-  R visitUnresolvedClassConstructorInvoke(
-      NewExpression node,
-      Element element,
-      DartType type,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+  R visitUnresolvedClassConstructorInvoke(NewExpression node, Element element,
+      DartType type, NodeList arguments, Selector selector, A arg);
 
   /// Constant invocation of a non-constant constructor.
   ///
@@ -5031,13 +3978,8 @@
   ///     }
   ///     m() => const C(true, 42);
   ///
-  R errorNonConstantConstructorInvoke(
-      NewExpression node,
-      Element element,
-      DartType type,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R errorNonConstantConstructorInvoke(NewExpression node, Element element,
+      DartType type, NodeList arguments, CallStructure callStructure, A arg);
 
   /// Invocation of a constructor on an abstract [type] with [arguments].
   ///
@@ -5101,11 +4043,7 @@
   ///
   ///     m() => p;
   ///
-  R errorInvalidGet(
-      Send node,
-      ErroneousElement error,
-      A arg);
-
+  R errorInvalidGet(Send node, ErroneousElement error, A arg);
 
   /// Invocation of an invalid expression with [arguments].
   ///
@@ -5115,12 +4053,8 @@
   ///
   ///     m() => p(null, 42);
   ///
-  R errorInvalidInvoke(
-      Send node,
-      ErroneousElement error,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+  R errorInvalidInvoke(Send node, ErroneousElement error, NodeList arguments,
+      Selector selector, A arg);
 
   /// Assignment of [rhs] to an invalid expression.
   ///
@@ -5130,11 +4064,7 @@
   ///
   ///     m() { p = 42; }
   ///
-  R errorInvalidSet(
-      Send node,
-      ErroneousElement error,
-      Node rhs,
-      A arg);
+  R errorInvalidSet(Send node, ErroneousElement error, Node rhs, A arg);
 
   /// Prefix operation on an invalid expression.
   ///
@@ -5145,10 +4075,7 @@
   ///     m() => ++p;
   ///
   R errorInvalidPrefix(
-      Send node,
-      ErroneousElement error,
-      IncDecOperator operator,
-      A arg);
+      Send node, ErroneousElement error, IncDecOperator operator, A arg);
 
   /// Postfix operation on an invalid expression.
   ///
@@ -5159,10 +4086,7 @@
   ///     m() => p--;
   ///
   R errorInvalidPostfix(
-      Send node,
-      ErroneousElement error,
-      IncDecOperator operator,
-      A arg);
+      Send node, ErroneousElement error, IncDecOperator operator, A arg);
 
   /// Compound assignment of [operator] with [rhs] on an invalid expression.
   ///
@@ -5172,12 +4096,8 @@
   ///
   ///     m() => p += 42;
   ///
-  R errorInvalidCompound(
-      Send node,
-      ErroneousElement error,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R errorInvalidCompound(Send node, ErroneousElement error,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// If-null assignment expression of [rhs] to [index] on the index operators
   /// of an invalid expression.
@@ -5189,11 +4109,7 @@
   ///     m(index, rhs) => p[index] ??= rhs;
   ///
   R errorInvalidIndexSetIfNull(
-      SendSet node,
-      ErroneousElement error,
-      Node index,
-      Node rhs,
-      A arg);
+      SendSet node, ErroneousElement error, Node index, Node rhs, A arg);
 
   /// Unary operation with [operator] on an invalid expression.
   ///
@@ -5204,10 +4120,7 @@
   ///     }
   ///
   R errorInvalidUnary(
-      Send node,
-      UnaryOperator operator,
-      ErroneousElement error,
-      A arg);
+      Send node, UnaryOperator operator, ErroneousElement error, A arg);
 
   /// Equals operation on an invalid left expression.
   ///
@@ -5217,11 +4130,7 @@
   ///       static m() => super == null;
   ///     }
   ///
-  R errorInvalidEquals(
-      Send node,
-      ErroneousElement error,
-      Node right,
-      A arg);
+  R errorInvalidEquals(Send node, ErroneousElement error, Node right, A arg);
 
   /// Not equals operation on an invalid left expression.
   ///
@@ -5231,11 +4140,7 @@
   ///       static m() => super != null;
   ///     }
   ///
-  R errorInvalidNotEquals(
-      Send node,
-      ErroneousElement error,
-      Node right,
-      A arg);
+  R errorInvalidNotEquals(Send node, ErroneousElement error, Node right, A arg);
 
   /// Binary operation with [operator] on an invalid left expression.
   ///
@@ -5245,12 +4150,8 @@
   ///       static m() => super + 0;
   ///     }
   ///
-  R errorInvalidBinary(
-      Send node,
-      ErroneousElement error,
-      BinaryOperator operator,
-      Node right,
-      A arg);
+  R errorInvalidBinary(Send node, ErroneousElement error,
+      BinaryOperator operator, Node right, A arg);
 
   /// Index operation on an invalid expression.
   ///
@@ -5260,11 +4161,7 @@
   ///       static m() => super[0];
   ///     }
   ///
-  R errorInvalidIndex(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      A arg);
+  R errorInvalidIndex(Send node, ErroneousElement error, Node index, A arg);
 
   /// Index set operation on an invalid expression.
   ///
@@ -5275,11 +4172,7 @@
   ///     }
   ///
   R errorInvalidIndexSet(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      Node rhs,
-      A arg);
+      Send node, ErroneousElement error, Node index, Node rhs, A arg);
 
   /// Compound index set operation on an invalid expression.
   ///
@@ -5289,13 +4182,8 @@
   ///       static m() => super[0] += 42;
   ///     }
   ///
-  R errorInvalidCompoundIndexSet(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R errorInvalidCompoundIndexSet(Send node, ErroneousElement error, Node index,
+      AssignmentOperator operator, Node rhs, A arg);
 
   /// Prefix index operation on an invalid expression.
   ///
@@ -5305,12 +4193,8 @@
   ///       static m() => --super[0];
   ///     }
   ///
-  R errorInvalidIndexPrefix(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      IncDecOperator operator,
-      A arg);
+  R errorInvalidIndexPrefix(Send node, ErroneousElement error, Node index,
+      IncDecOperator operator, A arg);
 
   /// Postfix index operation on an invalid expression.
   ///
@@ -5320,12 +4204,8 @@
   ///       static m() => super[0]++;
   ///     }
   ///
-  R errorInvalidIndexPostfix(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      IncDecOperator operator,
-      A arg);
+  R errorInvalidIndexPostfix(Send node, ErroneousElement error, Node index,
+      IncDecOperator operator, A arg);
 
   /// Access of library through a deferred [prefix].
   ///
@@ -5338,10 +4218,7 @@
   /// This visit method is special in that it is called as a pre-step to calling
   /// the visit method for the actual access. Therefore this method cannot
   /// return a result to its caller.
-  void previsitDeferredAccess(
-      Send node,
-      PrefixElement prefix,
-      A arg);
+  void previsitDeferredAccess(Send node, PrefixElement prefix, A arg);
 }
 
 abstract class SemanticDeclarationVisitor<R, A> {
@@ -5360,10 +4237,7 @@
   ///     get m => 42;
   ///
   R visitTopLevelGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg);
+      FunctionExpression node, MethodElement getter, Node body, A arg);
 
   /// A declaration of a top level [setter].
   ///
@@ -5371,12 +4245,8 @@
   ///
   ///     set m(a) {}
   ///
-  R visitTopLevelSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitTopLevelSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, Node body, A arg);
 
   /// A declaration of a top level [function].
   ///
@@ -5384,12 +4254,8 @@
   ///
   ///     m(a) {}
   ///
-  R visitTopLevelFunctionDeclaration(
-      FunctionExpression node,
-      MethodElement function,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitTopLevelFunctionDeclaration(FunctionExpression node,
+      MethodElement function, NodeList parameters, Node body, A arg);
 
   /// A declaration of a static [getter].
   ///
@@ -5400,10 +4266,7 @@
   ///     }
   ///
   R visitStaticGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg);
+      FunctionExpression node, MethodElement getter, Node body, A arg);
 
   /// A declaration of a static [setter].
   ///
@@ -5413,12 +4276,8 @@
   ///       static set m(a) {}
   ///     }
   ///
-  R visitStaticSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitStaticSetterDeclaration(FunctionExpression node, MethodElement setter,
+      NodeList parameters, Node body, A arg);
 
   /// A declaration of a static [function].
   ///
@@ -5428,12 +4287,8 @@
   ///       static m(a) {}
   ///     }
   ///
-  R visitStaticFunctionDeclaration(
-      FunctionExpression node,
-      MethodElement function,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitStaticFunctionDeclaration(FunctionExpression node,
+      MethodElement function, NodeList parameters, Node body, A arg);
 
   /// A declaration of an abstract instance [getter].
   ///
@@ -5444,9 +4299,7 @@
   ///     }
   ///
   R visitAbstractGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      A arg);
+      FunctionExpression node, MethodElement getter, A arg);
 
   /// A declaration of an abstract instance [setter].
   ///
@@ -5456,11 +4309,8 @@
   ///       set m(a);
   ///     }
   ///
-  R visitAbstractSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      A arg);
+  R visitAbstractSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, A arg);
 
   /// A declaration of an abstract instance [method].
   ///
@@ -5470,11 +4320,8 @@
   ///       m(a);
   ///     }
   ///
-  R visitAbstractMethodDeclaration(
-      FunctionExpression node,
-      MethodElement method,
-      NodeList parameters,
-      A arg);
+  R visitAbstractMethodDeclaration(FunctionExpression node,
+      MethodElement method, NodeList parameters, A arg);
 
   /// A declaration of an instance [getter].
   ///
@@ -5485,10 +4332,7 @@
   ///     }
   ///
   R visitInstanceGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg);
+      FunctionExpression node, MethodElement getter, Node body, A arg);
 
   /// A declaration of an instance [setter].
   ///
@@ -5498,12 +4342,8 @@
   ///       set m(a) {}
   ///     }
   ///
-  R visitInstanceSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitInstanceSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, Node body, A arg);
 
   /// A declaration of an instance [method].
   ///
@@ -5513,12 +4353,8 @@
   ///       m(a) {}
   ///     }
   ///
-  R visitInstanceMethodDeclaration(
-      FunctionExpression node,
-      MethodElement method,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitInstanceMethodDeclaration(FunctionExpression node,
+      MethodElement method, NodeList parameters, Node body, A arg);
 
   /// A declaration of a local [function].
   ///
@@ -5528,12 +4364,8 @@
   ///       local(a) {}
   ///     }
   ///
-  R visitLocalFunctionDeclaration(
-      FunctionExpression node,
-      LocalFunctionElement function,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitLocalFunctionDeclaration(FunctionExpression node,
+      LocalFunctionElement function, NodeList parameters, Node body, A arg);
 
   /// A declaration of a [closure].
   ///
@@ -5543,12 +4375,8 @@
   ///       var closure = (a) {};
   ///     }
   ///
-  R visitClosureDeclaration(
-      FunctionExpression node,
-      LocalFunctionElement closure,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitClosureDeclaration(FunctionExpression node,
+      LocalFunctionElement closure, NodeList parameters, Node body, A arg);
 
   /// A declaration of the [index]th [parameter] in a constructor, setter,
   /// method or function.
@@ -5557,12 +4385,8 @@
   ///
   ///     m(a) {}
   ///
-  R visitParameterDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      ParameterElement parameter,
-      int index,
-      A arg);
+  R visitParameterDeclaration(VariableDefinitions node, Node definition,
+      ParameterElement parameter, int index, A arg);
 
   /// A declaration of the [index]th optional [parameter] in a constructor,
   /// method or function with the explicit [defaultValue]. If no default value
@@ -5588,12 +4412,8 @@
   ///
   ///     m({a: 42}) {}
   ///
-  R visitNamedParameterDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      ParameterElement parameter,
-      ConstantExpression defaultValue,
-      A arg);
+  R visitNamedParameterDeclaration(VariableDefinitions node, Node definition,
+      ParameterElement parameter, ConstantExpression defaultValue, A arg);
 
   /// A declaration of the [index]th [parameter] as an initializing formal in a
   /// constructor.
@@ -5605,12 +4425,8 @@
   ///       C(this.a);
   ///     }
   ///
-  R visitInitializingFormalDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      InitializingFormalElement parameter,
-      int index,
-      A arg);
+  R visitInitializingFormalDeclaration(VariableDefinitions node,
+      Node definition, InitializingFormalElement parameter, int index, A arg);
 
   /// A declaration of the [index]th optional [parameter] as an initializing
   /// formal in a constructor with the explicit [defaultValue]. If no default
@@ -5658,12 +4474,8 @@
   ///       var a = 42;
   ///     }
   ///
-  R visitLocalVariableDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      LocalVariableElement variable,
-      Node initializer,
-      A arg);
+  R visitLocalVariableDeclaration(VariableDefinitions node, Node definition,
+      LocalVariableElement variable, Node initializer, A arg);
 
   /// A declaration of a local constant [variable] initialized to [constant].
   ///
@@ -5673,12 +4485,8 @@
   ///       const a = 42;
   ///     }
   ///
-  R visitLocalConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      LocalVariableElement variable,
-      ConstantExpression constant,
-      A arg);
+  R visitLocalConstantDeclaration(VariableDefinitions node, Node definition,
+      LocalVariableElement variable, ConstantExpression constant, A arg);
 
   /// A declaration of a top level [field] with the explicit [initializer].
   /// If no initializer is declared, [initializer] is `null`.
@@ -5687,12 +4495,8 @@
   ///
   ///     var a = 42;
   ///
-  R visitTopLevelFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg);
+  R visitTopLevelFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg);
 
   /// A declaration of a top level constant [field] initialized to [constant].
   ///
@@ -5700,12 +4504,8 @@
   ///
   ///     const a = 42;
   ///
-  R visitTopLevelConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      ConstantExpression constant,
-      A arg);
+  R visitTopLevelConstantDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, ConstantExpression constant, A arg);
 
   /// A declaration of a static [field] with the explicit [initializer].
   /// If no initializer is declared, [initializer] is `null`.
@@ -5716,12 +4516,8 @@
   ///       static var a = 42;
   ///     }
   ///
-  R visitStaticFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg);
+  R visitStaticFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg);
 
   /// A declaration of a static constant [field] initialized to [constant].
   ///
@@ -5731,12 +4527,8 @@
   ///       static const a = 42;
   ///     }
   ///
-  R visitStaticConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      ConstantExpression constant,
-      A arg);
+  R visitStaticConstantDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, ConstantExpression constant, A arg);
 
   /// A declaration of an instance [field] with the explicit [initializer].
   /// If no initializer is declared, [initializer] is `null`.
@@ -5747,12 +4539,8 @@
   ///       var a = 42;
   ///     }
   ///
-  R visitInstanceFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg);
+  R visitInstanceFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg);
 
   /// A declaration of a generative [constructor] with the explicit constructor
   /// [initializers].
@@ -5801,12 +4589,8 @@
   ///       factory C(a) => null;
   ///     }
   ///
-  R visitFactoryConstructorDeclaration(
-      FunctionExpression node,
-      ConstructorElement constructor,
-      NodeList parameters,
-      Node body,
-      A arg);
+  R visitFactoryConstructorDeclaration(FunctionExpression node,
+      ConstructorElement constructor, NodeList parameters, Node body, A arg);
 
   /// A declaration of a redirecting factory [constructor]. The immediate
   /// redirection target and its type is provided in [redirectionTarget] and
@@ -5841,10 +4625,7 @@
   ///     }
   ///
   R visitFieldInitializer(
-      SendSet node,
-      FieldElement field,
-      Node initializer,
-      A arg);
+      SendSet node, FieldElement field, Node initializer, A arg);
 
   /// An initializer of an unresolved field with [initializer] as found in
   /// generative constructor initializers.
@@ -5856,10 +4637,7 @@
   ///     }
   ///
   R errorUnresolvedFieldInitializer(
-      SendSet node,
-      Element element,
-      Node initializer,
-      A arg);
+      SendSet node, Element element, Node initializer, A arg);
 
   /// An super constructor invocation of [superConstructor] with [arguments] as
   /// found in generative constructor initializers.
@@ -5893,11 +4671,8 @@
   ///       C(); // Implicit super call of B().
   ///     }
   ///
-  R visitImplicitSuperConstructorInvoke(
-      FunctionExpression node,
-      ConstructorElement superConstructor,
-      InterfaceType type,
-      A arg);
+  R visitImplicitSuperConstructorInvoke(FunctionExpression node,
+      ConstructorElement superConstructor, InterfaceType type, A arg);
 
   /// An super constructor invocation of an unresolved with [arguments] as
   /// found in generative constructor initializers.
@@ -5912,11 +4687,7 @@
   ///     }
   ///
   R errorUnresolvedSuperConstructorInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+      Send node, Element element, NodeList arguments, Selector selector, A arg);
 
   /// An this constructor invocation of [thisConstructor] with [arguments] as
   /// found in a redirecting generative constructors initializer.
@@ -5928,12 +4699,8 @@
   ///       C._(a);
   ///     }
   ///
-  R visitThisConstructorInvoke(
-      Send node,
-      ConstructorElement thisConstructor,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R visitThisConstructorInvoke(Send node, ConstructorElement thisConstructor,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   /// An this constructor invocation of an unresolved constructor with
   /// [arguments] as found in a redirecting generative constructors initializer.
@@ -5945,9 +4712,5 @@
   ///     }
   ///
   R errorUnresolvedThisConstructorInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+      Send node, Element element, NodeList arguments, Selector selector, A arg);
 }
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
index 36db8a8b..b9ebd0b 100644
--- a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
@@ -19,7 +19,6 @@
 /// Use this mixin to provide a trivial implementation for all `errorX` methods.
 abstract class ErrorBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   // TODO(johnniwinther): Ensure that all error methods have an
   // [ErroneousElement].
   R bulkHandleError(Node node, ErroneousElement error, A arg) {
@@ -27,193 +26,117 @@
   }
 
   @override
-  R errorNonConstantConstructorInvoke(
-      NewExpression node,
-      Element element,
-      DartType type,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R errorNonConstantConstructorInvoke(NewExpression node, Element element,
+      DartType type, NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleError(node, null, arg);
   }
 
   @override
   R errorUndefinedUnaryExpression(
-      Send node,
-      Operator operator,
-      Node expression,
-      A arg) {
+      Send node, Operator operator, Node expression, A arg) {
     return bulkHandleError(node, null, arg);
   }
 
   @override
   R errorUndefinedBinaryExpression(
-      Send node,
-      Node left,
-      Operator operator,
-      Node right,
-      A arg) {
+      Send node, Node left, Operator operator, Node right, A arg) {
     return bulkHandleError(node, null, arg);
   }
 
   @override
-  R errorInvalidCompound(
-      Send node,
-      ErroneousElement error,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R errorInvalidCompound(Send node, ErroneousElement error,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidGet(
-      Send node,
-      ErroneousElement error,
-      A arg) {
+  R errorInvalidGet(Send node, ErroneousElement error, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidInvoke(
-      Send node,
-      ErroneousElement error,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R errorInvalidInvoke(Send node, ErroneousElement error, NodeList arguments,
+      Selector selector, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
   R errorInvalidPostfix(
-      Send node,
-      ErroneousElement error,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ErroneousElement error, IncDecOperator operator, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
   R errorInvalidPrefix(
-      Send node,
-      ErroneousElement error,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ErroneousElement error, IncDecOperator operator, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidSet(
-      Send node,
-      ErroneousElement error,
-      Node rhs,
-      A arg) {
+  R errorInvalidSet(Send node, ErroneousElement error, Node rhs, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
   R errorInvalidUnary(
-      Send node,
-      UnaryOperator operator,
-      ErroneousElement error,
-      A arg) {
+      Send node, UnaryOperator operator, ErroneousElement error, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidEquals(
-      Send node,
-      ErroneousElement error,
-      Node right,
-      A arg) {
+  R errorInvalidEquals(Send node, ErroneousElement error, Node right, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
   R errorInvalidNotEquals(
-      Send node,
-      ErroneousElement error,
-      Node right,
-      A arg) {
+      Send node, ErroneousElement error, Node right, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidBinary(
-      Send node,
-      ErroneousElement error,
-      BinaryOperator operator,
-      Node right,
-      A arg) {
+  R errorInvalidBinary(Send node, ErroneousElement error,
+      BinaryOperator operator, Node right, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidIndex(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      A arg) {
+  R errorInvalidIndex(Send node, ErroneousElement error, Node index, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
   R errorInvalidIndexSet(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      Node rhs,
-      A arg) {
+      Send node, ErroneousElement error, Node index, Node rhs, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidCompoundIndexSet(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R errorInvalidCompoundIndexSet(Send node, ErroneousElement error, Node index,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
   R errorInvalidIndexSetIfNull(
-      SendSet node,
-      ErroneousElement error,
-      Node index,
-      Node rhs,
-      A arg) {
+      SendSet node, ErroneousElement error, Node index, Node rhs, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidIndexPrefix(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R errorInvalidIndexPrefix(Send node, ErroneousElement error, Node index,
+      IncDecOperator operator, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidIndexPostfix(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R errorInvalidIndexPostfix(Send node, ErroneousElement error, Node index,
+      IncDecOperator operator, A arg) {
     return bulkHandleError(node, error, arg);
   }
 
   @override
-  R errorInvalidSetIfNull(
-      Send node,
-      ErroneousElement error,
-      Node rhs,
-      A arg) {
+  R errorInvalidSetIfNull(Send node, ErroneousElement error, Node rhs, A arg) {
     return bulkHandleError(node, error, arg);
   }
 }
@@ -225,133 +148,84 @@
 /// methods.
 abstract class PrefixBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandlePrefix(Send node, A arg) {
     return bulkHandleNode(node, "Prefix expression `#` unhandled.", arg);
   }
 
   @override
   R visitDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   R visitIfNotNullDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitIndexPrefix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalVariablePrefix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitStaticGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitStaticMethodSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticMethodSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitSuperFieldFieldPrefix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitSuperFieldSetterPrefix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPrefix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitSuperGetterFieldPrefix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitSuperGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
@@ -367,277 +241,176 @@
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexPrefix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSetterIndexPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterIndexPrefix(Send node, MethodElement getter,
+      Element element, Node index, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitUnresolvedSuperIndexPrefix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, Node index, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitSuperMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitThisPropertyPrefix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Name name, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitTopLevelGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitTopLevelMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitClassTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitDynamicTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitLocalFunctionPrefix(
-      Send node,
-      LocalFunctionElement function,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalFunctionPrefix(Send node, LocalFunctionElement function,
+      IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitTypeVariableTypeLiteralPrefix(
-      Send node,
-      TypeVariableElement element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitTypedefTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitUnresolvedStaticGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitUnresolvedTopLevelGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitUnresolvedStaticSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitUnresolvedTopLevelSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitStaticMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitTopLevelMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitUnresolvedPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitFinalLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitFinalLocalVariablePrefix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitFinalParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitFinalStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitFinalSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitSuperMethodPrefix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FunctionElement method, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitFinalTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
   R visitUnresolvedSuperPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return bulkHandlePrefix(node, arg);
   }
 }
@@ -649,133 +422,84 @@
 /// methods.
 abstract class PostfixBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandlePostfix(Send node, A arg) {
     return bulkHandleNode(node, "Postfix expression `#` unhandled.", arg);
   }
 
   @override
   R visitDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   R visitIndexPostfix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalVariablePostfix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitStaticGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitStaticMethodSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticMethodSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitSuperFieldFieldPostfix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitSuperFieldSetterPostfix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPostfix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitSuperGetterFieldPostfix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitSuperGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
@@ -791,285 +515,181 @@
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexPostfix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSetterIndexPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterIndexPostfix(Send node, MethodElement getter,
+      Element element, Node index, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitUnresolvedSuperIndexPostfix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, Node index, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitSuperMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitThisPropertyPostfix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Name name, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitTopLevelGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitTopLevelMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitClassTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitDynamicTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitLocalFunctionPostfix(
-      Send node,
-      LocalFunctionElement function,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalFunctionPostfix(Send node, LocalFunctionElement function,
+      IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitTypeVariableTypeLiteralPostfix(
-      Send node,
-      TypeVariableElement element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitTypedefTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitUnresolvedStaticGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitUnresolvedTopLevelGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitUnresolvedStaticSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitUnresolvedTopLevelSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitStaticMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   R visitToplevelMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitUnresolvedPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitFinalLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitFinalLocalVariablePostfix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitFinalParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitFinalStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitFinalSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitSuperMethodPostfix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FunctionElement method, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitFinalTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitTopLevelMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
   R visitUnresolvedSuperPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return bulkHandlePostfix(node, arg);
   }
 }
@@ -1081,403 +701,235 @@
 /// methods.
 abstract class CompoundBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleCompound(Send node, A arg) {
     return bulkHandleNode(node, "Compound assignment `#` unhandled.", arg);
   }
 
   @override
-  R visitDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitIfNotNullDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitLocalVariableCompound(
-      Send node,
-      LocalVariableElement variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitStaticGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitStaticMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitSuperFieldSetterCompound(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldSetterCompound(Send node, FieldElement field,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitSuperGetterFieldCompound(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterFieldCompound(Send node, FunctionElement getter,
+      FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitSuperGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitSuperMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
   R visitThisPropertyCompound(
-      Send node,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+      Send node, Name name, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitTopLevelGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitTopLevelMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitFinalParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitClassTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitClassTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitDynamicTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitDynamicTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitFinalLocalVariableCompound(
-      Send node,
-      LocalVariableElement
-      variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitFinalStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitFinalSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitFinalTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitLocalFunctionCompound(
-      Send node,
-      LocalFunctionElement function,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitLocalFunctionCompound(Send node, LocalFunctionElement function,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitTypeVariableTypeLiteralCompound(
-      Send node,
-      TypeVariableElement element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitTypedefTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTypedefTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitUnresolvedStaticGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedStaticGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitUnresolvedTopLevelGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedTopLevelGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitUnresolvedStaticSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedStaticSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitUnresolvedTopLevelSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitStaticMethodCompound(
-      Send node,
-      MethodElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticMethodCompound(Send node, MethodElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitTopLevelMethodCompound(
-      Send node,
-      MethodElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelMethodCompound(Send node, MethodElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitUnresolvedCompound(
-      Send node,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedCompound(Send node, Element element,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitSuperFieldFieldCompound(
-      Send node, FieldElement readField,
-      FieldElement writtenField,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldFieldCompound(Send node, FieldElement readField,
+      FieldElement writtenField, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitSuperMethodCompound(
-      Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodCompound(Send node, FunctionElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperCompound(
-      Send node,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperCompound(Send node, Element element,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperGetterCompound(
-      Send node, Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSetterCompound(
-      Send node, MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleCompound(node, arg);
   }
 }
@@ -1489,420 +941,260 @@
 /// methods.
 abstract class SetIfNullBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleSetIfNull(Send node, A arg) {
     return bulkHandleNode(node, "If null assignment `#` unhandled.", arg);
   }
 
   @override
   R visitClassTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitDynamicPropertySetIfNull(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      Send node, Node receiver, Name name, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitDynamicTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitFinalLocalVariableSetIfNull(
-      Send node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      Send node, LocalVariableElement variable, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitFinalParameterSetIfNull(
-      Send node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      Send node, ParameterElement parameter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitFinalStaticFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitFinalSuperFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitFinalTopLevelFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertySetIfNull(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      Send node, Node receiver, Name name, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitLocalFunctionSetIfNull(
-      Send node,
-      LocalFunctionElement function,
-      Node rhs,
-      A arg) {
+      Send node, LocalFunctionElement function, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitLocalVariableSetIfNull(
-      Send node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      Send node, LocalVariableElement variable, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitParameterSetIfNull(
-      Send node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      Send node, ParameterElement parameter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitStaticFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitStaticFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitStaticGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitStaticMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
+      Send node, FunctionElement method, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitStaticMethodSetterSetIfNull(
-      Send node,
-      MethodElement method,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement method, MethodElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitSuperFieldFieldSetIfNull(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
+      FieldElement writtenField, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitSuperFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitSuperFieldSetterSetIfNull(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitSuperGetterFieldSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FunctionElement getter, FieldElement field, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitSuperGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitSuperMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
+      Send node, FunctionElement method, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitSuperMethodSetterSetIfNull(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodSetterSetIfNull(Send node, FunctionElement method,
+      FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitThisPropertySetIfNull(
-      Send node,
-      Name name,
-      Node rhs,
-      A arg) {
+  R visitThisPropertySetIfNull(Send node, Name name, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitTopLevelFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitTopLevelGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitTopLevelGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitTopLevelMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
+      Send node, FunctionElement method, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitTopLevelMethodSetterSetIfNull(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method,
+      FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitTypeVariableTypeLiteralSetIfNull(
-      Send node,
-      TypeVariableElement element,
-      Node rhs,
-      A arg) {
+      Send node, TypeVariableElement element, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitTypedefTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitUnresolvedSetIfNull(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSetIfNull(Send node, Element element, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitUnresolvedStaticGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitUnresolvedStaticSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitUnresolvedSuperGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSetIfNull(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSetIfNull(Send node, Element element, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitUnresolvedSuperSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitUnresolvedTopLevelGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitUnresolvedTopLevelSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitIndexSetIfNull(
-      SendSet node,
-      Node receiver,
-      Node index,
-      Node rhs,
-      A arg) {
+      SendSet node, Node receiver, Node index, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitSuperIndexSetIfNull(
-      SendSet node,
-      MethodElement getter,
-      MethodElement setter,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitSuperIndexSetIfNull(SendSet node, MethodElement getter,
+      MethodElement setter, Node index, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element element,
+      MethodElement setter, Node index, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSetterIndexSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSetterIndexSetIfNull(Send node, MethodElement getter,
+      Element element, Node index, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 
   @override
   R visitUnresolvedSuperIndexSetIfNull(
-      Send node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg) {
+      Send node, Element element, Node index, Node rhs, A arg) {
     return bulkHandleSetIfNull(node, arg);
   }
 }
@@ -1914,68 +1206,43 @@
 /// methods.
 abstract class InvokeBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleInvoke(Send node, A arg) {
     return bulkHandleNode(node, "Invocation `#` unhandled.", arg);
   }
 
   @override
-  R visitClassTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitClassTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
   R visitDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitDynamicTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitDynamicTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitExpressionInvoke(
-      Send node,
-      Node expression,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitExpressionInvoke(Send node, Node expression, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitLocalFunctionInvoke(
-      Send node,
-      LocalFunctionElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitLocalFunctionInvoke(Send node, LocalFunctionElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
@@ -1990,240 +1257,146 @@
   }
 
   @override
-  R visitLocalVariableInvoke(
-      Send node,
-      LocalVariableElement variable,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitLocalVariableInvoke(Send node, LocalVariableElement variable,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitParameterInvoke(
-      Send node,
-      ParameterElement parameter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitParameterInvoke(Send node, ParameterElement parameter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitStaticFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitStaticFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitStaticFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitStaticGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitSuperFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitSuperGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitSuperMethodInvoke(
-      Send node,
-      MethodElement method,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitSuperMethodIncompatibleInvoke(
-      Send node,
-      MethodElement method,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperMethodIncompatibleInvoke(Send node, MethodElement method,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
   R visitThisInvoke(
-      Send node,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+      Send node, NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
   R visitThisPropertyInvoke(
-      Send node,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, NodeList arguments, Selector selector, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitTopLevelFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitTopLevelFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitTopLevelFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitTopLevelGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitTypeVariableTypeLiteralInvoke(
-      Send node,
-      TypeVariableElement element,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitTypedefTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTypedefTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitConstantInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitConstantInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitUnresolvedInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedInvoke(Send node, Element element, NodeList arguments,
+      Selector selector, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperInvoke(
-      Send node,
-      Element function,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedSuperInvoke(Send node, Element function, NodeList arguments,
+      Selector selector, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitStaticSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitSuperSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 
   @override
-  R visitTopLevelSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInvoke(node, arg);
   }
 }
@@ -2235,114 +1408,73 @@
 /// methods.
 abstract class GetBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleGet(Node node, A arg) {
     return bulkHandleNode(node, "Read `#` unhandled.", arg);
   }
 
   @override
-  R visitClassTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitClassTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitDynamicPropertyGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg) {
+  R visitDynamicPropertyGet(Send node, Node receiver, Name name, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertyGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg) {
+      Send node, Node receiver, Name name, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitDynamicTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitDynamicTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitLocalFunctionGet(
-      Send node,
-      LocalFunctionElement function,
-      A arg) {
+  R visitLocalFunctionGet(Send node, LocalFunctionElement function, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitLocalVariableGet(
-      Send node,
-      LocalVariableElement variable,
-      A arg) {
+  R visitLocalVariableGet(Send node, LocalVariableElement variable, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitParameterGet(
-      Send node,
-      ParameterElement parameter,
-      A arg) {
+  R visitParameterGet(Send node, ParameterElement parameter, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitStaticFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitStaticFieldGet(Send node, FieldElement field, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitStaticFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg) {
+  R visitStaticFunctionGet(Send node, MethodElement function, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitStaticGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitStaticGetterGet(Send node, FunctionElement getter, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitSuperFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitSuperFieldGet(Send node, FieldElement field, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitSuperGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitSuperGetterGet(Send node, FunctionElement getter, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitSuperMethodGet(
-      Send node,
-      MethodElement method,
-      A arg) {
+  R visitSuperMethodGet(Send node, MethodElement method, A arg) {
     return bulkHandleGet(node, arg);
   }
 
@@ -2352,98 +1484,63 @@
   }
 
   @override
-  R visitThisPropertyGet(
-      Send node,
-      Name name,
-      A arg) {
+  R visitThisPropertyGet(Send node, Name name, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitTopLevelFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitTopLevelFieldGet(Send node, FieldElement field, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitTopLevelFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg) {
+  R visitTopLevelFunctionGet(Send node, MethodElement function, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitTopLevelGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitTopLevelGetterGet(Send node, FunctionElement getter, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
   R visitTypeVariableTypeLiteralGet(
-      Send node,
-      TypeVariableElement element,
-      A arg) {
+      Send node, TypeVariableElement element, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitTypedefTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitTypedefTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitConstantGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitConstantGet(Send node, ConstantExpression constant, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitUnresolvedGet(
-      Send node,
-      Element element,
-      A arg) {
+  R visitUnresolvedGet(Send node, Element element, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperGet(
-      Send node,
-      Element element,
-      A arg) {
+  R visitUnresolvedSuperGet(Send node, Element element, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitStaticSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg) {
+  R visitStaticSetterGet(Send node, FunctionElement setter, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitSuperSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg) {
+  R visitSuperSetterGet(Send node, FunctionElement setter, A arg) {
     return bulkHandleGet(node, arg);
   }
 
   @override
-  R visitTopLevelSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg) {
+  R visitTopLevelSetterGet(Send node, FunctionElement setter, A arg) {
     return bulkHandleGet(node, arg);
   }
 }
@@ -2455,271 +1552,170 @@
 /// methods.
 abstract class SetBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleSet(Send node, A arg) {
     return bulkHandleNode(node, "Assignment `#` unhandled.", arg);
   }
 
   @override
   R visitDynamicPropertySet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      SendSet node, Node receiver, Name name, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertySet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      SendSet node, Node receiver, Name name, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitLocalVariableSet(
-      SendSet node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalVariableElement variable, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitParameterSet(
-      SendSet node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      SendSet node, ParameterElement parameter, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitStaticSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitSuperFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitSuperSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitThisPropertySet(
-      SendSet node,
-      Name name,
-      Node rhs,
-      A arg) {
+  R visitThisPropertySet(SendSet node, Name name, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitTopLevelFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitTopLevelSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitClassTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      SendSet node, ConstantExpression constant, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitDynamicTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      SendSet node, ConstantExpression constant, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitFinalLocalVariableSet(
-      SendSet node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalVariableElement variable, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitFinalParameterSet(
-      SendSet node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      SendSet node, ParameterElement parameter, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitFinalStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      SendSet node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitFinalSuperFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitFinalSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitFinalTopLevelFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      SendSet node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitLocalFunctionSet(
-      SendSet node,
-      LocalFunctionElement function,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalFunctionElement function, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitStaticFunctionSet(
-      Send node,
-      MethodElement function,
-      Node rhs,
-      A arg) {
+  R visitStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitStaticGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement getter, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitSuperGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitSuperMethodSet(
-      Send node,
-      MethodElement method,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodSet(Send node, MethodElement method, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitTopLevelFunctionSet(
-      Send node,
-      MethodElement function,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement function, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitTopLevelGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement getter, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitTypeVariableTypeLiteralSet(
-      SendSet node,
-      TypeVariableElement element,
-      Node rhs,
-      A arg) {
+      SendSet node, TypeVariableElement element, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
   R visitTypedefTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      SendSet node, ConstantExpression constant, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitUnresolvedSet(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSet(Send node, Element element, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSet(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSet(Send node, Element element, Node rhs, A arg) {
     return bulkHandleSet(node, arg);
   }
 }
@@ -2731,29 +1727,18 @@
 /// methods.
 abstract class IndexSetBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleIndexSet(Send node, A arg) {
     return bulkHandleNode(node, "Index set expression `#` unhandled.", arg);
   }
 
   @override
-  R visitCompoundIndexSet(
-      SendSet node,
-      Node receiver,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitCompoundIndexSet(SendSet node, Node receiver, Node index,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleIndexSet(node, arg);
   }
 
   @override
-  R visitIndexSet(
-      SendSet node,
-      Node receiver,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitIndexSet(SendSet node, Node receiver, Node index, Node rhs, A arg) {
     return bulkHandleIndexSet(node, arg);
   }
 
@@ -2794,33 +1779,20 @@
   }
 
   @override
-  R visitUnresolvedSuperCompoundIndexSet(
-      SendSet node,
-      Element element,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperCompoundIndexSet(SendSet node, Element element,
+      Node index, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleIndexSet(node, arg);
   }
 
   @override
   R visitSuperIndexSet(
-      SendSet node,
-      FunctionElement function,
-      Node index,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement function, Node index, Node rhs, A arg) {
     return bulkHandleIndexSet(node, arg);
   }
 
   @override
   R visitUnresolvedSuperIndexSet(
-      SendSet node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg) {
+      SendSet node, Element element, Node index, Node rhs, A arg) {
     return bulkHandleIndexSet(node, arg);
   }
 }
@@ -2832,111 +1804,69 @@
 /// methods.
 abstract class BinaryBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleBinary(Send node, A arg) {
     return bulkHandleNode(node, "Binary expression `#` unhandled.", arg);
   }
 
   @override
   R visitBinary(
-      Send node,
-      Node left,
-      BinaryOperator operator,
-      Node right,
-      A arg) {
+      Send node, Node left, BinaryOperator operator, Node right, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
-  R visitEquals(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitEquals(Send node, Node left, Node right, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
-  R visitNotEquals(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitNotEquals(Send node, Node left, Node right, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
-  R visitIndex(
-      Send node,
-      Node receiver,
-      Node index,
-      A arg) {
+  R visitIndex(Send node, Node receiver, Node index, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
-  R visitSuperBinary(
-      Send node,
-      FunctionElement function,
-      BinaryOperator operator,
-      Node argument,
-      A arg) {
+  R visitSuperBinary(Send node, FunctionElement function,
+      BinaryOperator operator, Node argument, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
   R visitSuperEquals(
-      Send node,
-      FunctionElement function,
-      Node argument,
-      A arg) {
+      Send node, FunctionElement function, Node argument, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
   R visitSuperNotEquals(
-      Send node,
-      FunctionElement function,
-      Node argument,
-      A arg) {
+      Send node, FunctionElement function, Node argument, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
-  R visitSuperIndex(
-      Send node,
-      FunctionElement function,
-      Node index,
-      A arg) {
+  R visitSuperIndex(Send node, FunctionElement function, Node index, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperBinary(
-      Send node,
-      FunctionElement function,
-      BinaryOperator operator,
-      Node argument,
-      A arg) {
+  R visitUnresolvedSuperBinary(Send node, FunctionElement function,
+      BinaryOperator operator, Node argument, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperInvoke(
-      Send node,
-      Element function,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedSuperInvoke(Send node, Element function, NodeList arguments,
+      Selector selector, A arg) {
     return bulkHandleBinary(node, arg);
   }
 
   @override
   R visitUnresolvedSuperIndex(
-      Send node,
-      FunctionElement function,
-      Node index,
-      A arg) {
+      Send node, FunctionElement function, Node index, A arg) {
     return bulkHandleBinary(node, arg);
   }
 }
@@ -2948,43 +1878,29 @@
 /// methods.
 abstract class UnaryBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleUnary(Send node, A arg) {
     return bulkHandleNode(node, "Unary expression `#` unhandled.", arg);
   }
 
   @override
-  R visitNot(
-      Send node,
-      Node expression,
-      A arg) {
+  R visitNot(Send node, Node expression, A arg) {
     return bulkHandleUnary(node, arg);
   }
 
   @override
   R visitSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      FunctionElement function,
-      A arg) {
+      Send node, UnaryOperator operator, FunctionElement function, A arg) {
     return bulkHandleUnary(node, arg);
   }
 
   @override
-  R visitUnary(
-      Send node,
-      UnaryOperator operator,
-      Node expression,
-      A arg) {
+  R visitUnary(Send node, UnaryOperator operator, Node expression, A arg) {
     return bulkHandleUnary(node, arg);
   }
 
   @override
   R visitUnresolvedSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      FunctionElement function,
-      A arg) {
+      Send node, UnaryOperator operator, FunctionElement function, A arg) {
     return bulkHandleUnary(node, arg);
   }
 }
@@ -2996,66 +1912,38 @@
 /// visitor methods.
 abstract class BaseBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   @override
-  R visitAs(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg) {
+  R visitAs(Send node, Node expression, DartType type, A arg) {
     return bulkHandleNode(node, 'As cast `#` unhandled.', arg);
   }
 
   @override
-  R visitIs(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg) {
+  R visitIs(Send node, Node expression, DartType type, A arg) {
     return bulkHandleNode(node, 'Is test `#` unhandled.', arg);
   }
 
   @override
-  R visitIsNot(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg) {
+  R visitIsNot(Send node, Node expression, DartType type, A arg) {
     return bulkHandleNode(node, 'Is not test `#` unhandled.', arg);
   }
 
   @override
-  R visitIfNull(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitIfNull(Send node, Node left, Node right, A arg) {
     return bulkHandleNode(node, 'If-null (Lazy ?? `#`) unhandled.', arg);
   }
 
   @override
-  R visitLogicalAnd(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitLogicalAnd(Send node, Node left, Node right, A arg) {
     return bulkHandleNode(node, 'Lazy and `#` unhandled.', arg);
   }
 
   @override
-  R visitLogicalOr(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitLogicalOr(Send node, Node left, Node right, A arg) {
     return bulkHandleNode(node, 'Lazy or `#` unhandled.', arg);
   }
 
   @override
-  void previsitDeferredAccess(
-      Send node,
-      PrefixElement prefix,
-      A arg) {
+  void previsitDeferredAccess(Send node, PrefixElement prefix, A arg) {
     bulkHandleNode(node, 'Deferred access `#` unhandled.', arg);
   }
 }
@@ -3067,18 +1955,13 @@
 /// visitor methods.
 abstract class SuperBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleSuper(Send node, A arg) {
     return bulkHandleNode(node, "Super call `#` unhandled.", arg);
   }
 
   @override
-  R visitSuperBinary(
-      Send node,
-      FunctionElement function,
-      BinaryOperator operator,
-      Node argument,
-      A arg) {
+  R visitSuperBinary(Send node, FunctionElement function,
+      BinaryOperator operator, Node argument, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
@@ -3096,357 +1979,217 @@
 
   @override
   R visitSuperEquals(
-      Send node,
-      FunctionElement function,
-      Node argument,
-      A arg) {
+      Send node, FunctionElement function, Node argument, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldFieldPostfix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldFieldPrefix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitSuperFieldGet(Send node, FieldElement field, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
   R visitSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
   R visitSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldSetterCompound(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldSetterCompound(Send node, FieldElement field,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldSetterPostfix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPostfix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperFieldSetterPrefix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPrefix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperGetterFieldCompound(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterFieldCompound(Send node, FunctionElement getter,
+      FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperGetterFieldPostfix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperGetterFieldPrefix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitSuperGetterGet(Send node, FunctionElement getter, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
   R visitSuperIndexSet(
-      SendSet node,
-      FunctionElement function,
-      Node index,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement function, Node index, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperMethodGet(
-      Send node,
-      MethodElement method,
-      A arg) {
+  R visitSuperMethodGet(Send node, MethodElement method, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperMethodInvoke(
-      Send node,
-      MethodElement method,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperMethodIncompatibleInvoke(
-      Send node,
-      MethodElement method,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperMethodIncompatibleInvoke(Send node, MethodElement method,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
   R visitSuperNotEquals(
-      Send node,
-      FunctionElement function,
-      Node argument,
-      A arg) {
+      Send node, FunctionElement function, Node argument, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitSuperSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
   R visitSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      FunctionElement function,
-      A arg) {
+      Send node, UnaryOperator operator, FunctionElement function, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperBinary(
-      Send node,
-      Element element,
-      BinaryOperator operator,
-      Node argument,
-      A arg) {
+  R visitUnresolvedSuperBinary(Send node, Element element,
+      BinaryOperator operator, Node argument, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperGet(
-      Send node,
-      Element element,
-      A arg) {
+  R visitUnresolvedSuperGet(Send node, Element element, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperSet(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSet(Send node, Element element, Node rhs, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperInvoke(
-      Send node,
-      Element function,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedSuperInvoke(Send node, Element function, NodeList arguments,
+      Selector selector, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
-  R visitUnresolvedSuperIndex(
-      Send node,
-      Element function,
-      Node index,
-      A arg) {
+  R visitUnresolvedSuperIndex(Send node, Element function, Node index, A arg) {
     return bulkHandleSuper(node, arg);
   }
 
   @override
   R visitUnresolvedSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      Element element,
-      A arg) {
+      Send node, UnaryOperator operator, Element element, A arg) {
     return bulkHandleSuper(node, arg);
   }
 }
 
 abstract class NewBulkMixin<R, A>
     implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleNew(NewExpression node, A arg) {
-    return bulkHandleNode(
-        node, "Constructor invocation `#` unhandled.", arg);
+    return bulkHandleNode(node, "Constructor invocation `#` unhandled.", arg);
   }
 
   @override
@@ -3462,33 +2205,25 @@
 
   @override
   R visitConstConstructorInvoke(
-      NewExpression node,
-      ConstructedConstantExpression constant,
-      A arg) {
+      NewExpression node, ConstructedConstantExpression constant, A arg) {
     return bulkHandleNew(node, arg);
   }
 
   @override
-  R visitBoolFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      BoolFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitBoolFromEnvironmentConstructorInvoke(NewExpression node,
+      BoolFromEnvironmentConstantExpression constant, A arg) {
     return bulkHandleNew(node, arg);
   }
 
   @override
-  R visitIntFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      IntFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitIntFromEnvironmentConstructorInvoke(NewExpression node,
+      IntFromEnvironmentConstantExpression constant, A arg) {
     return bulkHandleNew(node, arg);
   }
 
   @override
-  R visitStringFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      StringFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitStringFromEnvironmentConstructorInvoke(NewExpression node,
+      StringFromEnvironmentConstantExpression constant, A arg) {
     return bulkHandleNew(node, arg);
   }
 
@@ -3550,35 +2285,25 @@
   }
 
   @override
-  R visitUnresolvedClassConstructorInvoke(
-      NewExpression node,
-      Element element,
-      DartType type,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedClassConstructorInvoke(NewExpression node, Element element,
+      DartType type, NodeList arguments, Selector selector, A arg) {
     return bulkHandleNew(node, arg);
   }
 
   @override
-  R visitUnresolvedConstructorInvoke(
-      NewExpression node,
-      Element constructor,
-      DartType type,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedConstructorInvoke(NewExpression node, Element constructor,
+      DartType type, NodeList arguments, Selector selector, A arg) {
     return bulkHandleNew(node, arg);
   }
 
   @override
   R visitUnresolvedRedirectingFactoryConstructorInvoke(
-       NewExpression node,
-       ConstructorElement constructor,
-       InterfaceType type,
-       NodeList arguments,
-       CallStructure callStructure,
-       A arg) {
+      NewExpression node,
+      ConstructorElement constructor,
+      InterfaceType type,
+      NodeList arguments,
+      CallStructure callStructure,
+      A arg) {
     return bulkHandleNew(node, arg);
   }
 }
@@ -3589,19 +2314,20 @@
 /// tests that the union of the `BulkX` mixins implement all `visit` and `error`
 /// methods of [SemanticSendVisitor].
 class BulkSendVisitor<R, A> extends SemanticSendVisitor<R, A>
-    with GetBulkMixin<R, A>,
-         SetBulkMixin<R, A>,
-         ErrorBulkMixin<R, A>,
-         InvokeBulkMixin<R, A>,
-         IndexSetBulkMixin<R, A>,
-         CompoundBulkMixin<R, A>,
-         SetIfNullBulkMixin<R, A>,
-         UnaryBulkMixin<R, A>,
-         BaseBulkMixin<R, A>,
-         BinaryBulkMixin<R, A>,
-         PrefixBulkMixin<R, A>,
-         PostfixBulkMixin<R, A>,
-         NewBulkMixin<R, A> {
+    with
+        GetBulkMixin<R, A>,
+        SetBulkMixin<R, A>,
+        ErrorBulkMixin<R, A>,
+        InvokeBulkMixin<R, A>,
+        IndexSetBulkMixin<R, A>,
+        CompoundBulkMixin<R, A>,
+        SetIfNullBulkMixin<R, A>,
+        UnaryBulkMixin<R, A>,
+        BaseBulkMixin<R, A>,
+        BinaryBulkMixin<R, A>,
+        PrefixBulkMixin<R, A>,
+        PostfixBulkMixin<R, A>,
+        NewBulkMixin<R, A> {
   @override
   R apply(Node node, A arg) {
     throw new UnimplementedError("BulkSendVisitor.apply unimplemented");
@@ -3621,19 +2347,13 @@
 /// Use this mixin to provide a trivial implementation for these methods.
 abstract class ParameterBulkMixin<R, A>
     implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleParameterDeclaration(VariableDefinitions node, A arg) {
-    return bulkHandleNode(
-        node, "Parameter declaration `#` unhandled.", arg);
+    return bulkHandleNode(node, "Parameter declaration `#` unhandled.", arg);
   }
 
   @override
-  R visitInitializingFormalDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      InitializingFormalElement parameter,
-      int index,
-      A arg) {
+  R visitInitializingFormalDeclaration(VariableDefinitions node,
+      Node definition, InitializingFormalElement parameter, int index, A arg) {
     return bulkHandleParameterDeclaration(node, arg);
   }
 
@@ -3648,12 +2368,8 @@
   }
 
   @override
-  R visitNamedParameterDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      ParameterElement parameter,
-      ConstantExpression defaultValue,
-      A arg) {
+  R visitNamedParameterDeclaration(VariableDefinitions node, Node definition,
+      ParameterElement parameter, ConstantExpression defaultValue, A arg) {
     return bulkHandleParameterDeclaration(node, arg);
   }
 
@@ -3680,12 +2396,8 @@
   }
 
   @override
-  R visitParameterDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      ParameterElement parameter,
-      int index,
-      A arg) {
+  R visitParameterDeclaration(VariableDefinitions node, Node definition,
+      ParameterElement parameter, int index, A arg) {
     return bulkHandleParameterDeclaration(node, arg);
   }
 }
@@ -3696,19 +2408,13 @@
 /// Use this mixin to provide a trivial implementation for these methods.
 abstract class ConstructorBulkMixin<R, A>
     implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleConstructorDeclaration(FunctionExpression node, A arg) {
-    return bulkHandleNode(
-        node, "Constructor declaration `#` unhandled.", arg);
+    return bulkHandleNode(node, "Constructor declaration `#` unhandled.", arg);
   }
 
   @override
-  R visitFactoryConstructorDeclaration(
-      FunctionExpression node,
-      ConstructorElement constructor,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitFactoryConstructorDeclaration(FunctionExpression node,
+      ConstructorElement constructor, NodeList parameters, Node body, A arg) {
     return bulkHandleConstructorDeclaration(node, arg);
   }
 
@@ -3751,47 +2457,31 @@
 /// Use this mixin to provide a trivial implementation for these methods.
 abstract class InitializerBulkMixin<R, A>
     implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleInitializer(Node node, A arg) {
-    return bulkHandleNode(
-        node, "Initializer `#` unhandled.", arg);
+    return bulkHandleNode(node, "Initializer `#` unhandled.", arg);
   }
 
   @override
   R errorUnresolvedFieldInitializer(
-      SendSet node,
-      Element element,
-      Node initializer,
-      A arg) {
+      SendSet node, Element element, Node initializer, A arg) {
     return bulkHandleInitializer(node, arg);
   }
 
   @override
-  R errorUnresolvedSuperConstructorInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R errorUnresolvedSuperConstructorInvoke(Send node, Element element,
+      NodeList arguments, Selector selector, A arg) {
     return bulkHandleInitializer(node, arg);
   }
 
   @override
-  R errorUnresolvedThisConstructorInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R errorUnresolvedThisConstructorInvoke(Send node, Element element,
+      NodeList arguments, Selector selector, A arg) {
     return bulkHandleInitializer(node, arg);
   }
 
   @override
   R visitFieldInitializer(
-      SendSet node,
-      FieldElement field,
-      Node initializer,
-      A arg) {
+      SendSet node, FieldElement field, Node initializer, A arg) {
     return bulkHandleInitializer(node, arg);
   }
 
@@ -3807,21 +2497,14 @@
   }
 
   @override
-  R visitImplicitSuperConstructorInvoke(
-      FunctionExpression node,
-      ConstructorElement superConstructor,
-      InterfaceType type,
-      A arg) {
+  R visitImplicitSuperConstructorInvoke(FunctionExpression node,
+      ConstructorElement superConstructor, InterfaceType type, A arg) {
     return bulkHandleInitializer(node, arg);
   }
 
   @override
-  R visitThisConstructorInvoke(
-      Send node,
-      ConstructorElement thisConstructor,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitThisConstructorInvoke(Send node, ConstructorElement thisConstructor,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return bulkHandleInitializer(node, arg);
   }
 }
@@ -3832,142 +2515,91 @@
 /// Use this mixin to provide a trivial implementation for these methods.
 abstract class FunctionBulkMixin<R, A>
     implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleFunctionDeclaration(FunctionExpression node, A arg) {
-    return bulkHandleNode(
-        node, "Function declaration `#` unhandled.", arg);
+    return bulkHandleNode(node, "Function declaration `#` unhandled.", arg);
   }
 
   @override
   R visitAbstractGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      A arg) {
+      FunctionExpression node, MethodElement getter, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitAbstractMethodDeclaration(
-      FunctionExpression node,
-      MethodElement method,
-      NodeList parameters,
-      A arg) {
+  R visitAbstractMethodDeclaration(FunctionExpression node,
+      MethodElement method, NodeList parameters, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitAbstractSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      A arg) {
+  R visitAbstractSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitClosureDeclaration(
-      FunctionExpression node,
-      LocalFunctionElement closure,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitClosureDeclaration(FunctionExpression node,
+      LocalFunctionElement closure, NodeList parameters, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
   R visitInstanceGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg) {
+      FunctionExpression node, MethodElement getter, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitInstanceMethodDeclaration(
-      FunctionExpression node,
-      MethodElement method,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitInstanceMethodDeclaration(FunctionExpression node,
+      MethodElement method, NodeList parameters, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitInstanceSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitInstanceSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitLocalFunctionDeclaration(
-      FunctionExpression node,
-      LocalFunctionElement function,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitLocalFunctionDeclaration(FunctionExpression node,
+      LocalFunctionElement function, NodeList parameters, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitStaticFunctionDeclaration(
-      FunctionExpression node,
-      MethodElement function,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitStaticFunctionDeclaration(FunctionExpression node,
+      MethodElement function, NodeList parameters, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
   R visitStaticGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg) {
+      FunctionExpression node, MethodElement getter, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitStaticSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitStaticSetterDeclaration(FunctionExpression node, MethodElement setter,
+      NodeList parameters, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitTopLevelFunctionDeclaration(
-      FunctionExpression node,
-      MethodElement function,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitTopLevelFunctionDeclaration(FunctionExpression node,
+      MethodElement function, NodeList parameters, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
   R visitTopLevelGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg) {
+      FunctionExpression node, MethodElement getter, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 
   @override
-  R visitTopLevelSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitTopLevelSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, Node body, A arg) {
     return bulkHandleFunctionDeclaration(node, arg);
   }
 }
@@ -3978,79 +2610,49 @@
 /// Use this mixin to provide a trivial implementation for these methods.
 abstract class VariableBulkMixin<R, A>
     implements SemanticDeclarationVisitor<R, A>, BulkHandle<R, A> {
-
   R bulkHandleVariableDeclaration(VariableDefinitions node, A arg) {
-    return bulkHandleNode(
-        node, "Variable declaration `#` unhandled.", arg);
+    return bulkHandleNode(node, "Variable declaration `#` unhandled.", arg);
   }
 
   @override
-  R visitInstanceFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg) {
+  R visitInstanceFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg) {
     return bulkHandleVariableDeclaration(node, arg);
   }
 
   @override
-  R visitLocalConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      LocalVariableElement variable,
-      ConstantExpression constant,
-      A arg) {
+  R visitLocalConstantDeclaration(VariableDefinitions node, Node definition,
+      LocalVariableElement variable, ConstantExpression constant, A arg) {
     return bulkHandleVariableDeclaration(node, arg);
   }
 
   @override
-  R visitLocalVariableDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      LocalVariableElement variable,
-      Node initializer,
-      A arg) {
+  R visitLocalVariableDeclaration(VariableDefinitions node, Node definition,
+      LocalVariableElement variable, Node initializer, A arg) {
     return bulkHandleVariableDeclaration(node, arg);
   }
 
   @override
-  R visitStaticConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      ConstantExpression constant,
-      A arg) {
+  R visitStaticConstantDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, ConstantExpression constant, A arg) {
     return bulkHandleVariableDeclaration(node, arg);
   }
 
   @override
-  R visitStaticFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg) {
+  R visitStaticFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg) {
     return bulkHandleVariableDeclaration(node, arg);
   }
 
   @override
-  R visitTopLevelConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      ConstantExpression constant,
-      A arg) {
+  R visitTopLevelConstantDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, ConstantExpression constant, A arg) {
     return bulkHandleVariableDeclaration(node, arg);
   }
 
   @override
-  R visitTopLevelFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg) {
+  R visitTopLevelFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg) {
     return bulkHandleVariableDeclaration(node, arg);
   }
 }
@@ -4062,11 +2664,12 @@
 /// tests that the union of the `BulkX` mixins implement all `visit` and `error`
 /// methods of [SemanticDeclarationVisitor].
 class BulkDeclarationVisitor<R, A> extends SemanticDeclarationVisitor<R, A>
-    with ConstructorBulkMixin<R, A>,
-         FunctionBulkMixin<R, A>,
-         VariableBulkMixin<R, A>,
-         ParameterBulkMixin<R, A>,
-         InitializerBulkMixin<R, A> {
+    with
+        ConstructorBulkMixin<R, A>,
+        FunctionBulkMixin<R, A>,
+        VariableBulkMixin<R, A>,
+        ParameterBulkMixin<R, A>,
+        InitializerBulkMixin<R, A> {
   @override
   R apply(Node node, A arg) {
     throw new UnimplementedError("BulkDeclVisitor.apply unimplemented");
@@ -4091,7 +2694,6 @@
   }
 }
 
-
 /// [SemanticSendVisitor] that visits subnodes.
 class TraversalSendMixin<R, A> implements SemanticSendVisitor<R, A> {
   @override
@@ -4100,574 +2702,370 @@
   }
 
   @override
-  void previsitDeferredAccess(
-      Send node,
-      PrefixElement prefix,
-      A arg) {
-  }
+  void previsitDeferredAccess(Send node, PrefixElement prefix, A arg) {}
 
   @override
-  R errorInvalidCompound(
-      Send node,
-      ErroneousElement error,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R errorInvalidCompound(Send node, ErroneousElement error,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R errorInvalidGet(
-      Send node,
-      ErroneousElement error,
-      A arg) {
+  R errorInvalidGet(Send node, ErroneousElement error, A arg) {
     return null;
   }
 
   @override
-  R errorInvalidInvoke(
-      Send node,
-      ErroneousElement error,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R errorInvalidInvoke(Send node, ErroneousElement error, NodeList arguments,
+      Selector selector, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R errorInvalidPostfix(
-      Send node,
-      ErroneousElement error,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ErroneousElement error, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R errorInvalidPrefix(
-      Send node,
-      ErroneousElement error,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ErroneousElement error, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R errorInvalidSet(
-      Send node,
-      ErroneousElement error,
-      Node rhs,
-      A arg) {
+  R errorInvalidSet(Send node, ErroneousElement error, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R errorInvalidUnary(
-      Send node,
-      UnaryOperator operator,
-      ErroneousElement error,
-      A arg) {
+      Send node, UnaryOperator operator, ErroneousElement error, A arg) {
     return null;
   }
 
   @override
-  R errorInvalidEquals(
-      Send node,
-      ErroneousElement error,
-      Node right,
-      A arg) {
+  R errorInvalidEquals(Send node, ErroneousElement error, Node right, A arg) {
     apply(right, arg);
     return null;
   }
 
   @override
   R errorInvalidNotEquals(
-      Send node,
-      ErroneousElement error,
-      Node right,
-      A arg) {
+      Send node, ErroneousElement error, Node right, A arg) {
     apply(right, arg);
     return null;
   }
 
   @override
-  R errorInvalidBinary(
-      Send node,
-      ErroneousElement error,
-      BinaryOperator operator,
-      Node right,
-      A arg) {
+  R errorInvalidBinary(Send node, ErroneousElement error,
+      BinaryOperator operator, Node right, A arg) {
     apply(right, arg);
     return null;
   }
 
   @override
-  R errorInvalidIndex(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      A arg) {
+  R errorInvalidIndex(Send node, ErroneousElement error, Node index, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
   R errorInvalidIndexSet(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      Node rhs,
-      A arg) {
+      Send node, ErroneousElement error, Node index, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R errorInvalidCompoundIndexSet(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R errorInvalidCompoundIndexSet(Send node, ErroneousElement error, Node index,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R errorInvalidIndexPrefix(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R errorInvalidIndexPrefix(Send node, ErroneousElement error, Node index,
+      IncDecOperator operator, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
-  R errorInvalidIndexPostfix(
-      Send node,
-      ErroneousElement error,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R errorInvalidIndexPostfix(Send node, ErroneousElement error, Node index,
+      IncDecOperator operator, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
   R visitClassTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      SendSet node, ConstantExpression constant, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitDynamicTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      SendSet node, ConstantExpression constant, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitFinalLocalVariableCompound(
-      Send node,
-      LocalVariableElement variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalLocalVariableSet(
-      SendSet node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalVariableElement variable, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitFinalParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalParameterSet(
-      SendSet node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      SendSet node, ParameterElement parameter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitFinalStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      SendSet node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitFinalSuperFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitFinalSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitFinalTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalTopLevelFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      SendSet node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitLocalFunctionCompound(
-      Send node,
-      LocalFunctionElement function,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitLocalFunctionCompound(Send node, LocalFunctionElement function,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitLocalFunctionPostfix(
-      Send node,
-      LocalFunctionElement function,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalFunctionPostfix(Send node, LocalFunctionElement function,
+      IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitLocalFunctionPrefix(
-      Send node,
-      LocalFunctionElement function,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalFunctionPrefix(Send node, LocalFunctionElement function,
+      IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitLocalFunctionSet(
-      SendSet node,
-      LocalFunctionElement function,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalFunctionElement function, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticFunctionSet(
-      Send node,
-      MethodElement function,
-      Node rhs,
-      A arg) {
+  R visitStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitStaticGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement getter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg) {
+  R visitStaticSetterGet(Send node, FunctionElement setter, A arg) {
     return null;
   }
 
   @override
-  R visitStaticSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitSuperGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterSet(SendSet node, FunctionElement getter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperMethodSet(
-      Send node,
-      MethodElement method,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodSet(Send node, MethodElement method, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg) {
+  R visitSuperSetterGet(Send node, FunctionElement setter, A arg) {
     return null;
   }
 
   @override
-  R visitSuperSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitTopLevelFunctionSet(
-      Send node,
-      MethodElement function,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement function, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitTopLevelGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement getter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTopLevelSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg) {
+  R visitTopLevelSetterGet(Send node, FunctionElement setter, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitTypeVariableTypeLiteralSet(
-      SendSet node,
-      TypeVariableElement element,
-      Node rhs,
-      A arg) {
+      SendSet node, TypeVariableElement element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitTypedefTypeLiteralSet(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      SendSet node, ConstantExpression constant, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperIndex(
-      Send node,
-      Element function,
-      Node index,
-      A arg) {
+  R visitUnresolvedSuperIndex(Send node, Element function, Node index, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperGet(
-      Send node,
-      Element element,
-      A arg) {
+  R visitUnresolvedSuperGet(Send node, Element element, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedSuperSet(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSet(Send node, Element element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperInvoke(
-      Send node,
-      Element function,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedSuperInvoke(Send node, Element function, NodeList arguments,
+      Selector selector, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitAs(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg) {
+  R visitAs(Send node, Node expression, DartType type, A arg) {
     apply(expression, arg);
     return null;
   }
 
   @override
   R visitBinary(
-      Send node,
-      Node left,
-      BinaryOperator operator,
-      Node right,
-      A arg) {
+      Send node, Node left, BinaryOperator operator, Node right, A arg) {
     apply(left, arg);
     apply(right, arg);
     return null;
   }
 
   @override
-  R visitClassTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitClassTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitClassTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitClassTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitClassTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitClassTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitClassTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitClassTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitCompoundIndexSet(
-      SendSet node,
-      Node receiver,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitCompoundIndexSet(SendSet node, Node receiver, Node index,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(receiver, arg);
     apply(index, arg);
     apply(rhs, arg);
@@ -4675,77 +3073,49 @@
   }
 
   @override
-  R visitConstantGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitConstantGet(Send node, ConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitConstantInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitConstantInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(receiver, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitIfNotNullDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(receiver, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitDynamicPropertyGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg) {
+  R visitDynamicPropertyGet(Send node, Node receiver, Name name, A arg) {
     apply(receiver, arg);
     return null;
   }
 
   @override
   R visitIfNotNullDynamicPropertyGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg) {
+      Send node, Node receiver, Name name, A arg) {
     apply(receiver, arg);
     return null;
   }
 
   @override
   R visitDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
     apply(receiver, arg);
     apply(arguments, arg);
     return null;
@@ -4753,11 +3123,7 @@
 
   @override
   R visitIfNotNullDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
     apply(receiver, arg);
     apply(arguments, arg);
     return null;
@@ -4765,55 +3131,35 @@
 
   @override
   R visitDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
     apply(receiver, arg);
     return null;
   }
 
   @override
   R visitIfNotNullDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
     apply(receiver, arg);
     return null;
   }
 
   @override
   R visitDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
     apply(receiver, arg);
     return null;
   }
 
   @override
   R visitIfNotNullDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
     apply(receiver, arg);
     return null;
   }
 
   @override
   R visitDynamicPropertySet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      SendSet node, Node receiver, Name name, Node rhs, A arg) {
     apply(receiver, arg);
     apply(rhs, arg);
     return null;
@@ -4821,105 +3167,67 @@
 
   @override
   R visitIfNotNullDynamicPropertySet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      SendSet node, Node receiver, Name name, Node rhs, A arg) {
     apply(receiver, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitDynamicTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitDynamicTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitDynamicTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitDynamicTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitDynamicTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitDynamicTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitDynamicTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitDynamicTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitEquals(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitEquals(Send node, Node left, Node right, A arg) {
     apply(left, arg);
     apply(right, arg);
     return null;
   }
 
   @override
-  R visitExpressionInvoke(
-      Send node,
-      Node expression,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitExpressionInvoke(Send node, Node expression, NodeList arguments,
+      CallStructure callStructure, A arg) {
     apply(expression, arg);
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitIndex(
-      Send node,
-      Node receiver,
-      Node index,
-      A arg) {
+  R visitIndex(Send node, Node receiver, Node index, A arg) {
     apply(receiver, arg);
     apply(index, arg);
     return null;
   }
 
   @override
-  R visitIndexSet(
-      SendSet node,
-      Node receiver,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitIndexSet(SendSet node, Node receiver, Node index, Node rhs, A arg) {
     apply(receiver, arg);
     apply(index, arg);
     apply(rhs, arg);
@@ -4927,40 +3235,25 @@
   }
 
   @override
-  R visitIs(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg) {
+  R visitIs(Send node, Node expression, DartType type, A arg) {
     apply(expression, arg);
     return null;
   }
 
   @override
-  R visitIsNot(
-      Send node,
-      Node expression,
-      DartType type,
-      A arg) {
+  R visitIsNot(Send node, Node expression, DartType type, A arg) {
     apply(expression, arg);
     return null;
   }
 
   @override
-  R visitLocalFunctionGet(
-      Send node,
-      LocalFunctionElement function,
-      A arg) {
+  R visitLocalFunctionGet(Send node, LocalFunctionElement function, A arg) {
     return null;
   }
 
   @override
-  R visitLocalFunctionInvoke(
-      Send node,
-      LocalFunctionElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitLocalFunctionInvoke(Send node, LocalFunctionElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
@@ -4977,362 +3270,231 @@
   }
 
   @override
-  R visitLocalVariableCompound(
-      Send node,
-      LocalVariableElement variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitLocalVariableGet(
-      Send node,
-      LocalVariableElement variable,
-      A arg) {
+  R visitLocalVariableGet(Send node, LocalVariableElement variable, A arg) {
     return null;
   }
 
   @override
-  R visitLocalVariableInvoke(
-      Send node,
-      LocalVariableElement variable,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitLocalVariableInvoke(Send node, LocalVariableElement variable,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalVariablePostfix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalVariablePrefix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitLocalVariableSet(
-      SendSet node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalVariableElement variable, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitIfNull(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitIfNull(Send node, Node left, Node right, A arg) {
     apply(left, arg);
     apply(right, arg);
     return null;
   }
 
   @override
-  R visitLogicalAnd(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitLogicalAnd(Send node, Node left, Node right, A arg) {
     apply(left, arg);
     apply(right, arg);
     return null;
   }
 
   @override
-  R visitLogicalOr(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitLogicalOr(Send node, Node left, Node right, A arg) {
     apply(left, arg);
     apply(right, arg);
     return null;
   }
 
   @override
-  R visitNot(
-      Send node,
-      Node expression,
-      A arg) {
+  R visitNot(Send node, Node expression, A arg) {
     apply(expression, arg);
     return null;
   }
 
   @override
-  R visitNotEquals(
-      Send node,
-      Node left,
-      Node right,
-      A arg) {
+  R visitNotEquals(Send node, Node left, Node right, A arg) {
     apply(left, arg);
     apply(right, arg);
     return null;
   }
 
   @override
-  R visitParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitParameterGet(
-      Send node,
-      ParameterElement parameter,
-      A arg) {
+  R visitParameterGet(Send node, ParameterElement parameter, A arg) {
     return null;
   }
 
   @override
-  R visitParameterInvoke(
-      Send node,
-      ParameterElement parameter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitParameterInvoke(Send node, ParameterElement parameter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitParameterSet(
-      SendSet node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      SendSet node, ParameterElement parameter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitStaticFieldGet(Send node, FieldElement field, A arg) {
     return null;
   }
 
   @override
-  R visitStaticFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg) {
+  R visitStaticFunctionGet(Send node, MethodElement function, A arg) {
     return null;
   }
 
   @override
-  R visitStaticFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitStaticFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitStaticGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitStaticGetterGet(Send node, FunctionElement getter, A arg) {
     return null;
   }
 
   @override
-  R visitStaticGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitStaticGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitStaticGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitStaticMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticMethodSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticMethodSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitStaticMethodSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticMethodSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitStaticSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperBinary(
-      Send node,
-      FunctionElement function,
-      BinaryOperator operator,
-      Node argument,
-      A arg) {
+  R visitSuperBinary(Send node, FunctionElement function,
+      BinaryOperator operator, Node argument, A arg) {
     apply(argument, arg);
     return null;
   }
@@ -5352,317 +3514,197 @@
 
   @override
   R visitSuperEquals(
-      Send node,
-      FunctionElement function,
-      Node argument,
-      A arg) {
+      Send node, FunctionElement function, Node argument, A arg) {
     apply(argument, arg);
     return null;
   }
 
   @override
-  R visitSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperFieldFieldPostfix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperFieldFieldPrefix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitSuperFieldGet(Send node, FieldElement field, A arg) {
     return null;
   }
 
   @override
-  R visitSuperFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperFieldSetterCompound(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldSetterCompound(Send node, FieldElement field,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperFieldSetterPostfix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPostfix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperFieldSetterPrefix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPrefix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperGetterFieldCompound(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterFieldCompound(Send node, FunctionElement getter,
+      FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperGetterFieldPostfix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperGetterFieldPrefix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitSuperGetterGet(Send node, FunctionElement getter, A arg) {
     return null;
   }
 
   @override
-  R visitSuperGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitSuperGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperIndex(
-      Send node,
-      FunctionElement function,
-      Node index,
-      A arg) {
+  R visitSuperIndex(Send node, FunctionElement function, Node index, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
   R visitSuperIndexSet(
-      SendSet node,
-      FunctionElement function,
-      Node index,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement function, Node index, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperMethodGet(
-      Send node,
-      MethodElement method,
-      A arg) {
+  R visitSuperMethodGet(Send node, MethodElement method, A arg) {
     return null;
   }
 
   @override
-  R visitSuperMethodInvoke(
-      Send node,
-      MethodElement method,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperMethodInvoke(Send node, MethodElement method, NodeList arguments,
+      CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitSuperMethodIncompatibleInvoke(
-      Send node,
-      MethodElement method,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitSuperMethodIncompatibleInvoke(Send node, MethodElement method,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitSuperMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitSuperNotEquals(
-      Send node,
-      FunctionElement function,
-      Node argument,
-      A arg) {
+      Send node, FunctionElement function, Node argument, A arg) {
     apply(argument, arg);
     return null;
   }
 
   @override
-  R visitSuperSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitSuperSetterSet(SendSet node, FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      FunctionElement function,
-      A arg) {
+      Send node, UnaryOperator operator, FunctionElement function, A arg) {
     return null;
   }
 
@@ -5673,423 +3715,270 @@
 
   @override
   R visitThisInvoke(
-      Send node,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+      Send node, NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitThisPropertyCompound(
-      Send node,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+      Send node, Name name, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitThisPropertyGet(
-      Send node,
-      Name name,
-      A arg) {
+  R visitThisPropertyGet(Send node, Name name, A arg) {
     return null;
   }
 
   @override
   R visitThisPropertyInvoke(
-      Send node,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, NodeList arguments, Selector selector, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitThisPropertyPostfix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Name name, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitThisPropertyPrefix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Name name, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitThisPropertySet(
-      SendSet node,
-      Name name,
-      Node rhs,
-      A arg) {
+  R visitThisPropertySet(SendSet node, Name name, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTopLevelFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitTopLevelFieldGet(Send node, FieldElement field, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTopLevelFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg) {
+  R visitTopLevelFunctionGet(Send node, MethodElement function, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitTopLevelFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitTopLevelGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitTopLevelGetterGet(Send node, FunctionElement getter, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitTopLevelGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTopLevelGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTopLevelMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitTopLevelSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTypeVariableTypeLiteralCompound(
-      Send node,
-      TypeVariableElement element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitTypeVariableTypeLiteralGet(
-      Send node,
-      TypeVariableElement element,
-      A arg) {
+      Send node, TypeVariableElement element, A arg) {
     return null;
   }
 
   @override
-  R visitTypeVariableTypeLiteralInvoke(
-      Send node,
-      TypeVariableElement element,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTypeVariableTypeLiteralInvoke(Send node, TypeVariableElement element,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitTypeVariableTypeLiteralPostfix(
-      Send node,
-      TypeVariableElement element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitTypeVariableTypeLiteralPrefix(
-      Send node,
-      TypeVariableElement element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitTypedefTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTypedefTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTypedefTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitTypedefTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitTypedefTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTypedefTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitTypedefTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitTypedefTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnary(
-      Send node,
-      UnaryOperator operator,
-      Node expression,
-      A arg) {
+  R visitUnary(Send node, UnaryOperator operator, Node expression, A arg) {
     apply(expression, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedCompound(
-      Send node,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedCompound(Send node, Element element,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedGet(
-      Send node,
-      Element element,
-      A arg) {
+  R visitUnresolvedGet(Send node, Element element, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedInvoke(Send node, Element element, NodeList arguments,
+      Selector selector, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
   R visitUnresolvedPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitUnresolvedPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedSet(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSet(Send node, Element element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R errorUndefinedBinaryExpression(
-      Send node,
-      Node left,
-      Operator operator,
-      Node right,
-      A arg) {
+      Send node, Node left, Operator operator, Node right, A arg) {
     apply(left, arg);
     apply(right, arg);
     return null;
@@ -6097,21 +3986,14 @@
 
   @override
   R errorUndefinedUnaryExpression(
-      Send node,
-      Operator operator,
-      Node expression,
-      A arg) {
+      Send node, Operator operator, Node expression, A arg) {
     apply(expression, arg);
     return null;
   }
 
   @override
   R visitUnresolvedSuperIndexSet(
-      Send node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg) {
+      Send node, Element element, Node index, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
@@ -6146,115 +4028,71 @@
   }
 
   @override
-  R visitUnresolvedSuperCompoundIndexSet(
-      SendSet node,
-      Element element,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperCompoundIndexSet(SendSet node, Element element,
+      Node index, AssignmentOperator operator, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperBinary(
-      Send node,
-      Element element,
-      BinaryOperator operator,
-      Node argument,
-      A arg) {
+  R visitUnresolvedSuperBinary(Send node, Element element,
+      BinaryOperator operator, Node argument, A arg) {
     apply(argument, arg);
     return null;
   }
 
   @override
   R visitUnresolvedSuperUnary(
-      Send node,
-      UnaryOperator operator,
-      Element element,
-      A arg) {
+      Send node, UnaryOperator operator, Element element, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexPostfix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperSetterIndexPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterIndexPostfix(Send node, MethodElement getter,
+      Element element, Node index, IncDecOperator operator, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
   R visitUnresolvedSuperIndexPostfix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, Node index, IncDecOperator operator, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexPrefix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperSetterIndexPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterIndexPrefix(Send node, MethodElement getter,
+      Element element, Node index, IncDecOperator operator, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
   R visitUnresolvedSuperIndexPrefix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, Node index, IncDecOperator operator, A arg) {
     apply(index, arg);
     return null;
   }
 
   @override
   R visitIndexPostfix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
     apply(receiver, arg);
     apply(index, arg);
     return null;
@@ -6262,11 +4100,7 @@
 
   @override
   R visitIndexPrefix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
     apply(receiver, arg);
     apply(index, arg);
     return null;
@@ -6297,32 +4131,21 @@
   }
 
   @override
-  R errorInvalidSetIfNull(
-      Send node,
-      ErroneousElement error,
-      Node rhs,
-      A arg) {
+  R errorInvalidSetIfNull(Send node, ErroneousElement error, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitClassTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitDynamicPropertySetIfNull(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      Send node, Node receiver, Name name, Node rhs, A arg) {
     apply(receiver, arg);
     apply(rhs, arg);
     return null;
@@ -6330,71 +4153,49 @@
 
   @override
   R visitDynamicTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalLocalVariableSetIfNull(
-      Send node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      Send node, LocalVariableElement variable, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalParameterSetIfNull(
-      Send node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      Send node, ParameterElement parameter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalStaticFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalSuperFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalTopLevelFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitIfNotNullDynamicPropertySetIfNull(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      Send node, Node receiver, Name name, Node rhs, A arg) {
     apply(receiver, arg);
     apply(rhs, arg);
     return null;
@@ -6402,338 +4203,223 @@
 
   @override
   R visitLocalFunctionSetIfNull(
-      Send node,
-      LocalFunctionElement function,
-      Node rhs,
-      A arg) {
+      Send node, LocalFunctionElement function, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitLocalVariableSetIfNull(
-      Send node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      Send node, LocalVariableElement variable, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitParameterSetIfNull(
-      Send node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      Send node, ParameterElement parameter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitStaticFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitStaticMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
+      Send node, FunctionElement method, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitStaticMethodSetterSetIfNull(
-      Send node,
-      MethodElement method,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement method, MethodElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperFieldFieldSetIfNull(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
+      FieldElement writtenField, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitSuperFieldSetterSetIfNull(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitSuperGetterFieldSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FunctionElement getter, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitSuperMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
+      Send node, FunctionElement method, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitSuperMethodSetterSetIfNull(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodSetterSetIfNull(Send node, FunctionElement method,
+      FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitThisPropertySetIfNull(
-      Send node,
-      Name name,
-      Node rhs,
-      A arg) {
+  R visitThisPropertySetIfNull(Send node, Name name, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitTopLevelFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      Send node, FieldElement field, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTopLevelGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitTopLevelGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitTopLevelMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
+      Send node, FunctionElement method, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitTopLevelMethodSetterSetIfNull(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+  R visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method,
+      FunctionElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitTypeVariableTypeLiteralSetIfNull(
-      Send node,
-      TypeVariableElement element,
-      Node rhs,
-      A arg) {
+      Send node, TypeVariableElement element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitTypedefTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSetIfNull(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSetIfNull(Send node, Element element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitUnresolvedStaticGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitUnresolvedStaticSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitUnresolvedSuperGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperSetIfNull(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSetIfNull(Send node, Element element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitUnresolvedSuperSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitUnresolvedTopLevelGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitUnresolvedTopLevelSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitConstConstructorInvoke(
-      NewExpression node,
-      ConstructedConstantExpression constant,
-      A arg) {
+      NewExpression node, ConstructedConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitBoolFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      BoolFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitBoolFromEnvironmentConstructorInvoke(NewExpression node,
+      BoolFromEnvironmentConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitIntFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      IntFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitIntFromEnvironmentConstructorInvoke(NewExpression node,
+      IntFromEnvironmentConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitStringFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      StringFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitStringFromEnvironmentConstructorInvoke(NewExpression node,
+      StringFromEnvironmentConstantExpression constant, A arg) {
     return null;
   }
 
@@ -6762,13 +4448,8 @@
   }
 
   @override
-  R visitUnresolvedConstructorInvoke(
-      NewExpression node,
-      Element constructor,
-      DartType type,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedConstructorInvoke(NewExpression node, Element constructor,
+      DartType type, NodeList arguments, Selector selector, A arg) {
     apply(arguments, arg);
     return null;
   }
@@ -6848,442 +4529,279 @@
   }
 
   @override
-  R errorNonConstantConstructorInvoke(
-      NewExpression node,
-      Element element,
-      DartType type,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R errorNonConstantConstructorInvoke(NewExpression node, Element element,
+      DartType type, NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedStaticGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedStaticGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedTopLevelGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedTopLevelGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedStaticSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedStaticSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedTopLevelSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitStaticMethodCompound(
-      Send node,
-      MethodElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticMethodCompound(Send node, MethodElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedStaticGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedTopLevelGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedStaticSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedTopLevelSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitStaticMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitTopLevelMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedStaticGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedTopLevelGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedStaticSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedTopLevelSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitStaticMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitTopLevelMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitFinalLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitFinalLocalVariablePostfix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitFinalLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitFinalLocalVariablePrefix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitFinalParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitFinalParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitFinalStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitFinalStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperFieldFieldCompound(
-      Send node, FieldElement readField,
-      FieldElement writtenField,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldFieldCompound(Send node, FieldElement readField,
+      FieldElement writtenField, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitFinalSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitFinalSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitFinalSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitSuperMethodCompound(
-      Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperMethodCompound(Send node, FunctionElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitSuperMethodPostfix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FunctionElement method, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitSuperMethodPrefix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FunctionElement method, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitFinalTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitFinalTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelMethodCompound(
-      Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelMethodCompound(Send node, FunctionElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperCompound(
-      Send node,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperCompound(Send node, Element element,
+      AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
   R visitUnresolvedSuperPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitUnresolvedSuperPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedSuperGetterCompound(
-      Send node, Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedSuperGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedSuperSetterCompound(
-      Send node, MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
-  R visitUnresolvedSuperSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return null;
   }
 
   @override
   R visitIndexSetIfNull(
-      SendSet node,
-      Node receiver,
-      Node index,
-      Node rhs,
-      A arg) {
+      SendSet node, Node receiver, Node index, Node rhs, A arg) {
     apply(receiver, arg);
     apply(index, arg);
     apply(rhs, arg);
@@ -7291,52 +4809,32 @@
   }
 
   @override
-  R visitSuperIndexSetIfNull(
-      SendSet node,
-      MethodElement getter,
-      MethodElement setter,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitSuperIndexSetIfNull(SendSet node, MethodElement getter,
+      MethodElement setter, Node index, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element element,
+      MethodElement setter, Node index, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
   }
 
   @override
-  R visitUnresolvedSuperSetterIndexSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperSetterIndexSetIfNull(Send node, MethodElement getter,
+      Element element, Node index, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
   }
 
-
   @override
   R visitUnresolvedSuperIndexSetIfNull(
-      Send node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg) {
+      Send node, Element element, Node index, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
@@ -7344,11 +4842,7 @@
 
   @override
   R errorInvalidIndexSetIfNull(
-      SendSet node,
-      ErroneousElement error,
-      Node index,
-      Node rhs,
-      A arg) {
+      SendSet node, ErroneousElement error, Node index, Node rhs, A arg) {
     apply(index, arg);
     apply(rhs, arg);
     return null;
@@ -7376,34 +4870,23 @@
   }
 
   @override
-  R visitAbstractMethodDeclaration(
-      FunctionExpression node,
-      MethodElement method,
-      NodeList parameters,
-      A arg) {
+  R visitAbstractMethodDeclaration(FunctionExpression node,
+      MethodElement method, NodeList parameters, A arg) {
     applyParameters(parameters, arg);
     return null;
   }
 
   @override
-  R visitClosureDeclaration(
-      FunctionExpression node,
-      LocalFunctionElement function,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitClosureDeclaration(FunctionExpression node,
+      LocalFunctionElement function, NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
   }
 
   @override
-  R visitFactoryConstructorDeclaration(
-      FunctionExpression node,
-      ConstructorElement constructor,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitFactoryConstructorDeclaration(FunctionExpression node,
+      ConstructorElement constructor, NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
@@ -7411,10 +4894,7 @@
 
   @override
   R visitFieldInitializer(
-      SendSet node,
-      FieldElement field,
-      Node initializer,
-      A arg) {
+      SendSet node, FieldElement field, Node initializer, A arg) {
     apply(initializer, arg);
     return null;
   }
@@ -7434,24 +4914,16 @@
   }
 
   @override
-  R visitInstanceMethodDeclaration(
-      FunctionExpression node,
-      MethodElement method,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitInstanceMethodDeclaration(FunctionExpression node,
+      MethodElement method, NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
   }
 
   @override
-  R visitLocalFunctionDeclaration(
-      FunctionExpression node,
-      LocalFunctionElement function,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitLocalFunctionDeclaration(FunctionExpression node,
+      LocalFunctionElement function, NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
@@ -7482,12 +4954,8 @@
   }
 
   @override
-  R visitStaticFunctionDeclaration(
-      FunctionExpression node,
-      MethodElement function,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitStaticFunctionDeclaration(FunctionExpression node,
+      MethodElement function, NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
@@ -7506,32 +4974,21 @@
   }
 
   @override
-  R visitImplicitSuperConstructorInvoke(
-      FunctionExpression node,
-      ConstructorElement superConstructor,
-      InterfaceType type,
-      A arg) {
+  R visitImplicitSuperConstructorInvoke(FunctionExpression node,
+      ConstructorElement superConstructor, InterfaceType type, A arg) {
     return null;
   }
 
   @override
-  R visitThisConstructorInvoke(
-      Send node,
-      ConstructorElement thisConstructor,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitThisConstructorInvoke(Send node, ConstructorElement thisConstructor,
+      NodeList arguments, CallStructure callStructure, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitTopLevelFunctionDeclaration(
-      FunctionExpression node,
-      MethodElement function,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitTopLevelFunctionDeclaration(FunctionExpression node,
+      MethodElement function, NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
@@ -7539,43 +4996,28 @@
 
   @override
   R errorUnresolvedFieldInitializer(
-      SendSet node,
-      Element element,
-      Node initializer,
-      A arg) {
+      SendSet node, Element element, Node initializer, A arg) {
     apply(initializer, arg);
     return null;
   }
 
   @override
-  R errorUnresolvedSuperConstructorInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R errorUnresolvedSuperConstructorInvoke(Send node, Element element,
+      NodeList arguments, Selector selector, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R errorUnresolvedThisConstructorInvoke(
-      Send node,
-      Element element,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R errorUnresolvedThisConstructorInvoke(Send node, Element element,
+      NodeList arguments, Selector selector, A arg) {
     apply(arguments, arg);
     return null;
   }
 
   @override
-  R visitLocalVariableDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      LocalVariableElement variable,
-      Node initializer,
-      A arg) {
+  R visitLocalVariableDeclaration(VariableDefinitions node, Node definition,
+      LocalVariableElement variable, Node initializer, A arg) {
     if (initializer != null) {
       apply(initializer, arg);
     }
@@ -7594,12 +5036,8 @@
   }
 
   @override
-  R visitParameterDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      ParameterElement parameter,
-      int index,
-      A arg) {
+  R visitParameterDeclaration(VariableDefinitions node, Node definition,
+      ParameterElement parameter, int index, A arg) {
     return null;
   }
 
@@ -7614,12 +5052,8 @@
   }
 
   @override
-  R visitLocalConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      LocalVariableElement variable,
-      ConstantExpression constant,
-      A arg) {
+  R visitLocalConstantDeclaration(VariableDefinitions node, Node definition,
+      LocalVariableElement variable, ConstantExpression constant, A arg) {
     return null;
   }
 
@@ -7634,12 +5068,8 @@
   }
 
   @override
-  R visitNamedParameterDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      ParameterElement parameter,
-      ConstantExpression defaultValue,
-      A arg) {
+  R visitNamedParameterDeclaration(VariableDefinitions node, Node definition,
+      ParameterElement parameter, ConstantExpression defaultValue, A arg) {
     return null;
   }
 
@@ -7655,12 +5085,8 @@
   }
 
   @override
-  R visitInstanceFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg) {
+  R visitInstanceFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg) {
     if (initializer != null) {
       apply(initializer, arg);
     }
@@ -7668,22 +5094,14 @@
   }
 
   @override
-  R visitStaticConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      ConstantExpression constant,
-      A arg) {
+  R visitStaticConstantDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, ConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitStaticFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg) {
+  R visitStaticFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg) {
     if (initializer != null) {
       apply(initializer, arg);
     }
@@ -7691,22 +5109,14 @@
   }
 
   @override
-  R visitTopLevelConstantDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      ConstantExpression constant,
-      A arg) {
+  R visitTopLevelConstantDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, ConstantExpression constant, A arg) {
     return null;
   }
 
   @override
-  R visitTopLevelFieldDeclaration(
-      VariableDefinitions node,
-      Node definition,
-      FieldElement field,
-      Node initializer,
-      A arg) {
+  R visitTopLevelFieldDeclaration(VariableDefinitions node, Node definition,
+      FieldElement field, Node initializer, A arg) {
     if (initializer != null) {
       apply(initializer, arg);
     }
@@ -7715,39 +5125,27 @@
 
   @override
   R visitAbstractGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      A arg) {
+      FunctionExpression node, MethodElement getter, A arg) {
     return null;
   }
 
   @override
-  R visitAbstractSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      A arg) {
+  R visitAbstractSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, A arg) {
     applyParameters(parameters, arg);
     return null;
   }
 
   @override
   R visitInstanceGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg) {
+      FunctionExpression node, MethodElement getter, Node body, A arg) {
     apply(body, arg);
     return null;
   }
 
   @override
-  R visitInstanceSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitInstanceSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
@@ -7755,21 +5153,14 @@
 
   @override
   R visitStaticGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg) {
+      FunctionExpression node, MethodElement getter, Node body, A arg) {
     apply(body, arg);
     return null;
   }
 
   @override
-  R visitStaticSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitStaticSetterDeclaration(FunctionExpression node, MethodElement setter,
+      NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
@@ -7777,21 +5168,14 @@
 
   @override
   R visitTopLevelGetterDeclaration(
-      FunctionExpression node,
-      MethodElement getter,
-      Node body,
-      A arg) {
+      FunctionExpression node, MethodElement getter, Node body, A arg) {
     apply(body, arg);
     return null;
   }
 
   @override
-  R visitTopLevelSetterDeclaration(
-      FunctionExpression node,
-      MethodElement setter,
-      NodeList parameters,
-      Node body,
-      A arg) {
+  R visitTopLevelSetterDeclaration(FunctionExpression node,
+      MethodElement setter, NodeList parameters, Node body, A arg) {
     applyParameters(parameters, arg);
     apply(body, arg);
     return null;
@@ -7801,8 +5185,7 @@
 /// AST visitor that visits all normal [Send] and [SendSet] nodes using the
 /// [SemanticVisitor].
 class TraversalVisitor<R, A> extends SemanticVisitor<R, A>
-    with TraversalSendMixin<R, A>,
-         TraversalDeclarationMixin<R, A> {
+    with TraversalSendMixin<R, A>, TraversalDeclarationMixin<R, A> {
   TraversalVisitor(TreeElements elements) : super(elements);
 
   SemanticSendVisitor<R, A> get sendVisitor => this;
@@ -7849,350 +5232,204 @@
 /// class members are handled uniformly.
 abstract class BaseImplementationOfStaticsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-  R handleStaticFieldGet(
-      Send node,
-      FieldElement field,
-      A arg);
+  R handleStaticFieldGet(Send node, FieldElement field, A arg);
 
-  R handleStaticFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R handleStaticFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg);
 
-  R handleStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+  R handleStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg);
 
-  R handleStaticFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg);
+  R handleStaticFunctionGet(Send node, MethodElement function, A arg);
 
-  R handleStaticFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R handleStaticFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg);
 
-  R handleStaticFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R handleStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg);
 
-  R handleStaticGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg);
+  R handleStaticGetterGet(Send node, FunctionElement getter, A arg);
 
-  R handleStaticGetterSet(
-      Send node,
-      FunctionElement getter,
-      Node rhs,
-      A arg);
+  R handleStaticGetterSet(Send node, FunctionElement getter, Node rhs, A arg);
 
-  R handleStaticGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R handleStaticGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
-  R handleStaticSetterGet(
-      SendSet node,
-      FunctionElement setter,
-      A arg);
+  R handleStaticSetterGet(SendSet node, FunctionElement setter, A arg);
 
   R handleStaticSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg);
+      SendSet node, FunctionElement setter, Node rhs, A arg);
 
-  R handleStaticSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R handleStaticSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   R handleFinalStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg);
+      SendSet node, FieldElement field, Node rhs, A arg);
 
   R handleStaticFunctionSet(
-      SendSet node,
-      MethodElement function,
-      Node rhs,
-      A arg);
+      SendSet node, MethodElement function, Node rhs, A arg);
 
   @override
-  R visitStaticFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitStaticFieldGet(Send node, FieldElement field, A arg) {
     return handleStaticFieldGet(node, field, arg);
   }
 
   @override
-  R visitStaticFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return handleStaticFieldInvoke(node, field, arguments, callStructure, arg);
   }
 
   @override
-  R visitStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitStaticFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     return handleStaticFieldSet(node, field, rhs, arg);
   }
 
   @override
-  R visitStaticFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg) {
+  R visitStaticFunctionGet(Send node, MethodElement function, A arg) {
     return handleStaticFunctionGet(node, function, arg);
   }
 
   @override
-  R visitStaticFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleStaticFunctionInvoke(
         node, function, arguments, callStructure, arg);
   }
 
   @override
-  R visitStaticFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleStaticFunctionIncompatibleInvoke(
         node, function, arguments, callStructure, arg);
   }
 
   @override
-  R visitStaticGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitStaticGetterGet(Send node, FunctionElement getter, A arg) {
     return handleStaticGetterGet(node, getter, arg);
   }
 
   @override
-  R visitStaticGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleStaticGetterInvoke(
         node, getter, arguments, callStructure, arg);
   }
 
   @override
   R visitStaticSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement setter, Node rhs, A arg) {
     return handleStaticSetterSet(node, setter, rhs, arg);
   }
 
   @override
-  R visitTopLevelFieldGet(
-      Send node,
-      FieldElement field,
-      A arg) {
+  R visitTopLevelFieldGet(Send node, FieldElement field, A arg) {
     return handleStaticFieldGet(node, field, arg);
   }
 
   @override
-  R visitTopLevelFieldInvoke(
-      Send node,
-      FieldElement field,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFieldInvoke(Send node, FieldElement field, NodeList arguments,
+      CallStructure callStructure, A arg) {
     return handleStaticFieldInvoke(node, field, arguments, callStructure, arg);
   }
 
   @override
-  R visitTopLevelFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+  R visitTopLevelFieldSet(SendSet node, FieldElement field, Node rhs, A arg) {
     return handleStaticFieldSet(node, field, rhs, arg);
   }
 
   @override
-  R visitTopLevelFunctionGet(
-      Send node,
-      MethodElement function,
-      A arg) {
+  R visitTopLevelFunctionGet(Send node, MethodElement function, A arg) {
     return handleStaticFunctionGet(node, function, arg);
   }
 
   @override
-  R visitTopLevelFunctionInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFunctionInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleStaticFunctionInvoke(
         node, function, arguments, callStructure, arg);
   }
 
   @override
-  R visitTopLevelFunctionIncompatibleInvoke(
-      Send node,
-      MethodElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelFunctionIncompatibleInvoke(Send node, MethodElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleStaticFunctionIncompatibleInvoke(
         node, function, arguments, callStructure, arg);
   }
 
   @override
-  R visitTopLevelGetterGet(
-      Send node,
-      FunctionElement getter,
-      A arg) {
+  R visitTopLevelGetterGet(Send node, FunctionElement getter, A arg) {
     return handleStaticGetterGet(node, getter, arg);
   }
 
   @override
   R visitTopLevelGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement getter, Node rhs, A arg) {
     return handleStaticGetterSet(node, getter, rhs, arg);
   }
 
   @override
-  R visitTopLevelGetterInvoke(
-      Send node,
-      FunctionElement getter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelGetterInvoke(Send node, FunctionElement getter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleStaticGetterInvoke(
         node, getter, arguments, callStructure, arg);
   }
 
   @override
   R visitTopLevelSetterSet(
-      SendSet node,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement setter, Node rhs, A arg) {
     return handleStaticSetterSet(node, setter, rhs, arg);
   }
 
   @override
-  R visitStaticSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitStaticSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleStaticSetterInvoke(
         node, setter, arguments, callStructure, arg);
   }
 
   @override
-  R visitTopLevelSetterInvoke(
-      Send node,
-      FunctionElement setter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTopLevelSetterInvoke(Send node, FunctionElement setter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleStaticSetterInvoke(
         node, setter, arguments, callStructure, arg);
   }
 
   @override
-  R visitStaticSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg) {
+  R visitStaticSetterGet(Send node, FunctionElement setter, A arg) {
     return handleStaticSetterGet(node, setter, arg);
   }
 
   @override
   R visitStaticGetterSet(
-      SendSet node,
-      FunctionElement getter,
-      Node rhs,
-      A arg) {
+      SendSet node, FunctionElement getter, Node rhs, A arg) {
     return handleStaticGetterSet(node, getter, rhs, arg);
   }
 
   @override
-  R visitTopLevelSetterGet(
-      Send node,
-      FunctionElement setter,
-      A arg) {
+  R visitTopLevelSetterGet(Send node, FunctionElement setter, A arg) {
     return handleStaticSetterGet(node, setter, arg);
   }
 
   @override
   R visitFinalStaticFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      SendSet node, FieldElement field, Node rhs, A arg) {
     return handleFinalStaticFieldSet(node, field, rhs, arg);
   }
 
   @override
   R visitFinalTopLevelFieldSet(
-      SendSet node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
+      SendSet node, FieldElement field, Node rhs, A arg) {
     return handleFinalStaticFieldSet(node, field, rhs, arg);
   }
 
   @override
-  R visitStaticFunctionSet(
-      Send node,
-      MethodElement function,
-      Node rhs,
-      A arg) {
+  R visitStaticFunctionSet(Send node, MethodElement function, Node rhs, A arg) {
     return handleStaticFunctionSet(node, function, rhs, arg);
   }
 
   @override
   R visitTopLevelFunctionSet(
-      Send node,
-      MethodElement function,
-      Node rhs,
-      A arg) {
+      Send node, MethodElement function, Node rhs, A arg) {
     return handleStaticFunctionSet(node, function, rhs, arg);
   }
 }
@@ -8204,436 +5441,271 @@
 /// class members are handled uniformly.
 abstract class BaseImplementationOfStaticCompoundsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-  R handleStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg);
 
   R handleStaticFieldPostfixPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg,
+      Send node, FieldElement field, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleStaticGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleStaticGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
-  R handleStaticGetterSetterPostfixPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg,
+  R handleStaticGetterSetterPostfixPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleStaticMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleStaticMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
-  R handleStaticMethodSetterPostfixPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg,
+  R handleStaticMethodSetterPostfixPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleFinalStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleFinalStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg);
 
   R handleFinalStaticFieldPostfixPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg,
+      Send node, FieldElement field, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleStaticMethodCompound(
-      Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleStaticMethodCompound(Send node, FunctionElement method,
+      AssignmentOperator operator, Node rhs, A arg);
 
   R handleStaticMethodPostfixPrefix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg,
+      Send node, FunctionElement method, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleUnresolvedStaticGetterCompound(
-      Send node,
-      Element element,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleUnresolvedStaticGetterCompound(Send node, Element element,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg);
 
-  R handleUnresolvedStaticGetterPostfixPrefix(
-      Send node,
-      Element element,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg,
+  R handleUnresolvedStaticGetterPostfixPrefix(Send node, Element element,
+      FunctionElement setter, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleUnresolvedStaticSetterCompound(
-      Send node,
-      FunctionElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleUnresolvedStaticSetterCompound(Send node, FunctionElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg);
 
-  R handleUnresolvedStaticSetterPostfixPrefix(
-      Send node,
-      FunctionElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg,
+  R handleUnresolvedStaticSetterPostfixPrefix(Send node, FunctionElement getter,
+      Element element, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   @override
-  R visitStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticFieldCompound(node, field, operator, rhs, arg);
   }
 
   @override
   R visitStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleStaticFieldPostfixPrefix(
-        node, field, operator, arg, isPrefix: false);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleStaticFieldPostfixPrefix(node, field, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleStaticFieldPostfixPrefix(
-        node, field, operator, arg, isPrefix: true);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleStaticFieldPostfixPrefix(node, field, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitStaticGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticGetterSetterCompound(
         node, getter, setter, operator, rhs, arg);
   }
 
   @override
-  R visitStaticGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticGetterSetterPostfixPrefix(
-        node, getter, setter, operator, arg, isPrefix: false);
+        node, getter, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitStaticGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticGetterSetterPostfixPrefix(
-        node, getter, setter, operator, arg, isPrefix: true);
+        node, getter, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitStaticMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitStaticMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticMethodSetterCompound(
         node, method, setter, operator, rhs, arg);
   }
 
   @override
-  R visitStaticMethodSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticMethodSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticMethodSetterPostfixPrefix(
-        node, getter, setter, operator, arg, isPrefix: false);
+        node, getter, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitStaticMethodSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticMethodSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticMethodSetterPostfixPrefix(
-        node, getter, setter, operator, arg, isPrefix: true);
+        node, getter, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticFieldCompound(node, field, operator, rhs, arg);
   }
 
   @override
   R visitTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleStaticFieldPostfixPrefix(
-        node, field, operator, arg, isPrefix: false);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleStaticFieldPostfixPrefix(node, field, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleStaticFieldPostfixPrefix(
-        node, field, operator, arg, isPrefix: true);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleStaticFieldPostfixPrefix(node, field, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitTopLevelGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticGetterSetterCompound(
         node, getter, setter, operator, rhs, arg);
   }
 
   @override
-  R visitTopLevelGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticGetterSetterPostfixPrefix(
-        node, getter, setter, operator, arg, isPrefix: false);
+        node, getter, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitTopLevelGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticGetterSetterPostfixPrefix(
-        node, getter, setter, operator, arg, isPrefix: true);
+        node, getter, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitTopLevelMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTopLevelMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticMethodSetterCompound(
         node, method, setter, operator, rhs, arg);
   }
 
   @override
-  R visitTopLevelMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticMethodSetterPostfixPrefix(
-        node, method, setter, operator, arg, isPrefix: false);
+        node, method, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitTopLevelMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticMethodSetterPostfixPrefix(
-        node, method, setter, operator, arg, isPrefix: true);
+        node, method, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitFinalStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleFinalStaticFieldCompound(
-        node, field, operator, rhs, arg);
+  R visitFinalStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleFinalStaticFieldCompound(node, field, operator, rhs, arg);
   }
 
   @override
   R visitFinalStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleFinalStaticFieldPostfixPrefix(
-        node, field, operator, arg, isPrefix: false);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleFinalStaticFieldPostfixPrefix(node, field, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitFinalStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleFinalStaticFieldPostfixPrefix(
-        node, field, operator, arg, isPrefix: true);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleFinalStaticFieldPostfixPrefix(node, field, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitStaticMethodCompound(
-      Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticMethodCompound(
-        node, method, operator, rhs, arg);
+  R visitStaticMethodCompound(Send node, FunctionElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticMethodCompound(node, method, operator, rhs, arg);
   }
 
   @override
   R visitStaticMethodPostfix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg) {
-    return handleStaticMethodPostfixPrefix(
-        node, method, operator, arg, isPrefix: false);
+      Send node, FunctionElement method, IncDecOperator operator, A arg) {
+    return handleStaticMethodPostfixPrefix(node, method, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitStaticMethodPrefix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg) {
-    return handleStaticMethodPostfixPrefix(
-        node, method, operator, arg, isPrefix: true);
+      Send node, FunctionElement method, IncDecOperator operator, A arg) {
+    return handleStaticMethodPostfixPrefix(node, method, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitUnresolvedStaticGetterCompound(
-      Send node,
-      Element element,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedStaticGetterCompound(Send node, Element element,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return handleUnresolvedStaticGetterCompound(
         node, element, setter, operator, rhs, arg);
   }
 
   @override
-  R visitUnresolvedStaticGetterPostfix(
-      Send node,
-      Element element,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticGetterPostfix(Send node, Element element,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleUnresolvedStaticGetterPostfixPrefix(
-        node, element, setter, operator, arg, isPrefix: false);
+        node, element, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitUnresolvedStaticGetterPrefix(
-      Send node,
-      Element element,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticGetterPrefix(Send node, Element element,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleUnresolvedStaticGetterPostfixPrefix(
-        node, element, setter, operator, arg, isPrefix: true);
+        node, element, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitUnresolvedStaticSetterCompound(
-      Send node,
-      FunctionElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedStaticSetterCompound(Send node, FunctionElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
     return handleUnresolvedStaticSetterCompound(
         node, getter, element, operator, rhs, arg);
   }
 
   @override
-  R visitUnresolvedStaticSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticSetterPostfix(Send node, FunctionElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleUnresolvedStaticSetterPostfixPrefix(
-        node, getter, element, operator, arg, isPrefix: false);
+        node, getter, element, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitUnresolvedStaticSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticSetterPrefix(Send node, FunctionElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleUnresolvedStaticSetterPostfixPrefix(
-        node, getter, element, operator, arg, isPrefix: true);
+        node, getter, element, operator, arg,
+        isPrefix: true);
   }
 }
 
@@ -8644,45 +5716,24 @@
 /// and local functions, captured or not, are handled uniformly.
 abstract class BaseImplementationOfLocalsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-  R handleLocalGet(
-      Send node,
-      LocalElement element,
-      A arg);
+  R handleLocalGet(Send node, LocalElement element, A arg);
 
-  R handleLocalInvoke(
-      Send node,
-      LocalElement element,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R handleLocalInvoke(Send node, LocalElement element, NodeList arguments,
+      CallStructure callStructure, A arg);
 
-  R handleLocalSet(
-      SendSet node,
-      LocalElement element,
-      Node rhs,
-      A arg);
+  R handleLocalSet(SendSet node, LocalElement element, Node rhs, A arg);
 
   R handleImmutableLocalSet(
-      SendSet node,
-      LocalElement element,
-      Node rhs,
-      A arg);
+      SendSet node, LocalElement element, Node rhs, A arg);
 
   @override
-  R visitLocalFunctionGet(
-      Send node,
-      LocalFunctionElement function,
-      A arg) {
+  R visitLocalFunctionGet(Send node, LocalFunctionElement function, A arg) {
     return handleLocalGet(node, function, arg);
   }
 
   @override
-  R visitLocalFunctionInvoke(
-      Send node,
-      LocalFunctionElement function,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitLocalFunctionInvoke(Send node, LocalFunctionElement function,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleLocalInvoke(node, function, arguments, callStructure, arg);
   }
 
@@ -8697,83 +5748,54 @@
   }
 
   @override
-  R visitLocalVariableGet(
-      Send node,
-      LocalVariableElement variable,
-      A arg) {
+  R visitLocalVariableGet(Send node, LocalVariableElement variable, A arg) {
     return handleLocalGet(node, variable, arg);
   }
 
   @override
-  R visitLocalVariableInvoke(
-      Send node,
-      LocalVariableElement variable,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitLocalVariableInvoke(Send node, LocalVariableElement variable,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleLocalInvoke(node, variable, arguments, callStructure, arg);
   }
 
   @override
   R visitLocalVariableSet(
-      SendSet node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalVariableElement variable, Node rhs, A arg) {
     return handleLocalSet(node, variable, rhs, arg);
   }
 
   @override
-  R visitParameterGet(
-      Send node,
-      ParameterElement parameter,
-      A arg) {
+  R visitParameterGet(Send node, ParameterElement parameter, A arg) {
     return handleLocalGet(node, parameter, arg);
   }
 
   @override
-  R visitParameterInvoke(
-      Send node,
-      ParameterElement parameter,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitParameterInvoke(Send node, ParameterElement parameter,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleLocalInvoke(node, parameter, arguments, callStructure, arg);
   }
 
   @override
   R visitParameterSet(
-      SendSet node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      SendSet node, ParameterElement parameter, Node rhs, A arg) {
     return handleLocalSet(node, parameter, rhs, arg);
   }
 
   @override
   R visitFinalLocalVariableSet(
-      SendSet node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalVariableElement variable, Node rhs, A arg) {
     return handleImmutableLocalSet(node, variable, rhs, arg);
   }
 
   @override
   R visitFinalParameterSet(
-      SendSet node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
+      SendSet node, ParameterElement parameter, Node rhs, A arg) {
     return handleImmutableLocalSet(node, parameter, rhs, arg);
   }
 
   @override
   R visitLocalFunctionSet(
-      SendSet node,
-      LocalFunctionElement function,
-      Node rhs,
-      A arg) {
+      SendSet node, LocalFunctionElement function, Node rhs, A arg) {
     return handleImmutableLocalSet(node, function, rhs, arg);
   }
 }
@@ -8785,78 +5807,51 @@
 /// and local functions, captured or not, are handled uniformly.
 abstract class BaseImplementationOfLocalCompoundsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-  R handleLocalCompound(
-      Send node,
-      LocalElement element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleLocalCompound(Send node, LocalElement element,
+      AssignmentOperator operator, Node rhs, A arg);
 
   R handleLocalPostfixPrefix(
-      Send node,
-      LocalElement element,
-      IncDecOperator operator,
-      A arg,
+      Send node, LocalElement element, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   @override
-  R visitLocalVariableCompound(
-      Send node,
-      LocalVariableElement variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleLocalCompound(node, variable, operator, rhs, arg);
   }
 
   @override
-  R visitLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
-    return handleLocalPostfixPrefix(
-        node, variable, operator, arg, isPrefix: false);
+  R visitLocalVariablePostfix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
+    return handleLocalPostfixPrefix(node, variable, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
-    return handleLocalPostfixPrefix(
-        node, variable, operator, arg, isPrefix: true);
+  R visitLocalVariablePrefix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
+    return handleLocalPostfixPrefix(node, variable, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleLocalCompound(node, parameter, operator, rhs, arg);
   }
 
   @override
   R visitParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
-    return handleLocalPostfixPrefix(
-        node, parameter, operator, arg, isPrefix: false);
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
+    return handleLocalPostfixPrefix(node, parameter, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
-    return handleLocalPostfixPrefix(
-        node, parameter, operator, arg, isPrefix: true);
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
+    return handleLocalPostfixPrefix(node, parameter, operator, arg,
+        isPrefix: true);
   }
 }
 
@@ -8867,119 +5862,76 @@
 /// handled uniformly.
 abstract class BaseImplementationOfConstantsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-  R handleConstantGet(
-      Node node,
-      ConstantExpression constant,
-      A arg);
+  R handleConstantGet(Node node, ConstantExpression constant, A arg);
 
-  R handleConstantInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R handleConstantInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg);
 
   @override
-  R visitClassTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitClassTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return handleConstantGet(node, constant, arg);
   }
 
   @override
-  R visitClassTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitClassTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleConstantInvoke(node, constant, arguments, callStructure, arg);
   }
 
   @override
   R visitConstConstructorInvoke(
-      NewExpression node,
-      ConstructedConstantExpression constant,
-      A arg) {
+      NewExpression node, ConstructedConstantExpression constant, A arg) {
     return handleConstantGet(node, constant, arg);
   }
 
   @override
-  R visitBoolFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      BoolFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitBoolFromEnvironmentConstructorInvoke(NewExpression node,
+      BoolFromEnvironmentConstantExpression constant, A arg) {
     return handleConstantGet(node, constant, arg);
   }
 
   @override
-  R visitIntFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      IntFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitIntFromEnvironmentConstructorInvoke(NewExpression node,
+      IntFromEnvironmentConstantExpression constant, A arg) {
     return handleConstantGet(node, constant, arg);
   }
 
   @override
-  R visitStringFromEnvironmentConstructorInvoke(
-      NewExpression node,
-      StringFromEnvironmentConstantExpression constant,
-      A arg) {
+  R visitStringFromEnvironmentConstructorInvoke(NewExpression node,
+      StringFromEnvironmentConstantExpression constant, A arg) {
     return handleConstantGet(node, constant, arg);
   }
 
   @override
-  R visitConstantGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitConstantGet(Send node, ConstantExpression constant, A arg) {
     return handleConstantGet(node, constant, arg);
   }
 
   @override
-  R visitConstantInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitConstantInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleConstantInvoke(node, constant, arguments, callStructure, arg);
   }
 
   @override
-  R visitDynamicTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitDynamicTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return handleConstantGet(node, constant, arg);
   }
 
   @override
-  R visitDynamicTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitDynamicTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleConstantInvoke(node, constant, arguments, callStructure, arg);
   }
 
   @override
-  R visitTypedefTypeLiteralGet(
-      Send node,
-      ConstantExpression constant,
-      A arg) {
+  R visitTypedefTypeLiteralGet(Send node, ConstantExpression constant, A arg) {
     return handleConstantGet(node, constant, arg);
   }
 
   @override
-  R visitTypedefTypeLiteralInvoke(
-      Send node,
-      ConstantExpression constant,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg) {
+  R visitTypedefTypeLiteralInvoke(Send node, ConstantExpression constant,
+      NodeList arguments, CallStructure callStructure, A arg) {
     return handleConstantInvoke(node, constant, arguments, callStructure, arg);
   }
 }
@@ -8992,108 +5944,62 @@
 /// handled uniformly.
 abstract class BaseImplementationOfDynamicsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-  R handleDynamicGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg);
+  R handleDynamicGet(Send node, Node receiver, Name name, A arg);
 
   R handleDynamicInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg);
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg);
 
-  R handleDynamicSet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg);
+  R handleDynamicSet(SendSet node, Node receiver, Name name, Node rhs, A arg);
 
   @override
-  R visitDynamicPropertyGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg) {
+  R visitDynamicPropertyGet(Send node, Node receiver, Name name, A arg) {
     return handleDynamicGet(node, receiver, name, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertyGet(
-      Send node,
-      Node receiver,
-      Name name,
-      A arg) {
+      Send node, Node receiver, Name name, A arg) {
     // TODO(johnniwinther): should these redirect to handleDynamicX?
     return handleDynamicGet(node, receiver, name, arg);
   }
 
   @override
   R visitDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
     return handleDynamicInvoke(node, receiver, arguments, selector, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertyInvoke(
-      Send node,
-      Node receiver,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, Node receiver, NodeList arguments, Selector selector, A arg) {
     return handleDynamicInvoke(node, receiver, arguments, selector, arg);
   }
 
   @override
   R visitDynamicPropertySet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      SendSet node, Node receiver, Name name, Node rhs, A arg) {
     return handleDynamicSet(node, receiver, name, rhs, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertySet(
-      SendSet node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      SendSet node, Node receiver, Name name, Node rhs, A arg) {
     return handleDynamicSet(node, receiver, name, rhs, arg);
   }
 
   @override
-  R visitThisPropertyGet(
-      Send node,
-      Name name,
-      A arg) {
+  R visitThisPropertyGet(Send node, Name name, A arg) {
     return handleDynamicGet(node, null, name, arg);
   }
 
   @override
   R visitThisPropertyInvoke(
-      Send node,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+      Send node, NodeList arguments, Selector selector, A arg) {
     return handleDynamicInvoke(node, null, arguments, selector, arg);
   }
 
   @override
-  R visitThisPropertySet(
-      SendSet node,
-      Name name,
-      Node rhs,
-      A arg) {
+  R visitThisPropertySet(SendSet node, Name name, Node rhs, A arg) {
     return handleDynamicSet(node, null, name, rhs, arg);
   }
 }
@@ -9106,148 +6012,89 @@
 /// handled uniformly.
 abstract class BaseImplementationOfDynamicCompoundsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-  R handleDynamicCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg);
+  R handleDynamicCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg);
 
   R handleDynamicPostfixPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg,
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   R handleDynamicIndexPostfixPrefix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg,
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   @override
-  R visitDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleDynamicCompound(
-        node, receiver, name, operator, rhs, arg);
+  R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleDynamicCompound(node, receiver, name, operator, rhs, arg);
   }
 
   @override
-  R visitIfNotNullDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleDynamicCompound(
-        node, receiver, name, operator, rhs, arg);
+  R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleDynamicCompound(node, receiver, name, operator, rhs, arg);
   }
 
   @override
   R visitDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicPostfixPrefix(
-        node, receiver, name, operator, arg, isPrefix: false);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicPostfixPrefix(node, receiver, name, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitIfNotNullDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicPostfixPrefix(
-        node, receiver, name, operator, arg, isPrefix: false);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicPostfixPrefix(node, receiver, name, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicPostfixPrefix(
-        node, receiver, name, operator, arg, isPrefix: true);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicPostfixPrefix(node, receiver, name, operator, arg,
+        isPrefix: true);
   }
 
   @override
   R visitIfNotNullDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicPostfixPrefix(
-        node, receiver, name, operator, arg, isPrefix: true);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicPostfixPrefix(node, receiver, name, operator, arg,
+        isPrefix: true);
   }
 
   @override
   R visitThisPropertyCompound(
-      Send node,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+      Send node, Name name, AssignmentOperator operator, Node rhs, A arg) {
     return handleDynamicCompound(node, null, name, operator, rhs, arg);
   }
 
   @override
   R visitThisPropertyPostfix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicPostfixPrefix(
-        node, null, name, operator, arg, isPrefix: false);
+      Send node, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicPostfixPrefix(node, null, name, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitThisPropertyPrefix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicPostfixPrefix(
-        node, null, name, operator, arg, isPrefix: true);
+      Send node, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicPostfixPrefix(node, null, name, operator, arg,
+        isPrefix: true);
   }
 
   @override
   R visitIndexPostfix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicIndexPostfixPrefix(
-        node, receiver, index, operator, arg, isPrefix: false);
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
+    return handleDynamicIndexPostfixPrefix(node, receiver, index, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitIndexPrefix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicIndexPostfixPrefix(
-        node, receiver, index, operator, arg, isPrefix: true);
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
+    return handleDynamicIndexPostfixPrefix(node, receiver, index, operator, arg,
+        isPrefix: true);
   }
 }
 
@@ -9331,7 +6178,6 @@
 /// Simplified handling of compound assignments and prefix/postfix expressions.
 abstract class BaseImplementationOfCompoundsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-
   /// Handle a super compounds, like `super.foo += 42` or `--super.bar`.
   R handleSuperCompounds(
       SendSet node,
@@ -9355,1067 +6201,663 @@
   /// Handle a local compounds, like `foo += 42` or `--bar`. If [isSetterValid]
   /// is false [local] is unassignable.
   R handleLocalCompounds(
-      SendSet node,
-      LocalElement local,
-      CompoundRhs rhs,
-      A arg,
+      SendSet node, LocalElement local, CompoundRhs rhs, A arg,
       {bool isSetterValid});
 
   /// Handle a compounds on a type literal constant, like `Object += 42` or
   /// `--Object`.
   R handleTypeLiteralConstantCompounds(
-      SendSet node,
-      ConstantExpression constant,
-      CompoundRhs rhs,
-      A arg);
+      SendSet node, ConstantExpression constant, CompoundRhs rhs, A arg);
 
   /// Handle a compounds on a type variable type literal, like `T += 42` or
   /// `--T`.
   R handleTypeVariableTypeLiteralCompounds(
-      SendSet node,
-      TypeVariableElement typeVariable,
-      CompoundRhs rhs,
-      A arg);
+      SendSet node, TypeVariableElement typeVariable, CompoundRhs rhs, A arg);
 
   /// Handle a dynamic compounds, like `o.foo += 42` or `--o.foo`. [receiver] is
   /// `null` for properties on `this`, like `--this.foo` or `--foo`.
   R handleDynamicCompounds(
-      Send node,
-      Node receiver,
-      Name name,
-      CompoundRhs rhs,
-      A arg);
+      Send node, Node receiver, Name name, CompoundRhs rhs, A arg);
 
-  R visitDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleDynamicCompounds(
-        node,
-        receiver,
-        name,
-        new AssignmentCompound(operator, rhs),
-        arg);
+        node, receiver, name, new AssignmentCompound(operator, rhs), arg);
   }
 
-  R visitIfNotNullDynamicPropertyCompound(
-      Send node,
-      Node receiver,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitIfNotNullDynamicPropertyCompound(Send node, Node receiver, Name name,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleDynamicCompounds(
-        node,
-        receiver,
-        name,
-        new AssignmentCompound(operator, rhs),
-        arg);
+        node, receiver, name, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
   R visitThisPropertyCompound(
-      Send node,
-      Name name,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+      Send node, Name name, AssignmentOperator operator, Node rhs, A arg) {
     return handleDynamicCompounds(
-        node,
-        null,
-        name,
-        new AssignmentCompound(operator, rhs),
-        arg);
+        node, null, name, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleLocalCompounds(
-        node,
-        parameter,
-        new AssignmentCompound(operator, rhs),
-        arg,
+        node, parameter, new AssignmentCompound(operator, rhs), arg,
         isSetterValid: true);
   }
 
   @override
-  R visitFinalParameterCompound(
-      Send node,
-      ParameterElement parameter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalParameterCompound(Send node, ParameterElement parameter,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleLocalCompounds(
-        node,
-        parameter,
-        new AssignmentCompound(operator, rhs),
-        arg,
+        node, parameter, new AssignmentCompound(operator, rhs), arg,
         isSetterValid: false);
   }
 
   @override
-  R visitLocalVariableCompound(
-      Send node,
-      LocalVariableElement variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleLocalCompounds(
-        node,
-        variable,
-        new AssignmentCompound(operator, rhs),
-        arg,
+        node, variable, new AssignmentCompound(operator, rhs), arg,
         isSetterValid: true);
   }
 
   @override
-  R visitFinalLocalVariableCompound(
-      Send node,
-      LocalVariableElement variable,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitFinalLocalVariableCompound(Send node, LocalVariableElement variable,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleLocalCompounds(
-        node,
-        variable,
-        new AssignmentCompound(operator, rhs),
-        arg,
+        node, variable, new AssignmentCompound(operator, rhs), arg,
         isSetterValid: false);
   }
 
   @override
-  R visitLocalFunctionCompound(
-      Send node,
-      LocalFunctionElement function,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitLocalFunctionCompound(Send node, LocalFunctionElement function,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleLocalCompounds(
-        node,
-        function,
-        new AssignmentCompound(operator, rhs),
-        arg,
+        node, function, new AssignmentCompound(operator, rhs), arg,
         isSetterValid: false);
   }
 
   @override
-  R visitStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.FIELD, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitFinalStaticFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        field, CompoundGetter.FIELD,
-        null, CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitFinalStaticFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, field, CompoundGetter.FIELD, null,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitStaticGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitStaticGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, getter, CompoundGetter.GETTER, setter,
+        CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitStaticMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        method, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitStaticMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, method, CompoundGetter.METHOD, setter,
+        CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.FIELD, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitFinalTopLevelFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        field, CompoundGetter.FIELD,
-        null, CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitFinalTopLevelFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, field, CompoundGetter.FIELD, null,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitTopLevelGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitTopLevelGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, getter, CompoundGetter.GETTER, setter,
+        CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitTopLevelMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        method, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitTopLevelMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, method, CompoundGetter.METHOD, setter,
+        CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperCompounds(
-        node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperCompounds(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.FIELD, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitFinalSuperFieldCompound(
-      Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperCompounds(
-        node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitFinalSuperFieldCompound(Send node, FieldElement field,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperCompounds(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitSuperGetterSetterCompound(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperCompounds(
-        node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitSuperGetterSetterCompound(Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperCompounds(node, getter, CompoundGetter.GETTER, setter,
+        CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitSuperMethodSetterCompound(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperCompounds(
-        node,
-        method, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitSuperMethodSetterCompound(Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperCompounds(node, method, CompoundGetter.METHOD, setter,
+        CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitSuperFieldSetterCompound(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperCompounds(
-        node,
-        field, CompoundGetter.FIELD,
-        setter, CompoundSetter.SETTER,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitSuperFieldSetterCompound(Send node, FieldElement field,
+      FunctionElement setter, AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperCompounds(node, field, CompoundGetter.FIELD, setter,
+        CompoundSetter.SETTER, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitSuperGetterFieldCompound(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperCompounds(
-        node,
-        getter, CompoundGetter.GETTER,
-        field, CompoundSetter.FIELD,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitSuperGetterFieldCompound(Send node, FunctionElement getter,
+      FieldElement field, AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperCompounds(node, getter, CompoundGetter.GETTER, field,
+        CompoundSetter.FIELD, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitClassTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitClassTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new AssignmentCompound(operator, rhs),
-        arg);
+        node, constant, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitTypedefTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTypedefTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new AssignmentCompound(operator, rhs),
-        arg);
+        node, constant, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitTypeVariableTypeLiteralCompound(
-      Send node,
-      TypeVariableElement element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitTypeVariableTypeLiteralCompound(Send node, TypeVariableElement element,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleTypeVariableTypeLiteralCompounds(
-        node,
-        element,
-        new AssignmentCompound(operator, rhs),
-        arg);
+        node, element, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitDynamicTypeLiteralCompound(
-      Send node,
-      ConstantExpression constant,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitDynamicTypeLiteralCompound(Send node, ConstantExpression constant,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new AssignmentCompound(operator, rhs),
-        arg);
+        node, constant, new AssignmentCompound(operator, rhs), arg);
   }
 
-
   R visitDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicCompounds(
-        node,
-        receiver,
-        name,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicCompounds(node, receiver, name,
+        new IncDecCompound(CompoundKind.PREFIX, operator), arg);
   }
 
   R visitIfNotNullDynamicPropertyPrefix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicCompounds(
-        node,
-        receiver,
-        name,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicCompounds(node, receiver, name,
+        new IncDecCompound(CompoundKind.PREFIX, operator), arg);
   }
 
   @override
   R visitParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return handleLocalCompounds(
-        node,
-        parameter,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg,
+        node, parameter, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isSetterValid: true);
   }
 
   @override
-  R visitLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalVariablePrefix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return handleLocalCompounds(
-        node,
-        variable,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg,
+        node, variable, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isSetterValid: true);
   }
 
   @override
-  R visitLocalFunctionPrefix(
-      Send node,
-      LocalFunctionElement function,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalFunctionPrefix(Send node, LocalFunctionElement function,
+      IncDecOperator operator, A arg) {
     return handleLocalCompounds(
-        node,
-        function,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg,
+        node, function, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isSetterValid: false);
   }
 
-
   R visitThisPropertyPrefix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicCompounds(
-        node,
-        null,
-        name,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg);
+      Send node, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicCompounds(node, null, name,
+        new IncDecCompound(CompoundKind.PREFIX, operator), arg);
   }
 
   @override
   R visitStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
+        field,
+        CompoundGetter.FIELD,
+        field,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
-  R visitStaticGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
+        getter,
+        CompoundGetter.GETTER,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
-
-  R visitStaticMethodSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticMethodSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        getter, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
+        getter,
+        CompoundGetter.METHOD,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
   R visitTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
+        field,
+        CompoundGetter.FIELD,
+        field,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
-  R visitTopLevelGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
+        getter,
+        CompoundGetter.GETTER,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
-  R visitTopLevelMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        method, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
+        method,
+        CompoundGetter.METHOD,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
   R visitSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
+        field,
+        CompoundGetter.FIELD,
+        field,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperFieldFieldPrefix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        readField, CompoundGetter.FIELD,
-        writtenField, CompoundSetter.FIELD,
+        readField,
+        CompoundGetter.FIELD,
+        writtenField,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperFieldSetterPrefix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPrefix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        field, CompoundGetter.FIELD,
-        setter, CompoundSetter.SETTER,
+        field,
+        CompoundGetter.FIELD,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
+        getter,
+        CompoundGetter.GETTER,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperGetterFieldPrefix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        getter, CompoundGetter.GETTER,
-        field, CompoundSetter.FIELD,
+        getter,
+        CompoundGetter.GETTER,
+        field,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        method, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
+        method,
+        CompoundGetter.METHOD,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.PREFIX, operator),
         arg);
   }
 
   @override
   R visitClassTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg);
+        node, constant, new IncDecCompound(CompoundKind.PREFIX, operator), arg);
   }
 
   @override
   R visitTypedefTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg);
+        node, constant, new IncDecCompound(CompoundKind.PREFIX, operator), arg);
   }
 
   @override
   R visitTypeVariableTypeLiteralPrefix(
-      Send node,
-      TypeVariableElement element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
     return handleTypeVariableTypeLiteralCompounds(
-        node,
-        element,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg);
+        node, element, new IncDecCompound(CompoundKind.PREFIX, operator), arg);
   }
 
   @override
   R visitDynamicTypeLiteralPrefix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
     return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg);
+        node, constant, new IncDecCompound(CompoundKind.PREFIX, operator), arg);
   }
 
   @override
   R visitDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicCompounds(
-        node,
-        receiver,
-        name,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicCompounds(node, receiver, name,
+        new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertyPostfix(
-      Send node,
-      Node receiver,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicCompounds(
-        node,
-        receiver,
-        name,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg);
+      Send node, Node receiver, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicCompounds(node, receiver, name,
+        new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
   }
 
   @override
   R visitParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
-    return handleLocalCompounds(
-        node,
-        parameter,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg,
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
+    return handleLocalCompounds(node, parameter,
+        new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isSetterValid: true);
   }
 
   @override
-  R visitLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalVariablePostfix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return handleLocalCompounds(
-        node,
-        variable,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg,
+        node, variable, new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isSetterValid: true);
   }
 
   @override
-  R visitLocalFunctionPostfix(
-      Send node,
-      LocalFunctionElement function,
-      IncDecOperator operator,
-      A arg) {
+  R visitLocalFunctionPostfix(Send node, LocalFunctionElement function,
+      IncDecOperator operator, A arg) {
     return handleLocalCompounds(
-        node,
-        function,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg,
+        node, function, new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isSetterValid: false);
   }
 
-
   R visitThisPropertyPostfix(
-      Send node,
-      Name name,
-      IncDecOperator operator,
-      A arg) {
-    return handleDynamicCompounds(
-        node,
-        null,
-        name,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg);
+      Send node, Name name, IncDecOperator operator, A arg) {
+    return handleDynamicCompounds(node, null, name,
+        new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
   }
 
   @override
   R visitStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
+        field,
+        CompoundGetter.FIELD,
+        field,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
-  R visitStaticGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
+        getter,
+        CompoundGetter.GETTER,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
-
-  R visitStaticMethodSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitStaticMethodSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        getter, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
+        getter,
+        CompoundGetter.METHOD,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
   R visitTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
+        field,
+        CompoundGetter.FIELD,
+        field,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
-  R visitTopLevelGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
+        getter,
+        CompoundGetter.GETTER,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
-  R visitTopLevelMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitTopLevelMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
-        method, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
+        method,
+        CompoundGetter.METHOD,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
   R visitSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        field, CompoundGetter.FIELD,
-        field, CompoundSetter.FIELD,
+        field,
+        CompoundGetter.FIELD,
+        field,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperFieldFieldPostfix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        readField, CompoundGetter.FIELD,
-        writtenField, CompoundSetter.FIELD,
+        readField,
+        CompoundGetter.FIELD,
+        writtenField,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperFieldSetterPostfix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPostfix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        field, CompoundGetter.FIELD,
-        setter, CompoundSetter.SETTER,
+        field,
+        CompoundGetter.FIELD,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
-
-  R visitSuperGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        getter, CompoundGetter.GETTER,
-        setter, CompoundSetter.SETTER,
+        getter,
+        CompoundGetter.GETTER,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperGetterFieldPostfix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        getter, CompoundGetter.GETTER,
-        field, CompoundSetter.FIELD,
+        getter,
+        CompoundGetter.GETTER,
+        field,
+        CompoundSetter.FIELD,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
-  R visitSuperMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
-        method, CompoundGetter.METHOD,
-        setter, CompoundSetter.SETTER,
+        method,
+        CompoundGetter.METHOD,
+        setter,
+        CompoundSetter.SETTER,
         new IncDecCompound(CompoundKind.POSTFIX, operator),
         arg);
   }
 
   @override
   R visitClassTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
-    return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
+    return handleTypeLiteralConstantCompounds(node, constant,
+        new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
   }
 
   @override
   R visitTypedefTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
-    return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
+    return handleTypeLiteralConstantCompounds(node, constant,
+        new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
   }
 
   @override
   R visitTypeVariableTypeLiteralPostfix(
-      Send node,
-      TypeVariableElement element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, TypeVariableElement element, IncDecOperator operator, A arg) {
     return handleTypeVariableTypeLiteralCompounds(
-        node,
-        element,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg);
+        node, element, new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
   }
 
   @override
   R visitDynamicTypeLiteralPostfix(
-      Send node,
-      ConstantExpression constant,
-      IncDecOperator operator,
-      A arg) {
-    return handleTypeLiteralConstantCompounds(
-        node,
-        constant,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg);
+      Send node, ConstantExpression constant, IncDecOperator operator, A arg) {
+    return handleTypeLiteralConstantCompounds(node, constant,
+        new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
   }
 
   @override
-  R visitUnresolvedStaticGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10427,12 +6869,8 @@
   }
 
   @override
-  R visitUnresolvedTopLevelGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10444,12 +6882,8 @@
   }
 
   @override
-  R visitUnresolvedStaticSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         getter,
@@ -10461,12 +6895,8 @@
   }
 
   @override
-  R visitUnresolvedTopLevelSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         getter,
@@ -10479,10 +6909,7 @@
 
   @override
   R visitStaticMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         method,
@@ -10495,10 +6922,7 @@
 
   @override
   R visitTopLevelMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         method,
@@ -10511,10 +6935,7 @@
 
   @override
   R visitUnresolvedPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10526,12 +6947,8 @@
   }
 
   @override
-  R visitUnresolvedStaticGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10543,12 +6960,8 @@
   }
 
   @override
-  R visitUnresolvedTopLevelGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10560,12 +6973,8 @@
   }
 
   @override
-  R visitUnresolvedStaticSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedStaticSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         getter,
@@ -10577,12 +6986,8 @@
   }
 
   @override
-  R visitUnresolvedTopLevelSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedTopLevelSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         getter,
@@ -10595,10 +7000,7 @@
 
   @override
   R visitStaticMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         method,
@@ -10611,10 +7013,7 @@
 
   @override
   R visitTopLevelMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         method,
@@ -10627,10 +7026,7 @@
 
   @override
   R visitUnresolvedPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10642,13 +7038,8 @@
   }
 
   @override
-  R visitUnresolvedStaticGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedStaticGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10660,13 +7051,8 @@
   }
 
   @override
-  R visitUnresolvedTopLevelGetterCompound(
-      Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedTopLevelGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10678,82 +7064,36 @@
   }
 
   @override
-  R visitUnresolvedStaticSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        element,
-        CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitUnresolvedStaticSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, getter, CompoundGetter.GETTER, element,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitUnresolvedTopLevelSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        element,
-        CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitUnresolvedTopLevelSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, getter, CompoundGetter.GETTER, element,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitStaticMethodCompound(
-      Send node,
-      MethodElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        method,
-        CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitStaticMethodCompound(Send node, MethodElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, method, CompoundGetter.METHOD, method,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitTopLevelMethodCompound(
-      Send node,
-      MethodElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleStaticCompounds(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        method,
-        CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitTopLevelMethodCompound(Send node, MethodElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleStaticCompounds(node, method, CompoundGetter.METHOD, method,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitUnresolvedCompound(
-      Send node,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedCompound(Send node, Element element,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleStaticCompounds(
         node,
         element,
@@ -10765,67 +7105,40 @@
   }
 
   @override
-  R visitFinalLocalVariablePostfix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitFinalLocalVariablePostfix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return handleLocalCompounds(
-        node,
-        variable,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg,
+        node, variable, new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isSetterValid: false);
   }
 
   @override
-  R visitFinalLocalVariablePrefix(
-      Send node,
-      LocalVariableElement variable,
-      IncDecOperator operator,
-      A arg) {
+  R visitFinalLocalVariablePrefix(Send node, LocalVariableElement variable,
+      IncDecOperator operator, A arg) {
     return handleLocalCompounds(
-        node,
-        variable,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg,
+        node, variable, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isSetterValid: false);
   }
 
   @override
   R visitFinalParameterPostfix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
-    return handleLocalCompounds(
-        node,
-        parameter,
-        new IncDecCompound(CompoundKind.POSTFIX, operator),
-        arg,
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
+    return handleLocalCompounds(node, parameter,
+        new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isSetterValid: false);
   }
 
   @override
   R visitFinalParameterPrefix(
-      Send node,
-      ParameterElement parameter,
-      IncDecOperator operator,
-      A arg) {
+      Send node, ParameterElement parameter, IncDecOperator operator, A arg) {
     return handleLocalCompounds(
-        node,
-        parameter,
-        new IncDecCompound(CompoundKind.PREFIX, operator),
-        arg,
+        node, parameter, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isSetterValid: false);
   }
 
   @override
   R visitFinalStaticFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         field,
@@ -10838,10 +7151,7 @@
 
   @override
   R visitFinalStaticFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         field,
@@ -10853,13 +7163,8 @@
   }
 
   @override
-  R visitSuperFieldFieldCompound(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitSuperFieldFieldCompound(Send node, FieldElement readField,
+      FieldElement writtenField, AssignmentOperator operator, Node rhs, A arg) {
     return handleSuperCompounds(
         node,
         readField,
@@ -10872,10 +7177,7 @@
 
   @override
   R visitFinalSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         field,
@@ -10888,10 +7190,7 @@
 
   @override
   R visitFinalSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         field,
@@ -10903,28 +7202,15 @@
   }
 
   @override
-  R visitSuperMethodCompound(
-      Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperCompounds(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        method,
-        CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitSuperMethodCompound(Send node, FunctionElement method,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperCompounds(node, method, CompoundGetter.METHOD, method,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
   R visitSuperMethodPostfix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FunctionElement method, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         method,
@@ -10937,10 +7223,7 @@
 
   @override
   R visitSuperMethodPrefix(
-      Send node,
-      FunctionElement method,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FunctionElement method, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         method,
@@ -10953,10 +7236,7 @@
 
   @override
   R visitFinalTopLevelFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         field,
@@ -10969,10 +7249,7 @@
 
   @override
   R visitFinalTopLevelFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
     return handleStaticCompounds(
         node,
         field,
@@ -10984,12 +7261,8 @@
   }
 
   @override
-  R visitUnresolvedSuperCompound(
-      Send node,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperCompound(Send node, Element element,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleSuperCompounds(
         node,
         element,
@@ -11002,10 +7275,7 @@
 
   @override
   R visitUnresolvedSuperPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         element,
@@ -11018,10 +7288,7 @@
 
   @override
   R visitUnresolvedSuperPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         element,
@@ -11033,12 +7300,8 @@
   }
 
   @override
-  R visitUnresolvedSuperGetterCompound(
-      Send node, Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperGetterCompound(Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, Node rhs, A arg) {
     return handleSuperCompounds(
         node,
         element,
@@ -11050,12 +7313,8 @@
   }
 
   @override
-  R visitUnresolvedSuperGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         element,
@@ -11067,12 +7326,8 @@
   }
 
   @override
-  R visitUnresolvedSuperGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         element,
@@ -11084,30 +7339,15 @@
   }
 
   @override
-  R visitUnresolvedSuperSetterCompound(
-      Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperCompounds(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        element,
-        CompoundSetter.INVALID,
-        new AssignmentCompound(operator, rhs),
-        arg);
+  R visitUnresolvedSuperSetterCompound(Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperCompounds(node, getter, CompoundGetter.GETTER, element,
+        CompoundSetter.INVALID, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
-  R visitUnresolvedSuperSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         getter,
@@ -11119,12 +7359,8 @@
   }
 
   @override
-  R visitUnresolvedSuperSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleSuperCompounds(
         node,
         getter,
@@ -11139,7 +7375,6 @@
 /// Simplified handling of if-null assignments.
 abstract class BaseImplementationOfSetIfNullsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-
   /// Handle a super if-null assignments, like `super.foo ??= 42`.
   R handleSuperSetIfNulls(
       SendSet node,
@@ -11162,565 +7397,264 @@
 
   /// Handle a local if-null assignments, like `foo ??= 42`. If [isSetterValid]
   /// is false [local] is unassignable.
-  R handleLocalSetIfNulls(
-      SendSet node,
-      LocalElement local,
-      Node rhs,
-      A arg,
+  R handleLocalSetIfNulls(SendSet node, LocalElement local, Node rhs, A arg,
       {bool isSetterValid});
 
   /// Handle a if-null assignments on a type literal constant, like
   /// `Object ??= 42`.
   R handleTypeLiteralConstantSetIfNulls(
-      SendSet node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg);
+      SendSet node, ConstantExpression constant, Node rhs, A arg);
 
   /// Handle a dynamic if-null assignments, like `o.foo ??= 42`. [receiver] is
   /// `null` for properties on `this`, like `this.foo ??= 42` or `foo ??= 42`.
   R handleDynamicSetIfNulls(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg);
+      Send node, Node receiver, Name name, Node rhs, A arg);
 
   @override
   R visitClassTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     return handleTypeLiteralConstantSetIfNulls(node, constant, rhs, arg);
   }
 
   @override
   R visitDynamicPropertySetIfNull(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      Send node, Node receiver, Name name, Node rhs, A arg) {
     return handleDynamicSetIfNulls(node, receiver, name, rhs, arg);
   }
 
   @override
   R visitDynamicTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     return handleTypeLiteralConstantSetIfNulls(node, constant, rhs, arg);
   }
 
   @override
   R visitFinalLocalVariableSetIfNull(
-      Send node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
-    return handleLocalSetIfNulls(
-        node, variable, rhs, arg, isSetterValid: false);
+      Send node, LocalVariableElement variable, Node rhs, A arg) {
+    return handleLocalSetIfNulls(node, variable, rhs, arg,
+        isSetterValid: false);
   }
 
   @override
   R visitFinalParameterSetIfNull(
-      Send node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
-    return handleLocalSetIfNulls(
-        node, parameter, rhs, arg, isSetterValid: false);
+      Send node, ParameterElement parameter, Node rhs, A arg) {
+    return handleLocalSetIfNulls(node, parameter, rhs, arg,
+        isSetterValid: false);
   }
 
   @override
   R visitFinalStaticFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        field,
-        CompoundGetter.FIELD,
-        field,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, FieldElement field, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
   R visitFinalSuperFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        field,
-        CompoundGetter.FIELD,
-        field,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, FieldElement field, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
   R visitFinalTopLevelFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        field,
-        CompoundGetter.FIELD,
-        field,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, FieldElement field, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
   R visitIfNotNullDynamicPropertySetIfNull(
-      Send node,
-      Node receiver,
-      Name name,
-      Node rhs,
-      A arg) {
+      Send node, Node receiver, Name name, Node rhs, A arg) {
     return handleDynamicSetIfNulls(node, receiver, name, rhs, arg);
   }
 
   @override
   R visitLocalFunctionSetIfNull(
-      Send node,
-      LocalFunctionElement function,
-      Node rhs,
-      A arg) {
-    return handleLocalSetIfNulls(
-        node, function, rhs, arg, isSetterValid: false);
+      Send node, LocalFunctionElement function, Node rhs, A arg) {
+    return handleLocalSetIfNulls(node, function, rhs, arg,
+        isSetterValid: false);
   }
 
   @override
   R visitLocalVariableSetIfNull(
-      Send node,
-      LocalVariableElement variable,
-      Node rhs,
-      A arg) {
-    return handleLocalSetIfNulls(
-        node, variable, rhs, arg, isSetterValid: true);
+      Send node, LocalVariableElement variable, Node rhs, A arg) {
+    return handleLocalSetIfNulls(node, variable, rhs, arg, isSetterValid: true);
   }
 
   @override
   R visitParameterSetIfNull(
-      Send node,
-      ParameterElement parameter,
-      Node rhs,
-      A arg) {
-    return handleLocalSetIfNulls(
-        node, parameter, rhs, arg, isSetterValid: true);
+      Send node, ParameterElement parameter, Node rhs, A arg) {
+    return handleLocalSetIfNulls(node, parameter, rhs, arg,
+        isSetterValid: true);
   }
 
   @override
-  R visitStaticFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        field,
-        CompoundGetter.FIELD,
-        field,
-        CompoundSetter.FIELD,
-        rhs,
-        arg);
+  R visitStaticFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.FIELD, rhs, arg);
   }
 
   @override
-  R visitStaticGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+  R visitStaticGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, getter, CompoundGetter.GETTER, setter,
+        CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
   R visitStaticMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        method,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, FunctionElement method, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, method, CompoundGetter.METHOD, method,
+        CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
   R visitStaticMethodSetterSetIfNull(
-      Send node,
-      MethodElement method,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+      Send node, MethodElement method, MethodElement setter, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, method, CompoundGetter.METHOD, setter,
+        CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
-  R visitSuperFieldFieldSetIfNull(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        readField,
-        CompoundGetter.FIELD,
-        writtenField,
-        CompoundSetter.FIELD,
-        rhs,
-        arg);
+  R visitSuperFieldFieldSetIfNull(Send node, FieldElement readField,
+      FieldElement writtenField, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, readField, CompoundGetter.FIELD,
+        writtenField, CompoundSetter.FIELD, rhs, arg);
   }
 
   @override
-  R visitSuperFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        field,
-        CompoundGetter.FIELD,
-        field,
-        CompoundSetter.FIELD,
-        rhs,
-        arg);
+  R visitSuperFieldSetIfNull(Send node, FieldElement field, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.FIELD, rhs, arg);
   }
 
   @override
   R visitSuperFieldSetterSetIfNull(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        field,
-        CompoundGetter.FIELD,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+      Send node, FieldElement field, FunctionElement setter, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, field, CompoundGetter.FIELD, setter,
+        CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
   R visitSuperGetterFieldSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        field,
-        CompoundSetter.FIELD,
-        rhs,
-        arg);
+      Send node, FunctionElement getter, FieldElement field, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, getter, CompoundGetter.GETTER, field,
+        CompoundSetter.FIELD, rhs, arg);
   }
 
   @override
-  R visitSuperGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+  R visitSuperGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, getter, CompoundGetter.GETTER, setter,
+        CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
   R visitSuperMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        method,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, FunctionElement method, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, method, CompoundGetter.METHOD, method,
+        CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
-  R visitSuperMethodSetterSetIfNull(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+  R visitSuperMethodSetterSetIfNull(Send node, FunctionElement method,
+      FunctionElement setter, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, method, CompoundGetter.METHOD, setter,
+        CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
-  R visitThisPropertySetIfNull(
-      Send node,
-      Name name,
-      Node rhs,
-      A arg) {
+  R visitThisPropertySetIfNull(Send node, Name name, Node rhs, A arg) {
     return handleDynamicSetIfNulls(node, null, name, rhs, arg);
   }
 
   @override
   R visitTopLevelFieldSetIfNull(
-      Send node,
-      FieldElement field,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        field,
-        CompoundGetter.FIELD,
-        field,
-        CompoundSetter.FIELD,
-        rhs,
-        arg);
+      Send node, FieldElement field, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, field, CompoundGetter.FIELD, field,
+        CompoundSetter.FIELD, rhs, arg);
   }
 
   @override
-  R visitTopLevelGetterSetterSetIfNull(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+  R visitTopLevelGetterSetterSetIfNull(Send node, FunctionElement getter,
+      FunctionElement setter, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, getter, CompoundGetter.GETTER, setter,
+        CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
   R visitTopLevelMethodSetIfNull(
-      Send node,
-      FunctionElement method,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        method,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, FunctionElement method, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, method, CompoundGetter.METHOD, method,
+        CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
-  R visitTopLevelMethodSetterSetIfNull(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        method,
-        CompoundGetter.METHOD,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+  R visitTopLevelMethodSetterSetIfNull(Send node, FunctionElement method,
+      FunctionElement setter, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, method, CompoundGetter.METHOD, setter,
+        CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
   R visitTypedefTypeLiteralSetIfNull(
-      Send node,
-      ConstantExpression constant,
-      Node rhs,
-      A arg) {
+      Send node, ConstantExpression constant, Node rhs, A arg) {
     return handleTypeLiteralConstantSetIfNulls(node, constant, rhs, arg);
   }
 
   @override
-  R visitUnresolvedSetIfNull(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        element,
-        CompoundGetter.UNRESOLVED,
-        element,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+  R visitUnresolvedSetIfNull(Send node, Element element, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
+        element, CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
   R visitUnresolvedStaticGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        element,
-        CompoundGetter.UNRESOLVED,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
+        setter, CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
   R visitUnresolvedStaticSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        element,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, getter, CompoundGetter.GETTER, element,
+        CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
   R visitUnresolvedSuperGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        element,
-        CompoundGetter.UNRESOLVED,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
+        setter, CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
-  R visitUnresolvedSuperSetIfNull(
-      Send node,
-      Element element,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        element,
-        CompoundGetter.UNRESOLVED,
-        element,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+  R visitUnresolvedSuperSetIfNull(Send node, Element element, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
+        element, CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
   R visitUnresolvedSuperSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
-    return handleSuperSetIfNulls(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        element,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
+    return handleSuperSetIfNulls(node, getter, CompoundGetter.GETTER, element,
+        CompoundSetter.INVALID, rhs, arg);
   }
 
   @override
   R visitUnresolvedTopLevelGetterSetIfNull(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        element,
-        CompoundGetter.UNRESOLVED,
-        setter,
-        CompoundSetter.SETTER,
-        rhs,
-        arg);
+      Send node, Element element, MethodElement setter, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, element, CompoundGetter.UNRESOLVED,
+        setter, CompoundSetter.SETTER, rhs, arg);
   }
 
   @override
   R visitUnresolvedTopLevelSetterSetIfNull(
-      Send node,
-      MethodElement getter,
-      Element element,
-      Node rhs,
-      A arg) {
-    return handleStaticSetIfNulls(
-        node,
-        getter,
-        CompoundGetter.GETTER,
-        element,
-        CompoundSetter.INVALID,
-        rhs,
-        arg);
+      Send node, MethodElement getter, Element element, Node rhs, A arg) {
+    return handleStaticSetIfNulls(node, getter, CompoundGetter.GETTER, element,
+        CompoundSetter.INVALID, rhs, arg);
   }
 }
 
@@ -11728,27 +7662,16 @@
 /// expressions.
 abstract class BaseImplementationOfIndexCompoundsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-
   /// Handle a dynamic index compounds, like `receiver[index] += rhs` or
   /// `--receiver[index]`.
   R handleIndexCompounds(
-      SendSet node,
-      Node receiver,
-      Node index,
-      CompoundRhs rhs,
-      A arg);
+      SendSet node, Node receiver, Node index, CompoundRhs rhs, A arg);
 
   /// Handle a super index compounds, like `super[index] += rhs` or
   /// `--super[index]`.
-  R handleSuperIndexCompounds(
-      SendSet node,
-      Element indexFunction,
-      Element indexSetFunction,
-      Node index,
-      CompoundRhs rhs,
-      A arg,
-      {bool isGetterValid,
-       bool isSetterValid});
+  R handleSuperIndexCompounds(SendSet node, Element indexFunction,
+      Element indexSetFunction, Node index, CompoundRhs rhs, A arg,
+      {bool isGetterValid, bool isSetterValid});
 
   @override
   R visitSuperCompoundIndexSet(
@@ -11759,9 +7682,8 @@
       AssignmentOperator operator,
       Node rhs,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, indexFunction, indexSetFunction, index,
-        new AssignmentCompound(operator, rhs), arg,
+    return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
+        index, new AssignmentCompound(operator, rhs), arg,
         isGetterValid: true, isSetterValid: true);
   }
 
@@ -11773,9 +7695,8 @@
       Node index,
       IncDecOperator operator,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, indexFunction, indexSetFunction, index,
-        new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
+    return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
+        index, new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isGetterValid: true, isSetterValid: true);
   }
 
@@ -11787,9 +7708,8 @@
       Node index,
       IncDecOperator operator,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, indexFunction, indexSetFunction, index,
-        new IncDecCompound(CompoundKind.PREFIX, operator), arg,
+    return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
+        index, new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isGetterValid: true, isSetterValid: true);
   }
 
@@ -11802,9 +7722,8 @@
       AssignmentOperator operator,
       Node rhs,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, indexFunction, indexSetFunction, index,
-        new AssignmentCompound(operator, rhs), arg,
+    return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
+        index, new AssignmentCompound(operator, rhs), arg,
         isGetterValid: false, isSetterValid: true);
   }
 
@@ -11817,22 +7736,15 @@
       AssignmentOperator operator,
       Node rhs,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, indexFunction, indexSetFunction, index,
-        new AssignmentCompound(operator, rhs), arg,
+    return handleSuperIndexCompounds(node, indexFunction, indexSetFunction,
+        index, new AssignmentCompound(operator, rhs), arg,
         isGetterValid: true, isSetterValid: false);
   }
 
   @override
-  R visitUnresolvedSuperCompoundIndexSet(
-      Send node,
-      Element element,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
-    return handleSuperIndexCompounds(
-        node, element, element, index,
+  R visitUnresolvedSuperCompoundIndexSet(Send node, Element element, Node index,
+      AssignmentOperator operator, Node rhs, A arg) {
+    return handleSuperIndexCompounds(node, element, element, index,
         new AssignmentCompound(operator, rhs), arg,
         isGetterValid: false, isSetterValid: false);
   }
@@ -11845,8 +7757,7 @@
       Node index,
       IncDecOperator operator,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, element, indexSetFunction, index,
+    return handleSuperIndexCompounds(node, element, indexSetFunction, index,
         new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isGetterValid: false, isSetterValid: true);
   }
@@ -11859,8 +7770,7 @@
       Node index,
       IncDecOperator operator,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, element, indexSetFunction, index,
+    return handleSuperIndexCompounds(node, element, indexSetFunction, index,
         new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isGetterValid: false, isSetterValid: true);
   }
@@ -11873,8 +7783,7 @@
       Node index,
       IncDecOperator operator,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, indexFunction, element, index,
+    return handleSuperIndexCompounds(node, indexFunction, element, index,
         new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isGetterValid: true, isSetterValid: false);
   }
@@ -11887,72 +7796,45 @@
       Node index,
       IncDecOperator operator,
       A arg) {
-    return handleSuperIndexCompounds(
-        node, indexFunction, element, index,
+    return handleSuperIndexCompounds(node, indexFunction, element, index,
         new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isGetterValid: true, isSetterValid: false);
   }
 
   @override
   R visitUnresolvedSuperIndexPostfix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
-    return handleSuperIndexCompounds(
-        node, element, element, index,
+      Send node, Element element, Node index, IncDecOperator operator, A arg) {
+    return handleSuperIndexCompounds(node, element, element, index,
         new IncDecCompound(CompoundKind.POSTFIX, operator), arg,
         isGetterValid: false, isSetterValid: false);
   }
 
   @override
   R visitUnresolvedSuperIndexPrefix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
-    return handleSuperIndexCompounds(
-        node, element, element, index,
+      Send node, Element element, Node index, IncDecOperator operator, A arg) {
+    return handleSuperIndexCompounds(node, element, element, index,
         new IncDecCompound(CompoundKind.PREFIX, operator), arg,
         isGetterValid: false, isSetterValid: false);
   }
 
   @override
-  R visitCompoundIndexSet(
-      SendSet node,
-      Node receiver,
-      Node index,
-      AssignmentOperator operator,
-      Node rhs,
-      A arg) {
+  R visitCompoundIndexSet(SendSet node, Node receiver, Node index,
+      AssignmentOperator operator, Node rhs, A arg) {
     return handleIndexCompounds(
-        node, receiver, index,
-        new AssignmentCompound(operator, rhs), arg);
+        node, receiver, index, new AssignmentCompound(operator, rhs), arg);
   }
 
   @override
   R visitIndexPostfix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
-    return handleIndexCompounds(
-        node, receiver, index,
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
+    return handleIndexCompounds(node, receiver, index,
         new IncDecCompound(CompoundKind.POSTFIX, operator), arg);
   }
 
   @override
   R visitIndexPrefix(
-      Send node,
-      Node receiver,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
-    return handleIndexCompounds(
-        node, receiver, index,
+      Send node, Node receiver, Node index, IncDecOperator operator, A arg) {
+    return handleIndexCompounds(node, receiver, index,
         new IncDecCompound(CompoundKind.PREFIX, operator), arg);
   }
 }
@@ -11960,39 +7842,22 @@
 /// Simplified handling of super if-null assignments.
 abstract class BaseImplementationOfSuperIndexSetIfNullMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-
   /// Handle a super index if-null assignments, like `super[index] ??= rhs`.
-  R handleSuperIndexSetIfNull(
-      SendSet node,
-      Element indexFunction,
-      Element indexSetFunction,
-      Node index,
-      Node rhs,
-      A arg,
-      {bool isGetterValid,
-       bool isSetterValid});
+  R handleSuperIndexSetIfNull(SendSet node, Element indexFunction,
+      Element indexSetFunction, Node index, Node rhs, A arg,
+      {bool isGetterValid, bool isSetterValid});
 
   @override
-  R visitSuperIndexSetIfNull(
-      Send node,
-      FunctionElement indexFunction,
-      FunctionElement indexSetFunction,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitSuperIndexSetIfNull(Send node, FunctionElement indexFunction,
+      FunctionElement indexSetFunction, Node index, Node rhs, A arg) {
     return handleSuperIndexSetIfNull(
         node, indexFunction, indexSetFunction, index, rhs, arg,
         isGetterValid: true, isSetterValid: true);
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexSetIfNull(
-      Send node,
-      Element indexFunction,
-      FunctionElement indexSetFunction,
-      Node index,
-      Node rhs,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexSetIfNull(Send node, Element indexFunction,
+      FunctionElement indexSetFunction, Node index, Node rhs, A arg) {
     return handleSuperIndexSetIfNull(
         node, indexFunction, indexSetFunction, index, rhs, arg,
         isGetterValid: false, isSetterValid: true);
@@ -12013,13 +7878,8 @@
 
   @override
   R visitUnresolvedSuperIndexSetIfNull(
-      Send node,
-      Element element,
-      Node index,
-      Node rhs,
-      A arg) {
-    return handleSuperIndexSetIfNull(
-        node, element, element, index, rhs, arg,
+      Send node, Element element, Node index, Node rhs, A arg) {
+    return handleSuperIndexSetIfNull(node, element, element, index, rhs, arg,
         isGetterValid: false, isSetterValid: false);
   }
 }
@@ -12031,44 +7891,24 @@
 /// handled uniformly.
 abstract class BaseImplementationOfSuperIncDecsMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-  R handleSuperFieldFieldPostfixPrefix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg,
+  R handleSuperFieldFieldPostfixPrefix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleSuperFieldSetterPostfixPrefix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg,
+  R handleSuperFieldSetterPostfixPrefix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleSuperGetterFieldPostfixPrefix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg,
+  R handleSuperGetterFieldPostfixPrefix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleSuperGetterSetterPostfixPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg,
+  R handleSuperGetterSetterPostfixPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleSuperMethodSetterPostfixPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg,
+  R handleSuperMethodSetterPostfixPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   R handleSuperIndexPostfixPrefix(
@@ -12080,13 +7920,8 @@
       A arg,
       {bool isPrefix});
 
-  R handleUnresolvedSuperGetterIndexPostfixPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg,
+  R handleUnresolvedSuperGetterIndexPostfixPrefix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   R handleUnresolvedSuperSetterIndexPostfixPrefix(
@@ -12099,178 +7934,121 @@
       {bool isPrefix});
 
   R handleUnresolvedSuperIndexPostfixPrefix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg,
+      Send node, Element element, Node index, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   R handleFinalSuperFieldPostfixPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg,
+      Send node, FieldElement field, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   R handleSuperMethodPostfixPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg,
+      Send node, MethodElement method, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   R handleUnresolvedSuperPostfixPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg,
+      Send node, Element element, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleUnresolvedSuperGetterPostfixPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg,
+  R handleUnresolvedSuperGetterPostfixPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg,
       {bool isPrefix});
 
-  R handleUnresolvedSuperSetterPostfixPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg,
+  R handleUnresolvedSuperSetterPostfixPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg,
       {bool isPrefix});
 
   @override
-  R visitSuperFieldFieldPostfix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPostfix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return handleSuperFieldFieldPostfixPrefix(
-        node, readField, writtenField, operator, arg, isPrefix: false);
+        node, readField, writtenField, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitSuperFieldFieldPrefix(
-      Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldFieldPrefix(Send node, FieldElement readField,
+      FieldElement writtenField, IncDecOperator operator, A arg) {
     return handleSuperFieldFieldPostfixPrefix(
-        node, readField, writtenField, operator, arg, isPrefix: true);
+        node, readField, writtenField, operator, arg,
+        isPrefix: true);
   }
 
   @override
   R visitSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleSuperFieldFieldPostfixPrefix(
-        node, field, field, operator, arg, isPrefix: false);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleSuperFieldFieldPostfixPrefix(node, field, field, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleSuperFieldFieldPostfixPrefix(
-        node, field, field, operator, arg, isPrefix: true);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleSuperFieldFieldPostfixPrefix(node, field, field, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitSuperFieldSetterPostfix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPostfix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperFieldSetterPostfixPrefix(
-        node, field, setter, operator, arg, isPrefix: false);
+        node, field, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitSuperFieldSetterPrefix(
-      Send node,
-      FieldElement field,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperFieldSetterPrefix(Send node, FieldElement field,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperFieldSetterPostfixPrefix(
-        node, field, setter, operator, arg, isPrefix: true);
+        node, field, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitSuperGetterFieldPostfix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPostfix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return handleSuperGetterFieldPostfixPrefix(
-        node, getter, field, operator, arg, isPrefix: false);
+        node, getter, field, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitSuperGetterFieldPrefix(
-      Send node,
-      FunctionElement getter,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterFieldPrefix(Send node, FunctionElement getter,
+      FieldElement field, IncDecOperator operator, A arg) {
     return handleSuperGetterFieldPostfixPrefix(
-        node, getter, field, operator, arg, isPrefix: true);
+        node, getter, field, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitSuperGetterSetterPostfix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPostfix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperGetterSetterPostfixPrefix(
-        node, getter, setter, operator, arg, isPrefix: false);
+        node, getter, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitSuperGetterSetterPrefix(
-      Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperGetterSetterPrefix(Send node, FunctionElement getter,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperGetterSetterPostfixPrefix(
-        node, getter, setter, operator, arg, isPrefix: true);
+        node, getter, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitSuperMethodSetterPostfix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPostfix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperMethodSetterPostfixPrefix(
-        node, method, setter, operator, arg, isPrefix: false);
+        node, method, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitSuperMethodSetterPrefix(
-      Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitSuperMethodSetterPrefix(Send node, FunctionElement method,
+      FunctionElement setter, IncDecOperator operator, A arg) {
     return handleSuperMethodSetterPostfixPrefix(
-        node, method, setter, operator, arg, isPrefix: true);
+        node, method, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
@@ -12282,8 +8060,8 @@
       IncDecOperator operator,
       A arg) {
     return handleSuperIndexPostfixPrefix(
-        node, indexFunction, indexSetFunction,
-        index, operator, arg, isPrefix: false);
+        node, indexFunction, indexSetFunction, index, operator, arg,
+        isPrefix: false);
   }
 
   @override
@@ -12295,32 +8073,24 @@
       IncDecOperator operator,
       A arg) {
     return handleSuperIndexPostfixPrefix(
-        node, indexFunction, indexSetFunction,
-        index, operator, arg, isPrefix: true);
+        node, indexFunction, indexSetFunction, index, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexPostfix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg) {
     return handleUnresolvedSuperGetterIndexPostfixPrefix(
-        node, element, setter, index, operator, arg, isPrefix: false);
+        node, element, setter, index, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitUnresolvedSuperGetterIndexPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterIndexPrefix(Send node, Element element,
+      MethodElement setter, Node index, IncDecOperator operator, A arg) {
     return handleUnresolvedSuperGetterIndexPostfixPrefix(
-        node, element, setter, index, operator, arg, isPrefix: true);
+        node, element, setter, index, operator, arg,
+        isPrefix: true);
   }
 
   @override
@@ -12332,7 +8102,8 @@
       IncDecOperator operator,
       A arg) {
     return handleUnresolvedSuperSetterIndexPostfixPrefix(
-        node, indexFunction, element, index, operator, arg, isPrefix: false);
+        node, indexFunction, element, index, operator, arg,
+        isPrefix: false);
   }
 
   @override
@@ -12344,133 +8115,98 @@
       IncDecOperator operator,
       A arg) {
     return handleUnresolvedSuperSetterIndexPostfixPrefix(
-        node, indexFunction, element, index, operator, arg, isPrefix: true);
+        node, indexFunction, element, index, operator, arg,
+        isPrefix: true);
   }
 
   @override
   R visitUnresolvedSuperIndexPostfix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, Node index, IncDecOperator operator, A arg) {
     return handleUnresolvedSuperIndexPostfixPrefix(
-        node, element, index, operator, arg, isPrefix: false);
+        node, element, index, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitUnresolvedSuperIndexPrefix(
-      Send node,
-      Element element,
-      Node index,
-      IncDecOperator operator,
-      A arg) {
+      Send node, Element element, Node index, IncDecOperator operator, A arg) {
     return handleUnresolvedSuperIndexPostfixPrefix(
-        node, element, index, operator, arg, isPrefix: true);
+        node, element, index, operator, arg,
+        isPrefix: true);
   }
 
   @override
   R visitFinalSuperFieldPostfix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleFinalSuperFieldPostfixPrefix(
-        node, field, operator, arg, isPrefix: false);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleFinalSuperFieldPostfixPrefix(node, field, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitFinalSuperFieldPrefix(
-      Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      A arg) {
-    return handleFinalSuperFieldPostfixPrefix(
-        node, field, operator, arg, isPrefix: true);
+      Send node, FieldElement field, IncDecOperator operator, A arg) {
+    return handleFinalSuperFieldPostfixPrefix(node, field, operator, arg,
+        isPrefix: true);
   }
 
   @override
   R visitSuperMethodPostfix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
-    return handleSuperMethodPostfixPrefix(
-        node, method, operator, arg, isPrefix: false);
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
+    return handleSuperMethodPostfixPrefix(node, method, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitSuperMethodPrefix(
-      Send node,
-      MethodElement method,
-      IncDecOperator operator,
-      A arg) {
-    return handleSuperMethodPostfixPrefix(
-        node, method, operator, arg, isPrefix: true);
+      Send node, MethodElement method, IncDecOperator operator, A arg) {
+    return handleSuperMethodPostfixPrefix(node, method, operator, arg,
+        isPrefix: true);
   }
 
   @override
   R visitUnresolvedSuperPostfix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
-    return handleUnresolvedSuperPostfixPrefix(
-        node, element, operator, arg, isPrefix: false);
+      Send node, Element element, IncDecOperator operator, A arg) {
+    return handleUnresolvedSuperPostfixPrefix(node, element, operator, arg,
+        isPrefix: false);
   }
 
   @override
   R visitUnresolvedSuperPrefix(
-      Send node,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
-    return handleUnresolvedSuperPostfixPrefix(
-        node, element, operator, arg, isPrefix: true);
+      Send node, Element element, IncDecOperator operator, A arg) {
+    return handleUnresolvedSuperPostfixPrefix(node, element, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitUnresolvedSuperGetterPostfix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterPostfix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return handleUnresolvedSuperGetterPostfixPrefix(
-        node, element, setter, operator, arg, isPrefix: false);
+        node, element, setter, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitUnresolvedSuperGetterPrefix(
-      Send node,
-      Element element,
-      MethodElement setter,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperGetterPrefix(Send node, Element element,
+      MethodElement setter, IncDecOperator operator, A arg) {
     return handleUnresolvedSuperGetterPostfixPrefix(
-        node, element, setter, operator, arg, isPrefix: true);
+        node, element, setter, operator, arg,
+        isPrefix: true);
   }
 
   @override
-  R visitUnresolvedSuperSetterPostfix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterPostfix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleUnresolvedSuperSetterPostfixPrefix(
-        node, getter, element, operator, arg, isPrefix: false);
+        node, getter, element, operator, arg,
+        isPrefix: false);
   }
 
   @override
-  R visitUnresolvedSuperSetterPrefix(
-      Send node,
-      MethodElement getter,
-      Element element,
-      IncDecOperator operator,
-      A arg) {
+  R visitUnresolvedSuperSetterPrefix(Send node, MethodElement getter,
+      Element element, IncDecOperator operator, A arg) {
     return handleUnresolvedSuperSetterPostfixPrefix(
-        node, getter, element, operator, arg, isPrefix: true);
+        node, getter, element, operator, arg,
+        isPrefix: true);
   }
 }
 
@@ -12481,14 +8217,8 @@
 /// handled uniformly.
 abstract class BaseImplementationOfNewMixin<R, A>
     implements SemanticSendVisitor<R, A> {
-
-  R handleConstructorInvoke(
-      NewExpression node,
-      ConstructorElement constructor,
-      DartType type,
-      NodeList arguments,
-      CallStructure callStructure,
-      A arg);
+  R handleConstructorInvoke(NewExpression node, ConstructorElement constructor,
+      DartType type, NodeList arguments, CallStructure callStructure, A arg);
 
   R visitGenerativeConstructorInvoke(
       NewExpression node,
@@ -12540,25 +8270,15 @@
   }
 
   @override
-  R visitUnresolvedConstructorInvoke(
-      NewExpression node,
-      Element constructor,
-      DartType type,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedConstructorInvoke(NewExpression node, Element constructor,
+      DartType type, NodeList arguments, Selector selector, A arg) {
     return handleConstructorInvoke(
         node, constructor, type, arguments, selector.callStructure, arg);
   }
 
   @override
-  R visitUnresolvedClassConstructorInvoke(
-      NewExpression node,
-      Element element,
-      DartType type,
-      NodeList arguments,
-      Selector selector,
-      A arg) {
+  R visitUnresolvedClassConstructorInvoke(NewExpression node, Element element,
+      DartType type, NodeList arguments, Selector selector, A arg) {
     return handleConstructorInvoke(
         node, element, type, arguments, selector.callStructure, arg);
   }
diff --git a/pkg/compiler/lib/src/resolution/send_resolver.dart b/pkg/compiler/lib/src/resolution/send_resolver.dart
index d592cf4..7ef2a86 100644
--- a/pkg/compiler/lib/src/resolution/send_resolver.dart
+++ b/pkg/compiler/lib/src/resolution/send_resolver.dart
@@ -20,9 +20,8 @@
   DeclStructure(this.element);
 
   /// Calls the matching visit method on [visitor] with [node] and [arg].
-  R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             FunctionExpression node,
-             A arg);
+  R dispatch(
+      SemanticDeclarationVisitor<R, A> visitor, FunctionExpression node, A arg);
 }
 
 enum ConstructorKind {
@@ -38,9 +37,8 @@
   ConstructorDeclStructure(this.kind, ConstructorElement constructor)
       : super(constructor);
 
-  R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             FunctionExpression node,
-             A arg) {
+  R dispatch(SemanticDeclarationVisitor<R, A> visitor, FunctionExpression node,
+      A arg) {
     switch (kind) {
       case ConstructorKind.GENERATIVE:
         return visitor.visitGenerativeConstructorDeclaration(
@@ -54,8 +52,8 @@
       default:
         break;
     }
-    throw new SpannableAssertionFailure(node,
-        "Unhandled constructor declaration kind: ${kind}");
+    throw new SpannableAssertionFailure(
+        node, "Unhandled constructor declaration kind: ${kind}");
   }
 }
 
@@ -64,18 +62,14 @@
   InterfaceType redirectionTargetType;
   ConstructorElement redirectionTarget;
 
-  RedirectingFactoryConstructorDeclStructure(
-      ConstructorElement constructor,
-      this.redirectionTargetType,
-      this.redirectionTarget)
+  RedirectingFactoryConstructorDeclStructure(ConstructorElement constructor,
+      this.redirectionTargetType, this.redirectionTarget)
       : super(constructor);
 
-  R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             FunctionExpression node,
-             A arg) {
-    return visitor.visitRedirectingFactoryConstructorDeclaration(
-        node, element, node.parameters,
-        redirectionTargetType, redirectionTarget, arg);
+  R dispatch(SemanticDeclarationVisitor<R, A> visitor, FunctionExpression node,
+      A arg) {
+    return visitor.visitRedirectingFactoryConstructorDeclaration(node, element,
+        node.parameters, redirectionTargetType, redirectionTarget, arg);
   }
 }
 
@@ -96,16 +90,13 @@
   CLOSURE,
 }
 
-class FunctionDeclStructure<R, A>
-    extends DeclStructure<R, A> {
+class FunctionDeclStructure<R, A> extends DeclStructure<R, A> {
   final FunctionKind kind;
 
-  FunctionDeclStructure(this.kind, FunctionElement function)
-      : super(function);
+  FunctionDeclStructure(this.kind, FunctionElement function) : super(function);
 
-  R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             FunctionExpression node,
-             A arg) {
+  R dispatch(SemanticDeclarationVisitor<R, A> visitor, FunctionExpression node,
+      A arg) {
     switch (kind) {
       case FunctionKind.TOP_LEVEL_GETTER:
         return visitor.visitTopLevelGetterDeclaration(
@@ -126,8 +117,7 @@
         return visitor.visitStaticFunctionDeclaration(
             node, element, node.parameters, node.body, arg);
       case FunctionKind.ABSTRACT_GETTER:
-        return visitor.visitAbstractGetterDeclaration(
-            node, element, arg);
+        return visitor.visitAbstractGetterDeclaration(node, element, arg);
       case FunctionKind.ABSTRACT_SETTER:
         return visitor.visitAbstractSetterDeclaration(
             node, element, node.parameters, arg);
@@ -282,8 +272,8 @@
       if (optionalParameters != null) {
         bool isNamed = optionalParameters.beginToken.stringValue == '{';
         for (Node node in optionalParameters) {
-          list.add(computeParameterStructure(
-              node, index++, isRequired: false, isNamed: isNamed));
+          list.add(computeParameterStructure(node, index++,
+              isRequired: false, isNamed: isNamed));
         }
       } else {
         list.add(computeParameterStructure(node, index++));
@@ -293,8 +283,7 @@
   }
 
   ParameterStructure computeParameterStructure(
-      VariableDefinitions definitions,
-      int index,
+      VariableDefinitions definitions, int index,
       {bool isRequired: true, bool isNamed: false}) {
     Node node = definitions.definitions.nodes.single;
     ParameterElement element = elements[node];
@@ -303,8 +292,7 @@
           node, "No parameter structure for $node.");
     }
     if (isRequired) {
-      return new RequiredParameterStructure(
-          definitions, node, element, index);
+      return new RequiredParameterStructure(definitions, node, element, index);
     } else {
       // TODO(johnniwinther): Should we differentiate between implicit (null)
       // and explicit values? What about optional parameters on redirecting
@@ -319,11 +307,10 @@
     }
   }
 
-  void computeVariableStructures(
-      VariableDefinitions definitions,
+  void computeVariableStructures(VariableDefinitions definitions,
       void callback(Node node, VariableStructure structure)) {
     for (Node node in definitions.definitions) {
-       callback(definitions, computeVariableStructure(node));
+      callback(definitions, computeVariableStructure(node));
     }
   }
 
diff --git a/pkg/compiler/lib/src/resolution/send_structure.dart b/pkg/compiler/lib/src/resolution/send_structure.dart
index 647e80e..53c0356 100644
--- a/pkg/compiler/lib/src/resolution/send_structure.dart
+++ b/pkg/compiler/lib/src/resolution/send_structure.dart
@@ -8,13 +8,10 @@
 import '../constants/expressions.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../resolution/tree_elements.dart' show
-    TreeElements;
+import '../resolution/tree_elements.dart' show TreeElements;
 import '../tree/tree.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
 
 import 'access_semantics.dart';
 import 'operators.dart';
@@ -27,6 +24,37 @@
   R dispatch(SemanticSendVisitor<R, A> visitor, Node node, A arg);
 }
 
+enum SendStructureKind {
+  IF_NULL,
+  LOGICAL_AND,
+  LOGICAL_OR,
+  IS,
+  IS_NOT,
+  AS,
+  INVOKE,
+  INCOMPATIBLE_INVOKE,
+  GET,
+  SET,
+  NOT,
+  UNARY,
+  INVALID_UNARY,
+  INDEX,
+  EQUALS,
+  NOT_EQUALS,
+  BINARY,
+  INVALID_BINARY,
+  INDEX_SET,
+  INDEX_PREFIX,
+  INDEX_POSTFIX,
+  COMPOUND,
+  SET_IF_NULL,
+  COMPOUND_INDEX_SET,
+  INDEX_SET_IF_NULL,
+  PREFIX,
+  POSTFIX,
+  DEFERRED_PREFIX,
+}
+
 /// Interface for the structure of the semantics of a [Send] node.
 ///
 /// Subclasses handle each of the [Send] variations; `assert(e)`, `a && b`,
@@ -34,6 +62,8 @@
 abstract class SendStructure<R, A> extends SemanticSendStructure<R, A> {
   /// Calls the matching visit method on [visitor] with [send] and [arg].
   R dispatch(SemanticSendVisitor<R, A> visitor, Send send, A arg);
+
+  SendStructureKind get kind;
 }
 
 /// The structure for a [Send] of the form `a ?? b`.
@@ -41,13 +71,12 @@
   const IfNullStructure();
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
-    return visitor.visitIfNull(
-        node,
-        node.receiver,
-        node.arguments.single,
-        arg);
+    return visitor.visitIfNull(node, node.receiver, node.arguments.single, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.IF_NULL;
+
   String toString() => '??';
 }
 
@@ -57,12 +86,12 @@
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     return visitor.visitLogicalAnd(
-        node,
-        node.receiver,
-        node.arguments.single,
-        arg);
+        node, node.receiver, node.arguments.single, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.LOGICAL_AND;
+
   String toString() => '&&';
 }
 
@@ -72,12 +101,12 @@
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     return visitor.visitLogicalOr(
-        node,
-        node.receiver,
-        node.arguments.single,
-        arg);
+        node, node.receiver, node.arguments.single, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.LOGICAL_OR;
+
   String toString() => '||';
 }
 
@@ -89,13 +118,12 @@
   IsStructure(this.type);
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
-    return visitor.visitIs(
-        node,
-        node.receiver,
-        type,
-        arg);
+    return visitor.visitIs(node, node.receiver, type, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.IS;
+
   String toString() => 'is $type';
 }
 
@@ -107,13 +135,12 @@
   IsNotStructure(this.type);
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
-    return visitor.visitIsNot(
-        node,
-        node.receiver,
-        type,
-        arg);
+    return visitor.visitIsNot(node, node.receiver, type, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.IS_NOT;
+
   String toString() => 'is! $type';
 }
 
@@ -125,13 +152,12 @@
   AsStructure(this.type);
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
-    return visitor.visitAs(
-        node,
-        node.receiver,
-        type,
-        arg);
+    return visitor.visitAs(node, node.receiver, type, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.AS;
+
   String toString() => 'as $type';
 }
 
@@ -150,22 +176,17 @@
 
   InvokeStructure(this.semantics, this.selector);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INVOKE;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
         return visitor.visitIfNotNullDynamicPropertyInvoke(
-            node,
-            node.receiver,
-            node.argumentsNode,
-            selector,
-            arg);
+            node, node.receiver, node.argumentsNode, selector, arg);
       case AccessKind.DYNAMIC_PROPERTY:
         return visitor.visitDynamicPropertyInvoke(
-            node,
-            node.receiver,
-            node.argumentsNode,
-            selector,
-            arg);
+            node, node.receiver, node.argumentsNode, selector, arg);
       case AccessKind.LOCAL_FUNCTION:
         return visitor.visitLocalFunctionInvoke(
             node,
@@ -198,165 +219,75 @@
       case AccessKind.STATIC_FIELD:
       case AccessKind.FINAL_STATIC_FIELD:
         return visitor.visitStaticFieldInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.STATIC_METHOD:
         return visitor.visitStaticFunctionInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.STATIC_GETTER:
         return visitor.visitStaticGetterInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.STATIC_SETTER:
         return visitor.visitStaticSetterInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.TOPLEVEL_FIELD:
       case AccessKind.FINAL_TOPLEVEL_FIELD:
         return visitor.visitTopLevelFieldInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.TOPLEVEL_METHOD:
         return visitor.visitTopLevelFunctionInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.TOPLEVEL_GETTER:
         return visitor.visitTopLevelGetterInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.TOPLEVEL_SETTER:
         return visitor.visitTopLevelSetterInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.CLASS_TYPE_LITERAL:
         return visitor.visitClassTypeLiteralInvoke(
-            node,
-            semantics.constant,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.constant, node.argumentsNode, callStructure, arg);
       case AccessKind.TYPEDEF_TYPE_LITERAL:
         return visitor.visitTypedefTypeLiteralInvoke(
-            node,
-            semantics.constant,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.constant, node.argumentsNode, callStructure, arg);
       case AccessKind.DYNAMIC_TYPE_LITERAL:
         return visitor.visitDynamicTypeLiteralInvoke(
-            node,
-            semantics.constant,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.constant, node.argumentsNode, callStructure, arg);
       case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
         return visitor.visitTypeVariableTypeLiteralInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.EXPRESSION:
         return visitor.visitExpressionInvoke(
-            node,
-            node.selector,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, node.selector, node.argumentsNode, callStructure, arg);
       case AccessKind.THIS:
         return visitor.visitThisInvoke(
-            node,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, node.argumentsNode, callStructure, arg);
       case AccessKind.THIS_PROPERTY:
         return visitor.visitThisPropertyInvoke(
-            node,
-            node.argumentsNode,
-            selector,
-            arg);
+            node, node.argumentsNode, selector, arg);
       case AccessKind.SUPER_FIELD:
       case AccessKind.SUPER_FINAL_FIELD:
         return visitor.visitSuperFieldInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperMethodInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.SUPER_GETTER:
         return visitor.visitSuperGetterInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.SUPER_SETTER:
         return visitor.visitSuperSetterInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.CONSTANT:
         return visitor.visitConstantInvoke(
-            node,
-            semantics.constant,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.constant, node.argumentsNode, callStructure, arg);
       case AccessKind.UNRESOLVED:
         return visitor.visitUnresolvedInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            selector,
-            arg);
+            node, semantics.element, node.argumentsNode, selector, arg);
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            selector,
-            arg);
+            node, semantics.element, node.argumentsNode, selector, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            selector,
-            arg);
+            node, semantics.element, node.argumentsNode, selector, arg);
       case AccessKind.COMPOUND:
         // This is not a valid case.
         break;
@@ -383,37 +314,24 @@
 
   IncompatibleInvokeStructure(this.semantics, this.selector);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INCOMPATIBLE_INVOKE;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.STATIC_METHOD:
         return visitor.visitStaticFunctionIncompatibleInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperMethodIncompatibleInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.TOPLEVEL_METHOD:
         return visitor.visitTopLevelFunctionIncompatibleInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
+            node, semantics.element, node.argumentsNode, callStructure, arg);
       case AccessKind.LOCAL_FUNCTION:
         return visitor.visitLocalFunctionIncompatibleInvoke(
-            node,
-            semantics.element,
-            node.argumentsNode,
-            callStructure,
-            arg);
-     default:
+            node, semantics.element, node.argumentsNode, callStructure, arg);
+      default:
         // TODO(johnniwinther): Support more variants of this invoke structure.
         break;
     }
@@ -431,99 +349,54 @@
 
   GetStructure(this.semantics);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.GET;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
         return visitor.visitIfNotNullDynamicPropertyGet(
-            node,
-            node.receiver,
-            semantics.name,
-            arg);
+            node, node.receiver, semantics.name, arg);
       case AccessKind.DYNAMIC_PROPERTY:
         return visitor.visitDynamicPropertyGet(
-            node,
-            node.receiver,
-            semantics.name,
-            arg);
+            node, node.receiver, semantics.name, arg);
       case AccessKind.LOCAL_FUNCTION:
-        return visitor.visitLocalFunctionGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitLocalFunctionGet(node, semantics.element, arg);
       case AccessKind.LOCAL_VARIABLE:
       case AccessKind.FINAL_LOCAL_VARIABLE:
-        return visitor.visitLocalVariableGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitLocalVariableGet(node, semantics.element, arg);
       case AccessKind.PARAMETER:
       case AccessKind.FINAL_PARAMETER:
-        return visitor.visitParameterGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitParameterGet(node, semantics.element, arg);
       case AccessKind.STATIC_FIELD:
       case AccessKind.FINAL_STATIC_FIELD:
-        return visitor.visitStaticFieldGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitStaticFieldGet(node, semantics.element, arg);
       case AccessKind.STATIC_METHOD:
-        return visitor.visitStaticFunctionGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitStaticFunctionGet(node, semantics.element, arg);
       case AccessKind.STATIC_GETTER:
-        return visitor.visitStaticGetterGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitStaticGetterGet(node, semantics.element, arg);
       case AccessKind.STATIC_SETTER:
-        return visitor.visitStaticSetterGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitStaticSetterGet(node, semantics.element, arg);
       case AccessKind.TOPLEVEL_FIELD:
       case AccessKind.FINAL_TOPLEVEL_FIELD:
-        return visitor.visitTopLevelFieldGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitTopLevelFieldGet(node, semantics.element, arg);
       case AccessKind.TOPLEVEL_METHOD:
-        return visitor.visitTopLevelFunctionGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitTopLevelFunctionGet(node, semantics.element, arg);
       case AccessKind.TOPLEVEL_GETTER:
-        return visitor.visitTopLevelGetterGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitTopLevelGetterGet(node, semantics.element, arg);
       case AccessKind.TOPLEVEL_SETTER:
-        return visitor.visitTopLevelSetterGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitTopLevelSetterGet(node, semantics.element, arg);
       case AccessKind.CLASS_TYPE_LITERAL:
-        return visitor.visitClassTypeLiteralGet(
-            node,
-            semantics.constant,
-            arg);
+        return visitor.visitClassTypeLiteralGet(node, semantics.constant, arg);
       case AccessKind.TYPEDEF_TYPE_LITERAL:
         return visitor.visitTypedefTypeLiteralGet(
-            node,
-            semantics.constant,
-            arg);
+            node, semantics.constant, arg);
       case AccessKind.DYNAMIC_TYPE_LITERAL:
         return visitor.visitDynamicTypeLiteralGet(
-            node,
-            semantics.constant,
-            arg);
+            node, semantics.constant, arg);
       case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
         return visitor.visitTypeVariableTypeLiteralGet(
-            node,
-            semantics.element,
-            arg);
+            node, semantics.element, arg);
       case AccessKind.EXPRESSION:
         // This is not a valid case.
         break;
@@ -531,51 +404,24 @@
         // TODO(johnniwinther): Handle this when `this` is a [Send].
         break;
       case AccessKind.THIS_PROPERTY:
-        return visitor.visitThisPropertyGet(
-            node,
-            semantics.name,
-            arg);
+        return visitor.visitThisPropertyGet(node, semantics.name, arg);
       case AccessKind.SUPER_FIELD:
       case AccessKind.SUPER_FINAL_FIELD:
-        return visitor.visitSuperFieldGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitSuperFieldGet(node, semantics.element, arg);
       case AccessKind.SUPER_METHOD:
-        return visitor.visitSuperMethodGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitSuperMethodGet(node, semantics.element, arg);
       case AccessKind.SUPER_GETTER:
-        return visitor.visitSuperGetterGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitSuperGetterGet(node, semantics.element, arg);
       case AccessKind.SUPER_SETTER:
-        return visitor.visitSuperSetterGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitSuperSetterGet(node, semantics.element, arg);
       case AccessKind.CONSTANT:
-        return visitor.visitConstantGet(
-            node,
-            semantics.constant,
-            arg);
+        return visitor.visitConstantGet(node, semantics.constant, arg);
       case AccessKind.UNRESOLVED:
-        return visitor.visitUnresolvedGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitUnresolvedGet(node, semantics.element, arg);
       case AccessKind.UNRESOLVED_SUPER:
-        return visitor.visitUnresolvedSuperGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.visitUnresolvedSuperGet(node, semantics.element, arg);
       case AccessKind.INVALID:
-        return visitor.errorInvalidGet(
-            node,
-            semantics.element,
-            arg);
+        return visitor.errorInvalidGet(node, semantics.element, arg);
       case AccessKind.COMPOUND:
         // This is not a valid case.
         break;
@@ -593,136 +439,74 @@
 
   SetStructure(this.semantics);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.SET;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
         return visitor.visitIfNotNullDynamicPropertySet(
-          node,
-          node.receiver,
-          semantics.name,
-          node.arguments.single,
-          arg);
+            node, node.receiver, semantics.name, node.arguments.single, arg);
       case AccessKind.DYNAMIC_PROPERTY:
         return visitor.visitDynamicPropertySet(
-          node,
-          node.receiver,
-          semantics.name,
-          node.arguments.single,
-          arg);
+            node, node.receiver, semantics.name, node.arguments.single, arg);
       case AccessKind.LOCAL_FUNCTION:
         return visitor.visitLocalFunctionSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.LOCAL_VARIABLE:
         return visitor.visitLocalVariableSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.FINAL_LOCAL_VARIABLE:
         return visitor.visitFinalLocalVariableSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.PARAMETER:
         return visitor.visitParameterSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.FINAL_PARAMETER:
         return visitor.visitFinalParameterSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.STATIC_FIELD:
         return visitor.visitStaticFieldSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.FINAL_STATIC_FIELD:
         return visitor.visitFinalStaticFieldSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.STATIC_METHOD:
         return visitor.visitStaticFunctionSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.STATIC_GETTER:
         return visitor.visitStaticGetterSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.STATIC_SETTER:
         return visitor.visitStaticSetterSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.TOPLEVEL_FIELD:
         return visitor.visitTopLevelFieldSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.FINAL_TOPLEVEL_FIELD:
         return visitor.visitFinalTopLevelFieldSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.TOPLEVEL_METHOD:
         return visitor.visitTopLevelFunctionSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.TOPLEVEL_GETTER:
         return visitor.visitTopLevelGetterSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.TOPLEVEL_SETTER:
         return visitor.visitTopLevelSetterSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.CLASS_TYPE_LITERAL:
         return visitor.visitClassTypeLiteralSet(
-            node,
-            semantics.constant,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, node.arguments.single, arg);
       case AccessKind.TYPEDEF_TYPE_LITERAL:
         return visitor.visitTypedefTypeLiteralSet(
-            node,
-            semantics.constant,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, node.arguments.single, arg);
       case AccessKind.DYNAMIC_TYPE_LITERAL:
         return visitor.visitDynamicTypeLiteralSet(
-            node,
-            semantics.constant,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, node.arguments.single, arg);
       case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
         return visitor.visitTypeVariableTypeLiteralSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.EXPRESSION:
         // This is not a valid case.
         break;
@@ -731,61 +515,34 @@
         break;
       case AccessKind.THIS_PROPERTY:
         return visitor.visitThisPropertySet(
-            node,
-            semantics.name,
-            node.arguments.single,
-            arg);
+            node, semantics.name, node.arguments.single, arg);
       case AccessKind.SUPER_FIELD:
         return visitor.visitSuperFieldSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.SUPER_FINAL_FIELD:
         return visitor.visitFinalSuperFieldSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperMethodSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.SUPER_GETTER:
         return visitor.visitSuperGetterSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.SUPER_SETTER:
         return visitor.visitSuperSetterSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.CONSTANT:
         // TODO(johnniwinther): Should this be a valid case?
         break;
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.UNRESOLVED:
         return visitor.visitUnresolvedSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidSet(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.COMPOUND:
         // This is not a valid case.
         break;
@@ -801,12 +558,12 @@
   const NotStructure();
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
-    return visitor.visitNot(
-        node,
-        node.receiver,
-        arg);
+    return visitor.visitNot(node, node.receiver, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.NOT;
+
   String toString() => 'not()';
 }
 
@@ -821,32 +578,21 @@
 
   UnaryStructure(this.semantics, this.operator);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.UNARY;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
-        return visitor.visitUnary(
-            node,
-            operator,
-            node.receiver,
-            arg);
+        return visitor.visitUnary(node, operator, node.receiver, arg);
       case AccessKind.SUPER_METHOD:
-        return visitor.visitSuperUnary(
-            node,
-            operator,
-            semantics.element,
-            arg);
+        return visitor.visitSuperUnary(node, operator, semantics.element, arg);
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperUnary(
-            node,
-            operator,
-            semantics.element,
-            arg);
+            node, operator, semantics.element, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidUnary(
-            node,
-            operator,
-            semantics.element,
-            arg);
+            node, operator, semantics.element, arg);
       default:
         // This is not a valid case.
         break;
@@ -865,12 +611,12 @@
   @override
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     return visitor.errorUndefinedUnaryExpression(
-        node,
-        node.selector,
-        node.receiver,
-        arg);
+        node, node.selector, node.receiver, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INVALID_UNARY;
+
   String toString() => 'invalid unary';
 }
 
@@ -882,32 +628,23 @@
 
   IndexStructure(this.semantics);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INDEX;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
         return visitor.visitIndex(
-            node,
-            node.receiver,
-            node.arguments.single,
-            arg);
+            node, node.receiver, node.arguments.single, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperIndex(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperIndex(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidIndex(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       default:
         // This is not a valid case.
         break;
@@ -924,26 +661,20 @@
 
   EqualsStructure(this.semantics);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.EQUALS;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
         return visitor.visitEquals(
-            node,
-            node.receiver,
-            node.arguments.single,
-            arg);
+            node, node.receiver, node.arguments.single, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperEquals(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidEquals(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       default:
         // This is not a valid case.
         break;
@@ -962,26 +693,20 @@
 
   NotEqualsStructure(this.semantics);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.NOT_EQUALS;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
         return visitor.visitNotEquals(
-            node,
-            node.receiver,
-            node.arguments.single,
-            arg);
+            node, node.receiver, node.arguments.single, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperNotEquals(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidNotEquals(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       default:
         // This is not a valid case.
         break;
@@ -1004,42 +729,28 @@
 
   BinaryStructure(this.semantics, this.operator);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.BINARY;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
         return visitor.visitBinary(
-            node,
-            node.receiver,
-            operator,
-            node.arguments.single,
-            arg);
+            node, node.receiver, operator, node.arguments.single, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperBinary(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperBinary(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidBinary(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       default:
         // This is not a valid case.
         break;
     }
-    throw new SpannableAssertionFailure(
-        node, "Invalid binary: ${semantics}");
+    throw new SpannableAssertionFailure(node, "Invalid binary: ${semantics}");
   }
 
   String toString() => 'binary($operator,$semantics)';
@@ -1053,13 +764,12 @@
   @override
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     return visitor.errorUndefinedBinaryExpression(
-        node,
-        node.receiver,
-        node.selector,
-        node.arguments.single,
-        arg);
+        node, node.receiver, node.selector, node.arguments.single, arg);
   }
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INVALID_BINARY;
+
   String toString() => 'invalid binary';
 }
 
@@ -1070,37 +780,24 @@
 
   IndexSetStructure(this.semantics);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INDEX_SET;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
-        return visitor.visitIndexSet(
-            node,
-            node.receiver,
-            node.arguments.first,
-            node.arguments.tail.head,
-            arg);
+        return visitor.visitIndexSet(node, node.receiver, node.arguments.first,
+            node.arguments.tail.head, arg);
       case AccessKind.SUPER_METHOD:
-        return visitor.visitSuperIndexSet(
-            node,
-            semantics.element,
-            node.arguments.first,
-            node.arguments.tail.head,
-            arg);
+        return visitor.visitSuperIndexSet(node, semantics.element,
+            node.arguments.first, node.arguments.tail.head, arg);
       case AccessKind.UNRESOLVED_SUPER:
       case AccessKind.UNRESOLVED:
-        return visitor.visitUnresolvedSuperIndexSet(
-            node,
-            semantics.element,
-            node.arguments.first,
-            node.arguments.tail.head,
-            arg);
+        return visitor.visitUnresolvedSuperIndexSet(node, semantics.element,
+            node.arguments.first, node.arguments.tail.head, arg);
       case AccessKind.INVALID:
-        return visitor.errorInvalidIndexSet(
-            node,
-            semantics.element,
-            node.arguments.first,
-            node.arguments.tail.head,
-            arg);
+        return visitor.errorInvalidIndexSet(node, semantics.element,
+            node.arguments.first, node.arguments.tail.head, arg);
       default:
         // This is not a valid case.
         break;
@@ -1123,40 +820,26 @@
 
   IndexPrefixStructure(this.semantics, this.operator);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INDEX_PREFIX;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
         return visitor.visitIndexPrefix(
-            node,
-            node.receiver,
-            node.arguments.single,
-            operator,
-            arg);
+            node, node.receiver, node.arguments.single, operator, arg);
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperIndexPrefix(
-            node,
-            semantics.element,
-            node.arguments.single,
-            operator,
-            arg);
+            node, semantics.element, node.arguments.single, operator, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidIndexPrefix(
-            node,
-            semantics.element,
-            node.arguments.single,
-            operator,
-            arg);
+            node, semantics.element, node.arguments.single, operator, arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
           case CompoundAccessKind.SUPER_GETTER_SETTER:
-            return visitor.visitSuperIndexPrefix(
-                node,
-                compoundSemantics.getter,
-                compoundSemantics.setter,
-                node.arguments.single,
-                operator,
-                arg);
+            return visitor.visitSuperIndexPrefix(node, compoundSemantics.getter,
+                compoundSemantics.setter, node.arguments.single, operator, arg);
           case CompoundAccessKind.UNRESOLVED_SUPER_GETTER:
             return visitor.visitUnresolvedSuperGetterIndexPrefix(
                 node,
@@ -1198,29 +881,20 @@
 
   IndexPostfixStructure(this.semantics, this.operator);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INDEX_POSTFIX;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
         return visitor.visitIndexPostfix(
-            node,
-            node.receiver,
-            node.arguments.single,
-            operator,
-            arg);
+            node, node.receiver, node.arguments.single, operator, arg);
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperIndexPostfix(
-            node,
-            semantics.element,
-            node.arguments.single,
-            operator,
-            arg);
+            node, semantics.element, node.arguments.single, operator, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidIndexPostfix(
-            node,
-            semantics.element,
-            node.arguments.single,
-            operator,
-            arg);
+            node, semantics.element, node.arguments.single, operator, arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -1271,8 +945,10 @@
   /// The assignment operator used in the compound assignment.
   final AssignmentOperator operator;
 
-  CompoundStructure(this.semantics,
-                    this.operator);
+  CompoundStructure(this.semantics, this.operator);
+
+  @override
+  SendStructureKind get kind => SendStructureKind.COMPOUND;
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
@@ -1285,69 +961,32 @@
             node.arguments.single,
             arg);
       case AccessKind.DYNAMIC_PROPERTY:
-        return visitor.visitDynamicPropertyCompound(
-            node,
-            node.receiver,
-            semantics.name,
-            operator,
-            node.arguments.single,
-            arg);
+        return visitor.visitDynamicPropertyCompound(node, node.receiver,
+            semantics.name, operator, node.arguments.single, arg);
       case AccessKind.LOCAL_FUNCTION:
         return visitor.visitLocalFunctionCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.LOCAL_VARIABLE:
         return visitor.visitLocalVariableCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.FINAL_LOCAL_VARIABLE:
         return visitor.visitFinalLocalVariableCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.PARAMETER:
         return visitor.visitParameterCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.FINAL_PARAMETER:
         return visitor.visitFinalParameterCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.STATIC_FIELD:
         return visitor.visitStaticFieldCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.FINAL_STATIC_FIELD:
         return visitor.visitFinalStaticFieldCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.STATIC_METHOD:
         return visitor.visitStaticMethodCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.STATIC_GETTER:
         // This is not a valid case.
         break;
@@ -1356,25 +995,13 @@
         break;
       case AccessKind.TOPLEVEL_FIELD:
         return visitor.visitTopLevelFieldCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.FINAL_TOPLEVEL_FIELD:
         return visitor.visitFinalTopLevelFieldCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.TOPLEVEL_METHOD:
         return visitor.visitTopLevelMethodCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.TOPLEVEL_GETTER:
         // This is not a valid case.
         break;
@@ -1383,32 +1010,16 @@
         break;
       case AccessKind.CLASS_TYPE_LITERAL:
         return visitor.visitClassTypeLiteralCompound(
-            node,
-            semantics.constant,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, operator, node.arguments.single, arg);
       case AccessKind.TYPEDEF_TYPE_LITERAL:
         return visitor.visitTypedefTypeLiteralCompound(
-            node,
-            semantics.constant,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, operator, node.arguments.single, arg);
       case AccessKind.DYNAMIC_TYPE_LITERAL:
         return visitor.visitDynamicTypeLiteralCompound(
-            node,
-            semantics.constant,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, operator, node.arguments.single, arg);
       case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
         return visitor.visitTypeVariableTypeLiteralCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.EXPRESSION:
         // This is not a valid case.
         break;
@@ -1417,32 +1028,16 @@
         break;
       case AccessKind.THIS_PROPERTY:
         return visitor.visitThisPropertyCompound(
-            node,
-            semantics.name,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.name, operator, node.arguments.single, arg);
       case AccessKind.SUPER_FIELD:
         return visitor.visitSuperFieldCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.SUPER_FINAL_FIELD:
         return visitor.visitFinalSuperFieldCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperMethodCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.SUPER_GETTER:
         // This is not a valid case.
         break;
@@ -1454,25 +1049,13 @@
         break;
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.UNRESOLVED:
         return visitor.visitUnresolvedCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidCompound(
-            node,
-            semantics.element,
-            operator,
-            node.arguments.single,
-            arg);
+            node, semantics.element, operator, node.arguments.single, arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -1599,8 +1182,8 @@
         }
         break;
     }
-    throw new SpannableAssertionFailure(node,
-        "Invalid compound assigment: ${semantics}");
+    throw new SpannableAssertionFailure(
+        node, "Invalid compound assigment: ${semantics}");
   }
 
   String toString() => 'compound($operator,$semantics)';
@@ -1614,70 +1197,41 @@
 
   SetIfNullStructure(this.semantics);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.SET_IF_NULL;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
         return visitor.visitIfNotNullDynamicPropertySetIfNull(
-            node,
-            node.receiver,
-            semantics.name,
-            node.arguments.single,
-            arg);
+            node, node.receiver, semantics.name, node.arguments.single, arg);
       case AccessKind.DYNAMIC_PROPERTY:
         return visitor.visitDynamicPropertySetIfNull(
-            node,
-            node.receiver,
-            semantics.name,
-            node.arguments.single,
-            arg);
+            node, node.receiver, semantics.name, node.arguments.single, arg);
       case AccessKind.LOCAL_FUNCTION:
         return visitor.visitLocalFunctionSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.LOCAL_VARIABLE:
         return visitor.visitLocalVariableSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.FINAL_LOCAL_VARIABLE:
         return visitor.visitFinalLocalVariableSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.PARAMETER:
         return visitor.visitParameterSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.FINAL_PARAMETER:
         return visitor.visitFinalParameterSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.STATIC_FIELD:
         return visitor.visitStaticFieldSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.FINAL_STATIC_FIELD:
         return visitor.visitFinalStaticFieldSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.STATIC_METHOD:
         return visitor.visitStaticMethodSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.STATIC_GETTER:
         // This is not a valid case.
         break;
@@ -1686,22 +1240,13 @@
         break;
       case AccessKind.TOPLEVEL_FIELD:
         return visitor.visitTopLevelFieldSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.FINAL_TOPLEVEL_FIELD:
         return visitor.visitFinalTopLevelFieldSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.TOPLEVEL_METHOD:
         return visitor.visitTopLevelMethodSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.TOPLEVEL_GETTER:
         // This is not a valid case.
         break;
@@ -1710,28 +1255,16 @@
         break;
       case AccessKind.CLASS_TYPE_LITERAL:
         return visitor.visitClassTypeLiteralSetIfNull(
-            node,
-            semantics.constant,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, node.arguments.single, arg);
       case AccessKind.TYPEDEF_TYPE_LITERAL:
         return visitor.visitTypedefTypeLiteralSetIfNull(
-            node,
-            semantics.constant,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, node.arguments.single, arg);
       case AccessKind.DYNAMIC_TYPE_LITERAL:
         return visitor.visitDynamicTypeLiteralSetIfNull(
-            node,
-            semantics.constant,
-            node.arguments.single,
-            arg);
+            node, semantics.constant, node.arguments.single, arg);
       case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
         return visitor.visitTypeVariableTypeLiteralSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.EXPRESSION:
         // This is not a valid case.
         break;
@@ -1740,28 +1273,16 @@
         break;
       case AccessKind.THIS_PROPERTY:
         return visitor.visitThisPropertySetIfNull(
-            node,
-            semantics.name,
-            node.arguments.single,
-            arg);
+            node, semantics.name, node.arguments.single, arg);
       case AccessKind.SUPER_FIELD:
         return visitor.visitSuperFieldSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.SUPER_FINAL_FIELD:
         return visitor.visitFinalSuperFieldSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperMethodSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.SUPER_GETTER:
         // This is not a valid case.
         break;
@@ -1773,22 +1294,13 @@
         break;
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.UNRESOLVED:
         return visitor.visitUnresolvedSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.single,
-            arg);
+            node, semantics.element, node.arguments.single, arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -1900,8 +1412,8 @@
         }
         break;
     }
-    throw new SpannableAssertionFailure(node,
-        "Invalid if-null assigment: ${semantics}");
+    throw new SpannableAssertionFailure(
+        node, "Invalid if-null assigment: ${semantics}");
   }
 
   String toString() => 'ifNull($semantics)';
@@ -1918,16 +1430,14 @@
 
   CompoundIndexSetStructure(this.semantics, this.operator);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.COMPOUND_INDEX_SET;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
-        return visitor.visitCompoundIndexSet(
-            node,
-            node.receiver,
-            node.arguments.first,
-            operator,
-            node.arguments.tail.head,
-            arg);
+        return visitor.visitCompoundIndexSet(node, node.receiver,
+            node.arguments.first, operator, node.arguments.tail.head, arg);
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperCompoundIndexSet(
             node,
@@ -1937,13 +1447,8 @@
             node.arguments.tail.head,
             arg);
       case AccessKind.INVALID:
-        return visitor.errorInvalidCompoundIndexSet(
-            node,
-            semantics.element,
-            node.arguments.first,
-            operator,
-            node.arguments.tail.head,
-            arg);
+        return visitor.errorInvalidCompoundIndexSet(node, semantics.element,
+            node.arguments.first, operator, node.arguments.tail.head, arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -1998,15 +1503,14 @@
 
   IndexSetIfNullStructure(this.semantics);
 
+  @override
+  SendStructureKind get kind => SendStructureKind.INDEX_SET;
+
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.EXPRESSION:
-        return visitor.visitIndexSetIfNull(
-            node,
-            node.receiver,
-            node.arguments.first,
-            node.arguments.tail.head,
-            arg);
+        return visitor.visitIndexSetIfNull(node, node.receiver,
+            node.arguments.first, node.arguments.tail.head, arg);
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperIndexSetIfNull(
             node,
@@ -2015,12 +1519,8 @@
             node.arguments.tail.head,
             arg);
       case AccessKind.INVALID:
-        return visitor.errorInvalidIndexSetIfNull(
-            node,
-            semantics.element,
-            node.arguments.first,
-            node.arguments.tail.head,
-            arg);
+        return visitor.errorInvalidIndexSetIfNull(node, semantics.element,
+            node.arguments.first, node.arguments.tail.head, arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -2073,73 +1573,43 @@
   /// The `++` or `--` operator used in the operation.
   final IncDecOperator operator;
 
-  PrefixStructure(this.semantics,
-                  this.operator);
+  PrefixStructure(this.semantics, this.operator);
+
+  @override
+  SendStructureKind get kind => SendStructureKind.PREFIX;
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
         return visitor.visitIfNotNullDynamicPropertyPrefix(
-            node,
-            node.receiver,
-            semantics.name,
-            operator,
-            arg);
+            node, node.receiver, semantics.name, operator, arg);
       case AccessKind.DYNAMIC_PROPERTY:
         return visitor.visitDynamicPropertyPrefix(
-            node,
-            node.receiver,
-            semantics.name,
-            operator,
-            arg);
+            node, node.receiver, semantics.name, operator, arg);
       case AccessKind.LOCAL_FUNCTION:
         return visitor.visitLocalFunctionPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.LOCAL_VARIABLE:
         return visitor.visitLocalVariablePrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.FINAL_LOCAL_VARIABLE:
         return visitor.visitFinalLocalVariablePrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.PARAMETER:
         return visitor.visitParameterPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.FINAL_PARAMETER:
         return visitor.visitFinalParameterPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.STATIC_FIELD:
         return visitor.visitStaticFieldPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.FINAL_STATIC_FIELD:
         return visitor.visitFinalStaticFieldPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.STATIC_METHOD:
         return visitor.visitStaticMethodPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.STATIC_GETTER:
         // This is not a valid case.
         break;
@@ -2148,22 +1618,13 @@
         break;
       case AccessKind.TOPLEVEL_FIELD:
         return visitor.visitTopLevelFieldPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.FINAL_TOPLEVEL_FIELD:
         return visitor.visitFinalTopLevelFieldPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.TOPLEVEL_METHOD:
         return visitor.visitTopLevelMethodPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.TOPLEVEL_GETTER:
         // This is not a valid case.
         break;
@@ -2172,28 +1633,16 @@
         break;
       case AccessKind.CLASS_TYPE_LITERAL:
         return visitor.visitClassTypeLiteralPrefix(
-            node,
-            semantics.constant,
-            operator,
-            arg);
+            node, semantics.constant, operator, arg);
       case AccessKind.TYPEDEF_TYPE_LITERAL:
         return visitor.visitTypedefTypeLiteralPrefix(
-            node,
-            semantics.constant,
-            operator,
-            arg);
+            node, semantics.constant, operator, arg);
       case AccessKind.DYNAMIC_TYPE_LITERAL:
         return visitor.visitDynamicTypeLiteralPrefix(
-            node,
-            semantics.constant,
-            operator,
-            arg);
+            node, semantics.constant, operator, arg);
       case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
         return visitor.visitTypeVariableTypeLiteralPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.EXPRESSION:
         // This is not a valid case.
         break;
@@ -2202,28 +1651,16 @@
         break;
       case AccessKind.THIS_PROPERTY:
         return visitor.visitThisPropertyPrefix(
-            node,
-            semantics.name,
-            operator,
-            arg);
+            node, semantics.name, operator, arg);
       case AccessKind.SUPER_FIELD:
         return visitor.visitSuperFieldPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.SUPER_FINAL_FIELD:
         return visitor.visitFinalSuperFieldPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperMethodPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.SUPER_GETTER:
         // This is not a valid case.
         break;
@@ -2235,22 +1672,13 @@
         break;
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.UNRESOLVED:
         return visitor.visitUnresolvedPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidPrefix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -2368,8 +1796,8 @@
                 arg);
         }
     }
-    throw new SpannableAssertionFailure(node,
-        "Invalid compound assigment: ${semantics}");
+    throw new SpannableAssertionFailure(
+        node, "Invalid compound assigment: ${semantics}");
   }
 
   String toString() => 'prefix($operator,$semantics)';
@@ -2384,73 +1812,43 @@
   /// The `++` or `--` operator used in the operation.
   final IncDecOperator operator;
 
-  PostfixStructure(this.semantics,
-                   this.operator);
+  PostfixStructure(this.semantics, this.operator);
+
+  @override
+  SendStructureKind get kind => SendStructureKind.POSTFIX;
 
   R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
     switch (semantics.kind) {
       case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
         return visitor.visitIfNotNullDynamicPropertyPostfix(
-            node,
-            node.receiver,
-            semantics.name,
-            operator,
-            arg);
+            node, node.receiver, semantics.name, operator, arg);
       case AccessKind.DYNAMIC_PROPERTY:
         return visitor.visitDynamicPropertyPostfix(
-            node,
-            node.receiver,
-            semantics.name,
-            operator,
-            arg);
+            node, node.receiver, semantics.name, operator, arg);
       case AccessKind.LOCAL_FUNCTION:
         return visitor.visitLocalFunctionPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.LOCAL_VARIABLE:
         return visitor.visitLocalVariablePostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.FINAL_LOCAL_VARIABLE:
         return visitor.visitFinalLocalVariablePostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.PARAMETER:
         return visitor.visitParameterPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.FINAL_PARAMETER:
         return visitor.visitFinalParameterPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.STATIC_FIELD:
         return visitor.visitStaticFieldPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.FINAL_STATIC_FIELD:
         return visitor.visitFinalStaticFieldPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.STATIC_METHOD:
         return visitor.visitStaticMethodPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.STATIC_GETTER:
         // This is not a valid case.
         break;
@@ -2459,22 +1857,13 @@
         break;
       case AccessKind.TOPLEVEL_FIELD:
         return visitor.visitTopLevelFieldPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.FINAL_TOPLEVEL_FIELD:
         return visitor.visitFinalTopLevelFieldPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.TOPLEVEL_METHOD:
         return visitor.visitTopLevelMethodPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.TOPLEVEL_GETTER:
         // This is not a valid case.
         break;
@@ -2483,28 +1872,16 @@
         break;
       case AccessKind.CLASS_TYPE_LITERAL:
         return visitor.visitClassTypeLiteralPostfix(
-            node,
-            semantics.constant,
-            operator,
-            arg);
+            node, semantics.constant, operator, arg);
       case AccessKind.TYPEDEF_TYPE_LITERAL:
         return visitor.visitTypedefTypeLiteralPostfix(
-            node,
-            semantics.constant,
-            operator,
-            arg);
+            node, semantics.constant, operator, arg);
       case AccessKind.DYNAMIC_TYPE_LITERAL:
         return visitor.visitDynamicTypeLiteralPostfix(
-            node,
-            semantics.constant,
-            operator,
-            arg);
+            node, semantics.constant, operator, arg);
       case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
         return visitor.visitTypeVariableTypeLiteralPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.EXPRESSION:
         // This is not a valid case.
         break;
@@ -2513,28 +1890,16 @@
         break;
       case AccessKind.THIS_PROPERTY:
         return visitor.visitThisPropertyPostfix(
-            node,
-            semantics.name,
-            operator,
-            arg);
+            node, semantics.name, operator, arg);
       case AccessKind.SUPER_FIELD:
         return visitor.visitSuperFieldPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.SUPER_FINAL_FIELD:
         return visitor.visitFinalSuperFieldPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.SUPER_METHOD:
         return visitor.visitSuperMethodPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.SUPER_GETTER:
         // This is not a valid case.
         break;
@@ -2546,22 +1911,13 @@
         break;
       case AccessKind.UNRESOLVED_SUPER:
         return visitor.visitUnresolvedSuperPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.UNRESOLVED:
         return visitor.visitUnresolvedPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.INVALID:
         return visitor.errorInvalidPostfix(
-            node,
-            semantics.element,
-            operator,
-            arg);
+            node, semantics.element, operator, arg);
       case AccessKind.COMPOUND:
         CompoundAccessSemantics compoundSemantics = semantics;
         switch (compoundSemantics.compoundAccessKind) {
@@ -2672,14 +2028,13 @@
                 arg);
         }
     }
-    throw new SpannableAssertionFailure(node,
-        "Invalid compound assigment: ${semantics}");
+    throw new SpannableAssertionFailure(
+        node, "Invalid compound assigment: ${semantics}");
   }
 
   String toString() => 'postfix($operator,$semantics)';
 }
 
-
 /// The structure for a [Send] whose prefix is a prefix for a deferred library.
 /// For instance `deferred.a` where `deferred` is a deferred prefix.
 class DeferredPrefixStructure<R, A> implements SendStructure<R, A> {
@@ -2696,17 +2051,23 @@
   }
 
   @override
+  SendStructureKind get kind => SendStructureKind.DEFERRED_PREFIX;
+
+  @override
   R dispatch(SemanticSendVisitor<R, A> visitor, Send send, A arg) {
     visitor.previsitDeferredAccess(send, prefix, arg);
     return sendStructure.dispatch(visitor, send, arg);
   }
 }
 
+enum NewStructureKind { NEW_INVOKE, CONST_INVOKE, LATE_CONST, }
 
 /// The structure for a [NewExpression] of a new invocation.
 abstract class NewStructure<R, A> implements SemanticSendStructure<R, A> {
   /// Calls the matching visit method on [visitor] with [node] and [arg].
   R dispatch(SemanticSendVisitor<R, A> visitor, NewExpression node, A arg);
+
+  NewStructureKind get kind;
 }
 
 /// The structure for a [NewExpression] of a new invocation. For instance
@@ -2717,6 +2078,9 @@
 
   NewInvokeStructure(this.semantics, this.selector);
 
+  @override
+  NewStructureKind get kind => NewStructureKind.NEW_INVOKE;
+
   CallStructure get callStructure => selector.callStructure;
 
   R dispatch(SemanticSendVisitor<R, A> visitor, NewExpression node, A arg) {
@@ -2725,66 +2089,95 @@
         ConstructorElement constructor = semantics.element;
         if (constructor.isRedirectingGenerative) {
           return visitor.visitRedirectingGenerativeConstructorInvoke(
-              node, constructor, semantics.type,
-              node.send.argumentsNode, callStructure, arg);
+              node,
+              constructor,
+              semantics.type,
+              node.send.argumentsNode,
+              callStructure,
+              arg);
         }
-        return visitor.visitGenerativeConstructorInvoke(
-            node, constructor, semantics.type,
-            node.send.argumentsNode, callStructure, arg);
+        return visitor.visitGenerativeConstructorInvoke(node, constructor,
+            semantics.type, node.send.argumentsNode, callStructure, arg);
       case ConstructorAccessKind.FACTORY:
         ConstructorElement constructor = semantics.element;
         if (constructor.isRedirectingFactory) {
           if (constructor.isEffectiveTargetMalformed) {
             return visitor.visitUnresolvedRedirectingFactoryConstructorInvoke(
-                node, semantics.element, semantics.type,
-                node.send.argumentsNode, callStructure, arg);
+                node,
+                semantics.element,
+                semantics.type,
+                node.send.argumentsNode,
+                callStructure,
+                arg);
           }
           ConstructorElement effectiveTarget = constructor.effectiveTarget;
           InterfaceType effectiveTargetType =
               constructor.computeEffectiveTargetType(semantics.type);
-          if (callStructure.signatureApplies(
-                  effectiveTarget.functionSignature)) {
+          if (callStructure
+              .signatureApplies(effectiveTarget.functionSignature)) {
             return visitor.visitRedirectingFactoryConstructorInvoke(
-                node, semantics.element, semantics.type,
-                effectiveTarget, effectiveTargetType,
-                node.send.argumentsNode, callStructure, arg);
+                node,
+                semantics.element,
+                semantics.type,
+                effectiveTarget,
+                effectiveTargetType,
+                node.send.argumentsNode,
+                callStructure,
+                arg);
           } else {
             return visitor.visitUnresolvedRedirectingFactoryConstructorInvoke(
-                            node, semantics.element, semantics.type,
-                            node.send.argumentsNode, callStructure, arg);
+                node,
+                semantics.element,
+                semantics.type,
+                node.send.argumentsNode,
+                callStructure,
+                arg);
           }
         }
         if (callStructure.signatureApplies(constructor.functionSignature)) {
-          return visitor.visitFactoryConstructorInvoke(
-              node, constructor, semantics.type,
-              node.send.argumentsNode, callStructure, arg);
+          return visitor.visitFactoryConstructorInvoke(node, constructor,
+              semantics.type, node.send.argumentsNode, callStructure, arg);
         }
-        return visitor.visitConstructorIncompatibleInvoke(
-            node, constructor, semantics.type,
-            node.send.argumentsNode, callStructure, arg);
+        return visitor.visitConstructorIncompatibleInvoke(node, constructor,
+            semantics.type, node.send.argumentsNode, callStructure, arg);
       case ConstructorAccessKind.ABSTRACT:
         return visitor.visitAbstractClassConstructorInvoke(
-            node, semantics.element, semantics.type,
-            node.send.argumentsNode, callStructure, arg);
+            node,
+            semantics.element,
+            semantics.type,
+            node.send.argumentsNode,
+            callStructure,
+            arg);
       case ConstructorAccessKind.UNRESOLVED_CONSTRUCTOR:
-        return visitor.visitUnresolvedConstructorInvoke(
-            node, semantics.element, semantics.type,
-            node.send.argumentsNode, selector, arg);
+        return visitor.visitUnresolvedConstructorInvoke(node, semantics.element,
+            semantics.type, node.send.argumentsNode, selector, arg);
       case ConstructorAccessKind.UNRESOLVED_TYPE:
         return visitor.visitUnresolvedClassConstructorInvoke(
-            node, semantics.element, semantics.type,
-            node.send.argumentsNode, selector, arg);
+            node,
+            semantics.element,
+            semantics.type,
+            node.send.argumentsNode,
+            selector,
+            arg);
       case ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR:
         return visitor.errorNonConstantConstructorInvoke(
-            node, semantics.element, semantics.type,
-            node.send.argumentsNode, callStructure, arg);
+            node,
+            semantics.element,
+            semantics.type,
+            node.send.argumentsNode,
+            callStructure,
+            arg);
       case ConstructorAccessKind.INCOMPATIBLE:
         return visitor.visitConstructorIncompatibleInvoke(
-            node, semantics.element, semantics.type,
-            node.send.argumentsNode, callStructure, arg);
+            node,
+            semantics.element,
+            semantics.type,
+            node.send.argumentsNode,
+            callStructure,
+            arg);
     }
-    throw new SpannableAssertionFailure(node,
-        "Unhandled constructor invocation kind: ${semantics.kind}");
+    throw new SpannableAssertionFailure(
+        node, "Unhandled constructor invocation kind: ${semantics.kind}");
   }
 
   String toString() => 'new($semantics,$selector)';
@@ -2800,13 +2193,16 @@
 /// The structure for a [NewExpression] of a constant invocation. For instance
 /// `const C()`.
 class ConstInvokeStructure<R, A> extends NewStructure<R, A> {
-  final ConstantInvokeKind kind;
+  final ConstantInvokeKind constantInvokeKind;
   final ConstantExpression constant;
 
-  ConstInvokeStructure(this.kind, this.constant);
+  ConstInvokeStructure(this.constantInvokeKind, this.constant);
+
+  @override
+  NewStructureKind get kind => NewStructureKind.CONST_INVOKE;
 
   R dispatch(SemanticSendVisitor<R, A> visitor, NewExpression node, A arg) {
-    switch (kind) {
+    switch (constantInvokeKind) {
       case ConstantInvokeKind.CONSTRUCTED:
         return visitor.visitConstConstructorInvoke(node, constant, arg);
       case ConstantInvokeKind.BOOL_FROM_ENVIRONMENT:
@@ -2831,6 +2227,48 @@
 
   LateConstInvokeStructure(this.elements);
 
+  @override
+  NewStructureKind get kind => NewStructureKind.LATE_CONST;
+
+  /// Convert this new structure into a regular new structure using the data
+  /// available in [elements].
+  NewStructure resolve(NewExpression node) {
+    Element element = elements[node.send];
+    Selector selector = elements.getSelector(node.send);
+    DartType type = elements.getType(node);
+    ConstantExpression constant = elements.getConstant(node);
+    if (element.isMalformed ||
+        constant == null ||
+        constant.kind == ConstantExpressionKind.ERRONEOUS) {
+      // This is a non-constant constant constructor invocation, like
+      // `const Const(method())`.
+      return new NewInvokeStructure(
+          new ConstructorAccessSemantics(
+              ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR, element, type),
+          selector);
+    } else {
+      ConstantInvokeKind kind;
+      switch (constant.kind) {
+        case ConstantExpressionKind.CONSTRUCTED:
+          kind = ConstantInvokeKind.CONSTRUCTED;
+          break;
+        case ConstantExpressionKind.BOOL_FROM_ENVIRONMENT:
+          kind = ConstantInvokeKind.BOOL_FROM_ENVIRONMENT;
+          break;
+        case ConstantExpressionKind.INT_FROM_ENVIRONMENT:
+          kind = ConstantInvokeKind.INT_FROM_ENVIRONMENT;
+          break;
+        case ConstantExpressionKind.STRING_FROM_ENVIRONMENT:
+          kind = ConstantInvokeKind.STRING_FROM_ENVIRONMENT;
+          break;
+        default:
+          throw new SpannableAssertionFailure(
+              node, "Unexpected constant kind $kind: ${constant.getText()}");
+      }
+      return new ConstInvokeStructure(kind, constant);
+    }
+  }
+
   R dispatch(SemanticSendVisitor<R, A> visitor, NewExpression node, A arg) {
     Element element = elements[node.send];
     Selector selector = elements.getSelector(node.send);
@@ -2841,8 +2279,7 @@
         constant.kind == ConstantExpressionKind.ERRONEOUS) {
       // This is a non-constant constant constructor invocation, like
       // `const Const(method())`.
-      return visitor.errorNonConstantConstructorInvoke(
-          node, element, type,
+      return visitor.errorNonConstantConstructorInvoke(node, element, type,
           node.send.argumentsNode, selector.callStructure, arg);
     } else {
       ConstantInvokeKind kind;
@@ -2882,16 +2319,12 @@
 class RequiredParameterStructure<R, A> extends ParameterStructure<R, A> {
   final int index;
 
-  RequiredParameterStructure(
-      VariableDefinitions definitions,
-      Node node,
-      ParameterElement parameter,
-      this.index)
+  RequiredParameterStructure(VariableDefinitions definitions, Node node,
+      ParameterElement parameter, this.index)
       : super(definitions, node, parameter);
 
   @override
-  R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             A arg) {
+  R dispatch(SemanticDeclarationVisitor<R, A> visitor, A arg) {
     if (parameter.isInitializingFormal) {
       return visitor.visitInitializingFormalDeclaration(
           definitions, node, parameter, index, arg);
@@ -2907,17 +2340,12 @@
   final ConstantExpression defaultValue;
   final int index;
 
-  OptionalParameterStructure(
-       VariableDefinitions definitions,
-       Node node,
-       ParameterElement parameter,
-       this.defaultValue,
-       this.index)
-       : super(definitions, node, parameter);
+  OptionalParameterStructure(VariableDefinitions definitions, Node node,
+      ParameterElement parameter, this.defaultValue, this.index)
+      : super(definitions, node, parameter);
 
-   @override
-   R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             A arg) {
+  @override
+  R dispatch(SemanticDeclarationVisitor<R, A> visitor, A arg) {
     if (parameter.isInitializingFormal) {
       return visitor.visitOptionalInitializingFormalDeclaration(
           definitions, node, parameter, defaultValue, index, arg);
@@ -2932,16 +2360,12 @@
 class NamedParameterStructure<R, A> extends ParameterStructure<R, A> {
   final ConstantExpression defaultValue;
 
-  NamedParameterStructure(
-      VariableDefinitions definitions,
-      Node node,
-      ParameterElement parameter,
-      this.defaultValue)
+  NamedParameterStructure(VariableDefinitions definitions, Node node,
+      ParameterElement parameter, this.defaultValue)
       : super(definitions, node, parameter);
 
   @override
-  R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             A arg) {
+  R dispatch(SemanticDeclarationVisitor<R, A> visitor, A arg) {
     if (parameter.isInitializingFormal) {
       return visitor.visitNamedInitializingFormalDeclaration(
           definitions, node, parameter, defaultValue, arg);
@@ -2952,7 +2376,6 @@
   }
 }
 
-
 enum VariableKind {
   TOP_LEVEL_FIELD,
   STATIC_FIELD,
@@ -2968,19 +2391,16 @@
   VariableStructure(this.kind, this.node, this.variable);
 
   R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             VariableDefinitions definitions,
-             A arg);
+      VariableDefinitions definitions, A arg);
 }
 
-class NonConstantVariableStructure<R, A>
-    extends VariableStructure<R, A> {
+class NonConstantVariableStructure<R, A> extends VariableStructure<R, A> {
   NonConstantVariableStructure(
       VariableKind kind, Node node, VariableElement variable)
       : super(kind, node, variable);
 
   R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             VariableDefinitions definitions,
-             A arg) {
+      VariableDefinitions definitions, A arg) {
     switch (kind) {
       case VariableKind.TOP_LEVEL_FIELD:
         return visitor.visitTopLevelFieldDeclaration(
@@ -2998,8 +2418,7 @@
   }
 }
 
-class ConstantVariableStructure<R, A>
-    extends VariableStructure<R, A> {
+class ConstantVariableStructure<R, A> extends VariableStructure<R, A> {
   final ConstantExpression constant;
 
   ConstantVariableStructure(
@@ -3007,8 +2426,7 @@
       : super(kind, node, variable);
 
   R dispatch(SemanticDeclarationVisitor<R, A> visitor,
-             VariableDefinitions definitions,
-             A arg) {
+      VariableDefinitions definitions, A arg) {
     switch (kind) {
       case VariableKind.TOP_LEVEL_FIELD:
         return visitor.visitTopLevelConstantDeclaration(
diff --git a/pkg/compiler/lib/src/resolution/signatures.dart b/pkg/compiler/lib/src/resolution/signatures.dart
index 0fc9aac..7b166d9 100644
--- a/pkg/compiler/lib/src/resolution/signatures.dart
+++ b/pkg/compiler/lib/src/resolution/signatures.dart
@@ -5,33 +5,26 @@
 library dart2js.resolution.signatures;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    ErroneousFieldElementX,
-    ErroneousInitializingFormalElementX,
-    FormalElementX,
-    FunctionElementX,
-    FunctionSignatureX,
-    InitializingFormalElementX,
-    LocalParameterElementX;
+import '../elements/modelx.dart'
+    show
+        ErroneousFieldElementX,
+        ErroneousInitializingFormalElementX,
+        FormalElementX,
+        FunctionElementX,
+        FunctionSignatureX,
+        InitializingFormalElementX,
+        LocalParameterElementX;
 import '../tree/tree.dart';
-import '../universe/use.dart' show
-    TypeUse;
-import '../util/util.dart' show
-    Link,
-    LinkBuilder;
+import '../universe/use.dart' show TypeUse;
+import '../util/util.dart' show Link, LinkBuilder;
 
-import 'members.dart' show
-    ResolverVisitor;
-import 'registry.dart' show
-    ResolutionRegistry;
-import 'resolution_common.dart' show
-    MappingVisitor;
-import 'scope.dart' show
-    Scope;
+import 'members.dart' show ResolverVisitor;
+import 'registry.dart' show ResolutionRegistry;
+import 'resolution_common.dart' show MappingVisitor;
+import 'scope.dart' show Scope;
 
 /**
  * [SignatureResolver] resolves function signatures.
@@ -48,11 +41,9 @@
   bool optionalParametersAreNamed = false;
   VariableDefinitions currentDefinitions;
 
-  SignatureResolver(Compiler compiler,
-                    FunctionTypedElement enclosingElement,
-                    ResolutionRegistry registry,
-                    {this.defaultValuesError,
-                     this.createRealParameters})
+  SignatureResolver(Compiler compiler, FunctionTypedElement enclosingElement,
+      ResolutionRegistry registry,
+      {this.defaultValuesError, this.createRealParameters})
       : this.enclosingElement = enclosingElement,
         this.scope = enclosingElement.buildScope(),
         this.resolver =
@@ -117,11 +108,14 @@
   }
 
   void computeParameterType(FormalElementX element,
-                            [VariableElement fieldElement]) {
+      [VariableElement fieldElement]) {
     void computeFunctionType(FunctionExpression functionExpression) {
       FunctionSignature functionSignature = SignatureResolver.analyze(
-          compiler, functionExpression.parameters,
-          functionExpression.returnType, element, registry,
+          compiler,
+          functionExpression.parameters,
+          functionExpression.returnType,
+          element,
+          registry,
           defaultValuesError: MessageKind.FUNCTION_TYPE_FORMAL_WITH_DEFAULT);
       element.functionSignature = functionSignature;
     }
@@ -137,7 +131,7 @@
         // Inline function typed parameter, like `void m(int f(String s))`.
         computeFunctionType(link.head);
       } else if (link.head.asSend() != null &&
-                 link.head.asSend().selector.asFunctionExpression() != null) {
+          link.head.asSend().selector.asFunctionExpression() != null) {
         // Inline function typed initializing formal or
         // parameter with default value, like `C(int this.f(String s))` or
         // `void m([int f(String s) = null])`.
@@ -170,8 +164,8 @@
           functionExpression.name.asIdentifier() != null) {
         return functionExpression.name.asIdentifier();
       } else {
-        reporter.internalError(node,
-            'internal error: unimplemented receiver on parameter send');
+        reporter.internalError(
+            node, 'internal error: unimplemented receiver on parameter send');
         return null;
       }
     }
@@ -188,18 +182,18 @@
     FormalElementX parameter;
     if (createRealParameters) {
       parameter = new LocalParameterElementX(
-        enclosingElement, currentDefinitions, name, initializer,
-        isOptional: isOptionalParameter, isNamed: optionalParametersAreNamed);
+          enclosingElement, currentDefinitions, name, initializer,
+          isOptional: isOptionalParameter, isNamed: optionalParametersAreNamed);
     } else {
       parameter = new FormalElementX(
-        ElementKind.PARAMETER, enclosingElement, currentDefinitions, name);
+          ElementKind.PARAMETER, enclosingElement, currentDefinitions, name);
     }
     computeParameterType(parameter);
     return parameter;
   }
 
-  InitializingFormalElementX createFieldParameter(Send node,
-                                                  Expression initializer) {
+  InitializingFormalElementX createFieldParameter(
+      Send node, Expression initializer) {
     InitializingFormalElementX element;
     Identifier receiver = node.receiver.asIdentifier();
     if (receiver == null || !receiver.isThis()) {
@@ -221,16 +215,16 @@
           !identical(fieldElement.kind, ElementKind.FIELD)) {
         reporter.reportErrorMessage(
             node, MessageKind.NOT_A_FIELD, {'fieldName': name});
-        fieldElement = new ErroneousFieldElementX(
-            name, enclosingElement.enclosingClass);
+        fieldElement =
+            new ErroneousFieldElementX(name, enclosingElement.enclosingClass);
       } else if (!fieldElement.isInstanceMember) {
         reporter.reportErrorMessage(
             node, MessageKind.NOT_INSTANCE_FIELD, {'fieldName': name});
-        fieldElement = new ErroneousFieldElementX(
-            name, enclosingElement.enclosingClass);
+        fieldElement =
+            new ErroneousFieldElementX(name, enclosingElement.enclosingClass);
       }
-      element = new InitializingFormalElementX(enclosingElement,
-          currentDefinitions, name, initializer, fieldElement,
+      element = new InitializingFormalElementX(
+          enclosingElement, currentDefinitions, name, initializer, fieldElement,
           isOptional: isOptionalParameter, isNamed: optionalParametersAreNamed);
       computeParameterType(element, fieldElement);
     }
@@ -243,7 +237,7 @@
     if (node.receiver != null) {
       element = createFieldParameter(node, node.arguments.first);
     } else if (node.selector.asIdentifier() != null ||
-               node.selector.asFunctionExpression() != null) {
+        node.selector.asFunctionExpression() != null) {
       element = createParameter(getParameterName(node), node.arguments.first);
     }
     Node defaultValue = node.arguments.head;
@@ -258,8 +252,7 @@
     Modifiers modifiers = currentDefinitions.modifiers;
     if (modifiers.isFinal) {
       reporter.reportErrorMessage(
-          modifiers,
-          MessageKind.FINAL_FUNCTION_TYPE_PARAMETER);
+          modifiers, MessageKind.FINAL_FUNCTION_TYPE_PARAMETER);
     }
     if (modifiers.isVar) {
       reporter.reportErrorMessage(
@@ -278,7 +271,7 @@
       } else {
         // If parameter is null, the current node should be the last,
         // and a list of optional named parameters.
-        if (!link.tail.isEmpty || (link.head is !NodeList)) {
+        if (!link.tail.isEmpty || (link.head is! NodeList)) {
           reporter.internalError(link.head, "expected optional parameters");
         }
       }
@@ -301,12 +294,13 @@
       FunctionTypedElement element,
       ResolutionRegistry registry,
       {MessageKind defaultValuesError,
-       bool createRealParameters: false,
-       bool isFunctionExpression: false}) {
+      bool createRealParameters: false,
+      bool isFunctionExpression: false}) {
     DiagnosticReporter reporter = compiler.reporter;
 
-    SignatureResolver visitor = new SignatureResolver(compiler, element,
-        registry, defaultValuesError: defaultValuesError,
+    SignatureResolver visitor = new SignatureResolver(
+        compiler, element, registry,
+        defaultValuesError: defaultValuesError,
         createRealParameters: createRealParameters);
     List<Element> parameters = const <Element>[];
     int requiredParameterCount = 0;
@@ -324,17 +318,17 @@
       }
     } else {
       if (element.isGetter) {
-        if (!identical(formalParameters.endToken.next.stringValue,
-                       // TODO(ahe): Remove the check for native keyword.
-                       'native')) {
+        if (!identical(
+            formalParameters.endToken.next.stringValue,
+            // TODO(ahe): Remove the check for native keyword.
+            'native')) {
           reporter.reportErrorMessage(
-              formalParameters,
-              MessageKind.EXTRA_FORMALS);
+              formalParameters, MessageKind.EXTRA_FORMALS);
         }
       }
       LinkBuilder<Element> parametersBuilder =
-        visitor.analyzeNodes(formalParameters.nodes);
-      requiredParameterCount  = parametersBuilder.length;
+          visitor.analyzeNodes(formalParameters.nodes);
+      requiredParameterCount = parametersBuilder.length;
       parameters = parametersBuilder.toList();
     }
     DartType returnType;
@@ -354,33 +348,32 @@
         asyncMarker = function.asyncMarker;
       }
       switch (asyncMarker) {
-      case AsyncMarker.SYNC:
-        returnType = visitor.resolveReturnType(returnNode);
-        break;
-      case AsyncMarker.SYNC_STAR:
-        returnType = compiler.coreTypes.iterableType();
-        break;
-      case AsyncMarker.ASYNC:
-        returnType = compiler.coreTypes.futureType();
-        break;
-      case AsyncMarker.ASYNC_STAR:
-        returnType = compiler.coreTypes.streamType();
-        break;
+        case AsyncMarker.SYNC:
+          returnType = visitor.resolveReturnType(returnNode);
+          break;
+        case AsyncMarker.SYNC_STAR:
+          returnType = compiler.coreTypes.iterableType();
+          break;
+        case AsyncMarker.ASYNC:
+          returnType = compiler.coreTypes.futureType();
+          break;
+        case AsyncMarker.ASYNC_STAR:
+          returnType = compiler.coreTypes.streamType();
+          break;
       }
     }
 
-    if (element.isSetter && (requiredParameterCount != 1 ||
-                               visitor.optionalParameterCount != 0)) {
+    if (element.isSetter &&
+        (requiredParameterCount != 1 || visitor.optionalParameterCount != 0)) {
       // If there are no formal parameters, we already reported an error above.
       if (formalParameters != null) {
         reporter.reportErrorMessage(
-            formalParameters,
-            MessageKind.ILLEGAL_SETTER_FORMALS);
+            formalParameters, MessageKind.ILLEGAL_SETTER_FORMALS);
       }
     }
     LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>();
     for (FormalElement parameter in parameters) {
-       parameterTypes.addLast(parameter.type);
+      parameterTypes.addLast(parameter.type);
     }
     List<DartType> optionalParameterTypes = const <DartType>[];
     List<String> namedParameters = const <String>[];
@@ -390,7 +383,7 @@
     if (visitor.optionalParametersAreNamed) {
       // TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
       orderedOptionalParameters.sort((Element a, Element b) {
-          return a.name.compareTo(b.name);
+        return a.name.compareTo(b.name);
       });
       LinkBuilder<String> namedParametersBuilder = new LinkBuilder<String>();
       LinkBuilder<DartType> namedParameterTypesBuilder =
@@ -400,8 +393,8 @@
         namedParameterTypesBuilder.addLast(parameter.type);
       }
       namedParameters = namedParametersBuilder.toLink().toList(growable: false);
-      namedParameterTypes = namedParameterTypesBuilder.toLink()
-          .toList(growable: false);
+      namedParameterTypes =
+          namedParameterTypesBuilder.toLink().toList(growable: false);
     } else {
       // TODO(karlklose); replace when [visitor.optinalParameters] is a [List].
       LinkBuilder<DartType> optionalParameterTypesBuilder =
@@ -409,8 +402,8 @@
       for (FormalElement parameter in visitor.optionalParameters) {
         optionalParameterTypesBuilder.addLast(parameter.type);
       }
-      optionalParameterTypes = optionalParameterTypesBuilder.toLink()
-          .toList(growable: false);
+      optionalParameterTypes =
+          optionalParameterTypesBuilder.toLink().toList(growable: false);
     }
     FunctionType type = new FunctionType(
         element.declaration,
diff --git a/pkg/compiler/lib/src/resolution/tree_elements.dart b/pkg/compiler/lib/src/resolution/tree_elements.dart
index 1cd1849..1d1ddce 100644
--- a/pkg/compiler/lib/src/resolution/tree_elements.dart
+++ b/pkg/compiler/lib/src/resolution/tree_elements.dart
@@ -9,16 +9,12 @@
 import '../dart_types.dart';
 import '../diagnostics/source_span.dart';
 import '../elements/elements.dart';
-import '../types/types.dart' show
-    TypeMask;
+import '../types/types.dart' show TypeMask;
 import '../tree/tree.dart';
 import '../util/util.dart';
-import '../universe/selector.dart' show
-    Selector;
+import '../universe/selector.dart' show Selector;
 
-import 'secret_tree_element.dart' show
-    getTreeElement,
-    setTreeElement;
+import 'secret_tree_element.dart' show getTreeElement, setTreeElement;
 import 'send_structure.dart';
 
 abstract class TreeElements {
@@ -27,7 +23,7 @@
 
   void forEachConstantNode(f(Node n, ConstantExpression c));
 
-  Element operator[](Node node);
+  Element operator [](Node node);
   Map<Node, DartType> get typesCache;
 
   /// Returns the [SendStructure] that describes the semantics of [node].
@@ -287,15 +283,15 @@
     return mutations;
   }
 
-  void registerPotentialMutationIn(Node contextNode, VariableElement element,
-                                    Node mutationNode) {
+  void registerPotentialMutationIn(
+      Node contextNode, VariableElement element, Node mutationNode) {
     if (_potentiallyMutatedIn == null) {
       _potentiallyMutatedIn =
           new Maplet<Node, Map<VariableElement, List<Node>>>();
     }
     Map<VariableElement, List<Node>> mutationMap =
-        _potentiallyMutatedIn.putIfAbsent(contextNode,
-          () => new Maplet<VariableElement, List<Node>>());
+        _potentiallyMutatedIn.putIfAbsent(
+            contextNode, () => new Maplet<VariableElement, List<Node>>());
     mutationMap.putIfAbsent(element, () => <Node>[]).add(mutationNode);
   }
 
@@ -306,13 +302,14 @@
     return mutations;
   }
 
-  void registerPotentialMutationInClosure(VariableElement element,
-                                          Node mutationNode) {
+  void registerPotentialMutationInClosure(
+      VariableElement element, Node mutationNode) {
     if (_potentiallyMutatedInClosure == null) {
       _potentiallyMutatedInClosure = new Maplet<VariableElement, List<Node>>();
     }
-    _potentiallyMutatedInClosure.putIfAbsent(
-        element, () => <Node>[]).add(mutationNode);
+    _potentiallyMutatedInClosure
+        .putIfAbsent(element, () => <Node>[])
+        .add(mutationNode);
   }
 
   List<Node> getAccessesByClosureIn(Node node, VariableElement element) {
@@ -324,14 +321,14 @@
     return accesses;
   }
 
-  void setAccessedByClosureIn(Node contextNode, VariableElement element,
-                              Node accessNode) {
+  void setAccessedByClosureIn(
+      Node contextNode, VariableElement element, Node accessNode) {
     if (_accessedByClosureIn == null) {
       _accessedByClosureIn = new Map<Node, Map<VariableElement, List<Node>>>();
     }
     Map<VariableElement, List<Node>> accessMap =
-        _accessedByClosureIn.putIfAbsent(contextNode,
-          () => new Maplet<VariableElement, List<Node>>());
+        _accessedByClosureIn.putIfAbsent(
+            contextNode, () => new Maplet<VariableElement, List<Node>>());
     accessMap.putIfAbsent(element, () => <Node>[]).add(accessNode);
   }
 
diff --git a/pkg/compiler/lib/src/resolution/type_resolver.dart b/pkg/compiler/lib/src/resolution/type_resolver.dart
index 165790d..832279b 100644
--- a/pkg/compiler/lib/src/resolution/type_resolver.dart
+++ b/pkg/compiler/lib/src/resolution/type_resolver.dart
@@ -5,37 +5,28 @@
 library dart2js.resolution.types;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Feature,
-    Resolution;
-import '../compiler.dart' show
-    Compiler;
-import '../dart_backend/dart_backend.dart' show
-    DartBackend;
+import '../common/resolution.dart' show Feature, Resolution;
+import '../compiler.dart' show Compiler;
+import '../dart_backend/dart_backend.dart' show DartBackend;
 import '../dart_types.dart';
-import '../elements/elements.dart' show
-    AmbiguousElement,
-    ClassElement,
-    Element,
-    Elements,
-    ErroneousElement,
-    PrefixElement,
-    TypedefElement,
-    TypeVariableElement;
-import '../elements/modelx.dart' show
-    ErroneousElementX;
+import '../elements/elements.dart'
+    show
+        AmbiguousElement,
+        ClassElement,
+        Element,
+        Elements,
+        ErroneousElement,
+        PrefixElement,
+        TypedefElement,
+        TypeVariableElement;
+import '../elements/modelx.dart' show ErroneousElementX;
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Link;
+import '../util/util.dart' show Link;
 
-import 'members.dart' show
-    lookupInScope;
-import 'registry.dart' show
-    ResolutionRegistry;
-import 'resolution_common.dart' show
-    MappingVisitor;
-import 'scope.dart' show
-    Scope;
+import 'members.dart' show lookupInScope;
+import 'registry.dart' show ResolutionRegistry;
+import 'resolution_common.dart' show MappingVisitor;
+import 'scope.dart' show Scope;
 
 class TypeResolver {
   final Compiler compiler;
@@ -47,10 +38,9 @@
   Resolution get resolution => compiler.resolution;
 
   /// Tries to resolve the type name as an element.
-  Element resolveTypeName(Identifier prefixName,
-                          Identifier typeName,
-                          Scope scope,
-                          {bool deferredIsMalformed: true}) {
+  Element resolveTypeName(
+      Identifier prefixName, Identifier typeName, Scope scope,
+      {bool deferredIsMalformed: true}) {
     Element element;
     if (prefixName != null) {
       Element prefixElement =
@@ -66,9 +56,7 @@
             deferredIsMalformed &&
             compiler.backend is! DartBackend) {
           element = new ErroneousElementX(MessageKind.DEFERRED_TYPE_ANNOTATION,
-                                          {'node': typeName},
-                                          element.name,
-                                          element);
+              {'node': typeName}, element.name, element);
         }
       } else {
         // The caller of this method will create the ErroneousElement for
@@ -82,8 +70,7 @@
   }
 
   DartType resolveTypeAnnotation(MappingVisitor visitor, TypeAnnotation node,
-                                 {bool malformedIsError: false,
-                                  bool deferredIsMalformed: true}) {
+      {bool malformedIsError: false, bool deferredIsMalformed: true}) {
     ResolutionRegistry registry = visitor.registry;
 
     Identifier typeName;
@@ -91,13 +78,14 @@
 
     DartType checkNoTypeArguments(DartType type) {
       List<DartType> arguments = new List<DartType>();
-      bool hasTypeArgumentMismatch = resolveTypeArguments(
-          visitor, node, const <DartType>[], arguments);
+      bool hasTypeArgumentMismatch =
+          resolveTypeArguments(visitor, node, const <DartType>[], arguments);
       if (hasTypeArgumentMismatch) {
         return new MalformedType(
             new ErroneousElementX(MessageKind.TYPE_ARGUMENT_COUNT_MISMATCH,
                 {'type': node}, typeName.source, visitor.enclosingElement),
-                type, arguments);
+            type,
+            arguments);
       }
       return type;
     }
@@ -124,34 +112,30 @@
     }
 
     Element element = resolveTypeName(prefixName, typeName, visitor.scope,
-                                      deferredIsMalformed: deferredIsMalformed);
+        deferredIsMalformed: deferredIsMalformed);
 
     DartType reportFailureAndCreateType(
-        MessageKind messageKind,
-        Map messageArguments,
+        MessageKind messageKind, Map messageArguments,
         {DartType userProvidedBadType,
-         Element erroneousElement,
-         List<DiagnosticMessage> infos: const <DiagnosticMessage>[]}) {
+        Element erroneousElement,
+        List<DiagnosticMessage> infos: const <DiagnosticMessage>[]}) {
       if (malformedIsError) {
         reporter.reportError(
-            reporter.createMessage(node, messageKind, messageArguments),
-            infos);
+            reporter.createMessage(node, messageKind, messageArguments), infos);
       } else {
         registry.registerFeature(Feature.THROW_RUNTIME_ERROR);
         reporter.reportWarning(
-            reporter.createMessage(node, messageKind, messageArguments),
-            infos);
+            reporter.createMessage(node, messageKind, messageArguments), infos);
       }
       if (erroneousElement == null) {
         registry.registerFeature(Feature.THROW_RUNTIME_ERROR);
-        erroneousElement = new ErroneousElementX(
-            messageKind, messageArguments, typeName.source,
-            visitor.enclosingElement);
+        erroneousElement = new ErroneousElementX(messageKind, messageArguments,
+            typeName.source, visitor.enclosingElement);
       }
       List<DartType> arguments = <DartType>[];
       resolveTypeArguments(visitor, node, const <DartType>[], arguments);
-      return new MalformedType(erroneousElement,
-              userProvidedBadType, arguments);
+      return new MalformedType(
+          erroneousElement, userProvidedBadType, arguments);
     }
 
     // Try to construct the type from the element.
@@ -161,8 +145,7 @@
     } else if (element.isAmbiguous) {
       AmbiguousElement ambiguous = element;
       type = reportFailureAndCreateType(
-          ambiguous.messageKind,
-          ambiguous.messageArguments,
+          ambiguous.messageKind, ambiguous.messageArguments,
           infos: ambiguous.computeInfos(
               registry.mapping.analyzedElement, reporter));
       ;
@@ -186,12 +169,13 @@
         compiler.resolver.ensureClassWillBeResolvedInternal(cls);
         cls.computeType(resolution);
         List<DartType> arguments = <DartType>[];
-        bool hasTypeArgumentMismatch = resolveTypeArguments(
-            visitor, node, cls.typeVariables, arguments);
+        bool hasTypeArgumentMismatch =
+            resolveTypeArguments(visitor, node, cls.typeVariables, arguments);
         if (hasTypeArgumentMismatch) {
-          type = new BadInterfaceType(cls.declaration,
-              new InterfaceType.forUserProvidedBadType(cls.declaration,
-                                                       arguments));
+          type = new BadInterfaceType(
+              cls.declaration,
+              new InterfaceType.forUserProvidedBadType(
+                  cls.declaration, arguments));
         } else {
           if (arguments.isEmpty) {
             type = cls.rawType;
@@ -237,13 +221,12 @@
         }
         type = checkNoTypeArguments(type);
       } else {
-        reporter.internalError(node,
-            "Unexpected element kind ${element.kind}.");
+        reporter.internalError(
+            node, "Unexpected element kind ${element.kind}.");
       }
       if (addTypeVariableBoundsCheck) {
         registry.registerFeature(Feature.TYPE_VARIABLE_BOUNDS_CHECK);
-        visitor.addDeferredAction(
-            visitor.enclosingElement,
+        visitor.addDeferredAction(visitor.enclosingElement,
             () => checkTypeVariableBounds(node, type));
       }
     }
@@ -254,18 +237,18 @@
   /// Checks the type arguments of [type] against the type variable bounds.
   void checkTypeVariableBounds(TypeAnnotation node, GenericType type) {
     void checkTypeVariableBound(_, DartType typeArgument,
-                                   TypeVariableType typeVariable,
-                                   DartType bound) {
+        TypeVariableType typeVariable, DartType bound) {
       if (!compiler.types.isSubtype(typeArgument, bound)) {
         reporter.reportWarningMessage(
-            node,
-            MessageKind.INVALID_TYPE_VARIABLE_BOUND,
-            {'typeVariable': typeVariable,
-             'bound': bound,
-             'typeArgument': typeArgument,
-             'thisType': type.element.thisType});
+            node, MessageKind.INVALID_TYPE_VARIABLE_BOUND, {
+          'typeVariable': typeVariable,
+          'bound': bound,
+          'typeArgument': typeArgument,
+          'thisType': type.element.thisType
+        });
       }
-    };
+    }
+    ;
 
     compiler.types.checkTypeVariableBounds(type, checkTypeVariableBound);
   }
@@ -276,10 +259,8 @@
    * Returns [: true :] if the number of type arguments did not match the
    * number of type variables.
    */
-  bool resolveTypeArguments(MappingVisitor visitor,
-                            TypeAnnotation node,
-                            List<DartType> typeVariables,
-                            List<DartType> arguments) {
+  bool resolveTypeArguments(MappingVisitor visitor, TypeAnnotation node,
+      List<DartType> typeVariables, List<DartType> arguments) {
     if (node.typeArguments == null) {
       return false;
     }
@@ -287,8 +268,8 @@
     int index = 0;
     bool typeArgumentCountMismatch = false;
     for (Link<Node> typeArguments = node.typeArguments.nodes;
-         !typeArguments.isEmpty;
-         typeArguments = typeArguments.tail, index++) {
+        !typeArguments.isEmpty;
+        typeArguments = typeArguments.tail, index++) {
       if (index > expectedVariables - 1) {
         reporter.reportWarningMessage(
             typeArguments.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT);
diff --git a/pkg/compiler/lib/src/resolution/typedefs.dart b/pkg/compiler/lib/src/resolution/typedefs.dart
index 87acbd6..ed6f741 100644
--- a/pkg/compiler/lib/src/resolution/typedefs.dart
+++ b/pkg/compiler/lib/src/resolution/typedefs.dart
@@ -5,36 +5,24 @@
 library dart2js.resolution.typedefs;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../dart_types.dart';
-import '../elements/elements.dart' show
-    FunctionSignature,
-    TypedefElement,
-    TypeVariableElement;
-import '../elements/modelx.dart' show
-    ErroneousElementX,
-    TypedefElementX;
+import '../elements/elements.dart'
+    show FunctionSignature, TypedefElement, TypeVariableElement;
+import '../elements/modelx.dart' show ErroneousElementX, TypedefElementX;
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Link;
+import '../util/util.dart' show Link;
 
-import 'class_hierarchy.dart' show
-    TypeDefinitionVisitor;
-import 'registry.dart' show
-    ResolutionRegistry;
-import 'scope.dart' show
-    MethodScope,
-    TypeDeclarationScope;
-import 'signatures.dart' show
-    SignatureResolver;
+import 'class_hierarchy.dart' show TypeDefinitionVisitor;
+import 'registry.dart' show ResolutionRegistry;
+import 'scope.dart' show MethodScope, TypeDeclarationScope;
+import 'signatures.dart' show SignatureResolver;
 
 class TypedefResolverVisitor extends TypeDefinitionVisitor {
   TypedefElementX get element => enclosingElement;
 
-  TypedefResolverVisitor(Compiler compiler,
-                         TypedefElement typedefElement,
-                         ResolutionRegistry registry)
+  TypedefResolverVisitor(Compiler compiler, TypedefElement typedefElement,
+      ResolutionRegistry registry)
       : super(compiler, typedefElement, registry);
 
   visitTypedef(Typedef node) {
@@ -88,33 +76,31 @@
         hasCyclicReference = true;
         if (seenTypedefsCount == 1) {
           // Direct cyclicity.
-          reporter.reportErrorMessage(
-              element,
-              MessageKind.CYCLIC_TYPEDEF,
+          reporter.reportErrorMessage(element, MessageKind.CYCLIC_TYPEDEF,
               {'typedefName': element.name});
         } else if (seenTypedefsCount == 2) {
           // Cyclicity through one other typedef.
-          reporter.reportErrorMessage(
-              element,
-              MessageKind.CYCLIC_TYPEDEF_ONE,
-              {'typedefName': element.name,
-               'otherTypedefName': seenTypedefs.head.name});
+          reporter.reportErrorMessage(element, MessageKind.CYCLIC_TYPEDEF_ONE, {
+            'typedefName': element.name,
+            'otherTypedefName': seenTypedefs.head.name
+          });
         } else {
           // Cyclicity through more than one other typedef.
           for (TypedefElement cycle in seenTypedefs) {
             if (!identical(typedefElement, cycle)) {
               reporter.reportErrorMessage(
-                  element,
-                  MessageKind.CYCLIC_TYPEDEF_ONE,
-                  {'typedefName': element.name,
-                   'otherTypedefName': cycle.name});
+                  element, MessageKind.CYCLIC_TYPEDEF_ONE, {
+                'typedefName': element.name,
+                'otherTypedefName': cycle.name
+              });
             }
           }
         }
         ErroneousElementX erroneousElement = new ErroneousElementX(
-              MessageKind.CYCLIC_TYPEDEF,
-              {'typedefName': element.name},
-              element.name, element);
+            MessageKind.CYCLIC_TYPEDEF,
+            {'typedefName': element.name},
+            element.name,
+            element);
         element.aliasCache =
             new MalformedType(erroneousElement, typedefElement.aliasCache);
         element.hasBeenCheckedForCycles = true;
diff --git a/pkg/compiler/lib/src/resolution/variables.dart b/pkg/compiler/lib/src/resolution/variables.dart
index aec67f3..c5609a8 100644
--- a/pkg/compiler/lib/src/resolution/variables.dart
+++ b/pkg/compiler/lib/src/resolution/variables.dart
@@ -5,37 +5,25 @@
 library dart2js.resolution.variables;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
-import '../elements/modelx.dart' show
-    LocalVariableElementX,
-    VariableList;
+import '../compiler.dart' show Compiler;
+import '../elements/modelx.dart' show LocalVariableElementX, VariableList;
 import '../tree/tree.dart';
-import '../universe/use.dart' show
-    TypeUse;
-import '../util/util.dart' show
-    Link;
+import '../universe/use.dart' show TypeUse;
+import '../util/util.dart' show Link;
 
-import 'members.dart' show
-    ResolverVisitor;
-import 'registry.dart' show
-    ResolutionRegistry;
-import 'resolution_common.dart' show
-    CommonResolverVisitor;
-import 'scope.dart' show
-    VariableDefinitionScope;
+import 'members.dart' show ResolverVisitor;
+import 'registry.dart' show ResolutionRegistry;
+import 'resolution_common.dart' show CommonResolverVisitor;
+import 'scope.dart' show VariableDefinitionScope;
 
 class VariableDefinitionsVisitor extends CommonResolverVisitor<Identifier> {
   VariableDefinitions definitions;
   ResolverVisitor resolver;
   VariableList variables;
 
-  VariableDefinitionsVisitor(Compiler compiler,
-                             this.definitions,
-                             this.resolver,
-                             this.variables)
-      : super(compiler) {
-  }
+  VariableDefinitionsVisitor(
+      Compiler compiler, this.definitions, this.resolver, this.variables)
+      : super(compiler) {}
 
   ResolutionRegistry get registry => resolver.registry;
 
@@ -47,9 +35,8 @@
         new VariableDefinitionScope(resolver.scope, name);
     resolver.visitIn(node.arguments.head, scope);
     if (scope.variableReferencedInInitializer) {
-      reporter.reportErrorMessage(
-          identifier, MessageKind.REFERENCE_IN_INITIALIZATION,
-          {'variableName': name});
+      reporter.reportErrorMessage(identifier,
+          MessageKind.REFERENCE_IN_INITIALIZATION, {'variableName': name});
     }
     return identifier;
   }
@@ -61,17 +48,14 @@
         new TypeUse.instantiation(compiler.coreTypes.nullType));
     if (definitions.modifiers.isConst) {
       if (resolver.inLoopVariable) {
-        reporter.reportErrorMessage(
-            node, MessageKind.CONST_LOOP_VARIABLE);
+        reporter.reportErrorMessage(node, MessageKind.CONST_LOOP_VARIABLE);
       } else {
         reporter.reportErrorMessage(
             node, MessageKind.CONST_WITHOUT_INITIALIZER);
       }
     }
-    if (definitions.modifiers.isFinal &&
-        !resolver.inLoopVariable) {
-      reporter.reportErrorMessage(
-          node, MessageKind.FINAL_WITHOUT_INITIALIZER);
+    if (definitions.modifiers.isFinal && !resolver.inLoopVariable) {
+      reporter.reportErrorMessage(node, MessageKind.FINAL_WITHOUT_INITIALIZER);
     }
     return node;
   }
@@ -80,8 +64,7 @@
     for (Link<Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       Identifier name = visit(link.head);
       LocalVariableElementX element = new LocalVariableElementX(
-          name.source, resolver.enclosingElement,
-          variables, name.token);
+          name.source, resolver.enclosingElement, variables, name.token);
       resolver.defineLocalVariable(link.head, element);
       resolver.addToScope(element);
       if (definitions.modifiers.isConst) {
diff --git a/pkg/compiler/lib/src/scanner/array_based_scanner.dart b/pkg/compiler/lib/src/scanner/array_based_scanner.dart
index 49461fb..27540a4 100644
--- a/pkg/compiler/lib/src/scanner/array_based_scanner.dart
+++ b/pkg/compiler/lib/src/scanner/array_based_scanner.dart
@@ -4,33 +4,19 @@
 
 library dart2js.scanner.array_based;
 
-import '../io/source_file.dart' show
-    SourceFile;
-import '../tokens/keyword.dart' show
-    Keyword;
-import '../tokens/precedence.dart' show
-    PrecedenceInfo;
-import '../tokens/precedence_constants.dart' as Precedence show
-    COMMENT_INFO,
-    EOF_INFO;
-import '../tokens/token.dart' show
-    BeginGroupToken,
-    ErrorToken,
-    KeywordToken,
-    SymbolToken,
-    Token;
-import '../tokens/token_constants.dart' as Tokens show
-    LT_TOKEN,
-    OPEN_CURLY_BRACKET_TOKEN,
-    STRING_INTERPOLATION_TOKEN;
-import '../util/characters.dart' show
-    $LF,
-    $STX;
-import '../util/util.dart' show
-    Link;
+import '../io/source_file.dart' show SourceFile;
+import '../tokens/keyword.dart' show Keyword;
+import '../tokens/precedence.dart' show PrecedenceInfo;
+import '../tokens/precedence_constants.dart' as Precedence
+    show COMMENT_INFO, EOF_INFO;
+import '../tokens/token.dart'
+    show BeginGroupToken, ErrorToken, KeywordToken, SymbolToken, Token;
+import '../tokens/token_constants.dart' as Tokens
+    show LT_TOKEN, OPEN_CURLY_BRACKET_TOKEN, STRING_INTERPOLATION_TOKEN;
+import '../util/characters.dart' show $LF, $STX;
+import '../util/util.dart' show Link;
 
-import 'scanner.dart' show
-    AbstractScanner;
+import 'scanner.dart' show AbstractScanner;
 
 abstract class ArrayBasedScanner extends AbstractScanner {
   ArrayBasedScanner(SourceFile file, bool includeComments)
@@ -153,7 +139,7 @@
     BeginGroupToken begin = groupingStack.head;
     if (!identical(begin.kind, openKind)) {
       assert(begin.kind == Tokens.STRING_INTERPOLATION_TOKEN &&
-             openKind == Tokens.OPEN_CURLY_BRACKET_TOKEN);
+          openKind == Tokens.OPEN_CURLY_BRACKET_TOKEN);
       // We're ending an interpolated expression.
       begin.endGroup = close;
       groupingStack = groupingStack.tail;
@@ -240,8 +226,8 @@
    * list, like the '=' in the above example.
    */
   void discardOpenLt() {
-    while (!groupingStack.isEmpty
-        && identical(groupingStack.head.kind, Tokens.LT_TOKEN)) {
+    while (!groupingStack.isEmpty &&
+        identical(groupingStack.head.kind, Tokens.LT_TOKEN)) {
       groupingStack = groupingStack.tail;
     }
   }
diff --git a/pkg/compiler/lib/src/scanner/scanner.dart b/pkg/compiler/lib/src/scanner/scanner.dart
index 1a52a64..30d5caf 100644
--- a/pkg/compiler/lib/src/scanner/scanner.dart
+++ b/pkg/compiler/lib/src/scanner/scanner.dart
@@ -4,29 +4,21 @@
 
 library dart2js.scanner;
 
-import '../io/source_file.dart' show
-    SourceFile,
-    Utf8BytesSourceFile;
-import '../tokens/keyword.dart' show
-    Keyword,
-    KeywordState;
+import '../io/source_file.dart' show SourceFile, Utf8BytesSourceFile;
+import '../tokens/keyword.dart' show Keyword, KeywordState;
 import '../tokens/precedence.dart';
 import '../tokens/precedence_constants.dart';
 import '../tokens/token.dart';
 import '../tokens/token_constants.dart';
 import '../util/characters.dart';
 
-import 'string_scanner.dart' show
-    StringScanner;
-import 'utf8_bytes_scanner.dart' show
-    Utf8BytesScanner;
-
+import 'string_scanner.dart' show StringScanner;
+import 'utf8_bytes_scanner.dart' show Utf8BytesScanner;
 
 abstract class Scanner {
   Token tokenize();
 
-  factory Scanner(SourceFile file,
-      {bool includeComments: false}) {
+  factory Scanner(SourceFile file, {bool includeComments: false}) {
     if (file is Utf8BytesSourceFile) {
       return new Utf8BytesScanner(file, includeComments: includeComments);
     } else {
@@ -72,8 +64,7 @@
 
   final List<int> lineStarts = <int>[0];
 
-  AbstractScanner(
-      this.file, this.includeComments) {
+  AbstractScanner(this.file, this.includeComments) {
     this.tail = this.tokens;
   }
 
@@ -166,8 +157,8 @@
    * Note that [extraOffset] can only be used if the covered character(s) are
    * known to be ASCII.
    */
-  void appendSubstringToken(PrecedenceInfo info, int start,
-                            bool asciiOnly, [int extraOffset]);
+  void appendSubstringToken(PrecedenceInfo info, int start, bool asciiOnly,
+      [int extraOffset]);
 
   /** Documentation in subclass [ArrayBasedScanner]. */
   void appendPrecedenceToken(PrecedenceInfo info);
@@ -236,8 +227,10 @@
 
   int bigSwitch(int next) {
     beginToken();
-    if (identical(next, $SPACE) || identical(next, $TAB)
-        || identical(next, $LF) || identical(next, $CR)) {
+    if (identical(next, $SPACE) ||
+        identical(next, $TAB) ||
+        identical(next, $LF) ||
+        identical(next, $CR)) {
       appendWhiteSpace(next);
       next = advance();
       // Sequences of spaces are common, so advance through them fast.
@@ -354,8 +347,8 @@
     }
 
     if (identical(next, $CLOSE_SQUARE_BRACKET)) {
-      return appendEndGroup(CLOSE_SQUARE_BRACKET_INFO,
-                            OPEN_SQUARE_BRACKET_TOKEN);
+      return appendEndGroup(
+          CLOSE_SQUARE_BRACKET_INFO, OPEN_SQUARE_BRACKET_TOKEN);
     }
 
     if (identical(next, $BACKPING)) {
@@ -369,8 +362,7 @@
     }
 
     if (identical(next, $CLOSE_CURLY_BRACKET)) {
-      return appendEndGroup(CLOSE_CURLY_BRACKET_INFO,
-                            OPEN_CURLY_BRACKET_TOKEN);
+      return appendEndGroup(CLOSE_CURLY_BRACKET_INFO, OPEN_CURLY_BRACKET_TOKEN);
     }
 
     if (identical(next, $SLASH)) {
@@ -394,9 +386,15 @@
     }
 
     // TODO(ahe): Would a range check be faster?
-    if (identical(next, $1) || identical(next, $2) || identical(next, $3)
-        || identical(next, $4) ||  identical(next, $5) || identical(next, $6)
-        || identical(next, $7) || identical(next, $8) || identical(next, $9)) {
+    if (identical(next, $1) ||
+        identical(next, $2) ||
+        identical(next, $3) ||
+        identical(next, $4) ||
+        identical(next, $5) ||
+        identical(next, $6) ||
+        identical(next, $7) ||
+        identical(next, $8) ||
+        identical(next, $9)) {
       return tokenizeNumber(next);
     }
 
@@ -429,8 +427,8 @@
           next = advance();
           if (next > 127) asciiOnly = false;
         } while (!identical(next, $LF) &&
-                 !identical(next, $CR) &&
-                 !identical(next, $EOF));
+            !identical(next, $CR) &&
+            !identical(next, $EOF));
         if (!asciiOnly) handleUnicode(start);
         return next;
       }
@@ -655,9 +653,9 @@
     bool hasDigits = false;
     while (true) {
       next = advance();
-      if (($0 <= next && next <= $9)
-          || ($A <= next && next <= $F)
-          || ($a <= next && next <= $f)) {
+      if (($0 <= next && next <= $9) ||
+          ($A <= next && next <= $F) ||
+          ($a <= next && next <= $f)) {
         hasDigits = true;
       } else {
         if (!hasDigits) {
@@ -766,7 +764,6 @@
     return null;
   }
 
-
   int tokenizeMultiLineComment(int next, int start) {
     bool asciiOnlyComment = true; // Track if the entire comment is ASCII.
     bool asciiOnlyLines = true; // Track ASCII since the last handleUnicode.
@@ -924,8 +921,8 @@
         asciiOnly = true;
         continue;
       }
-      if (next <= $CR
-          && (identical(next, $LF) ||
+      if (next <= $CR &&
+          (identical(next, $LF) ||
               identical(next, $CR) ||
               identical(next, $EOF))) {
         if (!asciiOnly) handleUnicode(start);
@@ -960,7 +957,7 @@
       next = bigSwitch(next);
     }
     if (identical(next, $EOF)) return next;
-    next = advance();  // Move past the $STX.
+    next = advance(); // Move past the $STX.
     beginToken(); // The string interpolation suffix starts here.
     return next;
   }
diff --git a/pkg/compiler/lib/src/scanner/scanner_task.dart b/pkg/compiler/lib/src/scanner/scanner_task.dart
index 98be820..3d694a3 100644
--- a/pkg/compiler/lib/src/scanner/scanner_task.dart
+++ b/pkg/compiler/lib/src/scanner/scanner_task.dart
@@ -4,25 +4,34 @@
 
 library dart2js.scanner.task;
 
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
-import '../elements/elements.dart' show
-    CompilationUnitElement,
-    LibraryElement;
-import '../script.dart' show
-    Script;
-import '../tokens/token.dart' show
-    Token;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
+import '../elements/elements.dart' show CompilationUnitElement, LibraryElement;
+import '../script.dart' show Script;
+import '../parser/diet_parser_task.dart' show DietParserTask;
+import '../tokens/token.dart' show Token;
+import '../tokens/token_constants.dart' as Tokens show COMMENT_TOKEN, EOF_TOKEN;
+import '../tokens/token_map.dart' show TokenMap;
 
-import 'scanner.dart' show
-    Scanner;
-import 'string_scanner.dart' show
-    StringScanner;
+import 'scanner.dart' show Scanner;
+import 'string_scanner.dart' show StringScanner;
 
 class ScannerTask extends CompilerTask {
-  ScannerTask(Compiler compiler) : super(compiler);
+  final DietParserTask _dietParser;
+  final bool _preserveComments;
+  final TokenMap _commentMap;
+
+  ScannerTask(Compiler compiler, this._dietParser,
+      {bool preserveComments: false, TokenMap commentMap})
+      : _preserveComments = preserveComments,
+        _commentMap = commentMap,
+        super(compiler) {
+    if (_preserveComments && _commentMap == null) {
+      throw new ArgumentError(
+          "commentMap must be provided if preserveComments is true");
+    }
+  }
+
   String get name => 'Scanner';
 
   void scanLibrary(LibraryElement library) {
@@ -45,12 +54,12 @@
 
   void scanElements(CompilationUnitElement compilationUnit) {
     Script script = compilationUnit.script;
-    Token tokens = new Scanner(script.file,
-        includeComments: compiler.options.preserveComments).tokenize();
-    if (compiler.options.preserveComments) {
-      tokens = compiler.processAndStripComments(tokens);
+    Token tokens =
+        new Scanner(script.file, includeComments: _preserveComments).tokenize();
+    if (_preserveComments) {
+      tokens = processAndStripComments(tokens);
     }
-    compiler.dietParser.dietParse(compilationUnit, tokens);
+    _dietParser.dietParse(compilationUnit, tokens);
   }
 
   /**
@@ -66,4 +75,26 @@
           .tokenize();
     });
   }
+
+  Token processAndStripComments(Token currentToken) {
+    Token firstToken = currentToken;
+    Token prevToken;
+    while (currentToken.kind != Tokens.EOF_TOKEN) {
+      if (identical(currentToken.kind, Tokens.COMMENT_TOKEN)) {
+        Token firstCommentToken = currentToken;
+        while (identical(currentToken.kind, Tokens.COMMENT_TOKEN)) {
+          currentToken = currentToken.next;
+        }
+        _commentMap[currentToken] = firstCommentToken;
+        if (prevToken == null) {
+          firstToken = currentToken;
+        } else {
+          prevToken.next = currentToken;
+        }
+      }
+      prevToken = currentToken;
+      currentToken = currentToken.next;
+    }
+    return firstToken;
+  }
 }
diff --git a/pkg/compiler/lib/src/scanner/string_scanner.dart b/pkg/compiler/lib/src/scanner/string_scanner.dart
index 21bc2bb..5c6604e 100644
--- a/pkg/compiler/lib/src/scanner/string_scanner.dart
+++ b/pkg/compiler/lib/src/scanner/string_scanner.dart
@@ -4,17 +4,11 @@
 
 library dart2js.scanner.string;
 
-import '../io/source_file.dart' show
-    SourceFile;
-import '../tokens/precedence.dart' show
-    PrecedenceInfo;
-import '../tokens/token.dart' show
-    StringToken,
-    Token;
+import '../io/source_file.dart' show SourceFile;
+import '../tokens/precedence.dart' show PrecedenceInfo;
+import '../tokens/token.dart' show StringToken, Token;
 
-import 'array_based_scanner.dart' show
-    ArrayBasedScanner;
-
+import 'array_based_scanner.dart' show ArrayBasedScanner;
 
 /**
  * Scanner that reads from a String and creates tokens that points to
@@ -52,15 +46,16 @@
 
   int currentAsUnicode(int next) => next;
 
-  void handleUnicode(int startScanOffset) { }
+  void handleUnicode(int startScanOffset) {}
 
   Token firstToken() => tokens.next;
   Token previousToken() => tail;
 
-  void appendSubstringToken(PrecedenceInfo info, int start,
-                            bool asciiOnly, [int extraOffset = 0]) {
-    tail.next = new StringToken.fromSubstring(info, string, start,
-        scanOffset + extraOffset, tokenStart, canonicalize: true);
+  void appendSubstringToken(PrecedenceInfo info, int start, bool asciiOnly,
+      [int extraOffset = 0]) {
+    tail.next = new StringToken.fromSubstring(
+        info, string, start, scanOffset + extraOffset, tokenStart,
+        canonicalize: true);
     tail = tail.next;
   }
 
diff --git a/pkg/compiler/lib/src/scanner/utf8_bytes_scanner.dart b/pkg/compiler/lib/src/scanner/utf8_bytes_scanner.dart
index 4c42bf7..c4b87ed 100644
--- a/pkg/compiler/lib/src/scanner/utf8_bytes_scanner.dart
+++ b/pkg/compiler/lib/src/scanner/utf8_bytes_scanner.dart
@@ -4,20 +4,13 @@
 
 library dart2js.scanner.utf8;
 
-import 'dart:convert' show
-    UNICODE_BOM_CHARACTER_RUNE,
-    UTF8;
+import 'dart:convert' show UNICODE_BOM_CHARACTER_RUNE, UTF8;
 
-import '../io/source_file.dart' show
-    SourceFile;
-import '../tokens/precedence.dart' show
-    PrecedenceInfo;
-import '../tokens/token.dart' show
-    StringToken,
-    Token;
+import '../io/source_file.dart' show SourceFile;
+import '../tokens/precedence.dart' show PrecedenceInfo;
+import '../tokens/token.dart' show StringToken, Token;
 
-import 'array_based_scanner.dart' show
-    ArrayBasedScanner;
+import 'array_based_scanner.dart' show ArrayBasedScanner;
 
 /**
  * Scanner that reads from a UTF-8 encoded list of bytes and creates tokens
@@ -100,7 +93,7 @@
    * scanning.
    */
   Utf8BytesScanner.fromBytes(List<int> zeroTerminatedBytes,
-                             {bool includeComments: false})
+      {bool includeComments: false})
       : this.bytes = zeroTerminatedBytes,
         super(null, includeComments) {
     assert(bytes.last == 0);
@@ -212,7 +205,7 @@
   Token previousToken() => tail;
 
   void appendSubstringToken(PrecedenceInfo info, int start, bool asciiOnly,
-                            [int extraOffset = 0]) {
+      [int extraOffset = 0]) {
     tail.next = new StringToken.fromUtf8Bytes(
         info, bytes, start, byteOffset + extraOffset, asciiOnly, tokenStart);
     tail = tail.next;
diff --git a/pkg/compiler/lib/src/script.dart b/pkg/compiler/lib/src/script.dart
index f8278ab..403776b 100644
--- a/pkg/compiler/lib/src/script.dart
+++ b/pkg/compiler/lib/src/script.dart
@@ -16,7 +16,6 @@
    */
   final Uri readableUri;
 
-
   /**
    * The resource URI from which this script was loaded.
    *
@@ -27,14 +26,13 @@
   /// This script was synthesized.
   final bool isSynthesized;
 
-  Script(this.readableUri, this.resourceUri, this.file)
-      : isSynthesized = false;
+  Script(this.readableUri, this.resourceUri, this.file) : isSynthesized = false;
 
   Script.synthetic(Uri uri)
       : readableUri = uri,
         resourceUri = uri,
-        file = new StringSourceFile.fromUri(uri,
-            "// Synthetic source file generated for '$uri'."),
+        file = new StringSourceFile.fromUri(
+            uri, "// Synthetic source file generated for '$uri'."),
         isSynthesized = true;
 
   String get text => (file == null) ? null : file.slowText();
diff --git a/pkg/compiler/lib/src/serialization/constant_serialization.dart b/pkg/compiler/lib/src/serialization/constant_serialization.dart
index 3af1b4f..fae8818 100644
--- a/pkg/compiler/lib/src/serialization/constant_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/constant_serialization.dart
@@ -7,11 +7,9 @@
 import '../constants/constructors.dart';
 import '../constants/expressions.dart';
 import '../dart_types.dart';
-import '../elements/elements.dart' show
-    FieldElement;
+import '../elements/elements.dart' show FieldElement;
 import '../resolution/operators.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
+import '../universe/call_structure.dart' show CallStructure;
 import 'serialization.dart';
 import 'keys.dart';
 
@@ -27,30 +25,29 @@
   const ConstantSerializer();
 
   @override
-  void visitBinary(BinaryConstantExpression exp,
-                   ObjectEncoder encoder) {
+  void visitBinary(BinaryConstantExpression exp, ObjectEncoder encoder) {
     encoder.setEnum(Key.OPERATOR, exp.operator.kind);
     encoder.setConstant(Key.LEFT, exp.left);
     encoder.setConstant(Key.RIGHT, exp.right);
   }
 
   @override
-  void visitConcatenate(ConcatenateConstantExpression exp,
-                        ObjectEncoder encoder) {
+  void visitConcatenate(
+      ConcatenateConstantExpression exp, ObjectEncoder encoder) {
     encoder.setConstants(Key.ARGUMENTS, exp.expressions);
   }
 
   @override
-  void visitConditional(ConditionalConstantExpression exp,
-                        ObjectEncoder encoder) {
+  void visitConditional(
+      ConditionalConstantExpression exp, ObjectEncoder encoder) {
     encoder.setConstant(Key.CONDITION, exp.condition);
     encoder.setConstant(Key.TRUE, exp.trueExp);
     encoder.setConstant(Key.FALSE, exp.falseExp);
   }
 
   @override
-  void visitConstructed(ConstructedConstantExpression exp,
-                        ObjectEncoder encoder) {
+  void visitConstructed(
+      ConstructedConstantExpression exp, ObjectEncoder encoder) {
     encoder.setElement(Key.ELEMENT, exp.target);
     encoder.setType(Key.TYPE, exp.type);
     encoder.setStrings(Key.NAMES, exp.callStructure.namedArguments);
@@ -58,14 +55,12 @@
   }
 
   @override
-  void visitFunction(FunctionConstantExpression exp,
-                     ObjectEncoder encoder) {
+  void visitFunction(FunctionConstantExpression exp, ObjectEncoder encoder) {
     encoder.setElement(Key.ELEMENT, exp.element);
   }
 
   @override
-  void visitIdentical(IdenticalConstantExpression exp,
-                      ObjectEncoder encoder) {
+  void visitIdentical(IdenticalConstantExpression exp, ObjectEncoder encoder) {
     encoder.setConstant(Key.LEFT, exp.left);
     encoder.setConstant(Key.RIGHT, exp.right);
   }
@@ -109,34 +104,28 @@
   }
 
   @override
-  void visitSymbol(SymbolConstantExpression exp,
-                   ObjectEncoder encoder) {
-    throw new UnsupportedError(
-        "ConstantSerializer.visitSymbol: ${exp.getText()}");
+  void visitSymbol(SymbolConstantExpression exp, ObjectEncoder encoder) {
+    encoder.setString(Key.NAME, exp.name);
   }
 
   @override
-  void visitType(TypeConstantExpression exp,
-                 ObjectEncoder encoder) {
+  void visitType(TypeConstantExpression exp, ObjectEncoder encoder) {
     encoder.setType(Key.TYPE, exp.type);
   }
 
   @override
-  void visitUnary(UnaryConstantExpression exp,
-                  ObjectEncoder encoder) {
+  void visitUnary(UnaryConstantExpression exp, ObjectEncoder encoder) {
     encoder.setEnum(Key.OPERATOR, exp.operator.kind);
     encoder.setConstant(Key.EXPRESSION, exp.expression);
   }
 
   @override
-  void visitVariable(VariableConstantExpression exp,
-                     ObjectEncoder encoder) {
+  void visitVariable(VariableConstantExpression exp, ObjectEncoder encoder) {
     encoder.setElement(Key.ELEMENT, exp.element);
   }
 
   @override
-  void visitPositional(PositionalArgumentReference exp,
-                       ObjectEncoder encoder) {
+  void visitPositional(PositionalArgumentReference exp, ObjectEncoder encoder) {
     encoder.setInt(Key.INDEX, exp.index);
   }
 
@@ -146,8 +135,8 @@
   }
 
   @override
-  void visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp,
-                                ObjectEncoder encoder) {
+  void visitBoolFromEnvironment(
+      BoolFromEnvironmentConstantExpression exp, ObjectEncoder encoder) {
     encoder.setConstant(Key.NAME, exp.name);
     if (exp.defaultValue != null) {
       encoder.setConstant(Key.DEFAULT, exp.defaultValue);
@@ -155,8 +144,8 @@
   }
 
   @override
-  void visitIntFromEnvironment(IntFromEnvironmentConstantExpression exp,
-                               ObjectEncoder encoder) {
+  void visitIntFromEnvironment(
+      IntFromEnvironmentConstantExpression exp, ObjectEncoder encoder) {
     encoder.setConstant(Key.NAME, exp.name);
     if (exp.defaultValue != null) {
       encoder.setConstant(Key.DEFAULT, exp.defaultValue);
@@ -164,8 +153,8 @@
   }
 
   @override
-  void visitStringFromEnvironment(StringFromEnvironmentConstantExpression exp,
-                                  ObjectEncoder encoder) {
+  void visitStringFromEnvironment(
+      StringFromEnvironmentConstantExpression exp, ObjectEncoder encoder) {
     encoder.setConstant(Key.NAME, exp.name);
     if (exp.defaultValue != null) {
       encoder.setConstant(Key.DEFAULT, exp.defaultValue);
@@ -173,15 +162,13 @@
   }
 
   @override
-  void visitStringLength(StringLengthConstantExpression exp,
-                         ObjectEncoder encoder) {
+  void visitStringLength(
+      StringLengthConstantExpression exp, ObjectEncoder encoder) {
     encoder.setConstant(Key.EXPRESSION, exp.expression);
   }
 
-
   @override
-  void visitDeferred(DeferredConstantExpression exp,
-                     ObjectEncoder encoder) {
+  void visitDeferred(DeferredConstantExpression exp, ObjectEncoder encoder) {
     throw new UnsupportedError(
         "ConstantSerializer.visitDeferred: ${exp.getText()}");
   }
@@ -191,7 +178,6 @@
 ///
 /// This is used by the [Deserializer].
 class ConstantDeserializer {
-
   /// Deserializes a [ConstantExpression] from an [ObjectDecoder].
   ///
   /// The class is called from the [Deserializer] when a [ConstantExpression]
@@ -203,15 +189,12 @@
         decoder.getEnum(Key.KIND, ConstantExpressionKind.values);
     switch (kind) {
       case ConstantExpressionKind.BINARY:
-        BinaryOperator operator = BinaryOperator.fromKind(decoder.getEnum(
-            Key.OPERATOR, BinaryOperatorKind.values));
-        return new BinaryConstantExpression(
-            decoder.getConstant(Key.LEFT),
-            operator,
-            decoder.getConstant(Key.RIGHT));
+        BinaryOperator operator = BinaryOperator
+            .fromKind(decoder.getEnum(Key.OPERATOR, BinaryOperatorKind.values));
+        return new BinaryConstantExpression(decoder.getConstant(Key.LEFT),
+            operator, decoder.getConstant(Key.RIGHT));
       case ConstantExpressionKind.BOOL:
-        return new BoolConstantExpression(
-            decoder.getBool(Key.VALUE));
+        return new BoolConstantExpression(decoder.getBool(Key.VALUE));
       case ConstantExpressionKind.BOOL_FROM_ENVIRONMENT:
         return new BoolFromEnvironmentConstantExpression(
             decoder.getConstant(Key.NAME),
@@ -225,10 +208,9 @@
             decoder.getConstant(Key.TRUE),
             decoder.getConstant(Key.FALSE));
       case ConstantExpressionKind.CONSTRUCTED:
-        List<String> names =
-            decoder.getStrings(Key.NAMES, isOptional: true);
+        List<String> names = decoder.getStrings(Key.NAMES, isOptional: true);
         List<ConstantExpression> arguments =
-              decoder.getConstants(Key.ARGUMENTS, isOptional: true);
+            decoder.getConstants(Key.ARGUMENTS, isOptional: true);
         return new ConstructedConstantExpression(
             decoder.getType(Key.TYPE),
             decoder.getElement(Key.ELEMENT),
@@ -239,12 +221,10 @@
       case ConstantExpressionKind.ERRONEOUS:
         break;
       case ConstantExpressionKind.FUNCTION:
-        return new FunctionConstantExpression(
-            decoder.getElement(Key.ELEMENT));
+        return new FunctionConstantExpression(decoder.getElement(Key.ELEMENT));
       case ConstantExpressionKind.IDENTICAL:
         return new IdenticalConstantExpression(
-            decoder.getConstant(Key.LEFT),
-            decoder.getConstant(Key.RIGHT));
+            decoder.getConstant(Key.LEFT), decoder.getConstant(Key.RIGHT));
       case ConstantExpressionKind.INT:
         return new IntConstantExpression(decoder.getInt(Key.VALUE));
       case ConstantExpressionKind.INT_FROM_ENVIRONMENT:
@@ -253,18 +233,14 @@
             decoder.getConstant(Key.DEFAULT, isOptional: true));
       case ConstantExpressionKind.LIST:
         return new ListConstantExpression(
-            decoder.getType(Key.TYPE),
-            decoder.getConstants(Key.VALUES));
+            decoder.getType(Key.TYPE), decoder.getConstants(Key.VALUES));
       case ConstantExpressionKind.MAP:
-        return new MapConstantExpression(
-            decoder.getType(Key.TYPE),
-            decoder.getConstants(Key.KEYS),
-            decoder.getConstants(Key.VALUES));
+        return new MapConstantExpression(decoder.getType(Key.TYPE),
+            decoder.getConstants(Key.KEYS), decoder.getConstants(Key.VALUES));
       case ConstantExpressionKind.NULL:
         return new NullConstantExpression();
       case ConstantExpressionKind.STRING:
-        return new StringConstantExpression(
-            decoder.getString(Key.VALUE));
+        return new StringConstantExpression(decoder.getString(Key.VALUE));
       case ConstantExpressionKind.STRING_FROM_ENVIRONMENT:
         return new StringFromEnvironmentConstantExpression(
             decoder.getConstant(Key.NAME),
@@ -277,26 +253,21 @@
       case ConstantExpressionKind.TYPE:
         return new TypeConstantExpression(decoder.getType(Key.TYPE));
       case ConstantExpressionKind.UNARY:
-        UnaryOperator operator = UnaryOperator.fromKind(
-            decoder.getEnum(Key.OPERATOR, UnaryOperatorKind.values));
+        UnaryOperator operator = UnaryOperator
+            .fromKind(decoder.getEnum(Key.OPERATOR, UnaryOperatorKind.values));
         return new UnaryConstantExpression(
-            operator,
-            decoder.getConstant(Key.EXPRESSION));
+            operator, decoder.getConstant(Key.EXPRESSION));
       case ConstantExpressionKind.VARIABLE:
-        return new VariableConstantExpression(
-            decoder.getElement(Key.ELEMENT));
+        return new VariableConstantExpression(decoder.getElement(Key.ELEMENT));
 
       case ConstantExpressionKind.POSITIONAL_REFERENCE:
-        return new PositionalArgumentReference(
-            decoder.getInt(Key.INDEX));
+        return new PositionalArgumentReference(decoder.getInt(Key.INDEX));
       case ConstantExpressionKind.NAMED_REFERENCE:
-        return new NamedArgumentReference(
-            decoder.getString(Key.NAME));
+        return new NamedArgumentReference(decoder.getString(Key.NAME));
       case ConstantExpressionKind.DEFERRED:
       case ConstantExpressionKind.SYNTHETIC:
     }
-    throw new UnsupportedError(
-        "Unexpected constant kind: ${kind} in $decoder");
+    throw new UnsupportedError("Unexpected constant kind: ${kind} in $decoder");
   }
 }
 
@@ -312,16 +283,14 @@
   const ConstantConstructorSerializer();
 
   @override
-  void visit(ConstantConstructor constantConstructor,
-             ObjectEncoder encoder) {
+  void visit(ConstantConstructor constantConstructor, ObjectEncoder encoder) {
     encoder.setEnum(Key.KIND, constantConstructor.kind);
     constantConstructor.accept(this, encoder);
   }
 
   @override
   void visitGenerative(
-      GenerativeConstantConstructor constructor,
-      ObjectEncoder encoder) {
+      GenerativeConstantConstructor constructor, ObjectEncoder encoder) {
     encoder.setType(Key.TYPE, constructor.type);
     MapEncoder defaults = encoder.createMap(Key.DEFAULTS);
     constructor.defaultValues.forEach((key, e) {
@@ -334,8 +303,8 @@
       fieldSerializer.setConstant(Key.CONSTANT, e);
     });
     if (constructor.superConstructorInvocation != null) {
-      encoder.setConstant(Key.CONSTRUCTOR,
-          constructor.superConstructorInvocation);
+      encoder.setConstant(
+          Key.CONSTRUCTOR, constructor.superConstructorInvocation);
     }
   }
 
@@ -343,8 +312,8 @@
   void visitRedirectingFactory(
       RedirectingFactoryConstantConstructor constructor,
       ObjectEncoder encoder) {
-    encoder.setConstant(Key.CONSTRUCTOR,
-        constructor.targetConstructorInvocation);
+    encoder.setConstant(
+        Key.CONSTRUCTOR, constructor.targetConstructorInvocation);
   }
 
   @override
@@ -355,10 +324,10 @@
     constructor.defaultValues.forEach((key, ConstantExpression e) {
       defaults.setConstant('$key', e);
     });
-    encoder.setConstant(Key.CONSTRUCTOR,
-        constructor.thisConstructorInvocation);
+    encoder.setConstant(Key.CONSTRUCTOR, constructor.thisConstructorInvocation);
   }
 }
+
 /// Utility class for deserializing [ConstantConstructor]s.
 ///
 /// This is used by the [ConstructorElementZ].
@@ -370,7 +339,6 @@
   /// [DartType], and [ConstantExpression] that the deserialized
   /// [ConstantConstructor] depends upon are available.
   static ConstantConstructor deserialize(ObjectDecoder decoder) {
-
     ConstantConstructorKind kind =
         decoder.getEnum(Key.KIND, ConstantConstructorKind.values);
 
@@ -378,7 +346,7 @@
       return decoder.getType(Key.TYPE);
     }
 
-    Map<dynamic/*int|String*/, ConstantExpression> readDefaults() {
+    Map<dynamic /*int|String*/, ConstantExpression> readDefaults() {
       Map<dynamic, ConstantExpression> defaultValues =
           <dynamic, ConstantExpression>{};
       if (decoder.containsKey(Key.DEFAULTS)) {
@@ -416,15 +384,11 @@
 
     switch (kind) {
       case ConstantConstructorKind.GENERATIVE:
-        return new GenerativeConstantConstructor(
-            readType(),
-            readDefaults(),
-            readFields(),
-            readConstructorInvocation());
+        return new GenerativeConstantConstructor(readType(), readDefaults(),
+            readFields(), readConstructorInvocation());
       case ConstantConstructorKind.REDIRECTING_GENERATIVE:
         return new RedirectingGenerativeConstantConstructor(
-            readDefaults(),
-            readConstructorInvocation());
+            readDefaults(), readConstructorInvocation());
       case ConstantConstructorKind.REDIRECTING_FACTORY:
         return new RedirectingFactoryConstantConstructor(
             readConstructorInvocation());
diff --git a/pkg/compiler/lib/src/serialization/element_serialization.dart b/pkg/compiler/lib/src/serialization/element_serialization.dart
index 86c3337..78228ca 100644
--- a/pkg/compiler/lib/src/serialization/element_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/element_serialization.dart
@@ -26,6 +26,7 @@
   TOPLEVEL_FIELD,
   STATIC_FIELD,
   INSTANCE_FIELD,
+  ENUM_CONSTANT,
   TOPLEVEL_FUNCTION,
   TOPLEVEL_GETTER,
   TOPLEVEL_SETTER,
@@ -43,6 +44,7 @@
   IMPORT,
   EXPORT,
   PREFIX,
+  LOCAL_VARIABLE,
   EXTERNAL_LIBRARY,
   EXTERNAL_LIBRARY_MEMBER,
   EXTERNAL_STATIC_MEMBER,
@@ -57,18 +59,19 @@
 /// and [ConstantExpression] that the serialized [Element] depends upon are also
 /// serialized.
 const List<ElementSerializer> ELEMENT_SERIALIZERS = const [
-    const LibrarySerializer(),
-    const CompilationUnitSerializer(),
-    const ClassSerializer(),
-    const ConstructorSerializer(),
-    const FieldSerializer(),
-    const FunctionSerializer(),
-    const TypedefSerializer(),
-    const TypeVariableSerializer(),
-    const ParameterSerializer(),
-    const ImportSerializer(),
-    const ExportSerializer(),
-    const PrefixSerializer(),
+  const LibrarySerializer(),
+  const CompilationUnitSerializer(),
+  const ClassSerializer(),
+  const ConstructorSerializer(),
+  const FieldSerializer(),
+  const FunctionSerializer(),
+  const TypedefSerializer(),
+  const TypeVariableSerializer(),
+  const ParameterSerializer(),
+  const ImportSerializer(),
+  const ExportSerializer(),
+  const PrefixSerializer(),
+  const LocalVariableSerializer(),
 ];
 
 /// Interface for a function that can serialize a set of element kinds.
@@ -79,15 +82,14 @@
 
   /// Serializes [element] into the [encoder] using the [kind] computed
   /// by [getSerializedKind].
-  void serialize(Element element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind);
+  void serialize(
+      Element element, ObjectEncoder encoder, SerializedElementKind kind);
 }
 
 class SerializerUtil {
   /// Serialize the declared members of [element] into [encoder].
-  static void serializeMembers(Iterable<Element> members,
-                               ObjectEncoder encoder) {
+  static void serializeMembers(
+      Iterable<Element> members, ObjectEncoder encoder) {
     MapEncoder mapEncoder = encoder.createMap(Key.MEMBERS);
     for (Element member in members) {
       String name = member.name;
@@ -115,8 +117,8 @@
   }
 
   /// Serialize the parameters of [element] into [encoder].
-  static void serializeParameters(FunctionElement element,
-                                  ObjectEncoder encoder) {
+  static void serializeParameters(
+      FunctionElement element, ObjectEncoder encoder) {
     FunctionType type = element.type;
     encoder.setType(Key.RETURN_TYPE, type.returnType);
     encoder.setElements(Key.PARAMETERS, element.parameters);
@@ -186,27 +188,24 @@
     return imports;
   }
 
-  static List<Element> getImportedElements(
-      LibraryElement element) {
+  static List<Element> getImportedElements(LibraryElement element) {
     Set<Element> importedElements = new Set<Element>();
     element.forEachImport(SerializerUtil.flattenElements(importedElements));
     if (element.isPatched) {
-      element.implementation.forEachImport(
-          SerializerUtil.flattenElements(importedElements));
+      element.implementation
+          .forEachImport(SerializerUtil.flattenElements(importedElements));
     }
     return importedElements.toList();
   }
 
-  static List<Element> getExportedElements(
-      LibraryElement element) {
+  static List<Element> getExportedElements(LibraryElement element) {
     Set<Element> exportedElements = new Set<Element>();
     element.forEachExport(SerializerUtil.flattenElements(exportedElements));
     return exportedElements.toList();
   }
 
-  void serialize(LibraryElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(LibraryElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setUri(
         Key.CANONICAL_URI, element.canonicalUri, element.canonicalUri);
     encoder.setString(Key.LIBRARY_NAME, element.libraryName);
@@ -219,7 +218,6 @@
     encoder.setElements(Key.IMPORT_SCOPE, getImportedElements(element));
 
     encoder.setElements(Key.EXPORT_SCOPE, getExportedElements(element));
-
   }
 }
 
@@ -233,9 +231,8 @@
     return null;
   }
 
-  void serialize(CompilationUnitElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(CompilationUnitElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setElement(Key.LIBRARY, element.library);
     encoder.setUri(
         Key.URI, element.library.canonicalUri, element.script.resourceUri);
@@ -281,9 +278,8 @@
     return members;
   }
 
-  void serialize(ClassElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(
+      ClassElement element, ObjectEncoder encoder, SerializedElementKind kind) {
     encoder.setElement(Key.LIBRARY, element.library);
     encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
     encoder.setString(Key.NAME, element.name);
@@ -335,9 +331,8 @@
     return null;
   }
 
-  void serialize(ConstructorElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(ConstructorElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setElement(Key.CLASS, element.enclosingClass);
     encoder.setType(Key.TYPE, element.type);
     encoder.setString(Key.NAME, element.name);
@@ -348,10 +343,9 @@
     if (element.isExternal) return;
     if (element.isConst && !element.isFromEnvironmentConstructor) {
       ConstantConstructor constantConstructor = element.constantConstructor;
-      ObjectEncoder constantEncoder =
-          encoder.createObject(Key.CONSTRUCTOR);
-      const ConstantConstructorSerializer().visit(
-          constantConstructor, constantEncoder);
+      ObjectEncoder constantEncoder = encoder.createObject(Key.CONSTRUCTOR);
+      const ConstantConstructorSerializer()
+          .visit(constantConstructor, constantEncoder);
     }
   }
 }
@@ -362,15 +356,19 @@
   SerializedElementKind getSerializedKind(Element element) {
     if (element.isField) {
       if (element.isTopLevel) return SerializedElementKind.TOPLEVEL_FIELD;
-      if (element.isStatic) return SerializedElementKind.STATIC_FIELD;
+      if (element.isStatic) {
+        if (element is EnumConstantElement) {
+          return SerializedElementKind.ENUM_CONSTANT;
+        }
+        return SerializedElementKind.STATIC_FIELD;
+      }
       if (element.isInstanceMember) return SerializedElementKind.INSTANCE_FIELD;
     }
     return null;
   }
 
-  void serialize(FieldElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(
+      FieldElement element, ObjectEncoder encoder, SerializedElementKind kind) {
     encoder.setString(Key.NAME, element.name);
     SerializerUtil.serializePosition(element, encoder);
     encoder.setType(Key.TYPE, element.type);
@@ -386,6 +384,10 @@
       encoder.setElement(Key.LIBRARY, element.library);
       encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
     }
+    if (element is EnumConstantElement) {
+      EnumConstantElement enumConstant = element;
+      encoder.setInt(Key.INDEX, enumConstant.index);
+    }
   }
 }
 
@@ -420,9 +422,8 @@
     return null;
   }
 
-  void serialize(FunctionElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(FunctionElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setString(Key.NAME, element.name);
     SerializerUtil.serializePosition(element, encoder);
     SerializerUtil.serializeParameters(element, encoder);
@@ -455,9 +456,8 @@
     return null;
   }
 
-  void serialize(TypedefElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(TypedefElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setString(Key.NAME, element.name);
     SerializerUtil.serializePosition(element, encoder);
     encoder.setType(Key.ALIAS, element.alias);
@@ -477,9 +477,8 @@
     return null;
   }
 
-  void serialize(TypeVariableElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(TypeVariableElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setElement(Key.TYPE_DECLARATION, element.typeDeclaration);
     encoder.setString(Key.NAME, element.name);
     SerializerUtil.serializePosition(element, encoder);
@@ -501,9 +500,8 @@
     return null;
   }
 
-  void serialize(ParameterElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(ParameterElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setElement(Key.FUNCTION, element.functionDeclaration);
     encoder.setString(Key.NAME, element.name);
     SerializerUtil.serializePosition(element, encoder);
@@ -520,6 +518,31 @@
   }
 }
 
+class LocalVariableSerializer implements ElementSerializer {
+  const LocalVariableSerializer();
+
+  SerializedElementKind getSerializedKind(Element element) {
+    if (element.isVariable) {
+      return SerializedElementKind.LOCAL_VARIABLE;
+    }
+    return null;
+  }
+
+  void serialize(LocalVariableElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
+    encoder.setString(Key.NAME, element.name);
+    SerializerUtil.serializePosition(element, encoder);
+    encoder.setType(Key.TYPE, element.type);
+    encoder.setBool(Key.IS_FINAL, element.isFinal);
+    encoder.setBool(Key.IS_CONST, element.isConst);
+    if (element.isConst) {
+      ConstantExpression constant = element.constant;
+      encoder.setConstant(Key.CONSTANT, constant);
+    }
+    encoder.setElement(Key.EXECUTABLE_CONTEXT, element.executableContext);
+  }
+}
+
 class ImportSerializer implements ElementSerializer {
   const ImportSerializer();
 
@@ -530,9 +553,8 @@
     return null;
   }
 
-  void serialize(ImportElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(ImportElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setElement(Key.LIBRARY, element.library);
     encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
     encoder.setElement(Key.LIBRARY_DEPENDENCY, element.importedLibrary);
@@ -555,9 +577,8 @@
     return null;
   }
 
-  void serialize(ExportElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(ExportElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setElement(Key.LIBRARY, element.library);
     encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
     encoder.setElement(Key.LIBRARY_DEPENDENCY, element.exportedLibrary);
@@ -576,9 +597,8 @@
     return null;
   }
 
-  void serialize(PrefixElement element,
-                 ObjectEncoder encoder,
-                 SerializedElementKind kind) {
+  void serialize(PrefixElement element, ObjectEncoder encoder,
+      SerializedElementKind kind) {
     encoder.setString(Key.NAME, element.name);
     encoder.setElement(Key.LIBRARY, element.library);
     encoder.setElement(Key.COMPILATION_UNIT, element.compilationUnit);
@@ -593,7 +613,6 @@
 ///
 /// This is used by the [Deserializer].
 class ElementDeserializer {
-
   /// Deserializes an [Element] from an [ObjectDecoder].
   ///
   /// The class is called from the [Deserializer] when an [Element]
@@ -601,8 +620,7 @@
   /// [DartType], and [ConstantExpression] that the deserialized [Element]
   /// depends upon are available.
   static Element deserialize(
-      ObjectDecoder decoder,
-      SerializedElementKind elementKind) {
+      ObjectDecoder decoder, SerializedElementKind elementKind) {
     switch (elementKind) {
       case SerializedElementKind.LIBRARY:
         return new LibraryElementZ(decoder);
@@ -618,6 +636,8 @@
         return new TopLevelFieldElementZ(decoder);
       case SerializedElementKind.STATIC_FIELD:
         return new StaticFieldElementZ(decoder);
+      case SerializedElementKind.ENUM_CONSTANT:
+        return new EnumConstantElementZ(decoder);
       case SerializedElementKind.INSTANCE_FIELD:
         return new InstanceFieldElementZ(decoder);
       case SerializedElementKind.GENERATIVE_CONSTRUCTOR:
@@ -658,6 +678,8 @@
         return new ExportElementZ(decoder);
       case SerializedElementKind.PREFIX:
         return new PrefixElementZ(decoder);
+      case SerializedElementKind.LOCAL_VARIABLE:
+        return new LocalVariableElementZ(decoder);
       case SerializedElementKind.EXTERNAL_LIBRARY:
       case SerializedElementKind.EXTERNAL_LIBRARY_MEMBER:
       case SerializedElementKind.EXTERNAL_STATIC_MEMBER:
@@ -666,4 +688,4 @@
     }
     throw new UnsupportedError("Unexpected element kind '${elementKind}.");
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/serialization/equivalence.dart b/pkg/compiler/lib/src/serialization/equivalence.dart
index 5bc9d23..d68ce3e 100644
--- a/pkg/compiler/lib/src/serialization/equivalence.dart
+++ b/pkg/compiler/lib/src/serialization/equivalence.dart
@@ -11,19 +11,23 @@
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../elements/visitor.dart';
+import '../resolution/access_semantics.dart';
+import '../resolution/send_structure.dart';
+import '../resolution/tree_elements.dart';
+import '../tokens/token.dart';
+import '../tree/nodes.dart';
 import '../universe/selector.dart';
 import '../universe/use.dart';
+import '../util/util.dart';
+import 'resolved_ast_serialization.dart';
 
 /// Equality based equivalence function.
 bool equality(a, b) => a == b;
 
 /// Returns `true` if the elements in [a] and [b] are pair-wise equivalent
 /// according to [elementEquivalence].
-bool areListsEquivalent(
-    List a,
-    List b,
+bool areListsEquivalent(List a, List b,
     [bool elementEquivalence(a, b) = equality]) {
-
   if (a.length != b.length) return false;
   for (int i = 0; i < a.length && i < b.length; i++) {
     if (!elementEquivalence(a[i], b[i])) {
@@ -35,9 +39,7 @@
 
 /// Returns `true` if the elements in [a] and [b] are equivalent as sets using
 /// [elementEquivalence] to determine element equivalence.
-bool areSetsEquivalent(
-    Iterable set1,
-    Iterable set2,
+bool areSetsEquivalent(Iterable set1, Iterable set2,
     [bool elementEquivalence(a, b) = equality]) {
   Set remaining = set2.toSet();
   for (var element1 in set1) {
@@ -88,23 +90,25 @@
 }
 
 /// Returns `true` if the lists of constants, [a] and [b], are equivalent.
-bool areConstantListsEquivalent(List<ConstantExpression> a,
-                                List<ConstantExpression> b) {
+bool areConstantListsEquivalent(
+    List<ConstantExpression> a, List<ConstantExpression> b) {
   return areListsEquivalent(a, b, areConstantsEquivalent);
 }
 
 /// Returns `true` if the selectors [a] and [b] are equivalent.
 bool areSelectorsEquivalent(Selector a, Selector b) {
+  if (identical(a, b)) return true;
+  if (a == null || b == null) return false;
   return a.kind == b.kind &&
-         a.callStructure == b.callStructure &&
-         areNamesEquivalent(a.memberName, b.memberName);
+      a.callStructure == b.callStructure &&
+      areNamesEquivalent(a.memberName, b.memberName);
 }
 
 /// Returns `true` if the names [a] and [b] are equivalent.
 bool areNamesEquivalent(Name a, Name b) {
   return a.text == b.text &&
-         a.isSetter == b.isSetter &&
-         areElementsEquivalent(a.library, b.library);
+      a.isSetter == b.isSetter &&
+      areElementsEquivalent(a.library, b.library);
 }
 
 /// Returns `true` if the dynamic uses [a] and [b] are equivalent.
@@ -114,28 +118,158 @@
 
 /// Returns `true` if the static uses [a] and [b] are equivalent.
 bool areStaticUsesEquivalent(StaticUse a, StaticUse b) {
-  return a.kind == b.kind &&
-         areElementsEquivalent(a.element, b.element);
+  return a.kind == b.kind && areElementsEquivalent(a.element, b.element);
 }
 
 /// Returns `true` if the type uses [a] and [b] are equivalent.
 bool areTypeUsesEquivalent(TypeUse a, TypeUse b) {
-  return a.kind == b.kind &&
-         areTypesEquivalent(a.type, b.type);
+  return a.kind == b.kind && areTypesEquivalent(a.type, b.type);
 }
 
 /// Returns `true` if the list literal uses [a] and [b] are equivalent.
 bool areListLiteralUsesEquivalent(ListLiteralUse a, ListLiteralUse b) {
   return areTypesEquivalent(a.type, b.type) &&
-         a.isConstant == b.isConstant &&
-         a.isEmpty == b.isEmpty;
+      a.isConstant == b.isConstant &&
+      a.isEmpty == b.isEmpty;
 }
 
 /// Returns `true` if the map literal uses [a] and [b] are equivalent.
 bool areMapLiteralUsesEquivalent(MapLiteralUse a, MapLiteralUse b) {
   return areTypesEquivalent(a.type, b.type) &&
-         a.isConstant == b.isConstant &&
-         a.isEmpty == b.isEmpty;
+      a.isConstant == b.isConstant &&
+      a.isEmpty == b.isEmpty;
+}
+
+/// Returns `true` if the access semantics [a] and [b] are equivalent.
+bool areAccessSemanticsEquivalent(AccessSemantics a, AccessSemantics b) {
+  if (a.kind != b.kind) return false;
+  switch (a.kind) {
+    case AccessKind.EXPRESSION:
+    case AccessKind.THIS:
+      // No additional properties.
+      return true;
+    case AccessKind.THIS_PROPERTY:
+    case AccessKind.DYNAMIC_PROPERTY:
+    case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
+      return areNamesEquivalent(a.name, b.name);
+    case AccessKind.CLASS_TYPE_LITERAL:
+    case AccessKind.TYPEDEF_TYPE_LITERAL:
+    case AccessKind.DYNAMIC_TYPE_LITERAL:
+      return areConstantsEquivalent(a.constant, b.constant);
+    case AccessKind.LOCAL_FUNCTION:
+    case AccessKind.LOCAL_VARIABLE:
+    case AccessKind.FINAL_LOCAL_VARIABLE:
+    case AccessKind.PARAMETER:
+    case AccessKind.FINAL_PARAMETER:
+    case AccessKind.STATIC_FIELD:
+    case AccessKind.FINAL_STATIC_FIELD:
+    case AccessKind.STATIC_METHOD:
+    case AccessKind.STATIC_GETTER:
+    case AccessKind.STATIC_SETTER:
+    case AccessKind.TOPLEVEL_FIELD:
+    case AccessKind.FINAL_TOPLEVEL_FIELD:
+    case AccessKind.TOPLEVEL_METHOD:
+    case AccessKind.TOPLEVEL_GETTER:
+    case AccessKind.TOPLEVEL_SETTER:
+    case AccessKind.SUPER_FIELD:
+    case AccessKind.SUPER_FINAL_FIELD:
+    case AccessKind.SUPER_METHOD:
+    case AccessKind.SUPER_GETTER:
+    case AccessKind.SUPER_SETTER:
+    case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
+    case AccessKind.UNRESOLVED:
+    case AccessKind.UNRESOLVED_SUPER:
+    case AccessKind.INVALID:
+      return areElementsEquivalent(a.element, b.element);
+    case AccessKind.COMPOUND:
+      CompoundAccessSemantics compoundAccess1 = a;
+      CompoundAccessSemantics compoundAccess2 = b;
+      return compoundAccess1.compoundAccessKind ==
+              compoundAccess2.compoundAccessKind &&
+          areElementsEquivalent(
+              compoundAccess1.getter, compoundAccess2.getter) &&
+          areElementsEquivalent(compoundAccess1.setter, compoundAccess2.setter);
+    case AccessKind.CONSTANT:
+      throw new UnsupportedError('Unsupported access kind: ${a.kind}');
+  }
+}
+
+/// Returns `true` if the send structures [a] and [b] are equivalent.
+bool areSendStructuresEquivalent(SendStructure a, SendStructure b) {
+  if (identical(a, b)) return true;
+  if (a == null || b == null) return false;
+  if (a.kind != b.kind) return false;
+
+  var ad = a;
+  var bd = b;
+  switch (a.kind) {
+    case SendStructureKind.IF_NULL:
+    case SendStructureKind.LOGICAL_AND:
+    case SendStructureKind.LOGICAL_OR:
+    case SendStructureKind.NOT:
+    case SendStructureKind.INVALID_UNARY:
+    case SendStructureKind.INVALID_BINARY:
+      // No additional properties.
+      return true;
+
+    case SendStructureKind.IS:
+    case SendStructureKind.IS_NOT:
+    case SendStructureKind.AS:
+      return areTypesEquivalent(ad.type, bd.type);
+
+    case SendStructureKind.INVOKE:
+    case SendStructureKind.INCOMPATIBLE_INVOKE:
+      if (!areSelectorsEquivalent(ad.selector, bd.selector)) return false;
+      continue semantics;
+
+    case SendStructureKind.UNARY:
+    case SendStructureKind.BINARY:
+    case SendStructureKind.PREFIX:
+    case SendStructureKind.POSTFIX:
+    case SendStructureKind.INDEX_PREFIX:
+    case SendStructureKind.INDEX_POSTFIX:
+    case SendStructureKind.COMPOUND:
+    case SendStructureKind.COMPOUND_INDEX_SET:
+      if (ad.operator != bd.operator) return false;
+      continue semantics;
+
+    case SendStructureKind.DEFERRED_PREFIX:
+      return areElementsEquivalent(ad.prefix, bd.prefix) &&
+          areSendStructuresEquivalent(ad.sendStructure, bd.sendStructure);
+
+    semantics: case SendStructureKind.GET:
+    case SendStructureKind.SET:
+    case SendStructureKind.INDEX:
+    case SendStructureKind.INDEX_SET:
+    case SendStructureKind.EQUALS:
+    case SendStructureKind.NOT_EQUALS:
+    case SendStructureKind.SET_IF_NULL:
+    case SendStructureKind.INDEX_SET_IF_NULL:
+      return areAccessSemanticsEquivalent(ad.semantics, bd.semantics);
+  }
+  throw new UnsupportedError('Unexpected send structures $a vs $b');
+}
+
+/// Returns `true` if the new structures [a] and [b] are equivalent.
+bool areNewStructuresEquivalent(NewStructure a, NewStructure b) {
+  if (identical(a, b)) return true;
+  if (a == null || b == null) return false;
+  if (a.kind != b.kind) return false;
+
+  var ad = a;
+  var bd = b;
+  switch (a.kind) {
+    case NewStructureKind.NEW_INVOKE:
+      return ad.semantics.kind == bd.semantics.kind &&
+          areElementsEquivalent(ad.semantics.element, bd.semantics.element) &&
+          areTypesEquivalent(ad.semantics.type, bd.semantics.type) &&
+          areSelectorsEquivalent(ad.selector, bd.selector);
+    case NewStructureKind.CONST_INVOKE:
+      return ad.constantInvokeKind == bd.constantInvokeKind &&
+          areConstantsEquivalent(ad.constant, bd.constant);
+    case NewStructureKind.LATE_CONST:
+      throw new UnsupportedError('Unsupported NewStructure kind ${a.kind}.');
+  }
 }
 
 /// Strategy for testing equivalence.
@@ -144,55 +278,47 @@
 class TestStrategy {
   const TestStrategy();
 
-  bool test(var object1, var object2, String property, var value1, var value2) {
-    return value1 == value2;
+  bool test(var object1, var object2, String property, var value1, var value2,
+      [bool equivalence(a, b) = equality]) {
+    return equivalence(value1, value2);
   }
 
   bool testLists(
-      Object object1, Object object2, String property,
-      List list1, List list2,
+      Object object1, Object object2, String property, List list1, List list2,
       [bool elementEquivalence(a, b) = equality]) {
     return areListsEquivalent(list1, list2, elementEquivalence);
   }
 
   bool testSets(
-      var object1, var object2, String property,
-      Iterable set1, Iterable set2,
+      var object1, var object2, String property, Iterable set1, Iterable set2,
       [bool elementEquivalence(a, b) = equality]) {
     return areSetsEquivalent(set1, set2, elementEquivalence);
   }
 
-  bool testElements(
-      Object object1, Object object2, String property,
+  bool testElements(Object object1, Object object2, String property,
       Element element1, Element element2) {
     return areElementsEquivalent(element1, element2);
   }
 
-  bool testTypes(
-      Object object1, Object object2, String property,
+  bool testTypes(Object object1, Object object2, String property,
       DartType type1, DartType type2) {
     return areTypesEquivalent(type1, type2);
   }
 
-  bool testConstants(
-      Object object1, Object object2, String property,
+  bool testConstants(Object object1, Object object2, String property,
       ConstantExpression exp1, ConstantExpression exp2) {
     return areConstantsEquivalent(exp1, exp2);
   }
 
-  bool testTypeLists(
-      Object object1, Object object2, String property,
+  bool testTypeLists(Object object1, Object object2, String property,
       List<DartType> list1, List<DartType> list2) {
     return areTypeListsEquivalent(list1, list2);
   }
 
-  bool testConstantLists(
-      Object object1, Object object2, String property,
-      List<ConstantExpression> list1,
-      List<ConstantExpression> list2) {
+  bool testConstantLists(Object object1, Object object2, String property,
+      List<ConstantExpression> list1, List<ConstantExpression> list2) {
     return areConstantListsEquivalent(list1, list2);
   }
-
 }
 
 /// Visitor that checks for equivalence of [Element]s.
@@ -212,10 +338,8 @@
     if (element1 == element2) {
       return true;
     }
-    return
-        strategy.test(
-            element1, element2, 'kind',
-            element1.kind, element2.kind) &&
+    return strategy.test(
+            element1, element2, 'kind', element1.kind, element2.kind) &&
         element1.accept(this, element2);
   }
 
@@ -226,34 +350,28 @@
 
   @override
   bool visitLibraryElement(LibraryElement element1, LibraryElement element2) {
-    return
-        strategy.test(element1, element2,
-            'canonicalUri',
-            element1.canonicalUri, element2.canonicalUri);
+    return strategy.test(element1, element2, 'canonicalUri',
+        element1.canonicalUri, element2.canonicalUri);
   }
 
   @override
-  bool visitCompilationUnitElement(CompilationUnitElement element1,
-                                   CompilationUnitElement element2) {
-    return
-        strategy.test(element1, element2,
-            'name',
-            element1.name, element2.name) &&
+  bool visitCompilationUnitElement(
+      CompilationUnitElement element1, CompilationUnitElement element2) {
+    return strategy.test(
+            element1, element2, 'name', element1.name, element2.name) &&
         visit(element1.library, element2.library);
   }
 
   @override
   bool visitClassElement(ClassElement element1, ClassElement element2) {
-    return
-        strategy.test(element1, element2,
-            'name',
-            element1.name, element2.name) &&
+    return strategy.test(
+            element1, element2, 'name', element1.name, element2.name) &&
         visit(element1.library, element2.library);
   }
 
   bool checkMembers(Element element1, Element element2) {
-    if (!strategy.test(element1, element2, 'name',
-                       element1.name, element2.name)) {
+    if (!strategy.test(
+        element1, element2, 'name', element1.name, element2.name)) {
       return false;
     }
     if (element1.enclosingClass != null || element2.enclosingClass != null) {
@@ -269,95 +387,88 @@
   }
 
   @override
-  bool visitConstructorElement(ConstructorElement element1,
-                               ConstructorElement element2) {
+  bool visitConstructorElement(
+      ConstructorElement element1, ConstructorElement element2) {
     return checkMembers(element1, element2);
   }
 
   @override
-  bool visitMethodElement(MethodElement element1,
-                          MethodElement element2) {
+  bool visitMethodElement(MethodElement element1, MethodElement element2) {
     return checkMembers(element1, element2);
   }
 
   @override
-  bool visitGetterElement(GetterElement element1,
-                          GetterElement element2) {
+  bool visitGetterElement(GetterElement element1, GetterElement element2) {
     return checkMembers(element1, element2);
   }
 
   @override
-  bool visitSetterElement(SetterElement element1,
-                          SetterElement element2) {
+  bool visitSetterElement(SetterElement element1, SetterElement element2) {
     return checkMembers(element1, element2);
   }
 
   @override
-  bool visitLocalFunctionElement(LocalFunctionElement element1,
-                                 LocalFunctionElement element2) {
+  bool visitLocalFunctionElement(
+      LocalFunctionElement element1, LocalFunctionElement element2) {
     // TODO(johnniwinther): Define an equivalence on locals.
     return checkMembers(element1.memberContext, element2.memberContext);
   }
 
-  bool visitAbstractFieldElement(AbstractFieldElement element1,
-                                 AbstractFieldElement element2) {
+  @override
+  bool visitLocalVariableElement(
+      LocalVariableElement element1, LocalVariableElement element2) {
+    // TODO(johnniwinther): Define an equivalence on locals.
+    return checkMembers(element1.memberContext, element2.memberContext);
+  }
+
+  bool visitAbstractFieldElement(
+      AbstractFieldElement element1, AbstractFieldElement element2) {
     return checkMembers(element1, element2);
   }
 
   @override
-  bool visitTypeVariableElement(TypeVariableElement element1,
-                                TypeVariableElement element2) {
-    return
-        strategy.test(
-            element1, element2, 'name',
-            element1.name, element2.name) &&
+  bool visitTypeVariableElement(
+      TypeVariableElement element1, TypeVariableElement element2) {
+    return strategy.test(
+            element1, element2, 'name', element1.name, element2.name) &&
         visit(element1.typeDeclaration, element2.typeDeclaration);
   }
 
   @override
   bool visitTypedefElement(TypedefElement element1, TypedefElement element2) {
-    return
-        strategy.test(
-            element1, element2, 'name',
-            element1.name, element2.name) &&
+    return strategy.test(
+            element1, element2, 'name', element1.name, element2.name) &&
         visit(element1.library, element2.library);
   }
 
   @override
-  bool visitParameterElement(ParameterElement element1,
-                             ParameterElement element2) {
-    return
-        strategy.test(
-            element1, element2, 'name',
-            element1.name, element2.name) &&
+  bool visitParameterElement(
+      ParameterElement element1, ParameterElement element2) {
+    return strategy.test(
+            element1, element2, 'name', element1.name, element2.name) &&
         visit(element1.functionDeclaration, element2.functionDeclaration);
   }
 
   @override
   bool visitImportElement(ImportElement element1, ImportElement element2) {
-    return
-        visit(element1.importedLibrary, element2.importedLibrary) &&
+    return visit(element1.importedLibrary, element2.importedLibrary) &&
         visit(element1.library, element2.library);
   }
 
   @override
   bool visitExportElement(ExportElement element1, ExportElement element2) {
-    return
-        visit(element1.exportedLibrary, element2.exportedLibrary) &&
+    return visit(element1.exportedLibrary, element2.exportedLibrary) &&
         visit(element1.library, element2.library);
   }
 
   @override
   bool visitPrefixElement(PrefixElement element1, PrefixElement element2) {
-    return
-        strategy.test(
-            element1, element2, 'name',
-            element1.name, element2.name) &&
+    return strategy.test(
+            element1, element2, 'name', element1.name, element2.name) &&
         visit(element1.library, element2.library);
   }
 }
 
-
 /// Visitor that checks for equivalence of [DartType]s.
 class TypeEquivalence implements DartTypeVisitor<bool, DartType> {
   final TestStrategy strategy;
@@ -365,8 +476,7 @@
   const TypeEquivalence([this.strategy = const TestStrategy()]);
 
   bool visit(DartType type1, DartType type2) {
-    return
-        strategy.test(type1, type2, 'kind', type1.kind, type2.kind) &&
+    return strategy.test(type1, type2, 'kind', type1.kind, type2.kind) &&
         type1.accept(this, type2);
   }
 
@@ -375,29 +485,21 @@
 
   @override
   bool visitFunctionType(FunctionType type, FunctionType other) {
-    return
-        strategy.testTypeLists(
-            type, other, 'parameterTypes',
+    return strategy.testTypeLists(type, other, 'parameterTypes',
             type.parameterTypes, other.parameterTypes) &&
-        strategy.testTypeLists(
-            type, other, 'optionalParameterTypes',
+        strategy.testTypeLists(type, other, 'optionalParameterTypes',
             type.optionalParameterTypes, other.optionalParameterTypes) &&
-        strategy.testTypeLists(
-            type, other, 'namedParameterTypes',
+        strategy.testTypeLists(type, other, 'namedParameterTypes',
             type.namedParameterTypes, other.namedParameterTypes) &&
-        strategy.testLists(
-            type, other, 'namedParameters',
-            type.namedParameters, other.namedParameters);
+        strategy.testLists(type, other, 'namedParameters', type.namedParameters,
+            other.namedParameters);
   }
 
   bool visitGenericType(GenericType type, GenericType other) {
-    return
-        strategy.testElements(
-            type, other, 'element',
-            type.element, other.element) &&
-        strategy.testTypeLists(
-            type, other, 'typeArguments',
-            type.typeArguments, other.typeArguments);
+    return strategy.testElements(
+            type, other, 'element', type.element, other.element) &&
+        strategy.testTypeLists(type, other, 'typeArguments', type.typeArguments,
+            other.typeArguments);
   }
 
   @override
@@ -410,10 +512,8 @@
 
   @override
   bool visitTypeVariableType(TypeVariableType type, TypeVariableType other) {
-    return
-        strategy.testElements(
-            type, other, 'element',
-            type.element, other.element);
+    return strategy.testElements(
+        type, other, 'element', type.element, other.element);
   }
 
   @override
@@ -440,34 +540,30 @@
   @override
   bool visit(ConstantExpression exp1, ConstantExpression exp2) {
     if (identical(exp1, exp2)) return true;
-    return
-        strategy.test(exp1, exp2, 'kind', exp1.kind, exp2.kind) &&
+    return strategy.test(exp1, exp2, 'kind', exp1.kind, exp2.kind) &&
         exp1.accept(this, exp2);
   }
 
   @override
-  bool visitBinary(BinaryConstantExpression exp1,
-                   BinaryConstantExpression exp2) {
-    return
-        strategy.test(exp1, exp2, 'operator', exp1.operator, exp2.operator) &&
+  bool visitBinary(
+      BinaryConstantExpression exp1, BinaryConstantExpression exp2) {
+    return strategy.test(
+            exp1, exp2, 'operator', exp1.operator, exp2.operator) &&
         strategy.testConstants(exp1, exp2, 'left', exp1.left, exp2.left) &&
         strategy.testConstants(exp1, exp2, 'right', exp1.right, exp2.right);
   }
 
   @override
-  bool visitConcatenate(ConcatenateConstantExpression exp1,
-                   ConcatenateConstantExpression exp2) {
-    return
-        strategy.testConstantLists(
-            exp1, exp2, 'expressions',
-            exp1.expressions, exp2.expressions);
+  bool visitConcatenate(
+      ConcatenateConstantExpression exp1, ConcatenateConstantExpression exp2) {
+    return strategy.testConstantLists(
+        exp1, exp2, 'expressions', exp1.expressions, exp2.expressions);
   }
 
   @override
-  bool visitConditional(ConditionalConstantExpression exp1,
-                   ConditionalConstantExpression exp2) {
-    return
-        strategy.testConstants(
+  bool visitConditional(
+      ConditionalConstantExpression exp1, ConditionalConstantExpression exp2) {
+    return strategy.testConstants(
             exp1, exp2, 'condition', exp1.condition, exp2.condition) &&
         strategy.testConstants(
             exp1, exp2, 'trueExp', exp1.trueExp, exp2.trueExp) &&
@@ -476,62 +572,43 @@
   }
 
   @override
-  bool visitConstructed(ConstructedConstantExpression exp1,
-                   ConstructedConstantExpression exp2) {
-    return
-        strategy.testTypes(
-            exp1, exp2, 'type',
-            exp1.type, exp2.type) &&
-        strategy.testElements(
-            exp1, exp2, 'target',
-            exp1.target, exp2.target) &&
+  bool visitConstructed(
+      ConstructedConstantExpression exp1, ConstructedConstantExpression exp2) {
+    return strategy.testTypes(exp1, exp2, 'type', exp1.type, exp2.type) &&
+        strategy.testElements(exp1, exp2, 'target', exp1.target, exp2.target) &&
         strategy.testConstantLists(
-            exp1, exp2, 'arguments',
-            exp1.arguments, exp2.arguments) &&
-        strategy.test(exp1, exp2, 'callStructure',
-             exp1.callStructure, exp2.callStructure);
+            exp1, exp2, 'arguments', exp1.arguments, exp2.arguments) &&
+        strategy.test(exp1, exp2, 'callStructure', exp1.callStructure,
+            exp2.callStructure);
   }
 
   @override
-  bool visitFunction(FunctionConstantExpression exp1,
-                FunctionConstantExpression exp2) {
-    return
-        strategy.testElements(
-            exp1, exp2, 'element',
-            exp1.element, exp2.element);
+  bool visitFunction(
+      FunctionConstantExpression exp1, FunctionConstantExpression exp2) {
+    return strategy.testElements(
+        exp1, exp2, 'element', exp1.element, exp2.element);
   }
 
   @override
-  bool visitIdentical(IdenticalConstantExpression exp1,
-                 IdenticalConstantExpression exp2) {
-    return
-        strategy.testConstants(exp1, exp2, 'left', exp1.left, exp2.left) &&
+  bool visitIdentical(
+      IdenticalConstantExpression exp1, IdenticalConstantExpression exp2) {
+    return strategy.testConstants(exp1, exp2, 'left', exp1.left, exp2.left) &&
         strategy.testConstants(exp1, exp2, 'right', exp1.right, exp2.right);
   }
 
   @override
   bool visitList(ListConstantExpression exp1, ListConstantExpression exp2) {
-    return
-        strategy.testTypes(
-            exp1, exp2, 'type',
-            exp1.type, exp2.type) &&
+    return strategy.testTypes(exp1, exp2, 'type', exp1.type, exp2.type) &&
         strategy.testConstantLists(
-            exp1, exp2, 'values',
-            exp1.values, exp2.values);
+            exp1, exp2, 'values', exp1.values, exp2.values);
   }
 
   @override
   bool visitMap(MapConstantExpression exp1, MapConstantExpression exp2) {
-    return
-        strategy.testTypes(
-            exp1, exp2, 'type',
-            exp1.type, exp2.type) &&
+    return strategy.testTypes(exp1, exp2, 'type', exp1.type, exp2.type) &&
+        strategy.testConstantLists(exp1, exp2, 'keys', exp1.keys, exp2.keys) &&
         strategy.testConstantLists(
-            exp1, exp2, 'keys',
-            exp1.keys, exp2.keys) &&
-        strategy.testConstantLists(
-            exp1, exp2, 'values',
-            exp1.values, exp2.values);
+            exp1, exp2, 'values', exp1.values, exp2.values);
   }
 
   @override
@@ -540,16 +617,17 @@
   }
 
   @override
-  bool visitPositional(PositionalArgumentReference exp1,
-                  PositionalArgumentReference exp2) {
+  bool visitPositional(
+      PositionalArgumentReference exp1, PositionalArgumentReference exp2) {
     return strategy.test(exp1, exp2, 'index', exp1.index, exp2.index);
   }
 
   @override
-  bool visitSymbol(SymbolConstantExpression exp1,
-                   SymbolConstantExpression exp2) {
-    // TODO: implement visitSymbol
-    return true;
+  bool visitSymbol(
+      SymbolConstantExpression exp1, SymbolConstantExpression exp2) {
+    // TODO(johnniwinther): Handle private names. Currently not even supported
+    // in resolution.
+    return strategy.test(exp1, exp2, 'name', exp1.name, exp2.name);
   }
 
   @override
@@ -559,44 +637,36 @@
 
   @override
   bool visitUnary(UnaryConstantExpression exp1, UnaryConstantExpression exp2) {
-    return
-        strategy.test(exp1, exp2, 'operator', exp1.operator, exp2.operator) &&
+    return strategy.test(
+            exp1, exp2, 'operator', exp1.operator, exp2.operator) &&
         strategy.testConstants(
             exp1, exp2, 'expression', exp1.expression, exp2.expression);
   }
 
   @override
-  bool visitVariable(VariableConstantExpression exp1,
-                VariableConstantExpression exp2) {
-    return
-        strategy.testElements(
-            exp1, exp2, 'element',
-            exp1.element, exp2.element);
+  bool visitVariable(
+      VariableConstantExpression exp1, VariableConstantExpression exp2) {
+    return strategy.testElements(
+        exp1, exp2, 'element', exp1.element, exp2.element);
   }
 
   @override
   bool visitBool(BoolConstantExpression exp1, BoolConstantExpression exp2) {
-    return
-        strategy.test(
-            exp1, exp2, 'primitiveValue',
-            exp1.primitiveValue, exp2.primitiveValue);
+    return strategy.test(
+        exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
   }
 
   @override
-  bool visitDouble(DoubleConstantExpression exp1,
-                   DoubleConstantExpression exp2) {
-    return
-        strategy.test(
-            exp1, exp2, 'primitiveValue',
-            exp1.primitiveValue, exp2.primitiveValue);
+  bool visitDouble(
+      DoubleConstantExpression exp1, DoubleConstantExpression exp2) {
+    return strategy.test(
+        exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
   }
 
   @override
   bool visitInt(IntConstantExpression exp1, IntConstantExpression exp2) {
-    return
-        strategy.test(
-            exp1, exp2, 'primitiveValue',
-            exp1.primitiveValue, exp2.primitiveValue);
+    return strategy.test(
+        exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
   }
 
   @override
@@ -605,96 +675,950 @@
   }
 
   @override
-  bool visitString(StringConstantExpression exp1,
-                   StringConstantExpression exp2) {
-    return
-        strategy.test(
-            exp1, exp2, 'primitiveValue',
-            exp1.primitiveValue, exp2.primitiveValue);
+  bool visitString(
+      StringConstantExpression exp1, StringConstantExpression exp2) {
+    return strategy.test(
+        exp1, exp2, 'primitiveValue', exp1.primitiveValue, exp2.primitiveValue);
   }
 
   @override
   bool visitBoolFromEnvironment(BoolFromEnvironmentConstantExpression exp1,
-                                BoolFromEnvironmentConstantExpression exp2) {
-    return
-        strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
+      BoolFromEnvironmentConstantExpression exp2) {
+    return strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
         strategy.testConstants(
-            exp1, exp2, 'defaultValue',
-            exp1.defaultValue, exp2.defaultValue);
+            exp1, exp2, 'defaultValue', exp1.defaultValue, exp2.defaultValue);
   }
 
   @override
   bool visitIntFromEnvironment(IntFromEnvironmentConstantExpression exp1,
-                               IntFromEnvironmentConstantExpression exp2) {
-    return
-        strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
+      IntFromEnvironmentConstantExpression exp2) {
+    return strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
         strategy.testConstants(
-            exp1, exp2, 'defaultValue',
-            exp1.defaultValue, exp2.defaultValue);
+            exp1, exp2, 'defaultValue', exp1.defaultValue, exp2.defaultValue);
   }
 
   @override
-  bool visitStringFromEnvironment(
-      StringFromEnvironmentConstantExpression exp1,
+  bool visitStringFromEnvironment(StringFromEnvironmentConstantExpression exp1,
       StringFromEnvironmentConstantExpression exp2) {
-    return
-        strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
+    return strategy.testConstants(exp1, exp2, 'name', exp1.name, exp2.name) &&
         strategy.testConstants(
-            exp1, exp2, 'defaultValue',
-            exp1.defaultValue, exp2.defaultValue);
+            exp1, exp2, 'defaultValue', exp1.defaultValue, exp2.defaultValue);
   }
 
   @override
   bool visitStringLength(StringLengthConstantExpression exp1,
-                    StringLengthConstantExpression exp2) {
-    return
-        strategy.testConstants(
-            exp1, exp2, 'expression',
-            exp1.expression, exp2.expression);
+      StringLengthConstantExpression exp2) {
+    return strategy.testConstants(
+        exp1, exp2, 'expression', exp1.expression, exp2.expression);
   }
 
   @override
-  bool visitDeferred(DeferredConstantExpression exp1,
-                DeferredConstantExpression exp2) {
-    // TODO: implement visitDeferred
+  bool visitDeferred(
+      DeferredConstantExpression exp1, DeferredConstantExpression exp2) {
+    // TODO(johnniwinther): Implement this.
     return true;
   }
 }
 
 /// Tests the equivalence of [impact1] and [impact2] using [strategy].
 bool testResolutionImpactEquivalence(
-    ResolutionImpact impact1,
-    ResolutionImpact impact2,
+    ResolutionImpact impact1, ResolutionImpact impact2,
     [TestStrategy strategy = const TestStrategy()]) {
-  return
-      strategy.testSets(
-          impact1, impact2, 'constSymbolNames',
+  return strategy.testSets(impact1, impact2, 'constSymbolNames',
           impact1.constSymbolNames, impact2.constSymbolNames) &&
       strategy.testSets(
-          impact1, impact2, 'constantLiterals',
-          impact1.constantLiterals, impact2.constantLiterals,
+          impact1,
+          impact2,
+          'constantLiterals',
+          impact1.constantLiterals,
+          impact2.constantLiterals,
           areConstantsEquivalent) &&
+      strategy.testSets(impact1, impact2, 'dynamicUses', impact1.dynamicUses,
+          impact2.dynamicUses, areDynamicUsesEquivalent) &&
       strategy.testSets(
-          impact1, impact2, 'dynamicUses',
-          impact1.dynamicUses, impact2.dynamicUses,
-          areDynamicUsesEquivalent) &&
-      strategy.testSets(
-          impact1, impact2, 'features',
-          impact1.features, impact2.features) &&
-      strategy.testSets(
-          impact1, impact2, 'listLiterals',
-          impact1.listLiterals, impact2.listLiterals,
-          areListLiteralUsesEquivalent) &&
-      strategy.testSets(
-          impact1, impact2, 'mapLiterals',
-          impact1.mapLiterals, impact2.mapLiterals,
-          areMapLiteralUsesEquivalent) &&
-      strategy.testSets(
-          impact1, impact2, 'staticUses',
-          impact1.staticUses, impact2.staticUses,
-          areStaticUsesEquivalent) &&
-      strategy.testSets(
-          impact1, impact2, 'typeUses',
-          impact1.typeUses, impact2.typeUses,
-          areTypeUsesEquivalent);
+          impact1, impact2, 'features', impact1.features, impact2.features) &&
+      strategy.testSets(impact1, impact2, 'listLiterals', impact1.listLiterals,
+          impact2.listLiterals, areListLiteralUsesEquivalent) &&
+      strategy.testSets(impact1, impact2, 'mapLiterals', impact1.mapLiterals,
+          impact2.mapLiterals, areMapLiteralUsesEquivalent) &&
+      strategy.testSets(impact1, impact2, 'staticUses', impact1.staticUses,
+          impact2.staticUses, areStaticUsesEquivalent) &&
+      strategy.testSets(impact1, impact2, 'typeUses', impact1.typeUses,
+          impact2.typeUses, areTypeUsesEquivalent);
+}
+
+/// Tests the equivalence of [resolvedAst1] and [resolvedAst2] using [strategy].
+bool testResolvedAstEquivalence(
+    ResolvedAst resolvedAst1, ResolvedAst resolvedAst2,
+    [TestStrategy strategy = const TestStrategy()]) {
+  return strategy.testElements(resolvedAst1, resolvedAst2, 'element',
+          resolvedAst1.element, resolvedAst2.element) &&
+      new NodeEquivalenceVisitor(strategy).testNodes(resolvedAst1, resolvedAst2,
+          'node', resolvedAst1.node, resolvedAst2.node) &&
+      testTreeElementsEquivalence(resolvedAst1, resolvedAst2, strategy);
+}
+
+/// Tests the equivalence of the data stored in the [TreeElements] of
+/// [resolvedAst1] and [resolvedAst2] using [strategy].
+bool testTreeElementsEquivalence(
+    ResolvedAst resolvedAst1, ResolvedAst resolvedAst2,
+    [TestStrategy strategy = const TestStrategy()]) {
+  AstIndexComputer indices1 = new AstIndexComputer();
+  resolvedAst1.node.accept(indices1);
+  AstIndexComputer indices2 = new AstIndexComputer();
+  resolvedAst2.node.accept(indices2);
+
+  TreeElements elements1 = resolvedAst1.elements;
+  TreeElements elements2 = resolvedAst2.elements;
+
+  TreeElementsEquivalenceVisitor visitor = new TreeElementsEquivalenceVisitor(
+      indices1, indices2, elements1, elements2, strategy);
+  resolvedAst1.node.accept(visitor);
+  return visitor.success;
+}
+
+/// Visitor that checks the equivalence of [TreeElements] data.
+class TreeElementsEquivalenceVisitor extends Visitor {
+  final TestStrategy strategy;
+  final AstIndexComputer indices1;
+  final AstIndexComputer indices2;
+  final TreeElements elements1;
+  final TreeElements elements2;
+  bool success = true;
+
+  TreeElementsEquivalenceVisitor(
+      this.indices1, this.indices2, this.elements1, this.elements2,
+      [this.strategy = const TestStrategy()]);
+
+  visitNode(Node node1) {
+    if (!success) return;
+    int index = indices1.nodeIndices[node1];
+    Node node2 = indices2.nodeList[index];
+    success = strategy.testElements(
+            node1, node2, '[$index]', elements1[node1], elements2[node2]) &&
+        strategy.testTypes(node1, node2, 'getType($index)',
+            elements1.getType(node1), elements2.getType(node2)) &&
+        strategy.test(
+            node1,
+            node2,
+            'getSelector($index)',
+            elements1.getSelector(node1),
+            elements2.getSelector(node2),
+            areSelectorsEquivalent) &&
+        strategy.testConstants(node1, node2, 'getConstant($index)',
+            elements1.getConstant(node1), elements2.getConstant(node2)) &&
+        strategy.testTypes(node1, node2, 'typesCache[$index]',
+            elements1.typesCache[node1], elements2.typesCache[node2]);
+
+    node1.visitChildren(this);
+  }
+
+  @override
+  visitSend(Send node1) {
+    visitExpression(node1);
+    if (!success) return;
+    int index = indices1.nodeIndices[node1];
+    Send node2 = indices2.nodeList[index];
+    success = strategy.test(node1, node2, 'isTypeLiteral($index)',
+            elements1.isTypeLiteral(node1), elements2.isTypeLiteral(node2)) &&
+        strategy.testTypes(
+            node1,
+            node2,
+            'getTypeLiteralType($index)',
+            elements1.getTypeLiteralType(node1),
+            elements2.getTypeLiteralType(node2)) &&
+        strategy.test(
+            node1,
+            node2,
+            'getSendStructure($index)',
+            elements1.getSendStructure(node1),
+            elements2.getSendStructure(node2),
+            areSendStructuresEquivalent);
+  }
+
+  @override
+  visitNewExpression(NewExpression node1) {
+    visitExpression(node1);
+    if (!success) return;
+    int index = indices1.nodeIndices[node1];
+    NewExpression node2 = indices2.nodeList[index];
+    success = strategy.test(
+        node1,
+        node2,
+        'getNewStructure($index)',
+        elements1.getNewStructure(node1),
+        elements2.getNewStructure(node2),
+        areNewStructuresEquivalent);
+  }
+
+  @override
+  visitSendSet(SendSet node1) {
+    visitSend(node1);
+    if (!success) return;
+    int index = indices1.nodeIndices[node1];
+    SendSet node2 = indices2.nodeList[index];
+    success = strategy.test(
+            node1,
+            node2,
+            'getGetterSelectorInComplexSendSet($index)',
+            elements1.getGetterSelectorInComplexSendSet(node1),
+            elements2.getGetterSelectorInComplexSendSet(node2),
+            areSelectorsEquivalent) &&
+        strategy.test(
+            node1,
+            node2,
+            'getOperatorSelectorInComplexSendSet($index)',
+            elements1.getOperatorSelectorInComplexSendSet(node1),
+            elements2.getOperatorSelectorInComplexSendSet(node2),
+            areSelectorsEquivalent);
+  }
+
+  @override
+  visitFunctionExpression(FunctionExpression node1) {
+    visitNode(node1);
+    if (!success) return;
+    int index = indices1.nodeIndices[node1];
+    FunctionExpression node2 = indices2.nodeList[index];
+    if (elements1[node1] is! FunctionElement) {
+      // [getFunctionDefinition] is currently stored in [] which doesn't always
+      // contain a [FunctionElement].
+      return;
+    }
+    success = strategy.testElements(
+        node1,
+        node2,
+        'getFunctionDefinition($index)',
+        elements1.getFunctionDefinition(node1),
+        elements2.getFunctionDefinition(node2));
+  }
+
+  @override
+  visitForIn(ForIn node1) {
+    visitLoop(node1);
+    if (!success) return;
+    int index = indices1.nodeIndices[node1];
+    ForIn node2 = indices2.nodeList[index];
+    success = strategy.testElements(node1, node2, 'getForInVariable($index)',
+        elements1.getForInVariable(node1), elements2.getForInVariable(node2));
+  }
+
+  @override
+  visitRedirectingFactoryBody(RedirectingFactoryBody node1) {
+    visitStatement(node1);
+    if (!success) return;
+    int index = indices1.nodeIndices[node1];
+    RedirectingFactoryBody node2 = indices2.nodeList[index];
+    success = strategy.testElements(
+        node1,
+        node2,
+        'getRedirectingTargetConstructor($index)',
+        elements1.getRedirectingTargetConstructor(node1),
+        elements2.getRedirectingTargetConstructor(node2));
+  }
+}
+
+class NodeEquivalenceVisitor implements Visitor1<bool, Node> {
+  final TestStrategy strategy;
+
+  const NodeEquivalenceVisitor([this.strategy = const TestStrategy()]);
+
+  bool testNodes(
+      var object1, var object2, String property, Node node1, Node node2) {
+    if (node1 == node2) return true;
+    if (node1 == null || node2 == null) return false;
+    return node1.accept1(this, node2);
+  }
+
+  bool testNodeLists(var object1, var object2, String property,
+      Link<Node> list1, Link<Node> list2) {
+    if (list1 == list2) return true;
+    if (list1 == null || list2 == null) return false;
+    while (list1.isNotEmpty && list2.isNotEmpty) {
+      if (!list1.head.accept1(this, list2.head)) {
+        return false;
+      }
+      list1 = list1.tail;
+      list2 = list2.tail;
+    }
+    return list1.isEmpty && list2.isEmpty;
+  }
+
+  bool testTokens(
+      var object1, var object2, String property, Token token1, Token token2) {
+    if (token1 == token2) return true;
+    if (token1 == null || token2 == null) return false;
+    return token1.hashCode == token2.hashCode;
+  }
+
+  @override
+  bool visitAssert(Assert node1, Assert node2) {
+    return testTokens(node1, node2, 'assertToken', node1.assertToken,
+            node2.assertToken) &&
+        testNodes(
+            node1, node2, 'condition', node1.condition, node2.condition) &&
+        testNodes(node1, node2, 'message', node1.message, node2.message);
+  }
+
+  @override
+  bool visitAsyncForIn(AsyncForIn node1, AsyncForIn node2) {
+    return visitForIn(node1, node2) &&
+        testTokens(
+            node1, node2, 'awaitToken', node1.awaitToken, node2.awaitToken);
+  }
+
+  @override
+  bool visitAsyncModifier(AsyncModifier node1, AsyncModifier node2) {
+    return testTokens(
+            node1, node2, 'asyncToken', node1.asyncToken, node2.asyncToken) &&
+        testTokens(node1, node2, 'starToken', node1.starToken, node2.starToken);
+  }
+
+  @override
+  bool visitAwait(Await node1, Await node2) {
+    return testTokens(
+            node1, node2, 'awaitToken', node1.awaitToken, node2.awaitToken) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitBlock(Block node1, Block node2) {
+    return testNodes(
+        node1, node2, 'statements', node1.statements, node2.statements);
+  }
+
+  @override
+  bool visitBreakStatement(BreakStatement node1, BreakStatement node2) {
+    return testTokens(node1, node2, 'keywordToken', node1.keywordToken,
+            node2.keywordToken) &&
+        testNodes(node1, node2, 'target', node1.target, node2.target);
+  }
+
+  @override
+  bool visitCascade(Cascade node1, Cascade node2) {
+    return testNodes(
+        node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitCascadeReceiver(CascadeReceiver node1, CascadeReceiver node2) {
+    return testTokens(node1, node2, 'cascadeOperator', node1.cascadeOperator,
+            node2.cascadeOperator) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitCaseMatch(CaseMatch node1, CaseMatch node2) {
+    return testTokens(node1, node2, 'caseKeyword', node1.caseKeyword,
+            node2.caseKeyword) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitCatchBlock(CatchBlock node1, CatchBlock node2) {
+    return testTokens(node1, node2, 'catchKeyword', node1.catchKeyword,
+            node2.catchKeyword) &&
+        testTokens(
+            node1, node2, 'onKeyword', node1.onKeyword, node2.onKeyword) &&
+        testNodes(node1, node2, 'type', node1.type, node2.type) &&
+        testNodes(node1, node2, 'formals', node1.formals, node2.formals) &&
+        testNodes(node1, node2, 'block', node1.block, node2.block);
+  }
+
+  @override
+  bool visitClassNode(ClassNode node1, ClassNode node2) {
+    return testTokens(
+            node1, node2, 'beginToken', node1.beginToken, node2.beginToken) &&
+        testTokens(node1, node2, 'extendsKeyword', node1.extendsKeyword,
+            node2.extendsKeyword) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(
+            node1, node2, 'modifiers', node1.modifiers, node2.modifiers) &&
+        testNodes(node1, node2, 'name', node1.name, node2.name) &&
+        testNodes(
+            node1, node2, 'superclass', node1.superclass, node2.superclass) &&
+        testNodes(
+            node1, node2, 'interfaces', node1.interfaces, node2.interfaces) &&
+        testNodes(node1, node2, 'typeParameters', node1.typeParameters,
+            node2.typeParameters) &&
+        testNodes(node1, node2, 'body', node1.body, node2.body);
+  }
+
+  @override
+  bool visitCombinator(Combinator node1, Combinator node2) {
+    return testTokens(node1, node2, 'keywordToken', node1.keywordToken,
+            node2.keywordToken) &&
+        testNodes(
+            node1, node2, 'identifiers', node1.identifiers, node2.identifiers);
+  }
+
+  @override
+  bool visitConditional(Conditional node1, Conditional node2) {
+    return testTokens(node1, node2, 'questionToken', node1.questionToken,
+            node2.questionToken) &&
+        testTokens(
+            node1, node2, 'colonToken', node1.colonToken, node2.colonToken) &&
+        testNodes(
+            node1, node2, 'condition', node1.condition, node2.condition) &&
+        testNodes(node1, node2, 'thenExpression', node1.thenExpression,
+            node2.thenExpression) &&
+        testNodes(node1, node2, 'elseExpression', node1.elseExpression,
+            node2.elseExpression);
+  }
+
+  @override
+  bool visitConditionalUri(ConditionalUri node1, ConditionalUri node2) {
+    return testTokens(node1, node2, 'ifToken', node1.ifToken, node2.ifToken) &&
+        testNodes(node1, node2, 'key', node1.key, node2.key) &&
+        testNodes(node1, node2, 'value', node1.value, node2.value) &&
+        testNodes(node1, node2, 'uri', node1.uri, node2.uri);
+  }
+
+  @override
+  bool visitContinueStatement(
+      ContinueStatement node1, ContinueStatement node2) {
+    return testTokens(node1, node2, 'keywordToken', node1.keywordToken,
+            node2.keywordToken) &&
+        testNodes(node1, node2, 'target', node1.target, node2.target);
+  }
+
+  @override
+  bool visitDoWhile(DoWhile node1, DoWhile node2) {
+    return testTokens(
+            node1, node2, 'doKeyword', node1.doKeyword, node2.doKeyword) &&
+        testTokens(node1, node2, 'whileKeyword', node1.whileKeyword,
+            node2.whileKeyword) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(
+            node1, node2, 'condition', node1.condition, node2.condition) &&
+        testNodes(node1, node2, 'body', node1.body, node2.body);
+  }
+
+  @override
+  bool visitDottedName(DottedName node1, DottedName node2) {
+    return testTokens(node1, node2, 'token', node1.token, node2.token) &&
+        testNodes(
+            node1, node2, 'identifiers', node1.identifiers, node2.identifiers);
+  }
+
+  @override
+  bool visitEmptyStatement(EmptyStatement node1, EmptyStatement node2) {
+    return testTokens(node1, node2, 'semicolonToken', node1.semicolonToken,
+        node2.semicolonToken);
+  }
+
+  @override
+  bool visitEnum(Enum node1, Enum node2) {
+    return testTokens(
+            node1, node2, 'enumToken', node1.enumToken, node2.enumToken) &&
+        testNodes(node1, node2, 'name', node1.name, node2.name) &&
+        testNodes(node1, node2, 'names', node1.names, node2.names);
+  }
+
+  @override
+  bool visitExport(Export node1, Export node2) {
+    return visitLibraryDependency(node1, node2) &&
+        testTokens(node1, node2, 'exportKeyword', node1.exportKeyword,
+            node2.exportKeyword);
+  }
+
+  @override
+  bool visitExpressionStatement(
+      ExpressionStatement node1, ExpressionStatement node2) {
+    return testTokens(
+            node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitFor(For node1, For node2) {
+    return testTokens(
+            node1, node2, 'forToken', node1.forToken, node2.forToken) &&
+        testNodes(node1, node2, 'initializer', node1.initializer,
+            node2.initializer) &&
+        testNodes(node1, node2, 'conditionStatement', node1.conditionStatement,
+            node2.conditionStatement) &&
+        testNodes(node1, node2, 'update', node1.update, node2.update) &&
+        testNodes(node1, node2, 'body', node1.body, node2.body);
+  }
+
+  @override
+  bool visitForIn(ForIn node1, ForIn node2) {
+    return testNodes(
+            node1, node2, 'condition', node1.condition, node2.condition) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression) &&
+        testNodes(node1, node2, 'body', node1.expression, node2.body) &&
+        testNodes(node1, node2, 'declaredIdentifier', node1.declaredIdentifier,
+            node2.declaredIdentifier);
+  }
+
+  @override
+  bool visitFunctionDeclaration(
+      FunctionDeclaration node1, FunctionDeclaration node2) {
+    return testNodes(node1, node2, 'function', node1.function, node2.function);
+  }
+
+  @override
+  bool visitFunctionExpression(
+      FunctionExpression node1, FunctionExpression node2) {
+    return testTokens(
+            node1, node2, 'getOrSet', node1.getOrSet, node2.getOrSet) &&
+        testNodes(node1, node2, 'name', node1.name, node2.name) &&
+        testNodes(
+            node1, node2, 'parameters', node1.parameters, node2.parameters) &&
+        testNodes(node1, node2, 'body', node1.body, node2.body) &&
+        testNodes(
+            node1, node2, 'returnType', node1.returnType, node2.returnType) &&
+        testNodes(
+            node1, node2, 'modifiers', node1.modifiers, node2.modifiers) &&
+        testNodes(node1, node2, 'initializers', node1.initializers,
+            node2.initializers) &&
+        testNodes(node1, node2, 'asyncModifier', node1.asyncModifier,
+            node2.asyncModifier);
+  }
+
+  @override
+  bool visitGotoStatement(GotoStatement node1, GotoStatement node2) {
+    return testTokens(node1, node2, 'keywordToken', node1.keywordToken,
+            node2.keywordToken) &&
+        testTokens(node1, node2, 'semicolonToken', node1.semicolonToken,
+            node2.semicolonToken) &&
+        testNodes(node1, node2, 'target', node1.target, node2.target);
+  }
+
+  @override
+  bool visitIdentifier(Identifier node1, Identifier node2) {
+    return testTokens(node1, node2, 'token', node1.token, node2.token);
+  }
+
+  @override
+  bool visitIf(If node1, If node2) {
+    return testTokens(node1, node2, 'ifToken', node1.ifToken, node2.ifToken) &&
+        testTokens(
+            node1, node2, 'elseToken', node1.elseToken, node2.elseToken) &&
+        testNodes(
+            node1, node2, 'condition', node1.condition, node2.condition) &&
+        testNodes(node1, node2, 'thenPart', node1.thenPart, node2.thenPart) &&
+        testNodes(node1, node2, 'elsePart', node1.elsePart, node2.elsePart);
+  }
+
+  @override
+  bool visitImport(Import node1, Import node2) {
+    return visitLibraryDependency(node1, node2) &&
+        testTokens(node1, node2, 'importKeyword', node1.importKeyword,
+            node2.importKeyword) &&
+        testNodes(node1, node2, 'prefix', node1.prefix, node2.prefix) &&
+        strategy.test(
+            node1, node2, 'isDeferred', node1.isDeferred, node2.isDeferred);
+  }
+
+  @override
+  bool visitLabel(Label node1, Label node2) {
+    return testTokens(
+            node1, node2, 'colonToken', node1.colonToken, node2.colonToken) &&
+        testNodes(
+            node1, node2, 'identifier', node1.identifier, node2.identifier);
+  }
+
+  @override
+  bool visitLabeledStatement(LabeledStatement node1, LabeledStatement node2) {
+    return testNodes(node1, node2, 'labels', node1.labels, node2.labels) &&
+        testNodes(node1, node2, 'statement', node1.statement, node2.statement);
+  }
+
+  @override
+  bool visitLibraryDependency(
+      LibraryDependency node1, LibraryDependency node2) {
+    return visitLibraryTag(node1, node2) &&
+        testNodes(node1, node2, 'uri', node1.uri, node2.uri) &&
+        testNodes(node1, node2, 'conditionalUris', node1.conditionalUris,
+            node2.conditionalUris) &&
+        testNodes(
+            node1, node2, 'combinators', node1.combinators, node2.combinators);
+  }
+
+  @override
+  bool visitLibraryName(LibraryName node1, LibraryName node2) {
+    return visitLibraryTag(node1, node2) &&
+        testTokens(node1, node2, 'libraryKeyword', node1.libraryKeyword,
+            node2.libraryKeyword) &&
+        testNodes(node1, node2, 'name', node1.name, node2.name);
+  }
+
+  @override
+  bool visitLibraryTag(LibraryTag node1, LibraryTag node2) {
+    // TODO(johnniwinther): Check metadata?
+    return true;
+  }
+
+  @override
+  bool visitLiteral(Literal node1, Literal node2) {
+    return testTokens(node1, node2, 'token', node1.token, node2.token);
+  }
+
+  @override
+  bool visitLiteralBool(LiteralBool node1, LiteralBool node2) {
+    return visitLiteral(node1, node2);
+  }
+
+  @override
+  bool visitLiteralDouble(LiteralDouble node1, LiteralDouble node2) {
+    return visitLiteral(node1, node2);
+  }
+
+  @override
+  bool visitLiteralInt(LiteralInt node1, LiteralInt node2) {
+    return visitLiteral(node1, node2);
+  }
+
+  @override
+  bool visitLiteralList(LiteralList node1, LiteralList node2) {
+    return testTokens(node1, node2, 'constKeyword', node1.constKeyword,
+            node2.constKeyword) &&
+        testNodes(node1, node2, 'typeArguments', node1.typeArguments,
+            node2.typeArguments) &&
+        testNodes(node1, node2, 'elements', node1.elements, node2.elements);
+  }
+
+  @override
+  bool visitLiteralMap(LiteralMap node1, LiteralMap node2) {
+    return testTokens(node1, node2, 'constKeyword', node1.constKeyword,
+            node2.constKeyword) &&
+        testNodes(node1, node2, 'typeArguments', node1.typeArguments,
+            node2.typeArguments) &&
+        testNodes(node1, node2, 'entries', node1.entries, node2.entries);
+  }
+
+  @override
+  bool visitLiteralMapEntry(LiteralMapEntry node1, LiteralMapEntry node2) {
+    return testTokens(
+            node1, node2, 'colonToken', node1.colonToken, node2.colonToken) &&
+        testNodes(node1, node2, 'key', node1.key, node2.key) &&
+        testNodes(node1, node2, 'value', node1.value, node2.value);
+  }
+
+  @override
+  bool visitLiteralNull(LiteralNull node1, LiteralNull node2) {
+    return visitLiteral(node1, node2);
+  }
+
+  @override
+  bool visitLiteralString(LiteralString node1, LiteralString node2) {
+    return testTokens(node1, node2, 'token', node1.token, node2.token) &&
+        strategy.test(
+            node1, node2, 'dartString', node1.dartString, node2.dartString);
+  }
+
+  @override
+  bool visitLiteralSymbol(LiteralSymbol node1, LiteralSymbol node2) {
+    return testTokens(
+            node1, node2, 'hashToken', node1.hashToken, node2.hashToken) &&
+        testNodes(
+            node1, node2, 'identifiers', node1.identifiers, node2.identifiers);
+  }
+
+  @override
+  bool visitLoop(Loop node1, Loop node2) {
+    return testNodes(
+            node1, node2, 'condition', node1.condition, node2.condition) &&
+        testNodes(node1, node2, 'body', node1.body, node2.body);
+  }
+
+  @override
+  bool visitMetadata(Metadata node1, Metadata node2) {
+    return testTokens(node1, node2, 'token', node1.token, node2.token) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitMixinApplication(MixinApplication node1, MixinApplication node2) {
+    return testNodes(
+            node1, node2, 'superclass', node1.superclass, node2.superclass) &&
+        testNodes(node1, node2, 'mixins', node1.mixins, node2.mixins);
+  }
+
+  @override
+  bool visitModifiers(Modifiers node1, Modifiers node2) {
+    return strategy.test(node1, node2, 'flags', node1.flags, node2.flags) &&
+        testNodes(node1, node2, 'nodes', node1.nodes, node2.nodes);
+  }
+
+  @override
+  bool visitNamedArgument(NamedArgument node1, NamedArgument node2) {
+    return testTokens(
+            node1, node2, 'colonToken', node1.colonToken, node2.colonToken) &&
+        testNodes(node1, node2, 'name', node1.name, node2.name) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitNamedMixinApplication(
+      NamedMixinApplication node1, NamedMixinApplication node2) {
+    return testTokens(node1, node2, 'classKeyword', node1.classKeyword,
+            node2.classKeyword) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(node1, node2, 'name', node1.name, node2.name) &&
+        testNodes(node1, node2, 'typeParameters', node1.typeParameters,
+            node2.typeParameters) &&
+        testNodes(
+            node1, node2, 'modifiers', node1.modifiers, node2.modifiers) &&
+        testNodes(node1, node2, 'mixinApplication', node1.mixinApplication,
+            node2.mixinApplication) &&
+        testNodes(
+            node1, node2, 'interfaces', node1.interfaces, node2.interfaces);
+  }
+
+  @override
+  bool visitNewExpression(NewExpression node1, NewExpression node2) {
+    return testTokens(
+            node1, node2, 'newToken', node1.newToken, node2.newToken) &&
+        testNodes(node1, node2, 'send', node1.send, node2.send);
+  }
+
+  @override
+  bool visitNodeList(NodeList node1, NodeList node2) {
+    return testTokens(
+            node1, node2, 'beginToken', node1.beginToken, node2.beginToken) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        strategy.test(
+            node1, node2, 'delimiter', node1.delimiter, node2.delimiter) &&
+        testNodeLists(node1, node2, 'nodes', node1.nodes, node2.nodes);
+  }
+
+  @override
+  bool visitOperator(Operator node1, Operator node2) {
+    return visitIdentifier(node1, node2);
+  }
+
+  @override
+  bool visitParenthesizedExpression(
+      ParenthesizedExpression node1, ParenthesizedExpression node2) {
+    return testTokens(
+            node1, node2, 'beginToken', node1.beginToken, node2.beginToken) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitPart(Part node1, Part node2) {
+    return visitLibraryTag(node1, node2) &&
+        testTokens(node1, node2, 'partKeyword', node1.partKeyword,
+            node2.partKeyword) &&
+        testNodes(node1, node2, 'uri', node1.uri, node2.uri);
+  }
+
+  @override
+  bool visitPartOf(PartOf node1, PartOf node2) {
+    // TODO(johnniwinther): Check metadata?
+    return testTokens(node1, node2, 'partKeyword', node1.partKeyword,
+            node2.partKeyword) &&
+        testNodes(node1, node2, 'name', node1.name, node2.name);
+  }
+
+  @override
+  bool visitPostfix(Postfix node1, Postfix node2) {
+    return visitNodeList(node1, node2);
+  }
+
+  @override
+  bool visitPrefix(Prefix node1, Prefix node2) {
+    return visitNodeList(node1, node2);
+  }
+
+  @override
+  bool visitRedirectingFactoryBody(
+      RedirectingFactoryBody node1, RedirectingFactoryBody node2) {
+    return testTokens(
+            node1, node2, 'beginToken', node1.beginToken, node2.beginToken) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(node1, node2, 'constructorReference',
+            node1.constructorReference, node2.constructorReference);
+  }
+
+  @override
+  bool visitRethrow(Rethrow node1, Rethrow node2) {
+    return testTokens(
+            node1, node2, 'throwToken', node1.throwToken, node2.throwToken) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken);
+  }
+
+  @override
+  bool visitReturn(Return node1, Return node2) {
+    return testTokens(
+            node1, node2, 'beginToken', node1.beginToken, node2.beginToken) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitSend(Send node1, Send node2) {
+    return strategy.test(node1, node2, 'isConditional', node1.isConditional,
+            node2.isConditional) &&
+        testNodes(node1, node2, 'receiver', node1.receiver, node2.receiver) &&
+        testNodes(node1, node2, 'selector', node1.selector, node2.selector) &&
+        testNodes(node1, node2, 'argumentsNode', node1.argumentsNode,
+            node2.argumentsNode);
+  }
+
+  @override
+  bool visitSendSet(SendSet node1, SendSet node2) {
+    return visitSend(node1, node2) &&
+        testNodes(node1, node2, 'assignmentOperator', node1.assignmentOperator,
+            node2.assignmentOperator);
+  }
+
+  @override
+  bool visitStringInterpolation(
+      StringInterpolation node1, StringInterpolation node2) {
+    return testNodes(node1, node2, 'string', node1.string, node2.string) &&
+        testNodes(node1, node2, 'parts', node1.parts, node2.parts);
+  }
+
+  @override
+  bool visitStringInterpolationPart(
+      StringInterpolationPart node1, StringInterpolationPart node2) {
+    return testNodes(
+        node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitStringJuxtaposition(
+      StringJuxtaposition node1, StringJuxtaposition node2) {
+    return testNodes(node1, node2, 'first', node1.first, node2.first) &&
+        testNodes(node1, node2, 'second', node1.second, node2.second);
+  }
+
+  @override
+  bool visitSwitchCase(SwitchCase node1, SwitchCase node2) {
+    return testTokens(node1, node2, 'defaultKeyword', node1.defaultKeyword,
+            node2.defaultKeyword) &&
+        testTokens(
+            node1, node2, 'startToken', node1.startToken, node2.startToken) &&
+        testNodes(node1, node2, 'labelsAndCases', node1.labelsAndCases,
+            node2.labelsAndCases) &&
+        testNodes(
+            node1, node2, 'statements', node1.statements, node2.statements);
+  }
+
+  @override
+  bool visitSwitchStatement(SwitchStatement node1, SwitchStatement node2) {
+    return testTokens(node1, node2, 'switchKeyword', node1.switchKeyword,
+            node2.switchKeyword) &&
+        testNodes(node1, node2, 'parenthesizedExpression',
+            node1.parenthesizedExpression, node2.parenthesizedExpression) &&
+        testNodes(node1, node2, 'cases', node1.cases, node2.cases);
+  }
+
+  @override
+  bool visitSyncForIn(SyncForIn node1, SyncForIn node2) {
+    return visitForIn(node1, node2);
+  }
+
+  @override
+  bool visitThrow(Throw node1, Throw node2) {
+    return testTokens(
+            node1, node2, 'throwToken', node1.throwToken, node2.throwToken) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitTryStatement(TryStatement node1, TryStatement node2) {
+    return testTokens(
+            node1, node2, 'tryKeyword', node1.tryKeyword, node2.tryKeyword) &&
+        testTokens(node1, node2, 'finallyKeyword', node1.finallyKeyword,
+            node2.finallyKeyword) &&
+        testNodes(node1, node2, 'tryBlock', node1.tryBlock, node2.tryBlock) &&
+        testNodes(node1, node2, 'catchBlocks', node1.catchBlocks,
+            node2.catchBlocks) &&
+        testNodes(node1, node2, 'finallyBlock', node1.finallyBlock,
+            node2.finallyBlock);
+  }
+
+  @override
+  bool visitTypeAnnotation(TypeAnnotation node1, TypeAnnotation node2) {
+    return testNodes(
+            node1, node2, 'typeName', node1.typeName, node2.typeName) &&
+        testNodes(node1, node2, 'typeArguments', node1.typeArguments,
+            node2.typeArguments);
+  }
+
+  @override
+  bool visitTypeVariable(TypeVariable node1, TypeVariable node2) {
+    return testNodes(node1, node2, 'name', node1.name, node2.name) &&
+        testNodes(node1, node2, 'bound', node1.bound, node2.bound);
+  }
+
+  @override
+  bool visitTypedef(Typedef node1, Typedef node2) {
+    return testTokens(node1, node2, 'typedefKeyword', node1.typedefKeyword,
+            node2.typedefKeyword) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(
+            node1, node2, 'returnType', node1.returnType, node2.returnType) &&
+        testNodes(node1, node2, 'name', node1.name, node2.name) &&
+        testNodes(node1, node2, 'typeParameters', node1.typeParameters,
+            node2.typeParameters) &&
+        testNodes(node1, node2, 'formals', node1.formals, node2.formals);
+  }
+
+  @override
+  bool visitVariableDefinitions(
+      VariableDefinitions node1, VariableDefinitions node2) {
+    return testNodes(
+            node1, node2, 'metadata', node1.metadata, node2.metadata) &&
+        testNodes(node1, node2, 'type', node1.type, node2.type) &&
+        testNodes(
+            node1, node2, 'modifiers', node1.modifiers, node2.modifiers) &&
+        testNodes(
+            node1, node2, 'definitions', node1.definitions, node2.definitions);
+  }
+
+  @override
+  bool visitWhile(While node1, While node2) {
+    return testTokens(node1, node2, 'whileKeyword', node1.whileKeyword,
+            node2.whileKeyword) &&
+        testNodes(
+            node1, node2, 'condition', node1.condition, node2.condition) &&
+        testNodes(node1, node2, 'body', node1.body, node2.body);
+  }
+
+  @override
+  bool visitYield(Yield node1, Yield node2) {
+    return testTokens(
+            node1, node2, 'yieldToken', node1.yieldToken, node2.yieldToken) &&
+        testTokens(
+            node1, node2, 'starToken', node1.starToken, node2.starToken) &&
+        testTokens(node1, node2, 'endToken', node1.endToken, node2.endToken) &&
+        testNodes(
+            node1, node2, 'expression', node1.expression, node2.expression);
+  }
+
+  @override
+  bool visitNode(Node node1, Node node2) {
+    throw new UnsupportedError('Unexpected nodes: $node1 <> $node2');
+  }
+
+  @override
+  bool visitExpression(Expression node1, Expression node2) {
+    throw new UnsupportedError('Unexpected nodes: $node1 <> $node2');
+  }
+
+  @override
+  bool visitStatement(Statement node1, Statement node2) {
+    throw new UnsupportedError('Unexpected nodes: $node1 <> $node2');
+  }
+
+  @override
+  bool visitStringNode(StringNode node1, StringNode node2) {
+    throw new UnsupportedError('Unexpected nodes: $node1 <> $node2');
+  }
 }
diff --git a/pkg/compiler/lib/src/serialization/impact_serialization.dart b/pkg/compiler/lib/src/serialization/impact_serialization.dart
index 979ec15..af3cf5d 100644
--- a/pkg/compiler/lib/src/serialization/impact_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/impact_serialization.dart
@@ -1,4 +1,4 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -16,6 +16,7 @@
 
 import 'keys.dart';
 import 'serialization.dart';
+import 'serialization_util.dart';
 
 /// Visitor that serializes a [ResolutionImpact] object using an
 /// [ObjectEncoder].
@@ -60,21 +61,7 @@
   @override
   void visitDynamicUse(DynamicUse dynamicUse) {
     ObjectEncoder object = dynamicUses.createObject();
-    object.setEnum(Key.KIND, dynamicUse.selector.kind);
-
-    object.setInt(Key.ARGUMENTS,
-        dynamicUse.selector.callStructure.argumentCount);
-    object.setStrings(Key.NAMED_ARGUMENTS,
-        dynamicUse.selector.callStructure.namedArguments);
-
-    object.setString(Key.NAME,
-        dynamicUse.selector.memberName.text);
-    object.setBool(Key.IS_SETTER,
-        dynamicUse.selector.memberName.isSetter);
-    if (dynamicUse.selector.memberName.library != null) {
-      object.setElement(Key.LIBRARY,
-        dynamicUse.selector.memberName.library);
-    }
+    serializeSelector(dynamicUse.selector, object);
   }
 
   @override
@@ -109,15 +96,15 @@
   final Iterable<StaticUse> staticUses;
   final Iterable<TypeUse> typeUses;
 
-  DeserializedResolutionImpact({
-    this.constSymbolNames,
-    this.constantLiterals,
-    this.dynamicUses,
-    EnumSet<Feature> features,
-    this.listLiterals,
-    this.mapLiterals,
-    this.staticUses,
-    this.typeUses})
+  DeserializedResolutionImpact(
+      {this.constSymbolNames,
+      this.constantLiterals,
+      this.dynamicUses,
+      EnumSet<Feature> features,
+      this.listLiterals,
+      this.mapLiterals,
+      this.staticUses,
+      this.typeUses})
       : this._features = features;
 
   Iterable<Feature> get features => _features.iterable(Feature.values);
@@ -139,20 +126,8 @@
     List<DynamicUse> dynamicUses = <DynamicUse>[];
     for (int index = 0; index < dynamicUseDecoder.length; index++) {
       ObjectDecoder object = dynamicUseDecoder.getObject(index);
-      SelectorKind kind = object.getEnum(Key.KIND, SelectorKind.values);
-      int argumentCount = object.getInt(Key.ARGUMENTS);
-      List<String> namedArguments =
-          object.getStrings(Key.NAMED_ARGUMENTS, isOptional: true);
-      String name = object.getString(Key.NAME);
-      bool isSetter = object.getBool(Key.IS_SETTER);
-      LibraryElement library = object.getElement(Key.LIBRARY, isOptional: true);
-      dynamicUses.add(
-          new DynamicUse(
-              new Selector(
-                  kind,
-                  new Name(name, library, isSetter: isSetter),
-                  new CallStructure(argumentCount, namedArguments)),
-              null));
+      Selector selector = deserializeSelector(object);
+      dynamicUses.add(new DynamicUse(selector, null));
     }
 
     ListDecoder typeUseDecoder = objectDecoder.getList(Key.TYPE_USES);
@@ -183,8 +158,8 @@
         DartType type = useDecoder.getType(Key.TYPE);
         bool isConstant = useDecoder.getBool(Key.IS_CONST);
         bool isEmpty = useDecoder.getBool(Key.IS_EMPTY);
-        listLiterals.add(new ListLiteralUse(
-            type, isConstant: isConstant, isEmpty: isEmpty));
+        listLiterals.add(
+            new ListLiteralUse(type, isConstant: isConstant, isEmpty: isEmpty));
       }
     }
 
@@ -198,8 +173,8 @@
         DartType type = useDecoder.getType(Key.TYPE);
         bool isConstant = useDecoder.getBool(Key.IS_CONST);
         bool isEmpty = useDecoder.getBool(Key.IS_EMPTY);
-        mapLiterals.add(new MapLiteralUse(
-            type, isConstant: isConstant, isEmpty: isEmpty));
+        mapLiterals.add(
+            new MapLiteralUse(type, isConstant: isConstant, isEmpty: isEmpty));
       }
     }
 
diff --git a/pkg/compiler/lib/src/serialization/json_serializer.dart b/pkg/compiler/lib/src/serialization/json_serializer.dart
index 399bdbf..55ec647 100644
--- a/pkg/compiler/lib/src/serialization/json_serializer.dart
+++ b/pkg/compiler/lib/src/serialization/json_serializer.dart
@@ -14,8 +14,8 @@
   const JsonSerializationEncoder();
 
   String encode(ObjectValue objectValue) {
-    return new JsonEncoder.withIndent(' ').convert(
-        const JsonValueEncoder().convert(objectValue));
+    return new JsonEncoder.withIndent(' ')
+        .convert(const JsonValueEncoder().convert(objectValue));
   }
 }
 
@@ -120,6 +120,7 @@
   void visitDouble(DoubleValue value, String indentation) {
     buffer.write(value.value);
   }
+
   @override
   void visitElement(ElementValue value, String indentation) {
     buffer.write('Element(${value.id}):${value.element}');
@@ -209,4 +210,4 @@
   void visitUri(UriValue value, String indentation) {
     buffer.write('Uri(${value.value})');
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/serialization/keys.dart b/pkg/compiler/lib/src/serialization/keys.dart
index 7758be6..d74c820 100644
--- a/pkg/compiler/lib/src/serialization/keys.dart
+++ b/pkg/compiler/lib/src/serialization/keys.dart
@@ -9,6 +9,7 @@
   static const Key ALIAS = const Key('alias');
   static const Key ARGUMENTS = const Key('arguments');
   static const Key BOUND = const Key('bound');
+  static const Key CACHED_TYPE = const Key('cachedType');
   static const Key CALL_STRUCTURE = const Key('callStructure');
   static const Key CALL_TYPE = const Key('callType');
   static const Key CANONICAL_URI = const Key('canonicalUri');
@@ -34,6 +35,8 @@
   static const Key FIELD = const Key('field');
   static const Key FIELDS = const Key('fields');
   static const Key FUNCTION = const Key('function');
+  static const Key GET_OR_SET = const Key('getOrSet');
+  static const Key GETTER = const Key('getter');
   static const Key ID = const Key('id');
   static const Key IMPACTS = const Key('impacts');
   static const Key IMPORT = const Key('import');
@@ -71,6 +74,7 @@
   static const Key NAMED_ARGUMENTS = const Key('named-arguments');
   static const Key NAMED_PARAMETERS = const Key('named-parameters');
   static const Key NAMED_PARAMETER_TYPES = const Key('named-parameter-types');
+  static const Key NEW_STRUCTURE = const Key('newStructure');
   static const Key OFFSET = const Key('offset');
   static const Key OPERATOR = const Key('operator');
   static const Key OPTIONAL_PARAMETER_TYPES =
@@ -80,7 +84,12 @@
   static const Key PREFIX = const Key('prefix');
   static const Key RETURN_TYPE = const Key('return-type');
   static const Key RIGHT = const Key('right');
+  static const Key SELECTOR = const Key('selector');
+  static const Key SEMANTICS = const Key('semantics');
+  static const Key SEND_STRUCTURE = const Key('sendStructure');
+  static const Key SETTER = const Key('setter');
   static const Key STATIC_USES = const Key('static-uses');
+  static const Key SUB_KIND = const Key('subKind');
   static const Key SUPERTYPE = const Key('supertype');
   static const Key SUPERTYPES = const Key('supertypes');
   static const Key SYMBOLS = const Key('symbols');
diff --git a/pkg/compiler/lib/src/serialization/modelz.dart b/pkg/compiler/lib/src/serialization/modelz.dart
index 7c02c7a..e06cb03 100644
--- a/pkg/compiler/lib/src/serialization/modelz.dart
+++ b/pkg/compiler/lib/src/serialization/modelz.dart
@@ -10,32 +10,25 @@
 library dart2js.serialization.modelz;
 
 import '../common.dart';
-import '../common/resolution.dart' show
-    Resolution;
+import '../common/resolution.dart' show Resolution;
 import '../constants/constructors.dart';
 import '../constants/expressions.dart';
 import '../core_types.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    FunctionSignatureX;
+import '../elements/modelx.dart' show FunctionSignatureX;
 import '../elements/common.dart';
 import '../elements/visitor.dart';
 import '../io/source_file.dart';
 import '../ordered_typeset.dart';
 import '../resolution/class_members.dart' as class_members;
-import '../resolution/tree_elements.dart' show
-    TreeElements;
-import '../resolution/scope.dart' show
-    Scope;
+import '../resolution/tree_elements.dart' show TreeElements;
+import '../resolution/scope.dart' show Scope;
 import '../script.dart';
 import '../serialization/constant_serialization.dart';
-import '../tokens/token.dart' show
-    Token;
+import '../tokens/token.dart' show Token;
 import '../tree/tree.dart';
-import '../util/util.dart' show
-    Link,
-    LinkBuilder;
+import '../util/util.dart' show Link, LinkBuilder;
 
 import 'keys.dart';
 import 'serialization.dart';
@@ -259,7 +252,6 @@
   Iterable<Element> get values => _lookupMap.values;
 }
 
-
 abstract class AnalyzableElementMixin implements AnalyzableElement, ElementZ {
   @override
   bool get hasTreeElements => _unsupported('hasTreeElements');
@@ -268,7 +260,6 @@
   TreeElements get treeElements => _unsupported('treeElements');
 }
 
-
 abstract class AstElementMixin implements AstElement, ElementZ {
   @override
   bool get hasNode => _unsupported('hasNode');
@@ -295,8 +286,7 @@
 
   @override
   void forEachLocalMember(f(Element element)) {
-    MapDecoder members =
-        _decoder.getMap(Key.MEMBERS, isOptional: true);
+    MapDecoder members = _decoder.getMap(Key.MEMBERS, isOptional: true);
     if (members == null) return;
     members.forEachKey((String key) {
       Element member = members.getElement(key);
@@ -352,9 +342,7 @@
 }
 
 class LibraryElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         ContainerMixin,
-         LibraryElementCommon
+    with AnalyzableElementMixin, ContainerMixin, LibraryElementCommon
     implements LibraryElement {
   Uri _canonicalUri;
   CompilationUnitElement _entryCompilationUnit;
@@ -364,8 +352,7 @@
   ListedContainer _exportsMap;
   ListedContainer _importsMap;
 
-  LibraryElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  LibraryElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   ElementKind get kind => ElementKind.LIBRARY;
@@ -406,8 +393,7 @@
   @override
   Link<CompilationUnitElement> get compilationUnits {
     if (_compilationUnits == null) {
-      _compilationUnits =
-          toLink(_decoder.getElements(Key.COMPILATION_UNITS));
+      _compilationUnits = toLink(_decoder.getElements(Key.COMPILATION_UNITS));
     }
     return _compilationUnits;
   }
@@ -453,7 +439,10 @@
   }
 
   @override
-  Element findExported(String elementName) => _unsupported('findExported');
+  Element findExported(String elementName) {
+    _ensureExports();
+    return _exportsMap.lookup(elementName);
+  }
 
   void _ensureImports() {
     if (_importsMap == null) {
@@ -522,14 +511,12 @@
 }
 
 class CompilationUnitElementZ extends DeserializedElementZ
-    with LibraryMemberMixin,
-         CompilationUnitElementCommon
+    with LibraryMemberMixin, CompilationUnitElementCommon
     implements CompilationUnitElement {
   List<Element> _members;
   Script _script;
 
-  CompilationUnitElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  CompilationUnitElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   ElementKind get kind => ElementKind.COMPILATION_UNIT;
@@ -548,8 +535,7 @@
   @override
   void forEachLocalMember(f(Element element)) {
     if (_members == null) {
-      _members =
-          _decoder.getElements(Key.ELEMENTS, isOptional: true);
+      _members = _decoder.getElements(Key.ELEMENTS, isOptional: true);
     }
     _members.forEach(f);
   }
@@ -567,7 +553,6 @@
   String get name => script.name;
 }
 
-
 abstract class LibraryMemberMixin implements DeserializedElementZ {
   LibraryElement _library;
   CompilationUnitElement _compilationUnit;
@@ -644,8 +629,7 @@
   bool get isStatic => true;
 }
 
-abstract class TypedElementMixin
-    implements DeserializedElementZ, TypedElement {
+abstract class TypedElementMixin implements DeserializedElementZ, TypedElement {
   DartType _type;
 
   @override
@@ -700,7 +684,7 @@
       }
       if (optionalParametersAreNamed) {
         orderedOptionalParameters.sort((Element a, Element b) {
-            return a.name.compareTo(b.name);
+          return a.name.compareTo(b.name);
         });
       }
 
@@ -741,8 +725,8 @@
 
   @override
   bool get isExternal {
-    return _decoder.getBool(
-        Key.IS_EXTERNAL, isOptional: true, defaultValue: false);
+    return _decoder.getBool(Key.IS_EXTERNAL,
+        isOptional: true, defaultValue: false);
   }
 }
 
@@ -804,18 +788,18 @@
   void ensureResolved(Resolution resolution) {
     resolution.registerClass(this);
   }
-
 }
 
 class ClassElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         ClassElementCommon,
-         class_members.ClassMemberMixin,
-         ContainerMixin,
-         LibraryMemberMixin,
-         TypeDeclarationMixin<InterfaceType>,
-         ClassElementMixin
+    with
+        AnalyzableElementMixin,
+        AstElementMixin,
+        ClassElementCommon,
+        class_members.ClassMemberMixin,
+        ContainerMixin,
+        LibraryMemberMixin,
+        TypeDeclarationMixin<InterfaceType>,
+        ClassElementMixin
     implements ClassElement {
   bool _isObject;
   DartType _supertype;
@@ -823,8 +807,7 @@
   Link<DartType> _interfaces;
   FunctionType _callType;
 
-  ClassElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  ClassElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   List<DartType> _getTypeVariables() {
@@ -841,20 +824,19 @@
         _interfaces = const Link<DartType>();
       } else {
         _isObject = false;
-        _interfaces = toLink(
-            _decoder.getTypes(Key.INTERFACES, isOptional: true));
+        _interfaces =
+            toLink(_decoder.getTypes(Key.INTERFACES, isOptional: true));
         List<InterfaceType> mixins =
             _decoder.getTypes(Key.MIXINS, isOptional: true);
         for (InterfaceType mixin in mixins) {
           MixinApplicationElement mixinElement =
               new UnnamedMixinApplicationElementZ(this, supertype, mixin);
-          supertype = mixinElement.thisType.subst(
-              typeVariables, mixinElement.typeVariables);
+          supertype = mixinElement.thisType
+              .subst(typeVariables, mixinElement.typeVariables);
         }
         _supertype = supertype;
-        _allSupertypesAndSelf =
-            new OrderedTypeSetBuilder(this)
-              .createOrderedTypeSet(_supertype, _interfaces);
+        _allSupertypesAndSelf = new OrderedTypeSetBuilder(this)
+            .createOrderedTypeSet(_supertype, _interfaces);
         _callType = _decoder.getType(Key.CALL_TYPE, isOptional: true);
       }
     }
@@ -932,29 +914,26 @@
   }
 }
 
-
 class NamedMixinApplicationElementZ extends ClassElementZ
-    with MixinApplicationElementCommon,
-         MixinApplicationElementMixin {
+    with MixinApplicationElementCommon, MixinApplicationElementMixin {
   InterfaceType _mixinType;
 
-  NamedMixinApplicationElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  NamedMixinApplicationElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
-  InterfaceType get mixinType =>_mixinType ??= _decoder.getType(Key.MIXIN);
+  InterfaceType get mixinType => _mixinType ??= _decoder.getType(Key.MIXIN);
 }
 
-
 class UnnamedMixinApplicationElementZ extends ElementZ
-    with ClassElementCommon,
-         ClassElementMixin,
-         class_members.ClassMemberMixin,
-         TypeDeclarationMixin<InterfaceType>,
-         AnalyzableElementMixin,
-         AstElementMixin,
-         MixinApplicationElementCommon,
-         MixinApplicationElementMixin {
+    with
+        ClassElementCommon,
+        ClassElementMixin,
+        class_members.ClassMemberMixin,
+        TypeDeclarationMixin<InterfaceType>,
+        AnalyzableElementMixin,
+        AstElementMixin,
+        MixinApplicationElementCommon,
+        MixinApplicationElementMixin {
   final String name;
   final ClassElement _subclass;
   final InterfaceType supertype;
@@ -962,8 +941,7 @@
   OrderedTypeSet _allSupertypesAndSelf;
 
   UnnamedMixinApplicationElementZ(
-      ClassElement subclass,
-      InterfaceType supertype, InterfaceType mixin)
+      ClassElement subclass, InterfaceType supertype, InterfaceType mixin)
       : this._subclass = subclass,
         this.supertype = supertype,
         this.interfaces = const Link<DartType>().prepend(mixin),
@@ -1006,9 +984,8 @@
   @override
   OrderedTypeSet get allSupertypesAndSelf {
     if (_allSupertypesAndSelf == null) {
-      _allSupertypesAndSelf =
-          new OrderedTypeSetBuilder(this)
-            .createOrderedTypeSet(supertype, interfaces);
+      _allSupertypesAndSelf = new OrderedTypeSetBuilder(this)
+          .createOrderedTypeSet(supertype, interfaces);
     }
     return _allSupertypesAndSelf;
   }
@@ -1032,12 +1009,10 @@
   SourceSpan get sourcePosition => _subclass.sourcePosition;
 }
 
-
 class EnumClassElementZ extends ClassElementZ implements EnumClassElement {
   List<FieldElement> _enumValues;
 
-  EnumClassElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  EnumClassElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   bool get isEnumClass => true;
@@ -1052,18 +1027,18 @@
 }
 
 abstract class ConstructorElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         ClassMemberMixin,
-         FunctionTypedElementMixin,
-         ParametersMixin,
-         TypedElementMixin,
-         MemberElementMixin
+    with
+        AnalyzableElementMixin,
+        AstElementMixin,
+        ClassMemberMixin,
+        FunctionTypedElementMixin,
+        ParametersMixin,
+        TypedElementMixin,
+        MemberElementMixin
     implements ConstructorElement {
   ConstantConstructor _constantConstructor;
 
-  ConstructorElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  ConstructorElementZ(ObjectDecoder decoder) : super(decoder);
 
   accept(ElementVisitor visitor, arg) {
     return visitor.visitConstructorElement(this, arg);
@@ -1077,8 +1052,8 @@
 
   bool get isFromEnvironmentConstructor {
     return name == 'fromEnvironment' &&
-           library.isDartCore &&
-           (enclosingClass.name == 'bool' ||
+        library.isDartCore &&
+        (enclosingClass.name == 'bool' ||
             enclosingClass.name == 'int' ||
             enclosingClass.name == 'String');
   }
@@ -1105,17 +1080,17 @@
   }
 
   @override
-  ConstructorElement get definingConstructor  {
+  ConstructorElement get definingConstructor {
     return _unsupported('definingConstructor');
   }
 
   @override
-  ConstructorElement get effectiveTarget  {
+  ConstructorElement get effectiveTarget {
     return _unsupported('effectiveTarget');
   }
 
   @override
-  ConstructorElement get immediateRedirectionTarget  {
+  ConstructorElement get immediateRedirectionTarget {
     return _unsupported('immediateRedirectionTarget');
   }
 
@@ -1134,14 +1109,13 @@
   bool get isCyclicRedirection => _unsupported('isCyclicRedirection');
 
   @override
-  PrefixElement get redirectionDeferredPrefix  {
+  PrefixElement get redirectionDeferredPrefix {
     return _unsupported('redirectionDeferredPrefix');
   }
 }
 
 class GenerativeConstructorElementZ extends ConstructorElementZ {
-  GenerativeConstructorElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  GenerativeConstructorElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   ElementKind get kind => ElementKind.GENERATIVE_CONSTRUCTOR;
@@ -1152,9 +1126,7 @@
 }
 
 class FactoryConstructorElementZ extends ConstructorElementZ {
-
-  FactoryConstructorElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  FactoryConstructorElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   ElementKind get kind => ElementKind.FACTORY_CONSTRUCTOR;
@@ -1165,8 +1137,7 @@
 }
 
 class ForwardingConstructorElementZ extends ElementZ
-    with AnalyzableElementMixin,
-        AstElementMixin
+    with AnalyzableElementMixin, AstElementMixin
     implements ConstructorElement {
   final MixinApplicationElement enclosingClass;
   final ConstructorElement definingConstructor;
@@ -1210,7 +1181,7 @@
   }
 
   @override
-  bool get hasFunctionSignature  {
+  bool get hasFunctionSignature {
     return _unsupported('hasFunctionSignature');
   }
 
@@ -1277,7 +1248,6 @@
 
 abstract class MemberElementMixin
     implements DeserializedElementZ, MemberElement {
-
   @override
   MemberElement get memberContext => this;
 
@@ -1286,19 +1256,18 @@
 
   @override
   List<FunctionElement> get nestedClosures => const <FunctionElement>[];
-
 }
 
 abstract class FieldElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         TypedElementMixin,
-         MemberElementMixin
+    with
+        AnalyzableElementMixin,
+        AstElementMixin,
+        TypedElementMixin,
+        MemberElementMixin
     implements FieldElement {
   ConstantExpression _constant;
 
-  FieldElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  FieldElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   ElementKind get kind => ElementKind.FIELD;
@@ -1326,34 +1295,37 @@
   Expression get initializer => _unsupported('initializer');
 }
 
-
 class TopLevelFieldElementZ extends FieldElementZ with LibraryMemberMixin {
-  TopLevelFieldElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  TopLevelFieldElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 class StaticFieldElementZ extends FieldElementZ
     with ClassMemberMixin, StaticMemberMixin {
-  StaticFieldElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  StaticFieldElementZ(ObjectDecoder decoder) : super(decoder);
+}
+
+class EnumConstantElementZ extends StaticFieldElementZ
+    implements EnumConstantElement {
+  EnumConstantElementZ(ObjectDecoder decoder) : super(decoder);
+
+  int get index => _decoder.getInt(Key.INDEX);
 }
 
 class InstanceFieldElementZ extends FieldElementZ
     with ClassMemberMixin, InstanceMemberMixin {
-  InstanceFieldElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  InstanceFieldElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 abstract class FunctionElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         ParametersMixin,
-         FunctionTypedElementMixin,
-         TypedElementMixin,
-         MemberElementMixin
+    with
+        AnalyzableElementMixin,
+        AstElementMixin,
+        ParametersMixin,
+        FunctionTypedElementMixin,
+        TypedElementMixin,
+        MemberElementMixin
     implements MethodElement {
-  FunctionElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  FunctionElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   ElementKind get kind => ElementKind.FUNCTION;
@@ -1369,20 +1341,17 @@
 
 class TopLevelFunctionElementZ extends FunctionElementZ
     with LibraryMemberMixin {
-  TopLevelFunctionElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  TopLevelFunctionElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 class StaticFunctionElementZ extends FunctionElementZ
     with ClassMemberMixin, StaticMemberMixin {
-  StaticFunctionElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  StaticFunctionElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 class InstanceFunctionElementZ extends FunctionElementZ
     with ClassMemberMixin, InstanceMemberMixin {
-  InstanceFunctionElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  InstanceFunctionElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 abstract class LocalExecutableMixin
@@ -1422,14 +1391,14 @@
 }
 
 class LocalFunctionElementZ extends DeserializedElementZ
-    with LocalExecutableMixin,
-         AstElementMixin,
-         ParametersMixin,
-         FunctionTypedElementMixin,
-         TypedElementMixin
+    with
+        LocalExecutableMixin,
+        AstElementMixin,
+        ParametersMixin,
+        FunctionTypedElementMixin,
+        TypedElementMixin
     implements LocalFunctionElement {
-  LocalFunctionElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  LocalFunctionElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   accept(ElementVisitor visitor, arg) {
@@ -1441,19 +1410,18 @@
 }
 
 abstract class GetterElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         FunctionTypedElementMixin,
-         ParametersMixin,
-         TypedElementMixin,
-         MemberElementMixin
+    with
+        AnalyzableElementMixin,
+        AstElementMixin,
+        FunctionTypedElementMixin,
+        ParametersMixin,
+        TypedElementMixin,
+        MemberElementMixin
     implements GetterElement {
-
   AbstractFieldElement abstractField;
   SetterElement setter;
 
-  GetterElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  GetterElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   ElementKind get kind => ElementKind.GETTER;
@@ -1465,36 +1433,32 @@
 }
 
 class TopLevelGetterElementZ extends GetterElementZ with LibraryMemberMixin {
-  TopLevelGetterElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  TopLevelGetterElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 class StaticGetterElementZ extends GetterElementZ
     with ClassMemberMixin, StaticMemberMixin {
-  StaticGetterElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  StaticGetterElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 class InstanceGetterElementZ extends GetterElementZ
     with ClassMemberMixin, InstanceMemberMixin {
-  InstanceGetterElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  InstanceGetterElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 abstract class SetterElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         FunctionTypedElementMixin,
-         ParametersMixin,
-         TypedElementMixin,
-         MemberElementMixin
+    with
+        AnalyzableElementMixin,
+        AstElementMixin,
+        FunctionTypedElementMixin,
+        ParametersMixin,
+        TypedElementMixin,
+        MemberElementMixin
     implements SetterElement {
-
   AbstractFieldElement abstractField;
   GetterElement getter;
 
-  SetterElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  SetterElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   ElementKind get kind => ElementKind.SETTER;
@@ -1506,20 +1470,17 @@
 }
 
 class TopLevelSetterElementZ extends SetterElementZ with LibraryMemberMixin {
-  TopLevelSetterElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  TopLevelSetterElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 class StaticSetterElementZ extends SetterElementZ
     with ClassMemberMixin, StaticMemberMixin {
-  StaticSetterElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  StaticSetterElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 class InstanceSetterElementZ extends SetterElementZ
     with ClassMemberMixin, InstanceMemberMixin {
-  InstanceSetterElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  InstanceSetterElementZ(ObjectDecoder decoder) : super(decoder);
 }
 
 abstract class TypeDeclarationMixin<T extends GenericType>
@@ -1575,16 +1536,16 @@
 }
 
 class TypedefElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         LibraryMemberMixin,
-         ParametersMixin,
-         TypeDeclarationMixin<TypedefType>
+    with
+        AnalyzableElementMixin,
+        AstElementMixin,
+        LibraryMemberMixin,
+        ParametersMixin,
+        TypeDeclarationMixin<TypedefType>
     implements TypedefElement {
   DartType _alias;
 
-  TypedefElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  TypedefElementZ(ObjectDecoder decoder) : super(decoder);
 
   TypedefType _createType(List<DartType> typeArguments) {
     return new TypedefType(this, typeArguments);
@@ -1619,17 +1580,14 @@
 }
 
 class TypeVariableElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         TypedElementMixin
+    with AnalyzableElementMixin, AstElementMixin, TypedElementMixin
     implements TypeVariableElement {
   TypeDeclarationElement _typeDeclaration;
   TypeVariableType _type;
   DartType _bound;
   Name _memberName;
 
-  TypeVariableElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  TypeVariableElementZ(ObjectDecoder decoder) : super(decoder);
 
   Name get memberName {
     if (_memberName == null) {
@@ -1663,8 +1621,7 @@
   @override
   TypeDeclarationElement get typeDeclaration {
     if (_typeDeclaration == null) {
-      _typeDeclaration =
-          _decoder.getElement(Key.TYPE_DECLARATION);
+      _typeDeclaration = _decoder.getElement(Key.TYPE_DECLARATION);
     }
     return _typeDeclaration;
   }
@@ -1681,8 +1638,7 @@
 }
 
 class SyntheticTypeVariableElementZ extends ElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin
+    with AnalyzableElementMixin, AstElementMixin
     implements TypeVariableElement {
   final TypeDeclarationElement typeDeclaration;
   final int index;
@@ -1716,7 +1672,7 @@
   @override
   TypeVariableType get type {
     assert(invariant(this, _type != null,
-         message: "Type variable type has not been set on $this."));
+        message: "Type variable type has not been set on $this."));
     return _type;
   }
 
@@ -1743,9 +1699,7 @@
 }
 
 class ParameterElementZ extends DeserializedElementZ
-    with AnalyzableElementMixin,
-         AstElementMixin,
-         TypedElementMixin
+    with AnalyzableElementMixin, AstElementMixin, TypedElementMixin
     implements ParameterElement {
   FunctionElement _functionDeclaration;
   ConstantExpression _constant;
@@ -1814,8 +1768,7 @@
     implements InitializingFormalElement {
   FieldElement _fieldElement;
 
-  InitializingFormalElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  InitializingFormalElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   FieldElement get fieldElement {
@@ -1834,15 +1787,56 @@
   ElementKind get kind => ElementKind.INITIALIZING_FORMAL;
 }
 
+class LocalVariableElementZ extends DeserializedElementZ
+    with
+        AnalyzableElementMixin,
+        AstElementMixin,
+        LocalExecutableMixin,
+        TypedElementMixin
+    implements LocalVariableElement {
+  bool _isConst;
+  ConstantExpression _constant;
+
+  LocalVariableElementZ(ObjectDecoder decoder) : super(decoder);
+
+  @override
+  accept(ElementVisitor visitor, arg) {
+    return visitor.visitLocalVariableElement(this, arg);
+  }
+
+  @override
+  ElementKind get kind => ElementKind.VARIABLE;
+
+  @override
+  bool get isConst {
+    if (_isConst == null) {
+      _constant = _decoder.getConstant(Key.CONSTANT);
+      _isConst = _constant != null;
+    }
+    return _isConst;
+  }
+
+  @override
+  ConstantExpression get constant {
+    if (isConst) {
+      return _constant;
+    }
+    return null;
+  }
+
+  @override
+  Expression get initializer => _unsupported('initializer');
+}
+
 class ImportElementZ extends DeserializedElementZ
-    with LibraryMemberMixin implements ImportElement {
+    with LibraryMemberMixin
+    implements ImportElement {
   bool _isDeferred;
   PrefixElement _prefix;
   LibraryElement _importedLibrary;
   Uri _uri;
 
-  ImportElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  ImportElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   String get name => '';
@@ -1895,12 +1889,12 @@
 }
 
 class ExportElementZ extends DeserializedElementZ
-    with LibraryMemberMixin implements ExportElement {
+    with LibraryMemberMixin
+    implements ExportElement {
   LibraryElement _exportedLibrary;
   Uri _uri;
 
-  ExportElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  ExportElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   String get name => '';
@@ -1934,12 +1928,12 @@
 }
 
 class PrefixElementZ extends DeserializedElementZ
-    with LibraryMemberMixin implements PrefixElement {
+    with LibraryMemberMixin
+    implements PrefixElement {
   bool _isDeferred;
   ImportElement _deferredImport;
 
-  PrefixElementZ(ObjectDecoder decoder)
-      : super(decoder);
+  PrefixElementZ(ObjectDecoder decoder) : super(decoder);
 
   @override
   accept(ElementVisitor visitor, arg) => visitor.visitPrefixElement(this, arg);
diff --git a/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart b/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart
new file mode 100644
index 0000000..d25426e
--- /dev/null
+++ b/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart
@@ -0,0 +1,422 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js.serialization.resolved_ast;
+
+import '../common.dart';
+import '../common/resolution.dart';
+import '../constants/expressions.dart';
+import '../dart_types.dart';
+import '../diagnostics/diagnostic_listener.dart';
+import '../elements/elements.dart';
+import '../parser/parser.dart' show Parser;
+import '../parser/listener.dart' show ParserError;
+import '../parser/node_listener.dart' show NodeListener;
+import '../resolution/enum_creator.dart';
+import '../resolution/send_structure.dart';
+import '../resolution/tree_elements.dart';
+import '../tree/tree.dart';
+import '../tokens/token.dart';
+import '../universe/selector.dart';
+import 'keys.dart';
+import 'serialization.dart';
+import 'serialization_util.dart';
+
+/// Visitor that computes a node-index mapping.
+class AstIndexComputer extends Visitor {
+  final Map<Node, int> nodeIndices = <Node, int>{};
+  final List<Node> nodeList = <Node>[];
+
+  @override
+  visitNode(Node node) {
+    nodeIndices.putIfAbsent(node, () {
+      // Some nodes (like Modifier and empty NodeList) can be reused.
+      nodeList.add(node);
+      return nodeIndices.length;
+    });
+    node.visitChildren(this);
+  }
+}
+
+/// The kind of AST node. Used for determining how to deserialize
+/// [ResolvedAst]s.
+enum AstKind {
+  ENUM_CONSTRUCTOR,
+  ENUM_CONSTANT,
+  ENUM_INDEX_FIELD,
+  ENUM_VALUES_FIELD,
+  ENUM_TO_STRING,
+  FACTORY,
+  FIELD,
+  FUNCTION,
+}
+
+/// Serializer for [ResolvedAst]s.
+class ResolvedAstSerializer extends Visitor {
+  final ObjectEncoder objectEncoder;
+  final ResolvedAst resolvedAst;
+  final AstIndexComputer indexComputer = new AstIndexComputer();
+  final Map<int, ObjectEncoder> nodeData = <int, ObjectEncoder>{};
+  ListEncoder _nodeDataEncoder;
+
+  ResolvedAstSerializer(this.objectEncoder, this.resolvedAst);
+
+  AstElement get element => resolvedAst.element;
+
+  TreeElements get elements => resolvedAst.elements;
+
+  Node get root => resolvedAst.node;
+
+  Map<Node, int> get nodeIndices => indexComputer.nodeIndices;
+  List<Node> get nodeList => indexComputer.nodeList;
+
+  /// Serializes [resolvedAst] into [objectEncoder].
+  void serialize() {
+    objectEncoder.setUri(
+        Key.URI,
+        elements.analyzedElement.compilationUnit.script.resourceUri,
+        elements.analyzedElement.compilationUnit.script.resourceUri);
+    AstKind kind;
+    if (element.enclosingClass is EnumClassElement) {
+      if (element.name == 'index') {
+        kind = AstKind.ENUM_INDEX_FIELD;
+      } else if (element.name == 'values') {
+        kind = AstKind.ENUM_VALUES_FIELD;
+      } else if (element.name == 'toString') {
+        kind = AstKind.ENUM_TO_STRING;
+      } else if (element.isConstructor) {
+        kind = AstKind.ENUM_CONSTRUCTOR;
+      } else {
+        assert(invariant(element, element.isConst,
+            message: "Unexpected enum member: $element"));
+        kind = AstKind.ENUM_CONSTANT;
+      }
+    } else {
+      // [element] has a body that we'll need to re-parse. We store where to
+      // start parsing from.
+      objectEncoder.setInt(Key.OFFSET, root.getBeginToken().charOffset);
+      if (element.isFactoryConstructor) {
+        kind = AstKind.FACTORY;
+      } else if (element.isField) {
+        kind = AstKind.FIELD;
+      } else {
+        kind = AstKind.FUNCTION;
+        FunctionExpression functionExpression = root.asFunctionExpression();
+        if (functionExpression.getOrSet != null) {
+          // Getters/setters need the get/set token to be parsed.
+          objectEncoder.setInt(
+              Key.GET_OR_SET, functionExpression.getOrSet.charOffset);
+        }
+      }
+    }
+    objectEncoder.setEnum(Key.KIND, kind);
+    root.accept(indexComputer);
+    root.accept(this);
+  }
+
+  /// Computes the [ListEncoder] for serializing data for nodes.
+  ListEncoder get nodeDataEncoder {
+    if (_nodeDataEncoder == null) {
+      _nodeDataEncoder = objectEncoder.createList(Key.DATA);
+    }
+    return _nodeDataEncoder;
+  }
+
+  /// Computes the [ObjectEncoder] for serializing data for [node].
+  ObjectEncoder getNodeDataEncoder(Node node) {
+    int id = nodeIndices[node];
+    return nodeData.putIfAbsent(id, () {
+      ObjectEncoder objectEncoder = nodeDataEncoder.createObject();
+      objectEncoder.setInt(Key.ID, id);
+      return objectEncoder;
+    });
+  }
+
+  @override
+  visitNode(Node node) {
+    Element nodeElement = elements[node];
+    if (nodeElement != null) {
+      if (nodeElement.enclosingClass != null &&
+          nodeElement.enclosingClass.isUnnamedMixinApplication) {
+        // TODO(johnniwinther): Handle references to members of unnamed mixin
+        // applications.
+      } else {
+        getNodeDataEncoder(node).setElement(Key.ELEMENT, nodeElement);
+      }
+    }
+    DartType type = elements.getType(node);
+    if (type != null) {
+      getNodeDataEncoder(node).setType(Key.TYPE, type);
+    }
+    Selector selector = elements.getSelector(node);
+    if (selector != null) {
+      serializeSelector(
+          selector, getNodeDataEncoder(node).createObject(Key.SELECTOR));
+    }
+    ConstantExpression constant = elements.getConstant(node);
+    if (constant != null) {
+      getNodeDataEncoder(node).setConstant(Key.CONSTANT, constant);
+    }
+    DartType cachedType = elements.typesCache[node];
+    if (cachedType != null) {
+      getNodeDataEncoder(node).setType(Key.CACHED_TYPE, cachedType);
+    }
+    // TODO(johnniwinther): Serialize [JumpTarget]s.
+    node.visitChildren(this);
+  }
+
+  @override
+  visitSend(Send node) {
+    visitExpression(node);
+    SendStructure structure = elements.getSendStructure(node);
+    if (structure != null) {
+      serializeSendStructure(
+          structure, getNodeDataEncoder(node).createObject(Key.SEND_STRUCTURE));
+    }
+  }
+
+  @override
+  visitNewExpression(NewExpression node) {
+    visitExpression(node);
+    NewStructure structure = elements.getNewStructure(node);
+    if (structure != null) {
+      serializeNewStructure(
+          structure, getNodeDataEncoder(node).createObject(Key.NEW_STRUCTURE));
+    }
+  }
+
+  @override
+  visitGotoStatement(GotoStatement node) {
+    visitStatement(node);
+    // TODO(johnniwinther): Serialize [JumpTarget]s and [LabelDefinition]s.
+  }
+
+  @override
+  visitLabel(Label node) {
+    visitNode(node);
+    // TODO(johnniwinther): Serialize[LabelDefinition]s.
+  }
+}
+
+class ResolvedAstDeserializer {
+  /// Find the [Token] at [offset] searching through successors of [token].
+  static Token findTokenInStream(Token token, int offset) {
+    while (token.charOffset <= offset && token.next != token) {
+      if (token.charOffset == offset) {
+        return token;
+      }
+      token = token.next;
+    }
+    return null;
+  }
+
+  /// Deserializes the [ResolvedAst] for [element] from [objectDecoder].
+  /// [parsing] and [getBeginToken] are used for parsing the [Node] for
+  /// [element] from its source code.
+  static ResolvedAst deserialize(Element element, ObjectDecoder objectDecoder,
+      Parsing parsing, Token getBeginToken(Uri uri, int charOffset)) {
+    CompilationUnitElement compilationUnit = element.compilationUnit;
+    DiagnosticReporter reporter = parsing.reporter;
+
+    /// Returns the first [Token] for parsing the [Node] for [element].
+    Token readBeginToken() {
+      Uri uri = objectDecoder.getUri(Key.URI);
+      int charOffset = objectDecoder.getInt(Key.OFFSET);
+      Token beginToken = getBeginToken(uri, charOffset);
+      if (beginToken == null) {
+        reporter.internalError(
+            element, "No token found for $element in $uri @ $charOffset");
+      }
+      return beginToken;
+    }
+
+    /// Create the [Node] for the element by parsing the source code.
+    Node doParse(parse(Parser parser)) {
+      return parsing.measure(() {
+        return reporter.withCurrentElement(element, () {
+          CompilationUnitElement unit = element.compilationUnit;
+          NodeListener listener = new NodeListener(
+              parsing.getScannerOptionsFor(element), reporter, null);
+          listener.memberErrors = listener.memberErrors.prepend(false);
+          try {
+            Parser parser = new Parser(listener, parsing.parserOptions);
+            parse(parser);
+          } on ParserError catch (e) {
+            reporter.internalError(element, '$e');
+          }
+          return listener.popNode();
+        });
+      });
+    }
+
+    /// Computes the [Node] for the element based on the [AstKind].
+    Node computeNode(AstKind kind) {
+      switch (kind) {
+        case AstKind.ENUM_INDEX_FIELD:
+          AstBuilder builder = new AstBuilder(element.sourcePosition.begin);
+          Identifier identifier = builder.identifier('index');
+          VariableDefinitions node = new VariableDefinitions(
+              null,
+              builder.modifiers(isFinal: true),
+              new NodeList.singleton(identifier));
+          return node;
+        case AstKind.ENUM_VALUES_FIELD:
+          EnumClassElement enumClass = element.enclosingClass;
+          AstBuilder builder = new AstBuilder(element.sourcePosition.begin);
+          List<FieldElement> enumValues = <FieldElement>[];
+          List<Node> valueReferences = <Node>[];
+          for (EnumConstantElement enumConstant in enumClass.enumValues) {
+            AstBuilder valueBuilder =
+                new AstBuilder(enumConstant.sourcePosition.begin);
+            Identifier name = valueBuilder.identifier(enumConstant.name);
+
+            // Add reference for the `values` field.
+            valueReferences.add(valueBuilder.reference(name));
+          }
+
+          Identifier valuesIdentifier = builder.identifier('values');
+          // TODO(johnniwinther): Add type argument.
+          Expression initializer =
+              builder.listLiteral(valueReferences, isConst: true);
+
+          Node definition =
+              builder.createDefinition(valuesIdentifier, initializer);
+          VariableDefinitions node = new VariableDefinitions(
+              null,
+              builder.modifiers(isStatic: true, isConst: true),
+              new NodeList.singleton(definition));
+          return node;
+        case AstKind.ENUM_TO_STRING:
+          EnumClassElement enumClass = element.enclosingClass;
+          AstBuilder builder = new AstBuilder(element.sourcePosition.begin);
+          List<LiteralMapEntry> mapEntries = <LiteralMapEntry>[];
+          for (EnumConstantElement enumConstant in enumClass.enumValues) {
+            AstBuilder valueBuilder =
+                new AstBuilder(enumConstant.sourcePosition.begin);
+            Identifier name = valueBuilder.identifier(enumConstant.name);
+
+            // Add map entry for `toString` implementation.
+            mapEntries.add(valueBuilder.mapLiteralEntry(
+                valueBuilder.literalInt(enumConstant.index),
+                valueBuilder
+                    .literalString('${enumClass.name}.${name.source}')));
+          }
+
+          // TODO(johnniwinther): Support return type. Note `String` might be
+          // prefixed or not imported within the current library.
+          FunctionExpression toStringNode = builder.functionExpression(
+              Modifiers.EMPTY,
+              'toString',
+              builder.argumentList([]),
+              builder.returnStatement(builder.indexGet(
+                  builder.mapLiteral(mapEntries, isConst: true),
+                  builder.reference(builder.identifier('index')))));
+          return toStringNode;
+        case AstKind.ENUM_CONSTRUCTOR:
+          AstBuilder builder = new AstBuilder(element.sourcePosition.begin);
+          VariableDefinitions indexDefinition =
+              builder.initializingFormal('index');
+          FunctionExpression constructorNode = builder.functionExpression(
+              builder.modifiers(isConst: true),
+              element.enclosingClass.name,
+              builder.argumentList([indexDefinition]),
+              builder.emptyStatement());
+          return constructorNode;
+        case AstKind.ENUM_CONSTANT:
+          EnumConstantElement enumConstant = element;
+          EnumClassElement enumClass = element.enclosingClass;
+          int index = enumConstant.index;
+          AstBuilder builder = new AstBuilder(element.sourcePosition.begin);
+          Identifier name = builder.identifier(element.name);
+
+          Expression initializer = builder.newExpression(
+              enumClass.name, builder.argumentList([builder.literalInt(index)]),
+              isConst: true);
+          SendSet definition = builder.createDefinition(name, initializer);
+
+          VariableDefinitions node = new VariableDefinitions(
+              null,
+              builder.modifiers(isStatic: true, isConst: true),
+              new NodeList.singleton(definition));
+          return node;
+        case AstKind.FACTORY:
+          Token beginToken = readBeginToken();
+          return doParse((parser) => parser.parseFactoryMethod(beginToken));
+        case AstKind.FIELD:
+          Token beginToken = readBeginToken();
+          return doParse((parser) => parser.parseMember(beginToken));
+        case AstKind.FUNCTION:
+          Token beginToken = readBeginToken();
+          int getOrSetOffset =
+              objectDecoder.getInt(Key.GET_OR_SET, isOptional: true);
+          Token getOrSet;
+          if (getOrSetOffset != null) {
+            getOrSet = findTokenInStream(beginToken, getOrSetOffset);
+            if (getOrSet == null) {
+              reporter.internalError(
+                  element,
+                  "No token found for $element in "
+                  "${objectDecoder.getUri(Key.URI)} @ $getOrSetOffset");
+            }
+          }
+          return doParse((parser) {
+            parser.parseFunction(beginToken, getOrSet);
+          });
+      }
+    }
+
+    AstKind kind = objectDecoder.getEnum(Key.KIND, AstKind.values);
+    Node root = computeNode(kind);
+    TreeElementMapping elements = new TreeElementMapping(element);
+    AstIndexComputer indexComputer = new AstIndexComputer();
+    Map<Node, int> nodeIndices = indexComputer.nodeIndices;
+    List<Node> nodeList = indexComputer.nodeList;
+    root.accept(indexComputer);
+    ListDecoder dataDecoder = objectDecoder.getList(Key.DATA);
+    if (dataDecoder != null) {
+      for (int i = 0; i < dataDecoder.length; i++) {
+        ObjectDecoder objectDecoder = dataDecoder.getObject(i);
+        int id = objectDecoder.getInt(Key.ID);
+        Node node = nodeList[id];
+        Element nodeElement =
+            objectDecoder.getElement(Key.ELEMENT, isOptional: true);
+        if (nodeElement != null) {
+          elements[node] = nodeElement;
+        }
+        DartType type = objectDecoder.getType(Key.TYPE, isOptional: true);
+        if (type != null) {
+          elements.setType(node, type);
+        }
+        ObjectDecoder selectorDecoder =
+            objectDecoder.getObject(Key.SELECTOR, isOptional: true);
+        if (selectorDecoder != null) {
+          elements.setSelector(node, deserializeSelector(selectorDecoder));
+        }
+        ConstantExpression constant =
+            objectDecoder.getConstant(Key.CONSTANT, isOptional: true);
+        if (constant != null) {
+          elements.setConstant(node, constant);
+        }
+        DartType cachedType =
+            objectDecoder.getType(Key.CACHED_TYPE, isOptional: true);
+        if (cachedType != null) {
+          elements.typesCache[node] = cachedType;
+        }
+        ObjectDecoder sendStructureDecoder =
+            objectDecoder.getObject(Key.SEND_STRUCTURE, isOptional: true);
+        if (sendStructureDecoder != null) {
+          elements.setSendStructure(
+              node, deserializeSendStructure(sendStructureDecoder));
+        }
+        ObjectDecoder newStructureDecoder =
+            objectDecoder.getObject(Key.NEW_STRUCTURE, isOptional: true);
+        if (newStructureDecoder != null) {
+          elements.setNewStructure(
+              node, deserializeNewStructure(newStructureDecoder));
+        }
+      }
+    }
+    return new ResolvedAst(element, root, elements);
+  }
+}
diff --git a/pkg/compiler/lib/src/serialization/serialization.dart b/pkg/compiler/lib/src/serialization/serialization.dart
index 6f046d4..1521f39 100644
--- a/pkg/compiler/lib/src/serialization/serialization.dart
+++ b/pkg/compiler/lib/src/serialization/serialization.dart
@@ -27,7 +27,7 @@
   /// Creates an [ObjectEncoder] in the scope of [serializer] that uses [map]
   /// as its internal storage.
   ObjectEncoder(Serializer serializer, Map<dynamic, Value> map)
-        : super(serializer, map);
+      : super(serializer, map);
 
   String get _name => 'Object';
 }
@@ -97,7 +97,6 @@
     _map[key] = value;
   }
 
-
   /// Maps the [key] entry to the enum [value] in the encoded object.
   void setEnum(K key, var value) {
     _checkKey(key);
@@ -127,8 +126,8 @@
   void setElements(K key, Iterable<Element> elements) {
     _checkKey(key);
     if (elements.isNotEmpty) {
-      _map[key] = new ListValue(
-          elements.map(_serializer.createElementValue).toList());
+      _map[key] =
+          new ListValue(elements.map(_serializer.createElementValue).toList());
     }
   }
 
@@ -252,8 +251,7 @@
 class ObjectDecoder extends AbstractDecoder<Key> {
   /// Creates an [ObjectDecoder] that decodes [map] into deserialized values
   /// using [deserializer] to create canonicalized values.
-  ObjectDecoder(Deserializer deserializer, Map map)
-      : super(deserializer, map);
+  ObjectDecoder(Deserializer deserializer, Map map) : super(deserializer, map);
 
   @override
   _getKeyValue(Key key) => _deserializer.decoder.getObjectPropertyValue(key);
@@ -695,7 +693,7 @@
           ObjectEncoder encoder = new ObjectEncoder(this, dataObject.map);
           encoder.setUri(Key.URI, library.canonicalUri, library.canonicalUri);
         } else if (element.isStatic) {
-          Value classId =_getElementId(element.enclosingClass);
+          Value classId = _getElementId(element.enclosingClass);
           _elementMap[element] = dataObject = new DataObject(
               new IntValue(_elementMap.length),
               new EnumValue(SerializedElementKind.EXTERNAL_STATIC_MEMBER));
@@ -703,7 +701,7 @@
           encoder.setValue(Key.CLASS, classId);
           encoder.setString(Key.NAME, element.name);
         } else if (element.isConstructor) {
-          Value classId =_getElementId(element.enclosingClass);
+          Value classId = _getElementId(element.enclosingClass);
           _elementMap[element] = dataObject = new DataObject(
               new IntValue(_elementMap.length),
               new EnumValue(SerializedElementKind.EXTERNAL_CONSTRUCTOR));
@@ -711,7 +709,7 @@
           encoder.setValue(Key.CLASS, classId);
           encoder.setString(Key.NAME, element.name);
         } else {
-          Value libraryId =_getElementId(element.library);
+          Value libraryId = _getElementId(element.library);
           _elementMap[element] = dataObject = new DataObject(
               new IntValue(_elementMap.length),
               new EnumValue(SerializedElementKind.EXTERNAL_LIBRARY_MEMBER));
@@ -780,8 +778,8 @@
 
   /// Encodes [constant] into the [ObjectValue] of [dataObject].
   void _encodeConstant(ConstantExpression constant, DataObject dataObject) {
-    const ConstantSerializer().visit(constant,
-        new ObjectEncoder(this, dataObject.map));
+    const ConstantSerializer()
+        .visit(constant, new ObjectEncoder(this, dataObject.map));
   }
 
   /// Creates the [ConstantValue] for [constant].
@@ -997,7 +995,7 @@
       // this case.
       for (DeserializerPlugin plugin in plugins) {
         plugin.onElement(element,
-          (String tag) => pluginData?.getObject(tag, isOptional: true));
+            (String tag) => pluginData?.getObject(tag, isOptional: true));
       }
     }
     return element;
diff --git a/pkg/compiler/lib/src/serialization/serialization_util.dart b/pkg/compiler/lib/src/serialization/serialization_util.dart
new file mode 100644
index 0000000..cd5e77a
--- /dev/null
+++ b/pkg/compiler/lib/src/serialization/serialization_util.dart
@@ -0,0 +1,481 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js.serialization.util;
+
+import '../dart_types.dart';
+import '../common/resolution.dart';
+import '../constants/expressions.dart';
+import '../elements/elements.dart';
+import '../resolution/access_semantics.dart';
+import '../resolution/operators.dart';
+import '../resolution/send_structure.dart';
+import '../universe/call_structure.dart';
+import '../universe/selector.dart';
+import '../universe/world_impact.dart';
+import '../universe/use.dart';
+import '../util/enumset.dart';
+
+import 'keys.dart';
+import 'serialization.dart';
+
+/// Serialize [name] into [encoder].
+void serializeName(Name name, ObjectEncoder encoder) {
+  encoder.setString(Key.NAME, name.text);
+  encoder.setBool(Key.IS_SETTER, name.isSetter);
+  if (name.library != null) {
+    encoder.setElement(Key.LIBRARY, name.library);
+  }
+}
+
+/// Deserialize a [Name] from [decoder].
+Name deserializeName(ObjectDecoder decoder) {
+  String name = decoder.getString(Key.NAME);
+  bool isSetter = decoder.getBool(Key.IS_SETTER);
+  LibraryElement library = decoder.getElement(Key.LIBRARY, isOptional: true);
+  return new Name(name, library, isSetter: isSetter);
+}
+
+/// Serialize [selector] into [encoder].
+void serializeSelector(Selector selector, ObjectEncoder encoder) {
+  encoder.setEnum(Key.KIND, selector.kind);
+
+  encoder.setInt(Key.ARGUMENTS, selector.callStructure.argumentCount);
+  encoder.setStrings(
+      Key.NAMED_ARGUMENTS, selector.callStructure.namedArguments);
+  serializeName(selector.memberName, encoder);
+}
+
+/// Deserialize a [Selector] from [decoder].
+Selector deserializeSelector(ObjectDecoder decoder) {
+  SelectorKind kind = decoder.getEnum(Key.KIND, SelectorKind.values);
+  int argumentCount = decoder.getInt(Key.ARGUMENTS);
+  List<String> namedArguments =
+      decoder.getStrings(Key.NAMED_ARGUMENTS, isOptional: true);
+  String name = decoder.getString(Key.NAME);
+  bool isSetter = decoder.getBool(Key.IS_SETTER);
+  LibraryElement library = decoder.getElement(Key.LIBRARY, isOptional: true);
+  return new Selector(kind, deserializeName(decoder),
+      new CallStructure(argumentCount, namedArguments));
+}
+
+/// Serialize [sendStructure] into [encoder].
+void serializeSendStructure(
+    SendStructure sendStructure, ObjectEncoder encoder) {
+  encoder.setEnum(Key.KIND, sendStructure.kind);
+  switch (sendStructure.kind) {
+    case SendStructureKind.IF_NULL:
+    case SendStructureKind.LOGICAL_AND:
+    case SendStructureKind.LOGICAL_OR:
+    case SendStructureKind.NOT:
+    case SendStructureKind.INVALID_UNARY:
+    case SendStructureKind.INVALID_BINARY:
+      // No additional properties.
+      break;
+    case SendStructureKind.IS:
+      IsStructure structure = sendStructure;
+      encoder.setType(Key.TYPE, structure.type);
+      break;
+    case SendStructureKind.IS_NOT:
+      IsNotStructure structure = sendStructure;
+      encoder.setType(Key.TYPE, structure.type);
+      break;
+    case SendStructureKind.AS:
+      AsStructure structure = sendStructure;
+      encoder.setType(Key.TYPE, structure.type);
+      break;
+    case SendStructureKind.INVOKE:
+      InvokeStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      serializeSelector(structure.selector, encoder.createObject(Key.SELECTOR));
+      break;
+    case SendStructureKind.INCOMPATIBLE_INVOKE:
+      IncompatibleInvokeStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      serializeSelector(structure.selector, encoder.createObject(Key.SELECTOR));
+      break;
+    case SendStructureKind.GET:
+      GetStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      break;
+    case SendStructureKind.SET:
+      SetStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      break;
+    case SendStructureKind.UNARY:
+      UnaryStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      encoder.setEnum(Key.OPERATOR, structure.operator.kind);
+      break;
+    case SendStructureKind.INDEX:
+      IndexStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      break;
+    case SendStructureKind.EQUALS:
+      EqualsStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      break;
+    case SendStructureKind.NOT_EQUALS:
+      NotEqualsStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      break;
+    case SendStructureKind.BINARY:
+      BinaryStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      encoder.setEnum(Key.OPERATOR, structure.operator.kind);
+      break;
+    case SendStructureKind.INDEX_SET:
+      IndexSetStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      break;
+    case SendStructureKind.INDEX_PREFIX:
+      IndexPrefixStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      encoder.setEnum(Key.OPERATOR, structure.operator.kind);
+      break;
+    case SendStructureKind.INDEX_POSTFIX:
+      IndexPostfixStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      encoder.setEnum(Key.OPERATOR, structure.operator.kind);
+      break;
+    case SendStructureKind.COMPOUND:
+      CompoundStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      encoder.setEnum(Key.OPERATOR, structure.operator.kind);
+      break;
+    case SendStructureKind.SET_IF_NULL:
+      SetIfNullStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      break;
+    case SendStructureKind.COMPOUND_INDEX_SET:
+      CompoundIndexSetStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      encoder.setEnum(Key.OPERATOR, structure.operator.kind);
+      break;
+    case SendStructureKind.INDEX_SET_IF_NULL:
+      IndexSetIfNullStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      break;
+    case SendStructureKind.PREFIX:
+      PrefixStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      encoder.setEnum(Key.OPERATOR, structure.operator.kind);
+      break;
+    case SendStructureKind.POSTFIX:
+      PostfixStructure structure = sendStructure;
+      serializeAccessSemantics(
+          structure.semantics, encoder.createObject(Key.SEMANTICS));
+      encoder.setEnum(Key.OPERATOR, structure.operator.kind);
+      break;
+    case SendStructureKind.DEFERRED_PREFIX:
+      DeferredPrefixStructure structure = sendStructure;
+      encoder.setElement(Key.PREFIX, structure.prefix);
+      serializeSendStructure(
+          structure.sendStructure, encoder.createObject(Key.SEND_STRUCTURE));
+      break;
+  }
+}
+
+/// Deserialize a [SendStructure] from [decoder].
+SendStructure deserializeSendStructure(ObjectDecoder decoder) {
+  SendStructureKind kind = decoder.getEnum(Key.KIND, SendStructureKind.values);
+  switch (kind) {
+    case SendStructureKind.IF_NULL:
+      return const IfNullStructure();
+    case SendStructureKind.LOGICAL_AND:
+      return const LogicalAndStructure();
+    case SendStructureKind.LOGICAL_OR:
+      return const LogicalOrStructure();
+    case SendStructureKind.IS:
+      return new IsStructure(decoder.getType(Key.TYPE));
+    case SendStructureKind.IS_NOT:
+      return new IsNotStructure(decoder.getType(Key.TYPE));
+    case SendStructureKind.AS:
+      return new AsStructure(decoder.getType(Key.TYPE));
+    case SendStructureKind.INVOKE:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      Selector selector = deserializeSelector(decoder.getObject(Key.SELECTOR));
+      return new InvokeStructure(semantics, selector);
+    case SendStructureKind.INCOMPATIBLE_INVOKE:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      Selector selector = deserializeSelector(decoder.getObject(Key.SELECTOR));
+      return new IncompatibleInvokeStructure(semantics, selector);
+    case SendStructureKind.GET:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new GetStructure(semantics);
+    case SendStructureKind.SET:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new SetStructure(semantics);
+    case SendStructureKind.NOT:
+      return const NotStructure();
+    case SendStructureKind.UNARY:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new UnaryStructure(
+          semantics,
+          UnaryOperator.fromKind(
+              decoder.getEnum(Key.OPERATOR, UnaryOperatorKind.values)));
+    case SendStructureKind.INVALID_UNARY:
+      return new InvalidUnaryStructure();
+    case SendStructureKind.INDEX:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new IndexStructure(semantics);
+    case SendStructureKind.EQUALS:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new EqualsStructure(semantics);
+    case SendStructureKind.NOT_EQUALS:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new NotEqualsStructure(semantics);
+    case SendStructureKind.BINARY:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new BinaryStructure(
+          semantics,
+          BinaryOperator.fromKind(
+              decoder.getEnum(Key.OPERATOR, BinaryOperatorKind.values)));
+    case SendStructureKind.INVALID_BINARY:
+      return const InvalidBinaryStructure();
+    case SendStructureKind.INDEX_SET:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new IndexSetStructure(semantics);
+    case SendStructureKind.INDEX_PREFIX:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new IndexPrefixStructure(
+          semantics,
+          IncDecOperator.fromKind(
+              decoder.getEnum(Key.OPERATOR, IncDecOperatorKind.values)));
+    case SendStructureKind.INDEX_POSTFIX:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new IndexPostfixStructure(
+          semantics,
+          IncDecOperator.fromKind(
+              decoder.getEnum(Key.OPERATOR, IncDecOperatorKind.values)));
+    case SendStructureKind.COMPOUND:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new CompoundStructure(
+          semantics,
+          AssignmentOperator.fromKind(
+              decoder.getEnum(Key.OPERATOR, AssignmentOperatorKind.values)));
+    case SendStructureKind.SET_IF_NULL:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new SetIfNullStructure(semantics);
+    case SendStructureKind.COMPOUND_INDEX_SET:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new CompoundIndexSetStructure(
+          semantics,
+          AssignmentOperator.fromKind(
+              decoder.getEnum(Key.OPERATOR, AssignmentOperatorKind.values)));
+    case SendStructureKind.INDEX_SET_IF_NULL:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new IndexSetIfNullStructure(semantics);
+    case SendStructureKind.PREFIX:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new PrefixStructure(
+          semantics,
+          IncDecOperator.fromKind(
+              decoder.getEnum(Key.OPERATOR, IncDecOperatorKind.values)));
+    case SendStructureKind.POSTFIX:
+      AccessSemantics semantics =
+          deserializeAccessSemantics(decoder.getObject(Key.SEMANTICS));
+      return new PostfixStructure(
+          semantics,
+          IncDecOperator.fromKind(
+              decoder.getEnum(Key.OPERATOR, IncDecOperatorKind.values)));
+    case SendStructureKind.DEFERRED_PREFIX:
+      PrefixElement prefix = decoder.getElement(Key.PREFIX);
+      SendStructure sendStructure =
+          deserializeSendStructure(decoder.getObject(Key.SEND_STRUCTURE));
+      return new DeferredPrefixStructure(prefix, sendStructure);
+  }
+}
+
+/// Serialize [newStructure] into [encoder].
+void serializeNewStructure(NewStructure newStructure, ObjectEncoder encoder) {
+  encoder.setEnum(Key.KIND, newStructure.kind);
+  switch (newStructure.kind) {
+    case NewStructureKind.NEW_INVOKE:
+      NewInvokeStructure structure = newStructure;
+      encoder.setEnum(Key.SUB_KIND, structure.semantics.kind);
+      encoder.setElement(Key.ELEMENT, structure.semantics.element);
+      encoder.setType(Key.TYPE, structure.semantics.type);
+      serializeSelector(structure.selector, encoder.createObject(Key.SELECTOR));
+      break;
+    case NewStructureKind.CONST_INVOKE:
+      ConstInvokeStructure structure = newStructure;
+      encoder.setEnum(Key.SUB_KIND, structure.constantInvokeKind);
+      encoder.setConstant(Key.CONSTANT, structure.constant);
+      break;
+    case NewStructureKind.LATE_CONST:
+      throw new UnsupportedError(
+          'Unsupported NewStructure kind ${newStructure.kind}.');
+  }
+}
+
+/// Deserialize a [NewStructure] from [decoder].
+NewStructure deserializeNewStructure(ObjectDecoder decoder) {
+  NewStructureKind kind = decoder.getEnum(Key.KIND, NewStructureKind.values);
+  switch (kind) {
+    case NewStructureKind.NEW_INVOKE:
+      ConstructorAccessKind constructorAccessKind =
+          decoder.getEnum(Key.SUB_KIND, ConstructorAccessKind.values);
+      Element element = decoder.getElement(Key.ELEMENT);
+      DartType type = decoder.getType(Key.TYPE);
+      ConstructorAccessSemantics semantics =
+          new ConstructorAccessSemantics(constructorAccessKind, element, type);
+      Selector selector = deserializeSelector(decoder.getObject(Key.SELECTOR));
+      return new NewInvokeStructure(semantics, selector);
+
+    case NewStructureKind.CONST_INVOKE:
+      ConstantInvokeKind constantInvokeKind =
+          decoder.getEnum(Key.SUB_KIND, ConstantInvokeKind.values);
+      ConstantExpression constant = decoder.getConstant(Key.CONSTANT);
+      return new ConstInvokeStructure(constantInvokeKind, constant);
+    case NewStructureKind.LATE_CONST:
+      throw new UnsupportedError('Unsupported NewStructure kind $kind.');
+  }
+}
+
+/// Serialize [semantics] into [encoder].
+void serializeAccessSemantics(
+    AccessSemantics semantics, ObjectEncoder encoder) {
+  encoder.setEnum(Key.KIND, semantics.kind);
+  switch (semantics.kind) {
+    case AccessKind.EXPRESSION:
+    case AccessKind.THIS:
+      // No additional properties.
+      break;
+    case AccessKind.THIS_PROPERTY:
+    case AccessKind.DYNAMIC_PROPERTY:
+    case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
+      serializeName(semantics.name, encoder);
+      break;
+    case AccessKind.CLASS_TYPE_LITERAL:
+    case AccessKind.TYPEDEF_TYPE_LITERAL:
+    case AccessKind.DYNAMIC_TYPE_LITERAL:
+      encoder.setConstant(Key.CONSTANT, semantics.constant);
+      break;
+    case AccessKind.LOCAL_FUNCTION:
+    case AccessKind.LOCAL_VARIABLE:
+    case AccessKind.FINAL_LOCAL_VARIABLE:
+    case AccessKind.PARAMETER:
+    case AccessKind.FINAL_PARAMETER:
+    case AccessKind.STATIC_FIELD:
+    case AccessKind.FINAL_STATIC_FIELD:
+    case AccessKind.STATIC_METHOD:
+    case AccessKind.STATIC_GETTER:
+    case AccessKind.STATIC_SETTER:
+    case AccessKind.TOPLEVEL_FIELD:
+    case AccessKind.FINAL_TOPLEVEL_FIELD:
+    case AccessKind.TOPLEVEL_METHOD:
+    case AccessKind.TOPLEVEL_GETTER:
+    case AccessKind.TOPLEVEL_SETTER:
+    case AccessKind.SUPER_FIELD:
+    case AccessKind.SUPER_FINAL_FIELD:
+    case AccessKind.SUPER_METHOD:
+    case AccessKind.SUPER_GETTER:
+    case AccessKind.SUPER_SETTER:
+    case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
+    case AccessKind.UNRESOLVED:
+    case AccessKind.UNRESOLVED_SUPER:
+    case AccessKind.INVALID:
+      encoder.setElement(Key.ELEMENT, semantics.element);
+      break;
+    case AccessKind.COMPOUND:
+      CompoundAccessSemantics compoundAccess = semantics;
+      encoder.setEnum(Key.SUB_KIND, compoundAccess.compoundAccessKind);
+      encoder.setElement(Key.GETTER, semantics.getter);
+      encoder.setElement(Key.SETTER, semantics.setter);
+      break;
+    case AccessKind.CONSTANT:
+      throw new UnsupportedError('Unsupported access kind: ${semantics.kind}');
+  }
+}
+
+/// Deserialize a [AccessSemantics] from [decoder].
+AccessSemantics deserializeAccessSemantics(ObjectDecoder decoder) {
+  AccessKind kind = decoder.getEnum(Key.KIND, AccessKind.values);
+  switch (kind) {
+    case AccessKind.EXPRESSION:
+      return const DynamicAccess.expression();
+    case AccessKind.THIS:
+      return const DynamicAccess.thisAccess();
+    case AccessKind.THIS_PROPERTY:
+      return new DynamicAccess.thisProperty(deserializeName(decoder));
+    case AccessKind.DYNAMIC_PROPERTY:
+      return new DynamicAccess.dynamicProperty(deserializeName(decoder));
+    case AccessKind.CONDITIONAL_DYNAMIC_PROPERTY:
+      return new DynamicAccess.ifNotNullProperty(deserializeName(decoder));
+    case AccessKind.CLASS_TYPE_LITERAL:
+    case AccessKind.TYPEDEF_TYPE_LITERAL:
+    case AccessKind.DYNAMIC_TYPE_LITERAL:
+      return new ConstantAccess(kind, decoder.getConstant(Key.CONSTANT));
+
+    case AccessKind.LOCAL_FUNCTION:
+    case AccessKind.LOCAL_VARIABLE:
+    case AccessKind.FINAL_LOCAL_VARIABLE:
+    case AccessKind.PARAMETER:
+    case AccessKind.FINAL_PARAMETER:
+    case AccessKind.STATIC_FIELD:
+    case AccessKind.FINAL_STATIC_FIELD:
+    case AccessKind.STATIC_METHOD:
+    case AccessKind.STATIC_GETTER:
+    case AccessKind.STATIC_SETTER:
+    case AccessKind.TOPLEVEL_FIELD:
+    case AccessKind.FINAL_TOPLEVEL_FIELD:
+    case AccessKind.TOPLEVEL_METHOD:
+    case AccessKind.TOPLEVEL_GETTER:
+    case AccessKind.TOPLEVEL_SETTER:
+    case AccessKind.SUPER_FIELD:
+    case AccessKind.SUPER_FINAL_FIELD:
+    case AccessKind.SUPER_METHOD:
+    case AccessKind.SUPER_GETTER:
+    case AccessKind.SUPER_SETTER:
+    case AccessKind.TYPE_PARAMETER_TYPE_LITERAL:
+    case AccessKind.UNRESOLVED:
+    case AccessKind.UNRESOLVED_SUPER:
+    case AccessKind.INVALID:
+      return new StaticAccess.internal(kind, decoder.getElement(Key.ELEMENT));
+
+    case AccessKind.COMPOUND:
+      CompoundAccessKind compoundAccessKind =
+          decoder.getEnum(Key.SUB_KIND, CompoundAccessKind.values);
+      Element getter = decoder.getElement(Key.GETTER);
+      Element setter = decoder.getElement(Key.SETTER);
+      return new CompoundAccessSemantics(compoundAccessKind, getter, setter);
+    case AccessKind.CONSTANT:
+      throw new UnsupportedError('Unsupported access kind: $kind');
+  }
+}
diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart
index b7119eca..1289b77 100644
--- a/pkg/compiler/lib/src/serialization/task.dart
+++ b/pkg/compiler/lib/src/serialization/task.dart
@@ -4,27 +4,21 @@
 
 library dart2js.serialization.task;
 
-import '../common/resolution.dart' show
-    ResolutionImpact,
-    ResolutionWorkItem;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../common/work.dart' show
-    ItemCompilationContext;
-import '../compiler.dart' show
-    Compiler;
+import 'dart:async' show Future;
+import '../common/resolution.dart' show ResolutionImpact, ResolutionWorkItem;
+import '../common/tasks.dart' show CompilerTask;
+import '../common/work.dart' show ItemCompilationContext;
+import '../compiler.dart' show Compiler;
 import '../elements/elements.dart';
-import '../enqueue.dart' show
-    ResolutionEnqueuer;
-import '../universe/world_impact.dart' show
-    WorldImpact;
+import '../enqueue.dart' show ResolutionEnqueuer;
+import '../universe/world_impact.dart' show WorldImpact;
 
 /// A deserializer that can load a library element by reading it's information
 /// from a serialized form.
 abstract class LibraryDeserializer {
   /// Loads the [LibraryElement] associated with a library under [uri], or null
   /// if no serialized information is available for the given library.
-  LibraryElement readLibrary(Uri uri);
+  Future<LibraryElement> readLibrary(Uri uri);
 }
 
 /// Task that supports deserialization of elements.
@@ -42,8 +36,8 @@
 
   /// Returns the [LibraryElement] for [resolvedUri] if available from
   /// serialization.
-  LibraryElement readLibrary(Uri resolvedUri) {
-    if (deserializer == null) return null;
+  Future<LibraryElement> readLibrary(Uri resolvedUri) {
+    if (deserializer == null) return new Future<LibraryElement>.value();
     return deserializer.readLibrary(resolvedUri);
   }
 
@@ -88,8 +82,9 @@
 /// The interface for a system that supports deserialization of libraries and
 /// elements.
 abstract class DeserializerSystem {
-  LibraryElement readLibrary(Uri resolvedUri);
+  Future<LibraryElement> readLibrary(Uri resolvedUri);
   bool isDeserialized(Element element);
+  ResolvedAst getResolvedAst(Element element);
   ResolutionImpact getResolutionImpact(Element element);
   WorldImpact computeWorldImpact(Element element);
 }
diff --git a/pkg/compiler/lib/src/serialization/type_serialization.dart b/pkg/compiler/lib/src/serialization/type_serialization.dart
index 7ea60ff..3d4cb9f 100644
--- a/pkg/compiler/lib/src/serialization/type_serialization.dart
+++ b/pkg/compiler/lib/src/serialization/type_serialization.dart
@@ -22,25 +22,20 @@
 
   void visitVoidType(VoidType type, ObjectEncoder encoder) {}
 
-  void visitTypeVariableType(TypeVariableType type,
-                             ObjectEncoder encoder) {
+  void visitTypeVariableType(TypeVariableType type, ObjectEncoder encoder) {
     encoder.setElement(Key.ELEMENT, type.element);
   }
 
-  void visitFunctionType(FunctionType type,
-                         ObjectEncoder encoder) {
+  void visitFunctionType(FunctionType type, ObjectEncoder encoder) {
     // TODO(johnniwinther): Support encoding of `type.element`.
     encoder.setType(Key.RETURN_TYPE, type.returnType);
     encoder.setTypes(Key.PARAMETER_TYPES, type.parameterTypes);
-    encoder.setTypes(
-        Key.OPTIONAL_PARAMETER_TYPES, type.optionalParameterTypes);
+    encoder.setTypes(Key.OPTIONAL_PARAMETER_TYPES, type.optionalParameterTypes);
     encoder.setStrings(Key.NAMED_PARAMETERS, type.namedParameters);
     encoder.setTypes(Key.NAMED_PARAMETER_TYPES, type.namedParameterTypes);
   }
 
-  void visitMalformedType(MalformedType type, ObjectEncoder encoder) {
-
-  }
+  void visitMalformedType(MalformedType type, ObjectEncoder encoder) {}
 
   void visitInterfaceType(InterfaceType type, ObjectEncoder encoder) {
     encoder.setElement(Key.ELEMENT, type.element);
@@ -55,12 +50,10 @@
   void visitDynamicType(DynamicType type, ObjectEncoder encoder) {}
 }
 
-
 /// Utility class for deserializing [DartType]s.
 ///
 /// This is used by the [Deserializer].
 class TypeDeserializer {
-
   /// Deserializes a [DartType] from an [ObjectDecoder].
   ///
   /// The class is called from the [Deserializer] when a [DartType] needs
@@ -70,26 +63,20 @@
     TypeKind typeKind = decoder.getEnum(Key.KIND, TypeKind.values);
     switch (typeKind) {
       case TypeKind.INTERFACE:
-        return new InterfaceType(
-            decoder.getElement(Key.ELEMENT),
+        return new InterfaceType(decoder.getElement(Key.ELEMENT),
             decoder.getTypes(Key.TYPE_ARGUMENTS, isOptional: true));
       case TypeKind.FUNCTION:
         // TODO(johnniwinther): Support decoding of `type.element`.
         return new FunctionType.synthesized(
             decoder.getType(Key.RETURN_TYPE),
             decoder.getTypes(Key.PARAMETER_TYPES, isOptional: true),
-            decoder.getTypes(
-                Key.OPTIONAL_PARAMETER_TYPES, isOptional: true),
-            decoder.getStrings(
-                Key.NAMED_PARAMETERS, isOptional: true),
-            decoder.getTypes(
-                Key.NAMED_PARAMETER_TYPES, isOptional: true));
+            decoder.getTypes(Key.OPTIONAL_PARAMETER_TYPES, isOptional: true),
+            decoder.getStrings(Key.NAMED_PARAMETERS, isOptional: true),
+            decoder.getTypes(Key.NAMED_PARAMETER_TYPES, isOptional: true));
       case TypeKind.TYPE_VARIABLE:
-        return new TypeVariableType(
-            decoder.getElement(Key.ELEMENT));
+        return new TypeVariableType(decoder.getElement(Key.ELEMENT));
       case TypeKind.TYPEDEF:
-        return new TypedefType(
-            decoder.getElement(Key.ELEMENT),
+        return new TypedefType(decoder.getElement(Key.ELEMENT),
             decoder.getTypes(Key.TYPE_ARGUMENTS, isOptional: true));
       case TypeKind.STATEMENT:
       case TypeKind.MALFORMED_TYPE:
@@ -101,4 +88,3 @@
     }
   }
 }
-
diff --git a/pkg/compiler/lib/src/serialization/values.dart b/pkg/compiler/lib/src/serialization/values.dart
index 4e49de4..637123c 100644
--- a/pkg/compiler/lib/src/serialization/values.dart
+++ b/pkg/compiler/lib/src/serialization/values.dart
@@ -48,7 +48,7 @@
   String toString() => element.toString();
 }
 
-class TypeValue implements Value  {
+class TypeValue implements Value {
   final DartType type;
   final Value id;
 
@@ -59,7 +59,7 @@
   String toString() => type.toString();
 }
 
-class ConstantValue implements Value  {
+class ConstantValue implements Value {
   final ConstantExpression constant;
   final Value id;
 
diff --git a/pkg/compiler/lib/src/source_file_provider.dart b/pkg/compiler/lib/src/source_file_provider.dart
index 2269a9e..e5b3a03 100644
--- a/pkg/compiler/lib/src/source_file_provider.dart
+++ b/pkg/compiler/lib/src/source_file_provider.dart
@@ -56,50 +56,46 @@
       source = readAll(resourceUri.toFilePath());
     } on FileSystemException catch (ex) {
       OSError ose = ex.osError;
-      String detail = (ose != null && ose.message != null)
-          ? ' (${ose.message})'
-          : '';
+      String detail =
+          (ose != null && ose.message != null) ? ' (${ose.message})' : '';
       return new Future.error(
           "Error reading '${relativize(cwd, resourceUri, isWindows)}'"
           "$detail");
     }
     dartCharactersRead += source.length;
-    sourceFiles[resourceUri] =
-        new CachingUtf8BytesSourceFile(
-            resourceUri, relativizeUri(resourceUri), source);
+    sourceFiles[resourceUri] = new CachingUtf8BytesSourceFile(
+        resourceUri, relativizeUri(resourceUri), source);
     return new Future.value(source);
   }
 
   Future<List<int>> _readFromHttp(Uri resourceUri) {
     assert(resourceUri.scheme == 'http');
     HttpClient client = new HttpClient();
-    return client.getUrl(resourceUri)
+    return client
+        .getUrl(resourceUri)
         .then((HttpClientRequest request) => request.close())
         .then((HttpClientResponse response) {
-          if (response.statusCode != HttpStatus.OK) {
-            String msg = 'Failure getting $resourceUri: '
-                      '${response.statusCode} ${response.reasonPhrase}';
-            throw msg;
-          }
-          return response.toList();
-        })
-        .then((List<List<int>> splitContent) {
-           int totalLength = splitContent.fold(0, (int old, List list) {
-             return old + list.length;
-           });
-           Uint8List result = new Uint8List(totalLength);
-           int offset = 0;
-           for (List<int> contentPart in splitContent) {
-             result.setRange(
-                 offset, offset + contentPart.length, contentPart);
-             offset += contentPart.length;
-           }
-           dartCharactersRead += totalLength;
-           sourceFiles[resourceUri] =
-               new CachingUtf8BytesSourceFile(
-                   resourceUri, resourceUri.toString(), result);
-           return result;
-         });
+      if (response.statusCode != HttpStatus.OK) {
+        String msg = 'Failure getting $resourceUri: '
+            '${response.statusCode} ${response.reasonPhrase}';
+        throw msg;
+      }
+      return response.toList();
+    }).then((List<List<int>> splitContent) {
+      int totalLength = splitContent.fold(0, (int old, List list) {
+        return old + list.length;
+      });
+      Uint8List result = new Uint8List(totalLength);
+      int offset = 0;
+      for (List<int> contentPart in splitContent) {
+        result.setRange(offset, offset + contentPart.length, contentPart);
+        offset += contentPart.length;
+      }
+      dartCharactersRead += totalLength;
+      sourceFiles[resourceUri] = new CachingUtf8BytesSourceFile(
+          resourceUri, resourceUri.toString(), result);
+      return result;
+    });
   }
 
   // TODO(johnniwinther): Remove this when no longer needed for the old compiler
@@ -140,7 +136,7 @@
 
   FormattingDiagnosticHandler([SourceFileProvider provider])
       : this.provider =
-          (provider == null) ? new CompilerSourceFileProvider() : provider;
+            (provider == null) ? new CompilerSourceFileProvider() : provider;
 
   void info(var message, [api.Diagnostic kind = api.Diagnostic.VERBOSE_INFO]) {
     if (!verbose && kind == api.Diagnostic.VERBOSE_INFO) return;
@@ -171,7 +167,7 @@
 
   @override
   void report(var code, Uri uri, int begin, int end, String message,
-              api.Diagnostic kind) {
+      api.Diagnostic kind) {
     // TODO(ahe): Remove this when source map is handled differently.
     if (identical(kind.name, 'source map')) return;
 
@@ -219,12 +215,12 @@
     } else {
       SourceFile file = provider.sourceFiles[uri];
       if (file != null) {
-        print(file.getLocationMessage(
-          color(message), begin, end, colorize: color));
+        print(file.getLocationMessage(color(message), begin, end,
+            colorize: color));
       } else {
         String position = end - begin > 0 ? '@$begin+${end - begin}' : '';
         print('${provider.relativizeUri(uri)}$position:\n'
-              '${color(message)}');
+            '${color(message)}');
       }
     }
     if (fatal && ++fatalCount >= throwOnErrorCount && throwOnError) {
@@ -251,10 +247,8 @@
   int totalCharactersWritten = 0;
   List<String> allOutputFiles = new List<String>();
 
-  RandomAccessFileOutputProvider(this.out,
-                                 this.sourceMapOut,
-                                 {this.onInfo,
-                                  this.onFailure});
+  RandomAccessFileOutputProvider(this.out, this.sourceMapOut,
+      {this.onInfo, this.onFailure});
 
   static Uri computePrecompiledUri(Uri out) {
     String extension = 'precompiled.js';
@@ -281,7 +275,7 @@
       } else if (extension == 'precompiled.js') {
         uri = computePrecompiledUri(out);
         onInfo("File ($uri) is compatible with header"
-               " \"Content-Security-Policy: script-src 'self'\"");
+            " \"Content-Security-Policy: script-src 'self'\"");
       } else if (extension == 'js.map' || extension == 'dart.map') {
         uri = sourceMapOut;
       } else if (extension == "info.json") {
@@ -301,7 +295,7 @@
     RandomAccessFile output;
     try {
       output = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE);
-    } on FileSystemException catch(e) {
+    } on FileSystemException catch (e) {
       onFailure('$e');
     }
 
@@ -311,7 +305,7 @@
 
     writeStringSync(String data) {
       // Write the data in chunks of 8kb, otherwise we risk running OOM.
-      int chunkSize = 8*1024;
+      int chunkSize = 8 * 1024;
 
       int offset = 0;
       while (offset < data.length) {
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index ad5905d..a05158d 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -8,59 +8,36 @@
 
 import '../closure.dart';
 import '../common.dart';
-import '../common/codegen.dart' show
-    CodegenRegistry,
-    CodegenWorkItem;
-import '../common/names.dart' show
-    Identifiers,
-    Selectors;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
+import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
+import '../common/names.dart' show Identifiers, Selectors;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
 import '../constants/constant_system.dart';
 import '../constants/expressions.dart';
 import '../constants/values.dart';
-import '../core_types.dart' show
-    CoreClasses;
+import '../core_types.dart' show CoreClasses;
 import '../dart_types.dart';
-import '../diagnostics/messages.dart' show
-    Message,
-    MessageTemplate;
+import '../diagnostics/messages.dart' show Message, MessageTemplate;
 import '../elements/elements.dart';
-import '../elements/modelx.dart' show
-    ConstructorBodyElementX,
-    ElementX,
-    VariableElementX;
+import '../elements/modelx.dart'
+    show ConstructorBodyElementX, ElementX, VariableElementX;
 import '../io/source_information.dart';
 import '../js/js.dart' as js;
-import '../js_backend/backend_helpers.dart' show
-    BackendHelpers;
+import '../js_backend/backend_helpers.dart' show BackendHelpers;
 import '../js_backend/js_backend.dart';
-import '../js_emitter/js_emitter.dart' show
-    CodeEmitterTask,
-    NativeEmitter;
+import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter;
 import '../native/native.dart' as native;
 import '../resolution/operators.dart';
 import '../resolution/semantic_visitor.dart';
-import '../resolution/tree_elements.dart' show
-    TreeElements;
+import '../resolution/tree_elements.dart' show TreeElements;
 import '../tree/tree.dart' as ast;
 import '../types/types.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/side_effects.dart' show
-    SideEffects;
-import '../universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    TypeUse;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../universe/side_effects.dart' show SideEffects;
+import '../universe/use.dart' show DynamicUse, StaticUse, TypeUse;
 import '../util/util.dart';
-import '../world.dart' show
-    ClassWorld,
-    World;
+import '../world.dart' show ClassWorld, World;
 import '../dump_info.dart' show InfoReporter;
 
 import 'nodes.dart';
@@ -75,7 +52,7 @@
   final JavaScriptBackend backend;
 
   SsaFunctionCompiler(JavaScriptBackend backend,
-                      SourceInformationStrategy sourceInformationFactory)
+      SourceInformationStrategy sourceInformationFactory)
       : generator = new SsaCodeGeneratorTask(backend, sourceInformationFactory),
         builder = new SsaBuilderTask(backend, sourceInformationFactory),
         optimizer = new SsaOptimizerTask(backend),
@@ -120,9 +97,9 @@
   String get name => 'SSA builder';
 
   SsaBuilderTask(JavaScriptBackend backend, this.sourceInformationFactory)
-    : emitter = backend.emitter,
-      backend = backend,
-      super(backend.compiler);
+      : emitter = backend.emitter,
+        backend = backend,
+        super(backend.compiler);
 
   DiagnosticReporter get reporter => compiler.reporter;
 
@@ -130,11 +107,14 @@
     return measure(() {
       Element element = work.element.implementation;
       return reporter.withCurrentElement(element, () {
-        SsaBuilder builder =
-            new SsaBuilder(work.element.implementation,
-                work.resolutionTree, work.compilationContext, work.registry,
-                backend, emitter.nativeEmitter,
-                sourceInformationFactory);
+        SsaBuilder builder = new SsaBuilder(
+            work.element.implementation,
+            work.resolutionTree,
+            work.compilationContext,
+            work.registry,
+            backend,
+            emitter.nativeEmitter,
+            sourceInformationFactory);
         HGraph graph = builder.build();
 
         // Default arguments are handled elsewhere, but we must ensure
@@ -161,15 +141,13 @@
           } else {
             name = "${element.name}";
           }
-          compiler.tracer.traceCompilation(
-              name, work.compilationContext);
+          compiler.tracer.traceCompilation(name, work.compilationContext);
           compiler.tracer.traceGraph('builder', graph);
         }
         return graph;
       });
     });
   }
-
 }
 
 /**
@@ -187,8 +165,7 @@
    * e.g. Element hash codes.  I'd prefer to use a SortedMap but some elements
    * don't have source locations for [Elements.compareByPosition].
    */
-  Map<Local, HInstruction> directLocals =
-      new Map<Local, HInstruction>();
+  Map<Local, HInstruction> directLocals = new Map<Local, HInstruction>();
   Map<Local, CapturedVariable> redirectionMapping =
       new Map<Local, CapturedVariable>();
   SsaBuilder builder;
@@ -223,11 +200,10 @@
     return builder.sourceInformationBuilder;
   }
 
-  LocalsHandler(this.builder, this.executableContext,
-                InterfaceType instanceType)
-      : this.instanceType =
-          instanceType == null || instanceType.containsTypeVariables
-              ? null : instanceType;
+  LocalsHandler(
+      this.builder, this.executableContext, InterfaceType instanceType)
+      : this.instanceType = instanceType == null ||
+            instanceType.containsTypeVariables ? null : instanceType;
 
   /// Substituted type variables occurring in [type] into the context of
   /// [contextClass].
@@ -235,8 +211,7 @@
     if (contextClass != null) {
       ClassElement typeContext = Types.getClassContext(type);
       if (typeContext != null) {
-        type = type.substByContext(
-            contextClass.asInstanceOf(typeContext));
+        type = type.substByContext(contextClass.asInstanceOf(typeContext));
       }
     }
     if (instanceType != null) {
@@ -275,9 +250,7 @@
     // just creating an empty object literal?
     JavaScriptBackend backend = builder.backend;
     HInstruction box = new HForeignCode(
-        js.js.parseForeignJS('{}'),
-        backend.nonNullType,
-        <HInstruction>[],
+        js.js.parseForeignJS('{}'), backend.nonNullType, <HInstruction>[],
         nativeBehavior: native.NativeBehavior.PURE_ALLOCATION);
     builder.add(box);
     return box;
@@ -331,8 +304,8 @@
    * Replaces the current box with a new box and copies over the given list
    * of elements from the old box into the new box.
    */
-  void updateCaptureBox(BoxLocal boxElement,
-                        List<LocalVariableElement> toBeCopiedElements) {
+  void updateCaptureBox(
+      BoxLocal boxElement, List<LocalVariableElement> toBeCopiedElements) {
     // Create a new box and copy over the values from the old box into the
     // new one.
     HInstruction oldBox = readLocal(boxElement);
@@ -356,8 +329,8 @@
   void startFunction(Element element, ast.Node node) {
     assert(invariant(element, element.isImplementation));
     Compiler compiler = builder.compiler;
-    closureData = compiler.closureToClassMapper.computeClosureToClassMapping(
-            element, node, builder.elements);
+    closureData = compiler.closureToClassMapper
+        .computeClosureToClassMapping(element, node, builder.elements);
 
     if (element is FunctionElement) {
       FunctionElement functionElement = element;
@@ -372,8 +345,7 @@
             return;
           }
         }
-        HInstruction parameter = builder.addParameter(
-            parameterElement,
+        HInstruction parameter = builder.addParameter(parameterElement,
             TypeMaskFactory.inferredTypeForElement(parameterElement, compiler));
         builder.parameters[parameterElement] = parameter;
         directLocals[parameterElement] = parameter;
@@ -391,8 +363,8 @@
     JavaScriptBackend backend = compiler.backend;
     if (closureData.isClosure) {
       // Inside closure redirect references to itself to [:this:].
-      HThis thisInstruction = new HThis(closureData.thisLocal,
-                                        backend.nonNullType);
+      HThis thisInstruction =
+          new HThis(closureData.thisLocal, backend.nonNullType);
       builder.graph.thisInstruction = thisInstruction;
       builder.graph.entry.addAtEntry(thisInstruction);
       updateLocal(closureData.closureElement, thisInstruction);
@@ -400,8 +372,8 @@
       // Once closures have been mapped to classes their instance members might
       // not have any thisElement if the closure was created inside a static
       // context.
-      HThis thisInstruction = new HThis(
-          closureData.thisLocal, builder.getTypeOfThis());
+      HThis thisInstruction =
+          new HThis(closureData.thisLocal, builder.getTypeOfThis());
       builder.graph.thisInstruction = thisInstruction;
       builder.graph.entry.addAtEntry(thisInstruction);
       directLocals[closureData.thisLocal] = thisInstruction;
@@ -416,8 +388,8 @@
     // and passed to the generative constructor factory function as a parameter.
     // Instead of allocating and initializing the object, the constructor
     // 'upgrades' the native subclass object by initializing the Dart fields.
-    bool isNativeUpgradeFactory = element.isGenerativeConstructor
-        && backend.isNativeOrExtendsNative(cls);
+    bool isNativeUpgradeFactory =
+        element.isGenerativeConstructor && backend.isNativeOrExtendsNative(cls);
     if (backend.isInterceptedMethod(element)) {
       bool isInterceptorClass = backend.isInterceptorClass(cls.declaration);
       String name = isInterceptorClass ? 'receiver' : '_';
@@ -453,8 +425,8 @@
    */
   bool isAccessedDirectly(Local local) {
     assert(local != null);
-    return !redirectionMapping.containsKey(local)
-        && !closureData.variablesUsedInTryOrGenerator.contains(local);
+    return !redirectionMapping.containsKey(local) &&
+        !closureData.variablesUsedInTryOrGenerator.contains(local);
   }
 
   bool isStoredInClosureField(Local local) {
@@ -480,16 +452,14 @@
    * boxed or stored in a closure then the method generates code to retrieve
    * the value.
    */
-  HInstruction readLocal(Local local,
-                         {SourceInformation sourceInformation}) {
+  HInstruction readLocal(Local local, {SourceInformation sourceInformation}) {
     if (isAccessedDirectly(local)) {
       if (directLocals[local] == null) {
         if (local is TypeVariableElement) {
           builder.reporter.internalError(builder.compiler.currentElement,
               "Runtime type information not available for $local.");
         } else {
-          builder.reporter.internalError(local,
-              "Cannot find value $local.");
+          builder.reporter.internalError(local, "Cannot find value $local.");
         }
       }
       HInstruction value = directLocals[local];
@@ -537,8 +507,7 @@
     return res;
   }
 
-  HLocalValue getLocal(Local local,
-                       {SourceInformation sourceInformation}) {
+  HLocalValue getLocal(Local local, {SourceInformation sourceInformation}) {
     // If the element is a parameter, we already have a
     // HParameterValue for it. We cannot create another one because
     // it could then have another name than the real parameter. And
@@ -549,7 +518,7 @@
     return builder.activationVariables.putIfAbsent(local, () {
       JavaScriptBackend backend = builder.backend;
       HLocalValue localValue = new HLocalValue(local, backend.nonNullType)
-          ..sourceInformation = sourceInformation;
+        ..sourceInformation = sourceInformation;
       builder.graph.entry.addAtExit(localValue);
       return localValue;
     });
@@ -566,7 +535,7 @@
    * closure then the method generates code to set the value.
    */
   void updateLocal(Local local, HInstruction value,
-                   {SourceInformation sourceInformation}) {
+      {SourceInformation sourceInformation}) {
     if (value is HRef) {
       HRef ref = value;
       value = ref.value;
@@ -582,12 +551,12 @@
       // be accessed directly.
       HInstruction box = readLocal(redirect.box);
       builder.add(new HFieldSet(redirect, box, value)
-          ..sourceInformation = sourceInformation);
+        ..sourceInformation = sourceInformation);
     } else {
       assert(isUsedInTryOrGenerator(local));
       HLocalValue localValue = getLocal(local);
       builder.add(new HLocalSet(local, localValue, value)
-          ..sourceInformation = sourceInformation);
+        ..sourceInformation = sourceInformation);
     }
   }
 
@@ -660,13 +629,12 @@
 
     JavaScriptBackend backend = builder.backend;
     // Create phis for all elements in the definitions environment.
-    savedDirectLocals.forEach((Local local,
-                               HInstruction instruction) {
+    savedDirectLocals.forEach((Local local, HInstruction instruction) {
       if (isAccessedDirectly(local)) {
         // We know 'this' cannot be modified.
         if (local != closureData.thisLocal) {
-          HPhi phi = new HPhi.singleInput(
-              local, instruction, backend.dynamicType);
+          HPhi phi =
+              new HPhi.singleInput(local, instruction, backend.dynamicType);
           loopEntry.addPhi(phi);
           directLocals[local] = phi;
         } else {
@@ -726,11 +694,9 @@
     // block. Since variable declarations are scoped the declared
     // variable cannot be alive outside the block. Note: this is only
     // true for nodes where we do joins.
-    Map<Local, HInstruction> joinedLocals =
-        new Map<Local, HInstruction>();
+    Map<Local, HInstruction> joinedLocals = new Map<Local, HInstruction>();
     JavaScriptBackend backend = builder.backend;
-    otherLocals.directLocals.forEach((Local local,
-                                      HInstruction instruction) {
+    otherLocals.directLocals.forEach((Local local, HInstruction instruction) {
       // We know 'this' cannot be modified.
       if (local == closureData.thisLocal) {
         assert(directLocals[local] == instruction);
@@ -758,12 +724,11 @@
    * used for its values, only for its declared variables. This is a way to
    * exclude local values from the result when they are no longer in scope.
    */
-  LocalsHandler mergeMultiple(List<LocalsHandler> localsHandlers,
-                              HBasicBlock joinBlock) {
+  LocalsHandler mergeMultiple(
+      List<LocalsHandler> localsHandlers, HBasicBlock joinBlock) {
     assert(localsHandlers.length > 0);
     if (localsHandlers.length == 1) return localsHandlers[0];
-    Map<Local, HInstruction> joinedLocals =
-        new Map<Local, HInstruction>();
+    Map<Local, HInstruction> joinedLocals = new Map<Local, HInstruction>();
     HInstruction thisValue = null;
     JavaScriptBackend backend = builder.backend;
     directLocals.forEach((Local local, HInstruction instruction) {
@@ -779,8 +744,7 @@
       }
     });
     for (LocalsHandler handler in localsHandlers) {
-      handler.directLocals.forEach((Local local,
-                                    HInstruction instruction) {
+      handler.directLocals.forEach((Local local, HInstruction instruction) {
         HPhi phi = joinedLocals[local];
         if (phi != null) {
           phi.addInput(instruction);
@@ -794,10 +758,9 @@
 
     // Remove locals that are not in all handlers.
     directLocals = new Map<Local, HInstruction>();
-    joinedLocals.forEach((Local local,
-                          HInstruction instruction) {
-      if (local != closureData.thisLocal
-          && instruction.inputs.length != localsHandlers.length) {
+    joinedLocals.forEach((Local local, HInstruction instruction) {
+      if (local != closureData.thisLocal &&
+          instruction.inputs.length != localsHandlers.length) {
         joinBlock.removePhi(instruction);
       } else {
         directLocals[local] = instruction;
@@ -807,7 +770,6 @@
   }
 }
 
-
 // Represents a single break/continue instruction.
 class JumpHandlerEntry {
   final HJump jumpInstruction;
@@ -817,7 +779,6 @@
   JumpHandlerEntry(this.jumpInstruction, this.locals);
 }
 
-
 abstract class JumpHandler {
   factory JumpHandler(SsaBuilder builder, JumpTarget target) {
     return new TargetJumpHandler(builder, target);
@@ -825,8 +786,8 @@
   void generateBreak([LabelDefinition label]);
   void generateContinue([LabelDefinition label]);
   void forEachBreak(void action(HBreak instruction, LocalsHandler locals));
-  void forEachContinue(void action(HContinue instruction,
-                                   LocalsHandler locals));
+  void forEachContinue(
+      void action(HContinue instruction, LocalsHandler locals));
   bool hasAnyContinue();
   bool hasAnyBreak();
   void close();
@@ -852,9 +813,9 @@
         'NullJumpHandler.generateContinue should not be called.');
   }
 
-  void forEachBreak(Function ignored) { }
-  void forEachContinue(Function ignored) { }
-  void close() { }
+  void forEachBreak(Function ignored) {}
+  void forEachContinue(Function ignored) {}
+  void close() {}
   bool hasAnyContinue() => false;
   bool hasAnyBreak() => false;
 
@@ -953,9 +914,8 @@
   /// switch case loop.
   final Map<JumpTarget, int> targetIndexMap = new Map<JumpTarget, int>();
 
-  SwitchCaseJumpHandler(SsaBuilder builder,
-                        JumpTarget target,
-                        ast.SwitchStatement node)
+  SwitchCaseJumpHandler(
+      SsaBuilder builder, JumpTarget target, ast.SwitchStatement node)
       : super(builder, target) {
     // The switch case indices must match those computed in
     // [SsaFromAstMixin.buildSwitchCaseConstants].
@@ -1007,9 +967,8 @@
       // [SsaFromAstMixin.buildComplexSwitchStatement] for detail.
 
       assert(label != null);
-      HInstruction value = builder.graph.addConstantInt(
-          targetIndexMap[label.target],
-          builder.compiler);
+      HInstruction value = builder.graph
+          .addConstantInt(targetIndexMap[label.target], builder.compiler);
       builder.localsHandler.updateLocal(target, value);
 
       assert(label.target.labels.contains(label));
@@ -1035,14 +994,14 @@
  * This class builds SSA nodes for functions represented in AST.
  */
 class SsaBuilder extends ast.Visitor
-    with BaseImplementationOfCompoundsMixin,
-         BaseImplementationOfSetIfNullsMixin,
-         BaseImplementationOfSuperIndexSetIfNullMixin,
-         SemanticSendResolvedMixin,
-         NewBulkMixin,
-         ErrorBulkMixin
+    with
+        BaseImplementationOfCompoundsMixin,
+        BaseImplementationOfSetIfNullsMixin,
+        BaseImplementationOfSuperIndexSetIfNullMixin,
+        SemanticSendResolvedMixin,
+        NewBulkMixin,
+        ErrorBulkMixin
     implements SemanticSendVisitor {
-
   /// The element for which this SSA builder is being used.
   final Element target;
 
@@ -1146,8 +1105,7 @@
    * being updated in try/catch blocks, and should be
    * accessed indirectly through [HLocalGet] and [HLocalSet].
    */
-  Map<Local, HLocalValue> activationVariables =
-      <Local, HLocalValue>{};
+  Map<Local, HLocalValue> activationVariables = <Local, HLocalValue>{};
 
   // We build the Ssa graph by simulating a stack machine.
   List<HInstruction> stack = <HInstruction>[];
@@ -1156,24 +1114,29 @@
   bool get isBuildingAsyncFunction {
     Element element = sourceElement;
     return (element is FunctionElement &&
-            element.asyncMarker == AsyncMarker.ASYNC);
+        element.asyncMarker == AsyncMarker.ASYNC);
   }
 
   // TODO(sigmund): make most args optional
-  SsaBuilder(this.target, this.elements, this.context, this.registry,
-      JavaScriptBackend backend, this.nativeEmitter,
+  SsaBuilder(
+      this.target,
+      this.elements,
+      this.context,
+      this.registry,
+      JavaScriptBackend backend,
+      this.nativeEmitter,
       SourceInformationStrategy sourceInformationFactory)
-    : this.compiler = backend.compiler,
-      this.infoReporter = backend.compiler.dumpInfoTask,
-      this.backend = backend,
-      this.constantSystem = backend.constantSystem,
-      this.rti = backend.rti {
+      : this.compiler = backend.compiler,
+        this.infoReporter = backend.compiler.dumpInfoTask,
+        this.backend = backend,
+        this.constantSystem = backend.constantSystem,
+        this.rti = backend.rti {
     assert(target.isImplementation);
     graph.element = target;
     localsHandler = new LocalsHandler(this, target, null);
     sourceElementStack.add(target);
-    sourceInformationBuilder = sourceInformationFactory.createBuilderForContext(
-            target);
+    sourceInformationBuilder =
+        sourceInformationFactory.createBuilderForContext(target);
     graph.sourceInformation =
         sourceInformationBuilder.buildVariableDeclaration();
   }
@@ -1206,7 +1169,8 @@
   // implementation/declaration distinction.
   Element get sourceElement => sourceElementStack.last;
 
-  bool get _checkOrTrustTypes => compiler.options.enableTypeAssertions ||
+  bool get _checkOrTrustTypes =>
+      compiler.options.enableTypeAssertions ||
       compiler.options.trustTypeAnnotations;
 
   /// Build the graph for [target].
@@ -1219,10 +1183,10 @@
     if (target.isGenerativeConstructor) {
       result = buildFactory(target);
     } else if (target.isGenerativeConstructorBody ||
-               target.isFactoryConstructor ||
-               target.isFunction ||
-               target.isGetter ||
-               target.isSetter) {
+        target.isFactoryConstructor ||
+        target.isFunction ||
+        target.isGetter ||
+        target.isSetter) {
       result = buildMethod(target);
     } else if (target.isField) {
       if (target.isInstanceMember) {
@@ -1238,7 +1202,6 @@
     return result;
   }
 
-
   HBasicBlock addNewBlock() {
     HBasicBlock block = graph.addNewBlock();
     // If adding a new block during building of an expression, it is due to
@@ -1309,11 +1272,12 @@
     bool isInstanceMember = function.isInstanceMember;
     // For static calls, [providedArguments] is complete, default arguments
     // have been included if necessary, see [makeStaticArgumentList].
-    if (!isInstanceMember
-        || currentNode == null // In erroneous code, currentNode can be null.
-        || providedArgumentsKnownToBeComplete(currentNode)
-        || function.isGenerativeConstructorBody
-        || selector.isGetter) {
+    if (!isInstanceMember ||
+        currentNode == null // In erroneous code, currentNode can be null.
+        ||
+        providedArgumentsKnownToBeComplete(currentNode) ||
+        function.isGenerativeConstructorBody ||
+        selector.isGetter) {
       // For these cases, the provided argument list is known to be complete.
       return providedArguments;
     } else {
@@ -1336,10 +1300,8 @@
    * the provided named arguments (the named arguments that are defined in the
    * [selector]) in a specific order (see [addDynamicSendArgumentsToList]).
    */
-  List<HInstruction> completeDynamicSendArgumentsList(
-      Selector selector,
-      FunctionElement function,
-      List<HInstruction> providedArguments) {
+  List<HInstruction> completeDynamicSendArgumentsList(Selector selector,
+      FunctionElement function, List<HInstruction> providedArguments) {
     assert(selector.applies(function, compiler.world));
     FunctionSignature signature = function.functionSignature;
     List<HInstruction> compiledArguments = new List<HInstruction>(
@@ -1396,12 +1358,9 @@
    * Try to inline [element] within the currect context of the builder. The
    * insertion point is the state of the builder.
    */
-  bool tryInlineMethod(Element element,
-                       Selector selector,
-                       TypeMask mask,
-                       List<HInstruction> providedArguments,
-                       ast.Node currentNode,
-                       {InterfaceType instanceType}) {
+  bool tryInlineMethod(Element element, Selector selector, TypeMask mask,
+      List<HInstruction> providedArguments, ast.Node currentNode,
+      {InterfaceType instanceType}) {
     // TODO(johnniwinther): Register this on the [registry]. Currently the
     // [CodegenRegistry] calls the enqueuer, but [element] should _not_ be
     // enqueued.
@@ -1432,8 +1391,8 @@
       assert(invariant(
           currentNode != null ? currentNode : element,
           selector != null ||
-          Elements.isStaticOrTopLevel(element) ||
-          element.isGenerativeConstructorBody,
+              Elements.isStaticOrTopLevel(element) ||
+              element.isGenerativeConstructorBody,
           message: "Missing selector for inlining of $element."));
       if (selector != null) {
         if (!selector.applies(function, compiler.world)) return false;
@@ -1446,16 +1405,16 @@
 
       // Don't inline operator== methods if the parameter can be null.
       if (element.name == '==') {
-        if (element.enclosingClass != coreClasses.objectClass
-            && providedArguments[1].canBeNull()) {
+        if (element.enclosingClass != coreClasses.objectClass &&
+            providedArguments[1].canBeNull()) {
           return false;
         }
       }
 
       // Generative constructors of native classes should not be called directly
       // and have an extra argument that causes problems with inlining.
-      if (element.isGenerativeConstructor
-          && backend.isNativeOrExtendsNative(element.enclosingClass)) {
+      if (element.isGenerativeConstructor &&
+          backend.isNativeOrExtendsNative(element.enclosingClass)) {
         return false;
       }
 
@@ -1524,8 +1483,8 @@
         // We may have forced the inlining of some methods. Therefore check
         // if we can inline this method regardless of size.
         assert(InlineWeeder.canBeInlined(function, -1, false,
-                allowLoops: true,
-                enableUserAssertions: compiler.options.enableUserAssertions));
+            allowLoops: true,
+            enableUserAssertions: compiler.options.enableUserAssertions));
         return true;
       }
 
@@ -1567,13 +1526,13 @@
           (mask == null || mask.isNullable)) {
         addWithPosition(
             new HFieldGet(null, providedArguments[0], backend.dynamicType,
-                          isAssignable: false),
+                isAssignable: false),
             currentNode);
       }
       List<HInstruction> compiledArguments = completeSendArgumentsList(
           function, selector, providedArguments, currentNode);
-      enterInlinedMethod(
-          function, currentNode, compiledArguments, instanceType: instanceType);
+      enterInlinedMethod(function, currentNode, compiledArguments,
+          instanceType: instanceType);
       inlinedFrom(function, () {
         if (!isReachable) {
           emitReturn(graph.addConstantNull(compiler), null);
@@ -1728,8 +1687,8 @@
       push(invokeJsInteropFunction(functionElement, parameters.values.toList(),
           sourceInformationBuilder.buildGeneric(function)));
       var value = pop();
-      closeAndGotoExit(new HReturn(value,
-          sourceInformationBuilder.buildReturn(functionElement.node)));
+      closeAndGotoExit(new HReturn(
+          value, sourceInformationBuilder.buildReturn(functionElement.node)));
       return closeFunction();
     }
     assert(invariant(functionElement, !function.modifiers.isExternal));
@@ -1739,27 +1698,21 @@
     // null check.
     if (name == '==') {
       if (!backend.operatorEqHandlesNullArgument(functionElement)) {
-        handleIf(
-            function,
-            visitCondition: () {
-              HParameterValue parameter = parameters.values.first;
-              push(new HIdentity(
-                  parameter, graph.addConstantNull(compiler), null,
-                  backend.boolType));
-            },
-            visitThen: () {
-              closeAndGotoExit(new HReturn(
-                  graph.addConstantBool(false, compiler),
-                  sourceInformationBuilder
-                      .buildImplicitReturn(functionElement)));
-            },
+        handleIf(function, visitCondition: () {
+          HParameterValue parameter = parameters.values.first;
+          push(new HIdentity(parameter, graph.addConstantNull(compiler), null,
+              backend.boolType));
+        }, visitThen: () {
+          closeAndGotoExit(new HReturn(graph.addConstantBool(false, compiler),
+              sourceInformationBuilder.buildImplicitReturn(functionElement)));
+        },
             visitElse: null,
             sourceInformation: sourceInformationBuilder.buildIf(function.body));
       }
     }
     if (const bool.fromEnvironment('unreachable-throw') == true) {
-      var emptyParameters = parameters.values
-          .where((p) => p.instructionType.isEmpty);
+      var emptyParameters =
+          parameters.values.where((p) => p.instructionType.isEmpty);
       if (emptyParameters.length > 0) {
         addComment('${emptyParameters} inferred as [empty]');
         pushInvokeStatic(function.body, helpers.assertUnreachableMethod, []);
@@ -1777,10 +1730,8 @@
   /// having side effects which will inhibit code motion.
   // TODO(sra): Figure out how to keep comment anchored without effects.
   void addComment(String text) {
-    add(new HForeignCode(
-        js.js.statementTemplateYielding(new js.Comment(text)),
-        backend.dynamicType,
-        <HInstruction>[],
+    add(new HForeignCode(js.js.statementTemplateYielding(new js.Comment(text)),
+        backend.dynamicType, <HInstruction>[],
         isStatement: true));
   }
 
@@ -1878,16 +1829,14 @@
    * updated in the [localsHandler]. This function creates such an element and
    * stores it in the [returnLocal] field.
    */
-  void setupStateForInlining(FunctionElement function,
-                             List<HInstruction> compiledArguments,
-                             {InterfaceType instanceType}) {
+  void setupStateForInlining(
+      FunctionElement function, List<HInstruction> compiledArguments,
+      {InterfaceType instanceType}) {
     localsHandler = new LocalsHandler(this, function, instanceType);
-    localsHandler.closureData =
-        compiler.closureToClassMapper.computeClosureToClassMapping(
-            function, function.node, elements);
+    localsHandler.closureData = compiler.closureToClassMapper
+        .computeClosureToClassMapping(function, function.node, elements);
     returnLocal = new SyntheticLocal("result", function);
-    localsHandler.updateLocal(returnLocal,
-        graph.addConstantNull(compiler));
+    localsHandler.updateLocal(returnLocal, graph.addConstantNull(compiler));
 
     inTryStatement = false; // TODO(lry): why? Document.
 
@@ -1904,8 +1853,8 @@
     });
 
     ClassElement enclosing = function.enclosingClass;
-    if ((function.isConstructor || function.isGenerativeConstructorBody)
-        && backend.classNeedsRti(enclosing)) {
+    if ((function.isConstructor || function.isGenerativeConstructorBody) &&
+        backend.classNeedsRti(enclosing)) {
       enclosing.typeVariables.forEach((TypeVariableType typeVariable) {
         HInstruction argument = compiledArguments[argumentIndex++];
         localsHandler.updateLocal(
@@ -1947,7 +1896,6 @@
     }
   }
 
-
   addInlinedInstantiation(DartType type) {
     if (type != null) {
       currentInlinedInstantiations.add(type);
@@ -1989,11 +1937,12 @@
    *
    * Invariant: [constructors] must contain only implementation elements.
    */
-  void inlineSuperOrRedirect(ConstructorElement callee,
-                             List<HInstruction> compiledArguments,
-                             List<FunctionElement> constructors,
-                             Map<Element, HInstruction> fieldValues,
-                             FunctionElement caller) {
+  void inlineSuperOrRedirect(
+      ConstructorElement callee,
+      List<HInstruction> compiledArguments,
+      List<FunctionElement> constructors,
+      Map<Element, HInstruction> fieldValues,
+      FunctionElement caller) {
     callee = callee.implementation;
     reporter.withCurrentElement(callee, () {
       constructors.add(callee);
@@ -2035,8 +1984,8 @@
       // by the effective target.
       if (!callee.isRedirectingGenerative) {
         inlinedFrom(callee, () {
-          buildFieldInitializers(callee.enclosingClass.implementation,
-                               fieldValues);
+          buildFieldInitializers(
+              callee.enclosingClass.implementation, fieldValues);
         });
       }
 
@@ -2063,9 +2012,8 @@
       elements = resolvedAst.elements;
       ClosureClassMap oldClosureData = localsHandler.closureData;
       ast.Node node = resolvedAst.node;
-      ClosureClassMap newClosureData =
-          compiler.closureToClassMapper.computeClosureToClassMapping(
-              callee, node, elements);
+      ClosureClassMap newClosureData = compiler.closureToClassMapper
+          .computeClosureToClassMapping(callee, node, elements);
       localsHandler.closureData = newClosureData;
       localsHandler.enterScope(node, callee);
       buildInitializers(callee, constructors, fieldValues);
@@ -2084,9 +2032,10 @@
    * Invariant: The [constructor] and elements in [constructors] must all be
    * implementation elements.
    */
-  void buildInitializers(ConstructorElement constructor,
-                         List<FunctionElement> constructors,
-                         Map<Element, HInstruction> fieldValues) {
+  void buildInitializers(
+      ConstructorElement constructor,
+      List<FunctionElement> constructors,
+      Map<Element, HInstruction> fieldValues) {
     assert(invariant(constructor, constructor.isImplementation));
     if (constructor.isSynthesized) {
       List<HInstruction> arguments = <HInstruction>[];
@@ -2110,15 +2059,11 @@
         // forwarding constructor in a mixin application did not match the
         // constructor (which, for example, may happen when the libraries are
         // not compatible for private names, see issue 20394).
-        reporter.internalError(constructor,
-                               'forwarding constructor call does not match');
+        reporter.internalError(
+            constructor, 'forwarding constructor call does not match');
       }
       inlineSuperOrRedirect(
-          target,
-          arguments,
-          constructors,
-          fieldValues,
-          constructor);
+          target, arguments, constructors, fieldValues, constructor);
       return;
     }
     ast.FunctionExpression functionNode = constructor.node;
@@ -2126,14 +2071,16 @@
     bool foundSuperOrRedirect = false;
     if (functionNode.initializers != null) {
       Link<ast.Node> initializers = functionNode.initializers.nodes;
-      for (Link<ast.Node> link = initializers; !link.isEmpty; link = link.tail) {
+      for (Link<ast.Node> link = initializers;
+          !link.isEmpty;
+          link = link.tail) {
         assert(link.head is ast.Send);
-        if (link.head is !ast.SendSet) {
+        if (link.head is! ast.SendSet) {
           // A super initializer or constructor redirection.
           foundSuperOrRedirect = true;
           ast.Send call = link.head;
           assert(ast.Initializers.isSuperConstructorCall(call) ||
-                 ast.Initializers.isConstructorRedirect(call));
+              ast.Initializers.isConstructorRedirect(call));
           FunctionElement target = elements[call].implementation;
           CallStructure callStructure =
               elements.getSelector(call).callStructure;
@@ -2143,11 +2090,8 @@
             compiledArguments =
                 makeStaticArgumentList(callStructure, arguments, target);
           });
-          inlineSuperOrRedirect(target,
-                                compiledArguments,
-                                constructors,
-                                fieldValues,
-                                constructor);
+          inlineSuperOrRedirect(target, compiledArguments, constructors,
+              fieldValues, constructor);
         } else {
           // A field initializer.
           ast.SendSet init = link.head;
@@ -2172,20 +2116,16 @@
         // TODO(johnniwinther): Should we find injected constructors as well?
         FunctionElement target = superClass.lookupDefaultConstructor();
         if (target == null) {
-          reporter.internalError(superClass,
-              "No default constructor available.");
+          reporter.internalError(
+              superClass, "No default constructor available.");
         }
-        List<HInstruction> arguments =
-            CallStructure.NO_ARGS.makeArgumentsList(
-                const Link<ast.Node>(),
-                target.implementation,
-                null,
-                handleConstantForOptionalParameter);
-        inlineSuperOrRedirect(target,
-                              arguments,
-                              constructors,
-                              fieldValues,
-                              constructor);
+        List<HInstruction> arguments = CallStructure.NO_ARGS.makeArgumentsList(
+            const Link<ast.Node>(),
+            target.implementation,
+            null,
+            handleConstantForOptionalParameter);
+        inlineSuperOrRedirect(
+            target, arguments, constructors, fieldValues, constructor);
       }
     }
   }
@@ -2196,36 +2136,36 @@
    *
    * Invariant: [classElement] must be an implementation element.
    */
-  void buildFieldInitializers(ClassElement classElement,
-                              Map<Element, HInstruction> fieldValues) {
+  void buildFieldInitializers(
+      ClassElement classElement, Map<Element, HInstruction> fieldValues) {
     assert(invariant(classElement, classElement.isImplementation));
     classElement.forEachInstanceField(
         (ClassElement enclosingClass, VariableElement member) {
-          if (compiler.elementHasCompileTimeError(member)) return;
-          reporter.withCurrentElement(member, () {
-            TreeElements definitions = member.treeElements;
-            ast.Node node = member.node;
-            ast.Expression initializer = member.initializer;
-            if (initializer == null) {
-              // Unassigned fields of native classes are not initialized to
-              // prevent overwriting pre-initialized native properties.
-              if (!backend.isNativeOrExtendsNative(classElement)) {
-                fieldValues[member] = graph.addConstantNull(compiler);
-              }
-            } else {
-              ast.Node right = initializer;
-              TreeElements savedElements = elements;
-              elements = definitions;
-              // In case the field initializer uses closures, run the
-              // closure to class mapper.
-              compiler.closureToClassMapper.computeClosureToClassMapping(
-                  member, node, elements);
-              inlinedFrom(member, () => right.accept(this));
-              elements = savedElements;
-              fieldValues[member] = pop();
-            }
-          });
-        });
+      if (compiler.elementHasCompileTimeError(member)) return;
+      reporter.withCurrentElement(member, () {
+        TreeElements definitions = member.treeElements;
+        ast.Node node = member.node;
+        ast.Expression initializer = member.initializer;
+        if (initializer == null) {
+          // Unassigned fields of native classes are not initialized to
+          // prevent overwriting pre-initialized native properties.
+          if (!backend.isNativeOrExtendsNative(classElement)) {
+            fieldValues[member] = graph.addConstantNull(compiler);
+          }
+        } else {
+          ast.Node right = initializer;
+          TreeElements savedElements = elements;
+          elements = definitions;
+          // In case the field initializer uses closures, run the
+          // closure to class mapper.
+          compiler.closureToClassMapper
+              .computeClosureToClassMapping(member, node, elements);
+          inlinedFrom(member, () => right.accept(this));
+          elements = savedElements;
+          fieldValues[member] = pop();
+        }
+      });
+    });
   }
 
   /**
@@ -2239,11 +2179,10 @@
    */
   HGraph buildFactory(ConstructorElement functionElement) {
     functionElement = functionElement.implementation;
-    ClassElement classElement =
-        functionElement.enclosingClass.implementation;
+    ClassElement classElement = functionElement.enclosingClass.implementation;
     bool isNativeUpgradeFactory =
-        backend.isNativeOrExtendsNative(classElement)
-            && !backend.isJsInterop(classElement);
+        backend.isNativeOrExtendsNative(classElement) &&
+            !backend.isJsInterop(classElement);
     ast.FunctionExpression function = functionElement.node;
     // Note that constructors (like any other static function) do not need
     // to deal with optional arguments. It is the callers job to provide all
@@ -2270,8 +2209,7 @@
         // If the [element] is a field-parameter then
         // initialize the field element with its value.
         InitializingFormalElement fieldParameter = parameter;
-        HInstruction parameterValue =
-            localsHandler.readLocal(fieldParameter);
+        HInstruction parameterValue = localsHandler.readLocal(fieldParameter);
         fieldValues[fieldParameter.fieldElement] = parameterValue;
       }
     });
@@ -2287,19 +2225,18 @@
 
     classElement.forEachInstanceField(
         (ClassElement enclosingClass, VariableElement member) {
-          HInstruction value = fieldValues[member];
-          if (value == null) {
-            // Uninitialized native fields are pre-initialized by the native
-            // implementation.
-            assert(invariant(
-                member, isNativeUpgradeFactory || compiler.compilationFailed));
-          } else {
-            fields.add(member);
-            DartType type = localsHandler.substInContext(member.type);
-            constructorArguments.add(potentiallyCheckOrTrustType(value, type));
-          }
-        },
-        includeSuperAndInjectedMembers: true);
+      HInstruction value = fieldValues[member];
+      if (value == null) {
+        // Uninitialized native fields are pre-initialized by the native
+        // implementation.
+        assert(invariant(
+            member, isNativeUpgradeFactory || compiler.compilationFailed));
+      } else {
+        fields.add(member);
+        DartType type = localsHandler.substInContext(member.type);
+        constructorArguments.add(potentiallyCheckOrTrustType(value, type));
+      }
+    }, includeSuperAndInjectedMembers: true);
 
     InterfaceType type = classElement.thisType;
     TypeMask ssaType =
@@ -2312,10 +2249,8 @@
 
     HInstruction newObject;
     if (!isNativeUpgradeFactory) {
-      newObject = new HForeignNew(classElement,
-          ssaType,
-          constructorArguments,
-          instantiatedTypes);
+      newObject = new HForeignNew(
+          classElement, ssaType, constructorArguments, instantiatedTypes);
       if (function != null) {
         // TODO(johnniwinther): Provide source information for creation
         // through synthetic constructors.
@@ -2329,8 +2264,8 @@
       // Null guard ensures an error if we are being called from an explicit
       // 'new' of the constructor instead of via an upgrade. It is optimized out
       // if there are field initializers.
-      add(new HFieldGet(
-          null, newObject, backend.dynamicType, isAssignable: false));
+      add(new HFieldGet(null, newObject, backend.dynamicType,
+          isAssignable: false));
       for (int i = 0; i < fields.length; i++) {
         add(new HFieldSet(fields[i], newObject, constructorArguments[i]));
       }
@@ -2346,12 +2281,12 @@
       // we can simply copy the list from this.
 
       // These locals are modified by [isIndexedTypeArgumentGet].
-      HThis source;  // The source of the type arguments.
+      HThis source; // The source of the type arguments.
       bool allIndexed = true;
       int expectedIndex = 0;
-      ClassElement contextClass;  // The class of `this`.
-      int remainingTypeVariables;  // The number of 'remaining type variables'
-                                   // of `this`.
+      ClassElement contextClass; // The class of `this`.
+      int remainingTypeVariables; // The number of 'remaining type variables'
+      // of `this`.
 
       /// Helper to identify instructions that read a type variable without
       /// substitution (that is, directly use the index). These instructions
@@ -2393,8 +2328,8 @@
 
       List<HInstruction> typeArguments = <HInstruction>[];
       classElement.typeVariables.forEach((TypeVariableType typeVariable) {
-        HInstruction argument = localsHandler.readLocal(
-            localsHandler.getTypeVariableAsLocal(typeVariable));
+        HInstruction argument = localsHandler
+            .readLocal(localsHandler.getTypeVariableAsLocal(typeVariable));
         if (allIndexed && !isIndexedTypeArgumentGet(argument)) {
           allIndexed = false;
         }
@@ -2458,8 +2393,8 @@
         currentClass.typeVariables.forEach((TypeVariableType argument) {
           // TODO(johnniwinther): Substitute [argument] with
           // `localsHandler.substInContext(argument)`.
-          bodyCallInputs.add(localsHandler.readLocal(
-              localsHandler.getTypeVariableAsLocal(argument)));
+          bodyCallInputs.add(localsHandler
+              .readLocal(localsHandler.getTypeVariableAsLocal(argument)));
         });
       }
 
@@ -2503,11 +2438,11 @@
     // must be done before adding the normal parameters, because their types
     // may contain references to type variables.
     var enclosing = element.enclosingElement;
-    if ((element.isConstructor || element.isGenerativeConstructorBody)
-        && backend.classNeedsRti(enclosing)) {
+    if ((element.isConstructor || element.isGenerativeConstructorBody) &&
+        backend.classNeedsRti(enclosing)) {
       enclosing.typeVariables.forEach((TypeVariableType typeVariable) {
-        HParameterValue param = addParameter(
-            typeVariable.element, backend.nonNullType);
+        HParameterValue param =
+            addParameter(typeVariable.element, backend.nonNullType);
         localsHandler.directLocals[
             localsHandler.getTypeVariableAsLocal(typeVariable)] = param;
       });
@@ -2521,8 +2456,7 @@
       // because that is where the type guards will also be inserted.
       // This way we ensure that a type guard will dominate the type
       // check.
-      ClosureScope scopeData =
-          localsHandler.closureData.capturingScopes[node];
+      ClosureScope scopeData = localsHandler.closureData.capturingScopes[node];
       signature.orderedForEachParameter((ParameterElement parameterElement) {
         if (element.isGenerativeConstructorBody) {
           if (scopeData != null &&
@@ -2569,11 +2503,10 @@
       if (element == backend.traceHelper) return;
       n(e) => e == null ? '' : e.name;
       String name = "${n(element.library)}:${n(element.enclosingClass)}."
-        "${n(element)}";
+          "${n(element)}";
       HConstant nameConstant = addConstantString(name);
-      add(new HInvokeStatic(backend.traceHelper,
-                            <HInstruction>[nameConstant],
-                            backend.dynamicType));
+      add(new HInvokeStatic(backend.traceHelper, <HInstruction>[nameConstant],
+          backend.dynamicType));
     }
   }
 
@@ -2584,8 +2517,7 @@
       HConstant idConstant = graph.addConstantInt(element.hashCode, compiler);
       HConstant nameConstant = addConstantString(element.name);
       add(new HInvokeStatic(backend.traceHelper,
-                            <HInstruction>[idConstant, nameConstant],
-                            backend.dynamicType));
+          <HInstruction>[idConstant, nameConstant], backend.dynamicType));
     }
   }
 
@@ -2594,21 +2526,19 @@
   bool assertTypeInContext(DartType type, [Spannable spannable]) {
     return invariant(spannable == null ? CURRENT_ELEMENT_SPANNABLE : spannable,
         () {
-          ClassElement contextClass = Types.getClassContext(type);
-          return contextClass == null ||
-                 contextClass == localsHandler.contextClass;
-        },
+      ClassElement contextClass = Types.getClassContext(type);
+      return contextClass == null || contextClass == localsHandler.contextClass;
+    },
         message: "Type '$type' is not valid context of "
-                 "${localsHandler.contextClass}.");
+            "${localsHandler.contextClass}.");
   }
 
   /// Build a [HTypeConversion] for convertion [original] to type [type].
   ///
   /// Invariant: [type] must be valid in the context.
   /// See [LocalsHandler.substInContext].
-  HInstruction buildTypeConversion(HInstruction original,
-                                   DartType type,
-                                   int kind) {
+  HInstruction buildTypeConversion(
+      HInstruction original, DartType type, int kind) {
     if (type == null) return original;
     type = type.unaliased;
     assert(assertTypeInContext(type, original));
@@ -2616,19 +2546,21 @@
       TypeMask subtype = new TypeMask.subtype(type.element, compiler.world);
       HInstruction representations = buildTypeArgumentRepresentations(type);
       add(representations);
-      return new HTypeConversion.withTypeRepresentation(type, kind, subtype,
-          original, representations);
+      return new HTypeConversion.withTypeRepresentation(
+          type, kind, subtype, original, representations);
     } else if (type.isTypeVariable) {
       TypeMask subtype = original.instructionType;
       HInstruction typeVariable = addTypeVariableReference(type);
-      return new HTypeConversion.withTypeRepresentation(type, kind, subtype,
-          original, typeVariable);
+      return new HTypeConversion.withTypeRepresentation(
+          type, kind, subtype, original, typeVariable);
     } else if (type.isFunctionType) {
-      String name = kind == HTypeConversion.CAST_TYPE_CHECK
-          ? '_asCheck' : '_assertCheck';
+      String name =
+          kind == HTypeConversion.CAST_TYPE_CHECK ? '_asCheck' : '_assertCheck';
 
-      List<HInstruction> arguments =
-          <HInstruction>[buildFunctionType(type), original];
+      List<HInstruction> arguments = <HInstruction>[
+        buildFunctionType(type),
+        original
+      ];
       pushInvokeDynamic(
           null,
           new Selector.call(
@@ -2666,7 +2598,7 @@
   }
 
   HInstruction potentiallyCheckOrTrustType(HInstruction original, DartType type,
-      { int kind: HTypeConversion.CHECKED_MODE_CHECK }) {
+      {int kind: HTypeConversion.CHECKED_MODE_CHECK}) {
     if (type == null) return original;
     HInstruction checkedOrTrusted = original;
     if (compiler.options.trustTypeAnnotations) {
@@ -2679,8 +2611,8 @@
     return checkedOrTrusted;
   }
 
-  void assertIsSubtype(ast.Node node, DartType subtype, DartType supertype,
-                       String message) {
+  void assertIsSubtype(
+      ast.Node node, DartType subtype, DartType supertype, String message) {
     HInstruction subtypeInstruction =
         analyzeTypeArgument(localsHandler.substInContext(subtype));
     HInstruction supertypeInstruction =
@@ -2688,10 +2620,13 @@
     HInstruction messageInstruction =
         graph.addConstantString(new ast.DartString.literal(message), compiler);
     Element element = helpers.assertIsSubtype;
-    var inputs = <HInstruction>[subtypeInstruction, supertypeInstruction,
-                                messageInstruction];
-    HInstruction assertIsSubtype = new HInvokeStatic(
-        element, inputs, subtypeInstruction.instructionType);
+    var inputs = <HInstruction>[
+      subtypeInstruction,
+      supertypeInstruction,
+      messageInstruction
+    ];
+    HInstruction assertIsSubtype =
+        new HInvokeStatic(element, inputs, subtypeInstruction.instructionType);
     registry?.registerTypeVariableBoundsSubtypeCheck(subtype, supertype);
     add(assertIsSubtype);
   }
@@ -2723,9 +2658,7 @@
   HInstruction popBoolified() {
     HInstruction value = pop();
     if (_checkOrTrustTypes) {
-      return potentiallyCheckOrTrustType(
-          value,
-          compiler.coreTypes.boolType,
+      return potentiallyCheckOrTrustType(value, compiler.coreTypes.boolType,
           kind: HTypeConversion.BOOLEAN_CONVERSION_CHECK);
     }
     HInstruction result = new HBoolify(value, backend.boolType);
@@ -2776,17 +2709,15 @@
       pushInvokeStatic(node, helpers.assertThrow, [pop()]);
       pop();
     }
-    handleIf(node,
-             visitCondition: buildCondition,
-             visitThen: fail);
+    handleIf(node, visitCondition: buildCondition, visitThen: fail);
   }
 
   visitBlock(ast.Block node) {
     assert(!isAborted());
-    if (!isReachable) return;  // This can only happen when inlining.
+    if (!isReachable) return; // This can only happen when inlining.
     for (Link<ast.Node> link = node.statements.nodes;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       visit(link.head);
       if (!isReachable) {
         // The block has been aborted by a return or a throw.
@@ -2803,8 +2734,8 @@
   }
 
   visitClassNode(ast.ClassNode node) {
-    reporter.internalError(node,
-        'SsaBuilder.visitClassNode should not be called.');
+    reporter.internalError(
+        node, 'SsaBuilder.visitClassNode should not be called.');
   }
 
   visitThrowExpression(ast.Expression expression) {
@@ -2841,9 +2772,8 @@
     HBasicBlock previousBlock = close(new HGoto());
 
     JumpHandler jumpHandler = createJumpHandler(node, isLoopJump: true);
-    HBasicBlock loopEntry = graph.addNewLoopHeaderBlock(
-        jumpHandler.target,
-        jumpHandler.labels());
+    HBasicBlock loopEntry =
+        graph.addNewLoopHeaderBlock(jumpHandler.target, jumpHandler.labels());
     previousBlock.addSuccessor(loopEntry);
     open(loopEntry);
 
@@ -2864,10 +2794,8 @@
    * no back edge because they abort (throw/return/break in the body and have
    * no continues).
    */
-  void endLoop(HBasicBlock loopEntry,
-               HBasicBlock branchExitBlock,
-               JumpHandler jumpHandler,
-               LocalsHandler savedLocals) {
+  void endLoop(HBasicBlock loopEntry, HBasicBlock branchExitBlock,
+      JumpHandler jumpHandler, LocalsHandler savedLocals) {
     HBasicBlock loopExitBlock = addNewBlock();
 
     List<LocalsHandler> breakHandlers = <LocalsHandler>[];
@@ -2917,11 +2845,8 @@
   // For while loops, initializer and update are null.
   // The condition function must return a boolean result.
   // None of the functions must leave anything on the stack.
-  void handleLoop(ast.Node loop,
-                  void initialize(),
-                  HInstruction condition(),
-                  void update(),
-                  void body()) {
+  void handleLoop(ast.Node loop, void initialize(), HInstruction condition(),
+      void update(), void body()) {
     // Generate:
     //  <initializer>
     //  loop-entry:
@@ -2941,8 +2866,7 @@
       startBlock = initializerBlock;
       initialize();
       assert(!isAborted());
-      initializerGraph =
-          new SubExpression(initializerBlock, current);
+      initializerGraph = new SubExpression(initializerBlock, current);
     }
 
     loopNesting++;
@@ -2985,13 +2909,12 @@
       HBasicBlock updateBlock = addNewBlock();
 
       List<LocalsHandler> continueHandlers = <LocalsHandler>[];
-      jumpHandler.forEachContinue((HContinue instruction,
-                                   LocalsHandler locals) {
+      jumpHandler
+          .forEachContinue((HContinue instruction, LocalsHandler locals) {
         instruction.block.addSuccessor(updateBlock);
         continueHandlers.add(locals);
       });
 
-
       if (bodyBlock != null) {
         continueHandlers.add(localsHandler);
         bodyBlock.addSuccessor(updateBlock);
@@ -3006,15 +2929,13 @@
       if (!labels.isEmpty) {
         beginBodyBlock.setBlockFlow(
             new HLabeledBlockInformation(
-                new HSubGraphBlockInformation(bodyGraph),
-                jumpHandler.labels(),
+                new HSubGraphBlockInformation(bodyGraph), jumpHandler.labels(),
                 isContinue: true),
             updateBlock);
       } else if (target != null && target.isContinueTarget) {
         beginBodyBlock.setBlockFlow(
             new HLabeledBlockInformation.implicit(
-                new HSubGraphBlockInformation(bodyGraph),
-                target,
+                new HSubGraphBlockInformation(bodyGraph), target,
                 isContinue: true),
             updateBlock);
       }
@@ -3037,16 +2958,15 @@
       endLoop(conditionBlock, conditionExitBlock, jumpHandler, savedLocals);
 
       conditionBlock.postProcessLoopHeader();
-      HLoopBlockInformation info =
-          new HLoopBlockInformation(
-              _loopKind(loop),
-              wrapExpressionGraph(initializerGraph),
-              wrapExpressionGraph(conditionExpression),
-              wrapStatementGraph(bodyGraph),
-              wrapExpressionGraph(updateGraph),
-              conditionBlock.loopInformation.target,
-              conditionBlock.loopInformation.labels,
-              sourceInformationBuilder.buildLoop(loop));
+      HLoopBlockInformation info = new HLoopBlockInformation(
+          _loopKind(loop),
+          wrapExpressionGraph(initializerGraph),
+          wrapExpressionGraph(conditionExpression),
+          wrapStatementGraph(bodyGraph),
+          wrapExpressionGraph(updateGraph),
+          conditionBlock.loopInformation.target,
+          conditionBlock.loopInformation.labels,
+          sourceInformationBuilder.buildLoop(loop));
 
       startBlock.setBlockFlow(info, current);
       loopInfo.loopBlockInformation = info;
@@ -3078,11 +2998,10 @@
       conditionEndBlock.addAtExit(new HIf(condition));
       conditionEndBlock.addSuccessor(elseBlock);
       conditionEndBlock.remove(conditionEndBlock.last);
-      HIfBlockInformation info =
-          new HIfBlockInformation(
-              wrapExpressionGraph(conditionExpression),
-              wrapStatementGraph(bodyGraph),
-              wrapStatementGraph(elseGraph));
+      HIfBlockInformation info = new HIfBlockInformation(
+          wrapExpressionGraph(conditionExpression),
+          wrapStatementGraph(bodyGraph),
+          wrapStatementGraph(elseGraph));
 
       conditionEndBlock.setBlockFlow(info, current);
       HIf ifBlock = conditionEndBlock.last;
@@ -3096,8 +3015,8 @@
         label.setBreakTarget();
         SubGraph labelGraph = new SubGraph(conditionBlock, current);
         HLabeledBlockInformation labelInfo = new HLabeledBlockInformation(
-                new HSubGraphBlockInformation(labelGraph),
-                <LabelDefinition>[label]);
+            new HSubGraphBlockInformation(labelGraph),
+            <LabelDefinition>[label]);
 
         conditionBlock.setBlockFlow(labelInfo, current);
 
@@ -3151,11 +3070,9 @@
       visit(node.condition);
       return popBoolified();
     }
-    handleLoop(node,
-               () {},
-               buildCondition,
-               () {},
-               () { visit(node.body); });
+    handleLoop(node, () {}, buildCondition, () {}, () {
+      visit(node.body);
+    });
   }
 
   visitDoWhile(ast.DoWhile node) {
@@ -3199,8 +3116,8 @@
       HBasicBlock conditionBlock = addNewBlock();
 
       List<LocalsHandler> continueHandlers = <LocalsHandler>[];
-      jumpHandler.forEachContinue((HContinue instruction,
-                                   LocalsHandler locals) {
+      jumpHandler
+          .forEachContinue((HContinue instruction, LocalsHandler locals) {
         instruction.block.addSuccessor(conditionBlock);
         continueHandlers.add(locals);
       });
@@ -3219,11 +3136,11 @@
             new HSubGraphBlockInformation(bodyGraph);
         HLabeledBlockInformation info;
         if (!labels.isEmpty) {
-          info = new HLabeledBlockInformation(bodyInfo, labels,
-                                              isContinue: true);
+          info =
+              new HLabeledBlockInformation(bodyInfo, labels, isContinue: true);
         } else {
           info = new HLabeledBlockInformation.implicit(bodyInfo, target,
-                                                       isContinue: true);
+              isContinue: true);
         }
         bodyEntryBlock.setBlockFlow(info, conditionBlock);
       }
@@ -3254,16 +3171,15 @@
 
       loopEntryBlock.postProcessLoopHeader();
       SubGraph bodyGraph = new SubGraph(loopEntryBlock, bodyExitBlock);
-      HLoopBlockInformation loopBlockInfo =
-          new HLoopBlockInformation(
-              HLoopBlockInformation.DO_WHILE_LOOP,
-              null,
-              wrapExpressionGraph(conditionExpression),
-              wrapStatementGraph(bodyGraph),
-              null,
-              loopEntryBlock.loopInformation.target,
-              loopEntryBlock.loopInformation.labels,
-              sourceInformationBuilder.buildLoop(node));
+      HLoopBlockInformation loopBlockInfo = new HLoopBlockInformation(
+          HLoopBlockInformation.DO_WHILE_LOOP,
+          null,
+          wrapExpressionGraph(conditionExpression),
+          wrapStatementGraph(bodyGraph),
+          null,
+          loopEntryBlock.loopInformation.target,
+          loopEntryBlock.loopInformation.labels,
+          sourceInformationBuilder.buildLoop(node));
       loopEntryBlock.setBlockFlow(loopBlockInfo, current);
       loopInfo.loopBlockInformation = loopBlockInfo;
     } else {
@@ -3320,7 +3236,7 @@
     TypeMask type =
         new TypeMask.nonNullExact(closureClassElement, compiler.world);
     push(new HForeignNew(closureClassElement, type, capturedVariables)
-        ..sourceInformation = sourceInformationBuilder.buildCreate(node));
+      ..sourceInformation = sourceInformationBuilder.buildCreate(node));
 
     Element methodElement = nestedClosureData.closureElement;
     registry?.registerInstantiatedClosure(methodElement);
@@ -3343,15 +3259,14 @@
     if (node.isThis()) {
       visitThisGet(node);
     } else {
-      reporter.internalError(node,
-          "SsaFromAstMixin.visitIdentifier on non-this.");
+      reporter.internalError(
+          node, "SsaFromAstMixin.visitIdentifier on non-this.");
     }
   }
 
   visitIf(ast.If node) {
     assert(isReachable);
-    handleIf(
-        node,
+    handleIf(node,
         visitCondition: () => visit(node.condition),
         visitThen: () => visit(node.thenPart),
         visitElse: node.elsePart != null ? () => visit(node.elsePart) : null,
@@ -3359,13 +3274,12 @@
   }
 
   void handleIf(ast.Node diagnosticNode,
-                {void visitCondition(),
-                 void visitThen(),
-                 void visitElse(),
-                 SourceInformation sourceInformation}) {
+      {void visitCondition(),
+      void visitThen(),
+      void visitElse(),
+      SourceInformation sourceInformation}) {
     SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, diagnosticNode);
-    branchBuilder.handleIf(
-        visitCondition, visitThen, visitElse,
+    branchBuilder.handleIf(visitCondition, visitThen, visitElse,
         sourceInformation: sourceInformation);
   }
 
@@ -3378,19 +3292,17 @@
   @override
   void visitLogicalAnd(ast.Send node, ast.Node left, ast.Node right, _) {
     SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, node);
-    branchBuilder.handleLogicalAndOrWithLeftNode(
-        left,
-        () { visit(right); },
-        isAnd: true);
+    branchBuilder.handleLogicalAndOrWithLeftNode(left, () {
+      visit(right);
+    }, isAnd: true);
   }
 
   @override
   void visitLogicalOr(ast.Send node, ast.Node left, ast.Node right, _) {
     SsaBranchBuilder branchBuilder = new SsaBranchBuilder(this, node);
-    branchBuilder.handleLogicalAndOrWithLeftNode(
-        left,
-        () { visit(right); },
-        isAnd: false);
+    branchBuilder.handleLogicalAndOrWithLeftNode(left, () {
+      visit(right);
+    }, isAnd: false);
   }
 
   @override
@@ -3400,13 +3312,12 @@
     SourceInformation sourceInformation =
         sourceInformationBuilder.buildGeneric(node);
     push(new HNot(popBoolified(), backend.boolType)
-        ..sourceInformation = sourceInformation);
+      ..sourceInformation = sourceInformation);
   }
 
   @override
-  void visitUnary(ast.Send node,
-                  UnaryOperator operator,
-                  ast.Node expression,_) {
+  void visitUnary(
+      ast.Send node, UnaryOperator operator, ast.Node expression, _) {
     assert(node.argumentsNode is ast.Prefix);
     HInstruction operand = visitAndPop(expression);
 
@@ -3422,18 +3333,13 @@
     }
 
     pushInvokeDynamic(
-        node,
-        elements.getSelector(node),
-        elements.getTypeMask(node),
-        [operand],
+        node, elements.getSelector(node), elements.getTypeMask(node), [operand],
         sourceInformation: sourceInformationBuilder.buildGeneric(node));
   }
 
   @override
-  void visitBinary(ast.Send node,
-                   ast.Node left,
-                   BinaryOperator operator,
-                   ast.Node right, _) {
+  void visitBinary(ast.Send node, ast.Node left, BinaryOperator operator,
+      ast.Node right, _) {
     handleBinary(node, left, right);
   }
 
@@ -3454,24 +3360,17 @@
   }
 
   void handleBinary(ast.Send node, ast.Node left, ast.Node right) {
-    visitBinarySend(
-        visitAndPop(left),
-        visitAndPop(right),
-        elements.getSelector(node),
-        elements.getTypeMask(node),
-        node,
+    visitBinarySend(visitAndPop(left), visitAndPop(right),
+        elements.getSelector(node), elements.getTypeMask(node), node,
         sourceInformation:
             sourceInformationBuilder.buildGeneric(node.selector));
   }
 
   /// TODO(johnniwinther): Merge [visitBinarySend] with [handleBinary] and
   /// remove use of [location] for source information.
-  void visitBinarySend(HInstruction left,
-                       HInstruction right,
-                       Selector selector,
-                       TypeMask mask,
-                       ast.Send send,
-                       {SourceInformation sourceInformation}) {
+  void visitBinarySend(HInstruction left, HInstruction right, Selector selector,
+      TypeMask mask, ast.Send send,
+      {SourceInformation sourceInformation}) {
     pushInvokeDynamic(send, selector, mask, [left, right],
         sourceInformation: sourceInformation);
   }
@@ -3496,10 +3395,7 @@
    * [selector].
    */
   void generateInstanceGetterWithCompiledReceiver(
-      ast.Send send,
-      Selector selector,
-      TypeMask mask,
-      HInstruction receiver) {
+      ast.Send send, Selector selector, TypeMask mask, HInstruction receiver) {
     assert(Elements.isInstanceSend(send, elements));
     assert(selector.isGetter);
     pushInvokeDynamic(send, selector, mask, [receiver],
@@ -3508,8 +3404,8 @@
 
   /// Inserts a call to checkDeferredIsLoaded for [prefixElement].
   /// If [prefixElement] is [null] ndo nothing.
-  void generateIsDeferredLoadedCheckIfNeeded(PrefixElement prefixElement,
-                                             ast.Node location) {
+  void generateIsDeferredLoadedCheckIfNeeded(
+      PrefixElement prefixElement, ast.Node location) {
     if (prefixElement == null) return;
     String loadId =
         compiler.deferredLoadTask.getImportDeferName(location, prefixElement);
@@ -3525,16 +3421,14 @@
   /// resolves to a deferred library.
   void generateIsDeferredLoadedCheckOfSend(ast.Send node) {
     generateIsDeferredLoadedCheckIfNeeded(
-        compiler.deferredLoadTask.deferredPrefixElement(node, elements),
-        node);
+        compiler.deferredLoadTask.deferredPrefixElement(node, elements), node);
   }
 
   void handleInvalidStaticGet(ast.Send node, Element element) {
     SourceInformation sourceInformation =
         sourceInformationBuilder.buildGet(node);
     generateThrowNoSuchMethod(
-        node,
-        noSuchMethodTargetSymbolString(element, 'get'),
+        node, noSuchMethodTargetSymbolString(element, 'get'),
         argumentNodes: const Link<ast.Node>(),
         sourceInformation: sourceInformation);
   }
@@ -3556,32 +3450,27 @@
   }
 
   /// Read a static or top level [field] of constant value.
-  void generateStaticConstGet(
-      ast.Send node,
-      FieldElement field,
-      ConstantExpression constant,
-      SourceInformation sourceInformation) {
+  void generateStaticConstGet(ast.Send node, FieldElement field,
+      ConstantExpression constant, SourceInformation sourceInformation) {
     ConstantValue value = backend.constants.getConstantValue(constant);
     HConstant instruction;
     // Constants that are referred via a deferred prefix should be referred
     // by reference.
-    PrefixElement prefix = compiler.deferredLoadTask
-        .deferredPrefixElement(node, elements);
+    PrefixElement prefix =
+        compiler.deferredLoadTask.deferredPrefixElement(node, elements);
     if (prefix != null) {
       instruction =
           graph.addDeferredConstant(value, prefix, sourceInformation, compiler);
     } else {
-      instruction = graph.addConstant(
-          value, compiler, sourceInformation: sourceInformation);
+      instruction = graph.addConstant(value, compiler,
+          sourceInformation: sourceInformation);
     }
     stack.add(instruction);
     // The inferrer may have found a better type than the constant
     // handler in the case of lists, because the constant handler
     // does not look at elements in the list.
-    TypeMask type =
-        TypeMaskFactory.inferredTypeForElement(field, compiler);
-    if (!type.containsAll(compiler.world) &&
-        !instruction.isConstantNull()) {
+    TypeMask type = TypeMaskFactory.inferredTypeForElement(field, compiler);
+    if (!type.containsAll(compiler.world) && !instruction.isConstantNull()) {
       // TODO(13429): The inferrer should know that an element
       // cannot be null.
       instruction.instructionType = type.nonNullable();
@@ -3607,17 +3496,15 @@
       } else {
         // TODO(5346): Try to avoid the need for calling [declaration] before
         // creating an [HStatic].
-        HInstruction instruction = new HStatic(
-            field.declaration,
+        HInstruction instruction = new HStatic(field.declaration,
             TypeMaskFactory.inferredTypeForElement(field, compiler))
-                ..sourceInformation = sourceInformation;
+          ..sourceInformation = sourceInformation;
         push(instruction);
       }
     } else {
       HInstruction instruction = new HLazyStatic(
-          field,
-          TypeMaskFactory.inferredTypeForElement(field, compiler))
-              ..sourceInformation = sourceInformation;
+          field, TypeMaskFactory.inferredTypeForElement(field, compiler))
+        ..sourceInformation = sourceInformation;
       push(instruction);
     }
   }
@@ -3630,7 +3517,7 @@
       generateDeferredLoaderGet(node, getter, sourceInformation);
     } else {
       pushInvokeStatic(node, getter, <HInstruction>[],
-                       sourceInformation: sourceInformation);
+          sourceInformation: sourceInformation);
     }
   }
 
@@ -3648,13 +3535,13 @@
     SourceInformation sourceInformation =
         sourceInformationBuilder.buildGet(node);
     push(new HStatic(function.declaration, backend.nonNullType)
-        ..sourceInformation = sourceInformation);
+      ..sourceInformation = sourceInformation);
   }
 
   /// Read a local variable, function or parameter.
   void buildLocalGet(LocalElement local, SourceInformation sourceInformation) {
-    stack.add(localsHandler.readLocal(
-              local, sourceInformation: sourceInformation));
+    stack.add(
+        localsHandler.readLocal(local, sourceInformation: sourceInformation));
   }
 
   void handleLocalGet(ast.Send node, LocalElement local) {
@@ -3662,20 +3549,13 @@
   }
 
   @override
-  void visitDynamicPropertyGet(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      _) {
+  void visitDynamicPropertyGet(ast.Send node, ast.Node receiver, Name name, _) {
     generateDynamicGet(node);
   }
 
   @override
   void visitIfNotNullDynamicPropertyGet(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      _) {
+      ast.Send node, ast.Node receiver, Name name, _) {
     // exp?.x compiled as:
     //   t1 = exp;
     //   result = t1 == null ? t1 : t1.x;
@@ -3701,8 +3581,8 @@
 
   /// Pushes a boolean checking [expression] against null.
   pushCheckNull(HInstruction expression) {
-    push(new HIdentity(expression, graph.addConstantNull(compiler),
-          null, backend.boolType));
+    push(new HIdentity(
+        expression, graph.addConstantNull(compiler), null, backend.boolType));
   }
 
   @override
@@ -3721,72 +3601,47 @@
   }
 
   @override
-  void visitStaticFieldGet(
-      ast.Send node,
-      FieldElement field,
-      _) {
+  void visitStaticFieldGet(ast.Send node, FieldElement field, _) {
     generateStaticFieldGet(node, field);
   }
 
   @override
-  void visitStaticFunctionGet(
-      ast.Send node,
-      MethodElement function,
-      _) {
+  void visitStaticFunctionGet(ast.Send node, MethodElement function, _) {
     generateStaticFunctionGet(node, function);
   }
 
   @override
-  void visitStaticGetterGet(
-      ast.Send node,
-      FunctionElement getter,
-      _) {
+  void visitStaticGetterGet(ast.Send node, FunctionElement getter, _) {
     generateStaticGetterGet(node, getter);
   }
 
   @override
-  void visitThisPropertyGet(
-      ast.Send node,
-      Name name,
-      _) {
+  void visitThisPropertyGet(ast.Send node, Name name, _) {
     generateDynamicGet(node);
   }
 
   @override
-  void visitTopLevelFieldGet(
-      ast.Send node,
-      FieldElement field,
-      _) {
+  void visitTopLevelFieldGet(ast.Send node, FieldElement field, _) {
     generateStaticFieldGet(node, field);
   }
 
   @override
-  void visitTopLevelFunctionGet(
-      ast.Send node,
-      MethodElement function,
-      _) {
+  void visitTopLevelFunctionGet(ast.Send node, MethodElement function, _) {
     generateStaticFunctionGet(node, function);
   }
 
   @override
-  void visitTopLevelGetterGet(
-      ast.Send node,
-      FunctionElement getter,
-      _) {
+  void visitTopLevelGetterGet(ast.Send node, FunctionElement getter, _) {
     generateStaticGetterGet(node, getter);
   }
 
-  void generateInstanceSetterWithCompiledReceiver(ast.Send send,
-                                                  HInstruction receiver,
-                                                  HInstruction value,
-                                                  {Selector selector,
-                                                   TypeMask mask,
-                                                   ast.Node location}) {
-    assert(invariant(
-        send == null ? location : send,
+  void generateInstanceSetterWithCompiledReceiver(
+      ast.Send send, HInstruction receiver, HInstruction value,
+      {Selector selector, TypeMask mask, ast.Node location}) {
+    assert(invariant(send == null ? location : send,
         send == null || Elements.isInstanceSend(send, elements),
         message: "Unexpected instance setter"
-                 "${send != null ? " element: ${elements[send]}" : ""}"));
+            "${send != null ? " element: ${elements[send]}" : ""}"));
     if (selector == null) {
       assert(send != null);
       selector = elements.getSelector(send);
@@ -3805,9 +3660,8 @@
     stack.add(value);
   }
 
-  void generateNoSuchSetter(ast.Node location,
-                            Element element,
-                            HInstruction value) {
+  void generateNoSuchSetter(
+      ast.Node location, Element element, HInstruction value) {
     List<HInstruction> arguments =
         value == null ? const <HInstruction>[] : <HInstruction>[value];
     // An erroneous element indicates an unresolved static setter.
@@ -3816,16 +3670,15 @@
         argumentValues: arguments);
   }
 
-  void generateNonInstanceSetter(ast.SendSet send,
-                                 Element element,
-                                 HInstruction value,
-                                 {ast.Node location}) {
+  void generateNonInstanceSetter(
+      ast.SendSet send, Element element, HInstruction value,
+      {ast.Node location}) {
     if (location == null) {
       assert(send != null);
       location = send;
     }
-    assert(invariant(location,
-        send == null || !Elements.isInstanceSend(send, elements),
+    assert(invariant(
+        location, send == null || !Elements.isInstanceSend(send, elements),
         message: "Unexpected non instance setter: $element."));
     if (Elements.isStaticOrTopLevelField(element)) {
       if (element.isSetter) {
@@ -3838,7 +3691,7 @@
       }
       stack.add(value);
     } else if (Elements.isError(element)) {
-      generateNoSuchSetter(location, element,  send == null ? null : value);
+      generateNoSuchSetter(location, element, send == null ? null : value);
     } else if (Elements.isMalformed(element)) {
       // TODO(ahe): Do something like [generateWrongArgumentCountError].
       stack.add(graph.addConstantNull(compiler));
@@ -3889,20 +3742,19 @@
         // each part the generated sub-template's holes match the index of the
         // inputs that are later used to instantiate it. We do this by starting
         // the indexing with the number of inputs from previous sub-templates.
-        templates.add(
-            rtiEncoder.getTypeRepresentationWithPlaceholders(
-                argument, (variable) {
-              HInstruction runtimeType = addTypeVariableReference(variable);
-              inputs.add(runtimeType);
-            }, firstPlaceholderIndex: inputs.length));
+        templates.add(rtiEncoder.getTypeRepresentationWithPlaceholders(argument,
+            (variable) {
+          HInstruction runtimeType = addTypeVariableReference(variable);
+          inputs.add(runtimeType);
+        }, firstPlaceholderIndex: inputs.length));
       }
       // TODO(sra): This is a fresh template each time.  We can't let the
       // template manager build them.
-      js.Template code = new js.Template(null,
-                                         new js.ArrayInitializer(templates));
-      HInstruction representation =
-          new HForeignCode(code, backend.readableArrayType, inputs,
-              nativeBehavior: native.NativeBehavior.PURE_ALLOCATION);
+      js.Template code =
+          new js.Template(null, new js.ArrayInitializer(templates));
+      HInstruction representation = new HForeignCode(
+          code, backend.readableArrayType, inputs,
+          nativeBehavior: native.NativeBehavior.PURE_ALLOCATION);
       return representation;
     }
   }
@@ -3914,10 +3766,8 @@
       ErroneousElement element = type.element;
       generateTypeError(node, element.message);
     } else {
-      HInstruction converted = buildTypeConversion(
-          expressionInstruction,
-          localsHandler.substInContext(type),
-          HTypeConversion.CAST_TYPE_CHECK);
+      HInstruction converted = buildTypeConversion(expressionInstruction,
+          localsHandler.substInContext(type), HTypeConversion.CAST_TYPE_CHECK);
       if (converted != expressionInstruction) add(converted);
       stack.add(converted);
     }
@@ -3937,16 +3787,14 @@
     push(new HNot(instruction, backend.boolType));
   }
 
-  HInstruction buildIsNode(ast.Node node,
-                           DartType type,
-                           HInstruction expression) {
+  HInstruction buildIsNode(
+      ast.Node node, DartType type, HInstruction expression) {
     type = localsHandler.substInContext(type).unaliased;
     if (type.isFunctionType) {
       List arguments = [buildFunctionType(type), expression];
       pushInvokeDynamic(
           node,
-          new Selector.call(
-              new PrivateName('_isTest', helpers.jsHelperLibrary),
+          new Selector.call(new PrivateName('_isTest', helpers.jsHelperLibrary),
               CallStructure.ONE_ARG),
           null,
           arguments);
@@ -3961,18 +3809,19 @@
     } else if (RuntimeTypes.hasTypeArguments(type)) {
       ClassElement element = type.element;
       Element helper = helpers.checkSubtype;
-      HInstruction representations =
-          buildTypeArgumentRepresentations(type);
+      HInstruction representations = buildTypeArgumentRepresentations(type);
       add(representations);
       js.Name operator = backend.namer.operatorIs(element);
       HInstruction isFieldName = addConstantStringFromName(operator);
       HInstruction asFieldName = compiler.world.hasAnyStrictSubtype(element)
           ? addConstantStringFromName(backend.namer.substitutionName(element))
           : graph.addConstantNull(compiler);
-      List<HInstruction> inputs = <HInstruction>[expression,
-                                                 isFieldName,
-                                                 representations,
-                                                 asFieldName];
+      List<HInstruction> inputs = <HInstruction>[
+        expression,
+        isFieldName,
+        representations,
+        asFieldName
+      ];
       pushInvokeStatic(node, helper, inputs, typeMask: backend.boolType);
       HInstruction call = pop();
       return new HIs.compound(type, expression, call, backend.boolType);
@@ -4006,15 +3855,14 @@
       Link<ast.Node> arguments = node.arguments;
       int positionalArgumentCount = callStructure.positionalArgumentCount;
       for (int i = 0;
-           i < positionalArgumentCount;
-           arguments = arguments.tail, i++) {
+          i < positionalArgumentCount;
+          arguments = arguments.tail, i++) {
         visit(arguments.head);
         list.add(pop());
       }
 
       // Visit named arguments and add them into a temporary map.
-      Map<String, HInstruction> instructions =
-          new Map<String, HInstruction>();
+      Map<String, HInstruction> instructions = new Map<String, HInstruction>();
       List<String> namedArguments = callStructure.namedArguments;
       int nameIndex = 0;
       for (; !arguments.isEmpty; arguments = arguments.tail) {
@@ -4039,8 +3887,7 @@
    * Invariant: [element] must be an implementation element.
    */
   List<HInstruction> makeStaticArgumentList(CallStructure callStructure,
-                                            Link<ast.Node> arguments,
-                                            FunctionElement element) {
+      Link<ast.Node> arguments, FunctionElement element) {
     assert(invariant(element, element.isImplementation));
 
     HInstruction compileArgument(ast.Node argument) {
@@ -4052,12 +3899,13 @@
         arguments,
         element,
         compileArgument,
-        backend.isJsInterop(element) ?
-            handleConstantForOptionalParameterJsInterop :
-            handleConstantForOptionalParameter);
+        backend.isJsInterop(element)
+            ? handleConstantForOptionalParameterJsInterop
+            : handleConstantForOptionalParameter);
   }
 
-  void addGenericSendArgumentsToList(Link<ast.Node> link, List<HInstruction> list) {
+  void addGenericSendArgumentsToList(
+      Link<ast.Node> link, List<HInstruction> list) {
     for (; !link.isEmpty; link = link.tail) {
       visit(link.head);
       list.add(pop());
@@ -4081,7 +3929,7 @@
     addDynamicSendArgumentsToList(node, inputs);
 
     pushInvokeDynamic(node, selector, mask, inputs,
-                      sourceInformation: sourceInformation);
+        sourceInformation: sourceInformation);
     if (selector.isSetter || selector.isIndexSet) {
       pop();
       stack.add(inputs.last);
@@ -4089,104 +3937,61 @@
   }
 
   @override
-  visitDynamicPropertyInvoke(
-      ast.Send node,
-      ast.Node receiver,
-      ast.NodeList arguments,
-      Selector selector,
-      _) {
+  visitDynamicPropertyInvoke(ast.Send node, ast.Node receiver,
+      ast.NodeList arguments, Selector selector, _) {
     generateDynamicSend(node);
   }
 
   @override
-  visitIfNotNullDynamicPropertyInvoke(
-      ast.Send node,
-      ast.Node receiver,
-      ast.NodeList arguments,
-      Selector selector,
-      _) {
+  visitIfNotNullDynamicPropertyInvoke(ast.Send node, ast.Node receiver,
+      ast.NodeList arguments, Selector selector, _) {
     /// Desugar `exp?.m()` to `(t1 = exp) == null ? t1 : t1.m()`
     HInstruction receiver;
     SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
-    brancher.handleConditional(
-        () {
-          receiver = generateInstanceSendReceiver(node);
-          pushCheckNull(receiver);
-        },
-        () => stack.add(receiver),
-        () => _generateDynamicSend(node, receiver));
+    brancher.handleConditional(() {
+      receiver = generateInstanceSendReceiver(node);
+      pushCheckNull(receiver);
+    }, () => stack.add(receiver), () => _generateDynamicSend(node, receiver));
   }
 
   @override
   visitThisPropertyInvoke(
-      ast.Send node,
-      ast.NodeList arguments,
-      Selector selector,
-      _) {
+      ast.Send node, ast.NodeList arguments, Selector selector, _) {
     generateDynamicSend(node);
   }
 
   @override
-  visitExpressionInvoke(
-      ast.Send node,
-      ast.Node expression,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    generateCallInvoke(
-        node,
-        visitAndPop(expression),
+  visitExpressionInvoke(ast.Send node, ast.Node expression,
+      ast.NodeList arguments, CallStructure callStructure, _) {
+    generateCallInvoke(node, visitAndPop(expression),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   @override
   visitThisInvoke(
-      ast.Send node,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    generateCallInvoke(
-        node,
-        localsHandler.readThis(),
+      ast.Send node, ast.NodeList arguments, CallStructure callStructure, _) {
+    generateCallInvoke(node, localsHandler.readThis(),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   @override
-  visitParameterInvoke(
-      ast.Send node,
-      ParameterElement parameter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    generateCallInvoke(
-        node,
-            localsHandler.readLocal(parameter),
+  visitParameterInvoke(ast.Send node, ParameterElement parameter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
+    generateCallInvoke(node, localsHandler.readLocal(parameter),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   @override
-  visitLocalVariableInvoke(
-      ast.Send node,
-      LocalVariableElement variable,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    generateCallInvoke(
-        node,
-        localsHandler.readLocal(variable),
+  visitLocalVariableInvoke(ast.Send node, LocalVariableElement variable,
+      ast.NodeList arguments, CallStructure callStructure, _) {
+    generateCallInvoke(node, localsHandler.readLocal(variable),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   @override
-  visitLocalFunctionInvoke(
-      ast.Send node,
-      LocalFunctionElement function,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
-    generateCallInvoke(
-        node,
-        localsHandler.readLocal(function),
+  visitLocalFunctionInvoke(ast.Send node, LocalFunctionElement function,
+      ast.NodeList arguments, CallStructure callStructure, _) {
+    generateCallInvoke(node, localsHandler.readLocal(function),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
@@ -4207,8 +4012,8 @@
     // argument, which is the foreign code.
     if (link.isEmpty || link.tail.isEmpty) {
       // We should not get here because the call should be compiled to NSM.
-      reporter.internalError(node.argumentsNode,
-          'At least two arguments expected.');
+      reporter.internalError(
+          node.argumentsNode, 'At least two arguments expected.');
     }
     native.NativeBehavior nativeBehavior =
         compiler.enqueuer.resolution.nativeEnqueuer.getNativeBehaviorOf(node);
@@ -4217,12 +4022,11 @@
     addGenericSendArgumentsToList(link.tail.tail, inputs);
 
     if (nativeBehavior.codeTemplate.positionalArgumentCount != inputs.length) {
-      reporter.reportErrorMessage(
-          node, MessageKind.GENERIC,
-          {'text':
-            'Mismatch between number of placeholders'
-            ' and number of arguments.'});
-      stack.add(graph.addConstantNull(compiler));  // Result expected on stack.
+      reporter.reportErrorMessage(node, MessageKind.GENERIC, {
+        'text': 'Mismatch between number of placeholders'
+            ' and number of arguments.'
+      });
+      stack.add(graph.addConstantNull(compiler)); // Result expected on stack.
       return;
     }
 
@@ -4236,18 +4040,15 @@
     SourceInformation sourceInformation =
         sourceInformationBuilder.buildCall(node, node.argumentsNode);
     if (nativeBehavior.codeTemplate.isExpression) {
-      push(new HForeignCode(
-          nativeBehavior.codeTemplate, ssaType, inputs,
-          effects: nativeBehavior.sideEffects,
-          nativeBehavior: nativeBehavior)
-              ..sourceInformation = sourceInformation);
+      push(new HForeignCode(nativeBehavior.codeTemplate, ssaType, inputs,
+          effects: nativeBehavior.sideEffects, nativeBehavior: nativeBehavior)
+        ..sourceInformation = sourceInformation);
     } else {
-      push(new HForeignCode(
-          nativeBehavior.codeTemplate, ssaType, inputs,
+      push(new HForeignCode(nativeBehavior.codeTemplate, ssaType, inputs,
           isStatement: true,
           effects: nativeBehavior.sideEffects,
           nativeBehavior: nativeBehavior)
-              ..sourceInformation = sourceInformation);
+        ..sourceInformation = sourceInformation);
     }
   }
 
@@ -4262,8 +4063,8 @@
 
   void handleForeignJsCurrentIsolateContext(ast.Send node) {
     if (!node.arguments.isEmpty) {
-      reporter.internalError(node,
-          'Too many arguments to JS_CURRENT_ISOLATE_CONTEXT.');
+      reporter.internalError(
+          node, 'Too many arguments to JS_CURRENT_ISOLATE_CONTEXT.');
     }
 
     if (!compiler.hasIsolateSupport) {
@@ -4271,9 +4072,7 @@
       // to fetch the static state.
       String name = backend.namer.staticStateHolder;
       push(new HForeignCode(
-          js.js.parseForeignJS(name),
-          backend.dynamicType,
-          <HInstruction>[],
+          js.js.parseForeignJS(name), backend.dynamicType, <HInstruction>[],
           nativeBehavior: native.NativeBehavior.DEPENDS_OTHER));
     } else {
       // Call a helper method from the isolate library. The isolate
@@ -4281,8 +4080,7 @@
       // Leg's isolate.
       Element element = helpers.currentIsolate;
       if (element == null) {
-        reporter.internalError(node,
-            'Isolate library and compiler mismatch.');
+        reporter.internalError(node, 'Isolate library and compiler mismatch.');
       }
       pushInvokeStatic(null, element, [], typeMask: backend.dynamicType);
     }
@@ -4290,102 +4088,91 @@
 
   void handleForeignJsGetFlag(ast.Send node) {
     List<ast.Node> arguments = node.arguments.toList();
-     ast.Node argument;
-     switch (arguments.length) {
-     case 0:
-       reporter.reportErrorMessage(
-           node, MessageKind.GENERIC,
-           {'text': 'Error: Expected one argument to JS_GET_FLAG.'});
-       return;
-     case 1:
-       argument = arguments[0];
-       break;
-     default:
-       for (int i = 1; i < arguments.length; i++) {
-         reporter.reportErrorMessage(
-             arguments[i], MessageKind.GENERIC,
-             {'text': 'Error: Extra argument to JS_GET_FLAG.'});
-       }
-       return;
-     }
-     ast.LiteralString string = argument.asLiteralString();
-     if (string == null) {
-       reporter.reportErrorMessage(
-           argument, MessageKind.GENERIC,
-           {'text': 'Error: Expected a literal string.'});
-     }
-     String name = string.dartString.slowToString();
-     bool value = false;
-     switch (name) {
-       case 'MUST_RETAIN_METADATA':
-         value = backend.mustRetainMetadata;
-         break;
-       case 'USE_CONTENT_SECURITY_POLICY':
-         value = compiler.options.useContentSecurityPolicy;
-         break;
-       default:
-         reporter.reportErrorMessage(
-             node, MessageKind.GENERIC,
-             {'text': 'Error: Unknown internal flag "$name".'});
-     }
-     stack.add(graph.addConstantBool(value, compiler));
+    ast.Node argument;
+    switch (arguments.length) {
+      case 0:
+        reporter.reportErrorMessage(node, MessageKind.GENERIC,
+            {'text': 'Error: Expected one argument to JS_GET_FLAG.'});
+        return;
+      case 1:
+        argument = arguments[0];
+        break;
+      default:
+        for (int i = 1; i < arguments.length; i++) {
+          reporter.reportErrorMessage(arguments[i], MessageKind.GENERIC,
+              {'text': 'Error: Extra argument to JS_GET_FLAG.'});
+        }
+        return;
+    }
+    ast.LiteralString string = argument.asLiteralString();
+    if (string == null) {
+      reporter.reportErrorMessage(argument, MessageKind.GENERIC,
+          {'text': 'Error: Expected a literal string.'});
+    }
+    String name = string.dartString.slowToString();
+    bool value = false;
+    switch (name) {
+      case 'MUST_RETAIN_METADATA':
+        value = backend.mustRetainMetadata;
+        break;
+      case 'USE_CONTENT_SECURITY_POLICY':
+        value = compiler.options.useContentSecurityPolicy;
+        break;
+      default:
+        reporter.reportErrorMessage(node, MessageKind.GENERIC,
+            {'text': 'Error: Unknown internal flag "$name".'});
+    }
+    stack.add(graph.addConstantBool(value, compiler));
   }
 
   void handleForeignJsGetName(ast.Send node) {
     List<ast.Node> arguments = node.arguments.toList();
     ast.Node argument;
     switch (arguments.length) {
-    case 0:
-      reporter.reportErrorMessage(
-          node, MessageKind.GENERIC,
-          {'text': 'Error: Expected one argument to JS_GET_NAME.'});
-      return;
-    case 1:
-      argument = arguments[0];
-      break;
-    default:
-      for (int i = 1; i < arguments.length; i++) {
-        reporter.reportErrorMessage(
-            arguments[i], MessageKind.GENERIC,
-            {'text': 'Error: Extra argument to JS_GET_NAME.'});
-      }
-      return;
+      case 0:
+        reporter.reportErrorMessage(node, MessageKind.GENERIC,
+            {'text': 'Error: Expected one argument to JS_GET_NAME.'});
+        return;
+      case 1:
+        argument = arguments[0];
+        break;
+      default:
+        for (int i = 1; i < arguments.length; i++) {
+          reporter.reportErrorMessage(arguments[i], MessageKind.GENERIC,
+              {'text': 'Error: Extra argument to JS_GET_NAME.'});
+        }
+        return;
     }
     Element element = elements[argument];
     if (element == null ||
-        element is! FieldElement ||
+        element is! EnumConstantElement ||
         element.enclosingClass != helpers.jsGetNameEnum) {
-      reporter.reportErrorMessage(
-          argument, MessageKind.GENERIC,
+      reporter.reportErrorMessage(argument, MessageKind.GENERIC,
           {'text': 'Error: Expected a JsGetName enum value.'});
     }
-    EnumClassElement enumClass = element.enclosingClass;
-    int index = enumClass.enumValues.indexOf(element);
-    stack.add(
-        addConstantStringFromName(
-            backend.namer.getNameForJsGetName(
-                argument, JsGetName.values[index])));
+    EnumConstantElement enumConstant = element;
+    int index = enumConstant.index;
+    stack.add(addConstantStringFromName(
+        backend.namer.getNameForJsGetName(argument, JsGetName.values[index])));
   }
 
   void handleForeignJsBuiltin(ast.Send node) {
     List<ast.Node> arguments = node.arguments.toList();
     ast.Node argument;
     if (arguments.length < 2) {
-      reporter.reportErrorMessage(
-          node, MessageKind.GENERIC,
+      reporter.reportErrorMessage(node, MessageKind.GENERIC,
           {'text': 'Error: Expected at least two arguments to JS_BUILTIN.'});
     }
 
     Element builtinElement = elements[arguments[1]];
     if (builtinElement == null ||
-        (builtinElement is! FieldElement) ||
+        (builtinElement is! EnumConstantElement) ||
         builtinElement.enclosingClass != helpers.jsBuiltinEnum) {
-      reporter.reportErrorMessage(
-          argument, MessageKind.GENERIC,
+      reporter.reportErrorMessage(argument, MessageKind.GENERIC,
           {'text': 'Error: Expected a JsBuiltin enum value.'});
     }
-    EnumClassElement enumClass = builtinElement.enclosingClass;
-    int index = enumClass.enumValues.indexOf(builtinElement);
+    EnumConstantElement enumConstant = builtinElement;
+    int index = enumConstant.index;
 
     js.Template template =
         backend.emitter.builtinTemplateFor(JsBuiltin.values[index]);
@@ -4402,42 +4189,38 @@
     TypeMask ssaType =
         TypeMaskFactory.fromNativeBehavior(nativeBehavior, compiler);
 
-    push(new HForeignCode(template,
-                          ssaType,
-                          compiledArguments,
-                          nativeBehavior: nativeBehavior));
+    push(new HForeignCode(template, ssaType, compiledArguments,
+        nativeBehavior: nativeBehavior));
   }
 
   void handleForeignJsEmbeddedGlobal(ast.Send node) {
     List<ast.Node> arguments = node.arguments.toList();
     ast.Node globalNameNode;
     switch (arguments.length) {
-    case 0:
-    case 1:
-      reporter.reportErrorMessage(
-          node, MessageKind.GENERIC,
-          {'text': 'Error: Expected two arguments to JS_EMBEDDED_GLOBAL.'});
-      return;
-    case 2:
-      // The type has been extracted earlier. We are only interested in the
-      // name in this function.
-      globalNameNode = arguments[1];
-      break;
-    default:
-      for (int i = 2; i < arguments.length; i++) {
-        reporter.reportErrorMessage(
-            arguments[i], MessageKind.GENERIC,
-            {'text': 'Error: Extra argument to JS_EMBEDDED_GLOBAL.'});
-      }
-      return;
+      case 0:
+      case 1:
+        reporter.reportErrorMessage(node, MessageKind.GENERIC,
+            {'text': 'Error: Expected two arguments to JS_EMBEDDED_GLOBAL.'});
+        return;
+      case 2:
+        // The type has been extracted earlier. We are only interested in the
+        // name in this function.
+        globalNameNode = arguments[1];
+        break;
+      default:
+        for (int i = 2; i < arguments.length; i++) {
+          reporter.reportErrorMessage(arguments[i], MessageKind.GENERIC,
+              {'text': 'Error: Extra argument to JS_EMBEDDED_GLOBAL.'});
+        }
+        return;
     }
     visit(globalNameNode);
     HInstruction globalNameHNode = pop();
     if (!globalNameHNode.isConstantString()) {
-      reporter.reportErrorMessage(
-          arguments[1], MessageKind.GENERIC,
-          {'text': 'Error: Expected String as second argument '
-                   'to JS_EMBEDDED_GLOBAL.'});
+      reporter.reportErrorMessage(arguments[1], MessageKind.GENERIC, {
+        'text': 'Error: Expected String as second argument '
+            'to JS_EMBEDDED_GLOBAL.'
+      });
       return;
     }
     HConstant hConstant = globalNameHNode;
@@ -4450,7 +4233,7 @@
     TypeMask ssaType =
         TypeMaskFactory.fromNativeBehavior(nativeBehavior, compiler);
     push(new HForeignCode(expr, ssaType, const [],
-            nativeBehavior: nativeBehavior));
+        nativeBehavior: nativeBehavior));
   }
 
   void handleJsInterceptorConstant(ast.Send node) {
@@ -4472,8 +4255,7 @@
       }
     }
     reporter.reportErrorMessage(
-        node,
-        MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
+        node, MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
     stack.add(graph.addConstantNull(compiler));
   }
 
@@ -4484,14 +4266,12 @@
       // closure.
       visit(link.tail.head);
       push(new HInvokeClosure(new Selector.callClosure(0),
-                              <HInstruction>[pop()],
-                              backend.dynamicType));
+          <HInstruction>[pop()], backend.dynamicType));
     } else {
       // Call a helper method from the isolate library.
       Element element = helpers.callInIsolate;
       if (element == null) {
-        reporter.internalError(node,
-            'Isolate library and compiler mismatch.');
+        reporter.internalError(node, 'Isolate library and compiler mismatch.');
       }
       List<HInstruction> inputs = <HInstruction>[];
       addGenericSendArgumentsToList(link, inputs);
@@ -4501,14 +4281,14 @@
 
   FunctionSignature handleForeignRawFunctionRef(ast.Send node, String name) {
     if (node.arguments.isEmpty || !node.arguments.tail.isEmpty) {
-      reporter.internalError(node.argumentsNode,
-          '"$name" requires exactly one argument.');
+      reporter.internalError(
+          node.argumentsNode, '"$name" requires exactly one argument.');
     }
     ast.Node closure = node.arguments.head;
     Element element = elements[closure];
     if (!Elements.isStaticOrTopLevelFunction(element)) {
-      reporter.internalError(closure,
-          '"$name" requires a static or top-level method.');
+      reporter.internalError(
+          closure, '"$name" requires a static or top-level method.');
     }
     FunctionElement function = element;
     // TODO(johnniwinther): Try to eliminate the need to distinguish declaration
@@ -4517,12 +4297,11 @@
     FunctionElement implementation = function.implementation;
     FunctionSignature params = implementation.functionSignature;
     if (params.optionalParameterCount != 0) {
-      reporter.internalError(closure,
-          '"$name" does not handle closure with optional parameters.');
+      reporter.internalError(
+          closure, '"$name" does not handle closure with optional parameters.');
     }
 
-    registry?.registerStaticUse(
-        new StaticUse.foreignUse(function));
+    registry?.registerStaticUse(new StaticUse.foreignUse(function));
     push(new HForeignCode(
         js.js.expressionTemplateYielding(
             backend.emitter.staticFunctionAccess(function)),
@@ -4541,17 +4320,15 @@
 
   void handleForeignJsSetStaticState(ast.Send node) {
     if (node.arguments.isEmpty || !node.arguments.tail.isEmpty) {
-      reporter.internalError(node.argumentsNode,
-          'Exactly one argument required.');
+      reporter.internalError(
+          node.argumentsNode, 'Exactly one argument required.');
     }
     visit(node.arguments.head);
     String isolateName = backend.namer.staticStateHolder;
     SideEffects sideEffects = new SideEffects.empty();
     sideEffects.setAllSideEffects();
-    push(new HForeignCode(
-        js.js.parseForeignJS("$isolateName = #"),
-        backend.dynamicType,
-        <HInstruction>[pop()],
+    push(new HForeignCode(js.js.parseForeignJS("$isolateName = #"),
+        backend.dynamicType, <HInstruction>[pop()],
         nativeBehavior: native.NativeBehavior.CHANGES_OTHER,
         effects: sideEffects));
   }
@@ -4561,9 +4338,8 @@
       reporter.internalError(node.argumentsNode, 'Too many arguments.');
     }
     push(new HForeignCode(js.js.parseForeignJS(backend.namer.staticStateHolder),
-                          backend.dynamicType,
-                          <HInstruction>[],
-                          nativeBehavior: native.NativeBehavior.DEPENDS_OTHER));
+        backend.dynamicType, <HInstruction>[],
+        nativeBehavior: native.NativeBehavior.DEPENDS_OTHER));
   }
 
   void handleForeignSend(ast.Send node, FunctionElement element) {
@@ -4601,25 +4377,23 @@
     }
   }
 
-  generateDeferredLoaderGet(ast.Send node,
-                            FunctionElement deferredLoader,
-                            SourceInformation sourceInformation) {
+  generateDeferredLoaderGet(ast.Send node, FunctionElement deferredLoader,
+      SourceInformation sourceInformation) {
     // Until now we only handle these as getters.
     invariant(node, deferredLoader.isDeferredLoaderGetter);
     Element loadFunction = compiler.loadLibraryFunction;
     PrefixElement prefixElement = deferredLoader.enclosingElement;
     String loadId =
         compiler.deferredLoadTask.getImportDeferName(node, prefixElement);
-    var inputs = [graph.addConstantString(
-        new ast.DartString.literal(loadId), compiler)];
+    var inputs = [
+      graph.addConstantString(new ast.DartString.literal(loadId), compiler)
+    ];
     push(new HInvokeStatic(loadFunction, inputs, backend.nonNullType,
-                           targetCanThrow: false)
-        ..sourceInformation = sourceInformation);
+        targetCanThrow: false)..sourceInformation = sourceInformation);
   }
 
-  generateSuperNoSuchMethodSend(ast.Send node,
-                                Selector selector,
-                                List<HInstruction> arguments) {
+  generateSuperNoSuchMethodSend(
+      ast.Send node, Selector selector, List<HInstruction> arguments) {
     String name = selector.name;
 
     ClassElement cls = currentNonClosureClass;
@@ -4638,8 +4412,8 @@
     String publicName = name;
     if (selector.isSetter) publicName += '=';
 
-    ConstantValue nameConstant = constantSystem.createString(
-        new ast.DartString.literal(publicName));
+    ConstantValue nameConstant =
+        constantSystem.createString(new ast.DartString.literal(publicName));
 
     js.Name internalName = backend.namer.invocationName(selector);
 
@@ -4659,33 +4433,33 @@
     ConstantValue kindConstant =
         constantSystem.createInt(selector.invocationMirrorKind);
 
-    pushInvokeStatic(null,
-                     createInvocationMirror,
-                     [graph.addConstant(nameConstant, compiler),
-                      graph.addConstantStringFromName(internalName, compiler),
-                      graph.addConstant(kindConstant, compiler),
-                      argumentsInstruction,
-                      argumentNamesInstruction],
-                     typeMask: backend.dynamicType);
+    pushInvokeStatic(
+        null,
+        createInvocationMirror,
+        [
+          graph.addConstant(nameConstant, compiler),
+          graph.addConstantStringFromName(internalName, compiler),
+          graph.addConstant(kindConstant, compiler),
+          argumentsInstruction,
+          argumentNamesInstruction
+        ],
+        typeMask: backend.dynamicType);
 
     var inputs = <HInstruction>[pop()];
     push(buildInvokeSuper(Selectors.noSuchMethod_, element, inputs));
   }
 
   /// Generate a call to a super method or constructor.
-  void generateSuperInvoke(ast.Send node,
-                           FunctionElement function,
-                           SourceInformation sourceInformation) {
+  void generateSuperInvoke(ast.Send node, FunctionElement function,
+      SourceInformation sourceInformation) {
     // TODO(5347): Try to avoid the need for calling [implementation] before
     // calling [makeStaticArgumentList].
     Selector selector = elements.getSelector(node);
-    assert(invariant(node,
-        selector.applies(function.implementation, compiler.world),
+    assert(invariant(
+        node, selector.applies(function.implementation, compiler.world),
         message: "$selector does not apply to ${function.implementation}"));
-    List<HInstruction> inputs =
-        makeStaticArgumentList(selector.callStructure,
-                               node.arguments,
-                               function.implementation);
+    List<HInstruction> inputs = makeStaticArgumentList(
+        selector.callStructure, node.arguments, function.implementation);
     push(buildInvokeSuper(selector, function, inputs, sourceInformation));
   }
 
@@ -4701,22 +4475,17 @@
   /// Invoke .call on the value retrieved from the super [element].
   void handleSuperCallInvoke(ast.Send node, Element element) {
     Selector selector = elements.getSelector(node);
-    HInstruction target = buildInvokeSuper(
-        selector, element, const <HInstruction>[],
-        sourceInformationBuilder.buildGet(node));
+    HInstruction target = buildInvokeSuper(selector, element,
+        const <HInstruction>[], sourceInformationBuilder.buildGet(node));
     add(target);
-    generateCallInvoke(
-        node,
-        target,
+    generateCallInvoke(node, target,
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   /// Invoke super [method].
-  void handleSuperMethodInvoke(
-      ast.Send node,
-      MethodElement method) {
-    generateSuperInvoke(node, method,
-        sourceInformationBuilder.buildCall(node, node.selector));
+  void handleSuperMethodInvoke(ast.Send node, MethodElement method) {
+    generateSuperInvoke(
+        node, method, sourceInformationBuilder.buildCall(node, node.selector));
   }
 
   /// Access an unresolved super property.
@@ -4731,185 +4500,116 @@
 
   @override
   void visitUnresolvedSuperIndex(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      _) {
+      ast.Send node, Element element, ast.Node index, _) {
     handleUnresolvedSuperInvoke(node);
   }
 
   @override
   void visitUnresolvedSuperUnary(
-      ast.Send node,
-      UnaryOperator operator,
-      Element element,
-      _) {
+      ast.Send node, UnaryOperator operator, Element element, _) {
     handleUnresolvedSuperInvoke(node);
   }
 
   @override
-  void visitUnresolvedSuperBinary(
-      ast.Send node,
-      Element element,
-      BinaryOperator operator,
-      ast.Node argument,
-      _) {
+  void visitUnresolvedSuperBinary(ast.Send node, Element element,
+      BinaryOperator operator, ast.Node argument, _) {
     handleUnresolvedSuperInvoke(node);
   }
 
   @override
-  void visitUnresolvedSuperGet(
-      ast.Send node,
-      Element element,
-      _) {
+  void visitUnresolvedSuperGet(ast.Send node, Element element, _) {
     handleUnresolvedSuperInvoke(node);
   }
 
   @override
   void visitUnresolvedSuperSet(
-      ast.Send node,
-      Element element,
-      ast.Node rhs,
-      _) {
+      ast.Send node, Element element, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperSetterGet(
-      ast.Send node,
-      MethodElement setter,
-      _) {
+  void visitSuperSetterGet(ast.Send node, MethodElement setter, _) {
     handleUnresolvedSuperInvoke(node);
   }
 
   @override
   void visitUnresolvedSuperInvoke(
-      ast.Send node,
-      Element element,
-      ast.Node argument,
-      Selector selector,
-      _) {
+      ast.Send node, Element element, ast.Node argument, Selector selector, _) {
     handleUnresolvedSuperInvoke(node);
   }
 
   @override
-  void visitSuperFieldGet(
-      ast.Send node,
-      FieldElement field,
-      _) {
+  void visitSuperFieldGet(ast.Send node, FieldElement field, _) {
     handleSuperGet(node, field);
   }
 
   @override
-  void visitSuperGetterGet(
-      ast.Send node,
-      MethodElement method,
-      _) {
+  void visitSuperGetterGet(ast.Send node, MethodElement method, _) {
     handleSuperGet(node, method);
   }
 
   @override
-  void visitSuperMethodGet(
-      ast.Send node,
-      MethodElement method,
-      _) {
+  void visitSuperMethodGet(ast.Send node, MethodElement method, _) {
     handleSuperGet(node, method);
   }
 
   @override
-  void visitSuperFieldInvoke(
-      ast.Send node,
-      FieldElement field,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitSuperFieldInvoke(ast.Send node, FieldElement field,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     handleSuperCallInvoke(node, field);
   }
 
   @override
-  void visitSuperGetterInvoke(
-      ast.Send node,
-      MethodElement getter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitSuperGetterInvoke(ast.Send node, MethodElement getter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     handleSuperCallInvoke(node, getter);
   }
 
   @override
-  void visitSuperMethodInvoke(
-      ast.Send node,
-      MethodElement method,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitSuperMethodInvoke(ast.Send node, MethodElement method,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     handleSuperMethodInvoke(node, method);
   }
 
   @override
-  void visitSuperIndex(
-      ast.Send node,
-      MethodElement method,
-      ast.Node index,
-      _) {
+  void visitSuperIndex(ast.Send node, MethodElement method, ast.Node index, _) {
     handleSuperMethodInvoke(node, method);
   }
 
   @override
   void visitSuperEquals(
-      ast.Send node,
-      MethodElement method,
-      ast.Node argument,
-      _) {
+      ast.Send node, MethodElement method, ast.Node argument, _) {
     handleSuperMethodInvoke(node, method);
   }
 
   @override
-  void visitSuperBinary(
-      ast.Send node,
-      MethodElement method,
-      BinaryOperator operator,
-      ast.Node argument,
-      _) {
+  void visitSuperBinary(ast.Send node, MethodElement method,
+      BinaryOperator operator, ast.Node argument, _) {
     handleSuperMethodInvoke(node, method);
   }
 
   @override
   void visitSuperNotEquals(
-      ast.Send node,
-      MethodElement method,
-      ast.Node argument,
-      _) {
+      ast.Send node, MethodElement method, ast.Node argument, _) {
     handleSuperMethodInvoke(node, method);
     pushWithPosition(new HNot(popBoolified(), backend.boolType), node.selector);
   }
 
   @override
   void visitSuperUnary(
-      ast.Send node,
-      UnaryOperator operator,
-      MethodElement method,
-      _) {
+      ast.Send node, UnaryOperator operator, MethodElement method, _) {
     handleSuperMethodInvoke(node, method);
   }
 
   @override
-  void visitSuperMethodIncompatibleInvoke(
-      ast.Send node,
-      MethodElement method,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitSuperMethodIncompatibleInvoke(ast.Send node, MethodElement method,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     handleInvalidSuperInvoke(node, arguments);
   }
 
   @override
-  void visitSuperSetterInvoke(
-      ast.Send node,
-      SetterElement setter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitSuperSetterInvoke(ast.Send node, SetterElement setter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     handleInvalidSuperInvoke(node, arguments);
   }
 
@@ -4935,9 +4635,7 @@
    * extract the type argument by the index of the variable in the list of type
    * variables for that class.
    */
-  HInstruction readTypeVariable(
-      ClassElement cls,
-      TypeVariableElement variable,
+  HInstruction readTypeVariable(ClassElement cls, TypeVariableElement variable,
       {SourceInformation sourceInformation}) {
     assert(sourceElement.isInstanceMember);
 
@@ -4949,20 +4647,14 @@
       // string concatenation in the implementation), and may prevent
       // segmentation of '$'.
       js.Name substitutionName = backend.namer.runtimeTypeName(cls);
-      HInstruction substitutionNameInstr = graph.addConstantStringFromName(
-          substitutionName, compiler);
-      pushInvokeStatic(null,
-                       helpers.getRuntimeTypeArgument,
-                       [target, substitutionNameInstr, index],
-                       typeMask: backend.dynamicType,
-                       sourceInformation: sourceInformation);
+      HInstruction substitutionNameInstr =
+          graph.addConstantStringFromName(substitutionName, compiler);
+      pushInvokeStatic(null, helpers.getRuntimeTypeArgument,
+          [target, substitutionNameInstr, index],
+          typeMask: backend.dynamicType, sourceInformation: sourceInformation);
     } else {
-      pushInvokeStatic(
-          null,
-          helpers.getTypeArgumentByIndex,
-          [target, index],
-          typeMask: backend.dynamicType,
-          sourceInformation: sourceInformation);
+      pushInvokeStatic(null, helpers.getTypeArgumentByIndex, [target, index],
+          typeMask: backend.dynamicType, sourceInformation: sourceInformation);
     }
     return pop();
   }
@@ -4972,16 +4664,14 @@
   // fixed.
   bool hasDirectLocal(Local local) {
     return !localsHandler.isAccessedDirectly(local) ||
-            localsHandler.directLocals[local] != null;
+        localsHandler.directLocals[local] != null;
   }
 
   /**
    * Helper to create an instruction that gets the value of a type variable.
    */
-  HInstruction addTypeVariableReference(
-      TypeVariableType type,
+  HInstruction addTypeVariableReference(TypeVariableType type,
       {SourceInformation sourceInformation}) {
-
     assert(assertTypeInContext(type));
     Element member = sourceElement;
     bool isClosure = member.enclosingElement.isClosure;
@@ -4990,8 +4680,8 @@
       member = closureClass.methodElement;
       member = member.outermostEnclosingMemberOrTopLevel;
     }
-    bool isInConstructorContext = member.isConstructor ||
-        member.isGenerativeConstructorBody;
+    bool isInConstructorContext =
+        member.isConstructor || member.isGenerativeConstructorBody;
     Local typeVariableLocal = localsHandler.getTypeVariableAsLocal(type);
     if (isClosure) {
       if (member.isFactoryConstructor ||
@@ -4999,17 +4689,15 @@
         // The type variable is used from a closure in a factory constructor.
         // The value of the type argument is stored as a local on the closure
         // itself.
-        return localsHandler.readLocal(
-            typeVariableLocal, sourceInformation: sourceInformation);
+        return localsHandler.readLocal(typeVariableLocal,
+            sourceInformation: sourceInformation);
       } else if (member.isFunction ||
-                 member.isGetter ||
-                 member.isSetter ||
-                 isInConstructorContext) {
+          member.isGetter ||
+          member.isSetter ||
+          isInConstructorContext) {
         // The type variable is stored on the "enclosing object" and needs to be
         // accessed using the this-reference in the closure.
-        return readTypeVariable(
-            member.enclosingClass,
-            type.element,
+        return readTypeVariable(member.enclosingClass, type.element,
             sourceInformation: sourceInformation);
       } else {
         assert(member.isField);
@@ -5017,32 +4705,28 @@
         return localsHandler.readLocal(typeVariableLocal);
       }
     } else if (isInConstructorContext ||
-               // When [member] is a field, we can be either
-               // generating a checked setter or inlining its
-               // initializer in a constructor. An initializer is
-               // never built standalone, so in that case [target] is not
-               // the [member] itself.
-               (member.isField && member != target)) {
+        // When [member] is a field, we can be either
+        // generating a checked setter or inlining its
+        // initializer in a constructor. An initializer is
+        // never built standalone, so in that case [target] is not
+        // the [member] itself.
+        (member.isField && member != target)) {
       // The type variable is stored in a parameter of the method.
-      return localsHandler.readLocal(
-          typeVariableLocal, sourceInformation: sourceInformation);
+      return localsHandler.readLocal(typeVariableLocal,
+          sourceInformation: sourceInformation);
     } else if (member.isInstanceMember) {
       // The type variable is stored on the object.
-      return readTypeVariable(
-          member.enclosingClass,
-          type.element,
+      return readTypeVariable(member.enclosingClass, type.element,
           sourceInformation: sourceInformation);
     } else {
-      reporter.internalError(type.element,
-          'Unexpected type variable in static context.');
+      reporter.internalError(
+          type.element, 'Unexpected type variable in static context.');
       return null;
     }
   }
 
-  HInstruction analyzeTypeArgument(
-      DartType argument,
+  HInstruction analyzeTypeArgument(DartType argument,
       {SourceInformation sourceInformation}) {
-
     assert(assertTypeInContext(argument));
     if (argument.treatAsDynamic) {
       // Represent [dynamic] as [null].
@@ -5050,16 +4734,16 @@
     }
 
     if (argument.isTypeVariable) {
-      return addTypeVariableReference(
-          argument, sourceInformation: sourceInformation);
+      return addTypeVariableReference(argument,
+          sourceInformation: sourceInformation);
     }
 
     List<HInstruction> inputs = <HInstruction>[];
 
     js.Expression template =
         rtiEncoder.getTypeRepresentationWithPlaceholders(argument, (variable) {
-            inputs.add(addTypeVariableReference(variable));
-        });
+      inputs.add(addTypeVariableReference(variable));
+    });
 
     js.Template code = new js.Template(null, template);
     HInstruction result = new HForeignCode(code, backend.stringType, inputs,
@@ -5068,9 +4752,8 @@
     return result;
   }
 
-  HInstruction handleListConstructor(InterfaceType type,
-                                     ast.Node currentNode,
-                                     HInstruction newObject) {
+  HInstruction handleListConstructor(
+      InterfaceType type, ast.Node currentNode, HInstruction newObject) {
     if (!backend.classNeedsRti(type.element) || type.treatAsRaw) {
       return newObject;
     }
@@ -5092,8 +4775,7 @@
   }
 
   HInstruction callSetRuntimeTypeInfo(ClassElement element,
-                                      List<HInstruction> rtiInputs,
-                                      HInstruction newObject) {
+      List<HInstruction> rtiInputs, HInstruction newObject) {
     if (!backend.classNeedsRti(element) || element.typeVariables.isEmpty) {
       return newObject;
     }
@@ -5104,22 +4786,18 @@
     // Set the runtime type information on the object.
     Element typeInfoSetterElement = helpers.setRuntimeTypeInfo;
     pushInvokeStatic(
-        null,
-        typeInfoSetterElement,
-        <HInstruction>[newObject, typeInfo],
+        null, typeInfoSetterElement, <HInstruction>[newObject, typeInfo],
         typeMask: backend.dynamicType,
         sourceInformation: newObject.sourceInformation);
 
     // The new object will now be referenced through the
     // `setRuntimeTypeInfo` call. We therefore set the type of that
     // instruction to be of the object's type.
-    assert(invariant(
-        CURRENT_ELEMENT_SPANNABLE,
+    assert(invariant(CURRENT_ELEMENT_SPANNABLE,
         stack.last is HInvokeStatic || stack.last == newObject,
-        message:
-          "Unexpected `stack.last`: Found ${stack.last}, "
-          "expected ${newObject} or an HInvokeStatic. "
-          "State: element=$element, rtiInputs=$rtiInputs, stack=$stack."));
+        message: "Unexpected `stack.last`: Found ${stack.last}, "
+            "expected ${newObject} or an HInvokeStatic. "
+            "State: element=$element, rtiInputs=$rtiInputs, stack=$stack."));
     stack.last.instructionType = newObject.instructionType;
     return pop();
   }
@@ -5136,9 +4814,9 @@
 
     TypeMask computeType(element) {
       Element originalElement = elements[send];
-      if (isFixedListConstructorCall
-          || Elements.isFilledListConstructorCall(
-                  originalElement, send, compiler)) {
+      if (isFixedListConstructorCall ||
+          Elements.isFilledListConstructorCall(
+              originalElement, send, compiler)) {
         isFixedList = true;
         TypeMask inferred =
             TypeMaskFactory.inferredForNode(sourceElement, send, compiler);
@@ -5152,7 +4830,7 @@
             ? backend.extendableArrayType
             : inferred;
       } else if (Elements.isConstructorOfTypedArraySubclass(
-                    originalElement, compiler)) {
+          originalElement, compiler)) {
         isFixedList = true;
         TypeMask inferred =
             TypeMaskFactory.inferredForNode(sourceElement, send, compiler);
@@ -5190,10 +4868,10 @@
     if (isSymbolConstructor) {
       constructor = compiler.symbolValidatedConstructor;
       assert(invariant(send, constructor != null,
-                       message: 'Constructor Symbol.validated is missing'));
+          message: 'Constructor Symbol.validated is missing'));
       callStructure = compiler.symbolValidatedConstructorSelector.callStructure;
       assert(invariant(send, callStructure != null,
-                       message: 'Constructor Symbol.validated is missing'));
+          message: 'Constructor Symbol.validated is missing'));
     }
 
     bool isRedirected = constructorDeclaration.isRedirectingFactory;
@@ -5204,8 +4882,7 @@
       while (target.isRedirectingFactory) {
         if (constructorDeclaration.redirectionDeferredPrefix != null) {
           generateIsDeferredLoadedCheckIfNeeded(
-              target.redirectionDeferredPrefix,
-              node);
+              target.redirectionDeferredPrefix, node);
         }
         target = target.immediateRedirectionTarget;
       }
@@ -5241,8 +4918,8 @@
     // calling [makeStaticArgumentList].
     constructorImplementation = constructor.implementation;
     if (constructorImplementation.isMalformed ||
-        !callStructure.signatureApplies(
-            constructorImplementation.functionSignature)) {
+        !callStructure
+            .signatureApplies(constructorImplementation.functionSignature)) {
       generateWrongArgumentCountError(send, constructor, send.arguments);
       return;
     }
@@ -5254,16 +4931,18 @@
       // Native class generative constructors take a pre-constructed object.
       inputs.add(graph.addConstantNull(compiler));
     }
-    inputs.addAll(makeStaticArgumentList(callStructure,
-                                         send.arguments,
-                                         constructorImplementation));
+    inputs.addAll(makeStaticArgumentList(
+        callStructure, send.arguments, constructorImplementation));
 
     TypeMask elementType = computeType(constructor);
     if (isFixedListConstructorCall) {
       if (!inputs[0].isNumber(compiler)) {
         HTypeConversion conversion = new HTypeConversion(
-          null, HTypeConversion.ARGUMENT_TYPE_CHECK, backend.numType,
-          inputs[0], null);
+            null,
+            HTypeConversion.ARGUMENT_TYPE_CHECK,
+            backend.numType,
+            inputs[0],
+            null);
         add(conversion);
         inputs[0] = conversion;
       }
@@ -5292,7 +4971,7 @@
         // We set the instruction as [canThrow] to avoid it being dead code.
         // We need a finer grained side effect.
         add(new HForeignCode(code, backend.nullType, [stack.last],
-                throwBehavior: native.NativeThrowBehavior.MAY));
+            throwBehavior: native.NativeThrowBehavior.MAY));
       }
     } else if (isGrowableListConstructorCall) {
       push(buildLiteralList(<HInstruction>[]));
@@ -5323,8 +5002,9 @@
     // this constructor to have the setRuntimeTypeInfo called where
     // the 'new' is done.
     if (backend.classNeedsRti(coreClasses.listClass) &&
-        (isFixedListConstructorCall || isGrowableListConstructorCall ||
-         isJSArrayTypedConstructor)) {
+        (isFixedListConstructorCall ||
+            isGrowableListConstructorCall ||
+            isJSArrayTypedConstructor)) {
       newInstance = handleListConstructor(type, send, pop());
       stack.add(newInstance);
     }
@@ -5339,15 +5019,15 @@
     }
   }
 
-  void potentiallyAddTypeArguments(List<HInstruction> inputs, ClassElement cls,
-                                   InterfaceType expectedType,
-                                   {SourceInformation sourceInformation}) {
+  void potentiallyAddTypeArguments(
+      List<HInstruction> inputs, ClassElement cls, InterfaceType expectedType,
+      {SourceInformation sourceInformation}) {
     if (!backend.classNeedsRti(cls)) return;
     assert(expectedType.typeArguments.isEmpty ||
         cls.typeVariables.length == expectedType.typeArguments.length);
     expectedType.typeArguments.forEach((DartType argument) {
-      inputs.add(analyzeTypeArgument(
-          argument, sourceInformation: sourceInformation));
+      inputs.add(
+          analyzeTypeArgument(argument, sourceInformation: sourceInformation));
     });
   }
 
@@ -5360,17 +5040,15 @@
         new Map<DartType, Set<DartType>>();
     bool definitelyFails = false;
 
-    addTypeVariableBoundCheck(GenericType instance,
-                              DartType typeArgument,
-                              TypeVariableType typeVariable,
-                              DartType bound) {
+    addTypeVariableBoundCheck(GenericType instance, DartType typeArgument,
+        TypeVariableType typeVariable, DartType bound) {
       if (definitelyFails) return;
 
-      int subtypeRelation = compiler.types.computeSubtypeRelation(typeArgument, bound);
+      int subtypeRelation =
+          compiler.types.computeSubtypeRelation(typeArgument, bound);
       if (subtypeRelation == Types.IS_SUBTYPE) return;
 
-      String message =
-          "Can't create an instance of malbounded type '$type': "
+      String message = "Can't create an instance of malbounded type '$type': "
           "'${typeArgument}' is not a subtype of bound '${bound}' for "
           "type variable '${typeVariable}' of type "
           "${type == instance
@@ -5398,8 +5076,8 @@
     }
     for (InterfaceType supertype in type.element.allSupertypes) {
       DartType instance = type.asInstanceOf(supertype.element);
-      compiler.types.checkTypeVariableBounds(instance,
-          addTypeVariableBoundCheck);
+      compiler.types
+          .checkTypeVariableBounds(instance, addTypeVariableBoundCheck);
       if (definitelyFails) {
         return true;
       }
@@ -5413,13 +5091,9 @@
 
   /// Generate an invocation to the static or top level [function].
   void generateStaticFunctionInvoke(
-      ast.Send node,
-      FunctionElement function,
-      CallStructure callStructure) {
+      ast.Send node, FunctionElement function, CallStructure callStructure) {
     List<HInstruction> inputs = makeStaticArgumentList(
-        callStructure,
-        node.arguments,
-        function.implementation);
+        callStructure, node.arguments, function.implementation);
 
     if (function == compiler.identicalFunction) {
       pushWithPosition(
@@ -5427,39 +5101,29 @@
       return;
     } else {
       pushInvokeStatic(node, function, inputs,
-          sourceInformation: sourceInformationBuilder.buildCall(
-              node, node.selector));
+          sourceInformation:
+              sourceInformationBuilder.buildCall(node, node.selector));
     }
   }
 
   /// Generate an invocation to a static or top level function with the wrong
   /// number of arguments.
-  void generateStaticFunctionIncompatibleInvoke(ast.Send node,
-                                                Element element) {
+  void generateStaticFunctionIncompatibleInvoke(
+      ast.Send node, Element element) {
     generateWrongArgumentCountError(node, element, node.arguments);
   }
 
   @override
-  void visitStaticFieldInvoke(
-      ast.Send node,
-      FieldElement field,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitStaticFieldInvoke(ast.Send node, FieldElement field,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateStaticFieldGet(node, field);
-    generateCallInvoke(
-        node,
-        pop(),
+    generateCallInvoke(node, pop(),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   @override
-  void visitStaticFunctionInvoke(
-      ast.Send node,
-      MethodElement function,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitStaticFunctionInvoke(ast.Send node, MethodElement function,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateStaticFunctionInvoke(node, function, callStructure);
   }
 
@@ -5474,40 +5138,24 @@
   }
 
   @override
-  void visitStaticGetterInvoke(
-      ast.Send node,
-      FunctionElement getter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitStaticGetterInvoke(ast.Send node, FunctionElement getter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateStaticGetterGet(node, getter);
-    generateCallInvoke(
-        node,
-        pop(),
+    generateCallInvoke(node, pop(),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   @override
-  void visitTopLevelFieldInvoke(
-      ast.Send node,
-      FieldElement field,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitTopLevelFieldInvoke(ast.Send node, FieldElement field,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateStaticFieldGet(node, field);
-    generateCallInvoke(
-        node,
-        pop(),
+    generateCallInvoke(node, pop(),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   @override
-  void visitTopLevelFunctionInvoke(
-      ast.Send node,
-      MethodElement function,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitTopLevelFunctionInvoke(ast.Send node, MethodElement function,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     if (backend.isForeign(function)) {
       handleForeignSend(node, function);
     } else {
@@ -5526,76 +5174,48 @@
   }
 
   @override
-  void visitTopLevelGetterInvoke(
-      ast.Send node,
-      FunctionElement getter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitTopLevelGetterInvoke(ast.Send node, FunctionElement getter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateStaticGetterGet(node, getter);
-    generateCallInvoke(
-        node,
-        pop(),
+    generateCallInvoke(node, pop(),
         sourceInformationBuilder.buildCall(node, node.argumentsNode));
   }
 
   @override
-  void visitTopLevelSetterGet(
-      ast.Send node,
-      MethodElement setter,
-      _) {
+  void visitTopLevelSetterGet(ast.Send node, MethodElement setter, _) {
     handleInvalidStaticGet(node, setter);
   }
 
   @override
-  void visitStaticSetterGet(
-      ast.Send node,
-      MethodElement setter,
-      _) {
+  void visitStaticSetterGet(ast.Send node, MethodElement setter, _) {
     handleInvalidStaticGet(node, setter);
   }
 
   @override
-  void visitUnresolvedGet(
-      ast.Send node,
-      Element element,
-      _) {
+  void visitUnresolvedGet(ast.Send node, Element element, _) {
     generateStaticUnresolvedGet(node, element);
   }
 
   void handleInvalidStaticInvoke(ast.Send node, Element element) {
-    generateThrowNoSuchMethod(node,
-                              noSuchMethodTargetSymbolString(element),
-                              argumentNodes: node.arguments);
+    generateThrowNoSuchMethod(node, noSuchMethodTargetSymbolString(element),
+        argumentNodes: node.arguments);
   }
 
   @override
-  void visitStaticSetterInvoke(
-      ast.Send node,
-      MethodElement setter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitStaticSetterInvoke(ast.Send node, MethodElement setter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     handleInvalidStaticInvoke(node, setter);
   }
 
   @override
-  void visitTopLevelSetterInvoke(
-      ast.Send node,
-      MethodElement setter,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  void visitTopLevelSetterInvoke(ast.Send node, MethodElement setter,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     handleInvalidStaticInvoke(node, setter);
   }
 
   @override
-  void visitUnresolvedInvoke(
-      ast.Send node,
-      Element element,
-      ast.NodeList arguments,
-      Selector selector,
-      _) {
+  void visitUnresolvedInvoke(ast.Send node, Element element,
+      ast.NodeList arguments, Selector selector, _) {
     if (element is ErroneousElement) {
       // An erroneous element indicates that the function could not be
       // resolved (a warning has been issued).
@@ -5616,70 +5236,43 @@
     return graph.addConstantStringFromName(name, compiler);
   }
 
-  visitClassTypeLiteralGet(
-      ast.Send node,
-      ConstantExpression constant,
-      _) {
+  visitClassTypeLiteralGet(ast.Send node, ConstantExpression constant, _) {
     generateConstantTypeLiteral(node);
   }
 
-  visitClassTypeLiteralInvoke(
-      ast.Send node,
-      ConstantExpression constant,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  visitClassTypeLiteralInvoke(ast.Send node, ConstantExpression constant,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateConstantTypeLiteral(node);
     generateTypeLiteralCall(node);
   }
 
-  visitTypedefTypeLiteralGet(
-      ast.Send node,
-      ConstantExpression constant,
-      _) {
+  visitTypedefTypeLiteralGet(ast.Send node, ConstantExpression constant, _) {
     generateConstantTypeLiteral(node);
   }
 
-  visitTypedefTypeLiteralInvoke(
-      ast.Send node,
-      ConstantExpression constant,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  visitTypedefTypeLiteralInvoke(ast.Send node, ConstantExpression constant,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateConstantTypeLiteral(node);
     generateTypeLiteralCall(node);
   }
 
   visitTypeVariableTypeLiteralGet(
-      ast.Send node,
-      TypeVariableElement element,
-      _) {
+      ast.Send node, TypeVariableElement element, _) {
     generateTypeVariableLiteral(node, element.type);
   }
 
-  visitTypeVariableTypeLiteralInvoke(
-      ast.Send node,
-      TypeVariableElement element,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  visitTypeVariableTypeLiteralInvoke(ast.Send node, TypeVariableElement element,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateTypeVariableLiteral(node, element.type);
     generateTypeLiteralCall(node);
   }
 
-  visitDynamicTypeLiteralGet(
-      ast.Send node,
-      ConstantExpression constant,
-      _) {
+  visitDynamicTypeLiteralGet(ast.Send node, ConstantExpression constant, _) {
     generateConstantTypeLiteral(node);
   }
 
-  visitDynamicTypeLiteralInvoke(
-      ast.Send node,
-      ConstantExpression constant,
-      ast.NodeList arguments,
-      CallStructure callStructure,
-      _) {
+  visitDynamicTypeLiteralInvoke(ast.Send node, ConstantExpression constant,
+      ast.NodeList arguments, CallStructure callStructure, _) {
     generateConstantTypeLiteral(node);
     generateTypeLiteralCall(node);
   }
@@ -5697,18 +5290,14 @@
   }
 
   /// Generate the literal for [typeVariable] in the current context.
-  void generateTypeVariableLiteral(ast.Send node,
-                                   TypeVariableType typeVariable) {
+  void generateTypeVariableLiteral(
+      ast.Send node, TypeVariableType typeVariable) {
     DartType type = localsHandler.substInContext(typeVariable);
     HInstruction value = analyzeTypeArgument(type,
         sourceInformation: sourceInformationBuilder.buildGet(node));
-    pushInvokeStatic(node,
-                     helpers.runtimeTypeToString,
-                     [value],
-                     typeMask: backend.stringType);
-    pushInvokeStatic(node,
-                     helpers.createRuntimeType,
-                     [pop()]);
+    pushInvokeStatic(node, helpers.runtimeTypeToString, [value],
+        typeMask: backend.stringType);
+    pushInvokeStatic(node, helpers.createRuntimeType, [pop()]);
   }
 
   /// Generate a call to a type literal.
@@ -5723,16 +5312,14 @@
   }
 
   /// Generate a '.call' invocation on [target].
-  void generateCallInvoke(ast.Send node,
-                          HInstruction target,
-                          SourceInformation sourceInformation) {
+  void generateCallInvoke(
+      ast.Send node, HInstruction target, SourceInformation sourceInformation) {
     Selector selector = elements.getSelector(node);
     List<HInstruction> inputs = <HInstruction>[target];
     addDynamicSendArgumentsToList(node, inputs);
     push(new HInvokeClosure(
-            new Selector.callClosureFrom(selector),
-            inputs, backend.dynamicType)
-        ..sourceInformation = sourceInformation);
+        new Selector.callClosureFrom(selector), inputs, backend.dynamicType)
+      ..sourceInformation = sourceInformation);
   }
 
   visitGetterSend(ast.Send node) {
@@ -5758,17 +5345,14 @@
   }
 
   void generateAbstractClassInstantiationError(ast.Node node, String message) {
-    generateError(node,
-                  message,
-                  helpers.throwAbstractClassInstantiationError);
+    generateError(node, message, helpers.throwAbstractClassInstantiationError);
   }
 
-  void generateThrowNoSuchMethod(ast.Node diagnosticNode,
-                                 String methodName,
-                                 {Link<ast.Node> argumentNodes,
-                                  List<HInstruction> argumentValues,
-                                  List<String> existingArguments,
-                                  SourceInformation sourceInformation}) {
+  void generateThrowNoSuchMethod(ast.Node diagnosticNode, String methodName,
+      {Link<ast.Node> argumentNodes,
+      List<HInstruction> argumentValues,
+      List<String> existingArguments,
+      SourceInformation sourceInformation}) {
     Element helper = helpers.throwNoSuchMethod;
     ConstantValue receiverConstant =
         constantSystem.createString(new ast.DartString.empty());
@@ -5799,10 +5383,9 @@
     } else {
       existingNamesList = graph.addConstantNull(compiler);
     }
-    pushInvokeStatic(diagnosticNode,
-                     helper,
-                     [receiver, name, arguments, existingNamesList],
-                     sourceInformation: sourceInformation);
+    pushInvokeStatic(
+        diagnosticNode, helper, [receiver, name, arguments, existingNamesList],
+        sourceInformation: sourceInformation);
   }
 
   /**
@@ -5811,17 +5394,14 @@
    * arguments.
    */
   void generateWrongArgumentCountError(ast.Node diagnosticNode,
-                                       FunctionElement function,
-                                       Link<ast.Node> argumentNodes) {
+      FunctionElement function, Link<ast.Node> argumentNodes) {
     List<String> existingArguments = <String>[];
     FunctionSignature signature = function.functionSignature;
     signature.forEachParameter((Element parameter) {
       existingArguments.add(parameter.name);
     });
-    generateThrowNoSuchMethod(diagnosticNode,
-                              function.name,
-                              argumentNodes: argumentNodes,
-                              existingArguments: existingArguments);
+    generateThrowNoSuchMethod(diagnosticNode, function.name,
+        argumentNodes: argumentNodes, existingArguments: existingArguments);
   }
 
   @override
@@ -5842,8 +5422,7 @@
       if (error.messageKind == MessageKind.CANNOT_FIND_CONSTRUCTOR ||
           error.messageKind == MessageKind.CANNOT_FIND_UNNAMED_CONSTRUCTOR) {
         generateThrowNoSuchMethod(
-            node.send,
-            noSuchMethodTargetSymbolString(error, 'constructor'),
+            node.send, noSuchMethodTargetSymbolString(error, 'constructor'),
             argumentNodes: node.send.arguments);
       } else {
         MessageTemplate template = MessageTemplate.TEMPLATES[error.messageKind];
@@ -5877,26 +5456,20 @@
     bulkHandleNew(node);
   }
 
-  void pushInvokeDynamic(ast.Node node,
-                         Selector selector,
-                         TypeMask mask,
-                         List<HInstruction> arguments,
-                         {SourceInformation sourceInformation}) {
-
+  void pushInvokeDynamic(ast.Node node, Selector selector, TypeMask mask,
+      List<HInstruction> arguments,
+      {SourceInformation sourceInformation}) {
     // We prefer to not inline certain operations on indexables,
     // because the constant folder will handle them better and turn
     // them into simpler instructions that allow further
     // optimizations.
     bool isOptimizableOperationOnIndexable(Selector selector, Element element) {
-      bool isLength = selector.isGetter
-          && selector.name == "length";
+      bool isLength = selector.isGetter && selector.name == "length";
       if (isLength || selector.isIndex) {
         return compiler.world.isSubtypeOf(
-            element.enclosingClass.declaration,
-            helpers.jsIndexableClass);
+            element.enclosingClass.declaration, helpers.jsIndexableClass);
       } else if (selector.isIndexSet) {
-        return compiler.world.isSubtypeOf(
-            element.enclosingClass.declaration,
+        return compiler.world.isSubtypeOf(element.enclosingClass.declaration,
             helpers.jsMutableIndexableClass);
       } else {
         return false;
@@ -5940,35 +5513,32 @@
     TypeMask type =
         TypeMaskFactory.inferredTypeForSelector(selector, mask, compiler);
     if (selector.isGetter) {
-      push(
-          new HInvokeDynamicGetter(selector, mask, null, inputs, type)
-              ..sourceInformation = sourceInformation);
+      push(new HInvokeDynamicGetter(selector, mask, null, inputs, type)
+        ..sourceInformation = sourceInformation);
     } else if (selector.isSetter) {
-      push(
-          new HInvokeDynamicSetter(selector, mask, null, inputs, type)
-              ..sourceInformation = sourceInformation);
+      push(new HInvokeDynamicSetter(selector, mask, null, inputs, type)
+        ..sourceInformation = sourceInformation);
     } else {
-      push(
-          new HInvokeDynamicMethod(selector, mask, inputs, type, isIntercepted)
-              ..sourceInformation = sourceInformation);
+      push(new HInvokeDynamicMethod(selector, mask, inputs, type, isIntercepted)
+        ..sourceInformation = sourceInformation);
     }
   }
 
   bool _hasNamedParameters(FunctionElement function) {
     FunctionSignature params = function.functionSignature;
-    return params.optionalParameterCount > 0
-        && params.optionalParametersAreNamed;
+    return params.optionalParameterCount > 0 &&
+        params.optionalParametersAreNamed;
   }
 
   HForeignCode invokeJsInteropFunction(FunctionElement element,
-                                       List<HInstruction> arguments,
-                                       SourceInformation sourceInformation) {
+      List<HInstruction> arguments, SourceInformation sourceInformation) {
     assert(backend.isJsInterop(element));
     nativeEmitter.nativeMethods.add(element);
     String templateString;
 
     if (element.isFactoryConstructor &&
-        backend.jsInteropAnalysis.hasAnonymousAnnotation(element.contextClass)) {
+        backend.jsInteropAnalysis
+            .hasAnonymousAnnotation(element.contextClass)) {
       // Factory constructor that is syntactic sugar for creating a JavaScript
       // object literal.
       ConstructorElement constructor = element;
@@ -5980,7 +5550,7 @@
       params.orderedForEachParameter((ParameterElement parameter) {
         // TODO(jacobr): throw if parameter names do not match names of property
         // names in the class.
-        assert (parameter.isNamed);
+        assert(parameter.isNamed);
         HInstruction argument = arguments[i];
         if (argument != null) {
           filteredArguments.add(argument);
@@ -5989,8 +5559,8 @@
         }
         i++;
       });
-      var codeTemplate = new js.Template(null,
-          js.objectLiteral(parameterNameMap));
+      var codeTemplate =
+          new js.Template(null, js.objectLiteral(parameterNameMap));
 
       var nativeBehavior = new native.NativeBehavior()
         ..codeTemplate = codeTemplate;
@@ -5998,13 +5568,12 @@
         nativeBehavior.typesReturned.add(constructor.enclosingClass.thisType);
       }
       return new HForeignCode(
-          codeTemplate,
-          backend.dynamicType, filteredArguments,
+          codeTemplate, backend.dynamicType, filteredArguments,
           nativeBehavior: nativeBehavior)
         ..sourceInformation = sourceInformation;
     }
-    var target = new HForeignCode(js.js.parseForeignJS(
-            "${backend.namer.fixedBackendPath(element)}."
+    var target = new HForeignCode(
+        js.js.parseForeignJS("${backend.namer.fixedBackendPath(element)}."
             "${backend.nativeData.getFixedBackendName(element)}"),
         backend.dynamicType,
         <HInstruction>[]);
@@ -6019,14 +5588,14 @@
     var nativeBehavior = new native.NativeBehavior()
       ..sideEffects.setAllSideEffects();
 
-    DartType type = element.isConstructor ?
-        element.enclosingClass.thisType : element.type.returnType;
+    DartType type = element.isConstructor
+        ? element.enclosingClass.thisType
+        : element.type.returnType;
     // Native behavior effects here are similar to native/behavior.dart.
     // The return type is dynamic if we don't trust js-interop type
     // declarations.
-    nativeBehavior.typesReturned.add(
-        compiler.options.trustJSInteropTypeAnnotations
-            ? type : const DynamicType());
+    nativeBehavior.typesReturned.add(compiler
+        .options.trustJSInteropTypeAnnotations ? type : const DynamicType());
 
     // The allocation effects include the declared type if it is native (which
     // includes js interop types).
@@ -6036,10 +5605,11 @@
 
     // It also includes any other JS interop type if we don't trust the
     // annotation or if is declared too broad.
-    if (!compiler.options.trustJSInteropTypeAnnotations || type.isObject ||
+    if (!compiler.options.trustJSInteropTypeAnnotations ||
+        type.isObject ||
         type.isDynamic) {
-      nativeBehavior.typesInstantiated.add(
-          backend.helpers.jsJavaScriptObjectClass.thisType);
+      nativeBehavior.typesInstantiated
+          .add(backend.helpers.jsJavaScriptObjectClass.thisType);
     }
 
     String code;
@@ -6054,22 +5624,18 @@
     js.Template codeTemplate = js.js.parseForeignJS(code);
     nativeBehavior.codeTemplate = codeTemplate;
 
-    return new HForeignCode(
-        codeTemplate,
-        backend.dynamicType, inputs,
-        nativeBehavior: nativeBehavior)
-      ..sourceInformation = sourceInformation;
+    return new HForeignCode(codeTemplate, backend.dynamicType, inputs,
+        nativeBehavior: nativeBehavior)..sourceInformation = sourceInformation;
   }
 
-  void pushInvokeStatic(ast.Node location,
-                        Element element,
-                        List<HInstruction> arguments,
-                        {TypeMask typeMask,
-                         InterfaceType instanceType,
-                         SourceInformation sourceInformation}) {
+  void pushInvokeStatic(
+      ast.Node location, Element element, List<HInstruction> arguments,
+      {TypeMask typeMask,
+      InterfaceType instanceType,
+      SourceInformation sourceInformation}) {
     // TODO(johnniwinther): Use [sourceInformation] instead of [location].
     if (tryInlineMethod(element, null, null, arguments, location,
-                        instanceType: instanceType)) {
+        instanceType: instanceType)) {
       return;
     }
 
@@ -6081,17 +5647,16 @@
     // TODO(5346): Try to avoid the need for calling [declaration] before
     var instruction;
     if (backend.isJsInterop(element)) {
-      instruction = invokeJsInteropFunction(element, arguments,
-          sourceInformation);
+      instruction =
+          invokeJsInteropFunction(element, arguments, sourceInformation);
     } else {
       // creating an [HInvokeStatic].
-      instruction = new HInvokeStatic(
-          element.declaration, arguments, typeMask,
+      instruction = new HInvokeStatic(element.declaration, arguments, typeMask,
           targetCanThrow: targetCanThrow)
         ..sourceInformation = sourceInformation;
       if (!currentInlinedInstantiations.isEmpty) {
-        instruction.instantiatedTypes = new List<DartType>.from(
-            currentInlinedInstantiations);
+        instruction.instantiatedTypes =
+            new List<DartType>.from(currentInlinedInstantiations);
       }
       instruction.sideEffects = compiler.world.getSideEffectsOfElement(element);
     }
@@ -6102,10 +5667,9 @@
     }
   }
 
-  HInstruction buildInvokeSuper(Selector selector,
-                                Element element,
-                                List<HInstruction> arguments,
-                                [SourceInformation sourceInformation]) {
+  HInstruction buildInvokeSuper(
+      Selector selector, Element element, List<HInstruction> arguments,
+      [SourceInformation sourceInformation]) {
     HInstruction receiver = localsHandler.readThis();
     // TODO(5346): Try to avoid the need for calling [declaration] before
     // creating an [HStatic].
@@ -6124,22 +5688,16 @@
     } else {
       type = TypeMaskFactory.inferredReturnTypeForElement(element, compiler);
     }
-    HInstruction instruction = new HInvokeSuper(
-        element,
-        currentNonClosureClass,
-        selector,
-        inputs,
-        type,
-        sourceInformation,
+    HInstruction instruction = new HInvokeSuper(element, currentNonClosureClass,
+        selector, inputs, type, sourceInformation,
         isSetter: selector.isSetter || selector.isIndexSet);
     instruction.sideEffects =
         compiler.world.getSideEffectsOfSelector(selector, null);
     return instruction;
   }
 
-  void handleComplexOperatorSend(ast.SendSet node,
-                                 HInstruction receiver,
-                                 Link<ast.Node> arguments) {
+  void handleComplexOperatorSend(
+      ast.SendSet node, HInstruction receiver, Link<ast.Node> arguments) {
     HInstruction rhs;
     if (node.isPrefix || node.isPostfix) {
       rhs = graph.addConstantInt(1, compiler);
@@ -6155,7 +5713,7 @@
         elements.getOperatorTypeMaskInComplexSendSet(node),
         node,
         sourceInformation:
-          sourceInformationBuilder.buildGeneric(node.assignmentOperator));
+            sourceInformationBuilder.buildGeneric(node.assignmentOperator));
   }
 
   void handleSuperSendSet(ast.SendSet node) {
@@ -6163,10 +5721,9 @@
     List<HInstruction> setterInputs = <HInstruction>[];
     void generateSuperSendSet() {
       Selector setterSelector = elements.getSelector(node);
-      if (Elements.isUnresolved(element)
-          || !setterSelector.applies(element, compiler.world)) {
-        generateSuperNoSuchMethodSend(
-            node, setterSelector, setterInputs);
+      if (Elements.isUnresolved(element) ||
+          !setterSelector.applies(element, compiler.world)) {
+        generateSuperNoSuchMethodSend(node, setterSelector, setterInputs);
         pop();
       } else {
         add(buildInvokeSuper(setterSelector, element, setterInputs));
@@ -6195,25 +5752,21 @@
       Selector getterSelector =
           elements.getGetterSelectorInComplexSendSet(node);
       if (Elements.isUnresolved(getter)) {
-        generateSuperNoSuchMethodSend(
-            node,
-            getterSelector,
-            getterInputs);
+        generateSuperNoSuchMethodSend(node, getterSelector, getterInputs);
         getterInstruction = pop();
       } else {
-        getterInstruction = buildInvokeSuper(
-            getterSelector, getter, getterInputs);
+        getterInstruction =
+            buildInvokeSuper(getterSelector, getter, getterInputs);
         add(getterInstruction);
       }
 
       if (node.isIfNullAssignment) {
         SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
-        brancher.handleIfNull(() => stack.add(getterInstruction),
-            () {
-              addDynamicSendArgumentsToList(node, setterInputs);
-              generateSuperSendSet();
-              stack.add(setterInputs.last);
-            });
+        brancher.handleIfNull(() => stack.add(getterInstruction), () {
+          addDynamicSendArgumentsToList(node, setterInputs);
+          generateSuperSendSet();
+          stack.add(setterInputs.last);
+        });
       } else {
         handleComplexOperatorSend(node, getterInstruction, arguments);
         setterInputs.add(pop());
@@ -6237,66 +5790,43 @@
 
   @override
   void visitFinalSuperFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitSuperFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitSuperGetterSet(
-      ast.SendSet node,
-      FunctionElement getter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FunctionElement getter, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperIndexSet(
-      ast.SendSet node,
-      FunctionElement function,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+  void visitSuperIndexSet(ast.SendSet node, FunctionElement function,
+      ast.Node index, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitSuperMethodSet(
-      ast.Send node,
-      MethodElement method,
-      ast.Node rhs,
-      _) {
+      ast.Send node, MethodElement method, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitSuperSetterSet(
-      ast.SendSet node,
-      FunctionElement setter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FunctionElement setter, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitUnresolvedSuperIndexSet(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+      ast.Send node, Element element, ast.Node index, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
@@ -6323,24 +5853,14 @@
   }
 
   @override
-  void visitUnresolvedSuperGetterIndexPrefix(
-      ast.Send node,
-      Element element,
-      MethodElement setter,
-      ast.Node index,
-      IncDecOperator operator,
-      _) {
+  void visitUnresolvedSuperGetterIndexPrefix(ast.Send node, Element element,
+      MethodElement setter, ast.Node index, IncDecOperator operator, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitUnresolvedSuperGetterIndexPostfix(
-      ast.Send node,
-      Element element,
-      MethodElement setter,
-      ast.Node index,
-      IncDecOperator operator,
-      _) {
+  void visitUnresolvedSuperGetterIndexPostfix(ast.Send node, Element element,
+      MethodElement setter, ast.Node index, IncDecOperator operator, _) {
     handleSuperSendSet(node);
   }
 
@@ -6367,22 +5887,14 @@
   }
 
   @override
-  void visitUnresolvedSuperIndexPrefix(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      IncDecOperator operator,
-      _) {
+  void visitUnresolvedSuperIndexPrefix(ast.Send node, Element element,
+      ast.Node index, IncDecOperator operator, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitUnresolvedSuperIndexPostfix(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      IncDecOperator operator,
-      _) {
+  void visitUnresolvedSuperIndexPostfix(ast.Send node, Element element,
+      ast.Node index, IncDecOperator operator, _) {
     handleSuperSendSet(node);
   }
 
@@ -6423,209 +5935,124 @@
   }
 
   @override
-  void visitUnresolvedSuperCompoundIndexSet(
-      ast.Send node,
-      Element element,
-      ast.Node index,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitUnresolvedSuperCompoundIndexSet(ast.Send node, Element element,
+      ast.Node index, AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperFieldCompound(
-      ast.Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitSuperFieldCompound(ast.Send node, FieldElement field,
+      AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitFinalSuperFieldCompound(
-      ast.Send node,
-      FieldElement field,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitFinalSuperFieldCompound(ast.Send node, FieldElement field,
+      AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitFinalSuperFieldPrefix(
-      ast.Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      _) {
+      ast.Send node, FieldElement field, IncDecOperator operator, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitUnresolvedSuperPrefix(
-      ast.Send node,
-      Element element,
-      IncDecOperator operator,
-      _) {
+      ast.Send node, Element element, IncDecOperator operator, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitUnresolvedSuperPostfix(
-      ast.Send node,
-      Element element,
-      IncDecOperator operator,
-      _) {
+      ast.Send node, Element element, IncDecOperator operator, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitUnresolvedSuperCompound(
-      ast.Send node,
-      Element element,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitUnresolvedSuperCompound(ast.Send node, Element element,
+      AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitFinalSuperFieldPostfix(
-      ast.Send node,
-      FieldElement field,
-      IncDecOperator operator,
-      _) {
+      ast.Send node, FieldElement field, IncDecOperator operator, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperFieldFieldCompound(
-      ast.Send node,
-      FieldElement readField,
-      FieldElement writtenField,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitSuperFieldFieldCompound(ast.Send node, FieldElement readField,
+      FieldElement writtenField, AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperGetterSetterCompound(
-      ast.Send node,
-      FunctionElement getter,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitSuperGetterSetterCompound(ast.Send node, FunctionElement getter,
+      FunctionElement setter, AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperMethodSetterCompound(
-      ast.Send node,
-      FunctionElement method,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitSuperMethodSetterCompound(ast.Send node, FunctionElement method,
+      FunctionElement setter, AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperMethodCompound(
-      ast.Send node,
-      FunctionElement method,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitSuperMethodCompound(ast.Send node, FunctionElement method,
+      AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitUnresolvedSuperGetterCompound(
-      ast.Send node,
-      Element element,
-      MethodElement setter,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitUnresolvedSuperGetterCompound(ast.Send node, Element element,
+      MethodElement setter, AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitUnresolvedSuperSetterCompound(
-      ast.Send node,
-      MethodElement getter,
-      Element element,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitUnresolvedSuperSetterCompound(ast.Send node, MethodElement getter,
+      Element element, AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperFieldSetterCompound(
-      ast.Send node,
-      FieldElement field,
-      FunctionElement setter,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitSuperFieldSetterCompound(ast.Send node, FieldElement field,
+      FunctionElement setter, AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
-  void visitSuperGetterFieldCompound(
-      ast.Send node,
-      FunctionElement getter,
-      FieldElement field,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitSuperGetterFieldCompound(ast.Send node, FunctionElement getter,
+      FieldElement field, AssignmentOperator operator, ast.Node rhs, _) {
     handleSuperSendSet(node);
   }
 
   @override
   void visitIndexSet(
-      ast.SendSet node,
-      ast.Node receiver,
-      ast.Node index,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ast.Node receiver, ast.Node index, ast.Node rhs, _) {
     generateDynamicSend(node);
   }
 
   @override
-  void visitCompoundIndexSet(
-      ast.SendSet node,
-      ast.Node receiver,
-      ast.Node index,
-      AssignmentOperator operator,
-      ast.Node rhs,
-      _) {
+  void visitCompoundIndexSet(ast.SendSet node, ast.Node receiver,
+      ast.Node index, AssignmentOperator operator, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     handleIndexSendSet(node);
   }
 
   @override
-  void visitIndexPrefix(
-      ast.Send node,
-      ast.Node receiver,
-      ast.Node index,
-      IncDecOperator operator,
-      _) {
+  void visitIndexPrefix(ast.Send node, ast.Node receiver, ast.Node index,
+      IncDecOperator operator, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     handleIndexSendSet(node);
   }
 
   @override
-  void visitIndexPostfix(
-      ast.Send node,
-      ast.Node receiver,
-      ast.Node index,
-      IncDecOperator operator,
-      _) {
+  void visitIndexPostfix(ast.Send node, ast.Node receiver, ast.Node index,
+      IncDecOperator operator, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     handleIndexSendSet(node);
   }
@@ -6645,11 +6072,8 @@
         index = pop();
       }
 
-      pushInvokeDynamic(
-          node,
-          elements.getGetterSelectorInComplexSendSet(node),
-          elements.getGetterTypeMaskInComplexSendSet(node),
-          [receiver, index]);
+      pushInvokeDynamic(node, elements.getGetterSelectorInComplexSendSet(node),
+          elements.getGetterTypeMaskInComplexSendSet(node), [receiver, index]);
       HInstruction getterInstruction = pop();
       if (node.isIfNullAssignment) {
         // Compile x[i] ??= e as:
@@ -6658,26 +6082,19 @@
         //      t1 = x[i] = e;
         //   result = t1
         SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
-        brancher.handleIfNull(() => stack.add(getterInstruction),
-            () {
-              visit(arguments.head);
-              HInstruction value = pop();
-              pushInvokeDynamic(
-                  node,
-                  elements.getSelector(node),
-                  elements.getTypeMask(node),
-                  [receiver, index, value]);
-              pop();
-              stack.add(value);
-            });
+        brancher.handleIfNull(() => stack.add(getterInstruction), () {
+          visit(arguments.head);
+          HInstruction value = pop();
+          pushInvokeDynamic(node, elements.getSelector(node),
+              elements.getTypeMask(node), [receiver, index, value]);
+          pop();
+          stack.add(value);
+        });
       } else {
         handleComplexOperatorSend(node, getterInstruction, arguments);
         HInstruction value = pop();
-        pushInvokeDynamic(
-            node,
-            elements.getSelector(node),
-            elements.getTypeMask(node),
-            [receiver, index, value]);
+        pushInvokeDynamic(node, elements.getSelector(node),
+            elements.getTypeMask(node), [receiver, index, value]);
         pop();
         if (node.isPostfix) {
           stack.add(getterInstruction);
@@ -6689,37 +6106,21 @@
   }
 
   @override
-  void visitThisPropertySet(
-      ast.SendSet node,
-      Name name,
-      ast.Node rhs,
-      _) {
+  void visitThisPropertySet(ast.SendSet node, Name name, ast.Node rhs, _) {
     generateInstanceSetterWithCompiledReceiver(
-        node,
-        localsHandler.readThis(),
-        visitAndPop(rhs));
+        node, localsHandler.readThis(), visitAndPop(rhs));
   }
 
   @override
   void visitDynamicPropertySet(
-      ast.SendSet node,
-      ast.Node receiver,
-      Name name,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ast.Node receiver, Name name, ast.Node rhs, _) {
     generateInstanceSetterWithCompiledReceiver(
-        node,
-        generateInstanceSendReceiver(node),
-        visitAndPop(rhs));
+        node, generateInstanceSendReceiver(node), visitAndPop(rhs));
   }
 
   @override
   void visitIfNotNullDynamicPropertySet(
-      ast.SendSet node,
-      ast.Node receiver,
-      Name name,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ast.Node receiver, Name name, ast.Node rhs, _) {
     // compile e?.x = e2 to:
     //
     // t1 = e
@@ -6737,205 +6138,142 @@
         () => stack.add(receiverInstruction),
         () {
           generateInstanceSetterWithCompiledReceiver(
-              node,
-              receiverInstruction,
-              visitAndPop(rhs));
+              node, receiverInstruction, visitAndPop(rhs));
         });
   }
 
   @override
   void visitParameterSet(
-      ast.SendSet node,
-      ParameterElement parameter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ParameterElement parameter, ast.Node rhs, _) {
     generateNonInstanceSetter(node, parameter, visitAndPop(rhs));
   }
 
   @override
   void visitFinalParameterSet(
-      ast.SendSet node,
-      ParameterElement parameter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, ParameterElement parameter, ast.Node rhs, _) {
     generateNoSuchSetter(node, parameter, visitAndPop(rhs));
   }
 
   @override
   void visitLocalVariableSet(
-      ast.SendSet node,
-      LocalVariableElement variable,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, LocalVariableElement variable, ast.Node rhs, _) {
     generateNonInstanceSetter(node, variable, visitAndPop(rhs));
   }
 
   @override
   void visitFinalLocalVariableSet(
-      ast.SendSet node,
-      LocalVariableElement variable,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, LocalVariableElement variable, ast.Node rhs, _) {
     generateNoSuchSetter(node, variable, visitAndPop(rhs));
   }
 
   @override
   void visitLocalFunctionSet(
-      ast.SendSet node,
-      LocalFunctionElement function,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, LocalFunctionElement function, ast.Node rhs, _) {
     generateNoSuchSetter(node, function, visitAndPop(rhs));
   }
 
   @override
   void visitTopLevelFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNonInstanceSetter(node, field, visitAndPop(rhs));
   }
 
   @override
   void visitFinalTopLevelFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNoSuchSetter(node, field, visitAndPop(rhs));
   }
 
   @override
   void visitTopLevelGetterSet(
-      ast.SendSet node,
-      GetterElement getter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, GetterElement getter, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNoSuchSetter(node, getter, visitAndPop(rhs));
   }
 
   @override
   void visitTopLevelSetterSet(
-      ast.SendSet node,
-      SetterElement setter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, SetterElement setter, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNonInstanceSetter(node, setter, visitAndPop(rhs));
   }
 
   @override
   void visitTopLevelFunctionSet(
-      ast.SendSet node,
-      MethodElement function,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, MethodElement function, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNoSuchSetter(node, function, visitAndPop(rhs));
   }
 
   @override
   void visitStaticFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNonInstanceSetter(node, field, visitAndPop(rhs));
   }
 
   @override
   void visitFinalStaticFieldSet(
-      ast.SendSet node,
-      FieldElement field,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, FieldElement field, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNoSuchSetter(node, field, visitAndPop(rhs));
   }
 
   @override
   void visitStaticGetterSet(
-      ast.SendSet node,
-      GetterElement getter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, GetterElement getter, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNoSuchSetter(node, getter, visitAndPop(rhs));
   }
 
   @override
   void visitStaticSetterSet(
-      ast.SendSet node,
-      SetterElement setter,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, SetterElement setter, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNonInstanceSetter(node, setter, visitAndPop(rhs));
   }
 
   @override
   void visitStaticFunctionSet(
-      ast.SendSet node,
-      MethodElement function,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, MethodElement function, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNoSuchSetter(node, function, visitAndPop(rhs));
   }
 
   @override
-  void visitUnresolvedSet(
-      ast.SendSet node,
-      Element element,
-      ast.Node rhs,
-      _) {
+  void visitUnresolvedSet(ast.SendSet node, Element element, ast.Node rhs, _) {
     generateIsDeferredLoadedCheckOfSend(node);
     generateNonInstanceSetter(node, element, visitAndPop(rhs));
   }
 
   @override
   void visitClassTypeLiteralSet(
-      ast.SendSet node,
-      TypeConstantExpression constant,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, TypeConstantExpression constant, ast.Node rhs, _) {
     generateThrowNoSuchMethod(node, constant.type.name,
-                              argumentNodes: node.arguments);
+        argumentNodes: node.arguments);
   }
 
   @override
   void visitTypedefTypeLiteralSet(
-      ast.SendSet node,
-      TypeConstantExpression constant,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, TypeConstantExpression constant, ast.Node rhs, _) {
     generateThrowNoSuchMethod(node, constant.type.name,
-                              argumentNodes: node.arguments);
+        argumentNodes: node.arguments);
   }
 
   @override
   void visitDynamicTypeLiteralSet(
-      ast.SendSet node,
-      TypeConstantExpression constant,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, TypeConstantExpression constant, ast.Node rhs, _) {
     generateThrowNoSuchMethod(node, constant.type.name,
-                              argumentNodes: node.arguments);
+        argumentNodes: node.arguments);
   }
 
   @override
   void visitTypeVariableTypeLiteralSet(
-      ast.SendSet node,
-      TypeVariableElement element,
-      ast.Node rhs,
-      _) {
+      ast.SendSet node, TypeVariableElement element, ast.Node rhs, _) {
     generateThrowNoSuchMethod(node, element.name,
-                              argumentNodes: node.arguments);
+        argumentNodes: node.arguments);
   }
 
   void handleCompoundSendSet(ast.SendSet node) {
@@ -6949,7 +6287,7 @@
       } else {
         ast.Identifier selector = node.selector;
         generateThrowNoSuchMethod(node, selector.source,
-                                  argumentNodes: node.arguments);
+            argumentNodes: node.arguments);
       }
       return;
     }
@@ -6965,12 +6303,10 @@
         HInstruction getterInstruction = pop();
         if (node.isIfNullAssignment) {
           SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
-          brancher.handleIfNull(() => stack.add(getterInstruction),
-              () {
-                visit(node.arguments.head);
-                generateInstanceSetterWithCompiledReceiver(
-                    node, receiver, pop());
-              });
+          brancher.handleIfNull(() => stack.add(getterInstruction), () {
+            visit(node.arguments.head);
+            generateInstanceSetterWithCompiledReceiver(node, receiver, pop());
+          });
         } else {
           handleComplexOperatorSend(node, getterInstruction, node.arguments);
           HInstruction value = pop();
@@ -6987,13 +6323,10 @@
         //   t1 == null ? t1 : (t1.x = t1.x op e2);
         HInstruction receiver;
         SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
-        brancher.handleConditional(
-            () {
-              receiver = generateInstanceSendReceiver(node);
-              pushCheckNull(receiver);
-            },
-            () => stack.add(receiver),
-            () => generateAssignment(receiver));
+        brancher.handleConditional(() {
+          receiver = generateInstanceSendReceiver(node);
+          pushCheckNull(receiver);
+        }, () => stack.add(receiver), () => generateAssignment(receiver));
       } else {
         generateAssignment(generateInstanceSendReceiver(node));
       }
@@ -7016,11 +6349,10 @@
     HInstruction getterInstruction = pop();
     if (node.isIfNullAssignment) {
       SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
-      brancher.handleIfNull(() => stack.add(getterInstruction),
-          () {
-            visit(node.arguments.head);
-            generateNonInstanceSetter(node, element, pop());
-          });
+      brancher.handleIfNull(() => stack.add(getterInstruction), () {
+        visit(node.arguments.head);
+        generateNonInstanceSetter(node, element, pop());
+      });
     } else {
       handleComplexOperatorSend(node, getterInstruction, node.arguments);
       HInstruction value = pop();
@@ -7034,20 +6366,13 @@
 
   @override
   void handleDynamicCompounds(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      CompoundRhs rhs,
-      _) {
+      ast.Send node, ast.Node receiver, Name name, CompoundRhs rhs, _) {
     handleCompoundSendSet(node);
   }
 
   @override
   void handleLocalCompounds(
-      ast.SendSet node,
-      LocalElement local,
-      CompoundRhs rhs,
-      _,
+      ast.SendSet node, LocalElement local, CompoundRhs rhs, _,
       {bool isSetterValid}) {
     handleCompoundSendSet(node);
   }
@@ -7066,20 +6391,12 @@
 
   @override
   handleDynamicSetIfNulls(
-      ast.Send node,
-      ast.Node receiver,
-      Name name,
-      ast.Node rhs,
-      arg) {
+      ast.Send node, ast.Node receiver, Name name, ast.Node rhs, arg) {
     handleCompoundSendSet(node);
   }
 
   @override
-  handleLocalSetIfNulls(
-      ast.SendSet node,
-      LocalElement local,
-      ast.Node rhs,
-      arg,
+  handleLocalSetIfNulls(ast.SendSet node, LocalElement local, ast.Node rhs, arg,
       {bool isSetterValid}) {
     handleCompoundSendSet(node);
   }
@@ -7109,47 +6426,30 @@
   }
 
   @override
-  handleSuperIndexSetIfNull(
-      ast.SendSet node,
-      Element indexFunction,
-      Element indexSetFunction,
-      ast.Node index,
-      ast.Node rhs,
-      arg,
-      {bool isGetterValid,
-       bool isSetterValid}) {
+  handleSuperIndexSetIfNull(ast.SendSet node, Element indexFunction,
+      Element indexSetFunction, ast.Node index, ast.Node rhs, arg,
+      {bool isGetterValid, bool isSetterValid}) {
     handleCompoundSendSet(node);
   }
 
   @override
   visitIndexSetIfNull(
-      ast.SendSet node,
-      ast.Node receiver,
-      ast.Node index,
-      ast.Node rhs,
-      arg,
-      {bool isGetterValid,
-       bool isSetterValid}) {
+      ast.SendSet node, ast.Node receiver, ast.Node index, ast.Node rhs, arg,
+      {bool isGetterValid, bool isSetterValid}) {
     generateIsDeferredLoadedCheckOfSend(node);
     handleIndexSendSet(node);
   }
 
   @override
   handleTypeLiteralConstantSetIfNulls(
-      ast.SendSet node,
-      ConstantExpression constant,
-      ast.Node rhs,
-      arg) {
+      ast.SendSet node, ConstantExpression constant, ast.Node rhs, arg) {
     // The type variable is never `null`.
     generateConstantTypeLiteral(node);
   }
 
   @override
   visitTypeVariableTypeLiteralSetIfNull(
-      ast.Send node,
-      TypeVariableElement element,
-      ast.Node rhs,
-      arg) {
+      ast.Send node, TypeVariableElement element, ast.Node rhs, arg) {
     // The type variable is never `null`.
     generateTypeVariableLiteral(node, element.type);
   }
@@ -7194,9 +6494,7 @@
     for (Link<ast.Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       if (isAborted()) {
         reporter.reportHintMessage(
-            link.head,
-            MessageKind.GENERIC,
-            {'text': 'dead code'});
+            link.head, MessageKind.GENERIC, {'text': 'dead code'});
       } else {
         visit(link.head);
       }
@@ -7209,8 +6507,8 @@
 
   visitOperator(ast.Operator node) {
     // Operators are intercepted in their surrounding Send nodes.
-    reporter.internalError(node,
-        'SsaBuilder.visitOperator should not be called.');
+    reporter.internalError(
+        node, 'SsaBuilder.visitOperator should not be called.');
   }
 
   visitCascade(ast.Cascade node) {
@@ -7236,14 +6534,12 @@
     HInstruction exception = rethrowableException;
     if (exception == null) {
       exception = graph.addConstantNull(compiler);
-      reporter.internalError(node,
-          'rethrowableException should not be null.');
+      reporter.internalError(node, 'rethrowableException should not be null.');
     }
     handleInTryStatement();
-    closeAndGotoExit(
-        new HThrow(exception,
-                   sourceInformationBuilder.buildThrow(node),
-                   isRethrow: true));
+    closeAndGotoExit(new HThrow(
+        exception, sourceInformationBuilder.buildThrow(node),
+        isRethrow: true));
   }
 
   visitRedirectingFactoryBody(ast.RedirectingFactoryBody node) {
@@ -7256,11 +6552,10 @@
         redirectingConstructor.functionSignature;
 
     List<Element> targetRequireds = targetSignature.requiredParameters;
-    List<Element> redirectingRequireds
-        = redirectingSignature.requiredParameters;
+    List<Element> redirectingRequireds =
+        redirectingSignature.requiredParameters;
 
-    List<Element> targetOptionals =
-        targetSignature.orderedOptionalParameters;
+    List<Element> targetOptionals = targetSignature.orderedOptionalParameters;
     List<Element> redirectingOptionals =
         redirectingSignature.orderedOptionalParameters;
 
@@ -7276,7 +6571,7 @@
       if (position < redirectingRequireds.length) {
         loadLocal(redirectingRequireds[position]);
       } else if (position < redirectingSignature.parameterCount &&
-                 !redirectingSignature.optionalParametersAreNamed) {
+          !redirectingSignature.optionalParametersAreNamed) {
         loadLocal(redirectingOptionals[position - redirectingRequireds.length]);
       } else if (optionalParameter != null) {
         inputs.add(handleConstantForOptionalParameter(optionalParameter));
@@ -7295,10 +6590,8 @@
     if (targetOptionals.isNotEmpty) {
       if (targetSignature.optionalParametersAreNamed) {
         for (ParameterElement parameter in targetOptionals) {
-          ParameterElement redirectingParameter =
-              redirectingOptionals.firstWhere(
-                  (p) => p.name == parameter.name,
-                  orElse: () => null);
+          ParameterElement redirectingParameter = redirectingOptionals
+              .firstWhere((p) => p.name == parameter.name, orElse: () => null);
           if (redirectingParameter == null) {
             inputs.add(handleConstantForOptionalParameter(parameter));
           } else {
@@ -7335,7 +6628,7 @@
   ///
   /// We do not accept the internal Future implementation class.
   bool isValidAsyncReturnType(DartType type) {
-    assert (isBuildingAsyncFunction);
+    assert(isBuildingAsyncFunction);
     // TODO(sigurdm): In an internal library a function could be declared:
     //
     // _FutureImpl foo async => 1;
@@ -7344,9 +6637,8 @@
     // function is a `_FutureImpl`), but currently false is returned in this
     // case.
     return type.isDynamic ||
-           type.isObject ||
-           (type is InterfaceType &&
-               type.element == coreClasses.futureClass);
+        type.isObject ||
+        (type is InterfaceType && type.element == coreClasses.futureClass);
   }
 
   visitReturn(ast.Return node) {
@@ -7363,9 +6655,8 @@
       if (isBuildingAsyncFunction) {
         if (compiler.options.enableTypeAssertions &&
             !isValidAsyncReturnType(returnType)) {
-          String message =
-                "Async function returned a Future, "
-                "was declared to return a $returnType.";
+          String message = "Async function returned a Future, "
+              "was declared to return a $returnType.";
           generateTypeError(node, message);
           pop();
           return;
@@ -7399,20 +6690,19 @@
     visit(node.expression);
     HInstruction awaited = pop();
     // TODO(herhut): Improve this type.
-    push(new HAwait(awaited, new TypeMask.subclass(
-        coreClasses.objectClass, compiler.world)));
+    push(new HAwait(awaited,
+        new TypeMask.subclass(coreClasses.objectClass, compiler.world)));
   }
 
   visitTypeAnnotation(ast.TypeAnnotation node) {
-    reporter.internalError(node,
-        'Visiting type annotation in SSA builder.');
+    reporter.internalError(node, 'Visiting type annotation in SSA builder.');
   }
 
   visitVariableDefinitions(ast.VariableDefinitions node) {
     assert(isReachable);
     for (Link<ast.Node> link = node.definitions.nodes;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       ast.Node definition = link.head;
       LocalElement local = elements[definition];
       if (definition is ast.Identifier) {
@@ -7422,7 +6712,7 @@
         ast.SendSet node = definition;
         generateNonInstanceSetter(
             node, local, visitAndPop(node.arguments.first));
-        pop();  // Discard value.
+        pop(); // Discard value.
       }
     }
   }
@@ -7449,8 +6739,8 @@
     } else {
       List<HInstruction> inputs = <HInstruction>[];
       for (Link<ast.Node> link = node.elements.nodes;
-           !link.isEmpty;
-           link = link.tail) {
+          !link.isEmpty;
+          link = link.tail) {
         visit(link.head);
         inputs.add(pop());
       }
@@ -7468,8 +6758,7 @@
   visitConditional(ast.Conditional node) {
     SsaBranchBuilder brancher = new SsaBranchBuilder(this, node);
     brancher.handleConditional(() => visit(node.condition),
-                               () => visit(node.thenExpression),
-                               () => visit(node.elseExpression));
+        () => visit(node.thenExpression), () => visit(node.elseExpression));
   }
 
   visitStringInterpolation(ast.StringInterpolation node) {
@@ -7480,8 +6769,8 @@
 
   visitStringInterpolationPart(ast.StringInterpolationPart node) {
     // The parts are iterated in visitStringInterpolation.
-    reporter.internalError(node,
-      'SsaBuilder.visitStringInterpolation should not be called.');
+    reporter.internalError(
+        node, 'SsaBuilder.visitStringInterpolation should not be called.');
   }
 
   visitEmptyStatement(ast.EmptyStatement node) {
@@ -7551,9 +6840,8 @@
 
     visit(node.expression);
     HInstruction expression = pop();
-    pushInvokeStatic(node,
-                     helpers.streamIteratorConstructor,
-                     [expression, graph.addConstantNull(compiler)]);
+    pushInvokeStatic(node, helpers.streamIteratorConstructor,
+        [expression, graph.addConstantNull(compiler)]);
     streamIterator = pop();
 
     void buildInitializer() {}
@@ -7578,41 +6866,30 @@
       TypeMask mask = elements.getTypeMask(identifier);
 
       HInstruction value = pop();
-      if (identifier.asSend() != null
-          && Elements.isInstanceSend(identifier, elements)) {
+      if (identifier.asSend() != null &&
+          Elements.isInstanceSend(identifier, elements)) {
         HInstruction receiver = generateInstanceSendReceiver(identifier);
         assert(receiver != null);
-        generateInstanceSetterWithCompiledReceiver(
-            null,
-            receiver,
-            value,
-            selector: selector,
-            mask: mask,
-            location: identifier);
+        generateInstanceSetterWithCompiledReceiver(null, receiver, value,
+            selector: selector, mask: mask, location: identifier);
       } else {
-        generateNonInstanceSetter(
-            null, variable, value, location: identifier);
+        generateNonInstanceSetter(null, variable, value, location: identifier);
       }
       pop(); // Pop the value pushed by the setter call.
 
       visit(node.body);
     }
 
-    void buildUpdate() {};
+    void buildUpdate() {}
+    ;
 
     buildProtectedByFinally(() {
-      handleLoop(node,
-                 buildInitializer,
-                 buildCondition,
-                 buildUpdate,
-                 buildBody);
+      handleLoop(
+          node, buildInitializer, buildCondition, buildUpdate, buildBody);
     }, () {
-      pushInvokeDynamic(node,
-          Selectors.cancel,
-          null,
-          [streamIterator]);
-      push(new HAwait(pop(), new TypeMask.subclass(
-          coreClasses.objectClass, compiler.world)));
+      pushInvokeDynamic(node, Selectors.cancel, null, [streamIterator]);
+      push(new HAwait(pop(),
+          new TypeMask.subclass(coreClasses.objectClass, compiler.world)));
       pop();
     });
   }
@@ -7689,17 +6966,12 @@
         Elements.isInstanceSend(identifier, elements)) {
       HInstruction receiver = generateInstanceSendReceiver(identifier);
       assert(receiver != null);
-      generateInstanceSetterWithCompiledReceiver(
-          null,
-          receiver,
-          value,
-          selector: selector,
-          mask: mask,
-          location: identifier);
+      generateInstanceSetterWithCompiledReceiver(null, receiver, value,
+          selector: selector, mask: mask, location: identifier);
     } else {
       generateNonInstanceSetter(null, variable, value, location: identifier);
     }
-    pop();  // Discard the value pushed by the setter call.
+    pop(); // Discard the value pushed by the setter call.
   }
 
   buildSyncForInIndexable(ast.ForIn node, TypeMask arrayType) {
@@ -7717,9 +6989,9 @@
     TypeMask boolType = backend.boolType;
 
     // These variables are shared by initializer, condition, body and update.
-    HInstruction array;  // Set in buildInitializer.
-    bool isFixed;  // Set in buildInitializer.
-    HInstruction originalLength = null;  // Set for growable lists.
+    HInstruction array; // Set in buildInitializer.
+    bool isFixed; // Set in buildInitializer.
+    HInstruction originalLength = null; // Set for growable lists.
 
     HInstruction buildGetLength() {
       Element lengthElement = helpers.jsIndexableLength;
@@ -7739,9 +7011,8 @@
       //
       HInstruction length = buildGetLength();
       push(new HIdentity(length, originalLength, null, boolType));
-      pushInvokeStatic(node,
-          helpers.checkConcurrentModificationError,
-          [pop(), array]);
+      pushInvokeStatic(
+          node, helpers.checkConcurrentModificationError, [pop(), array]);
       pop();
     }
 
@@ -7749,8 +7020,8 @@
       visit(node.expression);
       array = pop();
       isFixed = isFixedLength(array.instructionType, compiler);
-      localsHandler.updateLocal(indexVariable,
-          graph.addConstantInt(0, compiler));
+      localsHandler.updateLocal(
+          indexVariable, graph.addConstantInt(0, compiler));
       originalLength = buildGetLength();
     }
 
@@ -7810,9 +7081,9 @@
 
   visitLabeledStatement(ast.LabeledStatement node) {
     ast.Statement body = node.statement;
-    if (body is ast.Loop
-        || body is ast.SwitchStatement
-        || Elements.isUnusedLabel(node, elements)) {
+    if (body is ast.Loop ||
+        body is ast.SwitchStatement ||
+        Elements.isUnusedLabel(node, elements)) {
       // Loops and switches handle their own labels.
       visit(body);
       return;
@@ -7843,8 +7114,8 @@
     if (hasBreak) {
       // There was at least one reachable break, so the label is needed.
       entryBlock.setBlockFlow(
-          new HLabeledBlockInformation(new HSubGraphBlockInformation(bodyGraph),
-                                       handler.labels()),
+          new HLabeledBlockInformation(
+              new HSubGraphBlockInformation(bodyGraph), handler.labels()),
           joinBlock);
     }
     handler.close();
@@ -7857,8 +7128,8 @@
     }
     List<HInstruction> listInputs = <HInstruction>[];
     for (Link<ast.Node> link = node.entries.nodes;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       visit(link.head);
       listInputs.add(pop());
       listInputs.add(pop());
@@ -7917,8 +7188,8 @@
     // dart2js unit tests).
     TypeMask mapType =
         new TypeMask.nonNullSubtype(helpers.mapLiteralClass, compiler.world);
-    TypeMask returnTypeMask = TypeMaskFactory.inferredReturnTypeForElement(
-        constructor, compiler);
+    TypeMask returnTypeMask =
+        TypeMaskFactory.inferredReturnTypeForElement(constructor, compiler);
     TypeMask instructionType =
         mapType.intersection(returnTypeMask, compiler.world);
 
@@ -7939,7 +7210,6 @@
 
   Map<ast.CaseMatch, ConstantValue> buildSwitchCaseConstants(
       ast.SwitchStatement node) {
-
     Map<ast.CaseMatch, ConstantValue> constants =
         new Map<ast.CaseMatch, ConstantValue>();
     for (ast.SwitchCase switchCase in node.cases) {
@@ -7993,8 +7263,8 @@
    * Builds a simple switch statement which does not handle uses of continue
    * statements to labeled switch cases.
    */
-  void buildSimpleSwitchStatement(ast.SwitchStatement node,
-                                  Map<ast.CaseMatch, ConstantValue> constants) {
+  void buildSimpleSwitchStatement(
+      ast.SwitchStatement node, Map<ast.CaseMatch, ConstantValue> constants) {
     JumpHandler jumpHandler = createJumpHandler(node, isLoopJump: false);
     HInstruction buildExpression() {
       visit(node.expression);
@@ -8015,13 +7285,8 @@
     void buildSwitchCase(ast.SwitchCase node) {
       visit(node.statements);
     }
-    handleSwitch(node,
-                 jumpHandler,
-                 buildExpression,
-                 node.cases,
-                 getConstants,
-                 isDefaultCase,
-                 buildSwitchCase);
+    handleSwitch(node, jumpHandler, buildExpression, node.cases, getConstants,
+        isDefaultCase, buildSwitchCase);
     jumpHandler.close();
   }
 
@@ -8029,10 +7294,11 @@
    * Builds a switch statement that can handle arbitrary uses of continue
    * statements to labeled switch cases.
    */
-  void buildComplexSwitchStatement(ast.SwitchStatement node,
-                                   Map<ast.CaseMatch, ConstantValue> constants,
-                                   Map<ast.SwitchCase, int> caseIndex,
-                                   bool hasDefault) {
+  void buildComplexSwitchStatement(
+      ast.SwitchStatement node,
+      Map<ast.CaseMatch, ConstantValue> constants,
+      Map<ast.SwitchCase, int> caseIndex,
+      bool hasDefault) {
     // If the switch statement has switch cases targeted by continue
     // statements we create the following encoding:
     //
@@ -8104,17 +7370,11 @@
       }
       jumpTargets[switchTarget].generateBreak();
     }
-    handleSwitch(node,
-                 jumpHandler,
-                 buildExpression,
-                 switchCases,
-                 getConstants,
-                 isDefaultCase,
-                 buildSwitchCase);
+    handleSwitch(node, jumpHandler, buildExpression, switchCases, getConstants,
+        isDefaultCase, buildSwitchCase);
     jumpHandler.close();
 
-    HInstruction buildCondition() =>
-        graph.addConstantBool(true, compiler);
+    HInstruction buildCondition() => graph.addConstantBool(true, compiler);
 
     void buildSwitch() {
       HInstruction buildExpression() {
@@ -8134,19 +7394,18 @@
       // Pass a [NullJumpHandler] because the target for the contained break
       // is not the generated switch statement but instead the loop generated
       // in the call to [handleLoop] below.
-      handleSwitch(node,
-                   new NullJumpHandler(reporter),
-                   buildExpression, node.cases, getConstants,
-                   (_) => false, // No case is default.
-                   buildSwitchCase);
+      handleSwitch(
+          node,
+          new NullJumpHandler(reporter),
+          buildExpression,
+          node.cases,
+          getConstants,
+          (_) => false, // No case is default.
+          buildSwitchCase);
     }
 
     void buildLoop() {
-      handleLoop(node,
-          () {},
-          buildCondition,
-          () {},
-          buildSwitch);
+      handleLoop(node, () {}, buildCondition, () {}, buildSwitch);
     }
 
     if (hasDefault) {
@@ -8157,9 +7416,7 @@
       void buildCondition() {
         js.Template code = js.js.parseForeignJS('#');
         push(new HForeignCode(
-            code,
-            backend.boolType,
-            [localsHandler.readLocal(switchTarget)],
+            code, backend.boolType, [localsHandler.readLocal(switchTarget)],
             nativeBehavior: native.NativeBehavior.PURE));
       }
       handleIf(node,
@@ -8189,7 +7446,6 @@
       Iterable<ConstantValue> getConstants(ast.SwitchCase switchCase),
       bool isDefaultCase(ast.SwitchCase switchCase),
       void buildSwitchCase(ast.SwitchCase switchCase)) {
-
     HBasicBlock expressionStart = openNewBlock();
     HInstruction expression = buildExpression();
     if (switchCases.isEmpty) {
@@ -8255,7 +7511,7 @@
     });
     jumpHandler.forEachContinue((HContinue instruction, LocalsHandler locals) {
       assert(invariant(errorNode, false,
-                       message: 'Continue cannot target a switch.'));
+          message: 'Continue cannot target a switch.'));
     });
     if (!isAborted()) {
       current.close(new HGoto());
@@ -8271,8 +7527,8 @@
       close(new HGoto());
       defaultCase.addSuccessor(joinBlock);
       caseHandlers.add(savedLocals);
-      statements.add(new HSubGraphBlockInformation(new SubGraph(
-          defaultCase, defaultCase)));
+      statements.add(new HSubGraphBlockInformation(
+          new SubGraph(defaultCase, defaultCase)));
     }
     assert(caseHandlers.length == joinBlock.predecessors.length);
     if (caseHandlers.length != 0) {
@@ -8289,13 +7545,11 @@
     }
 
     HSubExpressionBlockInformation expressionInfo =
-        new HSubExpressionBlockInformation(new SubExpression(expressionStart,
-                                                             expressionEnd));
+        new HSubExpressionBlockInformation(
+            new SubExpression(expressionStart, expressionEnd));
     expressionStart.setBlockFlow(
-        new HSwitchBlockInformation(expressionInfo,
-                                    statements,
-                                    jumpHandler.target,
-                                    jumpHandler.labels()),
+        new HSwitchBlockInformation(expressionInfo, statements,
+            jumpHandler.target, jumpHandler.labels()),
         joinBlock);
 
     jumpHandler.close();
@@ -8396,10 +7650,10 @@
     open(exitBlock);
     enterBlock.setBlockFlow(
         new HTryBlockInformation(
-          wrapStatementGraph(bodyGraph),
-          null, // No catch-variable.
-          null, // No catchGraph.
-          wrapStatementGraph(finallyGraph)),
+            wrapStatementGraph(bodyGraph),
+            null, // No catch-variable.
+            null, // No catchGraph.
+            wrapStatementGraph(finallyGraph)),
         exitBlock);
     inTryStatement = oldInTryStatement;
   }
@@ -8489,8 +7743,7 @@
         if (catchBlock.exception != null) {
           LocalVariableElement exceptionVariable =
               elements[catchBlock.exception];
-          localsHandler.updateLocal(exceptionVariable,
-                                    unwrappedException);
+          localsHandler.updateLocal(exceptionVariable, unwrappedException);
         }
         ast.Node trace = catchBlock.trace;
         if (trace != null) {
@@ -8504,24 +7757,20 @@
 
       void visitElse() {
         if (link.isEmpty) {
-          closeAndGotoExit(
-              new HThrow(exception,
-                         exception.sourceInformation,
-                         isRethrow: true));
+          closeAndGotoExit(new HThrow(exception, exception.sourceInformation,
+              isRethrow: true));
         } else {
           ast.CatchBlock newBlock = link.head;
-          handleIf(node,
-                   visitCondition: () { pushCondition(newBlock); },
-                   visitThen: visitThen,
-                   visitElse: visitElse);
+          handleIf(node, visitCondition: () {
+            pushCondition(newBlock);
+          }, visitThen: visitThen, visitElse: visitElse);
         }
       }
 
       ast.CatchBlock firstBlock = link.head;
-      handleIf(node,
-          visitCondition: () { pushCondition(firstBlock); },
-          visitThen: visitThen,
-          visitElse: visitElse);
+      handleIf(node, visitCondition: () {
+        pushCondition(firstBlock);
+      }, visitThen: visitThen, visitElse: visitElse);
       if (!isAborted()) endCatchBlock = close(new HGoto());
 
       rethrowableException = oldRethrowableException;
@@ -8542,7 +7791,9 @@
 
     HBasicBlock exitBlock = graph.addNewBlock();
 
-    addOptionalSuccessor(b1, b2) { if (b2 != null) b1.addSuccessor(b2); }
+    addOptionalSuccessor(b1, b2) {
+      if (b2 != null) b1.addSuccessor(b2);
+    }
     addExitTrySuccessor(successor) {
       if (successor == null) return;
       // Iterate over all blocks created inside this try/catch, and
@@ -8596,11 +7847,8 @@
     localsHandler = savedLocals;
     open(exitBlock);
     enterBlock.setBlockFlow(
-        new HTryBlockInformation(
-          wrapStatementGraph(bodyGraph),
-          exception,
-          wrapStatementGraph(catchGraph),
-          wrapStatementGraph(finallyGraph)),
+        new HTryBlockInformation(wrapStatementGraph(bodyGraph), exception,
+            wrapStatementGraph(catchGraph), wrapStatementGraph(finallyGraph)),
         exitBlock);
     inTryStatement = oldInTryStatement;
   }
@@ -8621,12 +7869,16 @@
    * This method is invoked before inlining the body of [function] into this
    * [SsaBuilder].
    */
-  void enterInlinedMethod(FunctionElement function,
-                          ast.Node _,
-                          List<HInstruction> compiledArguments,
-                          {InterfaceType instanceType}) {
+  void enterInlinedMethod(FunctionElement function, ast.Node _,
+      List<HInstruction> compiledArguments,
+      {InterfaceType instanceType}) {
     AstInliningState state = new AstInliningState(
-        function, returnLocal, returnType, elements, stack, localsHandler,
+        function,
+        returnLocal,
+        returnType,
+        elements,
+        stack,
+        localsHandler,
         inTryStatement,
         allInlinedFunctionsCalledOnce && isFunctionCalledOnce(function));
     inliningStack.add(state);
@@ -8634,8 +7886,8 @@
     // Setting up the state of the (AST) builder is performed even when the
     // inlined function is in IR, because the irInliner uses the [returnElement]
     // of the AST builder.
-    setupStateForInlining(
-        function, compiledArguments, instanceType: instanceType);
+    setupStateForInlining(function, compiledArguments,
+        instanceType: instanceType);
   }
 
   void leaveInlinedMethod() {
@@ -8651,8 +7903,8 @@
 
   void emitReturn(HInstruction value, ast.Node node) {
     if (inliningStack.isEmpty) {
-      closeAndGotoExit(new HReturn(value,
-          sourceInformationBuilder.buildReturn(node)));
+      closeAndGotoExit(
+          new HReturn(value, sourceInformationBuilder.buildReturn(node)));
     } else {
       localsHandler.updateLocal(returnLocal, value);
     }
@@ -8660,19 +7912,13 @@
 
   @override
   void handleTypeLiteralConstantCompounds(
-      ast.SendSet node,
-      ConstantExpression constant,
-      CompoundRhs rhs,
-      _) {
+      ast.SendSet node, ConstantExpression constant, CompoundRhs rhs, _) {
     handleTypeLiteralCompound(node);
   }
 
   @override
   void handleTypeVariableTypeLiteralCompounds(
-      ast.SendSet node,
-      TypeVariableElement typeVariable,
-      CompoundRhs rhs,
-      _) {
+      ast.SendSet node, TypeVariableElement typeVariable, CompoundRhs rhs, _) {
     handleTypeLiteralCompound(node);
   }
 
@@ -8680,43 +7926,29 @@
     generateIsDeferredLoadedCheckOfSend(node);
     ast.Identifier selector = node.selector;
     generateThrowNoSuchMethod(node, selector.source,
-                              argumentNodes: node.arguments);
+        argumentNodes: node.arguments);
   }
 
   @override
-  void visitConstantGet(
-    ast.Send node,
-    ConstantExpression constant,
-    _) {
+  void visitConstantGet(ast.Send node, ConstantExpression constant, _) {
     visitNode(node);
   }
 
   @override
-  void visitConstantInvoke(
-    ast.Send node,
-    ConstantExpression constant,
-    ast.NodeList arguments,
-    CallStructure callStreucture,
-    _) {
+  void visitConstantInvoke(ast.Send node, ConstantExpression constant,
+      ast.NodeList arguments, CallStructure callStreucture, _) {
     visitNode(node);
   }
 
   @override
   void errorUndefinedBinaryExpression(
-      ast.Send node,
-      ast.Node left,
-      ast.Operator operator,
-      ast.Node right,
-      _) {
+      ast.Send node, ast.Node left, ast.Operator operator, ast.Node right, _) {
     visitNode(node);
   }
 
   @override
   void errorUndefinedUnaryExpression(
-      ast.Send node,
-      ast.Operator operator,
-      ast.Node expression,
-      _) {
+      ast.Send node, ast.Operator operator, ast.Node expression, _) {
     visitNode(node);
   }
 
@@ -8774,9 +8006,8 @@
     TypeMask type = TypeMaskFactory.inferredTypeForSelector(
         selector, expression.instructionType, compiler);
     if (type.containsOnlyString(compiler.world)) {
-      builder.pushInvokeDynamic(
-          node, selector,
-          expression.instructionType, <HInstruction>[expression]);
+      builder.pushInvokeDynamic(node, selector, expression.instructionType,
+          <HInstruction>[expression]);
       append(builder.pop());
       return;
     }
@@ -8798,7 +8029,7 @@
   }
 
   void visitNodeList(ast.NodeList node) {
-     node.visitChildren(this);
+    node.visitChildren(this);
   }
 
   void append(HInstruction expression) {
@@ -8806,8 +8037,8 @@
   }
 
   HInstruction concat(HInstruction left, HInstruction right) {
-    HInstruction instruction = new HStringConcat(
-        left, right, builder.backend.stringType);
+    HInstruction instruction =
+        new HStringConcat(left, right, builder.backend.stringType);
     builder.add(instruction);
     return instruction;
   }
@@ -8842,22 +8073,17 @@
   final bool allowLoops;
   final bool enableUserAssertions;
 
-  InlineWeeder(this.maxInliningNodes,
-               this.useMaxInliningNodes,
-               this.allowLoops,
-               this.enableUserAssertions);
+  InlineWeeder(this.maxInliningNodes, this.useMaxInliningNodes, this.allowLoops,
+      this.enableUserAssertions);
 
-  static bool canBeInlined(FunctionElement function,
-                           int maxInliningNodes,
-                           bool useMaxInliningNodes,
-                           {bool allowLoops: false,
-                            bool enableUserAssertions: null}) {
+  static bool canBeInlined(
+      FunctionElement function, int maxInliningNodes, bool useMaxInliningNodes,
+      {bool allowLoops: false, bool enableUserAssertions: null}) {
     assert(enableUserAssertions is bool); // Ensure we passed it.
     if (function.resolvedAst.elements.containsTryStatement) return false;
 
-    InlineWeeder weeder =
-        new InlineWeeder(maxInliningNodes, useMaxInliningNodes, allowLoops,
-            enableUserAssertions);
+    InlineWeeder weeder = new InlineWeeder(maxInliningNodes,
+        useMaxInliningNodes, allowLoops, enableUserAssertions);
     ast.FunctionExpression functionExpression = function.node;
     weeder.visit(functionExpression.initializers);
     weeder.visit(functionExpression.body);
@@ -8936,8 +8162,7 @@
 
   void visitReturn(ast.Return node) {
     if (!registerNode()) return;
-    if (seenReturn
-        || identical(node.beginToken.stringValue, 'native')) {
+    if (seenReturn || identical(node.beginToken.stringValue, 'native')) {
       tooDifficult = true;
       return;
     }
@@ -8977,14 +8202,15 @@
   final bool inTryStatement;
   final bool allFunctionsCalledOnce;
 
-  AstInliningState(FunctionElement function,
-                   this.oldReturnLocal,
-                   this.oldReturnType,
-                   this.oldElements,
-                   this.oldStack,
-                   this.oldLocalsHandler,
-                   this.inTryStatement,
-                   this.allFunctionsCalledOnce)
+  AstInliningState(
+      FunctionElement function,
+      this.oldReturnLocal,
+      this.oldReturnType,
+      this.oldElements,
+      this.oldStack,
+      this.oldLocalsHandler,
+      this.inTryStatement,
+      this.allFunctionsCalledOnce)
       : super(function);
 }
 
@@ -9012,11 +8238,12 @@
     }
   }
 
-  void buildCondition(void visitCondition(),
-                      SsaBranch conditionBranch,
-                      SsaBranch thenBranch,
-                      SsaBranch elseBranch,
-                      SourceInformation sourceInformation) {
+  void buildCondition(
+      void visitCondition(),
+      SsaBranch conditionBranch,
+      SsaBranch thenBranch,
+      SsaBranch elseBranch,
+      SourceInformation sourceInformation) {
     startBranch(conditionBranch);
     visitCondition();
     checkNotAborted();
@@ -9031,7 +8258,7 @@
     bool conditionBranchLocalsCanBeReused =
         mergeLocals(conditionBranch, thenBranch, mayReuseFromLocals: true);
     mergeLocals(conditionBranch, elseBranch,
-                mayReuseFromLocals: conditionBranchLocalsCanBeReused);
+        mayReuseFromLocals: conditionBranchLocalsCanBeReused);
 
     conditionBranch.graph =
         new SubExpression(conditionBranch.block, conditionExitBlock);
@@ -9042,7 +8269,7 @@
    * return value implies that [mayReuseFromLocals] was set to [:true:].
    */
   bool mergeLocals(SsaBranch fromBranch, SsaBranch toBranch,
-                   {bool mayReuseFromLocals}) {
+      {bool mayReuseFromLocals}) {
     LocalsHandler fromLocals = fromBranch.exitLocals;
     if (toBranch.startLocals == null) {
       if (mayReuseFromLocals) {
@@ -9064,10 +8291,8 @@
     builder.open(branch.block);
   }
 
-  HInstruction buildBranch(SsaBranch branch,
-                           void visitBranch(),
-                           SsaBranch joinBranch,
-                           bool isExpression) {
+  HInstruction buildBranch(SsaBranch branch, void visitBranch(),
+      SsaBranch joinBranch, bool isExpression) {
     startBranch(branch);
     visitBranch();
     branch.graph = new SubGraph(branch.block, builder.lastOpenedBlock);
@@ -9083,10 +8308,8 @@
     return null;
   }
 
-  handleIf(void visitCondition(),
-           void visitThen(),
-           void visitElse(),
-           {SourceInformation sourceInformation}) {
+  handleIf(void visitCondition(), void visitThen(), void visitElse(),
+      {SourceInformation sourceInformation}) {
     if (visitElse == null) {
       // Make sure to have an else part to avoid a critical edge. A
       // critical edge is an edge that connects a block with multiple
@@ -9096,30 +8319,24 @@
       visitElse = () {};
     }
 
-    _handleDiamondBranch(
-        visitCondition, visitThen, visitElse, isExpression: false,
-        sourceInformation: sourceInformation);
+    _handleDiamondBranch(visitCondition, visitThen, visitElse,
+        isExpression: false, sourceInformation: sourceInformation);
   }
 
-  handleConditional(void visitCondition(),
-                    void visitThen(),
-                    void visitElse()) {
+  handleConditional(void visitCondition(), void visitThen(), void visitElse()) {
     assert(visitElse != null);
-    _handleDiamondBranch(
-        visitCondition, visitThen, visitElse, isExpression: true);
+    _handleDiamondBranch(visitCondition, visitThen, visitElse,
+        isExpression: true);
   }
 
   handleIfNull(void left(), void right()) {
     // x ?? y is transformed into: x == null ? y : x
     HInstruction leftExpression;
-    handleConditional(
-        () {
-          left();
-          leftExpression = builder.pop();
-          builder.pushCheckNull(leftExpression);
-        },
-        right,
-        () => builder.stack.add(leftExpression));
+    handleConditional(() {
+      left();
+      leftExpression = builder.pop();
+      builder.pushCheckNull(leftExpression);
+    }, right, () => builder.stack.add(leftExpression));
   }
 
   void handleLogicalAndOr(void left(), void right(), {bool isAnd}) {
@@ -9157,16 +8374,14 @@
     HConstant notIsAnd =
         builder.graph.addConstantBool(!isAnd, builder.compiler);
     JavaScriptBackend backend = builder.backend;
-    HPhi result = new HPhi.manyInputs(null,
-                                      <HInstruction>[boolifiedRight, notIsAnd],
-                                      backend.dynamicType);
+    HPhi result = new HPhi.manyInputs(
+        null, <HInstruction>[boolifiedRight, notIsAnd], backend.dynamicType);
     builder.current.addPhi(result);
     builder.stack.add(result);
   }
 
-  void handleLogicalAndOrWithLeftNode(ast.Node left,
-                                      void visitRight(),
-                                      {bool isAnd}) {
+  void handleLogicalAndOrWithLeftNode(ast.Node left, void visitRight(),
+      {bool isAnd}) {
     // This method is similar to [handleLogicalAndOr] but optimizes the case
     // where left is a logical "and" or logical "or".
     //
@@ -9182,27 +8397,24 @@
     //   result = phi(t3, false);
 
     ast.Send send = left.asSend();
-    if (send != null &&
-        (isAnd ? send.isLogicalAnd : send.isLogicalOr)) {
+    if (send != null && (isAnd ? send.isLogicalAnd : send.isLogicalOr)) {
       ast.Node newLeft = send.receiver;
       Link<ast.Node> link = send.argumentsNode.nodes;
       assert(link.tail.isEmpty);
       ast.Node middle = link.head;
       handleLogicalAndOrWithLeftNode(
           newLeft,
-          () => handleLogicalAndOrWithLeftNode(middle, visitRight,
-                                               isAnd: isAnd),
+          () =>
+              handleLogicalAndOrWithLeftNode(middle, visitRight, isAnd: isAnd),
           isAnd: isAnd);
     } else {
       handleLogicalAndOr(() => builder.visit(left), visitRight, isAnd: isAnd);
     }
   }
 
-  void _handleDiamondBranch(void visitCondition(),
-                            void visitThen(),
-                            void visitElse(),
-                            {bool isExpression,
-                             SourceInformation sourceInformation}) {
+  void _handleDiamondBranch(
+      void visitCondition(), void visitThen(), void visitElse(),
+      {bool isExpression, SourceInformation sourceInformation}) {
     SsaBranch conditionBranch = new SsaBranch(this);
     SsaBranch thenBranch = new SsaBranch(this);
     SsaBranch elseBranch = new SsaBranch(this);
@@ -9212,7 +8424,7 @@
     builder.goto(builder.current, conditionBranch.block);
 
     buildCondition(visitCondition, conditionBranch, thenBranch, elseBranch,
-                   sourceInformation);
+        sourceInformation);
     HInstruction thenValue =
         buildBranch(thenBranch, visitThen, joinBranch, isExpression);
     HInstruction elseValue =
@@ -9234,11 +8446,10 @@
       joinBlock = joinBranch.block;
     }
 
-    HIfBlockInformation info =
-        new HIfBlockInformation(
-          new HSubExpressionBlockInformation(conditionBranch.graph),
-          new HSubGraphBlockInformation(thenBranch.graph),
-          new HSubGraphBlockInformation(elseBranch.graph));
+    HIfBlockInformation info = new HIfBlockInformation(
+        new HSubExpressionBlockInformation(conditionBranch.graph),
+        new HSubGraphBlockInformation(thenBranch.graph),
+        new HSubGraphBlockInformation(elseBranch.graph));
 
     HBasicBlock conditionStartBlock = conditionBranch.block;
     conditionStartBlock.setBlockFlow(info, joinBlock);
@@ -9261,8 +8472,7 @@
     builder.push(new HVoidType(type, new TypeMask.exact(cls, classWorld)));
   }
 
-  void visitTypeVariableType(TypeVariableType type,
-                             SsaBuilder builder) {
+  void visitTypeVariableType(TypeVariableType type, SsaBuilder builder) {
     ClassElement cls = builder.backend.helpers.RuntimeType;
     TypeMask instructionType = new TypeMask.subclass(cls, classWorld);
     if (!builder.sourceElement.enclosingElement.isClosure &&
@@ -9270,9 +8480,8 @@
       HInstruction receiver = builder.localsHandler.readThis();
       builder.push(new HReadTypeVariable(type, receiver, instructionType));
     } else {
-      builder.push(
-          new HReadTypeVariable.noReceiver(
-              type, builder.addTypeVariableReference(type), instructionType));
+      builder.push(new HReadTypeVariable.noReceiver(
+          type, builder.addTypeVariableReference(type), instructionType));
     }
   }
 
@@ -9295,15 +8504,14 @@
     List<String> names = type.namedParameters;
     for (int index = 0; index < names.length; index++) {
       ast.DartString dartString = new ast.DartString.literal(names[index]);
-      inputs.add(
-          builder.graph.addConstantString(dartString, builder.compiler));
+      inputs.add(builder.graph.addConstantString(dartString, builder.compiler));
       namedParameterTypes[index].accept(this, builder);
       inputs.add(builder.pop());
     }
 
     ClassElement cls = builder.backend.helpers.RuntimeFunctionType;
-    builder.push(new HFunctionType(inputs, type,
-        new TypeMask.exact(cls, classWorld)));
+    builder.push(
+        new HFunctionType(inputs, type, new TypeMask.exact(cls, classWorld)));
   }
 
   void visitMalformedType(MalformedType type, SsaBuilder builder) {
@@ -9326,8 +8534,8 @@
     } else {
       cls = builder.backend.helpers.RuntimeTypeGeneric;
     }
-    builder.push(new HInterfaceType(inputs, type,
-        new TypeMask.exact(cls, classWorld)));
+    builder.push(
+        new HInterfaceType(inputs, type, new TypeMask.exact(cls, classWorld)));
   }
 
   void visitTypedefType(TypedefType type, SsaBuilder builder) {
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 410532c..3a5d85a 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -3,62 +3,44 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../common.dart';
-import '../common/codegen.dart' show
-    CodegenRegistry,
-    CodegenWorkItem;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
+import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
-import '../core_types.dart' show
-    CoreClasses;
+import '../core_types.dart' show CoreClasses;
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../io/source_information.dart';
 import '../js/js.dart' as js;
-import '../js_backend/backend_helpers.dart' show
-    BackendHelpers;
+import '../js_backend/backend_helpers.dart' show BackendHelpers;
 import '../js_backend/js_backend.dart';
-import '../js_emitter/js_emitter.dart' show
-    CodeEmitterTask,
-    NativeEmitter;
+import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter;
 import '../native/native.dart' as native;
 import '../types/types.dart';
-import '../universe/call_structure.dart' show
-    CallStructure;
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/use.dart' show
-    DynamicUse,
-    StaticUse,
-    TypeUse;
+import '../universe/call_structure.dart' show CallStructure;
+import '../universe/selector.dart' show Selector;
+import '../universe/use.dart' show DynamicUse, StaticUse, TypeUse;
 import '../util/util.dart';
-import '../world.dart' show
-    ClassWorld,
-    World;
+import '../world.dart' show ClassWorld, World;
 
 import 'nodes.dart';
 import 'codegen_helpers.dart';
 import 'variable_allocator.dart';
 
 class SsaCodeGeneratorTask extends CompilerTask {
-
   final JavaScriptBackend backend;
   final SourceInformationStrategy sourceInformationFactory;
 
-  SsaCodeGeneratorTask(JavaScriptBackend backend,
-                       this.sourceInformationFactory)
+  SsaCodeGeneratorTask(JavaScriptBackend backend, this.sourceInformationFactory)
       : this.backend = backend,
         super(backend.compiler);
 
   String get name => 'SSA code generator';
   NativeEmitter get nativeEmitter => backend.emitter.nativeEmitter;
 
-  js.Fun buildJavaScriptFunction(FunctionElement element,
-                                 List<js.Parameter> parameters,
-                                 js.Block body) {
+  js.Fun buildJavaScriptFunction(
+      FunctionElement element, List<js.Parameter> parameters, js.Block body) {
     js.AsyncModifier asyncModifier = element.asyncMarker.isAsync
         ? (element.asyncMarker.isYielding
             ? const js.AsyncModifier.asyncStar()
@@ -68,9 +50,9 @@
             : const js.AsyncModifier.sync());
 
     return new js.Fun(parameters, body, asyncModifier: asyncModifier)
-        .withSourceInformation(
-            sourceInformationFactory.createBuilderForContext(element)
-                .buildDeclaration(element));
+        .withSourceInformation(sourceInformationFactory
+            .createBuilderForContext(element)
+            .buildDeclaration(element));
   }
 
   js.Expression generateCode(CodegenWorkItem work, HGraph graph) {
@@ -84,9 +66,9 @@
   js.Expression generateLazyInitializer(work, graph) {
     return measure(() {
       compiler.tracer.traceGraph("codegen", graph);
-      SourceInformation sourceInformation =
-          sourceInformationFactory.createBuilderForContext(work.element)
-              .buildDeclaration(work.element);
+      SourceInformation sourceInformation = sourceInformationFactory
+          .createBuilderForContext(work.element)
+          .buildDeclaration(work.element);
       SsaCodeGenerator codegen = new SsaCodeGenerator(backend, work);
       codegen.visitGraph(graph);
       return new js.Fun(codegen.parameters, codegen.body)
@@ -177,18 +159,18 @@
   SubGraph subGraph;
 
   SsaCodeGenerator(this.backend, CodegenWorkItem work,
-                   {SourceInformation sourceInformation})
-    : this.work = work,
-      declaredLocals = new Set<String>(),
-      collectedVariableDeclarations = new Set<String>(),
-      currentContainer = new js.Block.empty(),
-      parameters = <js.Parameter>[],
-      expressionStack = <js.Expression>[],
-      oldContainerStack = <js.Block>[],
-      generateAtUseSite = new Set<HInstruction>(),
-      controlFlowOperators = new Set<HInstruction>(),
-      breakAction = new Map<Entity, EntityAction>(),
-      continueAction = new Map<Entity, EntityAction>();
+      {SourceInformation sourceInformation})
+      : this.work = work,
+        declaredLocals = new Set<String>(),
+        collectedVariableDeclarations = new Set<String>(),
+        currentContainer = new js.Block.empty(),
+        parameters = <js.Parameter>[],
+        expressionStack = <js.Expression>[],
+        oldContainerStack = <js.Block>[],
+        generateAtUseSite = new Set<HInstruction>(),
+        controlFlowOperators = new Set<HInstruction>(),
+        breakAction = new Map<Entity, EntityAction>(),
+        continueAction = new Map<Entity, EntityAction>();
 
   Compiler get compiler => backend.compiler;
 
@@ -248,8 +230,8 @@
    * If the [instruction] is not `null` it will be used to attach the position
    * to the [expression].
    */
-  pushExpressionAsStatement(js.Expression expression,
-                            SourceInformation sourceInformation) {
+  pushExpressionAsStatement(
+      js.Expression expression, SourceInformation sourceInformation) {
     pushStatement(new js.ExpressionStatement(expression)
         .withSourceInformation(sourceInformation));
   }
@@ -271,8 +253,8 @@
     new SsaTypeKnownRemover().visitGraph(graph);
     new SsaTrustedCheckRemover(compiler).visitGraph(graph);
     new SsaInstructionMerger(generateAtUseSite, compiler).visitGraph(graph);
-    new SsaConditionMerger(
-        generateAtUseSite, controlFlowOperators).visitGraph(graph);
+    new SsaConditionMerger(generateAtUseSite, controlFlowOperators)
+        .visitGraph(graph);
     SsaLiveIntervalBuilder intervalBuilder = new SsaLiveIntervalBuilder(
         compiler, generateAtUseSite, controlFlowOperators);
     intervalBuilder.visitGraph(graph);
@@ -308,8 +290,8 @@
               js.VariableInitialization initialization =
                   new js.VariableInitialization(decl, assignment.value);
               currentContainer.statements[0] = new js.ExpressionStatement(
-                  new js.VariableDeclarationList([initialization]))
-                      .withSourceInformation(sourceInformation);
+                      new js.VariableDeclarationList([initialization]))
+                  .withSourceInformation(sourceInformation);
               return;
             }
           }
@@ -324,7 +306,8 @@
             new js.VariableDeclaration(name), null));
       });
       var declarationList = new js.VariableDeclarationList(declarations)
-          .withSourceInformation(sourceInformation);;
+          .withSourceInformation(sourceInformation);
+      ;
       insertStatementAtStart(new js.ExpressionStatement(declarationList));
     }
   }
@@ -414,7 +397,7 @@
     HSubExpressionBlockInformation graph = info;
     SubExpression limits = graph.subExpression;
     return !identical(expressionType(info), TYPE_STATEMENT) &&
-       (limits.end.last is HConditionalBranch);
+        (limits.end.last is HConditionalBranch);
   }
 
   /**
@@ -492,7 +475,7 @@
     * Only visits the arguments starting at inputs[HInvoke.ARGUMENTS_OFFSET].
     */
   List<js.Expression> visitArguments(List<HInstruction> inputs,
-                                     {int start: HInvoke.ARGUMENTS_OFFSET}) {
+      {int start: HInvoke.ARGUMENTS_OFFSET}) {
     assert(inputs.length >= start);
     List<js.Expression> result = new List<js.Expression>(inputs.length - start);
     for (int i = start; i < inputs.length; i++) {
@@ -507,13 +490,19 @@
         collectedVariableDeclarations.contains(variableName);
   }
 
-  js.Expression generateExpressionAssignment(String variableName,
-                                             js.Expression value) {
+  js.Expression generateExpressionAssignment(
+      String variableName, js.Expression value) {
     if (value is js.Binary) {
       js.Binary binary = value;
       String op = binary.op;
-      if (op == '+' || op == '-' || op == '/' || op == '*' || op == '%' ||
-          op == '^' || op == '&' || op == '|') {
+      if (op == '+' ||
+          op == '-' ||
+          op == '/' ||
+          op == '*' ||
+          op == '%' ||
+          op == '^' ||
+          op == '&' ||
+          op == '|') {
         if (binary.left is js.VariableUse &&
             (binary.left as js.VariableUse).name == variableName) {
           // We know now, that we can shorten x = x + y into x += y.
@@ -531,9 +520,8 @@
         .withSourceInformation(value.sourceInformation);
   }
 
-  void assignVariable(String variableName,
-                      js.Expression value,
-                      SourceInformation sourceInformation) {
+  void assignVariable(String variableName, js.Expression value,
+      SourceInformation sourceInformation) {
     if (isGeneratingExpression) {
       // If we are in an expression then we can't declare the variable here.
       // We have no choice, but to use it and then declare it separately.
@@ -544,7 +532,7 @@
       // Otherwise if we are trying to declare inline and we are in a statement
       // then we declare (unless it was already declared).
     } else if (!shouldGroupVarDeclarations &&
-               !declaredLocals.contains(variableName)) {
+        !declaredLocals.contains(variableName)) {
       // It may be necessary to remove it from the ones to be declared later.
       collectedVariableDeclarations.remove(variableName);
       declaredLocals.add(variableName);
@@ -552,8 +540,9 @@
       js.VariableInitialization initialization =
           new js.VariableInitialization(decl, value);
 
-      pushExpressionAsStatement(new js.VariableDeclarationList(
-          <js.VariableInitialization>[initialization]),
+      pushExpressionAsStatement(
+          new js.VariableDeclarationList(
+              <js.VariableInitialization>[initialization]),
           sourceInformation);
     } else {
       // Otherwise we are just going to use it.  If we have not already declared
@@ -562,8 +551,7 @@
         collectedVariableDeclarations.add(variableName);
       }
       pushExpressionAsStatement(
-          generateExpressionAssignment(variableName, value),
-          sourceInformation);
+          generateExpressionAssignment(variableName, value), sourceInformation);
     }
   }
 
@@ -584,10 +572,11 @@
     }
 
     if (needsAssignment &&
-        !instruction.isControlFlow() && variableNames.hasName(instruction)) {
+        !instruction.isControlFlow() &&
+        variableNames.hasName(instruction)) {
       visitExpression(instruction);
       assignVariable(variableNames.getName(instruction), pop(),
-                     instruction.sourceInformation);
+          instruction.sourceInformation);
       return;
     }
 
@@ -638,16 +627,16 @@
   }
 
   void implicitContinueAsBreak(JumpTarget target) {
-    pushStatement(new js.Break(
-        backend.namer.implicitContinueLabelName(target)));
+    pushStatement(
+        new js.Break(backend.namer.implicitContinueLabelName(target)));
   }
 
   void implicitBreakWithLabel(JumpTarget target) {
     pushStatement(new js.Break(backend.namer.implicitBreakLabelName(target)));
   }
 
-  js.Statement wrapIntoLabels(js.Statement result,
-                              List<LabelDefinition> labels) {
+  js.Statement wrapIntoLabels(
+      js.Statement result, List<LabelDefinition> labels) {
     for (LabelDefinition label in labels) {
       if (label.isTarget) {
         String breakLabelString = backend.namer.breakLabelName(label);
@@ -657,7 +646,6 @@
     return result;
   }
 
-
   // The regular [visitIf] method implements the needed logic.
   bool visitIfInfo(HIfBlockInformation info) => false;
 
@@ -680,8 +668,8 @@
 
     js.Block oldContainer = currentContainer;
     for (int inputIndex = 1, statementIndex = 0;
-         inputIndex < inputs.length;
-         statementIndex++) {
+        inputIndex < inputs.length;
+        statementIndex++) {
       HBasicBlock successor = successors[inputIndex - 1];
       // If liveness analysis has figured out that this case is dead,
       // omit the code for it.
@@ -691,15 +679,15 @@
           currentContainer = new js.Block.empty();
           cases.add(new js.Case(pop(), currentContainer));
           inputIndex++;
-        } while ((successors[inputIndex - 1] == successor)
-                 && (inputIndex < inputs.length));
+        } while ((successors[inputIndex - 1] == successor) &&
+            (inputIndex < inputs.length));
 
         generateStatements(info.statements[statementIndex]);
       } else {
         // Skip all the case statements that belong to this
         // block.
-        while ((successors[inputIndex - 1] == successor)
-              && (inputIndex < inputs.length)) {
+        while ((successors[inputIndex - 1] == successor) &&
+            (inputIndex < inputs.length)) {
           ++inputIndex;
         }
       }
@@ -809,7 +797,8 @@
 
         if (isConditionExpression &&
             !hasPhiUpdates &&
-            info.updates != null && isJSExpression(info.updates)) {
+            info.updates != null &&
+            isJSExpression(info.updates)) {
           // If we have an updates graph, and it's expressible as an
           // expression, generate a for-loop.
           js.Expression jsInitialization = null;
@@ -837,8 +826,8 @@
                   }
                 } else if (expression.isCommaOperator) {
                   js.Binary binary = expression;
-                  return allSimpleAssignments(binary.left)
-                      && allSimpleAssignments(binary.right);
+                  return allSimpleAssignments(binary.left) &&
+                      allSimpleAssignments(binary.right);
                 }
                 return false;
               }
@@ -849,8 +838,8 @@
                 for (js.Assignment assignment in assignments) {
                   String id = (assignment.leftHandSide as js.VariableUse).name;
                   js.Node declaration = new js.VariableDeclaration(id);
-                  inits.add(new js.VariableInitialization(declaration,
-                                                          assignment.value));
+                  inits.add(new js.VariableInitialization(
+                      declaration, assignment.value));
                   collectedVariableDeclarations.remove(id);
                   declaredLocals.add(id);
                 }
@@ -925,7 +914,6 @@
         bool hasExitPhiUpdates = !exitAvoidContainer.statements.isEmpty;
         currentContainer = oldContainer;
 
-
         oldContainer = currentContainer;
         js.Block body = new js.Block.empty();
         // If there are phi copies in the block that jumps to the
@@ -960,10 +948,9 @@
           // If the condition is dead code, we turn the do-while into
           // a simpler while because we will never reach the condition
           // at the end of the loop anyway.
-          loop = new js.While(
-              newLiteralBool(true, info.sourceInformation),
-              unwrapStatement(body))
-                  .withSourceInformation(info.sourceInformation);
+          loop = new js.While(newLiteralBool(true, info.sourceInformation),
+                  unwrapStatement(body))
+              .withSourceInformation(info.sourceInformation);
         } else {
           if (hasPhiUpdates || hasExitPhiUpdates) {
             updateBody.statements.add(new js.Continue(null));
@@ -975,8 +962,7 @@
               exitAvoidContainer.statements.add(jsBreak);
               exitLoop = exitAvoidContainer;
             }
-            body.statements.add(
-                new js.If(jsCondition, updateBody, exitLoop));
+            body.statements.add(new js.If(jsCondition, updateBody, exitLoop));
             jsCondition = newLiteralBool(true, info.sourceInformation);
           }
           loop = new js.Do(unwrapStatement(body), jsCondition)
@@ -1142,9 +1128,8 @@
    * Sequentialize a list of conceptually parallel copies. Parallel
    * copies may contain cycles, that this method breaks.
    */
-  void sequentializeCopies(Iterable<Copy> copies,
-                           String tempName,
-                           void doAssignment(String target, String source)) {
+  void sequentializeCopies(Iterable<Copy> copies, String tempName,
+      void doAssignment(String target, String source)) {
     // Map to keep track of the current location (ie the variable that
     // holds the initial value) of a variable.
     Map<String, String> currentLocation = new Map<String, String>();
@@ -1168,7 +1153,6 @@
     }
     copies = prunedCopies;
 
-
     // For each copy, set the current location of the source to
     // itself, and the initial value of the destination to the source.
     // Add the destination to the list of copies to make.
@@ -1209,8 +1193,8 @@
       // If [current] is used as a source, and the assignment has been
       // done, we are done with this variable. Otherwise there is a
       // cycle that we break by using a temporary name.
-      if (currentLocation[current] != null
-          && current != currentLocation[initialValue[current]]) {
+      if (currentLocation[current] != null &&
+          current != currentLocation[initialValue[current]]) {
         doAssignment(tempName, current);
         currentLocation[current] = tempName;
         // [current] can now be safely updated. Copies of [current]
@@ -1227,7 +1211,7 @@
     // Map the instructions to strings.
     Iterable<Copy> copies = handler.copies.map((Copy copy) {
       return new Copy(variableNames.getName(copy.source),
-                      variableNames.getName(copy.destination));
+          variableNames.getName(copy.destination));
     });
 
     sequentializeCopies(copies, variableNames.getSwapTemp(), emitAssignment);
@@ -1251,9 +1235,8 @@
     visit(instruction);
   }
 
-  void handleInvokeBinary(HInvokeBinary node,
-                          String op,
-                          SourceInformation sourceInformation) {
+  void handleInvokeBinary(
+      HInvokeBinary node, String op, SourceInformation sourceInformation) {
     use(node.left);
     js.Expression jsLeft = pop();
     use(node.right);
@@ -1275,14 +1258,14 @@
     visitInvokeBinary(node, op);
     if (op != '>>>' && requiresUintConversion(node)) {
       push(new js.Binary(">>>", pop(), new js.LiteralNumber("0"))
-              .withSourceInformation(node.sourceInformation));
+          .withSourceInformation(node.sourceInformation));
     }
   }
 
   visitInvokeUnary(HInvokeUnary node, String op) {
     use(node.operand);
-    push(new js.Prefix(op, pop())
-        .withSourceInformation(node.sourceInformation));
+    push(
+        new js.Prefix(op, pop()).withSourceInformation(node.sourceInformation));
   }
 
   // We want the outcome of bit-operations to be positive. We use the unsigned
@@ -1295,9 +1278,9 @@
     }
   }
 
-  void emitIdentityComparison(HIdentity instruction,
-                              SourceInformation sourceInformation,
-                              {bool inverse: false}) {
+  void emitIdentityComparison(
+      HIdentity instruction, SourceInformation sourceInformation,
+      {bool inverse: false}) {
     String op = instruction.singleComparisonOp;
     HInstruction left = instruction.left;
     HInstruction right = instruction.right;
@@ -1306,20 +1289,19 @@
       js.Expression jsLeft = pop();
       use(right);
       push(new js.Binary(mapRelationalOperator(op, inverse), jsLeft, pop())
-         .withSourceInformation(sourceInformation));
+          .withSourceInformation(sourceInformation));
     } else {
       assert(NullConstantValue.JsNull == 'null');
       use(left);
       js.Binary leftEqualsNull =
           new js.Binary("==", pop(), new js.LiteralNull());
       use(right);
-      js.Binary rightEqualsNull =
-          new js.Binary(mapRelationalOperator("==", inverse),
-                        pop(), new js.LiteralNull());
+      js.Binary rightEqualsNull = new js.Binary(
+          mapRelationalOperator("==", inverse), pop(), new js.LiteralNull());
       use(right);
       use(left);
-      js.Binary tripleEq = new js.Binary(mapRelationalOperator("===", inverse),
-                                         pop(), pop());
+      js.Binary tripleEq =
+          new js.Binary(mapRelationalOperator("===", inverse), pop(), pop());
 
       push(new js.Conditional(leftEqualsNull, rightEqualsNull, tripleEq)
           .withSourceInformation(sourceInformation));
@@ -1330,15 +1312,15 @@
     emitIdentityComparison(node, node.sourceInformation, inverse: false);
   }
 
-  visitAdd(HAdd node)               => visitInvokeBinary(node, '+');
-  visitDivide(HDivide node)         => visitInvokeBinary(node, '/');
-  visitMultiply(HMultiply node)     => visitInvokeBinary(node, '*');
-  visitSubtract(HSubtract node)     => visitInvokeBinary(node, '-');
-  visitBitAnd(HBitAnd node)         => visitBitInvokeBinary(node, '&');
-  visitBitNot(HBitNot node)         => visitBitInvokeUnary(node, '~');
-  visitBitOr(HBitOr node)           => visitBitInvokeBinary(node, '|');
-  visitBitXor(HBitXor node)         => visitBitInvokeBinary(node, '^');
-  visitShiftLeft(HShiftLeft node)   => visitBitInvokeBinary(node, '<<');
+  visitAdd(HAdd node) => visitInvokeBinary(node, '+');
+  visitDivide(HDivide node) => visitInvokeBinary(node, '/');
+  visitMultiply(HMultiply node) => visitInvokeBinary(node, '*');
+  visitSubtract(HSubtract node) => visitInvokeBinary(node, '-');
+  visitBitAnd(HBitAnd node) => visitBitInvokeBinary(node, '&');
+  visitBitNot(HBitNot node) => visitBitInvokeUnary(node, '~');
+  visitBitOr(HBitOr node) => visitBitInvokeBinary(node, '|');
+  visitBitXor(HBitXor node) => visitBitInvokeBinary(node, '^');
+  visitShiftLeft(HShiftLeft node) => visitBitInvokeBinary(node, '<<');
   visitShiftRight(HShiftRight node) => visitBitInvokeBinary(node, '>>>');
 
   visitTruncatingDivide(HTruncatingDivide node) {
@@ -1356,18 +1338,18 @@
         .withSourceInformation(node.sourceInformation));
   }
 
-  visitNegate(HNegate node)             => visitInvokeUnary(node, '-');
+  visitNegate(HNegate node) => visitInvokeUnary(node, '-');
 
-  visitLess(HLess node)                 => visitRelational(node, '<');
-  visitLessEqual(HLessEqual node)       => visitRelational(node, '<=');
-  visitGreater(HGreater node)           => visitRelational(node, '>');
+  visitLess(HLess node) => visitRelational(node, '<');
+  visitLessEqual(HLessEqual node) => visitRelational(node, '<=');
+  visitGreater(HGreater node) => visitRelational(node, '>');
   visitGreaterEqual(HGreaterEqual node) => visitRelational(node, '>=');
 
   visitBoolify(HBoolify node) {
     assert(node.inputs.length == 1);
     use(node.inputs[0]);
-    push(new js.Binary('===', pop(),
-                       newLiteralBool(true, node.sourceInformation))
+    push(new js.Binary(
+            '===', pop(), newLiteralBool(true, node.sourceInformation))
         .withSourceInformation(node.sourceInformation));
   }
 
@@ -1424,9 +1406,8 @@
     if (node.label != null) {
       LabelDefinition label = node.label;
       if (!tryCallAction(breakAction, label)) {
-        pushStatement(
-            new js.Break(backend.namer.breakLabelName(label))
-                .withSourceInformation(node.sourceInformation));
+        pushStatement(new js.Break(backend.namer.breakLabelName(label))
+            .withSourceInformation(node.sourceInformation));
       }
     } else {
       JumpTarget target = node.target;
@@ -1436,8 +1417,8 @@
               new js.Break(backend.namer.implicitContinueLabelName(target))
                   .withSourceInformation(node.sourceInformation));
         } else {
-          pushStatement(new js.Break(null)
-              .withSourceInformation(node.sourceInformation));
+          pushStatement(
+              new js.Break(null).withSourceInformation(node.sourceInformation));
         }
       }
     }
@@ -1449,9 +1430,8 @@
       LabelDefinition label = node.label;
       if (!tryCallAction(continueAction, label)) {
         // TODO(floitsch): should this really be the breakLabelName?
-        pushStatement(
-            new js.Continue(backend.namer.breakLabelName(label))
-                .withSourceInformation(node.sourceInformation));
+        pushStatement(new js.Continue(backend.namer.breakLabelName(label))
+            .withSourceInformation(node.sourceInformation));
       }
     } else {
       JumpTarget target = node.target;
@@ -1493,8 +1473,8 @@
     // if (condition) i = bar();
     // Usually, the variable name is longer than 'if' and it takes up
     // more space to duplicate the name.
-    if (!atUseSite
-        && variableNames.getName(phi) == variableNames.getName(phi.inputs[1])) {
+    if (!atUseSite &&
+        variableNames.getName(phi) == variableNames.getName(phi.inputs[1])) {
       return false;
     }
     if (!atUseSite) define(phi);
@@ -1569,8 +1549,9 @@
           backend.namer.globalObjectFor(helpers.interceptorsLibrary));
       use(node.receiver);
       List<js.Expression> arguments = <js.Expression>[pop()];
-      push(js.propertyCall(isolate, name, arguments)
-           .withSourceInformation(node.sourceInformation));
+      push(js
+          .propertyCall(isolate, name, arguments)
+          .withSourceInformation(node.sourceInformation));
       registry.registerUseInterceptor();
     }
   }
@@ -1593,8 +1574,9 @@
         // Split returns a List, so we make sure the backend knows the
         // list class is instantiated.
         registry.registerInstantiatedClass(coreClasses.listClass);
-      } else if (backend.isNative(target) && target.isFunction
-                 && !node.isInterceptedCall) {
+      } else if (backend.isNative(target) &&
+          target.isFunction &&
+          !node.isInterceptedCall) {
         // A direct (i.e. non-interceptor) native call is the result of
         // optimization.  The optimization ensures any type checks or
         // conversions have been satisified.
@@ -1609,8 +1591,9 @@
     } else {
       methodLiteral = backend.namer.asName(methodName);
     }
-    push(js.propertyCall(object, methodLiteral, arguments)
-         .withSourceInformation(node.sourceInformation));
+    push(js
+        .propertyCall(object, methodLiteral, arguments)
+        .withSourceInformation(node.sourceInformation));
   }
 
   void visitInvokeConstructorBody(HInvokeConstructorBody node) {
@@ -1618,11 +1601,11 @@
     js.Expression object = pop();
     js.Name methodName = backend.namer.instanceMethodName(node.element);
     List<js.Expression> arguments = visitArguments(node.inputs);
-    push(js.propertyCall(object, methodName, arguments)
-         .withSourceInformation(node.sourceInformation));
-    registry.registerStaticUse(
-        new StaticUse.constructorBodyInvoke(
-            node.element, new CallStructure.unnamed(arguments.length)));
+    push(js
+        .propertyCall(object, methodName, arguments)
+        .withSourceInformation(node.sourceInformation));
+    registry.registerStaticUse(new StaticUse.constructorBodyInvoke(
+        node.element, new CallStructure.unnamed(arguments.length)));
   }
 
   void visitOneShotInterceptor(HOneShotInterceptor node) {
@@ -1632,7 +1615,8 @@
     Selector selector = node.selector;
     TypeMask mask = getOptimizedSelectorFor(node, selector, node.mask);
     js.Name methodName = backend.registerOneShotInterceptor(selector);
-    push(js.propertyCall(isolate, methodName, arguments)
+    push(js
+        .propertyCall(isolate, methodName, arguments)
         .withSourceInformation(node.sourceInformation));
     if (selector.isGetter) {
       registerGetter(node);
@@ -1644,9 +1628,8 @@
     registry.registerUseInterceptor();
   }
 
-  TypeMask getOptimizedSelectorFor(HInvokeDynamic node,
-                                   Selector selector,
-                                   TypeMask mask) {
+  TypeMask getOptimizedSelectorFor(
+      HInvokeDynamic node, Selector selector, TypeMask mask) {
     if (node.element != null) {
       // Create an artificial type mask to make sure only
       // [node.element] will be enqueued. We're not using the receiver
@@ -1654,14 +1637,13 @@
       // invoke dynamic knows more than the receiver.
       ClassElement enclosing = node.element.enclosingClass;
       if (compiler.world.isInstantiated(enclosing)) {
-        return new TypeMask.nonNullExact(
-            enclosing.declaration, compiler.world);
+        return new TypeMask.nonNullExact(enclosing.declaration, compiler.world);
       } else {
         // The element is mixed in so a non-null subtype mask is the most
         // precise we have.
         assert(invariant(node, compiler.world.isUsedAsMixin(enclosing),
             message: "Element ${node.element} from $enclosing expected "
-                     "to be mixed in."));
+                "to be mixed in."));
         return new TypeMask.nonNullSubtype(
             enclosing.declaration, compiler.world);
       }
@@ -1684,52 +1666,49 @@
       // may know something about the types of closures that need
       // the specific closure call method.
       Selector call = new Selector.callClosureFrom(selector);
-      registry.registerDynamicUse(
-          new DynamicUse(call, null));
+      registry.registerDynamicUse(new DynamicUse(call, null));
     }
-    registry.registerDynamicUse(
-        new DynamicUse(selector, mask));
+    registry.registerDynamicUse(new DynamicUse(selector, mask));
   }
 
   void registerSetter(HInvokeDynamic node) {
     Selector selector = node.selector;
     TypeMask mask = getOptimizedSelectorFor(node, selector, node.mask);
-    registry.registerDynamicUse(
-        new DynamicUse(selector, mask));
+    registry.registerDynamicUse(new DynamicUse(selector, mask));
   }
 
   void registerGetter(HInvokeDynamic node) {
     Selector selector = node.selector;
     TypeMask mask = getOptimizedSelectorFor(node, selector, node.mask);
-    registry.registerDynamicUse(
-        new DynamicUse(selector, mask));
+    registry.registerDynamicUse(new DynamicUse(selector, mask));
   }
 
   visitInvokeDynamicSetter(HInvokeDynamicSetter node) {
     use(node.receiver);
     js.Name name = backend.namer.invocationName(node.selector);
-    push(js.propertyCall(pop(), name, visitArguments(node.inputs))
-         .withSourceInformation(node.sourceInformation));
+    push(js
+        .propertyCall(pop(), name, visitArguments(node.inputs))
+        .withSourceInformation(node.sourceInformation));
     registerSetter(node);
   }
 
   visitInvokeDynamicGetter(HInvokeDynamicGetter node) {
     use(node.receiver);
     js.Name name = backend.namer.invocationName(node.selector);
-    push(js.propertyCall(pop(), name, visitArguments(node.inputs))
-         .withSourceInformation(node.sourceInformation));
+    push(js
+        .propertyCall(pop(), name, visitArguments(node.inputs))
+        .withSourceInformation(node.sourceInformation));
     registerGetter(node);
   }
 
   visitInvokeClosure(HInvokeClosure node) {
     Selector call = new Selector.callClosureFrom(node.selector);
     use(node.receiver);
-    push(js.propertyCall(pop(),
-                         backend.namer.invocationName(call),
-                         visitArguments(node.inputs))
-            .withSourceInformation(node.sourceInformation));
-    registry.registerDynamicUse(
-        new DynamicUse(call, null));
+    push(js
+        .propertyCall(pop(), backend.namer.invocationName(call),
+            visitArguments(node.inputs))
+        .withSourceInformation(node.sourceInformation));
+    registry.registerDynamicUse(new DynamicUse(call, null));
   }
 
   visitInvokeStatic(HInvokeStatic node) {
@@ -1763,38 +1742,34 @@
       // more optimizations available to the loop.  This form is 50% faster on
       // some small loop, almost as fast as loops with no concurrent
       // modification check.
-      push(js.js('# || (0, #)(#)',[
-          arguments[0],
-          backend.emitter.staticFunctionAccess(throwFunction),
-          arguments[1]]));
+      push(js.js('# || (0, #)(#)', [
+        arguments[0],
+        backend.emitter.staticFunctionAccess(throwFunction),
+        arguments[1]
+      ]));
     } else {
       CallStructure callStructure = new CallStructure.unnamed(arguments.length);
-      registry.registerStaticUse(
-          element.isConstructor
-            ? new StaticUse.constructorInvoke(element, callStructure)
-            : new StaticUse.staticInvoke(element, callStructure));
+      registry.registerStaticUse(element.isConstructor
+          ? new StaticUse.constructorInvoke(element, callStructure)
+          : new StaticUse.staticInvoke(element, callStructure));
       push(backend.emitter.staticFunctionAccess(element));
       push(new js.Call(pop(), arguments,
           sourceInformation: node.sourceInformation));
     }
-
   }
 
   visitInvokeSuper(HInvokeSuper node) {
     Element superElement = node.element;
     ClassElement superClass = superElement.enclosingClass;
     if (superElement.isField) {
-      js.Name fieldName =
-          backend.namer.instanceFieldPropertyName(superElement);
+      js.Name fieldName = backend.namer.instanceFieldPropertyName(superElement);
       use(node.inputs[0]);
-      js.PropertyAccess access =
-          new js.PropertyAccess(pop(), fieldName)
-              .withSourceInformation(node.sourceInformation);
+      js.PropertyAccess access = new js.PropertyAccess(pop(), fieldName)
+          .withSourceInformation(node.sourceInformation);
       if (node.isSetter) {
-        registry.registerStaticUse(
-            superElement.isSetter
-                ? new StaticUse.superSetterSet(superElement)
-                : new StaticUse.superFieldSet(superElement));
+        registry.registerStaticUse(superElement.isSetter
+            ? new StaticUse.superSetterSet(superElement)
+            : new StaticUse.superFieldSet(superElement));
         use(node.value);
         push(new js.Assignment(access, pop())
             .withSourceInformation(node.sourceInformation));
@@ -1811,33 +1786,31 @@
           // will be created, and that this tear-off must bypass ordinary
           // dispatch to ensure the super method is invoked.
           FunctionElement helper = backend.helpers.closureFromTearOff;
-          registry.registerStaticUse(new StaticUse.staticInvoke(helper,
-                new CallStructure.unnamed(helper.parameters.length)));
+          registry.registerStaticUse(new StaticUse.staticInvoke(
+              helper, new CallStructure.unnamed(helper.parameters.length)));
           registry.registerStaticUse(new StaticUse.superTearOff(node.element));
           methodName = backend.namer.invocationName(selector);
         } else {
           methodName = backend.namer.instanceMethodName(superElement);
         }
-        registry.registerStaticUse(
-            new StaticUse.superInvoke(
-                superElement,
-                new CallStructure.unnamed(node.inputs.length)));
-        push(js.js('#.#.call(#)',
-                   [backend.emitter.prototypeAccess(superClass,
-                                                    hasBeenInstantiated: true),
-                    methodName, visitArguments(node.inputs, start: 0)])
-                .withSourceInformation(node.sourceInformation));
+        registry.registerStaticUse(new StaticUse.superInvoke(
+            superElement, new CallStructure.unnamed(node.inputs.length)));
+        push(js.js('#.#.call(#)', [
+          backend.emitter
+              .prototypeAccess(superClass, hasBeenInstantiated: true),
+          methodName,
+          visitArguments(node.inputs, start: 0)
+        ]).withSourceInformation(node.sourceInformation));
       } else {
         use(node.receiver);
-        registry.registerStaticUse(
-            new StaticUse.superInvoke(
-                superElement,
-                new CallStructure.unnamed(node.inputs.length - 1)));
-        push(
-          js.js('#.#(#)', [
-            pop(), backend.namer.aliasedSuperMemberPropertyName(superElement),
-            visitArguments(node.inputs, start: 1)]) // Skip receiver argument.
-              .withSourceInformation(node.sourceInformation));
+        registry.registerStaticUse(new StaticUse.superInvoke(
+            superElement, new CallStructure.unnamed(node.inputs.length - 1)));
+        push(js.js('#.#(#)', [
+          pop(),
+          backend.namer.aliasedSuperMemberPropertyName(superElement),
+          visitArguments(node.inputs, start: 1)
+        ]) // Skip receiver argument.
+            .withSourceInformation(node.sourceInformation));
       }
     }
   }
@@ -1902,9 +1875,8 @@
 
   visitLocalSet(HLocalSet node) {
     use(node.value);
-    assignVariable(variableNames.getName(node.receiver),
-                   pop(),
-                   node.sourceInformation);
+    assignVariable(
+        variableNames.getName(node.receiver), pop(), node.sourceInformation);
   }
 
   void registerForeignTypes(HForeign node) {
@@ -1921,7 +1893,8 @@
         use(inputs[i]);
         interpolatedExpressions.add(pop());
       }
-      pushStatement(node.codeTemplate.instantiate(interpolatedExpressions)
+      pushStatement(node.codeTemplate
+          .instantiate(interpolatedExpressions)
           .withSourceInformation(node.sourceInformation));
     } else {
       List<js.Expression> interpolatedExpressions = <js.Expression>[];
@@ -1929,7 +1902,8 @@
         use(inputs[i]);
         interpolatedExpressions.add(pop());
       }
-      push(node.codeTemplate.instantiate(interpolatedExpressions)
+      push(node.codeTemplate
+          .instantiate(interpolatedExpressions)
           .withSourceInformation(node.sourceInformation));
     }
 
@@ -1958,24 +1932,22 @@
     });
   }
 
-  js.Expression newLiteralBool(bool value,
-                               SourceInformation sourceInformation) {
+  js.Expression newLiteralBool(
+      bool value, SourceInformation sourceInformation) {
     if (compiler.options.enableMinification) {
       // Use !0 for true, !1 for false.
       return new js.Prefix("!", new js.LiteralNumber(value ? "0" : "1"))
           .withSourceInformation(sourceInformation);
     } else {
-      return new js.LiteralBool(value)
-          .withSourceInformation(sourceInformation);
+      return new js.LiteralBool(value).withSourceInformation(sourceInformation);
     }
   }
 
-  void generateConstant(ConstantValue constant,
-                        SourceInformation sourceInformation) {
+  void generateConstant(
+      ConstantValue constant, SourceInformation sourceInformation) {
     if (constant.isFunction) {
       FunctionConstantValue function = constant;
-      registry.registerStaticUse(
-          new StaticUse.staticTearOff(function.element));
+      registry.registerStaticUse(new StaticUse.staticTearOff(function.element));
     }
     if (constant.isType) {
       // If the type is a web component, we need to ensure the constructors are
@@ -2008,21 +1980,21 @@
 
   static String mapRelationalOperator(String op, bool inverse) {
     Map<String, String> inverseOperator = const <String, String>{
-      "==" : "!=",
-      "!=" : "==",
+      "==": "!=",
+      "!=": "==",
       "===": "!==",
       "!==": "===",
-      "<"  : ">=",
-      "<=" : ">",
-      ">"  : "<=",
-      ">=" : "<"
+      "<": ">=",
+      "<=": ">",
+      ">": "<=",
+      ">=": "<"
     };
     return inverse ? inverseOperator[op] : op;
   }
 
   void generateNot(HInstruction input, SourceInformation sourceInformation) {
     bool canGenerateOptimizedComparison(HInstruction instruction) {
-      if (instruction is !HRelational) return false;
+      if (instruction is! HRelational) return false;
 
       HRelational relational = instruction;
 
@@ -2050,8 +2022,8 @@
         emitIdentityComparison(input, sourceInformation, inverse: true);
       } else if (input is HBoolify) {
         use(input.inputs[0]);
-        push(new js.Binary("!==", pop(),
-                           newLiteralBool(true, input.sourceInformation))
+        push(new js.Binary(
+                "!==", pop(), newLiteralBool(true, input.sourceInformation))
             .withSourceInformation(sourceInformation));
       } else if (canGenerateOptimizedComparison(input)) {
         HRelational relational = input;
@@ -2117,12 +2089,12 @@
     assert(node.inputs.length == 1);
     HInstruction input = node.inputs[0];
     if (input.isConstantNull()) {
-      pushStatement(new js.Return()
-          .withSourceInformation(node.sourceInformation));
+      pushStatement(
+          new js.Return().withSourceInformation(node.sourceInformation));
     } else {
       use(node.inputs[0]);
-      pushStatement(new js.Return(pop())
-          .withSourceInformation(node.sourceInformation));
+      pushStatement(
+          new js.Return(pop()).withSourceInformation(node.sourceInformation));
     }
   }
 
@@ -2133,8 +2105,8 @@
   visitThrow(HThrow node) {
     if (node.isRethrow) {
       use(node.inputs[0]);
-      pushStatement(new js.Throw(pop())
-          .withSourceInformation(node.sourceInformation));
+      pushStatement(
+          new js.Throw(pop()).withSourceInformation(node.sourceInformation));
     } else {
       generateThrowWithHelper(helpers.wrapExceptionHelper, node.inputs[0],
           sourceInformation: node.sourceInformation);
@@ -2143,8 +2115,7 @@
 
   visitAwait(HAwait node) {
     use(node.inputs[0]);
-    push(new js.Await(pop())
-        .withSourceInformation(node.sourceInformation));
+    push(new js.Await(pop()).withSourceInformation(node.sourceInformation));
   }
 
   visitYield(HYield node) {
@@ -2191,9 +2162,7 @@
       assert(over != null || under != null);
       js.Expression underOver = under == null
           ? over
-          : over == null
-              ? under
-              : new js.Binary("||", under, over);
+          : over == null ? under : new js.Binary("||", under, over);
       js.Statement thenBody = new js.Block.empty();
       js.Block oldContainer = currentContainer;
       currentContainer = thenBody;
@@ -2204,13 +2173,13 @@
       pushStatement(new js.If.noElse(underOver, thenBody)
           .withSourceInformation(node.sourceInformation));
     } else {
-      generateThrowWithHelper(helpers.throwIndexOutOfRangeException,
-          [node.array, node.index]);
+      generateThrowWithHelper(
+          helpers.throwIndexOutOfRangeException, [node.array, node.index]);
     }
   }
 
   void generateThrowWithHelper(Element helper, argument,
-                               {SourceInformation sourceInformation}) {
+      {SourceInformation sourceInformation}) {
     js.Expression jsHelper = backend.emitter.staticFunctionAccess(helper);
     List arguments = [];
     var location;
@@ -2225,17 +2194,16 @@
       use(argument);
       arguments.add(pop());
     }
-    registry.registerStaticUse(
-        new StaticUse.staticInvoke(
-            helper, new CallStructure.unnamed(arguments.length)));
+    registry.registerStaticUse(new StaticUse.staticInvoke(
+        helper, new CallStructure.unnamed(arguments.length)));
     js.Call value = new js.Call(jsHelper, arguments.toList(growable: false),
         sourceInformation: sourceInformation);
     // BUG(4906): Using throw/return here adds to the size of the generated code
     // but it has the advantage of explicitly telling the JS engine that
     // this code path will terminate abruptly. Needs more work.
     if (helper == helpers.wrapExceptionHelper) {
-      pushStatement(new js.Throw(value)
-          .withSourceInformation(sourceInformation));
+      pushStatement(
+          new js.Throw(value).withSourceInformation(sourceInformation));
     } else {
       Element element = work.element;
       if (element is FunctionElement && element.asyncMarker.isYielding) {
@@ -2245,8 +2213,8 @@
         pushStatement(new js.ExpressionStatement(value)
             .withSourceInformation(sourceInformation));
       } else {
-        pushStatement(new js.Return(value)
-            .withSourceInformation(sourceInformation));
+        pushStatement(
+            new js.Return(value).withSourceInformation(sourceInformation));
       }
     }
   }
@@ -2273,22 +2241,21 @@
     Element element = node.element;
     assert(element.isFunction || element.isField);
     if (element.isFunction) {
-      push(backend.emitter.isolateStaticClosureAccess(element)
-           .withSourceInformation(node.sourceInformation));
-      registry.registerStaticUse(
-          new StaticUse.staticTearOff(element));
+      push(backend.emitter
+          .isolateStaticClosureAccess(element)
+          .withSourceInformation(node.sourceInformation));
+      registry.registerStaticUse(new StaticUse.staticTearOff(element));
     } else {
-      push(backend.emitter.staticFieldAccess(element)
-           .withSourceInformation(node.sourceInformation));
-      registry.registerStaticUse(
-          new StaticUse.staticGet(element));
+      push(backend.emitter
+          .staticFieldAccess(element)
+          .withSourceInformation(node.sourceInformation));
+      registry.registerStaticUse(new StaticUse.staticGet(element));
     }
   }
 
   void visitLazyStatic(HLazyStatic node) {
     Element element = node.element;
-    registry.registerStaticUse(
-        new StaticUse.staticInit(element));
+    registry.registerStaticUse(new StaticUse.staticInit(element));
     js.Expression lazyGetter =
         backend.emitter.isolateLazyInitializerAccess(element);
     js.Call call = new js.Call(lazyGetter, <js.Expression>[],
@@ -2297,8 +2264,7 @@
   }
 
   void visitStaticStore(HStaticStore node) {
-    registry.registerStaticUse(
-        new StaticUse.staticSet(node.element));
+    registry.registerStaticUse(new StaticUse.staticSet(node.element));
     js.Node variable = backend.emitter.staticFieldAccess(node.element);
     use(node.inputs[0]);
     push(new js.Assignment(variable, pop())
@@ -2321,9 +2287,9 @@
       // JavaScript's + operator with a string for the left operand will convert
       // the right operand to a string, and the conversion result is correct.
       use(input);
-      if (node.usedBy.length == 1
-          && node.usedBy[0] is HStringConcat
-          && node.usedBy[0].inputs[1] == node) {
+      if (node.usedBy.length == 1 &&
+          node.usedBy[0] is HStringConcat &&
+          node.usedBy[0].inputs[1] == node) {
         // The context is already <string> + value.
       } else {
         // Force an empty string for the first operand.
@@ -2338,7 +2304,7 @@
           backend.emitter.staticFunctionAccess(convertToString);
       use(input);
       push(new js.Call(jsHelper, <js.Expression>[pop()],
-                       sourceInformation: node.sourceInformation));
+          sourceInformation: node.sourceInformation));
     }
   }
 
@@ -2382,46 +2348,46 @@
     push(new js.Binary(cmp, left, or0));
   }
 
-  void checkBigInt(HInstruction input, String cmp,
-                   SourceInformation sourceInformation) {
+  void checkBigInt(
+      HInstruction input, String cmp, SourceInformation sourceInformation) {
     use(input);
     js.Expression left = pop();
     use(input);
     js.Expression right = pop();
     // TODO(4984): Deal with infinity and -0.0.
-    push(js.js('Math.floor(#) $cmp #', <js.Expression>[left, right])
-            .withSourceInformation(sourceInformation));
+    push(js.js('Math.floor(#) $cmp #',
+        <js.Expression>[left, right]).withSourceInformation(sourceInformation));
   }
 
   void checkTypeOf(HInstruction input, String cmp, String typeName,
-                   SourceInformation sourceInformation) {
+      SourceInformation sourceInformation) {
     use(input);
     js.Expression typeOf = new js.Prefix("typeof", pop());
     push(new js.Binary(cmp, typeOf, js.string(typeName)));
   }
 
-  void checkNum(HInstruction input, String cmp,
-                SourceInformation sourceInformation) {
+  void checkNum(
+      HInstruction input, String cmp, SourceInformation sourceInformation) {
     return checkTypeOf(input, cmp, 'number', sourceInformation);
   }
 
-  void checkDouble(HInstruction input, String cmp,
-                   SourceInformation sourceInformation) {
+  void checkDouble(
+      HInstruction input, String cmp, SourceInformation sourceInformation) {
     return checkNum(input, cmp, sourceInformation);
   }
 
-  void checkString(HInstruction input, String cmp,
-                   SourceInformation sourceInformation) {
+  void checkString(
+      HInstruction input, String cmp, SourceInformation sourceInformation) {
     return checkTypeOf(input, cmp, 'string', sourceInformation);
   }
 
-  void checkBool(HInstruction input, String cmp,
-                 SourceInformation sourceInformation) {
+  void checkBool(
+      HInstruction input, String cmp, SourceInformation sourceInformation) {
     return checkTypeOf(input, cmp, 'boolean', sourceInformation);
   }
 
-  void checkObject(HInstruction input, String cmp,
-                   SourceInformation sourceInformation) {
+  void checkObject(
+      HInstruction input, String cmp, SourceInformation sourceInformation) {
     assert(NullConstantValue.JsNull == 'null');
     if (cmp == "===") {
       checkTypeOf(input, '===', 'object', sourceInformation);
@@ -2487,13 +2453,12 @@
     push(new js.Binary('!=', pop(), new js.LiteralNull()));
   }
 
-  void checkType(HInstruction input, HInstruction interceptor,
-                 DartType type,
-                 SourceInformation sourceInformation,
-                 {bool negative: false}) {
+  void checkType(HInstruction input, HInstruction interceptor, DartType type,
+      SourceInformation sourceInformation,
+      {bool negative: false}) {
     Element element = type.element;
     if (element == helpers.jsArrayClass) {
-      checkArray(input, negative ? '!==': '===');
+      checkArray(input, negative ? '!==' : '===');
       return;
     } else if (element == helpers.jsMutableArrayClass) {
       if (negative) {
@@ -2526,15 +2491,15 @@
     }
     if (interceptor != null) {
       checkTypeViaProperty(interceptor, type, sourceInformation,
-                           negative: negative);
+          negative: negative);
     } else {
       checkTypeViaProperty(input, type, sourceInformation, negative: negative);
     }
   }
 
-  void checkTypeViaProperty(HInstruction input, DartType type,
-                            SourceInformation sourceInformation,
-                            {bool negative: false}) {
+  void checkTypeViaProperty(
+      HInstruction input, DartType type, SourceInformation sourceInformation,
+      {bool negative: false}) {
     registry.registerTypeUse(new TypeUse.isCheck(type));
 
     use(input);
@@ -2543,18 +2508,15 @@
         new js.PropertyAccess(pop(), backend.namer.operatorIsType(type))
             .withSourceInformation(sourceInformation);
     // We always negate at least once so that the result is boolified.
-    push(new js.Prefix('!', field)
-        .withSourceInformation(sourceInformation));
+    push(new js.Prefix('!', field).withSourceInformation(sourceInformation));
     // If the result is not negated, put another '!' in front.
     if (!negative) {
-      push(new js.Prefix('!', pop())
-          .withSourceInformation(sourceInformation));
+      push(new js.Prefix('!', pop()).withSourceInformation(sourceInformation));
     }
   }
 
   void checkTypeViaInstanceof(
-      HInstruction input, DartType type,
-      SourceInformation sourceInformation,
+      HInstruction input, DartType type, SourceInformation sourceInformation,
       {bool negative: false}) {
     registry.registerTypeUse(new TypeUse.isCheck(type));
 
@@ -2562,23 +2524,23 @@
 
     js.Expression jsClassReference =
         backend.emitter.constructorAccess(type.element);
-    push(js.js('# instanceof #', [pop(), jsClassReference])
-            .withSourceInformation(sourceInformation));
+    push(js.js('# instanceof #',
+        [pop(), jsClassReference]).withSourceInformation(sourceInformation));
     if (negative) {
-      push(new js.Prefix('!', pop())
-          .withSourceInformation(sourceInformation));
+      push(new js.Prefix('!', pop()).withSourceInformation(sourceInformation));
     }
     registry.registerInstantiation(type);
   }
 
-  void handleNumberOrStringSupertypeCheck(HInstruction input,
-                                          HInstruction interceptor,
-                                          DartType type,
-                                          SourceInformation sourceInformation,
-                                          {bool negative: false}) {
+  void handleNumberOrStringSupertypeCheck(
+      HInstruction input,
+      HInstruction interceptor,
+      DartType type,
+      SourceInformation sourceInformation,
+      {bool negative: false}) {
     assert(!identical(type.element, coreClasses.listClass) &&
-           !Elements.isListSupertype(type.element, compiler) &&
-           !Elements.isStringOnlySupertype(type.element, compiler));
+        !Elements.isListSupertype(type.element, compiler) &&
+        !Elements.isStringOnlySupertype(type.element, compiler));
     String relation = negative ? '!==' : '===';
     checkNum(input, relation, sourceInformation);
     js.Expression numberTest = pop();
@@ -2589,22 +2551,21 @@
     checkType(input, interceptor, type, sourceInformation, negative: negative);
     String combiner = negative ? '&&' : '||';
     String combiner2 = negative ? '||' : '&&';
-    push(new js.Binary(combiner,
-                       new js.Binary(combiner, numberTest, stringTest)
-                          .withSourceInformation(sourceInformation),
-                       new js.Binary(combiner2, objectTest, pop())
-                          .withSourceInformation(sourceInformation))
+    push(new js.Binary(
+            combiner,
+            new js.Binary(combiner, numberTest, stringTest)
+                .withSourceInformation(sourceInformation),
+            new js.Binary(combiner2, objectTest, pop())
+                .withSourceInformation(sourceInformation))
         .withSourceInformation(sourceInformation));
   }
 
-  void handleStringSupertypeCheck(HInstruction input,
-                                  HInstruction interceptor,
-                                  DartType type,
-                                  SourceInformation sourceInformation,
-                                  {bool negative: false}) {
-    assert(!identical(type.element, coreClasses.listClass)
-           && !Elements.isListSupertype(type.element, compiler)
-           && !Elements.isNumberOrStringSupertype(type.element, compiler));
+  void handleStringSupertypeCheck(HInstruction input, HInstruction interceptor,
+      DartType type, SourceInformation sourceInformation,
+      {bool negative: false}) {
+    assert(!identical(type.element, coreClasses.listClass) &&
+        !Elements.isListSupertype(type.element, compiler) &&
+        !Elements.isNumberOrStringSupertype(type.element, compiler));
     String relation = negative ? '!==' : '===';
     checkString(input, relation, sourceInformation);
     js.Expression stringTest = pop();
@@ -2612,19 +2573,16 @@
     js.Expression objectTest = pop();
     checkType(input, interceptor, type, sourceInformation, negative: negative);
     String combiner = negative ? '||' : '&&';
-    push(new js.Binary(negative ? '&&' : '||',
-                       stringTest,
-                       new js.Binary(combiner, objectTest, pop())));
+    push(new js.Binary(negative ? '&&' : '||', stringTest,
+        new js.Binary(combiner, objectTest, pop())));
   }
 
-  void handleListOrSupertypeCheck(HInstruction input,
-                                  HInstruction interceptor,
-                                  DartType type,
-                                  SourceInformation sourceInformation,
-                                  { bool negative: false }) {
-    assert(!identical(type.element, coreClasses.stringClass)
-           && !Elements.isStringOnlySupertype(type.element, compiler)
-           && !Elements.isNumberOrStringSupertype(type.element, compiler));
+  void handleListOrSupertypeCheck(HInstruction input, HInstruction interceptor,
+      DartType type, SourceInformation sourceInformation,
+      {bool negative: false}) {
+    assert(!identical(type.element, coreClasses.stringClass) &&
+        !Elements.isStringOnlySupertype(type.element, compiler) &&
+        !Elements.isNumberOrStringSupertype(type.element, compiler));
     String relation = negative ? '!==' : '===';
     checkObject(input, relation, sourceInformation);
     js.Expression objectTest = pop();
@@ -2632,9 +2590,8 @@
     js.Expression arrayTest = pop();
     checkType(input, interceptor, type, sourceInformation, negative: negative);
     String combiner = negative ? '&&' : '||';
-    push(new js.Binary(negative ? '||' : '&&',
-                       objectTest,
-                       new js.Binary(combiner, arrayTest, pop()))
+    push(new js.Binary(negative ? '||' : '&&', objectTest,
+            new js.Binary(combiner, arrayTest, pop()))
         .withSourceInformation(sourceInformation));
   }
 
@@ -2646,7 +2603,7 @@
     emitIsViaInterceptor(node, node.sourceInformation, negative: false);
   }
 
-  void emitIs(HIs node, String relation, SourceInformation sourceInformation)  {
+  void emitIs(HIs node, String relation, SourceInformation sourceInformation) {
     DartType type = node.typeExpression;
     registry.registerTypeUse(new TypeUse.isCheck(type));
     HInstruction input = node.expression;
@@ -2693,53 +2650,44 @@
             .withSourceInformation(sourceInformation));
       } else if (node.useInstanceOf) {
         assert(interceptor == null);
-        checkTypeViaInstanceof(input, type,
-                               sourceInformation,
-                               negative: negative);
+        checkTypeViaInstanceof(input, type, sourceInformation,
+            negative: negative);
       } else if (Elements.isNumberOrStringSupertype(element, compiler)) {
         handleNumberOrStringSupertypeCheck(
-            input, interceptor, type,
-            sourceInformation,
+            input, interceptor, type, sourceInformation,
             negative: negative);
       } else if (Elements.isStringOnlySupertype(element, compiler)) {
-        handleStringSupertypeCheck(
-            input, interceptor, type,
-            sourceInformation,
+        handleStringSupertypeCheck(input, interceptor, type, sourceInformation,
             negative: negative);
       } else if (identical(element, coreClasses.listClass) ||
-                 Elements.isListSupertype(element, compiler)) {
-        handleListOrSupertypeCheck(
-            input, interceptor, type,
-            sourceInformation,
+          Elements.isListSupertype(element, compiler)) {
+        handleListOrSupertypeCheck(input, interceptor, type, sourceInformation,
             negative: negative);
       } else if (type.isFunctionType) {
-        checkType(input, interceptor, type,
-                  sourceInformation,
-                  negative: negative);
-      } else if ((input.canBePrimitive(compiler)
-                  && !input.canBePrimitiveArray(compiler))
-                 || input.canBeNull()) {
+        checkType(input, interceptor, type, sourceInformation,
+            negative: negative);
+      } else if ((input.canBePrimitive(compiler) &&
+              !input.canBePrimitiveArray(compiler)) ||
+          input.canBeNull()) {
         checkObject(input, relation, node.sourceInformation);
         js.Expression objectTest = pop();
-        checkType(input, interceptor, type,
-                  sourceInformation,
-                  negative: negative);
+        checkType(input, interceptor, type, sourceInformation,
+            negative: negative);
         push(new js.Binary(negative ? '||' : '&&', objectTest, pop())
             .withSourceInformation(sourceInformation));
       } else {
-        checkType(input, interceptor, type,
-                  sourceInformation,
-                  negative: negative);
+        checkType(input, interceptor, type, sourceInformation,
+            negative: negative);
       }
     }
   }
 
-  void emitIsViaInterceptor(HIsViaInterceptor node,
-                            SourceInformation sourceInformation,
-                            {bool negative: false}) {
-    checkTypeViaProperty(node.interceptor, node.typeExpression,
-                         sourceInformation,
-                         negative: negative);
+  void emitIsViaInterceptor(
+      HIsViaInterceptor node, SourceInformation sourceInformation,
+      {bool negative: false}) {
+    checkTypeViaProperty(
+        node.interceptor, node.typeExpression, sourceInformation,
+        negative: negative);
   }
 
   js.Expression generateReceiverOrArgumentTypeTest(
@@ -2752,10 +2700,10 @@
     // typeof check so the null check is cheaper.
     bool isIntCheck = checkedType.containsOnlyInt(classWorld);
     bool turnIntoNumCheck = isIntCheck && input.isIntegerOrNull(compiler);
-    bool turnIntoNullCheck = !turnIntoNumCheck
-        && (checkedType.nullable() == inputType)
-        && (isIntCheck
-            || checkedType.satisfies(helpers.jsIndexableClass, classWorld));
+    bool turnIntoNullCheck = !turnIntoNumCheck &&
+        (checkedType.nullable() == inputType) &&
+        (isIntCheck ||
+            checkedType.satisfies(helpers.jsIndexableClass, classWorld));
 
     if (turnIntoNullCheck) {
       use(input);
@@ -2788,8 +2736,8 @@
       // An int check if the input is not int or null, is not
       // sufficient for doing an argument or receiver check.
       assert(compiler.options.trustTypeAnnotations ||
-             !node.checkedType.containsOnlyInt(classWorld) ||
-             node.checkedInput.isIntegerOrNull(compiler));
+          !node.checkedType.containsOnlyInt(classWorld) ||
+          node.checkedInput.isIntegerOrNull(compiler));
       js.Expression test = generateReceiverOrArgumentTypeTest(
           node.checkedInput, node.checkedType);
       js.Block oldContainer = currentContainer;
@@ -2797,8 +2745,7 @@
       currentContainer = body;
       if (node.isArgumentTypeCheck) {
         generateThrowWithHelper(
-            helpers.throwIllegalArgumentException,
-            node.checkedInput,
+            helpers.throwIllegalArgumentException, node.checkedInput,
             sourceInformation: node.sourceInformation);
       } else if (node.isReceiverTypeCheck) {
         use(node.checkedInput);
@@ -2827,8 +2774,7 @@
 
     CheckedModeHelper helper;
     if (node.isBooleanConversionCheck) {
-      helper =
-          const CheckedModeHelper('boolConversionCheck');
+      helper = const CheckedModeHelper('boolConversionCheck');
     } else {
       helper =
           backend.getCheckedModeHelper(type, typeCast: node.isCastTypeCheck);
@@ -2884,9 +2830,10 @@
       push(js.js('#(#)', [accessHelper('buildFunctionType'), arguments]));
     } else {
       var arguments = [
-          returnType,
-          new js.ArrayInitializer(parameterTypes),
-          new js.ObjectInitializer(namedParameters)];
+        returnType,
+        new js.ArrayInitializer(parameterTypes),
+        new js.ObjectInitializer(namedParameters)
+      ];
       push(js.js('#(#)', [accessHelper('buildNamedFunctionType'), arguments]));
     }
   }
@@ -2902,19 +2849,18 @@
       if (backend.isInterceptorClass(element.enclosingClass)) {
         int index = element.index;
         js.Expression receiver = pop();
-        js.Expression helper = backend.emitter
-            .staticFunctionAccess(helperElement);
+        js.Expression helper =
+            backend.emitter.staticFunctionAccess(helperElement);
         push(js.js(r'#(#.$builtinTypeInfo && #.$builtinTypeInfo[#])',
-                [helper, receiver, receiver, js.js.number(index)]));
+            [helper, receiver, receiver, js.js.number(index)]));
       } else {
         backend.emitter.registerReadTypeVariable(element);
-        push(js.js('#.#()',
-                [pop(), backend.namer.nameForReadTypeVariable(element)]));
+        push(js.js(
+            '#.#()', [pop(), backend.namer.nameForReadTypeVariable(element)]));
       }
     } else {
-      push(js.js('#(#)', [
-          backend.emitter.staticFunctionAccess(helperElement),
-          pop()]));
+      push(js.js('#(#)',
+          [backend.emitter.staticFunctionAccess(helperElement), pop()]));
     }
   }
 
@@ -2948,9 +2894,8 @@
       // For mocked-up tests.
       return js.js('(void 0).$name');
     }
-    registry.registerStaticUse(
-        new StaticUse.staticInvoke(helper,
-            new CallStructure.unnamed(argumentCount)));
+    registry.registerStaticUse(new StaticUse.staticInvoke(
+        helper, new CallStructure.unnamed(argumentCount)));
     return backend.emitter.staticFunctionAccess(helper);
   }
 
diff --git a/pkg/compiler/lib/src/ssa/codegen_helpers.dart b/pkg/compiler/lib/src/ssa/codegen_helpers.dart
index beb4f42..254e577 100644
--- a/pkg/compiler/lib/src/ssa/codegen_helpers.dart
+++ b/pkg/compiler/lib/src/ssa/codegen_helpers.dart
@@ -67,8 +67,8 @@
     if (node.kind == HIs.RAW_CHECK) {
       HInstruction interceptor = node.interceptor;
       if (interceptor != null) {
-        return new HIsViaInterceptor(node.typeExpression, interceptor,
-                                     backend.boolType);
+        return new HIsViaInterceptor(
+            node.typeExpression, interceptor, backend.boolType);
       }
     }
     return node;
@@ -87,8 +87,7 @@
     if (leftType.isNullable && rightType.isNullable) {
       if (left.isConstantNull() ||
           right.isConstantNull() ||
-          (left.isPrimitive(compiler) &&
-           leftType == rightType)) {
+          (left.isPrimitive(compiler) && leftType == rightType)) {
         return '==';
       }
       return null;
@@ -193,14 +192,12 @@
             return replaceOp(rmw, left);
           } else {
             HInstruction rmw = new HReadModifyWrite.assignOp(
-                setter.element,
-                assignOp,
-                receiver, right, op.instructionType);
+                setter.element, assignOp, receiver, right, op.instructionType);
             return replaceOp(rmw, left);
           }
         } else if (op.usedBy.length == 1 &&
-                   right is HConstant &&
-                   right.constant.isOne) {
+            right is HConstant &&
+            right.constant.isOne) {
           HInstruction rmw = new HReadModifyWrite.postOp(
               setter.element, incrementOp, receiver, op.instructionType);
           block.addAfter(left, rmw);
@@ -214,14 +211,12 @@
       return noMatchingRead();
     }
 
-    HInstruction simple(String assignOp,
-                        HInstruction left, HInstruction right) {
+    HInstruction simple(
+        String assignOp, HInstruction left, HInstruction right) {
       if (isMatchingRead(left)) {
         if (left.usedBy.length == 1) {
           HInstruction rmw = new HReadModifyWrite.assignOp(
-              setter.element,
-              assignOp,
-              receiver, right, op.instructionType);
+              setter.element, assignOp, receiver, right, op.instructionType);
           return replaceOp(rmw, left);
         }
       }
@@ -261,7 +256,6 @@
  * analysis easier.
  */
 class SsaTypeKnownRemover extends HBaseVisitor {
-
   void visitGraph(HGraph graph) {
     visitDominatorTree(graph);
   }
@@ -286,7 +280,6 @@
  * mode.
  */
 class SsaTrustedCheckRemover extends HBaseVisitor {
-
   Compiler compiler;
   SsaTrustedCheckRemover(this.compiler);
 
@@ -354,12 +347,12 @@
     List<HInstruction> inputs = user.inputs;
     for (int i = start; i < inputs.length; i++) {
       HInstruction input = inputs[i];
-      if (!generateAtUseSite.contains(input)
-          && !input.isCodeMotionInvariant()
-          && input.usedBy.length == 1
-          && input is !HPhi
-          && input is !HLocalValue
-          && !input.isJsStatement()) {
+      if (!generateAtUseSite.contains(input) &&
+          !input.isCodeMotionInvariant() &&
+          input.usedBy.length == 1 &&
+          input is! HPhi &&
+          input is! HLocalValue &&
+          !input.isJsStatement()) {
         if (input.isPure()) {
           // Only consider a pure input if it is in the same loop.
           // Otherwise, we might move GVN'ed instruction back into the
@@ -441,8 +434,7 @@
   }
 
   void visitTypeConversion(HTypeConversion instruction) {
-    if (!instruction.isArgumentTypeCheck
-        && !instruction.isReceiverTypeCheck) {
+    if (!instruction.isArgumentTypeCheck && !instruction.isReceiverTypeCheck) {
       assert(instruction.isCheckedModeCheck || instruction.isCastTypeCheck);
       // Checked mode checks and cast checks compile to code that
       // only use their input once, so we can safely visit them
@@ -462,8 +454,8 @@
   }
 
   bool isBlockSinglePredecessor(HBasicBlock block) {
-    return block.successors.length == 1
-        && block.successors[0].predecessors.length == 1;
+    return block.successors.length == 1 &&
+        block.successors[0].predecessors.length == 1;
   }
 
   void visitBasicBlock(HBasicBlock block) {
@@ -503,8 +495,8 @@
 
     block.last.accept(this);
     for (HInstruction instruction = block.last.previous;
-         instruction != null;
-         instruction = instruction.previous) {
+        instruction != null;
+        instruction = instruction.previous) {
       if (generateAtUseSite.contains(instruction)) {
         continue;
       }
@@ -585,8 +577,8 @@
       }
     }
 
-    if (block.predecessors.length == 1
-        && isBlockSinglePredecessor(block.predecessors[0])) {
+    if (block.predecessors.length == 1 &&
+        isBlockSinglePredecessor(block.predecessors[0])) {
       assert(block.phis.isEmpty);
       tryMergingExpressions(block.predecessors[0]);
     } else {
@@ -630,8 +622,8 @@
     // If [instruction] is not the last instruction of the block
     // before the control flow instruction, or the last instruction,
     // then we will have to emit a statement for that last instruction.
-    if (instruction != block.last
-        && !identical(instruction, block.last.previous)) return true;
+    if (instruction != block.last &&
+        !identical(instruction, block.last.previous)) return true;
 
     // If one of the instructions in the block until [instruction] is
     // not generated at use site, then we will have to emit a
@@ -639,8 +631,8 @@
     // TODO(ngeoffray): we could generate a comma separated
     // list of expressions.
     for (HInstruction temp = block.first;
-         !identical(temp, instruction);
-         temp = temp.next) {
+        !identical(temp, instruction);
+        temp = temp.next) {
       if (!generateAtUseSite.contains(temp)) return true;
     }
 
@@ -664,7 +656,7 @@
   }
 
   void visitBasicBlock(HBasicBlock block) {
-    if (block.last is !HIf) return;
+    if (block.last is! HIf) return;
     HIf startIf = block.last;
     HBasicBlock end = startIf.joinBlock;
 
@@ -754,9 +746,9 @@
     // If the operation is only used by the first instruction
     // of its block and is safe to be generated at use site, mark it
     // so.
-    if (phi.usedBy.length == 1
-        && phi.usedBy[0] == nextInstruction
-        && isSafeToGenerateAtUseSite(phi.usedBy[0], phi)) {
+    if (phi.usedBy.length == 1 &&
+        phi.usedBy[0] == nextInstruction &&
+        isSafeToGenerateAtUseSite(phi.usedBy[0], phi)) {
       markAsGenerateAtUseSite(phi);
     }
 
diff --git a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
index 3281111..1777d96 100644
--- a/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
+++ b/pkg/compiler/lib/src/ssa/interceptor_simplifier.dart
@@ -96,9 +96,8 @@
     return false;
   }
 
-  bool canUseSelfForInterceptor(HInstruction receiver,
-                                Set<ClassElement> interceptedClasses) {
-
+  bool canUseSelfForInterceptor(
+      HInstruction receiver, Set<ClassElement> interceptedClasses) {
     if (receiver.canBePrimitive(compiler)) {
       // Primitives always need interceptors.
       return false;
@@ -116,8 +115,7 @@
   }
 
   HInstruction tryComputeConstantInterceptor(
-      HInstruction input,
-      Set<ClassElement> interceptedClasses) {
+      HInstruction input, Set<ClassElement> interceptedClasses) {
     if (input == graph.explicitReceiverParameter) {
       // If `explicitReceiverParameter` is set it means the current method is an
       // interceptor method, and `this` is the interceptor.  The caller just did
@@ -143,9 +141,7 @@
   }
 
   ClassElement tryComputeConstantInterceptorFromType(
-      TypeMask type,
-      Set<ClassElement> interceptedClasses) {
-
+      TypeMask type, Set<ClassElement> interceptedClasses) {
     if (type.isNullable) {
       if (type.isNull) {
         return helpers.jsNullClass;
@@ -230,13 +226,13 @@
         node == dominator.receiver &&
         useCount(dominator, node) == 1) {
       interceptedClasses =
-            backend.getInterceptedClassesOn(dominator.selector.name);
+          backend.getInterceptedClassesOn(dominator.selector.name);
 
       // If we found that we need number, we must still go through all
       // uses to check if they require int, or double.
       if (interceptedClasses.contains(helpers.jsNumberClass) &&
           !(interceptedClasses.contains(helpers.jsDoubleClass) ||
-            interceptedClasses.contains(helpers.jsIntClass))) {
+              interceptedClasses.contains(helpers.jsIntClass))) {
         for (HInstruction user in node.usedBy) {
           if (user is! HInvoke) continue;
           Set<ClassElement> intercepted =
@@ -256,14 +252,14 @@
             user.isCallOnInterceptor(compiler) &&
             node == user.receiver &&
             useCount(user, node) == 1) {
-          interceptedClasses.addAll(
-              backend.getInterceptedClassesOn(user.selector.name));
+          interceptedClasses
+              .addAll(backend.getInterceptedClassesOn(user.selector.name));
         } else if (user is HInvokeSuper &&
-                   user.isCallOnInterceptor(compiler) &&
-                   node == user.receiver &&
-                   useCount(user, node) == 1) {
-          interceptedClasses.addAll(
-              backend.getInterceptedClassesOn(user.selector.name));
+            user.isCallOnInterceptor(compiler) &&
+            node == user.receiver &&
+            useCount(user, node) == 1) {
+          interceptedClasses
+              .addAll(backend.getInterceptedClassesOn(user.selector.name));
         } else {
           // Use a most general interceptor for other instructions, example,
           // is-checks and escaping interceptors.
@@ -311,10 +307,9 @@
           ClassElement interceptorClass = tryComputeConstantInterceptorFromType(
               receiver.instructionType.nonNullable(), interceptedClasses);
           if (interceptorClass != null) {
-            HInstruction constantInstruction =
-                graph.addConstant(
-                    new InterceptorConstantValue(interceptorClass.thisType),
-                    compiler);
+            HInstruction constantInstruction = graph.addConstant(
+                new InterceptorConstantValue(interceptorClass.thisType),
+                compiler);
             node.conditionalConstantInterceptor = constantInstruction;
             constantInstruction.usedBy.add(node);
             return false;
@@ -358,8 +353,11 @@
         List<HInstruction> inputs = new List<HInstruction>.from(user.inputs);
         inputs[0] = nullConstant;
         HOneShotInterceptor oneShotInterceptor = new HOneShotInterceptor(
-            user.selector, user.mask,
-            inputs, user.instructionType, interceptedClasses);
+            user.selector,
+            user.mask,
+            inputs,
+            user.instructionType,
+            interceptedClasses);
         oneShotInterceptor.sourceInformation = user.sourceInformation;
         oneShotInterceptor.sourceElement = user.sourceElement;
         return replaceUserWith(oneShotInterceptor);
@@ -386,8 +384,8 @@
   }
 
   bool visitOneShotInterceptor(HOneShotInterceptor node) {
-    HInstruction constant = tryComputeConstantInterceptor(
-        node.inputs[1], node.interceptedClasses);
+    HInstruction constant =
+        tryComputeConstantInterceptor(node.inputs[1], node.interceptedClasses);
 
     if (constant == null) return false;
 
@@ -395,12 +393,8 @@
     TypeMask mask = node.mask;
     HInstruction instruction;
     if (selector.isGetter) {
-      instruction = new HInvokeDynamicGetter(
-          selector,
-          mask,
-          node.element,
-          <HInstruction>[constant, node.inputs[1]],
-          node.instructionType);
+      instruction = new HInvokeDynamicGetter(selector, mask, node.element,
+          <HInstruction>[constant, node.inputs[1]], node.instructionType);
     } else if (selector.isSetter) {
       instruction = new HInvokeDynamicSetter(
           selector,
diff --git a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
index 9e03bb9..ff565f9 100644
--- a/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
+++ b/pkg/compiler/lib/src/ssa/invoke_dynamic_specializers.dart
@@ -24,14 +24,14 @@
 class InvokeDynamicSpecializer {
   const InvokeDynamicSpecializer();
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     return TypeMaskFactory.inferredTypeForSelector(
         instruction.selector, instruction.mask, compiler);
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     return null;
   }
 
@@ -94,18 +94,16 @@
 class IndexAssignSpecializer extends InvokeDynamicSpecializer {
   const IndexAssignSpecializer();
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     if (instruction.inputs[1].isMutableIndexable(compiler)) {
-      if (!instruction.inputs[2].isInteger(compiler)
-          && compiler.options.enableTypeAssertions) {
+      if (!instruction.inputs[2].isInteger(compiler) &&
+          compiler.options.enableTypeAssertions) {
         // We want the right checked mode error.
         return null;
       }
-      return new HIndexAssign(instruction.inputs[1],
-                              instruction.inputs[2],
-                              instruction.inputs[3],
-                              instruction.selector);
+      return new HIndexAssign(instruction.inputs[1], instruction.inputs[2],
+          instruction.inputs[3], instruction.selector);
     }
     return null;
   }
@@ -114,11 +112,11 @@
 class IndexSpecializer extends InvokeDynamicSpecializer {
   const IndexSpecializer();
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     if (!instruction.inputs[1].isIndexablePrimitive(compiler)) return null;
-    if (!instruction.inputs[2].isInteger(compiler)
-        && compiler.options.enableTypeAssertions) {
+    if (!instruction.inputs[2].isInteger(compiler) &&
+        compiler.options.enableTypeAssertions) {
       // We want the right checked mode error.
       return null;
     }
@@ -126,8 +124,7 @@
         instruction.getDartReceiver(compiler).instructionType;
     TypeMask type = TypeMaskFactory.inferredTypeForSelector(
         instruction.selector, receiverType, compiler);
-    return new HIndex(
-        instruction.inputs[1], instruction.inputs[2],
+    return new HIndex(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, type);
   }
 }
@@ -139,8 +136,8 @@
     return constantSystem.bitNot;
   }
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     // All bitwise operations on primitive types either produce an
     // integer or throw an error.
     JavaScriptBackend backend = compiler.backend;
@@ -150,12 +147,12 @@
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction input = instruction.inputs[1];
     if (input.isNumber(compiler)) {
       return new HBitNot(input, instruction.selector,
-                         computeTypeFromInputTypes(instruction, compiler));
+          computeTypeFromInputTypes(instruction, compiler));
     }
     return null;
   }
@@ -168,15 +165,15 @@
     return constantSystem.negate;
   }
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     TypeMask operandType = instruction.inputs[1].instructionType;
     if (instruction.inputs[1].isNumberOrNull(compiler)) return operandType;
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction input = instruction.inputs[1];
     if (input.isNumber(compiler)) {
       return new HNegate(input, instruction.selector, input.instructionType);
@@ -188,8 +185,8 @@
 abstract class BinaryArithmeticSpecializer extends InvokeDynamicSpecializer {
   const BinaryArithmeticSpecializer();
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     JavaScriptBackend backend = compiler.backend;
@@ -206,12 +203,12 @@
   }
 
   bool isBuiltin(HInvokeDynamic instruction, Compiler compiler) {
-    return instruction.inputs[1].isNumber(compiler)
-        && instruction.inputs[2].isNumber(compiler);
+    return instruction.inputs[1].isNumber(compiler) &&
+        instruction.inputs[2].isNumber(compiler);
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     if (isBuiltin(instruction, compiler)) {
       HInstruction builtin = newBuiltinVariant(instruction, compiler);
       if (builtin != null) return builtin;
@@ -232,8 +229,8 @@
   bool inputsArePositiveIntegers(HInstruction instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
-    return left.isPositiveIntegerOrNull(compiler)
-        && right.isPositiveIntegerOrNull(compiler);
+    return left.isPositiveIntegerOrNull(compiler) &&
+        right.isPositiveIntegerOrNull(compiler);
   }
 
   bool inputsAreUInt31(HInstruction instruction, Compiler compiler) {
@@ -244,9 +241,8 @@
 
   HInstruction newBuiltinVariant(HInvokeDynamic instruction, Compiler compiler);
 
-  Selector renameToOptimizedSelector(String name,
-                                     Selector selector,
-                                     Compiler compiler) {
+  Selector renameToOptimizedSelector(
+      String name, Selector selector, Compiler compiler) {
     if (selector.name == name) return selector;
     JavaScriptBackend backend = compiler.backend;
     return new Selector.call(
@@ -258,8 +254,8 @@
 class AddSpecializer extends BinaryArithmeticSpecializer {
   const AddSpecializer();
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     if (inputsAreUInt31(instruction, compiler)) {
       JavaScriptBackend backend = compiler.backend;
       return backend.uint32Type;
@@ -275,10 +271,9 @@
     return constantSystem.add;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HAdd(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HAdd(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 }
@@ -290,8 +285,8 @@
     return constantSystem.divide;
   }
 
-  TypeMask computeTypeFromInputTypes(HInstruction instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInstruction instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     JavaScriptBackend backend = compiler.backend;
     if (left.isNumberOrNull(compiler)) {
@@ -300,11 +295,10 @@
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
-    return new HDivide(
-        instruction.inputs[1], instruction.inputs[2],
+    return new HDivide(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, backend.doubleType);
   }
 }
@@ -312,8 +306,8 @@
 class ModuloSpecializer extends BinaryArithmeticSpecializer {
   const ModuloSpecializer();
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     if (inputsArePositiveIntegers(instruction, compiler)) {
       JavaScriptBackend backend = compiler.backend;
       return backend.positiveIntType;
@@ -325,8 +319,8 @@
     return constantSystem.modulo;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
     // Modulo cannot be mapped to the native operator (different semantics).
     // TODO(sra): For non-negative values we can use JavaScript's %.
     return null;
@@ -340,8 +334,8 @@
     return constantSystem.multiply;
   }
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     if (inputsArePositiveIntegers(instruction, compiler)) {
       JavaScriptBackend backend = compiler.backend;
       return backend.positiveIntType;
@@ -349,10 +343,9 @@
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HMultiply(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HMultiply(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 }
@@ -364,10 +357,9 @@
     return constantSystem.subtract;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HSubtract(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HSubtract(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 }
@@ -379,8 +371,8 @@
     return constantSystem.truncatingDivide;
   }
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
     if (hasUint31Result(instruction, compiler)) {
       return backend.uint31Type;
@@ -421,8 +413,8 @@
     return false;
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction right = instruction.inputs[2];
     if (isBuiltin(instruction, compiler)) {
       if (right.isPositiveInteger(compiler) && isNotZero(right, compiler)) {
@@ -439,10 +431,9 @@
     return null;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HTruncatingDivide(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HTruncatingDivide(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 }
@@ -450,8 +441,8 @@
 abstract class BinaryBitOpSpecializer extends BinaryArithmeticSpecializer {
   const BinaryBitOpSpecializer();
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     // All bitwise operations on primitive types either produce an
     // integer or throw an error.
     HInstruction left = instruction.inputs[1];
@@ -484,8 +475,8 @@
     return constantSystem.shiftLeft;
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     if (left.isNumber(compiler)) {
@@ -504,10 +495,9 @@
     return null;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HShiftLeft(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HShiftLeft(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 }
@@ -515,15 +505,15 @@
 class ShiftRightSpecializer extends BinaryBitOpSpecializer {
   const ShiftRightSpecializer();
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     if (left.isUInt32(compiler)) return left.instructionType;
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     if (left.isNumber(compiler)) {
@@ -548,10 +538,9 @@
     return null;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HShiftRight(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HShiftRight(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 
@@ -567,8 +556,8 @@
     return constantSystem.bitOr;
   }
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     JavaScriptBackend backend = compiler.backend;
@@ -578,10 +567,9 @@
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HBitOr(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HBitOr(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 }
@@ -593,8 +581,8 @@
     return constantSystem.bitAnd;
   }
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     JavaScriptBackend backend = compiler.backend;
@@ -605,10 +593,9 @@
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HBitAnd(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HBitAnd(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 }
@@ -620,8 +607,8 @@
     return constantSystem.bitXor;
   }
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     JavaScriptBackend backend = compiler.backend;
@@ -631,10 +618,9 @@
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
-    return new HBitXor(
-        instruction.inputs[1], instruction.inputs[2],
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
+    return new HBitXor(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, computeTypeFromInputTypes(instruction, compiler));
   }
 }
@@ -642,8 +628,8 @@
 abstract class RelationalSpecializer extends InvokeDynamicSpecializer {
   const RelationalSpecializer();
 
-  TypeMask computeTypeFromInputTypes(HInvokeDynamic instruction,
-                                     Compiler compiler) {
+  TypeMask computeTypeFromInputTypes(
+      HInvokeDynamic instruction, Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
     if (instruction.inputs[1].isPrimitiveOrNull(compiler)) {
       return backend.boolType;
@@ -651,8 +637,8 @@
     return super.computeTypeFromInputTypes(instruction, compiler);
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     if (left.isNumber(compiler) && right.isNumber(compiler)) {
@@ -667,8 +653,8 @@
 class EqualsSpecializer extends RelationalSpecializer {
   const EqualsSpecializer();
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     HInstruction left = instruction.inputs[1];
     HInstruction right = instruction.inputs[2];
     TypeMask instructionType = left.instructionType;
@@ -677,8 +663,8 @@
     }
     World world = compiler.world;
     JavaScriptBackend backend = compiler.backend;
-    Iterable<Element> matches = world.allFunctions.filter(
-        instruction.selector, instructionType);
+    Iterable<Element> matches =
+        world.allFunctions.filter(instruction.selector, instructionType);
     // This test relies the on `Object.==` and `Interceptor.==` always being
     // implemented because if the selector matches by subtype, it still will be
     // a regular object or an interceptor.
@@ -692,11 +678,10 @@
     return constantSystem.equal;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
-    return new HIdentity(
-        instruction.inputs[1], instruction.inputs[2],
+    return new HIdentity(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, backend.boolType);
   }
 }
@@ -708,11 +693,10 @@
     return constantSystem.less;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
-    return new HLess(
-        instruction.inputs[1], instruction.inputs[2],
+    return new HLess(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, backend.boolType);
   }
 }
@@ -724,11 +708,10 @@
     return constantSystem.greater;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
-    return new HGreater(
-        instruction.inputs[1], instruction.inputs[2],
+    return new HGreater(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, backend.boolType);
   }
 }
@@ -740,11 +723,10 @@
     return constantSystem.greaterEqual;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
-    return new HGreaterEqual(
-        instruction.inputs[1], instruction.inputs[2],
+    return new HGreaterEqual(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, backend.boolType);
   }
 }
@@ -756,11 +738,10 @@
     return constantSystem.lessEqual;
   }
 
-  HInstruction newBuiltinVariant(HInvokeDynamic instruction,
-                                 Compiler compiler) {
+  HInstruction newBuiltinVariant(
+      HInvokeDynamic instruction, Compiler compiler) {
     JavaScriptBackend backend = compiler.backend;
-    return new HLessEqual(
-        instruction.inputs[1], instruction.inputs[2],
+    return new HLessEqual(instruction.inputs[1], instruction.inputs[2],
         instruction.selector, backend.boolType);
   }
 }
@@ -772,8 +753,8 @@
     return constantSystem.codeUnitAt;
   }
 
-  HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
-                                   Compiler compiler) {
+  HInstruction tryConvertToBuiltin(
+      HInvokeDynamic instruction, Compiler compiler) {
     // TODO(sra): Implement a builtin HCodeUnitAt instruction and the same index
     // bounds checking optimizations as for HIndex.
     return null;
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 76a9644..a779457 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-
 import '../closure.dart';
 import '../common.dart';
 import '../compiler.dart' show Compiler;
@@ -152,10 +151,11 @@
 }
 
 class HGraph {
-  Element element;  // Used for debug printing.
+  Element element; // Used for debug printing.
   HBasicBlock entry;
   HBasicBlock exit;
   HThis thisInstruction;
+
   /// Receiver parameter, set for methods using interceptor calling convention.
   HParameterValue explicitReceiverParameter;
   bool isRecursiveMethod = false;
@@ -187,22 +187,21 @@
     return result;
   }
 
-  HBasicBlock addNewLoopHeaderBlock(JumpTarget target,
-                                    List<LabelDefinition> labels) {
+  HBasicBlock addNewLoopHeaderBlock(
+      JumpTarget target, List<LabelDefinition> labels) {
     HBasicBlock result = addNewBlock();
-    result.loopInformation =
-        new HLoopInformation(result, target, labels);
+    result.loopInformation = new HLoopInformation(result, target, labels);
     return result;
   }
 
   HConstant addConstant(ConstantValue constant, Compiler compiler,
-                        {SourceInformation sourceInformation}) {
+      {SourceInformation sourceInformation}) {
     HConstant result = constants[constant];
     // TODO(johnniwinther): Support source information per constant reference.
     if (result == null) {
       TypeMask type = computeTypeMask(compiler, constant);
       result = new HConstant.internal(constant, type)
-          ..sourceInformation = sourceInformation;
+        ..sourceInformation = sourceInformation;
       entry.addAtExit(result);
       constants[constant] = result;
     } else if (result.block == null) {
@@ -213,8 +212,7 @@
   }
 
   HConstant addDeferredConstant(ConstantValue constant, PrefixElement prefix,
-                                SourceInformation sourceInformation,
-                                Compiler compiler) {
+      SourceInformation sourceInformation, Compiler compiler) {
     // TODO(sigurdm,johnniwinter): These deferred constants should be created
     // by the constant evaluator.
     ConstantValue wrapper = new DeferredConstantValue(constant, prefix);
@@ -231,18 +229,15 @@
         compiler.backend.constantSystem.createDouble(d), compiler);
   }
 
-  HConstant addConstantString(ast.DartString str,
-                              Compiler compiler) {
+  HConstant addConstantString(ast.DartString str, Compiler compiler) {
     return addConstant(
-        compiler.backend.constantSystem.createString(str),
-        compiler);
+        compiler.backend.constantSystem.createString(str), compiler);
   }
 
-  HConstant addConstantStringFromName(js.Name name,
-                                      Compiler compiler) {
+  HConstant addConstantStringFromName(js.Name name, Compiler compiler) {
     return addConstant(
-        new SyntheticConstantValue(SyntheticConstantKind.NAME,
-                                   js.quoteName(name)),
+        new SyntheticConstantValue(
+            SyntheticConstantKind.NAME, js.quoteName(name)),
         compiler);
   }
 
@@ -341,16 +336,15 @@
   visitIndex(HIndex node) => visitInstruction(node);
   visitIndexAssign(HIndexAssign node) => visitInstruction(node);
   visitInterceptor(HInterceptor node) => visitInstruction(node);
-  visitInvokeClosure(HInvokeClosure node)
-      => visitInvokeDynamic(node);
-  visitInvokeConstructorBody(HInvokeConstructorBody node)
-      => visitInvokeStatic(node);
-  visitInvokeDynamicMethod(HInvokeDynamicMethod node)
-      => visitInvokeDynamic(node);
-  visitInvokeDynamicGetter(HInvokeDynamicGetter node)
-      => visitInvokeDynamicField(node);
-  visitInvokeDynamicSetter(HInvokeDynamicSetter node)
-      => visitInvokeDynamicField(node);
+  visitInvokeClosure(HInvokeClosure node) => visitInvokeDynamic(node);
+  visitInvokeConstructorBody(HInvokeConstructorBody node) =>
+      visitInvokeStatic(node);
+  visitInvokeDynamicMethod(HInvokeDynamicMethod node) =>
+      visitInvokeDynamic(node);
+  visitInvokeDynamicGetter(HInvokeDynamicGetter node) =>
+      visitInvokeDynamicField(node);
+  visitInvokeDynamicSetter(HInvokeDynamicSetter node) =>
+      visitInvokeDynamicField(node);
   visitInvokeStatic(HInvokeStatic node) => visitInvoke(node);
   visitInvokeSuper(HInvokeSuper node) => visitInvokeStatic(node);
   visitJump(HJump node) => visitControlFlow(node);
@@ -365,8 +359,7 @@
   visitLoopBranch(HLoopBranch node) => visitConditionalBranch(node);
   visitNegate(HNegate node) => visitInvokeUnary(node);
   visitNot(HNot node) => visitInstruction(node);
-  visitOneShotInterceptor(HOneShotInterceptor node)
-      => visitInvokeDynamic(node);
+  visitOneShotInterceptor(HOneShotInterceptor node) => visitInvokeDynamic(node);
   visitPhi(HPhi node) => visitInstruction(node);
   visitMultiply(HMultiply node) => visitBinaryArithmetic(node);
   visitParameterValue(HParameterValue node) => visitLocalValue(node);
@@ -416,8 +409,7 @@
 }
 
 class SubExpression extends SubGraph {
-  const SubExpression(HBasicBlock start, HBasicBlock end)
-      : super(start, end);
+  const SubExpression(HBasicBlock start, HBasicBlock end) : super(start, end);
 
   /** Find the condition expression if this sub-expression is a condition. */
   HInstruction get conditionExpression {
@@ -545,8 +537,7 @@
   }
 
   bool isLabeledBlock() =>
-    blockFlow != null &&
-    blockFlow.body is HLabeledBlockInformation;
+      blockFlow != null && blockFlow.body is HLabeledBlockInformation;
 
   HBasicBlock get enclosingLoopHeader {
     if (isLoopHeader()) return this;
@@ -565,7 +556,7 @@
   }
 
   void addAtEntry(HInstruction instruction) {
-    assert(instruction is !HPhi);
+    assert(instruction is! HPhi);
     internalAddBefore(first, instruction);
     instruction.notifyAddedToBlock(this);
   }
@@ -573,13 +564,13 @@
   void addAtExit(HInstruction instruction) {
     assert(isClosed());
     assert(last is HControlFlow);
-    assert(instruction is !HPhi);
+    assert(instruction is! HPhi);
     internalAddBefore(last, instruction);
     instruction.notifyAddedToBlock(this);
   }
 
   void moveAtExit(HInstruction instruction) {
-    assert(instruction is !HPhi);
+    assert(instruction is! HPhi);
     assert(instruction.isInBasicBlock());
     assert(isClosed());
     assert(last is HControlFlow);
@@ -589,8 +580,8 @@
   }
 
   void add(HInstruction instruction) {
-    assert(instruction is !HControlFlow);
-    assert(instruction is !HPhi);
+    assert(instruction is! HControlFlow);
+    assert(instruction is! HPhi);
     internalAddAfter(last, instruction);
     instruction.notifyAddedToBlock(this);
   }
@@ -609,16 +600,16 @@
   }
 
   void addAfter(HInstruction cursor, HInstruction instruction) {
-    assert(cursor is !HPhi);
-    assert(instruction is !HPhi);
+    assert(cursor is! HPhi);
+    assert(instruction is! HPhi);
     assert(isOpen() || isClosed());
     internalAddAfter(cursor, instruction);
     instruction.notifyAddedToBlock(this);
   }
 
   void addBefore(HInstruction cursor, HInstruction instruction) {
-    assert(cursor is !HPhi);
-    assert(instruction is !HPhi);
+    assert(cursor is! HPhi);
+    assert(instruction is! HPhi);
     assert(isOpen() || isClosed());
     internalAddBefore(cursor, instruction);
     instruction.notifyAddedToBlock(this);
@@ -626,7 +617,7 @@
 
   void remove(HInstruction instruction) {
     assert(isOpen() || isClosed());
-    assert(instruction is !HPhi);
+    assert(instruction is! HPhi);
     super.remove(instruction);
     assert(instruction.block == this);
     instruction.notifyRemovedFromBlock();
@@ -860,14 +851,17 @@
   static const int IS_VIA_INTERCEPTOR_TYPECODE = 37;
 
   HInstruction(this.inputs, this.instructionType)
-      : id = idCounter++, usedBy = <HInstruction>[] {
+      : id = idCounter++,
+        usedBy = <HInstruction>[] {
     assert(inputs.every((e) => e != null));
   }
 
   int get hashCode => id;
 
   bool useGvn() => _useGvn;
-  void setUseGvn() { _useGvn = true; }
+  void setUseGvn() {
+    _useGvn = true;
+  }
 
   bool get isMovable => useGvn();
 
@@ -877,9 +871,9 @@
    * graph.
    */
   bool isPure() {
-    return !sideEffects.hasSideEffects()
-        && !sideEffects.dependsOnSomething()
-        && !canThrow();
+    return !sideEffects.hasSideEffects() &&
+        !sideEffects.dependsOnSomething() &&
+        !canThrow();
   }
 
   /// An instruction is an 'allocation' is it is the sole alias for an object.
@@ -909,36 +903,28 @@
 
   /// Returns `true` if [typeMask] contains [cls].
   static bool containsType(
-      TypeMask typeMask,
-      ClassElement cls,
-      ClassWorld classWorld) {
+      TypeMask typeMask, ClassElement cls, ClassWorld classWorld) {
     return classWorld.isInstantiated(cls) && typeMask.contains(cls, classWorld);
   }
 
   /// Returns `true` if [typeMask] contains only [cls].
   static bool containsOnlyType(
-      TypeMask typeMask,
-      ClassElement cls,
-      ClassWorld classWorld) {
-    return classWorld.isInstantiated(cls) &&
-        typeMask.containsOnly(cls);
+      TypeMask typeMask, ClassElement cls, ClassWorld classWorld) {
+    return classWorld.isInstantiated(cls) && typeMask.containsOnly(cls);
   }
 
   /// Returns `true` if [typeMask] is an instance of [cls].
   static bool isInstanceOf(
-      TypeMask typeMask,
-      ClassElement cls,
-      ClassWorld classWorld) {
-    return classWorld.isImplemented(cls) &&
-        typeMask.satisfies(cls, classWorld);
+      TypeMask typeMask, ClassElement cls, ClassWorld classWorld) {
+    return classWorld.isImplemented(cls) && typeMask.satisfies(cls, classWorld);
   }
 
   bool canBePrimitive(Compiler compiler) {
-    return canBePrimitiveNumber(compiler)
-        || canBePrimitiveArray(compiler)
-        || canBePrimitiveBoolean(compiler)
-        || canBePrimitiveString(compiler)
-        || isNull();
+    return canBePrimitiveNumber(compiler) ||
+        canBePrimitiveArray(compiler) ||
+        canBePrimitiveBoolean(compiler) ||
+        canBePrimitiveString(compiler) ||
+        isNull();
   }
 
   bool canBePrimitiveNumber(Compiler compiler) {
@@ -947,12 +933,12 @@
     BackendHelpers helpers = backend.helpers;
     // TODO(sra): It should be possible to test only jsDoubleClass and
     // jsUInt31Class, since all others are superclasses of these two.
-    return containsType(instructionType, helpers.jsNumberClass, classWorld)
-        || containsType(instructionType, helpers.jsIntClass, classWorld)
-        || containsType(instructionType, helpers.jsPositiveIntClass, classWorld)
-        || containsType(instructionType, helpers.jsUInt32Class, classWorld)
-        || containsType(instructionType, helpers.jsUInt31Class, classWorld)
-        || containsType(instructionType, helpers.jsDoubleClass, classWorld);
+    return containsType(instructionType, helpers.jsNumberClass, classWorld) ||
+        containsType(instructionType, helpers.jsIntClass, classWorld) ||
+        containsType(instructionType, helpers.jsPositiveIntClass, classWorld) ||
+        containsType(instructionType, helpers.jsUInt32Class, classWorld) ||
+        containsType(instructionType, helpers.jsUInt31Class, classWorld) ||
+        containsType(instructionType, helpers.jsDoubleClass, classWorld);
   }
 
   bool canBePrimitiveBoolean(Compiler compiler) {
@@ -966,20 +952,20 @@
     ClassWorld classWorld = compiler.world;
     JavaScriptBackend backend = compiler.backend;
     BackendHelpers helpers = backend.helpers;
-    return containsType(instructionType, helpers.jsArrayClass, classWorld)
-        || containsType(instructionType, helpers.jsFixedArrayClass, classWorld)
-        || containsType(
-            instructionType, helpers.jsExtendableArrayClass, classWorld)
-        || containsType(instructionType,
-            helpers.jsUnmodifiableArrayClass, classWorld);
+    return containsType(instructionType, helpers.jsArrayClass, classWorld) ||
+        containsType(instructionType, helpers.jsFixedArrayClass, classWorld) ||
+        containsType(
+            instructionType, helpers.jsExtendableArrayClass, classWorld) ||
+        containsType(
+            instructionType, helpers.jsUnmodifiableArrayClass, classWorld);
   }
 
   bool isIndexablePrimitive(Compiler compiler) {
     ClassWorld classWorld = compiler.world;
     JavaScriptBackend backend = compiler.backend;
     BackendHelpers helpers = backend.helpers;
-    return instructionType.containsOnlyString(classWorld)
-        || isInstanceOf(instructionType, helpers.jsIndexableClass, classWorld);
+    return instructionType.containsOnlyString(classWorld) ||
+        isInstanceOf(instructionType, helpers.jsIndexableClass, classWorld);
   }
 
   bool isFixedArray(Compiler compiler) {
@@ -988,8 +974,8 @@
     BackendHelpers helpers = backend.helpers;
     // TODO(sra): Recognize the union of these types as well.
     return containsOnlyType(
-            instructionType, helpers.jsFixedArrayClass, classWorld)
-        || containsOnlyType(
+            instructionType, helpers.jsFixedArrayClass, classWorld) ||
+        containsOnlyType(
             instructionType, helpers.jsUnmodifiableArrayClass, classWorld);
   }
 
@@ -1020,8 +1006,8 @@
     ClassWorld classWorld = compiler.world;
     JavaScriptBackend backend = compiler.backend;
     BackendHelpers helpers = backend.helpers;
-    return isInstanceOf(instructionType,
-        helpers.jsMutableIndexableClass, classWorld);
+    return isInstanceOf(
+        instructionType, helpers.jsMutableIndexableClass, classWorld);
   }
 
   bool isArray(Compiler compiler) => isReadableArray(compiler);
@@ -1035,24 +1021,24 @@
 
   bool isInteger(Compiler compiler) {
     ClassWorld classWorld = compiler.world;
-    return instructionType.containsOnlyInt(classWorld)
-        && !instructionType.isNullable;
+    return instructionType.containsOnlyInt(classWorld) &&
+        !instructionType.isNullable;
   }
 
   bool isUInt32(Compiler compiler) {
     ClassWorld classWorld = compiler.world;
     JavaScriptBackend backend = compiler.backend;
     BackendHelpers helpers = backend.helpers;
-    return !instructionType.isNullable
-        && isInstanceOf(instructionType, helpers.jsUInt32Class, classWorld);
+    return !instructionType.isNullable &&
+        isInstanceOf(instructionType, helpers.jsUInt32Class, classWorld);
   }
 
   bool isUInt31(Compiler compiler) {
     ClassWorld classWorld = compiler.world;
     JavaScriptBackend backend = compiler.backend;
     BackendHelpers helpers = backend.helpers;
-    return !instructionType.isNullable
-        && isInstanceOf(instructionType, helpers.jsUInt31Class, classWorld);
+    return !instructionType.isNullable &&
+        isInstanceOf(instructionType, helpers.jsUInt31Class, classWorld);
   }
 
   bool isPositiveInteger(Compiler compiler) {
@@ -1078,8 +1064,8 @@
 
   bool isNumber(Compiler compiler) {
     ClassWorld classWorld = compiler.world;
-    return instructionType.containsOnlyNum(classWorld)
-        && !instructionType.isNullable;
+    return instructionType.containsOnlyNum(classWorld) &&
+        !instructionType.isNullable;
   }
 
   bool isNumberOrNull(Compiler compiler) {
@@ -1089,8 +1075,8 @@
 
   bool isDouble(Compiler compiler) {
     ClassWorld classWorld = compiler.world;
-    return instructionType.containsOnlyDouble(classWorld)
-        && !instructionType.isNullable;
+    return instructionType.containsOnlyDouble(classWorld) &&
+        !instructionType.isNullable;
   }
 
   bool isDoubleOrNull(Compiler compiler) {
@@ -1100,8 +1086,8 @@
 
   bool isBoolean(Compiler compiler) {
     ClassWorld classWorld = compiler.world;
-    return instructionType.containsOnlyBool(classWorld)
-        && !instructionType.isNullable;
+    return instructionType.containsOnlyBool(classWorld) &&
+        !instructionType.isNullable;
   }
 
   bool isBooleanOrNull(Compiler compiler) {
@@ -1111,8 +1097,8 @@
 
   bool isString(Compiler compiler) {
     ClassWorld classWorld = compiler.world;
-    return instructionType.containsOnlyString(classWorld)
-        && !instructionType.isNullable;
+    return instructionType.containsOnlyString(classWorld) &&
+        !instructionType.isNullable;
   }
 
   bool isStringOrNull(Compiler compiler) {
@@ -1121,15 +1107,15 @@
   }
 
   bool isPrimitive(Compiler compiler) {
-    return (isPrimitiveOrNull(compiler) && !instructionType.isNullable)
-        || isNull();
+    return (isPrimitiveOrNull(compiler) && !instructionType.isNullable) ||
+        isNull();
   }
 
   bool isPrimitiveOrNull(Compiler compiler) {
-    return isIndexablePrimitive(compiler)
-        || isNumberOrNull(compiler)
-        || isBooleanOrNull(compiler)
-        || isNull();
+    return isIndexablePrimitive(compiler) ||
+        isNumberOrNull(compiler) ||
+        isBooleanOrNull(compiler) ||
+        isNull();
   }
 
   /**
@@ -1292,8 +1278,8 @@
     return users;
   }
 
-  void replaceAllUsersDominatedBy(HInstruction cursor,
-                                  HInstruction newInstruction) {
+  void replaceAllUsersDominatedBy(
+      HInstruction cursor, HInstruction newInstruction) {
     Setlet<HInstruction> users = dominatedUsers(cursor);
     for (HInstruction user in users) {
       user.changeUse(this, newInstruction);
@@ -1301,9 +1287,9 @@
   }
 
   void moveBefore(HInstruction other) {
-    assert(this is !HControlFlow);
-    assert(this is !HPhi);
-    assert(other is !HPhi);
+    assert(this is! HControlFlow);
+    assert(this is! HPhi);
+    assert(other is! HPhi);
     block.detach(this);
     other.block.internalAddBefore(other, this);
     block = other.block;
@@ -1367,8 +1353,8 @@
     } else if (kind == HTypeConversion.CHECKED_MODE_CHECK && !type.treatAsRaw) {
       throw 'creating compound check to $type (this = ${this})';
     } else {
-      TypeMask subtype = new TypeMask.subtype(element.declaration,
-                                              compiler.world);
+      TypeMask subtype =
+          new TypeMask.subtype(element.declaration, compiler.world);
       return new HTypeConversion(type, kind, subtype, this);
     }
   }
@@ -1510,8 +1496,7 @@
     // We know it's a selector call if it follows the interceptor
     // calling convention, which adds the actual receiver as a
     // parameter to the call.
-    return (selector != null) &&
-           (inputs.length - 2 == selector.argumentCount);
+    return (selector != null) && (inputs.length - 2 == selector.argumentCount);
   }
 }
 
@@ -1521,17 +1506,14 @@
   TypeMask mask;
   Element element;
 
-  HInvokeDynamic(Selector selector,
-                 this.mask,
-                 this.element,
-                 List<HInstruction> inputs,
-                 TypeMask type,
-                 [bool isIntercepted = false])
-    : super(inputs, type),
-      this.selector = selector,
-      specializer = isIntercepted
-          ? InvokeDynamicSpecializer.lookupSpecializer(selector)
-          : const InvokeDynamicSpecializer();
+  HInvokeDynamic(Selector selector, this.mask, this.element,
+      List<HInstruction> inputs, TypeMask type,
+      [bool isIntercepted = false])
+      : super(inputs, type),
+        this.selector = selector,
+        specializer = isIntercepted
+            ? InvokeDynamicSpecializer.lookupSpecializer(selector)
+            : const InvokeDynamicSpecializer();
   toString() => 'invoke dynamic: selector=$selector, mask=$mask';
   HInstruction get receiver => inputs[0];
   HInstruction getDartReceiver(Compiler compiler) {
@@ -1551,15 +1533,13 @@
     // Use the name and the kind instead of [Selector.operator==]
     // because we don't need to check the arity (already checked in
     // [gvnEquals]), and the receiver types may not be in sync.
-    return selector.name == other.selector.name
-        && selector.kind == other.selector.kind;
+    return selector.name == other.selector.name &&
+        selector.kind == other.selector.kind;
   }
 }
 
 class HInvokeClosure extends HInvokeDynamic {
-  HInvokeClosure(Selector selector,
-                 List<HInstruction> inputs,
-                 TypeMask type)
+  HInvokeClosure(Selector selector, List<HInstruction> inputs, TypeMask type)
       : super(selector, null, null, inputs, type) {
     assert(selector.isClosureCall);
   }
@@ -1567,38 +1547,34 @@
 }
 
 class HInvokeDynamicMethod extends HInvokeDynamic {
-  HInvokeDynamicMethod(Selector selector,
-                       TypeMask mask,
-                       List<HInstruction> inputs,
-                       TypeMask type,
-                       [bool isIntercepted = false])
-    : super(selector, mask, null, inputs, type, isIntercepted);
+  HInvokeDynamicMethod(Selector selector, TypeMask mask,
+      List<HInstruction> inputs, TypeMask type,
+      [bool isIntercepted = false])
+      : super(selector, mask, null, inputs, type, isIntercepted);
 
   String toString() => 'invoke dynamic method: selector=$selector, mask=$mask';
   accept(HVisitor visitor) => visitor.visitInvokeDynamicMethod(this);
 }
 
 abstract class HInvokeDynamicField extends HInvokeDynamic {
-  HInvokeDynamicField(
-      Selector selector, TypeMask mask,
-      Element element, List<HInstruction> inputs,
-      TypeMask type)
+  HInvokeDynamicField(Selector selector, TypeMask mask, Element element,
+      List<HInstruction> inputs, TypeMask type)
       : super(selector, mask, element, inputs, type);
   toString() => 'invoke dynamic field: selector=$selector, mask=$mask';
 }
 
 class HInvokeDynamicGetter extends HInvokeDynamicField {
-  HInvokeDynamicGetter(Selector selector, TypeMask mask,
-      Element element, List<HInstruction> inputs, TypeMask type)
-    : super(selector, mask, element, inputs, type);
+  HInvokeDynamicGetter(Selector selector, TypeMask mask, Element element,
+      List<HInstruction> inputs, TypeMask type)
+      : super(selector, mask, element, inputs, type);
   toString() => 'invoke dynamic getter: selector=$selector, mask=$mask';
   accept(HVisitor visitor) => visitor.visitInvokeDynamicGetter(this);
 }
 
 class HInvokeDynamicSetter extends HInvokeDynamicField {
-  HInvokeDynamicSetter(Selector selector, TypeMask mask,
-      Element element, List<HInstruction> inputs, TypeMask type)
-    : super(selector, mask, element, inputs, type);
+  HInvokeDynamicSetter(Selector selector, TypeMask mask, Element element,
+      List<HInstruction> inputs, TypeMask type)
+      : super(selector, mask, element, inputs, type);
   toString() => 'invoke dynamic setter: selector=$selector, mask=$mask';
   accept(HVisitor visitor) => visitor.visitInvokeDynamicSetter(this);
 }
@@ -1618,8 +1594,8 @@
 
   /** The first input must be the target. */
   HInvokeStatic(this.element, inputs, TypeMask type,
-                {this.targetCanThrow: true})
-    : super(inputs, type);
+      {this.targetCanThrow: true})
+      : super(inputs, type);
 
   toString() => 'invoke static: $element';
   accept(HVisitor visitor) => visitor.visitInvokeStatic(this);
@@ -1632,13 +1608,9 @@
   final bool isSetter;
   final Selector selector;
 
-  HInvokeSuper(Element element,
-               this.caller,
-               this.selector,
-               inputs,
-               type,
-               SourceInformation sourceInformation,
-               {this.isSetter})
+  HInvokeSuper(Element element, this.caller, this.selector, inputs, type,
+      SourceInformation sourceInformation,
+      {this.isSetter})
       : super(element, inputs, type) {
     this.sourceInformation = sourceInformation;
   }
@@ -1669,8 +1641,7 @@
   // The 'inputs' are
   //     [receiver, arg1, ..., argN] or
   //     [interceptor, receiver, arg1, ... argN].
-  HInvokeConstructorBody(element, inputs, type)
-      : super(element, inputs, type);
+  HInvokeConstructorBody(element, inputs, type) : super(element, inputs, type);
 
   String toString() => 'invoke constructor body: ${element.name}';
   accept(HVisitor visitor) => visitor.visitInvokeConstructorBody(this);
@@ -1680,7 +1651,8 @@
   final Element element;
 
   HFieldAccess(Element element, List<HInstruction> inputs, TypeMask type)
-      : this.element = element, super(inputs, type);
+      : this.element = element,
+        super(inputs, type);
 
   HInstruction get receiver => inputs[0];
 }
@@ -1688,13 +1660,10 @@
 class HFieldGet extends HFieldAccess {
   final bool isAssignable;
 
-  HFieldGet(Element element,
-            HInstruction receiver,
-            TypeMask type,
-            {bool isAssignable})
-      : this.isAssignable = (isAssignable != null)
-            ? isAssignable
-            : element.isAssignable,
+  HFieldGet(Element element, HInstruction receiver, TypeMask type,
+      {bool isAssignable})
+      : this.isAssignable =
+            (isAssignable != null) ? isAssignable : element.isAssignable,
         super(element, <HInstruction>[receiver], type) {
     sideEffects.clearAllSideEffects();
     sideEffects.clearAllDependencies();
@@ -1732,11 +1701,9 @@
 }
 
 class HFieldSet extends HFieldAccess {
-  HFieldSet(Element element,
-            HInstruction receiver,
-            HInstruction value)
+  HFieldSet(Element element, HInstruction receiver, HInstruction value)
       : super(element, <HInstruction>[receiver, value],
-              const TypeMask.nonNullEmpty()) {
+            const TypeMask.nonNullEmpty()) {
     sideEffects.clearAllSideEffects();
     sideEffects.clearAllDependencies();
     sideEffects.setChangesInstanceProperty();
@@ -1766,7 +1733,7 @@
   final String jsOp;
   final int opKind;
 
-   HReadModifyWrite._(Element this.element, this.jsOp, this.opKind,
+  HReadModifyWrite._(Element this.element, this.jsOp, this.opKind,
       List<HInstruction> inputs, TypeMask type)
       : super(inputs, type) {
     sideEffects.clearAllSideEffects();
@@ -1775,17 +1742,17 @@
     sideEffects.setDependsOnInstancePropertyStore();
   }
 
-  HReadModifyWrite.assignOp(Element element, String jsOp,
-      HInstruction receiver, HInstruction operand, TypeMask type)
-      : this._(element, jsOp, ASSIGN_OP,
-               <HInstruction>[receiver, operand], type);
+  HReadModifyWrite.assignOp(Element element, String jsOp, HInstruction receiver,
+      HInstruction operand, TypeMask type)
+      : this._(
+            element, jsOp, ASSIGN_OP, <HInstruction>[receiver, operand], type);
 
-  HReadModifyWrite.preOp(Element element, String jsOp,
-      HInstruction receiver, TypeMask type)
+  HReadModifyWrite.preOp(
+      Element element, String jsOp, HInstruction receiver, TypeMask type)
       : this._(element, jsOp, PRE_OP, <HInstruction>[receiver], type);
 
-  HReadModifyWrite.postOp(Element element, String jsOp,
-      HInstruction receiver, TypeMask type)
+  HReadModifyWrite.postOp(
+      Element element, String jsOp, HInstruction receiver, TypeMask type)
       : this._(element, jsOp, POST_OP, <HInstruction>[receiver], type);
 
   HInstruction get receiver => inputs[0];
@@ -1819,7 +1786,7 @@
   // No need to use GVN for a [HLocalGet], it is just a local
   // access.
   HLocalGet(Local variable, HLocalValue local, TypeMask type,
-            SourceInformation sourceInformation)
+      SourceInformation sourceInformation)
       : super(variable, <HInstruction>[local], type) {
     this.sourceInformation = sourceInformation;
   }
@@ -1832,7 +1799,7 @@
 class HLocalSet extends HLocalAccess {
   HLocalSet(Local variable, HLocalValue local, HInstruction value)
       : super(variable, <HInstruction>[local, value],
-              const TypeMask.nonNullEmpty());
+            const TypeMask.nonNullEmpty());
 
   accept(HVisitor visitor) => visitor.visitLocalSet(this);
 
@@ -1848,8 +1815,7 @@
   native.NativeBehavior get nativeBehavior => null;
 
   bool canThrow() {
-    return sideEffects.hasSideEffects()
-        || sideEffects.dependsOnSomething();
+    return sideEffects.hasSideEffects() || sideEffects.dependsOnSomething();
   }
 }
 
@@ -1859,13 +1825,11 @@
   final native.NativeBehavior nativeBehavior;
   native.NativeThrowBehavior throwBehavior;
 
-  HForeignCode(this.codeTemplate,
-      TypeMask type,
-      List<HInstruction> inputs,
+  HForeignCode(this.codeTemplate, TypeMask type, List<HInstruction> inputs,
       {this.isStatement: false,
-       SideEffects effects,
-       native.NativeBehavior nativeBehavior,
-       native.NativeThrowBehavior throwBehavior})
+      SideEffects effects,
+      native.NativeBehavior nativeBehavior,
+      native.NativeThrowBehavior throwBehavior})
       : this.nativeBehavior = nativeBehavior,
         this.throwBehavior = throwBehavior,
         super(type, inputs) {
@@ -1884,24 +1848,22 @@
   }
 
   HForeignCode.statement(js.Template codeTemplate, List<HInstruction> inputs,
-      SideEffects effects,
-      native.NativeBehavior nativeBehavior,
-      TypeMask type)
-      : this(codeTemplate, type, inputs, isStatement: true,
-             effects: effects, nativeBehavior: nativeBehavior);
+      SideEffects effects, native.NativeBehavior nativeBehavior, TypeMask type)
+      : this(codeTemplate, type, inputs,
+            isStatement: true,
+            effects: effects,
+            nativeBehavior: nativeBehavior);
 
   accept(HVisitor visitor) => visitor.visitForeignCode(this);
 
   bool isJsStatement() => isStatement;
-  bool canThrow() => canBeNull()
-      ? throwBehavior.canThrow
-      : throwBehavior.onNonNull.canThrow;
+  bool canThrow() =>
+      canBeNull() ? throwBehavior.canThrow : throwBehavior.onNonNull.canThrow;
 
   bool onlyThrowsNSM() => throwBehavior.isOnlyNullNSMGuard;
 
-  bool get isAllocation => nativeBehavior != null &&
-      nativeBehavior.isAllocation &&
-      !canBeNull();
+  bool get isAllocation =>
+      nativeBehavior != null && nativeBehavior.isAllocation && !canBeNull();
 
   String toString() => 'HForeignCode("${codeTemplate.source}",$inputs)';
 }
@@ -1916,7 +1878,7 @@
   List<DartType> instantiatedTypes;
 
   HForeignNew(this.element, TypeMask type, List<HInstruction> inputs,
-              [this.instantiatedTypes])
+      [this.instantiatedTypes])
       : super(type, inputs);
 
   accept(HVisitor visitor) => visitor.visitForeignNew(this);
@@ -1954,8 +1916,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitAdd(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.add;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.add;
   int typeCode() => HInstruction.ADD_TYPECODE;
   bool typeEquals(other) => other is HAdd;
   bool dataEquals(HInstruction other) => true;
@@ -1967,8 +1929,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitDivide(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.divide;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.divide;
   int typeCode() => HInstruction.DIVIDE_TYPECODE;
   bool typeEquals(other) => other is HDivide;
   bool dataEquals(HInstruction other) => true;
@@ -1980,8 +1942,7 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitMultiply(this);
 
-  BinaryOperation operation(ConstantSystem operations)
-      => operations.multiply;
+  BinaryOperation operation(ConstantSystem operations) => operations.multiply;
   int typeCode() => HInstruction.MULTIPLY_TYPECODE;
   bool typeEquals(other) => other is HMultiply;
   bool dataEquals(HInstruction other) => true;
@@ -1993,8 +1954,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitSubtract(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.subtract;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.subtract;
   int typeCode() => HInstruction.SUBTRACT_TYPECODE;
   bool typeEquals(other) => other is HSubtract;
   bool dataEquals(HInstruction other) => true;
@@ -2006,8 +1967,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitTruncatingDivide(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.truncatingDivide;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.truncatingDivide;
   int typeCode() => HInstruction.TRUNCATING_DIVIDE_TYPECODE;
   bool typeEquals(other) => other is HTruncatingDivide;
   bool dataEquals(HInstruction other) => true;
@@ -2048,8 +2009,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitShiftLeft(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.shiftLeft;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.shiftLeft;
   int typeCode() => HInstruction.SHIFT_LEFT_TYPECODE;
   bool typeEquals(other) => other is HShiftLeft;
   bool dataEquals(HInstruction other) => true;
@@ -2061,8 +2022,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitShiftRight(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.shiftRight;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.shiftRight;
   int typeCode() => HInstruction.SHIFT_RIGHT_TYPECODE;
   bool typeEquals(other) => other is HShiftRight;
   bool dataEquals(HInstruction other) => true;
@@ -2074,8 +2035,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitBitOr(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.bitOr;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.bitOr;
   int typeCode() => HInstruction.BIT_OR_TYPECODE;
   bool typeEquals(other) => other is HBitOr;
   bool dataEquals(HInstruction other) => true;
@@ -2087,8 +2048,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitBitAnd(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.bitAnd;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.bitAnd;
   int typeCode() => HInstruction.BIT_AND_TYPECODE;
   bool typeEquals(other) => other is HBitAnd;
   bool dataEquals(HInstruction other) => true;
@@ -2100,8 +2061,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitBitXor(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.bitXor;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.bitXor;
   int typeCode() => HInstruction.BIT_XOR_TYPECODE;
   bool typeEquals(other) => other is HBitXor;
   bool dataEquals(HInstruction other) => true;
@@ -2126,8 +2087,8 @@
       : super(input, selector, type);
   accept(HVisitor visitor) => visitor.visitNegate(this);
 
-  UnaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.negate;
+  UnaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.negate;
   int typeCode() => HInstruction.NEGATE_TYPECODE;
   bool typeEquals(other) => other is HNegate;
   bool dataEquals(HInstruction other) => true;
@@ -2138,8 +2099,8 @@
       : super(input, selector, type);
   accept(HVisitor visitor) => visitor.visitBitNot(this);
 
-  UnaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.bitNot;
+  UnaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.bitNot;
   int typeCode() => HInstruction.BIT_NOT_TYPECODE;
   bool typeEquals(other) => other is HBitNot;
   bool dataEquals(HInstruction other) => true;
@@ -2160,9 +2121,13 @@
 abstract class HJump extends HControlFlow {
   final JumpTarget target;
   final LabelDefinition label;
-  HJump(this.target) : label = null, super(const <HInstruction>[]);
+  HJump(this.target)
+      : label = null,
+        super(const <HInstruction>[]);
   HJump.toLabel(LabelDefinition label)
-      : label = label, target = label.target, super(const <HInstruction>[]);
+      : label = label,
+        target = label.target,
+        super(const <HInstruction>[]);
 }
 
 class HBreak extends HJump {
@@ -2175,7 +2140,8 @@
   HBreak(JumpTarget target, {bool this.breakSwitchContinueLoop: false})
       : super(target);
   HBreak.toLabel(LabelDefinition label)
-      : breakSwitchContinueLoop = false, super.toLabel(label);
+      : breakSwitchContinueLoop = false,
+        super.toLabel(label);
   toString() => (label != null) ? 'break ${label.labelName}' : 'break';
   accept(HVisitor visitor) => visitor.visitBreak(this);
 }
@@ -2289,8 +2255,7 @@
   * value from the start, whereas [HLocalValue]s need to be initialized first.
   */
 class HLocalValue extends HInstruction {
-  HLocalValue(Entity variable, TypeMask type)
-      : super(<HInstruction>[], type) {
+  HLocalValue(Entity variable, TypeMask type) : super(<HInstruction>[], type) {
     sourceElement = variable;
   }
 
@@ -2340,9 +2305,7 @@
       : this(variable, <HInstruction>[], type);
   HPhi.singleInput(Local variable, HInstruction input, TypeMask type)
       : this(variable, <HInstruction>[input], type);
-  HPhi.manyInputs(Local variable,
-                  List<HInstruction> inputs,
-                  TypeMask type)
+  HPhi.manyInputs(Local variable, List<HInstruction> inputs, TypeMask type)
       : this(variable, inputs, type);
 
   void addInput(HInstruction input) {
@@ -2363,13 +2326,13 @@
 
 class HIdentity extends HRelational {
   // Cached codegen decision.
-  String singleComparisonOp;  // null, '===', '=='
+  String singleComparisonOp; // null, '===', '=='
 
   HIdentity(left, right, selector, type) : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitIdentity(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.identity;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.identity;
   int typeCode() => HInstruction.IDENTITY_TYPECODE;
   bool typeEquals(other) => other is HIdentity;
   bool dataEquals(HInstruction other) => true;
@@ -2379,8 +2342,8 @@
   HGreater(left, right, selector, type) : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitGreater(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.greater;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.greater;
   int typeCode() => HInstruction.GREATER_TYPECODE;
   bool typeEquals(other) => other is HGreater;
   bool dataEquals(HInstruction other) => true;
@@ -2391,8 +2354,8 @@
       : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitGreaterEqual(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.greaterEqual;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.greaterEqual;
   int typeCode() => HInstruction.GREATER_EQUAL_TYPECODE;
   bool typeEquals(other) => other is HGreaterEqual;
   bool dataEquals(HInstruction other) => true;
@@ -2402,8 +2365,8 @@
   HLess(left, right, selector, type) : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitLess(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.less;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.less;
   int typeCode() => HInstruction.LESS_TYPECODE;
   bool typeEquals(other) => other is HLess;
   bool dataEquals(HInstruction other) => true;
@@ -2413,8 +2376,8 @@
   HLessEqual(left, right, selector, type) : super(left, right, selector, type);
   accept(HVisitor visitor) => visitor.visitLessEqual(this);
 
-  BinaryOperation operation(ConstantSystem constantSystem)
-      => constantSystem.lessEqual;
+  BinaryOperation operation(ConstantSystem constantSystem) =>
+      constantSystem.lessEqual;
   int typeCode() => HInstruction.LESS_EQUAL_TYPECODE;
   bool typeEquals(other) => other is HLessEqual;
   bool dataEquals(HInstruction other) => true;
@@ -2461,9 +2424,8 @@
 
 class HThrow extends HControlFlow {
   final bool isRethrow;
-  HThrow(HInstruction value,
-         SourceInformation sourceInformation,
-         {this.isRethrow: false})
+  HThrow(HInstruction value, SourceInformation sourceInformation,
+      {this.isRethrow: false})
       : super(<HInstruction>[value]) {
     this.sourceInformation = sourceInformation;
   }
@@ -2507,8 +2469,7 @@
   //     (a && C.JSArray_methods).get$first(a)
   //
 
-  HInterceptor(HInstruction receiver,
-               TypeMask type)
+  HInterceptor(HInstruction receiver, TypeMask type)
       : super(<HInstruction>[receiver], type) {
     this.sourceInformation = receiver.sourceInformation;
     sideEffects.clearAllSideEffects();
@@ -2532,9 +2493,9 @@
   int typeCode() => HInstruction.INTERCEPTOR_TYPECODE;
   bool typeEquals(other) => other is HInterceptor;
   bool dataEquals(HInterceptor other) {
-    return interceptedClasses == other.interceptedClasses
-        || (interceptedClasses.length == other.interceptedClasses.length
-            && interceptedClasses.containsAll(other.interceptedClasses));
+    return interceptedClasses == other.interceptedClasses ||
+        (interceptedClasses.length == other.interceptedClasses.length &&
+            interceptedClasses.containsAll(other.interceptedClasses));
   }
 }
 
@@ -2549,11 +2510,8 @@
  */
 class HOneShotInterceptor extends HInvokeDynamic {
   Set<ClassElement> interceptedClasses;
-  HOneShotInterceptor(Selector selector,
-                      TypeMask mask,
-                      List<HInstruction> inputs,
-                      TypeMask type,
-                      this.interceptedClasses)
+  HOneShotInterceptor(Selector selector, TypeMask mask,
+      List<HInstruction> inputs, TypeMask type, this.interceptedClasses)
       : super(selector, mask, null, inputs, type, true) {
     assert(inputs[0] is HConstant);
     assert(inputs[0].isNull());
@@ -2614,10 +2572,8 @@
  */
 class HIndex extends HInstruction {
   final Selector selector;
-  HIndex(HInstruction receiver,
-         HInstruction index,
-         this.selector,
-         TypeMask type)
+  HIndex(
+      HInstruction receiver, HInstruction index, this.selector, TypeMask type)
       : super(<HInstruction>[receiver, index], type) {
     sideEffects.clearAllSideEffects();
     sideEffects.clearAllDependencies();
@@ -2646,12 +2602,10 @@
  */
 class HIndexAssign extends HInstruction {
   final Selector selector;
-  HIndexAssign(HInstruction receiver,
-               HInstruction index,
-               HInstruction value,
-               this.selector)
+  HIndexAssign(HInstruction receiver, HInstruction index, HInstruction value,
+      this.selector)
       : super(<HInstruction>[receiver, index, value],
-              const TypeMask.nonNullEmpty()) {
+            const TypeMask.nonNullEmpty()) {
     sideEffects.clearAllSideEffects();
     sideEffects.clearAllDependencies();
     sideEffects.setChangesIndex();
@@ -2671,8 +2625,10 @@
 class HIs extends HInstruction {
   /// A check against a raw type: 'o is int', 'o is A'.
   static const int RAW_CHECK = 0;
+
   /// A check against a type with type arguments: 'o is List<int>', 'o is C<T>'.
   static const int COMPOUND_CHECK = 1;
+
   /// A check against a single type variable: 'o is T'.
   static const int VARIABLE_CHECK = 2;
 
@@ -2680,39 +2636,31 @@
   final int kind;
   final bool useInstanceOf;
 
-  HIs.direct(DartType typeExpression,
-             HInstruction expression,
-             TypeMask type)
+  HIs.direct(DartType typeExpression, HInstruction expression, TypeMask type)
       : this.internal(typeExpression, [expression], RAW_CHECK, type);
 
   // Pre-verified that the check can be done using 'instanceof'.
-  HIs.instanceOf(DartType typeExpression,
-                 HInstruction expression,
-                 TypeMask type)
+  HIs.instanceOf(
+      DartType typeExpression, HInstruction expression, TypeMask type)
       : this.internal(typeExpression, [expression], RAW_CHECK, type,
-          useInstanceOf: true);
+            useInstanceOf: true);
 
-  HIs.raw(DartType typeExpression,
-          HInstruction expression,
-          HInterceptor interceptor,
-          TypeMask type)
+  HIs.raw(DartType typeExpression, HInstruction expression,
+      HInterceptor interceptor, TypeMask type)
       : this.internal(
             typeExpression, [expression, interceptor], RAW_CHECK, type);
 
-  HIs.compound(DartType typeExpression,
-               HInstruction expression,
-               HInstruction call,
-               TypeMask type)
+  HIs.compound(DartType typeExpression, HInstruction expression,
+      HInstruction call, TypeMask type)
       : this.internal(typeExpression, [expression, call], COMPOUND_CHECK, type);
 
-  HIs.variable(DartType typeExpression,
-               HInstruction expression,
-               HInstruction call,
-               TypeMask type)
+  HIs.variable(DartType typeExpression, HInstruction expression,
+      HInstruction call, TypeMask type)
       : this.internal(typeExpression, [expression, call], VARIABLE_CHECK, type);
 
-  HIs.internal(this.typeExpression, List<HInstruction> inputs, this.kind,
-      TypeMask type, {bool this.useInstanceOf: false})
+  HIs.internal(
+      this.typeExpression, List<HInstruction> inputs, this.kind, TypeMask type,
+      {bool this.useInstanceOf: false})
       : super(inputs, type) {
     assert(kind >= RAW_CHECK && kind <= VARIABLE_CHECK);
     setUseGvn();
@@ -2743,8 +2691,7 @@
   bool typeEquals(HInstruction other) => other is HIs;
 
   bool dataEquals(HIs other) {
-    return typeExpression == other.typeExpression
-        && kind == other.kind;
+    return typeExpression == other.typeExpression && kind == other.kind;
   }
 }
 
@@ -2755,9 +2702,9 @@
  */
 class HIsViaInterceptor extends HLateInstruction {
   final DartType typeExpression;
-   HIsViaInterceptor(this.typeExpression, HInstruction interceptor,
-                     TypeMask type)
-       : super(<HInstruction>[interceptor], type) {
+  HIsViaInterceptor(
+      this.typeExpression, HInstruction interceptor, TypeMask type)
+      : super(<HInstruction>[interceptor], type) {
     setUseGvn();
   }
 
@@ -2777,7 +2724,7 @@
   final int kind;
   final Selector receiverTypeCheckSelector;
   final bool contextIsTypeArguments;
-  TypeMask checkedType;  // Not final because we refine it.
+  TypeMask checkedType; // Not final because we refine it.
 
   static const int CHECKED_MODE_CHECK = 0;
   static const int ARGUMENT_TYPE_CHECK = 1;
@@ -2785,33 +2732,30 @@
   static const int BOOLEAN_CONVERSION_CHECK = 3;
   static const int RECEIVER_TYPE_CHECK = 4;
 
-  HTypeConversion(this.typeExpression, this.kind,
-                  TypeMask type, HInstruction input,
-                  [this.receiverTypeCheckSelector])
+  HTypeConversion(
+      this.typeExpression, this.kind, TypeMask type, HInstruction input,
+      [this.receiverTypeCheckSelector])
       : contextIsTypeArguments = false,
         checkedType = type,
         super(<HInstruction>[input], type) {
     assert(!isReceiverTypeCheck || receiverTypeCheckSelector != null);
-    assert(typeExpression == null ||
-           typeExpression.kind != TypeKind.TYPEDEF);
+    assert(typeExpression == null || typeExpression.kind != TypeKind.TYPEDEF);
     sourceElement = input.sourceElement;
   }
 
   HTypeConversion.withTypeRepresentation(this.typeExpression, this.kind,
-                                         TypeMask type, HInstruction input,
-                                         HInstruction typeRepresentation)
+      TypeMask type, HInstruction input, HInstruction typeRepresentation)
       : contextIsTypeArguments = false,
         checkedType = type,
-        super(<HInstruction>[input, typeRepresentation],type),
+        super(<HInstruction>[input, typeRepresentation], type),
         receiverTypeCheckSelector = null {
     assert(typeExpression.kind != TypeKind.TYPEDEF);
     sourceElement = input.sourceElement;
   }
 
-  HTypeConversion.withContext(this.typeExpression, this.kind,
-                              TypeMask type, HInstruction input,
-                              HInstruction context,
-                              {bool this.contextIsTypeArguments})
+  HTypeConversion.withContext(this.typeExpression, this.kind, TypeMask type,
+      HInstruction input, HInstruction context,
+      {bool this.contextIsTypeArguments})
       : super(<HInstruction>[input, context], type),
         checkedType = type,
         receiverTypeCheckSelector = null {
@@ -2822,19 +2766,20 @@
   bool get hasTypeRepresentation {
     return typeExpression.isInterfaceType && inputs.length > 1;
   }
+
   HInstruction get typeRepresentation => inputs[1];
 
   bool get hasContext {
     return typeExpression.isFunctionType && inputs.length > 1;
   }
+
   HInstruction get context => inputs[1];
 
   HInstruction convertType(Compiler compiler, DartType type, int kind) {
     if (typeExpression == type) {
       // Don't omit a boolean conversion (which doesn't allow `null`) unless
       // this type conversion is already a boolean conversion.
-      if (kind != BOOLEAN_CONVERSION_CHECK ||
-          isBooleanConversionCheck) {
+      if (kind != BOOLEAN_CONVERSION_CHECK || isBooleanConversionCheck) {
         return this;
       }
     }
@@ -2842,9 +2787,9 @@
   }
 
   bool get isCheckedModeCheck {
-    return kind == CHECKED_MODE_CHECK
-        || kind == BOOLEAN_CONVERSION_CHECK;
+    return kind == CHECKED_MODE_CHECK || kind == BOOLEAN_CONVERSION_CHECK;
   }
+
   bool get isArgumentTypeCheck => kind == ARGUMENT_TYPE_CHECK;
   bool get isReceiverTypeCheck => kind == RECEIVER_TYPE_CHECK;
   bool get isCastTypeCheck => kind == CAST_TYPE_CHECK;
@@ -2860,10 +2805,10 @@
   bool isCodeMotionInvariant() => false;
 
   bool dataEquals(HTypeConversion other) {
-    return kind == other.kind
-        && typeExpression == other.typeExpression
-        && checkedType == other.checkedType
-        && receiverTypeCheckSelector == other.receiverTypeCheckSelector;
+    return kind == other.kind &&
+        typeExpression == other.typeExpression &&
+        checkedType == other.checkedType &&
+        receiverTypeCheckSelector == other.receiverTypeCheckSelector;
   }
 }
 
@@ -2877,8 +2822,8 @@
         this._isMovable = false,
         super(<HInstruction>[input], knownType);
 
-  HTypeKnown.witnessed(TypeMask knownType, HInstruction input,
-                       HInstruction witness)
+  HTypeKnown.witnessed(
+      TypeMask knownType, HInstruction input, HInstruction witness)
       : this.knownType = knownType,
         this._isMovable = true,
         super(<HInstruction>[input, witness], knownType);
@@ -2898,8 +2843,8 @@
   bool get isMovable => _isMovable && useGvn();
 
   bool dataEquals(HTypeKnown other) {
-    return knownType == other.knownType
-        && instructionType == other.instructionType;
+    return knownType == other.knownType &&
+        instructionType == other.instructionType;
   }
 }
 
@@ -2986,7 +2931,6 @@
   }
 }
 
-
 /**
  * Embedding of a [HBlockInformation] for block-structure based traversal
  * in a dominator based flow traversal by attaching it to a basic block.
@@ -2999,7 +2943,6 @@
   HBlockFlow(this.body, this.continuation);
 }
 
-
 /**
  * Information about a syntactic-like structure.
  */
@@ -3009,7 +2952,6 @@
   bool accept(HBlockInformationVisitor visitor);
 }
 
-
 /**
  * Information about a statement-like structure.
  */
@@ -3017,7 +2959,6 @@
   bool accept(HStatementInformationVisitor visitor);
 }
 
-
 /**
  * Information about an expression-like structure.
  */
@@ -3026,7 +2967,6 @@
   HInstruction get conditionExpression;
 }
 
-
 abstract class HStatementInformationVisitor {
   bool visitLabeledBlockInfo(HLabeledBlockInformation info);
   bool visitLoopInfo(HLoopBlockInformation info);
@@ -3039,17 +2979,13 @@
   bool visitSubGraphInfo(HSubGraphBlockInformation info);
 }
 
-
 abstract class HExpressionInformationVisitor {
   bool visitAndOrInfo(HAndOrBlockInformation info);
   bool visitSubExpressionInfo(HSubExpressionBlockInformation info);
 }
 
-
 abstract class HBlockInformationVisitor
-    implements HStatementInformationVisitor, HExpressionInformationVisitor {
-}
-
+    implements HStatementInformationVisitor, HExpressionInformationVisitor {}
 
 /**
  * Generic class wrapping a [SubGraph] as a block-information until
@@ -3063,7 +2999,7 @@
   HBasicBlock get end => subGraph.end;
 
   bool accept(HStatementInformationVisitor visitor) =>
-    visitor.visitSubGraphInfo(this);
+      visitor.visitSubGraphInfo(this);
 }
 
 /**
@@ -3080,7 +3016,7 @@
   HInstruction get conditionExpression => subExpression.conditionExpression;
 
   bool accept(HExpressionInformationVisitor visitor) =>
-    visitor.visitSubExpressionInfo(this);
+      visitor.visitSubExpressionInfo(this);
 }
 
 /** A sequence of separate statements. */
@@ -3092,7 +3028,7 @@
   HBasicBlock get end => statements.last.end;
 
   bool accept(HStatementInformationVisitor visitor) =>
-    visitor.visitSequenceInfo(this);
+      visitor.visitSequenceInfo(this);
 }
 
 class HLabeledBlockInformation implements HStatementInformation {
@@ -3101,21 +3037,20 @@
   final JumpTarget target;
   final bool isContinue;
 
-  HLabeledBlockInformation(this.body,
-                           List<LabelDefinition> labels,
-                           {this.isContinue: false}) :
-      this.labels = labels, this.target = labels[0].target;
+  HLabeledBlockInformation(this.body, List<LabelDefinition> labels,
+      {this.isContinue: false})
+      : this.labels = labels,
+        this.target = labels[0].target;
 
-  HLabeledBlockInformation.implicit(this.body,
-                                    this.target,
-                                    {this.isContinue: false})
-      : this.labels = const<LabelDefinition>[];
+  HLabeledBlockInformation.implicit(this.body, this.target,
+      {this.isContinue: false})
+      : this.labels = const <LabelDefinition>[];
 
   HBasicBlock get start => body.start;
   HBasicBlock get end => body.end;
 
   bool accept(HStatementInformationVisitor visitor) =>
-    visitor.visitLabeledBlockInfo(this);
+      visitor.visitLabeledBlockInfo(this);
 }
 
 class HLoopBlockInformation implements HStatementInformation {
@@ -3135,14 +3070,8 @@
   final List<LabelDefinition> labels;
   final SourceInformation sourceInformation;
 
-  HLoopBlockInformation(this.kind,
-                        this.initializer,
-                        this.condition,
-                        this.body,
-                        this.updates,
-                        this.target,
-                        this.labels,
-                        this.sourceInformation) {
+  HLoopBlockInformation(this.kind, this.initializer, this.condition, this.body,
+      this.updates, this.target, this.labels, this.sourceInformation) {
     assert(
         (kind == DO_WHILE_LOOP ? body.start : condition.start).isLoopHeader());
   }
@@ -3168,31 +3097,27 @@
   }
 
   bool accept(HStatementInformationVisitor visitor) =>
-    visitor.visitLoopInfo(this);
+      visitor.visitLoopInfo(this);
 }
 
 class HIfBlockInformation implements HStatementInformation {
   final HExpressionInformation condition;
   final HStatementInformation thenGraph;
   final HStatementInformation elseGraph;
-  HIfBlockInformation(this.condition,
-                      this.thenGraph,
-                      this.elseGraph);
+  HIfBlockInformation(this.condition, this.thenGraph, this.elseGraph);
 
   HBasicBlock get start => condition.start;
   HBasicBlock get end => elseGraph == null ? thenGraph.end : elseGraph.end;
 
   bool accept(HStatementInformationVisitor visitor) =>
-    visitor.visitIfInfo(this);
+      visitor.visitIfInfo(this);
 }
 
 class HAndOrBlockInformation implements HExpressionInformation {
   final bool isAnd;
   final HExpressionInformation left;
   final HExpressionInformation right;
-  HAndOrBlockInformation(this.isAnd,
-                         this.left,
-                         this.right);
+  HAndOrBlockInformation(this.isAnd, this.left, this.right);
 
   HBasicBlock get start => left.start;
   HBasicBlock get end => right.end;
@@ -3201,8 +3126,9 @@
   HInstruction get conditionExpression {
     return null;
   }
+
   bool accept(HExpressionInformationVisitor visitor) =>
-    visitor.visitAndOrInfo(this);
+      visitor.visitAndOrInfo(this);
 }
 
 class HTryBlockInformation implements HStatementInformation {
@@ -3210,17 +3136,15 @@
   final HLocalValue catchVariable;
   final HStatementInformation catchBlock;
   final HStatementInformation finallyBlock;
-  HTryBlockInformation(this.body,
-                       this.catchVariable,
-                       this.catchBlock,
-                       this.finallyBlock);
+  HTryBlockInformation(
+      this.body, this.catchVariable, this.catchBlock, this.finallyBlock);
 
   HBasicBlock get start => body.start;
   HBasicBlock get end =>
       finallyBlock == null ? catchBlock.end : finallyBlock.end;
 
   bool accept(HStatementInformationVisitor visitor) =>
-    visitor.visitTryInfo(this);
+      visitor.visitTryInfo(this);
 }
 
 class HSwitchBlockInformation implements HStatementInformation {
@@ -3229,10 +3153,8 @@
   final JumpTarget target;
   final List<LabelDefinition> labels;
 
-  HSwitchBlockInformation(this.expression,
-                          this.statements,
-                          this.target,
-                          this.labels);
+  HSwitchBlockInformation(
+      this.expression, this.statements, this.target, this.labels);
 
   HBasicBlock get start => expression.start;
   HBasicBlock get end {
@@ -3251,17 +3173,15 @@
 
   final bool hasReceiver;
 
-  HReadTypeVariable(this.dartType,
-                    HInstruction receiver,
-                    TypeMask instructionType)
+  HReadTypeVariable(
+      this.dartType, HInstruction receiver, TypeMask instructionType)
       : hasReceiver = true,
         super(<HInstruction>[receiver], instructionType) {
     setUseGvn();
   }
 
-  HReadTypeVariable.noReceiver(this.dartType,
-                               HInstruction typeArgument,
-                               TypeMask instructionType)
+  HReadTypeVariable.noReceiver(
+      this.dartType, HInstruction typeArgument, TypeMask instructionType)
       : hasReceiver = false,
         super(<HInstruction>[typeArgument], instructionType) {
     setUseGvn();
@@ -3275,17 +3195,16 @@
   bool typeEquals(HInstruction other) => other is HReadTypeVariable;
 
   bool dataEquals(HReadTypeVariable other) {
-    return dartType.element == other.dartType.element
-        && hasReceiver == other.hasReceiver;
+    return dartType.element == other.dartType.element &&
+        hasReceiver == other.hasReceiver;
   }
 }
 
 abstract class HRuntimeType extends HInstruction {
   final DartType dartType;
 
-  HRuntimeType(List<HInstruction> inputs,
-               this.dartType,
-               TypeMask instructionType)
+  HRuntimeType(
+      List<HInstruction> inputs, this.dartType, TypeMask instructionType)
       : super(inputs, instructionType) {
     setUseGvn();
   }
@@ -3306,9 +3225,8 @@
 }
 
 class HFunctionType extends HRuntimeType {
-  HFunctionType(List<HInstruction> inputs,
-                FunctionType dartType,
-                TypeMask instructionType)
+  HFunctionType(List<HInstruction> inputs, FunctionType dartType,
+      TypeMask instructionType)
       : super(inputs, dartType, instructionType);
 
   accept(HVisitor visitor) => visitor.visitFunctionType(this);
@@ -3330,9 +3248,8 @@
 }
 
 class HInterfaceType extends HRuntimeType {
-  HInterfaceType(List<HInstruction> inputs,
-                 InterfaceType dartType,
-                 TypeMask instructionType)
+  HInterfaceType(List<HInstruction> inputs, InterfaceType dartType,
+      TypeMask instructionType)
       : super(inputs, dartType, instructionType);
 
   accept(HVisitor visitor) => visitor.visitInterfaceType(this);
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index 78d5391..4f67597 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -2,34 +2,24 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import '../common/codegen.dart' show
-    CodegenRegistry,
-    CodegenWorkItem;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
+import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
 import '../constants/constant_system.dart';
 import '../constants/values.dart';
-import '../core_types.dart' show
-    CoreClasses;
+import '../core_types.dart' show CoreClasses;
 import '../dart_types.dart';
 import '../elements/elements.dart';
 import '../js/js.dart' as js;
-import '../js_backend/backend_helpers.dart' show
-    BackendHelpers;
+import '../js_backend/backend_helpers.dart' show BackendHelpers;
 import '../js_backend/js_backend.dart';
 import '../native/native.dart' as native;
 import '../tree/tree.dart' as ast;
 import '../types/types.dart';
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/side_effects.dart' show
-    SideEffects;
+import '../universe/selector.dart' show Selector;
+import '../universe/side_effects.dart' show SideEffects;
 import '../util/util.dart';
-import '../world.dart' show
-    ClassWorld,
-    World;
+import '../world.dart' show ClassWorld, World;
 
 import 'nodes.dart';
 import 'types_propagation.dart';
@@ -64,40 +54,40 @@
     bool trustPrimitives = compiler.options.trustPrimitives;
     measure(() {
       List<OptimizationPhase> phases = <OptimizationPhase>[
-          // Run trivial instruction simplification first to optimize
-          // some patterns useful for type conversion.
-          new SsaInstructionSimplifier(constantSystem, backend, this, work),
-          new SsaTypeConversionInserter(compiler),
-          new SsaRedundantPhiEliminator(),
-          new SsaDeadPhiEliminator(),
-          new SsaTypePropagator(compiler),
-          // After type propagation, more instructions can be
-          // simplified.
-          new SsaInstructionSimplifier(constantSystem, backend, this, work),
-          new SsaCheckInserter(
-              trustPrimitives, backend, work, context.boundsChecked),
-          new SsaInstructionSimplifier(constantSystem, backend, this, work),
-          new SsaCheckInserter(
-              trustPrimitives, backend, work, context.boundsChecked),
-          new SsaTypePropagator(compiler),
-          // Run a dead code eliminator before LICM because dead
-          // interceptors are often in the way of LICM'able instructions.
-          new SsaDeadCodeEliminator(compiler, this),
-          new SsaGlobalValueNumberer(compiler),
-          // After GVN, some instructions might need their type to be
-          // updated because they now have different inputs.
-          new SsaTypePropagator(compiler),
-          new SsaCodeMotion(),
-          new SsaLoadElimination(compiler),
-          new SsaRedundantPhiEliminator(),
-          new SsaDeadPhiEliminator(),
-          new SsaTypePropagator(compiler),
-          new SsaValueRangeAnalyzer(compiler, constantSystem, this, work),
-          // Previous optimizations may have generated new
-          // opportunities for instruction simplification.
-          new SsaInstructionSimplifier(constantSystem, backend, this, work),
-          new SsaCheckInserter(
-              trustPrimitives, backend, work, context.boundsChecked),
+        // Run trivial instruction simplification first to optimize
+        // some patterns useful for type conversion.
+        new SsaInstructionSimplifier(constantSystem, backend, this, work),
+        new SsaTypeConversionInserter(compiler),
+        new SsaRedundantPhiEliminator(),
+        new SsaDeadPhiEliminator(),
+        new SsaTypePropagator(compiler),
+        // After type propagation, more instructions can be
+        // simplified.
+        new SsaInstructionSimplifier(constantSystem, backend, this, work),
+        new SsaCheckInserter(
+            trustPrimitives, backend, work, context.boundsChecked),
+        new SsaInstructionSimplifier(constantSystem, backend, this, work),
+        new SsaCheckInserter(
+            trustPrimitives, backend, work, context.boundsChecked),
+        new SsaTypePropagator(compiler),
+        // Run a dead code eliminator before LICM because dead
+        // interceptors are often in the way of LICM'able instructions.
+        new SsaDeadCodeEliminator(compiler, this),
+        new SsaGlobalValueNumberer(compiler),
+        // After GVN, some instructions might need their type to be
+        // updated because they now have different inputs.
+        new SsaTypePropagator(compiler),
+        new SsaCodeMotion(),
+        new SsaLoadElimination(compiler),
+        new SsaRedundantPhiEliminator(),
+        new SsaDeadPhiEliminator(),
+        new SsaTypePropagator(compiler),
+        new SsaValueRangeAnalyzer(compiler, constantSystem, this, work),
+        // Previous optimizations may have generated new
+        // opportunities for instruction simplification.
+        new SsaInstructionSimplifier(constantSystem, backend, this, work),
+        new SsaCheckInserter(
+            trustPrimitives, backend, work, context.boundsChecked),
       ];
       phases.forEach(runPhase);
 
@@ -110,22 +100,22 @@
       runPhase(dce);
       if (dce.eliminatedSideEffects) {
         phases = <OptimizationPhase>[
-            new SsaTypePropagator(compiler),
-            new SsaGlobalValueNumberer(compiler),
-            new SsaCodeMotion(),
-            new SsaValueRangeAnalyzer(compiler, constantSystem, this, work),
-            new SsaInstructionSimplifier(constantSystem, backend, this, work),
-            new SsaCheckInserter(
-                trustPrimitives, backend, work, context.boundsChecked),
-            new SsaSimplifyInterceptors(compiler, constantSystem, work),
-            new SsaDeadCodeEliminator(compiler, this),
+          new SsaTypePropagator(compiler),
+          new SsaGlobalValueNumberer(compiler),
+          new SsaCodeMotion(),
+          new SsaValueRangeAnalyzer(compiler, constantSystem, this, work),
+          new SsaInstructionSimplifier(constantSystem, backend, this, work),
+          new SsaCheckInserter(
+              trustPrimitives, backend, work, context.boundsChecked),
+          new SsaSimplifyInterceptors(compiler, constantSystem, work),
+          new SsaDeadCodeEliminator(compiler, this),
         ];
       } else {
         phases = <OptimizationPhase>[
-            new SsaTypePropagator(compiler),
-            // Run the simplifier to remove unneeded type checks inserted by
-            // type propagation.
-            new SsaInstructionSimplifier(constantSystem, backend, this, work),
+          new SsaTypePropagator(compiler),
+          // Run the simplifier to remove unneeded type checks inserted by
+          // type propagation.
+          new SsaInstructionSimplifier(constantSystem, backend, this, work),
         ];
       }
       phases.forEach(runPhase);
@@ -160,7 +150,6 @@
  */
 class SsaInstructionSimplifier extends HBaseVisitor
     implements OptimizationPhase {
-
   // We don't produce constant-folded strings longer than this unless they have
   // a single use.  This protects against exponentially large constant folded
   // strings.
@@ -174,10 +163,8 @@
   Compiler get compiler => backend.compiler;
   final SsaOptimizerTask optimizer;
 
-  SsaInstructionSimplifier(this.constantSystem,
-                           this.backend,
-                           this.optimizer,
-                           this.work);
+  SsaInstructionSimplifier(
+      this.constantSystem, this.backend, this.optimizer, this.work);
 
   CoreClasses get coreClasses => compiler.coreClasses;
 
@@ -201,12 +188,12 @@
         // might be that an operation thought to return double, can be
         // simplified to an int. For example:
         // `2.5 * 10`.
-        if (!(replacement.isNumberOrNull(compiler)
-              && instruction.isNumberOrNull(compiler))) {
+        if (!(replacement.isNumberOrNull(compiler) &&
+            instruction.isNumberOrNull(compiler))) {
           // If we can replace [instruction] with [replacement], then
           // [replacement]'s type can be narrowed.
-          TypeMask newType = replacement.instructionType.intersection(
-              instruction.instructionType, compiler.world);
+          TypeMask newType = replacement.instructionType
+              .intersection(instruction.instructionType, compiler.world);
           replacement.instructionType = newType;
         }
 
@@ -265,8 +252,8 @@
     // body. If that happens then we should not forward the constant value to
     // its uses since since the uses reachable from the assignment may have
     // values in addition to the constant passed to the function.
-    if (node.usedBy.any((user) =>
-            user is HLocalSet && identical(user.local, node))) {
+    if (node.usedBy
+        .any((user) => user is HLocalSet && identical(user.local, node))) {
       return node;
     }
     propagateConstantValueToUses(node);
@@ -341,14 +328,13 @@
       TypeMask resultType = backend.positiveIntType;
       // If we already have computed a more specific type, keep that type.
       if (HInstruction.isInstanceOf(
-              actualType, helpers.jsUInt31Class, classWorld)) {
+          actualType, helpers.jsUInt31Class, classWorld)) {
         resultType = backend.uint31Type;
       } else if (HInstruction.isInstanceOf(
-              actualType, helpers.jsUInt32Class, classWorld)) {
+          actualType, helpers.jsUInt32Class, classWorld)) {
         resultType = backend.uint32Type;
       }
-      HFieldGet result = new HFieldGet(
-          element, actualReceiver, resultType,
+      HFieldGet result = new HFieldGet(element, actualReceiver, resultType,
           isAssignable: !isFixed);
       return result;
     } else if (actualReceiver.isConstantMap()) {
@@ -382,7 +368,7 @@
 
     bool applies(Element element) {
       return selector.applies(element, world) &&
-             (mask == null || mask.canHit(element, selector, world));
+          (mask == null || mask.canHit(element, selector, world));
     }
 
     if (selector.isCall || selector.isOperator) {
@@ -408,12 +394,10 @@
           // make sure the receiver and the argument are not null.
           // TODO(sra): Do this via [node.specializer].
           HInstruction argument = node.inputs[2];
-          if (argument.isString(compiler)
-              && !input.canBeNull()) {
+          if (argument.isString(compiler) && !input.canBeNull()) {
             return new HStringConcat(input, argument, node.instructionType);
           }
-        } else if (applies(helpers.jsStringToString)
-                   && !input.canBeNull()) {
+        } else if (applies(helpers.jsStringToString) && !input.canBeNull()) {
           return input;
         }
       }
@@ -426,9 +410,8 @@
         // bounds check on removeLast). Once we start inlining, the
         // bounds check will become explicit, so we won't need this
         // optimization.
-        HInvokeDynamicMethod result = new HInvokeDynamicMethod(
-            node.selector, node.mask,
-            node.inputs.sublist(1), node.instructionType);
+        HInvokeDynamicMethod result = new HInvokeDynamicMethod(node.selector,
+            node.mask, node.inputs.sublist(1), node.instructionType);
         result.element = target;
         return result;
       }
@@ -453,11 +436,12 @@
     Element element =
         compiler.world.locateSingleElement(node.selector, receiverType);
     // TODO(ngeoffray): Also fold if it's a getter or variable.
-    if (element != null
-        && element.isFunction
+    if (element != null &&
+        element.isFunction
         // If we found out that the only target is a [:noSuchMethod:],
         // we just ignore it.
-        && element.name == node.selector.name) {
+        &&
+        element.name == node.selector.name) {
       FunctionElement method = element;
 
       if (backend.isNative(method)) {
@@ -468,8 +452,7 @@
         // we should pass the default values.
         FunctionSignature parameters = method.functionSignature;
         if (parameters.optionalParameterCount == 0 ||
-            parameters.parameterCount ==
-                node.selector.argumentCount) {
+            parameters.parameterCount == node.selector.argumentCount) {
           node.element = element;
         }
       }
@@ -477,8 +460,8 @@
     return node;
   }
 
-  HInstruction tryInlineNativeMethod(HInvokeDynamicMethod node,
-                                     FunctionElement method) {
+  HInstruction tryInlineNativeMethod(
+      HInvokeDynamicMethod node, FunctionElement method) {
     // Enable direct calls to a native method only if we don't run in checked
     // mode, where the Dart version may have type annotations on parameters and
     // return type that it should check.
@@ -505,7 +488,7 @@
     // preserve the number of arguments, so check only the actual arguments.
 
     List<HInstruction> inputs = node.inputs.sublist(1);
-    int inputPosition = 1;  // Skip receiver.
+    int inputPosition = 1; // Skip receiver.
     bool canInline = true;
     signature.forEachParameter((ParameterElement element) {
       if (inputPosition++ < inputs.length && canInline) {
@@ -551,9 +534,8 @@
     return node;
   }
 
-  HInstruction foldBinary(BinaryOperation operation,
-                          HInstruction left,
-                          HInstruction right) {
+  HInstruction foldBinary(
+      BinaryOperation operation, HInstruction left, HInstruction right) {
     if (left is HConstant && right is HConstant) {
       HConstant op1 = left;
       HConstant op2 = right;
@@ -650,7 +632,6 @@
       return compareConstant(right, left);
     }
 
-
     if (identical(left.nonCheck(), right.nonCheck())) {
       // Avoid constant-folding `identical(x, x)` when `x` might be double.  The
       // dart2js runtime has not always been consistent with the Dart
@@ -668,9 +649,8 @@
     return newInstruction == null ? super.visitIdentity(node) : newInstruction;
   }
 
-  void simplifyCondition(HBasicBlock block,
-                         HInstruction condition,
-                         bool value) {
+  void simplifyCondition(
+      HBasicBlock block, HInstruction condition, bool value) {
     condition.dominatedUsers(block.first).forEach((user) {
       HInstruction newCondition = graph.addConstantBool(value, compiler);
       user.changeUse(condition, newCondition);
@@ -690,8 +670,8 @@
       // simplify the nested use of the condition in that case, so
       // we look for all dominating negated conditions and replace
       // nested uses of them with true or false.
-      Iterable<HInstruction> dominating = condition.usedBy.where((user) =>
-          user is HNot && user.dominates(node));
+      Iterable<HInstruction> dominating = condition.usedBy
+          .where((user) => user is HNot && user.dominates(node));
       dominating.forEach((hoisted) {
         simplifyCondition(node.thenBlock, hoisted, false);
         simplifyCondition(node.elseBlock, hoisted, true);
@@ -753,13 +733,13 @@
         // type int or double.
       }
     } else if (expression.canBePrimitiveNumber(compiler) &&
-               element == coreClasses.intClass) {
+        element == coreClasses.intClass) {
       // We let the JS semantics decide for that check.
       return node;
-    // We need the [:hasTypeArguments:] check because we don't have
-    // the notion of generics in the backend. For example, [:this:] in
-    // a class [:A<T>:], is currently always considered to have the
-    // raw type.
+      // We need the [:hasTypeArguments:] check because we don't have
+      // the notion of generics in the backend. For example, [:this:] in
+      // a class [:A<T>:], is currently always considered to have the
+      // raw type.
     } else if (!RuntimeTypes.hasTypeArguments(type)) {
       TypeMask expressionMask = expression.instructionType;
       assert(TypeMask.assertIsNormalized(expressionMask, classWorld));
@@ -806,8 +786,8 @@
     return inputType.isInMask(checkedType, classWorld) ? input : node;
   }
 
-  VariableElement findConcreteFieldForDynamicAccess(HInstruction receiver,
-                                                    Selector selector) {
+  VariableElement findConcreteFieldForDynamicAccess(
+      HInstruction receiver, Selector selector) {
     TypeMask receiverType = receiver.instructionType;
     return compiler.world.locateSingleField(selector, receiverType);
   }
@@ -882,8 +862,7 @@
       if (folded != node) return folded;
     }
     HInstruction receiver = node.getDartReceiver(compiler);
-    Element field = findConcreteFieldForDynamicAccess(
-        receiver, node.selector);
+    Element field = findConcreteFieldForDynamicAccess(receiver, node.selector);
     if (field == null) return node;
     return directFieldGet(receiver, field);
   }
@@ -894,14 +873,12 @@
     TypeMask type;
     if (backend.isNative(field.enclosingClass)) {
       type = TypeMaskFactory.fromNativeBehavior(
-          native.NativeBehavior.ofFieldLoad(field, compiler),
-          compiler);
+          native.NativeBehavior.ofFieldLoad(field, compiler), compiler);
     } else {
       type = TypeMaskFactory.inferredTypeForElement(field, compiler);
     }
 
-    return new HFieldGet(
-        field, receiver, type, isAssignable: isAssignable);
+    return new HFieldGet(field, receiver, type, isAssignable: isAssignable);
   }
 
   HInstruction visitInvokeDynamicSetter(HInvokeDynamicSetter node) {
@@ -925,10 +902,8 @@
         // inline this access.
         return node;
       }
-      HInstruction other = value.convertType(
-          compiler,
-          type,
-          HTypeConversion.CHECKED_MODE_CHECK);
+      HInstruction other =
+          value.convertType(compiler, type, HTypeConversion.CHECKED_MODE_CHECK);
       if (other != value) {
         node.block.addBefore(node, other);
         value = other;
@@ -1013,8 +988,8 @@
         if (!intConstant.isUInt32()) return node;
       }
       PrimitiveConstantValue primitive = constant.constant;
-      return graph.addConstant(constantSystem.createString(
-          primitive.toDartString()), compiler);
+      return graph.addConstant(
+          constantSystem.createString(primitive.toDartString()), compiler);
     }
     return node;
   }
@@ -1032,10 +1007,8 @@
   final String name = "SsaCheckInserter";
   HGraph graph;
 
-  SsaCheckInserter(this.trustPrimitives,
-                   this.backend,
-                   this.work,
-                   this.boundsChecked);
+  SsaCheckInserter(
+      this.trustPrimitives, this.backend, this.work, this.boundsChecked);
 
   BackendHelpers get helpers => backend.helpers;
 
@@ -1059,9 +1032,8 @@
     }
   }
 
-  HBoundsCheck insertBoundsCheck(HInstruction indexNode,
-                                 HInstruction array,
-                                 HInstruction indexArgument) {
+  HBoundsCheck insertBoundsCheck(
+      HInstruction indexNode, HInstruction array, HInstruction indexArgument) {
     Compiler compiler = backend.compiler;
     HFieldGet length = new HFieldGet(
         helpers.jsIndexableLength, array, backend.positiveIntType,
@@ -1071,8 +1043,7 @@
     TypeMask type = indexArgument.isPositiveInteger(compiler)
         ? indexArgument.instructionType
         : backend.positiveIntType;
-    HBoundsCheck check = new HBoundsCheck(
-        indexArgument, length, array, type);
+    HBoundsCheck check = new HBoundsCheck(indexArgument, length, array, type);
     indexNode.block.addBefore(indexNode, check);
     // If the index input to the bounds check was not known to be an integer
     // then we replace its uses with the bounds check, which is known to be an
@@ -1131,10 +1102,8 @@
   HInstruction get zapInstruction {
     if (zapInstructionCache == null) {
       // A constant with no type does not pollute types at phi nodes.
-      ConstantValue constant =
-          new SyntheticConstantValue(
-              SyntheticConstantKind.EMPTY_VALUE,
-              const TypeMask.nonNullEmpty());
+      ConstantValue constant = new SyntheticConstantValue(
+          SyntheticConstantKind.EMPTY_VALUE, const TypeMask.nonNullEmpty());
       zapInstructionCache = analyzer.graph.addConstant(constant, compiler);
     }
     return zapInstructionCache;
@@ -1181,8 +1150,8 @@
     HInstruction receiver = instruction.getDartReceiver(compiler);
     HInstruction current = instruction.next;
     do {
-      if ((current.getDartReceiver(compiler) == receiver)
-          && current.canThrow()) {
+      if ((current.getDartReceiver(compiler) == receiver) &&
+          current.canThrow()) {
         return true;
       }
       if (current is HForeignCode &&
@@ -1232,15 +1201,15 @@
       }
       return false;
     }
-    return instruction.isAllocation
-        && instruction.isPure()
-        && trivialDeadStoreReceivers.putIfAbsent(instruction,
-            () => instruction.usedBy.every(isDeadUse));
+    return instruction.isAllocation &&
+        instruction.isPure() &&
+        trivialDeadStoreReceivers.putIfAbsent(
+            instruction, () => instruction.usedBy.every(isDeadUse));
   }
 
   bool isTrivialDeadStore(HInstruction instruction) {
-    return instruction is HFieldSet
-        && isTrivialDeadStoreReceiver(instruction.getDartReceiver(compiler));
+    return instruction is HFieldSet &&
+        isTrivialDeadStoreReceiver(instruction.getDartReceiver(compiler));
   }
 
   bool isDeadCode(HInstruction instruction) {
@@ -1252,9 +1221,9 @@
         hasFollowingThrowingNSM(instruction)) {
       return true;
     }
-    return !instruction.canThrow()
-        && instruction is !HParameterValue
-        && instruction is !HLocalSet;
+    return !instruction.canThrow() &&
+        instruction is! HParameterValue &&
+        instruction is! HLocalSet;
   }
 
   void visitGraph(HGraph graph) {
@@ -1272,8 +1241,8 @@
     while (instruction != null) {
       var previous = instruction.previous;
       if (isDeadBlock) {
-        eliminatedSideEffects = eliminatedSideEffects ||
-            instruction.sideEffects.hasSideEffects();
+        eliminatedSideEffects =
+            eliminatedSideEffects || instruction.sideEffects.hasSideEffects();
         removeUsers(instruction);
         block.remove(instruction);
       } else if (isDeadCode(instruction)) {
@@ -1306,8 +1275,8 @@
       // Run through the phis of the block and replace them with their input
       // that comes from the only live predecessor if that dominates the phi.
       block.forEachPhi((HPhi phi) {
-        HInstruction replacement = (indexOfLive >= 0)
-            ? phi.inputs[indexOfLive] : zapInstruction;
+        HInstruction replacement =
+            (indexOfLive >= 0) ? phi.inputs[indexOfLive] : zapInstruction;
         if (replacement.dominates(phi)) {
           block.rewrite(phi, replacement);
           block.removePhi(phi);
@@ -1401,9 +1370,7 @@
           if (!input.isConstantInteger()) continue;
           IntConstantValue constant = input.constant;
           int label = constant.primitiveValue;
-          if (!liveLabels.contains(label) &&
-              label <= upper &&
-              label >= lower) {
+          if (!liveLabels.contains(label) && label <= upper && label >= lower) {
             markBlockLive(node.block.successors[pos - 1]);
             liveLabels.add(label);
           }
@@ -1431,7 +1398,7 @@
     for (final block in graph.blocks) {
       block.forEachPhi((HPhi phi) {
         for (final user in phi.usedBy) {
-          if (user is !HPhi) {
+          if (user is! HPhi) {
             worklist.add(phi);
             livePhis.add(phi);
             break;
@@ -1465,7 +1432,8 @@
         next = current.next;
         if (!livePhis.contains(current)
             // TODO(ahe): Not sure the following is correct.
-            && current.usedBy.isEmpty) {
+            &&
+            current.usedBy.isEmpty) {
           block.removePhi(current);
         }
         current = next;
@@ -1540,8 +1508,9 @@
   void visitGraph(HGraph graph) {
     computeChangesFlags(graph);
     moveLoopInvariantCode(graph);
-    List<GvnWorkItem> workQueue =
-        <GvnWorkItem>[new GvnWorkItem(graph.entry, new ValueSet())];
+    List<GvnWorkItem> workQueue = <GvnWorkItem>[
+      new GvnWorkItem(graph.entry, new ValueSet())
+    ];
     do {
       GvnWorkItem item = workQueue.removeLast();
       visitBasicBlock(item.block, item.valueSet, workQueue);
@@ -1567,9 +1536,8 @@
     }
   }
 
-  void moveLoopInvariantCodeFromBlock(HBasicBlock block,
-                                      HBasicBlock loopHeader,
-                                      int changesFlags) {
+  void moveLoopInvariantCodeFromBlock(
+      HBasicBlock block, HBasicBlock loopHeader, int changesFlags) {
     assert(block.parentLoopHeader == loopHeader || block == loopHeader);
     HBasicBlock preheader = loopHeader.predecessors[0];
     int dependsFlags = SideEffects.computeDependsOnFlags(changesFlags);
@@ -1577,19 +1545,20 @@
     bool isLoopAlwaysTaken() {
       HInstruction instruction = loopHeader.last;
       assert(instruction is HGoto || instruction is HLoopBranch);
-      return instruction is HGoto
-          || instruction.inputs[0].isConstantTrue();
+      return instruction is HGoto || instruction.inputs[0].isConstantTrue();
     }
     bool firstInstructionInLoop = block == loopHeader
         // Compensate for lack of code motion.
-        || (blockChangesFlags[loopHeader.id] == 0
-            && isLoopAlwaysTaken()
-            && loopHeader.successors[0] == block);
+        ||
+        (blockChangesFlags[loopHeader.id] == 0 &&
+            isLoopAlwaysTaken() &&
+            loopHeader.successors[0] == block);
     while (instruction != null) {
       HInstruction next = instruction.next;
-      if (instruction.useGvn() && instruction.isMovable
-          && (!instruction.canThrow() || firstInstructionInLoop)
-          && !instruction.sideEffects.dependsOn(dependsFlags)) {
+      if (instruction.useGvn() &&
+          instruction.isMovable &&
+          (!instruction.canThrow() || firstInstructionInLoop) &&
+          !instruction.sideEffects.dependsOn(dependsFlags)) {
         bool loopInvariantInputs = true;
         List<HInstruction> inputs = instruction.inputs;
         for (int i = 0, length = inputs.length; i < length; i++) {
@@ -1617,8 +1586,7 @@
     }
   }
 
-  bool isInputDefinedAfterDominator(HInstruction input,
-                                    HBasicBlock dominator) {
+  bool isInputDefinedAfterDominator(HInstruction input, HBasicBlock dominator) {
     return input.block.id > dominator.id;
   }
 
@@ -1707,16 +1675,14 @@
       // Propagate loop changes flags upwards.
       HBasicBlock parentLoopHeader = block.parentLoopHeader;
       if (parentLoopHeader != null) {
-        loopChangesFlags[parentLoopHeader.id] |= (block.isLoopHeader())
-            ? loopChangesFlags[id]
-            : changesFlags;
+        loopChangesFlags[parentLoopHeader.id] |=
+            (block.isLoopHeader()) ? loopChangesFlags[id] : changesFlags;
       }
     }
   }
 
   int getChangesFlagsForDominatedBlock(HBasicBlock dominator,
-                                       HBasicBlock dominated,
-                                       List<HBasicBlock> workQueue) {
+      HBasicBlock dominated, List<HBasicBlock> workQueue) {
     int changesFlags = 0;
     List<HBasicBlock> predecessors = dominated.predecessors;
     for (int i = 0, length = predecessors.length; i < length; i++) {
@@ -1851,9 +1817,8 @@
   // to use [TypeKnown] of [input] instead. As the type information depends
   // on the control flow, we mark the inserted [HTypeKnown] nodes as
   // non-movable.
-  void insertTypePropagationForDominatedUsers(HBasicBlock dominator,
-                                              HInstruction input,
-                                              TypeMask convertedType) {
+  void insertTypePropagationForDominatedUsers(
+      HBasicBlock dominator, HInstruction input, TypeMask convertedType) {
     Setlet<HInstruction> dominatedUsers = input.dominatedUsers(dominator.first);
     if (dominatedUsers.isEmpty) return;
 
@@ -1885,14 +1850,14 @@
     HInstruction input = instruction.expression;
 
     for (HIf ifUser in ifUsers) {
-      insertTypePropagationForDominatedUsers(ifUser.thenBlock, input,
-                                             convertedType);
+      insertTypePropagationForDominatedUsers(
+          ifUser.thenBlock, input, convertedType);
       // TODO(ngeoffray): Also change uses for the else block on a type
       // that knows it is not of a specific type.
     }
     for (HIf ifUser in notIfUsers) {
-      insertTypePropagationForDominatedUsers(ifUser.elseBlock, input,
-                                             convertedType);
+      insertTypePropagationForDominatedUsers(
+          ifUser.elseBlock, input, convertedType);
       // TODO(ngeoffray): Also change uses for the then block on a type
       // that knows it is not of a specific type.
     }
@@ -1924,20 +1889,19 @@
     TypeMask nonNullType = input.instructionType.nonNullable();
 
     for (HIf ifUser in ifUsers) {
-      insertTypePropagationForDominatedUsers(ifUser.elseBlock, input,
-                                             nonNullType);
+      insertTypePropagationForDominatedUsers(
+          ifUser.elseBlock, input, nonNullType);
       // Uses in thenBlock are `null`, but probably not common.
     }
     for (HIf ifUser in notIfUsers) {
-      insertTypePropagationForDominatedUsers(ifUser.thenBlock, input,
-                                             nonNullType);
+      insertTypePropagationForDominatedUsers(
+          ifUser.thenBlock, input, nonNullType);
       // Uses in elseBlock are `null`, but probably not common.
     }
   }
 
-  collectIfUsers(HInstruction instruction,
-                 List<HInstruction> ifUsers,
-                 List<HInstruction> notIfUsers) {
+  collectIfUsers(HInstruction instruction, List<HInstruction> ifUsers,
+      List<HInstruction> notIfUsers) {
     for (HInstruction user in instruction.usedBy) {
       if (user is HIf) {
         ifUsers.add(user);
@@ -1982,8 +1946,8 @@
     if (block.predecessors.length == 0) {
       // Entry block.
       memorySet = new MemorySet(compiler);
-    } else if (block.predecessors.length == 1
-               && block.predecessors[0].successors.length == 1) {
+    } else if (block.predecessors.length == 1 &&
+        block.predecessors[0].successors.length == 1) {
       // No need to clone, there is no other successor for
       // `block.predecessors[0]`, and this block has only one
       // predecessor. Since we are not going to visit
@@ -1999,7 +1963,7 @@
       memorySet = memories[block.predecessors[0].id];
       for (int i = 1; i < block.predecessors.length; i++) {
         memorySet = memorySet.intersectionFor(
-          memories[block.predecessors[i].id], block, i);
+            memories[block.predecessors[i].id], block, i);
       }
     }
 
@@ -2015,8 +1979,7 @@
   void visitFieldGet(HFieldGet instruction) {
     if (instruction.isNullCheck) return;
     Element element = instruction.element;
-    HInstruction receiver =
-        instruction.getDartReceiver(compiler).nonCheck();
+    HInstruction receiver = instruction.getDartReceiver(compiler).nonCheck();
     HInstruction existing = memorySet.lookupFieldValue(element, receiver);
     if (existing != null) {
       instruction.block.rewriteWithBetterUser(instruction, existing);
@@ -2027,8 +1990,7 @@
   }
 
   void visitFieldSet(HFieldSet instruction) {
-    HInstruction receiver =
-        instruction.getDartReceiver(compiler).nonCheck();
+    HInstruction receiver = instruction.getDartReceiver(compiler).nonCheck();
     memorySet.registerFieldValueUpdate(
         instruction.element, receiver, instruction.inputs.last);
   }
@@ -2150,13 +2112,13 @@
    * Maps a field to a map of receiver to value.
    */
   final Map<Element, Map<HInstruction, HInstruction>> fieldValues =
-      <Element, Map<HInstruction, HInstruction>> {};
+      <Element, Map<HInstruction, HInstruction>>{};
 
   /**
    * Maps a receiver to a map of keys to value.
    */
   final Map<HInstruction, Map<HInstruction, HInstruction>> keyedValues =
-      <HInstruction, Map<HInstruction, HInstruction>> {};
+      <HInstruction, Map<HInstruction, HInstruction>>{};
 
   /**
    * Set of objects that we know don't escape the current function.
@@ -2184,8 +2146,8 @@
     if (nonEscapingReceivers.contains(second)) return false;
     // Typed arrays of different types might have a shared buffer.
     if (couldBeTypedArray(first) && couldBeTypedArray(second)) return true;
-    return !first.instructionType.isDisjoint(
-        second.instructionType, compiler.world);
+    return !first.instructionType
+        .isDisjoint(second.instructionType, compiler.world);
   }
 
   bool isFinal(Element element) {
@@ -2193,9 +2155,9 @@
   }
 
   bool isConcrete(HInstruction instruction) {
-    return instruction is HForeignNew
-        || instruction is HConstant
-        || instruction is HLiteralList;
+    return instruction is HForeignNew ||
+        instruction is HConstant ||
+        instruction is HLiteralList;
   }
 
   bool couldBeTypedArray(HInstruction receiver) {
@@ -2218,17 +2180,16 @@
    * Sets `receiver.element` to contain [value]. Kills all potential
    * places that may be affected by this update.
    */
-  void registerFieldValueUpdate(Element element,
-                                HInstruction receiver,
-                                HInstruction value) {
+  void registerFieldValueUpdate(
+      Element element, HInstruction receiver, HInstruction value) {
     if (backend.isNative(element)) {
       return; // TODO(14955): Remove this restriction?
     }
     // [value] is being set in some place in memory, we remove it from
     // the non-escaping set.
     nonEscapingReceivers.remove(value);
-    Map<HInstruction, HInstruction> map = fieldValues.putIfAbsent(
-        element, () => <HInstruction, HInstruction> {});
+    Map<HInstruction, HInstruction> map =
+        fieldValues.putIfAbsent(element, () => <HInstruction, HInstruction>{});
     map.forEach((key, value) {
       if (mayAlias(receiver, key)) map[key] = null;
     });
@@ -2238,14 +2199,13 @@
   /**
    * Registers that `receiver.element` is now [value].
    */
-  void registerFieldValue(Element element,
-                          HInstruction receiver,
-                          HInstruction value) {
+  void registerFieldValue(
+      Element element, HInstruction receiver, HInstruction value) {
     if (backend.isNative(element)) {
       return; // TODO(14955): Remove this restriction?
     }
-    Map<HInstruction, HInstruction> map = fieldValues.putIfAbsent(
-        element, () => <HInstruction, HInstruction> {});
+    Map<HInstruction, HInstruction> map =
+        fieldValues.putIfAbsent(element, () => <HInstruction, HInstruction>{});
     map[receiver] = value;
   }
 
@@ -2273,8 +2233,8 @@
       nonEscapingReceivers.remove(input);
     });
 
-    if (instruction.sideEffects.changesInstanceProperty()
-        || instruction.sideEffects.changesStaticProperty()) {
+    if (instruction.sideEffects.changesInstanceProperty() ||
+        instruction.sideEffects.changesStaticProperty()) {
       fieldValues.forEach((element, map) {
         if (isFinal(element)) return;
         map.forEach((receiver, value) {
@@ -2308,11 +2268,10 @@
   /**
    * Registers that `receiver[index]` is now [value].
    */
-  void registerKeyedValue(HInstruction receiver,
-                          HInstruction index,
-                          HInstruction value) {
-    Map<HInstruction, HInstruction> map = keyedValues.putIfAbsent(
-        receiver, () => <HInstruction, HInstruction> {});
+  void registerKeyedValue(
+      HInstruction receiver, HInstruction index, HInstruction value) {
+    Map<HInstruction, HInstruction> map =
+        keyedValues.putIfAbsent(receiver, () => <HInstruction, HInstruction>{});
     map[index] = value;
   }
 
@@ -2320,9 +2279,8 @@
    * Sets `receiver[index]` to contain [value]. Kills all potential
    * places that may be affected by this update.
    */
-  void registerKeyedValueUpdate(HInstruction receiver,
-                                HInstruction index,
-                                HInstruction value) {
+  void registerKeyedValueUpdate(
+      HInstruction receiver, HInstruction index, HInstruction value) {
     nonEscapingReceivers.remove(value);
     keyedValues.forEach((key, values) {
       if (mayAlias(receiver, key)) {
@@ -2340,8 +2298,8 @@
     // Typed arrays may narrow incoming values.
     if (couldBeTypedArray(receiver)) return;
 
-    Map<HInstruction, HInstruction> map = keyedValues.putIfAbsent(
-        receiver, () => <HInstruction, HInstruction> {});
+    Map<HInstruction, HInstruction> map =
+        keyedValues.putIfAbsent(receiver, () => <HInstruction, HInstruction>{});
     map[index] = value;
   }
 
@@ -2350,14 +2308,12 @@
    * returns [first] if [first] and [second] are equal. Otherwise
    * creates or re-uses a phi in [block] that holds [first] and [second].
    */
-  HInstruction findCommonInstruction(HInstruction first,
-                                     HInstruction second,
-                                     HBasicBlock block,
-                                     int predecessorIndex) {
+  HInstruction findCommonInstruction(HInstruction first, HInstruction second,
+      HBasicBlock block, int predecessorIndex) {
     if (first == null || second == null) return null;
     if (first == second) return first;
-    TypeMask phiType = second.instructionType.union(
-          first.instructionType, compiler.world);
+    TypeMask phiType =
+        second.instructionType.union(first.instructionType, compiler.world);
     if (first is HPhi && first.block == block) {
       HPhi phi = first;
       phi.addInput(second);
@@ -2379,9 +2335,8 @@
   /**
    * Returns the intersection between [this] and [other].
    */
-  MemorySet intersectionFor(MemorySet other,
-                            HBasicBlock block,
-                            int predecessorIndex) {
+  MemorySet intersectionFor(
+      MemorySet other, HBasicBlock block, int predecessorIndex) {
     MemorySet result = new MemorySet(compiler);
     if (other == null) return result;
 
diff --git a/pkg/compiler/lib/src/ssa/ssa_tracer.dart b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
index 0b35432..9a6f6c6 100644
--- a/pkg/compiler/lib/src/ssa/ssa_tracer.dart
+++ b/pkg/compiler/lib/src/ssa/ssa_tracer.dart
@@ -59,11 +59,11 @@
     }
   }
 
-  void addInstructions(HInstructionStringifier stringifier,
-                       HInstructionList list) {
+  void addInstructions(
+      HInstructionStringifier stringifier, HInstructionList list) {
     for (HInstruction instruction = list.first;
-         instruction != null;
-         instruction = instruction.next) {
+        instruction != null;
+        instruction = instruction.next) {
       int bci = 0;
       int uses = instruction.usedBy.length;
       String changes = instruction.sideEffects.hasSideEffects() ? '!' : ' ';
@@ -162,7 +162,7 @@
 
   String handleInvokeBinary(HInvokeBinary node, String opcode) {
     String left = temporaryId(node.left);
-    String right= temporaryId(node.right);
+    String right = temporaryId(node.right);
     return '$opcode: $left $right';
   }
 
@@ -255,6 +255,7 @@
   String visitGreaterEqual(HGreaterEqual node) {
     return handleInvokeBinary(node, 'GreaterEqual');
   }
+
   String visitIdentity(HIdentity node) => handleInvokeBinary(node, 'Identity');
 
   String visitIf(HIf node) {
@@ -264,8 +265,8 @@
     return "If ($conditionId): (B${thenBlock.id}) else (B${elseBlock.id})";
   }
 
-  String handleGenericInvoke(String invokeType, String functionName,
-                             List<HInstruction> arguments) {
+  String handleGenericInvoke(
+      String invokeType, String functionName, List<HInstruction> arguments) {
     StringBuffer argumentsString = new StringBuffer();
     for (int i = 0; i < arguments.length; i++) {
       if (i != 0) argumentsString.write(", ");
@@ -298,8 +299,8 @@
     return "Interceptor: $value";
   }
 
-  String visitInvokeClosure(HInvokeClosure node)
-      => handleInvokeDynamic(node, "InvokeClosure");
+  String visitInvokeClosure(HInvokeClosure node) =>
+      handleInvokeDynamic(node, "InvokeClosure");
 
   String handleInvokeDynamic(HInvokeDynamic invoke, String kind) {
     String receiver = temporaryId(invoke.receiver);
@@ -307,16 +308,15 @@
     String target = "$receiver.$name";
     int offset = HInvoke.ARGUMENTS_OFFSET;
     List arguments = invoke.inputs.sublist(offset);
-    return handleGenericInvoke(kind, target, arguments) +
-        "(${invoke.mask})";
+    return handleGenericInvoke(kind, target, arguments) + "(${invoke.mask})";
   }
 
-  String visitInvokeDynamicMethod(HInvokeDynamicMethod node)
-      => handleInvokeDynamic(node, "InvokeDynamicMethod");
-  String visitInvokeDynamicGetter(HInvokeDynamicGetter node)
-      => handleInvokeDynamic(node, "InvokeDynamicGetter");
-  String visitInvokeDynamicSetter(HInvokeDynamicSetter node)
-      => handleInvokeDynamic(node, "InvokeDynamicSetter");
+  String visitInvokeDynamicMethod(HInvokeDynamicMethod node) =>
+      handleInvokeDynamic(node, "InvokeDynamicMethod");
+  String visitInvokeDynamicGetter(HInvokeDynamicGetter node) =>
+      handleInvokeDynamic(node, "InvokeDynamicGetter");
+  String visitInvokeDynamicSetter(HInvokeDynamicSetter node) =>
+      handleInvokeDynamic(node, "InvokeDynamicSetter");
 
   String visitInvokeStatic(HInvokeStatic invoke) {
     String target = invoke.element.name;
@@ -334,14 +334,13 @@
   }
 
   String visitForeignCode(HForeignCode foreign) {
-    return handleGenericInvoke("ForeignCode", "${foreign.codeTemplate.ast}",
-                              foreign.inputs);
+    return handleGenericInvoke(
+        "ForeignCode", "${foreign.codeTemplate.ast}", foreign.inputs);
   }
 
   String visitForeignNew(HForeignNew node) {
-    return handleGenericInvoke("ForeignNew",
-                              "${node.element.name}",
-                              node.inputs);
+    return handleGenericInvoke(
+        "ForeignNew", "${node.element.name}", node.inputs);
   }
 
   String visitLess(HLess node) => handleInvokeBinary(node, 'Less');
@@ -361,8 +360,7 @@
     HBasicBlock bodyBlock = currentBlock.successors[0];
     HBasicBlock exitBlock = currentBlock.successors[1];
     String conditionId = temporaryId(branch.inputs[0]);
-    return
-      "LoopBranch ($conditionId): (B${bodyBlock.id}) then (B${exitBlock.id})";
+    return "LoopBranch ($conditionId): (B${bodyBlock.id}) then (B${exitBlock.id})";
   }
 
   String visitMultiply(HMultiply node) => handleInvokeBinary(node, 'Multiply');
@@ -403,14 +401,13 @@
   String visitShiftRight(HShiftRight node) =>
       handleInvokeBinary(node, 'ShiftRight');
 
-  String visitStatic(HStatic node)
-      => "Static: ${node.element.name}";
+  String visitStatic(HStatic node) => "Static: ${node.element.name}";
 
-  String visitLazyStatic(HLazyStatic node)
-      => "LazyStatic: ${node.element.name}";
+  String visitLazyStatic(HLazyStatic node) =>
+      "LazyStatic: ${node.element.name}";
 
-  String visitOneShotInterceptor(HOneShotInterceptor node)
-      => handleInvokeDynamic(node, "OneShotInterceptor");
+  String visitOneShotInterceptor(HOneShotInterceptor node) =>
+      handleInvokeDynamic(node, "OneShotInterceptor");
 
   String visitStaticStore(HStaticStore node) {
     String lhs = node.element.name;
@@ -490,11 +487,10 @@
 
   String visitTypeConversion(HTypeConversion node) {
     assert(node.inputs.length <= 2);
-    String otherInput = (node.inputs.length == 2)
-        ? temporaryId(node.inputs[1])
-        : '';
+    String otherInput =
+        (node.inputs.length == 2) ? temporaryId(node.inputs[1]) : '';
     return "TypeConversion: ${temporaryId(node.checkedInput)} to "
-      "${node.instructionType} $otherInput";
+        "${node.instructionType} $otherInput";
   }
 
   String visitTypeKnown(HTypeKnown node) {
diff --git a/pkg/compiler/lib/src/ssa/types.dart b/pkg/compiler/lib/src/ssa/types.dart
index 8119cf2..2a7ecff 100644
--- a/pkg/compiler/lib/src/ssa/types.dart
+++ b/pkg/compiler/lib/src/ssa/types.dart
@@ -22,33 +22,29 @@
   static TypeMask inferredReturnTypeForElement(
       Element element, Compiler compiler) {
     return fromInferredType(
-        compiler.typesTask.getGuaranteedReturnTypeOfElement(element),
-        compiler);
+        compiler.typesTask.getGuaranteedReturnTypeOfElement(element), compiler);
   }
 
   static TypeMask inferredTypeForElement(Element element, Compiler compiler) {
     return fromInferredType(
-        compiler.typesTask.getGuaranteedTypeOfElement(element),
-        compiler);
+        compiler.typesTask.getGuaranteedTypeOfElement(element), compiler);
   }
 
-  static TypeMask inferredTypeForSelector(Selector selector,
-                                          TypeMask mask,
-                                          Compiler compiler) {
+  static TypeMask inferredTypeForSelector(
+      Selector selector, TypeMask mask, Compiler compiler) {
     return fromInferredType(
         compiler.typesTask.getGuaranteedTypeOfSelector(selector, mask),
         compiler);
   }
 
-  static TypeMask inferredForNode(Element owner, ast.Node node,
-                                  Compiler compiler) {
+  static TypeMask inferredForNode(
+      Element owner, ast.Node node, Compiler compiler) {
     return fromInferredType(
-        compiler.typesTask.getGuaranteedTypeOfNode(owner, node),
-        compiler);
+        compiler.typesTask.getGuaranteedTypeOfNode(owner, node), compiler);
   }
 
-  static TypeMask fromNativeBehavior(native.NativeBehavior nativeBehavior,
-                                     Compiler compiler) {
+  static TypeMask fromNativeBehavior(
+      native.NativeBehavior nativeBehavior, Compiler compiler) {
     ClassWorld classWorld = compiler.world;
     JavaScriptBackend backend = compiler.backend;
     if (nativeBehavior.typesReturned.isEmpty) return backend.dynamicType;
diff --git a/pkg/compiler/lib/src/ssa/types_propagation.dart b/pkg/compiler/lib/src/ssa/types_propagation.dart
index 49373dc..e5ad513 100644
--- a/pkg/compiler/lib/src/ssa/types_propagation.dart
+++ b/pkg/compiler/lib/src/ssa/types_propagation.dart
@@ -98,7 +98,6 @@
     } while (!worklist.isEmpty);
   }
 
-
   void addToWorkList(HInstruction instruction) {
     final int id = instruction.id;
 
@@ -175,12 +174,12 @@
       // We must make sure a type conversion for receiver or argument check
       // does not try to do an int check, because an int check is not enough.
       // We only do an int check if the input is integer or null.
-      if (checkedType.containsOnlyNum(classWorld)
-          && !checkedType.containsOnlyDouble(classWorld)
-          && input.isIntegerOrNull(compiler)) {
+      if (checkedType.containsOnlyNum(classWorld) &&
+          !checkedType.containsOnlyDouble(classWorld) &&
+          input.isIntegerOrNull(compiler)) {
         instruction.checkedType = backend.intType;
-      } else if (checkedType.containsOnlyInt(classWorld)
-                 && !input.isIntegerOrNull(compiler)) {
+      } else if (checkedType.containsOnlyInt(classWorld) &&
+          !input.isIntegerOrNull(compiler)) {
         instruction.checkedType = backend.numType;
       }
     }
@@ -192,8 +191,8 @@
       // can be a literal double '8.0' that is marked as an integer (because 'is
       // int' will return 'true').  What we really need to do is make the
       // overlap between int and double values explicit in the TypeMask system.
-      if (inputType.containsOnlyInt(classWorld)
-          && checkedType.containsOnlyDouble(classWorld)) {
+      if (inputType.containsOnlyInt(classWorld) &&
+          checkedType.containsOnlyDouble(classWorld)) {
         if (inputType.isNullable && checkedType.isNullable) {
           outputType = backend.doubleType.nullable();
         } else {
@@ -218,22 +217,19 @@
     return outputType;
   }
 
-  void convertInput(HInvokeDynamic instruction,
-                    HInstruction input,
-                    TypeMask type,
-                    int kind) {
+  void convertInput(
+      HInvokeDynamic instruction, HInstruction input, TypeMask type, int kind) {
     Selector selector = (kind == HTypeConversion.RECEIVER_TYPE_CHECK)
         ? instruction.selector
         : null;
-    HTypeConversion converted = new HTypeConversion(
-        null, kind, type, input, selector)
-        ..sourceInformation = instruction.sourceInformation;
+    HTypeConversion converted =
+        new HTypeConversion(null, kind, type, input, selector)
+          ..sourceInformation = instruction.sourceInformation;
     instruction.block.addBefore(instruction, converted);
     input.replaceAllUsersDominatedBy(instruction, converted);
   }
 
-  bool isCheckEnoughForNsmOrAe(HInstruction instruction,
-                               TypeMask type) {
+  bool isCheckEnoughForNsmOrAe(HInstruction instruction, TypeMask type) {
     // In some cases, we want the receiver to be an integer,
     // but that does not mean we will get a NoSuchMethodError
     // if it's not: the receiver could be a double.
@@ -254,20 +250,20 @@
     HInstruction receiver = instruction.inputs[1];
     if (receiver.isNumber(compiler)) return false;
     if (receiver.isNumberOrNull(compiler)) {
-      convertInput(instruction,
-                   receiver,
-                   receiver.instructionType.nonNullable(),
-                   HTypeConversion.RECEIVER_TYPE_CHECK);
+      convertInput(
+          instruction,
+          receiver,
+          receiver.instructionType.nonNullable(),
+          HTypeConversion.RECEIVER_TYPE_CHECK);
       return true;
     } else if (instruction.element == null) {
-      Iterable<Element> targets =
-          compiler.world.allFunctions.filter(
-              instruction.selector, instruction.mask);
+      Iterable<Element> targets = compiler.world.allFunctions
+          .filter(instruction.selector, instruction.mask);
       if (targets.length == 1) {
         Element target = targets.first;
         ClassElement cls = target.enclosingClass;
-        TypeMask type = new TypeMask.nonNullSubclass(
-            cls.declaration, classWorld);
+        TypeMask type =
+            new TypeMask.nonNullSubclass(cls.declaration, classWorld);
         // TODO(ngeoffray): We currently only optimize on primitive
         // types.
         if (!type.satisfies(backend.helpers.jsIndexableClass, classWorld) &&
@@ -277,10 +273,8 @@
         }
         if (!isCheckEnoughForNsmOrAe(receiver, type)) return false;
         instruction.element = target;
-        convertInput(instruction,
-                     receiver,
-                     type,
-                     HTypeConversion.RECEIVER_TYPE_CHECK);
+        convertInput(
+            instruction, receiver, type, HTypeConversion.RECEIVER_TYPE_CHECK);
         return true;
       }
     }
@@ -306,10 +300,8 @@
       // variant and will do the check in their method anyway. We
       // still add a check because it allows to GVN these operations,
       // but we should find a better way.
-      convertInput(instruction,
-                   right,
-                   type,
-                   HTypeConversion.ARGUMENT_TYPE_CHECK);
+      convertInput(
+          instruction, right, type, HTypeConversion.ARGUMENT_TYPE_CHECK);
       return true;
     }
     return false;
@@ -339,18 +331,19 @@
       // We cannot do the following optimization now, because we have
       // to wait for the type propagation to be stable. The receiver
       // of [instruction] might move from number to dynamic.
-      pendingOptimizations.putIfAbsent(instruction, () => () {
-        Selector selector = instruction.selector;
-        if (selector.isOperator && selector.name != '==') {
-          if (checkReceiver(instruction)) {
-            addAllUsersBut(instruction, instruction.inputs[1]);
-          }
-          if (!selector.isUnaryOperator &&
-              checkArgument(instruction)) {
-            addAllUsersBut(instruction, instruction.inputs[2]);
-          }
-        }
-      });
+      pendingOptimizations.putIfAbsent(
+          instruction,
+          () => () {
+                Selector selector = instruction.selector;
+                if (selector.isOperator && selector.name != '==') {
+                  if (checkReceiver(instruction)) {
+                    addAllUsersBut(instruction, instruction.inputs[1]);
+                  }
+                  if (!selector.isUnaryOperator && checkArgument(instruction)) {
+                    addAllUsersBut(instruction, instruction.inputs[2]);
+                  }
+                }
+              });
     }
 
     HInstruction receiver = instruction.getDartReceiver(compiler);
@@ -358,10 +351,10 @@
     instruction.mask = receiverType;
 
     // Try to specialize the receiver after this call.
-    if (receiver.dominatedUsers(instruction).length != 1
-        && !instruction.selector.isClosureCall) {
-      TypeMask newType = compiler.world.allFunctions.receiverType(
-              instruction.selector, instruction.mask);
+    if (receiver.dominatedUsers(instruction).length != 1 &&
+        !instruction.selector.isClosureCall) {
+      TypeMask newType = compiler.world.allFunctions
+          .receiverType(instruction.selector, instruction.mask);
       newType = newType.intersection(receiverType, classWorld);
       var next = instruction.next;
       if (next is HTypeKnown && next.checkedInput == receiver) {
@@ -385,7 +378,7 @@
       }
     }
 
-    return instruction.specializer.computeTypeFromInputTypes(
-        instruction, compiler);
+    return instruction.specializer
+        .computeTypeFromInputTypes(instruction, compiler);
   }
 }
diff --git a/pkg/compiler/lib/src/ssa/validate.dart b/pkg/compiler/lib/src/ssa/validate.dart
index 1c1e222..31e9125 100644
--- a/pkg/compiler/lib/src/ssa/validate.dart
+++ b/pkg/compiler/lib/src/ssa/validate.dart
@@ -22,22 +22,22 @@
   // not required to be valid yet.
   void visitBasicBlock(HBasicBlock block) {
     currentBlock = block;
-    if (!isValid) return;  // Don't need to continue if we are already invalid.
+    if (!isValid) return; // Don't need to continue if we are already invalid.
 
     // Test that the last instruction is a branching instruction and that the
     // basic block contains the branch-target.
     if (block.first == null || block.last == null) {
       markInvalid("empty block");
     }
-    if (block.last is !HControlFlow) {
+    if (block.last is! HControlFlow) {
       markInvalid("block ends with non-tail node.");
     }
     if (block.last is HIf && block.successors.length != 2) {
       markInvalid("If node without two successors");
     }
     if (block.last is HConditionalBranch && block.successors.length != 2) {
-        markInvalid("Conditional node without two successors");
-      }
+      markInvalid("Conditional node without two successors");
+    }
     if (block.last is HLoopBranch) {
       // Assert that the block we inserted to avoid critical edges satisfies
       // our assumptions. That is, it must not contain any instructions
@@ -56,7 +56,7 @@
     if ((block.last is HReturn || block.last is HThrow) &&
         (block.successors.length != 1 || !block.successors[0].isExitBlock())) {
       markInvalid("Return or throw node with > 1 successor "
-                  "or not going to exit-block");
+          "or not going to exit-block");
     }
     if (block.last is HExit && !block.successors.isEmpty) {
       markInvalid("Exit block with successor");
@@ -77,8 +77,10 @@
       }
     }
     // Make sure we don't have a critical edge.
-    if (isValid && block.successors.length > 1 &&
-        block.last is! HTry && block.last is! HExitTry &&
+    if (isValid &&
+        block.successors.length > 1 &&
+        block.last is! HTry &&
+        block.last is! HExitTry &&
         block.last is! HSwitch) {
       for (HBasicBlock successor in block.successors) {
         if (!isValid) break;
@@ -131,8 +133,8 @@
   }
 
   /** Returns how often [instruction] is contained in [instructions]. */
-  static int countInstruction(List<HInstruction> instructions,
-                              HInstruction instruction) {
+  static int countInstruction(
+      List<HInstruction> instructions, HInstruction instruction) {
     int result = 0;
     for (int i = 0; i < instructions.length; i++) {
       if (identical(instructions[i], instruction)) result++;
@@ -170,8 +172,8 @@
       bool inBasicBlock = instruction.isInBasicBlock();
       return everyInstruction(instruction.inputs, (input, count) {
         if (inBasicBlock) {
-          return input.isInBasicBlock()
-              && countInstruction(input.usedBy, instruction) == count;
+          return input.isInBasicBlock() &&
+              countInstruction(input.usedBy, instruction) == count;
         } else {
           return countInstruction(input.usedBy, instruction) == 0;
         }
@@ -182,8 +184,8 @@
     bool hasCorrectUses() {
       if (!instruction.isInBasicBlock()) return true;
       return everyInstruction(instruction.usedBy, (use, count) {
-        return use.isInBasicBlock()
-            && countInstruction(use.inputs, instruction) == count;
+        return use.isInBasicBlock() &&
+            countInstruction(use.inputs, instruction) == count;
       });
     }
 
diff --git a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
index 22c127a..8893e90 100644
--- a/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
+++ b/pkg/compiler/lib/src/ssa/value_range_analyzer.dart
@@ -56,9 +56,8 @@
   }
 
   Range newMarkerRange() {
-    return new Range(new MarkerValue(false, this),
-                     new MarkerValue(true, this),
-                     this);
+    return new Range(
+        new MarkerValue(false, this), new MarkerValue(true, this), this);
   }
 }
 
@@ -73,7 +72,7 @@
 
   Value operator +(Value other) => const UnknownValue();
   Value operator -(Value other) => const UnknownValue();
-  Value operator -()  => const UnknownValue();
+  Value operator -() => const UnknownValue();
   Value operator &(Value other) => const UnknownValue();
 
   Value min(Value other) {
@@ -138,7 +137,7 @@
 
   Value operator +(other) {
     if (other.isZero) return this;
-    if (other is !IntValue) return other + this;
+    if (other is! IntValue) return other + this;
     ConstantSystem constantSystem = info.constantSystem;
     var constant = constantSystem.add.fold(
         constantSystem.createInt(value), constantSystem.createInt(other.value));
@@ -148,7 +147,7 @@
 
   Value operator -(other) {
     if (other.isZero) return this;
-    if (other is !IntValue) return -other + this;
+    if (other is! IntValue) return -other + this;
     ConstantSystem constantSystem = info.constantSystem;
     var constant = constantSystem.subtract.fold(
         constantSystem.createInt(value), constantSystem.createInt(other.value));
@@ -159,14 +158,13 @@
   Value operator -() {
     if (isZero) return this;
     ConstantSystem constantSystem = info.constantSystem;
-    var constant = constantSystem.negate.fold(
-        constantSystem.createInt(value));
+    var constant = constantSystem.negate.fold(constantSystem.createInt(value));
     if (!constant.isInt) return const UnknownValue();
     return info.newIntValue(constant.primitiveValue);
   }
 
   Value operator &(other) {
-    if (other is !IntValue) return const UnknownValue();
+    if (other is! IntValue) return const UnknownValue();
     ConstantSystem constantSystem = info.constantSystem;
     var constant = constantSystem.bitAnd.fold(
         constantSystem.createInt(value), constantSystem.createInt(other.value));
@@ -174,17 +172,17 @@
   }
 
   Value min(other) {
-    if (other is !IntValue) return other.min(this);
+    if (other is! IntValue) return other.min(this);
     return this.value < other.value ? this : other;
   }
 
   Value max(other) {
-    if (other is !IntValue) return other.max(this);
+    if (other is! IntValue) return other.max(this);
     return this.value < other.value ? other : this;
   }
 
   bool operator ==(other) {
-    if (other is !IntValue) return false;
+    if (other is! IntValue) return false;
     return this.value == other.value;
   }
 
@@ -252,7 +250,7 @@
   InstructionValue(this.instruction, info) : super(info);
 
   bool operator ==(other) {
-    if (other is !InstructionValue) return false;
+    if (other is! InstructionValue) return false;
     return this.instruction == other.instruction;
   }
 
@@ -319,9 +317,9 @@
   AddValue(left, right, info) : super(left, right, info);
 
   bool operator ==(other) {
-    if (other is !AddValue) return false;
-    return (left == other.left && right == other.right)
-      || (left == other.right && right == other.left);
+    if (other is! AddValue) return false;
+    return (left == other.left && right == other.right) ||
+        (left == other.right && right == other.left);
   }
 
   int get hashCode => throw new UnsupportedError('AddValue.hashCode');
@@ -367,7 +365,7 @@
   SubtractValue(left, right, info) : super(left, right, info);
 
   bool operator ==(other) {
-    if (other is !SubtractValue) return false;
+    if (other is! SubtractValue) return false;
     return left == other.left && right == other.right;
   }
 
@@ -415,7 +413,7 @@
   NegateValue(this.value, info) : super(info);
 
   bool operator ==(other) {
-    if (other is !NegateValue) return false;
+    if (other is! NegateValue) return false;
     return value == other.value;
   }
 
@@ -481,10 +479,9 @@
    * Checks if the given values are unknown, and creates a
    * range that does not have any unknown values.
    */
-  Range.normalize(Value low, Value up, info) : this(
-      low == const UnknownValue() ? const MinIntValue() : low,
-      up == const UnknownValue() ? const MaxIntValue() : up,
-      info);
+  Range.normalize(Value low, Value up, info)
+      : this(low == const UnknownValue() ? const MinIntValue() : low,
+            up == const UnknownValue() ? const MaxIntValue() : up, info);
 
   Range union(Range other) {
     return info.newNormalizedRange(
@@ -497,14 +494,20 @@
     // If we could not compute max or min, pick a value in the two
     // ranges, with priority to [IntValue]s because they are simpler.
     if (low == const UnknownValue()) {
-      if (lower is IntValue) low = lower;
-      else if (other.lower is IntValue) low = other.lower;
-      else low = lower;
+      if (lower is IntValue)
+        low = lower;
+      else if (other.lower is IntValue)
+        low = other.lower;
+      else
+        low = lower;
     }
     if (up == const UnknownValue()) {
-      if (upper is IntValue) up = upper;
-      else if (other.upper is IntValue) up = other.upper;
-      else up = upper;
+      if (upper is IntValue)
+        up = upper;
+      else if (other.upper is IntValue)
+        up = other.upper;
+      else
+        up = upper;
     }
     return info.newNormalizedRange(low, up);
   }
@@ -522,10 +525,10 @@
   }
 
   Range operator &(Range other) {
-    if (isSingleValue
-        && other.isSingleValue
-        && lower is IntValue
-        && other.lower is IntValue) {
+    if (isSingleValue &&
+        other.isSingleValue &&
+        lower is IntValue &&
+        other.lower is IntValue) {
       return info.newNormalizedRange(lower & other.lower, upper & other.upper);
     }
     if (isPositive && other.isPositive) {
@@ -607,10 +610,8 @@
   CodegenWorkItem work;
   HGraph graph;
 
-  SsaValueRangeAnalyzer(this.compiler,
-                        constantSystem,
-                        this.optimizer,
-                        this.work)
+  SsaValueRangeAnalyzer(
+      this.compiler, constantSystem, this.optimizer, this.work)
       : info = new ValueRangeInfo(constantSystem),
         this.constantSystem = constantSystem;
 
@@ -633,7 +634,6 @@
   }
 
   void visitBasicBlock(HBasicBlock block) {
-
     void visit(HInstruction instruction) {
       Range range = instruction.accept(this);
       if (instruction.isInteger(compiler)) {
@@ -732,14 +732,14 @@
     // Check if the index is strictly below the upper bound of the length
     // range.
     Value maxIndex = lengthRange.upper - info.intOne;
-    bool belowLength = maxIndex != const MaxIntValue()
-        && indexRange.upper.min(maxIndex) == indexRange.upper;
+    bool belowLength = maxIndex != const MaxIntValue() &&
+        indexRange.upper.min(maxIndex) == indexRange.upper;
 
     // Check if the index is strictly below the lower bound of the length
     // range.
-    belowLength = belowLength
-        || (indexRange.upper != lengthRange.lower
-            && indexRange.upper.min(lengthRange.lower) == indexRange.upper);
+    belowLength = belowLength ||
+        (indexRange.upper != lengthRange.lower &&
+            indexRange.upper.min(lengthRange.lower) == indexRange.upper);
     if (indexRange.isPositive && belowLength) {
       check.block.rewrite(check, check.index);
       check.block.remove(check);
@@ -759,16 +759,15 @@
       // greater or equal than the lower bound of the index.
       Value low = lengthRange.lower.max(indexRange.lower);
       if (low != const UnknownValue()) {
-        HInstruction instruction =
-            createRangeConversion(next, check.length);
+        HInstruction instruction = createRangeConversion(next, check.length);
         ranges[instruction] = info.newNormalizedRange(low, lengthRange.upper);
       }
     }
 
     // Update the range of the index if using the maximum index
     // narrows it. Use that new range for this instruction as well.
-    Range newIndexRange = indexRange.intersection(
-        info.newNormalizedRange(info.intZero, maxIndex));
+    Range newIndexRange = indexRange
+        .intersection(info.newNormalizedRange(info.intZero, maxIndex));
     if (indexRange == newIndexRange) return indexRange;
     // Explicitly attach the range information to the index instruction,
     // which may be used by other instructions.  Returning the new range will
@@ -790,12 +789,12 @@
     if (relational is HIdentity) {
       handleEqualityCheck(relational);
     } else if (operation.apply(leftRange, rightRange)) {
-      relational.block.rewrite(
-          relational, graph.addConstantBool(true, compiler));
+      relational.block
+          .rewrite(relational, graph.addConstantBool(true, compiler));
       relational.block.remove(relational);
     } else if (negateOperation(operation).apply(leftRange, rightRange)) {
-      relational.block.rewrite(
-          relational, graph.addConstantBool(false, compiler));
+      relational.block
+          .rewrite(relational, graph.addConstantBool(false, compiler));
       relational.block.remove(relational);
     }
     return info.newUnboundRange();
@@ -805,8 +804,7 @@
     Range right = ranges[node.right];
     Range left = ranges[node.left];
     if (left.isSingleValue && right.isSingleValue && left == right) {
-      node.block.rewrite(
-          node, graph.addConstantBool(true, compiler));
+      node.block.rewrite(node, graph.addConstantBool(true, compiler));
       node.block.remove(node);
     }
   }
@@ -820,18 +818,18 @@
       // so special case those.
       if (left.isInteger(compiler) && right.isInteger(compiler)) {
         if (divisor.isPositive) {
-          return info.newNormalizedRange(info.intZero, divisor.upper -
-              info.intOne);
+          return info.newNormalizedRange(
+              info.intZero, divisor.upper - info.intOne);
         } else if (divisor.isNegative) {
-          return info.newNormalizedRange(info.intZero, info.newNegateValue(
-              divisor.lower) - info.intOne);
+          return info.newNormalizedRange(
+              info.intZero, info.newNegateValue(divisor.lower) - info.intOne);
         }
       } else if (left.isNumber(compiler) && right.isNumber(compiler)) {
         if (divisor.isPositive) {
           return info.newNormalizedRange(info.intZero, divisor.upper);
         } else if (divisor.isNegative) {
-          return info.newNormalizedRange(info.intZero, info.newNegateValue(
-              divisor.lower));
+          return info.newNormalizedRange(
+              info.intZero, info.newNegateValue(divisor.lower));
         }
       }
     }
@@ -846,8 +844,9 @@
 
   Range handleBinaryOperation(HBinaryArithmetic instruction) {
     if (!instruction.isInteger(compiler)) return info.newUnboundRange();
-    return instruction.operation(constantSystem).apply(
-        ranges[instruction.left], ranges[instruction.right]);
+    return instruction
+        .operation(constantSystem)
+        .apply(ranges[instruction.left], ranges[instruction.right]);
   }
 
   Range visitAdd(HAdd add) {
@@ -891,8 +890,8 @@
     return ranges[instruction.checkedInput];
   }
 
-  HInstruction createRangeConversion(HInstruction cursor,
-                                     HInstruction instruction) {
+  HInstruction createRangeConversion(
+      HInstruction cursor, HInstruction instruction) {
     JavaScriptBackend backend = compiler.backend;
     HRangeConversion newInstruction =
         new HRangeConversion(instruction, backend.intType);
@@ -932,9 +931,8 @@
     }
   }
 
-  Range computeConstrainedRange(BinaryOperation operation,
-                                Range leftRange,
-                                Range rightRange) {
+  Range computeConstrainedRange(
+      BinaryOperation operation, Range leftRange, Range rightRange) {
     Range range;
     if (operation == const LessOperation()) {
       range = info.newNormalizedRange(
@@ -955,7 +953,7 @@
   Range visitConditionalBranch(HConditionalBranch branch) {
     var condition = branch.condition;
     // TODO(ngeoffray): Handle complex conditions.
-    if (condition is !HRelational) return info.newUnboundRange();
+    if (condition is! HRelational) return info.newUnboundRange();
     if (condition is HIdentity) return info.newUnboundRange();
     HInstruction right = condition.right;
     HInstruction left = condition.left;
diff --git a/pkg/compiler/lib/src/ssa/value_set.dart b/pkg/compiler/lib/src/ssa/value_set.dart
index 6d7acc2..c990014 100644
--- a/pkg/compiler/lib/src/ssa/value_set.dart
+++ b/pkg/compiler/lib/src/ssa/value_set.dart
@@ -6,7 +6,6 @@
 
 import 'nodes.dart';
 
-
 class ValueSet {
   int size = 0;
   List<HInstruction> table;
diff --git a/pkg/compiler/lib/src/ssa/variable_allocator.dart b/pkg/compiler/lib/src/ssa/variable_allocator.dart
index 280a047..2145d6d 100644
--- a/pkg/compiler/lib/src/ssa/variable_allocator.dart
+++ b/pkg/compiler/lib/src/ssa/variable_allocator.dart
@@ -115,8 +115,8 @@
   final Map<HInstruction, LiveInterval> liveIntervals;
 
   LiveEnvironment(this.liveIntervals, this.endId)
-    : liveInstructions = new Map<HInstruction, int>(),
-      loopMarkers = new Map<HBasicBlock, int>();
+      : liveInstructions = new Map<HInstruction, int>(),
+        loopMarkers = new Map<HBasicBlock, int>();
 
   /**
    * Remove an instruction from the liveIn set. This method also
@@ -124,8 +124,8 @@
    * range: [id, / id contained in [liveInstructions] /].
    */
   void remove(HInstruction instruction, int id) {
-    LiveInterval interval = liveIntervals.putIfAbsent(
-        instruction, () => new LiveInterval());
+    LiveInterval interval =
+        liveIntervals.putIfAbsent(instruction, () => new LiveInterval());
     int lastId = liveInstructions[instruction];
     // If [lastId] is null, then this instruction is not being used.
     interval.add(new LiveRange(id, lastId == null ? id : lastId));
@@ -156,12 +156,14 @@
       // else block have the same end id for an instruction that is
       // being used in the join block and defined before the if/else.
       if (existingId == endId) return;
-      LiveInterval range = liveIntervals.putIfAbsent(
-          instruction, () => new LiveInterval());
+      LiveInterval range =
+          liveIntervals.putIfAbsent(instruction, () => new LiveInterval());
       range.add(new LiveRange(other.startId, existingId));
       liveInstructions[instruction] = endId;
     });
-    other.loopMarkers.forEach((k, v) { loopMarkers[k] = v; });
+    other.loopMarkers.forEach((k, v) {
+      loopMarkers[k] = v;
+    });
   }
 
   void addLoopMarker(HBasicBlock header, int id) {
@@ -210,8 +212,8 @@
 
   SsaLiveIntervalBuilder(
       this.compiler, this.generateAtUseSite, this.controlFlowOperators)
-    : liveInstructions = new Map<HBasicBlock, LiveEnvironment>(),
-      liveIntervals = new Map<HInstruction, LiveInterval>();
+      : liveInstructions = new Map<HBasicBlock, LiveEnvironment>(),
+        liveIntervals = new Map<HInstruction, LiveInterval>();
 
   DiagnosticReporter get reporter => compiler.reporter;
 
@@ -222,8 +224,8 @@
     }
   }
 
-  void markInputsAsLiveInEnvironment(HInstruction instruction,
-                                     LiveEnvironment environment) {
+  void markInputsAsLiveInEnvironment(
+      HInstruction instruction, LiveEnvironment environment) {
     for (int i = 0, len = instruction.inputs.length; i < len; i++) {
       markAsLiveInEnvironment(instruction.inputs[i], environment);
     }
@@ -255,8 +257,8 @@
     return checked;
   }
 
-  void markAsLiveInEnvironment(HInstruction instruction,
-                               LiveEnvironment environment) {
+  void markAsLiveInEnvironment(
+      HInstruction instruction, LiveEnvironment environment) {
     if (generateAtUseSite.contains(instruction)) {
       markInputsAsLiveInEnvironment(instruction, environment);
     } else {
@@ -274,8 +276,8 @@
     }
   }
 
-  void removeFromEnvironment(HInstruction instruction,
-                             LiveEnvironment environment) {
+  void removeFromEnvironment(
+      HInstruction instruction, LiveEnvironment environment) {
     environment.remove(instruction, instructionId);
     // Special case the HCheck instruction to have the same live
     // interval as the instruction it is checking.
@@ -365,8 +367,8 @@
     // Update all instructions that are liveIns in [header] to have a
     // range that covers the loop.
     env.liveInstructions.forEach((HInstruction instruction, int id) {
-      LiveInterval range = env.liveIntervals.putIfAbsent(
-          instruction, () => new LiveInterval());
+      LiveInterval range =
+          env.liveIntervals.putIfAbsent(instruction, () => new LiveInterval());
       range.loopUpdate(env.startId, lastId);
       env.liveInstructions[instruction] = lastId;
     });
@@ -380,7 +382,9 @@
           other.liveInstructions[instruction] = id;
         });
         other.removeLoopMarker(header);
-        env.loopMarkers.forEach((k, v) { other.loopMarkers[k] = v; });
+        env.loopMarkers.forEach((k, v) {
+          other.loopMarkers[k] = v;
+        });
       }
     });
   }
@@ -415,8 +419,8 @@
   final List<Copy> assignments;
 
   CopyHandler()
-    : copies = new List<Copy>(),
-      assignments = new List<Copy>();
+      : copies = new List<Copy>(),
+        assignments = new List<Copy>();
 
   void addCopy(HInstruction source, HInstruction destination) {
     copies.add(new Copy(source, destination));
@@ -453,10 +457,10 @@
   }
 
   VariableNames()
-    : ownName = new Map<HInstruction, String>(),
-      copyHandlers = new Map<HBasicBlock, CopyHandler>(),
-      allUsedNames = new Set<String>(),
-      swapTemp = 't0';
+      : ownName = new Map<HInstruction, String>(),
+        copyHandlers = new Map<HBasicBlock, CopyHandler>(),
+        allUsedNames = new Set<String>(),
+        swapTemp = 't0';
 
   int get numberOfVariables => allUsedNames.length;
 
@@ -498,11 +502,9 @@
   int temporaryIndex = 0;
   static final RegExp regexp = new RegExp('t[0-9]+');
 
-  VariableNamer(LiveEnvironment environment,
-                this.names,
-                this.compiler)
-    : usedNames = new Set<String>(),
-      freeTemporaryNames = new List<String>() {
+  VariableNamer(LiveEnvironment environment, this.names, this.compiler)
+      : usedNames = new Set<String>(),
+        freeTemporaryNames = new List<String>() {
     // [VariableNames.swapTemp] is used when there is a cycle in a copy handler.
     // Therefore we make sure no one uses it.
     usedNames.add(names.swapTemp);
@@ -614,7 +616,6 @@
  * it adds a copy to the CopyHandler of the corresponding predecessor.
  */
 class SsaVariableAllocator extends HBaseVisitor {
-
   final Compiler compiler;
   final Map<HBasicBlock, LiveEnvironment> liveInstructions;
   final Map<HInstruction, LiveInterval> liveIntervals;
@@ -622,19 +623,17 @@
 
   final VariableNames names;
 
-  SsaVariableAllocator(this.compiler,
-                       this.liveInstructions,
-                       this.liveIntervals,
-                       this.generateAtUseSite)
-    : this.names = new VariableNames();
+  SsaVariableAllocator(this.compiler, this.liveInstructions, this.liveIntervals,
+      this.generateAtUseSite)
+      : this.names = new VariableNames();
 
   void visitGraph(HGraph graph) {
     visitDominatorTree(graph);
   }
 
   void visitBasicBlock(HBasicBlock block) {
-    VariableNamer namer = new VariableNamer(
-        liveInstructions[block], names, compiler);
+    VariableNamer namer =
+        new VariableNamer(liveInstructions[block], names, compiler);
 
     block.forEachPhi((HPhi phi) {
       handlePhi(phi, namer);
@@ -667,9 +666,8 @@
     return instructionInterval.diesAt(start);
   }
 
-  void freeUsedNamesAt(HInstruction instruction,
-                       HInstruction at,
-                       VariableNamer namer) {
+  void freeUsedNamesAt(
+      HInstruction instruction, HInstruction at, VariableNamer namer) {
     if (needsName(instruction)) {
       if (diesAt(instruction, at)) {
         namer.freeName(instruction);
diff --git a/pkg/compiler/lib/src/string_validator.dart b/pkg/compiler/lib/src/string_validator.dart
index 60f31dc..70a90b9 100644
--- a/pkg/compiler/lib/src/string_validator.dart
+++ b/pkg/compiler/lib/src/string_validator.dart
@@ -19,18 +19,15 @@
   StringValidator(this.reporter);
 
   DartString validateInterpolationPart(Token token, StringQuoting quoting,
-                                       {bool isFirst: false,
-                                        bool isLast: false}) {
+      {bool isFirst: false, bool isLast: false}) {
     String source = token.value;
     int leftQuote = 0;
     int rightQuote = 0;
     if (isFirst) leftQuote = quoting.leftQuoteLength;
     if (isLast) rightQuote = quoting.rightQuoteLength;
     String content = copyWithoutQuotes(source, leftQuote, rightQuote);
-    return validateString(token,
-                          token.charOffset + leftQuote,
-                          content,
-                          quoting);
+    return validateString(
+        token, token.charOffset + leftQuote, content, quoting);
   }
 
   static StringQuoting quotingFromString(String sourceString) {
@@ -50,7 +47,7 @@
     // and end after the second quote.
     if (source.moveNext() && source.current == quoteChar && source.moveNext()) {
       int code = source.current;
-      assert(code == quoteChar);  // If not, there is a bug in the parser.
+      assert(code == quoteChar); // If not, there is a bug in the parser.
       leftQuoteLength = 3;
 
       // Check if a multiline string starts with optional whitespace followed by
@@ -109,10 +106,8 @@
    * Validates the escape sequences and special characters of a string literal.
    * Returns a DartString if valid, and null if not.
    */
-  DartString validateString(Token token,
-                            int startOffset,
-                            String string,
-                            StringQuoting quoting) {
+  DartString validateString(
+      Token token, int startOffset, String string, StringQuoting quoting) {
     // We need to check for invalid x and u escapes, for line
     // terminators in non-multiline strings, and for invalid Unicode
     // scalar values (either directly or as u-escape values).  We also check
@@ -123,7 +118,7 @@
     bool previousWasLeadSurrogate = false;
     bool invalidUtf16 = false;
     var stringIter = string.codeUnits.iterator;
-    for(HasNextIterator<int> iter = new HasNextIterator(stringIter);
+    for (HasNextIterator<int> iter = new HasNextIterator(stringIter);
         iter.hasNext;
         length++) {
       index++;
@@ -132,7 +127,7 @@
         if (quoting.raw) continue;
         containsEscape = true;
         if (!iter.hasNext) {
-          stringParseError("Incomplete escape sequence",token, index);
+          stringParseError("Incomplete escape sequence", token, index);
           return null;
         }
         index++;
@@ -146,8 +141,8 @@
             index++;
             code = iter.next();
             if (!isHexDigit(code)) {
-              stringParseError("Invalid character in escape sequence",
-                               token, index);
+              stringParseError(
+                  "Invalid character in escape sequence", token, index);
               return null;
             }
           }
@@ -167,8 +162,8 @@
                 break;
               }
               if (!isHexDigit(code)) {
-                stringParseError("Invalid character in escape sequence",
-                                 token, index);
+                stringParseError(
+                    "Invalid character in escape sequence", token, index);
                 return null;
               }
               count++;
@@ -177,8 +172,8 @@
             if (code != $CLOSE_CURLY_BRACKET || count == 0 || count > 6) {
               int errorPosition = index - count;
               if (count > 6) errorPosition += 6;
-              stringParseError("Invalid character in escape sequence",
-                               token, errorPosition);
+              stringParseError(
+                  "Invalid character in escape sequence", token, errorPosition);
               return null;
             }
           } else {
@@ -193,8 +188,8 @@
                 }
               }
               if (!isHexDigit(code)) {
-                stringParseError("Invalid character in escape sequence",
-                                 token, index);
+                stringParseError(
+                    "Invalid character in escape sequence", token, index);
                 return null;
               }
               value = value * 16 + hexDigitValue(code);
diff --git a/pkg/compiler/lib/src/tokens/keyword.dart b/pkg/compiler/lib/src/tokens/keyword.dart
index ce1bc87..ad22ee6 100644
--- a/pkg/compiler/lib/src/tokens/keyword.dart
+++ b/pkg/compiler/lib/src/tokens/keyword.dart
@@ -4,85 +4,82 @@
 
 library dart2js.tokens.keywords;
 
-import '../util/characters.dart' as Characters show
-    $a;
+import '../util/characters.dart' as Characters show $a;
 
-import 'precedence.dart' show
-    PrecedenceInfo;
-import 'precedence_constants.dart' as Precedence show
-    AS_INFO,
-    IS_INFO,
-    KEYWORD_INFO;
+import 'precedence.dart' show PrecedenceInfo;
+import 'precedence_constants.dart' as Precedence
+    show AS_INFO, IS_INFO, KEYWORD_INFO;
 
 /**
  * A keyword in the Dart programming language.
  */
 class Keyword {
-  static const List<Keyword> values = const <Keyword> [
-      const Keyword("assert"),
-      const Keyword("break"),
-      const Keyword("case"),
-      const Keyword("catch"),
-      const Keyword("class"),
-      const Keyword("const"),
-      const Keyword("continue"),
-      const Keyword("default"),
-      const Keyword("do"),
-      const Keyword("else"),
-      const Keyword("enum"),
-      const Keyword("extends"),
-      const Keyword("false"),
-      const Keyword("final"),
-      const Keyword("finally"),
-      const Keyword("for"),
-      const Keyword("if"),
-      const Keyword("in"),
-      const Keyword("new"),
-      const Keyword("null"),
-      const Keyword("rethrow"),
-      const Keyword("return"),
-      const Keyword("super"),
-      const Keyword("switch"),
-      const Keyword("this"),
-      const Keyword("throw"),
-      const Keyword("true"),
-      const Keyword("try"),
-      const Keyword("var"),
-      const Keyword("void"),
-      const Keyword("while"),
-      const Keyword("with"),
+  static const List<Keyword> values = const <Keyword>[
+    const Keyword("assert"),
+    const Keyword("break"),
+    const Keyword("case"),
+    const Keyword("catch"),
+    const Keyword("class"),
+    const Keyword("const"),
+    const Keyword("continue"),
+    const Keyword("default"),
+    const Keyword("do"),
+    const Keyword("else"),
+    const Keyword("enum"),
+    const Keyword("extends"),
+    const Keyword("false"),
+    const Keyword("final"),
+    const Keyword("finally"),
+    const Keyword("for"),
+    const Keyword("if"),
+    const Keyword("in"),
+    const Keyword("new"),
+    const Keyword("null"),
+    const Keyword("rethrow"),
+    const Keyword("return"),
+    const Keyword("super"),
+    const Keyword("switch"),
+    const Keyword("this"),
+    const Keyword("throw"),
+    const Keyword("true"),
+    const Keyword("try"),
+    const Keyword("var"),
+    const Keyword("void"),
+    const Keyword("while"),
+    const Keyword("with"),
 
-      // TODO(ahe): Don't think this is a reserved word.
-      // See: http://dartbug.com/5579
-      const Keyword("is", info: Precedence.IS_INFO),
+    // TODO(ahe): Don't think this is a reserved word.
+    // See: http://dartbug.com/5579
+    const Keyword("is", info: Precedence.IS_INFO),
 
-      const Keyword("abstract", isBuiltIn: true),
-      const Keyword("as", info: Precedence.AS_INFO, isBuiltIn: true),
-      const Keyword("dynamic", isBuiltIn: true),
-      const Keyword("export", isBuiltIn: true),
-      const Keyword("external", isBuiltIn: true),
-      const Keyword("factory", isBuiltIn: true),
-      const Keyword("get", isBuiltIn: true),
-      const Keyword("implements", isBuiltIn: true),
-      const Keyword("import", isBuiltIn: true),
-      const Keyword("library", isBuiltIn: true),
-      const Keyword("operator", isBuiltIn: true),
-      const Keyword("part", isBuiltIn: true),
-      const Keyword("set", isBuiltIn: true),
-      const Keyword("static", isBuiltIn: true),
-      const Keyword("typedef", isBuiltIn: true),
+    const Keyword("abstract", isBuiltIn: true),
+    const Keyword("as", info: Precedence.AS_INFO, isBuiltIn: true),
+    const Keyword("dynamic", isBuiltIn: true),
+    const Keyword("export", isBuiltIn: true),
+    const Keyword("external", isBuiltIn: true),
+    const Keyword("factory", isBuiltIn: true),
+    const Keyword("get", isBuiltIn: true),
+    const Keyword("implements", isBuiltIn: true),
+    const Keyword("import", isBuiltIn: true),
+    const Keyword("library", isBuiltIn: true),
+    const Keyword("operator", isBuiltIn: true),
+    const Keyword("part", isBuiltIn: true),
+    const Keyword("set", isBuiltIn: true),
+    const Keyword("static", isBuiltIn: true),
+    const Keyword("typedef", isBuiltIn: true),
 
-      const Keyword("hide", isPseudo: true),
-      const Keyword("native", isPseudo: true),
-      const Keyword("of", isPseudo: true),
-      const Keyword("on", isPseudo: true),
-      const Keyword("show", isPseudo: true),
-      const Keyword("source", isPseudo: true),
-      const Keyword("deferred", isPseudo: true),
-      const Keyword("async", isPseudo: true),
-      const Keyword("sync", isPseudo: true),
-      const Keyword("await", isPseudo: true),
-      const Keyword("yield", isPseudo: true)];
+    const Keyword("hide", isPseudo: true),
+    const Keyword("native", isPseudo: true),
+    const Keyword("of", isPseudo: true),
+    const Keyword("on", isPseudo: true),
+    const Keyword("show", isPseudo: true),
+    const Keyword("source", isPseudo: true),
+    const Keyword("deferred", isPseudo: true),
+    const Keyword("async", isPseudo: true),
+    const Keyword("sync", isPseudo: true),
+    const Keyword("await", isPseudo: true),
+    const Keyword("yield", isPseudo: true)
+  ];
 
   final String syntax;
   final bool isPseudo;
@@ -98,9 +95,9 @@
   }
 
   const Keyword(this.syntax,
-                {this.isPseudo: false,
-                 this.isBuiltIn: false,
-                 this.info: Precedence.KEYWORD_INFO});
+      {this.isPseudo: false,
+      this.isBuiltIn: false,
+      this.info: Precedence.KEYWORD_INFO});
 
   static Map<String, Keyword> computeKeywordMap() {
     Map<String, Keyword> result = new Map<String, Keyword>();
@@ -125,19 +122,18 @@
   static KeywordState _KEYWORD_STATE;
   static KeywordState get KEYWORD_STATE {
     if (_KEYWORD_STATE == null) {
-      List<String> strings =
-          new List<String>(Keyword.values.length);
+      List<String> strings = new List<String>(Keyword.values.length);
       for (int i = 0; i < Keyword.values.length; i++) {
         strings[i] = Keyword.values[i].syntax;
       }
-      strings.sort((a,b) => a.compareTo(b));
+      strings.sort((a, b) => a.compareTo(b));
       _KEYWORD_STATE = computeKeywordStateTable(0, strings, 0, strings.length);
     }
     return _KEYWORD_STATE;
   }
 
-  static KeywordState computeKeywordStateTable(int start, List<String> strings,
-                                               int offset, int length) {
+  static KeywordState computeKeywordStateTable(
+      int start, List<String> strings, int offset, int length) {
     List<KeywordState> result = new List<KeywordState>(26);
     assert(length != 0);
     int chunk = 0;
@@ -152,9 +148,8 @@
         if (chunk != c) {
           if (chunkStart != -1) {
             assert(result[chunk - Characters.$a] == null);
-            result[chunk - Characters.$a] =
-                computeKeywordStateTable(
-                    start + 1, strings, chunkStart, i - chunkStart);
+            result[chunk - Characters.$a] = computeKeywordStateTable(
+                start + 1, strings, chunkStart, i - chunkStart);
           }
           chunkStart = i;
           chunk = c;
@@ -163,9 +158,8 @@
     }
     if (chunkStart != -1) {
       assert(result[chunk - Characters.$a] == null);
-      result[chunk - Characters.$a] =
-        computeKeywordStateTable(start + 1, strings, chunkStart,
-                                 offset + length - chunkStart);
+      result[chunk - Characters.$a] = computeKeywordStateTable(
+          start + 1, strings, chunkStart, offset + length - chunkStart);
     } else {
       assert(length == 1);
       return new LeafKeywordState(strings[offset]);
@@ -185,7 +179,7 @@
   final List<KeywordState> table;
 
   ArrayKeywordState(List<KeywordState> this.table, String syntax)
-    : super((syntax == null) ? null : Keyword.keywords[syntax]);
+      : super((syntax == null) ? null : Keyword.keywords[syntax]);
 
   KeywordState next(int c) => table[c - Characters.$a];
 
@@ -201,7 +195,7 @@
     for (int i = 0; i < foo.length; i++) {
       if (foo[i] != null) {
         sb.write("${new String.fromCharCodes([i + Characters.$a])}: "
-                 "${foo[i]}; ");
+            "${foo[i]}; ");
       }
     }
     sb.write("]");
diff --git a/pkg/compiler/lib/src/tokens/precedence.dart b/pkg/compiler/lib/src/tokens/precedence.dart
index 1183a0b..c3f4906 100644
--- a/pkg/compiler/lib/src/tokens/precedence.dart
+++ b/pkg/compiler/lib/src/tokens/precedence.dart
@@ -4,8 +4,7 @@
 
 library dart2js.tokens.precedence;
 
-import '../util/util.dart' show
-    computeHashCode;
+import '../util/util.dart' show computeHashCode;
 
 class PrecedenceInfo {
   final String value;
diff --git a/pkg/compiler/lib/src/tokens/precedence_constants.dart b/pkg/compiler/lib/src/tokens/precedence_constants.dart
index f2e44f2..08475ec 100644
--- a/pkg/compiler/lib/src/tokens/precedence_constants.dart
+++ b/pkg/compiler/lib/src/tokens/precedence_constants.dart
@@ -4,18 +4,16 @@
 
 library dart2js.tokens.precedence.constants;
 
-import 'precedence.dart' show
-    PrecedenceInfo;
+import 'precedence.dart' show PrecedenceInfo;
 import 'token_constants.dart';
 
 // TODO(ahe): The following are not tokens in Dart.
 const PrecedenceInfo BACKPING_INFO =
-  const PrecedenceInfo('`', 0, BACKPING_TOKEN);
+    const PrecedenceInfo('`', 0, BACKPING_TOKEN);
 const PrecedenceInfo BACKSLASH_INFO =
-  const PrecedenceInfo('\\', 0, BACKSLASH_TOKEN);
+    const PrecedenceInfo('\\', 0, BACKSLASH_TOKEN);
 const PrecedenceInfo PERIOD_PERIOD_PERIOD_INFO =
-  const PrecedenceInfo('...', 0,
-                       PERIOD_PERIOD_PERIOD_TOKEN);
+    const PrecedenceInfo('...', 0, PERIOD_PERIOD_PERIOD_TOKEN);
 
 /**
  * The cascade operator has the lowest precedence of any operator
@@ -23,219 +21,169 @@
  */
 const int CASCADE_PRECEDENCE = 2;
 const PrecedenceInfo PERIOD_PERIOD_INFO =
-  const PrecedenceInfo('..', CASCADE_PRECEDENCE,
-                       PERIOD_PERIOD_TOKEN);
+    const PrecedenceInfo('..', CASCADE_PRECEDENCE, PERIOD_PERIOD_TOKEN);
 
-const PrecedenceInfo BANG_INFO =
-  const PrecedenceInfo('!', 0, BANG_TOKEN);
-const PrecedenceInfo COLON_INFO =
-  const PrecedenceInfo(':', 0, COLON_TOKEN);
-const PrecedenceInfo INDEX_INFO =
-  const PrecedenceInfo('[]', 0, INDEX_TOKEN);
+const PrecedenceInfo BANG_INFO = const PrecedenceInfo('!', 0, BANG_TOKEN);
+const PrecedenceInfo COLON_INFO = const PrecedenceInfo(':', 0, COLON_TOKEN);
+const PrecedenceInfo INDEX_INFO = const PrecedenceInfo('[]', 0, INDEX_TOKEN);
 const PrecedenceInfo MINUS_MINUS_INFO =
-  const PrecedenceInfo('--', POSTFIX_PRECEDENCE,
-                       MINUS_MINUS_TOKEN);
+    const PrecedenceInfo('--', POSTFIX_PRECEDENCE, MINUS_MINUS_TOKEN);
 const PrecedenceInfo PLUS_PLUS_INFO =
-  const PrecedenceInfo('++', POSTFIX_PRECEDENCE,
-                       PLUS_PLUS_TOKEN);
-const PrecedenceInfo TILDE_INFO =
-  const PrecedenceInfo('~', 0, TILDE_TOKEN);
+    const PrecedenceInfo('++', POSTFIX_PRECEDENCE, PLUS_PLUS_TOKEN);
+const PrecedenceInfo TILDE_INFO = const PrecedenceInfo('~', 0, TILDE_TOKEN);
 
 const PrecedenceInfo FUNCTION_INFO =
-  const PrecedenceInfo('=>', 0, FUNCTION_TOKEN);
-const PrecedenceInfo HASH_INFO =
-  const PrecedenceInfo('#', 0, HASH_TOKEN);
+    const PrecedenceInfo('=>', 0, FUNCTION_TOKEN);
+const PrecedenceInfo HASH_INFO = const PrecedenceInfo('#', 0, HASH_TOKEN);
 const PrecedenceInfo INDEX_EQ_INFO =
-  const PrecedenceInfo('[]=', 0, INDEX_EQ_TOKEN);
+    const PrecedenceInfo('[]=', 0, INDEX_EQ_TOKEN);
 const PrecedenceInfo SEMICOLON_INFO =
-  const PrecedenceInfo(';', 0, SEMICOLON_TOKEN);
-const PrecedenceInfo COMMA_INFO =
-  const PrecedenceInfo(',', 0, COMMA_TOKEN);
+    const PrecedenceInfo(';', 0, SEMICOLON_TOKEN);
+const PrecedenceInfo COMMA_INFO = const PrecedenceInfo(',', 0, COMMA_TOKEN);
 
-const PrecedenceInfo AT_INFO =
-  const PrecedenceInfo('@', 0, AT_TOKEN);
+const PrecedenceInfo AT_INFO = const PrecedenceInfo('@', 0, AT_TOKEN);
 
 // Assignment operators.
 const int ASSIGNMENT_PRECEDENCE = 1;
 const PrecedenceInfo AMPERSAND_EQ_INFO =
-  const PrecedenceInfo('&=',
-                       ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN);
+    const PrecedenceInfo('&=', ASSIGNMENT_PRECEDENCE, AMPERSAND_EQ_TOKEN);
 const PrecedenceInfo BAR_EQ_INFO =
-  const PrecedenceInfo('|=',
-                       ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN);
+    const PrecedenceInfo('|=', ASSIGNMENT_PRECEDENCE, BAR_EQ_TOKEN);
 const PrecedenceInfo CARET_EQ_INFO =
-  const PrecedenceInfo('^=',
-                       ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN);
+    const PrecedenceInfo('^=', ASSIGNMENT_PRECEDENCE, CARET_EQ_TOKEN);
 const PrecedenceInfo EQ_INFO =
-  const PrecedenceInfo('=',
-                       ASSIGNMENT_PRECEDENCE, EQ_TOKEN);
+    const PrecedenceInfo('=', ASSIGNMENT_PRECEDENCE, EQ_TOKEN);
 const PrecedenceInfo GT_GT_EQ_INFO =
-  const PrecedenceInfo('>>=',
-                       ASSIGNMENT_PRECEDENCE, GT_GT_EQ_TOKEN);
+    const PrecedenceInfo('>>=', ASSIGNMENT_PRECEDENCE, GT_GT_EQ_TOKEN);
 const PrecedenceInfo LT_LT_EQ_INFO =
-  const PrecedenceInfo('<<=',
-                       ASSIGNMENT_PRECEDENCE, LT_LT_EQ_TOKEN);
+    const PrecedenceInfo('<<=', ASSIGNMENT_PRECEDENCE, LT_LT_EQ_TOKEN);
 const PrecedenceInfo MINUS_EQ_INFO =
-  const PrecedenceInfo('-=',
-                       ASSIGNMENT_PRECEDENCE, MINUS_EQ_TOKEN);
+    const PrecedenceInfo('-=', ASSIGNMENT_PRECEDENCE, MINUS_EQ_TOKEN);
 const PrecedenceInfo PERCENT_EQ_INFO =
-  const PrecedenceInfo('%=',
-                       ASSIGNMENT_PRECEDENCE, PERCENT_EQ_TOKEN);
+    const PrecedenceInfo('%=', ASSIGNMENT_PRECEDENCE, PERCENT_EQ_TOKEN);
 const PrecedenceInfo PLUS_EQ_INFO =
-  const PrecedenceInfo('+=',
-                       ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN);
+    const PrecedenceInfo('+=', ASSIGNMENT_PRECEDENCE, PLUS_EQ_TOKEN);
 const PrecedenceInfo SLASH_EQ_INFO =
-  const PrecedenceInfo('/=',
-                       ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN);
+    const PrecedenceInfo('/=', ASSIGNMENT_PRECEDENCE, SLASH_EQ_TOKEN);
 const PrecedenceInfo STAR_EQ_INFO =
-  const PrecedenceInfo('*=',
-                       ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN);
+    const PrecedenceInfo('*=', ASSIGNMENT_PRECEDENCE, STAR_EQ_TOKEN);
 const PrecedenceInfo TILDE_SLASH_EQ_INFO =
-  const PrecedenceInfo('~/=',
-                       ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN);
-const PrecedenceInfo QUESTION_QUESTION_EQ_INFO =
-  const PrecedenceInfo('??=',
-                       ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN);
+    const PrecedenceInfo('~/=', ASSIGNMENT_PRECEDENCE, TILDE_SLASH_EQ_TOKEN);
+const PrecedenceInfo QUESTION_QUESTION_EQ_INFO = const PrecedenceInfo(
+    '??=', ASSIGNMENT_PRECEDENCE, QUESTION_QUESTION_EQ_TOKEN);
 
 const PrecedenceInfo QUESTION_INFO =
-  const PrecedenceInfo('?', 3, QUESTION_TOKEN);
+    const PrecedenceInfo('?', 3, QUESTION_TOKEN);
 
 const PrecedenceInfo QUESTION_QUESTION_INFO =
-  const PrecedenceInfo('??', 4, QUESTION_QUESTION_TOKEN);
+    const PrecedenceInfo('??', 4, QUESTION_QUESTION_TOKEN);
 
 const PrecedenceInfo BAR_BAR_INFO =
-  const PrecedenceInfo('||', 5, BAR_BAR_TOKEN);
+    const PrecedenceInfo('||', 5, BAR_BAR_TOKEN);
 
 const PrecedenceInfo AMPERSAND_AMPERSAND_INFO =
-  const PrecedenceInfo('&&', 6, AMPERSAND_AMPERSAND_TOKEN);
+    const PrecedenceInfo('&&', 6, AMPERSAND_AMPERSAND_TOKEN);
 
-const PrecedenceInfo BAR_INFO =
-  const PrecedenceInfo('|', 9, BAR_TOKEN);
+const PrecedenceInfo BAR_INFO = const PrecedenceInfo('|', 9, BAR_TOKEN);
 
-const PrecedenceInfo CARET_INFO =
-  const PrecedenceInfo('^', 10, CARET_TOKEN);
+const PrecedenceInfo CARET_INFO = const PrecedenceInfo('^', 10, CARET_TOKEN);
 
 const PrecedenceInfo AMPERSAND_INFO =
-  const PrecedenceInfo('&', 11, AMPERSAND_TOKEN);
+    const PrecedenceInfo('&', 11, AMPERSAND_TOKEN);
 
 // Equality operators.
 const int EQUALITY_PRECEDENCE = 7;
 const PrecedenceInfo BANG_EQ_EQ_INFO =
-  const PrecedenceInfo('!==',
-                       EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN);
+    const PrecedenceInfo('!==', EQUALITY_PRECEDENCE, BANG_EQ_EQ_TOKEN);
 const PrecedenceInfo BANG_EQ_INFO =
-  const PrecedenceInfo('!=',
-                       EQUALITY_PRECEDENCE, BANG_EQ_TOKEN);
+    const PrecedenceInfo('!=', EQUALITY_PRECEDENCE, BANG_EQ_TOKEN);
 const PrecedenceInfo EQ_EQ_EQ_INFO =
-  const PrecedenceInfo('===',
-                       EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN);
+    const PrecedenceInfo('===', EQUALITY_PRECEDENCE, EQ_EQ_EQ_TOKEN);
 const PrecedenceInfo EQ_EQ_INFO =
-  const PrecedenceInfo('==',
-                       EQUALITY_PRECEDENCE, EQ_EQ_TOKEN);
+    const PrecedenceInfo('==', EQUALITY_PRECEDENCE, EQ_EQ_TOKEN);
 
 // Relational operators.
 const int RELATIONAL_PRECEDENCE = 8;
 const PrecedenceInfo GT_EQ_INFO =
-  const PrecedenceInfo('>=',
-                       RELATIONAL_PRECEDENCE, GT_EQ_TOKEN);
+    const PrecedenceInfo('>=', RELATIONAL_PRECEDENCE, GT_EQ_TOKEN);
 const PrecedenceInfo GT_INFO =
-  const PrecedenceInfo('>',
-                       RELATIONAL_PRECEDENCE, GT_TOKEN);
+    const PrecedenceInfo('>', RELATIONAL_PRECEDENCE, GT_TOKEN);
 const PrecedenceInfo IS_INFO =
-  const PrecedenceInfo('is',
-                       RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
+    const PrecedenceInfo('is', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
 const PrecedenceInfo AS_INFO =
-  const PrecedenceInfo('as',
-                       RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
+    const PrecedenceInfo('as', RELATIONAL_PRECEDENCE, KEYWORD_TOKEN);
 const PrecedenceInfo LT_EQ_INFO =
-  const PrecedenceInfo('<=',
-                       RELATIONAL_PRECEDENCE, LT_EQ_TOKEN);
+    const PrecedenceInfo('<=', RELATIONAL_PRECEDENCE, LT_EQ_TOKEN);
 const PrecedenceInfo LT_INFO =
-  const PrecedenceInfo('<',
-                       RELATIONAL_PRECEDENCE, LT_TOKEN);
+    const PrecedenceInfo('<', RELATIONAL_PRECEDENCE, LT_TOKEN);
 
 // Shift operators.
-const PrecedenceInfo GT_GT_INFO =
-  const PrecedenceInfo('>>', 12, GT_GT_TOKEN);
-const PrecedenceInfo LT_LT_INFO =
-  const PrecedenceInfo('<<', 12, LT_LT_TOKEN);
+const PrecedenceInfo GT_GT_INFO = const PrecedenceInfo('>>', 12, GT_GT_TOKEN);
+const PrecedenceInfo LT_LT_INFO = const PrecedenceInfo('<<', 12, LT_LT_TOKEN);
 
 // Additive operators.
-const PrecedenceInfo MINUS_INFO =
-  const PrecedenceInfo('-', 13, MINUS_TOKEN);
-const PrecedenceInfo PLUS_INFO =
-  const PrecedenceInfo('+', 13, PLUS_TOKEN);
+const PrecedenceInfo MINUS_INFO = const PrecedenceInfo('-', 13, MINUS_TOKEN);
+const PrecedenceInfo PLUS_INFO = const PrecedenceInfo('+', 13, PLUS_TOKEN);
 
 // Multiplicative operators.
 const PrecedenceInfo PERCENT_INFO =
-  const PrecedenceInfo('%', 14, PERCENT_TOKEN);
-const PrecedenceInfo SLASH_INFO =
-  const PrecedenceInfo('/', 14, SLASH_TOKEN);
-const PrecedenceInfo STAR_INFO =
-  const PrecedenceInfo('*', 14, STAR_TOKEN);
+    const PrecedenceInfo('%', 14, PERCENT_TOKEN);
+const PrecedenceInfo SLASH_INFO = const PrecedenceInfo('/', 14, SLASH_TOKEN);
+const PrecedenceInfo STAR_INFO = const PrecedenceInfo('*', 14, STAR_TOKEN);
 const PrecedenceInfo TILDE_SLASH_INFO =
-  const PrecedenceInfo('~/', 14, TILDE_SLASH_TOKEN);
+    const PrecedenceInfo('~/', 14, TILDE_SLASH_TOKEN);
 
 const int POSTFIX_PRECEDENCE = 15;
 const PrecedenceInfo PERIOD_INFO =
-  const PrecedenceInfo('.', POSTFIX_PRECEDENCE,
-                       PERIOD_TOKEN);
+    const PrecedenceInfo('.', POSTFIX_PRECEDENCE, PERIOD_TOKEN);
 const PrecedenceInfo QUESTION_PERIOD_INFO =
-  const PrecedenceInfo('?.', POSTFIX_PRECEDENCE,
-                       QUESTION_PERIOD_TOKEN);
+    const PrecedenceInfo('?.', POSTFIX_PRECEDENCE, QUESTION_PERIOD_TOKEN);
 
 const PrecedenceInfo KEYWORD_INFO =
-  const PrecedenceInfo('keyword', 0, KEYWORD_TOKEN);
+    const PrecedenceInfo('keyword', 0, KEYWORD_TOKEN);
 
-const PrecedenceInfo EOF_INFO =
-  const PrecedenceInfo('EOF', 0, EOF_TOKEN);
+const PrecedenceInfo EOF_INFO = const PrecedenceInfo('EOF', 0, EOF_TOKEN);
 
 const PrecedenceInfo IDENTIFIER_INFO =
-  const PrecedenceInfo('identifier', 0, IDENTIFIER_TOKEN);
+    const PrecedenceInfo('identifier', 0, IDENTIFIER_TOKEN);
 
 const PrecedenceInfo BAD_INPUT_INFO =
-  const PrecedenceInfo('malformed input', 0,
-                       BAD_INPUT_TOKEN);
+    const PrecedenceInfo('malformed input', 0, BAD_INPUT_TOKEN);
 
 const PrecedenceInfo OPEN_PAREN_INFO =
-  const PrecedenceInfo('(', POSTFIX_PRECEDENCE,
-                       OPEN_PAREN_TOKEN);
+    const PrecedenceInfo('(', POSTFIX_PRECEDENCE, OPEN_PAREN_TOKEN);
 
 const PrecedenceInfo CLOSE_PAREN_INFO =
-  const PrecedenceInfo(')', 0, CLOSE_PAREN_TOKEN);
+    const PrecedenceInfo(')', 0, CLOSE_PAREN_TOKEN);
 
 const PrecedenceInfo OPEN_CURLY_BRACKET_INFO =
-  const PrecedenceInfo('{', 0, OPEN_CURLY_BRACKET_TOKEN);
+    const PrecedenceInfo('{', 0, OPEN_CURLY_BRACKET_TOKEN);
 
 const PrecedenceInfo CLOSE_CURLY_BRACKET_INFO =
-  const PrecedenceInfo('}', 0, CLOSE_CURLY_BRACKET_TOKEN);
+    const PrecedenceInfo('}', 0, CLOSE_CURLY_BRACKET_TOKEN);
 
-const PrecedenceInfo INT_INFO =
-  const PrecedenceInfo('int', 0, INT_TOKEN);
+const PrecedenceInfo INT_INFO = const PrecedenceInfo('int', 0, INT_TOKEN);
 
 const PrecedenceInfo STRING_INFO =
-  const PrecedenceInfo('string', 0, STRING_TOKEN);
+    const PrecedenceInfo('string', 0, STRING_TOKEN);
 
 const PrecedenceInfo OPEN_SQUARE_BRACKET_INFO =
-  const PrecedenceInfo('[', POSTFIX_PRECEDENCE,
-                       OPEN_SQUARE_BRACKET_TOKEN);
+    const PrecedenceInfo('[', POSTFIX_PRECEDENCE, OPEN_SQUARE_BRACKET_TOKEN);
 
 const PrecedenceInfo CLOSE_SQUARE_BRACKET_INFO =
-  const PrecedenceInfo(']', 0, CLOSE_SQUARE_BRACKET_TOKEN);
+    const PrecedenceInfo(']', 0, CLOSE_SQUARE_BRACKET_TOKEN);
 
 const PrecedenceInfo DOUBLE_INFO =
-  const PrecedenceInfo('double', 0, DOUBLE_TOKEN);
+    const PrecedenceInfo('double', 0, DOUBLE_TOKEN);
 
 const PrecedenceInfo STRING_INTERPOLATION_INFO =
-  const PrecedenceInfo('\${', 0,
-                       STRING_INTERPOLATION_TOKEN);
+    const PrecedenceInfo('\${', 0, STRING_INTERPOLATION_TOKEN);
 
 const PrecedenceInfo STRING_INTERPOLATION_IDENTIFIER_INFO =
-  const PrecedenceInfo('\$', 0,
-                       STRING_INTERPOLATION_IDENTIFIER_TOKEN);
+    const PrecedenceInfo('\$', 0, STRING_INTERPOLATION_IDENTIFIER_TOKEN);
 
 const PrecedenceInfo HEXADECIMAL_INFO =
-  const PrecedenceInfo('hexadecimal', 0, HEXADECIMAL_TOKEN);
+    const PrecedenceInfo('hexadecimal', 0, HEXADECIMAL_TOKEN);
 
 const PrecedenceInfo COMMENT_INFO =
-  const PrecedenceInfo('comment', 0, COMMENT_TOKEN);
+    const PrecedenceInfo('comment', 0, COMMENT_TOKEN);
diff --git a/pkg/compiler/lib/src/tokens/token.dart b/pkg/compiler/lib/src/tokens/token.dart
index d390eb7..df66bd9 100644
--- a/pkg/compiler/lib/src/tokens/token.dart
+++ b/pkg/compiler/lib/src/tokens/token.dart
@@ -4,23 +4,16 @@
 
 library dart2js.tokens;
 
-import 'dart:convert' show
-    UTF8;
-import 'dart:collection' show
-    HashSet;
+import 'dart:convert' show UTF8;
+import 'dart:collection' show HashSet;
 
 import '../common.dart';
-import '../util/util.dart' show
-    computeHashCode;
+import '../util/util.dart' show computeHashCode;
 
-import 'keyword.dart' show
-    Keyword;
-import 'precedence.dart' show
-    PrecedenceInfo;
-import 'precedence_constants.dart' as Precedence show
-    BAD_INPUT_INFO;
-import 'token_constants.dart' as Tokens show
-    IDENTIFIER_TOKEN;
+import 'keyword.dart' show Keyword;
+import 'precedence.dart' show PrecedenceInfo;
+import 'precedence_constants.dart' as Precedence show BAD_INPUT_INFO;
+import 'token_constants.dart' as Tokens show IDENTIFIER_TOKEN;
 
 /**
  * A token that doubles as a linked list.
@@ -132,7 +125,6 @@
  * Also used for end of file with EOF_INFO.
  */
 class SymbolToken extends Token {
-
   final PrecedenceInfo info;
 
   SymbolToken(this.info, int charOffset) : super(charOffset);
@@ -179,8 +171,7 @@
 }
 
 abstract class ErrorToken extends Token {
-  ErrorToken(int charOffset)
-      : super(charOffset);
+  ErrorToken(int charOffset) : super(charOffset);
 
   PrecedenceInfo get info => Precedence.BAD_INPUT_INFO;
 
@@ -198,8 +189,7 @@
 class BadInputToken extends ErrorToken {
   final int character;
 
-  BadInputToken(this.character, int charOffset)
-      : super(charOffset);
+  BadInputToken(this.character, int charOffset) : super(charOffset);
 
   String toString() => "BadInputToken($character)";
 
@@ -259,7 +249,7 @@
    * is canonicalized before the token is created.
    */
   StringToken.fromString(this.info, String value, int charOffset,
-                         {bool canonicalize : false})
+      {bool canonicalize: false})
       : valueOrLazySubstring = canonicalizedString(value, canonicalize),
         super(charOffset);
 
@@ -267,13 +257,14 @@
    * Creates a lazy string token. If [canonicalize] is true, the string
    * is canonicalized before the token is created.
    */
-  StringToken.fromSubstring(this.info, String data, int start, int end,
-                            int charOffset, {bool canonicalize : false})
+  StringToken.fromSubstring(
+      this.info, String data, int start, int end, int charOffset,
+      {bool canonicalize: false})
       : super(charOffset) {
     int length = end - start;
     if (length <= LAZY_THRESHOLD) {
-      valueOrLazySubstring = canonicalizedString(data.substring(start, end),
-                                                 canonicalize);
+      valueOrLazySubstring =
+          canonicalizedString(data.substring(start, end), canonicalize);
     } else {
       valueOrLazySubstring =
           new LazySubstring(data, start, length, canonicalize);
@@ -285,7 +276,7 @@
    * is passed through a UTF-8 decoder.
    */
   StringToken.fromUtf8Bytes(this.info, List<int> data, int start, int end,
-                            bool asciiOnly, int charOffset)
+      bool asciiOnly, int charOffset)
       : super(charOffset) {
     int length = end - start;
     if (length <= LAZY_THRESHOLD) {
@@ -307,8 +298,8 @@
         valueOrLazySubstring = canonicalizedString(
             data.substring(start, end), valueOrLazySubstring.boolValue);
       } else {
-        valueOrLazySubstring = decodeUtf8(
-            data, start, end, valueOrLazySubstring.boolValue);
+        valueOrLazySubstring =
+            decodeUtf8(data, start, end, valueOrLazySubstring.boolValue);
       }
       return valueOrLazySubstring;
     }
@@ -321,8 +312,7 @@
 
   String toString() => "StringToken($value)";
 
-  static final HashSet<String> canonicalizedSubstrings =
-      new HashSet<String>();
+  static final HashSet<String> canonicalizedSubstrings = new HashSet<String>();
 
   static String canonicalizedString(String s, bool canonicalize) {
     if (!canonicalize) return s;
@@ -409,8 +399,7 @@
 }
 
 bool isUserDefinableOperator(String value) {
-  return
-      isBinaryOperator(value) ||
+  return isBinaryOperator(value) ||
       isMinusOperator(value) ||
       isTernaryOperator(value) ||
       isUnaryOperator(value);
@@ -419,8 +408,7 @@
 bool isUnaryOperator(String value) => value == '~';
 
 bool isBinaryOperator(String value) {
-  return
-      value == '==' ||
+  return value == '==' ||
       value == '[]' ||
       value == '*' ||
       value == '/' ||
diff --git a/pkg/compiler/lib/src/tokens/token_map.dart b/pkg/compiler/lib/src/tokens/token_map.dart
index 55b4d30..e7fc3b5 100644
--- a/pkg/compiler/lib/src/tokens/token_map.dart
+++ b/pkg/compiler/lib/src/tokens/token_map.dart
@@ -4,8 +4,7 @@
 
 library dart2js.tokens.token_map;
 
-import 'token.dart' show
-    Token;
+import 'token.dart' show Token;
 
 /**
  * Key class used in [TokenMap] in which the hash code for a token is based
@@ -15,7 +14,7 @@
   final Token token;
   TokenKey(this.token);
   int get hashCode => token.charOffset;
-  operator==(other) => other is TokenKey && token == other.token;
+  operator ==(other) => other is TokenKey && token == other.token;
 }
 
 /// Map of tokens and the first associated comment.
@@ -33,14 +32,14 @@
  * 6) Storing token/comments pairs in a linked list: ~5400 msec
  */
 class TokenMap {
-  Map<TokenKey,Token> comments = new Map<TokenKey,Token>();
+  Map<TokenKey, Token> comments = new Map<TokenKey, Token>();
 
-  Token operator[] (Token key) {
+  Token operator [](Token key) {
     if (key == null) return null;
     return comments[new TokenKey(key)];
   }
 
-  void operator[]= (Token key, Token value) {
+  void operator []=(Token key, Token value) {
     if (key == null) return;
     comments[new TokenKey(key)] = value;
   }
diff --git a/pkg/compiler/lib/src/tracer.dart b/pkg/compiler/lib/src/tracer.dart
index 723c7ed..359ea77 100644
--- a/pkg/compiler/lib/src/tracer.dart
+++ b/pkg/compiler/lib/src/tracer.dart
@@ -6,22 +6,15 @@
 
 import 'dart:async' show EventSink;
 import '../compiler.dart' as api;
-import 'common/work.dart' show
-    ItemCompilationContext;
-import 'compiler.dart' show
-    Compiler;
-import 'ssa/nodes.dart' as ssa show
-    HGraph;
-import 'ssa/ssa_tracer.dart' show
-    HTracer;
+import 'common/work.dart' show ItemCompilationContext;
+import 'compiler.dart' show Compiler;
+import 'ssa/nodes.dart' as ssa show HGraph;
+import 'ssa/ssa_tracer.dart' show HTracer;
 import 'cps_ir/cps_ir_nodes.dart' as cps_ir;
-import 'cps_ir/cps_ir_tracer.dart' show
-    IRTracer;
+import 'cps_ir/cps_ir_tracer.dart' show IRTracer;
 import 'tree_ir/tree_ir_nodes.dart' as tree_ir;
-import 'tree_ir/tree_ir_tracer.dart' show
-    TreeTracer;
-import 'util/util.dart' show
-    Indentation;
+import 'tree_ir/tree_ir_tracer.dart' show TreeTracer;
+import 'util/util.dart' show Indentation;
 
 /**
  * If non-null, we only trace methods whose name match the regexp defined by the
@@ -47,8 +40,8 @@
       : this.compiler = compiler,
         output = TRACE_FILTER != null ? outputProvider('dart', 'cfg') : null;
 
-  void traceCompilation(String methodName,
-                        ItemCompilationContext compilationContext) {
+  void traceCompilation(
+      String methodName, ItemCompilationContext compilationContext) {
     if (!isEnabled) return;
     traceActive = TRACE_FILTER.hasMatch(methodName);
     if (!traceActive) return;
@@ -64,11 +57,9 @@
     if (!traceActive) return;
     if (irObject is ssa.HGraph) {
       new HTracer(output, compiler, context).traceGraph(name, irObject);
-    }
-    else if (irObject is cps_ir.FunctionDefinition) {
+    } else if (irObject is cps_ir.FunctionDefinition) {
       new IRTracer(output).traceGraph(name, irObject);
-    }
-    else if (irObject is tree_ir.FunctionDefinition) {
+    } else if (irObject is tree_ir.FunctionDefinition) {
       new TreeTracer(output).traceGraph(name, irObject);
     }
   }
@@ -80,7 +71,6 @@
   }
 }
 
-
 abstract class TracerUtil {
   EventSink<String> get output;
   final Indentation _ind = new Indentation();
diff --git a/pkg/compiler/lib/src/tree/dartstring.dart b/pkg/compiler/lib/src/tree/dartstring.dart
index 7ada1fa..684f55b 100644
--- a/pkg/compiler/lib/src/tree/dartstring.dart
+++ b/pkg/compiler/lib/src/tree/dartstring.dart
@@ -43,7 +43,7 @@
   String slowToString();
 
   bool operator ==(var other) {
-    if (other is !DartString) return false;
+    if (other is! DartString) return false;
     DartString otherString = other;
     if (length != otherString.length) return false;
     Iterator it1 = iterator;
@@ -64,7 +64,6 @@
   String toString() => "DartString#${length}:${slowToString()}";
 }
 
-
 /**
  * A [DartString] where the content is represented by an actual [String].
  */
@@ -112,6 +111,7 @@
     if (toStringCache != null) return toStringCache.codeUnits.iterator;
     return new StringEscapeIterator(source);
   }
+
   String slowToString() {
     if (toStringCache != null) return toStringCache;
     StringBuffer buffer = new StringBuffer();
@@ -144,6 +144,7 @@
     toStringCache = left.slowToString() + right.slowToString();
     return toStringCache;
   }
+
   String get source => slowToString();
 }
 
@@ -176,6 +177,7 @@
     }
     return true;
   }
+
   void nextPart() {
     if (right != null) {
       currentIterator = new HasNextIterator<int>(right.iterator);
@@ -188,7 +190,7 @@
 /**
  *Iterator that returns the actual string contents of a string with escapes.
  */
-class StringEscapeIterator implements Iterator<int>{
+class StringEscapeIterator implements Iterator<int> {
   final Iterator<int> source;
   int _current = null;
 
@@ -209,12 +211,24 @@
     source.moveNext();
     code = source.current;
     switch (code) {
-      case $n: _current = $LF; break;
-      case $r: _current = $CR; break;
-      case $t: _current = $TAB; break;
-      case $b: _current = $BS; break;
-      case $f: _current = $FF; break;
-      case $v: _current = $VTAB; break;
+      case $n:
+        _current = $LF;
+        break;
+      case $r:
+        _current = $CR;
+        break;
+      case $t:
+        _current = $TAB;
+        break;
+      case $b:
+        _current = $BS;
+        break;
+      case $f:
+        _current = $FF;
+        break;
+      case $v:
+        _current = $VTAB;
+        break;
       case $x:
         source.moveNext();
         int value = hexDigitValue(source.current);
diff --git a/pkg/compiler/lib/src/tree/nodes.dart b/pkg/compiler/lib/src/tree/nodes.dart
index 46c5424..9335fef 100644
--- a/pkg/compiler/lib/src/tree/nodes.dart
+++ b/pkg/compiler/lib/src/tree/nodes.dart
@@ -7,10 +7,12 @@
 import '../common.dart';
 import '../tokens/precedence_constants.dart' as Precedence show FUNCTION_INFO;
 import '../tokens/token.dart' show BeginGroupToken, Token;
-import '../tokens/token_constants.dart' as Tokens show IDENTIFIER_TOKEN, KEYWORD_TOKEN, PLUS_TOKEN;
+import '../tokens/token_constants.dart' as Tokens
+    show IDENTIFIER_TOKEN, KEYWORD_TOKEN, PLUS_TOKEN;
 import '../util/util.dart';
 import '../util/characters.dart';
-import '../resolution/secret_tree_element.dart' show NullTreeElementMixin, StoredTreeElementMixin;
+import '../resolution/secret_tree_element.dart'
+    show NullTreeElementMixin, StoredTreeElementMixin;
 import '../elements/elements.dart' show MetadataAnnotation;
 import 'dartstring.dart';
 import 'prettyprint.dart';
@@ -22,7 +24,7 @@
   R visitNode(Node node);
 
   R visitAssert(Assert node) => visitStatement(node);
-  R visitAsyncForIn(AsyncForIn node) => visitLoop(node);
+  R visitAsyncForIn(AsyncForIn node) => visitForIn(node);
   R visitAsyncModifier(AsyncModifier node) => visitNode(node);
   R visitAwait(Await node) => visitExpression(node);
   R visitBlock(Block node) => visitStatement(node);
@@ -44,6 +46,7 @@
   R visitExpression(Expression node) => visitNode(node);
   R visitExpressionStatement(ExpressionStatement node) => visitStatement(node);
   R visitFor(For node) => visitLoop(node);
+  R visitForIn(ForIn node) => visitLoop(node);
   R visitFunctionDeclaration(FunctionDeclaration node) => visitStatement(node);
   R visitFunctionExpression(FunctionExpression node) => visitExpression(node);
   R visitGotoStatement(GotoStatement node) => visitStatement(node);
@@ -65,7 +68,7 @@
   R visitLiteralNull(LiteralNull node) => visitLiteral(node);
   R visitLiteralString(LiteralString node) => visitStringNode(node);
   R visitStringJuxtaposition(StringJuxtaposition node) => visitStringNode(node);
-  R visitSyncForIn(SyncForIn node) => visitLoop(node);
+  R visitSyncForIn(SyncForIn node) => visitForIn(node);
   R visitLoop(Loop node) => visitStatement(node);
   R visitMetadata(Metadata node) => visitNode(node);
   R visitMixinApplication(MixinApplication node) => visitNode(node);
@@ -74,12 +77,14 @@
   R visitNamedMixinApplication(NamedMixinApplication node) {
     return visitMixinApplication(node);
   }
+
   R visitNewExpression(NewExpression node) => visitExpression(node);
   R visitNodeList(NodeList node) => visitNode(node);
   R visitOperator(Operator node) => visitIdentifier(node);
   R visitParenthesizedExpression(ParenthesizedExpression node) {
     return visitExpression(node);
   }
+
   R visitPart(Part node) => visitLibraryTag(node);
   R visitPartOf(PartOf node) => visitNode(node);
   R visitPostfix(Postfix node) => visitNodeList(node);
@@ -87,6 +92,7 @@
   R visitRedirectingFactoryBody(RedirectingFactoryBody node) {
     return visitStatement(node);
   }
+
   R visitRethrow(Rethrow node) => visitStatement(node);
   R visitReturn(Return node) => visitStatement(node);
   R visitSend(Send node) => visitExpression(node);
@@ -97,6 +103,7 @@
   R visitStringInterpolationPart(StringInterpolationPart node) {
     return visitNode(node);
   }
+
   R visitSwitchCase(SwitchCase node) => visitNode(node);
   R visitSwitchStatement(SwitchStatement node) => visitStatement(node);
   R visitLiteralSymbol(LiteralSymbol node) => visitExpression(node);
@@ -110,6 +117,161 @@
   R visitYield(Yield node) => visitStatement(node);
 }
 
+/// Visitor for [Node]s that take an additional argument of type [A] and returns
+/// a value of type [R].
+abstract class Visitor1<R, A> {
+  const Visitor1();
+
+  R visitNode(Node node, A arg);
+
+  R visitAssert(Assert node, A arg) => visitStatement(node, arg);
+  R visitAsyncForIn(AsyncForIn node, A arg) => visitForIn(node, arg);
+  R visitAsyncModifier(AsyncModifier node, A arg) => visitNode(node, arg);
+  R visitAwait(Await node, A arg) => visitExpression(node, arg);
+  R visitBlock(Block node, A arg) => visitStatement(node, arg);
+  R visitBreakStatement(BreakStatement node, A arg) {
+    return visitGotoStatement(node, arg);
+  }
+
+  R visitCascade(Cascade node, A arg) => visitExpression(node, arg);
+  R visitCascadeReceiver(CascadeReceiver node, A arg) {
+    return visitExpression(node, arg);
+  }
+
+  R visitCaseMatch(CaseMatch node, A arg) => visitNode(node, arg);
+  R visitCatchBlock(CatchBlock node, A arg) => visitNode(node, arg);
+  R visitClassNode(ClassNode node, A arg) => visitNode(node, arg);
+  R visitCombinator(Combinator node, A arg) => visitNode(node, arg);
+  R visitConditional(Conditional node, A arg) => visitExpression(node, arg);
+  R visitConditionalUri(ConditionalUri node, A arg) {
+    return visitNode(node, arg);
+  }
+
+  R visitContinueStatement(ContinueStatement node, A arg) {
+    return visitGotoStatement(node, arg);
+  }
+
+  R visitDottedName(DottedName node, A arg) {
+    return visitExpression(node, arg);
+  }
+
+  R visitDoWhile(DoWhile node, A arg) => visitLoop(node, arg);
+  R visitEmptyStatement(EmptyStatement node, A arg) {
+    return visitStatement(node, arg);
+  }
+
+  R visitEnum(Enum node, A arg) => visitNode(node, arg);
+  R visitExport(Export node, A arg) => visitLibraryDependency(node, arg);
+  R visitExpression(Expression node, A arg) => visitNode(node, arg);
+  R visitExpressionStatement(ExpressionStatement node, A arg) {
+    return visitStatement(node, arg);
+  }
+
+  R visitFor(For node, A arg) => visitLoop(node, arg);
+  R visitForIn(ForIn node, A arg) => visitLoop(node, arg);
+  R visitFunctionDeclaration(FunctionDeclaration node, A arg) {
+    return visitStatement(node, arg);
+  }
+
+  R visitFunctionExpression(FunctionExpression node, A arg) {
+    return visitExpression(node, arg);
+  }
+
+  R visitGotoStatement(GotoStatement node, A arg) {
+    return visitStatement(node, arg);
+  }
+
+  R visitIdentifier(Identifier node, A arg) {
+    return visitExpression(node, arg);
+  }
+
+  R visitImport(Import node, A arg) {
+    return visitLibraryDependency(node, arg);
+  }
+
+  R visitIf(If node, A arg) => visitStatement(node, arg);
+  R visitLabel(Label node, A arg) => visitNode(node, arg);
+  R visitLabeledStatement(LabeledStatement node, A arg) {
+    return visitStatement(node, arg);
+  }
+
+  R visitLibraryDependency(LibraryDependency node, A arg) {
+    return visitLibraryTag(node, arg);
+  }
+
+  R visitLibraryName(LibraryName node, A arg) => visitLibraryTag(node, arg);
+  R visitLibraryTag(LibraryTag node, A arg) => visitNode(node, arg);
+  R visitLiteral(Literal node, A arg) => visitExpression(node, arg);
+  R visitLiteralBool(LiteralBool node, A arg) => visitLiteral(node, arg);
+  R visitLiteralDouble(LiteralDouble node, A arg) => visitLiteral(node, arg);
+  R visitLiteralInt(LiteralInt node, A arg) => visitLiteral(node, arg);
+  R visitLiteralList(LiteralList node, A arg) => visitExpression(node, arg);
+  R visitLiteralMap(LiteralMap node, A arg) => visitExpression(node, arg);
+  R visitLiteralMapEntry(LiteralMapEntry node, A arg) => visitNode(node, arg);
+  R visitLiteralNull(LiteralNull node, A arg) => visitLiteral(node, arg);
+  R visitLiteralString(LiteralString node, A arg) => visitStringNode(node, arg);
+  R visitStringJuxtaposition(StringJuxtaposition node, A arg) {
+    return visitStringNode(node, arg);
+  }
+
+  R visitSyncForIn(SyncForIn node, A arg) => visitForIn(node, arg);
+  R visitLoop(Loop node, A arg) => visitStatement(node, arg);
+  R visitMetadata(Metadata node, A arg) => visitNode(node, arg);
+  R visitMixinApplication(MixinApplication node, A arg) => visitNode(node, arg);
+  R visitModifiers(Modifiers node, A arg) => visitNode(node, arg);
+  R visitNamedArgument(NamedArgument node, A arg) => visitExpression(node, arg);
+  R visitNamedMixinApplication(NamedMixinApplication node, A arg) {
+    return visitMixinApplication(node, arg);
+  }
+
+  R visitNewExpression(NewExpression node, A arg) => visitExpression(node, arg);
+  R visitNodeList(NodeList node, A arg) => visitNode(node, arg);
+  R visitOperator(Operator node, A arg) => visitIdentifier(node, arg);
+  R visitParenthesizedExpression(ParenthesizedExpression node, A arg) {
+    return visitExpression(node, arg);
+  }
+
+  R visitPart(Part node, A arg) => visitLibraryTag(node, arg);
+  R visitPartOf(PartOf node, A arg) => visitNode(node, arg);
+  R visitPostfix(Postfix node, A arg) => visitNodeList(node, arg);
+  R visitPrefix(Prefix node, A arg) => visitNodeList(node, arg);
+  R visitRedirectingFactoryBody(RedirectingFactoryBody node, A arg) {
+    return visitStatement(node, arg);
+  }
+
+  R visitRethrow(Rethrow node, A arg) => visitStatement(node, arg);
+  R visitReturn(Return node, A arg) => visitStatement(node, arg);
+  R visitSend(Send node, A arg) => visitExpression(node, arg);
+  R visitSendSet(SendSet node, A arg) => visitSend(node, arg);
+  R visitStatement(Statement node, A arg) => visitNode(node, arg);
+  R visitStringNode(StringNode node, A arg) => visitExpression(node, arg);
+  R visitStringInterpolation(StringInterpolation node, A arg) {
+    return visitStringNode(node, arg);
+  }
+
+  R visitStringInterpolationPart(StringInterpolationPart node, A arg) {
+    return visitNode(node, arg);
+  }
+
+  R visitSwitchCase(SwitchCase node, A arg) => visitNode(node, arg);
+  R visitSwitchStatement(SwitchStatement node, A arg) {
+    return visitStatement(node, arg);
+  }
+
+  R visitLiteralSymbol(LiteralSymbol node, A arg) => visitExpression(node, arg);
+  R visitThrow(Throw node, A arg) => visitExpression(node, arg);
+  R visitTryStatement(TryStatement node, A arg) => visitStatement(node, arg);
+  R visitTypeAnnotation(TypeAnnotation node, A arg) => visitNode(node, arg);
+  R visitTypedef(Typedef node, A arg) => visitNode(node, arg);
+  R visitTypeVariable(TypeVariable node, A arg) => visitNode(node, arg);
+  R visitVariableDefinitions(VariableDefinitions node, A arg) {
+    return visitStatement(node, arg);
+  }
+
+  R visitWhile(While node, A arg) => visitLoop(node, arg);
+  R visitYield(Yield node, A arg) => visitStatement(node, arg);
+}
+
 Token firstBeginToken(Node first, Node second) {
   Token token = null;
   if (first != null) {
@@ -141,8 +303,12 @@
 
   accept(Visitor visitor);
 
+  accept1(Visitor1 visitor, arg);
+
   visitChildren(Visitor visitor);
 
+  visitChildren1(Visitor1 visitor, arg);
+
   /**
    * Returns this node unparsed to Dart source string.
    */
@@ -263,14 +429,23 @@
   final Token extendsKeyword;
   final Token endToken;
 
-  ClassNode(this.modifiers, this.name, this.typeParameters, this.superclass,
-            this.interfaces, this.beginToken,
-            this.extendsKeyword, this.body, this.endToken);
+  ClassNode(
+      this.modifiers,
+      this.name,
+      this.typeParameters,
+      this.superclass,
+      this.interfaces,
+      this.beginToken,
+      this.extendsKeyword,
+      this.body,
+      this.endToken);
 
   ClassNode asClassNode() => this;
 
   accept(Visitor visitor) => visitor.visitClassNode(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitClassNode(this, arg);
+
   visitChildren(Visitor visitor) {
     if (name != null) name.accept(visitor);
     if (typeParameters != null) typeParameters.accept(visitor);
@@ -279,6 +454,14 @@
     if (body != null) body.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (name != null) name.accept1(visitor, arg);
+    if (typeParameters != null) typeParameters.accept1(visitor, arg);
+    if (superclass != null) superclass.accept1(visitor, arg);
+    if (interfaces != null) interfaces.accept1(visitor, arg);
+    if (body != null) body.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => beginToken;
 
   @override
@@ -313,11 +496,18 @@
 
   accept(Visitor visitor) => visitor.visitMixinApplication(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitMixinApplication(this, arg);
+
   visitChildren(Visitor visitor) {
     if (superclass != null) superclass.accept(visitor);
     if (mixins != null) mixins.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (superclass != null) superclass.accept1(visitor, arg);
+    if (mixins != null) mixins.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => superclass.getBeginToken();
   Token getEndToken() => mixins.getEndToken();
 }
@@ -335,9 +525,8 @@
   final Token classKeyword;
   final Token endToken;
 
-  NamedMixinApplication(this.name, this.typeParameters,
-                        this.modifiers, this.mixinApplication, this.interfaces,
-                        this.classKeyword, this.endToken);
+  NamedMixinApplication(this.name, this.typeParameters, this.modifiers,
+      this.mixinApplication, this.interfaces, this.classKeyword, this.endToken);
 
   TypeAnnotation get superclass => mixinApplication.superclass;
   NodeList get mixins => mixinApplication.mixins;
@@ -347,6 +536,10 @@
 
   accept(Visitor visitor) => visitor.visitNamedMixinApplication(this);
 
+  accept1(Visitor1 visitor, arg) {
+    return visitor.visitNamedMixinApplication(this, arg);
+  }
+
   visitChildren(Visitor visitor) {
     name.accept(visitor);
     if (typeParameters != null) typeParameters.accept(visitor);
@@ -355,6 +548,14 @@
     mixinApplication.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    name.accept1(visitor, arg);
+    if (typeParameters != null) typeParameters.accept1(visitor, arg);
+    if (modifiers != null) modifiers.accept1(visitor, arg);
+    if (interfaces != null) interfaces.accept1(visitor, arg);
+    mixinApplication.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => classKeyword;
   Token getEndToken() => endToken;
 }
@@ -363,9 +564,6 @@
   Expression();
 
   Expression asExpression() => this;
-
-  // TODO(ahe): make class abstract instead of adding an abstract method.
-  accept(Visitor visitor);
 }
 
 abstract class Statement extends Node {
@@ -373,16 +571,12 @@
 
   Statement asStatement() => this;
 
-  // TODO(ahe): make class abstract instead of adding an abstract method.
-  accept(Visitor visitor);
-
   bool isValidBreakTarget() => true;
 }
 
 /// Erroneous expression that behaves as a literal null.
 class ErrorExpression extends LiteralNull {
-  ErrorExpression(token)
-      : super(token);
+  ErrorExpression(token) : super(token);
 
   ErrorExpression asErrorExpression() => this;
 
@@ -406,29 +600,39 @@
 
   Link<Node> get arguments => argumentsNode.nodes;
 
-  Send([this.receiver, this.selector, this.argumentsNode,
+  Send(
+      [this.receiver,
+      this.selector,
+      this.argumentsNode,
       this.isConditional = false]);
   Send.postfix(this.receiver, this.selector,
       [Node argument = null, this.isConditional = false])
       : argumentsNode = (argument == null)
-        ? new Postfix()
-        : new Postfix.singleton(argument);
+            ? new Postfix()
+            : new Postfix.singleton(argument);
   Send.prefix(this.receiver, this.selector,
       [Node argument = null, this.isConditional = false])
-      : argumentsNode = (argument == null)
-        ? new Prefix()
-        : new Prefix.singleton(argument);
+      : argumentsNode =
+            (argument == null) ? new Prefix() : new Prefix.singleton(argument);
 
   Send asSend() => this;
 
   accept(Visitor visitor) => visitor.visitSend(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitSend(this, arg);
+
   visitChildren(Visitor visitor) {
     if (receiver != null) receiver.accept(visitor);
     if (selector != null) selector.accept(visitor);
     if (argumentsNode != null) argumentsNode.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (receiver != null) receiver.accept1(visitor, arg);
+    if (selector != null) selector.accept1(visitor, arg);
+    if (argumentsNode != null) argumentsNode.accept1(visitor, arg);
+  }
+
   int argumentCount() {
     return (argumentsNode == null) ? -1 : argumentsNode.slowLength();
   }
@@ -436,6 +640,7 @@
   bool get isSuperCall {
     return receiver != null && receiver.isSuper();
   }
+
   bool get isOperator => selector is Operator;
   bool get isPropertyAccess => argumentsNode == null;
   bool get isFunctionObjectInvocation => selector == null;
@@ -452,13 +657,11 @@
       isOperator && identical(selector.asOperator().source, '??');
 
   bool get isTypeCast {
-    return isOperator
-        && identical(selector.asOperator().source, 'as');
+    return isOperator && identical(selector.asOperator().source, 'as');
   }
 
   bool get isTypeTest {
-    return isOperator
-        && identical(selector.asOperator().source, 'is');
+    return isOperator && identical(selector.asOperator().source, 'is');
   }
 
   bool get isIsNotCheck {
@@ -469,9 +672,7 @@
     assert(isOperator);
     assert(identical(selector.asOperator().source, 'is') ||
         identical(selector.asOperator().source, 'as'));
-    return isIsNotCheck
-        ? arguments.head.asSend().receiver
-        : arguments.head;
+    return isIsNotCheck ? arguments.head.asSend().receiver : arguments.head;
   }
 
   Token getBeginToken() {
@@ -513,38 +714,40 @@
   final Operator assignmentOperator;
   SendSet(receiver, selector, this.assignmentOperator, argumentsNode,
       [bool isConditional = false])
-    : super(receiver, selector, argumentsNode, isConditional);
-  SendSet.postfix(receiver,
-                  selector,
-                  this.assignmentOperator,
-                  [Node argument = null, bool isConditional = false])
+      : super(receiver, selector, argumentsNode, isConditional);
+  SendSet.postfix(receiver, selector, this.assignmentOperator,
+      [Node argument = null, bool isConditional = false])
       : super.postfix(receiver, selector, argument, isConditional);
-  SendSet.prefix(receiver,
-                 selector,
-                 this.assignmentOperator,
-                 [Node argument = null, bool isConditional = false])
+  SendSet.prefix(receiver, selector, this.assignmentOperator,
+      [Node argument = null, bool isConditional = false])
       : super.prefix(receiver, selector, argument, isConditional);
 
   SendSet asSendSet() => this;
 
   accept(Visitor visitor) => visitor.visitSendSet(this);
 
-  /// `true` if this send is not a simple assignment.
-  bool get isComplex => !identical(assignmentOperator.source, '=');
-
-  /// Whether this is an if-null assignment of the form `a ??= b`.
-  bool get isIfNullAssignment =>
-      identical(assignmentOperator.source, '??=');
+  accept1(Visitor1 visitor, arg) => visitor.visitSendSet(this, arg);
 
   visitChildren(Visitor visitor) {
     super.visitChildren(visitor);
     if (assignmentOperator != null) assignmentOperator.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    super.visitChildren1(visitor, arg);
+    if (assignmentOperator != null) assignmentOperator.accept1(visitor, arg);
+  }
+
+  /// `true` if this send is not a simple assignment.
+  bool get isComplex => !identical(assignmentOperator.source, '=');
+
+  /// Whether this is an if-null assignment of the form `a ??= b`.
+  bool get isIfNullAssignment => identical(assignmentOperator.source, '??=');
+
   Send copyWithReceiver(Node newReceiver, bool isConditional) {
     assert(receiver == null);
-    return new SendSet(newReceiver, selector, assignmentOperator,
-                       argumentsNode, isConditional);
+    return new SendSet(newReceiver, selector, assignmentOperator, argumentsNode,
+        isConditional);
   }
 
   Token getBeginToken() {
@@ -571,10 +774,16 @@
 
   accept(Visitor visitor) => visitor.visitNewExpression(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitNewExpression(this, arg);
+
   visitChildren(Visitor visitor) {
     if (send != null) send.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (send != null) send.accept1(visitor, arg);
+  }
+
   bool get isConst {
     return newToken == null || identical(newToken.stringValue, 'const');
   }
@@ -617,6 +826,8 @@
 
   accept(Visitor visitor) => visitor.visitNodeList(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitNodeList(this, arg);
+
   visitChildren(Visitor visitor) {
     if (nodes == null) return;
     for (Link<Node> link = nodes; !link.isEmpty; link = link.tail) {
@@ -624,18 +835,25 @@
     }
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (nodes == null) return;
+    for (Link<Node> link = nodes; !link.isEmpty; link = link.tail) {
+      if (link.head != null) link.head.accept1(visitor, arg);
+    }
+  }
+
   Token getBeginToken() {
     if (beginToken != null) return beginToken;
-     if (nodes != null) {
-       for (Link<Node> link = nodes; !link.isEmpty; link = link.tail) {
-         if (link.head.getBeginToken() != null) {
-           return link.head.getBeginToken();
-         }
-         if (link.head.getEndToken() != null) {
-           return link.head.getEndToken();
-         }
-       }
-     }
+    if (nodes != null) {
+      for (Link<Node> link = nodes; !link.isEmpty; link = link.tail) {
+        if (link.head.getBeginToken() != null) {
+          return link.head.getBeginToken();
+        }
+        if (link.head.getEndToken() != null) {
+          return link.head.getEndToken();
+        }
+      }
+    }
     return endToken;
   }
 
@@ -664,10 +882,16 @@
 
   accept(Visitor visitor) => visitor.visitBlock(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitBlock(this, arg);
+
   visitChildren(Visitor visitor) {
     if (statements != null) statements.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (statements != null) statements.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => statements.getBeginToken();
 
   Token getEndToken() => statements.getEndToken();
@@ -681,8 +905,8 @@
   final Token ifToken;
   final Token elseToken;
 
-  If(this.condition, this.thenPart, this.elsePart,
-     this.ifToken, this.elseToken);
+  If(this.condition, this.thenPart, this.elsePart, this.ifToken,
+      this.elseToken);
 
   If asIf() => this;
 
@@ -690,12 +914,20 @@
 
   accept(Visitor visitor) => visitor.visitIf(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitIf(this, arg);
+
   visitChildren(Visitor visitor) {
     if (condition != null) condition.accept(visitor);
     if (thenPart != null) thenPart.accept(visitor);
     if (elsePart != null) elsePart.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (condition != null) condition.accept1(visitor, arg);
+    if (thenPart != null) thenPart.accept1(visitor, arg);
+    if (elsePart != null) elsePart.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => ifToken;
 
   Token getEndToken() {
@@ -712,19 +944,27 @@
   final Token questionToken;
   final Token colonToken;
 
-  Conditional(this.condition, this.thenExpression,
-              this.elseExpression, this.questionToken, this.colonToken);
+  Conditional(this.condition, this.thenExpression, this.elseExpression,
+      this.questionToken, this.colonToken);
 
   Conditional asConditional() => this;
 
   accept(Visitor visitor) => visitor.visitConditional(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitConditional(this, arg);
+
   visitChildren(Visitor visitor) {
     condition.accept(visitor);
     thenExpression.accept(visitor);
     elseExpression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    condition.accept1(visitor, arg);
+    thenExpression.accept1(visitor, arg);
+    elseExpression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => condition.getBeginToken();
 
   Token getEndToken() => elseExpression.getEndToken();
@@ -740,7 +980,8 @@
   final Token forToken;
 
   For(this.initializer, this.conditionStatement, this.update, body,
-      this.forToken) : super(body);
+      this.forToken)
+      : super(body);
 
   For asFor() => this;
 
@@ -756,6 +997,8 @@
 
   accept(Visitor visitor) => visitor.visitFor(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitFor(this, arg);
+
   visitChildren(Visitor visitor) {
     if (initializer != null) initializer.accept(visitor);
     if (conditionStatement != null) conditionStatement.accept(visitor);
@@ -763,6 +1006,13 @@
     if (body != null) body.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (initializer != null) initializer.accept1(visitor, arg);
+    if (conditionStatement != null) conditionStatement.accept1(visitor, arg);
+    if (update != null) update.accept1(visitor, arg);
+    if (body != null) body.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => forToken;
 
   Token getEndToken() {
@@ -779,8 +1029,12 @@
 
   accept(Visitor visitor) => visitor.visitFunctionDeclaration(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitFunctionDeclaration(this, arg);
+
   visitChildren(Visitor visitor) => function.accept(visitor);
 
+  visitChildren1(Visitor1 visitor, arg) => function.accept1(visitor, arg);
+
   Token getBeginToken() => function.getBeginToken();
 
   @override
@@ -804,8 +1058,12 @@
 
   accept(Visitor visitor) => visitor.visitAsyncModifier(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitAsyncModifier(this, arg);
+
   visitChildren(Visitor visitor) {}
 
+  visitChildren1(Visitor1 visitor, arg) {}
+
   Token getBeginToken() => asyncToken;
 
   Token getEndToken() => starToken != null ? starToken : asyncToken;
@@ -836,8 +1094,7 @@
   final AsyncModifier asyncModifier;
 
   FunctionExpression(this.name, this.parameters, this.body, this.returnType,
-                     this.modifiers, this.initializers, this.getOrSet,
-                     this.asyncModifier) {
+      this.modifiers, this.initializers, this.getOrSet, this.asyncModifier) {
     assert(modifiers != null);
   }
 
@@ -845,6 +1102,8 @@
 
   accept(Visitor visitor) => visitor.visitFunctionExpression(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitFunctionExpression(this, arg);
+
   bool get isRedirectingFactory {
     return body != null && body.asRedirectingFactoryBody() != null;
   }
@@ -859,6 +1118,16 @@
     if (body != null) body.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (modifiers != null) modifiers.accept1(visitor, arg);
+    if (returnType != null) returnType.accept1(visitor, arg);
+    if (name != null) name.accept1(visitor, arg);
+    if (parameters != null) parameters.accept1(visitor, arg);
+    if (initializers != null) initializers.accept1(visitor, arg);
+    if (asyncModifier != null) asyncModifier.accept1(visitor, arg);
+    if (body != null) body.accept1(visitor, arg);
+  }
+
   bool get hasBody => body.asEmptyStatement() == null;
 
   bool get hasEmptyBody {
@@ -898,6 +1167,8 @@
 
   visitChildren(Visitor visitor) {}
 
+  visitChildren1(Visitor1 visitor, arg) {}
+
   Token getBeginToken() => token;
 
   Token getEndToken() => token;
@@ -921,11 +1192,13 @@
   }
 
   accept(Visitor visitor) => visitor.visitLiteralInt(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralInt(this, arg);
 }
 
 class LiteralDouble extends Literal<double> {
   LiteralDouble(Token token, DecodeErrorHandler handler)
-    : super(token, handler);
+      : super(token, handler);
 
   LiteralDouble asLiteralDouble() => this;
 
@@ -942,6 +1215,8 @@
   }
 
   accept(Visitor visitor) => visitor.visitLiteralDouble(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralDouble(this, arg);
 }
 
 class LiteralBool extends Literal<bool> {
@@ -957,11 +1232,11 @@
   }
 
   accept(Visitor visitor) => visitor.visitLiteralBool(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralBool(this, arg);
 }
 
-
 class StringQuoting {
-
   /// Cache of common quotings.
   static const List<StringQuoting> _mapping = const <StringQuoting>[
     const StringQuoting($SQ, raw: false, leftQuoteLength: 1),
@@ -997,7 +1272,7 @@
   final bool raw;
   final int leftQuoteCharCount;
   final int quote;
-  const StringQuoting(this.quote, { this.raw, int leftQuoteLength })
+  const StringQuoting(this.quote, {this.raw, int leftQuoteLength})
       : this.leftQuoteCharCount = leftQuoteLength;
   String get quoteChar => identical(quote, $DQ) ? '"' : "'";
 
@@ -1031,14 +1306,18 @@
 
   LiteralString asLiteralString() => this;
 
-  void visitChildren(Visitor visitor) {}
-
   bool get isInterpolation => false;
 
   Token getBeginToken() => token;
   Token getEndToken() => token;
 
   accept(Visitor visitor) => visitor.visitLiteralString(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralString(this, arg);
+
+  void visitChildren(Visitor visitor) {}
+
+  void visitChildren1(Visitor1 visitor, arg) {}
 }
 
 class LiteralNull extends Literal<String> {
@@ -1049,6 +1328,8 @@
   String get value => null;
 
   accept(Visitor visitor) => visitor.visitLiteralNull(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralNull(this, arg);
 }
 
 class LiteralList extends Expression {
@@ -1064,11 +1345,18 @@
   LiteralList asLiteralList() => this;
   accept(Visitor visitor) => visitor.visitLiteralList(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralList(this, arg);
+
   visitChildren(Visitor visitor) {
     if (typeArguments != null) typeArguments.accept(visitor);
     elements.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (typeArguments != null) typeArguments.accept1(visitor, arg);
+    elements.accept1(visitor, arg);
+  }
+
   Token getBeginToken() {
     if (constKeyword != null) return constKeyword;
     return firstBeginToken(typeArguments, elements);
@@ -1086,11 +1374,17 @@
 
   LiteralSymbol asLiteralSymbol() => this;
 
+  accept(Visitor visitor) => visitor.visitLiteralSymbol(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralSymbol(this, arg);
+
   void visitChildren(Visitor visitor) {
     if (identifiers != null) identifiers.accept(visitor);
   }
 
-  accept(Visitor visitor) => visitor.visitLiteralSymbol(this);
+  void visitChildren1(Visitor1 visitor, arg) {
+    if (identifiers != null) identifiers.accept1(visitor, arg);
+  }
 
   Token getBeginToken() => hashToken;
 
@@ -1118,8 +1412,12 @@
 
   accept(Visitor visitor) => visitor.visitIdentifier(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitIdentifier(this, arg);
+
   visitChildren(Visitor visitor) {}
 
+  visitChildren1(Visitor1 visitor, arg) {}
+
   Token getBeginToken() => token;
 
   Token getEndToken() => token;
@@ -1135,11 +1433,17 @@
 
   DottedName asDottedName() => this;
 
+  accept(Visitor visitor) => visitor.visitDottedName(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitDottedName(this, arg);
+
   void visitChildren(Visitor visitor) {
     identifiers.accept(visitor);
   }
 
-  accept(Visitor visitor) => visitor.visitDottedName(this);
+  void visitChildren1(Visitor1 visitor, arg) {
+    identifiers.accept1(visitor, arg);
+  }
 
   Token getBeginToken() => token;
   Token getEndToken() => identifiers.getEndToken();
@@ -1152,9 +1456,22 @@
 }
 
 class Operator extends Identifier {
-  static const COMPLEX_OPERATORS =
-      const ["--", "++", '+=', "-=", "*=", "/=", "%=", "&=", "|=", "~/=", "^=",
-             ">>=", "<<=", "??="];
+  static const COMPLEX_OPERATORS = const [
+    "--",
+    "++",
+    '+=',
+    "-=",
+    "*=",
+    "/=",
+    "%=",
+    "&=",
+    "|=",
+    "~/=",
+    "^=",
+    ">>=",
+    "<<=",
+    "??="
+  ];
 
   static const INCREMENT_OPERATORS = const <String>["++", "--"];
 
@@ -1163,6 +1480,8 @@
   Operator asOperator() => this;
 
   accept(Visitor visitor) => visitor.visitOperator(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitOperator(this, arg);
 }
 
 class Return extends Statement {
@@ -1181,10 +1500,16 @@
 
   accept(Visitor visitor) => visitor.visitReturn(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitReturn(this, arg);
+
   visitChildren(Visitor visitor) {
     if (expression != null) expression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (expression != null) expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => beginToken;
 
   Token getEndToken() {
@@ -1207,10 +1532,16 @@
 
   accept(Visitor visitor) => visitor.visitYield(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitYield(this, arg);
+
   visitChildren(Visitor visitor) {
     expression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => yieldToken;
 
   Token getEndToken() => endToken;
@@ -1221,17 +1552,25 @@
   final Token beginToken;
   final Token endToken;
 
-  RedirectingFactoryBody(this.beginToken, this.endToken,
-                         this.constructorReference);
+  RedirectingFactoryBody(
+      this.beginToken, this.endToken, this.constructorReference);
 
   RedirectingFactoryBody asRedirectingFactoryBody() => this;
 
   accept(Visitor visitor) => visitor.visitRedirectingFactoryBody(this);
 
+  accept1(Visitor1 visitor, arg) {
+    return visitor.visitRedirectingFactoryBody(this, arg);
+  }
+
   visitChildren(Visitor visitor) {
     constructorReference.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    constructorReference.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => beginToken;
 
   Token getEndToken() => endToken;
@@ -1247,10 +1586,16 @@
 
   accept(Visitor visitor) => visitor.visitExpressionStatement(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitExpressionStatement(this, arg);
+
   visitChildren(Visitor visitor) {
     if (expression != null) expression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (expression != null) expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => expression.getBeginToken();
 
   Token getEndToken() => endToken;
@@ -1268,10 +1613,16 @@
 
   accept(Visitor visitor) => visitor.visitThrow(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitThrow(this, arg);
+
   visitChildren(Visitor visitor) {
     expression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => throwToken;
 
   Token getEndToken() => endToken;
@@ -1288,10 +1639,16 @@
 
   accept(Visitor visitor) => visitor.visitAwait(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitAwait(this, arg);
+
   visitChildren(Visitor visitor) {
     expression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => awaitToken;
 
   Token getEndToken() => expression.getEndToken();
@@ -1312,11 +1669,18 @@
 
   accept(Visitor visitor) => visitor.visitAssert(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitAssert(this, arg);
+
   visitChildren(Visitor visitor) {
     condition.accept(visitor);
     if (message != null) message.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    condition.accept1(visitor, arg);
+    if (message != null) message.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => assertToken;
   Token getEndToken() => semicolonToken;
 }
@@ -1330,7 +1694,12 @@
   Rethrow asRethrow() => this;
 
   accept(Visitor visitor) => visitor.visitRethrow(this);
-  visitChildren(Visitor visitor) { }
+
+  accept1(Visitor1 visitor, arg) => visitor.visitRethrow(this, arg);
+
+  visitChildren(Visitor visitor) {}
+
+  visitChildren1(Visitor1 visitor, arg) {}
 
   Token getBeginToken() => throwToken;
   Token getEndToken() => endToken;
@@ -1346,11 +1715,18 @@
 
   accept(Visitor visitor) => visitor.visitTypeAnnotation(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitTypeAnnotation(this, arg);
+
   visitChildren(Visitor visitor) {
     typeName.accept(visitor);
     if (typeArguments != null) typeArguments.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    typeName.accept1(visitor, arg);
+    if (typeArguments != null) typeArguments.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => typeName.getBeginToken();
 
   Token getEndToken() {
@@ -1366,6 +1742,8 @@
 
   accept(Visitor visitor) => visitor.visitTypeVariable(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitTypeVariable(this, arg);
+
   visitChildren(Visitor visitor) {
     name.accept(visitor);
     if (bound != null) {
@@ -1373,6 +1751,13 @@
     }
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    name.accept1(visitor, arg);
+    if (bound != null) {
+      bound.accept1(visitor, arg);
+    }
+  }
+
   TypeVariable asTypeVariable() => this;
 
   Token getBeginToken() => name.getBeginToken();
@@ -1388,18 +1773,14 @@
   final Modifiers modifiers;
   final NodeList definitions;
 
-  VariableDefinitions(this.type,
-                      this.modifiers,
-                      this.definitions)
+  VariableDefinitions(this.type, this.modifiers, this.definitions)
       : this.metadata = null {
     assert(modifiers != null);
   }
 
   // TODO(johnniwinther): Make this its own node type.
-  VariableDefinitions.forParameter(this.metadata,
-                                   this.type,
-                                   this.modifiers,
-                                   this.definitions) {
+  VariableDefinitions.forParameter(
+      this.metadata, this.type, this.modifiers, this.definitions) {
     assert(modifiers != null);
   }
 
@@ -1407,12 +1788,20 @@
 
   accept(Visitor visitor) => visitor.visitVariableDefinitions(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitVariableDefinitions(this, arg);
+
   visitChildren(Visitor visitor) {
     if (metadata != null) metadata.accept(visitor);
     if (type != null) type.accept(visitor);
     if (definitions != null) definitions.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (metadata != null) metadata.accept1(visitor, arg);
+    if (type != null) type.accept1(visitor, arg);
+    if (definitions != null) definitions.accept1(visitor, arg);
+  }
+
   Token getBeginToken() {
     var token = firstBeginToken(modifiers, type);
     if (token == null) {
@@ -1440,19 +1829,26 @@
 
   final Expression condition;
 
-  DoWhile(Statement body, Expression this.condition,
-          Token this.doKeyword, Token this.whileKeyword, Token this.endToken)
-    : super(body);
+  DoWhile(Statement body, Expression this.condition, Token this.doKeyword,
+      Token this.whileKeyword, Token this.endToken)
+      : super(body);
 
   DoWhile asDoWhile() => this;
 
   accept(Visitor visitor) => visitor.visitDoWhile(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitDoWhile(this, arg);
+
   visitChildren(Visitor visitor) {
     if (condition != null) condition.accept(visitor);
     if (body != null) body.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (condition != null) condition.accept1(visitor, arg);
+    if (body != null) body.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => doKeyword;
 
   Token getEndToken() => endToken;
@@ -1462,18 +1858,25 @@
   final Token whileKeyword;
   final Expression condition;
 
-  While(Expression this.condition, Statement body,
-        Token this.whileKeyword) : super(body);
+  While(Expression this.condition, Statement body, Token this.whileKeyword)
+      : super(body);
 
   While asWhile() => this;
 
   accept(Visitor visitor) => visitor.visitWhile(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitWhile(this, arg);
+
   visitChildren(Visitor visitor) {
     if (condition != null) condition.accept(visitor);
     if (body != null) body.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (condition != null) condition.accept1(visitor, arg);
+    if (body != null) body.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => whileKeyword;
 
   Token getEndToken() => body.getEndToken();
@@ -1483,17 +1886,25 @@
   final Expression expression;
   final BeginGroupToken beginToken;
 
-  ParenthesizedExpression(Expression this.expression,
-                          BeginGroupToken this.beginToken);
+  ParenthesizedExpression(
+      Expression this.expression, BeginGroupToken this.beginToken);
 
   ParenthesizedExpression asParenthesizedExpression() => this;
 
   accept(Visitor visitor) => visitor.visitParenthesizedExpression(this);
 
+  accept1(Visitor1 visitor, arg) {
+    return visitor.visitParenthesizedExpression(this, arg);
+  }
+
   visitChildren(Visitor visitor) {
     if (expression != null) expression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (expression != null) expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => beginToken;
 
   Token getEndToken() => beginToken.endGroup;
@@ -1533,14 +1944,22 @@
     int flags = 0;
     for (; !nodes.isEmpty; nodes = nodes.tail) {
       String value = nodes.head.asIdentifier().source;
-      if (identical(value, 'static')) flags |= FLAG_STATIC;
-      else if (identical(value, 'abstract')) flags |= FLAG_ABSTRACT;
-      else if (identical(value, 'final')) flags |= FLAG_FINAL;
-      else if (identical(value, 'var')) flags |= FLAG_VAR;
-      else if (identical(value, 'const')) flags |= FLAG_CONST;
-      else if (identical(value, 'factory')) flags |= FLAG_FACTORY;
-      else if (identical(value, 'external')) flags |= FLAG_EXTERNAL;
-      else throw 'internal error: ${nodes.head}';
+      if (identical(value, 'static'))
+        flags |= FLAG_STATIC;
+      else if (identical(value, 'abstract'))
+        flags |= FLAG_ABSTRACT;
+      else if (identical(value, 'final'))
+        flags |= FLAG_FINAL;
+      else if (identical(value, 'var'))
+        flags |= FLAG_VAR;
+      else if (identical(value, 'const'))
+        flags |= FLAG_CONST;
+      else if (identical(value, 'factory'))
+        flags |= FLAG_FACTORY;
+      else if (identical(value, 'external'))
+        flags |= FLAG_EXTERNAL;
+      else
+        throw 'internal error: ${nodes.head}';
     }
     return flags;
   }
@@ -1549,7 +1968,7 @@
     Link<Node> nodeList = nodes.nodes;
     for (; !nodeList.isEmpty; nodeList = nodeList.tail) {
       String value = nodeList.head.asIdentifier().source;
-      if(identical(value, modifier)) {
+      if (identical(value, modifier)) {
         return nodeList.head;
       }
     }
@@ -1559,9 +1978,15 @@
   Modifiers asModifiers() => this;
   Token getBeginToken() => nodes.getBeginToken();
   Token getEndToken() => nodes.getEndToken();
+
   accept(Visitor visitor) => visitor.visitModifiers(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitModifiers(this, arg);
+
   visitChildren(Visitor visitor) => nodes.accept(visitor);
 
+  visitChildren1(Visitor1 visitor, arg) => nodes.accept1(visitor, arg);
+
   bool get isStatic => (flags & FLAG_STATIC) != 0;
   bool get isAbstract => (flags & FLAG_ABSTRACT) != 0;
   bool get isFinal => (flags & FLAG_FINAL) != 0;
@@ -1579,13 +2004,14 @@
   bool get isFinalOrConst => isFinal || isConst;
 
   String toString() {
-    return modifiersToString(isStatic: isStatic,
-                             isAbstract: isAbstract,
-                             isFinal: isFinal,
-                             isVar: isVar,
-                             isConst: isConst,
-                             isFactory: isFactory,
-                             isExternal: isExternal);
+    return modifiersToString(
+        isStatic: isStatic,
+        isAbstract: isAbstract,
+        isFinal: isFinal,
+        isVar: isVar,
+        isConst: isConst,
+        isFactory: isFactory,
+        isExternal: isExternal);
   }
 }
 
@@ -1602,11 +2028,18 @@
 
   accept(Visitor visitor) => visitor.visitStringInterpolation(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitStringInterpolation(this, arg);
+
   visitChildren(Visitor visitor) {
     string.accept(visitor);
     parts.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    string.accept1(visitor, arg);
+    parts.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => string.getBeginToken();
   Token getEndToken() => parts.getEndToken();
 }
@@ -1621,11 +2054,20 @@
 
   accept(Visitor visitor) => visitor.visitStringInterpolationPart(this);
 
+  accept1(Visitor1 visitor, arg) {
+    return visitor.visitStringInterpolationPart(this, arg);
+  }
+
   visitChildren(Visitor visitor) {
     expression.accept(visitor);
     string.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    expression.accept1(visitor, arg);
+    string.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => expression.getBeginToken();
 
   Token getEndToken() => string.getEndToken();
@@ -1659,7 +2101,7 @@
   bool get isInterpolation {
     if (isInterpolationCache == null) {
       isInterpolationCache = (first.accept(const IsInterpolationVisitor()) ||
-                          second.accept(const IsInterpolationVisitor()));
+          second.accept(const IsInterpolationVisitor()));
     }
     return isInterpolationCache;
   }
@@ -1687,11 +2129,18 @@
 
   accept(Visitor visitor) => visitor.visitStringJuxtaposition(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitStringJuxtaposition(this, arg);
+
   void visitChildren(Visitor visitor) {
     first.accept(visitor);
     second.accept(visitor);
   }
 
+  void visitChildren1(Visitor1 visitor, arg) {
+    first.accept1(visitor, arg);
+    second.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => first.getBeginToken();
 
   Token getEndToken() => second.getEndToken();
@@ -1706,8 +2155,12 @@
 
   accept(Visitor visitor) => visitor.visitEmptyStatement(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitEmptyStatement(this, arg);
+
   visitChildren(Visitor visitor) {}
 
+  visitChildren1(Visitor1 visitor, arg) {}
+
   Token getBeginToken() => semicolonToken;
 
   Token getEndToken() => semicolonToken;
@@ -1727,11 +2180,18 @@
 
   accept(Visitor visitor) => visitor.visitLiteralMap(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralMap(this, arg);
+
   visitChildren(Visitor visitor) {
     if (typeArguments != null) typeArguments.accept(visitor);
     entries.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (typeArguments != null) typeArguments.accept1(visitor, arg);
+    entries.accept1(visitor, arg);
+  }
+
   Token getBeginToken() {
     if (constKeyword != null) return constKeyword;
     return firstBeginToken(typeArguments, entries);
@@ -1752,11 +2212,18 @@
 
   accept(Visitor visitor) => visitor.visitLiteralMapEntry(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitLiteralMapEntry(this, arg);
+
   visitChildren(Visitor visitor) {
     key.accept(visitor);
     value.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    key.accept1(visitor, arg);
+    value.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => key.getBeginToken();
 
   Token getEndToken() => value.getEndToken();
@@ -1774,11 +2241,18 @@
 
   accept(Visitor visitor) => visitor.visitNamedArgument(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitNamedArgument(this, arg);
+
   visitChildren(Visitor visitor) {
     name.accept(visitor);
     expression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    name.accept1(visitor, arg);
+    expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => name.getBeginToken();
 
   Token getEndToken() => expression.getEndToken();
@@ -1790,8 +2264,7 @@
 
   final Token switchKeyword;
 
-  SwitchStatement(this.parenthesizedExpression, this.cases,
-                  this.switchKeyword);
+  SwitchStatement(this.parenthesizedExpression, this.cases, this.switchKeyword);
 
   SwitchStatement asSwitchStatement() => this;
 
@@ -1799,11 +2272,18 @@
 
   accept(Visitor visitor) => visitor.visitSwitchStatement(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitSwitchStatement(this, arg);
+
   visitChildren(Visitor visitor) {
     parenthesizedExpression.accept(visitor);
     cases.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    parenthesizedExpression.accept1(visitor, arg);
+    cases.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => switchKeyword;
 
   Token getEndToken() => cases.getEndToken();
@@ -1818,8 +2298,14 @@
   CaseMatch asCaseMatch() => this;
   Token getBeginToken() => caseKeyword;
   Token getEndToken() => colonToken;
+
   accept(Visitor visitor) => visitor.visitCaseMatch(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitCaseMatch(this, arg);
+
   visitChildren(Visitor visitor) => expression.accept(visitor);
+
+  visitChildren1(Visitor1 visitor, arg) => expression.accept1(visitor, arg);
 }
 
 class SwitchCase extends Node {
@@ -1840,8 +2326,8 @@
 
   final Token startToken;
 
-  SwitchCase(this.labelsAndCases, this.defaultKeyword,
-             this.statements, this.startToken);
+  SwitchCase(this.labelsAndCases, this.defaultKeyword, this.statements,
+      this.startToken);
 
   SwitchCase asSwitchCase() => this;
 
@@ -1851,11 +2337,18 @@
 
   accept(Visitor visitor) => visitor.visitSwitchCase(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitSwitchCase(this, arg);
+
   visitChildren(Visitor visitor) {
     labelsAndCases.accept(visitor);
     statements.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    labelsAndCases.accept1(visitor, arg);
+    statements.accept1(visitor, arg);
+  }
+
   Token getBeginToken() {
     return startToken;
   }
@@ -1886,6 +2379,10 @@
     if (target != null) target.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (target != null) target.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => keywordToken;
 
   Token getEndToken() => semicolonToken;
@@ -1896,20 +2393,24 @@
 
 class BreakStatement extends GotoStatement {
   BreakStatement(Identifier target, Token keywordToken, Token semicolonToken)
-    : super(target, keywordToken, semicolonToken);
+      : super(target, keywordToken, semicolonToken);
 
   BreakStatement asBreakStatement() => this;
 
   accept(Visitor visitor) => visitor.visitBreakStatement(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitBreakStatement(this, arg);
 }
 
 class ContinueStatement extends GotoStatement {
   ContinueStatement(Identifier target, Token keywordToken, Token semicolonToken)
-    : super(target, keywordToken, semicolonToken);
+      : super(target, keywordToken, semicolonToken);
 
   ContinueStatement asContinueStatement() => this;
 
   accept(Visitor visitor) => visitor.visitContinueStatement(this);
+
+  accept1(Visitor1 visitor, arg) => visitor.visitContinueStatement(this, arg);
 }
 
 abstract class ForIn extends Loop {
@@ -1919,8 +2420,8 @@
   final Token forToken;
   final Token inToken;
 
-  ForIn(this.declaredIdentifier, this.expression,
-        Statement body, this.forToken, this.inToken)
+  ForIn(this.declaredIdentifier, this.expression, Statement body, this.forToken,
+      this.inToken)
       : super(body);
 
   Expression get condition => null;
@@ -1938,32 +2439,48 @@
 
   accept(Visitor visitor) => visitor.visitSyncForIn(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitSyncForIn(this, arg);
+
   visitChildren(Visitor visitor) {
     declaredIdentifier.accept(visitor);
     expression.accept(visitor);
     body.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    declaredIdentifier.accept1(visitor, arg);
+    expression.accept1(visitor, arg);
+    body.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => forToken;
 }
 
 class AsyncForIn extends ForIn with StoredTreeElementMixin {
   final Token awaitToken;
 
-  AsyncForIn(declaredIdentifier, expression,
-        Statement body, this.awaitToken, forToken, inToken)
+  AsyncForIn(declaredIdentifier, expression, Statement body, this.awaitToken,
+      forToken, inToken)
       : super(declaredIdentifier, expression, body, forToken, inToken);
 
   AsyncForIn asAsyncForIn() => this;
 
   accept(Visitor visitor) => visitor.visitAsyncForIn(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitAsyncForIn(this, arg);
+
   visitChildren(Visitor visitor) {
     declaredIdentifier.accept(visitor);
     expression.accept(visitor);
     body.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    declaredIdentifier.accept1(visitor, arg);
+    expression.accept1(visitor, arg);
+    body.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => awaitToken;
 }
 
@@ -1979,10 +2496,16 @@
 
   accept(Visitor visitor) => visitor.visitLabel(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitLabel(this, arg);
+
   void visitChildren(Visitor visitor) {
     identifier.accept(visitor);
   }
 
+  void visitChildren1(Visitor1 visitor, arg) {
+    identifier.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => identifier.token;
   Token getEndToken() => colonToken;
 }
@@ -1997,11 +2520,18 @@
 
   accept(Visitor visitor) => visitor.visitLabeledStatement(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitLabeledStatement(this, arg);
+
   visitChildren(Visitor visitor) {
     labels.accept(visitor);
     statement.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    labels.accept1(visitor, arg);
+    statement.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => labels.getBeginToken();
 
   Token getEndToken() => statement.getEndToken();
@@ -2026,10 +2556,8 @@
 
   final Token libraryKeyword;
 
-  LibraryName(this.libraryKeyword,
-              this.name,
-              List<MetadataAnnotation> metadata)
-    : super(metadata);
+  LibraryName(this.libraryKeyword, this.name, List<MetadataAnnotation> metadata)
+      : super(metadata);
 
   bool get isLibraryName => true;
 
@@ -2037,8 +2565,12 @@
 
   accept(Visitor visitor) => visitor.visitLibraryName(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitLibraryName(this, arg);
+
   visitChildren(Visitor visitor) => name.accept(visitor);
 
+  visitChildren1(Visitor1 visitor, arg) => name.accept1(visitor, arg);
+
   Token getBeginToken() => libraryKeyword;
 
   Token getEndToken() => name.getEndToken().next;
@@ -2054,11 +2586,9 @@
   final NodeList conditionalUris;
   final NodeList combinators;
 
-  LibraryDependency(this.uri,
-                    this.conditionalUris,
-                    this.combinators,
-                    List<MetadataAnnotation> metadata)
-    : super(metadata);
+  LibraryDependency(this.uri, this.conditionalUris, this.combinators,
+      List<MetadataAnnotation> metadata)
+      : super(metadata);
 
   LibraryDependency asLibraryDependency() => this;
 
@@ -2078,9 +2608,8 @@
   final bool isDeferred;
 
   Import(this.importKeyword, StringNode uri, NodeList conditionalUris,
-         this.prefix, NodeList combinators,
-         List<MetadataAnnotation> metadata,
-         {this.isDeferred})
+      this.prefix, NodeList combinators, List<MetadataAnnotation> metadata,
+      {this.isDeferred})
       : super(uri, conditionalUris, combinators, metadata);
 
   bool get isImport => true;
@@ -2089,12 +2618,20 @@
 
   accept(Visitor visitor) => visitor.visitImport(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitImport(this, arg);
+
   visitChildren(Visitor visitor) {
     uri.accept(visitor);
     if (prefix != null) prefix.accept(visitor);
     if (combinators != null) combinators.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    uri.accept1(visitor, arg);
+    if (prefix != null) prefix.accept1(visitor, arg);
+    if (combinators != null) combinators.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => importKeyword;
 
   Token getEndToken() {
@@ -2127,12 +2664,20 @@
 
   accept(Visitor visitor) => visitor.visitConditionalUri(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitConditionalUri(this, arg);
+
   visitChildren(Visitor visitor) {
     key.accept(visitor);
     if (value != null) value.accept(visitor);
     uri.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    key.accept1(visitor, arg);
+    if (value != null) value.accept1(visitor, arg);
+    uri.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => ifToken;
 
   Token getEndToken() => uri.getEndToken();
@@ -2156,11 +2701,18 @@
 
   accept(Visitor visitor) => visitor.visitEnum(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitEnum(this, arg);
+
   visitChildren(Visitor visitor) {
     name.accept(visitor);
     if (names != null) names.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    name.accept1(visitor, arg);
+    if (names != null) names.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => enumToken;
   Token getEndToken() => names.getEndToken();
 }
@@ -2175,11 +2727,8 @@
 class Export extends LibraryDependency {
   final Token exportKeyword;
 
-  Export(this.exportKeyword,
-         StringNode uri,
-         NodeList conditionalUris,
-         NodeList combinators,
-         List<MetadataAnnotation> metadata)
+  Export(this.exportKeyword, StringNode uri, NodeList conditionalUris,
+      NodeList combinators, List<MetadataAnnotation> metadata)
       : super(uri, conditionalUris, combinators, metadata);
 
   bool get isExport => true;
@@ -2188,11 +2737,18 @@
 
   accept(Visitor visitor) => visitor.visitExport(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitExport(this, arg);
+
   visitChildren(Visitor visitor) {
     uri.accept(visitor);
     if (combinators != null) combinators.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    uri.accept1(visitor, arg);
+    if (combinators != null) combinators.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => exportKeyword;
 
   Token getEndToken() {
@@ -2208,7 +2764,7 @@
   final Token partKeyword;
 
   Part(this.partKeyword, this.uri, List<MetadataAnnotation> metadata)
-    : super(metadata);
+      : super(metadata);
 
   bool get isPart => true;
 
@@ -2216,8 +2772,12 @@
 
   accept(Visitor visitor) => visitor.visitPart(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitPart(this, arg);
+
   visitChildren(Visitor visitor) => uri.accept(visitor);
 
+  visitChildren1(Visitor1 visitor, arg) => uri.accept1(visitor, arg);
+
   Token getBeginToken() => partKeyword;
 
   Token getEndToken() => uri.getEndToken().next;
@@ -2240,8 +2800,12 @@
 
   accept(Visitor visitor) => visitor.visitPartOf(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitPartOf(this, arg);
+
   visitChildren(Visitor visitor) => name.accept(visitor);
 
+  visitChildren1(Visitor1 visitor, arg) => name.accept1(visitor, arg);
+
   Token getBeginToken() => partKeyword;
 
   Token getEndToken() => name.getEndToken().next;
@@ -2262,8 +2826,12 @@
 
   accept(Visitor visitor) => visitor.visitCombinator(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitCombinator(this, arg);
+
   visitChildren(Visitor visitor) => identifiers.accept(visitor);
 
+  visitChildren1(Visitor1 visitor, arg) => identifiers.accept1(visitor, arg);
+
   Token getBeginToken() => keywordToken;
 
   Token getEndToken() => identifiers.getEndToken();
@@ -2279,12 +2847,14 @@
   final Token endToken;
 
   Typedef(this.returnType, this.name, this.typeParameters, this.formals,
-          this.typedefKeyword, this.endToken);
+      this.typedefKeyword, this.endToken);
 
   Typedef asTypedef() => this;
 
   accept(Visitor visitor) => visitor.visitTypedef(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitTypedef(this, arg);
+
   visitChildren(Visitor visitor) {
     if (returnType != null) returnType.accept(visitor);
     name.accept(visitor);
@@ -2292,6 +2862,13 @@
     formals.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (returnType != null) returnType.accept1(visitor, arg);
+    name.accept1(visitor, arg);
+    if (typeParameters != null) typeParameters.accept1(visitor, arg);
+    formals.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => typedefKeyword;
 
   Token getEndToken() => endToken;
@@ -2306,18 +2883,26 @@
   final Token finallyKeyword;
 
   TryStatement(this.tryBlock, this.catchBlocks, this.finallyBlock,
-               this.tryKeyword, this.finallyKeyword);
+      this.tryKeyword, this.finallyKeyword);
 
   TryStatement asTryStatement() => this;
 
   accept(Visitor visitor) => visitor.visitTryStatement(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitTryStatement(this, arg);
+
   visitChildren(Visitor visitor) {
     tryBlock.accept(visitor);
     catchBlocks.accept(visitor);
     if (finallyBlock != null) finallyBlock.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    tryBlock.accept1(visitor, arg);
+    catchBlocks.accept1(visitor, arg);
+    if (finallyBlock != null) finallyBlock.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => tryKeyword;
 
   Token getEndToken() {
@@ -2334,10 +2919,16 @@
   Cascade asCascade() => this;
   accept(Visitor visitor) => visitor.visitCascade(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitCascade(this, arg);
+
   void visitChildren(Visitor visitor) {
     expression.accept(visitor);
   }
 
+  void visitChildren1(Visitor1 visitor, arg) {
+    expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => expression.getBeginToken();
 
   Token getEndToken() => expression.getEndToken();
@@ -2351,10 +2942,16 @@
   CascadeReceiver asCascadeReceiver() => this;
   accept(Visitor visitor) => visitor.visitCascadeReceiver(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitCascadeReceiver(this, arg);
+
   void visitChildren(Visitor visitor) {
     expression.accept(visitor);
   }
 
+  void visitChildren1(Visitor1 visitor, arg) {
+    expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => expression.getBeginToken();
 
   Token getEndToken() => expression.getEndToken();
@@ -2368,13 +2965,15 @@
   final Token onKeyword;
   final Token catchKeyword;
 
-  CatchBlock(this.type, this.formals, this.block,
-             this.onKeyword, this.catchKeyword);
+  CatchBlock(
+      this.type, this.formals, this.block, this.onKeyword, this.catchKeyword);
 
   CatchBlock asCatchBlock() => this;
 
   accept(Visitor visitor) => visitor.visitCatchBlock(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitCatchBlock(this, arg);
+
   Node get exception {
     if (formals == null || formals.nodes.isEmpty) return null;
     VariableDefinitions declarations = formals.nodes.head;
@@ -2395,6 +2994,12 @@
     block.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    if (type != null) type.accept1(visitor, arg);
+    if (formals != null) formals.accept1(visitor, arg);
+    block.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => onKeyword != null ? onKeyword : catchKeyword;
 
   Token getEndToken() => block.getEndToken();
@@ -2410,10 +3015,16 @@
 
   accept(Visitor visitor) => visitor.visitMetadata(this);
 
+  accept1(Visitor1 visitor, arg) => visitor.visitMetadata(this, arg);
+
   visitChildren(Visitor visitor) {
     expression.accept(visitor);
   }
 
+  visitChildren1(Visitor1 visitor, arg) {
+    expression.accept1(visitor, arg);
+  }
+
   Token getBeginToken() => token;
 
   Token getEndToken() => expression.getEndToken();
@@ -2422,7 +3033,7 @@
 class Initializers {
   static bool isSuperConstructorCall(Send node) {
     return (node.receiver == null && node.selector.isSuper()) ||
-           (node.receiver != null &&
+        (node.receiver != null &&
             node.receiver.isSuper() &&
             !node.isConditional &&
             node.selector.asIdentifier() != null);
@@ -2430,7 +3041,7 @@
 
   static bool isConstructorRedirect(Send node) {
     return (node.receiver == null && node.selector.isThis()) ||
-           (node.receiver != null &&
+        (node.receiver != null &&
             node.receiver.isThis() &&
             !node.isConditional &&
             node.selector.asIdentifier() != null);
@@ -2440,8 +3051,8 @@
 class GetDartStringVisitor extends Visitor<DartString> {
   const GetDartStringVisitor();
   DartString visitNode(Node node) => null;
-  DartString visitStringJuxtaposition(StringJuxtaposition node)
-      => node.dartString;
+  DartString visitStringJuxtaposition(StringJuxtaposition node) =>
+      node.dartString;
   DartString visitLiteralString(LiteralString node) => node.dartString;
 }
 
@@ -2449,15 +3060,14 @@
   const IsInterpolationVisitor();
   bool visitNode(Node node) => false;
   bool visitStringInterpolation(StringInterpolation node) => true;
-  bool visitStringJuxtaposition(StringJuxtaposition node)
-      => node.isInterpolation;
+  bool visitStringJuxtaposition(StringJuxtaposition node) =>
+      node.isInterpolation;
 }
 
 /// Erroneous node used to recover from parser errors.  Implements various
 /// interfaces and provides bare minimum of implementation to avoid unnecessary
 /// messages.
-class ErrorNode
-    extends Node
+class ErrorNode extends Node
     implements FunctionExpression, VariableDefinitions, Typedef {
   final Token token;
   final String reason;
@@ -2468,8 +3078,8 @@
 
   factory ErrorNode(Token token, String reason) {
     Identifier name = new Identifier(token);
-    NodeList definitions = new NodeList(
-        null, const Link<Node>().prepend(name), null, null);
+    NodeList definitions =
+        new NodeList(null, const Link<Node>().prepend(name), null, null);
     return new ErrorNode.internal(token, reason, name, definitions);
   }
 
@@ -2482,8 +3092,12 @@
 
   accept(Visitor visitor) {}
 
+  accept1(Visitor1 visitor, arg) {}
+
   visitChildren(Visitor visitor) {}
 
+  visitChildren1(Visitor1 visitor, arg) {}
+
   bool get isErroneous => true;
 
   // FunctionExpression.
diff --git a/pkg/compiler/lib/src/tree/prettyprint.dart b/pkg/compiler/lib/src/tree/prettyprint.dart
index 1b17b7ab..dceffaf 100644
--- a/pkg/compiler/lib/src/tree/prettyprint.dart
+++ b/pkg/compiler/lib/src/tree/prettyprint.dart
@@ -47,8 +47,7 @@
 
   visitAsyncModifier(AsyncModifier node) {
     openAndCloseNode(node, "AsyncModifier",
-        {'asyncToken': node.asyncToken,
-         'starToken': node.starToken});
+        {'asyncToken': node.asyncToken, 'starToken': node.starToken});
   }
 
   visitBlock(Block node) {
@@ -76,9 +75,8 @@
   }
 
   visitClassNode(ClassNode node) {
-    openNode(node, "ClassNode", {
-      "extendsKeyword" : tokenToStringOrNull(node.extendsKeyword)
-    });
+    openNode(node, "ClassNode",
+        {"extendsKeyword": tokenToStringOrNull(node.extendsKeyword)});
     visitChildNode(node.name, "name");
     visitChildNode(node.superclass, "superclass");
     visitChildNode(node.interfaces, "interfaces");
@@ -124,14 +122,19 @@
     visitNodeWithChildren(node, "For");
   }
 
+  visitForIn(ForIn node) {
+    node.visitChildren(this);
+    closeNode();
+  }
+
   visitAsyncForIn(AsyncForIn node) {
     openNode(node, "AsyncForIn");
+    visitForIn(node);
   }
 
   visitSyncForIn(SyncForIn node) {
-    openNode(node, "ForIn");
-    node.visitChildren(this);
-    closeNode();
+    openNode(node, "SyncForIn");
+    visitForIn(node);
   }
 
   visitFunctionDeclaration(FunctionDeclaration node) {
@@ -139,9 +142,8 @@
   }
 
   visitFunctionExpression(FunctionExpression node) {
-    openNode(node, "FunctionExpression", {
-      "getOrSet" : tokenToStringOrNull(node.getOrSet)
-    });
+    openNode(node, "FunctionExpression",
+        {"getOrSet": tokenToStringOrNull(node.getOrSet)});
     visitChildNode(node.modifiers, "modifiers");
     visitChildNode(node.returnType, "returnType");
     visitChildNode(node.name, "name");
@@ -152,7 +154,7 @@
   }
 
   visitIdentifier(Identifier node) {
-    openAndCloseNode(node, "Identifier", {"token" : node.token});
+    openAndCloseNode(node, "Identifier", {"token": node.token});
   }
 
   visitIf(If node) {
@@ -169,7 +171,7 @@
 
   // Custom.
   printLiteral(Literal node, String type) {
-    openAndCloseNode(node, type, {"value" : node.value.toString()});
+    openAndCloseNode(node, type, {"value": node.value.toString()});
   }
 
   visitLiteralBool(LiteralBool node) {
@@ -188,9 +190,8 @@
   tokenToStringOrNull(Token token) => token == null ? null : token.stringValue;
 
   visitLiteralList(LiteralList node) {
-    openNode(node, "LiteralList", {
-      "constKeyword" : tokenToStringOrNull(node.constKeyword)
-    });
+    openNode(node, "LiteralList",
+        {"constKeyword": tokenToStringOrNull(node.constKeyword)});
     visitChildNode(node.typeArguments, "typeArguments");
     visitChildNode(node.elements, "elements");
     closeNode();
@@ -209,8 +210,7 @@
   }
 
   visitLiteralString(LiteralString node) {
-    openAndCloseNode(node, "LiteralString",
-        {"value" : node.token});
+    openAndCloseNode(node, "LiteralString", {"value": node.token});
   }
 
   visitMixinApplication(MixinApplication node) {
@@ -234,7 +234,7 @@
   }
 
   visitNodeList(NodeList node) {
-    var params = { "delimiter" : node.delimiter };
+    var params = {"delimiter": node.delimiter};
     if (node.isEmpty) {
       openAndCloseNode(node, "NodeList", params);
     } else {
@@ -245,7 +245,7 @@
   }
 
   visitOperator(Operator node) {
-    openAndCloseNode(node, "Operator", {"value" : node.token});
+    openAndCloseNode(node, "Operator", {"value": node.token});
   }
 
   visitParenthesizedExpression(ParenthesizedExpression node) {
@@ -287,9 +287,9 @@
 
   openSendNodeWithFields(Send node, String type) {
     openNode(node, type, {
-        "isPrefix" : "${node.isPrefix}",
-        "isPostfix" : "${node.isPostfix}",
-        "isIndex" : "${node.isIndex}"
+      "isPrefix": "${node.isPrefix}",
+      "isPostfix": "${node.isPostfix}",
+      "isIndex": "${node.isIndex}"
     });
     visitChildNode(node.receiver, "receiver");
     visitChildNode(node.selector, "selector");
@@ -376,16 +376,14 @@
   }
 
   visitMetadata(Metadata node) {
-    openNode(node, "Metadata", {
-      "token": node.token
-    });
+    openNode(node, "Metadata", {"token": node.token});
     visitChildNode(node.expression, "expression");
     closeNode();
   }
 
   visitCombinator(Combinator node) {
-    openNode(node, "Combinator", {"isShow" : "${node.isShow}",
-                                  "isHide" : "${node.isHide}"});
+    openNode(node, "Combinator",
+        {"isShow": "${node.isShow}", "isHide": "${node.isHide}"});
     closeNode();
   }
 
@@ -400,8 +398,7 @@
   }
 
   visitImport(Import node) {
-    openNode(node, "Import", {
-      "isDeferred" : "${node.isDeferred}"});
+    openNode(node, "Import", {"isDeferred": "${node.isDeferred}"});
     visitChildNode(node.uri, "uri");
     if (node.conditionalUris != null) {
       visitChildNode(node.conditionalUris, "conditionalUris");
diff --git a/pkg/compiler/lib/src/tree/unparser.dart b/pkg/compiler/lib/src/tree/unparser.dart
index b9e6784..bb1d38e 100644
--- a/pkg/compiler/lib/src/tree/unparser.dart
+++ b/pkg/compiler/lib/src/tree/unparser.dart
@@ -3,7 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import '../tokens/token.dart' show BeginGroupToken, Token;
-import '../tokens/token_constants.dart' as Tokens show IDENTIFIER_TOKEN, KEYWORD_TOKEN, PLUS_TOKEN;
+import '../tokens/token_constants.dart' as Tokens
+    show IDENTIFIER_TOKEN, KEYWORD_TOKEN, PLUS_TOKEN;
 import '../util/util.dart';
 import 'nodes.dart';
 
@@ -37,8 +38,8 @@
   void addToken(Token token) {
     if (token == null) return;
     write(token.value);
-    if (identical(token.kind, Tokens.KEYWORD_TOKEN)
-        || identical(token.kind, Tokens.IDENTIFIER_TOKEN)) {
+    if (identical(token.kind, Tokens.KEYWORD_TOKEN) ||
+        identical(token.kind, Tokens.IDENTIFIER_TOKEN)) {
       write(' ');
     }
   }
@@ -55,7 +56,9 @@
     onEmptyLine = false;
   }
 
-  unparse(Node node) { visit(node); }
+  unparse(Node node) {
+    visit(node);
+  }
 
   visit(Node node) {
     if (node != null) node.accept(this);
@@ -95,7 +98,6 @@
     }
   }
 
-
   visitCascade(Cascade node) {
     visit(node.expression);
   }
@@ -216,7 +218,7 @@
     // arguments.
     if (name is Send) {
       Send send = name;
-      assert(send is !SendSet);
+      assert(send is! SendSet);
       if (!send.isOperator) {
         // Looks like a factory method.
         visit(send.receiver);
@@ -295,7 +297,7 @@
       space();
       write(node.elseToken.value);
       space();
-      if (node.elsePart is !Block && minify) write(' ');
+      if (node.elsePart is! Block && minify) write(' ');
       visit(node.elsePart);
     }
   }
@@ -426,7 +428,6 @@
     write(node.endToken.value);
   }
 
-
   unparseSendReceiver(Send node, {bool spacesNeeded: false}) {
     if (node.receiver == null) return;
     visit(node.receiver);
@@ -448,7 +449,7 @@
   unparseSendArgument(Send node, {bool spacesNeeded: false}) {
     if (node.argumentsNode == null) return;
 
-    if(node.isIsNotCheck) {
+    if (node.isIsNotCheck) {
       Send argNode = node.arguments.head;
       visit(argNode.selector);
       space();
@@ -469,7 +470,9 @@
     void minusMinusSpace(Node other) {
       if (other != null && opString == '-') {
         Token beginToken = other.getBeginToken();
-        if (beginToken != null && beginToken.stringValue != null && beginToken.stringValue.startsWith('-')) {
+        if (beginToken != null &&
+            beginToken.stringValue != null &&
+            beginToken.stringValue.startsWith('-')) {
           sb.write(' ');
           spacesNeeded = false;
         }
@@ -576,7 +579,7 @@
 
   visitDoWhile(DoWhile node) {
     write(node.doKeyword.value);
-    if (node.body is !Block) {
+    if (node.body is! Block) {
       write(' ');
     } else {
       space();
@@ -636,9 +639,7 @@
     visitGotoStatement(node);
   }
 
-  visitAsyncForIn(AsyncForIn node) {
-    write(node.awaitToken.value);
-    write(' ');
+  visitForIn(ForIn node) {
     write(node.forToken.value);
     space();
     write('(');
@@ -651,24 +652,20 @@
     visit(node.body);
   }
 
+  visitAsyncForIn(AsyncForIn node) {
+    write(node.awaitToken.value);
+    write(' ');
+    visitForIn(node);
+  }
 
   visitSyncForIn(SyncForIn node) {
-    write(node.forToken.value);
-    space();
-    write('(');
-    visit(node.declaredIdentifier);
-    write(' ');
-    addToken(node.inToken);
-    visit(node.expression);
-    write(')');
-    space();
-    visit(node.body);
+    visitForIn(node);
   }
 
   visitLabel(Label node) {
     visit(node.identifier);
     write(node.colonToken.value);
-   }
+  }
 
   visitLabeledStatement(LabeledStatement node) {
     visit(node.labels);
@@ -718,9 +715,10 @@
     newline();
   }
 
-  unparseImportTag(String uri, {String prefix,
-                                List<String> shows: const <String>[],
-                                bool isDeferred: false}) {
+  unparseImportTag(String uri,
+      {String prefix,
+      List<String> shows: const <String>[],
+      bool isDeferred: false}) {
     String deferredString = isDeferred ? ' deferred' : '';
     String prefixString = prefix == null ? '' : ' as $prefix';
     String showString = shows.isEmpty ? '' : ' show ${shows.join(", ")}';
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
index dd44f1d..bfed37d 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
@@ -52,8 +52,7 @@
 ///
 ///   !x ? y : false  ==>  !x && y
 ///
-class LogicalRewriter extends RecursiveTransformer
-                      implements Pass {
+class LogicalRewriter extends RecursiveTransformer implements Pass {
   String get passName => 'Logical rewriter';
 
   @override
@@ -68,20 +67,20 @@
   /// This means it will ultimately translate to an empty statement.
   bool isFallthrough(Statement node) {
     return node is Break && isFallthroughBreak(node) ||
-           node is Continue && isFallthroughContinue(node) ||
-           node is Return && isFallthroughReturn(node);
+        node is Continue && isFallthroughContinue(node) ||
+        node is Return && isFallthroughReturn(node);
   }
 
   bool isFallthroughBreak(Break node) {
     Statement target = fallthrough.target;
     return node.target.binding.next == target ||
-           target is Break && target.target == node.target;
+        target is Break && target.target == node.target;
   }
 
   bool isFallthroughContinue(Continue node) {
     Statement target = fallthrough.target;
     return node.target.binding == target ||
-           target is Continue && target.target == node.target;
+        target is Continue && target.target == node.target;
   }
 
   bool isFallthroughReturn(Return node) {
@@ -90,8 +89,8 @@
 
   bool isTerminator(Statement node) {
     return (node is Jump || node is Return) && !isFallthrough(node) ||
-           (node is ExpressionStatement && node.next is Unreachable) ||
-           node is Throw;
+        (node is ExpressionStatement && node.next is Unreachable) ||
+        node is Throw;
   }
 
   Statement visitIf(If node) {
@@ -123,7 +122,7 @@
       // if (E) {} else {S} ==> if (!E) {S}
       bestThenBranch = ELSE;
     } else if (isFallthrough(node.elseStatement) &&
-               !isFallthrough(node.thenStatement)) {
+        !isFallthrough(node.thenStatement)) {
       // Keep the empty statement in the 'else' branch.
       // if (E) {S} else {}
       bestThenBranch = THEN;
@@ -136,12 +135,12 @@
       // if (E) {S1; return v}; S2
       bestThenBranch = THEN;
     } else if (isTerminator(node.elseStatement) &&
-               !isTerminator(node.thenStatement)) {
+        !isTerminator(node.thenStatement)) {
       // Put early termination in the 'then' branch to reduce nesting depth.
       // if (E) {S}; return v ==> if (!E) return v; S
       bestThenBranch = ELSE;
     } else if (isTerminator(node.thenStatement) &&
-               !isTerminator(node.elseStatement)) {
+        !isTerminator(node.elseStatement)) {
       // Keep early termination in the 'then' branch to reduce nesting depth.
       // if (E) {return v;} S
       bestThenBranch = THEN;
@@ -160,7 +159,7 @@
     //   ==>
     // if (E) S2 else S1
     node.condition = makeCondition(node.condition, true,
-                                   liftNots: bestThenBranch == NEITHER);
+        liftNots: bestThenBranch == NEITHER);
     if (bestThenBranch == NEITHER && node.condition is Not) {
       node.condition = (node.condition as Not).operand;
       Statement tmp = node.thenStatement;
@@ -269,15 +268,13 @@
     // x ? y : 0     ==> x && y  (if x is truthy or zero) (and so on...)
     if (matchesFalsyValue(node.condition, getConstant(node.elseExpression))) {
       return new LogicalOperator.and(
-          visitExpression(node.condition),
-          node.thenExpression);
+          visitExpression(node.condition), node.thenExpression);
     }
     // x ? true : y ==> x || y  (if x is falsy or true)
     // x ? 1    : y ==> x || y  (if x is falsy or one) (and so on...)
     if (matchesTruthyValue(node.condition, getConstant(node.thenExpression))) {
       return new LogicalOperator.or(
-          visitExpression(node.condition),
-          node.elseExpression);
+          visitExpression(node.condition), node.elseExpression);
     }
     // x ? y : true ==> !x || y
     if (isTrue(node.elseExpression)) {
@@ -328,11 +325,11 @@
   /// rewritten anyway.
   bool isBooleanValued(Expression e) {
     return isTrue(e) ||
-           isFalse(e) ||
-           e is Not ||
-           e is LogicalOperator && isBooleanValuedLogicalOperator(e) ||
-           e is ApplyBuiltinOperator && operatorReturnsBool(e.operator) ||
-           e is TypeOperator && isBooleanValuedTypeOperator(e);
+        isFalse(e) ||
+        e is Not ||
+        e is LogicalOperator && isBooleanValuedLogicalOperator(e) ||
+        e is ApplyBuiltinOperator && operatorReturnsBool(e.operator) ||
+        e is TypeOperator && isBooleanValuedTypeOperator(e);
   }
 
   bool isBooleanValuedLogicalOperator(LogicalOperator e) {
@@ -368,14 +365,22 @@
 
   BuiltinOperator negateBuiltin(BuiltinOperator operator) {
     switch (operator) {
-      case BuiltinOperator.StrictEq: return BuiltinOperator.StrictNeq;
-      case BuiltinOperator.StrictNeq: return BuiltinOperator.StrictEq;
-      case BuiltinOperator.LooseEq: return BuiltinOperator.LooseNeq;
-      case BuiltinOperator.LooseNeq: return BuiltinOperator.LooseEq;
-      case BuiltinOperator.IsNumber: return BuiltinOperator.IsNotNumber;
-      case BuiltinOperator.IsNotNumber: return BuiltinOperator.IsNumber;
-      case BuiltinOperator.IsInteger: return BuiltinOperator.IsNotInteger;
-      case BuiltinOperator.IsNotInteger: return BuiltinOperator.IsInteger;
+      case BuiltinOperator.StrictEq:
+        return BuiltinOperator.StrictNeq;
+      case BuiltinOperator.StrictNeq:
+        return BuiltinOperator.StrictEq;
+      case BuiltinOperator.LooseEq:
+        return BuiltinOperator.LooseNeq;
+      case BuiltinOperator.LooseNeq:
+        return BuiltinOperator.LooseEq;
+      case BuiltinOperator.IsNumber:
+        return BuiltinOperator.IsNotNumber;
+      case BuiltinOperator.IsNotNumber:
+        return BuiltinOperator.IsNumber;
+      case BuiltinOperator.IsInteger:
+        return BuiltinOperator.IsNotInteger;
+      case BuiltinOperator.IsNotInteger:
+        return BuiltinOperator.IsInteger;
       case BuiltinOperator.IsUnsigned32BitInteger:
         return BuiltinOperator.IsNotUnsigned32BitInteger;
       case BuiltinOperator.IsNotUnsigned32BitInteger:
@@ -406,7 +411,7 @@
   /// If [polarity] if false, the negated condition will be created instead.
   /// If [liftNots] is true (default) then Not expressions will be lifted toward
   /// the root of the condition so they can be eliminated by the caller.
-  Expression makeCondition(Expression e, bool polarity, {bool liftNots:true}) {
+  Expression makeCondition(Expression e, bool polarity, {bool liftNots: true}) {
     if (e is Not) {
       // !!E ==> E
       return makeCondition(e.operand, !polarity, liftNots: liftNots);
@@ -453,27 +458,23 @@
       }
       // x ? true : y  ==> x || y
       if (isTrue(e.thenExpression)) {
-        return makeOr(makeCondition(e.condition, true),
-                      e.elseExpression,
-                      liftNots: liftNots);
+        return makeOr(makeCondition(e.condition, true), e.elseExpression,
+            liftNots: liftNots);
       }
       // x ? false : y  ==> !x && y
       if (isFalse(e.thenExpression)) {
-        return makeAnd(makeCondition(e.condition, false),
-                       e.elseExpression,
-                       liftNots: liftNots);
+        return makeAnd(makeCondition(e.condition, false), e.elseExpression,
+            liftNots: liftNots);
       }
       // x ? y : true  ==> !x || y
       if (isTrue(e.elseExpression)) {
-        return makeOr(makeCondition(e.condition, false),
-                      e.thenExpression,
-                      liftNots: liftNots);
+        return makeOr(makeCondition(e.condition, false), e.thenExpression,
+            liftNots: liftNots);
       }
       // x ? y : false  ==> x && y
       if (isFalse(e.elseExpression)) {
-        return makeAnd(makeCondition(e.condition, true),
-                       e.thenExpression,
-                       liftNots: liftNots);
+        return makeAnd(makeCondition(e.condition, true), e.thenExpression,
+            liftNots: liftNots);
       }
 
       e.condition = makeCondition(e.condition, true);
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
index 2f5a9fd..e57c938 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/loop_rewriter.dart
@@ -73,8 +73,7 @@
 /// readability and stack trace usability versus the modest code size
 /// reduction one might get by aggressively moving expressions into the
 /// updates.
-class LoopRewriter extends RecursiveTransformer
-                   implements Pass {
+class LoopRewriter extends RecursiveTransformer implements Pass {
   String get passName => 'Loop rewriter';
 
   Set<Label> usedContinueLabels = new Set<Label>();
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/pull_into_initializers.dart b/pkg/compiler/lib/src/tree_ir/optimization/pull_into_initializers.dart
index 8840c8e..931368d 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/pull_into_initializers.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/pull_into_initializers.dart
@@ -57,8 +57,7 @@
 /// [PullIntoInitializers] cannot pull `y` into an initializer because
 /// the impure expressions `foo()` and `bar()` would then be swapped.
 ///
-class PullIntoInitializers extends RecursiveTransformer
-                           implements Pass {
+class PullIntoInitializers extends RecursiveTransformer implements Pass {
   String get passName => 'Pull into initializers';
 
   /// Denotes where each variable is currently assigned.
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
index 7996101..5db310a 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/statement_rewriter.dart
@@ -368,22 +368,22 @@
     // expressions recursively. Determine if that is a valuable optimization
     // and/or if it is better handled at the CPS level.
     return exp is Constant ||
-           exp is This ||
-           exp is CreateInvocationMirror ||
-           exp is CreateInstance ||
-           exp is CreateBox ||
-           exp is TypeExpression ||
-           exp is GetStatic && exp.element.isFunction ||
-           exp is Interceptor ||
-           exp is ApplyBuiltinOperator ||
-           exp is VariableUse && constantEnvironment.containsKey(exp.variable);
+        exp is This ||
+        exp is CreateInvocationMirror ||
+        exp is CreateInstance ||
+        exp is CreateBox ||
+        exp is TypeExpression ||
+        exp is GetStatic && exp.element.isFunction ||
+        exp is Interceptor ||
+        exp is ApplyBuiltinOperator ||
+        exp is VariableUse && constantEnvironment.containsKey(exp.variable);
   }
 
   /// True if [node] is an assignment that can be propagated as a constant.
   bool isEffectivelyConstantAssignment(Expression node) {
     return node is Assign &&
-           node.variable.writeCount == 1 &&
-           isEffectivelyConstant(node.value);
+        node.variable.writeCount == 1 &&
+        isEffectivelyConstant(node.value);
   }
 
   Statement visitExpressionStatement(ExpressionStatement inputNode) {
@@ -680,9 +680,7 @@
     });
 
     Statement reduced = combineStatementsInBranches(
-        node.thenStatement,
-        node.elseStatement,
-        node.condition);
+        node.thenStatement, node.elseStatement, node.condition);
     if (reduced != null) {
       return reduced;
     }
@@ -746,8 +744,8 @@
 
   bool isCompoundableBuiltin(Expression e) {
     return e is ApplyBuiltinOperator &&
-           e.arguments.length >= 2 &&
-           isCompoundableOperator(e.operator);
+        e.arguments.length >= 2 &&
+        isCompoundableOperator(e.operator);
   }
 
   /// Converts a compoundable operator application into the right-hand side for
@@ -759,9 +757,7 @@
     if (e.arguments.length > 2) {
       assert(e.operator == BuiltinOperator.StringConcatenate);
       return new ApplyBuiltinOperator(
-          e.operator,
-          e.arguments.skip(1).toList(),
-          e.sourceInformation);
+          e.operator, e.arguments.skip(1).toList(), e.sourceInformation);
     } else {
       return e.arguments[1];
     }
@@ -914,12 +910,17 @@
       // Symmetric operators are their own commutes.
       return operator;
     }
-    switch(operator) {
-      case BuiltinOperator.NumLt: return BuiltinOperator.NumGt;
-      case BuiltinOperator.NumLe: return BuiltinOperator.NumGe;
-      case BuiltinOperator.NumGt: return BuiltinOperator.NumLt;
-      case BuiltinOperator.NumGe: return BuiltinOperator.NumLe;
-      default: return null;
+    switch (operator) {
+      case BuiltinOperator.NumLt:
+        return BuiltinOperator.NumGt;
+      case BuiltinOperator.NumLe:
+        return BuiltinOperator.NumGe;
+      case BuiltinOperator.NumGt:
+        return BuiltinOperator.NumLt;
+      case BuiltinOperator.NumGe:
+        return BuiltinOperator.NumLe;
+      default:
+        return null;
     }
   }
 
@@ -948,8 +949,8 @@
           Expression right = node.arguments[1];
           if (right is This ||
               (right is VariableUse &&
-               propagatableVariable != right.variable &&
-               !constantEnvironment.containsKey(right.variable))) {
+                  propagatableVariable != right.variable &&
+                  !constantEnvironment.containsKey(right.variable))) {
             // An assignment can be propagated if we commute the operator.
             node.operator = commuted;
             node.arguments[0] = right;
@@ -982,9 +983,7 @@
   /// If non-null is returned, the caller MUST discard [s] and [t] and use
   /// the returned statement instead.
   Statement combineStatementsInBranches(
-      Statement s,
-      Statement t,
-      Expression condition) {
+      Statement s, Statement t, Expression condition) {
     if (s is Return && t is Return) {
       return new Return(new Conditional(condition, s.value, t.value));
     }
@@ -1049,9 +1048,7 @@
   ///
   /// The latter form is more compact and can also be inlined.
   CombinedExpressions combineAsConditional(
-      Expression s,
-      Expression t,
-      Expression condition) {
+      Expression s, Expression t, Expression condition) {
     if (s is Assign && t is Assign && s.variable == t.variable) {
       Expression values = new Conditional(condition, s.value, t.value);
       return new CombinedAssigns(s, t, new CombinedExpressions(values));
@@ -1083,7 +1080,8 @@
       if (values != null) {
         // TODO(johnniwinther): Handle multiple source informations.
         SourceInformation sourceInformation = s.sourceInformation != null
-            ? s.sourceInformation : t.sourceInformation;
+            ? s.sourceInformation
+            : t.sourceInformation;
         return new Return(values.combined,
             sourceInformation: sourceInformation);
       }
@@ -1227,7 +1225,7 @@
     bool isNullable(int position) => node.nullableArguments[position];
 
     int safeArguments =
-      PlaceholderSafetyAnalysis.analyze(node.codeTemplate.ast, isNullable);
+        PlaceholderSafetyAnalysis.analyze(node.codeTemplate.ast, isNullable);
     inEmptyEnvironment(() {
       for (int i = node.arguments.length - 1; i >= safeArguments; --i) {
         node.arguments[i] = visitExpression(node.arguments[i]);
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart b/pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart
index bcc16ca..273d7a4 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/variable_merger.dart
@@ -24,7 +24,8 @@
     _computeLiveness(builder.blocks);
     PriorityPairs priority = new PriorityPairs()..build(node);
     Map<Variable, Variable> subst = _computeRegisterAllocation(
-        builder.blocks, node.parameters, priority, minifying: minifying);
+        builder.blocks, node.parameters, priority,
+        minifying: minifying);
     new SubstituteVariables(subst).apply(node);
   }
 }
@@ -276,8 +277,8 @@
     if (value is VariableUse) {
       _prioritize(node.variable, value.variable);
     } else if (value is ApplyBuiltinOperator &&
-               isCompoundableOperator(value.operator) &&
-               value.arguments[0] is VariableUse) {
+        isCompoundableOperator(value.operator) &&
+        value.arguments[0] is VariableUse) {
       VariableUse use = value.arguments[0];
       _prioritize(node.variable, use.variable);
     }
@@ -385,10 +386,9 @@
 ///
 /// We then compute a graph coloring, where the color of a node denotes which
 /// variable it will be substituted by.
-Map<Variable, Variable> _computeRegisterAllocation(List<Block> blocks,
-                                                   List<Variable> parameters,
-                                                   PriorityPairs priority,
-                                                   {bool minifying}) {
+Map<Variable, Variable> _computeRegisterAllocation(
+    List<Block> blocks, List<Variable> parameters, PriorityPairs priority,
+    {bool minifying}) {
   Map<Variable, Set<Variable>> interference = <Variable, Set<Variable>>{};
 
   bool allowUnmotivatedMerge(Variable x, Variable y) {
@@ -407,8 +407,8 @@
     // The presence of the phi implies that the two variables can contain the
     // same value, so it is not that confusing that they get the same name.
     return x.element == null ||
-           y.element == null ||
-           x.element.name == y.element.name;
+        y.element == null ||
+        x.element.name == y.element.name;
   }
 
   Set<Variable> empty = new Set<Variable>();
@@ -423,9 +423,8 @@
       interference.putIfAbsent(variable, () => new Set<Variable>());
     }
     // Get variables that are live at the catch block.
-    Set<Variable> liveCatch = block.catchBlock != null
-        ? block.catchBlock.liveIn
-        : empty;
+    Set<Variable> liveCatch =
+        block.catchBlock != null ? block.catchBlock.liveIn : empty;
     // Add edges for each variable being assigned here.
     for (VariableAccess access in block.accesses.reversed) {
       Variable variable = access.variable;
@@ -509,8 +508,7 @@
     searchPriorityPairs(parameter, parameter);
   }
 
-  v1loop:
-  for (Variable v1 in variables) {
+  v1loop: for (Variable v1 in variables) {
     // Ignore if the variable has already been assigned a register.
     if (subst.containsKey(v1)) continue;
 
@@ -532,7 +530,7 @@
 
     // Find an unused color.
     Set<Variable> potential = new Set<Variable>.from(
-          registers.where((v2) => allowUnmotivatedMerge(v1, v2)));
+        registers.where((v2) => allowUnmotivatedMerge(v1, v2)));
     for (Variable v2 in interferenceSet) {
       Variable v2subst = subst[v2];
       if (v2subst != null) {
@@ -554,7 +552,6 @@
 
 /// Performs variable substitution and removes redundant assignments.
 class SubstituteVariables extends RecursiveTransformer {
-
   Map<Variable, Variable> mapping;
 
   SubstituteVariables(this.mapping);
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
index 99fb099..000f610 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_builder.dart
@@ -62,6 +62,7 @@
   final Map<cps_ir.Continuation, Label> labels = <cps_ir.Continuation, Label>{};
 
   ExecutableElement currentElement;
+
   /// The parameter to be translated to 'this'.  This can either be the receiver
   /// parameter, the interceptor parameter, or null if the method has neither.
   cps_ir.Parameter thisParameter;
@@ -85,8 +86,8 @@
   }
 
   VariableUse getMutableVariableUse(
-        cps_ir.Reference<cps_ir.MutableVariable> reference,
-        SourceInformation sourceInformation) {
+      cps_ir.Reference<cps_ir.MutableVariable> reference,
+      SourceInformation sourceInformation) {
     Variable variable = getMutableVariable(reference.definition);
     return new VariableUse(variable, sourceInformation: sourceInformation);
   }
@@ -95,8 +96,8 @@
   /// primitives that have no reference and do not need a variable.
   Variable getVariable(cps_ir.Primitive primitive) {
     primitive = primitive.effectiveDefinition;
-    return primitive2variable.putIfAbsent(primitive,
-        () => new Variable(currentElement, primitive.hint));
+    return primitive2variable.putIfAbsent(
+        primitive, () => new Variable(currentElement, primitive.hint));
   }
 
   /// Obtains a reference to the tree Variable corresponding to the IR primitive
@@ -104,7 +105,7 @@
   /// This increments the reference count for the given variable, so the
   /// returned expression must be used in the tree.
   Expression getVariableUse(cps_ir.Reference<cps_ir.Primitive> reference,
-                            {SourceInformation sourceInformation}) {
+      {SourceInformation sourceInformation}) {
     cps_ir.Primitive prim = reference.definition.effectiveDefinition;
     if (prim is cps_ir.Constant && inlinedConstants.contains(prim)) {
       return new Constant(prim.value);
@@ -112,12 +113,12 @@
     if (thisParameter != null && prim == thisParameter) {
       return new This();
     }
-    return new VariableUse(
-        getVariable(prim), sourceInformation: sourceInformation);
+    return new VariableUse(getVariable(prim),
+        sourceInformation: sourceInformation);
   }
 
   Expression getVariableUseOrNull(
-        cps_ir.Reference<cps_ir.Primitive> reference) {
+      cps_ir.Reference<cps_ir.Primitive> reference) {
     return reference == null ? null : getVariableUse(reference);
   }
 
@@ -151,17 +152,15 @@
   /// The list will be typed as a list of [Expression] to allow inplace updates
   /// on the list during the rewrite phases.
   List<Expression> translateArguments(List<cps_ir.Reference> args) {
-    return new List<Expression>.generate(args.length,
-         (int index) => getVariableUse(args[index]),
-         growable: false);
+    return new List<Expression>.generate(
+        args.length, (int index) => getVariableUse(args[index]),
+        growable: false);
   }
 
   /// Simultaneously assigns each argument to the corresponding parameter,
   /// then continues at the statement created by [buildRest].
-  Statement buildPhiAssignments(
-      List<cps_ir.Parameter> parameters,
-      List<Expression> arguments,
-      Statement buildRest()) {
+  Statement buildPhiAssignments(List<cps_ir.Parameter> parameters,
+      List<Expression> arguments, Statement buildRest()) {
     assert(parameters.length == arguments.length);
     // We want a parallel assignment to all parameters simultaneously.
     // Since we do not have parallel assignments in dart_tree, we must linearize
@@ -217,7 +216,8 @@
         // The temporary will then be used as right-hand side when the
         // assignment gets added.
         VariableUse source = assignmentSrc[i];
-        if (source.variable != phiTempVar) { // Only move to temporary once.
+        if (source.variable != phiTempVar) {
+          // Only move to temporary once.
           assignmentSrc[i] = new VariableUse(phiTempVar);
           addAssignment(phiTempVar, arg);
         }
@@ -364,30 +364,28 @@
   //     of the non-recursive continuation invocation.
   // See [visitInvokeContinuation] for the implementation.
   NodeCallback visitLetCont(cps_ir.LetCont node) => (Statement next) {
-    for (cps_ir.Continuation continuation in node.continuations) {
-      // This happens after the body of the LetCont has been translated.
-      // Labels are created on-demand if the continuation could not be inlined,
-      // so the existence of the label indicates if a labeled statement should
-      // be emitted.
-      Label label = labels[continuation];
-      if (label != null && !continuation.isRecursive) {
-        // Recursively build the body. We only do this for join continuations,
-        // so we should not risk overly deep recursion.
-        next = new LabeledStatement(
-            label,
-            next,
-            translateExpression(continuation.body));
-      }
-    }
-    return next;
-  };
+        for (cps_ir.Continuation continuation in node.continuations) {
+          // This happens after the body of the LetCont has been translated.
+          // Labels are created on-demand if the continuation could not be inlined,
+          // so the existence of the label indicates if a labeled statement should
+          // be emitted.
+          Label label = labels[continuation];
+          if (label != null && !continuation.isRecursive) {
+            // Recursively build the body. We only do this for join continuations,
+            // so we should not risk overly deep recursion.
+            next = new LabeledStatement(
+                label, next, translateExpression(continuation.body));
+          }
+        }
+        return next;
+      };
 
   NodeCallback visitLetHandler(cps_ir.LetHandler node) => (Statement next) {
-    List<Variable> catchParameters =
-        node.handler.parameters.map(getVariable).toList();
-    Statement catchBody = translateExpression(node.handler.body);
-    return new Try(next, catchParameters, catchBody);
-  };
+        List<Variable> catchParameters =
+            node.handler.parameters.map(getVariable).toList();
+        Statement catchBody = translateExpression(node.handler.body);
+        return new Try(next, catchParameters, catchBody);
+      };
 
   NodeCallback visitLetMutable(cps_ir.LetMutable node) {
     Variable variable = addMutableVariable(node.variable);
@@ -419,40 +417,38 @@
     if (cont == returnContinuation) {
       assert(node.argumentRefs.length == 1);
       return new Return(getVariableUse(node.argumentRefs.single),
-                        sourceInformation: node.sourceInformation);
+          sourceInformation: node.sourceInformation);
     } else {
       List<Expression> arguments = translateArguments(node.argumentRefs);
-      return buildPhiAssignments(cont.parameters, arguments,
-          () {
-            // Translate invocations of recursive and non-recursive
-            // continuations differently.
-            //   * Non-recursive continuations
-            //     - If there is one use, translate the continuation body
-            //       inline at the invocation site.
-            //     - If there are multiple uses, translate to Break.
-            //   * Recursive continuations
-            //     - There is a single non-recursive invocation.  Translate
-            //       the continuation body inline as a labeled loop at the
-            //       invocation site.
-            //     - Translate the recursive invocations to Continue.
-            if (cont.isRecursive) {
-              return node.isRecursive
-                  ? new Continue(getLabel(cont))
-                  : new WhileTrue(getLabel(cont),
-                                  translateExpression(cont.body));
-            } else {
-              return cont.hasExactlyOneUse && !node.isEscapingTry
-                  ? translateExpression(cont.body)
-                  : new Break(getLabel(cont));
-            }
-          });
+      return buildPhiAssignments(cont.parameters, arguments, () {
+        // Translate invocations of recursive and non-recursive
+        // continuations differently.
+        //   * Non-recursive continuations
+        //     - If there is one use, translate the continuation body
+        //       inline at the invocation site.
+        //     - If there are multiple uses, translate to Break.
+        //   * Recursive continuations
+        //     - There is a single non-recursive invocation.  Translate
+        //       the continuation body inline as a labeled loop at the
+        //       invocation site.
+        //     - Translate the recursive invocations to Continue.
+        if (cont.isRecursive) {
+          return node.isRecursive
+              ? new Continue(getLabel(cont))
+              : new WhileTrue(getLabel(cont), translateExpression(cont.body));
+        } else {
+          return cont.hasExactlyOneUse && !node.isEscapingTry
+              ? translateExpression(cont.body)
+              : new Break(getLabel(cont));
+        }
+      });
     }
   }
 
   /// Translates a branch condition to a tree expression.
   Expression translateCondition(cps_ir.Branch branch) {
-    Expression value = getVariableUse(
-        branch.conditionRef, sourceInformation: branch.sourceInformation);
+    Expression value = getVariableUse(branch.conditionRef,
+        sourceInformation: branch.sourceInformation);
     if (branch.isStrictCheck) {
       return new ApplyBuiltinOperator(
           BuiltinOperator.StrictEq,
@@ -480,23 +476,19 @@
         condition, thenStatement, elseStatement, node.sourceInformation);
   }
 
-
   /************************** PRIMITIVES  **************************/
   //
   // Visit methods for primitives must return an expression.
   //
 
   Expression visitSetField(cps_ir.SetField node) {
-    return new SetField(getVariableUse(node.objectRef),
-                        node.field,
-                        getVariableUse(node.valueRef),
-                        node.sourceInformation);
+    return new SetField(getVariableUse(node.objectRef), node.field,
+        getVariableUse(node.valueRef), node.sourceInformation);
   }
 
   Expression visitInterceptor(cps_ir.Interceptor node) {
     return new Interceptor(getVariableUse(node.inputRef),
-                           node.interceptedClasses,
-                           node.sourceInformation);
+        node.interceptedClasses, node.sourceInformation);
   }
 
   Expression visitCreateInstance(cps_ir.CreateInstance node) {
@@ -508,8 +500,9 @@
   }
 
   Expression visitGetField(cps_ir.GetField node) {
-    return new GetField(getVariableUse(node.objectRef), node.field,
-        node.sourceInformation, objectIsNotNull: !node.object.type.isNullable);
+    return new GetField(
+        getVariableUse(node.objectRef), node.field, node.sourceInformation,
+        objectIsNotNull: !node.object.type.isNullable);
   }
 
   Expression visitCreateBox(cps_ir.CreateBox node) {
@@ -518,8 +511,7 @@
 
   Expression visitCreateInvocationMirror(cps_ir.CreateInvocationMirror node) {
     return new CreateInvocationMirror(
-        node.selector,
-        translateArguments(node.argumentRefs));
+        node.selector, translateArguments(node.argumentRefs));
   }
 
   Expression visitGetMutable(cps_ir.GetMutable node) {
@@ -529,8 +521,8 @@
   Expression visitSetMutable(cps_ir.SetMutable node) {
     Variable variable = getMutableVariable(node.variable);
     Expression value = getVariableUse(node.valueRef);
-    return new Assign(
-        variable, value, sourceInformation: node.sourceInformation);
+    return new Assign(variable, value,
+        sourceInformation: node.sourceInformation);
   }
 
   Expression visitConstant(cps_ir.Constant node) {
@@ -538,9 +530,7 @@
   }
 
   Expression visitLiteralList(cps_ir.LiteralList node) {
-    return new LiteralList(
-            node.dartType,
-            translateArguments(node.valueRefs));
+    return new LiteralList(node.dartType, translateArguments(node.valueRefs));
   }
 
   Expression visitReifyRuntimeType(cps_ir.ReifyRuntimeType node) {
@@ -550,15 +540,11 @@
 
   Expression visitReadTypeVariable(cps_ir.ReadTypeVariable node) {
     return new ReadTypeVariable(
-        node.variable,
-        getVariableUse(node.targetRef),
-        node.sourceInformation);
+        node.variable, getVariableUse(node.targetRef), node.sourceInformation);
   }
 
   Expression visitTypeExpression(cps_ir.TypeExpression node) {
-    return new TypeExpression(
-        node.kind,
-        node.dartType,
+    return new TypeExpression(node.kind, node.dartType,
         node.argumentRefs.map(getVariableUse).toList());
   }
 
@@ -580,24 +566,19 @@
 
   Expression visitSetStatic(cps_ir.SetStatic node) {
     return new SetStatic(
-        node.element,
-        getVariableUse(node.valueRef),
-        node.sourceInformation);
+        node.element, getVariableUse(node.valueRef), node.sourceInformation);
   }
 
   Expression visitApplyBuiltinOperator(cps_ir.ApplyBuiltinOperator node) {
     if (node.operator == BuiltinOperator.IsFalsy) {
       return new Not(getVariableUse(node.argumentRefs.single));
     }
-    return new ApplyBuiltinOperator(
-        node.operator,
-        translateArguments(node.argumentRefs),
-        node.sourceInformation);
+    return new ApplyBuiltinOperator(node.operator,
+        translateArguments(node.argumentRefs), node.sourceInformation);
   }
 
   Expression visitApplyBuiltinMethod(cps_ir.ApplyBuiltinMethod node) {
-    return new ApplyBuiltinMethod(node.method,
-        getVariableUse(node.receiverRef),
+    return new ApplyBuiltinMethod(node.method, getVariableUse(node.receiverRef),
         translateArguments(node.argumentRefs),
         receiverIsNotNull: !node.receiver.type.isNullable);
   }
@@ -607,26 +588,25 @@
   }
 
   Expression visitGetIndex(cps_ir.GetIndex node) {
-    return new GetIndex(getVariableUse(node.objectRef),
-                        getVariableUse(node.indexRef));
+    return new GetIndex(
+        getVariableUse(node.objectRef), getVariableUse(node.indexRef));
   }
 
   Expression visitSetIndex(cps_ir.SetIndex node) {
     return new SetIndex(getVariableUse(node.objectRef),
-                        getVariableUse(node.indexRef),
-                        getVariableUse(node.valueRef));
+        getVariableUse(node.indexRef), getVariableUse(node.valueRef));
   }
 
   Expression visitInvokeStatic(cps_ir.InvokeStatic node) {
     List<Expression> arguments = translateArguments(node.argumentRefs);
-    return new InvokeStatic(node.target, node.selector, arguments,
-                                         node.sourceInformation);
+    return new InvokeStatic(
+        node.target, node.selector, arguments, node.sourceInformation);
   }
 
-  List<Expression> insertReceiverArgument(Expression receiver,
-        List<Expression> arguments) {
-    return new List<Expression>.generate(arguments.length + 1,
-        (n) => n == 0 ? receiver : arguments[n - 1],
+  List<Expression> insertReceiverArgument(
+      Expression receiver, List<Expression> arguments) {
+    return new List<Expression>.generate(
+        arguments.length + 1, (n) => n == 0 ? receiver : arguments[n - 1],
         growable: false);
   }
 
@@ -659,20 +639,15 @@
         // Also check the JS receiver's type, however, because sometimes we know
         // an interceptor is non-null because it intercepts JSNull.
         invoke.receiverIsNotNull =
-            !node.receiver.type.isNullable ||
-            !node.interceptor.type.isNullable;
+            !node.receiver.type.isNullable || !node.interceptor.type.isNullable;
         return invoke;
 
       case cps_ir.CallingConvention.DummyIntercepted:
         List<Expression> arguments = insertReceiverArgument(
             new Constant(new IntConstantValue(0)),
             translateArguments(node.argumentRefs));
-        InvokeMethod invoke = new InvokeMethod(
-            getVariableUse(node.receiverRef),
-            node.selector,
-            node.mask,
-            arguments,
-            node.sourceInformation);
+        InvokeMethod invoke = new InvokeMethod(getVariableUse(node.receiverRef),
+            node.selector, node.mask, arguments, node.sourceInformation);
         invoke.receiverIsNotNull = !node.receiver.type.isNullable;
         return invoke;
 
@@ -681,23 +656,22 @@
             getVariableUse(node.receiverRef),
             translateArguments(node.argumentRefs));
         return new OneShotInterceptor(
-            node.selector,
-            node.mask,
-            arguments,
-            node.sourceInformation);
+            node.selector, node.mask, arguments, node.sourceInformation);
     }
   }
 
   Expression visitInvokeMethodDirectly(cps_ir.InvokeMethodDirectly node) {
     if (node.interceptorRef != null) {
-      return new InvokeMethodDirectly(getVariableUse(node.interceptorRef),
+      return new InvokeMethodDirectly(
+          getVariableUse(node.interceptorRef),
           node.target,
           node.selector,
           insertReceiverArgument(getVariableUse(node.receiverRef),
               translateArguments(node.argumentRefs)),
           node.sourceInformation);
     } else {
-      return new InvokeMethodDirectly(getVariableUse(node.receiverRef),
+      return new InvokeMethodDirectly(
+          getVariableUse(node.receiverRef),
           node.target,
           node.selector,
           translateArguments(node.argumentRefs),
@@ -713,12 +687,8 @@
 
   Expression visitInvokeConstructor(cps_ir.InvokeConstructor node) {
     List<Expression> arguments = translateArguments(node.argumentRefs);
-    return new InvokeConstructor(
-        node.dartType,
-        node.target,
-        node.selector,
-        arguments,
-        node.sourceInformation);
+    return new InvokeConstructor(node.dartType, node.target, node.selector,
+        arguments, node.sourceInformation);
   }
 
   visitForeignCode(cps_ir.ForeignCode node) {
@@ -752,18 +722,18 @@
   }
 
   visitReceiverCheck(cps_ir.ReceiverCheck node) => (Statement next) {
-    // The CPS IR uses 'isNullCheck' because the semantics are important.
-    // In the Tree IR, syntax is more important, so the receiver check uses
-    // "useInvoke" to denote if an invocation should be emitted.
-    return new ReceiverCheck(
-        condition: getVariableUseOrNull(node.conditionRef),
-        value: getVariableUse(node.valueRef),
-        selector: node.selector,
-        useSelector: node.useSelector,
-        useInvoke: !node.isNullCheck,
-        next: next,
-        sourceInformation: node.sourceInformation);
-  };
+        // The CPS IR uses 'isNullCheck' because the semantics are important.
+        // In the Tree IR, syntax is more important, so the receiver check uses
+        // "useInvoke" to denote if an invocation should be emitted.
+        return new ReceiverCheck(
+            condition: getVariableUseOrNull(node.conditionRef),
+            value: getVariableUse(node.valueRef),
+            selector: node.selector,
+            useSelector: node.useSelector,
+            useInvoke: !node.isNullCheck,
+            next: next,
+            sourceInformation: node.sourceInformation);
+      };
 
   Expression visitGetLazyStatic(cps_ir.GetLazyStatic node) {
     return new GetStatic.lazy(node.element, node.sourceInformation);
@@ -795,6 +765,7 @@
   visitFunctionDefinition(cps_ir.FunctionDefinition node) {
     unexpectedNode(node);
   }
+
   visitParameter(cps_ir.Parameter node) => unexpectedNode(node);
   visitContinuation(cps_ir.Continuation node) => unexpectedNode(node);
   visitMutableVariable(cps_ir.MutableVariable node) => unexpectedNode(node);
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_integrity.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_integrity.dart
index 691a330..ea40782 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_integrity.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_integrity.dart
@@ -89,7 +89,7 @@
 
     if (labelUses[label] != label.useCount) {
       error('Label $label has ${labelUses[label]} uses '
-            'but its reference count is ${label.useCount}');
+          'but its reference count is ${label.useCount}');
     }
   }
 
@@ -152,11 +152,10 @@
       int writes = varWrites.putIfAbsent(variable, () => 0);
       if (reads != variable.readCount || writes != variable.writeCount) {
         error('Invalid reference count for $variable:\n'
-              '- Variable has $reads reads and $writes writes\n'
-              '- Reference count is ${variable.readCount} reads and '
-              '${variable.writeCount} writes');
+            '- Variable has $reads reads and $writes writes\n'
+            '- Reference count is ${variable.readCount} reads and '
+            '${variable.writeCount} writes');
       }
     }
   }
-
 }
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
index adeed90..7a11f83 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_nodes.dart
@@ -150,9 +150,8 @@
   accept(ExpressionVisitor v) => v.visitAssign(this);
   accept1(ExpressionVisitor1 v, arg) => v.visitAssign(this, arg);
 
-  static ExpressionStatement makeStatement(Variable variable,
-                                           Expression value,
-                                           [Statement next]) {
+  static ExpressionStatement makeStatement(Variable variable, Expression value,
+      [Statement next]) {
     return new ExpressionStatement(new Assign(variable, value), next);
   }
 }
@@ -176,7 +175,7 @@
   final SourceInformation sourceInformation;
 
   InvokeStatic(this.target, this.selector, this.arguments,
-               [this.sourceInformation]);
+      [this.sourceInformation]);
 
   accept(ExpressionVisitor visitor) => visitor.visitInvokeStatic(this);
   accept1(ExpressionVisitor1 visitor, arg) {
@@ -200,11 +199,8 @@
   /// If true, it is known that the receiver cannot be `null`.
   bool receiverIsNotNull = false;
 
-  InvokeMethod(this.receiver,
-               this.selector,
-               this.mask,
-               this.arguments,
-               this.sourceInformation) {
+  InvokeMethod(this.receiver, this.selector, this.mask, this.arguments,
+      this.sourceInformation) {
     assert(receiver != null);
   }
 
@@ -245,12 +241,14 @@
   final List<Expression> arguments;
   final Selector selector;
   final SourceInformation sourceInformation;
+
   /// TODO(karlklose): get rid of this field.  Instead use the constant's
   /// expression to find the constructor to be called in dart2dart.
   final values.ConstantValue constant;
 
   InvokeConstructor(this.type, this.target, this.selector, this.arguments,
-                    this.sourceInformation, [this.constant]);
+      this.sourceInformation,
+      [this.constant]);
 
   ClassElement get targetClass => target.enclosingElement;
 
@@ -272,10 +270,8 @@
   final List<Expression> arguments;
   final SourceInformation sourceInformation;
 
-  OneShotInterceptor(this.selector,
-                     this.mask,
-                     this.arguments,
-                     this.sourceInformation);
+  OneShotInterceptor(
+      this.selector, this.mask, this.arguments, this.sourceInformation);
 
   accept(ExpressionVisitor visitor) => visitor.visitOneShotInterceptor(this);
   accept1(ExpressionVisitor1 visitor, arg) {
@@ -330,7 +326,7 @@
   final bool isTypeTest;
 
   TypeOperator(this.value, this.type, this.typeArguments,
-               {bool this.isTypeTest});
+      {bool this.isTypeTest});
 
   accept(ExpressionVisitor visitor) => visitor.visitTypeOperator(this);
   accept1(ExpressionVisitor1 visitor, arg) {
@@ -356,6 +352,7 @@
   accept(ExpressionVisitor visitor) {
     return visitor.visitApplyBuiltinOperator(this);
   }
+
   accept1(ExpressionVisitor1 visitor, arg) {
     return visitor.visitApplyBuiltinOperator(this, arg);
   }
@@ -368,14 +365,13 @@
 
   bool receiverIsNotNull;
 
-  ApplyBuiltinMethod(this.method,
-                     this.receiver,
-                     this.arguments,
-                     {this.receiverIsNotNull: false});
+  ApplyBuiltinMethod(this.method, this.receiver, this.arguments,
+      {this.receiverIsNotNull: false});
 
   accept(ExpressionVisitor visitor) {
     return visitor.visitApplyBuiltinMethod(this);
   }
+
   accept1(ExpressionVisitor1 visitor, arg) {
     return visitor.visitApplyBuiltinMethod(this, arg);
   }
@@ -395,7 +391,7 @@
   }
 
   String toString() => 'Conditional(condition=$condition,thenExpression='
-                       '$thenExpression,elseExpression=$elseExpression)';
+      '$thenExpression,elseExpression=$elseExpression)';
 }
 
 /// An && or || expression. The operator is internally represented as a boolean
@@ -460,8 +456,7 @@
 }
 
 /// A [WhileTrue] or [For] loop.
-abstract class Loop extends JumpTarget {
-}
+abstract class Loop extends JumpTarget {}
 
 /**
  * A labeled while(true) loop.
@@ -501,11 +496,7 @@
   Statement body;
   Statement next;
 
-  For(this.label,
-      this.condition,
-      this.updates,
-      this.body,
-      this.next) {
+  For(this.label, this.condition, this.updates, this.body, this.next) {
     assert(label.binding == null);
     label.binding = this;
   }
@@ -608,10 +599,8 @@
   Statement get next => null;
   void set next(Statement s) => throw 'UNREACHABLE';
 
-  If(this.condition,
-     this.thenStatement,
-     this.elseStatement,
-     this.sourceInformation);
+  If(this.condition, this.thenStatement, this.elseStatement,
+      this.sourceInformation);
 
   accept(StatementVisitor visitor) => visitor.visitIf(this);
   accept1(StatementVisitor1 visitor, arg) => visitor.visitIf(this, arg);
@@ -667,10 +656,7 @@
   Statement body;
 
   /// Creates a function definition and updates `writeCount` for [parameters].
-  FunctionDefinition(
-      this.element,
-      this.parameters,
-      this.body,
+  FunctionDefinition(this.element, this.parameters, this.body,
       {this.sourceInformation}) {
     for (Variable param in parameters) {
       param.writeCount++; // Being a parameter counts as a write.
@@ -689,8 +675,8 @@
   Expression typeInformation;
   SourceInformation sourceInformation;
 
-  CreateInstance(this.classElement, this.arguments,
-                 this.typeInformation, this.sourceInformation);
+  CreateInstance(this.classElement, this.arguments, this.typeInformation,
+      this.sourceInformation);
 
   accept(ExpressionVisitor visitor) => visitor.visitCreateInstance(this);
   accept1(ExpressionVisitor1 visitor, arg) {
@@ -704,10 +690,7 @@
   bool objectIsNotNull;
   SourceInformation sourceInformation;
 
-  GetField(
-      this.object,
-      this.field,
-      this.sourceInformation,
+  GetField(this.object, this.field, this.sourceInformation,
       {this.objectIsNotNull: false});
 
   accept(ExpressionVisitor visitor) => visitor.visitGetField(this);
@@ -724,18 +707,13 @@
   /// operator.  The operator must be a compoundable operator.
   BuiltinOperator compound;
 
-  SetField(
-      this.object,
-      this.field,
-      this.value,
-      this.sourceInformation,
+  SetField(this.object, this.field, this.value, this.sourceInformation,
       {this.compound});
 
   accept(ExpressionVisitor visitor) => visitor.visitSetField(this);
   accept1(ExpressionVisitor1 visitor, arg) => visitor.visitSetField(this, arg);
 }
 
-
 /// Read the type test property from [object]. The value is truthy/fasly rather
 /// than bool. [object] must not be `null`.
 class GetTypeTestProperty extends Expression {
@@ -744,8 +722,7 @@
 
   GetTypeTestProperty(this.object, this.dartType);
 
-  accept(ExpressionVisitor visitor) =>
-      visitor.visitGetTypeTestProperty(this);
+  accept(ExpressionVisitor visitor) => visitor.visitGetTypeTestProperty(this);
   accept1(ExpressionVisitor1 visitor, arg) =>
       visitor.visitGetTypeTestProperty(this, arg);
 }
@@ -875,31 +852,27 @@
   final types.TypeMask type;
   final List<Expression> arguments;
   final native.NativeBehavior nativeBehavior;
-  final List<bool> nullableArguments;  // One 'bit' per argument.
+  final List<bool> nullableArguments; // One 'bit' per argument.
   final Element dependency;
   final SourceInformation sourceInformation;
 
-  ForeignCode(
-      this.codeTemplate,
-      this.type,
-      this.arguments,
-      this.nativeBehavior,
-      this.nullableArguments,
-      this.dependency,
-      this.sourceInformation) {
+  ForeignCode(this.codeTemplate, this.type, this.arguments, this.nativeBehavior,
+      this.nullableArguments, this.dependency, this.sourceInformation) {
     assert(arguments.length == nullableArguments.length);
   }
 }
 
 class ForeignExpression extends ForeignCode implements Expression {
   ForeignExpression(
-      js.Template codeTemplate, types.TypeMask type,
-      List<Expression> arguments, native.NativeBehavior nativeBehavior,
+      js.Template codeTemplate,
+      types.TypeMask type,
+      List<Expression> arguments,
+      native.NativeBehavior nativeBehavior,
       List<bool> nullableArguments,
       Element dependency,
       SourceInformation sourceInformation)
       : super(codeTemplate, type, arguments, nativeBehavior, nullableArguments,
-          dependency, sourceInformation);
+            dependency, sourceInformation);
 
   accept(ExpressionVisitor visitor) {
     return visitor.visitForeignExpression(this);
@@ -912,13 +885,15 @@
 
 class ForeignStatement extends ForeignCode implements Statement {
   ForeignStatement(
-      js.Template codeTemplate, types.TypeMask type,
-      List<Expression> arguments, native.NativeBehavior nativeBehavior,
+      js.Template codeTemplate,
+      types.TypeMask type,
+      List<Expression> arguments,
+      native.NativeBehavior nativeBehavior,
       List<bool> nullableArguments,
       Element dependency,
       SourceInformation sourceInformation)
       : super(codeTemplate, type, arguments, nativeBehavior, nullableArguments,
-          dependency, sourceInformation);
+            dependency, sourceInformation);
 
   accept(StatementVisitor visitor) {
     return visitor.visitForeignStatement(this);
@@ -993,8 +968,14 @@
   Statement next;
   SourceInformation sourceInformation;
 
-  ReceiverCheck({this.condition, this.value, this.selector, this.useSelector,
-      this.useInvoke, this.next, this.sourceInformation});
+  ReceiverCheck(
+      {this.condition,
+      this.value,
+      this.selector,
+      this.useSelector,
+      this.useInvoke,
+      this.next,
+      this.sourceInformation});
 
   accept(StatementVisitor visitor) {
     return visitor.visitReceiverCheck(this);
@@ -1239,8 +1220,7 @@
     visitExpression(node.value);
   }
 
-  visitGetStatic(GetStatic node) {
-  }
+  visitGetStatic(GetStatic node) {}
 
   visitSetStatic(SetStatic node) {
     visitExpression(node.value);
@@ -1250,8 +1230,7 @@
     visitExpression(node.object);
   }
 
-  visitCreateBox(CreateBox node) {
-  }
+  visitCreateBox(CreateBox node) {}
 
   visitCreateInstance(CreateInstance node) {
     node.arguments.forEach(visitExpression);
@@ -1274,8 +1253,7 @@
     node.arguments.forEach(visitExpression);
   }
 
-  visitUnreachable(Unreachable node) {
-  }
+  visitUnreachable(Unreachable node) {}
 
   visitApplyBuiltinOperator(ApplyBuiltinOperator node) {
     node.arguments.forEach(visitExpression);
@@ -1328,10 +1306,10 @@
   }
 }
 
-abstract class Transformer implements ExpressionVisitor<Expression>,
-                                      StatementVisitor<Statement> {
-   Expression visitExpression(Expression e) => e.accept(this);
-   Statement visitStatement(Statement s) => s.accept(this);
+abstract class Transformer
+    implements ExpressionVisitor<Expression>, StatementVisitor<Statement> {
+  Expression visitExpression(Expression e) => e.accept(this);
+  Statement visitStatement(Statement s) => s.accept(this);
 }
 
 class RecursiveTransformer extends Transformer {
@@ -1600,8 +1578,9 @@
 
 /// A stack machine for tracking fallthrough while traversing the Tree IR.
 class FallthroughStack {
-  final List<FallthroughTarget> _stack =
-    <FallthroughTarget>[new FallthroughTarget(null)];
+  final List<FallthroughTarget> _stack = <FallthroughTarget>[
+    new FallthroughTarget(null)
+  ];
 
   /// Set a new fallthrough target.
   void push(Statement newFallthrough) {
diff --git a/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart b/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
index 01aed83..39b4bb1 100644
--- a/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
+++ b/pkg/compiler/lib/src/tree_ir/tree_ir_tracer.dart
@@ -11,6 +11,7 @@
 class Block {
   Label label;
   int index;
+
   /// Mixed list of [Statement] and [Block].
   /// A [Block] represents a synthetic goto statement.
   final List statements = [];
@@ -51,6 +52,7 @@
   void _addStatement(Statement statement) {
     blocks.last.statements.add(statement);
   }
+
   void _addGotoStatement(Block target) {
     blocks.last.statements.add(target);
   }
@@ -230,8 +232,8 @@
           printStatement(null, 'Entry ($params)');
         }
         if (block.label != null) {
-          printStatement(null,
-              "Label ${block.name}, useCount=${block.label.useCount}");
+          printStatement(
+              null, "Label ${block.name}, useCount=${block.label.useCount}");
         }
         if (block.catcher != null) {
           printStatement(null, 'Catch exceptions at ${block.catcher.name}');
@@ -283,8 +285,8 @@
   }
 
   visitContinue(Continue node) {
-    printStatement(null,
-        "continue ${collector.continueTargets[node.target].name}");
+    printStatement(
+        null, "continue ${collector.continueTargets[node.target].name}");
   }
 
   visitIf(If node) {
@@ -305,7 +307,7 @@
     printStatement(null, "while ${expr(node.condition)}");
     printStatement(null, "do $bodyTarget");
     printStatement(null, "updates ($updates)");
-    printStatement(null, "then $nextTarget" );
+    printStatement(null, "then $nextTarget");
   }
 
   visitTry(Try node) {
@@ -424,9 +426,9 @@
 
   static bool usesInfixNotation(Expression node) {
     return node is Conditional ||
-           node is LogicalOperator ||
-           node is Assign ||
-           node is SetField;
+        node is LogicalOperator ||
+        node is Assign ||
+        node is SetField;
   }
 
   String visitConditional(Conditional node) {
diff --git a/pkg/compiler/lib/src/typechecker.dart b/pkg/compiler/lib/src/typechecker.dart
index bd23056..9593b10 100644
--- a/pkg/compiler/lib/src/typechecker.dart
+++ b/pkg/compiler/lib/src/typechecker.dart
@@ -5,53 +5,47 @@
 library dart2js.typechecker;
 
 import 'common.dart';
-import 'common/names.dart' show
-    Identifiers;
-import 'common/resolution.dart' show
-    Resolution;
-import 'common/tasks.dart' show
-    CompilerTask;
-import 'compiler.dart' show
-    Compiler;
+import 'common/names.dart' show Identifiers;
+import 'common/resolution.dart' show Resolution;
+import 'common/tasks.dart' show CompilerTask;
+import 'compiler.dart' show Compiler;
 import 'constants/expressions.dart';
 import 'constants/values.dart';
 import 'core_types.dart';
 import 'dart_types.dart';
-import 'elements/elements.dart' show
-    AbstractFieldElement,
-    AstElement,
-    AsyncMarker,
-    ClassElement,
-    ConstructorElement,
-    Element,
-    Elements,
-    EnumClassElement,
-    ExecutableElement,
-    FieldElement,
-    FunctionElement,
-    GetterElement,
-    InitializingFormalElement,
-    LibraryElement,
-    Member,
-    MemberSignature,
-    Name,
-    ParameterElement,
-    PrivateName,
-    PublicName,
-    ResolvedAst,
-    SetterElement,
-    TypeDeclarationElement,
-    TypedElement,
-    TypedefElement,
-    VariableElement;
-import 'resolution/tree_elements.dart' show
-    TreeElements;
-import 'resolution/class_members.dart' show
-    MembersCreator;
+import 'elements/elements.dart'
+    show
+        AbstractFieldElement,
+        AstElement,
+        AsyncMarker,
+        ClassElement,
+        ConstructorElement,
+        Element,
+        Elements,
+        EnumClassElement,
+        EnumConstantElement,
+        ExecutableElement,
+        FieldElement,
+        FunctionElement,
+        GetterElement,
+        InitializingFormalElement,
+        LibraryElement,
+        Member,
+        MemberSignature,
+        Name,
+        ParameterElement,
+        PrivateName,
+        PublicName,
+        ResolvedAst,
+        SetterElement,
+        TypeDeclarationElement,
+        TypedElement,
+        TypedefElement,
+        VariableElement;
+import 'resolution/tree_elements.dart' show TreeElements;
+import 'resolution/class_members.dart' show MembersCreator;
 import 'tree/tree.dart';
-import 'util/util.dart' show
-    Link,
-    LinkBuilder;
+import 'util/util.dart' show Link, LinkBuilder;
 
 class TypeCheckerTask extends CompilerTask {
   TypeCheckerTask(Compiler compiler) : super(compiler);
@@ -233,7 +227,6 @@
   String toString() => 'TypeLiteralAccess($type)';
 }
 
-
 /// An access to the 'call' method of a function type.
 class FunctionCallAccess implements ElementAccess {
   final Element element;
@@ -250,7 +243,6 @@
   String toString() => 'FunctionAccess($element, $type)';
 }
 
-
 /// An is-expression that potentially promotes a variable.
 class TypePromotion {
   final Send node;
@@ -267,7 +259,7 @@
   }
 
   void addHint(DiagnosticMessage hint,
-               [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
     messages.add(new TypePromotionMessage(hint, infos));
   }
 
@@ -332,9 +324,8 @@
 
   void registerKnownTypePromotion(TypePromotion typePromotion) {
     VariableElement variable = typePromotion.variable;
-    Link<TypePromotion> knownTypes =
-        typePromotionsMap.putIfAbsent(variable,
-                                      () => const Link<TypePromotion>());
+    Link<TypePromotion> knownTypes = typePromotionsMap.putIfAbsent(
+        variable, () => const Link<TypePromotion>());
     typePromotionsMap[variable] = knownTypes.prepend(typePromotion);
   }
 
@@ -377,8 +368,8 @@
       : this.elements = elements,
         this.executableContext = elements.analyzedElement,
         this.currentClass = elements.analyzedElement != null
-            ? elements.analyzedElement.enclosingClass : null {
-
+            ? elements.analyzedElement.enclosingClass
+            : null {
     if (currentClass != null) {
       thisType = currentClass.thisType;
       superType = currentClass.supertype;
@@ -392,13 +383,12 @@
   LibraryElement get currentLibrary => elements.analyzedElement.library;
 
   reportTypeWarning(Spannable spannable, MessageKind kind,
-                    [Map arguments = const {}]) {
+      [Map arguments = const {}]) {
     reporter.reportWarningMessage(spannable, kind, arguments);
   }
 
-  reportMessage(Spannable spannable, MessageKind kind,
-                Map arguments,
-                {bool isHint: false}) {
+  reportMessage(Spannable spannable, MessageKind kind, Map arguments,
+      {bool isHint: false}) {
     if (isHint) {
       reporter.reportHintMessage(spannable, kind, arguments);
     } else {
@@ -454,7 +444,7 @@
   }
 
   void checkTypePromotion(Node node, TypePromotion typePromotion,
-                          {bool checkAccesses: false}) {
+      {bool checkAccesses: false}) {
     VariableElement variable = typePromotion.variable;
     String variableName = variable.name;
     List<Node> potentialMutationsIn =
@@ -466,7 +456,8 @@
           {'variableName': variableName, 'shownType': typePromotion.type});
       List<DiagnosticMessage> infos = <DiagnosticMessage>[];
       for (Node mutation in potentialMutationsIn) {
-        infos.add(reporter.createMessage(mutation,
+        infos.add(reporter.createMessage(
+            mutation,
             MessageKind.POTENTIAL_MUTATION_HERE,
             {'variableName': variableName}));
       }
@@ -517,7 +508,7 @@
   /// Show type promotions from [left] and [right] in [node] given that the
   /// promoted variables are not potentially mutated in [right].
   void reshowTypePromotions(Node node, Node left, Node right) {
-    for (TypePromotion typePromotion in  getShownTypePromotionsFor(left)) {
+    for (TypePromotion typePromotion in getShownTypePromotionsFor(left)) {
       typePromotion = typePromotion.copy();
       checkTypePromotion(right, typePromotion);
       showTypePromotion(node, typePromotion);
@@ -533,7 +524,7 @@
   /// Analyze [node] in the context of the known types shown in [context].
   DartType analyzeInPromotedContext(Node context, Node node) {
     Link<TypePromotion> knownForNode = const Link<TypePromotion>();
-    for (TypePromotion typePromotion in  getShownTypePromotionsFor(context)) {
+    for (TypePromotion typePromotion in getShownTypePromotionsFor(context)) {
       typePromotion = typePromotion.copy();
       checkTypePromotion(node, typePromotion, checkAccesses: true);
       knownForNode = knownForNode.prepend(typePromotion);
@@ -556,17 +547,13 @@
    * checked mode, otherwise a warning is issued.
    */
   bool checkAssignable(Spannable spannable, DartType from, DartType to,
-                       {bool isConst: false}) {
+      {bool isConst: false}) {
     if (!types.isAssignable(from, to)) {
       if (compiler.options.enableTypeAssertions && isConst) {
-        reporter.reportErrorMessage(
-            spannable,
-            MessageKind.NOT_ASSIGNABLE,
+        reporter.reportErrorMessage(spannable, MessageKind.NOT_ASSIGNABLE,
             {'fromType': from, 'toType': to});
       } else {
-        reporter.reportWarningMessage(
-            spannable,
-            MessageKind.NOT_ASSIGNABLE,
+        reporter.reportWarningMessage(spannable, MessageKind.NOT_ASSIGNABLE,
             {'fromType': from, 'toType': to});
       }
       return false;
@@ -645,7 +632,7 @@
     DartType returnType;
     final FunctionElement element = elements.getFunctionDefinition(node);
     assert(invariant(node, element != null,
-                     message: 'FunctionExpression with no element'));
+        message: 'FunctionExpression with no element'));
     if (Elements.isUnresolved(element)) return const DynamicType();
     if (element.isGenerativeConstructor) {
       type = const DynamicType();
@@ -690,9 +677,8 @@
       TypedElement element = elements[node];
       assert(invariant(node, element != null,
           message: 'Missing element for identifier'));
-      assert(invariant(node, element.isVariable ||
-                             element.isParameter ||
-                             element.isField,
+      assert(invariant(
+          node, element.isVariable || element.isParameter || element.isField,
           message: 'Unexpected context element ${element}'));
       return element.computeType(resolution);
     }
@@ -714,19 +700,14 @@
     if (name != null &&
         Name.isPrivateName(name) &&
         element.library != currentLibrary) {
-      reportTypeWarning(
-          node,
-          MessageKind.PRIVATE_ACCESS,
-          {'name': name,
-           'libraryName': element.library.libraryOrScriptName});
+      reportTypeWarning(node, MessageKind.PRIVATE_ACCESS,
+          {'name': name, 'libraryName': element.library.libraryOrScriptName});
     }
-
   }
 
   ElementAccess lookupMember(Node node, DartType receiverType, String name,
-                             MemberKind memberKind, Element receiverElement,
-                             {bool lookupClassMember: false,
-                              bool isHint: false}) {
+      MemberKind memberKind, Element receiverElement,
+      {bool lookupClassMember: false, bool isHint: false}) {
     if (receiverType.treatAsDynamic) {
       return const DynamicAccess();
     }
@@ -745,8 +726,8 @@
 
     // Compute the access of [name] on [type]. This function takes the special
     // 'call' method into account.
-    ElementAccess getAccess(Name name,
-                            DartType unaliasedBound, InterfaceType interface) {
+    ElementAccess getAccess(
+        Name name, DartType unaliasedBound, InterfaceType interface) {
       MemberSignature member = lookupMemberSignature(memberName, interface);
       if (member != null) {
         return new MemberAccess(member);
@@ -809,11 +790,13 @@
           if (memberName.isSimilarTo(member.name)) {
             PrivateName privateName = member.name;
             reportMessage(
-                 node,
-                 MessageKind.PRIVATE_ACCESS,
-                 {'name': name,
-                  'libraryName': privateName.library.libraryOrScriptName},
-                 isHint: isHint);
+                node,
+                MessageKind.PRIVATE_ACCESS,
+                {
+                  'name': name,
+                  'libraryName': privateName.library.libraryOrScriptName
+                },
+                isHint: isHint);
             foundPrivateMember = true;
           }
         }
@@ -824,7 +807,6 @@
         } else {
           interface.element.forEachInterfaceMember(findPrivateMember);
         }
-
       }
       if (!foundPrivateMember) {
         switch (memberKind) {
@@ -842,7 +824,8 @@
             if (lookupMemberSignature(memberName.setter, interface) != null) {
               // A setter is present so warn explicitly about the missing
               // getter.
-              reportMessage(node,
+              reportMessage(
+                  node,
                   MessageKind.UNDEFINED_INSTANCE_GETTER_BUT_SETTER,
                   {'className': receiverType.name, 'memberName': name},
                   isHint: isHint);
@@ -874,20 +857,19 @@
     return const DynamicAccess();
   }
 
-  DartType lookupMemberType(Node node, DartType type, String name,
-                            MemberKind memberKind,
-                            {bool isHint: false}) {
+  DartType lookupMemberType(
+      Node node, DartType type, String name, MemberKind memberKind,
+      {bool isHint: false}) {
     return lookupMember(node, type, name, memberKind, null, isHint: isHint)
         .computeType(resolution);
   }
 
   void analyzeArguments(Send send, Element element, DartType type,
-                        [LinkBuilder<DartType> argumentTypes]) {
+      [LinkBuilder<DartType> argumentTypes]) {
     Link<Node> arguments = send.arguments;
     type.computeUnaliased(resolution);
     DartType unaliasedType = type.unaliased;
     if (identical(unaliasedType.kind, TypeKind.FUNCTION)) {
-
       /// Report [warning] including info(s) about the declaration of [element]
       /// or [type].
       void reportWarning(DiagnosticMessage warning) {
@@ -898,10 +880,8 @@
         if (declaration == null) {
           declaration = type.element;
         } else if (type.isTypedef) {
-          infos.add(reporter.createMessage(
-              declaration,
-              MessageKind.THIS_IS_THE_DECLARATION,
-              {'name': element.name}));
+          infos.add(reporter.createMessage(declaration,
+              MessageKind.THIS_IS_THE_DECLARATION, {'name': element.name}));
           declaration = type.element;
         }
         if (declaration != null) {
@@ -913,13 +893,10 @@
 
       /// Report a warning on [node] if [argumentType] is not assignable to
       /// [parameterType].
-      void checkAssignable(Spannable node,
-                           DartType argumentType,
-                           DartType parameterType) {
+      void checkAssignable(
+          Spannable node, DartType argumentType, DartType parameterType) {
         if (!types.isAssignable(argumentType, parameterType)) {
-          reportWarning(reporter.createMessage(
-              node,
-              MessageKind.NOT_ASSIGNABLE,
+          reportWarning(reporter.createMessage(node, MessageKind.NOT_ASSIGNABLE,
               {'fromType': argumentType, 'toType': parameterType}));
         }
       }
@@ -954,7 +931,6 @@
         } else {
           if (!parameterTypes.moveNext()) {
             if (!optionalParameterTypes.moveNext()) {
-
               // TODO(johnniwinther): Provide better information on the
               // called function.
               reportWarning(reporter.createMessage(
@@ -979,12 +955,11 @@
       if (parameterTypes.moveNext()) {
         // TODO(johnniwinther): Provide better information on the called
         // function.
-        reportWarning(reporter.createMessage(
-            send, MessageKind.MISSING_ARGUMENT,
+        reportWarning(reporter.createMessage(send, MessageKind.MISSING_ARGUMENT,
             {'argumentType': parameterTypes.current}));
       }
     } else {
-      while(!arguments.isEmpty) {
+      while (!arguments.isEmpty) {
         DartType argumentType = analyze(arguments.head);
         if (argumentTypes != null) argumentTypes.addLast(argumentType);
         arguments = arguments.tail;
@@ -997,15 +972,15 @@
   // If provided [argumentTypes] is filled with the argument types during
   // analysis.
   DartType analyzeInvocation(Send node, ElementAccess elementAccess,
-                             [LinkBuilder<DartType> argumentTypes]) {
+      [LinkBuilder<DartType> argumentTypes]) {
     DartType type = elementAccess.computeType(resolution);
     if (elementAccess.isCallable(compiler)) {
       analyzeArguments(node, elementAccess.element, type, argumentTypes);
     } else {
-      reportTypeWarning(node, MessageKind.NOT_CALLABLE,
-          {'elementName': elementAccess.name});
-      analyzeArguments(node, elementAccess.element, const DynamicType(),
-                       argumentTypes);
+      reportTypeWarning(
+          node, MessageKind.NOT_CALLABLE, {'elementName': elementAccess.name});
+      analyzeArguments(
+          node, elementAccess.element, const DynamicType(), argumentTypes);
     }
     type.computeUnaliased(resolution);
     type = type.unaliased;
@@ -1021,9 +996,9 @@
    * Computes the [ElementAccess] for [name] on the [node] possibly using the
    * [element] provided for [node] by the resolver.
    */
-  ElementAccess computeAccess(Send node, String name, Element element,
-                              MemberKind memberKind,
-                              {bool lookupClassMember: false}) {
+  ElementAccess computeAccess(
+      Send node, String name, Element element, MemberKind memberKind,
+      {bool lookupClassMember: false}) {
     if (Elements.isMalformed(element)) {
       return const DynamicAccess();
     }
@@ -1045,10 +1020,10 @@
       if (receiverType.treatAsDynamic || receiverType.isVoid) {
         return const DynamicAccess();
       }
-      return lookupMember(node, receiverType, name, memberKind,
-          elements[node.receiver],
-          lookupClassMember: lookupClassMember ||
-              element != null && element.isStatic);
+      return lookupMember(
+          node, receiverType, name, memberKind, elements[node.receiver],
+          lookupClassMember:
+              lookupClassMember || element != null && element.isStatic);
     } else {
       return computeResolvedAccess(node, name, element, memberKind);
     }
@@ -1058,8 +1033,8 @@
    * Computes the [ElementAccess] for [name] on the [node] using the [element]
    * provided for [node] by the resolver.
    */
-  ElementAccess computeResolvedAccess(Send node, String name,
-                                      Element element, MemberKind memberKind) {
+  ElementAccess computeResolvedAccess(
+      Send node, String name, Element element, MemberKind memberKind) {
     if (element == null) {
       // foo() where foo is unresolved.
       return lookupMember(node, thisType, name, memberKind, null);
@@ -1079,22 +1054,19 @@
     } else if (element.isFunction) {
       // foo() where foo is a method in the same class.
       return createResolvedAccess(node, name, element);
-    } else if (element.isVariable ||
-        element.isParameter ||
-        element.isField) {
+    } else if (element.isVariable || element.isParameter || element.isField) {
       // foo() where foo is a field in the same class.
       return createResolvedAccess(node, name, element);
     } else if (element.isGetter || element.isSetter) {
       return createResolvedAccess(node, name, element);
     } else {
-      reporter.internalError(element,
-          'Unexpected element kind ${element.kind}.');
+      reporter.internalError(
+          element, 'Unexpected element kind ${element.kind}.');
       return null;
     }
   }
 
-  ElementAccess createResolvedAccess(Send node, String name,
-                                     Element element) {
+  ElementAccess createResolvedAccess(Send node, String name, Element element) {
     checkPrivateAccess(node, element, name);
     return createPromotedAccess(element);
   }
@@ -1113,12 +1085,12 @@
    * Computes the type of the access of [name] on the [node] possibly using the
    * [element] provided for [node] by the resolver.
    */
-  DartType computeAccessType(Send node, String name, Element element,
-                             MemberKind memberKind,
-                             {bool lookupClassMember: false}) {
-    DartType type =
-        computeAccess(node, name, element, memberKind,
-            lookupClassMember: lookupClassMember).computeType(resolution);
+  DartType computeAccessType(
+      Send node, String name, Element element, MemberKind memberKind,
+      {bool lookupClassMember: false}) {
+    DartType type = computeAccess(node, name, element, memberKind,
+            lookupClassMember: lookupClassMember)
+        .computeType(resolution);
     if (type == null) {
       reporter.internalError(node, 'Type is null on access of $name on $node.');
     }
@@ -1129,8 +1101,7 @@
   /// This is used to provided better hints when trying to promote a supertype
   /// to a raw subtype. For instance trying to promote `Iterable<int>` to `List`
   /// we suggest the use of `List<int>`, which would make promotion valid.
-  DartType computeMoreSpecificType(DartType shownType,
-                                   DartType knownType) {
+  DartType computeMoreSpecificType(DartType shownType, DartType knownType) {
     if (knownType.isInterfaceType &&
         shownType.isInterfaceType &&
         types.isSubtype(shownType.asRaw(), knownType)) {
@@ -1146,8 +1117,8 @@
       // the relation between `A<S, int>` and `A<double, int>`.
       MoreSpecificSubtypeVisitor visitor =
           new MoreSpecificSubtypeVisitor(types);
-      InterfaceType shownTypeGeneric = visitor.computeMoreSpecific(
-          shownClass, knownInterfaceType);
+      InterfaceType shownTypeGeneric =
+          visitor.computeMoreSpecific(shownClass, knownInterfaceType);
 
       if (shownTypeGeneric != null &&
           types.isMoreSpecific(shownTypeGeneric, knownType)) {
@@ -1157,7 +1128,6 @@
       }
     }
     return null;
-
   }
 
   static bool _fyiShown = false;
@@ -1166,7 +1136,8 @@
     if (const bool.fromEnvironment('send_stats') &&
         executableContext != null &&
         // TODO(sigmund): enable also in core libs.
-        !executableContext.library.isPlatformLibrary && !type.isDynamic) {
+        !executableContext.library.isPlatformLibrary &&
+        !type.isDynamic) {
       if (!_fyiShown) {
         print('FYI experiment to collect send stats is on: '
             'caching types of expressions');
@@ -1236,8 +1207,7 @@
           }
         }
 
-        if (variable != null &&
-            (variable.isVariable || variable.isParameter)) {
+        if (variable != null && (variable.isVariable || variable.isParameter)) {
           DartType knownType = getKnownType(variable);
           if (!knownType.isDynamic) {
             DartType shownType = elements.getType(node.arguments.head);
@@ -1247,29 +1217,29 @@
               String variableName = variable.name;
               if (!types.isSubtype(shownType, knownType)) {
                 typePromotion.addHint(reporter.createMessage(
-                    node,
-                    MessageKind.NOT_MORE_SPECIFIC_SUBTYPE,
-                    {'variableName': variableName,
-                     'shownType': shownType,
-                     'knownType': knownType}));
+                    node, MessageKind.NOT_MORE_SPECIFIC_SUBTYPE, {
+                  'variableName': variableName,
+                  'shownType': shownType,
+                  'knownType': knownType
+                }));
               } else {
                 DartType shownTypeSuggestion =
                     computeMoreSpecificType(shownType, knownType);
                 if (shownTypeSuggestion != null) {
                   typePromotion.addHint(reporter.createMessage(
-                      node,
-                      MessageKind.NOT_MORE_SPECIFIC_SUGGESTION,
-                      {'variableName': variableName,
-                       'shownType': shownType,
-                       'shownTypeSuggestion': shownTypeSuggestion,
-                       'knownType': knownType}));
+                      node, MessageKind.NOT_MORE_SPECIFIC_SUGGESTION, {
+                    'variableName': variableName,
+                    'shownType': shownType,
+                    'shownTypeSuggestion': shownTypeSuggestion,
+                    'knownType': knownType
+                  }));
                 } else {
                   typePromotion.addHint(reporter.createMessage(
-                      node,
-                      MessageKind.NOT_MORE_SPECIFIC,
-                      {'variableName': variableName,
-                       'shownType': shownType,
-                       'knownType': knownType}));
+                      node, MessageKind.NOT_MORE_SPECIFIC, {
+                    'variableName': variableName,
+                    'shownType': shownType,
+                    'knownType': knownType
+                  }));
                 }
               }
             }
@@ -1278,15 +1248,19 @@
         }
       }
       return boolType;
-    } if (node.isOperator && identical(name, 'as')) {
+    }
+    if (node.isOperator && identical(name, 'as')) {
       analyze(node.receiver);
       return elements.getType(node.arguments.head);
     } else if (node.isOperator) {
       final Node receiver = node.receiver;
       final DartType receiverType = analyze(receiver);
-      if (identical(name, '==') || identical(name, '!=')
+      if (identical(name, '==') ||
+          identical(name, '!=')
           // TODO(johnniwinther): Remove these.
-          || identical(name, '===') || identical(name, '!==')) {
+          ||
+          identical(name, '===') ||
+          identical(name, '!==')) {
         // Analyze argument.
         analyze(node.arguments.head);
         return boolType;
@@ -1321,24 +1295,34 @@
       if (identical(name, '-') && node.arguments.isEmpty) {
         operatorName = 'unary-';
       }
-      assert(invariant(node,
-                       identical(name, '+') || identical(name, '=') ||
-                       identical(name, '-') || identical(name, '*') ||
-                       identical(name, '/') || identical(name, '%') ||
-                       identical(name, '~/') || identical(name, '|') ||
-                       identical(name, '&') || identical(name, '^') ||
-                       identical(name, '~')|| identical(name, '<<') ||
-                       identical(name, '>>') ||
-                       identical(name, '<') || identical(name, '>') ||
-                       identical(name, '<=') || identical(name, '>=') ||
-                       identical(name, '[]'),
-                       message: 'Unexpected operator $name'));
+      assert(invariant(
+          node,
+          identical(name, '+') ||
+              identical(name, '=') ||
+              identical(name, '-') ||
+              identical(name, '*') ||
+              identical(name, '/') ||
+              identical(name, '%') ||
+              identical(name, '~/') ||
+              identical(name, '|') ||
+              identical(name, '&') ||
+              identical(name, '^') ||
+              identical(name, '~') ||
+              identical(name, '<<') ||
+              identical(name, '>>') ||
+              identical(name, '<') ||
+              identical(name, '>') ||
+              identical(name, '<=') ||
+              identical(name, '>=') ||
+              identical(name, '[]'),
+          message: 'Unexpected operator $name'));
 
       // TODO(karlklose): handle `void` in expression context by calling
       // [analyzeNonVoid] instead of [analyze].
-      ElementAccess access = receiverType.isVoid ? const DynamicAccess()
-          : lookupMember(node, receiverType, operatorName,
-                         MemberKind.OPERATOR, null);
+      ElementAccess access = receiverType.isVoid
+          ? const DynamicAccess()
+          : lookupMember(
+              node, receiverType, operatorName, MemberKind.OPERATOR, null);
       LinkBuilder<DartType> argumentTypesBuilder = new LinkBuilder<DartType>();
       DartType resultType =
           analyzeInvocation(node, access, argumentTypesBuilder);
@@ -1387,10 +1371,8 @@
    * of the result. This method also handles increment/decrement expressions
    * like [: target++ :].
    */
-  DartType checkAssignmentOperator(SendSet node,
-                                   String operatorName,
-                                   Node valueNode,
-                                   DartType value) {
+  DartType checkAssignmentOperator(
+      SendSet node, String operatorName, Node valueNode, DartType value) {
     assert(invariant(node, !node.isIndex));
     Element setterElement = elements[node];
     Element getterElement = elements[node.selector];
@@ -1423,18 +1405,15 @@
    * of the result. This method also handles increment/decrement expressions
    * like [: base[key]++ :].
    */
-  DartType checkIndexAssignmentOperator(SendSet node,
-                                        String operatorName,
-                                        Node valueNode,
-                                        DartType value) {
+  DartType checkIndexAssignmentOperator(
+      SendSet node, String operatorName, Node valueNode, DartType value) {
     assert(invariant(node, node.isIndex));
     final DartType base = analyze(node.receiver);
     final Node keyNode = node.arguments.head;
     final DartType key = analyze(keyNode);
 
     // [indexGet] is the type of operator[] on [base].
-    DartType indexGet = lookupMemberType(
-        node, base, '[]', MemberKind.OPERATOR);
+    DartType indexGet = lookupMemberType(node, base, '[]', MemberKind.OPERATOR);
     if (indexGet is FunctionType) {
       FunctionType indexGetType = indexGet;
       DartType indexGetKey = firstType(indexGetType.parameterTypes);
@@ -1444,8 +1423,8 @@
       // [element] is the type of base[key].
       DartType element = indexGetType.returnType;
       // [operator] is the type of operator o on [element].
-      DartType operator = lookupMemberType(
-          node, element, operatorName, MemberKind.OPERATOR);
+      DartType operator =
+          lookupMemberType(node, element, operatorName, MemberKind.OPERATOR);
       if (operator is FunctionType) {
         FunctionType operatorType = operator;
 
@@ -1457,8 +1436,8 @@
         DartType result = operatorType.returnType;
 
         // [indexSet] is the type of operator[]= on [base].
-        DartType indexSet = lookupMemberType(
-            node, base, '[]=', MemberKind.OPERATOR);
+        DartType indexSet =
+            lookupMemberType(node, base, '[]=', MemberKind.OPERATOR);
         if (indexSet is FunctionType) {
           FunctionType indexSetType = indexSet;
           DartType indexSetKey = firstType(indexSetType.parameterTypes);
@@ -1487,14 +1466,14 @@
     if (identical(name, '=') || identical(name, '??=')) {
       // e1 = value
       if (node.isIndex) {
-         // base[key] = value
+        // base[key] = value
         final DartType base = analyze(node.receiver);
         final Node keyNode = node.arguments.head;
         final DartType key = analyze(keyNode);
         final Node valueNode = node.arguments.tail.head;
         final DartType value = analyze(valueNode);
-        DartType indexSet = lookupMemberType(
-            node, base, '[]=', MemberKind.OPERATOR);
+        DartType indexSet =
+            lookupMemberType(node, base, '[]=', MemberKind.OPERATOR);
         DartType indexSetValue = const DynamicType();
         if (indexSet is FunctionType) {
           FunctionType indexSetType = indexSet;
@@ -1503,7 +1482,8 @@
           indexSetValue = secondType(indexSetType.parameterTypes);
           checkAssignable(node.assignmentOperator, value, indexSetValue);
         }
-        return identical(name, '=') ? value
+        return identical(name, '=')
+            ? value
             : types.computeLeastUpperBound(value, indexSetValue);
       } else {
         // target = value
@@ -1512,8 +1492,9 @@
           // Field declaration `Foo target = value;` or initializer
           // `this.target = value`. Lookup the getter `target` in the class
           // members.
-          target = computeAccessType(node, selector.source, element,
-              MemberKind.GETTER, lookupClassMember: true);
+          target = computeAccessType(
+              node, selector.source, element, MemberKind.GETTER,
+              lookupClassMember: true);
         } else {
           // Normal assignment `target = value`.
           target = computeAccessType(
@@ -1522,7 +1503,8 @@
         final Node valueNode = node.arguments.head;
         final DartType value = analyze(valueNode);
         checkAssignable(node.assignmentOperator, value, target);
-        return identical(name, '=') ? value
+        return identical(name, '=')
+            ? value
             : types.computeLeastUpperBound(value, target);
       }
     } else if (identical(name, '++') || identical(name, '--')) {
@@ -1541,17 +1523,39 @@
       // e1 o= e2 for some operator o.
       String operatorName;
       switch (name) {
-        case '+=': operatorName = '+'; break;
-        case '-=': operatorName = '-'; break;
-        case '*=': operatorName = '*'; break;
-        case '/=': operatorName = '/'; break;
-        case '%=': operatorName = '%'; break;
-        case '~/=': operatorName = '~/'; break;
-        case '&=': operatorName = '&'; break;
-        case '|=': operatorName = '|'; break;
-        case '^=': operatorName = '^'; break;
-        case '<<=': operatorName = '<<'; break;
-        case '>>=': operatorName = '>>'; break;
+        case '+=':
+          operatorName = '+';
+          break;
+        case '-=':
+          operatorName = '-';
+          break;
+        case '*=':
+          operatorName = '*';
+          break;
+        case '/=':
+          operatorName = '/';
+          break;
+        case '%=':
+          operatorName = '%';
+          break;
+        case '~/=':
+          operatorName = '~/';
+          break;
+        case '&=':
+          operatorName = '&';
+          break;
+        case '|=':
+          operatorName = '|';
+          break;
+        case '^=':
+          operatorName = '^';
+          break;
+        case '<<=':
+          operatorName = '<<';
+          break;
+        case '>>=':
+          operatorName = '>>';
+          break;
         default:
           reporter.internalError(node, 'Unexpected assignment operator $name.');
       }
@@ -1600,8 +1604,8 @@
     return coreTypes.symbolType;
   }
 
-  DartType computeConstructorType(ConstructorElement constructor,
-                                  DartType type) {
+  DartType computeConstructorType(
+      ConstructorElement constructor, DartType type) {
     if (Elements.isUnresolved(constructor)) return const DynamicType();
     DartType constructorType = constructor.computeType(resolution);
     if (identical(type.kind, TypeKind.INTERFACE)) {
@@ -1613,8 +1617,8 @@
         while (receiverElement.isMixinApplication) {
           receiverElement = receiverElement.supertype.element;
         }
-        constructorType = constructorType.substByContext(
-            interfaceType.asInstanceOf(receiverElement));
+        constructorType = constructorType
+            .substByContext(interfaceType.asInstanceOf(receiverElement));
       } else {
         constructorType = constructorType.substByContext(type);
       }
@@ -1638,8 +1642,8 @@
     InterfaceType listType = elements.getType(node);
     DartType listElementType = firstType(listType.typeArguments);
     for (Link<Node> link = node.elements.nodes;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       Node element = link.head;
       DartType elementType = analyze(element);
       checkAssignable(element, elementType, listElementType,
@@ -1699,8 +1703,8 @@
       // conditions hold:
       // - f is not a generative constructor.
       // - The return type of f may not be assigned to void.
-      reportTypeWarning(node, MessageKind.RETURN_NOTHING,
-                        {'returnType': expectedReturnType});
+      reportTypeWarning(
+          node, MessageKind.RETURN_NOTHING, {'returnType': expectedReturnType});
     }
     return const StatementType();
   }
@@ -1748,8 +1752,9 @@
       reportTypeWarning(node.type, MessageKind.VOID_VARIABLE);
       type = const DynamicType();
     }
-    for (Link<Node> link = node.definitions.nodes; !link.isEmpty;
-         link = link.tail) {
+    for (Link<Node> link = node.definitions.nodes;
+        !link.isEmpty;
+        link = link.tail) {
       Node definition = link.head;
       invariant(definition, definition is Identifier || definition is SendSet,
           message: 'expected identifier or initialization');
@@ -1826,8 +1831,7 @@
     VariableDefinitions declaredIdentifier =
         node.declaredIdentifier.asVariableDefinitions();
     if (declaredIdentifier != null) {
-      return
-          analyzeWithDefault(declaredIdentifier.type, const DynamicType());
+      return analyzeWithDefault(declaredIdentifier.type, const DynamicType());
     } else {
       return analyze(node.declaredIdentifier);
     }
@@ -1838,8 +1842,7 @@
     DartType expressionType = analyze(node.expression);
     DartType streamOfDynamic = coreTypes.streamType();
     if (!types.isAssignable(expressionType, streamOfDynamic)) {
-      reportMessage(node.expression,
-          MessageKind.NOT_ASSIGNABLE,
+      reportMessage(node.expression, MessageKind.NOT_ASSIGNABLE,
           {'fromType': expressionType, 'toType': streamOfDynamic},
           isHint: true);
     } else {
@@ -1851,11 +1854,14 @@
         if (streamType != null) {
           DartType streamElementType = streamType.typeArguments.first;
           if (!types.isAssignable(streamElementType, elementType)) {
-            reportMessage(node.expression,
+            reportMessage(
+                node.expression,
                 MessageKind.FORIN_NOT_ASSIGNABLE,
-                {'currentType': streamElementType,
-                 'expressionType': expressionType,
-                 'elementType': elementType},
+                {
+                  'currentType': streamElementType,
+                  'expressionType': expressionType,
+                  'elementType': elementType
+                },
                 isHint: true);
           }
         }
@@ -1868,17 +1874,20 @@
   visitSyncForIn(SyncForIn node) {
     DartType elementType = computeForInElementType(node);
     DartType expressionType = analyze(node.expression);
-    DartType iteratorType = lookupMemberType(node.expression,
-        expressionType, Identifiers.iterator, MemberKind.GETTER);
-    DartType currentType = lookupMemberType(node.expression,
-              iteratorType, Identifiers.current, MemberKind.GETTER,
-              isHint: true);
+    DartType iteratorType = lookupMemberType(node.expression, expressionType,
+        Identifiers.iterator, MemberKind.GETTER);
+    DartType currentType = lookupMemberType(
+        node.expression, iteratorType, Identifiers.current, MemberKind.GETTER,
+        isHint: true);
     if (!types.isAssignable(currentType, elementType)) {
-      reportMessage(node.expression,
+      reportMessage(
+          node.expression,
           MessageKind.FORIN_NOT_ASSIGNABLE,
-          {'currentType': currentType,
-           'expressionType': expressionType,
-           'elementType': elementType},
+          {
+            'currentType': currentType,
+            'expressionType': expressionType,
+            'elementType': elementType
+          },
           isHint: true);
     }
     analyze(node.body);
@@ -1895,8 +1904,8 @@
     DartType mapValueType = secondType(mapType.typeArguments);
     bool isConst = node.isConst;
     for (Link<Node> link = node.entries.nodes;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       LiteralMapEntry entry = link.head;
       DartType keyType = analyze(entry.key);
       checkAssignable(entry.key, keyType, mapKeyType, isConst: isConst);
@@ -1945,7 +1954,7 @@
             <ConstantValue, FieldElement>{};
         List<FieldElement> unreferencedFields = <FieldElement>[];
         EnumClassElement enumClass = expressionType.element;
-        enumClass.enumValues.forEach((FieldElement field) {
+        enumClass.enumValues.forEach((EnumConstantElement field) {
           ConstantValue constantValue =
               compiler.constants.getConstantValueForVariable(field);
           if (constantValue == null) {
@@ -1960,21 +1969,20 @@
           for (Node labelOrCase in switchCase.labelsAndCases) {
             CaseMatch caseMatch = labelOrCase.asCaseMatch();
             if (caseMatch != null) {
-              ConstantExpression caseConstant =
-                  compiler.resolver.constantCompiler.compileNode(
-                      caseMatch.expression, elements);
-              enumValues.remove(
-                  compiler.constants.getConstantValue(caseConstant));
+              ConstantExpression caseConstant = compiler
+                  .resolver.constantCompiler
+                  .compileNode(caseMatch.expression, elements);
+              enumValues
+                  .remove(compiler.constants.getConstantValue(caseConstant));
             }
           }
         }
         unreferencedFields.addAll(enumValues.values);
         if (!unreferencedFields.isEmpty) {
-          reporter.reportWarningMessage(
-              node, MessageKind.MISSING_ENUM_CASES,
-              {'enumType': expressionType,
-               'enumValues': unreferencedFields.map(
-                   (e) => e.name).join(', ')});
+          reporter.reportWarningMessage(node, MessageKind.MISSING_ENUM_CASES, {
+            'enumType': expressionType,
+            'enumValues': unreferencedFields.map((e) => e.name).join(', ')
+          });
         }
       });
     }
diff --git a/pkg/compiler/lib/src/types/abstract_value_domain.dart b/pkg/compiler/lib/src/types/abstract_value_domain.dart
index 9adc868..e19da52 100644
--- a/pkg/compiler/lib/src/types/abstract_value_domain.dart
+++ b/pkg/compiler/lib/src/types/abstract_value_domain.dart
@@ -9,9 +9,7 @@
 import '../elements/elements.dart';
 import '../universe/selector.dart' show Selector;
 
-enum AbstractBool {
-  True, False, Maybe, Nothing
-}
+enum AbstractBool { True, False, Maybe, Nothing }
 
 /// A value in an abstraction of runtime values.
 abstract class AbstractValue {}
@@ -127,7 +125,7 @@
   bool isDefinitelyMutableIndexable(AbstractValue t, {bool allowNull: false});
 
   bool isDefinitelyFixedLengthIndexable(AbstractValue t,
-                                        {bool allowNull: false});
+      {bool allowNull: false});
 
   bool isDefinitelyIntercepted(AbstractValue t, {bool allowNull});
 
@@ -141,9 +139,8 @@
 
   bool isMorePreciseOrEqual(AbstractValue t1, AbstractValue t2);
 
-  AbstractBool isSubtypeOf(AbstractValue value,
-                           DartType type,
-                           {bool allowNull});
+  AbstractBool isSubtypeOf(AbstractValue value, DartType type,
+      {bool allowNull});
 
   /// Returns whether [value] is one of the falsy values: false, 0, -0, NaN,
   /// the empty string, or null.
@@ -167,6 +164,6 @@
 
   /// Returns the type of the entry of [container] at a given index.
   /// Returns `null` if unknown.
-  AbstractValue indexWithConstant(AbstractValue container,
-                                  ConstantValue indexValue);
+  AbstractValue indexWithConstant(
+      AbstractValue container, ConstantValue indexValue);
 }
diff --git a/pkg/compiler/lib/src/types/constants.dart b/pkg/compiler/lib/src/types/constants.dart
index e7ecab1..a3b2faa 100644
--- a/pkg/compiler/lib/src/types/constants.dart
+++ b/pkg/compiler/lib/src/types/constants.dart
@@ -5,11 +5,9 @@
 library types.constants;
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../constants/values.dart';
-import '../js_backend/js_backend.dart' show
-    SyntheticConstantKind;
+import '../js_backend/js_backend.dart' show SyntheticConstantKind;
 import 'types.dart';
 
 /// Computes the [TypeMask] for the constant [value].
@@ -21,8 +19,8 @@
   const ConstantValueTypeMasks();
 
   @override
-  TypeMask visitConstructed(ConstructedConstantValue constant,
-                            Compiler compiler) {
+  TypeMask visitConstructed(
+      ConstructedConstantValue constant, Compiler compiler) {
     if (compiler.backend.isInterceptorClass(constant.type.element)) {
       return compiler.typesTask.nonNullType;
     }
@@ -61,8 +59,8 @@
         return compiler.typesTask.stringType;
       default:
         DiagnosticReporter reporter = compiler.reporter;
-        reporter.internalError(CURRENT_ELEMENT_SPANNABLE,
-                               "Unexpected DummyConstantKind.");
+        reporter.internalError(
+            CURRENT_ELEMENT_SPANNABLE, "Unexpected DummyConstantKind.");
         return null;
     }
   }
@@ -86,8 +84,8 @@
   }
 
   @override
-  TypeMask visitInterceptor(InterceptorConstantValue constant,
-                            Compiler compiler) {
+  TypeMask visitInterceptor(
+      InterceptorConstantValue constant, Compiler compiler) {
     return compiler.typesTask.nonNullType;
   }
 
diff --git a/pkg/compiler/lib/src/types/container_type_mask.dart b/pkg/compiler/lib/src/types/container_type_mask.dart
index c38a03a..6a6ad80 100644
--- a/pkg/compiler/lib/src/types/container_type_mask.dart
+++ b/pkg/compiler/lib/src/types/container_type_mask.dart
@@ -22,29 +22,20 @@
   // The length of the container.
   final int length;
 
-  ContainerTypeMask(this.forwardTo,
-                    this.allocationNode,
-                    this.allocationElement,
-                    this.elementType,
-                    this.length);
+  ContainerTypeMask(this.forwardTo, this.allocationNode, this.allocationElement,
+      this.elementType, this.length);
 
   TypeMask nullable() {
     return isNullable
         ? this
-        : new ContainerTypeMask(forwardTo.nullable(),
-                                allocationNode,
-                                allocationElement,
-                                elementType,
-                                length);
+        : new ContainerTypeMask(forwardTo.nullable(), allocationNode,
+            allocationElement, elementType, length);
   }
 
   TypeMask nonNullable() {
     return isNullable
-        ? new ContainerTypeMask(forwardTo.nonNullable(),
-                                allocationNode,
-                                allocationElement,
-                                elementType,
-                                length)
+        ? new ContainerTypeMask(forwardTo.nonNullable(), allocationNode,
+            allocationElement, elementType, length)
         : this;
   }
 
@@ -62,9 +53,7 @@
   TypeMask intersection(TypeMask other, ClassWorld classWorld) {
     TypeMask forwardIntersection = forwardTo.intersection(other, classWorld);
     if (forwardIntersection.isEmptyOrNull) return forwardIntersection;
-    return forwardIntersection.isNullable
-        ? nullable()
-        : nonNullable();
+    return forwardIntersection.isNullable ? nullable() : nonNullable();
   }
 
   TypeMask union(other, ClassWorld classWorld) {
@@ -74,9 +63,9 @@
       return other.isNullable ? other : this;
     } else if (other.isEmptyOrNull) {
       return other.isNullable ? this.nullable() : this;
-    } else if (other.isContainer
-               && elementType != null
-               && other.elementType != null) {
+    } else if (other.isContainer &&
+        elementType != null &&
+        other.elementType != null) {
       TypeMask newElementType =
           elementType.union(other.elementType, classWorld);
       int newLength = (length == other.length) ? length : null;
@@ -84,15 +73,17 @@
       return new ContainerTypeMask(
           newForwardTo,
           allocationNode == other.allocationNode ? allocationNode : null,
-          allocationElement == other.allocationElement ? allocationElement
-                                                       : null,
-          newElementType, newLength);
+          allocationElement == other.allocationElement
+              ? allocationElement
+              : null,
+          newElementType,
+          newLength);
     } else {
       return forwardTo.union(other, classWorld);
     }
   }
 
-  bool operator==(other) => super == other;
+  bool operator ==(other) => super == other;
 
   int get hashCode {
     return computeHashCode(
diff --git a/pkg/compiler/lib/src/types/dictionary_type_mask.dart b/pkg/compiler/lib/src/types/dictionary_type_mask.dart
index cba828f..74f9fdd 100644
--- a/pkg/compiler/lib/src/types/dictionary_type_mask.dart
+++ b/pkg/compiler/lib/src/types/dictionary_type_mask.dart
@@ -16,30 +16,21 @@
   // The underlying key/value map of this dictionary.
   final Map<String, TypeMask> typeMap;
 
-  DictionaryTypeMask(forwardTo,
-                     allocationNode,
-                     allocationElement,
-                     keyType, valueType,
-                     this.typeMap) :
-      super(forwardTo, allocationNode, allocationElement, keyType, valueType);
+  DictionaryTypeMask(forwardTo, allocationNode, allocationElement, keyType,
+      valueType, this.typeMap)
+      : super(forwardTo, allocationNode, allocationElement, keyType, valueType);
 
   TypeMask nullable() {
     return isNullable
         ? this
-        : new DictionaryTypeMask(forwardTo.nullable(),
-                                 allocationNode,
-                                 allocationElement,
-                                 keyType, valueType,
-                                 typeMap);
+        : new DictionaryTypeMask(forwardTo.nullable(), allocationNode,
+            allocationElement, keyType, valueType, typeMap);
   }
 
   TypeMask nonNullable() {
     return isNullable
-        ? new DictionaryTypeMask(forwardTo.nonNullable(),
-                                 allocationNode,
-                                 allocationElement,
-                                 keyType, valueType,
-                                 typeMap)
+        ? new DictionaryTypeMask(forwardTo.nonNullable(), allocationNode,
+            allocationElement, keyType, valueType, typeMap)
         : this;
   }
 
@@ -49,20 +40,17 @@
   bool equalsDisregardNull(other) {
     if (other is! DictionaryTypeMask) return false;
     return allocationNode == other.allocationNode &&
-           keyType == other.keyType &&
-           valueType == other.valueType &&
-           typeMap.keys.every((k) => other.typeMap.containsKey(k)) &&
-           other.typeMap.keys.every((k) => typeMap.containsKey(k) &&
-                                           typeMap[k] == other.typeMap[k]);
-
+        keyType == other.keyType &&
+        valueType == other.valueType &&
+        typeMap.keys.every((k) => other.typeMap.containsKey(k)) &&
+        other.typeMap.keys.every(
+            (k) => typeMap.containsKey(k) && typeMap[k] == other.typeMap[k]);
   }
 
   TypeMask intersection(TypeMask other, ClassWorld classWorld) {
     TypeMask forwardIntersection = forwardTo.intersection(other, classWorld);
     if (forwardIntersection.isEmptyOrNull) return forwardIntersection;
-    return forwardIntersection.isNullable
-        ? nullable()
-        : nonNullable();
+    return forwardIntersection.isNullable ? nullable() : nonNullable();
   }
 
   TypeMask union(other, ClassWorld classWorld) {
@@ -77,42 +65,40 @@
       TypeMask newKeyType = keyType.union(other.keyType, classWorld);
       TypeMask newValueType = valueType.union(other.valueType, classWorld);
       Map<String, TypeMask> mappings = <String, TypeMask>{};
-      typeMap.forEach((k,v) {
-              if (!other.typeMap.containsKey(k)) {
-                mappings[k] = v.nullable();
-              }
-            });
-      other.typeMap.forEach((k,v) {
+      typeMap.forEach((k, v) {
+        if (!other.typeMap.containsKey(k)) {
+          mappings[k] = v.nullable();
+        }
+      });
+      other.typeMap.forEach((k, v) {
         if (typeMap.containsKey(k)) {
           mappings[k] = v.union(typeMap[k], classWorld);
         } else {
           mappings[k] = v.nullable();
         }
       });
-      return new DictionaryTypeMask(newForwardTo, null, null,
-                                    newKeyType, newValueType, mappings);
+      return new DictionaryTypeMask(
+          newForwardTo, null, null, newKeyType, newValueType, mappings);
     } else if (other.isMap &&
-               (other.keyType != null) &&
-               (other.valueType != null)) {
+        (other.keyType != null) &&
+        (other.valueType != null)) {
       TypeMask newForwardTo = forwardTo.union(other.forwardTo, classWorld);
       TypeMask newKeyType = keyType.union(other.keyType, classWorld);
       TypeMask newValueType = valueType.union(other.valueType, classWorld);
-      return new MapTypeMask(newForwardTo, null, null,
-                             newKeyType, newValueType);
+      return new MapTypeMask(
+          newForwardTo, null, null, newKeyType, newValueType);
     } else {
       return forwardTo.union(other, classWorld);
     }
   }
 
-  bool operator==(other) => super == other;
+  bool operator ==(other) => super == other;
 
   int get hashCode {
-    return computeHashCode(
-        allocationNode, isNullable, typeMap, forwardTo);
+    return computeHashCode(allocationNode, isNullable, typeMap, forwardTo);
   }
 
   String toString() {
-    return
-        'Dictionary mask: [$keyType/$valueType with $typeMap] type: $forwardTo';
+    return 'Dictionary mask: [$keyType/$valueType with $typeMap] type: $forwardTo';
   }
 }
diff --git a/pkg/compiler/lib/src/types/flat_type_mask.dart b/pkg/compiler/lib/src/types/flat_type_mask.dart
index 5939147..0ad5cd7 100644
--- a/pkg/compiler/lib/src/types/flat_type_mask.dart
+++ b/pkg/compiler/lib/src/types/flat_type_mask.dart
@@ -9,10 +9,10 @@
  * base type.
  */
 class FlatTypeMask implements TypeMask {
-  static const int EMPTY    = 0;
-  static const int EXACT    = 1;
+  static const int EMPTY = 0;
+  static const int EXACT = 1;
   static const int SUBCLASS = 2;
-  static const int SUBTYPE  = 3;
+  static const int SUBTYPE = 3;
 
   final ClassElement base;
   final int flags;
@@ -20,15 +20,18 @@
   FlatTypeMask(ClassElement base, int kind, bool isNullable)
       : this.internal(base, (kind << 1) | (isNullable ? 1 : 0));
 
-  FlatTypeMask.exact(ClassElement base)
-      : this.internal(base, (EXACT << 1) | 1);
+  FlatTypeMask.exact(ClassElement base) : this.internal(base, (EXACT << 1) | 1);
   FlatTypeMask.subclass(ClassElement base)
       : this.internal(base, (SUBCLASS << 1) | 1);
   FlatTypeMask.subtype(ClassElement base)
       : this.internal(base, (SUBTYPE << 1) | 1);
 
-  const FlatTypeMask.nonNullEmpty(): base = null, flags = 0;
-  const FlatTypeMask.empty() : base = null, flags = 1;
+  const FlatTypeMask.nonNullEmpty()
+      : base = null,
+        flags = 0;
+  const FlatTypeMask.empty()
+      : base = null,
+        flags = 1;
 
   FlatTypeMask.nonNullExact(ClassElement base)
       : this.internal(base, EXACT << 1);
@@ -60,11 +63,11 @@
     Map<ClassElement, TypeMask> cachedMasks =
         world.canonicalizedTypeMasks[flags];
     if (cachedMasks == null) {
-      world.canonicalizedTypeMasks[flags] = cachedMasks =
-          <ClassElement, TypeMask>{};
+      world.canonicalizedTypeMasks[flags] =
+          cachedMasks = <ClassElement, TypeMask>{};
     }
-    return cachedMasks.putIfAbsent(base,
-        () => new FlatTypeMask.internal(base, flags));
+    return cachedMasks.putIfAbsent(
+        base, () => new FlatTypeMask.internal(base, flags));
   }
 
   bool get isEmpty => isEmptyOrNull && !isNullable;
@@ -119,21 +122,21 @@
     Backend backend = classWorld.backend;
     if (containsOnlyString(classWorld)) {
       return cls == classWorld.stringClass ||
-             cls == backend.stringImplementation;
+          cls == backend.stringImplementation;
     }
     if (containsOnlyBool(classWorld)) {
       return cls == classWorld.boolClass || cls == backend.boolImplementation;
     }
     if (containsOnlyInt(classWorld)) {
-      return cls == classWorld.intClass
-          || cls == backend.intImplementation
-          || cls == backend.positiveIntImplementation
-          || cls == backend.uint32Implementation
-          || cls == backend.uint31Implementation;
+      return cls == classWorld.intClass ||
+          cls == backend.intImplementation ||
+          cls == backend.positiveIntImplementation ||
+          cls == backend.uint32Implementation ||
+          cls == backend.uint31Implementation;
     }
     if (containsOnlyDouble(classWorld)) {
-      return cls == classWorld.doubleClass
-          || cls == backend.doubleImplementation;
+      return cls == classWorld.doubleClass ||
+          cls == backend.doubleImplementation;
     }
     return false;
   }
@@ -153,8 +156,8 @@
     // If other is exact, it only contains its base.
     // TODO(herhut): Get rid of isSingleImplementationOf.
     if (flatOther.isExact) {
-      return (isExact && base == otherBase)
-          || isSingleImplementationOf(otherBase, classWorld);
+      return (isExact && base == otherBase) ||
+          isSingleImplementationOf(otherBase, classWorld);
     }
     // If other is subclass, this has to be subclass, as well. Unless
     // flatOther.base covers all subtypes of this. Currently, we only
@@ -176,37 +179,36 @@
 
   bool containsOnlyInt(ClassWorld classWorld) {
     Backend backend = classWorld.backend;
-    return base == classWorld.intClass
-        || base == backend.intImplementation
-        || base == backend.positiveIntImplementation
-        || base == backend.uint31Implementation
-        || base == backend.uint32Implementation;
+    return base == classWorld.intClass ||
+        base == backend.intImplementation ||
+        base == backend.positiveIntImplementation ||
+        base == backend.uint31Implementation ||
+        base == backend.uint32Implementation;
   }
 
   bool containsOnlyDouble(ClassWorld classWorld) {
     Backend backend = classWorld.backend;
-    return base == classWorld.doubleClass
-        || base == backend.doubleImplementation;
+    return base == classWorld.doubleClass ||
+        base == backend.doubleImplementation;
   }
 
   bool containsOnlyNum(ClassWorld classWorld) {
     Backend backend = classWorld.backend;
-    return containsOnlyInt(classWorld)
-        || containsOnlyDouble(classWorld)
-        || base == classWorld.numClass
-        || base == backend.numImplementation;
+    return containsOnlyInt(classWorld) ||
+        containsOnlyDouble(classWorld) ||
+        base == classWorld.numClass ||
+        base == backend.numImplementation;
   }
 
   bool containsOnlyBool(ClassWorld classWorld) {
     Backend backend = classWorld.backend;
-    return base == classWorld.boolClass
-        || base == backend.boolImplementation;
+    return base == classWorld.boolClass || base == backend.boolImplementation;
   }
 
   bool containsOnlyString(ClassWorld classWorld) {
     Backend backend = classWorld.backend;
-    return base == classWorld.stringClass
-        || base == backend.stringImplementation;
+    return base == classWorld.stringClass ||
+        base == backend.stringImplementation;
   }
 
   bool containsOnly(ClassElement cls) {
@@ -227,7 +229,7 @@
    */
   ClassElement singleClass(ClassWorld classWorld) {
     if (isEmptyOrNull) return null;
-    if (isNullable) return null;  // It is Null and some other class.
+    if (isNullable) return null; // It is Null and some other class.
     if (isExact) {
       return base;
     } else if (isSubclass) {
@@ -392,8 +394,8 @@
     assert(a.isSubclass || a.isSubtype);
     assert(b.isSubtype);
     var elements = a.isSubclass
-      ? classWorld.strictSubclassesOf(a.base)
-      : classWorld.strictSubtypesOf(a.base);
+        ? classWorld.strictSubclassesOf(a.base)
+        : classWorld.strictSubtypesOf(a.base);
     for (var element in elements) {
       if (classWorld.isSubtypeOf(element, b.base)) return false;
     }
@@ -418,8 +420,8 @@
     }
   }
 
-  TypeMask intersectionStrictSubclass(FlatTypeMask other,
-                                      ClassWorld classWorld) {
+  TypeMask intersectionStrictSubclass(
+      FlatTypeMask other, ClassWorld classWorld) {
     assert(base != other.base);
     assert(classWorld.isSubclassOf(other.base, base));
     // If this mask isn't at least a subclass mask, then the
@@ -438,8 +440,8 @@
     }
   }
 
-  TypeMask intersectionStrictSubtype(FlatTypeMask other,
-                                     ClassWorld classWorld) {
+  TypeMask intersectionStrictSubtype(
+      FlatTypeMask other, ClassWorld classWorld) {
     assert(base != other.base);
     assert(classWorld.isSubtypeOf(other.base, base));
     if (!isSubtype) return intersectionHelper(other, classWorld);
@@ -505,7 +507,8 @@
   }
 
   TypeMask intersectionEmpty(FlatTypeMask other) {
-    return isNullable && other.isNullable ? new TypeMask.empty()
+    return isNullable && other.isNullable
+        ? new TypeMask.empty()
         : new TypeMask.nonNullEmpty();
   }
 
@@ -514,9 +517,8 @@
    * invoked on an instance of [cls]. [selector] is used to ensure library
    * privacy is taken into account.
    */
-  static bool hasElementIn(ClassElement cls,
-                           Selector selector,
-                           Element element) {
+  static bool hasElementIn(
+      ClassElement cls, Selector selector, Element element) {
     // Use [:implementation:] of [element]
     // because our function set only stores declarations.
     Element result = findMatchIn(cls, selector);
@@ -525,8 +527,7 @@
         : result.implementation == element.implementation;
   }
 
-  static Element findMatchIn(ClassElement cls,
-                             Selector selector) {
+  static Element findMatchIn(ClassElement cls, Selector selector) {
     // Use the [:implementation] of [cls] in case the found [element]
     // is in the patch class.
     return cls.implementation.lookupByName(selector.memberName);
@@ -561,24 +562,24 @@
       return hasElementIn(self, selector, element);
     } else if (isSubclass) {
       assert(classWorld.isClosed);
-      return hasElementIn(self, selector, element)
-          || other.isSubclassOf(self)
-          || classWorld.hasAnySubclassThatMixes(self, other);
+      return hasElementIn(self, selector, element) ||
+          other.isSubclassOf(self) ||
+          classWorld.hasAnySubclassThatMixes(self, other);
     } else {
       assert(isSubtype);
       assert(classWorld.isClosed);
-      bool result = hasElementIn(self, selector, element)
-          || other.implementsInterface(self)
-          || classWorld.hasAnySubclassThatImplements(other, base)
-          || classWorld.hasAnySubclassOfMixinUseThatImplements(other, base);
+      bool result = hasElementIn(self, selector, element) ||
+          other.implementsInterface(self) ||
+          classWorld.hasAnySubclassThatImplements(other, base) ||
+          classWorld.hasAnySubclassOfMixinUseThatImplements(other, base);
       if (result) return true;
       // If the class is used as a mixin, we have to check if the element
       // can be hit from any of the mixin applications.
       Iterable<ClassElement> mixinUses = classWorld.mixinUsesOf(self);
       return mixinUses.any((mixinApplication) =>
-           hasElementIn(mixinApplication, selector, element)
-        || other.isSubclassOf(mixinApplication)
-        || classWorld.hasAnySubclassThatMixes(mixinApplication, other));
+          hasElementIn(mixinApplication, selector, element) ||
+          other.isSubclassOf(mixinApplication) ||
+          classWorld.hasAnySubclassThatMixes(mixinApplication, other));
     }
   }
 
@@ -586,9 +587,8 @@
    * Returns whether a [selector] call on an instance of [cls]
    * will hit a method at runtime, and not go through [noSuchMethod].
    */
-  static bool hasConcreteMatch(ClassElement cls,
-                               Selector selector,
-                               ClassWorld world) {
+  static bool hasConcreteMatch(
+      ClassElement cls, Selector selector, ClassWorld world) {
     assert(invariant(cls, world.isInstantiated(cls),
         message: '$cls has not been instantiated.'));
     Element element = findMatchIn(cls, selector);
@@ -661,8 +661,7 @@
       // instance of them will be created at runtime, and
       // therefore there is no instance that will require
       // [noSuchMethod] handling.
-      return !cls.isAbstract
-          && !hasConcreteMatch(cls, selector, classWorld);
+      return !cls.isAbstract && !hasConcreteMatch(cls, selector, classWorld);
     }
 
     bool baseNeedsNoSuchMethod = needsNoSuchMethod(base);
@@ -679,12 +678,11 @@
     }
 
     return subclassesToCheck != null &&
-           subclassesToCheck.any(needsNoSuchMethod);
+        subclassesToCheck.any(needsNoSuchMethod);
   }
 
-  Element locateSingleElement(Selector selector,
-                              TypeMask mask,
-                              Compiler compiler) {
+  Element locateSingleElement(
+      Selector selector, TypeMask mask, Compiler compiler) {
     if (isEmptyOrNull) return null;
     Iterable<Element> targets =
         compiler.world.allFunctions.filter(selector, mask);
@@ -700,7 +698,7 @@
 
   bool operator ==(var other) {
     if (identical(this, other)) return true;
-    if (other is !FlatTypeMask) return false;
+    if (other is! FlatTypeMask) return false;
     FlatTypeMask otherMask = other;
     return (flags == otherMask.flags) && (base == otherMask.base);
   }
@@ -720,9 +718,8 @@
     return "[$buffer]";
   }
 
-  static Set<ClassElement> commonContainedClasses(FlatTypeMask x,
-                                                  FlatTypeMask y,
-                                                  ClassWorld classWorld) {
+  static Set<ClassElement> commonContainedClasses(
+      FlatTypeMask x, FlatTypeMask y, ClassWorld classWorld) {
     Iterable<ClassElement> xSubset = containedSubset(x, classWorld);
     if (xSubset == null) return null;
     Iterable<ClassElement> ySubset = containedSubset(y, classWorld);
@@ -730,8 +727,8 @@
     return xSubset.toSet().intersection(ySubset.toSet());
   }
 
-  static Iterable<ClassElement> containedSubset(FlatTypeMask x,
-                                                ClassWorld classWorld) {
+  static Iterable<ClassElement> containedSubset(
+      FlatTypeMask x, ClassWorld classWorld) {
     ClassElement element = x.base;
     if (x.isExact) {
       return null;
diff --git a/pkg/compiler/lib/src/types/forwarding_type_mask.dart b/pkg/compiler/lib/src/types/forwarding_type_mask.dart
index 6212bb8..0e30bac 100644
--- a/pkg/compiler/lib/src/types/forwarding_type_mask.dart
+++ b/pkg/compiler/lib/src/types/forwarding_type_mask.dart
@@ -9,7 +9,6 @@
  * implementation methods to it.
  */
 abstract class ForwardingTypeMask implements TypeMask {
-
   TypeMask get forwardTo;
 
   ForwardingTypeMask();
@@ -102,9 +101,8 @@
     return forwardTo.canHit(element, selector, classWorld);
   }
 
-  Element locateSingleElement(Selector selector,
-                              TypeMask mask,
-                              Compiler compiler) {
+  Element locateSingleElement(
+      Selector selector, TypeMask mask, Compiler compiler) {
     return forwardTo.locateSingleElement(selector, mask, compiler);
   }
 
@@ -117,7 +115,7 @@
     }
   }
 
-  bool operator==(other) {
+  bool operator ==(other) {
     return equalsDisregardNull(other) && isNullable == other.isNullable;
   }
 
diff --git a/pkg/compiler/lib/src/types/map_type_mask.dart b/pkg/compiler/lib/src/types/map_type_mask.dart
index 52fe4a2..b3fbc96 100644
--- a/pkg/compiler/lib/src/types/map_type_mask.dart
+++ b/pkg/compiler/lib/src/types/map_type_mask.dart
@@ -24,29 +24,20 @@
   // The key type of this map.
   final TypeMask keyType;
 
-  MapTypeMask(this.forwardTo,
-              this.allocationNode,
-              this.allocationElement,
-              this.keyType,
-              this.valueType);
+  MapTypeMask(this.forwardTo, this.allocationNode, this.allocationElement,
+      this.keyType, this.valueType);
 
   TypeMask nullable() {
     return isNullable
         ? this
-        : new MapTypeMask(forwardTo.nullable(),
-                          allocationNode,
-                          allocationElement,
-                          keyType,
-                          valueType);
+        : new MapTypeMask(forwardTo.nullable(), allocationNode,
+            allocationElement, keyType, valueType);
   }
 
   TypeMask nonNullable() {
     return isNullable
-        ? new MapTypeMask(forwardTo.nonNullable(),
-                          allocationNode,
-                          allocationElement,
-                          keyType,
-                          valueType)
+        ? new MapTypeMask(forwardTo.nonNullable(), allocationNode,
+            allocationElement, keyType, valueType)
         : this;
   }
 
@@ -65,9 +56,7 @@
   TypeMask intersection(TypeMask other, ClassWorld classWorld) {
     TypeMask forwardIntersection = forwardTo.intersection(other, classWorld);
     if (forwardIntersection.isEmptyOrNull) return forwardIntersection;
-    return forwardIntersection.isNullable
-        ? nullable()
-        : nonNullable();
+    return forwardIntersection.isNullable ? nullable() : nonNullable();
   }
 
   TypeMask union(other, ClassWorld classWorld) {
@@ -78,14 +67,12 @@
     } else if (other.isEmptyOrNull) {
       return other.isNullable ? this.nullable() : this;
     } else if (other.isMap &&
-               keyType != null &&
-               other.keyType != null &&
-               valueType != null &&
-               other.valueType != null) {
-      TypeMask newKeyType =
-          keyType.union(other.keyType, classWorld);
-      TypeMask newValueType =
-          valueType.union(other.valueType, classWorld);
+        keyType != null &&
+        other.keyType != null &&
+        valueType != null &&
+        other.valueType != null) {
+      TypeMask newKeyType = keyType.union(other.keyType, classWorld);
+      TypeMask newValueType = valueType.union(other.valueType, classWorld);
       TypeMask newForwardTo = forwardTo.union(other.forwardTo, classWorld);
       return new MapTypeMask(
           newForwardTo, null, null, newKeyType, newValueType);
@@ -93,21 +80,23 @@
       assert(other.keyType == classWorld.compiler.typesTask.stringType);
       TypeMask newKeyType = keyType.union(other.keyType, classWorld);
       TypeMask newValueType =
-          other.typeMap.values.fold(keyType, (p,n) => p.union(n, classWorld));
+          other.typeMap.values.fold(keyType, (p, n) => p.union(n, classWorld));
       TypeMask newForwardTo = forwardTo.union(other.forwardTo, classWorld);
       MapTypeMask newMapTypeMask = new MapTypeMask(
           newForwardTo,
           allocationNode == other.allocationNode ? allocationNode : null,
-          allocationElement == other.allocationElement ? allocationElement
-                                                       : null,
-          newKeyType, newValueType);
+          allocationElement == other.allocationElement
+              ? allocationElement
+              : null,
+          newKeyType,
+          newValueType);
       return newMapTypeMask;
     } else {
       return forwardTo.union(other, classWorld);
     }
   }
 
-  bool operator==(other) => super == other;
+  bool operator ==(other) => super == other;
 
   int get hashCode {
     return computeHashCode(
diff --git a/pkg/compiler/lib/src/types/type_mask.dart b/pkg/compiler/lib/src/types/type_mask.dart
index 2129fa9..d444afe 100644
--- a/pkg/compiler/lib/src/types/type_mask.dart
+++ b/pkg/compiler/lib/src/types/type_mask.dart
@@ -24,8 +24,7 @@
   @override
   bool needsNoSuchMethodHandling(Selector selector, ClassWorld world) {
     if (isAll) {
-      TypeMask mask =
-          new TypeMask.subclass(world.objectClass, world);
+      TypeMask mask = new TypeMask.subclass(world.objectClass, world);
       return mask.needsNoSuchMethodHandling(selector, world);
     }
     for (TypeMask mask in _masks) {
@@ -76,10 +75,8 @@
  * yield conservative answers that contain too many classes.
  */
 abstract class TypeMask implements ReceiverConstraint, AbstractValue {
-  factory TypeMask(ClassElement base,
-                   int kind,
-                   bool isNullable,
-                   ClassWorld classWorld) {
+  factory TypeMask(
+      ClassElement base, int kind, bool isNullable, ClassWorld classWorld) {
     return new FlatTypeMask.normalized(
         base, (kind << 1) | (isNullable ? 1 : 0), classWorld);
   }
@@ -89,7 +86,7 @@
   factory TypeMask.exact(ClassElement base, ClassWorld classWorld) {
     assert(invariant(base, classWorld.isInstantiated(base),
         message: () => "Cannot create exact type mask for uninstantiated "
-                       "class $base.\n${classWorld.dump(base)}"));
+            "class $base.\n${classWorld.dump(base)}"));
     return new FlatTypeMask.exact(base);
   }
 
@@ -101,7 +98,7 @@
   factory TypeMask.subclass(ClassElement base, ClassWorld classWorld) {
     assert(invariant(base, classWorld.isInstantiated(base),
         message: () => "Cannot create subclass type mask for uninstantiated "
-                       "class $base.\n${classWorld.dump(base)}"));
+            "class $base.\n${classWorld.dump(base)}"));
     ClassElement topmost = classWorld.getLubOfInstantiatedSubclasses(base);
     if (topmost == null) {
       return new TypeMask.empty();
@@ -132,12 +129,12 @@
   factory TypeMask.nonNullExact(ClassElement base, ClassWorld classWorld) {
     assert(invariant(base, classWorld.isInstantiated(base),
         message: () => "Cannot create exact type mask for uninstantiated "
-                       "class $base.\n${classWorld.dump(base)}"));
+            "class $base.\n${classWorld.dump(base)}"));
     return new FlatTypeMask.nonNullExact(base);
   }
 
-  factory TypeMask.nonNullExactOrEmpty(ClassElement base,
-      ClassWorld classWorld) {
+  factory TypeMask.nonNullExactOrEmpty(
+      ClassElement base, ClassWorld classWorld) {
     if (classWorld.isInstantiated(base)) {
       return new FlatTypeMask.nonNullExact(base);
     }
@@ -147,7 +144,7 @@
   factory TypeMask.nonNullSubclass(ClassElement base, ClassWorld classWorld) {
     assert(invariant(base, classWorld.isInstantiated(base),
         message: () => "Cannot create subclass type mask for uninstantiated "
-                       "class $base.\n${classWorld.dump(base)}"));
+            "class $base.\n${classWorld.dump(base)}"));
     ClassElement topmost = classWorld.getLubOfInstantiatedSubclasses(base);
     if (topmost == null) {
       return new TypeMask.nonNullEmpty();
@@ -297,7 +294,7 @@
    * Note: This may differ from semantic equality in the set containment sense.
    *   Use [containsMask] and [isInMask] for that, instead.
    */
-  bool operator==(other);
+  bool operator ==(other);
 
   /**
    * If this returns `true`, [other] is guaranteed to be a supertype of this
@@ -341,7 +338,6 @@
    */
   TypeMask union(TypeMask other, ClassWorld classWorld);
 
-
   /// Returns whether the intersection of this and [other] is empty.
   bool isDisjoint(TypeMask other, ClassWorld classWorld);
 
@@ -363,7 +359,5 @@
    */
   // TODO(johnniwinther): Move this method to [World].
   Element locateSingleElement(
-      Selector selector,
-      TypeMask mask,
-      Compiler compiler);
+      Selector selector, TypeMask mask, Compiler compiler);
 }
diff --git a/pkg/compiler/lib/src/types/types.dart b/pkg/compiler/lib/src/types/types.dart
index 665d144..fcaf762 100644
--- a/pkg/compiler/lib/src/types/types.dart
+++ b/pkg/compiler/lib/src/types/types.dart
@@ -5,31 +5,23 @@
 library types;
 
 import '../common.dart';
-import '../common/backend_api.dart' show
-    Backend;
-import '../common/tasks.dart' show
-    CompilerTask;
-import '../compiler.dart' show
-    Compiler;
-import '../constants/values.dart' show
-    PrimitiveConstantValue;
+import '../common/backend_api.dart' show Backend;
+import '../common/tasks.dart' show CompilerTask;
+import '../compiler.dart' show Compiler;
+import '../constants/values.dart' show PrimitiveConstantValue;
 import '../elements/elements.dart';
-import '../inferrer/type_graph_inferrer.dart' show
-    TypeGraphInferrer;
+import '../inferrer/type_graph_inferrer.dart' show TypeGraphInferrer;
 import '../tree/tree.dart';
 import '../util/util.dart';
-import '../universe/selector.dart' show
-    Selector;
-import '../universe/universe.dart' show
-    ReceiverConstraint,
-    UniverseSelectorConstraints,
-    SelectorConstraintsStrategy;
-import '../world.dart' show
-    ClassWorld,
-    World;
+import '../universe/selector.dart' show Selector;
+import '../universe/universe.dart'
+    show
+        ReceiverConstraint,
+        UniverseSelectorConstraints,
+        SelectorConstraintsStrategy;
+import '../world.dart' show ClassWorld, World;
 
-import 'abstract_value_domain.dart' show
-    AbstractValue;
+import 'abstract_value_domain.dart' show AbstractValue;
 
 part 'container_type_mask.dart';
 part 'dictionary_type_mask.dart';
@@ -284,12 +276,11 @@
   bool better(TypeMask type1, TypeMask type2) {
     if (type1 == null) return false;
     if (type2 == null) {
-      return (type1 != null) &&
-             (type1 != dynamicType);
+      return (type1 != null) && (type1 != dynamicType);
     }
     return (type1 != type2) &&
-           type2.containsMask(type1, classWorld) &&
-           !type1.containsMask(type2, classWorld);
+        type2.containsMask(type1, classWorld) &&
+        !type1.containsMask(type2, classWorld);
   }
 
   /**
@@ -320,8 +311,7 @@
       return dynamicType;
     }
 
-    TypeMask guaranteedType =
-        typesInferrer.getReturnTypeOfElement(element);
+    TypeMask guaranteedType = typesInferrer.getReturnTypeOfElement(element);
     return guaranteedType;
   }
 
@@ -338,8 +328,7 @@
    * Return the (inferred) guaranteed type of [selector] or null.
    */
   TypeMask getGuaranteedTypeOfSelector(Selector selector, TypeMask mask) {
-    TypeMask guaranteedType =
-        typesInferrer.getTypeOfSelector(selector, mask);
+    TypeMask guaranteedType = typesInferrer.getTypeOfSelector(selector, mask);
     return guaranteedType;
   }
 }
diff --git a/pkg/compiler/lib/src/types/union_type_mask.dart b/pkg/compiler/lib/src/types/union_type_mask.dart
index 9cd5bcb..f05880a 100644
--- a/pkg/compiler/lib/src/types/union_type_mask.dart
+++ b/pkg/compiler/lib/src/types/union_type_mask.dart
@@ -20,7 +20,8 @@
   }
 
   static TypeMask unionOf(Iterable<TypeMask> masks, ClassWorld classWorld) {
-    assert(masks.every((mask) => TypeMask.assertIsNormalized(mask, classWorld)));
+    assert(
+        masks.every((mask) => TypeMask.assertIsNormalized(mask, classWorld)));
     List<FlatTypeMask> disjoint = <FlatTypeMask>[];
     unionOfHelper(masks, disjoint, classWorld);
     if (disjoint.isEmpty) return new TypeMask.nonNullEmpty();
@@ -34,8 +35,7 @@
   }
 
   static void unionOfHelper(Iterable<TypeMask> masks,
-                            List<FlatTypeMask> disjoint,
-                            ClassWorld classWorld) {
+      List<FlatTypeMask> disjoint, ClassWorld classWorld) {
     // TODO(johnniwinther): Impose an order on the mask to ensure subclass masks
     // are preferred to subtype masks.
     for (TypeMask mask in masks) {
@@ -103,7 +103,8 @@
     int bestKind;
     int bestSize;
     for (ClassElement candidate in candidates) {
-      bool isInstantiatedStrictSubclass(cls) => cls != candidate &&
+      bool isInstantiatedStrictSubclass(cls) =>
+          cls != candidate &&
           classWorld.isDirectlyInstantiated(cls) &&
           classWorld.isSubclassOf(cls, candidate);
 
@@ -138,8 +139,7 @@
     other = TypeMask.nonForwardingMask(other);
     if (!other.isUnion && disjointMasks.contains(other)) return this;
 
-    List<FlatTypeMask> newList =
-        new List<FlatTypeMask>.from(disjointMasks);
+    List<FlatTypeMask> newList = new List<FlatTypeMask>.from(disjointMasks);
     if (!other.isUnion) {
       newList.add(other);
     } else {
@@ -322,17 +322,16 @@
   ClassElement singleClass(ClassWorld classWorld) => null;
 
   bool needsNoSuchMethodHandling(Selector selector, ClassWorld classWorld) {
-    return disjointMasks.any(
-        (e) => e.needsNoSuchMethodHandling(selector, classWorld));
+    return disjointMasks
+        .any((e) => e.needsNoSuchMethodHandling(selector, classWorld));
   }
 
   bool canHit(Element element, Selector selector, ClassWorld classWorld) {
     return disjointMasks.any((e) => e.canHit(element, selector, classWorld));
   }
 
-  Element locateSingleElement(Selector selector,
-                              TypeMask mask,
-                              Compiler compiler) {
+  Element locateSingleElement(
+      Selector selector, TypeMask mask, Compiler compiler) {
     Element candidate;
     for (FlatTypeMask mask in disjointMasks) {
       Element current = mask.locateSingleElement(selector, mask, compiler);
@@ -348,12 +347,13 @@
   }
 
   String toString() {
-    String masksString = (disjointMasks.map((TypeMask mask) => mask.toString())
-        .toList()..sort()).join(", ");
+    String masksString =
+        (disjointMasks.map((TypeMask mask) => mask.toString()).toList()..sort())
+            .join(", ");
     return 'Union of [$masksString]';
   }
 
-  bool operator==(other) {
+  bool operator ==(other) {
     if (identical(this, other)) return true;
 
     bool containsAll() {
@@ -363,10 +363,10 @@
       });
     }
 
-    return other is UnionTypeMask
-        && other.isNullable == isNullable
-        && other.disjointMasks.length == disjointMasks.length
-        && containsAll();
+    return other is UnionTypeMask &&
+        other.isNullable == isNullable &&
+        other.disjointMasks.length == disjointMasks.length &&
+        containsAll();
   }
 
   int get hashCode {
diff --git a/pkg/compiler/lib/src/types/value_type_mask.dart b/pkg/compiler/lib/src/types/value_type_mask.dart
index ffe1e3b..ba40f24 100644
--- a/pkg/compiler/lib/src/types/value_type_mask.dart
+++ b/pkg/compiler/lib/src/types/value_type_mask.dart
@@ -11,9 +11,7 @@
   ValueTypeMask(this.forwardTo, this.value);
 
   TypeMask nullable() {
-    return isNullable
-        ? this
-        : new ValueTypeMask(forwardTo.nullable(), value);
+    return isNullable ? this : new ValueTypeMask(forwardTo.nullable(), value);
   }
 
   TypeMask nonNullable() {
@@ -32,12 +30,10 @@
   TypeMask intersection(TypeMask other, ClassWorld classWorld) {
     TypeMask forwardIntersection = forwardTo.intersection(other, classWorld);
     if (forwardIntersection.isEmptyOrNull) return forwardIntersection;
-    return forwardIntersection.isNullable
-        ? nullable()
-        : nonNullable();
+    return forwardIntersection.isNullable ? nullable() : nonNullable();
   }
 
-  bool operator==(other) => super == other;
+  bool operator ==(other) => super == other;
 
   int get hashCode {
     return computeHashCode(value, isNullable, forwardTo);
diff --git a/pkg/compiler/lib/src/universe/call_structure.dart b/pkg/compiler/lib/src/universe/call_structure.dart
index 727390a..fb9c908 100644
--- a/pkg/compiler/lib/src/universe/call_structure.dart
+++ b/pkg/compiler/lib/src/universe/call_structure.dart
@@ -5,16 +5,12 @@
 library dart2js.call_structure;
 
 import '../common.dart';
-import '../common/names.dart' show
-    Identifiers,
-    Names,
-    Selectors;
+import '../common/names.dart' show Identifiers, Names, Selectors;
 import '../elements/elements.dart';
 import '../tree/tree.dart';
 import '../util/util.dart';
 
-import 'selector.dart' show
-    Selector;
+import 'selector.dart' show Selector;
 
 /// The structure of the arguments at a call-site.
 // TODO(johnniwinther): Should these be cached?
@@ -64,9 +60,9 @@
 
   bool match(CallStructure other) {
     if (identical(this, other)) return true;
-    return this.argumentCount == other.argumentCount
-        && this.namedArgumentCount == other.namedArgumentCount
-        && sameNames(this.namedArguments, other.namedArguments);
+    return this.argumentCount == other.argumentCount &&
+        this.namedArgumentCount == other.namedArgumentCount &&
+        sameNames(this.namedArguments, other.namedArguments);
   }
 
   // TODO(johnniwinther): Cache hash code?
@@ -180,7 +176,7 @@
    * Returns [:true:] if the signature of the [caller] matches the
    * signature of the [callee], [:false:] otherwise.
    */
-  static /*<T>*/ bool addForwardingElementArgumentsToList(
+  static/*<T>*/ bool addForwardingElementArgumentsToList(
       ConstructorElement caller,
       List/*<T>*/ list,
       ConstructorElement callee,
@@ -188,7 +184,7 @@
       /*T*/ compileConstant(ParameterElement element)) {
     assert(invariant(caller, !callee.isMalformed,
         message: "Cannot compute arguments to malformed constructor: "
-                 "$caller calling $callee."));
+            "$caller calling $callee."));
 
     FunctionSignature signature = caller.functionSignature;
     Map<Node, ParameterElement> mapping = <Node, ParameterElement>{};
@@ -236,10 +232,7 @@
       return false;
     }
     list.addAll(callStructure.makeArgumentsList(
-        nodes,
-        callee,
-        internalCompileArgument,
-        compileConstant));
+        nodes, callee, internalCompileArgument, compileConstant));
 
     return true;
   }
diff --git a/pkg/compiler/lib/src/universe/class_set.dart b/pkg/compiler/lib/src/universe/class_set.dart
index bed1d60..038d757 100644
--- a/pkg/compiler/lib/src/universe/class_set.dart
+++ b/pkg/compiler/lib/src/universe/class_set.dart
@@ -4,14 +4,10 @@
 
 library dart2js.world.class_set;
 
-import 'dart:collection' show
-    IterableBase;
-import '../elements/elements.dart' show
-    ClassElement;
-import '../util/enumset.dart' show
-    EnumSet;
-import '../util/util.dart' show
-    Link;
+import 'dart:collection' show IterableBase;
+import '../elements/elements.dart' show ClassElement;
+import '../util/enumset.dart' show EnumSet;
+import '../util/util.dart' show Link;
 
 /// Enum for the different kinds of instantiation of a class.
 enum Instantiation {
@@ -50,11 +46,10 @@
   /// [ClassHierarchyNode.subclassesByMask],
   /// [ClassHierarchyNode.subclassesByMask] and [ClassSet.subtypesByMask].
   static final EnumSet<Instantiation> INSTANTIATED =
-      new EnumSet<Instantiation>.fromValues(
-          const <Instantiation>[
-              Instantiation.DIRECTLY_INSTANTIATED,
-              Instantiation.INDIRECTLY_INSTANTIATED],
-          fixed: true);
+      new EnumSet<Instantiation>.fromValues(const <Instantiation>[
+    Instantiation.DIRECTLY_INSTANTIATED,
+    Instantiation.INDIRECTLY_INSTANTIATED
+  ], fixed: true);
 
   /// Enum set for selecting directly instantiated classes in
   /// [ClassHierarchyNode.subclassesByMask],
@@ -68,17 +63,15 @@
   /// [ClassHierarchyNode.subclassesByMask],
   /// [ClassHierarchyNode.subclassesByMask] and [ClassSet.subtypesByMask].
   static final EnumSet<Instantiation> ALL =
-      new EnumSet<Instantiation>.fromValues(
-          Instantiation.values,
-          fixed: true);
+      new EnumSet<Instantiation>.fromValues(Instantiation.values, fixed: true);
 
   /// Creates an enum set for selecting the returned classes in
   /// [ClassHierarchyNode.subclassesByMask],
   /// [ClassHierarchyNode.subclassesByMask] and [ClassSet.subtypesByMask].
   static EnumSet<Instantiation> createMask(
       {bool includeDirectlyInstantiated: true,
-       bool includeIndirectlyInstantiated: true,
-       bool includeUninstantiated: true}) {
+      bool includeIndirectlyInstantiated: true,
+      bool includeUninstantiated: true}) {
     EnumSet<Instantiation> mask = new EnumSet<Instantiation>();
     if (includeDirectlyInstantiated) {
       mask.add(Instantiation.DIRECTLY_INSTANTIATED);
@@ -94,9 +87,8 @@
 
   final ClassHierarchyNode parentNode;
   final ClassElement cls;
-  final EnumSet<Instantiation> _mask =
-      new EnumSet<Instantiation>.fromValues(
-          const <Instantiation>[Instantiation.UNINSTANTIATED]);
+  final EnumSet<Instantiation> _mask = new EnumSet<Instantiation>.fromValues(
+      const <Instantiation>[Instantiation.UNINSTANTIATED]);
 
   ClassElement _leastUpperInstantiatedSubclass;
   int _instantiatedSubclassCount = 0;
@@ -203,11 +195,9 @@
   /// Subclasses are included if their instantiation properties intersect with
   /// their corresponding [Instantiation] values in [mask]. If [strict] is
   /// `true`, [cls] itself is _not_ returned.
-  Iterable<ClassElement> subclassesByMask(
-      EnumSet<Instantiation> mask,
+  Iterable<ClassElement> subclassesByMask(EnumSet<Instantiation> mask,
       {bool strict: false}) {
-    return new ClassHierarchyNodeIterable(
-        this, mask, includeRoot: !strict);
+    return new ClassHierarchyNodeIterable(this, mask, includeRoot: !strict);
   }
 
   /// Applies [predicate] to each subclass of [cls] matching the criteria
@@ -218,10 +208,8 @@
   /// intersect with their corresponding [Instantiation] values in [mask]. If
   /// [strict] is `true`, [predicate] is _not_ called on [cls] itself.
   bool anySubclass(
-      bool predicate(ClassElement cls),
-      EnumSet<Instantiation> mask,
+      bool predicate(ClassElement cls), EnumSet<Instantiation> mask,
       {bool strict: false}) {
-
     IterationStep wrapper(ClassElement cls) {
       return predicate(cls) ? IterationStep.STOP : IterationStep.CONTINUE;
     }
@@ -242,9 +230,7 @@
   /// continues. The return value of the function is either [ForEach.STOP], if
   /// visitation was stopped, or [ForEach.CONTINUE] if visitation continued to
   /// the end.
-  IterationStep forEachSubclass(
-      ForEachFunction f,
-      EnumSet<Instantiation> mask,
+  IterationStep forEachSubclass(ForEachFunction f, EnumSet<Instantiation> mask,
       {bool strict: false}) {
     IterationStep nextStep;
     if (!strict && mask.intersects(_mask)) {
@@ -287,8 +273,8 @@
     }
     ClassHierarchyNode subclass;
     for (Link<ClassHierarchyNode> link = _directSubclasses;
-         !link.isEmpty;
-         link = link.tail) {
+        !link.isEmpty;
+        link = link.tail) {
       if (link.head.isInstantiated) {
         if (subclass == null) {
           subclass = link.head;
@@ -304,10 +290,9 @@
   }
 
   void printOn(StringBuffer sb, String indentation,
-               {bool instantiatedOnly: false,
-                bool sorted: true,
-                ClassElement withRespectTo}) {
-
+      {bool instantiatedOnly: false,
+      bool sorted: true,
+      ClassElement withRespectTo}) {
     bool isRelatedTo(ClassElement subclass) {
       return subclass == withRespectTo ||
           subclass.implementsInterface(withRespectTo);
@@ -330,9 +315,10 @@
     } else {
       var subclasses = _directSubclasses;
       if (sorted) {
-        subclasses = _directSubclasses.toList()..sort((a, b) {
-          return a.cls.name.compareTo(b.cls.name);
-        });
+        subclasses = _directSubclasses.toList()
+          ..sort((a, b) {
+            return a.cls.name.compareTo(b.cls.name);
+          });
       }
       bool needsComma = false;
       for (ClassHierarchyNode child in subclasses) {
@@ -348,9 +334,7 @@
         } else {
           sb.write('\n');
         }
-        child.printOn(
-            sb,
-            '$indentation  ',
+        child.printOn(sb, '$indentation  ',
             instantiatedOnly: instantiatedOnly,
             sorted: sorted,
             withRespectTo: withRespectTo);
@@ -365,13 +349,13 @@
     }
   }
 
-  String dump({String indentation: '',
-               bool instantiatedOnly: false,
-               ClassElement withRespectTo}) {
+  String dump(
+      {String indentation: '',
+      bool instantiatedOnly: false,
+      ClassElement withRespectTo}) {
     StringBuffer sb = new StringBuffer();
     printOn(sb, indentation,
-        instantiatedOnly: instantiatedOnly,
-        withRespectTo: withRespectTo);
+        instantiatedOnly: instantiatedOnly, withRespectTo: withRespectTo);
     return sb.toString();
   }
 
@@ -480,8 +464,7 @@
   /// Subclasses are included if their instantiation properties intersect with
   /// their corresponding [Instantiation] values in [mask]. If [strict] is
   /// `true`, [cls] itself is _not_ returned.
-  Iterable<ClassElement> subclassesByMask(
-      EnumSet<Instantiation> mask,
+  Iterable<ClassElement> subclassesByMask(EnumSet<Instantiation> mask,
       {bool strict: false}) {
     return node.subclassesByMask(mask, strict: strict);
   }
@@ -494,12 +477,12 @@
   /// respectively. If [strict] is `true`, [cls] itself is _not_ returned.
   Iterable<ClassElement> subtypes(
       {bool includeDirectlyInstantiated: true,
-       bool includeIndirectlyInstantiated: true,
-       bool includeUninstantiated: true,
-       bool strict: false}) {
+      bool includeIndirectlyInstantiated: true,
+      bool includeUninstantiated: true,
+      bool strict: false}) {
     EnumSet<Instantiation> mask = ClassHierarchyNode.createMask(
         includeDirectlyInstantiated: includeDirectlyInstantiated,
-        includeIndirectlyInstantiated:includeIndirectlyInstantiated,
+        includeIndirectlyInstantiated: includeIndirectlyInstantiated,
         includeUninstantiated: includeUninstantiated);
     return subtypesByMask(mask, strict: strict);
   }
@@ -509,17 +492,13 @@
   /// Subtypes are included if their instantiation properties intersect with
   /// their corresponding [Instantiation] values in [mask]. If [strict] is
   /// `true`, [cls] itself is _not_ returned.
-  Iterable<ClassElement> subtypesByMask(
-      EnumSet<Instantiation> mask,
+  Iterable<ClassElement> subtypesByMask(EnumSet<Instantiation> mask,
       {bool strict: false}) {
     if (_subtypes == null) {
-      return node.subclassesByMask(
-          mask,
-          strict: strict);
+      return node.subclassesByMask(mask, strict: strict);
     }
 
-    return new SubtypesIterable.SubtypesIterator(this,
-        mask,
+    return new SubtypesIterable.SubtypesIterator(this, mask,
         includeRoot: !strict);
   }
 
@@ -531,8 +510,7 @@
   /// intersect with their corresponding [Instantiation] values in [mask]. If
   /// [strict] is `true`, [predicate] is _not_ called on [cls] itself.
   bool anySubclass(
-      bool predicate(ClassElement cls),
-      EnumSet<Instantiation> mask,
+      bool predicate(ClassElement cls), EnumSet<Instantiation> mask,
       {bool strict: false}) {
     return node.anySubclass(predicate, mask, strict: strict);
   }
@@ -551,9 +529,7 @@
   /// continues. The return value of the function is either [ForEach.STOP], if
   /// visitation was stopped, or [ForEach.CONTINUE] if visitation continued to
   /// the end.
-  IterationStep forEachSubclass(
-      ForEachFunction f,
-      EnumSet<Instantiation> mask,
+  IterationStep forEachSubclass(ForEachFunction f, EnumSet<Instantiation> mask,
       {bool strict: false}) {
     return node.forEachSubclass(f, mask, strict: strict);
   }
@@ -565,11 +541,8 @@
   /// [predicate] is applied to subtypes if their instantiation properties
   /// intersect with their corresponding [Instantiation] values in [mask]. If
   /// [strict] is `true`, [predicate] is _not_ called on [cls] itself.
-  bool anySubtype(
-      bool predicate(ClassElement cls),
-      EnumSet<Instantiation> mask,
+  bool anySubtype(bool predicate(ClassElement cls), EnumSet<Instantiation> mask,
       {bool strict: false}) {
-
     IterationStep wrapper(ClassElement cls) {
       return predicate(cls) ? IterationStep.STOP : IterationStep.CONTINUE;
     }
@@ -590,9 +563,7 @@
   /// continues. The return value of the function is either [ForEach.STOP], if
   /// visitation was stopped, or [ForEach.CONTINUE] if visitation continued to
   /// the end.
-  IterationStep forEachSubtype(
-      ForEachFunction f,
-      EnumSet<Instantiation> mask,
+  IterationStep forEachSubtype(ForEachFunction f, EnumSet<Instantiation> mask,
       {bool strict: false}) {
     IterationStep nextStep =
         node.forEachSubclass(f, mask, strict: strict) ?? IterationStep.CONTINUE;
@@ -716,10 +687,7 @@
   final EnumSet<Instantiation> mask;
   final bool includeRoot;
 
-  ClassHierarchyNodeIterable(
-      this.root,
-      this.mask,
-      {this.includeRoot: true}) {
+  ClassHierarchyNodeIterable(this.root, this.mask, {this.includeRoot: true}) {
     if (root == null) throw new StateError("No root for iterable.");
   }
 
@@ -793,8 +761,8 @@
         continue;
       }
       for (Link<ClassHierarchyNode> link = currentNode._directSubclasses;
-           !link.isEmpty;
-           link = link.tail) {
+          !link.isEmpty;
+          link = link.tail) {
         stack = stack.prepend(link.head);
       }
       if (_isValid(currentNode)) {
@@ -816,9 +784,7 @@
   final EnumSet<Instantiation> mask;
   final bool includeRoot;
 
-  SubtypesIterable.SubtypesIterator(
-      this.subtypeSet,
-      this.mask,
+  SubtypesIterable.SubtypesIterator(this.subtypeSet, this.mask,
       {this.includeRoot: true});
 
   @override
@@ -849,9 +815,9 @@
   bool moveNext() {
     if (elements == null && hierarchyNodes == null) {
       // Initial state. Iterate through subclasses.
-      elements = iterable.subtypeSet.node.subclassesByMask(
-          mask,
-          strict: !includeRoot).iterator;
+      elements = iterable.subtypeSet.node
+          .subclassesByMask(mask, strict: !includeRoot)
+          .iterator;
     }
     if (elements != null && elements.moveNext()) {
       return true;
@@ -876,8 +842,10 @@
 enum IterationStep {
   /// Iteration continues.
   CONTINUE,
+
   /// Iteration stops immediately.
   STOP,
+
   /// Iteration skips the subclasses of the current class.
   SKIP_SUBCLASSES,
 }
diff --git a/pkg/compiler/lib/src/universe/function_set.dart b/pkg/compiler/lib/src/universe/function_set.dart
index 27273341..c225b15 100644
--- a/pkg/compiler/lib/src/universe/function_set.dart
+++ b/pkg/compiler/lib/src/universe/function_set.dart
@@ -4,37 +4,27 @@
 
 library universe.function_set;
 
-import '../common/names.dart' show
-    Identifiers,
-    Selectors;
-import '../compiler.dart' show
-    Compiler;
+import '../common/names.dart' show Identifiers, Selectors;
+import '../compiler.dart' show Compiler;
 import '../elements/elements.dart';
 import '../types/types.dart';
-import '../util/util.dart' show
-    Hashing,
-    Setlet;
-import '../world.dart' show
-    ClassWorld;
+import '../util/util.dart' show Hashing, Setlet;
+import '../world.dart' show ClassWorld;
 
-import 'selector.dart' show
-    Selector;
-import 'universe.dart' show
-    ReceiverConstraint;
+import 'selector.dart' show Selector;
+import 'universe.dart' show ReceiverConstraint;
 
 // TODO(kasperl): This actually holds getters and setters just fine
 // too and stricly they aren't functions. Maybe this needs a better
 // name -- something like ElementSet seems a bit too generic.
 class FunctionSet {
   final Compiler compiler;
-  final Map<String, FunctionSetNode> nodes =
-      new Map<String, FunctionSetNode>();
+  final Map<String, FunctionSetNode> nodes = new Map<String, FunctionSetNode>();
   FunctionSet(this.compiler);
 
   ClassWorld get classWorld => compiler.world;
 
-  FunctionSetNode newNode(String name)
-      => new FunctionSetNode(name);
+  FunctionSetNode newNode(String name) => new FunctionSetNode(name);
 
   void add(Element element) {
     assert(element.isInstanceMember);
@@ -59,9 +49,7 @@
     assert(!element.isAbstract);
     String name = element.name;
     FunctionSetNode node = nodes[name];
-    return (node != null)
-        ? node.contains(element)
-        : false;
+    return (node != null) ? node.contains(element) : false;
   }
 
   /// Returns an object that allows iterating over all the functions
@@ -216,10 +204,8 @@
 
   /// Returns the set of functions that can be the target of [selectorMask]
   /// including no such method handling where applicable.
-  FunctionSetQuery query(SelectorMask selectorMask,
-                         ClassWorld classWorld,
-                         [FunctionSetNode noSuchMethods,
-                          SelectorMask noSuchMethodMask]) {
+  FunctionSetQuery query(SelectorMask selectorMask, ClassWorld classWorld,
+      [FunctionSetNode noSuchMethods, SelectorMask noSuchMethodMask]) {
     assert(selectorMask.name == name);
     FunctionSetQuery result = cache[selectorMask];
     if (result != null) return result;
@@ -293,12 +279,11 @@
   TypeMask computeMask(ClassWorld classWorld) {
     assert(classWorld.hasAnyStrictSubclass(classWorld.objectClass));
     if (_mask != null) return _mask;
-    return _mask = new TypeMask.unionOf(functions
-        .expand((element) {
+    return _mask = new TypeMask.unionOf(
+        functions.expand((element) {
           ClassElement cls = element.enclosingClass;
           return [cls]..addAll(classWorld.mixinUsesOf(cls));
-        })
-        .map((cls) {
+        }).map((cls) {
           if (classWorld.backend.isNullImplementation(cls)) {
             return const TypeMask.empty();
           } else if (classWorld.isInstantiated(cls.declaration)) {
diff --git a/pkg/compiler/lib/src/universe/selector.dart b/pkg/compiler/lib/src/universe/selector.dart
index 8bef9fa..a76db34 100644
--- a/pkg/compiler/lib/src/universe/selector.dart
+++ b/pkg/compiler/lib/src/universe/selector.dart
@@ -5,23 +5,20 @@
 library dart2js.selector;
 
 import '../common.dart';
-import '../common/names.dart' show
-    Names;
-import '../elements/elements.dart' show
-    Element,
-    Elements,
-    FunctionElement,
-    FunctionSignature,
-    Name,
-    LibraryElement,
-    PublicName;
-import '../util/util.dart' show
-    Hashing;
-import '../world.dart' show
-    World;
+import '../common/names.dart' show Names;
+import '../elements/elements.dart'
+    show
+        Element,
+        Elements,
+        FunctionElement,
+        FunctionSignature,
+        Name,
+        LibraryElement,
+        PublicName;
+import '../util/util.dart' show Hashing;
+import '../world.dart' show World;
 
-import 'call_structure.dart' show
-    CallStructure;
+import 'call_structure.dart' show CallStructure;
 
 class SelectorKind {
   final String name;
@@ -38,8 +35,13 @@
 
   String toString() => name;
 
-  static List<SelectorKind> values =
-      const <SelectorKind>[GETTER, SETTER, CALL, OPERATOR, INDEX];
+  static List<SelectorKind> values = const <SelectorKind>[
+    GETTER,
+    SETTER,
+    CALL,
+    OPERATOR,
+    INDEX
+  ];
 }
 
 class Selector {
@@ -58,44 +60,43 @@
 
   LibraryElement get library => memberName.library;
 
-  Selector.internal(this.kind,
-                    this.memberName,
-                    this.callStructure,
-                    this.hashCode) {
-    assert(invariant(NO_LOCATION_SPANNABLE,
+  Selector.internal(
+      this.kind, this.memberName, this.callStructure, this.hashCode) {
+    assert(invariant(
+        NO_LOCATION_SPANNABLE,
         kind == SelectorKind.INDEX ||
-        (memberName != Names.INDEX_NAME &&
-         memberName != Names.INDEX_SET_NAME),
+            (memberName != Names.INDEX_NAME &&
+                memberName != Names.INDEX_SET_NAME),
         message: "kind=$kind,memberName=$memberName,"
-                 "callStructure:$callStructure"));
-    assert(invariant(NO_LOCATION_SPANNABLE,
+            "callStructure:$callStructure"));
+    assert(invariant(
+        NO_LOCATION_SPANNABLE,
         kind == SelectorKind.OPERATOR ||
-        kind == SelectorKind.INDEX ||
-        !Elements.isOperatorName(memberName.text) ||
-        memberName.text == '??',
+            kind == SelectorKind.INDEX ||
+            !Elements.isOperatorName(memberName.text) ||
+            memberName.text == '??',
         message: "kind=$kind,memberName=$memberName,"
-                 "callStructure:$callStructure"));
-    assert(invariant(NO_LOCATION_SPANNABLE,
+            "callStructure:$callStructure"));
+    assert(invariant(
+        NO_LOCATION_SPANNABLE,
         kind == SelectorKind.CALL ||
-        kind == SelectorKind.GETTER ||
-        kind == SelectorKind.SETTER ||
-        Elements.isOperatorName(memberName.text) ||
-        memberName.text == '??',
+            kind == SelectorKind.GETTER ||
+            kind == SelectorKind.SETTER ||
+            Elements.isOperatorName(memberName.text) ||
+            memberName.text == '??',
         message: "kind=$kind,memberName=$memberName,"
-                 "callStructure:$callStructure"));
+            "callStructure:$callStructure"));
   }
 
   // TODO(johnniwinther): Extract caching.
   static Map<int, List<Selector>> canonicalizedValues =
       new Map<int, List<Selector>>();
 
-  factory Selector(SelectorKind kind,
-                   Name name,
-                   CallStructure callStructure) {
+  factory Selector(SelectorKind kind, Name name, CallStructure callStructure) {
     // TODO(johnniwinther): Maybe use equality instead of implicit hashing.
     int hashCode = computeHashCode(kind, name, callStructure);
-    List<Selector> list = canonicalizedValues.putIfAbsent(hashCode,
-        () => <Selector>[]);
+    List<Selector> list =
+        canonicalizedValues.putIfAbsent(hashCode, () => <Selector>[]);
     for (int i = 0; i < list.length; i++) {
       Selector existing = list[i];
       if (existing.match(kind, name, callStructure)) {
@@ -103,8 +104,8 @@
         return existing;
       }
     }
-    Selector result = new Selector.internal(
-        kind, name, callStructure, hashCode);
+    Selector result =
+        new Selector.internal(kind, name, callStructure, hashCode);
     list.add(result);
     return result;
   }
@@ -128,9 +129,7 @@
       if (element.isOperator) {
         // Operators cannot have named arguments, however, that doesn't prevent
         // a user from declaring such an operator.
-        return new Selector(
-            SelectorKind.OPERATOR,
-            name,
+        return new Selector(SelectorKind.OPERATOR, name,
             new CallStructure(arity, namedArguments));
       } else {
         return new Selector.call(
@@ -150,15 +149,11 @@
     }
   }
 
-  factory Selector.getter(Name name)
-      => new Selector(SelectorKind.GETTER,
-                      name.getter,
-                      CallStructure.NO_ARGS);
+  factory Selector.getter(Name name) =>
+      new Selector(SelectorKind.GETTER, name.getter, CallStructure.NO_ARGS);
 
-  factory Selector.setter(Name name)
-      => new Selector(SelectorKind.SETTER,
-                      name.setter,
-                      CallStructure.ONE_ARG);
+  factory Selector.setter(Name name) =>
+      new Selector(SelectorKind.SETTER, name.setter, CallStructure.ONE_ARG);
 
   factory Selector.unaryOperator(String name) => new Selector(
       SelectorKind.OPERATOR,
@@ -170,35 +165,29 @@
       new PublicName(Elements.constructOperatorName(name, false)),
       CallStructure.ONE_ARG);
 
-  factory Selector.index()
-      => new Selector(SelectorKind.INDEX, Names.INDEX_NAME,
-                      CallStructure.ONE_ARG);
+  factory Selector.index() =>
+      new Selector(SelectorKind.INDEX, Names.INDEX_NAME, CallStructure.ONE_ARG);
 
-  factory Selector.indexSet()
-      => new Selector(SelectorKind.INDEX, Names.INDEX_SET_NAME,
-                      CallStructure.TWO_ARGS);
+  factory Selector.indexSet() => new Selector(
+      SelectorKind.INDEX, Names.INDEX_SET_NAME, CallStructure.TWO_ARGS);
 
-  factory Selector.call(Name name, CallStructure callStructure)
-      => new Selector(SelectorKind.CALL, name, callStructure);
+  factory Selector.call(Name name, CallStructure callStructure) =>
+      new Selector(SelectorKind.CALL, name, callStructure);
 
-  factory Selector.callClosure(int arity, [List<String> namedArguments])
-      => new Selector(SelectorKind.CALL, Names.call,
-                      new CallStructure(arity, namedArguments));
+  factory Selector.callClosure(int arity, [List<String> namedArguments]) =>
+      new Selector(SelectorKind.CALL, Names.call,
+          new CallStructure(arity, namedArguments));
 
-  factory Selector.callClosureFrom(Selector selector)
-      => new Selector(SelectorKind.CALL, Names.call, selector.callStructure);
+  factory Selector.callClosureFrom(Selector selector) =>
+      new Selector(SelectorKind.CALL, Names.call, selector.callStructure);
 
   factory Selector.callConstructor(Name name,
-                                   [int arity = 0,
-                                    List<String> namedArguments])
-      => new Selector(SelectorKind.CALL, name,
-                      new CallStructure(arity, namedArguments));
+          [int arity = 0, List<String> namedArguments]) =>
+      new Selector(
+          SelectorKind.CALL, name, new CallStructure(arity, namedArguments));
 
-  factory Selector.callDefaultConstructor()
-      => new Selector(
-          SelectorKind.CALL,
-          const PublicName(''),
-          CallStructure.NO_ARGS);
+  factory Selector.callDefaultConstructor() => new Selector(
+      SelectorKind.CALL, const PublicName(''), CallStructure.NO_ARGS);
 
   bool get isGetter => kind == SelectorKind.GETTER;
   bool get isSetter => kind == SelectorKind.SETTER;
@@ -214,8 +203,7 @@
   /**
    * The member name for invocation mirrors created from this selector.
    */
-  String get invocationMirrorMemberName =>
-      isSetter ? '$name=' : name;
+  String get invocationMirrorMemberName => isSetter ? '$name=' : name;
 
   int get invocationMirrorKind {
     const int METHOD = 0;
@@ -271,17 +259,14 @@
     return appliesUnnamed(element, world);
   }
 
-  bool match(SelectorKind kind,
-             Name memberName,
-             CallStructure callStructure) {
-    return this.kind == kind
-        && this.memberName == memberName
-        && this.callStructure.match(callStructure);
+  bool match(SelectorKind kind, Name memberName, CallStructure callStructure) {
+    return this.kind == kind &&
+        this.memberName == memberName &&
+        this.callStructure.match(callStructure);
   }
 
-  static int computeHashCode(SelectorKind kind,
-                             Name name,
-                             CallStructure callStructure) {
+  static int computeHashCode(
+      SelectorKind kind, Name name, CallStructure callStructure) {
     // Add bits from name and kind.
     int hash = Hashing.mixHashCodeBits(name.hashCode, kind.hashCode);
     // Add bits from the call structure.
diff --git a/pkg/compiler/lib/src/universe/side_effects.dart b/pkg/compiler/lib/src/universe/side_effects.dart
index a599e09..2c39999 100644
--- a/pkg/compiler/lib/src/universe/side_effects.dart
+++ b/pkg/compiler/lib/src/universe/side_effects.dart
@@ -8,8 +8,8 @@
   // Changes flags.
   static const int FLAG_CHANGES_INDEX = 0;
   static const int FLAG_CHANGES_INSTANCE_PROPERTY = FLAG_CHANGES_INDEX + 1;
-  static const int FLAG_CHANGES_STATIC_PROPERTY
-      = FLAG_CHANGES_INSTANCE_PROPERTY + 1;
+  static const int FLAG_CHANGES_STATIC_PROPERTY =
+      FLAG_CHANGES_INSTANCE_PROPERTY + 1;
   static const int FLAG_CHANGES_COUNT = FLAG_CHANGES_STATIC_PROPERTY + 1;
 
   // Depends flags (one for each changes flag).
@@ -33,13 +33,18 @@
     clearAllSideEffects();
   }
 
-  bool operator==(other) => _flags == other._flags;
+  bool operator ==(other) => _flags == other._flags;
 
   int get hashCode => throw new UnsupportedError('SideEffects.hashCode');
 
   bool _getFlag(int position) => (_flags & (1 << position)) != 0;
-  void _setFlag(int position) { _flags |= (1 << position); }
-  void _clearFlag(int position) { _flags &= ~(1 << position); }
+  void _setFlag(int position) {
+    _flags |= (1 << position);
+  }
+
+  void _clearFlag(int position) {
+    _flags &= ~(1 << position);
+  }
 
   int getChangesFlags() => _flags & ((1 << FLAG_CHANGES_COUNT) - 1);
   int getDependsOnFlags() {
@@ -49,14 +54,19 @@
   bool hasSideEffects() => getChangesFlags() != 0;
   bool dependsOnSomething() => getDependsOnFlags() != 0;
 
-  void setAllSideEffects() { _flags |= ((1 << FLAG_CHANGES_COUNT) - 1); }
+  void setAllSideEffects() {
+    _flags |= ((1 << FLAG_CHANGES_COUNT) - 1);
+  }
 
-  void clearAllSideEffects() { _flags &= ~((1 << FLAG_CHANGES_COUNT) - 1); }
+  void clearAllSideEffects() {
+    _flags &= ~((1 << FLAG_CHANGES_COUNT) - 1);
+  }
 
   void setDependsOnSomething() {
     int count = FLAG_DEPENDS_ON_COUNT - FLAG_CHANGES_COUNT;
     _flags |= (((1 << count) - 1) << FLAG_CHANGES_COUNT);
   }
+
   void clearAllDependencies() {
     int count = FLAG_DEPENDS_ON_COUNT - FLAG_CHANGES_COUNT;
     _flags &= ~(((1 << count) - 1) << FLAG_CHANGES_COUNT);
@@ -65,40 +75,64 @@
   bool dependsOnStaticPropertyStore() {
     return _getFlag(FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE);
   }
+
   void setDependsOnStaticPropertyStore() {
     _setFlag(FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE);
   }
+
   void clearDependsOnStaticPropertyStore() {
     _clearFlag(FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE);
   }
-  void setChangesStaticProperty() { _setFlag(FLAG_CHANGES_STATIC_PROPERTY); }
+
+  void setChangesStaticProperty() {
+    _setFlag(FLAG_CHANGES_STATIC_PROPERTY);
+  }
+
   void clearChangesStaticProperty() {
     _clearFlag(FLAG_CHANGES_STATIC_PROPERTY);
   }
+
   bool changesStaticProperty() => _getFlag(FLAG_CHANGES_STATIC_PROPERTY);
 
   bool dependsOnIndexStore() => _getFlag(FLAG_DEPENDS_ON_INDEX_STORE);
-  void setDependsOnIndexStore() { _setFlag(FLAG_DEPENDS_ON_INDEX_STORE); }
-  void clearDependsOnIndexStore() { _clearFlag(FLAG_DEPENDS_ON_INDEX_STORE); }
-  void setChangesIndex() { _setFlag(FLAG_CHANGES_INDEX); }
-  void clearChangesIndex() { _clearFlag(FLAG_CHANGES_INDEX); }
+  void setDependsOnIndexStore() {
+    _setFlag(FLAG_DEPENDS_ON_INDEX_STORE);
+  }
+
+  void clearDependsOnIndexStore() {
+    _clearFlag(FLAG_DEPENDS_ON_INDEX_STORE);
+  }
+
+  void setChangesIndex() {
+    _setFlag(FLAG_CHANGES_INDEX);
+  }
+
+  void clearChangesIndex() {
+    _clearFlag(FLAG_CHANGES_INDEX);
+  }
+
   bool changesIndex() => _getFlag(FLAG_CHANGES_INDEX);
 
   bool dependsOnInstancePropertyStore() {
     return _getFlag(FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE);
   }
+
   void setDependsOnInstancePropertyStore() {
     _setFlag(FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE);
   }
+
   void clearDependsOnInstancePropertyStore() {
     _setFlag(FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE);
   }
+
   void setChangesInstanceProperty() {
     _setFlag(FLAG_CHANGES_INSTANCE_PROPERTY);
   }
+
   void clearChangesInstanceProperty() {
     _clearFlag(FLAG_CHANGES_INSTANCE_PROPERTY);
   }
+
   bool changesInstanceProperty() => _getFlag(FLAG_CHANGES_INSTANCE_PROPERTY);
 
   static int computeDependsOnFlags(int flags) => flags << FLAG_CHANGES_COUNT;
diff --git a/pkg/compiler/lib/src/universe/universe.dart b/pkg/compiler/lib/src/universe/universe.dart
index 8b2f53e..8f08f6f 100644
--- a/pkg/compiler/lib/src/universe/universe.dart
+++ b/pkg/compiler/lib/src/universe/universe.dart
@@ -7,22 +7,14 @@
 import 'dart:collection';
 
 import '../common.dart';
-import '../compiler.dart' show
-    Compiler;
+import '../compiler.dart' show Compiler;
 import '../elements/elements.dart';
 import '../dart_types.dart';
 import '../util/util.dart';
-import '../world.dart' show
-    ClassWorld,
-    World;
+import '../world.dart' show ClassWorld, World;
 
-import 'selector.dart' show
-    Selector;
-import 'use.dart' show
-    DynamicUse,
-    DynamicUseKind,
-    StaticUse,
-    StaticUseKind;
+import 'selector.dart' show Selector;
+import 'use.dart' show DynamicUse, DynamicUseKind, StaticUse, StaticUseKind;
 
 /// The known constraint on receiver for a dynamic call site.
 ///
@@ -227,9 +219,9 @@
   // subclass and through subtype instantiated types/classes.
   // TODO(johnniwinther): Support unknown type arguments for generic types.
   void registerTypeInstantiation(InterfaceType type,
-                                 {bool byMirrors: false,
-                                  bool isNative: false,
-                                  void onImplemented(ClassElement cls)}) {
+      {bool byMirrors: false,
+      bool isNative: false,
+      void onImplemented(ClassElement cls)}) {
     _instantiatedTypes.add(type);
     ClassElement cls = type.element;
     if (!cls.isAbstract
@@ -237,11 +229,13 @@
         // classes; a native abstract class may have non-abstract subclasses
         // not declared to the program.  Instances of these classes are
         // indistinguishable from the abstract class.
-        || isNative
+        ||
+        isNative
         // Likewise, if this registration comes from the mirror system,
         // all bets are off.
         // TODO(herhut): Track classes required by mirrors seperately.
-        || byMirrors) {
+        ||
+        byMirrors) {
       _directlyInstantiatedClasses.add(cls);
     }
 
@@ -258,8 +252,7 @@
   }
 
   bool _hasMatchingSelector(Map<Selector, SelectorConstraints> selectors,
-                            Element member,
-                            World world) {
+      Element member, World world) {
     if (selectors == null) return false;
     for (Selector selector in selectors.keys) {
       if (selector.appliesUnnamed(member, world)) {
@@ -296,16 +289,15 @@
     }
   }
 
-  bool _registerNewSelector(
-      DynamicUse dynamicUse,
+  bool _registerNewSelector(DynamicUse dynamicUse,
       Map<String, Map<Selector, SelectorConstraints>> selectorMap) {
     Selector selector = dynamicUse.selector;
     String name = selector.name;
     ReceiverConstraint mask = dynamicUse.mask;
     Map<Selector, SelectorConstraints> selectors = selectorMap.putIfAbsent(
         name, () => new Maplet<Selector, SelectorConstraints>());
-    UniverseSelectorConstraints constraints = selectors.putIfAbsent(
-        selector, () {
+    UniverseSelectorConstraints constraints =
+        selectors.putIfAbsent(selector, () {
       return selectorConstraintsStrategy.createSelectorConstraints(selector);
     });
     return constraints.addReceiverConstraint(mask);
@@ -389,12 +381,9 @@
     fieldGetters.remove(element);
     _directlyInstantiatedClasses.remove(element);
     if (element is ClassElement) {
-      assert(invariant(
-          element, element.thisType.isRaw,
+      assert(invariant(element, element.thisType.isRaw,
           message: 'Generic classes not supported (${element.thisType}).'));
-      _instantiatedTypes
-          ..remove(element.rawType)
-          ..remove(element.thisType);
+      _instantiatedTypes..remove(element.rawType)..remove(element.thisType);
     }
   }
 
@@ -404,7 +393,7 @@
     // Return new list to guard against concurrent modifications.
     return new List<LocalFunctionElement>.from(
         allClosures.where((LocalFunctionElement closure) {
-          return closure.executableContext == element;
-        }));
+      return closure.executableContext == element;
+    }));
   }
 }
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index 73fb979..bb6b153 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -7,29 +7,18 @@
 /// method on an unknown class.
 library dart2js.universe.use;
 
-import '../closure.dart' show
-  BoxFieldElement;
+import '../closure.dart' show BoxFieldElement;
 import '../common.dart';
 import '../dart_types.dart';
 import '../elements/elements.dart';
-import '../world.dart' show
-    ClassWorld;
-import '../util/util.dart' show
-    Hashing;
+import '../world.dart' show ClassWorld;
+import '../util/util.dart' show Hashing;
 
-import 'call_structure.dart' show
-    CallStructure;
-import 'selector.dart' show
-    Selector;
-import 'universe.dart' show
-    ReceiverConstraint;
+import 'call_structure.dart' show CallStructure;
+import 'selector.dart' show Selector;
+import 'universe.dart' show ReceiverConstraint;
 
-
-enum DynamicUseKind {
-  INVOKE,
-  GET,
-  SET,
-}
+enum DynamicUseKind { INVOKE, GET, SET, }
 
 /// The use of a dynamic property. [selector] defined the name and kind of the
 /// property and [mask] defines the known constraint for the object on which
@@ -90,17 +79,17 @@
         this.hashCode = Hashing.objectHash(element, Hashing.objectHash(kind)) {
     assert(invariant(element, element.isDeclaration,
         message: "Static use element $element must be "
-                 "the declaration element."));
+            "the declaration element."));
   }
 
   /// Invocation of a static or top-level [element] with the given
   /// [callStructure].
-  factory StaticUse.staticInvoke(MethodElement element,
-                                 CallStructure callStructure) {
+  factory StaticUse.staticInvoke(
+      MethodElement element, CallStructure callStructure) {
     // TODO(johnniwinther): Use the [callStructure].
     assert(invariant(element, element.isStatic || element.isTopLevel,
         message: "Static invoke element $element must be a top-level "
-                 "or static method."));
+            "or static method."));
     return new StaticUse.internal(element, StaticUseKind.GENERAL);
   }
 
@@ -108,7 +97,7 @@
   factory StaticUse.staticTearOff(MethodElement element) {
     assert(invariant(element, element.isStatic || element.isTopLevel,
         message: "Static tear-off element $element must be a top-level "
-                 "or static method."));
+            "or static method."));
     return new StaticUse.internal(element, StaticUseKind.STATIC_TEAR_OFF);
   }
 
@@ -116,7 +105,7 @@
   factory StaticUse.staticGet(MemberElement element) {
     assert(invariant(element, element.isStatic || element.isTopLevel,
         message: "Static get element $element must be a top-level "
-                 "or static method."));
+            "or static method."));
     assert(invariant(element, element.isField || element.isGetter,
         message: "Static get element $element must be a field or a getter."));
     return new StaticUse.internal(element, StaticUseKind.GENERAL);
@@ -126,7 +115,7 @@
   factory StaticUse.staticSet(MemberElement element) {
     assert(invariant(element, element.isStatic || element.isTopLevel,
         message: "Static set element $element must be a top-level "
-                 "or static method."));
+            "or static method."));
     assert(invariant(element, element.isField || element.isSetter,
         message: "Static set element $element must be a field or a setter."));
     return new StaticUse.internal(element, StaticUseKind.GENERAL);
@@ -137,15 +126,15 @@
   factory StaticUse.staticInit(FieldElement element) {
     assert(invariant(element, element.isStatic || element.isTopLevel,
         message: "Static init element $element must be a top-level "
-                 "or static method."));
+            "or static method."));
     assert(invariant(element, element.isField,
         message: "Static init element $element must be a field."));
     return new StaticUse.internal(element, StaticUseKind.GENERAL);
   }
 
   /// Invocation of a super method [element] with the given [callStructure].
-  factory StaticUse.superInvoke(MethodElement element,
-                                CallStructure callStructure) {
+  factory StaticUse.superInvoke(
+      MethodElement element, CallStructure callStructure) {
     // TODO(johnniwinther): Use the [callStructure].
     assert(invariant(element, element.isInstanceMember,
         message: "Super invoke element $element must be an instance method."));
@@ -188,27 +177,26 @@
 
   /// Invocation of a constructor [element] through a this or super
   /// constructor call with the given [callStructure].
-  factory StaticUse.superConstructorInvoke(Element element,
-                                           CallStructure callStructure) {
+  factory StaticUse.superConstructorInvoke(
+      Element element, CallStructure callStructure) {
     // TODO(johnniwinther): Use the [callStructure].
-    assert(invariant(element,
-        element.isGenerativeConstructor,
+    assert(invariant(element, element.isGenerativeConstructor,
         message: "Constructor invoke element $element must be a "
-                 "generative constructor."));
+            "generative constructor."));
     return new StaticUse.internal(element, StaticUseKind.GENERAL);
   }
 
   /// Invocation of a constructor (body) [element] through a this or super
   /// constructor call with the given [callStructure].
-  factory StaticUse.constructorBodyInvoke(ConstructorBodyElement element,
-                                          CallStructure callStructure) {
+  factory StaticUse.constructorBodyInvoke(
+      ConstructorBodyElement element, CallStructure callStructure) {
     // TODO(johnniwinther): Use the [callStructure].
     return new StaticUse.internal(element, StaticUseKind.GENERAL);
   }
 
   /// Constructor invocation of [element] with the given [callStructure].
-  factory StaticUse.constructorInvoke(ConstructorElement element,
-                                      CallStructure callStructure) {
+  factory StaticUse.constructorInvoke(
+      ConstructorElement element, CallStructure callStructure) {
     // TODO(johnniwinther): Use the [callStructure].
     return new StaticUse.internal(element, StaticUseKind.GENERAL);
   }
@@ -227,19 +215,19 @@
 
   /// Read access of an instance field or boxed field [element].
   factory StaticUse.fieldGet(Element element) {
-    assert(invariant(element,
-        element.isInstanceMember || element is BoxFieldElement,
+    assert(invariant(
+        element, element.isInstanceMember || element is BoxFieldElement,
         message: "Field init element $element must be an instance "
-                 "or boxed field."));
+            "or boxed field."));
     return new StaticUse.internal(element, StaticUseKind.FIELD_GET);
   }
 
   /// Write access of an instance field or boxed field [element].
   factory StaticUse.fieldSet(Element element) {
-    assert(invariant(element,
-        element.isInstanceMember || element is BoxFieldElement,
+    assert(invariant(
+        element, element.isInstanceMember || element is BoxFieldElement,
         message: "Field init element $element must be an instance "
-                 "or boxed field."));
+            "or boxed field."));
     return new StaticUse.internal(element, StaticUseKind.FIELD_SET);
   }
 
@@ -257,8 +245,7 @@
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! StaticUse) return false;
-    return element == other.element &&
-           kind == other.kind;
+    return element == other.element && kind == other.kind;
   }
 
   String toString() => 'StaticUse($element,$kind)';
@@ -317,9 +304,8 @@
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! TypeUse) return false;
-    return type == other.type &&
-           kind == other.kind;
+    return type == other.type && kind == other.kind;
   }
 
   String toString() => 'TypeUse($type,$kind)';
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/universe/world_impact.dart b/pkg/compiler/lib/src/universe/world_impact.dart
index f6bc666..45dcba5 100644
--- a/pkg/compiler/lib/src/universe/world_impact.dart
+++ b/pkg/compiler/lib/src/universe/world_impact.dart
@@ -4,23 +4,16 @@
 
 library dart2js.universe.world_impact;
 
-import '../elements/elements.dart' show
-    Element,
-    LocalFunctionElement,
-    MethodElement;
-import '../util/util.dart' show
-    Setlet;
+import '../elements/elements.dart'
+    show Element, LocalFunctionElement, MethodElement;
+import '../util/util.dart' show Setlet;
 
-import 'use.dart' show
-    DynamicUse,
-    StaticUse,
-    TypeUse;
+import 'use.dart' show DynamicUse, StaticUse, TypeUse;
 
 class WorldImpact {
   const WorldImpact();
 
-  Iterable<DynamicUse> get dynamicUses =>
-      const <DynamicUse>[];
+  Iterable<DynamicUse> get dynamicUses => const <DynamicUse>[];
 
   Iterable<StaticUse> get staticUses => const <StaticUse>[];
 
@@ -75,8 +68,7 @@
   }
 
   Iterable<DynamicUse> get dynamicUses {
-    return _dynamicUses != null
-        ? _dynamicUses : const <DynamicUse>[];
+    return _dynamicUses != null ? _dynamicUses : const <DynamicUse>[];
   }
 
   void registerTypeUse(TypeUse typeUse) {
@@ -88,8 +80,7 @@
   }
 
   Iterable<TypeUse> get typeUses {
-    return _typeUses != null
-        ? _typeUses : const <TypeUse>[];
+    return _typeUses != null ? _typeUses : const <TypeUse>[];
   }
 
   void registerStaticUse(StaticUse staticUse) {
@@ -118,8 +109,7 @@
 
   @override
   Iterable<DynamicUse> get dynamicUses {
-    return _dynamicUses != null
-        ? _dynamicUses : worldImpact.dynamicUses;
+    return _dynamicUses != null ? _dynamicUses : worldImpact.dynamicUses;
   }
 
   void registerDynamicUse(DynamicUse dynamicUse) {
@@ -140,8 +130,7 @@
 
   @override
   Iterable<TypeUse> get typeUses {
-    return _typeUses != null
-        ? _typeUses : worldImpact.typeUses;
+    return _typeUses != null ? _typeUses : worldImpact.typeUses;
   }
 
   void registerStaticUse(StaticUse staticUse) {
@@ -185,10 +174,8 @@
   const ImpactStrategy();
 
   /// Applies [impact] to [visitor] for the [impactUseCase] of [element].
-  void visitImpact(Element element,
-                   WorldImpact impact,
-                   WorldImpactVisitor visitor,
-                   ImpactUseCase impactUseCase) {
+  void visitImpact(Element element, WorldImpact impact,
+      WorldImpactVisitor visitor, ImpactUseCase impactUseCase) {
     // Apply unconditionally.
     impact.apply(visitor);
   }
@@ -217,8 +204,8 @@
 
   WorldImpactVisitorImpl(
       {VisitUse<StaticUse> visitStaticUse,
-       VisitUse<DynamicUse> visitDynamicUse,
-       VisitUse<TypeUse> visitTypeUse})
+      VisitUse<DynamicUse> visitDynamicUse,
+      VisitUse<TypeUse> visitTypeUse})
       : _visitStaticUse = visitStaticUse,
         _visitDynamicUse = visitDynamicUse,
         _visitTypeUse = visitTypeUse;
@@ -244,4 +231,3 @@
     }
   }
 }
-
diff --git a/pkg/compiler/lib/src/use_unused_api.dart b/pkg/compiler/lib/src/use_unused_api.dart
index ed69c6f..d3578f7 100644
--- a/pkg/compiler/lib/src/use_unused_api.dart
+++ b/pkg/compiler/lib/src/use_unused_api.dart
@@ -45,9 +45,8 @@
 import 'util/util.dart' as util;
 import 'world.dart';
 
-import 'parser/partial_elements.dart' show
-    PartialClassElement,
-    PartialFunctionElement;
+import 'parser/partial_elements.dart'
+    show PartialClassElement, PartialFunctionElement;
 
 class ElementVisitor extends elements_visitor.BaseElementVisitor {
   visitElement(e, a) {}
@@ -93,36 +92,33 @@
 class NullConstantConstructorVisitor
     extends constants.ConstantConstructorVisitor {
   @override
-  visitGenerative(constants.GenerativeConstantConstructor constructor, arg) {
-  }
+  visitGenerative(constants.GenerativeConstantConstructor constructor, arg) {}
 
   @override
   visitRedirectingFactory(
-      constants.RedirectingFactoryConstantConstructor constructor, arg) {
-  }
+      constants.RedirectingFactoryConstantConstructor constructor, arg) {}
 
   @override
   visitRedirectingGenerative(
-      constants.RedirectingGenerativeConstantConstructor constructor, arg) {
-  }
+      constants.RedirectingGenerativeConstantConstructor constructor, arg) {}
 }
 
-void useConstant([constants.ConstantValue constant,
-                  constants.ConstantExpression expression,
-                  constants.ConstructedConstantExpression constructedConstant,
-                  constants.ConstantSystem cs,
-                  constants.Environment env]) {
+void useConstant(
+    [constants.ConstantValue constant,
+    constants.ConstantExpression expression,
+    constants.ConstructedConstantExpression constructedConstant,
+    constants.ConstantSystem cs,
+    constants.Environment env]) {
   constant.isObject;
   cs.isBool(constant);
   constructedConstant.computeInstanceType();
   constructedConstant.computeInstanceFields();
   expression.evaluate(null, null);
   new NullConstantConstructorVisitor()
-      ..visit(null, null)
-      ..visitGenerative(null, null)
-      ..visitRedirectingFactory(null, null)
-      ..visitRedirectingGenerative(null, null);
-
+    ..visit(null, null)
+    ..visitGenerative(null, null)
+    ..visitRedirectingFactory(null, null)
+    ..visitRedirectingGenerative(null, null);
 }
 
 void useNode(tree.Node node) {
@@ -246,12 +242,12 @@
   new ssa.HStatementSequenceInformation(null);
 }
 
-useIo([io.LineColumnMap map,
-       io.LineColumnProvider provider]) {
-  map..addFirst(null, null, null)
-     ..forEachLine(null)
-     ..getFirstElementsInLine(null)
-     ..forEachColumn(null, null);
+useIo([io.LineColumnMap map, io.LineColumnProvider provider]) {
+  map
+    ..addFirst(null, null, null)
+    ..forEachLine(null)
+    ..getFirstElementsInLine(null)
+    ..forEachColumn(null, null);
   provider.getOffset(null, null);
 }
 
@@ -275,11 +271,11 @@
 
 useElements(
     [elements.ClassElement e,
-     elements.Name n,
-     modelx.FieldElementX f,
-     PartialClassElement pce,
-     PartialFunctionElement pfe,
-     elements.LibraryElement l]) {
+    elements.Name n,
+    modelx.FieldElementX f,
+    PartialClassElement pce,
+    PartialFunctionElement pfe,
+    elements.LibraryElement l]) {
   e.lookupClassMember(null);
   e.lookupInterfaceMember(null);
   n.isAccessibleFrom(null);
@@ -290,23 +286,20 @@
 }
 
 useIr(ir_builder.IrBuilder builder) {
-  builder
-    ..buildStringConstant(null);
+  builder..buildStringConstant(null);
 }
 
 useCompiler(compiler.Compiler c) {
   c.libraryLoader
-      ..reset()
-      ..resetAsync(null)
-      ..lookupLibrary(null);
+    ..reset()
+    ..resetAsync(null)
+    ..lookupLibrary(null);
   c.forgetElement(null);
   c.backend.constantCompilerTask.copyConstantValues(null);
   c.currentlyInUserCode();
-
 }
 
-useTypes() {
-}
+useTypes() {}
 
 useCodeEmitterTask(js_emitter.CodeEmitterTask codeEmitterTask) {
   full.Emitter fullEmitter = codeEmitterTask.emitter;
@@ -332,7 +325,7 @@
 }
 
 class TreeVisitor1 extends tree_ir.ExpressionVisitor1
-                      with tree_ir.StatementVisitor1 {
+    with tree_ir.StatementVisitor1 {
   noSuchMethod(inv) {}
 }
 
diff --git a/pkg/compiler/lib/src/util/characters.dart b/pkg/compiler/lib/src/util/characters.dart
index 5961d07..60fe4e1 100644
--- a/pkg/compiler/lib/src/util/characters.dart
+++ b/pkg/compiler/lib/src/util/characters.dart
@@ -6,7 +6,7 @@
 
 const int $EOF = 0;
 const int $STX = 2;
-const int $BS  = 8;
+const int $BS = 8;
 const int $TAB = 9;
 const int $LF = 10;
 const int $VTAB = 11;
diff --git a/pkg/compiler/lib/src/util/command_line.dart b/pkg/compiler/lib/src/util/command_line.dart
index 8a32e67..87c38e9 100644
--- a/pkg/compiler/lib/src/util/command_line.dart
+++ b/pkg/compiler/lib/src/util/command_line.dart
@@ -7,16 +7,15 @@
 /// The accepted escapes in the input of the --batch processor.
 ///
 /// Contrary to Dart strings it does not contain hex escapes (\u or \x).
-Map<String, String> ESCAPE_MAPPING =
-    const {
-      "n": "\n",
-      "r": "\r",
-      "t": "\t",
-      "b": "\b",
-      "f": "\f",
-      "v": "\v",
-      "\\": "\\",
-    };
+Map<String, String> ESCAPE_MAPPING = const {
+  "n": "\n",
+  "r": "\r",
+  "t": "\t",
+  "b": "\b",
+  "f": "\f",
+  "v": "\v",
+  "\\": "\\",
+};
 
 /// Splits the line similar to how a shell would split arguments. If [windows]
 /// is `true` escapes will be handled like on the Windows command-line.
@@ -48,7 +47,7 @@
         throw new FormatException("Unfinished escape: $line");
       }
       if (windows) {
-        String next = line[i+1];
+        String next = line[i + 1];
         if (next == '"' || next == r'\') {
           buffer.write(next);
           i++;
@@ -75,4 +74,3 @@
   if (buffer.isNotEmpty) result.add(buffer.toString());
   return result;
 }
-
diff --git a/pkg/compiler/lib/src/util/emptyset.dart b/pkg/compiler/lib/src/util/emptyset.dart
index d70376f..da9942c 100644
--- a/pkg/compiler/lib/src/util/emptyset.dart
+++ b/pkg/compiler/lib/src/util/emptyset.dart
@@ -15,7 +15,7 @@
 
   get _immutableError => throw new UnsupportedError("EmptySet is immutable");
 
-  bool add (E element) => _immutableError;
+  bool add(E element) => _immutableError;
   void addAll(Iterable<E> elements) => _immutableError;
 
   E lookup(E element) => null;
diff --git a/pkg/compiler/lib/src/util/enumset.dart b/pkg/compiler/lib/src/util/enumset.dart
index 953a873..7d2f600 100644
--- a/pkg/compiler/lib/src/util/enumset.dart
+++ b/pkg/compiler/lib/src/util/enumset.dart
@@ -196,4 +196,4 @@
       return _current != null;
     }
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/util/indentation.dart b/pkg/compiler/lib/src/util/indentation.dart
index ddbeafa..9709f78 100644
--- a/pkg/compiler/lib/src/util/indentation.dart
+++ b/pkg/compiler/lib/src/util/indentation.dart
@@ -25,12 +25,12 @@
   /// The indentation unit, defaulting to two spaces. May be overwritten.
   String _indentationUnit = "  ";
   String get indentationUnit => _indentationUnit;
-         set indentationUnit(String value) {
-           if (value != _indentationUnit) {
-             _indentationUnit = value;
-             _indentList = <String>[""];
-           }
-         }
+  set indentationUnit(String value) {
+    if (value != _indentationUnit) {
+      _indentationUnit = value;
+      _indentList = <String>[""];
+    }
+  }
 
   /// Increases the current level of indentation.
   void indentMore() {
@@ -53,7 +53,6 @@
 }
 
 abstract class Tagging<N> implements Indentation {
-
   StringBuffer sb = new StringBuffer();
   Link<String> tagStack = const Link<String>();
 
diff --git a/pkg/compiler/lib/src/util/link.dart b/pkg/compiler/lib/src/util/link.dart
index f84c2c8..58d2cb9 100644
--- a/pkg/compiler/lib/src/util/link.dart
+++ b/pkg/compiler/lib/src/util/link.dart
@@ -16,10 +16,9 @@
 
   Iterator<T> get iterator => new LinkIterator<T>(this);
 
-  void printOn(StringBuffer buffer, [separatedBy]) {
-  }
+  void printOn(StringBuffer buffer, [separatedBy]) {}
 
-  List<T> toList({ bool growable: true }) {
+  List<T> toList({bool growable: true}) {
     List<T> result;
     if (!growable) {
       result = new List<T>(slowLength());
@@ -36,12 +35,12 @@
 
   /// Lazily maps over this linked list, returning an [Iterable].
   Iterable map(dynamic fn(T item)) {
-    return new MappedLinkIterable<T,dynamic>(this, fn);
+    return new MappedLinkIterable<T, dynamic>(this, fn);
   }
 
   /// Invokes `fn` for every item in the linked list and returns the results
   /// in a [List].
-  List mapToList(dynamic fn(T item), { bool growable: true }) {
+  List mapToList(dynamic fn(T item), {bool growable: true}) {
     List result;
     if (!growable) {
       result = new List(slowLength());
@@ -74,7 +73,7 @@
   void forEach(void f(T element)) {}
 
   bool operator ==(other) {
-    if (other is !Link<T>) return false;
+    if (other is! Link<T>) return false;
     return other.isEmpty;
   }
 
@@ -113,7 +112,7 @@
   ///
   /// Returns true for the empty list.
   bool every(bool f(T)) {
-    for (Link<T> link = this; !link.isEmpty; link = link.tail){
+    for (Link<T> link = this; !link.isEmpty; link = link.tail) {
       if (!f(link.head)) return false;
     }
     return true;
@@ -125,7 +124,7 @@
   // Unsupported Iterable<T> methods.
   //
   bool any(bool f(T e)) => _unsupported('any');
-  T elementAt(int i) =>  _unsupported('elementAt');
+  T elementAt(int i) => _unsupported('elementAt');
   Iterable expand(Iterable f(T e)) => _unsupported('expand');
   T firstWhere(bool f(T e), {T orElse()}) => _unsupported('firstWhere');
   fold(initialValue, combine(value, T element)) => _unsupported('fold');
diff --git a/pkg/compiler/lib/src/util/link_implementation.dart b/pkg/compiler/lib/src/util/link_implementation.dart
index 973ef50..ac06c17 100644
--- a/pkg/compiler/lib/src/util/link_implementation.dart
+++ b/pkg/compiler/lib/src/util/link_implementation.dart
@@ -52,7 +52,7 @@
   MappedLinkIterable(this._link, this._transformation);
 
   Iterator<T> get iterator {
-    return new MappedLinkIterator<S,T>(_link, _transformation);
+    return new MappedLinkIterator<S, T>(_link, _transformation);
   }
 }
 
@@ -61,7 +61,7 @@
   Link<T> tail;
 
   LinkEntry(T this.head, [Link<T> tail])
-    : this.tail = ((tail == null) ? new Link<T>() : tail);
+      : this.tail = ((tail == null) ? new Link<T>() : tail);
 
   Link<T> prepend(T element) {
     // TODO(ahe): Use new Link<T>, but this cost 8% performance on VM.
@@ -103,7 +103,7 @@
 
   Link<T> skip(int n) {
     Link<T> link = this;
-    for (int i = 0 ; i < n ; i++) {
+    for (int i = 0; i < n; i++) {
       if (link.isEmpty) {
         throw new RangeError('Index $n out of range');
       }
@@ -122,7 +122,7 @@
   }
 
   bool operator ==(other) {
-    if (other is !Link<T>) return false;
+    if (other is! Link<T>) return false;
     Link<T> myElements = this;
     while (myElements.isNotEmpty && other.isNotEmpty) {
       if (myElements.head != other.head) {
diff --git a/pkg/compiler/lib/src/util/maplet.dart b/pkg/compiler/lib/src/util/maplet.dart
index 455435b..086273c 100644
--- a/pkg/compiler/lib/src/util/maplet.dart
+++ b/pkg/compiler/lib/src/util/maplet.dart
@@ -101,7 +101,7 @@
         list[CAPACITY + 1] = value;
         _key = list;
         _value = null;
-        _extra = 2;  // Two elements.
+        _extra = 2; // Two elements.
       }
     } else if (_MARKER == _extra) {
       _key[key] = value;
@@ -277,4 +277,4 @@
     _current = null;
     return false;
   }
-}
\ No newline at end of file
+}
diff --git a/pkg/compiler/lib/src/util/setlet.dart b/pkg/compiler/lib/src/util/setlet.dart
index f497561e..cd654c1 100644
--- a/pkg/compiler/lib/src/util/setlet.dart
+++ b/pkg/compiler/lib/src/util/setlet.dart
@@ -86,7 +86,7 @@
         list[0] = _contents;
         list[1] = element;
         _contents = list;
-        _extra = 2;  // Two elements.
+        _extra = 2; // Two elements.
         return true;
       }
     } else if (_MARKER == _extra) {
@@ -130,7 +130,9 @@
         // make sure we don't keep extra stuff alive.
         while (copyTo < CAPACITY) _contents[copyTo++] = null;
       } else {
-        _contents = new Set<E>()..addAll(_contents)..add(element);
+        _contents = new Set<E>()
+          ..addAll(_contents)
+          ..add(element);
         _extra = _MARKER;
       }
       return true;
@@ -233,7 +235,8 @@
   bool containsAll(Iterable<E> other) {
     for (E e in other) {
       if (!this.contains(e)) return false;
-    };
+    }
+    ;
     return true;
   }
 
diff --git a/pkg/compiler/lib/src/util/uri_extras.dart b/pkg/compiler/lib/src/util/uri_extras.dart
index aa8cdcf..5164378 100644
--- a/pkg/compiler/lib/src/util/uri_extras.dart
+++ b/pkg/compiler/lib/src/util/uri_extras.dart
@@ -32,13 +32,13 @@
   if (base.userInfo == uri.userInfo &&
       equalsNCS(base.host, uri.host) &&
       base.port == uri.port &&
-      uri.query == "" && uri.fragment == "") {
+      uri.query == "" &&
+      uri.fragment == "") {
     if (normalize(uri.path).startsWith(normalize(base.path))) {
       return uri.path.substring(base.path.lastIndexOf('/') + 1);
     }
 
-    if (!base.path.startsWith('/') ||
-        !uri.path.startsWith('/')) {
+    if (!base.path.startsWith('/') || !uri.path.startsWith('/')) {
       return uri.toString();
     }
 
@@ -47,7 +47,7 @@
     int common = 0;
     int length = min(uriParts.length, baseParts.length);
     while (common < length &&
-           normalize(uriParts[common]) == normalize(baseParts[common])) {
+        normalize(uriParts[common]) == normalize(baseParts[common])) {
       common++;
     }
     if (common == 1 || (isWindows && common == 2)) {
diff --git a/pkg/compiler/lib/src/util/util.dart b/pkg/compiler/lib/src/util/util.dart
index a91f6cd..102ca9e 100644
--- a/pkg/compiler/lib/src/util/util.dart
+++ b/pkg/compiler/lib/src/util/util.dart
@@ -116,9 +116,9 @@
       } else if (code == $LS) {
         // This Unicode line terminator and $PS are invalid in JS string
         // literals.
-        addCodeUnitEscaped(buffer, $LS);  // 0x2028.
+        addCodeUnitEscaped(buffer, $LS); // 0x2028.
       } else if (code == $PS) {
-        addCodeUnitEscaped(buffer, $PS);  // 0x2029.
+        addCodeUnitEscaped(buffer, $PS); // 0x2029.
       } else if (code == $BACKSLASH) {
         buffer.write(r'\\');
       } else {
@@ -143,8 +143,13 @@
 
   for (int i = 0; i < string.length; i++) {
     int code = string.codeUnitAt(i);
-    if (code < 0x20 || code == $DEL || code == $DQ || code == $LS ||
-        code == $PS || code == $BACKSLASH || code >= 0x80) {
+    if (code < 0x20 ||
+        code == $DEL ||
+        code == $DQ ||
+        code == $LS ||
+        code == $PS ||
+        code == $BACKSLASH ||
+        code >= 0x80) {
       writeEscapedOn(string, buffer);
       return;
     }
@@ -153,20 +158,22 @@
 }
 
 int computeHashCode(part1, [part2, part3, part4, part5]) {
-  return (part1.hashCode
-          ^ part2.hashCode
-          ^ part3.hashCode
-          ^ part4.hashCode
-          ^ part5.hashCode) & 0x3fffffff;
+  return (part1.hashCode ^
+          part2.hashCode ^
+          part3.hashCode ^
+          part4.hashCode ^
+          part5.hashCode) &
+      0x3fffffff;
 }
 
-String modifiersToString({bool isStatic: false,
-                          bool isAbstract: false,
-                          bool isFinal: false,
-                          bool isVar: false,
-                          bool isConst: false,
-                          bool isFactory: false,
-                          bool isExternal: false}) {
+String modifiersToString(
+    {bool isStatic: false,
+    bool isAbstract: false,
+    bool isFinal: false,
+    bool isVar: false,
+    bool isConst: false,
+    bool isFactory: false,
+    bool isExternal: false}) {
   LinkBuilder<String> builder = new LinkBuilder<String>();
   if (isStatic) builder.addLast('static');
   if (isAbstract) builder.addLast('abstract');
@@ -197,10 +204,9 @@
   String toString() => '($a,$b)';
 }
 
-
 int longestCommonPrefixLength(List a, List b) {
   int index = 0;
-  for ( ; index < a.length && index < b.length; index++) {
+  for (; index < a.length && index < b.length; index++) {
     if (a[index] != b[index]) {
       break;
     }
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index a7dbad0..f217263 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -4,34 +4,27 @@
 
 library dart2js.world;
 
-import 'closure.dart' show
-    SynthesizedCallMethodElementX;
+import 'closure.dart' show SynthesizedCallMethodElementX;
 import 'common.dart';
-import 'common/backend_api.dart' show
-    Backend;
-import 'compiler.dart' show
-    Compiler;
-import 'core_types.dart' show
-    CoreClasses;
+import 'common/backend_api.dart' show Backend;
+import 'compiler.dart' show Compiler;
+import 'core_types.dart' show CoreClasses;
 import 'dart_types.dart';
-import 'elements/elements.dart' show
-    ClassElement,
-    Element,
-    FunctionElement,
-    MixinApplicationElement,
-    TypedefElement,
-    VariableElement;
+import 'elements/elements.dart'
+    show
+        ClassElement,
+        Element,
+        FunctionElement,
+        MixinApplicationElement,
+        TypedefElement,
+        VariableElement;
 import 'ordered_typeset.dart';
 import 'types/types.dart' as ti;
 import 'universe/class_set.dart';
-import 'universe/function_set.dart' show
-    FunctionSet;
-import 'universe/selector.dart' show
-    Selector;
-import 'universe/side_effects.dart' show
-    SideEffects;
-import 'util/util.dart' show
-    Link;
+import 'universe/function_set.dart' show FunctionSet;
+import 'universe/selector.dart' show Selector;
+import 'universe/side_effects.dart' show SideEffects;
+import 'util/util.dart' show Link;
 
 abstract class ClassWorld {
   // TODO(johnniwinther): Refine this into a `BackendClasses` interface.
@@ -99,8 +92,8 @@
 
   /// Applies [f] to each live class that extend [cls] _not_ including [cls]
   /// itself.
-  void forEachStrictSubclassOf(ClassElement cls,
-                               IterationStep f(ClassElement cls));
+  void forEachStrictSubclassOf(
+      ClassElement cls, IterationStep f(ClassElement cls));
 
   /// Returns `true` if [predicate] applies to any live class that extend [cls]
   /// _not_ including [cls] itself.
@@ -120,8 +113,8 @@
 
   /// Applies [f] to each live class that implements [cls] _not_ including [cls]
   /// itself.
-  void forEachStrictSubtypeOf(ClassElement cls,
-                              IterationStep f(ClassElement cls));
+  void forEachStrictSubtypeOf(
+      ClassElement cls, IterationStep f(ClassElement cls));
 
   /// Returns `true` if [predicate] applies to any live class that implements
   /// [cls] _not_ including [cls] itself.
@@ -159,8 +152,8 @@
   bool isUsedAsMixin(ClassElement cls);
 
   /// Returns `true` if any live class that mixes in [cls] implements [type].
-  bool hasAnySubclassOfMixinUseThatImplements(ClassElement cls,
-                                              ClassElement type);
+  bool hasAnySubclassOfMixinUseThatImplements(
+      ClassElement cls, ClassElement type);
 
   /// Returns `true` if any live class that mixes in [mixin] is also a subclass
   /// of [superclass].
@@ -195,16 +188,17 @@
       new List<Map<ClassElement, ti.TypeMask>>.filled(8, null);
 
   bool checkInvariants(ClassElement cls, {bool mustBeInstantiated: true}) {
-    return
-      invariant(cls, cls.isDeclaration,
+    return invariant(cls, cls.isDeclaration,
                 message: '$cls must be the declaration.') &&
-      invariant(cls, cls.isResolved,
-                message: '$cls must be resolved.')/* &&
+            invariant(cls, cls.isResolved,
+                message:
+                    '$cls must be resolved.') /* &&
       // TODO(johnniwinther): Reinsert this or similar invariant.
       (!mustBeInstantiated ||
        invariant(cls, isInstantiated(cls),
-                 message: '$cls is not instantiated.'))*/;
- }
+                 message: '$cls is not instantiated.'))*/
+        ;
+  }
 
   /// Returns `true` if [x] is a subtype of [y], that is, if [x] implements an
   /// instance of [y].
@@ -261,8 +255,7 @@
   Iterable<ClassElement> subclassesOf(ClassElement cls) {
     ClassHierarchyNode hierarchy = _classHierarchyNodes[cls.declaration];
     if (hierarchy == null) return const <ClassElement>[];
-    return hierarchy.subclassesByMask(
-        ClassHierarchyNode.DIRECTLY_INSTANTIATED);
+    return hierarchy.subclassesByMask(ClassHierarchyNode.DIRECTLY_INSTANTIATED);
   }
 
   /// Returns an iterable over the directly instantiated classes that extend
@@ -270,8 +263,8 @@
   Iterable<ClassElement> strictSubclassesOf(ClassElement cls) {
     ClassHierarchyNode subclasses = _classHierarchyNodes[cls.declaration];
     if (subclasses == null) return const <ClassElement>[];
-    return subclasses.subclassesByMask(
-        ClassHierarchyNode.DIRECTLY_INSTANTIATED, strict: true);
+    return subclasses.subclassesByMask(ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+        strict: true);
   }
 
   /// Returns the number of live classes that extend [cls] _not_
@@ -284,13 +277,11 @@
 
   /// Applies [f] to each live class that extend [cls] _not_ including [cls]
   /// itself.
-  void forEachStrictSubclassOf(ClassElement cls,
-                               IterationStep f(ClassElement cls)) {
+  void forEachStrictSubclassOf(
+      ClassElement cls, IterationStep f(ClassElement cls)) {
     ClassHierarchyNode subclasses = _classHierarchyNodes[cls.declaration];
     if (subclasses == null) return;
-    subclasses.forEachSubclass(
-        f,
-        ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+    subclasses.forEachSubclass(f, ClassHierarchyNode.DIRECTLY_INSTANTIATED,
         strict: true);
   }
 
@@ -300,8 +291,7 @@
     ClassHierarchyNode subclasses = _classHierarchyNodes[cls.declaration];
     if (subclasses == null) return false;
     return subclasses.anySubclass(
-        predicate,
-        ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+        predicate, ClassHierarchyNode.DIRECTLY_INSTANTIATED,
         strict: true);
   }
 
@@ -323,8 +313,7 @@
     if (classSet == null) {
       return const <ClassElement>[];
     } else {
-      return classSet.subtypesByMask(
-          ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+      return classSet.subtypesByMask(ClassHierarchyNode.DIRECTLY_INSTANTIATED,
           strict: true);
     }
   }
@@ -339,13 +328,11 @@
 
   /// Applies [f] to each live class that implements [cls] _not_ including [cls]
   /// itself.
-  void forEachStrictSubtypeOf(ClassElement cls,
-                              IterationStep f(ClassElement cls)) {
+  void forEachStrictSubtypeOf(
+      ClassElement cls, IterationStep f(ClassElement cls)) {
     ClassSet classSet = _classSets[cls.declaration];
     if (classSet == null) return;
-    classSet.forEachSubtype(
-        f,
-        ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+    classSet.forEachSubtype(f, ClassHierarchyNode.DIRECTLY_INSTANTIATED,
         strict: true);
   }
 
@@ -355,8 +342,7 @@
     ClassSet classSet = _classSets[cls.declaration];
     if (classSet == null) return false;
     return classSet.anySubtype(
-        predicate,
-        ClassHierarchyNode.DIRECTLY_INSTANTIATED,
+        predicate, ClassHierarchyNode.DIRECTLY_INSTANTIATED,
         strict: true);
   }
 
@@ -406,14 +392,14 @@
   ClassElement getLubOfInstantiatedSubclasses(ClassElement cls) {
     ClassHierarchyNode hierarchy = _classHierarchyNodes[cls.declaration];
     return hierarchy != null
-        ? hierarchy.getLubOfInstantiatedSubclasses() : null;
+        ? hierarchy.getLubOfInstantiatedSubclasses()
+        : null;
   }
 
   @override
   ClassElement getLubOfInstantiatedSubtypes(ClassElement cls) {
     ClassSet classSet = _classSets[cls.declaration];
-    return classSet != null
-        ? classSet.getLubOfInstantiatedSubtypes() : null;
+    return classSet != null ? classSet.getLubOfInstantiatedSubtypes() : null;
   }
 
   /// Returns an iterable over the common supertypes of the [classes].
@@ -440,8 +426,8 @@
 
     List<ClassElement> commonSupertypes = <ClassElement>[];
     OUTER: for (Link<DartType> link = typeSet[depth];
-                link.head.element != objectClass;
-                link = link.tail) {
+        link.head.element != objectClass;
+        link = link.tail) {
       ClassElement cls = link.head.element;
       for (Link<OrderedTypeSet> link = otherTypeSets;
           !link.isEmpty;
@@ -497,10 +483,10 @@
   }
 
   /// Returns `true` if any live class that mixes in [cls] implements [type].
-  bool hasAnySubclassOfMixinUseThatImplements(ClassElement cls,
-                                              ClassElement type) {
-    return mixinUsesOf(cls).any(
-        (use) => hasAnySubclassThatImplements(use, type));
+  bool hasAnySubclassOfMixinUseThatImplements(
+      ClassElement cls, ClassElement type) {
+    return mixinUsesOf(cls)
+        .any((use) => hasAnySubclassThatImplements(use, type));
   }
 
   /// Returns `true` if any live class that mixes in [mixin] is also a subclass
@@ -510,8 +496,8 @@
   }
 
   /// Returns `true` if any subclass of [superclass] implements [type].
-  bool hasAnySubclassThatImplements(ClassElement superclass,
-                                    ClassElement type) {
+  bool hasAnySubclassThatImplements(
+      ClassElement superclass, ClassElement type) {
     Set<ClassElement> subclasses = typesImplementedBySubclassesOf(superclass);
     if (subclasses == null) return false;
     return subclasses.contains(type);
@@ -536,8 +522,7 @@
   // distinct sets to make class hierarchy analysis faster.
   final Map<ClassElement, ClassHierarchyNode> _classHierarchyNodes =
       <ClassElement, ClassHierarchyNode>{};
-  final Map<ClassElement, ClassSet> _classSets =
-        <ClassElement, ClassSet>{};
+  final Map<ClassElement, ClassSet> _classSets = <ClassElement, ClassSet>{};
 
   final Set<Element> sideEffectsFreeElements = new Set<Element>();
 
@@ -638,8 +623,7 @@
     }
   }
 
-  void _updateClassHierarchyNodeForClass(
-      ClassElement cls,
+  void _updateClassHierarchyNodeForClass(ClassElement cls,
       {bool directlyInstantiated: false}) {
     ClassHierarchyNode node = getClassHierarchyNode(cls);
     _updateSuperClassHierarchyNodeForClass(node);
@@ -698,14 +682,13 @@
     return sb.toString();
   }
 
-  void registerMixinUse(MixinApplicationElement mixinApplication,
-                        ClassElement mixin) {
+  void registerMixinUse(
+      MixinApplicationElement mixinApplication, ClassElement mixin) {
     // TODO(johnniwinther): Add map restricted to live classes.
     // We don't support patch classes as mixin.
     assert(mixin.isDeclaration);
-    List<MixinApplicationElement> users =
-        _mixinUses.putIfAbsent(mixin, () =>
-                               new List<MixinApplicationElement>());
+    List<MixinApplicationElement> users = _mixinUses.putIfAbsent(
+        mixin, () => new List<MixinApplicationElement>());
     users.add(mixinApplication);
   }
 
@@ -725,17 +708,14 @@
   }
 
   Element locateSingleElement(Selector selector, ti.TypeMask mask) {
-    mask = mask == null
-        ? compiler.typesTask.dynamicType
-        : mask;
+    mask = mask == null ? compiler.typesTask.dynamicType : mask;
     return mask.locateSingleElement(selector, mask, compiler);
   }
 
   ti.TypeMask extendMaskIfReachesAll(Selector selector, ti.TypeMask mask) {
     bool canReachAll = true;
     if (mask != null) {
-      canReachAll =
-          compiler.enabledInvokeOn &&
+      canReachAll = compiler.enabledInvokeOn &&
           mask.needsNoSuchMethodHandling(selector, this);
     }
     return canReachAll ? compiler.typesTask.dynamicType : mask;
@@ -764,7 +744,7 @@
     }
     if (element.isInstanceMember) {
       return !compiler.resolverWorld.hasInvokedSetter(element, this) &&
-             !compiler.resolverWorld.fieldSetters.contains(element);
+          !compiler.resolverWorld.fieldSetters.contains(element);
     }
     return false;
   }
diff --git a/pkg/compiler/samples/compile_loop/compile_loop.dart b/pkg/compiler/samples/compile_loop/compile_loop.dart
index 9a2e44e..097d046 100644
--- a/pkg/compiler/samples/compile_loop/compile_loop.dart
+++ b/pkg/compiler/samples/compile_loop/compile_loop.dart
@@ -28,27 +28,24 @@
     // TODO(ahe): Use new Future.error.
     throw new Exception('Error: Cannot read: $uri');
   }
-  void handler(Uri uri, int begin, int end,
-               String message, compiler.Diagnostic kind) {
+  void handler(
+      Uri uri, int begin, int end, String message, compiler.Diagnostic kind) {
     // TODO(ahe): Remove dart:io import from
     // ../../lib/src/source_file_provider.dart and use
     // FormattingDiagnosticHandler instead.
-    print({ 'uri': '$uri',
-            'begin': begin,
-            'end': end,
-            'message': message,
-            'kind': kind.name });
+    print({
+      'uri': '$uri',
+      'begin': begin,
+      'end': end,
+      'message': message,
+      'kind': kind.name
+    });
     if (kind == compiler.Diagnostic.ERROR) {
       throw new Exception('Unexpected error occurred.');
     }
   }
-  return compiler.compile(
-      Uri.parse('memory:/main.dart'),
-      Uri.parse('sdk:/sdk/'),
-      null,
-      inputProvider,
-      handler,
-      []);
+  return compiler.compile(Uri.parse('memory:/main.dart'),
+      Uri.parse('sdk:/sdk/'), null, inputProvider, handler, []);
 }
 
 int iterations = 10;
diff --git a/pkg/compiler/samples/darttags/darttags.dart b/pkg/compiler/samples/darttags/darttags.dart
index 84b7562..0333c69 100644
--- a/pkg/compiler/samples/darttags/darttags.dart
+++ b/pkg/compiler/samples/darttags/darttags.dart
@@ -35,10 +35,8 @@
 import 'package:sdk_library_metadata/libraries.dart'
     show libraries, LibraryInfo;
 
-import 'package:compiler/src/mirrors/analyze.dart'
-    show analyze;
-import 'package:compiler/src/mirrors/dart2js_mirrors.dart'
-    show BackDoor;
+import 'package:compiler/src/mirrors/analyze.dart' show analyze;
+import 'package:compiler/src/mirrors/dart2js_mirrors.dart' show BackDoor;
 import 'package:compiler/src/mirrors/mirrors_util.dart' show nameOf;
 
 import 'package:compiler/src/filenames.dart';
@@ -59,15 +57,12 @@
 Uri outputUri;
 
 main(List<String> arguments) {
-  handler = new FormattingDiagnosticHandler()
-      ..throwOnError = true;
+  handler = new FormattingDiagnosticHandler()..throwOnError = true;
 
-  outputUri =
-      handler.provider.cwd.resolve(nativeToUriPath(arguments.first));
+  outputUri = handler.provider.cwd.resolve(nativeToUriPath(arguments.first));
   output = new File(arguments.first).openSync(mode: FileMode.WRITE);
 
-  Uri myLocation =
-      handler.provider.cwd.resolveUri(Platform.script);
+  Uri myLocation = handler.provider.cwd.resolveUri(Platform.script);
 
   List<Uri> uris = <Uri>[];
 
@@ -87,8 +82,8 @@
   // Prepend "dart:" to the names.
   uris.addAll(names.map((String name) => Uri.parse('dart:$name')));
 
-  Uri platformConfigUri = myLocation.resolve(SDK_ROOT)
-      .resolve("lib/dart2js_shared_sdk");
+  Uri platformConfigUri =
+      myLocation.resolve(SDK_ROOT).resolve("lib/dart2js_shared_sdk");
   Uri packageRoot = Uri.base.resolve(Platform.packageRoot);
 
   analyze(uris, platformConfigUri, packageRoot, handler.provider, handler)
@@ -189,8 +184,7 @@
   }
 
   void writeOn(StringBuffer buffer, String tagname) {
-    buffer.write(
-        '${tag_definition_text}\x7f${tagname}'
+    buffer.write('${tag_definition_text}\x7f${tagname}'
         '\x01${line_number},${byte_offset}\n');
   }
 }
diff --git a/pkg/compiler/samples/jsonify/jsonify.dart b/pkg/compiler/samples/jsonify/jsonify.dart
index 6e1e728..db8020d 100644
--- a/pkg/compiler/samples/jsonify/jsonify.dart
+++ b/pkg/compiler/samples/jsonify/jsonify.dart
@@ -11,10 +11,8 @@
 import 'package:sdk_library_metadata/libraries.dart'
     show libraries, LibraryInfo;
 
-import '../../lib/src/mirrors/analyze.dart'
-    show analyze;
-import '../../lib/src/mirrors/dart2js_mirrors.dart'
-    show BackDoor;
+import '../../lib/src/mirrors/analyze.dart' show analyze;
+import '../../lib/src/mirrors/dart2js_mirrors.dart' show BackDoor;
 
 import '../../lib/src/filenames.dart';
 import '../../lib/src/source_file_provider.dart';
@@ -36,18 +34,14 @@
     const bool.fromEnvironment('outputJson', defaultValue: false);
 
 main(List<String> arguments) {
-  handler = new FormattingDiagnosticHandler()
-      ..throwOnError = true;
+  handler = new FormattingDiagnosticHandler()..throwOnError = true;
 
-  outputUri =
-      handler.provider.cwd.resolve(nativeToUriPath(arguments.first));
+  outputUri = handler.provider.cwd.resolve(nativeToUriPath(arguments.first));
   output = new File(arguments.first).openSync(mode: FileMode.WRITE);
 
-  Uri myLocation =
-      handler.provider.cwd.resolveUri(Platform.script);
+  Uri myLocation = handler.provider.cwd.resolveUri(Platform.script);
 
-  Uri packageRoot =
-      handler.provider.cwd.resolve(Platform.packageRoot);
+  Uri packageRoot = handler.provider.cwd.resolve(Platform.packageRoot);
 
   Uri libraryRoot = myLocation.resolve(SDK_ROOT);
 
@@ -87,9 +81,11 @@
     }
   });
 
-  for (String filename in ["dart_client.platform",
-                           "dart_server.platform",
-                           "dart_shared.platform"]) {
+  for (String filename in [
+    "dart_client.platform",
+    "dart_server.platform",
+    "dart_shared.platform"
+  ]) {
     futures.add(mapUri(sdkRoot.resolve('sdk/lib/$filename')));
   }
 
diff --git a/pkg/compiler/tool/track_memory.dart b/pkg/compiler/tool/track_memory.dart
index effd92f..c5f5d04 100644
--- a/pkg/compiler/tool/track_memory.dart
+++ b/pkg/compiler/tool/track_memory.dart
@@ -63,15 +63,11 @@
 }
 
 /// Send a message to the vm service.
-Future _sendMessage(String method, [Map args= const {}]) {
+Future _sendMessage(String method, [Map args = const {}]) {
   var id = _requestId++;
   _pendingResponses[id] = new Completer();
-  socket.add(JSON.encode({
-      'jsonrpc': '2.0',
-      'id': '$id',
-      'method': '$method',
-      'params': args,
-    }));
+  socket.add(JSON.encode(
+      {'jsonrpc': '2.0', 'id': '$id', 'method': '$method', 'params': args,}));
   return _pendingResponses[id].future;
 }
 
@@ -101,7 +97,8 @@
   var isolateId = json['params']['event']['isolate']['id'];
   if (json['params']['event']['kind'] == 'PauseStart') {
     _resumeIsolate(isolateId);
-  } if (json['params']['event']['kind'] == 'PauseExit') {
+  }
+  if (json['params']['event']['kind'] == 'PauseExit') {
     _resumeIsolate(isolateId);
   }
 }
diff --git a/pkg/meta/CHANGELOG.md b/pkg/meta/CHANGELOG.md
index 2420295..b7c6b01 100644
--- a/pkg/meta/CHANGELOG.md
+++ b/pkg/meta/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.12.0
+* Introduce `@optionalTypeArgs` annotation for classes whose type arguments are to be treated as optional.
+
+## 0.11.0
+* Added new `Required` constructor with a means to specify a reason to explain why a parameter is required.
+
 ## 0.10.0
 * Introduce `@factory` annotation for methods that must either be abstract or
 must return a newly allocated object.
diff --git a/pkg/meta/lib/meta.dart b/pkg/meta/lib/meta.dart
index 16411b5..b8142fd 100644
--- a/pkg/meta/lib/meta.dart
+++ b/pkg/meta/lib/meta.dart
@@ -56,6 +56,12 @@
 ///   without invoking the overridden method.
 const _MustCallSuper mustCallSuper = const _MustCallSuper();
 
+/// Used to annotate a class declaration `C`. Indicates that any type arguments
+/// declared on `C` are to be treated as optional.  Tools such as the analyzer
+/// and linter can use this information to suppress warnings that would
+/// otherwise require type arguments to be provided for instances of `C`.
+const _OptionalTypeArgs optionalTypeArgs = const _OptionalTypeArgs();
+
 /// Used to annotate an instance member (method, getter, setter, operator, or
 /// field) `m` in a class `C`. If the annotation is on a field it applies to the
 /// getter, and setter if appropriate, that are induced by the field. Indicates
@@ -117,6 +123,10 @@
   const _MustCallSuper();
 }
 
+class _OptionalTypeArgs {
+  const _OptionalTypeArgs();
+}
+
 class _Protected {
   const _Protected();
 }
diff --git a/pkg/meta/pubspec.yaml b/pkg/meta/pubspec.yaml
index abcbc8d..d2f5506 100644
--- a/pkg/meta/pubspec.yaml
+++ b/pkg/meta/pubspec.yaml
@@ -1,5 +1,5 @@
 name: meta
-version: 0.10.0
+version: 0.12.0
 author: Dart Team <misc@dartlang.org>
 homepage: http://www.dartlang.org
 description: >
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 8062b73..c991ab2 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -85,9 +85,11 @@
 analyzer/test/src/context/context_test: Pass, Timeout # dartbug.com/23658
 analyzer/test/src/dart/ast/utilities_test: Pass, Slow # Issue 24914
 analyzer/test/src/dart/constant/evaluation_test: Pass, Slow # Issue 24914
+analyzer/test/src/dart/constant/value_test: Pass, Slow # Issue 24914
 analyzer/test/src/dart/element/element_test: Pass, Slow # Issue 24914
 analyzer/test/src/summary/incremental_cache_test: Pass, Slow # Issue 24914
 analyzer/test/src/summary/index_unit_test: Pass, Slow # Issue 24914
+analyzer/test/src/summary/linker_test: Pass, Slow # Issue 24914
 analyzer/test/src/summary/prelinker_test: Pass, Slow # Issue 24914
 analyzer/test/src/summary/resynthesize_ast_test: Pass, Slow
 analyzer/test/src/summary/resynthesize_strong_test: Pass, Slow
diff --git a/runtime/bin/zlib.gyp b/runtime/bin/zlib.gyp
index 98555f9f..584f0ef 100644
--- a/runtime/bin/zlib.gyp
+++ b/runtime/bin/zlib.gyp
@@ -64,11 +64,6 @@
               '<(zlib_path)/.',
         ],
       },
-      'conditions': [
-        ['OS!="win"', {
-          'product_name': 'chrome_zlib',
-        }],
-      ],
     },
   ],
 }
diff --git a/runtime/lib/convert_patch.dart b/runtime/lib/convert_patch.dart
index 6d83969..3c50f2a 100644
--- a/runtime/lib/convert_patch.dart
+++ b/runtime/lib/convert_patch.dart
@@ -39,13 +39,14 @@
   }
 }
 
-class _JsonUtf8Decoder extends Converter<List<int>, Object> {
+class _JsonUtf8Decoder extends
+    ChunkedConverter<List<int>, Object, List<int>, Object> {
   final _Reviver _reviver;
   final bool _allowMalformed;
 
   _JsonUtf8Decoder(this._reviver, this._allowMalformed);
 
-  dynamic convert(List<int> input) {
+  Object convert(List<int> input) {
     var parser = _JsonUtf8DecoderSink._createParser(_reviver, _allowMalformed);
     parser.chunk = input;
     parser.chunkEnd = input.length;
diff --git a/runtime/lib/core_sources.gypi b/runtime/lib/core_sources.gypi
index bef056e..dd00af4 100644
--- a/runtime/lib/core_sources.gypi
+++ b/runtime/lib/core_sources.gypi
@@ -38,8 +38,6 @@
     'lib_prefix.dart',
     'map_patch.dart',
     'null_patch.dart',
-    'num.cc',
-    'num.dart',
     'object.cc',
     'object_patch.dart',
     'regexp.cc',
diff --git a/runtime/lib/double.cc b/runtime/lib/double.cc
index dbeb447..2706269 100644
--- a/runtime/lib/double.cc
+++ b/runtime/lib/double.cc
@@ -230,6 +230,14 @@
 }
 
 
+DEFINE_NATIVE_ENTRY(Double_toString, 1) {
+  const Number& number = Number::CheckedHandle(arguments->NativeArgAt(0));
+  Heap::Space space = isolate->heap()->ShouldPretenure(kOneByteStringCid) ?
+      Heap::kPretenured : Heap::kNew;
+  return number.ToString(space);
+}
+
+
 DEFINE_NATIVE_ENTRY(Double_toStringAsFixed, 2) {
   // The boundaries are exclusive.
   static const double kLowerBoundary = -1e21;
diff --git a/runtime/lib/double.dart b/runtime/lib/double.dart
index 87d8046..06cd324 100644
--- a/runtime/lib/double.dart
+++ b/runtime/lib/double.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-class _Double extends _Num implements double {
+class _Double implements double {
   factory _Double.fromInteger(int value)
       native "Double_doubleFromInteger";
 
@@ -140,6 +140,8 @@
   static final List _cache = new List(CACHE_LENGTH);
   static int _cacheEvictIndex = 0;
 
+  String _toString() native "Double_toString";
+
   String toString() {
     // TODO(koda): Consider starting at most recently inserted.
     for (int i = 0; i < CACHE_LENGTH; i += 2) {
@@ -152,7 +154,7 @@
     if (identical(0.0, this)) {
       return "0.0";
     }
-    String result = super.toString();
+    String result = _toString();
     // Replace the least recently inserted entry.
     _cache[_cacheEvictIndex] = this;
     _cache[_cacheEvictIndex + 1] = result;
diff --git a/runtime/lib/integers.dart b/runtime/lib/integers.dart
index 45500d6..a28491c 100644
--- a/runtime/lib/integers.dart
+++ b/runtime/lib/integers.dart
@@ -2,7 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-class _IntegerImplementation extends _Num {
+abstract class _IntegerImplementation {
   // The Dart class _Bigint extending _IntegerImplementation requires a
   // default constructor.
 
diff --git a/runtime/lib/math.cc b/runtime/lib/math.cc
index 8e5e750..0199782 100644
--- a/runtime/lib/math.cc
+++ b/runtime/lib/math.cc
@@ -79,7 +79,7 @@
 static RawTypedData* GetRandomStateArray(const Instance& receiver) {
   const Class& random_class = Class::Handle(receiver.clazz());
   const Field& state_field =
-      Field::Handle(random_class.LookupField(Symbols::_state()));
+      Field::Handle(random_class.LookupFieldAllowPrivate(Symbols::_state()));
   ASSERT(!state_field.IsNull());
   const Instance& state_field_value =
       Instance::Cast(Object::Handle(receiver.GetField(state_field)));
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index 5127dce..40efc28 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -717,7 +717,8 @@
                                       const String& getter_name,
                                       const bool throw_nsm_if_absent) {
   // Note static fields do not have implicit getters.
-  const Field& field = Field::Handle(klass.LookupStaticField(getter_name));
+  const Field& field =
+      Field::Handle(klass.LookupStaticField(getter_name));
   if (field.IsNull() || field.IsUninitialized()) {
     const String& internal_getter_name = String::Handle(
         Field::GetterName(getter_name));
@@ -1299,26 +1300,26 @@
   GET_NON_NULL_NATIVE_ARGUMENT(Array, arg_names, arguments->NativeArgAt(4));
 
   Class& klass = Class::Handle(reflectee.clazz());
-  Function& function = Function::Handle(
-      Resolver::ResolveDynamicAnyArgs(klass, function_name));
+  Function& function = Function::Handle(zone,
+      Resolver::ResolveDynamicAnyArgs(zone, klass, function_name));
 
   const Array& args_descriptor =
-      Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
+      Array::Handle(zone, ArgumentsDescriptor::New(args.Length(), arg_names));
 
   if (function.IsNull()) {
     // Didn't find a method: try to find a getter and invoke call on its result.
     const String& getter_name =
-        String::Handle(Field::GetterName(function_name));
-    function = Resolver::ResolveDynamicAnyArgs(klass, getter_name);
+        String::Handle(zone, Field::GetterName(function_name));
+    function = Resolver::ResolveDynamicAnyArgs(zone, klass, getter_name);
     if (!function.IsNull()) {
       ASSERT(function.kind() != RawFunction::kMethodExtractor);
       // Invoke the getter.
       const int kNumArgs = 1;
-      const Array& getter_args = Array::Handle(Array::New(kNumArgs));
+      const Array& getter_args = Array::Handle(zone, Array::New(kNumArgs));
       getter_args.SetAt(0, reflectee);
       const Array& getter_args_descriptor =
-          Array::Handle(ArgumentsDescriptor::New(getter_args.Length()));
-      const Instance& getter_result = Instance::Handle(
+          Array::Handle(zone, ArgumentsDescriptor::New(getter_args.Length()));
+      const Instance& getter_result = Instance::Handle(zone,
           InvokeDynamicFunction(reflectee,
                                 function,
                                 getter_name,
@@ -1328,7 +1329,7 @@
       args.SetAt(0, getter_result);
       // Call the closure.
       const Object& call_result =
-          Object::Handle(DartEntry::InvokeClosure(args, args_descriptor));
+          Object::Handle(zone, DartEntry::InvokeClosure(args, args_descriptor));
       if (call_result.IsError()) {
         Exceptions::PropagateError(Error::Cast(call_result));
         UNREACHABLE();
@@ -1356,24 +1357,24 @@
 
   const String& internal_getter_name = String::Handle(
       Field::GetterName(getter_name));
-  Function& function = Function::Handle(
-      Resolver::ResolveDynamicAnyArgs(klass, internal_getter_name));
+  Function& function = Function::Handle(zone,
+      Resolver::ResolveDynamicAnyArgs(zone, klass, internal_getter_name));
 
   // Check for method extraction when method extractors are not created.
   if (function.IsNull() && !FLAG_lazy_dispatchers) {
-    function = Resolver::ResolveDynamicAnyArgs(klass, getter_name);
+    function = Resolver::ResolveDynamicAnyArgs(zone, klass, getter_name);
     if (!function.IsNull()) {
       const Function& closure_function =
-        Function::Handle(function.ImplicitClosureFunction());
+        Function::Handle(zone, function.ImplicitClosureFunction());
       return closure_function.ImplicitInstanceClosure(reflectee);
     }
   }
 
   const int kNumArgs = 1;
-  const Array& args = Array::Handle(Array::New(kNumArgs));
+  const Array& args = Array::Handle(zone, Array::New(kNumArgs));
   args.SetAt(0, reflectee);
   const Array& args_descriptor =
-      Array::Handle(ArgumentsDescriptor::New(args.Length()));
+      Array::Handle(zone, ArgumentsDescriptor::New(args.Length()));
 
   // InvokeDynamic invokes NoSuchMethod if the provided function is null.
   return InvokeDynamicFunction(reflectee,
@@ -1392,18 +1393,18 @@
   GET_NON_NULL_NATIVE_ARGUMENT(String, setter_name, arguments->NativeArgAt(2));
   GET_NATIVE_ARGUMENT(Instance, value, arguments->NativeArgAt(3));
 
-  const Class& klass = Class::Handle(reflectee.clazz());
+  const Class& klass = Class::Handle(zone, reflectee.clazz());
   const String& internal_setter_name =
-      String::Handle(Field::SetterName(setter_name));
-  const Function& setter = Function::Handle(
-      Resolver::ResolveDynamicAnyArgs(klass, internal_setter_name));
+      String::Handle(zone, Field::SetterName(setter_name));
+  const Function& setter = Function::Handle(zone,
+      Resolver::ResolveDynamicAnyArgs(zone, klass, internal_setter_name));
 
   const int kNumArgs = 2;
-  const Array& args = Array::Handle(Array::New(kNumArgs));
+  const Array& args = Array::Handle(zone, Array::New(kNumArgs));
   args.SetAt(0, reflectee);
   args.SetAt(1, value);
   const Array& args_descriptor =
-      Array::Handle(ArgumentsDescriptor::New(args.Length()));
+      Array::Handle(zone, ArgumentsDescriptor::New(args.Length()));
 
   return InvokeDynamicFunction(reflectee,
                                setter,
@@ -1569,7 +1570,8 @@
   }
 
   // Check for real fields and user-defined setters.
-  const Field& field = Field::Handle(klass.LookupStaticField(setter_name));
+  const Field& field =
+      Field::Handle(klass.LookupStaticField(setter_name));
   Function& setter = Function::Handle();
   const String& internal_setter_name = String::Handle(
       Field::SetterName(setter_name));
diff --git a/runtime/lib/num.cc b/runtime/lib/num.cc
deleted file mode 100644
index 8004c8c..0000000
--- a/runtime/lib/num.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "vm/bootstrap_natives.h"
-
-#include "vm/native_entry.h"
-#include "vm/object.h"
-
-namespace dart {
-
-DEFINE_NATIVE_ENTRY(Num_toString, 1) {
-  const Number& number = Number::CheckedHandle(arguments->NativeArgAt(0));
-  Heap::Space space = isolate->heap()->ShouldPretenure(kOneByteStringCid) ?
-      Heap::kPretenured : Heap::kNew;
-  return number.ToString(space);
-}
-
-}  // namespace dart
diff --git a/runtime/lib/num.dart b/runtime/lib/num.dart
deleted file mode 100644
index 7d67213..0000000
--- a/runtime/lib/num.dart
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-abstract class _Num implements num {
-
-  /* patch */ String toString() native "Num_toString";
-
-}
diff --git a/runtime/lib/regexp.cc b/runtime/lib/regexp.cc
index 9e9bcea..921a101 100644
--- a/runtime/lib/regexp.cc
+++ b/runtime/lib/regexp.cc
@@ -36,7 +36,7 @@
   }
 
   // Create a RegExp object containing only the initial parameters.
-  return RegExpEngine::CreateRegExp(zone,
+  return RegExpEngine::CreateRegExp(thread,
                                     pattern,
                                     multi_line,
                                     ignore_case);
diff --git a/runtime/lib/string.cc b/runtime/lib/string.cc
index 2821146..9313ce1 100644
--- a/runtime/lib/string.cc
+++ b/runtime/lib/string.cc
@@ -22,7 +22,7 @@
   const String& env_value =
       String::Handle(Api::GetEnvironmentValue(thread, name));
   if (!env_value.IsNull()) {
-    return Symbols::New(env_value);
+    return Symbols::New(thread, env_value);
   }
   return default_value.raw();
 }
@@ -524,7 +524,7 @@
   const String& receiver = String::CheckedHandle(arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, index, arguments->NativeArgAt(1));
   uint16_t value = StringValueAt(receiver, index);
-  return Symbols::FromCharCode(static_cast<int32_t>(value));
+  return Symbols::FromCharCode(thread, static_cast<int32_t>(value));
 }
 
 
diff --git a/runtime/lib/string_patch.dart b/runtime/lib/string_patch.dart
index cdb94be..f7aa83c 100644
--- a/runtime/lib/string_patch.dart
+++ b/runtime/lib/string_patch.dart
@@ -47,7 +47,7 @@
  * [_StringBase] contains common methods used by concrete String
  * implementations, e.g., _OneByteString.
  */
-class _StringBase {
+abstract class _StringBase {
   // Constants used by replaceAll encoding of string slices between matches.
   // A string slice (start+length) is encoded in a single Smi to save memory
   // overhead in the common case.
diff --git a/runtime/observatory/tests/service/call_site_data_test.dart b/runtime/observatory/tests/service/call_site_data_test.dart
deleted file mode 100644
index 486ce06..0000000
--- a/runtime/observatory/tests/service/call_site_data_test.dart
+++ /dev/null
@@ -1,189 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-// VMOptions=--optimization_filter=doesNotExist
-// ^Force code to be unoptimized so the invocation counts are accurate.
-
-library call_site_data_test;
-
-import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
-import 'test_helper.dart';
-
-class A { foo() => 'A'; }
-class B { foo() => 'B'; }
-class C { foo() => 'C'; }
-class D { foo() => 'D'; }
-class E { foo() => 'E'; }
-class F { foo() => 'F'; }
-class G { foo() => 'G'; }
-class H { foo() => 'H'; }
-
-monomorphic(fooable) {
-  fooable.foo();
-  return null;
-}
-polymorphic(fooable) {
-  fooable.foo();
-  return null;
-}
-megamorphic(fooable) {
-  fooable.foo();
-  return null;
-}
-
-class Static {
-  static staticMethod() => 2;
-}
-staticCall() {
-  Static.staticMethod();
-  return null;
-}
-constructorCall() {
-  new Static();
-  return null;
-}
-topLevelMethod() => "TOP";
-topLevelCall() {
-  topLevelMethod();
-  return null;
-}
-
-class Super { bar() => "Super"; }
-class Sub extends Super { bar() => super.bar(); }
-
-script() {
-  for (int i = 0; i < 10; i++) monomorphic(new A());
-
-  for (int i = 0; i < 10; i++) polymorphic(new A());
-  for (int i = 0; i < 20; i++) polymorphic(new B());
-  for (int i = 0; i < 30; i++) polymorphic(new C());
-
-  for (int i = 0; i < 10; i++) megamorphic(new A());
-  for (int i = 0; i < 20; i++) megamorphic(new B());
-  for (int i = 0; i < 30; i++) megamorphic(new C());
-  for (int i = 0; i < 40; i++) megamorphic(new D());
-  for (int i = 0; i < 50; i++) megamorphic(new E());
-  for (int i = 0; i < 60; i++) megamorphic(new F());
-  for (int i = 0; i < 70; i++) megamorphic(new G());
-  for (int i = 0; i < 80; i++) megamorphic(new H());
-
-  for (int i = 0; i < 10; i++) staticCall();
-
-  for (int i = 0; i < 10; i++) constructorCall();
-
-  for (int i = 0; i < 10; i++) topLevelCall();
-
-  for (int i = 0; i < 15; i++) new Sub().bar();
-}
-
-
-Set<String> stringifyCacheEntries(Map callSite) {
-  return callSite['cacheEntries'].map((entry) {
-    return "${entry['receiverContainer']['name']}:${entry['count']}";
-  }).toSet();
-}
-
-
-testMonomorphic(Isolate isolate) async {
-  Library lib = await isolate.rootLibrary.load();
-  ServiceFunction func =
-     lib.functions.singleWhere((f) => f.name == 'monomorphic');
-  Map response = await isolate.invokeRpcNoUpgrade('_getCallSiteData',
-                                                  { 'targetId': func.id });
-  expect(response['type'], equals('CodeCoverage'));
-  Map callSite = response['coverage'].single['callSites'].single;
-  expect(callSite['name'], equals('foo'));
-  expect(stringifyCacheEntries(callSite),
-         equals(['A:10'].toSet()));
-}
-
-testPolymorphic(Isolate isolate) async {
-  Library lib = await isolate.rootLibrary.load();
-  ServiceFunction func =
-     lib.functions.singleWhere((f) => f.name == 'polymorphic');
-  Map response = await isolate.invokeRpcNoUpgrade('_getCallSiteData',
-                                                  { 'targetId': func.id });
-  expect(response['type'], equals('CodeCoverage'));
-  Map callSite = response['coverage'].single['callSites'].single;
-  expect(callSite['name'], equals('foo'));
-  expect(stringifyCacheEntries(callSite),
-         equals(['A:10', 'B:20', 'C:30'].toSet()));
-}
-
-testMegamorphic(Isolate isolate) async {
-  Library lib = await isolate.rootLibrary.load();
-  ServiceFunction func =
-     lib.functions.singleWhere((f) => f.name == 'megamorphic');
-  Map response = await isolate.invokeRpcNoUpgrade('_getCallSiteData',
-                                                  { 'targetId': func.id });
-  expect(response['type'], equals('CodeCoverage'));
-  Map callSite = response['coverage'].single['callSites'].single;
-  expect(callSite['name'], equals('foo'));
-  expect(stringifyCacheEntries(callSite),
-         equals(['A:10', 'B:20', 'C:30', 'D:40',
-                 'E:50', 'F:60', 'G:70', 'H:80'].toSet()));
-}
-
-testStaticCall(Isolate isolate) async {
-  Library lib = await isolate.rootLibrary.load();
-  ServiceFunction func =
-     lib.functions.singleWhere((f) => f.name == 'staticCall');
-  Map response = await isolate.invokeRpcNoUpgrade('_getCallSiteData',
-                                                  { 'targetId': func.id });
-  expect(response['type'], equals('CodeCoverage'));
-  Map callSite = response['coverage'].single['callSites'].single;
-  expect(callSite['name'], equals('staticMethod'));
-  expect(stringifyCacheEntries(callSite),
-         equals(['Static:10'].toSet()));
-}
-
-testConstructorCall(Isolate isolate) async {
-  Library lib = await isolate.rootLibrary.load();
-  ServiceFunction func =
-     lib.functions.singleWhere((f) => f.name == 'constructorCall');
-  Map response = await isolate.invokeRpcNoUpgrade('_getCallSiteData',
-                                                  { 'targetId': func.id });
-  expect(response['type'], equals('CodeCoverage'));
-  Map callSite = response['coverage'].single['callSites'].single;
-  expect(callSite['name'], equals('Static.'));
-  expect(stringifyCacheEntries(callSite),
-         equals(['Static:10'].toSet()));
-}
-
-testTopLevelCall(Isolate isolate) async {
-  Library lib = await isolate.rootLibrary.load();
-  ServiceFunction func =
-     lib.functions.singleWhere((f) => f.name == 'topLevelCall');
-  Map response = await isolate.invokeRpcNoUpgrade('_getCallSiteData',
-                                                  { 'targetId': func.id });
-  expect(response['type'], equals('CodeCoverage'));
-  Map callSite = response['coverage'].single['callSites'].single;
-  expect(callSite['name'], equals('topLevelMethod'));
-  expect(stringifyCacheEntries(callSite),
-         equals(['call_site_data_test:10'].toSet()));
-}
-
-testSuperCall(Isolate isolate) async {
-  Library lib = await isolate.rootLibrary.load();
-  Class cls = await lib.classes.singleWhere((f) => f.name == 'Sub').load();
-  ServiceFunction func = cls.functions.singleWhere((f) => f.name == 'bar');
-  Map response = await isolate.invokeRpcNoUpgrade('_getCallSiteData',
-                                                  { 'targetId': func.id });
-  expect(response['type'], equals('CodeCoverage'));
-  Map callSite = response['coverage'].single['callSites'].single;
-  expect(callSite['name'], equals('bar'));
-  expect(stringifyCacheEntries(callSite),
-         equals(['Super:15'].toSet()));
-}
-
-var tests = [
-    testMonomorphic,
-    testPolymorphic,
-    testMegamorphic,
-    testStaticCall,
-    testConstructorCall,
-    testTopLevelCall,
-    testSuperCall ];
-
-main(args) => runIsolateTests(args, tests, testeeBefore: script);
diff --git a/runtime/observatory/tests/service/coverage_test.dart b/runtime/observatory/tests/service/coverage_test.dart
deleted file mode 100644
index 1266500..0000000
--- a/runtime/observatory/tests/service/coverage_test.dart
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-// VMOptions=--error_on_bad_type --error_on_bad_override
-
-import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
-import 'test_helper.dart';
-import 'service_test_common.dart';
-import 'dart:developer';
-
-const int LINE_A = 20;
-const int LINE_B = 38;
-const int LINE_C = 136;
-
-int globalVar = 100;
-
-class MyClass {
-  static void myFunction(int value) {
-    if (value < 0) {  // Line A.
-      print("negative");
-    } else {
-      print("positive");
-    }
-    debugger();
-  }
-
-  static void otherFunction(int value) {
-    if (value < 0) {
-               print("otherFunction <");
-    } else {
-         print("otherFunction >=");
-    }
-  }
-}
-
-void testFunction() {
-  MyClass.otherFunction(-100);  // Line B.
-  MyClass.myFunction(10000);
-}
-
-var tests = [
-
-hasStoppedAtBreakpoint,
-
-// Get coverage for function, class, library, script, and isolate.
-(Isolate isolate) async {
-  var stack = await isolate.getStack();
-
-  // Make sure we are in the right place.
-  expect(stack.type, equals('Stack'));
-  expect(stack['frames'].length, greaterThanOrEqualTo(2));
-  expect(stack['frames'][0].function.name, equals('myFunction'));
-  expect(stack['frames'][0].function.dartOwner.name, equals('MyClass'));
-
-  var lib = isolate.rootLibrary;
-  var func = stack['frames'][0].function;
-  expect(func.name, equals('myFunction'));
-  var cls = func.dartOwner;
-  expect(cls.name, equals('MyClass'));
-
-  // Function
-  var coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
-                                                  { 'targetId': func.id });
-  expect(coverage['type'], equals('CodeCoverage'));
-  expect(coverage['coverage'].length, equals(1));
-  expect(coverage['coverage'][0]['hits'],
-         equals([LINE_A, 1,
-                 LINE_A + 1, 0,
-                 LINE_A + 3, 1,
-                 LINE_A + 5, 1]));
-
-  // Class
-  coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
-                                              { 'targetId': cls.id });
-  expect(coverage['type'], equals('CodeCoverage'));
-  expect(coverage['coverage'].length, equals(1));
-  expect(coverage['coverage'][0]['hits'],
-         equals([LINE_A, 1,
-                 LINE_A + 1, 0,
-                 LINE_A + 3, 1,
-                 LINE_A + 5, 1,
-                 LINE_A + 9, 1,
-                 LINE_A + 10, 1,
-                 LINE_A + 12, 0,
-                 LINE_A - 2, 0]));
-
-  // Library
-  coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
-                                              { 'targetId': lib.id });
-  expect(coverage['type'], equals('CodeCoverage'));
-  expect(coverage['coverage'].length, equals(4));
-  expect(coverage['coverage'][0]['hits'],
-         equals([LINE_A, 1,
-                 LINE_A + 1, 0,
-                 LINE_A + 3, 1,
-                 LINE_A + 5, 1,
-                 LINE_A + 9, 1,
-                 LINE_A + 10, 1,
-                 LINE_A + 12, 0,
-                 LINE_A - 2, 0]));
-  expect(coverage['coverage'][1]['hits'],
-         equals([LINE_B, 1,
-                 LINE_B + 1, 1,
-                 LINE_C, 2]));
-
-  // Script
-  await cls.load();
-  coverage = await isolate.invokeRpcNoUpgrade('_getCoverage',
-                                       { 'targetId': cls.location.script.id });
-  expect(coverage['type'], equals('CodeCoverage'));
-  expect(coverage['coverage'].length, equals(4));
-  expect(coverage['coverage'][0]['hits'],
-         equals([LINE_A, 1,
-                 LINE_A + 1, 0,
-                 LINE_A + 3, 1,
-                 LINE_A + 5, 1,
-                 LINE_A + 9, 1,
-                 LINE_A + 10, 1,
-                 LINE_A + 12, 0,
-                 LINE_A - 2, 0]));
-  expect(coverage['coverage'][1]['hits'],
-         equals([LINE_B, 1,
-                 LINE_B + 1, 1,
-                 LINE_C, 2]));
-
-  // Isolate
-  coverage = await isolate.invokeRpcNoUpgrade('_getCoverage', {});
-  print('Done processing _getCoverage for full isolate');
-  expect(coverage['type'], equals('CodeCoverage'));
-  expect(coverage['coverage'].length, greaterThan(100));
-},
-
-];
-
-main(args) => runIsolateTests(args, tests,    // Line C.
-                              testeeConcurrent: testFunction,
-                              trace_service: true);
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index d4c4913..5bae881 100644
--- a/runtime/observatory/tests/service/get_version_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_version_rpc_test.dart
@@ -13,7 +13,7 @@
     var result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], equals('Version'));
     expect(result['major'], equals(3));
-    expect(result['minor'], equals(3));
+    expect(result['minor'], equals(4));
     expect(result['_privateMajor'], equals(0));
     expect(result['_privateMinor'], equals(0));
   },
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index 82f5719..7e11bb3 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -650,6 +650,14 @@
 #define STDERR_FILENO 2
 #endif
 
+// For checking deterministic graph generation, we can store instruction
+// tag in the ICData and check it when recreating the flow graph in
+// optimizing compiler. Enable it for other modes (product, release) if needed
+// for debugging.
+#if defined(DEBUG)
+#define TAG_IC_DATA
+#endif
+
 }  // namespace dart
 
 #endif  // PLATFORM_GLOBALS_H_
diff --git a/runtime/vm/aot_optimizer.cc b/runtime/vm/aot_optimizer.cc
index c39f74c..7d005b1 100644
--- a/runtime/vm/aot_optimizer.cc
+++ b/runtime/vm/aot_optimizer.cc
@@ -29,6 +29,10 @@
 
 namespace dart {
 
+DEFINE_FLAG(int, max_exhaustive_polymorphic_checks, 5,
+            "If a call receiver is known to be of at most this many classes, "
+            "generate exhaustive class tests instead of a megamorphic call");
+
 // Quick access to the current isolate and zone.
 #define I (isolate())
 #define Z (zone())
@@ -281,11 +285,11 @@
     return;
   }
 
-  const bool with_checks = false;
   PolymorphicInstanceCallInstr* specialized =
       new(Z) PolymorphicInstanceCallInstr(call->instance_call(),
                                           ic_data,
-                                          with_checks);
+                                          /* with_checks = */ false,
+                                          /* complete = */ false);
   call->ReplaceWith(specialized, current_iterator());
 }
 
@@ -2441,7 +2445,8 @@
             instr, function_kind)) {
       PolymorphicInstanceCallInstr* call =
           new(Z) PolymorphicInstanceCallInstr(instr, unary_checks,
-                                              /* with_checks = */ false);
+                                              /* with_checks = */ false,
+                                              /* complete = */ true);
       instr->ReplaceWith(call, current_iterator());
       return;
     }
@@ -2514,13 +2519,71 @@
         ic_data.AddReceiverCheck(receiver_class.id(), function);
         PolymorphicInstanceCallInstr* call =
             new(Z) PolymorphicInstanceCallInstr(instr, ic_data,
-                                                /* with_checks = */ false);
+                                                /* with_checks = */ false,
+                                                /* complete = */ true);
         instr->ReplaceWith(call, current_iterator());
         return;
       }
     }
   }
 
+  Definition* callee_receiver = instr->ArgumentAt(0);
+  const Function& function = flow_graph_->function();
+  if (function.IsDynamicFunction() &&
+      flow_graph_->IsReceiver(callee_receiver)) {
+    // Call receiver is method receiver.
+    Class& receiver_class = Class::Handle(Z, function.Owner());
+    GrowableArray<intptr_t> class_ids(6);
+    if (thread()->cha()->ConcreteSubclasses(receiver_class, &class_ids)) {
+      if (class_ids.length() <= FLAG_max_exhaustive_polymorphic_checks) {
+        if (FLAG_trace_cha) {
+          THR_Print("  **(CHA) Only %" Pd " concrete subclasses of %s for %s\n",
+                    class_ids.length(),
+                    receiver_class.ToCString(),
+                    instr->function_name().ToCString());
+        }
+
+        const Array& args_desc_array = Array::Handle(Z,
+            ArgumentsDescriptor::New(instr->ArgumentCount(),
+                                     instr->argument_names()));
+        ArgumentsDescriptor args_desc(args_desc_array);
+
+        const ICData& ic_data = ICData::Handle(
+            ICData::New(function,
+                        instr->function_name(),
+                        args_desc_array,
+                        Thread::kNoDeoptId,
+                        /* args_tested = */ 1));
+
+        Function& target = Function::Handle(Z);
+        Class& cls = Class::Handle(Z);
+        bool includes_dispatcher_case = false;
+        for (intptr_t i = 0; i < class_ids.length(); i++) {
+          intptr_t cid = class_ids[i];
+          cls = isolate()->class_table()->At(cid);
+          target = Resolver::ResolveDynamicForReceiverClass(
+              cls,
+              instr->function_name(),
+              args_desc);
+          if (target.IsNull()) {
+            // noSuchMethod, call through getter or closurization
+            includes_dispatcher_case = true;
+          } else {
+            ic_data.AddReceiverCheck(cid, target);
+          }
+        }
+        if (!includes_dispatcher_case && (ic_data.NumberOfChecks() > 0)) {
+          PolymorphicInstanceCallInstr* call =
+              new(Z) PolymorphicInstanceCallInstr(instr, ic_data,
+                                                  /* with_checks = */ true,
+                                                  /* complete = */ true);
+          instr->ReplaceWith(call, current_iterator());
+          return;
+        }
+      }
+    }
+  }
+
   // More than one targets. Generate generic polymorphic call without
   // deoptimization.
   if (instr->ic_data()->NumberOfUsedChecks() > 0) {
@@ -2529,7 +2592,8 @@
     // deoptimization is allowed.
     PolymorphicInstanceCallInstr* call =
         new(Z) PolymorphicInstanceCallInstr(instr, unary_checks,
-                                            /* with_checks = */ true);
+                                            /* with_checks = */ true,
+                                            /* complete = */ false);
     instr->ReplaceWith(call, current_iterator());
     return;
   }
diff --git a/runtime/vm/ast.cc b/runtime/vm/ast.cc
index 7d7f3f4..8ac98c2 100644
--- a/runtime/vm/ast.cc
+++ b/runtime/vm/ast.cc
@@ -104,13 +104,15 @@
 
 
 LocalVariable* LetNode::AddInitializer(AstNode* node) {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   initializers_.Add(node);
   char name[64];
   OS::SNPrint(name, sizeof(name), ":lt%s_%" Pd "",
       token_pos().ToCString(), vars_.length());
   LocalVariable* temp_var =
       new LocalVariable(token_pos(),
-                        String::ZoneHandle(Symbols::New(name)),
+                        String::ZoneHandle(zone, Symbols::New(thread, name)),
                         Object::dynamic_type());
   vars_.Add(temp_var);
   return temp_var;
@@ -635,7 +637,7 @@
         String::ZoneHandle(zone, Field::LookupSetterSymbol(field_name_));
     Function& setter = Function::ZoneHandle(zone);
     if (!setter_name.IsNull()) {
-      setter = Resolver::ResolveDynamicAnyArgs(cls(), setter_name);
+      setter = Resolver::ResolveDynamicAnyArgs(zone, cls(), setter_name);
     }
     if (setter.IsNull() || setter.is_abstract()) {
       // No instance setter found in super class chain,
diff --git a/runtime/vm/ast_printer_test.cc b/runtime/vm/ast_printer_test.cc
index 588d702..5b774e8 100644
--- a/runtime/vm/ast_printer_test.cc
+++ b/runtime/vm/ast_printer_test.cc
@@ -18,7 +18,7 @@
   const TokenPosition kPos = TokenPosition::kNoSource;
   LocalVariable* v =
       new LocalVariable(kPos,
-                        String::ZoneHandle(Symbols::New("wurscht")),
+                        String::ZoneHandle(Symbols::New(thread, "wurscht")),
                         Type::ZoneHandle(Type::DynamicType()));
   v->set_index(5);
   LoadLocalNode* ll = new LoadLocalNode(kPos, v);
diff --git a/runtime/vm/ast_test.cc b/runtime/vm/ast_test.cc
index 88096e9..90513c2 100644
--- a/runtime/vm/ast_test.cc
+++ b/runtime/vm/ast_test.cc
@@ -13,9 +13,10 @@
 namespace dart {
 
 TEST_CASE(Ast) {
-  LocalVariable* v = new LocalVariable(TokenPosition::kNoSource,
-                                       String::ZoneHandle(Symbols::New("v")),
-                                       Type::ZoneHandle(Type::DynamicType()));
+  LocalVariable* v = new LocalVariable(
+      TokenPosition::kNoSource,
+      String::ZoneHandle(Symbols::New(thread, "v")),
+      Type::ZoneHandle(Type::DynamicType()));
   AstNode* ll = new LoadLocalNode(TokenPosition::kNoSource, v);
   EXPECT(ll->IsLoadLocalNode());
   EXPECT(!ll->IsLiteralNode());
@@ -24,9 +25,10 @@
   v->set_index(1);
   EXPECT_EQ(1, v->index());
 
-  LocalVariable* p = new LocalVariable(TokenPosition::kNoSource,
-                                       String::ZoneHandle(Symbols::New("p")),
-                                       Type::ZoneHandle(Type::DynamicType()));
+  LocalVariable* p = new LocalVariable(
+      TokenPosition::kNoSource,
+      String::ZoneHandle(Symbols::New(thread, "p")),
+      Type::ZoneHandle(Type::DynamicType()));
   EXPECT(!p->HasIndex());
   p->set_index(-1);
   EXPECT(p->HasIndex());
diff --git a/runtime/vm/ast_transformer.cc b/runtime/vm/ast_transformer.cc
index 4b05867..a81babb 100644
--- a/runtime/vm/ast_transformer.cc
+++ b/runtime/vm/ast_transformer.cc
@@ -10,6 +10,9 @@
 
 namespace dart {
 
+// Quick access to the current thread.
+#define T (thread())
+
 // Quick access to the current zone.
 #define Z (thread()->zone())
 
@@ -66,14 +69,14 @@
 
 LocalVariable* AwaitTransformer::EnsureCurrentTempVar() {
   String& symbol =
-      String::ZoneHandle(Z, Symbols::NewFormatted("%d", temp_cnt_));
-  symbol = Symbols::FromConcat(Symbols::AwaitTempVarPrefix(), symbol);
+      String::ZoneHandle(Z, Symbols::NewFormatted(T, "%d", temp_cnt_));
+  symbol = Symbols::FromConcat(T, Symbols::AwaitTempVarPrefix(), symbol);
   ASSERT(!symbol.IsNull());
   // Look up the variable in the scope used for async temp variables.
   LocalVariable* await_tmp = async_temp_scope_->LocalLookupVariable(symbol);
   if (await_tmp == NULL) {
     // We need a new temp variable; add it to the function's top scope.
-    await_tmp = new (Z) LocalVariable(
+    await_tmp = new(Z) LocalVariable(
         TokenPosition::kNoSource, symbol, Object::dynamic_type());
     async_temp_scope_->AddVariable(await_tmp);
     // After adding it to the top scope, we can look it up from the preamble.
@@ -92,7 +95,7 @@
 }
 
 
-LocalVariable* AwaitTransformer::AddToPreambleNewTempVar(
+LocalVariable* AwaitTransformer::AddNewTempVarToPreamble(
     AstNode* node,
     TokenPosition token_pos) {
   LocalVariable* tmp_var = EnsureCurrentTempVar();
@@ -103,6 +106,12 @@
 }
 
 
+LoadLocalNode* AwaitTransformer::MakeName(AstNode* node) {
+  LocalVariable* temp = AddNewTempVarToPreamble(node, ST(node->token_pos()));
+  return new(Z) LoadLocalNode(ST(node->token_pos()), temp);
+}
+
+
 void AwaitTransformer::VisitLiteralNode(LiteralNode* node) {
   result_ = node;
 }
@@ -140,11 +149,11 @@
       preamble_->scope(), Symbols::AsyncOperationStackTraceParam());
 
   AstNode* transformed_expr = Transform(node->expr());
-  LocalVariable* await_temp = AddToPreambleNewTempVar(transformed_expr,
+  LocalVariable* await_temp = AddNewTempVarToPreamble(transformed_expr,
                                                       ST(node->token_pos()));
 
   AwaitMarkerNode* await_marker =
-      new (Z) AwaitMarkerNode(async_temp_scope_, node->scope(), token_pos);
+      new(Z) AwaitMarkerNode(async_temp_scope_, node->scope(), token_pos);
   preamble_->Add(await_marker);
 
   // :result_param = _awaitHelper(
@@ -154,14 +163,14 @@
       Z, async_lib.LookupFunctionAllowPrivate(Symbols::AsyncAwaitHelper()));
   ASSERT(!async_await_helper.IsNull());
   ArgumentListNode* async_await_helper_args =
-      new (Z) ArgumentListNode(token_pos);
+      new(Z) ArgumentListNode(token_pos);
   async_await_helper_args->Add(
       new(Z) LoadLocalNode(token_pos, await_temp));
   async_await_helper_args->Add(
       new(Z) LoadLocalNode(token_pos, async_then_callback));
   async_await_helper_args->Add(
       new(Z) LoadLocalNode(token_pos, async_catch_error_callback));
-  StaticCallNode* await_helper_call = new (Z) StaticCallNode(
+  StaticCallNode* await_helper_call = new(Z) StaticCallNode(
       node->token_pos(),
       async_await_helper,
       async_await_helper_args);
@@ -177,17 +186,17 @@
   // restoring the saved try context that lives on the stack and possibly the
   // saved try context of the outer try block.
   if (node->saved_try_ctx() != NULL) {
-    preamble_->Add(new (Z) StoreLocalNode(
+    preamble_->Add(new(Z) StoreLocalNode(
         token_pos,
         node->saved_try_ctx(),
-        new (Z) LoadLocalNode(token_pos,
-                              node->async_saved_try_ctx())));
+        new(Z) LoadLocalNode(token_pos,
+                             node->async_saved_try_ctx())));
     if (node->outer_saved_try_ctx() != NULL) {
-      preamble_->Add(new (Z) StoreLocalNode(
+      preamble_->Add(new(Z) StoreLocalNode(
           token_pos,
           node->outer_saved_try_ctx(),
-          new (Z) LoadLocalNode(token_pos,
-                                node->outer_async_saved_try_ctx())));
+          new(Z) LoadLocalNode(token_pos,
+                               node->outer_async_saved_try_ctx())));
     }
   } else {
     ASSERT(node->outer_saved_try_ctx() == NULL);
@@ -195,31 +204,31 @@
 
   // Load the async_op variable. It is unused, but the observatory uses it
   // to determine if a breakpoint is inside an asynchronous function.
-  LoadLocalNode* load_async_op = new (Z) LoadLocalNode(token_pos, async_op);
+  LoadLocalNode* load_async_op = new(Z) LoadLocalNode(token_pos, async_op);
   preamble_->Add(load_async_op);
 
-  LoadLocalNode* load_error_param = new (Z) LoadLocalNode(
+  LoadLocalNode* load_error_param = new(Z) LoadLocalNode(
       token_pos, error_param);
-  LoadLocalNode* load_stack_trace_param = new (Z) LoadLocalNode(
+  LoadLocalNode* load_stack_trace_param = new(Z) LoadLocalNode(
       token_pos, stack_trace_param);
-  SequenceNode* error_ne_null_branch = new (Z) SequenceNode(
+  SequenceNode* error_ne_null_branch = new(Z) SequenceNode(
       token_pos, ChainNewScope(preamble_->scope()));
-  error_ne_null_branch->Add(new (Z) ThrowNode(
+  error_ne_null_branch->Add(new(Z) ThrowNode(
       token_pos,
       load_error_param,
       load_stack_trace_param));
-  preamble_->Add(new (Z) IfNode(
+  preamble_->Add(new(Z) IfNode(
       token_pos,
-      new (Z) ComparisonNode(
+      new(Z) ComparisonNode(
           token_pos,
           Token::kNE,
           load_error_param,
-          new (Z) LiteralNode(token_pos,
+          new(Z) LiteralNode(token_pos,
                               Object::null_instance())),
           error_ne_null_branch,
           NULL));
 
-  LocalVariable* result = AddToPreambleNewTempVar(new(Z) LoadLocalNode(
+  LocalVariable* result = AddNewTempVarToPreamble(new(Z) LoadLocalNode(
       token_pos, result_param), ST(node->token_pos()));
   result_ = new(Z) LoadLocalNode(token_pos, result);
 }
@@ -247,7 +256,7 @@
   AstNode* result = NULL;
   const Token::Kind compare_logical_op = (logical_op == Token::kAND) ?
       Token::kEQ : Token::kNE;
-  SequenceNode* eval = new (Z) SequenceNode(
+  SequenceNode* eval = new(Z) SequenceNode(
       ST(new_left->token_pos()), ChainNewScope(preamble_->scope()));
   SequenceNode* saved_preamble = preamble_;
   preamble_ = eval;
@@ -268,7 +277,7 @@
 
 
 LocalScope* AwaitTransformer::ChainNewScope(LocalScope* parent) {
-  return new (Z) LocalScope(
+  return new(Z) LocalScope(
       parent, parent->function_level(), parent->loop_level());
 }
 
@@ -282,12 +291,10 @@
   } else {
     new_right = Transform(node->right());
   }
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) BinaryOpNode(node->token_pos(),
-                          node->kind(),
-                          new_left,
-                          new_right), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) BinaryOpNode(node->token_pos(),
+      node->kind(),
+      new_left,
+      new_right));
 }
 
 
@@ -296,34 +303,29 @@
   ASSERT((node->kind() != Token::kAND) && (node->kind() != Token::kOR));
   AstNode* new_left = Transform(node->left());
   AstNode* new_right = Transform(node->right());
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) BinaryOpWithMask32Node(node->token_pos(),
-                                    node->kind(),
-                                    new_left,
-                                    new_right,
-                                    node->mask32()), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) BinaryOpWithMask32Node(node->token_pos(),
+      node->kind(),
+      new_left,
+      new_right,
+      node->mask32()));
 }
 
 
 void AwaitTransformer::VisitComparisonNode(ComparisonNode* node) {
   AstNode* new_left = Transform(node->left());
   AstNode* new_right = Transform(node->right());
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) ComparisonNode(node->token_pos(),
-                            node->kind(),
-                            new_left,
-                            new_right), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) ComparisonNode(node->token_pos(),
+      node->kind(),
+      new_left,
+      new_right));
 }
 
 
 void AwaitTransformer::VisitUnaryOpNode(UnaryOpNode* node) {
   AstNode* new_operand = Transform(node->operand());
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) UnaryOpNode(node->token_pos(), node->kind(), new_operand),
-      ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) UnaryOpNode(node->token_pos(),
+      node->kind(),
+      new_operand));
 }
 
 
@@ -331,12 +333,12 @@
 //
 void AwaitTransformer::VisitConditionalExprNode(ConditionalExprNode* node) {
   AstNode* new_condition = Transform(node->condition());
-  SequenceNode* new_true = new (Z) SequenceNode(
+  SequenceNode* new_true = new(Z) SequenceNode(
       ST(node->true_expr()->token_pos()), ChainNewScope(preamble_->scope()));
   SequenceNode* saved_preamble = preamble_;
   preamble_ = new_true;
   AstNode* new_true_result = Transform(node->true_expr());
-  SequenceNode* new_false = new (Z) SequenceNode(
+  SequenceNode* new_false = new(Z) SequenceNode(
       ST(node->false_expr()->token_pos()), ChainNewScope(preamble_->scope()));
   preamble_ = new_false;
   AstNode* new_false_result = Transform(node->false_expr());
@@ -346,12 +348,10 @@
                                  new_true,
                                  new_false);
   preamble_->Add(new_if);
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) ConditionalExprNode(ST(node->token_pos()),
-                                 new_condition,
-                                 new_true_result,
-                                 new_false_result), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) ConditionalExprNode(ST(node->token_pos()),
+      new_condition,
+      new_true_result,
+      new_false_result));
 }
 
 
@@ -376,10 +376,8 @@
 
 void AwaitTransformer::VisitStringInterpolateNode(StringInterpolateNode* node) {
   ArrayNode* new_value = Transform(node->value())->AsArrayNode();
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) StringInterpolateNode(node->token_pos(),
-                                   new_value), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) StringInterpolateNode(node->token_pos(),
+      new_value));
 }
 
 
@@ -388,12 +386,10 @@
   if (new_receiver != NULL) {
     new_receiver = Transform(new_receiver);
   }
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) ClosureNode(node->token_pos(),
-                         node->function(),
-                         new_receiver,
-                         node->scope()), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) ClosureNode(node->token_pos(),
+      node->function(),
+      new_receiver,
+      node->scope()));
 }
 
 
@@ -401,47 +397,39 @@
   AstNode* new_receiver = Transform(node->receiver());
   ArgumentListNode* new_args =
       Transform(node->arguments())->AsArgumentListNode();
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) InstanceCallNode(node->token_pos(),
-                              new_receiver,
-                              node->function_name(),
-                              new_args,
-                              node->is_conditional()), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) InstanceCallNode(node->token_pos(),
+      new_receiver,
+      node->function_name(),
+      new_args,
+      node->is_conditional()));
 }
 
 
 void AwaitTransformer::VisitStaticCallNode(StaticCallNode* node) {
   ArgumentListNode* new_args =
       Transform(node->arguments())->AsArgumentListNode();
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) StaticCallNode(node->token_pos(),
-                            node->function(),
-                            new_args), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) StaticCallNode(node->token_pos(),
+      node->function(),
+      new_args));
 }
 
 
 void AwaitTransformer::VisitConstructorCallNode(ConstructorCallNode* node) {
   ArgumentListNode* new_args =
       Transform(node->arguments())->AsArgumentListNode();
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) ConstructorCallNode(node->token_pos(),
-                                 node->type_arguments(),
-                                 node->constructor(),
-                                 new_args), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) ConstructorCallNode(node->token_pos(),
+      node->type_arguments(),
+      node->constructor(),
+      new_args));
 }
 
 
 void AwaitTransformer::VisitInstanceGetterNode(InstanceGetterNode* node) {
   AstNode* new_receiver = Transform(node->receiver());
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) InstanceGetterNode(node->token_pos(),
-                                new_receiver,
-                                node->field_name(),
-                                node->is_conditional()), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) InstanceGetterNode(node->token_pos(),
+      new_receiver,
+      node->field_name(),
+      node->is_conditional()));
 }
 
 
@@ -451,13 +439,11 @@
     new_receiver = Transform(new_receiver);
   }
   AstNode* new_value = Transform(node->value());
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) InstanceSetterNode(node->token_pos(),
-                                new_receiver,
-                                node->field_name(),
-                                new_value,
-                                node->is_conditional()), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) InstanceSetterNode(node->token_pos(),
+      new_receiver,
+      node->field_name(),
+      new_value,
+      node->is_conditional()));
 }
 
 
@@ -472,9 +458,7 @@
                               node->cls(),
                               node->field_name());
   new_getter->set_owner(node->owner());
-  LocalVariable* result =
-      AddToPreambleNewTempVar(new_getter, ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new_getter);
 }
 
 
@@ -497,46 +481,43 @@
                                 node->function(),
                                 new_value);
 
-  LocalVariable* result =
-      AddToPreambleNewTempVar(new_setter, ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new_setter);
 }
 
 
 void AwaitTransformer::VisitLoadLocalNode(LoadLocalNode* node) {
-  result_ = node;
+  result_ = MakeName(node);
 }
 
 
 void AwaitTransformer::VisitStoreLocalNode(StoreLocalNode* node) {
   AstNode* new_value = Transform(node->value());
-  result_ = new(Z) StoreLocalNode(node->token_pos(), &node->local(), new_value);
+  result_ = MakeName(new(Z) StoreLocalNode(node->token_pos(),
+      &node->local(),
+      new_value));
 }
 
 
 void AwaitTransformer::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) {
-  result_ = node;
+  result_ = MakeName(node);
 }
 
 
 void AwaitTransformer::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) {
   AstNode* new_value = Transform(node->value());
-  result_ = new(Z) StoreStaticFieldNode(
-      node->token_pos(),
+  result_ = MakeName(new(Z) StoreStaticFieldNode(node->token_pos(),
       Field::ZoneHandle(Z, node->field().Original()),
-      new_value);
+      new_value));
 }
 
 
 void AwaitTransformer::VisitLoadIndexedNode(LoadIndexedNode* node) {
   AstNode* new_array = Transform(node->array());
   AstNode* new_index = Transform(node->index_expr());
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) LoadIndexedNode(node->token_pos(),
-                             new_array,
-                             new_index,
-                             node->super_class()), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) LoadIndexedNode(node->token_pos(),
+      new_array,
+      new_index,
+      node->super_class()));
 }
 
 
@@ -544,24 +525,20 @@
   AstNode* new_array = Transform(node->array());
   AstNode* new_index = Transform(node->index_expr());
   AstNode* new_value = Transform(node->value());
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) StoreIndexedNode(node->token_pos(),
-                              new_array,
-                              new_index,
-                              new_value,
-                              node->super_class()), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) StoreIndexedNode(node->token_pos(),
+      new_array,
+      new_index,
+      new_value,
+      node->super_class()));
 }
 
 
 void AwaitTransformer::VisitAssignableNode(AssignableNode* node) {
   AstNode* new_expr = Transform(node->expr());
-  LocalVariable* result = AddToPreambleNewTempVar(
-      new(Z) AssignableNode(node->token_pos(),
-                            new_expr,
-                            node->type(),
-                            node->dst_name()), ST(node->token_pos()));
-  result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result);
+  result_ = MakeName(new(Z) AssignableNode(node->token_pos(),
+      new_expr,
+      node->type(),
+      node->dst_name()));
 }
 
 
@@ -598,9 +575,9 @@
 
 void AwaitTransformer::VisitThrowNode(ThrowNode* node) {
   AstNode* new_exception = Transform(node->exception());
-  result_ = new(Z) ThrowNode(node->token_pos(),
-                             new_exception,
-                             node->stacktrace());
+  result_ = MakeName(new(Z) ThrowNode(node->token_pos(),
+      new_exception,
+      node->stacktrace()));
 }
 
 }  // namespace dart
diff --git a/runtime/vm/ast_transformer.h b/runtime/vm/ast_transformer.h
index 5930f41..e189afd 100644
--- a/runtime/vm/ast_transformer.h
+++ b/runtime/vm/ast_transformer.h
@@ -51,8 +51,9 @@
 
  private:
   LocalVariable* EnsureCurrentTempVar();
-  LocalVariable* AddToPreambleNewTempVar(AstNode* node,
+  LocalVariable* AddNewTempVarToPreamble(AstNode* node,
                                          TokenPosition token_pos);
+  LoadLocalNode* MakeName(AstNode* node);
   ArgumentListNode* TransformArguments(ArgumentListNode* node);
   AstNode* LazyTransform(const Token::Kind kind,
                          AstNode* new_left,
diff --git a/runtime/vm/block_scheduler.cc b/runtime/vm/block_scheduler.cc
index bc9885d..9c00cfb 100644
--- a/runtime/vm/block_scheduler.cc
+++ b/runtime/vm/block_scheduler.cc
@@ -61,7 +61,8 @@
       flow_graph()->parsed_function().function().ic_data_array());
   if (Compiler::IsBackgroundCompilation() && ic_data_array.IsNull()) {
     // Deferred loading cleared ic_data_array.
-    Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId);
+    Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId,
+        "BlockScheduler: ICData array cleared");
   }
   ASSERT(!ic_data_array.IsNull());
   Array& edge_counters = Array::Handle();
diff --git a/runtime/vm/bootstrap.cc b/runtime/vm/bootstrap.cc
index f9f418b..9bde826 100644
--- a/runtime/vm/bootstrap.cc
+++ b/runtime/vm/bootstrap.cc
@@ -300,7 +300,7 @@
       continue;
     }
 #endif  // !PRODUCT
-    uri = Symbols::New(bootstrap_libraries[i].uri_);
+    uri = Symbols::New(thread, bootstrap_libraries[i].uri_);
     lib = Library::LookupLibrary(uri);
     if (lib.IsNull()) {
       lib = Library::NewLibraryHelper(uri, false);
@@ -320,7 +320,7 @@
       continue;
     }
 #endif  // PRODUCT
-    uri = Symbols::New(bootstrap_libraries[i].uri_);
+    uri = Symbols::New(thread, bootstrap_libraries[i].uri_);
     lib = Library::LookupLibrary(uri);
     ASSERT(!lib.IsNull());
     source = GetLibrarySource(lib, uri, false);
@@ -338,7 +338,7 @@
     }
     // If a patch exists, load and patch the script.
     if (bootstrap_libraries[i].patch_paths_ != NULL) {
-      patch_uri = Symbols::New(bootstrap_libraries[i].patch_uri_);
+      patch_uri = Symbols::New(thread, bootstrap_libraries[i].patch_uri_);
       error = LoadPatchFiles(zone,
                              lib,
                              patch_uri,
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 1e79c57..777f1f9 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -95,6 +95,7 @@
   V(Double_truncate, 1)                                                        \
   V(Double_toInt, 1)                                                           \
   V(Double_parse, 3)                                                           \
+  V(Double_toString, 1)                                                        \
   V(Double_toStringAsFixed, 2)                                                 \
   V(Double_toStringAsExponential, 2)                                           \
   V(Double_toStringAsPrecision, 2)                                             \
@@ -352,7 +353,6 @@
   V(UserTag_makeCurrent, 1)                                                    \
   V(Profiler_getCurrentTag, 0)                                                 \
   V(ClassID_getID, 1)                                                          \
-  V(Num_toString, 1)                                                           \
   V(VMService_SendIsolateServiceMessage, 2)                                    \
   V(VMService_SendRootServiceMessage, 1)                                       \
   V(VMService_OnStart, 0)                                                      \
diff --git a/runtime/vm/cha.cc b/runtime/vm/cha.cc
index ed5255e..57214bb 100644
--- a/runtime/vm/cha.cc
+++ b/runtime/vm/cha.cc
@@ -48,6 +48,31 @@
 }
 
 
+bool CHA::ConcreteSubclasses(const Class& cls,
+                             GrowableArray<intptr_t> *class_ids) {
+  if (cls.InVMHeap()) return false;
+  if (cls.IsObjectClass()) return false;
+
+  if (!cls.is_abstract()) {
+    class_ids->Add(cls.id());
+  }
+
+  const GrowableObjectArray& direct_subclasses =
+      GrowableObjectArray::Handle(cls.direct_subclasses());
+  if (direct_subclasses.IsNull()) {
+    return true;
+  }
+  Class& subclass = Class::Handle();
+  for (intptr_t i = 0; i < direct_subclasses.Length(); i++) {
+    subclass ^= direct_subclasses.At(i);
+    if (!ConcreteSubclasses(subclass, class_ids)) {
+      return false;
+    }
+  }
+  return true;
+}
+
+
 bool CHA::IsImplemented(const Class& cls) {
   // Function type aliases have different type checking rules.
   ASSERT(!cls.IsTypedefClass());
diff --git a/runtime/vm/cha.h b/runtime/vm/cha.h
index fac6577..a1ea229 100644
--- a/runtime/vm/cha.h
+++ b/runtime/vm/cha.h
@@ -35,6 +35,11 @@
   static bool HasSubclasses(const Class& cls);
   bool HasSubclasses(intptr_t cid) const;
 
+  // Collect the concrete subclasses of 'cls' into 'class_ids'. Return true if
+  // the result is valid (may be invalid because we don't track the subclasses
+  // of classes allocated in the VM isolate or class Object).
+  bool ConcreteSubclasses(const Class& cls, GrowableArray<intptr_t> *class_ids);
+
   // Return true if the class is implemented by some other class.
   static bool IsImplemented(const Class& cls);
 
diff --git a/runtime/vm/cha_test.cc b/runtime/vm/cha_test.cc
index 7712324..0d0a1a4 100644
--- a/runtime/vm/cha_test.cc
+++ b/runtime/vm/cha_test.cc
@@ -42,19 +42,19 @@
   EXPECT(!lib.IsNull());
 
   const Class& class_a = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("A"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   EXPECT(!class_a.IsNull());
 
   const Class& class_b = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("B"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "B"))));
   EXPECT(!class_b.IsNull());
 
   const Class& class_c = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("C"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "C"))));
   EXPECT(!class_c.IsNull());
 
   const Class& class_d = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("D"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "D"))));
   EXPECT(!class_d.IsNull());
 
   const String& function_foo_name = String::Handle(String::New("foo"));
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 9497eab..1db0305 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1709,7 +1709,8 @@
       for (intptr_t i = 0; i < num_super_type_params; i++) {
         param ^= super_type_params.TypeAt(i);
         param_name = param.name();
-        param_name = Symbols::FromConcat(param_name, Symbols::Backtick());
+        param_name = Symbols::FromConcat(thread,
+                                         param_name, Symbols::Backtick());
         cloned_param = TypeParameter::New(mixin_app_class,
                                           cloned_index,
                                           param_name,
@@ -1890,7 +1891,8 @@
   // If this mixin alias is aliasing another mixin alias, another class
   // will be inserted via recursion. No need to check here.
   // The mixin type may or may not be finalized yet.
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   AbstractType& super_type = AbstractType::Handle(zone,
                                                   mixin_app_class.super_type());
   const Type& mixin_type = Type::Handle(zone, mixin_app_class.mixin());
@@ -1915,7 +1917,7 @@
   Class& inserted_class = Class::Handle(zone,
       library.LookupLocalClass(inserted_class_name));
   if (inserted_class.IsNull()) {
-    inserted_class_name = Symbols::New(inserted_class_name);
+    inserted_class_name = Symbols::New(thread, inserted_class_name);
     const Script& script = Script::Handle(zone, mixin_app_class.script());
     inserted_class = Class::New(
         inserted_class_name, script, mixin_app_class.token_pos());
@@ -2144,21 +2146,23 @@
     const Class& mixin_app,
     const Class& mixin_cls,
     const GrowableObjectArray& cloned_funcs) {
-  const String& mixin_name = String::Handle(mixin_app.Name());
-  const Class& super_class = Class::Handle(mixin_app.SuperClass());
-  const String& super_name = String::Handle(super_class.Name());
-  const Array& functions = Array::Handle(super_class.functions());
+  Thread* T = Thread::Current();
+  Zone* Z = T->zone();
+  const String& mixin_name = String::Handle(Z, mixin_app.Name());
+  const Class& super_class = Class::Handle(Z, mixin_app.SuperClass());
+  const String& super_name = String::Handle(Z, super_class.Name());
+  const Array& functions = Array::Handle(Z, super_class.functions());
   const intptr_t num_functions = functions.Length();
-  Function& func = Function::Handle();
+  Function& func = Function::Handle(Z);
   for (intptr_t i = 0; i < num_functions; i++) {
     func ^= functions.At(i);
     if (func.IsGenerativeConstructor()) {
       // Build constructor name from mixin application class name
       // and name of cloned super class constructor.
-      const String& ctor_name = String::Handle(func.name());
-      String& clone_name = String::Handle(
+      const String& ctor_name = String::Handle(Z, func.name());
+      String& clone_name = String::Handle(Z,
           String::SubString(ctor_name, super_name.Length()));
-      clone_name = Symbols::FromConcat(mixin_name, clone_name);
+      clone_name = Symbols::FromConcat(T, mixin_name, clone_name);
 
       if (FLAG_trace_class_finalization) {
         THR_Print("Cloning constructor '%s' as '%s'\n",
@@ -2170,9 +2174,9 @@
       // class. The source is the mixin class. The source may be needed
       // to parse field initializer expressions in the mixin class.
       const PatchClass& owner =
-          PatchClass::Handle(PatchClass::New(mixin_app, mixin_cls));
+          PatchClass::Handle(Z, PatchClass::New(mixin_app, mixin_cls));
 
-      const Function& clone = Function::Handle(
+      const Function& clone = Function::Handle(Z,
           Function::New(clone_name,
                         func.kind(),
                         func.is_static(),
@@ -2191,11 +2195,11 @@
       const intptr_t num_parameters = func.NumParameters();
       // The cloned ctor shares the parameter names array with the
       // original.
-      const Array& parameter_names = Array::Handle(func.parameter_names());
+      const Array& parameter_names = Array::Handle(Z, func.parameter_names());
       ASSERT(parameter_names.Length() == num_parameters);
       clone.set_parameter_names(parameter_names);
       // The parameter types of the cloned constructor are 'dynamic'.
-      clone.set_parameter_types(Array::Handle(Array::New(num_parameters)));
+      clone.set_parameter_types(Array::Handle(Z, Array::New(num_parameters)));
       for (intptr_t n = 0; n < num_parameters; n++) {
         clone.SetParameterTypeAt(n, Object::dynamic_type());
       }
@@ -2726,7 +2730,8 @@
     const MixinAppType& mixin_app_type) {
   // Lookup or create mixin application classes in the library of cls
   // and resolve super type and mixin types.
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   const Library& library = Library::Handle(zone, cls.library());
   ASSERT(!library.IsNull());
   const Script& script = Script::Handle(zone, cls.script());
@@ -2803,7 +2808,7 @@
                                           mixin_type_class_name);
     mixin_app_class = library.LookupLocalClass(mixin_app_class_name);
     if (mixin_app_class.IsNull()) {
-      mixin_app_class_name = Symbols::New(mixin_app_class_name);
+      mixin_app_class_name = Symbols::New(thread, mixin_app_class_name);
       mixin_app_class = Class::New(mixin_app_class_name,
                                    script,
                                    mixin_type.token_pos());
diff --git a/runtime/vm/class_finalizer_test.cc b/runtime/vm/class_finalizer_test.cc
index f1c492e..eb4447c 100644
--- a/runtime/vm/class_finalizer_test.cc
+++ b/runtime/vm/class_finalizer_test.cc
@@ -11,7 +11,8 @@
 
 
 static RawClass* CreateTestClass(const char* name) {
-  const String& class_name = String::Handle(Symbols::New(name));
+  const String& class_name = String::Handle(Symbols::New(Thread::Current(),
+                                                         name));
   const Script& script = Script::Handle();
   const Class& cls = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
@@ -74,7 +75,7 @@
 
 
 static RawLibrary* NewLib(const char* url_chars) {
-  String& url = String::ZoneHandle(Symbols::New(url_chars));
+  String& url = String::ZoneHandle(Symbols::New(Thread::Current(), url_chars));
   return Library::New(url);
 }
 
diff --git a/runtime/vm/code_descriptors_test.cc b/runtime/vm/code_descriptors_test.cc
index 5f8bb1d..3cc1ef9 100644
--- a/runtime/vm/code_descriptors_test.cc
+++ b/runtime/vm/code_descriptors_test.cc
@@ -221,7 +221,7 @@
   const Library& lib = Library::Handle(Library::LookupLibrary(name));
   EXPECT(!lib.IsNull());
   Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("A"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   EXPECT(!cls.IsNull());
 
   // Now compile the two functions 'A.foo' and 'A.moo'
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index 11b7f8c..1aa9dda 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -1078,7 +1078,7 @@
     if (is_extractor) {
       field_name = String::SubString(field_name, 1);
       ASSERT(!Field::IsGetterName(field_name));
-      field_name = Symbols::New(field_name);
+      field_name = Symbols::New(thread, field_name);
 
       if (!Field::IsSetterName(field_name)) {
         const String& getter_name =
diff --git a/runtime/vm/code_generator_test.cc b/runtime/vm/code_generator_test.cc
index e3c33a5..b532cf1 100644
--- a/runtime/vm/code_generator_test.cc
+++ b/runtime/vm/code_generator_test.cc
@@ -47,7 +47,8 @@
 
 // Helper to allocate and return a LocalVariable.
 static LocalVariable* NewTestLocalVariable(const char* name) {
-  const String& variable_name = String::ZoneHandle(Symbols::New(name));
+  const String& variable_name = String::ZoneHandle(
+      Symbols::New(Thread::Current(), name));
   const Type& variable_type = Type::ZoneHandle(Type::DynamicType());
   return new LocalVariable(kPos, variable_name, variable_type);
 }
@@ -212,7 +213,8 @@
 
 
 static Library& MakeTestLibrary(const char* url) {
-  const String& lib_url = String::ZoneHandle(Symbols::New(url));
+  const String& lib_url = String::ZoneHandle(Symbols::New(Thread::Current(),
+                                                          url));
   Library& lib = Library::ZoneHandle(Library::New(lib_url));
   lib.Register();
   Library& core_lib = Library::Handle(Library::CoreLibrary());
@@ -225,7 +227,8 @@
 
 
 static RawClass* LookupClass(const Library& lib, const char* name) {
-  const String& cls_name = String::ZoneHandle(Symbols::New(name));
+  const String& cls_name = String::ZoneHandle(Symbols::New(Thread::Current(),
+                                                           name));
   return lib.LookupClass(cls_name);
 }
 
@@ -301,7 +304,8 @@
   EXPECT(!constructor.IsNull());
 
   // The unit test creates an instance of class A and calls function 'bar'.
-  String& function_bar_name = String::ZoneHandle(Symbols::New("bar"));
+  String& function_bar_name = String::ZoneHandle(Symbols::New(Thread::Current(),
+                                                              "bar"));
   ArgumentListNode* no_arguments = new ArgumentListNode(kPos);
   const TypeArguments& no_type_arguments = TypeArguments::ZoneHandle();
   InstanceCallNode* call_bar = new InstanceCallNode(
@@ -360,7 +364,8 @@
   app_lib ^= libs.At(num_libs - 1);
   ASSERT(!app_lib.IsNull());
   const Class& cls = Class::Handle(
-      app_lib.LookupClass(String::Handle(Symbols::New("A"))));
+      app_lib.LookupClass(String::Handle(Symbols::New(Thread::Current(),
+                                                      "A"))));
   EXPECT_EQ(cls.raw(), result.clazz());
 }
 
diff --git a/runtime/vm/code_patcher_arm64_test.cc b/runtime/vm/code_patcher_arm64_test.cc
index 32d8ada..f11b00a 100644
--- a/runtime/vm/code_patcher_arm64_test.cc
+++ b/runtime/vm/code_patcher_arm64_test.cc
@@ -21,11 +21,13 @@
 #define __ assembler->
 
 ASSEMBLER_TEST_GENERATE(IcDataAccess, assembler) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  Thread* thread = Thread::Current();
+  const String& class_name = String::Handle(Symbols::New(thread, "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
-  const String& function_name = String::Handle(Symbols::New("callerFunction"));
+  const String& function_name = String::Handle(Symbols::New(thread,
+                                                            "callerFunction"));
   const Function& function = Function::Handle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/code_patcher_arm_test.cc b/runtime/vm/code_patcher_arm_test.cc
index 06b9f8c..a4cdfe5 100644
--- a/runtime/vm/code_patcher_arm_test.cc
+++ b/runtime/vm/code_patcher_arm_test.cc
@@ -21,11 +21,13 @@
 #define __ assembler->
 
 ASSEMBLER_TEST_GENERATE(IcDataAccess, assembler) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  Thread* thread = Thread::Current();
+  const String& class_name = String::Handle(Symbols::New(thread, "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
-  const String& function_name = String::Handle(Symbols::New("callerFunction"));
+  const String& function_name = String::Handle(Symbols::New(thread,
+                                                            "callerFunction"));
   const Function& function = Function::Handle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/code_patcher_ia32_test.cc b/runtime/vm/code_patcher_ia32_test.cc
index 26fe49f..55fe98f 100644
--- a/runtime/vm/code_patcher_ia32_test.cc
+++ b/runtime/vm/code_patcher_ia32_test.cc
@@ -21,11 +21,13 @@
 #define __ assembler->
 
 ASSEMBLER_TEST_GENERATE(IcDataAccess, assembler) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  Thread* thread = Thread::Current();
+  const String& class_name = String::Handle(Symbols::New(thread, "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
-  const String& function_name = String::Handle(Symbols::New("callerFunction"));
+  const String& function_name = String::Handle(Symbols::New(thread,
+                                                            "callerFunction"));
   const Function& function = Function::Handle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/code_patcher_mips_test.cc b/runtime/vm/code_patcher_mips_test.cc
index e99a987..0776083 100644
--- a/runtime/vm/code_patcher_mips_test.cc
+++ b/runtime/vm/code_patcher_mips_test.cc
@@ -21,11 +21,13 @@
 #define __ assembler->
 
 ASSEMBLER_TEST_GENERATE(IcDataAccess, assembler) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  Thread* thread = Thread::Current();
+  const String& class_name = String::Handle(Symbols::New(thread, "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
-  const String& function_name = String::Handle(Symbols::New("callerFunction"));
+  const String& function_name = String::Handle(Symbols::New(thread,
+                                                            "callerFunction"));
   const Function& function = Function::Handle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/code_patcher_x64_test.cc b/runtime/vm/code_patcher_x64_test.cc
index 13d2978..5102226 100644
--- a/runtime/vm/code_patcher_x64_test.cc
+++ b/runtime/vm/code_patcher_x64_test.cc
@@ -21,11 +21,13 @@
 #define __ assembler->
 
 ASSEMBLER_TEST_GENERATE(IcDataAccess, assembler) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  Thread* thread = Thread::Current();
+  const String& class_name = String::Handle(Symbols::New(thread, "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
-  const String& function_name = String::Handle(Symbols::New("callerFunction"));
+  const String& function_name = String::Handle(Symbols::New(thread,
+                                                            "callerFunction"));
   const Function& function = Function::Handle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 26e51fe..fd0e748 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -381,6 +381,9 @@
         field_invalidation_gen_at_start_(isolate()->field_invalidation_gen()),
         loading_invalidation_gen_at_start_(
             isolate()->loading_invalidation_gen()) {
+    if (Compiler::IsBackgroundCompilation()) {
+      isolate()->ClearDisablingFieldList();
+    }
   }
 
   bool Compile(CompilationPipeline* pipeline);
@@ -412,6 +415,28 @@
 };
 
 
+// Returns true if any of disabling fields is inside the guarded_fields.
+// The number of guarded_fields and disabling-fields is expected to be small
+// (less than 5).
+static bool CheckDisablingFields(
+    Thread* thread,
+    const ZoneGrowableArray<const Field*>& guarded_fields) {
+  Isolate* isolate = thread->isolate();
+  Zone* zone = thread->zone();
+  Field& field = Field::Handle(zone, isolate->GetDisablingField());
+  while (!field.IsNull()) {
+    for (intptr_t i = 0; i < guarded_fields.length(); i++) {
+      if (guarded_fields.At(i)->raw() == field.raw()) {
+        return true;
+      }
+    }
+    // Get next field.
+    field = isolate->GetDisablingField();
+  }
+  return false;
+}
+
+
 void CompileParsedFunctionHelper::FinalizeCompilation(
     Assembler* assembler,
     FlowGraphCompiler* graph_compiler,
@@ -499,10 +524,15 @@
       if (!flow_graph->parsed_function().guarded_fields()->is_empty()) {
         if (field_invalidation_gen_at_start() !=
             isolate()->field_invalidation_gen()) {
-          code_is_valid = false;
-          if (trace_compiler) {
-            THR_Print("--> FAIL: Field invalidation.");
-          }
+          const ZoneGrowableArray<const Field*>& guarded_fields =
+              *flow_graph->parsed_function().guarded_fields();
+          bool field_conflict = CheckDisablingFields(thread(), guarded_fields);
+          if (field_conflict) {
+            code_is_valid = false;
+            if (trace_compiler) {
+              THR_Print("--> FAIL: Field invalidation.");
+            }
+         }
         }
       }
       if (loading_invalidation_gen_at_start() !=
@@ -627,7 +657,8 @@
 
           if (Compiler::IsBackgroundCompilation() &&
               (function.ic_data_array() == Array::null())) {
-            Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId);
+            Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId,
+                "RestoreICDataMap: ICData array cleared.");
           }
           if (FLAG_print_ic_data_map) {
             for (intptr_t i = 0; i < ic_data_array->length(); i++) {
@@ -1035,6 +1066,11 @@
             // Do not Garbage collect during this stage and instead allow the
             // heap to grow.
             NoHeapGrowthControlScope no_growth_control;
+            if (!isolate()->background_compiler()->is_running()) {
+              // The background compiler is being stopped.
+              Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId,
+                  "Background compilation is being stopped");
+            }
             FinalizeCompilation(&assembler, &graph_compiler, flow_graph);
           }
           if (isolate()->heap()->NeedsGarbageCollection()) {
@@ -1161,7 +1197,8 @@
                isolate->loading_invalidation_gen())) {
         // Loading occured while parsing. We need to abort here because state
         // changed while compiling.
-        Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId);
+        Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId,
+            "Invalidated state during parsing because of script loading");
       }
     }
 
@@ -1497,7 +1534,7 @@
     // Function fits the bill.
     const char* kEvalConst = "eval_const";
     const Function& func = Function::ZoneHandle(Function::New(
-        String::Handle(Symbols::New(kEvalConst)),
+        String::Handle(Symbols::New(thread, kEvalConst)),
         RawFunction::kRegularFunction,
         true,  // static function
         false,  // not const function
@@ -1545,9 +1582,18 @@
 }
 
 
-void Compiler::AbortBackgroundCompilation(intptr_t deopt_id) {
+void Compiler::AbortBackgroundCompilation(intptr_t deopt_id, const char* msg) {
   if (FLAG_trace_compiler) {
-    THR_Print("ABORT background compilation\n");
+    THR_Print("ABORT background compilation: %s\n", msg);
+  }
+  TimelineStream* stream = Timeline::GetCompilerStream();
+  ASSERT(stream != NULL);
+  TimelineEvent* event = stream->StartEvent();
+  if (event != NULL) {
+    event->Instant("AbortBackgroundCompilation");
+    event->SetNumArguments(1);
+    event->CopyArgument(0, "reason", msg);
+    event->Complete();
   }
   ASSERT(Compiler::IsBackgroundCompilation());
   Thread::Current()->long_jump_base()->Jump(
@@ -1564,7 +1610,8 @@
     ASSERT(Thread::Current()->IsMutatorThread());
   }
 
-  ~QueueElement() {
+  virtual ~QueueElement() {
+    next_ = NULL;
     function_ = Function::null();
   }
 
@@ -1592,12 +1639,8 @@
 class BackgroundCompilationQueue {
  public:
   BackgroundCompilationQueue() : first_(NULL), last_(NULL) {}
-  ~BackgroundCompilationQueue() {
-    while (!IsEmpty()) {
-      QueueElement* e = Remove();
-      delete e;
-    }
-    ASSERT((first_ == NULL) && (last_ == NULL));
+  virtual ~BackgroundCompilationQueue() {
+    Clear();
   }
 
   void VisitObjectPointers(ObjectPointerVisitor* visitor) {
@@ -1613,13 +1656,16 @@
 
   void Add(QueueElement* value) {
     ASSERT(value != NULL);
+    ASSERT(value->next() == NULL);
     if (first_ == NULL) {
       first_ = value;
+      ASSERT(last_ == NULL);
     } else {
+      ASSERT(last_ != NULL);
       last_->set_next(value);
     }
-    value->set_next(NULL);
     last_ = value;
+    ASSERT(first_ != NULL && last_ != NULL);
   }
 
   QueueElement* Peek() const {
@@ -1656,6 +1702,14 @@
     return false;
   }
 
+  void Clear() {
+    while (!IsEmpty()) {
+      QueueElement* e = Remove();
+      delete e;
+    }
+    ASSERT((first_ == NULL) && (last_ == NULL));
+  }
+
  private:
   QueueElement* first_;
   QueueElement* last_;
@@ -1672,6 +1726,17 @@
 }
 
 
+// Fields all deleted in ::Stop; here clear them.
+BackgroundCompiler::~BackgroundCompiler() {
+  isolate_ = NULL;
+  running_ = false;
+  done_ = NULL;
+  queue_monitor_ = NULL;
+  done_monitor_ = NULL;
+  function_queue_ = NULL;
+}
+
+
 void BackgroundCompiler::Run() {
   while (running_) {
     // Maybe something is already in the queue, check first before waiting
@@ -1684,7 +1749,9 @@
       Zone* zone = stack_zone.GetZone();
       HANDLESCOPE(thread);
       Function& function = Function::Handle(zone);
-      function = function_queue()->PeekFunction();
+      { MonitorLocker ml(queue_monitor_);
+        function = function_queue()->PeekFunction();
+      }
       while (running_ && !function.IsNull()) {
         // Check that we have aggregated and cleared the stats.
         ASSERT(thread->compiler_stats()->IsCleared());
@@ -1705,9 +1772,20 @@
         }
         thread->compiler_stats()->Clear();
 #endif  // PRODUCT
-        QueueElement* qelem = function_queue()->Remove();
-        delete qelem;
-        function = function_queue()->PeekFunction();
+
+        QueueElement* qelem = NULL;
+        { MonitorLocker ml(queue_monitor_);
+          if (function_queue()->IsEmpty()) {
+            // We are shutting down, queue was cleared.
+            function = Function::null();
+          } else {
+            qelem = function_queue()->Remove();
+            function = function_queue()->PeekFunction();
+          }
+        }
+        if (qelem != NULL) {
+          delete qelem;
+        }
       }
     }
     Thread::ExitIsolateAsHelper();
@@ -1732,6 +1810,7 @@
 void BackgroundCompiler::CompileOptimized(const Function& function) {
   ASSERT(Thread::Current()->IsMutatorThread());
   MonitorLocker ml(queue_monitor_);
+  ASSERT(running_);
   if (function_queue()->ContainsObj(function)) {
     return;
   }
@@ -1746,8 +1825,8 @@
 }
 
 
-void BackgroundCompiler::Stop(BackgroundCompiler* task) {
-  ASSERT(Isolate::Current()->background_compiler() == task);
+void BackgroundCompiler::Stop(Isolate* isolate) {
+  BackgroundCompiler* task = isolate->background_compiler();
   ASSERT(task != NULL);
   BackgroundCompilationQueue* function_queue = task->function_queue();
 
@@ -1756,8 +1835,9 @@
   bool* task_done = task->done_;
   // Wake up compiler task and stop it.
   {
-    MonitorLocker ml(task->queue_monitor_);
+    MonitorLocker ml(queue_monitor);
     task->running_ = false;
+    function_queue->Clear();
     // 'task' will be deleted by thread pool.
     task = NULL;
     ml.Notify();   // Stop waiting for the queue.
@@ -1773,7 +1853,7 @@
   delete done_monitor;
   delete queue_monitor;
   delete function_queue;
-  Isolate::Current()->set_background_compiler(NULL);
+  isolate->set_background_compiler(NULL);
 }
 
 
@@ -1899,7 +1979,7 @@
 }
 
 
-void Compiler::AbortBackgroundCompilation(intptr_t deopt_id) {
+void Compiler::AbortBackgroundCompilation(intptr_t deopt_id, const char* msg) {
   UNREACHABLE();
 }
 
@@ -1914,7 +1994,7 @@
 }
 
 
-void BackgroundCompiler::Stop(BackgroundCompiler* task) {
+void BackgroundCompiler::Stop(Isolate* isolate) {
   UNREACHABLE();
 }
 
diff --git a/runtime/vm/compiler.h b/runtime/vm/compiler.h
index 01822ac..2f2eb1c 100644
--- a/runtime/vm/compiler.h
+++ b/runtime/vm/compiler.h
@@ -146,7 +146,8 @@
   // because the mutator thread changed the state (e.g., deoptimization,
   // deferred loading). The background compilation may retry to compile
   // the same function later.
-  static void AbortBackgroundCompilation(intptr_t deopt_id);
+  static void AbortBackgroundCompilation(intptr_t deopt_id,
+                                         const char* msg = "");
 };
 
 
@@ -156,9 +157,12 @@
 // No OSR compilation in the background compiler.
 class BackgroundCompiler : public ThreadPool::Task {
  public:
+  virtual ~BackgroundCompiler();
+
   static void EnsureInit(Thread* thread);
 
-  static void Stop(BackgroundCompiler* task);
+  // Stops background compiler of the given isolate.
+  static void Stop(Isolate* isolate);
 
   // Call to optimize a function in the background, enters the function in the
   // compilation queue.
@@ -167,6 +171,7 @@
   void VisitPointers(ObjectPointerVisitor* visitor);
 
   BackgroundCompilationQueue* function_queue() const { return function_queue_; }
+  bool is_running() const { return running_; }
 
  private:
   explicit BackgroundCompiler(Isolate* isolate);
diff --git a/runtime/vm/compiler_test.cc b/runtime/vm/compiler_test.cc
index 3eda03d..f2e138c 100644
--- a/runtime/vm/compiler_test.cc
+++ b/runtime/vm/compiler_test.cc
@@ -47,7 +47,7 @@
   EXPECT(CompilerTest::TestCompileScript(lib, script));
   EXPECT(ClassFinalizer::ProcessPendingClasses());
   Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("A"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   EXPECT(!cls.IsNull());
   String& function_foo_name = String::Handle(String::New("foo"));
   Function& function_foo =
@@ -87,7 +87,7 @@
   EXPECT(CompilerTest::TestCompileScript(lib, script));
   EXPECT(ClassFinalizer::ProcessPendingClasses());
   Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("A"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   EXPECT(!cls.IsNull());
   String& function_foo_name = String::Handle(String::New("foo"));
   Function& func =
@@ -109,7 +109,7 @@
   while (!func.HasOptimizedCode()) {
     ml.WaitWithSafepointCheck(thread, 1);
   }
-  BackgroundCompiler::Stop(isolate->background_compiler());
+  BackgroundCompiler::Stop(isolate);
 }
 
 
@@ -129,7 +129,7 @@
   RawLibrary* raw_library = Library::RawCast(Api::UnwrapHandle(lib));
   Library& lib_handle = Library::ZoneHandle(raw_library);
   Class& cls = Class::Handle(
-      lib_handle.LookupClass(String::Handle(Symbols::New("A"))));
+      lib_handle.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   EXPECT(!cls.IsNull());
 
   Zone* zone = thread->zone();
diff --git a/runtime/vm/constant_propagator.cc b/runtime/vm/constant_propagator.cc
index 03ab8ae..b8e7c2a 100644
--- a/runtime/vm/constant_propagator.cc
+++ b/runtime/vm/constant_propagator.cc
@@ -323,7 +323,7 @@
   // class ids. Otherwise LICM might potentially hoist incorrect code.
   const Object& value = instr->value()->definition()->constant_value();
   if (IsConstant(value) &&
-      CheckClassInstr::IsImmutableClassId(value.GetClassId())) {
+      !Field::IsExternalizableCid(value.GetClassId())) {
     SetValue(instr, value);
   } else {
     SetValue(instr, non_constant_);
@@ -805,7 +805,7 @@
   const Object& object = instr->object()->definition()->constant_value();
   if (IsConstant(object)) {
     cid = object.GetClassId();
-    if (CheckClassInstr::IsImmutableClassId(cid)) {
+    if (!Field::IsExternalizableCid(cid)) {
       SetValue(instr, Smi::ZoneHandle(Z, Smi::New(cid)));
       return;
     }
diff --git a/runtime/vm/coverage.cc b/runtime/vm/coverage.cc
deleted file mode 100644
index 7a678a0..0000000
--- a/runtime/vm/coverage.cc
+++ /dev/null
@@ -1,313 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "vm/coverage.h"
-
-#include "include/dart_api.h"
-
-#include "vm/compiler.h"
-#include "vm/isolate.h"
-#include "vm/json_stream.h"
-#include "vm/longjump.h"
-#include "vm/object.h"
-#include "vm/object_store.h"
-
-namespace dart {
-
-DEFINE_FLAG(charp, coverage_dir, NULL,
-            "Enable writing coverage data into specified directory.");
-
-
-class CoverageFilterAll : public CoverageFilter {
- public:
-  bool ShouldOutputCoverageFor(const Library& lib,
-                               const Script& script,
-                               const Class& cls,
-                               const Function& func) const {
-    return true;
-  }
-};
-
-
-// map[token_pos] -> line-number.
-static void ComputeTokenPosToLineNumberMap(const Script& script,
-                                           GrowableArray<intptr_t>* map) {
-  const TokenStream& tkns = TokenStream::Handle(script.tokens());
-  const intptr_t len = ExternalTypedData::Handle(tkns.GetStream()).Length();
-  map->SetLength(len);
-#if defined(DEBUG)
-  for (intptr_t i = 0; i < len; i++) {
-    (*map)[i] = -1;
-  }
-#endif
-  TokenStream::Iterator tkit(tkns,
-                             TokenPosition::kMinSource,
-                             TokenStream::Iterator::kAllTokens);
-  intptr_t cur_line = script.line_offset() + 1;
-  while (tkit.CurrentTokenKind() != Token::kEOS) {
-    const intptr_t position = tkit.CurrentPosition().Pos();
-    (*map)[position] = cur_line;
-    if (tkit.CurrentTokenKind() == Token::kNEWLINE) {
-      cur_line++;
-    }
-    tkit.Advance();
-  }
-}
-
-
-void CodeCoverage::CompileAndAdd(const Function& function,
-                                 const JSONArray& hits_or_sites,
-                                 const GrowableArray<intptr_t>& pos_to_line,
-                                 bool as_call_sites) {
-  if (!FLAG_support_coverage) {
-    return;
-  }
-  // If the function should not be compiled for coverage analysis, then just
-  // skip this method.
-  // TODO(iposva): Maybe we should skip synthesized methods in general too.
-  if (function.is_abstract() || function.IsRedirectingFactory()) {
-    return;
-  }
-  if (function.IsNonImplicitClosureFunction() &&
-      (function.context_scope() == ContextScope::null())) {
-    // TODO(iposva): This can arise if we attempt to compile an inner function
-    // before we have compiled its enclosing function or if the enclosing
-    // function failed to compile.
-    return;
-  }
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  // Make sure we have the unoptimized code for this function available.
-  if (Compiler::EnsureUnoptimizedCode(thread, function) != Error::null()) {
-    // Ignore the error and this function entirely.
-    return;
-  }
-  const Code& code = Code::Handle(zone, function.unoptimized_code());
-  ASSERT(!code.IsNull());
-
-  // Print the hit counts for all IC datas.
-  ZoneGrowableArray<const ICData*>* ic_data_array =
-      new(zone) ZoneGrowableArray<const ICData*>();
-  function.RestoreICDataMap(ic_data_array, false /* clone ic-data */);
-  const PcDescriptors& descriptors = PcDescriptors::Handle(
-      zone, code.pc_descriptors());
-
-  const TokenPosition begin_pos = function.token_pos();
-  const TokenPosition end_pos = function.end_token_pos();
-  intptr_t last_line = -1;
-  intptr_t last_count = 0;
-  // Only IC based calls have counting.
-  PcDescriptors::Iterator iter(descriptors,
-      RawPcDescriptors::kIcCall | RawPcDescriptors::kUnoptStaticCall);
-  while (iter.MoveNext()) {
-    HANDLESCOPE(thread);
-    const ICData* ic_data = (*ic_data_array)[iter.DeoptId()];
-    if (!ic_data->IsNull()) {
-      const TokenPosition token_pos = iter.TokenPos();
-      // Filter out descriptors that do not map to tokens in the source code.
-      if ((token_pos < begin_pos) || (token_pos > end_pos)) {
-        continue;
-      }
-      if (as_call_sites) {
-        bool is_static_call = iter.Kind() == RawPcDescriptors::kUnoptStaticCall;
-        ic_data->PrintToJSONArray(hits_or_sites,
-                                  token_pos,
-                                  is_static_call);
-      } else {
-        intptr_t line = pos_to_line[token_pos.Pos()];
-#if defined(DEBUG)
-        const Script& script = Script::Handle(zone, function.script());
-        intptr_t test_line = -1;
-        script.GetTokenLocation(token_pos, &test_line, NULL);
-        ASSERT(test_line == line);
-#endif
-        // Merge hit data where possible.
-        if (last_line == line) {
-          last_count += ic_data->AggregateCount();
-        } else {
-          if ((last_line != -1)) {
-            hits_or_sites.AddValue(last_line);
-            hits_or_sites.AddValue(last_count);
-          }
-          last_count = ic_data->AggregateCount();
-          last_line = line;
-        }
-      }
-    }
-  }
-  // Write last hit value if needed.
-  if (!as_call_sites && (last_line != -1)) {
-    hits_or_sites.AddValue(last_line);
-    hits_or_sites.AddValue(last_count);
-  }
-}
-
-
-void CodeCoverage::PrintClass(const Library& lib,
-                              const Class& cls,
-                              const JSONArray& jsarr,
-                              CoverageFilter* filter,
-                              bool as_call_sites) {
-  if (!FLAG_support_coverage) {
-    return;
-  }
-  Thread* thread = Thread::Current();
-  if (cls.EnsureIsFinalized(thread) != Error::null()) {
-    // Only classes that have been finalized do have a meaningful list of
-    // functions.
-    return;
-  }
-  Array& functions = Array::Handle(cls.functions());
-  ASSERT(!functions.IsNull());
-  Function& function = Function::Handle();
-  Script& script = Script::Handle();
-  String& saved_url = String::Handle();
-  String& url = String::Handle();
-  GrowableArray<intptr_t> pos_to_line;
-  int i = 0;
-  while (i < functions.Length()) {
-    HANDLESCOPE(thread);
-    function ^= functions.At(i);
-    script = function.script();
-    saved_url = script.url();
-    if (!filter->ShouldOutputCoverageFor(lib, script, cls, function)) {
-      i++;
-      continue;
-    }
-    if (!as_call_sites) {
-      ComputeTokenPosToLineNumberMap(script, &pos_to_line);
-    }
-    JSONObject jsobj(&jsarr);
-    jsobj.AddProperty("source", saved_url.ToCString());
-    jsobj.AddProperty("script", script);
-    JSONArray hits_or_sites(&jsobj, as_call_sites ? "callSites" : "hits");
-
-    // We stay within this loop while we are seeing functions from the same
-    // source URI.
-    while (i < functions.Length()) {
-      function ^= functions.At(i);
-      script = function.script();
-      url = script.url();
-      if (!url.Equals(saved_url)) {
-        pos_to_line.Clear();
-        break;
-      }
-      if (!filter->ShouldOutputCoverageFor(lib, script, cls, function)) {
-        i++;
-        continue;
-      }
-      CompileAndAdd(function, hits_or_sites, pos_to_line, as_call_sites);
-      i++;
-    }
-  }
-
-  // TODO(turnidge): This looks like it prints closures many, many times.
-  const GrowableObjectArray& closures = GrowableObjectArray::Handle(
-      thread->isolate()->object_store()->closure_functions());
-  pos_to_line.Clear();
-  // We need to keep rechecking the length of the closures array, as handling
-  // a closure potentially adds new entries to the end.
-  i = 0;
-  while (i < closures.Length()) {
-    HANDLESCOPE(thread);
-    function ^= closures.At(i);
-    if (function.Owner() != cls.raw()) {
-      i++;
-      continue;
-    }
-    script = function.script();
-    saved_url = script.url();
-    if (!filter->ShouldOutputCoverageFor(lib, script, cls, function)) {
-      i++;
-      continue;
-    }
-    ComputeTokenPosToLineNumberMap(script, &pos_to_line);
-    JSONObject jsobj(&jsarr);
-    jsobj.AddProperty("source", saved_url.ToCString());
-    jsobj.AddProperty("script", script);
-    JSONArray hits_or_sites(&jsobj, as_call_sites ? "callSites" : "hits");
-
-    // We stay within this loop while we are seeing functions from the same
-    // source URI.
-    while (i < closures.Length()) {
-      function ^= closures.At(i);
-      script = function.script();
-      url = script.url();
-      if (!url.Equals(saved_url)) {
-        pos_to_line.Clear();
-        break;
-      }
-      CompileAndAdd(function, hits_or_sites, pos_to_line, as_call_sites);
-      i++;
-    }
-  }
-}
-
-
-void CodeCoverage::Write(Thread* thread) {
-  if (!FLAG_support_coverage) {
-    return;
-  }
-  if (FLAG_coverage_dir == NULL) {
-    return;
-  }
-
-  Dart_FileOpenCallback file_open = Dart::file_open_callback();
-  Dart_FileWriteCallback file_write = Dart::file_write_callback();
-  Dart_FileCloseCallback file_close = Dart::file_close_callback();
-  if ((file_open == NULL) || (file_write == NULL) || (file_close == NULL)) {
-    return;
-  }
-
-  JSONStream stream;
-  PrintJSON(thread, &stream, NULL, false);
-
-  intptr_t pid = OS::ProcessId();
-  char* filename = OS::SCreate(thread->zone(),
-      "%s/dart-cov-%" Pd "-%" Pd64 ".json",
-      FLAG_coverage_dir, pid, thread->isolate()->main_port());
-  void* file = (*file_open)(filename, true);
-  if (file == NULL) {
-    OS::Print("Failed to write coverage file: %s\n", filename);
-    return;
-  }
-  (*file_write)(stream.buffer()->buf(), stream.buffer()->length(), file);
-  (*file_close)(file);
-}
-
-
-void CodeCoverage::PrintJSON(Thread* thread,
-                             JSONStream* stream,
-                             CoverageFilter* filter,
-                             bool as_call_sites) {
-  if (!FLAG_support_coverage) {
-    return;
-  }
-  CoverageFilterAll default_filter;
-  if (filter == NULL) {
-    filter = &default_filter;
-  }
-  const GrowableObjectArray& libs = GrowableObjectArray::Handle(
-      thread->zone(),
-      thread->isolate()->object_store()->libraries());
-  Library& lib = Library::Handle();
-  Class& cls = Class::Handle();
-  JSONObject coverage(stream);
-  coverage.AddProperty("type", "CodeCoverage");
-  {
-    JSONArray jsarr(&coverage, "coverage");
-    for (int i = 0; i < libs.Length(); i++) {
-      lib ^= libs.At(i);
-      ClassDictionaryIterator it(lib, ClassDictionaryIterator::kIteratePrivate);
-      while (it.HasNext()) {
-        cls = it.GetNextClass();
-        ASSERT(!cls.IsNull());
-        PrintClass(lib, cls, jsarr, filter, as_call_sites);
-      }
-    }
-  }
-}
-
-
-}  // namespace dart
diff --git a/runtime/vm/coverage.h b/runtime/vm/coverage.h
deleted file mode 100644
index 8c2ce23..0000000
--- a/runtime/vm/coverage.h
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#ifndef VM_COVERAGE_H_
-#define VM_COVERAGE_H_
-
-#include "vm/allocation.h"
-#include "vm/flags.h"
-
-namespace dart {
-
-DECLARE_FLAG(charp, coverage_dir);
-
-// Forward declarations.
-class Class;
-class Function;
-template <typename T> class GrowableArray;
-class Isolate;
-class JSONArray;
-class JSONStream;
-class Library;
-class Script;
-class String;
-
-class CoverageFilter : public ValueObject {
- public:
-  virtual bool ShouldOutputCoverageFor(const Library& lib,
-                                       const Script& script,
-                                       const Class& cls,
-                                       const Function& func) const = 0;
-  virtual ~CoverageFilter() {}
-};
-
-class CodeCoverage : public AllStatic {
- public:
-  static void Write(Thread* thread);
-  static void PrintJSON(Thread* thread,
-                        JSONStream* stream,
-                        CoverageFilter* filter,
-                        bool as_call_sites);
-
- private:
-  static void PrintClass(const Library& lib,
-                         const Class& cls,
-                         const JSONArray& arr,
-                         CoverageFilter* filter,
-                         bool as_call_sites);
-  static void CompileAndAdd(const Function& function,
-                            const JSONArray& hits_or_sites,
-                            const GrowableArray<intptr_t>& pos_to_line,
-                            bool as_call_sites);
-};
-
-}  // namespace dart
-
-#endif  // VM_COVERAGE_H_
diff --git a/runtime/vm/coverage_test.cc b/runtime/vm/coverage_test.cc
deleted file mode 100644
index 025c6ed..0000000
--- a/runtime/vm/coverage_test.cc
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-#include "vm/coverage.h"
-#include "vm/dart_api_impl.h"
-#include "vm/unit_test.h"
-
-namespace dart {
-
-#ifndef PRODUCT
-
-static RawObject* ExecuteScript(const char* script) {
-  TransitionVMToNative transition(Thread::Current());
-  Dart_Handle h_lib = TestCase::LoadTestScript(script, NULL);
-  EXPECT_VALID(h_lib);
-  Library& lib = Library::Handle();
-  lib ^= Api::UnwrapHandle(h_lib);
-  EXPECT(!lib.IsNull());
-  Dart_Handle result = Dart_Invoke(h_lib, NewString("main"), 0, NULL);
-  EXPECT_VALID(result);
-  return Api::UnwrapHandle(h_lib);
-}
-
-
-class FunctionCoverageFilter : public CoverageFilter {
- public:
-  explicit FunctionCoverageFilter(const Function& func) : func_(func) {}
-  bool ShouldOutputCoverageFor(const Library& lib,
-                               const Script& script,
-                               const Class& cls,
-                               const Function& func) const {
-    return func.raw() == func_.raw();
-  }
- private:
-  const Function& func_;
-};
-
-
-VM_TEST_CASE(Coverage_Empty) {
-  const char* kScript =
-      "main() {\n"
-      "}";
-
-  Library& lib = Library::Handle();
-  lib ^= ExecuteScript(kScript);
-  ASSERT(!lib.IsNull());
-
-  JSONStream js;
-  CodeCoverage::PrintJSON(thread, &js, NULL, false);
-
-  char buf[1024];
-  OS::SNPrint(buf, sizeof(buf),
-      "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
-      "\"fixedId\":true,\"id\":\"libraries\\/%" Pd  "\\/scripts\\/test-lib\","
-      "\"uri\":\"test-lib\","
-      "\"_kind\":\"script\"},\"hits\":[]}", lib.index());
-  EXPECT_SUBSTRING(buf, js.ToCString());
-}
-
-
-VM_TEST_CASE(Coverage_MainWithClass) {
-  const char* kScript =
-      "class Foo {\n"
-      "  var x;\n"
-      "  Foo(this.x);\n"
-      "  bar() {\n"
-      "    x = x * x;\n"
-      "    x = x / 13;\n"
-      "  }\n"
-      "}\n"
-      "main() {\n"
-      "  var foo = new Foo(7);\n"
-      "  foo.bar();\n"
-      "}\n";
-
-  Library& lib = Library::Handle();
-  lib ^= ExecuteScript(kScript);
-  ASSERT(!lib.IsNull());
-
-  JSONStream js;
-  CodeCoverage::PrintJSON(thread, &js, NULL, false);
-
-  char buf[1024];
-  // Coverage data is printed per class, i.e., there should be two sections
-  // for test-lib in the JSON data.
-
-  // Data for the actual class Foo.
-  OS::SNPrint(buf, sizeof(buf),
-      "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
-      "\"fixedId\":true,\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
-      "\"uri\":\"test-lib\","
-      "\"_kind\":\"script\"},\"hits\":[3,1,5,4,6,3]}", lib.index());
-  EXPECT_SUBSTRING(buf, js.ToCString());
-
-  // Data for the fake class containing main().
-  OS::SNPrint(buf, sizeof(buf),
-      "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
-      "\"fixedId\":true,\"id\":\"libraries\\/%" Pd  "\\/scripts\\/test-lib\","
-      "\"uri\":\"test-lib\","
-      "\"_kind\":\"script\"},\"hits\":[10,1,11,1]}", lib.index());
-  EXPECT_SUBSTRING(buf, js.ToCString());
-}
-
-
-VM_TEST_CASE(Coverage_FilterFunction) {
-  const char* kScript =
-      "class Foo {\n"
-      "  var x;\n"
-      "  var y;\n"
-      "  Foo(this.x);\n"
-      "  Foo.other(this.x, this.y);\n"
-      "  Foo.yetAnother();\n"
-      "}\n"
-      "main() {\n"
-      "  var foo = new Foo(7);\n"
-      "}\n";
-
-  Library& lib = Library::Handle();
-  lib ^= ExecuteScript(kScript);
-  ASSERT(!lib.IsNull());
-  const Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(String::New("Foo"))));
-  ASSERT(!cls.IsNull());
-  const Function& func = Function::Handle(
-      cls.LookupFunction(String::Handle(String::New("Foo.yetAnother"))));
-  ASSERT(!func.IsNull());
-
-  JSONStream js;
-  FunctionCoverageFilter filter(func);
-  CodeCoverage::PrintJSON(thread, &js, &filter, false);
-  // Only expect coverage data for Foo.yetAnother() on line 6.
-  char buf[1024];
-  OS::SNPrint(buf, sizeof(buf),
-      "{\"source\":\"test-lib\",\"script\":{\"type\":\"@Script\","
-      "\"fixedId\":true,\"id\":\"libraries\\/%" Pd "\\/scripts\\/test-lib\","
-      "\"uri\":\"test-lib\","
-      "\"_kind\":\"script\"},\"hits\":[6,0]}", lib.index());
-  EXPECT_SUBSTRING(buf, js.ToCString());
-}
-
-#endif  // !PRODUCT
-
-}  // namespace dart
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index fd0050d..e8c31a9 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -59,6 +59,9 @@
 #endif  // defined(DART_NO_SNAPSHOT).
 DEFINE_FLAG(bool, verify_acquired_data, false,
             "Verify correct API acquire/release of typed data.");
+DEFINE_FLAG(bool, support_externalizable_strings, false,
+            "Support Dart_MakeExternalString.");
+
 
 ThreadLocalKey Api::api_native_key_ = kUnsetThreadLocalKey;
 Dart_Handle Api::true_handle_ = NULL;
@@ -2519,6 +2522,10 @@
                                                 void* peer,
                                                 Dart_PeerFinalizer cback) {
   DARTSCOPE(Thread::Current());
+  if (!FLAG_support_externalizable_strings) {
+    return Api::NewError("Dart_MakeExternalString with "
+                         "--support_externalizable_strings=false");
+  }
   const String& str_obj = Api::UnwrapStringHandle(Z, str);
   if (str_obj.IsExternal()) {
     return str;  // String is already an external string.
@@ -4262,7 +4269,7 @@
     // getter Function.
     Class& cls = Class::Handle(Z, Type::Cast(obj).type_class());
 
-    field = cls.LookupStaticField(field_name);
+    field = cls.LookupStaticFieldAllowPrivate(field_name);
     if (field.IsNull() || field.IsUninitialized()) {
       const String& getter_name =
           String::Handle(Z, Field::GetterName(field_name));
@@ -4392,7 +4399,7 @@
     // setter Function.
     Class& cls = Class::Handle(Z, Type::Cast(obj).type_class());
 
-    field = cls.LookupStaticField(field_name);
+    field = cls.LookupStaticFieldAllowPrivate(field_name);
     if (field.IsNull()) {
       String& setter_name = String::Handle(Z, Field::SetterName(field_name));
       setter = cls.LookupStaticFunctionAllowPrivate(setter_name);
@@ -4431,7 +4438,7 @@
     Class& cls = Class::Handle(Z, instance.clazz());
     String& setter_name = String::Handle(Z, Field::SetterName(field_name));
     while (!cls.IsNull()) {
-      field = cls.LookupInstanceField(field_name);
+      field = cls.LookupInstanceFieldAllowPrivate(field_name);
       if (!field.IsNull() && field.is_final()) {
         return Api::NewError("%s: cannot set final field '%s'.",
                              CURRENT_FUNC, field_name.ToCString());
@@ -4611,7 +4618,7 @@
   }
   CHECK_CALLBACK_STATE(T);
 
-  String& cls_symbol = String::Handle(Z, Symbols::New(cls_name));
+  String& cls_symbol = String::Handle(Z, Symbols::New(T, cls_name));
   const Class& cls = Class::Handle(Z,
       Class::NewNativeWrapper(lib, cls_symbol, field_count));
   if (cls.IsNull()) {
@@ -5465,7 +5472,7 @@
   CHECK_CALLBACK_STATE(T);
   CHECK_COMPILATION_ALLOWED(I);
 
-  const String& prefix_symbol = String::Handle(Z, Symbols::New(prefix_vm));
+  const String& prefix_symbol = String::Handle(Z, Symbols::New(T, prefix_vm));
   const Namespace& import_ns = Namespace::Handle(Z,
       Namespace::New(import_vm, Object::null_array(), Object::null_array()));
   if (prefix_vm.Length() == 0) {
diff --git a/runtime/vm/dart_api_impl.h b/runtime/vm/dart_api_impl.h
index 67c0257..f536e0b 100644
--- a/runtime/vm/dart_api_impl.h
+++ b/runtime/vm/dart_api_impl.h
@@ -57,7 +57,7 @@
 #define DARTSCOPE(thread)                                                      \
   Thread* T = (thread);                                                        \
   CHECK_API_SCOPE(T);                                                          \
-  TransitionNativeToVM trainsition(T);                                         \
+  TransitionNativeToVM transition(T);                                          \
   HANDLESCOPE(T);
 
 
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 7ccf6a0..02c28db 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -23,6 +23,7 @@
 
 DECLARE_FLAG(bool, verify_acquired_data);
 DECLARE_FLAG(bool, ignore_patch_signature_mismatch);
+DECLARE_FLAG(bool, support_externalizable_strings);
 
 #ifndef PRODUCT
 
@@ -5575,6 +5576,9 @@
 
 
 TEST_CASE(GetNativeArguments) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "import 'dart:nativewrappers';"
       "class MyObject extends NativeFieldWrapperClass2 {"
@@ -5621,6 +5625,8 @@
   Dart_Handle result = Dart_Invoke(lib, NewString("testMain"), 1, args);
   EXPECT_VALID(result);
   EXPECT(Dart_IsInteger(result));
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
@@ -8497,6 +8503,9 @@
 
 
 TEST_CASE(MakeExternalString) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   static int peer8 = 40;
   static int peer16 = 41;
   static int canonical_str_peer = 42;
@@ -8563,7 +8572,8 @@
 
     // Test with single character canonical string, it should not become
     // external string but the peer should be setup for it.
-    Dart_Handle canonical_str = Api::NewHandle(thread, Symbols::New("*"));
+    Dart_Handle canonical_str = Api::NewHandle(thread, Symbols::New(thread,
+                                                                    "*"));
     EXPECT(Dart_IsString(canonical_str));
     EXPECT(!Dart_IsExternalString(canonical_str));
     uint8_t ext_canonical_str[kLength];
@@ -8653,8 +8663,8 @@
     // Test with a symbol (hash value should be preserved on externalization).
     const char* symbol_ascii = "?unseen";
     expected_length = strlen(symbol_ascii);
-    Dart_Handle symbol_str =
-        Api::NewHandle(thread, Symbols::New(symbol_ascii, expected_length));
+    Dart_Handle symbol_str = Api::NewHandle(thread,
+        Symbols::New(thread, symbol_ascii, expected_length));
     EXPECT_VALID(symbol_str);
     EXPECT(Dart_IsString(symbol_str));
     EXPECT(Dart_IsStringLatin1(symbol_str));
@@ -8700,10 +8710,15 @@
   EXPECT_EQ(80, peer8);
   EXPECT_EQ(82, peer16);
   EXPECT_EQ(42, canonical_str_peer);  // "*" Symbol is not removed on GC.
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
 TEST_CASE(ExternalizeConstantStrings) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "String testMain() {\n"
       "  return 'constant string';\n"
@@ -8727,6 +8742,8 @@
   for (intptr_t i = 0; i < kExpectedLen; i++) {
     EXPECT_EQ(expected_str[i], ext_str[i]);
   }
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
@@ -8816,6 +8833,9 @@
 // Do not use guarding mechanism on externalizable classes, since their class
 // can change on the fly,
 TEST_CASE(GuardExternalizedString) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "main() {\n"
       "  var a = new A('hello');\n"
@@ -8851,10 +8871,15 @@
   result = Dart_IntegerToInt64(result, &value);
   EXPECT_VALID(result);
   EXPECT_EQ(10640000, value);
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
 TEST_CASE(ExternalStringDeoptimize) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "String str = 'A';\n"
       "class A {\n"
@@ -8886,10 +8911,15 @@
   result = Dart_IntegerToInt64(result, &value);
   EXPECT_VALID(result);
   EXPECT_EQ(260, value);
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
 TEST_CASE(ExternalStringPolymorphicDeoptimize) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "const strA = 'AAAA';\n"
       "class A {\n"
@@ -8922,10 +8952,15 @@
   result = Dart_BooleanValue(result, &value);
   EXPECT_VALID(result);
   EXPECT(value);
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
 TEST_CASE(ExternalStringGuardFieldDeoptimize) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "const strA = 'AAAA';\n"
       "class A {\n"
@@ -8963,10 +8998,15 @@
   result = Dart_BooleanValue(result, &value);
   EXPECT_VALID(result);
   EXPECT(value);
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
 TEST_CASE(ExternalStringStaticFieldDeoptimize) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "const strA = 'AAAA';\n"
       "class A {\n"
@@ -8999,10 +9039,15 @@
   result = Dart_BooleanValue(result, &value);
   EXPECT_VALID(result);
   EXPECT(value);
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
 TEST_CASE(ExternalStringTrimDoubleParse) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "String str = 'A';\n"
       "class A {\n"
@@ -9028,10 +9073,15 @@
   result = Dart_IntegerToInt64(result, &value);
   EXPECT_VALID(result);
   EXPECT_EQ(8, value);
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
 TEST_CASE(ExternalStringDoubleParse) {
+  const bool saved_flag = FLAG_support_externalizable_strings;
+  FLAG_support_externalizable_strings = true;
+
   const char* kScriptChars =
       "String str = 'A';\n"
       "class A {\n"
@@ -9057,11 +9107,13 @@
   result = Dart_IntegerToInt64(result, &value);
   EXPECT_VALID(result);
   EXPECT_EQ(8, value);
+
+  FLAG_support_externalizable_strings = saved_flag;
 }
 
 
 TEST_CASE(ExternalStringIndexOf) {
-    const char* kScriptChars =
+  const char* kScriptChars =
       "main(String pattern) {\n"
       "  var str = 'Hello World';\n"
       "  return str.indexOf(pattern);\n"
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index e8bc0ce..ea55b49 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -136,12 +136,14 @@
 
 RawObject* DartEntry::InvokeClosure(const Array& arguments,
                                     const Array& arguments_descriptor) {
-  Instance& instance = Instance::Handle();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  Instance& instance = Instance::Handle(zone);
   instance ^= arguments.At(0);
   // Get the entrypoint corresponding to the closure function or to the call
   // method of the instance. This will result in a compilation of the function
   // if it is not already compiled.
-  Function& function = Function::Handle();
+  Function& function = Function::Handle(zone);
   if (instance.IsCallable(&function)) {
     // Only invoke the function if its arguments are compatible.
     const ArgumentsDescriptor args_desc(arguments_descriptor);
@@ -160,12 +162,11 @@
     // call method. If the arguments didn't match, go to noSuchMethod instead
     // of infinitely recursing on the getter.
   } else {
-    const String& getter_name = String::Handle(Symbols::New("get:call"));
-    Class& cls = Class::Handle(instance.clazz());
+    const String& getter_name = Symbols::GetCall();
+    Class& cls = Class::Handle(zone, instance.clazz());
     while (!cls.IsNull()) {
       function ^= cls.LookupDynamicFunction(getter_name);
       if (!function.IsNull()) {
-        Thread* thread = Thread::Current();
         Isolate* isolate = thread->isolate();
         volatile uword c_stack_pos = Thread::GetCurrentStackPointer();
         volatile uword c_stack_limit = OSThread::Current()->stack_base() -
@@ -176,14 +177,14 @@
 
         if (c_stack_pos < c_stack_limit) {
           const Instance& exception =
-            Instance::Handle(isolate->object_store()->stack_overflow());
-          return UnhandledException::New(exception, Stacktrace::Handle());
+            Instance::Handle(zone, isolate->object_store()->stack_overflow());
+          return UnhandledException::New(exception, Stacktrace::Handle(zone));
         }
 
-        const Array& getter_arguments = Array::Handle(Array::New(1));
+        const Array& getter_arguments = Array::Handle(zone, Array::New(1));
         getter_arguments.SetAt(0, instance);
         const Object& getter_result =
-              Object::Handle(DartEntry::InvokeFunction(function,
+              Object::Handle(zone, DartEntry::InvokeFunction(function,
                                                        getter_arguments));
         if (getter_result.IsError()) {
           return getter_result.raw();
@@ -194,8 +195,8 @@
         // This otherwise unnecessary handle is used to prevent clang from
         // doing tail call elimination, which would make the stack overflow
         // check above ineffective.
-        Object& result = Object::Handle(InvokeClosure(arguments,
-                                                      arguments_descriptor));
+        Object& result = Object::Handle(zone,
+            InvokeClosure(arguments, arguments_descriptor));
         return result.raw();
       }
       cls = cls.SuperClass();
diff --git a/runtime/vm/dart_entry_test.cc b/runtime/vm/dart_entry_test.cc
index a661d5b..d075819 100644
--- a/runtime/vm/dart_entry_test.cc
+++ b/runtime/vm/dart_entry_test.cc
@@ -30,7 +30,7 @@
   EXPECT_EQ(true, CompilerTest::TestCompileScript(lib, script));
   EXPECT(ClassFinalizer::ProcessPendingClasses());
   Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("A"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
   String& name = String::Handle(String::New("foo"));
   Function& function = Function::Handle(cls.LookupStaticFunction(name));
@@ -58,7 +58,7 @@
   EXPECT_EQ(true, CompilerTest::TestCompileScript(lib, script));
   EXPECT(ClassFinalizer::ProcessPendingClasses());
   Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("A"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
   String& name = String::Handle(String::New("foo"));
   Function& function = Function::Handle(cls.LookupStaticFunction(name));
@@ -84,14 +84,14 @@
   EXPECT_EQ(true, CompilerTest::TestCompileScript(lib, script));
   EXPECT(ClassFinalizer::ProcessPendingClasses());
   Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("A"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
 
   // Invoke the constructor.
   const Instance& instance = Instance::Handle(Instance::New(cls));
   const Array& constructor_arguments = Array::Handle(Array::New(1));
   constructor_arguments.SetAt(0, instance);
-  String& constructor_name = String::Handle(Symbols::New("A."));
+  String& constructor_name = String::Handle(Symbols::New(thread, "A."));
   Function& constructor =
     Function::Handle(cls.LookupConstructor(constructor_name));
   ASSERT(!constructor.IsNull());
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 13a9175..aa66533 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -2364,7 +2364,8 @@
 
 RawObject* Debugger::GetStaticField(const Class& cls,
                                     const String& field_name) {
-  const Field& fld = Field::Handle(cls.LookupStaticField(field_name));
+  const Field& fld =
+      Field::Handle(cls.LookupStaticFieldAllowPrivate(field_name));
   if (!fld.IsNull()) {
     // Return the value in the field if it has been initialized already.
     const Instance& value = Instance::Handle(fld.StaticValue());
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index e2fa84e..a215851 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -270,7 +270,8 @@
   AbstractType& type = AbstractType::Handle(zone, AbstractType::null());
   while (true) {
     if (test_class.raw() == error_class.raw()) {
-      return error_class.LookupInstanceField(Symbols::_stackTrace());
+      return error_class.LookupInstanceFieldAllowPrivate(
+          Symbols::_stackTrace());
     }
     type = test_class.super_type();
     if (type.IsNull()) return Field::null();
@@ -419,7 +420,10 @@
 // TODO(hausner): Rename this NewCoreInstance to call out the fact that
 // the class name is resolved in the core library implicitly?
 RawInstance* Exceptions::NewInstance(const char* class_name) {
-  const String& cls_name = String::Handle(Symbols::New(class_name));
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  const String& cls_name = String::Handle(zone,
+                                          Symbols::New(thread, class_name));
   const Library& core_lib = Library::Handle(Library::CoreLibrary());
   // No ambiguity error expected: passing NULL.
   Class& cls = Class::Handle(core_lib.LookupClass(cls_name));
@@ -459,7 +463,8 @@
   args.SetAt(2, Smi::Handle(zone, Smi::New(column)));
 
   // Construct '_errorMsg'.
-  GrowableHandlePtrArray<const String> pieces(zone, 20);
+  const GrowableObjectArray& pieces = GrowableObjectArray::Handle(zone,
+      GrowableObjectArray::New(20));
 
   // Print bound error first, if any.
   if (!bound_error_msg.IsNull() && (bound_error_msg.Length() > 0)) {
@@ -472,7 +477,7 @@
     const LanguageError& error = LanguageError::Handle(zone, dst_type.error());
     if (!error.IsNull()) {
       // Print the embedded error only.
-      pieces.Add(String::Handle(zone, Symbols::New(error.ToErrorCString())));
+      pieces.Add(String::Handle(zone, String::New(error.ToErrorCString())));
       pieces.Add(Symbols::NewLine());
     } else {
       // Describe the type error.
@@ -514,8 +519,8 @@
       }
     }
   }
-  const String& error_msg =
-      String::Handle(zone, Symbols::FromConcatAll(pieces));
+  const Array& arr = Array::Handle(zone, Array::MakeArray(pieces));
+  const String& error_msg = String::Handle(zone, String::ConcatAll(arr));
   args.SetAt(3, error_msg);
 
   // Type errors in the core library may be difficult to diagnose.
diff --git a/runtime/vm/find_code_object_test.cc b/runtime/vm/find_code_object_test.cc
index caece81..bac5c1e 100644
--- a/runtime/vm/find_code_object_test.cc
+++ b/runtime/vm/find_code_object_test.cc
@@ -55,7 +55,7 @@
   source = String::New(scriptChars);
   script = Script::New(url, source, RawScript::kScriptTag);
   EXPECT(CompilerTest::TestCompileScript(lib, script));
-  clsA = lib.LookupClass(String::Handle(Symbols::New("A")));
+  clsA = lib.LookupClass(String::Handle(Symbols::New(thread, "A")));
   EXPECT(!clsA.IsNull());
   ClassFinalizer::ProcessPendingClasses();
   for (int i = 0; i < kNumFunctions; i++) {
@@ -105,7 +105,7 @@
   source = String::New(scriptChars);
   script = Script::New(url, source, RawScript::kScriptTag);
   EXPECT(CompilerTest::TestCompileScript(lib, script));
-  clsB = lib.LookupClass(String::Handle(Symbols::New("B")));
+  clsB = lib.LookupClass(String::Handle(Symbols::New(thread, "B")));
   EXPECT(!clsB.IsNull());
   ClassFinalizer::ProcessPendingClasses();
   for (int i = 0; i < kNumFunctions; i++) {
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 5a55b8a..dc7f4b2 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -25,7 +25,7 @@
   "Allow embedding absolute addresses in generated code.")                     \
 P(always_megamorphic_calls, bool, false,                                       \
   "Instance call always as megamorphic.")                                      \
-C(background_compilation, false, false, bool, false,                           \
+C(background_compilation, false, true, bool, true,                             \
   "Run optimizing compilation in background")                                  \
 R(break_at_isolate_spawn, false, bool, false,                                  \
   "Insert a one-time breakpoint at the entrypoint for all spawned isolates")   \
@@ -135,8 +135,6 @@
   "Support the IL printer.")                                                   \
 R(support_service, false, bool, true,                                          \
   "Support the service protocol.")                                             \
-R(support_coverage, false, bool, true,                                         \
-  "Support code coverage.")                                                    \
 R(support_timeline, false, bool, true,                                         \
   "Support timeline.")                                                         \
 D(trace_cha, bool, false,                                                      \
@@ -165,6 +163,8 @@
   "Use field guards and track field types")                                    \
 C(use_osr, false, true, bool, true,                                            \
   "Use OSR")                                                                   \
+R(verbose_dev, false, bool, false,                                             \
+  "Enables verbose messages during development.")                              \
 P(verbose_gc, bool, false,                                                     \
   "Enables verbose GC.")                                                       \
 P(verbose_gc_hdr, int, 40,                                                     \
diff --git a/runtime/vm/flow_graph.h b/runtime/vm/flow_graph.h
index c19dc0c..0c7aa52 100644
--- a/runtime/vm/flow_graph.h
+++ b/runtime/vm/flow_graph.h
@@ -303,6 +303,8 @@
   // Remove environments from the instructions which do not deoptimize.
   void EliminateEnvironments();
 
+  bool IsReceiver(Definition* def) const;
+
  private:
   friend class IfConverter;
   friend class BranchSimplifier;
@@ -355,7 +357,6 @@
                         Value* use,
                         bool is_environment_use);
 
-  bool IsReceiver(Definition* def) const;
   void ComputeIsReceiver(PhiInstr* phi) const;
   void ComputeIsReceiverRecursive(PhiInstr* phi,
                                   GrowableArray<PhiInstr*>* unmark) const;
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index c9e02e7..1f428174 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -40,10 +40,14 @@
             "Trace type check elimination at compile time.");
 
 DECLARE_FLAG(bool, profile_vm);
+DECLARE_FLAG(bool, support_externalizable_strings);
 
 // Quick access to the locally defined zone() method.
 #define Z (zone())
 
+// Quick access to the locally defined thread() method.
+#define T (thread())
+
 // Quick synthetic token position.
 #define ST(token_pos) ((token_pos).ToSynthetic())
 
@@ -1391,7 +1395,7 @@
       new(Z) ZoneGrowableArray<PushArgumentInstr*>(2);
   arguments->Add(push_left);
   arguments->Add(push_right);
-  const String& name = String::ZoneHandle(Z, Symbols::New(node->TokenName()));
+  const String& name = Symbols::Token(node->kind());
   const intptr_t kNumArgsChecked = 2;
   InstanceCallInstr* call = new(Z) InstanceCallInstr(node->token_pos(),
                                                      name,
@@ -1827,7 +1831,7 @@
   ASSERT(Token::IsRelationalOperator(node->kind()));
   InstanceCallInstr* comp = new(Z) InstanceCallInstr(
       node->token_pos(),
-      String::ZoneHandle(Z, Symbols::New(node->TokenName())),
+      Symbols::Token(node->kind()),
       node->kind(),
       arguments,
       Object::null_array(),
@@ -1863,7 +1867,7 @@
   arguments->Add(push_value);
   InstanceCallInstr* call = new(Z) InstanceCallInstr(
       node->token_pos(),
-      String::ZoneHandle(Z, Symbols::New(node->TokenName())),
+      Symbols::Token(node->kind()),
       node->kind(),
       arguments,
       Object::null_array(),
@@ -2300,7 +2304,7 @@
   OS::SNPrint(name, 64, ":tmp_local%" Pd, index);
   LocalVariable*  var =
       new(Z) LocalVariable(TokenPosition::kNoSource,
-                           String::ZoneHandle(Z, Symbols::New(name)),
+                           String::ZoneHandle(Z, Symbols::New(T, name)),
                            *value->Type()->ToAbstractType());
   var->set_index(index);
   return var;
@@ -3225,7 +3229,8 @@
   if (node->is_super_getter()) {
     // Statically resolved instance getter, i.e. "super getter".
     ASSERT(node->receiver() != NULL);
-    getter_function = Resolver::ResolveDynamicAnyArgs(node->cls(), getter_name);
+    getter_function = Resolver::ResolveDynamicAnyArgs(Z,
+        node->cls(), getter_name);
     if (getter_function.IsNull()) {
       // Resolve and call noSuchMethod.
       ArgumentListNode* arguments = new(Z) ArgumentListNode(node->token_pos());
@@ -3468,6 +3473,7 @@
         LoadFieldInstr* load = BuildNativeGetter(
             node, MethodRecognizer::kStringBaseLength, String::length_offset(),
             Type::ZoneHandle(Z, Type::SmiType()), kSmiCid);
+        load->set_is_immutable(!FLAG_support_externalizable_strings);
         if (kind == MethodRecognizer::kStringBaseLength) {
           return ReturnDefinition(load);
         }
@@ -3792,9 +3798,8 @@
   Function* super_function = NULL;
   if (node->IsSuperLoad()) {
     // Resolve the load indexed operator in the super class.
-    super_function = &Function::ZoneHandle(
-          Z, Resolver::ResolveDynamicAnyArgs(node->super_class(),
-                                             Symbols::IndexToken()));
+    super_function = &Function::ZoneHandle(Z, Resolver::ResolveDynamicAnyArgs(Z,
+        node->super_class(), Symbols::IndexToken()));
     if (super_function->IsNull()) {
       // Could not resolve super operator. Generate call noSuchMethod() of the
       // super class instead.
@@ -3855,9 +3860,8 @@
   const TokenPosition token_pos = node->token_pos();
   if (node->IsSuperStore()) {
     // Resolve the store indexed operator in the super class.
-    super_function = &Function::ZoneHandle(
-        Z, Resolver::ResolveDynamicAnyArgs(node->super_class(),
-                                           Symbols::AssignIndexToken()));
+    super_function = &Function::ZoneHandle(Z, Resolver::ResolveDynamicAnyArgs(Z,
+        node->super_class(), Symbols::AssignIndexToken()));
     if (super_function->IsNull()) {
       // Could not resolve super operator. Generate call noSuchMethod() of the
       // super class instead.
@@ -3923,11 +3927,9 @@
   } else {
     // Generate dynamic call to operator []=.
     const intptr_t checked_argument_count = 2;  // Do not check for value type.
-    const String& name =
-        String::ZoneHandle(Z, Symbols::New(Token::Str(Token::kASSIGN_INDEX)));
     InstanceCallInstr* store =
         new(Z) InstanceCallInstr(token_pos,
-                                 name,
+                                 Symbols::AssignIndexToken(),
                                  Token::kASSIGN_INDEX,
                                  arguments,
                                  Object::null_array(),
@@ -4472,7 +4474,7 @@
   arguments->Add(PushArgument(receiver_value));
   // String memberName.
   const String& member_name =
-      String::ZoneHandle(Z, Symbols::New(function_name));
+      String::ZoneHandle(Z, Symbols::New(T, function_name));
   Value* member_name_value = Bind(new(Z) ConstantInstr(member_name));
   arguments->Add(PushArgument(member_name_value));
   // Smi invocation_type.
@@ -4613,7 +4615,7 @@
 
 
 FlowGraph* FlowGraphBuilder::BuildGraph() {
-  VMTagScope tagScope(Thread::Current(),
+  VMTagScope tagScope(thread(),
                       VMTag::kCompileFlowGraphBuilderTagId,
                       FLAG_profile_vm);
   if (FLAG_support_ast_printer && FLAG_print_ast) {
diff --git a/runtime/vm/flow_graph_builder_test.cc b/runtime/vm/flow_graph_builder_test.cc
index 36eebc1..10f93cb 100644
--- a/runtime/vm/flow_graph_builder_test.cc
+++ b/runtime/vm/flow_graph_builder_test.cc
@@ -284,7 +284,7 @@
 
   RawClass* GetClass(const Library& lib, const char* name) {
     const Class& cls = Class::Handle(
-        lib.LookupClass(String::Handle(Symbols::New(name))));
+        lib.LookupClass(String::Handle(Symbols::New(thread_, name))));
     EXPECT(!cls.IsNull());  // No ambiguity error expected.
     return cls.raw();
   }
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index d904c86..cfdf133 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -1695,6 +1695,9 @@
   const ICData& ic_data = ICData::ZoneHandle(zone(), ICData::New(
       parsed_function().function(), target_name,
       arguments_descriptor, deopt_id, num_args_tested));
+#if defined(TAG_IC_DATA)
+  ic_data.set_tag(Instruction::kInstanceCall);
+#endif
   if (deopt_id_to_ic_data_ != NULL) {
     (*deopt_id_to_ic_data_)[deopt_id] = &ic_data;
   }
@@ -1719,6 +1722,9 @@
       parsed_function().function(), String::Handle(zone(), target.name()),
       arguments_descriptor, deopt_id, num_args_tested));
   ic_data.AddTarget(target);
+#if defined(TAG_IC_DATA)
+  ic_data.set_tag(Instruction::kStaticCall);
+#endif
   if (deopt_id_to_ic_data_ != NULL) {
     (*deopt_id_to_ic_data_)[deopt_id] = &ic_data;
   }
@@ -1837,7 +1843,8 @@
     const Array& argument_names,
     intptr_t deopt_id,
     TokenPosition token_pos,
-    LocationSummary* locs) {
+    LocationSummary* locs,
+    bool complete) {
   if (FLAG_polymorphic_with_deopt) {
     Label* deopt = AddDeoptStub(deopt_id,
                                 ICData::kDeoptPolymorphicInstanceCallTestFail);
@@ -1845,23 +1852,32 @@
     EmitTestAndCall(ic_data, argument_count, argument_names,
                     deopt,  // No cid match.
                     &ok,    // Found cid.
-                    deopt_id, token_pos, locs);
+                    deopt_id, token_pos, locs, complete);
     assembler()->Bind(&ok);
   } else {
-    // Instead of deoptimizing, do a megamorphic call when no matching
-    // cid found.
-    Label ok;
-    MegamorphicSlowPath* slow_path =
+    if (complete) {
+      Label ok;
+      EmitTestAndCall(ic_data, argument_count, argument_names,
+                      NULL,                      // No cid match.
+                      &ok,                       // Found cid.
+                      deopt_id, token_pos, locs, true);
+      assembler()->Bind(&ok);
+    } else {
+      // Instead of deoptimizing, do a megamorphic call when no matching
+      // cid found.
+      Label ok;
+      MegamorphicSlowPath* slow_path =
         new MegamorphicSlowPath(ic_data, argument_count, deopt_id,
                                 token_pos, locs, CurrentTryIndex());
-    AddSlowPathCode(slow_path);
-    EmitTestAndCall(ic_data, argument_count, argument_names,
-                    slow_path->entry_label(),  // No cid match.
-                    &ok,                       // Found cid.
-                    deopt_id, token_pos, locs);
+      AddSlowPathCode(slow_path);
+      EmitTestAndCall(ic_data, argument_count, argument_names,
+                      slow_path->entry_label(),  // No cid match.
+                      &ok,                       // Found cid.
+                      deopt_id, token_pos, locs, false);
 
-    assembler()->Bind(slow_path->exit_label());
-    assembler()->Bind(&ok);
+      assembler()->Bind(slow_path->exit_label());
+      assembler()->Bind(&ok);
+    }
   }
 }
 
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 3dc31a0..7c1fa0e 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -451,7 +451,8 @@
                                    const Array& argument_names,
                                    intptr_t deopt_id,
                                    TokenPosition token_pos,
-                                   LocationSummary* locs);
+                                   LocationSummary* locs,
+                                   bool complete);
 
   // Pass a value for try-index where block is not available (e.g. slow path).
   void EmitMegamorphicInstanceCall(
@@ -476,7 +477,8 @@
                        Label* match_found,
                        intptr_t deopt_id,
                        TokenPosition token_index,
-                       LocationSummary* locs);
+                       LocationSummary* locs,
+                       bool complete);
 
   Condition EmitEqualityRegConstCompare(Register reg,
                                         const Object& obj,
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index 3d15b4e..ace14d0 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -1596,7 +1596,8 @@
                                         Label* match_found,
                                         intptr_t deopt_id,
                                         TokenPosition token_index,
-                                        LocationSummary* locs) {
+                                        LocationSummary* locs,
+                                        bool complete) {
   ASSERT(is_optimizing());
   __ Comment("EmitTestAndCall");
   const Array& arguments_descriptor =
@@ -1613,8 +1614,8 @@
   ASSERT(!ic_data.IsNull() && (kNumChecks > 0));
 
   Label after_smi_test;
-  __ tst(R0, Operand(kSmiTagMask));
   if (kFirstCheckIsSmi) {
+    __ tst(R0, Operand(kSmiTagMask));
     // Jump if receiver is not Smi.
     if (kNumChecks == 1) {
       __ b(failed, NE);
@@ -1638,7 +1639,10 @@
   } else {
     // Receiver is Smi, but Smi is not a valid class therefore fail.
     // (Smi class must be first in the list).
-    __ b(failed, EQ);
+    if (!complete) {
+      __ tst(R0, Operand(kSmiTagMask));
+      __ b(failed, EQ);
+    }
   }
   __ Bind(&after_smi_test);
 
@@ -1657,11 +1661,18 @@
     const bool kIsLastCheck = (i == (kSortedLen - 1));
     ASSERT(sorted[i].cid != kSmiCid);
     Label next_test;
-    __ CompareImmediate(R2, sorted[i].cid);
-    if (kIsLastCheck) {
-      __ b(failed, NE);
+    if (!complete) {
+      __ CompareImmediate(R2, sorted[i].cid);
+      if (kIsLastCheck) {
+        __ b(failed, NE);
+      } else {
+        __ b(&next_test, NE);
+      }
     } else {
-      __ b(&next_test, NE);
+      if (!kIsLastCheck) {
+        __ CompareImmediate(R2, sorted[i].cid);
+        __ b(&next_test, NE);
+      }
     }
     // Do not use the code from the function, but let the code be patched so
     // that we can record the outgoing edges to other code.
diff --git a/runtime/vm/flow_graph_compiler_arm64.cc b/runtime/vm/flow_graph_compiler_arm64.cc
index 034eec6..f872532 100644
--- a/runtime/vm/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/flow_graph_compiler_arm64.cc
@@ -1551,7 +1551,8 @@
                                         Label* match_found,
                                         intptr_t deopt_id,
                                         TokenPosition token_index,
-                                        LocationSummary* locs) {
+                                        LocationSummary* locs,
+                                        bool complete) {
   ASSERT(is_optimizing());
 
   __ Comment("EmitTestAndCall");
@@ -1569,8 +1570,8 @@
   ASSERT(!ic_data.IsNull() && (kNumChecks > 0));
 
   Label after_smi_test;
-  __ tsti(R0, Immediate(kSmiTagMask));
   if (kFirstCheckIsSmi) {
+    __ tsti(R0, Immediate(kSmiTagMask));
     // Jump if receiver is not Smi.
     if (kNumChecks == 1) {
       __ b(failed, NE);
@@ -1594,7 +1595,10 @@
   } else {
     // Receiver is Smi, but Smi is not a valid class therefore fail.
     // (Smi class must be first in the list).
-    __ b(failed, EQ);
+    if (!complete) {
+      __ tsti(R0, Immediate(kSmiTagMask));
+      __ b(failed, EQ);
+    }
   }
   __ Bind(&after_smi_test);
 
@@ -1613,11 +1617,18 @@
     const bool kIsLastCheck = (i == (kSortedLen - 1));
     ASSERT(sorted[i].cid != kSmiCid);
     Label next_test;
-    __ CompareImmediate(R2, sorted[i].cid);
-    if (kIsLastCheck) {
-      __ b(failed, NE);
+    if (!complete) {
+      __ CompareImmediate(R2, sorted[i].cid);
+      if (kIsLastCheck) {
+        __ b(failed, NE);
+      } else {
+        __ b(&next_test, NE);
+      }
     } else {
-      __ b(&next_test, NE);
+      if (!kIsLastCheck) {
+        __ CompareImmediate(R2, sorted[i].cid);
+        __ b(&next_test, NE);
+      }
     }
     // Do not use the code from the function, but let the code be patched so
     // that we can record the outgoing edges to other code.
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index 576aef3..eac4f3c 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -1505,8 +1505,10 @@
                                         Label* match_found,
                                         intptr_t deopt_id,
                                         TokenPosition token_index,
-                                        LocationSummary* locs) {
+                                        LocationSummary* locs,
+                                        bool complete) {
   ASSERT(is_optimizing());
+  ASSERT(!complete);
   __ Comment("EmitTestAndCall");
   const Array& arguments_descriptor =
       Array::ZoneHandle(zone(), ArgumentsDescriptor::New(argument_count,
diff --git a/runtime/vm/flow_graph_compiler_mips.cc b/runtime/vm/flow_graph_compiler_mips.cc
index ff0ec98..3ec2756 100644
--- a/runtime/vm/flow_graph_compiler_mips.cc
+++ b/runtime/vm/flow_graph_compiler_mips.cc
@@ -1620,7 +1620,8 @@
                                         Label* match_found,
                                         intptr_t deopt_id,
                                         TokenPosition token_index,
-                                        LocationSummary* locs) {
+                                        LocationSummary* locs,
+                                        bool complete) {
   ASSERT(is_optimizing());
   __ Comment("EmitTestAndCall");
   const Array& arguments_descriptor =
@@ -1637,8 +1638,8 @@
   ASSERT(!ic_data.IsNull() && (kNumChecks > 0));
 
   Label after_smi_test;
-  __ andi(CMPRES1, T0, Immediate(kSmiTagMask));
   if (kFirstCheckIsSmi) {
+    __ andi(CMPRES1, T0, Immediate(kSmiTagMask));
     // Jump if receiver is not Smi.
     if (kNumChecks == 1) {
       __ bne(CMPRES1, ZR, failed);
@@ -1662,7 +1663,10 @@
   } else {
     // Receiver is Smi, but Smi is not a valid class therefore fail.
     // (Smi class must be first in the list).
-    __ beq(CMPRES1, ZR, failed);
+    if (!complete) {
+      __ andi(CMPRES1, T0, Immediate(kSmiTagMask));
+      __ beq(CMPRES1, ZR, failed);
+    }
   }
 
   __ Bind(&after_smi_test);
@@ -1681,10 +1685,16 @@
     const bool kIsLastCheck = (i == (kSortedLen - 1));
     ASSERT(sorted[i].cid != kSmiCid);
     Label next_test;
-    if (kIsLastCheck) {
-      __ BranchNotEqual(T2, Immediate(sorted[i].cid), failed);
+    if (!complete) {
+      if (kIsLastCheck) {
+        __ BranchNotEqual(T2, Immediate(sorted[i].cid), failed);
+      } else {
+        __ BranchNotEqual(T2, Immediate(sorted[i].cid), &next_test);
+      }
     } else {
-      __ BranchNotEqual(T2, Immediate(sorted[i].cid), &next_test);
+      if (!kIsLastCheck) {
+        __ BranchNotEqual(T2, Immediate(sorted[i].cid), &next_test);
+      }
     }
     // Do not use the code from the function, but let the code be patched so
     // that we can record the outgoing edges to other code.
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index d9a11c4..e044923 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -1534,7 +1534,8 @@
                                         Label* match_found,
                                         intptr_t deopt_id,
                                         TokenPosition token_index,
-                                        LocationSummary* locs) {
+                                        LocationSummary* locs,
+                                        bool complete) {
   ASSERT(is_optimizing());
 
   __ Comment("EmitTestAndCall");
@@ -1552,8 +1553,8 @@
   ASSERT(!ic_data.IsNull() && (kNumChecks > 0));
 
   Label after_smi_test;
-  __ testq(RAX, Immediate(kSmiTagMask));
   if (kFirstCheckIsSmi) {
+    __ testq(RAX, Immediate(kSmiTagMask));
     // Jump if receiver is not Smi.
     if (kNumChecks == 1) {
       __ j(NOT_ZERO, failed);
@@ -1577,7 +1578,10 @@
   } else {
     // Receiver is Smi, but Smi is not a valid class therefore fail.
     // (Smi class must be first in the list).
-    __ j(ZERO, failed);
+    if (!complete) {
+      __ testq(RAX, Immediate(kSmiTagMask));
+      __ j(ZERO, failed);
+    }
   }
   __ Bind(&after_smi_test);
 
@@ -1596,11 +1600,18 @@
     const bool kIsLastCheck = (i == (kSortedLen - 1));
     ASSERT(sorted[i].cid != kSmiCid);
     Label next_test;
-    __ cmpl(RDI, Immediate(sorted[i].cid));
-    if (kIsLastCheck) {
-      __ j(NOT_EQUAL, failed);
+    if (!complete) {
+      __ cmpl(RDI, Immediate(sorted[i].cid));
+      if (kIsLastCheck) {
+        __ j(NOT_EQUAL, failed);
+      } else {
+        __ j(NOT_EQUAL, &next_test);
+      }
     } else {
-      __ j(NOT_EQUAL, &next_test);
+      if (!kIsLastCheck) {
+        __ cmpl(RDI, Immediate(sorted[i].cid));
+        __ j(NOT_EQUAL, &next_test);
+      }
     }
     // Do not use the code from the function, but let the code be patched so
     // that we can record the outgoing edges to other code.
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index c8a5f28..471c511 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -63,6 +63,7 @@
 DECLARE_FLAG(int, max_deoptimization_counter_threshold);
 DECLARE_FLAG(bool, print_flow_graph);
 DECLARE_FLAG(bool, print_flow_graph_optimized);
+DECLARE_FLAG(bool, support_externalizable_strings);
 DECLARE_FLAG(bool, verify_compiler);
 
 // Quick access to the current zone.
@@ -590,6 +591,7 @@
         inlined_recursive_call_ = false;
       }
     }
+
     collected_call_sites_ = NULL;
     inlining_call_sites_ = NULL;
   }
@@ -648,6 +650,15 @@
       return false;
     }
 
+    // Type feedback may have been cleared for this function (ClearICDataArray),
+    // but we need it for inlining.
+    if (!FLAG_precompiled_mode && (function.ic_data_array() == Array::null())) {
+      TRACE_INLINING(THR_Print("     Bailout: type feedback cleared\n"));
+      PRINT_INLINING_TREE("Not compiled",
+          &call_data->caller, &function, call_data->call);
+      return false;
+    }
+
     // Abort if this function has deoptimized too much.
     if (function.deoptimization_counter() >=
         FLAG_max_deoptimization_counter_threshold) {
@@ -721,7 +732,8 @@
                    isolate->loading_invalidation_gen())) {
             // Loading occured while parsing. We need to abort here because
             // state changed while compiling.
-            Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId);
+            Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId,
+                "Loading occured while parsing in inliner");
           }
         }
 
@@ -732,7 +744,8 @@
         function.RestoreICDataMap(ic_data_array, clone_ic_data);
         if (Compiler::IsBackgroundCompilation() &&
             (function.ic_data_array() == Array::null())) {
-          Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId);
+          Compiler::AbortBackgroundCompilation(Thread::kNoDeoptId,
+              "ICData cleared while inlining");
         }
 
         // Build the callee graph.
@@ -1205,7 +1218,7 @@
       PolymorphicInstanceCallInstr* call = call_info[call_idx].call;
       if (call->with_checks()) {
         // PolymorphicInliner introduces deoptimization paths.
-        if (!FLAG_polymorphic_with_deopt) {
+        if (!call->complete() && !FLAG_polymorphic_with_deopt) {
           TRACE_INLINING(THR_Print(
               "  => %s\n     Bailout: call with checks\n",
               call->instance_call()->function_name().ToCString()));
@@ -1622,18 +1635,21 @@
     if ((i == (inlined_variants_.length() - 1)) &&
         non_inlined_variants_.is_empty()) {
       // If it is the last variant use a check class id instruction which can
-      // deoptimize, followed unconditionally by the body.
-      RedefinitionInstr* cid_redefinition =
-          new RedefinitionInstr(new(Z) Value(load_cid));
-      cid_redefinition->set_ssa_temp_index(
-          owner_->caller_graph()->alloc_ssa_temp_index());
-      cursor = AppendInstruction(cursor, cid_redefinition);
-      CheckClassIdInstr* check_class_id = new(Z) CheckClassIdInstr(
-          new(Z) Value(cid_redefinition),
-          inlined_variants_[i].cid,
-          call_->deopt_id());
-      check_class_id->InheritDeoptTarget(zone(), call_);
-      cursor = AppendInstruction(cursor, check_class_id);
+      // deoptimize, followed unconditionally by the body. Omit the check if
+      // we know that we have covered all possible classes.
+      if (!call_->complete()) {
+        RedefinitionInstr* cid_redefinition =
+            new RedefinitionInstr(new(Z) Value(load_cid));
+        cid_redefinition->set_ssa_temp_index(
+            owner_->caller_graph()->alloc_ssa_temp_index());
+        cursor = AppendInstruction(cursor, cid_redefinition);
+        CheckClassIdInstr* check_class_id = new(Z) CheckClassIdInstr(
+            new(Z) Value(cid_redefinition),
+            inlined_variants_[i].cid,
+            call_->deopt_id());
+        check_class_id->InheritDeoptTarget(zone(), call_);
+        cursor = AppendInstruction(cursor, check_class_id);
+      }
 
       // The next instruction is the first instruction of the inlined body.
       // Handle the two possible cases (unshared and shared subsequent
@@ -1766,7 +1782,8 @@
     PolymorphicInstanceCallInstr* fallback_call =
         new PolymorphicInstanceCallInstr(call_->instance_call(),
                                          new_checks,
-                                         true);  // With checks.
+                                         /* with_checks = */ true,
+                                         call_->complete());
     fallback_call->set_ssa_temp_index(
         owner_->caller_graph()->alloc_ssa_temp_index());
     fallback_call->InheritDeoptTarget(zone(), call_);
@@ -2773,6 +2790,7 @@
       Type::ZoneHandle(Z, Type::SmiType()),
       str->token_pos());
   length->set_result_cid(kSmiCid);
+  length->set_is_immutable(!FLAG_support_externalizable_strings);
   length->set_recognized_kind(MethodRecognizer::kStringBaseLength);
 
   cursor = flow_graph->AppendTo(cursor, length, NULL, FlowGraph::kValue);
@@ -2861,6 +2879,11 @@
                                                  const ICData& ic_data,
                                                  TargetEntryInstr** entry,
                                                  Definition** last) {
+  if (FLAG_precompiled_mode) {
+    // The graphs generated below include deopts.
+    return false;
+  }
+
   ICData& value_check = ICData::ZoneHandle(Z);
   MethodRecognizer::Kind kind = MethodRecognizer::RecognizeKind(target);
   switch (kind) {
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index 20ccd3a..b1d188a 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -270,7 +270,7 @@
   const intptr_t cid = guard->field().guarded_cid();
   if ((cid == kIllegalCid) ||
       (cid == kDynamicCid) ||
-      !CheckClassInstr::IsImmutableClassId(cid)) {
+      Field::IsExternalizableCid(cid)) {
     return;
   }
 
@@ -782,7 +782,7 @@
   }
 
   intptr_t cid = value().GetClassId();
-  if (!CheckClassInstr::IsImmutableClassId(cid)) {
+  if (Field::IsExternalizableCid(cid)) {
     cid = kDynamicCid;
   }
 
@@ -965,7 +965,7 @@
       cid = obj.GetClassId();
     }
   }
-  if (!CheckClassInstr::IsImmutableClassId(cid)) {
+  if (Field::IsExternalizableCid(cid)) {
     cid = kDynamicCid;
   }
   return CompileType(is_nullable, cid, abstract_type);
diff --git a/runtime/vm/guard_field_test.cc b/runtime/vm/guard_field_test.cc
index d0ecb6e..0e0972b 100644
--- a/runtime/vm/guard_field_test.cc
+++ b/runtime/vm/guard_field_test.cc
@@ -13,12 +13,14 @@
                       const char* field_name) {
   RawLibrary* raw_library = Library::RawCast(Api::UnwrapHandle(library));
   Library& lib = Library::ZoneHandle(raw_library);
-  const String& classname = String::Handle(Symbols::New(class_name));
+  const String& classname = String::Handle(Symbols::New(Thread::Current(),
+                                                        class_name));
   Class& cls = Class::Handle(lib.LookupClass(classname));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
 
   String& fieldname = String::Handle(String::New(field_name));
-  Field& field = Field::ZoneHandle(cls.LookupInstanceField(fieldname));
+  Field& field =
+      Field::ZoneHandle(cls.LookupInstanceFieldAllowPrivate(fieldname));
   EXPECT(!field.IsNull());
   return field.raw();
 }
diff --git a/runtime/vm/hash_table.h b/runtime/vm/hash_table.h
index c162232..f4eb375 100644
--- a/runtime/vm/hash_table.h
+++ b/runtime/vm/hash_table.h
@@ -151,21 +151,24 @@
   // Returns the entry that matches 'key', or -1 if none exists.
   template<typename Key>
   intptr_t FindKey(const Key& key) const {
-    ASSERT(NumOccupied() < NumEntries());
+    const intptr_t num_entries = NumEntries();
+    ASSERT(NumOccupied() < num_entries);
     // TODO(koda): Add salt.
-    intptr_t probe = static_cast<uword>(KeyTraits::Hash(key)) % NumEntries();
+    uword hash = KeyTraits::Hash(key);
+    intptr_t probe = hash % num_entries;
     // TODO(koda): Consider quadratic probing.
-    for (; ; probe = (probe + 1) % NumEntries()) {
+    while (true) {
       if (IsUnused(probe)) {
         return -1;
-      } else if (IsDeleted(probe)) {
-        continue;
-      } else {
+      } else if (!IsDeleted(probe)) {
         key_handle_ = GetKey(probe);
         if (KeyTraits::IsMatch(key, key_handle_)) {
           return probe;
         }
       }
+      // Advance probe.
+      probe++;
+      probe = (probe == num_entries) ? 0 : probe;
     }
     UNREACHABLE();
     return -1;
@@ -177,12 +180,14 @@
   //   and returns false.
   template<typename Key>
   bool FindKeyOrDeletedOrUnused(const Key& key, intptr_t* entry) const {
+    const intptr_t num_entries = NumEntries();
     ASSERT(entry != NULL);
-    ASSERT(NumOccupied() < NumEntries());
-    intptr_t probe = static_cast<uword>(KeyTraits::Hash(key)) % NumEntries();
+    ASSERT(NumOccupied() < num_entries);
+    uword hash = KeyTraits::Hash(key);
+    intptr_t probe = hash % num_entries;
     intptr_t deleted = -1;
     // TODO(koda): Consider quadratic probing.
-    for (; ; probe = (probe + 1) % NumEntries()) {
+    while (true) {
       if (IsUnused(probe)) {
         *entry = (deleted != -1) ? deleted : probe;
         return false;
@@ -197,6 +202,9 @@
           return true;
         }
       }
+      // Advance probe.
+      probe++;
+      probe = (probe == num_entries) ? 0 : probe;
     }
     UNREACHABLE();
     return false;
@@ -636,7 +644,7 @@
       BaseIterTable::InsertKey(entry, key);
       return key.raw();
     } else {
-      return BaseIterTable::GetPayload(entry, 0);
+      return BaseIterTable::GetKey(entry);
     }
   }
 
diff --git a/runtime/vm/hash_table_test.cc b/runtime/vm/hash_table_test.cc
index b646b32..f413932 100644
--- a/runtime/vm/hash_table_test.cc
+++ b/runtime/vm/hash_table_test.cc
@@ -20,6 +20,8 @@
 // easy to engineer collisions.
 class TestTraits {
  public:
+  static const char* Name() { return "TestTraits"; }
+
   static bool IsMatch(const char* key, const Object& obj) {
     return String::Cast(obj).Equals(key);
   }
diff --git a/runtime/vm/heap_test.cc b/runtime/vm/heap_test.cc
index 80319e3..ad01502 100644
--- a/runtime/vm/heap_test.cc
+++ b/runtime/vm/heap_test.cc
@@ -93,7 +93,7 @@
 
 static RawClass* GetClass(const Library& lib, const char* name) {
   const Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New(name))));
+      lib.LookupClass(String::Handle(Symbols::New(Thread::Current(), name))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
   return cls.raw();
 }
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index 2287d0d..cc62146 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -448,7 +448,10 @@
   }
   PrintICDataHelper(f, ic_data());
   if (with_checks()) {
-    f->Print(" WITH CHECKS");
+    f->Print(" WITH-CHECKS");
+  }
+  if (complete()) {
+    f->Print(" COMPLETE");
   }
 }
 
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 5b5ac04..c68f277 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -36,6 +36,7 @@
 DEFINE_FLAG(bool, unbox_numeric_fields, true,
     "Support unboxed double and float32x4 fields.");
 DECLARE_FLAG(bool, eliminate_type_checks);
+DECLARE_FLAG(bool, support_externalizable_strings);
 
 
 #if defined(DEBUG)
@@ -89,7 +90,17 @@
   // computations added in the optimizing compiler.
   ASSERT(deopt_id_ != Thread::kNoDeoptId);
   if (deopt_id_ < ic_data_array.length()) {
-    return ic_data_array[deopt_id_];
+    const ICData* result = ic_data_array[deopt_id_];
+#if defined(TAG_IC_DATA)
+    if (result != NULL) {
+      if (result->tag() == -1) {
+        result->set_tag(tag());
+      } else if (result->tag() != tag()) {
+        FATAL("ICData tag mismatch");
+      }
+    }
+#endif
+    return result;
   }
   return NULL;
 }
@@ -169,22 +180,11 @@
 }
 
 
-bool CheckClassInstr::IsImmutableClassId(intptr_t cid) {
-  switch (cid) {
-    case kOneByteStringCid:
-    case kTwoByteStringCid:
-      return false;
-    default:
-      return true;
-  }
-}
-
-
 static bool AreAllChecksImmutable(const ICData& checks) {
   const intptr_t len = checks.NumberOfChecks();
   for (intptr_t i = 0; i < len; i++) {
     if (checks.IsUsedAt(i)) {
-      if (!CheckClassInstr::IsImmutableClassId(
+      if (Field::IsExternalizableCid(
               checks.GetReceiverClassIdAt(i))) {
         return false;
       }
@@ -203,7 +203,7 @@
 
 EffectSet CheckClassIdInstr::Dependencies() const {
   // Externalization of strings via the API can change the class-id.
-  return !CheckClassInstr::IsImmutableClassId(cid_) ?
+  return Field::IsExternalizableCid(cid_) ?
       EffectSet::Externalization() : EffectSet::None();
 }
 
@@ -3052,8 +3052,8 @@
       ASSERT(call_ic_data->NumArgsTested() == 2);
       const String& name = String::Handle(zone, call_ic_data->target_name());
       const Class& smi_class = Class::Handle(zone, Smi::Class());
-      const Function& smi_op_target =
-          Function::Handle(Resolver::ResolveDynamicAnyArgs(smi_class, name));
+      const Function& smi_op_target = Function::Handle(zone,
+          Resolver::ResolveDynamicAnyArgs(zone, smi_class, name));
       if (call_ic_data->NumberOfChecks() == 0) {
         GrowableArray<intptr_t> class_ids(2);
         class_ids.Add(kSmiCid);
@@ -3138,7 +3138,8 @@
                                         instance_call()->argument_names(),
                                         deopt_id(),
                                         instance_call()->token_pos(),
-                                        locs());
+                                        locs(),
+                                        complete());
 }
 
 
@@ -3480,7 +3481,8 @@
     return this;
   }
   const intptr_t length = Smi::Cast(num_elements->BoundConstant()).Value();
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   GrowableHandlePtrArray<const String> pieces(zone, length);
   for (intptr_t i = 0; i < length; i++) {
     pieces.Add(Object::null_string());
@@ -3508,7 +3510,8 @@
         pieces.SetAt(store_index, String::Cast(obj));
       } else if (obj.IsSmi()) {
         const char* cstr = obj.ToCString();
-        pieces.SetAt(store_index, String::Handle(zone, Symbols::New(cstr)));
+        pieces.SetAt(store_index,
+            String::Handle(zone, String::New(cstr, Heap::kOld)));
       } else if (obj.IsBool()) {
         pieces.SetAt(store_index,
             Bool::Cast(obj).value() ? Symbols::True() : Symbols::False());
@@ -3522,9 +3525,8 @@
     }
   }
 
-  ASSERT(pieces.length() == length);
   const String& concatenated = String::ZoneHandle(zone,
-      Symbols::FromConcatAll(pieces));
+      Symbols::FromConcatAll(thread, pieces));
   return flow_graph->GetConstant(concatenated);
 }
 
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 0b64cbc..6e16c31 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -2892,17 +2892,20 @@
  public:
   PolymorphicInstanceCallInstr(InstanceCallInstr* instance_call,
                                const ICData& ic_data,
-                               bool with_checks)
+                               bool with_checks,
+                               bool complete)
       : TemplateDefinition(instance_call->deopt_id()),
         instance_call_(instance_call),
         ic_data_(ic_data),
-        with_checks_(with_checks) {
+        with_checks_(with_checks),
+        complete_(complete) {
     ASSERT(instance_call_ != NULL);
     ASSERT(ic_data.NumberOfChecks() > 0);
   }
 
   InstanceCallInstr* instance_call() const { return instance_call_; }
   bool with_checks() const { return with_checks_; }
+  bool complete() const { return complete_; }
   virtual TokenPosition token_pos() const {
     return instance_call_->token_pos();
   }
@@ -2934,6 +2937,7 @@
   InstanceCallInstr* instance_call_;
   const ICData& ic_data_;
   const bool with_checks_;
+  const bool complete_;
 
   DISALLOW_COPY_AND_ASSIGN(PolymorphicInstanceCallInstr);
 };
@@ -7815,8 +7819,6 @@
 
   void set_licm_hoisted(bool value) { licm_hoisted_ = value; }
 
-  static bool IsImmutableClassId(intptr_t cid);
-
   PRINT_OPERANDS_TO_SUPPORT
 
  private:
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index dfe3fc5..c7591b5 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -1581,7 +1581,8 @@
   if (field_cid == kDynamicCid) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldClassInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
@@ -1739,7 +1740,8 @@
   if (field().guarded_list_length() == Field::kNoFixedLength) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldLengthInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
diff --git a/runtime/vm/intermediate_language_arm64.cc b/runtime/vm/intermediate_language_arm64.cc
index 239ad0b..452b6ba 100644
--- a/runtime/vm/intermediate_language_arm64.cc
+++ b/runtime/vm/intermediate_language_arm64.cc
@@ -1438,7 +1438,8 @@
   if (field_cid == kDynamicCid) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldClassInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
@@ -1593,7 +1594,8 @@
   if (field().guarded_list_length() == Field::kNoFixedLength) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldLengthInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index a6471e1..8cae087 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1412,7 +1412,8 @@
   if (field_cid == kDynamicCid) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldClassInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
@@ -1571,7 +1572,8 @@
   if (field().guarded_list_length() == Field::kNoFixedLength) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldLengthInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index 022d6b5..a8595a8 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -1612,7 +1612,8 @@
   if (field_cid == kDynamicCid) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldClassInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
@@ -1770,7 +1771,8 @@
   if (field().guarded_list_length() == Field::kNoFixedLength) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldLengthInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index d94b5f6..8253b0c 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -1453,7 +1453,8 @@
   if (field_cid == kDynamicCid) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldClassInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
@@ -1598,7 +1599,8 @@
   if (field().guarded_list_length() == Field::kNoFixedLength) {
     if (Compiler::IsBackgroundCompilation()) {
       // Field state changed while compiling.
-      Compiler::AbortBackgroundCompilation(deopt_id());
+      Compiler::AbortBackgroundCompilation(deopt_id(),
+          "GuardFieldLengthInstr: field state changed while compiling");
     }
     ASSERT(!compiler->is_optimizing());
     return;  // Nothing to emit.
diff --git a/runtime/vm/intrinsifier_arm.cc b/runtime/vm/intrinsifier_arm.cc
index 7afb021..2fec757 100644
--- a/runtime/vm/intrinsifier_arm.cc
+++ b/runtime/vm/intrinsifier_arm.cc
@@ -1500,10 +1500,10 @@
       math_lib.LookupClassAllowPrivate(Symbols::_Random()));
   ASSERT(!random_class.IsNull());
   const Field& state_field = Field::ZoneHandle(
-      random_class.LookupInstanceField(Symbols::_state()));
+      random_class.LookupInstanceFieldAllowPrivate(Symbols::_state()));
   ASSERT(!state_field.IsNull());
   const Field& random_A_field = Field::ZoneHandle(
-      random_class.LookupStaticField(Symbols::_A()));
+      random_class.LookupStaticFieldAllowPrivate(Symbols::_A()));
   ASSERT(!random_A_field.IsNull());
   ASSERT(random_A_field.is_const());
   const Instance& a_value = Instance::Handle(random_A_field.StaticValue());
diff --git a/runtime/vm/intrinsifier_arm64.cc b/runtime/vm/intrinsifier_arm64.cc
index e4e5b11..fd0c053 100644
--- a/runtime/vm/intrinsifier_arm64.cc
+++ b/runtime/vm/intrinsifier_arm64.cc
@@ -1582,10 +1582,10 @@
       math_lib.LookupClassAllowPrivate(Symbols::_Random()));
   ASSERT(!random_class.IsNull());
   const Field& state_field = Field::ZoneHandle(
-      random_class.LookupInstanceField(Symbols::_state()));
+      random_class.LookupInstanceFieldAllowPrivate(Symbols::_state()));
   ASSERT(!state_field.IsNull());
   const Field& random_A_field = Field::ZoneHandle(
-      random_class.LookupStaticField(Symbols::_A()));
+      random_class.LookupStaticFieldAllowPrivate(Symbols::_A()));
   ASSERT(!random_A_field.IsNull());
   ASSERT(random_A_field.is_const());
   const Instance& a_value = Instance::Handle(random_A_field.StaticValue());
diff --git a/runtime/vm/intrinsifier_ia32.cc b/runtime/vm/intrinsifier_ia32.cc
index 3c4a470..fc1f3be 100644
--- a/runtime/vm/intrinsifier_ia32.cc
+++ b/runtime/vm/intrinsifier_ia32.cc
@@ -1641,10 +1641,10 @@
       math_lib.LookupClassAllowPrivate(Symbols::_Random()));
   ASSERT(!random_class.IsNull());
   const Field& state_field = Field::ZoneHandle(
-      random_class.LookupInstanceField(Symbols::_state()));
+      random_class.LookupInstanceFieldAllowPrivate(Symbols::_state()));
   ASSERT(!state_field.IsNull());
   const Field& random_A_field = Field::ZoneHandle(
-      random_class.LookupStaticField(Symbols::_A()));
+      random_class.LookupStaticFieldAllowPrivate(Symbols::_A()));
   ASSERT(!random_A_field.IsNull());
   ASSERT(random_A_field.is_const());
   const Instance& a_value = Instance::Handle(random_A_field.StaticValue());
diff --git a/runtime/vm/intrinsifier_mips.cc b/runtime/vm/intrinsifier_mips.cc
index 63b7755..2c13390 100644
--- a/runtime/vm/intrinsifier_mips.cc
+++ b/runtime/vm/intrinsifier_mips.cc
@@ -1602,10 +1602,10 @@
       math_lib.LookupClassAllowPrivate(Symbols::_Random()));
   ASSERT(!random_class.IsNull());
   const Field& state_field = Field::ZoneHandle(
-      random_class.LookupInstanceField(Symbols::_state()));
+      random_class.LookupInstanceFieldAllowPrivate(Symbols::_state()));
   ASSERT(!state_field.IsNull());
   const Field& random_A_field = Field::ZoneHandle(
-      random_class.LookupStaticField(Symbols::_A()));
+      random_class.LookupStaticFieldAllowPrivate(Symbols::_A()));
   ASSERT(!random_A_field.IsNull());
   ASSERT(random_A_field.is_const());
   const Instance& a_value = Instance::Handle(random_A_field.StaticValue());
diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc
index c3954fd..66bc4c2 100644
--- a/runtime/vm/intrinsifier_x64.cc
+++ b/runtime/vm/intrinsifier_x64.cc
@@ -1493,10 +1493,10 @@
       math_lib.LookupClassAllowPrivate(Symbols::_Random()));
   ASSERT(!random_class.IsNull());
   const Field& state_field = Field::ZoneHandle(
-      random_class.LookupInstanceField(Symbols::_state()));
+      random_class.LookupInstanceFieldAllowPrivate(Symbols::_state()));
   ASSERT(!state_field.IsNull());
   const Field& random_A_field = Field::ZoneHandle(
-      random_class.LookupStaticField(Symbols::_A()));
+      random_class.LookupStaticFieldAllowPrivate(Symbols::_A()));
   ASSERT(!random_A_field.IsNull());
   ASSERT(random_A_field.is_const());
   const Instance& a_value = Instance::Handle(random_A_field.StaticValue());
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 03b275e..51e0c7e 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -12,7 +12,6 @@
 #include "vm/code_observers.h"
 #include "vm/compiler.h"
 #include "vm/compiler_stats.h"
-#include "vm/coverage.h"
 #include "vm/dart_api_message.h"
 #include "vm/dart_api_state.h"
 #include "vm/dart_entry.h"
@@ -796,8 +795,9 @@
       field_invalidation_gen_(kInvalidGen),
       loading_invalidation_gen_(kInvalidGen),
       top_level_parsing_count_(0),
-      boxed_field_list_mutex_(new Mutex()),
+      field_list_mutex_(new Mutex()),
       boxed_field_list_(GrowableObjectArray::null()),
+      disabling_field_list_(GrowableObjectArray::null()),
       spawn_count_monitor_(new Monitor()),
       spawn_count_(0) {
   NOT_IN_PRODUCT(FlagsCopyFrom(api_flags));
@@ -841,8 +841,8 @@
   object_id_ring_ = NULL;
   delete pause_loop_monitor_;
   pause_loop_monitor_ = NULL;
-  delete boxed_field_list_mutex_;
-  boxed_field_list_mutex_ = NULL;
+  delete field_list_mutex_;
+  field_list_mutex_ = NULL;
   ASSERT(spawn_count_ == 0);
   delete spawn_count_monitor_;
   delete safepoint_handler_;
@@ -1527,7 +1527,7 @@
 void Isolate::StopBackgroundCompiler() {
   // Wait until all background compilation has finished.
   if (background_compiler_ != NULL) {
-    BackgroundCompiler::Stop(background_compiler_);
+    BackgroundCompiler::Stop(this);
   }
 }
 
@@ -1554,12 +1554,6 @@
     StackZone stack_zone(thread);
     HandleScope handle_scope(thread);
 
-    // Write out the coverage data if collection has been enabled.
-    if ((this != Dart::vm_isolate()) &&
-        !ServiceIsolate::IsServiceIsolateDescendant(this)) {
-      CodeCoverage::Write(thread);
-    }
-
     // Write compiler stats data if enabled.
     if (FLAG_support_compiler_stats && FLAG_compiler_stats
         && !ServiceIsolate::IsServiceIsolateDescendant(this)
@@ -1660,12 +1654,18 @@
   visitor->VisitPointer(
       reinterpret_cast<RawObject**>(&registered_service_extension_handlers_));
 
-  // Visit the boxed_field_list.
+  // Visit the boxed_field_list_.
   // 'boxed_field_list_' access via mutator and background compilation threads
   // is guarded with a monitor. This means that we can visit it only
-  // when at safepoint or the boxed_field_list_mutex_ lock has been taken.
+  // when at safepoint or the field_list_mutex_ lock has been taken.
   visitor->VisitPointer(reinterpret_cast<RawObject**>(&boxed_field_list_));
 
+  // Visit the disabling_field_list.
+  // 'disabling_field_list_' access via mutator and background compilation
+  // threads is guarded with a monitor. This means that we can visit it only
+  // when at safepoint or the field_list_mutex_ lock has been taken.
+  visitor->VisitPointer(reinterpret_cast<RawObject**>(&disabling_field_list_));
+
   // Visit objects in the debugger.
   if (FLAG_support_debugger) {
     debugger()->VisitObjectPointers(visitor);
@@ -1784,6 +1784,10 @@
     Error& error = Error::Handle(Thread::Current()->sticky_error());
     ASSERT(!error.IsNull());
     jsobj.AddProperty("error", error, false);
+  } else if (sticky_error() != Object::null()) {
+    Error& error = Error::Handle(sticky_error());
+    ASSERT(!error.IsNull());
+    jsobj.AddProperty("error", error, false);
   }
 
   {
@@ -1886,11 +1890,56 @@
 }
 
 
+// Used by mutator thread to notify background compiler which fields
+// triggered code invalidation.
+void Isolate::AddDisablingField(const Field& field) {
+  ASSERT(Thread::Current()->IsMutatorThread());
+  SafepointMutexLocker ml(field_list_mutex_);
+  if (disabling_field_list_ == GrowableObjectArray::null()) {
+    disabling_field_list_ = GrowableObjectArray::New(Heap::kOld);
+  }
+  const GrowableObjectArray& array =
+      GrowableObjectArray::Handle(disabling_field_list_);
+  array.Add(field, Heap::kOld);
+}
+
+
+RawField* Isolate::GetDisablingField() {
+  ASSERT(Compiler::IsBackgroundCompilation() &&
+         (!Isolate::Current()->HasMutatorThread() ||
+         Isolate::Current()->mutator_thread()->IsAtSafepoint()));
+  ASSERT(Thread::Current()->IsAtSafepoint());
+  if (disabling_field_list_ == GrowableObjectArray::null()) {
+    return Field::null();
+  }
+  const GrowableObjectArray& array =
+      GrowableObjectArray::Handle(disabling_field_list_);
+  if (array.Length() == 0) {
+    return Field::null();
+  }
+  return Field::RawCast(array.RemoveLast());
+}
+
+
+void Isolate::ClearDisablingFieldList() {
+  MutexLocker ml(field_list_mutex_);
+  if (disabling_field_list_ == GrowableObjectArray::null()) {
+    return;
+  }
+  const GrowableObjectArray& array =
+      GrowableObjectArray::Handle(disabling_field_list_);
+  if (array.Length() > 0) {
+    array.SetLength(0);
+  }
+}
+
+
 void Isolate::AddDeoptimizingBoxedField(const Field& field) {
+  ASSERT(Compiler::IsBackgroundCompilation());
   ASSERT(field.IsOriginal());
   // The enclosed code allocates objects and can potentially trigger a GC,
   // ensure that we account for safepoints when grabbing the lock.
-  SafepointMutexLocker ml(boxed_field_list_mutex_);
+  SafepointMutexLocker ml(field_list_mutex_);
   if (boxed_field_list_ == GrowableObjectArray::null()) {
     boxed_field_list_ = GrowableObjectArray::New(Heap::kOld);
   }
@@ -1901,7 +1950,8 @@
 
 
 RawField* Isolate::GetDeoptimizingBoxedField() {
-  MutexLocker ml(boxed_field_list_mutex_);
+  ASSERT(Thread::Current()->IsMutatorThread());
+  MutexLocker ml(field_list_mutex_);
   if (boxed_field_list_ == GrowableObjectArray::null()) {
     return Field::null();
   }
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index e1564da..3250082 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -522,6 +522,14 @@
     return AtomicOperations::LoadRelaxedIntPtr(&loading_invalidation_gen_);
   }
 
+  // Used by mutator thread to notify background compiler which fields
+  // triggered code invalidation.
+  void AddDisablingField(const Field& field);
+  // Returns Field::null() if none available in the list. Can be called
+  // only from background compiler and while mutator thread is at safepoint.
+  RawField* GetDisablingField();
+  void ClearDisablingFieldList();
+
   // Used by background compiler which field became boxed and must trigger
   // deoptimization in the mutator thread.
   void AddDeoptimizingBoxedField(const Field& field);
@@ -744,10 +752,13 @@
   intptr_t loading_invalidation_gen_;
   intptr_t top_level_parsing_count_;
 
-  // Protect access to boxed_field_list_.
-  Mutex* boxed_field_list_mutex_;
+  // Protect access to boxed_field_list_ and disabling_field_list_.
+  Mutex* field_list_mutex_;
   // List of fields that became boxed and that trigger deoptimization.
   RawGrowableObjectArray* boxed_field_list_;
+  // List of fields that were disabling code while background compiler
+  // was running.
+  RawGrowableObjectArray* disabling_field_list_;
 
   // This guards spawn_count_. An isolate cannot complete shutdown and be
   // destroyed while there are child isolates in the midst of a spawn.
diff --git a/runtime/vm/jit_optimizer.cc b/runtime/vm/jit_optimizer.cc
index 8a632f1..8a22c85 100644
--- a/runtime/vm/jit_optimizer.cc
+++ b/runtime/vm/jit_optimizer.cc
@@ -96,6 +96,7 @@
     // to megamorphic call.
     return false;
   }
+
   GrowableArray<intptr_t> class_ids(call->ic_data()->NumArgsTested());
   ASSERT(call->ic_data()->NumArgsTested() <= call->ArgumentCount());
   for (intptr_t i = 0; i < call->ic_data()->NumArgsTested(); i++) {
@@ -249,10 +250,12 @@
   }
 
   const bool with_checks = false;
+  const bool complete = false;
   PolymorphicInstanceCallInstr* specialized =
       new(Z) PolymorphicInstanceCallInstr(call->instance_call(),
                                           ic_data,
-                                          with_checks);
+                                          with_checks,
+                                          complete);
   call->ReplaceWith(specialized, current_iterator());
 }
 
@@ -2755,7 +2758,8 @@
     if (!flow_graph()->InstanceCallNeedsClassCheck(instr, function_kind)) {
       PolymorphicInstanceCallInstr* call =
           new(Z) PolymorphicInstanceCallInstr(instr, unary_checks,
-                                              /* call_with_checks = */ false);
+                                              /* call_with_checks = */ false,
+                                              /* complete = */ false);
       instr->ReplaceWith(call, current_iterator());
       return;
     }
@@ -2774,7 +2778,8 @@
     }
     PolymorphicInstanceCallInstr* call =
         new(Z) PolymorphicInstanceCallInstr(instr, unary_checks,
-                                            call_with_checks);
+                                            call_with_checks,
+                                            /* complete = */ false);
     instr->ReplaceWith(call, current_iterator());
   }
 }
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 4f9f8d0..2ce486b 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -60,11 +60,11 @@
 DEFINE_FLAG(bool, ignore_patch_signature_mismatch, false,
             "Ignore patch file member signature mismatch.");
 
-DECLARE_FLAG(charp, coverage_dir);
 DECLARE_FLAG(bool, show_invisible_frames);
 DECLARE_FLAG(bool, trace_deoptimization);
 DECLARE_FLAG(bool, trace_deoptimization_verbose);
 DECLARE_FLAG(bool, write_protect_code);
+DECLARE_FLAG(bool, support_externalizable_strings);
 
 
 static const char* const kGetterPrefix = "get:";
@@ -215,7 +215,8 @@
 //   _MyClass@6328321.named -> _MyClass.named
 //
 RawString* String::ScrubName(const String& name) {
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
 
 NOT_IN_PRODUCT(
   if (name.Equals(Symbols::TopLevel())) {
@@ -299,7 +300,7 @@
 
   if ((start == 0) && (dot_pos == -1)) {
     // This unmangled_name is fine as it is.
-    return Symbols::New(unmangled_name, sum_segment_len);
+    return Symbols::New(thread, unmangled_name, sum_segment_len);
   }
 
   // Drop the trailing dot if needed.
@@ -318,7 +319,7 @@
   unmangled_name = MergeSubStrings(zone, unmangled_segments, final_len);
 )
 
-  return Symbols::New(unmangled_name);
+  return Symbols::New(thread, unmangled_name);
 }
 
 
@@ -1521,7 +1522,7 @@
   type = Type::NewNonParameterizedType(cls);
   object_store->set_double_type(type);
 
-  name = Symbols::New("String");
+  name = Symbols::_String().raw();
   cls = Class::New<Instance>(kIllegalCid);
   RegisterClass(cls, name, core_lib);
   cls.set_num_type_arguments(0);
@@ -1586,9 +1587,9 @@
   CLASS_LIST_NO_OBJECT(V)
 
 #define ADD_SET_FIELD(clazz)                                                   \
-  field_name = Symbols::New("cid"#clazz);                                      \
+  field_name = Symbols::New(thread, "cid"#clazz);                              \
   field = Field::New(field_name, true, false, true, false, cls,                \
-      Type::Handle(Type::IntType()), TokenPosition::kMinSource);             \
+      Type::Handle(Type::IntType()), TokenPosition::kMinSource);               \
   value = Smi::New(k##clazz##Cid);                                             \
   field.SetStaticValue(value, true);                                           \
   cls.AddField(field);                                                         \
@@ -2087,6 +2088,8 @@
 // Traits for looking up Functions by name.
 class ClassFunctionsTraits {
  public:
+  static const char* Name() { return "ClassFunctionsTraits"; }
+
   // Called when growing the table.
   static bool IsMatch(const Object& a, const Object& b) {
     ASSERT(a.IsFunction() && b.IsFunction());
@@ -2570,8 +2573,10 @@
 RawFunction* Class::CreateInvocationDispatcher(const String& target_name,
                                                const Array& args_desc,
                                                RawFunction::Kind kind) const {
-  Function& invocation = Function::Handle(
-      Function::New(String::Handle(Symbols::New(target_name)),
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  Function& invocation = Function::Handle(zone,
+      Function::New(String::Handle(zone, Symbols::New(thread, target_name)),
                     kind,
                     false,  // Not static.
                     false,  // Not const.
@@ -2584,10 +2589,10 @@
   invocation.set_num_fixed_parameters(desc.PositionalCount());
   invocation.SetNumOptionalParameters(desc.NamedCount(),
                                       false);  // Not positional.
-  invocation.set_parameter_types(Array::Handle(Array::New(desc.Count(),
-                                                          Heap::kOld)));
-  invocation.set_parameter_names(Array::Handle(Array::New(desc.Count(),
-                                                          Heap::kOld)));
+  invocation.set_parameter_types(Array::Handle(zone, Array::New(desc.Count(),
+                                                                Heap::kOld)));
+  invocation.set_parameter_names(Array::Handle(zone, Array::New(desc.Count(),
+                                                                Heap::kOld)));
   // Receiver.
   invocation.SetParameterTypeAt(0, Object::dynamic_type());
   invocation.SetParameterNameAt(0, Symbols::This());
@@ -2597,14 +2602,15 @@
     invocation.SetParameterTypeAt(i, Object::dynamic_type());
     char name[64];
     OS::SNPrint(name, 64, ":p%" Pd, i);
-    invocation.SetParameterNameAt(i, String::Handle(Symbols::New(name)));
+    invocation.SetParameterNameAt(i, String::Handle(zone,
+        Symbols::New(thread, name)));
   }
 
   // Named parameters.
   for (; i < desc.Count(); i++) {
     invocation.SetParameterTypeAt(i, Object::dynamic_type());
     intptr_t index = i - desc.PositionalCount();
-    invocation.SetParameterNameAt(i, String::Handle(desc.NameAt(index)));
+    invocation.SetParameterNameAt(i, String::Handle(zone, desc.NameAt(index)));
   }
   invocation.set_result_type(Object::dynamic_type());
   invocation.set_is_debuggable(false);
@@ -2622,13 +2628,15 @@
 // is created and injected as a getter (under the name get:M) into the class
 // owning method M.
 RawFunction* Function::CreateMethodExtractor(const String& getter_name) const {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   ASSERT(Field::IsGetterName(getter_name));
   const Function& closure_function =
-      Function::Handle(ImplicitClosureFunction());
+      Function::Handle(zone, ImplicitClosureFunction());
 
-  const Class& owner = Class::Handle(closure_function.Owner());
-  Function& extractor = Function::Handle(
-    Function::New(String::Handle(Symbols::New(getter_name)),
+  const Class& owner = Class::Handle(zone, closure_function.Owner());
+  Function& extractor = Function::Handle(zone,
+    Function::New(String::Handle(zone, Symbols::New(thread, getter_name)),
                   RawFunction::kMethodExtractor,
                   false,  // Not static.
                   false,  // Not const.
@@ -4161,26 +4169,80 @@
   ASSERT(!flds.IsNull());
   intptr_t len = flds.Length();
   Field& field = thread->FieldHandle();
+  if (name.IsSymbol()) {
+    // Use fast raw pointer string compare for symbols.
+    for (intptr_t i = 0; i < len; i++) {
+      field ^= flds.At(i);
+      if (name.raw() == field.name()) {
+        if (kind == kInstance) {
+          return field.is_static() ? Field::null() : field.raw();
+        } else if (kind == kStatic) {
+          return field.is_static() ? field.raw() : Field::null();
+        }
+        ASSERT(kind == kAny);
+        return field.raw();
+      }
+    }
+  } else {
+    String& field_name = thread->StringHandle();
+    for (intptr_t i = 0; i < len; i++) {
+      field ^= flds.At(i);
+      field_name ^= field.name();
+      if (name.Equals(field_name)) {
+        if (kind == kInstance) {
+          return field.is_static() ? Field::null() : field.raw();
+        } else if (kind == kStatic) {
+          return field.is_static() ? field.raw() : Field::null();
+        }
+        ASSERT(kind == kAny);
+        return field.raw();
+      }
+    }
+  }
+  return Field::null();
+}
+
+
+RawField* Class::LookupFieldAllowPrivate(const String& name) const {
+  // Use slow string compare, ignoring privacy name mangling.
+  Thread* thread = Thread::Current();
+  if (EnsureIsFinalized(thread) != Error::null()) {
+    return Field::null();
+  }
+  REUSABLE_ARRAY_HANDLESCOPE(thread);
+  REUSABLE_FIELD_HANDLESCOPE(thread);
+  REUSABLE_STRING_HANDLESCOPE(thread);
+  Array& flds = thread->ArrayHandle();
+  flds ^= fields();
+  ASSERT(!flds.IsNull());
+  intptr_t len = flds.Length();
+  Field& field = thread->FieldHandle();
   String& field_name = thread->StringHandle();
   for (intptr_t i = 0; i < len; i++) {
     field ^= flds.At(i);
     field_name ^= field.name();
     if (String::EqualsIgnoringPrivateKey(field_name, name)) {
-      if (kind == kInstance) {
-        if (!field.is_static()) {
-          return field.raw();
-        }
-      } else if (kind == kStatic) {
-        if (field.is_static()) {
-          return field.raw();
-        }
-      } else if (kind == kAny) {
-        return field.raw();
-      }
-      return Field::null();
+      return field.raw();
     }
   }
-  // No field found.
+  return Field::null();
+}
+
+
+RawField* Class::LookupInstanceFieldAllowPrivate(const String& name) const {
+  Field& field = Field::Handle(LookupFieldAllowPrivate(name));
+  if (!field.IsNull() && !field.is_static()) {
+    return field.raw();
+  }
+  return Field::null();
+}
+
+
+RawField* Class::LookupStaticFieldAllowPrivate(const String& name) const {
+  Field& field = Field::Handle(LookupFieldAllowPrivate(name));
+  if (!field.IsNull() && field.is_static()) {
+    return field.raw();
+  }
   return Field::null();
 }
 
@@ -4399,6 +4461,21 @@
 }
 
 
+void Class::InsertCanonicalNumber(Zone* zone,
+                                  intptr_t index,
+                                  const Number& constant) const {
+  // The constant needs to be added to the list. Grow the list if it is full.
+  Array& canonical_list = Array::Handle(zone, constants());
+  const intptr_t list_len = canonical_list.Length();
+  if (index >= list_len) {
+    const intptr_t new_length = (list_len == 0) ? 4 : list_len + 4;
+    canonical_list ^= Array::Grow(canonical_list, new_length, Heap::kOld);
+    set_constants(canonical_list);
+  }
+  canonical_list.SetAt(index, constant);
+}
+
+
 RawUnresolvedClass* UnresolvedClass::New(const LibraryPrefix& library_prefix,
                                          const String& ident,
                                          TokenPosition token_pos) {
@@ -4438,15 +4515,16 @@
 
 RawString* UnresolvedClass::Name() const {
   if (library_prefix() != LibraryPrefix::null()) {
-    const LibraryPrefix& lib_prefix = LibraryPrefix::Handle(library_prefix());
-    String& name = String::Handle();
-    name = lib_prefix.name();  // Qualifier.
-    Zone* zone = Thread::Current()->zone();
+    Thread* thread = Thread::Current();
+    Zone* zone = thread->zone();
+    const LibraryPrefix& lib_prefix = LibraryPrefix::Handle(zone,
+                                                            library_prefix());
+    const String& name = String::Handle(zone, lib_prefix.name());  // Qualifier.
     GrowableHandlePtrArray<const String> strs(zone, 3);
     strs.Add(name);
     strs.Add(Symbols::Dot());
     strs.Add(String::Handle(zone, ident()));
-    return Symbols::FromConcatAll(strs);
+    return Symbols::FromConcatAll(thread, strs);
   } else {
     return ident();
   }
@@ -4495,13 +4573,14 @@
 RawString* TypeArguments::SubvectorName(intptr_t from_index,
                                         intptr_t len,
                                         NameVisibility name_visibility) const {
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   ASSERT(from_index + len <= Length());
   String& name = String::Handle(zone);
   const intptr_t num_strings = (len == 0) ? 2 : 2*len + 1;  // "<""T"", ""T"">".
   GrowableHandlePtrArray<const String> pieces(zone, num_strings);
   pieces.Add(Symbols::LAngleBracket());
-  AbstractType& type = AbstractType::Handle();
+  AbstractType& type = AbstractType::Handle(zone);
   for (intptr_t i = 0; i < len; i++) {
     type = TypeAt(from_index + i);
     name = type.BuildName(name_visibility);
@@ -4512,7 +4591,7 @@
   }
   pieces.Add(Symbols::RAngleBracket());
   ASSERT(pieces.length() == num_strings);
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
@@ -5170,15 +5249,16 @@
   if (IsNull()) {
     return Symbols::Empty().raw();
   }
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   AbstractType& type = AbstractType::Handle(zone);
   const intptr_t num_types = Length();
-  GrowableHandlePtrArray<const String> pieces(zone, num_types);
+  const Array& pieces = Array::Handle(zone, Array::New(num_types));
   for (intptr_t i = 0; i < num_types; i++) {
     type = TypeAt(i);
-    pieces.Add(String::Handle(zone, type.EnumerateURIs()));
+    pieces.SetAt(i, String::Handle(zone, type.EnumerateURIs()));
   }
-  return Symbols::FromConcatAll(pieces);
+  return String::ConcatAll(pieces);
 }
 
 
@@ -5871,10 +5951,6 @@
 
 
 bool Function::IsOptimizable() const {
-  if (FLAG_coverage_dir != NULL) {
-    // Do not optimize if collecting coverage data.
-    return false;
-  }
   if (is_native()) {
     // Native methods don't need to be optimized.
     return false;
@@ -6593,8 +6669,10 @@
 RawFunction* Function::NewEvalFunction(const Class& owner,
                                        const Script& script,
                                        bool is_static) {
-  const Function& result = Function::Handle(
-      Function::New(String::Handle(Symbols::New(":Eval")),
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  const Function& result = Function::Handle(zone,
+      Function::New(String::Handle(Symbols::New(thread, ":Eval")),
                     RawFunction::kRegularFunction,
                     is_static,
                     /* is_const = */ false,
@@ -6690,23 +6768,25 @@
 
 
 RawString* Function::UserVisibleFormalParameters() const {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   // Typically 3, 5,.. elements in 'pieces', e.g.:
   // '_LoadRequest', CommaSpace, '_LoadError'.
-  GrowableHandlePtrArray<const String> pieces(Thread::Current()->zone(), 5);
-  const TypeArguments& instantiator = TypeArguments::Handle();
-  BuildSignatureParameters(false, kUserVisibleName, instantiator, &pieces);
-  return Symbols::FromConcatAll(pieces);
+  GrowableHandlePtrArray<const String> pieces(zone, 5);
+  const TypeArguments& instantiator = TypeArguments::Handle(zone);
+  BuildSignatureParameters(thread, zone,
+                           false, kUserVisibleName, instantiator, &pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
 void Function::BuildSignatureParameters(
+    Thread* thread,
+    Zone* zone,
     bool instantiate,
     NameVisibility name_visibility,
     const TypeArguments& instantiator,
     GrowableHandlePtrArray<const String>* pieces) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-
   AbstractType& param_type = AbstractType::Handle(zone);
   const intptr_t num_params = NumParameters();
   const intptr_t num_fixed_params = num_fixed_parameters();
@@ -6846,7 +6926,8 @@
     }
   }
   pieces.Add(Symbols::LParen());
-  BuildSignatureParameters(instantiate,
+  BuildSignatureParameters(thread, zone,
+                           instantiate,
                            name_visibility,
                            instantiator,
                            &pieces);
@@ -6858,7 +6939,7 @@
   }
   name = res_type.BuildName(name_visibility);
   pieces.Add(name);
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
@@ -7282,12 +7363,12 @@
 
 
 RawString* Field::GetterSymbol(const String& field_name) {
-  return Symbols::FromConcat(Symbols::GetterPrefix(), field_name);
+  return Symbols::FromGet(Thread::Current(), field_name);
 }
 
 
 RawString* Field::LookupGetterSymbol(const String& field_name) {
-  return Symbols::LookupFromConcat(Symbols::GetterPrefix(), field_name);
+  return Symbols::LookupFromGet(Thread::Current(), field_name);
 }
 
 
@@ -7297,23 +7378,23 @@
 
 
 RawString* Field::SetterSymbol(const String& field_name) {
-  return Symbols::FromConcat(Symbols::SetterPrefix(), field_name);
+  return Symbols::FromSet(Thread::Current(), field_name);
 }
 
 
 RawString* Field::LookupSetterSymbol(const String& field_name) {
-  return Symbols::LookupFromConcat(Symbols::SetterPrefix(), field_name);
+  return Symbols::LookupFromSet(Thread::Current(), field_name);
 }
 
 
 RawString* Field::NameFromGetter(const String& getter_name) {
-  return Symbols::New(getter_name, kGetterPrefixLength,
+  return Symbols::New(Thread::Current(), getter_name, kGetterPrefixLength,
       getter_name.Length() - kGetterPrefixLength);
 }
 
 
 RawString* Field::NameFromSetter(const String& setter_name) {
-  return Symbols::New(setter_name, kSetterPrefixLength,
+  return Symbols::New(Thread::Current(), setter_name, kSetterPrefixLength,
       setter_name.Length() - kSetterPrefixLength);
 }
 
@@ -7556,21 +7637,24 @@
 // field f and cache the closure in a newly created static field
 // named #f (or #f= in case of a setter).
 RawInstance* Field::AccessorClosure(bool make_setter) const {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   ASSERT(is_static());
-  const Class& field_owner = Class::Handle(Owner());
+  const Class& field_owner = Class::Handle(zone, Owner());
 
-  String& closure_name = String::Handle(this->name());
-  closure_name = Symbols::FromConcat(Symbols::HashMark(), closure_name);
+  String& closure_name = String::Handle(zone, this->name());
+  closure_name = Symbols::FromConcat(thread, Symbols::HashMark(), closure_name);
   if (make_setter) {
-    closure_name = Symbols::FromConcat(Symbols::HashMark(), closure_name);
+    closure_name = Symbols::FromConcat(thread,
+        Symbols::HashMark(), closure_name);
   }
 
-  Field& closure_field = Field::Handle();
+  Field& closure_field = Field::Handle(zone);
   closure_field = field_owner.LookupStaticField(closure_name);
   if (!closure_field.IsNull()) {
     ASSERT(closure_field.is_static());
-    const Instance& closure =
-        Instance::Handle(closure_field.StaticValue());
+    const Instance& closure = Instance::Handle(zone,
+        closure_field.StaticValue());
     ASSERT(!closure.IsNull());
     ASSERT(closure.IsClosure());
     return closure.raw();
@@ -7578,8 +7662,8 @@
 
   // This is the first time a closure for this field is requested.
   // Create the closure and a new static field in which it is stored.
-  const char* field_name = String::Handle(name()).ToCString();
-  String& expr_src = String::Handle();
+  const char* field_name = String::Handle(zone, name()).ToCString();
+  String& expr_src = String::Handle(zone);
   if (make_setter) {
     expr_src =
         String::NewFormatted("(%s_) { return %s = %s_; }",
@@ -7587,10 +7671,10 @@
   } else {
     expr_src = String::NewFormatted("() { return %s; }", field_name);
   }
-  Object& result =
-      Object::Handle(field_owner.Evaluate(expr_src,
-                                          Object::empty_array(),
-                                          Object::empty_array()));
+  Object& result = Object::Handle(zone,
+      field_owner.Evaluate(expr_src,
+                           Object::empty_array(),
+                           Object::empty_array()));
   ASSERT(result.IsInstance());
   // The caller may expect the closure to be allocated in old space. Copy
   // the result here, since Object::Clone() is a private method.
@@ -7680,8 +7764,11 @@
 
 
 void Field::DeoptimizeDependentCode() const {
-  ASSERT(IsOriginal());
   ASSERT(Thread::Current()->IsMutatorThread());
+  ASSERT(IsOriginal());
+  if (FLAG_background_compilation) {
+    Isolate::Current()->AddDisablingField(*this);
+  }
   FieldDependentArray a(*this);
   a.DisableCode();
 }
@@ -7815,6 +7902,15 @@
 }
 
 
+bool Field::IsExternalizableCid(intptr_t cid) {
+  if (FLAG_support_externalizable_strings) {
+    return (cid == kOneByteStringCid) || (cid == kTwoByteStringCid);
+  } else {
+    return false;
+  }
+}
+
+
 void Field::InitializeGuardedListLengthInObjectOffset() const {
   ASSERT(IsOriginal());
   if (needs_length_check() &&
@@ -8236,6 +8332,8 @@
 // It also supports lookup by TokenDescriptor.
 class CompressedTokenTraits {
  public:
+  static const char* Name() { return "CompressedTokenTraits"; }
+
   static bool IsMatch(const Scanner::TokenDescriptor& descriptor,
                       const Object& key) {
     if (!key.IsLiteralToken()) {
@@ -8580,10 +8678,7 @@
     Token::Kind kind = static_cast<Token::Kind>(
         Smi::Value(reinterpret_cast<RawSmi*>(obj.raw())));
     ASSERT(kind < Token::kNumTokens);
-    if (Token::IsPseudoKeyword(kind) || Token::IsKeyword(kind)) {
-      return Symbols::Keyword(kind).raw();
-    }
-    return Symbols::New(Token::Str(kind));
+    return Symbols::Token(kind).raw();
   } else {
     ASSERT(obj.IsLiteralToken());  // Must be a literal token.
     const LiteralToken& literal_token = LiteralToken::Cast(obj);
@@ -8980,8 +9075,10 @@
 RawScript* Script::New(const String& url,
                        const String& source,
                        RawScript::Kind kind) {
-  const Script& result = Script::Handle(Script::New());
-  result.set_url(String::Handle(Symbols::New(url)));
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  const Script& result = Script::Handle(zone, Script::New());
+  result.set_url(String::Handle(zone, Symbols::New(thread, url)));
   result.set_source(source);
   result.set_kind(kind);
   result.SetLocationOffset(0, 0);
@@ -8998,10 +9095,10 @@
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
   Isolate* isolate = thread->isolate();
-  const GrowableObjectArray& libs = GrowableObjectArray::Handle(
-      zone, isolate->object_store()->libraries());
-  Library& lib = Library::Handle();
-  Array& scripts = Array::Handle();
+  const GrowableObjectArray& libs = GrowableObjectArray::Handle(zone,
+      isolate->object_store()->libraries());
+  Library& lib = Library::Handle(zone);
+  Array& scripts = Array::Handle(zone);
   for (intptr_t i = 0; i < libs.Length(); i++) {
     lib ^= libs.At(i);
     scripts = lib.LoadedScripts();
@@ -9165,6 +9262,8 @@
 // Traits for looking up Libraries by url in a hash set.
 class LibraryUrlTraits {
  public:
+  static const char* Name() { return "LibraryUrlTraits"; }
+
   // Called when growing the table.
   static bool IsMatch(const Object& a, const Object& b) {
     ASSERT(a.IsLibrary() && b.IsLibrary());
@@ -9256,49 +9355,57 @@
 }
 
 
-static RawString* MakeClassMetaName(const Class& cls) {
-  return Symbols::FromConcat(Symbols::At(), String::Handle(cls.Name()));
+static RawString* MakeClassMetaName(Thread* thread, Zone* zone,
+                                    const Class& cls) {
+  return Symbols::FromConcat(thread,
+                             Symbols::At(), String::Handle(zone, cls.Name()));
 }
 
 
-static RawString* MakeFieldMetaName(const Field& field) {
-  const String& cname =
-      String::Handle(MakeClassMetaName(Class::Handle(field.Origin())));
-  GrowableHandlePtrArray<const String> pieces(Thread::Current()->zone(), 3);
+static RawString* MakeFieldMetaName(Thread* thread, Zone* zone,
+                                    const Field& field) {
+  const String& cname = String::Handle(zone,
+      MakeClassMetaName(thread, zone, Class::Handle(zone, field.Origin())));
+  GrowableHandlePtrArray<const String> pieces(zone, 3);
   pieces.Add(cname);
   pieces.Add(Symbols::At());
   pieces.Add(String::Handle(field.name()));
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
-static RawString* MakeFunctionMetaName(const Function& func) {
-  const String& cname =
-      String::Handle(MakeClassMetaName(Class::Handle(func.origin())));
-  GrowableHandlePtrArray<const String> pieces(Thread::Current()->zone(), 3);
+static RawString* MakeFunctionMetaName(Thread* thread, Zone* zone,
+                                       const Function& func) {
+  const String& cname = String::Handle(zone,
+      MakeClassMetaName(thread, zone, Class::Handle(zone, func.origin())));
+  GrowableHandlePtrArray<const String> pieces(zone, 3);
   pieces.Add(cname);
   pieces.Add(Symbols::At());
   pieces.Add(String::Handle(func.QualifiedScrubbedName()));
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
-static RawString* MakeTypeParameterMetaName(const TypeParameter& param) {
-  const String& cname = String::Handle(
-      MakeClassMetaName(Class::Handle(param.parameterized_class())));
-  GrowableHandlePtrArray<const String> pieces(Thread::Current()->zone(), 3);
+static RawString* MakeTypeParameterMetaName(Thread* thread, Zone* zone,
+                                            const TypeParameter& param) {
+  const String& cname = String::Handle(zone,
+      MakeClassMetaName(thread, zone,
+                        Class::Handle(zone, param.parameterized_class())));
+  GrowableHandlePtrArray<const String> pieces(zone, 3);
   pieces.Add(cname);
   pieces.Add(Symbols::At());
   pieces.Add(String::Handle(param.name()));
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
 void Library::AddMetadata(const Object& owner,
                           const String& name,
                           TokenPosition token_pos) const {
-  const String& metaname = String::Handle(Symbols::New(name));
-  const Field& field = Field::Handle(
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  const String& metaname = String::Handle(zone, Symbols::New(thread, name));
+  const Field& field = Field::Handle(zone,
       Field::NewTopLevel(metaname,
                          false,  // is_final
                          false,  // is_const
@@ -9308,7 +9415,7 @@
   field.set_is_reflectable(false);
   field.SetStaticValue(Array::empty_array(), true);
   GrowableObjectArray& metadata =
-      GrowableObjectArray::Handle(this->metadata());
+      GrowableObjectArray::Handle(zone, this->metadata());
   metadata.Add(field, Heap::kOld);
 }
 
@@ -9316,34 +9423,43 @@
 void Library::AddClassMetadata(const Class& cls,
                                const Object& tl_owner,
                                TokenPosition token_pos) const {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   // We use the toplevel class as the owner of a class's metadata field because
   // a class's metadata is in scope of the library, not the class.
   AddMetadata(tl_owner,
-              String::Handle(MakeClassMetaName(cls)),
+              String::Handle(zone, MakeClassMetaName(thread, zone, cls)),
               token_pos);
 }
 
 
 void Library::AddFieldMetadata(const Field& field,
                                TokenPosition token_pos) const {
-  AddMetadata(Object::Handle(field.RawOwner()),
-              String::Handle(MakeFieldMetaName(field)),
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  AddMetadata(Object::Handle(zone, field.RawOwner()),
+              String::Handle(zone, MakeFieldMetaName(thread, zone, field)),
               token_pos);
 }
 
 
 void Library::AddFunctionMetadata(const Function& func,
                                   TokenPosition token_pos) const {
-  AddMetadata(Object::Handle(func.RawOwner()),
-              String::Handle(MakeFunctionMetaName(func)),
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  AddMetadata(Object::Handle(zone, func.RawOwner()),
+              String::Handle(zone, MakeFunctionMetaName(thread, zone, func)),
               token_pos);
 }
 
 
 void Library::AddTypeParameterMetadata(const TypeParameter& param,
                                        TokenPosition token_pos) const {
-  AddMetadata(Class::Handle(param.parameterized_class()),
-              String::Handle(MakeTypeParameterMetaName(param)),
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  AddMetadata(Class::Handle(zone, param.parameterized_class()),
+              String::Handle(zone,
+                             MakeTypeParameterMetaName(thread, zone, param)),
               token_pos);
 }
 
@@ -9355,16 +9471,18 @@
 
 
 RawString* Library::MakeMetadataName(const Object& obj) const {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   if (obj.IsClass()) {
-    return MakeClassMetaName(Class::Cast(obj));
+    return MakeClassMetaName(thread, zone, Class::Cast(obj));
   } else if (obj.IsField()) {
-    return MakeFieldMetaName(Field::Cast(obj));
+    return MakeFieldMetaName(thread, zone, Field::Cast(obj));
   } else if (obj.IsFunction()) {
-    return MakeFunctionMetaName(Function::Cast(obj));
+    return MakeFunctionMetaName(thread, zone, Function::Cast(obj));
   } else if (obj.IsLibrary()) {
     return Symbols::TopLevel().raw();
   } else if (obj.IsTypeParameter()) {
-    return MakeTypeParameterMetaName(TypeParameter::Cast(obj));
+    return MakeTypeParameterMetaName(thread, zone, TypeParameter::Cast(obj));
   }
   UNIMPLEMENTED();
   return String::null();
@@ -9414,14 +9532,13 @@
 
 static bool ShouldBePrivate(const String& name) {
   return
-      (name.Length() >= 1 &&
-       name.CharAt(0) == '_') ||
+      (name.Length() >= 1 && name.CharAt(0) == '_') ||
       (name.Length() >= 5 &&
-       (name.CharAt(4) == '_' &&
-        (name.CharAt(0) == 'g' || name.CharAt(0) == 's') &&
-        name.CharAt(1) == 'e' &&
-        name.CharAt(2) == 't' &&
-        name.CharAt(3) == ':'));
+        (name.CharAt(4) == '_' &&
+          (name.CharAt(0) == 'g' || name.CharAt(0) == 's') &&
+          name.CharAt(1) == 'e' &&
+          name.CharAt(2) == 't' &&
+          name.CharAt(3) == ':'));
 }
 
 
@@ -9456,6 +9573,8 @@
 
 class StringEqualsTraits {
  public:
+  static const char* Name() { return "StringEqualsTraits"; }
+
   static bool IsMatch(const Object& a, const Object& b) {
     return String::Cast(a).Equals(String::Cast(b));
   }
@@ -9487,6 +9606,7 @@
 // the name does not resolve to anything in this library scope.
 void Library::AddToResolvedNamesCache(const String& name,
                                       const Object& obj) const {
+  ASSERT(!Compiler::IsBackgroundCompilation());
   if (!FLAG_use_lib_cache) {
     return;
   }
@@ -9545,6 +9665,7 @@
 
 
 void Library::AddObject(const Object& obj, const String& name) const {
+  ASSERT(!Compiler::IsBackgroundCompilation());
   ASSERT(obj.IsClass() ||
          obj.IsFunction() ||
          obj.IsField() ||
@@ -9651,6 +9772,7 @@
 
 
 void Library::ReplaceObject(const Object& obj, const String& name) const {
+  ASSERT(!Compiler::IsBackgroundCompilation());
   ASSERT(obj.IsClass() || obj.IsFunction() || obj.IsField());
   ASSERT(LookupLocalObject(name) != Object::null());
 
@@ -9663,6 +9785,7 @@
 
 
 bool Library::RemoveObject(const Object& obj, const String& name) const {
+  ASSERT(!Compiler::IsBackgroundCompilation());
   Object& entry = Object::Handle();
 
   intptr_t index;
@@ -9708,6 +9831,7 @@
 
 
 void Library::AddClass(const Class& cls) const {
+  ASSERT(!Compiler::IsBackgroundCompilation());
   const String& class_name = String::Handle(cls.Name());
   AddObject(cls, class_name);
   // Link class to this library.
@@ -9715,6 +9839,7 @@
   InvalidateResolvedName(class_name);
 }
 
+
 static void AddScriptIfUnique(const GrowableObjectArray& scripts,
                               const Script& candidate) {
   if (candidate.IsNull()) {
@@ -9733,6 +9858,7 @@
   scripts.Add(candidate);
 }
 
+
 RawArray* Library::LoadedScripts() const {
   // We compute the list of loaded scripts lazily. The result is
   // cached in loaded_scripts_.
@@ -10228,9 +10354,12 @@
 
 void Library::InitNativeWrappersLibrary(Isolate* isolate) {
   static const int kNumNativeWrappersClasses = 4;
-  ASSERT(kNumNativeWrappersClasses > 0 && kNumNativeWrappersClasses < 10);
+  COMPILE_ASSERT((kNumNativeWrappersClasses > 0) &&
+                 (kNumNativeWrappersClasses < 10));
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   const String& native_flds_lib_url = Symbols::DartNativeWrappers();
-  const Library& native_flds_lib = Library::Handle(
+  const Library& native_flds_lib = Library::Handle(zone,
       Library::NewLibraryHelper(native_flds_lib_url, false));
   const String& native_flds_lib_name = Symbols::DartNativeWrappersLibName();
   native_flds_lib.SetName(native_flds_lib_name);
@@ -10242,14 +10371,14 @@
   static const int kNameLength = 25;
   ASSERT(kNameLength == (strlen(kNativeWrappersClass) + 1 + 1));
   char name_buffer[kNameLength];
-  String& cls_name = String::Handle();
+  String& cls_name = String::Handle(zone);
   for (int fld_cnt = 1; fld_cnt <= kNumNativeWrappersClasses; fld_cnt++) {
     OS::SNPrint(name_buffer,
                 kNameLength,
                 "%s%d",
                 kNativeWrappersClass,
                 fld_cnt);
-    cls_name = Symbols::New(name_buffer);
+    cls_name = Symbols::New(thread, name_buffer);
     Class::NewNativeWrapper(native_flds_lib, cls_name, fld_cnt);
   }
   native_flds_lib.SetLoaded();
@@ -10344,11 +10473,14 @@
 
 
 RawClass* Library::LookupCoreClass(const String& class_name) {
-  const Library& core_lib = Library::Handle(Library::CoreLibrary());
-  String& name = String::Handle(class_name.raw());
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  const Library& core_lib = Library::Handle(zone, Library::CoreLibrary());
+  String& name = String::Handle(zone, class_name.raw());
   if (class_name.CharAt(0) == kPrivateIdentifierStart) {
     // Private identifiers are mangled on a per library basis.
-    name = Symbols::FromConcat(name, String::Handle(core_lib.private_key()));
+    name = Symbols::FromConcat(thread,
+        name, String::Handle(zone, core_lib.private_key()));
   }
   return core_lib.LookupClass(name);
 }
@@ -10357,11 +10489,14 @@
 // Cannot handle qualified names properly as it only appends private key to
 // the end (e.g. _Alfa.foo -> _Alfa.foo@...).
 RawString* Library::PrivateName(const String& name) const {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   ASSERT(IsPrivate(name));
   // ASSERT(strchr(name, '@') == NULL);
-  String& str = String::Handle();
+  String& str = String::Handle(zone);
   str = name.raw();
-  str = Symbols::FromConcat(str, String::Handle(this->private_key()));
+  str = Symbols::FromConcat(thread,
+                            str, String::Handle(zone, this->private_key()));
   return str.raw();
 }
 
@@ -10889,15 +11024,15 @@
   if (!Field::IsGetterName(name) &&
       !Field::IsSetterName(name) &&
       (obj.IsNull() || obj.IsLibraryPrefix())) {
-    const String& getter_name = String::Handle(Field::LookupGetterSymbol(name));
-    if (!getter_name.IsNull()) {
-      obj = lib.LookupEntry(getter_name, &ignore);
+    String& accessor_name = String::Handle(zone);
+    accessor_name ^= Field::LookupGetterSymbol(name);
+    if (!accessor_name.IsNull()) {
+      obj = lib.LookupEntry(accessor_name, &ignore);
     }
     if (obj.IsNull()) {
-      const String& setter_name =
-          String::Handle(Field::LookupSetterSymbol(name));
-      if (!setter_name.IsNull()) {
-        obj = lib.LookupEntry(setter_name, &ignore);
+      accessor_name ^= Field::LookupSetterSymbol(name);
+      if (!accessor_name.IsNull()) {
+        obj = lib.LookupEntry(accessor_name, &ignore);
       }
     }
   }
@@ -10910,7 +11045,7 @@
       // LookupReExport() only returns objects that match the given name.
       // If there is no field/func/getter, try finding a setter.
       const String& setter_name =
-          String::Handle(Field::LookupSetterSymbol(name));
+          String::Handle(zone, Field::LookupSetterSymbol(name));
       if (!setter_name.IsNull()) {
         obj = lib.LookupReExport(setter_name);
       }
@@ -10994,14 +11129,16 @@
 RawFunction* Library::GetFunction(const GrowableArray<Library*>& libs,
                                   const char* class_name,
                                   const char* function_name) {
-  Function& func = Function::Handle();
-  String& class_str = String::Handle();
-  String& func_str = String::Handle();
-  Class& cls = Class::Handle();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  Function& func = Function::Handle(zone);
+  String& class_str = String::Handle(zone);
+  String& func_str = String::Handle(zone);
+  Class& cls = Class::Handle(zone);
   for (intptr_t l = 0; l < libs.length(); l++) {
     const Library& lib = *libs[l];
     if (strcmp(class_name, "::") == 0) {
-      func_str = Symbols::New(function_name);
+      func_str = Symbols::New(thread, function_name);
       func = lib.LookupFunctionAllowPrivate(func_str);
     } else {
       class_str = String::New(class_name);
@@ -12210,6 +12347,12 @@
 }
 
 
+#if defined(TAG_IC_DATA)
+void ICData::set_tag(intptr_t value) const {
+  StoreNonPointer(&raw_ptr()->tag_, value);
+}
+#endif
+
 intptr_t ICData::NumArgsTested() const {
   return NumArgsTestedBits::decode(raw_ptr()->state_bits_);
 }
@@ -12790,6 +12933,9 @@
   result.set_arguments_descriptor(arguments_descriptor);
   result.set_deopt_id(deopt_id);
   result.set_state_bits(0);
+#if defined(TAG_IC_DATA)
+  result.set_tag(-1);
+#endif
   result.SetNumArgsTested(num_args_tested);
   return result.raw();
 }
@@ -12807,6 +12953,9 @@
   }
   result.set_deopt_id(Thread::kNoDeoptId);
   result.set_state_bits(0);
+#if defined(TAG_IC_DATA)
+  result.set_tag(-1);
+#endif
   return result.raw();
 }
 
@@ -13590,16 +13739,20 @@
   const Object& obj = Object::Handle(owner());
   if (obj.IsNull()) {
     // Regular stub.
+    Thread* thread = Thread::Current();
+    Zone* zone = thread->zone();
     const char* name = StubCode::NameOfStub(EntryPoint());
     ASSERT(name != NULL);
-    const String& stub_name = String::Handle(Symbols::New(name));
-    return Symbols::FromConcat(Symbols::StubPrefix(), stub_name);
+    const String& stub_name = String::Handle(zone, String::New(name));
+    return Symbols::FromConcat(thread, Symbols::StubPrefix(), stub_name);
   } else if (obj.IsClass()) {
     // Allocation stub.
+    Thread* thread = Thread::Current();
+    Zone* zone = thread->zone();
     const Class& cls = Class::Cast(obj);
-    String& cls_name = String::Handle(cls.ScrubbedName());
+    String& cls_name = String::Handle(zone, cls.ScrubbedName());
     ASSERT(!cls_name.IsNull());
-    return Symbols::FromConcat(Symbols::AllocationStubFor(), cls_name);
+    return Symbols::FromConcat(thread, Symbols::AllocationStubFor(), cls_name);
   } else {
     ASSERT(obj.IsFunction());
     // Dart function.
@@ -14635,12 +14788,13 @@
 #endif  // DEBUG
 
 
-bool Instance::CheckAndCanonicalizeFields(const char** error_str) const {
-  const Class& cls = Class::Handle(this->clazz());
+bool Instance::CheckAndCanonicalizeFields(Zone* zone,
+                                          const char** error_str) const {
+  const Class& cls = Class::Handle(zone, this->clazz());
   if (cls.id() >= kNumPredefinedCids) {
     // Iterate over all fields, canonicalize numbers and strings, expect all
     // other instances to be canonical otherwise report error (return false).
-    Object& obj = Object::Handle();
+    Object& obj = Object::Handle(zone);
     intptr_t end_field_offset = cls.instance_size() - kWordSize;
     for (intptr_t field_offset = 0;
          field_offset <= end_field_offset;
@@ -14653,8 +14807,7 @@
           this->SetFieldAtOffset(field_offset, obj);
         } else {
           ASSERT(error_str != NULL);
-          char* chars = OS::SCreate(Thread::Current()->zone(),
-              "field: %s\n", obj.ToCString());
+          char* chars = OS::SCreate(zone, "field: %s\n", obj.ToCString());
           *error_str = chars;
           return false;
         }
@@ -14677,11 +14830,11 @@
   if (this->IsCanonical()) {
     return this->raw();
   }
-  if (!CheckAndCanonicalizeFields(error_str)) {
-    return Instance::null();
-  }
   Thread* thread = Thread::Current();
   Zone* zone = thread->zone();
+  if (!CheckAndCanonicalizeFields(zone, error_str)) {
+    return Instance::null();
+  }
   Isolate* isolate = thread->isolate();
   Instance& result = Instance::Handle(zone);
   const Class& cls = Class::Handle(zone, this->clazz());
@@ -14694,38 +14847,21 @@
     SafepointMutexLocker ml(isolate->constant_canonicalization_mutex());
     // Retry lookup.
     {
-      Instance& temp_result = Instance::Handle(zone,
-          cls.LookupCanonicalInstance(zone, *this, &index));
-      if (!temp_result.IsNull()) {
-        return temp_result.raw();
+      result ^= cls.LookupCanonicalInstance(zone, *this, &index);
+      if (!result.IsNull()) {
+        return result.raw();
       }
     }
 
     // The value needs to be added to the list. Grow the list if
     // it is full.
     result ^= this->raw();
-    if (result.IsNew() ||
-        (result.InVMHeap() && (isolate != Dart::vm_isolate()))) {
-      /**
-       * When a snapshot is generated on a 64 bit architecture and then read
-       * into a 32 bit architecture, values which are Smi on the 64 bit
-       * architecture could potentially be converted to Mint objects, however
-       * since Smi values do not have any notion of canonical bits we lose
-       * that information when the object becomes a Mint.
-       * Some of these values could be literal values and end up in the
-       * VM isolate heap. Later when these values are referenced in a
-       * constant list we try to ensure that all the objects in the list
-       * are canonical and try to canonicalize them. When these Mint objects
-       * are encountered they do not have the canonical bit set and
-       * canonicalizing them won't work as the VM heap is read only now.
-       * In these cases we clone the object into the isolate and then
-       * canonicalize it.
-       */
+    ASSERT((isolate == Dart::vm_isolate()) || !result.InVMHeap());
+    if (result.IsNew()) {
       // Create a canonical object in old space.
       result ^= Object::Clone(result, Heap::kOld);
     }
     ASSERT(result.IsOld());
-
     result.SetCanonical();
     cls.InsertCanonicalConstant(index, result);
     return result.raw();
@@ -14937,7 +15073,8 @@
     return Integer::Cast(*this).Equals(other);
   }
   if (IsDouble() && other.IsDouble()) {
-    return Double::Cast(*this).CanonicalizeEquals(other);
+    double other_value = Double::Cast(other).value();
+    return Double::Cast(*this).BitwiseEqualsToDouble(other_value);
   }
   return false;
 }
@@ -15358,9 +15495,10 @@
 
 RawString* AbstractType::BuildName(NameVisibility name_visibility) const {
   ASSERT(name_visibility != kScrubbedName);
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   if (IsBoundedType()) {
-    const AbstractType& type = AbstractType::Handle(
+    const AbstractType& type = AbstractType::Handle(zone,
         BoundedType::Cast(*this).type());
     if (name_visibility == kUserVisibleName) {
       return type.BuildName(kUserVisibleName);
@@ -15370,8 +15508,8 @@
     pieces.Add(type_name);
     pieces.Add(Symbols::SpaceExtendsSpace());
     // Build the bound name without causing divergence.
-    const AbstractType& bound = AbstractType::Handle(
-        zone, BoundedType::Cast(*this).bound());
+    const AbstractType& bound = AbstractType::Handle(zone,
+        BoundedType::Cast(*this).bound());
     String& bound_name = String::Handle(zone);
     if (bound.IsTypeParameter()) {
       bound_name = TypeParameter::Cast(bound).name();
@@ -15386,7 +15524,7 @@
     } else {
       pieces.Add(Symbols::OptimizedOut());
     }
-    return Symbols::FromConcatAll(pieces);
+    return Symbols::FromConcatAll(thread, pieces);
   }
   if (IsTypeParameter()) {
     return TypeParameter::Cast(*this).name();
@@ -15401,8 +15539,8 @@
   Class& cls = Class::Handle(zone);
   if (IsFunctionType()) {
     cls = type_class();
-    const Function& signature_function = Function::Handle(
-        zone, Type::Cast(*this).signature());
+    const Function& signature_function = Function::Handle(zone,
+        Type::Cast(*this).signature());
     if (!cls.IsTypedefClass() ||
         (cls.signature_function() != signature_function.raw())) {
       if (!IsFinalized() || IsBeingFinalized() || IsMalformed()) {
@@ -15477,7 +15615,7 @@
   // The name is only used for type checking and debugging purposes.
   // Unless profiling data shows otherwise, it is not worth caching the name in
   // the type.
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
@@ -15495,14 +15633,15 @@
 //                            MyClass is from my_uri
 //                            int is from dart:core
 RawString* AbstractType::UserVisibleNameWithURI() const {
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   GrowableHandlePtrArray<const String> pieces(zone, 3);
   pieces.Add(String::Handle(zone, BuildName(kUserVisibleName)));
   if (!IsDynamicType() && !IsVoidType()) {
     pieces.Add(Symbols::SpaceWhereNewLine());
     pieces.Add(String::Handle(zone, EnumerateURIs()));
   }
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
@@ -16475,7 +16614,8 @@
   if (IsDynamicType() || IsVoidType()) {
     return Symbols::Empty().raw();
   }
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   GrowableHandlePtrArray<const String> pieces(zone, 6);
   if (IsFunctionType()) {
     // The scope class and type arguments do not appear explicitly in the user
@@ -16503,7 +16643,7 @@
     const TypeArguments& type_args = TypeArguments::Handle(zone, arguments());
     pieces.Add(String::Handle(zone, type_args.EnumerateURIs()));
   }
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
@@ -16719,9 +16859,10 @@
 
 
 RawString* TypeRef::EnumerateURIs() const {
-  const AbstractType& ref_type = AbstractType::Handle(type());
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  const AbstractType& ref_type = AbstractType::Handle(zone, type());
   ASSERT(!ref_type.IsDynamicType() && !ref_type.IsVoidType());
-  Zone* zone = Thread::Current()->zone();
   GrowableHandlePtrArray<const String> pieces(zone, 6);
   const Class& cls = Class::Handle(zone, ref_type.type_class());
   pieces.Add(Symbols::TwoSpaces());
@@ -16732,7 +16873,7 @@
   const Library& library = Library::Handle(zone, cls.library());
   pieces.Add(String::Handle(zone, library.url()));
   pieces.Add(Symbols::NewLine());
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
@@ -16954,7 +17095,8 @@
 
 
 RawString* TypeParameter::EnumerateURIs() const {
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   GrowableHandlePtrArray<const String> pieces(zone, 4);
   pieces.Add(Symbols::TwoSpaces());
   pieces.Add(String::Handle(zone, name()));
@@ -16965,7 +17107,7 @@
   const Library& library = Library::Handle(zone, cls.library());
   pieces.Add(String::Handle(zone, library.url()));
   pieces.Add(Symbols::NewLine());
-  return Symbols::FromConcatAll(pieces);
+  return Symbols::FromConcatAll(thread, pieces);
 }
 
 
@@ -17341,6 +17483,61 @@
 }
 
 
+RawInstance* Number::CheckAndCanonicalize(const char** error_str) const {
+  intptr_t cid = GetClassId();
+  switch (cid) {
+    case kSmiCid:
+      return reinterpret_cast<RawSmi*>(raw_value());
+    case kMintCid:
+      return Mint::NewCanonical(Mint::Cast(*this).value());
+    case kDoubleCid:
+      return Double::NewCanonical(Double::Cast(*this).value());
+    case kBigintCid: {
+      Thread* thread = Thread::Current();
+      Zone* zone = thread->zone();
+      Isolate* isolate = thread->isolate();
+      if (!CheckAndCanonicalizeFields(zone, error_str)) {
+        return Instance::null();
+      }
+      Bigint& result = Bigint::Handle(zone);
+      const Class& cls = Class::Handle(zone, this->clazz());
+      intptr_t index = 0;
+      result ^= cls.LookupCanonicalBigint(zone, Bigint::Cast(*this), &index);
+      if (!result.IsNull()) {
+        return result.raw();
+      }
+      {
+        SafepointMutexLocker ml(isolate->constant_canonicalization_mutex());
+        // Retry lookup.
+        {
+          result ^= cls.LookupCanonicalBigint(
+              zone, Bigint::Cast(*this), &index);
+          if (!result.IsNull()) {
+            return result.raw();
+          }
+        }
+
+        // The value needs to be added to the list. Grow the list if
+        // it is full.
+        result ^= this->raw();
+        ASSERT((isolate == Dart::vm_isolate()) || !result.InVMHeap());
+        if (result.IsNew()) {
+          // Create a canonical object in old space.
+          result ^= Object::Clone(result, Heap::kOld);
+        }
+        ASSERT(result.IsOld());
+        result.SetCanonical();
+        cls.InsertCanonicalNumber(zone, index, result);
+        return result.raw();
+      }
+    }
+    default:
+      UNREACHABLE();
+  }
+  return Instance::null();
+}
+
+
 const char* Number::ToCString() const {
   // Number is an interface. No instances of Number should exist.
   UNREACHABLE();
@@ -17764,17 +17961,16 @@
     SafepointMutexLocker ml(isolate->constant_canonicalization_mutex());
     // Retry lookup.
     {
-      const Mint& result =
-          Mint::Handle(zone, cls.LookupCanonicalMint(zone, value, &index));
-      if (!result.IsNull()) {
-        return result.raw();
+      canonical_value ^= cls.LookupCanonicalMint(zone, value, &index);
+      if (!canonical_value.IsNull()) {
+        return canonical_value.raw();
       }
     }
     canonical_value = Mint::New(value, Heap::kOld);
     canonical_value.SetCanonical();
     // The value needs to be added to the constants list. Grow the list if
     // it is full.
-    cls.InsertCanonicalConstant(index, canonical_value);
+    cls.InsertCanonicalNumber(zone, index, canonical_value);
     return canonical_value.raw();
   }
 }
@@ -17917,17 +18113,16 @@
     SafepointMutexLocker ml(isolate->constant_canonicalization_mutex());
     // Retry lookup.
     {
-      const Double& result =
-          Double::Handle(zone, cls.LookupCanonicalDouble(zone, value, &index));
-      if (!result.IsNull()) {
-        return result.raw();
+      canonical_value ^= cls.LookupCanonicalDouble(zone, value, &index);
+      if (!canonical_value.IsNull()) {
+        return canonical_value.raw();
       }
     }
     canonical_value = Double::New(value, Heap::kOld);
     canonical_value.SetCanonical();
     // The value needs to be added to the constants list. Grow the list if
     // it is full.
-    cls.InsertCanonicalConstant(index, canonical_value);
+    cls.InsertCanonicalNumber(zone, index, canonical_value);
     return canonical_value.raw();
   }
 }
@@ -18054,13 +18249,14 @@
 }
 
 
-bool Bigint::CheckAndCanonicalizeFields(const char** error_str) const {
+bool Bigint::CheckAndCanonicalizeFields(Zone* zone,
+                                        const char** error_str) const {
   // Bool field neg should always be canonical.
-  ASSERT(Bool::Handle(neg()).IsCanonical());
+  ASSERT(Bool::Handle(zone, neg()).IsCanonical());
   // Smi field used is canonical by definition.
   if (Used() > 0) {
     // Canonicalize TypedData field digits.
-    TypedData& digits_ = TypedData::Handle(digits());
+    TypedData& digits_ = TypedData::Handle(zone, digits());
     digits_ ^= digits_.CheckAndCanonicalize(NULL);
     ASSERT(!digits_.IsNull());
     set_digits(digits_);
@@ -18218,8 +18414,8 @@
   const Class& cls =
       Class::Handle(zone, isolate->object_store()->bigint_class());
   intptr_t index = 0;
-  const Bigint& canonical_value =
-      Bigint::Handle(zone, cls.LookupCanonicalBigint(zone, value, &index));
+  Bigint& canonical_value = Bigint::Handle(zone);
+  canonical_value ^= cls.LookupCanonicalBigint(zone, value, &index);
   if (!canonical_value.IsNull()) {
     return canonical_value.raw();
   }
@@ -18227,16 +18423,15 @@
     SafepointMutexLocker ml(isolate->constant_canonicalization_mutex());
     // Retry lookup.
     {
-      const Bigint& result =
-          Bigint::Handle(zone, cls.LookupCanonicalBigint(zone, value, &index));
-      if (!result.IsNull()) {
-        return result.raw();
+      canonical_value ^= cls.LookupCanonicalBigint(zone, value, &index);
+      if (!canonical_value.IsNull()) {
+        return canonical_value.raw();
       }
     }
     value.SetCanonical();
     // The value needs to be added to the constants list. Grow the list if
     // it is full.
-    cls.InsertCanonicalConstant(index, value);
+    cls.InsertCanonicalNumber(zone, index, value);
     return value.raw();
   }
 }
@@ -19038,7 +19233,7 @@
   if (IsCanonical()) {
     return this->raw();
   }
-  return Symbols::New(*this);
+  return Symbols::New(Thread::Current(), *this);
 }
 
 
@@ -19601,6 +19796,7 @@
                                 intptr_t length,
                                 void* peer,
                                 Dart_PeerFinalizer cback) const {
+  ASSERT(FLAG_support_externalizable_strings);
   String& result = String::Handle();
   void* external_data;
   Dart_WeakPersistentHandleFinalizer finalizer;
@@ -20475,14 +20671,7 @@
     return false;
   }
 
-  // Both arrays must have the same type arguments.
-  const TypeArguments& type_args = TypeArguments::Handle(GetTypeArguments());
-  const TypeArguments& other_type_args = TypeArguments::Handle(
-      other.GetTypeArguments());
-  if (!type_args.Equals(other_type_args)) {
-    return false;
-  }
-
+  // First check if both arrays have the same length and elements.
   const Array& other_arr = Array::Cast(other);
 
   intptr_t len = this->Length();
@@ -20495,6 +20684,14 @@
       return false;
     }
   }
+
+  // Now check if both arrays have the same type arguments.
+  const TypeArguments& type_args = TypeArguments::Handle(GetTypeArguments());
+  const TypeArguments& other_type_args = TypeArguments::Handle(
+      other.GetTypeArguments());
+  if (!type_args.Equals(other_type_args)) {
+    return false;
+  }
   return true;
 }
 
@@ -20640,8 +20837,9 @@
 }
 
 
-bool Array::CheckAndCanonicalizeFields(const char** error_str) const {
-  Object& obj = Object::Handle();
+bool Array::CheckAndCanonicalizeFields(Zone* zone,
+                                       const char** error_str) const {
+  Object& obj = Object::Handle(zone);
   // Iterate over all elements, canonicalize numbers and strings, expect all
   // other instances to be canonical otherwise report error (return false).
   for (intptr_t i = 0; i < Length(); i++) {
@@ -20711,44 +20909,6 @@
 }
 
 
-bool GrowableObjectArray::CanonicalizeEquals(const Instance& other) const {
-  // If both handles point to the same raw instance they are equal.
-  if (this->raw() == other.raw()) {
-    return true;
-  }
-
-  // Other instance must be non null and a GrowableObjectArray.
-  if (!other.IsGrowableObjectArray() || other.IsNull()) {
-    return false;
-  }
-
-  const GrowableObjectArray& other_arr = GrowableObjectArray::Cast(other);
-
-  // The capacity and length of both objects must be equal.
-  if (Capacity() != other_arr.Capacity() || Length() != other_arr.Length()) {
-    return false;
-  }
-
-  // Both arrays must have the same type arguments.
-  const TypeArguments& type_args = TypeArguments::Handle(GetTypeArguments());
-  const TypeArguments& other_type_args = TypeArguments::Handle(
-      other.GetTypeArguments());
-  if (!type_args.Equals(other_type_args)) {
-    return false;
-  }
-
-  // The data part in both arrays must be identical.
-  const Array& contents = Array::Handle(data());
-  const Array& other_contents = Array::Handle(other_arr.data());
-  for (intptr_t i = 0; i < Length(); i++) {
-    if (contents.At(i) != other_contents.At(i)) {
-      return false;
-    }
-  }
-  return true;
-}
-
-
 RawGrowableObjectArray* GrowableObjectArray::New(intptr_t capacity,
                                                  Heap::Space space) {
   const Array& data = Array::Handle(Array::New(capacity, space));
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 9a946b0..6a2008f 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1195,6 +1195,9 @@
   RawField* LookupInstanceField(const String& name) const;
   RawField* LookupStaticField(const String& name) const;
   RawField* LookupField(const String& name) const;
+  RawField* LookupFieldAllowPrivate(const String& name) const;
+  RawField* LookupInstanceFieldAllowPrivate(const String& name) const;
+  RawField* LookupStaticFieldAllowPrivate(const String& name) const;
 
   RawLibraryPrefix* LookupLibraryPrefix(const String& name) const;
 
@@ -1214,6 +1217,9 @@
                                        intptr_t* index) const;
 
   void InsertCanonicalConstant(intptr_t index, const Instance& constant) const;
+  void InsertCanonicalNumber(Zone* zone,
+                             intptr_t index,
+                             const Number& constant) const;
 
   intptr_t FindCanonicalTypeIndex(const AbstractType& needle) const;
   RawAbstractType* CanonicalTypeFromIndex(intptr_t idx) const;
@@ -2075,6 +2081,11 @@
     kCachedICDataArrayCount = 4
   };
 
+#if defined(TAG_IC_DATA)
+  void set_tag(intptr_t value) const;
+  intptr_t tag() const { return raw_ptr()->tag_; }
+#endif
+
  private:
   static RawICData* New();
 
@@ -2727,7 +2738,6 @@
   }
   bool was_compiled() const { return raw_ptr()->was_compiled_ == 1; }
 
-
   // static: Considered during class-side or top-level resolution rather than
   //         instance-side resolution.
   // const: Valid target of a const constructor call.
@@ -2842,6 +2852,8 @@
   RawString* QualifiedName(NameVisibility name_visibility) const;
 
   void BuildSignatureParameters(
+      Thread* thread,
+      Zone* zone,
       bool instantiate,
       NameVisibility name_visibility,
       const TypeArguments& instantiator,
@@ -3087,9 +3099,7 @@
     set_kind_bits(UnboxingCandidateBit::update(b, raw_ptr()->kind_bits_));
   }
 
-  static bool IsExternalizableCid(intptr_t cid) {
-    return (cid == kOneByteStringCid) || (cid == kTwoByteStringCid);
-  }
+  static bool IsExternalizableCid(intptr_t cid);
 
   enum {
     kUnknownLengthOffset = -1,
@@ -5152,7 +5162,8 @@
   virtual RawInstance* CheckAndCanonicalize(const char** error_str) const;
 
   // Returns true if all fields are OK for canonicalization.
-  virtual bool CheckAndCanonicalizeFields(const char** error_str) const;
+  virtual bool CheckAndCanonicalizeFields(Zone* zone,
+                                          const char** error_str) const;
 
   RawObject* GetField(const Field& field) const {
     return *FieldAddr(field);
@@ -5939,6 +5950,9 @@
   // TODO(iposva): Add more useful Number methods.
   RawString* ToString(Heap::Space space) const;
 
+  // Numbers are canonicalized differently from other instances/strings.
+  virtual RawInstance* CheckAndCanonicalize(const char** error_str) const;
+
  private:
   OBJECT_IMPLEMENTATION(Number, Instance);
 
@@ -6012,10 +6026,6 @@
   virtual bool Equals(const Instance& other) const;
   virtual bool IsZero() const { return Value() == 0; }
   virtual bool IsNegative() const { return Value() < 0; }
-  // Smi values are implicitly canonicalized.
-  virtual RawInstance* CheckAndCanonicalize(const char** error_str) const {
-    return reinterpret_cast<RawSmi*>(raw_value());
-  }
 
   virtual double AsDoubleValue() const;
   virtual int64_t AsInt64Value() const;
@@ -6135,6 +6145,7 @@
 
   MINT_OBJECT_IMPLEMENTATION(Mint, Integer, Integer);
   friend class Class;
+  friend class Number;
 };
 
 
@@ -6151,7 +6162,8 @@
 
   virtual int CompareWith(const Integer& other) const;
 
-  virtual bool CheckAndCanonicalizeFields(const char** error_str) const;
+  virtual bool CheckAndCanonicalizeFields(Zone* zone,
+                                          const char** error_str) const;
 
   virtual bool FitsIntoSmi() const;
   bool FitsIntoInt64() const;
@@ -6266,6 +6278,7 @@
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Double, Number);
   friend class Class;
+  friend class Number;
 };
 
 
@@ -6397,6 +6410,7 @@
 
   bool StartsWith(const String& other) const;
 
+  // Strings are canonicalized using the symbol table.
   virtual RawInstance* CheckAndCanonicalize(const char** error_str) const;
 
   bool IsSymbol() const { return raw()->IsCanonical(); }
@@ -7100,7 +7114,8 @@
   }
 
   // Returns true if all elements are OK for canonicalization.
-  virtual bool CheckAndCanonicalizeFields(const char** error_str) const;
+  virtual bool CheckAndCanonicalizeFields(Zone* zone,
+                                          const char** error_str) const;
 
   // Make the array immutable to Dart code by switching the class pointer
   // to ImmutableArray.
@@ -7246,8 +7261,13 @@
     StorePointer(&raw_ptr()->type_arguments_, value.raw());
   }
 
-  virtual bool CanonicalizeEquals(const Instance& other) const;
+  // We don't expect a growable object array to be canonicalized.
+  virtual bool CanonicalizeEquals(const Instance& other) const {
+    UNREACHABLE();
+    return false;
+  }
 
+  // We don't expect a growable object array to be canonicalized.
   virtual RawInstance* CheckAndCanonicalize(const char** error_str) const {
     UNREACHABLE();
     return Instance::null();
@@ -7937,7 +7957,8 @@
   }
 
   // Returns true if all elements are OK for canonicalization.
-  virtual bool CheckAndCanonicalizeFields(const char** error_str) const {
+  virtual bool CheckAndCanonicalizeFields(Zone* zone,
+                                          const char** error_str) const {
     // None of the fields of a closure are instances.
     return true;
   }
diff --git a/runtime/vm/object_id_ring_test.cc b/runtime/vm/object_id_ring_test.cc
index c85d44c..dd64aa5 100644
--- a/runtime/vm/object_id_ring_test.cc
+++ b/runtime/vm/object_id_ring_test.cc
@@ -37,7 +37,7 @@
   }
 
   static RawObject* MakeString(const char* s) {
-    return Symbols::New(s);
+    return Symbols::New(Thread::Current(), s);
   }
 
   static void ExpectString(RawObject* obj, const char* s) {
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index b1243e9..62718be 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -37,7 +37,7 @@
 
 VM_TEST_CASE(Class) {
   // Allocate the class first.
-  const String& class_name = String::Handle(Symbols::New("MyClass"));
+  const String& class_name = String::Handle(Symbols::New(thread, "MyClass"));
   const Script& script = Script::Handle();
   const Class& cls = Class::Handle(CreateDummyClass(class_name, script));
 
@@ -49,10 +49,10 @@
   const Array& interfaces = Array::Handle(Array::New(2));
   Class& interface = Class::Handle();
   String& interface_name = String::Handle();
-  interface_name = Symbols::New("Harley");
+  interface_name = Symbols::New(thread, "Harley");
   interface = CreateDummyClass(interface_name, script);
   interfaces.SetAt(0, Type::Handle(Type::NewNonParameterizedType(interface)));
-  interface_name = Symbols::New("Norton");
+  interface_name = Symbols::New(thread, "Norton");
   interface = CreateDummyClass(interface_name, script);
   interfaces.SetAt(1, Type::Handle(Type::NewNonParameterizedType(interface)));
   cls.set_interfaces(interfaces);
@@ -65,12 +65,12 @@
   const Array& functions = Array::Handle(Array::New(6));
   Function& function = Function::Handle();
   String& function_name = String::Handle();
-  function_name = Symbols::New("foo");
+  function_name = Symbols::New(thread, "foo");
   function = Function::New(
       function_name, RawFunction::kRegularFunction,
       false, false, false, false, false, cls, TokenPosition::kMinSource);
   functions.SetAt(0, function);
-  function_name = Symbols::New("bar");
+  function_name = Symbols::New(thread, "bar");
   function = Function::New(
       function_name, RawFunction::kRegularFunction,
       false, false, false, false, false, cls, TokenPosition::kMinSource);
@@ -83,24 +83,24 @@
                                     kAreOptionalPositional);
   functions.SetAt(1, function);
 
-  function_name = Symbols::New("baz");
+  function_name = Symbols::New(thread, "baz");
   function = Function::New(
       function_name, RawFunction::kRegularFunction,
       false, false, false, false, false, cls, TokenPosition::kMinSource);
   functions.SetAt(2, function);
 
-  function_name = Symbols::New("Foo");
+  function_name = Symbols::New(thread, "Foo");
   function = Function::New(
       function_name, RawFunction::kRegularFunction,
       true, false, false, false, false, cls, TokenPosition::kMinSource);
 
   functions.SetAt(3, function);
-  function_name = Symbols::New("Bar");
+  function_name = Symbols::New(thread, "Bar");
   function = Function::New(
       function_name, RawFunction::kRegularFunction,
       true, false, false, false, false, cls, TokenPosition::kMinSource);
   functions.SetAt(4, function);
-  function_name = Symbols::New("BaZ");
+  function_name = Symbols::New(thread, "BaZ");
   function = Function::New(
       function_name, RawFunction::kRegularFunction,
       true, false, false, false, false, cls, TokenPosition::kMinSource);
@@ -258,7 +258,7 @@
 
 VM_TEST_CASE(InstanceClass) {
   // Allocate the class first.
-  String& class_name = String::Handle(Symbols::New("EmptyClass"));
+  String& class_name = String::Handle(Symbols::New(thread, "EmptyClass"));
   Script& script = Script::Handle();
   const Class& empty_class =
       Class::Handle(CreateDummyClass(class_name, script));
@@ -274,7 +274,7 @@
   Instance& instance = Instance::Handle(Instance::New(empty_class));
   EXPECT_EQ(empty_class.raw(), instance.clazz());
 
-  class_name = Symbols::New("OneFieldClass");
+  class_name = Symbols::New(thread, "OneFieldClass");
   const Class& one_field_class =
       Class::Handle(CreateDummyClass(class_name, script));
 
@@ -285,7 +285,7 @@
   ClassFinalizer::FinalizeTypesInClass(one_field_class);
 
   const Array& one_fields = Array::Handle(Array::New(1));
-  const String& field_name = String::Handle(Symbols::New("the_field"));
+  const String& field_name = String::Handle(Symbols::New(thread, "the_field"));
   const Field& field = Field::Handle(
       Field::New(field_name, false, false, false, true, one_field_class,
                  Object::dynamic_type(), TokenPosition::kMinSource));
@@ -1826,84 +1826,85 @@
 
 
 VM_TEST_CASE(Symbol) {
-  const String& one = String::Handle(Symbols::New("Eins"));
+  const String& one = String::Handle(Symbols::New(thread, "Eins"));
   EXPECT(one.IsSymbol());
-  const String& two = String::Handle(Symbols::New("Zwei"));
-  const String& three = String::Handle(Symbols::New("Drei"));
-  const String& four = String::Handle(Symbols::New("Vier"));
-  const String& five = String::Handle(Symbols::New("Fuenf"));
-  const String& six = String::Handle(Symbols::New("Sechs"));
-  const String& seven = String::Handle(Symbols::New("Sieben"));
-  const String& eight = String::Handle(Symbols::New("Acht"));
-  const String& nine = String::Handle(Symbols::New("Neun"));
-  const String& ten = String::Handle(Symbols::New("Zehn"));
-  String& eins = String::Handle(Symbols::New("Eins"));
+  const String& two = String::Handle(Symbols::New(thread, "Zwei"));
+  const String& three = String::Handle(Symbols::New(thread, "Drei"));
+  const String& four = String::Handle(Symbols::New(thread, "Vier"));
+  const String& five = String::Handle(Symbols::New(thread, "Fuenf"));
+  const String& six = String::Handle(Symbols::New(thread, "Sechs"));
+  const String& seven = String::Handle(Symbols::New(thread, "Sieben"));
+  const String& eight = String::Handle(Symbols::New(thread, "Acht"));
+  const String& nine = String::Handle(Symbols::New(thread, "Neun"));
+  const String& ten = String::Handle(Symbols::New(thread, "Zehn"));
+  String& eins = String::Handle(Symbols::New(thread, "Eins"));
   EXPECT_EQ(one.raw(), eins.raw());
   EXPECT(one.raw() != two.raw());
   EXPECT(two.Equals(String::Handle(String::New("Zwei"))));
-  EXPECT_EQ(two.raw(), Symbols::New("Zwei"));
-  EXPECT_EQ(three.raw(), Symbols::New("Drei"));
-  EXPECT_EQ(four.raw(), Symbols::New("Vier"));
-  EXPECT_EQ(five.raw(), Symbols::New("Fuenf"));
-  EXPECT_EQ(six.raw(), Symbols::New("Sechs"));
-  EXPECT_EQ(seven.raw(), Symbols::New("Sieben"));
-  EXPECT_EQ(eight.raw(), Symbols::New("Acht"));
-  EXPECT_EQ(nine.raw(), Symbols::New("Neun"));
-  EXPECT_EQ(ten.raw(), Symbols::New("Zehn"));
+  EXPECT_EQ(two.raw(), Symbols::New(thread, "Zwei"));
+  EXPECT_EQ(three.raw(), Symbols::New(thread, "Drei"));
+  EXPECT_EQ(four.raw(), Symbols::New(thread, "Vier"));
+  EXPECT_EQ(five.raw(), Symbols::New(thread, "Fuenf"));
+  EXPECT_EQ(six.raw(), Symbols::New(thread, "Sechs"));
+  EXPECT_EQ(seven.raw(), Symbols::New(thread, "Sieben"));
+  EXPECT_EQ(eight.raw(), Symbols::New(thread, "Acht"));
+  EXPECT_EQ(nine.raw(), Symbols::New(thread, "Neun"));
+  EXPECT_EQ(ten.raw(), Symbols::New(thread, "Zehn"));
 
   // Make sure to cause symbol table overflow.
   for (int i = 0; i < 1024; i++) {
     char buf[256];
     OS::SNPrint(buf, sizeof(buf), "%d", i);
-    Symbols::New(buf);
+    Symbols::New(thread, buf);
   }
-  eins = Symbols::New("Eins");
+  eins = Symbols::New(thread, "Eins");
   EXPECT_EQ(one.raw(), eins.raw());
-  EXPECT_EQ(two.raw(), Symbols::New("Zwei"));
-  EXPECT_EQ(three.raw(), Symbols::New("Drei"));
-  EXPECT_EQ(four.raw(), Symbols::New("Vier"));
-  EXPECT_EQ(five.raw(), Symbols::New("Fuenf"));
-  EXPECT_EQ(six.raw(), Symbols::New("Sechs"));
-  EXPECT_EQ(seven.raw(), Symbols::New("Sieben"));
-  EXPECT_EQ(eight.raw(), Symbols::New("Acht"));
-  EXPECT_EQ(nine.raw(), Symbols::New("Neun"));
-  EXPECT_EQ(ten.raw(), Symbols::New("Zehn"));
+  EXPECT_EQ(two.raw(), Symbols::New(thread, "Zwei"));
+  EXPECT_EQ(three.raw(), Symbols::New(thread, "Drei"));
+  EXPECT_EQ(four.raw(), Symbols::New(thread, "Vier"));
+  EXPECT_EQ(five.raw(), Symbols::New(thread, "Fuenf"));
+  EXPECT_EQ(six.raw(), Symbols::New(thread, "Sechs"));
+  EXPECT_EQ(seven.raw(), Symbols::New(thread, "Sieben"));
+  EXPECT_EQ(eight.raw(), Symbols::New(thread, "Acht"));
+  EXPECT_EQ(nine.raw(), Symbols::New(thread, "Neun"));
+  EXPECT_EQ(ten.raw(), Symbols::New(thread, "Zehn"));
 
   // Symbols from Strings.
   eins = String::New("Eins");
   EXPECT(!eins.IsSymbol());
-  String& ein_symbol = String::Handle(Symbols::New(eins));
+  String& ein_symbol = String::Handle(Symbols::New(thread, eins));
   EXPECT_EQ(one.raw(), ein_symbol.raw());
   EXPECT(one.raw() != eins.raw());
 
   uint16_t char16[] = { 'E', 'l', 'f' };
-  String& elf1 = String::Handle(Symbols::FromUTF16(char16, 3));
+  String& elf1 = String::Handle(Symbols::FromUTF16(thread, char16, 3));
   int32_t char32[] = { 'E', 'l', 'f' };
-  String& elf2 = String::Handle(Symbols::FromUTF32(char32, 3));
+  String& elf2 = String::Handle(Symbols::FromUTF32(thread, char32, 3));
   EXPECT(elf1.IsSymbol());
   EXPECT(elf2.IsSymbol());
-  EXPECT_EQ(elf1.raw(), Symbols::New("Elf"));
-  EXPECT_EQ(elf2.raw(), Symbols::New("Elf"));
+  EXPECT_EQ(elf1.raw(), Symbols::New(thread, "Elf"));
+  EXPECT_EQ(elf2.raw(), Symbols::New(thread, "Elf"));
 }
 
 
 VM_TEST_CASE(SymbolUnicode) {
   uint16_t monkey_utf16[] = { 0xd83d, 0xdc35 };  // Unicode Monkey Face.
-  String& monkey = String::Handle(Symbols::FromUTF16(monkey_utf16, 2));
+  String& monkey = String::Handle(Symbols::FromUTF16(thread, monkey_utf16, 2));
   EXPECT(monkey.IsSymbol());
   const char monkey_utf8[] = {'\xf0', '\x9f', '\x90', '\xb5', 0};
-  EXPECT_EQ(monkey.raw(), Symbols::New(monkey_utf8));
+  EXPECT_EQ(monkey.raw(), Symbols::New(thread, monkey_utf8));
 
   int32_t kMonkeyFace = 0x1f435;
-  String& monkey2 = String::Handle(Symbols::FromCharCode(kMonkeyFace));
+  String& monkey2 = String::Handle(Symbols::FromCharCode(thread, kMonkeyFace));
   EXPECT_EQ(monkey.raw(), monkey2.raw());
 
   // Unicode cat face with tears of joy.
   int32_t kCatFaceWithTearsOfJoy = 0x1f639;
-  String& cat = String::Handle(Symbols::FromCharCode(kCatFaceWithTearsOfJoy));
+  String& cat = String::Handle(Symbols::FromCharCode(thread,
+                                                     kCatFaceWithTearsOfJoy));
 
   uint16_t cat_utf16[] = { 0xd83d, 0xde39 };
-  String& cat2 = String::Handle(Symbols::FromUTF16(cat_utf16, 2));
+  String& cat2 = String::Handle(Symbols::FromUTF16(thread, cat_utf16, 2));
   EXPECT(cat2.IsSymbol());
   EXPECT_EQ(cat2.raw(), cat.raw());
 }
@@ -2541,17 +2542,17 @@
       new LocalScope(parent_scope, local_scope_function_level, 0);
 
   const Type& dynamic_type = Type::ZoneHandle(Type::DynamicType());
-  const String& a = String::ZoneHandle(Symbols::New("a"));
+  const String& a = String::ZoneHandle(Symbols::New(thread, "a"));
   LocalVariable* var_a =
       new LocalVariable(TokenPosition::kNoSource, a, dynamic_type);
   parent_scope->AddVariable(var_a);
 
-  const String& b = String::ZoneHandle(Symbols::New("b"));
+  const String& b = String::ZoneHandle(Symbols::New(thread, "b"));
   LocalVariable* var_b =
       new LocalVariable(TokenPosition::kNoSource, b, dynamic_type);
   local_scope->AddVariable(var_b);
 
-  const String& c = String::ZoneHandle(Symbols::New("c"));
+  const String& c = String::ZoneHandle(Symbols::New(thread, "c"));
   LocalVariable* var_c =
       new LocalVariable(TokenPosition::kNoSource, c, dynamic_type);
   parent_scope->AddVariable(var_c);
@@ -2620,14 +2621,14 @@
 
 VM_TEST_CASE(Closure) {
   // Allocate the class first.
-  const String& class_name = String::Handle(Symbols::New("MyClass"));
+  const String& class_name = String::Handle(Symbols::New(thread, "MyClass"));
   const Script& script = Script::Handle();
   const Class& cls = Class::Handle(CreateDummyClass(class_name, script));
   const Array& functions = Array::Handle(Array::New(1));
 
   const Context& context = Context::Handle(Context::New(0));
   Function& parent = Function::Handle();
-  const String& parent_name = String::Handle(Symbols::New("foo_papa"));
+  const String& parent_name = String::Handle(Symbols::New(thread, "foo_papa"));
   parent = Function::New(parent_name, RawFunction::kRegularFunction,
                          false, false, false, false, false, cls,
                          TokenPosition::kMinSource);
@@ -2635,7 +2636,7 @@
   cls.SetFunctions(functions);
 
   Function& function = Function::Handle();
-  const String& function_name = String::Handle(Symbols::New("foo"));
+  const String& function_name = String::Handle(Symbols::New(thread, "foo"));
   function = Function::NewClosureFunction(
       function_name, parent, TokenPosition::kMinSource);
   const Closure& closure = Closure::Handle(Closure::New(function, context));
@@ -2690,15 +2691,16 @@
 
 
 static RawFunction* CreateFunction(const char* name) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
-  const String& lib_name = String::Handle(Symbols::New("ownerLibrary"));
+  Thread* thread = Thread::Current();
+  const String& class_name = String::Handle(Symbols::New(thread, "ownerClass"));
+  const String& lib_name = String::Handle(Symbols::New(thread, "ownerLibrary"));
   const Script& script = Script::Handle();
   const Class& owner_class =
       Class::Handle(CreateDummyClass(class_name, script));
   const Library& owner_library =
       Library::Handle(CreateDummyLibrary(lib_name));
   owner_class.set_library(owner_library);
-  const String& function_name = String::ZoneHandle(Symbols::New(name));
+  const String& function_name = String::ZoneHandle(Symbols::New(thread, name));
   return Function::New(function_name, RawFunction::kRegularFunction,
                        true, false, false, false, false, owner_class,
                        TokenPosition::kMinSource);
@@ -2967,7 +2969,8 @@
 
 
 static RawClass* CreateTestClass(const char* name) {
-  const String& class_name = String::Handle(Symbols::New(name));
+  const String& class_name = String::Handle(Symbols::New(Thread::Current(),
+                                                         name));
   const Class& cls = Class::Handle(
       CreateDummyClass(class_name, Script::Handle()));
   return cls.raw();
@@ -2976,7 +2979,8 @@
 
 static RawField* CreateTestField(const char* name) {
   const Class& cls = Class::Handle(CreateTestClass("global:"));
-  const String& field_name = String::Handle(Symbols::New(name));
+  const String& field_name = String::Handle(Symbols::New(Thread::Current(),
+                                                         name));
   const Field& field =
       Field::Handle(Field::New(field_name, true, false, false, true, cls,
           Object::dynamic_type(), TokenPosition::kMinSource));
@@ -3008,7 +3012,8 @@
 
 
 static RawFunction* GetDummyTarget(const char* name) {
-  const String& function_name = String::Handle(Symbols::New(name));
+  const String& function_name = String::Handle(Symbols::New(Thread::Current(),
+                                                            name));
   const Class& cls = Class::Handle(
        CreateDummyClass(function_name, Script::Handle()));
   const bool is_static = false;
@@ -3032,7 +3037,7 @@
   Function& function = Function::Handle(GetDummyTarget("Bern"));
   const intptr_t id = 12;
   const intptr_t num_args_tested = 1;
-  const String& target_name = String::Handle(Symbols::New("Thun"));
+  const String& target_name = String::Handle(Symbols::New(thread, "Thun"));
   const Array& args_descriptor =
       Array::Handle(ArgumentsDescriptor::New(1, Object::null_array()));
   ICData& o1 = ICData::Handle();
@@ -3101,7 +3106,7 @@
 
 
 VM_TEST_CASE(SubtypeTestCache) {
-  String& class_name = String::Handle(Symbols::New("EmptyClass"));
+  String& class_name = String::Handle(Symbols::New(thread, "EmptyClass"));
   Script& script = Script::Handle();
   const Class& empty_class =
       Class::Handle(CreateDummyClass(class_name, script));
@@ -3781,7 +3786,7 @@
 
 static RawClass* GetClass(const Library& lib, const char* name) {
   const Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New(name))));
+      lib.LookupClass(String::Handle(Symbols::New(Thread::Current(), name))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
   return cls.raw();
 }
@@ -3789,14 +3794,14 @@
 
 VM_TEST_CASE(FindClosureIndex) {
   // Allocate the class first.
-  const String& class_name = String::Handle(Symbols::New("MyClass"));
+  const String& class_name = String::Handle(Symbols::New(thread, "MyClass"));
   const Script& script = Script::Handle();
   const Class& cls = Class::Handle(CreateDummyClass(class_name, script));
   const Array& functions = Array::Handle(Array::New(1));
   const Isolate* iso = Isolate::Current();
 
   Function& parent = Function::Handle();
-  const String& parent_name = String::Handle(Symbols::New("foo_papa"));
+  const String& parent_name = String::Handle(Symbols::New(thread, "foo_papa"));
   parent = Function::New(parent_name, RawFunction::kRegularFunction,
                          false, false, false, false, false, cls,
                          TokenPosition::kMinSource);
@@ -3804,7 +3809,7 @@
   cls.SetFunctions(functions);
 
   Function& function = Function::Handle();
-  const String& function_name = String::Handle(Symbols::New("foo"));
+  const String& function_name = String::Handle(Symbols::New(thread, "foo"));
   function = Function::NewClosureFunction(function_name, parent,
                                           TokenPosition::kMinSource);
   // Add closure function to class.
@@ -3826,14 +3831,14 @@
 
 
 VM_TEST_CASE(FindInvocationDispatcherFunctionIndex) {
-  const String& class_name = String::Handle(Symbols::New("MyClass"));
+  const String& class_name = String::Handle(Symbols::New(thread, "MyClass"));
   const Script& script = Script::Handle();
   const Class& cls = Class::Handle(CreateDummyClass(class_name, script));
   ClassFinalizer::FinalizeTypesInClass(cls);
 
   const Array& functions = Array::Handle(Array::New(1));
   Function& parent = Function::Handle();
-  const String& parent_name = String::Handle(Symbols::New("foo_papa"));
+  const String& parent_name = String::Handle(Symbols::New(thread, "foo_papa"));
   parent = Function::New(parent_name, RawFunction::kRegularFunction,
                          false, false, false, false, false, cls,
                          TokenPosition::kMinSource);
@@ -3843,7 +3848,7 @@
 
   // Add invocation dispatcher.
   const String& invocation_dispatcher_name =
-      String::Handle(Symbols::New("myMethod"));
+      String::Handle(Symbols::New(thread, "myMethod"));
   const Array& args_desc = Array::Handle(ArgumentsDescriptor::New(1));
   Function& invocation_dispatcher = Function::Handle();
   invocation_dispatcher ^=
@@ -3944,17 +3949,18 @@
   res = lib.GetMetadata(func);
   PrintMetadata("A.aFunc", res);
 
-  func = lib.LookupLocalFunction(String::Handle(Symbols::New("main")));
+  func = lib.LookupLocalFunction(String::Handle(Symbols::New(thread, "main")));
   EXPECT(!func.IsNull());
   res = lib.GetMetadata(func);
   PrintMetadata("main", res);
 
-  func = lib.LookupLocalFunction(String::Handle(Symbols::New("get:tlGetter")));
+  func = lib.LookupLocalFunction(String::Handle(Symbols::New(thread,
+                                                             "get:tlGetter")));
   EXPECT(!func.IsNull());
   res = lib.GetMetadata(func);
   PrintMetadata("tlGetter", res);
 
-  field = lib.LookupLocalField(String::Handle(Symbols::New("gVar")));
+  field = lib.LookupLocalField(String::Handle(Symbols::New(thread, "gVar")));
   EXPECT(!field.IsNull());
   res = lib.GetMetadata(field);
   PrintMetadata("gVar", res);
@@ -4006,9 +4012,9 @@
   EXPECT(!lib.IsNull());
 
   const Class& class_a = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("A"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   const Class& class_b = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New("B"))));
+      lib.LookupClass(String::Handle(Symbols::New(thread, "B"))));
   const Function& a_test1 =
       Function::Handle(GetStaticFunction(class_a, "test1"));
   const Function& b_test1 =
@@ -4070,7 +4076,7 @@
   const Library& vmlib = Library::Handle(Library::LookupLibrary(name));
   EXPECT(!vmlib.IsNull());
   const Class& class_a = Class::Handle(
-      vmlib.LookupClass(String::Handle(Symbols::New("A"))));
+      vmlib.LookupClass(String::Handle(Symbols::New(thread, "A"))));
   const Function& func_b =
       Function::Handle(GetFunction(class_a, "b"));
   EXPECT(func_b.CanBeInlined());
@@ -4611,14 +4617,16 @@
 
 
 static void CheckConcatAll(const String* data[], intptr_t n) {
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   GrowableHandlePtrArray<const String> pieces(zone, n);
   const Array& array = Array::Handle(zone, Array::New(n));
   for (int i = 0; i < n; i++) {
     pieces.Add(*data[i]);
     array.SetAt(i, *data[i]);
   }
-  const String& res1 = String::Handle(zone, Symbols::FromConcatAll(pieces));
+  const String& res1 = String::Handle(zone, Symbols::FromConcatAll(thread,
+                                                                   pieces));
   const String& res2 = String::Handle(zone, String::ConcatAll(array));
   EXPECT(res1.Equals(res2));
 }
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 5691522..76cde6b 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -186,7 +186,7 @@
   if (!has_finally_return_temp_var()) {
     LocalVariable* temp = new(Z) LocalVariable(
         function_.token_pos(),
-        String::ZoneHandle(Z, Symbols::New(":finally_ret_val")),
+        Symbols::FinallyRetVal(),
         Object::dynamic_type());
     ASSERT(temp != NULL);
     temp->set_is_final();
@@ -1233,7 +1233,7 @@
 
   const String& field_name = String::Handle(zone, field.name());
   String& init_name = String::Handle(zone,
-      Symbols::FromConcat(Symbols::InitPrefix(), field_name));
+      Symbols::FromConcat(thread, Symbols::InitPrefix(), field_name));
 
   const Script& script = Script::Handle(zone, field.Script());
   Object& initializer_owner = Object::Handle(field.Owner());
@@ -1574,7 +1574,7 @@
     ParamDesc p;
     char name[64];
     OS::SNPrint(name, 64, ":p%" Pd, i);
-    p.name = &String::ZoneHandle(Z, Symbols::New(name));
+    p.name = &String::ZoneHandle(Z, Symbols::New(T, name));
     p.type = &Object::dynamic_type();
     params.parameters->Add(p);
     params.num_fixed_parameters++;
@@ -1688,7 +1688,7 @@
     function_object = receiver;
   } else {
     const String& getter_name = String::ZoneHandle(Z,
-        Symbols::New(String::Handle(Z, Field::GetterSymbol(name))));
+        Field::GetterSymbol(name));
     function_object = new(Z) InstanceCallNode(
         token_pos, receiver, getter_name, no_args);
   }
@@ -2091,7 +2091,7 @@
                 String::Handle(Z, current_class().Name()).ToCString());
   }
   Function& super_func = Function::Handle(Z,
-      Resolver::ResolveDynamicAnyArgs(super_class, name));
+      Resolver::ResolveDynamicAnyArgs(Z, super_class, name));
   if (!super_func.IsNull() &&
       !super_func.AreValidArguments(arguments->length(),
                                     arguments->names(),
@@ -2099,13 +2099,13 @@
     super_func = Function::null();
   } else if (super_func.IsNull() && resolve_getter) {
     const String& getter_name = String::ZoneHandle(Z, Field::GetterName(name));
-    super_func = Resolver::ResolveDynamicAnyArgs(super_class, getter_name);
+    super_func = Resolver::ResolveDynamicAnyArgs(Z, super_class, getter_name);
     ASSERT(super_func.IsNull() ||
            (super_func.kind() != RawFunction::kImplicitStaticFinalGetter));
   }
   if (super_func.IsNull()) {
-    super_func =
-        Resolver::ResolveDynamicAnyArgs(super_class, Symbols::NoSuchMethod());
+    super_func = Resolver::ResolveDynamicAnyArgs(Z,
+        super_class, Symbols::NoSuchMethod());
     ASSERT(!super_func.IsNull());
     *is_no_such_method = true;
   } else {
@@ -2239,8 +2239,7 @@
   if ((op == Token::kNEGATE) ||
       (op == Token::kBIT_NOT)) {
     // Resolve the operator function in the superclass.
-    const String& operator_function_name =
-        String::ZoneHandle(Z, Symbols::New(Token::Str(op)));
+    const String& operator_function_name = Symbols::Token(op);
     ArgumentListNode* op_arguments = new ArgumentListNode(super_pos);
     AstNode* receiver = LoadReceiver(super_pos);
     op_arguments->Add(receiver);
@@ -2300,8 +2299,7 @@
     op_arguments->Add(other_operand);
 
     // Resolve the operator function in the superclass.
-    const String& operator_function_name =
-        String::ZoneHandle(Z, Symbols::New(Token::Str(op)));
+    const String& operator_function_name = Symbols::Token(op);
     const bool kResolveGetter = false;
     bool is_no_such_method = false;
     const Function& super_operator = Function::ZoneHandle(Z,
@@ -2359,14 +2357,15 @@
       String::ZoneHandle(Z, Field::LookupGetterSymbol(field_name));
   Function& super_getter = Function::ZoneHandle(Z);
   if (!getter_name.IsNull()) {
-    super_getter = Resolver::ResolveDynamicAnyArgs(super_class, getter_name);
+    super_getter = Resolver::ResolveDynamicAnyArgs(Z, super_class, getter_name);
   }
   if (super_getter.IsNull()) {
     const String& setter_name =
         String::ZoneHandle(Z, Field::LookupSetterSymbol(field_name));
     Function& super_setter = Function::ZoneHandle(Z);
     if (!setter_name.IsNull()) {
-      super_setter = Resolver::ResolveDynamicAnyArgs(super_class, setter_name);
+      super_setter = Resolver::ResolveDynamicAnyArgs(Z,
+          super_class, setter_name);
     }
     if (super_setter.IsNull()) {
       // Check if this is an access to an implicit closure using 'super'.
@@ -2374,7 +2373,7 @@
       // accessing it as a getter, at runtime we will handle this by
       // creating an implicit closure of the function and returning it.
       const Function& super_function = Function::ZoneHandle(Z,
-          Resolver::ResolveDynamicAnyArgs(super_class, field_name));
+          Resolver::ResolveDynamicAnyArgs(Z, super_class, field_name));
       if (!super_function.IsNull()) {
         // In case CreateAssignmentNode is called later on this
         // CreateImplicitClosureNode, it will be replaced by a StaticSetterNode.
@@ -2406,7 +2405,7 @@
     return NULL;
   }
   String& super_ctor_name = String::Handle(Z, super_class.Name());
-  super_ctor_name = Symbols::FromConcat(super_ctor_name, Symbols::Dot());
+  super_ctor_name = Symbols::FromDot(T, super_ctor_name);
 
   ArgumentListNode* arguments = new ArgumentListNode(supercall_pos);
   // Implicit 'this' parameter is the first argument.
@@ -2426,8 +2425,8 @@
       // Generating a forwarding call to a named constructor 'C.n'.
       // Add the constructor name 'n' to the super constructor.
       const intptr_t kLen =  class_name.Length() + 1;
-      ctor_name = Symbols::New(ctor_name, kLen, ctor_name.Length() - kLen);
-      super_ctor_name = Symbols::FromConcat(super_ctor_name, ctor_name);
+      ctor_name = Symbols::New(T, ctor_name, kLen, ctor_name.Length() - kLen);
+      super_ctor_name = Symbols::FromConcat(T, super_ctor_name, ctor_name);
     }
   }
 
@@ -2465,10 +2464,10 @@
   const Class& super_class = Class::Handle(Z, cls.SuperClass());
   ASSERT(!super_class.IsNull());
   String& ctor_name = String::Handle(Z, super_class.Name());
-  ctor_name = Symbols::FromConcat(ctor_name, Symbols::Dot());
+  ctor_name =  Symbols::FromConcat(T, ctor_name, Symbols::Dot());
   if (CurrentToken() == Token::kPERIOD) {
     ConsumeToken();
-    ctor_name = Symbols::FromConcat(
+    ctor_name = Symbols::FromConcat(T,
         ctor_name, *ExpectIdentifier("constructor name expected"));
   }
   CheckToken(Token::kLPAREN, "parameter list expected");
@@ -2862,7 +2861,7 @@
     ConsumeToken();
     pieces.Add(*ExpectIdentifier("constructor name expected"));
   }
-  ctor_name = Symbols::FromConcatAll(pieces);
+  ctor_name = Symbols::FromConcatAll(T, pieces);
   CheckToken(Token::kLPAREN, "parameter list expected");
 
   ArgumentListNode* arguments = new ArgumentListNode(call_pos);
@@ -3622,7 +3621,7 @@
       // Patch up name for unary operator - so it does not clash with the
       // name for binary operator -.
       method->operator_token = Token::kNEGATE;
-      *method->name = Symbols::New(Token::Str(Token::kNEGATE));
+      *method->name = Symbols::Token(Token::kNEGATE).raw();
     }
     CheckOperatorArity(*method);
   }
@@ -3639,7 +3638,7 @@
       ASSERT(method->IsSetter());
       expected_num_parameters = (method->has_static) ? 1 : 2;
       method->dict_name = &String::ZoneHandle(Z,
-          Symbols::FromConcat(*method->name, Symbols::Equals()));
+          Symbols::FromConcat(T, *method->name, Symbols::Equals()));
       method->name = &String::ZoneHandle(Z, Field::SetterSymbol(*method->name));
     }
     if ((method->params.num_fixed_parameters != expected_num_parameters) ||
@@ -3724,7 +3723,7 @@
         pieces.Add(*ExpectIdentifier("constructor name expected"));
       }
       String& redir_name =
-          String::ZoneHandle(Z, Symbols::FromConcatAll(pieces));
+          String::ZoneHandle(Z, Symbols::FromConcatAll(T, pieces));
 
       method->redirect_name = &redir_name;
       CheckToken(Token::kLPAREN);
@@ -4255,7 +4254,7 @@
       member.dict_name = ExpectIdentifier("identifier expected");
       to_concat.Add(*member.dict_name);
     }
-    *member.name = Symbols::FromConcatAll(to_concat);
+    *member.name = Symbols::FromConcatAll(T, to_concat);
     CheckToken(Token::kLPAREN);
   } else if ((CurrentToken() == Token::kGET) && !member.has_var &&
              (LookaheadToken(1) != Token::kLPAREN) &&
@@ -4298,8 +4297,8 @@
     member.has_operator = true;
     member.kind = RawFunction::kRegularFunction;
     member.name_pos = this->TokenPos();
-    member.name =
-        &String::ZoneHandle(Z, Symbols::New(Token::Str(member.operator_token)));
+    member.name = &String::ZoneHandle(Z,
+        Symbols::Token(member.operator_token).raw());
     ConsumeToken();
   } else if (IsIdentifier()) {
     member.name = CurrentLiteral();
@@ -4759,7 +4758,7 @@
     if (enum_ident->CharAt(0) == '_') {
       *enum_ident = String::ScrubName(*enum_ident);
     }
-    enum_value_name = Symbols::FromConcat(name_prefix, *enum_ident);
+    enum_value_name = Symbols::FromConcat(T, name_prefix, *enum_ident);
     enum_names.Add(enum_value_name, Heap::kOld);
 
     ConsumeToken();  // Enum value name.
@@ -4794,7 +4793,7 @@
   // Create a static field that contains the list of enumeration names.
   // Clone the _enum_names field from the helper class.
   Field& names_field = Field::Handle(Z,
-      helper_class.LookupStaticField(Symbols::_EnumNames()));
+      helper_class.LookupStaticFieldAllowPrivate(Symbols::_EnumNames()));
   ASSERT(!names_field.IsNull());
   names_field = names_field.Clone(cls);
   enum_members.AddField(names_field);
@@ -4826,7 +4825,7 @@
 void Parser::AddImplicitConstructor(const Class& cls) {
   // The implicit constructor is unnamed, has no explicit parameter.
   String& ctor_name = String::ZoneHandle(Z, cls.Name());
-  ctor_name = Symbols::FromConcat(ctor_name, Symbols::Dot());
+  ctor_name = Symbols::FromDot(T, ctor_name);
   // To indicate that this is an implicit constructor, we set the
   // token position and end token position of the function
   // to the token position of the class.
@@ -5778,7 +5777,7 @@
       pieces.Add(Symbols::Dot());
       pieces.Add(*ExpectIdentifier("malformed library name"));
     }
-    lib_name = Symbols::FromConcatAll(pieces);
+    lib_name = Symbols::FromConcatAll(T, pieces);
   }
   library_.SetName(lib_name);
   ExpectSemicolon();
@@ -6588,8 +6587,7 @@
     // Create the closure containing the body of this generator function.
     String& generator_name = String::Handle(Z, innermost_function().name());
     body_closure_name =
-        Symbols::NewFormatted("<%s_sync_body>", generator_name.ToCString());
-    body_closure_name = Symbols::New(body_closure_name);
+        Symbols::NewFormatted(T, "<%s_sync_body>", generator_name.ToCString());
     body = Function::NewClosureFunction(body_closure_name,
                                         innermost_function(),
                                         func_pos);
@@ -6720,8 +6718,8 @@
     // Create the closure containing the body of this async function.
     const String& async_func_name =
         String::Handle(Z, innermost_function().name());
-    String& closure_name = String::Handle(Z,
-        Symbols::NewFormatted("<%s_async_body>", async_func_name.ToCString()));
+    String& closure_name = String::Handle(Z, Symbols::NewFormatted(T,
+        "<%s_async_body>", async_func_name.ToCString()));
     closure = Function::NewClosureFunction(
         closure_name,
         innermost_function(),
@@ -6853,13 +6851,11 @@
     // Create the closure containing the body of this async generator function.
     const String& async_generator_name =
         String::Handle(Z, innermost_function().name());
-    String& closure_name = String::Handle(Z,
-        Symbols::NewFormatted("<%s_async_gen_body>",
-                              async_generator_name.ToCString()));
-    closure = Function::NewClosureFunction(
-        String::Handle(Z, Symbols::New(closure_name)),
-        innermost_function(),
-        async_func_pos);
+    const String& closure_name = String::Handle(Z, Symbols::NewFormatted(T,
+          "<%s_async_gen_body>", async_generator_name.ToCString()));
+    closure = Function::NewClosureFunction(closure_name,
+                                           innermost_function(),
+                                           async_func_pos);
     closure.set_is_generated_body(true);
     closure.set_result_type(Object::dynamic_type());
     is_new_closure = true;
@@ -8161,10 +8157,10 @@
 
 // Return true if the type class of the given value implements the
 // == operator.
-static bool ImplementsEqualOperator(const Instance& value) {
+static bool ImplementsEqualOperator(Zone* zone, const Instance& value) {
   Class& cls = Class::Handle(value.clazz());
-  const Function& equal_op = Function::Handle(
-      Resolver::ResolveDynamicAnyArgs(cls, Symbols::EqualOperator()));
+  const Function& equal_op = Function::Handle(zone,
+      Resolver::ResolveDynamicAnyArgs(zone, cls, Symbols::EqualOperator()));
   ASSERT(!equal_op.IsNull());
   cls = equal_op.Owner();
   return !cls.IsObjectClass();
@@ -8211,7 +8207,7 @@
       // Check that the type class does not override the == operator.
       // Check this only in the first loop iteration since all values
       // are of the same type, which we check above.
-      if (ImplementsEqualOperator(val)) {
+      if (ImplementsEqualOperator(Z, val)) {
         ReportError(val_pos,
                     "type class of case expression must not "
                     "implement operator ==");
@@ -8463,13 +8459,15 @@
 }
 
 
-static LocalVariable* LookupAsyncSavedTryContextVar(LocalScope* scope,
+static LocalVariable* LookupAsyncSavedTryContextVar(Thread* thread,
+                                                    LocalScope* scope,
                                                     uint16_t try_index) {
-  const String& async_saved_try_ctx_name =
-      String::ZoneHandle(Symbols::NewFormatted(
-          "%s%d",
-          Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
-          try_index));
+  Zone* zone = thread->zone();
+  const String& async_saved_try_ctx_name = String::ZoneHandle(zone,
+      Symbols::NewFormatted(thread,
+                            "%s%d",
+                            Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
+                            try_index));
   LocalVariable* var = scope->LocalLookupVariable(async_saved_try_ctx_name);
   ASSERT(var != NULL);
   return var;
@@ -8507,8 +8505,8 @@
       // The block declaring :saved_try_ctx_var variable is the parent of the
       // pushed try block.
       *saved_try_ctx = LookupSavedTryContextVar(scope->parent());
-      *async_saved_try_ctx = LookupAsyncSavedTryContextVar(async_temp_scope_,
-                                                           try_index);
+      *async_saved_try_ctx = LookupAsyncSavedTryContextVar(T,
+          async_temp_scope_, try_index);
       if ((try_stack_->outer_try() != NULL) && !try_stack_->inside_finally()) {
         // Collecting the outer try scope is not necessary if we
         // are in a finally block.
@@ -8516,8 +8514,8 @@
         try_index = try_stack_->outer_try()->try_index();
         if (scope->function_level() == current_function_level) {
           *outer_saved_try_ctx = LookupSavedTryContextVar(scope->parent());
-          *outer_async_saved_try_ctx =
-              LookupAsyncSavedTryContextVar(async_temp_scope_, try_index);
+          *outer_async_saved_try_ctx = LookupAsyncSavedTryContextVar(T,
+              async_temp_scope_, try_index);
         }
       }
     }
@@ -8542,7 +8540,7 @@
   ASSERT(!print_fn.IsNull());
   ArgumentListNode* one_arg =
       new(Z) ArgumentListNode(TokenPosition::kNoSource);
-  String& msg = String::ZoneHandle(Symbols::NewFormatted("%s", str));
+  String& msg = String::ZoneHandle(Symbols::NewFormatted(T, "%s", str));
   one_arg->Add(new(Z) LiteralNode(TokenPosition::kNoSource, msg));
   AstNode* print_call =
       new(Z) StaticCallNode(TokenPosition::kNoSource, print_fn, one_arg);
@@ -9202,9 +9200,8 @@
       if (scope->function_level() == current_block_->scope->function_level()) {
         LocalVariable* saved_try_ctx =
             LookupSavedTryContextVar(scope->parent());
-        LocalVariable* async_saved_try_ctx =
-            LookupAsyncSavedTryContextVar(async_temp_scope_,
-                                          try_stack_->try_index());
+        LocalVariable* async_saved_try_ctx = LookupAsyncSavedTryContextVar(T,
+            async_temp_scope_, try_stack_->try_index());
         current_block_->statements->Add(
             new (Z) StoreLocalNode(
                 TokenPosition::kNoSource,
@@ -9475,9 +9472,8 @@
       if (scope->function_level() == current_block_->scope->function_level()) {
         LocalVariable* saved_try_ctx =
             LookupSavedTryContextVar(scope->parent());
-        LocalVariable* async_saved_try_ctx =
-            LookupAsyncSavedTryContextVar(async_temp_scope_,
-                                          try_block->try_index());
+        LocalVariable* async_saved_try_ctx = LookupAsyncSavedTryContextVar(T,
+            async_temp_scope_, try_block->try_index());
         async_code->Add(
             new (Z) StoreLocalNode(
                 TokenPosition::kNoSource,
@@ -9505,9 +9501,10 @@
 
 void Parser::SetupSavedTryContext(LocalVariable* saved_try_context) {
   const String& async_saved_try_ctx_name = String::ZoneHandle(Z,
-      Symbols::NewFormatted("%s%d",
-                           Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
-                           last_used_try_index_ - 1));
+      Symbols::NewFormatted(T,
+                            "%s%d",
+                            Symbols::AsyncSavedTryCtxVarPrefix().ToCString(),
+                            last_used_try_index_ - 1));
   LocalVariable* async_saved_try_ctx = new (Z) LocalVariable(
       TokenPosition::kNoSource,
       async_saved_try_ctx_name,
@@ -10345,7 +10342,7 @@
   }
   // String memberName.
   arguments->Add(new(Z) LiteralNode(
-      call_pos, String::ZoneHandle(Z, Symbols::New(function_name))));
+      call_pos, String::ZoneHandle(Z, Symbols::New(T, function_name))));
   // Smi invocation_type.
   if (cls.IsTopLevel()) {
     ASSERT(im_call == InvocationMirror::kStatic ||
@@ -10513,7 +10510,7 @@
   OS::SNPrint(name, 64, ":%s%" Pd "", s, token_pos.value());
   LocalVariable* temp = new(Z) LocalVariable(
       token_pos,
-      String::ZoneHandle(Z, Symbols::New(name)),
+      String::ZoneHandle(Z, Symbols::New(T, name)),
       Object::dynamic_type());
   temp->set_is_final();
   current_block_->scope->AddVariable(temp);
@@ -10725,7 +10722,7 @@
     String& name = String::ZoneHandle(Z);
     const Class* target_cls = &current_class();
     if (original->IsTypeNode()) {
-      name = Symbols::New(original->AsTypeNode()->TypeName());
+      name = Symbols::New(T, original->AsTypeNode()->TypeName());
     } else if (original->IsLoadStaticFieldNode()) {
       name = original->AsLoadStaticFieldNode()->field().name();
       target_cls = &Class::Handle(Z,
@@ -11626,7 +11623,7 @@
       is_setter_name = true;
     }
   } else if (Token::CanBeOverloaded(CurrentToken())) {
-    extractor_name = Symbols::New(Token::Str(CurrentToken()));
+    extractor_name = Symbols::Token(CurrentToken()).raw();
     ConsumeToken();
   } else {
     ReportError("identifier or operator expected");
@@ -11753,7 +11750,7 @@
     pieces.Add(Symbols::SetterPrefix());
   }
   pieces.Add(extractor_name);
-  extractor_name = Symbols::FromConcatAll(pieces);
+  extractor_name = Symbols::FromConcatAll(T, pieces);
   return new(Z) InstanceGetterNode(property_pos, primary, extractor_name);
 }
 
@@ -11980,6 +11977,8 @@
 
 class ConstMapKeyEqualsTraits {
  public:
+  static const char* Name() { return "ConstMapKeyEqualsTraits"; }
+
   static bool IsMatch(const Object& a, const Object& b) {
     const Array& key1 = Array::Cast(a);
     const Array& key2 = Array::Cast(b);
@@ -12943,7 +12942,7 @@
       if (!key_value.IsInteger() &&
           !key_value.IsString() &&
           (key_value.clazz() != I->object_store()->symbol_class()) &&
-          ImplementsEqualOperator(key_value)) {
+          ImplementsEqualOperator(Z, key_value)) {
         ReportError(key_pos, "key value must not implement operator ==");
       }
     }
@@ -13141,9 +13140,9 @@
       ConsumeToken();
       pieces.Add(*ExpectIdentifier("identifier expected"));
     }
-    symbol = Symbols::FromConcatAll(pieces);
+    symbol = Symbols::FromConcatAll(T, pieces);
   } else if (Token::CanBeOverloaded(CurrentToken())) {
-    symbol = Symbols::New(Token::Str(CurrentToken()));
+    symbol = Symbols::Token(CurrentToken()).raw();
     ConsumeToken();
   } else {
     ReportError("illegal symbol literal");
@@ -13190,8 +13189,8 @@
   }
 
   String& closure_name = String::Handle(Z, ctr.name());
-  closure_name = Symbols::FromConcat(Symbols::ConstructorClosurePrefix(),
-                                     closure_name);
+  closure_name = Symbols::FromConcat(T,
+      Symbols::ConstructorClosurePrefix(), closure_name);
 
   ParamList params;
   params.AddFinalParameter(token_pos,
@@ -13223,17 +13222,19 @@
 }
 
 
-static String& BuildConstructorName(const String& type_class_name,
+static String& BuildConstructorName(Thread* thread,
+                                    const String& type_class_name,
                                     const String* named_constructor) {
   // By convention, the static function implementing a named constructor 'C'
   // for class 'A' is labeled 'A.C', and the static function implementing the
   // unnamed constructor for class 'A' is labeled 'A.'.
   // This convention prevents users from explicitly calling constructors.
-  String& constructor_name =
-      String::Handle(Symbols::FromConcat(type_class_name, Symbols::Dot()));
+  Zone* zone = thread->zone();
+  String& constructor_name = String::Handle(zone,
+      Symbols::FromDot(thread, type_class_name));
   if (named_constructor != NULL) {
     constructor_name =
-        Symbols::FromConcat(constructor_name, *named_constructor);
+        Symbols::FromConcat(thread, constructor_name, *named_constructor);
   }
   return constructor_name;
 }
@@ -13272,8 +13273,8 @@
   Class& type_class = Class::Handle(Z, type.type_class());
   String& type_class_name = String::Handle(Z, type_class.Name());
   *type_arguments = type.arguments();
-  String& constructor_name =
-      BuildConstructorName(type_class_name, named_constructor);
+  String& constructor_name = BuildConstructorName(T,
+      type_class_name, named_constructor);
   *constructor = type_class.LookupConstructor(constructor_name);
   if (constructor->IsNull()) {
     *constructor = type_class.LookupFactory(constructor_name);
@@ -13413,8 +13414,8 @@
   AbstractType& type_bound = AbstractType::ZoneHandle(Z);
 
   // Make sure that an appropriate constructor exists.
-  String& constructor_name =
-      BuildConstructorName(type_class_name, named_constructor);
+  String& constructor_name = BuildConstructorName(T,
+              type_class_name, named_constructor);
   Function& constructor = Function::ZoneHandle(Z,
       type_class.LookupConstructor(constructor_name));
   if (constructor.IsNull()) {
@@ -13682,7 +13683,7 @@
   }
   String& concatenated = String::ZoneHandle(Z);
   concatenated ^= result.raw();
-  concatenated = Symbols::New(concatenated);
+  concatenated = Symbols::New(T, concatenated);
   return concatenated;
 }
 
@@ -13780,7 +13781,8 @@
         ASSERT(part.IsString());
         pieces.Add(String::Cast(part));
       }
-      const String& lit = String::ZoneHandle(Z, Symbols::FromConcatAll(pieces));
+      const String& lit = String::ZoneHandle(Z,
+          Symbols::FromConcatAll(T, pieces));
       primary = new(Z) LiteralNode(literal_start, lit);
       // Caching of constant not necessary because the symbol lookup will
       // find the value next time.
@@ -13870,7 +13872,7 @@
           pieces.Add(Symbols::Dot());
           pieces.Add(ident);
           const String& qualified_name = String::ZoneHandle(Z,
-              Symbols::FromConcatAll(pieces));
+              Symbols::FromConcatAll(T, pieces));
           InvocationMirror::Type call_type =
               CurrentToken() == Token::kLPAREN ?
                   InvocationMirror::kMethod : InvocationMirror::kGetter;
@@ -13884,9 +13886,12 @@
         }
       } else if (FLAG_load_deferred_eagerly && prefix.is_deferred_load()) {
         // primary != NULL.
-        String& qualified_name = String::ZoneHandle(Z, prefix.name());
-        qualified_name = String::Concat(qualified_name, Symbols::Dot());
-        qualified_name = Symbols::FromConcat(qualified_name, ident);
+        GrowableHandlePtrArray<const String> pieces(Z, 3);
+        pieces.Add(String::Handle(Z, prefix.name()));
+        pieces.Add(Symbols::Dot());
+        pieces.Add(ident);
+        const String& qualified_name = String::ZoneHandle(Z,
+            Symbols::FromConcatAll(T, pieces));
         InvocationMirror::Type call_type =
             CurrentToken() == Token::kLPAREN ?
                 InvocationMirror::kMethod : InvocationMirror::kGetter;
diff --git a/runtime/vm/parser_test.cc b/runtime/vm/parser_test.cc
index 5889227..120e5ca 100644
--- a/runtime/vm/parser_test.cc
+++ b/runtime/vm/parser_test.cc
@@ -21,7 +21,8 @@
 static void DumpFunction(const Library& lib,
                          const char* cname,
                          const char* fname) {
-  const String& classname = String::Handle(Symbols::New(cname));
+  const String& classname = String::Handle(Symbols::New(Thread::Current(),
+                                                        cname));
   String& funcname = String::Handle(String::New(fname));
 
   bool retval;
@@ -56,7 +57,8 @@
                 const char* field_name,
                 bool expect_static,
                 bool is_final) {
-  const String& classname = String::Handle(Symbols::New(class_name));
+  const String& classname = String::Handle(Symbols::New(Thread::Current(),
+                                                        class_name));
   Class& cls = Class::Handle(lib.LookupClass(classname));
   EXPECT(!cls.IsNull());
 
@@ -65,7 +67,7 @@
   Function& function = Function::Handle();
   Field& field = Field::Handle();
   if (expect_static) {
-    field ^= cls.LookupStaticField(fieldname);
+    field ^= cls.LookupStaticFieldAllowPrivate(fieldname);
     functionname ^= Field::GetterName(fieldname);
     function ^= cls.LookupStaticFunction(functionname);
     EXPECT(function.IsNull());
@@ -73,7 +75,7 @@
     function ^= cls.LookupStaticFunction(functionname);
     EXPECT(function.IsNull());
   } else {
-    field ^= cls.LookupInstanceField(fieldname);
+    field ^= cls.LookupInstanceFieldAllowPrivate(fieldname);
     functionname ^= Field::GetterName(fieldname);
     function ^= cls.LookupDynamicFunction(functionname);
     EXPECT(!function.IsNull());
@@ -91,7 +93,8 @@
                    const char* class_name,
                    const char* function_name,
                    bool expect_static) {
-  const String& classname = String::Handle(Symbols::New(class_name));
+  const String& classname = String::Handle(Symbols::New(Thread::Current(),
+                                                        class_name));
   Class& cls = Class::Handle(lib.LookupClass(classname));
   EXPECT(!cls.IsNull());
 
diff --git a/runtime/vm/precompiler.cc b/runtime/vm/precompiler.cc
index dcabc02..fc83b31 100644
--- a/runtime/vm/precompiler.cc
+++ b/runtime/vm/precompiler.cc
@@ -348,9 +348,9 @@
   String& function_name = String::Handle(Z);
 
   for (intptr_t i = 0; entry_points[i].library_uri != NULL; i++) {
-    library_uri = Symbols::New(entry_points[i].library_uri);
-    class_name = Symbols::New(entry_points[i].class_name);
-    function_name = Symbols::New(entry_points[i].function_name);
+    library_uri = Symbols::New(thread(), entry_points[i].library_uri);
+    class_name = Symbols::New(thread(), entry_points[i].class_name);
+    function_name = Symbols::New(thread(), entry_points[i].function_name);
 
     lib = Library::LookupLibrary(library_uri);
     if (lib.IsNull()) {
@@ -382,7 +382,7 @@
 
       ASSERT(!cls.IsNull());
       func = cls.LookupFunctionAllowPrivate(function_name);
-      field = cls.LookupField(function_name);
+      field = cls.LookupFieldAllowPrivate(function_name);
     }
 
     if (func.IsNull() && field.IsNull()) {
@@ -846,7 +846,7 @@
     // Function fits the bill.
     const char* kEvalConst = "eval_const";
     const Function& func = Function::ZoneHandle(Function::New(
-        String::Handle(Symbols::New(kEvalConst)),
+        String::Handle(Symbols::New(thread, kEvalConst)),
         RawFunction::kRegularFunction,
         true,  // static function
         false,  // not const function
@@ -989,14 +989,14 @@
         // Handle the implicit call type conversions.
         if (Field::IsGetterName(selector)) {
           selector2 = Field::NameFromGetter(selector);
-          selector3 = Symbols::Lookup(selector2);
+          selector3 = Symbols::Lookup(thread(), selector2);
           if (IsSent(selector2)) {
             // Call-through-getter.
             // Function is get:foo and somewhere foo is called.
             AddFunction(function);
           }
-          selector3 = Symbols::LookupFromConcat(Symbols::ClosurizePrefix(),
-                                                selector2);
+          selector3 = Symbols::LookupFromConcat(thread(),
+              Symbols::ClosurizePrefix(), selector2);
           if (IsSent(selector3)) {
             // Hash-closurization.
             // Function is get:foo and somewhere get:#foo is called.
@@ -1010,8 +1010,8 @@
             AddFunction(function2);
           }
         } else if (Field::IsSetterName(selector)) {
-          selector2 = Symbols::LookupFromConcat(Symbols::ClosurizePrefix(),
-                                                selector);
+          selector2 = Symbols::LookupFromConcat(thread(),
+              Symbols::ClosurizePrefix(), selector);
           if (IsSent(selector2)) {
             // Hash-closurization.
             // Function is set:foo and somewhere get:#set:foo is called.
@@ -1036,8 +1036,8 @@
             function2 = function.GetMethodExtractor(selector2);
             AddFunction(function2);
           }
-          selector2 = Symbols::LookupFromConcat(Symbols::ClosurizePrefix(),
-                                                selector);
+          selector2 = Symbols::LookupFromConcat(thread(),
+              Symbols::ClosurizePrefix(), selector);
           if (IsSent(selector2)) {
             // Hash-closurization.
             // Function is foo and somewhere get:#foo is called.
@@ -1057,6 +1057,8 @@
 
 class NameFunctionsTraits {
  public:
+  static const char* Name() { return "NameFunctionsTraits"; }
+
   static bool IsMatch(const Object& a, const Object& b) {
     return a.IsString() && b.IsString() &&
         String::Cast(a).Equals(String::Cast(b));
diff --git a/runtime/vm/precompiler.h b/runtime/vm/precompiler.h
index 319eb34..5799819 100644
--- a/runtime/vm/precompiler.h
+++ b/runtime/vm/precompiler.h
@@ -372,6 +372,8 @@
 
 class FunctionsTraits {
  public:
+  static const char* Name() { return "FunctionsTraits"; }
+
   static bool IsMatch(const Object& a, const Object& b) {
     Zone* zone = Thread::Current()->zone();
     String& a_s = String::Handle(zone);
diff --git a/runtime/vm/profiler_test.cc b/runtime/vm/profiler_test.cc
index 6d63bc1..1ecac9f 100644
--- a/runtime/vm/profiler_test.cc
+++ b/runtime/vm/profiler_test.cc
@@ -180,15 +180,16 @@
 
 static RawClass* GetClass(const Library& lib, const char* name) {
   const Class& cls = Class::Handle(
-      lib.LookupClassAllowPrivate(String::Handle(Symbols::New(name))));
+      lib.LookupClassAllowPrivate(String::Handle(Symbols::New(Thread::Current(),
+                                                              name))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
   return cls.raw();
 }
 
 
 static RawFunction* GetFunction(const Library& lib, const char* name) {
-  const Function& func = Function::Handle(
-      lib.LookupFunctionAllowPrivate(String::Handle(Symbols::New(name))));
+  const Function& func = Function::Handle(lib.LookupFunctionAllowPrivate(
+      String::Handle(Symbols::New(Thread::Current(), name))));
   EXPECT(!func.IsNull());  // No ambiguity error expected.
   return func.raw();
 }
@@ -2365,6 +2366,8 @@
   // Disable profiling for this thread.
   DisableThreadInterruptsScope dtis(Thread::Current());
 
+  DisableBackgroundCompilationScope dbcs;
+
   SampleBuffer* sample_buffer = Profiler::sample_buffer();
   EXPECT(sample_buffer != NULL);
 
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 323fed4..6a5d626 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -1021,7 +1021,7 @@
   RawString* private_key_;
   RawArray* dictionary_;         // Top-level names in this library.
   RawGrowableObjectArray* metadata_;  // Metadata on classes, methods etc.
-  RawClass* toplevel_class_;  // Class containing top-level elements.
+  RawClass* toplevel_class_;     // Class containing top-level elements.
   RawGrowableObjectArray* patch_classes_;
   RawArray* imports_;            // List of Namespaces imported without prefix.
   RawArray* exports_;            // List of re-exported Namespaces.
@@ -1040,13 +1040,13 @@
 
   Dart_NativeEntryResolver native_entry_resolver_;  // Resolves natives.
   Dart_NativeEntrySymbol native_entry_symbol_resolver_;
-  classid_t index_;             // Library id number.
-  uint16_t num_imports_;        // Number of entries in imports_.
-  int8_t load_state_;           // Of type LibraryState.
+  classid_t index_;              // Library id number.
+  uint16_t num_imports_;         // Number of entries in imports_.
+  int8_t load_state_;            // Of type LibraryState.
   bool corelib_imported_;
   bool is_dart_scheme_;
-  bool debuggable_;             // True if debugger can stop in library.
-  bool is_in_fullsnapshot_;     // True if library is in a full snapshot.
+  bool debuggable_;              // True if debugger can stop in library.
+  bool is_in_fullsnapshot_;      // True if library is in a full snapshot.
 
   friend class Class;
   friend class Isolate;
@@ -1478,6 +1478,10 @@
   int32_t deopt_id_;     // Deoptimization id corresponding to this IC.
   uint32_t state_bits_;  // Number of arguments tested in IC, deopt reasons,
                          // range feedback.
+#if defined(TAG_IC_DATA)
+  intptr_t tag_;  // Debugging, verifying that the icdata is assigned to the
+                  // same instruction again. Store -1 or Instruction::Tag.
+#endif
 };
 
 
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index e8fcf69..0ca54d8 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -1972,6 +1972,9 @@
 
   result.set_deopt_id(reader->Read<int32_t>());
   result.set_state_bits(reader->Read<uint32_t>());
+#if defined(TAG_IC_DATA)
+  result.set_tag(reader->Read<int16_t>());
+#endif
 
   // Set all the object fields.
   RawObject** toobj = reader->snapshot_code()
@@ -2004,6 +2007,9 @@
   // Write out all the non object fields.
   writer->Write<int32_t>(ptr()->deopt_id_);
   writer->Write<uint32_t>(ptr()->state_bits_);
+#if defined(TAG_IC_DATA)
+  writer->Write<int16_t>(ptr()->tag_);
+#endif
 
   // Write out all the object pointer fields.
   // In precompiled snapshots, omit the owner field. The owner field may
@@ -2512,7 +2518,7 @@
     for (intptr_t i = 0; i < len; i++) {
       ptr[i] = reader->Read<CharacterType>();
     }
-    *str_obj ^= (*new_symbol)(ptr, len);
+    *str_obj ^= (*new_symbol)(reader->thread(), ptr, len);
   } else {
     // Set up the string object.
     *str_obj = StringType::New(len, HEAP_SPACE(kind));
diff --git a/runtime/vm/regexp.cc b/runtime/vm/regexp.cc
index 62fab5a..f119a25 100644
--- a/runtime/vm/regexp.cc
+++ b/runtime/vm/regexp.cc
@@ -5244,7 +5244,7 @@
 }
 
 
-static void CreateSpecializedFunction(Zone* zone,
+static void CreateSpecializedFunction(Thread* thread, Zone* zone,
                                       const RegExp& regexp,
                                       intptr_t specialization_cid,
                                       const Object& owner) {
@@ -5252,7 +5252,7 @@
 
   Function& fn = Function::Handle(zone, Function::New(
       // Append the regexp pattern to the function name.
-      String::Handle(zone, Symbols::New(
+      String::Handle(zone, Symbols::New(thread,
           String::Handle(zone, String::Concat(
               String::Handle(zone, String::Concat(
                   Symbols::ColonMatcher(),
@@ -5297,10 +5297,11 @@
 }
 
 
-RawRegExp* RegExpEngine::CreateRegExp(Zone* zone,
-                                          const String& pattern,
-                                          bool multi_line,
-                                          bool ignore_case) {
+RawRegExp* RegExpEngine::CreateRegExp(Thread* thread,
+                                      const String& pattern,
+                                      bool multi_line,
+                                      bool ignore_case) {
+  Zone* zone = thread->zone();
   const RegExp& regexp = RegExp::Handle(RegExp::New());
 
   regexp.set_pattern(pattern);
@@ -5319,13 +5320,15 @@
 
   if (!FLAG_interpret_irregexp) {
     const Library& lib = Library::Handle(zone, Library::CoreLibrary());
-    const Class& owner = Class::Handle(
-        zone, lib.LookupClass(Symbols::RegExp()));
+    const Class& owner = Class::Handle(zone,
+                                       lib.LookupClass(Symbols::RegExp()));
 
-    CreateSpecializedFunction(zone, regexp, kOneByteStringCid, owner);
-    CreateSpecializedFunction(zone, regexp, kTwoByteStringCid, owner);
-    CreateSpecializedFunction(zone, regexp, kExternalOneByteStringCid, owner);
-    CreateSpecializedFunction(zone, regexp, kExternalTwoByteStringCid, owner);
+    CreateSpecializedFunction(thread, zone, regexp, kOneByteStringCid, owner);
+    CreateSpecializedFunction(thread, zone, regexp, kTwoByteStringCid, owner);
+    CreateSpecializedFunction(thread, zone,
+                              regexp, kExternalOneByteStringCid, owner);
+    CreateSpecializedFunction(thread, zone,
+                              regexp, kExternalTwoByteStringCid, owner);
   }
 
   return regexp.raw();
diff --git a/runtime/vm/regexp.h b/runtime/vm/regexp.h
index 49aef37..bc8edd5 100644
--- a/runtime/vm/regexp.h
+++ b/runtime/vm/regexp.h
@@ -1425,7 +1425,7 @@
       Zone* zone);
 
   static RawRegExp* CreateRegExp(
-      Zone* zone,
+      Thread* thread,
       const String& pattern,
       bool multi_line,
       bool ignore_case);
diff --git a/runtime/vm/regexp_assembler_ir.cc b/runtime/vm/regexp_assembler_ir.cc
index 6f656db..aac090e 100644
--- a/runtime/vm/regexp_assembler_ir.cc
+++ b/runtime/vm/regexp_assembler_ir.cc
@@ -431,7 +431,7 @@
   const Class& regexp_class = Class::Handle(Z,
         lib.LookupClassAllowPrivate(Symbols::_RegExp()));
   const Field& word_character_field = Field::ZoneHandle(Z,
-      regexp_class.LookupStaticField(Symbols::_wordCharacterMap()));
+      regexp_class.LookupStaticFieldAllowPrivate(Symbols::_wordCharacterMap()));
   ASSERT(!word_character_field.IsNull());
 
   if (word_character_field.IsUninitialized()) {
diff --git a/runtime/vm/regexp_test.cc b/runtime/vm/regexp_test.cc
index e7c5ba8..3948f64 100644
--- a/runtime/vm/regexp_test.cc
+++ b/runtime/vm/regexp_test.cc
@@ -13,9 +13,10 @@
 namespace dart {
 
 static RawArray* Match(const String& pat, const String& str) {
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
   const RegExp& regexp = RegExp::Handle(
-      RegExpEngine::CreateRegExp(zone, pat, false, false));
+      RegExpEngine::CreateRegExp(thread, pat, false, false));
   const Smi& idx = Smi::Handle(Smi::New(0));
   return IRRegExpMacroAssembler::Execute(regexp, str, idx, zone);
 }
diff --git a/runtime/vm/report.cc b/runtime/vm/report.cc
index 01b7a86..b53c494 100644
--- a/runtime/vm/report.cc
+++ b/runtime/vm/report.cc
@@ -43,7 +43,7 @@
       // Only report the line position if we have the original source. We still
       // need to get a valid column so that we can report the ^ mark below the
       // snippet.
-      // Allocate formatted strings in old sapce as they may be created during
+      // Allocate formatted strings in old space as they may be created during
       // optimizing compilation. Those strings are created rarely and should not
       // polute old space.
       if (script.HasSource()) {
@@ -61,24 +61,23 @@
                                       line);
       }
       // Append the formatted error or warning message.
-      GrowableHandlePtrArray<const String> strs(Thread::Current()->zone(), 5);
-      strs.Add(result);
-      strs.Add(message);
+      const Array& strs = Array::Handle(
+          Array::New(6, Heap::kOld));
+      strs.SetAt(0, result);
+      strs.SetAt(1, message);
       // Append the source line.
       const String& script_line = String::Handle(
           script.GetLine(line, Heap::kOld));
       ASSERT(!script_line.IsNull());
-      strs.Add(Symbols::NewLine());
-      strs.Add(script_line);
-      strs.Add(Symbols::NewLine());
+      strs.SetAt(2, Symbols::NewLine());
+      strs.SetAt(3, script_line);
+      strs.SetAt(4, Symbols::NewLine());
       // Append the column marker.
       const String& column_line = String::Handle(
           String::NewFormatted(Heap::kOld,
                                "%*s\n", static_cast<int>(column), "^"));
-      strs.Add(column_line);
-      // TODO(srdjan): Use Strings::FromConcatAll in old space, once
-      // implemented.
-      result = Symbols::FromConcatAll(strs);
+      strs.SetAt(5, column_line);
+      result = String::ConcatAll(strs, Heap::kOld);
     } else {
       // Token position is unknown.
       result = String::NewFormatted(Heap::kOld, "'%s': %s: ",
diff --git a/runtime/vm/resolver.cc b/runtime/vm/resolver.cc
index caaf556..95f8c62 100644
--- a/runtime/vm/resolver.cc
+++ b/runtime/vm/resolver.cc
@@ -36,9 +36,11 @@
     const String& function_name,
     const ArgumentsDescriptor& args_desc,
     bool allow_add) {
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
 
-  Function& function = Function::Handle(
-      ResolveDynamicAnyArgs(receiver_class, function_name, allow_add));
+  Function& function = Function::Handle(zone,
+      ResolveDynamicAnyArgs(zone, receiver_class, function_name, allow_add));
 
   if (function.IsNull() ||
       !function.AreValidArguments(args_desc, NULL)) {
@@ -46,7 +48,7 @@
     // "noSuchMethod" function.
     if (FLAG_trace_resolving) {
       String& error_message =
-          String::Handle(Symbols::New("function not found"));
+          String::Handle(zone, Symbols::New(thread, "function not found"));
       if (!function.IsNull()) {
         // Obtain more detailed error message.
         function.AreValidArguments(args_desc, &error_message);
@@ -62,18 +64,19 @@
 
 
 RawFunction* Resolver::ResolveDynamicAnyArgs(
+    Zone* zone,
     const Class& receiver_class,
     const String& function_name,
     bool allow_add) {
-  Class& cls = Class::Handle(receiver_class.raw());
+  Class& cls = Class::Handle(zone, receiver_class.raw());
   if (FLAG_trace_resolving) {
     THR_Print("ResolveDynamic '%s' for class %s\n",
               function_name.ToCString(),
-              String::Handle(cls.Name()).ToCString());
+              String::Handle(zone, cls.Name()).ToCString());
   }
 
   const bool is_getter = Field::IsGetterName(function_name);
-  String& field_name = String::Handle();
+  String& field_name = String::Handle(zone);
   if (is_getter) {
     field_name ^= Field::NameFromGetter(function_name);
 
@@ -88,7 +91,7 @@
       field_name = String::SubString(field_name, 1);
       ASSERT(!Field::IsGetterName(field_name));
 
-      String& property_getter_name = String::Handle();
+      String& property_getter_name = String::Handle(zone);
       if (!Field::IsSetterName(field_name)) {
         // If this is not a setter, we need to look for both the regular
         // name and the getter name. (In the case of an operator, this
@@ -97,7 +100,7 @@
         property_getter_name = Field::GetterName(field_name);
       }
 
-      Function& function = Function::Handle();
+      Function& function = Function::Handle(zone);
       while (!cls.IsNull()) {
         function = cls.LookupDynamicFunction(field_name);
         if (!function.IsNull()) {
@@ -117,7 +120,7 @@
 
   // Now look for an instance function whose name matches function_name
   // in the class.
-  Function& function = Function::Handle();
+  Function& function = Function::Handle(zone);
   while (!cls.IsNull()) {
     function ^= cls.LookupDynamicFunction(function_name);
     if (!function.IsNull()) {
diff --git a/runtime/vm/resolver.h b/runtime/vm/resolver.h
index 32629aa..9a52ad3 100644
--- a/runtime/vm/resolver.h
+++ b/runtime/vm/resolver.h
@@ -37,6 +37,7 @@
 
   // If 'allow_add' is true we may add a function to the class during lookup.
   static RawFunction* ResolveDynamicAnyArgs(
+      Zone* zone,
       const Class& receiver_class,
       const String& function_name,
       bool allow_add = true);
diff --git a/runtime/vm/resolver_test.cc b/runtime/vm/resolver_test.cc
index f06e42f..52aa4b6 100644
--- a/runtime/vm/resolver_test.cc
+++ b/runtime/vm/resolver_test.cc
@@ -158,7 +158,7 @@
   const Library& lib = Library::Handle(Library::LookupLibrary(lib_name));
   ASSERT(!lib.IsNull());
   const Class& cls = Class::Handle(lib.LookupClass(
-      String::Handle(Symbols::New(test_class_name))));
+      String::Handle(Symbols::New(thread, test_class_name))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
 
   Instance& receiver = Instance::Handle(Instance::New(cls));
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 101898f..b8d043b 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -14,12 +14,13 @@
 // Add function to a class and that class to the class dictionary so that
 // frame walking can be used.
 const Function& RegisterFakeFunction(const char* name, const Code& code) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  Thread* thread = Thread::Current();
+  const String& class_name = String::Handle(Symbols::New(thread, "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class =
       Class::Handle(Class::New(class_name, script,
                                TokenPosition::kNoSource));
-  const String& function_name = String::ZoneHandle(Symbols::New(name));
+  const String& function_name = String::ZoneHandle(Symbols::New(thread, name));
   const Function& function = Function::ZoneHandle(
       Function::New(function_name,
                     RawFunction::kRegularFunction,
diff --git a/runtime/vm/safepoint.cc b/runtime/vm/safepoint.cc
index fcf2872..6cbd0f7 100644
--- a/runtime/vm/safepoint.cc
+++ b/runtime/vm/safepoint.cc
@@ -96,8 +96,15 @@
   // Now wait for all threads that are not already at a safepoint to check-in.
   {
     MonitorLocker sl(safepoint_lock_);
+    intptr_t num_attempts = 0;
     while (number_threads_not_at_safepoint_ > 0) {
-      sl.Wait();
+      Monitor::WaitResult retval = sl.Wait(1000);
+      if (retval == Monitor::kTimedOut) {
+        num_attempts += 1;
+        OS::Print("Attempt:%" Pd " waiting for %d threads to check in\n",
+                  num_attempts,
+                  number_threads_not_at_safepoint_);
+      }
     }
   }
 }
diff --git a/runtime/vm/safepoint.h b/runtime/vm/safepoint.h
index 1c13a87..9477425 100644
--- a/runtime/vm/safepoint.h
+++ b/runtime/vm/safepoint.h
@@ -309,12 +309,6 @@
     } else {
       ASSERT(execution_state_ == Thread::kThreadInVM);
       thread()->set_execution_state(Thread::kThreadInVM);
-      // Fast check to see if a safepoint is requested or not.
-      // We do the more expensive operation of blocking the thread
-      // only if a safepoint is requested.
-      if (thread()->IsSafepointRequested()) {
-        handler()->BlockForSafepoint(thread());
-      }
     }
   }
 
diff --git a/runtime/vm/scanner.cc b/runtime/vm/scanner.cc
index a040476..9cbe84a 100644
--- a/runtime/vm/scanner.cc
+++ b/runtime/vm/scanner.cc
@@ -18,8 +18,9 @@
 DEFINE_FLAG(bool, print_tokens, false, "Print scanned tokens.");
 
 
-// Quick access to the locally defined zone() method.
+// Quick access to the locally defined zone() and thread() methods.
 #define Z (zone())
+#define T (thread())
 
 
 class ScanContext : public ZoneAllocated {
@@ -83,7 +84,8 @@
       saved_context_(NULL),
       private_key_(String::ZoneHandle(private_key.raw())),
       char_at_func_(src.CharAtFunc()),
-      zone_(Thread::Current()->zone()) {
+      thread_(Thread::Current()),
+      zone_(thread_->zone()) {
   Reset();
 }
 
@@ -93,7 +95,7 @@
 
 void Scanner::ErrorMsg(const char* msg) {
   current_token_.kind = Token::kERROR;
-  current_token_.literal = &String::ZoneHandle(Z, Symbols::New(msg));
+  current_token_.literal = &String::ZoneHandle(Z, Symbols::New(T, msg));
   current_token_.position = c0_pos_;
   token_start_ = lookahead_pos_;
   current_token_.offset = lookahead_pos_;
@@ -328,10 +330,10 @@
   // We did not read a keyword.
   current_token_.kind = Token::kIDENT;
   String& literal =
-      String::ZoneHandle(Z, Symbols::New(source_, ident_pos, ident_length));
+      String::ZoneHandle(Z, Symbols::New(T, source_, ident_pos, ident_length));
   if (ident_char0 == Library::kPrivateIdentifierStart) {
     // Private identifiers are mangled on a per library basis.
-    literal = Symbols::FromConcat(literal, private_key_);
+    literal = Symbols::FromConcat(T, literal, private_key_);
   }
   current_token_.literal = &literal;
 }
@@ -386,7 +388,7 @@
   if (current_token_.kind != Token::kILLEGAL) {
     intptr_t len = lookahead_pos_ - token_start_;
     const String& str =
-        String::ZoneHandle(Z, Symbols::New(source_, token_start_, len));
+        String::ZoneHandle(Z, Symbols::New(T, source_, token_start_, len));
     current_token_.literal = &str;
   }
 }
@@ -540,7 +542,7 @@
       ASSERT(string_chars.data() != NULL);
       // Strings are canonicalized: Allocate a symbol.
       current_token_.literal = &String::ZoneHandle(Z,
-          Symbols::FromUTF32(string_chars.data(), string_chars.length()));
+          Symbols::FromUTF32(T, string_chars.data(), string_chars.length()));
       // Preserve error tokens.
       if (current_token_.kind != Token::kERROR) {
         current_token_.kind = Token::kSTRING;
@@ -563,7 +565,8 @@
           ASSERT(string_chars.data() != NULL);
           // Strings are canonicalized: Allocate a symbol.
           current_token_.literal = &String::ZoneHandle(Z,
-              Symbols::FromUTF32(string_chars.data(), string_chars.length()));
+              Symbols::FromUTF32(T,
+                                 string_chars.data(), string_chars.length()));
         }
         EndStringLiteral();
         return;
@@ -970,7 +973,7 @@
     keywords_[i].kind = token;
     keywords_[i].keyword_chars = Token::Str(token);
     keywords_[i].keyword_len = strlen(Token::Str(token));
-    keywords_[i].keyword_symbol = &Symbols::Keyword(token);
+    keywords_[i].keyword_symbol = &Symbols::Token(token);
 
     int ch = keywords_[i].keyword_chars[0] - 'a';
     if (keywords_char_offset_[ch] == Token::kNumKeywords) {
diff --git a/runtime/vm/scanner.h b/runtime/vm/scanner.h
index 92ebcd6..8d5c6d5 100644
--- a/runtime/vm/scanner.h
+++ b/runtime/vm/scanner.h
@@ -180,6 +180,7 @@
 
   CharAtFunc CallCharAt() const { return char_at_func_; }
 
+  Thread* thread() const { return thread_; }
   Zone* zone() const { return zone_; }
 
   static void PrintTokens(const GrowableTokenStream& ts);
@@ -209,6 +210,7 @@
 
   const CharAtFunc char_at_func_;
 
+  Thread* thread_;
   Zone* zone_;
 
   static KeywordTable keywords_[Token::kNumKeywords];
diff --git a/runtime/vm/scopes_test.cc b/runtime/vm/scopes_test.cc
index 8dac606..807f9f9 100644
--- a/runtime/vm/scopes_test.cc
+++ b/runtime/vm/scopes_test.cc
@@ -12,18 +12,18 @@
 TEST_CASE(LocalScope) {
   // Allocate a couple of local variables first.
   const Type& dynamic_type = Type::ZoneHandle(Type::DynamicType());
-  const String& a = String::ZoneHandle(Symbols::New("a"));
+  const String& a = String::ZoneHandle(Symbols::New(thread, "a"));
   LocalVariable* var_a =
       new LocalVariable(TokenPosition::kNoSource, a, dynamic_type);
   LocalVariable* inner_var_a =
       new LocalVariable(TokenPosition::kNoSource, a, dynamic_type);
-  const String& b = String::ZoneHandle(Symbols::New("b"));
+  const String& b = String::ZoneHandle(Symbols::New(thread, "b"));
   LocalVariable* var_b =
       new LocalVariable(TokenPosition::kNoSource, b, dynamic_type);
-  const String& c = String::ZoneHandle(Symbols::New("c"));
+  const String& c = String::ZoneHandle(Symbols::New(thread, "c"));
   LocalVariable* var_c =
       new LocalVariable(TokenPosition::kNoSource, c, dynamic_type);
-  const String& L = String::ZoneHandle(Symbols::New("L"));
+  const String& L = String::ZoneHandle(Symbols::New(thread, "L"));
   SourceLabel* label_L =
       new SourceLabel(TokenPosition::kNoSource, L, SourceLabel::kFor);
 
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 62048e0..efed3c0 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -9,7 +9,6 @@
 #include "platform/globals.h"
 
 #include "vm/compiler.h"
-#include "vm/coverage.h"
 #include "vm/cpu.h"
 #include "vm/dart_api_impl.h"
 #include "vm/dart_api_state.h"
@@ -2287,121 +2286,6 @@
 }
 
 
-class LibraryCoverageFilter : public CoverageFilter {
- public:
-  explicit LibraryCoverageFilter(const Library& lib) : lib_(lib) {}
-  bool ShouldOutputCoverageFor(const Library& lib,
-                               const Script& script,
-                               const Class& cls,
-                               const Function& func) const {
-    return lib.raw() == lib_.raw();
-  }
- private:
-  const Library& lib_;
-};
-
-
-class ScriptCoverageFilter : public CoverageFilter {
- public:
-  explicit ScriptCoverageFilter(const Script& script)
-      : script_(script) {}
-  bool ShouldOutputCoverageFor(const Library& lib,
-                               const Script& script,
-                               const Class& cls,
-                               const Function& func) const {
-    return script.raw() == script_.raw();
-  }
- private:
-  const Script& script_;
-};
-
-
-class ClassCoverageFilter : public CoverageFilter {
- public:
-  explicit ClassCoverageFilter(const Class& cls) : cls_(cls) {}
-  bool ShouldOutputCoverageFor(const Library& lib,
-                               const Script& script,
-                               const Class& cls,
-                               const Function& func) const {
-    return cls.raw() == cls_.raw();
-  }
- private:
-  const Class& cls_;
-};
-
-
-class FunctionCoverageFilter : public CoverageFilter {
- public:
-  explicit FunctionCoverageFilter(const Function& func) : func_(func) {}
-  bool ShouldOutputCoverageFor(const Library& lib,
-                               const Script& script,
-                               const Class& cls,
-                               const Function& func) const {
-    return func.raw() == func_.raw();
-  }
- private:
-  const Function& func_;
-};
-
-
-static bool GetHitsOrSites(Thread* thread, JSONStream* js, bool as_sites) {
-  if (!thread->isolate()->compilation_allowed()) {
-    js->PrintError(kFeatureDisabled,
-        "Cannot get coverage data when running a precompiled program.");
-    return true;
-  }
-  if (!js->HasParam("targetId")) {
-    CodeCoverage::PrintJSON(thread, js, NULL, as_sites);
-    return true;
-  }
-  const char* target_id = js->LookupParam("targetId");
-  Object& obj = Object::Handle(LookupHeapObject(thread, target_id, NULL));
-  if (obj.raw() == Object::sentinel().raw()) {
-    PrintInvalidParamError(js, "targetId");
-    return true;
-  }
-  if (obj.IsScript()) {
-    ScriptCoverageFilter sf(Script::Cast(obj));
-    CodeCoverage::PrintJSON(thread, js, &sf, as_sites);
-    return true;
-  }
-  if (obj.IsLibrary()) {
-    LibraryCoverageFilter lf(Library::Cast(obj));
-    CodeCoverage::PrintJSON(thread, js, &lf, as_sites);
-    return true;
-  }
-  if (obj.IsClass()) {
-    ClassCoverageFilter cf(Class::Cast(obj));
-    CodeCoverage::PrintJSON(thread, js, &cf, as_sites);
-    return true;
-  }
-  if (obj.IsFunction()) {
-    FunctionCoverageFilter ff(Function::Cast(obj));
-    CodeCoverage::PrintJSON(thread, js, &ff, as_sites);
-    return true;
-  }
-  js->PrintError(kInvalidParams,
-                 "%s: invalid 'targetId' parameter: "
-                 "id '%s' does not correspond to a "
-                 "script, library, class, or function",
-                 js->method(), target_id);
-  return true;
-}
-
-
-static const MethodParameter* get_coverage_params[] = {
-  RUNNABLE_ISOLATE_PARAMETER,
-  new IdParameter("targetId", false),
-  NULL,
-};
-
-
-static bool GetCoverage(Thread* thread, JSONStream* js) {
-  // TODO(rmacnak): Remove this response; it is subsumed by GetCallSiteData.
-  return GetHitsOrSites(thread, js, false);
-}
-
-
 static const char* const report_enum_names[] = {
   SourceReport::kCallSitesStr,
   SourceReport::kCoverageStr,
@@ -2490,18 +2374,6 @@
 }
 
 
-static const MethodParameter* get_call_site_data_params[] = {
-  RUNNABLE_ISOLATE_PARAMETER,
-  new IdParameter("targetId", false),
-  NULL,
-};
-
-
-static bool GetCallSiteData(Thread* thread, JSONStream* js) {
-  return GetHitsOrSites(thread, js, true);
-}
-
-
 static bool AddBreakpointCommon(Thread* thread,
                                 JSONStream* js,
                                 const String& script_uri) {
@@ -3725,7 +3597,7 @@
   JSONObject jsobj(js);
   jsobj.AddProperty("type", "Version");
   jsobj.AddProperty("major", static_cast<intptr_t>(3));
-  jsobj.AddProperty("minor", static_cast<intptr_t>(3));
+  jsobj.AddProperty("minor", static_cast<intptr_t>(4));
   jsobj.AddProperty("_privateMajor", static_cast<intptr_t>(0));
   jsobj.AddProperty("_privateMinor", static_cast<intptr_t>(0));
   return true;
@@ -4015,12 +3887,8 @@
     get_allocation_profile_params },
   { "_getAllocationSamples", GetAllocationSamples,
       get_allocation_samples_params },
-  { "_getCallSiteData", GetCallSiteData,
-    get_call_site_data_params },
   { "getClassList", GetClassList,
     get_class_list_params },
-  { "_getCoverage", GetCoverage,
-    get_coverage_params },
   { "_getCpuProfile", GetCpuProfile,
     get_cpu_profile_params },
   { "_getCpuProfileTimeline", GetCpuProfileTimeline,
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index 68d134f..ee6d8e9 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -2518,5 +2518,5 @@
 3.1 | Add the getSourceReport RPC.  The getObject RPC now accepts offset and count for string objects.  String objects now contain length, offset, and count properties.
 3.2 | Isolate objects now include the runnable bit and many debugger related RPCs will return an error if executed on an isolate before it is runnable.
 3.3 | Pause event now indicates if the isolate is paused at an await, yield, or yield* suspension point via the 'atAsyncSuspension' field. Resume command now supports the step parameter 'OverAsyncSuspension'. A Breakpoint added synthetically by an 'OverAsyncSuspension' resume command identifies itself as such via the 'isSyntheticAsyncContinuation' field.
-3.4 | Add the superType and mixin fields to Class.
+3.4 | Add the superType and mixin fields to Class. Added new pause event 'None'.
 [discuss-list]: https://groups.google.com/a/dartlang.org/forum/#!forum/observatory-discuss
diff --git a/runtime/vm/service_test.cc b/runtime/vm/service_test.cc
index b211fb7..5071bce 100644
--- a/runtime/vm/service_test.cc
+++ b/runtime/vm/service_test.cc
@@ -109,7 +109,7 @@
 
 static RawClass* GetClass(const Library& lib, const char* name) {
   const Class& cls = Class::Handle(
-      lib.LookupClass(String::Handle(Symbols::New(name))));
+      lib.LookupClass(String::Handle(Symbols::New(Thread::Current(), name))));
   EXPECT(!cls.IsNull());  // No ambiguity error expected.
   return cls.raw();
 }
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index f7a880d..c455d30 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -1917,11 +1917,13 @@
   ScriptVisitor script_visitor(thread(), &scripts_);
   heap()->IterateOldObjects(&script_visitor);
 
-  // Stash the symbol table away for writing and reading into the vm isolate,
-  // and reset the symbol table for the regular isolate so that we do not
-  // write these symbols into the snapshot of a regular dart isolate.
-  symbol_table_ = object_store->symbol_table();
-  Symbols::SetupSymbolTable(isolate());
+  if (vm_isolate_snapshot_buffer != NULL) {
+    // Stash the symbol table away for writing and reading into the vm isolate,
+    // and reset the symbol table for the regular isolate so that we do not
+    // write these symbols into the snapshot of a regular dart isolate.
+    symbol_table_ = object_store->symbol_table();
+    Symbols::SetupSymbolTable(isolate());
+  }
 
   forward_list_ = new ForwardList(thread(), SnapshotWriter::FirstObjectId());
   ASSERT(forward_list_ != NULL);
@@ -1936,9 +1938,11 @@
 
 FullSnapshotWriter::~FullSnapshotWriter() {
   delete forward_list_;
-  // We may run Dart code afterwards, restore the symbol table.
-  isolate()->object_store()->set_symbol_table(symbol_table_);
-  symbol_table_ = Array::null();
+  // We may run Dart code afterwards, restore the symbol table if needed.
+  if (!symbol_table_.IsNull()) {
+    isolate()->object_store()->set_symbol_table(symbol_table_);
+    symbol_table_ = Array::null();
+  }
   scripts_ = Array::null();
 }
 
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 26dccc8..573addf 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -943,7 +943,7 @@
   Script& script = Script::Handle(Script::New(url,
                                               source,
                                               RawScript::kScriptTag));
-  const String& lib_url = String::Handle(Symbols::New("TestLib"));
+  const String& lib_url = String::Handle(Symbols::New(thread, "TestLib"));
   Library& lib = Library::Handle(Library::New(lib_url));
   lib.Register();
   EXPECT(CompilerTest::TestCompileScript(lib, script));
diff --git a/runtime/vm/stub_code_arm64_test.cc b/runtime/vm/stub_code_arm64_test.cc
index 7cc0b65..d3a3a46 100644
--- a/runtime/vm/stub_code_arm64_test.cc
+++ b/runtime/vm/stub_code_arm64_test.cc
@@ -20,13 +20,15 @@
 namespace dart {
 
 static Function* CreateFunction(const char* name) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  const String& class_name = String::Handle(Symbols::New(Thread::Current(),
+                                                         "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
   const Library& lib = Library::Handle(Library::New(class_name));
   owner_class.set_library(lib);
-  const String& function_name = String::ZoneHandle(Symbols::New(name));
+  const String& function_name = String::ZoneHandle(
+      Symbols::New(Thread::Current(), name));
   Function& function = Function::ZoneHandle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/stub_code_arm_test.cc b/runtime/vm/stub_code_arm_test.cc
index e7c5bb9..3f0fe4c 100644
--- a/runtime/vm/stub_code_arm_test.cc
+++ b/runtime/vm/stub_code_arm_test.cc
@@ -20,13 +20,15 @@
 namespace dart {
 
 static Function* CreateFunction(const char* name) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  const String& class_name = String::Handle(Symbols::New(Thread::Current(),
+                                                         "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
   const Library& lib = Library::Handle(Library::New(class_name));
   owner_class.set_library(lib);
-  const String& function_name = String::ZoneHandle(Symbols::New(name));
+  const String& function_name = String::ZoneHandle(
+      Symbols::New(Thread::Current(), name));
   Function& function = Function::ZoneHandle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/stub_code_ia32_test.cc b/runtime/vm/stub_code_ia32_test.cc
index a3c20ec..34e8ef3 100644
--- a/runtime/vm/stub_code_ia32_test.cc
+++ b/runtime/vm/stub_code_ia32_test.cc
@@ -20,13 +20,15 @@
 namespace dart {
 
 static Function* CreateFunction(const char* name) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  const String& class_name = String::Handle(Symbols::New(Thread::Current(),
+                                                         "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
   const Library& lib = Library::Handle(Library::New(class_name));
   owner_class.set_library(lib);
-  const String& function_name = String::ZoneHandle(Symbols::New(name));
+  const String& function_name = String::ZoneHandle(
+      Symbols::New(Thread::Current(), name));
   Function& function = Function::ZoneHandle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/stub_code_mips_test.cc b/runtime/vm/stub_code_mips_test.cc
index 7f6d177..c058dcd 100644
--- a/runtime/vm/stub_code_mips_test.cc
+++ b/runtime/vm/stub_code_mips_test.cc
@@ -20,13 +20,15 @@
 namespace dart {
 
 static Function* CreateFunction(const char* name) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  const String& class_name = String::Handle(Symbols::New(Thread::Current(),
+                                                         "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
   const Library& lib = Library::Handle(Library::New(class_name));
   owner_class.set_library(lib);
-  const String& function_name = String::ZoneHandle(Symbols::New(name));
+  const String& function_name = String::ZoneHandle(
+      Symbols::New(Thread::Current(), name));
   Function& function = Function::ZoneHandle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/stub_code_x64_test.cc b/runtime/vm/stub_code_x64_test.cc
index b320f60..6b9b2af 100644
--- a/runtime/vm/stub_code_x64_test.cc
+++ b/runtime/vm/stub_code_x64_test.cc
@@ -20,13 +20,15 @@
 namespace dart {
 
 static Function* CreateFunction(const char* name) {
-  const String& class_name = String::Handle(Symbols::New("ownerClass"));
+  const String& class_name = String::Handle(Symbols::New(Thread::Current(),
+                                                         "ownerClass"));
   const Script& script = Script::Handle();
   const Class& owner_class = Class::Handle(
       Class::New(class_name, script, TokenPosition::kNoSource));
   const Library& lib = Library::Handle(Library::New(class_name));
   owner_class.set_library(lib);
-  const String& function_name = String::ZoneHandle(Symbols::New(name));
+  const String& function_name = String::ZoneHandle(
+      Symbols::New(Thread::Current(), name));
   Function& function = Function::ZoneHandle(
       Function::New(function_name, RawFunction::kRegularFunction,
                     true, false, false, false, false, owner_class,
diff --git a/runtime/vm/symbols.cc b/runtime/vm/symbols.cc
index bad8f74..5fb54bc 100644
--- a/runtime/vm/symbols.cc
+++ b/runtime/vm/symbols.cc
@@ -28,12 +28,13 @@
 PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_LITERAL)
 #undef DEFINE_SYMBOL_LITERAL
 
-  "",  // matches kKwTableStart.
+  "",  // matches kTokenTableStart.
 
-#define DEFINE_KEYWORD_SYMBOL_INDEX(t, s, p, a)                                \
+#define DEFINE_TOKEN_SYMBOL_INDEX(t, s, p, a)                                  \
   s,
-  DART_KEYWORD_LIST(DEFINE_KEYWORD_SYMBOL_INDEX)
-#undef DEFINE_KEYWORD_SYMBOL_INDEX
+  DART_TOKEN_LIST(DEFINE_TOKEN_SYMBOL_INDEX)
+  DART_KEYWORD_LIST(DEFINE_TOKEN_SYMBOL_INDEX)
+#undef DEFINE_TOKEN_SYMBOL_INDEX
 };
 
 RawString* StringFrom(const uint8_t* data, intptr_t len, Heap::Space space) {
@@ -61,6 +62,10 @@
     return result.raw();
   }
   bool Equals(const String& other) const {
+    ASSERT(other.HasHash());
+    if (other.Hash() != hash_) {
+      return false;
+    }
     return other.Equals(data_, len_);
   }
   intptr_t Hash() const { return hash_; }
@@ -82,6 +87,10 @@
   }
   RawString* ToSymbol() const;
   bool Equals(const String& other) const {
+    ASSERT(other.HasHash());
+    if (other.Hash() != hash_) {
+      return false;
+    }
     return other.Equals(str_, begin_index_, len_);
   }
   intptr_t Hash() const { return hash_; }
@@ -114,6 +123,10 @@
       : str1_(str1), str2_(str2), hash_(String::HashConcat(str1, str2)) {}
   RawString* ToSymbol() const;
   bool Equals(const String& other) const {
+    ASSERT(other.HasHash());
+    if (other.Hash() != hash_) {
+      return false;
+    }
     return other.EqualsConcat(str1_, str2_);
   }
   intptr_t Hash() const { return hash_; }
@@ -134,8 +147,22 @@
 
 class SymbolTraits {
  public:
+  static const char* Name() { return "SymbolTraits"; }
+
   static bool IsMatch(const Object& a, const Object& b) {
-    return String::Cast(a).Equals(String::Cast(b));
+    const String& a_str = String::Cast(a);
+    const String& b_str = String::Cast(b);
+    ASSERT(a_str.HasHash());
+    ASSERT(b_str.HasHash());
+    if (a_str.Hash() != b_str.Hash()) {
+      return false;
+    }
+    intptr_t a_len = a_str.Length();
+    if (a_len != b_str.Length()) {
+      return false;
+    }
+    // Use a comparison which does not consider the state of the canonical bit.
+    return a_str.Equals(b_str, 0, a_len);
   }
   template<typename CharType>
   static bool IsMatch(const CharArray<CharType>& array, const Object& obj) {
@@ -180,13 +207,13 @@
 }
 
 
-const String& Symbols::Keyword(Token::Kind keyword) {
-  const int kw_index = keyword - Token::kFirstKeyword;
-  ASSERT((0 <= kw_index) && (kw_index < Token::kNumKeywords));
-  // First keyword symbol is in symbol_handles_[kKwTableStart + 1].
-  const intptr_t keyword_id = Symbols::kKwTableStart + 1 + kw_index;
-  ASSERT(symbol_handles_[keyword_id] != NULL);
-  return *symbol_handles_[keyword_id];
+const String& Symbols::Token(Token::Kind token) {
+  const int tok_index = token;
+  ASSERT((0 <= tok_index) && (tok_index < Token::kNumTokens));
+  // First keyword symbol is in symbol_handles_[kTokenTableStart + 1].
+  const intptr_t token_id = Symbols::kTokenTableStart + 1 + tok_index;
+  ASSERT(symbol_handles_[token_id] != NULL);
+  return *symbol_handles_[token_id];
 }
 
 
@@ -212,9 +239,8 @@
     String* str = String::ReadOnlyHandle();
     *str = OneByteString::New(names[i], Heap::kOld);
     str->Hash();
-    str->SetCanonical();
-    bool present = table.Insert(*str);
-    ASSERT(!present);
+    *str ^= table.InsertOrGet(*str);
+    str->SetCanonical();  // Make canonical once entered.
     symbol_handles_[i] = str;
   }
 
@@ -227,9 +253,9 @@
     String* str = String::ReadOnlyHandle();
     *str = OneByteString::New(&ch, 1, Heap::kOld);
     str->Hash();
-    str->SetCanonical();
-    bool present = table.Insert(*str);
-    ASSERT(!present);
+    *str ^= table.InsertOrGet(*str);
+    ASSERT(predefined_[c] == NULL);
+    str->SetCanonical();  // Make canonical once entered.
     predefined_[c] = str->raw();
     symbol_handles_[idx] = str;
   }
@@ -294,9 +320,8 @@
   for (intptr_t i = 1; i < Symbols::kNullCharId; i++) {
     str = OneByteString::New(names[i], Heap::kOld);
     str.Hash();
-    str.SetCanonical();
-    bool present = table.Insert(str);
-    ASSERT(!present);
+    str ^= table.InsertOrGet(str);
+    str.SetCanonical();  // Make canonical once entered.
   }
 
   // Add Latin1 characters as Symbols, so that Symbols::FromCharCode is fast.
@@ -307,9 +332,8 @@
     uint8_t ch = static_cast<uint8_t>(c);
     str = OneByteString::New(&ch, 1, Heap::kOld);
     str.Hash();
-    str.SetCanonical();
-    bool present = table.Insert(str);
-    ASSERT(!present);
+    str ^= table.InsertOrGet(str);
+    str.SetCanonical();  // Make canonical once entered.
   }
 
   isolate->object_store()->set_symbol_table(table.Release());
@@ -421,63 +445,88 @@
 }
 
 
-RawString* Symbols::New(const char* cstr, intptr_t len) {
+RawString* Symbols::New(Thread* thread, const char* cstr, intptr_t len) {
   ASSERT((cstr != NULL) && (len >= 0));
   const uint8_t* utf8_array = reinterpret_cast<const uint8_t*>(cstr);
-  return Symbols::FromUTF8(utf8_array, len);
+  return Symbols::FromUTF8(thread, utf8_array, len);
 }
 
 
-RawString* Symbols::FromUTF8(const uint8_t* utf8_array, intptr_t array_len) {
+RawString* Symbols::FromUTF8(Thread* thread,
+                             const uint8_t* utf8_array,
+                             intptr_t array_len) {
   if (array_len == 0 || utf8_array == NULL) {
-    return FromLatin1(reinterpret_cast<uint8_t*>(NULL), 0);
+    return FromLatin1(thread, reinterpret_cast<uint8_t*>(NULL), 0);
   }
   Utf8::Type type;
   intptr_t len = Utf8::CodeUnitCount(utf8_array, array_len, &type);
   ASSERT(len != 0);
-  Zone* zone = Thread::Current()->zone();
+  Zone* zone = thread->zone();
   if (type == Utf8::kLatin1) {
     uint8_t* characters = zone->Alloc<uint8_t>(len);
     Utf8::DecodeToLatin1(utf8_array, array_len, characters, len);
-    return FromLatin1(characters, len);
+    return FromLatin1(thread, characters, len);
   }
   ASSERT((type == Utf8::kBMP) || (type == Utf8::kSupplementary));
   uint16_t* characters = zone->Alloc<uint16_t>(len);
   Utf8::DecodeToUTF16(utf8_array, array_len, characters, len);
-  return FromUTF16(characters, len);
+  return FromUTF16(thread, characters, len);
 }
 
 
-RawString* Symbols::FromLatin1(const uint8_t* latin1_array, intptr_t len) {
-  return NewSymbol(Latin1Array(latin1_array, len));
+RawString* Symbols::FromLatin1(Thread* thread,
+                               const uint8_t* latin1_array,
+                               intptr_t len) {
+  return NewSymbol(thread, Latin1Array(latin1_array, len));
 }
 
 
-RawString* Symbols::FromUTF16(const uint16_t* utf16_array, intptr_t len) {
-  return NewSymbol(UTF16Array(utf16_array, len));
+RawString* Symbols::FromUTF16(Thread* thread,
+                              const uint16_t* utf16_array,
+                              intptr_t len) {
+  return NewSymbol(thread, UTF16Array(utf16_array, len));
 }
 
 
-RawString* Symbols::FromUTF32(const int32_t* utf32_array, intptr_t len) {
-  return NewSymbol(UTF32Array(utf32_array, len));
+RawString* Symbols::FromUTF32(Thread* thread,
+                              const int32_t* utf32_array,
+                              intptr_t len) {
+  return NewSymbol(thread, UTF32Array(utf32_array, len));
 }
 
 
-RawString* Symbols::FromConcat(const String& str1, const String& str2) {
+RawString* Symbols::FromConcat(Thread* thread,
+                               const String& str1,
+                               const String& str2) {
   if (str1.Length() == 0) {
-    return New(str2);
+    return New(thread, str2);
   } else if (str2.Length() == 0) {
-    return New(str1);
+    return New(thread, str1);
   } else {
-    return NewSymbol(ConcatString(str1, str2));
+    return NewSymbol(thread, ConcatString(str1, str2));
   }
 }
 
 
+RawString* Symbols::FromGet(Thread* thread, const String& str) {
+  return FromConcat(thread, GetterPrefix(), str);
+}
+
+
+RawString* Symbols::FromSet(Thread* thread, const String& str) {
+  return FromConcat(thread, SetterPrefix(), str);
+}
+
+
+RawString* Symbols::FromDot(Thread* thread, const String& str) {
+  return FromConcat(thread, str, Dot());
+}
+
+
 // TODO(srdjan): If this becomes performance critical code, consider looking
 // up symbol from hash of pieces instead of concatenating them first into
 // a string.
-RawString* Symbols::FromConcatAll(
+RawString* Symbols::FromConcatAll(Thread* thread,
     const GrowableHandlePtrArray<const String>& strs) {
   const intptr_t strs_length = strs.length();
   GrowableArray<intptr_t> lengths(strs_length);
@@ -499,7 +548,7 @@
   }
   const bool is_one_byte_string = char_size == kOneByteChar;
 
-  Zone* zone = Thread::Current()->zone();
+  Zone* zone = thread->zone();
   if (is_one_byte_string) {
     uint8_t* buffer = zone->Alloc<uint8_t>(len_sum);
     const uint8_t* const orig_buffer = buffer;
@@ -517,7 +566,7 @@
       }
     }
     ASSERT(len_sum == buffer - orig_buffer);
-    return Symbols::FromLatin1(orig_buffer, len_sum);
+    return Symbols::FromLatin1(thread, orig_buffer, len_sum);
   } else {
     uint16_t* buffer = zone->Alloc<uint16_t>(len_sum);
     const uint16_t* const orig_buffer = buffer;
@@ -544,16 +593,14 @@
       }
     }
     ASSERT(len_sum == buffer - orig_buffer);
-    return Symbols::FromUTF16(orig_buffer, len_sum);
+    return Symbols::FromUTF16(thread, orig_buffer, len_sum);
   }
 }
 
 
 // StringType can be StringSlice, ConcatString, or {Latin1,UTF16,UTF32}Array.
 template<typename StringType>
-RawString* Symbols::NewSymbol(const StringType& str) {
-  Thread* thread = Thread::Current();
-  Isolate* isolate = thread->isolate();
+RawString* Symbols::NewSymbol(Thread* thread, const StringType& str) {
   Zone* zone = thread->zone();
   String& symbol = String::Handle(zone);
   {
@@ -563,6 +610,7 @@
     table.Release();
   }
   if (symbol.IsNull()) {
+    Isolate* isolate = thread->isolate();
     SafepointMutexLocker ml(isolate->symbols_mutex());
     SymbolTable table(zone, isolate->object_store()->symbol_table());
     symbol ^= table.InsertNewOrGet(str);
@@ -575,8 +623,7 @@
 
 
 template<typename StringType>
-RawString* Symbols::Lookup(const StringType& str) {
-  Thread* thread = Thread::Current();
+RawString* Symbols::Lookup(Thread* thread, const StringType& str) {
   Isolate* isolate = thread->isolate();
   Zone* zone = thread->zone();
   String& symbol = String::Handle(zone);
@@ -599,42 +646,63 @@
 }
 
 
-RawString* Symbols::LookupFromConcat(const String& str1, const String& str2) {
+RawString* Symbols::LookupFromConcat(
+    Thread* thread, const String& str1, const String& str2) {
   if (str1.Length() == 0) {
-    return Lookup(str2);
+    return Lookup(thread, str2);
   } else if (str2.Length() == 0) {
-    return Lookup(str1);
+    return Lookup(thread, str1);
   } else {
-    return Lookup(ConcatString(str1, str2));
+    return Lookup(thread, ConcatString(str1, str2));
   }
 }
 
 
-RawString* Symbols::New(const String& str) {
+RawString* Symbols::LookupFromGet(Thread* thread, const String& str) {
+  return LookupFromConcat(thread, GetterPrefix(), str);
+}
+
+
+RawString* Symbols::LookupFromSet(Thread* thread, const String& str) {
+  return LookupFromConcat(thread, SetterPrefix(), str);
+}
+
+
+RawString* Symbols::LookupFromDot(Thread* thread, const String& str) {
+  return LookupFromConcat(thread, str, Dot());
+}
+
+
+RawString* Symbols::New(Thread* thread, const String& str) {
   if (str.IsSymbol()) {
     return str.raw();
   }
-  return New(str, 0, str.Length());
+  return New(thread, str, 0, str.Length());
 }
 
 
-RawString* Symbols::New(const String& str, intptr_t begin_index, intptr_t len) {
-  return NewSymbol(StringSlice(str, begin_index, len));
+RawString* Symbols::New(Thread* thread,
+                        const String& str,
+                        intptr_t begin_index,
+                        intptr_t len) {
+  return NewSymbol(thread, StringSlice(str, begin_index, len));
 }
 
 
 
-RawString* Symbols::NewFormatted(const char* format, ...) {
+RawString* Symbols::NewFormatted(Thread* thread, const char* format, ...) {
   va_list args;
   va_start(args, format);
-  RawString* result = NewFormattedV(format, args);
+  RawString* result = NewFormattedV(thread, format, args);
   NoSafepointScope no_safepoint;
   va_end(args);
   return result;
 }
 
 
-RawString* Symbols::NewFormattedV(const char* format, va_list args) {
+RawString* Symbols::NewFormattedV(Thread* thread,
+                                  const char* format,
+                                  va_list args) {
   va_list args_copy;
   va_copy(args_copy, args);
   intptr_t len = OS::VSNPrint(NULL, 0, format, args_copy);
@@ -644,13 +712,13 @@
   char* buffer = zone->Alloc<char>(len + 1);
   OS::VSNPrint(buffer, (len + 1), format, args);
 
-  return Symbols::New(buffer);
+  return Symbols::New(thread, buffer);
 }
 
 
-RawString* Symbols::FromCharCode(int32_t char_code) {
+RawString* Symbols::FromCharCode(Thread* thread, int32_t char_code) {
   if (char_code > kMaxOneCharCodeSymbol) {
-    return FromUTF32(&char_code, 1);
+    return FromUTF32(thread, &char_code, 1);
   }
   return predefined_[char_code];
 }
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index d5f3498..f20aa44 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -33,6 +33,7 @@
   V(DefaultLabel, ":L")                                                        \
   V(Other, "other")                                                            \
   V(Call, "call")                                                              \
+  V(GetCall, "get:call")                                                       \
   V(Current, "current")                                                        \
   V(_current, "_current")                                                      \
   V(MoveNext, "moveNext")                                                      \
@@ -55,6 +56,7 @@
   V(Values, "values")                                                          \
   V(_EnumNames, "_enum_names")                                                 \
   V(ExprTemp, ":expr_temp")                                                    \
+  V(FinallyRetVal, ":finally_ret_val")                                         \
   V(AnonymousClosure, "<anonymous closure>")                                   \
   V(AnonymousSignature, "<anonymous signature>")                               \
   V(ImplicitClosure, "<implicit closure>")                                     \
@@ -406,12 +408,13 @@
     PREDEFINED_SYMBOLS_LIST(DEFINE_SYMBOL_INDEX)
 #undef DEFINE_SYMBOL_INDEX
 
-    kKwTableStart,  // First keyword at kKwTableStart + 1.
+    kTokenTableStart,  // First token at kTokenTableStart + 1.
 
-#define DEFINE_KEYWORD_SYMBOL_INDEX(t, s, p, a)                                \
+#define DEFINE_TOKEN_SYMBOL_INDEX(t, s, p, a)                                  \
     t##Id,
-    DART_KEYWORD_LIST(DEFINE_KEYWORD_SYMBOL_INDEX)
-#undef DEFINE_KEYWORD_SYMBOL_INDEX
+    DART_TOKEN_LIST(DEFINE_TOKEN_SYMBOL_INDEX)
+    DART_KEYWORD_LIST(DEFINE_TOKEN_SYMBOL_INDEX)
+#undef DEFINE_TOKEN_SYMBOL_INDEX
 
     kNullCharId,  // One char code symbol starts here and takes up 256 entries.
     kMaxPredefinedId = kNullCharId + kMaxOneCharCodeSymbol + 1,
@@ -524,7 +527,7 @@
     return *(symbol_handles_[kNullCharId + '~']);
   }
 
-  static const String& Empty() { return *(symbol_handles_[kKwTableStart]); }
+  static const String& Empty() { return *(symbol_handles_[kTokenTableStart]); }
   static const String& False() { return *(symbol_handles_[kFALSEId]); }
   static const String& Library() { return *(symbol_handles_[kLIBRARYId]); }
   static const String& Super() { return *(symbol_handles_[kSUPERId]); }
@@ -542,11 +545,12 @@
   // Access methods for symbol handles stored in the vm isolate for keywords.
 #define DEFINE_SYMBOL_HANDLE_ACCESSOR(t, s, p, a)                              \
   static const String& t() { return *(symbol_handles_[t##Id]); }
+  DART_TOKEN_LIST(DEFINE_SYMBOL_HANDLE_ACCESSOR)
   DART_KEYWORD_LIST(DEFINE_SYMBOL_HANDLE_ACCESSOR)
 #undef DEFINE_SYMBOL_HANDLE_ACCESSOR
 
-  // Get symbol for scanner keyword.
-  static const String& Keyword(Token::Kind keyword);
+  // Get symbol for scanner token.
+  static const String& Token(Token::Kind token);
 
   // Initialize frequently used symbols in the vm isolate.
   static void InitOnce(Isolate* isolate);
@@ -569,41 +573,58 @@
   // Creates a Symbol given a C string that is assumed to contain
   // UTF-8 encoded characters and '\0' is considered a termination character.
   // TODO(7123) - Rename this to FromCString(....).
-  static RawString* New(const char* cstr) {
-    return New(cstr, strlen(cstr));
+  static RawString* New(Thread* thread, const char* cstr) {
+    return New(thread, cstr, strlen(cstr));
   }
-  static RawString* New(const char* cstr, intptr_t length);
+  static RawString* New(Thread* thread, const char* cstr, intptr_t length);
 
   // Creates a new Symbol from an array of UTF-8 encoded characters.
-  static RawString* FromUTF8(const uint8_t* utf8_array, intptr_t len);
+  static RawString* FromUTF8(Thread* thread,
+                             const uint8_t* utf8_array,
+                             intptr_t len);
 
   // Creates a new Symbol from an array of Latin-1 encoded characters.
-  static RawString* FromLatin1(const uint8_t* latin1_array, intptr_t len);
+  static RawString* FromLatin1(Thread* thread,
+                               const uint8_t* latin1_array,
+                               intptr_t len);
 
   // Creates a new Symbol from an array of UTF-16 encoded characters.
-  static RawString* FromUTF16(const uint16_t* utf16_array, intptr_t len);
+  static RawString* FromUTF16(Thread* thread,
+                              const uint16_t* utf16_array,
+                              intptr_t len);
 
   // Creates a new Symbol from an array of UTF-32 encoded characters.
-  static RawString* FromUTF32(const int32_t* utf32_array, intptr_t len);
+  static RawString* FromUTF32(Thread* thread,
+                              const int32_t* utf32_array,
+                              intptr_t len);
 
-  static RawString* New(const String& str);
-  static RawString* New(const String& str,
+  static RawString* New(Thread* thread, const String& str);
+  static RawString* New(Thread* thread,
+                        const String& str,
                         intptr_t begin_index,
                         intptr_t length);
 
-  static RawString* NewFormatted(const char* format, ...)
-      PRINTF_ATTRIBUTE(1, 2);
-  static RawString* NewFormattedV(const char* format, va_list args);
+  static RawString* NewFormatted(Thread* thread, const char* format, ...)
+      PRINTF_ATTRIBUTE(2, 3);
+  static RawString* NewFormattedV(Thread* thread,
+                                  const char* format,
+                                  va_list args);
 
-  static RawString* FromConcat(const String& str1, const String& str2);
+  static RawString* FromConcat(Thread* thread,
+                               const String& str1,
+                               const String& str2);
 
-  static RawString* FromConcatAll(
+  static RawString* FromConcatAll(Thread* thread,
       const GrowableHandlePtrArray<const String>& strs);
 
+  static RawString* FromGet(Thread* thread, const String& str);
+  static RawString* FromSet(Thread* thread, const String& str);
+  static RawString* FromDot(Thread* thread, const String& str);
+
   // Returns char* of predefined symbol.
   static const char* Name(SymbolId symbol);
 
-  static RawString* FromCharCode(int32_t char_code);
+  static RawString* FromCharCode(Thread* thread, int32_t char_code);
 
   static RawString** PredefinedAddress() {
     return reinterpret_cast<RawString**>(&predefined_);
@@ -613,10 +634,16 @@
 
   // Returns Symbol::Null if no symbol is found.
   template<typename StringType>
-  static RawString* Lookup(const StringType& str);
+  static RawString* Lookup(Thread* thread, const StringType& str);
 
   // Returns Symbol::Null if no symbol is found.
-  static RawString* LookupFromConcat(const String& str1, const String& str2);
+  static RawString* LookupFromConcat(Thread* thread,
+                                     const String& str1,
+                                     const String& str2);
+
+  static RawString* LookupFromGet(Thread* thread, const String& str);
+  static RawString* LookupFromSet(Thread* thread, const String& str);
+  static RawString* LookupFromDot(Thread* thread, const String& str);
 
  private:
   enum {
@@ -629,7 +656,7 @@
                        intptr_t* capacity);
 
   template<typename StringType>
-  static RawString* NewSymbol(const StringType& str);
+  static RawString* NewSymbol(Thread* thread, const StringType& str);
 
   static intptr_t LookupVMSymbol(RawObject* obj);
   static RawObject* GetVMSymbol(intptr_t object_id);
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index de0f09c..24064f0 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -208,7 +208,8 @@
 
 
 void AssemblerTest::Assemble() {
-  const String& function_name = String::ZoneHandle(Symbols::New(name_));
+  const String& function_name = String::ZoneHandle(
+      Symbols::New(Thread::Current(), name_));
   const Class& cls = Class::ZoneHandle(
       Class::New(function_name,
                  Script::Handle(),
@@ -237,7 +238,8 @@
                                     new LocalScope(NULL, 0, 0))),
     default_parameter_values_(new ZoneGrowableArray<const Instance*> ()) {
   ASSERT(name != NULL);
-  const String& function_name = String::ZoneHandle(Symbols::New(name));
+  const String& function_name = String::ZoneHandle(
+      Symbols::New(Thread::Current(), name));
   // Add function to a class and that class to the class dictionary so that
   // frame walking can be used.
   const Class& cls = Class::ZoneHandle(
diff --git a/runtime/vm/virtual_memory_android.cc b/runtime/vm/virtual_memory_android.cc
index 16aa834..f84e2ef 100644
--- a/runtime/vm/virtual_memory_android.cc
+++ b/runtime/vm/virtual_memory_android.cc
@@ -83,6 +83,7 @@
 
 bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
+         !Isolate::Current()->HasMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   uword start_address = reinterpret_cast<uword>(address);
   uword end_address = start_address + size;
diff --git a/runtime/vm/virtual_memory_linux.cc b/runtime/vm/virtual_memory_linux.cc
index 0228f68..8973345 100644
--- a/runtime/vm/virtual_memory_linux.cc
+++ b/runtime/vm/virtual_memory_linux.cc
@@ -82,6 +82,7 @@
 
 bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
+         !Isolate::Current()->HasMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   uword start_address = reinterpret_cast<uword>(address);
   uword end_address = start_address + size;
diff --git a/runtime/vm/virtual_memory_macos.cc b/runtime/vm/virtual_memory_macos.cc
index 484ad78..1d23ead 100644
--- a/runtime/vm/virtual_memory_macos.cc
+++ b/runtime/vm/virtual_memory_macos.cc
@@ -83,6 +83,7 @@
 
 bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
+         !Isolate::Current()->HasMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   uword start_address = reinterpret_cast<uword>(address);
   uword end_address = start_address + size;
diff --git a/runtime/vm/virtual_memory_win.cc b/runtime/vm/virtual_memory_win.cc
index 2584613..8ea8fa5 100644
--- a/runtime/vm/virtual_memory_win.cc
+++ b/runtime/vm/virtual_memory_win.cc
@@ -66,6 +66,7 @@
 
 bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) {
   ASSERT(Thread::Current()->IsMutatorThread() ||
+         !Isolate::Current()->HasMutatorThread() ||
          Isolate::Current()->mutator_thread()->IsAtSafepoint());
   uword start_address = reinterpret_cast<uword>(address);
   uword end_address = start_address + size;
diff --git a/runtime/vm/vm_sources.gypi b/runtime/vm/vm_sources.gypi
index ee08b98..f73d16d 100644
--- a/runtime/vm/vm_sources.gypi
+++ b/runtime/vm/vm_sources.gypi
@@ -107,9 +107,6 @@
     'constants_ia32.h',
     'constants_mips.h',
     'constants_x64.h',
-    'coverage.cc',
-    'coverage.h',
-    'coverage_test.cc',
     'cpu.h',
     'cpu_arm.cc',
     'cpu_arm64.cc',
diff --git a/runtime/vm/weak_code.cc b/runtime/vm/weak_code.cc
index d68cfff..1305443 100644
--- a/runtime/vm/weak_code.cc
+++ b/runtime/vm/weak_code.cc
@@ -113,6 +113,7 @@
       function.SwitchToUnoptimizedCode();
     } else if (function.unoptimized_code() == code.raw()) {
       ReportSwitchingCode(code);
+      function.set_was_compiled(false);
       function.ClearICDataArray();
       // Remove the code object from the function. The next time the
       // function is invoked, it will be compiled again.
diff --git a/sdk/lib/_blink/dartium/_blink_dartium.dart b/sdk/lib/_blink/dartium/_blink_dartium.dart
index 609fd88..479b231 100644
--- a/sdk/lib/_blink/dartium/_blink_dartium.dart
+++ b/sdk/lib/_blink/dartium/_blink_dartium.dart
@@ -23308,39 +23308,6 @@
   static initializeCustomElement(element) native "Utils_initializeCustomElement";
 }
 
-class Blink_DOMWindowCrossFrame {
-  // FIXME: Return to using explicit cross frame entry points after roll to M35
-  static get_history(_DOMWindowCrossFrame) native "Window_history_cross_frame_Getter";
-
-  static get_location(_DOMWindowCrossFrame) native "Window_location_cross_frame_Getter";
-
-  static get_closed(_DOMWindowCrossFrame) native "Window_closed_Getter";
-
-  static get_opener(_DOMWindowCrossFrame) native "Window_opener_Getter";
-
-  static get_parent(_DOMWindowCrossFrame) native "Window_parent_Getter";
-
-  static get_top(_DOMWindowCrossFrame) native "Window_top_Getter";
-
-  static close(_DOMWindowCrossFrame) native "Window_close_Callback";
-
-  static postMessage(_DOMWindowCrossFrame, message, targetOrigin, [messagePorts]) native "Window_postMessage_Callback";
-}
-
-class Blink_HistoryCrossFrame {
-  // _HistoryCrossFrame native entry points
-  static back(_HistoryCrossFrame) native "History_back_Callback";
-
-  static forward(_HistoryCrossFrame) native "History_forward_Callback";
-
-  static go(_HistoryCrossFrame, distance) native "History_go_Callback";
-}
-
-class Blink_LocationCrossFrame {
-  // _LocationCrossFrame native entry points
-  static set_href(_LocationCrossFrame, h) native "Location_href_Setter";
-}
-
 class Blink_DOMStringMap {
   // _DOMStringMap native entry  points
   static containsKey(_DOMStringMap, key) native "DOMStringMap_containsKey_Callback";
diff --git a/sdk/lib/convert/ascii.dart b/sdk/lib/convert/ascii.dart
index c8b5903..6302333 100644
--- a/sdk/lib/convert/ascii.dart
+++ b/sdk/lib/convert/ascii.dart
@@ -69,7 +69,8 @@
 
 // Superclass for [AsciiEncoder] and [Latin1Encoder].
 // Generalizes common operations that only differ by a mask;
-class _UnicodeSubsetEncoder extends Converter<String, List<int>> {
+class _UnicodeSubsetEncoder extends
+    ChunkedConverter<String, List<int>, String, List<int>> {
   final int _subsetMask;
 
   const _UnicodeSubsetEncoder(this._subsetMask);
@@ -154,7 +155,8 @@
  * This class converts Latin-1 bytes (lists of unsigned 8-bit integers)
  * to a string.
  */
-abstract class _UnicodeSubsetDecoder extends Converter<List<int>, String> {
+abstract class _UnicodeSubsetDecoder extends
+    ChunkedConverter<List<int>, String, List<int>, String> {
   final bool _allowInvalid;
   final int _subsetMask;
 
diff --git a/sdk/lib/convert/base64.dart b/sdk/lib/convert/base64.dart
index eb7519a..ff3a439 100644
--- a/sdk/lib/convert/base64.dart
+++ b/sdk/lib/convert/base64.dart
@@ -5,13 +5,11 @@
 part of dart.convert;
 
 /**
- * An instance of [Base64Codec].
+ * A [base64](https://tools.ietf.org/html/rfc4648) encoder and decoder.
  *
- * This instance provides a convenient access to
- * [base64](https://tools.ietf.org/html/rfc4648) encoding and decoding.
- *
- * It encodes and decodes using the default base64 alphabet, does not allow
- * any invalid characters when decoding, and requires padding.
+ * It encodes using the default base64 alphabet,
+ * decodes using both the base64 and base64url alphabets,
+ * does not allow invalid characters and requires padding.
  *
  * Examples:
  *
@@ -21,6 +19,21 @@
  */
 const Base64Codec BASE64 = const Base64Codec();
 
+/**
+ * A [base64url](https://tools.ietf.org/html/rfc4648) encoder and decoder.
+ *
+ * It encodes and decodes using the base64url alphabet,
+ * decodes using both the base64 and base64url alphabets,
+ * does not allow invalid characters and requires padding.
+ *
+ * Examples:
+ *
+ *     var encoded = BASE64.encode([0x62, 0x6c, 0xc3, 0xa5, 0x62, 0xc3, 0xa6,
+ *                                  0x72, 0x67, 0x72, 0xc3, 0xb8, 0x64]);
+ *     var decoded = BASE64.decode("YmzDpWLDpnJncsO4ZAo=");
+ */
+const Base64Codec BASE64URL = const Base64Codec.urlSafe();
+
 // Constants used in more than one class.
 const int _paddingChar = 0x3d;  // '='.
 
@@ -30,15 +43,18 @@
  * A [Base64Codec] allows base64 encoding bytes into ASCII strings and
  * decoding valid encodings back to bytes.
  *
- * This implementation only handles the simplest RFC 4648 base-64 encoding.
+ * This implementation only handles the simplest RFC 4648 base64 and base64url
+ * encodings.
  * It does not allow invalid characters when decoding and it requires,
  * and generates, padding so that the input is always a multiple of four
  * characters.
  */
 class Base64Codec extends Codec<List<int>, String> {
-  const Base64Codec();
+  final Base64Encoder _encoder;
+  const Base64Codec() : _encoder = const Base64Encoder();
+  const Base64Codec.urlSafe() : _encoder = const Base64Encoder.urlSafe();
 
-  Base64Encoder get encoder => const Base64Encoder();
+  Base64Encoder get encoder => _encoder;
 
   Base64Decoder get decoder => const Base64Decoder();
 }
@@ -48,44 +64,46 @@
 // ------------------------------------------------------------------------
 
 /**
- * Base-64 encoding converter.
+ * Base64 and base64url encoding converter.
  *
- * Encodes lists of bytes using base64 encoding.
- * The result are ASCII strings using a restricted alphabet.
+ * Encodes lists of bytes using base64 or base64url encoding.
+ *
+ * The results are ASCII strings using a restricted alphabet.
  */
-class Base64Encoder extends Converter<List<int>, String> {
-  const Base64Encoder();
+class Base64Encoder extends
+    ChunkedConverter<List<int>, String, List<int>, String> {
+  final bool _urlSafe;
+
+  const Base64Encoder() : _urlSafe = false;
+  const Base64Encoder.urlSafe() : _urlSafe = true;
 
   String convert(List<int> input) {
     if (input.isEmpty) return "";
-    var encoder = new _Base64Encoder();
+    var encoder = new _Base64Encoder(_urlSafe);
     Uint8List buffer = encoder.encode(input, 0, input.length, true);
     return new String.fromCharCodes(buffer);
   }
 
   ByteConversionSink startChunkedConversion(Sink<String> sink) {
     if (sink is StringConversionSink) {
-      return new _Utf8Base64EncoderSink(sink.asUtf8Sink(false));
+      return new _Utf8Base64EncoderSink(sink.asUtf8Sink(false), _urlSafe);
     }
-    return new _AsciiBase64EncoderSink(sink);
-  }
-
-  Stream<String> bind(Stream<List<int>> stream) {
-    return new Stream<String>.eventTransformed(
-        stream,
-        (EventSink sink) =>
-            new _ConverterStreamEventSink<List<int>, String>(this, sink));
+    return new _AsciiBase64EncoderSink(sink, _urlSafe);
   }
 }
 
 /**
- * Helper class for encoding bytes to BASE-64.
+ * Helper class for encoding bytes to base64.
  */
 class _Base64Encoder {
   /** The RFC 4648 base64 encoding alphabet. */
   static const String _base64Alphabet =
       "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
+  /** The RFC 4648 base64url encoding alphabet. */
+  static const String _base64urlAlphabet =
+      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
+
   /** Shift-count to extract the values stored in [_state]. */
   static const int _valueShift = 2;
 
@@ -103,6 +121,12 @@
    */
   int _state = 0;
 
+  /** Alphabet used for encoding. */
+  final String _alphabet;
+
+  _Base64Encoder(bool urlSafe)
+      : _alphabet = urlSafe ? _base64urlAlphabet : _base64Alphabet;
+
   /** Encode count and bits into a value to be stored in [_state]. */
   static int _encodeState(int count, int bits) {
     assert(count <= _countMask);
@@ -148,15 +172,17 @@
       bufferLength += 4;  // Room for padding.
     }
     var output = createBuffer(bufferLength);
-    _state = encodeChunk(bytes, start, end, isLast, output, 0, _state);
+    _state = encodeChunk(_alphabet, bytes, start, end, isLast,
+                         output, 0, _state);
     if (bufferLength > 0) return output;
     // If the input plus the data in state is still less than three bytes,
     // there may not be any output.
     return null;
   }
 
-  static int encodeChunk(List<int> bytes, int start, int end, bool isLast,
-                          Uint8List output, int outputIndex, int state) {
+  static int encodeChunk(String alphabet,
+                         List<int> bytes, int start, int end, bool isLast,
+                         Uint8List output, int outputIndex, int state) {
     int bits = _stateBits(state);
     // Count number of missing bytes in three-byte chunk.
     int expectedChars = 3 - _stateCount(state);
@@ -172,20 +198,20 @@
       expectedChars--;
       if (expectedChars == 0) {
         output[outputIndex++] =
-            _base64Alphabet.codeUnitAt((bits >> 18) & _sixBitMask);
+            alphabet.codeUnitAt((bits >> 18) & _sixBitMask);
         output[outputIndex++] =
-            _base64Alphabet.codeUnitAt((bits >> 12) & _sixBitMask);
+            alphabet.codeUnitAt((bits >> 12) & _sixBitMask);
         output[outputIndex++] =
-            _base64Alphabet.codeUnitAt((bits >> 6) & _sixBitMask);
+            alphabet.codeUnitAt((bits >> 6) & _sixBitMask);
         output[outputIndex++] =
-            _base64Alphabet.codeUnitAt(bits & _sixBitMask);
+            alphabet.codeUnitAt(bits & _sixBitMask);
         expectedChars = 3;
         bits = 0;
       }
     }
     if (byteOr >= 0 && byteOr <= 255) {
       if (isLast && expectedChars < 3) {
-        writeFinalChunk(output, outputIndex, 3 - expectedChars, bits);
+        writeFinalChunk(alphabet, output, outputIndex, 3 - expectedChars, bits);
         return 0;
       }
       return _encodeState(3 - expectedChars, bits);
@@ -208,24 +234,25 @@
    * Only used when the [_state] contains a partial (1 or 2 byte)
    * input.
    */
-  static void writeFinalChunk(Uint8List output, int outputIndex,
+  static void writeFinalChunk(String alphabet,
+                              Uint8List output, int outputIndex,
                               int count, int bits) {
     assert(count > 0);
     if (count == 1) {
       output[outputIndex++] =
-          _base64Alphabet.codeUnitAt((bits >> 2) & _sixBitMask);
+          alphabet.codeUnitAt((bits >> 2) & _sixBitMask);
       output[outputIndex++] =
-          _base64Alphabet.codeUnitAt((bits << 4) & _sixBitMask);
+          alphabet.codeUnitAt((bits << 4) & _sixBitMask);
       output[outputIndex++] = _paddingChar;
       output[outputIndex++] = _paddingChar;
     } else {
       assert(count == 2);
       output[outputIndex++] =
-          _base64Alphabet.codeUnitAt((bits >> 10) & _sixBitMask);
+          alphabet.codeUnitAt((bits >> 10) & _sixBitMask);
       output[outputIndex++] =
-          _base64Alphabet.codeUnitAt((bits >> 4) & _sixBitMask);
+          alphabet.codeUnitAt((bits >> 4) & _sixBitMask);
       output[outputIndex++] =
-          _base64Alphabet.codeUnitAt((bits << 2) & _sixBitMask);
+          alphabet.codeUnitAt((bits << 2) & _sixBitMask);
       output[outputIndex++] = _paddingChar;
     }
   }
@@ -240,6 +267,8 @@
    */
   Uint8List bufferCache;
 
+  _BufferCachingBase64Encoder(bool urlSafe) : super(urlSafe);
+
   Uint8List createBuffer(int bufferLength) {
     if (bufferCache == null || bufferCache.length < bufferLength) {
       bufferCache = new Uint8List(bufferLength);
@@ -268,11 +297,11 @@
 }
 
 class _AsciiBase64EncoderSink extends _Base64EncoderSink {
-  final _Base64Encoder _encoder = new _BufferCachingBase64Encoder();
-
   final Sink<String> _sink;
+  final _Base64Encoder _encoder;
 
-  _AsciiBase64EncoderSink(this._sink);
+  _AsciiBase64EncoderSink(this._sink, bool urlSafe)
+      : _encoder = new _BufferCachingBase64Encoder(urlSafe);
 
   void _add(List<int> source, int start, int end, bool isLast) {
     Uint8List buffer = _encoder.encode(source, start, end, isLast);
@@ -288,9 +317,10 @@
 
 class _Utf8Base64EncoderSink extends _Base64EncoderSink {
   final ByteConversionSink _sink;
-  final _Base64Encoder _encoder = new _Base64Encoder();
+  final _Base64Encoder _encoder;
 
-  _Utf8Base64EncoderSink(this._sink);
+  _Utf8Base64EncoderSink(this._sink, bool urlSafe)
+      : _encoder = new _Base64Encoder(urlSafe);
 
   void _add(List<int> source, int start, int end, bool isLast) {
     Uint8List buffer = _encoder.encode(source, start, end, isLast);
@@ -304,7 +334,16 @@
 // Decoder
 // ------------------------------------------------------------------------
 
-class Base64Decoder extends Converter<String, List<int>> {
+/**
+ * Decoder for base64 encoded data.
+ *
+ * This decoder accepts both base64 and base64url ("url-safe") encodings.
+ *
+ * The encoding is required to be properly padded.
+ */
+class Base64Decoder extends
+    ChunkedConverter<String, List<int>, String, List<int>> {
+
   const Base64Decoder();
 
   List<int> convert(String input, [int start = 0, int end]) {
@@ -349,7 +388,7 @@
    *
    * Accepts the "URL-safe" alphabet as well (`-` and `_` are the
    * 62nd and 63rd alphabet characters), and considers `%` a padding
-   * character which mush be followed by `3D`, the percent-escape
+   * character, which mush then be followed by `3D`, the percent-escape
    * for `=`.
    */
   static final List<int> _inverseAlphabet = new Int8List.fromList([
@@ -371,7 +410,7 @@
   /**
    * Maintains the intermediate state of a partly-decoded input.
    *
-   * BASE-64 is decoded in chunks of four characters. If a chunk does not
+   * Base64 is decoded in chunks of four characters. If a chunk does not
    * contain a full block, the decoded bits (six per character) of the
    * available characters are stored in [_state] until the next call to
    * [_decode] or [_close].
@@ -618,7 +657,7 @@
    * Check that the remainder of the string is valid padding.
    *
    * Valid padding is a correct number (0, 1 or 2) of `=` characters
-   * or `%3D` sequences depending on the number of preceding BASE-64 characters.
+   * or `%3D` sequences depending on the number of preceding base64 characters.
    * The [state] parameter encodes which padding continuations are allowed
    * as the number of expected characters. That number is the number of
    * expected padding characters times 3 minus the number of padding characters
diff --git a/sdk/lib/convert/chunked_conversion.dart b/sdk/lib/convert/chunked_conversion.dart
index 4c962eb..d450c75 100644
--- a/sdk/lib/convert/chunked_conversion.dart
+++ b/sdk/lib/convert/chunked_conversion.dart
@@ -7,6 +7,57 @@
 typedef void _ChunkedConversionCallback<T>(T accumulated);
 
 /**
+ * A converter that supports chunked conversions.
+ *
+ * In addition to immediate conversions from [S] to [T], a chunked converter
+ * also supports longer-running conversions from [S2] to [T2].
+ *
+ * Frequently, the source and target types are the same, but this is not a
+ * requirement. In particular, converters that work with lists in the
+ * immediate conversion, could flatten the type for the chunked conversion.
+ *
+ * For example, the [LineSplitter] class returns a `List<String>` for the
+ * immediate conversion, but returns individual `String`s in the chunked
+ * conversion.
+ */
+abstract class ChunkedConverter<S, T, S2, T2> extends Converter<S, T> {
+
+  const ChunkedConverter();
+
+  /**
+   * Starts a chunked conversion.
+   *
+   * The returned sink serves as input for the long-running conversion. The
+   * given [sink] serves as output.
+   */
+  ChunkedConversionSink<S2> startChunkedConversion(Sink<T2> sink) {
+    throw new UnsupportedError(
+        "This converter does not support chunked conversions: $this");
+  }
+
+  Stream<T2> bind(Stream<S2> stream) {
+    return new Stream<T2>.eventTransformed(
+        stream,
+        (EventSink<T2> sink) =>
+            new _ConverterStreamEventSink<S2, T2>(this, sink));
+  }
+
+  /**
+   * Fuses this instance with the given [other] converter.
+   *
+   * If [other] is a ChunkedConverter (with matching generic types), returns a
+   * [ChunkedConverter].
+   */
+  Converter<S, dynamic> fuse(Converter<T, dynamic> other) {
+    if (other is ChunkedConverter<T, dynamic, T2, dynamic>) {
+      return new _FusedChunkedConverter<S, T, dynamic, S2, T2, dynamic>(
+          this, other);
+    }
+    return super.fuse(other);
+  }
+}
+
+/**
  * A [ChunkedConversionSink] is used to transmit data more efficiently between
  * two converters during chunked conversions.
  *
@@ -55,7 +106,7 @@
 }
 
 /**
- * This class converts implements the logic for a chunked conversion as a
+ * This class implements the logic for a chunked conversion as a
  * stream transformer.
  *
  * It is used as strategy in the [EventTransformStream].
@@ -71,9 +122,11 @@
    * The input sink for new data. All data that is received with
    * [handleData] is added into this sink.
    */
-  ChunkedConversionSink _chunkedSink;
+  ChunkedConversionSink<S> _chunkedSink;
 
-  _ConverterStreamEventSink(Converter converter, EventSink<T> sink)
+  _ConverterStreamEventSink(
+      Converter/*=ChunkedConverter<dynamic, dynamic, S, T>*/ converter,
+      EventSink<T> sink)
       : this._eventSink = sink,
         _chunkedSink = converter.startChunkedConversion(sink);
 
@@ -83,3 +136,20 @@
   }
   void close() => _chunkedSink.close();
 }
+
+/**
+ * Fuses two chunked converters.
+ */
+class _FusedChunkedConverter<S, M, T, S2, M2, T2> extends
+    ChunkedConverter<S, T, S2, T2> {
+  final ChunkedConverter<S, M, S2, M2> _first;
+  final ChunkedConverter<M, T, M2, T2> _second;
+
+  _FusedChunkedConverter(this._first, this._second);
+
+  T convert(S input) => _second.convert(_first.convert(input));
+
+  ChunkedConversionSink<S2> startChunkedConversion(Sink<T2> sink) {
+    return _first.startChunkedConversion(_second.startChunkedConversion(sink));
+  }
+}
diff --git a/sdk/lib/convert/converter.dart b/sdk/lib/convert/converter.dart
index 627e417..d6d9a9b 100644
--- a/sdk/lib/convert/converter.dart
+++ b/sdk/lib/convert/converter.dart
@@ -29,14 +29,22 @@
   }
 
   /**
-   * Starts a chunked conversion.
+   * Deprecated.
+   *
+   * Use the [ChunkedConverter] interface instead.
    */
+  @deprecated
   ChunkedConversionSink startChunkedConversion(Sink sink) {
     throw new UnsupportedError(
         "This converter does not support chunked conversions: $this");
   }
 
-  // Subclasses are encouraged to provide better types.
+  /**
+   * Deprecated.
+   *
+   * Use the [ChunkedConverter] interface instead.
+   */
+  @deprecated
   Stream bind(Stream stream) {
     return new Stream.eventTransformed(
         stream,
@@ -50,14 +58,10 @@
  * For a non-chunked conversion converts the input in sequence.
  */
 class _FusedConverter<S, M, T> extends Converter<S, T> {
-  final Converter _first;
-  final Converter _second;
+  final Converter<S, M> _first;
+  final Converter<M, T> _second;
 
   _FusedConverter(this._first, this._second);
 
   T convert(S input) => _second.convert(_first.convert(input));
-
-  ChunkedConversionSink startChunkedConversion(Sink sink) {
-    return _first.startChunkedConversion(_second.startChunkedConversion(sink));
-  }
 }
diff --git a/sdk/lib/convert/encoding.dart b/sdk/lib/convert/encoding.dart
index 696b5f0..fd6f91f 100644
--- a/sdk/lib/convert/encoding.dart
+++ b/sdk/lib/convert/encoding.dart
@@ -10,6 +10,9 @@
 abstract class Encoding extends Codec<String, List<int>> {
   const Encoding();
 
+  ChunkedConverter<String, List<int>, String, List<int>> get encoder;
+  ChunkedConverter<List<int>, String, List<int>, String> get decoder;
+
   Future<String> decodeStream(Stream<List<int>> byteStream) {
     return byteStream
       .transform(decoder)
diff --git a/sdk/lib/convert/html_escape.dart b/sdk/lib/convert/html_escape.dart
index 6b0a3fa..2a0af75 100644
--- a/sdk/lib/convert/html_escape.dart
+++ b/sdk/lib/convert/html_escape.dart
@@ -152,7 +152,7 @@
  * found to be easier to read if greater-than is also escaped whenever
  * less-than is.
  */
-class HtmlEscape extends Converter<String, String> {
+class HtmlEscape extends ChunkedConverter<String, String, String, String> {
 
   /** The [HtmlEscapeMode] used by the converter. */
   final HtmlEscapeMode mode;
diff --git a/sdk/lib/convert/json.dart b/sdk/lib/convert/json.dart
index ace76c2..e80a986 100644
--- a/sdk/lib/convert/json.dart
+++ b/sdk/lib/convert/json.dart
@@ -9,10 +9,10 @@
  *
  * The [unsupportedObject] field holds that object that failed to be serialized.
  *
- * If an object isn't directly serializable, the serializer calls the 'toJson'
+ * If an object isn't directly serializable, the serializer calls the `toJson`
  * method on the object. If that call fails, the error will be stored in the
  * [cause] field. If the call returns an object that isn't directly
- * serializable, the [cause] is be null.
+ * serializable, the [cause] is null.
  */
 class JsonUnsupportedObjectError extends Error {
   /** The object that could not be serialized. */
@@ -53,8 +53,8 @@
  *
  * Examples:
  *
- *    var encoded = JSON.encode([1, 2, { "a": null }]);
- *    var decoded = JSON.decode('["foo", { "bar": 499 }]');
+ *     var encoded = JSON.encode([1, 2, { "a": null }]);
+ *     var decoded = JSON.decode('["foo", { "bar": 499 }]');
  */
 const JsonCodec JSON = const JsonCodec();
 
@@ -68,8 +68,8 @@
  *
  * Examples:
  *
- *    var encoded = JSON.encode([1, 2, { "a": null }]);
- *    var decoded = JSON.decode('["foo", { "bar": 499 }]');
+ *     var encoded = JSON.encode([1, 2, { "a": null }]);
+ *     var decoded = JSON.decode('["foo", { "bar": 499 }]');
  */
 class JsonCodec extends Codec<Object, String> {
   final _Reviver _reviver;
@@ -78,24 +78,22 @@
   /**
    * Creates a `JsonCodec` with the given reviver and encoding function.
    *
-   * The [reviver] function is called during decoding. It is invoked
-   * once for each object or list property that has been parsed.
-   * The `key` argument is either the
-   * integer list index for a list property, the string map key for object
-   * properties, or `null` for the final result.
+   * The [reviver] function is called during decoding. It is invoked once for
+   * each object or list property that has been parsed.
+   * The `key` argument is either the integer list index for a list property,
+   * the string map key for object properties, or `null` for the final result.
    *
    * If [reviver] is omitted, it defaults to returning the value argument.
    *
    * The [toEncodable] function is used during encoding. It is invoked for
-   * values that are not directly encodable to a JSON1toE
-   * string (a value that is not a number, boolean, string, null, list or a map
-   * with string keys). The function must return an object that is directly
-   * encodable. The elements of a returned list and values of a returned map
-   * do not need be directly encodable, and if they aren't, `toEncodable` will
-   * be used on them as well.
-   * Please notice that it is possible to cause an infinite recursive
-   * regress in this way, by effectively creating an infinite data structure
-   * through repeated call to `toEncodable`.
+   * values that are not directly encodable to a string (a value that is not a
+   * number, boolean, string, null, list or a map with string keys). The
+   * function must return an object that is directly encodable. The elements of
+   * a returned list and values of a returned map do not need to be directly
+   * encodable, and if they aren't, `toEncodable` will be used on them as well.
+   * Please notice that it is possible to cause an infinite recursive regress
+   * in this way, by effectively creating an infinite data structure through
+   * repeated call to `toEncodable`.
    *
    * If [toEncodable] is omitted, it defaults to a function that returns the
    * result of calling `.toJson()` on the unencodable object.
@@ -161,7 +159,7 @@
 /**
  * This class converts JSON objects to strings.
  */
-class JsonEncoder extends Converter<Object, String> {
+class JsonEncoder extends ChunkedConverter<Object, String, Object, String> {
   /**
    * The string used for indention.
    *
@@ -220,14 +218,14 @@
    * Converts [object] to a JSON [String].
    *
    * Directly serializable values are [num], [String], [bool], and [Null], as
-   * well as some [List] and [Map] values.
-   * For [List], the elements must all be serializable.
-   * For [Map], the keys must be [String] and the values must be serializable.
+   * well as some [List] and [Map] values. For [List], the elements must all be
+   * serializable. For [Map], the keys must be [String] and the values must be
+   * serializable.
    *
-   * If a value is any other type is attempted serialized, the conversion
-   * function provided in the constructor is invoked with the object as argument
-   * and the result, which must be a directly serializable value,
-   * is serialized instead of the original value.
+   * If a value of any other type is attempted to be serialized, the
+   * `toEncodable` function provided in the constructor is called with the value
+   * as argument. The result, which must be a directly serializable value, is
+   * serialized instead of the original value.
    *
    * If the conversion throws, or returns a value that is not directly
    * serializable, a [JsonUnsupportedObjectError] exception is thrown.
@@ -267,7 +265,7 @@
     return new _JsonEncoderSink(sink, _toEncodable, indent);
   }
 
-  // Override the base-classes bind, to provide a better type.
+  // Override the base class's bind, to provide a better type.
   Stream<String> bind(Stream<Object> stream) => super.bind(stream);
 
   Converter<Object, dynamic> fuse(Converter<String, dynamic> other) {
@@ -285,7 +283,8 @@
  * a JSON string, and then UTF-8 encoding the string, but without
  * creating an intermediate string.
  */
-class JsonUtf8Encoder extends Converter<Object, List<int>> {
+class JsonUtf8Encoder extends
+    ChunkedConverter<Object, List<int>, Object, List<int>> {
   /** Default buffer size used by the JSON-to-UTF-8 encoder. */
   static const int DEFAULT_BUFFER_SIZE = 256;
   /** Indentation used in pretty-print mode, `null` if not pretty. */
@@ -304,20 +303,21 @@
    * If `indent` contains characters that are not valid JSON whitespace
    * characters, the result will not be valid JSON. JSON whitespace characters
    * are space (U+0020), tab (U+0009), line feed (U+000a) and carriage return
-   * (U+000d) (ECMA 404).
+   * (U+000d) ([ECMA
+   * 404](http://www.ecma-international.org/publications/standards/Ecma-404.htm)).
    *
    * The [bufferSize] is the size of the internal buffers used to collect
    * UTF-8 code units.
    * If using [startChunkedConversion], it will be the size of the chunks.
    *
-   * The JSON encoder handles numbers, strings, booleans, null, lists and
-   * maps directly.
+   * The JSON encoder handles numbers, strings, booleans, null, lists and maps
+   * directly.
    *
-   * Any other object is attempted converted by [toEncodable] to an
-   * object that is of one of the convertible types.
+   * Any other object is attempted converted by [toEncodable] to an object that
+   * is of one of the convertible types.
    *
-   * If [toEncodable] is omitted, it defaults to calling `.toJson()` on
-   * the object.
+   * If [toEncodable] is omitted, it defaults to calling `.toJson()` on the
+   * object.
    */
   JsonUtf8Encoder([String indent,
                    toEncodable(Object object),
@@ -391,7 +391,7 @@
                                     _indent, _bufferSize);
   }
 
-  // Override the base-classes bind, to provide a better type.
+  // Override the base class's bind, to provide a better type.
   Stream<List<int>> bind(Stream<Object> stream) {
     return super.bind(stream);
   }
@@ -474,7 +474,7 @@
 /**
  * This class parses JSON strings and builds the corresponding objects.
  */
-class JsonDecoder extends Converter<String, Object> {
+class JsonDecoder extends ChunkedConverter<String, Object, String, Object> {
   final _Reviver _reviver;
   /**
    * Constructs a new JsonDecoder.
@@ -487,8 +487,8 @@
    * Converts the given JSON-string [input] to its corresponding object.
    *
    * Parsed JSON values are of the types [num], [String], [bool], [Null],
-   * [List]s of parsed JSON values or [Map]s from [String] to parsed
-   * JSON values.
+   * [List]s of parsed JSON values or [Map]s from [String] to parsed JSON
+   * values.
    *
    * If `this` was initialized with a reviver, then the parsing operation
    * invokes the reviver on every object or list property that has been parsed.
@@ -501,14 +501,13 @@
   dynamic convert(String input) => _parseJson(input, _reviver);
 
   /**
-   * Starts a conversion from a chunked JSON string to its corresponding
-   * object.
+   * Starts a conversion from a chunked JSON string to its corresponding object.
    *
    * The output [sink] receives exactly one decoded element through `add`.
    */
   external StringConversionSink startChunkedConversion(Sink<Object> sink);
 
-  // Override the base-classes bind, to provide a better type.
+  // Override the base class's bind, to provide a better type.
   Stream<Object> bind(Stream<String> stream) => super.bind(stream);
 }
 
@@ -618,9 +617,8 @@
   /**
    * Check if an encountered object is already being traversed.
    *
-   * Records the object if it isn't already seen.
-   * Should have a matching call to [_removeSeen] when the object
-   * is no longer being traversed.
+   * Records the object if it isn't already seen. Should have a matching call to
+   * [_removeSeen] when the object is no longer being traversed.
    */
   void _checkCycle(object) {
     for (int i = 0; i < _seen.length; i++) {
@@ -632,7 +630,7 @@
   }
 
   /**
-   * Removes object from the list of currently traversed objects.
+   * Remove [object] from the list of currently traversed objects.
    *
    * Should be called in the opposite order of the matching [_checkCycle]
    * calls.
@@ -644,10 +642,10 @@
   }
 
   /**
-   * Writes an object.
+   * Write an object.
    *
-   * If the object isn't directly encodable, the [_toEncodable] function
-   * gets one chance to return a replacement which is encodable.
+   * If [object] isn't directly encodable, the [_toEncodable] function gets one
+   * chance to return a replacement which is encodable.
    */
   void writeObject(object) {
     // Tries stringifying object directly. If it's not a simple value, List or
@@ -667,7 +665,7 @@
   }
 
   /**
-   * Serializes a [num], [String], [bool], [Null], [List] or [Map] value.
+   * Serialize a [num], [String], [bool], [Null], [List] or [Map] value.
    *
    * Returns true if the value is one of these types, and false if not.
    * If a value is both a [List] and a [Map], it's serialized as a [List].
@@ -707,7 +705,7 @@
     }
   }
 
-  /** Serializes a [List]. */
+  /** Serialize a [List]. */
   void writeList(List list) {
     writeString('[');
     if (list.length > 0) {
@@ -720,7 +718,7 @@
     writeString(']');
   }
 
-  /** Serializes a [Map]. */
+  /** Serialize a [Map]. */
   bool writeMap(Map<String, Object> map) {
     if (map.isEmpty) {
       writeString("{}");
@@ -912,11 +910,11 @@
    *
    * Calls [addChunk] with slices of UTF-8 code units.
    * These will typically have size [bufferSize], but may be shorter.
-   * The buffers are not reused, so the [addChunk] call may keep and reuse
-   * the chunks.
+   * The buffers are not reused, so the [addChunk] call may keep and reuse the
+   * chunks.
    *
-   * If [indent] is non-`null`, the result will be "pretty-printed" with
-   * extra newlines and indentation, using [indent] as the indentation.
+   * If [indent] is non-`null`, the result will be "pretty-printed" with extra
+   * newlines and indentation, using [indent] as the indentation.
    */
   static void stringify(Object object,
                         List<int> indent,
diff --git a/sdk/lib/convert/latin1.dart b/sdk/lib/convert/latin1.dart
index 98d7ba5..1d8546d 100644
--- a/sdk/lib/convert/latin1.dart
+++ b/sdk/lib/convert/latin1.dart
@@ -59,9 +59,9 @@
     }
   }
 
-  Converter<String, List<int>> get encoder => const Latin1Encoder();
+  Latin1Encoder get encoder => const Latin1Encoder();
 
-  Converter<List<int>, String> get decoder =>
+  Latin1Decoder get decoder =>
       _allowInvalid ? const Latin1Decoder(allowInvalid: true)
                     : const Latin1Decoder(allowInvalid: false);
 }
diff --git a/sdk/lib/convert/line_splitter.dart b/sdk/lib/convert/line_splitter.dart
index b9023f4..a9c9448 100644
--- a/sdk/lib/convert/line_splitter.dart
+++ b/sdk/lib/convert/line_splitter.dart
@@ -17,7 +17,8 @@
  *
  * The returned lines do not contain the line terminators.
  */
-class LineSplitter extends Converter<String, List<String>> {
+class LineSplitter extends
+    ChunkedConverter<String, List<String>, String, String> {
 
   const LineSplitter();
 
@@ -79,9 +80,6 @@
     }
     return new _LineSplitterSink(sink);
   }
-
-  // Override the base-class' bind, to provide a better type.
-  Stream<String> bind(Stream<String> stream) => super.bind(stream);
 }
 
 // TODO(floitsch): deal with utf8.
diff --git a/sdk/lib/convert/utf.dart b/sdk/lib/convert/utf.dart
index 287d8ec..a93c9ae 100644
--- a/sdk/lib/convert/utf.dart
+++ b/sdk/lib/convert/utf.dart
@@ -76,7 +76,8 @@
  * This class converts strings to their UTF-8 code units (a list of
  * unsigned 8-bit integers).
  */
-class Utf8Encoder extends Converter<String, List<int>> {
+class Utf8Encoder extends
+    ChunkedConverter<String, List<int>, String, List<int>> {
 
   const Utf8Encoder();
 
@@ -304,7 +305,8 @@
  * This class converts UTF-8 code units (lists of unsigned 8-bit integers)
  * to a string.
  */
-class Utf8Decoder extends Converter<List<int>, String> {
+class Utf8Decoder extends
+    ChunkedConverter<List<int>, String, List<int>, String> {
   final bool _allowMalformed;
 
   /**
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index b9db444..5ff3bb5 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -673,7 +673,40 @@
   return null;
 }
 
-// TODO(jacobr): it would be nice to place this in a consistent place for dart2js and dartium.
+// TODO(jacobr): it would be nice to place these conversion methods in a consistent place for dart2js and dartium.
+
+WindowBase _convertNativeToDart_Window(win) {
+  if (win == null) return null;
+  return _DOMWindowCrossFrame._createSafe(win);
+}
+
+EventTarget _convertNativeToDart_EventTarget(e) {
+  if (e == null) {
+    return null;
+  }
+  // Assume it's a Window if it contains the postMessage property.  It may be
+  // from a different frame - without a patched prototype - so we cannot
+  // rely on Dart type checking.
+  try {
+    if (js.JsNative.hasProperty(e, "postMessage")) {
+      var window = _DOMWindowCrossFrame._createSafe(e);
+      // If it's a native window.
+      if (window is EventTarget) {
+        return window;
+      }
+      return null;
+    }
+  } catch (err) {
+    print("Error calling _convertNativeToDart_EventTarget... $err");
+  }
+  return e;
+}
+
+EventTarget _convertDartToNative_EventTarget(e) {
+  // _DOMWindowCrossFrame uses an interceptor so we don't need to do anything unlike Dart2Js.
+  return e;
+}
+
 _convertNativeToDart_XHR_Response(o) {
   if (o is Document) {
     return o;
@@ -737,10 +770,6 @@
   }
 }
 
-// TODO(jacobr): we shouldn't be generating this call in the dart:html
-// bindings but we are.
-_convertDartToNative_EventTarget(target) => target;
-
 @Deprecated("Internal Use Only")
 Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
   var result = new Map();
@@ -10193,7 +10222,7 @@
   
   @DomName('Document.defaultView')
   @DocsEditable()
-  WindowBase get window => _blink.BlinkDocument.instance.defaultView_Getter_(this);
+  WindowBase get window => _convertNativeToDart_Window(_blink.BlinkDocument.instance.defaultView_Getter_(this));
   
   @DomName('Document.documentElement')
   @DocsEditable()
@@ -16699,7 +16728,7 @@
   
   @DomName('Event.currentTarget')
   @DocsEditable()
-  EventTarget get currentTarget => _blink.BlinkEvent.instance.currentTarget_Getter_(this);
+  EventTarget get currentTarget => _convertNativeToDart_EventTarget(_blink.BlinkEvent.instance.currentTarget_Getter_(this));
   
   @DomName('Event.defaultPrevented')
   @DocsEditable()
@@ -16726,7 +16755,7 @@
   
   @DomName('Event.target')
   @DocsEditable()
-  EventTarget get target => _blink.BlinkEvent.instance.target_Getter_(this);
+  EventTarget get target => _convertNativeToDart_EventTarget(_blink.BlinkEvent.instance.target_Getter_(this));
   
   @DomName('Event.timeStamp')
   @DocsEditable()
@@ -17943,7 +17972,7 @@
 
   @DomName('FocusEvent.relatedTarget')
   @DocsEditable()
-  EventTarget get relatedTarget => _blink.BlinkFocusEvent.instance.relatedTarget_Getter_(this);
+  EventTarget get relatedTarget => _convertNativeToDart_EventTarget(_blink.BlinkFocusEvent.instance.relatedTarget_Getter_(this));
   
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21948,7 +21977,7 @@
   
   @DomName('HTMLIFrameElement.contentWindow')
   @DocsEditable()
-  WindowBase get contentWindow => _blink.BlinkHTMLIFrameElement.instance.contentWindow_Getter_(this);
+  WindowBase get contentWindow => _convertNativeToDart_Window(_blink.BlinkHTMLIFrameElement.instance.contentWindow_Getter_(this));
   
   @DomName('HTMLIFrameElement.height')
   @DocsEditable()
@@ -25926,7 +25955,7 @@
   
   @DomName('MessageEvent.source')
   @DocsEditable()
-  EventTarget get source => _blink.BlinkMessageEvent.instance.source_Getter_(this);
+  EventTarget get source => _convertNativeToDart_EventTarget(_blink.BlinkMessageEvent.instance.source_Getter_(this));
   
   @DomName('MessageEvent.initMessageEvent')
   @DocsEditable()
@@ -26790,7 +26819,7 @@
   
   @DomName('MouseEvent.relatedTarget')
   @DocsEditable()
-  EventTarget get relatedTarget => _blink.BlinkMouseEvent.instance.relatedTarget_Getter_(this);
+  EventTarget get relatedTarget => _convertNativeToDart_EventTarget(_blink.BlinkMouseEvent.instance.relatedTarget_Getter_(this));
   
   @DomName('MouseEvent.screenX')
   @DocsEditable()
@@ -31464,7 +31493,7 @@
   @DomName('RelatedEvent.relatedTarget')
   @DocsEditable()
   @Experimental() // untriaged
-  EventTarget get relatedTarget => _blink.BlinkRelatedEvent.instance.relatedTarget_Getter_(this);
+  EventTarget get relatedTarget => _convertNativeToDart_EventTarget(_blink.BlinkRelatedEvent.instance.relatedTarget_Getter_(this));
   
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -36997,7 +37026,7 @@
   
   @DomName('Touch.target')
   @DocsEditable()
-  EventTarget get target => _blink.BlinkTouch.instance.target_Getter_(this);
+  EventTarget get target => _convertNativeToDart_EventTarget(_blink.BlinkTouch.instance.target_Getter_(this));
   
 
 // As of Chrome 37, these all changed from long to double.  This code
@@ -37617,7 +37646,7 @@
   
   @DomName('UIEvent.view')
   @DocsEditable()
-  WindowBase get view => _blink.BlinkUIEvent.instance.view_Getter_(this);
+  WindowBase get view => _convertNativeToDart_Window(_blink.BlinkUIEvent.instance.view_Getter_(this));
   
   @DomName('UIEvent.which')
   @DocsEditable()
@@ -39724,7 +39753,7 @@
   
   @DomName('Window.opener')
   @DocsEditable()
-  WindowBase get opener => _blink.BlinkWindow.instance.opener_Getter_(this);
+  WindowBase get opener => _convertNativeToDart_Window(_blink.BlinkWindow.instance.opener_Getter_(this));
   
   @DomName('Window.opener')
   @DocsEditable()
@@ -39795,7 +39824,7 @@
   
   @DomName('Window.parent')
   @DocsEditable()
-  WindowBase get parent => _blink.BlinkWindow.instance.parent_Getter_(this);
+  WindowBase get parent => _convertNativeToDart_Window(_blink.BlinkWindow.instance.parent_Getter_(this));
   
   /**
    * Timing and navigation data for this window.
@@ -39907,7 +39936,7 @@
    */
   @DomName('Window.self')
   @DocsEditable()
-  WindowBase get self => _blink.BlinkWindow.instance.self_Getter_(this);
+  WindowBase get self => _convertNativeToDart_Window(_blink.BlinkWindow.instance.self_Getter_(this));
   
   /**
    * Storage for this window that is cleared when this session ends.
@@ -39994,7 +40023,7 @@
   
   @DomName('Window.top')
   @DocsEditable()
-  WindowBase get top => _blink.BlinkWindow.instance.top_Getter_(this);
+  WindowBase get top => _convertNativeToDart_Window(_blink.BlinkWindow.instance.top_Getter_(this));
   
   /**
    * The current window.
@@ -40006,7 +40035,7 @@
    */
   @DomName('Window.window')
   @DocsEditable()
-  WindowBase get window => _blink.BlinkWindow.instance.window_Getter_(this);
+  WindowBase get window => _convertNativeToDart_Window(_blink.BlinkWindow.instance.window_Getter_(this));
   
   WindowBase __getter__(index_OR_name) {
     if ((index_OR_name is int)) {
@@ -40122,7 +40151,7 @@
   
   @DomName('Window.open')
   @DocsEditable()
-  WindowBase open(String url, String target, [String features]) => _blink.BlinkWindow.instance.open_Callback_3_(this, url, target, features);
+  WindowBase open(String url, String target, [String features]) => _convertNativeToDart_Window(_blink.BlinkWindow.instance.open_Callback_3_(this, url, target, features));
   
   SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) {
     if (creationCallback != null) {
@@ -47898,12 +47927,12 @@
 
 
 class _Property {
-  _Property(this.name) :
-      _hasValue = false,
-      writable = false,
-      isMethod = false,
-      isOwn = true,
-      wasThrown = false;
+  _Property(this.name)
+      : _hasValue = false,
+        writable = false,
+        isMethod = false,
+        isOwn = true,
+        wasThrown = false;
 
   bool get hasValue => _hasValue;
   get value => _value;
@@ -47923,6 +47952,203 @@
   bool wasThrown;
 }
 
+/**
+ * Manager for navigating between libraries from the devtools console.
+ */
+class _LibraryManager {
+  /**
+   * Current active library
+   */
+  static var _currentLibrary;
+  static var _validCache = false;
+
+  static List<Uri> _libraryUris;
+
+  // List of all maps to check to determine if there is an exact match.
+  static Map<String, List<Uri>> _fastPaths;
+
+  static void _addFastPath(String key, Uri uri) {
+    _fastPaths.putIfAbsent(key, () => <Uri>[]).add(uri);
+  }
+
+  static cache() {
+    if (_validCache) return;
+    _validCache = true;
+    _libraryUris = <Uri>[];
+    _fastPaths = new Map<String, List<Uri>>();
+    var system = currentMirrorSystem();
+    system.libraries.forEach((uri, library) {
+      _libraryUris.add(uri);
+      _addFastPath(uri.toString(), uri);
+      _addFastPath(MirrorSystem.getName(library.simpleName), uri);
+    });
+  }
+
+  static String get currentLibrary {
+    if (_currentLibrary == null) {
+      _currentLibrary =
+          currentMirrorSystem().isolate.rootLibrary.uri.toString();
+    }
+    return _currentLibrary;
+  }
+
+  /**
+   * Find libraries matching a given name.
+   *
+   * Uses heuristics to only return a single match when the user intent is
+   * generally unambiguous.
+   */
+  static List<Uri> findMatches(String name) {
+    cache();
+    var nameAsFile = name.endsWith('.dart') ? name : '${name}.dart';
+    // Perfect match first.
+    var fastPatchMatches = _fastPaths[name];
+    if (fastPatchMatches != null) {
+      return fastPatchMatches.toList();
+    }
+
+    // Exact match for file path.
+    var matches = new LinkedHashSet<Uri>();
+    for (var uri in _libraryUris) {
+      if (uri.path == name || uri.path == nameAsFile) matches.add(uri);
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Exact match for file name.
+    if (name != nameAsFile) {
+      for (var uri in _libraryUris) {
+        if (uri.pathSegments.isNotEmpty &&
+            (uri.pathSegments.last == nameAsFile)) {
+          matches.add(uri);
+        }
+      }
+      if (matches.isNotEmpty) return matches.toList();
+    }
+
+    for (var uri in _libraryUris) {
+      if (uri.pathSegments.isNotEmpty && (uri.pathSegments.last == name)) {
+        matches.add(uri);
+      }
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on path.
+    for (var uri in _libraryUris) {
+      if (uri.path.contains(name)) {
+        matches.add(uri);
+      }
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on entire uri.
+    for (var uri in _libraryUris) {
+      if (uri.toString().contains(name)) {
+        matches.add(uri);
+      }
+    }
+
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on entire uri ignoring case.
+    name = name.toLowerCase();
+    for (var uri in _libraryUris) {
+      if (uri.toString().toLowerCase().contains(name)) {
+        matches.add(uri);
+      }
+    }
+    return matches.toList();
+  }
+
+  static setLibrary([String name]) {
+    // Bust cache in case library list has changed. Ideally we would listen for
+    // when libraries are loaded and invalidate based on that.
+    _validCache = false;
+    cache();
+    if (name == null) {
+      window.console
+        ..group("Current library: $_currentLibrary")
+        ..groupCollapsed("All libraries:");
+      _listLibraries();
+      window.console..groupEnd()..groupEnd();
+      return;
+    }
+    var matches = findMatches(name);
+    if (matches.length != 1) {
+      if (matches.length > 1) {
+        window.console.warn("Ambiguous library name: $name");
+      }
+      showMatches(name, matches);
+      return;
+    }
+    _currentLibrary = matches.first.toString();
+    window.console.log("Set library to $_currentLibrary");
+  }
+
+  static getLibrary() {
+    return currentLibrary;
+  }
+
+  static List<Uri> _sortUris(Iterable<Uri> uris) {
+    return (uris.toList())
+      ..sort((Uri a, Uri b) {
+        if (a.scheme != b.scheme) {
+          if (a.scheme == 'dart') return -1;
+          if (b.scheme == 'dart') return 1;
+          return a.scheme.compareTo(b.scheme);
+        }
+        return a.toString().compareTo(b.toString());
+      });
+  }
+
+  static void listLibraries() {
+    _validCache = false;
+    cache();
+    _listLibraries();
+  }
+
+  static void _listLibraries() {
+    window.console.log(_sortUris(_libraryUris).join("\n"));
+  }
+
+  // Workaround to allow calling console.log with an arbitrary number of
+  // arguments.
+  static void _log(List<String> args) {
+    js.JsNative.callMethod(window.console, 'log', args);
+  }
+
+  static showMatches(String key, Iterable<Uri> uris) {
+    var boldPairs = [];
+    var sb = new StringBuffer();
+    if (uris.isEmpty) {
+      window.console.group("All libraries:");
+      _listLibraries();
+      window.console
+        ..groupEnd()
+        ..error("No library names or URIs match '$key'");
+      return;
+    }
+    sb.write("${uris.length} matches\n");
+    var lowerCaseKey = key.toLowerCase();
+    for (var uri in uris) {
+      var txt = uri.toString();
+      int index = txt.toLowerCase().indexOf(lowerCaseKey);
+      if (index != -1) {
+        // %c enables styling console log messages with css
+        // specified at the end of the console.
+        sb..write(txt.substring(0, index))..write('%c');
+        var matchEnd = index + key.length;
+        sb
+          ..write(txt.substring(index, matchEnd))
+          ..write('%c')
+          ..write(txt.substring(matchEnd))
+          ..write('\n');
+        boldPairs..add('font-weight: bold')..add('font-weight: normal');
+      }
+    }
+    _log([sb.toString()]..addAll(boldPairs));
+  }
+}
+
 class _ConsoleVariables {
   Map<String, Object> _data = new Map<String, Object>();
 
@@ -47968,15 +48194,15 @@
 }
 
 class _MethodTrampoline extends _Trampoline {
-  _MethodTrampoline(ObjectMirror receiver, MethodMirror methodMirror,
-      Symbol selector) :
-      super(receiver, methodMirror, selector);
+  _MethodTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
 
   noSuchMethod(Invocation msg) {
     if (msg.memberName != #call) return super.noSuchMethod(msg);
-    return _receiver.invoke(_selector,
-                            msg.positionalArguments,
-                            msg.namedArguments).reflectee;
+    return _receiver
+        .invoke(_selector, msg.positionalArguments, msg.namedArguments)
+        .reflectee;
   }
 }
 
@@ -47984,9 +48210,9 @@
  * Invocation trampoline class used to closurize getters.
  */
 class _GetterTrampoline extends _Trampoline {
-  _GetterTrampoline(ObjectMirror receiver, MethodMirror methodMirror,
-      Symbol selector) :
-      super(receiver, methodMirror, selector);
+  _GetterTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
 
   call() => _receiver.getField(_selector).reflectee;
 }
@@ -47995,9 +48221,9 @@
  * Invocation trampoline class used to closurize setters.
  */
 class _SetterTrampoline extends _Trampoline {
-  _SetterTrampoline(ObjectMirror receiver, MethodMirror methodMirror,
-      Symbol selector) :
-      super(receiver, methodMirror, selector);
+  _SetterTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
 
   call(value) {
     _receiver.setField(_selector, value);
@@ -48010,7 +48236,7 @@
   static DateTime doubleToDateTime(double dateTime) {
     try {
       return new DateTime.fromMillisecondsSinceEpoch(dateTime.toInt());
-    } catch(_) {
+    } catch (_) {
       // TODO(antonnm): treat exceptions properly in bindings and
       // find out how to treat NaNs.
       return null;
@@ -48055,7 +48281,10 @@
 
   static Map createMap() => {};
 
-  static parseJson(String jsonSource) => const JsonDecoder().convert(jsonSource);
+  static parseJson(String jsonSource) =>
+      const JsonDecoder().convert(jsonSource);
+
+  static String getLibraryUrl() => _LibraryManager.currentLibrary;
 
   static makeUnimplementedError(String fileName, int lineNo) {
     return new UnsupportedError('[info: $fileName:$lineNo]');
@@ -48080,7 +48309,8 @@
     return element;
   }
 
-  static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(message);
+  static forwardingPrint(String message) =>
+      _blink.Blink_Utils.forwardingPrint(message);
   static void spawnDomHelper(Function f, int replyTo) =>
       _blink.Blink_Utils.spawnDomHelper(f, replyTo);
 
@@ -48113,8 +48343,8 @@
    */
   static Map<String, dynamic> createLocalVariablesMap(List localVariables) {
     var map = {};
-    for (int i = 0; i < localVariables.length; i+=2) {
-      map[stripMemberName(localVariables[i])] = localVariables[i+1];
+    for (int i = 0; i < localVariables.length; i += 2) {
+      map[stripMemberName(localVariables[i])] = localVariables[i + 1];
     }
     return map;
   }
@@ -48143,8 +48373,8 @@
    * [_consoleTempVariables, 40, 2, someValue, someOtherValue]]
    * </code>
    */
-  static List wrapExpressionAsClosure(String expression, List locals,
-      bool includeCommandLineAPI) {
+  static List wrapExpressionAsClosure(
+      String expression, List locals, bool includeCommandLineAPI) {
     var args = {};
     var sb = new StringBuffer("(");
     addArg(arg, value) {
@@ -48179,26 +48409,24 @@
       final _SET_VARIABLE = new RegExp("^(\\s*)(\\w+)(\\s*=)");
       // Match trailing semicolons.
       final _ENDING_SEMICOLONS = new RegExp("(;\\s*)*\$");
-      expression = expression.replaceAllMapped(_VARIABLE_DECLARATION,
-          (match) {
-            var variableName = match[2];
-            // Set the console variable if it isn't already set.
-            if (!_consoleTempVariables._data.containsKey(variableName)) {
-              _consoleTempVariables._data[variableName] = null;
-            }
-            return "${match[1]}\$consoleVariables.${variableName}";
-          });
+      expression = expression.replaceAllMapped(_VARIABLE_DECLARATION, (match) {
+        var variableName = match[2];
+        // Set the console variable if it isn't already set.
+        if (!_consoleTempVariables._data.containsKey(variableName)) {
+          _consoleTempVariables._data[variableName] = null;
+        }
+        return "${match[1]}\$consoleVariables.${variableName}";
+      });
 
-      expression = expression.replaceAllMapped(_SET_VARIABLE,
-          (match) {
-            var variableName = match[2];
-            // Only rewrite if the name matches an existing console variable.
-            if (_consoleTempVariables._data.containsKey(variableName)) {
-              return "${match[1]}\$consoleVariables.${variableName}${match[3]}";
-            } else {
-              return match[0];
-            }
-          });
+      expression = expression.replaceAllMapped(_SET_VARIABLE, (match) {
+        var variableName = match[2];
+        // Only rewrite if the name matches an existing console variable.
+        if (_consoleTempVariables._data.containsKey(variableName)) {
+          return "${match[1]}\$consoleVariables.${variableName}${match[3]}";
+        } else {
+          return match[0];
+        }
+      });
 
       // We only allow dart expressions not Dart statements. Silently remove
       // trailing semicolons the user might have added by accident to reduce the
@@ -48207,8 +48435,8 @@
     }
 
     if (locals != null) {
-      for (int i = 0; i < locals.length; i+= 2) {
-        addArg(locals[i], locals[i+1]);
+      for (int i = 0; i < locals.length; i += 2) {
+        addArg(locals[i], locals[i + 1]);
       }
     }
     // Inject all the already defined console variables.
@@ -48223,12 +48451,12 @@
     return [sb.toString(), args.values.toList(growable: false)];
   }
 
-  static String _getShortSymbolName(Symbol symbol,
-                                    DeclarationMirror declaration) {
+  static String _getShortSymbolName(
+      Symbol symbol, DeclarationMirror declaration) {
     var name = MirrorSystem.getName(symbol);
     if (declaration is MethodMirror) {
-      if (declaration.isSetter && name[name.length-1] == "=") {
-        return name.substring(0, name.length-1);
+      if (declaration.isSetter && name[name.length - 1] == "=") {
+        return name.substring(0, name.length - 1);
       }
       if (declaration.isConstructor) {
         return name.substring(name.indexOf('.') + 1);
@@ -48238,6 +48466,38 @@
   }
 
   /**
+   * Handle special console commands such as $lib and $libs that should not be
+   * evaluated as Dart expressions and instead should be interpreted directly.
+   * Commands supported:
+   * library <-- shows the current library and lists all libraries.
+   * library "library_uri" <-- select a specific library
+   * library "library_uri_fragment"
+   */
+  static bool maybeHandleSpecialConsoleCommand(String expression) {
+    expression = expression.trim();
+    var setLibraryCommand = r'library ';
+    if (expression == r'library') {
+      _LibraryManager.setLibrary();
+      return true;
+    }
+    if (expression.startsWith(setLibraryCommand)) {
+      expression = expression.substring(setLibraryCommand.length);
+      if (expression.length >= 2) {
+        String start = expression[0];
+        String end = expression[expression.length - 1];
+        // TODO(jacobr): maybe we should require quotes.
+        if ((start == "'" && end == "'") || (start == '"' && end == '"')) {
+          expression = expression.substring(1, expression.length - 1);
+        }
+      }
+
+      _LibraryManager.setLibrary(expression);
+      return true;
+    }
+    return false;
+  }
+
+  /**
    * Returns a list of completions to use if the receiver is o.
    */
   static List<String> getCompletions(o) {
@@ -48247,19 +48507,17 @@
       map.forEach((symbol, mirror) {
         if (mirror.isStatic == isStatic && !mirror.isPrivate) {
           var name = MirrorSystem.getName(symbol);
-          if (mirror is MethodMirror && mirror.isSetter)
-            name = name.substring(0, name.length - 1);
+          if (mirror is MethodMirror && mirror.isSetter) name =
+              name.substring(0, name.length - 1);
           completions.add(name);
         }
       });
     }
 
     addForClass(ClassMirror mirror, bool isStatic) {
-      if (mirror == null)
-        return;
+      if (mirror == null) return;
       addAll(mirror.declarations, isStatic);
-      if (mirror.superclass != null)
-        addForClass(mirror.superclass, isStatic);
+      if (mirror.superclass != null) addForClass(mirror.superclass, isStatic);
       for (var interface in mirror.superinterfaces) {
         addForClass(interface, isStatic);
       }
@@ -48277,8 +48535,8 @@
    * Adds all candidate String completitions from [declarations] to [output]
    * filtering based on [staticContext] and [includePrivate].
    */
-  static void _getCompletionsHelper(ClassMirror classMirror,
-      bool staticContext, LibraryMirror libraryMirror, Set<String> output) {
+  static void _getCompletionsHelper(ClassMirror classMirror, bool staticContext,
+      LibraryMirror libraryMirror, Set<String> output) {
     bool includePrivate = libraryMirror == classMirror.owner;
     classMirror.declarations.forEach((symbol, declaration) {
       if (!includePrivate && declaration.isPrivate) return;
@@ -48301,12 +48559,11 @@
 
     if (!staticContext) {
       for (var interface in classMirror.superinterfaces) {
-        _getCompletionsHelper(interface, staticContext,
-            libraryMirror, output);
+        _getCompletionsHelper(interface, staticContext, libraryMirror, output);
       }
       if (classMirror.superclass != null) {
-        _getCompletionsHelper(classMirror.superclass, staticContext,
-            libraryMirror, output);
+        _getCompletionsHelper(
+            classMirror.superclass, staticContext, libraryMirror, output);
       }
     }
   }
@@ -48373,13 +48630,13 @@
   }
 
   static final SIDE_EFFECT_FREE_LIBRARIES = new Set<String>()
-      ..add('dart:html')
-      ..add('dart:indexed_db')
-      ..add('dart:svg')
-      ..add('dart:typed_data')
-      ..add('dart:web_audio')
-      ..add('dart:web_gl')
-      ..add('dart:web_sql');
+    ..add('dart:html')
+    ..add('dart:indexed_db')
+    ..add('dart:svg')
+    ..add('dart:typed_data')
+    ..add('dart:web_audio')
+    ..add('dart:web_gl')
+    ..add('dart:web_sql');
 
   static LibraryMirror _getLibrary(MethodMirror methodMirror) {
     var owner = methodMirror.owner;
@@ -48398,8 +48655,8 @@
    * In the future we should consider adding an annotation to tag getters
    * in user libraries as side effect free.
    */
-  static bool _isSideEffectFreeGetter(MethodMirror methodMirror,
-      LibraryMirror libraryMirror) {
+  static bool _isSideEffectFreeGetter(
+      MethodMirror methodMirror, LibraryMirror libraryMirror) {
     // This matches JavaScript behavior. We should consider displaying
     // getters for all dart platform libraries rather than just the DOM
     // libraries.
@@ -48411,11 +48668,11 @@
    * Whether we should treat a property as a field for the purposes of the
    * debugger.
    */
-  static bool treatPropertyAsField(MethodMirror methodMirror,
-      LibraryMirror libraryMirror) {
+  static bool treatPropertyAsField(
+      MethodMirror methodMirror, LibraryMirror libraryMirror) {
     return (methodMirror.isGetter || methodMirror.isSetter) &&
-          (methodMirror.isSynthetic ||
-              _isSideEffectFreeGetter(methodMirror,libraryMirror));
+        (methodMirror.isSynthetic ||
+            _isSideEffectFreeGetter(methodMirror, libraryMirror));
   }
 
   // TODO(jacobr): generate more concise function descriptions instead of
@@ -48432,27 +48689,36 @@
 
   static List getInvocationTrampolineDetails(_Trampoline method) {
     var loc = method._methodMirror.location;
-    return [loc.line, loc.column, loc.sourceUri.toString(),
-        MirrorSystem.getName(method._selector)];
+    return [
+      loc.line,
+      loc.column,
+      loc.sourceUri.toString(),
+      MirrorSystem.getName(method._selector)
+    ];
   }
 
-  static List getLibraryProperties(String libraryUrl, bool ownProperties,
-      bool accessorPropertiesOnly) {
+  static List getLibraryProperties(
+      String libraryUrl, bool ownProperties, bool accessorPropertiesOnly) {
     var properties = new Map<String, _Property>();
     var libraryMirror = getLibraryMirror(libraryUrl);
-    _addInstanceMirrors(libraryMirror, libraryMirror,
+    _addInstanceMirrors(
+        libraryMirror,
+        libraryMirror,
         libraryMirror.declarations,
-        ownProperties, accessorPropertiesOnly, false, false,
+        ownProperties,
+        accessorPropertiesOnly,
+        false,
+        false,
         properties);
     if (!accessorPropertiesOnly) {
       // We need to add class properties for all classes in the library.
       libraryMirror.declarations.forEach((symbol, declarationMirror) {
         if (declarationMirror is ClassMirror) {
           var name = MirrorSystem.getName(symbol);
-          if (declarationMirror.hasReflectedType
-              && !properties.containsKey(name)) {
+          if (declarationMirror.hasReflectedType &&
+              !properties.containsKey(name)) {
             properties[name] = new _Property(name)
-                ..value = declarationMirror.reflectedType;
+              ..value = declarationMirror.reflectedType;
           }
         }
       });
@@ -48460,34 +48726,44 @@
     return packageProperties(properties);
   }
 
-  static List getObjectProperties(o, bool ownProperties,
-      bool accessorPropertiesOnly) {
+  static List getObjectProperties(
+      o, bool ownProperties, bool accessorPropertiesOnly) {
     var properties = new Map<String, _Property>();
     var names = new Set<String>();
     var objectMirror = reflect(o);
     var classMirror = objectMirror.type;
-    _addInstanceMirrors(objectMirror, classMirror.owner,
+    _addInstanceMirrors(
+        objectMirror,
+        classMirror.owner,
         classMirror.instanceMembers,
-        ownProperties, accessorPropertiesOnly, false, true,
+        ownProperties,
+        accessorPropertiesOnly,
+        false,
+        true,
         properties);
     return packageProperties(properties);
   }
 
-  static List getObjectClassProperties(o, bool ownProperties,
-      bool accessorPropertiesOnly) {
+  static List getObjectClassProperties(
+      o, bool ownProperties, bool accessorPropertiesOnly) {
     var properties = new Map<String, _Property>();
     var objectMirror = reflect(o);
     var classMirror = objectMirror.type;
-    _addInstanceMirrors(objectMirror, classMirror.owner,
+    _addInstanceMirrors(
+        objectMirror,
+        classMirror.owner,
         classMirror.instanceMembers,
-        ownProperties, accessorPropertiesOnly, true, false,
+        ownProperties,
+        accessorPropertiesOnly,
+        true,
+        false,
         properties);
     _addStatics(classMirror, properties, accessorPropertiesOnly);
     return packageProperties(properties);
   }
 
-  static List getClassProperties(Type t, bool ownProperties,
-      bool accessorPropertiesOnly) {
+  static List getClassProperties(
+      Type t, bool ownProperties, bool accessorPropertiesOnly) {
     var properties = new Map<String, _Property>();
     var classMirror = reflectClass(t);
     _addStatics(classMirror, properties, accessorPropertiesOnly);
@@ -48495,8 +48771,7 @@
   }
 
   static void _addStatics(ClassMirror classMirror,
-                          Map<String, _Property> properties,
-                          bool accessorPropertiesOnly) {
+      Map<String, _Property> properties, bool accessorPropertiesOnly) {
     var libraryMirror = classMirror.owner;
     classMirror.declarations.forEach((symbol, declaration) {
       var name = _getShortSymbolName(symbol, declaration);
@@ -48505,8 +48780,8 @@
         if (accessorPropertiesOnly) return;
         if (!declaration.isStatic) return;
         properties.putIfAbsent(name, () => new _Property(name))
-            ..value = classMirror.getField(symbol).reflectee
-            ..writable = !declaration.isFinal && !declaration.isConst;
+          ..value = classMirror.getField(symbol).reflectee
+          ..writable = !declaration.isFinal && !declaration.isConst;
       } else if (declaration is MethodMirror) {
         MethodMirror methodMirror = declaration;
         // FIXMEDART: should we display constructors?
@@ -48528,31 +48803,35 @@
     });
   }
 
-  static void _fillMethodMirrorProperty(LibraryMirror libraryMirror,
-        methodOwner, MethodMirror methodMirror, Symbol symbol,
-        bool accessorPropertiesOnly, _Property property) {
+  static void _fillMethodMirrorProperty(
+      LibraryMirror libraryMirror,
+      methodOwner,
+      MethodMirror methodMirror,
+      Symbol symbol,
+      bool accessorPropertiesOnly,
+      _Property property) {
     if (methodMirror.isRegularMethod) {
       property
-          ..value = new _MethodTrampoline(methodOwner, methodMirror, symbol)
-          ..isMethod = true;
+        ..value = new _MethodTrampoline(methodOwner, methodMirror, symbol)
+        ..isMethod = true;
     } else if (methodMirror.isGetter) {
       if (treatPropertyAsField(methodMirror, libraryMirror)) {
         try {
           property.value = methodOwner.getField(symbol).reflectee;
         } catch (e) {
           property
-              ..wasThrown = true
-              ..value = e;
+            ..wasThrown = true
+            ..value = e;
         }
       } else if (accessorPropertiesOnly) {
-        property.getter = new _GetterTrampoline(methodOwner,
-            methodMirror, symbol);
+        property.getter =
+            new _GetterTrampoline(methodOwner, methodMirror, symbol);
       }
     } else if (methodMirror.isSetter) {
       if (accessorPropertiesOnly &&
           !treatPropertyAsField(methodMirror, libraryMirror)) {
-        property.setter = new _SetterTrampoline(methodOwner,
-            methodMirror, MirrorSystem.getSymbol(property.name, libraryMirror));
+        property.setter = new _SetterTrampoline(methodOwner, methodMirror,
+            MirrorSystem.getSymbol(property.name, libraryMirror));
       }
       property.writable = true;
     }
@@ -48572,8 +48851,10 @@
       ObjectMirror objectMirror,
       LibraryMirror libraryMirror,
       Map<Symbol, Mirror> declarations,
-      bool ownProperties, bool accessorPropertiesOnly,
-      bool hideFields, bool hideMethods,
+      bool ownProperties,
+      bool accessorPropertiesOnly,
+      bool hideFields,
+      bool hideMethods,
       Map<String, _Property> properties) {
     declarations.forEach((symbol, declaration) {
       if (declaration is TypedefMirror || declaration is ClassMirror) return;
@@ -48584,7 +48865,8 @@
               treatPropertyAsField(declaration, libraryMirror));
       if ((isField && hideFields) || (hideMethods && !isField)) return;
       if (accessorPropertiesOnly) {
-        if (declaration is VariableMirror || declaration.isRegularMethod ||
+        if (declaration is VariableMirror ||
+            declaration.isRegularMethod ||
             isField) {
           return;
         }
@@ -48596,8 +48878,8 @@
       var property = properties.putIfAbsent(name, () => new _Property(name));
       if (declaration is VariableMirror) {
         property
-            ..value = objectMirror.getField(symbol).reflectee
-            ..writable = !declaration.isFinal && !declaration.isConst;
+          ..value = objectMirror.getField(symbol).reflectee
+          ..writable = !declaration.isFinal && !declaration.isConst;
         return;
       }
       _fillMethodMirrorProperty(libraryMirror, objectMirror, declaration,
@@ -48612,15 +48894,17 @@
   static List packageProperties(Map<String, _Property> properties) {
     var ret = [];
     for (var property in properties.values) {
-      ret.addAll([property.name,
-                  property.setter,
-                  property.getter,
-                  property.value,
-                  property.hasValue,
-                  property.writable,
-                  property.isMethod,
-                  property.isOwn,
-                  property.wasThrown]);
+      ret.addAll([
+        property.name,
+        property.setter,
+        property.getter,
+        property.value,
+        property.hasValue,
+        property.writable,
+        property.isMethod,
+        property.isOwn,
+        property.wasThrown
+      ]);
     }
     return ret;
   }
@@ -48639,9 +48923,10 @@
         LibraryMirror library = classMirror.owner;
         if (!attemptedLibraries.contains(library)) {
           try {
-            return objectMirror.getField(
-                MirrorSystem.getSymbol(propertyName, library)).reflectee;
-          } catch (e) { }
+            return objectMirror
+                .getField(MirrorSystem.getSymbol(propertyName, library))
+                .reflectee;
+          } catch (e) {}
           attemptedLibraries.add(library);
         }
         classMirror = classMirror.superclass;
@@ -48649,8 +48934,9 @@
       return null;
     }
     try {
-      return objectMirror.getField(
-          MirrorSystem.getSymbol(propertyName)).reflectee;
+      return objectMirror
+          .getField(MirrorSystem.getSymbol(propertyName))
+          .reflectee;
     } catch (e) {
       return null;
     }
@@ -48662,25 +48948,25 @@
    */
   static List consoleApi(host) {
     return [
-        "inspect",
-        (o) {
-          js.JsNative.callMethod(host, "_inspect", [o]);
-          return o;
-        },
-        "dir",
-        window.console.dir,
-        "dirxml",
-        window.console.dirxml
-        // FIXME: add copy method.
-        ];
+      "inspect",
+      (o) {
+        js.JsNative.callMethod(host, "_inspect", [o]);
+        return o;
+      },
+      "dir",
+      window.console.dir,
+      "dirxml",
+      window.console.dirxml
+      // FIXME: add copy method.
+    ];
   }
 
   static List getMapKeyList(Map map) => map.keys.toList();
 
   static bool isNoSuchMethodError(obj) => obj is NoSuchMethodError;
 
-  static void register(Document document, String tag, Type type,
-      String extendsTagName) {
+  static void register(
+      Document document, String tag, Type type, String extendsTagName) {
     var nativeClass = _validateCustomType(type);
 
     if (extendsTagName == null) {
@@ -48694,70 +48980,90 @@
   }
 
   static void _register(Document document, String tag, Type customType,
-    String extendsTagName) => _blink.Blink_Utils.register(document, tag, customType, extendsTagName);
+          String extendsTagName) =>
+      _blink.Blink_Utils.register(document, tag, customType, extendsTagName);
 
   static Element createElement(Document document, String tagName) =>
       _blink.Blink_Utils.createElement(document, tagName);
 }
 
-// TODO(jacobr): this seems busted. I believe we are actually
-// giving users real windows for opener, parent, top, etc.
-// Or worse, we are probaly returning a raw JSObject.
-class _DOMWindowCrossFrame extends DartHtmlDomObject implements
-    WindowBase {
-
+class _DOMWindowCrossFrame extends DartHtmlDomObject implements WindowBase {
   _DOMWindowCrossFrame.internal();
-  
-  static _createSafe(win) => _blink.Blink_Utils.setInstanceInterceptor(win, _DOMWindowCrossFrame);
+
+  static _createSafe(win) {
+    if (identical(win, window)) {
+      // The current Window object is the only window object that should not
+      // use _DOMWindowCrossFrame.
+      return window;
+    }
+    return win is _DOMWindowCrossFrame ? win : _blink.Blink_Utils.setInstanceInterceptor(win, _DOMWindowCrossFrame);
+  }
 
   // Fields.
-  HistoryBase get history => _blink.Blink_DOMWindowCrossFrame.get_history(this);
-  LocationBase get location => _blink.Blink_DOMWindowCrossFrame.get_location(this);
-  bool get closed => _blink.Blink_DOMWindowCrossFrame.get_closed(this);
-  WindowBase get opener => _blink.Blink_DOMWindowCrossFrame.get_opener(this);
-  WindowBase get parent => _blink.Blink_DOMWindowCrossFrame.get_parent(this);
-  WindowBase get top => _blink.Blink_DOMWindowCrossFrame.get_top(this);
+  HistoryBase get history {
+    var history =  _blink.BlinkWindow.instance.history_Getter_(this);
+    return history is _HistoryCrossFrame ? history : _blink.Blink_Utils.setInstanceInterceptor(history, _HistoryCrossFrame);
+  }
+
+  LocationBase get location {
+    var location = _blink.BlinkWindow.instance.location_Getter_(this);
+    return location is _LocationCrossFrame ? location : _blink.Blink_Utils.setInstanceInterceptor(location, _LocationCrossFrame);
+  }
+
+  bool get closed => _blink.BlinkWindow.instance.closed_Getter_(this);
+  WindowBase get opener => _convertNativeToDart_Window(_blink.BlinkWindow.instance.opener_Getter_(this));
+  WindowBase get parent => _convertNativeToDart_Window(_blink.BlinkWindow.instance.parent_Getter_(this));
+  WindowBase get top => _convertNativeToDart_Window(_blink.BlinkWindow.instance.top_Getter_(this));
 
   // Methods.
-  void close() => _blink.Blink_DOMWindowCrossFrame.close(this);
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) =>
-      _blink.Blink_DOMWindowCrossFrame.postMessage(this,
-         convertDartToNative_SerializedScriptValue(message), targetOrigin, messagePorts);
+  void close() => _blink.BlinkWindow.instance.close_Callback_0_(this);
+  void postMessage(Object message, String targetOrigin, [List<MessagePort> transfer]) => _blink.BlinkWindow.instance.postMessage_Callback_3_(this, convertDartToNative_SerializedScriptValue(message), targetOrigin, transfer);
 
   // Implementation support.
   String get typeName => "Window";
 
   // TODO(efortuna): Remove this method. dartbug.com/16814
   Events get on => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+      'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
-  void _addEventListener([String type, EventListener listener, bool useCapture])
-      => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+  void _addEventListener(
+          [String type, EventListener listener, bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
-  void addEventListener(String type, EventListener listener, [bool useCapture])
-      => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+  void addEventListener(String type, EventListener listener,
+          [bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
   bool dispatchEvent(Event event) => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+      'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
-  void _removeEventListener([String type, EventListener listener,
-      bool useCapture]) => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+  void _removeEventListener(
+          [String type, EventListener listener, bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
   void removeEventListener(String type, EventListener listener,
-      [bool useCapture]) => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+          [bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
 }
 
 class _HistoryCrossFrame extends DartHtmlDomObject implements HistoryBase {
   _HistoryCrossFrame.internal();
 
   // Methods.
-  void back() => _blink.Blink_HistoryCrossFrame.back(this);
-  void forward() => _blink.Blink_HistoryCrossFrame.forward(this);
-  void go(int distance) => _blink.Blink_HistoryCrossFrame.go(this, distance);
+  void back() => _blink.BlinkHistory.instance.back_Callback_0_(this);
+  void forward() => _blink.BlinkHistory.instance.forward_Callback_0_(this);
+  void go([int delta]) {
+    if (delta != null) {
+      _blink.BlinkHistory.instance.go_Callback_1_(this, delta);
+      return;
+    }
+    _blink.BlinkHistory.instance.go_Callback_0_(this);
+    return;
+  }
 
   // Implementation support.
   String get typeName => "History";
@@ -48767,7 +49073,7 @@
   _LocationCrossFrame.internal();
 
   // Fields.
-  set href(String h) => _blink.Blink_LocationCrossFrame.set_href(this, h);
+  set href(String value) => _blink.BlinkLocation.instance.href_Setter_(this, value);
 
   // Implementation support.
   String get typeName => "Location";
@@ -48790,8 +49096,9 @@
   return completer.future;
 }
 
-Future<SendPort> _spawnDomHelper(Function f) =>
-    _makeSendPortFuture((portId) { _Utils.spawnDomHelper(f, portId); });
+Future<SendPort> _spawnDomHelper(Function f) => _makeSendPortFuture((portId) {
+      _Utils.spawnDomHelper(f, portId);
+    });
 
 final Future<SendPort> __HELPER_ISOLATE_PORT =
     _spawnDomHelper(_helperIsolateMain);
@@ -48833,10 +49140,15 @@
     if (cmd == _NEW_TIMER) {
       final duration = new Duration(milliseconds: msg[1]);
       bool periodic = msg[2];
-      ping() { replyTo.send(_TIMER_PING); };
-      _TIMER_REGISTRY[replyTo] = periodic ?
-          new Timer.periodic(duration, (_) { ping(); }) :
-          new Timer(duration, ping);
+      ping() {
+        replyTo.send(_TIMER_PING);
+      }
+      ;
+      _TIMER_REGISTRY[replyTo] = periodic
+          ? new Timer.periodic(duration, (_) {
+              ping();
+            })
+          : new Timer(duration, ping);
     } else if (cmd == _CANCEL_TIMER) {
       _TIMER_REGISTRY.remove(replyTo).cancel();
     } else if (cmd == _PRINT) {
@@ -48849,7 +49161,7 @@
 
 final _printClosure = (s) => window.console.log(s);
 final _pureIsolatePrintClosure = (s) {
-    _sendToHelperIsolate([_PRINT, s], null);
+  _sendToHelperIsolate([_PRINT, s], null);
 };
 
 final _forwardingPrintClosure = _Utils.forwardingPrint;
@@ -48858,7 +49170,7 @@
 
 final _pureIsolateUriBaseClosure = () {
   throw new UnimplementedError("Uri.base on a background isolate "
-                               "is not supported in the browser");
+      "is not supported in the browser");
 };
 
 class _Timer implements Timer {
@@ -48869,13 +49181,17 @@
   _Timer(int milliSeconds, void callback(Timer timer), bool repeating) {
     if (repeating) {
       _state = (window._setInterval(() {
-        callback(this);
-      }, milliSeconds) << 1) | _STATE_INTERVAL;
+                callback(this);
+              }, milliSeconds) <<
+              1) |
+          _STATE_INTERVAL;
     } else {
       _state = (window._setTimeout(() {
-        _state = null;
-        callback(this);
-      }, milliSeconds) << 1) | _STATE_TIMEOUT;
+                _state = null;
+                callback(this);
+              }, milliSeconds) <<
+              1) |
+          _STATE_TIMEOUT;
     }
   }
 
@@ -48895,8 +49211,8 @@
 
 get _timerFactoryClosure =>
     (int milliSeconds, void callback(Timer timer), bool repeating) {
-  return new _Timer(milliSeconds, callback, repeating);
-};
+      return new _Timer(milliSeconds, callback, repeating);
+    };
 
 class _PureIsolateTimer implements Timer {
   bool _isActive = true;
@@ -48936,7 +49252,7 @@
 
 get _pureIsolateTimerFactoryClosure =>
     ((int milliSeconds, void callback(Timer time), bool repeating) =>
-  new _PureIsolateTimer(milliSeconds, callback, repeating));
+        new _PureIsolateTimer(milliSeconds, callback, repeating));
 
 class _ScheduleImmediateHelper {
   MutationObserver _observer;
@@ -48975,13 +49291,12 @@
     new _ScheduleImmediateHelper();
 
 get _scheduleImmediateClosure => (void callback()) {
-  _scheduleImmediateHelper._schedule(callback);
-};
+      _scheduleImmediateHelper._schedule(callback);
+    };
 
 get _pureIsolateScheduleImmediateClosure => ((void callback()) =>
-  throw new UnimplementedError("scheduleMicrotask in background isolates "
-                               "are not supported in the browser"));
+    throw new UnimplementedError("scheduleMicrotask in background isolates "
+        "are not supported in the browser"));
 
 // Class for unsupported native browser 'DOM' objects.
-class _UnsupportedBrowserObject extends DartHtmlDomObject {
-}
+class _UnsupportedBrowserObject extends DartHtmlDomObject {}
diff --git a/sdk/lib/html/html_common/conversions_dartium.dart b/sdk/lib/html/html_common/conversions_dartium.dart
index ef02c00..ce45920 100644
--- a/sdk/lib/html/html_common/conversions_dartium.dart
+++ b/sdk/lib/html/html_common/conversions_dartium.dart
@@ -267,9 +267,15 @@
       }
       prototype = js.JsNative.getProperty(prototype, '__proto__');
     }
-  } catch (e, stacktrace) {
-    if (e is DebugAssertException) print("${e.message}\n ${stacktrace}");
-    else print("${stacktrace}");
+  } catch (e) {
+    // This case can happen for cross frame objects.
+    if (js.JsNative.hasProperty(e, "postMessage")) {
+      // assume this is a Window. To match Dart2JS, separate conversion code
+      // in dart:html will switch the wrapper to a cross frame window as
+      // required.
+      // TODO(jacobr): we could consider removing this code completely.
+      return Window.instanceRuntimeType;
+    }
   }
   return js.JSObject.instanceRuntimeType;
 }
diff --git a/sdk/lib/io/data_transformer.dart b/sdk/lib/io/data_transformer.dart
index d3648e7..12d623a 100644
--- a/sdk/lib/io/data_transformer.dart
+++ b/sdk/lib/io/data_transformer.dart
@@ -147,7 +147,7 @@
   /**
    * Get a [ZLibEncoder] for encoding to `ZLib` compressed data.
    */
-  Converter<List<int>, List<int>> get encoder =>
+  ZLibEncoder get encoder =>
       new ZLibEncoder(gzip: false, level: level, windowBits: windowBits,
                       memLevel: memLevel, strategy: strategy,
                       dictionary: dictionary, raw: raw);
@@ -155,7 +155,7 @@
   /**
    * Get a [ZLibDecoder] for decoding `ZLib` compressed data.
    */
-  Converter<List<int>, List<int>> get decoder =>
+  ZLibDecoder get decoder =>
       new ZLibDecoder(windowBits: windowBits, dictionary: dictionary, raw: raw);
 }
 
@@ -259,7 +259,7 @@
   /**
    * Get a [ZLibEncoder] for encoding to `GZip` compressed data.
    */
-  Converter<List<int>, List<int>> get encoder =>
+  ZLibEncoder get encoder =>
       new ZLibEncoder(gzip: true, level: level, windowBits: windowBits,
                       memLevel: memLevel, strategy: strategy,
                       dictionary: dictionary, raw: raw);
@@ -267,7 +267,7 @@
   /**
    * Get a [ZLibDecoder] for decoding `GZip` compressed data.
    */
-  Converter<List<int>, List<int>> get decoder =>
+  ZLibDecoder get decoder =>
       new ZLibDecoder(windowBits: windowBits, dictionary: dictionary, raw: raw);
 }
 
@@ -275,7 +275,8 @@
  * The [ZLibEncoder] encoder is used by [ZLibCodec] and [GZipCodec] to compress
  * data.
  */
-class ZLibEncoder extends Converter<List<int>, List<int>> {
+class ZLibEncoder extends
+    ChunkedConverter<List<int>, List<int>, List<int>, List<int>> {
   /**
    * When true, `GZip` frames will be added to the compressed data.
    */
@@ -378,7 +379,8 @@
 /**
  * The [ZLibDecoder] is used by [ZLibCodec] and [GZipCodec] to decompress data.
  */
-class ZLibDecoder extends Converter<List<int>, List<int>> {
+class ZLibDecoder extends
+    ChunkedConverter<List<int>, List<int>, List<int>, List<int>> {
   /**
    * Base two logarithm of the window size (the size of the history buffer). It
    * should be in the range `8..15`. Larger values result in better compression
diff --git a/sdk/lib/io/string_transformer.dart b/sdk/lib/io/string_transformer.dart
index 16e721b..b6f4524 100644
--- a/sdk/lib/io/string_transformer.dart
+++ b/sdk/lib/io/string_transformer.dart
@@ -25,7 +25,7 @@
   List<int> encode(String input) => encoder.convert(input);
   String decode(List<int> encoded) => decoder.convert(encoded);
 
-  Converter<String, List<int>> get encoder {
+  ChunkedConverter<String, List<int>, String, List<int>> get encoder {
     if (Platform.operatingSystem == "windows") {
       return const _WindowsCodePageEncoder();
     } else {
@@ -33,7 +33,7 @@
     }
   }
 
-  Converter<List<int>, String> get decoder {
+  ChunkedConverter<List<int>, String, List<int>, String> get decoder {
     if (Platform.operatingSystem == "windows") {
       return const _WindowsCodePageDecoder();
     } else {
@@ -42,7 +42,8 @@
   }
 }
 
-class _WindowsCodePageEncoder extends Converter<String, List<int>> {
+class _WindowsCodePageEncoder
+    extends ChunkedConverter<String, List<int>, String, List<int>> {
 
   const _WindowsCodePageEncoder();
 
@@ -97,7 +98,8 @@
 }
 
 
-class _WindowsCodePageDecoder extends Converter<List<int>, String> {
+class _WindowsCodePageDecoder
+    extends ChunkedConverter<List<int>, String, List<int>, String> {
 
   const _WindowsCodePageDecoder();
 
diff --git a/sdk/lib/js/dartium/cached_patches.dart b/sdk/lib/js/dartium/cached_patches.dart
index 1c3e7ea..847abd5 100644
--- a/sdk/lib/js/dartium/cached_patches.dart
+++ b/sdk/lib/js/dartium/cached_patches.dart
@@ -15,546 +15,6 @@
  */
 const _UNDEFINED_JS_CONST = const Object();
 
-patch class DivElement {
-  static Type get instanceRuntimeType => DivElementImpl;
-
-}
-class DivElementImpl extends DivElement implements js_library.JSObjectInterfacesDom {
-  DivElementImpl.internal_() : super.internal_();
-  get runtimeType => DivElement;
-  toString() => super.toString();
-}
-patch class ImageElement {
-  static Type get instanceRuntimeType => ImageElementImpl;
-
-}
-class ImageElementImpl extends ImageElement implements js_library.JSObjectInterfacesDom {
-  ImageElementImpl.internal_() : super.internal_();
-  get runtimeType => ImageElement;
-  toString() => super.toString();
-}
-patch class TreeWalker {
-  static Type get instanceRuntimeType => TreeWalkerImpl;
-
-}
-class TreeWalkerImpl extends TreeWalker implements js_library.JSObjectInterfacesDom {
-  TreeWalkerImpl.internal_() : super.internal_();
-  get runtimeType => TreeWalker;
-  toString() => super.toString();
-}
-patch class TableSectionElement {
-  static Type get instanceRuntimeType => TableSectionElementImpl;
-
-}
-class TableSectionElementImpl extends TableSectionElement implements js_library.JSObjectInterfacesDom {
-  TableSectionElementImpl.internal_() : super.internal_();
-  get runtimeType => TableSectionElement;
-  toString() => super.toString();
-}
-patch class DetailsElement {
-  static Type get instanceRuntimeType => DetailsElementImpl;
-
-}
-class DetailsElementImpl extends DetailsElement implements js_library.JSObjectInterfacesDom {
-  DetailsElementImpl.internal_() : super.internal_();
-  get runtimeType => DetailsElement;
-  toString() => super.toString();
-}
-patch class XPathResult {
-  static Type get instanceRuntimeType => XPathResultImpl;
-
-}
-class XPathResultImpl extends XPathResult implements js_library.JSObjectInterfacesDom {
-  XPathResultImpl.internal_() : super.internal_();
-  get runtimeType => XPathResult;
-  toString() => super.toString();
-}
-patch class HttpRequest {
-  static Type get instanceRuntimeType => HttpRequestImpl;
-
-}
-class HttpRequestImpl extends HttpRequest implements js_library.JSObjectInterfacesDom {
-  HttpRequestImpl.internal_() : super.internal_();
-  get runtimeType => HttpRequest;
-  toString() => super.toString();
-}
-patch class SpeechSynthesisUtterance {
-  static Type get instanceRuntimeType => SpeechSynthesisUtteranceImpl;
-
-}
-class SpeechSynthesisUtteranceImpl extends SpeechSynthesisUtterance implements js_library.JSObjectInterfacesDom {
-  SpeechSynthesisUtteranceImpl.internal_() : super.internal_();
-  get runtimeType => SpeechSynthesisUtterance;
-  toString() => super.toString();
-}
-patch class CredentialsContainer {
-  static Type get instanceRuntimeType => CredentialsContainerImpl;
-
-}
-class CredentialsContainerImpl extends CredentialsContainer implements js_library.JSObjectInterfacesDom {
-  CredentialsContainerImpl.internal_() : super.internal_();
-  get runtimeType => CredentialsContainer;
-  toString() => super.toString();
-}
-patch class MessageChannel {
-  static Type get instanceRuntimeType => MessageChannelImpl;
-
-}
-class MessageChannelImpl extends MessageChannel implements js_library.JSObjectInterfacesDom {
-  MessageChannelImpl.internal_() : super.internal_();
-  get runtimeType => MessageChannel;
-  toString() => super.toString();
-}
-patch class CloseEvent {
-  static Type get instanceRuntimeType => CloseEventImpl;
-
-}
-class CloseEventImpl extends CloseEvent implements js_library.JSObjectInterfacesDom {
-  CloseEventImpl.internal_() : super.internal_();
-  get runtimeType => CloseEvent;
-  toString() => super.toString();
-}
-patch class ProgressEvent {
-  static Type get instanceRuntimeType => ProgressEventImpl;
-
-}
-class ProgressEventImpl extends ProgressEvent implements js_library.JSObjectInterfacesDom {
-  ProgressEventImpl.internal_() : super.internal_();
-  get runtimeType => ProgressEvent;
-  toString() => super.toString();
-}
-patch class MediaController {
-  static Type get instanceRuntimeType => MediaControllerImpl;
-
-}
-class MediaControllerImpl extends MediaController implements js_library.JSObjectInterfacesDom {
-  MediaControllerImpl.internal_() : super.internal_();
-  get runtimeType => MediaController;
-  toString() => super.toString();
-}
-patch class VRDevice {
-  static Type get instanceRuntimeType => VRDeviceImpl;
-
-}
-class VRDeviceImpl extends VRDevice implements js_library.JSObjectInterfacesDom {
-  VRDeviceImpl.internal_() : super.internal_();
-  get runtimeType => VRDevice;
-  toString() => super.toString();
-}
-patch class SpeechSynthesis {
-  static Type get instanceRuntimeType => SpeechSynthesisImpl;
-
-}
-class SpeechSynthesisImpl extends SpeechSynthesis implements js_library.JSObjectInterfacesDom {
-  SpeechSynthesisImpl.internal_() : super.internal_();
-  get runtimeType => SpeechSynthesis;
-  toString() => super.toString();
-}
-patch class HtmlCollection {
-  static Type get instanceRuntimeType => HtmlCollectionImpl;
-
-}
-class HtmlCollectionImpl extends HtmlCollection implements js_library.JSObjectInterfacesDom {
-  HtmlCollectionImpl.internal_() : super.internal_();
-  get runtimeType => HtmlCollection;
-  toString() => super.toString();
-}
-patch class Element {
-  static Type get instanceRuntimeType => ElementImpl;
-
-}
-class ElementImpl extends Element implements js_library.JSObjectInterfacesDom {
-  ElementImpl.internal_() : super.internal_();
-  get runtimeType => Element;
-  toString() => super.toString();
-}
-patch class Plugin {
-  static Type get instanceRuntimeType => PluginImpl;
-
-}
-class PluginImpl extends Plugin implements js_library.JSObjectInterfacesDom {
-  PluginImpl.internal_() : super.internal_();
-  get runtimeType => Plugin;
-  toString() => super.toString();
-}
-patch class CssFontFaceRule {
-  static Type get instanceRuntimeType => CssFontFaceRuleImpl;
-
-}
-class CssFontFaceRuleImpl extends CssFontFaceRule implements js_library.JSObjectInterfacesDom {
-  CssFontFaceRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssFontFaceRule;
-  toString() => super.toString();
-}
-patch class File {
-  static Type get instanceRuntimeType => FileImpl;
-
-}
-class FileImpl extends File implements js_library.JSObjectInterfacesDom {
-  FileImpl.internal_() : super.internal_();
-  get runtimeType => File;
-  toString() => super.toString();
-}
-patch class MouseEvent {
-  static Type get instanceRuntimeType => MouseEventImpl;
-
-}
-class MouseEventImpl extends MouseEvent implements js_library.JSObjectInterfacesDom {
-  MouseEventImpl.internal_() : super.internal_();
-  get runtimeType => MouseEvent;
-  toString() => super.toString();
-}
-patch class MenuElement {
-  static Type get instanceRuntimeType => MenuElementImpl;
-
-}
-class MenuElementImpl extends MenuElement implements js_library.JSObjectInterfacesDom {
-  MenuElementImpl.internal_() : super.internal_();
-  get runtimeType => MenuElement;
-  toString() => super.toString();
-}
-patch class ReadableByteStreamReader {
-  static Type get instanceRuntimeType => ReadableByteStreamReaderImpl;
-
-}
-class ReadableByteStreamReaderImpl extends ReadableByteStreamReader implements js_library.JSObjectInterfacesDom {
-  ReadableByteStreamReaderImpl.internal_() : super.internal_();
-  get runtimeType => ReadableByteStreamReader;
-  toString() => super.toString();
-}
-patch class FetchEvent {
-  static Type get instanceRuntimeType => FetchEventImpl;
-
-}
-class FetchEventImpl extends FetchEvent implements js_library.JSObjectInterfacesDom {
-  FetchEventImpl.internal_() : super.internal_();
-  get runtimeType => FetchEvent;
-  toString() => super.toString();
-}
-patch class MediaStreamTrack {
-  static Type get instanceRuntimeType => MediaStreamTrackImpl;
-
-}
-class MediaStreamTrackImpl extends MediaStreamTrack implements js_library.JSObjectInterfacesDom {
-  MediaStreamTrackImpl.internal_() : super.internal_();
-  get runtimeType => MediaStreamTrack;
-  toString() => super.toString();
-}
-patch class ShadowRoot {
-  static Type get instanceRuntimeType => ShadowRootImpl;
-
-}
-class ShadowRootImpl extends ShadowRoot implements js_library.JSObjectInterfacesDom {
-  ShadowRootImpl.internal_() : super.internal_();
-  get runtimeType => ShadowRoot;
-  toString() => super.toString();
-}
-patch class SpeechSynthesisEvent {
-  static Type get instanceRuntimeType => SpeechSynthesisEventImpl;
-
-}
-class SpeechSynthesisEventImpl extends SpeechSynthesisEvent implements js_library.JSObjectInterfacesDom {
-  SpeechSynthesisEventImpl.internal_() : super.internal_();
-  get runtimeType => SpeechSynthesisEvent;
-  toString() => super.toString();
-}
-patch class VRPositionState {
-  static Type get instanceRuntimeType => VRPositionStateImpl;
-
-}
-class VRPositionStateImpl extends VRPositionState implements js_library.JSObjectInterfacesDom {
-  VRPositionStateImpl.internal_() : super.internal_();
-  get runtimeType => VRPositionState;
-  toString() => super.toString();
-}
-patch class Window {
-  static Type get instanceRuntimeType => WindowImpl;
-
-}
-class WindowImpl extends Window implements js_library.JSObjectInterfacesDom {
-  WindowImpl.internal_() : super.internal_();
-  get runtimeType => Window;
-  toString() => super.toString();
-}
-patch class SpeechRecognition {
-  static Type get instanceRuntimeType => SpeechRecognitionImpl;
-
-}
-class SpeechRecognitionImpl extends SpeechRecognition implements js_library.JSObjectInterfacesDom {
-  SpeechRecognitionImpl.internal_() : super.internal_();
-  get runtimeType => SpeechRecognition;
-  toString() => super.toString();
-}
-patch class Console {
-  static Type get instanceRuntimeType => ConsoleImpl;
-
-}
-class ConsoleImpl extends Console implements js_library.JSObjectInterfacesDom {
-  ConsoleImpl.internal_() : super.internal_();
-  get runtimeType => Console;
-  toString() => super.toString();
-}
-patch class AutocompleteErrorEvent {
-  static Type get instanceRuntimeType => AutocompleteErrorEventImpl;
-
-}
-class AutocompleteErrorEventImpl extends AutocompleteErrorEvent implements js_library.JSObjectInterfacesDom {
-  AutocompleteErrorEventImpl.internal_() : super.internal_();
-  get runtimeType => AutocompleteErrorEvent;
-  toString() => super.toString();
-}
-patch class CanvasGradient {
-  static Type get instanceRuntimeType => CanvasGradientImpl;
-
-}
-class CanvasGradientImpl extends CanvasGradient implements js_library.JSObjectInterfacesDom {
-  CanvasGradientImpl.internal_() : super.internal_();
-  get runtimeType => CanvasGradient;
-  toString() => super.toString();
-}
-patch class MediaStream {
-  static Type get instanceRuntimeType => MediaStreamImpl;
-
-}
-class MediaStreamImpl extends MediaStream implements js_library.JSObjectInterfacesDom {
-  MediaStreamImpl.internal_() : super.internal_();
-  get runtimeType => MediaStream;
-  toString() => super.toString();
-}
-patch class _ClientRectList {
-  static Type get instanceRuntimeType => _ClientRectListImpl;
-
-}
-class _ClientRectListImpl extends _ClientRectList implements js_library.JSObjectInterfacesDom {
-  _ClientRectListImpl.internal_() : super.internal_();
-  get runtimeType => _ClientRectList;
-  toString() => super.toString();
-}
-patch class Document {
-  static Type get instanceRuntimeType => DocumentImpl;
-
-}
-class DocumentImpl extends Document implements js_library.JSObjectInterfacesDom {
-  DocumentImpl.internal_() : super.internal_();
-  get runtimeType => Document;
-  toString() => super.toString();
-}
-patch class MessageEvent {
-  static Type get instanceRuntimeType => MessageEventImpl;
-
-}
-class MessageEventImpl extends MessageEvent implements js_library.JSObjectInterfacesDom {
-  MessageEventImpl.internal_() : super.internal_();
-  get runtimeType => MessageEvent;
-  toString() => super.toString();
-}
-patch class RtcDtmfSender {
-  static Type get instanceRuntimeType => RtcDtmfSenderImpl;
-
-}
-class RtcDtmfSenderImpl extends RtcDtmfSender implements js_library.JSObjectInterfacesDom {
-  RtcDtmfSenderImpl.internal_() : super.internal_();
-  get runtimeType => RtcDtmfSender;
-  toString() => super.toString();
-}
-patch class ParamElement {
-  static Type get instanceRuntimeType => ParamElementImpl;
-
-}
-class ParamElementImpl extends ParamElement implements js_library.JSObjectInterfacesDom {
-  ParamElementImpl.internal_() : super.internal_();
-  get runtimeType => ParamElement;
-  toString() => super.toString();
-}
-patch class TextTrack {
-  static Type get instanceRuntimeType => TextTrackImpl;
-
-}
-class TextTrackImpl extends TextTrack implements js_library.JSObjectInterfacesDom {
-  TextTrackImpl.internal_() : super.internal_();
-  get runtimeType => TextTrack;
-  toString() => super.toString();
-}
-patch class ModElement {
-  static Type get instanceRuntimeType => ModElementImpl;
-
-}
-class ModElementImpl extends ModElement implements js_library.JSObjectInterfacesDom {
-  ModElementImpl.internal_() : super.internal_();
-  get runtimeType => ModElement;
-  toString() => super.toString();
-}
-patch class ScriptElement {
-  static Type get instanceRuntimeType => ScriptElementImpl;
-
-}
-class ScriptElementImpl extends ScriptElement implements js_library.JSObjectInterfacesDom {
-  ScriptElementImpl.internal_() : super.internal_();
-  get runtimeType => ScriptElement;
-  toString() => super.toString();
-}
-patch class VRFieldOfView {
-  static Type get instanceRuntimeType => VRFieldOfViewImpl;
-
-}
-class VRFieldOfViewImpl extends VRFieldOfView implements js_library.JSObjectInterfacesDom {
-  VRFieldOfViewImpl.internal_() : super.internal_();
-  get runtimeType => VRFieldOfView;
-  toString() => super.toString();
-}
-patch class SyncRegistration {
-  static Type get instanceRuntimeType => SyncRegistrationImpl;
-
-}
-class SyncRegistrationImpl extends SyncRegistration implements js_library.JSObjectInterfacesDom {
-  SyncRegistrationImpl.internal_() : super.internal_();
-  get runtimeType => SyncRegistration;
-  toString() => super.toString();
-}
-patch class Touch {
-  static Type get instanceRuntimeType => TouchImpl;
-
-}
-class TouchImpl extends Touch implements js_library.JSObjectInterfacesDom {
-  TouchImpl.internal_() : super.internal_();
-  get runtimeType => Touch;
-  toString() => super.toString();
-}
-patch class BarProp {
-  static Type get instanceRuntimeType => BarPropImpl;
-
-}
-class BarPropImpl extends BarProp implements js_library.JSObjectInterfacesDom {
-  BarPropImpl.internal_() : super.internal_();
-  get runtimeType => BarProp;
-  toString() => super.toString();
-}
-patch class DeviceLightEvent {
-  static Type get instanceRuntimeType => DeviceLightEventImpl;
-
-}
-class DeviceLightEventImpl extends DeviceLightEvent implements js_library.JSObjectInterfacesDom {
-  DeviceLightEventImpl.internal_() : super.internal_();
-  get runtimeType => DeviceLightEvent;
-  toString() => super.toString();
-}
-patch class MediaDevices {
-  static Type get instanceRuntimeType => MediaDevicesImpl;
-
-}
-class MediaDevicesImpl extends MediaDevices implements js_library.JSObjectInterfacesDom {
-  MediaDevicesImpl.internal_() : super.internal_();
-  get runtimeType => MediaDevices;
-  toString() => super.toString();
-}
-patch class Url {
-  static Type get instanceRuntimeType => UrlImpl;
-
-}
-class UrlImpl extends Url implements js_library.JSObjectInterfacesDom {
-  UrlImpl.internal_() : super.internal_();
-  get runtimeType => Url;
-  toString() => super.toString();
-}
-patch class EmbedElement {
-  static Type get instanceRuntimeType => EmbedElementImpl;
-
-}
-class EmbedElementImpl extends EmbedElement implements js_library.JSObjectInterfacesDom {
-  EmbedElementImpl.internal_() : super.internal_();
-  get runtimeType => EmbedElement;
-  toString() => super.toString();
-}
-patch class Metadata {
-  static Type get instanceRuntimeType => MetadataImpl;
-
-}
-class MetadataImpl extends Metadata implements js_library.JSObjectInterfacesDom {
-  MetadataImpl.internal_() : super.internal_();
-  get runtimeType => Metadata;
-  toString() => super.toString();
-}
-patch class _FileEntrySync {
-  static Type get instanceRuntimeType => _FileEntrySyncImpl;
-
-}
-class _FileEntrySyncImpl extends _FileEntrySync implements js_library.JSObjectInterfacesDom {
-  _FileEntrySyncImpl.internal_() : super.internal_();
-  get runtimeType => _FileEntrySync;
-  toString() => super.toString();
-}
-patch class BaseElement {
-  static Type get instanceRuntimeType => BaseElementImpl;
-
-}
-class BaseElementImpl extends BaseElement implements js_library.JSObjectInterfacesDom {
-  BaseElementImpl.internal_() : super.internal_();
-  get runtimeType => BaseElement;
-  toString() => super.toString();
-}
-patch class BRElement {
-  static Type get instanceRuntimeType => BRElementImpl;
-
-}
-class BRElementImpl extends BRElement implements js_library.JSObjectInterfacesDom {
-  BRElementImpl.internal_() : super.internal_();
-  get runtimeType => BRElement;
-  toString() => super.toString();
-}
-patch class Presentation {
-  static Type get instanceRuntimeType => PresentationImpl;
-
-}
-class PresentationImpl extends Presentation implements js_library.JSObjectInterfacesDom {
-  PresentationImpl.internal_() : super.internal_();
-  get runtimeType => Presentation;
-  toString() => super.toString();
-}
-patch class CircularGeofencingRegion {
-  static Type get instanceRuntimeType => CircularGeofencingRegionImpl;
-
-}
-class CircularGeofencingRegionImpl extends CircularGeofencingRegion implements js_library.JSObjectInterfacesDom {
-  CircularGeofencingRegionImpl.internal_() : super.internal_();
-  get runtimeType => CircularGeofencingRegion;
-  toString() => super.toString();
-}
-patch class PushManager {
-  static Type get instanceRuntimeType => PushManagerImpl;
-
-}
-class PushManagerImpl extends PushManager implements js_library.JSObjectInterfacesDom {
-  PushManagerImpl.internal_() : super.internal_();
-  get runtimeType => PushManager;
-  toString() => super.toString();
-}
-patch class PasswordCredential {
-  static Type get instanceRuntimeType => PasswordCredentialImpl;
-
-}
-class PasswordCredentialImpl extends PasswordCredential implements js_library.JSObjectInterfacesDom {
-  PasswordCredentialImpl.internal_() : super.internal_();
-  get runtimeType => PasswordCredential;
-  toString() => super.toString();
-}
-patch class ObjectElement {
-  static Type get instanceRuntimeType => ObjectElementImpl;
-
-}
-class ObjectElementImpl extends ObjectElement implements js_library.JSObjectInterfacesDom {
-  ObjectElementImpl.internal_() : super.internal_();
-  get runtimeType => ObjectElement;
-  toString() => super.toString();
-}
-patch class DomMatrix {
-  static Type get instanceRuntimeType => DomMatrixImpl;
-
-}
-class DomMatrixImpl extends DomMatrix implements js_library.JSObjectInterfacesDom {
-  DomMatrixImpl.internal_() : super.internal_();
-  get runtimeType => DomMatrix;
-  toString() => super.toString();
-}
 patch class AbstractWorker {
   static Type get instanceRuntimeType => AbstractWorkerImpl;
 
@@ -564,1752 +24,6 @@
   get runtimeType => AbstractWorker;
   toString() => super.toString();
 }
-patch class ResourceProgressEvent {
-  static Type get instanceRuntimeType => ResourceProgressEventImpl;
-
-}
-class ResourceProgressEventImpl extends ResourceProgressEvent implements js_library.JSObjectInterfacesDom {
-  ResourceProgressEventImpl.internal_() : super.internal_();
-  get runtimeType => ResourceProgressEvent;
-  toString() => super.toString();
-}
-patch class ValidityState {
-  static Type get instanceRuntimeType => ValidityStateImpl;
-
-}
-class ValidityStateImpl extends ValidityState implements js_library.JSObjectInterfacesDom {
-  ValidityStateImpl.internal_() : super.internal_();
-  get runtimeType => ValidityState;
-  toString() => super.toString();
-}
-patch class HRElement {
-  static Type get instanceRuntimeType => HRElementImpl;
-
-}
-class HRElementImpl extends HRElement implements js_library.JSObjectInterfacesDom {
-  HRElementImpl.internal_() : super.internal_();
-  get runtimeType => HRElement;
-  toString() => super.toString();
-}
-patch class OptGroupElement {
-  static Type get instanceRuntimeType => OptGroupElementImpl;
-
-}
-class OptGroupElementImpl extends OptGroupElement implements js_library.JSObjectInterfacesDom {
-  OptGroupElementImpl.internal_() : super.internal_();
-  get runtimeType => OptGroupElement;
-  toString() => super.toString();
-}
-patch class Crypto {
-  static Type get instanceRuntimeType => CryptoImpl;
-
-}
-class CryptoImpl extends Crypto implements js_library.JSObjectInterfacesDom {
-  CryptoImpl.internal_() : super.internal_();
-  get runtimeType => Crypto;
-  toString() => super.toString();
-}
-patch class PerformanceTiming {
-  static Type get instanceRuntimeType => PerformanceTimingImpl;
-
-}
-class PerformanceTimingImpl extends PerformanceTiming implements js_library.JSObjectInterfacesDom {
-  PerformanceTimingImpl.internal_() : super.internal_();
-  get runtimeType => PerformanceTiming;
-  toString() => super.toString();
-}
-patch class RtcDataChannel {
-  static Type get instanceRuntimeType => RtcDataChannelImpl;
-
-}
-class RtcDataChannelImpl extends RtcDataChannel implements js_library.JSObjectInterfacesDom {
-  RtcDataChannelImpl.internal_() : super.internal_();
-  get runtimeType => RtcDataChannel;
-  toString() => super.toString();
-}
-patch class NavigatorOnLine {
-  static Type get instanceRuntimeType => NavigatorOnLineImpl;
-
-}
-class NavigatorOnLineImpl extends NavigatorOnLine implements js_library.JSObjectInterfacesDom {
-  NavigatorOnLineImpl.internal_() : super.internal_();
-  get runtimeType => NavigatorOnLine;
-  toString() => super.toString();
-}
-patch class _HTMLAppletElement {
-  static Type get instanceRuntimeType => _HTMLAppletElementImpl;
-
-}
-class _HTMLAppletElementImpl extends _HTMLAppletElement implements js_library.JSObjectInterfacesDom {
-  _HTMLAppletElementImpl.internal_() : super.internal_();
-  get runtimeType => _HTMLAppletElement;
-  toString() => super.toString();
-}
-patch class SpeechSynthesisVoice {
-  static Type get instanceRuntimeType => SpeechSynthesisVoiceImpl;
-
-}
-class SpeechSynthesisVoiceImpl extends SpeechSynthesisVoice implements js_library.JSObjectInterfacesDom {
-  SpeechSynthesisVoiceImpl.internal_() : super.internal_();
-  get runtimeType => SpeechSynthesisVoice;
-  toString() => super.toString();
-}
-patch class FontFaceSetLoadEvent {
-  static Type get instanceRuntimeType => FontFaceSetLoadEventImpl;
-
-}
-class FontFaceSetLoadEventImpl extends FontFaceSetLoadEvent implements js_library.JSObjectInterfacesDom {
-  FontFaceSetLoadEventImpl.internal_() : super.internal_();
-  get runtimeType => FontFaceSetLoadEvent;
-  toString() => super.toString();
-}
-patch class NavigatorStorageUtils {
-  static Type get instanceRuntimeType => NavigatorStorageUtilsImpl;
-
-}
-class NavigatorStorageUtilsImpl extends NavigatorStorageUtils implements js_library.JSObjectInterfacesDom {
-  NavigatorStorageUtilsImpl.internal_() : super.internal_();
-  get runtimeType => NavigatorStorageUtils;
-  toString() => super.toString();
-}
-patch class SourceElement {
-  static Type get instanceRuntimeType => SourceElementImpl;
-
-}
-class SourceElementImpl extends SourceElement implements js_library.JSObjectInterfacesDom {
-  SourceElementImpl.internal_() : super.internal_();
-  get runtimeType => SourceElement;
-  toString() => super.toString();
-}
-patch class InjectedScriptHost {
-  static Type get instanceRuntimeType => InjectedScriptHostImpl;
-
-}
-class InjectedScriptHostImpl extends InjectedScriptHost implements js_library.JSObjectInterfacesDom {
-  InjectedScriptHostImpl.internal_() : super.internal_();
-  get runtimeType => InjectedScriptHost;
-  toString() => super.toString();
-}
-patch class UIEvent {
-  static Type get instanceRuntimeType => UIEventImpl;
-
-}
-class UIEventImpl extends UIEvent implements js_library.JSObjectInterfacesDom {
-  UIEventImpl.internal_() : super.internal_();
-  get runtimeType => UIEvent;
-  toString() => super.toString();
-}
-patch class HtmlHtmlElement {
-  static Type get instanceRuntimeType => HtmlHtmlElementImpl;
-
-}
-class HtmlHtmlElementImpl extends HtmlHtmlElement implements js_library.JSObjectInterfacesDom {
-  HtmlHtmlElementImpl.internal_() : super.internal_();
-  get runtimeType => HtmlHtmlElement;
-  toString() => super.toString();
-}
-patch class ClipboardEvent {
-  static Type get instanceRuntimeType => ClipboardEventImpl;
-
-}
-class ClipboardEventImpl extends ClipboardEvent implements js_library.JSObjectInterfacesDom {
-  ClipboardEventImpl.internal_() : super.internal_();
-  get runtimeType => ClipboardEvent;
-  toString() => super.toString();
-}
-patch class OptionElement {
-  static Type get instanceRuntimeType => OptionElementImpl;
-
-}
-class OptionElementImpl extends OptionElement implements js_library.JSObjectInterfacesDom {
-  OptionElementImpl.internal_() : super.internal_();
-  get runtimeType => OptionElement;
-  toString() => super.toString();
-}
-patch class MediaSource {
-  static Type get instanceRuntimeType => MediaSourceImpl;
-
-}
-class MediaSourceImpl extends MediaSource implements js_library.JSObjectInterfacesDom {
-  MediaSourceImpl.internal_() : super.internal_();
-  get runtimeType => MediaSource;
-  toString() => super.toString();
-}
-patch class MediaKeyMessageEvent {
-  static Type get instanceRuntimeType => MediaKeyMessageEventImpl;
-
-}
-class MediaKeyMessageEventImpl extends MediaKeyMessageEvent implements js_library.JSObjectInterfacesDom {
-  MediaKeyMessageEventImpl.internal_() : super.internal_();
-  get runtimeType => MediaKeyMessageEvent;
-  toString() => super.toString();
-}
-patch class CustomEvent {
-  static Type get instanceRuntimeType => CustomEventImpl;
-
-}
-class CustomEventImpl extends CustomEvent implements js_library.JSObjectInterfacesDom {
-  CustomEventImpl.internal_() : super.internal_();
-  get runtimeType => CustomEvent;
-  toString() => super.toString();
-}
-patch class VttRegion {
-  static Type get instanceRuntimeType => VttRegionImpl;
-
-}
-class VttRegionImpl extends VttRegion implements js_library.JSObjectInterfacesDom {
-  VttRegionImpl.internal_() : super.internal_();
-  get runtimeType => VttRegion;
-  toString() => super.toString();
-}
-patch class HeadingElement {
-  static Type get instanceRuntimeType => HeadingElementImpl;
-
-}
-class HeadingElementImpl extends HeadingElement implements js_library.JSObjectInterfacesDom {
-  HeadingElementImpl.internal_() : super.internal_();
-  get runtimeType => HeadingElement;
-  toString() => super.toString();
-}
-patch class History {
-  static Type get instanceRuntimeType => HistoryImpl;
-
-}
-class HistoryImpl extends History implements js_library.JSObjectInterfacesDom {
-  HistoryImpl.internal_() : super.internal_();
-  get runtimeType => History;
-  toString() => super.toString();
-}
-patch class ServiceWorkerRegistration {
-  static Type get instanceRuntimeType => ServiceWorkerRegistrationImpl;
-
-}
-class ServiceWorkerRegistrationImpl extends ServiceWorkerRegistration implements js_library.JSObjectInterfacesDom {
-  ServiceWorkerRegistrationImpl.internal_() : super.internal_();
-  get runtimeType => ServiceWorkerRegistration;
-  toString() => super.toString();
-}
-patch class _WorkerNavigator {
-  static Type get instanceRuntimeType => _WorkerNavigatorImpl;
-
-}
-class _WorkerNavigatorImpl extends _WorkerNavigator implements js_library.JSObjectInterfacesDom {
-  _WorkerNavigatorImpl.internal_() : super.internal_();
-  get runtimeType => _WorkerNavigator;
-  toString() => super.toString();
-}
-patch class RtcStatsResponse {
-  static Type get instanceRuntimeType => RtcStatsResponseImpl;
-
-}
-class RtcStatsResponseImpl extends RtcStatsResponse implements js_library.JSObjectInterfacesDom {
-  RtcStatsResponseImpl.internal_() : super.internal_();
-  get runtimeType => RtcStatsResponse;
-  toString() => super.toString();
-}
-patch class DirectoryReader {
-  static Type get instanceRuntimeType => DirectoryReaderImpl;
-
-}
-class DirectoryReaderImpl extends DirectoryReader implements js_library.JSObjectInterfacesDom {
-  DirectoryReaderImpl.internal_() : super.internal_();
-  get runtimeType => DirectoryReader;
-  toString() => super.toString();
-}
-patch class Headers {
-  static Type get instanceRuntimeType => HeadersImpl;
-
-}
-class HeadersImpl extends Headers implements js_library.JSObjectInterfacesDom {
-  HeadersImpl.internal_() : super.internal_();
-  get runtimeType => Headers;
-  toString() => super.toString();
-}
-patch class DataListElement {
-  static Type get instanceRuntimeType => DataListElementImpl;
-
-}
-class DataListElementImpl extends DataListElement implements js_library.JSObjectInterfacesDom {
-  DataListElementImpl.internal_() : super.internal_();
-  get runtimeType => DataListElement;
-  toString() => super.toString();
-}
-patch class MediaList {
-  static Type get instanceRuntimeType => MediaListImpl;
-
-}
-class MediaListImpl extends MediaList implements js_library.JSObjectInterfacesDom {
-  MediaListImpl.internal_() : super.internal_();
-  get runtimeType => MediaList;
-  toString() => super.toString();
-}
-patch class ParentNode {
-  static Type get instanceRuntimeType => ParentNodeImpl;
-
-}
-class ParentNodeImpl extends ParentNode implements js_library.JSObjectInterfacesDom {
-  ParentNodeImpl.internal_() : super.internal_();
-  get runtimeType => ParentNode;
-  toString() => super.toString();
-}
-patch class _FileReaderSync {
-  static Type get instanceRuntimeType => _FileReaderSyncImpl;
-
-}
-class _FileReaderSyncImpl extends _FileReaderSync implements js_library.JSObjectInterfacesDom {
-  _FileReaderSyncImpl.internal_() : super.internal_();
-  get runtimeType => _FileReaderSync;
-  toString() => super.toString();
-}
-patch class DataTransferItemList {
-  static Type get instanceRuntimeType => DataTransferItemListImpl;
-
-}
-class DataTransferItemListImpl extends DataTransferItemList implements js_library.JSObjectInterfacesDom {
-  DataTransferItemListImpl.internal_() : super.internal_();
-  get runtimeType => DataTransferItemList;
-  toString() => super.toString();
-}
-patch class GlobalEventHandlers {
-  static Type get instanceRuntimeType => GlobalEventHandlersImpl;
-
-}
-class GlobalEventHandlersImpl extends GlobalEventHandlers implements js_library.JSObjectInterfacesDom {
-  GlobalEventHandlersImpl.internal_() : super.internal_();
-  get runtimeType => GlobalEventHandlers;
-  toString() => super.toString();
-}
-patch class DocumentFragment {
-  static Type get instanceRuntimeType => DocumentFragmentImpl;
-
-}
-class DocumentFragmentImpl extends DocumentFragment implements js_library.JSObjectInterfacesDom {
-  DocumentFragmentImpl.internal_() : super.internal_();
-  get runtimeType => DocumentFragment;
-  toString() => super.toString();
-}
-patch class DomImplementation {
-  static Type get instanceRuntimeType => DomImplementationImpl;
-
-}
-class DomImplementationImpl extends DomImplementation implements js_library.JSObjectInterfacesDom {
-  DomImplementationImpl.internal_() : super.internal_();
-  get runtimeType => DomImplementation;
-  toString() => super.toString();
-}
-patch class PeriodicSyncEvent {
-  static Type get instanceRuntimeType => PeriodicSyncEventImpl;
-
-}
-class PeriodicSyncEventImpl extends PeriodicSyncEvent implements js_library.JSObjectInterfacesDom {
-  PeriodicSyncEventImpl.internal_() : super.internal_();
-  get runtimeType => PeriodicSyncEvent;
-  toString() => super.toString();
-}
-patch class DialogElement {
-  static Type get instanceRuntimeType => DialogElementImpl;
-
-}
-class DialogElementImpl extends DialogElement implements js_library.JSObjectInterfacesDom {
-  DialogElementImpl.internal_() : super.internal_();
-  get runtimeType => DialogElement;
-  toString() => super.toString();
-}
-patch class PeriodicSyncRegistration {
-  static Type get instanceRuntimeType => PeriodicSyncRegistrationImpl;
-
-}
-class PeriodicSyncRegistrationImpl extends PeriodicSyncRegistration implements js_library.JSObjectInterfacesDom {
-  PeriodicSyncRegistrationImpl.internal_() : super.internal_();
-  get runtimeType => PeriodicSyncRegistration;
-  toString() => super.toString();
-}
-patch class MessagePort {
-  static Type get instanceRuntimeType => MessagePortImpl;
-
-}
-class MessagePortImpl extends MessagePort implements js_library.JSObjectInterfacesDom {
-  MessagePortImpl.internal_() : super.internal_();
-  get runtimeType => MessagePort;
-  toString() => super.toString();
-}
-patch class FileReader {
-  static Type get instanceRuntimeType => FileReaderImpl;
-
-}
-class FileReaderImpl extends FileReader implements js_library.JSObjectInterfacesDom {
-  FileReaderImpl.internal_() : super.internal_();
-  get runtimeType => FileReader;
-  toString() => super.toString();
-}
-patch class HtmlOptionsCollection {
-  static Type get instanceRuntimeType => HtmlOptionsCollectionImpl;
-
-}
-class HtmlOptionsCollectionImpl extends HtmlOptionsCollection implements js_library.JSObjectInterfacesDom {
-  HtmlOptionsCollectionImpl.internal_() : super.internal_();
-  get runtimeType => HtmlOptionsCollection;
-  toString() => super.toString();
-}
-patch class _HTMLFrameSetElement {
-  static Type get instanceRuntimeType => _HTMLFrameSetElementImpl;
-
-}
-class _HTMLFrameSetElementImpl extends _HTMLFrameSetElement implements js_library.JSObjectInterfacesDom {
-  _HTMLFrameSetElementImpl.internal_() : super.internal_();
-  get runtimeType => _HTMLFrameSetElement;
-  toString() => super.toString();
-}
-patch class PerformanceMeasure {
-  static Type get instanceRuntimeType => PerformanceMeasureImpl;
-
-}
-class PerformanceMeasureImpl extends PerformanceMeasure implements js_library.JSObjectInterfacesDom {
-  PerformanceMeasureImpl.internal_() : super.internal_();
-  get runtimeType => PerformanceMeasure;
-  toString() => super.toString();
-}
-patch class ServiceWorkerContainer {
-  static Type get instanceRuntimeType => ServiceWorkerContainerImpl;
-
-}
-class ServiceWorkerContainerImpl extends ServiceWorkerContainer implements js_library.JSObjectInterfacesDom {
-  ServiceWorkerContainerImpl.internal_() : super.internal_();
-  get runtimeType => ServiceWorkerContainer;
-  toString() => super.toString();
-}
-patch class TrackDefaultList {
-  static Type get instanceRuntimeType => TrackDefaultListImpl;
-
-}
-class TrackDefaultListImpl extends TrackDefaultList implements js_library.JSObjectInterfacesDom {
-  TrackDefaultListImpl.internal_() : super.internal_();
-  get runtimeType => TrackDefaultList;
-  toString() => super.toString();
-}
-patch class RelatedEvent {
-  static Type get instanceRuntimeType => RelatedEventImpl;
-
-}
-class RelatedEventImpl extends RelatedEvent implements js_library.JSObjectInterfacesDom {
-  RelatedEventImpl.internal_() : super.internal_();
-  get runtimeType => RelatedEvent;
-  toString() => super.toString();
-}
-patch class TableCaptionElement {
-  static Type get instanceRuntimeType => TableCaptionElementImpl;
-
-}
-class TableCaptionElementImpl extends TableCaptionElement implements js_library.JSObjectInterfacesDom {
-  TableCaptionElementImpl.internal_() : super.internal_();
-  get runtimeType => TableCaptionElement;
-  toString() => super.toString();
-}
-patch class ScrollState {
-  static Type get instanceRuntimeType => ScrollStateImpl;
-
-}
-class ScrollStateImpl extends ScrollState implements js_library.JSObjectInterfacesDom {
-  ScrollStateImpl.internal_() : super.internal_();
-  get runtimeType => ScrollState;
-  toString() => super.toString();
-}
-patch class MenuItemElement {
-  static Type get instanceRuntimeType => MenuItemElementImpl;
-
-}
-class MenuItemElementImpl extends MenuItemElement implements js_library.JSObjectInterfacesDom {
-  MenuItemElementImpl.internal_() : super.internal_();
-  get runtimeType => MenuItemElement;
-  toString() => super.toString();
-}
-patch class MediaKeyStatusMap {
-  static Type get instanceRuntimeType => MediaKeyStatusMapImpl;
-
-}
-class MediaKeyStatusMapImpl extends MediaKeyStatusMap implements js_library.JSObjectInterfacesDom {
-  MediaKeyStatusMapImpl.internal_() : super.internal_();
-  get runtimeType => MediaKeyStatusMap;
-  toString() => super.toString();
-}
-patch class RtcDataChannelEvent {
-  static Type get instanceRuntimeType => RtcDataChannelEventImpl;
-
-}
-class RtcDataChannelEventImpl extends RtcDataChannelEvent implements js_library.JSObjectInterfacesDom {
-  RtcDataChannelEventImpl.internal_() : super.internal_();
-  get runtimeType => RtcDataChannelEvent;
-  toString() => super.toString();
-}
-patch class MediaElement {
-  static Type get instanceRuntimeType => MediaElementImpl;
-
-}
-class MediaElementImpl extends MediaElement implements js_library.JSObjectInterfacesDom {
-  MediaElementImpl.internal_() : super.internal_();
-  get runtimeType => MediaElement;
-  toString() => super.toString();
-}
-patch class MediaDeviceInfo {
-  static Type get instanceRuntimeType => MediaDeviceInfoImpl;
-
-}
-class MediaDeviceInfoImpl extends MediaDeviceInfo implements js_library.JSObjectInterfacesDom {
-  MediaDeviceInfoImpl.internal_() : super.internal_();
-  get runtimeType => MediaDeviceInfo;
-  toString() => super.toString();
-}
-patch class StorageEvent {
-  static Type get instanceRuntimeType => StorageEventImpl;
-
-}
-class StorageEventImpl extends StorageEvent implements js_library.JSObjectInterfacesDom {
-  StorageEventImpl.internal_() : super.internal_();
-  get runtimeType => StorageEvent;
-  toString() => super.toString();
-}
-patch class FormData {
-  static Type get instanceRuntimeType => FormDataImpl;
-
-}
-class FormDataImpl extends FormData implements js_library.JSObjectInterfacesDom {
-  FormDataImpl.internal_() : super.internal_();
-  get runtimeType => FormData;
-  toString() => super.toString();
-}
-patch class PushEvent {
-  static Type get instanceRuntimeType => PushEventImpl;
-
-}
-class PushEventImpl extends PushEvent implements js_library.JSObjectInterfacesDom {
-  PushEventImpl.internal_() : super.internal_();
-  get runtimeType => PushEvent;
-  toString() => super.toString();
-}
-patch class CssPageRule {
-  static Type get instanceRuntimeType => CssPageRuleImpl;
-
-}
-class CssPageRuleImpl extends CssPageRule implements js_library.JSObjectInterfacesDom {
-  CssPageRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssPageRule;
-  toString() => super.toString();
-}
-patch class PageTransitionEvent {
-  static Type get instanceRuntimeType => PageTransitionEventImpl;
-
-}
-class PageTransitionEventImpl extends PageTransitionEvent implements js_library.JSObjectInterfacesDom {
-  PageTransitionEventImpl.internal_() : super.internal_();
-  get runtimeType => PageTransitionEvent;
-  toString() => super.toString();
-}
-patch class MemoryInfo {
-  static Type get instanceRuntimeType => MemoryInfoImpl;
-
-}
-class MemoryInfoImpl extends MemoryInfo implements js_library.JSObjectInterfacesDom {
-  MemoryInfoImpl.internal_() : super.internal_();
-  get runtimeType => MemoryInfo;
-  toString() => super.toString();
-}
-patch class ChromiumValuebuffer {
-  static Type get instanceRuntimeType => ChromiumValuebufferImpl;
-
-}
-class ChromiumValuebufferImpl extends ChromiumValuebuffer implements js_library.JSObjectInterfacesDom {
-  ChromiumValuebufferImpl.internal_() : super.internal_();
-  get runtimeType => ChromiumValuebuffer;
-  toString() => super.toString();
-}
-patch class KeyframeEffect {
-  static Type get instanceRuntimeType => KeyframeEffectImpl;
-
-}
-class KeyframeEffectImpl extends KeyframeEffect implements js_library.JSObjectInterfacesDom {
-  KeyframeEffectImpl.internal_() : super.internal_();
-  get runtimeType => KeyframeEffect;
-  toString() => super.toString();
-}
-patch class XPathEvaluator {
-  static Type get instanceRuntimeType => XPathEvaluatorImpl;
-
-}
-class XPathEvaluatorImpl extends XPathEvaluator implements js_library.JSObjectInterfacesDom {
-  XPathEvaluatorImpl.internal_() : super.internal_();
-  get runtimeType => XPathEvaluator;
-  toString() => super.toString();
-}
-patch class ContentElement {
-  static Type get instanceRuntimeType => ContentElementImpl;
-
-}
-class ContentElementImpl extends ContentElement implements js_library.JSObjectInterfacesDom {
-  ContentElementImpl.internal_() : super.internal_();
-  get runtimeType => ContentElement;
-  toString() => super.toString();
-}
-patch class CompositionEvent {
-  static Type get instanceRuntimeType => CompositionEventImpl;
-
-}
-class CompositionEventImpl extends CompositionEvent implements js_library.JSObjectInterfacesDom {
-  CompositionEventImpl.internal_() : super.internal_();
-  get runtimeType => CompositionEvent;
-  toString() => super.toString();
-}
-patch class FileWriter {
-  static Type get instanceRuntimeType => FileWriterImpl;
-
-}
-class FileWriterImpl extends FileWriter implements js_library.JSObjectInterfacesDom {
-  FileWriterImpl.internal_() : super.internal_();
-  get runtimeType => FileWriter;
-  toString() => super.toString();
-}
-patch class SpanElement {
-  static Type get instanceRuntimeType => SpanElementImpl;
-
-}
-class SpanElementImpl extends SpanElement implements js_library.JSObjectInterfacesDom {
-  SpanElementImpl.internal_() : super.internal_();
-  get runtimeType => SpanElement;
-  toString() => super.toString();
-}
-patch class _WebKitCSSMatrix {
-  static Type get instanceRuntimeType => _WebKitCSSMatrixImpl;
-
-}
-class _WebKitCSSMatrixImpl extends _WebKitCSSMatrix implements js_library.JSObjectInterfacesDom {
-  _WebKitCSSMatrixImpl.internal_() : super.internal_();
-  get runtimeType => _WebKitCSSMatrix;
-  toString() => super.toString();
-}
-patch class WorkerPerformance {
-  static Type get instanceRuntimeType => WorkerPerformanceImpl;
-
-}
-class WorkerPerformanceImpl extends WorkerPerformance implements js_library.JSObjectInterfacesDom {
-  WorkerPerformanceImpl.internal_() : super.internal_();
-  get runtimeType => WorkerPerformance;
-  toString() => super.toString();
-}
-patch class TransitionEvent {
-  static Type get instanceRuntimeType => TransitionEventImpl;
-
-}
-class TransitionEventImpl extends TransitionEvent implements js_library.JSObjectInterfacesDom {
-  TransitionEventImpl.internal_() : super.internal_();
-  get runtimeType => TransitionEvent;
-  toString() => super.toString();
-}
-patch class GamepadEvent {
-  static Type get instanceRuntimeType => GamepadEventImpl;
-
-}
-class GamepadEventImpl extends GamepadEvent implements js_library.JSObjectInterfacesDom {
-  GamepadEventImpl.internal_() : super.internal_();
-  get runtimeType => GamepadEvent;
-  toString() => super.toString();
-}
-patch class _HTMLFontElement {
-  static Type get instanceRuntimeType => _HTMLFontElementImpl;
-
-}
-class _HTMLFontElementImpl extends _HTMLFontElement implements js_library.JSObjectInterfacesDom {
-  _HTMLFontElementImpl.internal_() : super.internal_();
-  get runtimeType => _HTMLFontElement;
-  toString() => super.toString();
-}
-patch class _Response {
-  static Type get instanceRuntimeType => _ResponseImpl;
-
-}
-class _ResponseImpl extends _Response implements js_library.JSObjectInterfacesDom {
-  _ResponseImpl.internal_() : super.internal_();
-  get runtimeType => _Response;
-  toString() => super.toString();
-}
-patch class _PagePopupController {
-  static Type get instanceRuntimeType => _PagePopupControllerImpl;
-
-}
-class _PagePopupControllerImpl extends _PagePopupController implements js_library.JSObjectInterfacesDom {
-  _PagePopupControllerImpl.internal_() : super.internal_();
-  get runtimeType => _PagePopupController;
-  toString() => super.toString();
-}
-patch class AnimationPlayerEvent {
-  static Type get instanceRuntimeType => AnimationPlayerEventImpl;
-
-}
-class AnimationPlayerEventImpl extends AnimationPlayerEvent implements js_library.JSObjectInterfacesDom {
-  AnimationPlayerEventImpl.internal_() : super.internal_();
-  get runtimeType => AnimationPlayerEvent;
-  toString() => super.toString();
-}
-patch class DomTokenList {
-  static Type get instanceRuntimeType => DomTokenListImpl;
-
-}
-class DomTokenListImpl extends DomTokenList implements js_library.JSObjectInterfacesDom {
-  DomTokenListImpl.internal_() : super.internal_();
-  get runtimeType => DomTokenList;
-  toString() => super.toString();
-}
-patch class _GamepadList {
-  static Type get instanceRuntimeType => _GamepadListImpl;
-
-}
-class _GamepadListImpl extends _GamepadList implements js_library.JSObjectInterfacesDom {
-  _GamepadListImpl.internal_() : super.internal_();
-  get runtimeType => _GamepadList;
-  toString() => super.toString();
-}
-patch class PluginArray {
-  static Type get instanceRuntimeType => PluginArrayImpl;
-
-}
-class PluginArrayImpl extends PluginArray implements js_library.JSObjectInterfacesDom {
-  PluginArrayImpl.internal_() : super.internal_();
-  get runtimeType => PluginArray;
-  toString() => super.toString();
-}
-patch class DomPoint {
-  static Type get instanceRuntimeType => DomPointImpl;
-
-}
-class DomPointImpl extends DomPoint implements js_library.JSObjectInterfacesDom {
-  DomPointImpl.internal_() : super.internal_();
-  get runtimeType => DomPoint;
-  toString() => super.toString();
-}
-patch class FileSystem {
-  static Type get instanceRuntimeType => FileSystemImpl;
-
-}
-class FileSystemImpl extends FileSystem implements js_library.JSObjectInterfacesDom {
-  FileSystemImpl.internal_() : super.internal_();
-  get runtimeType => FileSystem;
-  toString() => super.toString();
-}
-patch class NavigatorCpu {
-  static Type get instanceRuntimeType => NavigatorCpuImpl;
-
-}
-class NavigatorCpuImpl extends NavigatorCpu implements js_library.JSObjectInterfacesDom {
-  NavigatorCpuImpl.internal_() : super.internal_();
-  get runtimeType => NavigatorCpu;
-  toString() => super.toString();
-}
-patch class VideoTrack {
-  static Type get instanceRuntimeType => VideoTrackImpl;
-
-}
-class VideoTrackImpl extends VideoTrack implements js_library.JSObjectInterfacesDom {
-  VideoTrackImpl.internal_() : super.internal_();
-  get runtimeType => VideoTrack;
-  toString() => super.toString();
-}
-patch class QuoteElement {
-  static Type get instanceRuntimeType => QuoteElementImpl;
-
-}
-class QuoteElementImpl extends QuoteElement implements js_library.JSObjectInterfacesDom {
-  QuoteElementImpl.internal_() : super.internal_();
-  get runtimeType => QuoteElement;
-  toString() => super.toString();
-}
-patch class LabelElement {
-  static Type get instanceRuntimeType => LabelElementImpl;
-
-}
-class LabelElementImpl extends LabelElement implements js_library.JSObjectInterfacesDom {
-  LabelElementImpl.internal_() : super.internal_();
-  get runtimeType => LabelElement;
-  toString() => super.toString();
-}
-patch class TextAreaElement {
-  static Type get instanceRuntimeType => TextAreaElementImpl;
-
-}
-class TextAreaElementImpl extends TextAreaElement implements js_library.JSObjectInterfacesDom {
-  TextAreaElementImpl.internal_() : super.internal_();
-  get runtimeType => TextAreaElement;
-  toString() => super.toString();
-}
-patch class TextMetrics {
-  static Type get instanceRuntimeType => TextMetricsImpl;
-
-}
-class TextMetricsImpl extends TextMetrics implements js_library.JSObjectInterfacesDom {
-  TextMetricsImpl.internal_() : super.internal_();
-  get runtimeType => TextMetrics;
-  toString() => super.toString();
-}
-patch class Selection {
-  static Type get instanceRuntimeType => SelectionImpl;
-
-}
-class SelectionImpl extends Selection implements js_library.JSObjectInterfacesDom {
-  SelectionImpl.internal_() : super.internal_();
-  get runtimeType => Selection;
-  toString() => super.toString();
-}
-patch class NodeIterator {
-  static Type get instanceRuntimeType => NodeIteratorImpl;
-
-}
-class NodeIteratorImpl extends NodeIterator implements js_library.JSObjectInterfacesDom {
-  NodeIteratorImpl.internal_() : super.internal_();
-  get runtimeType => NodeIterator;
-  toString() => super.toString();
-}
-patch class _HTMLDirectoryElement {
-  static Type get instanceRuntimeType => _HTMLDirectoryElementImpl;
-
-}
-class _HTMLDirectoryElementImpl extends _HTMLDirectoryElement implements js_library.JSObjectInterfacesDom {
-  _HTMLDirectoryElementImpl.internal_() : super.internal_();
-  get runtimeType => _HTMLDirectoryElement;
-  toString() => super.toString();
-}
-patch class AreaElement {
-  static Type get instanceRuntimeType => AreaElementImpl;
-
-}
-class AreaElementImpl extends AreaElement implements js_library.JSObjectInterfacesDom {
-  AreaElementImpl.internal_() : super.internal_();
-  get runtimeType => AreaElement;
-  toString() => super.toString();
-}
-patch class Notification {
-  static Type get instanceRuntimeType => NotificationImpl;
-
-}
-class NotificationImpl extends Notification implements js_library.JSObjectInterfacesDom {
-  NotificationImpl.internal_() : super.internal_();
-  get runtimeType => Notification;
-  toString() => super.toString();
-}
-patch class TableCellElement {
-  static Type get instanceRuntimeType => TableCellElementImpl;
-
-}
-class TableCellElementImpl extends TableCellElement implements js_library.JSObjectInterfacesDom {
-  TableCellElementImpl.internal_() : super.internal_();
-  get runtimeType => TableCellElement;
-  toString() => super.toString();
-}
-patch class DomStringMap {
-  static Type get instanceRuntimeType => DomStringMapImpl;
-
-}
-class DomStringMapImpl extends DomStringMap implements js_library.JSObjectInterfacesDom {
-  DomStringMapImpl.internal_() : super.internal_();
-  get runtimeType => DomStringMap;
-  toString() => super.toString();
-}
-patch class Entry {
-  static Type get instanceRuntimeType => EntryImpl;
-
-}
-class EntryImpl extends Entry implements js_library.JSObjectInterfacesDom {
-  EntryImpl.internal_() : super.internal_();
-  get runtimeType => Entry;
-  toString() => super.toString();
-}
-patch class PeriodicSyncManager {
-  static Type get instanceRuntimeType => PeriodicSyncManagerImpl;
-
-}
-class PeriodicSyncManagerImpl extends PeriodicSyncManager implements js_library.JSObjectInterfacesDom {
-  PeriodicSyncManagerImpl.internal_() : super.internal_();
-  get runtimeType => PeriodicSyncManager;
-  toString() => super.toString();
-}
-patch class RtcIceCandidate {
-  static Type get instanceRuntimeType => RtcIceCandidateImpl;
-
-}
-class RtcIceCandidateImpl extends RtcIceCandidate implements js_library.JSObjectInterfacesDom {
-  RtcIceCandidateImpl.internal_() : super.internal_();
-  get runtimeType => RtcIceCandidate;
-  toString() => super.toString();
-}
-patch class SpeechRecognitionResult {
-  static Type get instanceRuntimeType => SpeechRecognitionResultImpl;
-
-}
-class SpeechRecognitionResultImpl extends SpeechRecognitionResult implements js_library.JSObjectInterfacesDom {
-  SpeechRecognitionResultImpl.internal_() : super.internal_();
-  get runtimeType => SpeechRecognitionResult;
-  toString() => super.toString();
-}
-patch class TextTrackList {
-  static Type get instanceRuntimeType => TextTrackListImpl;
-
-}
-class TextTrackListImpl extends TextTrackList implements js_library.JSObjectInterfacesDom {
-  TextTrackListImpl.internal_() : super.internal_();
-  get runtimeType => TextTrackList;
-  toString() => super.toString();
-}
-patch class _ServiceWorker {
-  static Type get instanceRuntimeType => _ServiceWorkerImpl;
-
-}
-class _ServiceWorkerImpl extends _ServiceWorker implements js_library.JSObjectInterfacesDom {
-  _ServiceWorkerImpl.internal_() : super.internal_();
-  get runtimeType => _ServiceWorker;
-  toString() => super.toString();
-}
-patch class SharedWorker {
-  static Type get instanceRuntimeType => SharedWorkerImpl;
-
-}
-class SharedWorkerImpl extends SharedWorker implements js_library.JSObjectInterfacesDom {
-  SharedWorkerImpl.internal_() : super.internal_();
-  get runtimeType => SharedWorker;
-  toString() => super.toString();
-}
-patch class EventTarget {
-  static Type get instanceRuntimeType => EventTargetImpl;
-
-}
-class EventTargetImpl extends EventTarget implements js_library.JSObjectInterfacesDom {
-  EventTargetImpl.internal_() : super.internal_();
-  get runtimeType => EventTarget;
-  toString() => super.toString();
-}
-patch class HtmlFormControlsCollection {
-  static Type get instanceRuntimeType => HtmlFormControlsCollectionImpl;
-
-}
-class HtmlFormControlsCollectionImpl extends HtmlFormControlsCollection implements js_library.JSObjectInterfacesDom {
-  HtmlFormControlsCollectionImpl.internal_() : super.internal_();
-  get runtimeType => HtmlFormControlsCollection;
-  toString() => super.toString();
-}
-patch class KeyboardEvent {
-  static Type get instanceRuntimeType => KeyboardEventImpl;
-
-}
-class KeyboardEventImpl extends KeyboardEvent implements js_library.JSObjectInterfacesDom {
-  KeyboardEventImpl.internal_() : super.internal_();
-  get runtimeType => KeyboardEvent;
-  toString() => super.toString();
-}
-patch class MidiMessageEvent {
-  static Type get instanceRuntimeType => MidiMessageEventImpl;
-
-}
-class MidiMessageEventImpl extends MidiMessageEvent implements js_library.JSObjectInterfacesDom {
-  MidiMessageEventImpl.internal_() : super.internal_();
-  get runtimeType => MidiMessageEvent;
-  toString() => super.toString();
-}
-patch class CacheStorage {
-  static Type get instanceRuntimeType => CacheStorageImpl;
-
-}
-class CacheStorageImpl extends CacheStorage implements js_library.JSObjectInterfacesDom {
-  CacheStorageImpl.internal_() : super.internal_();
-  get runtimeType => CacheStorage;
-  toString() => super.toString();
-}
-patch class CanvasElement {
-  static Type get instanceRuntimeType => CanvasElementImpl;
-
-}
-class CanvasElementImpl extends CanvasElement implements js_library.JSObjectInterfacesDom {
-  CanvasElementImpl.internal_() : super.internal_();
-  get runtimeType => CanvasElement;
-  toString() => super.toString();
-}
-patch class BatteryManager {
-  static Type get instanceRuntimeType => BatteryManagerImpl;
-
-}
-class BatteryManagerImpl extends BatteryManager implements js_library.JSObjectInterfacesDom {
-  BatteryManagerImpl.internal_() : super.internal_();
-  get runtimeType => BatteryManager;
-  toString() => super.toString();
-}
-patch class _StyleSheetList {
-  static Type get instanceRuntimeType => _StyleSheetListImpl;
-
-}
-class _StyleSheetListImpl extends _StyleSheetList implements js_library.JSObjectInterfacesDom {
-  _StyleSheetListImpl.internal_() : super.internal_();
-  get runtimeType => _StyleSheetList;
-  toString() => super.toString();
-}
-patch class Path2D {
-  static Type get instanceRuntimeType => Path2DImpl;
-
-}
-class Path2DImpl extends Path2D implements js_library.JSObjectInterfacesDom {
-  Path2DImpl.internal_() : super.internal_();
-  get runtimeType => Path2D;
-  toString() => super.toString();
-}
-patch class DeviceRotationRate {
-  static Type get instanceRuntimeType => DeviceRotationRateImpl;
-
-}
-class DeviceRotationRateImpl extends DeviceRotationRate implements js_library.JSObjectInterfacesDom {
-  DeviceRotationRateImpl.internal_() : super.internal_();
-  get runtimeType => DeviceRotationRate;
-  toString() => super.toString();
-}
-patch class Screen {
-  static Type get instanceRuntimeType => ScreenImpl;
-
-}
-class ScreenImpl extends Screen implements js_library.JSObjectInterfacesDom {
-  ScreenImpl.internal_() : super.internal_();
-  get runtimeType => Screen;
-  toString() => super.toString();
-}
-patch class StorageInfo {
-  static Type get instanceRuntimeType => StorageInfoImpl;
-
-}
-class StorageInfoImpl extends StorageInfo implements js_library.JSObjectInterfacesDom {
-  StorageInfoImpl.internal_() : super.internal_();
-  get runtimeType => StorageInfo;
-  toString() => super.toString();
-}
-patch class TableColElement {
-  static Type get instanceRuntimeType => TableColElementImpl;
-
-}
-class TableColElementImpl extends TableColElement implements js_library.JSObjectInterfacesDom {
-  TableColElementImpl.internal_() : super.internal_();
-  get runtimeType => TableColElement;
-  toString() => super.toString();
-}
-patch class CssStyleDeclaration {
-  static Type get instanceRuntimeType => CssStyleDeclarationImpl;
-
-}
-class CssStyleDeclarationImpl extends CssStyleDeclaration implements js_library.JSObjectInterfacesDom {
-  CssStyleDeclarationImpl.internal_() : super.internal_();
-  get runtimeType => CssStyleDeclaration;
-  toString() => super.toString();
-}
-patch class DomStringList {
-  static Type get instanceRuntimeType => DomStringListImpl;
-
-}
-class DomStringListImpl extends DomStringList implements js_library.JSObjectInterfacesDom {
-  DomStringListImpl.internal_() : super.internal_();
-  get runtimeType => DomStringList;
-  toString() => super.toString();
-}
-patch class StashedPortCollection {
-  static Type get instanceRuntimeType => StashedPortCollectionImpl;
-
-}
-class StashedPortCollectionImpl extends StashedPortCollection implements js_library.JSObjectInterfacesDom {
-  StashedPortCollectionImpl.internal_() : super.internal_();
-  get runtimeType => StashedPortCollection;
-  toString() => super.toString();
-}
-patch class SyncManager {
-  static Type get instanceRuntimeType => SyncManagerImpl;
-
-}
-class SyncManagerImpl extends SyncManager implements js_library.JSObjectInterfacesDom {
-  SyncManagerImpl.internal_() : super.internal_();
-  get runtimeType => SyncManager;
-  toString() => super.toString();
-}
-patch class HttpRequestUpload {
-  static Type get instanceRuntimeType => HttpRequestUploadImpl;
-
-}
-class HttpRequestUploadImpl extends HttpRequestUpload implements js_library.JSObjectInterfacesDom {
-  HttpRequestUploadImpl.internal_() : super.internal_();
-  get runtimeType => HttpRequestUpload;
-  toString() => super.toString();
-}
-patch class ReadableStreamReader {
-  static Type get instanceRuntimeType => ReadableStreamReaderImpl;
-
-}
-class ReadableStreamReaderImpl extends ReadableStreamReader implements js_library.JSObjectInterfacesDom {
-  ReadableStreamReaderImpl.internal_() : super.internal_();
-  get runtimeType => ReadableStreamReader;
-  toString() => super.toString();
-}
-patch class MediaKeySession {
-  static Type get instanceRuntimeType => MediaKeySessionImpl;
-
-}
-class MediaKeySessionImpl extends MediaKeySession implements js_library.JSObjectInterfacesDom {
-  MediaKeySessionImpl.internal_() : super.internal_();
-  get runtimeType => MediaKeySession;
-  toString() => super.toString();
-}
-patch class Gamepad {
-  static Type get instanceRuntimeType => GamepadImpl;
-
-}
-class GamepadImpl extends Gamepad implements js_library.JSObjectInterfacesDom {
-  GamepadImpl.internal_() : super.internal_();
-  get runtimeType => Gamepad;
-  toString() => super.toString();
-}
-patch class Worker {
-  static Type get instanceRuntimeType => WorkerImpl;
-
-}
-class WorkerImpl extends Worker implements js_library.JSObjectInterfacesDom {
-  WorkerImpl.internal_() : super.internal_();
-  get runtimeType => Worker;
-  toString() => super.toString();
-}
-patch class DefaultSessionStartEvent {
-  static Type get instanceRuntimeType => DefaultSessionStartEventImpl;
-
-}
-class DefaultSessionStartEventImpl extends DefaultSessionStartEvent implements js_library.JSObjectInterfacesDom {
-  DefaultSessionStartEventImpl.internal_() : super.internal_();
-  get runtimeType => DefaultSessionStartEvent;
-  toString() => super.toString();
-}
-patch class DListElement {
-  static Type get instanceRuntimeType => DListElementImpl;
-
-}
-class DListElementImpl extends DListElement implements js_library.JSObjectInterfacesDom {
-  DListElementImpl.internal_() : super.internal_();
-  get runtimeType => DListElement;
-  toString() => super.toString();
-}
-patch class FileError {
-  static Type get instanceRuntimeType => FileErrorImpl;
-
-}
-class FileErrorImpl extends FileError implements js_library.JSObjectInterfacesDom {
-  FileErrorImpl.internal_() : super.internal_();
-  get runtimeType => FileError;
-  toString() => super.toString();
-}
-patch class HeadElement {
-  static Type get instanceRuntimeType => HeadElementImpl;
-
-}
-class HeadElementImpl extends HeadElement implements js_library.JSObjectInterfacesDom {
-  HeadElementImpl.internal_() : super.internal_();
-  get runtimeType => HeadElement;
-  toString() => super.toString();
-}
-patch class BluetoothGattCharacteristic {
-  static Type get instanceRuntimeType => BluetoothGattCharacteristicImpl;
-
-}
-class BluetoothGattCharacteristicImpl extends BluetoothGattCharacteristic implements js_library.JSObjectInterfacesDom {
-  BluetoothGattCharacteristicImpl.internal_() : super.internal_();
-  get runtimeType => BluetoothGattCharacteristic;
-  toString() => super.toString();
-}
-patch class DomSettableTokenList {
-  static Type get instanceRuntimeType => DomSettableTokenListImpl;
-
-}
-class DomSettableTokenListImpl extends DomSettableTokenList implements js_library.JSObjectInterfacesDom {
-  DomSettableTokenListImpl.internal_() : super.internal_();
-  get runtimeType => DomSettableTokenList;
-  toString() => super.toString();
-}
-patch class _WorkerLocation {
-  static Type get instanceRuntimeType => _WorkerLocationImpl;
-
-}
-class _WorkerLocationImpl extends _WorkerLocation implements js_library.JSObjectInterfacesDom {
-  _WorkerLocationImpl.internal_() : super.internal_();
-  get runtimeType => _WorkerLocation;
-  toString() => super.toString();
-}
-patch class TouchList {
-  static Type get instanceRuntimeType => TouchListImpl;
-
-}
-class TouchListImpl extends TouchList implements js_library.JSObjectInterfacesDom {
-  TouchListImpl.internal_() : super.internal_();
-  get runtimeType => TouchList;
-  toString() => super.toString();
-}
-patch class MetaElement {
-  static Type get instanceRuntimeType => MetaElementImpl;
-
-}
-class MetaElementImpl extends MetaElement implements js_library.JSObjectInterfacesDom {
-  MetaElementImpl.internal_() : super.internal_();
-  get runtimeType => MetaElement;
-  toString() => super.toString();
-}
-patch class TrackElement {
-  static Type get instanceRuntimeType => TrackElementImpl;
-
-}
-class TrackElementImpl extends TrackElement implements js_library.JSObjectInterfacesDom {
-  TrackElementImpl.internal_() : super.internal_();
-  get runtimeType => TrackElement;
-  toString() => super.toString();
-}
-patch class WheelEvent {
-  static Type get instanceRuntimeType => WheelEventImpl;
-
-}
-class WheelEventImpl extends WheelEvent implements js_library.JSObjectInterfacesDom {
-  WheelEventImpl.internal_() : super.internal_();
-  get runtimeType => WheelEvent;
-  toString() => super.toString();
-}
-patch class DomMatrixReadOnly {
-  static Type get instanceRuntimeType => DomMatrixReadOnlyImpl;
-
-}
-class DomMatrixReadOnlyImpl extends DomMatrixReadOnly implements js_library.JSObjectInterfacesDom {
-  DomMatrixReadOnlyImpl.internal_() : super.internal_();
-  get runtimeType => DomMatrixReadOnly;
-  toString() => super.toString();
-}
-patch class FormElement {
-  static Type get instanceRuntimeType => FormElementImpl;
-
-}
-class FormElementImpl extends FormElement implements js_library.JSObjectInterfacesDom {
-  FormElementImpl.internal_() : super.internal_();
-  get runtimeType => FormElement;
-  toString() => super.toString();
-}
-patch class _SpeechRecognitionResultList {
-  static Type get instanceRuntimeType => _SpeechRecognitionResultListImpl;
-
-}
-class _SpeechRecognitionResultListImpl extends _SpeechRecognitionResultList implements js_library.JSObjectInterfacesDom {
-  _SpeechRecognitionResultListImpl.internal_() : super.internal_();
-  get runtimeType => _SpeechRecognitionResultList;
-  toString() => super.toString();
-}
-patch class CompositorWorkerGlobalScope {
-  static Type get instanceRuntimeType => CompositorWorkerGlobalScopeImpl;
-
-}
-class CompositorWorkerGlobalScopeImpl extends CompositorWorkerGlobalScope implements js_library.JSObjectInterfacesDom {
-  CompositorWorkerGlobalScopeImpl.internal_() : super.internal_();
-  get runtimeType => CompositorWorkerGlobalScope;
-  toString() => super.toString();
-}
-patch class PresentationAvailability {
-  static Type get instanceRuntimeType => PresentationAvailabilityImpl;
-
-}
-class PresentationAvailabilityImpl extends PresentationAvailability implements js_library.JSObjectInterfacesDom {
-  PresentationAvailabilityImpl.internal_() : super.internal_();
-  get runtimeType => PresentationAvailability;
-  toString() => super.toString();
-}
-patch class FontFaceSet {
-  static Type get instanceRuntimeType => FontFaceSetImpl;
-
-}
-class FontFaceSetImpl extends FontFaceSet implements js_library.JSObjectInterfacesDom {
-  FontFaceSetImpl.internal_() : super.internal_();
-  get runtimeType => FontFaceSet;
-  toString() => super.toString();
-}
-patch class _SubtleCrypto {
-  static Type get instanceRuntimeType => _SubtleCryptoImpl;
-
-}
-class _SubtleCryptoImpl extends _SubtleCrypto implements js_library.JSObjectInterfacesDom {
-  _SubtleCryptoImpl.internal_() : super.internal_();
-  get runtimeType => _SubtleCrypto;
-  toString() => super.toString();
-}
-patch class ButtonElement {
-  static Type get instanceRuntimeType => ButtonElementImpl;
-
-}
-class ButtonElementImpl extends ButtonElement implements js_library.JSObjectInterfacesDom {
-  ButtonElementImpl.internal_() : super.internal_();
-  get runtimeType => ButtonElement;
-  toString() => super.toString();
-}
-patch class ProcessingInstruction {
-  static Type get instanceRuntimeType => ProcessingInstructionImpl;
-
-}
-class ProcessingInstructionImpl extends ProcessingInstruction implements js_library.JSObjectInterfacesDom {
-  ProcessingInstructionImpl.internal_() : super.internal_();
-  get runtimeType => ProcessingInstruction;
-  toString() => super.toString();
-}
-patch class StashedMessagePort {
-  static Type get instanceRuntimeType => StashedMessagePortImpl;
-
-}
-class StashedMessagePortImpl extends StashedMessagePort implements js_library.JSObjectInterfacesDom {
-  StashedMessagePortImpl.internal_() : super.internal_();
-  get runtimeType => StashedMessagePort;
-  toString() => super.toString();
-}
-patch class DeviceAcceleration {
-  static Type get instanceRuntimeType => DeviceAccelerationImpl;
-
-}
-class DeviceAccelerationImpl extends DeviceAcceleration implements js_library.JSObjectInterfacesDom {
-  DeviceAccelerationImpl.internal_() : super.internal_();
-  get runtimeType => DeviceAcceleration;
-  toString() => super.toString();
-}
-patch class MapElement {
-  static Type get instanceRuntimeType => MapElementImpl;
-
-}
-class MapElementImpl extends MapElement implements js_library.JSObjectInterfacesDom {
-  MapElementImpl.internal_() : super.internal_();
-  get runtimeType => MapElement;
-  toString() => super.toString();
-}
-patch class PresentationSession {
-  static Type get instanceRuntimeType => PresentationSessionImpl;
-
-}
-class PresentationSessionImpl extends PresentationSession implements js_library.JSObjectInterfacesDom {
-  PresentationSessionImpl.internal_() : super.internal_();
-  get runtimeType => PresentationSession;
-  toString() => super.toString();
-}
-patch class RtcDtmfToneChangeEvent {
-  static Type get instanceRuntimeType => RtcDtmfToneChangeEventImpl;
-
-}
-class RtcDtmfToneChangeEventImpl extends RtcDtmfToneChangeEvent implements js_library.JSObjectInterfacesDom {
-  RtcDtmfToneChangeEventImpl.internal_() : super.internal_();
-  get runtimeType => RtcDtmfToneChangeEvent;
-  toString() => super.toString();
-}
-patch class PerformanceCompositeTiming {
-  static Type get instanceRuntimeType => PerformanceCompositeTimingImpl;
-
-}
-class PerformanceCompositeTimingImpl extends PerformanceCompositeTiming implements js_library.JSObjectInterfacesDom {
-  PerformanceCompositeTimingImpl.internal_() : super.internal_();
-  get runtimeType => PerformanceCompositeTiming;
-  toString() => super.toString();
-}
-patch class NodeFilter {
-  static Type get instanceRuntimeType => NodeFilterImpl;
-
-}
-class NodeFilterImpl extends NodeFilter implements js_library.JSObjectInterfacesDom {
-  NodeFilterImpl.internal_() : super.internal_();
-  get runtimeType => NodeFilter;
-  toString() => super.toString();
-}
-patch class _DomRect {
-  static Type get instanceRuntimeType => _DomRectImpl;
-
-}
-class _DomRectImpl extends _DomRect implements js_library.JSObjectInterfacesDom {
-  _DomRectImpl.internal_() : super.internal_();
-  get runtimeType => _DomRect;
-  toString() => super.toString();
-}
-patch class PermissionStatus {
-  static Type get instanceRuntimeType => PermissionStatusImpl;
-
-}
-class PermissionStatusImpl extends PermissionStatus implements js_library.JSObjectInterfacesDom {
-  PermissionStatusImpl.internal_() : super.internal_();
-  get runtimeType => PermissionStatus;
-  toString() => super.toString();
-}
-patch class DeviceMotionEvent {
-  static Type get instanceRuntimeType => DeviceMotionEventImpl;
-
-}
-class DeviceMotionEventImpl extends DeviceMotionEvent implements js_library.JSObjectInterfacesDom {
-  DeviceMotionEventImpl.internal_() : super.internal_();
-  get runtimeType => DeviceMotionEvent;
-  toString() => super.toString();
-}
-patch class Comment {
-  static Type get instanceRuntimeType => CommentImpl;
-
-}
-class CommentImpl extends Comment implements js_library.JSObjectInterfacesDom {
-  CommentImpl.internal_() : super.internal_();
-  get runtimeType => Comment;
-  toString() => super.toString();
-}
-patch class CanvasPattern {
-  static Type get instanceRuntimeType => CanvasPatternImpl;
-
-}
-class CanvasPatternImpl extends CanvasPattern implements js_library.JSObjectInterfacesDom {
-  CanvasPatternImpl.internal_() : super.internal_();
-  get runtimeType => CanvasPattern;
-  toString() => super.toString();
-}
-patch class CompositorProxy {
-  static Type get instanceRuntimeType => CompositorProxyImpl;
-
-}
-class CompositorProxyImpl extends CompositorProxy implements js_library.JSObjectInterfacesDom {
-  CompositorProxyImpl.internal_() : super.internal_();
-  get runtimeType => CompositorProxy;
-  toString() => super.toString();
-}
-patch class MediaKeyError {
-  static Type get instanceRuntimeType => MediaKeyErrorImpl;
-
-}
-class MediaKeyErrorImpl extends MediaKeyError implements js_library.JSObjectInterfacesDom {
-  MediaKeyErrorImpl.internal_() : super.internal_();
-  get runtimeType => MediaKeyError;
-  toString() => super.toString();
-}
-patch class CssRule {
-  static Type get instanceRuntimeType => CssRuleImpl;
-
-}
-class CssRuleImpl extends CssRule implements js_library.JSObjectInterfacesDom {
-  CssRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssRule;
-  toString() => super.toString();
-}
-patch class SpeechRecognitionAlternative {
-  static Type get instanceRuntimeType => SpeechRecognitionAlternativeImpl;
-
-}
-class SpeechRecognitionAlternativeImpl extends SpeechRecognitionAlternative implements js_library.JSObjectInterfacesDom {
-  SpeechRecognitionAlternativeImpl.internal_() : super.internal_();
-  get runtimeType => SpeechRecognitionAlternative;
-  toString() => super.toString();
-}
-patch class XPathExpression {
-  static Type get instanceRuntimeType => XPathExpressionImpl;
-
-}
-class XPathExpressionImpl extends XPathExpression implements js_library.JSObjectInterfacesDom {
-  XPathExpressionImpl.internal_() : super.internal_();
-  get runtimeType => XPathExpression;
-  toString() => super.toString();
-}
-patch class Permissions {
-  static Type get instanceRuntimeType => PermissionsImpl;
-
-}
-class PermissionsImpl extends Permissions implements js_library.JSObjectInterfacesDom {
-  PermissionsImpl.internal_() : super.internal_();
-  get runtimeType => Permissions;
-  toString() => super.toString();
-}
-patch class PerformanceNavigation {
-  static Type get instanceRuntimeType => PerformanceNavigationImpl;
-
-}
-class PerformanceNavigationImpl extends PerformanceNavigation implements js_library.JSObjectInterfacesDom {
-  PerformanceNavigationImpl.internal_() : super.internal_();
-  get runtimeType => PerformanceNavigation;
-  toString() => super.toString();
-}
-patch class SecurityPolicyViolationEvent {
-  static Type get instanceRuntimeType => SecurityPolicyViolationEventImpl;
-
-}
-class SecurityPolicyViolationEventImpl extends SecurityPolicyViolationEvent implements js_library.JSObjectInterfacesDom {
-  SecurityPolicyViolationEventImpl.internal_() : super.internal_();
-  get runtimeType => SecurityPolicyViolationEvent;
-  toString() => super.toString();
-}
-patch class TableElement {
-  static Type get instanceRuntimeType => TableElementImpl;
-
-}
-class TableElementImpl extends TableElement implements js_library.JSObjectInterfacesDom {
-  TableElementImpl.internal_() : super.internal_();
-  get runtimeType => TableElement;
-  toString() => super.toString();
-}
-patch class NavigatorID {
-  static Type get instanceRuntimeType => NavigatorIDImpl;
-
-}
-class NavigatorIDImpl extends NavigatorID implements js_library.JSObjectInterfacesDom {
-  NavigatorIDImpl.internal_() : super.internal_();
-  get runtimeType => NavigatorID;
-  toString() => super.toString();
-}
-patch class ServicePort {
-  static Type get instanceRuntimeType => ServicePortImpl;
-
-}
-class ServicePortImpl extends ServicePort implements js_library.JSObjectInterfacesDom {
-  ServicePortImpl.internal_() : super.internal_();
-  get runtimeType => ServicePort;
-  toString() => super.toString();
-}
-patch class TextTrackCue {
-  static Type get instanceRuntimeType => TextTrackCueImpl;
-
-}
-class TextTrackCueImpl extends TextTrackCue implements js_library.JSObjectInterfacesDom {
-  TextTrackCueImpl.internal_() : super.internal_();
-  get runtimeType => TextTrackCue;
-  toString() => super.toString();
-}
-patch class FileEntry {
-  static Type get instanceRuntimeType => FileEntryImpl;
-
-}
-class FileEntryImpl extends FileEntry implements js_library.JSObjectInterfacesDom {
-  FileEntryImpl.internal_() : super.internal_();
-  get runtimeType => FileEntry;
-  toString() => super.toString();
-}
-patch class _DOMFileSystemSync {
-  static Type get instanceRuntimeType => _DOMFileSystemSyncImpl;
-
-}
-class _DOMFileSystemSyncImpl extends _DOMFileSystemSync implements js_library.JSObjectInterfacesDom {
-  _DOMFileSystemSyncImpl.internal_() : super.internal_();
-  get runtimeType => _DOMFileSystemSync;
-  toString() => super.toString();
-}
-patch class Animation {
-  static Type get instanceRuntimeType => AnimationImpl;
-
-}
-class AnimationImpl extends Animation implements js_library.JSObjectInterfacesDom {
-  AnimationImpl.internal_() : super.internal_();
-  get runtimeType => Animation;
-  toString() => super.toString();
-}
-patch class Navigator {
-  static Type get instanceRuntimeType => NavigatorImpl;
-
-}
-class NavigatorImpl extends Navigator implements js_library.JSObjectInterfacesDom {
-  NavigatorImpl.internal_() : super.internal_();
-  get runtimeType => Navigator;
-  toString() => super.toString();
-}
-patch class MediaQueryList {
-  static Type get instanceRuntimeType => MediaQueryListImpl;
-
-}
-class MediaQueryListImpl extends MediaQueryList implements js_library.JSObjectInterfacesDom {
-  MediaQueryListImpl.internal_() : super.internal_();
-  get runtimeType => MediaQueryList;
-  toString() => super.toString();
-}
-patch class CssImportRule {
-  static Type get instanceRuntimeType => CssImportRuleImpl;
-
-}
-class CssImportRuleImpl extends CssImportRule implements js_library.JSObjectInterfacesDom {
-  CssImportRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssImportRule;
-  toString() => super.toString();
-}
-patch class StorageQuota {
-  static Type get instanceRuntimeType => StorageQuotaImpl;
-
-}
-class StorageQuotaImpl extends StorageQuota implements js_library.JSObjectInterfacesDom {
-  StorageQuotaImpl.internal_() : super.internal_();
-  get runtimeType => StorageQuota;
-  toString() => super.toString();
-}
-patch class MediaQueryListEvent {
-  static Type get instanceRuntimeType => MediaQueryListEventImpl;
-
-}
-class MediaQueryListEventImpl extends MediaQueryListEvent implements js_library.JSObjectInterfacesDom {
-  MediaQueryListEventImpl.internal_() : super.internal_();
-  get runtimeType => MediaQueryListEvent;
-  toString() => super.toString();
-}
-patch class BluetoothGattRemoteServer {
-  static Type get instanceRuntimeType => BluetoothGattRemoteServerImpl;
-
-}
-class BluetoothGattRemoteServerImpl extends BluetoothGattRemoteServer implements js_library.JSObjectInterfacesDom {
-  BluetoothGattRemoteServerImpl.internal_() : super.internal_();
-  get runtimeType => BluetoothGattRemoteServer;
-  toString() => super.toString();
-}
-patch class FileList {
-  static Type get instanceRuntimeType => FileListImpl;
-
-}
-class FileListImpl extends FileList implements js_library.JSObjectInterfacesDom {
-  FileListImpl.internal_() : super.internal_();
-  get runtimeType => FileList;
-  toString() => super.toString();
-}
-patch class WindowClient {
-  static Type get instanceRuntimeType => WindowClientImpl;
-
-}
-class WindowClientImpl extends WindowClient implements js_library.JSObjectInterfacesDom {
-  WindowClientImpl.internal_() : super.internal_();
-  get runtimeType => WindowClient;
-  toString() => super.toString();
-}
-patch class ReadableStream {
-  static Type get instanceRuntimeType => ReadableStreamImpl;
-
-}
-class ReadableStreamImpl extends ReadableStream implements js_library.JSObjectInterfacesDom {
-  ReadableStreamImpl.internal_() : super.internal_();
-  get runtimeType => ReadableStream;
-  toString() => super.toString();
-}
-patch class Node {
-  static Type get instanceRuntimeType => NodeImpl;
-
-}
-class NodeImpl extends Node implements js_library.JSObjectInterfacesDom {
-  NodeImpl.internal_() : super.internal_();
-  get runtimeType => Node;
-  toString() => super.toString();
-}
-patch class DedicatedWorkerGlobalScope {
-  static Type get instanceRuntimeType => DedicatedWorkerGlobalScopeImpl;
-
-}
-class DedicatedWorkerGlobalScopeImpl extends DedicatedWorkerGlobalScope implements js_library.JSObjectInterfacesDom {
-  DedicatedWorkerGlobalScopeImpl.internal_() : super.internal_();
-  get runtimeType => DedicatedWorkerGlobalScope;
-  toString() => super.toString();
-}
-patch class AudioTrackList {
-  static Type get instanceRuntimeType => AudioTrackListImpl;
-
-}
-class AudioTrackListImpl extends AudioTrackList implements js_library.JSObjectInterfacesDom {
-  AudioTrackListImpl.internal_() : super.internal_();
-  get runtimeType => AudioTrackList;
-  toString() => super.toString();
-}
-patch class StyleMedia {
-  static Type get instanceRuntimeType => StyleMediaImpl;
-
-}
-class StyleMediaImpl extends StyleMedia implements js_library.JSObjectInterfacesDom {
-  StyleMediaImpl.internal_() : super.internal_();
-  get runtimeType => StyleMedia;
-  toString() => super.toString();
-}
-patch class WindowEventHandlers {
-  static Type get instanceRuntimeType => WindowEventHandlersImpl;
-
-}
-class WindowEventHandlersImpl extends WindowEventHandlers implements js_library.JSObjectInterfacesDom {
-  WindowEventHandlersImpl.internal_() : super.internal_();
-  get runtimeType => WindowEventHandlers;
-  toString() => super.toString();
-}
-patch class SourceInfo {
-  static Type get instanceRuntimeType => SourceInfoImpl;
-
-}
-class SourceInfoImpl extends SourceInfo implements js_library.JSObjectInterfacesDom {
-  SourceInfoImpl.internal_() : super.internal_();
-  get runtimeType => SourceInfo;
-  toString() => super.toString();
-}
-patch class _DirectoryEntrySync {
-  static Type get instanceRuntimeType => _DirectoryEntrySyncImpl;
-
-}
-class _DirectoryEntrySyncImpl extends _DirectoryEntrySync implements js_library.JSObjectInterfacesDom {
-  _DirectoryEntrySyncImpl.internal_() : super.internal_();
-  get runtimeType => _DirectoryEntrySync;
-  toString() => super.toString();
-}
-patch class AnimationEvent {
-  static Type get instanceRuntimeType => AnimationEventImpl;
-
-}
-class AnimationEventImpl extends AnimationEvent implements js_library.JSObjectInterfacesDom {
-  AnimationEventImpl.internal_() : super.internal_();
-  get runtimeType => AnimationEvent;
-  toString() => super.toString();
-}
-patch class PluginPlaceholderElement {
-  static Type get instanceRuntimeType => PluginPlaceholderElementImpl;
-
-}
-class PluginPlaceholderElementImpl extends PluginPlaceholderElement implements js_library.JSObjectInterfacesDom {
-  PluginPlaceholderElementImpl.internal_() : super.internal_();
-  get runtimeType => PluginPlaceholderElement;
-  toString() => super.toString();
-}
-patch class _MutationEvent {
-  static Type get instanceRuntimeType => _MutationEventImpl;
-
-}
-class _MutationEventImpl extends _MutationEvent implements js_library.JSObjectInterfacesDom {
-  _MutationEventImpl.internal_() : super.internal_();
-  get runtimeType => _MutationEvent;
-  toString() => super.toString();
-}
-patch class LinkElement {
-  static Type get instanceRuntimeType => LinkElementImpl;
-
-}
-class LinkElementImpl extends LinkElement implements js_library.JSObjectInterfacesDom {
-  LinkElementImpl.internal_() : super.internal_();
-  get runtimeType => LinkElement;
-  toString() => super.toString();
-}
-patch class TextTrackCueList {
-  static Type get instanceRuntimeType => TextTrackCueListImpl;
-
-}
-class TextTrackCueListImpl extends TextTrackCueList implements js_library.JSObjectInterfacesDom {
-  TextTrackCueListImpl.internal_() : super.internal_();
-  get runtimeType => TextTrackCueList;
-  toString() => super.toString();
-}
-patch class VideoPlaybackQuality {
-  static Type get instanceRuntimeType => VideoPlaybackQualityImpl;
-
-}
-class VideoPlaybackQualityImpl extends VideoPlaybackQuality implements js_library.JSObjectInterfacesDom {
-  VideoPlaybackQualityImpl.internal_() : super.internal_();
-  get runtimeType => VideoPlaybackQuality;
-  toString() => super.toString();
-}
-patch class IFrameElement {
-  static Type get instanceRuntimeType => IFrameElementImpl;
-
-}
-class IFrameElementImpl extends IFrameElement implements js_library.JSObjectInterfacesDom {
-  IFrameElementImpl.internal_() : super.internal_();
-  get runtimeType => IFrameElement;
-  toString() => super.toString();
-}
-patch class FontFace {
-  static Type get instanceRuntimeType => FontFaceImpl;
-
-}
-class FontFaceImpl extends FontFace implements js_library.JSObjectInterfacesDom {
-  FontFaceImpl.internal_() : super.internal_();
-  get runtimeType => FontFace;
-  toString() => super.toString();
-}
 patch class AnchorElement {
   static Type get instanceRuntimeType => AnchorElementImpl;
 
@@ -2319,283 +33,22 @@
   get runtimeType => AnchorElement;
   toString() => super.toString();
 }
-patch class XsltProcessor {
-  static Type get instanceRuntimeType => XsltProcessorImpl;
+patch class Animation {
+  static Type get instanceRuntimeType => AnimationImpl;
 
 }
-class XsltProcessorImpl extends XsltProcessor implements js_library.JSObjectInterfacesDom {
-  XsltProcessorImpl.internal_() : super.internal_();
-  get runtimeType => XsltProcessor;
+class AnimationImpl extends Animation implements js_library.JSObjectInterfacesDom {
+  AnimationImpl.internal_() : super.internal_();
+  get runtimeType => Animation;
   toString() => super.toString();
 }
-patch class NavigatorLanguage {
-  static Type get instanceRuntimeType => NavigatorLanguageImpl;
+patch class AnimationEffectReadOnly {
+  static Type get instanceRuntimeType => AnimationEffectReadOnlyImpl;
 
 }
-class NavigatorLanguageImpl extends NavigatorLanguage implements js_library.JSObjectInterfacesDom {
-  NavigatorLanguageImpl.internal_() : super.internal_();
-  get runtimeType => NavigatorLanguage;
-  toString() => super.toString();
-}
-patch class ParagraphElement {
-  static Type get instanceRuntimeType => ParagraphElementImpl;
-
-}
-class ParagraphElementImpl extends ParagraphElement implements js_library.JSObjectInterfacesDom {
-  ParagraphElementImpl.internal_() : super.internal_();
-  get runtimeType => ParagraphElement;
-  toString() => super.toString();
-}
-patch class HmdvrDevice {
-  static Type get instanceRuntimeType => HmdvrDeviceImpl;
-
-}
-class HmdvrDeviceImpl extends HmdvrDevice implements js_library.JSObjectInterfacesDom {
-  HmdvrDeviceImpl.internal_() : super.internal_();
-  get runtimeType => HmdvrDevice;
-  toString() => super.toString();
-}
-patch class SourceBuffer {
-  static Type get instanceRuntimeType => SourceBufferImpl;
-
-}
-class SourceBufferImpl extends SourceBuffer implements js_library.JSObjectInterfacesDom {
-  SourceBufferImpl.internal_() : super.internal_();
-  get runtimeType => SourceBuffer;
-  toString() => super.toString();
-}
-patch class CssCharsetRule {
-  static Type get instanceRuntimeType => CssCharsetRuleImpl;
-
-}
-class CssCharsetRuleImpl extends CssCharsetRule implements js_library.JSObjectInterfacesDom {
-  CssCharsetRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssCharsetRule;
-  toString() => super.toString();
-}
-patch class DeprecatedStorageQuota {
-  static Type get instanceRuntimeType => DeprecatedStorageQuotaImpl;
-
-}
-class DeprecatedStorageQuotaImpl extends DeprecatedStorageQuota implements js_library.JSObjectInterfacesDom {
-  DeprecatedStorageQuotaImpl.internal_() : super.internal_();
-  get runtimeType => DeprecatedStorageQuota;
-  toString() => super.toString();
-}
-patch class DataTransfer {
-  static Type get instanceRuntimeType => DataTransferImpl;
-
-}
-class DataTransferImpl extends DataTransfer implements js_library.JSObjectInterfacesDom {
-  DataTransferImpl.internal_() : super.internal_();
-  get runtimeType => DataTransfer;
-  toString() => super.toString();
-}
-patch class MutationObserver {
-  static Type get instanceRuntimeType => MutationObserverImpl;
-
-}
-class MutationObserverImpl extends MutationObserver implements js_library.JSObjectInterfacesDom {
-  MutationObserverImpl.internal_() : super.internal_();
-  get runtimeType => MutationObserver;
-  toString() => super.toString();
-}
-patch class XmlSerializer {
-  static Type get instanceRuntimeType => XmlSerializerImpl;
-
-}
-class XmlSerializerImpl extends XmlSerializer implements js_library.JSObjectInterfacesDom {
-  XmlSerializerImpl.internal_() : super.internal_();
-  get runtimeType => XmlSerializer;
-  toString() => super.toString();
-}
-patch class PictureElement {
-  static Type get instanceRuntimeType => PictureElementImpl;
-
-}
-class PictureElementImpl extends PictureElement implements js_library.JSObjectInterfacesDom {
-  PictureElementImpl.internal_() : super.internal_();
-  get runtimeType => PictureElement;
-  toString() => super.toString();
-}
-patch class MediaEncryptedEvent {
-  static Type get instanceRuntimeType => MediaEncryptedEventImpl;
-
-}
-class MediaEncryptedEventImpl extends MediaEncryptedEvent implements js_library.JSObjectInterfacesDom {
-  MediaEncryptedEventImpl.internal_() : super.internal_();
-  get runtimeType => MediaEncryptedEvent;
-  toString() => super.toString();
-}
-patch class TouchEvent {
-  static Type get instanceRuntimeType => TouchEventImpl;
-
-}
-class TouchEventImpl extends TouchEvent implements js_library.JSObjectInterfacesDom {
-  TouchEventImpl.internal_() : super.internal_();
-  get runtimeType => TouchEvent;
-  toString() => super.toString();
-}
-patch class ServiceWorkerMessageEvent {
-  static Type get instanceRuntimeType => ServiceWorkerMessageEventImpl;
-
-}
-class ServiceWorkerMessageEventImpl extends ServiceWorkerMessageEvent implements js_library.JSObjectInterfacesDom {
-  ServiceWorkerMessageEventImpl.internal_() : super.internal_();
-  get runtimeType => ServiceWorkerMessageEvent;
-  toString() => super.toString();
-}
-patch class MeterElement {
-  static Type get instanceRuntimeType => MeterElementImpl;
-
-}
-class MeterElementImpl extends MeterElement implements js_library.JSObjectInterfacesDom {
-  MeterElementImpl.internal_() : super.internal_();
-  get runtimeType => MeterElement;
-  toString() => super.toString();
-}
-patch class CssGroupingRule {
-  static Type get instanceRuntimeType => CssGroupingRuleImpl;
-
-}
-class CssGroupingRuleImpl extends CssGroupingRule implements js_library.JSObjectInterfacesDom {
-  CssGroupingRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssGroupingRule;
-  toString() => super.toString();
-}
-patch class UListElement {
-  static Type get instanceRuntimeType => UListElementImpl;
-
-}
-class UListElementImpl extends UListElement implements js_library.JSObjectInterfacesDom {
-  UListElementImpl.internal_() : super.internal_();
-  get runtimeType => UListElement;
-  toString() => super.toString();
-}
-patch class Storage {
-  static Type get instanceRuntimeType => StorageImpl;
-
-}
-class StorageImpl extends Storage implements js_library.JSObjectInterfacesDom {
-  StorageImpl.internal_() : super.internal_();
-  get runtimeType => Storage;
-  toString() => super.toString();
-}
-patch class _DocumentType {
-  static Type get instanceRuntimeType => _DocumentTypeImpl;
-
-}
-class _DocumentTypeImpl extends _DocumentType implements js_library.JSObjectInterfacesDom {
-  _DocumentTypeImpl.internal_() : super.internal_();
-  get runtimeType => _DocumentType;
-  toString() => super.toString();
-}
-patch class ErrorEvent {
-  static Type get instanceRuntimeType => ErrorEventImpl;
-
-}
-class ErrorEventImpl extends ErrorEvent implements js_library.JSObjectInterfacesDom {
-  ErrorEventImpl.internal_() : super.internal_();
-  get runtimeType => ErrorEvent;
-  toString() => super.toString();
-}
-patch class BodyElement {
-  static Type get instanceRuntimeType => BodyElementImpl;
-
-}
-class BodyElementImpl extends BodyElement implements js_library.JSObjectInterfacesDom {
-  BodyElementImpl.internal_() : super.internal_();
-  get runtimeType => BodyElement;
-  toString() => super.toString();
-}
-patch class DeprecatedStorageInfo {
-  static Type get instanceRuntimeType => DeprecatedStorageInfoImpl;
-
-}
-class DeprecatedStorageInfoImpl extends DeprecatedStorageInfo implements js_library.JSObjectInterfacesDom {
-  DeprecatedStorageInfoImpl.internal_() : super.internal_();
-  get runtimeType => DeprecatedStorageInfo;
-  toString() => super.toString();
-}
-patch class Geoposition {
-  static Type get instanceRuntimeType => GeopositionImpl;
-
-}
-class GeopositionImpl extends Geoposition implements js_library.JSObjectInterfacesDom {
-  GeopositionImpl.internal_() : super.internal_();
-  get runtimeType => Geoposition;
-  toString() => super.toString();
-}
-patch class ApplicationCacheErrorEvent {
-  static Type get instanceRuntimeType => ApplicationCacheErrorEventImpl;
-
-}
-class ApplicationCacheErrorEventImpl extends ApplicationCacheErrorEvent implements js_library.JSObjectInterfacesDom {
-  ApplicationCacheErrorEventImpl.internal_() : super.internal_();
-  get runtimeType => ApplicationCacheErrorEvent;
-  toString() => super.toString();
-}
-patch class MutationRecord {
-  static Type get instanceRuntimeType => MutationRecordImpl;
-
-}
-class MutationRecordImpl extends MutationRecord implements js_library.JSObjectInterfacesDom {
-  MutationRecordImpl.internal_() : super.internal_();
-  get runtimeType => MutationRecord;
-  toString() => super.toString();
-}
-patch class FieldSetElement {
-  static Type get instanceRuntimeType => FieldSetElementImpl;
-
-}
-class FieldSetElementImpl extends FieldSetElement implements js_library.JSObjectInterfacesDom {
-  FieldSetElementImpl.internal_() : super.internal_();
-  get runtimeType => FieldSetElement;
-  toString() => super.toString();
-}
-patch class NonDocumentTypeChildNode {
-  static Type get instanceRuntimeType => NonDocumentTypeChildNodeImpl;
-
-}
-class NonDocumentTypeChildNodeImpl extends NonDocumentTypeChildNode implements js_library.JSObjectInterfacesDom {
-  NonDocumentTypeChildNodeImpl.internal_() : super.internal_();
-  get runtimeType => NonDocumentTypeChildNode;
-  toString() => super.toString();
-}
-patch class _DirectoryReaderSync {
-  static Type get instanceRuntimeType => _DirectoryReaderSyncImpl;
-
-}
-class _DirectoryReaderSyncImpl extends _DirectoryReaderSync implements js_library.JSObjectInterfacesDom {
-  _DirectoryReaderSyncImpl.internal_() : super.internal_();
-  get runtimeType => _DirectoryReaderSync;
-  toString() => super.toString();
-}
-patch class RtcSessionDescription {
-  static Type get instanceRuntimeType => RtcSessionDescriptionImpl;
-
-}
-class RtcSessionDescriptionImpl extends RtcSessionDescription implements js_library.JSObjectInterfacesDom {
-  RtcSessionDescriptionImpl.internal_() : super.internal_();
-  get runtimeType => RtcSessionDescription;
-  toString() => super.toString();
-}
-patch class PositionSensorVRDevice {
-  static Type get instanceRuntimeType => PositionSensorVRDeviceImpl;
-
-}
-class PositionSensorVRDeviceImpl extends PositionSensorVRDevice implements js_library.JSObjectInterfacesDom {
-  PositionSensorVRDeviceImpl.internal_() : super.internal_();
-  get runtimeType => PositionSensorVRDevice;
-  toString() => super.toString();
-}
-patch class Text {
-  static Type get instanceRuntimeType => TextImpl;
-
-}
-class TextImpl extends Text implements js_library.JSObjectInterfacesDom {
-  TextImpl.internal_() : super.internal_();
-  get runtimeType => Text;
+class AnimationEffectReadOnlyImpl extends AnimationEffectReadOnly implements js_library.JSObjectInterfacesDom {
+  AnimationEffectReadOnlyImpl.internal_() : super.internal_();
+  get runtimeType => AnimationEffectReadOnly;
   toString() => super.toString();
 }
 patch class AnimationEffectTiming {
@@ -2607,121 +60,22 @@
   get runtimeType => AnimationEffectTiming;
   toString() => super.toString();
 }
-patch class PositionError {
-  static Type get instanceRuntimeType => PositionErrorImpl;
+patch class AnimationEvent {
+  static Type get instanceRuntimeType => AnimationEventImpl;
 
 }
-class PositionErrorImpl extends PositionError implements js_library.JSObjectInterfacesDom {
-  PositionErrorImpl.internal_() : super.internal_();
-  get runtimeType => PositionError;
+class AnimationEventImpl extends AnimationEvent implements js_library.JSObjectInterfacesDom {
+  AnimationEventImpl.internal_() : super.internal_();
+  get runtimeType => AnimationEvent;
   toString() => super.toString();
 }
-patch class VideoTrackList {
-  static Type get instanceRuntimeType => VideoTrackListImpl;
+patch class AnimationPlayerEvent {
+  static Type get instanceRuntimeType => AnimationPlayerEventImpl;
 
 }
-class VideoTrackListImpl extends VideoTrackList implements js_library.JSObjectInterfacesDom {
-  VideoTrackListImpl.internal_() : super.internal_();
-  get runtimeType => VideoTrackList;
-  toString() => super.toString();
-}
-patch class GamepadButton {
-  static Type get instanceRuntimeType => GamepadButtonImpl;
-
-}
-class GamepadButtonImpl extends GamepadButton implements js_library.JSObjectInterfacesDom {
-  GamepadButtonImpl.internal_() : super.internal_();
-  get runtimeType => GamepadButton;
-  toString() => super.toString();
-}
-patch class WorkerConsole {
-  static Type get instanceRuntimeType => WorkerConsoleImpl;
-
-}
-class WorkerConsoleImpl extends WorkerConsole implements js_library.JSObjectInterfacesDom {
-  WorkerConsoleImpl.internal_() : super.internal_();
-  get runtimeType => WorkerConsole;
-  toString() => super.toString();
-}
-patch class TrackDefault {
-  static Type get instanceRuntimeType => TrackDefaultImpl;
-
-}
-class TrackDefaultImpl extends TrackDefault implements js_library.JSObjectInterfacesDom {
-  TrackDefaultImpl.internal_() : super.internal_();
-  get runtimeType => TrackDefault;
-  toString() => super.toString();
-}
-patch class FileStream {
-  static Type get instanceRuntimeType => FileStreamImpl;
-
-}
-class FileStreamImpl extends FileStream implements js_library.JSObjectInterfacesDom {
-  FileStreamImpl.internal_() : super.internal_();
-  get runtimeType => FileStream;
-  toString() => super.toString();
-}
-patch class _ClientRect {
-  static Type get instanceRuntimeType => _ClientRectImpl;
-
-}
-class _ClientRectImpl extends _ClientRect implements js_library.JSObjectInterfacesDom {
-  _ClientRectImpl.internal_() : super.internal_();
-  get runtimeType => _ClientRect;
-  toString() => super.toString();
-}
-patch class TemplateElement {
-  static Type get instanceRuntimeType => TemplateElementImpl;
-
-}
-class TemplateElementImpl extends TemplateElement implements js_library.JSObjectInterfacesDom {
-  TemplateElementImpl.internal_() : super.internal_();
-  get runtimeType => TemplateElement;
-  toString() => super.toString();
-}
-patch class RtcStatsReport {
-  static Type get instanceRuntimeType => RtcStatsReportImpl;
-
-}
-class RtcStatsReportImpl extends RtcStatsReport implements js_library.JSObjectInterfacesDom {
-  RtcStatsReportImpl.internal_() : super.internal_();
-  get runtimeType => RtcStatsReport;
-  toString() => super.toString();
-}
-patch class TimeRanges {
-  static Type get instanceRuntimeType => TimeRangesImpl;
-
-}
-class TimeRangesImpl extends TimeRanges implements js_library.JSObjectInterfacesDom {
-  TimeRangesImpl.internal_() : super.internal_();
-  get runtimeType => TimeRanges;
-  toString() => super.toString();
-}
-patch class _Request {
-  static Type get instanceRuntimeType => _RequestImpl;
-
-}
-class _RequestImpl extends _Request implements js_library.JSObjectInterfacesDom {
-  _RequestImpl.internal_() : super.internal_();
-  get runtimeType => _Request;
-  toString() => super.toString();
-}
-patch class _WindowTimers {
-  static Type get instanceRuntimeType => _WindowTimersImpl;
-
-}
-class _WindowTimersImpl extends _WindowTimers implements js_library.JSObjectInterfacesDom {
-  _WindowTimersImpl.internal_() : super.internal_();
-  get runtimeType => _WindowTimers;
-  toString() => super.toString();
-}
-patch class VttRegionList {
-  static Type get instanceRuntimeType => VttRegionListImpl;
-
-}
-class VttRegionListImpl extends VttRegionList implements js_library.JSObjectInterfacesDom {
-  VttRegionListImpl.internal_() : super.internal_();
-  get runtimeType => VttRegionList;
+class AnimationPlayerEventImpl extends AnimationPlayerEvent implements js_library.JSObjectInterfacesDom {
+  AnimationPlayerEventImpl.internal_() : super.internal_();
+  get runtimeType => AnimationPlayerEvent;
   toString() => super.toString();
 }
 patch class AnimationTimeline {
@@ -2733,580 +87,13 @@
   get runtimeType => AnimationTimeline;
   toString() => super.toString();
 }
-patch class Event {
-  static Type get instanceRuntimeType => EventImpl;
+patch class AppBannerPromptResult {
+  static Type get instanceRuntimeType => AppBannerPromptResultImpl;
 
 }
-class EventImpl extends Event implements js_library.JSObjectInterfacesDom {
-  EventImpl.internal_() : super.internal_();
-  get runtimeType => Event;
-  toString() => super.toString();
-}
-patch class DomIterator {
-  static Type get instanceRuntimeType => DomIteratorImpl;
-
-}
-class DomIteratorImpl extends DomIterator implements js_library.JSObjectInterfacesDom {
-  DomIteratorImpl.internal_() : super.internal_();
-  get runtimeType => DomIterator;
-  toString() => super.toString();
-}
-patch class ImageData {
-  static Type get instanceRuntimeType => ImageDataImpl;
-
-}
-class ImageDataImpl extends ImageData implements js_library.JSObjectInterfacesDom {
-  ImageDataImpl.internal_() : super.internal_();
-  get runtimeType => ImageData;
-  toString() => super.toString();
-}
-patch class MediaStreamTrackEvent {
-  static Type get instanceRuntimeType => MediaStreamTrackEventImpl;
-
-}
-class MediaStreamTrackEventImpl extends MediaStreamTrackEvent implements js_library.JSObjectInterfacesDom {
-  MediaStreamTrackEventImpl.internal_() : super.internal_();
-  get runtimeType => MediaStreamTrackEvent;
-  toString() => super.toString();
-}
-patch class PromiseRejectionEvent {
-  static Type get instanceRuntimeType => PromiseRejectionEventImpl;
-
-}
-class PromiseRejectionEventImpl extends PromiseRejectionEvent implements js_library.JSObjectInterfacesDom {
-  PromiseRejectionEventImpl.internal_() : super.internal_();
-  get runtimeType => PromiseRejectionEvent;
-  toString() => super.toString();
-}
-patch class HtmlElement {
-  static Type get instanceRuntimeType => HtmlElementImpl;
-
-}
-class HtmlElementImpl extends HtmlElement implements js_library.JSObjectInterfacesDom {
-  HtmlElementImpl.internal_() : super.internal_();
-  get runtimeType => HtmlElement;
-  toString() => super.toString();
-}
-patch class HtmlDocument {
-  static Type get instanceRuntimeType => HtmlDocumentImpl;
-
-}
-class HtmlDocumentImpl extends HtmlDocument implements js_library.JSObjectInterfacesDom {
-  HtmlDocumentImpl.internal_() : super.internal_();
-  get runtimeType => HtmlDocument;
-  toString() => super.toString();
-}
-patch class MidiPort {
-  static Type get instanceRuntimeType => MidiPortImpl;
-
-}
-class MidiPortImpl extends MidiPort implements js_library.JSObjectInterfacesDom {
-  MidiPortImpl.internal_() : super.internal_();
-  get runtimeType => MidiPort;
-  toString() => super.toString();
-}
-patch class CssMediaRule {
-  static Type get instanceRuntimeType => CssMediaRuleImpl;
-
-}
-class CssMediaRuleImpl extends CssMediaRule implements js_library.JSObjectInterfacesDom {
-  CssMediaRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssMediaRule;
-  toString() => super.toString();
-}
-patch class CssViewportRule {
-  static Type get instanceRuntimeType => CssViewportRuleImpl;
-
-}
-class CssViewportRuleImpl extends CssViewportRule implements js_library.JSObjectInterfacesDom {
-  CssViewportRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssViewportRule;
-  toString() => super.toString();
-}
-patch class FederatedCredential {
-  static Type get instanceRuntimeType => FederatedCredentialImpl;
-
-}
-class FederatedCredentialImpl extends FederatedCredential implements js_library.JSObjectInterfacesDom {
-  FederatedCredentialImpl.internal_() : super.internal_();
-  get runtimeType => FederatedCredential;
-  toString() => super.toString();
-}
-patch class RtcIceCandidateEvent {
-  static Type get instanceRuntimeType => RtcIceCandidateEventImpl;
-
-}
-class RtcIceCandidateEventImpl extends RtcIceCandidateEvent implements js_library.JSObjectInterfacesDom {
-  RtcIceCandidateEventImpl.internal_() : super.internal_();
-  get runtimeType => RtcIceCandidateEvent;
-  toString() => super.toString();
-}
-patch class PerformanceMark {
-  static Type get instanceRuntimeType => PerformanceMarkImpl;
-
-}
-class PerformanceMarkImpl extends PerformanceMark implements js_library.JSObjectInterfacesDom {
-  PerformanceMarkImpl.internal_() : super.internal_();
-  get runtimeType => PerformanceMark;
-  toString() => super.toString();
-}
-patch class SharedWorkerGlobalScope {
-  static Type get instanceRuntimeType => SharedWorkerGlobalScopeImpl;
-
-}
-class SharedWorkerGlobalScopeImpl extends SharedWorkerGlobalScope implements js_library.JSObjectInterfacesDom {
-  SharedWorkerGlobalScopeImpl.internal_() : super.internal_();
-  get runtimeType => SharedWorkerGlobalScope;
-  toString() => super.toString();
-}
-patch class MimeTypeArray {
-  static Type get instanceRuntimeType => MimeTypeArrayImpl;
-
-}
-class MimeTypeArrayImpl extends MimeTypeArray implements js_library.JSObjectInterfacesDom {
-  MimeTypeArrayImpl.internal_() : super.internal_();
-  get runtimeType => MimeTypeArray;
-  toString() => super.toString();
-}
-patch class PerformanceRenderTiming {
-  static Type get instanceRuntimeType => PerformanceRenderTimingImpl;
-
-}
-class PerformanceRenderTimingImpl extends PerformanceRenderTiming implements js_library.JSObjectInterfacesDom {
-  PerformanceRenderTimingImpl.internal_() : super.internal_();
-  get runtimeType => PerformanceRenderTiming;
-  toString() => super.toString();
-}
-patch class EffectModel {
-  static Type get instanceRuntimeType => EffectModelImpl;
-
-}
-class EffectModelImpl extends EffectModel implements js_library.JSObjectInterfacesDom {
-  EffectModelImpl.internal_() : super.internal_();
-  get runtimeType => EffectModel;
-  toString() => super.toString();
-}
-patch class StyleSheet {
-  static Type get instanceRuntimeType => StyleSheetImpl;
-
-}
-class StyleSheetImpl extends StyleSheet implements js_library.JSObjectInterfacesDom {
-  StyleSheetImpl.internal_() : super.internal_();
-  get runtimeType => StyleSheet;
-  toString() => super.toString();
-}
-patch class TableRowElement {
-  static Type get instanceRuntimeType => TableRowElementImpl;
-
-}
-class TableRowElementImpl extends TableRowElement implements js_library.JSObjectInterfacesDom {
-  TableRowElementImpl.internal_() : super.internal_();
-  get runtimeType => TableRowElement;
-  toString() => super.toString();
-}
-patch class Geofencing {
-  static Type get instanceRuntimeType => GeofencingImpl;
-
-}
-class GeofencingImpl extends Geofencing implements js_library.JSObjectInterfacesDom {
-  GeofencingImpl.internal_() : super.internal_();
-  get runtimeType => Geofencing;
-  toString() => super.toString();
-}
-patch class NodeList {
-  static Type get instanceRuntimeType => NodeListImpl;
-
-}
-class NodeListImpl extends NodeList implements js_library.JSObjectInterfacesDom {
-  NodeListImpl.internal_() : super.internal_();
-  get runtimeType => NodeList;
-  toString() => super.toString();
-}
-patch class MidiAccess {
-  static Type get instanceRuntimeType => MidiAccessImpl;
-
-}
-class MidiAccessImpl extends MidiAccess implements js_library.JSObjectInterfacesDom {
-  MidiAccessImpl.internal_() : super.internal_();
-  get runtimeType => MidiAccess;
-  toString() => super.toString();
-}
-patch class CssStyleRule {
-  static Type get instanceRuntimeType => CssStyleRuleImpl;
-
-}
-class CssStyleRuleImpl extends CssStyleRule implements js_library.JSObjectInterfacesDom {
-  CssStyleRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssStyleRule;
-  toString() => super.toString();
-}
-patch class DomError {
-  static Type get instanceRuntimeType => DomErrorImpl;
-
-}
-class DomErrorImpl extends DomError implements js_library.JSObjectInterfacesDom {
-  DomErrorImpl.internal_() : super.internal_();
-  get runtimeType => DomError;
-  toString() => super.toString();
-}
-patch class BluetoothUuid {
-  static Type get instanceRuntimeType => BluetoothUuidImpl;
-
-}
-class BluetoothUuidImpl extends BluetoothUuid implements js_library.JSObjectInterfacesDom {
-  BluetoothUuidImpl.internal_() : super.internal_();
-  get runtimeType => BluetoothUuid;
-  toString() => super.toString();
-}
-patch class HashChangeEvent {
-  static Type get instanceRuntimeType => HashChangeEventImpl;
-
-}
-class HashChangeEventImpl extends HashChangeEvent implements js_library.JSObjectInterfacesDom {
-  HashChangeEventImpl.internal_() : super.internal_();
-  get runtimeType => HashChangeEvent;
-  toString() => super.toString();
-}
-patch class InputElement {
-  static Type get instanceRuntimeType => InputElementImpl;
-
-}
-class InputElementImpl extends InputElement implements js_library.JSObjectInterfacesDom {
-  InputElementImpl.internal_() : super.internal_();
-  get runtimeType => InputElement;
-  toString() => super.toString();
-}
-patch class CDataSection {
-  static Type get instanceRuntimeType => CDataSectionImpl;
-
-}
-class CDataSectionImpl extends CDataSection implements js_library.JSObjectInterfacesDom {
-  CDataSectionImpl.internal_() : super.internal_();
-  get runtimeType => CDataSection;
-  toString() => super.toString();
-}
-patch class CssStyleSheet {
-  static Type get instanceRuntimeType => CssStyleSheetImpl;
-
-}
-class CssStyleSheetImpl extends CssStyleSheet implements js_library.JSObjectInterfacesDom {
-  CssStyleSheetImpl.internal_() : super.internal_();
-  get runtimeType => CssStyleSheet;
-  toString() => super.toString();
-}
-patch class DomRectReadOnly {
-  static Type get instanceRuntimeType => DomRectReadOnlyImpl;
-
-}
-class DomRectReadOnlyImpl extends DomRectReadOnly implements js_library.JSObjectInterfacesDom {
-  DomRectReadOnlyImpl.internal_() : super.internal_();
-  get runtimeType => DomRectReadOnly;
-  toString() => super.toString();
-}
-patch class SyncEvent {
-  static Type get instanceRuntimeType => SyncEventImpl;
-
-}
-class SyncEventImpl extends SyncEvent implements js_library.JSObjectInterfacesDom {
-  SyncEventImpl.internal_() : super.internal_();
-  get runtimeType => SyncEvent;
-  toString() => super.toString();
-}
-patch class CssSupportsRule {
-  static Type get instanceRuntimeType => CssSupportsRuleImpl;
-
-}
-class CssSupportsRuleImpl extends CssSupportsRule implements js_library.JSObjectInterfacesDom {
-  CssSupportsRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssSupportsRule;
-  toString() => super.toString();
-}
-patch class DomParser {
-  static Type get instanceRuntimeType => DomParserImpl;
-
-}
-class DomParserImpl extends DomParser implements js_library.JSObjectInterfacesDom {
-  DomParserImpl.internal_() : super.internal_();
-  get runtimeType => DomParser;
-  toString() => super.toString();
-}
-patch class LIElement {
-  static Type get instanceRuntimeType => LIElementImpl;
-
-}
-class LIElementImpl extends LIElement implements js_library.JSObjectInterfacesDom {
-  LIElementImpl.internal_() : super.internal_();
-  get runtimeType => LIElement;
-  toString() => super.toString();
-}
-patch class CrossOriginServiceWorkerClient {
-  static Type get instanceRuntimeType => CrossOriginServiceWorkerClientImpl;
-
-}
-class CrossOriginServiceWorkerClientImpl extends CrossOriginServiceWorkerClient implements js_library.JSObjectInterfacesDom {
-  CrossOriginServiceWorkerClientImpl.internal_() : super.internal_();
-  get runtimeType => CrossOriginServiceWorkerClient;
-  toString() => super.toString();
-}
-patch class ServiceWorkerGlobalScope {
-  static Type get instanceRuntimeType => ServiceWorkerGlobalScopeImpl;
-
-}
-class ServiceWorkerGlobalScopeImpl extends ServiceWorkerGlobalScope implements js_library.JSObjectInterfacesDom {
-  ServiceWorkerGlobalScopeImpl.internal_() : super.internal_();
-  get runtimeType => ServiceWorkerGlobalScope;
-  toString() => super.toString();
-}
-patch class InputDevice {
-  static Type get instanceRuntimeType => InputDeviceImpl;
-
-}
-class InputDeviceImpl extends InputDevice implements js_library.JSObjectInterfacesDom {
-  InputDeviceImpl.internal_() : super.internal_();
-  get runtimeType => InputDevice;
-  toString() => super.toString();
-}
-patch class MediaSession {
-  static Type get instanceRuntimeType => MediaSessionImpl;
-
-}
-class MediaSessionImpl extends MediaSession implements js_library.JSObjectInterfacesDom {
-  MediaSessionImpl.internal_() : super.internal_();
-  get runtimeType => MediaSession;
-  toString() => super.toString();
-}
-patch class PreElement {
-  static Type get instanceRuntimeType => PreElementImpl;
-
-}
-class PreElementImpl extends PreElement implements js_library.JSObjectInterfacesDom {
-  PreElementImpl.internal_() : super.internal_();
-  get runtimeType => PreElement;
-  toString() => super.toString();
-}
-patch class _NamedNodeMap {
-  static Type get instanceRuntimeType => _NamedNodeMapImpl;
-
-}
-class _NamedNodeMapImpl extends _NamedNodeMap implements js_library.JSObjectInterfacesDom {
-  _NamedNodeMapImpl.internal_() : super.internal_();
-  get runtimeType => _NamedNodeMap;
-  toString() => super.toString();
-}
-patch class StyleElement {
-  static Type get instanceRuntimeType => StyleElementImpl;
-
-}
-class StyleElementImpl extends StyleElement implements js_library.JSObjectInterfacesDom {
-  StyleElementImpl.internal_() : super.internal_();
-  get runtimeType => StyleElement;
-  toString() => super.toString();
-}
-patch class TrackEvent {
-  static Type get instanceRuntimeType => TrackEventImpl;
-
-}
-class TrackEventImpl extends TrackEvent implements js_library.JSObjectInterfacesDom {
-  TrackEventImpl.internal_() : super.internal_();
-  get runtimeType => TrackEvent;
-  toString() => super.toString();
-}
-patch class Performance {
-  static Type get instanceRuntimeType => PerformanceImpl;
-
-}
-class PerformanceImpl extends Performance implements js_library.JSObjectInterfacesDom {
-  PerformanceImpl.internal_() : super.internal_();
-  get runtimeType => Performance;
-  toString() => super.toString();
-}
-patch class CssKeyframeRule {
-  static Type get instanceRuntimeType => CssKeyframeRuleImpl;
-
-}
-class CssKeyframeRuleImpl extends CssKeyframeRule implements js_library.JSObjectInterfacesDom {
-  CssKeyframeRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssKeyframeRule;
-  toString() => super.toString();
-}
-patch class MidiInputMap {
-  static Type get instanceRuntimeType => MidiInputMapImpl;
-
-}
-class MidiInputMapImpl extends MidiInputMap implements js_library.JSObjectInterfacesDom {
-  MidiInputMapImpl.internal_() : super.internal_();
-  get runtimeType => MidiInputMap;
-  toString() => super.toString();
-}
-patch class XmlDocument {
-  static Type get instanceRuntimeType => XmlDocumentImpl;
-
-}
-class XmlDocumentImpl extends XmlDocument implements js_library.JSObjectInterfacesDom {
-  XmlDocumentImpl.internal_() : super.internal_();
-  get runtimeType => XmlDocument;
-  toString() => super.toString();
-}
-patch class VREyeParameters {
-  static Type get instanceRuntimeType => VREyeParametersImpl;
-
-}
-class VREyeParametersImpl extends VREyeParameters implements js_library.JSObjectInterfacesDom {
-  VREyeParametersImpl.internal_() : super.internal_();
-  get runtimeType => VREyeParameters;
-  toString() => super.toString();
-}
-patch class Credential {
-  static Type get instanceRuntimeType => CredentialImpl;
-
-}
-class CredentialImpl extends Credential implements js_library.JSObjectInterfacesDom {
-  CredentialImpl.internal_() : super.internal_();
-  get runtimeType => Credential;
-  toString() => super.toString();
-}
-patch class DomException {
-  static Type get instanceRuntimeType => DomExceptionImpl;
-
-}
-class DomExceptionImpl extends DomException implements js_library.JSObjectInterfacesDom {
-  DomExceptionImpl.internal_() : super.internal_();
-  get runtimeType => DomException;
-  toString() => super.toString();
-}
-patch class LegendElement {
-  static Type get instanceRuntimeType => LegendElementImpl;
-
-}
-class LegendElementImpl extends LegendElement implements js_library.JSObjectInterfacesDom {
-  LegendElementImpl.internal_() : super.internal_();
-  get runtimeType => LegendElement;
-  toString() => super.toString();
-}
-patch class HttpRequestEventTarget {
-  static Type get instanceRuntimeType => HttpRequestEventTargetImpl;
-
-}
-class HttpRequestEventTargetImpl extends HttpRequestEventTarget implements js_library.JSObjectInterfacesDom {
-  HttpRequestEventTargetImpl.internal_() : super.internal_();
-  get runtimeType => HttpRequestEventTarget;
-  toString() => super.toString();
-}
-patch class UnknownElement {
-  static Type get instanceRuntimeType => UnknownElementImpl;
-
-}
-class UnknownElementImpl extends UnknownElement implements js_library.JSObjectInterfacesDom {
-  UnknownElementImpl.internal_() : super.internal_();
-  get runtimeType => UnknownElement;
-  toString() => super.toString();
-}
-patch class _RadioNodeList {
-  static Type get instanceRuntimeType => _RadioNodeListImpl;
-
-}
-class _RadioNodeListImpl extends _RadioNodeList implements js_library.JSObjectInterfacesDom {
-  _RadioNodeListImpl.internal_() : super.internal_();
-  get runtimeType => _RadioNodeList;
-  toString() => super.toString();
-}
-patch class NavigatorUserMediaError {
-  static Type get instanceRuntimeType => NavigatorUserMediaErrorImpl;
-
-}
-class NavigatorUserMediaErrorImpl extends NavigatorUserMediaError implements js_library.JSObjectInterfacesDom {
-  NavigatorUserMediaErrorImpl.internal_() : super.internal_();
-  get runtimeType => NavigatorUserMediaError;
-  toString() => super.toString();
-}
-patch class ImageBitmap {
-  static Type get instanceRuntimeType => ImageBitmapImpl;
-
-}
-class ImageBitmapImpl extends ImageBitmap implements js_library.JSObjectInterfacesDom {
-  ImageBitmapImpl.internal_() : super.internal_();
-  get runtimeType => ImageBitmap;
-  toString() => super.toString();
-}
-patch class AudioTrack {
-  static Type get instanceRuntimeType => AudioTrackImpl;
-
-}
-class AudioTrackImpl extends AudioTrack implements js_library.JSObjectInterfacesDom {
-  AudioTrackImpl.internal_() : super.internal_();
-  get runtimeType => AudioTrack;
-  toString() => super.toString();
-}
-patch class ReadableByteStream {
-  static Type get instanceRuntimeType => ReadableByteStreamImpl;
-
-}
-class ReadableByteStreamImpl extends ReadableByteStream implements js_library.JSObjectInterfacesDom {
-  ReadableByteStreamImpl.internal_() : super.internal_();
-  get runtimeType => ReadableByteStream;
-  toString() => super.toString();
-}
-patch class _HTMLFrameElement {
-  static Type get instanceRuntimeType => _HTMLFrameElementImpl;
-
-}
-class _HTMLFrameElementImpl extends _HTMLFrameElement implements js_library.JSObjectInterfacesDom {
-  _HTMLFrameElementImpl.internal_() : super.internal_();
-  get runtimeType => _HTMLFrameElement;
-  toString() => super.toString();
-}
-patch class Body {
-  static Type get instanceRuntimeType => BodyImpl;
-
-}
-class BodyImpl extends Body implements js_library.JSObjectInterfacesDom {
-  BodyImpl.internal_() : super.internal_();
-  get runtimeType => Body;
-  toString() => super.toString();
-}
-patch class MediaKeySystemAccess {
-  static Type get instanceRuntimeType => MediaKeySystemAccessImpl;
-
-}
-class MediaKeySystemAccessImpl extends MediaKeySystemAccess implements js_library.JSObjectInterfacesDom {
-  MediaKeySystemAccessImpl.internal_() : super.internal_();
-  get runtimeType => MediaKeySystemAccess;
-  toString() => super.toString();
-}
-patch class BluetoothGattService {
-  static Type get instanceRuntimeType => BluetoothGattServiceImpl;
-
-}
-class BluetoothGattServiceImpl extends BluetoothGattService implements js_library.JSObjectInterfacesDom {
-  BluetoothGattServiceImpl.internal_() : super.internal_();
-  get runtimeType => BluetoothGattService;
-  toString() => super.toString();
-}
-patch class _Attr {
-  static Type get instanceRuntimeType => _AttrImpl;
-
-}
-class _AttrImpl extends _Attr implements js_library.JSObjectInterfacesDom {
-  _AttrImpl.internal_() : super.internal_();
-  get runtimeType => _Attr;
-  toString() => super.toString();
-}
-patch class CanvasRenderingContext2D {
-  static Type get instanceRuntimeType => CanvasRenderingContext2DImpl;
-
-}
-class CanvasRenderingContext2DImpl extends CanvasRenderingContext2D implements js_library.JSObjectInterfacesDom {
-  CanvasRenderingContext2DImpl.internal_() : super.internal_();
-  get runtimeType => CanvasRenderingContext2D;
-  toString() => super.toString();
-}
-patch class OListElement {
-  static Type get instanceRuntimeType => OListElementImpl;
-
-}
-class OListElementImpl extends OListElement implements js_library.JSObjectInterfacesDom {
-  OListElementImpl.internal_() : super.internal_();
-  get runtimeType => OListElement;
+class AppBannerPromptResultImpl extends AppBannerPromptResult implements js_library.JSObjectInterfacesDom {
+  AppBannerPromptResultImpl.internal_() : super.internal_();
+  get runtimeType => AppBannerPromptResult;
   toString() => super.toString();
 }
 patch class ApplicationCache {
@@ -3318,148 +105,94 @@
   get runtimeType => ApplicationCache;
   toString() => super.toString();
 }
-patch class Clients {
-  static Type get instanceRuntimeType => ClientsImpl;
+patch class ApplicationCacheErrorEvent {
+  static Type get instanceRuntimeType => ApplicationCacheErrorEventImpl;
 
 }
-class ClientsImpl extends Clients implements js_library.JSObjectInterfacesDom {
-  ClientsImpl.internal_() : super.internal_();
-  get runtimeType => Clients;
+class ApplicationCacheErrorEventImpl extends ApplicationCacheErrorEvent implements js_library.JSObjectInterfacesDom {
+  ApplicationCacheErrorEventImpl.internal_() : super.internal_();
+  get runtimeType => ApplicationCacheErrorEvent;
   toString() => super.toString();
 }
-patch class RtcPeerConnection {
-  static Type get instanceRuntimeType => RtcPeerConnectionImpl;
+patch class AreaElement {
+  static Type get instanceRuntimeType => AreaElementImpl;
 
 }
-class RtcPeerConnectionImpl extends RtcPeerConnection implements js_library.JSObjectInterfacesDom {
-  RtcPeerConnectionImpl.internal_() : super.internal_();
-  get runtimeType => RtcPeerConnection;
+class AreaElementImpl extends AreaElement implements js_library.JSObjectInterfacesDom {
+  AreaElementImpl.internal_() : super.internal_();
+  get runtimeType => AreaElement;
   toString() => super.toString();
 }
-patch class VideoElement {
-  static Type get instanceRuntimeType => VideoElementImpl;
+patch class AudioElement {
+  static Type get instanceRuntimeType => AudioElementImpl;
 
 }
-class VideoElementImpl extends VideoElement implements js_library.JSObjectInterfacesDom {
-  VideoElementImpl.internal_() : super.internal_();
-  get runtimeType => VideoElement;
+class AudioElementImpl extends AudioElement implements js_library.JSObjectInterfacesDom {
+  AudioElementImpl.internal_() : super.internal_();
+  get runtimeType => AudioElement;
   toString() => super.toString();
 }
-patch class OutputElement {
-  static Type get instanceRuntimeType => OutputElementImpl;
+patch class AudioTrack {
+  static Type get instanceRuntimeType => AudioTrackImpl;
 
 }
-class OutputElementImpl extends OutputElement implements js_library.JSObjectInterfacesDom {
-  OutputElementImpl.internal_() : super.internal_();
-  get runtimeType => OutputElement;
+class AudioTrackImpl extends AudioTrack implements js_library.JSObjectInterfacesDom {
+  AudioTrackImpl.internal_() : super.internal_();
+  get runtimeType => AudioTrack;
   toString() => super.toString();
 }
-patch class Coordinates {
-  static Type get instanceRuntimeType => CoordinatesImpl;
+patch class AudioTrackList {
+  static Type get instanceRuntimeType => AudioTrackListImpl;
 
 }
-class CoordinatesImpl extends Coordinates implements js_library.JSObjectInterfacesDom {
-  CoordinatesImpl.internal_() : super.internal_();
-  get runtimeType => Coordinates;
+class AudioTrackListImpl extends AudioTrackList implements js_library.JSObjectInterfacesDom {
+  AudioTrackListImpl.internal_() : super.internal_();
+  get runtimeType => AudioTrackList;
   toString() => super.toString();
 }
-patch class NetworkInformation {
-  static Type get instanceRuntimeType => NetworkInformationImpl;
+patch class AutocompleteErrorEvent {
+  static Type get instanceRuntimeType => AutocompleteErrorEventImpl;
 
 }
-class NetworkInformationImpl extends NetworkInformation implements js_library.JSObjectInterfacesDom {
-  NetworkInformationImpl.internal_() : super.internal_();
-  get runtimeType => NetworkInformation;
+class AutocompleteErrorEventImpl extends AutocompleteErrorEvent implements js_library.JSObjectInterfacesDom {
+  AutocompleteErrorEventImpl.internal_() : super.internal_();
+  get runtimeType => AutocompleteErrorEvent;
   toString() => super.toString();
 }
-patch class FocusEvent {
-  static Type get instanceRuntimeType => FocusEventImpl;
+patch class BRElement {
+  static Type get instanceRuntimeType => BRElementImpl;
 
 }
-class FocusEventImpl extends FocusEvent implements js_library.JSObjectInterfacesDom {
-  FocusEventImpl.internal_() : super.internal_();
-  get runtimeType => FocusEvent;
+class BRElementImpl extends BRElement implements js_library.JSObjectInterfacesDom {
+  BRElementImpl.internal_() : super.internal_();
+  get runtimeType => BRElement;
   toString() => super.toString();
 }
-patch class SpeechGrammarList {
-  static Type get instanceRuntimeType => SpeechGrammarListImpl;
+patch class BarProp {
+  static Type get instanceRuntimeType => BarPropImpl;
 
 }
-class SpeechGrammarListImpl extends SpeechGrammarList implements js_library.JSObjectInterfacesDom {
-  SpeechGrammarListImpl.internal_() : super.internal_();
-  get runtimeType => SpeechGrammarList;
+class BarPropImpl extends BarProp implements js_library.JSObjectInterfacesDom {
+  BarPropImpl.internal_() : super.internal_();
+  get runtimeType => BarProp;
   toString() => super.toString();
 }
-patch class Range {
-  static Type get instanceRuntimeType => RangeImpl;
+patch class BaseElement {
+  static Type get instanceRuntimeType => BaseElementImpl;
 
 }
-class RangeImpl extends Range implements js_library.JSObjectInterfacesDom {
-  RangeImpl.internal_() : super.internal_();
-  get runtimeType => Range;
+class BaseElementImpl extends BaseElement implements js_library.JSObjectInterfacesDom {
+  BaseElementImpl.internal_() : super.internal_();
+  get runtimeType => BaseElement;
   toString() => super.toString();
 }
-patch class SpeechGrammar {
-  static Type get instanceRuntimeType => SpeechGrammarImpl;
+patch class BatteryManager {
+  static Type get instanceRuntimeType => BatteryManagerImpl;
 
 }
-class SpeechGrammarImpl extends SpeechGrammar implements js_library.JSObjectInterfacesDom {
-  SpeechGrammarImpl.internal_() : super.internal_();
-  get runtimeType => SpeechGrammar;
-  toString() => super.toString();
-}
-patch class WorkerGlobalScope {
-  static Type get instanceRuntimeType => WorkerGlobalScopeImpl;
-
-}
-class WorkerGlobalScopeImpl extends WorkerGlobalScope implements js_library.JSObjectInterfacesDom {
-  WorkerGlobalScopeImpl.internal_() : super.internal_();
-  get runtimeType => WorkerGlobalScope;
-  toString() => super.toString();
-}
-patch class ScreenOrientation {
-  static Type get instanceRuntimeType => ScreenOrientationImpl;
-
-}
-class ScreenOrientationImpl extends ScreenOrientation implements js_library.JSObjectInterfacesDom {
-  ScreenOrientationImpl.internal_() : super.internal_();
-  get runtimeType => ScreenOrientation;
-  toString() => super.toString();
-}
-patch class NonElementParentNode {
-  static Type get instanceRuntimeType => NonElementParentNodeImpl;
-
-}
-class NonElementParentNodeImpl extends NonElementParentNode implements js_library.JSObjectInterfacesDom {
-  NonElementParentNodeImpl.internal_() : super.internal_();
-  get runtimeType => NonElementParentNode;
-  toString() => super.toString();
-}
-patch class TitleElement {
-  static Type get instanceRuntimeType => TitleElementImpl;
-
-}
-class TitleElementImpl extends TitleElement implements js_library.JSObjectInterfacesDom {
-  TitleElementImpl.internal_() : super.internal_();
-  get runtimeType => TitleElement;
-  toString() => super.toString();
-}
-patch class MidiConnectionEvent {
-  static Type get instanceRuntimeType => MidiConnectionEventImpl;
-
-}
-class MidiConnectionEventImpl extends MidiConnectionEvent implements js_library.JSObjectInterfacesDom {
-  MidiConnectionEventImpl.internal_() : super.internal_();
-  get runtimeType => MidiConnectionEvent;
-  toString() => super.toString();
-}
-patch class NotificationEvent {
-  static Type get instanceRuntimeType => NotificationEventImpl;
-
-}
-class NotificationEventImpl extends NotificationEvent implements js_library.JSObjectInterfacesDom {
-  NotificationEventImpl.internal_() : super.internal_();
-  get runtimeType => NotificationEvent;
+class BatteryManagerImpl extends BatteryManager implements js_library.JSObjectInterfacesDom {
+  BatteryManagerImpl.internal_() : super.internal_();
+  get runtimeType => BatteryManager;
   toString() => super.toString();
 }
 patch class BeforeInstallPromptEvent {
@@ -3471,31 +204,22 @@
   get runtimeType => BeforeInstallPromptEvent;
   toString() => super.toString();
 }
-patch class _CanvasPathMethods {
-  static Type get instanceRuntimeType => _CanvasPathMethodsImpl;
+patch class BeforeUnloadEvent {
+  static Type get instanceRuntimeType => BeforeUnloadEventImpl;
 
 }
-class _CanvasPathMethodsImpl extends _CanvasPathMethods implements js_library.JSObjectInterfacesDom {
-  _CanvasPathMethodsImpl.internal_() : super.internal_();
-  get runtimeType => _CanvasPathMethods;
+class BeforeUnloadEventImpl extends BeforeUnloadEvent implements js_library.JSObjectInterfacesDom {
+  BeforeUnloadEventImpl.internal_() : super.internal_();
+  get runtimeType => BeforeUnloadEvent;
   toString() => super.toString();
 }
-patch class UrlUtils {
-  static Type get instanceRuntimeType => UrlUtilsImpl;
+patch class Blob {
+  static Type get instanceRuntimeType => BlobImpl;
 
 }
-class UrlUtilsImpl extends UrlUtils implements js_library.JSObjectInterfacesDom {
-  UrlUtilsImpl.internal_() : super.internal_();
-  get runtimeType => UrlUtils;
-  toString() => super.toString();
-}
-patch class SelectElement {
-  static Type get instanceRuntimeType => SelectElementImpl;
-
-}
-class SelectElementImpl extends SelectElement implements js_library.JSObjectInterfacesDom {
-  SelectElementImpl.internal_() : super.internal_();
-  get runtimeType => SelectElement;
+class BlobImpl extends Blob implements js_library.JSObjectInterfacesDom {
+  BlobImpl.internal_() : super.internal_();
+  get runtimeType => Blob;
   toString() => super.toString();
 }
 patch class Bluetooth {
@@ -3516,472 +240,121 @@
   get runtimeType => BluetoothDevice;
   toString() => super.toString();
 }
-patch class ConsoleBase {
-  static Type get instanceRuntimeType => ConsoleBaseImpl;
+patch class BluetoothGattCharacteristic {
+  static Type get instanceRuntimeType => BluetoothGattCharacteristicImpl;
 
 }
-class ConsoleBaseImpl extends ConsoleBase implements js_library.JSObjectInterfacesDom {
-  ConsoleBaseImpl.internal_() : super.internal_();
-  get runtimeType => ConsoleBase;
+class BluetoothGattCharacteristicImpl extends BluetoothGattCharacteristic implements js_library.JSObjectInterfacesDom {
+  BluetoothGattCharacteristicImpl.internal_() : super.internal_();
+  get runtimeType => BluetoothGattCharacteristic;
   toString() => super.toString();
 }
-patch class AudioElement {
-  static Type get instanceRuntimeType => AudioElementImpl;
+patch class BluetoothGattRemoteServer {
+  static Type get instanceRuntimeType => BluetoothGattRemoteServerImpl;
 
 }
-class AudioElementImpl extends AudioElement implements js_library.JSObjectInterfacesDom {
-  AudioElementImpl.internal_() : super.internal_();
-  get runtimeType => AudioElement;
+class BluetoothGattRemoteServerImpl extends BluetoothGattRemoteServer implements js_library.JSObjectInterfacesDom {
+  BluetoothGattRemoteServerImpl.internal_() : super.internal_();
+  get runtimeType => BluetoothGattRemoteServer;
   toString() => super.toString();
 }
-patch class PushMessageData {
-  static Type get instanceRuntimeType => PushMessageDataImpl;
+patch class BluetoothGattService {
+  static Type get instanceRuntimeType => BluetoothGattServiceImpl;
 
 }
-class PushMessageDataImpl extends PushMessageData implements js_library.JSObjectInterfacesDom {
-  PushMessageDataImpl.internal_() : super.internal_();
-  get runtimeType => PushMessageData;
+class BluetoothGattServiceImpl extends BluetoothGattService implements js_library.JSObjectInterfacesDom {
+  BluetoothGattServiceImpl.internal_() : super.internal_();
+  get runtimeType => BluetoothGattService;
   toString() => super.toString();
 }
-patch class SpeechRecognitionEvent {
-  static Type get instanceRuntimeType => SpeechRecognitionEventImpl;
+patch class BluetoothUuid {
+  static Type get instanceRuntimeType => BluetoothUuidImpl;
 
 }
-class SpeechRecognitionEventImpl extends SpeechRecognitionEvent implements js_library.JSObjectInterfacesDom {
-  SpeechRecognitionEventImpl.internal_() : super.internal_();
-  get runtimeType => SpeechRecognitionEvent;
+class BluetoothUuidImpl extends BluetoothUuid implements js_library.JSObjectInterfacesDom {
+  BluetoothUuidImpl.internal_() : super.internal_();
+  get runtimeType => BluetoothUuid;
   toString() => super.toString();
 }
-patch class WebSocket {
-  static Type get instanceRuntimeType => WebSocketImpl;
+patch class Body {
+  static Type get instanceRuntimeType => BodyImpl;
 
 }
-class WebSocketImpl extends WebSocket implements js_library.JSObjectInterfacesDom {
-  WebSocketImpl.internal_() : super.internal_();
-  get runtimeType => WebSocket;
+class BodyImpl extends Body implements js_library.JSObjectInterfacesDom {
+  BodyImpl.internal_() : super.internal_();
+  get runtimeType => Body;
   toString() => super.toString();
 }
-patch class _XMLHttpRequestProgressEvent {
-  static Type get instanceRuntimeType => _XMLHttpRequestProgressEventImpl;
+patch class BodyElement {
+  static Type get instanceRuntimeType => BodyElementImpl;
 
 }
-class _XMLHttpRequestProgressEventImpl extends _XMLHttpRequestProgressEvent implements js_library.JSObjectInterfacesDom {
-  _XMLHttpRequestProgressEventImpl.internal_() : super.internal_();
-  get runtimeType => _XMLHttpRequestProgressEvent;
+class BodyElementImpl extends BodyElement implements js_library.JSObjectInterfacesDom {
+  BodyElementImpl.internal_() : super.internal_();
+  get runtimeType => BodyElement;
   toString() => super.toString();
 }
-patch class Location {
-  static Type get instanceRuntimeType => LocationImpl;
+patch class ButtonElement {
+  static Type get instanceRuntimeType => ButtonElementImpl;
 
 }
-class LocationImpl extends Location implements js_library.JSObjectInterfacesDom {
-  LocationImpl.internal_() : super.internal_();
-  get runtimeType => Location;
+class ButtonElementImpl extends ButtonElement implements js_library.JSObjectInterfacesDom {
+  ButtonElementImpl.internal_() : super.internal_();
+  get runtimeType => ButtonElement;
   toString() => super.toString();
 }
-patch class PerformanceEntry {
-  static Type get instanceRuntimeType => PerformanceEntryImpl;
+patch class CDataSection {
+  static Type get instanceRuntimeType => CDataSectionImpl;
 
 }
-class PerformanceEntryImpl extends PerformanceEntry implements js_library.JSObjectInterfacesDom {
-  PerformanceEntryImpl.internal_() : super.internal_();
-  get runtimeType => PerformanceEntry;
+class CDataSectionImpl extends CDataSection implements js_library.JSObjectInterfacesDom {
+  CDataSectionImpl.internal_() : super.internal_();
+  get runtimeType => CDataSection;
   toString() => super.toString();
 }
-patch class Client {
-  static Type get instanceRuntimeType => ClientImpl;
+patch class CacheStorage {
+  static Type get instanceRuntimeType => CacheStorageImpl;
 
 }
-class ClientImpl extends Client implements js_library.JSObjectInterfacesDom {
-  ClientImpl.internal_() : super.internal_();
-  get runtimeType => Client;
+class CacheStorageImpl extends CacheStorage implements js_library.JSObjectInterfacesDom {
+  CacheStorageImpl.internal_() : super.internal_();
+  get runtimeType => CacheStorage;
   toString() => super.toString();
 }
-patch class _Cache {
-  static Type get instanceRuntimeType => _CacheImpl;
+patch class CanvasElement {
+  static Type get instanceRuntimeType => CanvasElementImpl;
 
 }
-class _CacheImpl extends _Cache implements js_library.JSObjectInterfacesDom {
-  _CacheImpl.internal_() : super.internal_();
-  get runtimeType => _Cache;
+class CanvasElementImpl extends CanvasElement implements js_library.JSObjectInterfacesDom {
+  CanvasElementImpl.internal_() : super.internal_();
+  get runtimeType => CanvasElement;
   toString() => super.toString();
 }
-patch class MimeType {
-  static Type get instanceRuntimeType => MimeTypeImpl;
+patch class CanvasGradient {
+  static Type get instanceRuntimeType => CanvasGradientImpl;
 
 }
-class MimeTypeImpl extends MimeType implements js_library.JSObjectInterfacesDom {
-  MimeTypeImpl.internal_() : super.internal_();
-  get runtimeType => MimeType;
+class CanvasGradientImpl extends CanvasGradient implements js_library.JSObjectInterfacesDom {
+  CanvasGradientImpl.internal_() : super.internal_();
+  get runtimeType => CanvasGradient;
   toString() => super.toString();
 }
-patch class MidiOutputMap {
-  static Type get instanceRuntimeType => MidiOutputMapImpl;
+patch class CanvasPattern {
+  static Type get instanceRuntimeType => CanvasPatternImpl;
 
 }
-class MidiOutputMapImpl extends MidiOutputMap implements js_library.JSObjectInterfacesDom {
-  MidiOutputMapImpl.internal_() : super.internal_();
-  get runtimeType => MidiOutputMap;
+class CanvasPatternImpl extends CanvasPattern implements js_library.JSObjectInterfacesDom {
+  CanvasPatternImpl.internal_() : super.internal_();
+  get runtimeType => CanvasPattern;
   toString() => super.toString();
 }
-patch class PointerEvent {
-  static Type get instanceRuntimeType => PointerEventImpl;
+patch class CanvasRenderingContext2D {
+  static Type get instanceRuntimeType => CanvasRenderingContext2DImpl;
 
 }
-class PointerEventImpl extends PointerEvent implements js_library.JSObjectInterfacesDom {
-  PointerEventImpl.internal_() : super.internal_();
-  get runtimeType => PointerEvent;
-  toString() => super.toString();
-}
-patch class ChildNode {
-  static Type get instanceRuntimeType => ChildNodeImpl;
-
-}
-class ChildNodeImpl extends ChildNode implements js_library.JSObjectInterfacesDom {
-  ChildNodeImpl.internal_() : super.internal_();
-  get runtimeType => ChildNode;
-  toString() => super.toString();
-}
-patch class Geolocation {
-  static Type get instanceRuntimeType => GeolocationImpl;
-
-}
-class GeolocationImpl extends Geolocation implements js_library.JSObjectInterfacesDom {
-  GeolocationImpl.internal_() : super.internal_();
-  get runtimeType => Geolocation;
-  toString() => super.toString();
-}
-patch class _CssRuleList {
-  static Type get instanceRuntimeType => _CssRuleListImpl;
-
-}
-class _CssRuleListImpl extends _CssRuleList implements js_library.JSObjectInterfacesDom {
-  _CssRuleListImpl.internal_() : super.internal_();
-  get runtimeType => _CssRuleList;
-  toString() => super.toString();
-}
-patch class MediaKeyEvent {
-  static Type get instanceRuntimeType => MediaKeyEventImpl;
-
-}
-class MediaKeyEventImpl extends MediaKeyEvent implements js_library.JSObjectInterfacesDom {
-  MediaKeyEventImpl.internal_() : super.internal_();
-  get runtimeType => MediaKeyEvent;
-  toString() => super.toString();
-}
-patch class CompositorWorker {
-  static Type get instanceRuntimeType => CompositorWorkerImpl;
-
-}
-class CompositorWorkerImpl extends CompositorWorker implements js_library.JSObjectInterfacesDom {
-  CompositorWorkerImpl.internal_() : super.internal_();
-  get runtimeType => CompositorWorker;
-  toString() => super.toString();
-}
-patch class ProgressElement {
-  static Type get instanceRuntimeType => ProgressElementImpl;
-
-}
-class ProgressElementImpl extends ProgressElement implements js_library.JSObjectInterfacesDom {
-  ProgressElementImpl.internal_() : super.internal_();
-  get runtimeType => ProgressElement;
-  toString() => super.toString();
-}
-patch class SharedArrayBuffer {
-  static Type get instanceRuntimeType => SharedArrayBufferImpl;
-
-}
-class SharedArrayBufferImpl extends SharedArrayBuffer implements js_library.JSObjectInterfacesDom {
-  SharedArrayBufferImpl.internal_() : super.internal_();
-  get runtimeType => SharedArrayBuffer;
-  toString() => super.toString();
-}
-patch class CrossOriginConnectEvent {
-  static Type get instanceRuntimeType => CrossOriginConnectEventImpl;
-
-}
-class CrossOriginConnectEventImpl extends CrossOriginConnectEvent implements js_library.JSObjectInterfacesDom {
-  CrossOriginConnectEventImpl.internal_() : super.internal_();
-  get runtimeType => CrossOriginConnectEvent;
-  toString() => super.toString();
-}
-patch class BeforeUnloadEvent {
-  static Type get instanceRuntimeType => BeforeUnloadEventImpl;
-
-}
-class BeforeUnloadEventImpl extends BeforeUnloadEvent implements js_library.JSObjectInterfacesDom {
-  BeforeUnloadEventImpl.internal_() : super.internal_();
-  get runtimeType => BeforeUnloadEvent;
-  toString() => super.toString();
-}
-patch class DataTransferItem {
-  static Type get instanceRuntimeType => DataTransferItemImpl;
-
-}
-class DataTransferItemImpl extends DataTransferItem implements js_library.JSObjectInterfacesDom {
-  DataTransferItemImpl.internal_() : super.internal_();
-  get runtimeType => DataTransferItem;
-  toString() => super.toString();
-}
-patch class _HTMLAllCollection {
-  static Type get instanceRuntimeType => _HTMLAllCollectionImpl;
-
-}
-class _HTMLAllCollectionImpl extends _HTMLAllCollection implements js_library.JSObjectInterfacesDom {
-  _HTMLAllCollectionImpl.internal_() : super.internal_();
-  get runtimeType => _HTMLAllCollection;
-  toString() => super.toString();
-}
-patch class ServicePortCollection {
-  static Type get instanceRuntimeType => ServicePortCollectionImpl;
-
-}
-class ServicePortCollectionImpl extends ServicePortCollection implements js_library.JSObjectInterfacesDom {
-  ServicePortCollectionImpl.internal_() : super.internal_();
-  get runtimeType => ServicePortCollection;
-  toString() => super.toString();
-}
-patch class KeygenElement {
-  static Type get instanceRuntimeType => KeygenElementImpl;
-
-}
-class KeygenElementImpl extends KeygenElement implements js_library.JSObjectInterfacesDom {
-  KeygenElementImpl.internal_() : super.internal_();
-  get runtimeType => KeygenElement;
-  toString() => super.toString();
-}
-patch class CryptoKey {
-  static Type get instanceRuntimeType => CryptoKeyImpl;
-
-}
-class CryptoKeyImpl extends CryptoKey implements js_library.JSObjectInterfacesDom {
-  CryptoKeyImpl.internal_() : super.internal_();
-  get runtimeType => CryptoKey;
-  toString() => super.toString();
-}
-patch class CssKeyframesRule {
-  static Type get instanceRuntimeType => CssKeyframesRuleImpl;
-
-}
-class CssKeyframesRuleImpl extends CssKeyframesRule implements js_library.JSObjectInterfacesDom {
-  CssKeyframesRuleImpl.internal_() : super.internal_();
-  get runtimeType => CssKeyframesRule;
-  toString() => super.toString();
-}
-patch class _HTMLMarqueeElement {
-  static Type get instanceRuntimeType => _HTMLMarqueeElementImpl;
-
-}
-class _HTMLMarqueeElementImpl extends _HTMLMarqueeElement implements js_library.JSObjectInterfacesDom {
-  _HTMLMarqueeElementImpl.internal_() : super.internal_();
-  get runtimeType => _HTMLMarqueeElement;
-  toString() => super.toString();
-}
-patch class TextEvent {
-  static Type get instanceRuntimeType => TextEventImpl;
-
-}
-class TextEventImpl extends TextEvent implements js_library.JSObjectInterfacesDom {
-  TextEventImpl.internal_() : super.internal_();
-  get runtimeType => TextEvent;
-  toString() => super.toString();
-}
-patch class _EntrySync {
-  static Type get instanceRuntimeType => _EntrySyncImpl;
-
-}
-class _EntrySyncImpl extends _EntrySync implements js_library.JSObjectInterfacesDom {
-  _EntrySyncImpl.internal_() : super.internal_();
-  get runtimeType => _EntrySync;
-  toString() => super.toString();
-}
-patch class GeofencingEvent {
-  static Type get instanceRuntimeType => GeofencingEventImpl;
-
-}
-class GeofencingEventImpl extends GeofencingEvent implements js_library.JSObjectInterfacesDom {
-  GeofencingEventImpl.internal_() : super.internal_();
-  get runtimeType => GeofencingEvent;
-  toString() => super.toString();
-}
-patch class MediaKeys {
-  static Type get instanceRuntimeType => MediaKeysImpl;
-
-}
-class MediaKeysImpl extends MediaKeys implements js_library.JSObjectInterfacesDom {
-  MediaKeysImpl.internal_() : super.internal_();
-  get runtimeType => MediaKeys;
-  toString() => super.toString();
-}
-patch class DomPointReadOnly {
-  static Type get instanceRuntimeType => DomPointReadOnlyImpl;
-
-}
-class DomPointReadOnlyImpl extends DomPointReadOnly implements js_library.JSObjectInterfacesDom {
-  DomPointReadOnlyImpl.internal_() : super.internal_();
-  get runtimeType => DomPointReadOnly;
-  toString() => super.toString();
-}
-patch class WindowBase64 {
-  static Type get instanceRuntimeType => WindowBase64Impl;
-
-}
-class WindowBase64Impl extends WindowBase64 implements js_library.JSObjectInterfacesDom {
-  WindowBase64Impl.internal_() : super.internal_();
-  get runtimeType => WindowBase64;
-  toString() => super.toString();
-}
-patch class SpeechRecognitionError {
-  static Type get instanceRuntimeType => SpeechRecognitionErrorImpl;
-
-}
-class SpeechRecognitionErrorImpl extends SpeechRecognitionError implements js_library.JSObjectInterfacesDom {
-  SpeechRecognitionErrorImpl.internal_() : super.internal_();
-  get runtimeType => SpeechRecognitionError;
-  toString() => super.toString();
-}
-patch class MidiOutput {
-  static Type get instanceRuntimeType => MidiOutputImpl;
-
-}
-class MidiOutputImpl extends MidiOutput implements js_library.JSObjectInterfacesDom {
-  MidiOutputImpl.internal_() : super.internal_();
-  get runtimeType => MidiOutput;
-  toString() => super.toString();
-}
-patch class EventSource {
-  static Type get instanceRuntimeType => EventSourceImpl;
-
-}
-class EventSourceImpl extends EventSource implements js_library.JSObjectInterfacesDom {
-  EventSourceImpl.internal_() : super.internal_();
-  get runtimeType => EventSource;
-  toString() => super.toString();
-}
-patch class DeviceOrientationEvent {
-  static Type get instanceRuntimeType => DeviceOrientationEventImpl;
-
-}
-class DeviceOrientationEventImpl extends DeviceOrientationEvent implements js_library.JSObjectInterfacesDom {
-  DeviceOrientationEventImpl.internal_() : super.internal_();
-  get runtimeType => DeviceOrientationEvent;
-  toString() => super.toString();
-}
-patch class DirectoryEntry {
-  static Type get instanceRuntimeType => DirectoryEntryImpl;
-
-}
-class DirectoryEntryImpl extends DirectoryEntry implements js_library.JSObjectInterfacesDom {
-  DirectoryEntryImpl.internal_() : super.internal_();
-  get runtimeType => DirectoryEntry;
-  toString() => super.toString();
-}
-patch class ShadowElement {
-  static Type get instanceRuntimeType => ShadowElementImpl;
-
-}
-class ShadowElementImpl extends ShadowElement implements js_library.JSObjectInterfacesDom {
-  ShadowElementImpl.internal_() : super.internal_();
-  get runtimeType => ShadowElement;
-  toString() => super.toString();
-}
-patch class AppBannerPromptResult {
-  static Type get instanceRuntimeType => AppBannerPromptResultImpl;
-
-}
-class AppBannerPromptResultImpl extends AppBannerPromptResult implements js_library.JSObjectInterfacesDom {
-  AppBannerPromptResultImpl.internal_() : super.internal_();
-  get runtimeType => AppBannerPromptResult;
-  toString() => super.toString();
-}
-patch class Blob {
-  static Type get instanceRuntimeType => BlobImpl;
-
-}
-class BlobImpl extends Blob implements js_library.JSObjectInterfacesDom {
-  BlobImpl.internal_() : super.internal_();
-  get runtimeType => Blob;
-  toString() => super.toString();
-}
-patch class VttCue {
-  static Type get instanceRuntimeType => VttCueImpl;
-
-}
-class VttCueImpl extends VttCue implements js_library.JSObjectInterfacesDom {
-  VttCueImpl.internal_() : super.internal_();
-  get runtimeType => VttCue;
-  toString() => super.toString();
-}
-patch class PopStateEvent {
-  static Type get instanceRuntimeType => PopStateEventImpl;
-
-}
-class PopStateEventImpl extends PopStateEvent implements js_library.JSObjectInterfacesDom {
-  PopStateEventImpl.internal_() : super.internal_();
-  get runtimeType => PopStateEvent;
-  toString() => super.toString();
-}
-patch class PushSubscription {
-  static Type get instanceRuntimeType => PushSubscriptionImpl;
-
-}
-class PushSubscriptionImpl extends PushSubscription implements js_library.JSObjectInterfacesDom {
-  PushSubscriptionImpl.internal_() : super.internal_();
-  get runtimeType => PushSubscription;
-  toString() => super.toString();
-}
-patch class UrlUtilsReadOnly {
-  static Type get instanceRuntimeType => UrlUtilsReadOnlyImpl;
-
-}
-class UrlUtilsReadOnlyImpl extends UrlUtilsReadOnly implements js_library.JSObjectInterfacesDom {
-  UrlUtilsReadOnlyImpl.internal_() : super.internal_();
-  get runtimeType => UrlUtilsReadOnly;
-  toString() => super.toString();
-}
-patch class MediaError {
-  static Type get instanceRuntimeType => MediaErrorImpl;
-
-}
-class MediaErrorImpl extends MediaError implements js_library.JSObjectInterfacesDom {
-  MediaErrorImpl.internal_() : super.internal_();
-  get runtimeType => MediaError;
-  toString() => super.toString();
-}
-patch class SourceBufferList {
-  static Type get instanceRuntimeType => SourceBufferListImpl;
-
-}
-class SourceBufferListImpl extends SourceBufferList implements js_library.JSObjectInterfacesDom {
-  SourceBufferListImpl.internal_() : super.internal_();
-  get runtimeType => SourceBufferList;
-  toString() => super.toString();
-}
-patch class AnimationEffectReadOnly {
-  static Type get instanceRuntimeType => AnimationEffectReadOnlyImpl;
-
-}
-class AnimationEffectReadOnlyImpl extends AnimationEffectReadOnly implements js_library.JSObjectInterfacesDom {
-  AnimationEffectReadOnlyImpl.internal_() : super.internal_();
-  get runtimeType => AnimationEffectReadOnly;
-  toString() => super.toString();
-}
-patch class PerformanceResourceTiming {
-  static Type get instanceRuntimeType => PerformanceResourceTimingImpl;
-
-}
-class PerformanceResourceTimingImpl extends PerformanceResourceTiming implements js_library.JSObjectInterfacesDom {
-  PerformanceResourceTimingImpl.internal_() : super.internal_();
-  get runtimeType => PerformanceResourceTiming;
-  toString() => super.toString();
-}
-patch class GeofencingRegion {
-  static Type get instanceRuntimeType => GeofencingRegionImpl;
-
-}
-class GeofencingRegionImpl extends GeofencingRegion implements js_library.JSObjectInterfacesDom {
-  GeofencingRegionImpl.internal_() : super.internal_();
-  get runtimeType => GeofencingRegion;
+class CanvasRenderingContext2DImpl extends CanvasRenderingContext2D implements js_library.JSObjectInterfacesDom {
+  CanvasRenderingContext2DImpl.internal_() : super.internal_();
+  get runtimeType => CanvasRenderingContext2D;
   toString() => super.toString();
 }
 patch class CharacterData {
@@ -3993,6 +366,204 @@
   get runtimeType => CharacterData;
   toString() => super.toString();
 }
+patch class ChildNode {
+  static Type get instanceRuntimeType => ChildNodeImpl;
+
+}
+class ChildNodeImpl extends ChildNode implements js_library.JSObjectInterfacesDom {
+  ChildNodeImpl.internal_() : super.internal_();
+  get runtimeType => ChildNode;
+  toString() => super.toString();
+}
+patch class ChromiumValuebuffer {
+  static Type get instanceRuntimeType => ChromiumValuebufferImpl;
+
+}
+class ChromiumValuebufferImpl extends ChromiumValuebuffer implements js_library.JSObjectInterfacesDom {
+  ChromiumValuebufferImpl.internal_() : super.internal_();
+  get runtimeType => ChromiumValuebuffer;
+  toString() => super.toString();
+}
+patch class CircularGeofencingRegion {
+  static Type get instanceRuntimeType => CircularGeofencingRegionImpl;
+
+}
+class CircularGeofencingRegionImpl extends CircularGeofencingRegion implements js_library.JSObjectInterfacesDom {
+  CircularGeofencingRegionImpl.internal_() : super.internal_();
+  get runtimeType => CircularGeofencingRegion;
+  toString() => super.toString();
+}
+patch class Client {
+  static Type get instanceRuntimeType => ClientImpl;
+
+}
+class ClientImpl extends Client implements js_library.JSObjectInterfacesDom {
+  ClientImpl.internal_() : super.internal_();
+  get runtimeType => Client;
+  toString() => super.toString();
+}
+patch class Clients {
+  static Type get instanceRuntimeType => ClientsImpl;
+
+}
+class ClientsImpl extends Clients implements js_library.JSObjectInterfacesDom {
+  ClientsImpl.internal_() : super.internal_();
+  get runtimeType => Clients;
+  toString() => super.toString();
+}
+patch class ClipboardEvent {
+  static Type get instanceRuntimeType => ClipboardEventImpl;
+
+}
+class ClipboardEventImpl extends ClipboardEvent implements js_library.JSObjectInterfacesDom {
+  ClipboardEventImpl.internal_() : super.internal_();
+  get runtimeType => ClipboardEvent;
+  toString() => super.toString();
+}
+patch class CloseEvent {
+  static Type get instanceRuntimeType => CloseEventImpl;
+
+}
+class CloseEventImpl extends CloseEvent implements js_library.JSObjectInterfacesDom {
+  CloseEventImpl.internal_() : super.internal_();
+  get runtimeType => CloseEvent;
+  toString() => super.toString();
+}
+patch class Comment {
+  static Type get instanceRuntimeType => CommentImpl;
+
+}
+class CommentImpl extends Comment implements js_library.JSObjectInterfacesDom {
+  CommentImpl.internal_() : super.internal_();
+  get runtimeType => Comment;
+  toString() => super.toString();
+}
+patch class CompositionEvent {
+  static Type get instanceRuntimeType => CompositionEventImpl;
+
+}
+class CompositionEventImpl extends CompositionEvent implements js_library.JSObjectInterfacesDom {
+  CompositionEventImpl.internal_() : super.internal_();
+  get runtimeType => CompositionEvent;
+  toString() => super.toString();
+}
+patch class CompositorProxy {
+  static Type get instanceRuntimeType => CompositorProxyImpl;
+
+}
+class CompositorProxyImpl extends CompositorProxy implements js_library.JSObjectInterfacesDom {
+  CompositorProxyImpl.internal_() : super.internal_();
+  get runtimeType => CompositorProxy;
+  toString() => super.toString();
+}
+patch class CompositorWorker {
+  static Type get instanceRuntimeType => CompositorWorkerImpl;
+
+}
+class CompositorWorkerImpl extends CompositorWorker implements js_library.JSObjectInterfacesDom {
+  CompositorWorkerImpl.internal_() : super.internal_();
+  get runtimeType => CompositorWorker;
+  toString() => super.toString();
+}
+patch class CompositorWorkerGlobalScope {
+  static Type get instanceRuntimeType => CompositorWorkerGlobalScopeImpl;
+
+}
+class CompositorWorkerGlobalScopeImpl extends CompositorWorkerGlobalScope implements js_library.JSObjectInterfacesDom {
+  CompositorWorkerGlobalScopeImpl.internal_() : super.internal_();
+  get runtimeType => CompositorWorkerGlobalScope;
+  toString() => super.toString();
+}
+patch class Console {
+  static Type get instanceRuntimeType => ConsoleImpl;
+
+}
+class ConsoleImpl extends Console implements js_library.JSObjectInterfacesDom {
+  ConsoleImpl.internal_() : super.internal_();
+  get runtimeType => Console;
+  toString() => super.toString();
+}
+patch class ConsoleBase {
+  static Type get instanceRuntimeType => ConsoleBaseImpl;
+
+}
+class ConsoleBaseImpl extends ConsoleBase implements js_library.JSObjectInterfacesDom {
+  ConsoleBaseImpl.internal_() : super.internal_();
+  get runtimeType => ConsoleBase;
+  toString() => super.toString();
+}
+patch class ContentElement {
+  static Type get instanceRuntimeType => ContentElementImpl;
+
+}
+class ContentElementImpl extends ContentElement implements js_library.JSObjectInterfacesDom {
+  ContentElementImpl.internal_() : super.internal_();
+  get runtimeType => ContentElement;
+  toString() => super.toString();
+}
+patch class Coordinates {
+  static Type get instanceRuntimeType => CoordinatesImpl;
+
+}
+class CoordinatesImpl extends Coordinates implements js_library.JSObjectInterfacesDom {
+  CoordinatesImpl.internal_() : super.internal_();
+  get runtimeType => Coordinates;
+  toString() => super.toString();
+}
+patch class Credential {
+  static Type get instanceRuntimeType => CredentialImpl;
+
+}
+class CredentialImpl extends Credential implements js_library.JSObjectInterfacesDom {
+  CredentialImpl.internal_() : super.internal_();
+  get runtimeType => Credential;
+  toString() => super.toString();
+}
+patch class CredentialsContainer {
+  static Type get instanceRuntimeType => CredentialsContainerImpl;
+
+}
+class CredentialsContainerImpl extends CredentialsContainer implements js_library.JSObjectInterfacesDom {
+  CredentialsContainerImpl.internal_() : super.internal_();
+  get runtimeType => CredentialsContainer;
+  toString() => super.toString();
+}
+patch class CrossOriginConnectEvent {
+  static Type get instanceRuntimeType => CrossOriginConnectEventImpl;
+
+}
+class CrossOriginConnectEventImpl extends CrossOriginConnectEvent implements js_library.JSObjectInterfacesDom {
+  CrossOriginConnectEventImpl.internal_() : super.internal_();
+  get runtimeType => CrossOriginConnectEvent;
+  toString() => super.toString();
+}
+patch class CrossOriginServiceWorkerClient {
+  static Type get instanceRuntimeType => CrossOriginServiceWorkerClientImpl;
+
+}
+class CrossOriginServiceWorkerClientImpl extends CrossOriginServiceWorkerClient implements js_library.JSObjectInterfacesDom {
+  CrossOriginServiceWorkerClientImpl.internal_() : super.internal_();
+  get runtimeType => CrossOriginServiceWorkerClient;
+  toString() => super.toString();
+}
+patch class Crypto {
+  static Type get instanceRuntimeType => CryptoImpl;
+
+}
+class CryptoImpl extends Crypto implements js_library.JSObjectInterfacesDom {
+  CryptoImpl.internal_() : super.internal_();
+  get runtimeType => Crypto;
+  toString() => super.toString();
+}
+patch class CryptoKey {
+  static Type get instanceRuntimeType => CryptoKeyImpl;
+
+}
+class CryptoKeyImpl extends CryptoKey implements js_library.JSObjectInterfacesDom {
+  CryptoKeyImpl.internal_() : super.internal_();
+  get runtimeType => CryptoKey;
+  toString() => super.toString();
+}
 patch class Css {
   static Type get instanceRuntimeType => CssImpl;
 
@@ -4002,22 +573,526 @@
   get runtimeType => Css;
   toString() => super.toString();
 }
-patch class MidiInput {
-  static Type get instanceRuntimeType => MidiInputImpl;
+patch class CssCharsetRule {
+  static Type get instanceRuntimeType => CssCharsetRuleImpl;
 
 }
-class MidiInputImpl extends MidiInput implements js_library.JSObjectInterfacesDom {
-  MidiInputImpl.internal_() : super.internal_();
-  get runtimeType => MidiInput;
+class CssCharsetRuleImpl extends CssCharsetRule implements js_library.JSObjectInterfacesDom {
+  CssCharsetRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssCharsetRule;
   toString() => super.toString();
 }
-patch class ServicePortConnectEvent {
-  static Type get instanceRuntimeType => ServicePortConnectEventImpl;
+patch class CssFontFaceRule {
+  static Type get instanceRuntimeType => CssFontFaceRuleImpl;
 
 }
-class ServicePortConnectEventImpl extends ServicePortConnectEvent implements js_library.JSObjectInterfacesDom {
-  ServicePortConnectEventImpl.internal_() : super.internal_();
-  get runtimeType => ServicePortConnectEvent;
+class CssFontFaceRuleImpl extends CssFontFaceRule implements js_library.JSObjectInterfacesDom {
+  CssFontFaceRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssFontFaceRule;
+  toString() => super.toString();
+}
+patch class CssGroupingRule {
+  static Type get instanceRuntimeType => CssGroupingRuleImpl;
+
+}
+class CssGroupingRuleImpl extends CssGroupingRule implements js_library.JSObjectInterfacesDom {
+  CssGroupingRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssGroupingRule;
+  toString() => super.toString();
+}
+patch class CssImportRule {
+  static Type get instanceRuntimeType => CssImportRuleImpl;
+
+}
+class CssImportRuleImpl extends CssImportRule implements js_library.JSObjectInterfacesDom {
+  CssImportRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssImportRule;
+  toString() => super.toString();
+}
+patch class CssKeyframeRule {
+  static Type get instanceRuntimeType => CssKeyframeRuleImpl;
+
+}
+class CssKeyframeRuleImpl extends CssKeyframeRule implements js_library.JSObjectInterfacesDom {
+  CssKeyframeRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssKeyframeRule;
+  toString() => super.toString();
+}
+patch class CssKeyframesRule {
+  static Type get instanceRuntimeType => CssKeyframesRuleImpl;
+
+}
+class CssKeyframesRuleImpl extends CssKeyframesRule implements js_library.JSObjectInterfacesDom {
+  CssKeyframesRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssKeyframesRule;
+  toString() => super.toString();
+}
+patch class CssMediaRule {
+  static Type get instanceRuntimeType => CssMediaRuleImpl;
+
+}
+class CssMediaRuleImpl extends CssMediaRule implements js_library.JSObjectInterfacesDom {
+  CssMediaRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssMediaRule;
+  toString() => super.toString();
+}
+patch class CssPageRule {
+  static Type get instanceRuntimeType => CssPageRuleImpl;
+
+}
+class CssPageRuleImpl extends CssPageRule implements js_library.JSObjectInterfacesDom {
+  CssPageRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssPageRule;
+  toString() => super.toString();
+}
+patch class CssRule {
+  static Type get instanceRuntimeType => CssRuleImpl;
+
+}
+class CssRuleImpl extends CssRule implements js_library.JSObjectInterfacesDom {
+  CssRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssRule;
+  toString() => super.toString();
+}
+patch class CssStyleDeclaration {
+  static Type get instanceRuntimeType => CssStyleDeclarationImpl;
+
+}
+class CssStyleDeclarationImpl extends CssStyleDeclaration implements js_library.JSObjectInterfacesDom {
+  CssStyleDeclarationImpl.internal_() : super.internal_();
+  get runtimeType => CssStyleDeclaration;
+  toString() => super.toString();
+}
+patch class CssStyleRule {
+  static Type get instanceRuntimeType => CssStyleRuleImpl;
+
+}
+class CssStyleRuleImpl extends CssStyleRule implements js_library.JSObjectInterfacesDom {
+  CssStyleRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssStyleRule;
+  toString() => super.toString();
+}
+patch class CssStyleSheet {
+  static Type get instanceRuntimeType => CssStyleSheetImpl;
+
+}
+class CssStyleSheetImpl extends CssStyleSheet implements js_library.JSObjectInterfacesDom {
+  CssStyleSheetImpl.internal_() : super.internal_();
+  get runtimeType => CssStyleSheet;
+  toString() => super.toString();
+}
+patch class CssSupportsRule {
+  static Type get instanceRuntimeType => CssSupportsRuleImpl;
+
+}
+class CssSupportsRuleImpl extends CssSupportsRule implements js_library.JSObjectInterfacesDom {
+  CssSupportsRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssSupportsRule;
+  toString() => super.toString();
+}
+patch class CssViewportRule {
+  static Type get instanceRuntimeType => CssViewportRuleImpl;
+
+}
+class CssViewportRuleImpl extends CssViewportRule implements js_library.JSObjectInterfacesDom {
+  CssViewportRuleImpl.internal_() : super.internal_();
+  get runtimeType => CssViewportRule;
+  toString() => super.toString();
+}
+patch class CustomEvent {
+  static Type get instanceRuntimeType => CustomEventImpl;
+
+}
+class CustomEventImpl extends CustomEvent implements js_library.JSObjectInterfacesDom {
+  CustomEventImpl.internal_() : super.internal_();
+  get runtimeType => CustomEvent;
+  toString() => super.toString();
+}
+patch class DListElement {
+  static Type get instanceRuntimeType => DListElementImpl;
+
+}
+class DListElementImpl extends DListElement implements js_library.JSObjectInterfacesDom {
+  DListElementImpl.internal_() : super.internal_();
+  get runtimeType => DListElement;
+  toString() => super.toString();
+}
+patch class DataListElement {
+  static Type get instanceRuntimeType => DataListElementImpl;
+
+}
+class DataListElementImpl extends DataListElement implements js_library.JSObjectInterfacesDom {
+  DataListElementImpl.internal_() : super.internal_();
+  get runtimeType => DataListElement;
+  toString() => super.toString();
+}
+patch class DataTransfer {
+  static Type get instanceRuntimeType => DataTransferImpl;
+
+}
+class DataTransferImpl extends DataTransfer implements js_library.JSObjectInterfacesDom {
+  DataTransferImpl.internal_() : super.internal_();
+  get runtimeType => DataTransfer;
+  toString() => super.toString();
+}
+patch class DataTransferItem {
+  static Type get instanceRuntimeType => DataTransferItemImpl;
+
+}
+class DataTransferItemImpl extends DataTransferItem implements js_library.JSObjectInterfacesDom {
+  DataTransferItemImpl.internal_() : super.internal_();
+  get runtimeType => DataTransferItem;
+  toString() => super.toString();
+}
+patch class DataTransferItemList {
+  static Type get instanceRuntimeType => DataTransferItemListImpl;
+
+}
+class DataTransferItemListImpl extends DataTransferItemList implements js_library.JSObjectInterfacesDom {
+  DataTransferItemListImpl.internal_() : super.internal_();
+  get runtimeType => DataTransferItemList;
+  toString() => super.toString();
+}
+patch class DedicatedWorkerGlobalScope {
+  static Type get instanceRuntimeType => DedicatedWorkerGlobalScopeImpl;
+
+}
+class DedicatedWorkerGlobalScopeImpl extends DedicatedWorkerGlobalScope implements js_library.JSObjectInterfacesDom {
+  DedicatedWorkerGlobalScopeImpl.internal_() : super.internal_();
+  get runtimeType => DedicatedWorkerGlobalScope;
+  toString() => super.toString();
+}
+patch class DefaultSessionStartEvent {
+  static Type get instanceRuntimeType => DefaultSessionStartEventImpl;
+
+}
+class DefaultSessionStartEventImpl extends DefaultSessionStartEvent implements js_library.JSObjectInterfacesDom {
+  DefaultSessionStartEventImpl.internal_() : super.internal_();
+  get runtimeType => DefaultSessionStartEvent;
+  toString() => super.toString();
+}
+patch class DeprecatedStorageInfo {
+  static Type get instanceRuntimeType => DeprecatedStorageInfoImpl;
+
+}
+class DeprecatedStorageInfoImpl extends DeprecatedStorageInfo implements js_library.JSObjectInterfacesDom {
+  DeprecatedStorageInfoImpl.internal_() : super.internal_();
+  get runtimeType => DeprecatedStorageInfo;
+  toString() => super.toString();
+}
+patch class DeprecatedStorageQuota {
+  static Type get instanceRuntimeType => DeprecatedStorageQuotaImpl;
+
+}
+class DeprecatedStorageQuotaImpl extends DeprecatedStorageQuota implements js_library.JSObjectInterfacesDom {
+  DeprecatedStorageQuotaImpl.internal_() : super.internal_();
+  get runtimeType => DeprecatedStorageQuota;
+  toString() => super.toString();
+}
+patch class DetailsElement {
+  static Type get instanceRuntimeType => DetailsElementImpl;
+
+}
+class DetailsElementImpl extends DetailsElement implements js_library.JSObjectInterfacesDom {
+  DetailsElementImpl.internal_() : super.internal_();
+  get runtimeType => DetailsElement;
+  toString() => super.toString();
+}
+patch class DeviceAcceleration {
+  static Type get instanceRuntimeType => DeviceAccelerationImpl;
+
+}
+class DeviceAccelerationImpl extends DeviceAcceleration implements js_library.JSObjectInterfacesDom {
+  DeviceAccelerationImpl.internal_() : super.internal_();
+  get runtimeType => DeviceAcceleration;
+  toString() => super.toString();
+}
+patch class DeviceLightEvent {
+  static Type get instanceRuntimeType => DeviceLightEventImpl;
+
+}
+class DeviceLightEventImpl extends DeviceLightEvent implements js_library.JSObjectInterfacesDom {
+  DeviceLightEventImpl.internal_() : super.internal_();
+  get runtimeType => DeviceLightEvent;
+  toString() => super.toString();
+}
+patch class DeviceMotionEvent {
+  static Type get instanceRuntimeType => DeviceMotionEventImpl;
+
+}
+class DeviceMotionEventImpl extends DeviceMotionEvent implements js_library.JSObjectInterfacesDom {
+  DeviceMotionEventImpl.internal_() : super.internal_();
+  get runtimeType => DeviceMotionEvent;
+  toString() => super.toString();
+}
+patch class DeviceOrientationEvent {
+  static Type get instanceRuntimeType => DeviceOrientationEventImpl;
+
+}
+class DeviceOrientationEventImpl extends DeviceOrientationEvent implements js_library.JSObjectInterfacesDom {
+  DeviceOrientationEventImpl.internal_() : super.internal_();
+  get runtimeType => DeviceOrientationEvent;
+  toString() => super.toString();
+}
+patch class DeviceRotationRate {
+  static Type get instanceRuntimeType => DeviceRotationRateImpl;
+
+}
+class DeviceRotationRateImpl extends DeviceRotationRate implements js_library.JSObjectInterfacesDom {
+  DeviceRotationRateImpl.internal_() : super.internal_();
+  get runtimeType => DeviceRotationRate;
+  toString() => super.toString();
+}
+patch class DialogElement {
+  static Type get instanceRuntimeType => DialogElementImpl;
+
+}
+class DialogElementImpl extends DialogElement implements js_library.JSObjectInterfacesDom {
+  DialogElementImpl.internal_() : super.internal_();
+  get runtimeType => DialogElement;
+  toString() => super.toString();
+}
+patch class DirectoryEntry {
+  static Type get instanceRuntimeType => DirectoryEntryImpl;
+
+}
+class DirectoryEntryImpl extends DirectoryEntry implements js_library.JSObjectInterfacesDom {
+  DirectoryEntryImpl.internal_() : super.internal_();
+  get runtimeType => DirectoryEntry;
+  toString() => super.toString();
+}
+patch class DirectoryReader {
+  static Type get instanceRuntimeType => DirectoryReaderImpl;
+
+}
+class DirectoryReaderImpl extends DirectoryReader implements js_library.JSObjectInterfacesDom {
+  DirectoryReaderImpl.internal_() : super.internal_();
+  get runtimeType => DirectoryReader;
+  toString() => super.toString();
+}
+patch class DivElement {
+  static Type get instanceRuntimeType => DivElementImpl;
+
+}
+class DivElementImpl extends DivElement implements js_library.JSObjectInterfacesDom {
+  DivElementImpl.internal_() : super.internal_();
+  get runtimeType => DivElement;
+  toString() => super.toString();
+}
+patch class Document {
+  static Type get instanceRuntimeType => DocumentImpl;
+
+}
+class DocumentImpl extends Document implements js_library.JSObjectInterfacesDom {
+  DocumentImpl.internal_() : super.internal_();
+  get runtimeType => Document;
+  toString() => super.toString();
+}
+patch class DocumentFragment {
+  static Type get instanceRuntimeType => DocumentFragmentImpl;
+
+}
+class DocumentFragmentImpl extends DocumentFragment implements js_library.JSObjectInterfacesDom {
+  DocumentFragmentImpl.internal_() : super.internal_();
+  get runtimeType => DocumentFragment;
+  toString() => super.toString();
+}
+patch class DomError {
+  static Type get instanceRuntimeType => DomErrorImpl;
+
+}
+class DomErrorImpl extends DomError implements js_library.JSObjectInterfacesDom {
+  DomErrorImpl.internal_() : super.internal_();
+  get runtimeType => DomError;
+  toString() => super.toString();
+}
+patch class DomException {
+  static Type get instanceRuntimeType => DomExceptionImpl;
+
+}
+class DomExceptionImpl extends DomException implements js_library.JSObjectInterfacesDom {
+  DomExceptionImpl.internal_() : super.internal_();
+  get runtimeType => DomException;
+  toString() => super.toString();
+}
+patch class DomImplementation {
+  static Type get instanceRuntimeType => DomImplementationImpl;
+
+}
+class DomImplementationImpl extends DomImplementation implements js_library.JSObjectInterfacesDom {
+  DomImplementationImpl.internal_() : super.internal_();
+  get runtimeType => DomImplementation;
+  toString() => super.toString();
+}
+patch class DomIterator {
+  static Type get instanceRuntimeType => DomIteratorImpl;
+
+}
+class DomIteratorImpl extends DomIterator implements js_library.JSObjectInterfacesDom {
+  DomIteratorImpl.internal_() : super.internal_();
+  get runtimeType => DomIterator;
+  toString() => super.toString();
+}
+patch class DomMatrix {
+  static Type get instanceRuntimeType => DomMatrixImpl;
+
+}
+class DomMatrixImpl extends DomMatrix implements js_library.JSObjectInterfacesDom {
+  DomMatrixImpl.internal_() : super.internal_();
+  get runtimeType => DomMatrix;
+  toString() => super.toString();
+}
+patch class DomMatrixReadOnly {
+  static Type get instanceRuntimeType => DomMatrixReadOnlyImpl;
+
+}
+class DomMatrixReadOnlyImpl extends DomMatrixReadOnly implements js_library.JSObjectInterfacesDom {
+  DomMatrixReadOnlyImpl.internal_() : super.internal_();
+  get runtimeType => DomMatrixReadOnly;
+  toString() => super.toString();
+}
+patch class DomParser {
+  static Type get instanceRuntimeType => DomParserImpl;
+
+}
+class DomParserImpl extends DomParser implements js_library.JSObjectInterfacesDom {
+  DomParserImpl.internal_() : super.internal_();
+  get runtimeType => DomParser;
+  toString() => super.toString();
+}
+patch class DomPoint {
+  static Type get instanceRuntimeType => DomPointImpl;
+
+}
+class DomPointImpl extends DomPoint implements js_library.JSObjectInterfacesDom {
+  DomPointImpl.internal_() : super.internal_();
+  get runtimeType => DomPoint;
+  toString() => super.toString();
+}
+patch class DomPointReadOnly {
+  static Type get instanceRuntimeType => DomPointReadOnlyImpl;
+
+}
+class DomPointReadOnlyImpl extends DomPointReadOnly implements js_library.JSObjectInterfacesDom {
+  DomPointReadOnlyImpl.internal_() : super.internal_();
+  get runtimeType => DomPointReadOnly;
+  toString() => super.toString();
+}
+patch class DomRectReadOnly {
+  static Type get instanceRuntimeType => DomRectReadOnlyImpl;
+
+}
+class DomRectReadOnlyImpl extends DomRectReadOnly implements js_library.JSObjectInterfacesDom {
+  DomRectReadOnlyImpl.internal_() : super.internal_();
+  get runtimeType => DomRectReadOnly;
+  toString() => super.toString();
+}
+patch class DomSettableTokenList {
+  static Type get instanceRuntimeType => DomSettableTokenListImpl;
+
+}
+class DomSettableTokenListImpl extends DomSettableTokenList implements js_library.JSObjectInterfacesDom {
+  DomSettableTokenListImpl.internal_() : super.internal_();
+  get runtimeType => DomSettableTokenList;
+  toString() => super.toString();
+}
+patch class DomStringList {
+  static Type get instanceRuntimeType => DomStringListImpl;
+
+}
+class DomStringListImpl extends DomStringList implements js_library.JSObjectInterfacesDom {
+  DomStringListImpl.internal_() : super.internal_();
+  get runtimeType => DomStringList;
+  toString() => super.toString();
+}
+patch class DomStringMap {
+  static Type get instanceRuntimeType => DomStringMapImpl;
+
+}
+class DomStringMapImpl extends DomStringMap implements js_library.JSObjectInterfacesDom {
+  DomStringMapImpl.internal_() : super.internal_();
+  get runtimeType => DomStringMap;
+  toString() => super.toString();
+}
+patch class DomTokenList {
+  static Type get instanceRuntimeType => DomTokenListImpl;
+
+}
+class DomTokenListImpl extends DomTokenList implements js_library.JSObjectInterfacesDom {
+  DomTokenListImpl.internal_() : super.internal_();
+  get runtimeType => DomTokenList;
+  toString() => super.toString();
+}
+patch class EffectModel {
+  static Type get instanceRuntimeType => EffectModelImpl;
+
+}
+class EffectModelImpl extends EffectModel implements js_library.JSObjectInterfacesDom {
+  EffectModelImpl.internal_() : super.internal_();
+  get runtimeType => EffectModel;
+  toString() => super.toString();
+}
+patch class Element {
+  static Type get instanceRuntimeType => ElementImpl;
+
+}
+class ElementImpl extends Element implements js_library.JSObjectInterfacesDom {
+  ElementImpl.internal_() : super.internal_();
+  get runtimeType => Element;
+  toString() => super.toString();
+}
+patch class EmbedElement {
+  static Type get instanceRuntimeType => EmbedElementImpl;
+
+}
+class EmbedElementImpl extends EmbedElement implements js_library.JSObjectInterfacesDom {
+  EmbedElementImpl.internal_() : super.internal_();
+  get runtimeType => EmbedElement;
+  toString() => super.toString();
+}
+patch class Entry {
+  static Type get instanceRuntimeType => EntryImpl;
+
+}
+class EntryImpl extends Entry implements js_library.JSObjectInterfacesDom {
+  EntryImpl.internal_() : super.internal_();
+  get runtimeType => Entry;
+  toString() => super.toString();
+}
+patch class ErrorEvent {
+  static Type get instanceRuntimeType => ErrorEventImpl;
+
+}
+class ErrorEventImpl extends ErrorEvent implements js_library.JSObjectInterfacesDom {
+  ErrorEventImpl.internal_() : super.internal_();
+  get runtimeType => ErrorEvent;
+  toString() => super.toString();
+}
+patch class Event {
+  static Type get instanceRuntimeType => EventImpl;
+
+}
+class EventImpl extends Event implements js_library.JSObjectInterfacesDom {
+  EventImpl.internal_() : super.internal_();
+  get runtimeType => Event;
+  toString() => super.toString();
+}
+patch class EventSource {
+  static Type get instanceRuntimeType => EventSourceImpl;
+
+}
+class EventSourceImpl extends EventSource implements js_library.JSObjectInterfacesDom {
+  EventSourceImpl.internal_() : super.internal_();
+  get runtimeType => EventSource;
+  toString() => super.toString();
+}
+patch class EventTarget {
+  static Type get instanceRuntimeType => EventTargetImpl;
+
+}
+class EventTargetImpl extends EventTarget implements js_library.JSObjectInterfacesDom {
+  EventTargetImpl.internal_() : super.internal_();
+  get runtimeType => EventTarget;
   toString() => super.toString();
 }
 patch class ExtendableEvent {
@@ -4029,6 +1104,699 @@
   get runtimeType => ExtendableEvent;
   toString() => super.toString();
 }
+patch class FederatedCredential {
+  static Type get instanceRuntimeType => FederatedCredentialImpl;
+
+}
+class FederatedCredentialImpl extends FederatedCredential implements js_library.JSObjectInterfacesDom {
+  FederatedCredentialImpl.internal_() : super.internal_();
+  get runtimeType => FederatedCredential;
+  toString() => super.toString();
+}
+patch class FetchEvent {
+  static Type get instanceRuntimeType => FetchEventImpl;
+
+}
+class FetchEventImpl extends FetchEvent implements js_library.JSObjectInterfacesDom {
+  FetchEventImpl.internal_() : super.internal_();
+  get runtimeType => FetchEvent;
+  toString() => super.toString();
+}
+patch class FieldSetElement {
+  static Type get instanceRuntimeType => FieldSetElementImpl;
+
+}
+class FieldSetElementImpl extends FieldSetElement implements js_library.JSObjectInterfacesDom {
+  FieldSetElementImpl.internal_() : super.internal_();
+  get runtimeType => FieldSetElement;
+  toString() => super.toString();
+}
+patch class File {
+  static Type get instanceRuntimeType => FileImpl;
+
+}
+class FileImpl extends File implements js_library.JSObjectInterfacesDom {
+  FileImpl.internal_() : super.internal_();
+  get runtimeType => File;
+  toString() => super.toString();
+}
+patch class FileEntry {
+  static Type get instanceRuntimeType => FileEntryImpl;
+
+}
+class FileEntryImpl extends FileEntry implements js_library.JSObjectInterfacesDom {
+  FileEntryImpl.internal_() : super.internal_();
+  get runtimeType => FileEntry;
+  toString() => super.toString();
+}
+patch class FileError {
+  static Type get instanceRuntimeType => FileErrorImpl;
+
+}
+class FileErrorImpl extends FileError implements js_library.JSObjectInterfacesDom {
+  FileErrorImpl.internal_() : super.internal_();
+  get runtimeType => FileError;
+  toString() => super.toString();
+}
+patch class FileList {
+  static Type get instanceRuntimeType => FileListImpl;
+
+}
+class FileListImpl extends FileList implements js_library.JSObjectInterfacesDom {
+  FileListImpl.internal_() : super.internal_();
+  get runtimeType => FileList;
+  toString() => super.toString();
+}
+patch class FileReader {
+  static Type get instanceRuntimeType => FileReaderImpl;
+
+}
+class FileReaderImpl extends FileReader implements js_library.JSObjectInterfacesDom {
+  FileReaderImpl.internal_() : super.internal_();
+  get runtimeType => FileReader;
+  toString() => super.toString();
+}
+patch class FileStream {
+  static Type get instanceRuntimeType => FileStreamImpl;
+
+}
+class FileStreamImpl extends FileStream implements js_library.JSObjectInterfacesDom {
+  FileStreamImpl.internal_() : super.internal_();
+  get runtimeType => FileStream;
+  toString() => super.toString();
+}
+patch class FileSystem {
+  static Type get instanceRuntimeType => FileSystemImpl;
+
+}
+class FileSystemImpl extends FileSystem implements js_library.JSObjectInterfacesDom {
+  FileSystemImpl.internal_() : super.internal_();
+  get runtimeType => FileSystem;
+  toString() => super.toString();
+}
+patch class FileWriter {
+  static Type get instanceRuntimeType => FileWriterImpl;
+
+}
+class FileWriterImpl extends FileWriter implements js_library.JSObjectInterfacesDom {
+  FileWriterImpl.internal_() : super.internal_();
+  get runtimeType => FileWriter;
+  toString() => super.toString();
+}
+patch class FocusEvent {
+  static Type get instanceRuntimeType => FocusEventImpl;
+
+}
+class FocusEventImpl extends FocusEvent implements js_library.JSObjectInterfacesDom {
+  FocusEventImpl.internal_() : super.internal_();
+  get runtimeType => FocusEvent;
+  toString() => super.toString();
+}
+patch class FontFace {
+  static Type get instanceRuntimeType => FontFaceImpl;
+
+}
+class FontFaceImpl extends FontFace implements js_library.JSObjectInterfacesDom {
+  FontFaceImpl.internal_() : super.internal_();
+  get runtimeType => FontFace;
+  toString() => super.toString();
+}
+patch class FontFaceSet {
+  static Type get instanceRuntimeType => FontFaceSetImpl;
+
+}
+class FontFaceSetImpl extends FontFaceSet implements js_library.JSObjectInterfacesDom {
+  FontFaceSetImpl.internal_() : super.internal_();
+  get runtimeType => FontFaceSet;
+  toString() => super.toString();
+}
+patch class FontFaceSetLoadEvent {
+  static Type get instanceRuntimeType => FontFaceSetLoadEventImpl;
+
+}
+class FontFaceSetLoadEventImpl extends FontFaceSetLoadEvent implements js_library.JSObjectInterfacesDom {
+  FontFaceSetLoadEventImpl.internal_() : super.internal_();
+  get runtimeType => FontFaceSetLoadEvent;
+  toString() => super.toString();
+}
+patch class FormData {
+  static Type get instanceRuntimeType => FormDataImpl;
+
+}
+class FormDataImpl extends FormData implements js_library.JSObjectInterfacesDom {
+  FormDataImpl.internal_() : super.internal_();
+  get runtimeType => FormData;
+  toString() => super.toString();
+}
+patch class FormElement {
+  static Type get instanceRuntimeType => FormElementImpl;
+
+}
+class FormElementImpl extends FormElement implements js_library.JSObjectInterfacesDom {
+  FormElementImpl.internal_() : super.internal_();
+  get runtimeType => FormElement;
+  toString() => super.toString();
+}
+patch class Gamepad {
+  static Type get instanceRuntimeType => GamepadImpl;
+
+}
+class GamepadImpl extends Gamepad implements js_library.JSObjectInterfacesDom {
+  GamepadImpl.internal_() : super.internal_();
+  get runtimeType => Gamepad;
+  toString() => super.toString();
+}
+patch class GamepadButton {
+  static Type get instanceRuntimeType => GamepadButtonImpl;
+
+}
+class GamepadButtonImpl extends GamepadButton implements js_library.JSObjectInterfacesDom {
+  GamepadButtonImpl.internal_() : super.internal_();
+  get runtimeType => GamepadButton;
+  toString() => super.toString();
+}
+patch class GamepadEvent {
+  static Type get instanceRuntimeType => GamepadEventImpl;
+
+}
+class GamepadEventImpl extends GamepadEvent implements js_library.JSObjectInterfacesDom {
+  GamepadEventImpl.internal_() : super.internal_();
+  get runtimeType => GamepadEvent;
+  toString() => super.toString();
+}
+patch class Geofencing {
+  static Type get instanceRuntimeType => GeofencingImpl;
+
+}
+class GeofencingImpl extends Geofencing implements js_library.JSObjectInterfacesDom {
+  GeofencingImpl.internal_() : super.internal_();
+  get runtimeType => Geofencing;
+  toString() => super.toString();
+}
+patch class GeofencingEvent {
+  static Type get instanceRuntimeType => GeofencingEventImpl;
+
+}
+class GeofencingEventImpl extends GeofencingEvent implements js_library.JSObjectInterfacesDom {
+  GeofencingEventImpl.internal_() : super.internal_();
+  get runtimeType => GeofencingEvent;
+  toString() => super.toString();
+}
+patch class GeofencingRegion {
+  static Type get instanceRuntimeType => GeofencingRegionImpl;
+
+}
+class GeofencingRegionImpl extends GeofencingRegion implements js_library.JSObjectInterfacesDom {
+  GeofencingRegionImpl.internal_() : super.internal_();
+  get runtimeType => GeofencingRegion;
+  toString() => super.toString();
+}
+patch class Geolocation {
+  static Type get instanceRuntimeType => GeolocationImpl;
+
+}
+class GeolocationImpl extends Geolocation implements js_library.JSObjectInterfacesDom {
+  GeolocationImpl.internal_() : super.internal_();
+  get runtimeType => Geolocation;
+  toString() => super.toString();
+}
+patch class Geoposition {
+  static Type get instanceRuntimeType => GeopositionImpl;
+
+}
+class GeopositionImpl extends Geoposition implements js_library.JSObjectInterfacesDom {
+  GeopositionImpl.internal_() : super.internal_();
+  get runtimeType => Geoposition;
+  toString() => super.toString();
+}
+patch class GlobalEventHandlers {
+  static Type get instanceRuntimeType => GlobalEventHandlersImpl;
+
+}
+class GlobalEventHandlersImpl extends GlobalEventHandlers implements js_library.JSObjectInterfacesDom {
+  GlobalEventHandlersImpl.internal_() : super.internal_();
+  get runtimeType => GlobalEventHandlers;
+  toString() => super.toString();
+}
+patch class HRElement {
+  static Type get instanceRuntimeType => HRElementImpl;
+
+}
+class HRElementImpl extends HRElement implements js_library.JSObjectInterfacesDom {
+  HRElementImpl.internal_() : super.internal_();
+  get runtimeType => HRElement;
+  toString() => super.toString();
+}
+patch class HashChangeEvent {
+  static Type get instanceRuntimeType => HashChangeEventImpl;
+
+}
+class HashChangeEventImpl extends HashChangeEvent implements js_library.JSObjectInterfacesDom {
+  HashChangeEventImpl.internal_() : super.internal_();
+  get runtimeType => HashChangeEvent;
+  toString() => super.toString();
+}
+patch class HeadElement {
+  static Type get instanceRuntimeType => HeadElementImpl;
+
+}
+class HeadElementImpl extends HeadElement implements js_library.JSObjectInterfacesDom {
+  HeadElementImpl.internal_() : super.internal_();
+  get runtimeType => HeadElement;
+  toString() => super.toString();
+}
+patch class Headers {
+  static Type get instanceRuntimeType => HeadersImpl;
+
+}
+class HeadersImpl extends Headers implements js_library.JSObjectInterfacesDom {
+  HeadersImpl.internal_() : super.internal_();
+  get runtimeType => Headers;
+  toString() => super.toString();
+}
+patch class HeadingElement {
+  static Type get instanceRuntimeType => HeadingElementImpl;
+
+}
+class HeadingElementImpl extends HeadingElement implements js_library.JSObjectInterfacesDom {
+  HeadingElementImpl.internal_() : super.internal_();
+  get runtimeType => HeadingElement;
+  toString() => super.toString();
+}
+patch class History {
+  static Type get instanceRuntimeType => HistoryImpl;
+
+}
+class HistoryImpl extends History implements js_library.JSObjectInterfacesDom {
+  HistoryImpl.internal_() : super.internal_();
+  get runtimeType => History;
+  toString() => super.toString();
+}
+patch class HmdvrDevice {
+  static Type get instanceRuntimeType => HmdvrDeviceImpl;
+
+}
+class HmdvrDeviceImpl extends HmdvrDevice implements js_library.JSObjectInterfacesDom {
+  HmdvrDeviceImpl.internal_() : super.internal_();
+  get runtimeType => HmdvrDevice;
+  toString() => super.toString();
+}
+patch class HtmlCollection {
+  static Type get instanceRuntimeType => HtmlCollectionImpl;
+
+}
+class HtmlCollectionImpl extends HtmlCollection implements js_library.JSObjectInterfacesDom {
+  HtmlCollectionImpl.internal_() : super.internal_();
+  get runtimeType => HtmlCollection;
+  toString() => super.toString();
+}
+patch class HtmlDocument {
+  static Type get instanceRuntimeType => HtmlDocumentImpl;
+
+}
+class HtmlDocumentImpl extends HtmlDocument implements js_library.JSObjectInterfacesDom {
+  HtmlDocumentImpl.internal_() : super.internal_();
+  get runtimeType => HtmlDocument;
+  toString() => super.toString();
+}
+patch class HtmlElement {
+  static Type get instanceRuntimeType => HtmlElementImpl;
+
+}
+class HtmlElementImpl extends HtmlElement implements js_library.JSObjectInterfacesDom {
+  HtmlElementImpl.internal_() : super.internal_();
+  get runtimeType => HtmlElement;
+  toString() => super.toString();
+}
+patch class HtmlFormControlsCollection {
+  static Type get instanceRuntimeType => HtmlFormControlsCollectionImpl;
+
+}
+class HtmlFormControlsCollectionImpl extends HtmlFormControlsCollection implements js_library.JSObjectInterfacesDom {
+  HtmlFormControlsCollectionImpl.internal_() : super.internal_();
+  get runtimeType => HtmlFormControlsCollection;
+  toString() => super.toString();
+}
+patch class HtmlHtmlElement {
+  static Type get instanceRuntimeType => HtmlHtmlElementImpl;
+
+}
+class HtmlHtmlElementImpl extends HtmlHtmlElement implements js_library.JSObjectInterfacesDom {
+  HtmlHtmlElementImpl.internal_() : super.internal_();
+  get runtimeType => HtmlHtmlElement;
+  toString() => super.toString();
+}
+patch class HtmlOptionsCollection {
+  static Type get instanceRuntimeType => HtmlOptionsCollectionImpl;
+
+}
+class HtmlOptionsCollectionImpl extends HtmlOptionsCollection implements js_library.JSObjectInterfacesDom {
+  HtmlOptionsCollectionImpl.internal_() : super.internal_();
+  get runtimeType => HtmlOptionsCollection;
+  toString() => super.toString();
+}
+patch class HttpRequest {
+  static Type get instanceRuntimeType => HttpRequestImpl;
+
+}
+class HttpRequestImpl extends HttpRequest implements js_library.JSObjectInterfacesDom {
+  HttpRequestImpl.internal_() : super.internal_();
+  get runtimeType => HttpRequest;
+  toString() => super.toString();
+}
+patch class HttpRequestEventTarget {
+  static Type get instanceRuntimeType => HttpRequestEventTargetImpl;
+
+}
+class HttpRequestEventTargetImpl extends HttpRequestEventTarget implements js_library.JSObjectInterfacesDom {
+  HttpRequestEventTargetImpl.internal_() : super.internal_();
+  get runtimeType => HttpRequestEventTarget;
+  toString() => super.toString();
+}
+patch class HttpRequestUpload {
+  static Type get instanceRuntimeType => HttpRequestUploadImpl;
+
+}
+class HttpRequestUploadImpl extends HttpRequestUpload implements js_library.JSObjectInterfacesDom {
+  HttpRequestUploadImpl.internal_() : super.internal_();
+  get runtimeType => HttpRequestUpload;
+  toString() => super.toString();
+}
+patch class IFrameElement {
+  static Type get instanceRuntimeType => IFrameElementImpl;
+
+}
+class IFrameElementImpl extends IFrameElement implements js_library.JSObjectInterfacesDom {
+  IFrameElementImpl.internal_() : super.internal_();
+  get runtimeType => IFrameElement;
+  toString() => super.toString();
+}
+patch class ImageBitmap {
+  static Type get instanceRuntimeType => ImageBitmapImpl;
+
+}
+class ImageBitmapImpl extends ImageBitmap implements js_library.JSObjectInterfacesDom {
+  ImageBitmapImpl.internal_() : super.internal_();
+  get runtimeType => ImageBitmap;
+  toString() => super.toString();
+}
+patch class ImageData {
+  static Type get instanceRuntimeType => ImageDataImpl;
+
+}
+class ImageDataImpl extends ImageData implements js_library.JSObjectInterfacesDom {
+  ImageDataImpl.internal_() : super.internal_();
+  get runtimeType => ImageData;
+  toString() => super.toString();
+}
+patch class ImageElement {
+  static Type get instanceRuntimeType => ImageElementImpl;
+
+}
+class ImageElementImpl extends ImageElement implements js_library.JSObjectInterfacesDom {
+  ImageElementImpl.internal_() : super.internal_();
+  get runtimeType => ImageElement;
+  toString() => super.toString();
+}
+patch class InjectedScriptHost {
+  static Type get instanceRuntimeType => InjectedScriptHostImpl;
+
+}
+class InjectedScriptHostImpl extends InjectedScriptHost implements js_library.JSObjectInterfacesDom {
+  InjectedScriptHostImpl.internal_() : super.internal_();
+  get runtimeType => InjectedScriptHost;
+  toString() => super.toString();
+}
+patch class InputDevice {
+  static Type get instanceRuntimeType => InputDeviceImpl;
+
+}
+class InputDeviceImpl extends InputDevice implements js_library.JSObjectInterfacesDom {
+  InputDeviceImpl.internal_() : super.internal_();
+  get runtimeType => InputDevice;
+  toString() => super.toString();
+}
+patch class InputElement {
+  static Type get instanceRuntimeType => InputElementImpl;
+
+}
+class InputElementImpl extends InputElement implements js_library.JSObjectInterfacesDom {
+  InputElementImpl.internal_() : super.internal_();
+  get runtimeType => InputElement;
+  toString() => super.toString();
+}
+patch class KeyboardEvent {
+  static Type get instanceRuntimeType => KeyboardEventImpl;
+
+}
+class KeyboardEventImpl extends KeyboardEvent implements js_library.JSObjectInterfacesDom {
+  KeyboardEventImpl.internal_() : super.internal_();
+  get runtimeType => KeyboardEvent;
+  toString() => super.toString();
+}
+patch class KeyframeEffect {
+  static Type get instanceRuntimeType => KeyframeEffectImpl;
+
+}
+class KeyframeEffectImpl extends KeyframeEffect implements js_library.JSObjectInterfacesDom {
+  KeyframeEffectImpl.internal_() : super.internal_();
+  get runtimeType => KeyframeEffect;
+  toString() => super.toString();
+}
+patch class KeygenElement {
+  static Type get instanceRuntimeType => KeygenElementImpl;
+
+}
+class KeygenElementImpl extends KeygenElement implements js_library.JSObjectInterfacesDom {
+  KeygenElementImpl.internal_() : super.internal_();
+  get runtimeType => KeygenElement;
+  toString() => super.toString();
+}
+patch class LIElement {
+  static Type get instanceRuntimeType => LIElementImpl;
+
+}
+class LIElementImpl extends LIElement implements js_library.JSObjectInterfacesDom {
+  LIElementImpl.internal_() : super.internal_();
+  get runtimeType => LIElement;
+  toString() => super.toString();
+}
+patch class LabelElement {
+  static Type get instanceRuntimeType => LabelElementImpl;
+
+}
+class LabelElementImpl extends LabelElement implements js_library.JSObjectInterfacesDom {
+  LabelElementImpl.internal_() : super.internal_();
+  get runtimeType => LabelElement;
+  toString() => super.toString();
+}
+patch class LegendElement {
+  static Type get instanceRuntimeType => LegendElementImpl;
+
+}
+class LegendElementImpl extends LegendElement implements js_library.JSObjectInterfacesDom {
+  LegendElementImpl.internal_() : super.internal_();
+  get runtimeType => LegendElement;
+  toString() => super.toString();
+}
+patch class LinkElement {
+  static Type get instanceRuntimeType => LinkElementImpl;
+
+}
+class LinkElementImpl extends LinkElement implements js_library.JSObjectInterfacesDom {
+  LinkElementImpl.internal_() : super.internal_();
+  get runtimeType => LinkElement;
+  toString() => super.toString();
+}
+patch class Location {
+  static Type get instanceRuntimeType => LocationImpl;
+
+}
+class LocationImpl extends Location implements js_library.JSObjectInterfacesDom {
+  LocationImpl.internal_() : super.internal_();
+  get runtimeType => Location;
+  toString() => super.toString();
+}
+patch class MapElement {
+  static Type get instanceRuntimeType => MapElementImpl;
+
+}
+class MapElementImpl extends MapElement implements js_library.JSObjectInterfacesDom {
+  MapElementImpl.internal_() : super.internal_();
+  get runtimeType => MapElement;
+  toString() => super.toString();
+}
+patch class MediaController {
+  static Type get instanceRuntimeType => MediaControllerImpl;
+
+}
+class MediaControllerImpl extends MediaController implements js_library.JSObjectInterfacesDom {
+  MediaControllerImpl.internal_() : super.internal_();
+  get runtimeType => MediaController;
+  toString() => super.toString();
+}
+patch class MediaDeviceInfo {
+  static Type get instanceRuntimeType => MediaDeviceInfoImpl;
+
+}
+class MediaDeviceInfoImpl extends MediaDeviceInfo implements js_library.JSObjectInterfacesDom {
+  MediaDeviceInfoImpl.internal_() : super.internal_();
+  get runtimeType => MediaDeviceInfo;
+  toString() => super.toString();
+}
+patch class MediaDevices {
+  static Type get instanceRuntimeType => MediaDevicesImpl;
+
+}
+class MediaDevicesImpl extends MediaDevices implements js_library.JSObjectInterfacesDom {
+  MediaDevicesImpl.internal_() : super.internal_();
+  get runtimeType => MediaDevices;
+  toString() => super.toString();
+}
+patch class MediaElement {
+  static Type get instanceRuntimeType => MediaElementImpl;
+
+}
+class MediaElementImpl extends MediaElement implements js_library.JSObjectInterfacesDom {
+  MediaElementImpl.internal_() : super.internal_();
+  get runtimeType => MediaElement;
+  toString() => super.toString();
+}
+patch class MediaEncryptedEvent {
+  static Type get instanceRuntimeType => MediaEncryptedEventImpl;
+
+}
+class MediaEncryptedEventImpl extends MediaEncryptedEvent implements js_library.JSObjectInterfacesDom {
+  MediaEncryptedEventImpl.internal_() : super.internal_();
+  get runtimeType => MediaEncryptedEvent;
+  toString() => super.toString();
+}
+patch class MediaError {
+  static Type get instanceRuntimeType => MediaErrorImpl;
+
+}
+class MediaErrorImpl extends MediaError implements js_library.JSObjectInterfacesDom {
+  MediaErrorImpl.internal_() : super.internal_();
+  get runtimeType => MediaError;
+  toString() => super.toString();
+}
+patch class MediaKeyError {
+  static Type get instanceRuntimeType => MediaKeyErrorImpl;
+
+}
+class MediaKeyErrorImpl extends MediaKeyError implements js_library.JSObjectInterfacesDom {
+  MediaKeyErrorImpl.internal_() : super.internal_();
+  get runtimeType => MediaKeyError;
+  toString() => super.toString();
+}
+patch class MediaKeyEvent {
+  static Type get instanceRuntimeType => MediaKeyEventImpl;
+
+}
+class MediaKeyEventImpl extends MediaKeyEvent implements js_library.JSObjectInterfacesDom {
+  MediaKeyEventImpl.internal_() : super.internal_();
+  get runtimeType => MediaKeyEvent;
+  toString() => super.toString();
+}
+patch class MediaKeyMessageEvent {
+  static Type get instanceRuntimeType => MediaKeyMessageEventImpl;
+
+}
+class MediaKeyMessageEventImpl extends MediaKeyMessageEvent implements js_library.JSObjectInterfacesDom {
+  MediaKeyMessageEventImpl.internal_() : super.internal_();
+  get runtimeType => MediaKeyMessageEvent;
+  toString() => super.toString();
+}
+patch class MediaKeySession {
+  static Type get instanceRuntimeType => MediaKeySessionImpl;
+
+}
+class MediaKeySessionImpl extends MediaKeySession implements js_library.JSObjectInterfacesDom {
+  MediaKeySessionImpl.internal_() : super.internal_();
+  get runtimeType => MediaKeySession;
+  toString() => super.toString();
+}
+patch class MediaKeyStatusMap {
+  static Type get instanceRuntimeType => MediaKeyStatusMapImpl;
+
+}
+class MediaKeyStatusMapImpl extends MediaKeyStatusMap implements js_library.JSObjectInterfacesDom {
+  MediaKeyStatusMapImpl.internal_() : super.internal_();
+  get runtimeType => MediaKeyStatusMap;
+  toString() => super.toString();
+}
+patch class MediaKeySystemAccess {
+  static Type get instanceRuntimeType => MediaKeySystemAccessImpl;
+
+}
+class MediaKeySystemAccessImpl extends MediaKeySystemAccess implements js_library.JSObjectInterfacesDom {
+  MediaKeySystemAccessImpl.internal_() : super.internal_();
+  get runtimeType => MediaKeySystemAccess;
+  toString() => super.toString();
+}
+patch class MediaKeys {
+  static Type get instanceRuntimeType => MediaKeysImpl;
+
+}
+class MediaKeysImpl extends MediaKeys implements js_library.JSObjectInterfacesDom {
+  MediaKeysImpl.internal_() : super.internal_();
+  get runtimeType => MediaKeys;
+  toString() => super.toString();
+}
+patch class MediaList {
+  static Type get instanceRuntimeType => MediaListImpl;
+
+}
+class MediaListImpl extends MediaList implements js_library.JSObjectInterfacesDom {
+  MediaListImpl.internal_() : super.internal_();
+  get runtimeType => MediaList;
+  toString() => super.toString();
+}
+patch class MediaQueryList {
+  static Type get instanceRuntimeType => MediaQueryListImpl;
+
+}
+class MediaQueryListImpl extends MediaQueryList implements js_library.JSObjectInterfacesDom {
+  MediaQueryListImpl.internal_() : super.internal_();
+  get runtimeType => MediaQueryList;
+  toString() => super.toString();
+}
+patch class MediaQueryListEvent {
+  static Type get instanceRuntimeType => MediaQueryListEventImpl;
+
+}
+class MediaQueryListEventImpl extends MediaQueryListEvent implements js_library.JSObjectInterfacesDom {
+  MediaQueryListEventImpl.internal_() : super.internal_();
+  get runtimeType => MediaQueryListEvent;
+  toString() => super.toString();
+}
+patch class MediaSession {
+  static Type get instanceRuntimeType => MediaSessionImpl;
+
+}
+class MediaSessionImpl extends MediaSession implements js_library.JSObjectInterfacesDom {
+  MediaSessionImpl.internal_() : super.internal_();
+  get runtimeType => MediaSession;
+  toString() => super.toString();
+}
+patch class MediaSource {
+  static Type get instanceRuntimeType => MediaSourceImpl;
+
+}
+class MediaSourceImpl extends MediaSource implements js_library.JSObjectInterfacesDom {
+  MediaSourceImpl.internal_() : super.internal_();
+  get runtimeType => MediaSource;
+  toString() => super.toString();
+}
+patch class MediaStream {
+  static Type get instanceRuntimeType => MediaStreamImpl;
+
+}
+class MediaStreamImpl extends MediaStream implements js_library.JSObjectInterfacesDom {
+  MediaStreamImpl.internal_() : super.internal_();
+  get runtimeType => MediaStream;
+  toString() => super.toString();
+}
 patch class MediaStreamEvent {
   static Type get instanceRuntimeType => MediaStreamEventImpl;
 
@@ -4038,6 +1806,1869 @@
   get runtimeType => MediaStreamEvent;
   toString() => super.toString();
 }
+patch class MediaStreamTrack {
+  static Type get instanceRuntimeType => MediaStreamTrackImpl;
+
+}
+class MediaStreamTrackImpl extends MediaStreamTrack implements js_library.JSObjectInterfacesDom {
+  MediaStreamTrackImpl.internal_() : super.internal_();
+  get runtimeType => MediaStreamTrack;
+  toString() => super.toString();
+}
+patch class MediaStreamTrackEvent {
+  static Type get instanceRuntimeType => MediaStreamTrackEventImpl;
+
+}
+class MediaStreamTrackEventImpl extends MediaStreamTrackEvent implements js_library.JSObjectInterfacesDom {
+  MediaStreamTrackEventImpl.internal_() : super.internal_();
+  get runtimeType => MediaStreamTrackEvent;
+  toString() => super.toString();
+}
+patch class MemoryInfo {
+  static Type get instanceRuntimeType => MemoryInfoImpl;
+
+}
+class MemoryInfoImpl extends MemoryInfo implements js_library.JSObjectInterfacesDom {
+  MemoryInfoImpl.internal_() : super.internal_();
+  get runtimeType => MemoryInfo;
+  toString() => super.toString();
+}
+patch class MenuElement {
+  static Type get instanceRuntimeType => MenuElementImpl;
+
+}
+class MenuElementImpl extends MenuElement implements js_library.JSObjectInterfacesDom {
+  MenuElementImpl.internal_() : super.internal_();
+  get runtimeType => MenuElement;
+  toString() => super.toString();
+}
+patch class MenuItemElement {
+  static Type get instanceRuntimeType => MenuItemElementImpl;
+
+}
+class MenuItemElementImpl extends MenuItemElement implements js_library.JSObjectInterfacesDom {
+  MenuItemElementImpl.internal_() : super.internal_();
+  get runtimeType => MenuItemElement;
+  toString() => super.toString();
+}
+patch class MessageChannel {
+  static Type get instanceRuntimeType => MessageChannelImpl;
+
+}
+class MessageChannelImpl extends MessageChannel implements js_library.JSObjectInterfacesDom {
+  MessageChannelImpl.internal_() : super.internal_();
+  get runtimeType => MessageChannel;
+  toString() => super.toString();
+}
+patch class MessageEvent {
+  static Type get instanceRuntimeType => MessageEventImpl;
+
+}
+class MessageEventImpl extends MessageEvent implements js_library.JSObjectInterfacesDom {
+  MessageEventImpl.internal_() : super.internal_();
+  get runtimeType => MessageEvent;
+  toString() => super.toString();
+}
+patch class MessagePort {
+  static Type get instanceRuntimeType => MessagePortImpl;
+
+}
+class MessagePortImpl extends MessagePort implements js_library.JSObjectInterfacesDom {
+  MessagePortImpl.internal_() : super.internal_();
+  get runtimeType => MessagePort;
+  toString() => super.toString();
+}
+patch class MetaElement {
+  static Type get instanceRuntimeType => MetaElementImpl;
+
+}
+class MetaElementImpl extends MetaElement implements js_library.JSObjectInterfacesDom {
+  MetaElementImpl.internal_() : super.internal_();
+  get runtimeType => MetaElement;
+  toString() => super.toString();
+}
+patch class Metadata {
+  static Type get instanceRuntimeType => MetadataImpl;
+
+}
+class MetadataImpl extends Metadata implements js_library.JSObjectInterfacesDom {
+  MetadataImpl.internal_() : super.internal_();
+  get runtimeType => Metadata;
+  toString() => super.toString();
+}
+patch class MeterElement {
+  static Type get instanceRuntimeType => MeterElementImpl;
+
+}
+class MeterElementImpl extends MeterElement implements js_library.JSObjectInterfacesDom {
+  MeterElementImpl.internal_() : super.internal_();
+  get runtimeType => MeterElement;
+  toString() => super.toString();
+}
+patch class MidiAccess {
+  static Type get instanceRuntimeType => MidiAccessImpl;
+
+}
+class MidiAccessImpl extends MidiAccess implements js_library.JSObjectInterfacesDom {
+  MidiAccessImpl.internal_() : super.internal_();
+  get runtimeType => MidiAccess;
+  toString() => super.toString();
+}
+patch class MidiConnectionEvent {
+  static Type get instanceRuntimeType => MidiConnectionEventImpl;
+
+}
+class MidiConnectionEventImpl extends MidiConnectionEvent implements js_library.JSObjectInterfacesDom {
+  MidiConnectionEventImpl.internal_() : super.internal_();
+  get runtimeType => MidiConnectionEvent;
+  toString() => super.toString();
+}
+patch class MidiInput {
+  static Type get instanceRuntimeType => MidiInputImpl;
+
+}
+class MidiInputImpl extends MidiInput implements js_library.JSObjectInterfacesDom {
+  MidiInputImpl.internal_() : super.internal_();
+  get runtimeType => MidiInput;
+  toString() => super.toString();
+}
+patch class MidiInputMap {
+  static Type get instanceRuntimeType => MidiInputMapImpl;
+
+}
+class MidiInputMapImpl extends MidiInputMap implements js_library.JSObjectInterfacesDom {
+  MidiInputMapImpl.internal_() : super.internal_();
+  get runtimeType => MidiInputMap;
+  toString() => super.toString();
+}
+patch class MidiMessageEvent {
+  static Type get instanceRuntimeType => MidiMessageEventImpl;
+
+}
+class MidiMessageEventImpl extends MidiMessageEvent implements js_library.JSObjectInterfacesDom {
+  MidiMessageEventImpl.internal_() : super.internal_();
+  get runtimeType => MidiMessageEvent;
+  toString() => super.toString();
+}
+patch class MidiOutput {
+  static Type get instanceRuntimeType => MidiOutputImpl;
+
+}
+class MidiOutputImpl extends MidiOutput implements js_library.JSObjectInterfacesDom {
+  MidiOutputImpl.internal_() : super.internal_();
+  get runtimeType => MidiOutput;
+  toString() => super.toString();
+}
+patch class MidiOutputMap {
+  static Type get instanceRuntimeType => MidiOutputMapImpl;
+
+}
+class MidiOutputMapImpl extends MidiOutputMap implements js_library.JSObjectInterfacesDom {
+  MidiOutputMapImpl.internal_() : super.internal_();
+  get runtimeType => MidiOutputMap;
+  toString() => super.toString();
+}
+patch class MidiPort {
+  static Type get instanceRuntimeType => MidiPortImpl;
+
+}
+class MidiPortImpl extends MidiPort implements js_library.JSObjectInterfacesDom {
+  MidiPortImpl.internal_() : super.internal_();
+  get runtimeType => MidiPort;
+  toString() => super.toString();
+}
+patch class MimeType {
+  static Type get instanceRuntimeType => MimeTypeImpl;
+
+}
+class MimeTypeImpl extends MimeType implements js_library.JSObjectInterfacesDom {
+  MimeTypeImpl.internal_() : super.internal_();
+  get runtimeType => MimeType;
+  toString() => super.toString();
+}
+patch class MimeTypeArray {
+  static Type get instanceRuntimeType => MimeTypeArrayImpl;
+
+}
+class MimeTypeArrayImpl extends MimeTypeArray implements js_library.JSObjectInterfacesDom {
+  MimeTypeArrayImpl.internal_() : super.internal_();
+  get runtimeType => MimeTypeArray;
+  toString() => super.toString();
+}
+patch class ModElement {
+  static Type get instanceRuntimeType => ModElementImpl;
+
+}
+class ModElementImpl extends ModElement implements js_library.JSObjectInterfacesDom {
+  ModElementImpl.internal_() : super.internal_();
+  get runtimeType => ModElement;
+  toString() => super.toString();
+}
+patch class MouseEvent {
+  static Type get instanceRuntimeType => MouseEventImpl;
+
+}
+class MouseEventImpl extends MouseEvent implements js_library.JSObjectInterfacesDom {
+  MouseEventImpl.internal_() : super.internal_();
+  get runtimeType => MouseEvent;
+  toString() => super.toString();
+}
+patch class MutationObserver {
+  static Type get instanceRuntimeType => MutationObserverImpl;
+
+}
+class MutationObserverImpl extends MutationObserver implements js_library.JSObjectInterfacesDom {
+  MutationObserverImpl.internal_() : super.internal_();
+  get runtimeType => MutationObserver;
+  toString() => super.toString();
+}
+patch class MutationRecord {
+  static Type get instanceRuntimeType => MutationRecordImpl;
+
+}
+class MutationRecordImpl extends MutationRecord implements js_library.JSObjectInterfacesDom {
+  MutationRecordImpl.internal_() : super.internal_();
+  get runtimeType => MutationRecord;
+  toString() => super.toString();
+}
+patch class Navigator {
+  static Type get instanceRuntimeType => NavigatorImpl;
+
+}
+class NavigatorImpl extends Navigator implements js_library.JSObjectInterfacesDom {
+  NavigatorImpl.internal_() : super.internal_();
+  get runtimeType => Navigator;
+  toString() => super.toString();
+}
+patch class NavigatorCpu {
+  static Type get instanceRuntimeType => NavigatorCpuImpl;
+
+}
+class NavigatorCpuImpl extends NavigatorCpu implements js_library.JSObjectInterfacesDom {
+  NavigatorCpuImpl.internal_() : super.internal_();
+  get runtimeType => NavigatorCpu;
+  toString() => super.toString();
+}
+patch class NavigatorID {
+  static Type get instanceRuntimeType => NavigatorIDImpl;
+
+}
+class NavigatorIDImpl extends NavigatorID implements js_library.JSObjectInterfacesDom {
+  NavigatorIDImpl.internal_() : super.internal_();
+  get runtimeType => NavigatorID;
+  toString() => super.toString();
+}
+patch class NavigatorLanguage {
+  static Type get instanceRuntimeType => NavigatorLanguageImpl;
+
+}
+class NavigatorLanguageImpl extends NavigatorLanguage implements js_library.JSObjectInterfacesDom {
+  NavigatorLanguageImpl.internal_() : super.internal_();
+  get runtimeType => NavigatorLanguage;
+  toString() => super.toString();
+}
+patch class NavigatorOnLine {
+  static Type get instanceRuntimeType => NavigatorOnLineImpl;
+
+}
+class NavigatorOnLineImpl extends NavigatorOnLine implements js_library.JSObjectInterfacesDom {
+  NavigatorOnLineImpl.internal_() : super.internal_();
+  get runtimeType => NavigatorOnLine;
+  toString() => super.toString();
+}
+patch class NavigatorStorageUtils {
+  static Type get instanceRuntimeType => NavigatorStorageUtilsImpl;
+
+}
+class NavigatorStorageUtilsImpl extends NavigatorStorageUtils implements js_library.JSObjectInterfacesDom {
+  NavigatorStorageUtilsImpl.internal_() : super.internal_();
+  get runtimeType => NavigatorStorageUtils;
+  toString() => super.toString();
+}
+patch class NavigatorUserMediaError {
+  static Type get instanceRuntimeType => NavigatorUserMediaErrorImpl;
+
+}
+class NavigatorUserMediaErrorImpl extends NavigatorUserMediaError implements js_library.JSObjectInterfacesDom {
+  NavigatorUserMediaErrorImpl.internal_() : super.internal_();
+  get runtimeType => NavigatorUserMediaError;
+  toString() => super.toString();
+}
+patch class NetworkInformation {
+  static Type get instanceRuntimeType => NetworkInformationImpl;
+
+}
+class NetworkInformationImpl extends NetworkInformation implements js_library.JSObjectInterfacesDom {
+  NetworkInformationImpl.internal_() : super.internal_();
+  get runtimeType => NetworkInformation;
+  toString() => super.toString();
+}
+patch class Node {
+  static Type get instanceRuntimeType => NodeImpl;
+
+}
+class NodeImpl extends Node implements js_library.JSObjectInterfacesDom {
+  NodeImpl.internal_() : super.internal_();
+  get runtimeType => Node;
+  toString() => super.toString();
+}
+patch class NodeFilter {
+  static Type get instanceRuntimeType => NodeFilterImpl;
+
+}
+class NodeFilterImpl extends NodeFilter implements js_library.JSObjectInterfacesDom {
+  NodeFilterImpl.internal_() : super.internal_();
+  get runtimeType => NodeFilter;
+  toString() => super.toString();
+}
+patch class NodeIterator {
+  static Type get instanceRuntimeType => NodeIteratorImpl;
+
+}
+class NodeIteratorImpl extends NodeIterator implements js_library.JSObjectInterfacesDom {
+  NodeIteratorImpl.internal_() : super.internal_();
+  get runtimeType => NodeIterator;
+  toString() => super.toString();
+}
+patch class NodeList {
+  static Type get instanceRuntimeType => NodeListImpl;
+
+}
+class NodeListImpl extends NodeList implements js_library.JSObjectInterfacesDom {
+  NodeListImpl.internal_() : super.internal_();
+  get runtimeType => NodeList;
+  toString() => super.toString();
+}
+patch class NonDocumentTypeChildNode {
+  static Type get instanceRuntimeType => NonDocumentTypeChildNodeImpl;
+
+}
+class NonDocumentTypeChildNodeImpl extends NonDocumentTypeChildNode implements js_library.JSObjectInterfacesDom {
+  NonDocumentTypeChildNodeImpl.internal_() : super.internal_();
+  get runtimeType => NonDocumentTypeChildNode;
+  toString() => super.toString();
+}
+patch class NonElementParentNode {
+  static Type get instanceRuntimeType => NonElementParentNodeImpl;
+
+}
+class NonElementParentNodeImpl extends NonElementParentNode implements js_library.JSObjectInterfacesDom {
+  NonElementParentNodeImpl.internal_() : super.internal_();
+  get runtimeType => NonElementParentNode;
+  toString() => super.toString();
+}
+patch class Notification {
+  static Type get instanceRuntimeType => NotificationImpl;
+
+}
+class NotificationImpl extends Notification implements js_library.JSObjectInterfacesDom {
+  NotificationImpl.internal_() : super.internal_();
+  get runtimeType => Notification;
+  toString() => super.toString();
+}
+patch class NotificationEvent {
+  static Type get instanceRuntimeType => NotificationEventImpl;
+
+}
+class NotificationEventImpl extends NotificationEvent implements js_library.JSObjectInterfacesDom {
+  NotificationEventImpl.internal_() : super.internal_();
+  get runtimeType => NotificationEvent;
+  toString() => super.toString();
+}
+patch class OListElement {
+  static Type get instanceRuntimeType => OListElementImpl;
+
+}
+class OListElementImpl extends OListElement implements js_library.JSObjectInterfacesDom {
+  OListElementImpl.internal_() : super.internal_();
+  get runtimeType => OListElement;
+  toString() => super.toString();
+}
+patch class ObjectElement {
+  static Type get instanceRuntimeType => ObjectElementImpl;
+
+}
+class ObjectElementImpl extends ObjectElement implements js_library.JSObjectInterfacesDom {
+  ObjectElementImpl.internal_() : super.internal_();
+  get runtimeType => ObjectElement;
+  toString() => super.toString();
+}
+patch class OptGroupElement {
+  static Type get instanceRuntimeType => OptGroupElementImpl;
+
+}
+class OptGroupElementImpl extends OptGroupElement implements js_library.JSObjectInterfacesDom {
+  OptGroupElementImpl.internal_() : super.internal_();
+  get runtimeType => OptGroupElement;
+  toString() => super.toString();
+}
+patch class OptionElement {
+  static Type get instanceRuntimeType => OptionElementImpl;
+
+}
+class OptionElementImpl extends OptionElement implements js_library.JSObjectInterfacesDom {
+  OptionElementImpl.internal_() : super.internal_();
+  get runtimeType => OptionElement;
+  toString() => super.toString();
+}
+patch class OutputElement {
+  static Type get instanceRuntimeType => OutputElementImpl;
+
+}
+class OutputElementImpl extends OutputElement implements js_library.JSObjectInterfacesDom {
+  OutputElementImpl.internal_() : super.internal_();
+  get runtimeType => OutputElement;
+  toString() => super.toString();
+}
+patch class PageTransitionEvent {
+  static Type get instanceRuntimeType => PageTransitionEventImpl;
+
+}
+class PageTransitionEventImpl extends PageTransitionEvent implements js_library.JSObjectInterfacesDom {
+  PageTransitionEventImpl.internal_() : super.internal_();
+  get runtimeType => PageTransitionEvent;
+  toString() => super.toString();
+}
+patch class ParagraphElement {
+  static Type get instanceRuntimeType => ParagraphElementImpl;
+
+}
+class ParagraphElementImpl extends ParagraphElement implements js_library.JSObjectInterfacesDom {
+  ParagraphElementImpl.internal_() : super.internal_();
+  get runtimeType => ParagraphElement;
+  toString() => super.toString();
+}
+patch class ParamElement {
+  static Type get instanceRuntimeType => ParamElementImpl;
+
+}
+class ParamElementImpl extends ParamElement implements js_library.JSObjectInterfacesDom {
+  ParamElementImpl.internal_() : super.internal_();
+  get runtimeType => ParamElement;
+  toString() => super.toString();
+}
+patch class ParentNode {
+  static Type get instanceRuntimeType => ParentNodeImpl;
+
+}
+class ParentNodeImpl extends ParentNode implements js_library.JSObjectInterfacesDom {
+  ParentNodeImpl.internal_() : super.internal_();
+  get runtimeType => ParentNode;
+  toString() => super.toString();
+}
+patch class PasswordCredential {
+  static Type get instanceRuntimeType => PasswordCredentialImpl;
+
+}
+class PasswordCredentialImpl extends PasswordCredential implements js_library.JSObjectInterfacesDom {
+  PasswordCredentialImpl.internal_() : super.internal_();
+  get runtimeType => PasswordCredential;
+  toString() => super.toString();
+}
+patch class Path2D {
+  static Type get instanceRuntimeType => Path2DImpl;
+
+}
+class Path2DImpl extends Path2D implements js_library.JSObjectInterfacesDom {
+  Path2DImpl.internal_() : super.internal_();
+  get runtimeType => Path2D;
+  toString() => super.toString();
+}
+patch class Performance {
+  static Type get instanceRuntimeType => PerformanceImpl;
+
+}
+class PerformanceImpl extends Performance implements js_library.JSObjectInterfacesDom {
+  PerformanceImpl.internal_() : super.internal_();
+  get runtimeType => Performance;
+  toString() => super.toString();
+}
+patch class PerformanceCompositeTiming {
+  static Type get instanceRuntimeType => PerformanceCompositeTimingImpl;
+
+}
+class PerformanceCompositeTimingImpl extends PerformanceCompositeTiming implements js_library.JSObjectInterfacesDom {
+  PerformanceCompositeTimingImpl.internal_() : super.internal_();
+  get runtimeType => PerformanceCompositeTiming;
+  toString() => super.toString();
+}
+patch class PerformanceEntry {
+  static Type get instanceRuntimeType => PerformanceEntryImpl;
+
+}
+class PerformanceEntryImpl extends PerformanceEntry implements js_library.JSObjectInterfacesDom {
+  PerformanceEntryImpl.internal_() : super.internal_();
+  get runtimeType => PerformanceEntry;
+  toString() => super.toString();
+}
+patch class PerformanceMark {
+  static Type get instanceRuntimeType => PerformanceMarkImpl;
+
+}
+class PerformanceMarkImpl extends PerformanceMark implements js_library.JSObjectInterfacesDom {
+  PerformanceMarkImpl.internal_() : super.internal_();
+  get runtimeType => PerformanceMark;
+  toString() => super.toString();
+}
+patch class PerformanceMeasure {
+  static Type get instanceRuntimeType => PerformanceMeasureImpl;
+
+}
+class PerformanceMeasureImpl extends PerformanceMeasure implements js_library.JSObjectInterfacesDom {
+  PerformanceMeasureImpl.internal_() : super.internal_();
+  get runtimeType => PerformanceMeasure;
+  toString() => super.toString();
+}
+patch class PerformanceNavigation {
+  static Type get instanceRuntimeType => PerformanceNavigationImpl;
+
+}
+class PerformanceNavigationImpl extends PerformanceNavigation implements js_library.JSObjectInterfacesDom {
+  PerformanceNavigationImpl.internal_() : super.internal_();
+  get runtimeType => PerformanceNavigation;
+  toString() => super.toString();
+}
+patch class PerformanceRenderTiming {
+  static Type get instanceRuntimeType => PerformanceRenderTimingImpl;
+
+}
+class PerformanceRenderTimingImpl extends PerformanceRenderTiming implements js_library.JSObjectInterfacesDom {
+  PerformanceRenderTimingImpl.internal_() : super.internal_();
+  get runtimeType => PerformanceRenderTiming;
+  toString() => super.toString();
+}
+patch class PerformanceResourceTiming {
+  static Type get instanceRuntimeType => PerformanceResourceTimingImpl;
+
+}
+class PerformanceResourceTimingImpl extends PerformanceResourceTiming implements js_library.JSObjectInterfacesDom {
+  PerformanceResourceTimingImpl.internal_() : super.internal_();
+  get runtimeType => PerformanceResourceTiming;
+  toString() => super.toString();
+}
+patch class PerformanceTiming {
+  static Type get instanceRuntimeType => PerformanceTimingImpl;
+
+}
+class PerformanceTimingImpl extends PerformanceTiming implements js_library.JSObjectInterfacesDom {
+  PerformanceTimingImpl.internal_() : super.internal_();
+  get runtimeType => PerformanceTiming;
+  toString() => super.toString();
+}
+patch class PeriodicSyncEvent {
+  static Type get instanceRuntimeType => PeriodicSyncEventImpl;
+
+}
+class PeriodicSyncEventImpl extends PeriodicSyncEvent implements js_library.JSObjectInterfacesDom {
+  PeriodicSyncEventImpl.internal_() : super.internal_();
+  get runtimeType => PeriodicSyncEvent;
+  toString() => super.toString();
+}
+patch class PeriodicSyncManager {
+  static Type get instanceRuntimeType => PeriodicSyncManagerImpl;
+
+}
+class PeriodicSyncManagerImpl extends PeriodicSyncManager implements js_library.JSObjectInterfacesDom {
+  PeriodicSyncManagerImpl.internal_() : super.internal_();
+  get runtimeType => PeriodicSyncManager;
+  toString() => super.toString();
+}
+patch class PeriodicSyncRegistration {
+  static Type get instanceRuntimeType => PeriodicSyncRegistrationImpl;
+
+}
+class PeriodicSyncRegistrationImpl extends PeriodicSyncRegistration implements js_library.JSObjectInterfacesDom {
+  PeriodicSyncRegistrationImpl.internal_() : super.internal_();
+  get runtimeType => PeriodicSyncRegistration;
+  toString() => super.toString();
+}
+patch class PermissionStatus {
+  static Type get instanceRuntimeType => PermissionStatusImpl;
+
+}
+class PermissionStatusImpl extends PermissionStatus implements js_library.JSObjectInterfacesDom {
+  PermissionStatusImpl.internal_() : super.internal_();
+  get runtimeType => PermissionStatus;
+  toString() => super.toString();
+}
+patch class Permissions {
+  static Type get instanceRuntimeType => PermissionsImpl;
+
+}
+class PermissionsImpl extends Permissions implements js_library.JSObjectInterfacesDom {
+  PermissionsImpl.internal_() : super.internal_();
+  get runtimeType => Permissions;
+  toString() => super.toString();
+}
+patch class PictureElement {
+  static Type get instanceRuntimeType => PictureElementImpl;
+
+}
+class PictureElementImpl extends PictureElement implements js_library.JSObjectInterfacesDom {
+  PictureElementImpl.internal_() : super.internal_();
+  get runtimeType => PictureElement;
+  toString() => super.toString();
+}
+patch class Plugin {
+  static Type get instanceRuntimeType => PluginImpl;
+
+}
+class PluginImpl extends Plugin implements js_library.JSObjectInterfacesDom {
+  PluginImpl.internal_() : super.internal_();
+  get runtimeType => Plugin;
+  toString() => super.toString();
+}
+patch class PluginArray {
+  static Type get instanceRuntimeType => PluginArrayImpl;
+
+}
+class PluginArrayImpl extends PluginArray implements js_library.JSObjectInterfacesDom {
+  PluginArrayImpl.internal_() : super.internal_();
+  get runtimeType => PluginArray;
+  toString() => super.toString();
+}
+patch class PluginPlaceholderElement {
+  static Type get instanceRuntimeType => PluginPlaceholderElementImpl;
+
+}
+class PluginPlaceholderElementImpl extends PluginPlaceholderElement implements js_library.JSObjectInterfacesDom {
+  PluginPlaceholderElementImpl.internal_() : super.internal_();
+  get runtimeType => PluginPlaceholderElement;
+  toString() => super.toString();
+}
+patch class PointerEvent {
+  static Type get instanceRuntimeType => PointerEventImpl;
+
+}
+class PointerEventImpl extends PointerEvent implements js_library.JSObjectInterfacesDom {
+  PointerEventImpl.internal_() : super.internal_();
+  get runtimeType => PointerEvent;
+  toString() => super.toString();
+}
+patch class PopStateEvent {
+  static Type get instanceRuntimeType => PopStateEventImpl;
+
+}
+class PopStateEventImpl extends PopStateEvent implements js_library.JSObjectInterfacesDom {
+  PopStateEventImpl.internal_() : super.internal_();
+  get runtimeType => PopStateEvent;
+  toString() => super.toString();
+}
+patch class PositionError {
+  static Type get instanceRuntimeType => PositionErrorImpl;
+
+}
+class PositionErrorImpl extends PositionError implements js_library.JSObjectInterfacesDom {
+  PositionErrorImpl.internal_() : super.internal_();
+  get runtimeType => PositionError;
+  toString() => super.toString();
+}
+patch class PositionSensorVRDevice {
+  static Type get instanceRuntimeType => PositionSensorVRDeviceImpl;
+
+}
+class PositionSensorVRDeviceImpl extends PositionSensorVRDevice implements js_library.JSObjectInterfacesDom {
+  PositionSensorVRDeviceImpl.internal_() : super.internal_();
+  get runtimeType => PositionSensorVRDevice;
+  toString() => super.toString();
+}
+patch class PreElement {
+  static Type get instanceRuntimeType => PreElementImpl;
+
+}
+class PreElementImpl extends PreElement implements js_library.JSObjectInterfacesDom {
+  PreElementImpl.internal_() : super.internal_();
+  get runtimeType => PreElement;
+  toString() => super.toString();
+}
+patch class Presentation {
+  static Type get instanceRuntimeType => PresentationImpl;
+
+}
+class PresentationImpl extends Presentation implements js_library.JSObjectInterfacesDom {
+  PresentationImpl.internal_() : super.internal_();
+  get runtimeType => Presentation;
+  toString() => super.toString();
+}
+patch class PresentationAvailability {
+  static Type get instanceRuntimeType => PresentationAvailabilityImpl;
+
+}
+class PresentationAvailabilityImpl extends PresentationAvailability implements js_library.JSObjectInterfacesDom {
+  PresentationAvailabilityImpl.internal_() : super.internal_();
+  get runtimeType => PresentationAvailability;
+  toString() => super.toString();
+}
+patch class PresentationSession {
+  static Type get instanceRuntimeType => PresentationSessionImpl;
+
+}
+class PresentationSessionImpl extends PresentationSession implements js_library.JSObjectInterfacesDom {
+  PresentationSessionImpl.internal_() : super.internal_();
+  get runtimeType => PresentationSession;
+  toString() => super.toString();
+}
+patch class ProcessingInstruction {
+  static Type get instanceRuntimeType => ProcessingInstructionImpl;
+
+}
+class ProcessingInstructionImpl extends ProcessingInstruction implements js_library.JSObjectInterfacesDom {
+  ProcessingInstructionImpl.internal_() : super.internal_();
+  get runtimeType => ProcessingInstruction;
+  toString() => super.toString();
+}
+patch class ProgressElement {
+  static Type get instanceRuntimeType => ProgressElementImpl;
+
+}
+class ProgressElementImpl extends ProgressElement implements js_library.JSObjectInterfacesDom {
+  ProgressElementImpl.internal_() : super.internal_();
+  get runtimeType => ProgressElement;
+  toString() => super.toString();
+}
+patch class ProgressEvent {
+  static Type get instanceRuntimeType => ProgressEventImpl;
+
+}
+class ProgressEventImpl extends ProgressEvent implements js_library.JSObjectInterfacesDom {
+  ProgressEventImpl.internal_() : super.internal_();
+  get runtimeType => ProgressEvent;
+  toString() => super.toString();
+}
+patch class PromiseRejectionEvent {
+  static Type get instanceRuntimeType => PromiseRejectionEventImpl;
+
+}
+class PromiseRejectionEventImpl extends PromiseRejectionEvent implements js_library.JSObjectInterfacesDom {
+  PromiseRejectionEventImpl.internal_() : super.internal_();
+  get runtimeType => PromiseRejectionEvent;
+  toString() => super.toString();
+}
+patch class PushEvent {
+  static Type get instanceRuntimeType => PushEventImpl;
+
+}
+class PushEventImpl extends PushEvent implements js_library.JSObjectInterfacesDom {
+  PushEventImpl.internal_() : super.internal_();
+  get runtimeType => PushEvent;
+  toString() => super.toString();
+}
+patch class PushManager {
+  static Type get instanceRuntimeType => PushManagerImpl;
+
+}
+class PushManagerImpl extends PushManager implements js_library.JSObjectInterfacesDom {
+  PushManagerImpl.internal_() : super.internal_();
+  get runtimeType => PushManager;
+  toString() => super.toString();
+}
+patch class PushMessageData {
+  static Type get instanceRuntimeType => PushMessageDataImpl;
+
+}
+class PushMessageDataImpl extends PushMessageData implements js_library.JSObjectInterfacesDom {
+  PushMessageDataImpl.internal_() : super.internal_();
+  get runtimeType => PushMessageData;
+  toString() => super.toString();
+}
+patch class PushSubscription {
+  static Type get instanceRuntimeType => PushSubscriptionImpl;
+
+}
+class PushSubscriptionImpl extends PushSubscription implements js_library.JSObjectInterfacesDom {
+  PushSubscriptionImpl.internal_() : super.internal_();
+  get runtimeType => PushSubscription;
+  toString() => super.toString();
+}
+patch class QuoteElement {
+  static Type get instanceRuntimeType => QuoteElementImpl;
+
+}
+class QuoteElementImpl extends QuoteElement implements js_library.JSObjectInterfacesDom {
+  QuoteElementImpl.internal_() : super.internal_();
+  get runtimeType => QuoteElement;
+  toString() => super.toString();
+}
+patch class Range {
+  static Type get instanceRuntimeType => RangeImpl;
+
+}
+class RangeImpl extends Range implements js_library.JSObjectInterfacesDom {
+  RangeImpl.internal_() : super.internal_();
+  get runtimeType => Range;
+  toString() => super.toString();
+}
+patch class ReadableByteStream {
+  static Type get instanceRuntimeType => ReadableByteStreamImpl;
+
+}
+class ReadableByteStreamImpl extends ReadableByteStream implements js_library.JSObjectInterfacesDom {
+  ReadableByteStreamImpl.internal_() : super.internal_();
+  get runtimeType => ReadableByteStream;
+  toString() => super.toString();
+}
+patch class ReadableByteStreamReader {
+  static Type get instanceRuntimeType => ReadableByteStreamReaderImpl;
+
+}
+class ReadableByteStreamReaderImpl extends ReadableByteStreamReader implements js_library.JSObjectInterfacesDom {
+  ReadableByteStreamReaderImpl.internal_() : super.internal_();
+  get runtimeType => ReadableByteStreamReader;
+  toString() => super.toString();
+}
+patch class ReadableStream {
+  static Type get instanceRuntimeType => ReadableStreamImpl;
+
+}
+class ReadableStreamImpl extends ReadableStream implements js_library.JSObjectInterfacesDom {
+  ReadableStreamImpl.internal_() : super.internal_();
+  get runtimeType => ReadableStream;
+  toString() => super.toString();
+}
+patch class ReadableStreamReader {
+  static Type get instanceRuntimeType => ReadableStreamReaderImpl;
+
+}
+class ReadableStreamReaderImpl extends ReadableStreamReader implements js_library.JSObjectInterfacesDom {
+  ReadableStreamReaderImpl.internal_() : super.internal_();
+  get runtimeType => ReadableStreamReader;
+  toString() => super.toString();
+}
+patch class RelatedEvent {
+  static Type get instanceRuntimeType => RelatedEventImpl;
+
+}
+class RelatedEventImpl extends RelatedEvent implements js_library.JSObjectInterfacesDom {
+  RelatedEventImpl.internal_() : super.internal_();
+  get runtimeType => RelatedEvent;
+  toString() => super.toString();
+}
+patch class ResourceProgressEvent {
+  static Type get instanceRuntimeType => ResourceProgressEventImpl;
+
+}
+class ResourceProgressEventImpl extends ResourceProgressEvent implements js_library.JSObjectInterfacesDom {
+  ResourceProgressEventImpl.internal_() : super.internal_();
+  get runtimeType => ResourceProgressEvent;
+  toString() => super.toString();
+}
+patch class RtcDataChannel {
+  static Type get instanceRuntimeType => RtcDataChannelImpl;
+
+}
+class RtcDataChannelImpl extends RtcDataChannel implements js_library.JSObjectInterfacesDom {
+  RtcDataChannelImpl.internal_() : super.internal_();
+  get runtimeType => RtcDataChannel;
+  toString() => super.toString();
+}
+patch class RtcDataChannelEvent {
+  static Type get instanceRuntimeType => RtcDataChannelEventImpl;
+
+}
+class RtcDataChannelEventImpl extends RtcDataChannelEvent implements js_library.JSObjectInterfacesDom {
+  RtcDataChannelEventImpl.internal_() : super.internal_();
+  get runtimeType => RtcDataChannelEvent;
+  toString() => super.toString();
+}
+patch class RtcDtmfSender {
+  static Type get instanceRuntimeType => RtcDtmfSenderImpl;
+
+}
+class RtcDtmfSenderImpl extends RtcDtmfSender implements js_library.JSObjectInterfacesDom {
+  RtcDtmfSenderImpl.internal_() : super.internal_();
+  get runtimeType => RtcDtmfSender;
+  toString() => super.toString();
+}
+patch class RtcDtmfToneChangeEvent {
+  static Type get instanceRuntimeType => RtcDtmfToneChangeEventImpl;
+
+}
+class RtcDtmfToneChangeEventImpl extends RtcDtmfToneChangeEvent implements js_library.JSObjectInterfacesDom {
+  RtcDtmfToneChangeEventImpl.internal_() : super.internal_();
+  get runtimeType => RtcDtmfToneChangeEvent;
+  toString() => super.toString();
+}
+patch class RtcIceCandidate {
+  static Type get instanceRuntimeType => RtcIceCandidateImpl;
+
+}
+class RtcIceCandidateImpl extends RtcIceCandidate implements js_library.JSObjectInterfacesDom {
+  RtcIceCandidateImpl.internal_() : super.internal_();
+  get runtimeType => RtcIceCandidate;
+  toString() => super.toString();
+}
+patch class RtcIceCandidateEvent {
+  static Type get instanceRuntimeType => RtcIceCandidateEventImpl;
+
+}
+class RtcIceCandidateEventImpl extends RtcIceCandidateEvent implements js_library.JSObjectInterfacesDom {
+  RtcIceCandidateEventImpl.internal_() : super.internal_();
+  get runtimeType => RtcIceCandidateEvent;
+  toString() => super.toString();
+}
+patch class RtcPeerConnection {
+  static Type get instanceRuntimeType => RtcPeerConnectionImpl;
+
+}
+class RtcPeerConnectionImpl extends RtcPeerConnection implements js_library.JSObjectInterfacesDom {
+  RtcPeerConnectionImpl.internal_() : super.internal_();
+  get runtimeType => RtcPeerConnection;
+  toString() => super.toString();
+}
+patch class RtcSessionDescription {
+  static Type get instanceRuntimeType => RtcSessionDescriptionImpl;
+
+}
+class RtcSessionDescriptionImpl extends RtcSessionDescription implements js_library.JSObjectInterfacesDom {
+  RtcSessionDescriptionImpl.internal_() : super.internal_();
+  get runtimeType => RtcSessionDescription;
+  toString() => super.toString();
+}
+patch class RtcStatsReport {
+  static Type get instanceRuntimeType => RtcStatsReportImpl;
+
+}
+class RtcStatsReportImpl extends RtcStatsReport implements js_library.JSObjectInterfacesDom {
+  RtcStatsReportImpl.internal_() : super.internal_();
+  get runtimeType => RtcStatsReport;
+  toString() => super.toString();
+}
+patch class RtcStatsResponse {
+  static Type get instanceRuntimeType => RtcStatsResponseImpl;
+
+}
+class RtcStatsResponseImpl extends RtcStatsResponse implements js_library.JSObjectInterfacesDom {
+  RtcStatsResponseImpl.internal_() : super.internal_();
+  get runtimeType => RtcStatsResponse;
+  toString() => super.toString();
+}
+patch class Screen {
+  static Type get instanceRuntimeType => ScreenImpl;
+
+}
+class ScreenImpl extends Screen implements js_library.JSObjectInterfacesDom {
+  ScreenImpl.internal_() : super.internal_();
+  get runtimeType => Screen;
+  toString() => super.toString();
+}
+patch class ScreenOrientation {
+  static Type get instanceRuntimeType => ScreenOrientationImpl;
+
+}
+class ScreenOrientationImpl extends ScreenOrientation implements js_library.JSObjectInterfacesDom {
+  ScreenOrientationImpl.internal_() : super.internal_();
+  get runtimeType => ScreenOrientation;
+  toString() => super.toString();
+}
+patch class ScriptElement {
+  static Type get instanceRuntimeType => ScriptElementImpl;
+
+}
+class ScriptElementImpl extends ScriptElement implements js_library.JSObjectInterfacesDom {
+  ScriptElementImpl.internal_() : super.internal_();
+  get runtimeType => ScriptElement;
+  toString() => super.toString();
+}
+patch class ScrollState {
+  static Type get instanceRuntimeType => ScrollStateImpl;
+
+}
+class ScrollStateImpl extends ScrollState implements js_library.JSObjectInterfacesDom {
+  ScrollStateImpl.internal_() : super.internal_();
+  get runtimeType => ScrollState;
+  toString() => super.toString();
+}
+patch class SecurityPolicyViolationEvent {
+  static Type get instanceRuntimeType => SecurityPolicyViolationEventImpl;
+
+}
+class SecurityPolicyViolationEventImpl extends SecurityPolicyViolationEvent implements js_library.JSObjectInterfacesDom {
+  SecurityPolicyViolationEventImpl.internal_() : super.internal_();
+  get runtimeType => SecurityPolicyViolationEvent;
+  toString() => super.toString();
+}
+patch class SelectElement {
+  static Type get instanceRuntimeType => SelectElementImpl;
+
+}
+class SelectElementImpl extends SelectElement implements js_library.JSObjectInterfacesDom {
+  SelectElementImpl.internal_() : super.internal_();
+  get runtimeType => SelectElement;
+  toString() => super.toString();
+}
+patch class Selection {
+  static Type get instanceRuntimeType => SelectionImpl;
+
+}
+class SelectionImpl extends Selection implements js_library.JSObjectInterfacesDom {
+  SelectionImpl.internal_() : super.internal_();
+  get runtimeType => Selection;
+  toString() => super.toString();
+}
+patch class ServicePort {
+  static Type get instanceRuntimeType => ServicePortImpl;
+
+}
+class ServicePortImpl extends ServicePort implements js_library.JSObjectInterfacesDom {
+  ServicePortImpl.internal_() : super.internal_();
+  get runtimeType => ServicePort;
+  toString() => super.toString();
+}
+patch class ServicePortCollection {
+  static Type get instanceRuntimeType => ServicePortCollectionImpl;
+
+}
+class ServicePortCollectionImpl extends ServicePortCollection implements js_library.JSObjectInterfacesDom {
+  ServicePortCollectionImpl.internal_() : super.internal_();
+  get runtimeType => ServicePortCollection;
+  toString() => super.toString();
+}
+patch class ServicePortConnectEvent {
+  static Type get instanceRuntimeType => ServicePortConnectEventImpl;
+
+}
+class ServicePortConnectEventImpl extends ServicePortConnectEvent implements js_library.JSObjectInterfacesDom {
+  ServicePortConnectEventImpl.internal_() : super.internal_();
+  get runtimeType => ServicePortConnectEvent;
+  toString() => super.toString();
+}
+patch class ServiceWorkerContainer {
+  static Type get instanceRuntimeType => ServiceWorkerContainerImpl;
+
+}
+class ServiceWorkerContainerImpl extends ServiceWorkerContainer implements js_library.JSObjectInterfacesDom {
+  ServiceWorkerContainerImpl.internal_() : super.internal_();
+  get runtimeType => ServiceWorkerContainer;
+  toString() => super.toString();
+}
+patch class ServiceWorkerGlobalScope {
+  static Type get instanceRuntimeType => ServiceWorkerGlobalScopeImpl;
+
+}
+class ServiceWorkerGlobalScopeImpl extends ServiceWorkerGlobalScope implements js_library.JSObjectInterfacesDom {
+  ServiceWorkerGlobalScopeImpl.internal_() : super.internal_();
+  get runtimeType => ServiceWorkerGlobalScope;
+  toString() => super.toString();
+}
+patch class ServiceWorkerMessageEvent {
+  static Type get instanceRuntimeType => ServiceWorkerMessageEventImpl;
+
+}
+class ServiceWorkerMessageEventImpl extends ServiceWorkerMessageEvent implements js_library.JSObjectInterfacesDom {
+  ServiceWorkerMessageEventImpl.internal_() : super.internal_();
+  get runtimeType => ServiceWorkerMessageEvent;
+  toString() => super.toString();
+}
+patch class ServiceWorkerRegistration {
+  static Type get instanceRuntimeType => ServiceWorkerRegistrationImpl;
+
+}
+class ServiceWorkerRegistrationImpl extends ServiceWorkerRegistration implements js_library.JSObjectInterfacesDom {
+  ServiceWorkerRegistrationImpl.internal_() : super.internal_();
+  get runtimeType => ServiceWorkerRegistration;
+  toString() => super.toString();
+}
+patch class ShadowElement {
+  static Type get instanceRuntimeType => ShadowElementImpl;
+
+}
+class ShadowElementImpl extends ShadowElement implements js_library.JSObjectInterfacesDom {
+  ShadowElementImpl.internal_() : super.internal_();
+  get runtimeType => ShadowElement;
+  toString() => super.toString();
+}
+patch class ShadowRoot {
+  static Type get instanceRuntimeType => ShadowRootImpl;
+
+}
+class ShadowRootImpl extends ShadowRoot implements js_library.JSObjectInterfacesDom {
+  ShadowRootImpl.internal_() : super.internal_();
+  get runtimeType => ShadowRoot;
+  toString() => super.toString();
+}
+patch class SharedArrayBuffer {
+  static Type get instanceRuntimeType => SharedArrayBufferImpl;
+
+}
+class SharedArrayBufferImpl extends SharedArrayBuffer implements js_library.JSObjectInterfacesDom {
+  SharedArrayBufferImpl.internal_() : super.internal_();
+  get runtimeType => SharedArrayBuffer;
+  toString() => super.toString();
+}
+patch class SharedWorker {
+  static Type get instanceRuntimeType => SharedWorkerImpl;
+
+}
+class SharedWorkerImpl extends SharedWorker implements js_library.JSObjectInterfacesDom {
+  SharedWorkerImpl.internal_() : super.internal_();
+  get runtimeType => SharedWorker;
+  toString() => super.toString();
+}
+patch class SharedWorkerGlobalScope {
+  static Type get instanceRuntimeType => SharedWorkerGlobalScopeImpl;
+
+}
+class SharedWorkerGlobalScopeImpl extends SharedWorkerGlobalScope implements js_library.JSObjectInterfacesDom {
+  SharedWorkerGlobalScopeImpl.internal_() : super.internal_();
+  get runtimeType => SharedWorkerGlobalScope;
+  toString() => super.toString();
+}
+patch class SourceBuffer {
+  static Type get instanceRuntimeType => SourceBufferImpl;
+
+}
+class SourceBufferImpl extends SourceBuffer implements js_library.JSObjectInterfacesDom {
+  SourceBufferImpl.internal_() : super.internal_();
+  get runtimeType => SourceBuffer;
+  toString() => super.toString();
+}
+patch class SourceBufferList {
+  static Type get instanceRuntimeType => SourceBufferListImpl;
+
+}
+class SourceBufferListImpl extends SourceBufferList implements js_library.JSObjectInterfacesDom {
+  SourceBufferListImpl.internal_() : super.internal_();
+  get runtimeType => SourceBufferList;
+  toString() => super.toString();
+}
+patch class SourceElement {
+  static Type get instanceRuntimeType => SourceElementImpl;
+
+}
+class SourceElementImpl extends SourceElement implements js_library.JSObjectInterfacesDom {
+  SourceElementImpl.internal_() : super.internal_();
+  get runtimeType => SourceElement;
+  toString() => super.toString();
+}
+patch class SourceInfo {
+  static Type get instanceRuntimeType => SourceInfoImpl;
+
+}
+class SourceInfoImpl extends SourceInfo implements js_library.JSObjectInterfacesDom {
+  SourceInfoImpl.internal_() : super.internal_();
+  get runtimeType => SourceInfo;
+  toString() => super.toString();
+}
+patch class SpanElement {
+  static Type get instanceRuntimeType => SpanElementImpl;
+
+}
+class SpanElementImpl extends SpanElement implements js_library.JSObjectInterfacesDom {
+  SpanElementImpl.internal_() : super.internal_();
+  get runtimeType => SpanElement;
+  toString() => super.toString();
+}
+patch class SpeechGrammar {
+  static Type get instanceRuntimeType => SpeechGrammarImpl;
+
+}
+class SpeechGrammarImpl extends SpeechGrammar implements js_library.JSObjectInterfacesDom {
+  SpeechGrammarImpl.internal_() : super.internal_();
+  get runtimeType => SpeechGrammar;
+  toString() => super.toString();
+}
+patch class SpeechGrammarList {
+  static Type get instanceRuntimeType => SpeechGrammarListImpl;
+
+}
+class SpeechGrammarListImpl extends SpeechGrammarList implements js_library.JSObjectInterfacesDom {
+  SpeechGrammarListImpl.internal_() : super.internal_();
+  get runtimeType => SpeechGrammarList;
+  toString() => super.toString();
+}
+patch class SpeechRecognition {
+  static Type get instanceRuntimeType => SpeechRecognitionImpl;
+
+}
+class SpeechRecognitionImpl extends SpeechRecognition implements js_library.JSObjectInterfacesDom {
+  SpeechRecognitionImpl.internal_() : super.internal_();
+  get runtimeType => SpeechRecognition;
+  toString() => super.toString();
+}
+patch class SpeechRecognitionAlternative {
+  static Type get instanceRuntimeType => SpeechRecognitionAlternativeImpl;
+
+}
+class SpeechRecognitionAlternativeImpl extends SpeechRecognitionAlternative implements js_library.JSObjectInterfacesDom {
+  SpeechRecognitionAlternativeImpl.internal_() : super.internal_();
+  get runtimeType => SpeechRecognitionAlternative;
+  toString() => super.toString();
+}
+patch class SpeechRecognitionError {
+  static Type get instanceRuntimeType => SpeechRecognitionErrorImpl;
+
+}
+class SpeechRecognitionErrorImpl extends SpeechRecognitionError implements js_library.JSObjectInterfacesDom {
+  SpeechRecognitionErrorImpl.internal_() : super.internal_();
+  get runtimeType => SpeechRecognitionError;
+  toString() => super.toString();
+}
+patch class SpeechRecognitionEvent {
+  static Type get instanceRuntimeType => SpeechRecognitionEventImpl;
+
+}
+class SpeechRecognitionEventImpl extends SpeechRecognitionEvent implements js_library.JSObjectInterfacesDom {
+  SpeechRecognitionEventImpl.internal_() : super.internal_();
+  get runtimeType => SpeechRecognitionEvent;
+  toString() => super.toString();
+}
+patch class SpeechRecognitionResult {
+  static Type get instanceRuntimeType => SpeechRecognitionResultImpl;
+
+}
+class SpeechRecognitionResultImpl extends SpeechRecognitionResult implements js_library.JSObjectInterfacesDom {
+  SpeechRecognitionResultImpl.internal_() : super.internal_();
+  get runtimeType => SpeechRecognitionResult;
+  toString() => super.toString();
+}
+patch class SpeechSynthesis {
+  static Type get instanceRuntimeType => SpeechSynthesisImpl;
+
+}
+class SpeechSynthesisImpl extends SpeechSynthesis implements js_library.JSObjectInterfacesDom {
+  SpeechSynthesisImpl.internal_() : super.internal_();
+  get runtimeType => SpeechSynthesis;
+  toString() => super.toString();
+}
+patch class SpeechSynthesisEvent {
+  static Type get instanceRuntimeType => SpeechSynthesisEventImpl;
+
+}
+class SpeechSynthesisEventImpl extends SpeechSynthesisEvent implements js_library.JSObjectInterfacesDom {
+  SpeechSynthesisEventImpl.internal_() : super.internal_();
+  get runtimeType => SpeechSynthesisEvent;
+  toString() => super.toString();
+}
+patch class SpeechSynthesisUtterance {
+  static Type get instanceRuntimeType => SpeechSynthesisUtteranceImpl;
+
+}
+class SpeechSynthesisUtteranceImpl extends SpeechSynthesisUtterance implements js_library.JSObjectInterfacesDom {
+  SpeechSynthesisUtteranceImpl.internal_() : super.internal_();
+  get runtimeType => SpeechSynthesisUtterance;
+  toString() => super.toString();
+}
+patch class SpeechSynthesisVoice {
+  static Type get instanceRuntimeType => SpeechSynthesisVoiceImpl;
+
+}
+class SpeechSynthesisVoiceImpl extends SpeechSynthesisVoice implements js_library.JSObjectInterfacesDom {
+  SpeechSynthesisVoiceImpl.internal_() : super.internal_();
+  get runtimeType => SpeechSynthesisVoice;
+  toString() => super.toString();
+}
+patch class StashedMessagePort {
+  static Type get instanceRuntimeType => StashedMessagePortImpl;
+
+}
+class StashedMessagePortImpl extends StashedMessagePort implements js_library.JSObjectInterfacesDom {
+  StashedMessagePortImpl.internal_() : super.internal_();
+  get runtimeType => StashedMessagePort;
+  toString() => super.toString();
+}
+patch class StashedPortCollection {
+  static Type get instanceRuntimeType => StashedPortCollectionImpl;
+
+}
+class StashedPortCollectionImpl extends StashedPortCollection implements js_library.JSObjectInterfacesDom {
+  StashedPortCollectionImpl.internal_() : super.internal_();
+  get runtimeType => StashedPortCollection;
+  toString() => super.toString();
+}
+patch class Storage {
+  static Type get instanceRuntimeType => StorageImpl;
+
+}
+class StorageImpl extends Storage implements js_library.JSObjectInterfacesDom {
+  StorageImpl.internal_() : super.internal_();
+  get runtimeType => Storage;
+  toString() => super.toString();
+}
+patch class StorageEvent {
+  static Type get instanceRuntimeType => StorageEventImpl;
+
+}
+class StorageEventImpl extends StorageEvent implements js_library.JSObjectInterfacesDom {
+  StorageEventImpl.internal_() : super.internal_();
+  get runtimeType => StorageEvent;
+  toString() => super.toString();
+}
+patch class StorageInfo {
+  static Type get instanceRuntimeType => StorageInfoImpl;
+
+}
+class StorageInfoImpl extends StorageInfo implements js_library.JSObjectInterfacesDom {
+  StorageInfoImpl.internal_() : super.internal_();
+  get runtimeType => StorageInfo;
+  toString() => super.toString();
+}
+patch class StorageQuota {
+  static Type get instanceRuntimeType => StorageQuotaImpl;
+
+}
+class StorageQuotaImpl extends StorageQuota implements js_library.JSObjectInterfacesDom {
+  StorageQuotaImpl.internal_() : super.internal_();
+  get runtimeType => StorageQuota;
+  toString() => super.toString();
+}
+patch class StyleElement {
+  static Type get instanceRuntimeType => StyleElementImpl;
+
+}
+class StyleElementImpl extends StyleElement implements js_library.JSObjectInterfacesDom {
+  StyleElementImpl.internal_() : super.internal_();
+  get runtimeType => StyleElement;
+  toString() => super.toString();
+}
+patch class StyleMedia {
+  static Type get instanceRuntimeType => StyleMediaImpl;
+
+}
+class StyleMediaImpl extends StyleMedia implements js_library.JSObjectInterfacesDom {
+  StyleMediaImpl.internal_() : super.internal_();
+  get runtimeType => StyleMedia;
+  toString() => super.toString();
+}
+patch class StyleSheet {
+  static Type get instanceRuntimeType => StyleSheetImpl;
+
+}
+class StyleSheetImpl extends StyleSheet implements js_library.JSObjectInterfacesDom {
+  StyleSheetImpl.internal_() : super.internal_();
+  get runtimeType => StyleSheet;
+  toString() => super.toString();
+}
+patch class SyncEvent {
+  static Type get instanceRuntimeType => SyncEventImpl;
+
+}
+class SyncEventImpl extends SyncEvent implements js_library.JSObjectInterfacesDom {
+  SyncEventImpl.internal_() : super.internal_();
+  get runtimeType => SyncEvent;
+  toString() => super.toString();
+}
+patch class SyncManager {
+  static Type get instanceRuntimeType => SyncManagerImpl;
+
+}
+class SyncManagerImpl extends SyncManager implements js_library.JSObjectInterfacesDom {
+  SyncManagerImpl.internal_() : super.internal_();
+  get runtimeType => SyncManager;
+  toString() => super.toString();
+}
+patch class SyncRegistration {
+  static Type get instanceRuntimeType => SyncRegistrationImpl;
+
+}
+class SyncRegistrationImpl extends SyncRegistration implements js_library.JSObjectInterfacesDom {
+  SyncRegistrationImpl.internal_() : super.internal_();
+  get runtimeType => SyncRegistration;
+  toString() => super.toString();
+}
+patch class TableCaptionElement {
+  static Type get instanceRuntimeType => TableCaptionElementImpl;
+
+}
+class TableCaptionElementImpl extends TableCaptionElement implements js_library.JSObjectInterfacesDom {
+  TableCaptionElementImpl.internal_() : super.internal_();
+  get runtimeType => TableCaptionElement;
+  toString() => super.toString();
+}
+patch class TableCellElement {
+  static Type get instanceRuntimeType => TableCellElementImpl;
+
+}
+class TableCellElementImpl extends TableCellElement implements js_library.JSObjectInterfacesDom {
+  TableCellElementImpl.internal_() : super.internal_();
+  get runtimeType => TableCellElement;
+  toString() => super.toString();
+}
+patch class TableColElement {
+  static Type get instanceRuntimeType => TableColElementImpl;
+
+}
+class TableColElementImpl extends TableColElement implements js_library.JSObjectInterfacesDom {
+  TableColElementImpl.internal_() : super.internal_();
+  get runtimeType => TableColElement;
+  toString() => super.toString();
+}
+patch class TableElement {
+  static Type get instanceRuntimeType => TableElementImpl;
+
+}
+class TableElementImpl extends TableElement implements js_library.JSObjectInterfacesDom {
+  TableElementImpl.internal_() : super.internal_();
+  get runtimeType => TableElement;
+  toString() => super.toString();
+}
+patch class TableRowElement {
+  static Type get instanceRuntimeType => TableRowElementImpl;
+
+}
+class TableRowElementImpl extends TableRowElement implements js_library.JSObjectInterfacesDom {
+  TableRowElementImpl.internal_() : super.internal_();
+  get runtimeType => TableRowElement;
+  toString() => super.toString();
+}
+patch class TableSectionElement {
+  static Type get instanceRuntimeType => TableSectionElementImpl;
+
+}
+class TableSectionElementImpl extends TableSectionElement implements js_library.JSObjectInterfacesDom {
+  TableSectionElementImpl.internal_() : super.internal_();
+  get runtimeType => TableSectionElement;
+  toString() => super.toString();
+}
+patch class TemplateElement {
+  static Type get instanceRuntimeType => TemplateElementImpl;
+
+}
+class TemplateElementImpl extends TemplateElement implements js_library.JSObjectInterfacesDom {
+  TemplateElementImpl.internal_() : super.internal_();
+  get runtimeType => TemplateElement;
+  toString() => super.toString();
+}
+patch class Text {
+  static Type get instanceRuntimeType => TextImpl;
+
+}
+class TextImpl extends Text implements js_library.JSObjectInterfacesDom {
+  TextImpl.internal_() : super.internal_();
+  get runtimeType => Text;
+  toString() => super.toString();
+}
+patch class TextAreaElement {
+  static Type get instanceRuntimeType => TextAreaElementImpl;
+
+}
+class TextAreaElementImpl extends TextAreaElement implements js_library.JSObjectInterfacesDom {
+  TextAreaElementImpl.internal_() : super.internal_();
+  get runtimeType => TextAreaElement;
+  toString() => super.toString();
+}
+patch class TextEvent {
+  static Type get instanceRuntimeType => TextEventImpl;
+
+}
+class TextEventImpl extends TextEvent implements js_library.JSObjectInterfacesDom {
+  TextEventImpl.internal_() : super.internal_();
+  get runtimeType => TextEvent;
+  toString() => super.toString();
+}
+patch class TextMetrics {
+  static Type get instanceRuntimeType => TextMetricsImpl;
+
+}
+class TextMetricsImpl extends TextMetrics implements js_library.JSObjectInterfacesDom {
+  TextMetricsImpl.internal_() : super.internal_();
+  get runtimeType => TextMetrics;
+  toString() => super.toString();
+}
+patch class TextTrack {
+  static Type get instanceRuntimeType => TextTrackImpl;
+
+}
+class TextTrackImpl extends TextTrack implements js_library.JSObjectInterfacesDom {
+  TextTrackImpl.internal_() : super.internal_();
+  get runtimeType => TextTrack;
+  toString() => super.toString();
+}
+patch class TextTrackCue {
+  static Type get instanceRuntimeType => TextTrackCueImpl;
+
+}
+class TextTrackCueImpl extends TextTrackCue implements js_library.JSObjectInterfacesDom {
+  TextTrackCueImpl.internal_() : super.internal_();
+  get runtimeType => TextTrackCue;
+  toString() => super.toString();
+}
+patch class TextTrackCueList {
+  static Type get instanceRuntimeType => TextTrackCueListImpl;
+
+}
+class TextTrackCueListImpl extends TextTrackCueList implements js_library.JSObjectInterfacesDom {
+  TextTrackCueListImpl.internal_() : super.internal_();
+  get runtimeType => TextTrackCueList;
+  toString() => super.toString();
+}
+patch class TextTrackList {
+  static Type get instanceRuntimeType => TextTrackListImpl;
+
+}
+class TextTrackListImpl extends TextTrackList implements js_library.JSObjectInterfacesDom {
+  TextTrackListImpl.internal_() : super.internal_();
+  get runtimeType => TextTrackList;
+  toString() => super.toString();
+}
+patch class TimeRanges {
+  static Type get instanceRuntimeType => TimeRangesImpl;
+
+}
+class TimeRangesImpl extends TimeRanges implements js_library.JSObjectInterfacesDom {
+  TimeRangesImpl.internal_() : super.internal_();
+  get runtimeType => TimeRanges;
+  toString() => super.toString();
+}
+patch class TitleElement {
+  static Type get instanceRuntimeType => TitleElementImpl;
+
+}
+class TitleElementImpl extends TitleElement implements js_library.JSObjectInterfacesDom {
+  TitleElementImpl.internal_() : super.internal_();
+  get runtimeType => TitleElement;
+  toString() => super.toString();
+}
+patch class Touch {
+  static Type get instanceRuntimeType => TouchImpl;
+
+}
+class TouchImpl extends Touch implements js_library.JSObjectInterfacesDom {
+  TouchImpl.internal_() : super.internal_();
+  get runtimeType => Touch;
+  toString() => super.toString();
+}
+patch class TouchEvent {
+  static Type get instanceRuntimeType => TouchEventImpl;
+
+}
+class TouchEventImpl extends TouchEvent implements js_library.JSObjectInterfacesDom {
+  TouchEventImpl.internal_() : super.internal_();
+  get runtimeType => TouchEvent;
+  toString() => super.toString();
+}
+patch class TouchList {
+  static Type get instanceRuntimeType => TouchListImpl;
+
+}
+class TouchListImpl extends TouchList implements js_library.JSObjectInterfacesDom {
+  TouchListImpl.internal_() : super.internal_();
+  get runtimeType => TouchList;
+  toString() => super.toString();
+}
+patch class TrackDefault {
+  static Type get instanceRuntimeType => TrackDefaultImpl;
+
+}
+class TrackDefaultImpl extends TrackDefault implements js_library.JSObjectInterfacesDom {
+  TrackDefaultImpl.internal_() : super.internal_();
+  get runtimeType => TrackDefault;
+  toString() => super.toString();
+}
+patch class TrackDefaultList {
+  static Type get instanceRuntimeType => TrackDefaultListImpl;
+
+}
+class TrackDefaultListImpl extends TrackDefaultList implements js_library.JSObjectInterfacesDom {
+  TrackDefaultListImpl.internal_() : super.internal_();
+  get runtimeType => TrackDefaultList;
+  toString() => super.toString();
+}
+patch class TrackElement {
+  static Type get instanceRuntimeType => TrackElementImpl;
+
+}
+class TrackElementImpl extends TrackElement implements js_library.JSObjectInterfacesDom {
+  TrackElementImpl.internal_() : super.internal_();
+  get runtimeType => TrackElement;
+  toString() => super.toString();
+}
+patch class TrackEvent {
+  static Type get instanceRuntimeType => TrackEventImpl;
+
+}
+class TrackEventImpl extends TrackEvent implements js_library.JSObjectInterfacesDom {
+  TrackEventImpl.internal_() : super.internal_();
+  get runtimeType => TrackEvent;
+  toString() => super.toString();
+}
+patch class TransitionEvent {
+  static Type get instanceRuntimeType => TransitionEventImpl;
+
+}
+class TransitionEventImpl extends TransitionEvent implements js_library.JSObjectInterfacesDom {
+  TransitionEventImpl.internal_() : super.internal_();
+  get runtimeType => TransitionEvent;
+  toString() => super.toString();
+}
+patch class TreeWalker {
+  static Type get instanceRuntimeType => TreeWalkerImpl;
+
+}
+class TreeWalkerImpl extends TreeWalker implements js_library.JSObjectInterfacesDom {
+  TreeWalkerImpl.internal_() : super.internal_();
+  get runtimeType => TreeWalker;
+  toString() => super.toString();
+}
+patch class UIEvent {
+  static Type get instanceRuntimeType => UIEventImpl;
+
+}
+class UIEventImpl extends UIEvent implements js_library.JSObjectInterfacesDom {
+  UIEventImpl.internal_() : super.internal_();
+  get runtimeType => UIEvent;
+  toString() => super.toString();
+}
+patch class UListElement {
+  static Type get instanceRuntimeType => UListElementImpl;
+
+}
+class UListElementImpl extends UListElement implements js_library.JSObjectInterfacesDom {
+  UListElementImpl.internal_() : super.internal_();
+  get runtimeType => UListElement;
+  toString() => super.toString();
+}
+patch class UnknownElement {
+  static Type get instanceRuntimeType => UnknownElementImpl;
+
+}
+class UnknownElementImpl extends UnknownElement implements js_library.JSObjectInterfacesDom {
+  UnknownElementImpl.internal_() : super.internal_();
+  get runtimeType => UnknownElement;
+  toString() => super.toString();
+}
+patch class Url {
+  static Type get instanceRuntimeType => UrlImpl;
+
+}
+class UrlImpl extends Url implements js_library.JSObjectInterfacesDom {
+  UrlImpl.internal_() : super.internal_();
+  get runtimeType => Url;
+  toString() => super.toString();
+}
+patch class UrlUtils {
+  static Type get instanceRuntimeType => UrlUtilsImpl;
+
+}
+class UrlUtilsImpl extends UrlUtils implements js_library.JSObjectInterfacesDom {
+  UrlUtilsImpl.internal_() : super.internal_();
+  get runtimeType => UrlUtils;
+  toString() => super.toString();
+}
+patch class UrlUtilsReadOnly {
+  static Type get instanceRuntimeType => UrlUtilsReadOnlyImpl;
+
+}
+class UrlUtilsReadOnlyImpl extends UrlUtilsReadOnly implements js_library.JSObjectInterfacesDom {
+  UrlUtilsReadOnlyImpl.internal_() : super.internal_();
+  get runtimeType => UrlUtilsReadOnly;
+  toString() => super.toString();
+}
+patch class VRDevice {
+  static Type get instanceRuntimeType => VRDeviceImpl;
+
+}
+class VRDeviceImpl extends VRDevice implements js_library.JSObjectInterfacesDom {
+  VRDeviceImpl.internal_() : super.internal_();
+  get runtimeType => VRDevice;
+  toString() => super.toString();
+}
+patch class VREyeParameters {
+  static Type get instanceRuntimeType => VREyeParametersImpl;
+
+}
+class VREyeParametersImpl extends VREyeParameters implements js_library.JSObjectInterfacesDom {
+  VREyeParametersImpl.internal_() : super.internal_();
+  get runtimeType => VREyeParameters;
+  toString() => super.toString();
+}
+patch class VRFieldOfView {
+  static Type get instanceRuntimeType => VRFieldOfViewImpl;
+
+}
+class VRFieldOfViewImpl extends VRFieldOfView implements js_library.JSObjectInterfacesDom {
+  VRFieldOfViewImpl.internal_() : super.internal_();
+  get runtimeType => VRFieldOfView;
+  toString() => super.toString();
+}
+patch class VRPositionState {
+  static Type get instanceRuntimeType => VRPositionStateImpl;
+
+}
+class VRPositionStateImpl extends VRPositionState implements js_library.JSObjectInterfacesDom {
+  VRPositionStateImpl.internal_() : super.internal_();
+  get runtimeType => VRPositionState;
+  toString() => super.toString();
+}
+patch class ValidityState {
+  static Type get instanceRuntimeType => ValidityStateImpl;
+
+}
+class ValidityStateImpl extends ValidityState implements js_library.JSObjectInterfacesDom {
+  ValidityStateImpl.internal_() : super.internal_();
+  get runtimeType => ValidityState;
+  toString() => super.toString();
+}
+patch class VideoElement {
+  static Type get instanceRuntimeType => VideoElementImpl;
+
+}
+class VideoElementImpl extends VideoElement implements js_library.JSObjectInterfacesDom {
+  VideoElementImpl.internal_() : super.internal_();
+  get runtimeType => VideoElement;
+  toString() => super.toString();
+}
+patch class VideoPlaybackQuality {
+  static Type get instanceRuntimeType => VideoPlaybackQualityImpl;
+
+}
+class VideoPlaybackQualityImpl extends VideoPlaybackQuality implements js_library.JSObjectInterfacesDom {
+  VideoPlaybackQualityImpl.internal_() : super.internal_();
+  get runtimeType => VideoPlaybackQuality;
+  toString() => super.toString();
+}
+patch class VideoTrack {
+  static Type get instanceRuntimeType => VideoTrackImpl;
+
+}
+class VideoTrackImpl extends VideoTrack implements js_library.JSObjectInterfacesDom {
+  VideoTrackImpl.internal_() : super.internal_();
+  get runtimeType => VideoTrack;
+  toString() => super.toString();
+}
+patch class VideoTrackList {
+  static Type get instanceRuntimeType => VideoTrackListImpl;
+
+}
+class VideoTrackListImpl extends VideoTrackList implements js_library.JSObjectInterfacesDom {
+  VideoTrackListImpl.internal_() : super.internal_();
+  get runtimeType => VideoTrackList;
+  toString() => super.toString();
+}
+patch class VttCue {
+  static Type get instanceRuntimeType => VttCueImpl;
+
+}
+class VttCueImpl extends VttCue implements js_library.JSObjectInterfacesDom {
+  VttCueImpl.internal_() : super.internal_();
+  get runtimeType => VttCue;
+  toString() => super.toString();
+}
+patch class VttRegion {
+  static Type get instanceRuntimeType => VttRegionImpl;
+
+}
+class VttRegionImpl extends VttRegion implements js_library.JSObjectInterfacesDom {
+  VttRegionImpl.internal_() : super.internal_();
+  get runtimeType => VttRegion;
+  toString() => super.toString();
+}
+patch class VttRegionList {
+  static Type get instanceRuntimeType => VttRegionListImpl;
+
+}
+class VttRegionListImpl extends VttRegionList implements js_library.JSObjectInterfacesDom {
+  VttRegionListImpl.internal_() : super.internal_();
+  get runtimeType => VttRegionList;
+  toString() => super.toString();
+}
+patch class WebSocket {
+  static Type get instanceRuntimeType => WebSocketImpl;
+
+}
+class WebSocketImpl extends WebSocket implements js_library.JSObjectInterfacesDom {
+  WebSocketImpl.internal_() : super.internal_();
+  get runtimeType => WebSocket;
+  toString() => super.toString();
+}
+patch class WheelEvent {
+  static Type get instanceRuntimeType => WheelEventImpl;
+
+}
+class WheelEventImpl extends WheelEvent implements js_library.JSObjectInterfacesDom {
+  WheelEventImpl.internal_() : super.internal_();
+  get runtimeType => WheelEvent;
+  toString() => super.toString();
+}
+patch class Window {
+  static Type get instanceRuntimeType => WindowImpl;
+
+}
+class WindowImpl extends Window implements js_library.JSObjectInterfacesDom {
+  WindowImpl.internal_() : super.internal_();
+  get runtimeType => Window;
+  toString() => super.toString();
+}
+patch class WindowBase64 {
+  static Type get instanceRuntimeType => WindowBase64Impl;
+
+}
+class WindowBase64Impl extends WindowBase64 implements js_library.JSObjectInterfacesDom {
+  WindowBase64Impl.internal_() : super.internal_();
+  get runtimeType => WindowBase64;
+  toString() => super.toString();
+}
+patch class WindowClient {
+  static Type get instanceRuntimeType => WindowClientImpl;
+
+}
+class WindowClientImpl extends WindowClient implements js_library.JSObjectInterfacesDom {
+  WindowClientImpl.internal_() : super.internal_();
+  get runtimeType => WindowClient;
+  toString() => super.toString();
+}
+patch class WindowEventHandlers {
+  static Type get instanceRuntimeType => WindowEventHandlersImpl;
+
+}
+class WindowEventHandlersImpl extends WindowEventHandlers implements js_library.JSObjectInterfacesDom {
+  WindowEventHandlersImpl.internal_() : super.internal_();
+  get runtimeType => WindowEventHandlers;
+  toString() => super.toString();
+}
+patch class Worker {
+  static Type get instanceRuntimeType => WorkerImpl;
+
+}
+class WorkerImpl extends Worker implements js_library.JSObjectInterfacesDom {
+  WorkerImpl.internal_() : super.internal_();
+  get runtimeType => Worker;
+  toString() => super.toString();
+}
+patch class WorkerConsole {
+  static Type get instanceRuntimeType => WorkerConsoleImpl;
+
+}
+class WorkerConsoleImpl extends WorkerConsole implements js_library.JSObjectInterfacesDom {
+  WorkerConsoleImpl.internal_() : super.internal_();
+  get runtimeType => WorkerConsole;
+  toString() => super.toString();
+}
+patch class WorkerGlobalScope {
+  static Type get instanceRuntimeType => WorkerGlobalScopeImpl;
+
+}
+class WorkerGlobalScopeImpl extends WorkerGlobalScope implements js_library.JSObjectInterfacesDom {
+  WorkerGlobalScopeImpl.internal_() : super.internal_();
+  get runtimeType => WorkerGlobalScope;
+  toString() => super.toString();
+}
+patch class WorkerPerformance {
+  static Type get instanceRuntimeType => WorkerPerformanceImpl;
+
+}
+class WorkerPerformanceImpl extends WorkerPerformance implements js_library.JSObjectInterfacesDom {
+  WorkerPerformanceImpl.internal_() : super.internal_();
+  get runtimeType => WorkerPerformance;
+  toString() => super.toString();
+}
+patch class XPathEvaluator {
+  static Type get instanceRuntimeType => XPathEvaluatorImpl;
+
+}
+class XPathEvaluatorImpl extends XPathEvaluator implements js_library.JSObjectInterfacesDom {
+  XPathEvaluatorImpl.internal_() : super.internal_();
+  get runtimeType => XPathEvaluator;
+  toString() => super.toString();
+}
+patch class XPathExpression {
+  static Type get instanceRuntimeType => XPathExpressionImpl;
+
+}
+class XPathExpressionImpl extends XPathExpression implements js_library.JSObjectInterfacesDom {
+  XPathExpressionImpl.internal_() : super.internal_();
+  get runtimeType => XPathExpression;
+  toString() => super.toString();
+}
 patch class XPathNSResolver {
   static Type get instanceRuntimeType => XPathNSResolverImpl;
 
@@ -4047,6 +3678,168 @@
   get runtimeType => XPathNSResolver;
   toString() => super.toString();
 }
+patch class XPathResult {
+  static Type get instanceRuntimeType => XPathResultImpl;
+
+}
+class XPathResultImpl extends XPathResult implements js_library.JSObjectInterfacesDom {
+  XPathResultImpl.internal_() : super.internal_();
+  get runtimeType => XPathResult;
+  toString() => super.toString();
+}
+patch class XmlDocument {
+  static Type get instanceRuntimeType => XmlDocumentImpl;
+
+}
+class XmlDocumentImpl extends XmlDocument implements js_library.JSObjectInterfacesDom {
+  XmlDocumentImpl.internal_() : super.internal_();
+  get runtimeType => XmlDocument;
+  toString() => super.toString();
+}
+patch class XmlSerializer {
+  static Type get instanceRuntimeType => XmlSerializerImpl;
+
+}
+class XmlSerializerImpl extends XmlSerializer implements js_library.JSObjectInterfacesDom {
+  XmlSerializerImpl.internal_() : super.internal_();
+  get runtimeType => XmlSerializer;
+  toString() => super.toString();
+}
+patch class XsltProcessor {
+  static Type get instanceRuntimeType => XsltProcessorImpl;
+
+}
+class XsltProcessorImpl extends XsltProcessor implements js_library.JSObjectInterfacesDom {
+  XsltProcessorImpl.internal_() : super.internal_();
+  get runtimeType => XsltProcessor;
+  toString() => super.toString();
+}
+patch class _Attr {
+  static Type get instanceRuntimeType => _AttrImpl;
+
+}
+class _AttrImpl extends _Attr implements js_library.JSObjectInterfacesDom {
+  _AttrImpl.internal_() : super.internal_();
+  get runtimeType => _Attr;
+  toString() => super.toString();
+}
+patch class _Cache {
+  static Type get instanceRuntimeType => _CacheImpl;
+
+}
+class _CacheImpl extends _Cache implements js_library.JSObjectInterfacesDom {
+  _CacheImpl.internal_() : super.internal_();
+  get runtimeType => _Cache;
+  toString() => super.toString();
+}
+patch class _CanvasPathMethods {
+  static Type get instanceRuntimeType => _CanvasPathMethodsImpl;
+
+}
+class _CanvasPathMethodsImpl extends _CanvasPathMethods implements js_library.JSObjectInterfacesDom {
+  _CanvasPathMethodsImpl.internal_() : super.internal_();
+  get runtimeType => _CanvasPathMethods;
+  toString() => super.toString();
+}
+patch class _ClientRect {
+  static Type get instanceRuntimeType => _ClientRectImpl;
+
+}
+class _ClientRectImpl extends _ClientRect implements js_library.JSObjectInterfacesDom {
+  _ClientRectImpl.internal_() : super.internal_();
+  get runtimeType => _ClientRect;
+  toString() => super.toString();
+}
+patch class _ClientRectList {
+  static Type get instanceRuntimeType => _ClientRectListImpl;
+
+}
+class _ClientRectListImpl extends _ClientRectList implements js_library.JSObjectInterfacesDom {
+  _ClientRectListImpl.internal_() : super.internal_();
+  get runtimeType => _ClientRectList;
+  toString() => super.toString();
+}
+patch class _CssRuleList {
+  static Type get instanceRuntimeType => _CssRuleListImpl;
+
+}
+class _CssRuleListImpl extends _CssRuleList implements js_library.JSObjectInterfacesDom {
+  _CssRuleListImpl.internal_() : super.internal_();
+  get runtimeType => _CssRuleList;
+  toString() => super.toString();
+}
+patch class _DOMFileSystemSync {
+  static Type get instanceRuntimeType => _DOMFileSystemSyncImpl;
+
+}
+class _DOMFileSystemSyncImpl extends _DOMFileSystemSync implements js_library.JSObjectInterfacesDom {
+  _DOMFileSystemSyncImpl.internal_() : super.internal_();
+  get runtimeType => _DOMFileSystemSync;
+  toString() => super.toString();
+}
+patch class _DirectoryEntrySync {
+  static Type get instanceRuntimeType => _DirectoryEntrySyncImpl;
+
+}
+class _DirectoryEntrySyncImpl extends _DirectoryEntrySync implements js_library.JSObjectInterfacesDom {
+  _DirectoryEntrySyncImpl.internal_() : super.internal_();
+  get runtimeType => _DirectoryEntrySync;
+  toString() => super.toString();
+}
+patch class _DirectoryReaderSync {
+  static Type get instanceRuntimeType => _DirectoryReaderSyncImpl;
+
+}
+class _DirectoryReaderSyncImpl extends _DirectoryReaderSync implements js_library.JSObjectInterfacesDom {
+  _DirectoryReaderSyncImpl.internal_() : super.internal_();
+  get runtimeType => _DirectoryReaderSync;
+  toString() => super.toString();
+}
+patch class _DocumentType {
+  static Type get instanceRuntimeType => _DocumentTypeImpl;
+
+}
+class _DocumentTypeImpl extends _DocumentType implements js_library.JSObjectInterfacesDom {
+  _DocumentTypeImpl.internal_() : super.internal_();
+  get runtimeType => _DocumentType;
+  toString() => super.toString();
+}
+patch class _DomRect {
+  static Type get instanceRuntimeType => _DomRectImpl;
+
+}
+class _DomRectImpl extends _DomRect implements js_library.JSObjectInterfacesDom {
+  _DomRectImpl.internal_() : super.internal_();
+  get runtimeType => _DomRect;
+  toString() => super.toString();
+}
+patch class _EntrySync {
+  static Type get instanceRuntimeType => _EntrySyncImpl;
+
+}
+class _EntrySyncImpl extends _EntrySync implements js_library.JSObjectInterfacesDom {
+  _EntrySyncImpl.internal_() : super.internal_();
+  get runtimeType => _EntrySync;
+  toString() => super.toString();
+}
+patch class _FileEntrySync {
+  static Type get instanceRuntimeType => _FileEntrySyncImpl;
+
+}
+class _FileEntrySyncImpl extends _FileEntrySync implements js_library.JSObjectInterfacesDom {
+  _FileEntrySyncImpl.internal_() : super.internal_();
+  get runtimeType => _FileEntrySync;
+  toString() => super.toString();
+}
+patch class _FileReaderSync {
+  static Type get instanceRuntimeType => _FileReaderSyncImpl;
+
+}
+class _FileReaderSyncImpl extends _FileReaderSync implements js_library.JSObjectInterfacesDom {
+  _FileReaderSyncImpl.internal_() : super.internal_();
+  get runtimeType => _FileReaderSync;
+  toString() => super.toString();
+}
 patch class _FileWriterSync {
   static Type get instanceRuntimeType => _FileWriterSyncImpl;
 
@@ -4056,6 +3849,213 @@
   get runtimeType => _FileWriterSync;
   toString() => super.toString();
 }
+patch class _GamepadList {
+  static Type get instanceRuntimeType => _GamepadListImpl;
+
+}
+class _GamepadListImpl extends _GamepadList implements js_library.JSObjectInterfacesDom {
+  _GamepadListImpl.internal_() : super.internal_();
+  get runtimeType => _GamepadList;
+  toString() => super.toString();
+}
+patch class _HTMLAllCollection {
+  static Type get instanceRuntimeType => _HTMLAllCollectionImpl;
+
+}
+class _HTMLAllCollectionImpl extends _HTMLAllCollection implements js_library.JSObjectInterfacesDom {
+  _HTMLAllCollectionImpl.internal_() : super.internal_();
+  get runtimeType => _HTMLAllCollection;
+  toString() => super.toString();
+}
+patch class _HTMLAppletElement {
+  static Type get instanceRuntimeType => _HTMLAppletElementImpl;
+
+}
+class _HTMLAppletElementImpl extends _HTMLAppletElement implements js_library.JSObjectInterfacesDom {
+  _HTMLAppletElementImpl.internal_() : super.internal_();
+  get runtimeType => _HTMLAppletElement;
+  toString() => super.toString();
+}
+patch class _HTMLDirectoryElement {
+  static Type get instanceRuntimeType => _HTMLDirectoryElementImpl;
+
+}
+class _HTMLDirectoryElementImpl extends _HTMLDirectoryElement implements js_library.JSObjectInterfacesDom {
+  _HTMLDirectoryElementImpl.internal_() : super.internal_();
+  get runtimeType => _HTMLDirectoryElement;
+  toString() => super.toString();
+}
+patch class _HTMLFontElement {
+  static Type get instanceRuntimeType => _HTMLFontElementImpl;
+
+}
+class _HTMLFontElementImpl extends _HTMLFontElement implements js_library.JSObjectInterfacesDom {
+  _HTMLFontElementImpl.internal_() : super.internal_();
+  get runtimeType => _HTMLFontElement;
+  toString() => super.toString();
+}
+patch class _HTMLFrameElement {
+  static Type get instanceRuntimeType => _HTMLFrameElementImpl;
+
+}
+class _HTMLFrameElementImpl extends _HTMLFrameElement implements js_library.JSObjectInterfacesDom {
+  _HTMLFrameElementImpl.internal_() : super.internal_();
+  get runtimeType => _HTMLFrameElement;
+  toString() => super.toString();
+}
+patch class _HTMLFrameSetElement {
+  static Type get instanceRuntimeType => _HTMLFrameSetElementImpl;
+
+}
+class _HTMLFrameSetElementImpl extends _HTMLFrameSetElement implements js_library.JSObjectInterfacesDom {
+  _HTMLFrameSetElementImpl.internal_() : super.internal_();
+  get runtimeType => _HTMLFrameSetElement;
+  toString() => super.toString();
+}
+patch class _HTMLMarqueeElement {
+  static Type get instanceRuntimeType => _HTMLMarqueeElementImpl;
+
+}
+class _HTMLMarqueeElementImpl extends _HTMLMarqueeElement implements js_library.JSObjectInterfacesDom {
+  _HTMLMarqueeElementImpl.internal_() : super.internal_();
+  get runtimeType => _HTMLMarqueeElement;
+  toString() => super.toString();
+}
+patch class _MutationEvent {
+  static Type get instanceRuntimeType => _MutationEventImpl;
+
+}
+class _MutationEventImpl extends _MutationEvent implements js_library.JSObjectInterfacesDom {
+  _MutationEventImpl.internal_() : super.internal_();
+  get runtimeType => _MutationEvent;
+  toString() => super.toString();
+}
+patch class _NamedNodeMap {
+  static Type get instanceRuntimeType => _NamedNodeMapImpl;
+
+}
+class _NamedNodeMapImpl extends _NamedNodeMap implements js_library.JSObjectInterfacesDom {
+  _NamedNodeMapImpl.internal_() : super.internal_();
+  get runtimeType => _NamedNodeMap;
+  toString() => super.toString();
+}
+patch class _PagePopupController {
+  static Type get instanceRuntimeType => _PagePopupControllerImpl;
+
+}
+class _PagePopupControllerImpl extends _PagePopupController implements js_library.JSObjectInterfacesDom {
+  _PagePopupControllerImpl.internal_() : super.internal_();
+  get runtimeType => _PagePopupController;
+  toString() => super.toString();
+}
+patch class _RadioNodeList {
+  static Type get instanceRuntimeType => _RadioNodeListImpl;
+
+}
+class _RadioNodeListImpl extends _RadioNodeList implements js_library.JSObjectInterfacesDom {
+  _RadioNodeListImpl.internal_() : super.internal_();
+  get runtimeType => _RadioNodeList;
+  toString() => super.toString();
+}
+patch class _Request {
+  static Type get instanceRuntimeType => _RequestImpl;
+
+}
+class _RequestImpl extends _Request implements js_library.JSObjectInterfacesDom {
+  _RequestImpl.internal_() : super.internal_();
+  get runtimeType => _Request;
+  toString() => super.toString();
+}
+patch class _Response {
+  static Type get instanceRuntimeType => _ResponseImpl;
+
+}
+class _ResponseImpl extends _Response implements js_library.JSObjectInterfacesDom {
+  _ResponseImpl.internal_() : super.internal_();
+  get runtimeType => _Response;
+  toString() => super.toString();
+}
+patch class _ServiceWorker {
+  static Type get instanceRuntimeType => _ServiceWorkerImpl;
+
+}
+class _ServiceWorkerImpl extends _ServiceWorker implements js_library.JSObjectInterfacesDom {
+  _ServiceWorkerImpl.internal_() : super.internal_();
+  get runtimeType => _ServiceWorker;
+  toString() => super.toString();
+}
+patch class _SpeechRecognitionResultList {
+  static Type get instanceRuntimeType => _SpeechRecognitionResultListImpl;
+
+}
+class _SpeechRecognitionResultListImpl extends _SpeechRecognitionResultList implements js_library.JSObjectInterfacesDom {
+  _SpeechRecognitionResultListImpl.internal_() : super.internal_();
+  get runtimeType => _SpeechRecognitionResultList;
+  toString() => super.toString();
+}
+patch class _StyleSheetList {
+  static Type get instanceRuntimeType => _StyleSheetListImpl;
+
+}
+class _StyleSheetListImpl extends _StyleSheetList implements js_library.JSObjectInterfacesDom {
+  _StyleSheetListImpl.internal_() : super.internal_();
+  get runtimeType => _StyleSheetList;
+  toString() => super.toString();
+}
+patch class _SubtleCrypto {
+  static Type get instanceRuntimeType => _SubtleCryptoImpl;
+
+}
+class _SubtleCryptoImpl extends _SubtleCrypto implements js_library.JSObjectInterfacesDom {
+  _SubtleCryptoImpl.internal_() : super.internal_();
+  get runtimeType => _SubtleCrypto;
+  toString() => super.toString();
+}
+patch class _WebKitCSSMatrix {
+  static Type get instanceRuntimeType => _WebKitCSSMatrixImpl;
+
+}
+class _WebKitCSSMatrixImpl extends _WebKitCSSMatrix implements js_library.JSObjectInterfacesDom {
+  _WebKitCSSMatrixImpl.internal_() : super.internal_();
+  get runtimeType => _WebKitCSSMatrix;
+  toString() => super.toString();
+}
+patch class _WindowTimers {
+  static Type get instanceRuntimeType => _WindowTimersImpl;
+
+}
+class _WindowTimersImpl extends _WindowTimers implements js_library.JSObjectInterfacesDom {
+  _WindowTimersImpl.internal_() : super.internal_();
+  get runtimeType => _WindowTimers;
+  toString() => super.toString();
+}
+patch class _WorkerLocation {
+  static Type get instanceRuntimeType => _WorkerLocationImpl;
+
+}
+class _WorkerLocationImpl extends _WorkerLocation implements js_library.JSObjectInterfacesDom {
+  _WorkerLocationImpl.internal_() : super.internal_();
+  get runtimeType => _WorkerLocation;
+  toString() => super.toString();
+}
+patch class _WorkerNavigator {
+  static Type get instanceRuntimeType => _WorkerNavigatorImpl;
+
+}
+class _WorkerNavigatorImpl extends _WorkerNavigator implements js_library.JSObjectInterfacesDom {
+  _WorkerNavigatorImpl.internal_() : super.internal_();
+  get runtimeType => _WorkerNavigator;
+  toString() => super.toString();
+}
+patch class _XMLHttpRequestProgressEvent {
+  static Type get instanceRuntimeType => _XMLHttpRequestProgressEventImpl;
+
+}
+class _XMLHttpRequestProgressEventImpl extends _XMLHttpRequestProgressEvent implements js_library.JSObjectInterfacesDom {
+  _XMLHttpRequestProgressEventImpl.internal_() : super.internal_();
+  get runtimeType => _XMLHttpRequestProgressEvent;
+  toString() => super.toString();
+}
 
 """],"dart:indexed_db": ["dart:indexed_db", "dart:indexed_db_js_interop_patch.dart", """import 'dart:js' as js_library;
 
@@ -4065,15 +4065,6 @@
  */
 const _UNDEFINED_JS_CONST = const Object();
 
-patch class IdbFactory {
-  static Type get instanceRuntimeType => IdbFactoryImpl;
-
-}
-class IdbFactoryImpl extends IdbFactory implements js_library.JSObjectInterfacesDom {
-  IdbFactoryImpl.internal_() : super.internal_();
-  get runtimeType => IdbFactory;
-  toString() => super.toString();
-}
 patch class Cursor {
   static Type get instanceRuntimeType => CursorImpl;
 
@@ -4083,78 +4074,6 @@
   get runtimeType => Cursor;
   toString() => super.toString();
 }
-patch class Transaction {
-  static Type get instanceRuntimeType => TransactionImpl;
-
-}
-class TransactionImpl extends Transaction implements js_library.JSObjectInterfacesDom {
-  TransactionImpl.internal_() : super.internal_();
-  get runtimeType => Transaction;
-  toString() => super.toString();
-}
-patch class KeyRange {
-  static Type get instanceRuntimeType => KeyRangeImpl;
-
-}
-class KeyRangeImpl extends KeyRange implements js_library.JSObjectInterfacesDom {
-  KeyRangeImpl.internal_() : super.internal_();
-  get runtimeType => KeyRange;
-  toString() => super.toString();
-}
-patch class Request {
-  static Type get instanceRuntimeType => RequestImpl;
-
-}
-class RequestImpl extends Request implements js_library.JSObjectInterfacesDom {
-  RequestImpl.internal_() : super.internal_();
-  get runtimeType => Request;
-  toString() => super.toString();
-}
-patch class OpenDBRequest {
-  static Type get instanceRuntimeType => OpenDBRequestImpl;
-
-}
-class OpenDBRequestImpl extends OpenDBRequest implements js_library.JSObjectInterfacesDom {
-  OpenDBRequestImpl.internal_() : super.internal_();
-  get runtimeType => OpenDBRequest;
-  toString() => super.toString();
-}
-patch class Database {
-  static Type get instanceRuntimeType => DatabaseImpl;
-
-}
-class DatabaseImpl extends Database implements js_library.JSObjectInterfacesDom {
-  DatabaseImpl.internal_() : super.internal_();
-  get runtimeType => Database;
-  toString() => super.toString();
-}
-patch class Index {
-  static Type get instanceRuntimeType => IndexImpl;
-
-}
-class IndexImpl extends Index implements js_library.JSObjectInterfacesDom {
-  IndexImpl.internal_() : super.internal_();
-  get runtimeType => Index;
-  toString() => super.toString();
-}
-patch class ObjectStore {
-  static Type get instanceRuntimeType => ObjectStoreImpl;
-
-}
-class ObjectStoreImpl extends ObjectStore implements js_library.JSObjectInterfacesDom {
-  ObjectStoreImpl.internal_() : super.internal_();
-  get runtimeType => ObjectStore;
-  toString() => super.toString();
-}
-patch class VersionChangeEvent {
-  static Type get instanceRuntimeType => VersionChangeEventImpl;
-
-}
-class VersionChangeEventImpl extends VersionChangeEvent implements js_library.JSObjectInterfacesDom {
-  VersionChangeEventImpl.internal_() : super.internal_();
-  get runtimeType => VersionChangeEvent;
-  toString() => super.toString();
-}
 patch class CursorWithValue {
   static Type get instanceRuntimeType => CursorWithValueImpl;
 
@@ -4164,6 +4083,87 @@
   get runtimeType => CursorWithValue;
   toString() => super.toString();
 }
+patch class Database {
+  static Type get instanceRuntimeType => DatabaseImpl;
+
+}
+class DatabaseImpl extends Database implements js_library.JSObjectInterfacesDom {
+  DatabaseImpl.internal_() : super.internal_();
+  get runtimeType => Database;
+  toString() => super.toString();
+}
+patch class IdbFactory {
+  static Type get instanceRuntimeType => IdbFactoryImpl;
+
+}
+class IdbFactoryImpl extends IdbFactory implements js_library.JSObjectInterfacesDom {
+  IdbFactoryImpl.internal_() : super.internal_();
+  get runtimeType => IdbFactory;
+  toString() => super.toString();
+}
+patch class Index {
+  static Type get instanceRuntimeType => IndexImpl;
+
+}
+class IndexImpl extends Index implements js_library.JSObjectInterfacesDom {
+  IndexImpl.internal_() : super.internal_();
+  get runtimeType => Index;
+  toString() => super.toString();
+}
+patch class KeyRange {
+  static Type get instanceRuntimeType => KeyRangeImpl;
+
+}
+class KeyRangeImpl extends KeyRange implements js_library.JSObjectInterfacesDom {
+  KeyRangeImpl.internal_() : super.internal_();
+  get runtimeType => KeyRange;
+  toString() => super.toString();
+}
+patch class ObjectStore {
+  static Type get instanceRuntimeType => ObjectStoreImpl;
+
+}
+class ObjectStoreImpl extends ObjectStore implements js_library.JSObjectInterfacesDom {
+  ObjectStoreImpl.internal_() : super.internal_();
+  get runtimeType => ObjectStore;
+  toString() => super.toString();
+}
+patch class OpenDBRequest {
+  static Type get instanceRuntimeType => OpenDBRequestImpl;
+
+}
+class OpenDBRequestImpl extends OpenDBRequest implements js_library.JSObjectInterfacesDom {
+  OpenDBRequestImpl.internal_() : super.internal_();
+  get runtimeType => OpenDBRequest;
+  toString() => super.toString();
+}
+patch class Request {
+  static Type get instanceRuntimeType => RequestImpl;
+
+}
+class RequestImpl extends Request implements js_library.JSObjectInterfacesDom {
+  RequestImpl.internal_() : super.internal_();
+  get runtimeType => Request;
+  toString() => super.toString();
+}
+patch class Transaction {
+  static Type get instanceRuntimeType => TransactionImpl;
+
+}
+class TransactionImpl extends Transaction implements js_library.JSObjectInterfacesDom {
+  TransactionImpl.internal_() : super.internal_();
+  get runtimeType => Transaction;
+  toString() => super.toString();
+}
+patch class VersionChangeEvent {
+  static Type get instanceRuntimeType => VersionChangeEventImpl;
+
+}
+class VersionChangeEventImpl extends VersionChangeEvent implements js_library.JSObjectInterfacesDom {
+  VersionChangeEventImpl.internal_() : super.internal_();
+  get runtimeType => VersionChangeEvent;
+  toString() => super.toString();
+}
 
 """],"dart:web_gl": ["dart:web_gl", "dart:web_gl_js_interop_patch.dart", """import 'dart:js' as js_library;
 
@@ -4173,204 +4173,6 @@
  */
 const _UNDEFINED_JS_CONST = const Object();
 
-patch class Buffer {
-  static Type get instanceRuntimeType => BufferImpl;
-
-}
-class BufferImpl extends Buffer implements js_library.JSObjectInterfacesDom {
-  BufferImpl.internal_() : super.internal_();
-  get runtimeType => Buffer;
-  toString() => super.toString();
-}
-patch class Texture {
-  static Type get instanceRuntimeType => TextureImpl;
-
-}
-class TextureImpl extends Texture implements js_library.JSObjectInterfacesDom {
-  TextureImpl.internal_() : super.internal_();
-  get runtimeType => Texture;
-  toString() => super.toString();
-}
-patch class VertexArrayObjectOes {
-  static Type get instanceRuntimeType => VertexArrayObjectOesImpl;
-
-}
-class VertexArrayObjectOesImpl extends VertexArrayObjectOes implements js_library.JSObjectInterfacesDom {
-  VertexArrayObjectOesImpl.internal_() : super.internal_();
-  get runtimeType => VertexArrayObjectOes;
-  toString() => super.toString();
-}
-patch class DepthTexture {
-  static Type get instanceRuntimeType => DepthTextureImpl;
-
-}
-class DepthTextureImpl extends DepthTexture implements js_library.JSObjectInterfacesDom {
-  DepthTextureImpl.internal_() : super.internal_();
-  get runtimeType => DepthTexture;
-  toString() => super.toString();
-}
-patch class OesTextureHalfFloatLinear {
-  static Type get instanceRuntimeType => OesTextureHalfFloatLinearImpl;
-
-}
-class OesTextureHalfFloatLinearImpl extends OesTextureHalfFloatLinear implements js_library.JSObjectInterfacesDom {
-  OesTextureHalfFloatLinearImpl.internal_() : super.internal_();
-  get runtimeType => OesTextureHalfFloatLinear;
-  toString() => super.toString();
-}
-patch class Sampler {
-  static Type get instanceRuntimeType => SamplerImpl;
-
-}
-class SamplerImpl extends Sampler implements js_library.JSObjectInterfacesDom {
-  SamplerImpl.internal_() : super.internal_();
-  get runtimeType => Sampler;
-  toString() => super.toString();
-}
-patch class Sync {
-  static Type get instanceRuntimeType => SyncImpl;
-
-}
-class SyncImpl extends Sync implements js_library.JSObjectInterfacesDom {
-  SyncImpl.internal_() : super.internal_();
-  get runtimeType => Sync;
-  toString() => super.toString();
-}
-patch class OesVertexArrayObject {
-  static Type get instanceRuntimeType => OesVertexArrayObjectImpl;
-
-}
-class OesVertexArrayObjectImpl extends OesVertexArrayObject implements js_library.JSObjectInterfacesDom {
-  OesVertexArrayObjectImpl.internal_() : super.internal_();
-  get runtimeType => OesVertexArrayObject;
-  toString() => super.toString();
-}
-patch class CompressedTextureS3TC {
-  static Type get instanceRuntimeType => CompressedTextureS3TCImpl;
-
-}
-class CompressedTextureS3TCImpl extends CompressedTextureS3TC implements js_library.JSObjectInterfacesDom {
-  CompressedTextureS3TCImpl.internal_() : super.internal_();
-  get runtimeType => CompressedTextureS3TC;
-  toString() => super.toString();
-}
-patch class ExtFragDepth {
-  static Type get instanceRuntimeType => ExtFragDepthImpl;
-
-}
-class ExtFragDepthImpl extends ExtFragDepth implements js_library.JSObjectInterfacesDom {
-  ExtFragDepthImpl.internal_() : super.internal_();
-  get runtimeType => ExtFragDepth;
-  toString() => super.toString();
-}
-patch class Shader {
-  static Type get instanceRuntimeType => ShaderImpl;
-
-}
-class ShaderImpl extends Shader implements js_library.JSObjectInterfacesDom {
-  ShaderImpl.internal_() : super.internal_();
-  get runtimeType => Shader;
-  toString() => super.toString();
-}
-patch class _WebGL2RenderingContextBase {
-  static Type get instanceRuntimeType => _WebGL2RenderingContextBaseImpl;
-
-}
-class _WebGL2RenderingContextBaseImpl extends _WebGL2RenderingContextBase implements js_library.JSObjectInterfacesDom {
-  _WebGL2RenderingContextBaseImpl.internal_() : super.internal_();
-  get runtimeType => _WebGL2RenderingContextBase;
-  toString() => super.toString();
-}
-patch class Query {
-  static Type get instanceRuntimeType => QueryImpl;
-
-}
-class QueryImpl extends Query implements js_library.JSObjectInterfacesDom {
-  QueryImpl.internal_() : super.internal_();
-  get runtimeType => Query;
-  toString() => super.toString();
-}
-patch class RenderingContext {
-  static Type get instanceRuntimeType => RenderingContextImpl;
-
-}
-class RenderingContextImpl extends RenderingContext implements js_library.JSObjectInterfacesDom {
-  RenderingContextImpl.internal_() : super.internal_();
-  get runtimeType => RenderingContext;
-  toString() => super.toString();
-}
-patch class ShaderPrecisionFormat {
-  static Type get instanceRuntimeType => ShaderPrecisionFormatImpl;
-
-}
-class ShaderPrecisionFormatImpl extends ShaderPrecisionFormat implements js_library.JSObjectInterfacesDom {
-  ShaderPrecisionFormatImpl.internal_() : super.internal_();
-  get runtimeType => ShaderPrecisionFormat;
-  toString() => super.toString();
-}
-patch class OesTextureHalfFloat {
-  static Type get instanceRuntimeType => OesTextureHalfFloatImpl;
-
-}
-class OesTextureHalfFloatImpl extends OesTextureHalfFloat implements js_library.JSObjectInterfacesDom {
-  OesTextureHalfFloatImpl.internal_() : super.internal_();
-  get runtimeType => OesTextureHalfFloat;
-  toString() => super.toString();
-}
-patch class ExtTextureFilterAnisotropic {
-  static Type get instanceRuntimeType => ExtTextureFilterAnisotropicImpl;
-
-}
-class ExtTextureFilterAnisotropicImpl extends ExtTextureFilterAnisotropic implements js_library.JSObjectInterfacesDom {
-  ExtTextureFilterAnisotropicImpl.internal_() : super.internal_();
-  get runtimeType => ExtTextureFilterAnisotropic;
-  toString() => super.toString();
-}
-patch class OesTextureFloat {
-  static Type get instanceRuntimeType => OesTextureFloatImpl;
-
-}
-class OesTextureFloatImpl extends OesTextureFloat implements js_library.JSObjectInterfacesDom {
-  OesTextureFloatImpl.internal_() : super.internal_();
-  get runtimeType => OesTextureFloat;
-  toString() => super.toString();
-}
-patch class VertexArrayObject {
-  static Type get instanceRuntimeType => VertexArrayObjectImpl;
-
-}
-class VertexArrayObjectImpl extends VertexArrayObject implements js_library.JSObjectInterfacesDom {
-  VertexArrayObjectImpl.internal_() : super.internal_();
-  get runtimeType => VertexArrayObject;
-  toString() => super.toString();
-}
-patch class CompressedTexturePvrtc {
-  static Type get instanceRuntimeType => CompressedTexturePvrtcImpl;
-
-}
-class CompressedTexturePvrtcImpl extends CompressedTexturePvrtc implements js_library.JSObjectInterfacesDom {
-  CompressedTexturePvrtcImpl.internal_() : super.internal_();
-  get runtimeType => CompressedTexturePvrtc;
-  toString() => super.toString();
-}
-patch class ChromiumSubscribeUniform {
-  static Type get instanceRuntimeType => ChromiumSubscribeUniformImpl;
-
-}
-class ChromiumSubscribeUniformImpl extends ChromiumSubscribeUniform implements js_library.JSObjectInterfacesDom {
-  ChromiumSubscribeUniformImpl.internal_() : super.internal_();
-  get runtimeType => ChromiumSubscribeUniform;
-  toString() => super.toString();
-}
-patch class _WebGLRenderingContextBase {
-  static Type get instanceRuntimeType => _WebGLRenderingContextBaseImpl;
-
-}
-class _WebGLRenderingContextBaseImpl extends _WebGLRenderingContextBase implements js_library.JSObjectInterfacesDom {
-  _WebGLRenderingContextBaseImpl.internal_() : super.internal_();
-  get runtimeType => _WebGLRenderingContextBase;
-  toString() => super.toString();
-}
 patch class ActiveInfo {
   static Type get instanceRuntimeType => ActiveInfoImpl;
 
@@ -4380,105 +4182,6 @@
   get runtimeType => ActiveInfo;
   toString() => super.toString();
 }
-patch class TransformFeedback {
-  static Type get instanceRuntimeType => TransformFeedbackImpl;
-
-}
-class TransformFeedbackImpl extends TransformFeedback implements js_library.JSObjectInterfacesDom {
-  TransformFeedbackImpl.internal_() : super.internal_();
-  get runtimeType => TransformFeedback;
-  toString() => super.toString();
-}
-patch class ExtShaderTextureLod {
-  static Type get instanceRuntimeType => ExtShaderTextureLodImpl;
-
-}
-class ExtShaderTextureLodImpl extends ExtShaderTextureLod implements js_library.JSObjectInterfacesDom {
-  ExtShaderTextureLodImpl.internal_() : super.internal_();
-  get runtimeType => ExtShaderTextureLod;
-  toString() => super.toString();
-}
-patch class UniformLocation {
-  static Type get instanceRuntimeType => UniformLocationImpl;
-
-}
-class UniformLocationImpl extends UniformLocation implements js_library.JSObjectInterfacesDom {
-  UniformLocationImpl.internal_() : super.internal_();
-  get runtimeType => UniformLocation;
-  toString() => super.toString();
-}
-patch class ExtBlendMinMax {
-  static Type get instanceRuntimeType => ExtBlendMinMaxImpl;
-
-}
-class ExtBlendMinMaxImpl extends ExtBlendMinMax implements js_library.JSObjectInterfacesDom {
-  ExtBlendMinMaxImpl.internal_() : super.internal_();
-  get runtimeType => ExtBlendMinMax;
-  toString() => super.toString();
-}
-patch class Framebuffer {
-  static Type get instanceRuntimeType => FramebufferImpl;
-
-}
-class FramebufferImpl extends Framebuffer implements js_library.JSObjectInterfacesDom {
-  FramebufferImpl.internal_() : super.internal_();
-  get runtimeType => Framebuffer;
-  toString() => super.toString();
-}
-patch class OesStandardDerivatives {
-  static Type get instanceRuntimeType => OesStandardDerivativesImpl;
-
-}
-class OesStandardDerivativesImpl extends OesStandardDerivatives implements js_library.JSObjectInterfacesDom {
-  OesStandardDerivativesImpl.internal_() : super.internal_();
-  get runtimeType => OesStandardDerivatives;
-  toString() => super.toString();
-}
-patch class DrawBuffers {
-  static Type get instanceRuntimeType => DrawBuffersImpl;
-
-}
-class DrawBuffersImpl extends DrawBuffers implements js_library.JSObjectInterfacesDom {
-  DrawBuffersImpl.internal_() : super.internal_();
-  get runtimeType => DrawBuffers;
-  toString() => super.toString();
-}
-patch class OesTextureFloatLinear {
-  static Type get instanceRuntimeType => OesTextureFloatLinearImpl;
-
-}
-class OesTextureFloatLinearImpl extends OesTextureFloatLinear implements js_library.JSObjectInterfacesDom {
-  OesTextureFloatLinearImpl.internal_() : super.internal_();
-  get runtimeType => OesTextureFloatLinear;
-  toString() => super.toString();
-}
-patch class DebugShaders {
-  static Type get instanceRuntimeType => DebugShadersImpl;
-
-}
-class DebugShadersImpl extends DebugShaders implements js_library.JSObjectInterfacesDom {
-  DebugShadersImpl.internal_() : super.internal_();
-  get runtimeType => DebugShaders;
-  toString() => super.toString();
-}
-patch class Program {
-  static Type get instanceRuntimeType => ProgramImpl;
-
-}
-class ProgramImpl extends Program implements js_library.JSObjectInterfacesDom {
-  ProgramImpl.internal_() : super.internal_();
-  get runtimeType => Program;
-  toString() => super.toString();
-}
-patch class ContextEvent {
-  static Type get instanceRuntimeType => ContextEventImpl;
-
-}
-class ContextEventImpl extends ContextEvent implements js_library.JSObjectInterfacesDom {
-  ContextEventImpl.internal_() : super.internal_();
-  get runtimeType => ContextEvent;
-  toString() => super.toString();
-}
 patch class AngleInstancedArrays {
   static Type get instanceRuntimeType => AngleInstancedArraysImpl;
 
@@ -4488,13 +4191,22 @@
   get runtimeType => AngleInstancedArrays;
   toString() => super.toString();
 }
-patch class DebugRendererInfo {
-  static Type get instanceRuntimeType => DebugRendererInfoImpl;
+patch class Buffer {
+  static Type get instanceRuntimeType => BufferImpl;
 
 }
-class DebugRendererInfoImpl extends DebugRendererInfo implements js_library.JSObjectInterfacesDom {
-  DebugRendererInfoImpl.internal_() : super.internal_();
-  get runtimeType => DebugRendererInfo;
+class BufferImpl extends Buffer implements js_library.JSObjectInterfacesDom {
+  BufferImpl.internal_() : super.internal_();
+  get runtimeType => Buffer;
+  toString() => super.toString();
+}
+patch class ChromiumSubscribeUniform {
+  static Type get instanceRuntimeType => ChromiumSubscribeUniformImpl;
+
+}
+class ChromiumSubscribeUniformImpl extends ChromiumSubscribeUniform implements js_library.JSObjectInterfacesDom {
+  ChromiumSubscribeUniformImpl.internal_() : super.internal_();
+  get runtimeType => ChromiumSubscribeUniform;
   toString() => super.toString();
 }
 patch class CompressedTextureAtc {
@@ -4506,15 +4218,6 @@
   get runtimeType => CompressedTextureAtc;
   toString() => super.toString();
 }
-patch class OesElementIndexUint {
-  static Type get instanceRuntimeType => OesElementIndexUintImpl;
-
-}
-class OesElementIndexUintImpl extends OesElementIndexUint implements js_library.JSObjectInterfacesDom {
-  OesElementIndexUintImpl.internal_() : super.internal_();
-  get runtimeType => OesElementIndexUint;
-  toString() => super.toString();
-}
 patch class CompressedTextureETC1 {
   static Type get instanceRuntimeType => CompressedTextureETC1Impl;
 
@@ -4524,31 +4227,67 @@
   get runtimeType => CompressedTextureETC1;
   toString() => super.toString();
 }
-patch class LoseContext {
-  static Type get instanceRuntimeType => LoseContextImpl;
+patch class CompressedTexturePvrtc {
+  static Type get instanceRuntimeType => CompressedTexturePvrtcImpl;
 
 }
-class LoseContextImpl extends LoseContext implements js_library.JSObjectInterfacesDom {
-  LoseContextImpl.internal_() : super.internal_();
-  get runtimeType => LoseContext;
+class CompressedTexturePvrtcImpl extends CompressedTexturePvrtc implements js_library.JSObjectInterfacesDom {
+  CompressedTexturePvrtcImpl.internal_() : super.internal_();
+  get runtimeType => CompressedTexturePvrtc;
   toString() => super.toString();
 }
-patch class Renderbuffer {
-  static Type get instanceRuntimeType => RenderbufferImpl;
+patch class CompressedTextureS3TC {
+  static Type get instanceRuntimeType => CompressedTextureS3TCImpl;
 
 }
-class RenderbufferImpl extends Renderbuffer implements js_library.JSObjectInterfacesDom {
-  RenderbufferImpl.internal_() : super.internal_();
-  get runtimeType => Renderbuffer;
+class CompressedTextureS3TCImpl extends CompressedTextureS3TC implements js_library.JSObjectInterfacesDom {
+  CompressedTextureS3TCImpl.internal_() : super.internal_();
+  get runtimeType => CompressedTextureS3TC;
   toString() => super.toString();
 }
-patch class RenderingContext2 {
-  static Type get instanceRuntimeType => RenderingContext2Impl;
+patch class ContextEvent {
+  static Type get instanceRuntimeType => ContextEventImpl;
 
 }
-class RenderingContext2Impl extends RenderingContext2 implements js_library.JSObjectInterfacesDom {
-  RenderingContext2Impl.internal_() : super.internal_();
-  get runtimeType => RenderingContext2;
+class ContextEventImpl extends ContextEvent implements js_library.JSObjectInterfacesDom {
+  ContextEventImpl.internal_() : super.internal_();
+  get runtimeType => ContextEvent;
+  toString() => super.toString();
+}
+patch class DebugRendererInfo {
+  static Type get instanceRuntimeType => DebugRendererInfoImpl;
+
+}
+class DebugRendererInfoImpl extends DebugRendererInfo implements js_library.JSObjectInterfacesDom {
+  DebugRendererInfoImpl.internal_() : super.internal_();
+  get runtimeType => DebugRendererInfo;
+  toString() => super.toString();
+}
+patch class DebugShaders {
+  static Type get instanceRuntimeType => DebugShadersImpl;
+
+}
+class DebugShadersImpl extends DebugShaders implements js_library.JSObjectInterfacesDom {
+  DebugShadersImpl.internal_() : super.internal_();
+  get runtimeType => DebugShaders;
+  toString() => super.toString();
+}
+patch class DepthTexture {
+  static Type get instanceRuntimeType => DepthTextureImpl;
+
+}
+class DepthTextureImpl extends DepthTexture implements js_library.JSObjectInterfacesDom {
+  DepthTextureImpl.internal_() : super.internal_();
+  get runtimeType => DepthTexture;
+  toString() => super.toString();
+}
+patch class DrawBuffers {
+  static Type get instanceRuntimeType => DrawBuffersImpl;
+
+}
+class DrawBuffersImpl extends DrawBuffers implements js_library.JSObjectInterfacesDom {
+  DrawBuffersImpl.internal_() : super.internal_();
+  get runtimeType => DrawBuffers;
   toString() => super.toString();
 }
 patch class EXTsRgb {
@@ -4560,6 +4299,267 @@
   get runtimeType => EXTsRgb;
   toString() => super.toString();
 }
+patch class ExtBlendMinMax {
+  static Type get instanceRuntimeType => ExtBlendMinMaxImpl;
+
+}
+class ExtBlendMinMaxImpl extends ExtBlendMinMax implements js_library.JSObjectInterfacesDom {
+  ExtBlendMinMaxImpl.internal_() : super.internal_();
+  get runtimeType => ExtBlendMinMax;
+  toString() => super.toString();
+}
+patch class ExtFragDepth {
+  static Type get instanceRuntimeType => ExtFragDepthImpl;
+
+}
+class ExtFragDepthImpl extends ExtFragDepth implements js_library.JSObjectInterfacesDom {
+  ExtFragDepthImpl.internal_() : super.internal_();
+  get runtimeType => ExtFragDepth;
+  toString() => super.toString();
+}
+patch class ExtShaderTextureLod {
+  static Type get instanceRuntimeType => ExtShaderTextureLodImpl;
+
+}
+class ExtShaderTextureLodImpl extends ExtShaderTextureLod implements js_library.JSObjectInterfacesDom {
+  ExtShaderTextureLodImpl.internal_() : super.internal_();
+  get runtimeType => ExtShaderTextureLod;
+  toString() => super.toString();
+}
+patch class ExtTextureFilterAnisotropic {
+  static Type get instanceRuntimeType => ExtTextureFilterAnisotropicImpl;
+
+}
+class ExtTextureFilterAnisotropicImpl extends ExtTextureFilterAnisotropic implements js_library.JSObjectInterfacesDom {
+  ExtTextureFilterAnisotropicImpl.internal_() : super.internal_();
+  get runtimeType => ExtTextureFilterAnisotropic;
+  toString() => super.toString();
+}
+patch class Framebuffer {
+  static Type get instanceRuntimeType => FramebufferImpl;
+
+}
+class FramebufferImpl extends Framebuffer implements js_library.JSObjectInterfacesDom {
+  FramebufferImpl.internal_() : super.internal_();
+  get runtimeType => Framebuffer;
+  toString() => super.toString();
+}
+patch class LoseContext {
+  static Type get instanceRuntimeType => LoseContextImpl;
+
+}
+class LoseContextImpl extends LoseContext implements js_library.JSObjectInterfacesDom {
+  LoseContextImpl.internal_() : super.internal_();
+  get runtimeType => LoseContext;
+  toString() => super.toString();
+}
+patch class OesElementIndexUint {
+  static Type get instanceRuntimeType => OesElementIndexUintImpl;
+
+}
+class OesElementIndexUintImpl extends OesElementIndexUint implements js_library.JSObjectInterfacesDom {
+  OesElementIndexUintImpl.internal_() : super.internal_();
+  get runtimeType => OesElementIndexUint;
+  toString() => super.toString();
+}
+patch class OesStandardDerivatives {
+  static Type get instanceRuntimeType => OesStandardDerivativesImpl;
+
+}
+class OesStandardDerivativesImpl extends OesStandardDerivatives implements js_library.JSObjectInterfacesDom {
+  OesStandardDerivativesImpl.internal_() : super.internal_();
+  get runtimeType => OesStandardDerivatives;
+  toString() => super.toString();
+}
+patch class OesTextureFloat {
+  static Type get instanceRuntimeType => OesTextureFloatImpl;
+
+}
+class OesTextureFloatImpl extends OesTextureFloat implements js_library.JSObjectInterfacesDom {
+  OesTextureFloatImpl.internal_() : super.internal_();
+  get runtimeType => OesTextureFloat;
+  toString() => super.toString();
+}
+patch class OesTextureFloatLinear {
+  static Type get instanceRuntimeType => OesTextureFloatLinearImpl;
+
+}
+class OesTextureFloatLinearImpl extends OesTextureFloatLinear implements js_library.JSObjectInterfacesDom {
+  OesTextureFloatLinearImpl.internal_() : super.internal_();
+  get runtimeType => OesTextureFloatLinear;
+  toString() => super.toString();
+}
+patch class OesTextureHalfFloat {
+  static Type get instanceRuntimeType => OesTextureHalfFloatImpl;
+
+}
+class OesTextureHalfFloatImpl extends OesTextureHalfFloat implements js_library.JSObjectInterfacesDom {
+  OesTextureHalfFloatImpl.internal_() : super.internal_();
+  get runtimeType => OesTextureHalfFloat;
+  toString() => super.toString();
+}
+patch class OesTextureHalfFloatLinear {
+  static Type get instanceRuntimeType => OesTextureHalfFloatLinearImpl;
+
+}
+class OesTextureHalfFloatLinearImpl extends OesTextureHalfFloatLinear implements js_library.JSObjectInterfacesDom {
+  OesTextureHalfFloatLinearImpl.internal_() : super.internal_();
+  get runtimeType => OesTextureHalfFloatLinear;
+  toString() => super.toString();
+}
+patch class OesVertexArrayObject {
+  static Type get instanceRuntimeType => OesVertexArrayObjectImpl;
+
+}
+class OesVertexArrayObjectImpl extends OesVertexArrayObject implements js_library.JSObjectInterfacesDom {
+  OesVertexArrayObjectImpl.internal_() : super.internal_();
+  get runtimeType => OesVertexArrayObject;
+  toString() => super.toString();
+}
+patch class Program {
+  static Type get instanceRuntimeType => ProgramImpl;
+
+}
+class ProgramImpl extends Program implements js_library.JSObjectInterfacesDom {
+  ProgramImpl.internal_() : super.internal_();
+  get runtimeType => Program;
+  toString() => super.toString();
+}
+patch class Query {
+  static Type get instanceRuntimeType => QueryImpl;
+
+}
+class QueryImpl extends Query implements js_library.JSObjectInterfacesDom {
+  QueryImpl.internal_() : super.internal_();
+  get runtimeType => Query;
+  toString() => super.toString();
+}
+patch class Renderbuffer {
+  static Type get instanceRuntimeType => RenderbufferImpl;
+
+}
+class RenderbufferImpl extends Renderbuffer implements js_library.JSObjectInterfacesDom {
+  RenderbufferImpl.internal_() : super.internal_();
+  get runtimeType => Renderbuffer;
+  toString() => super.toString();
+}
+patch class RenderingContext {
+  static Type get instanceRuntimeType => RenderingContextImpl;
+
+}
+class RenderingContextImpl extends RenderingContext implements js_library.JSObjectInterfacesDom {
+  RenderingContextImpl.internal_() : super.internal_();
+  get runtimeType => RenderingContext;
+  toString() => super.toString();
+}
+patch class RenderingContext2 {
+  static Type get instanceRuntimeType => RenderingContext2Impl;
+
+}
+class RenderingContext2Impl extends RenderingContext2 implements js_library.JSObjectInterfacesDom {
+  RenderingContext2Impl.internal_() : super.internal_();
+  get runtimeType => RenderingContext2;
+  toString() => super.toString();
+}
+patch class Sampler {
+  static Type get instanceRuntimeType => SamplerImpl;
+
+}
+class SamplerImpl extends Sampler implements js_library.JSObjectInterfacesDom {
+  SamplerImpl.internal_() : super.internal_();
+  get runtimeType => Sampler;
+  toString() => super.toString();
+}
+patch class Shader {
+  static Type get instanceRuntimeType => ShaderImpl;
+
+}
+class ShaderImpl extends Shader implements js_library.JSObjectInterfacesDom {
+  ShaderImpl.internal_() : super.internal_();
+  get runtimeType => Shader;
+  toString() => super.toString();
+}
+patch class ShaderPrecisionFormat {
+  static Type get instanceRuntimeType => ShaderPrecisionFormatImpl;
+
+}
+class ShaderPrecisionFormatImpl extends ShaderPrecisionFormat implements js_library.JSObjectInterfacesDom {
+  ShaderPrecisionFormatImpl.internal_() : super.internal_();
+  get runtimeType => ShaderPrecisionFormat;
+  toString() => super.toString();
+}
+patch class Sync {
+  static Type get instanceRuntimeType => SyncImpl;
+
+}
+class SyncImpl extends Sync implements js_library.JSObjectInterfacesDom {
+  SyncImpl.internal_() : super.internal_();
+  get runtimeType => Sync;
+  toString() => super.toString();
+}
+patch class Texture {
+  static Type get instanceRuntimeType => TextureImpl;
+
+}
+class TextureImpl extends Texture implements js_library.JSObjectInterfacesDom {
+  TextureImpl.internal_() : super.internal_();
+  get runtimeType => Texture;
+  toString() => super.toString();
+}
+patch class TransformFeedback {
+  static Type get instanceRuntimeType => TransformFeedbackImpl;
+
+}
+class TransformFeedbackImpl extends TransformFeedback implements js_library.JSObjectInterfacesDom {
+  TransformFeedbackImpl.internal_() : super.internal_();
+  get runtimeType => TransformFeedback;
+  toString() => super.toString();
+}
+patch class UniformLocation {
+  static Type get instanceRuntimeType => UniformLocationImpl;
+
+}
+class UniformLocationImpl extends UniformLocation implements js_library.JSObjectInterfacesDom {
+  UniformLocationImpl.internal_() : super.internal_();
+  get runtimeType => UniformLocation;
+  toString() => super.toString();
+}
+patch class VertexArrayObject {
+  static Type get instanceRuntimeType => VertexArrayObjectImpl;
+
+}
+class VertexArrayObjectImpl extends VertexArrayObject implements js_library.JSObjectInterfacesDom {
+  VertexArrayObjectImpl.internal_() : super.internal_();
+  get runtimeType => VertexArrayObject;
+  toString() => super.toString();
+}
+patch class VertexArrayObjectOes {
+  static Type get instanceRuntimeType => VertexArrayObjectOesImpl;
+
+}
+class VertexArrayObjectOesImpl extends VertexArrayObjectOes implements js_library.JSObjectInterfacesDom {
+  VertexArrayObjectOesImpl.internal_() : super.internal_();
+  get runtimeType => VertexArrayObjectOes;
+  toString() => super.toString();
+}
+patch class _WebGL2RenderingContextBase {
+  static Type get instanceRuntimeType => _WebGL2RenderingContextBaseImpl;
+
+}
+class _WebGL2RenderingContextBaseImpl extends _WebGL2RenderingContextBase implements js_library.JSObjectInterfacesDom {
+  _WebGL2RenderingContextBaseImpl.internal_() : super.internal_();
+  get runtimeType => _WebGL2RenderingContextBase;
+  toString() => super.toString();
+}
+patch class _WebGLRenderingContextBase {
+  static Type get instanceRuntimeType => _WebGLRenderingContextBaseImpl;
+
+}
+class _WebGLRenderingContextBaseImpl extends _WebGLRenderingContextBase implements js_library.JSObjectInterfacesDom {
+  _WebGLRenderingContextBaseImpl.internal_() : super.internal_();
+  get runtimeType => _WebGLRenderingContextBase;
+  toString() => super.toString();
+}
 
 """],"dart:web_sql": ["dart:web_sql", "dart:web_sql_js_interop_patch.dart", """import 'dart:js' as js_library;
 
@@ -4569,6 +4569,15 @@
  */
 const _UNDEFINED_JS_CONST = const Object();
 
+patch class SqlDatabase {
+  static Type get instanceRuntimeType => SqlDatabaseImpl;
+
+}
+class SqlDatabaseImpl extends SqlDatabase implements js_library.JSObjectInterfacesDom {
+  SqlDatabaseImpl.internal_() : super.internal_();
+  get runtimeType => SqlDatabase;
+  toString() => super.toString();
+}
 patch class SqlError {
   static Type get instanceRuntimeType => SqlErrorImpl;
 
@@ -4596,15 +4605,6 @@
   get runtimeType => SqlResultSetRowList;
   toString() => super.toString();
 }
-patch class SqlDatabase {
-  static Type get instanceRuntimeType => SqlDatabaseImpl;
-
-}
-class SqlDatabaseImpl extends SqlDatabase implements js_library.JSObjectInterfacesDom {
-  SqlDatabaseImpl.internal_() : super.internal_();
-  get runtimeType => SqlDatabase;
-  toString() => super.toString();
-}
 patch class SqlTransaction {
   static Type get instanceRuntimeType => SqlTransactionImpl;
 
@@ -4623,427 +4623,13 @@
  */
 const _UNDEFINED_JS_CONST = const Object();
 
-patch class AnimatedString {
-  static Type get instanceRuntimeType => AnimatedStringImpl;
+patch class AElement {
+  static Type get instanceRuntimeType => AElementImpl;
 
 }
-class AnimatedStringImpl extends AnimatedString implements js_library.JSObjectInterfacesDom {
-  AnimatedStringImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedString;
-  toString() => super.toString();
-}
-patch class FilterElement {
-  static Type get instanceRuntimeType => FilterElementImpl;
-
-}
-class FilterElementImpl extends FilterElement implements js_library.JSObjectInterfacesDom {
-  FilterElementImpl.internal_() : super.internal_();
-  get runtimeType => FilterElement;
-  toString() => super.toString();
-}
-patch class FilterPrimitiveStandardAttributes {
-  static Type get instanceRuntimeType => FilterPrimitiveStandardAttributesImpl;
-
-}
-class FilterPrimitiveStandardAttributesImpl extends FilterPrimitiveStandardAttributes implements js_library.JSObjectInterfacesDom {
-  FilterPrimitiveStandardAttributesImpl.internal_() : super.internal_();
-  get runtimeType => FilterPrimitiveStandardAttributes;
-  toString() => super.toString();
-}
-patch class PathSegLinetoRel {
-  static Type get instanceRuntimeType => PathSegLinetoRelImpl;
-
-}
-class PathSegLinetoRelImpl extends PathSegLinetoRel implements js_library.JSObjectInterfacesDom {
-  PathSegLinetoRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegLinetoRel;
-  toString() => super.toString();
-}
-patch class UriReference {
-  static Type get instanceRuntimeType => UriReferenceImpl;
-
-}
-class UriReferenceImpl extends UriReference implements js_library.JSObjectInterfacesDom {
-  UriReferenceImpl.internal_() : super.internal_();
-  get runtimeType => UriReference;
-  toString() => super.toString();
-}
-patch class ImageElement {
-  static Type get instanceRuntimeType => ImageElementImpl;
-
-}
-class ImageElementImpl extends ImageElement implements js_library.JSObjectInterfacesDom {
-  ImageElementImpl.internal_() : super.internal_();
-  get runtimeType => ImageElement;
-  toString() => super.toString();
-}
-patch class StyleElement {
-  static Type get instanceRuntimeType => StyleElementImpl;
-
-}
-class StyleElementImpl extends StyleElement implements js_library.JSObjectInterfacesDom {
-  StyleElementImpl.internal_() : super.internal_();
-  get runtimeType => StyleElement;
-  toString() => super.toString();
-}
-patch class AnimatedPreserveAspectRatio {
-  static Type get instanceRuntimeType => AnimatedPreserveAspectRatioImpl;
-
-}
-class AnimatedPreserveAspectRatioImpl extends AnimatedPreserveAspectRatio implements js_library.JSObjectInterfacesDom {
-  AnimatedPreserveAspectRatioImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedPreserveAspectRatio;
-  toString() => super.toString();
-}
-patch class TextElement {
-  static Type get instanceRuntimeType => TextElementImpl;
-
-}
-class TextElementImpl extends TextElement implements js_library.JSObjectInterfacesDom {
-  TextElementImpl.internal_() : super.internal_();
-  get runtimeType => TextElement;
-  toString() => super.toString();
-}
-patch class DefsElement {
-  static Type get instanceRuntimeType => DefsElementImpl;
-
-}
-class DefsElementImpl extends DefsElement implements js_library.JSObjectInterfacesDom {
-  DefsElementImpl.internal_() : super.internal_();
-  get runtimeType => DefsElement;
-  toString() => super.toString();
-}
-patch class FEDiffuseLightingElement {
-  static Type get instanceRuntimeType => FEDiffuseLightingElementImpl;
-
-}
-class FEDiffuseLightingElementImpl extends FEDiffuseLightingElement implements js_library.JSObjectInterfacesDom {
-  FEDiffuseLightingElementImpl.internal_() : super.internal_();
-  get runtimeType => FEDiffuseLightingElement;
-  toString() => super.toString();
-}
-patch class FETileElement {
-  static Type get instanceRuntimeType => FETileElementImpl;
-
-}
-class FETileElementImpl extends FETileElement implements js_library.JSObjectInterfacesDom {
-  FETileElementImpl.internal_() : super.internal_();
-  get runtimeType => FETileElement;
-  toString() => super.toString();
-}
-patch class PathSegLinetoHorizontalAbs {
-  static Type get instanceRuntimeType => PathSegLinetoHorizontalAbsImpl;
-
-}
-class PathSegLinetoHorizontalAbsImpl extends PathSegLinetoHorizontalAbs implements js_library.JSObjectInterfacesDom {
-  PathSegLinetoHorizontalAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegLinetoHorizontalAbs;
-  toString() => super.toString();
-}
-patch class PathSegMovetoRel {
-  static Type get instanceRuntimeType => PathSegMovetoRelImpl;
-
-}
-class PathSegMovetoRelImpl extends PathSegMovetoRel implements js_library.JSObjectInterfacesDom {
-  PathSegMovetoRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegMovetoRel;
-  toString() => super.toString();
-}
-patch class _SVGFEDropShadowElement {
-  static Type get instanceRuntimeType => _SVGFEDropShadowElementImpl;
-
-}
-class _SVGFEDropShadowElementImpl extends _SVGFEDropShadowElement implements js_library.JSObjectInterfacesDom {
-  _SVGFEDropShadowElementImpl.internal_() : super.internal_();
-  get runtimeType => _SVGFEDropShadowElement;
-  toString() => super.toString();
-}
-patch class Transform {
-  static Type get instanceRuntimeType => TransformImpl;
-
-}
-class TransformImpl extends Transform implements js_library.JSObjectInterfacesDom {
-  TransformImpl.internal_() : super.internal_();
-  get runtimeType => Transform;
-  toString() => super.toString();
-}
-patch class PathSegArcRel {
-  static Type get instanceRuntimeType => PathSegArcRelImpl;
-
-}
-class PathSegArcRelImpl extends PathSegArcRel implements js_library.JSObjectInterfacesDom {
-  PathSegArcRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegArcRel;
-  toString() => super.toString();
-}
-patch class AnimateElement {
-  static Type get instanceRuntimeType => AnimateElementImpl;
-
-}
-class AnimateElementImpl extends AnimateElement implements js_library.JSObjectInterfacesDom {
-  AnimateElementImpl.internal_() : super.internal_();
-  get runtimeType => AnimateElement;
-  toString() => super.toString();
-}
-patch class PolylineElement {
-  static Type get instanceRuntimeType => PolylineElementImpl;
-
-}
-class PolylineElementImpl extends PolylineElement implements js_library.JSObjectInterfacesDom {
-  PolylineElementImpl.internal_() : super.internal_();
-  get runtimeType => PolylineElement;
-  toString() => super.toString();
-}
-patch class AnimatedRect {
-  static Type get instanceRuntimeType => AnimatedRectImpl;
-
-}
-class AnimatedRectImpl extends AnimatedRect implements js_library.JSObjectInterfacesDom {
-  AnimatedRectImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedRect;
-  toString() => super.toString();
-}
-patch class GraphicsElement {
-  static Type get instanceRuntimeType => GraphicsElementImpl;
-
-}
-class GraphicsElementImpl extends GraphicsElement implements js_library.JSObjectInterfacesDom {
-  GraphicsElementImpl.internal_() : super.internal_();
-  get runtimeType => GraphicsElement;
-  toString() => super.toString();
-}
-patch class TransformList {
-  static Type get instanceRuntimeType => TransformListImpl;
-
-}
-class TransformListImpl extends TransformList implements js_library.JSObjectInterfacesDom {
-  TransformListImpl.internal_() : super.internal_();
-  get runtimeType => TransformList;
-  toString() => super.toString();
-}
-patch class EllipseElement {
-  static Type get instanceRuntimeType => EllipseElementImpl;
-
-}
-class EllipseElementImpl extends EllipseElement implements js_library.JSObjectInterfacesDom {
-  EllipseElementImpl.internal_() : super.internal_();
-  get runtimeType => EllipseElement;
-  toString() => super.toString();
-}
-patch class FEFuncGElement {
-  static Type get instanceRuntimeType => FEFuncGElementImpl;
-
-}
-class FEFuncGElementImpl extends FEFuncGElement implements js_library.JSObjectInterfacesDom {
-  FEFuncGElementImpl.internal_() : super.internal_();
-  get runtimeType => FEFuncGElement;
-  toString() => super.toString();
-}
-patch class PointList {
-  static Type get instanceRuntimeType => PointListImpl;
-
-}
-class PointListImpl extends PointList implements js_library.JSObjectInterfacesDom {
-  PointListImpl.internal_() : super.internal_();
-  get runtimeType => PointList;
-  toString() => super.toString();
-}
-patch class FEMergeElement {
-  static Type get instanceRuntimeType => FEMergeElementImpl;
-
-}
-class FEMergeElementImpl extends FEMergeElement implements js_library.JSObjectInterfacesDom {
-  FEMergeElementImpl.internal_() : super.internal_();
-  get runtimeType => FEMergeElement;
-  toString() => super.toString();
-}
-patch class CircleElement {
-  static Type get instanceRuntimeType => CircleElementImpl;
-
-}
-class CircleElementImpl extends CircleElement implements js_library.JSObjectInterfacesDom {
-  CircleElementImpl.internal_() : super.internal_();
-  get runtimeType => CircleElement;
-  toString() => super.toString();
-}
-patch class AnimatedNumberList {
-  static Type get instanceRuntimeType => AnimatedNumberListImpl;
-
-}
-class AnimatedNumberListImpl extends AnimatedNumberList implements js_library.JSObjectInterfacesDom {
-  AnimatedNumberListImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedNumberList;
-  toString() => super.toString();
-}
-patch class SwitchElement {
-  static Type get instanceRuntimeType => SwitchElementImpl;
-
-}
-class SwitchElementImpl extends SwitchElement implements js_library.JSObjectInterfacesDom {
-  SwitchElementImpl.internal_() : super.internal_();
-  get runtimeType => SwitchElement;
-  toString() => super.toString();
-}
-patch class RadialGradientElement {
-  static Type get instanceRuntimeType => RadialGradientElementImpl;
-
-}
-class RadialGradientElementImpl extends RadialGradientElement implements js_library.JSObjectInterfacesDom {
-  RadialGradientElementImpl.internal_() : super.internal_();
-  get runtimeType => RadialGradientElement;
-  toString() => super.toString();
-}
-patch class FEDistantLightElement {
-  static Type get instanceRuntimeType => FEDistantLightElementImpl;
-
-}
-class FEDistantLightElementImpl extends FEDistantLightElement implements js_library.JSObjectInterfacesDom {
-  FEDistantLightElementImpl.internal_() : super.internal_();
-  get runtimeType => FEDistantLightElement;
-  toString() => super.toString();
-}
-patch class LinearGradientElement {
-  static Type get instanceRuntimeType => LinearGradientElementImpl;
-
-}
-class LinearGradientElementImpl extends LinearGradientElement implements js_library.JSObjectInterfacesDom {
-  LinearGradientElementImpl.internal_() : super.internal_();
-  get runtimeType => LinearGradientElement;
-  toString() => super.toString();
-}
-patch class TextPositioningElement {
-  static Type get instanceRuntimeType => TextPositioningElementImpl;
-
-}
-class TextPositioningElementImpl extends TextPositioningElement implements js_library.JSObjectInterfacesDom {
-  TextPositioningElementImpl.internal_() : super.internal_();
-  get runtimeType => TextPositioningElement;
-  toString() => super.toString();
-}
-patch class PathSegCurvetoQuadraticRel {
-  static Type get instanceRuntimeType => PathSegCurvetoQuadraticRelImpl;
-
-}
-class PathSegCurvetoQuadraticRelImpl extends PathSegCurvetoQuadraticRel implements js_library.JSObjectInterfacesDom {
-  PathSegCurvetoQuadraticRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegCurvetoQuadraticRel;
-  toString() => super.toString();
-}
-patch class PathSegLinetoHorizontalRel {
-  static Type get instanceRuntimeType => PathSegLinetoHorizontalRelImpl;
-
-}
-class PathSegLinetoHorizontalRelImpl extends PathSegLinetoHorizontalRel implements js_library.JSObjectInterfacesDom {
-  PathSegLinetoHorizontalRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegLinetoHorizontalRel;
-  toString() => super.toString();
-}
-patch class StringList {
-  static Type get instanceRuntimeType => StringListImpl;
-
-}
-class StringListImpl extends StringList implements js_library.JSObjectInterfacesDom {
-  StringListImpl.internal_() : super.internal_();
-  get runtimeType => StringList;
-  toString() => super.toString();
-}
-patch class TextContentElement {
-  static Type get instanceRuntimeType => TextContentElementImpl;
-
-}
-class TextContentElementImpl extends TextContentElement implements js_library.JSObjectInterfacesDom {
-  TextContentElementImpl.internal_() : super.internal_();
-  get runtimeType => TextContentElement;
-  toString() => super.toString();
-}
-patch class FEConvolveMatrixElement {
-  static Type get instanceRuntimeType => FEConvolveMatrixElementImpl;
-
-}
-class FEConvolveMatrixElementImpl extends FEConvolveMatrixElement implements js_library.JSObjectInterfacesDom {
-  FEConvolveMatrixElementImpl.internal_() : super.internal_();
-  get runtimeType => FEConvolveMatrixElement;
-  toString() => super.toString();
-}
-patch class PathSegLinetoAbs {
-  static Type get instanceRuntimeType => PathSegLinetoAbsImpl;
-
-}
-class PathSegLinetoAbsImpl extends PathSegLinetoAbs implements js_library.JSObjectInterfacesDom {
-  PathSegLinetoAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegLinetoAbs;
-  toString() => super.toString();
-}
-patch class FESpecularLightingElement {
-  static Type get instanceRuntimeType => FESpecularLightingElementImpl;
-
-}
-class FESpecularLightingElementImpl extends FESpecularLightingElement implements js_library.JSObjectInterfacesDom {
-  FESpecularLightingElementImpl.internal_() : super.internal_();
-  get runtimeType => FESpecularLightingElement;
-  toString() => super.toString();
-}
-patch class AnimatedTransformList {
-  static Type get instanceRuntimeType => AnimatedTransformListImpl;
-
-}
-class AnimatedTransformListImpl extends AnimatedTransformList implements js_library.JSObjectInterfacesDom {
-  AnimatedTransformListImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedTransformList;
-  toString() => super.toString();
-}
-patch class FEGaussianBlurElement {
-  static Type get instanceRuntimeType => FEGaussianBlurElementImpl;
-
-}
-class FEGaussianBlurElementImpl extends FEGaussianBlurElement implements js_library.JSObjectInterfacesDom {
-  FEGaussianBlurElementImpl.internal_() : super.internal_();
-  get runtimeType => FEGaussianBlurElement;
-  toString() => super.toString();
-}
-patch class Number {
-  static Type get instanceRuntimeType => NumberImpl;
-
-}
-class NumberImpl extends Number implements js_library.JSObjectInterfacesDom {
-  NumberImpl.internal_() : super.internal_();
-  get runtimeType => Number;
-  toString() => super.toString();
-}
-patch class ZoomEvent {
-  static Type get instanceRuntimeType => ZoomEventImpl;
-
-}
-class ZoomEventImpl extends ZoomEvent implements js_library.JSObjectInterfacesDom {
-  ZoomEventImpl.internal_() : super.internal_();
-  get runtimeType => ZoomEvent;
-  toString() => super.toString();
-}
-patch class PathSegCurvetoCubicSmoothAbs {
-  static Type get instanceRuntimeType => PathSegCurvetoCubicSmoothAbsImpl;
-
-}
-class PathSegCurvetoCubicSmoothAbsImpl extends PathSegCurvetoCubicSmoothAbs implements js_library.JSObjectInterfacesDom {
-  PathSegCurvetoCubicSmoothAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegCurvetoCubicSmoothAbs;
-  toString() => super.toString();
-}
-patch class AnimatedNumber {
-  static Type get instanceRuntimeType => AnimatedNumberImpl;
-
-}
-class AnimatedNumberImpl extends AnimatedNumber implements js_library.JSObjectInterfacesDom {
-  AnimatedNumberImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedNumber;
-  toString() => super.toString();
-}
-patch class MaskElement {
-  static Type get instanceRuntimeType => MaskElementImpl;
-
-}
-class MaskElementImpl extends MaskElement implements js_library.JSObjectInterfacesDom {
-  MaskElementImpl.internal_() : super.internal_();
-  get runtimeType => MaskElement;
+class AElementImpl extends AElement implements js_library.JSObjectInterfacesDom {
+  AElementImpl.internal_() : super.internal_();
+  get runtimeType => AElement;
   toString() => super.toString();
 }
 patch class Angle {
@@ -5055,373 +4641,13 @@
   get runtimeType => Angle;
   toString() => super.toString();
 }
-patch class SymbolElement {
-  static Type get instanceRuntimeType => SymbolElementImpl;
+patch class AnimateElement {
+  static Type get instanceRuntimeType => AnimateElementImpl;
 
 }
-class SymbolElementImpl extends SymbolElement implements js_library.JSObjectInterfacesDom {
-  SymbolElementImpl.internal_() : super.internal_();
-  get runtimeType => SymbolElement;
-  toString() => super.toString();
-}
-patch class PathSegArcAbs {
-  static Type get instanceRuntimeType => PathSegArcAbsImpl;
-
-}
-class PathSegArcAbsImpl extends PathSegArcAbs implements js_library.JSObjectInterfacesDom {
-  PathSegArcAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegArcAbs;
-  toString() => super.toString();
-}
-patch class RectElement {
-  static Type get instanceRuntimeType => RectElementImpl;
-
-}
-class RectElementImpl extends RectElement implements js_library.JSObjectInterfacesDom {
-  RectElementImpl.internal_() : super.internal_();
-  get runtimeType => RectElement;
-  toString() => super.toString();
-}
-patch class FEFloodElement {
-  static Type get instanceRuntimeType => FEFloodElementImpl;
-
-}
-class FEFloodElementImpl extends FEFloodElement implements js_library.JSObjectInterfacesDom {
-  FEFloodElementImpl.internal_() : super.internal_();
-  get runtimeType => FEFloodElement;
-  toString() => super.toString();
-}
-patch class PathSegCurvetoQuadraticAbs {
-  static Type get instanceRuntimeType => PathSegCurvetoQuadraticAbsImpl;
-
-}
-class PathSegCurvetoQuadraticAbsImpl extends PathSegCurvetoQuadraticAbs implements js_library.JSObjectInterfacesDom {
-  PathSegCurvetoQuadraticAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegCurvetoQuadraticAbs;
-  toString() => super.toString();
-}
-patch class ScriptElement {
-  static Type get instanceRuntimeType => ScriptElementImpl;
-
-}
-class ScriptElementImpl extends ScriptElement implements js_library.JSObjectInterfacesDom {
-  ScriptElementImpl.internal_() : super.internal_();
-  get runtimeType => ScriptElement;
-  toString() => super.toString();
-}
-patch class AnimatedInteger {
-  static Type get instanceRuntimeType => AnimatedIntegerImpl;
-
-}
-class AnimatedIntegerImpl extends AnimatedInteger implements js_library.JSObjectInterfacesDom {
-  AnimatedIntegerImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedInteger;
-  toString() => super.toString();
-}
-patch class Tests {
-  static Type get instanceRuntimeType => TestsImpl;
-
-}
-class TestsImpl extends Tests implements js_library.JSObjectInterfacesDom {
-  TestsImpl.internal_() : super.internal_();
-  get runtimeType => Tests;
-  toString() => super.toString();
-}
-patch class PathSegCurvetoCubicSmoothRel {
-  static Type get instanceRuntimeType => PathSegCurvetoCubicSmoothRelImpl;
-
-}
-class PathSegCurvetoCubicSmoothRelImpl extends PathSegCurvetoCubicSmoothRel implements js_library.JSObjectInterfacesDom {
-  PathSegCurvetoCubicSmoothRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegCurvetoCubicSmoothRel;
-  toString() => super.toString();
-}
-patch class PathSeg {
-  static Type get instanceRuntimeType => PathSegImpl;
-
-}
-class PathSegImpl extends PathSeg implements js_library.JSObjectInterfacesDom {
-  PathSegImpl.internal_() : super.internal_();
-  get runtimeType => PathSeg;
-  toString() => super.toString();
-}
-patch class GElement {
-  static Type get instanceRuntimeType => GElementImpl;
-
-}
-class GElementImpl extends GElement implements js_library.JSObjectInterfacesDom {
-  GElementImpl.internal_() : super.internal_();
-  get runtimeType => GElement;
-  toString() => super.toString();
-}
-patch class PathSegMovetoAbs {
-  static Type get instanceRuntimeType => PathSegMovetoAbsImpl;
-
-}
-class PathSegMovetoAbsImpl extends PathSegMovetoAbs implements js_library.JSObjectInterfacesDom {
-  PathSegMovetoAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegMovetoAbs;
-  toString() => super.toString();
-}
-patch class PathSegCurvetoCubicAbs {
-  static Type get instanceRuntimeType => PathSegCurvetoCubicAbsImpl;
-
-}
-class PathSegCurvetoCubicAbsImpl extends PathSegCurvetoCubicAbs implements js_library.JSObjectInterfacesDom {
-  PathSegCurvetoCubicAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegCurvetoCubicAbs;
-  toString() => super.toString();
-}
-patch class AnimatedEnumeration {
-  static Type get instanceRuntimeType => AnimatedEnumerationImpl;
-
-}
-class AnimatedEnumerationImpl extends AnimatedEnumeration implements js_library.JSObjectInterfacesDom {
-  AnimatedEnumerationImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedEnumeration;
-  toString() => super.toString();
-}
-patch class TitleElement {
-  static Type get instanceRuntimeType => TitleElementImpl;
-
-}
-class TitleElementImpl extends TitleElement implements js_library.JSObjectInterfacesDom {
-  TitleElementImpl.internal_() : super.internal_();
-  get runtimeType => TitleElement;
-  toString() => super.toString();
-}
-patch class MetadataElement {
-  static Type get instanceRuntimeType => MetadataElementImpl;
-
-}
-class MetadataElementImpl extends MetadataElement implements js_library.JSObjectInterfacesDom {
-  MetadataElementImpl.internal_() : super.internal_();
-  get runtimeType => MetadataElement;
-  toString() => super.toString();
-}
-patch class AElement {
-  static Type get instanceRuntimeType => AElementImpl;
-
-}
-class AElementImpl extends AElement implements js_library.JSObjectInterfacesDom {
-  AElementImpl.internal_() : super.internal_();
-  get runtimeType => AElement;
-  toString() => super.toString();
-}
-patch class _GradientElement {
-  static Type get instanceRuntimeType => _GradientElementImpl;
-
-}
-class _GradientElementImpl extends _GradientElement implements js_library.JSObjectInterfacesDom {
-  _GradientElementImpl.internal_() : super.internal_();
-  get runtimeType => _GradientElement;
-  toString() => super.toString();
-}
-patch class FEImageElement {
-  static Type get instanceRuntimeType => FEImageElementImpl;
-
-}
-class FEImageElementImpl extends FEImageElement implements js_library.JSObjectInterfacesDom {
-  FEImageElementImpl.internal_() : super.internal_();
-  get runtimeType => FEImageElement;
-  toString() => super.toString();
-}
-patch class _SVGComponentTransferFunctionElement {
-  static Type get instanceRuntimeType => _SVGComponentTransferFunctionElementImpl;
-
-}
-class _SVGComponentTransferFunctionElementImpl extends _SVGComponentTransferFunctionElement implements js_library.JSObjectInterfacesDom {
-  _SVGComponentTransferFunctionElementImpl.internal_() : super.internal_();
-  get runtimeType => _SVGComponentTransferFunctionElement;
-  toString() => super.toString();
-}
-patch class PathSegLinetoVerticalRel {
-  static Type get instanceRuntimeType => PathSegLinetoVerticalRelImpl;
-
-}
-class PathSegLinetoVerticalRelImpl extends PathSegLinetoVerticalRel implements js_library.JSObjectInterfacesDom {
-  PathSegLinetoVerticalRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegLinetoVerticalRel;
-  toString() => super.toString();
-}
-patch class AnimatedLengthList {
-  static Type get instanceRuntimeType => AnimatedLengthListImpl;
-
-}
-class AnimatedLengthListImpl extends AnimatedLengthList implements js_library.JSObjectInterfacesDom {
-  AnimatedLengthListImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedLengthList;
-  toString() => super.toString();
-}
-patch class FEMorphologyElement {
-  static Type get instanceRuntimeType => FEMorphologyElementImpl;
-
-}
-class FEMorphologyElementImpl extends FEMorphologyElement implements js_library.JSObjectInterfacesDom {
-  FEMorphologyElementImpl.internal_() : super.internal_();
-  get runtimeType => FEMorphologyElement;
-  toString() => super.toString();
-}
-patch class PolygonElement {
-  static Type get instanceRuntimeType => PolygonElementImpl;
-
-}
-class PolygonElementImpl extends PolygonElement implements js_library.JSObjectInterfacesDom {
-  PolygonElementImpl.internal_() : super.internal_();
-  get runtimeType => PolygonElement;
-  toString() => super.toString();
-}
-patch class UseElement {
-  static Type get instanceRuntimeType => UseElementImpl;
-
-}
-class UseElementImpl extends UseElement implements js_library.JSObjectInterfacesDom {
-  UseElementImpl.internal_() : super.internal_();
-  get runtimeType => UseElement;
-  toString() => super.toString();
-}
-patch class Point {
-  static Type get instanceRuntimeType => PointImpl;
-
-}
-class PointImpl extends Point implements js_library.JSObjectInterfacesDom {
-  PointImpl.internal_() : super.internal_();
-  get runtimeType => Point;
-  toString() => super.toString();
-}
-patch class Rect {
-  static Type get instanceRuntimeType => RectImpl;
-
-}
-class RectImpl extends Rect implements js_library.JSObjectInterfacesDom {
-  RectImpl.internal_() : super.internal_();
-  get runtimeType => Rect;
-  toString() => super.toString();
-}
-patch class AnimatedBoolean {
-  static Type get instanceRuntimeType => AnimatedBooleanImpl;
-
-}
-class AnimatedBooleanImpl extends AnimatedBoolean implements js_library.JSObjectInterfacesDom {
-  AnimatedBooleanImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedBoolean;
-  toString() => super.toString();
-}
-patch class FETurbulenceElement {
-  static Type get instanceRuntimeType => FETurbulenceElementImpl;
-
-}
-class FETurbulenceElementImpl extends FETurbulenceElement implements js_library.JSObjectInterfacesDom {
-  FETurbulenceElementImpl.internal_() : super.internal_();
-  get runtimeType => FETurbulenceElement;
-  toString() => super.toString();
-}
-patch class NumberList {
-  static Type get instanceRuntimeType => NumberListImpl;
-
-}
-class NumberListImpl extends NumberList implements js_library.JSObjectInterfacesDom {
-  NumberListImpl.internal_() : super.internal_();
-  get runtimeType => NumberList;
-  toString() => super.toString();
-}
-patch class AnimationElement {
-  static Type get instanceRuntimeType => AnimationElementImpl;
-
-}
-class AnimationElementImpl extends AnimationElement implements js_library.JSObjectInterfacesDom {
-  AnimationElementImpl.internal_() : super.internal_();
-  get runtimeType => AnimationElement;
-  toString() => super.toString();
-}
-patch class MarkerElement {
-  static Type get instanceRuntimeType => MarkerElementImpl;
-
-}
-class MarkerElementImpl extends MarkerElement implements js_library.JSObjectInterfacesDom {
-  MarkerElementImpl.internal_() : super.internal_();
-  get runtimeType => MarkerElement;
-  toString() => super.toString();
-}
-patch class FECompositeElement {
-  static Type get instanceRuntimeType => FECompositeElementImpl;
-
-}
-class FECompositeElementImpl extends FECompositeElement implements js_library.JSObjectInterfacesDom {
-  FECompositeElementImpl.internal_() : super.internal_();
-  get runtimeType => FECompositeElement;
-  toString() => super.toString();
-}
-patch class PathSegList {
-  static Type get instanceRuntimeType => PathSegListImpl;
-
-}
-class PathSegListImpl extends PathSegList implements js_library.JSObjectInterfacesDom {
-  PathSegListImpl.internal_() : super.internal_();
-  get runtimeType => PathSegList;
-  toString() => super.toString();
-}
-patch class PathSegCurvetoQuadraticSmoothRel {
-  static Type get instanceRuntimeType => PathSegCurvetoQuadraticSmoothRelImpl;
-
-}
-class PathSegCurvetoQuadraticSmoothRelImpl extends PathSegCurvetoQuadraticSmoothRel implements js_library.JSObjectInterfacesDom {
-  PathSegCurvetoQuadraticSmoothRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegCurvetoQuadraticSmoothRel;
-  toString() => super.toString();
-}
-patch class FEFuncRElement {
-  static Type get instanceRuntimeType => FEFuncRElementImpl;
-
-}
-class FEFuncRElementImpl extends FEFuncRElement implements js_library.JSObjectInterfacesDom {
-  FEFuncRElementImpl.internal_() : super.internal_();
-  get runtimeType => FEFuncRElement;
-  toString() => super.toString();
-}
-patch class FEFuncBElement {
-  static Type get instanceRuntimeType => FEFuncBElementImpl;
-
-}
-class FEFuncBElementImpl extends FEFuncBElement implements js_library.JSObjectInterfacesDom {
-  FEFuncBElementImpl.internal_() : super.internal_();
-  get runtimeType => FEFuncBElement;
-  toString() => super.toString();
-}
-patch class FEBlendElement {
-  static Type get instanceRuntimeType => FEBlendElementImpl;
-
-}
-class FEBlendElementImpl extends FEBlendElement implements js_library.JSObjectInterfacesDom {
-  FEBlendElementImpl.internal_() : super.internal_();
-  get runtimeType => FEBlendElement;
-  toString() => super.toString();
-}
-patch class AnimatedAngle {
-  static Type get instanceRuntimeType => AnimatedAngleImpl;
-
-}
-class AnimatedAngleImpl extends AnimatedAngle implements js_library.JSObjectInterfacesDom {
-  AnimatedAngleImpl.internal_() : super.internal_();
-  get runtimeType => AnimatedAngle;
-  toString() => super.toString();
-}
-patch class TSpanElement {
-  static Type get instanceRuntimeType => TSpanElementImpl;
-
-}
-class TSpanElementImpl extends TSpanElement implements js_library.JSObjectInterfacesDom {
-  TSpanElementImpl.internal_() : super.internal_();
-  get runtimeType => TSpanElement;
-  toString() => super.toString();
-}
-patch class PathSegCurvetoCubicRel {
-  static Type get instanceRuntimeType => PathSegCurvetoCubicRelImpl;
-
-}
-class PathSegCurvetoCubicRelImpl extends PathSegCurvetoCubicRel implements js_library.JSObjectInterfacesDom {
-  PathSegCurvetoCubicRelImpl.internal_() : super.internal_();
-  get runtimeType => PathSegCurvetoCubicRel;
+class AnimateElementImpl extends AnimateElement implements js_library.JSObjectInterfacesDom {
+  AnimateElementImpl.internal_() : super.internal_();
+  get runtimeType => AnimateElement;
   toString() => super.toString();
 }
 patch class AnimateMotionElement {
@@ -5433,15 +4659,6 @@
   get runtimeType => AnimateMotionElement;
   toString() => super.toString();
 }
-patch class GeometryElement {
-  static Type get instanceRuntimeType => GeometryElementImpl;
-
-}
-class GeometryElementImpl extends GeometryElement implements js_library.JSObjectInterfacesDom {
-  GeometryElementImpl.internal_() : super.internal_();
-  get runtimeType => GeometryElement;
-  toString() => super.toString();
-}
 patch class AnimateTransformElement {
   static Type get instanceRuntimeType => AnimateTransformElementImpl;
 
@@ -5451,130 +4668,40 @@
   get runtimeType => AnimateTransformElement;
   toString() => super.toString();
 }
-patch class PreserveAspectRatio {
-  static Type get instanceRuntimeType => PreserveAspectRatioImpl;
+patch class AnimatedAngle {
+  static Type get instanceRuntimeType => AnimatedAngleImpl;
 
 }
-class PreserveAspectRatioImpl extends PreserveAspectRatio implements js_library.JSObjectInterfacesDom {
-  PreserveAspectRatioImpl.internal_() : super.internal_();
-  get runtimeType => PreserveAspectRatio;
+class AnimatedAngleImpl extends AnimatedAngle implements js_library.JSObjectInterfacesDom {
+  AnimatedAngleImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedAngle;
   toString() => super.toString();
 }
-patch class PathElement {
-  static Type get instanceRuntimeType => PathElementImpl;
+patch class AnimatedBoolean {
+  static Type get instanceRuntimeType => AnimatedBooleanImpl;
 
 }
-class PathElementImpl extends PathElement implements js_library.JSObjectInterfacesDom {
-  PathElementImpl.internal_() : super.internal_();
-  get runtimeType => PathElement;
+class AnimatedBooleanImpl extends AnimatedBoolean implements js_library.JSObjectInterfacesDom {
+  AnimatedBooleanImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedBoolean;
   toString() => super.toString();
 }
-patch class FEColorMatrixElement {
-  static Type get instanceRuntimeType => FEColorMatrixElementImpl;
+patch class AnimatedEnumeration {
+  static Type get instanceRuntimeType => AnimatedEnumerationImpl;
 
 }
-class FEColorMatrixElementImpl extends FEColorMatrixElement implements js_library.JSObjectInterfacesDom {
-  FEColorMatrixElementImpl.internal_() : super.internal_();
-  get runtimeType => FEColorMatrixElement;
+class AnimatedEnumerationImpl extends AnimatedEnumeration implements js_library.JSObjectInterfacesDom {
+  AnimatedEnumerationImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedEnumeration;
   toString() => super.toString();
 }
-patch class PatternElement {
-  static Type get instanceRuntimeType => PatternElementImpl;
+patch class AnimatedInteger {
+  static Type get instanceRuntimeType => AnimatedIntegerImpl;
 
 }
-class PatternElementImpl extends PatternElement implements js_library.JSObjectInterfacesDom {
-  PatternElementImpl.internal_() : super.internal_();
-  get runtimeType => PatternElement;
-  toString() => super.toString();
-}
-patch class Length {
-  static Type get instanceRuntimeType => LengthImpl;
-
-}
-class LengthImpl extends Length implements js_library.JSObjectInterfacesDom {
-  LengthImpl.internal_() : super.internal_();
-  get runtimeType => Length;
-  toString() => super.toString();
-}
-patch class FESpotLightElement {
-  static Type get instanceRuntimeType => FESpotLightElementImpl;
-
-}
-class FESpotLightElementImpl extends FESpotLightElement implements js_library.JSObjectInterfacesDom {
-  FESpotLightElementImpl.internal_() : super.internal_();
-  get runtimeType => FESpotLightElement;
-  toString() => super.toString();
-}
-patch class LineElement {
-  static Type get instanceRuntimeType => LineElementImpl;
-
-}
-class LineElementImpl extends LineElement implements js_library.JSObjectInterfacesDom {
-  LineElementImpl.internal_() : super.internal_();
-  get runtimeType => LineElement;
-  toString() => super.toString();
-}
-patch class Matrix {
-  static Type get instanceRuntimeType => MatrixImpl;
-
-}
-class MatrixImpl extends Matrix implements js_library.JSObjectInterfacesDom {
-  MatrixImpl.internal_() : super.internal_();
-  get runtimeType => Matrix;
-  toString() => super.toString();
-}
-patch class SvgSvgElement {
-  static Type get instanceRuntimeType => SvgSvgElementImpl;
-
-}
-class SvgSvgElementImpl extends SvgSvgElement implements js_library.JSObjectInterfacesDom {
-  SvgSvgElementImpl.internal_() : super.internal_();
-  get runtimeType => SvgSvgElement;
-  toString() => super.toString();
-}
-patch class FitToViewBox {
-  static Type get instanceRuntimeType => FitToViewBoxImpl;
-
-}
-class FitToViewBoxImpl extends FitToViewBox implements js_library.JSObjectInterfacesDom {
-  FitToViewBoxImpl.internal_() : super.internal_();
-  get runtimeType => FitToViewBox;
-  toString() => super.toString();
-}
-patch class _SVGMPathElement {
-  static Type get instanceRuntimeType => _SVGMPathElementImpl;
-
-}
-class _SVGMPathElementImpl extends _SVGMPathElement implements js_library.JSObjectInterfacesDom {
-  _SVGMPathElementImpl.internal_() : super.internal_();
-  get runtimeType => _SVGMPathElement;
-  toString() => super.toString();
-}
-patch class FEDisplacementMapElement {
-  static Type get instanceRuntimeType => FEDisplacementMapElementImpl;
-
-}
-class FEDisplacementMapElementImpl extends FEDisplacementMapElement implements js_library.JSObjectInterfacesDom {
-  FEDisplacementMapElementImpl.internal_() : super.internal_();
-  get runtimeType => FEDisplacementMapElement;
-  toString() => super.toString();
-}
-patch class PathSegCurvetoQuadraticSmoothAbs {
-  static Type get instanceRuntimeType => PathSegCurvetoQuadraticSmoothAbsImpl;
-
-}
-class PathSegCurvetoQuadraticSmoothAbsImpl extends PathSegCurvetoQuadraticSmoothAbs implements js_library.JSObjectInterfacesDom {
-  PathSegCurvetoQuadraticSmoothAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegCurvetoQuadraticSmoothAbs;
-  toString() => super.toString();
-}
-patch class PathSegClosePath {
-  static Type get instanceRuntimeType => PathSegClosePathImpl;
-
-}
-class PathSegClosePathImpl extends PathSegClosePath implements js_library.JSObjectInterfacesDom {
-  PathSegClosePathImpl.internal_() : super.internal_();
-  get runtimeType => PathSegClosePath;
+class AnimatedIntegerImpl extends AnimatedInteger implements js_library.JSObjectInterfacesDom {
+  AnimatedIntegerImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedInteger;
   toString() => super.toString();
 }
 patch class AnimatedLength {
@@ -5586,6 +4713,87 @@
   get runtimeType => AnimatedLength;
   toString() => super.toString();
 }
+patch class AnimatedLengthList {
+  static Type get instanceRuntimeType => AnimatedLengthListImpl;
+
+}
+class AnimatedLengthListImpl extends AnimatedLengthList implements js_library.JSObjectInterfacesDom {
+  AnimatedLengthListImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedLengthList;
+  toString() => super.toString();
+}
+patch class AnimatedNumber {
+  static Type get instanceRuntimeType => AnimatedNumberImpl;
+
+}
+class AnimatedNumberImpl extends AnimatedNumber implements js_library.JSObjectInterfacesDom {
+  AnimatedNumberImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedNumber;
+  toString() => super.toString();
+}
+patch class AnimatedNumberList {
+  static Type get instanceRuntimeType => AnimatedNumberListImpl;
+
+}
+class AnimatedNumberListImpl extends AnimatedNumberList implements js_library.JSObjectInterfacesDom {
+  AnimatedNumberListImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedNumberList;
+  toString() => super.toString();
+}
+patch class AnimatedPreserveAspectRatio {
+  static Type get instanceRuntimeType => AnimatedPreserveAspectRatioImpl;
+
+}
+class AnimatedPreserveAspectRatioImpl extends AnimatedPreserveAspectRatio implements js_library.JSObjectInterfacesDom {
+  AnimatedPreserveAspectRatioImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedPreserveAspectRatio;
+  toString() => super.toString();
+}
+patch class AnimatedRect {
+  static Type get instanceRuntimeType => AnimatedRectImpl;
+
+}
+class AnimatedRectImpl extends AnimatedRect implements js_library.JSObjectInterfacesDom {
+  AnimatedRectImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedRect;
+  toString() => super.toString();
+}
+patch class AnimatedString {
+  static Type get instanceRuntimeType => AnimatedStringImpl;
+
+}
+class AnimatedStringImpl extends AnimatedString implements js_library.JSObjectInterfacesDom {
+  AnimatedStringImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedString;
+  toString() => super.toString();
+}
+patch class AnimatedTransformList {
+  static Type get instanceRuntimeType => AnimatedTransformListImpl;
+
+}
+class AnimatedTransformListImpl extends AnimatedTransformList implements js_library.JSObjectInterfacesDom {
+  AnimatedTransformListImpl.internal_() : super.internal_();
+  get runtimeType => AnimatedTransformList;
+  toString() => super.toString();
+}
+patch class AnimationElement {
+  static Type get instanceRuntimeType => AnimationElementImpl;
+
+}
+class AnimationElementImpl extends AnimationElement implements js_library.JSObjectInterfacesDom {
+  AnimationElementImpl.internal_() : super.internal_();
+  get runtimeType => AnimationElement;
+  toString() => super.toString();
+}
+patch class CircleElement {
+  static Type get instanceRuntimeType => CircleElementImpl;
+
+}
+class CircleElementImpl extends CircleElement implements js_library.JSObjectInterfacesDom {
+  CircleElementImpl.internal_() : super.internal_();
+  get runtimeType => CircleElement;
+  toString() => super.toString();
+}
 patch class ClipPathElement {
   static Type get instanceRuntimeType => ClipPathElementImpl;
 
@@ -5595,94 +4803,13 @@
   get runtimeType => ClipPathElement;
   toString() => super.toString();
 }
-patch class StopElement {
-  static Type get instanceRuntimeType => StopElementImpl;
+patch class DefsElement {
+  static Type get instanceRuntimeType => DefsElementImpl;
 
 }
-class StopElementImpl extends StopElement implements js_library.JSObjectInterfacesDom {
-  StopElementImpl.internal_() : super.internal_();
-  get runtimeType => StopElement;
-  toString() => super.toString();
-}
-patch class ViewSpec {
-  static Type get instanceRuntimeType => ViewSpecImpl;
-
-}
-class ViewSpecImpl extends ViewSpec implements js_library.JSObjectInterfacesDom {
-  ViewSpecImpl.internal_() : super.internal_();
-  get runtimeType => ViewSpec;
-  toString() => super.toString();
-}
-patch class LengthList {
-  static Type get instanceRuntimeType => LengthListImpl;
-
-}
-class LengthListImpl extends LengthList implements js_library.JSObjectInterfacesDom {
-  LengthListImpl.internal_() : super.internal_();
-  get runtimeType => LengthList;
-  toString() => super.toString();
-}
-patch class _SVGCursorElement {
-  static Type get instanceRuntimeType => _SVGCursorElementImpl;
-
-}
-class _SVGCursorElementImpl extends _SVGCursorElement implements js_library.JSObjectInterfacesDom {
-  _SVGCursorElementImpl.internal_() : super.internal_();
-  get runtimeType => _SVGCursorElement;
-  toString() => super.toString();
-}
-patch class ForeignObjectElement {
-  static Type get instanceRuntimeType => ForeignObjectElementImpl;
-
-}
-class ForeignObjectElementImpl extends ForeignObjectElement implements js_library.JSObjectInterfacesDom {
-  ForeignObjectElementImpl.internal_() : super.internal_();
-  get runtimeType => ForeignObjectElement;
-  toString() => super.toString();
-}
-patch class SetElement {
-  static Type get instanceRuntimeType => SetElementImpl;
-
-}
-class SetElementImpl extends SetElement implements js_library.JSObjectInterfacesDom {
-  SetElementImpl.internal_() : super.internal_();
-  get runtimeType => SetElement;
-  toString() => super.toString();
-}
-patch class SvgElement {
-  static Type get instanceRuntimeType => SvgElementImpl;
-
-}
-class SvgElementImpl extends SvgElement implements js_library.JSObjectInterfacesDom {
-  SvgElementImpl.internal_() : super.internal_();
-  get runtimeType => SvgElement;
-  toString() => super.toString();
-}
-patch class UnitTypes {
-  static Type get instanceRuntimeType => UnitTypesImpl;
-
-}
-class UnitTypesImpl extends UnitTypes implements js_library.JSObjectInterfacesDom {
-  UnitTypesImpl.internal_() : super.internal_();
-  get runtimeType => UnitTypes;
-  toString() => super.toString();
-}
-patch class FEComponentTransferElement {
-  static Type get instanceRuntimeType => FEComponentTransferElementImpl;
-
-}
-class FEComponentTransferElementImpl extends FEComponentTransferElement implements js_library.JSObjectInterfacesDom {
-  FEComponentTransferElementImpl.internal_() : super.internal_();
-  get runtimeType => FEComponentTransferElement;
-  toString() => super.toString();
-}
-patch class PathSegLinetoVerticalAbs {
-  static Type get instanceRuntimeType => PathSegLinetoVerticalAbsImpl;
-
-}
-class PathSegLinetoVerticalAbsImpl extends PathSegLinetoVerticalAbs implements js_library.JSObjectInterfacesDom {
-  PathSegLinetoVerticalAbsImpl.internal_() : super.internal_();
-  get runtimeType => PathSegLinetoVerticalAbs;
+class DefsElementImpl extends DefsElement implements js_library.JSObjectInterfacesDom {
+  DefsElementImpl.internal_() : super.internal_();
+  get runtimeType => DefsElement;
   toString() => super.toString();
 }
 patch class DescElement {
@@ -5703,58 +4830,94 @@
   get runtimeType => DiscardElement;
   toString() => super.toString();
 }
-patch class FEMergeNodeElement {
-  static Type get instanceRuntimeType => FEMergeNodeElementImpl;
+patch class EllipseElement {
+  static Type get instanceRuntimeType => EllipseElementImpl;
 
 }
-class FEMergeNodeElementImpl extends FEMergeNodeElement implements js_library.JSObjectInterfacesDom {
-  FEMergeNodeElementImpl.internal_() : super.internal_();
-  get runtimeType => FEMergeNodeElement;
+class EllipseElementImpl extends EllipseElement implements js_library.JSObjectInterfacesDom {
+  EllipseElementImpl.internal_() : super.internal_();
+  get runtimeType => EllipseElement;
   toString() => super.toString();
 }
-patch class TextPathElement {
-  static Type get instanceRuntimeType => TextPathElementImpl;
+patch class FEBlendElement {
+  static Type get instanceRuntimeType => FEBlendElementImpl;
 
 }
-class TextPathElementImpl extends TextPathElement implements js_library.JSObjectInterfacesDom {
-  TextPathElementImpl.internal_() : super.internal_();
-  get runtimeType => TextPathElement;
+class FEBlendElementImpl extends FEBlendElement implements js_library.JSObjectInterfacesDom {
+  FEBlendElementImpl.internal_() : super.internal_();
+  get runtimeType => FEBlendElement;
   toString() => super.toString();
 }
-patch class FEOffsetElement {
-  static Type get instanceRuntimeType => FEOffsetElementImpl;
+patch class FEColorMatrixElement {
+  static Type get instanceRuntimeType => FEColorMatrixElementImpl;
 
 }
-class FEOffsetElementImpl extends FEOffsetElement implements js_library.JSObjectInterfacesDom {
-  FEOffsetElementImpl.internal_() : super.internal_();
-  get runtimeType => FEOffsetElement;
+class FEColorMatrixElementImpl extends FEColorMatrixElement implements js_library.JSObjectInterfacesDom {
+  FEColorMatrixElementImpl.internal_() : super.internal_();
+  get runtimeType => FEColorMatrixElement;
   toString() => super.toString();
 }
-patch class ZoomAndPan {
-  static Type get instanceRuntimeType => ZoomAndPanImpl;
+patch class FEComponentTransferElement {
+  static Type get instanceRuntimeType => FEComponentTransferElementImpl;
 
 }
-class ZoomAndPanImpl extends ZoomAndPan implements js_library.JSObjectInterfacesDom {
-  ZoomAndPanImpl.internal_() : super.internal_();
-  get runtimeType => ZoomAndPan;
+class FEComponentTransferElementImpl extends FEComponentTransferElement implements js_library.JSObjectInterfacesDom {
+  FEComponentTransferElementImpl.internal_() : super.internal_();
+  get runtimeType => FEComponentTransferElement;
   toString() => super.toString();
 }
-patch class ViewElement {
-  static Type get instanceRuntimeType => ViewElementImpl;
+patch class FECompositeElement {
+  static Type get instanceRuntimeType => FECompositeElementImpl;
 
 }
-class ViewElementImpl extends ViewElement implements js_library.JSObjectInterfacesDom {
-  ViewElementImpl.internal_() : super.internal_();
-  get runtimeType => ViewElement;
+class FECompositeElementImpl extends FECompositeElement implements js_library.JSObjectInterfacesDom {
+  FECompositeElementImpl.internal_() : super.internal_();
+  get runtimeType => FECompositeElement;
   toString() => super.toString();
 }
-patch class FEPointLightElement {
-  static Type get instanceRuntimeType => FEPointLightElementImpl;
+patch class FEConvolveMatrixElement {
+  static Type get instanceRuntimeType => FEConvolveMatrixElementImpl;
 
 }
-class FEPointLightElementImpl extends FEPointLightElement implements js_library.JSObjectInterfacesDom {
-  FEPointLightElementImpl.internal_() : super.internal_();
-  get runtimeType => FEPointLightElement;
+class FEConvolveMatrixElementImpl extends FEConvolveMatrixElement implements js_library.JSObjectInterfacesDom {
+  FEConvolveMatrixElementImpl.internal_() : super.internal_();
+  get runtimeType => FEConvolveMatrixElement;
+  toString() => super.toString();
+}
+patch class FEDiffuseLightingElement {
+  static Type get instanceRuntimeType => FEDiffuseLightingElementImpl;
+
+}
+class FEDiffuseLightingElementImpl extends FEDiffuseLightingElement implements js_library.JSObjectInterfacesDom {
+  FEDiffuseLightingElementImpl.internal_() : super.internal_();
+  get runtimeType => FEDiffuseLightingElement;
+  toString() => super.toString();
+}
+patch class FEDisplacementMapElement {
+  static Type get instanceRuntimeType => FEDisplacementMapElementImpl;
+
+}
+class FEDisplacementMapElementImpl extends FEDisplacementMapElement implements js_library.JSObjectInterfacesDom {
+  FEDisplacementMapElementImpl.internal_() : super.internal_();
+  get runtimeType => FEDisplacementMapElement;
+  toString() => super.toString();
+}
+patch class FEDistantLightElement {
+  static Type get instanceRuntimeType => FEDistantLightElementImpl;
+
+}
+class FEDistantLightElementImpl extends FEDistantLightElement implements js_library.JSObjectInterfacesDom {
+  FEDistantLightElementImpl.internal_() : super.internal_();
+  get runtimeType => FEDistantLightElement;
+  toString() => super.toString();
+}
+patch class FEFloodElement {
+  static Type get instanceRuntimeType => FEFloodElementImpl;
+
+}
+class FEFloodElementImpl extends FEFloodElement implements js_library.JSObjectInterfacesDom {
+  FEFloodElementImpl.internal_() : super.internal_();
+  get runtimeType => FEFloodElement;
   toString() => super.toString();
 }
 patch class FEFuncAElement {
@@ -5766,6 +4929,843 @@
   get runtimeType => FEFuncAElement;
   toString() => super.toString();
 }
+patch class FEFuncBElement {
+  static Type get instanceRuntimeType => FEFuncBElementImpl;
+
+}
+class FEFuncBElementImpl extends FEFuncBElement implements js_library.JSObjectInterfacesDom {
+  FEFuncBElementImpl.internal_() : super.internal_();
+  get runtimeType => FEFuncBElement;
+  toString() => super.toString();
+}
+patch class FEFuncGElement {
+  static Type get instanceRuntimeType => FEFuncGElementImpl;
+
+}
+class FEFuncGElementImpl extends FEFuncGElement implements js_library.JSObjectInterfacesDom {
+  FEFuncGElementImpl.internal_() : super.internal_();
+  get runtimeType => FEFuncGElement;
+  toString() => super.toString();
+}
+patch class FEFuncRElement {
+  static Type get instanceRuntimeType => FEFuncRElementImpl;
+
+}
+class FEFuncRElementImpl extends FEFuncRElement implements js_library.JSObjectInterfacesDom {
+  FEFuncRElementImpl.internal_() : super.internal_();
+  get runtimeType => FEFuncRElement;
+  toString() => super.toString();
+}
+patch class FEGaussianBlurElement {
+  static Type get instanceRuntimeType => FEGaussianBlurElementImpl;
+
+}
+class FEGaussianBlurElementImpl extends FEGaussianBlurElement implements js_library.JSObjectInterfacesDom {
+  FEGaussianBlurElementImpl.internal_() : super.internal_();
+  get runtimeType => FEGaussianBlurElement;
+  toString() => super.toString();
+}
+patch class FEImageElement {
+  static Type get instanceRuntimeType => FEImageElementImpl;
+
+}
+class FEImageElementImpl extends FEImageElement implements js_library.JSObjectInterfacesDom {
+  FEImageElementImpl.internal_() : super.internal_();
+  get runtimeType => FEImageElement;
+  toString() => super.toString();
+}
+patch class FEMergeElement {
+  static Type get instanceRuntimeType => FEMergeElementImpl;
+
+}
+class FEMergeElementImpl extends FEMergeElement implements js_library.JSObjectInterfacesDom {
+  FEMergeElementImpl.internal_() : super.internal_();
+  get runtimeType => FEMergeElement;
+  toString() => super.toString();
+}
+patch class FEMergeNodeElement {
+  static Type get instanceRuntimeType => FEMergeNodeElementImpl;
+
+}
+class FEMergeNodeElementImpl extends FEMergeNodeElement implements js_library.JSObjectInterfacesDom {
+  FEMergeNodeElementImpl.internal_() : super.internal_();
+  get runtimeType => FEMergeNodeElement;
+  toString() => super.toString();
+}
+patch class FEMorphologyElement {
+  static Type get instanceRuntimeType => FEMorphologyElementImpl;
+
+}
+class FEMorphologyElementImpl extends FEMorphologyElement implements js_library.JSObjectInterfacesDom {
+  FEMorphologyElementImpl.internal_() : super.internal_();
+  get runtimeType => FEMorphologyElement;
+  toString() => super.toString();
+}
+patch class FEOffsetElement {
+  static Type get instanceRuntimeType => FEOffsetElementImpl;
+
+}
+class FEOffsetElementImpl extends FEOffsetElement implements js_library.JSObjectInterfacesDom {
+  FEOffsetElementImpl.internal_() : super.internal_();
+  get runtimeType => FEOffsetElement;
+  toString() => super.toString();
+}
+patch class FEPointLightElement {
+  static Type get instanceRuntimeType => FEPointLightElementImpl;
+
+}
+class FEPointLightElementImpl extends FEPointLightElement implements js_library.JSObjectInterfacesDom {
+  FEPointLightElementImpl.internal_() : super.internal_();
+  get runtimeType => FEPointLightElement;
+  toString() => super.toString();
+}
+patch class FESpecularLightingElement {
+  static Type get instanceRuntimeType => FESpecularLightingElementImpl;
+
+}
+class FESpecularLightingElementImpl extends FESpecularLightingElement implements js_library.JSObjectInterfacesDom {
+  FESpecularLightingElementImpl.internal_() : super.internal_();
+  get runtimeType => FESpecularLightingElement;
+  toString() => super.toString();
+}
+patch class FESpotLightElement {
+  static Type get instanceRuntimeType => FESpotLightElementImpl;
+
+}
+class FESpotLightElementImpl extends FESpotLightElement implements js_library.JSObjectInterfacesDom {
+  FESpotLightElementImpl.internal_() : super.internal_();
+  get runtimeType => FESpotLightElement;
+  toString() => super.toString();
+}
+patch class FETileElement {
+  static Type get instanceRuntimeType => FETileElementImpl;
+
+}
+class FETileElementImpl extends FETileElement implements js_library.JSObjectInterfacesDom {
+  FETileElementImpl.internal_() : super.internal_();
+  get runtimeType => FETileElement;
+  toString() => super.toString();
+}
+patch class FETurbulenceElement {
+  static Type get instanceRuntimeType => FETurbulenceElementImpl;
+
+}
+class FETurbulenceElementImpl extends FETurbulenceElement implements js_library.JSObjectInterfacesDom {
+  FETurbulenceElementImpl.internal_() : super.internal_();
+  get runtimeType => FETurbulenceElement;
+  toString() => super.toString();
+}
+patch class FilterElement {
+  static Type get instanceRuntimeType => FilterElementImpl;
+
+}
+class FilterElementImpl extends FilterElement implements js_library.JSObjectInterfacesDom {
+  FilterElementImpl.internal_() : super.internal_();
+  get runtimeType => FilterElement;
+  toString() => super.toString();
+}
+patch class FilterPrimitiveStandardAttributes {
+  static Type get instanceRuntimeType => FilterPrimitiveStandardAttributesImpl;
+
+}
+class FilterPrimitiveStandardAttributesImpl extends FilterPrimitiveStandardAttributes implements js_library.JSObjectInterfacesDom {
+  FilterPrimitiveStandardAttributesImpl.internal_() : super.internal_();
+  get runtimeType => FilterPrimitiveStandardAttributes;
+  toString() => super.toString();
+}
+patch class FitToViewBox {
+  static Type get instanceRuntimeType => FitToViewBoxImpl;
+
+}
+class FitToViewBoxImpl extends FitToViewBox implements js_library.JSObjectInterfacesDom {
+  FitToViewBoxImpl.internal_() : super.internal_();
+  get runtimeType => FitToViewBox;
+  toString() => super.toString();
+}
+patch class ForeignObjectElement {
+  static Type get instanceRuntimeType => ForeignObjectElementImpl;
+
+}
+class ForeignObjectElementImpl extends ForeignObjectElement implements js_library.JSObjectInterfacesDom {
+  ForeignObjectElementImpl.internal_() : super.internal_();
+  get runtimeType => ForeignObjectElement;
+  toString() => super.toString();
+}
+patch class GElement {
+  static Type get instanceRuntimeType => GElementImpl;
+
+}
+class GElementImpl extends GElement implements js_library.JSObjectInterfacesDom {
+  GElementImpl.internal_() : super.internal_();
+  get runtimeType => GElement;
+  toString() => super.toString();
+}
+patch class GeometryElement {
+  static Type get instanceRuntimeType => GeometryElementImpl;
+
+}
+class GeometryElementImpl extends GeometryElement implements js_library.JSObjectInterfacesDom {
+  GeometryElementImpl.internal_() : super.internal_();
+  get runtimeType => GeometryElement;
+  toString() => super.toString();
+}
+patch class GraphicsElement {
+  static Type get instanceRuntimeType => GraphicsElementImpl;
+
+}
+class GraphicsElementImpl extends GraphicsElement implements js_library.JSObjectInterfacesDom {
+  GraphicsElementImpl.internal_() : super.internal_();
+  get runtimeType => GraphicsElement;
+  toString() => super.toString();
+}
+patch class ImageElement {
+  static Type get instanceRuntimeType => ImageElementImpl;
+
+}
+class ImageElementImpl extends ImageElement implements js_library.JSObjectInterfacesDom {
+  ImageElementImpl.internal_() : super.internal_();
+  get runtimeType => ImageElement;
+  toString() => super.toString();
+}
+patch class Length {
+  static Type get instanceRuntimeType => LengthImpl;
+
+}
+class LengthImpl extends Length implements js_library.JSObjectInterfacesDom {
+  LengthImpl.internal_() : super.internal_();
+  get runtimeType => Length;
+  toString() => super.toString();
+}
+patch class LengthList {
+  static Type get instanceRuntimeType => LengthListImpl;
+
+}
+class LengthListImpl extends LengthList implements js_library.JSObjectInterfacesDom {
+  LengthListImpl.internal_() : super.internal_();
+  get runtimeType => LengthList;
+  toString() => super.toString();
+}
+patch class LineElement {
+  static Type get instanceRuntimeType => LineElementImpl;
+
+}
+class LineElementImpl extends LineElement implements js_library.JSObjectInterfacesDom {
+  LineElementImpl.internal_() : super.internal_();
+  get runtimeType => LineElement;
+  toString() => super.toString();
+}
+patch class LinearGradientElement {
+  static Type get instanceRuntimeType => LinearGradientElementImpl;
+
+}
+class LinearGradientElementImpl extends LinearGradientElement implements js_library.JSObjectInterfacesDom {
+  LinearGradientElementImpl.internal_() : super.internal_();
+  get runtimeType => LinearGradientElement;
+  toString() => super.toString();
+}
+patch class MarkerElement {
+  static Type get instanceRuntimeType => MarkerElementImpl;
+
+}
+class MarkerElementImpl extends MarkerElement implements js_library.JSObjectInterfacesDom {
+  MarkerElementImpl.internal_() : super.internal_();
+  get runtimeType => MarkerElement;
+  toString() => super.toString();
+}
+patch class MaskElement {
+  static Type get instanceRuntimeType => MaskElementImpl;
+
+}
+class MaskElementImpl extends MaskElement implements js_library.JSObjectInterfacesDom {
+  MaskElementImpl.internal_() : super.internal_();
+  get runtimeType => MaskElement;
+  toString() => super.toString();
+}
+patch class Matrix {
+  static Type get instanceRuntimeType => MatrixImpl;
+
+}
+class MatrixImpl extends Matrix implements js_library.JSObjectInterfacesDom {
+  MatrixImpl.internal_() : super.internal_();
+  get runtimeType => Matrix;
+  toString() => super.toString();
+}
+patch class MetadataElement {
+  static Type get instanceRuntimeType => MetadataElementImpl;
+
+}
+class MetadataElementImpl extends MetadataElement implements js_library.JSObjectInterfacesDom {
+  MetadataElementImpl.internal_() : super.internal_();
+  get runtimeType => MetadataElement;
+  toString() => super.toString();
+}
+patch class Number {
+  static Type get instanceRuntimeType => NumberImpl;
+
+}
+class NumberImpl extends Number implements js_library.JSObjectInterfacesDom {
+  NumberImpl.internal_() : super.internal_();
+  get runtimeType => Number;
+  toString() => super.toString();
+}
+patch class NumberList {
+  static Type get instanceRuntimeType => NumberListImpl;
+
+}
+class NumberListImpl extends NumberList implements js_library.JSObjectInterfacesDom {
+  NumberListImpl.internal_() : super.internal_();
+  get runtimeType => NumberList;
+  toString() => super.toString();
+}
+patch class PathElement {
+  static Type get instanceRuntimeType => PathElementImpl;
+
+}
+class PathElementImpl extends PathElement implements js_library.JSObjectInterfacesDom {
+  PathElementImpl.internal_() : super.internal_();
+  get runtimeType => PathElement;
+  toString() => super.toString();
+}
+patch class PathSeg {
+  static Type get instanceRuntimeType => PathSegImpl;
+
+}
+class PathSegImpl extends PathSeg implements js_library.JSObjectInterfacesDom {
+  PathSegImpl.internal_() : super.internal_();
+  get runtimeType => PathSeg;
+  toString() => super.toString();
+}
+patch class PathSegArcAbs {
+  static Type get instanceRuntimeType => PathSegArcAbsImpl;
+
+}
+class PathSegArcAbsImpl extends PathSegArcAbs implements js_library.JSObjectInterfacesDom {
+  PathSegArcAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegArcAbs;
+  toString() => super.toString();
+}
+patch class PathSegArcRel {
+  static Type get instanceRuntimeType => PathSegArcRelImpl;
+
+}
+class PathSegArcRelImpl extends PathSegArcRel implements js_library.JSObjectInterfacesDom {
+  PathSegArcRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegArcRel;
+  toString() => super.toString();
+}
+patch class PathSegClosePath {
+  static Type get instanceRuntimeType => PathSegClosePathImpl;
+
+}
+class PathSegClosePathImpl extends PathSegClosePath implements js_library.JSObjectInterfacesDom {
+  PathSegClosePathImpl.internal_() : super.internal_();
+  get runtimeType => PathSegClosePath;
+  toString() => super.toString();
+}
+patch class PathSegCurvetoCubicAbs {
+  static Type get instanceRuntimeType => PathSegCurvetoCubicAbsImpl;
+
+}
+class PathSegCurvetoCubicAbsImpl extends PathSegCurvetoCubicAbs implements js_library.JSObjectInterfacesDom {
+  PathSegCurvetoCubicAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegCurvetoCubicAbs;
+  toString() => super.toString();
+}
+patch class PathSegCurvetoCubicRel {
+  static Type get instanceRuntimeType => PathSegCurvetoCubicRelImpl;
+
+}
+class PathSegCurvetoCubicRelImpl extends PathSegCurvetoCubicRel implements js_library.JSObjectInterfacesDom {
+  PathSegCurvetoCubicRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegCurvetoCubicRel;
+  toString() => super.toString();
+}
+patch class PathSegCurvetoCubicSmoothAbs {
+  static Type get instanceRuntimeType => PathSegCurvetoCubicSmoothAbsImpl;
+
+}
+class PathSegCurvetoCubicSmoothAbsImpl extends PathSegCurvetoCubicSmoothAbs implements js_library.JSObjectInterfacesDom {
+  PathSegCurvetoCubicSmoothAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegCurvetoCubicSmoothAbs;
+  toString() => super.toString();
+}
+patch class PathSegCurvetoCubicSmoothRel {
+  static Type get instanceRuntimeType => PathSegCurvetoCubicSmoothRelImpl;
+
+}
+class PathSegCurvetoCubicSmoothRelImpl extends PathSegCurvetoCubicSmoothRel implements js_library.JSObjectInterfacesDom {
+  PathSegCurvetoCubicSmoothRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegCurvetoCubicSmoothRel;
+  toString() => super.toString();
+}
+patch class PathSegCurvetoQuadraticAbs {
+  static Type get instanceRuntimeType => PathSegCurvetoQuadraticAbsImpl;
+
+}
+class PathSegCurvetoQuadraticAbsImpl extends PathSegCurvetoQuadraticAbs implements js_library.JSObjectInterfacesDom {
+  PathSegCurvetoQuadraticAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegCurvetoQuadraticAbs;
+  toString() => super.toString();
+}
+patch class PathSegCurvetoQuadraticRel {
+  static Type get instanceRuntimeType => PathSegCurvetoQuadraticRelImpl;
+
+}
+class PathSegCurvetoQuadraticRelImpl extends PathSegCurvetoQuadraticRel implements js_library.JSObjectInterfacesDom {
+  PathSegCurvetoQuadraticRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegCurvetoQuadraticRel;
+  toString() => super.toString();
+}
+patch class PathSegCurvetoQuadraticSmoothAbs {
+  static Type get instanceRuntimeType => PathSegCurvetoQuadraticSmoothAbsImpl;
+
+}
+class PathSegCurvetoQuadraticSmoothAbsImpl extends PathSegCurvetoQuadraticSmoothAbs implements js_library.JSObjectInterfacesDom {
+  PathSegCurvetoQuadraticSmoothAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegCurvetoQuadraticSmoothAbs;
+  toString() => super.toString();
+}
+patch class PathSegCurvetoQuadraticSmoothRel {
+  static Type get instanceRuntimeType => PathSegCurvetoQuadraticSmoothRelImpl;
+
+}
+class PathSegCurvetoQuadraticSmoothRelImpl extends PathSegCurvetoQuadraticSmoothRel implements js_library.JSObjectInterfacesDom {
+  PathSegCurvetoQuadraticSmoothRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegCurvetoQuadraticSmoothRel;
+  toString() => super.toString();
+}
+patch class PathSegLinetoAbs {
+  static Type get instanceRuntimeType => PathSegLinetoAbsImpl;
+
+}
+class PathSegLinetoAbsImpl extends PathSegLinetoAbs implements js_library.JSObjectInterfacesDom {
+  PathSegLinetoAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegLinetoAbs;
+  toString() => super.toString();
+}
+patch class PathSegLinetoHorizontalAbs {
+  static Type get instanceRuntimeType => PathSegLinetoHorizontalAbsImpl;
+
+}
+class PathSegLinetoHorizontalAbsImpl extends PathSegLinetoHorizontalAbs implements js_library.JSObjectInterfacesDom {
+  PathSegLinetoHorizontalAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegLinetoHorizontalAbs;
+  toString() => super.toString();
+}
+patch class PathSegLinetoHorizontalRel {
+  static Type get instanceRuntimeType => PathSegLinetoHorizontalRelImpl;
+
+}
+class PathSegLinetoHorizontalRelImpl extends PathSegLinetoHorizontalRel implements js_library.JSObjectInterfacesDom {
+  PathSegLinetoHorizontalRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegLinetoHorizontalRel;
+  toString() => super.toString();
+}
+patch class PathSegLinetoRel {
+  static Type get instanceRuntimeType => PathSegLinetoRelImpl;
+
+}
+class PathSegLinetoRelImpl extends PathSegLinetoRel implements js_library.JSObjectInterfacesDom {
+  PathSegLinetoRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegLinetoRel;
+  toString() => super.toString();
+}
+patch class PathSegLinetoVerticalAbs {
+  static Type get instanceRuntimeType => PathSegLinetoVerticalAbsImpl;
+
+}
+class PathSegLinetoVerticalAbsImpl extends PathSegLinetoVerticalAbs implements js_library.JSObjectInterfacesDom {
+  PathSegLinetoVerticalAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegLinetoVerticalAbs;
+  toString() => super.toString();
+}
+patch class PathSegLinetoVerticalRel {
+  static Type get instanceRuntimeType => PathSegLinetoVerticalRelImpl;
+
+}
+class PathSegLinetoVerticalRelImpl extends PathSegLinetoVerticalRel implements js_library.JSObjectInterfacesDom {
+  PathSegLinetoVerticalRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegLinetoVerticalRel;
+  toString() => super.toString();
+}
+patch class PathSegList {
+  static Type get instanceRuntimeType => PathSegListImpl;
+
+}
+class PathSegListImpl extends PathSegList implements js_library.JSObjectInterfacesDom {
+  PathSegListImpl.internal_() : super.internal_();
+  get runtimeType => PathSegList;
+  toString() => super.toString();
+}
+patch class PathSegMovetoAbs {
+  static Type get instanceRuntimeType => PathSegMovetoAbsImpl;
+
+}
+class PathSegMovetoAbsImpl extends PathSegMovetoAbs implements js_library.JSObjectInterfacesDom {
+  PathSegMovetoAbsImpl.internal_() : super.internal_();
+  get runtimeType => PathSegMovetoAbs;
+  toString() => super.toString();
+}
+patch class PathSegMovetoRel {
+  static Type get instanceRuntimeType => PathSegMovetoRelImpl;
+
+}
+class PathSegMovetoRelImpl extends PathSegMovetoRel implements js_library.JSObjectInterfacesDom {
+  PathSegMovetoRelImpl.internal_() : super.internal_();
+  get runtimeType => PathSegMovetoRel;
+  toString() => super.toString();
+}
+patch class PatternElement {
+  static Type get instanceRuntimeType => PatternElementImpl;
+
+}
+class PatternElementImpl extends PatternElement implements js_library.JSObjectInterfacesDom {
+  PatternElementImpl.internal_() : super.internal_();
+  get runtimeType => PatternElement;
+  toString() => super.toString();
+}
+patch class Point {
+  static Type get instanceRuntimeType => PointImpl;
+
+}
+class PointImpl extends Point implements js_library.JSObjectInterfacesDom {
+  PointImpl.internal_() : super.internal_();
+  get runtimeType => Point;
+  toString() => super.toString();
+}
+patch class PointList {
+  static Type get instanceRuntimeType => PointListImpl;
+
+}
+class PointListImpl extends PointList implements js_library.JSObjectInterfacesDom {
+  PointListImpl.internal_() : super.internal_();
+  get runtimeType => PointList;
+  toString() => super.toString();
+}
+patch class PolygonElement {
+  static Type get instanceRuntimeType => PolygonElementImpl;
+
+}
+class PolygonElementImpl extends PolygonElement implements js_library.JSObjectInterfacesDom {
+  PolygonElementImpl.internal_() : super.internal_();
+  get runtimeType => PolygonElement;
+  toString() => super.toString();
+}
+patch class PolylineElement {
+  static Type get instanceRuntimeType => PolylineElementImpl;
+
+}
+class PolylineElementImpl extends PolylineElement implements js_library.JSObjectInterfacesDom {
+  PolylineElementImpl.internal_() : super.internal_();
+  get runtimeType => PolylineElement;
+  toString() => super.toString();
+}
+patch class PreserveAspectRatio {
+  static Type get instanceRuntimeType => PreserveAspectRatioImpl;
+
+}
+class PreserveAspectRatioImpl extends PreserveAspectRatio implements js_library.JSObjectInterfacesDom {
+  PreserveAspectRatioImpl.internal_() : super.internal_();
+  get runtimeType => PreserveAspectRatio;
+  toString() => super.toString();
+}
+patch class RadialGradientElement {
+  static Type get instanceRuntimeType => RadialGradientElementImpl;
+
+}
+class RadialGradientElementImpl extends RadialGradientElement implements js_library.JSObjectInterfacesDom {
+  RadialGradientElementImpl.internal_() : super.internal_();
+  get runtimeType => RadialGradientElement;
+  toString() => super.toString();
+}
+patch class Rect {
+  static Type get instanceRuntimeType => RectImpl;
+
+}
+class RectImpl extends Rect implements js_library.JSObjectInterfacesDom {
+  RectImpl.internal_() : super.internal_();
+  get runtimeType => Rect;
+  toString() => super.toString();
+}
+patch class RectElement {
+  static Type get instanceRuntimeType => RectElementImpl;
+
+}
+class RectElementImpl extends RectElement implements js_library.JSObjectInterfacesDom {
+  RectElementImpl.internal_() : super.internal_();
+  get runtimeType => RectElement;
+  toString() => super.toString();
+}
+patch class ScriptElement {
+  static Type get instanceRuntimeType => ScriptElementImpl;
+
+}
+class ScriptElementImpl extends ScriptElement implements js_library.JSObjectInterfacesDom {
+  ScriptElementImpl.internal_() : super.internal_();
+  get runtimeType => ScriptElement;
+  toString() => super.toString();
+}
+patch class SetElement {
+  static Type get instanceRuntimeType => SetElementImpl;
+
+}
+class SetElementImpl extends SetElement implements js_library.JSObjectInterfacesDom {
+  SetElementImpl.internal_() : super.internal_();
+  get runtimeType => SetElement;
+  toString() => super.toString();
+}
+patch class StopElement {
+  static Type get instanceRuntimeType => StopElementImpl;
+
+}
+class StopElementImpl extends StopElement implements js_library.JSObjectInterfacesDom {
+  StopElementImpl.internal_() : super.internal_();
+  get runtimeType => StopElement;
+  toString() => super.toString();
+}
+patch class StringList {
+  static Type get instanceRuntimeType => StringListImpl;
+
+}
+class StringListImpl extends StringList implements js_library.JSObjectInterfacesDom {
+  StringListImpl.internal_() : super.internal_();
+  get runtimeType => StringList;
+  toString() => super.toString();
+}
+patch class StyleElement {
+  static Type get instanceRuntimeType => StyleElementImpl;
+
+}
+class StyleElementImpl extends StyleElement implements js_library.JSObjectInterfacesDom {
+  StyleElementImpl.internal_() : super.internal_();
+  get runtimeType => StyleElement;
+  toString() => super.toString();
+}
+patch class SvgElement {
+  static Type get instanceRuntimeType => SvgElementImpl;
+
+}
+class SvgElementImpl extends SvgElement implements js_library.JSObjectInterfacesDom {
+  SvgElementImpl.internal_() : super.internal_();
+  get runtimeType => SvgElement;
+  toString() => super.toString();
+}
+patch class SvgSvgElement {
+  static Type get instanceRuntimeType => SvgSvgElementImpl;
+
+}
+class SvgSvgElementImpl extends SvgSvgElement implements js_library.JSObjectInterfacesDom {
+  SvgSvgElementImpl.internal_() : super.internal_();
+  get runtimeType => SvgSvgElement;
+  toString() => super.toString();
+}
+patch class SwitchElement {
+  static Type get instanceRuntimeType => SwitchElementImpl;
+
+}
+class SwitchElementImpl extends SwitchElement implements js_library.JSObjectInterfacesDom {
+  SwitchElementImpl.internal_() : super.internal_();
+  get runtimeType => SwitchElement;
+  toString() => super.toString();
+}
+patch class SymbolElement {
+  static Type get instanceRuntimeType => SymbolElementImpl;
+
+}
+class SymbolElementImpl extends SymbolElement implements js_library.JSObjectInterfacesDom {
+  SymbolElementImpl.internal_() : super.internal_();
+  get runtimeType => SymbolElement;
+  toString() => super.toString();
+}
+patch class TSpanElement {
+  static Type get instanceRuntimeType => TSpanElementImpl;
+
+}
+class TSpanElementImpl extends TSpanElement implements js_library.JSObjectInterfacesDom {
+  TSpanElementImpl.internal_() : super.internal_();
+  get runtimeType => TSpanElement;
+  toString() => super.toString();
+}
+patch class Tests {
+  static Type get instanceRuntimeType => TestsImpl;
+
+}
+class TestsImpl extends Tests implements js_library.JSObjectInterfacesDom {
+  TestsImpl.internal_() : super.internal_();
+  get runtimeType => Tests;
+  toString() => super.toString();
+}
+patch class TextContentElement {
+  static Type get instanceRuntimeType => TextContentElementImpl;
+
+}
+class TextContentElementImpl extends TextContentElement implements js_library.JSObjectInterfacesDom {
+  TextContentElementImpl.internal_() : super.internal_();
+  get runtimeType => TextContentElement;
+  toString() => super.toString();
+}
+patch class TextElement {
+  static Type get instanceRuntimeType => TextElementImpl;
+
+}
+class TextElementImpl extends TextElement implements js_library.JSObjectInterfacesDom {
+  TextElementImpl.internal_() : super.internal_();
+  get runtimeType => TextElement;
+  toString() => super.toString();
+}
+patch class TextPathElement {
+  static Type get instanceRuntimeType => TextPathElementImpl;
+
+}
+class TextPathElementImpl extends TextPathElement implements js_library.JSObjectInterfacesDom {
+  TextPathElementImpl.internal_() : super.internal_();
+  get runtimeType => TextPathElement;
+  toString() => super.toString();
+}
+patch class TextPositioningElement {
+  static Type get instanceRuntimeType => TextPositioningElementImpl;
+
+}
+class TextPositioningElementImpl extends TextPositioningElement implements js_library.JSObjectInterfacesDom {
+  TextPositioningElementImpl.internal_() : super.internal_();
+  get runtimeType => TextPositioningElement;
+  toString() => super.toString();
+}
+patch class TitleElement {
+  static Type get instanceRuntimeType => TitleElementImpl;
+
+}
+class TitleElementImpl extends TitleElement implements js_library.JSObjectInterfacesDom {
+  TitleElementImpl.internal_() : super.internal_();
+  get runtimeType => TitleElement;
+  toString() => super.toString();
+}
+patch class Transform {
+  static Type get instanceRuntimeType => TransformImpl;
+
+}
+class TransformImpl extends Transform implements js_library.JSObjectInterfacesDom {
+  TransformImpl.internal_() : super.internal_();
+  get runtimeType => Transform;
+  toString() => super.toString();
+}
+patch class TransformList {
+  static Type get instanceRuntimeType => TransformListImpl;
+
+}
+class TransformListImpl extends TransformList implements js_library.JSObjectInterfacesDom {
+  TransformListImpl.internal_() : super.internal_();
+  get runtimeType => TransformList;
+  toString() => super.toString();
+}
+patch class UnitTypes {
+  static Type get instanceRuntimeType => UnitTypesImpl;
+
+}
+class UnitTypesImpl extends UnitTypes implements js_library.JSObjectInterfacesDom {
+  UnitTypesImpl.internal_() : super.internal_();
+  get runtimeType => UnitTypes;
+  toString() => super.toString();
+}
+patch class UriReference {
+  static Type get instanceRuntimeType => UriReferenceImpl;
+
+}
+class UriReferenceImpl extends UriReference implements js_library.JSObjectInterfacesDom {
+  UriReferenceImpl.internal_() : super.internal_();
+  get runtimeType => UriReference;
+  toString() => super.toString();
+}
+patch class UseElement {
+  static Type get instanceRuntimeType => UseElementImpl;
+
+}
+class UseElementImpl extends UseElement implements js_library.JSObjectInterfacesDom {
+  UseElementImpl.internal_() : super.internal_();
+  get runtimeType => UseElement;
+  toString() => super.toString();
+}
+patch class ViewElement {
+  static Type get instanceRuntimeType => ViewElementImpl;
+
+}
+class ViewElementImpl extends ViewElement implements js_library.JSObjectInterfacesDom {
+  ViewElementImpl.internal_() : super.internal_();
+  get runtimeType => ViewElement;
+  toString() => super.toString();
+}
+patch class ViewSpec {
+  static Type get instanceRuntimeType => ViewSpecImpl;
+
+}
+class ViewSpecImpl extends ViewSpec implements js_library.JSObjectInterfacesDom {
+  ViewSpecImpl.internal_() : super.internal_();
+  get runtimeType => ViewSpec;
+  toString() => super.toString();
+}
+patch class ZoomAndPan {
+  static Type get instanceRuntimeType => ZoomAndPanImpl;
+
+}
+class ZoomAndPanImpl extends ZoomAndPan implements js_library.JSObjectInterfacesDom {
+  ZoomAndPanImpl.internal_() : super.internal_();
+  get runtimeType => ZoomAndPan;
+  toString() => super.toString();
+}
+patch class ZoomEvent {
+  static Type get instanceRuntimeType => ZoomEventImpl;
+
+}
+class ZoomEventImpl extends ZoomEvent implements js_library.JSObjectInterfacesDom {
+  ZoomEventImpl.internal_() : super.internal_();
+  get runtimeType => ZoomEvent;
+  toString() => super.toString();
+}
+patch class _GradientElement {
+  static Type get instanceRuntimeType => _GradientElementImpl;
+
+}
+class _GradientElementImpl extends _GradientElement implements js_library.JSObjectInterfacesDom {
+  _GradientElementImpl.internal_() : super.internal_();
+  get runtimeType => _GradientElement;
+  toString() => super.toString();
+}
+patch class _SVGComponentTransferFunctionElement {
+  static Type get instanceRuntimeType => _SVGComponentTransferFunctionElementImpl;
+
+}
+class _SVGComponentTransferFunctionElementImpl extends _SVGComponentTransferFunctionElement implements js_library.JSObjectInterfacesDom {
+  _SVGComponentTransferFunctionElementImpl.internal_() : super.internal_();
+  get runtimeType => _SVGComponentTransferFunctionElement;
+  toString() => super.toString();
+}
+patch class _SVGCursorElement {
+  static Type get instanceRuntimeType => _SVGCursorElementImpl;
+
+}
+class _SVGCursorElementImpl extends _SVGCursorElement implements js_library.JSObjectInterfacesDom {
+  _SVGCursorElementImpl.internal_() : super.internal_();
+  get runtimeType => _SVGCursorElement;
+  toString() => super.toString();
+}
+patch class _SVGFEDropShadowElement {
+  static Type get instanceRuntimeType => _SVGFEDropShadowElementImpl;
+
+}
+class _SVGFEDropShadowElementImpl extends _SVGFEDropShadowElement implements js_library.JSObjectInterfacesDom {
+  _SVGFEDropShadowElementImpl.internal_() : super.internal_();
+  get runtimeType => _SVGFEDropShadowElement;
+  toString() => super.toString();
+}
+patch class _SVGMPathElement {
+  static Type get instanceRuntimeType => _SVGMPathElementImpl;
+
+}
+class _SVGMPathElementImpl extends _SVGMPathElement implements js_library.JSObjectInterfacesDom {
+  _SVGMPathElementImpl.internal_() : super.internal_();
+  get runtimeType => _SVGMPathElement;
+  toString() => super.toString();
+}
 
 """],"dart:web_audio": ["dart:web_audio", "dart:web_audio_js_interop_patch.dart", """import 'dart:js' as js_library;
 
@@ -5775,96 +5775,6 @@
  */
 const _UNDEFINED_JS_CONST = const Object();
 
-patch class GainNode {
-  static Type get instanceRuntimeType => GainNodeImpl;
-
-}
-class GainNodeImpl extends GainNode implements js_library.JSObjectInterfacesDom {
-  GainNodeImpl.internal_() : super.internal_();
-  get runtimeType => GainNode;
-  toString() => super.toString();
-}
-patch class MediaStreamAudioDestinationNode {
-  static Type get instanceRuntimeType => MediaStreamAudioDestinationNodeImpl;
-
-}
-class MediaStreamAudioDestinationNodeImpl extends MediaStreamAudioDestinationNode implements js_library.JSObjectInterfacesDom {
-  MediaStreamAudioDestinationNodeImpl.internal_() : super.internal_();
-  get runtimeType => MediaStreamAudioDestinationNode;
-  toString() => super.toString();
-}
-patch class AudioProcessingEvent {
-  static Type get instanceRuntimeType => AudioProcessingEventImpl;
-
-}
-class AudioProcessingEventImpl extends AudioProcessingEvent implements js_library.JSObjectInterfacesDom {
-  AudioProcessingEventImpl.internal_() : super.internal_();
-  get runtimeType => AudioProcessingEvent;
-  toString() => super.toString();
-}
-patch class StereoPannerNode {
-  static Type get instanceRuntimeType => StereoPannerNodeImpl;
-
-}
-class StereoPannerNodeImpl extends StereoPannerNode implements js_library.JSObjectInterfacesDom {
-  StereoPannerNodeImpl.internal_() : super.internal_();
-  get runtimeType => StereoPannerNode;
-  toString() => super.toString();
-}
-patch class DynamicsCompressorNode {
-  static Type get instanceRuntimeType => DynamicsCompressorNodeImpl;
-
-}
-class DynamicsCompressorNodeImpl extends DynamicsCompressorNode implements js_library.JSObjectInterfacesDom {
-  DynamicsCompressorNodeImpl.internal_() : super.internal_();
-  get runtimeType => DynamicsCompressorNode;
-  toString() => super.toString();
-}
-patch class PeriodicWave {
-  static Type get instanceRuntimeType => PeriodicWaveImpl;
-
-}
-class PeriodicWaveImpl extends PeriodicWave implements js_library.JSObjectInterfacesDom {
-  PeriodicWaveImpl.internal_() : super.internal_();
-  get runtimeType => PeriodicWave;
-  toString() => super.toString();
-}
-patch class MediaStreamAudioSourceNode {
-  static Type get instanceRuntimeType => MediaStreamAudioSourceNodeImpl;
-
-}
-class MediaStreamAudioSourceNodeImpl extends MediaStreamAudioSourceNode implements js_library.JSObjectInterfacesDom {
-  MediaStreamAudioSourceNodeImpl.internal_() : super.internal_();
-  get runtimeType => MediaStreamAudioSourceNode;
-  toString() => super.toString();
-}
-patch class PannerNode {
-  static Type get instanceRuntimeType => PannerNodeImpl;
-
-}
-class PannerNodeImpl extends PannerNode implements js_library.JSObjectInterfacesDom {
-  PannerNodeImpl.internal_() : super.internal_();
-  get runtimeType => PannerNode;
-  toString() => super.toString();
-}
-patch class OfflineAudioContext {
-  static Type get instanceRuntimeType => OfflineAudioContextImpl;
-
-}
-class OfflineAudioContextImpl extends OfflineAudioContext implements js_library.JSObjectInterfacesDom {
-  OfflineAudioContextImpl.internal_() : super.internal_();
-  get runtimeType => OfflineAudioContext;
-  toString() => super.toString();
-}
-patch class AudioParam {
-  static Type get instanceRuntimeType => AudioParamImpl;
-
-}
-class AudioParamImpl extends AudioParam implements js_library.JSObjectInterfacesDom {
-  AudioParamImpl.internal_() : super.internal_();
-  get runtimeType => AudioParam;
-  toString() => super.toString();
-}
 patch class AnalyserNode {
   static Type get instanceRuntimeType => AnalyserNodeImpl;
 
@@ -5874,58 +5784,13 @@
   get runtimeType => AnalyserNode;
   toString() => super.toString();
 }
-patch class ConvolverNode {
-  static Type get instanceRuntimeType => ConvolverNodeImpl;
+patch class AudioBuffer {
+  static Type get instanceRuntimeType => AudioBufferImpl;
 
 }
-class ConvolverNodeImpl extends ConvolverNode implements js_library.JSObjectInterfacesDom {
-  ConvolverNodeImpl.internal_() : super.internal_();
-  get runtimeType => ConvolverNode;
-  toString() => super.toString();
-}
-patch class AudioNode {
-  static Type get instanceRuntimeType => AudioNodeImpl;
-
-}
-class AudioNodeImpl extends AudioNode implements js_library.JSObjectInterfacesDom {
-  AudioNodeImpl.internal_() : super.internal_();
-  get runtimeType => AudioNode;
-  toString() => super.toString();
-}
-patch class AudioDestinationNode {
-  static Type get instanceRuntimeType => AudioDestinationNodeImpl;
-
-}
-class AudioDestinationNodeImpl extends AudioDestinationNode implements js_library.JSObjectInterfacesDom {
-  AudioDestinationNodeImpl.internal_() : super.internal_();
-  get runtimeType => AudioDestinationNode;
-  toString() => super.toString();
-}
-patch class WaveShaperNode {
-  static Type get instanceRuntimeType => WaveShaperNodeImpl;
-
-}
-class WaveShaperNodeImpl extends WaveShaperNode implements js_library.JSObjectInterfacesDom {
-  WaveShaperNodeImpl.internal_() : super.internal_();
-  get runtimeType => WaveShaperNode;
-  toString() => super.toString();
-}
-patch class ScriptProcessorNode {
-  static Type get instanceRuntimeType => ScriptProcessorNodeImpl;
-
-}
-class ScriptProcessorNodeImpl extends ScriptProcessorNode implements js_library.JSObjectInterfacesDom {
-  ScriptProcessorNodeImpl.internal_() : super.internal_();
-  get runtimeType => ScriptProcessorNode;
-  toString() => super.toString();
-}
-patch class MediaElementAudioSourceNode {
-  static Type get instanceRuntimeType => MediaElementAudioSourceNodeImpl;
-
-}
-class MediaElementAudioSourceNodeImpl extends MediaElementAudioSourceNode implements js_library.JSObjectInterfacesDom {
-  MediaElementAudioSourceNodeImpl.internal_() : super.internal_();
-  get runtimeType => MediaElementAudioSourceNode;
+class AudioBufferImpl extends AudioBuffer implements js_library.JSObjectInterfacesDom {
+  AudioBufferImpl.internal_() : super.internal_();
+  get runtimeType => AudioBuffer;
   toString() => super.toString();
 }
 patch class AudioBufferSourceNode {
@@ -5946,67 +5811,49 @@
   get runtimeType => AudioContext;
   toString() => super.toString();
 }
-patch class ChannelSplitterNode {
-  static Type get instanceRuntimeType => ChannelSplitterNodeImpl;
+patch class AudioDestinationNode {
+  static Type get instanceRuntimeType => AudioDestinationNodeImpl;
 
 }
-class ChannelSplitterNodeImpl extends ChannelSplitterNode implements js_library.JSObjectInterfacesDom {
-  ChannelSplitterNodeImpl.internal_() : super.internal_();
-  get runtimeType => ChannelSplitterNode;
+class AudioDestinationNodeImpl extends AudioDestinationNode implements js_library.JSObjectInterfacesDom {
+  AudioDestinationNodeImpl.internal_() : super.internal_();
+  get runtimeType => AudioDestinationNode;
   toString() => super.toString();
 }
-patch class DelayNode {
-  static Type get instanceRuntimeType => DelayNodeImpl;
+patch class AudioListener {
+  static Type get instanceRuntimeType => AudioListenerImpl;
 
 }
-class DelayNodeImpl extends DelayNode implements js_library.JSObjectInterfacesDom {
-  DelayNodeImpl.internal_() : super.internal_();
-  get runtimeType => DelayNode;
+class AudioListenerImpl extends AudioListener implements js_library.JSObjectInterfacesDom {
+  AudioListenerImpl.internal_() : super.internal_();
+  get runtimeType => AudioListener;
   toString() => super.toString();
 }
-patch class OfflineAudioCompletionEvent {
-  static Type get instanceRuntimeType => OfflineAudioCompletionEventImpl;
+patch class AudioNode {
+  static Type get instanceRuntimeType => AudioNodeImpl;
 
 }
-class OfflineAudioCompletionEventImpl extends OfflineAudioCompletionEvent implements js_library.JSObjectInterfacesDom {
-  OfflineAudioCompletionEventImpl.internal_() : super.internal_();
-  get runtimeType => OfflineAudioCompletionEvent;
+class AudioNodeImpl extends AudioNode implements js_library.JSObjectInterfacesDom {
+  AudioNodeImpl.internal_() : super.internal_();
+  get runtimeType => AudioNode;
   toString() => super.toString();
 }
-patch class OscillatorNode {
-  static Type get instanceRuntimeType => OscillatorNodeImpl;
+patch class AudioParam {
+  static Type get instanceRuntimeType => AudioParamImpl;
 
 }
-class OscillatorNodeImpl extends OscillatorNode implements js_library.JSObjectInterfacesDom {
-  OscillatorNodeImpl.internal_() : super.internal_();
-  get runtimeType => OscillatorNode;
+class AudioParamImpl extends AudioParam implements js_library.JSObjectInterfacesDom {
+  AudioParamImpl.internal_() : super.internal_();
+  get runtimeType => AudioParam;
   toString() => super.toString();
 }
-patch class BiquadFilterNode {
-  static Type get instanceRuntimeType => BiquadFilterNodeImpl;
+patch class AudioProcessingEvent {
+  static Type get instanceRuntimeType => AudioProcessingEventImpl;
 
 }
-class BiquadFilterNodeImpl extends BiquadFilterNode implements js_library.JSObjectInterfacesDom {
-  BiquadFilterNodeImpl.internal_() : super.internal_();
-  get runtimeType => BiquadFilterNode;
-  toString() => super.toString();
-}
-patch class AudioBuffer {
-  static Type get instanceRuntimeType => AudioBufferImpl;
-
-}
-class AudioBufferImpl extends AudioBuffer implements js_library.JSObjectInterfacesDom {
-  AudioBufferImpl.internal_() : super.internal_();
-  get runtimeType => AudioBuffer;
-  toString() => super.toString();
-}
-patch class ChannelMergerNode {
-  static Type get instanceRuntimeType => ChannelMergerNodeImpl;
-
-}
-class ChannelMergerNodeImpl extends ChannelMergerNode implements js_library.JSObjectInterfacesDom {
-  ChannelMergerNodeImpl.internal_() : super.internal_();
-  get runtimeType => ChannelMergerNode;
+class AudioProcessingEventImpl extends AudioProcessingEvent implements js_library.JSObjectInterfacesDom {
+  AudioProcessingEventImpl.internal_() : super.internal_();
+  get runtimeType => AudioProcessingEvent;
   toString() => super.toString();
 }
 patch class AudioSourceNode {
@@ -6018,13 +5865,166 @@
   get runtimeType => AudioSourceNode;
   toString() => super.toString();
 }
-patch class AudioListener {
-  static Type get instanceRuntimeType => AudioListenerImpl;
+patch class BiquadFilterNode {
+  static Type get instanceRuntimeType => BiquadFilterNodeImpl;
 
 }
-class AudioListenerImpl extends AudioListener implements js_library.JSObjectInterfacesDom {
-  AudioListenerImpl.internal_() : super.internal_();
-  get runtimeType => AudioListener;
+class BiquadFilterNodeImpl extends BiquadFilterNode implements js_library.JSObjectInterfacesDom {
+  BiquadFilterNodeImpl.internal_() : super.internal_();
+  get runtimeType => BiquadFilterNode;
+  toString() => super.toString();
+}
+patch class ChannelMergerNode {
+  static Type get instanceRuntimeType => ChannelMergerNodeImpl;
+
+}
+class ChannelMergerNodeImpl extends ChannelMergerNode implements js_library.JSObjectInterfacesDom {
+  ChannelMergerNodeImpl.internal_() : super.internal_();
+  get runtimeType => ChannelMergerNode;
+  toString() => super.toString();
+}
+patch class ChannelSplitterNode {
+  static Type get instanceRuntimeType => ChannelSplitterNodeImpl;
+
+}
+class ChannelSplitterNodeImpl extends ChannelSplitterNode implements js_library.JSObjectInterfacesDom {
+  ChannelSplitterNodeImpl.internal_() : super.internal_();
+  get runtimeType => ChannelSplitterNode;
+  toString() => super.toString();
+}
+patch class ConvolverNode {
+  static Type get instanceRuntimeType => ConvolverNodeImpl;
+
+}
+class ConvolverNodeImpl extends ConvolverNode implements js_library.JSObjectInterfacesDom {
+  ConvolverNodeImpl.internal_() : super.internal_();
+  get runtimeType => ConvolverNode;
+  toString() => super.toString();
+}
+patch class DelayNode {
+  static Type get instanceRuntimeType => DelayNodeImpl;
+
+}
+class DelayNodeImpl extends DelayNode implements js_library.JSObjectInterfacesDom {
+  DelayNodeImpl.internal_() : super.internal_();
+  get runtimeType => DelayNode;
+  toString() => super.toString();
+}
+patch class DynamicsCompressorNode {
+  static Type get instanceRuntimeType => DynamicsCompressorNodeImpl;
+
+}
+class DynamicsCompressorNodeImpl extends DynamicsCompressorNode implements js_library.JSObjectInterfacesDom {
+  DynamicsCompressorNodeImpl.internal_() : super.internal_();
+  get runtimeType => DynamicsCompressorNode;
+  toString() => super.toString();
+}
+patch class GainNode {
+  static Type get instanceRuntimeType => GainNodeImpl;
+
+}
+class GainNodeImpl extends GainNode implements js_library.JSObjectInterfacesDom {
+  GainNodeImpl.internal_() : super.internal_();
+  get runtimeType => GainNode;
+  toString() => super.toString();
+}
+patch class MediaElementAudioSourceNode {
+  static Type get instanceRuntimeType => MediaElementAudioSourceNodeImpl;
+
+}
+class MediaElementAudioSourceNodeImpl extends MediaElementAudioSourceNode implements js_library.JSObjectInterfacesDom {
+  MediaElementAudioSourceNodeImpl.internal_() : super.internal_();
+  get runtimeType => MediaElementAudioSourceNode;
+  toString() => super.toString();
+}
+patch class MediaStreamAudioDestinationNode {
+  static Type get instanceRuntimeType => MediaStreamAudioDestinationNodeImpl;
+
+}
+class MediaStreamAudioDestinationNodeImpl extends MediaStreamAudioDestinationNode implements js_library.JSObjectInterfacesDom {
+  MediaStreamAudioDestinationNodeImpl.internal_() : super.internal_();
+  get runtimeType => MediaStreamAudioDestinationNode;
+  toString() => super.toString();
+}
+patch class MediaStreamAudioSourceNode {
+  static Type get instanceRuntimeType => MediaStreamAudioSourceNodeImpl;
+
+}
+class MediaStreamAudioSourceNodeImpl extends MediaStreamAudioSourceNode implements js_library.JSObjectInterfacesDom {
+  MediaStreamAudioSourceNodeImpl.internal_() : super.internal_();
+  get runtimeType => MediaStreamAudioSourceNode;
+  toString() => super.toString();
+}
+patch class OfflineAudioCompletionEvent {
+  static Type get instanceRuntimeType => OfflineAudioCompletionEventImpl;
+
+}
+class OfflineAudioCompletionEventImpl extends OfflineAudioCompletionEvent implements js_library.JSObjectInterfacesDom {
+  OfflineAudioCompletionEventImpl.internal_() : super.internal_();
+  get runtimeType => OfflineAudioCompletionEvent;
+  toString() => super.toString();
+}
+patch class OfflineAudioContext {
+  static Type get instanceRuntimeType => OfflineAudioContextImpl;
+
+}
+class OfflineAudioContextImpl extends OfflineAudioContext implements js_library.JSObjectInterfacesDom {
+  OfflineAudioContextImpl.internal_() : super.internal_();
+  get runtimeType => OfflineAudioContext;
+  toString() => super.toString();
+}
+patch class OscillatorNode {
+  static Type get instanceRuntimeType => OscillatorNodeImpl;
+
+}
+class OscillatorNodeImpl extends OscillatorNode implements js_library.JSObjectInterfacesDom {
+  OscillatorNodeImpl.internal_() : super.internal_();
+  get runtimeType => OscillatorNode;
+  toString() => super.toString();
+}
+patch class PannerNode {
+  static Type get instanceRuntimeType => PannerNodeImpl;
+
+}
+class PannerNodeImpl extends PannerNode implements js_library.JSObjectInterfacesDom {
+  PannerNodeImpl.internal_() : super.internal_();
+  get runtimeType => PannerNode;
+  toString() => super.toString();
+}
+patch class PeriodicWave {
+  static Type get instanceRuntimeType => PeriodicWaveImpl;
+
+}
+class PeriodicWaveImpl extends PeriodicWave implements js_library.JSObjectInterfacesDom {
+  PeriodicWaveImpl.internal_() : super.internal_();
+  get runtimeType => PeriodicWave;
+  toString() => super.toString();
+}
+patch class ScriptProcessorNode {
+  static Type get instanceRuntimeType => ScriptProcessorNodeImpl;
+
+}
+class ScriptProcessorNodeImpl extends ScriptProcessorNode implements js_library.JSObjectInterfacesDom {
+  ScriptProcessorNodeImpl.internal_() : super.internal_();
+  get runtimeType => ScriptProcessorNode;
+  toString() => super.toString();
+}
+patch class StereoPannerNode {
+  static Type get instanceRuntimeType => StereoPannerNodeImpl;
+
+}
+class StereoPannerNodeImpl extends StereoPannerNode implements js_library.JSObjectInterfacesDom {
+  StereoPannerNodeImpl.internal_() : super.internal_();
+  get runtimeType => StereoPannerNode;
+  toString() => super.toString();
+}
+patch class WaveShaperNode {
+  static Type get instanceRuntimeType => WaveShaperNodeImpl;
+
+}
+class WaveShaperNodeImpl extends WaveShaperNode implements js_library.JSObjectInterfacesDom {
+  WaveShaperNodeImpl.internal_() : super.internal_();
+  get runtimeType => WaveShaperNode;
   toString() => super.toString();
 }
 
diff --git a/sdk/lib/js/dartium/js_dartium.dart b/sdk/lib/js/dartium/js_dartium.dart
index 610ec22..0d96425 100644
--- a/sdk/lib/js/dartium/js_dartium.dart
+++ b/sdk/lib/js/dartium/js_dartium.dart
@@ -506,9 +506,11 @@
     mirrors.currentMirrorSystem().libraries.forEach((uri, library) {
       var library_name = "${uri.scheme}:${uri.path}";
       if (cached_patches.containsKey(library_name)) {
+        // Use the pre-generated patch files for DOM dart:nnnn libraries.
         var patch = cached_patches[library_name];
         staticCodegen.addAll(patch);
-      } else {
+      } else if (_hasJsName(library)) {
+        // Library marked with @JS
         _generateLibraryCodegen(uri, library, staticCodegen);
       }
     });    // End of library foreach
@@ -532,7 +534,13 @@
 
     var sb = new StringBuffer();
     String jsLibraryName = _getJsName(library);
-    library.declarations.forEach((name, declaration) {
+
+    // Sort by patch file by its declaration name.
+    var sortedDeclKeys = library.declarations.keys.toList();
+    sortedDeclKeys.sort((a, b) => mirrors.MirrorSystem.getName(a).compareTo(mirrors.MirrorSystem.getName(b)));
+
+    sortedDeclKeys.forEach((name) {
+      var declaration = library.declarations[name];
       if (declaration is mirrors.MethodMirror) {
         if ((_hasJsName(declaration) || jsLibraryName != null) &&
             _isExternal(declaration)) {
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index 3fe27f7..8144d86 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -999,6 +999,7 @@
 LibTest/html/IFrameElement/blur_A01_t01: Skip # co19-roll r706.  Please triage this failure.
 LibTest/html/IFrameElement/borderEdge_A01_t01: RuntimeError # co19-roll r706.  Issue 16574
 LibTest/html/IFrameElement/clone_A01_t02: RuntimeError # co19-roll r706.  Please triage this failure.
+LibTest/html/IFrameElement/contentWindow_A01_t01: RuntimeError # Also fails in dart2js as this test should not pass given current Dart semantics for cross frame windows.
 LibTest/html/IFrameElement/createFragment_A01_t01: RuntimeError # co19-roll r706.  Please triage this failure.
 LibTest/html/IFrameElement/createFragment_A01_t02: RuntimeError # co19-roll r706.  Please triage this failure.
 LibTest/html/IFrameElement/createFragment_A01_t03: RuntimeError # co19-roll r706.  Please triage this failure.
@@ -1025,9 +1026,11 @@
 LibTest/html/Window/find_A01_t01: RuntimeError # co19-roll r706.  Please triage this failure.
 LibTest/html/Window/find_A03_t01: RuntimeError # co19-roll r706.  Please triage this failure.
 LibTest/html/Window/find_A06_t01: RuntimeError # co19-roll r706.  Please triage this failure.
+LibTest/html/Window/moveBy_A01_t01: RuntimeError # Also fails in dart2js as this test should not pass given current Dart semantics for cross frame windows.
 LibTest/html/Window/moveTo_A01_t01: RuntimeError, Pass # co19-roll r706.  Please triage this failure.
 LibTest/html/Window/moveTo_A02_t01: RuntimeError # co19-roll r706.  Please triage this failure.
 LibTest/html/Window/postMessage_A01_t01: RuntimeError # co19-roll r706.  Please triage this failure.
+LibTest/html/Window/postMessage_A01_t02: RuntimeError # Also fails in dart2js.
 LibTest/html/Window/requestFileSystem_A01_t02: RuntimeError,Pass # co19-roll r722: Please triage this failure.
 LibTest/html/Window/requestFileSystem_A02_t01: Skip # Issue 24585.
 LibTest/html/Window/resizeBy_A01_t01: RuntimeError # co19-roll r706.  Please triage this failure.
diff --git a/tests/compiler/dart2js/analyze_helper.dart b/tests/compiler/dart2js/analyze_helper.dart
index 61b52be..fb06d78 100644
--- a/tests/compiler/dart2js/analyze_helper.dart
+++ b/tests/compiler/dart2js/analyze_helper.dart
@@ -17,6 +17,7 @@
     CompilerOptions;
 import 'package:compiler/src/source_file_provider.dart';
 import 'package:compiler/src/util/uri_extras.dart';
+import 'diagnostic_helper.dart';
 
 /// Option for hiding whitelisted messages.
 const String HIDE_WHITELISTED = '--hide-whitelisted';
@@ -43,6 +44,7 @@
   Map<String, Map<dynamic/*String|MessageKind*/, int>> whiteListMap
       = new Map<String, Map<dynamic/*String|MessageKind*/, int>>();
   List<MessageKind> skipList;
+  List<CollectedMessage> collectedMessages = <CollectedMessage>[];
 
   CollectingDiagnosticHandler(
       Map<String, List/*<String|MessageKind>*/> whiteList,
@@ -61,6 +63,7 @@
   bool checkResults() {
     bool validWhiteListUse = checkWhiteListUse();
     reportWhiteListUse();
+    reportCollectedMessages();
     return !hasWarnings && !hasHint && !hasErrors && validWhiteListUse;
   }
 
@@ -78,6 +81,19 @@
     return allUsed;
   }
 
+  void reportCollectedMessages() {
+    if (collectedMessages.isNotEmpty) {
+      print('----------------------------------------------------------------');
+      print('Unexpected messages:');
+      print('----------------------------------------------------------------');
+      for (CollectedMessage message in collectedMessages) {
+        super.report(message.message, message.uri, message.begin,
+            message.end, message.text, message.kind);
+      }
+      print('----------------------------------------------------------------');
+    }
+  }
+
   void reportWhiteListUse() {
     for (String file in whiteListMap.keys) {
       for (var messagePart in whiteListMap[file].keys) {
@@ -156,6 +172,10 @@
       return;
     }
     lastWasWhitelisted = false;
+    if (kind != api.Diagnostic.VERBOSE_INFO) {
+      collectedMessages.add(new CollectedMessage(
+          message, uri, begin, end, text, kind));
+    }
     super.report(message, uri, begin, end, text, kind);
   }
 }
diff --git a/tests/compiler/dart2js/analyze_test_test.dart b/tests/compiler/dart2js/analyze_test_test.dart
index 4a2321b..5da181c 100644
--- a/tests/compiler/dart2js/analyze_test_test.dart
+++ b/tests/compiler/dart2js/analyze_test_test.dart
@@ -58,8 +58,12 @@
 
 main(List<String> arguments) {
   List<String> options = <String>[];
-  if (arguments.contains('-v') || arguments.contains(Flags.verbose)) {
-    options.add(Flags.verbose);
+  for (String argument in arguments) {
+    if (argument == '-v') {
+      options.add(Flags.verbose);
+    } else if (argument.startsWith('-')) {
+      options.add(argument);
+    }
   }
   List<Uri> uriList = <Uri>[];
   for (String arg in arguments) {
diff --git a/tests/compiler/dart2js/backend_dart/dart_printer_test.dart b/tests/compiler/dart2js/backend_dart/dart_printer_test.dart
index e3c52bc..4d331b3 100644
--- a/tests/compiler/dart2js/backend_dart/dart_printer_test.dart
+++ b/tests/compiler/dart2js/backend_dart/dart_printer_test.dart
@@ -233,6 +233,7 @@
   }
   endSend(t) {
     List<Argument> arguments = pop();
+    pop(); // typeArguments
     if (arguments == null)
       return; // not a function call
     Expression selector = pop();
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 69b7f3d..6c26bdb 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -68,6 +68,7 @@
 interop_anonymous_unreachable_test: Pass, Slow
 mirror_final_field_inferrer2_test: Pass, Slow
 source_map_pub_build_validity_test: Pass, Slow
+serialization*: Slow, Pass
 uri_retention_test: Pass, Slow
 value_range_test: Pass, Slow
 
diff --git a/tests/compiler/dart2js/exit_code_test.dart b/tests/compiler/dart2js/exit_code_test.dart
index 2bbde2b..715d4d6 100644
--- a/tests/compiler/dart2js/exit_code_test.dart
+++ b/tests/compiler/dart2js/exit_code_test.dart
@@ -151,7 +151,8 @@
 }
 
 class TestScanner extends ScannerTask {
-  TestScanner(TestCompiler compiler) : super(compiler);
+  TestScanner(TestCompiler compiler)
+      : super(compiler, compiler.dietParser);
 
   TestCompiler get compiler => super.compiler;
 
diff --git a/tests/compiler/dart2js/options_helper.dart b/tests/compiler/dart2js/options_helper.dart
index b071832..ecf9d3d5 100644
--- a/tests/compiler/dart2js/options_helper.dart
+++ b/tests/compiler/dart2js/options_helper.dart
@@ -21,4 +21,5 @@
 
 class MockParserOptions implements ParserOptions {
   bool get enableConditionalDirectives => true;
+  bool get enableGenericMethodSyntax => true;
 }
diff --git a/tests/compiler/dart2js/parser_helper.dart b/tests/compiler/dart2js/parser_helper.dart
index d6e1953..028fa06 100644
--- a/tests/compiler/dart2js/parser_helper.dart
+++ b/tests/compiler/dart2js/parser_helper.dart
@@ -7,6 +7,7 @@
 import "package:expect/expect.dart";
 
 import "package:compiler/src/elements/elements.dart";
+import 'package:compiler/src/id_generator.dart';
 import "package:compiler/src/tree/tree.dart";
 import "package:compiler/src/parser/element_listener.dart";
 import "package:compiler/src/parser/node_listener.dart";
@@ -150,11 +151,10 @@
   }
   var script = new Script(uri, uri, new MockFile(text));
   var unit = new CompilationUnitElementX(script, library);
-  int id = 0;
   DiagnosticReporter reporter = compiler.reporter;
   ElementListener listener = new ElementListener(
       compiler.parsing.getScannerOptionsFor(library),
-      reporter, unit, () => id++);
+      reporter, unit, new IdGenerator());
   PartialParser parser = new PartialParser(listener, new MockParserOptions());
   reporter.withCurrentElement(unit, () => parser.parseUnit(tokens));
   return unit.localMembers;
diff --git a/tests/compiler/dart2js/serialization_analysis_test.dart b/tests/compiler/dart2js/serialization_analysis_test.dart
index 373fb89..39c46de 100644
--- a/tests/compiler/dart2js/serialization_analysis_test.dart
+++ b/tests/compiler/dart2js/serialization_analysis_test.dart
@@ -14,192 +14,7 @@
 import 'package:compiler/src/filenames.dart';
 import 'memory_compiler.dart';
 import 'serialization_helper.dart';
-
-const List<Test> TESTS = const <Test>[
-  const Test(const {
-    'main.dart': 'main() {}'
-  }),
-
-  const Test(const {
-    'main.dart': 'main() => print("Hello World");'
-  }),
-
-  const Test(const {
-    'main.dart': 'main() => print("Hello World", 0);'
-  },
-  expectedWarningCount: 1,
-  expectedInfoCount: 1),
-
-  const Test(const {
-    'main.dart': r'''
-main() {
-  String text = "Hello World";
-  print('$text');
-}'''
-  }),
-
-  const Test(const {
-    'main.dart': r'''
-main() {
-  String text = "Hello World";
-  print('$text', text);
-}'''
-  },
-  expectedWarningCount: 1,
-  expectedInfoCount: 1),
-
-  const Test(const {
-    'main.dart': r'''
-main(List<String> arguments) {
-  print(arguments);
-}'''
-  }),
-
-  const Test(const {
-      'main.dart': r'''
-main(List<String> arguments) {
-  for (int i = 0; i < arguments.length; i++) {
-    print(arguments[i]);
-  }
-}'''
-    }),
-
-  const Test(const {
-    'main.dart': r'''
-main(List<String> arguments) {
-  for (String argument in arguments) {
-    print(argument);
-  }
-}'''
-  }),
-
-  const Test(const {
-    'main.dart': r'''
-class Class {}
-main() {
-  print(new Class());
-}'''
-  }),
-
-  const Test(const {
-    'main.dart': r'''
-class Class implements Function {}
-main() {
-  print(new Class());
-}'''
-  },
-  expectedWarningCount: 1),
-
-  const Test(const {
-    'main.dart': r'''
-class Class implements Function {
-  call() {}
-}
-main() {
-  print(new Class()());
-}'''
-  }),
-
-  const Test(const {
-    'main.dart': r'''
-class Class implements Comparable<Class> {
-  int compareTo(Class other) => 0;
-}
-main() {
-  print(new Class());
-}'''
-  }),
-
-  const Test(const {
-    'main.dart': r'''
-class Class implements Comparable<Class, Class> {
-  int compareTo(other) => 0;
-}
-main() {
-  print(new Class());
-}'''
-  },
-  expectedWarningCount: 1),
-
-  const Test(const {
-    'main.dart': r'''
-class Class implements Comparable<Class> {
-  int compareTo(String other) => 0;
-}
-main() {
-  print(new Class().compareTo(null));
-}'''
-  },
-  expectedWarningCount: 1,
-  expectedInfoCount: 1),
-
-  const Test(const {
-    'main.dart': r'''
-class Class implements Comparable {
-  bool compareTo(a, b) => true;
-}
-main() {
-  print(new Class().compareTo(null, null));
-}'''
-  },
-  expectedWarningCount: 1,
-  expectedInfoCount: 1),
-
-  const Test(const {
-    'main.dart': r'''
-import 'dart:math';
-
-class MyRandom implements Random {
-  int nextInt(int max) {
-    return max.length;
-  }
-  bool nextBool() => true;
-  double nextDouble() => 0.0;
-}
-main() {
-  new MyRandom().nextInt(0);
-}'''
-  },
-  expectedWarningCount: 1,
-  expectedInfoCount: 0),
-
-  const Test(const {
-    'main.dart': r'''
-import 'dart:math';
-
-class MyRandom implements Random {
-  int nextInt(int max) {
-    return max.length;
-  }
-  bool nextBool() => true;
-  double nextDouble() => 0.0;
-}
-main() {
-  new MyRandom();
-}'''
-  }),
-
-  const Test(const {
-    'main.dart': r'''
-import 'dart:math';
-
-class MyRandom implements Random {
-  int nextInt(int max) {
-    return max.length;
-  }
-  bool nextBool() => true;
-  double nextDouble() => 0.0;
-}
-main() {
-  // Invocation of `MyRandom.nextInt` is only detected knowing the actual 
-  // implementation class for `List` and the world impact of its `shuffle` 
-  // method.  
-  [].shuffle(new MyRandom());
-}'''
-  },
-  expectedWarningCount: 1,
-  expectedInfoCount: 0),
-];
+import 'serialization_test_data.dart';
 
 main(List<String> arguments) {
   asyncTest(() async {
@@ -217,20 +32,6 @@
   });
 }
 
-class Test {
-  final Map sourceFiles;
-  final int expectedErrorCount;
-  final int expectedWarningCount;
-  final int expectedHintCount;
-  final int expectedInfoCount;
-
-  const Test(this.sourceFiles, {
-    this.expectedErrorCount: 0,
-    this.expectedWarningCount: 0,
-    this.expectedHintCount: 0,
-    this.expectedInfoCount: 0});
-}
-
 Future analyze(String serializedData, Uri entryPoint, Test test) async {
   DiagnosticCollector diagnosticCollector = new DiagnosticCollector();
   await runCompiler(
diff --git a/tests/compiler/dart2js/serialization_helper.dart b/tests/compiler/dart2js/serialization_helper.dart
index a8f95a6..c863265 100644
--- a/tests/compiler/dart2js/serialization_helper.dart
+++ b/tests/compiler/dart2js/serialization_helper.dart
@@ -7,6 +7,7 @@
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
+import 'package:compiler/compiler_new.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common/backend_api.dart';
 import 'package:compiler/src/common/names.dart';
@@ -14,30 +15,46 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/elements.dart';
 import 'package:compiler/src/filenames.dart';
+import 'package:compiler/src/io/source_file.dart';
+import 'package:compiler/src/scanner/scanner.dart';
 import 'package:compiler/src/serialization/element_serialization.dart';
 import 'package:compiler/src/serialization/impact_serialization.dart';
 import 'package:compiler/src/serialization/json_serializer.dart';
+import 'package:compiler/src/serialization/resolved_ast_serialization.dart';
 import 'package:compiler/src/serialization/serialization.dart';
+import 'package:compiler/src/serialization/modelz.dart';
 import 'package:compiler/src/serialization/task.dart';
+import 'package:compiler/src/tokens/token.dart';
+import 'package:compiler/src/script.dart';
 import 'package:compiler/src/universe/world_impact.dart';
 import 'memory_compiler.dart';
 
 
-Future<String> serializeDartCore() async {
+Future<String> serializeDartCore({bool serializeResolvedAst: false}) async {
   Compiler compiler = compilerFor(
       options: [Flags.analyzeAll]);
   compiler.serialization.supportSerialization = true;
   await compiler.run(Uris.dart_core);
-  return serialize(compiler, compiler.libraryLoader.libraries)
-      .toText(const JsonSerializationEncoder());
+  return serialize(
+      compiler,
+      compiler.libraryLoader.libraries,
+      serializeResolvedAst: serializeResolvedAst)
+        .toText(const JsonSerializationEncoder());
 }
 
-Serializer serialize(Compiler compiler, Iterable<LibraryElement> libraries) {
+Serializer serialize(
+    Compiler compiler,
+    Iterable<LibraryElement> libraries,
+    {bool serializeResolvedAst: false}) {
   assert(compiler.serialization.supportSerialization);
 
   Serializer serializer = new Serializer();
   serializer.plugins.add(compiler.backend.serialization.serializer);
   serializer.plugins.add(new ResolutionImpactSerializer(compiler.resolution));
+  if (serializeResolvedAst) {
+    serializer.plugins.add(
+        new ResolvedAstSerializerPlugin(compiler.resolution));
+  }
 
   for (LibraryElement library in libraries) {
     serializer.serialize(library);
@@ -45,7 +62,9 @@
   return serializer;
 }
 
-void deserialize(Compiler compiler, String serializedData) {
+void deserialize(Compiler compiler,
+                 String serializedData,
+                 {bool deserializeResolvedAst: false}) {
   Deserializer deserializer = new Deserializer.fromText(
       new DeserializationContext(),
       serializedData,
@@ -53,8 +72,10 @@
   deserializer.plugins.add(compiler.backend.serialization.deserializer);
   compiler.serialization.deserializer =
       new _DeserializerSystem(
+          compiler,
           deserializer,
-          compiler.backend.impactTransformer);
+          compiler.backend.impactTransformer,
+          deserializeResolvedAst: deserializeResolvedAst);
 }
 
 
@@ -88,24 +109,59 @@
 }
 
 class _DeserializerSystem extends DeserializerSystem {
+  final Compiler _compiler;
   final Deserializer _deserializer;
   final List<LibraryElement> deserializedLibraries = <LibraryElement>[];
   final ResolutionImpactDeserializer _resolutionImpactDeserializer =
       new ResolutionImpactDeserializer();
+  final ResolvedAstDeserializerPlugin _resolvedAstDeserializer;
   final ImpactTransformer _impactTransformer;
+  final bool _deserializeResolvedAst;
 
-  _DeserializerSystem(this._deserializer, this._impactTransformer) {
+  _DeserializerSystem(
+      Compiler compiler,
+      this._deserializer,
+      this._impactTransformer,
+      {bool deserializeResolvedAst: false})
+      : this._compiler = compiler,
+        this._deserializeResolvedAst = deserializeResolvedAst,
+        this._resolvedAstDeserializer = deserializeResolvedAst
+           ? new ResolvedAstDeserializerPlugin(compiler.parsing) : null {
     _deserializer.plugins.add(_resolutionImpactDeserializer);
+    if (_deserializeResolvedAst) {
+      _deserializer.plugins.add(_resolvedAstDeserializer);
+    }
   }
 
-  LibraryElement readLibrary(Uri resolvedUri) {
+  @override
+  Future<LibraryElement> readLibrary(Uri resolvedUri) {
     LibraryElement library = _deserializer.lookupLibrary(resolvedUri);
     if (library != null) {
       deserializedLibraries.add(library);
+      if (_deserializeResolvedAst) {
+        return Future.forEach(library.compilationUnits,
+            (CompilationUnitElement compilationUnit) {
+          Script script = compilationUnit.script;
+          return _compiler.readScript(script.readableUri)
+              .then((Script newScript) {
+            _resolvedAstDeserializer.sourceFiles[script.resourceUri] =
+                newScript.file;
+          });
+        }).then((_) => library);
+      }
     }
-    return library;
+    return new Future<LibraryElement>.value(library);
   }
 
+  @override
+  ResolvedAst getResolvedAst(Element element) {
+    if (_resolvedAstDeserializer != null) {
+      return _resolvedAstDeserializer.getResolvedAst(element);
+    }
+    return null;
+  }
+
+  @override
   ResolutionImpact getResolutionImpact(Element element) {
     return _resolutionImpactDeserializer.impactMap[element];
   }
@@ -126,3 +182,66 @@
     return deserializedLibraries.contains(element.library);
   }
 }
+
+const String RESOLVED_AST_TAG = 'resolvedAst';
+
+class ResolvedAstSerializerPlugin extends SerializerPlugin {
+  final Resolution resolution;
+
+  ResolvedAstSerializerPlugin(this.resolution);
+
+  @override
+  void onElement(Element element, ObjectEncoder createEncoder(String tag)) {
+    if (element is MemberElement && resolution.hasResolvedAst(element)) {
+      ResolvedAst resolvedAst = resolution.getResolvedAst(element);
+      ObjectEncoder objectEncoder = createEncoder(RESOLVED_AST_TAG);
+      new ResolvedAstSerializer(objectEncoder, resolvedAst).serialize();
+    }
+  }
+}
+
+class ResolvedAstDeserializerPlugin extends DeserializerPlugin {
+  final Parsing parsing;
+  final Map<Uri, SourceFile> sourceFiles = <Uri, SourceFile>{};
+
+  Map<Element, ResolvedAst> _resolvedAstMap = <Element, ResolvedAst>{};
+  Map<Element, ObjectDecoder> _decoderMap = <Element, ObjectDecoder>{};
+  Map<Uri, Token> beginTokenMap = <Uri, Token>{};
+
+  ResolvedAstDeserializerPlugin(this.parsing);
+
+  ResolvedAst getResolvedAst(Element element) {
+    ResolvedAst resolvedAst = _resolvedAstMap[element];
+    if (resolvedAst == null) {
+      ObjectDecoder decoder = _decoderMap[element];
+      if (decoder != null) {
+        resolvedAst = _resolvedAstMap[element] =
+            ResolvedAstDeserializer.deserialize(
+                element, decoder, parsing, findToken);
+        _decoderMap.remove(element);
+      }
+    }
+    return resolvedAst;
+  }
+
+  Token findToken(Uri uri, int offset) {
+    Token beginToken = beginTokenMap.putIfAbsent(uri, () {
+      SourceFile sourceFile = sourceFiles[uri];
+      if (sourceFile == null) {
+        throw 'No source file found for $uri in:\n '
+              '${sourceFiles.keys.join('\n ')}';
+      }
+      return new Scanner(sourceFile).tokenize();
+    });
+    return ResolvedAstDeserializer.findTokenInStream(beginToken, offset);
+  }
+
+  @override
+  void onElement(Element element, ObjectDecoder getDecoder(String tag)) {
+    ObjectDecoder decoder = getDecoder(RESOLVED_AST_TAG);
+    if (decoder != null) {
+      _decoderMap[element] = decoder;
+    }
+  }
+}
+
diff --git a/tests/compiler/dart2js/serialization_impact_test.dart b/tests/compiler/dart2js/serialization_impact_test.dart
index 2fbd212..05d91d6 100644
--- a/tests/compiler/dart2js/serialization_impact_test.dart
+++ b/tests/compiler/dart2js/serialization_impact_test.dart
@@ -14,7 +14,7 @@
 import 'package:compiler/src/serialization/equivalence.dart';
 import 'memory_compiler.dart';
 import 'serialization_helper.dart';
-import 'serialization_test.dart';
+import 'serialization_test_helper.dart';
 
 main(List<String> arguments) {
   asyncTest(() async {
@@ -47,65 +47,5 @@
   deserialize(compilerDeserialized, serializedData);
   await compilerDeserialized.run(entryPoint);
 
-  checkResolutionImpacts(compilerNormal, compilerDeserialized, verbose: true);
+  checkAllImpacts(compilerNormal, compilerDeserialized, verbose: true);
 }
-
-/// Check equivalence of [impact1] and [impact2].
-void checkImpacts(Element element1, Element element2,
-                  ResolutionImpact impact1, ResolutionImpact impact2,
-                  {bool verbose: false}) {
-  if (impact1 == null || impact2 == null) return;
-
-  if (verbose) {
-    print('Checking impacts for $element1 vs $element2');
-  }
-
-  testResolutionImpactEquivalence(impact1, impact2, const CheckStrategy());
-}
-
-
-/// Check equivalence between all resolution impacts common to [compiler1] and
-/// [compiler2].
-void checkResolutionImpacts(
-    Compiler compiler1,
-    Compiler compiler2,
-    {bool verbose: false}) {
-
-  void checkMembers(Element member1, Element member2) {
-    if (member1.isClass && member2.isClass) {
-      ClassElement class1 = member1;
-      ClassElement class2 = member2;
-      class1.forEachLocalMember((m1) {
-        checkMembers(m1, class2.lookupLocalMember(m1.name));
-      });
-      return;
-    }
-
-    if (!compiler1.resolution.hasResolutionImpact(member1)) {
-      return;
-    }
-
-    if (member2 == null) {
-      return;
-    }
-
-    if (areElementsEquivalent(member1, member2)) {
-      checkImpacts(
-          member1, member2,
-          compiler1.resolution.getResolutionImpact(member1),
-          compiler2.serialization.deserializer.getResolutionImpact(member2),
-          verbose: verbose);
-    }
-  }
-
-  for (LibraryElement library1 in compiler1.libraryLoader.libraries) {
-    LibraryElement library2 =
-        compiler2.libraryLoader.lookupLibrary(library1.canonicalUri);
-    if (library2 != null) {
-      library1.forEachLocalMember((Element member1) {
-        checkMembers(member1, library2.localLookup(member1.name));
-      });
-
-    }
-  }
-}
\ No newline at end of file
diff --git a/tests/compiler/dart2js/serialization_model_test.dart b/tests/compiler/dart2js/serialization_model_test.dart
index b8cef25..0e5363f 100644
--- a/tests/compiler/dart2js/serialization_model_test.dart
+++ b/tests/compiler/dart2js/serialization_model_test.dart
@@ -27,9 +27,8 @@
 import 'package:compiler/src/universe/use.dart';
 import 'memory_compiler.dart';
 import 'serialization_helper.dart';
-import 'serialization_analysis_test.dart';
-import 'serialization_impact_test.dart';
-import 'serialization_test.dart';
+import 'serialization_test_data.dart';
+import 'serialization_test_helper.dart';
 
 main(List<String> arguments) {
   String filename;
@@ -109,7 +108,7 @@
   await compilerDeserialized.run(entryPoint);
   compilerDeserialized.world.populate();
 
-  checkResolutionImpacts(
+  checkAllImpacts(
       compilerNormal, compilerDeserialized,
       verbose: verbose);
 
diff --git a/tests/compiler/dart2js/serialization_resolved_ast_test.dart b/tests/compiler/dart2js/serialization_resolved_ast_test.dart
new file mode 100644
index 0000000..af5d8a3
--- /dev/null
+++ b/tests/compiler/dart2js/serialization_resolved_ast_test.dart
@@ -0,0 +1,92 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js.serialization_resolved_ast_test;
+
+import 'dart:async';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/common/backend_api.dart';
+import 'package:compiler/src/common/names.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/elements/elements.dart';
+import 'package:compiler/src/filenames.dart';
+import 'package:compiler/src/serialization/equivalence.dart';
+import 'memory_compiler.dart';
+import 'serialization_helper.dart';
+import 'serialization_test_data.dart';
+import 'serialization_test_helper.dart';
+
+
+main(List<String> arguments) {
+  asyncTest(() async {
+    String serializedData = await serializeDartCore(serializeResolvedAst: true);
+    if (arguments.isNotEmpty) {
+      Uri entryPoint = Uri.base.resolve(nativeToUriPath(arguments.last));
+      await check(serializedData, entryPoint);
+    } else {
+      Uri entryPoint = Uri.parse('memory:main.dart');
+      // TODO(johnniwinther): Change to test all serialized resolved ast instead
+      // only those used in the test.
+      Test test = TESTS.last;
+      await check(serializedData, entryPoint, test.sourceFiles);
+    }
+  });
+}
+
+Future check(
+  String serializedData,
+  Uri entryPoint,
+  [Map<String, String> sourceFiles = const <String, String>{}]) async {
+
+  Compiler compilerNormal = compilerFor(
+      memorySourceFiles: sourceFiles,
+      options: [Flags.analyzeOnly]);
+  compilerNormal.resolution.retainCachesForTesting = true;
+  await compilerNormal.run(entryPoint);
+
+  Compiler compilerDeserialized = compilerFor(
+      memorySourceFiles: sourceFiles,
+      options: [Flags.analyzeOnly]);
+  compilerDeserialized.resolution.retainCachesForTesting = true;
+  deserialize(
+      compilerDeserialized, serializedData, deserializeResolvedAst: true);
+  await compilerDeserialized.run(entryPoint);
+
+  checkAllResolvedAsts(compilerNormal, compilerDeserialized, verbose: true);
+}
+
+void checkAllResolvedAsts(
+    Compiler compiler1,
+    Compiler compiler2,
+    {bool verbose: false}) {
+  checkLoadedLibraryMembers(
+      compiler1,
+      compiler2,
+      (Element member1) {
+        return compiler1.resolution.hasResolvedAst(member1);
+      },
+      checkResolvedAsts,
+      verbose: true);
+}
+
+
+/// Check equivalence of [impact1] and [impact2].
+void checkResolvedAsts(Compiler compiler1, Element member1,
+                       Compiler compiler2, Element member2,
+                       {bool verbose: false}) {
+  ResolvedAst resolvedAst1 = compiler1.resolution.getResolvedAst(member1);
+  ResolvedAst resolvedAst2 =
+      compiler2.serialization.deserializer.getResolvedAst(member2);
+
+  if (resolvedAst1 == null || resolvedAst2 == null) return;
+
+  if (verbose) {
+    print('Checking resolved asts for $member1 vs $member2');
+  }
+
+  testResolvedAstEquivalence(
+      resolvedAst1, resolvedAst2, const CheckStrategy());
+}
diff --git a/tests/compiler/dart2js/serialization_test.dart b/tests/compiler/dart2js/serialization_test.dart
index c19fb61..fd6ae58 100644
--- a/tests/compiler/dart2js/serialization_test.dart
+++ b/tests/compiler/dart2js/serialization_test.dart
@@ -20,6 +20,7 @@
 import 'package:compiler/src/serialization/equivalence.dart';
 import 'package:compiler/src/serialization/json_serializer.dart';
 import 'package:compiler/src/serialization/serialization.dart';
+import 'serialization_test_helper.dart';
 
 main(List<String> arguments) {
   // Ensure that we can print out constant expressions.
@@ -132,262 +133,6 @@
   const ElementPropertyEquivalence().visit(element1, element2);
 }
 
-/// Check the equivalence of the two lists of elements, [list1] and [list2].
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-checkElementLists(Object object1, Object object2, String property,
-                  Iterable<Element> list1, Iterable<Element> list2) {
-  checkListEquivalence(object1, object2, property,
-                  list1, list2, checkElementProperties);
-}
-
-/// Check equivalence of the two lists, [list1] and [list2], using
-/// [checkEquivalence] to check the pair-wise equivalence.
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-bool checkListEquivalence(
-    Object object1, Object object2, String property,
-    Iterable list1, Iterable list2,
-    void checkEquivalence(o1, o2, property, a, b)) {
-  for (int i = 0; i < list1.length && i < list2.length; i++) {
-    checkEquivalence(
-        object1, object2, property,
-        list1.elementAt(i), list2.elementAt(i));
-  }
-  for (int i = list1.length; i < list2.length; i++) {
-    throw
-        'Missing equivalent for element '
-        '#$i ${list2.elementAt(i)} in `${property}` on $object2.\n'
-        '`${property}` on $object1:\n ${list1.join('\n ')}\n'
-        '`${property}` on $object2:\n ${list2.join('\n ')}';
-  }
-  for (int i = list2.length; i < list1.length; i++) {
-    throw
-        'Missing equivalent for element '
-        '#$i ${list1.elementAt(i)} in `${property}` on $object1.\n'
-        '`${property}` on $object1:\n ${list1.join('\n ')}\n'
-        '`${property}` on $object2:\n ${list2.join('\n ')}';
-  }
-  return true;
-}
-
-/// Computes the set difference between [set1] and [set2] using
-/// [elementEquivalence] to determine element equivalence.
-///
-/// Elements both in [set1] and [set2] are added to [common], elements in [set1]
-/// but not in [set2] are added to [unfound], and the set of elements in [set2]
-/// but not in [set1] are returned.
-Set computeSetDifference(
-    Iterable set1,
-    Iterable set2,
-    List common,
-    List unfound,
-    [bool sameElement(a, b) = equality]) {
-  // TODO(johnniwinther): Avoid the quadratic cost here. Some ideas:
-  // - convert each set to a list and sort it first, then compare by walking
-  // both lists in parallel
-  // - map each element to a canonical object, create a map containing those
-  // mappings, use the mapped sets to compare (then operations like
-  // set.difference would work)
-  Set remaining = set2.toSet();
-  for (var element1 in set1) {
-    bool found = false;
-    for (var element2 in remaining) {
-      if (sameElement(element1, element2)) {
-        found = true;
-        remaining.remove(element2);
-        break;
-      }
-    }
-    if (found) {
-      common.add(element1);
-    } else {
-      unfound.add(element1);
-    }
-  }
-  return remaining;
-}
-
-/// Check equivalence of the two iterables, [set1] and [set1], as sets using
-/// [elementEquivalence] to compute the pair-wise equivalence.
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-bool checkSetEquivalence(
-    var object1,
-    var object2,
-    String property,
-    Iterable set1,
-    Iterable set2,
-    bool sameElement(a, b)) {
-  List common = [];
-  List unfound = [];
-  Set remaining =
-      computeSetDifference(set1, set2, common, unfound, sameElement);
-  if (unfound.isNotEmpty || remaining.isNotEmpty) {
-    String message =
-        "Set mismatch for `$property` on $object1 vs $object2: \n"
-        "Common:\n ${common.join('\n ')}\n"
-        "Unfound:\n ${unfound.join('\n ')}\n"
-        "Extra: \n ${remaining.join('\n ')}";
-    throw message;
-  }
-  return true;
-}
-
-/// Checks the equivalence of the identity (but not properties) of [element1]
-/// and [element2].
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-bool checkElementIdentities(
-    Object object1, Object object2, String property,
-    Element element1, Element element2) {
-  if (identical(element1, element2)) return true;
-  if (element1 == null || element2 == null) {
-    return check(object1, object2, property, element1, element2);
-  } else {
-    return const ElementIdentityEquivalence(const CheckStrategy())
-        .visit(element1, element2);
-  }
-}
-
-/// Checks the pair-wise equivalence of the identity (but not properties) of the
-/// elements in [list] and [list2].
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-bool checkElementListIdentities(
-    Object object1, Object object2, String property,
-    Iterable<Element> list1, Iterable<Element> list2) {
-  return checkListEquivalence(
-      object1, object2, property,
-      list1, list2, checkElementIdentities);
-}
-
-/// Checks the equivalence of [type1] and [type2].
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-bool checkTypes(
-    Object object1, Object object2, String property,
-    DartType type1, DartType type2) {
-  if (identical(type1, type2)) return true;
-  if (type1 == null || type2 == null) {
-    return check(object1, object2, property, type1, type2);
-  } else {
-    return const TypeEquivalence(const CheckStrategy()).visit(type1, type2);
-  }
-}
-
-/// Checks the pair-wise equivalence of the types in [list1] and [list2].
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-bool checkTypeLists(
-    Object object1, Object object2, String property,
-    List<DartType> list1, List<DartType> list2) {
-  return checkListEquivalence(
-      object1, object2, property, list1, list2, checkTypes);
-}
-
-/// Checks the equivalence of [exp1] and [exp2].
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-bool checkConstants(
-    Object object1, Object object2, String property,
-    ConstantExpression exp1, ConstantExpression exp2) {
-  if (identical(exp1, exp2)) return true;
-  if (exp1 == null || exp2 == null) {
-    return check(object1, object2, property, exp1, exp2);
-  } else {
-    return const ConstantEquivalence(const CheckStrategy()).visit(exp1, exp2);
-  }
-}
-
-/// Checks the pair-wise equivalence of the contants in [list1] and [list2].
-///
-/// Uses [object1], [object2] and [property] to provide context for failures.
-bool checkConstantLists(
-    Object object1, Object object2, String property,
-    List<ConstantExpression> list1,
-    List<ConstantExpression> list2) {
-  return checkListEquivalence(
-      object1, object2, property,
-      list1, list2, checkConstants);
-}
-
-
-/// Strategy for checking equivalence.
-///
-/// Use this strategy to fail early with contextual information in the event of
-/// inequivalence.
-class CheckStrategy implements TestStrategy {
-  const CheckStrategy();
-
-  @override
-  bool test(var object1, var object2, String property, var value1, var value2) {
-    return check(object1, object2, property, value1, value2);
-  }
-
-  @override
-  bool testLists(
-      Object object1, Object object2, String property,
-      List list1, List list2,
-      [bool elementEquivalence(a, b) = equality]) {
-    return checkListEquivalence(
-        object1, object2, property, list1, list2,
-        (o1, o2, p, v1, v2) {
-          if (!elementEquivalence(v1, v2)) {
-            throw "$o1.$p = '${v1}' <> "
-                  "$o2.$p = '${v2}'";
-          }
-          return true;
-        });
-  }
-
-  @override
-  bool testSets(
-      var object1, var object2, String property,
-      Iterable set1, Iterable set2,
-      [bool elementEquivalence(a, b) = equality]) {
-    return checkSetEquivalence(
-        object1, object2,property, set1, set2, elementEquivalence);
-  }
-
-  @override
-  bool testElements(
-      Object object1, Object object2, String property,
-      Element element1, Element element2) {
-    return checkElementIdentities(
-        object1, object2, property, element1, element2);
-  }
-
-  @override
-  bool testTypes(
-      Object object1, Object object2, String property,
-      DartType type1, DartType type2) {
-    return checkTypes(object1, object2, property, type1, type2);
-  }
-
-  @override
-  bool testConstants(
-      Object object1, Object object2, String property,
-      ConstantExpression exp1, ConstantExpression exp2) {
-    return checkConstants(object1, object2, property, exp1, exp2);
-  }
-
-  @override
-  bool testTypeLists(
-      Object object1, Object object2, String property,
-      List<DartType> list1, List<DartType> list2) {
-    return checkTypeLists(object1, object2, property, list1, list2);
-  }
-
-  @override
-  bool testConstantLists(
-      Object object1, Object object2, String property,
-      List<ConstantExpression> list1,
-      List<ConstantExpression> list2) {
-    return checkConstantLists(object1, object2, property, list1, list2);
-  }
-}
-
 /// Checks the equivalence of [constructor1] and [constructor2].
 void constantConstructorEquivalence(ConstantConstructor constructor1,
                                     ConstantConstructor constructor2) {
@@ -477,14 +222,13 @@
   }
 }
 
-/// Check that the values [property] of [object1] and [object2], [value1] and
-/// [value2] respectively, are equal and throw otherwise.
-bool check(var object1, var object2, String property, var value1, value2) {
-  if (value1 != value2) {
-    throw "$object1.$property = '${value1}' <> "
-          "$object2.$property = '${value2}'";
-  }
-  return true;
+/// Check the equivalence of the two lists of elements, [list1] and [list2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+checkElementLists(Object object1, Object object2, String property,
+                  Iterable<Element> list1, Iterable<Element> list2) {
+  checkListEquivalence(object1, object2, property,
+                  list1, list2, checkElementProperties);
 }
 
 /// Visitor that checks for equivalence of [Element] properties.
diff --git a/tests/compiler/dart2js/serialization_test_data.dart b/tests/compiler/dart2js/serialization_test_data.dart
new file mode 100644
index 0000000..67d400c
--- /dev/null
+++ b/tests/compiler/dart2js/serialization_test_data.dart
@@ -0,0 +1,205 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js.serialization_test_data;
+
+const List<Test> TESTS = const <Test>[
+  const Test(const {
+    'main.dart': 'main() {}'
+  }),
+
+  const Test(const {
+    'main.dart': 'main() => print("Hello World");'
+  }),
+
+  const Test(const {
+    'main.dart': 'main() => print("Hello World", 0);'
+  },
+  expectedWarningCount: 1,
+  expectedInfoCount: 1),
+
+  const Test(const {
+    'main.dart': r'''
+main() {
+  String text = "Hello World";
+  print('$text');
+}'''
+  }),
+
+  const Test(const {
+    'main.dart': r'''
+main() {
+  String text = "Hello World";
+  print('$text', text);
+}'''
+  },
+  expectedWarningCount: 1,
+  expectedInfoCount: 1),
+
+  const Test(const {
+    'main.dart': r'''
+main(List<String> arguments) {
+  print(arguments);
+}'''
+  }),
+
+  const Test(const {
+      'main.dart': r'''
+main(List<String> arguments) {
+  for (int i = 0; i < arguments.length; i++) {
+    print(arguments[i]);
+  }
+}'''
+    }),
+
+  const Test(const {
+    'main.dart': r'''
+main(List<String> arguments) {
+  for (String argument in arguments) {
+    print(argument);
+  }
+}'''
+  }),
+
+  const Test(const {
+    'main.dart': r'''
+class Class {}
+main() {
+  print(new Class());
+}'''
+  }),
+
+  const Test(const {
+    'main.dart': r'''
+class Class implements Function {}
+main() {
+  print(new Class());
+}'''
+  },
+  expectedWarningCount: 1),
+
+  const Test(const {
+    'main.dart': r'''
+class Class implements Function {
+  call() {}
+}
+main() {
+  print(new Class()());
+}'''
+  }),
+
+  const Test(const {
+    'main.dart': r'''
+class Class implements Comparable<Class> {
+  int compareTo(Class other) => 0;
+}
+main() {
+  print(new Class());
+}'''
+  }),
+
+  const Test(const {
+    'main.dart': r'''
+class Class implements Comparable<Class, Class> {
+  int compareTo(other) => 0;
+}
+main() {
+  print(new Class());
+}'''
+  },
+  expectedWarningCount: 1),
+
+  const Test(const {
+    'main.dart': r'''
+class Class implements Comparable<Class> {
+  int compareTo(String other) => 0;
+}
+main() {
+  print(new Class().compareTo(null));
+}'''
+  },
+  expectedWarningCount: 1,
+  expectedInfoCount: 1),
+
+  const Test(const {
+    'main.dart': r'''
+class Class implements Comparable {
+  bool compareTo(a, b) => true;
+}
+main() {
+  print(new Class().compareTo(null, null));
+}'''
+  },
+  expectedWarningCount: 1,
+  expectedInfoCount: 1),
+
+  const Test(const {
+    'main.dart': r'''
+import 'dart:math';
+
+class MyRandom implements Random {
+  int nextInt(int max) {
+    return max.length;
+  }
+  bool nextBool() => true;
+  double nextDouble() => 0.0;
+}
+main() {
+  new MyRandom().nextInt(0);
+}'''
+  },
+  expectedWarningCount: 1,
+  expectedInfoCount: 0),
+
+  const Test(const {
+    'main.dart': r'''
+import 'dart:math';
+
+class MyRandom implements Random {
+  int nextInt(int max) {
+    return max.length;
+  }
+  bool nextBool() => true;
+  double nextDouble() => 0.0;
+}
+main() {
+  new MyRandom();
+}'''
+  }),
+
+  const Test(const {
+    'main.dart': r'''
+import 'dart:math';
+
+class MyRandom implements Random {
+  int nextInt(int max) {
+    return max.length;
+  }
+  bool nextBool() => true;
+  double nextDouble() => 0.0;
+}
+main() {
+  // Invocation of `MyRandom.nextInt` is only detected knowing the actual 
+  // implementation class for `List` and the world impact of its `shuffle` 
+  // method.  
+  [].shuffle(new MyRandom());
+}'''
+  },
+  expectedWarningCount: 1,
+  expectedInfoCount: 0),
+];
+
+class Test {
+  final Map sourceFiles;
+  final int expectedErrorCount;
+  final int expectedWarningCount;
+  final int expectedHintCount;
+  final int expectedInfoCount;
+
+  const Test(this.sourceFiles, {
+    this.expectedErrorCount: 0,
+    this.expectedWarningCount: 0,
+    this.expectedHintCount: 0,
+    this.expectedInfoCount: 0});
+}
diff --git a/tests/compiler/dart2js/serialization_test_helper.dart b/tests/compiler/dart2js/serialization_test_helper.dart
new file mode 100644
index 0000000..97d5134
--- /dev/null
+++ b/tests/compiler/dart2js/serialization_test_helper.dart
@@ -0,0 +1,365 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dart2js.serialization_test_helper;
+
+import 'dart:io';
+import 'memory_compiler.dart';
+import 'package:async_helper/async_helper.dart';
+import 'package:compiler/src/common/resolution.dart';
+import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/constants/constructors.dart';
+import 'package:compiler/src/constants/expressions.dart';
+import 'package:compiler/src/dart_types.dart';
+import 'package:compiler/src/compiler.dart';
+import 'package:compiler/src/diagnostics/invariant.dart';
+import 'package:compiler/src/elements/elements.dart';
+import 'package:compiler/src/elements/visitor.dart';
+import 'package:compiler/src/ordered_typeset.dart';
+import 'package:compiler/src/serialization/element_serialization.dart';
+import 'package:compiler/src/serialization/equivalence.dart';
+import 'package:compiler/src/serialization/json_serializer.dart';
+import 'package:compiler/src/serialization/serialization.dart';
+
+
+/// Strategy for checking equivalence.
+///
+/// Use this strategy to fail early with contextual information in the event of
+/// inequivalence.
+class CheckStrategy implements TestStrategy {
+  const CheckStrategy();
+
+  @override
+  bool test(var object1, var object2, String property, var value1, var value2,
+            [bool equivalence(a, b) = equality]) {
+    return check(object1, object2, property, value1, value2, equivalence);
+  }
+
+  @override
+  bool testLists(
+      Object object1, Object object2, String property,
+      List list1, List list2,
+      [bool elementEquivalence(a, b) = equality]) {
+    return checkListEquivalence(
+        object1, object2, property, list1, list2,
+        (o1, o2, p, v1, v2) {
+          if (!elementEquivalence(v1, v2)) {
+            throw "$o1.$p = '${v1}' <> "
+                  "$o2.$p = '${v2}'";
+          }
+          return true;
+        });
+  }
+
+  @override
+  bool testSets(
+      var object1, var object2, String property,
+      Iterable set1, Iterable set2,
+      [bool elementEquivalence(a, b) = equality]) {
+    return checkSetEquivalence(
+        object1, object2,property, set1, set2, elementEquivalence);
+  }
+
+  @override
+  bool testElements(
+      Object object1, Object object2, String property,
+      Element element1, Element element2) {
+    return checkElementIdentities(
+        object1, object2, property, element1, element2);
+  }
+
+  @override
+  bool testTypes(
+      Object object1, Object object2, String property,
+      DartType type1, DartType type2) {
+    return checkTypes(object1, object2, property, type1, type2);
+  }
+
+  @override
+  bool testConstants(
+      Object object1, Object object2, String property,
+      ConstantExpression exp1, ConstantExpression exp2) {
+    return checkConstants(object1, object2, property, exp1, exp2);
+  }
+
+  @override
+  bool testTypeLists(
+      Object object1, Object object2, String property,
+      List<DartType> list1, List<DartType> list2) {
+    return checkTypeLists(object1, object2, property, list1, list2);
+  }
+
+  @override
+  bool testConstantLists(
+      Object object1, Object object2, String property,
+      List<ConstantExpression> list1,
+      List<ConstantExpression> list2) {
+    return checkConstantLists(object1, object2, property, list1, list2);
+  }
+}
+
+/// Check that the values [property] of [object1] and [object2], [value1] and
+/// [value2] respectively, are equal and throw otherwise.
+bool check(var object1, var object2, String property, var value1, var value2,
+           [bool equivalence(a, b) = equality]) {
+  if (!equivalence(value1, value2)) {
+    throw "property='$property' "
+          "object1=$object1 (${object1.runtimeType}), value='${value1}' <> "
+          "object2=$object2 (${object2.runtimeType}), value='${value2}'";
+  }
+  return true;
+}
+
+/// Check equivalence of the two lists, [list1] and [list2], using
+/// [checkEquivalence] to check the pair-wise equivalence.
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkListEquivalence(
+    Object object1, Object object2, String property,
+    Iterable list1, Iterable list2,
+    void checkEquivalence(o1, o2, property, a, b)) {
+  for (int i = 0; i < list1.length && i < list2.length; i++) {
+    checkEquivalence(
+        object1, object2, property,
+        list1.elementAt(i), list2.elementAt(i));
+  }
+  for (int i = list1.length; i < list2.length; i++) {
+    throw
+        'Missing equivalent for element '
+        '#$i ${list2.elementAt(i)} in `${property}` on $object2.\n'
+        '`${property}` on $object1:\n ${list1.join('\n ')}\n'
+        '`${property}` on $object2:\n ${list2.join('\n ')}';
+  }
+  for (int i = list2.length; i < list1.length; i++) {
+    throw
+        'Missing equivalent for element '
+        '#$i ${list1.elementAt(i)} in `${property}` on $object1.\n'
+        '`${property}` on $object1:\n ${list1.join('\n ')}\n'
+        '`${property}` on $object2:\n ${list2.join('\n ')}';
+  }
+  return true;
+}
+
+/// Computes the set difference between [set1] and [set2] using
+/// [elementEquivalence] to determine element equivalence.
+///
+/// Elements both in [set1] and [set2] are added to [common], elements in [set1]
+/// but not in [set2] are added to [unfound], and the set of elements in [set2]
+/// but not in [set1] are returned.
+Set computeSetDifference(
+    Iterable set1,
+    Iterable set2,
+    List common,
+    List unfound,
+    [bool sameElement(a, b) = equality]) {
+  // TODO(johnniwinther): Avoid the quadratic cost here. Some ideas:
+  // - convert each set to a list and sort it first, then compare by walking
+  // both lists in parallel
+  // - map each element to a canonical object, create a map containing those
+  // mappings, use the mapped sets to compare (then operations like
+  // set.difference would work)
+  Set remaining = set2.toSet();
+  for (var element1 in set1) {
+    bool found = false;
+    for (var element2 in remaining) {
+      if (sameElement(element1, element2)) {
+        found = true;
+        remaining.remove(element2);
+        break;
+      }
+    }
+    if (found) {
+      common.add(element1);
+    } else {
+      unfound.add(element1);
+    }
+  }
+  return remaining;
+}
+
+/// Check equivalence of the two iterables, [set1] and [set1], as sets using
+/// [elementEquivalence] to compute the pair-wise equivalence.
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkSetEquivalence(
+    var object1,
+    var object2,
+    String property,
+    Iterable set1,
+    Iterable set2,
+    bool sameElement(a, b)) {
+  List common = [];
+  List unfound = [];
+  Set remaining =
+      computeSetDifference(set1, set2, common, unfound, sameElement);
+  if (unfound.isNotEmpty || remaining.isNotEmpty) {
+    String message =
+        "Set mismatch for `$property` on $object1 vs $object2: \n"
+        "Common:\n ${common.join('\n ')}\n"
+        "Unfound:\n ${unfound.join('\n ')}\n"
+        "Extra: \n ${remaining.join('\n ')}";
+    throw message;
+  }
+  return true;
+}
+
+/// Checks the equivalence of the identity (but not properties) of [element1]
+/// and [element2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkElementIdentities(
+    Object object1, Object object2, String property,
+    Element element1, Element element2) {
+  if (identical(element1, element2)) return true;
+  if (element1 == null || element2 == null) {
+    return check(object1, object2, property, element1, element2);
+  } else {
+    return const ElementIdentityEquivalence(const CheckStrategy())
+        .visit(element1, element2);
+  }
+}
+
+/// Checks the pair-wise equivalence of the identity (but not properties) of the
+/// elements in [list] and [list2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkElementListIdentities(
+    Object object1, Object object2, String property,
+    Iterable<Element> list1, Iterable<Element> list2) {
+  return checkListEquivalence(
+      object1, object2, property,
+      list1, list2, checkElementIdentities);
+}
+
+/// Checks the equivalence of [type1] and [type2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkTypes(
+    Object object1, Object object2, String property,
+    DartType type1, DartType type2) {
+  if (identical(type1, type2)) return true;
+  if (type1 == null || type2 == null) {
+    return check(object1, object2, property, type1, type2);
+  } else {
+    return const TypeEquivalence(const CheckStrategy()).visit(type1, type2);
+  }
+}
+
+/// Checks the pair-wise equivalence of the types in [list1] and [list2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkTypeLists(
+    Object object1, Object object2, String property,
+    List<DartType> list1, List<DartType> list2) {
+  return checkListEquivalence(
+      object1, object2, property, list1, list2, checkTypes);
+}
+
+/// Checks the equivalence of [exp1] and [exp2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkConstants(
+    Object object1, Object object2, String property,
+    ConstantExpression exp1, ConstantExpression exp2) {
+  if (identical(exp1, exp2)) return true;
+  if (exp1 == null || exp2 == null) {
+    return check(object1, object2, property, exp1, exp2);
+  } else {
+    return const ConstantEquivalence(const CheckStrategy()).visit(exp1, exp2);
+  }
+}
+
+/// Checks the pair-wise equivalence of the contants in [list1] and [list2].
+///
+/// Uses [object1], [object2] and [property] to provide context for failures.
+bool checkConstantLists(
+    Object object1, Object object2, String property,
+    List<ConstantExpression> list1,
+    List<ConstantExpression> list2) {
+  return checkListEquivalence(
+      object1, object2, property,
+      list1, list2, checkConstants);
+}
+
+
+/// Check member property equivalence between all members common to [compiler1]
+/// and [compiler2].
+void checkLoadedLibraryMembers(
+    Compiler compiler1,
+    Compiler compiler2,
+    bool hasProperty(Element member1),
+    void checkMemberProperties(Compiler compiler1, Element member1,
+                               Compiler compiler2, Element member2,
+                               {bool verbose}),
+    {bool verbose: false}) {
+
+  void checkMembers(Element member1, Element member2) {
+    if (member1.isClass && member2.isClass) {
+      ClassElement class1 = member1;
+      ClassElement class2 = member2;
+      class1.forEachLocalMember((m1) {
+        checkMembers(m1, class2.lookupLocalMember(m1.name));
+      });
+      return;
+    }
+
+    if (!hasProperty(member1)) {
+      return;
+    }
+
+    if (member2 == null) {
+      return;
+    }
+
+    if (areElementsEquivalent(member1, member2)) {
+      checkMemberProperties(
+          compiler1, member1,
+          compiler2, member2,
+          verbose: verbose);
+    }
+  }
+
+  for (LibraryElement library1 in compiler1.libraryLoader.libraries) {
+    LibraryElement library2 =
+        compiler2.libraryLoader.lookupLibrary(library1.canonicalUri);
+    if (library2 != null) {
+      library1.forEachLocalMember((Element member1) {
+        checkMembers(member1, library2.localLookup(member1.name));
+      });
+
+    }
+  }
+}
+
+/// Check equivalence of all resolution impacts.
+void checkAllImpacts(
+    Compiler compiler1,
+    Compiler compiler2,
+    {bool verbose: false}) {
+  checkLoadedLibraryMembers(
+      compiler1,
+      compiler2,
+      (Element member1) {
+        return compiler1.resolution.hasResolutionImpact(member1);
+      },
+      checkImpacts,
+      verbose: true);
+}
+
+/// Check equivalence of resolution impact for [member1] and [member2].
+void checkImpacts(Compiler compiler1, Element member1,
+                  Compiler compiler2, Element member2,
+                  {bool verbose: false}) {
+  ResolutionImpact impact1 = compiler1.resolution.getResolutionImpact(member1);
+  ResolutionImpact impact2 =
+      compiler2.serialization.deserializer.getResolutionImpact(member2);
+
+  if (impact1 == null || impact2 == null) return;
+
+  if (verbose) {
+    print('Checking impacts for $member1 vs $member2');
+  }
+
+  testResolutionImpactEquivalence(impact1, impact2, const CheckStrategy());
+}
diff --git a/tests/html/html.status b/tests/html/html.status
index 6862539..4beb9f4 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -25,6 +25,8 @@
 input_element_test/attributes: Fail # Issue 21555
 wrapping_collections_test: SkipByDesign # Testing an issue that is only relevant to Dartium
 js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue #25759
+mirrors_js_typed_interop_test: Pass, Slow
+
 
 [ $compiler == dart2js && $checked ]
 js_function_getter_trust_types_test: Skip # --trust-type-annotations incompatible with --checked
diff --git a/tests/html/js_typed_interop_anonymous2_exp_test.dart b/tests/html/js_typed_interop_anonymous2_exp_test.dart
index baebd03..d1db741 100644
--- a/tests/html/js_typed_interop_anonymous2_exp_test.dart
+++ b/tests/html/js_typed_interop_anonymous2_exp_test.dart
@@ -6,6 +6,7 @@
 
 // Same test as js_typed_interop_anonymous2, but using the
 // --experimental-trust-js-interop-type-annotations flag.
+@JS()
 library js_typed_interop_anonymous2_exp_test;
 
 import 'dart:html';
diff --git a/tests/html/js_typed_interop_anonymous2_test.dart b/tests/html/js_typed_interop_anonymous2_test.dart
index ed0e732..449269e 100644
--- a/tests/html/js_typed_interop_anonymous2_test.dart
+++ b/tests/html/js_typed_interop_anonymous2_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@JS()
 library js_typed_interop_anonymous2_test;
 
 import 'dart:html';
diff --git a/tests/html/js_typed_interop_anonymous_exp_test.dart b/tests/html/js_typed_interop_anonymous_exp_test.dart
index 40a04aa..8fdd50f 100644
--- a/tests/html/js_typed_interop_anonymous_exp_test.dart
+++ b/tests/html/js_typed_interop_anonymous_exp_test.dart
@@ -6,6 +6,7 @@
 
 // Same test as js_typed_interop_anonymous, but using the
 // --experimental-trust-js-interop-type-annotations flag.
+@JS()
 library js_typed_interop_anonymous_exp_test;
 
 import 'dart:html';
diff --git a/tests/html/js_typed_interop_anonymous_test.dart b/tests/html/js_typed_interop_anonymous_test.dart
index b2d1593..c4836c8 100644
--- a/tests/html/js_typed_interop_anonymous_test.dart
+++ b/tests/html/js_typed_interop_anonymous_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@JS()
 library js_typed_interop_anonymous_test;
 
 import 'dart:html';
diff --git a/tests/html/js_typed_interop_anonymous_unreachable_exp_test.dart b/tests/html/js_typed_interop_anonymous_unreachable_exp_test.dart
index a4e2c96..7754012 100644
--- a/tests/html/js_typed_interop_anonymous_unreachable_exp_test.dart
+++ b/tests/html/js_typed_interop_anonymous_unreachable_exp_test.dart
@@ -6,6 +6,7 @@
 
 // Same test as js_typed_interop_anonymous_unreachable, but using the
 // --experimental-trust-js-interop-type-annotations flag.
+@JS()
 library js_typed_interop_anonymous_unreachable_exp_test;
 
 import 'dart:html';
diff --git a/tests/html/js_typed_interop_anonymous_unreachable_test.dart b/tests/html/js_typed_interop_anonymous_unreachable_test.dart
index ba8758e..bbd97f0 100644
--- a/tests/html/js_typed_interop_anonymous_unreachable_test.dart
+++ b/tests/html/js_typed_interop_anonymous_unreachable_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@JS()
 library js_typed_interop_anonymous_unreachable_test;
 
 import 'dart:html';
diff --git a/tests/html/js_typed_interop_side_cast_exp_test.dart b/tests/html/js_typed_interop_side_cast_exp_test.dart
index 6fd929a..8b67c7b 100644
--- a/tests/html/js_typed_interop_side_cast_exp_test.dart
+++ b/tests/html/js_typed_interop_side_cast_exp_test.dart
@@ -7,6 +7,7 @@
 // Similar test to js_typed_interop_side_cast, but because we are using the
 // --experimental-trust-js-interop-type-annotations flag, we test a slighly
 // different behavior.
+@JS()
 library js_typed_interop_side_cast_exp_test;
 
 import 'dart:html';
diff --git a/tests/html/js_typed_interop_side_cast_test.dart b/tests/html/js_typed_interop_side_cast_test.dart
index d50e1ac..cf5ee5a 100644
--- a/tests/html/js_typed_interop_side_cast_test.dart
+++ b/tests/html/js_typed_interop_side_cast_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@JS()
 library js_typed_interop_anonymous2_test;
 
 import 'dart:html';
diff --git a/tests/html/mirrors_js_typed_interop_test.dart b/tests/html/mirrors_js_typed_interop_test.dart
index a34bf1b..f4b30a6 100644
--- a/tests/html/mirrors_js_typed_interop_test.dart
+++ b/tests/html/mirrors_js_typed_interop_test.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+@JS()
 library tests.html.mirrors_js_typed_interop_test;
 
 import 'dart:mirrors';
diff --git a/tests/language/async_await_test.dart b/tests/language/async_await_test.dart
index 8844777..62ebe28 100644
--- a/tests/language/async_await_test.dart
+++ b/tests/language/async_await_test.dart
@@ -4,6 +4,8 @@
 
 library async_await_test;
 
+// Use of package:unittest and package:test is deprecated in sdk/tests.
+// Do not add any more uses of this package.
 import "package:unittest/unittest.dart";
 import "dart:async";
 
@@ -1728,37 +1730,37 @@
 
     if (!checkedMode) return;
 
-    test("inside assert, true", () {                       /// 03: ok
-      f() async {                                          /// 03: continued
-        assert(await new Future.microtask(() => true));    /// 03: continued
-        return 42;                                         /// 03: continued
-      }                                                    /// 03: continued
-      return expect42(f());                                /// 03: continued
-    });                                                    /// 03: continued
+    test("inside assert, true", () {
+      f() async {
+        assert(await new Future.microtask(() => true));
+        return 42;
+      }
+      return expect42(f());
+    });
 
-    test("inside assert, false", () {                      /// 03: continued
-      f() async {                                          /// 03: continued
-        assert(await new Future.microtask(() => false));   /// 03: continued
-        return 42;                                         /// 03: continued
-      }                                                    /// 03: continued
-      return f().then((_) {                                /// 03: continued
-        fail("assert didn't throw");                       /// 03: continued
-      }, onError: (e, s) {                                 /// 03: continued
-        expect(e is AssertionError, isTrue);               /// 03: continued
-      });                                                  /// 03: continued
-    });                                                    /// 03: continued
+    test("inside assert, false", () {
+      f() async {
+        assert(await new Future.microtask(() => false));
+        return 42;
+      }
+      return f().then((_) {
+        fail("assert didn't throw");
+      }, onError: (e, s) {
+        expect(e is AssertionError, isTrue);
+      });
+    });
 
-    test("inside assert, function -> false", () {          /// 03: continued
-      f() async {                                          /// 03: continued
-        assert(await new Future.microtask(() => false));   /// 03: continued
-        return 42;                                         /// 03: continued
-      }                                                    /// 03: continued
-      return f().then((_) {                                /// 03: continued
-        fail("assert didn't throw");                       /// 03: continued
-      }, onError: (e, s) {                                 /// 03: continued
-        expect(e is AssertionError, isTrue);               /// 03: continued
-      });                                                  /// 03: continued
-    });                                                    /// 03: continued
+    test("inside assert, function -> false", () {
+      f() async {
+        assert(await new Future.microtask(() => false));
+        return 42;
+      }
+      return f().then((_) {
+        fail("assert didn't throw");
+      }, onError: (e, s) {
+        expect(e is AssertionError, isTrue);
+      });
+    });
 
   });
 
@@ -1769,11 +1771,11 @@
       expect(async, equals(42));
     });
 
-    test("await as variable", () {                         /// 02: ok
-      // Valid identifiers outside of async function.      /// 02: continued
-      var await = 42;                                      /// 02: continued
-      expect(await, equals(42));                           /// 02: continued
-    });                                                    /// 02: continued
+    test("await as variable", () {
+      // Valid identifiers outside of async function.
+      var await = 42;
+      expect(await, equals(42));
+    });
 
     test("yield as variable", () {
       // Valid identifiers outside of async function.
diff --git a/tests/language/async_star_await_pauses_test.dart b/tests/language/async_star_await_pauses_test.dart
deleted file mode 100644
index c16fbdd..0000000
--- a/tests/language/async_star_await_pauses_test.dart
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:async";
-import "package:expect/expect.dart";
-import "package:async_helper/async_helper.dart";
-
-main() {
-  var sc;
-  var i = 0;
-  void send() {
-    if (i == 5) {
-      sc.close();
-    } else {
-      sc.add(i++);
-    }
-  }
-  sc = new StreamController(onListen: send, onResume: send);
-
-  f(s) async {
-    var r = 0;
-    await for (var i in s) {
-      r += await new Future.delayed(new Duration(milliseconds: 10), () => i);
-    }
-    return r;
-  }
-
-  asyncStart();
-  f(sc.stream).then((v) {
-    Expect.equals(10, v);
-    asyncEnd();
-  });
-}
diff --git a/tests/language/language.status b/tests/language/language.status
index 766408b..044e7a5 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -43,7 +43,6 @@
 
 async_star_regression_2238_test: CompileTimeError, RuntimeError # drt only runtime-errs.
 async_star_cancel_while_paused_test: RuntimeError
-async_star_await_pauses_test: Skip # Times out. Issue 23996
 
 # Experimental feature: Syntactic support for generic methods.
 generic_methods_test: CompiletimeError # Issue 25869
@@ -95,7 +94,10 @@
 generic_sends_test: RuntimeError # Issue 25869
 
 [ $compiler == none && $runtime == dartium && $system == linux && $arch != x64 ]
-issue_22780_test/01 : Pass, Timeout # Issue 24473
+issue_22780_test/01: Pass, Timeout # Issue 24473
+
+[ $compiler == none && $runtime == dartium && $system == linux && $arch == x64 ]
+async_await_test: Skip # Issue 26198
 
 [ $compiler == none && $runtime == drt ]
 disassemble_test: Pass, Fail # Issue 18122
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index b151186..f10bd63 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -7,7 +7,6 @@
 method_name_test: Fail # issue 25574
 
 async_star_cancel_while_paused_test: RuntimeError # Issue 22853
-async_star_await_pauses_test: Fail, Timeout # Issue 22853
 tearoff_basic_test: Skip # Tear-off not supported
 tearoff_constructor_basic_test: Skip # Tear-off not supported
 
@@ -44,6 +43,7 @@
 [ $compiler == dart2js && $runtime == jsshell ]
 await_for_test: Skip # Jsshell does not provide periodic timers, Issue 7728
 async_star_test: RuntimeError # Jsshell does not provide non-zero timers, Issue 7728
+regress_23996_test: RuntimeError # Jsshell does not provide non-zero timers, Issue 7728
 async_star_no_cancel_test: RuntimeError # Need triage
 async_star_no_cancel2_test: RuntimeError # Need triage
 
@@ -208,12 +208,6 @@
 [ $compiler == dart2js && $runtime == none ]
 *: Fail, Pass # TODO(ahe): Triage these tests.
 
-[ $compiler == dart2js && $runtime == chrome && $system == macos ]
-await_future_test: Pass, Timeout # Issue 22695.
-async_await_test/none: Pass, Timeout # Issue 22695.
-async_await_test/02: Pass, Timeout # Issue 22695.
-async_await_test/03: Pass, Timeout # Issue 22695.
-
 [ $compiler == dart2js && ($runtime == safari || $runtime == safarimobilesim)]
 round_test: Fail, OK # Common JavaScript engine Math.round bug.
 
diff --git a/tests/language/regress_23996_test.dart b/tests/language/regress_23996_test.dart
new file mode 100644
index 0000000..4401a46
--- /dev/null
+++ b/tests/language/regress_23996_test.dart
@@ -0,0 +1,77 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+
+/// This test verifies that an await for loop sends the correct
+/// signals to the stream it iterates over:
+/// 1) A listen event.
+/// 2) A pause event when the loop body is awaiting something,
+///    and more elements arrive on the stream.  See issue
+///    https://github.com/dart-lang/sdk/issues/23996 .
+/// 3) A resume event, when the loop is again ready to iterate.
+main() {
+  Completer listenEventReceived = new Completer();
+  Completer pauseEventReceived = new Completer();
+  Completer resumeEventReceived = new Completer();
+  StreamController controller = new StreamController(
+      onListen: () => listenEventReceived.complete(),
+      onPause: () => pauseEventReceived.complete(),
+      onResume: () => resumeEventReceived.complete());
+
+  Completer forLoopEntered = new Completer();
+
+  /// The send function puts items on the stream. It waits for a
+  /// listener, puts "first" on the stream, waits for the for loop
+  /// to start (and eventually block), puts "second" on the stream
+  /// multiple times, letting the event loop run, until the for loop
+  /// pauses the stream because it it blocked.
+  /// The for loop unblocks after the pause message is received, and
+  /// reads the stream items, sending a stream resume message when it
+  /// is ready for more.
+  /// Then the send function puts a final "third" on the stream, and
+  /// closes the stream.
+  send() async {
+    await listenEventReceived.future;
+    controller.add('first');
+    await forLoopEntered.future;
+    var timer = new Timer.periodic(new Duration(milliseconds: 10), (timer) {
+      controller.add('second');
+    });
+    await pauseEventReceived.future;
+    // pauseEventReceived.future completes when controller.stream is
+    // paused by the await-for loop below. What's specified is that
+    // await-for must pause immediately on an "await", but instead
+    // the implementations agree on not pausing until receiving the
+    // next event. For this reason, [timer] will call its callback at
+    // least once before we cancel it again.
+    timer.cancel();
+    await resumeEventReceived.future;
+    controller.add('third');
+    controller.close();
+  }
+
+  receive() async {
+    bool thirdReceived = false;
+    await for (var entry in controller.stream) {
+      if (entry == 'first') {
+        forLoopEntered.complete();
+        await pauseEventReceived.future;
+      } else if (entry == 'third') {
+        thirdReceived = true;
+      }
+    }
+    if (!thirdReceived) {
+      throw "Error in await-for loop: 'third' not received";
+    }
+  }
+
+  asyncTest(() async {
+    // We need to start both functions in parallel, and wait on them both.
+    var f = send();
+    await receive();
+    await f;
+  });
+}
diff --git a/tests/language/regress_26175_test.dart b/tests/language/regress_26175_test.dart
new file mode 100644
index 0000000..e4af4bb
--- /dev/null
+++ b/tests/language/regress_26175_test.dart
@@ -0,0 +1,74 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+// Test that local variable reads and writes are sequenced correctly with
+// respect to reads and writes in an awaited Future.  See issue 26175.
+
+// Reads are sequenced correctly with respect to writes in a Future.
+Future test1() async {
+  var x = 'a';
+  f() async => x = 'b';
+  Expect.equals('abb', '${x}${await f()}${x}');
+}
+
+// Writes are sequenced correctly with respect to writes in a Future.
+Future test2(ignore) async {
+  var x;
+  f() async => x = 'b';
+  Expect.equals('abb', '${x = 'a'}${await f()}${x}');
+}
+
+// Writes are sequenced correctly with respect to reads in a Future.
+Future test3(ignore) async {
+  var x = 'a';
+  f() async => x;
+  Expect.equals('bbb', '${x = 'b'}${await f()}${x}');
+}
+
+// Repeat the same tests for static variables.
+var cell = 'a';
+
+asyncReadCell() async => cell;
+asyncWriteCell(value) async => cell = value;
+
+Future test4(ignore) async {
+  // This test assumes that it can read the initial value of cell.
+  Expect.equals('abb', '${cell}${await asyncWriteCell('b')}${cell}');
+}
+
+Future test5(ignore) async {
+  Expect.equals('abb', '${cell = 'a'}${await asyncWriteCell('b')}${cell}');
+}
+
+Future test6(ignore) async {
+  Expect.equals('bbb', '${cell = 'b'}${await asyncReadCell()}${cell}');
+}
+
+// Test that throwing is sequenced correctly with respect to other effects.
+Future test7(ignore) async {
+  cell = 'a';
+  try {
+    Expect.equals('unreachable',
+        '${throw 0}${await asyncWriteCell('b')}${cell}');
+  } catch (_) {
+    Expect.equals('a', cell);
+  }
+}
+
+main() {
+  asyncStart();
+  test1()
+      .then(test2)
+      .then(test3)
+      .then(test4)
+      .then(test5)
+      .then(test6)
+      .then(test7)
+      .then((_) => asyncEnd());
+}
diff --git a/tests/lib/convert/base64_test.dart b/tests/lib/convert/base64_test.dart
index 457e330..4a2c1ab 100644
--- a/tests/lib/convert/base64_test.dart
+++ b/tests/lib/convert/base64_test.dart
@@ -31,16 +31,23 @@
   // Direct.
   String encodedNormal = BASE64.encode(list);
   String encodedPercent = encodedNormal.replaceAll("=", "%3D");
-  String uriEncoded = encodedNormal.replaceAll("+", "-").replaceAll("/", "_");
+  String uriEncoded = BASE64URL.encode(list);
+  String expectedUriEncoded =
+      encodedNormal.replaceAll("+", "-").replaceAll("/", "_");
+  Expect.equals(expectedUriEncoded, uriEncoded);
+
   List result = BASE64.decode(encodedNormal);
   Expect.listEquals(list, result, name);
   result = BASE64.decode(encodedPercent);
   Expect.listEquals(list, result, name);
+  result = BASE64.decode(uriEncoded);
+  Expect.listEquals(list, result, name);
 
   int increment = list.length ~/ 7 + 1;
   // Chunked.
   for (int i = 0; i < list.length; i += increment) {
     for (int j = i; j < list.length; j += increment) {
+      // Normal
       {
         // Using add/close
         var results;
@@ -64,6 +71,30 @@
         var name = "0-$i-$j-${list.length}: $list";
         Expect.equals(encodedNormal, results.join(""), name);
       }
+      // URI
+      {
+        // Using add/close
+        var results;
+        var sink = new ChunkedConversionSink.withCallback((v) { results = v; });
+        var encoder = BASE64URL.encoder.startChunkedConversion(sink);
+        encoder.add(list.sublist(0, i));
+        encoder.add(list.sublist(i, j));
+        encoder.add(list.sublist(j, list.length));
+        encoder.close();
+        var name = "0-$i-$j-${list.length}: list";
+        Expect.equals(uriEncoded, results.join(""), name);
+      }
+      {
+        // Using addSlice
+        var results;
+        var sink = new ChunkedConversionSink.withCallback((v) { results = v; });
+        var encoder = BASE64URL.encoder.startChunkedConversion(sink);
+        encoder.addSlice(list, 0, i, false);
+        encoder.addSlice(list, i, j, false);
+        encoder.addSlice(list, j, list.length, true);
+        var name = "0-$i-$j-${list.length}: $list";
+        Expect.equals(uriEncoded, results.join(""), name);
+      }
     }
   }
 
@@ -119,6 +150,7 @@
   }
   void badDecode(String string) {
     Expect.throws(() => BASE64.decode(string), isFormatException, string);
+    Expect.throws(() => BASE64URL.decode(string), isFormatException, string);
     badChunkDecode([string]);
     badChunkDecode(["", string]);
     badChunkDecode([string, ""]);
diff --git a/tests/lib/convert/chunked_conversion1_test.dart b/tests/lib/convert/chunked_conversion1_test.dart
index 0bbe44b..3c84b3e 100644
--- a/tests/lib/convert/chunked_conversion1_test.dart
+++ b/tests/lib/convert/chunked_conversion1_test.dart
@@ -54,7 +54,8 @@
   specialB(o) => add(o);
 }
 
-class IntBoolConverter1 extends Converter<List<int>, List<bool>> {
+class IntBoolConverter1 extends
+    ChunkedConverter<List<int>, List<bool>, int, bool> {
   List<bool> convert(List<int> input) => input.map((x) => x > 0).toList();
 
   startChunkedConversion(sink) {
@@ -63,7 +64,8 @@
   }
 }
 
-class BoolIntConverter1 extends Converter<List<bool>, List<int>> {
+class BoolIntConverter1 extends
+    ChunkedConverter<List<bool>, List<int>, bool, int> {
   List<int> convert(List<bool> input) => input.map((x) => x ? 1 : 0).toList();
 
   startChunkedConversion(sink) {
@@ -104,7 +106,7 @@
   close() => outSink.close();
 }
 
-class IdentityConverter extends Converter {
+class IdentityConverter extends ChunkedConverter {
   convert(x) => x;
 
   startChunkedConversion(sink) {
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index b44b584c..8b9fb54 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -78,6 +78,7 @@
 mirrors/other_declarations_location_test: CompileTimeError # Issue 10905
 mirrors/parameter_test/none: RuntimeError # Issue 6490
 mirrors/parameter_of_mixin_app_constructor_test: RuntimeError # Issue 6490
+mirrors/private_class_field_test: CompileTimeError
 mirrors/private_symbol_test: CompileTimeError # Issue 13597
 mirrors/private_types_test: RuntimeError # Issue 6490
 mirrors/redirecting_factory_test/none: RuntimeError # Issue 6490
@@ -321,9 +322,6 @@
 [ ($runtime == vm || $runtime == dart_precompiled || $runtime == dart_product) && $mode == debug && $arch == x64 && $system == windows ]
 convert/streamed_conversion_json_utf8_decode_test: Pass, Slow
 
-[ ($runtime == vm || $runtime == dart_precompiled || $runtime == dart_product) && $mode == release && $arch == ia32 && $system == windows ]
-convert/json_test: RuntimeError # Issue 24908
-
 [ $mode == debug && $arch != ia32 && $arch != x64 && $arch != simarm && $arch != simarmv6 && $arch != simarmv5te ]
 convert/streamed_conversion_json_utf8_decode_test: Skip  # Verification not yet implemented.
 
diff --git a/tests/lib/mirrors/private_class_field_other.dart b/tests/lib/mirrors/private_class_field_other.dart
new file mode 100644
index 0000000..85238b6
--- /dev/null
+++ b/tests/lib/mirrors/private_class_field_other.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class C {
+  static var _privateField = 42;
+}
+
+get privateFieldSymbolInOther => #_privateField;
\ No newline at end of file
diff --git a/tests/lib/mirrors/private_class_field_test.dart b/tests/lib/mirrors/private_class_field_test.dart
new file mode 100644
index 0000000..cedf903
--- /dev/null
+++ b/tests/lib/mirrors/private_class_field_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test a private field name doesn't match the equivalent private name from
+// another library.
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+
+import 'private_class_field_other.dart';
+
+void main() {
+  var classMirror = reflectClass(C);
+  // The symbol is private w/r/t the wrong library.
+  Expect.throws(() => classMirror.getField(#_privateField),
+                (e) => e is NoSuchMethodError);
+
+  Expect.equals(42, classMirror.getField(privateFieldSymbolInOther).reflectee);
+}
diff --git a/tests/standalone/full_coverage_test.dart b/tests/standalone/full_coverage_test.dart
deleted file mode 100644
index e719d42..0000000
--- a/tests/standalone/full_coverage_test.dart
+++ /dev/null
@@ -1,247 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// These tests fork a second VM process that runs the script
-// ``tools/full-coverage.dart'' and verifies that the tool
-// produces the expeced output.
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:path/path.dart' as path;
-import 'package:unittest/unittest.dart';
-
-final String coverageScript =
-    Platform.script.resolve('../../tools/full-coverage.dart').toFilePath();
-final String packageRoot = Platform.packageRoot;
-final List dartBaseArgs = ['--package-root=${packageRoot}', '--checked',];
-final Stopwatch sw = new Stopwatch();
-
-int elapsed() => sw.elapsedMilliseconds;
-
-// With line numbers starting at 0, the list of hits can be understood as
-// follows:
-// * -1: No coverage data on this line.
-// *  0: No hits on this line.
-// *  1: ``Some'' hits on this line.
-final coverageTests = [
-  {
-    'name': 'faculty',
-    'program': '''
-dummy () {
-  for (int i = 0; i < 100; i++) {
-    print(i);
-  }
-}
-
-int fac(int n) {
-  int f = 1;
-  for (int i = 1; i <= n; i++) {
-    f *= i;
-  }
-  return f;
-}
-
-main() {
-  if (false) {
-    dummy(11);
-  } else {
-    fac(10);
-  }
-}
-''',
-    'expectedHits': [-1, 0, 0, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, -1, -1,
-                     -1, 0, -1, 1, -1, -1]
-  },{
-    'name': 'closures',
-    'program': '''
-main() {
-  foo(bar) {
-    bar();
-  }
-
-  foo(() {
-    print("in closure");
-  });
-}
-''',
-    'expectedHits': [-1, -1, 1, -1, -1, 1, 1, -1, -1]
-  }
-];
-
-
-String prepareEnv() {
-  Directory testDir = Directory.systemTemp.createTempSync("coverage-");
-  for (var coverageProg in coverageTests) {
-    var coverageProgDir = new Directory(
-        path.join(testDir.path, coverageProg["name"]))
-      ..createSync();
-    var f = new File(path.join(coverageProgDir.path,
-        "${coverageProg['name']}.dart"));
-    f.writeAsStringSync(coverageProg["program"], mode: FileMode.WRITE);
-  }
-  return testDir.path;
-}
-
-
-destroyEnv(base) => new Directory(base).deleteSync(recursive: true);
-
-
-generateCoverage(String workingDirectory) {
-  for (var coverageProg in coverageTests) {
-    print('[+${elapsed()}ms] Generating data for ${coverageProg["name"]}');
-    var progPath = path.join(workingDirectory, coverageProg['name']);
-    var script = path.join(progPath, "${coverageProg['name']}.dart");
-    var dartArgs = new List.from(dartBaseArgs)
-      ..addAll(['--coverage-dir=${progPath}', '${script}']);
-    var result = Process.runSync(Platform.executable, dartArgs);
-    if (result.exitCode != 0) {
-      print("[+${elapsed()}ms] Got exitCode: ${result.exitCode}.");
-      print("stderr:\n${result.stderr}\n");
-      expect(result.exitCode, 0);
-    }
-  }
-}
-
-
-Future<Process> convertCoverage(String programDir, String format) {
-  var dartArgs = new List.from(dartBaseArgs)
-      ..addAll([
-        coverageScript,
-        '--package-root=${packageRoot}',
-        '--in=${programDir}',
-        format
-      ]);
-  return Process.start(Platform.executable, dartArgs);
-}
-
-
-class PrettyPrintDescriptor {
-  var _programPath;
-  var _validFormat = new RegExp(r"^\s*\d*\|.*$", multiLine: true);
-  var _pattern = new RegExp(r"^\s*(\d+)\|", multiLine: true);
-
-  PrettyPrintDescriptor(this._programPath);
-
-  get sectionStart => _programPath;
-  get sectionEnd => '/';
-  get coverageParameter => '--pretty-print';
-
-  hitData(line) {
-    expect(_validFormat.hasMatch(line), isTrue);
-    var match = _pattern.firstMatch(line);
-    var result = -1;
-    if (match != null) {
-      result = (int.parse(match.group(1)) != 0) ? 1 : 0;
-    }
-    return [result];
-  }
-}
-
-
-class LcovDescriptor {
-  var _pattern = new RegExp(r"^DA:(\d+),(\d+)$", multiLine: true);
-  var _programPath;
-  var _line_nr = 0;
-
-  LcovDescriptor(this._programPath);
-
-  get sectionStart => 'SF:${_programPath}';
-  get sectionEnd => 'end_of_record';
-  get coverageParameter => '--lcov';
-
-  hitData(line) {
-    expect(_pattern.hasMatch(line), isTrue);
-    var match = _pattern.firstMatch(line);
-    // Lcov data starts at line 1, we start at 0.
-    var out_line = int.parse(match[1]) - 1;
-    var hitCount = int.parse(match[2]);
-    var result = [];
-    for ( ; _line_nr < out_line; _line_nr++) {
-      result.add(-1);
-    }
-    result.add((hitCount != 0) ? 1 : 0);
-    _line_nr++;
-    return result;
-  }
-}
-
-
-Stream filterHitData(input, descriptor) {
-  bool in_program_section = false;
-  return input.where((line) {
-    if (in_program_section) {
-      if (line.startsWith(descriptor.sectionEnd)) {
-        in_program_section = false;
-        return false;
-      }
-      return true;
-    }
-    if (line.startsWith(descriptor.sectionStart)) {
-      in_program_section = true;
-    }
-    return false;
-  }).map((line) {
-    return descriptor.hitData(line);
-  });
-}
-
-
-testCoverage(String programDir, String programPath, descriptor,
-             List expectedHitMap) {
-  var p = convertCoverage(programDir, descriptor.coverageParameter);
-  expect(p.then((process) {
-    var hitStream = filterHitData(
-        process.stdout.transform(UTF8.decoder)
-                      .transform(const LineSplitter()),
-        descriptor);
-    var hitMap = [];
-    var subscription = hitStream.listen((data) {
-      // Flatten results.
-      data.forEach((e) => hitMap.add(e));
-    });
-    expect(subscription.asFuture().then((_) {
-      hitMap.forEach((e) {
-        expect(e, expectedHitMap.removeAt(0));
-      });
-      // Make sure that there are only lines left that do not contain coverage
-      // data.
-      expectedHitMap.forEach((e) => expect(e, -1));
-    }), completes);
-  }), completes);
-}
-
-
-main() {
-  String testingDirectory;
-  sw.start();
-
-  setUp(() {
-    testingDirectory = prepareEnv();
-  });
-
-  tearDown(() => destroyEnv(testingDirectory));
-
-  test('CoverageTests', () {
-    print('[+${elapsed()}ms] Generating coverage data...');
-    generateCoverage(testingDirectory);
-    print('[+${elapsed()}ms] Done Generating coverage data.');
-
-    print('[+${elapsed()}ms] Running tests...');
-    coverageTests.forEach((cTest) {
-      String programDir = path.join(testingDirectory, cTest['name']);
-      String programPath = path.join(programDir, "${cTest['name']}.dart");
-      print('[+${elapsed()}ms] Testing lcov for ${cTest["name"]}');
-      testCoverage(programDir, programPath,
-                   new LcovDescriptor(programPath),
-                   new List.from(cTest['expectedHits']));
-      print('[+${elapsed()}ms] Testing pretty print for ${cTest["name"]}');
-      testCoverage(programDir, programPath,
-                   new PrettyPrintDescriptor(programPath),
-                   new List.from(cTest['expectedHits']));
-    });
-    print('[+${elapsed()}ms] Done.');
-  });
-}
diff --git a/tools/VERSION b/tools/VERSION
index 2ca4386..933c4c2 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 16
 PATCH 0
-PRERELEASE 4
+PRERELEASE 5
 PRERELEASE_PATCH 0
diff --git a/tools/deps/dartium.deps/DEPS b/tools/deps/dartium.deps/DEPS
index ee710f8..362e8a3 100644
--- a/tools/deps/dartium.deps/DEPS
+++ b/tools/deps/dartium.deps/DEPS
@@ -8,8 +8,8 @@
 # Now we need to override some settings and add some new ones.
 
 vars.update({
-  "dartium_chromium_commit": "f41b46133f75612579588ba14265a7e241406b0e",
-  "dartium_webkit_commit": "d4cfc86d765d59fd7048c7272b924a1a9e9ce5fe",
+  "dartium_chromium_commit": "d70bedf071e56a6bb1d8ad0df8ece98745e0401a",
+  "dartium_webkit_commit": "b4483b1ace5b28b4678cf132087db9cd9e18deb6",
   "chromium_base_revision": "338390",
 
   # We use mirrors of all github repos to guarantee reproducibility and
diff --git a/tools/dom/scripts/generate_blink_file.py b/tools/dom/scripts/generate_blink_file.py
index cdac697..8cea946 100644
--- a/tools/dom/scripts/generate_blink_file.py
+++ b/tools/dom/scripts/generate_blink_file.py
@@ -138,39 +138,6 @@
   static initializeCustomElement(element) native "Utils_initializeCustomElement";
 }
 
-class Blink_DOMWindowCrossFrame {
-  // FIXME: Return to using explicit cross frame entry points after roll to M35
-  static get_history(_DOMWindowCrossFrame) native "Window_history_cross_frame_Getter";
-
-  static get_location(_DOMWindowCrossFrame) native "Window_location_cross_frame_Getter";
-
-  static get_closed(_DOMWindowCrossFrame) native "Window_closed_Getter";
-
-  static get_opener(_DOMWindowCrossFrame) native "Window_opener_Getter";
-
-  static get_parent(_DOMWindowCrossFrame) native "Window_parent_Getter";
-
-  static get_top(_DOMWindowCrossFrame) native "Window_top_Getter";
-
-  static close(_DOMWindowCrossFrame) native "Window_close_Callback";
-
-  static postMessage(_DOMWindowCrossFrame, message, targetOrigin, [messagePorts]) native "Window_postMessage_Callback";
-}
-
-class Blink_HistoryCrossFrame {
-  // _HistoryCrossFrame native entry points
-  static back(_HistoryCrossFrame) native "History_back_Callback";
-
-  static forward(_HistoryCrossFrame) native "History_forward_Callback";
-
-  static go(_HistoryCrossFrame, distance) native "History_go_Callback";
-}
-
-class Blink_LocationCrossFrame {
-  // _LocationCrossFrame native entry points
-  static set_href(_LocationCrossFrame, h) native "Location_href_Setter";
-}
-
 class Blink_DOMStringMap {
   // _DOMStringMap native entry  points
   static containsKey(_DOMStringMap, key) native "DOMStringMap_containsKey_Callback";
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index 6d0c94d..1f5a030 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -116,7 +116,7 @@
     if idl_type == 'Promise':
       return _promise_to_future
     if conversion:
-      if conversion.function_name in ('_convertNativeToDart_Window', '_convertNativeToDart_EventTarget', 'convertNativeToDart_DateTime', 'convertNativeToDart_ImageData'):
+      if conversion.function_name in ('convertNativeToDart_DateTime', 'convertNativeToDart_ImageData'):
         return None
     return conversion
 
diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
index 97487bf..faa1ec0 100644
--- a/tools/dom/src/native_DOMImplementation.dart
+++ b/tools/dom/src/native_DOMImplementation.dart
@@ -5,12 +5,12 @@
 part of html;
 
 class _Property {
-  _Property(this.name) :
-      _hasValue = false,
-      writable = false,
-      isMethod = false,
-      isOwn = true,
-      wasThrown = false;
+  _Property(this.name)
+      : _hasValue = false,
+        writable = false,
+        isMethod = false,
+        isOwn = true,
+        wasThrown = false;
 
   bool get hasValue => _hasValue;
   get value => _value;
@@ -30,6 +30,203 @@
   bool wasThrown;
 }
 
+/**
+ * Manager for navigating between libraries from the devtools console.
+ */
+class _LibraryManager {
+  /**
+   * Current active library
+   */
+  static var _currentLibrary;
+  static var _validCache = false;
+
+  static List<Uri> _libraryUris;
+
+  // List of all maps to check to determine if there is an exact match.
+  static Map<String, List<Uri>> _fastPaths;
+
+  static void _addFastPath(String key, Uri uri) {
+    _fastPaths.putIfAbsent(key, () => <Uri>[]).add(uri);
+  }
+
+  static cache() {
+    if (_validCache) return;
+    _validCache = true;
+    _libraryUris = <Uri>[];
+    _fastPaths = new Map<String, List<Uri>>();
+    var system = currentMirrorSystem();
+    system.libraries.forEach((uri, library) {
+      _libraryUris.add(uri);
+      _addFastPath(uri.toString(), uri);
+      _addFastPath(MirrorSystem.getName(library.simpleName), uri);
+    });
+  }
+
+  static String get currentLibrary {
+    if (_currentLibrary == null) {
+      _currentLibrary =
+          currentMirrorSystem().isolate.rootLibrary.uri.toString();
+    }
+    return _currentLibrary;
+  }
+
+  /**
+   * Find libraries matching a given name.
+   *
+   * Uses heuristics to only return a single match when the user intent is
+   * generally unambiguous.
+   */
+  static List<Uri> findMatches(String name) {
+    cache();
+    var nameAsFile = name.endsWith('.dart') ? name : '${name}.dart';
+    // Perfect match first.
+    var fastPatchMatches = _fastPaths[name];
+    if (fastPatchMatches != null) {
+      return fastPatchMatches.toList();
+    }
+
+    // Exact match for file path.
+    var matches = new LinkedHashSet<Uri>();
+    for (var uri in _libraryUris) {
+      if (uri.path == name || uri.path == nameAsFile) matches.add(uri);
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Exact match for file name.
+    if (name != nameAsFile) {
+      for (var uri in _libraryUris) {
+        if (uri.pathSegments.isNotEmpty &&
+            (uri.pathSegments.last == nameAsFile)) {
+          matches.add(uri);
+        }
+      }
+      if (matches.isNotEmpty) return matches.toList();
+    }
+
+    for (var uri in _libraryUris) {
+      if (uri.pathSegments.isNotEmpty && (uri.pathSegments.last == name)) {
+        matches.add(uri);
+      }
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on path.
+    for (var uri in _libraryUris) {
+      if (uri.path.contains(name)) {
+        matches.add(uri);
+      }
+    }
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on entire uri.
+    for (var uri in _libraryUris) {
+      if (uri.toString().contains(name)) {
+        matches.add(uri);
+      }
+    }
+
+    if (matches.isNotEmpty) return matches.toList();
+
+    // Partial match on entire uri ignoring case.
+    name = name.toLowerCase();
+    for (var uri in _libraryUris) {
+      if (uri.toString().toLowerCase().contains(name)) {
+        matches.add(uri);
+      }
+    }
+    return matches.toList();
+  }
+
+  static setLibrary([String name]) {
+    // Bust cache in case library list has changed. Ideally we would listen for
+    // when libraries are loaded and invalidate based on that.
+    _validCache = false;
+    cache();
+    if (name == null) {
+      window.console
+        ..group("Current library: $_currentLibrary")
+        ..groupCollapsed("All libraries:");
+      _listLibraries();
+      window.console..groupEnd()..groupEnd();
+      return;
+    }
+    var matches = findMatches(name);
+    if (matches.length != 1) {
+      if (matches.length > 1) {
+        window.console.warn("Ambiguous library name: $name");
+      }
+      showMatches(name, matches);
+      return;
+    }
+    _currentLibrary = matches.first.toString();
+    window.console.log("Set library to $_currentLibrary");
+  }
+
+  static getLibrary() {
+    return currentLibrary;
+  }
+
+  static List<Uri> _sortUris(Iterable<Uri> uris) {
+    return (uris.toList())
+      ..sort((Uri a, Uri b) {
+        if (a.scheme != b.scheme) {
+          if (a.scheme == 'dart') return -1;
+          if (b.scheme == 'dart') return 1;
+          return a.scheme.compareTo(b.scheme);
+        }
+        return a.toString().compareTo(b.toString());
+      });
+  }
+
+  static void listLibraries() {
+    _validCache = false;
+    cache();
+    _listLibraries();
+  }
+
+  static void _listLibraries() {
+    window.console.log(_sortUris(_libraryUris).join("\n"));
+  }
+
+  // Workaround to allow calling console.log with an arbitrary number of
+  // arguments.
+  static void _log(List<String> args) {
+    js.JsNative.callMethod(window.console, 'log', args);
+  }
+
+  static showMatches(String key, Iterable<Uri> uris) {
+    var boldPairs = [];
+    var sb = new StringBuffer();
+    if (uris.isEmpty) {
+      window.console.group("All libraries:");
+      _listLibraries();
+      window.console
+        ..groupEnd()
+        ..error("No library names or URIs match '$key'");
+      return;
+    }
+    sb.write("${uris.length} matches\n");
+    var lowerCaseKey = key.toLowerCase();
+    for (var uri in uris) {
+      var txt = uri.toString();
+      int index = txt.toLowerCase().indexOf(lowerCaseKey);
+      if (index != -1) {
+        // %c enables styling console log messages with css
+        // specified at the end of the console.
+        sb..write(txt.substring(0, index))..write('%c');
+        var matchEnd = index + key.length;
+        sb
+          ..write(txt.substring(index, matchEnd))
+          ..write('%c')
+          ..write(txt.substring(matchEnd))
+          ..write('\n');
+        boldPairs..add('font-weight: bold')..add('font-weight: normal');
+      }
+    }
+    _log([sb.toString()]..addAll(boldPairs));
+  }
+}
+
 class _ConsoleVariables {
   Map<String, Object> _data = new Map<String, Object>();
 
@@ -75,15 +272,15 @@
 }
 
 class _MethodTrampoline extends _Trampoline {
-  _MethodTrampoline(ObjectMirror receiver, MethodMirror methodMirror,
-      Symbol selector) :
-      super(receiver, methodMirror, selector);
+  _MethodTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
 
   noSuchMethod(Invocation msg) {
     if (msg.memberName != #call) return super.noSuchMethod(msg);
-    return _receiver.invoke(_selector,
-                            msg.positionalArguments,
-                            msg.namedArguments).reflectee;
+    return _receiver
+        .invoke(_selector, msg.positionalArguments, msg.namedArguments)
+        .reflectee;
   }
 }
 
@@ -91,9 +288,9 @@
  * Invocation trampoline class used to closurize getters.
  */
 class _GetterTrampoline extends _Trampoline {
-  _GetterTrampoline(ObjectMirror receiver, MethodMirror methodMirror,
-      Symbol selector) :
-      super(receiver, methodMirror, selector);
+  _GetterTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
 
   call() => _receiver.getField(_selector).reflectee;
 }
@@ -102,9 +299,9 @@
  * Invocation trampoline class used to closurize setters.
  */
 class _SetterTrampoline extends _Trampoline {
-  _SetterTrampoline(ObjectMirror receiver, MethodMirror methodMirror,
-      Symbol selector) :
-      super(receiver, methodMirror, selector);
+  _SetterTrampoline(
+      ObjectMirror receiver, MethodMirror methodMirror, Symbol selector)
+      : super(receiver, methodMirror, selector);
 
   call(value) {
     _receiver.setField(_selector, value);
@@ -117,7 +314,7 @@
   static DateTime doubleToDateTime(double dateTime) {
     try {
       return new DateTime.fromMillisecondsSinceEpoch(dateTime.toInt());
-    } catch(_) {
+    } catch (_) {
       // TODO(antonnm): treat exceptions properly in bindings and
       // find out how to treat NaNs.
       return null;
@@ -162,7 +359,10 @@
 
   static Map createMap() => {};
 
-  static parseJson(String jsonSource) => const JsonDecoder().convert(jsonSource);
+  static parseJson(String jsonSource) =>
+      const JsonDecoder().convert(jsonSource);
+
+  static String getLibraryUrl() => _LibraryManager.currentLibrary;
 
   static makeUnimplementedError(String fileName, int lineNo) {
     return new UnsupportedError('[info: $fileName:$lineNo]');
@@ -187,7 +387,8 @@
     return element;
   }
 
-  static forwardingPrint(String message) => _blink.Blink_Utils.forwardingPrint(message);
+  static forwardingPrint(String message) =>
+      _blink.Blink_Utils.forwardingPrint(message);
   static void spawnDomHelper(Function f, int replyTo) =>
       _blink.Blink_Utils.spawnDomHelper(f, replyTo);
 
@@ -220,8 +421,8 @@
    */
   static Map<String, dynamic> createLocalVariablesMap(List localVariables) {
     var map = {};
-    for (int i = 0; i < localVariables.length; i+=2) {
-      map[stripMemberName(localVariables[i])] = localVariables[i+1];
+    for (int i = 0; i < localVariables.length; i += 2) {
+      map[stripMemberName(localVariables[i])] = localVariables[i + 1];
     }
     return map;
   }
@@ -250,8 +451,8 @@
    * [_consoleTempVariables, 40, 2, someValue, someOtherValue]]
    * </code>
    */
-  static List wrapExpressionAsClosure(String expression, List locals,
-      bool includeCommandLineAPI) {
+  static List wrapExpressionAsClosure(
+      String expression, List locals, bool includeCommandLineAPI) {
     var args = {};
     var sb = new StringBuffer("(");
     addArg(arg, value) {
@@ -286,26 +487,24 @@
       final _SET_VARIABLE = new RegExp("^(\\s*)(\\w+)(\\s*=)");
       // Match trailing semicolons.
       final _ENDING_SEMICOLONS = new RegExp("(;\\s*)*\$");
-      expression = expression.replaceAllMapped(_VARIABLE_DECLARATION,
-          (match) {
-            var variableName = match[2];
-            // Set the console variable if it isn't already set.
-            if (!_consoleTempVariables._data.containsKey(variableName)) {
-              _consoleTempVariables._data[variableName] = null;
-            }
-            return "${match[1]}\$consoleVariables.${variableName}";
-          });
+      expression = expression.replaceAllMapped(_VARIABLE_DECLARATION, (match) {
+        var variableName = match[2];
+        // Set the console variable if it isn't already set.
+        if (!_consoleTempVariables._data.containsKey(variableName)) {
+          _consoleTempVariables._data[variableName] = null;
+        }
+        return "${match[1]}\$consoleVariables.${variableName}";
+      });
 
-      expression = expression.replaceAllMapped(_SET_VARIABLE,
-          (match) {
-            var variableName = match[2];
-            // Only rewrite if the name matches an existing console variable.
-            if (_consoleTempVariables._data.containsKey(variableName)) {
-              return "${match[1]}\$consoleVariables.${variableName}${match[3]}";
-            } else {
-              return match[0];
-            }
-          });
+      expression = expression.replaceAllMapped(_SET_VARIABLE, (match) {
+        var variableName = match[2];
+        // Only rewrite if the name matches an existing console variable.
+        if (_consoleTempVariables._data.containsKey(variableName)) {
+          return "${match[1]}\$consoleVariables.${variableName}${match[3]}";
+        } else {
+          return match[0];
+        }
+      });
 
       // We only allow dart expressions not Dart statements. Silently remove
       // trailing semicolons the user might have added by accident to reduce the
@@ -314,8 +513,8 @@
     }
 
     if (locals != null) {
-      for (int i = 0; i < locals.length; i+= 2) {
-        addArg(locals[i], locals[i+1]);
+      for (int i = 0; i < locals.length; i += 2) {
+        addArg(locals[i], locals[i + 1]);
       }
     }
     // Inject all the already defined console variables.
@@ -330,12 +529,12 @@
     return [sb.toString(), args.values.toList(growable: false)];
   }
 
-  static String _getShortSymbolName(Symbol symbol,
-                                    DeclarationMirror declaration) {
+  static String _getShortSymbolName(
+      Symbol symbol, DeclarationMirror declaration) {
     var name = MirrorSystem.getName(symbol);
     if (declaration is MethodMirror) {
-      if (declaration.isSetter && name[name.length-1] == "=") {
-        return name.substring(0, name.length-1);
+      if (declaration.isSetter && name[name.length - 1] == "=") {
+        return name.substring(0, name.length - 1);
       }
       if (declaration.isConstructor) {
         return name.substring(name.indexOf('.') + 1);
@@ -345,6 +544,38 @@
   }
 
   /**
+   * Handle special console commands such as $lib and $libs that should not be
+   * evaluated as Dart expressions and instead should be interpreted directly.
+   * Commands supported:
+   * library <-- shows the current library and lists all libraries.
+   * library "library_uri" <-- select a specific library
+   * library "library_uri_fragment"
+   */
+  static bool maybeHandleSpecialConsoleCommand(String expression) {
+    expression = expression.trim();
+    var setLibraryCommand = r'library ';
+    if (expression == r'library') {
+      _LibraryManager.setLibrary();
+      return true;
+    }
+    if (expression.startsWith(setLibraryCommand)) {
+      expression = expression.substring(setLibraryCommand.length);
+      if (expression.length >= 2) {
+        String start = expression[0];
+        String end = expression[expression.length - 1];
+        // TODO(jacobr): maybe we should require quotes.
+        if ((start == "'" && end == "'") || (start == '"' && end == '"')) {
+          expression = expression.substring(1, expression.length - 1);
+        }
+      }
+
+      _LibraryManager.setLibrary(expression);
+      return true;
+    }
+    return false;
+  }
+
+  /**
    * Returns a list of completions to use if the receiver is o.
    */
   static List<String> getCompletions(o) {
@@ -354,19 +585,17 @@
       map.forEach((symbol, mirror) {
         if (mirror.isStatic == isStatic && !mirror.isPrivate) {
           var name = MirrorSystem.getName(symbol);
-          if (mirror is MethodMirror && mirror.isSetter)
-            name = name.substring(0, name.length - 1);
+          if (mirror is MethodMirror && mirror.isSetter) name =
+              name.substring(0, name.length - 1);
           completions.add(name);
         }
       });
     }
 
     addForClass(ClassMirror mirror, bool isStatic) {
-      if (mirror == null)
-        return;
+      if (mirror == null) return;
       addAll(mirror.declarations, isStatic);
-      if (mirror.superclass != null)
-        addForClass(mirror.superclass, isStatic);
+      if (mirror.superclass != null) addForClass(mirror.superclass, isStatic);
       for (var interface in mirror.superinterfaces) {
         addForClass(interface, isStatic);
       }
@@ -384,8 +613,8 @@
    * Adds all candidate String completitions from [declarations] to [output]
    * filtering based on [staticContext] and [includePrivate].
    */
-  static void _getCompletionsHelper(ClassMirror classMirror,
-      bool staticContext, LibraryMirror libraryMirror, Set<String> output) {
+  static void _getCompletionsHelper(ClassMirror classMirror, bool staticContext,
+      LibraryMirror libraryMirror, Set<String> output) {
     bool includePrivate = libraryMirror == classMirror.owner;
     classMirror.declarations.forEach((symbol, declaration) {
       if (!includePrivate && declaration.isPrivate) return;
@@ -408,12 +637,11 @@
 
     if (!staticContext) {
       for (var interface in classMirror.superinterfaces) {
-        _getCompletionsHelper(interface, staticContext,
-            libraryMirror, output);
+        _getCompletionsHelper(interface, staticContext, libraryMirror, output);
       }
       if (classMirror.superclass != null) {
-        _getCompletionsHelper(classMirror.superclass, staticContext,
-            libraryMirror, output);
+        _getCompletionsHelper(
+            classMirror.superclass, staticContext, libraryMirror, output);
       }
     }
   }
@@ -480,13 +708,13 @@
   }
 
   static final SIDE_EFFECT_FREE_LIBRARIES = new Set<String>()
-      ..add('dart:html')
-      ..add('dart:indexed_db')
-      ..add('dart:svg')
-      ..add('dart:typed_data')
-      ..add('dart:web_audio')
-      ..add('dart:web_gl')
-      ..add('dart:web_sql');
+    ..add('dart:html')
+    ..add('dart:indexed_db')
+    ..add('dart:svg')
+    ..add('dart:typed_data')
+    ..add('dart:web_audio')
+    ..add('dart:web_gl')
+    ..add('dart:web_sql');
 
   static LibraryMirror _getLibrary(MethodMirror methodMirror) {
     var owner = methodMirror.owner;
@@ -505,8 +733,8 @@
    * In the future we should consider adding an annotation to tag getters
    * in user libraries as side effect free.
    */
-  static bool _isSideEffectFreeGetter(MethodMirror methodMirror,
-      LibraryMirror libraryMirror) {
+  static bool _isSideEffectFreeGetter(
+      MethodMirror methodMirror, LibraryMirror libraryMirror) {
     // This matches JavaScript behavior. We should consider displaying
     // getters for all dart platform libraries rather than just the DOM
     // libraries.
@@ -518,11 +746,11 @@
    * Whether we should treat a property as a field for the purposes of the
    * debugger.
    */
-  static bool treatPropertyAsField(MethodMirror methodMirror,
-      LibraryMirror libraryMirror) {
+  static bool treatPropertyAsField(
+      MethodMirror methodMirror, LibraryMirror libraryMirror) {
     return (methodMirror.isGetter || methodMirror.isSetter) &&
-          (methodMirror.isSynthetic ||
-              _isSideEffectFreeGetter(methodMirror,libraryMirror));
+        (methodMirror.isSynthetic ||
+            _isSideEffectFreeGetter(methodMirror, libraryMirror));
   }
 
   // TODO(jacobr): generate more concise function descriptions instead of
@@ -539,27 +767,36 @@
 
   static List getInvocationTrampolineDetails(_Trampoline method) {
     var loc = method._methodMirror.location;
-    return [loc.line, loc.column, loc.sourceUri.toString(),
-        MirrorSystem.getName(method._selector)];
+    return [
+      loc.line,
+      loc.column,
+      loc.sourceUri.toString(),
+      MirrorSystem.getName(method._selector)
+    ];
   }
 
-  static List getLibraryProperties(String libraryUrl, bool ownProperties,
-      bool accessorPropertiesOnly) {
+  static List getLibraryProperties(
+      String libraryUrl, bool ownProperties, bool accessorPropertiesOnly) {
     var properties = new Map<String, _Property>();
     var libraryMirror = getLibraryMirror(libraryUrl);
-    _addInstanceMirrors(libraryMirror, libraryMirror,
+    _addInstanceMirrors(
+        libraryMirror,
+        libraryMirror,
         libraryMirror.declarations,
-        ownProperties, accessorPropertiesOnly, false, false,
+        ownProperties,
+        accessorPropertiesOnly,
+        false,
+        false,
         properties);
     if (!accessorPropertiesOnly) {
       // We need to add class properties for all classes in the library.
       libraryMirror.declarations.forEach((symbol, declarationMirror) {
         if (declarationMirror is ClassMirror) {
           var name = MirrorSystem.getName(symbol);
-          if (declarationMirror.hasReflectedType
-              && !properties.containsKey(name)) {
+          if (declarationMirror.hasReflectedType &&
+              !properties.containsKey(name)) {
             properties[name] = new _Property(name)
-                ..value = declarationMirror.reflectedType;
+              ..value = declarationMirror.reflectedType;
           }
         }
       });
@@ -567,34 +804,44 @@
     return packageProperties(properties);
   }
 
-  static List getObjectProperties(o, bool ownProperties,
-      bool accessorPropertiesOnly) {
+  static List getObjectProperties(
+      o, bool ownProperties, bool accessorPropertiesOnly) {
     var properties = new Map<String, _Property>();
     var names = new Set<String>();
     var objectMirror = reflect(o);
     var classMirror = objectMirror.type;
-    _addInstanceMirrors(objectMirror, classMirror.owner,
+    _addInstanceMirrors(
+        objectMirror,
+        classMirror.owner,
         classMirror.instanceMembers,
-        ownProperties, accessorPropertiesOnly, false, true,
+        ownProperties,
+        accessorPropertiesOnly,
+        false,
+        true,
         properties);
     return packageProperties(properties);
   }
 
-  static List getObjectClassProperties(o, bool ownProperties,
-      bool accessorPropertiesOnly) {
+  static List getObjectClassProperties(
+      o, bool ownProperties, bool accessorPropertiesOnly) {
     var properties = new Map<String, _Property>();
     var objectMirror = reflect(o);
     var classMirror = objectMirror.type;
-    _addInstanceMirrors(objectMirror, classMirror.owner,
+    _addInstanceMirrors(
+        objectMirror,
+        classMirror.owner,
         classMirror.instanceMembers,
-        ownProperties, accessorPropertiesOnly, true, false,
+        ownProperties,
+        accessorPropertiesOnly,
+        true,
+        false,
         properties);
     _addStatics(classMirror, properties, accessorPropertiesOnly);
     return packageProperties(properties);
   }
 
-  static List getClassProperties(Type t, bool ownProperties,
-      bool accessorPropertiesOnly) {
+  static List getClassProperties(
+      Type t, bool ownProperties, bool accessorPropertiesOnly) {
     var properties = new Map<String, _Property>();
     var classMirror = reflectClass(t);
     _addStatics(classMirror, properties, accessorPropertiesOnly);
@@ -602,8 +849,7 @@
   }
 
   static void _addStatics(ClassMirror classMirror,
-                          Map<String, _Property> properties,
-                          bool accessorPropertiesOnly) {
+      Map<String, _Property> properties, bool accessorPropertiesOnly) {
     var libraryMirror = classMirror.owner;
     classMirror.declarations.forEach((symbol, declaration) {
       var name = _getShortSymbolName(symbol, declaration);
@@ -612,8 +858,8 @@
         if (accessorPropertiesOnly) return;
         if (!declaration.isStatic) return;
         properties.putIfAbsent(name, () => new _Property(name))
-            ..value = classMirror.getField(symbol).reflectee
-            ..writable = !declaration.isFinal && !declaration.isConst;
+          ..value = classMirror.getField(symbol).reflectee
+          ..writable = !declaration.isFinal && !declaration.isConst;
       } else if (declaration is MethodMirror) {
         MethodMirror methodMirror = declaration;
         // FIXMEDART: should we display constructors?
@@ -635,31 +881,35 @@
     });
   }
 
-  static void _fillMethodMirrorProperty(LibraryMirror libraryMirror,
-        methodOwner, MethodMirror methodMirror, Symbol symbol,
-        bool accessorPropertiesOnly, _Property property) {
+  static void _fillMethodMirrorProperty(
+      LibraryMirror libraryMirror,
+      methodOwner,
+      MethodMirror methodMirror,
+      Symbol symbol,
+      bool accessorPropertiesOnly,
+      _Property property) {
     if (methodMirror.isRegularMethod) {
       property
-          ..value = new _MethodTrampoline(methodOwner, methodMirror, symbol)
-          ..isMethod = true;
+        ..value = new _MethodTrampoline(methodOwner, methodMirror, symbol)
+        ..isMethod = true;
     } else if (methodMirror.isGetter) {
       if (treatPropertyAsField(methodMirror, libraryMirror)) {
         try {
           property.value = methodOwner.getField(symbol).reflectee;
         } catch (e) {
           property
-              ..wasThrown = true
-              ..value = e;
+            ..wasThrown = true
+            ..value = e;
         }
       } else if (accessorPropertiesOnly) {
-        property.getter = new _GetterTrampoline(methodOwner,
-            methodMirror, symbol);
+        property.getter =
+            new _GetterTrampoline(methodOwner, methodMirror, symbol);
       }
     } else if (methodMirror.isSetter) {
       if (accessorPropertiesOnly &&
           !treatPropertyAsField(methodMirror, libraryMirror)) {
-        property.setter = new _SetterTrampoline(methodOwner,
-            methodMirror, MirrorSystem.getSymbol(property.name, libraryMirror));
+        property.setter = new _SetterTrampoline(methodOwner, methodMirror,
+            MirrorSystem.getSymbol(property.name, libraryMirror));
       }
       property.writable = true;
     }
@@ -679,8 +929,10 @@
       ObjectMirror objectMirror,
       LibraryMirror libraryMirror,
       Map<Symbol, Mirror> declarations,
-      bool ownProperties, bool accessorPropertiesOnly,
-      bool hideFields, bool hideMethods,
+      bool ownProperties,
+      bool accessorPropertiesOnly,
+      bool hideFields,
+      bool hideMethods,
       Map<String, _Property> properties) {
     declarations.forEach((symbol, declaration) {
       if (declaration is TypedefMirror || declaration is ClassMirror) return;
@@ -691,7 +943,8 @@
               treatPropertyAsField(declaration, libraryMirror));
       if ((isField && hideFields) || (hideMethods && !isField)) return;
       if (accessorPropertiesOnly) {
-        if (declaration is VariableMirror || declaration.isRegularMethod ||
+        if (declaration is VariableMirror ||
+            declaration.isRegularMethod ||
             isField) {
           return;
         }
@@ -703,8 +956,8 @@
       var property = properties.putIfAbsent(name, () => new _Property(name));
       if (declaration is VariableMirror) {
         property
-            ..value = objectMirror.getField(symbol).reflectee
-            ..writable = !declaration.isFinal && !declaration.isConst;
+          ..value = objectMirror.getField(symbol).reflectee
+          ..writable = !declaration.isFinal && !declaration.isConst;
         return;
       }
       _fillMethodMirrorProperty(libraryMirror, objectMirror, declaration,
@@ -719,15 +972,17 @@
   static List packageProperties(Map<String, _Property> properties) {
     var ret = [];
     for (var property in properties.values) {
-      ret.addAll([property.name,
-                  property.setter,
-                  property.getter,
-                  property.value,
-                  property.hasValue,
-                  property.writable,
-                  property.isMethod,
-                  property.isOwn,
-                  property.wasThrown]);
+      ret.addAll([
+        property.name,
+        property.setter,
+        property.getter,
+        property.value,
+        property.hasValue,
+        property.writable,
+        property.isMethod,
+        property.isOwn,
+        property.wasThrown
+      ]);
     }
     return ret;
   }
@@ -746,9 +1001,10 @@
         LibraryMirror library = classMirror.owner;
         if (!attemptedLibraries.contains(library)) {
           try {
-            return objectMirror.getField(
-                MirrorSystem.getSymbol(propertyName, library)).reflectee;
-          } catch (e) { }
+            return objectMirror
+                .getField(MirrorSystem.getSymbol(propertyName, library))
+                .reflectee;
+          } catch (e) {}
           attemptedLibraries.add(library);
         }
         classMirror = classMirror.superclass;
@@ -756,8 +1012,9 @@
       return null;
     }
     try {
-      return objectMirror.getField(
-          MirrorSystem.getSymbol(propertyName)).reflectee;
+      return objectMirror
+          .getField(MirrorSystem.getSymbol(propertyName))
+          .reflectee;
     } catch (e) {
       return null;
     }
@@ -769,25 +1026,25 @@
    */
   static List consoleApi(host) {
     return [
-        "inspect",
-        (o) {
-          js.JsNative.callMethod(host, "_inspect", [o]);
-          return o;
-        },
-        "dir",
-        window.console.dir,
-        "dirxml",
-        window.console.dirxml
-        // FIXME: add copy method.
-        ];
+      "inspect",
+      (o) {
+        js.JsNative.callMethod(host, "_inspect", [o]);
+        return o;
+      },
+      "dir",
+      window.console.dir,
+      "dirxml",
+      window.console.dirxml
+      // FIXME: add copy method.
+    ];
   }
 
   static List getMapKeyList(Map map) => map.keys.toList();
 
   static bool isNoSuchMethodError(obj) => obj is NoSuchMethodError;
 
-  static void register(Document document, String tag, Type type,
-      String extendsTagName) {
+  static void register(
+      Document document, String tag, Type type, String extendsTagName) {
     var nativeClass = _validateCustomType(type);
 
     if (extendsTagName == null) {
@@ -801,70 +1058,90 @@
   }
 
   static void _register(Document document, String tag, Type customType,
-    String extendsTagName) => _blink.Blink_Utils.register(document, tag, customType, extendsTagName);
+          String extendsTagName) =>
+      _blink.Blink_Utils.register(document, tag, customType, extendsTagName);
 
   static Element createElement(Document document, String tagName) =>
       _blink.Blink_Utils.createElement(document, tagName);
 }
 
-// TODO(jacobr): this seems busted. I believe we are actually
-// giving users real windows for opener, parent, top, etc.
-// Or worse, we are probaly returning a raw JSObject.
-class _DOMWindowCrossFrame extends DartHtmlDomObject implements
-    WindowBase {
-
+class _DOMWindowCrossFrame extends DartHtmlDomObject implements WindowBase {
   _DOMWindowCrossFrame.internal();
-  
-  static _createSafe(win) => _blink.Blink_Utils.setInstanceInterceptor(win, _DOMWindowCrossFrame);
+
+  static _createSafe(win) {
+    if (identical(win, window)) {
+      // The current Window object is the only window object that should not
+      // use _DOMWindowCrossFrame.
+      return window;
+    }
+    return win is _DOMWindowCrossFrame ? win : _blink.Blink_Utils.setInstanceInterceptor(win, _DOMWindowCrossFrame);
+  }
 
   // Fields.
-  HistoryBase get history => _blink.Blink_DOMWindowCrossFrame.get_history(this);
-  LocationBase get location => _blink.Blink_DOMWindowCrossFrame.get_location(this);
-  bool get closed => _blink.Blink_DOMWindowCrossFrame.get_closed(this);
-  WindowBase get opener => _blink.Blink_DOMWindowCrossFrame.get_opener(this);
-  WindowBase get parent => _blink.Blink_DOMWindowCrossFrame.get_parent(this);
-  WindowBase get top => _blink.Blink_DOMWindowCrossFrame.get_top(this);
+  HistoryBase get history {
+    var history =  _blink.BlinkWindow.instance.history_Getter_(this);
+    return history is _HistoryCrossFrame ? history : _blink.Blink_Utils.setInstanceInterceptor(history, _HistoryCrossFrame);
+  }
+
+  LocationBase get location {
+    var location = _blink.BlinkWindow.instance.location_Getter_(this);
+    return location is _LocationCrossFrame ? location : _blink.Blink_Utils.setInstanceInterceptor(location, _LocationCrossFrame);
+  }
+
+  bool get closed => _blink.BlinkWindow.instance.closed_Getter_(this);
+  WindowBase get opener => _convertNativeToDart_Window(_blink.BlinkWindow.instance.opener_Getter_(this));
+  WindowBase get parent => _convertNativeToDart_Window(_blink.BlinkWindow.instance.parent_Getter_(this));
+  WindowBase get top => _convertNativeToDart_Window(_blink.BlinkWindow.instance.top_Getter_(this));
 
   // Methods.
-  void close() => _blink.Blink_DOMWindowCrossFrame.close(this);
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) =>
-      _blink.Blink_DOMWindowCrossFrame.postMessage(this,
-         convertDartToNative_SerializedScriptValue(message), targetOrigin, messagePorts);
+  void close() => _blink.BlinkWindow.instance.close_Callback_0_(this);
+  void postMessage(Object message, String targetOrigin, [List<MessagePort> transfer]) => _blink.BlinkWindow.instance.postMessage_Callback_3_(this, convertDartToNative_SerializedScriptValue(message), targetOrigin, transfer);
 
   // Implementation support.
   String get typeName => "Window";
 
   // TODO(efortuna): Remove this method. dartbug.com/16814
   Events get on => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+      'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
-  void _addEventListener([String type, EventListener listener, bool useCapture])
-      => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+  void _addEventListener(
+          [String type, EventListener listener, bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
-  void addEventListener(String type, EventListener listener, [bool useCapture])
-      => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+  void addEventListener(String type, EventListener listener,
+          [bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
   bool dispatchEvent(Event event) => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+      'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
-  void _removeEventListener([String type, EventListener listener,
-      bool useCapture]) => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+  void _removeEventListener(
+          [String type, EventListener listener, bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
   // TODO(efortuna): Remove this method. dartbug.com/16814
   void removeEventListener(String type, EventListener listener,
-      [bool useCapture]) => throw new UnsupportedError(
-    'You can only attach EventListeners to your own window.');
+          [bool useCapture]) =>
+      throw new UnsupportedError(
+          'You can only attach EventListeners to your own window.');
 }
 
 class _HistoryCrossFrame extends DartHtmlDomObject implements HistoryBase {
   _HistoryCrossFrame.internal();
 
   // Methods.
-  void back() => _blink.Blink_HistoryCrossFrame.back(this);
-  void forward() => _blink.Blink_HistoryCrossFrame.forward(this);
-  void go(int distance) => _blink.Blink_HistoryCrossFrame.go(this, distance);
+  void back() => _blink.BlinkHistory.instance.back_Callback_0_(this);
+  void forward() => _blink.BlinkHistory.instance.forward_Callback_0_(this);
+  void go([int delta]) {
+    if (delta != null) {
+      _blink.BlinkHistory.instance.go_Callback_1_(this, delta);
+      return;
+    }
+    _blink.BlinkHistory.instance.go_Callback_0_(this);
+    return;
+  }
 
   // Implementation support.
   String get typeName => "History";
@@ -874,7 +1151,7 @@
   _LocationCrossFrame.internal();
 
   // Fields.
-  set href(String h) => _blink.Blink_LocationCrossFrame.set_href(this, h);
+  set href(String value) => _blink.BlinkLocation.instance.href_Setter_(this, value);
 
   // Implementation support.
   String get typeName => "Location";
@@ -897,8 +1174,9 @@
   return completer.future;
 }
 
-Future<SendPort> _spawnDomHelper(Function f) =>
-    _makeSendPortFuture((portId) { _Utils.spawnDomHelper(f, portId); });
+Future<SendPort> _spawnDomHelper(Function f) => _makeSendPortFuture((portId) {
+      _Utils.spawnDomHelper(f, portId);
+    });
 
 final Future<SendPort> __HELPER_ISOLATE_PORT =
     _spawnDomHelper(_helperIsolateMain);
@@ -940,10 +1218,15 @@
     if (cmd == _NEW_TIMER) {
       final duration = new Duration(milliseconds: msg[1]);
       bool periodic = msg[2];
-      ping() { replyTo.send(_TIMER_PING); };
-      _TIMER_REGISTRY[replyTo] = periodic ?
-          new Timer.periodic(duration, (_) { ping(); }) :
-          new Timer(duration, ping);
+      ping() {
+        replyTo.send(_TIMER_PING);
+      }
+      ;
+      _TIMER_REGISTRY[replyTo] = periodic
+          ? new Timer.periodic(duration, (_) {
+              ping();
+            })
+          : new Timer(duration, ping);
     } else if (cmd == _CANCEL_TIMER) {
       _TIMER_REGISTRY.remove(replyTo).cancel();
     } else if (cmd == _PRINT) {
@@ -956,7 +1239,7 @@
 
 final _printClosure = (s) => window.console.log(s);
 final _pureIsolatePrintClosure = (s) {
-    _sendToHelperIsolate([_PRINT, s], null);
+  _sendToHelperIsolate([_PRINT, s], null);
 };
 
 final _forwardingPrintClosure = _Utils.forwardingPrint;
@@ -965,7 +1248,7 @@
 
 final _pureIsolateUriBaseClosure = () {
   throw new UnimplementedError("Uri.base on a background isolate "
-                               "is not supported in the browser");
+      "is not supported in the browser");
 };
 
 class _Timer implements Timer {
@@ -976,13 +1259,17 @@
   _Timer(int milliSeconds, void callback(Timer timer), bool repeating) {
     if (repeating) {
       _state = (window._setInterval(() {
-        callback(this);
-      }, milliSeconds) << 1) | _STATE_INTERVAL;
+                callback(this);
+              }, milliSeconds) <<
+              1) |
+          _STATE_INTERVAL;
     } else {
       _state = (window._setTimeout(() {
-        _state = null;
-        callback(this);
-      }, milliSeconds) << 1) | _STATE_TIMEOUT;
+                _state = null;
+                callback(this);
+              }, milliSeconds) <<
+              1) |
+          _STATE_TIMEOUT;
     }
   }
 
@@ -1002,8 +1289,8 @@
 
 get _timerFactoryClosure =>
     (int milliSeconds, void callback(Timer timer), bool repeating) {
-  return new _Timer(milliSeconds, callback, repeating);
-};
+      return new _Timer(milliSeconds, callback, repeating);
+    };
 
 class _PureIsolateTimer implements Timer {
   bool _isActive = true;
@@ -1043,7 +1330,7 @@
 
 get _pureIsolateTimerFactoryClosure =>
     ((int milliSeconds, void callback(Timer time), bool repeating) =>
-  new _PureIsolateTimer(milliSeconds, callback, repeating));
+        new _PureIsolateTimer(milliSeconds, callback, repeating));
 
 class _ScheduleImmediateHelper {
   MutationObserver _observer;
@@ -1082,13 +1369,12 @@
     new _ScheduleImmediateHelper();
 
 get _scheduleImmediateClosure => (void callback()) {
-  _scheduleImmediateHelper._schedule(callback);
-};
+      _scheduleImmediateHelper._schedule(callback);
+    };
 
 get _pureIsolateScheduleImmediateClosure => ((void callback()) =>
-  throw new UnimplementedError("scheduleMicrotask in background isolates "
-                               "are not supported in the browser"));
+    throw new UnimplementedError("scheduleMicrotask in background isolates "
+        "are not supported in the browser"));
 
 // Class for unsupported native browser 'DOM' objects.
-class _UnsupportedBrowserObject extends DartHtmlDomObject {
-}
+class _UnsupportedBrowserObject extends DartHtmlDomObject {}
diff --git a/tools/dom/templates/html/dartium/html_dartium.darttemplate b/tools/dom/templates/html/dartium/html_dartium.darttemplate
index c92c27e..e8a6a31 100644
--- a/tools/dom/templates/html/dartium/html_dartium.darttemplate
+++ b/tools/dom/templates/html/dartium/html_dartium.darttemplate
@@ -256,7 +256,40 @@
   return null;
 }
 
-// TODO(jacobr): it would be nice to place this in a consistent place for dart2js and dartium.
+// TODO(jacobr): it would be nice to place these conversion methods in a consistent place for dart2js and dartium.
+
+WindowBase _convertNativeToDart_Window(win) {
+  if (win == null) return null;
+  return _DOMWindowCrossFrame._createSafe(win);
+}
+
+EventTarget _convertNativeToDart_EventTarget(e) {
+  if (e == null) {
+    return null;
+  }
+  // Assume it's a Window if it contains the postMessage property.  It may be
+  // from a different frame - without a patched prototype - so we cannot
+  // rely on Dart type checking.
+  try {
+    if (js.JsNative.hasProperty(e, "postMessage")) {
+      var window = _DOMWindowCrossFrame._createSafe(e);
+      // If it's a native window.
+      if (window is EventTarget) {
+        return window;
+      }
+      return null;
+    }
+  } catch (err) {
+    print("Error calling _convertNativeToDart_EventTarget... $err");
+  }
+  return e;
+}
+
+EventTarget _convertDartToNative_EventTarget(e) {
+  // _DOMWindowCrossFrame uses an interceptor so we don't need to do anything unlike Dart2Js.
+  return e;
+}
+
 _convertNativeToDart_XHR_Response(o) {
   if (o is Document) {
     return o;
@@ -321,10 +354,6 @@
   }
 }
 
-// TODO(jacobr): we shouldn't be generating this call in the dart:html
-// bindings but we are.
-_convertDartToNative_EventTarget(target) => target;
-
 @Deprecated("Internal Use Only")
 Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
   var result = new Map();
diff --git a/tools/full-coverage.dart b/tools/full-coverage.dart
deleted file mode 100644
index d7ff76f..0000000
--- a/tools/full-coverage.dart
+++ /dev/null
@@ -1,507 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:async";
-import "dart:convert";
-import "dart:io";
-import "dart:isolate";
-
-import "package:args/args.dart";
-import "package:path/path.dart";
-
-/// [Environment] stores gathered arguments information.
-class Environment {
-  String sdkRoot;
-  String pkgRoot;
-  var input;
-  var output;
-  int workers;
-  bool prettyPrint = false;
-  bool lcov = false;
-  bool expectMarkers;
-  bool verbose;
-}
-
-/// [Resolver] resolves imports with respect to a given environment.
-class Resolver {
-  static const DART_PREFIX = "dart:";
-  static const PACKAGE_PREFIX = "package:";
-  static const FILE_PREFIX = "file://";
-  static const HTTP_PREFIX = "http://";
-
-  Map _env;
-  List failed = [];
-
-  Resolver(this._env);
-
-  /// Returns the absolute path wrt. to the given environment or null, if the
-  /// import could not be resolved.
-  resolve(String import) {
-    if (import.startsWith(DART_PREFIX)) {
-      if (_env["sdkRoot"] == null) {
-        // No sdk-root given, do not resolve dart: URIs.
-        return null;
-      }
-      var slashPos = import.indexOf("/");
-      var filePath;
-      if (slashPos != -1) {
-        var path = import.substring(DART_PREFIX.length, slashPos);
-        // Drop patch files, since we don't have their source in the compiled
-        // SDK.
-        if (path.endsWith("-patch")) {
-          failed.add(import);
-          return null;
-        }
-        // Canonicalize path. For instance: _collection-dev => _collection_dev.
-        path = path.replaceAll("-", "_");
-        filePath = "${_env["sdkRoot"]}"
-                   "/${path}${import.substring(slashPos, import.length)}";
-      } else {
-        // Resolve 'dart:something' to be something/something.dart in the SDK.
-        var lib = import.substring(DART_PREFIX.length, import.length);
-        filePath = "${_env["sdkRoot"]}/${lib}/${lib}.dart";
-      }
-      return filePath;
-    }
-    if (import.startsWith(PACKAGE_PREFIX)) {
-      if (_env["pkgRoot"] == null) {
-        // No package-root given, do not resolve package: URIs.
-        return null;
-      }
-      var filePath =
-          "${_env["pkgRoot"]}"
-          "/${import.substring(PACKAGE_PREFIX.length, import.length)}";
-      return filePath;
-    }
-    if (import.startsWith(FILE_PREFIX)) {
-      var filePath = fromUri(Uri.parse(import));
-      return filePath;
-    }
-    if (import.startsWith(HTTP_PREFIX)) {
-      return import;
-    }
-    // We cannot deal with anything else.
-    failed.add(import);
-    return null;
-  }
-}
-
-/// Converts the given hitmap to lcov format and appends the result to
-/// env.output.
-///
-/// Returns a [Future] that completes as soon as all map entries have been
-/// emitted.
-Future lcov(Map hitmap) {
-  var emitOne = (key) {
-    var v = hitmap[key];
-    StringBuffer entry = new StringBuffer();
-    entry.write("SF:${key}\n");
-    v.keys.toList()
-          ..sort()
-          ..forEach((k) {
-      entry.write("DA:${k},${v[k]}\n");
-    });
-    entry.write("end_of_record\n");
-    env.output.write(entry.toString());
-    return new Future.value(null);
-  };
-
-  return Future.forEach(hitmap.keys, emitOne);
-}
-
-/// Converts the given hitmap to a pretty-print format and appends the result
-/// to env.output.
-///
-/// Returns a [Future] that completes as soon as all map entries have been
-/// emitted.
-Future prettyPrint(Map hitMap, List failedLoads) {
-  var emitOne = (key) {
-    var v = hitMap[key];
-    var c = new Completer();
-    loadResource(key).then((lines) {
-      if (lines == null) {
-        failedLoads.add(key);
-        c.complete();
-        return;
-      }
-      env.output.write("${key}\n");
-      for (var line = 1; line <= lines.length; line++) {
-        String prefix = "       ";
-        if (v.containsKey(line)) {
-          prefix = v[line].toString();
-          StringBuffer b = new StringBuffer();
-          for (int i = prefix.length; i < 7; i++) {
-            b.write(" ");
-          }
-          b.write(prefix);
-          prefix = b.toString();
-        }
-        env.output.write("${prefix}|${lines[line-1]}\n");
-      }
-      c.complete();
-    });
-    return c.future;
-  };
-
-  return Future.forEach(hitMap.keys, emitOne);
-}
-
-/// Load an import resource and return a [Future] with a [List] of its lines.
-/// Returns [null] instead of a list if the resource could not be loaded.
-Future<List> loadResource(String import) {
-  if (import.startsWith("http")) {
-    Completer c = new Completer();
-    HttpClient client = new HttpClient();
-    client.getUrl(Uri.parse(import))
-        .then((HttpClientRequest request) {
-          return request.close();
-        })
-        .then((HttpClientResponse response) {
-          response.transform(new StringDecoder()).toList().then((data) {
-            c.complete(data);
-            httpClient.close();
-          });
-        })
-        .catchError((e) {
-          c.complete(null);
-        });
-    return c.future;
-  } else {
-    File f = new File(import);
-    return f.readAsLines()
-        .catchError((e) {
-          return new Future.value(null);
-        });
-  }
-}
-
-/// Creates a single hitmap from a raw json object. Throws away all entries that
-/// are not resolvable.
-Map createHitmap(String rawJson, Resolver resolver) {
-  Map<String, Map<int,int>> hitMap = {};
-
-  addToMap(source, line, count) {
-    if (!hitMap[source].containsKey(line)) {
-      hitMap[source][line] = 0;
-    }
-    hitMap[source][line] += count;
-  }
-
-  JSON.decode(rawJson)['coverage'].forEach((Map e) {
-    String source = resolver.resolve(e["source"]);
-    if (source == null) {
-      // Couldnt resolve import, so skip this entry.
-      return;
-    }
-    if (!hitMap.containsKey(source)) {
-      hitMap[source] = {};
-    }
-    var hits = e["hits"];
-    // hits is a flat array of the following format:
-    // [ <line|linerange>, <hitcount>,...]
-    // line: number.
-    // linerange: "<line>-<line>".
-    for (var i = 0; i < hits.length; i += 2) {
-      var k = hits[i];
-      if (k is num) {
-        // Single line.
-        addToMap(source, k, hits[i+1]);
-      }
-      if (k is String) {
-        // Linerange. We expand line ranges to actual lines at this point.
-        var splitPos = k.indexOf("-");
-        int start = int.parse(k.substring(0, splitPos));
-        int end = int.parse(k.substring(splitPos + 1, k.length));
-        for (var j = start; j <= end; j++) {
-          addToMap(source, j, hits[i+1]);
-        }
-      }
-    }
-  });
-  return hitMap;
-}
-
-/// Merges [newMap] into [result].
-mergeHitmaps(Map newMap, Map result) {
-  newMap.forEach((String file, Map v) {
-    if (result.containsKey(file)) {
-      v.forEach((int line, int cnt) {
-        if (result[file][line] == null) {
-          result[file][line] = cnt;
-        } else {
-          result[file][line] += cnt;
-        }
-      });
-    } else {
-      result[file] = v;
-    }
-  });
-}
-
-/// Given an absolute path absPath, this function returns a [List] of files
-/// are contained by it if it is a directory, or a [List] containing the file if
-/// it is a file.
-List filesToProcess(String absPath) {
-  var filePattern = new RegExp(r"^dart-cov-\d+-\d+.json$");
-  if (FileSystemEntity.isDirectorySync(absPath)) {
-    return new Directory(absPath).listSync(recursive: true)
-        .where((entity) => entity is File &&
-            filePattern.hasMatch(basename(entity.path)))
-        .toList();
-  }
-
-  return [new File(absPath)];
-}
-
-worker(WorkMessage msg) {
-  final start = new DateTime.now().millisecondsSinceEpoch;
-
-  var env = msg.environment;
-  List files = msg.files;
-  Resolver resolver = new Resolver(env);
-  var workerHitmap = {};
-  files.forEach((File fileEntry) {
-    // Read file sync, as it only contains 1 object.
-    String contents = fileEntry.readAsStringSync();
-    if (contents.length > 0) {
-      mergeHitmaps(createHitmap(contents, resolver), workerHitmap);
-    }
-  });
-
-  if (env["verbose"]) {
-    final end = new DateTime.now().millisecondsSinceEpoch;
-    print("${msg.workerName}: Finished processing ${files.length} files. "
-          "Took ${end - start} ms.");
-  }
-
-  msg.replyPort.send(new ResultMessage(workerHitmap, resolver.failed));
-}
-
-class WorkMessage {
-  final String workerName;
-  final Map environment;
-  final List files;
-  final SendPort replyPort;
-  WorkMessage(this.workerName, this.environment, this.files, this.replyPort);
-}
-
-class ResultMessage {
-  final hitmap;
-  final failedResolves;
-  ResultMessage(this.hitmap, this.failedResolves);
-}
-
-final env = new Environment();
-
-List<List> split(List list, int nBuckets) {
-  var buckets = new List(nBuckets);
-  var bucketSize = list.length ~/ nBuckets;
-  var leftover = list.length % nBuckets;
-  var taken = 0;
-  var start = 0;
-  for (int i = 0; i < nBuckets; i++) {
-    var end = (i < leftover) ? (start + bucketSize + 1) : (start + bucketSize);
-    buckets[i] = list.sublist(start, end);
-    taken += buckets[i].length;
-    start = end;
-  }
-  if (taken != list.length) throw "Error splitting";
-  return buckets;
-}
-
-Future<ResultMessage> spawnWorker(name, environment, files) {
-  RawReceivePort port = new RawReceivePort();
-  var completer = new Completer();
-  port.handler = ((ResultMessage msg) {
-    completer.complete(msg);
-    port.close();
-  });
-  var msg = new WorkMessage(name, environment, files, port.sendPort);
-  Isolate.spawn(worker, msg);
-  return completer.future;
-}
-
-main(List<String> arguments) {
-  parseArgs(arguments);
-
-  List files = filesToProcess(env.input);
-
-  List failedResolves = [];
-  List failedLoads = [];
-  Map globalHitmap = {};
-  int start = new DateTime.now().millisecondsSinceEpoch;
-
-  if (env.verbose) {
-    print("Environment:");
-    print("  # files: ${files.length}");
-    print("  # workers: ${env.workers}");
-    print("  sdk-root: ${env.sdkRoot}");
-    print("  package-root: ${env.pkgRoot}");
-  }
-
-  Map sharedEnv = {
-    "sdkRoot": env.sdkRoot,
-    "pkgRoot": env.pkgRoot,
-    "verbose": env.verbose,
-  };
-
-  // Create workers.
-  int workerId = 0;
-  var results = split(files, env.workers).map((workerFiles) {
-    var result = spawnWorker("Worker ${workerId++}", sharedEnv, workerFiles);
-    return result.then((ResultMessage message) {
-      mergeHitmaps(message.hitmap, globalHitmap);
-      failedResolves.addAll(message.failedResolves);
-    });
-  });
-
-  Future.wait(results).then((ignore) {
-    // All workers are done. Process the data.
-    if (env.verbose) {
-      final end = new DateTime.now().millisecondsSinceEpoch;
-      print("Done creating a global hitmap. Took ${end - start} ms.");
-    }
-
-    Future out;
-    if (env.prettyPrint) {
-      out = prettyPrint(globalHitmap, failedLoads);
-    }
-    if (env.lcov) {
-      out = lcov(globalHitmap);
-    }
-
-    out.then((_) {
-      env.output.close().then((_) {
-        if (env.verbose) {
-          final end = new DateTime.now().millisecondsSinceEpoch;
-          print("Done flushing output. Took ${end - start} ms.");
-        }
-      });
-
-      if (env.verbose) {
-        if (failedResolves.length > 0) {
-          print("Failed to resolve:");
-          failedResolves.toSet().forEach((e) {
-            print("  ${e}");
-          });
-        }
-        if (failedLoads.length > 0) {
-          print("Failed to load:");
-          failedLoads.toSet().forEach((e) {
-            print("  ${e}");
-          });
-        }
-      }
-    });
-  });
-}
-
-/// Checks the validity of the provided arguments. Does not initialize actual
-/// processing.
-parseArgs(List<String> arguments) {
-  var parser = new ArgParser();
-
-  parser.addOption("sdk-root", abbr: "s",
-                   help: "path to the SDK root");
-  parser.addOption("package-root", abbr: "p",
-                   help: "override path to the package root "
-                         "(default: inherited from dart)");
-  parser.addOption("in", abbr: "i",
-                   help: "input(s): may be file or directory");
-  parser.addOption("out", abbr: "o",
-                   help: "output: may be file or stdout",
-                   defaultsTo: "stdout");
-  parser.addOption("workers", abbr: "j",
-                   help: "number of workers",
-                   defaultsTo: "1");
-  parser.addFlag("pretty-print", abbr: "r",
-                 help: "convert coverage data to pretty print format",
-                 negatable: false);
-  parser.addFlag("lcov", abbr :"l",
-                 help: "convert coverage data to lcov format",
-                 negatable: false);
-  parser.addFlag("verbose", abbr :"v",
-                 help: "verbose output",
-                 negatable: false);
-  parser.addFlag("help", abbr: "h",
-                 help: "show this help",
-                 negatable: false);
-
-  var args = parser.parse(arguments);
-
-  printUsage() {
-    print("Usage: dart full-coverage.dart [OPTION...]\n");
-    print(parser.getUsage());
-  }
-
-  fail(String msg) {
-    print("\n$msg\n");
-    printUsage();
-    exit(1);
-  }
-
-  if (args["help"]) {
-    printUsage();
-    exit(0);
-  }
-
-  env.sdkRoot = args["sdk-root"];
-  if (env.sdkRoot == null) {
-    if (Platform.environment.containsKey("SDK_ROOT")) {
-      env.sdkRoot =
-        join(absolute(normalize(Platform.environment["SDK_ROOT"])), "lib");
-    }
-  } else {
-    env.sdkRoot = join(absolute(normalize(env.sdkRoot)), "lib");
-  }
-  if ((env.sdkRoot != null) && !FileSystemEntity.isDirectorySync(env.sdkRoot)) {
-    fail("Provided SDK root '${args["sdk-root"]}' is not a valid SDK "
-         "top-level directory");
-  }
-
-  env.pkgRoot = args["package-root"];
-  if (env.pkgRoot != null) {
-    var pkgRootUri = Uri.parse(env.pkgRoot);
-    if (pkgRootUri.scheme == "file") {
-      if (!FileSystemEntity.isDirectorySync(pkgRootUri.toFilePath())) {
-        fail("Provided package root '${args["package-root"]}' is not directory.");
-      }
-    }
-  } else {
-    env.pkgRoot = Platform.packageRoot;
-  }
-
-  if (args["in"] == null) {
-    fail("No input files given.");
-  } else {
-    env.input = absolute(normalize(args["in"]));
-    if (!FileSystemEntity.isDirectorySync(env.input) &&
-        !FileSystemEntity.isFileSync(env.input)) {
-      fail("Provided input '${args["in"]}' is neither a directory, nor a file.");
-    }
-  }
-
-  if (args["out"] == "stdout") {
-    env.output = stdout;
-  } else {
-    env.output = absolute(normalize(args["out"]));
-    env.output = new File(env.output).openWrite();
-  }
-
-  env.lcov = args["lcov"];
-  if (args["pretty-print"] && env.lcov) {
-    fail("Choose one of pretty-print or lcov output");
-  } else if (!env.lcov) {
-    // Use pretty-print either explicitly or by default.
-    env.prettyPrint = true;
-  }
-
-  try {
-    env.workers = int.parse("${args["workers"]}");
-  } catch (e) {
-    fail("Invalid worker count: $e");
-  }
-
-  env.verbose = args["verbose"];
-}
diff --git a/tools/testing/dart/browser_controller.dart b/tools/testing/dart/browser_controller.dart
index 6e37549..2776569 100644
--- a/tools/testing/dart/browser_controller.dart
+++ b/tools/testing/dart/browser_controller.dart
@@ -1092,6 +1092,9 @@
       if (status.currentTest.lastKnownMessage.length > 0) {
         lastKnownMessage = status.currentTest.lastKnownMessage;
       }
+      if (status.lastTest != null) {
+        lastKnownMessage += '\nPrevious test was ${status.lastTest.url}';
+      }
       // Wait until the browser is closed before reporting the test as timeout.
       // This will enable us to capture stdout/stderr from the browser
       // (which might provide us with information about what went wrong).
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 7b1e5f6..147cd99 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -52,8 +52,6 @@
     bool useSdk = configuration['use_sdk'];
     bool isCsp = configuration['csp'];
     bool useCps = configuration['cps_ir'];
-    // TODO(26060): Remove the browser multiplier when issue resolved.
-    bool isBrowser = configuration['browser'];
 
     switch (compiler) {
       case 'dart2analyzer':
@@ -70,7 +68,6 @@
             useCps: useCps,
             useSdk: useSdk,
             isCsp: isCsp,
-            isBrowser: isBrowser,
             extraDart2jsOptions:
                 TestUtils.getExtraOptions(configuration, 'dart2js_options'));
       case 'dart2app':
@@ -241,7 +238,6 @@
 class Dart2jsCompilerConfiguration extends Dart2xCompilerConfiguration {
   final bool isCsp;
   final bool useCps;
-  final bool isBrowser;
   final List<String> extraDart2jsOptions;
   // We cache the extended environment to save memory.
   static Map<String, String> cpsFlagCache;
@@ -254,7 +250,6 @@
       bool useSdk,
       bool this.useCps,
       bool this.isCsp,
-      bool this.isBrowser,
       this.extraDart2jsOptions})
       : super('dart2js',
             isDebug: isDebug,
@@ -267,7 +262,6 @@
     if (isDebug) multiplier *= 4;
     if (isChecked) multiplier *= 2;
     if (isHostChecked) multiplier *= 16;
-    if (isBrowser) multiplier *= 2;  // TODO(26060): Remove when issue fixed.
     return multiplier;
   }